diff --git a/conf/manager.conf.in b/conf/manager.conf.in
index 8b8941af0a4db5fe49253648c835b9179c41b137..8575761b6bca243a837e61d83ff10c8511c5fc0a 100644
--- a/conf/manager.conf.in
+++ b/conf/manager.conf.in
@@ -4,7 +4,6 @@ support_email = support@my.fqdn
 [setup]
 # templates directory
 templates_dir = @templatesdir@
-federation_metadata_file = /var/lib/access-check/edugain.xml
 accounts_file = /var/lib/access-check/accounts.php
 
 [logger]
@@ -25,6 +24,9 @@ username = idpadmin
 password = secret
 options  = mysql_enable_utf8
 
+[federations]
+edugain = /var/lib/access-check/edugain.xml
+
 [idp]
 scope = my.fqdn
 entityid = https://my.fqdn/simplesaml/saml2/idp/metadata.php
diff --git a/lib/AccountManager/App.pm b/lib/AccountManager/App.pm
index 24075d79f2e75c782a2f6bf47493b9fbed4068df..0cfd1e915bcea57bd3bdffc2ac7527dc67ad7419 100644
--- a/lib/AccountManager/App.pm
+++ b/lib/AccountManager/App.pm
@@ -33,6 +33,7 @@ my $entity_id_pattern = qr{
 
 my %actions = (
     home               => 'req_home',
+    select_federation  => 'req_select_federation',
     select_sp          => 'req_select_sp',
     select_email       => 'req_select_email',
     complete_challenge => 'req_complete_challenge',
@@ -89,6 +90,18 @@ sub new {
         );
     }
 
+    if (!$self->{configuration}->{federations}) {
+        $self->{logger}->fatal(
+            "No federations defined in configuration, aborting"
+        );
+        $self->respond(
+            template => 'errors.tt2.html',
+            data     => {
+                errors  => [ 'internal' ]
+            }
+        );
+    }
+
     if (!$self->{configuration}->{database}) {
         $self->{logger}->fatal(
             "No database defined in configuration, aborting"
@@ -136,10 +149,11 @@ sub run {
 
         # register needed parameters
         $self->{in} = {
-            email    => $parameters{email},
-            entityid => $parameters{entityid},
-            token    => $parameters{token},
-            key      => $parameters{key},
+            email      => $parameters{email},
+            entityid   => $parameters{entityid},
+            token      => $parameters{token},
+            key        => $parameters{key},
+            federation => $parameters{federation},
         };
     }
 
@@ -198,14 +212,50 @@ sub respond {
     exit 0;
 }
 
+sub req_select_federation {
+    my ($self) = @_;
+
+    my @federations = keys %{$self->{configuration}->{federations}};
+
+    $self->respond(
+        template => 'select_federation.tt2.html',
+        data     => {
+            federations => \@federations
+        }
+    );
+}
+
 sub req_select_sp {
     my ($self) = @_;
 
+    my $federation = $self->{in}->{federation};
+
+    if (!$federation) {
+        $self->{logger}->error("Missing parameter: federation");
+        $self->respond(
+            template => 'errors.tt2.html',
+            data     => {
+                errors  => [ "missing_federation" ]
+            }
+        );
+    }
+
+    my $file = $self->{configuration}->{federations}->{$federation};
+    if (!$file) {
+        $self->{logger}->error("Incorrect parameter: federation");
+        $self->respond(
+            template => 'errors.tt2.html',
+            data     => {
+                errors  => [ "invalid_federation" ]
+            }
+        );
+    }
+
     my $metadata;
 
     eval {
         $metadata = AccountManager::Metadata->new(
-            file => $self->{configuration}->{setup}->{federation_metadata_file}
+            file => $file
         );
     };
     if ($EVAL_ERROR) {
@@ -224,7 +274,8 @@ sub req_select_sp {
             env => {
                 SCRIPT_NAME => $ENV{SCRIPT_NAME}
             },
-            metadata => $metadata->parse(type => 'sp'),
+            metadata   => $metadata->parse(type => 'sp'),
+            federation => $federation,
         }
     );
 }
@@ -232,6 +283,29 @@ sub req_select_sp {
 sub req_select_email {
     my ($self) = @_;
 
+    my $federation = $self->{in}->{federation};
+
+    if (!$federation) {
+        $self->{logger}->error("Missing parameter: federation");
+        $self->respond(
+            template => 'errors.tt2.html',
+            data     => {
+                errors  => [ "missing_federation" ]
+            }
+        );
+    }
+
+    my $file = $self->{configuration}->{federations}->{$federation};
+    if (!$file) {
+        $self->{logger}->error("Incorrect parameter: federation");
+        $self->respond(
+            template => 'errors.tt2.html',
+            data     => {
+                errors  => [ "invalid_federation" ]
+            }
+        );
+    }
+
     if (! $self->{in}->{entityid}) {
         $self->{logger}->error("Missing parameter: entityid");
         $self->respond(
@@ -266,7 +340,7 @@ sub req_select_email {
 
         eval {
             $metadata = AccountManager::Metadata->new(
-                file => $self->{configuration}->{setup}->{federation_metadata_file}
+                file => $file
             );
         };
         if ($EVAL_ERROR) {
diff --git a/lib/AccountManager/L10N/fr.pm b/lib/AccountManager/L10N/fr.pm
index d8bce0f22e313fb646b3fd5551b800d81e433da8..1d73fed698f526c60506e65118a084396e08d7e8 100644
--- a/lib/AccountManager/L10N/fr.pm
+++ b/lib/AccountManager/L10N/fr.pm
@@ -72,6 +72,8 @@ our %Lexicon = (
     "Best Regards" => "Cordialement",
     "Next" => "Suivant",
     "Previous" => "Précédent",
+    "Select your federation" => "Sélectionnez votre fédération",
+    "Select the federation corresponding to the service you want to test:" => "Sélectionner la fédération correspondant au service à tester:",
 );
 
 1;
diff --git a/templates/Makefile.am b/templates/Makefile.am
index 48ea358e650d1a0b0bd82165f14e9d3c78b15516..8ea379d0ca750621dc1c025c6dbc097a78daf754 100644
--- a/templates/Makefile.am
+++ b/templates/Makefile.am
@@ -4,6 +4,7 @@ nobase_templates_DATA = \
 	web/errors.tt2.html \
 	web/home.tt2.html \
 	web/index.tt2.html \
+	web/select_federation.tt2.html \
 	web/select_sp.tt2.html \
 	web/select_email.tt2.html \
 	web/complete_challenge.tt2.html \
diff --git a/templates/web/complete_challenge.tt2.html b/templates/web/complete_challenge.tt2.html
index a8483392c103d3f3a60828f760854113cbdae490..5ed0e323634df45e757ea4c20dde608d6e59b479 100644
--- a/templates/web/complete_challenge.tt2.html
+++ b/templates/web/complete_challenge.tt2.html
@@ -2,6 +2,7 @@
 <div class="wizard clearfix vertical">
     <div class="steps clearfix">
         <ol>
+            <li class="done">[% lh.maketext("Select your federation") %]</li>
             <li class="done">[% lh.maketext("Select your service") %]</li>
             <li class="done">[% lh.maketext("Select your email address") %]</li>
             <li class="current">[% lh.maketext("Complete email challenge") %]</li>
diff --git a/templates/web/home.tt2.html b/templates/web/home.tt2.html
index c4376cb23a487032616edb4318b2b2676176633e..6fff1a9a684607249df72416512c3bdd22e7d7e9 100644
--- a/templates/web/home.tt2.html
+++ b/templates/web/home.tt2.html
@@ -17,6 +17,6 @@
 
 <h2>[% lh.maketext("Get started") %]</h2>
 <p>[% lh.maketext("To start testing your own services, start by selecting one your are administrator for.") %]</p>
-<p class="text-center"><a href="[% app.url %]?action=select_sp" class="button">[% lh.maketext("Get started") %]</a></p>
+<p class="text-center"><a href="[% app.url %]?action=select_federation" class="button">[% lh.maketext("Get started") %]</a></p>
 
 [% END %]
diff --git a/templates/web/select_email.tt2.html b/templates/web/select_email.tt2.html
index fdbd456d75d2e656f4587f6724bda2d13bec1381..9b14a95140d8fc307bbdf3fe3659f4c11a0acc34 100644
--- a/templates/web/select_email.tt2.html
+++ b/templates/web/select_email.tt2.html
@@ -2,6 +2,7 @@
 <div class="wizard clearfix">
     <div class="steps clearfix">
         <ol>
+            <li class="done">[% lh.maketext("Select your federation") %]</li>
             <li class="done">[% lh.maketext("Select your service") %]</li>
             <li class="current">[% lh.maketext("Select your email address") %]</li>
             <li class="disabled">[% lh.maketext("Complete email challenge") %]</li>
diff --git a/templates/web/select_federation.tt2.html b/templates/web/select_federation.tt2.html
new file mode 100644
index 0000000000000000000000000000000000000000..1983f9edf7c53bd7902898f2a15520016b655ff4
--- /dev/null
+++ b/templates/web/select_federation.tt2.html
@@ -0,0 +1,27 @@
+[% WRAPPER index.tt2.html %]
+<div class="wizard clearfix">
+    <div class="steps clearfix">
+        <ol>
+            <li class="current">[% lh.maketext("Select your federation") %]</li>
+            <li class="disabled">[% lh.maketext("Select your service") %]</li>
+            <li class="disabled">[% lh.maketext("Select your email address") %]</li>
+            <li class="disabled">[% lh.maketext("Complete email challenge") %]</li>
+        </ol>
+    </div>
+
+    <div class="content clearfix">
+        <h2>[% lh.maketext("Select your federation") %]</h2>
+
+        <form action="[% env.SCRIPT_NAME %]" method="get">
+            <p>[% lh.maketext("Select the federation corresponding to the service you want to test::") %]</p>
+        [% FOREACH federation IN federations.sort %]
+            <input id="[% federation %]" name="federation" value="[% federation %]" type="radio" class="required"/>
+            <label for="[% federation %]">[% federation %]</label>
+            <br/>
+        [% END %]
+            <button class="button disabled" type="submit" name="action" value="">[% lh.maketext("Previous") %]</button>
+            <button class="button" type="submit" name="action" value="select_sp">[% lh.maketext("Next") %]</button>
+        </form>
+    </div>
+</div>
+[% END %]
diff --git a/templates/web/select_sp.tt2.html b/templates/web/select_sp.tt2.html
index d39a6ef0779f3d153b060df5ab18aae76fd1702f..e47b596fcc2f21381d22fd77c267b9f8fd6a1bc4 100644
--- a/templates/web/select_sp.tt2.html
+++ b/templates/web/select_sp.tt2.html
@@ -2,6 +2,7 @@
 <div class="wizard clearfix">
     <div class="steps clearfix">
         <ol>
+            <li class="done">[% lh.maketext("Select your federation") %]</li>
             <li class="current">[% lh.maketext("Select your service") %]</li>
             <li class="disabled">[% lh.maketext("Select your email address") %]</li>
             <li class="disabled">[% lh.maketext("Complete email challenge") %]</li>
@@ -25,7 +26,8 @@
                 [% END %]
             </select>
             <p>[% lh.maketext("Only Service Providers included in eduGAIN metadata are included in the list.") %]</p>
-            <button type="submit" class="button disabled" name="action" value="">[% lh.maketext("Previous") %]</button>
+            <input type="hidden" name="federation" value="[% federation %]"/>
+            <button type="submit" class="button" name="action" value="select_federation">[% lh.maketext("Previous") %]</button>
             <button type="submit" class="button" name="action" value="select_email">[% lh.maketext("Next") %]</button>
         </form>
     </div>