diff --git a/Makefile.am b/Makefile.am
index 6ac5d47004b33d9f87ac4110b2b6344009cb64da..c0058057de0d340cca21d48c43b0cab6aca066b4 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,4 +1,4 @@
-SUBDIRS = bin conf lib public templates
+SUBDIRS = bin conf lib public templates systemd
 
 AM_TESTS_ENVIRONMENT = PERL5LIB='$(srcdir)/lib'; export PERL5LIB;
 TEST_LOG_DRIVER = env AM_TAP_AWK='$(AWK)' $(SHELL) \
diff --git a/configure.ac b/configure.ac
index efb70d0897f9810c6175a4c39efcfc32e0bf8085..fbff029db0900d525ac737c5748b22e39f406a76 100644
--- a/configure.ac
+++ b/configure.ac
@@ -6,7 +6,30 @@ AC_PROG_LN_S
 
 confdir=$sysconfdir/access-check
 
+PKG_PROG_PKG_CONFIG
+AC_ARG_WITH([systemd-unitdir],
+     [AS_HELP_STRING([--with-systemd-unitdir=DIR], [Directory for systemd service file @<:@default=automatic@:>@])],
+     [systemdunitdir=$with_systemd_unitdir],
+     [systemdunitdir=$($PKG_CONFIG --variable=systemdsystemunitdir systemd)]
+)
+AC_ARG_WITH([systemd-user],
+     [AS_HELP_STRING([--with-systemd-user=USER], [User for systemd service @<:@default=root@:>@])],
+     [systemduser=$with_systemd_user],
+     [systemduser="root"]
+)
+AC_ARG_WITH([systemd-group],
+     [AS_HELP_STRING([--with-systemd-group=GROUP], [Group for systemd service @<:@default=root@:>@])],
+     [systemdgroup=$with_systemd_group],
+     [systemdgroup="root"]
+)
+systemdconfdir=$sysconfdir/sysconfig
+AM_CONDITIONAL([HAVE_SYSTEMD], [test "x$systemdunitdir" != "x"])
+
 AC_SUBST(confdir)
+AC_SUBST(systemdunitdir)
+AC_SUBST(systemdconfdir)
+AC_SUBST(systemduser)
+AC_SUBST(systemdgroup)
 
 AC_CONFIG_FILES(
     Makefile
@@ -15,6 +38,7 @@ AC_CONFIG_FILES(
     lib/Makefile
     templates/Makefile
     public/Makefile
+    systemd/Makefile
 )
 
 AC_OUTPUT
diff --git a/lib/AccountManager/App.pm b/lib/AccountManager/App.pm
index 903c262e2d64a97d03f78ce1179c4934f2c5581a..8e5e3ca3febb7392479042a22e03dfad3bbc5b75 100644
--- a/lib/AccountManager/App.pm
+++ b/lib/AccountManager/App.pm
@@ -16,7 +16,7 @@ use constant {
 sub startup {
     my $self = shift;
 
-    $self->plugin('INIConfig', { file => $ENV{MOJO_CONFIG} || 'conf/manager.conf' });
+    $self->plugin('INIConfig', { file => $ENV{ACCESS_CHECK_CONFIG} || 'conf/manager.conf' });
 
     $self->plugin(
         'TemplateToolkit',
diff --git a/systemd/Makefile.am b/systemd/Makefile.am
new file mode 100644
index 0000000000000000000000000000000000000000..9c3fe46f9aab8104d7059e74221f8b37e72b39e3
--- /dev/null
+++ b/systemd/Makefile.am
@@ -0,0 +1,34 @@
+EXTRA_DIST = access-check.sysconfig.in \
+	     access-check.service.in
+
+if HAVE_SYSTEMD
+appbindir = $(pkgdatadir)/bin
+noinst_DATA = access-check.sysconfig
+systemdunit_DATA = access-check.service
+
+CLEANFILES = $(systemdunit_DATA) $(noinst_DATA)
+
+access-check.service: Makefile access-check.service.in
+	sed \
+		-e 's|[@]systemdconfdir[@]|$(systemdconfdir)|' \
+		-e 's|[@]appbindir[@]|$(appbindir)|' \
+		-e 's|[@]systemduser[@]|$(systemduser)|' \
+		-e 's|[@]systemdgroup[@]|$(systemdgroup)|' \
+		< $(srcdir)/$@.in > $@
+
+access-check.sysconfig: Makefile access-check.sysconfig.in
+	sed \
+		-e 's|[@]confdir[@]|$(confdir)|' \
+		< $(srcdir)/$@.in > $@
+
+install-data-local:
+	$(mkinstalldirs) $(DESTDIR)$(systemdconfdir)
+	if [ -f $(DESTDIR)$(systemdconfdir)/access-check ]; then                   \
+	    $(INSTALL_DATA) access-check.sysconfig $(DESTDIR)$(systemdconfdir)/access-check.new; \
+	else                                                                   \
+	    $(INSTALL_DATA) access-check.sysconfig $(DESTDIR)$(systemdconfdir)/access-check;     \
+	fi
+
+uninstall-local:
+	rm -f $(DESTDIR)$(systemdconfdir)/access-check
+endif
diff --git a/systemd/access-check.service.in b/systemd/access-check.service.in
new file mode 100644
index 0000000000000000000000000000000000000000..4e652307a2c8102d5dc88b0ee29c7289196d3214
--- /dev/null
+++ b/systemd/access-check.service.in
@@ -0,0 +1,13 @@
+[Unit]
+Description=access-check account manager
+
+[Service]
+Type=simple
+EnvironmentFile=-@systemdconfdir@/access-check
+User=@systemduser@
+Group=@systemdgroup@
+ExecStart=@appbindir@/app $ACCESS_CHECK_SERVER -m $ACCESS_CHECK_MODE -l $ACCESS_CHECK_URL $ACCESS_CHECK_OPTIONS
+KillMode=process
+
+[Install]
+WantedBy=multi-user.target
diff --git a/systemd/access-check.sysconfig.in b/systemd/access-check.sysconfig.in
new file mode 100644
index 0000000000000000000000000000000000000000..cd44c65210c12d24ddf7fb259c39b67293a57422
--- /dev/null
+++ b/systemd/access-check.sysconfig.in
@@ -0,0 +1,5 @@
+ACCESS_CHECK_MODE=development
+ACCESS_CHECK_SERVER=daemon
+ACCESS_CHECK_URL=http://127.0.0.1:3000
+ACCESS_CHECK_OPTIONS=
+ACCESS_CHECK_CONFIG=@confdir@/manager.conf