diff --git a/lib/AccountManager/WebRequest.pm b/lib/AccountManager/WebRequest.pm
index ec9ee1016f545d0f2d1af4e1a0b6a2355061314a..a1ba26a144150942570599748a3fee1a28a87b4c 100644
--- a/lib/AccountManager/WebRequest.pm
+++ b/lib/AccountManager/WebRequest.pm
@@ -93,7 +93,12 @@ sub run {
                 $self->{logger}->error(
                     "Incorrect parameter format : $parameter"
                 );
-                $self->respond({ errors => [ "format_$parameter" ] });
+                $self->respond(
+                    template => 'index.tt2.html',
+                    data     => {
+                        errors => [ "format_$parameter" ]
+                    }
+                );
             }
         }
 
@@ -105,7 +110,6 @@ sub run {
         # register needed parameters
         $self->{in} = {
             email    => $parameters{email},
-            style    => $parameters{style},
             entityid => $parameters{entityid},
             token    => $parameters{token},
             key      => $parameters{key},
@@ -120,7 +124,12 @@ sub run {
     } else {
         ## unknown action
         $self->{logger}->error( "Unknown action '$action'");
-        $self->respond({ errors => [ "Unknown action '$action'" ] });
+        $self->respond(
+            template => 'index.tt2.html',
+            data     => {
+                errors => [ "Unknown action '$action'" ]
+            }
+        );
     }
 
     return 1;
@@ -128,9 +137,9 @@ sub run {
 
 ## Return HTML content
 sub respond {
-    my ($self, $data) = @_;
-    
-    $data->{app} = {
+    my ($self, %in) = @_;
+
+    $in{data}->{app} = {
         name          => $self->{configuration}->{app}->{name},
         url           => $self->{configuration}->{app}->{url},
         support_email => $self->{configuration}->{app}->{support_email},
@@ -147,13 +156,6 @@ sub respond {
 
     my $template;
 
-    ## nobanner is used to do AJAX to get only pieces of HTML to load in the web client
-    if ($self->{in}->{style} && $self->{in}->{style} eq 'nobanner') {
-        $template = 'index-nobanner.tt2.html';
-    } else {
-        $template = 'index.tt2.html';
-    }
-
     binmode(STDOUT, ":utf8");
 
     print $self->{cgi}->header(
@@ -161,7 +163,7 @@ sub respond {
         -charset => 'utf8'
     );
 
-    unless ($tt2->process($template, $data, \*STDOUT)) {
+    unless ($tt2->process($in{template}, $in{data}, \*STDOUT)) {
         printf "Content-type: text/plain\n\n Error: %s", $tt2->error();
         $self->{logger}->errorf("Web parser error : %s", $tt2->error());
     }
@@ -180,16 +182,24 @@ sub req_select_sp {
     };
     if ($EVAL_ERROR) {
         $self->{logger}->error("Failed to load federation metadata: $EVAL_ERROR");
-        $self->respond({ errors => [ "internal" ] });
+        $self->respond(
+            template => 'index.tt2.html',
+            data     => {
+                errors  => [ "internal" ]
+            }
+        );
     }
 
-    $self->respond({
-        env => {
-            SCRIPT_NAME => $ENV{SCRIPT_NAME}
-        },
-        metadata => $metadata->parse(type => 'sp'),
-        action   => 'select_sp'
-    });
+    $self->respond(
+        template => 'index.tt2.html',
+        data     => {
+            env => {
+                SCRIPT_NAME => $ENV{SCRIPT_NAME}
+            },
+            metadata => $metadata->parse(type => 'sp'),
+            action   => 'select_sp'
+        }
+    );
 }
 
 sub req_select_email {
@@ -197,7 +207,12 @@ sub req_select_email {
 
     unless ($self->{in}->{entityid}) {
         $self->{logger}->error("Missing parameter entityid");
-        $self->respond({ errors => [ "missing_entityid" ] });
+        $self->respond(
+            template => 'index.tt2.html',
+            data     => {
+                errors => [ "missing_entityid" ]
+            }
+        );
     }
 
     # Create a persistent service provider object
@@ -219,7 +234,12 @@ sub req_select_email {
         };
         if ($EVAL_ERROR) {
             $self->{logger}->error("Failed to load federation metadata: $EVAL_ERROR");
-            $self->respond({ errors => [ "internal" ] });
+            $self->respond(
+                template => 'index.tt2.html',
+                data     => {
+                    errors => [ "internal" ]
+                }
+            );
         }
 
         my $sps = $metadata->parse(id => $self->{in}->{entityid});
@@ -227,7 +247,12 @@ sub req_select_email {
             $self->{logger}->errorf(
                 "No such SP '%s' in metadata", $self->{in}->{entityid}
             );
-            $self->respond({ errors => [ "no_such_entity" ] });
+            $self->respond(
+                template => 'index.tt2.html',
+                data     => {
+                    errors => [ "no_such_entity" ]
+                }
+            );
         }
         my $sp = $sps->[0];
 
@@ -239,7 +264,12 @@ sub req_select_email {
         # save in DB
         unless ($provider->save()) {
             $self->{logger}->error("Failed to save service provider object");
-            $self->respond({ errors => [ "internal" ] });
+            $self->respond(
+                template => 'index.tt2.html',
+                data     => {
+                    errors => [ "internal" ]
+                }
+            );
         }
     }
 
@@ -258,10 +288,13 @@ sub req_select_email {
         }
     }
 
-    $self->respond({
-        provider => $provider,
-        action   => 'select_email'
-    });
+    $self->respond(
+        template => 'index-nobanner.tt2.html',
+        data     => {
+            provider => $provider,
+            action   => 'select_email'
+        }
+    );
 }
 
 sub req_complete_challenge {
@@ -269,12 +302,22 @@ sub req_complete_challenge {
 
     unless ($self->{in}->{entityid}) {
         $self->{logger}->error("Missing parameter entityid");
-        $self->respond({ errors => [ "missing_entityid" ] });
+        $self->respond(
+            template => 'index.tt2.html',
+            data     => {
+                errors => [ "missing_entityid" ]
+            }
+        );
     }
 
     unless ($self->{in}->{email}) {
         $self->{logger}->error("Missing parameter email");
-        $self->respond({ errors => [ "missing_email" ] });
+        $self->respond(
+            template => 'index.tt2.html',
+            data     => {
+                errors => [ "missing_email" ]
+            }
+        );
     }
 
     my $provider = AccountManager::Service->new(
@@ -284,7 +327,12 @@ sub req_complete_challenge {
 
     unless ($provider->load(speculative => 1)) {
         $self->{logger}->errorf("No such SP '%s' in database", $self->{in}->{entityid});
-        $self->respond({ errors => [ "no_such_entity" ] });
+        $self->respond(
+            template => 'index.tt2.html',
+            data     => {
+                errors => [ "no_such_entity" ]
+            }
+        );
     }
 
     # override metadata contacts if needed
@@ -310,7 +358,12 @@ sub req_complete_challenge {
             $self->{in}->{entityid},
             $self->{in}->{email}
         );
-        $self->respond({ errors => [ "internal" ] });
+        $self->respond(
+            template => 'index.tt2.html',
+            data     => {
+                errors => [ "internal" ]
+            }
+        );
     }
 
     # delete any previous token for the same email/service couple
@@ -326,7 +379,12 @@ sub req_complete_challenge {
                 "Failed to delete previous authentication token with ID %s",
                 $old_token->id()
             );
-            $self->respond({ errors => [ "internal" ] });
+            $self->respond(
+                template => 'index.tt2.html',
+                data     => {
+                    errors => [ "internal" ]
+                }
+            );
         }
     }
 
@@ -344,7 +402,12 @@ sub req_complete_challenge {
 
     unless ($token->save()) {
         $self->{logger}->error("Failed to save authentication token");
-        $self->respond({ errors => [ "internal" ] });
+        $self->respond(
+            template => 'index.tt2.html',
+            data     => {
+                errors => [ "internal" ]
+            }
+        );
     }
 
     my $sender    = $self->{configuration}->{_}->{notice_from};
@@ -354,7 +417,12 @@ sub req_complete_challenge {
 
     open(my $handle, '|-', "$sendmail -f $sender $recipient") or do {
         $self->{logger}->errorf("Unable to run sendmail executable: %s", $ERRNO);
-        $self->respond({ errors => [ "mail_notification_error" ] });
+        $self->respond(
+            template => 'index.tt2.html',
+            data     => {
+                errors => [ "mail_notification_error" ] 
+            }
+        );
     };
 
     my $tt2 = Template->new({
@@ -379,7 +447,12 @@ sub req_complete_challenge {
 
     unless ($tt2->process($template, $data, $handle)) {
         $self->{logger}->errorf("Mail notification error: %s", $tt2->error());
-        $self->respond({ errors => [ "mail_notification_error" ] });
+        $self->respond(
+            template => 'index.tt2.html',
+            data     => {
+                errors => [ "mail_notification_error" ]
+            }
+        );
     }
 
     close $handle;
@@ -391,11 +464,14 @@ sub req_complete_challenge {
         $token->token(),
     );
 
-    $self->respond({
-        email    => $self->{in}->{email},
-        entityid => $self->{in}->{entityid},
-        action   => 'complete_challenge'
-    });
+    $self->respond(
+        template => 'index-nobanner.tt2.html',
+        data     => {
+            email    => $self->{in}->{email},
+            entityid => $self->{in}->{entityid},
+            action   => 'complete_challenge'
+        }
+    );
 }
 
 sub req_create_accounts {
@@ -403,7 +479,12 @@ sub req_create_accounts {
 
     unless ($self->{in}->{entityid}) {
         $self->{logger}->error("Missing parameter entityid");
-        $self->respond({ errors => [ "missing_entityid" ] });
+        $self->respond(
+            template => 'index.tt2.html',
+            data     => {
+                errors => [ "missing_entityid" ]
+            }
+        );
     }
 
     unless ($self->{in}->{token}) {
@@ -413,7 +494,12 @@ sub req_create_accounts {
 
     unless ($self->{in}->{email}) {
         $self->{logger}->error("Missing parameter email");
-        $self->respond({ errors => [ "missing_email" ] });
+        $self->respond(
+            template => 'index.tt2.html',
+            data     => {
+                errors => [ "missing_email" ]
+            }
+        );
     }
 
     my $token = AccountManager::Token->new(
@@ -427,7 +513,12 @@ sub req_create_accounts {
             $self->{in}->{token},
             $self->{in}->{entityid}
         );
-        $self->respond({ errors => [ "wrong_token" ] });
+        $self->respond(
+            template => 'index.tt2.html',
+            data     => {
+                errors => [ "wrong_token" ]
+            }
+        );
     }
 
     if (! $token->sp_entityid() eq $self->{in}->{entityid}) {
@@ -436,7 +527,12 @@ sub req_create_accounts {
             $self->{in}->{token},
             $self->{in}->{entityid}
         );
-        $self->respond({ errors => [ "wrong_token_for_sp" ] });
+        $self->respond(
+            template => 'index.tt2.html',
+            data     => {
+                errors => [ "wrong_token_for_sp" ]
+            }
+        );
     }
 
     ## delete the token
@@ -469,9 +565,13 @@ sub req_create_accounts {
     );
 
     unless ($download_token->save()) {
-        push @{ $self->{out}->{errors} }, "internal";
         $self->{logger}->error("Failed to save authentication token");
-        $self->respond();
+        $self->respond(
+            template => 'index.tt2.html',
+            data     => {
+                errors => [ "internal" ]
+            }
+        );
     }
 
     my $key = AccountManager::Tools::generate_secret(10);
@@ -499,7 +599,12 @@ sub req_create_accounts {
             "Failed to create test accounts for SP with entityid %s",
             $self->{in}->{entityid}
         );
-        $self->respond({ errors => [ "accounts_creation_failed" ] });
+        $self->respond(
+            template => 'index.tt2.html',
+            data     => {
+                errors => [ "accounts_creation_failed" ]
+            }
+        );
     }
 
     ## Update simpleSAMLphp configuration to enable test accounts
@@ -519,7 +624,12 @@ sub req_create_accounts {
             "Failed to create simpleSAMLphp configuration file: %s",
             $EVAL_ERROR
         );
-        $self->respond({ errors => [ "accounts_creation_failed" ] });
+        $self->respond(
+            template => 'index.tt2.html',
+            data     => {
+                errors => [ "accounts_creation_failed" ]
+            }
+        );
     }
 
     $self->{logger}->infof(
@@ -528,34 +638,49 @@ sub req_create_accounts {
         $self->{in}->{token}
     );
 
-    $self->respond({
-        accounts => \@accounts,
-        entityid => $self->{in}->{entityid},
-        key      => $key,
-        token    => $download_token->token(),
-        action   => 'create_accounts'
-    });
+    $self->respond(
+        template => 'index.tt2.html',
+        data     => {
+            accounts => \@accounts,
+            entityid => $self->{in}->{entityid},
+            key      => $key,
+            token    => $download_token->token(),
+            action   => 'create_accounts'
+        }
+    );
 }
 
 sub req_download_accounts {
     my ($self) = @_;
 
     unless ($self->{in}->{entityid}) {
-        push @{ $self->{out}->{errors} }, "missing_entityid";
         $self->{logger}->error("Missing parameter entityid");
-        $self->respond();
+        $self->respond(
+            template => 'index.tt2.html',
+            data     => {
+                errors => [ "missing_entityid" ]
+            }
+        );
     }
 
     unless ($self->{in}->{token}) {
-        push @{ $self->{out}->{errors} }, "missing_token";
         $self->{logger}->error("Missing parameter token");
-        $self->respond();
+        $self->respond(
+            template => 'index.tt2.html',
+            data     => {
+                errors => [ "missing_token" ]
+            }
+        );
     }
 
     unless ($self->{in}->{key}) {
-        push @{ $self->{out}->{errors} }, "missing_key";
         $self->{logger}->error("Missing parameter key");
-        $self->respond();
+        $self->respond(
+            template => 'index.tt2.html',
+            data     => {
+                errors => [ "missing_key" ]
+            }
+        );
     }
 
     my $token = AccountManager::Token->new(
@@ -564,22 +689,30 @@ sub req_download_accounts {
     );
 
     if (! $token->load(speculative => 1)) {
-        push @{ $self->{out}->{errors} }, "wrong_token";
         $self->{logger}->errorf(
             "Non-existing authentication token %s",
             $self->{in}->{token},
         );
-        $self->respond();
+        $self->respond(
+            template => 'index.tt2.html',
+            data     => {
+                errors => [ "wrong_token" ]
+            }
+        );
     }
 
     if (! $token->sp_entityid() eq $self->{in}->{entityid}) {
-        push @{ $self->{out}->{errors} }, "wrong_token_for_sp";
         $self->{logger}->errorf(
             "Authentication token %s cannot be used for SP %s",
             $self->{in}->{token},
             $self->{in}->{entityid}
         );
-        $self->respond();
+        $self->respond(
+            template => 'index.tt2.html',
+            data     => {
+                errors => [ "wrong_token_for_sp" ]
+            }
+        );
     }
 
     # delete the token
@@ -648,9 +781,12 @@ sub req_download_accounts {
 sub req_home {
     my ($self) = @_;
 
-    $self->respond({
-        action => 'home'
-    });
+    $self->respond(
+        template => 'index.tt2.html',
+        data     => {
+            action => 'home'
+        }
+    );
 }
 
 1;
diff --git a/templates/web/en/select_sp.tt2.html b/templates/web/en/select_sp.tt2.html
index f4a4f90ea4ca1612b86c52717a9926532d974cb6..13496b6d8cca749852d3f92ab54865c708184777 100644
--- a/templates/web/en/select_sp.tt2.html
+++ b/templates/web/en/select_sp.tt2.html
@@ -21,7 +21,7 @@ jQuery(document).ready(function($){
                 form.steps("insert", 1, {
                     title: "Select your email address",
                     contentMode: "async",
-                    contentUrl: "[% app.url %]?action=select_email&style=nobanner&entityid="+
+                    contentUrl: "[% app.url %]?action=select_email&entityid="+
                         encodeURIComponent($('#entityid').val())
                 });
             }
@@ -34,7 +34,7 @@ jQuery(document).ready(function($){
                 form.steps("insert", 2, {
                     title: "Complete email challenge",
                     contentMode: "async",
-                    contentUrl: "[% app.url %]?action=complete_challenge&style=nobanner&entityid="+
+                    contentUrl: "[% app.url %]?action=complete_challenge&entityid="+
                         encodeURIComponent($('#entityid').val())+"&email="+encodeURIComponent($("input:checked[name='email']").val())
                 });
             }
diff --git a/templates/web/fr/select_sp.tt2.html b/templates/web/fr/select_sp.tt2.html
index afb0b3ff4cd324421ea837712434a764722e9c7a..d574f0ca045b610c732d099382e3e06ba6a60f7f 100644
--- a/templates/web/fr/select_sp.tt2.html
+++ b/templates/web/fr/select_sp.tt2.html
@@ -21,7 +21,7 @@ jQuery(document).ready(function($){
                 form.steps("insert", 1, {
                     title: "Select your email address",
                     contentMode: "async",
-                    contentUrl: "[% app.url %]?action=select_email&style=nobanner&entityid="+
+                    contentUrl: "[% app.url %]?action=select_email&entityid="+
                         encodeURIComponent($('#entityid').val())
                 });
             }
@@ -34,7 +34,7 @@ jQuery(document).ready(function($){
                 form.steps("insert", 2, {
                     title: "Complete email challenge",
                     contentMode: "async",
-                    contentUrl: "[% app.url %]?action=complete_challenge&style=nobanner&entityid="+
+                    contentUrl: "[% app.url %]?action=complete_challenge&entityid="+
                         encodeURIComponent($('#entityid').val())+"&email="+encodeURIComponent($("input:checked[name='email']").val())
                 });
             }