немного улучшенная версия вот этого поста http://old.reactor.cc/post/1565881