Вы уверены, что здесь (строки 33-43) нельзя все сделать проще и короче?