diff --git a/src/CallHandler.js b/src/CallHandler.js
index 0915a65af2..799edf7f1a 100644
--- a/src/CallHandler.js
+++ b/src/CallHandler.js
@@ -59,6 +59,7 @@ var ComponentBroker = require('./ComponentBroker');
 var ErrorDialog = ComponentBroker.get("organisms/ErrorDialog");
 var Matrix = require("matrix-js-sdk");
 var dis = require("./dispatcher");
+var q = require("q");
 
 var calls = {
     //room_id: MatrixCall
@@ -150,6 +151,29 @@ function _setCallState(call, roomId, status) {
     });
 }
 
+function findOrMakeVertoRoom() {
+    var VERTO_USERID = '@verto_1234:matrix.org';
+    var defer = q.defer();
+
+    var allRooms = MatrixClientPeg.get().getRooms();
+    for (var i = 0; i < Object.keys(allRooms).length; ++i) {
+        var r = allRooms[i];
+        var membs = r.getJoinedMembers();
+        if (membs.length == 2 && membs[0].userId == VERTO_USERID || membs[0].userId == VERTO_USERID) {
+            defer.resolve(r);
+            return defer.promise;
+        }
+    }
+
+    MatrixClientPeg.get().createRoom({
+        invite: [ VERTO_USERID ]
+    }).done(function(result) {
+        defer.resolve(MatrixClientPeg.get().getRoom(result.room_id));
+    });
+
+    return defer.promise;
+}
+
 dis.register(function(payload) {
     switch (payload.action) {
         case 'place_call':
@@ -162,7 +186,29 @@ dis.register(function(payload) {
                 return;
             }
             var members = room.getJoinedMembers();
-            if (members.length !== 2) {
+            if (members.length > 2) {
+                var vertoRoom = findOrMakeVertoRoom().done(function(r) {
+                    console.log("Place %s conference call in %s", payload.type, payload.room_id);
+                    var call = Matrix.createNewMatrixCall(
+                        MatrixClientPeg.get(), r.roomId
+                    );
+                    _setCallListeners(call);
+                    _setCallState(call, call.roomId, "ringback");
+                    if (payload.type === 'voice') {
+                        call.placeVoiceCall();
+                    }
+                    else if (payload.type === 'video') {
+                        call.placeVideoCall(
+                            payload.remote_element,
+                            payload.local_element
+                        );
+                    }
+                    else {
+                        console.error("Unknown call type: %s", payload.type);
+                    }
+                });
+                return;
+            } else if (members.length !== 2) {
                 var text = members.length === 1 ? "yourself." : "more than 2 people.";
                 Modal.createDialog(ErrorDialog, {
                     description: "You cannot place a call with " + text
@@ -227,4 +273,4 @@ module.exports = {
     getCall: function(roomId) {
         return calls[roomId] || null;
     }
-};
\ No newline at end of file
+};