diff --git a/CMakeLists.txt b/CMakeLists.txt
index 6388d82..428940a 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -11,7 +11,7 @@
 
 SET(PROJ_COPYRIGHT " © 2015 Savoir-faire Linux \n GPLv3 https://www.gnu.org/copyleft/gpl.html")
 
-ADD_DEFINITIONS("-std=c++11")
+ADD_DEFINITIONS("-std=c++11 -fobjc-arc")
 
 PROJECT(${PROJ_NAME})
 
diff --git a/src/AccSecurityVC.h b/src/AccSecurityVC.h
index 96d9506..9aaf995 100644
--- a/src/AccSecurityVC.h
+++ b/src/AccSecurityVC.h
@@ -36,4 +36,4 @@
 
 @end
 
-#endif // ACCSECURITYVC_H
\ No newline at end of file
+#endif // ACCSECURITYVC_H
diff --git a/src/AccSecurityVC.mm b/src/AccSecurityVC.mm
index cb4dda6..1a7f4c9 100644
--- a/src/AccSecurityVC.mm
+++ b/src/AccSecurityVC.mm
@@ -49,7 +49,7 @@
 
 @interface AccSecurityVC ()
 
-@property NSTreeController *treeController;
+@property QNSTreeController *treeController;
 @property (unsafe_unretained) IBOutlet NSOutlineView *cipherListView;
 @property (unsafe_unretained) IBOutlet NSButton *useTLS;
 @property (unsafe_unretained) IBOutlet NSView *tlsContainer;
@@ -122,11 +122,11 @@
     [self updateControlsWithTag:OUTGOING_TLS_SRV_NAME];
     [self updateControlsWithTag:TLS_NEGOTIATION_TAG];
 
-    QModelIndex qTlsMethodIdx = [self currentAccount]->tlsMethodModel()->selectionModel()->currentIndex();
+    QModelIndex qTlsMethodIdx = account->tlsMethodModel()->selectionModel()->currentIndex();
     [self.tlsMethodList removeAllItems];
     [self.tlsMethodList addItemWithTitle:qTlsMethodIdx.data(Qt::DisplayRole).toString().toNSString()];
 
-    treeController = [[QNSTreeController alloc] initWithQModel:[self currentAccount]->cipherModel()];
+    treeController = [[QNSTreeController alloc] initWithQModel:account->cipherModel()];
     [treeController setAvoidsEmptySelection:NO];
     [treeController setAlwaysUsesMultipleValuesMarker:YES];
     [treeController setChildrenKeyPath:@"children"];
@@ -145,22 +145,22 @@
     NSArray * pathComponentArray = [self pathComponentArray];
 
     if([self currentAccount]->tlsCaListCertificate() != nil) {
-            NSLog(@"CA ==> %@", [self currentAccount]->tlsCaListCertificate()->path().toNSURL());
-        [caListPathControl setURL:[self currentAccount]->tlsCaListCertificate()->path().toNSURL()];
+        NSLog(@"CA ==> %@", account->tlsCaListCertificate()->path().toNSURL());
+        [caListPathControl setURL:account->tlsCaListCertificate()->path().toNSURL()];
     } else {
         [caListPathControl setURL:nil];
     }
 
     if([self currentAccount]->tlsCertificate() != nil) {
-        NSLog(@" CERT ==> %@", [self currentAccount]->tlsCertificate()->path().toNSURL());
-        [certificatePathControl setURL:[self currentAccount]->tlsCertificate()->path().toNSURL()];
+        NSLog(@" CERT ==> %@", account->tlsCertificate()->path().toNSURL());
+        [certificatePathControl setURL:account->tlsCertificate()->path().toNSURL()];
     } else {
         [certificatePathControl setURL:nil];
     }
 
     if([self currentAccount]->tlsPrivateKeyCertificate() != nil) {
-        NSLog(@" PVK ==> %@", [self currentAccount]->tlsPrivateKeyCertificate()->path().toNSURL());
-        [pvkPathControl setURL:[self currentAccount]->tlsPrivateKeyCertificate()->path().toNSURL()];
+        NSLog(@" PVK ==> %@", account->tlsPrivateKeyCertificate()->path().toNSURL());
+        [pvkPathControl setURL:account->tlsPrivateKeyCertificate()->path().toNSURL()];
     } else {
         [pvkPathControl setURL:nil];
     }
