diff --git a/ethchain/state.go b/ethchain/state.go
index 993f1fb08b8ee324216de0fc630102b89062c9b4..616ab77e0fff0880c3963f629615afd02e881cad 100644
--- a/ethchain/state.go
+++ b/ethchain/state.go
@@ -120,6 +120,8 @@ func (self *State) GetOrNewStateObject(addr []byte) *StateObject {
 }
 
 func (self *State) NewStateObject(addr []byte) *StateObject {
+	ethutil.Config.Log.Printf(ethutil.LogLevelInfo, "(+) %x\n", addr)
+
 	stateObject := NewStateObject(addr)
 	self.stateObjects[string(addr)] = stateObject
 
diff --git a/ethchain/state_transition.go b/ethchain/state_transition.go
index 23175b0f32979e6f1ca45c6bb2009b610c7c3ec7..dc465bbbd2c56f0e73ce11b58682cfe7599ef8c9 100644
--- a/ethchain/state_transition.go
+++ b/ethchain/state_transition.go
@@ -97,7 +97,6 @@ func (self *StateTransition) BuyGas() error {
 	if err != nil {
 		return err
 	}
-	//self.state.UpdateStateObject(coinbase)
 
 	self.AddGas(self.tx.Gas)
 	sender.SubAmount(self.tx.GasValue())
@@ -115,7 +114,7 @@ func (self *StateTransition) RefundGas() {
 }
 
 func (self *StateTransition) TransitionState() (err error) {
-	//snapshot := st.state.Snapshot()
+	ethutil.Config.Log.Printf(ethutil.LogLevelInfo, "(~) %x\n", self.tx.Hash())
 
 	/*
 		defer func() {
@@ -132,8 +131,6 @@ func (self *StateTransition) TransitionState() (err error) {
 		receiver *StateObject
 	)
 
-	ethutil.Config.Log.Printf(ethutil.LogLevelInfo, "(~) %x\n", tx.Hash())
-
 	// Make sure this transaction's nonce is correct
 	if sender.Nonce != tx.Nonce {
 		return NonceError(tx.Nonce, sender.Nonce)
@@ -146,26 +143,11 @@ func (self *StateTransition) TransitionState() (err error) {
 
 	// XXX Transactions after this point are considered valid.
 
-	defer func() {
-		self.RefundGas()
-
-		/*
-			if sender != nil {
-				self.state.UpdateStateObject(sender)
-			}
-
-			if receiver != nil {
-				self.state.UpdateStateObject(receiver)
-			}
-
-			self.state.UpdateStateObject(self.Coinbase())
-		*/
-	}()
+	defer self.RefundGas()
 
 	// Increment the nonce for the next transaction
 	sender.Nonce += 1
 
-	// Get the receiver (TODO fix this, if coinbase is the receiver we need to save/retrieve)
 	receiver = self.Receiver()
 
 	// Transaction gas
diff --git a/ethchain/transaction.go b/ethchain/transaction.go
index 3d52e4f73f7d92c7726d8edfdf7bfd22514fca8d..9044f586ed8a7fcc53a9c016eb2ff9eca22e5eb1 100644
--- a/ethchain/transaction.go
+++ b/ethchain/transaction.go
@@ -65,7 +65,7 @@ func (tx *Transaction) CreatesContract() bool {
 	return tx.contractCreation
 }
 
-/* Depricated */
+/* Deprecated */
 func (tx *Transaction) IsContract() bool {
 	return tx.CreatesContract()
 }
diff --git a/ethchain/vm.go b/ethchain/vm.go
index 77a08faa6c327aaeb50914c801c3c966be5347f5..6904331801092188dc821a702381ca25e24fff07 100644
--- a/ethchain/vm.go
+++ b/ethchain/vm.go
@@ -120,7 +120,9 @@ func (vm *Vm) RunClosure(closure *Closure, hook DebugHook) (ret []byte, err erro
 		var newMemSize uint64 = 0
 		switch op {
 		case STOP:
+			gas.Set(ethutil.Big0)
 		case SUICIDE:
+			gas.Set(ethutil.Big0)
 		case SLOAD:
 			gas.Set(GasSLoad)
 		case SSTORE:
@@ -296,6 +298,7 @@ func (vm *Vm) RunClosure(closure *Closure, hook DebugHook) (ret []byte, err erro
 		case EQ:
 			require(2)
 			x, y := stack.Popn()
+			fmt.Printf("%x == %x\n", x, y)
 			// x == y
 			if x.Cmp(y) == 0 {
 				stack.Push(ethutil.BigTrue)
@@ -365,12 +368,14 @@ func (vm *Vm) RunClosure(closure *Closure, hook DebugHook) (ret []byte, err erro
 			offset := stack.Pop().Int64()
 
 			var data []byte
-			if len(closure.Args) >= int(offset+32) {
-				data = closure.Args[offset : offset+32]
+			if len(closure.Args) >= int(offset) {
+				l := int64(math.Min(float64(offset+32), float64(len(closure.Args))))
+				data = closure.Args[offset : offset+l]
 			} else {
 				data = []byte{0}
 			}
 
+			fmt.Println("CALLDATALOAD", string(data), len(data), "==", len(closure.Args))
 			stack.Push(ethutil.BigD(data))
 		case CALLDATASIZE:
 			stack.Push(big.NewInt(int64(len(closure.Args))))
@@ -452,12 +457,11 @@ func (vm *Vm) RunClosure(closure *Closure, hook DebugHook) (ret []byte, err erro
 			require(1)
 			loc := stack.Pop()
 			val := closure.GetMem(loc)
-			//fmt.Println("get", val.BigInt(), "@", loc)
 			stack.Push(val.BigInt())
 		case SSTORE:
 			require(2)
 			val, loc := stack.Popn()
-			//fmt.Println("storing", val, "@", loc)
+			fmt.Println("storing", string(val.Bytes()), "@", string(loc.Bytes()))
 			closure.SetStorage(loc, ethutil.NewValue(val))
 
 			// Add the change to manifest
@@ -471,7 +475,7 @@ func (vm *Vm) RunClosure(closure *Closure, hook DebugHook) (ret []byte, err erro
 		case JUMPI:
 			require(2)
 			cond, pos := stack.Popn()
-			if cond.Cmp(ethutil.BigTrue) == 0 {
+			if cond.Cmp(ethutil.BigTrue) >= 0 {
 				pc = pos
 				//pc.Sub(pc, ethutil.Big1)
 				continue
diff --git a/ethutil/trie_test.go b/ethutil/trie_test.go
index c89f2fbb7bffe7b8c4283de98e51b878b293667a..15dbc5567e4a032a433db78f951af7d4036270d1 100644
--- a/ethutil/trie_test.go
+++ b/ethutil/trie_test.go
@@ -1,7 +1,12 @@
 package ethutil
 
 import (
+	"bytes"
+	"encoding/json"
 	"fmt"
+	"io"
+	"io/ioutil"
+	"net/http"
 	"reflect"
 	"testing"
 )
@@ -171,14 +176,34 @@ func TestTriePurge(t *testing.T) {
 	}
 }
 
+type TestItem struct {
+	Name         string
+	Inputs       [][]string
+	Expectations string
+}
+
 func TestTrieIt(t *testing.T) {
-	_, trie := New()
-	trie.Update("c", LONG_WORD)
-	trie.Update("ca", LONG_WORD)
-	trie.Update("cat", LONG_WORD)
+	//_, trie := New()
+	resp, err := http.Get("https://raw.githubusercontent.com/ethereum/tests/master/trietest.json")
+	if err != nil {
+		t.Fail()
+	}
 
-	it := trie.NewIterator()
-	it.Each(func(key string, node *Value) {
-		fmt.Println(key, ":", node.Str())
-	})
+	defer resp.Body.Close()
+	body, err := ioutil.ReadAll(resp.Body)
+	if err != nil {
+		t.Fail()
+	}
+
+	dec := json.NewDecoder(bytes.NewReader(body))
+	for {
+		var test TestItem
+		if err := dec.Decode(&test); err == io.EOF {
+			break
+		} else if err != nil {
+			t.Error("Fail something", err)
+			break
+		}
+		fmt.Println(test)
+	}
 }