diff --git a/manifests/unit.pp b/manifests/unit.pp
index a4560d4671daf01f5a49933a78b73cc8ed43fe65..674df7ad03722302424ef9618fd567820a947959 100644
--- a/manifests/unit.pp
+++ b/manifests/unit.pp
@@ -35,11 +35,6 @@ define systemd::unit(
 	# support multi-value options, e.g. "ExecStart" in a service config,
 	# or "ListenStream" in a socket config.
 	#
-	# If the option name starts with a minus sign ("-"), an extra line
-	# setting that option to the empty string is prepended, in order to
-	# reset that option to the empty list, as systemd would otherwise
-	# just append the new value(s) to the existing list.
-	#
 	$options=undef,
 
 	# String to put in the unit file.  This is equivalent to the
diff --git a/templates/unitfile.erb b/templates/unitfile.erb
index c3b32213d39219a383caa156e0e112d59a80a0b1..5f704fb32093fe6c322d85f42dfe4fd975b475c9 100644
--- a/templates/unitfile.erb
+++ b/templates/unitfile.erb
@@ -13,9 +13,17 @@
 [<%= section_name %>]
 <%    section_options.sort.each do |optname,value| -%>
 <%       if optname =~ /^-(.*)/
-            optname = $1
+            if @systemd_resource_type == 'Unit_options'
+               optname = $1
 -%>
 <%= optname %>=
+<%          elsif @systemd_resource_type == 'Unit'
+               raise(Puppet::ParseError, "Bad option name, ``#{optname}''")
+            else
+               raise(Puppet::ParseError,
+                     'Internal error: $systemd_resource_type bad value')
+-%>
+<%          end -%>
 <%       end -%>
 <%       [value].flatten.each do |v| -%>
 <%= optname %>=<%= v %>