This topic is probably a good starter for your question.
For more information please refer to this nice starting point: