diff --git a/ipns.go b/ipns.go
index 2d67945e523113e4cd704394cdb283f797a1b4ca..be71edb7237d479425cd926a9d68ed79873b675e 100644
--- a/ipns.go
+++ b/ipns.go
@@ -68,6 +68,8 @@ func GetEOL(entry *pb.IpnsEntry) (time.Time, error) {
 // that don't embed their public keys as they may not be able to validate them
 // efficiently.
 func EmbedPublicKey(pk ic.PubKey, entry *pb.IpnsEntry) error {
+	// Try extracting the public key from the ID. If we can, *don't* embed
+	// it.
 	id, err := peer.IDFromPublicKey(pk)
 	if err != nil {
 		return err
@@ -79,6 +81,9 @@ func EmbedPublicKey(pk ic.PubKey, entry *pb.IpnsEntry) error {
 	if extraced != nil {
 		return nil
 	}
+
+	// We failed to extract the public key from the peer ID, embed it in the
+	// record.
 	pkBytes, err := pk.Bytes()
 	if err != nil {
 		return err
diff --git a/ipns_test.go b/ipns_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..d46423fefd33fdf32f882ba00599c522a82f0c97
--- /dev/null
+++ b/ipns_test.go
@@ -0,0 +1,43 @@
+package ipns
+
+import (
+	"testing"
+	"time"
+
+	u "github.com/ipfs/go-ipfs-util"
+	ci "github.com/libp2p/go-libp2p-crypto"
+	peer "github.com/libp2p/go-libp2p-peer"
+)
+
+func TestEmbedPublicKey(t *testing.T) {
+
+	sr := u.NewTimeSeededRand()
+	priv, pub, err := ci.GenerateKeyPairWithReader(ci.RSA, 1024, sr)
+	if err != nil {
+		t.Fatal(err)
+	}
+
+	pid, err := peer.IDFromPublicKey(pub)
+	if err != nil {
+		t.Fatal(err)
+	}
+
+	e, err := Create(priv, []byte("/a/b"), 0, time.Now().Add(1*time.Hour))
+	if err != nil {
+		t.Fatal(err)
+	}
+	if err := EmbedPublicKey(pub, e); err != nil {
+		t.Fatal(err)
+	}
+	embeddedPk, err := ci.UnmarshalPublicKey(e.PubKey)
+	if err != nil {
+		t.Fatal(err)
+	}
+	embeddedPid, err := peer.IDFromPublicKey(embeddedPk)
+	if err != nil {
+		t.Fatal(err)
+	}
+	if embeddedPid != pid {
+		t.Fatalf("pid mismatch: %s != %s", pid, embeddedPid)
+	}
+}