checkpoint
large scale refactor, redesign