Index: source/org/jivesoftware/smackx/debugger/EnhancedDebugger.java
===================================================================
--- source/org/jivesoftware/smackx/debugger/EnhancedDebugger.java	(revision 12585)
+++ source/org/jivesoftware/smackx/debugger/EnhancedDebugger.java	(working copy)
@@ -170,7 +170,7 @@
         // the GUI. This is what we call "interpreted" packet data, since it's the packet
         // data as Smack sees it and not as it's coming in as raw XML.
         packetReaderListener = new PacketListener() {
-            SimpleDateFormat dateFormatter = new SimpleDateFormat("hh:mm:ss aaa");
+            SimpleDateFormat dateFormatter = new SimpleDateFormat("hh:mm:ss:SS aaa");
 
             public void processPacket(final Packet packet) {
                 SwingUtilities.invokeLater(new Runnable() {
@@ -185,7 +185,7 @@
         // Create a thread that will listen for all outgoing packets and write them to
         // the GUI.
         packetWriterListener = new PacketListener() {
-            SimpleDateFormat dateFormatter = new SimpleDateFormat("hh:mm:ss aaa");
+            SimpleDateFormat dateFormatter = new SimpleDateFormat("hh:mm:ss:SS aaa");
 
             public void processPacket(final Packet packet) {
                 SwingUtilities.invokeLater(new Runnable() {
@@ -276,7 +276,7 @@
         table.getTableHeader().getColumnModel().getColumn(0).setMinWidth(0);
         // Set the column "timestamp" size
         table.getColumnModel().getColumn(1).setMaxWidth(300);
-        table.getColumnModel().getColumn(1).setPreferredWidth(70);
+        table.getColumnModel().getColumn(1).setPreferredWidth(100);
         // Set the column "direction" icon size
         table.getColumnModel().getColumn(2).setMaxWidth(50);
         table.getColumnModel().getColumn(2).setPreferredWidth(30);
@@ -625,7 +625,7 @@
         connPanel.add(
                 label,
                 new GridBagConstraints(0, 3, 1, 1, 0.0, 0.0, 21, 0, new Insets(0, 0, 0, 0), 0, 0));
-        field = new JFormattedTextField(new SimpleDateFormat("yyyy.MM.dd hh:mm:ss aaa"));
+        field = new JFormattedTextField(new SimpleDateFormat("yyyy.MM.dd hh:mm:ss:SS aaa"));
         field.setMinimumSize(new java.awt.Dimension(150, 20));
         field.setMaximumSize(new java.awt.Dimension(150, 20));
         field.setValue(creationTime);
Index: source/org/jivesoftware/smackx/bytestreams/ibb/InitiationListener.java
===================================================================
--- source/org/jivesoftware/smackx/bytestreams/ibb/InitiationListener.java	(revision 12585)
+++ source/org/jivesoftware/smackx/bytestreams/ibb/InitiationListener.java	(working copy)
@@ -19,11 +19,14 @@
 import org.jivesoftware.smack.PacketListener;
 import org.jivesoftware.smack.filter.AndFilter;
 import org.jivesoftware.smack.filter.IQTypeFilter;
+import org.jivesoftware.smack.filter.MessageTypeFilter;
 import org.jivesoftware.smack.filter.PacketFilter;
 import org.jivesoftware.smack.filter.PacketTypeFilter;
 import org.jivesoftware.smack.packet.IQ;
+import org.jivesoftware.smack.packet.Message;
 import org.jivesoftware.smack.packet.Packet;
 import org.jivesoftware.smackx.bytestreams.BytestreamListener;
+import org.jivesoftware.smackx.bytestreams.ibb.InBandBytestreamManager.StanzaType;
 import org.jivesoftware.smackx.bytestreams.ibb.packet.Open;
 
 /**
@@ -44,9 +47,13 @@
     private final InBandBytestreamManager manager;
 
     /* packet filter for all In-Band Bytestream requests */
-    private final PacketFilter initFilter = new AndFilter(new PacketTypeFilter(Open.class),
+    private final PacketFilter initFilterIQ = new AndFilter(new PacketTypeFilter(Open.class),
                     new IQTypeFilter(IQ.Type.SET));
-
+    /* packet filter for all In-Band Bytestream requests */
+    private final PacketFilter initFilterMSG = new AndFilter(new PacketTypeFilter(Open.class),
+                    new MessageTypeFilter(Message.Type.normal));
+    private boolean isIQ = true;
+    
     /* executor service to process incoming requests concurrently */
     private final ExecutorService initiationListenerExecutor;
 
@@ -71,7 +78,8 @@
 
     private void processRequest(Packet packet) {
         Open ibbRequest = (Open) packet;
-
+        if (ibbRequest.getStanza() == StanzaType.MESSAGE)this.isIQ = false;
+        
         // validate that block size is within allowed range
         if (ibbRequest.getBlockSize() > this.manager.getMaximumBlockSize()) {
             this.manager.replyResourceConstraintPacket(ibbRequest);
@@ -114,7 +122,8 @@
      * @return the packet filter for In-Band Bytestream open requests
      */
     protected PacketFilter getFilter() {
-        return this.initFilter;
+    	if (isIQ)return this.initFilterIQ;
+    		return this.initFilterMSG;
     }
 
     /**
Index: source/org/jivesoftware/smackx/bytestreams/ibb/InBandBytestreamSession.java
===================================================================
--- source/org/jivesoftware/smackx/bytestreams/ibb/InBandBytestreamSession.java	(revision 12585)
+++ source/org/jivesoftware/smackx/bytestreams/ibb/InBandBytestreamSession.java	(working copy)
@@ -594,7 +594,8 @@
          * Constructor.
          */
         public IBBOutputStream() {
-            this.buffer = new byte[byteStreamRequest.getBlockSize()];
+        	Integer maximumBytesPerPacket = (byteStreamRequest.getBlockSize() / 4) *3;
+        	this.buffer = new byte[maximumBytesPerPacket];
         }
 
         /**
@@ -639,7 +640,13 @@
 
                 // "byte" off the first chunk to write out
                 writeOut(b, off, buffer.length);
-
+                // the receiver cant work this fast, so we have to wait between two messages
+                try {
+					Thread.sleep(40);
+				} catch (InterruptedException e) {
+					// TODO Auto-generated catch block
+					e.printStackTrace();
+				}
                 // recursively call this method with the lesser amount
                 write(b, off + buffer.length, len - buffer.length);
             }
Index: source/org/jivesoftware/smackx/bytestreams/ibb/packet/Open.java
===================================================================
--- source/org/jivesoftware/smackx/bytestreams/ibb/packet/Open.java	(revision 12585)
+++ source/org/jivesoftware/smackx/bytestreams/ibb/packet/Open.java	(working copy)
@@ -73,7 +73,7 @@
      * @param blockSize block size in which the data will be fragmented
      */
     public Open(String sessionID, int blockSize) {
-        this(sessionID, blockSize, StanzaType.IQ);
+        this(sessionID, blockSize, StanzaType.MESSAGE);
     }
 
     /**
Index: source/org/jivesoftware/smackx/bytestreams/ibb/provider/OpenIQProvider.java
===================================================================
--- source/org/jivesoftware/smackx/bytestreams/ibb/provider/OpenIQProvider.java	(revision 12585)
+++ source/org/jivesoftware/smackx/bytestreams/ibb/provider/OpenIQProvider.java	(working copy)
@@ -33,7 +33,8 @@
         String stanzaValue = parser.getAttributeValue("", "stanza");
         StanzaType stanza = null;
         if (stanzaValue == null) {
-            stanza = StanzaType.IQ;
+        	// old spark 2.5.8, who work in message mode, wont send the stanza value in open packet
+            stanza = StanzaType.MESSAGE;
         }
         else {
             stanza = StanzaType.valueOf(stanzaValue.toUpperCase());
Index: source/org/jivesoftware/smackx/bytestreams/ibb/InBandBytestreamManager.java
===================================================================
--- source/org/jivesoftware/smackx/bytestreams/ibb/InBandBytestreamManager.java	(revision 12585)
+++ source/org/jivesoftware/smackx/bytestreams/ibb/InBandBytestreamManager.java	(working copy)
@@ -165,7 +165,7 @@
     private int maximumBlockSize = MAXIMUM_BLOCK_SIZE;
 
     /* the stanza used to send data packets */
-    private StanzaType stanza = StanzaType.IQ;
+    private StanzaType stanza = StanzaType.MESSAGE;
 
     /*
      * list containing session IDs of In-Band Bytestream open packets that should be ignored by the
Index: source/org/jivesoftware/smackx/filetransfer/FileTransferManager.java
===================================================================
--- source/org/jivesoftware/smackx/filetransfer/FileTransferManager.java	(revision 12585)
+++ source/org/jivesoftware/smackx/filetransfer/FileTransferManager.java	(working copy)
@@ -172,7 +172,7 @@
 		IQ rejection = FileTransferNegotiator.createIQ(
 				initiation.getPacketID(), initiation.getFrom(), initiation
 						.getTo(), IQ.Type.ERROR);
-		rejection.setError(new XMPPError(XMPPError.Condition.forbidden));
+		rejection.setError(new XMPPError(XMPPError.Condition.no_acceptable));
 		connection.sendPacket(rejection);
 	}
 }
Index: source/org/jivesoftware/smackx/filetransfer/OutgoingFileTransfer.java
===================================================================
--- source/org/jivesoftware/smackx/filetransfer/OutgoingFileTransfer.java	(revision 12585)
+++ source/org/jivesoftware/smackx/filetransfer/OutgoingFileTransfer.java	(working copy)
@@ -120,6 +120,7 @@
 							+ " been attempted on this file transfer");
 		}
 		try {
+			setFileInfo(fileName, fileSize);
 			this.outputStream = negotiateStream(fileName, fileSize, description);
 		} catch (XMPPException e) {
 			handleXMPPException(e);
@@ -159,6 +160,7 @@
 					"The negotation process has already"
 							+ " been attempted for this file transfer");
 		}
+        setFileInfo(fileName, fileSize);
         this.callback = progress;
         transferThread = new Thread(new Runnable() {
 			public void run() {
@@ -274,8 +276,10 @@
 	public synchronized void sendStream(final InputStream in, final String fileName, final long fileSize, final String description){
 		checkTransferThread();
 
+		setFileInfo(fileName, fileSize);
 		transferThread = new Thread(new Runnable() {
 			public void run() {
+				setFileInfo(fileName, fileSize);
                 //Create packet filter
                 try {
 					outputStream = negotiateStream(fileName, fileSize, description);
