diff --git a/src/vom/type-encoder.js b/src/vom/type-encoder.js
index 2de2212..aef6940 100644
--- a/src/vom/type-encoder.js
+++ b/src/vom/type-encoder.js
@@ -163,7 +163,7 @@
       }
       rawWriter.writeUint(1);
       rawWriter.writeUint(kindToBootstrapType(type.kind).id);
-      rawWriter.writeByte(endByte);
+      rawWriter.writeControlByte(endByte);
       break;
     case kind.OPTIONAL:
       elemId = this._encodeType(type.elem, pending);
@@ -174,7 +174,7 @@
       }
       rawWriter.writeUint(1);
       rawWriter.writeUint(elemId);
-      rawWriter.writeByte(endByte);
+      rawWriter.writeControlByte(endByte);
       break;
     case kind.ENUM:
       rawWriter.writeUint(BootstrapTypes.unionIds.ENUM_TYPE);
@@ -187,7 +187,7 @@
       for (i = 0; i < type.labels.length; i++) {
         rawWriter.writeString(type.labels[i]);
       }
-      rawWriter.writeByte(endByte);
+      rawWriter.writeControlByte(endByte);
       break;
     case kind.ARRAY:
       elemId = this._encodeType(type.elem, pending);
@@ -200,7 +200,7 @@
       rawWriter.writeUint(elemId);
       rawWriter.writeUint(2);
       rawWriter.writeUint(type.len);
-      rawWriter.writeByte(endByte);
+      rawWriter.writeControlByte(endByte);
       break;
     case kind.LIST:
       elemId = this._encodeType(type.elem, pending);
@@ -211,7 +211,7 @@
       }
       rawWriter.writeUint(1);
       rawWriter.writeUint(elemId);
-      rawWriter.writeByte(endByte);
+      rawWriter.writeControlByte(endByte);
       break;
     case kind.SET:
       keyId = this._encodeType(type.key, pending);
@@ -222,7 +222,7 @@
       }
       rawWriter.writeUint(1);
       rawWriter.writeUint(keyId);
-      rawWriter.writeByte(endByte);
+      rawWriter.writeControlByte(endByte);
       break;
     case kind.MAP:
       keyId = this._encodeType(type.key, pending);
@@ -236,7 +236,7 @@
       rawWriter.writeUint(keyId);
       rawWriter.writeUint(2);
       rawWriter.writeUint(elemId);
-      rawWriter.writeByte(endByte);
+      rawWriter.writeControlByte(endByte);
       break;
     case kind.STRUCT:
     case kind.UNION:
@@ -265,9 +265,9 @@
         rawWriter.writeString(field.name);
         rawWriter.writeUint(1);
         rawWriter.writeUint(field.id);
-        rawWriter.writeByte(endByte);
+        rawWriter.writeControlByte(endByte);
       }
-      rawWriter.writeByte(endByte);
+      rawWriter.writeControlByte(endByte);
       break;
     default:
       throw new Error('encodeWireType with unknown kind: ' + type.kind);
diff --git a/src/vom/versions.js b/src/vom/versions.js
index cff9e17..8259c69 100644
--- a/src/vom/versions.js
+++ b/src/vom/versions.js
@@ -10,6 +10,6 @@
  module.exports = {
    version80: 0x80,
    version81: 0x81,
-   defaultVersion: 0x80,
+   defaultVersion: 0x81,
    allowedVersions: [0x80, 0x81]
  };
diff --git a/test/vom/test-type-encoding.js b/test/vom/test-type-encoding.js
index f0ba800..faf7a30 100644
--- a/test/vom/test-type-encoding.js
+++ b/test/vom/test-type-encoding.js
@@ -11,6 +11,7 @@
 var stringify = require('./../../src/vdl/stringify.js');
 var types = require('./../../src/vdl/types.js');
 var kind = require('./../../src/vdl/kind.js');
+var wiretype = require('../../src/gen-vdl/v.io/v23/vom');
 var Promise = require('./../../src/lib/promise');
 
 var TypeEncoder = require('./../../src/vom/type-encoder.js');
@@ -30,8 +31,8 @@
   this.rawReader = new RawVomReader(bytes);
   // consume the header byte.
   this.rawReader._readRawBytes(1);
-  if (header !== 0x80) {
-    throw new Error('Improperly formatted bytes. Must start with 0x80');
+  if (header !== 0x80 && header !== 0x81) {
+    throw new Error('Improperly formatted bytes. Must start with 0x80 or 0x81');
   }
 }
 
@@ -40,7 +41,18 @@
  */
 TypeMessageReader.prototype.nextMessage = function(typeDecoder) {
   var reader = this;
-  return this.rawReader.readInt().then(function(typeId) {
+  return reader.rawReader.tryReadControlByte().then(function(ctrl) {
+    // NOTE: In the tests using this reader, types are read in order. This
+    // could potentially lead to hangs but doesn't because of the particular
+    // test cases chosen. This isn't an issue and in the non-test implementation
+    // because the type building algorithm is different.
+    // TODO(bprosnitz) The tests should probably be changed to reuse the
+    // same type building logic of the implementation in the future.
+    if (ctrl && ctrl !== wiretype.WireCtrlTypeIncomplete.val) {
+      throw new Error('received unknown control byte: 0x' + ctrl.toString(16));
+    }
+    return reader.rawReader.readInt();
+  }).then(function(typeId) {
     if (typeId >= 0) {
       throw new Error('Value messages not implemented.');
     }
