diff --git a/bin/account-manager-client.pl b/bin/account-manager-client.pl
index 483e8d06174c254899c65e1478efb6647ac1dcd8..744667ce0a860bd8e2c1f2114a59225d1bb430b6 100755
--- a/bin/account-manager-client.pl
+++ b/bin/account-manager-client.pl
@@ -8,7 +8,7 @@ use utf8;
 use lib "/opt/testidp/IdPAccountManager/lib", ;
 use lib "/opt/testidp/IdPAccountManager/conf";
 
-use Getopt::Long;
+use Getopt::Long qw(:config auto_help);
 use POSIX;
 
 use IdPAccountManager::TestAccount;
@@ -17,16 +17,12 @@ use IdPAccountManager::ServiceProvider;
 use IdPAccountManager::AuthenticationToken;
 
 my %options;
-unless (&GetOptions(\%options, 'help', 'add_test_account', 'account_profile=s', 'sp_entityid=s', 'list_test_accounts', 'parse_federation_metadata',
+unless (&GetOptions(\%options, 'add_test_account', 'account_profile=s', 'sp_entityid=s', 'list_test_accounts', 'parse_federation_metadata',
                     'list_service_providers','list_authentication_tokens', 'get_authentication_token', 'add_authentication_token','email_address=s',
                     'token=s','send_notice','filter_expired','delete','add_service_provider','contacts=s','displayname=s')) {
     die "Unknown options.";
 }
 
-if ($options{'help'}) {
-    printf "$0 --add_test_account --account_profile=<profile_id> --sp_entityid=<entityid>\n";
-}
-
 if ($options{'add_test_account'}) {
     
     unless ($options{'account_profile'}) {
@@ -217,16 +213,27 @@ if ($options{'add_test_account'}) {
         die "Missing sp_entityid option";
     }
     
-    my $authentication_token = new IdPAccountManager::AuthenticationToken();
+    my $authentication_token = new IdPAccountManager::AuthenticationToken('email_address' => $options{'email_address'},
+                                                                          'sp_entityid' => $options{'sp_entityid'});
     unless (defined $authentication_token) {
          IdPAccountManager::Tools::do_log('error',"Failed to create token object");
          exit -1;
     }
-    unless ($authentication_token->set('email_address' => $options{'email_address'},
-                                       'sp_entityid' => $options{'sp_entityid'})) {
-        IdPAccountManager::Tools::do_log('error',"Failed to set token value");
-        exit -1;
-    }    
+
+    ## First remove token if on exist for this email+SP
+    if ($authentication_token->load()) {
+        unless ($authentication_token->delete()) {
+            IdPAccountManager::Tools::do_log('error',"Failed to delete token");
+            exit -1;
+        }
+        
+        $authentication_token = new IdPAccountManager::AuthenticationToken('email_address' => $options{'email_address'},
+                                                                          'sp_entityid' => $options{'sp_entityid'});
+        unless (defined $authentication_token) {
+            IdPAccountManager::Tools::do_log('error',"Failed to create token object");
+            exit -1;
+        }
+    }
     
     unless ($authentication_token->save()) {
         IdPAccountManager::Tools::do_log('error',"Failed to create token");
diff --git a/bin/account-manager-web.pl b/bin/account-manager-web.pl
index 1fe3951eeb8159ceaab52ccc80666c52b5758d9d..546e99a349fd70c09ffdaf796d224ef73724e0cb 100755
--- a/bin/account-manager-web.pl
+++ b/bin/account-manager-web.pl
@@ -375,18 +375,29 @@ sub req_generate_token {
 	return undef;        
     }
     
-    my $authentication_token = new IdPAccountManager::AuthenticationToken();
+    my $authentication_token = new IdPAccountManager::AuthenticationToken('email_address' => $self->{'param_in'}{'email_address'},
+                                                                          'sp_entityid' => $self->{'param_in'}{'sp_entityid'});
     unless (defined $authentication_token) {
  	push @{$self->{'param_out'}{'errors'}}, "internal";
 	&IdPAccountManager::Tools::do_log('error', "Failed to create authentication token");
 	return undef;
     }
     
-    unless ($authentication_token->set('email_address' => $self->{'param_in'}{'email_address'},
-                                       'sp_entityid' => $self->{'param_in'}{'sp_entityid'})) {
- 	push @{$self->{'param_out'}{'errors'}}, "internal";
-	&IdPAccountManager::Tools::do_log('error', "Failed to update authentication token");
-	return undef;
+    ## First remove token if on exist for this email+SP
+    if ($authentication_token->load()) {
+        unless ($authentication_token->delete()) {
+            push @{$self->{'param_out'}{'errors'}}, "internal";
+            &IdPAccountManager::Tools::do_log('error', "Failed to delete previous authentication token with ID %s", $authentication_token->get('id'));
+            return undef;
+        }
+        
+        $authentication_token = new IdPAccountManager::AuthenticationToken('email_address' => $self->{'param_in'}{'email_address'},
+                                                                          'sp_entityid' => $self->{'param_in'}{'sp_entityid'});
+        unless (defined $authentication_token) {
+            push @{$self->{'param_out'}{'errors'}}, "internal";
+            &IdPAccountManager::Tools::do_log('error', "Failed to create authentication token");
+            return undef;
+        }
     }    
     
     unless ($authentication_token->save()) {
diff --git a/conf/create-manager-db.sql b/conf/create-manager-db.sql
index a93c0a884640b7f332b57e2a9d011c64117769c9..0618719159db36978b6ed005221f6a1e8fb5ad27 100644
--- a/conf/create-manager-db.sql
+++ b/conf/create-manager-db.sql
@@ -14,7 +14,8 @@ CREATE TABLE `authenticationtokens` (
   `creation_date` int(11) DEFAULT NULL,
   PRIMARY KEY (`id`),
   UNIQUE KEY `token_2` (`token`),
-  KEY `token` (`token`)
+  KEY `token` (`token`),
+  CONSTRAINT token_email_entity UNIQUE (email_address(50),sp_entityid(50))
 ) ENGINE=MyISAM  DEFAULT CHARSET=utf8;
 
 CREATE TABLE `serviceproviders` (