diff --git a/src/skins/vector/views/molecules/BottomLeftMenu.js b/src/components/structures/BottomLeftMenu.js
similarity index 92%
rename from src/skins/vector/views/molecules/BottomLeftMenu.js
rename to src/components/structures/BottomLeftMenu.js
index 2020d29d..f942efd5 100644
--- a/src/skins/vector/views/molecules/BottomLeftMenu.js
+++ b/src/components/structures/BottomLeftMenu.js
@@ -40,13 +40,13 @@ module.exports = React.createClass({
             return <div className="mx_RoomTile_name">{name}</div>
         }
         else if (this.state.hover) {
-            var RoomTooltip = sdk.getComponent("molecules.RoomTooltip");
+            var RoomTooltip = sdk.getComponent("rooms.RoomTooltip");
             return <RoomTooltip name={name}/>;
         }
     },
 
     render: function() {
-        var BottomLeftMenuTile = sdk.getComponent('molecules.BottomLeftMenuTile');
+        var BottomLeftMenuTile = sdk.getComponent('rooms.BottomLeftMenuTile');
         return (
             <div className="mx_BottomLeftMenu">
                 <div className="mx_BottomLeftMenu_options">
diff --git a/src/skins/vector/views/pages/CompatibilityPage.js b/src/components/structures/CompatibilityPage.js
similarity index 100%
rename from src/skins/vector/views/pages/CompatibilityPage.js
rename to src/components/structures/CompatibilityPage.js
diff --git a/src/skins/vector/views/organisms/LeftPanel.js b/src/components/structures/LeftPanel.js
similarity index 96%
rename from src/skins/vector/views/organisms/LeftPanel.js
rename to src/components/structures/LeftPanel.js
index 88688ab1..aaab8084 100644
--- a/src/skins/vector/views/organisms/LeftPanel.js
+++ b/src/components/structures/LeftPanel.js
@@ -22,7 +22,7 @@ var HTML5Backend = require('react-dnd-html5-backend');
 var sdk = require('matrix-react-sdk')
 var dis = require('matrix-react-sdk/lib/dispatcher');
 
-var VectorConferenceHandler = require('../../../../VectorConferenceHandler');
+var VectorConferenceHandler = require('../../VectorConferenceHandler');
 var CallHandler = require("matrix-react-sdk/lib/CallHandler");
 
 var LeftPanel = React.createClass({
@@ -86,7 +86,7 @@ var LeftPanel = React.createClass({
 
     render: function() {
         var RoomList = sdk.getComponent('rooms.RoomList');
-        var BottomLeftMenu = sdk.getComponent('molecules.BottomLeftMenu');
+        var BottomLeftMenu = sdk.getComponent('structures.BottomLeftMenu');
         var IncomingCallBox = sdk.getComponent('voip.IncomingCallBox');
 
         var collapseButton;
diff --git a/src/skins/vector/views/organisms/RightPanel.js b/src/components/structures/RightPanel.js
similarity index 100%
rename from src/skins/vector/views/organisms/RightPanel.js
rename to src/components/structures/RightPanel.js
diff --git a/src/skins/vector/views/organisms/RoomDirectory.js b/src/components/structures/RoomDirectory.js
similarity index 100%
rename from src/skins/vector/views/organisms/RoomDirectory.js
rename to src/components/structures/RoomDirectory.js
diff --git a/src/skins/vector/views/organisms/RoomSubList.js b/src/components/structures/RoomSubList.js
similarity index 99%
rename from src/skins/vector/views/organisms/RoomSubList.js
rename to src/components/structures/RoomSubList.js
index 42016d43..8623787f 100644
--- a/src/skins/vector/views/organisms/RoomSubList.js
+++ b/src/components/structures/RoomSubList.js
@@ -235,7 +235,7 @@ var RoomSubList = React.createClass({
 
     render: function() {
         var connectDropTarget = this.props.connectDropTarget;
-        var RoomDropTarget = sdk.getComponent('molecules.RoomDropTarget');
+        var RoomDropTarget = sdk.getComponent('rooms.RoomDropTarget');
 
         var label = this.props.collapsed ? null : this.props.label;
 
diff --git a/src/skins/vector/views/organisms/ViewSource.js b/src/components/structures/ViewSource.js
similarity index 100%
rename from src/skins/vector/views/organisms/ViewSource.js
rename to src/components/structures/ViewSource.js
diff --git a/src/skins/vector/views/molecules/MatrixToolbar.js b/src/components/views/globals/MatrixToolbar.js
similarity index 100%
rename from src/skins/vector/views/molecules/MatrixToolbar.js
rename to src/components/views/globals/MatrixToolbar.js
diff --git a/src/skins/vector/views/molecules/DateSeparator.js b/src/components/views/messages/DateSeparator.js
similarity index 100%
rename from src/skins/vector/views/molecules/DateSeparator.js
rename to src/components/views/messages/DateSeparator.js
diff --git a/src/skins/vector/views/molecules/SenderProfile.js b/src/components/views/messages/SenderProfile.js
similarity index 100%
rename from src/skins/vector/views/molecules/SenderProfile.js
rename to src/components/views/messages/SenderProfile.js
diff --git a/src/skins/vector/views/molecules/BottomLeftMenuTile.js b/src/components/views/rooms/BottomLeftMenuTile.js
similarity index 95%
rename from src/skins/vector/views/molecules/BottomLeftMenuTile.js
rename to src/components/views/rooms/BottomLeftMenuTile.js
index 8c28058d..2535490f 100644
--- a/src/skins/vector/views/molecules/BottomLeftMenuTile.js
+++ b/src/components/views/rooms/BottomLeftMenuTile.js
@@ -41,7 +41,7 @@ module.exports = React.createClass({
             label = <div className="mx_RoomTile_name">{ this.props.label }</div>;
         }
         else if (this.state.hover) {
-            var RoomTooltip = sdk.getComponent("molecules.RoomTooltip");
+            var RoomTooltip = sdk.getComponent("rooms.RoomTooltip");
             label = <RoomTooltip bottom={ true } label={ this.props.label }/>;
         }
 
diff --git a/src/skins/vector/views/molecules/MessageContextMenu.js b/src/components/views/rooms/MessageContextMenu.js
similarity index 97%
rename from src/skins/vector/views/molecules/MessageContextMenu.js
rename to src/components/views/rooms/MessageContextMenu.js
index 2aeac39c..c6100db2 100644
--- a/src/skins/vector/views/molecules/MessageContextMenu.js
+++ b/src/components/views/rooms/MessageContextMenu.js
@@ -33,7 +33,7 @@ module.exports = React.createClass({
     },
 
     onViewSourceClick: function() {
-        var ViewSource = sdk.getComponent('organisms.ViewSource');
+        var ViewSource = sdk.getComponent('structures.ViewSource');
         Modal.createDialog(ViewSource, {
             mxEvent: this.props.mxEvent
         });
diff --git a/src/skins/vector/views/molecules/RoomDropTarget.js b/src/components/views/rooms/RoomDropTarget.js
similarity index 100%
rename from src/skins/vector/views/molecules/RoomDropTarget.js
rename to src/components/views/rooms/RoomDropTarget.js
diff --git a/src/skins/vector/views/molecules/RoomTooltip.js b/src/components/views/rooms/RoomTooltip.js
similarity index 100%
rename from src/skins/vector/views/molecules/RoomTooltip.js
rename to src/components/views/rooms/RoomTooltip.js
diff --git a/src/skins/vector/views/molecules/SearchBar.js b/src/components/views/rooms/SearchBar.js
similarity index 100%
rename from src/skins/vector/views/molecules/SearchBar.js
rename to src/components/views/rooms/SearchBar.js
diff --git a/src/skins/vector/skindex.js b/src/skins/vector/skindex.js
index 53e94ebc..d5b559c6 100644
--- a/src/skins/vector/skindex.js
+++ b/src/skins/vector/skindex.js
@@ -27,8 +27,22 @@ var skin = {};
 skin['elements.Spinner'] = require('../../components/views/elements/Spinner');
 skin['elements.ImageView'] = require('../../components/views/elements/ImageView');
 skin['messages.MessageTimestamp'] = require('../../components/views/messages/MessageTimestamp');
+skin['messages.DateSeparator'] = require('../../components/views/messages/DateSeparator');
+skin['messages.SenderProfile'] = require('../../components/views//messages/SenderProfile');
 skin['rooms.RoomTile'] = require('../../components/views/rooms/RoomDNDView');
-
+skin['rooms.BottomLeftMenuTile'] = require('../../components/views/rooms/BottomLeftMenuTile');
+skin['rooms.MessageContextMenu'] = require('../../components/views/rooms/MessageContextMenu');
+skin['rooms.RoomDropTarget'] = require('../../components/views/rooms/RoomDropTarget');
+skin['rooms.RoomTooltip'] = require('../../components/views/rooms/RoomTooltip');
+skin['rooms.SearchBar'] = require('../../components/views/rooms/SearchBar');
+skin['globals.MatrixToolbar'] = require('../../components/views/globals/MatrixToolbar');
+skin['structures.BottomLeftMenu'] = require('../../components/structures/BottomLeftMenu');
+skin['structures.LeftPanel'] = require('../../components/structures/LeftPanel');
+skin['structures.RightPanel'] = require('../../components/structures/RightPanel');
+skin['structures.RoomDirectory'] = require('../../components/structures/RoomDirectory');
+skin['structures.RoomSubList'] = require('../../components/structures/RoomSubList');
+skin['structures.ViewSource'] = require('../../components/structures/ViewSource');
+skin['structures.CompatibilityPage'] = require('../../components/structures/CompatibilityPage');
 
 // TODO: Fix this so matrix-react-sdk stuff is in react SDK skindex?
 skin['avatars.RoomAvatar'] = require('matrix-react-sdk/lib/components/views/avatars/RoomAvatar');
@@ -78,22 +92,4 @@ skin['structures.UserSettings'] = require('matrix-react-sdk/lib/components/struc
 skin['structures.RoomView'] = require('matrix-react-sdk/lib/components/structures/RoomView');
 skin['structures.MatrixChat'] = require('matrix-react-sdk/lib/components/structures/MatrixChat');
 
-// Old style stuff - this stuff only exists in VECTOR
-skin['molecules.BottomLeftMenu'] = require('./views/molecules/BottomLeftMenu');
-skin['molecules.BottomLeftMenuTile'] = require('./views/molecules/BottomLeftMenuTile');
-skin['molecules.DateSeparator'] = require('./views/molecules/DateSeparator');
-skin['molecules.MatrixToolbar'] = require('./views/molecules/MatrixToolbar');
-skin['molecules.MessageContextMenu'] = require('./views/molecules/MessageContextMenu');
-skin['molecules.RoomCreate'] = require('./views/molecules/RoomCreate');
-skin['molecules.RoomDropTarget'] = require('./views/molecules/RoomDropTarget');
-skin['molecules.RoomTooltip'] = require('./views/molecules/RoomTooltip');
-skin['molecules.SearchBar'] = require('./views/molecules/SearchBar');
-skin['molecules.SenderProfile'] = require('./views/molecules/SenderProfile');
-skin['organisms.LeftPanel'] = require('./views/organisms/LeftPanel');
-skin['organisms.RightPanel'] = require('./views/organisms/RightPanel');
-skin['organisms.RoomDirectory'] = require('./views/organisms/RoomDirectory');
-skin['organisms.RoomSubList'] = require('./views/organisms/RoomSubList');
-skin['organisms.ViewSource'] = require('./views/organisms/ViewSource');
-skin['pages.CompatibilityPage'] = require('./views/pages/CompatibilityPage');
-
 module.exports = skin;
diff --git a/src/skins/vector/views/molecules/RoomCreate.js b/src/skins/vector/views/molecules/RoomCreate.js
deleted file mode 100644
index d66e014d..00000000
--- a/src/skins/vector/views/molecules/RoomCreate.js
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
-Copyright 2015 OpenMarket Ltd
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-'use strict';
-
-var React = require('react');
-
-module.exports = React.createClass({
-    displayName: 'RoomCreate',
-
-    render: function() {
-        return (
-            <div className="mx_RoomCreate">
-                <div className="mx_RoomCreate_table">
-                    <div className="mx_RoomTile">
-                        <div className="mx_RoomTile_avatar">
-                            <img src="img/create.png" width="32" height="32"/>
-                        </div>
-                        <div className="mx_RoomTile_name">Create new room</div>
-                    </div>
-                </div>
-            </div>
-        );
-    }
-});
diff --git a/src/skins/vector/views/organisms/Notifier.js b/src/skins/vector/views/organisms/Notifier.js
deleted file mode 100644
index 6ac353f1..00000000
--- a/src/skins/vector/views/organisms/Notifier.js
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
-Copyright 2015 OpenMarket Ltd
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-'use strict';
-
-var NotifierController = require('matrix-react-sdk/lib/controllers/organisms/Notifier')
-
-var TextForEvent = require('matrix-react-sdk/lib/TextForEvent');
-var extend = require('matrix-react-sdk/lib/extend');
-var dis = require('matrix-react-sdk/lib/dispatcher');
-var Avatar = require('matrix-react-sdk/lib/Avatar');
-
-var NotifierView = {
-    notificationMessageForEvent: function(ev) {
-        return TextForEvent.textForEvent(ev);
-    },
-
-    displayNotification: function(ev, room) {
-        if (!global.Notification || global.Notification.permission != 'granted') {
-            return;
-        }
-        if (global.document.hasFocus()) {
-            return;
-        }
-
-        var msg = this.notificationMessageForEvent(ev);
-        if (!msg) return;
-
-        var title;
-        if (!ev.sender ||  room.name == ev.sender.name) {
-            title = room.name;
-            // notificationMessageForEvent includes sender,
-            // but we already have the sender here
-            if (ev.getContent().body) msg = ev.getContent().body;
-        } else if (ev.getType() == 'm.room.member') {
-            // context is all in the message here, we don't need
-            // to display sender info
-            title = room.name;
-        } else if (ev.sender) {
-            title = ev.sender.name + " (" + room.name + ")";
-            // notificationMessageForEvent includes sender,
-            // but we've just out sender in the title
-            if (ev.getContent().body) msg = ev.getContent().body;
-        }
-
-        var avatarUrl = ev.sender ? Avatar.avatarUrlForMember(
-            ev.sender, 40, 40, 'crop'
-        ) : null;
-
-        var notification = new global.Notification(
-            title,
-            {
-                "body": msg,
-                "icon": avatarUrl,
-                "tag": "vector"
-            }
-        );
-
-        notification.onclick = function() {
-            dis.dispatch({
-                action: 'view_room',
-                room_id: room.roomId
-            });
-            global.focus();
-        };
-        
-        /*var audioClip;
-        
-        if (audioNotification) {
-            audioClip = playAudio(audioNotification);
-        }*/
-
-        global.setTimeout(function() {
-            notification.close();
-        }, 5 * 1000);
-        
-    }
-};
-
-var NotifierClass = function() {};
-extend(NotifierClass.prototype, NotifierController);
-extend(NotifierClass.prototype, NotifierView);
-
-module.exports = new NotifierClass();
-
diff --git a/src/vector/index.js b/src/vector/index.js
index 082c5e11..00c22719 100644
--- a/src/vector/index.js
+++ b/src/vector/index.js
@@ -153,7 +153,7 @@ function loadApp() {
     else {
         console.error("Browser is missing required features.");
         // take to a different landing page to AWOOOOOGA at the user
-        var CompatibilityPage = require("../skins/vector/views/pages/CompatibilityPage");
+        var CompatibilityPage = sdk.getComponent("structures.CompatibilityPage");
         window.matrixChat = ReactDOM.render(
             <CompatibilityPage onAccept={function() {
                 validBrowser = true;