diff --git a/org.eclipse.ote.io/src/org/eclipse/ote/io/BasicDatagramChannelRunnable.java b/org.eclipse.ote.io/src/org/eclipse/ote/io/BasicDatagramChannelRunnable.java
index f35dd12..6462e5a 100644
--- a/org.eclipse.ote.io/src/org/eclipse/ote/io/BasicDatagramChannelRunnable.java
+++ b/org.eclipse.ote.io/src/org/eclipse/ote/io/BasicDatagramChannelRunnable.java
@@ -16,10 +16,14 @@
    
    @Override
    public void doSend(DatagramChannel channel, List<DatagramChannelData> dataToSend) throws IOException {
-      for(DatagramChannelData data: dataToSend){
+	  int size = dataToSend.size();
+      for(int i = 0; i < size; i++){
+         DatagramChannelData data = dataToSend.get(i);
          data.getByteBuffer().flip();
-         for(SocketAddress address: data.getAddresses()){
-            channel.send(data.getByteBuffer(), address);
+         List<SocketAddress> addresses = data.getAddresses();
+         int innerSize = addresses.size();
+         for(int j = 0; j < innerSize; j++){
+            channel.send(data.getByteBuffer(), addresses.get(j));
             data.getByteBuffer().rewind();
          }
       }
diff --git a/org.eclipse.ote.io/src/org/eclipse/ote/io/DatagramChannelDataPool.java b/org.eclipse.ote.io/src/org/eclipse/ote/io/DatagramChannelDataPool.java
index 4421a15..df1ad12 100644
--- a/org.eclipse.ote.io/src/org/eclipse/ote/io/DatagramChannelDataPool.java
+++ b/org.eclipse.ote.io/src/org/eclipse/ote/io/DatagramChannelDataPool.java
@@ -1,6 +1,6 @@
 package org.eclipse.ote.io;
 
-import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.ArrayBlockingQueue;
 import java.util.concurrent.TimeUnit;
 import java.util.logging.Level;
 
@@ -8,12 +8,12 @@
 
 public class DatagramChannelDataPool {
 
-   private final LinkedBlockingQueue<DatagramChannelData> data;
+   private final ArrayBlockingQueue<DatagramChannelData> data;
    private final DatagramChannelDataFactory factory;
    
    public DatagramChannelDataPool(DatagramChannelDataFactory factory, int max){
       this.factory = factory;
-      data = new LinkedBlockingQueue<DatagramChannelData>(max);
+      data = new ArrayBlockingQueue<DatagramChannelData>(max);
       for(int i = 0; i < max; i++){
          data.offer(factory.create(this));
       }
diff --git a/org.eclipse.ote.io/src/org/eclipse/ote/io/DatagramChannelRunnable.java b/org.eclipse.ote.io/src/org/eclipse/ote/io/DatagramChannelRunnable.java
index 9ac6ece..db53f7a 100644
--- a/org.eclipse.ote.io/src/org/eclipse/ote/io/DatagramChannelRunnable.java
+++ b/org.eclipse.ote.io/src/org/eclipse/ote/io/DatagramChannelRunnable.java
@@ -8,14 +8,14 @@
 import java.nio.channels.DatagramChannel;
 import java.util.ArrayList;
 import java.util.List;
-import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.ArrayBlockingQueue;
 import java.util.logging.Level;
 
 import org.eclipse.osee.framework.logging.OseeLog;
 
 public abstract class DatagramChannelRunnable implements Runnable {
 
-	private LinkedBlockingQueue<DatagramChannelData> data;
+	private ArrayBlockingQueue<DatagramChannelData> data;
 	private InetSocketAddress address;   
 
 	public DatagramChannelRunnable(InetSocketAddress address){
@@ -25,7 +25,7 @@
 	public DatagramChannelRunnable(){
    }
 
-	void setQueue(LinkedBlockingQueue<DatagramChannelData> data) {
+	void setQueue(ArrayBlockingQueue<DatagramChannelData> data) {
 		this.data = data;
 	}
 
@@ -48,7 +48,9 @@
 							continue;
 						}
 					}
-					for (DatagramChannelData data : dataToSend) {
+					int size = dataToSend.size();
+					for (int i = 0; i < size; i++) {
+						DatagramChannelData data = dataToSend.get(i);
 						if (data == DatagramChannelWorker.POISON_PILL) {
 							keepRunning = false;
 							break;
@@ -69,8 +71,10 @@
 				} catch (IOException ex){
 					OseeLog.log(getClass(), Level.SEVERE, "Error trying to send data", ex);
 				} finally {
-					for(DatagramChannelData datagramChannelData: dataToSend){
-						datagramChannelData.postProcess();
+					int size = dataToSend.size();
+					for (int i = 0; i < size; i++) {
+						DatagramChannelData data = dataToSend.get(i);
+						data.postProcess();
 					}
 				}
 			} 
diff --git a/org.eclipse.ote.io/src/org/eclipse/ote/io/DatagramChannelWorker.java b/org.eclipse.ote.io/src/org/eclipse/ote/io/DatagramChannelWorker.java
index dd98110..ed59bf9 100644
--- a/org.eclipse.ote.io/src/org/eclipse/ote/io/DatagramChannelWorker.java
+++ b/org.eclipse.ote.io/src/org/eclipse/ote/io/DatagramChannelWorker.java
@@ -1,19 +1,19 @@
 package org.eclipse.ote.io;
 
-import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.ArrayBlockingQueue;
 
 import org.eclipse.ote.io.internal.PoisonPill;
 
 public class DatagramChannelWorker {
    final static PoisonPill POISON_PILL = new PoisonPill();
-   private final LinkedBlockingQueue<DatagramChannelData> data;
+   private final ArrayBlockingQueue<DatagramChannelData> data;
    private final DatagramChannelRunnable runnable;
    private final String threadName;
    
    public DatagramChannelWorker(String threadName, DatagramChannelRunnable runnable){
       this.runnable = runnable;
       this.threadName = threadName;
-      this.data = new LinkedBlockingQueue<DatagramChannelData>();
+      this.data = new ArrayBlockingQueue<DatagramChannelData>(1000);
       
       runnable.setQueue(data);
    }
