Как-то не очень получается с оптимизацией, так что тут как обычно, а в комменты попробую "оптимизацию" хотя бы залить.