finished user module as demoed in hartl ch6