diff --git a/resources/celerity/map.php b/resources/celerity/map.php
--- a/resources/celerity/map.php
+++ b/resources/celerity/map.php
@@ -354,7 +354,7 @@
     'rsrc/js/application/auth/behavior-persona-login.js' => '9414ff18',
     'rsrc/js/application/config/behavior-reorder-fields.js' => '14a827de',
     'rsrc/js/application/conpherence/ConpherenceThreadManager.js' => 'bb928342',
-    'rsrc/js/application/conpherence/behavior-durable-column.js' => 'cccebf26',
+    'rsrc/js/application/conpherence/behavior-durable-column.js' => 'c81c2bba',
     'rsrc/js/application/conpherence/behavior-menu.js' => 'de5579b4',
     'rsrc/js/application/conpherence/behavior-pontificate.js' => '21ba5861',
     'rsrc/js/application/conpherence/behavior-quicksand-blacklist.js' => '7927a7d3',
@@ -584,7 +584,7 @@
     'javelin-behavior-diffusion-locate-file' => '6d3e1947',
     'javelin-behavior-diffusion-pull-lastmodified' => '2b228192',
     'javelin-behavior-doorkeeper-tag' => 'e5822781',
-    'javelin-behavior-durable-column' => 'cccebf26',
+    'javelin-behavior-durable-column' => 'c81c2bba',
     'javelin-behavior-error-log' => '6882e80a',
     'javelin-behavior-fancy-datepicker' => 'c51ae228',
     'javelin-behavior-global-drag-and-drop' => 'bbdf75ca',
@@ -1736,6 +1736,16 @@
       'javelin-stratcom',
       'javelin-vector',
     ),
+    'c81c2bba' => array(
+      'javelin-behavior',
+      'javelin-dom',
+      'javelin-stratcom',
+      'javelin-behavior-device',
+      'javelin-scrollbar',
+      'javelin-quicksand',
+      'phabricator-keyboard-shortcut',
+      'conpherence-thread-manager',
+    ),
     'c90a04fc' => array(
       'javelin-dom',
       'javelin-dynval',
@@ -1750,16 +1760,6 @@
       'javelin-stratcom',
       'phabricator-phtize',
     ),
-    'cccebf26' => array(
-      'javelin-behavior',
-      'javelin-dom',
-      'javelin-stratcom',
-      'javelin-behavior-device',
-      'javelin-scrollbar',
-      'javelin-quicksand',
-      'phabricator-keyboard-shortcut',
-      'conpherence-thread-manager',
-    ),
     'd19198c8' => array(
       'javelin-install',
       'javelin-dom',
diff --git a/webroot/rsrc/js/application/conpherence/behavior-durable-column.js b/webroot/rsrc/js/application/conpherence/behavior-durable-column.js
--- a/webroot/rsrc/js/application/conpherence/behavior-durable-column.js
+++ b/webroot/rsrc/js/application/conpherence/behavior-durable-column.js
@@ -24,7 +24,8 @@
     statics.initialized = true;
   }
 
-  var show = false;
+  var userVisible = config.visible;
+  var show = null;
   var loadThreadID = null;
   var scrollbar = null;
 
@@ -43,62 +44,54 @@
     return JX.DOM.find(column, 'div', 'conpherence-durable-column-main');
   }
 
-  function _autocloseColumn() {
+  function _isViewportWideEnoughForColumn() {
     var viewport = JX.Vector.getViewport();
     if (viewport.x < minimumViewportWidth) {
-      if (show) {
-        _toggleColumn(false);
-        resizeClose = true;
-      }
-      return true;
+      return false;
     } else {
-      if (resizeClose) {
-        resizeClose = false;
-        if (!show) {
-          _toggleColumn(false);
-        }
-      }
+      return true;
     }
+  }
 
-    return false;
+  function _updateColumnVisibility() {
+    var new_value = (userVisible && _isViewportWideEnoughForColumn());
+    if (new_value !== show) {
+      show = new_value;
+      _drawColumn(show);
+    }
   }
 
   function _toggleColumn(explicit) {
-    if (explicit) {
-      if (_autocloseColumn()) {
-        return;
-      }
-    }
+    userVisible = !userVisible;
+    _updateColumnVisibility();
+
+    new JX.Request(config.settingsURI)
+      .setData({value: (show ? 1 : 0)})
+      .send();
+  }
 
-    show = !show;
-    JX.DOM.alterClass(document.body, 'with-durable-column', show);
+  function _drawColumn(visible) {
+    JX.DOM.alterClass(document.body, 'with-durable-column', visible);
     var column = _getColumnNode();
-    if (show) {
+    if (visible) {
       JX.DOM.show(column);
       threadManager.loadThreadByID(loadThreadID);
     } else {
       JX.DOM.hide(column);
     }
-    JX.Stratcom.invoke('resize');
-    JX.Quicksand.setFrame(show ? quick : null);
+    JX.Quicksand.setFrame(visible ? quick : null);
 
     // When we activate the column, adjust the tablet breakpoint so that we
     // convert the left side of the screen to tablet mode on narrow displays.
     var breakpoint = JX.Device.getTabletBreakpoint();
     JX.Device.setTabletBreakpoint(
-      show ? (breakpoint + columnWidth) : (breakpoint - columnWidth));
-
-    // If this was an explicit toggle action from the user, save their
-    // preference.
-    if (explicit) {
-      new JX.Request(config.settingsURI)
-        .setData({value: (show ? 1 : 0)})
-        .send();
-    }
+      visible ? (breakpoint + columnWidth) : (breakpoint - columnWidth));
+
+    JX.Stratcom.invoke('resize');
   }
 
   new JX.KeyboardShortcut('\\', 'Toggle Conpherence Column')
-    .setHandler(JX.bind(null, _toggleColumn, true))
+    .setHandler(_toggleColumn)
     .register();
 
   scrollbar = new JX.Scrollbar(_getColumnScrollNode());
@@ -193,7 +186,7 @@
           break;
         case 'hide_column':
           JX.Stratcom.invoke('notification-panel-close');
-          _toggleColumn(true);
+          _toggleColumn();
           break;
       }
     });
@@ -220,8 +213,7 @@
       threadManager.loadThreadByID(data.threadID);
     });
 
-  var resizeClose = false;
-  JX.Stratcom.listen('resize', null, _autocloseColumn);
+  JX.Stratcom.listen('resize', null, _updateColumnVisibility);
 
   function _getColumnBodyNode() {
     var column = JX.$('conpherence-durable-column');
@@ -347,9 +339,6 @@
       }
     });
 
-  if (config.visible) {
-    _toggleColumn(false);
-    _autocloseColumn();
-  }
+  _updateColumnVisibility();
 
 });