First push. Untested. Compiles with 10 warnings