implementation from this (http://habrahabr.ru/post/79431/) article