 						var user:MUCUserExtension = aPresence.getAllExtensionsByNS(MUCUserExtension.NS)[0];
 						if (user.statusCode == 307) {
 							// User left as a result of a kick, so no need to dispatch a USER_DEPARTURE event as we already dispatched USER_KICKED
+							removeItemAt(i);
+							return;
+						}
+						else if (user.statusCode == 301) {
+							// User left as a result of a ban, so no need to dispatch a USER_DEPARTURE event as we already dispatched USER_BANNED
 							removeItemAt(i);
 							return;
 						}

	     * then this will also revoke the banned status.</p>
	     * 
	     * @param jids An array of JIDs to revoke affiliations from
	     * @param callback The function to call once revocation is complete
	     * @see #grant
	     * @see #ban
	     * @see #allow
	     */
	    public function revoke(jids:Array, callback:Function):void
	    {
	        grant(Room.NO_AFFILIATION, jids, callback);
	    }
	
	    /**
	     * Bans an array of JIDs from entering the room.  This is the same as:
	     * <code>Room.grant( OUTCAST_AFFILIATION, jid )</code>
	     *
	     * <p>If the process could not be completed, the room will dispatch the event
	     * <code>RoomEvent.ADMIN_ERROR</code>.</p>
	     * 
	     * @param jids An arry of JIDs to ban
	     * @param callback The function to call once banning is complete
	     * @see #grant
	     * @see #allow
	     */
	    public function ban(jids:Array, callback:Function):void
	    {
	        grant(Room.OUTCAST_AFFILIATION, jids, callback);
	    }
	
	    /**

	     * <code>RoomEvent.ADMIN_ERROR</code></p>
	     * 
	     * @param jids An array of JIDs to allow
	     * @see #grant
	     * @see #revoke
	     */
	    public function allow( jids:Array ):void
	    {
	        grant(Room.NO_AFFILIATION, jids);
	    }
	
	    /*
