basic design, starting to implement