incremental
more functionality, needs to rearrange