first working version, all but has_many* assocs