Make the user model more flexible with interface and few fixes