diff --git a/bindings/channels.go b/bindings/channels.go
index f58af96029bfeb55ff800e13d6be032185e2823e..78182a190bb63b9f851049c85cb944da50a89454 100644
--- a/bindings/channels.go
+++ b/bindings/channels.go
@@ -11,6 +11,7 @@ import (
 	"crypto/ed25519"
 	"encoding/base64"
 	"encoding/json"
+	jww "github.com/spf13/jwalterweatherman"
 	"sync"
 	"time"
 
@@ -234,6 +235,16 @@ func NewChannelsManagerGoEventModel(cmixID int, privateIdentity []byte,
 		return nil, err
 	}
 
+	// fixme: remove this, make it called by the javascript
+	// hack to get to release late at night
+	go func() {
+		time.Sleep(3 * time.Second)
+		localErr := user.IncreaseParallelNodeRegistration(13)
+		if localErr != nil {
+			jww.ERROR.Printf(localErr.Error())
+		}
+	}()
+
 	// Add channel to singleton and return
 	return channelManagerTrackerSingleton.make(m), nil
 }
@@ -267,6 +278,16 @@ func LoadChannelsManagerGoEventModel(cmixID int, storageTag string,
 		return nil, err
 	}
 
+	// fixme: remove this, make it called by the javascript
+	// hack to get to release late at night
+	go func() {
+		time.Sleep(3 * time.Second)
+		localErr := user.IncreaseParallelNodeRegistration(13)
+		if localErr != nil {
+			jww.ERROR.Printf(localErr.Error())
+		}
+	}()
+
 	// Add channel to singleton and return
 	return channelManagerTrackerSingleton.make(m), nil
 }
diff --git a/bindings/follow.go b/bindings/follow.go
index 6f892e4151356b6bfa0906f2f746542aaae4c99e..4327964853f82e3f23146ecb3d017a5552e90146 100644
--- a/bindings/follow.go
+++ b/bindings/follow.go
@@ -188,6 +188,12 @@ func (c *Cmix) AddHealthCallback(nhc NetworkHealthCallback) int64 {
 	return int64(c.api.GetCmix().AddHealthCallback(nhc.Callback))
 }
 
