diff --git a/message_generation/src/main/java/org/ros/internal/message/MessageImpl.java b/message_generation/src/main/java/org/ros/internal/message/MessageImpl.java
index d7824dcecdf525671edc3d09b47eabba5232cdb0..d41e0419bd9abd4a78d879398e8de4c2bcd4ac27 100644
--- a/message_generation/src/main/java/org/ros/internal/message/MessageImpl.java
+++ b/message_generation/src/main/java/org/ros/internal/message/MessageImpl.java
@@ -161,8 +161,8 @@ class MessageImpl implements RawMessage, GetInstance {
   }
 
   @Override
-  public byte[] getInt8Array(String name) {
-    return (byte[]) messageFields.getFieldValue(name);
+  public ChannelBuffer getInt8Array(String name) {
+    return (ChannelBuffer) messageFields.getFieldValue(name);
   }
 
   @Override
diff --git a/message_generation/src/main/java/org/ros/internal/message/RawMessage.java b/message_generation/src/main/java/org/ros/internal/message/RawMessage.java
index 999db7a076d3cfe33e4cef3c1798b329d084b61a..a7f413af35909624578e725038fb7c640e7ab2c3 100644
--- a/message_generation/src/main/java/org/ros/internal/message/RawMessage.java
+++ b/message_generation/src/main/java/org/ros/internal/message/RawMessage.java
@@ -85,7 +85,7 @@ public interface RawMessage extends Message {
 
   byte getInt8(String name);
 
-  byte[] getInt8Array(String name);
+  ChannelBuffer getInt8Array(String name);
 
   <T extends Message> T getMessage(String name);
 
diff --git a/message_generation/src/main/java/org/ros/internal/message/field/ChannelBufferField.java b/message_generation/src/main/java/org/ros/internal/message/field/ChannelBufferField.java
index a13f542590d4558355b6948ba9d367ad157959b2..3977205932d1208b4c7cf7c1644ed77f47d0549e 100644
--- a/message_generation/src/main/java/org/ros/internal/message/field/ChannelBufferField.java
+++ b/message_generation/src/main/java/org/ros/internal/message/field/ChannelBufferField.java
@@ -19,6 +19,7 @@ package org.ros.internal.message.field;
 import com.google.common.base.Preconditions;
 
 import org.jboss.netty.buffer.ChannelBuffer;
+import org.jboss.netty.buffer.ChannelBuffers;
 import org.ros.internal.message.MessageBuffers;
 
 import java.nio.ByteOrder;
@@ -52,9 +53,15 @@ public class ChannelBufferField extends Field {
 
   @Override
   public void setValue(Object value) {
-    Preconditions.checkArgument(((ChannelBuffer) value).order() == ByteOrder.LITTLE_ENDIAN);
-    Preconditions.checkArgument(size < 0 || ((ChannelBuffer) value).readableBytes() == size);
-    this.value = (ChannelBuffer) value;
+    ChannelBuffer channelBufferValue = null;
+    if (value instanceof byte[]) {
+      channelBufferValue = ChannelBuffers.wrappedBuffer(ByteOrder.LITTLE_ENDIAN, byte[].class.cast(value));
+    } else if (value instanceof ChannelBuffer) {
+      channelBufferValue = ChannelBuffer.class.cast(value);
+    }
+    Preconditions.checkArgument(channelBufferValue.order() == ByteOrder.LITTLE_ENDIAN);
+    Preconditions.checkArgument(size < 0 || channelBufferValue.readableBytes() == size);
+    this.value = channelBufferValue;
   }
 
   @Override
diff --git a/message_generation/src/test/java/org/ros/internal/message/MessageTest.java b/message_generation/src/test/java/org/ros/internal/message/MessageTest.java
index fe80bb483e139b811229ddf2453e02abcc866e22..241009dfc590ee66ccb2356df3435de392449ae0 100644
--- a/message_generation/src/test/java/org/ros/internal/message/MessageTest.java
+++ b/message_generation/src/test/java/org/ros/internal/message/MessageTest.java
@@ -20,11 +20,15 @@ import static org.junit.Assert.assertEquals;
 
 import com.google.common.collect.Lists;
 
+import org.jboss.netty.buffer.ChannelBuffer;
+import org.jboss.netty.buffer.ChannelBuffers;
 import org.junit.Before;
 import org.junit.Test;
 import org.ros.internal.message.topic.TopicDefinitionResourceProvider;
 import org.ros.message.MessageFactory;
 
+import java.nio.ByteOrder;
+
 /**
  * @author damonkohler@google.com (Damon Kohler)
  */
@@ -114,11 +118,13 @@ public class MessageTest {
     assertEquals("Hello, ROS! # comment", rawMessage.getString("data"));
   }
 
+  @Test
   public void testInt8List() {
     topicDefinitionResourceProvider.add("foo/foo", "int8[] data");
     RawMessage rawMessage = messageFactory.newFromType("foo/foo");
-    byte[] data = new byte[] { (byte) 1, (byte) 2, (byte) 3 };
-    rawMessage.setInt8Array("data", data);
+    byte[] rawData = new byte[] { (byte) 1, (byte) 2, (byte) 3 };
+    ChannelBuffer data = ChannelBuffers.wrappedBuffer(ByteOrder.LITTLE_ENDIAN, rawData);
+    rawMessage.setInt8Array("data", rawData);
     assertEquals(data, rawMessage.getInt8Array("data"));
   }
 }
\ No newline at end of file