model complete

@adw45 look over this. if it looks good, merge the request