diff --git a/pin.go b/pin.go
index 7e73b33f2518480a434234bc8b015c4574f4b348..a63dcff57efa1b6f49fb47c1a375e5bacf233c94 100644
--- a/pin.go
+++ b/pin.go
@@ -3,6 +3,8 @@ package pin
 import (
 
 	//ds "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/datastore.go"
+	"bytes"
+	"encoding/json"
 	"sync"
 
 	ds "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/datastore.go"
@@ -175,19 +177,41 @@ func LoadPinner(d ds.Datastore, dserv *mdag.DAGService) (Pinner, error) {
 func (p *pinner) Flush() error {
 	p.lock.RLock()
 	defer p.lock.RUnlock()
+	buf := new(bytes.Buffer)
+	enc := json.NewEncoder(buf)
+
 	recurse := p.recursePin.GetKeys()
-	err := p.dstore.Put(recursePinDatastoreKey, recurse)
+	err := enc.Encode(recurse)
 	if err != nil {
 		return err
 	}
 
+	err = p.dstore.Put(recursePinDatastoreKey, buf.Bytes())
+	if err != nil {
+		return err
+	}
+
+	buf = new(bytes.Buffer)
+	enc = json.NewEncoder(buf)
 	direct := p.directPin.GetKeys()
-	err = p.dstore.Put(directPinDatastoreKey, direct)
+	err = enc.Encode(direct)
+	if err != nil {
+		return err
+	}
+
+	err = p.dstore.Put(directPinDatastoreKey, buf.Bytes())
+	if err != nil {
+		return err
+	}
+
+	buf = new(bytes.Buffer)
+	enc = json.NewEncoder(buf)
+	err = enc.Encode(p.indirPin.refCounts)
 	if err != nil {
 		return err
 	}
 
-	err = p.dstore.Put(indirectPinDatastoreKey, p.indirPin.refCounts)
+	err = p.dstore.Put(indirectPinDatastoreKey, buf.Bytes())
 	if err != nil {
 		return err
 	}