diff --git a/ethpub/types.go b/ethpub/types.go
index 4967eda492de56e31fc5c5ddf67984090cb0f132..6893c7e09bc9d97f1f3f4dca193da15d1fda6259 100644
--- a/ethpub/types.go
+++ b/ethpub/types.go
@@ -207,6 +207,31 @@ func (c *PStateObject) IsContract() bool {
 	return false
 }
 
+type KeyVal struct {
+	Key   string
+	Value string
+}
+
+func (c *PStateObject) StateKeyVal(asJson bool) interface{} {
+	var values []KeyVal
+	if c.object != nil {
+		c.object.State().EachStorage(func(name string, value *ethutil.Value) {
+			values = append(values, KeyVal{name, ethutil.Hex(value.Bytes())})
+		})
+	}
+
+	if asJson {
+		valuesJson, err := json.Marshal(values)
+		if err != nil {
+			return nil
+		}
+		fmt.Println(string(valuesJson))
+		return string(valuesJson)
+	}
+
+	return values
+}
+
 func (c *PStateObject) Script() string {
 	if c.object != nil {
 		return strings.Join(ethchain.Disassemble(c.object.Script()), " ")