diff -ruN cups-1.7.2.orig/Makedefs.in cups-1.7.2/Makedefs.in
--- cups-1.7.2.orig/Makedefs.in	2013-07-17 17:21:18.000000000 +0200
+++ cups-1.7.2/Makedefs.in	2014-04-15 13:24:45.594054459 +0200
@@ -134,6 +134,7 @@
 CXXLIBS		=	@CXXLIBS@
 DBUS_NOTIFIER	=	@DBUS_NOTIFIER@
 DBUS_NOTIFIERLIBS =	@DBUS_NOTIFIERLIBS@
+SYSTEMD_UNITS   =       @SYSTEMD_UNITS@
 DNSSD_BACKEND	=	@DNSSD_BACKEND@
 DSOFLAGS	=	-L../cups @DSOFLAGS@
 DSOLIBS		=	@DSOLIBS@ $(COMMONLIBS)
@@ -141,6 +142,7 @@
 IPPFIND_BIN	=	@IPPFIND_BIN@
 IPPFIND_MAN	=	@IPPFIND_MAN@
 LAUNCHDLIBS	=	@LAUNCHDLIBS@
+SDLIBS		=	@SDLIBS@
 LDFLAGS		=	-L../cgi-bin -L../cups -L../filter -L../ppdc \
 			-L../scheduler @LDARCHFLAGS@ \
 			@LDFLAGS@ @RELROFLAGS@ @PIEFLAGS@ $(OPTIM)
@@ -232,6 +234,7 @@
 
 DEFAULT_LAUNCHD_CONF =	@DEFAULT_LAUNCHD_CONF@
 DBUSDIR		=	@DBUSDIR@
+SYSTEMDUNITDIR  =       $(BUILDROOT)@systemdsystemunitdir@
 
 
 #
diff -ruN cups-1.7.2.orig/config-scripts/cups-systemd.m4 cups-1.7.2/config-scripts/cups-systemd.m4
--- cups-1.7.2.orig/config-scripts/cups-systemd.m4	1970-01-01 01:00:00.000000000 +0100
+++ cups-1.7.2/config-scripts/cups-systemd.m4	2014-04-15 13:24:45.592054459 +0200
@@ -0,0 +1,36 @@
+dnl
+dnl "$Id$"
+dnl
+dnl   systemd stuff for CUPS.
+
+dnl Find whether systemd is available
+
+SDLIBS=""
+AC_ARG_WITH([systemdsystemunitdir],
+        AS_HELP_STRING([--with-systemdsystemunitdir=DIR], [Directory for systemd service files]),
+        [], [with_systemdsystemunitdir=$($PKGCONFIG --variable=systemdsystemunitdir systemd)])
+if test "x$with_systemdsystemunitdir" != xno; then
+        AC_MSG_CHECKING(for libsystemd-daemon)
+	AC_SUBST([systemdsystemunitdir], [$with_systemdsystemunitdir])
+        if $PKGCONFIG --exists libsystemd-daemon; then
+		AC_MSG_RESULT(yes)
+        	SDCFLAGS=`$PKGCONFIG --cflags libsystemd-daemon`
+        	SDLIBS=`$PKGCONFIG --libs libsystemd-daemon`
+		AC_DEFINE(HAVE_SYSTEMD)
+	else
+		AC_MSG_RESULT(no)
+	fi
+fi
+
+if test -n "$with_systemdsystemunitdir" -a "x$with_systemdsystemunitdir" != xno ; then
+        SYSTEMD_UNITS="cups.service cups.socket cups.path"
+else
+        SYSTEMD_UNITS=""
+fi
+
+AC_SUBST(SYSTEMD_UNITS)
+AC_SUBST(SDLIBS)
+
+dnl
+dnl "$Id$"
+dnl
diff -ruN cups-1.7.2.orig/config.h.in cups-1.7.2/config.h.in
--- cups-1.7.2.orig/config.h.in	2014-02-27 16:57:59.000000000 +0100
+++ cups-1.7.2/config.h.in	2014-04-15 13:24:45.592054459 +0200
@@ -451,6 +451,13 @@
 
 
 /*
+ * Do we have systemd support?
+ */
+
+#undef HAVE_SYSTEMD
+
+
+/*
  * Various scripting languages...
  */
 
