diff --git a/src/AccGeneralVC.mm b/src/AccGeneralVC.mm
index ecd3eed..d9d1472 100644
--- a/src/AccGeneralVC.mm
+++ b/src/AccGeneralVC.mm
@@ -80,6 +80,11 @@
     AccountModel::instance().selectedAccount()->setHasCustomUserAgent([sender state] == NSOnState);
 }
 
+- (IBAction)removeAccount:(id)sender {
+    AccountModel::instance().remove(AccountModel::instance().selectedAccount());
+    AccountModel::instance().save();
+}
+
 - (void)loadAccount
 {
     auto account = AccountModel::instance().selectedAccount();
diff --git a/src/AccRingVC.mm b/src/AccRingVC.mm
index d7ed122..54339f2 100644
--- a/src/AccRingVC.mm
+++ b/src/AccRingVC.mm
@@ -16,12 +16,6 @@
  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA.
  */
-#define ALIAS_TAG 0
-#define HOSTNAME_TAG 1
-#define USERNAME_TAG 2
-#define PASSWORD_TAG 3
-#define USERAGENT_TAG 4
-
 #import "AccRingVC.h"
 
 #import <accountmodel.h>
@@ -55,12 +49,18 @@
 @synthesize userAgentTextField;
 @synthesize allowContacts, allowHistory, allowUnknown;
 
+typedef NS_ENUM(NSInteger, TagViews) {
+    ALIAS = 0,
+    HOSTNAME,
+    USERAGENT,
+};
+
 - (void)awakeFromNib
 {
     NSLog(@"INIT Ring VC");
-    [aliasTextField setTag:ALIAS_TAG];
-    [userAgentTextField setTag:USERAGENT_TAG];
-    [bootstrapField setTag:HOSTNAME_TAG];
+    [aliasTextField setTag:TagViews::ALIAS];
+    [userAgentTextField setTag:TagViews::USERAGENT];
+    [bootstrapField setTag:TagViews::HOSTNAME];
 
     QObject::connect(AccountModel::instance().selectionModel(),
                      &QItemSelectionModel::currentChanged,
@@ -71,15 +71,14 @@
                      });
 }
 
-- (Account*) currentAccount
-{
-    auto accIdx = AccountModel::instance().selectionModel()->currentIndex();
-    return AccountModel::instance().getAccountByModelIndex(accIdx);
+- (IBAction)removeAccount:(id)sender {
+    AccountModel::instance().remove(AccountModel::instance().selectedAccount());
+    AccountModel::instance().save();
 }
 
 - (void)loadAccount
 {
-    auto account = [self currentAccount];
+    auto account = AccountModel::instance().selectedAccount();
 
     [self.aliasTextField setStringValue:account->alias().toNSString()];
 
@@ -110,28 +109,28 @@
 }
 
 - (IBAction)toggleUpnp:(NSButton *)sender {
-    [self currentAccount]->setUpnpEnabled([sender state] == NSOnState);
+    AccountModel::instance().selectedAccount()->setUpnpEnabled([sender state] == NSOnState);
 }
 
 - (IBAction)toggleAutoAnswer:(NSButton *)sender {
-    [self currentAccount]->setAutoAnswer([sender state] == NSOnState);
+    AccountModel::instance().selectedAccount()->setAutoAnswer([sender state] == NSOnState);
 }
 
 - (IBAction)toggleCustomAgent:(NSButton *)sender {
     [self.userAgentTextField setEnabled:[sender state] == NSOnState];
-    [self currentAccount]->setHasCustomUserAgent([sender state] == NSOnState);
+    AccountModel::instance().selectedAccount()->setHasCustomUserAgent([sender state] == NSOnState);
 }
 
 - (IBAction)toggleAllowFromUnknown:(id)sender {
-    [self currentAccount]->setAllowIncomingFromUnknown([sender state] == NSOnState);
+    AccountModel::instance().selectedAccount()->setAllowIncomingFromUnknown([sender state] == NSOnState);
     [allowHistory setEnabled:![sender state] == NSOnState];
     [allowContacts setEnabled:![sender state] == NSOnState];
 }
 - (IBAction)toggleAllowFromHistory:(id)sender {
-    [self currentAccount]->setAllowIncomingFromHistory([sender state] == NSOnState);
+    AccountModel::instance().selectedAccount()->setAllowIncomingFromHistory([sender state] == NSOnState);
 }
 - (IBAction)toggleAllowFromContacts:(id)sender {
-    [self currentAccount]->setAllowIncomingFromContact([sender state] == NSOnState);
+    AccountModel::instance().selectedAccount()->setAllowIncomingFromContact([sender state] == NSOnState);
 }
 
 #pragma mark - NSTextFieldDelegate methods
@@ -146,18 +145,15 @@
     NSTextField *textField = [notif object];
 
     switch ([textField tag]) {
-        case ALIAS_TAG:
-            [self currentAccount]->setAlias([[textField stringValue] UTF8String]);
-            [self currentAccount]->setDisplayName([[textField stringValue] UTF8String]);
+        case TagViews::ALIAS:
+            AccountModel::instance().selectedAccount()->setAlias([[textField stringValue] UTF8String]);
+            AccountModel::instance().selectedAccount()->setDisplayName([[textField stringValue] UTF8String]);
             break;
-        case HOSTNAME_TAG:
-            [self currentAccount]->setHostname([[textField stringValue] UTF8String]);
+        case TagViews::HOSTNAME:
+            AccountModel::instance().selectedAccount()->setHostname([[textField stringValue] UTF8String]);
             break;
-        case PASSWORD_TAG:
-            [self currentAccount]->setPassword([[textField stringValue] UTF8String]);
-            break;
-        case USERAGENT_TAG:
-            [self currentAccount]->setUserAgent([[textField stringValue] UTF8String]);
+        case TagViews::USERAGENT:
+            AccountModel::instance().selectedAccount()->setUserAgent([[textField stringValue] UTF8String]);
             break;
         default:
             break;
diff --git a/src/AccountsVC.mm b/src/AccountsVC.mm
index a640261..29abd5f 100644
--- a/src/AccountsVC.mm
+++ b/src/AccountsVC.mm
@@ -172,22 +172,6 @@
     delete proxyProtocolModel;
 }
 
-- (IBAction)moveUp:(id)sender {
-    AccountModel::instance().moveUp();
-}
-
-- (IBAction)moveDown:(id)sender {
-    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();
-    }
-}
 - (IBAction)addAccount:(id)sender {
     QModelIndex qIdx =  AccountModel::instance().protocolModel()->selectionModel()->currentIndex();
 
