Index: src/contact.py
===================================================================
--- src/contact.py	(revision 185)
+++ src/contact.py	(working copy)
@@ -165,7 +165,7 @@
 			avatarHash = self.avatar.getImageHash()
 		caps = Element((None, "c"))
 		caps.attributes["xmlns"] = "http://jabber.org/protocol/caps"
-		caps.attributes["node"] = legacy.url + "/protocol/caps"
+		caps.attributes["node"] = legacy.url + "protocol/caps"
 		caps.attributes["ver"] = legacy.version
 		if not tojid:
 			tojid=self.contactList.session.jabberID
Index: src/disco.py
===================================================================
--- src/disco.py	(revision 185)
+++ src/disco.py	(working copy)
@@ -71,12 +71,12 @@
 			self.features[jid] = []
 		self.features[jid].append((var, handler))
 
-	def addNode(self, node, handler, name, jid, rootnode):
+	def addNode(self, nodejid, node, handler, name, jid, rootnode):
 		""" Adds a node to this JID's discovery profile. If jid == "USER" then AIM users will get this node. """
 		debug.log("ServerDiscovery: Adding node item \"%s\" \"%s\" \"%s\" \"%s\" \"%s\"" % (node, handler, name, jid, rootnode))
 		if not self.nodes.has_key(jid):
 			self.nodes[jid] = {}
-		self.nodes[jid][node] = (handler, name, rootnode)
+		self.nodes[jid][nodejid+node] = (handler, name, rootnode, nodejid, node)
 
 	def onIq(self, el):
 		""" Decides what to do with an IQ """
@@ -108,8 +108,8 @@
 			node = query.getAttribute("node")
 
 			if xmlns.startswith(globals.DISCO) and node:
-				if self.nodes.has_key(to) and self.nodes[to].has_key(node) and self.nodes[to][node][0] != None:
-					self.nodes[to][node][0](el)
+				if self.nodes.has_key(to) and self.nodes[to].has_key(to+node) and self.nodes[to][to+node][0] != None:
+					self.nodes[to][to+node][0](el)
 					return
 				else:
 					# If the node we're browsing wasn't found, fall through and display the root disco
@@ -183,13 +183,13 @@
 		searchjid = jid
 		if jid.find('@') > 0: searchjid = "USER"
 
-		for node in self.nodes.get(searchjid, []):
-			handler, name, rootnode = self.nodes[jid][node]
+		for nodekey in self.nodes.get(searchjid, []):
+			handler, name, rootnode, nodejid, node = self.nodes[searchjid][nodekey]
 			if rootnode:
-				debug.log("Found node %s" % (node))
+				debug.log("Found node %s %s" % (nodejid, node))
 				name = lang.get(name, ulang)
 				item = query.addElement("item")
-				item.attributes["jid"] = jid
+				item.attributes["jid"] = nodejid
 				item.attributes["node"] = node
 				item.attributes["name"] = name
 		
Index: src/lang.py
===================================================================
--- src/lang.py	(revision 185)
+++ src/lang.py	(working copy)
@@ -16,7 +16,10 @@
 		try:
 			return langs.__dict__[config.lang].__dict__[stringid]
 		except KeyError:
-			return langs.__dict__['en'].__dict__[stringid]
+			try:
+				return langs.__dict__['en'].__dict__[stringid]
+			except KeyError:
+				return stringid
 
 
 # If you change or add any strings in this file please contact the translators listed below
Index: src/main.py
===================================================================
--- src/main.py	(revision 185)
+++ src/main.py	(working copy)
@@ -135,6 +135,7 @@
 			self.discovery.addIdentity("conference", "text", legacy.name + " Chatrooms", config.confjid)
 			self.discovery.addFeature("jabber:x:conference", None, config.confjid)
 			self.discovery.addFeature("jabber:iq:conference", None, config.confjid)
+			self.discovery.addNode(config.confjid, "", self.discovery.onIq, legacy.name + " Chatrooms", config.jid, True)
 
 		self.xdb = xdb.XDB(config.jid)
 		self.avatarCache = avatar.AvatarCache()
@@ -265,8 +266,8 @@
 			route = Element((None,"route"))
 			#route.attributes["xmlns"] = "http://jabberd.jabberstudio.org/ns/component/1.0"
 			route.attributes["from"] = config.jid
-			#route.attributes["to"] = to
-			route.attributes["to"] = "jabber2.vorpalcloud.org"
+			route.attributes["to"] = jid.JID(to).host
+			obj.attributes["xmlns"] = "jabber:client"
 			route.addChild(obj)
 			debug.log("I am sending: %s" % route.toXml())
 			component.Service.send(self,route.toXml())
@@ -329,6 +330,8 @@
 	def onPresence(self, el):
 		fro = el.getAttribute("from")
 		to = el.getAttribute("to")
+		# Ignore any presence broadcasts about other JD2 components
+		if to == None: return
 		try:
 			froj = jid.JID(fro)
 			toj = jid.JID(to)
Index: src/misciq.py
===================================================================
--- src/misciq.py	(revision 185)
+++ src/misciq.py	(working copy)
@@ -138,7 +138,7 @@
 	def __init__(self, pytrans):
 		self.pytrans = pytrans
 		self.pytrans.discovery.addFeature(globals.COMMANDS, self.incomingIq, config.jid)
-		self.pytrans.discovery.addNode(globals.COMMANDS, self.sendCommandList, "command_CommandList", config.jid, True)
+		self.pytrans.discovery.addNode(config.jid, globals.COMMANDS, self.sendCommandList, "command_CommandList", config.jid, True)
 
 		self.commands = {} # Dict of handlers indexed by node
 		self.commandNames = {} # Dict of names indexed by node
@@ -146,7 +146,7 @@
 	def addCommand(self, command, handler, name):
 		self.commands[command] = handler
 		self.commandNames[command] = name
-		self.pytrans.discovery.addNode(command, self.incomingIq, name, config.jid, False)
+		self.pytrans.discovery.addNode(config.jid, command, self.incomingIq, name, config.jid, False)
 
 	def incomingIq(self, el):
 		itype = el.getAttribute("type")
@@ -236,7 +236,7 @@
 #	def __init__(self, pytrans):
 #		self.pytrans = pytrans
 #		self.pytrans.discovery.addFeature("aim-exchanges", self.incomingIq, config.confjid)
-#		self.pytrans.discovery.addNode("aim-exchanges", self.sendExchangeList, "chatroom_Exchanges", config.confjid, True)
+#		self.pytrans.discovery.addNode(config.confjid, "aim-exchanges", self.sendExchangeList, "chatroom_Exchanges", config.confjid, True)
 #
 #	def incomingIq(self, el):
 #		itype = el.getAttribute("type")

