Михаил В статье [ссылка заблокирована по решению администрации проекта] описано подробно и обсуждение есть смысл почитать