lots of refactor; almost there
there