Index: src/org/jivesoftware/xiff/conference/Room.as
===================================================================
--- src/org/jivesoftware/xiff/conference/Room.as	(revision 10963)
+++ src/org/jivesoftware/xiff/conference/Room.as	(working copy)
@@ -462,7 +462,7 @@
 			if( isActive ) {
 				var tempIQ:IQ = new IQ( roomJID.escaped, IQ.SET_TYPE, XMPPStanza.generateID("voice_") );
 				var ext:MUCAdminExtension = new MUCAdminExtension(tempIQ.getNode());
-				ext.addItem(null, voice ? MUC.PARTICIPANT_ROLE : MUC.VISITOR_ROLE);
+				ext.addItem(null, voice ? MUC.PARTICIPANT_ROLE : MUC.VISITOR_ROLE, occupantNick);
 				tempIQ.addExtension(ext);
 				myConnection.send( tempIQ );
 			}
Index: src/org/jivesoftware/xiff/core/AbstractJID.as
===================================================================
--- src/org/jivesoftware/xiff/core/AbstractJID.as	(revision 10963)
+++ src/org/jivesoftware/xiff/core/AbstractJID.as	(working copy)
@@ -44,7 +44,7 @@
 				n.indexOf("<") >= 0 ||
 				n.indexOf(">") >= 0))
 			{
-				n = n.replace(/\\/g, "\\5c");
+//				n = n.replace(/\\/g, "\\5c");
 				n = n.replace(/@/g, "\\40");
 	    		n = n.replace(/ /g, "\\20");
 	    		n = n.replace(/&/g, "\\26");
Index: src/org/jivesoftware/xiff/data/Message.as
===================================================================
--- src/org/jivesoftware/xiff/data/Message.as	(revision 10963)
+++ src/org/jivesoftware/xiff/data/Message.as	(working copy)
@@ -204,6 +204,9 @@
 		public function get subject():String
 		{
 			if (mySubjectNode == null) return null;
+			if(mySubjectNode.firstChild == null) {
+				return "";
+			}
 			return mySubjectNode.firstChild.nodeValue;
 		}
 		
Index: src/org/jivesoftware/xiff/im/Roster.as
===================================================================
--- src/org/jivesoftware/xiff/im/Roster.as	(revision 10963)
+++ src/org/jivesoftware/xiff/im/Roster.as	(working copy)
@@ -458,7 +458,7 @@
 								{
 									case RosterExtension.SUBSCRIBE_TYPE_NONE:
 										ev = new RosterEvent(RosterEvent.SUBSCRIPTION_REVOCATION);
-										ev.jid = item.jid;
+										ev.jid = rosterItemVO.jid;
 										dispatchEvent( ev );
 										break;
 									
@@ -470,7 +470,7 @@
 										}
 										//should be impossible for getItemIndex to return -1, since we just looked it up
 										ev.data = removeItemAt(getItemIndex(rosterItemVO));
-										ev.jid = item.jid;
+										ev.jid = rosterItemVO.jid;
 										dispatchEvent(ev);
 										break;
 														
@@ -486,12 +486,12 @@
 								if( item.subscription.toLowerCase() != RosterExtension.SUBSCRIBE_TYPE_REMOVE &&  item.subscription.toLowerCase() != RosterExtension.SUBSCRIBE_TYPE_NONE) 
 								{
 									// Add this item to the roster if it's not there and if the subscription type is not equal to 'remove' or 'none'
-									addRosterItem( item.jid, item.name, RosterExtension.SHOW_UNAVAILABLE, "Offline", groups, item.subscription.toLowerCase(), item.askType != null ? item.askType.toLowerCase() : RosterExtension.ASK_TYPE_NONE );
+									addRosterItem( rosterItemVO.jid, item.name, RosterExtension.SHOW_UNAVAILABLE, "Offline", groups, item.subscription.toLowerCase(), item.askType != null ? item.askType.toLowerCase() : RosterExtension.ASK_TYPE_NONE );
 								}
 								else if( (item.subscription.toLowerCase() == RosterExtension.SUBSCRIBE_TYPE_NONE || item.subscription.toLowerCase() == RosterExtension.SUBSCRIBE_TYPE_FROM) && item.askType == RosterExtension.ASK_TYPE_SUBSCRIBE ) 
 								{
 									// A contact was added to the roster, and its authorization is still pending.
-									addRosterItem( item.jid, item.name, RosterExtension.SHOW_PENDING, "Pending", groups, item.subscription.toLowerCase(), item.askType != null ? item.askType.toLowerCase() : RosterExtension.ASK_TYPE_NONE );
+									addRosterItem( rosterItemVO.jid, item.name, RosterExtension.SHOW_PENDING, "Pending", groups, item.subscription.toLowerCase(), item.askType != null ? item.askType.toLowerCase() : RosterExtension.ASK_TYPE_NONE );
 								}
 							}
 						}
