refactored implementations into different files
Added a README