diff --git a/AppDelegate.mm b/AppDelegate.mm
index d11bdc9..d5aa29b 100644
--- a/AppDelegate.mm
+++ b/AppDelegate.mm
@@ -4,39 +4,10 @@
 @implementation AppDelegate
 
 - (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
+    [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"NSConstraintBasedLayoutVisualizeMutuallyExclusiveConstraints"];
+
     self.ringWindowController = [[RingWindowController alloc] initWithWindowNibName:@"RingWindow"];
     [self.ringWindowController showWindow:nil];
 }
 
-- (PreferencesWindowController *)preferencesWindowController
-{
-    if (!_preferencesWindowController)
-    {
-        NSLog(@"Coucou");
-        _preferencesWindowController = [[PreferencesWindowController alloc] initWithWindowNibName:@"PreferencesWindow"];
-        _preferencesWindowController.window.restorable = YES;
-        _preferencesWindowController.window.restorationClass = [self class];
-        _preferencesWindowController.window.identifier = @"preferences";
-    }
-    return _preferencesWindowController;
-}
-
-- (IBAction)launchPreferencesWindow:(id)sender {
-    [[self preferencesWindowController] showWindow:nil];
-}
-
-+ (void)restoreWindowWithIdentifier:(NSString *)identifier
-                              state:(NSCoder *)state
-                  completionHandler:(void (^)(NSWindow *, NSError *))completionHandler
-{
-    NSLog(@"restoreWindowWithIdentifier: %@", identifier);
-    NSWindow *window = nil;
-    if ([identifier isEqualToString:@"preferences"])
-    {
-        AppDelegate *appDelegate = [NSApp delegate];
-        window = [[appDelegate preferencesWindowController] window];
-    }
-    completionHandler(window, nil);
-}
-
 @end
