diff --git a/bigbluebutton-client/resources/prod/bbb-deskshare-applet-0.64.jar b/bigbluebutton-client/resources/prod/bbb-deskshare-applet-0.64.jar
index 514d1748de987b6c0dcc9af43613ffebb922e761..1d2ccefa78376728c6b4b48872beb6e50a52a455 100755
Binary files a/bigbluebutton-client/resources/prod/bbb-deskshare-applet-0.64.jar and b/bigbluebutton-client/resources/prod/bbb-deskshare-applet-0.64.jar differ
diff --git a/deskshare/applet/src/main/java/org/bigbluebutton/deskshare/client/blocks/BlockManager.java b/deskshare/applet/src/main/java/org/bigbluebutton/deskshare/client/blocks/BlockManager.java
index 466266dede28066e4d328868b12ad9dfb096bc6a..b240b0cfb66ec031704125aec30bc72313cb2012 100755
--- a/deskshare/applet/src/main/java/org/bigbluebutton/deskshare/client/blocks/BlockManager.java
+++ b/deskshare/applet/src/main/java/org/bigbluebutton/deskshare/client/blocks/BlockManager.java
@@ -59,9 +59,12 @@ public class BlockManager {
     public void processCapturedScreen(BufferedImage capturedScreen) {    	
     	long start = System.currentTimeMillis();
 
-		Vector<Integer> changedBlocks = new Vector<Integer>();
+    	Vector<Integer> changedBlocks = new Vector<Integer>();
 /*		
+		int rowCount = 0;
+		
 		for (int row = 1; row <= numRows; row++) {
+			changedBlocks = new Vector<Integer>();
 			for (int col = 1; col <= numColumns; col++) {
 	        	Block block = blocksMap.get(new Integer(row * col));
 	        	if (block.hasChanged(capturedScreen)) {
@@ -72,17 +75,24 @@ public class BlockManager {
 				notifyChangedBlockListener(new BlockMessage(changedBlocks));
 		}  
 */
+		
 		int numberOfBlocks = numColumns * numRows;
 		for (int position = 1; position <= numberOfBlocks; position++) {
 			Block block = blocksMap.get(new Integer(position));
         	if (block.hasChanged(capturedScreen)) {
         		changedBlocks.add(new Integer(position));        		
         	}
+        	
+    		if ((position % numColumns == 0) && (changedBlocks.size() > 0)) {
+    			Integer[] bc = new Integer[changedBlocks.size()];
+    			System.arraycopy(changedBlocks.toArray(), 0, bc, 0, bc.length);
+    			changedBlocks.clear();
+    			notifyChangedBlockListener(new BlockMessage(bc));
+    		}
 		}
-		if (changedBlocks.size() > 0)
-			notifyChangedBlockListener(new BlockMessage(changedBlocks));
+					
 		long end = System.currentTimeMillis();
-//		System.out.println("ProcessCapturedScreen took " + (end-start) + " ms.");
+
     }
         
     private void notifyChangedBlockListener(BlockMessage position) {
diff --git a/deskshare/applet/src/main/java/org/bigbluebutton/deskshare/client/net/BlockMessage.java b/deskshare/applet/src/main/java/org/bigbluebutton/deskshare/client/net/BlockMessage.java
index 65651adfd9a4502ea0a15c55c269858ae0128ad7..93f8d197c01ff3eec1164fc58bb6ac1531131358 100755
--- a/deskshare/applet/src/main/java/org/bigbluebutton/deskshare/client/net/BlockMessage.java
+++ b/deskshare/applet/src/main/java/org/bigbluebutton/deskshare/client/net/BlockMessage.java
@@ -19,13 +19,11 @@
  */
 package org.bigbluebutton.deskshare.client.net;
 
-import java.util.Vector;
-
 public class BlockMessage implements Message {
 
-	private Vector<Integer> blocks;
+	private Integer[] blocks;
 	
-	public BlockMessage(Vector<Integer> blocks) {
+	public BlockMessage(Integer[] blocks) {
 		this.blocks = blocks;
 	}
 	
@@ -34,7 +32,7 @@ public class BlockMessage implements Message {
 		return MessageType.BLOCK;
 	}
 
-	public Vector<Integer> getBlocks() {
+	public Integer[] getBlocks() {
 		return blocks;
 	}
 }
diff --git a/deskshare/applet/src/main/java/org/bigbluebutton/deskshare/client/net/NetworkSocketStreamSender.java b/deskshare/applet/src/main/java/org/bigbluebutton/deskshare/client/net/NetworkSocketStreamSender.java
index 5a61c39417c19ba1caa8271d9ed8e060a6b8a0d4..fb36a6da8a13594a4e6a3c7dea2cd90d2c0f926b 100755
--- a/deskshare/applet/src/main/java/org/bigbluebutton/deskshare/client/net/NetworkSocketStreamSender.java
+++ b/deskshare/applet/src/main/java/org/bigbluebutton/deskshare/client/net/NetworkSocketStreamSender.java
@@ -136,7 +136,7 @@ public class NetworkSocketStreamSender implements Runnable {
 			dataToSend.reset();
 			BlockStreamProtocolEncoder.encodeRoomAndSequenceNumber(room, seqNumGenerator.getNext(), dataToSend);
 			
-			Object[] changedBlocks = ((BlockMessage)message).getBlocks().toArray();
+			Integer[] changedBlocks = ((BlockMessage)message).getBlocks();
 
 			BlockStreamProtocolEncoder.numBlocksChanged(changedBlocks.length, dataToSend);
 //			System.out.println("Number of blocks changed: " + changedBlocks.length);