diff -ruN cups-1.7.2.orig/configure.in cups-1.7.2/configure.in
--- cups-1.7.2.orig/configure.in	2013-07-08 23:15:13.000000000 +0200
+++ cups-1.7.2/configure.in	2014-04-15 13:24:45.593054459 +0200
@@ -33,6 +33,7 @@
 sinclude(config-scripts/cups-largefile.m4)
 sinclude(config-scripts/cups-dnssd.m4)
 sinclude(config-scripts/cups-launchd.m4)
+sinclude(config-scripts/cups-systemd.m4)
 sinclude(config-scripts/cups-defaults.m4)
 sinclude(config-scripts/cups-scripting.m4)
 
@@ -67,6 +68,9 @@
 	  conf/snmp.conf
 	  cups-config
 	  data/testprint
+          data/cups.service
+          data/cups.socket
+          data/cups.path
 	  desktop/cups.desktop
 	  doc/help/ref-cups-files-conf.html
 	  doc/help/ref-cupsd-conf.html
diff -ruN cups-1.7.2.orig/cups/usersys.c cups-1.7.2/cups/usersys.c
--- cups-1.7.2.orig/cups/usersys.c	2014-03-05 22:22:12.000000000 +0100
+++ cups-1.7.2/cups/usersys.c	2014-04-15 13:24:45.593054459 +0200
@@ -1050,7 +1050,7 @@
     struct stat	sockinfo;		/* Domain socket information */
 
     if (!stat(CUPS_DEFAULT_DOMAINSOCKET, &sockinfo) &&
-	(sockinfo.st_mode & S_IRWXO) == S_IRWXO)
+	(sockinfo.st_mode & (S_IROTH | S_IWOTH)) == (S_IROTH | S_IWOTH))
       cups_server = CUPS_DEFAULT_DOMAINSOCKET;
     else
 #endif /* CUPS_DEFAULT_DOMAINSOCKET */
diff -ruN cups-1.7.2.orig/data/Makefile cups-1.7.2/data/Makefile
--- cups-1.7.2.orig/data/Makefile	2013-05-29 13:51:34.000000000 +0200
+++ cups-1.7.2/data/Makefile	2014-04-15 13:24:45.594054459 +0200
@@ -100,6 +100,12 @@
 		$(INSTALL_DATA) $$file $(DATADIR)/ppdc; \
 	done
 	$(INSTALL_DIR) -m 755 $(DATADIR)/profiles
+	if test "x$(SYSTEMD_UNITS)" != "x" ; then \
+		$(INSTALL_DIR) -m 755 $(SYSTEMDUNITDIR); \
+		for file in $(SYSTEMD_UNITS); do \
+			$(INSTALL_DATA) $$file $(SYSTEMDUNITDIR); \
+		done; \
+	fi
 
 
 #
@@ -143,6 +149,9 @@
 	-$(RMDIR) $(DATADIR)/data
 	-$(RMDIR) $(DATADIR)/banners
 	-$(RMDIR) $(DATADIR)
+	for file in $(SYSTEMD_UNITS); do \
+		$(RM) $(SYSTEMDUNITDIR)/$$file; \
+	done
 
 
 #
diff -ruN cups-1.7.2.orig/data/cups.path.in cups-1.7.2/data/cups.path.in
--- cups-1.7.2.orig/data/cups.path.in	1970-01-01 01:00:00.000000000 +0100
+++ cups-1.7.2/data/cups.path.in	2014-04-15 13:24:45.593054459 +0200
@@ -0,0 +1,8 @@
+[Unit]
+Description=CUPS Printer Service Spool
+
+[Path]
+PathExistsGlob=@CUPS_REQUESTS@/d*
+
+[Install]
+WantedBy=multi-user.target
diff -ruN cups-1.7.2.orig/data/cups.service.in cups-1.7.2/data/cups.service.in
--- cups-1.7.2.orig/data/cups.service.in	1970-01-01 01:00:00.000000000 +0100
+++ cups-1.7.2/data/cups.service.in	2014-04-15 13:24:45.594054459 +0200
@@ -0,0 +1,9 @@
+[Unit]
+Description=CUPS Printing Service
+
+[Service]
+ExecStart=@sbindir@/cupsd -f
+
+[Install]
+Also=cups.socket cups.path
+WantedBy=printer.target
diff -ruN cups-1.7.2.orig/data/cups.socket.in cups-1.7.2/data/cups.socket.in
--- cups-1.7.2.orig/data/cups.socket.in	1970-01-01 01:00:00.000000000 +0100
+++ cups-1.7.2/data/cups.socket.in	2014-04-15 13:24:45.594054459 +0200
@@ -0,0 +1,10 @@
+[Unit]
+Description=CUPS Printing Service Sockets
+
+[Socket]
+ListenStream=@CUPS_DEFAULT_DOMAINSOCKET@
+ListenStream=631
+BindIPv6Only=ipv6-only
+
+[Install]
+WantedBy=sockets.target
diff -ruN cups-1.7.2.orig/scheduler/Makefile cups-1.7.2/scheduler/Makefile
--- cups-1.7.2.orig/scheduler/Makefile	2013-05-29 13:51:34.000000000 +0200
+++ cups-1.7.2/scheduler/Makefile	2014-04-15 13:24:45.595054459 +0200
@@ -381,7 +381,7 @@
 	$(CC) $(LDFLAGS) -o cupsd $(CUPSDOBJS) -L. -lcupsmime \
 		$(LIBZ) $(SSLLIBS) $(LIBSLP) $(LIBLDAP) $(PAMLIBS) \
 		$(LIBPAPER) $(LIBMALLOC) $(SERVERLIBS) $(DNSSDLIBS) $(LIBS) \
