diff --git a/net/prefix.go b/net/prefix.go
index 95b7f79d5e67d2d1721da4b94a1c807d98c378cd..2f3580f91500ecd45adc958229d2d36d0a3b22c4 100644
--- a/net/prefix.go
+++ b/net/prefix.go
@@ -22,6 +22,12 @@ func (p *Prefix) Dedup() *Prefix {
 	return pfxc.get(p)
 }
 
+// DedupWithIP gets a copy of Prefix from the cache and dedups the IP part
+func (p *Prefix) DedupWithIP() *Prefix {
+	p.addr = p.addr.Dedup()
+	return pfxc.get(p)
+}
+
 // NewPrefixFromProtoPrefix creates a Prefix from a proto Prefix
 func NewPrefixFromProtoPrefix(pfx api.Prefix) *Prefix {
 	return &Prefix{
@@ -54,10 +60,10 @@ func PrefixFromString(s string) (*Prefix, error) {
 }
 
 // ToProto converts prefix to proto prefix
-func (pfx *Prefix) ToProto() *api.Prefix {
+func (p *Prefix) ToProto() *api.Prefix {
 	return &api.Prefix{
-		Address: pfx.addr.ToProto(),
-		Pfxlen:  uint32(pfx.pfxlen),
+		Address: p.addr.ToProto(),
+		Pfxlen:  uint32(p.pfxlen),
 	}
 }