changed to two class approach, seems simpler