diff --git a/src/discordas.ts b/src/discordas.ts
index 1bfbf460324196d5fe548ec656b6cc4b84170be1..c1952eec8196af74607b7d5be134b6e1936ce014 100644
--- a/src/discordas.ts
+++ b/src/discordas.ts
@@ -46,6 +46,8 @@ function run (port: number, config: DiscordBridgeConfig) {
     token: registration.as_token,
     url: config.bridge.homeserverUrl,
   });
+  const discordbot = new DiscordBot(config);
+  const roomhandler = new MatrixRoomHandler(discordbot, config);
 
   const bridge = new Bridge({
     clientFactory,
@@ -54,8 +56,9 @@ function run (port: number, config: DiscordBridgeConfig) {
       onAliasQuery: (alias, aliasLocalpart) => {
         return roomhandler.OnAliasQuery(alias, aliasLocalpart);
       },
-      onEvent: (request, context) => { roomhandler.OnEvent(request, context); },
-      onAliasQueried: (alias, roomId) => { return roomhandler.OnAliasQueried(alias, roomId); },
+      onEvent: roomhandler.OnEvent.bind(roomhandler),
+      onAliasQueried: roomhandler.OnAliasQueried.bind(roomhandler),
+      thirdPartyLookup: roomhandler.ThirdPartyLookup,
       // onLog: function (line, isError) {
       //   if(isError) {
       //     if(line.indexOf("M_USER_IN_USE") === -1) {//QUIET!
@@ -68,9 +71,8 @@ function run (port: number, config: DiscordBridgeConfig) {
     homeserverUrl: config.bridge.homeserverUrl,
     registration,
   });
-
-  const discordbot = new DiscordBot(config, bridge);
-  const roomhandler = new MatrixRoomHandler(bridge, discordbot, config);
+  roomhandler.setBridge(bridge);
+  discordbot.setBridge(bridge);
 
   log.info("AppServ", "Started listening on port %s at %s", port, new Date().toUTCString() );
   bridge.run(port, config);
diff --git a/src/discordbot.ts b/src/discordbot.ts
index 28712e5812ffa0821a45ea009f0a99caa0405281..fd06d4ed898545dc0028c44978e9f0d34ba06a2f 100644
--- a/src/discordbot.ts
+++ b/src/discordbot.ts
@@ -1,7 +1,7 @@
 import { DiscordBridgeConfig } from "./config";
 import * as Discord from "discord.js";
 import * as log from "npmlog";
-import { MatrixUser, RemoteUser } from "matrix-appservice-bridge";
+import { MatrixUser, RemoteUser, Bridge } from "matrix-appservice-bridge";
 import { Util } from "./util";
 import * as Bluebird from "bluebird";
 import * as mime from "mime";
@@ -11,9 +11,12 @@ export class DiscordBot {
   private config: DiscordBridgeConfig;
   private bot: Discord.Client;
   private discordUser: Discord.ClientUser;
-  private bridge;
-  constructor(config: DiscordBridgeConfig, bridge) {
+  private bridge: Bridge;
+  constructor(config: DiscordBridgeConfig) {
     this.config = config;
+  }
+
+  public setBridge(bridge: Bridge) {
     this.bridge = bridge;
   }
 
diff --git a/src/matrixroomhandler.ts b/src/matrixroomhandler.ts
index faa37ca5c53627b3171113d0f4bfca5035429bf5..8be08bdddf3f9fbd51a65c96de7c7965eff7d7b2 100644
--- a/src/matrixroomhandler.ts
+++ b/src/matrixroomhandler.ts
@@ -1,5 +1,12 @@
 import { DiscordBot } from "./discordbot";
-import { Bridge, RemoteRoom } from "matrix-appservice-bridge";
+import {
+  Bridge,
+  RemoteRoom,
+  thirdPartyLookup,
+  thirdPartyProtocolResult,
+  thirdPartyUserResult,
+  thirdPartyLocationResult,
+ } from "matrix-appservice-bridge";
 import { DiscordBridgeConfig } from "./config";
 
 import * as Discord from "discord.js";
@@ -10,13 +17,27 @@ export class MatrixRoomHandler {
   private bridge: Bridge;
   private discord: DiscordBot;
   private aliasList: any;
-  constructor (bridge: Bridge, discord: DiscordBot, config: DiscordBridgeConfig) {
-    this.bridge = bridge;
+  constructor (discord: DiscordBot, config: DiscordBridgeConfig) {
     this.discord = discord;
     this.config = config;
     this.aliasList = {};
   }
 
+  public get ThirdPartyLookup(): thirdPartyLookup {
+    return {
+      protocols: ["discord"],
+      getProtocol: this.tpGetProtocol.bind(this),
+      getLocation: this.tpGetLocation.bind(this),
+      parseLocation: this.tpParseLocation.bind(this),
+      getUser: this.tpGetUser.bind(this),
+      parseUser: this.tpParseUser.bind(this),
+    };
+  }
+
+  public setBridge(bridge: Bridge) {
+    this.bridge = bridge;
+  }
+
   public OnAliasQueried (alias: string, roomId: string) {
     const aliasLocalpart = alias.substr(1, alias.length - `:${this.config.bridge.domain}`.length - 1);
     log.info("MatrixRoomHandler", `Room created ${aliasLocalpart} => ${roomId}`);
@@ -57,6 +78,26 @@ export class MatrixRoomHandler {
     });
   }
 
+  public tpGetProtocol(protocol: string): Promise<thirdPartyProtocolResult> {
+    return Promise.reject({err: "Unsupported", code: 501});
+  }
+
+  public tpGetLocation(protocol: string, fields: any): Promise<[thirdPartyLocationResult]> {
+    return Promise.reject({err: "Unsupported", code: 501});
+  }
+
+  public tpParseLocation(alias: string): Promise<[thirdPartyLocationResult]>  {
+    return Promise.reject({err: "Unsupported", code: 501});
+  }
+
+  public tpGetUser(protocol: string, fields: any): Promise<[thirdPartyUserResult]> {
+    return Promise.reject({err: "Unsupported", code: 501});
+  }
+
+  public tpParseUser(userid: string): Promise<[thirdPartyUserResult]> {
+    return Promise.reject({err: "Unsupported", code: 501});
+  }
+
   private createMatrixRoom (channel: Discord.TextChannel, alias: string) {
     const botID = this.bridge.getBot().getUserId();
     // const roomOwner = "@_discord_" + user.id_str + ":" + this._bridge.opts.domain;