docs: function init(_$fh, _syncOptions, _mediator) {
    debug('Client init');
    if (initialized) {
      return;
    }
  
    //Assigning a single mediator for the module.
    //All data managers will use the same mediator to publish topics to.
    mediator = _mediator;
  
    $fh = _$fh;
  
    //Adding a listener that will be executed every time the notify handler is executed.
    //This listener function will send the syncNotification object (see documentation above) to the syncNotification stream, which in turn will propigate though any
    //other streams attached to it.
    function addObserverStreamListener(syncNotificationsObserver) {
      addListener(function(syncNotification) {
        syncNotificationsObserver.onNext(syncNotification);
      });
    }
  
    //Creating a single notification stream that will be used to handle all notifications from the $fh.sync API.
    syncNotificationStream = Rx.Observable.create(addObserverStreamListener).share();
  
    var syncOptions = _.defaults(_syncOptions, defaultConfig.syncOptions);
  
    //Initialising the $fh.sync API with the required options.
    $fh.sync.init(syncOptions);
    initialized = true;
  
    //Registering a notification listener with the $fh.sync API. This will be called for all data sets managed by the
    //sync framework.
    $fh.sync.notify(function(syncNotification) {
      syncNotifyListeners.forEach(function(syncNotifyListener) {
        syncNotifyListener.call(undefined, syncNotification);
      });
    });
  }