diff --git a/src/test/org/codehaus/jackson/smile/SmileTestBase.java b/src/test/org/codehaus/jackson/smile/SmileTestBase.java
index fdb4e84..9b018ea 100644
--- a/src/test/org/codehaus/jackson/smile/SmileTestBase.java
+++ b/src/test/org/codehaus/jackson/smile/SmileTestBase.java
@@ -6,10 +6,25 @@
 import org.junit.Assert;
 
 import org.codehaus.jackson.*;
+import org.codehaus.jackson.map.ObjectMapper;
 
 abstract class SmileTestBase
     extends main.BaseTest
 {
+    protected ObjectMapper smileMapper() {
+        return smileMapper(false);
+    }
+    
+    protected ObjectMapper smileMapper(boolean requireHeader) {
+        return smileMapper(requireHeader, false, false);
+    }
+    
+    protected ObjectMapper smileMapper(boolean requireHeader,
+            boolean writeHeader, boolean writeEndMarker)
+    {
+        return new ObjectMapper(smileFactory(requireHeader, writeHeader, writeEndMarker));
+    }
+
     protected SmileParser _smileParser(byte[] input) throws IOException {
         return _smileParser(input, false);
     }
@@ -28,7 +43,6 @@
     
     protected SmileFactory smileFactory(boolean requireHeader,
             boolean writeHeader, boolean writeEndMarker)
-        throws IOException
     {
         SmileFactory f = new SmileFactory();
         f.configure(SmileParser.Feature.REQUIRE_HEADER, requireHeader);
diff --git a/src/test/org/codehaus/jackson/smile/TestMapper.java b/src/test/org/codehaus/jackson/smile/TestMapper.java
new file mode 100644
index 0000000..5f67456
--- /dev/null
+++ b/src/test/org/codehaus/jackson/smile/TestMapper.java
@@ -0,0 +1,28 @@
+package org.codehaus.jackson.smile;
+
+import java.io.IOException;
+
+import org.codehaus.jackson.map.ObjectMapper;
+import org.junit.Assert;
+
+public class TestMapper extends SmileTestBase
+{
+    static class BytesBean {
+        public byte[] bytes;
+        
+        public BytesBean() { }
+        public BytesBean(byte[] b) { bytes = b; }
+    }
+    
+    // [JACKSON-733]
+    public void testBinary() throws IOException
+    {
+        byte[] input = new byte[] { 1, 2, 3, -1, 8, 0, 42 };
+        ObjectMapper mapper = smileMapper();
+        byte[] smile = mapper.writeValueAsBytes(new BytesBean(input));
+        BytesBean result = mapper.readValue(smile, BytesBean.class);
+        
+        assertNotNull(result.bytes);
+        Assert.assertArrayEquals(input, result.bytes);
+    }
+}
