diff --git a/src/AccAdvancedVC.h b/src/AccAdvancedVC.h
index 52216be7ce60e7bca1dc2e5380b47eb441cdcceb..1803d395f5e7070052701d5e910f6bd8f8e5ab05 100644
--- a/src/AccAdvancedVC.h
+++ b/src/AccAdvancedVC.h
@@ -31,10 +31,6 @@
 
 #import <account.h>
 
-@interface AccAdvancedVC : NSViewController <NSTextFieldDelegate> {
-
-}
-
-- (void)loadAccount:(Account *)account;
+@interface AccAdvancedVC : NSViewController <NSTextFieldDelegate>
 
 @end
diff --git a/src/AccAdvancedVC.mm b/src/AccAdvancedVC.mm
index 1f42a78cbcbb2331968d75b62103e709a76562eb..4c6be7e48b1add26760316c2d50068e194024999 100644
--- a/src/AccAdvancedVC.mm
+++ b/src/AccAdvancedVC.mm
@@ -39,9 +39,11 @@
 
 #import "AccAdvancedVC.h"
 
+#import <accountmodel.h>
+#import <qitemselectionmodel.h>
+
 @interface AccAdvancedVC ()
 
-@property Account* privateAccount;
 @property (assign) IBOutlet NSTextField *registrationField;
 @property (assign) IBOutlet NSTextField *localPortField;
 @property (assign) IBOutlet NSButton *isUsingSTUN;
@@ -67,7 +69,6 @@
 @end
 
 @implementation AccAdvancedVC
-@synthesize privateAccount;
 @synthesize registrationField;
 @synthesize localPortField;
 @synthesize isUsingSTUN;
@@ -106,12 +107,27 @@
     [STUNserverURLField setTag:STUNURL_TAG];
     [publishedPortField setTag:PUBLICPORT_TAG];
     [publishedAddrField setTag:PUBLICADDR_TAG];
-    
+
+    QObject::connect(AccountModel::instance()->selectionModel(),
+                     &QItemSelectionModel::currentChanged,
+                     [=](const QModelIndex &current, const QModelIndex &previous) {
+                         if(!current.isValid())
+                             return;
+                         [self loadAccount];
+                     });
+
 }
 
-- (void)loadAccount:(Account *)account
+- (Account*) currentAccount
 {
-    privateAccount = account;
+    auto accIdx = AccountModel::instance()->selectionModel()->currentIndex();
+    return AccountModel::instance()->getAccountByModelIndex(accIdx);
+}
+
+- (void)loadAccount
+{
+    auto account = [self currentAccount];
+
     [self updateControlsWithTag:REGISTRATION_TAG];
     [self updateControlsWithTag:LOCALPORT_TAG];
     [self updateControlsWithTag:MINAUDIO_TAG];
@@ -119,20 +135,20 @@
     [self updateControlsWithTag:MINVIDEO_TAG];
     [self updateControlsWithTag:MAXVIDEO_TAG];
 
-    [STUNserverURLField setStringValue:privateAccount->sipStunServer().toNSString()];
-    [isUsingSTUN setState:privateAccount->isSipStunEnabled()?NSOnState:NSOffState];
-    [STUNserverURLField setEnabled:privateAccount->isSipStunEnabled()];
+    [STUNserverURLField setStringValue:account->sipStunServer().toNSString()];
+    [isUsingSTUN setState:account->isSipStunEnabled()?NSOnState:NSOffState];
+    [STUNserverURLField setEnabled:account->isSipStunEnabled()];
 
-    if(privateAccount->isPublishedSameAsLocal())
+    if(account->isPublishedSameAsLocal())
         [publishAddrAndPortRadioGroup selectCellAtRow:0 column:0];
     else {
         [publishAddrAndPortRadioGroup selectCellAtRow:1 column:0];
     }
 
-    [publishedAddrField setStringValue:privateAccount->publishedAddress().toNSString()];
-    [publishedPortField setIntValue:privateAccount->publishedPort()];
-    [publishedAddrField setEnabled:!privateAccount->isPublishedSameAsLocal()];
-    [publishedPortField setEnabled:!privateAccount->isPublishedSameAsLocal()];
+    [publishedAddrField setStringValue:account->publishedAddress().toNSString()];
+    [publishedPortField setIntValue:account->publishedPort()];
+    [publishedAddrField setEnabled:!account->isPublishedSameAsLocal()];
+    [publishedPortField setEnabled:!account->isPublishedSameAsLocal()];
 }
 
 #pragma mark - NSTextFieldDelegate methods
