lrc: adapt to API changes

Tuleap: #44
Change-Id: I0b005b7019d204e049a280819aac5f29558cafea
diff --git a/src/AccAdvancedVC.mm b/src/AccAdvancedVC.mm
index 8a3d08e..97d806e 100644
--- a/src/AccAdvancedVC.mm
+++ b/src/AccAdvancedVC.mm
@@ -126,7 +126,7 @@
     [publishedPortField setTag:PUBLICPORT_TAG];
     [publishedAddrField setTag:PUBLICADDR_TAG];
 
-    QObject::connect(AccountModel::instance()->selectionModel(),
+    QObject::connect(AccountModel::instance().selectionModel(),
                      &QItemSelectionModel::currentChanged,
                      [=](const QModelIndex &current, const QModelIndex &previous) {
                          if(!current.isValid())
@@ -138,8 +138,8 @@
 
 - (Account*) currentAccount
 {
-    auto accIdx = AccountModel::instance()->selectionModel()->currentIndex();
-    return AccountModel::instance()->getAccountByModelIndex(accIdx);
+    auto accIdx = AccountModel::instance().selectionModel()->currentIndex();
+    return AccountModel::instance().getAccountByModelIndex(accIdx);
 }
 
 - (void)loadAccount
diff --git a/src/AccAudioVC.mm b/src/AccAudioVC.mm
index 1370a38..eeda1e9 100644
--- a/src/AccAudioVC.mm
+++ b/src/AccAudioVC.mm
@@ -53,7 +53,7 @@
 - (void)awakeFromNib
 {
     NSLog(@"INIT Audio VC");
-    QObject::connect(AccountModel::instance()->selectionModel(),
+    QObject::connect(AccountModel::instance().selectionModel(),
                      &QItemSelectionModel::currentChanged,
                      [=](const QModelIndex &current, const QModelIndex &previous) {
                          if(!current.isValid())
@@ -64,8 +64,8 @@
 
 - (Account*) currentAccount
 {
-    auto accIdx = AccountModel::instance()->selectionModel()->currentIndex();
-    return AccountModel::instance()->getAccountByModelIndex(accIdx);
+    auto accIdx = AccountModel::instance().selectionModel()->currentIndex();
+    return AccountModel::instance().getAccountByModelIndex(accIdx);
 }
 
 - (void)loadAccount
diff --git a/src/AccGeneralVC.mm b/src/AccGeneralVC.mm
index e1adf4f..18a7049 100644
--- a/src/AccGeneralVC.mm
+++ b/src/AccGeneralVC.mm
@@ -86,7 +86,7 @@
     [passwordTextField setTag:PASSWORD_TAG];
     [userAgentTextField setTag:USERAGENT_TAG];
 
-    QObject::connect(AccountModel::instance()->selectionModel(),
+    QObject::connect(AccountModel::instance().selectionModel(),
                      &QItemSelectionModel::currentChanged,
                      [=](const QModelIndex &current, const QModelIndex &previous) {
                          if(!current.isValid())
@@ -97,8 +97,8 @@
 
 - (Account*) currentAccount
 {
-    auto accIdx = AccountModel::instance()->selectionModel()->currentIndex();
-    return AccountModel::instance()->getAccountByModelIndex(accIdx);
+    auto accIdx = AccountModel::instance().selectionModel()->currentIndex();
+    return AccountModel::instance().getAccountByModelIndex(accIdx);
 }
 
 - (IBAction)toggleUpnp:(NSButton *)sender {
diff --git a/src/AccRingVC.mm b/src/AccRingVC.mm
index 54e99dd..4de4378 100644
--- a/src/AccRingVC.mm
+++ b/src/AccRingVC.mm
@@ -73,7 +73,7 @@
     [userAgentTextField setTag:USERAGENT_TAG];
     [bootstrapField setTag:HOSTNAME_TAG];
 
-    QObject::connect(AccountModel::instance()->selectionModel(),
+    QObject::connect(AccountModel::instance().selectionModel(),
                      &QItemSelectionModel::currentChanged,
                      [=](const QModelIndex &current, const QModelIndex &previous) {
                          if(!current.isValid())
@@ -84,8 +84,8 @@
 
 - (Account*) currentAccount
 {
-    auto accIdx = AccountModel::instance()->selectionModel()->currentIndex();
-    return AccountModel::instance()->getAccountByModelIndex(accIdx);
+    auto accIdx = AccountModel::instance().selectionModel()->currentIndex();
+    return AccountModel::instance().getAccountByModelIndex(accIdx);
 }
 
 - (void)loadAccount
diff --git a/src/AccSecurityVC.mm b/src/AccSecurityVC.mm
index 2470c24..e8d794c 100644
--- a/src/AccSecurityVC.mm
+++ b/src/AccSecurityVC.mm
@@ -79,7 +79,7 @@
     [tlsNegotiationTimeoutStepper setTag:TLS_NEGOTIATION_TAG];
     [tlsNegotiationTimeout setTag:TLS_NEGOTIATION_TAG];
 
-    QObject::connect(AccountModel::instance()->selectionModel(),
+    QObject::connect(AccountModel::instance().selectionModel(),
                      &QItemSelectionModel::currentChanged,
                      [=](const QModelIndex &current, const QModelIndex &previous) {
                          if(!current.isValid())
@@ -90,8 +90,8 @@
 
 - (Account*) currentAccount
 {
-    auto accIdx = AccountModel::instance()->selectionModel()->currentIndex();
-    return AccountModel::instance()->getAccountByModelIndex(accIdx);
+    auto accIdx = AccountModel::instance().selectionModel()->currentIndex();
+    return AccountModel::instance().getAccountByModelIndex(accIdx);
 }
 
 - (void)loadAccount
diff --git a/src/AccVideoVC.mm b/src/AccVideoVC.mm
index 7e5ed1e..c148256 100644
--- a/src/AccVideoVC.mm
+++ b/src/AccVideoVC.mm
@@ -59,7 +59,7 @@
 - (void)awakeFromNib
 {
     NSLog(@"INIT Video VC");
-    QObject::connect(AccountModel::instance()->selectionModel(),
+    QObject::connect(AccountModel::instance().selectionModel(),
                      &QItemSelectionModel::currentChanged,
                      [=](const QModelIndex &current, const QModelIndex &previous) {
                          if(!current.isValid())
@@ -70,8 +70,8 @@
 
 - (Account*) currentAccount
 {
-    auto accIdx = AccountModel::instance()->selectionModel()->currentIndex();
-    return AccountModel::instance()->getAccountByModelIndex(accIdx);
+    auto accIdx = AccountModel::instance().selectionModel()->currentIndex();
+    return AccountModel::instance().getAccountByModelIndex(accIdx);
 }
 
 - (void)loadAccount
diff --git a/src/AccountsVC.mm b/src/AccountsVC.mm
index e520788..43594f3 100644
--- a/src/AccountsVC.mm
+++ b/src/AccountsVC.mm
@@ -104,7 +104,7 @@
 
 - (void)awakeFromNib
 {
-    treeController = [[QNSTreeController alloc] initWithQModel:AccountModel::instance()];
+    treeController = [[QNSTreeController alloc] initWithQModel:&AccountModel::instance()];
     [treeController setAvoidsEmptySelection:NO];
     [treeController setAlwaysUsesMultipleValuesMarker:YES];
     [treeController setChildrenKeyPath:@"children"];
@@ -113,7 +113,7 @@
     [accountsListView bind:@"sortDescriptors" toObject:treeController withKeyPath:@"sortDescriptors" options:nil];
     [accountsListView bind:@"selectionIndexPaths" toObject:treeController withKeyPath:@"selectionIndexPaths" options:nil];
 
-    QObject::connect(AccountModel::instance(),
+    QObject::connect(&AccountModel::instance(),
                      &QAbstractItemModel::dataChanged,
                      [=](const QModelIndex &topLeft, const QModelIndex &bottomRight) {
                         [accountsListView reloadDataForRowIndexes:
@@ -121,12 +121,12 @@
                         columnIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, accountsListView.tableColumns.count)]];
                      });
 
-    AccountModel::instance()->selectionModel()->clearCurrentIndex();
+    AccountModel::instance().selectionModel()->clearCurrentIndex();
 
-    proxyProtocolModel = new ActiveProtocolModel(AccountModel::instance()->protocolModel());
-    QModelIndex qProtocolIdx = AccountModel::instance()->protocolModel()->selectionModel()->currentIndex();
+    proxyProtocolModel = new ActiveProtocolModel(AccountModel::instance().protocolModel());
+    QModelIndex qProtocolIdx = AccountModel::instance().protocolModel()->selectionModel()->currentIndex();
     [self.protocolList addItemWithTitle:
-                           AccountModel::instance()->protocolModel()->data(qProtocolIdx, Qt::DisplayRole).toString().toNSString()];
+                           AccountModel::instance().protocolModel()->data(qProtocolIdx, Qt::DisplayRole).toString().toNSString()];
 
     self.generalVC = [[AccGeneralVC alloc] initWithNibName:@"AccGeneral" bundle:nil];
     [[self.generalVC view] setFrame:[self.generalTabItem.view frame]];
@@ -165,36 +165,36 @@
 }
 
 - (IBAction)moveUp:(id)sender {
-    AccountModel::instance()->moveUp();
+    AccountModel::instance().moveUp();
 }
 
 - (IBAction)moveDown:(id)sender {
-    AccountModel::instance()->moveDown();
+    AccountModel::instance().moveDown();
 }
 
 - (IBAction)removeAccount:(id)sender {
 
     if(treeController.selectedNodes.count > 0) {
         QModelIndex qIdx = [treeController toQIdx:[treeController selectedNodes][0]];
-        AccountModel::instance()->remove(qIdx);
-        AccountModel::instance()->save();
+        AccountModel::instance().remove(qIdx);
+        AccountModel::instance().save();
     }
 }
 - (IBAction)addAccount:(id)sender {
-    QModelIndex qIdx =  AccountModel::instance()->protocolModel()->selectionModel()->currentIndex();
+    QModelIndex qIdx =  AccountModel::instance().protocolModel()->selectionModel()->currentIndex();
 
     auto newAccName = [[NSString alloc] initWithFormat:@"%@ account",
-                AccountModel::instance()->protocolModel()->data(qIdx, Qt::DisplayRole).toString().toNSString(), nil];
-    auto acc = AccountModel::instance()->add([newAccName UTF8String], qIdx);
+                AccountModel::instance().protocolModel()->data(qIdx, Qt::DisplayRole).toString().toNSString(), nil];
+    auto acc = AccountModel::instance().add([newAccName UTF8String], qIdx);
     acc->setDisplayName(acc->alias());
-    AccountModel::instance()->save();
+    AccountModel::instance().save();
 }
 
 - (IBAction)protocolSelectedChanged:(id)sender {
 
     int index = [sender indexOfSelectedItem];
     QModelIndex proxyIdx = proxyProtocolModel->index(index, 0);
-    AccountModel::instance()->protocolModel()->selectionModel()->setCurrentIndex(
+    AccountModel::instance().protocolModel()->selectionModel()->setCurrentIndex(
                 proxyProtocolModel->mapToSource(proxyIdx), QItemSelectionModel::ClearAndSelect);
 
 }
@@ -247,8 +247,8 @@
     NSTableColumn* col = [sender.tableColumns objectAtIndex:[sender clickedColumn]];
     if([col.identifier isEqualToString:COLUMNID_ENABLE]) {
         NSInteger row = [sender clickedRow];
-        QModelIndex accIdx = AccountModel::instance()->index(row);
-        Account* toToggle = AccountModel::instance()->getAccountByModelIndex(accIdx);
+        QModelIndex accIdx = AccountModel::instance().index(row);
+        Account* toToggle = AccountModel::instance().getAccountByModelIndex(accIdx);
         NSButtonCell *cell = [col dataCellForRow:row];
         toToggle->setEnabled(cell.state == NSOnState ? NO : YES);
         toToggle << Account::EditAction::SAVE;
@@ -275,7 +275,7 @@
     QModelIndex qIdx = [treeController toQIdx:((NSTreeNode*)item)];
     // Prevent user from enabling/disabling IP2IP account
     if ([[tableColumn identifier] isEqualToString:COLUMNID_ENABLE] &&
-                            AccountModel::instance()->ip2ip()->index() == qIdx) {
+                            AccountModel::instance().ip2ip()->index() == qIdx) {
 
         return [[NSCell alloc] init];
     } else {
@@ -323,7 +323,7 @@
         cell.title = qIdx.data(Qt::DisplayRole).toString().toNSString();
     } else if([[tableColumn identifier] isEqualToString:COLUMNID_STATE]) {
         NSTextFieldCell* stateCell = cell;
-        auto account = AccountModel::instance()->getAccountByModelIndex(qIdx);
+        auto account = AccountModel::instance().getAccountByModelIndex(qIdx);
         auto humanState = account->toHumanStateName();
         [stateCell setTitle:humanState.toNSString()];
 
@@ -358,8 +358,8 @@
     if([[treeController selectedNodes] count] > 0) {
         auto qIdx = [treeController toQIdx:[treeController selectedNodes][0]];
         //Update details view
-        auto acc = AccountModel::instance()->getAccountByModelIndex(qIdx);
-        AccountModel::instance()->selectionModel()->setCurrentIndex(qIdx, QItemSelectionModel::ClearAndSelect);
+        auto acc = AccountModel::instance().getAccountByModelIndex(qIdx);
+        AccountModel::instance().selectionModel()->setCurrentIndex(qIdx, QItemSelectionModel::ClearAndSelect);
 
             switch (acc->protocol()) {
             case Account::Protocol::SIP:
@@ -381,7 +381,7 @@
         [self.accountDetailsView setHidden:NO];
     } else {
         [self.accountDetailsView setHidden:YES];
-        AccountModel::instance()->selectionModel()->clearCurrentIndex();
+        AccountModel::instance().selectionModel()->clearCurrentIndex();
     }
 }
 
@@ -390,7 +390,7 @@
 - (BOOL)menu:(NSMenu *)menu updateItem:(NSMenuItem *)item atIndex:(NSInteger)index shouldCancel:(BOOL)shouldCancel
 {
     QModelIndex proxyIdx = proxyProtocolModel->index(index, 0);
-    QModelIndex qIdx = AccountModel::instance()->protocolModel()->index(proxyProtocolModel->mapToSource(proxyIdx).row());
+    QModelIndex qIdx = AccountModel::instance().protocolModel()->index(proxyProtocolModel->mapToSource(proxyIdx).row());
     [item setTitle:qIdx.data(Qt::DisplayRole).toString().toNSString()];
 
     return YES;
diff --git a/src/AppDelegate.mm b/src/AppDelegate.mm
index cfc32c3..a20c063 100644
--- a/src/AppDelegate.mm
+++ b/src/AppDelegate.mm
@@ -63,7 +63,7 @@
 
 - (void) connect
 {
-    QObject::connect(CallModel::instance(),
+    QObject::connect(&CallModel::instance(),
                      &CallModel::incomingCall,
                      [=](Call* call) {
                          BOOL shouldComeToForeground = [[NSUserDefaults standardUserDefaults] boolForKey:Preferences::WindowBehaviour];
@@ -120,9 +120,9 @@
 - (BOOL) checkForRingAccount
 {
     BOOL foundRingAcc = NO;
-    for (int i = 0 ; i < AccountModel::instance()->rowCount() ; ++i) {
-        QModelIndex idx = AccountModel::instance()->index(i);
-        Account* acc = AccountModel::instance()->getAccountByModelIndex(idx);
+    for (int i = 0 ; i < AccountModel::instance().rowCount() ; ++i) {
+        QModelIndex idx = AccountModel::instance().index(i);
+        Account* acc = AccountModel::instance().getAccountByModelIndex(idx);
         if(acc->protocol() == Account::Protocol::RING) {
             if (acc->displayName().isEmpty())
                 acc->setDisplayName(acc->alias());
@@ -160,7 +160,7 @@
     BOOL valid = [[ringID stringByTrimmingCharactersInSet:hexSet] isEqualToString:@""];
 
     if(valid && ringID.length == 40) {
-        Call* c = CallModel::instance()->dialingCall();
+        Call* c = CallModel::instance().dialingCall();
         c->setDialNumber(QString::fromNSString([NSString stringWithFormat:@"ring:%@",ringID]));
         c << Call::Action::ACCEPT;
     } else {
@@ -185,13 +185,13 @@
 
 - (void)handleQuitEvent:(NSAppleEventDescriptor*)event withReplyEvent:(NSAppleEventDescriptor*)replyEvent
 {
-    delete CallModel::instance()->QObject::parent();
+    delete CallModel::instance().QObject::parent();
     [[NSApplication sharedApplication] terminate:self];
 }
 
 -(void)applicationWillTerminate:(NSNotification *)notification
 {
-    delete CallModel::instance()->QObject::parent();
+    delete CallModel::instance().QObject::parent();
     [[NSApplication sharedApplication] terminate:self];
 }
 
diff --git a/src/AudioPrefsVC.mm b/src/AudioPrefsVC.mm
index 25218be..67c5f2b 100644
--- a/src/AudioPrefsVC.mm
+++ b/src/AudioPrefsVC.mm
@@ -57,55 +57,55 @@
 {
     [super loadView];
 
-    QModelIndex qInputIdx = Audio::Settings::instance()->inputDeviceModel()->selectionModel()->currentIndex();
-    QModelIndex qOutputIdx = Audio::Settings::instance()->outputDeviceModel()->selectionModel()->currentIndex();
+    QModelIndex qInputIdx = Audio::Settings::instance().inputDeviceModel()->selectionModel()->currentIndex();
+    QModelIndex qOutputIdx = Audio::Settings::instance().outputDeviceModel()->selectionModel()->currentIndex();
     
     [self.outputDeviceList addItemWithTitle:
-            Audio::Settings::instance()->outputDeviceModel()->data(qOutputIdx, Qt::DisplayRole).toString().toNSString()];
+            Audio::Settings::instance().outputDeviceModel()->data(qOutputIdx, Qt::DisplayRole).toString().toNSString()];
 
     [self.inputDeviceList addItemWithTitle:
-            Audio::Settings::instance()->inputDeviceModel()->data(qInputIdx, Qt::DisplayRole).toString().toNSString()];
+            Audio::Settings::instance().inputDeviceModel()->data(qInputIdx, Qt::DisplayRole).toString().toNSString()];
     [self.alwaysRecordingButton setState:
-            Media::RecordingModel::instance()->isAlwaysRecording() ? NSOnState:NSOffState];
+            Media::RecordingModel::instance().isAlwaysRecording() ? NSOnState:NSOffState];
 
     [self.muteDTMFButton setState:
-            Audio::Settings::instance()->areDTMFMuted()?NSOnState:NSOffState];
+            Audio::Settings::instance().areDTMFMuted()?NSOnState:NSOffState];
 
-    if([[Media::RecordingModel::instance()->recordPath().toNSURL() absoluteString] isEqualToString:@""]) {
+    if([[Media::RecordingModel::instance().recordPath().toNSURL() absoluteString] isEqualToString:@""]) {
         NSArray * pathComponentArray = [self pathComponentArray];
         [recordingsPathControl setPathComponentCells:pathComponentArray];
     } else {
-        [recordingsPathControl setURL:Media::RecordingModel::instance()->recordPath().toNSURL()];
+        [recordingsPathControl setURL:Media::RecordingModel::instance().recordPath().toNSURL()];
     }
 }
 
 - (IBAction)toggleMuteDTMF:(NSButton *)sender
 {
-    Audio::Settings::instance()->setDTMFMuted([sender state] == NSOnState);
+    Audio::Settings::instance().setDTMFMuted([sender state] == NSOnState);
 }
 
 - (IBAction)toggleAlwaysRecording:(NSButton *)sender
 {
-    Media::RecordingModel::instance()->setAlwaysRecording([sender state] == NSOnState);
+    Media::RecordingModel::instance().setAlwaysRecording([sender state] == NSOnState);
 }
 
 - (IBAction)pathControlSingleClick:(id)sender {
     // Select that chosen component of the path.
     [self.recordingsPathControl setURL:[[self.recordingsPathControl clickedPathComponentCell] URL]];
-    Media::RecordingModel::instance()->setRecordPath(QUrl::fromNSURL(self.recordingsPathControl.URL));
+    Media::RecordingModel::instance().setRecordPath(QUrl::fromNSURL(self.recordingsPathControl.URL));
 }
 
 - (IBAction)chooseOutput:(id)sender {
     int index = [sender indexOfSelectedItem];
-    QModelIndex qIdx = Audio::Settings::instance()->outputDeviceModel()->index(index, 0);
-    Audio::Settings::instance()->outputDeviceModel()->selectionModel()->setCurrentIndex(
+    QModelIndex qIdx = Audio::Settings::instance().outputDeviceModel()->index(index, 0);
+    Audio::Settings::instance().outputDeviceModel()->selectionModel()->setCurrentIndex(
                                                     qIdx, QItemSelectionModel::ClearAndSelect);
 }
 
 - (IBAction)chooseInput:(id)sender {
     int index = [sender indexOfSelectedItem];
-    QModelIndex qIdx = Audio::Settings::instance()->inputDeviceModel()->index(index, 0);
-    Audio::Settings::instance()->inputDeviceModel()->selectionModel()->setCurrentIndex(
+    QModelIndex qIdx = Audio::Settings::instance().inputDeviceModel()->index(index, 0);
+    Audio::Settings::instance().inputDeviceModel()->selectionModel()->setCurrentIndex(
                                                     qIdx, QItemSelectionModel::ClearAndSelect);
 }
 
@@ -191,12 +191,12 @@
 
     if([menu.title isEqualToString:@"inputlist"])
     {
-        qIdx = Audio::Settings::instance()->inputDeviceModel()->index(index);
-        [item setTitle:Audio::Settings::instance()->inputDeviceModel()->data(qIdx, Qt::DisplayRole).toString().toNSString()];
+        qIdx = Audio::Settings::instance().inputDeviceModel()->index(index);
+        [item setTitle:Audio::Settings::instance().inputDeviceModel()->data(qIdx, Qt::DisplayRole).toString().toNSString()];
     } else
     {
-        qIdx = Audio::Settings::instance()->outputDeviceModel()->index(index);
-        [item setTitle:Audio::Settings::instance()->outputDeviceModel()->data(qIdx, Qt::DisplayRole).toString().toNSString()];
+        qIdx = Audio::Settings::instance().outputDeviceModel()->index(index);
+        [item setTitle:Audio::Settings::instance().outputDeviceModel()->data(qIdx, Qt::DisplayRole).toString().toNSString()];
     }
 
     return YES;
@@ -205,9 +205,9 @@
 - (NSInteger)numberOfItemsInMenu:(NSMenu *)menu
 {
     if([menu.title isEqualToString:@"inputlist"])
-        return Audio::Settings::instance()->inputDeviceModel()->rowCount();
+        return Audio::Settings::instance().inputDeviceModel()->rowCount();
     else
-        return Audio::Settings::instance()->outputDeviceModel()->rowCount();
+        return Audio::Settings::instance().outputDeviceModel()->rowCount();
 }
 
 @end
diff --git a/src/BitrateVC.mm b/src/BitrateVC.mm
index eff8ef3..2d9aa82 100644
--- a/src/BitrateVC.mm
+++ b/src/BitrateVC.mm
@@ -47,7 +47,7 @@
 - (void)viewWillAppear
 {
     // Get the first video codec of the selected call and use this value as default
-    auto selectedCall = CallModel::instance()->selectedCall();
+    auto selectedCall = CallModel::instance().selectedCall();
     if (selectedCall) {
         int bitrate = selectedCall->account()->codecModel()->videoCodecs()->index(0,0).data(static_cast<int>(CodecModel::Role::BITRATE)).toInt();
         [self.bitrateSlider setNumberOfTickMarks:4];
@@ -58,7 +58,7 @@
 
 - (IBAction)valueChanged:(id)sender
 {
-    if (const auto& codecModel = CallModel::instance()->selectedCall()->account()->codecModel()) {
+    if (const auto& codecModel = CallModel::instance().selectedCall()->account()->codecModel()) {
         const auto& videoCodecs = codecModel->videoCodecs();
         for (int i=0; i < videoCodecs->rowCount();i++) {
             const auto& idx = videoCodecs->index(i,0);
diff --git a/src/ChatVC.mm b/src/ChatVC.mm
index baf0560..b09314a 100644
--- a/src/ChatVC.mm
+++ b/src/ChatVC.mm
@@ -72,7 +72,7 @@
 
     mediaHolder = [[MediaConnectionsHolder alloc] init];
 
-    QObject::connect(CallModel::instance()->selectionModel(),
+    QObject::connect(CallModel::instance().selectionModel(),
                      &QItemSelectionModel::currentChanged,
                      [=](const QModelIndex &current, const QModelIndex &previous) {
                          [self setupChat];
@@ -90,12 +90,12 @@
     QObject::disconnect(mediaHolder.newMediaAdded);
     QObject::disconnect(mediaHolder.newMessage);
 
-    QModelIndex callIdx = CallModel::instance()->selectionModel()->currentIndex();
+    QModelIndex callIdx = CallModel::instance().selectionModel()->currentIndex();
 
     if (!callIdx.isValid())
         return;
 
-    Call* call = CallModel::instance()->getCall(callIdx);
+    Call* call = CallModel::instance().getCall(callIdx);
 
     /* check if text media is already present */
     if (call->hasMedia(Media::Media::Type::TEXT, Media::Media::Direction::IN)) {
@@ -173,8 +173,8 @@
 
 - (IBAction)sendMessage:(id)sender {
 
-    QModelIndex callIdx = CallModel::instance()->selectionModel()->currentIndex();
-    Call* call = CallModel::instance()->getCall(callIdx);
+    QModelIndex callIdx = CallModel::instance().selectionModel()->currentIndex();
+    Call* call = CallModel::instance().getCall(callIdx);
 
     /* make sure there is text to send */
     NSString* text = self.message;
diff --git a/src/CurrentCallVC.mm b/src/CurrentCallVC.mm
index 1de6e63..b6dc35e 100644
--- a/src/CurrentCallVC.mm
+++ b/src/CurrentCallVC.mm
@@ -100,14 +100,14 @@
 
 - (void) updateAllActions
 {
-    for(int i = 0 ; i <= CallModel::instance()->userActionModel()->rowCount() ; i++) {
+    for(int i = 0 ; i <= CallModel::instance().userActionModel()->rowCount() ; i++) {
         [self updateActionAtIndex:i];
     }
 }
 
 - (void) updateActionAtIndex:(int) row
 {
-    const QModelIndex& idx = CallModel::instance()->userActionModel()->index(row,0);
+    const QModelIndex& idx = CallModel::instance().userActionModel()->index(row,0);
     UserActionModel::Action action = qvariant_cast<UserActionModel::Action>(idx.data(UserActionModel::Role::ACTION));
     NSButton* a = actionHash[(int) action];
     if (a) {
@@ -118,7 +118,7 @@
 
 -(void) updateCall
 {
-    QModelIndex callIdx = CallModel::instance()->selectionModel()->currentIndex();
+    QModelIndex callIdx = CallModel::instance().selectionModel()->currentIndex();
     if (!callIdx.isValid()) {
         return;
     }
@@ -225,7 +225,7 @@
 
 - (void) connect
 {
-    QObject::connect(CallModel::instance()->selectionModel(),
+    QObject::connect(CallModel::instance().selectionModel(),
                      &QItemSelectionModel::currentChanged,
                      [=](const QModelIndex &current, const QModelIndex &previous) {
                          if(!current.isValid()) {
@@ -233,7 +233,7 @@
                              return;
                          }
 
-                         auto call = CallModel::instance()->getCall(current);
+                         auto call = CallModel::instance().getCall(current);
                          if (call->state() == Call::State::HOLD) {
                              call << Call::Action::HOLD;
                          }
@@ -244,7 +244,7 @@
                          [self animateOut];
                      });
 
-    QObject::connect(CallModel::instance()->userActionModel(),
+    QObject::connect(CallModel::instance().userActionModel(),
                      &QAbstractItemModel::dataChanged,
                      [=](const QModelIndex &topLeft, const QModelIndex &bottomRight) {
                          const int first(topLeft.row()),last(bottomRight.row());
@@ -253,7 +253,7 @@
                          }
                      });
 
-    QObject::connect(CallModel::instance(),
+    QObject::connect(&CallModel::instance(),
                      &CallModel::callStateChanged,
                      [self](Call* c, Call::State state) {
                          [self updateCall];
@@ -274,8 +274,8 @@
 
 -(void) connectVideoSignals
 {
-    QModelIndex idx = CallModel::instance()->selectionModel()->currentIndex();
-    Call* call = CallModel::instance()->getCall(idx);
+    QModelIndex idx = CallModel::instance().selectionModel()->currentIndex();
+    Call* call = CallModel::instance().getCall(idx);
     self.videoStarted = QObject::connect(call,
                      &Call::videoStarted,
                      [=](Video::Renderer* renderer) {
@@ -297,29 +297,29 @@
     QObject::disconnect(previewHolder.frameUpdated);
     QObject::disconnect(previewHolder.stopped);
     QObject::disconnect(previewHolder.started);
-    previewHolder.started = QObject::connect(Video::PreviewManager::instance(),
+    previewHolder.started = QObject::connect(&Video::PreviewManager::instance(),
                      &Video::PreviewManager::previewStarted,
                      [=](Video::Renderer* renderer) {
                          QObject::disconnect(previewHolder.frameUpdated);
                          previewHolder.frameUpdated = QObject::connect(renderer,
                                                                        &Video::Renderer::frameUpdated,
                                                                        [=]() {
-                                                                           [self renderer:Video::PreviewManager::instance()->previewRenderer()
+                                                                           [self renderer:Video::PreviewManager::instance().previewRenderer()
                                                                        renderFrameForView:previewView];
                                                                        });
                      });
 
-    previewHolder.stopped = QObject::connect(Video::PreviewManager::instance(),
+    previewHolder.stopped = QObject::connect(&Video::PreviewManager::instance(),
                      &Video::PreviewManager::previewStopped,
                      [=](Video::Renderer* renderer) {
                          QObject::disconnect(previewHolder.frameUpdated);
                         [previewView.layer setContents:nil];
                      });
 
-    previewHolder.frameUpdated = QObject::connect(Video::PreviewManager::instance()->previewRenderer(),
+    previewHolder.frameUpdated = QObject::connect(Video::PreviewManager::instance().previewRenderer(),
                                                  &Video::Renderer::frameUpdated,
                                                  [=]() {
-                                                     [self renderer:Video::PreviewManager::instance()->previewRenderer()
+                                                     [self renderer:Video::PreviewManager::instance().previewRenderer()
                                                             renderFrameForView:previewView];
                                                  });
 }
@@ -416,23 +416,23 @@
 
         [self connectVideoSignals];
         /* check if text media is already present */
-        if(!CallModel::instance()->selectedCall())
+        if(!CallModel::instance().selectedCall())
             return;
 
-        QObject::connect(CallModel::instance()->selectedCall(),
+        QObject::connect(CallModel::instance().selectedCall(),
                             &Call::changed,
                             [=]() {
                                 [self updateCall];
                             });
-        if (CallModel::instance()->selectedCall()->hasMedia(Media::Media::Type::TEXT, Media::Media::Direction::IN)) {
-            Media::Text *text = CallModel::instance()->selectedCall()->firstMedia<Media::Text>(Media::Media::Direction::IN);
+        if (CallModel::instance().selectedCall()->hasMedia(Media::Media::Type::TEXT, Media::Media::Direction::IN)) {
+            Media::Text *text = CallModel::instance().selectedCall()->firstMedia<Media::Text>(Media::Media::Direction::IN);
             [self monitorIncomingTextMessages:text];
-        } else if (CallModel::instance()->selectedCall()->hasMedia(Media::Media::Type::TEXT, Media::Media::Direction::OUT)) {
-            Media::Text *text = CallModel::instance()->selectedCall()->firstMedia<Media::Text>(Media::Media::Direction::OUT);
+        } else if (CallModel::instance().selectedCall()->hasMedia(Media::Media::Type::TEXT, Media::Media::Direction::OUT)) {
+            Media::Text *text = CallModel::instance().selectedCall()->firstMedia<Media::Text>(Media::Media::Direction::OUT);
             [self monitorIncomingTextMessages:text];
         } else {
             /* monitor media for messaging text messaging */
-            self.mediaAddedConnection = QObject::connect(CallModel::instance()->selectedCall(),
+            self.mediaAddedConnection = QObject::connect(CallModel::instance().selectedCall(),
                                                          &Call::mediaAdded,
                                                          [self] (Media::Media* media) {
                                                              if (media->type() == Media::Media::Type::TEXT) {                                                                     [self monitorIncomingTextMessages:(Media::Text*)media];
@@ -463,7 +463,7 @@
     NSLog(@"animateOut");
     if(self.view.frame.origin.x < 0) {
         NSLog(@"Already hidden");
-        if (CallModel::instance()->selectionModel()->currentIndex().isValid()) {
+        if (CallModel::instance().selectionModel()->currentIndex().isValid()) {
             [self animateIn];
         }
         return;
@@ -481,7 +481,7 @@
         [self.view setHidden:YES];
         // first make sure everything is disconnected
         [self cleanUp];
-        if (CallModel::instance()->selectionModel()->currentIndex().isValid()) {
+        if (CallModel::instance().selectionModel()->currentIndex().isValid()) {
             [self animateIn];
         }
     }];
@@ -533,7 +533,7 @@
 #pragma mark - Button methods
 
 - (IBAction)addToContact:(NSButton*) sender {
-    auto contactmethod = CallModel::instance()->getCall(CallModel::instance()->selectionModel()->currentIndex())->peerContactMethod();
+    auto contactmethod = CallModel::instance().getCall(CallModel::instance().selectionModel()->currentIndex())->peerContactMethod();
 
     if (self.addToContactPopover != nullptr) {
         [self.addToContactPopover performClose:self];
@@ -556,19 +556,19 @@
 }
 
 - (IBAction)hangUp:(id)sender {
-    CallModel::instance()->getCall(CallModel::instance()->selectionModel()->currentIndex()) << Call::Action::REFUSE;
+    CallModel::instance().getCall(CallModel::instance().selectionModel()->currentIndex()) << Call::Action::REFUSE;
 }
 
 - (IBAction)accept:(id)sender {
-    CallModel::instance()->getCall(CallModel::instance()->selectionModel()->currentIndex()) << Call::Action::ACCEPT;
+    CallModel::instance().getCall(CallModel::instance().selectionModel()->currentIndex()) << Call::Action::ACCEPT;
 }
 
 - (IBAction)toggleRecording:(id)sender {
-    CallModel::instance()->getCall(CallModel::instance()->selectionModel()->currentIndex()) << Call::Action::RECORD_AUDIO;
+    CallModel::instance().getCall(CallModel::instance().selectionModel()->currentIndex()) << Call::Action::RECORD_AUDIO;
 }
 
 - (IBAction)toggleHold:(id)sender {
-    CallModel::instance()->getCall(CallModel::instance()->selectionModel()->currentIndex()) << Call::Action::HOLD;
+    CallModel::instance().getCall(CallModel::instance().selectionModel()->currentIndex()) << Call::Action::HOLD;
 }
 
 -(IBAction)toggleChat:(id)sender;
@@ -576,7 +576,7 @@
     BOOL rightViewCollapsed = [[self splitView] isSubviewCollapsed:[[[self splitView] subviews] objectAtIndex: 1]];
     if (rightViewCollapsed) {
         [self uncollapseRightView];
-        CallModel::instance()->getCall(CallModel::instance()->selectionModel()->currentIndex())->addOutgoingMedia<Media::Text>();
+        CallModel::instance().getCall(CallModel::instance().selectionModel()->currentIndex())->addOutgoingMedia<Media::Text>();
     } else {
         [self collapseRightView];
     }
@@ -585,13 +585,13 @@
 
 - (IBAction)muteAudio:(id)sender
 {
-    UserActionModel* uam = CallModel::instance()->userActionModel();
+    UserActionModel* uam = CallModel::instance().userActionModel();
     uam << UserActionModel::Action::MUTE_AUDIO;
 }
 
 - (IBAction)muteVideo:(id)sender
 {
-    UserActionModel* uam = CallModel::instance()->userActionModel();
+    UserActionModel* uam = CallModel::instance().userActionModel();
     uam << UserActionModel::Action::MUTE_VIDEO;
 }
 - (IBAction)displayQualityPopUp:(id)sender {
diff --git a/src/GeneralPrefsVC.mm b/src/GeneralPrefsVC.mm
index a9f88e6..faf6124 100644
--- a/src/GeneralPrefsVC.mm
+++ b/src/GeneralPrefsVC.mm
@@ -84,7 +84,7 @@
 }
 
 - (IBAction)clearHistory:(id)sender {
-    CategorizedHistoryModel::instance()->clearAllCollections();
+    CategorizedHistoryModel::instance().clearAllCollections();
     [historyChangedLabel setHidden:NO];
 }
 
diff --git a/src/HistoryVC.mm b/src/HistoryVC.mm
index 028f398..f111ec0 100644
--- a/src/HistoryVC.mm
+++ b/src/HistoryVC.mm
@@ -52,8 +52,8 @@
 - (void)awakeFromNib
 {
     NSLog(@"INIT HVC");
-    historyProxyModel = new QSortFilterProxyModel(CategorizedHistoryModel::instance());
-    historyProxyModel->setSourceModel(CategorizedHistoryModel::instance());
+    historyProxyModel = new QSortFilterProxyModel(&CategorizedHistoryModel::instance());
+    historyProxyModel->setSourceModel(&CategorizedHistoryModel::instance());
     historyProxyModel->setSortRole(static_cast<int>(Call::Role::Date));
     historyProxyModel->sort(0,Qt::DescendingOrder);
     treeController = [[QNSTreeController alloc] initWithQModel:historyProxyModel];
@@ -69,7 +69,7 @@
     [historyView setContextMenuDelegate:self];
     [historyView setShortcutsDelegate:self];
 
-    QObject::connect(CallModel::instance(),
+    QObject::connect(&CallModel::instance(),
                      &CategorizedHistoryModel::dataChanged,
                      [=](const QModelIndex &topLeft, const QModelIndex &bottomRight) {
                          [historyView reloadDataForRowIndexes:
@@ -98,7 +98,7 @@
         QVariant var = historyProxyModel->data(qIdx, (int)Call::Role::ContactMethod);
         ContactMethod* m = qvariant_cast<ContactMethod*>(var);
         if(m){
-            Call* c = CallModel::instance()->dialingCall();
+            Call* c = CallModel::instance().dialingCall();
             c->setPeerContactMethod(m);
             c << Call::Action::ACCEPT;
         }
diff --git a/src/PersonLinkerVC.mm b/src/PersonLinkerVC.mm
index 3e0ba7f..24ce583 100644
--- a/src/PersonLinkerVC.mm
+++ b/src/PersonLinkerVC.mm
@@ -83,7 +83,7 @@
 
     [categoryComboBox selectItemAtIndex:0];
 
-    contactProxyModel = new OnlyPersonProxyModel(PersonModel::instance());
+    contactProxyModel = new OnlyPersonProxyModel(&PersonModel::instance());
     contactProxyModel->setSortRole(static_cast<int>(Qt::DisplayRole));
     contactProxyModel->sort(0,Qt::AscendingOrder);
     contactProxyModel->setFilterRole(Qt::DisplayRole);
@@ -104,9 +104,9 @@
 - (IBAction)addToContact:(id)sender
 {
     /* get the selected number category */
-    const auto& idx = NumberCategoryModel::instance()->index([categoryComboBox indexOfSelectedItem]);
+    const auto& idx = NumberCategoryModel::instance().index([categoryComboBox indexOfSelectedItem]);
     if (idx.isValid()) {
-        auto category = NumberCategoryModel::instance()->getCategory(idx.data().toString());
+        auto category = NumberCategoryModel::instance().getCategory(idx.data().toString());
         self.methodToLink->setCategory(category);
     }
 
@@ -151,9 +151,9 @@
 - (IBAction)createContact:(id)sender
 {
     /* get the selected number category */
-    const auto& idx = NumberCategoryModel::instance()->index([categoryComboBox indexOfSelectedItem]);
+    const auto& idx = NumberCategoryModel::instance().index([categoryComboBox indexOfSelectedItem]);
     if (idx.isValid()) {
-        auto category = NumberCategoryModel::instance()->getCategory(idx.data().toString());
+        auto category = NumberCategoryModel::instance().getCategory(idx.data().toString());
         self.methodToLink->setCategory(category);
     }
 
@@ -167,7 +167,7 @@
     numbers << self.methodToLink;
     p->setContactMethods(numbers);
     self.methodToLink->setPerson(p);
-    PersonModel::instance()->addNewPerson(p);
+    PersonModel::instance().addNewPerson(p);
     [self.contactLinkedDelegate contactLinked];
 }
 
@@ -257,12 +257,12 @@
 
 - (NSInteger)numberOfItemsInComboBox:(NSComboBox *)aComboBox
 {
-    return NumberCategoryModel::instance()->rowCount();
+    return NumberCategoryModel::instance().rowCount();
 }
 
 - (id)comboBox:(NSComboBox *)aComboBox objectValueForItemAtIndex:(NSInteger)index
 {
-    return NumberCategoryModel::instance()->index(index).data().toString().toNSString();
+    return NumberCategoryModel::instance().index(index).data().toString().toNSString();
 }
 
 @end
diff --git a/src/PersonsVC.mm b/src/PersonsVC.mm
index 870be2c..170a3c1 100644
--- a/src/PersonsVC.mm
+++ b/src/PersonsVC.mm
@@ -74,7 +74,7 @@
 -(void) awakeFromNib
 {
     NSLog(@"INIT PersonsVC");
-    contactProxyModel = new ReachablePersonModel(CategorizedContactModel::instance());
+    contactProxyModel = new ReachablePersonModel(&CategorizedContactModel::instance());
     contactProxyModel->setSortRole(static_cast<int>(Qt::DisplayRole));
     contactProxyModel->sort(0,Qt::AscendingOrder);
     treeController = [[QNSTreeController alloc] initWithQModel:contactProxyModel];
@@ -88,7 +88,7 @@
     [personsView setTarget:self];
     [personsView setDoubleAction:@selector(callContact:)];
 
-    CategorizedContactModel::instance()->setUnreachableHidden(YES);
+    CategorizedContactModel::instance().setUnreachableHidden(YES);
 }
 
 - (void) dealloc
@@ -119,7 +119,7 @@
         }
 
         if(m){
-            Call* c = CallModel::instance()->dialingCall();
+            Call* c = CallModel::instance().dialingCall();
             c->setPeerContactMethod(m);
             c << Call::Action::ACCEPT;
         }
diff --git a/src/PreferencesWC.mm b/src/PreferencesWC.mm
index 754ec1c..c32e96a 100644
--- a/src/PreferencesWC.mm
+++ b/src/PreferencesWC.mm
@@ -51,7 +51,7 @@
 
 - (void)windowWillClose:(NSNotification *)notification
 {
-    AccountModel::instance()->save();
+    AccountModel::instance().save();
 }
 
 - (IBAction)displayGeneral:(NSToolbarItem *)sender
diff --git a/src/RingWindowController.mm b/src/RingWindowController.mm
index b6a0166..ae715be 100644
--- a/src/RingWindowController.mm
+++ b/src/RingWindowController.mm
@@ -58,7 +58,7 @@
     [self updateRingID];
 
     // Update Ring ID label based on account model changes
-    QObject::connect(AccountModel::instance(),
+    QObject::connect(&AccountModel::instance(),
                      &AccountModel::dataChanged,
                      [=] {
                          [self updateRingID];
@@ -76,7 +76,7 @@
     Account* finalChoice = nullptr;
 
     [ringIDLabel setStringValue:@""];
-    auto ringList = AccountModel::instance()->getAccountsByProtocol(Account::Protocol::RING);
+    auto ringList = AccountModel::instance().getAccountsByProtocol(Account::Protocol::RING);
     for (int i = 0 ; i < ringList.size() && !registered ; ++i) {
         Account* acc = ringList.value(i);
         if (acc->isEnabled()) {
diff --git a/src/RingWizardWC.mm b/src/RingWizardWC.mm
index 5377104..2aa7ca8 100644
--- a/src/RingWizardWC.mm
+++ b/src/RingWizardWC.mm
@@ -62,11 +62,11 @@
     [self.window setLevel:NSStatusWindowLevel];
     [self.window makeMainWindow];
     if(![self checkForRingAccount]) {
-        accountToCreate = AccountModel::instance()->add("", Account::Protocol::RING);
+        accountToCreate = AccountModel::instance().add("", Account::Protocol::RING);
     } else {
         [indicationLabel setStringValue:NSLocalizedString(@"Ring is already ready to work",
                                                           @"Display message to user")];
-        auto accList = AccountModel::instance()->getAccountsByProtocol(Account::Protocol::RING);
+        auto accList = AccountModel::instance().getAccountsByProtocol(Account::Protocol::RING);
         [self displayHash:accList[0]->username().toNSString()];
     }
 
@@ -77,9 +77,9 @@
 
 - (BOOL) checkForRingAccount
 {
-    for (int i = 0 ; i < AccountModel::instance()->rowCount() ; ++i) {
-        QModelIndex idx = AccountModel::instance()->index(i);
-        Account* acc = AccountModel::instance()->getAccountByModelIndex(idx);
+    for (int i = 0 ; i < AccountModel::instance().rowCount() ; ++i) {
+        QModelIndex idx = AccountModel::instance().index(i);
+        Account* acc = AccountModel::instance().getAccountByModelIndex(idx);
         if(acc->protocol() == Account::Protocol::RING) {
             return YES;
         }
@@ -116,7 +116,7 @@
     [indicationLabel setStringValue:NSLocalizedString(@"Just a moment...",
                                                       @"Indication for user")];
 
-    QModelIndex qIdx =  AccountModel::instance()->protocolModel()->selectionModel()->currentIndex();
+    QModelIndex qIdx =  AccountModel::instance().protocolModel()->selectionModel()->currentIndex();
 
     [self setCallback];
     if (isExpanded) {
@@ -149,7 +149,7 @@
 
 - (void) setCallback
 {
-    QObject::connect(AccountModel::instance(),
+    QObject::connect(&AccountModel::instance(),
                      &AccountModel::accountStateChanged,
                      [=](Account *account, const Account::RegistrationState state) {
                          NSLog(@"Account created!");
diff --git a/src/SmartViewVC.mm b/src/SmartViewVC.mm
index 3bea943..b04a39f 100644
--- a/src/SmartViewVC.mm
+++ b/src/SmartViewVC.mm
@@ -67,7 +67,7 @@
     NSLog(@"INIT SmartView VC");
 
     isShowingContacts = false;
-    treeController = [[QNSTreeController alloc] initWithQModel:RecentModel::instance()->peopleProxy()];
+    treeController = [[QNSTreeController alloc] initWithQModel:RecentModel::instance().peopleProxy()];
 
     [treeController setAvoidsEmptySelection:NO];
     [treeController setChildrenKeyPath:@"children"];
@@ -78,7 +78,7 @@
     [smartView setTarget:self];
     [smartView setDoubleAction:@selector(placeCall:)];
 
-    QObject::connect(RecentModel::instance()->peopleProxy(),
+    QObject::connect(RecentModel::instance().peopleProxy(),
                      &QAbstractItemModel::dataChanged,
                      [self](const QModelIndex &topLeft, const QModelIndex &bottomRight) {
                          for(int row = topLeft.row() ; row <= bottomRight.row() ; ++row)
@@ -124,8 +124,8 @@
 
     // Before calling check if we properly extracted a contact method and that
     // there is NOT already an ongoing call for this index (e.g: no children for this node)
-    if(m && !RecentModel::instance()->peopleProxy()->index(0, 0, qIdx).isValid()){
-        Call* c = CallModel::instance()->dialingCall();
+    if(m && !RecentModel::instance().peopleProxy()->index(0, 0, qIdx).isValid()){
+        Call* c = CallModel::instance().dialingCall();
         c->setPeerContactMethod(m);
         c << Call::Action::ACCEPT;
 
@@ -185,19 +185,19 @@
 - (void)outlineViewSelectionDidChange:(NSNotification *)notification
 {
     if ([treeController selectedNodes].count <= 0) {
-        CallModel::instance()->selectionModel()->clearCurrentIndex();
+        CallModel::instance().selectionModel()->clearCurrentIndex();
         return;
     }
 
     QModelIndex qIdx = [treeController toQIdx:[treeController selectedNodes][0]];
 
     // ask the tree controller for the current selection
-    if (auto selected = RecentModel::instance()->getActiveCall(RecentModel::instance()->peopleProxy()->mapToSource(qIdx))) {
-        CallModel::instance()->selectCall(selected);
-    } else if (auto selected = RecentModel::instance()->getActiveCall(RecentModel::instance()->peopleProxy()->mapToSource(qIdx.parent()))){
-        CallModel::instance()->selectCall(selected);
+    if (auto selected = RecentModel::instance().getActiveCall(RecentModel::instance().peopleProxy()->mapToSource(qIdx))) {
+        CallModel::instance().selectCall(selected);
+    } else if (auto selected = RecentModel::instance().getActiveCall(RecentModel::instance().peopleProxy()->mapToSource(qIdx.parent()))){
+        CallModel::instance().selectCall(selected);
     } else {
-        CallModel::instance()->selectionModel()->clearCurrentIndex();
+        CallModel::instance().selectionModel()->clearCurrentIndex();
     }
 }
 
@@ -213,7 +213,7 @@
 
         [((ContextualTableCellView*) result) setContextualsControls:[NSMutableArray arrayWithObject:[result viewWithTag:CALL_BUTTON_TAG]]];
 
-        if (auto call = RecentModel::instance()->getActiveCall(RecentModel::instance()->peopleProxy()->mapToSource(qIdx))) {
+        if (auto call = RecentModel::instance().getActiveCall(RecentModel::instance().peopleProxy()->mapToSource(qIdx))) {
             [details setStringValue:call->roleData((int)Ring::Role::FormattedState).toString().toNSString()];
             [((ContextualTableCellView*) result) setActiveState:YES];
         } else {
@@ -246,7 +246,7 @@
 - (IBAction)hangUpClickedAtRow:(id)sender {
     NSInteger row = [smartView rowForView:sender];
     [smartView selectRowIndexes:[NSIndexSet indexSetWithIndex:row] byExtendingSelection:NO];
-    CallModel::instance()->getCall(CallModel::instance()->selectionModel()->currentIndex()) << Call::Action::REFUSE;
+    CallModel::instance().getCall(CallModel::instance().selectionModel()->currentIndex()) << Call::Action::REFUSE;
 }
 
 /* View Based OutlineView: See the delegate method -tableView:rowViewForRow: in NSTableView.
@@ -279,7 +279,7 @@
 
 - (void) placeCallFromSearchField
 {
-    Call* c = CallModel::instance()->dialingCall();
+    Call* c = CallModel::instance().dialingCall();
     // check for a valid ring hash
     NSCharacterSet *hexSet = [NSCharacterSet characterSetWithCharactersInString:@"0123456789abcdefABCDEF"];
     BOOL valid = [[[searchField stringValue] stringByTrimmingCharactersInSet:hexSet] isEqualToString:@""];
@@ -293,7 +293,7 @@
     c << Call::Action::ACCEPT;
 
     [searchField setStringValue:@""];
-    RecentModel::instance()->peopleProxy()->
+    RecentModel::instance().peopleProxy()->
     setFilterRegExp(QRegExp(QString::fromNSString([searchField stringValue]), Qt::CaseInsensitive, QRegExp::FixedString));
 }
 
@@ -313,7 +313,7 @@
 
 - (void)controlTextDidChange:(NSNotification *) notification
 {
-    RecentModel::instance()->peopleProxy()->
+    RecentModel::instance().peopleProxy()->
     setFilterRegExp(QRegExp(QString::fromNSString([searchField stringValue]), Qt::CaseInsensitive, QRegExp::FixedString));
 }
 
diff --git a/src/VideoPrefsVC.mm b/src/VideoPrefsVC.mm
index bef9273..b098e6c 100644
--- a/src/VideoPrefsVC.mm
+++ b/src/VideoPrefsVC.mm
@@ -66,20 +66,20 @@
 {
     [super loadView];
 
-    Video::ConfigurationProxy::deviceModel()->rowCount();
-    Video::ConfigurationProxy::resolutionModel()->rowCount();
-    Video::ConfigurationProxy::rateModel()->rowCount();
+    Video::ConfigurationProxy::deviceModel().rowCount();
+    Video::ConfigurationProxy::resolutionModel().rowCount();
+    Video::ConfigurationProxy::rateModel().rowCount();
 
-    QModelIndex qDeviceIdx = Video::ConfigurationProxy::deviceSelectionModel()->currentIndex();
-    qDeviceIdx = Video::ConfigurationProxy::deviceSelectionModel()->currentIndex();
+    QModelIndex qDeviceIdx = Video::ConfigurationProxy::deviceSelectionModel().currentIndex();
+    qDeviceIdx = Video::ConfigurationProxy::deviceSelectionModel().currentIndex();
 
-    [videoDevicesList addItemWithTitle:Video::ConfigurationProxy::deviceModel()->data(qDeviceIdx, Qt::DisplayRole).toString().toNSString()];
+    [videoDevicesList addItemWithTitle:Video::ConfigurationProxy::deviceModel().data(qDeviceIdx, Qt::DisplayRole).toString().toNSString()];
 
-    QModelIndex qSizeIdx = Video::ConfigurationProxy::resolutionSelectionModel()->currentIndex();
-    [sizesList addItemWithTitle:Video::ConfigurationProxy::resolutionModel()->data(qSizeIdx, Qt::DisplayRole).toString().toNSString()];
+    QModelIndex qSizeIdx = Video::ConfigurationProxy::resolutionSelectionModel().currentIndex();
+    [sizesList addItemWithTitle:Video::ConfigurationProxy::resolutionModel().data(qSizeIdx, Qt::DisplayRole).toString().toNSString()];
 
-    if(qobject_cast<QAbstractProxyModel*>(Video::ConfigurationProxy::resolutionModel())) {
-        QObject::connect(qobject_cast<QAbstractProxyModel*>(Video::ConfigurationProxy::resolutionModel()),
+    if(qobject_cast<QAbstractProxyModel*>(&Video::ConfigurationProxy::resolutionModel())) {
+        QObject::connect(qobject_cast<QAbstractProxyModel*>(&Video::ConfigurationProxy::resolutionModel()),
                          &QAbstractProxyModel::modelReset,
                          [=]() {
                              NSLog(@"resolution Source model changed!!!");
@@ -87,11 +87,11 @@
 
     }
 
-    QModelIndex qRate = Video::ConfigurationProxy::rateSelectionModel()->currentIndex();
-    [ratesList addItemWithTitle:Video::ConfigurationProxy::rateModel()->data(qDeviceIdx, Qt::DisplayRole).toString().toNSString()];
+    QModelIndex qRate = Video::ConfigurationProxy::rateSelectionModel().currentIndex();
+    [ratesList addItemWithTitle:Video::ConfigurationProxy::rateModel().data(qDeviceIdx, Qt::DisplayRole).toString().toNSString()];
 
-    if(qobject_cast<QAbstractProxyModel*>(Video::ConfigurationProxy::rateModel())) {
-        QObject::connect(qobject_cast<QAbstractProxyModel*>(Video::ConfigurationProxy::rateModel()),
+    if(qobject_cast<QAbstractProxyModel*>(&Video::ConfigurationProxy::rateModel())) {
+        QObject::connect(qobject_cast<QAbstractProxyModel*>(&Video::ConfigurationProxy::rateModel()),
                          &QAbstractProxyModel::modelReset,
                          [=]() {
                              NSLog(@"rates Source model changed!!!");
@@ -100,7 +100,7 @@
     }
 
     // check if preview has to be started/stopped by this controller
-    self.shouldHandlePreview = !Video::PreviewManager::instance()->isPreviewing();
+    self.shouldHandlePreview = !Video::PreviewManager::instance().isPreviewing();
 
     [previewView setWantsLayer:YES];
     [previewView setLayer:[CALayer layer]];
@@ -114,20 +114,20 @@
 
 - (IBAction)chooseDevice:(id)sender {
     int index = [sender indexOfSelectedItem];
-    QModelIndex qIdx = Video::ConfigurationProxy::deviceModel()->index(index, 0);
-    Video::ConfigurationProxy::deviceSelectionModel()->setCurrentIndex(qIdx, QItemSelectionModel::ClearAndSelect);
+    QModelIndex qIdx = Video::ConfigurationProxy::deviceModel().index(index, 0);
+    Video::ConfigurationProxy::deviceSelectionModel().setCurrentIndex(qIdx, QItemSelectionModel::ClearAndSelect);
 }
 
 - (IBAction)chooseSize:(id)sender {
     int index = [sender indexOfSelectedItem];
-    QModelIndex qIdx = Video::ConfigurationProxy::resolutionModel()->index(index, 0);
-    Video::ConfigurationProxy::resolutionSelectionModel()->setCurrentIndex(qIdx, QItemSelectionModel::ClearAndSelect);
+    QModelIndex qIdx = Video::ConfigurationProxy::resolutionModel().index(index, 0);
+    Video::ConfigurationProxy::resolutionSelectionModel().setCurrentIndex(qIdx, QItemSelectionModel::ClearAndSelect);
 }
 
 - (IBAction)chooseRate:(id)sender {
     int index = [sender indexOfSelectedItem];
-    QModelIndex qIdx = Video::ConfigurationProxy::rateModel()->index(index, 0);
-    Video::ConfigurationProxy::rateSelectionModel()->setCurrentIndex(qIdx, QItemSelectionModel::ClearAndSelect);
+    QModelIndex qIdx = Video::ConfigurationProxy::rateModel().index(index, 0);
+    Video::ConfigurationProxy::rateSelectionModel().setCurrentIndex(qIdx, QItemSelectionModel::ClearAndSelect);
 }
 
 - (void) connectPreviewSignals
@@ -135,7 +135,7 @@
     QObject::disconnect(frameUpdated);
     QObject::disconnect(previewStopped);
     QObject::disconnect(previewStarted);
-    previewStarted = QObject::connect(Video::PreviewManager::instance(),
+    previewStarted = QObject::connect(&Video::PreviewManager::instance(),
                                              &Video::PreviewManager::previewStarted,
                                              [=](Video::Renderer* renderer) {
                                                  NSLog(@"Preview started");
@@ -143,11 +143,11 @@
                                                  frameUpdated = QObject::connect(renderer,
                                                                                  &Video::Renderer::frameUpdated,
                                                                                  [=]() {
-                                                                                     [self renderer:Video::PreviewManager::instance()->previewRenderer() renderFrameForView:previewView];
+                                                                                     [self renderer:Video::PreviewManager::instance().previewRenderer() renderFrameForView:previewView];
                                                                                  });
                                              });
 
-    previewStopped = QObject::connect(Video::PreviewManager::instance(),
+    previewStopped = QObject::connect(&Video::PreviewManager::instance(),
                                              &Video::PreviewManager::previewStopped,
                                              [=](Video::Renderer* renderer) {
                                                  NSLog(@"Preview stopped");
@@ -155,10 +155,10 @@
                                                  [previewView.layer setContents:nil];
                                              });
 
-    frameUpdated = QObject::connect(Video::PreviewManager::instance()->previewRenderer(),
+    frameUpdated = QObject::connect(Video::PreviewManager::instance().previewRenderer(),
                                                   &Video::Renderer::frameUpdated,
                                                   [=]() {
-                                                      [self renderer:Video::PreviewManager::instance()->previewRenderer()
+                                                      [self renderer:Video::PreviewManager::instance().previewRenderer()
                                                   renderFrameForView:previewView];
                                                   });
 }
@@ -198,14 +198,14 @@
 - (void) viewWillAppear
 {
     if (self.shouldHandlePreview) {
-        Video::PreviewManager::instance()->startPreview();
+        Video::PreviewManager::instance().startPreview();
     }
 }
 
 - (void)viewWillDisappear
 {
     if (self.shouldHandlePreview) {
-        Video::PreviewManager::instance()->stopPreview();
+        Video::PreviewManager::instance().stopPreview();
     }
 }
 
@@ -216,18 +216,18 @@
     QModelIndex qIdx;
     if([menu.title isEqualToString:@"devices"]) {
 
-        qIdx = Video::ConfigurationProxy::deviceModel()->index(index, 0);
-        [item setTitle:Video::ConfigurationProxy::deviceModel()->data(qIdx, Qt::DisplayRole).toString().toNSString()];
+        qIdx = Video::ConfigurationProxy::deviceModel().index(index, 0);
+        [item setTitle:Video::ConfigurationProxy::deviceModel().data(qIdx, Qt::DisplayRole).toString().toNSString()];
 
     } else if([menu.title isEqualToString:@"sizes"]) {
 
-        qIdx = Video::ConfigurationProxy::resolutionModel()->index(index, 0);
-        [item setTitle:Video::ConfigurationProxy::resolutionModel()->data(qIdx, Qt::DisplayRole).toString().toNSString()];
+        qIdx = Video::ConfigurationProxy::resolutionModel().index(index, 0);
+        [item setTitle:Video::ConfigurationProxy::resolutionModel().data(qIdx, Qt::DisplayRole).toString().toNSString()];
 
     } else if([menu.title isEqualToString:@"rates"]) {
 
-        qIdx = Video::ConfigurationProxy::rateModel()->index(index, 0);
-        [item setTitle:Video::ConfigurationProxy::rateModel()->data(qIdx, Qt::DisplayRole).toString().toNSString()];
+        qIdx = Video::ConfigurationProxy::rateModel().index(index, 0);
+        [item setTitle:Video::ConfigurationProxy::rateModel().data(qIdx, Qt::DisplayRole).toString().toNSString()];
 
     }
     return YES;
@@ -236,11 +236,11 @@
 - (NSInteger)numberOfItemsInMenu:(NSMenu *)menu
 {
     if([menu.title isEqualToString:@"devices"]) {
-        return Video::ConfigurationProxy::deviceModel()->rowCount();
+        return Video::ConfigurationProxy::deviceModel().rowCount();
     } else if([menu.title isEqualToString:@"sizes"]) {
-        return Video::ConfigurationProxy::resolutionModel()->rowCount();
+        return Video::ConfigurationProxy::resolutionModel().rowCount();
     } else if([menu.title isEqualToString:@"rates"]) {
-        return Video::ConfigurationProxy::rateModel()->rowCount();
+        return Video::ConfigurationProxy::rateModel().rowCount();
     }
 }
 
diff --git a/src/backends/AddressBookBackend.mm b/src/backends/AddressBookBackend.mm
index 3acb173..443ed1a 100644
--- a/src/backends/AddressBookBackend.mm
+++ b/src/backends/AddressBookBackend.mm
@@ -125,7 +125,7 @@
     for (NSString* r in ns.userInfo[kABUpdatedRecords]) {
         NSLog(@"Updated record : %@", r);
         if ([[[ABAddressBook sharedAddressBook] recordClassFromUniqueId:r] containsString:@"ABPerson"]) {
-            Person* toUpdate = PersonModel::instance()->getPersonByUid([r UTF8String]);
+            Person* toUpdate = PersonModel::instance().getPersonByUid([r UTF8String]);
             if (toUpdate) {
                 ABPerson* updated = [[ABAddressBook sharedAddressBook] recordForUniqueId:r];
                 toUpdate->updateFromVCard(QByteArray::fromNSData(updated.vCardRepresentation));
@@ -289,7 +289,7 @@
 
 bool AddressBookBackend::removePerson(NSString* uid)
 {
-    auto found = PersonModel::instance()->getPersonByUid([uid UTF8String]);
+    auto found = PersonModel::instance().getPersonByUid([uid UTF8String]);
     if (found) {
         deactivate(found);
         editor<Person>()->remove(found);
diff --git a/src/main.mm b/src/main.mm
index 59e6e50..867e228 100644
--- a/src/main.mm
+++ b/src/main.mm
@@ -61,16 +61,16 @@
         }
     }
 
-    CategorizedHistoryModel::instance()->addCollection<LocalHistoryCollection>(LoadOptions::FORCE_ENABLED);
+    CategorizedHistoryModel::instance().addCollection<LocalHistoryCollection>(LoadOptions::FORCE_ENABLED);
 
     /* make sure basic number categories exist, in case user has no contacts
      * from which these would be automatically created
      */
-    NumberCategoryModel::instance()->addCategory("work", QVariant());
-    NumberCategoryModel::instance()->addCategory("home", QVariant());
+    NumberCategoryModel::instance().addCategory("work", QVariant());
+    NumberCategoryModel::instance().addCategory("home", QVariant());
 
     GlobalInstances::setPixmapManipulator(std::unique_ptr<Interfaces::ImageManipulationDelegate>(new Interfaces::ImageManipulationDelegate()));
-    PersonModel::instance()->addCollection<AddressBookBackend>(LoadOptions::FORCE_ENABLED);
+    PersonModel::instance().addCollection<AddressBookBackend>(LoadOptions::FORCE_ENABLED);
 
     return NSApplicationMain(argc, argv);
 }
diff --git a/src/views/CallView.mm b/src/views/CallView.mm
index b375f4d..98f2e85 100644
--- a/src/views/CallView.mm
+++ b/src/views/CallView.mm
@@ -168,7 +168,7 @@
      --------------------------------------------------------*/
     if ( [sender draggingSource] != self ) {
         NSURL* fileURL = [NSURL URLFromPasteboard: [sender draggingPasteboard]];
-        Video::SourceModel::instance()->setFile(QUrl::fromLocalFile(QString::fromUtf8([fileURL.path UTF8String])));
+        Video::SourceModel::instance().setFile(QUrl::fromLocalFile(QString::fromUtf8([fileURL.path UTF8String])));
     }
 
     return YES;
@@ -178,8 +178,8 @@
 
     contextualMenu = [[NSMenu alloc] initWithTitle:@"Switch camera"];
 
-    for(int i = 0 ; i < Video::DeviceModel::instance()->devices().size() ; ++i) {
-        Video::Device* device = Video::DeviceModel::instance()->devices()[i];
+    for(int i = 0 ; i < Video::DeviceModel::instance().devices().size() ; ++i) {
+        Video::Device* device = Video::DeviceModel::instance().devices()[i];
         [contextualMenu insertItemWithTitle:device->name().toNSString() action:@selector(switchInput:) keyEquivalent:@"" atIndex:i];
     }
 
@@ -226,7 +226,7 @@
 - (void) switchInput:(NSMenuItem*) sender
 {
     int index = [contextualMenu indexOfItem:sender];
-    Video::SourceModel::instance()->switchTo(Video::DeviceModel::instance()->devices()[index]);
+    Video::SourceModel::instance().switchTo(Video::DeviceModel::instance().devices()[index]);
 }
 
 - (void) chooseFile:(NSMenuItem*) sender
@@ -246,7 +246,7 @@
     [browsePanel beginSheetModalForWindow:[self window] completionHandler:^(NSInteger result) {
         if (result == NSFileHandlingPanelOKButton) {
             NSURL*  theDoc = [[browsePanel URLs] objectAtIndex:0];
-            Video::SourceModel::instance()->setFile(QUrl::fromLocalFile(QString::fromUtf8([theDoc.path UTF8String])));
+            Video::SourceModel::instance().setFile(QUrl::fromLocalFile(QString::fromUtf8([theDoc.path UTF8String])));
         }
     }];