diff --git a/src/RoomInvite.js b/src/RoomInvite.js
index 1979c6d111..31541148d9 100644
--- a/src/RoomInvite.js
+++ b/src/RoomInvite.js
@@ -85,9 +85,7 @@ function _onStartChatFinished(shouldInvite, addrs) {
         if (rooms.length > 0) {
             // A Direct Message room already exists for this user, so select a
             // room from a list that is similar to the one in MemberInfo panel
-            const ChatCreateOrReuseDialog = sdk.getComponent(
-                "views.dialogs.ChatCreateOrReuseDialog",
-            );
+            const ChatCreateOrReuseDialog = sdk.getComponent("views.dialogs.ChatCreateOrReuseDialog");
             const close = Modal.createTrackedDialog('Create or Reuse', '', ChatCreateOrReuseDialog, {
                 userId: addrTexts[0],
                 onNewDMClick: () => {
@@ -115,6 +113,15 @@ function _onStartChatFinished(shouldInvite, addrs) {
                 });
             });
         }
+    } else if (addrTexts.length === 1) {
+        // Start a new DM chat
+        createRoom({dmUserId: addrTexts[0]}).catch((err) => {
+            const ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
+            Modal.createTrackedDialog('Failed to invite user', '', ErrorDialog, {
+                title: _t("Failed to invite user"),
+                description: ((err && err.message) ? err.message : _t("Operation failed")),
+            });
+        });
     } else {
         // Start multi user chat
         let room;
diff --git a/src/createRoom.js b/src/createRoom.js
index ffe3a85c4e..a767d09288 100644
--- a/src/createRoom.js
+++ b/src/createRoom.js
@@ -22,6 +22,7 @@ import dis from "./dispatcher";
 import * as Rooms from "./Rooms";
 
 import Promise from 'bluebird';
+import {getAddressType} from "./UserAddress";
 
 /**
  * Create a new room, and switch to it.
@@ -52,7 +53,17 @@ function createRoom(opts) {
     createOpts.preset = createOpts.preset || defaultPreset;
     createOpts.visibility = createOpts.visibility || 'private';
     if (opts.dmUserId && createOpts.invite === undefined) {
-        createOpts.invite = [opts.dmUserId];
+        switch (getAddressType(opts.dmUserId)) {
+            case 'mx-user-id':
+                createOpts.invite = [opts.dmUserId];
+                break;
+            case 'email':
+                createOpts.invite_3pid = [{
+                    id_server: MatrixClientPeg.get().getIdentityServerUrl(true),
+                    medium: 'email',
+                    address: opts.dmUserId,
+                }];
+        }
     }
     if (opts.dmUserId && createOpts.is_direct === undefined) {
         createOpts.is_direct = true;