@@ -152,31 +168,31 @@
 {
     switch ([sender tag]) {
         case REGISTRATION_TAG:
-            privateAccount->setRegistrationExpire([sender integerValue]);
+            [self currentAccount]->setRegistrationExpire([sender integerValue]);
             break;
         case LOCALPORT_TAG:
-            privateAccount->setLocalPort([sender integerValue]);
+            [self currentAccount]->setLocalPort([sender integerValue]);
             break;
         case STUNURL_TAG:
-            privateAccount->setSipStunServer([[sender stringValue] UTF8String]);
+            [self currentAccount]->setSipStunServer([[sender stringValue] UTF8String]);
             break;
         case PUBLICADDR_TAG:
-            privateAccount->setPublishedAddress([[sender stringValue] UTF8String]);
+            [self currentAccount]->setPublishedAddress([[sender stringValue] UTF8String]);
             break;
         case PUBLICPORT_TAG:
-            privateAccount->setPublishedPort([sender integerValue]);
+            [self currentAccount]->setPublishedPort([sender integerValue]);
             break;
         case MINAUDIO_TAG:
-            privateAccount->setAudioPortMin([sender integerValue]);
+            [self currentAccount]->setAudioPortMin([sender integerValue]);
             break;
         case MAXAUDIO_TAG:
-            privateAccount->setAudioPortMax([sender integerValue]);
+            [self currentAccount]->setAudioPortMax([sender integerValue]);
             break;
         case MINVIDEO_TAG:
-            privateAccount->setVideoPortMin([sender integerValue]);
+            [self currentAccount]->setVideoPortMin([sender integerValue]);
             break;
         case MAXVIDEO_TAG:
-            privateAccount->setVideoPortMax([sender integerValue]);
+            [self currentAccount]->setVideoPortMax([sender integerValue]);
             break;
         default:
             break;
@@ -186,20 +202,20 @@
 
 - (IBAction)toggleSTUN:(NSButton *)sender
 {
-    privateAccount->setSipStunEnabled([sender state]==NSOnState);
-    [STUNserverURLField setEnabled:privateAccount->isSipStunEnabled()];
+    [self currentAccount]->setSipStunEnabled([sender state]==NSOnState);
+    [STUNserverURLField setEnabled:[self currentAccount]->isSipStunEnabled()];
 }
 
 - (IBAction)didSwitchPublishedAddress:(NSMatrix *)matrix
 {
     NSInteger row = [matrix selectedRow];
     if(row == 0) {
-        privateAccount->setPublishedSameAsLocal(YES);
+        [self currentAccount]->setPublishedSameAsLocal(YES);
     } else {
-        privateAccount->setPublishedSameAsLocal(NO);
+        [self currentAccount]->setPublishedSameAsLocal(NO);
     }
-    [publishedAddrField setEnabled:!privateAccount->isPublishedSameAsLocal()];
-    [publishedPortField setEnabled:!privateAccount->isPublishedSameAsLocal()];
+    [publishedAddrField setEnabled:![self currentAccount]->isPublishedSameAsLocal()];
+    [publishedPortField setEnabled:![self currentAccount]->isPublishedSameAsLocal()];
 
 }
 
@@ -207,28 +223,28 @@
 {
     switch (tag) {
         case REGISTRATION_TAG:
-            [registrationStepper setIntegerValue:privateAccount->registrationExpire()];
-            [registrationField setIntegerValue:privateAccount->registrationExpire()];
+            [registrationStepper setIntegerValue:[self currentAccount]->registrationExpire()];
+            [registrationField setIntegerValue:[self currentAccount]->registrationExpire()];
             break;
         case LOCALPORT_TAG:
-            [localPortStepper setIntegerValue:privateAccount->localPort()];
-            [localPortField setIntegerValue:privateAccount->localPort()];
+            [localPortStepper setIntegerValue:[self currentAccount]->localPort()];
+            [localPortField setIntegerValue:[self currentAccount]->localPort()];
             break;
         case MINAUDIO_TAG:
-            [minAudioPortStepper setIntegerValue:privateAccount->audioPortMin()];
-            [minAudioRTPRange setIntegerValue:privateAccount->audioPortMin()];
+            [minAudioPortStepper setIntegerValue:[self currentAccount]->audioPortMin()];
+            [minAudioRTPRange setIntegerValue:[self currentAccount]->audioPortMin()];
             break;
         case MAXAUDIO_TAG:
-            [maxAudioPortStepper setIntegerValue:privateAccount->audioPortMax()];
-            [maxAudioRTPRange setIntegerValue:privateAccount->audioPortMax()];
+            [maxAudioPortStepper setIntegerValue:[self currentAccount]->audioPortMax()];
+            [maxAudioRTPRange setIntegerValue:[self currentAccount]->audioPortMax()];
             break;
         case MINVIDEO_TAG:
-            [minVideoPortStepper setIntegerValue:privateAccount->videoPortMin()];
-            [minVideoRTPRange setIntegerValue:privateAccount->videoPortMin()];
+            [minVideoPortStepper setIntegerValue:[self currentAccount]->videoPortMin()];
+            [minVideoRTPRange setIntegerValue:[self currentAccount]->videoPortMin()];
             break;
         case MAXVIDEO_TAG:
-            [maxVideoPortStepper setIntegerValue:privateAccount->videoPortMax()];
-            [maxVideoRTPRange setIntegerValue:privateAccount->videoPortMax()];
+            [maxVideoPortStepper setIntegerValue:[self currentAccount]->videoPortMax()];
+            [maxVideoRTPRange setIntegerValue:[self currentAccount]->videoPortMax()];
             break;
         default:
             break;
diff --git a/src/AccAudioVC.h b/src/AccAudioVC.h
index 38f8283cf4ad275dd86b0b37186c9a0d0ff36583..1434fc85cde7315a86b921b907f4342007ba0576 100644
--- a/src/AccAudioVC.h
+++ b/src/AccAudioVC.h
@@ -36,11 +36,7 @@
 
 #import "QNSTreeController.h"
 
-@interface AccAudioVC : NSViewController <NSOutlineViewDelegate> {
-
-}
-
-- (void)loadAccount:(Account *)account;
+@interface AccAudioVC : NSViewController <NSOutlineViewDelegate>
 
 @end
 
diff --git a/src/AccAudioVC.mm b/src/AccAudioVC.mm
index 704c8cc03fbf2dced06a6ec97a68b8051416635b..1370a38adc85c1f4b52b636c8f8f54f2521dcafa 100644
--- a/src/AccAudioVC.mm
+++ b/src/AccAudioVC.mm
@@ -37,10 +37,10 @@
 #import <QSortFilterProxyModel>
 #import <audio/codecmodel.h>
 #import <accountmodel.h>
+#import <qitemselectionmodel.h>
 
 @interface AccAudioVC ()
 
-@property Account* privateAccount;
 @property QNSTreeController *treeController;
 @property (assign) IBOutlet NSOutlineView *codecsView;
 
@@ -49,17 +49,29 @@
 @implementation AccAudioVC
 @synthesize treeController;
 @synthesize codecsView;
-@synthesize privateAccount;
 
 - (void)awakeFromNib
 {
     NSLog(@"INIT Audio VC");
+    QObject::connect(AccountModel::instance()->selectionModel(),
+                     &QItemSelectionModel::currentChanged,
+                     [=](const QModelIndex &current, const QModelIndex &previous) {
+                         if(!current.isValid())
+                             return;
+                         [self loadAccount];
+                     });
 }
 
-- (void)loadAccount:(Account *)account
+- (Account*) currentAccount
 {
-    privateAccount = account;
-    treeController = [[QNSTreeController alloc] initWithQModel:privateAccount->codecModel()->audioCodecs()];
+    auto accIdx = AccountModel::instance()->selectionModel()->currentIndex();
+    return AccountModel::instance()->getAccountByModelIndex(accIdx);
+}
+
+- (void)loadAccount
+{
+    auto account = [self currentAccount];
+    treeController = [[QNSTreeController alloc] initWithQModel:account->codecModel()->audioCodecs()];
 
     [treeController setAvoidsEmptySelection:NO];
     [treeController setChildrenKeyPath:@"children"];
@@ -75,8 +87,8 @@
         if(!qIdx.isValid())
             return;
 
-        QMimeData* mime = privateAccount->codecModel()->audioCodecs()->mimeData(QModelIndexList() << qIdx);
-        privateAccount->codecModel()->audioCodecs()->dropMimeData(mime, Qt::MoveAction, qIdx.row() - 1, 0, QModelIndex());
+        QMimeData* mime = [self currentAccount]->codecModel()->audioCodecs()->mimeData(QModelIndexList() << qIdx);
+        [self currentAccount]->codecModel()->audioCodecs()->dropMimeData(mime, Qt::MoveAction, qIdx.row() - 1, 0, QModelIndex());
     }
 }
 
@@ -86,8 +98,8 @@
         if(!qIdx.isValid())
             return;
 
-        QMimeData* mime = privateAccount->codecModel()->audioCodecs()->mimeData(QModelIndexList() << qIdx);
-        privateAccount->codecModel()->audioCodecs()->dropMimeData(mime, Qt::MoveAction, qIdx.row() + 1, 0, QModelIndex());
+        QMimeData* mime = [self currentAccount]->codecModel()->audioCodecs()->mimeData(QModelIndexList() << qIdx);
+        [self currentAccount]->codecModel()->audioCodecs()->dropMimeData(mime, Qt::MoveAction, qIdx.row() + 1, 0, QModelIndex());
     }
 }
 
@@ -95,8 +107,8 @@
     NSInteger row = [sender clickedRow];
     NSTableColumn *col = [sender tableColumnWithIdentifier:COLUMNID_STATE];
     NSButtonCell *cell = [col dataCellForRow:row];
-    QModelIndex qIdx = privateAccount->codecModel()->audioCodecs()->index(row, 0, QModelIndex());
-    privateAccount->codecModel()->audioCodecs()->setData(qIdx, cell.state == NSOnState ? Qt::Unchecked : Qt::Checked, Qt::CheckStateRole);
+    QModelIndex qIdx = [self currentAccount]->codecModel()->audioCodecs()->index(row, 0, QModelIndex());
+    [self currentAccount]->codecModel()->audioCodecs()->setData(qIdx, cell.state == NSOnState ? Qt::Unchecked : Qt::Checked, Qt::CheckStateRole);
 }
 
 #pragma mark - NSOutlineViewDelegate methods
