diff --git a/src/components/structures/MainSplit.js b/src/components/structures/MainSplit.js
index a55feb65e4..ea3a97e161 100644
--- a/src/components/structures/MainSplit.js
+++ b/src/components/structures/MainSplit.js
@@ -23,6 +23,11 @@ export default class MainSplit extends React.Component {
     constructor(props) {
         super(props);
         this._setResizeContainerRef = this._setResizeContainerRef.bind(this);
+        this._onResized = this._onResized.bind(this);
+    }
+
+    _onResized(size) {
+        window.localStorage.setItem("mx_rhs_size", size);
     }
 
     _createResizer() {
@@ -33,7 +38,9 @@ export default class MainSplit extends React.Component {
         };
         const resizer = new Resizer(
             this.resizeContainer,
-            FixedDistributor);
+            FixedDistributor,
+            {onResized: this._onResized},
+        );
         resizer.setClassNames(classNames);
         const rhsSize = window.localStorage.getItem("mx_rhs_size");
         if (rhsSize !== null) {
diff --git a/src/components/views/rooms/RoomList.js b/src/components/views/rooms/RoomList.js
index d4599e5d8a..10fce0ccf0 100644
--- a/src/components/views/rooms/RoomList.js
+++ b/src/components/views/rooms/RoomList.js
@@ -72,8 +72,9 @@ module.exports = React.createClass({
     getInitialState: function() {
 
         const sizesJson = window.localStorage.getItem("mx_roomlist_sizes");
+        const collapsedJson = window.localStorage.getItem("mx_roomlist_collapsed");
         this.subListSizes = sizesJson ? JSON.parse(sizesJson) : {};
-
+        this.collapsedState = collapsedJson ? JSON.parse(collapsedJson) : {};
         return {
             isLoadingLeftRooms: false,
             totalRoomCount: null,
@@ -474,6 +475,11 @@ module.exports = React.createClass({
             (filter[0] === '#' && room.getAliases().some((alias) => alias.toLowerCase().startsWith(lcFilter))));
     },
 
+    _persistCollapsedState: function(key, collapsed) {
+        this.collapsedState[key] = collapsed;
+        window.localStorage.setItem("mx_roomlist_collapsed", JSON.stringify(this.collapsedState));
+    },
+
     _mapSubListProps: function(subListsProps) {
         const defaultProps = {
             collapsed: this.props.collapsed,
@@ -493,10 +499,23 @@ module.exports = React.createClass({
         return subListsProps.reduce((components, props, i) => {
             props = Object.assign({}, defaultProps, props);
             const isLast = i === subListsProps.length - 1;
-            const {key, label, ... otherProps} = props;
+            const {key, label, onHeaderClick, ... otherProps} = props;
             const chosenKey = key || label;
+            const onSubListHeaderClick = (collapsed) => {
+                this._persistCollapsedState(chosenKey, collapsed);
+                if (onHeaderClick) {
+                    onHeaderClick(collapsed);
+                }
+            };
+            const startAsHidden = props.startAsHidden || this.collapsedState[chosenKey];
+
+            let subList = (<RoomSubList
+                startAsHidden={startAsHidden}
+                onHeaderClick={onSubListHeaderClick}
+                key={chosenKey}
+                label={label}
+                {...otherProps} />);
 
-            let subList = <RoomSubList key={chosenKey} label={label} {...otherProps} />;
             if (!isLast) {
                 return components.concat(
                     subList,