Some updates. Tried to implement cast functions, but Clang punished me for it. Left it in as comments.