@@ -157,16 +169,16 @@
     if(!qIdx.isValid())
         return;
     if([[tableColumn identifier] isEqualToString:COLUMNID_STATE]) {
-        [cell setState:privateAccount->codecModel()->audioCodecs()->data(qIdx, Qt::CheckStateRole).value<BOOL>()?NSOnState:NSOffState];
+        [cell setState:[self currentAccount]->codecModel()->audioCodecs()->data(qIdx, Qt::CheckStateRole).value<BOOL>()?NSOnState:NSOffState];
     } else if ([[tableColumn identifier] isEqualToString:COLUMNID_CODECS])
     {
-        cell.title = privateAccount->codecModel()->audioCodecs()->data(qIdx, CodecModel::Role::NAME).toString().toNSString();
+        cell.title = [self currentAccount]->codecModel()->audioCodecs()->data(qIdx, CodecModel::Role::NAME).toString().toNSString();
     } else if ([[tableColumn identifier] isEqualToString:COLUMNID_FREQ])
     {
-        cell.title = privateAccount->codecModel()->audioCodecs()->data(qIdx, CodecModel::Role::SAMPLERATE).toString().toNSString();
+        cell.title = [self currentAccount]->codecModel()->audioCodecs()->data(qIdx, CodecModel::Role::SAMPLERATE).toString().toNSString();
     } else if ([[tableColumn identifier] isEqualToString:COLUMNID_BITRATE])
     {
-        cell.title = privateAccount->codecModel()->audioCodecs()->data(qIdx, CodecModel::Role::BITRATE).toString().toNSString();
+        cell.title = [self currentAccount]->codecModel()->audioCodecs()->data(qIdx, CodecModel::Role::BITRATE).toString().toNSString();
     }
 }
 
diff --git a/src/AccGeneralVC.h b/src/AccGeneralVC.h
index 139fd1b9bcf54dfc02c1804d2b012883fa9c763c..ccde3e4e422bdab95e0862e04c8e40916bbf1110 100644
--- a/src/AccGeneralVC.h
+++ b/src/AccGeneralVC.h
@@ -38,12 +38,6 @@
 
 }
 
-- (IBAction)toggleUpnp:(NSButton *)sender;
-- (IBAction)toggleAutoAnswer:(NSButton *)sender;
-- (IBAction)toggleCustomAgent:(NSButton *)sender;
-
-- (void)loadAccount:(Account *)account;
-
 @end
 
 #endif // ACCGENERALVC_H
\ No newline at end of file
diff --git a/src/AccGeneralVC.mm b/src/AccGeneralVC.mm
index a75ad535fc1fe11b4ee02110d9978fac5f52c2d8..a2d33b1ba92f41f79297fc9e8895e5d6a1216e0a 100644
--- a/src/AccGeneralVC.mm
+++ b/src/AccGeneralVC.mm
@@ -42,8 +42,6 @@
 
 @interface AccGeneralVC ()
 
-@property Account* privateAccount;
-
 @property (assign) IBOutlet NSView *boxingAccount;
 @property (assign) IBOutlet NSView *boxingParameters;
 @property (assign) IBOutlet NSView *boxingCommon;
@@ -79,7 +77,6 @@
 @synthesize autoAnswerButton;
 @synthesize userAgentButton;
 @synthesize userAgentTextField;
-@synthesize privateAccount;
 
 - (void)awakeFromNib
 {
@@ -89,25 +86,38 @@
     [usernameTextField setTag:USERNAME_TAG];
     [passwordTextField setTag:PASSWORD_TAG];
     [userAgentTextField setTag:USERAGENT_TAG];
+
+    QObject::connect(AccountModel::instance()->selectionModel(),
+                     &QItemSelectionModel::currentChanged,
+                     [=](const QModelIndex &current, const QModelIndex &previous) {
+                         if(!current.isValid())
+                             return;
+                         [self loadAccount];
+                     });
+}
+
+- (Account*) currentAccount
+{
+    auto accIdx = AccountModel::instance()->selectionModel()->currentIndex();
+    return AccountModel::instance()->getAccountByModelIndex(accIdx);
 }
 
 - (IBAction)toggleUpnp:(NSButton *)sender {
-    privateAccount->setUpnpEnabled([sender state] == NSOnState);
+    [self currentAccount]->setUpnpEnabled([sender state] == NSOnState);
 }
 
 - (IBAction)toggleAutoAnswer:(NSButton *)sender {
-    privateAccount->setAutoAnswer([sender state] == NSOnState);
+    [self currentAccount]->setAutoAnswer([sender state] == NSOnState);
 }
 
 - (IBAction)toggleCustomAgent:(NSButton *)sender {
     [self.userAgentTextField setEnabled:[sender state] == NSOnState];
-    privateAccount->setHasCustomUserAgent([sender state] == NSOnState);
+    [self currentAccount]->setHasCustomUserAgent([sender state] == NSOnState);
 }
 
