diff --git a/routing/supernode/proxy/standard.go b/routing/supernode/proxy/standard.go
index 3e4e2291c7dc71bc732261e3b5644a50a6be99f4..e45bfb72b83197c933d9e3ea40dbf5f957ff3185 100644
--- a/routing/supernode/proxy/standard.go
+++ b/routing/supernode/proxy/standard.go
@@ -61,15 +61,25 @@ func (p *standard) HandleStream(s inet.Stream) {
 	s.Close()
 }
 
+const replicationFactor = 2
+
 // SendMessage sends message to each remote sequentially (randomized order),
 // stopping after the first successful response. If all fail, returns the last
 // error.
 func (px *standard) SendMessage(ctx context.Context, m *dhtpb.Message) error {
 	var err error
+	var numSuccesses int
 	for _, remote := range sortedByKey(px.remoteIDs, m.GetKey()) {
 		if err = px.sendMessage(ctx, m, remote); err != nil { // careful don't re-declare err!
 			continue
 		}
+		numSuccesses++
+		switch m.GetType() {
+		case dhtpb.Message_ADD_PROVIDER, dhtpb.Message_PUT_VALUE:
+			if numSuccesses < replicationFactor {
+				continue
+			}
+		}
 		return nil // success
 	}
 	return err // NB: returns the last error