Fix rebase
diff --git a/client/delegations.go b/client/delegations.go
index 9190aa3..de3e664 100644
--- a/client/delegations.go
+++ b/client/delegations.go
@@ -20,7 +20,11 @@
 	// - filter delegations with paths or path_hash_prefixes matching searched target
 	// - 5.6.7.1 cycles protection
 	// - 5.6.7.2 terminations
-	delegations := targets.NewDelegationsIterator(target, c.db)
+	delegations, err := targets.NewDelegationsIterator(target, c.db)
+	if err != nil {
+		return data.TargetFileMeta{}, err
+	}
+
 	for i := 0; i < c.MaxDelegations; i++ {
 		d, ok := delegations.Next()
 		if !ok {
diff --git a/local_store.go b/local_store.go
index 1ef5147..c019af7 100644
--- a/local_store.go
+++ b/local_store.go
@@ -592,8 +592,9 @@
 		return err
 	}
 
-	innerKeyIdsForRole := f.keyIDsForRole[role]
-
+	// Merge privKeys into f.keyIDsForRole and register signers with
+	// f.signerForKeyID.
+	keyIDsForRole := f.keyIDsForRole[role]
 	for _, key := range privKeys {
 		signer, err := keys.GetSigner(key)
 		if err != nil {
@@ -606,10 +607,10 @@
 			f.signerForKeyID[keyID] = signer
 		}
 
-		innerKeyIdsForRole = append(innerKeyIdsForRole, keyIDs...)
+		keyIDsForRole = append(keyIDsForRole, keyIDs...)
 	}
 
-	f.keyIDsForRole[role] = sets.DeduplicateStrings(innerKeyIdsForRole)
+	f.keyIDsForRole[role] = sets.DeduplicateStrings(keyIDsForRole)
 
 	return nil
 }
diff --git a/local_store_test.go b/local_store_test.go
index bc69f18..8badcfc 100644
--- a/local_store_test.go
+++ b/local_store_test.go
@@ -63,6 +63,7 @@
 
 			assert.Equal(t, []keys.Signer{aSigner1}, store.SignersForKeyIDs(a1KeyIDs))
 			assert.Equal(t, []keys.Signer{aSigner2}, store.SignersForKeyIDs(a2KeyIDs))
+			assert.ElementsMatch(t, []keys.Signer{aSigner1, aSigner2}, store.SignersForKeyIDs(append(a1KeyIDs, a2KeyIDs...)))
 			assert.Equal(t, []keys.Signer{bSigner}, store.SignersForKeyIDs(bKeyIDs))
 		})
 	}
diff --git a/pkg/targets/delegation.go b/pkg/targets/delegation.go
index 92597ca..ccd52ba 100644
--- a/pkg/targets/delegation.go
+++ b/pkg/targets/delegation.go
@@ -24,11 +24,10 @@
 
 // NewDelegationsIterator initialises an iterator with a first step
 // on top level targets.
-func NewDelegationsIterator(target string, topLevelKeysDB *verify.DB) *delegationsIterator {
-	role := topLevelKeysDB.GetRole("targets")
-	keyIDs := []string{}
-	if role != nil {
-		keyIDs = sets.StringSetToSlice(role.KeyIDs)
+func NewDelegationsIterator(target string, topLevelKeysDB *verify.DB) (*delegationsIterator, error) {
+	targetsRole := topLevelKeysDB.GetRole("targets")
+	if targetsRole == nil {
+		return nil, ErrTopLevelTargetsRoleMissing
 	}
 
 	i := &delegationsIterator{
@@ -36,8 +35,9 @@
 		stack: []Delegation{
 			{
 				Delegatee: data.DelegatedRole{
-					Name:   "targets",
-					KeyIDs: keyIDs,
+					Name:      "targets",
+					KeyIDs:    sets.StringSetToSlice(targetsRole.KeyIDs),
+					Threshold: targetsRole.Threshold,
 				},
 				DB: topLevelKeysDB,
 			},
diff --git a/pkg/targets/delegation_test.go b/pkg/targets/delegation_test.go
index 316d8cd..2e0c42b 100644
--- a/pkg/targets/delegation_test.go
+++ b/pkg/targets/delegation_test.go
@@ -14,7 +14,20 @@
 )
 
 func TestDelegationsIterator(t *testing.T) {
-	defaultKeyIDs := []string{"26b878ad73362774b8b69dd4fdeb2cc6a2688e4133ed5ace9e18a06e9d998a6d"}
+	topTargetsPubKey := &data.PublicKey{
+		Type:       data.KeyTypeEd25519,
+		Scheme:     data.KeySchemeEd25519,
+		Algorithms: data.HashAlgorithms,
+		Value:      []byte(`{"public":"aaaaec567e5901ba3976c34f7cd5169704292439bf71e6aa19c64b96706f95ef"}`),
+	}
+	delTargetsPubKey := &data.PublicKey{
+		Type:       data.KeyTypeEd25519,
+		Scheme:     data.KeySchemeEd25519,
+		Algorithms: data.HashAlgorithms,
+		Value:      []byte(`{"public":"bbbbec567e5901ba3976c34f7cd5169704292439bf71e6aa19c64b96706f95ef"}`),
+	}
+
+	defaultKeyIDs := delTargetsPubKey.IDs()
 	var iteratorTests = []struct {
 		testName    string
 		roles       map[string][]data.DelegatedRole
@@ -188,16 +201,15 @@
 
 	for _, tt := range iteratorTests {
 		t.Run(tt.testName, func(t *testing.T) {
-			flattened := []data.DelegatedRole{}
-			for _, roles := range tt.roles {
-				flattened = append(flattened, roles...)
-			}
-			db, err := verify.NewDBFromDelegations(&data.Delegations{
-				Roles: flattened,
+			topLevelDB := verify.NewDB()
+			topLevelDB.AddKey(topTargetsPubKey.IDs()[0], topTargetsPubKey)
+			topLevelDB.AddRole("targets", &data.Role{
+				KeyIDs:    topTargetsPubKey.IDs(),
+				Threshold: 1,
 			})
 
+			d, err := NewDelegationsIterator(tt.file, topLevelDB)
 			assert.NoError(t, err)
-			d := NewDelegationsIterator(tt.file, db)
 
 			var iterationOrder []string
 			for {