diff --git a/bin/Makefile.am b/bin/Makefile.am
index a415ddad63e94ebd457f295a3bfe7e2f1902c1c9..80587262731c1dbb09698695edb27d1405059552 100644
--- a/bin/Makefile.am
+++ b/bin/Makefile.am
@@ -1,30 +1,5 @@
-bin_SCRIPTS = access-check-manager.pl update-metadata
+appbindir = $(pkgdatadir)/bin
 
-www_SCRIPTS = access-check-manager.cgi
+appbin_SCRIPTS = app access-check-manager.pl update-metadata
 
-CLEANFILES = $(bin_SCRIPTS) $(www_SCRIPTS)
-
-EXTRA_DIST = access-check-manager.pl.in \
-	     access-check-manager.cgi.in \
-	     update-metadata.in
-
-access-check-manager.pl: Makefile access-check-manager.pl.in
-	sed \
-		-e 's|[@]modulesdir[@]|$(modulesdir)|' \
-		-e 's|[@]confdir[@]|$(confdir)|' \
-		< $(srcdir)/$@.in > $@
-	chmod +x $@
-
-update-metadata: Makefile update-metadata.in
-	sed \
-		-e 's|[@]modulesdir[@]|$(modulesdir)|' \
-		-e 's|[@]confdir[@]|$(confdir)|' \
-		< $(srcdir)/$@.in > $@
-	chmod +x $@
-
-access-check-manager.cgi: Makefile access-check-manager.cgi.in
-	sed \
-		-e 's|[@]modulesdir[@]|$(modulesdir)|' \
-		-e 's|[@]confdir[@]|$(confdir)|' \
-		< $(srcdir)/$@.in > $@
-	chmod +x $@
+EXTRA_DIST = $(appbin_SCRIPTS)
diff --git a/bin/access-check-manager.cgi.in b/bin/access-check-manager.cgi.in
deleted file mode 100755
index bac9ef59d066566ced30526aa50e58eb749c5e17..0000000000000000000000000000000000000000
--- a/bin/access-check-manager.cgi.in
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/usr/bin/perl -T
-
-use strict;
-use warnings;
-use utf8;
-use lib qw(@modulesdir@);
-
-use Config::Tiny;
-use File::Basename;
-
-use AccountManager::App;
-
-my $configuration_file =
-    $ENV{ACCOUNTMANAGER_CONFIG} || '@confdir@/manager.conf';
-my $configuration = Config::Tiny->read($configuration_file, 'utf8');
-if (!$configuration) {
-    die Config::Tiny->errstr() . "\n";
-}
-
-my $configuration_directory = dirname($configuration_file);
-
-my $app = AccountManager::App->new(
-    configuration => $configuration,
-    custom_l10n   => sprintf("%s/l10n", $configuration_directory)
-);
-$app->run();
-
-__END__
-
-=head1 NAME
-
-account-manager-web.pl - Web interface for the Test IdP Account Manager
diff --git a/bin/access-check-manager.pl.in b/bin/access-check-manager.pl
similarity index 98%
rename from bin/access-check-manager.pl.in
rename to bin/access-check-manager.pl
index 35948ee990b9576866612a906eee2036ce830ecb..90c51582b6093c7efa1442cd45b86f87114f30ac 100755
--- a/bin/access-check-manager.pl.in
+++ b/bin/access-check-manager.pl
@@ -3,14 +3,15 @@
 use strict;
 use warnings;
 use utf8;
-use lib qw(@modulesdir@);
+
+use Mojo::File qw(curfile);
+use lib curfile()->dirname()->sibling('lib')->to_string;
 
 use Config::Tiny;
 use Data::Dumper;
 use DateTime;
 use English qw(-no_match_vars);
 use Getopt::Long qw(:config auto_help);
-use Log::Any::Adapter;
 use Pod::Usage;
 
 use AccountManager::Account;
@@ -43,8 +44,7 @@ pod2usage(
     -verbose => 0
 ) unless $action;
 
-my $configuration_file =
-    $options{configuration} || '@confdir@/manager.conf';
+my $configuration_file = $ENV{MOJO_CONFIG} || 'conf/manager.conf';
 my $configuration = Config::Tiny->read($configuration_file);
 if (!$configuration) {
     die Config::Tiny->errstr() . "\n";
diff --git a/bin/app b/bin/app
new file mode 100755
index 0000000000000000000000000000000000000000..2e5da3f2861bb8438ed5124a95a07e5a1b7ae1c4
--- /dev/null
+++ b/bin/app
@@ -0,0 +1,14 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use Mojo::File qw(curfile);
+use lib curfile()->dirname()->sibling('lib')->to_string;
+
+use AccountManager::App;
+
+my $app = AccountManager::App->new(
+    moniker => 'AccessCheck',
+);
+$app->start();
diff --git a/bin/update-metadata.in b/bin/update-metadata
similarity index 96%
rename from bin/update-metadata.in
rename to bin/update-metadata
index 38a97475ed064d4518e886e453b9c0cfa3931ce9..0a7825762bcd6fdfed14b4ca91c23660ef9a49f8 100755
--- a/bin/update-metadata.in
+++ b/bin/update-metadata
@@ -2,7 +2,9 @@
 
 use strict;
 use warnings;
-use lib qw(@modulesdir@);
+
+use Mojo::File qw(curfile);
+use lib curfile()->dirname()->sibling('lib')->to_string;
 
 use Config::Tiny;
 use English qw(-no_match_vars);
@@ -26,8 +28,7 @@ GetOptions(
     -verbose => 0
 );
 
-my $configuration_file =
-    $options{configuration} || '@confdir@/manager.conf';
+my $configuration_file = $ENV{MOJO_CONFIG} || 'conf/manager.conf';
 my $configuration = Config::Tiny->read($configuration_file);
 if (!$configuration) {
     die Config::Tiny->errstr() . "\n";
diff --git a/t/01compile.t b/t/01compile.t
index f3c81960393f60b5159c38db5cd25081f19b59f8..cefa8636659d39b3ace8050372f516cb1864ca50 100755
--- a/t/01compile.t
+++ b/t/01compile.t
@@ -14,7 +14,7 @@ my $test = Test::Compile->new();
 ok(
     $test->pl_file_compiles($_),
     $_
-) foreach qw(bin/access-check-manager.cgi bin/access-check-manager.pl);
+) foreach qw(bin/app bin/update-metadata bin/access-check-manager.pl);
 ok(
     $test->pm_file_compiles($_),
     $_