 
 			establishSession();
 		}
+		
+		/**
+		 * Error handler callback
+		 * @param	packet
+		 */
+		protected function handleBindError(packet:IQ):void
+		{
+			
+		}
 
 		/**
 		 * @private

		{
			dispatchEvent(new LoginEvent());
		}

		/**
		 * @private
		 */
		protected function addIQCallbackToPending( id:String, callbackName:String, callbackScope:Object, callbackFunc:Function ):void
		{
			pendingIQs[id] = {methodName:callbackName, methodScope:callbackScope, func:callbackFunc};
		}

		/**

			}

			// If it's an error, handle it
			var callbackInfo:*;
			if ( iq.type == IQ.TYPE_ERROR)
			{
				dispatchError( iq.errorCondition, iq.errorMessage, iq.errorType, iq.errorCode );

				// Start the callback for this IQ if one exists
				if ( pendingIQs[iq.id] !== undefined )
				{
					var callbackInfo:* = pendingIQs[iq.id];

					if (callbackInfo.errorFunc != null)
					{
						callbackInfo.errorFunc( iq );
					}
					pendingIQs[iq.id] = null;
					delete pendingIQs[iq.id];
				}
			}
			else
			{

				// Start the callback for this IQ if one exists
				if ( pendingIQs[iq.id] !== undefined )
				{
					callbackInfo = pendingIQs[iq.id];

					if (callbackInfo.methodScope && callbackInfo.methodName)
					{
