diff --git a/skins/base/views/organisms/ErrorDialog.js b/skins/base/views/organisms/ErrorDialog.js
index 847e796f..fd34a734 100644
--- a/skins/base/views/organisms/ErrorDialog.js
+++ b/skins/base/views/organisms/ErrorDialog.js
@@ -17,7 +17,7 @@ limitations under the License.
 'use strict';
 
 /*
- * Usage: 
+ * Usage:
  * Modal.createDialog(ErrorDialog, {
  *   title: "some text", (default: "Error")
  *   description: "some more text",
@@ -28,31 +28,11 @@ limitations under the License.
  */
 
 var React = require('react');
+var ErrorDialogController = require("../../../../src/controllers/organisms/ErrorDialog");
 
 module.exports = React.createClass({
     displayName: 'ErrorDialog',
-
-    // can't use getDefaultProps, see Modal.js
-    componentWillMount: function() {
-        if (!this.props.title) {
-            this.props.title = "Error";
-        }
-        if (!this.props.description) {
-            this.props.description = "An error has occurred.";
-        }
-        if (!this.props.button) {
-            this.props.button = "OK";
-        }
-        if (this.props.focus === undefined) {
-            this.props.focus = true;
-        }
-        if (!this.props.onClose) {
-            var self = this;
-            this.props.onClose = function() {
-                self.props.onFinished();
-            };
-        }
-    },
+    mixins: [ErrorDialogController],
 
     render: function() {
         return (
@@ -61,11 +41,10 @@ module.exports = React.createClass({
                     {this.props.title}
                 </div>
                 {this.props.description}<br />
-                <button onClick={this.props.onClose} autoFocus={this.props.focus}>
+                <button onClick={this.props.onFinished} autoFocus={this.props.focus}>
                     {this.props.button}
                 </button>
             </div>
         );
     }
 });
-
diff --git a/src/controllers/organisms/ErrorDialog.js b/src/controllers/organisms/ErrorDialog.js
new file mode 100644
index 00000000..73f66c87
--- /dev/null
+++ b/src/controllers/organisms/ErrorDialog.js
@@ -0,0 +1,39 @@
+/*
+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 = {
+    propTypes: {
+        title: React.PropTypes.string,
+        description: React.PropTypes.string,
+        button: React.PropTypes.string,
+        focus: React.PropTypes.bool,
+        onFinished: React.PropTypes.func.isRequired,
+    },
+
+    getDefaultProps: function() {
+        var self = this;
+        return {
+            title: "Error",
+            description: "An error has occurred.",
+            button: "OK",
+            focus: true,
+        };
+    },
+};