this topic has bee discussed often in the past please use search.
here are two reference I found useful in the past