diff --git a/README b/README
index 34299238b25cd171cf46b57429586cbb51f1263a..32dd402c8d00981727abc62bbb3f8ce21020550e 100644
--- a/README
+++ b/README
@@ -31,6 +31,8 @@ If not, see <http://www.gnu.org/licenses/>.
 - bootloader
   Can be found at https://git.lysator.liu.se/bellman/puppet-bootloader.git.
 
+- systemd
+  Can be found at https://git.lysator.liu.se/bellman/puppet-systemd.git.
 
 
 ===== OFFICIAL SOURCE =====
diff --git a/manifests/screensaver/disable.pp b/manifests/screensaver/disable.pp
index e33c69ac648fddb7167c95540a5169ba97ccd08b..47e933179c419d0c291ff6c8d809b6c4ed6985e4 100644
--- a/manifests/screensaver/disable.pp
+++ b/manifests/screensaver/disable.pp
@@ -24,25 +24,21 @@ class console::screensaver::disable
 	    }
 	}
 	'systemd': {
-	    $lines = [
-		'# This file is under Puppet control',
-		'',
-		'[Unit]',
-		'Description=Disable screensaver on the console',
-		'',
-		'[Service]',
-		'Type=oneshot',
-		"ExecStart=/bin/sh -c '${setterm_cmd}'",
-		'',
-		'[Install]',
-		'WantedBy=basic.target',
-	    ]
-	    file {
-		'/etc/systemd/system/screensaver-disable.service':
-		    ensure => file,
-		    content => inline_template('<%=@lines.join("\n")+"\n" %>'),
-		    owner => 'root', group => 'root', mode => '0444',
-		    before => Service['screensaver-disable'];
+	    systemd::unit {
+		'screensaver-disable.service':
+		    options => {
+			'Unit' => {
+			    'Description'=>'Disable screensaver on the console',
+			},
+			'Service' => {
+			    'Type' => 'oneshot',
+			    'ExecStart' => "/bin/sh -c '${setterm_cmd}'",
+			},
+			'Install' => {
+			    'WantedBy' => 'basic.target',
+			},
+		    },
+		    notify => Service['screensaver-disable'];
 	    }
 	    service {
 		'screensaver-disable':
diff --git a/manifests/serial/login.pp b/manifests/serial/login.pp
index 5761d185290b972bcf19d4196a264cdd3e3865b9..64838785e5db2f6006aec93077200228f95f149c 100644
--- a/manifests/serial/login.pp
+++ b/manifests/serial/login.pp
@@ -97,7 +97,6 @@ define console::serial::login::systemd(
 	$termtype,
 )
 {
-    $svcdir = "/etc/systemd/system/serial-getty@${name}.service.d"
     # Systemd cmdline quoting is not *exactly* like shell, but close enough.
     $agetty_cmdline = shellquote(
 	# agetty(8) doc says tty name should be before speeds, but default
@@ -108,23 +107,17 @@ define console::serial::login::systemd(
 	'%I',
 	$termtype
     )
-    $svc_params_cfg = (
-	"[Service]\nExecStart=\nExecStart=-${agetty_cmdline}\n"
-    )
 
-    file {
-	$svcdir:
+    systemd::unit_options {
+	"serial-getty@${name}.service/param":
 	    ensure => $ensure ? {
-		'enabled' => directory, 'disabled' => undef,
+		'enabled' => 'present', 'disabled' => 'absent',
 	    },
-	    owner => 'root', group => 'root', mode => '0755';
-
-	"${svcdir}/param.conf":
-	    ensure => $ensure ? {
-		'enabled' => file, 'disabled' => absent,
+	    options => {
+		'Service' => {
+		    '-ExecStart' => "-${agetty_cmdline}",
+		},
 	    },
-	    content => $svc_params_cfg,
-	    owner => 'root', group => 'root', mode => '0444',
 	    notify => Service["serial-getty@${name}"];
     }