+// IncreaseParallelNodeRegistration increases the number of parallel node
+// registrations by num
+func (c *Cmix) IncreaseParallelNodeRegistration(num int) error {
+	return c.api.IncreaseParallelNodeRegistration(num)
+}
+
 // RemoveHealthCallback removes a health callback using its registration ID.
 func (c *Cmix) RemoveHealthCallback(funcID int64) {
 	c.api.GetCmix().RemoveHealthCallback(uint64(funcID))
diff --git a/cmix/interface.go b/cmix/interface.go
index 1d0bfdaeb09c25ab4b26018233ab0b8b52e93964..0e01001ba00835213f1bf3d868a049bf427380d2 100644
--- a/cmix/interface.go
+++ b/cmix/interface.go
@@ -191,6 +191,10 @@ type Client interface {
 	AddService(clientID *id.ID, newService message.Service,
 		response message.Processor)
 
+	// IncreaseParallelNodeRegistration increases the number of parallel node
+	// registrations by num
+	IncreaseParallelNodeRegistration(num int) func() (stoppable.Stoppable, error)
+
 	// DeleteService deletes a message service. If only a single response is
 	// associated with the preimage, the entire preimage is removed. If there is
 	// more than one response, only the given response is removed. If nil is
diff --git a/cmix/nodes/interfaces.go b/cmix/nodes/interfaces.go
index 5d08e6db9a6c97712621ed02ced970e8344e1f00..ddce4b8f21c98f4ed6824e56a6d755be63ee6f82 100644
--- a/cmix/nodes/interfaces.go
+++ b/cmix/nodes/interfaces.go
@@ -27,6 +27,10 @@ type Registrar interface {
 	// to register with nodes.
 	StartProcesses(numParallel uint) stoppable.Stoppable
 
+	// IncreaseParallelNodeRegistration increases the number of parallel node
+	// registrations by num
+	IncreaseParallelNodeRegistration(num int) func() (stoppable.Stoppable, error)
+
 	// GetNodeKeys returns a MixCypher for the topology and a list of nodes it did
 	// not have a key for. If there are missing keys, then returns nil.
 	GetNodeKeys(topology *connect.Circuit) (MixCypher, error)
diff --git a/cmix/nodes/registrar.go b/cmix/nodes/registrar.go
index 5ca5f108d201de75fcb739c43ea1bf2cea24951b..0c942b8de091ab1d64b2eb2cc0d67b73c19d0194 100644
--- a/cmix/nodes/registrar.go
+++ b/cmix/nodes/registrar.go
@@ -46,6 +46,11 @@ type registrar struct {
 	comms   RegisterNodeCommsInterface
 	rng     *fastRNG.StreamGenerator
 
+	inProgress sync.Map
+	// We are relying on the in progress check to ensure there is only a single
+	// operator at a time, as a result this is a map of ID -> int
+	attempts sync.Map
+
 	c chan network.NodeGateway
 }
 
@@ -91,22 +96,33 @@ func LoadRegistrar(session session, sender gateway.Sender,
 func (r *registrar) StartProcesses(numParallel uint) stoppable.Stoppable {
 	multi := stoppable.NewMulti("NodeRegistrations")
 
-	inProgress := &sync.Map{}
-
-	// We are relying on the in progress check to ensure there is only a single
-	// operator at a time, as a result this is a map of ID -> int
-	attempts := &sync.Map{}
-
 	for i := uint(0); i < numParallel; i++ {
 		stop := stoppable.NewSingle("NodeRegistration " + strconv.Itoa(int(i)))
 
-		go registerNodes(r, r.session, stop, inProgress, attempts)
+		go registerNodes(r, r.session, stop, &r.inProgress, &r.attempts)
 		multi.Add(stop)
 	}
 
 	return multi
 }
 
+// IncreaseParallelNodeRegistration increases the number of parallel node
+// registrations by num
+func (r *registrar) IncreaseParallelNodeRegistration(numParallel int) func() (stoppable.Stoppable, error) {
+	return func() (stoppable.Stoppable, error) {
+		multi := stoppable.NewMulti("NodeRegistrationsIncrease")
+
+		for i := uint(0); i < uint(numParallel); i++ {
+			stop := stoppable.NewSingle("NodeRegistration Increase" + strconv.Itoa(int(i)))
+
+			go registerNodes(r, r.session, stop, &r.inProgress, &r.attempts)
+			multi.Add(stop)
+		}
+
+		return multi, nil
+	}
+}
+
 // GetNodeKeys returns a MixCypher for the topology and a list of nodes it did
 // not have a key for. If there are missing keys, then returns nil.
 func (r *registrar) GetNodeKeys(topology *connect.Circuit) (MixCypher, error) {
diff --git a/cmix/parallelNodeRegistrations.go b/cmix/parallelNodeRegistrations.go
new file mode 100644
index 0000000000000000000000000000000000000000..48f232901263118fffdc12c7c1ec16d3a2f35aa0
--- /dev/null
+++ b/cmix/parallelNodeRegistrations.go
@@ -0,0 +1,13 @@
+////////////////////////////////////////////////////////////////////////////////
+// Copyright © 2022 xx foundation                                             //
+//                                                                            //
+// Use of this source code is governed by a license that can be found in the  //
+// LICENSE file.                                                              //
+////////////////////////////////////////////////////////////////////////////////
+
+// This file is compiled for all architectures except WebAssembly.
+//go:build !js || !wasm
+
+package cmix
+
+const defaultParallelNodeRegistration = 20
diff --git a/cmix/parallelNodeRegistrations_js.go b/cmix/parallelNodeRegistrations_js.go
new file mode 100644
index 0000000000000000000000000000000000000000..8e90835507059eb67d8b8c5baacdce7561b35129
--- /dev/null
+++ b/cmix/parallelNodeRegistrations_js.go
@@ -0,0 +1,3 @@
+package cmix
+
+const defaultParallelNodeRegistration = 2
diff --git a/cmix/params.go b/cmix/params.go
index f15b62feb01f240c90efe88e78281e72eff4dd38..01a606e5b44fdb5d72d1ed851a82598f41ddff6c 100644
--- a/cmix/params.go
+++ b/cmix/params.go
@@ -100,7 +100,7 @@ func GetDefaultParams() Params {
 		MaxCheckedRounds:          500,
 		RegNodesBufferLen:         1000,
 		NetworkHealthTimeout:      15 * time.Second,
-		ParallelNodeRegistrations: 2,
+		ParallelNodeRegistrations: defaultParallelNodeRegistration,
 		KnownRoundsThreshold:      1500, // 5 rounds/sec * 60 sec/min * 5 min
 		FastPolling:               true,
 		VerboseRoundTracking:      false,
diff --git a/connect/utils_test.go b/connect/utils_test.go
index 3aab375cca15e1385a2fa7c621751a0ab508d0cf..9e38793d8423a74299197d8e3a43d00180df20ab 100644
--- a/connect/utils_test.go
+++ b/connect/utils_test.go
@@ -180,21 +180,22 @@ func (m *mockCmix) GetIdentity(*id.ID) (identity.TrackedID, error) {
 	return identity.TrackedID{Creation: netTime.Now().Add(-time.Minute)}, nil
 }
 
-func (m *mockCmix) AddFingerprint(*id.ID, format.Fingerprint, message.Processor) error { return nil }
-func (m *mockCmix) DeleteFingerprint(*id.ID, format.Fingerprint)                       {}
-func (m *mockCmix) DeleteClientFingerprints(*id.ID)                                    {}
-func (m *mockCmix) AddService(*id.ID, message.Service, message.Processor)              {}
-func (m *mockCmix) DeleteService(*id.ID, message.Service, message.Processor)           {}
-func (m *mockCmix) DeleteClientService(*id.ID)                                         {}
-func (m *mockCmix) TrackServices(message.ServicesTracker)                              {}
-func (m *mockCmix) CheckInProgressMessages()                                           {}
-func (m *mockCmix) IsHealthy() bool                                                    { return true }
-func (m *mockCmix) WasHealthy() bool                                                   { return true }
-func (m *mockCmix) AddHealthCallback(func(bool)) uint64                                { return 0 }
-func (m *mockCmix) RemoveHealthCallback(uint64)                                        {}
-func (m *mockCmix) HasNode(*id.ID) bool                                                { return true }
-func (m *mockCmix) NumRegisteredNodes() int                                            { return 24 }
-func (m *mockCmix) TriggerNodeRegistration(*id.ID)                                     {}
+func (m *mockCmix) AddFingerprint(*id.ID, format.Fingerprint, message.Processor) error       { return nil }
+func (m *mockCmix) DeleteFingerprint(*id.ID, format.Fingerprint)                             {}
+func (m *mockCmix) DeleteClientFingerprints(*id.ID)                                          {}
+func (m *mockCmix) AddService(*id.ID, message.Service, message.Processor)                    {}
+func (m *mockCmix) IncreaseParallelNodeRegistration(int) func() (stoppable.Stoppable, error) {return nil}
+func (m *mockCmix) DeleteService(*id.ID, message.Service, message.Processor)                 {}
+func (m *mockCmix) DeleteClientService(*id.ID)                                               {}
+func (m *mockCmix) TrackServices(message.ServicesTracker)                                    {}
+func (m *mockCmix) CheckInProgressMessages()                                                 {}
+func (m *mockCmix) IsHealthy() bool                                                          { return true }
+func (m *mockCmix) WasHealthy() bool                                                         { return true }
+func (m *mockCmix) AddHealthCallback(func(bool)) uint64                                      { return 0 }
+func (m *mockCmix) RemoveHealthCallback(uint64)                                              {}
+func (m *mockCmix) HasNode(*id.ID) bool                                                      { return true }
+func (m *mockCmix) NumRegisteredNodes() int                                                  { return 24 }
+func (m *mockCmix) TriggerNodeRegistration(*id.ID)                                           {}
 
 func (m *mockCmix) GetRoundResults(_ time.Duration, roundCallback cmix.RoundEventCallback, _ ...id.Round) {
 	roundCallback(true, false, nil)
diff --git a/dummy/mockCmix_test.go b/dummy/mockCmix_test.go
index 75cdee581be7e2b08de783f8e27d9d58de078093..60e7de512b840412d9290fdf0cde190f88cf3d74 100644
--- a/dummy/mockCmix_test.go
+++ b/dummy/mockCmix_test.go
@@ -126,6 +126,12 @@ func (m mockCmix) AddService(clientID *id.ID, newService message.Service, respon
 	panic("implement me")
 }
 
+func (m mockCmix) IncreaseParallelNodeRegistration(int) func() (stoppable.Stoppable, error) {
+	//TODO implement me
+	panic("implement me")
+}
+
+
 func (m mockCmix) DeleteService(clientID *id.ID, toDelete message.Service, processor message.Processor) {
 	//TODO implement me
 	panic("implement me")
diff --git a/e2e/fpGenerator_test.go b/e2e/fpGenerator_test.go
index 657fc16462548659dcd8e409c5acb6da928ffeef..adb178e669a8ca94c79bae2909d009530e6f168d 100644
--- a/e2e/fpGenerator_test.go
+++ b/e2e/fpGenerator_test.go
@@ -159,8 +159,11 @@ func (m *mockFpgCmix) DeleteFingerprint(uid *id.ID, fp format.Fingerprint) {
 	}
 }
 
-func (m *mockFpgCmix) DeleteClientFingerprints(*id.ID)                          {}
-func (m *mockFpgCmix) AddService(*id.ID, message.Service, message.Processor)    {}
+func (m *mockFpgCmix) DeleteClientFingerprints(*id.ID)                       {}
+func (m *mockFpgCmix) AddService(*id.ID, message.Service, message.Processor) {}
+func (m *mockFpgCmix) IncreaseParallelNodeRegistration(int) func() (stoppable.Stoppable, error) {
+	return nil
+}
 func (m *mockFpgCmix) DeleteService(*id.ID, message.Service, message.Processor) {}
 func (m *mockFpgCmix) DeleteClientService(*id.ID)                               {}
 func (m *mockFpgCmix) TrackServices(message.ServicesTracker)                    {}
diff --git a/e2e/rekey/utils_test.go b/e2e/rekey/utils_test.go
index aeccacbe316832b436901c654981a6d6fc1138e5..58512b33aa0dc41c9a17f0ab22605c5002e2d013 100644
--- a/e2e/rekey/utils_test.go
+++ b/e2e/rekey/utils_test.go
@@ -222,7 +222,7 @@ func (m mockServiceHandler) DeleteService(clientID *id.ID, toDelete message.Serv
 type mockNetManager struct{}
 
 func (m *mockNetManager) GetIdentity(get *id.ID) (identity.TrackedID, error) {
-	//TODO implement me
+	// TODO implement me
 	panic("implement me")
 }
 
@@ -270,6 +270,11 @@ func (m *mockNetManager) AddService(clientID *id.ID, newService message.Service,
 	response message.Processor) {
 }
 
+func (m *mockNetManager) IncreaseParallelNodeRegistration(
+	int) func() (stoppable.Stoppable, error) {
+	return nil
+}
+
 func (m *mockNetManager) DeleteService(clientID *id.ID, toDelete message.Service,
 	processor message.Processor) {
 }
diff --git a/e2e/utils_test.go b/e2e/utils_test.go
index 78a0eaa7c57a7cd0520f42c260e3968fdbf6ff6a..8ba510fe0e66471878310440ca0de0da7980fdeb 100644
--- a/e2e/utils_test.go
+++ b/e2e/utils_test.go
@@ -239,7 +239,9 @@ func (m *mockCmix) AddService(myId *id.ID, srv message.Service, proc message.Pro
 	m.handler.Unlock()
 
 }
-
+func (m *mockCmix) IncreaseParallelNodeRegistration(int) func() (stoppable.Stoppable, error) {
+	return nil
+}
 func (m *mockCmix) DeleteClientFingerprints(*id.ID)                          {}
 func (m *mockCmix) DeleteService(*id.ID, message.Service, message.Processor) {}
 func (m *mockCmix) DeleteClientService(*id.ID)                               {}
diff --git a/fileTransfer/connect/utils_test.go b/fileTransfer/connect/utils_test.go
index b707e548ec2bbe96d43b9d7d3fa6f19205bee424..14707813e1a1a2361171b1c6a9412cd4dee8b57e 100644
--- a/fileTransfer/connect/utils_test.go
+++ b/fileTransfer/connect/utils_test.go
@@ -158,8 +158,11 @@ func (m *mockCmix) DeleteFingerprint(_ *id.ID, fp format.Fingerprint) {
 	m.handler.Unlock()
 }
 
-func (m *mockCmix) DeleteClientFingerprints(*id.ID)                          { panic("implement me") }
-func (m *mockCmix) AddService(*id.ID, message.Service, message.Processor)    { panic("implement me") }
+func (m *mockCmix) DeleteClientFingerprints(*id.ID)                       { panic("implement me") }
+func (m *mockCmix) AddService(*id.ID, message.Service, message.Processor) { panic("implement me") }
+func (m *mockCmix) IncreaseParallelNodeRegistration(int) func() (stoppable.Stoppable, error) {
+	panic("implement me")
+}
 func (m *mockCmix) DeleteService(*id.ID, message.Service, message.Processor) { panic("implement me") }
 func (m *mockCmix) DeleteClientService(*id.ID)                               { panic("implement me") }
 func (m *mockCmix) TrackServices(message.ServicesTracker)                    { panic("implement me") }
diff --git a/fileTransfer/e2e/utils_test.go b/fileTransfer/e2e/utils_test.go
index a7f50a19525cd2360dfb698fbca8281f2572d520..b77985aed45ac7dd36fa600a3684f41aac98a0ae 100644
--- a/fileTransfer/e2e/utils_test.go
+++ b/fileTransfer/e2e/utils_test.go
@@ -160,8 +160,11 @@ func (m *mockCmix) DeleteFingerprint(_ *id.ID, fp format.Fingerprint) {
 	m.handler.Unlock()
 }
 
-func (m *mockCmix) DeleteClientFingerprints(*id.ID)                          { panic("implement me") }
-func (m *mockCmix) AddService(*id.ID, message.Service, message.Processor)    { panic("implement me") }
+func (m *mockCmix) DeleteClientFingerprints(*id.ID)                       { panic("implement me") }
+func (m *mockCmix) AddService(*id.ID, message.Service, message.Processor) { panic("implement me") }
+func (m *mockCmix) IncreaseParallelNodeRegistration(int) func() (stoppable.Stoppable, error) {
+	panic("implement me")
+}
 func (m *mockCmix) DeleteService(*id.ID, message.Service, message.Processor) { panic("implement me") }
 func (m *mockCmix) DeleteClientService(*id.ID)                               { panic("implement me") }
 func (m *mockCmix) TrackServices(message.ServicesTracker)                    { panic("implement me") }
diff --git a/fileTransfer/groupChat/utils_test.go b/fileTransfer/groupChat/utils_test.go
index a616d65c19783c0bfd9789fb0e3399a61a253656..4475c6a0d45de084a214f73210681b9346132899 100644
--- a/fileTransfer/groupChat/utils_test.go
+++ b/fileTransfer/groupChat/utils_test.go
@@ -157,6 +157,7 @@ func (m *mockCmix) DeleteFingerprint(_ *id.ID, fp format.Fingerprint) {
 
 func (m *mockCmix) DeleteClientFingerprints(*id.ID)                          { panic("implement me") }
 func (m *mockCmix) AddService(*id.ID, message.Service, message.Processor)    { panic("implement me") }
+func (m *mockCmix) IncreaseParallelNodeRegistration(int) func() (stoppable.Stoppable, error) {panic("implement me")}
 func (m *mockCmix) DeleteService(*id.ID, message.Service, message.Processor) { panic("implement me") }
 func (m *mockCmix) DeleteClientService(*id.ID)                               { panic("implement me") }
 func (m *mockCmix) TrackServices(message.ServicesTracker)                    { panic("implement me") }
diff --git a/fileTransfer/utils_test.go b/fileTransfer/utils_test.go
index daba7a06489ec8dac51f9a016d304f779ae94ec8..3c884076acf535232f8f4da54a59ac1cc7b4ec5e 100644
--- a/fileTransfer/utils_test.go
+++ b/fileTransfer/utils_test.go
@@ -211,8 +211,11 @@ func (m *mockCmix) DeleteFingerprint(_ *id.ID, fp format.Fingerprint) {
 	delete(m.handler.processorMap, fp)
 }
 
-func (m *mockCmix) DeleteClientFingerprints(*id.ID)                          { panic("implement me") }
-func (m *mockCmix) AddService(*id.ID, message.Service, message.Processor)    { panic("implement me") }
+func (m *mockCmix) DeleteClientFingerprints(*id.ID)                       { panic("implement me") }
+func (m *mockCmix) AddService(*id.ID, message.Service, message.Processor) { panic("implement me") }
+func (m *mockCmix) IncreaseParallelNodeRegistration(int) func() (stoppable.Stoppable, error) {
+	return nil
+}
 func (m *mockCmix) DeleteService(*id.ID, message.Service, message.Processor) { panic("implement me") }
 func (m *mockCmix) DeleteClientService(*id.ID)                               { panic("implement me") }
 func (m *mockCmix) TrackServices(message.ServicesTracker)                    { panic("implement me") }
diff --git a/go.mod b/go.mod
index ffcc9f9adb8ac862ae6f818ceaf6986bd1369836..f3586fdf85231a686816bed9fb7ba27290011176 100644
--- a/go.mod
+++ b/go.mod
@@ -15,7 +15,7 @@ require (
 	github.com/stretchr/testify v1.8.0
 	gitlab.com/elixxir/bloomfilter v0.0.0-20211222005329-7d931ceead6f
 	gitlab.com/elixxir/comms v0.0.4-0.20221027003916-cd6907e99c34
-	gitlab.com/elixxir/crypto v0.0.7-0.20221026155635-b8e44a9e8bba
+	gitlab.com/elixxir/crypto v0.0.7-0.20221027040529-dbcb6eb2b087
 	gitlab.com/elixxir/ekv v0.2.1
 	gitlab.com/elixxir/primitives v0.0.3-0.20221025020430-f5d2eb330fbc
 	gitlab.com/xx_network/comms v0.0.4-0.20221025202603-3043ba10b2a2
diff --git a/go.sum b/go.sum
index 53e9460e9990e125222eb2502794da3587f4632e..52aa70171076b73b33f297c32602324faa74aec5 100644
--- a/go.sum
+++ b/go.sum
@@ -637,6 +637,8 @@ gitlab.com/elixxir/crypto v0.0.0-20200804182833-984246dea2c4/go.mod h1:ucm9SFKJo
 gitlab.com/elixxir/crypto v0.0.3/go.mod h1:ZNgBOblhYToR4m8tj4cMvJ9UsJAUKq+p0gCp07WQmhA=
 gitlab.com/elixxir/crypto v0.0.7-0.20221026155635-b8e44a9e8bba h1:FrHLVbgIcPMzEpA/IeS3HfYvdf1XP+EoFNavvmBj8bo=
 gitlab.com/elixxir/crypto v0.0.7-0.20221026155635-b8e44a9e8bba/go.mod h1:NImDa7951+jSolkYN/BBUm6qG6f+k0hsFZOCIxBlLhE=
+gitlab.com/elixxir/crypto v0.0.7-0.20221027040529-dbcb6eb2b087 h1:e9cVSSFMmvnTj4PVRa1kCKhwWCekMNTEbeUply4NUGc=
+gitlab.com/elixxir/crypto v0.0.7-0.20221027040529-dbcb6eb2b087/go.mod h1:NImDa7951+jSolkYN/BBUm6qG6f+k0hsFZOCIxBlLhE=
 gitlab.com/elixxir/ekv v0.2.1 h1:dtwbt6KmAXG2Tik5d60iDz2fLhoFBgWwST03p7T+9Is=
 gitlab.com/elixxir/ekv v0.2.1/go.mod h1:USLD7xeDnuZEavygdrgzNEwZXeLQJK/w1a+htpN+JEU=
 gitlab.com/elixxir/primitives v0.0.0-20200731184040-494269b53b4d/go.mod h1:OQgUZq7SjnE0b+8+iIAT2eqQF+2IFHn73tOo+aV11mg=
diff --git a/groupChat/networkManager_test.go b/groupChat/networkManager_test.go
index 934744be0b08341ba95cc8e4e4af25bbcb5bae0d..2cdd1a28a596b8646032417c17d8a5722d3bee94 100644
--- a/groupChat/networkManager_test.go
+++ b/groupChat/networkManager_test.go
@@ -66,7 +66,10 @@ func (tnm *testNetworkManager) SendMany(messages []cmix.TargetedCmixMessage, _ c
 	return rounds.Round{}, nil, nil
 }
 
-func (*testNetworkManager) AddService(*id.ID, message.Service, message.Processor)    {}
+func (*testNetworkManager) AddService(*id.ID, message.Service, message.Processor) {}
+func (*testNetworkManager) IncreaseParallelNodeRegistration(int) func() (stoppable.Stoppable, error) {
+	return nil
+}
 func (*testNetworkManager) DeleteService(*id.ID, message.Service, message.Processor) {}
 
 /////////////////////////////////////////////////////////////////////////////////////
@@ -74,159 +77,159 @@ func (*testNetworkManager) DeleteService(*id.ID, message.Service, message.Proces
 /////////////////////////////////////////////////////////////////////////////////////
 
 func (tnm *testNetworkManager) Follow(report cmix.ClientErrorReport) (stoppable.Stoppable, error) {
-	//TODO implement me
+	// TODO implement me
 	panic("implement me")
 }
 
 func (tnm *testNetworkManager) SendWithAssembler(recipient *id.ID,
 	assembler cmix.MessageAssembler, cmixParams cmix.CMIXParams) (rounds.Round,
 	ephemeral.Id, error) {
-	//TODO implement me
+	// TODO implement me
 	panic("implement me")
 }
 
 func (tnm *testNetworkManager) Send(recipient *id.ID, fingerprint format.Fingerprint, service message.Service, payload, mac []byte, cmixParams cmix.CMIXParams) (rounds.Round, ephemeral.Id, error) {
-	//TODO implement me
+	// TODO implement me
 	panic("implement me")
 }
 
 func (tnm *testNetworkManager) AddIdentity(id *id.ID, validUntil time.Time, persistent bool) {
-	//TODO implement me
+	// TODO implement me
 	panic("implement me")
 }
 
 func (tnm *testNetworkManager) AddIdentityWithHistory(id *id.ID, validUntil, beginning time.Time, persistent bool) {
-	//TODO implement me
+	// TODO implement me
 	panic("implement me")
 }
 
 func (tnm *testNetworkManager) RemoveIdentity(id *id.ID) {
-	//TODO implement me
+	// TODO implement me
 	panic("implement me")
 }
 
 func (tnm *testNetworkManager) GetIdentity(get *id.ID) (identity.TrackedID, error) {
-	//TODO implement me
+	// TODO implement me
 	panic("implement me")
 }
 
 func (tnm *testNetworkManager) AddFingerprint(identity *id.ID, fingerprint format.Fingerprint, mp message.Processor) error {
-	//TODO implement me
+	// TODO implement me
 	panic("implement me")
 }
 
 func (tnm *testNetworkManager) DeleteFingerprint(identity *id.ID, fingerprint format.Fingerprint) {
-	//TODO implement me
+	// TODO implement me
 	panic("implement me")
 }
 
 func (tnm *testNetworkManager) DeleteClientFingerprints(identity *id.ID) {
-	//TODO implement me
+	// TODO implement me
 	panic("implement me")
 }
 
 func (tnm *testNetworkManager) DeleteClientService(clientID *id.ID) {
-	//TODO implement me
+	// TODO implement me
 	panic("implement me")
 }
 
 func (tnm *testNetworkManager) TrackServices(tracker message.ServicesTracker) {
-	//TODO implement me
+	// TODO implement me
 	panic("implement me")
 }
 
 func (tnm *testNetworkManager) CheckInProgressMessages() {
-	//TODO implement me
+	// TODO implement me
 	panic("implement me")
 }
 
 func (tnm *testNetworkManager) IsHealthy() bool {
-	//TODO implement me
+	// TODO implement me
 	panic("implement me")
 }
 
 func (tnm *testNetworkManager) WasHealthy() bool {
-	//TODO implement me
+	// TODO implement me
 	panic("implement me")
 }
 
 func (tnm *testNetworkManager) AddHealthCallback(f func(bool)) uint64 {
-	//TODO implement me
+	// TODO implement me
 	panic("implement me")
 }
 
 func (tnm *testNetworkManager) RemoveHealthCallback(u uint64) {
-	//TODO implement me
+	// TODO implement me
 	panic("implement me")
 }
 
 func (tnm *testNetworkManager) HasNode(nid *id.ID) bool {
-	//TODO implement me
+	// TODO implement me
 	panic("implement me")
 }
 
 func (tnm *testNetworkManager) NumRegisteredNodes() int {
-	//TODO implement me
+	// TODO implement me
 	panic("implement me")
 }
 
 func (tnm *testNetworkManager) TriggerNodeRegistration(nid *id.ID) {
-	//TODO implement me
+	// TODO implement me
 	panic("implement me")
 }
 
 func (tnm *testNetworkManager) GetRoundResults(timeout time.Duration, roundCallback cmix.RoundEventCallback, roundList ...id.Round) {
-	//TODO implement me
+	// TODO implement me
 	panic("implement me")
 }
 
 func (tnm *testNetworkManager) LookupHistoricalRound(rid id.Round, callback rounds.RoundResultCallback) error {
-	//TODO implement me
+	// TODO implement me
 	panic("implement me")
 }
 
 func (tnm *testNetworkManager) SendToAny(sendFunc func(host *connect.Host) (interface{}, error), stop *stoppable.Single) (interface{}, error) {
-	//TODO implement me
+	// TODO implement me
 	panic("implement me")
 }
 
 func (tnm *testNetworkManager) SendToPreferred(targets []*id.ID, sendFunc gateway.SendToPreferredFunc, stop *stoppable.Single, timeout time.Duration) (interface{}, error) {
-	//TODO implement me
+	// TODO implement me
 	panic("implement me")
 }
 
 func (tnm *testNetworkManager) SetGatewayFilter(f gateway.Filter) {
-	//TODO implement me
+	// TODO implement me
 	panic("implement me")
 }
 
 func (tnm *testNetworkManager) GetHostParams() connect.HostParams {
-	//TODO implement me
+	// TODO implement me
 	panic("implement me")
 }
 
 func (tnm *testNetworkManager) GetAddressSpace() uint8 {
-	//TODO implement me
+	// TODO implement me
 	panic("implement me")
 }
 
 func (tnm *testNetworkManager) RegisterAddressSpaceNotification(tag string) (chan uint8, error) {
-	//TODO implement me
+	// TODO implement me
 	panic("implement me")
 }
 
 func (tnm *testNetworkManager) UnregisterAddressSpaceNotification(tag string) {
-	//TODO implement me
+	// TODO implement me
 	panic("implement me")
 }
 
 func (tnm *testNetworkManager) GetInstance() *network.Instance {
-	//TODO implement me
+	// TODO implement me
 	panic("implement me")
 }
 
 func (tnm *testNetworkManager) GetVerboseRounds() string {
-	//TODO implement me
+	// TODO implement me
 	panic("implement me")
 }
 
diff --git a/ud/networkManager_test.go b/ud/networkManager_test.go
index e58b3cf1fe3ef539e4c19bcb8ca2f95e24a15901..9cb6866c512b86b33dd9b9b4b8af0a1172d87389 100644
--- a/ud/networkManager_test.go
+++ b/ud/networkManager_test.go
@@ -115,6 +115,8 @@ func (tnm *testNetworkManager) AddService(clientID *id.ID,
 	return
 }
 
+func (tnm *testNetworkManager) IncreaseParallelNodeRegistration(int) func() (stoppable.Stoppable, error) {return nil}
+
 func (tnm *testNetworkManager) CheckInProgressMessages() {
 	return
 }
diff --git a/xxdk/cmix.go b/xxdk/cmix.go
index a2b8b8b9ad3c6e7cc77c6eb325fabba17084cff0..9ccf239dbaf6da0d00cef0bf7638090821a3ec2b 100644
--- a/xxdk/cmix.go
+++ b/xxdk/cmix.go
@@ -484,6 +484,14 @@ func (c *Cmix) GetNodeRegistrationStatus() (int, int, error) {
 	return numRegistered, len(nodes) - numStale, nil
 }
 
+// IncreaseParallelNodeRegistration increases the number of parallel node
+// registrations by num
+func (c *Cmix) IncreaseParallelNodeRegistration(num int) error {
+	jww.INFO.Printf("IncreaseParallelNodeRegistration(%d)", num)
+	svc := c.network.IncreaseParallelNodeRegistration(num)
+	return c.followerServices.add(svc)
+}
+
 // GetPreferredBins returns the geographic bin or bins that the provided two
 // character country code is a part of.
 func (c *Cmix) GetPreferredBins(countryCode string) ([]string, error) {
diff --git a/xxdk/utilsInterfaces_test.go b/xxdk/utilsInterfaces_test.go
index a6be0ca8d7143ed748efe04058930a47392aa08c..da4afd17210ebad04a2908f783375af35a513331 100644
--- a/xxdk/utilsInterfaces_test.go
+++ b/xxdk/utilsInterfaces_test.go
@@ -168,6 +168,10 @@ func (t *testNetworkManagerGeneric) RemoveIdentity(id *id.ID) {}
 func (t *testNetworkManagerGeneric) AddService(clientID *id.ID,
 	newService message.Service, response message.Processor) {
 }
+func (t *testNetworkManagerGeneric) IncreaseParallelNodeRegistration(int) func() (stoppable.Stoppable, error) {
+	return nil
+}
+
 func (t *testNetworkManagerGeneric) DeleteService(clientID *id.ID,
 	toDelete message.Service, processor message.Processor) {
 }