diff --git a/rosjava/src/main/java/org/ros/internal/transport/queue/IncomingMessageQueue.java b/rosjava/src/main/java/org/ros/internal/transport/queue/IncomingMessageQueue.java
index e53ae673ebf95187b0ad2c39360c3e6a26fea80d..95bdb3039b17df377882ecb3f0c5f920bcee8f8f 100644
--- a/rosjava/src/main/java/org/ros/internal/transport/queue/IncomingMessageQueue.java
+++ b/rosjava/src/main/java/org/ros/internal/transport/queue/IncomingMessageQueue.java
@@ -37,14 +37,14 @@ public class IncomingMessageQueue<T> {
    * {@link IncomingMessageQueue#addListener(MessageListener, int)} which are
    * consumed by user provided {@link MessageListener}s.
    */
-  private static final int QUEUE_CAPACITY = 128;
+  private static final int QUEUE_CAPACITY = 16;
 
-  private final CircularBlockingQueue<LazyMessage<T>> lazyMessages;
   private final MessageReceiver<T> messageReceiver;
   private final MessageDispatcher<T> messageDispatcher;
 
   public IncomingMessageQueue(MessageDeserializer<T> deserializer, ExecutorService executorService) {
-    lazyMessages = new CircularBlockingQueue<LazyMessage<T>>(QUEUE_CAPACITY);
+    CircularBlockingQueue<LazyMessage<T>> lazyMessages =
+        new CircularBlockingQueue<LazyMessage<T>>(QUEUE_CAPACITY);
     messageReceiver = new MessageReceiver<T>(lazyMessages, deserializer);
     messageDispatcher = new MessageDispatcher<T>(lazyMessages, executorService);
     executorService.execute(messageDispatcher);
diff --git a/rosjava/src/main/java/org/ros/internal/transport/queue/MessageReceiver.java b/rosjava/src/main/java/org/ros/internal/transport/queue/MessageReceiver.java
index 916469ab17c09818a709de2947aff0f0f4a6bf27..2cd4f762e4f309dae189c38446919edc69b308df 100644
--- a/rosjava/src/main/java/org/ros/internal/transport/queue/MessageReceiver.java
+++ b/rosjava/src/main/java/org/ros/internal/transport/queue/MessageReceiver.java
@@ -57,7 +57,6 @@ public class MessageReceiver<T> extends AbstractNamedChannelHandler {
     if (DEBUG) {
       log.info(String.format("Received %d byte message.", buffer.readableBytes()));
     }
-    // TODO(damonkohler): Use MessageBuffers pool.
     // We have to make a defensive copy of the buffer here because Netty does
     // not guarantee that the returned ChannelBuffer will not be reused.
     lazyMessages.add(new LazyMessage<T>(buffer.copy(), deserializer));
diff --git a/rosjava/src/main/java/org/ros/internal/transport/queue/OutgoingMessageQueue.java b/rosjava/src/main/java/org/ros/internal/transport/queue/OutgoingMessageQueue.java
index 46e03574dbbe057e48ea8250e70db62591c8d6c3..c7ebe441212ccd11a7ebdf3124c3568008389f14 100644
--- a/rosjava/src/main/java/org/ros/internal/transport/queue/OutgoingMessageQueue.java
+++ b/rosjava/src/main/java/org/ros/internal/transport/queue/OutgoingMessageQueue.java
@@ -42,7 +42,7 @@ public class OutgoingMessageQueue<T> {
   private static final boolean DEBUG = false;
   private static final Log log = LogFactory.getLog(OutgoingMessageQueue.class);
 
-  private static final int QUEUE_CAPACITY = 128;
+  private static final int QUEUE_CAPACITY = 16;
 
   private final MessageSerializer<T> serializer;
   private final CircularBlockingQueue<T> queue;
diff --git a/rosjava_bootstrap/src/main/java/org/ros/internal/message/field/ChannelBufferField.java b/rosjava_bootstrap/src/main/java/org/ros/internal/message/field/ChannelBufferField.java
index 463bba1761c76470ca802e016b4e7ba8894c921d..a13f542590d4558355b6948ba9d367ad157959b2 100644
--- a/rosjava_bootstrap/src/main/java/org/ros/internal/message/field/ChannelBufferField.java
+++ b/rosjava_bootstrap/src/main/java/org/ros/internal/message/field/ChannelBufferField.java
@@ -73,9 +73,7 @@ public class ChannelBufferField extends Field {
     if (currentSize < 0) {
       currentSize = buffer.readInt();
     }
-    // There are no guarantees this buffer won't be reused so we create a
-    // defensive copy.
-    value = buffer.readSlice(currentSize).copy();
+    value = buffer.readSlice(currentSize);
   }
 
   @Override