diff --git a/src/AccVideoVC.mm b/src/AccVideoVC.mm
index 862e02d..7e5ed1e 100644
--- a/src/AccVideoVC.mm
+++ b/src/AccVideoVC.mm
@@ -78,15 +78,15 @@
 {
     auto account = [self currentAccount];
 
-    treeController = [[QNSTreeController alloc] initWithQModel:[self currentAccount]->codecModel()->videoCodecs()];
+    treeController = [[QNSTreeController alloc] initWithQModel:account->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:![self currentAccount]->isVideoEnabled()];
-    [toggleVideoButton setState:[self currentAccount]->isVideoEnabled()?NSOnState:NSOffState];
+    [videoPanelContainer setHidden:!account->isVideoEnabled()];
+    [toggleVideoButton setState:account->isVideoEnabled()?NSOnState:NSOffState];
 }
 
 - (IBAction)toggleVideoEnabled:(id)sender {
diff --git a/src/AccountsVC.mm b/src/AccountsVC.mm
index a04ddec..168e59b 100644
--- a/src/AccountsVC.mm
+++ b/src/AccountsVC.mm
@@ -178,10 +178,9 @@
 - (IBAction)addAccount:(id)sender {
     QModelIndex qIdx =  AccountModel::instance()->protocolModel()->selectionModel()->currentIndex();
 
-    NSString* newAccName = [[NSString alloc] initWithFormat:@"%@ account",
+    auto newAccName = [[NSString alloc] initWithFormat:@"%@ account",
                 AccountModel::instance()->protocolModel()->data(qIdx, Qt::DisplayRole).toString().toNSString(), nil];
-
-    Account* newAcc =AccountModel::instance()->add([newAccName UTF8String], qIdx);
+    AccountModel::instance()->add([newAccName UTF8String], qIdx);
     AccountModel::instance()->save();
 }
 
@@ -270,11 +269,10 @@
     if ([[tableColumn identifier] isEqualToString:COLUMNID_ENABLE] &&
                             AccountModel::instance()->ip2ip()->index() == qIdx) {
 
-        returnCell = [[NSCell alloc] init];
+        return [[NSCell alloc] init];
     } else {
-        returnCell = [tableColumn dataCell];
+        return [tableColumn dataCell];
     }
-    return returnCell;
 }
 
 // -------------------------------------------------------------------------------
@@ -350,9 +348,9 @@
 {
     // ask the tree controller for the current selection
     if([[treeController selectedNodes] count] > 0) {
-        QModelIndex qIdx = [treeController toQIdx:[treeController selectedNodes][0]];
+        auto qIdx = [treeController toQIdx:[treeController selectedNodes][0]];
         //Update details view
-        Account* acc = AccountModel::instance()->getAccountByModelIndex(qIdx);
+        auto acc = AccountModel::instance()->getAccountByModelIndex(qIdx);
         AccountModel::instance()->selectionModel()->setCurrentIndex(qIdx, QItemSelectionModel::ClearAndSelect);
 
             switch (acc->protocol()) {
diff --git a/src/GeneralPrefsVC.h b/src/GeneralPrefsVC.h
index ef059ae..cffd689 100644
--- a/src/GeneralPrefsVC.h
+++ b/src/GeneralPrefsVC.h
@@ -32,10 +32,7 @@
 
 #import <Cocoa/Cocoa.h>
 
-@interface GeneralPrefsVC : NSViewController {
-
-    NSTextField *historyChangedLabel;
-}
+@interface GeneralPrefsVC : NSViewController
 
 @end
 
diff --git a/src/GeneralPrefsVC.mm b/src/GeneralPrefsVC.mm
index 2cf7cdd..b4c9d35 100644
--- a/src/GeneralPrefsVC.mm
+++ b/src/GeneralPrefsVC.mm
@@ -34,8 +34,8 @@
 #import "Constants.h"
 
 @interface GeneralPrefsVC ()
-@property (assign) IBOutlet NSTextField *historyChangedLabel;
-@property (assign) IBOutlet NSView *advancedGeneralSettings;
+@property (unsafe_unretained) IBOutlet NSTextField *historyChangedLabel;
+@property (unsafe_unretained) IBOutlet NSView *advancedGeneralSettings;
 @property (unsafe_unretained) IBOutlet NSButton *startUpButton;
 
 @end
@@ -56,6 +56,12 @@
     [advancedGeneralSettings setHidden:![[NSUserDefaults standardUserDefaults] boolForKey:Preferences::ShowAdvanced]];
 }
 
+- (void) dealloc
+{
+    [[NSUserDefaults standardUserDefaults] removeObserver:self forKeyPath:Preferences::HistoryLimit];
+    [[NSUserDefaults standardUserDefaults] removeObserver:self forKeyPath:Preferences::ShowAdvanced];
+}
+
 - (IBAction)clearHistory:(id)sender {
     CategorizedHistoryModel::instance()->clearAllCollections();
     [historyChangedLabel setHidden:NO];
@@ -94,7 +100,7 @@
     if (loginItemsRef == nil) return;
     if (shouldBeToggled) {
         // Add the app to the LoginItems list.
-        CFURLRef appUrl = (CFURLRef)[NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]];
+        CFURLRef appUrl = (__bridge CFURLRef)[NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]];
         LSSharedFileListItemRef itemRef = LSSharedFileListInsertItemURL(loginItemsRef, kLSSharedFileListItemLast, NULL, NULL, appUrl, NULL, NULL);
         if (itemRef) CFRelease(itemRef);
     }
@@ -109,21 +115,21 @@
 
 - (LSSharedFileListItemRef)itemRefInLoginItems {
     LSSharedFileListItemRef itemRef = nil;
-    NSURL *itemUrl = nil;
+    CFURLRef itemUrl = nil;
 
     // Get the app's URL.
-    NSURL *appUrl = [NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]];
+    auto appUrl = [NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]];
     // Get the LoginItems list.
     LSSharedFileListRef loginItemsRef = LSSharedFileListCreate(NULL, kLSSharedFileListSessionLoginItems, NULL);
     if (loginItemsRef == nil) return nil;
     // Iterate over the LoginItems.
-    NSArray *loginItems = (NSArray *)LSSharedFileListCopySnapshot(loginItemsRef, nil);
+    NSArray *loginItems = (__bridge_transfer NSArray *)LSSharedFileListCopySnapshot(loginItemsRef, nil);
     for (int currentIndex = 0; currentIndex < [loginItems count]; currentIndex++) {
         // Get the current LoginItem and resolve its URL.
-        LSSharedFileListItemRef currentItemRef = (LSSharedFileListItemRef)[loginItems objectAtIndex:currentIndex];
-        if (LSSharedFileListItemResolve(currentItemRef, 0, (CFURLRef *) &itemUrl, NULL) == noErr) {
+        LSSharedFileListItemRef currentItemRef = (__bridge LSSharedFileListItemRef)[loginItems objectAtIndex:currentIndex];
+        if (LSSharedFileListItemResolve(currentItemRef, 0, &itemUrl, NULL) == noErr) {
             // Compare the URLs for the current LoginItem and the app.
-            if ([itemUrl isEqual:appUrl]) {
+            if ([(__bridge NSURL *)itemUrl isEqual:appUrl]) {
                 // Save the LoginItem reference.
                 itemRef = currentItemRef;
             }
@@ -132,7 +138,6 @@
     // Retain the LoginItem reference.
     if (itemRef != nil) CFRetain(itemRef);
     // Release the LoginItems lists.
-    [loginItems release];
     CFRelease(loginItemsRef);
 
     return itemRef;
diff --git a/src/HistoryVC.mm b/src/HistoryVC.mm
index fbdd78e..acb41c4 100644
--- a/src/HistoryVC.mm
+++ b/src/HistoryVC.mm
@@ -44,7 +44,7 @@
 
 @interface HistoryVC()
 
-@property NSTreeController *treeController;
+@property QNSTreeController *treeController;
 @property (assign) IBOutlet NSOutlineView *historyView;
 @property QSortFilterProxyModel *historyProxyModel;
 @end
diff --git a/src/PersonsVC.mm b/src/PersonsVC.mm
index bf9e6b4..f1d1c26 100644
--- a/src/PersonsVC.mm
+++ b/src/PersonsVC.mm
@@ -62,7 +62,7 @@
 
 @interface PersonsVC ()
 
-@property NSTreeController *treeController;
+@property QNSTreeController *treeController;
 @property (assign) IBOutlet NSOutlineView *personsView;
 @property QSortFilterProxyModel *contactProxyModel;
 
diff --git a/src/PreferencesVC.h b/src/PreferencesVC.h
index e763caa..4b2ecf9 100644
--- a/src/PreferencesVC.h
+++ b/src/PreferencesVC.h
@@ -34,11 +34,11 @@
 
 @interface PreferencesVC : NSViewController <NSToolbarDelegate>
 
-@property (nonatomic, assign) NSViewController *currentVC;
-@property (nonatomic, assign) NSViewController *accountsPrefsVC;
-@property (nonatomic, assign) NSViewController *generalPrefsVC;
-@property (nonatomic, assign) NSViewController *audioPrefsVC;
-@property (nonatomic, assign) NSViewController *videoPrefsVC;
+@property (nonatomic, strong) NSViewController *currentVC;
+@property (nonatomic, strong) NSViewController *accountsPrefsVC;
+@property (nonatomic, strong) NSViewController *generalPrefsVC;
+@property (nonatomic, strong) NSViewController *audioPrefsVC;
+@property (nonatomic, strong) NSViewController *videoPrefsVC;
 
 - (void) close;
 - (void)displayGeneral:(NSToolbarItem *)sender;
diff --git a/src/QNSTreeController.mm b/src/QNSTreeController.mm
index eca4884..f7697fb 100644
--- a/src/QNSTreeController.mm
+++ b/src/QNSTreeController.mm
@@ -55,7 +55,7 @@
 
 - (id) initWithQModel:(QAbstractItemModel*) model
 {
-    [super init];
+    self = [super init];
     self->privateQModel = model;
 
     topNodes = [[NSMutableArray alloc] init];
diff --git a/src/RingWizardWC.h b/src/RingWizardWC.h
index e3ca858..28f3755 100644
--- a/src/RingWizardWC.h
+++ b/src/RingWizardWC.h
@@ -30,9 +30,6 @@
 
 #import <Cocoa/Cocoa.h>
 
-@interface RingWizardWC : NSWindowController <NSWindowDelegate>{
-
-    NSButton *goToAppButton;
-}
+@interface RingWizardWC : NSWindowController <NSWindowDelegate>
 
 @end
diff --git a/src/RingWizardWC.mm b/src/RingWizardWC.mm
index b3b03dd..5868bc6 100644
--- a/src/RingWizardWC.mm
+++ b/src/RingWizardWC.mm
@@ -38,11 +38,11 @@
 
 
 @interface RingWizardWC ()
-@property (assign) IBOutlet NSButton *goToAppButton;
-@property (assign) IBOutlet NSTextField *nickname;
-@property (assign) IBOutlet NSProgressIndicator *progressBar;
-@property (assign) IBOutlet NSTextField *indicationLabel;
-@property (assign) IBOutlet NSButton *createButton;
+@property (unsafe_unretained) IBOutlet NSButton *goToAppButton;
+@property (unsafe_unretained) IBOutlet NSTextField *nickname;
+@property (unsafe_unretained) IBOutlet NSProgressIndicator *progressBar;
+@property (unsafe_unretained) IBOutlet NSTextField *indicationLabel;
+@property (unsafe_unretained) IBOutlet NSButton *createButton;
 @end
 
 @implementation RingWizardWC
@@ -112,7 +112,7 @@
 {
     LSSharedFileListRef loginItemsRef = LSSharedFileListCreate(NULL, kLSSharedFileListSessionLoginItems, NULL);
     if (loginItemsRef == nil) return;
-    CFURLRef appUrl = (CFURLRef)[NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]];
+    CFURLRef appUrl = (__bridge CFURLRef)[NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]];
     LSSharedFileListItemRef itemRef = LSSharedFileListInsertItemURL(loginItemsRef, kLSSharedFileListItemLast, NULL, NULL, appUrl, NULL, NULL);
     if (itemRef) CFRelease(itemRef);
 }
diff --git a/src/delegates/ImageManipulationDelegate.mm b/src/delegates/ImageManipulationDelegate.mm
index fb0b91e..40f7a0a 100644
--- a/src/delegates/ImageManipulationDelegate.mm
+++ b/src/delegates/ImageManipulationDelegate.mm
@@ -125,11 +125,14 @@
     QPainter painter(&pxm);
 
     // create the image somehow, load from file, draw into it...
-    CGImageSourceRef source;
+    auto sourceImgRef = CGImageSourceCreateWithData((CFDataRef)[[NSImage imageNamed:@"NSUser"] TIFFRepresentation], NULL);
+    auto imgRef = CGImageSourceCreateImageAtIndex(sourceImgRef, 0, NULL);
+    auto finalImgRef =  resizeCGImage(imgRef, size);
+    painter.drawPixmap(3,3,QtMac::fromCGImageRef(finalImgRef));
 
-    source = CGImageSourceCreateWithData((CFDataRef)[[NSImage imageNamed:@"NSUser"] TIFFRepresentation], NULL);
-    CGImageRef maskRef =  CGImageSourceCreateImageAtIndex(source, 0, NULL);
-    painter.drawPixmap(3,3,QtMac::fromCGImageRef(resizeCGImage(maskRef, size)));
+    CFRelease(sourceImgRef);
+    CFRelease(imgRef);
+    CFRelease(finalImgRef);
 
     return pxm;
 }
@@ -143,8 +146,6 @@
                                                  size.width() * CGImageGetBitsPerComponent(image),
                                                  colorspace,
                                                  CGImageGetAlphaInfo(image));
-    CGColorSpaceRelease(colorspace);
-
 
     if(context == NULL)
         return nil;
diff --git a/src/views/CallView.mm b/src/views/CallView.mm
index 43a5d80..8fe60c6 100644
--- a/src/views/CallView.mm
+++ b/src/views/CallView.mm
@@ -73,7 +73,7 @@
     NSLog(@"Dragging entered");
 
     NSURL* fileURL = [NSURL URLFromPasteboard: [sender draggingPasteboard]];
-    CFStringRef fileExtension = (CFStringRef) [fileURL.path pathExtension];
+    CFStringRef fileExtension = (__bridge CFStringRef) [fileURL.path pathExtension];
     CFStringRef fileUTI = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, fileExtension, NULL);
 
     // Check if the pasteboard contains image data and source/user wants it copied
@@ -94,11 +94,12 @@
                                        usingBlock:^(NSDraggingItem *draggingItem, NSInteger idx, BOOL *stop) {
                                            *stop = YES;
                                        }];
-
+        CFRelease(fileUTI);
         //accept data as a copy operation
         return NSDragOperationCopy;
     }
 
+    CFRelease(fileUTI);
     return NSDragOperationNone;
 }
 
@@ -140,11 +141,13 @@
     [self setNeedsDisplay: YES];
 
     NSURL* fileURL = [NSURL URLFromPasteboard: [sender draggingPasteboard]];
-    CFStringRef fileExtension = (CFStringRef) [fileURL.path pathExtension];
+    CFStringRef fileExtension = (__bridge CFStringRef) [fileURL.path pathExtension];
     CFStringRef fileUTI = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, fileExtension, NULL);
 
+    BOOL conforms = (UTTypeConformsTo(fileUTI, kUTTypeVideo)) || (UTTypeConformsTo(fileUTI, kUTTypeMovie));
+    CFRelease(fileUTI);
     //check to see if we can accept the data
-    return (UTTypeConformsTo(fileUTI, kUTTypeVideo)) || (UTTypeConformsTo(fileUTI, kUTTypeMovie));
+    return conforms;
 }
 
 - (BOOL)performDragOperation:(id <NSDraggingInfo>)sender