-- (void)loadAccount:(Account *)account
+- (void)loadAccount
 {
-
-    privateAccount = account;
+    auto account = [self currentAccount];
 
     if([account->alias().toNSString() isEqualToString:@"IP2IP"]) {
         [boxingAccount.subviews setValue:@YES forKeyPath:@"hidden"];
@@ -145,15 +155,15 @@
             break;
     }
 
-    [upnpButton setState:privateAccount->isUpnpEnabled()];
-    [userAgentButton setState:privateAccount->hasCustomUserAgent()];
-    [userAgentTextField setEnabled:privateAccount->hasCustomUserAgent()];
-    [self.autoAnswerButton setState:privateAccount->isAutoAnswer()];
+    [upnpButton setState:[self currentAccount]->isUpnpEnabled()];
+    [userAgentButton setState:[self currentAccount]->hasCustomUserAgent()];
+    [userAgentTextField setEnabled:[self currentAccount]->hasCustomUserAgent()];
+    [self.autoAnswerButton setState:[self currentAccount]->isAutoAnswer()];
     [self.userAgentTextField setStringValue:account->userAgent().toNSString()];
 }
 
 - (IBAction)tryRegistration:(id)sender {
-    self.privateAccount << Account::EditAction::SAVE;
+    [self currentAccount] << Account::EditAction::SAVE;
 }
 
 - (IBAction)showPassword:(NSButton *)sender {
@@ -195,19 +205,19 @@
 
     switch ([textField tag]) {
         case ALIAS_TAG:
-            privateAccount->setAlias([[textField stringValue] UTF8String]);
+            [self currentAccount]->setAlias([[textField stringValue] UTF8String]);
             break;
         case HOSTNAME_TAG:
-            privateAccount->setHostname([[textField stringValue] UTF8String]);
+            [self currentAccount]->setHostname([[textField stringValue] UTF8String]);
             break;
         case USERNAME_TAG:
-            privateAccount->setUsername([[textField stringValue] UTF8String]);
+            [self currentAccount]->setUsername([[textField stringValue] UTF8String]);
             break;
         case PASSWORD_TAG:
-            privateAccount->setPassword([[textField stringValue] UTF8String]);
+            [self currentAccount]->setPassword([[textField stringValue] UTF8String]);
             break;
         case USERAGENT_TAG:
-            privateAccount->setUserAgent([[textField stringValue] UTF8String]);
+            [self currentAccount]->setUserAgent([[textField stringValue] UTF8String]);
             break;
         default:
             break;
diff --git a/src/AccRingVC.h b/src/AccRingVC.h
index df21709abc506ee7bcb02d61b9dfa2c016bc7501..67f03e0d07939349d17c1366e1170fd70bbc8ddb 100644
--- a/src/AccRingVC.h
+++ b/src/AccRingVC.h
@@ -34,12 +34,7 @@
 
 #import <account.h>
 
-@interface AccRingVC : NSViewController <NSTextFieldDelegate> {
-    
-    NSTextField *hashField;
-}
-
-- (void)loadAccount:(Account *)account;
+@interface AccRingVC : NSViewController <NSTextFieldDelegate>
 
 @end
 
diff --git a/src/AccRingVC.mm b/src/AccRingVC.mm
index 88a5f6a71dcd3bfc0015981b0aa9c0c151584981..f262f4ee2657d45b83eb2686f85bd13b043eb0da 100644
--- a/src/AccRingVC.mm
+++ b/src/AccRingVC.mm
@@ -35,9 +35,10 @@
 
 #import "AccRingVC.h"
 
-@interface AccRingVC ()
+#import <accountmodel.h>
+#import <qitemselectionmodel.h>
 
-@property Account* privateAccount;
+@interface AccRingVC ()
 
 @property (assign) IBOutlet NSTextField *aliasTextField;
 @property (assign) IBOutlet NSTextField *typeLabel;
@@ -52,7 +53,6 @@
 @end
 
 @implementation AccRingVC
-@synthesize privateAccount;
 @synthesize typeLabel;
 @synthesize bootstrapField;
 @synthesize hashField;
@@ -68,14 +68,25 @@
     [aliasTextField setTag:ALIAS_TAG];
     [userAgentTextField setTag:USERAGENT_TAG];
     [bootstrapField setTag:HOSTNAME_TAG];
+
+    QObject::connect(AccountModel::instance()->selectionModel(),
+                     &QItemSelectionModel::currentChanged,
+                     [=](const QModelIndex &current, const QModelIndex &previous) {
+                         if(!current.isValid())
+                             return;
+                         [self loadAccount];
+                     });
 }
 
-- (void)loadAccount:(Account *)account
+- (Account*) currentAccount
 {
-    if(privateAccount == account)
-        return;
+    auto accIdx = AccountModel::instance()->selectionModel()->currentIndex();
+    return AccountModel::instance()->getAccountByModelIndex(accIdx);
+}
 
-    privateAccount = account;
+- (void)loadAccount
+{
+    auto account = [self currentAccount];
 
     [self.aliasTextField setStringValue:account->alias().toNSString()];
 
@@ -94,33 +105,33 @@
             break;
     }
 
-    [upnpButton setState:privateAccount->isUpnpEnabled()];
-    [userAgentButton setState:privateAccount->hasCustomUserAgent()];
-    [userAgentTextField setEnabled:privateAccount->hasCustomUserAgent()];
+    [upnpButton setState:[self currentAccount]->isUpnpEnabled()];
+    [userAgentButton setState:[self currentAccount]->hasCustomUserAgent()];
+    [userAgentTextField setEnabled:[self currentAccount]->hasCustomUserAgent()];
 
-    [autoAnswerButton setState:privateAccount->isAutoAnswer()];
+    [autoAnswerButton setState:[self currentAccount]->isAutoAnswer()];
     [userAgentTextField setStringValue:account->userAgent().toNSString()];
 
     [bootstrapField setStringValue:account->hostname().toNSString()];
 
-    if([privateAccount->username().toNSString() isEqualToString:@""])
+    if([[self currentAccount]->username().toNSString() isEqualToString:@""])
         [hashField setStringValue:@"Reopen account to see your hash"];
     else
-        [hashField setStringValue:privateAccount->username().toNSString()];
+        [hashField setStringValue:[self currentAccount]->username().toNSString()];
 
 }
 
 - (IBAction)toggleUpnp:(NSButton *)sender {
-    privateAccount->setUpnpEnabled([sender state] == NSOnState);
+    [self currentAccount]->setUpnpEnabled([sender state] == NSOnState);
 }
 
 - (IBAction)toggleAutoAnswer:(NSButton *)sender {
-    privateAccount->setAutoAnswer([sender state] == NSOnState);
+    [self currentAccount]->setAutoAnswer([sender state] == NSOnState);
 }
 
 - (IBAction)toggleCustomAgent:(NSButton *)sender {
     [self.userAgentTextField setEnabled:[sender state] == NSOnState];
-    privateAccount->setHasCustomUserAgent([sender state] == NSOnState);
+    [self currentAccount]->setHasCustomUserAgent([sender state] == NSOnState);
 }
 
 #pragma mark - NSTextFieldDelegate methods
