diff --git a/trie/trie.go b/trie/trie.go
index 139e3d2867..d89c397756 100644
--- a/trie/trie.go
+++ b/trie/trie.go
@@ -197,7 +197,12 @@ func (t *Trie) Update(key, value string) {
 
 	k := CompactHexDecode(key)
 
-	root := t.UpdateState(t.Root, k, value)
+	var root interface{}
+	if value != "" {
+		root = t.UpdateState(t.Root, k, value)
+	} else {
+		root = t.deleteState(t.Root, k)
+	}
 	t.setRoot(root)
 }
 
diff --git a/trie/trie_test.go b/trie/trie_test.go
index 4c7e621dcc..d00671c6a6 100644
--- a/trie/trie_test.go
+++ b/trie/trie_test.go
@@ -444,3 +444,59 @@ func TestRndCase(t *testing.T) {
 	fmt.Printf("%x\n", trie.Get(string(ethutil.Hex2Bytes("0000000000000000000000000000000000000000000000000000000000000001"))))
 }
 */
+
+func TestOtherSomething(t *testing.T) {
+	_, trie := NewTrie()
+
+	vals := []struct{ k, v string }{
+		{"do", "verb"},
+		{"ether", "wookiedoo"},
+		{"horse", "stallion"},
+		{"shaman", "horse"},
+		{"doge", "coin"},
+		{"ether", ""},
+		{"dog", "puppy"},
+		{"shaman", ""},
+	}
+	for _, val := range vals {
+		trie.Update(val.k, val.v)
+	}
+
+	exp := ethutil.Hex2Bytes("5991bb8c6514148a29db676a14ac506cd2cd5775ace63c30a4fe457715e9ac84")
+	hash := trie.Root.([]byte)
+	if !bytes.Equal(hash, exp) {
+		t.Errorf("expected %x got %x", exp, hash)
+	}
+}
+
+func BenchmarkGets(b *testing.B) {
+	_, trie := NewTrie()
+	vals := []struct{ k, v string }{
+		{"do", "verb"},
+		{"ether", "wookiedoo"},
+		{"horse", "stallion"},
+		{"shaman", "horse"},
+		{"doge", "coin"},
+		{"ether", ""},
+		{"dog", "puppy"},
+		{"shaman", ""},
+		{"somethingveryoddindeedthis is", "myothernodedata"},
+	}
+	for _, val := range vals {
+		trie.Update(val.k, val.v)
+	}
+
+	b.ResetTimer()
+	for i := 0; i < b.N; i++ {
+		trie.Get("horse")
+	}
+}
+
+func BenchmarkUpdate(b *testing.B) {
+	_, trie := NewTrie()
+
+	b.ResetTimer()
+	for i := 0; i < b.N; i++ {
+		trie.Update(fmt.Sprintf("aaaaaaaaaaaaaaa%d", j), "value")
+	}
+}