-		$(LIBGSSAPI) $(LIBWRAP)
+		$(LIBGSSAPI) $(LIBWRAP) $(SDLIBS)
 
 cupsd-static:	$(CUPSDOBJS) libcupsmime.a ../cups/$(LIBCUPSSTATIC)
 	echo Linking $@...
@@ -389,7 +389,7 @@
 		$(LIBZ) $(SSLLIBS) $(LIBSLP) $(LIBLDAP) $(PAMLIBS) \
 		../cups/$(LIBCUPSSTATIC) $(COMMONLIBS) $(LIBZ) $(LIBPAPER) \
 		$(LIBMALLOC) $(SERVERLIBS) $(DNSSDLIBS) $(LIBGSSAPI) \
-		$(LIBWRAP)
+		$(LIBWRAP) $(SDLIBS)
 
 tls.o:	tls-darwin.c tls-gnutls.c tls-openssl.c
 
diff -ruN cups-1.7.2.orig/scheduler/client.h cups-1.7.2/scheduler/client.h
--- cups-1.7.2.orig/scheduler/client.h	2013-08-02 00:23:18.000000000 +0200
+++ cups-1.7.2/scheduler/client.h	2014-04-15 13:24:45.594054459 +0200
@@ -79,6 +79,9 @@
   int			fd;		/* File descriptor for this server */
   http_addr_t		address;	/* Bind address of socket */
   http_encryption_t	encryption;	/* To encrypt or not to encrypt... */
+#ifdef HAVE_SYSTEMD
+  int			is_systemd;	/* Is this a systemd socket? */
+#endif /* HAVE_SYSTEMD */
 } cupsd_listener_t;
 
 
diff -ruN cups-1.7.2.orig/scheduler/listen.c cups-1.7.2/scheduler/listen.c
--- cups-1.7.2.orig/scheduler/listen.c	2013-05-29 13:51:34.000000000 +0200
+++ cups-1.7.2/scheduler/listen.c	2014-04-15 13:24:45.594054459 +0200
@@ -401,7 +401,11 @@
        lis;
        lis = (cupsd_listener_t *)cupsArrayNext(Listeners))
   {
-    if (lis->fd != -1)
+    if (lis->fd != -1
+#ifdef HAVE_SYSTEMD
+        && !lis->is_systemd
+#endif /* HAVE_SYSTEMD */
+        )
     {
 #ifdef WIN32
       closesocket(lis->fd);
diff -ruN cups-1.7.2.orig/scheduler/main.c cups-1.7.2/scheduler/main.c
--- cups-1.7.2.orig/scheduler/main.c	2014-03-21 19:18:56.000000000 +0100
+++ cups-1.7.2/scheduler/main.c	2014-04-15 13:24:45.595054459 +0200
@@ -39,6 +39,10 @@
 #  endif /* !LAUNCH_JOBKEY_SERVICEIPC */
 #endif /* HAVE_LAUNCH_H */
 
+#ifdef HAVE_SYSTEMD
+#include <systemd/sd-daemon.h>
+#endif /* HAVE_SYSTEMD */
+
 #if defined(HAVE_MALLOC_H) && defined(HAVE_MALLINFO)
 #  include <malloc.h>
 #endif /* HAVE_MALLOC_H && HAVE_MALLINFO */
@@ -64,6 +68,9 @@
 static void		launchd_checkin(void);
 static void		launchd_checkout(void);
 #endif /* HAVE_LAUNCHD */
+#ifdef HAVE_SYSTEMD
+static int		systemd_checkin(void);
+#endif /* HAVE_SYSTEMD */
 static void		parent_handler(int sig);
 static void		process_children(void);
 static void		sigchld_handler(int sig);
@@ -553,6 +560,14 @@
   }
 #endif /* HAVE_LAUNCHD */
 
+#ifdef HAVE_SYSTEMD
+ /*
+  * If we were started by systemd get the listen sockets file descriptors...
+  */
+  if (systemd_checkin() < 0)
+    exit(EXIT_FAILURE);
+#endif /* HAVE_SYSTEMD */
+
  /*
   * Startup the server...
   */
@@ -741,6 +756,16 @@
 	}
 #endif /* HAVE_LAUNCHD */
 
