diff --git a/bin/update-metadata.in b/bin/update-metadata.in
index 95d818231602a4b1d0ea70b2a1e2daa22b399ab1..840e48680f7a689c0f370c0f13b325efa0b61ebc 100755
--- a/bin/update-metadata.in
+++ b/bin/update-metadata.in
@@ -86,25 +86,35 @@ foreach my $id (split(/, */, $configuration->{groups}->{list})) {
     }
 
     foreach my $entry (@$entities) {
-        # skip duplicates
-        next if $seen{$entry->{entityid}}++;
-
         # skip entities different from SP or IdP
         next if !$entry->{type};
 
-        my $entity = AccountManager::Entity->new(
-            db               => $db,
-            type             => $entry->{type},
-            entityid         => $entry->{entityid},
-            displayname      => $entry->{display_name},
-            information_url  => $entry->{information_url},
-            organization_url => $entry->{organization_url},
-        );
-
-        $entity->contacts(uniq map { $_->{EmailAddress} } @{$entry->{contacts}})
-            if $entry->{contacts};
+        my $entity;
+        if ($seen{$entry->{entityid}}++) {
+            $entity = AccountManager::Entity->new(
+                db               => $db,
+                entityid         => $entry->{entityid},
+            );
+            $entity->load();
+            $entity->federations(
+                $entity->federations(), $id
+            );
+            $entity->update();
+        } else {
+            $entity = AccountManager::Entity->new(
+                db               => $db,
+                type             => $entry->{type},
+                entityid         => $entry->{entityid},
+                displayname      => $entry->{display_name},
+                information_url  => $entry->{information_url},
+                organization_url => $entry->{organization_url},
+            );
+            $entity->contacts(uniq map { $_->{EmailAddress} } @{$entry->{contacts}})
+                if $entry->{contacts};
+            $entity->federations($id);
+            $entity->save();
+        }
 
-        $entity->save();
     }
 }
 
diff --git a/conf/manager.sql b/conf/manager.sql
index b9b5c13c59b2e48c5c3e3af8ce8e57642a421174..61a576d18ea54823b49554b1731dced177dd48ea 100644
--- a/conf/manager.sql
+++ b/conf/manager.sql
@@ -19,8 +19,9 @@ CREATE TABLE entities (
     organization_url varchar(200) DEFAULT NULL,
     displayname varchar(500) DEFAULT NULL,
     contacts varchar(2000) DEFAULT NULL,
+    federations varchar(50) DEFAULT NULL,
     PRIMARY KEY (id),
-    UNIQUE KEY entityid (entityid)
+    KEY entityid (entityid)
 ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;
 
 CREATE TABLE accounts (
diff --git a/lib/AccountManager/Entity.pm b/lib/AccountManager/Entity.pm
index 2b05788249538de2431fa3275540d833f0b004a1..6e219f1310766cb785eec92e8c0d443bc6fde745 100644
--- a/lib/AccountManager/Entity.pm
+++ b/lib/AccountManager/Entity.pm
@@ -19,6 +19,7 @@ __PACKAGE__->meta->setup(
         information_url  => { type => 'varchar', length => 200 },
         organization_url => { type => 'varchar', length => 200 },
         contacts         => { type => 'array' },
+        federations      => { type => 'array' },
     ],
 
     primary_key_columns => [ 'id' ],