Initial Revision - needs unit tests