diff --git a/ethstate/dump.go b/ethstate/dump.go
index 2406dfc497a4582524650811db930ee7ac335465..be60a05fcfde0f24177e4870aa80dedd1b23ccac 100644
--- a/ethstate/dump.go
+++ b/ethstate/dump.go
@@ -19,7 +19,7 @@ type World struct {
 	Accounts map[string]Account `json:"accounts"`
 }
 
-func (self *State) Dump() string {
+func (self *State) Dump() []byte {
 	world := World{
 		Root:     ethutil.Bytes2Hex(self.Trie.Root.([]byte)),
 		Accounts: make(map[string]Account),
@@ -43,5 +43,5 @@ func (self *State) Dump() string {
 		fmt.Println("dump err", err)
 	}
 
-	return string(json)
+	return json
 }
diff --git a/ethutil/common.go b/ethutil/common.go
index cbd94e7add4c89c80cbbed08cb28fa0fddcd9b25..8532d80f2c9809fb9619ce6673670db7518eb165 100644
--- a/ethutil/common.go
+++ b/ethutil/common.go
@@ -34,26 +34,43 @@ var (
 // Currency to string
 // Returns a string representing a human readable format
 func CurrencyToString(num *big.Int) string {
+	var (
+		fin   *big.Int = num
+		denom string   = "Wei"
+	)
+
 	switch {
 	case num.Cmp(Douglas) >= 0:
-		return fmt.Sprintf("%v Douglas", new(big.Int).Div(num, Douglas))
+		fin = new(big.Int).Div(num, Douglas)
+		denom = "Douglas"
 	case num.Cmp(Einstein) >= 0:
-		return fmt.Sprintf("%v Einstein", new(big.Int).Div(num, Einstein))
+		fin = new(big.Int).Div(num, Einstein)
+		denom = "Einstein"
 	case num.Cmp(Ether) >= 0:
-		return fmt.Sprintf("%v Ether", new(big.Int).Div(num, Ether))
+		fin = new(big.Int).Div(num, Ether)
+		denom = "Ether"
 	case num.Cmp(Finney) >= 0:
-		return fmt.Sprintf("%v Finney", new(big.Int).Div(num, Finney))
+		fin = new(big.Int).Div(num, Finney)
+		denom = "Finney"
 	case num.Cmp(Szabo) >= 0:
-		return fmt.Sprintf("%v Szabo", new(big.Int).Div(num, Szabo))
+		fin = new(big.Int).Div(num, Szabo)
+		denom = "Szabo"
 	case num.Cmp(Shannon) >= 0:
-		return fmt.Sprintf("%v Shannon", new(big.Int).Div(num, Shannon))
+		fin = new(big.Int).Div(num, Shannon)
+		denom = "Shannon"
 	case num.Cmp(Babbage) >= 0:
-		return fmt.Sprintf("%v Babbage", new(big.Int).Div(num, Babbage))
+		fin = new(big.Int).Div(num, Babbage)
+		denom = "Babbage"
 	case num.Cmp(Ada) >= 0:
-		return fmt.Sprintf("%v Ada", new(big.Int).Div(num, Ada))
+		fin = new(big.Int).Div(num, Ada)
+		denom = "Ada"
+	}
+
+	if len(fin.String()) > 5 {
+		return fmt.Sprintf("%sE%d %s", fin.String()[0:5], len(fin.String())-5, denom)
 	}
 
-	return fmt.Sprintf("%v Wei", num)
+	return fmt.Sprintf("%v %s", fin, denom)
 }
 
 // Common big integers often used