pretty much done; review later