separated files, pushed helper functions into their own directory
add: basic tests, pending tests