+#ifdef HAVE_SYSTEMD
+       /*
+	* If we were started by systemd get the listen sockets file
+	* descriptors...
+        */
+
+        if (systemd_checkin() < 0)
+	  exit(EXIT_FAILURE);
+#endif /* HAVE_SYSTEMD */
+
        /*
         * Startup the server...
         */
@@ -1490,6 +1515,102 @@
 }
 #endif /* HAVE_LAUNCHD */
 
+#ifdef HAVE_SYSTEMD
+static int
+systemd_checkin(void)
+{
+  int n, fd;
+
+  n = sd_listen_fds(0);
+  if (n < 0)
+  {
+    cupsdLogMessage(CUPSD_LOG_ERROR,
+		    "systemd_checkin: Failed to acquire sockets "
+		    "from systemd - %s -- skipping systemd activation",
+           strerror(-n));
+    return (1);
+  }
+
+  if (n == 0)
+    return (0);
+
+  for (fd = SD_LISTEN_FDS_START; fd < SD_LISTEN_FDS_START + n; fd ++)
+  {
+    http_addr_t addr;
+    socklen_t addrlen = sizeof (addr);
+    int r;
+    cupsd_listener_t *lis;
+    char s[256];
+
+    r = sd_is_socket(fd, AF_UNSPEC, SOCK_STREAM, 1);
+    if (r < 0) {
+      cupsdLogMessage(CUPSD_LOG_ERROR,
+             "systemd_checkin: Unable to verify socket type - %s",
+             strerror(-r));
+      continue;
+    }
+
+    if (!r) {
+      cupsdLogMessage(CUPSD_LOG_ERROR,
+             "systemd_checkin: Socket not of the right type");
+      continue;
+    }
+
+    if (getsockname(fd, (struct sockaddr*) &addr, &addrlen))
+    {
+      cupsdLogMessage(CUPSD_LOG_ERROR,
+             "systemd_checkin: Unable to get local address - %s",
+             strerror(errno));
+      continue;
+    }
+
+     /*
+    * Try to match the systemd socket address to one of the listeners...
+    */
+
+    for (lis = (cupsd_listener_t *)cupsArrayFirst(Listeners);
+       lis;
+       lis = (cupsd_listener_t *)cupsArrayNext(Listeners))
+      if (httpAddrEqual(&lis->address, &addr))
+      break;
+
+    if (lis)
+    {
+      cupsdLogMessage(CUPSD_LOG_DEBUG,
+                      "systemd_checkin: Matched existing listener %s with fd %d...",
+                      httpAddrString(&(lis->address), s, sizeof(s)), fd);
+    }
+    else
+    {
+      cupsdLogMessage(CUPSD_LOG_DEBUG,
+                      "systemd_checkin: Adding new listener %s with fd %d...",
+                      httpAddrString(&addr, s, sizeof(s)), fd);
+
+      if ((lis = calloc(1, sizeof(cupsd_listener_t))) == NULL)
+      {
+        cupsdLogMessage(CUPSD_LOG_ERROR,
+                        "systemd_checkin: Unable to allocate listener - "
+                        "%s.", strerror(errno));
+	return (-ENOMEM);
+      }
+
+      cupsArrayAdd(Listeners, lis);
+
+      memcpy(&lis->address, &addr, sizeof(lis->address));
+    }
+
+    lis->fd = fd;
+    lis->is_systemd = 1;
+
+#  ifdef HAVE_SSL
+    if (_httpAddrPort(&(lis->address)) == 443)
+      lis->encryption = HTTP_ENCRYPT_ALWAYS;
+#  endif /* HAVE_SSL */
+  }
+
+  return (0);
+}
+#endif /* HAVE_SYSTEMD */
 
 /*
  * 'parent_handler()' - Catch USR1/CHLD signals...
