Cleaned up
moved initial implementation to different namespace
renamed some more stuff, moved things around, and so on