@@ -136,16 +147,16 @@
 
     switch ([textField tag]) {
         case ALIAS_TAG:
-            privateAccount->setAlias([[textField stringValue] UTF8String]);
+            [self currentAccount]->setAlias([[textField stringValue] UTF8String]);
             break;
         case HOSTNAME_TAG:
-            privateAccount->setHostname([[textField stringValue] UTF8String]);
+            [self currentAccount]->setHostname([[textField stringValue] UTF8String]);
             break;
         case PASSWORD_TAG:
-            privateAccount->setPassword([[textField stringValue] UTF8String]);
+            [self currentAccount]->setPassword([[textField stringValue] UTF8String]);
             break;
         case USERAGENT_TAG:
-            privateAccount->setUserAgent([[textField stringValue] UTF8String]);
+            [self currentAccount]->setUserAgent([[textField stringValue] UTF8String]);
             break;
         default:
             break;
diff --git a/src/AccSecurityVC.h b/src/AccSecurityVC.h
index f967c1f42ffd23188c1a69416c78034465ca107e..96d95066df1bb327e340caffbb3268e760a775cf 100644
--- a/src/AccSecurityVC.h
+++ b/src/AccSecurityVC.h
@@ -32,13 +32,7 @@
 
 #import <Cocoa/Cocoa.h>
 
-#import <account.h>
-
-@interface AccSecurityVC : NSViewController<NSMenuDelegate, NSPathControlDelegate, NSOpenSavePanelDelegate> {
-
-}
-
-- (void)loadAccount:(Account *)account;
+@interface AccSecurityVC : NSViewController<NSMenuDelegate, NSPathControlDelegate, NSOpenSavePanelDelegate>
 
 @end
 
diff --git a/src/AccSecurityVC.mm b/src/AccSecurityVC.mm
index 22320b1ae3763692a96448b529ff116e3196159d..cb4dda689677631c7a4caedf2815cdb1d7cf002f 100644
--- a/src/AccSecurityVC.mm
+++ b/src/AccSecurityVC.mm
@@ -34,6 +34,7 @@
 #import <tlsmethodmodel.h>
 #import <qitemselectionmodel.h>
 #import <ciphermodel.h>
+#import <accountmodel.h>
 
 #import "QNSTreeController.h"
 #import "CertificateWC.h"
@@ -48,7 +49,6 @@
 
 @interface AccSecurityVC ()
 
-@property Account* privateAccount;
 @property NSTreeController *treeController;
 @property (unsafe_unretained) IBOutlet NSOutlineView *cipherListView;
 @property (unsafe_unretained) IBOutlet NSButton *useTLS;
@@ -73,7 +73,6 @@
 @end
 
 @implementation AccSecurityVC
-@synthesize privateAccount;
 @synthesize treeController;
 @synthesize cipherListView;
 @synthesize certificateWC;
@@ -100,21 +99,34 @@
     [tlsNegotiationTimeoutStepper setTag:TLS_NEGOTIATION_TAG];
     [tlsNegotiationTimeout setTag:TLS_NEGOTIATION_TAG];
 
+    QObject::connect(AccountModel::instance()->selectionModel(),
+                     &QItemSelectionModel::currentChanged,
+                     [=](const QModelIndex &current, const QModelIndex &previous) {
+                         if(!current.isValid())
+                             return;
+                         [self loadAccount];
+                     });
 }
 
