Initial implementation... still buggy.

Changes

redo