дописано, не тестировано (не совсем понятно, что тестировать :) )