diff --git a/lib/Travelynx.pm b/lib/Travelynx.pm
index c5c937d3cc2cb7a26ecab167914c878720a459d1..9bd6ebe484cee0a952259fa2bc6f46d2aa5f0ee2 100755
--- a/lib/Travelynx.pm
+++ b/lib/Travelynx.pm
@@ -169,11 +169,6 @@ sub startup {
 			};
 		}
 	);
-	$self->attr(
-		token_types => sub {
-			return [qw(status history travel import)];
-		}
-	);
 
 	$self->attr(
 		account_public_mask => sub {
@@ -839,27 +834,6 @@ sub startup {
 		}
 	);
 
-	$self->helper(
-		'get_api_token' => sub {
-			my ( $self, $uid ) = @_;
-			$uid //= $self->current_user->{id};
-
-			my $token = {};
-			my $res   = $self->pg->db->select(
-				'tokens',
-				[ 'type', 'token' ],
-				{ user_id => $uid }
-			);
-
-			for my $entry ( $res->hashes->each ) {
-				$token->{ $self->app->token_types->[ $entry->{type} - 1 ] }
-				  = $entry->{token};
-			}
-
-			return $token;
-		}
-	);
-
 	$self->helper(
 		'run_hook' => sub {
 			my ( $self, $uid, $reason, $callback ) = @_;
diff --git a/lib/Travelynx/Controller/Account.pm b/lib/Travelynx/Controller/Account.pm
index 52850f730b9004438979b76f0b37c6a4325e2a87..2d9a1cef9474e7e1d9fcdc9bedc92c865d883a28 100644
--- a/lib/Travelynx/Controller/Account.pm
+++ b/lib/Travelynx/Controller/Account.pm
@@ -388,10 +388,11 @@ sub verify {
 
 sub delete {
 	my ($self) = @_;
+	my $uid = $self->current_user->{id};
 	if ( $self->validation->csrf_protect->has_error('csrf_token') ) {
 		$self->render(
 			'account',
-			api_token => $self->get_api_token,
+			api_token => $self->users->get_api_token( uid => $uid ),
 			invalid   => 'csrf',
 		);
 		return;
@@ -407,15 +408,15 @@ sub delete {
 		{
 			$self->render(
 				'account',
-				api_token => $self->get_api_token,
+				api_token => $self->users->get_api_token( uid => $uid ),
 				invalid   => 'deletion password'
 			);
 			return;
 		}
-		$self->users->flag_deletion( uid => $self->current_user->{id} );
+		$self->users->flag_deletion( uid => $uid );
 	}
 	else {
-		$self->users->unflag_deletion( uid => $self->current_user->{id} );
+		$self->users->unflag_deletion( uid => $uid );
 	}
 	$self->redirect_to('account');
 }
@@ -950,9 +951,11 @@ sub confirm_mail {
 
 sub account {
 	my ($self) = @_;
+	my $uid = $self->current_user->{id};
 
-	$self->render( 'account', api_token => $self->get_api_token );
-	$self->users->mark_seen( uid => $self->current_user->{id} );
+	$self->render( 'account',
+		api_token => $self->users->get_api_token( uid => $uid ) );
+	$self->users->mark_seen( uid => $uid );
 }
 
 sub json_export {
diff --git a/lib/Travelynx/Controller/Api.pm b/lib/Travelynx/Controller/Api.pm
index 856c477252f4b6aef678563ff0973a9d8e78d0f6..6f788b5b95ebfd3301d57c3b08d9a0a2952fc1d6 100755
--- a/lib/Travelynx/Controller/Api.pm
+++ b/lib/Travelynx/Controller/Api.pm
@@ -35,10 +35,11 @@ sub documentation {
 	my ($self) = @_;
 
 	if ( $self->is_user_authenticated ) {
+		my $uid = $self->current_user->{id};
 		$self->render(
 			'api_documentation',
-			uid       => $self->current_user->{id},
-			api_token => $self->get_api_token,
+			uid       => $uid,
+			api_token => $self->users->get_api_token( uid => $uid ),
 		);
 	}
 	else {
@@ -79,7 +80,7 @@ sub get_v1 {
 		return;
 	}
 
-	my $token = $self->get_api_token($uid);
+	my $token = $self->users->get_api_token( uid => $uid );
 	if (   not $api_token
 		or not $token->{$api_action}
 		or $api_token ne $token->{$api_action} )
@@ -145,7 +146,7 @@ sub travel_v1 {
 		return;
 	}
 
-	my $token = $self->get_api_token($uid);
+	my $token = $self->users->get_api_token( uid => $uid );
 	if ( not $token->{'travel'} or $api_token ne $token->{'travel'} ) {
 		$self->render(
 			json => {
@@ -411,7 +412,7 @@ sub import_v1 {
 		return;
 	}
 
-	my $token = $self->get_api_token($uid);
+	my $token = $self->users->get_api_token($uid);
 	if ( not $token->{'import'} or $api_token ne $token->{'import'} ) {
 		$self->render(
 			json => {
diff --git a/lib/Travelynx/Model/Users.pm b/lib/Travelynx/Model/Users.pm
index c36fa6db4992b1dae1697f7a19b408996687f536..0287ca2dff9d574dbab9447d2bbd955cb37601f0 100644
--- a/lib/Travelynx/Model/Users.pm
+++ b/lib/Travelynx/Model/Users.pm
@@ -19,6 +19,8 @@ my @sb_templates = (
 	[ 'bahn.expert/regional', 'https://bahn.expert/regional/{name}#{id}' ],
 );
 
+my @token_types = (qw(status history travel import));
+
 sub new {
 	my ( $class, %opt ) = @_;
 
@@ -86,6 +88,22 @@ sub verify_registration_token {
 	return;
 }
 
+sub get_api_token {
+	my ( $self, %opt ) = @_;
+	my $db  = $opt{db} // $self->{pg}->db;
+	my $uid = $opt{uid};
+
+	my $token = {};
+	my $res = $db->select( 'tokens', [ 'type', 'token' ], { user_id => $uid } );
+
+	for my $entry ( $res->hashes->each ) {
+		$token->{ $token_types[ $entry->{type} - 1 ] }
+		  = $entry->{token};
+	}
+
+	return $token;
+}
+
 sub get_uid_by_name_and_mail {
 	my ( $self, %opt ) = @_;
 	my $db    = $opt{db} // $self->{pg}->db;