haven't worked on this for a while. committing working copy. might not be stable