-- (void)loadAccount:(Account *)account
+- (Account*) currentAccount
 {
-    privateAccount = account;
+    auto accIdx = AccountModel::instance()->selectionModel()->currentIndex();
+    return AccountModel::instance()->getAccountByModelIndex(accIdx);
+}
+
+- (void)loadAccount
+{
+    auto account = [self currentAccount];
 
     [self updateControlsWithTag:PVK_PASSWORD_TAG];
     [self updateControlsWithTag:OUTGOING_TLS_SRV_NAME];
     [self updateControlsWithTag:TLS_NEGOTIATION_TAG];
 
-    QModelIndex qTlsMethodIdx = privateAccount->tlsMethodModel()->selectionModel()->currentIndex();
+    QModelIndex qTlsMethodIdx = [self currentAccount]->tlsMethodModel()->selectionModel()->currentIndex();
     [self.tlsMethodList removeAllItems];
     [self.tlsMethodList addItemWithTitle:qTlsMethodIdx.data(Qt::DisplayRole).toString().toNSString()];
 
-    treeController = [[QNSTreeController alloc] initWithQModel:privateAccount->cipherModel()];
+    treeController = [[QNSTreeController alloc] initWithQModel:[self currentAccount]->cipherModel()];
     [treeController setAvoidsEmptySelection:NO];
     [treeController setAlwaysUsesMultipleValuesMarker:YES];
     [treeController setChildrenKeyPath:@"children"];
@@ -123,39 +135,39 @@
     [cipherListView bind:@"sortDescriptors" toObject:treeController withKeyPath:@"sortDescriptors" options:nil];
     [cipherListView bind:@"selectionIndexPaths" toObject:treeController withKeyPath:@"selectionIndexPaths" options:nil];
 
-    [useTLS setState:privateAccount->isTlsEnabled()];
-    [tlsContainer setHidden:!privateAccount->isTlsEnabled()];
+    [useTLS setState:[self currentAccount]->isTlsEnabled()];
+    [tlsContainer setHidden:![self currentAccount]->isTlsEnabled()];
 
-    [useSRTP setState:privateAccount->isSrtpEnabled()];
-    [srtpRTPFallback setState:privateAccount->isSrtpRtpFallback()];
+    [useSRTP setState:[self currentAccount]->isSrtpEnabled()];
+    [srtpRTPFallback setState:[self currentAccount]->isSrtpRtpFallback()];
     [srtpRTPFallback setEnabled:useSRTP.state];
 
     NSArray * pathComponentArray = [self pathComponentArray];
 
-    if(privateAccount->tlsCaListCertificate() != nil) {
-            NSLog(@"CA ==> %@", privateAccount->tlsCaListCertificate()->path().toNSURL());
-        [caListPathControl setURL:privateAccount->tlsCaListCertificate()->path().toNSURL()];
+    if([self currentAccount]->tlsCaListCertificate() != nil) {
+            NSLog(@"CA ==> %@", [self currentAccount]->tlsCaListCertificate()->path().toNSURL());
+        [caListPathControl setURL:[self currentAccount]->tlsCaListCertificate()->path().toNSURL()];
     } else {
         [caListPathControl setURL:nil];
     }
 
-    if(privateAccount->tlsCertificate() != nil) {
-        NSLog(@" CERT ==> %@", privateAccount->tlsCertificate()->path().toNSURL());
-        [certificatePathControl setURL:privateAccount->tlsCertificate()->path().toNSURL()];
+    if([self currentAccount]->tlsCertificate() != nil) {
+        NSLog(@" CERT ==> %@", [self currentAccount]->tlsCertificate()->path().toNSURL());
+        [certificatePathControl setURL:[self currentAccount]->tlsCertificate()->path().toNSURL()];
     } else {
         [certificatePathControl setURL:nil];
     }
 
-    if(privateAccount->tlsPrivateKeyCertificate() != nil) {
-        NSLog(@" PVK ==> %@", privateAccount->tlsPrivateKeyCertificate()->path().toNSURL());
-        [pvkPathControl setURL:privateAccount->tlsPrivateKeyCertificate()->path().toNSURL()];
+    if([self currentAccount]->tlsPrivateKeyCertificate() != nil) {
+        NSLog(@" PVK ==> %@", [self currentAccount]->tlsPrivateKeyCertificate()->path().toNSURL());
+        [pvkPathControl setURL:[self currentAccount]->tlsPrivateKeyCertificate()->path().toNSURL()];
     } else {
         [pvkPathControl setURL:nil];
     }
 
-    [verifyCertAsServerButton setState:privateAccount->isTlsVerifyServer()];
-    [verifyCertAsClientButton setState:privateAccount->isTlsVerifyClient()];
-    [requireCertButton setState:privateAccount->isTlsRequireClientCertificate()];
+    [verifyCertAsServerButton setState:[self currentAccount]->isTlsVerifyServer()];
+    [verifyCertAsClientButton setState:[self currentAccount]->isTlsVerifyClient()];
+    [requireCertButton setState:[self currentAccount]->isTlsRequireClientCertificate()];
 }
 
 /*
@@ -204,40 +216,40 @@
 
 - (IBAction)chooseTlsMethod:(id)sender {
     int index = [sender indexOfSelectedItem];
-    QModelIndex qIdx = privateAccount->tlsMethodModel()->index(index, 0);
-    privateAccount->tlsMethodModel()->selectionModel()->setCurrentIndex(qIdx, QItemSelectionModel::ClearAndSelect);
+    QModelIndex qIdx = [self currentAccount]->tlsMethodModel()->index(index, 0);
+    [self currentAccount]->tlsMethodModel()->selectionModel()->setCurrentIndex(qIdx, QItemSelectionModel::ClearAndSelect);
 }
 
 - (IBAction)toggleUseTLS:(id)sender {
-    privateAccount->setTlsEnabled([sender state]);
+    [self currentAccount]->setTlsEnabled([sender state]);
     [tlsContainer setHidden:![sender state]];
 }
 
 - (IBAction)toggleUseSRTP:(id)sender {
-    privateAccount->setSrtpEnabled([sender state]);
+    [self currentAccount]->setSrtpEnabled([sender state]);
     [srtpRTPFallback setEnabled:[sender state]];
 }
 - (IBAction)toggleRTPFallback:(id)sender {
-    privateAccount->setSrtpRtpFallback([sender state]);
+    [self currentAccount]->setSrtpRtpFallback([sender state]);
 }
 
 - (IBAction)toggleVerifyCertAsClient:(id)sender {
-    privateAccount->setTlsVerifyClient([sender state]);
+    [self currentAccount]->setTlsVerifyClient([sender state]);
 }
 
 - (IBAction)toggleVerifyCertServer:(id)sender {
-    privateAccount->setTlsVerifyServer([sender state]);
+    [self currentAccount]->setTlsVerifyServer([sender state]);
 }
 
 - (IBAction)toggleRequireCert:(id)sender {
-    privateAccount->setTlsRequireClientCertificate([sender state]);
+    [self currentAccount]->setTlsRequireClientCertificate([sender state]);
 }
 
 - (IBAction)toggleCipher:(id)sender {
     NSInteger row = [sender clickedRow];
     NSTableColumn *col = [sender tableColumnWithIdentifier:COLUMNID_STATE];
     NSButtonCell *cell = [col dataCellForRow:row];
-    privateAccount->cipherModel()->setData(privateAccount->cipherModel()->index(row, 0, QModelIndex()),
+    [self currentAccount]->cipherModel()->setData([self currentAccount]->cipherModel()->index(row, 0, QModelIndex()),
                                            cell.state == NSOnState ? Qt::Unchecked : Qt::Checked, Qt::CheckStateRole);
 }
 
@@ -245,14 +257,14 @@
 {
     switch (tag) {
         case PVK_PASSWORD_TAG:
-            [pvkPasswordField setStringValue:privateAccount->tlsPassword().toNSString()];
+            [pvkPasswordField setStringValue:[self currentAccount]->tlsPassword().toNSString()];
             break;
         case OUTGOING_TLS_SRV_NAME:
-            [outgoingTlsServerName setStringValue:privateAccount->tlsServerName().toNSString()];
+            [outgoingTlsServerName setStringValue:[self currentAccount]->tlsServerName().toNSString()];
             break;
         case TLS_NEGOTIATION_TAG:
-            [tlsNegotiationTimeout setIntegerValue:privateAccount->tlsNegotiationTimeoutSec()];
-            [tlsNegotiationTimeoutStepper setIntegerValue:privateAccount->tlsNegotiationTimeoutSec()];
+            [tlsNegotiationTimeout setIntegerValue:[self currentAccount]->tlsNegotiationTimeoutSec()];
+            [tlsNegotiationTimeoutStepper setIntegerValue:[self currentAccount]->tlsNegotiationTimeoutSec()];
             break;
         default:
             break;
@@ -276,13 +288,13 @@
 {
     switch ([sender tag]) {
         case PVK_PASSWORD_TAG:
-            privateAccount->setTlsPassword([[sender stringValue] UTF8String]);
+            [self currentAccount]->setTlsPassword([[sender stringValue] UTF8String]);
             break;
         case OUTGOING_TLS_SRV_NAME:
-            privateAccount->setTlsServerName([[sender stringValue] UTF8String]);
+            [self currentAccount]->setTlsServerName([[sender stringValue] UTF8String]);
             break;
         case TLS_NEGOTIATION_TAG:
-            privateAccount->setTlsNegotiationTimeoutSec([sender integerValue]);
+            [self currentAccount]->setTlsNegotiationTimeoutSec([sender integerValue]);
             break;
         default:
             break;
@@ -295,7 +307,7 @@
     NSURL* fileURL = [[sender clickedPathComponentCell] URL];
     NSLog(@"==> %@", fileURL);
     [self.caListPathControl setURL:fileURL];
-    privateAccount->setTlsCaListCertificate(QUrl::fromNSURL(fileURL).toString());
+    [self currentAccount]->setTlsCaListCertificate(QUrl::fromNSURL(fileURL).toString());
 }
 
 - (IBAction)certificatePathControlSingleClick:(id)sender {
@@ -303,30 +315,27 @@
     NSURL* fileURL = [[sender clickedPathComponentCell] URL];
         NSLog(@"==> %@", fileURL);
     [self.certificatePathControl setURL:fileURL];
-    privateAccount->setTlsCertificate(QUrl::fromNSURL(fileURL).toString());
+    [self currentAccount]->setTlsCertificate(QUrl::fromNSURL(fileURL).toString());
 }
 
 - (IBAction)pvkFilePathControlSingleClick:(id)sender {
     NSURL* fileURL = [[sender clickedPathComponentCell] URL];
         NSLog(@"==> %@", fileURL);
     [self.pvkPathControl setURL:fileURL];
-    privateAccount->setTlsPrivateKeyCertificate(QUrl::fromNSURL(fileURL).toString());
-    
-
-   // qDebug() << "TEST" << privateAccount->tlsPrivateKeyCertificate()->hasPrivateKey();
+    [self currentAccount]->setTlsPrivateKeyCertificate(QUrl::fromNSURL(fileURL).toString());
 }
 
 - (IBAction)showCA:(id)sender
 {
     certificateWC = [[CertificateWC alloc] initWithWindowNibName:@"CertificateWindow"];
-    [certificateWC setCertificate:privateAccount->tlsCaListCertificate()];
+    [certificateWC setCertificate:[self currentAccount]->tlsCaListCertificate()];
     [self.view.window beginSheet:certificateWC.window completionHandler:nil];
 }
 
 - (IBAction)showEndpointCertificate:(id)sender
 {
     certificateWC = [[CertificateWC alloc] initWithWindowNibName:@"CertificateWindow"];
-    [certificateWC setCertificate:privateAccount->tlsCertificate()];
+    [certificateWC setCertificate:[self currentAccount]->tlsCertificate()];
     [self.view.window beginSheet:certificateWC.window completionHandler:nil];}
 
 /*
@@ -348,7 +357,6 @@
         [openPanel setTitle:NSLocalizedString(@"Choose a private key file", @"Open panel title")];
     }
 
-
     [openPanel setPrompt:NSLocalizedString(@"Choose", @"Open panel prompt for 'Choose a file'")];
     [openPanel setDelegate:self];
 }
@@ -389,7 +397,7 @@
 
     if([menu.title isEqualToString:@"tlsmethodlist"])
     {
-        qIdx = privateAccount->tlsMethodModel()->index(index);
+        qIdx = [self currentAccount]->tlsMethodModel()->index(index);
         [item setTitle:qIdx.data(Qt::DisplayRole).toString().toNSString()];
     }
     return YES;
@@ -398,7 +406,7 @@
 - (NSInteger)numberOfItemsInMenu:(NSMenu *)menu
 {
     if([menu.title isEqualToString:@"tlsmethodlist"])
-        return privateAccount->tlsMethodModel()->rowCount();
+        return [self currentAccount]->tlsMethodModel()->rowCount();
 }
 
 #pragma mark - NSOutlineViewDelegate methods
diff --git a/src/AccVideoVC.h b/src/AccVideoVC.h
index b7fa537841f49350e1b4a6cfcbc1ff1121bb90d0..aade71ce76dcf07e64409334162e6c096f4de243 100644
--- a/src/AccVideoVC.h
+++ b/src/AccVideoVC.h
@@ -34,11 +34,7 @@
 
 #import <account.h>
 
-@interface AccVideoVC : NSViewController <NSOutlineViewDelegate> {
-
-}
-
-- (void)loadAccount:(Account *)account;
+@interface AccVideoVC : NSViewController <NSOutlineViewDelegate>
 
 @end
 
diff --git a/src/AccVideoVC.mm b/src/AccVideoVC.mm
index 7d3ebe590301911b60d495785b0f288ea0f23eb6..862e02d028f5408d1a70f311aa6217f467782f81 100644
--- a/src/AccVideoVC.mm
+++ b/src/AccVideoVC.mm
@@ -37,12 +37,12 @@
 #include <QtCore/QSortFilterProxyModel>
 #import <audio/codecmodel.h>
 #import <accountmodel.h>
+#import <qitemselectionmodel.h>
 
 #import "QNSTreeController.h"
 
 @interface AccVideoVC ()
 
-@property Account* privateAccount;
 @property QNSTreeController *treeController;
 @property (assign) IBOutlet NSOutlineView *codecsView;
 @property (assign) IBOutlet NSView *videoPanelContainer;
@@ -53,40 +53,52 @@
 @implementation AccVideoVC
 @synthesize treeController;
 @synthesize codecsView;
-@synthesize privateAccount;
 @synthesize videoPanelContainer;
 @synthesize toggleVideoButton;
 
 - (void)awakeFromNib
 {
     NSLog(@"INIT Video VC");
+    QObject::connect(AccountModel::instance()->selectionModel(),
+                     &QItemSelectionModel::currentChanged,
+                     [=](const QModelIndex &current, const QModelIndex &previous) {
+                         if(!current.isValid())
+                             return;
+                         [self loadAccount];
+                     });
 }
 
-- (void)loadAccount:(Account *)account
+- (Account*) currentAccount
 {
-    privateAccount = account;
+    auto accIdx = AccountModel::instance()->selectionModel()->currentIndex();
+    return AccountModel::instance()->getAccountByModelIndex(accIdx);
+}
+
+- (void)loadAccount
+{
+    auto account = [self currentAccount];
 
-    treeController = [[QNSTreeController alloc] initWithQModel:privateAccount->codecModel()->videoCodecs()];
+    treeController = [[QNSTreeController alloc] initWithQModel:[self currentAccount]->codecModel()->videoCodecs()];
     [treeController setAvoidsEmptySelection:NO];
     [treeController setChildrenKeyPath:@"children"];
 
     [codecsView bind:@"content" toObject:treeController withKeyPath:@"arrangedObjects" options:nil];
     [codecsView bind:@"sortDescriptors" toObject:treeController withKeyPath:@"sortDescriptors" options:nil];
     [codecsView bind:@"selectionIndexPaths" toObject:treeController withKeyPath:@"selectionIndexPaths" options:nil];
-    [videoPanelContainer setHidden:!privateAccount->isVideoEnabled()];
-    [toggleVideoButton setState:privateAccount->isVideoEnabled()?NSOnState:NSOffState];
+    [videoPanelContainer setHidden:![self currentAccount]->isVideoEnabled()];
+    [toggleVideoButton setState:[self currentAccount]->isVideoEnabled()?NSOnState:NSOffState];
 }
 
 - (IBAction)toggleVideoEnabled:(id)sender {
-    privateAccount->setVideoEnabled([sender state] == NSOnState);
-    [videoPanelContainer setHidden:!privateAccount->isVideoEnabled()];
+    [self currentAccount]->setVideoEnabled([sender state] == NSOnState);
+    [videoPanelContainer setHidden:![self currentAccount]->isVideoEnabled()];
 }
 
 - (IBAction)toggleCodec:(NSOutlineView*)sender {
     NSInteger row = [sender clickedRow];
     NSTableColumn *col = [sender tableColumnWithIdentifier:COLUMNID_STATE];
     NSButtonCell *cell = [col dataCellForRow:row];
-    privateAccount->codecModel()->videoCodecs()->setData(privateAccount->codecModel()->videoCodecs()->index(row, 0, QModelIndex()),
+    [self currentAccount]->codecModel()->videoCodecs()->setData([self currentAccount]->codecModel()->videoCodecs()->index(row, 0, QModelIndex()),
         cell.state == NSOnState ? Qt::Unchecked : Qt::Checked, Qt::CheckStateRole);
 }
 
@@ -97,8 +109,8 @@
         if(!qIdx.isValid())
             return;
 
-        QMimeData* mime = privateAccount->codecModel()->mimeData(QModelIndexList() << qIdx);
-        privateAccount->codecModel()->dropMimeData(mime, Qt::MoveAction, qIdx.row() - 1, 0, QModelIndex());
+        QMimeData* mime = [self currentAccount]->codecModel()->mimeData(QModelIndexList() << qIdx);
+        [self currentAccount]->codecModel()->dropMimeData(mime, Qt::MoveAction, qIdx.row() - 1, 0, QModelIndex());
     }
 }
 
@@ -108,8 +120,8 @@
         if(!qIdx.isValid())
             return;
 
-        QMimeData* mime = privateAccount->codecModel()->mimeData(QModelIndexList() << qIdx);
-        privateAccount->codecModel()->dropMimeData(mime, Qt::MoveAction, qIdx.row() + 1, 0, QModelIndex());
+        QMimeData* mime = [self currentAccount]->codecModel()->mimeData(QModelIndexList() << qIdx);
+        [self currentAccount]->codecModel()->dropMimeData(mime, Qt::MoveAction, qIdx.row() + 1, 0, QModelIndex());
     }
 }
 
@@ -171,17 +183,17 @@
         return;
 
     if([[tableColumn identifier] isEqualToString:COLUMNID_STATE]) {
-        [cell setState:privateAccount->codecModel()->videoCodecs()->data(qIdx, Qt::CheckStateRole).value<BOOL>()?NSOnState:NSOffState];
+        [cell setState:[self currentAccount]->codecModel()->videoCodecs()->data(qIdx, Qt::CheckStateRole).value<BOOL>()?NSOnState:NSOffState];
     } else if ([[tableColumn identifier] isEqualToString:COLUMNID_CODECS])
     {
-        cell.title = privateAccount->codecModel()->videoCodecs()->data(qIdx, CodecModel::Role::NAME).toString().toNSString();
-        [cell setState:privateAccount->codecModel()->videoCodecs()->data(qIdx, Qt::CheckStateRole).value<BOOL>()?NSOnState:NSOffState];
+        cell.title = [self currentAccount]->codecModel()->videoCodecs()->data(qIdx, CodecModel::Role::NAME).toString().toNSString();
+        [cell setState:[self currentAccount]->codecModel()->videoCodecs()->data(qIdx, Qt::CheckStateRole).value<BOOL>()?NSOnState:NSOffState];
     } else if ([[tableColumn identifier] isEqualToString:COLUMNID_FREQ])
     {
-        cell.title = privateAccount->codecModel()->videoCodecs()->data(qIdx, CodecModel::Role::SAMPLERATE).toString().toNSString();
+        cell.title = [self currentAccount]->codecModel()->videoCodecs()->data(qIdx, CodecModel::Role::SAMPLERATE).toString().toNSString();
     } else if ([[tableColumn identifier] isEqualToString:COLUMNID_BITRATE])
     {
-        cell.title = privateAccount->codecModel()->videoCodecs()->data(qIdx, CodecModel::Role::BITRATE).toString().toNSString();
+        cell.title = [self currentAccount]->codecModel()->videoCodecs()->data(qIdx, CodecModel::Role::BITRATE).toString().toNSString();
     }
 }
 
diff --git a/src/AccountsVC.mm b/src/AccountsVC.mm
index 42ae01b62fb880d35e6a6d4b02f5bcc66021dd46..a04ddecc0d20999c36cb7b920107cba5162a147e 100644
--- a/src/AccountsVC.mm
+++ b/src/AccountsVC.mm
@@ -119,9 +119,10 @@ public:
                         [accountsListView reloadDataForRowIndexes:
                         [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(topLeft.row(), bottomRight.row() + 1)]
                         columnIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, accountsListView.tableColumns.count)]];
-
                      });
 
+    AccountModel::instance()->selectionModel()->clearCurrentIndex();
+
     self.proxyProtocolModel = new ActiveProtocolModel(AccountModel::instance()->protocolModel());
     QModelIndex qProtocolIdx = AccountModel::instance()->protocolModel()->selectionModel()->currentIndex();
     [self.protocolList addItemWithTitle:
@@ -193,10 +194,8 @@ public:
 
 }
 
-- (void) setupSIPPanelsForAccount:(Account*) acc
+- (void) setupSIPPanels
 {
-    NSTabViewItem* selected = [configPanels selectedTabViewItem];
-
     // Start by removing all tabs
     for(NSTabViewItem* item in configPanels.tabViewItems) {
         [configPanels removeTabViewItem:item];
@@ -207,18 +206,10 @@ public:
     [configPanels insertTabViewItem:videoTabItem atIndex:2];
     [configPanels insertTabViewItem:advancedTabItem atIndex:3];
     [configPanels insertTabViewItem:securityTabItem atIndex:4];
-
-    [self.generalVC loadAccount:acc];
-    [self.audioVC loadAccount:acc];
-    [self.videoVC loadAccount:acc];
-    [self.advancedVC loadAccount:acc];
-    [self.securityVC loadAccount:acc];
 }
 
-- (void) setupIAXPanelsForAccount:(Account*) acc
+- (void) setupIAXPanels
 {
-    NSTabViewItem* selected = [configPanels selectedTabViewItem];
-
     // Start by removing all tabs
     for(NSTabViewItem* item in configPanels.tabViewItems) {
         [configPanels removeTabViewItem:item];
@@ -227,16 +218,10 @@ public:
     [configPanels insertTabViewItem:generalTabItem atIndex:0];
     [configPanels insertTabViewItem:audioTabItem atIndex:1];
     [configPanels insertTabViewItem:videoTabItem atIndex:2];
-
-    [self.generalVC loadAccount:acc];
-    [self.audioVC loadAccount:acc];
-    [self.videoVC loadAccount:acc];
 }
 
-- (void) setupRINGPanelsForAccount:(Account*) acc
+- (void) setupRINGPanels
 {
-    NSTabViewItem* selected = [configPanels selectedTabViewItem];
-
     // Start by removing all tabs
     for(NSTabViewItem* item in configPanels.tabViewItems) {
         [configPanels removeTabViewItem:item];
@@ -245,14 +230,6 @@ public:
     [configPanels insertTabViewItem:ringTabItem atIndex:0];
     [configPanels insertTabViewItem:audioTabItem atIndex:1];
     [configPanels insertTabViewItem:videoTabItem atIndex:2];
-    //[configPanels insertTabViewItem:advancedTabItem atIndex:3];
-    //[configPanels insertTabViewItem:securityTabItem atIndex:4];
-
-    [self.ringVC loadAccount:acc];
-    [self.audioVC loadAccount:acc];
-    [self.videoVC loadAccount:acc];
-    [self.advancedVC loadAccount:acc];
-    [self.securityVC loadAccount:acc];
 }
 
 - (IBAction)toggleAccount:(NSOutlineView*)sender {
@@ -375,27 +352,26 @@ public:
     if([[treeController selectedNodes] count] > 0) {
         QModelIndex qIdx = [treeController toQIdx:[treeController selectedNodes][0]];
         //Update details view
-        AccountModel::instance()->selectionModel()->setCurrentIndex(qIdx, QItemSelectionModel::ClearAndSelect);
         Account* acc = AccountModel::instance()->getAccountByModelIndex(qIdx);
+        AccountModel::instance()->selectionModel()->setCurrentIndex(qIdx, QItemSelectionModel::ClearAndSelect);
 
             switch (acc->protocol()) {
             case Account::Protocol::SIP:
                 NSLog(@"SIP");
-                [self setupSIPPanelsForAccount:acc];
+                [self setupSIPPanels];
                 break;
             case Account::Protocol::IAX:
                 NSLog(@"IAX");
-                [self setupIAXPanelsForAccount:acc];
+                [self setupIAXPanels];
                 break;
             case Account::Protocol::RING:
-                [self setupRINGPanelsForAccount:acc];
+                [self setupRINGPanels];
                 NSLog(@"DRING");
                 break;
             default:
                 break;
         }
 
-
         [self.accountDetailsView setHidden:NO];
     } else {
         [self.accountDetailsView setHidden:YES];