Переделка, основанная на этом посте: http://polit.reactor.cc/post/5141822 , а точнее на этом комментарии: http://polit.reactor.cc/post/5141822#comment25214395