diff --git a/src/transaction.js b/src/transaction.js
index 62ac33e..c71d65a 100644
--- a/src/transaction.js
+++ b/src/transaction.js
@@ -113,14 +113,17 @@ Transaction.prototype.toBuffer = function () {
     slice.copy(buffer, offset)
     offset += slice.length
   }
+
   function writeUInt32(i) {
     buffer.writeUInt32LE(i, offset)
     offset += 4
   }
+
   function writeUInt64(i) {
     bufferutils.writeUInt64LE(buffer, i, offset)
     offset += 8
   }
+
   function writeVarInt(i) {
     var n = bufferutils.writeVarInt(buffer, i, offset)
     offset += n
@@ -247,50 +250,47 @@ Transaction.fromBuffer = function(buffer) {
     offset += n
     return buffer.slice(offset - n, offset)
   }
+
   function readUInt32() {
     var i = buffer.readUInt32LE(offset)
     offset += 4
     return i
   }
+
   function readUInt64() {
     var i = bufferutils.readUInt64LE(buffer, offset)
     offset += 8
     return i
   }
+
   function readVarInt() {
     var vi = bufferutils.readVarInt(buffer, offset)
     offset += vi.size
     return vi.number
   }
 
+  function readScript() {
+    return Script.fromBuffer(readSlice(readVarInt()))
+  }
+
   var tx = new Transaction()
   tx.version = readUInt32()
 
   var vinLen = readVarInt()
   for (var i = 0; i < vinLen; ++i) {
-    var hash = readSlice(32)
-    var vout = readUInt32()
-    var scriptLen = readVarInt()
-    var script = readSlice(scriptLen)
-    var sequence = readUInt32()
-
     tx.ins.push({
-      hash: hash,
-      index: vout,
-      script: Script.fromBuffer(script),
-      sequence: sequence
+      hash: readSlice(32),
+      index: readUInt32(),
+      script: readScript(),
+      sequence: readUInt32()
     })
   }
 
   var voutLen = readVarInt()
   for (i = 0; i < voutLen; ++i) {
-    var value = readUInt64()
-    var scriptLen = readVarInt()
-    var script = readSlice(scriptLen)
-
     tx.outs.push({
-      value: value,
-      script: Script.fromBuffer(script)
+      value: readUInt64(),
+      script: readScript(),
     })
   }