A Great Refactoring - Part II

Ready for interop testing with iOS