Would you believe this topic has already been discussed?
Here's a possible solution.