initial modeling, probably a lot to clean up