added generalized user model