anchor.diff:      notifyListeners();
     }
   
  +  /// Given a [UserProfileModel] which holds a list of [subscribedTopics]
  +  /// invoke [_pushNotificationDataProvider.toggleNotificationsForTopic] on each of the topics
  +  void _subscribeToPushNotificationTopics(UserProfileModel newModel) {
  +    /// turn on all saved push notifications preferences for user
  +    for (String topic in newModel.subscribedTopics) {
  +      _pushNotificationDataProvider.toggleNotificationsForTopic(topic);
  +    }
  +  }
  +
     /// Create a new user profile based on SSO info
  -  /// Subscribe students to student topics
  -  /// Subscribe users to public topics
  -  Future createNewUser(UserProfileModel profile) async {
  -    profile
  -      ..username = await getUsernameFromDevice()
  -      ..ucsdaffiliation = _authenticationModel.ucsdaffiliation
  -      ..pid = _authenticationModel.pid;
  -
  -    final pattern = RegExp('[BGJMU]');
  -    if (profile.ucsdaffiliation.contains(pattern)) {
  -      profile.classifications = Classifications.fromJson({'student': true});
  -      profile.subscribedTopics
  -          .addAll(_pushNotificationDataProvider.studentTopics());
  -    } else {
  -      profile.classifications = Classifications.fromJson({'student': false});
  -    }
  -    profile.subscribedTopics
  -        .addAll(_pushNotificationDataProvider.publicTopics());
  -    await postUserProfile(profile);
  -  }
  -
  -  /// UPLOAD USER PROFILE TO SERVER
  +  /// Subscribe students to student topics by appending to [profile]'s [subscribedTopics] list
  +  /// Subscribe users to public topics appending to [profile]'s [subscribedTopics] list
  +  /// invokes [_subscribeToPushNotificationTopics] to subscribe user to topics
  +  /// returns newly created [UserProfileModel]
  +  Future<UserProfileModel> createNewUser(UserProfileModel profile) async {
  +    try {
  +      profile.username = await getUsernameFromDevice();
  +      profile.ucsdaffiliation = _authenticationModel.ucsdaffiliation;
  +      profile.pid = _authenticationModel.pid;
  +      profile.subscribedTopics = _pushNotificationDataProvider.publicTopics();
  +      final pattern = RegExp('[BGJMU]');
  +      if ((profile.ucsdaffiliation ?? "").contains(pattern)) {
  +        profile
  +          ..classifications = Classifications.fromJson({'student': true})
  +          ..subscribedTopics
  +              .addAll(_pushNotificationDataProvider.studentTopics());
  +      } else {
  +        profile.classifications = Classifications.fromJson({'student': false});
  +      }
  +    } catch (e) {
  +      print(e.toString());
  +    }
  +    _subscribeToPushNotificationTopics(profile);
  +    return profile;
  +  }
  +
  +  /// Invoke [updateUserProfileModel] with user profile that was passed in
  +  /// If user is logged in upload [UserProfileModel] to DB
     Future postUserProfile(UserProfileModel profile) async {
       _error = null;
       _isLoading = true;
  
positive.code:     _pushNotificationDataProvider = value;
    }
  
    List<String> get subscribedTopics {
      if (isLoggedIn) {
        return _userProfileModel.subscribedTopics;
      } else {
        return _pushNotificationDataProvider.subscribedTopics();
      }
    }
  
    ///GETTERS FOR MODELS
    UserProfileModel get userProfileModel => _userProfileModel;
  
negative.code:     return false;
    }
  
    /// Authenticate a user given an username and password
    /// Upon logging in we should make sure that users has an account
    /// If the user doesn't have an account one will be made by invoking [createNewUser]
    Future<bool> login(String username, String password) async {
      bool returnVal = false;
      if ((username?.isNotEmpty ?? false) && (password?.isNotEmpty ?? false)) {
  