Initial Commit

Basic implementation. Needs testing.