diff --git a/Classes/Controllers/OpenRecentController.h b/Classes/Controllers/OpenRecentController.h
index 3a9dcc1e7..55a90478b 100644
--- a/Classes/Controllers/OpenRecentController.h
+++ b/Classes/Controllers/OpenRecentController.h
@@ -10,9 +10,9 @@
 
 
 @interface OpenRecentController : NSWindowController<NSTableViewDataSource, NSTableViewDelegate> {
-	IBOutlet NSSearchField* searchField;
+	IBOutlet __weak NSSearchField* searchField;
 	NSURL* selectedResult;
-	IBOutlet NSTableView* resultViewer;	
+	IBOutlet __weak NSTableView* resultViewer;
 }
 
 @property (strong) NSMutableArray* currentResults;
diff --git a/Classes/Controllers/PBGitCommitController.h b/Classes/Controllers/PBGitCommitController.h
index aac727fc8..b014049be 100644
--- a/Classes/Controllers/PBGitCommitController.h
+++ b/Classes/Controllers/PBGitCommitController.h
@@ -17,14 +17,15 @@
 	// object sometime
 	PBGitIndex *index;
 	
-	IBOutlet NSTextView *commitMessageView;
+	IBOutlet __unsafe_unretained NSTextView *commitMessageView;
+	IBOutlet __weak NSButton *commitButton;
+	IBOutlet __weak PBNiceSplitView *commitSplitView;
+
 	IBOutlet NSArrayController *unstagedFilesController;
 	IBOutlet NSArrayController *cachedFilesController;
-	IBOutlet NSButton *commitButton;
 
 	IBOutlet PBGitIndexController *indexController;
 	IBOutlet PBWebChangesController *webController;
-	IBOutlet PBNiceSplitView *commitSplitView;
 }
 
 @property(readonly) PBGitIndex *index;
