diff --git a/network/dataStructures/ndf.go b/network/dataStructures/ndf.go
index a0ef1f6c846568ff99b5f9a5cb16a4cc6acdc6ad..c6490bea831e64f05e71cff42414392ad88480c4 100644
--- a/network/dataStructures/ndf.go
+++ b/network/dataStructures/ndf.go
@@ -40,7 +40,7 @@ func NewNdf(definition *ndf.NetworkDefinition) (*Ndf, error) {
 }
 
 //Updates to a new NDF if the passed NDF is valid
-func (file *Ndf) Update(m *pb.NDF, e2eGroup *Group, cmixGroup *Group) error {
+func (file *Ndf) Update(m *pb.NDF) error {
 
 	//build the ndf object
 	decoded, _, err := ndf.DecodeNDF(string(m.Ndf))
diff --git a/network/dataStructures/ndf_test.go b/network/dataStructures/ndf_test.go
index d420c9d8cd9f0e4a9834f0e1d3753142c0b38930..99940fd74be02bae662284f99f9b430331d05c73 100644
--- a/network/dataStructures/ndf_test.go
+++ b/network/dataStructures/ndf_test.go
@@ -18,7 +18,7 @@ func setup() *Ndf {
 	}
 	ndf := &Ndf{}
 
-	_ = ndf.Update(msg, nil, nil)
+	_ = ndf.Update(msg)
 	return ndf
 }
 
@@ -39,12 +39,12 @@ func TestNdf_Update(t *testing.T) {
 	}
 	ndf := Ndf{}
 
-	err := ndf.Update(badMsg, nil, nil)
+	err := ndf.Update(badMsg)
 	if err == nil {
 		t.Error("Should have returned error when unable to decode ndf")
 	}
 
-	err = ndf.Update(msg, nil, nil)
+	err = ndf.Update(msg)
 	if err != nil {
 		t.Errorf("Failed to update ndf: %+v", err)
 	}
diff --git a/network/instance.go b/network/instance.go
index 9fae1e6dc07569fa23350585c052f735a31540ae..f6da1396ac8732f412be0b4ece0af9395ab7d8d7 100644
--- a/network/instance.go
+++ b/network/instance.go
@@ -78,6 +78,26 @@ func NewInstance(c *connect.ProtoComms, partial, full *ndf.NetworkDefinition) (*
 	}, nil
 }
 
+// UpdateGroup updates the groups of the network instance given an ndf
+func (i *Instance) UpdateGroup(m *pb.NDF) error {
+	decoded, _, err := ndf.DecodeNDF(string(m.Ndf))
+	if err != nil {
+		return errors.WithMessage(err, "Could not decode the NDF")
+	}
+
+	err = i.cmixGroup.Update(decoded.CMIX.String())
+	if err != nil {
+		return errors.WithMessage(err, "Could not update cmix group")
+	}
+
+	err = i.e2eGroup.Update(decoded.E2E.String())
+	if err != nil {
+		return errors.WithMessage(err, "Could not update e2e group")
+	}
+
+	return nil
+}
+
 //update the partial ndf
 func (i *Instance) UpdatePartialNdf(m *pb.NDF) error {
 	perm, success := i.comm.GetHost(id.PERMISSIONING)
@@ -87,7 +107,7 @@ func (i *Instance) UpdatePartialNdf(m *pb.NDF) error {
 			"for NDF partial verification")
 	}
 
-	return i.partial.update(m, perm.GetPubKey(), i.e2eGroup, i.cmixGroup)
+	return i.partial.update(m, perm.GetPubKey())
 }
 
 //update the full ndf
@@ -99,7 +119,7 @@ func (i *Instance) UpdateFullNdf(m *pb.NDF) error {
 			"for full NDF verification")
 	}
 
-	return i.full.update(m, perm.GetPubKey(), i.e2eGroup, i.cmixGroup)
+	return i.full.update(m, perm.GetPubKey())
 }
 
 // Return the partial ndf from this instance
diff --git a/network/securedNdf.go b/network/securedNdf.go
index 5e43728a6aab705bf63b5c8dde9d07419f2cb7b7..34cc6a4b48aedfac7a46aef0c5bc55b8922d9e14 100644
--- a/network/securedNdf.go
+++ b/network/securedNdf.go
@@ -35,13 +35,13 @@ func NewSecuredNdf(definition *ndf.NetworkDefinition) (*SecuredNdf, error) {
 }
 
 // unexported NDF update code
-func (sndf *SecuredNdf) update(m *pb.NDF, key *rsa.PublicKey, e2eGroup *ds.Group, cmixGroup *ds.Group) error {
+func (sndf *SecuredNdf) update(m *pb.NDF, key *rsa.PublicKey) error {
 	err := signature.Verify(m, key)
 	if err != nil {
 		return errors.WithMessage(err, "Could not validate NDF")
 	}
 
-	return sndf.f.Update(m, e2eGroup, cmixGroup)
+	return sndf.f.Update(m)
 }
 
 // Get the primitives object for an ndf
diff --git a/network/securedNdf_test.go b/network/securedNdf_test.go
index ac30c6af3f8fedefa33a59190fb84b90fe2b5911..e03e7e70ad54270fcc25000a81c5d0f4a969e6bd 100644
--- a/network/securedNdf_test.go
+++ b/network/securedNdf_test.go
@@ -23,7 +23,7 @@ func setup() *ds.Ndf {
 	}
 	ndf := &ds.Ndf{}
 
-	_ = ndf.Update(msg, nil, nil)
+	_ = ndf.Update(msg)
 	return ndf
 }
 
@@ -71,13 +71,13 @@ func TestSecuredNdf_update(t *testing.T) {
 	if err != nil {
 		t.Errorf("Failed to secure ndf: %+v", err)
 	}
-	err = sndf.update(&f, privKey.GetPublic(), nil, nil)
+	err = sndf.update(&f, privKey.GetPublic())
 
 	if err != nil {
 		t.Errorf("Could not update ndf: %s", err)
 	}
 
-	err = sndf.update(&f, badPub, nil, nil)
+	err = sndf.update(&f, badPub)
 	if err == nil {
 		t.Errorf("should have received bad key error")
 	}