diff --git a/setup.py b/setup.py
index 68b2655d6bb5fe54f511c9555d7d65140066866f..ed21799e7298c520a34360681a516e66c7c58ea8 100755
--- a/setup.py
+++ b/setup.py
@@ -54,6 +54,7 @@ setup(
         "mock"
     ],
     include_package_data=True,
+    zip_safe=False,
     long_description=read("README.rst"),
     entry_points="""
     [console_scripts]
diff --git a/synapse/handlers/room.py b/synapse/handlers/room.py
index 825957f7213d8b3c64cb88ffc7f2307f5c217879..cfe1061ed30bce0c58884175b151d10158c0d123 100644
--- a/synapse/handlers/room.py
+++ b/synapse/handlers/room.py
@@ -111,15 +111,6 @@ class RoomCreationHandler(BaseHandler):
             user, room_id, is_public=is_public
         )
 
-        if room_alias:
-            directory_handler = self.hs.get_handlers().directory_handler
-            yield directory_handler.create_association(
-                user_id=user_id,
-                room_id=room_id,
-                room_alias=room_alias,
-                servers=[self.hs.hostname],
-            )
-
         @defer.inlineCallbacks
         def handle_event(event):
             snapshot = yield self.store.snapshot_room(event)
@@ -184,9 +175,18 @@ class RoomCreationHandler(BaseHandler):
             join_event,
             do_auth=False
         )
+
         result = {"room_id": room_id}
+
         if room_alias:
             result["room_alias"] = room_alias.to_string()
+            directory_handler = self.hs.get_handlers().directory_handler
+            yield directory_handler.create_association(
+                user_id=user_id,
+                room_id=room_id,
+                room_alias=room_alias,
+                servers=[self.hs.hostname],
+            )
 
         defer.returnValue(result)