diff --git a/Classes/Controllers/PBGitHistoryController.h b/Classes/Controllers/PBGitHistoryController.h
index 129e69ed4..73e8bd989 100644
--- a/Classes/Controllers/PBGitHistoryController.h
+++ b/Classes/Controllers/PBGitHistoryController.h
@@ -25,29 +25,29 @@
 
 @interface PBGitHistoryController : PBViewController {
 	IBOutlet PBRefController *refController;
-	IBOutlet NSSearchField *searchField;
+	IBOutlet __weak NSSearchField *searchField;
 	IBOutlet NSArrayController* commitController;
 	IBOutlet NSTreeController* treeController;
-	IBOutlet NSOutlineView* fileBrowser;
+	IBOutlet __weak NSOutlineView* fileBrowser;
 	NSArray *currentFileBrowserSelectionPath;
-	IBOutlet PBCommitList* commitList;
-	IBOutlet PBCollapsibleSplitView *historySplitView;
+	IBOutlet __weak PBCommitList* commitList;
+	IBOutlet __weak PBCollapsibleSplitView *historySplitView;
 	IBOutlet PBWebHistoryController *webHistoryController;
     QLPreviewPanel* previewPanel;
 	IBOutlet PBHistorySearchController *searchController;
 	IBOutlet GLFileView *fileView;
 
-	IBOutlet PBGitGradientBarView *upperToolbarView;
-	IBOutlet NSButton *mergeButton;
-	IBOutlet NSButton *cherryPickButton;
-	IBOutlet NSButton *rebaseButton;
+	IBOutlet __weak PBGitGradientBarView *upperToolbarView;
+	IBOutlet __weak NSButton *mergeButton;
+	IBOutlet __weak NSButton *cherryPickButton;
+	IBOutlet __weak NSButton *rebaseButton;
 
-	IBOutlet PBGitGradientBarView *scopeBarView;
-	IBOutlet NSButton *allBranchesFilterItem;
-	IBOutlet NSButton *localRemoteBranchesFilterItem;
-	IBOutlet NSButton *selectedBranchFilterItem;
+	IBOutlet __weak PBGitGradientBarView *scopeBarView;
+	IBOutlet __weak NSButton *allBranchesFilterItem;
+	IBOutlet __weak NSButton *localRemoteBranchesFilterItem;
+	IBOutlet __weak NSButton *selectedBranchFilterItem;
 
-	IBOutlet id webView;
+	IBOutlet __weak id webView;
 	int selectedCommitDetailsIndex;
 	BOOL forceSelectionUpdate;
 	
@@ -63,7 +63,7 @@
 @property (readonly) NSArrayController *commitController;
 @property (readonly) PBRefController *refController;
 @property (readonly) PBHistorySearchController *searchController;
-@property (readonly) PBCommitList *commitList;
+@property (weak, readonly) PBCommitList *commitList;
 
 - (IBAction) setDetailedView:(id)sender;
 - (IBAction) setTreeView:(id)sender;
diff --git a/Classes/Controllers/PBGitSidebarController.h b/Classes/Controllers/PBGitSidebarController.h
index e28936c33..4c4d3ddd3 100644
--- a/Classes/Controllers/PBGitSidebarController.h
+++ b/Classes/Controllers/PBGitSidebarController.h
@@ -14,11 +14,10 @@
 @class PBGitCommitController;
 
 @interface PBGitSidebarController : PBViewController<NSOutlineViewDelegate> {
-	IBOutlet NSWindow *window;
-	IBOutlet NSOutlineView *sourceView;
+	IBOutlet __weak NSOutlineView *sourceView;
 	IBOutlet NSView *sourceListControlsView;
-	IBOutlet NSPopUpButton *actionButton;
-	IBOutlet NSSegmentedControl *remoteControls;
+	IBOutlet __weak NSPopUpButton *actionButton;
+	IBOutlet __weak NSSegmentedControl *remoteControls;
 
 	NSMutableArray *items;
 
diff --git a/Classes/Controllers/PBGitSidebarController.m b/Classes/Controllers/PBGitSidebarController.m
index 659d81e7c..60d3d0811 100644
--- a/Classes/Controllers/PBGitSidebarController.m
+++ b/Classes/Controllers/PBGitSidebarController.m
@@ -36,7 +36,6 @@ @implementation PBGitSidebarController
 - (id)initWithRepository:(PBGitRepository *)theRepository superController:(PBGitWindowController *)controller
 {
 	self = [super initWithRepository:theRepository superController:controller];
-	[sourceView setDelegate:self];
 	items = [NSMutableArray array];
 
 	return self;
@@ -45,7 +44,6 @@ - (id)initWithRepository:(PBGitRepository *)theRepository superController:(PBGit
 - (void)awakeFromNib
 {
 	[super awakeFromNib];
-	window.contentView = self.view;
 	[self populateList];
 
 	historyViewController = [[PBGitHistoryController alloc] initWithRepository:repository superController:superController];
diff --git a/Classes/Controllers/PBGitWindowController.h b/Classes/Controllers/PBGitWindowController.h
index b16f04ea5..b2656165d 100644
--- a/Classes/Controllers/PBGitWindowController.h
+++ b/Classes/Controllers/PBGitWindowController.h
@@ -15,18 +15,15 @@
 	PBViewController *contentController;
 
 	PBGitSidebarController *sidebarController;
-	IBOutlet NSView *sourceListControlsView;
-	IBOutlet NSSplitView *splitView;
-	IBOutlet NSView *sourceSplitView;
-	IBOutlet NSView *contentSplitView;
 
-	IBOutlet NSTextField *statusField;
-	IBOutlet NSProgressIndicator *progressIndicator;
-
-	PBViewController* viewController;
-
-	IBOutlet NSToolbarItem *terminalItem;
-	IBOutlet NSToolbarItem *finderItem;
+	IBOutlet __weak NSView *sourceListControlsView;
+	IBOutlet __weak NSSplitView *splitView;
+	IBOutlet __weak NSView *sourceSplitView;
+	IBOutlet __weak NSView *contentSplitView;
+	IBOutlet __weak NSTextField *statusField;
+	IBOutlet __weak NSProgressIndicator *progressIndicator;
+	IBOutlet __weak NSToolbarItem *terminalItem;
+	IBOutlet __weak NSToolbarItem *finderItem;
 }
 
 @property (nonatomic, weak)  PBGitRepository *repository;
diff --git a/Classes/Controllers/PBGitWindowController.m b/Classes/Controllers/PBGitWindowController.m
index 5fdbd71c5..fa501da6b 100644
--- a/Classes/Controllers/PBGitWindowController.m
+++ b/Classes/Controllers/PBGitWindowController.m
@@ -107,8 +107,10 @@ - (void) changeContentController:(PBViewController *)controller
 	if (!controller || (contentController == controller))
 		return;
 
-	if (contentController)
+	if (contentController) {
 		[contentController removeObserver:self forKeyPath:@"status"];
+        [contentController didMoveFromSupercontroller];
+    }
 
 	[self removeAllContentSubViews];
 
@@ -300,4 +302,10 @@ - (void)splitView:(NSSplitView *)sender resizeSubviewsWithOldSize:(NSSize)oldSiz
 	[mainView setFrame:mainFrame];
 }
 
+- (void)dealloc;
+{
+    NSLog( @"%@ dealloc", self.class );
+    [contentController didMoveFromSupercontroller];
+}
+
 @end
diff --git a/Classes/Controllers/PBRefController.h b/Classes/Controllers/PBRefController.h
index a9c11f4c2..dfc63bbcc 100644
--- a/Classes/Controllers/PBRefController.h
+++ b/Classes/Controllers/PBRefController.h
@@ -16,9 +16,9 @@
 @class PBRefMenuItem;
 
 @interface PBRefController : NSObject <PBRefContextDelegate> {
-	IBOutlet PBGitHistoryController *historyController;
+	IBOutlet __unsafe_unretained PBGitHistoryController *historyController;
 	IBOutlet NSArrayController *commitController;
-	IBOutlet PBCommitList *commitList;
+	IBOutlet __weak PBCommitList *commitList;
 
 	IBOutlet NSPopUpButton *branchPopUp;
 }
diff --git a/Classes/Controllers/PBViewController.h b/Classes/Controllers/PBViewController.h
index dc574d949..aa68572ae 100644
--- a/Classes/Controllers/PBViewController.h
+++ b/Classes/Controllers/PBViewController.h
@@ -12,7 +12,7 @@
 
 @interface PBViewController : NSViewController {
 	__weak PBGitRepository *repository;
-	PBGitWindowController *superController;
+	__unsafe_unretained PBGitWindowController *superController;
 
 	NSString *status;
 	BOOL isBusy;
@@ -39,4 +39,6 @@
 - (NSResponder *)firstResponder;
 - (IBAction) refresh:(id)sender;
 
+- (void)didMoveFromSupercontroller;
+
 @end
diff --git a/Classes/Controllers/PBViewController.m b/Classes/Controllers/PBViewController.m
index a2cfadeac..e0f939d0c 100644
--- a/Classes/Controllers/PBViewController.m
+++ b/Classes/Controllers/PBViewController.m
@@ -61,4 +61,9 @@ - (void)viewLoaded
 {
 }
 
+- (void)didMoveFromSupercontroller;
+{
+    superController = nil;
+}
+
 @end
diff --git a/Classes/Controllers/PBWebHistoryController.h b/Classes/Controllers/PBWebHistoryController.h
index f42a42e9f..255463fb0 100644
--- a/Classes/Controllers/PBWebHistoryController.h
+++ b/Classes/Controllers/PBWebHistoryController.h
@@ -18,8 +18,8 @@
 
 
 @interface PBWebHistoryController : PBWebController {
-	IBOutlet PBGitHistoryController* historyController;
-	IBOutlet id<PBRefContextDelegate> contextMenuDelegate;
+	IBOutlet __unsafe_unretained PBGitHistoryController* historyController;
+	IBOutlet __weak id<PBRefContextDelegate> contextMenuDelegate;
 
 	PBGitSHA* currentSha;
 	NSString* diff;
diff --git a/Classes/PBCommitList.h b/Classes/PBCommitList.h
index 60d528e11..43ee15298 100644
--- a/Classes/PBCommitList.h
+++ b/Classes/PBCommitList.h
@@ -16,10 +16,10 @@
 typedef void(^PBFindPanelActionBlock)(id sender);
 
 @interface PBCommitList : NSTableView {
-	IBOutlet WebView* webView;
-	IBOutlet PBWebHistoryController *webController;
-	IBOutlet PBGitHistoryController *controller;
-	IBOutlet PBHistorySearchController *searchController;
+	IBOutlet __weak WebView* webView;
+	IBOutlet __weak PBWebHistoryController *webController;
+	IBOutlet __unsafe_unretained PBGitHistoryController *controller;
+	IBOutlet __weak PBHistorySearchController *searchController;
 
     BOOL useAdjustScroll;
 	NSPoint mouseDownPoint;
diff --git a/Classes/Views/GLFileView.h b/Classes/Views/GLFileView.h
index 2d49d95ed..d4d003536 100644
--- a/Classes/Views/GLFileView.h
+++ b/Classes/Views/GLFileView.h
@@ -14,12 +14,12 @@
 @class PBGitHistoryController;
 
 @interface GLFileView : PBWebController <MGScopeBarDelegate> {
-	IBOutlet PBGitHistoryController* historyController;
-	IBOutlet MGScopeBar *typeBar;
+	IBOutlet __unsafe_unretained PBGitHistoryController* historyController;
+	IBOutlet __weak MGScopeBar *typeBar;
 	NSMutableArray *groups;
 	NSString *logFormat;
-	IBOutlet NSView *accessoryView;
-	IBOutlet NSSplitView *fileListSplitView;
+	IBOutlet __weak NSView *accessoryView;
+	IBOutlet __weak NSSplitView *fileListSplitView;
 }
 
 - (void)showFile;
diff --git a/Classes/Views/PBGitRevisionCell.h b/Classes/Views/PBGitRevisionCell.h
index 8c9fd9532..c2983f31f 100644
--- a/Classes/Views/PBGitRevisionCell.h
+++ b/Classes/Views/PBGitRevisionCell.h
@@ -16,8 +16,8 @@
 	PBGitCommit *objectValue;
 	PBGraphCellInfo *cellInfo;
 	NSTextFieldCell *textCell;
-	IBOutlet PBGitHistoryController *controller;
-	IBOutlet id<PBRefContextDelegate> contextMenuDelegate;
+	IBOutlet __unsafe_unretained PBGitHistoryController *controller;
+	IBOutlet __weak id<PBRefContextDelegate> contextMenuDelegate;
 }
 
 - (int) indexAtX:(float)x;
diff --git a/Classes/Views/PBQLOutlineView.h b/Classes/Views/PBQLOutlineView.h
index d0f8284ba..57a7196d8 100644
--- a/Classes/Views/PBQLOutlineView.h
+++ b/Classes/Views/PBQLOutlineView.h
@@ -10,7 +10,7 @@
 #import "PBGitHistoryController.h"
 
 @interface PBQLOutlineView : NSOutlineView {
-	IBOutlet PBGitHistoryController* controller;
+	IBOutlet __unsafe_unretained PBGitHistoryController* controller;
 }
 
 @end
diff --git a/Classes/Views/PBQLTextView.h b/Classes/Views/PBQLTextView.h
index 715e74efe..a95ebfe69 100644
--- a/Classes/Views/PBQLTextView.h
+++ b/Classes/Views/PBQLTextView.h
@@ -13,7 +13,7 @@
 
 
 @interface PBQLTextView : NSTextView {
-	IBOutlet PBGitHistoryController *controller;
+	IBOutlet __unsafe_unretained PBGitHistoryController *controller;
 }
 
 @end
diff --git a/Classes/git/PBGitHistoryGrapher.h b/Classes/git/PBGitHistoryGrapher.h
index 0e02e6a3e..06a475531 100644
--- a/Classes/git/PBGitHistoryGrapher.h
+++ b/Classes/git/PBGitHistoryGrapher.h
@@ -17,7 +17,7 @@
 
 
 @interface PBGitHistoryGrapher : NSObject {
-	id delegate;
+	__weak id delegate;
 	NSOperationQueue *currentQueue;
 
 	NSMutableSet *searchSHAs;
diff --git a/Classes/git/PBGitHistoryList.m b/Classes/git/PBGitHistoryList.m
index b6ea58204..dec9979a6 100644
--- a/Classes/git/PBGitHistoryList.m
+++ b/Classes/git/PBGitHistoryList.m
@@ -93,6 +93,7 @@ - (void)cleanup
 	if (currentRevList) {
 		[currentRevList removeObserver:self forKeyPath:@"commits"];
 		[currentRevList cancel];
+        currentRevList = nil;
 	}
 	[graphQueue cancelAllOperations];