diff --git a/.systemd.metadata b/.systemd.metadata
index b58f4e8..ddc02ad 100644
--- a/.systemd.metadata
+++ b/.systemd.metadata
@@ -1 +1 @@
-ea1a538bc3d29f7c6f7f0a0aa5c070b9018c5527 SOURCES/systemd-207.tar.xz
+e1a4e213d5d1e3498bca851347f2f07fdb9b4e1f SOURCES/systemd-208.tar.xz
diff --git a/SOURCES/0001-RHEL-units-add-Install-section-to-tmp.mount.patch b/SOURCES/0001-RHEL-units-add-Install-section-to-tmp.mount.patch
deleted file mode 100644
index d70f7a5..0000000
--- a/SOURCES/0001-RHEL-units-add-Install-section-to-tmp.mount.patch
+++ /dev/null
@@ -1,24 +0,0 @@
-From 2e987a0ac284a1cd1ab4f8e335abcae91c976f15 Mon Sep 17 00:00:00 2001
-From: Michal Schmidt <mschmidt@redhat.com>
-Date: Fri, 15 Feb 2013 09:07:57 +0100
-Subject: [PATCH] RHEL: units: add [Install] section to tmp.mount
-
-Related: #908253
----
- units/tmp.mount | 6 ++++++
- 1 file changed, 6 insertions(+)
-
-diff --git a/units/tmp.mount b/units/tmp.mount
-index 99a3ba3..79e1c76 100644
---- a/units/tmp.mount
-+++ b/units/tmp.mount
-@@ -18,3 +18,9 @@ What=tmpfs
- Where=/tmp
- Type=tmpfs
- Options=mode=1777,strictatime
-+
-+# tmp.mount is statically enabled in upstream. In RHEL tmp-on-tmpfs is not used
-+# by default, but there are cases where it is necessary (anaconda, live images,
-+# read-only root). Make 'systemctl enable tmp.mount' work:
-+[Install]
-+WantedBy=local-fs.target
diff --git a/SOURCES/0001-units-add-Install-section-to-tmp.mount.patch b/SOURCES/0001-units-add-Install-section-to-tmp.mount.patch
new file mode 100644
index 0000000..3bf21ee
--- /dev/null
+++ b/SOURCES/0001-units-add-Install-section-to-tmp.mount.patch
@@ -0,0 +1,23 @@
+From b4aeab33ff172b608930daf77a6f7af47bf2fdc9 Mon Sep 17 00:00:00 2001
+From: Michal Schmidt <mschmidt@redhat.com>
+Date: Fri, 15 Feb 2013 09:07:57 +0100
+Subject: [PATCH] units: add [Install] section to tmp.mount
+
+Change-Id: I2e6d129de00a9afaf7558006c886866f64394c29
+Related: #908253
+---
+ units/tmp.mount | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/units/tmp.mount b/units/tmp.mount
+index 99a3ba3..9e4803a 100644
+--- a/units/tmp.mount
++++ b/units/tmp.mount
+@@ -18,3 +18,7 @@ What=tmpfs
+ Where=/tmp
+ Type=tmpfs
+ Options=mode=1777,strictatime
++
++# Make 'systemctl enable tmp.mount' work:
++[Install]
++WantedBy=local-fs.target
diff --git a/SOURCES/0002-kernel-install-add-fedora-specific-callouts-to-new-k.patch b/SOURCES/0002-kernel-install-add-fedora-specific-callouts-to-new-k.patch
deleted file mode 100644
index ef90378..0000000
--- a/SOURCES/0002-kernel-install-add-fedora-specific-callouts-to-new-k.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-From b81d902a8ec4e81c6ddda0208307ee77d4e0858b Mon Sep 17 00:00:00 2001
-From: Harald Hoyer <harald@redhat.com>
-Date: Wed, 13 Mar 2013 07:57:53 +0100
-Subject: [PATCH] kernel-install: add fedora specific callouts to
- new-kernel-pkg
-
----
- src/kernel-install/kernel-install | 21 +++++++++++++++++++++
- 1 file changed, 21 insertions(+)
-
-diff --git a/src/kernel-install/kernel-install b/src/kernel-install/kernel-install
-index fb2ee57..f491947 100644
---- a/src/kernel-install/kernel-install
-+++ b/src/kernel-install/kernel-install
-@@ -19,6 +19,27 @@
- # You should have received a copy of the GNU Lesser General Public License
- # along with systemd; If not, see <http://www.gnu.org/licenses/>.
- 
-+if [[ -x /sbin/new-kernel-pkg ]]; then
-+    [[ "$2" == *\+* ]] && flavor=-"${2##*+}"
-+    case "$1" in
-+        add)
-+            /sbin/new-kernel-pkg --package "kernel${flavor}" --install "$2" || exit $?
-+            /sbin/new-kernel-pkg --package "kernel${flavor}" --mkinitrd --dracut --depmod --update "$2" || exit $?
-+            /sbin/new-kernel-pkg --package "kernel${flavor}" --rpmposttrans "$2" || exit $?
-+            ;;
-+        remove)
-+            /sbin/new-kernel-pkg --package "kernel${flavor+-$flavor}" --rminitrd --rmmoddep --remove "$2" || exit $?
-+            ;;
-+        *)
-+            ;;
-+    esac
-+
-+    # exit, if we can't find a boot loader spec conforming setup
-+    if ! [[ -d /boot/loader/entries || -L /boot/loader/entries ]]; then
-+        exit 0
-+    fi
-+fi
-+
- usage()
- {
-     echo "Usage:" >&2
diff --git a/SOURCES/0002-man-explain-NAME-in-systemctl-man-page.patch b/SOURCES/0002-man-explain-NAME-in-systemctl-man-page.patch
new file mode 100644
index 0000000..04990de
--- /dev/null
+++ b/SOURCES/0002-man-explain-NAME-in-systemctl-man-page.patch
@@ -0,0 +1,33 @@
+From bc7d6c8e11a22d29b14b6070117f261961eadb23 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?V=C3=A1clav=20Pavl=C3=ADn?= <vpavlin@redhat.com>
+Date: Thu, 31 Oct 2013 14:36:41 +0100
+Subject: [PATCH] man: explain NAME in systemctl man page
+
+---
+ man/systemctl.xml | 13 +++++++++++++
+ 1 file changed, 13 insertions(+)
+
+diff --git a/man/systemctl.xml b/man/systemctl.xml
+index e789d4b..166282c 100644
+--- a/man/systemctl.xml
++++ b/man/systemctl.xml
+@@ -63,6 +63,19 @@ along with systemd; If not, see <http://www.gnu.org/licenses/>.
+     introspect and control the state of the
+     <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+     system and service manager.</para>
++
++    <para>For Unit Commands the <replaceable>NAME</replaceable> represents full name of unit.
++    <programlisting>
++systemctl start foo.service
++    </programlisting>
++    For Unit File Commands the <replaceable>NAME</replaceable> represents full name of the unit file, or absolute path to the unit file.
++    <programlisting>
++systemctl start /path/to/foo.service
++    </programlisting>
++    While working with services/service files, <command>systemctl</command> is able to append .service suffix when it is missing.
++    <programlisting>
++systemctl start foo
++    </programlisting></para>
+   </refsect1>
+ 
+   <refsect1>
diff --git a/SOURCES/0003-core-cgroup-first-print-then-free.patch b/SOURCES/0003-core-cgroup-first-print-then-free.patch
deleted file mode 100644
index dc4eecf..0000000
--- a/SOURCES/0003-core-cgroup-first-print-then-free.patch
+++ /dev/null
@@ -1,23 +0,0 @@
-From 89ad78921a404dc82f22862f2354707199ea1616 Mon Sep 17 00:00:00 2001
-From: Lukas Nykryn <lnykryn@redhat.com>
-Date: Fri, 13 Sep 2013 14:31:17 +0200
-Subject: [PATCH] core/cgroup: first print then free
-
----
- src/core/cgroup.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/core/cgroup.c b/src/core/cgroup.c
-index 3eeb475..513450a 100644
---- a/src/core/cgroup.c
-+++ b/src/core/cgroup.c
-@@ -395,8 +395,8 @@ static int unit_create_cgroups(Unit *u, CGroupControllerMask mask) {
-                 is_in_hash = true;
- 
-         if (r < 0) {
--                free(path);
-                 log_error("cgroup %s exists already: %s", path, strerror(-r));
-+                free(path);
-                 return r;
-         }
- 
diff --git a/SOURCES/0003-fix-lingering-references-to-var-lib-backlight-random.patch b/SOURCES/0003-fix-lingering-references-to-var-lib-backlight-random.patch
new file mode 100644
index 0000000..2705795
--- /dev/null
+++ b/SOURCES/0003-fix-lingering-references-to-var-lib-backlight-random.patch
@@ -0,0 +1,51 @@
+From 635ba7207a9afa3fa1b0c4e804c6823d71c04d1c Mon Sep 17 00:00:00 2001
+From: Dave Reisner <dreisner@archlinux.org>
+Date: Wed, 2 Oct 2013 07:46:24 -0400
+Subject: [PATCH] fix lingering references to /var/lib/{backlight,random-seed}
+
+This should have been part of ef5bfcf668e6029faa78534dfe.
+---
+ man/systemd-backlight@.service.xml  | 2 +-
+ man/systemd-random-seed.service.xml | 2 +-
+ units/systemd-backlight@.service.in | 2 +-
+ 3 files changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/man/systemd-backlight@.service.xml b/man/systemd-backlight@.service.xml
+index 2b73625..4318964 100644
+--- a/man/systemd-backlight@.service.xml
++++ b/man/systemd-backlight@.service.xml
+@@ -58,7 +58,7 @@
+                 is a service that restores the display backlight
+                 brightness at early-boot and saves it at shutdown. On
+                 disk, the backlight brightness is stored in
+-                <filename>/var/lib/backlight/</filename>. Note that by
++                <filename>/var/lib/systemd/backlight/</filename>. Note that by
+                 default, only firmware backlight devices are
+                 saved/restored.</para>
+         </refsect1>
+diff --git a/man/systemd-random-seed.service.xml b/man/systemd-random-seed.service.xml
+index 8cd14b7..e5cd037 100644
+--- a/man/systemd-random-seed.service.xml
++++ b/man/systemd-random-seed.service.xml
+@@ -61,7 +61,7 @@
+                 for details. Saving/restoring the random seed across
+                 boots increases the amount of available entropy early
+                 at boot. On disk the random seed is stored in
+-                <filename>/var/lib/random-seed</filename>.</para>
++                <filename>/var/lib/systemd/random-seed</filename>.</para>
+         </refsect1>
+ 
+         <refsect1>
+diff --git a/units/systemd-backlight@.service.in b/units/systemd-backlight@.service.in
+index b0e75db..5caa5d5 100644
+--- a/units/systemd-backlight@.service.in
++++ b/units/systemd-backlight@.service.in
+@@ -9,7 +9,7 @@
+ Description=Load/Save Screen Backlight Brightness of %I
+ Documentation=man:systemd-backlight@.service(8)
+ DefaultDependencies=no
+-RequiresMountsFor=/var/lib/backlight
++RequiresMountsFor=/var/lib/systemd/backlight
+ Conflicts=shutdown.target
+ After=systemd-readahead-collect.service systemd-readahead-replay.service systemd-remount-fs.service
+ Before=sysinit.target shutdown.target
diff --git a/SOURCES/0004-cryptsetup-fix-OOM-handling-when-parsing-mount-optio.patch b/SOURCES/0004-cryptsetup-fix-OOM-handling-when-parsing-mount-optio.patch
new file mode 100644
index 0000000..828744c
--- /dev/null
+++ b/SOURCES/0004-cryptsetup-fix-OOM-handling-when-parsing-mount-optio.patch
@@ -0,0 +1,45 @@
+From cfb20c251cb79820ddf7507f9f4a54cc3f18b121 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart@poettering.net>
+Date: Wed, 2 Oct 2013 19:36:28 +0200
+Subject: [PATCH] cryptsetup: fix OOM handling when parsing mount options
+
+---
+ src/cryptsetup/cryptsetup.c | 11 ++++++-----
+ 1 file changed, 6 insertions(+), 5 deletions(-)
+
+diff --git a/src/cryptsetup/cryptsetup.c b/src/cryptsetup/cryptsetup.c
+index 22b5eea..769c3e4 100644
+--- a/src/cryptsetup/cryptsetup.c
++++ b/src/cryptsetup/cryptsetup.c
+@@ -74,7 +74,7 @@ static int parse_one_option(const char *option) {
+ 
+                 t = strdup(option+7);
+                 if (!t)
+-                        return -ENOMEM;
++                        return log_oom();
+ 
+                 free(opt_cipher);
+                 opt_cipher = t;
+@@ -89,9 +89,10 @@ static int parse_one_option(const char *option) {
+         } else if (startswith(option, "tcrypt-keyfile=")) {
+ 
+                 opt_type = CRYPT_TCRYPT;
+-                if (path_is_absolute(option+15))
+-                        opt_tcrypt_keyfiles = strv_append(opt_tcrypt_keyfiles, strdup(option+15));
+-                else
++                if (path_is_absolute(option+15)) {
++                        if (strv_extend(&opt_tcrypt_keyfiles, option + 15) < 0)
++                                return log_oom();
++                } else
+                         log_error("Key file path '%s' is not absolute. Ignoring.", option+15);
+ 
+         } else if (startswith(option, "keyfile-size=")) {
+@@ -113,7 +114,7 @@ static int parse_one_option(const char *option) {
+ 
+                 t = strdup(option+5);
+                 if (!t)
+-                        return -ENOMEM;
++                        return log_oom();
+ 
+                 free(opt_hash);
+                 opt_hash = t;
diff --git a/SOURCES/0004-swap-fix-reverse-dependencies.patch b/SOURCES/0004-swap-fix-reverse-dependencies.patch
deleted file mode 100644
index 63674d1..0000000
--- a/SOURCES/0004-swap-fix-reverse-dependencies.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-From 0f84fab56d31f53b2970bdee64e254c4518618a7 Mon Sep 17 00:00:00 2001
-From: Tom Gundersen <teg@jklm.no>
-Date: Fri, 13 Sep 2013 14:46:18 +0200
-Subject: [PATCH] swap: fix reverse dependencies
-
-Make sure swap.target correctly requires/wants the swap units.
-
-This fixes https://bugs.freedesktop.org/show_bug.cgi?id=69291.
-
-Reported-by: Hussam Al-Tayeb
----
- src/core/swap.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/core/swap.c b/src/core/swap.c
-index 57d15eb..3950860 100644
---- a/src/core/swap.c
-+++ b/src/core/swap.c
-@@ -220,7 +220,7 @@ static int swap_add_default_dependencies(Swap *s) {
-         }
- 
-         if (!noauto) {
--                r = unit_add_two_dependencies_by_name(UNIT(s), UNIT_BEFORE, (nofail ? UNIT_WANTED_BY : UNIT_REQUIRED_BY),
-+                r = unit_add_two_dependencies_by_name_inverse(UNIT(s), UNIT_AFTER, (nofail ? UNIT_WANTS : UNIT_REQUIRES),
-                                                       SPECIAL_SWAP_TARGET, NULL, true);
-                 if (r < 0)
-                         return r;
diff --git a/SOURCES/0005-journald-add-missing-error-check.patch b/SOURCES/0005-journald-add-missing-error-check.patch
new file mode 100644
index 0000000..8d7c1d6
--- /dev/null
+++ b/SOURCES/0005-journald-add-missing-error-check.patch
@@ -0,0 +1,22 @@
+From dc74e25f66f2aa56b6c6fa2fd51fd1ee02a4b770 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart@poettering.net>
+Date: Wed, 2 Oct 2013 19:36:43 +0200
+Subject: [PATCH] journald: add missing error check
+
+---
+ src/journal/journal-file.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/src/journal/journal-file.c b/src/journal/journal-file.c
+index 1236403..81c344f 100644
+--- a/src/journal/journal-file.c
++++ b/src/journal/journal-file.c
+@@ -907,6 +907,8 @@ static int journal_file_append_field(
+ 
+         osize = offsetof(Object, field.payload) + size;
+         r = journal_file_append_object(f, OBJECT_FIELD, osize, &o, &p);
++        if (r < 0)
++                return r;
+ 
+         o->field.hash = htole64(hash);
+         memcpy(o->field.payload, field, size);
diff --git a/SOURCES/0005-update-TODO.patch b/SOURCES/0005-update-TODO.patch
deleted file mode 100644
index 911db49..0000000
--- a/SOURCES/0005-update-TODO.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-From d0746c1d17407a17c18f26876d9ca0f6f20b29b0 Mon Sep 17 00:00:00 2001
-From: Lennart Poettering <lennart@poettering.net>
-Date: Fri, 13 Sep 2013 04:13:47 +0200
-Subject: [PATCH] update TODO
-
----
- TODO | 2 ++
- 1 file changed, 2 insertions(+)
-
-diff --git a/TODO b/TODO
-index 08d4914..5354692 100644
---- a/TODO
-+++ b/TODO
-@@ -58,6 +58,8 @@ CGroup Rework Completion:
- 
- Features:
- 
-+* Move backlight and random-seed into /var/lib/systemd
-+
- * When a Type=forking service fails and needed another service that
-   service is not cleaned up again when it has StopWhenUnneeded=yes
-   http://lists.freedesktop.org/archives/systemd-devel/2013-July/012141.html
diff --git a/SOURCES/0006-bus-fix-potentially-uninitialized-memory-access.patch b/SOURCES/0006-bus-fix-potentially-uninitialized-memory-access.patch
new file mode 100644
index 0000000..c7ac468
--- /dev/null
+++ b/SOURCES/0006-bus-fix-potentially-uninitialized-memory-access.patch
@@ -0,0 +1,31 @@
+From 4b3825ff691103634adc77a4d3ffc7128923fae7 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart@poettering.net>
+Date: Wed, 2 Oct 2013 19:37:11 +0200
+Subject: [PATCH] bus: fix potentially uninitialized memory access
+
+---
+ src/libsystemd-bus/bus-internal.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/libsystemd-bus/bus-internal.c b/src/libsystemd-bus/bus-internal.c
+index 0e66f3d..cac948e 100644
+--- a/src/libsystemd-bus/bus-internal.c
++++ b/src/libsystemd-bus/bus-internal.c
+@@ -63,7 +63,7 @@ bool object_path_is_valid(const char *p) {
+ 
+ bool interface_name_is_valid(const char *p) {
+         const char *q;
+-        bool dot, found_dot;
++        bool dot, found_dot = false;
+ 
+         if (isempty(p))
+                 return false;
+@@ -103,7 +103,7 @@ bool interface_name_is_valid(const char *p) {
+ 
+ bool service_name_is_valid(const char *p) {
+         const char *q;
+-        bool dot, found_dot, unique;
++        bool dot, found_dot = false, unique;
+ 
+         if (isempty(p))
+                 return false;
diff --git a/SOURCES/0006-cryptsetup-generator-don-t-create-tmp-swap-units.patch b/SOURCES/0006-cryptsetup-generator-don-t-create-tmp-swap-units.patch
deleted file mode 100644
index 2d242c5..0000000
--- a/SOURCES/0006-cryptsetup-generator-don-t-create-tmp-swap-units.patch
+++ /dev/null
@@ -1,50 +0,0 @@
-From d12ed80037b482f7da136abbd7abce9c9219ef8e Mon Sep 17 00:00:00 2001
-From: Tom Gundersen <teg@jklm.no>
-Date: Thu, 15 Aug 2013 08:47:59 +0800
-Subject: [PATCH] cryptsetup-generator: don't create tmp+swap units
-
----
- src/cryptsetup/cryptsetup-generator.c | 13 ++++++++++---
- 1 file changed, 10 insertions(+), 3 deletions(-)
-
-diff --git a/src/cryptsetup/cryptsetup-generator.c b/src/cryptsetup/cryptsetup-generator.c
-index 81b7708..967c5e6 100644
---- a/src/cryptsetup/cryptsetup-generator.c
-+++ b/src/cryptsetup/cryptsetup-generator.c
-@@ -72,13 +72,20 @@ static int create_disk(
- 
-         _cleanup_free_ char *p = NULL, *n = NULL, *d = NULL, *u = NULL, *from = NULL, *to = NULL, *e = NULL;
-         _cleanup_fclose_ FILE *f = NULL;
--        bool noauto, nofail;
-+        bool noauto, nofail, tmp, swap;
- 
-         assert(name);
-         assert(device);
- 
-         noauto = has_option(options, "noauto");
-         nofail = has_option(options, "nofail");
-+        tmp = has_option(options, "tmp");
-+        swap = has_option(options, "swap");
-+
-+        if (tmp && swap) {
-+                log_error("Device '%s' cannot be both 'tmp' and 'swap'. Ignoring.", name);
-+                return -EINVAL;
-+        }
- 
-         n = unit_name_from_path_instance("systemd-cryptsetup", name, ".service");
-         if (!n)
-@@ -151,12 +158,12 @@ static int create_disk(
-                 name, u, strempty(password), strempty(options),
-                 name);
- 
--        if (has_option(options, "tmp"))
-+        if (tmp)
-                 fprintf(f,
-                         "ExecStartPost=/sbin/mke2fs '/dev/mapper/%s'\n",
-                         name);
- 
--        if (has_option(options, "swap"))
-+        if (swap)
-                 fprintf(f,
-                         "ExecStartPost=/sbin/mkswap '/dev/mapper/%s'\n",
-                         name);
diff --git a/SOURCES/0007-cryptsetup-generator-allow-specifying-options-in-pro.patch b/SOURCES/0007-cryptsetup-generator-allow-specifying-options-in-pro.patch
deleted file mode 100644
index 98f140e..0000000
--- a/SOURCES/0007-cryptsetup-generator-allow-specifying-options-in-pro.patch
+++ /dev/null
@@ -1,185 +0,0 @@
-From 61ca2800f3a1666478bdc01fc796d36c917a5032 Mon Sep 17 00:00:00 2001
-From: Tom Gundersen <teg@jklm.no>
-Date: Sun, 18 Aug 2013 14:59:00 +0800
-Subject: [PATCH] cryptsetup-generator: allow specifying options in
- /proc/cmdline
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The main usecase for this is to make it possible to use cryptsetup in
-the initrd without it having to include a host-specific /etc/crypttab.
-
-Tested-by: Thomas Bächler <thomas@archlinux.org>
----
- man/systemd-cryptsetup-generator.xml  | 23 ++++++++++
- src/cryptsetup/cryptsetup-generator.c | 79 +++++++++++++++++++++++++++++++++--
- 2 files changed, 98 insertions(+), 4 deletions(-)
-
-diff --git a/man/systemd-cryptsetup-generator.xml b/man/systemd-cryptsetup-generator.xml
-index 215ac2d..d6b7e49 100644
---- a/man/systemd-cryptsetup-generator.xml
-+++ b/man/systemd-cryptsetup-generator.xml
-@@ -137,6 +137,29 @@
-                                 will be activated in the initrd or the real root.</para>
-                                 </listitem>
-                         </varlistentry>
-+
-+                        <varlistentry>
-+                                <term><varname>luks.options=</varname></term>
-+                                <term><varname>rd.luks.options=</varname></term>
-+
-+                                <listitem><para>Takes a LUKS super
-+                                block UUID followed by an '=' and a string
-+                                of options separated by commas as argument.
-+                                This will override the options for the given
-+                                UUID.</para>
-+                                <para>If only a list of options, without an
-+                                UUID, is specified, they apply to any UUIDs not
-+                                specified elsewhere, and without an entry in
-+                                /etc/crypttab.</para><para>
-+                                <varname>rd.luks.options=</varname>
-+                                is honored only by initial RAM disk
-+                                (initrd) while
-+                                <varname>luks.options=</varname> is
-+                                honored by both the main system and
-+                                the initrd.</para>
-+                                </listitem>
-+                        </varlistentry>
-+
-                         <varlistentry>
-                                 <term><varname>luks.key=</varname></term>
-                                 <term><varname>rd.luks.key=</varname></term>
-diff --git a/src/cryptsetup/cryptsetup-generator.c b/src/cryptsetup/cryptsetup-generator.c
-index 967c5e6..ba6efa6 100644
---- a/src/cryptsetup/cryptsetup-generator.c
-+++ b/src/cryptsetup/cryptsetup-generator.c
-@@ -240,7 +240,7 @@ static int create_disk(
-         return 0;
- }
- 
--static int parse_proc_cmdline(char ***arg_proc_cmdline_disks, char **arg_proc_cmdline_keyfile) {
-+static int parse_proc_cmdline(char ***arg_proc_cmdline_disks, char ***arg_proc_cmdline_options, char **arg_proc_cmdline_keyfile) {
-         _cleanup_free_ char *line = NULL;
-         char *w = NULL, *state = NULL;
-         int r;
-@@ -307,7 +307,20 @@ static int parse_proc_cmdline(char ***arg_proc_cmdline_disks, char **arg_proc_cm
-                                         return log_oom();
-                         }
- 
-+                } else if (startswith(word, "luks.options=")) {
-+                        if (strv_extend(arg_proc_cmdline_options, word + 13) < 0)
-+                                return log_oom();
-+
-+                } else if (startswith(word, "rd.luks.options=")) {
-+
-+                        if (in_initrd()) {
-+                                if (strv_extend(arg_proc_cmdline_options, word + 16) < 0)
-+                                        return log_oom();
-+                        }
-+
-                 } else if (startswith(word, "luks.key=")) {
-+                        if (*arg_proc_cmdline_keyfile)
-+                                free(*arg_proc_cmdline_keyfile);
-                         *arg_proc_cmdline_keyfile = strdup(word + 9);
-                         if (!*arg_proc_cmdline_keyfile)
-                                 return log_oom();
-@@ -337,6 +350,7 @@ static int parse_proc_cmdline(char ***arg_proc_cmdline_disks, char **arg_proc_cm
- int main(int argc, char *argv[]) {
-         _cleanup_strv_free_ char **arg_proc_cmdline_disks_done = NULL;
-         _cleanup_strv_free_ char **arg_proc_cmdline_disks = NULL;
-+        _cleanup_strv_free_ char **arg_proc_cmdline_options = NULL;
-         _cleanup_free_ char *arg_proc_cmdline_keyfile = NULL;
-         _cleanup_fclose_ FILE *f = NULL;
-         unsigned n = 0;
-@@ -357,7 +371,7 @@ int main(int argc, char *argv[]) {
- 
-         umask(0022);
- 
--        if (parse_proc_cmdline(&arg_proc_cmdline_disks, &arg_proc_cmdline_keyfile) < 0)
-+        if (parse_proc_cmdline(&arg_proc_cmdline_disks, &arg_proc_cmdline_options, &arg_proc_cmdline_keyfile) < 0)
-                 return EXIT_FAILURE;
- 
-         if (!arg_enabled)
-@@ -412,6 +426,26 @@ int main(int argc, char *argv[]) {
-                                 continue;
-                         }
- 
-+                        if (arg_proc_cmdline_options) {
-+                                /*
-+                                  If options are specified on the kernel commandline, let them override
-+                                  the ones from crypttab.
-+                                */
-+                                STRV_FOREACH(i, arg_proc_cmdline_options) {
-+                                        _cleanup_free_ char *proc_uuid = NULL, *proc_options = NULL;
-+                                        const char *p = *i;
-+
-+                                        k = sscanf(p, "%m[0-9a-fA-F-]=%ms", &proc_uuid, &proc_options);
-+                                        if (k == 2 && streq(proc_uuid, device + 5)) {
-+                                                if (options)
-+                                                        free(options);
-+                                                options = strdup(p);
-+                                                if (!proc_options)
-+                                                        return log_oom();
-+                                        }
-+                                }
-+                        }
-+
-                         if (arg_proc_cmdline_disks) {
-                                 /*
-                                   If luks UUIDs are specified on the kernel command line, use them as a filter
-@@ -452,7 +486,7 @@ next:
-                   on the kernel command line and not yet written.
-                 */
- 
--                _cleanup_free_ char *name = NULL, *device = NULL;
-+                _cleanup_free_ char *name = NULL, *device = NULL, *options = NULL;
-                 const char *p = *i;
- 
-                 if (startswith(p, "luks-"))
-@@ -467,7 +501,44 @@ next:
-                 if (!name || !device)
-                         return log_oom();
- 
--                if (create_disk(name, device, arg_proc_cmdline_keyfile, "timeout=0") < 0)
-+                if (arg_proc_cmdline_options) {
-+                        /*
-+                          If options are specified on the kernel commandline, use them.
-+                        */
-+                        char **j;
-+
-+                        STRV_FOREACH(j, arg_proc_cmdline_options) {
-+                                _cleanup_free_ char *proc_uuid = NULL, *proc_options = NULL;
-+                                const char *s = *j;
-+                                int k;
-+
-+                                k = sscanf(s, "%m[0-9a-fA-F-]=%ms", &proc_uuid, &proc_options);
-+                                if (k == 2) {
-+                                        if (streq(proc_uuid, device + 5)) {
-+                                                if (options)
-+                                                        free(options);
-+                                                options = strdup(proc_options);
-+                                                if (!options)
-+                                                        return log_oom();
-+                                        }
-+                                } else if (!options) {
-+                                        /*
-+                                          Fall back to options without a specified UUID
-+                                        */
-+                                        options = strdup(s);
-+                                        if (!options)
-+                                                return log_oom();
-+                                }
-+                        }
-+                }
-+
-+                if (!options) {
-+                        options = strdup("timeout=0");
-+                        if (!options)
-+                                return log_oom();
-+                }
-+
-+                if (create_disk(name, device, arg_proc_cmdline_keyfile, options) < 0)
-                         r = EXIT_FAILURE;
-         }
- 
diff --git a/SOURCES/0007-dbus-fix-return-value-of-dispatch_rqueue.patch b/SOURCES/0007-dbus-fix-return-value-of-dispatch_rqueue.patch
new file mode 100644
index 0000000..a1d278c
--- /dev/null
+++ b/SOURCES/0007-dbus-fix-return-value-of-dispatch_rqueue.patch
@@ -0,0 +1,27 @@
+From b8e064bd25ccd701a8249a9c9b59049f8c055b93 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart@poettering.net>
+Date: Wed, 2 Oct 2013 19:37:30 +0200
+Subject: [PATCH] dbus: fix return value of dispatch_rqueue()
+
+---
+ src/libsystemd-bus/sd-bus.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/libsystemd-bus/sd-bus.c b/src/libsystemd-bus/sd-bus.c
+index 3f766fb..db0880f 100644
+--- a/src/libsystemd-bus/sd-bus.c
++++ b/src/libsystemd-bus/sd-bus.c
+@@ -1215,11 +1215,11 @@ static int dispatch_rqueue(sd_bus *bus, sd_bus_message **m) {
+                 if (r == 0)
+                         return ret;
+ 
+-                r = 1;
++                ret = 1;
+         } while (!z);
+ 
+         *m = z;
+-        return 1;
++        return ret;
+ }
+ 
+ int sd_bus_send(sd_bus *bus, sd_bus_message *m, uint64_t *serial) {
diff --git a/SOURCES/0008-automount-rename-repeat_unmont-to-repeat_unmount.patch b/SOURCES/0008-automount-rename-repeat_unmont-to-repeat_unmount.patch
deleted file mode 100644
index 7541077..0000000
--- a/SOURCES/0008-automount-rename-repeat_unmont-to-repeat_unmount.patch
+++ /dev/null
@@ -1,41 +0,0 @@
-From 091169fa11a366ab42fb6f71c22e8ed95868f804 Mon Sep 17 00:00:00 2001
-From: David Mackey <tdmackey@booleanhaiku.com>
-Date: Thu, 12 Sep 2013 19:45:49 -0700
-Subject: [PATCH] automount: rename repeat_unmont to repeat_unmount
-
-Trivial cleanup of repeat_unmount() spelling.
----
- src/core/automount.c | 6 +++---
- 1 file changed, 3 insertions(+), 3 deletions(-)
-
-diff --git a/src/core/automount.c b/src/core/automount.c
-index a20d534..6762392 100644
---- a/src/core/automount.c
-+++ b/src/core/automount.c
-@@ -66,7 +66,7 @@ static void automount_init(Unit *u) {
-         UNIT(a)->ignore_on_isolate = true;
- }
- 
--static void repeat_unmout(const char *path) {
-+static void repeat_unmount(const char *path) {
-         assert(path);
- 
-         for (;;) {
-@@ -100,7 +100,7 @@ static void unmount_autofs(Automount *a) {
-         if (a->where &&
-             (UNIT(a)->manager->exit_code != MANAGER_RELOAD &&
-              UNIT(a)->manager->exit_code != MANAGER_REEXECUTE))
--                repeat_unmout(a->where);
-+                repeat_unmount(a->where);
- }
- 
- static void automount_done(Unit *u) {
-@@ -575,7 +575,7 @@ fail:
-                 close_nointr_nofail(ioctl_fd);
- 
-         if (mounted)
--                repeat_unmout(a->where);
-+                repeat_unmount(a->where);
- 
-         log_error_unit(UNIT(a)->id,
-                        "Failed to initialize automounter: %s", strerror(-r));
diff --git a/SOURCES/0008-modules-load-fix-error-handling.patch b/SOURCES/0008-modules-load-fix-error-handling.patch
new file mode 100644
index 0000000..f5347c3
--- /dev/null
+++ b/SOURCES/0008-modules-load-fix-error-handling.patch
@@ -0,0 +1,24 @@
+From 15010ca4aa6627c7bcfe8106fa45c4408443d5f2 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart@poettering.net>
+Date: Wed, 2 Oct 2013 19:37:44 +0200
+Subject: [PATCH] modules-load: fix error handling
+
+---
+ src/modules-load/modules-load.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/modules-load/modules-load.c b/src/modules-load/modules-load.c
+index 7b19ee0..49ee420 100644
+--- a/src/modules-load/modules-load.c
++++ b/src/modules-load/modules-load.c
+@@ -302,8 +302,8 @@ int main(int argc, char *argv[]) {
+ 
+                 STRV_FOREACH(i, arg_proc_cmdline_modules) {
+                         k = load_module(ctx, *i);
+-                        if (k < 0)
+-                                r = EXIT_FAILURE;
++                        if (k < 0 && r == 0)
++                                r = k;
+                 }
+ 
+                 r = conf_files_list_nulstr(&files, ".conf", NULL, conf_file_dirs);
diff --git a/SOURCES/0009-cgroup-add-the-missing-setting-of-variable-s-value.patch b/SOURCES/0009-cgroup-add-the-missing-setting-of-variable-s-value.patch
deleted file mode 100644
index 2b0aafe..0000000
--- a/SOURCES/0009-cgroup-add-the-missing-setting-of-variable-s-value.patch
+++ /dev/null
@@ -1,24 +0,0 @@
-From 8799f0a37ef24fe2709b6e7fdb4ca2c1c9586718 Mon Sep 17 00:00:00 2001
-From: Gao feng <gaofeng@cn.fujitsu.com>
-Date: Fri, 13 Sep 2013 11:17:05 +0800
-Subject: [PATCH] cgroup: add the missing setting of variable's value
-
-set the value of variable "r" to the return value
-of cg_set_attribute.
----
- src/core/cgroup.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/core/cgroup.c b/src/core/cgroup.c
-index 513450a..9804227 100644
---- a/src/core/cgroup.c
-+++ b/src/core/cgroup.c
-@@ -264,7 +264,7 @@ void cgroup_context_apply(CGroupContext *c, CGroupControllerMask mask, const cha
-                         log_error("Failed to set memory.limit_in_bytes on %s: %s", path, strerror(-r));
- 
-                 sprintf(buf, "%" PRIu64 "\n", c->memory_soft_limit);
--                cg_set_attribute("memory", path, "memory.soft_limit_in_bytes", buf);
-+                r = cg_set_attribute("memory", path, "memory.soft_limit_in_bytes", buf);
-                 if (r < 0)
-                         log_error("Failed to set memory.limit_in_bytes on %s: %s", path, strerror(-r));
-         }
diff --git a/SOURCES/0009-efi-never-call-qsort-on-potentially-NULL-arrays.patch b/SOURCES/0009-efi-never-call-qsort-on-potentially-NULL-arrays.patch
new file mode 100644
index 0000000..8cfb22b
--- /dev/null
+++ b/SOURCES/0009-efi-never-call-qsort-on-potentially-NULL-arrays.patch
@@ -0,0 +1,23 @@
+From 650948f16d92ce6b55e01ff2c24ea00766d38474 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart@poettering.net>
+Date: Wed, 2 Oct 2013 19:38:09 +0200
+Subject: [PATCH] efi: never call qsort on potentially NULL arrays
+
+---
+ src/shared/efivars.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/src/shared/efivars.c b/src/shared/efivars.c
+index 1d5b6f9..c015b16 100644
+--- a/src/shared/efivars.c
++++ b/src/shared/efivars.c
+@@ -384,7 +384,8 @@ int efi_get_boot_options(uint16_t **options) {
+                 list[count ++] = id;
+         }
+ 
+-        qsort(list, count, sizeof(uint16_t), cmp_uint16);
++        if (list)
++                qsort(list, count, sizeof(uint16_t), cmp_uint16);
+ 
+         *options = list;
+         return count;
diff --git a/SOURCES/0010-cgroup-correct-the-log-information.patch b/SOURCES/0010-cgroup-correct-the-log-information.patch
deleted file mode 100644
index 2b7839b..0000000
--- a/SOURCES/0010-cgroup-correct-the-log-information.patch
+++ /dev/null
@@ -1,23 +0,0 @@
-From 9b69c0d07b0db38c181e35e52bcea0eb0dd21818 Mon Sep 17 00:00:00 2001
-From: Gao feng <gaofeng@cn.fujitsu.com>
-Date: Fri, 13 Sep 2013 11:17:06 +0800
-Subject: [PATCH] cgroup: correct the log information
-
-it should be memory.soft_limit_in_bytes.
----
- src/core/cgroup.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/core/cgroup.c b/src/core/cgroup.c
-index 9804227..08cb64b 100644
---- a/src/core/cgroup.c
-+++ b/src/core/cgroup.c
-@@ -266,7 +266,7 @@ void cgroup_context_apply(CGroupContext *c, CGroupControllerMask mask, const cha
-                 sprintf(buf, "%" PRIu64 "\n", c->memory_soft_limit);
-                 r = cg_set_attribute("memory", path, "memory.soft_limit_in_bytes", buf);
-                 if (r < 0)
--                        log_error("Failed to set memory.limit_in_bytes on %s: %s", path, strerror(-r));
-+                        log_error("Failed to set memory.soft_limit_in_bytes on %s: %s", path, strerror(-r));
-         }
- 
-         if (mask & CGROUP_DEVICE) {
diff --git a/SOURCES/0010-strv-don-t-access-potentially-NULL-string-arrays.patch b/SOURCES/0010-strv-don-t-access-potentially-NULL-string-arrays.patch
new file mode 100644
index 0000000..9fbb5d7
--- /dev/null
+++ b/SOURCES/0010-strv-don-t-access-potentially-NULL-string-arrays.patch
@@ -0,0 +1,24 @@
+From c6d39712453c53e8c859d6682f65d8129afc35a3 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart@poettering.net>
+Date: Wed, 2 Oct 2013 19:38:28 +0200
+Subject: [PATCH] strv: don't access potentially NULL string arrays
+
+---
+ src/shared/env-util.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/src/shared/env-util.c b/src/shared/env-util.c
+index 5e29629..7976881 100644
+--- a/src/shared/env-util.c
++++ b/src/shared/env-util.c
+@@ -405,7 +405,9 @@ char **strv_env_clean_log(char **e, const char *message) {
+                 e[k++] = *p;
+         }
+ 
+-        e[k] = NULL;
++        if (e)
++                e[k] = NULL;
++
+         return e;
+ }
+ 
diff --git a/SOURCES/0011-cgroup-fix-incorrectly-setting-memory-cgroup.patch b/SOURCES/0011-cgroup-fix-incorrectly-setting-memory-cgroup.patch
deleted file mode 100644
index 3f8b175..0000000
--- a/SOURCES/0011-cgroup-fix-incorrectly-setting-memory-cgroup.patch
+++ /dev/null
@@ -1,43 +0,0 @@
-From c7e5130d5b3983986bfe95918c75e083fa90dd47 Mon Sep 17 00:00:00 2001
-From: Gao feng <gaofeng@cn.fujitsu.com>
-Date: Fri, 13 Sep 2013 14:43:04 +0800
-Subject: [PATCH] cgroup: fix incorrectly setting memory cgroup
-
-If the memory_limit of unit is -1, we should write "-1"
-to the file memory.limit_in_bytes. not the (unit64_t) -1.
-
-otherwise the memory.limit_in_bytes will be set to zero.
----
- src/core/cgroup.c | 15 +++++++++++----
- 1 file changed, 11 insertions(+), 4 deletions(-)
-
-diff --git a/src/core/cgroup.c b/src/core/cgroup.c
-index 08cb64b..1f41efc 100644
---- a/src/core/cgroup.c
-+++ b/src/core/cgroup.c
-@@ -257,14 +257,21 @@ void cgroup_context_apply(CGroupContext *c, CGroupControllerMask mask, const cha
- 
-         if (mask & CGROUP_MEMORY) {
-                 char buf[DECIMAL_STR_MAX(uint64_t) + 1];
-+                if (c->memory_limit != (uint64_t) -1) {
-+                        sprintf(buf, "%" PRIu64 "\n", c->memory_limit);
-+                        r = cg_set_attribute("memory", path, "memory.limit_in_bytes", buf);
-+                } else
-+                        r = cg_set_attribute("memory", path, "memory.limit_in_bytes", "-1");
- 
--                sprintf(buf, "%" PRIu64 "\n", c->memory_limit);
--                r = cg_set_attribute("memory", path, "memory.limit_in_bytes", buf);
-                 if (r < 0)
-                         log_error("Failed to set memory.limit_in_bytes on %s: %s", path, strerror(-r));
- 
--                sprintf(buf, "%" PRIu64 "\n", c->memory_soft_limit);
--                r = cg_set_attribute("memory", path, "memory.soft_limit_in_bytes", buf);
-+                if (c->memory_soft_limit != (uint64_t) -1) {
-+                        sprintf(buf, "%" PRIu64 "\n", c->memory_soft_limit);
-+                        r = cg_set_attribute("memory", path, "memory.soft_limit_in_bytes", buf);
-+                } else
-+                        r = cg_set_attribute("memory", path, "memory.soft_limit_in_bytes", "-1");
-+
-                 if (r < 0)
-                         log_error("Failed to set memory.soft_limit_in_bytes on %s: %s", path, strerror(-r));
-         }
diff --git a/SOURCES/0011-mkdir-pass-a-proper-function-pointer-to-mkdir_safe_i.patch b/SOURCES/0011-mkdir-pass-a-proper-function-pointer-to-mkdir_safe_i.patch
new file mode 100644
index 0000000..13d08bf
--- /dev/null
+++ b/SOURCES/0011-mkdir-pass-a-proper-function-pointer-to-mkdir_safe_i.patch
@@ -0,0 +1,22 @@
+From 510cc2c4bc293002629547e1f5826d7a0ad92101 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart@poettering.net>
+Date: Wed, 2 Oct 2013 19:38:52 +0200
+Subject: [PATCH] mkdir: pass a proper function pointer to mkdir_safe_internal
+
+---
+ src/shared/mkdir.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/shared/mkdir.c b/src/shared/mkdir.c
+index b7e5c6e..43c6ea6 100644
+--- a/src/shared/mkdir.c
++++ b/src/shared/mkdir.c
+@@ -53,7 +53,7 @@ int mkdir_safe_internal(const char *path, mode_t mode, uid_t uid, gid_t gid, mkd
+ }
+ 
+ int mkdir_safe(const char *path, mode_t mode, uid_t uid, gid_t gid) {
+-        return mkdir_safe_internal(path, mode, uid, gid, false);
++        return mkdir_safe_internal(path, mode, uid, gid, mkdir);
+ }
+ 
+ static int is_dir(const char* path) {
diff --git a/SOURCES/0012-random-seed-we-should-return-errno-of-failed-loop_wr.patch b/SOURCES/0012-random-seed-we-should-return-errno-of-failed-loop_wr.patch
deleted file mode 100644
index 31317ef..0000000
--- a/SOURCES/0012-random-seed-we-should-return-errno-of-failed-loop_wr.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-From 198884f22dc432a98e3d4423434b9e97d67f2da8 Mon Sep 17 00:00:00 2001
-From: Lukas Nykryn <lnykryn@redhat.com>
-Date: Fri, 13 Sep 2013 14:12:55 +0200
-Subject: [PATCH] random-seed: we should return errno of failed loop_write
-
----
- src/random-seed/random-seed.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/random-seed/random-seed.c b/src/random-seed/random-seed.c
-index 4776c07..afbd500 100644
---- a/src/random-seed/random-seed.c
-+++ b/src/random-seed/random-seed.c
-@@ -157,7 +157,7 @@ int main(int argc, char *argv[]) {
-                 r = loop_write(seed_fd, buf, (size_t) k, false);
-                 if (r <= 0) {
-                         log_error("Failed to write new random seed file: %s", r < 0 ? strerror(-r) : "short write");
--                        r = k == 0 ? -EIO : (int) k;
-+                        r = r == 0 ? -EIO : r;
-                 }
-         }
- 
diff --git a/SOURCES/0012-tmpfiles.d-include-setgid-perms-for-run-log-journal.patch b/SOURCES/0012-tmpfiles.d-include-setgid-perms-for-run-log-journal.patch
new file mode 100644
index 0000000..40c9afd
--- /dev/null
+++ b/SOURCES/0012-tmpfiles.d-include-setgid-perms-for-run-log-journal.patch
@@ -0,0 +1,23 @@
+From 4092dd8187d9ff8d42d7f05b4a95816b575f67ff Mon Sep 17 00:00:00 2001
+From: Dave Reisner <dreisner@archlinux.org>
+Date: Wed, 2 Oct 2013 15:35:16 -0400
+Subject: [PATCH] tmpfiles.d: include setgid perms for /run/log/journal
+
+4608af4333d0f7f5 set permissions for journal storage on persistent disk
+but not the volatile storage.
+
+ref: https://bugs.archlinux.org/task/37170
+---
+ tmpfiles.d/systemd.conf | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/tmpfiles.d/systemd.conf b/tmpfiles.d/systemd.conf
+index b630440..a05c657 100644
+--- a/tmpfiles.d/systemd.conf
++++ b/tmpfiles.d/systemd.conf
+@@ -26,3 +26,5 @@ F /run/nologin 0644 - - - "System is booting up. See pam_nologin(8)"
+ 
+ m /var/log/journal 2755 root systemd-journal - -
+ m /var/log/journal/%m 2755 root systemd-journal - -
++m /run/log/journal 2755 root systemd-journal - -
++m /run/log/journal/%m 2755 root systemd-journal - -
diff --git a/SOURCES/0013-gpt-auto-generator-exit-immediately-if-in-container.patch b/SOURCES/0013-gpt-auto-generator-exit-immediately-if-in-container.patch
new file mode 100644
index 0000000..fe6a546
--- /dev/null
+++ b/SOURCES/0013-gpt-auto-generator-exit-immediately-if-in-container.patch
@@ -0,0 +1,37 @@
+From 650b4c3e4e004acfe7c201fd8a3e9d9c87824593 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Thu, 3 Oct 2013 22:13:01 -0400
+Subject: [PATCH] gpt-auto-generator: exit immediately if in container
+
+Otherwise we get an ugly warning when running systemd in
+a container.
+---
+ src/gpt-auto-generator/gpt-auto-generator.c | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/src/gpt-auto-generator/gpt-auto-generator.c b/src/gpt-auto-generator/gpt-auto-generator.c
+index ca54925..d2b4213 100644
+--- a/src/gpt-auto-generator/gpt-auto-generator.c
++++ b/src/gpt-auto-generator/gpt-auto-generator.c
+@@ -38,6 +38,7 @@
+ #include "libudev.h"
+ #include "special.h"
+ #include "unit-name.h"
++#include "virt.h"
+ 
+ /* TODO:
+  *
+@@ -481,6 +482,13 @@ int main(int argc, char *argv[]) {
+         umask(0022);
+ 
+         if (in_initrd()) {
++                log_debug("In initrd, exiting.");
++                r = 0;
++                goto finish;
++        }
++
++        if (detect_container(NULL) > 0) {
++                log_debug("In a container, exiting.");
+                 r = 0;
+                 goto finish;
+         }
diff --git a/SOURCES/0013-update-TODO.patch b/SOURCES/0013-update-TODO.patch
deleted file mode 100644
index 53c15ec..0000000
--- a/SOURCES/0013-update-TODO.patch
+++ /dev/null
@@ -1,24 +0,0 @@
-From f11f72532fd9a05149714229cb7559b8e3fa802a Mon Sep 17 00:00:00 2001
-From: Lennart Poettering <lennart@poettering.net>
-Date: Fri, 13 Sep 2013 14:28:17 +0200
-Subject: [PATCH] update TODO
-
----
- TODO | 4 ++++
- 1 file changed, 4 insertions(+)
-
-diff --git a/TODO b/TODO
-index 5354692..9943b3e 100644
---- a/TODO
-+++ b/TODO
-@@ -60,6 +60,10 @@ Features:
- 
- * Move backlight and random-seed into /var/lib/systemd
- 
-+* If we try to find a unit via a danglign symlink generate a clean
-+  error. Currently we just ignore it and read the unit from the search
-+  path anyway.
-+
- * When a Type=forking service fails and needed another service that
-   service is not cleaned up again when it has StopWhenUnneeded=yes
-   http://lists.freedesktop.org/archives/systemd-devel/2013-July/012141.html
diff --git a/SOURCES/0014-libudev-fix-move_later-comparison.patch b/SOURCES/0014-libudev-fix-move_later-comparison.patch
deleted file mode 100644
index 4301b0c..0000000
--- a/SOURCES/0014-libudev-fix-move_later-comparison.patch
+++ /dev/null
@@ -1,24 +0,0 @@
-From 3b93bf5a35b0bb7111754fbae75e7654b775506d Mon Sep 17 00:00:00 2001
-From: Lukas Nykryn <lnykryn@redhat.com>
-Date: Fri, 13 Sep 2013 14:12:54 +0200
-Subject: [PATCH] libudev: fix move_later comparison
-
-At the beginning move_later is set to -1, but it is set to different
-value only if expression !move_later is true.
----
- src/libudev/libudev-enumerate.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/libudev/libudev-enumerate.c b/src/libudev/libudev-enumerate.c
-index bc1e37d..8146f27 100644
---- a/src/libudev/libudev-enumerate.c
-+++ b/src/libudev/libudev-enumerate.c
-@@ -300,7 +300,7 @@ _public_ struct udev_list_entry *udev_enumerate_get_list_entry(struct udev_enume
-                         /* skip to be delayed devices, and move the to
-                          * the point where the prefix changes. We can
-                          * only move one item at a time. */
--                        if (!move_later) {
-+                        if (move_later == -1) {
-                                 move_later_prefix = devices_delay_later(udev_enumerate->udev, entry->syspath);
- 
-                                 if (move_later_prefix > 0) {
diff --git a/SOURCES/0014-systemd-order-remote-mounts-from-mountinfo-before-re.patch b/SOURCES/0014-systemd-order-remote-mounts-from-mountinfo-before-re.patch
new file mode 100644
index 0000000..e89d7f2
--- /dev/null
+++ b/SOURCES/0014-systemd-order-remote-mounts-from-mountinfo-before-re.patch
@@ -0,0 +1,38 @@
+From d41259fcb7dac4f1bb02dbc743d5372827d3c01a Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Thu, 3 Oct 2013 22:15:08 -0400
+Subject: [PATCH] systemd: order remote mounts from mountinfo before
+ remote-fs.target
+
+Usually the network is stopped before filesystems are umounted.
+Ordering network filesystems before remote-fs.target means that their
+unmounting will be performed earlier, and can terminate sucessfully.
+
+https://bugs.freedesktop.org/show_bug.cgi?id=70002
+---
+ src/core/mount.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/src/core/mount.c b/src/core/mount.c
+index 3d46557..93bfa99 100644
+--- a/src/core/mount.c
++++ b/src/core/mount.c
+@@ -1440,6 +1440,9 @@ static int mount_add_one(
+ 
+         u = manager_get_unit(m, e);
+         if (!u) {
++                const char* const target =
++                        fstype_is_network(fstype) ? SPECIAL_REMOTE_FS_TARGET : SPECIAL_LOCAL_FS_TARGET;
++
+                 delete = true;
+ 
+                 u = unit_new(m, sizeof(Mount));
+@@ -1466,7 +1469,7 @@ static int mount_add_one(
+                         goto fail;
+                 }
+ 
+-                r = unit_add_dependency_by_name(u, UNIT_BEFORE, SPECIAL_LOCAL_FS_TARGET, NULL, true);
++                r = unit_add_dependency_by_name(u, UNIT_BEFORE, target, NULL, true);
+                 if (r < 0)
+                         goto fail;
+ 
diff --git a/SOURCES/0015-man-document-luks.options-kernel-commandline.patch b/SOURCES/0015-man-document-luks.options-kernel-commandline.patch
deleted file mode 100644
index 542a589..0000000
--- a/SOURCES/0015-man-document-luks.options-kernel-commandline.patch
+++ /dev/null
@@ -1,23 +0,0 @@
-From 583f4eb5d443bc09502d6973f08755173db43fd8 Mon Sep 17 00:00:00 2001
-From: Tom Gundersen <teg@jklm.no>
-Date: Fri, 13 Sep 2013 21:03:55 +0200
-Subject: [PATCH] man: document luks.options kernel commandline
-
-This should have been part of commit 7ab064a6d
----
- man/kernel-command-line.xml | 2 ++
- 1 file changed, 2 insertions(+)
-
-diff --git a/man/kernel-command-line.xml b/man/kernel-command-line.xml
-index a4b7d13..cc267a3 100644
---- a/man/kernel-command-line.xml
-+++ b/man/kernel-command-line.xml
-@@ -250,6 +250,8 @@
-                                 <term><varname>rd.luks.crypttab=</varname></term>
-                                 <term><varname>luks.uuid=</varname></term>
-                                 <term><varname>rd.luks.uuid=</varname></term>
-+                                <term><varname>luks.options=</varname></term>
-+                                <term><varname>rd.luks.options=</varname></term>
-                                 <term><varname>luks.key=</varname></term>
-                                 <term><varname>rd.luks.key=</varname></term>
- 
diff --git a/SOURCES/0015-manager-when-verifying-whether-clients-may-change-en.patch b/SOURCES/0015-manager-when-verifying-whether-clients-may-change-en.patch
new file mode 100644
index 0000000..20a77f3
--- /dev/null
+++ b/SOURCES/0015-manager-when-verifying-whether-clients-may-change-en.patch
@@ -0,0 +1,42 @@
+From f4d7751752e7d2d2393078daef342e54368468d7 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart@poettering.net>
+Date: Fri, 4 Oct 2013 17:01:37 +0200
+Subject: [PATCH] manager: when verifying whether clients may change
+ environment using selinux check for "reload" rather "reboot"
+
+This appears to be a copy/paste error.
+---
+ src/core/dbus-manager.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/src/core/dbus-manager.c b/src/core/dbus-manager.c
+index 676a07f..8f4d017 100644
+--- a/src/core/dbus-manager.c
++++ b/src/core/dbus-manager.c
+@@ -1397,7 +1397,7 @@ static DBusHandlerResult bus_manager_message_handler(DBusConnection *connection,
+                 _cleanup_strv_free_ char **l = NULL;
+                 char **e = NULL;
+ 
+-                SELINUX_ACCESS_CHECK(connection, message, "reboot");
++                SELINUX_ACCESS_CHECK(connection, message, "reload");
+ 
+                 r = bus_parse_strv(message, &l);
+                 if (r == -ENOMEM)
+@@ -1424,7 +1424,7 @@ static DBusHandlerResult bus_manager_message_handler(DBusConnection *connection,
+                 _cleanup_strv_free_ char **l = NULL;
+                 char **e = NULL;
+ 
+-                SELINUX_ACCESS_CHECK(connection, message, "reboot");
++                SELINUX_ACCESS_CHECK(connection, message, "reload");
+ 
+                 r = bus_parse_strv(message, &l);
+                 if (r == -ENOMEM)
+@@ -1452,7 +1452,7 @@ static DBusHandlerResult bus_manager_message_handler(DBusConnection *connection,
+                 char **f = NULL;
+                 DBusMessageIter iter;
+ 
+-                SELINUX_ACCESS_CHECK(connection, message, "reboot");
++                SELINUX_ACCESS_CHECK(connection, message, "reload");
+ 
+                 if (!dbus_message_iter_init(message, &iter))
+                         goto oom;
diff --git a/SOURCES/0016-keymap-remove-some-commented-out-lines.patch b/SOURCES/0016-keymap-remove-some-commented-out-lines.patch
deleted file mode 100644
index 0a5896d..0000000
--- a/SOURCES/0016-keymap-remove-some-commented-out-lines.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-From f559cb147ae336f62a9020fa909b70ea90e43886 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
-Date: Wed, 28 Aug 2013 17:23:59 -0400
-Subject: [PATCH] keymap: remove some commented out lines
-
----
- hwdb/60-keyboard.hwdb | 6 ------
- 1 file changed, 6 deletions(-)
-
-diff --git a/hwdb/60-keyboard.hwdb b/hwdb/60-keyboard.hwdb
-index eca3f55..53e83ad 100644
---- a/hwdb/60-keyboard.hwdb
-+++ b/hwdb/60-keyboard.hwdb
-@@ -894,11 +894,6 @@ keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*200E[45]*:pvr*
- # Series 5
- keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*700Z*:pvr*
-  KEYBOARD_KEY_ce=!prog1                                 # Fn+F1 launch settings
--#KEYBOARD_KEY_89=!brightnessdown                        # Fn+F2 
--#KEYBOARD_KEY_88=!brightnessup                          # Fn+F3 
--#KEYBOARD_KEY_82=!switchvideomode                       # Fn+F4 video output
--#KEYBOARD_KEY_f9=!f23                                   # Fn+F5 touchpad turn OFF
--#KEYBOARD_KEY_f7=!f22                                   # Fn+F5 touchpad turn ON
-  KEYBOARD_KEY_a0=!mute                                  # Fn+F6 mute
-  KEYBOARD_KEY_ae=!volumedown                            # Fn+F7
-  KEYBOARD_KEY_b0=!volumeup                              # Fn+F8
-@@ -906,7 +901,6 @@ keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*700Z*:pvr*
-  KEYBOARD_KEY_96=!kbdillumup                            # Fn+F10 keyboard backlight up
-  KEYBOARD_KEY_b3=!prog3                                 # Fn+F11 fan/cooling mode changer
-  KEYBOARD_KEY_d5=!wlan                                  # Fn+F12 wlan/airplane switch
--# KEYBOARD_KEY_ba=!ejectcd                               # Fn+DEL eject cd
- 
- # Series 9
- keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*90X3A*:pvr*
diff --git a/SOURCES/0016-mount-check-for-NULL-before-reading-pm-what.patch b/SOURCES/0016-mount-check-for-NULL-before-reading-pm-what.patch
new file mode 100644
index 0000000..1722a3d
--- /dev/null
+++ b/SOURCES/0016-mount-check-for-NULL-before-reading-pm-what.patch
@@ -0,0 +1,26 @@
+From 172b60ee7366d5e46b240386824682e4c051ad9e Mon Sep 17 00:00:00 2001
+From: Dave Reisner <dreisner@archlinux.org>
+Date: Fri, 4 Oct 2013 18:22:40 -0400
+Subject: [PATCH] mount: check for NULL before reading pm->what
+
+Since a57f7e2c828b85, a mount unit with garbage in it would cause
+systemd to crash on loading it.
+
+ref: https://bugs.freedesktop.org/show_bug.cgi?id=70148
+---
+ src/core/mount.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/core/mount.c b/src/core/mount.c
+index 93bfa99..db055f0 100644
+--- a/src/core/mount.c
++++ b/src/core/mount.c
+@@ -182,7 +182,7 @@ static int mount_add_mount_links(Mount *m) {
+          * for the source path (if this is a bind mount) to be
+          * available. */
+         pm = get_mount_parameters_fragment(m);
+-        if (pm && path_is_absolute(pm->what)) {
++        if (pm && pm->what && path_is_absolute(pm->what)) {
+                 r = unit_require_mounts_for(UNIT(m), pm->what);
+                 if (r < 0)
+                         return r;
diff --git a/SOURCES/0017-Advertise-hibernation-only-if-there-s-enough-free-sw.patch b/SOURCES/0017-Advertise-hibernation-only-if-there-s-enough-free-sw.patch
deleted file mode 100644
index 3ce4abf..0000000
--- a/SOURCES/0017-Advertise-hibernation-only-if-there-s-enough-free-sw.patch
+++ /dev/null
@@ -1,259 +0,0 @@
-From 3559039a97e1d3e28dd9b38202d3499652a58036 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
-Date: Fri, 13 Sep 2013 19:41:52 -0400
-Subject: [PATCH] Advertise hibernation only if there's enough free swap
-
-Condition that is checked is taken from upower:
-  active(anon) < free swap * 0.98
-
-This is really stupid, because the kernel knows the situation better,
-e.g. there could be two swap files, and then hibernation would be
-impossible despite passing this check, or the kernel could start
-supporting compressed swap and/or compressed hibernation images, and
-then this this check would be too stringent. Nevertheless, until
-we have something better, this should at least return a true negative
-if there's no swap.
-
-Logging of capabilities in the journal is changed to not strip leading
-zeros. I consider this more readable anyway.
-
-http://cgit.freedesktop.org/upower/tree/src/up-daemon.c#n613
-https://bugzilla.redhat.com/show_bug.cgi?id=1007059
----
- src/shared/fileio.c       | 34 ++++++++++++++++++++++++++++++++++
- src/shared/fileio.h       |  2 ++
- src/shared/logs-show.c    |  2 +-
- src/shared/sleep-config.c | 45 ++++++++++++++++++++++++++++++++++++++++++++-
- src/shared/util.c         | 23 +----------------------
- src/test/test-fileio.c    | 20 ++++++++++++++++++++
- src/test/test-sleep.c     | 16 ++++++++--------
- 7 files changed, 110 insertions(+), 32 deletions(-)
-
-diff --git a/src/shared/fileio.c b/src/shared/fileio.c
-index 77fd059..4e2b444 100644
---- a/src/shared/fileio.c
-+++ b/src/shared/fileio.c
-@@ -648,3 +648,37 @@ int executable_is_script(const char *path, char **interpreter) {
-         *interpreter = ans;
-         return 1;
- }
-+
-+/**
-+ * Retrieve one field from a file like /proc/self/status.
-+ * pattern should start with '\n' and end with ':'. Whitespace
-+ * after ':' will be skipped. field must be freed afterwards.
-+ */
-+int get_status_field(const char *filename, const char *pattern, char **field) {
-+        _cleanup_free_ char *status = NULL;
-+        char *t;
-+        size_t len;
-+        int r;
-+
-+        assert(filename);
-+        assert(field);
-+
-+        r = read_full_file(filename, &status, NULL);
-+        if (r < 0)
-+                return r;
-+
-+        t = strstr(status, pattern);
-+        if (!t)
-+                return -ENOENT;
-+
-+        t += strlen(pattern);
-+        t += strspn(t, WHITESPACE);
-+
-+        len = strcspn(t, WHITESPACE);
-+
-+        *field = strndup(t, len);
-+        if (!*field)
-+                return -ENOMEM;
-+
-+        return 0;
-+}
-diff --git a/src/shared/fileio.h b/src/shared/fileio.h
-index a0aae28..59e4150 100644
---- a/src/shared/fileio.h
-+++ b/src/shared/fileio.h
-@@ -37,3 +37,5 @@ int load_env_file(const char *fname, const char *separator, char ***l);
- int write_env_file(const char *fname, char **l);
- 
- int executable_is_script(const char *path, char **interpreter);
-+
-+int get_status_field(const char *filename, const char *pattern, char **field);
-diff --git a/src/shared/logs-show.c b/src/shared/logs-show.c
-index 87633e7..f50777c 100644
---- a/src/shared/logs-show.c
-+++ b/src/shared/logs-show.c
-@@ -201,7 +201,7 @@ static int output_short(
-         assert(j);
- 
-         /* Set the threshold to one bigger than the actual print
--         * treshold, so that if the line is actually longer than what
-+         * threshold, so that if the line is actually longer than what
-          * we're willing to print, ellipsization will occur. This way
-          * we won't output a misleading line without any indication of
-          * truncation.
-diff --git a/src/shared/sleep-config.c b/src/shared/sleep-config.c
-index cd3238b..5ec7cce 100644
---- a/src/shared/sleep-config.c
-+++ b/src/shared/sleep-config.c
-@@ -163,6 +163,46 @@ int can_sleep_disk(char **types) {
-         return false;
- }
- 
-+#define HIBERNATION_SWAP_THRESHOLD 0.98
-+
-+static bool enough_memory_for_hibernation(void) {
-+        _cleanup_free_ char *active = NULL, *swapfree = NULL;
-+        unsigned long long act, swap;
-+        int r;
-+
-+        r = get_status_field("/proc/meminfo", "\nSwapFree:", &swapfree);
-+        if (r < 0) {
-+                log_error("Failed to retrieve SwapFree from /proc/meminfo: %s", strerror(-r));
-+                return false;
-+        }
-+
-+        r = safe_atollu(swapfree, &swap);
-+        if (r < 0) {
-+                log_error("Failed to parse SwapFree from /proc/meminfo: %s: %s",
-+                          swapfree, strerror(-r));
-+                return false;
-+        }
-+
-+        r = get_status_field("/proc/meminfo", "\nActive(anon):", &active);
-+        if (r < 0) {
-+                log_error("Failed to retrieve Active(anon) from /proc/meminfo: %s", strerror(-r));
-+                return false;
-+        }
-+
-+        r = safe_atollu(active, &act);
-+        if (r < 0) {
-+                log_error("Failed to parse Active(anon) from /proc/meminfo: %s: %s",
-+                          active, strerror(-r));
-+                return false;
-+        }
-+
-+        r = act <= swap * HIBERNATION_SWAP_THRESHOLD;
-+        log_debug("Hibernation is %spossible, Active(anon)=%llu kB, SwapFree=%llu kB, threshold=%.2g%%",
-+                  r ? "" : "im", act, swap, 100*HIBERNATION_SWAP_THRESHOLD);
-+
-+        return r;
-+}
-+
- int can_sleep(const char *verb) {
-         _cleanup_strv_free_ char **modes = NULL, **states = NULL;
-         int r;
-@@ -175,5 +215,8 @@ int can_sleep(const char *verb) {
-         if (r < 0)
-                 return false;
- 
--        return can_sleep_state(states) && can_sleep_disk(modes);
-+        if (!can_sleep_state(states) || !can_sleep_disk(modes))
-+                return false;
-+
-+        return streq(verb, "suspend") || enough_memory_for_hibernation();
- }
-diff --git a/src/shared/util.c b/src/shared/util.c
-index 9a075fa..f6f3b18 100644
---- a/src/shared/util.c
-+++ b/src/shared/util.c
-@@ -694,9 +694,6 @@ int is_kernel_thread(pid_t pid) {
- 
- int get_process_capeff(pid_t pid, char **capeff) {
-         const char *p;
--        _cleanup_free_ char *status = NULL;
--        char *t = NULL;
--        int r;
- 
-         assert(capeff);
-         assert(pid >= 0);
-@@ -706,25 +703,7 @@ int get_process_capeff(pid_t pid, char **capeff) {
-         else
-                 p = procfs_file_alloca(pid, "status");
- 
--        r = read_full_file(p, &status, NULL);
--        if (r < 0)
--                return r;
--
--        t = strstr(status, "\nCapEff:\t");
--        if (!t)
--                return -ENOENT;
--
--        for (t += strlen("\nCapEff:\t"); t[0] == '0'; t++)
--                continue;
--
--        if (t[0] == '\n')
--                t--;
--
--        *capeff = strndup(t, strchr(t, '\n') - t);
--        if (!*capeff)
--                return -ENOMEM;
--
--        return 0;
-+        return get_status_field(p, "\nCapEff:", capeff);
- }
- 
- int get_process_exe(pid_t pid, char **name) {
-diff --git a/src/test/test-fileio.c b/src/test/test-fileio.c
-index 1184e7e..4a4ed79 100644
---- a/src/test/test-fileio.c
-+++ b/src/test/test-fileio.c
-@@ -229,9 +229,29 @@ static void test_executable_is_script(void) {
-         unlink(t);
- }
- 
-+static void test_status_field(void) {
-+        _cleanup_free_ char *t = NULL, *p = NULL, *s = NULL;
-+        unsigned long long total, buffers;
-+
-+        assert_se(get_status_field("/proc/self/status", "\nThreads:", &t) == 0);
-+        puts(t);
-+        assert_se(streq(t, "1"));
-+
-+        assert_se(get_status_field("/proc/meminfo", "MemTotal:", &p) == 0);
-+        puts(p);
-+        assert_se(safe_atollu(p, &total) == 0);
-+
-+        assert_se(get_status_field("/proc/meminfo", "\nBuffers:", &s) == 0);
-+        puts(s);
-+        assert_se(safe_atollu(s, &buffers) == 0);
-+
-+        assert(buffers < total);
-+}
-+
- int main(int argc, char *argv[]) {
-         test_parse_env_file();
-         test_parse_multiline_env_file();
-         test_executable_is_script();
-+        test_status_field();
-         return 0;
- }
-diff --git a/src/test/test-sleep.c b/src/test/test-sleep.c
-index c3cb9c5..545dfab 100644
---- a/src/test/test-sleep.c
-+++ b/src/test/test-sleep.c
-@@ -40,14 +40,14 @@ int main(int argc, char* argv[]) {
-                 **shutdown = strv_new("shutdown", NULL),
-                 **freez = strv_new("freeze", NULL);
- 
--        log_info("Can Standby: %s", yes_no(can_sleep_state(standby) > 0));
--        log_info("Can Suspend: %s", yes_no(can_sleep_state(mem) > 0));
--        log_info("Can Hibernate: %s", yes_no(can_sleep_state(disk) > 0));
--        log_info("Can Hibernate+Suspend (Hybrid-Sleep): %s", yes_no(can_sleep_disk(suspend) > 0));
--        log_info("Can Hibernate+Reboot: %s", yes_no(can_sleep_disk(reboot) > 0));
--        log_info("Can Hibernate+Platform: %s", yes_no(can_sleep_disk(platform) > 0));
--        log_info("Can Hibernate+Shutdown: %s", yes_no(can_sleep_disk(shutdown) > 0));
--        log_info("Can Freeze: %s", yes_no(can_sleep_disk(freez) > 0));
-+        log_info("Standby configured: %s", yes_no(can_sleep_state(standby) > 0));
-+        log_info("Suspend configured: %s", yes_no(can_sleep_state(mem) > 0));
-+        log_info("Hibernate configured: %s", yes_no(can_sleep_state(disk) > 0));
-+        log_info("Hibernate+Suspend (Hybrid-Sleep) configured: %s", yes_no(can_sleep_disk(suspend) > 0));
-+        log_info("Hibernate+Reboot configured: %s", yes_no(can_sleep_disk(reboot) > 0));
-+        log_info("Hibernate+Platform configured: %s", yes_no(can_sleep_disk(platform) > 0));
-+        log_info("Hibernate+Shutdown configured: %s", yes_no(can_sleep_disk(shutdown) > 0));
-+        log_info("Freeze configured: %s", yes_no(can_sleep_state(freez) > 0));
- 
-         log_info("Suspend configured and possible: %s", yes_no(can_sleep("suspend") > 0));
-         log_info("Hibernation configured and possible: %s", yes_no(can_sleep("hibernate") > 0));
diff --git a/SOURCES/0017-core-do-not-add-what-to-RequiresMountsFor-for-networ.patch b/SOURCES/0017-core-do-not-add-what-to-RequiresMountsFor-for-networ.patch
new file mode 100644
index 0000000..80c2c54
--- /dev/null
+++ b/SOURCES/0017-core-do-not-add-what-to-RequiresMountsFor-for-networ.patch
@@ -0,0 +1,178 @@
+From 980112adcce965de6808390330750aaf11c165ab Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Sat, 5 Oct 2013 13:09:43 -0400
+Subject: [PATCH] core: do not add "what" to RequiresMountsFor for network
+ mounts
+
+For cifs mount like //server/share, we would get
+RequiresMountsFor=/server/share, which probably isn't
+harmful, but quite confusing.
+
+Unfortunately a bunch of static functions had to be moved
+up, but patch is really one line.
+---
+ src/core/mount.c | 137 ++++++++++++++++++++++++++++---------------------------
+ 1 file changed, 70 insertions(+), 67 deletions(-)
+
+diff --git a/src/core/mount.c b/src/core/mount.c
+index db055f0..70cd372 100644
+--- a/src/core/mount.c
++++ b/src/core/mount.c
+@@ -59,6 +59,72 @@ static const UnitActiveState state_translation_table[_MOUNT_STATE_MAX] = {
+         [MOUNT_FAILED] = UNIT_FAILED
+ };
+ 
++static char* mount_test_option(const char *haystack, const char *needle) {
++        struct mntent me = { .mnt_opts = (char*) haystack };
++
++        assert(needle);
++
++        /* Like glibc's hasmntopt(), but works on a string, not a
++         * struct mntent */
++
++        if (!haystack)
++                return NULL;
++
++        return hasmntopt(&me, needle);
++}
++
++static bool mount_is_network(MountParameters *p) {
++        assert(p);
++
++        if (mount_test_option(p->options, "_netdev"))
++                return true;
++
++        if (p->fstype && fstype_is_network(p->fstype))
++                return true;
++
++        return false;
++}
++
++static bool mount_is_bind(MountParameters *p) {
++        assert(p);
++
++        if (mount_test_option(p->options, "bind"))
++                return true;
++
++        if (p->fstype && streq(p->fstype, "bind"))
++                return true;
++
++        if (mount_test_option(p->options, "rbind"))
++                return true;
++
++        if (p->fstype && streq(p->fstype, "rbind"))
++                return true;
++
++        return false;
++}
++
++static bool mount_is_auto(MountParameters *p) {
++        assert(p);
++
++        return !mount_test_option(p->options, "noauto");
++}
++
++static bool needs_quota(MountParameters *p) {
++        assert(p);
++
++        if (mount_is_network(p))
++                return false;
++
++        if (mount_is_bind(p))
++                return false;
++
++        return mount_test_option(p->options, "usrquota") ||
++                mount_test_option(p->options, "grpquota") ||
++                mount_test_option(p->options, "quota") ||
++                mount_test_option(p->options, "usrjquota") ||
++                mount_test_option(p->options, "grpjquota");
++}
++
+ static void mount_init(Unit *u) {
+         Mount *m = MOUNT(u);
+ 
+@@ -182,7 +248,10 @@ static int mount_add_mount_links(Mount *m) {
+          * for the source path (if this is a bind mount) to be
+          * available. */
+         pm = get_mount_parameters_fragment(m);
+-        if (pm && pm->what && path_is_absolute(pm->what)) {
++        if (pm && pm->what &&
++            path_is_absolute(pm->what) &&
++            !mount_is_network(pm)) {
++
+                 r = unit_require_mounts_for(UNIT(m), pm->what);
+                 if (r < 0)
+                         return r;
+@@ -214,72 +283,6 @@ static int mount_add_mount_links(Mount *m) {
+         return 0;
+ }
+ 
+-static char* mount_test_option(const char *haystack, const char *needle) {
+-        struct mntent me = { .mnt_opts = (char*) haystack };
+-
+-        assert(needle);
+-
+-        /* Like glibc's hasmntopt(), but works on a string, not a
+-         * struct mntent */
+-
+-        if (!haystack)
+-                return NULL;
+-
+-        return hasmntopt(&me, needle);
+-}
+-
+-static bool mount_is_network(MountParameters *p) {
+-        assert(p);
+-
+-        if (mount_test_option(p->options, "_netdev"))
+-                return true;
+-
+-        if (p->fstype && fstype_is_network(p->fstype))
+-                return true;
+-
+-        return false;
+-}
+-
+-static bool mount_is_bind(MountParameters *p) {
+-        assert(p);
+-
+-        if (mount_test_option(p->options, "bind"))
+-                return true;
+-
+-        if (p->fstype && streq(p->fstype, "bind"))
+-                return true;
+-
+-        if (mount_test_option(p->options, "rbind"))
+-                return true;
+-
+-        if (p->fstype && streq(p->fstype, "rbind"))
+-                return true;
+-
+-        return false;
+-}
+-
+-static bool mount_is_auto(MountParameters *p) {
+-        assert(p);
+-
+-        return !mount_test_option(p->options, "noauto");
+-}
+-
+-static bool needs_quota(MountParameters *p) {
+-        assert(p);
+-
+-        if (mount_is_network(p))
+-                return false;
+-
+-        if (mount_is_bind(p))
+-                return false;
+-
+-        return mount_test_option(p->options, "usrquota") ||
+-                mount_test_option(p->options, "grpquota") ||
+-                mount_test_option(p->options, "quota") ||
+-                mount_test_option(p->options, "usrjquota") ||
+-                mount_test_option(p->options, "grpjquota");
+-}
+-
+ static int mount_add_device_links(Mount *m) {
+         MountParameters *p;
+         bool device_wants_mount = false;
diff --git a/SOURCES/0018-README-add-SCSI-BSG-option.patch b/SOURCES/0018-README-add-SCSI-BSG-option.patch
deleted file mode 100644
index 0653ac8..0000000
--- a/SOURCES/0018-README-add-SCSI-BSG-option.patch
+++ /dev/null
@@ -1,24 +0,0 @@
-From 64a94f1e45890eaeb5880dbd2044265e17023067 Mon Sep 17 00:00:00 2001
-From: Kay Sievers <kay@vrfy.org>
-Date: Sun, 15 Sep 2013 07:29:25 +0200
-Subject: [PATCH] README: add SCSI BSG option
-
----
- README | 4 ++++
- 1 file changed, 4 insertions(+)
-
-diff --git a/README b/README
-index a16f342..b39cd37 100644
---- a/README
-+++ b/README
-@@ -64,6 +64,10 @@ REQUIREMENTS:
-         Mount and bind mount handling might require it:
-           CONFIG_FHANDLE
- 
-+        Support for some SCSI devices serial number retrieval, to
-+        create additional symlinks in /dev/disk/ and /dev/tape:
-+          CONFIG_BLK_DEV_BSG
-+
-         Optional but strongly recommended:
-           CONFIG_IPV6
-           CONFIG_AUTOFS4_FS
diff --git a/SOURCES/0018-systemd-serialize-deserialize-forbid_restart-value.patch b/SOURCES/0018-systemd-serialize-deserialize-forbid_restart-value.patch
new file mode 100644
index 0000000..b0eceb8
--- /dev/null
+++ b/SOURCES/0018-systemd-serialize-deserialize-forbid_restart-value.patch
@@ -0,0 +1,48 @@
+From d5a7089608ccde2302b185ec367165c8b5623a12 Mon Sep 17 00:00:00 2001
+From: Sylvia Else <sylviabz1@cryogenic.net>
+Date: Sun, 6 Oct 2013 23:06:35 -0400
+Subject: [PATCH] systemd: serialize/deserialize forbid_restart value
+
+The Service type's forbid_restart field was not preserved by
+serialization/deserialization, so the fact that the service should not
+be restarted after stopping was lost.
+
+If a systemctl stop foo command has been given, but the foo service
+has not yet stopped, and then the systemctl --system daemon-reload was
+given, then when the foo service eventually stopped, systemd would
+restart it.
+
+https://bugs.freedesktop.org/show_bug.cgi?id=69800
+---
+ src/core/service.c | 11 +++++++++++
+ 1 file changed, 11 insertions(+)
+
+diff --git a/src/core/service.c b/src/core/service.c
+index 6792024..98b1599 100644
+--- a/src/core/service.c
++++ b/src/core/service.c
+@@ -2651,6 +2651,9 @@ static int service_serialize(Unit *u, FILE *f, FDSet *fds) {
+         if (s->exec_context.var_tmp_dir)
+                 unit_serialize_item(u, f, "var-tmp-dir", s->exec_context.var_tmp_dir);
+ 
++        if (s->forbid_restart)
++                unit_serialize_item(u, f, "forbid_restart", yes_no(s->forbid_restart));
++
+         return 0;
+ }
+ 
+@@ -2787,6 +2790,14 @@ static int service_deserialize_item(Unit *u, const char *key, const char *value,
+                         return log_oom();
+ 
+                 s->exec_context.var_tmp_dir = t;
++        } else if (streq(key, "forbid_restart")) {
++                int b;
++
++                b = parse_boolean(value);
++                if (b < 0)
++                        log_debug_unit(u->id, "Failed to parse forbid_restart value %s", value);
++                else
++                        s->forbid_restart = b;
+         } else
+                 log_debug_unit(u->id, "Unknown serialization key '%s'", key);
+ 
diff --git a/SOURCES/0019-core-unify-the-way-we-denote-serialization-attribute.patch b/SOURCES/0019-core-unify-the-way-we-denote-serialization-attribute.patch
new file mode 100644
index 0000000..5624168
--- /dev/null
+++ b/SOURCES/0019-core-unify-the-way-we-denote-serialization-attribute.patch
@@ -0,0 +1,37 @@
+From e409d591e0d9ae65d351cf32ae7cb79def50f009 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart@poettering.net>
+Date: Wed, 9 Oct 2013 00:13:55 +0200
+Subject: [PATCH] core: unify the way we denote serialization attributes
+
+---
+ src/core/service.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/src/core/service.c b/src/core/service.c
+index 98b1599..96ed2d3 100644
+--- a/src/core/service.c
++++ b/src/core/service.c
+@@ -2652,7 +2652,7 @@ static int service_serialize(Unit *u, FILE *f, FDSet *fds) {
+                 unit_serialize_item(u, f, "var-tmp-dir", s->exec_context.var_tmp_dir);
+ 
+         if (s->forbid_restart)
+-                unit_serialize_item(u, f, "forbid_restart", yes_no(s->forbid_restart));
++                unit_serialize_item(u, f, "forbid-restart", yes_no(s->forbid_restart));
+ 
+         return 0;
+ }
+@@ -2790,12 +2790,12 @@ static int service_deserialize_item(Unit *u, const char *key, const char *value,
+                         return log_oom();
+ 
+                 s->exec_context.var_tmp_dir = t;
+-        } else if (streq(key, "forbid_restart")) {
++        } else if (streq(key, "forbid-restart")) {
+                 int b;
+ 
+                 b = parse_boolean(value);
+                 if (b < 0)
+-                        log_debug_unit(u->id, "Failed to parse forbid_restart value %s", value);
++                        log_debug_unit(u->id, "Failed to parse forbid-restart value %s", value);
+                 else
+                         s->forbid_restart = b;
+         } else
diff --git a/SOURCES/0019-swap-create-.wants-symlink-to-auto-swap-devices.patch b/SOURCES/0019-swap-create-.wants-symlink-to-auto-swap-devices.patch
deleted file mode 100644
index 0c3dd14..0000000
--- a/SOURCES/0019-swap-create-.wants-symlink-to-auto-swap-devices.patch
+++ /dev/null
@@ -1,87 +0,0 @@
-From c1f9c15f319f7dfb96bcbf2c3cf879f2b4457350 Mon Sep 17 00:00:00 2001
-From: Tom Gundersen <teg@jklm.no>
-Date: Mon, 16 Sep 2013 01:08:32 +0200
-Subject: [PATCH] swap: create .wants symlink to 'auto' swap devices
-
-As we load unit files lazily, we need to make sure something pulls in swap
-units that should be started automatically, otherwise the default dependencies
-will never be applied.
-
-This partially reinstates code removed in
-commit 64347fc2b983f33e7efb0fd2bb44e133fb9f30f4.
-
-Also don't order swap devices after swap.target when they are 'nofail'.
----
- src/core/swap.c                       |  8 ++++++--
- src/fstab-generator/fstab-generator.c | 18 ++++++++++++++++--
- 2 files changed, 22 insertions(+), 4 deletions(-)
-
-diff --git a/src/core/swap.c b/src/core/swap.c
-index 3950860..76c7d45 100644
---- a/src/core/swap.c
-+++ b/src/core/swap.c
-@@ -220,8 +220,12 @@ static int swap_add_default_dependencies(Swap *s) {
-         }
- 
-         if (!noauto) {
--                r = unit_add_two_dependencies_by_name_inverse(UNIT(s), UNIT_AFTER, (nofail ? UNIT_WANTS : UNIT_REQUIRES),
--                                                      SPECIAL_SWAP_TARGET, NULL, true);
-+                if (nofail)
-+                        r = unit_add_dependency_by_name_inverse(UNIT(s),
-+                                UNIT_WANTS, SPECIAL_SWAP_TARGET, NULL, true);
-+                else
-+                        r = unit_add_two_dependencies_by_name_inverse(UNIT(s),
-+                                UNIT_AFTER, UNIT_REQUIRES, SPECIAL_SWAP_TARGET, NULL, true);
-                 if (r < 0)
-                         return r;
-         }
-diff --git a/src/fstab-generator/fstab-generator.c b/src/fstab-generator/fstab-generator.c
-index 6ebe8aa..b73dfa4 100644
---- a/src/fstab-generator/fstab-generator.c
-+++ b/src/fstab-generator/fstab-generator.c
-@@ -66,6 +66,7 @@ static int mount_find_pri(struct mntent *me, int *ret) {
- static int add_swap(const char *what, struct mntent *me) {
-         _cleanup_free_ char *name = NULL, *unit = NULL, *lnk = NULL, *device = NULL;
-         _cleanup_fclose_ FILE *f = NULL;
-+        bool noauto;
-         int r, pri = -1;
- 
-         assert(what);
-@@ -77,6 +78,8 @@ static int add_swap(const char *what, struct mntent *me) {
-                 return pri;
-         }
- 
-+        noauto = !!hasmntopt(me, "noauto");
-+
-         name = unit_name_from_path(what, ".swap");
-         if (!name)
-                 return log_oom();
-@@ -97,8 +100,7 @@ static int add_swap(const char *what, struct mntent *me) {
-         fprintf(f,
-                 "# Automatically generated by systemd-fstab-generator\n\n"
-                 "[Unit]\n"
--                "SourcePath=/etc/fstab\n"
--                "\n"
-+                "SourcePath=/etc/fstab\n\n"
-                 "[Swap]\n"
-                 "What=%s\n",
-                 what);
-@@ -114,6 +116,18 @@ static int add_swap(const char *what, struct mntent *me) {
-                 return -errno;
-         }
- 
-+        if (!noauto) {
-+                lnk = strjoin(arg_dest, "/" SPECIAL_SWAP_TARGET ".wants/", name, NULL);
-+                if (!lnk)
-+                        return log_oom();
-+
-+                mkdir_parents_label(lnk, 0755);
-+                if (symlink(unit, lnk) < 0) {
-+                        log_error("Failed to create symlink %s: %m", lnk);
-+                        return -errno;
-+                }
-+        }
-+
-         return 0;
- }
- 
diff --git a/SOURCES/0020-cgroup-add-missing-equals-for-BlockIOWeight.patch b/SOURCES/0020-cgroup-add-missing-equals-for-BlockIOWeight.patch
deleted file mode 100644
index b8d63a7..0000000
--- a/SOURCES/0020-cgroup-add-missing-equals-for-BlockIOWeight.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-From f93999bbdbc9e16322d77bda2a4e44c20040808d Mon Sep 17 00:00:00 2001
-From: Gao feng <gaofeng@cn.fujitsu.com>
-Date: Mon, 16 Sep 2013 09:57:33 +0800
-Subject: [PATCH] cgroup: add missing equals for BlockIOWeight
-
----
- src/core/cgroup.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/core/cgroup.c b/src/core/cgroup.c
-index 1f41efc..9277dd6 100644
---- a/src/core/cgroup.c
-+++ b/src/core/cgroup.c
-@@ -92,7 +92,7 @@ void cgroup_context_dump(CGroupContext *c, FILE* f, const char *prefix) {
-                 "%sBlockIOAccounting=%s\n"
-                 "%sMemoryAccounting=%s\n"
-                 "%sCPUShares=%lu\n"
--                "%sBlockIOWeight%lu\n"
-+                "%sBlockIOWeight=%lu\n"
-                 "%sMemoryLimit=%" PRIu64 "\n"
-                 "%sMemorySoftLimit=%" PRIu64 "\n"
-                 "%sDevicePolicy=%s\n",
diff --git a/SOURCES/0020-journald-fix-minor-memory-leak.patch b/SOURCES/0020-journald-fix-minor-memory-leak.patch
new file mode 100644
index 0000000..b8f3e4d
--- /dev/null
+++ b/SOURCES/0020-journald-fix-minor-memory-leak.patch
@@ -0,0 +1,22 @@
+From dac4b2528173c73473b0bf6a147e47170fd344d6 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart@poettering.net>
+Date: Wed, 9 Oct 2013 04:03:45 +0200
+Subject: [PATCH] journald: fix minor memory leak
+
+---
+ src/journal/journal-vacuum.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/src/journal/journal-vacuum.c b/src/journal/journal-vacuum.c
+index c73ad8f..8d5effb 100644
+--- a/src/journal/journal-vacuum.c
++++ b/src/journal/journal-vacuum.c
+@@ -278,6 +278,8 @@ int journal_directory_vacuum(
+                         } else if (errno != ENOENT)
+                                 log_warning("Failed to delete %s/%s: %m", directory, p);
+ 
++                        free(p);
++
+                         continue;
+                 }
+ 
diff --git a/SOURCES/0021-Assume-that-proc-meminfo-can-be-missing.patch b/SOURCES/0021-Assume-that-proc-meminfo-can-be-missing.patch
deleted file mode 100644
index e834c09..0000000
--- a/SOURCES/0021-Assume-that-proc-meminfo-can-be-missing.patch
+++ /dev/null
@@ -1,50 +0,0 @@
-From 0fdb6640bb9de89ca739676bbbb43d3a05a42f50 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
-Date: Sun, 15 Sep 2013 08:40:16 -0400
-Subject: [PATCH] Assume that /proc/meminfo can be missing
-
-Travis tests are failing, probably because /proc/meminfo is not available
-in the test environment. The same might be true in some virtualized systems,
-so just treat missing /proc/meminfo as a sign that hibernation is not
-possible.
----
- src/shared/sleep-config.c | 3 ++-
- src/test/test-fileio.c    | 6 +++++-
- 2 files changed, 7 insertions(+), 2 deletions(-)
-
-diff --git a/src/shared/sleep-config.c b/src/shared/sleep-config.c
-index 5ec7cce..148c4dc 100644
---- a/src/shared/sleep-config.c
-+++ b/src/shared/sleep-config.c
-@@ -172,7 +172,8 @@ static bool enough_memory_for_hibernation(void) {
- 
-         r = get_status_field("/proc/meminfo", "\nSwapFree:", &swapfree);
-         if (r < 0) {
--                log_error("Failed to retrieve SwapFree from /proc/meminfo: %s", strerror(-r));
-+                log_full(r == -ENOENT ? LOG_DEBUG : LOG_WARNING,
-+                         "Failed to retrieve SwapFree from /proc/meminfo: %s", strerror(-r));
-                 return false;
-         }
- 
-diff --git a/src/test/test-fileio.c b/src/test/test-fileio.c
-index 4a4ed79..3511f3a 100644
---- a/src/test/test-fileio.c
-+++ b/src/test/test-fileio.c
-@@ -232,12 +232,16 @@ static void test_executable_is_script(void) {
- static void test_status_field(void) {
-         _cleanup_free_ char *t = NULL, *p = NULL, *s = NULL;
-         unsigned long long total, buffers;
-+        int r;
- 
-         assert_se(get_status_field("/proc/self/status", "\nThreads:", &t) == 0);
-         puts(t);
-         assert_se(streq(t, "1"));
- 
--        assert_se(get_status_field("/proc/meminfo", "MemTotal:", &p) == 0);
-+        r = get_status_field("/proc/meminfo", "MemTotal:", &p);
-+        if (r == -ENOENT)
-+                return;
-+        assert(r == 0);
-         puts(p);
-         assert_se(safe_atollu(p, &total) == 0);
- 
diff --git a/SOURCES/0021-journald-remove-rotated-file-from-hashmap-when-rotat.patch b/SOURCES/0021-journald-remove-rotated-file-from-hashmap-when-rotat.patch
new file mode 100644
index 0000000..bf5accf
--- /dev/null
+++ b/SOURCES/0021-journald-remove-rotated-file-from-hashmap-when-rotat.patch
@@ -0,0 +1,36 @@
+From c10d51e51388a133d1e0a656f9f69c3d2ca79f09 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Wed, 9 Oct 2013 22:13:13 -0400
+Subject: [PATCH] journald: remove rotated file from hashmap when rotation
+ fails
+
+Before, when the user journal file was rotated, journal_file_rotate
+could close the old file and fail to open the new file. In that
+case, we would leave the old (deallocated) file in the hashmap.
+On subsequent accesses, we could retrieve this stale entry, leading
+to a segfault.
+
+When journal_file_rotate fails with the file pointer set to 0,
+old file is certainly gone, and cannot be used anymore.
+
+https://bugzilla.redhat.com/show_bug.cgi?id=890463
+---
+ src/journal/journald-server.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/src/journal/journald-server.c b/src/journal/journald-server.c
+index 4f47eb1..e03e413 100644
+--- a/src/journal/journald-server.c
++++ b/src/journal/journald-server.c
+@@ -321,8 +321,10 @@ void server_rotate(Server *s) {
+                 if (r < 0)
+                         if (f)
+                                 log_error("Failed to rotate %s: %s", f->path, strerror(-r));
+-                        else
++                        else {
+                                 log_error("Failed to create user journal: %s", strerror(-r));
++                                hashmap_remove(s->user_journals, k);
++                        }
+                 else {
+                         hashmap_replace(s->user_journals, k, f);
+                         server_fix_perms(s, f, PTR_TO_UINT32(k));
diff --git a/SOURCES/0022-transaction.c-do-not-point-users-to-logs-when-unit-n.patch b/SOURCES/0022-transaction.c-do-not-point-users-to-logs-when-unit-n.patch
deleted file mode 100644
index e3555ef..0000000
--- a/SOURCES/0022-transaction.c-do-not-point-users-to-logs-when-unit-n.patch
+++ /dev/null
@@ -1,63 +0,0 @@
-From a38c3d5d4e94c7e11db1ca22126bb11c6b029886 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
-Date: Sun, 15 Sep 2013 12:15:38 -0400
-Subject: [PATCH] transaction.c: do not point users to logs when unit not found
-
-The logs are unlikely to contain any useful information in this case.
-
-Also, change "walked on cycle path" to "found dependency on", which
-is less technical and indicates the direction. With the old message,
-I was never sure if prior units depended on later ones, or vice versa.
-
-https://bugzilla.redhat.com/show_bug.cgi?id=996133
-https://bugzilla.redhat.com/show_bug.cgi?id=997082
----
- src/core/transaction.c | 14 +++++++++++---
- 1 file changed, 11 insertions(+), 3 deletions(-)
-
-diff --git a/src/core/transaction.c b/src/core/transaction.c
-index 27efef7..203070f 100644
---- a/src/core/transaction.c
-+++ b/src/core/transaction.c
-@@ -344,7 +344,7 @@ static int transaction_verify_order_one(Transaction *tr, Job *j, Job *from, unsi
-         assert(!j->transaction_prev);
- 
-         /* Does a recursive sweep through the ordering graph, looking
--         * for a cycle. If we find cycle we try to break it. */
-+         * for a cycle. If we find a cycle we try to break it. */
- 
-         /* Have we seen this before? */
-         if (j->generation == generation) {
-@@ -371,7 +371,7 @@ static int transaction_verify_order_one(Transaction *tr, Job *j, Job *from, unsi
- 
-                         /* logging for j not k here here to provide consistent narrative */
-                         log_info_unit(j->unit->id,
--                                      "Walked on cycle path to %s/%s",
-+                                      "Found dependency on %s/%s",
-                                       k->unit->id, job_type_to_string(k->type));
- 
-                         if (!delete &&
-@@ -860,7 +860,7 @@ int transaction_add_job_and_dependencies(
-                 return -EINVAL;
-         }
- 
--        if (type != JOB_STOP && (unit->load_state == UNIT_ERROR || unit->load_state == UNIT_NOT_FOUND)) {
-+        if (type != JOB_STOP && unit->load_state == UNIT_ERROR) {
-                 dbus_set_error(e, BUS_ERROR_LOAD_FAILED,
-                                "Unit %s failed to load: %s. "
-                                "See system logs and 'systemctl status %s' for details.",
-@@ -870,6 +870,14 @@ int transaction_add_job_and_dependencies(
-                 return -EINVAL;
-         }
- 
-+        if (type != JOB_STOP && unit->load_state == UNIT_NOT_FOUND) {
-+                dbus_set_error(e, BUS_ERROR_LOAD_FAILED,
-+                               "Unit %s failed to load: %s.",
-+                               unit->id,
-+                               strerror(-unit->load_error));
-+                return -EINVAL;
-+        }
-+
-         if (type != JOB_STOP && unit->load_state == UNIT_MASKED) {
-                 dbus_set_error(e, BUS_ERROR_MASKED, "Unit %s is masked.", unit->id);
-                 return -EADDRNOTAVAIL;
diff --git a/SOURCES/0022-udevadm.xml-document-resolve-names-option-for-test.patch b/SOURCES/0022-udevadm.xml-document-resolve-names-option-for-test.patch
new file mode 100644
index 0000000..213de85
--- /dev/null
+++ b/SOURCES/0022-udevadm.xml-document-resolve-names-option-for-test.patch
@@ -0,0 +1,31 @@
+From 46ae516340261691a08f64439dfd7aafa43b7467 Mon Sep 17 00:00:00 2001
+From: Dave Reisner <dreisner@archlinux.org>
+Date: Sun, 13 Oct 2013 17:42:51 -0400
+Subject: [PATCH] udevadm.xml: document --resolve-names option for test
+
+And remove documentation of the --subsystem flag which doesn't actually
+exist.
+---
+ man/udevadm.xml | 8 ++++++--
+ 1 file changed, 6 insertions(+), 2 deletions(-)
+
+diff --git a/man/udevadm.xml b/man/udevadm.xml
+index d0b257d..b959216 100644
+--- a/man/udevadm.xml
++++ b/man/udevadm.xml
+@@ -462,9 +462,13 @@
+           </listitem>
+         </varlistentry>
+         <varlistentry>
+-          <term><option>--subsystem=<replaceable>string</replaceable></option></term>
++          <term><option>--resolve-names=<replaceable>early|late|never</replaceable></option></term>
+           <listitem>
+-            <para>The subsystem string.</para>
++            <para>Specify when udevadm should resolve names of users and groups.
++              When set to early (the default) names will be resolved when the
++              rules are parsed. When set to late names will be resolved for
++              every event. When set to never names will never be resolved and
++              all devices will be owned by root.</para>
+           </listitem>
+         </varlistentry>
+         <varlistentry>
diff --git a/SOURCES/0023-Verify-validity-of-session-name-when-received-from-o.patch b/SOURCES/0023-Verify-validity-of-session-name-when-received-from-o.patch
deleted file mode 100644
index d13a554..0000000
--- a/SOURCES/0023-Verify-validity-of-session-name-when-received-from-o.patch
+++ /dev/null
@@ -1,283 +0,0 @@
-From 45f0d8e103c57e9e5e9d92bba1dc2d50b49806de Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
-Date: Sun, 15 Sep 2013 22:26:56 -0400
-Subject: [PATCH] Verify validity of session name when received from outside
-
-Only ASCII letters and digits are allowed.
----
- Makefile.am                | 14 +++++++++++---
- TODO                       |  3 ---
- src/login/login-shared.c   |  8 ++++++++
- src/login/login-shared.h   |  3 +++
- src/login/logind-dbus.c    |  1 +
- src/login/logind-session.c |  1 +
- src/login/logind-session.h |  1 +
- src/login/logind.c         |  6 ++++++
- src/login/sd-login.c       | 12 +++++++-----
- src/shared/cgroup-util.c   |  4 +---
- src/shared/def.h           |  5 +++++
- src/shared/env-util.c      |  5 ++---
- src/shared/replace-var.c   |  3 ++-
- src/shared/unit-name.c     |  5 ++---
- 14 files changed, 50 insertions(+), 21 deletions(-)
- create mode 100644 src/login/login-shared.c
- create mode 100644 src/login/login-shared.h
-
-diff --git a/Makefile.am b/Makefile.am
-index 7b7539a..6014521 100644
---- a/Makefile.am
-+++ b/Makefile.am
-@@ -2324,7 +2324,10 @@ if HAVE_ACL
- libudev_core_la_SOURCES += \
- 	src/udev/udev-builtin-uaccess.c \
- 	src/login/logind-acl.c \
--	src/login/sd-login.c
-+	src/login/sd-login.c \
-+	src/systemd/sd-login.h \
-+	src/login/login-shared.c \
-+	src/login/login-shared.h
- 
- libudev_core_la_LIBADD += \
- 	libsystemd-acl.la
-@@ -3759,7 +3762,9 @@ libsystemd_logind_core_la_SOURCES = \
- 	src/login/logind-session-dbus.c \
- 	src/login/logind-seat-dbus.c \
- 	src/login/logind-user-dbus.c \
--	src/login/logind-acl.h
-+	src/login/logind-acl.h \
-+	src/login/login-shared.c \
-+	src/login/login-shared.h
- 
- libsystemd_logind_core_la_CFLAGS = \
- 	$(AM_CFLAGS) \
-@@ -3860,7 +3865,10 @@ tests += \
- 	test-login-tables
- 
- libsystemd_login_la_SOURCES = \
--	src/login/sd-login.c
-+	src/login/sd-login.c \
-+	src/systemd/sd-login.h \
-+	src/login/login-shared.c \
-+	src/login/login-shared.h
- 
- libsystemd_login_la_CFLAGS = \
- 	$(AM_CFLAGS) \
-diff --git a/TODO b/TODO
-index 9943b3e..bfeaa81 100644
---- a/TODO
-+++ b/TODO
-@@ -142,9 +142,6 @@ Features:
- 
- * journald: make sure ratelimit is actually really per-service with the new cgroup changes
- 
--* libsystemd-logind: sd_session_is_active() and friends: verify
--  validity of session name before appending it to a path
--
- * gparted needs to disable auto-activation of mount units somehow, or
-   maybe we should stop doing auto-activation of this after boot
-   entirely. https://bugzilla.gnome.org/show_bug.cgi?id=701676
-diff --git a/src/login/login-shared.c b/src/login/login-shared.c
-new file mode 100644
-index 0000000..ff13c28
---- /dev/null
-+++ b/src/login/login-shared.c
-@@ -0,0 +1,8 @@
-+#include "login-shared.h"
-+#include "def.h"
-+
-+bool session_id_valid(const char *id) {
-+        assert(id);
-+
-+        return id + strspn(id, LETTERS DIGITS) == '\0';
-+}
-diff --git a/src/login/login-shared.h b/src/login/login-shared.h
-new file mode 100644
-index 0000000..728ef00
---- /dev/null
-+++ b/src/login/login-shared.h
-@@ -0,0 +1,3 @@
-+#include <stdbool.h>
-+
-+bool session_id_valid(const char *id);
-diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c
-index 345df9f..d052e74 100644
---- a/src/login/logind-dbus.c
-+++ b/src/login/logind-dbus.c
-@@ -554,6 +554,7 @@ static int bus_manager_create_session(Manager *m, DBusMessage *message) {
-                  * the audit data and let's better register a new
-                  * ID */
-                 if (hashmap_get(m->sessions, id)) {
-+                        log_warning("Existing logind session ID %s used by new audit session, ignoring", id);
-                         audit_id = 0;
- 
-                         free(id);
-diff --git a/src/login/logind-session.c b/src/login/logind-session.c
-index a726fb1..2d22a68 100644
---- a/src/login/logind-session.c
-+++ b/src/login/logind-session.c
-@@ -41,6 +41,7 @@ Session* session_new(Manager *m, const char *id) {
- 
-         assert(m);
-         assert(id);
-+        assert(session_id_valid(id));
- 
-         s = new0(Session, 1);
-         if (!s)
-diff --git a/src/login/logind-session.h b/src/login/logind-session.h
-index edaae8d..9cf6485 100644
---- a/src/login/logind-session.h
-+++ b/src/login/logind-session.h
-@@ -29,6 +29,7 @@ typedef enum KillWho KillWho;
- #include "logind.h"
- #include "logind-seat.h"
- #include "logind-user.h"
-+#include "login-shared.h"
- 
- typedef enum SessionState {
-         SESSION_OPENING,  /* Session scope is being created */
-diff --git a/src/login/logind.c b/src/login/logind.c
-index 9094567..4ef92b8 100644
---- a/src/login/logind.c
-+++ b/src/login/logind.c
-@@ -684,6 +684,12 @@ int manager_enumerate_sessions(Manager *m) {
-                 if (!dirent_is_file(de))
-                         continue;
- 
-+                if (!session_id_valid(de->d_name)) {
-+                        log_warning("Invalid session file name '%s', ignoring.", de->d_name);
-+                        r = -EINVAL;
-+                        continue;
-+                }
-+
-                 k = manager_add_session(m, de->d_name, &s);
-                 if (k < 0) {
-                         log_error("Failed to add session by file name %s: %s", de->d_name, strerror(-k));
-diff --git a/src/login/sd-login.c b/src/login/sd-login.c
-index 8a7838d..71d8c29 100644
---- a/src/login/sd-login.c
-+++ b/src/login/sd-login.c
-@@ -31,6 +31,7 @@
- #include "sd-login.h"
- #include "strv.h"
- #include "fileio.h"
-+#include "login-shared.h"
- 
- _public_ int sd_pid_get_session(pid_t pid, char **session) {
-         if (pid < 0)
-@@ -226,17 +227,19 @@ static int file_of_session(const char *session, char **_p) {
- 
-         assert(_p);
- 
--        if (session)
-+        if (session) {
-+                if (!session_id_valid(session))
-+                        return -EINVAL;
-+
-                 p = strappend("/run/systemd/sessions/", session);
--        else {
--                char *buf;
-+        } else {
-+                _cleanup_free_ char *buf = NULL;
- 
-                 r = sd_pid_get_session(0, &buf);
-                 if (r < 0)
-                         return r;
- 
-                 p = strappend("/run/systemd/sessions/", buf);
--                free(buf);
-         }
- 
-         if (!p)
-@@ -255,7 +258,6 @@ _public_ int sd_session_is_active(const char *session) {
-                 return r;
- 
-         r = parse_env_file(p, NEWLINE, "ACTIVE", &s, NULL);
--
-         if (r < 0)
-                 return r;
- 
-diff --git a/src/shared/cgroup-util.c b/src/shared/cgroup-util.c
-index 1d545e0..0bffebd 100644
---- a/src/shared/cgroup-util.c
-+++ b/src/shared/cgroup-util.c
-@@ -1511,9 +1511,7 @@ char *cg_unescape(const char *p) {
- }
- 
- #define CONTROLLER_VALID                        \
--        "0123456789"                            \
--        "abcdefghijklmnopqrstuvwxyz"            \
--        "ABCDEFGHIJKLMNOPQRSTUVWXYZ"            \
-+        DIGITS LETTERS                          \
-         "_"
- 
- bool cg_controller_is_valid(const char *p, bool allow_named) {
-diff --git a/src/shared/def.h b/src/shared/def.h
-index 5abb544..edd0bcf 100644
---- a/src/shared/def.h
-+++ b/src/shared/def.h
-@@ -33,3 +33,8 @@
- 
- #define SIGNALS_CRASH_HANDLER SIGSEGV,SIGILL,SIGFPE,SIGBUS,SIGQUIT,SIGABRT
- #define SIGNALS_IGNORE SIGPIPE
-+
-+#define DIGITS            "0123456789"
-+#define LOWERCASE_LETTERS "abcdefghijklmnopqrstuvwxyz"
-+#define UPPERCASE_LETTERS "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
-+#define LETTERS LOWERCASE_LETTERS UPPERCASE_LETTERS
-diff --git a/src/shared/env-util.c b/src/shared/env-util.c
-index 6a52fb9..5e29629 100644
---- a/src/shared/env-util.c
-+++ b/src/shared/env-util.c
-@@ -27,11 +27,10 @@
- #include "utf8.h"
- #include "util.h"
- #include "env-util.h"
-+#include "def.h"
- 
- #define VALID_CHARS_ENV_NAME                    \
--        "0123456789"                            \
--        "abcdefghijklmnopqrstuvwxyz"            \
--        "ABCDEFGHIJKLMNOPQRSTUVWXYZ"            \
-+        DIGITS LETTERS                          \
-         "_"
- 
- #ifndef ARG_MAX
-diff --git a/src/shared/replace-var.c b/src/shared/replace-var.c
-index e11c57a..478fc43 100644
---- a/src/shared/replace-var.c
-+++ b/src/shared/replace-var.c
-@@ -24,6 +24,7 @@
- #include "macro.h"
- #include "util.h"
- #include "replace-var.h"
-+#include "def.h"
- 
- /*
-  * Generic infrastructure for replacing @FOO@ style variables in
-@@ -40,7 +41,7 @@ static int get_variable(const char *b, char **r) {
-         if (*b != '@')
-                 return 0;
- 
--        k = strspn(b + 1, "ABCDEFGHIJKLMNOPQRSTUVWXYZ_");
-+        k = strspn(b + 1, UPPERCASE_LETTERS "_");
-         if (k <= 0 || b[k+1] != '@')
-                 return 0;
- 
-diff --git a/src/shared/unit-name.c b/src/shared/unit-name.c
-index 1baa6eb..8f6c28e 100644
---- a/src/shared/unit-name.c
-+++ b/src/shared/unit-name.c
-@@ -26,11 +26,10 @@
- #include "path-util.h"
- #include "util.h"
- #include "unit-name.h"
-+#include "def.h"
- 
- #define VALID_CHARS                             \
--        "0123456789"                            \
--        "abcdefghijklmnopqrstuvwxyz"            \
--        "ABCDEFGHIJKLMNOPQRSTUVWXYZ"            \
-+        DIGITS LETTERS                          \
-         ":-_.\\"
- 
- static const char* const unit_type_table[_UNIT_TYPE_MAX] = {
diff --git a/SOURCES/0023-dbus-common-avoid-leak-in-error-path.patch b/SOURCES/0023-dbus-common-avoid-leak-in-error-path.patch
new file mode 100644
index 0000000..04290cb
--- /dev/null
+++ b/SOURCES/0023-dbus-common-avoid-leak-in-error-path.patch
@@ -0,0 +1,68 @@
+From 10725a4ee35e5d1d97c2f9bc72010c5c0210cd6b Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Fri, 11 Oct 2013 19:33:20 -0400
+Subject: [PATCH] dbus-common: avoid leak in error path
+
+src/shared/dbus-common.c:968:33: warning: Potential leak of memory pointed to by 'l'
+                        return -EINVAL;
+                                ^~~~~~
+---
+ src/shared/dbus-common.c | 20 ++++++++++----------
+ 1 file changed, 10 insertions(+), 10 deletions(-)
+
+diff --git a/src/shared/dbus-common.c b/src/shared/dbus-common.c
+index c727cae..3ba2d87 100644
+--- a/src/shared/dbus-common.c
++++ b/src/shared/dbus-common.c
+@@ -934,7 +934,7 @@ int bus_parse_strv_iter(DBusMessageIter *iter, char ***_l) {
+ int bus_parse_strv_pairs_iter(DBusMessageIter *iter, char ***_l) {
+         DBusMessageIter sub, sub2;
+         unsigned n = 0, i = 0;
+-        char **l;
++        _cleanup_strv_free_ char **l = NULL;
+ 
+         assert(iter);
+         assert(_l);
+@@ -953,6 +953,7 @@ int bus_parse_strv_pairs_iter(DBusMessageIter *iter, char ***_l) {
+         l = new(char*, n*2+1);
+         if (!l)
+                 return -ENOMEM;
++        l[0] = NULL; /* make sure that l is properly terminated at all times */
+ 
+         dbus_message_iter_recurse(iter, &sub);
+ 
+@@ -968,26 +969,25 @@ int bus_parse_strv_pairs_iter(DBusMessageIter *iter, char ***_l) {
+                         return -EINVAL;
+ 
+                 l[i] = strdup(a);
+-                if (!l[i]) {
+-                        strv_free(l);
++                if (!l[i])
+                         return -ENOMEM;
+-                }
++                i++;
+ 
+-                l[++i] = strdup(b);
+-                if (!l[i]) {
+-                        strv_free(l);
++                l[i] = strdup(b);
++                if (!l[i])
+                         return -ENOMEM;
+-                }
+-
+                 i++;
++
+                 dbus_message_iter_next(&sub);
+         }
+ 
+         assert(i == n*2);
+         l[i] = NULL;
+ 
+-        if (_l)
++        if (_l) {
+                 *_l = l;
++                l = NULL; /* avoid freeing */
++        }
+ 
+         return 0;
+ }
diff --git a/SOURCES/0024-drop-ins-check-return-value.patch b/SOURCES/0024-drop-ins-check-return-value.patch
new file mode 100644
index 0000000..60dcd24
--- /dev/null
+++ b/SOURCES/0024-drop-ins-check-return-value.patch
@@ -0,0 +1,26 @@
+From 0b344626698e0c42a7da558783d70207f8aed05e Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Fri, 11 Oct 2013 19:33:36 -0400
+Subject: [PATCH] drop-ins: check return value
+
+If the function failed, nothing serious would happen
+because unlink would probably return EFAULT, but this
+would obscure the real error and is a bit sloppy.
+---
+ src/core/unit.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/src/core/unit.c b/src/core/unit.c
+index 4b97710..1db7d06 100644
+--- a/src/core/unit.c
++++ b/src/core/unit.c
+@@ -2908,6 +2908,9 @@ int unit_remove_drop_in(Unit *u, UnitSetPropertiesMode mode, const char *name) {
+                 return 0;
+ 
+         r = drop_in_file(u, mode, name, &p, &q);
++        if (r < 0)
++                return r;
++
+         if (unlink(q) < 0)
+                 r = errno == ENOENT ? 0 : -errno;
+         else
diff --git a/SOURCES/0024-udev-rules-avoid-erroring-on-trailing-whitespace.patch b/SOURCES/0024-udev-rules-avoid-erroring-on-trailing-whitespace.patch
deleted file mode 100644
index a1145df..0000000
--- a/SOURCES/0024-udev-rules-avoid-erroring-on-trailing-whitespace.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-From c4f1b97f45f1685c0a4bcba8c6724ce17bb6af19 Mon Sep 17 00:00:00 2001
-From: Dave Reisner <dreisner@archlinux.org>
-Date: Mon, 16 Sep 2013 11:22:35 -0400
-Subject: [PATCH] udev-rules: avoid erroring on trailing whitespace
-
-https://bugs.archlinux.org/task/36950
----
- src/udev/udev-rules.c | 6 ++++++
- 1 file changed, 6 insertions(+)
-
-diff --git a/src/udev/udev-rules.c b/src/udev/udev-rules.c
-index f14158b..6f8b127 100644
---- a/src/udev/udev-rules.c
-+++ b/src/udev/udev-rules.c
-@@ -1068,6 +1068,12 @@ static int add_rule(struct udev_rules *rules, char *line,
-                 enum operation_type op;
- 
-                 if (get_key(rules->udev, &linepos, &key, &op, &value) != 0) {
-+                        /* Avoid erroring on trailing whitespace. This is probably rare
-+                         * so save the work for the error case instead of always trying
-+                         * to strip the trailing whitespace with strstrip(). */
-+                        while (isblank(*linepos))
-+                                linepos++;
-+
-                         /* If we aren't at the end of the line, this is a parsing error.
-                          * Make a best effort to describe where the problem is. */
-                         if (*linepos != '\n') {
diff --git a/SOURCES/0025-keymap-Add-Samsung-Series-5-Ultra.patch b/SOURCES/0025-keymap-Add-Samsung-Series-5-Ultra.patch
deleted file mode 100644
index 7004c85..0000000
--- a/SOURCES/0025-keymap-Add-Samsung-Series-5-Ultra.patch
+++ /dev/null
@@ -1,65 +0,0 @@
-From 3d2b4b62bfc73a38dce90be5cebdc924db42f63c Mon Sep 17 00:00:00 2001
-From: Martin Pitt <martinpitt@gnome.org>
-Date: Mon, 16 Sep 2013 14:25:44 -0500
-Subject: [PATCH] keymap: Add Samsung Series 5 [Ultra]
-
-Also consolidate the wlan key into the "all Samsung" rule to avoid repetition.
-
-Thanks to Mauro Carvalho Chehab!
-
-https://bugzilla.redhat.com/show_bug.cgi?id=989103
----
- hwdb/60-keyboard.hwdb | 17 ++++++++++++-----
- 1 file changed, 12 insertions(+), 5 deletions(-)
-
-diff --git a/hwdb/60-keyboard.hwdb b/hwdb/60-keyboard.hwdb
-index 53e83ad..3862b4c 100644
---- a/hwdb/60-keyboard.hwdb
-+++ b/hwdb/60-keyboard.hwdb
-@@ -882,6 +882,8 @@ keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*
-  KEYBOARD_KEY_b1=!prog2                                 # Fn+F7 run Samsung Magic Doctor (keypressed event is generated twice)
-  KEYBOARD_KEY_b3=!prog3                                 # Fn+F8 switch power mode (battery/dynamic/performance)
-  KEYBOARD_KEY_b4=!wlan                                  # Fn+F9 (X60P)
-+ KEYBOARD_KEY_c5=!prog3                                 # Fn+F8 switch power mode (battery/dynamic/performance)
-+ KEYBOARD_KEY_d5=!wlan                                  # Fn+F12 wlan/airplane switch
-  KEYBOARD_KEY_f7=!f22                                   # Fn+F10 Touchpad on
-  KEYBOARD_KEY_f9=!f23                                   # Fn+F10 Touchpad off
- 
-@@ -889,9 +891,18 @@ keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*
- keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*300E[457]*:pvr*
- keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*200E[45]*:pvr*
-  KEYBOARD_KEY_ce=!                                      # Fn+F1  launch control setting
-- KEYBOARD_KEY_d5=!                                      # Fn+F12 Wi-Fi toggle
- 
- # Series 5
-+keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*530U*:pvr*
-+ KEYBOARD_KEY_ce=!prog1                                 # Fn+F1 launch settings
-+ KEYBOARD_KEY_a8=!                                      # Fn Lock - Function lock on
-+ KEYBOARD_KEY_a9=!                                      # Fn Lock - Function lock off
-+
-+keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*550P*:pvr*
-+ KEYBOARD_KEY_ce=!prog1                                 # Fn+F1 launch settings
-+ KEYBOARD_KEY_a8=!                                      # Fn Lock - Function lock on
-+ KEYBOARD_KEY_a9=!                                      # Fn Lock - Function lock off
-+
- keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*700Z*:pvr*
-  KEYBOARD_KEY_ce=!prog1                                 # Fn+F1 launch settings
-  KEYBOARD_KEY_a0=!mute                                  # Fn+F6 mute
-@@ -900,7 +911,6 @@ keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*700Z*:pvr*
-  KEYBOARD_KEY_97=!kbdillumdown                          # Fn+F9 keyboard backlight down
-  KEYBOARD_KEY_96=!kbdillumup                            # Fn+F10 keyboard backlight up
-  KEYBOARD_KEY_b3=!prog3                                 # Fn+F11 fan/cooling mode changer
-- KEYBOARD_KEY_d5=!wlan                                  # Fn+F12 wlan/airplane switch
- 
- # Series 9
- keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*90X3A*:pvr*
-@@ -936,9 +946,6 @@ keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*700Z*:pvr*
- keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*700T*:pvr*
-  KEYBOARD_KEY_ad=leftmeta
- 
--keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn535U*:pvr*
-- KEYBOARD_KEY_d5=!wlan
--
- ###########################################################
- # SONY
- ###########################################################
diff --git a/SOURCES/0025-shared-util-Fix-glob_extend-argument.patch b/SOURCES/0025-shared-util-Fix-glob_extend-argument.patch
new file mode 100644
index 0000000..de46ffc
--- /dev/null
+++ b/SOURCES/0025-shared-util-Fix-glob_extend-argument.patch
@@ -0,0 +1,25 @@
+From 18f14dc669bfda1131e31f9818eabd962bda631d Mon Sep 17 00:00:00 2001
+From: Bastien Nocera <hadess@hadess.net>
+Date: Mon, 14 Oct 2013 08:15:51 +0200
+Subject: [PATCH] shared/util: Fix glob_extend() argument
+
+glob_extend() would completely fail to work, or return incorrect
+data if it wasn't being passed the current getopt "optarg" variable
+as it used the global variable, instead of the passed parameters.
+---
+ src/shared/util.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/shared/util.c b/src/shared/util.c
+index 9be6acf..48adc83 100644
+--- a/src/shared/util.c
++++ b/src/shared/util.c
+@@ -4391,7 +4391,7 @@ int glob_extend(char ***strv, const char *path) {
+         char **p;
+ 
+         errno = 0;
+-        k = glob(optarg, GLOB_NOSORT|GLOB_BRACE, NULL, &g);
++        k = glob(path, GLOB_NOSORT|GLOB_BRACE, NULL, &g);
+ 
+         if (k == GLOB_NOMATCH)
+                 return -ENOENT;
diff --git a/SOURCES/0026-Fix-for-SIGSEGV-in-systemd-bootchart-on-short-living.patch b/SOURCES/0026-Fix-for-SIGSEGV-in-systemd-bootchart-on-short-living.patch
new file mode 100644
index 0000000..91939da
--- /dev/null
+++ b/SOURCES/0026-Fix-for-SIGSEGV-in-systemd-bootchart-on-short-living.patch
@@ -0,0 +1,31 @@
+From 63d689541fd7e70e83de425986182ee488e14a0f Mon Sep 17 00:00:00 2001
+From: Igor Zhbanov <i.zhbanov@samsung.com>
+Date: Tue, 15 Oct 2013 14:35:13 +0400
+Subject: [PATCH] Fix for SIGSEGV in systemd-bootchart on short-living
+ processes
+
+The function svg_ps_bars() dereferencess NULL pointer in the line
+	endtime = ps->last->sampledata->sampletime;
+because of partially initialized ps_struct (ps->last == NULL).
+
+If some process terminates between scaning /proc directory in the log_sample()
+function and reading additional information from /proc/PID/... files,
+the files couldn't be read, the loop will be continued and partially
+initialized structure returned.
+---
+ src/bootchart/store.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/bootchart/store.c b/src/bootchart/store.c
+index f8c97c2..7f86cfe 100644
+--- a/src/bootchart/store.c
++++ b/src/bootchart/store.c
+@@ -275,7 +275,7 @@ schedstat_next:
+                         pscount++;
+ 
+                         /* mark our first sample */
+-                        ps->first = ps->sample;
++                        ps->first = ps->last = ps->sample;
+                         ps->sample->runtime = atoll(rt);
+                         ps->sample->waittime = atoll(wt);
+ 
diff --git a/SOURCES/0026-login-fix-login_is_valid-test.patch b/SOURCES/0026-login-fix-login_is_valid-test.patch
deleted file mode 100644
index 2d2a8eb..0000000
--- a/SOURCES/0026-login-fix-login_is_valid-test.patch
+++ /dev/null
@@ -1,149 +0,0 @@
-From 87e08d21857b2b2e59f3480e6d0538b535a5897c Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
-Date: Mon, 16 Sep 2013 11:04:20 -0500
-Subject: [PATCH] login: fix login_is_valid test
-
----
- Makefile.am                   | 10 +++++++++-
- src/login/login-shared.c      | 23 ++++++++++++++++++++++-
- src/login/login-shared.h      | 21 +++++++++++++++++++++
- src/login/test-login-shared.c | 38 ++++++++++++++++++++++++++++++++++++++
- 4 files changed, 90 insertions(+), 2 deletions(-)
- create mode 100644 src/login/test-login-shared.c
-
-diff --git a/Makefile.am b/Makefile.am
-index 6014521..eae001b 100644
---- a/Makefile.am
-+++ b/Makefile.am
-@@ -3836,6 +3836,13 @@ test_login_LDADD = \
- 	libsystemd-login-internal.la \
- 	libsystemd-shared.la
- 
-+test_login_shared_SOURCES = \
-+	src/login/test-login-shared.c
-+
-+test_login_shared_LDADD = \
-+	libsystemd-login-internal.la \
-+	libsystemd-shared.la
-+
- test_inhibit_SOURCES = \
- 	src/login/test-inhibit.c
- 
-@@ -3862,7 +3869,8 @@ manual_tests += \
- 	test-inhibit
- 
- tests += \
--	test-login-tables
-+	test-login-tables \
-+	test-login-shared
- 
- libsystemd_login_la_SOURCES = \
- 	src/login/sd-login.c \
-diff --git a/src/login/login-shared.c b/src/login/login-shared.c
-index ff13c28..054c775 100644
---- a/src/login/login-shared.c
-+++ b/src/login/login-shared.c
-@@ -1,8 +1,29 @@
-+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
-+
-+/***
-+  This file is part of systemd.
-+
-+  Copyright 2013 Zbigniew Jędrzejewski-Szmek
-+
-+  systemd is free software; you can redistribute it and/or modify it
-+  under the terms of the GNU Lesser General Public License as published by
-+  the Free Software Foundation; either version 2.1 of the License, or
-+  (at your option) any later version.
-+
-+  systemd is distributed in the hope that it will be useful, but
-+  WITHOUT ANY WARRANTY; without even the implied warranty of
-+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+  Lesser General Public License for more details.
-+
-+  You should have received a copy of the GNU Lesser General Public License
-+  along with systemd; If not, see <http://www.gnu.org/licenses/>.
-+***/
-+
- #include "login-shared.h"
- #include "def.h"
- 
- bool session_id_valid(const char *id) {
-         assert(id);
- 
--        return id + strspn(id, LETTERS DIGITS) == '\0';
-+        return id[0] && id[strspn(id, LETTERS DIGITS)] == '\0';
- }
-diff --git a/src/login/login-shared.h b/src/login/login-shared.h
-index 728ef00..b2787c9 100644
---- a/src/login/login-shared.h
-+++ b/src/login/login-shared.h
-@@ -1,3 +1,24 @@
-+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
-+
-+/***
-+  This file is part of systemd.
-+
-+  Copyright 2013 Zbigniew Jędrzejewski-Szmek
-+
-+  systemd is free software; you can redistribute it and/or modify it
-+  under the terms of the GNU Lesser General Public License as published by
-+  the Free Software Foundation; either version 2.1 of the License, or
-+  (at your option) any later version.
-+
-+  systemd is distributed in the hope that it will be useful, but
-+  WITHOUT ANY WARRANTY; without even the implied warranty of
-+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+  Lesser General Public License for more details.
-+
-+  You should have received a copy of the GNU Lesser General Public License
-+  along with systemd; If not, see <http://www.gnu.org/licenses/>.
-+***/
-+
- #include <stdbool.h>
- 
- bool session_id_valid(const char *id);
-diff --git a/src/login/test-login-shared.c b/src/login/test-login-shared.c
-new file mode 100644
-index 0000000..2df6029
---- /dev/null
-+++ b/src/login/test-login-shared.c
-@@ -0,0 +1,38 @@
-+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
-+
-+/***
-+  This file is part of systemd.
-+
-+  Copyright 2013 Zbigniew Jędrzejewski-Szmek
-+
-+  systemd is free software; you can redistribute it and/or modify it
-+  under the terms of the GNU Lesser General Public License as published by
-+  the Free Software Foundation; either version 2.1 of the License, or
-+  (at your option) any later version.
-+
-+  systemd is distributed in the hope that it will be useful, but
-+  WITHOUT ANY WARRANTY; without even the implied warranty of
-+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+  Lesser General Public License for more details.
-+
-+  You should have received a copy of the GNU Lesser General Public License
-+  along with systemd; If not, see <http://www.gnu.org/licenses/>.
-+***/
-+
-+#include "macro.h"
-+#include "login-shared.h"
-+
-+static void test_session_id_valid(void) {
-+        assert_se(session_id_valid("c1"));
-+        assert_se(session_id_valid("1234"));
-+
-+        assert_se(!session_id_valid("1-2"));
-+        assert_se(!session_id_valid(""));
-+        assert_se(!session_id_valid("\tid"));
-+}
-+
-+int main(int argc, char* argv[]) {
-+        test_session_id_valid();
-+
-+        return 0;
-+}
diff --git a/SOURCES/0027-man-document-the-b-special-boot-option.patch b/SOURCES/0027-man-document-the-b-special-boot-option.patch
new file mode 100644
index 0000000..e036fe1
--- /dev/null
+++ b/SOURCES/0027-man-document-the-b-special-boot-option.patch
@@ -0,0 +1,34 @@
+From fb31ccf54084efe2264c0960feb5ed2edb5256b3 Mon Sep 17 00:00:00 2001
+From: Jan Engelhardt <jengelh@inai.de>
+Date: Tue, 15 Oct 2013 08:58:50 +0200
+Subject: [PATCH] man: document the -b special boot option
+
+---
+ man/kernel-command-line.xml | 1 +
+ man/systemd.xml             | 1 +
+ 2 files changed, 2 insertions(+)
+
+diff --git a/man/kernel-command-line.xml b/man/kernel-command-line.xml
+index cc267a3..abe68e5 100644
+--- a/man/kernel-command-line.xml
++++ b/man/kernel-command-line.xml
+@@ -123,6 +123,7 @@
+                         </varlistentry>
+ 
+                         <varlistentry>
++                                <term><varname>-b</varname></term>
+                                 <term><varname>emergency</varname></term>
+                                 <term><varname>single</varname></term>
+                                 <term><varname>s</varname></term>
+diff --git a/man/systemd.xml b/man/systemd.xml
+index fe6e331..85c06d3 100644
+--- a/man/systemd.xml
++++ b/man/systemd.xml
+@@ -1149,6 +1149,7 @@
+                         </varlistentry>
+ 
+                         <varlistentry>
++                                <term><varname>-b</varname></term>
+                                 <term><varname>emergency</varname></term>
+ 
+                                 <listitem><para>Boot into emergency
diff --git a/SOURCES/0027-polkit-Avoid-race-condition-in-scraping-proc.patch b/SOURCES/0027-polkit-Avoid-race-condition-in-scraping-proc.patch
deleted file mode 100644
index b1b1cc3..0000000
--- a/SOURCES/0027-polkit-Avoid-race-condition-in-scraping-proc.patch
+++ /dev/null
@@ -1,74 +0,0 @@
-From 88e8824997b26b821530384bb944e15a63e81301 Mon Sep 17 00:00:00 2001
-From: Colin Walters <walters@verbum.org>
-Date: Thu, 22 Aug 2013 13:55:21 -0400
-Subject: [PATCH] polkit: Avoid race condition in scraping /proc
-
-If a calling process execve()s a setuid program, it can appear to be
-uid 0.  Since we're receiving requests over DBus, avoid this by simply
-passing system-bus-name as a subject.
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1005142
----
- src/shared/polkit.c | 31 +++++--------------------------
- 1 file changed, 5 insertions(+), 26 deletions(-)
-
-diff --git a/src/shared/polkit.c b/src/shared/polkit.c
-index cea7074..1c5e9e3 100644
---- a/src/shared/polkit.c
-+++ b/src/shared/polkit.c
-@@ -38,12 +38,8 @@ int verify_polkit(
- 
- #ifdef ENABLE_POLKIT
-         DBusMessage *m = NULL, *reply = NULL;
--        const char *unix_process = "unix-process", *pid = "pid", *starttime = "start-time", *cancel_id = "";
-+        const char *system_bus_name = "system-bus-name", *name = "name", *cancel_id = "";
-         uint32_t flags = interactive ? 1 : 0;
--        pid_t pid_raw;
--        uint32_t pid_u32;
--        unsigned long long starttime_raw;
--        uint64_t starttime_u64;
-         DBusMessageIter iter_msg, iter_struct, iter_array, iter_dict, iter_variant;
-         int r;
-         dbus_bool_t authorized = FALSE, challenge = FALSE;
-@@ -68,14 +64,6 @@ int verify_polkit(
- 
- #ifdef ENABLE_POLKIT
- 
--        pid_raw = bus_get_unix_process_id(c, sender, error);
--        if (pid_raw == 0)
--                return -EINVAL;
--
--        r = get_starttime_of_pid(pid_raw, &starttime_raw);
--        if (r < 0)
--                return r;
--
-         m = dbus_message_new_method_call(
-                         "org.freedesktop.PolicyKit1",
-                         "/org/freedesktop/PolicyKit1/Authority",
-@@ -86,22 +74,13 @@ int verify_polkit(
- 
-         dbus_message_iter_init_append(m, &iter_msg);
- 
--        pid_u32 = (uint32_t) pid_raw;
--        starttime_u64 = (uint64_t) starttime_raw;
--
-         if (!dbus_message_iter_open_container(&iter_msg, DBUS_TYPE_STRUCT, NULL, &iter_struct) ||
--            !dbus_message_iter_append_basic(&iter_struct, DBUS_TYPE_STRING, &unix_process) ||
-+            !dbus_message_iter_append_basic(&iter_struct, DBUS_TYPE_STRING, &system_bus_name) ||
-             !dbus_message_iter_open_container(&iter_struct, DBUS_TYPE_ARRAY, "{sv}", &iter_array) ||
-             !dbus_message_iter_open_container(&iter_array, DBUS_TYPE_DICT_ENTRY, NULL, &iter_dict) ||
--            !dbus_message_iter_append_basic(&iter_dict, DBUS_TYPE_STRING, &pid) ||
--            !dbus_message_iter_open_container(&iter_dict, DBUS_TYPE_VARIANT, "u", &iter_variant) ||
--            !dbus_message_iter_append_basic(&iter_variant, DBUS_TYPE_UINT32, &pid_u32) ||
--            !dbus_message_iter_close_container(&iter_dict, &iter_variant) ||
--            !dbus_message_iter_close_container(&iter_array, &iter_dict) ||
--            !dbus_message_iter_open_container(&iter_array, DBUS_TYPE_DICT_ENTRY, NULL, &iter_dict) ||
--            !dbus_message_iter_append_basic(&iter_dict, DBUS_TYPE_STRING, &starttime) ||
--            !dbus_message_iter_open_container(&iter_dict, DBUS_TYPE_VARIANT, "t", &iter_variant) ||
--            !dbus_message_iter_append_basic(&iter_variant, DBUS_TYPE_UINT64, &starttime_u64) ||
-+            !dbus_message_iter_append_basic(&iter_dict, DBUS_TYPE_STRING, &name) ||
-+            !dbus_message_iter_open_container(&iter_dict, DBUS_TYPE_VARIANT, "s", &iter_variant) ||
-+            !dbus_message_iter_append_basic(&iter_variant, DBUS_TYPE_STRING, &sender) ||
-             !dbus_message_iter_close_container(&iter_dict, &iter_variant) ||
-             !dbus_message_iter_close_container(&iter_array, &iter_dict) ||
-             !dbus_message_iter_close_container(&iter_struct, &iter_array) ||
diff --git a/SOURCES/0028-core-whenever-a-new-PID-is-passed-to-us-make-sure-we.patch b/SOURCES/0028-core-whenever-a-new-PID-is-passed-to-us-make-sure-we.patch
deleted file mode 100644
index 0323c04..0000000
--- a/SOURCES/0028-core-whenever-a-new-PID-is-passed-to-us-make-sure-we.patch
+++ /dev/null
@@ -1,71 +0,0 @@
-From f47d0b042f6d0a1661dff9816410162693d1daa2 Mon Sep 17 00:00:00 2001
-From: Lennart Poettering <lennart@poettering.net>
-Date: Tue, 1 Oct 2013 05:06:56 +0200
-Subject: [PATCH] core: whenever a new PID is passed to us, make sure we watch
- it
-
----
- src/core/service.c | 21 +++++++++++++++------
- 1 file changed, 15 insertions(+), 6 deletions(-)
-
-diff --git a/src/core/service.c b/src/core/service.c
-index 246a86e..5953f45 100644
---- a/src/core/service.c
-+++ b/src/core/service.c
-@@ -191,7 +191,13 @@ static int service_set_main_pid(Service *s, pid_t pid) {
-         if (pid == getpid())
-                 return -EINVAL;
- 
--        service_unwatch_main_pid(s);
-+        if (s->main_pid == pid && s->main_pid_known)
-+                return 0;
-+
-+        if (s->main_pid != pid) {
-+                service_unwatch_main_pid(s);
-+                exec_status_start(&s->main_exec_status, pid);
-+        }
- 
-         s->main_pid = pid;
-         s->main_pid_known = true;
-@@ -205,8 +211,6 @@ static int service_set_main_pid(Service *s, pid_t pid) {
-         } else
-                 s->main_pid_alien = false;
- 
--        exec_status_start(&s->main_exec_status, pid);
--
-         return 0;
- }
- 
-@@ -2698,8 +2702,10 @@ static int service_deserialize_item(Unit *u, const char *key, const char *value,
- 
-                 if (parse_pid(value, &pid) < 0)
-                         log_debug_unit(u->id, "Failed to parse main-pid value %s", value);
--                else
--                        service_set_main_pid(s, (pid_t) pid);
-+                else {
-+                        service_set_main_pid(s, pid);
-+                        unit_watch_pid(UNIT(s), pid);
-+                }
-         } else if (streq(key, "main-pid-known")) {
-                 int b;
- 
-@@ -3391,6 +3397,7 @@ static void service_notify_message(Unit *u, pid_t pid, char **tags) {
-                         log_debug_unit(u->id,
-                                        "%s: got %s", u->id, e);
-                         service_set_main_pid(s, pid);
-+                        unit_watch_pid(UNIT(s), pid);
-                 }
-         }
- 
-@@ -3687,8 +3694,10 @@ static void service_bus_query_pid_done(
-             (s->state == SERVICE_START ||
-              s->state == SERVICE_START_POST ||
-              s->state == SERVICE_RUNNING ||
--             s->state == SERVICE_RELOAD))
-+             s->state == SERVICE_RELOAD)){
-                 service_set_main_pid(s, pid);
-+                unit_watch_pid(UNIT(s), pid);
-+        }
- }
- 
- int service_set_socket_fd(Service *s, int fd, Socket *sock) {
diff --git a/SOURCES/0028-tmpfiles-log-unaccessible-FUSE-mount-points-only-as-.patch b/SOURCES/0028-tmpfiles-log-unaccessible-FUSE-mount-points-only-as-.patch
new file mode 100644
index 0000000..b382add
--- /dev/null
+++ b/SOURCES/0028-tmpfiles-log-unaccessible-FUSE-mount-points-only-as-.patch
@@ -0,0 +1,34 @@
+From 710be393ae8d15a274f376677aa68c27cd107356 Mon Sep 17 00:00:00 2001
+From: Kay Sievers <kay@vrfy.org>
+Date: Thu, 17 Oct 2013 03:20:46 +0200
+Subject: [PATCH] tmpfiles: log unaccessible FUSE mount points only as debug
+ message
+
+---
+ src/tmpfiles/tmpfiles.c | 11 +++++++----
+ 1 file changed, 7 insertions(+), 4 deletions(-)
+
+diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c
+index 8122d6a..239e56b 100644
+--- a/src/tmpfiles/tmpfiles.c
++++ b/src/tmpfiles/tmpfiles.c
+@@ -275,12 +275,15 @@ static int dir_cleanup(
+                         continue;
+ 
+                 if (fstatat(dirfd(d), dent->d_name, &s, AT_SYMLINK_NOFOLLOW) < 0) {
++                        if (errno == ENOENT)
++                                continue;
+ 
+-                        if (errno != ENOENT) {
++                        /* FUSE, NFS mounts, SELinux might return EACCES */
++                        if (errno == EACCES)
++                                log_debug("stat(%s/%s) failed: %m", p, dent->d_name);
++                        else
+                                 log_error("stat(%s/%s) failed: %m", p, dent->d_name);
+-                                r = -errno;
+-                        }
+-
++                        r = -errno;
+                         continue;
+                 }
+ 
diff --git a/SOURCES/0029-remove-user-.service.patch b/SOURCES/0029-remove-user-.service.patch
deleted file mode 100644
index e61dcff..0000000
--- a/SOURCES/0029-remove-user-.service.patch
+++ /dev/null
@@ -1,91 +0,0 @@
-From 40810e62f4df958b2465dcc1923b8b827fb778e8 Mon Sep 17 00:00:00 2001
-From: Harald Hoyer <harald@redhat.com>
-Date: Wed, 30 Oct 2013 18:22:49 +0100
-Subject: [PATCH] remove user@.service
-
-fixes rhbz#1019738
----
- Makefile.am             |  2 --
- src/login/logind-user.c | 42 ------------------------------------------
- 2 files changed, 44 deletions(-)
-
-diff --git a/Makefile.am b/Makefile.am
-index eae001b..25bfd91 100644
---- a/Makefile.am
-+++ b/Makefile.am
-@@ -435,7 +435,6 @@ nodist_systemunit_DATA = \
- 	units/systemd-sysctl.service \
- 	units/emergency.service \
- 	units/rescue.service \
--	units/user@.service \
- 	units/systemd-hibernate.service \
- 	units/systemd-hybrid-sleep.service \
- 	units/systemd-suspend.service \
-@@ -484,7 +483,6 @@ EXTRA_DIST += \
- 	units/user/systemd-exit.service.in \
- 	units/systemd-fsck@.service.in \
- 	units/systemd-fsck-root.service.in \
--	units/user@.service.in \
- 	units/systemd-udevd.service \
- 	units/systemd-udev-trigger.service \
- 	units/systemd-udev-settle.service \
-diff --git a/src/login/logind-user.c b/src/login/logind-user.c
-index adbe638..9cc186b 100644
---- a/src/login/logind-user.c
-+++ b/src/login/logind-user.c
-@@ -365,43 +365,6 @@ static int user_start_slice(User *u) {
-         return 0;
- }
- 
--static int user_start_service(User *u) {
--        DBusError error;
--        char *job;
--        int r;
--
--        assert(u);
--
--        dbus_error_init(&error);
--
--        if (!u->service) {
--                char lu[DECIMAL_STR_MAX(unsigned long) + 1], *service;
--                sprintf(lu, "%lu", (unsigned long) u->uid);
--
--                service = unit_name_build("user", lu, ".service");
--                if (!service)
--                        return log_oom();
--
--                r = manager_start_unit(u->manager, service, &error, &job);
--                if (r < 0) {
--                        log_error("Failed to start user service: %s", bus_error(&error, r));
--                        dbus_error_free(&error);
--
--                        free(service);
--                } else {
--                        u->service = service;
--
--                        free(u->service_job);
--                        u->service_job = job;
--                }
--        }
--
--        if (u->service)
--                hashmap_put(u->manager->user_units, u->service, u);
--
--        return 0;
--}
--
- int user_start(User *u) {
-         int r;
- 
-@@ -422,11 +385,6 @@ int user_start(User *u) {
-         if (r < 0)
-                 return r;
- 
--        /* Spawn user systemd */
--        r = user_start_service(u);
--        if (r < 0)
--                return r;
--
-         if (!dual_timestamp_is_set(&u->timestamp))
-                 dual_timestamp_get(&u->timestamp);
- 
diff --git a/SOURCES/0029-shared-util-fix-off-by-one-error-in-tag_to_udev_node.patch b/SOURCES/0029-shared-util-fix-off-by-one-error-in-tag_to_udev_node.patch
new file mode 100644
index 0000000..4ab2711
--- /dev/null
+++ b/SOURCES/0029-shared-util-fix-off-by-one-error-in-tag_to_udev_node.patch
@@ -0,0 +1,47 @@
+From 2f7ce3bd875000149a0868b0652d40406c534f8b Mon Sep 17 00:00:00 2001
+From: Dave Reisner <dreisner@archlinux.org>
+Date: Sun, 6 Oct 2013 18:26:23 -0400
+Subject: [PATCH] shared/util: fix off-by-one error in tag_to_udev_node
+
+Triggered false negatives when encoding a string which needed every
+character to be escaped, e.g. "LABEL=/".
+---
+ src/shared/util.c            | 2 +-
+ src/test/test-device-nodes.c | 4 +++-
+ 2 files changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/src/shared/util.c b/src/shared/util.c
+index 48adc83..6c88040 100644
+--- a/src/shared/util.c
++++ b/src/shared/util.c
+@@ -3527,7 +3527,7 @@ static char *tag_to_udev_node(const char *tagvalue, const char *by) {
+         if (u == NULL)
+                 return NULL;
+ 
+-        enc_len = strlen(u) * 4;
++        enc_len = strlen(u) * 4 + 1;
+         t = new(char, enc_len);
+         if (t == NULL)
+                 return NULL;
+diff --git a/src/test/test-device-nodes.c b/src/test/test-device-nodes.c
+index 2f3dedb..59ba4be 100644
+--- a/src/test/test-device-nodes.c
++++ b/src/test/test-device-nodes.c
+@@ -26,7 +26,7 @@
+ 
+ /* helpers for test_encode_devnode_name */
+ static char *do_encode_string(const char *in) {
+-        size_t out_len = strlen(in) * 4;
++        size_t out_len = strlen(in) * 4 + 1;
+         char *out = malloc(out_len);
+ 
+         assert_se(out);
+@@ -46,6 +46,8 @@ static void test_encode_devnode_name(void) {
+         assert_se(expect_encoded_as("pinkiepie", "pinkiepie"));
+         assert_se(expect_encoded_as("valíd\\ųtf8", "valíd\\x5cųtf8"));
+         assert_se(expect_encoded_as("s/ash/ng", "s\\x2fash\\x2fng"));
++        assert_se(expect_encoded_as("/", "\\x2f"));
++        assert_se(expect_encoded_as("!", "\\x21"));
+ }
+ 
+ int main(int argc, char *argv[]) {
diff --git a/SOURCES/0030-Configurable-Timeouts-Restarts-default-values.patch b/SOURCES/0030-Configurable-Timeouts-Restarts-default-values.patch
new file mode 100644
index 0000000..01bebfb
--- /dev/null
+++ b/SOURCES/0030-Configurable-Timeouts-Restarts-default-values.patch
@@ -0,0 +1,293 @@
+From cd1c485f2fc5b23c7cdccb0dd852c7228fc79868 Mon Sep 17 00:00:00 2001
+From: Oleksii Shevchuk <alxchk@gmail.com>
+Date: Mon, 4 Nov 2013 18:47:43 +0200
+Subject: [PATCH] Configurable Timeouts/Restarts default values
+
+https://bugs.freedesktop.org/show_bug.cgi?id=71132
+
+Patch adds DefaultTimeoutStartSec, DefaultTimeoutStopSec, DefaultRestartSec
+configuration options to manager configuration file.
+---
+ man/systemd-system.conf.xml | 24 +++++++++++++++++++++++-
+ man/systemd.mount.xml       |  4 ++--
+ man/systemd.service.xml     |  6 ++++--
+ man/systemd.socket.xml      |  4 ++--
+ man/systemd.swap.xml        |  4 ++--
+ src/core/device.c           |  2 +-
+ src/core/main.c             |  9 +++++++++
+ src/core/manager.h          |  3 +++
+ src/core/mount.c            |  2 +-
+ src/core/scope.c            |  2 +-
+ src/core/service.c          |  6 +++---
+ src/core/socket.c           |  2 +-
+ src/core/swap.c             |  2 +-
+ src/core/system.conf        |  3 +++
+ src/core/user.conf          |  3 +++
+ 15 files changed, 59 insertions(+), 17 deletions(-)
+
+diff --git a/man/systemd-system.conf.xml b/man/systemd-system.conf.xml
+index e8cf8a9..c1f2648 100644
+--- a/man/systemd-system.conf.xml
++++ b/man/systemd-system.conf.xml
+@@ -61,7 +61,6 @@
+                 otherwise <filename>user.conf</filename>. These
+                 configuration files contain a few settings controlling
+                 basic manager operations.</para>
+-
+         </refsect1>
+ 
+         <refsect1>
+@@ -95,6 +94,29 @@
+                         </varlistentry>
+ 
+                         <varlistentry>
++                                <term><varname>DefaultTimeoutStartSec=</varname></term>
++                                <term><varname>DefaultTimeoutStopSec=</varname></term>
++                                <term><varname>DefaultRestartSec=</varname></term>
++
++                                <listitem><para>Configures the default
++                                time-outs for starting and stopping of
++                                units, as well as the default time to
++                                sleep between automatic restarts of a
++                                units, as configured per-unit in
++                                <varname>TimeoutStartSec=</varname>,
++                                <varname>TimeoutStopSec=</varname> and
++                                <varname>RestartSec=</varname> (for
++                                service units see
++                                <citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry>
++                                for details on the per-unit
++                                settings). For non-service units
++                                <varname>DefaultTimeoutStartSec=</varname>
++                                sets the default
++                                <varname>TimeoutSec=</varname> value.
++                                </para></listitem>
++                        </varlistentry>
++
++                        <varlistentry>
+                                 <term><varname>CPUAffinity=</varname></term>
+ 
+                                 <listitem><para>Configures the initial
+diff --git a/man/systemd.mount.xml b/man/systemd.mount.xml
+index 48af1ca..71a5736 100644
+--- a/man/systemd.mount.xml
++++ b/man/systemd.mount.xml
+@@ -260,8 +260,8 @@
+                                 Takes a unit-less value in seconds, or
+                                 a time span value such as "5min
+                                 20s". Pass 0 to disable the timeout
+-                                logic. Defaults to
+-                                90s.</para></listitem>
++                                logic. Default value is setted up in manager configuration
++                                file via <term><varname>DefaultTimeoutStart=</varname></term>.</para></listitem>
+                         </varlistentry>
+                 </variablelist>
+ 
+diff --git a/man/systemd.service.xml b/man/systemd.service.xml
+index 5e1ddf7..df04048 100644
+--- a/man/systemd.service.xml
++++ b/man/systemd.service.xml
+@@ -524,7 +524,8 @@
+                                 Takes a unit-less value in seconds, or a
+                                 time span value such as "5min
+                                 20s". Pass 0 to disable the timeout
+-                                logic. Defaults to 90s, except when
++                                logic. Defaults to <varname>TimeoutStartSec=</varname> in
++                                manager configuration file, except when
+                                 <varname>Type=oneshot</varname> is
+                                 used in which case the timeout
+                                 is disabled by default.
+@@ -545,7 +546,8 @@
+                                 Takes a unit-less value in seconds, or a
+                                 time span value such as "5min
+                                 20s". Pass 0 to disable the timeout
+-                                logic. Defaults to 90s.
++                                logic. Defaults to <varname>TimeoutStartSec=</varname> in
++                                manager configuration file.
+                                 </para></listitem>
+                         </varlistentry>
+ 
+diff --git a/man/systemd.socket.xml b/man/systemd.socket.xml
+index 8c88d9f..1c78562 100644
+--- a/man/systemd.socket.xml
++++ b/man/systemd.socket.xml
+@@ -679,8 +679,8 @@
+                                 Takes a unit-less value in seconds, or
+                                 a time span value such as "5min
+                                 20s". Pass 0 to disable the timeout
+-                                logic. Defaults to
+-                                90s.</para></listitem>
++                                logic. Defaults to <varname>TimeoutStartSec=</varname> in
++                                manager configuration file.</para></listitem>
+                         </varlistentry>
+ 
+                         <varlistentry>
+diff --git a/man/systemd.swap.xml b/man/systemd.swap.xml
+index 813ae6c..13f6c84 100644
+--- a/man/systemd.swap.xml
++++ b/man/systemd.swap.xml
+@@ -186,8 +186,8 @@
+                                 Takes a unit-less value in seconds, or
+                                 a time span value such as "5min
+                                 20s". Pass 0 to disable the timeout
+-                                logic. Defaults to
+-                                90s.</para></listitem>
++                                logic. Defaults to <varname>TimeoutStartSec=</varname> in
++                                manager configuration file.</para></listitem>
+                         </varlistentry>
+                 </variablelist>
+ 
+diff --git a/src/core/device.c b/src/core/device.c
+index 9fca82a..5397bd6 100644
+--- a/src/core/device.c
++++ b/src/core/device.c
+@@ -70,7 +70,7 @@ static void device_init(Unit *u) {
+          * indefinitely for plugged in devices, something which cannot
+          * happen for the other units since their operations time out
+          * anyway. */
+-        UNIT(d)->job_timeout = DEFAULT_TIMEOUT_USEC;
++        UNIT(d)->job_timeout = u->manager->default_timeout_start_usec;
+ 
+         UNIT(d)->ignore_on_isolate = true;
+         UNIT(d)->ignore_on_snapshot = true;
+diff --git a/src/core/main.c b/src/core/main.c
+index fe291f8..937994c 100644
+--- a/src/core/main.c
++++ b/src/core/main.c
+@@ -90,6 +90,9 @@ static bool arg_switched_root = false;
+ static char ***arg_join_controllers = NULL;
+ static ExecOutput arg_default_std_output = EXEC_OUTPUT_JOURNAL;
+ static ExecOutput arg_default_std_error = EXEC_OUTPUT_INHERIT;
++static usec_t arg_default_restart_usec = DEFAULT_RESTART_USEC;
++static usec_t arg_default_timeout_start_usec = DEFAULT_TIMEOUT_USEC;
++static usec_t arg_default_timeout_stop_usec = DEFAULT_TIMEOUT_USEC;
+ static usec_t arg_runtime_watchdog = 0;
+ static usec_t arg_shutdown_watchdog = 10 * USEC_PER_MINUTE;
+ static char **arg_default_environment = NULL;
+@@ -636,6 +639,9 @@ static int parse_config_file(void) {
+                 { "Manager", "CPUAffinity",           config_parse_cpu_affinity2, 0, NULL                    },
+                 { "Manager", "DefaultStandardOutput", config_parse_output,       0, &arg_default_std_output  },
+                 { "Manager", "DefaultStandardError",  config_parse_output,       0, &arg_default_std_error   },
++                { "Manager", "DefaultTimeoutStartSec", config_parse_sec,         0, &arg_default_timeout_start_usec },
++                { "Manager", "DefaultTimeoutStopSec", config_parse_sec,          0, &arg_default_timeout_stop_usec  },
++                { "Manager", "DefaultRestartSec",     config_parse_sec,          0, &arg_default_restart_usec  },
+                 { "Manager", "JoinControllers",       config_parse_join_controllers, 0, &arg_join_controllers },
+                 { "Manager", "RuntimeWatchdogSec",    config_parse_sec,          0, &arg_runtime_watchdog    },
+                 { "Manager", "ShutdownWatchdogSec",   config_parse_sec,          0, &arg_shutdown_watchdog   },
+@@ -1542,6 +1548,9 @@ int main(int argc, char *argv[]) {
+         m->confirm_spawn = arg_confirm_spawn;
+         m->default_std_output = arg_default_std_output;
+         m->default_std_error = arg_default_std_error;
++        m->default_restart_usec = arg_default_restart_usec;
++        m->default_timeout_start_usec = arg_default_timeout_start_usec;
++        m->default_timeout_stop_usec = arg_default_timeout_stop_usec;
+         m->runtime_watchdog = arg_runtime_watchdog;
+         m->shutdown_watchdog = arg_shutdown_watchdog;
+         m->userspace_timestamp = userspace_timestamp;
+diff --git a/src/core/manager.h b/src/core/manager.h
+index a3049b5..e74c609 100644
+--- a/src/core/manager.h
++++ b/src/core/manager.h
+@@ -230,6 +230,9 @@ struct Manager {
+ 
+         ExecOutput default_std_output, default_std_error;
+ 
++        usec_t default_restart_usec, default_timeout_start_usec,
++                default_timeout_stop_usec;
++
+         struct rlimit *rlimit[RLIMIT_NLIMITS];
+ 
+         /* non-zero if we are reloading or reexecuting, */
+diff --git a/src/core/mount.c b/src/core/mount.c
+index 70cd372..c0445a6 100644
+--- a/src/core/mount.c
++++ b/src/core/mount.c
+@@ -131,7 +131,7 @@ static void mount_init(Unit *u) {
+         assert(u);
+         assert(u->load_state == UNIT_STUB);
+ 
+-        m->timeout_usec = DEFAULT_TIMEOUT_USEC;
++        m->timeout_usec = u->manager->default_timeout_start_usec;
+         m->directory_mode = 0755;
+ 
+         exec_context_init(&m->exec_context);
+diff --git a/src/core/scope.c b/src/core/scope.c
+index 50e5dba..41da3b9 100644
+--- a/src/core/scope.c
++++ b/src/core/scope.c
+@@ -46,7 +46,7 @@ static void scope_init(Unit *u) {
+         assert(u);
+         assert(u->load_state == UNIT_STUB);
+ 
+-        s->timeout_stop_usec = DEFAULT_TIMEOUT_USEC;
++        s->timeout_stop_usec = u->manager->default_timeout_stop_usec;
+ 
+         watch_init(&s->timer_watch);
+ 
+diff --git a/src/core/service.c b/src/core/service.c
+index 96ed2d3..e81aa1f 100644
+--- a/src/core/service.c
++++ b/src/core/service.c
+@@ -124,9 +124,9 @@ static void service_init(Unit *u) {
+         assert(u);
+         assert(u->load_state == UNIT_STUB);
+ 
+-        s->timeout_start_usec = DEFAULT_TIMEOUT_USEC;
+-        s->timeout_stop_usec = DEFAULT_TIMEOUT_USEC;
+-        s->restart_usec = DEFAULT_RESTART_USEC;
++        s->timeout_start_usec = u->manager->default_timeout_start_usec;
++        s->timeout_stop_usec = u->manager->default_timeout_stop_usec;
++        s->restart_usec = u->manager->default_restart_usec;
+         s->type = _SERVICE_TYPE_INVALID;
+ 
+         watch_init(&s->watchdog_watch);
+diff --git a/src/core/socket.c b/src/core/socket.c
+index 6c0ac1a..d368f7e 100644
+--- a/src/core/socket.c
++++ b/src/core/socket.c
+@@ -73,7 +73,7 @@ static void socket_init(Unit *u) {
+         assert(u->load_state == UNIT_STUB);
+ 
+         s->backlog = SOMAXCONN;
+-        s->timeout_usec = DEFAULT_TIMEOUT_USEC;
++        s->timeout_usec = u->manager->default_timeout_start_usec;
+         s->directory_mode = 0755;
+         s->socket_mode = 0666;
+ 
+diff --git a/src/core/swap.c b/src/core/swap.c
+index a68ab7c..147f710 100644
+--- a/src/core/swap.c
++++ b/src/core/swap.c
+@@ -86,7 +86,7 @@ static void swap_init(Unit *u) {
+         assert(s);
+         assert(UNIT(s)->load_state == UNIT_STUB);
+ 
+-        s->timeout_usec = DEFAULT_TIMEOUT_USEC;
++        s->timeout_usec = u->manager->default_timeout_start_usec;
+ 
+         exec_context_init(&s->exec_context);
+         s->exec_context.std_output = u->manager->default_std_output;
+diff --git a/src/core/system.conf b/src/core/system.conf
+index 7b03c87..3c6cc03 100644
+--- a/src/core/system.conf
++++ b/src/core/system.conf
+@@ -24,6 +24,9 @@
+ #ShutdownWatchdogSec=10min
+ #CapabilityBoundingSet=
+ #TimerSlackNSec=
++#DefaultTimeoutStartSec=90s
++#DefaultTimeoutStopSec=90s
++#DefaultRestartSec=100ms
+ #DefaultEnvironment=
+ #DefaultLimitCPU=
+ #DefaultLimitFSIZE=
+diff --git a/src/core/user.conf b/src/core/user.conf
+index 4a0129a..b030701 100644
+--- a/src/core/user.conf
++++ b/src/core/user.conf
+@@ -14,3 +14,6 @@
+ #LogLocation=no
+ #DefaultStandardOutput=inherit
+ #DefaultStandardError=inherit
++#DefaultTimeoutStartSec=90s
++#DefaultTimeoutStopSec=90s
++#DefaultRestartSec=100ms
diff --git a/SOURCES/0030-cgroup-always-enable-memory.use_hierarchy-for-all-cg.patch b/SOURCES/0030-cgroup-always-enable-memory.use_hierarchy-for-all-cg.patch
deleted file mode 100644
index 266f504..0000000
--- a/SOURCES/0030-cgroup-always-enable-memory.use_hierarchy-for-all-cg.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-From 8986b8ccd7ea39d75246b72f497a4131a278f3bb Mon Sep 17 00:00:00 2001
-From: Lennart Poettering <lennart@poettering.net>
-Date: Mon, 23 Sep 2013 16:02:31 -0500
-Subject: [PATCH] cgroup: always enable memory.use_hierarchy= for all cgroups
- in the memory hierarchy
-
-The non-hierarchial mode contradicts the whole idea of a cgroup tree so
-let's not support this. In the future the kernel will only support the
-hierarchial logic anyway.
----
- src/core/cgroup.c | 3 +++
- 1 file changed, 3 insertions(+)
-
-diff --git a/src/core/cgroup.c b/src/core/cgroup.c
-index 9277dd6..7f29afb 100644
---- a/src/core/cgroup.c
-+++ b/src/core/cgroup.c
-@@ -678,6 +678,9 @@ int manager_setup_cgroup(Manager *m) {
-         /* 6. Figure out which controllers are supported */
-         m->cgroup_supported = cg_mask_supported();
- 
-+        /* 7.  Always enable hierarchial support if it exists... */
-+        cg_set_attribute("memory", "/", "memory.use_hierarchy", "1");
-+
-         return 0;
- }
- 
diff --git a/SOURCES/0031-logind-return-EINVAL-when-PID-is-wrong.patch b/SOURCES/0031-logind-return-EINVAL-when-PID-is-wrong.patch
deleted file mode 100644
index 4a7f024..0000000
--- a/SOURCES/0031-logind-return-EINVAL-when-PID-is-wrong.patch
+++ /dev/null
@@ -1,45 +0,0 @@
-From 07c3b93b709a601398ce5e06d48f215d097ed959 Mon Sep 17 00:00:00 2001
-From: Lukas Nykryn <lnykryn@redhat.com>
-Date: Tue, 24 Sep 2013 16:27:20 +0200
-Subject: [PATCH] logind: return -EINVAL when PID is wrong
-
-dbus-send --print-reply --system --dest=org.freedesktop.login1
-/org/freedesktop/login1 org.freedesktop.login1.Manager.GetUserByPID
-uint32:0
-causes
-systemd-logind[29843]: Assertion 'pid >= 1' failed at
-src/login/logind.c:938, function manager_get_user_by_pid(). Aborting.
----
- src/login/logind.c | 8 ++++++--
- 1 file changed, 6 insertions(+), 2 deletions(-)
-
-diff --git a/src/login/logind.c b/src/login/logind.c
-index 4ef92b8..afc737c 100644
---- a/src/login/logind.c
-+++ b/src/login/logind.c
-@@ -914,9 +914,11 @@ int manager_get_session_by_pid(Manager *m, pid_t pid, Session **session) {
-         int r;
- 
-         assert(m);
--        assert(pid >= 1);
-         assert(session);
- 
-+        if (pid < 1)
-+                return -EINVAL;
-+
-         r = cg_pid_get_unit(pid, &unit);
-         if (r < 0)
-                 return r;
-@@ -935,9 +937,11 @@ int manager_get_user_by_pid(Manager *m, pid_t pid, User **user) {
-         int r;
- 
-         assert(m);
--        assert(pid >= 1);
-         assert(user);
- 
-+        if (pid < 1)
-+                return -EINVAL;
-+
-         r = cg_pid_get_slice(pid, &unit);
-         if (r < 0)
-                 return r;
diff --git a/SOURCES/0031-manager-configurable-StartLimit-default-values.patch b/SOURCES/0031-manager-configurable-StartLimit-default-values.patch
new file mode 100644
index 0000000..af95ca1
--- /dev/null
+++ b/SOURCES/0031-manager-configurable-StartLimit-default-values.patch
@@ -0,0 +1,161 @@
+From 409dbe76d743448629167f4412f290bba1aae11e Mon Sep 17 00:00:00 2001
+From: Lukas Nykryn <lnykryn@redhat.com>
+Date: Fri, 8 Nov 2013 16:01:22 +0100
+Subject: [PATCH] manager: configurable StartLimit default values
+
+https://bugzilla.redhat.com/show_bug.cgi?id=821723
+---
+ man/systemd-system.conf.xml | 13 +++++++++++++
+ man/systemd.service.xml     |  9 ++++++---
+ src/core/main.c             |  6 ++++++
+ src/core/manager.h          |  3 +++
+ src/core/service.c          |  4 +++-
+ src/core/system.conf        |  2 ++
+ src/core/user.conf          |  2 ++
+ src/shared/def.h            |  3 +++
+ 8 files changed, 38 insertions(+), 4 deletions(-)
+
+diff --git a/man/systemd-system.conf.xml b/man/systemd-system.conf.xml
+index c1f2648..9a1a99f 100644
+--- a/man/systemd-system.conf.xml
++++ b/man/systemd-system.conf.xml
+@@ -115,6 +115,19 @@
+                                 <varname>TimeoutSec=</varname> value.
+                                 </para></listitem>
+                         </varlistentry>
++                        <varlistentry>
++                                <term><varname>DefaultStartLimitInterval=</varname></term>
++                                <term><varname>DefaultStartLimitBurst=</varname></term>
++
++                                <listitem><para>Configure the default start rate
++                                limiting, as configured per-service by
++                                <varname>StartLimitInterval=</varname> and
++                                <varname>StartLimitBurst=</varname>. See
++                                <citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry>
++                                for details on the per-service
++                                settings).
++                                </para></listitem>
++                        </varlistentry>
+ 
+                         <varlistentry>
+                                 <term><varname>CPUAffinity=</varname></term>
+diff --git a/man/systemd.service.xml b/man/systemd.service.xml
+index df04048..3f31c11 100644
+--- a/man/systemd.service.xml
++++ b/man/systemd.service.xml
+@@ -863,12 +863,15 @@
+                                 these two options, this rate limiting
+                                 may be modified. Use
+                                 <varname>StartLimitInterval=</varname>
+-                                to configure the checking interval
+-                                (defaults to 10s, set to 0 to disable
++                                to configure the checking interval (defaults to
++                                <varname>DefaultStartLimitInterval=</varname> in
++                                manager configuration file, set to 0 to disable
+                                 any kind of rate limiting). Use
+                                 <varname>StartLimitBurst=</varname> to
+                                 configure how many starts per interval
+-                                are allowed (defaults to 5). These
++                                are allowed (defaults to
++                                <varname>DefaultStartLimitBurst=</varname> in
++                                manager configuration file). These
+                                 configuration options are particularly
+                                 useful in conjunction with
+                                 <varname>Restart=</varname>, however
+diff --git a/src/core/main.c b/src/core/main.c
+index 937994c..00fd394 100644
+--- a/src/core/main.c
++++ b/src/core/main.c
+@@ -93,6 +93,8 @@ static ExecOutput arg_default_std_error = EXEC_OUTPUT_INHERIT;
+ static usec_t arg_default_restart_usec = DEFAULT_RESTART_USEC;
+ static usec_t arg_default_timeout_start_usec = DEFAULT_TIMEOUT_USEC;
+ static usec_t arg_default_timeout_stop_usec = DEFAULT_TIMEOUT_USEC;
++static usec_t arg_default_start_limit_interval = DEFAULT_START_LIMIT_INTERVAL;
++static unsigned arg_default_start_limit_burst = DEFAULT_START_LIMIT_BURST;
+ static usec_t arg_runtime_watchdog = 0;
+ static usec_t arg_shutdown_watchdog = 10 * USEC_PER_MINUTE;
+ static char **arg_default_environment = NULL;
+@@ -642,6 +644,8 @@ static int parse_config_file(void) {
+                 { "Manager", "DefaultTimeoutStartSec", config_parse_sec,         0, &arg_default_timeout_start_usec },
+                 { "Manager", "DefaultTimeoutStopSec", config_parse_sec,          0, &arg_default_timeout_stop_usec  },
+                 { "Manager", "DefaultRestartSec",     config_parse_sec,          0, &arg_default_restart_usec  },
++                { "Manager", "DefaultStartLimitInterval", config_parse_sec,      0, &arg_default_start_limit_interval },
++                { "Manager", "DefaultStartLimitBurst", config_parse_unsigned,    0, &arg_default_start_limit_burst },
+                 { "Manager", "JoinControllers",       config_parse_join_controllers, 0, &arg_join_controllers },
+                 { "Manager", "RuntimeWatchdogSec",    config_parse_sec,          0, &arg_runtime_watchdog    },
+                 { "Manager", "ShutdownWatchdogSec",   config_parse_sec,          0, &arg_shutdown_watchdog   },
+@@ -1551,6 +1555,8 @@ int main(int argc, char *argv[]) {
+         m->default_restart_usec = arg_default_restart_usec;
+         m->default_timeout_start_usec = arg_default_timeout_start_usec;
+         m->default_timeout_stop_usec = arg_default_timeout_stop_usec;
++        m->default_start_limit_interval = arg_default_start_limit_interval;
++        m->default_start_limit_burst = arg_default_start_limit_burst;
+         m->runtime_watchdog = arg_runtime_watchdog;
+         m->shutdown_watchdog = arg_shutdown_watchdog;
+         m->userspace_timestamp = userspace_timestamp;
+diff --git a/src/core/manager.h b/src/core/manager.h
+index e74c609..ee42c5e 100644
+--- a/src/core/manager.h
++++ b/src/core/manager.h
+@@ -233,6 +233,9 @@ struct Manager {
+         usec_t default_restart_usec, default_timeout_start_usec,
+                 default_timeout_stop_usec;
+ 
++        usec_t default_start_limit_interval;
++        unsigned default_start_limit_burst;
++
+         struct rlimit *rlimit[RLIMIT_NLIMITS];
+ 
+         /* non-zero if we are reloading or reexecuting, */
+diff --git a/src/core/service.c b/src/core/service.c
+index e81aa1f..5662180 100644
+--- a/src/core/service.c
++++ b/src/core/service.c
+@@ -143,7 +143,9 @@ static void service_init(Unit *u) {
+         kill_context_init(&s->kill_context);
+         cgroup_context_init(&s->cgroup_context);
+ 
+-        RATELIMIT_INIT(s->start_limit, 10*USEC_PER_SEC, 5);
++        RATELIMIT_INIT(s->start_limit,
++                       u->manager->default_start_limit_interval,
++                       u->manager->default_start_limit_burst);
+ 
+         s->control_command_id = _SERVICE_EXEC_COMMAND_INVALID;
+ }
+diff --git a/src/core/system.conf b/src/core/system.conf
+index 3c6cc03..38bbca5 100644
+--- a/src/core/system.conf
++++ b/src/core/system.conf
+@@ -27,6 +27,8 @@
+ #DefaultTimeoutStartSec=90s
+ #DefaultTimeoutStopSec=90s
+ #DefaultRestartSec=100ms
++#DefaultStartLimitInterval=10s
++#DefaultStartLimitBurst=5
+ #DefaultEnvironment=
+ #DefaultLimitCPU=
+ #DefaultLimitFSIZE=
+diff --git a/src/core/user.conf b/src/core/user.conf
+index b030701..923ca66 100644
+--- a/src/core/user.conf
++++ b/src/core/user.conf
+@@ -17,3 +17,5 @@
+ #DefaultTimeoutStartSec=90s
+ #DefaultTimeoutStopSec=90s
+ #DefaultRestartSec=100ms
++#DefaultStartLimitInterval=10s
++#DefaultStartLimitBurst=5
+diff --git a/src/shared/def.h b/src/shared/def.h
+index edd0bcf..e4ef735 100644
+--- a/src/shared/def.h
++++ b/src/shared/def.h
+@@ -27,6 +27,9 @@
+ #define DEFAULT_RESTART_USEC (100*USEC_PER_MSEC)
+ #define DEFAULT_CONFIRM_USEC (30*USEC_PER_SEC)
+ 
++#define DEFAULT_START_LIMIT_INTERVAL (10*USEC_PER_SEC)
++#define DEFAULT_START_LIMIT_BURST 5
++
+ #define DEFAULT_EXIT_USEC (5*USEC_PER_MINUTE)
+ 
+ #define SYSTEMD_CGROUP_CONTROLLER "name=systemd"
diff --git a/SOURCES/0032-core-drop-some-out-of-date-references-to-cgroup-sett.patch b/SOURCES/0032-core-drop-some-out-of-date-references-to-cgroup-sett.patch
deleted file mode 100644
index 84e5fa1..0000000
--- a/SOURCES/0032-core-drop-some-out-of-date-references-to-cgroup-sett.patch
+++ /dev/null
@@ -1,197 +0,0 @@
-From 873b06ca6f97f7288c98647fa5e761847122a382 Mon Sep 17 00:00:00 2001
-From: Lennart Poettering <lennart@poettering.net>
-Date: Thu, 26 Sep 2013 22:49:44 +0200
-Subject: [PATCH] core: drop some out-of-date references to cgroup settings
-
----
- man/systemd-cgtop.xml       | 36 +++++++++++++++---------------------
- man/systemd-system.conf.xml | 27 +--------------------------
- man/systemd.unit.xml        |  5 ++++-
- src/core/dbus-manager.c     | 27 ---------------------------
- src/core/system.conf        |  3 +--
- src/core/user.conf          |  1 -
- 6 files changed, 21 insertions(+), 78 deletions(-)
-
-diff --git a/man/systemd-cgtop.xml b/man/systemd-cgtop.xml
-index 0e9e5e6..51549c4 100644
---- a/man/systemd-cgtop.xml
-+++ b/man/systemd-cgtop.xml
-@@ -73,30 +73,23 @@
-                 only accounted for control groups in the
-                 <literal>cpuacct</literal> hierarchy, memory usage
-                 only for those in <literal>memory</literal> and disk
--                I/O usage for those in
--                <literal>blkio</literal>. <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>
--                by default places all services in their own control
--                group in the <literal>cpuacct</literal> hierarchy, but
--                not in <literal>memory</literal> nor
--                <literal>blkio</literal>. If resource monitoring for
--                these resources is required, it is recommended to add
--                <literal>blkio</literal> and <literal>memory</literal>
--                to the <varname>DefaultControllers=</varname> setting
--                in <filename>/etc/systemd/system.conf</filename> (see
--                <citerefentry><refentrytitle>systemd-system.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>
--                for details). Alternatively, it is possible to enable
--                resource accounting individually for services, by
--                making use of the <varname>ControlGroup=</varname>
--                option in the unit files (See
--                <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>
-+                I/O usage for those in <literal>blkio</literal>. If
-+                resource monitoring for these resources is required,
-+                it is recommended to add the
-+                <varname>CPUAccounting=1</varname>,
-+                <varname>MemoryAccounting=1</varname> and
-+                <varname>BlockIOAccounting=1</varname> settings in the
-+                unit files in question (See
-+                <citerefentry><refentrytitle>systemd.cgroup</refentrytitle><manvolnum>5</manvolnum></citerefentry>
-                 for details).</para>
- 
-                 <para>To emphasize this: unless
--                <literal>blkio</literal> and <literal>memory</literal>
--                are enabled for the services in question with either
--                of the options suggested above no resource accounting
--                will be available for system services and the data shown
--                by <command>systemd-cgtop</command> will be
-+                <literal>CPUAccounting=1</literal>,
-+                <literal>MemoryAccounting=1</literal> and
-+                <literal>BlockIOAccounting=1</literal> are enabled for
-+                the services in question no resource accounting will
-+                be available for system services and the data shown by
-+                <command>systemd-cgtop</command> will be
-                 incomplete.</para>
-         </refsect1>
- 
-@@ -281,6 +274,7 @@
-                         <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
-                         <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
-                         <citerefentry><refentrytitle>systemd-cgls</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
-+                        <citerefentry><refentrytitle>systemd.cgroup</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
-                         <citerefentry><refentrytitle>top</refentrytitle><manvolnum>1</manvolnum></citerefentry>
-                 </para>
-         </refsect1>
-diff --git a/man/systemd-system.conf.xml b/man/systemd-system.conf.xml
-index c52e590..e8cf8a9 100644
---- a/man/systemd-system.conf.xml
-+++ b/man/systemd-system.conf.xml
-@@ -104,32 +104,7 @@
-                         </varlistentry>
- 
-                         <varlistentry>
--                                <term><varname>DefaultControllers=cpu</varname></term>
--
--                                <listitem><para>Configures in which
--                                control group hierarchies to create
--                                per-service cgroups automatically, in
--                                addition to the
--                                <literal>name=systemd</literal> named
--                                hierarchy. Defaults to
--                                <literal>cpu</literal>. Takes a
--                                space-separated list of controller
--                                names. Pass the empty string to ensure
--                                that systemd does not touch any
--                                hierarchies but its own.</para>
--
--                                <para>Note that the default value of
--                                'cpu' will make realtime scheduling
--                                unavailable to system services. See
--                                <ulink
--                                url="http://www.freedesktop.org/wiki/Software/systemd/MyServiceCantGetRealtime">My
--                                Service Can't Get Realtime!</ulink>
--                                for more
--                                information.</para></listitem>
--                        </varlistentry>
--
--                        <varlistentry>
--                                <term><varname>JoinControllers=cpu,cpuacct,cpuset net_cls,netprio</varname></term>
-+                                <term><varname>JoinControllers=cpu,cpuacct net_cls,netprio</varname></term>
- 
-                                 <listitem><para>Configures controllers
-                                 that shall be mounted in a single
-diff --git a/man/systemd.unit.xml b/man/systemd.unit.xml
-index d61426a..5c8b8e8 100644
---- a/man/systemd.unit.xml
-+++ b/man/systemd.unit.xml
-@@ -1241,7 +1241,10 @@
-                       <row>
-                         <entry><literal>%R</literal></entry>
-                         <entry>Parent directory of the control group path where units are placed.</entry>
--                        <entry>For system instances this usually resolves to <filename>/</filename>, except in containers, where this resolves to the container's root directory. This specifier is particularly useful in the <varname>ControlGroup=</varname> setting (see <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>).</entry>
-+                        <entry>For system instances this usually
-+                        resolves to <filename>/</filename>, except in
-+                        containers, where this resolves to the
-+                        container's root directory.</entry>
-                       </row>
-                       <row>
-                         <entry><literal>%t</literal></entry>
-diff --git a/src/core/dbus-manager.c b/src/core/dbus-manager.c
-index 75e2e45..676a07f 100644
---- a/src/core/dbus-manager.c
-+++ b/src/core/dbus-manager.c
-@@ -103,32 +103,6 @@
-         "  <method name=\"ResetFailedUnit\">\n"                         \
-         "   <arg name=\"name\" type=\"s\" direction=\"in\"/>\n"         \
-         "  </method>\n"                                                 \
--        "  <method name=\"SetUnitControlGroup\">\n"                     \
--        "   <arg name=\"name\" type=\"s\" direction=\"in\"/>\n"         \
--        "   <arg name=\"group\" type=\"s\" direction=\"in\"/>\n"        \
--        "   <arg name=\"mode\" type=\"s\" direction=\"in\"/>\n"         \
--        "  </method>\n"                                                 \
--        "  <method name=\"UnsetUnitControlGroup\">\n"                   \
--        "   <arg name=\"name\" type=\"s\" direction=\"in\"/>\n"         \
--        "   <arg name=\"group\" type=\"s\" direction=\"in\"/>\n"        \
--        "   <arg name=\"mode\" type=\"s\" direction=\"in\"\n/>"         \
--        "  </method>\n"                                                 \
--        "  <method name=\"GetUnitControlGroupAttribute\">\n"            \
--        "   <arg name=\"name\" type=\"s\" direction=\"in\"/>\n"         \
--        "   <arg name=\"attribute\" type=\"s\" direction=\"in\"/>\n"    \
--        "   <arg name=\"values\" type=\"as\" direction=\"out\"/>\n"     \
--        "  </method>\n"                                                 \
--        "  <method name=\"SetUnitControlGroupAttribute\">\n"            \
--        "   <arg name=\"name\" type=\"s\" direction=\"in\"/>\n"         \
--        "   <arg name=\"attribute\" type=\"s\" direction=\"in\"/>\n"    \
--        "   <arg name=\"values\" type=\"as\" direction=\"in\"/>\n"      \
--        "   <arg name=\"mode\" type=\"s\" direction=\"in\"\n/>"         \
--        "  </method>\n"                                                 \
--        "  <method name=\"UnsetUnitControlGroupAttributes\">\n"         \
--        "   <arg name=\"name\" type=\"s\" direction=\"in\"/>\n"         \
--        "   <arg name=\"attribute\" type=\"s\" direction=\"in\"/>\n"    \
--        "   <arg name=\"mode\" type=\"s\" direction=\"in\"/>\n"         \
--        "  </method>\n"                                                 \
-         "  <method name=\"GetJob\">\n"                                  \
-         "   <arg name=\"id\" type=\"u\" direction=\"in\"/>\n"           \
-         "   <arg name=\"job\" type=\"o\" direction=\"out\"/>\n"         \
-@@ -316,7 +290,6 @@
-         "  <property name=\"ConfirmSpawn\" type=\"b\" access=\"read\"/>\n" \
-         "  <property name=\"ShowStatus\" type=\"b\" access=\"read\"/>\n" \
-         "  <property name=\"UnitPath\" type=\"as\" access=\"read\"/>\n" \
--        "  <property name=\"DefaultControllers\" type=\"as\" access=\"read\"/>\n" \
-         "  <property name=\"DefaultStandardOutput\" type=\"s\" access=\"read\"/>\n" \
-         "  <property name=\"DefaultStandardError\" type=\"s\" access=\"read\"/>\n" \
-         "  <property name=\"RuntimeWatchdogUSec\" type=\"t\" access=\"readwrite\"/>\n" \
-diff --git a/src/core/system.conf b/src/core/system.conf
-index f2817bc..7b03c87 100644
---- a/src/core/system.conf
-+++ b/src/core/system.conf
-@@ -17,10 +17,9 @@
- #ShowStatus=yes
- #CrashChVT=1
- #CPUAffinity=1 2
--#DefaultControllers=cpu
- #DefaultStandardOutput=journal
- #DefaultStandardError=inherit
--#JoinControllers=cpu,cpuacct,cpuset net_cls,net_prio
-+#JoinControllers=cpu,cpuacct net_cls,net_prio
- #RuntimeWatchdogSec=0
- #ShutdownWatchdogSec=10min
- #CapabilityBoundingSet=
-diff --git a/src/core/user.conf b/src/core/user.conf
-index 4252451..4a0129a 100644
---- a/src/core/user.conf
-+++ b/src/core/user.conf
-@@ -12,6 +12,5 @@
- #LogTarget=console
- #LogColor=yes
- #LogLocation=no
--#DefaultControllers=cpu
- #DefaultStandardOutput=inherit
- #DefaultStandardError=inherit
diff --git a/SOURCES/0032-sysctl-bring-back-etc-sysctl.conf.patch b/SOURCES/0032-sysctl-bring-back-etc-sysctl.conf.patch
new file mode 100644
index 0000000..6142ed8
--- /dev/null
+++ b/SOURCES/0032-sysctl-bring-back-etc-sysctl.conf.patch
@@ -0,0 +1,25 @@
+From 9944a5e77f0ad03742a1582cd51cc5ebbdd487ed Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Mon, 11 Nov 2013 11:17:57 +0100
+Subject: [PATCH] sysctl: bring back /etc/sysctl.conf
+
+Read /etc/sysctl.conf as the last file, overwriting everything.
+---
+ src/sysctl/sysctl.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/src/sysctl/sysctl.c b/src/sysctl/sysctl.c
+index b5670db..878c923 100644
+--- a/src/sysctl/sysctl.c
++++ b/src/sysctl/sysctl.c
+@@ -311,6 +311,10 @@ int main(int argc, char *argv[]) {
+                         if (k < 0 && r == 0)
+                                 r = k;
+                 }
++
++                k = parse_file(sysctl_options, "/etc/sysctl.conf", true);
++                if (k < 0 && r == 0)
++                        r = k;
+         }
+ 
+         k = apply_all(sysctl_options);
diff --git a/SOURCES/0033-man-explain-NAME-in-systemctl-man-page.patch b/SOURCES/0033-man-explain-NAME-in-systemctl-man-page.patch
deleted file mode 100644
index 931639e..0000000
--- a/SOURCES/0033-man-explain-NAME-in-systemctl-man-page.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-From 29acf51b6a3ea9305752c9c4dacf1289a1edacb5 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?V=C3=A1clav=20Pavl=C3=ADn?= <vpavlin@redhat.com>
-Date: Thu, 31 Oct 2013 14:36:41 +0100
-Subject: [PATCH] man: explain NAME in systemctl man page
-
----
- man/systemctl.xml | 13 +++++++++++++
- 1 file changed, 13 insertions(+)
-
-diff --git a/man/systemctl.xml b/man/systemctl.xml
-index b043581..51c34b7 100644
---- a/man/systemctl.xml
-+++ b/man/systemctl.xml
-@@ -63,6 +63,19 @@ along with systemd; If not, see <http://www.gnu.org/licenses/>.
-     introspect and control the state of the
-     <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>
-     system and service manager.</para>
-+
-+    <para>For Unit Commands the <replaceable>NAME</replaceable> represents full name of unit.
-+    <programlisting>
-+systemctl start foo.service
-+    </programlisting>
-+    For Unit File Commands the <replaceable>NAME</replaceable> represents full name of the unit file, or absolute path to the unit file.
-+    <programlisting>
-+systemctl start /path/to/foo.service
-+    </programlisting>
-+    While working with services/service files, <command>systemctl</command> is able to append .service suffix when it is missing.
-+    <programlisting>
-+systemctl start foo
-+    </programlisting></para>
-   </refsect1>
- 
-   <refsect1>
diff --git a/SOURCES/0033-systemd-treat-reload-failure-as-failure.patch b/SOURCES/0033-systemd-treat-reload-failure-as-failure.patch
new file mode 100644
index 0000000..c8409cb
--- /dev/null
+++ b/SOURCES/0033-systemd-treat-reload-failure-as-failure.patch
@@ -0,0 +1,90 @@
+From b659126834756a4476a5b020bcece486be1edb85 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Mon, 2 Dec 2013 21:52:51 -0500
+Subject: [PATCH] systemd: treat reload failure as failure
+
+systemctl reload "suceeded" on stopped units, but it is documented
+to fail in this case.
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1036845
+---
+ src/core/job.c  | 11 +++++++----
+ src/core/job.h  |  3 ++-
+ src/core/unit.c |  5 ++++-
+ 3 files changed, 13 insertions(+), 6 deletions(-)
+
+diff --git a/src/core/job.c b/src/core/job.c
+index bf1d956..5ea9803 100644
+--- a/src/core/job.c
++++ b/src/core/job.c
+@@ -528,7 +528,7 @@ int job_run_and_invalidate(Job *j) {
+                         else if (t == UNIT_ACTIVATING)
+                                 r = -EAGAIN;
+                         else
+-                                r = -ENOEXEC;
++                                r = -EBADR;
+                         break;
+                 }
+ 
+@@ -557,8 +557,10 @@ int job_run_and_invalidate(Job *j) {
+         if (j) {
+                 if (r == -EALREADY)
+                         r = job_finish_and_invalidate(j, JOB_DONE, true);
+-                else if (r == -ENOEXEC)
++                else if (r == -EBADR)
+                         r = job_finish_and_invalidate(j, JOB_SKIPPED, true);
++                else if (r == -ENOEXEC)
++                        r = job_finish_and_invalidate(j, JOB_INVALID, true);
+                 else if (r == -EAGAIN) {
+                         j->state = JOB_WAITING;
+                         m->n_running_jobs--;
+@@ -784,7 +786,7 @@ int job_finish_and_invalidate(Job *j, JobResult result, bool recursive) {
+                 goto finish;
+         }
+ 
+-        if (result == JOB_FAILED)
++        if (result == JOB_FAILED || result == JOB_INVALID)
+                 j->manager->n_failed_jobs ++;
+ 
+         job_uninstall(j);
+@@ -1140,7 +1142,8 @@ static const char* const job_result_table[_JOB_RESULT_MAX] = {
+         [JOB_TIMEOUT] = "timeout",
+         [JOB_FAILED] = "failed",
+         [JOB_DEPENDENCY] = "dependency",
+-        [JOB_SKIPPED] = "skipped"
++        [JOB_SKIPPED] = "skipped",
++        [JOB_INVALID] = "invalid",
+ };
+ 
+ DEFINE_STRING_TABLE_LOOKUP(job_result, JobResult);
+diff --git a/src/core/job.h b/src/core/job.h
+index d90bc96..4237529 100644
+--- a/src/core/job.h
++++ b/src/core/job.h
+@@ -97,7 +97,8 @@ enum JobResult {
+         JOB_TIMEOUT,             /* JobTimeout elapsed */
+         JOB_FAILED,              /* Job failed */
+         JOB_DEPENDENCY,          /* A required dependency job did not result in JOB_DONE */
+-        JOB_SKIPPED,             /* JOB_RELOAD of inactive unit; negative result of JOB_VERIFY_ACTIVE */
++        JOB_SKIPPED,             /* Negative result of JOB_VERIFY_ACTIVE */
++        JOB_INVALID,             /* JOB_RELOAD of inactive unit */
+         _JOB_RESULT_MAX,
+         _JOB_RESULT_INVALID = -1
+ };
+diff --git a/src/core/unit.c b/src/core/unit.c
+index 1db7d06..0f57b06 100644
+--- a/src/core/unit.c
++++ b/src/core/unit.c
+@@ -1239,8 +1239,11 @@ int unit_reload(Unit *u) {
+         if (state == UNIT_RELOADING)
+                 return -EALREADY;
+ 
+-        if (state != UNIT_ACTIVE)
++        if (state != UNIT_ACTIVE) {
++                log_warning_unit(u->id, "Unit %s cannot be reloaded because it is inactive.",
++                                 u->id);
+                 return -ENOEXEC;
++        }
+ 
+         if ((following = unit_following(u))) {
+                 log_debug_unit(u->id, "Redirecting reload request from %s to %s.",
diff --git a/SOURCES/0034-journal-when-appending-to-journal-file-allocate-larg.patch b/SOURCES/0034-journal-when-appending-to-journal-file-allocate-larg.patch
new file mode 100644
index 0000000..c860f88
--- /dev/null
+++ b/SOURCES/0034-journal-when-appending-to-journal-file-allocate-larg.patch
@@ -0,0 +1,135 @@
+From eb38fb593b201a97620555c0aca83ff487a50748 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart@poettering.net>
+Date: Tue, 26 Nov 2013 18:39:42 +0100
+Subject: [PATCH] journal: when appending to journal file, allocate larger
+ blocks at once
+
+Conflicts:
+	src/journal/journal-file.c
+---
+ src/journal/journal-file.c | 51 +++++++++++++++++++++++-----------------------
+ 1 file changed, 26 insertions(+), 25 deletions(-)
+
+diff --git a/src/journal/journal-file.c b/src/journal/journal-file.c
+index 81c344f..4062a83 100644
+--- a/src/journal/journal-file.c
++++ b/src/journal/journal-file.c
+@@ -68,6 +68,9 @@
+ /* How many entries to keep in the entry array chain cache at max */
+ #define CHAIN_CACHE_MAX 20
+ 
++/* How much to increase the journal file size at once each time we allocate something new. */
++#define FILE_SIZE_INCREASE (8ULL*1024ULL*1024ULL)              /* 8MB */
++
+ int journal_file_set_online(JournalFile *f) {
+         assert(f);
+ 
+@@ -218,8 +221,7 @@ static int journal_file_refresh_header(JournalFile *f) {
+         journal_file_set_online(f);
+ 
+         /* Sync the online state to disk */
+-        msync(f->header, PAGE_ALIGN(sizeof(Header)), MS_SYNC);
+-        fdatasync(f->fd);
++        fsync(f->fd);
+ 
+         return 0;
+ }
+@@ -313,7 +315,7 @@ static int journal_file_verify_header(JournalFile *f) {
+ }
+ 
+ static int journal_file_allocate(JournalFile *f, uint64_t offset, uint64_t size) {
+-        uint64_t old_size, new_size;
++        uint64_t old_size, new_size, file_size;
+         int r;
+ 
+         assert(f);
+@@ -333,12 +335,10 @@ static int journal_file_allocate(JournalFile *f, uint64_t offset, uint64_t size)
+         if (new_size <= old_size)
+                 return 0;
+ 
+-        if (f->metrics.max_size > 0 &&
+-            new_size > f->metrics.max_size)
++        if (f->metrics.max_size > 0 && new_size > f->metrics.max_size)
+                 return -E2BIG;
+ 
+-        if (new_size > f->metrics.min_size &&
+-            f->metrics.keep_free > 0) {
++        if (new_size > f->metrics.min_size && f->metrics.keep_free > 0) {
+                 struct statvfs svfs;
+ 
+                 if (fstatvfs(f->fd, &svfs) >= 0) {
+@@ -363,8 +363,16 @@ static int journal_file_allocate(JournalFile *f, uint64_t offset, uint64_t size)
+         if (r != 0)
+                 return -r;
+ 
+-        if (fstat(f->fd, &f->last_stat) < 0)
+-                return -errno;
++        /* Increase the file size a bit further than this, so that we
++         * we can create larger memory maps to cache */
++        file_size = ((new_size+FILE_SIZE_INCREASE-1) / FILE_SIZE_INCREASE) * FILE_SIZE_INCREASE;
++        if (file_size > (uint64_t) f->last_stat.st_size) {
++                if (file_size > new_size)
++                        ftruncate(f->fd, file_size);
++
++                if (fstat(f->fd, &f->last_stat) < 0)
++                        return -errno;
++        }
+ 
+         f->header->arena_size = htole64(new_size - le64toh(f->header->header_size));
+ 
+@@ -1344,7 +1352,7 @@ int journal_file_append_entry(JournalFile *f, const dual_timestamp *ts, const st
+ 
+         /* Order by the position on disk, in order to improve seek
+          * times for rotating media. */
+-        qsort(items, n_iovec, sizeof(EntryItem), entry_item_cmp);
++        qsort_safe(items, n_iovec, sizeof(EntryItem), entry_item_cmp);
+ 
+         r = journal_file_append_entry_internal(f, ts, xor_hash, items, n_iovec, seqnum, ret, offset);
+ 
+@@ -2551,7 +2559,7 @@ fail:
+ }
+ 
+ int journal_file_rotate(JournalFile **f, bool compress, bool seal) {
+-        char *p;
++        _cleanup_free_ char *p = NULL;
+         size_t l;
+         JournalFile *old_file, *new_file = NULL;
+         int r;
+@@ -2568,22 +2576,15 @@ int journal_file_rotate(JournalFile **f, bool compress, bool seal) {
+                 return -EINVAL;
+ 
+         l = strlen(old_file->path);
+-
+-        p = new(char, l + 1 + 32 + 1 + 16 + 1 + 16 + 1);
+-        if (!p)
++        r = asprintf(&p, "%.*s@" SD_ID128_FORMAT_STR "-%016"PRIx64"-%016"PRIx64".journal",
++                     (int) l - 8, old_file->path,
++                     SD_ID128_FORMAT_VAL(old_file->header->seqnum_id),
++                     le64toh((*f)->header->head_entry_seqnum),
++                     le64toh((*f)->header->head_entry_realtime));
++        if (r < 0)
+                 return -ENOMEM;
+ 
+-        memcpy(p, old_file->path, l - 8);
+-        p[l-8] = '@';
+-        sd_id128_to_string(old_file->header->seqnum_id, p + l - 8 + 1);
+-        snprintf(p + l - 8 + 1 + 32, 1 + 16 + 1 + 16 + 8 + 1,
+-                 "-%016"PRIx64"-%016"PRIx64".journal",
+-                 le64toh((*f)->header->head_entry_seqnum),
+-                 le64toh((*f)->header->head_entry_realtime));
+-
+         r = rename(old_file->path, p);
+-        free(p);
+-
+         if (r < 0)
+                 return -errno;
+ 
+@@ -2634,7 +2635,7 @@ int journal_file_open_reliably(
+ 
+         l = strlen(fname);
+         if (asprintf(&p, "%.*s@%016llx-%016llx.journal~",
+-                     (int) (l-8), fname,
++                     (int) l - 8, fname,
+                      (unsigned long long) now(CLOCK_REALTIME),
+                      random_ull()) < 0)
+                 return -ENOMEM;
diff --git a/SOURCES/0034-journald-accept-EPOLLERR-from-dev-kmsg.patch b/SOURCES/0034-journald-accept-EPOLLERR-from-dev-kmsg.patch
deleted file mode 100644
index decdec9..0000000
--- a/SOURCES/0034-journald-accept-EPOLLERR-from-dev-kmsg.patch
+++ /dev/null
@@ -1,69 +0,0 @@
-From 21deaace3a2ce9531443279a7c36a0fc068bdea7 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
-Date: Thu, 19 Sep 2013 16:57:57 -0500
-Subject: [PATCH] journald: accept EPOLLERR from /dev/kmsg
-
-Also print out unexpected epoll events explictly.
----
- src/journal/journald-server.c | 20 +++++++++++++++-----
- 1 file changed, 15 insertions(+), 5 deletions(-)
-
-diff --git a/src/journal/journald-server.c b/src/journal/journald-server.c
-index ba211b3..c252710 100644
---- a/src/journal/journald-server.c
-+++ b/src/journal/journald-server.c
-@@ -1075,7 +1075,8 @@ int process_event(Server *s, struct epoll_event *ev) {
-                 ssize_t n;
- 
-                 if (ev->events != EPOLLIN) {
--                        log_error("Got invalid event from epoll.");
-+                        log_error("Got invalid event from epoll for %s: %"PRIx32,
-+                                  "signal fd", ev->events);
-                         return -EIO;
-                 }
- 
-@@ -1128,8 +1129,12 @@ int process_event(Server *s, struct epoll_event *ev) {
-         } else if (ev->data.fd == s->dev_kmsg_fd) {
-                 int r;
- 
--                if (ev->events != EPOLLIN) {
--                        log_error("Got invalid event from epoll.");
-+                if (ev->events & EPOLLERR)
-+                        log_warning("/dev/kmsg buffer overrun, some messages lost.");
-+
-+                if (!(ev->events & EPOLLIN)) {
-+                        log_error("Got invalid event from epoll for %s: %"PRIx32,
-+                                  "/dev/kmsg", ev->events);
-                         return -EIO;
-                 }
- 
-@@ -1143,7 +1148,9 @@ int process_event(Server *s, struct epoll_event *ev) {
-                    ev->data.fd == s->syslog_fd) {
- 
-                 if (ev->events != EPOLLIN) {
--                        log_error("Got invalid event from epoll.");
-+                        log_error("Got invalid event from epoll for %s: %"PRIx32,
-+                                  ev->data.fd == s->native_fd ? "native fd" : "syslog fd",
-+                                  ev->events);
-                         return -EIO;
-                 }
- 
-@@ -1264,7 +1271,8 @@ int process_event(Server *s, struct epoll_event *ev) {
-         } else if (ev->data.fd == s->stdout_fd) {
- 
-                 if (ev->events != EPOLLIN) {
--                        log_error("Got invalid event from epoll.");
-+                        log_error("Got invalid event from epoll for %s: %"PRIx32,
-+                                  "stdout fd", ev->events);
-                         return -EIO;
-                 }
- 
-@@ -1275,6 +1283,8 @@ int process_event(Server *s, struct epoll_event *ev) {
-                 StdoutStream *stream;
- 
-                 if ((ev->events|EPOLLIN|EPOLLHUP) != (EPOLLIN|EPOLLHUP)) {
-+                        log_error("Got invalid event from epoll for %s: %"PRIx32,
-+                                  "stdout stream", ev->events);
-                         log_error("Got invalid event from epoll.");
-                         return -EIO;
-                 }
diff --git a/SOURCES/0035-journal-optimize-bisection-logic-a-bit-by-caching-th.patch b/SOURCES/0035-journal-optimize-bisection-logic-a-bit-by-caching-th.patch
new file mode 100644
index 0000000..68d5cf7
--- /dev/null
+++ b/SOURCES/0035-journal-optimize-bisection-logic-a-bit-by-caching-th.patch
@@ -0,0 +1,244 @@
+From 563bf9e9305aa88ad403a81c0c91418b7846f465 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart@poettering.net>
+Date: Tue, 26 Nov 2013 20:37:53 +0100
+Subject: [PATCH] journal: optimize bisection logic a bit by caching the last
+ position
+
+This way we can do a quick restart limiting a bit how wildly we need to
+jump around during the bisection process.
+---
+ src/journal/journal-file.c | 134 +++++++++++++++++++++++++++++++++------------
+ 1 file changed, 99 insertions(+), 35 deletions(-)
+
+diff --git a/src/journal/journal-file.c b/src/journal/journal-file.c
+index 4062a83..7adb1b5 100644
+--- a/src/journal/journal-file.c
++++ b/src/journal/journal-file.c
+@@ -1366,6 +1366,7 @@ typedef struct ChainCacheItem {
+         uint64_t array; /* the cached array */
+         uint64_t begin; /* the first item in the cached array */
+         uint64_t total; /* the total number of items in all arrays before this one in the chain */
++        uint64_t last_index; /* the last index we looked at, to optimize locality when bisecting */
+ } ChainCacheItem;
+ 
+ static void chain_cache_put(
+@@ -1374,7 +1375,8 @@ static void chain_cache_put(
+                 uint64_t first,
+                 uint64_t array,
+                 uint64_t begin,
+-                uint64_t total) {
++                uint64_t total,
++                uint64_t last_index) {
+ 
+         if (!ci) {
+                 /* If the chain item to cache for this chain is the
+@@ -1402,12 +1404,14 @@ static void chain_cache_put(
+         ci->array = array;
+         ci->begin = begin;
+         ci->total = total;
++        ci->last_index = last_index;
+ }
+ 
+-static int generic_array_get(JournalFile *f,
+-                             uint64_t first,
+-                             uint64_t i,
+-                             Object **ret, uint64_t *offset) {
++static int generic_array_get(
++                JournalFile *f,
++                uint64_t first,
++                uint64_t i,
++                Object **ret, uint64_t *offset) {
+ 
+         Object *o;
+         uint64_t p = 0, a, t = 0;
+@@ -1448,7 +1452,7 @@ static int generic_array_get(JournalFile *f,
+ 
+ found:
+         /* Let's cache this item for the next invocation */
+-        chain_cache_put(f->chain_cache, ci, first, a, o->entry_array.items[0], t);
++        chain_cache_put(f->chain_cache, ci, first, a, o->entry_array.items[0], t, i);
+ 
+         r = journal_file_move_to_object(f, OBJECT_ENTRY, p, &o);
+         if (r < 0)
+@@ -1463,11 +1467,12 @@ found:
+         return 1;
+ }
+ 
+-static int generic_array_get_plus_one(JournalFile *f,
+-                                      uint64_t extra,
+-                                      uint64_t first,
+-                                      uint64_t i,
+-                                      Object **ret, uint64_t *offset) {
++static int generic_array_get_plus_one(
++                JournalFile *f,
++                uint64_t extra,
++                uint64_t first,
++                uint64_t i,
++                Object **ret, uint64_t *offset) {
+ 
+         Object *o;
+ 
+@@ -1498,17 +1503,18 @@ enum {
+         TEST_RIGHT
+ };
+ 
+-static int generic_array_bisect(JournalFile *f,
+-                                uint64_t first,
+-                                uint64_t n,
+-                                uint64_t needle,
+-                                int (*test_object)(JournalFile *f, uint64_t p, uint64_t needle),
+-                                direction_t direction,
+-                                Object **ret,
+-                                uint64_t *offset,
+-                                uint64_t *idx) {
+-
+-        uint64_t a, p, t = 0, i = 0, last_p = 0;
++static int generic_array_bisect(
++                JournalFile *f,
++                uint64_t first,
++                uint64_t n,
++                uint64_t needle,
++                int (*test_object)(JournalFile *f, uint64_t p, uint64_t needle),
++                direction_t direction,
++                Object **ret,
++                uint64_t *offset,
++                uint64_t *idx) {
++
++        uint64_t a, p, t = 0, i = 0, last_p = 0, last_index = (uint64_t) -1;
+         bool subtract_one = false;
+         Object *o, *array = NULL;
+         int r;
+@@ -1533,7 +1539,7 @@ static int generic_array_bisect(JournalFile *f,
+                         return r;
+ 
+                 if (r == TEST_LEFT) {
+-                        /* OK, what we are looking for is right of th
++                        /* OK, what we are looking for is right of the
+                          * begin of this EntryArray, so let's jump
+                          * straight to previously cached array in the
+                          * chain */
+@@ -1541,6 +1547,7 @@ static int generic_array_bisect(JournalFile *f,
+                         a = ci->array;
+                         n -= ci->total;
+                         t = ci->total;
++                        last_index = ci->last_index;
+                 }
+         }
+ 
+@@ -1571,6 +1578,60 @@ static int generic_array_bisect(JournalFile *f,
+                 if (r == TEST_RIGHT) {
+                         left = 0;
+                         right -= 1;
++
++                        if (last_index != (uint64_t) -1) {
++                                assert(last_index <= right);
++
++                                /* If we cached the last index we
++                                 * looked at, let's try to not to jump
++                                 * too wildly around and see if we can
++                                 * limit the range to look at early to
++                                 * the immediate neighbors of the last
++                                 * index we looked at. */
++
++                                if (last_index > 0) {
++                                        uint64_t x = last_index - 1;
++
++                                        p = le64toh(array->entry_array.items[x]);
++                                        if (p <= 0)
++                                                return -EBADMSG;
++
++                                        r = test_object(f, p, needle);
++                                        if (r < 0)
++                                                return r;
++
++                                        if (r == TEST_FOUND)
++                                                r = direction == DIRECTION_DOWN ? TEST_RIGHT : TEST_LEFT;
++
++                                        if (r == TEST_RIGHT)
++                                                right = x;
++                                        else
++                                                left = x + 1;
++                                }
++
++                                if (last_index < right) {
++                                        uint64_t y = last_index + 1;
++
++                                        p = le64toh(array->entry_array.items[y]);
++                                        if (p <= 0)
++                                                return -EBADMSG;
++
++                                        r = test_object(f, p, needle);
++                                        if (r < 0)
++                                                return r;
++
++                                        if (r == TEST_FOUND)
++                                                r = direction == DIRECTION_DOWN ? TEST_RIGHT : TEST_LEFT;
++
++                                        if (r == TEST_RIGHT)
++                                                right = y;
++                                        else
++                                                left = y + 1;
++                                }
++
++                                last_index = (uint64_t) -1;
++                        }
++
+                         for (;;) {
+                                 if (left == right) {
+                                         if (direction == DIRECTION_UP)
+@@ -1581,8 +1642,8 @@ static int generic_array_bisect(JournalFile *f,
+                                 }
+ 
+                                 assert(left < right);
+-
+                                 i = (left + right) / 2;
++
+                                 p = le64toh(array->entry_array.items[i]);
+                                 if (p <= 0)
+                                         return -EBADMSG;
+@@ -1615,6 +1676,7 @@ static int generic_array_bisect(JournalFile *f,
+ 
+                 n -= k;
+                 t += k;
++                last_index = (uint64_t) -1;
+                 a = le64toh(array->entry_array.next_entry_array_offset);
+         }
+ 
+@@ -1625,7 +1687,7 @@ found:
+                 return 0;
+ 
+         /* Let's cache this item for the next invocation */
+-        chain_cache_put(f->chain_cache, ci, first, a, array->entry_array.items[0], t);
++        chain_cache_put(f->chain_cache, ci, first, a, array->entry_array.items[0], t, i + (subtract_one ? -1 : 0));
+ 
+         if (subtract_one && i == 0)
+                 p = last_p;
+@@ -1650,16 +1712,18 @@ found:
+         return 1;
+ }
+ 
+-static int generic_array_bisect_plus_one(JournalFile *f,
+-                                         uint64_t extra,
+-                                         uint64_t first,
+-                                         uint64_t n,
+-                                         uint64_t needle,
+-                                         int (*test_object)(JournalFile *f, uint64_t p, uint64_t needle),
+-                                         direction_t direction,
+-                                         Object **ret,
+-                                         uint64_t *offset,
+-                                         uint64_t *idx) {
++
++static int generic_array_bisect_plus_one(
++                JournalFile *f,
++                uint64_t extra,
++                uint64_t first,
++                uint64_t n,
++                uint64_t needle,
++                int (*test_object)(JournalFile *f, uint64_t p, uint64_t needle),
++                direction_t direction,
++                Object **ret,
++                uint64_t *offset,
++                uint64_t *idx) {
+ 
+         int r;
+         bool step_back = false;
diff --git a/SOURCES/0035-journald-avoid-NSS-in-journald.patch b/SOURCES/0035-journald-avoid-NSS-in-journald.patch
deleted file mode 100644
index fb5de56..0000000
--- a/SOURCES/0035-journald-avoid-NSS-in-journald.patch
+++ /dev/null
@@ -1,89 +0,0 @@
-From 6359b8041144a0571853b1dcad55ad60922af55d Mon Sep 17 00:00:00 2001
-From: Lennart Poettering <lennart@poettering.net>
-Date: Tue, 17 Sep 2013 16:42:36 -0500
-Subject: [PATCH] journald: avoid NSS in journald
-
-In order to avoid a deadlock between journald looking up the
-"systemd-journal" group name, and nscd (or anyother NSS backing daemon)
-logging something back to the journal avoid all NSS in journald the same
-way as we avoid it from PID 1.
-
-With this change we rely on the kernel file system logic to adjust the
-group of created journal files via the SETGID bit on the journal
-directory. To ensure that it is always set, even after the user created
-it with a simply "mkdir" on the shell we fix it up via tmpfiles on boot.
----
- src/journal/journald-server.c | 25 ++-----------------------
- src/journal/journald-server.h |  3 ---
- tmpfiles.d/systemd.conf       |  3 +++
- 3 files changed, 5 insertions(+), 26 deletions(-)
-
-diff --git a/src/journal/journald-server.c b/src/journal/journald-server.c
-index c252710..8007b05 100644
---- a/src/journal/journald-server.c
-+++ b/src/journal/journald-server.c
-@@ -180,25 +180,6 @@ static uint64_t available_space(Server *s, bool verbose) {
-         return s->cached_available_space;
- }
- 
--static void server_read_file_gid(Server *s) {
--        const char *g = "systemd-journal";
--        int r;
--
--        assert(s);
--
--        if (s->file_gid_valid)
--                return;
--
--        r = get_group_creds(&g, &s->file_gid);
--        if (r < 0)
--                log_warning("Failed to resolve '%s' group: %s", g, strerror(-r));
--
--        /* if we couldn't read the gid, then it will be 0, but that's
--         * fine and we shouldn't try to resolve the group again, so
--         * let's just pretend it worked right-away. */
--        s->file_gid_valid = true;
--}
--
- void server_fix_perms(Server *s, JournalFile *f, uid_t uid) {
-         int r;
- #ifdef HAVE_ACL
-@@ -209,11 +190,9 @@ void server_fix_perms(Server *s, JournalFile *f, uid_t uid) {
- 
-         assert(f);
- 
--        server_read_file_gid(s);
--
--        r = fchmod_and_fchown(f->fd, 0640, 0, s->file_gid);
-+        r = fchmod(f->fd, 0640);
-         if (r < 0)
--                log_warning("Failed to fix access mode/rights on %s, ignoring: %s", f->path, strerror(-r));
-+                log_warning("Failed to fix access mode on %s, ignoring: %s", f->path, strerror(-r));
- 
- #ifdef HAVE_ACL
-         if (uid <= 0)
-diff --git a/src/journal/journald-server.h b/src/journal/journald-server.h
-index e856ef2..0393e38 100644
---- a/src/journal/journald-server.h
-+++ b/src/journal/journald-server.h
-@@ -97,9 +97,6 @@ typedef struct Server {
-         usec_t max_file_usec;
-         usec_t oldest_file_usec;
- 
--        gid_t file_gid;
--        bool file_gid_valid;
--
-         LIST_HEAD(StdoutStream, stdout_streams);
-         unsigned n_stdout_streams;
- 
-diff --git a/tmpfiles.d/systemd.conf b/tmpfiles.d/systemd.conf
-index 4924b4e..c397c71 100644
---- a/tmpfiles.d/systemd.conf
-+++ b/tmpfiles.d/systemd.conf
-@@ -23,3 +23,6 @@ d /run/systemd/machines 0755 root root -
- d /run/systemd/shutdown 0755 root root -
- 
- F /run/nologin 0644 - - - "System is booting up."
-+
-+m /var/log/journal 2755 root systemd-journal - -
-+m /var/log/journal/%m 2755 root systemd-journal - -
diff --git a/SOURCES/0036-journal-fix-iteration-when-we-go-backwards-from-the-.patch b/SOURCES/0036-journal-fix-iteration-when-we-go-backwards-from-the-.patch
new file mode 100644
index 0000000..3b68302
--- /dev/null
+++ b/SOURCES/0036-journal-fix-iteration-when-we-go-backwards-from-the-.patch
@@ -0,0 +1,23 @@
+From 5284c03b3bc881c4b79b1afb32284dd86ab836f5 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart@poettering.net>
+Date: Wed, 27 Nov 2013 00:58:39 +0100
+Subject: [PATCH] journal: fix iteration when we go backwards from the
+ beginning of an array chain element
+
+---
+ src/journal/journal-file.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/journal/journal-file.c b/src/journal/journal-file.c
+index 7adb1b5..53dd0c3 100644
+--- a/src/journal/journal-file.c
++++ b/src/journal/journal-file.c
+@@ -1687,7 +1687,7 @@ found:
+                 return 0;
+ 
+         /* Let's cache this item for the next invocation */
+-        chain_cache_put(f->chain_cache, ci, first, a, array->entry_array.items[0], t, i + (subtract_one ? -1 : 0));
++        chain_cache_put(f->chain_cache, ci, first, a, array->entry_array.items[0], t, subtract_one ? (i > 0 ? i-1 : (uint64_t) -1) : i);
+ 
+         if (subtract_one && i == 0)
+                 p = last_p;
diff --git a/SOURCES/0036-libudev-add-missing-global-to-symbol-export.patch b/SOURCES/0036-libudev-add-missing-global-to-symbol-export.patch
deleted file mode 100644
index 0afb8f6..0000000
--- a/SOURCES/0036-libudev-add-missing-global-to-symbol-export.patch
+++ /dev/null
@@ -1,20 +0,0 @@
-From 23e9bb8dc174e2418c852361ee4ca7dc0474b879 Mon Sep 17 00:00:00 2001
-From: Kay Sievers <kay@vrfy.org>
-Date: Tue, 17 Sep 2013 16:37:42 -0500
-Subject: [PATCH] libudev: add missing 'global' to symbol export
-
----
- src/libudev/libudev.sym | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/src/libudev/libudev.sym b/src/libudev/libudev.sym
-index 8e09430..1e6f885 100644
---- a/src/libudev/libudev.sym
-+++ b/src/libudev/libudev.sym
-@@ -109,5 +109,6 @@ global:
- } LIBUDEV_189;
- 
- LIBUDEV_199 {
-+global:
-         udev_device_set_sysattr_value;
- } LIBUDEV_196;
diff --git a/SOURCES/0037-gpt-auto-generator-do-not-assume-that-dev-block-u-u-.patch b/SOURCES/0037-gpt-auto-generator-do-not-assume-that-dev-block-u-u-.patch
deleted file mode 100644
index 262b269..0000000
--- a/SOURCES/0037-gpt-auto-generator-do-not-assume-that-dev-block-u-u-.patch
+++ /dev/null
@@ -1,206 +0,0 @@
-From cb6800ec93c7d49f5f43355fef44f6797759cc0a Mon Sep 17 00:00:00 2001
-From: Lennart Poettering <lennart@poettering.net>
-Date: Tue, 17 Sep 2013 18:04:40 -0500
-Subject: [PATCH] gpt-auto-generator: do not assume that /dev/block/%u:%u is
- useable
-
-The generator might run before udev, and udev sets up the /dev/block/
-symlinks, hence we cannot use them from the gpt generator. Instead,
-manually translate a major/minor to a device node.
----
- src/gpt-auto-generator/gpt-auto-generator.c | 109 +++++++++++++++++++---------
- 1 file changed, 74 insertions(+), 35 deletions(-)
-
-diff --git a/src/gpt-auto-generator/gpt-auto-generator.c b/src/gpt-auto-generator/gpt-auto-generator.c
-index 880661e..ca54925 100644
---- a/src/gpt-auto-generator/gpt-auto-generator.c
-+++ b/src/gpt-auto-generator/gpt-auto-generator.c
-@@ -55,18 +55,13 @@ static inline void blkid_free_probep(blkid_probe *b) {
- }
- #define _cleanup_blkid_freep_probe_ _cleanup_(blkid_free_probep)
- 
--static int verify_gpt_partition(dev_t dev, sd_id128_t *type, unsigned *nr, char **fstype) {
--        _cleanup_free_ char *t = NULL;
-+static int verify_gpt_partition(const char *node, sd_id128_t *type, unsigned *nr, char **fstype) {
-         _cleanup_blkid_freep_probe_ blkid_probe b = NULL;
-         const char *v;
-         int r;
- 
--        r = asprintf(&t, "/dev/block/%u:%u", major(dev), minor(dev));
--        if (r < 0)
--                return -ENOMEM;
--
-         errno = 0;
--        b = blkid_new_probe_from_filename(t);
-+        b = blkid_new_probe_from_filename(node);
-         if (!b)
-                 return errno != 0 ? -errno : -ENOMEM;
- 
-@@ -237,8 +232,7 @@ static int add_home(const char *path, const char *fstype) {
-         return 0;
- }
- 
--static int enumerate_partitions(dev_t dev) {
--        struct udev *udev;
-+static int enumerate_partitions(struct udev *udev, dev_t dev) {
-         struct udev_enumerate *e = NULL;
-         struct udev_device *parent = NULL, *d = NULL;
-         struct udev_list_entry *first, *item;
-@@ -246,10 +240,6 @@ static int enumerate_partitions(dev_t dev) {
-         _cleanup_free_ char *home = NULL, *home_fstype = NULL;
-         int r;
- 
--        udev = udev_new();
--        if (!udev)
--                return log_oom();
--
-         e = udev_enumerate_new(udev);
-         if (!e) {
-                 r = log_oom();
-@@ -294,7 +284,6 @@ static int enumerate_partitions(dev_t dev) {
-                 struct udev_device *q;
-                 sd_id128_t type_id;
-                 unsigned nr;
--                dev_t sub;
- 
-                 q = udev_device_new_from_syspath(udev, udev_list_entry_get_name(item));
-                 if (!q) {
-@@ -314,12 +303,10 @@ static int enumerate_partitions(dev_t dev) {
-                         goto finish;
-                 }
- 
--                sub = udev_device_get_devnum(q);
--
--                r = verify_gpt_partition(sub, &type_id, &nr, &fstype);
-+                r = verify_gpt_partition(node, &type_id, &nr, &fstype);
-                 if (r < 0) {
--                        log_error("Failed to verify GPT partition /dev/block/%u:%u: %s",
--                                  major(sub), minor(sub), strerror(-r));
-+                        log_error("Failed to verify GPT partition %s: %s",
-+                                  node, strerror(-r));
-                         udev_device_unref(q);
-                         goto finish;
-                 }
-@@ -360,8 +347,6 @@ finish:
-         if (e)
-                 udev_enumerate_unref(e);
- 
--        if (udev)
--                udev_unref(udev);
- 
-         return r;
- }
-@@ -440,13 +425,50 @@ static int get_block_device(const char *path, dev_t *dev) {
-         return 0;
- }
- 
-+static int devno_to_devnode(struct udev *udev, dev_t devno, char **ret) {
-+        struct udev_device *d = NULL;
-+        const char *t;
-+        char *n;
-+        int r;
-+
-+        d = udev_device_new_from_devnum(udev, 'b', devno);
-+        if (!d) {
-+                r = log_oom();
-+                goto finish;
-+        }
-+
-+        t = udev_device_get_devnode(d);
-+        if (!t) {
-+                r = -ENODEV;
-+                goto finish;
-+        }
-+
-+        n = strdup(t);
-+        if (!n) {
-+                r = -ENOMEM;
-+                goto finish;
-+        }
-+
-+        *ret = n;
-+        r = 0;
-+
-+finish:
-+        if (d)
-+                udev_device_unref(d);
-+
-+        return r;
-+}
-+
- int main(int argc, char *argv[]) {
--        dev_t dev;
-+        _cleanup_free_ char *node = NULL;
-+        struct udev *udev = NULL;
-+        dev_t devno;
-         int r;
- 
-         if (argc > 1 && argc != 4) {
-                 log_error("This program takes three or no arguments.");
--                return EXIT_FAILURE;
-+                r = -EINVAL;
-+                goto finish;
-         }
- 
-         if (argc > 1)
-@@ -458,31 +480,48 @@ int main(int argc, char *argv[]) {
- 
-         umask(0022);
- 
--        if (in_initrd())
--                return EXIT_SUCCESS;
-+        if (in_initrd()) {
-+                r = 0;
-+                goto finish;
-+        }
- 
--        r = get_block_device("/", &dev);
-+        r = get_block_device("/", &devno);
-         if (r < 0) {
-                 log_error("Failed to determine block device of root file system: %s", strerror(-r));
--                return EXIT_FAILURE;
-+                goto finish;
-         }
-         if (r == 0) {
-                 log_debug("Root file system not on a (single) block device.");
--                return EXIT_SUCCESS;
-+                goto finish;
-+        }
-+
-+        udev = udev_new();
-+        if (!udev) {
-+                r = log_oom();
-+                goto finish;
-+        }
-+
-+        r = devno_to_devnode(udev, devno, &node);
-+        if (r < 0) {
-+                log_error("Failed to determine block device node from major/minor: %s", strerror(-r));
-+                goto finish;
-         }
- 
--        log_debug("Root device /dev/block/%u:%u.", major(dev), minor(dev));
-+        log_debug("Root device %s.", node);
- 
--        r = verify_gpt_partition(dev, NULL, NULL, NULL);
-+        r = verify_gpt_partition(node, NULL, NULL, NULL);
-         if (r < 0) {
--                log_error("Failed to verify GPT partition /dev/block/%u:%u: %s",
--                          major(dev), minor(dev), strerror(-r));
--                return EXIT_FAILURE;
-+                log_error("Failed to verify GPT partition %s: %s", node, strerror(-r));
-+                goto finish;
-         }
-         if (r == 0)
--                return EXIT_SUCCESS;
-+                goto finish;
-+
-+        r = enumerate_partitions(udev, devno);
- 
--        r = enumerate_partitions(dev);
-+finish:
-+        if (udev)
-+                udev_unref(udev);
- 
-         return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
- }
diff --git a/SOURCES/0037-journal-allow-journal_file_copy_entry-to-work-on-non.patch b/SOURCES/0037-journal-allow-journal_file_copy_entry-to-work-on-non.patch
new file mode 100644
index 0000000..e62849e
--- /dev/null
+++ b/SOURCES/0037-journal-allow-journal_file_copy_entry-to-work-on-non.patch
@@ -0,0 +1,25 @@
+From 0badfa6266d2b5116a14fe2eebcf55f6a072332b Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart@poettering.net>
+Date: Wed, 27 Nov 2013 00:59:07 +0100
+Subject: [PATCH] journal: allow journal_file_copy_entry() to work on non-local
+ files
+
+---
+ src/journal/journal-file.c | 4 ----
+ 1 file changed, 4 deletions(-)
+
+diff --git a/src/journal/journal-file.c b/src/journal/journal-file.c
+index 53dd0c3..94e3921 100644
+--- a/src/journal/journal-file.c
++++ b/src/journal/journal-file.c
+@@ -2732,10 +2732,6 @@ int journal_file_copy_entry(JournalFile *from, JournalFile *to, Object *o, uint6
+         ts.monotonic = le64toh(o->entry.monotonic);
+         ts.realtime = le64toh(o->entry.realtime);
+ 
+-        if (to->tail_entry_monotonic_valid &&
+-            ts.monotonic < le64toh(to->header->tail_entry_monotonic))
+-                return -EINVAL;
+-
+         n = journal_file_entry_n_items(o);
+         items = alloca(sizeof(EntryItem) * n);
+ 
diff --git a/SOURCES/0038-journal-simplify-pre-allocation-logic.patch b/SOURCES/0038-journal-simplify-pre-allocation-logic.patch
new file mode 100644
index 0000000..f0b319d
--- /dev/null
+++ b/SOURCES/0038-journal-simplify-pre-allocation-logic.patch
@@ -0,0 +1,58 @@
+From 2d9a810729f9c209cab7aa6bf50ec5f749ebff82 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart@poettering.net>
+Date: Wed, 27 Nov 2013 01:44:52 +0100
+Subject: [PATCH] journal: simplify pre-allocation logic
+
+let's just do a single fallocate() as far as possible, and don't
+distuingish between allocated space and file size.
+
+This way we can save a syscall for each append, which makes quite some
+benefits.
+---
+ src/journal/journal-file.c | 19 ++++++++-----------
+ 1 file changed, 8 insertions(+), 11 deletions(-)
+
+diff --git a/src/journal/journal-file.c b/src/journal/journal-file.c
+index 94e3921..962cdd6 100644
+--- a/src/journal/journal-file.c
++++ b/src/journal/journal-file.c
+@@ -315,7 +315,7 @@ static int journal_file_verify_header(JournalFile *f) {
+ }
+ 
+ static int journal_file_allocate(JournalFile *f, uint64_t offset, uint64_t size) {
+-        uint64_t old_size, new_size, file_size;
++        uint64_t old_size, new_size;
+         int r;
+ 
+         assert(f);
+@@ -356,6 +356,11 @@ static int journal_file_allocate(JournalFile *f, uint64_t offset, uint64_t size)
+                 }
+         }
+ 
++        /* Increase by larger blocks at once */
++        new_size = ((new_size+FILE_SIZE_INCREASE-1) / FILE_SIZE_INCREASE) * FILE_SIZE_INCREASE;
++        if (f->metrics.max_size > 0 && new_size > f->metrics.max_size)
++                new_size = f->metrics.max_size;
++
+         /* Note that the glibc fallocate() fallback is very
+            inefficient, hence we try to minimize the allocation area
+            as we can. */
+@@ -363,16 +368,8 @@ static int journal_file_allocate(JournalFile *f, uint64_t offset, uint64_t size)
+         if (r != 0)
+                 return -r;
+ 
+-        /* Increase the file size a bit further than this, so that we
+-         * we can create larger memory maps to cache */
+-        file_size = ((new_size+FILE_SIZE_INCREASE-1) / FILE_SIZE_INCREASE) * FILE_SIZE_INCREASE;
+-        if (file_size > (uint64_t) f->last_stat.st_size) {
+-                if (file_size > new_size)
+-                        ftruncate(f->fd, file_size);
+-
+-                if (fstat(f->fd, &f->last_stat) < 0)
+-                        return -errno;
+-        }
++        if (fstat(f->fd, &f->last_stat) < 0)
++                return -errno;
+ 
+         f->header->arena_size = htole64(new_size - le64toh(f->header->header_size));
+ 
diff --git a/SOURCES/0038-logind-put-correct-user-object-paths-in-introspectio.patch b/SOURCES/0038-logind-put-correct-user-object-paths-in-introspectio.patch
deleted file mode 100644
index 1ff1c8b..0000000
--- a/SOURCES/0038-logind-put-correct-user-object-paths-in-introspectio.patch
+++ /dev/null
@@ -1,23 +0,0 @@
-From 31ad5f9f7291e5f97e62402f3198c9a5161548c1 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Mantas=20Mikul=C4=97nas?= <grawity@gmail.com>
-Date: Fri, 20 Sep 2013 18:14:02 +0300
-Subject: [PATCH] logind: put correct user object paths in introspection data
-
-Sync with user_bus_path() in logind-user-dbus.c
----
- src/login/logind-dbus.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c
-index d052e74..77dda10 100644
---- a/src/login/logind-dbus.c
-+++ b/src/login/logind-dbus.c
-@@ -2256,7 +2256,7 @@ static DBusHandlerResult manager_message_handler(
-                 }
- 
-                 HASHMAP_FOREACH(user, m->users, i)
--                        fprintf(f, "<node name=\"user/%llu\"/>", (unsigned long long) user->uid);
-+                        fprintf(f, "<node name=\"user/_%llu\"/>", (unsigned long long) user->uid);
- 
-                 HASHMAP_FOREACH(session, m->sessions, i) {
-                         p = bus_path_escape(session->id);
diff --git a/SOURCES/0039-Fix-obsolete-references-to-systemd-random-seed-load..patch b/SOURCES/0039-Fix-obsolete-references-to-systemd-random-seed-load..patch
deleted file mode 100644
index fba35b4..0000000
--- a/SOURCES/0039-Fix-obsolete-references-to-systemd-random-seed-load..patch
+++ /dev/null
@@ -1,38 +0,0 @@
-From fc8c5e4ff8248fa5548de63a5b96d1d9cf2be425 Mon Sep 17 00:00:00 2001
-From: Eelco Dolstra <eelco.dolstra@logicblox.com>
-Date: Sun, 22 Sep 2013 20:38:24 +0200
-Subject: [PATCH] Fix obsolete references to systemd-random-seed-load.service
-
-This service was merged with systemd-random-seed-save.service in
-c35b956d34bbb8bb208e49e45de2c103ca11911c.
----
- src/cryptsetup/cryptsetup-generator.c | 2 +-
- units/systemd-random-seed.service.in  | 2 +-
- 2 files changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/src/cryptsetup/cryptsetup-generator.c b/src/cryptsetup/cryptsetup-generator.c
-index ba6efa6..8792e6b 100644
---- a/src/cryptsetup/cryptsetup-generator.c
-+++ b/src/cryptsetup/cryptsetup-generator.c
-@@ -129,7 +129,7 @@ static int create_disk(
-                 if (streq(password, "/dev/urandom") ||
-                     streq(password, "/dev/random") ||
-                     streq(password, "/dev/hw_random"))
--                        fputs("After=systemd-random-seed-load.service\n", f);
-+                        fputs("After=systemd-random-seed.service\n", f);
-                 else if (!streq(password, "-") &&
-                          !streq(password, "none"))
-                         fprintf(f,
-diff --git a/units/systemd-random-seed.service.in b/units/systemd-random-seed.service.in
-index 0c21a04..1879b2f 100644
---- a/units/systemd-random-seed.service.in
-+++ b/units/systemd-random-seed.service.in
-@@ -7,7 +7,7 @@
- 
- [Unit]
- Description=Load/Save Random Seed
--Documentation=man:systemd-random-seed-load.service(8) man:random(4)
-+Documentation=man:systemd-random-seed.service(8) man:random(4)
- DefaultDependencies=no
- RequiresMountsFor=@RANDOM_SEED@
- Conflicts=shutdown.target
diff --git a/SOURCES/0039-journald-mention-how-long-we-needed-to-flush-to-var-.patch b/SOURCES/0039-journald-mention-how-long-we-needed-to-flush-to-var-.patch
new file mode 100644
index 0000000..cc56f08
--- /dev/null
+++ b/SOURCES/0039-journald-mention-how-long-we-needed-to-flush-to-var-.patch
@@ -0,0 +1,55 @@
+From 29323cff9feac15e1871a10e727690ac0ed1007d Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart@poettering.net>
+Date: Wed, 27 Nov 2013 01:54:25 +0100
+Subject: [PATCH] journald: mention how long we needed to flush to /var in the
+ logs
+
+---
+ src/journal/journald-server.c | 11 ++++++++++-
+ 1 file changed, 10 insertions(+), 1 deletion(-)
+
+diff --git a/src/journal/journald-server.c b/src/journal/journald-server.c
+index e03e413..a0a8e9c 100644
+--- a/src/journal/journald-server.c
++++ b/src/journal/journald-server.c
+@@ -968,9 +968,12 @@ static int system_journal_open(Server *s) {
+ }
+ 
+ int server_flush_to_var(Server *s) {
+-        int r;
+         sd_id128_t machine;
+         sd_journal *j = NULL;
++        char ts[FORMAT_TIMESPAN_MAX];
++        usec_t start;
++        unsigned n = 0;
++        int r;
+ 
+         assert(s);
+ 
+@@ -988,6 +991,8 @@ int server_flush_to_var(Server *s) {
+ 
+         log_debug("Flushing to /var...");
+ 
++        start = now(CLOCK_MONOTONIC);
++
+         r = sd_id128_get_machine(&machine);
+         if (r < 0)
+                 return r;
+@@ -1007,6 +1012,8 @@ int server_flush_to_var(Server *s) {
+                 f = j->current_file;
+                 assert(f && f->current_offset > 0);
+ 
++                n++;
++
+                 r = journal_file_move_to_object(f, OBJECT_ENTRY, f->current_offset, &o);
+                 if (r < 0) {
+                         log_error("Can't read entry: %s", strerror(-r));
+@@ -1050,6 +1057,8 @@ finish:
+ 
+         sd_journal_close(j);
+ 
++        server_driver_message(s, SD_ID128_NULL, "Time spent on flushing to /var is %s for %u entries.", format_timespan(ts, sizeof(ts), now(CLOCK_MONOTONIC) - start, 0), n);
++
+         return r;
+ }
+ 
diff --git a/SOURCES/0040-Never-call-qsort-on-potentially-NULL-arrays.patch b/SOURCES/0040-Never-call-qsort-on-potentially-NULL-arrays.patch
new file mode 100644
index 0000000..bd6b097
--- /dev/null
+++ b/SOURCES/0040-Never-call-qsort-on-potentially-NULL-arrays.patch
@@ -0,0 +1,368 @@
+From 43406f091aaa58ed23250a9967f46ad9cfa0b007 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Fri, 11 Oct 2013 19:33:13 -0400
+Subject: [PATCH] Never call qsort on potentially NULL arrays
+
+This extends 62678ded 'efi: never call qsort on potentially
+NULL arrays' to all other places where qsort is used and it
+is not obvious that the count is non-zero.
+---
+ src/analyze/systemd-analyze.c     |  2 +-
+ src/cgtop/cgtop.c                 |  2 +-
+ src/core/namespace.c              | 38 ++++++++++++++++++++------------------
+ src/journal/catalog.c             |  2 +-
+ src/journal/journal-vacuum.c      |  3 +--
+ src/journal/journalctl.c          |  2 +-
+ src/libsystemd-bus/bus-match.c    |  2 +-
+ src/libudev/libudev-enumerate.c   |  2 +-
+ src/nss-myhostname/netlink.c      |  3 ++-
+ src/readahead/readahead-collect.c | 39 ++++++++++++++++++++++-----------------
+ src/shared/cgroup-show.c          |  2 ++
+ src/shared/conf-files.c           |  2 +-
+ src/shared/efivars.c              |  3 +--
+ src/shared/fileio.c               |  1 +
+ src/shared/util.h                 | 12 ++++++++++++
+ src/systemctl/systemctl.c         | 10 +++++-----
+ 16 files changed, 73 insertions(+), 52 deletions(-)
+
+diff --git a/src/analyze/systemd-analyze.c b/src/analyze/systemd-analyze.c
+index 27d063c..a4f15eb 100644
+--- a/src/analyze/systemd-analyze.c
++++ b/src/analyze/systemd-analyze.c
+@@ -768,7 +768,7 @@ static int list_dependencies_one(DBusConnection *bus, const char *name, unsigned
+         if (r < 0)
+                 return r;
+ 
+-        qsort(deps, strv_length(deps), sizeof (char*), list_dependencies_compare);
++        qsort_safe(deps, strv_length(deps), sizeof (char*), list_dependencies_compare);
+ 
+         r = acquire_boot_times(bus, &boot);
+         if (r < 0)
+diff --git a/src/cgtop/cgtop.c b/src/cgtop/cgtop.c
+index cacf705..293a211 100644
+--- a/src/cgtop/cgtop.c
++++ b/src/cgtop/cgtop.c
+@@ -461,7 +461,7 @@ static int display(Hashmap *a) {
+                 if (g->n_tasks_valid || g->cpu_valid || g->memory_valid || g->io_valid)
+                         array[n++] = g;
+ 
+-        qsort(array, n, sizeof(Group*), group_compare);
++        qsort_safe(array, n, sizeof(Group*), group_compare);
+ 
+         /* Find the longest names in one run */
+         for (j = 0; j < n; j++) {
+diff --git a/src/core/namespace.c b/src/core/namespace.c
+index 16b132b..936f368 100644
+--- a/src/core/namespace.c
++++ b/src/core/namespace.c
+@@ -222,7 +222,7 @@ int setup_namespace(char** read_write_dirs,
+                      strv_length(read_only_dirs) +
+                      strv_length(inaccessible_dirs) +
+                      (private_tmp ? 2 : 0);
+-        BindMount *m, *mounts;
++        BindMount *m, *mounts = NULL;
+         int r = 0;
+ 
+         if (!mount_flags)
+@@ -231,27 +231,29 @@ int setup_namespace(char** read_write_dirs,
+         if (unshare(CLONE_NEWNS) < 0)
+                 return -errno;
+ 
+-        m = mounts = (BindMount *) alloca(n * sizeof(BindMount));
+-        if ((r = append_mounts(&m, read_write_dirs, READWRITE)) < 0 ||
+-                (r = append_mounts(&m, read_only_dirs, READONLY)) < 0 ||
+-                (r = append_mounts(&m, inaccessible_dirs, INACCESSIBLE)) < 0)
+-                return r;
++        if (n) {
++                m = mounts = (BindMount *) alloca(n * sizeof(BindMount));
++                if ((r = append_mounts(&m, read_write_dirs, READWRITE)) < 0 ||
++                    (r = append_mounts(&m, read_only_dirs, READONLY)) < 0 ||
++                    (r = append_mounts(&m, inaccessible_dirs, INACCESSIBLE)) < 0)
++                        return r;
++
++                if (private_tmp) {
++                        m->path = "/tmp";
++                        m->mode = PRIVATE_TMP;
++                        m++;
++
++                        m->path = "/var/tmp";
++                        m->mode = PRIVATE_VAR_TMP;
++                        m++;
++                }
+ 
+-        if (private_tmp) {
+-                m->path = "/tmp";
+-                m->mode = PRIVATE_TMP;
+-                m++;
++                assert(mounts + n == m);
+ 
+-                m->path = "/var/tmp";
+-                m->mode = PRIVATE_VAR_TMP;
+-                m++;
++                qsort(mounts, n, sizeof(BindMount), mount_path_compare);
++                drop_duplicates(mounts, &n);
+         }
+ 
+-        assert(mounts + n == m);
+-
+-        qsort(mounts, n, sizeof(BindMount), mount_path_compare);
+-        drop_duplicates(mounts, &n);
+-
+         /* Remount / as SLAVE so that nothing now mounted in the namespace
+            shows up in the parent */
+         if (mount(NULL, "/", NULL, MS_SLAVE|MS_REC, NULL) < 0)
+diff --git a/src/journal/catalog.c b/src/journal/catalog.c
+index 7738d24..90ca008 100644
+--- a/src/journal/catalog.c
++++ b/src/journal/catalog.c
+@@ -399,7 +399,7 @@ int catalog_update(const char* database, const char* root, const char* const* di
+         }
+ 
+         assert(n == hashmap_size(h));
+-        qsort(items, n, sizeof(CatalogItem), catalog_compare_func);
++        qsort_safe(items, n, sizeof(CatalogItem), catalog_compare_func);
+ 
+         r = write_catalog(database, h, sb, items, n);
+         if (r < 0)
+diff --git a/src/journal/journal-vacuum.c b/src/journal/journal-vacuum.c
+index 8d5effb..d4a1c6c 100644
+--- a/src/journal/journal-vacuum.c
++++ b/src/journal/journal-vacuum.c
+@@ -299,8 +299,7 @@ int journal_directory_vacuum(
+                 n_list ++;
+         }
+ 
+-        if (n_list > 0)
+-                qsort(list, n_list, sizeof(struct vacuum_info), vacuum_compare);
++        qsort_safe(list, n_list, sizeof(struct vacuum_info), vacuum_compare);
+ 
+         for (i = 0; i < n_list; i++) {
+                 struct statvfs ss;
+diff --git a/src/journal/journalctl.c b/src/journal/journalctl.c
+index 9a2d255..0876ee6 100644
+--- a/src/journal/journalctl.c
++++ b/src/journal/journalctl.c
+@@ -755,7 +755,7 @@ static int get_relative_boot_id(sd_journal *j, sd_id128_t *boot_id, int relative
+                 sd_journal_flush_matches(j);
+         }
+ 
+-        qsort(all_ids, count, sizeof(boot_id_t), boot_id_cmp);
++        qsort_safe(all_ids, count, sizeof(boot_id_t), boot_id_cmp);
+ 
+         if (sd_id128_equal(*boot_id, SD_ID128_NULL)) {
+                 if (relative > (int) count || relative <= -(int)count)
+diff --git a/src/libsystemd-bus/bus-match.c b/src/libsystemd-bus/bus-match.c
+index 1411167..916682a 100644
+--- a/src/libsystemd-bus/bus-match.c
++++ b/src/libsystemd-bus/bus-match.c
+@@ -768,7 +768,7 @@ int bus_match_parse(
+         }
+ 
+         /* Order the whole thing, so that we always generate the same tree */
+-        qsort(components, n_components, sizeof(struct bus_match_component), match_component_compare);
++        qsort_safe(components, n_components, sizeof(struct bus_match_component), match_component_compare);
+ 
+         /* Check for duplicates */
+         for (i = 0; i+1 < n_components; i++)
+diff --git a/src/libudev/libudev-enumerate.c b/src/libudev/libudev-enumerate.c
+index 8146f27..e71d766 100644
+--- a/src/libudev/libudev-enumerate.c
++++ b/src/libudev/libudev-enumerate.c
+@@ -276,7 +276,7 @@ _public_ struct udev_list_entry *udev_enumerate_get_list_entry(struct udev_enume
+                 size_t move_later_prefix = 0;
+ 
+                 udev_list_cleanup(&udev_enumerate->devices_list);
+-                qsort(udev_enumerate->devices, udev_enumerate->devices_cur, sizeof(struct syspath), syspath_cmp);
++                qsort_safe(udev_enumerate->devices, udev_enumerate->devices_cur, sizeof(struct syspath), syspath_cmp);
+ 
+                 max = udev_enumerate->devices_cur;
+                 for (i = 0; i < max; i++) {
+diff --git a/src/nss-myhostname/netlink.c b/src/nss-myhostname/netlink.c
+index b1ef912..47a41f5 100644
+--- a/src/nss-myhostname/netlink.c
++++ b/src/nss-myhostname/netlink.c
+@@ -197,7 +197,8 @@ finish:
+                 return r;
+         }
+ 
+-        qsort(list, n_list, sizeof(struct address), address_compare);
++        if (n_list)
++                qsort(list, n_list, sizeof(struct address), address_compare);
+ 
+         *_list = list;
+         *_n_list = n_list;
+diff --git a/src/readahead/readahead-collect.c b/src/readahead/readahead-collect.c
+index 32888ad..6b74866 100644
+--- a/src/readahead/readahead-collect.c
++++ b/src/readahead/readahead-collect.c
+@@ -536,8 +536,7 @@ done:
+                 HASHMAP_FOREACH_KEY(q, p, files, i)
+                         pack_file(pack, p, on_btrfs);
+         } else {
+-                struct item *ordered, *j;
+-                unsigned k, n;
++                unsigned n;
+ 
+                 /* On rotating media, order things by the block
+                  * numbers */
+@@ -545,25 +544,31 @@ done:
+                 log_debug("Ordering...");
+ 
+                 n = hashmap_size(files);
+-                if (!(ordered = new(struct item, n))) {
+-                        r = log_oom();
+-                        goto finish;
+-                }
+-
+-                j = ordered;
+-                HASHMAP_FOREACH_KEY(q, p, files, i) {
+-                        memcpy(j, q, sizeof(struct item));
+-                        j++;
+-                }
++                if (n) {
++                        _cleanup_free_ struct item *ordered;
++                        struct item *j;
++                        unsigned k;
++
++                        ordered = new(struct item, n);
++                        if (!ordered) {
++                                r = log_oom();
++                                goto finish;
++                        }
+ 
+-                assert(ordered + n == j);
++                        j = ordered;
++                        HASHMAP_FOREACH_KEY(q, p, files, i) {
++                                memcpy(j, q, sizeof(struct item));
++                                j++;
++                        }
+ 
+-                qsort(ordered, n, sizeof(struct item), qsort_compare);
++                        assert(ordered + n == j);
+ 
+-                for (k = 0; k < n; k++)
+-                        pack_file(pack, ordered[k].path, on_btrfs);
++                        qsort(ordered, n, sizeof(struct item), qsort_compare);
+ 
+-                free(ordered);
++                        for (k = 0; k < n; k++)
++                                pack_file(pack, ordered[k].path, on_btrfs);
++                } else
++                        log_warning("No pack files");
+         }
+ 
+         log_debug("Finalizing...");
+diff --git a/src/shared/cgroup-show.c b/src/shared/cgroup-show.c
+index e971f36..cc44ab4 100644
+--- a/src/shared/cgroup-show.c
++++ b/src/shared/cgroup-show.c
+@@ -44,6 +44,8 @@ static void show_pid_array(int pids[], unsigned n_pids, const char *prefix, unsi
+         unsigned i, m, pid_width;
+         pid_t biggest = 0;
+ 
++        assert(n_pids > 0);
++
+         /* Filter duplicates */
+         m = 0;
+         for (i = 0; i < n_pids; i++) {
+diff --git a/src/shared/conf-files.c b/src/shared/conf-files.c
+index 6d99739..ed4070c 100644
+--- a/src/shared/conf-files.c
++++ b/src/shared/conf-files.c
+@@ -127,7 +127,7 @@ static int conf_files_list_strv_internal(char ***strv, const char *suffix, const
+                 return -ENOMEM;
+         }
+ 
+-        qsort(files, hashmap_size(fh), sizeof(char *), base_cmp);
++        qsort_safe(files, hashmap_size(fh), sizeof(char *), base_cmp);
+         *strv = files;
+ 
+         hashmap_free(fh);
+diff --git a/src/shared/efivars.c b/src/shared/efivars.c
+index c015b16..f3eb6a6 100644
+--- a/src/shared/efivars.c
++++ b/src/shared/efivars.c
+@@ -384,8 +384,7 @@ int efi_get_boot_options(uint16_t **options) {
+                 list[count ++] = id;
+         }
+ 
+-        if (list)
+-                qsort(list, count, sizeof(uint16_t), cmp_uint16);
++        qsort_safe(list, count, sizeof(uint16_t), cmp_uint16);
+ 
+         *options = list;
+         return count;
+diff --git a/src/shared/fileio.c b/src/shared/fileio.c
+index 603a1c7..733b320 100644
+--- a/src/shared/fileio.c
++++ b/src/shared/fileio.c
+@@ -662,6 +662,7 @@ int get_status_field(const char *filename, const char *pattern, char **field) {
+         int r;
+ 
+         assert(filename);
++        assert(pattern);
+         assert(field);
+ 
+         r = read_full_file(filename, &status, NULL);
+diff --git a/src/shared/util.h b/src/shared/util.h
+index 1b845b3..222abe0 100644
+--- a/src/shared/util.h
++++ b/src/shared/util.h
+@@ -764,3 +764,15 @@ bool id128_is_valid(const char *s) _pure_;
+ void parse_user_at_host(char *arg, char **user, char **host);
+ 
+ int split_pair(const char *s, const char *sep, char **l, char **r);
++
++/**
++ * Normal qsort requires base to be nonnull. Here were require
++ * that only if nmemb > 0.
++ */
++static inline void qsort_safe(void *base, size_t nmemb, size_t size,
++                              int (*compar)(const void *, const void *)) {
++        if (nmemb) {
++                assert(base);
++                qsort(base, nmemb, size, compar);
++        }
++}
+diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c
+index bb7ada9..0d1a487 100644
+--- a/src/systemctl/systemctl.c
++++ b/src/systemctl/systemctl.c
+@@ -471,7 +471,7 @@ static int list_units(DBusConnection *bus, char **args) {
+         if (r < 0)
+                 return r;
+ 
+-        qsort(unit_infos, c, sizeof(struct unit_info), compare_unit_info);
++        qsort_safe(unit_infos, c, sizeof(struct unit_info), compare_unit_info);
+ 
+         output_units_list(unit_infos, c);
+ 
+@@ -733,8 +733,8 @@ static int list_sockets(DBusConnection *bus, char **args) {
+                 listen = triggered = NULL; /* avoid cleanup */
+         }
+ 
+-        qsort(socket_infos, cs, sizeof(struct socket_info),
+-              (__compar_fn_t) socket_info_compare);
++        qsort_safe(socket_infos, cs, sizeof(struct socket_info),
++                   (__compar_fn_t) socket_info_compare);
+ 
+         output_sockets_list(socket_infos, cs);
+ 
+@@ -1108,7 +1108,7 @@ static int list_dependencies_one(DBusConnection *bus, const char *name, int leve
+         if (r < 0)
+                 return r;
+ 
+-        qsort(deps, strv_length(deps), sizeof (char*), list_dependencies_compare);
++        qsort_safe(deps, strv_length(deps), sizeof (char*), list_dependencies_compare);
+ 
+         STRV_FOREACH(c, deps) {
+                 if (strv_contains(u, *c)) {
+@@ -3532,7 +3532,7 @@ static int show_all(const char* verb,
+         if (r < 0)
+                 return r;
+ 
+-        qsort(unit_infos, c, sizeof(struct unit_info), compare_unit_info);
++        qsort_safe(unit_infos, c, sizeof(struct unit_info), compare_unit_info);
+ 
+         for (u = unit_infos; u < unit_infos + c; u++) {
+                 _cleanup_free_ char *p = NULL;
diff --git a/SOURCES/0040-cgroup-always-enable-memory.use_hierarchy-for-all-cg.patch b/SOURCES/0040-cgroup-always-enable-memory.use_hierarchy-for-all-cg.patch
deleted file mode 100644
index eaa35ea..0000000
--- a/SOURCES/0040-cgroup-always-enable-memory.use_hierarchy-for-all-cg.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From 91d2bf71864a1cb9f1228b65b126f5d74d8e09b9 Mon Sep 17 00:00:00 2001
-From: Lennart Poettering <lennart@poettering.net>
-Date: Mon, 23 Sep 2013 16:02:31 -0500
-Subject: [PATCH] cgroup: always enable memory.use_hierarchy= for all cgroups
- in the memory hierarchy
-
-The non-hierarchial mode contradicts the whole idea of a cgroup tree so
-let's not support this. In the future the kernel will only support the
-hierarchial logic anyway.
----
- src/core/cgroup.c | 3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
-diff --git a/src/core/cgroup.c b/src/core/cgroup.c
-index 7f29afb..24a2306 100644
---- a/src/core/cgroup.c
-+++ b/src/core/cgroup.c
-@@ -256,8 +256,9 @@ void cgroup_context_apply(CGroupContext *c, CGroupControllerMask mask, const cha
-         }
- 
-         if (mask & CGROUP_MEMORY) {
--                char buf[DECIMAL_STR_MAX(uint64_t) + 1];
-                 if (c->memory_limit != (uint64_t) -1) {
-+                        char buf[DECIMAL_STR_MAX(uint64_t) + 1];
-+
-                         sprintf(buf, "%" PRIu64 "\n", c->memory_limit);
-                         r = cg_set_attribute("memory", path, "memory.limit_in_bytes", buf);
-                 } else
diff --git a/SOURCES/0041-journalctl-1-s-adm-systemd-journal.patch b/SOURCES/0041-journalctl-1-s-adm-systemd-journal.patch
deleted file mode 100644
index f82532f..0000000
--- a/SOURCES/0041-journalctl-1-s-adm-systemd-journal.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-From 07da21cf4de7428cc2016333f8ae774fcab6e9fd Mon Sep 17 00:00:00 2001
-From: Dave Reisner <dreisner@archlinux.org>
-Date: Tue, 24 Sep 2013 14:39:40 -0400
-Subject: [PATCH] journalctl(1): s/adm/systemd-journal/
-
----
- man/journalctl.xml | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/man/journalctl.xml b/man/journalctl.xml
-index a5778bf..b5a0c53 100644
---- a/man/journalctl.xml
-+++ b/man/journalctl.xml
-@@ -104,7 +104,7 @@
- 
-                 <para>All users are granted access to their private
-                 per-user journals. However, by default, only root and
--                users who are members of the <literal>adm</literal>
-+                users who are members of the <literal>systemd-journal</literal>
-                 group get access to the system journal and the
-                 journals of other users.</para>
- 
diff --git a/SOURCES/0041-localed-match-converted-keymaps-before-legacy.patch b/SOURCES/0041-localed-match-converted-keymaps-before-legacy.patch
new file mode 100644
index 0000000..6274b97
--- /dev/null
+++ b/SOURCES/0041-localed-match-converted-keymaps-before-legacy.patch
@@ -0,0 +1,324 @@
+From 354d8234f177bca65eddf1451b180772cdbf7611 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Mon, 18 Nov 2013 13:42:57 -0500
+Subject: [PATCH] localed: match converted keymaps before legacy
+
+Before, X11 keymap fr-pc105-oss would be converted to fr,
+even though fr-oss exists. Now, if
+/usr/lib/kbd/keymaps/xkb/<layout>[-<variant>].map[.gz] exists,
+<layout>[-<variant>] will be used as the console keymap,
+falling back to the legacy mappings otherwise.
+
+% sudo localectl set-x11-keymap pl pc105
+% localectl
+   System Locale: LANG=en_US.UTF-8
+       VC Keymap: pl                      (was pl2 before)
+      X11 Layout: pl
+       X11 Model: pc105
+% sudo localectl set-x11-keymap fr pc105 oss
+% localectl
+   System Locale: LANG=en_US.UTF-8
+       VC Keymap: fr-oss                  (was fr before)
+      X11 Layout: fr
+       X11 Model: pc105
+     X11 Variant: oss
+% sudo localectl set-x11-keymap fr pc105
+% localectl
+   System Locale: LANG=en_US.UTF-8
+       VC Keymap: fr
+      X11 Layout: fr
+       X11 Model: pc105
+% sudo localectl set-x11-keymap gb
+% localectl
+   System Locale: LANG=en_US.UTF-8
+       VC Keymap: gb                     (was uk before)
+      X11 Layout: gb
+
+Conflicts:
+	src/locale/localed.c
+	src/shared/def.h
+---
+ src/locale/localectl.c |   8 +--
+ src/locale/localed.c   | 189 ++++++++++++++++++++++++++++---------------------
+ src/shared/def.h       |  13 ++++
+ 3 files changed, 126 insertions(+), 84 deletions(-)
+
+diff --git a/src/locale/localectl.c b/src/locale/localectl.c
+index 8259c0a..d3c6152 100644
+--- a/src/locale/localectl.c
++++ b/src/locale/localectl.c
+@@ -38,6 +38,7 @@
+ #include "set.h"
+ #include "path-util.h"
+ #include "utf8.h"
++#include "def.h"
+ 
+ static bool arg_no_pager = false;
+ static enum transport {
+@@ -533,15 +534,14 @@ static int nftw_cb(
+ 
+ static int list_vconsole_keymaps(DBusConnection *bus, char **args, unsigned n) {
+         _cleanup_strv_free_ char **l = NULL;
++        const char *dir;
+ 
+         keymaps = set_new(string_hash_func, string_compare_func);
+         if (!keymaps)
+                 return log_oom();
+ 
+-        nftw("/usr/share/keymaps/", nftw_cb, 20, FTW_MOUNT|FTW_PHYS);
+-        nftw("/usr/share/kbd/keymaps/", nftw_cb, 20, FTW_MOUNT|FTW_PHYS);
+-        nftw("/usr/lib/kbd/keymaps/", nftw_cb, 20, FTW_MOUNT|FTW_PHYS);
+-        nftw("/lib/kbd/keymaps/", nftw_cb, 20, FTW_MOUNT|FTW_PHYS);
++        NULSTR_FOREACH(dir, KBD_KEYMAP_DIRS)
++                nftw(dir, nftw_cb, 20, FTW_MOUNT|FTW_PHYS);
+ 
+         l = set_get_strv(keymaps);
+         if (!l) {
+diff --git a/src/locale/localed.c b/src/locale/localed.c
+index e160c04..b9b98f4 100644
+--- a/src/locale/localed.c
++++ b/src/locale/localed.c
+@@ -792,105 +792,135 @@ static int convert_vconsole_to_x11(DBusConnection *connection) {
+         return 0;
+ }
+ 
+-static int convert_x11_to_vconsole(DBusConnection *connection) {
+-        bool modified = false;
++static int find_converted_keymap(char **new_keymap) {
++        const char *dir;
++        _cleanup_free_ char *n;
++
++        if (state.x11_variant)
++                n = strjoin(state.x11_layout, "-", state.x11_variant, NULL);
++        else
++                n = strdup(state.x11_layout);
++        if (!n)
++                return -ENOMEM;
+ 
+-        assert(connection);
++        NULSTR_FOREACH(dir, KBD_KEYMAP_DIRS) {
++                _cleanup_free_ char *p = NULL, *pz = NULL;
+ 
+-        if (isempty(state.x11_layout)) {
++                p = strjoin(dir, "xkb/", n, ".map", NULL);
++                pz = strjoin(dir, "xkb/", n, ".map.gz", NULL);
++                if (!p || !pz)
++                        return -ENOMEM;
+ 
+-                modified =
+-                        !isempty(state.vc_keymap) ||
+-                        !isempty(state.vc_keymap_toggle);
++                if (access(p, F_OK) == 0 || access(pz, F_OK) == 0) {
++                        *new_keymap = n;
++                        n = NULL;
++                        return 1;
++                }
++        }
+ 
+-                free_data_x11();
+-        } else {
+-                FILE *f;
+-                unsigned n = 0;
+-                unsigned best_matching = 0;
+-                char *new_keymap = NULL;
++        return 0;
++}
+ 
+-                f = fopen(SYSTEMD_KBD_MODEL_MAP, "re");
+-                if (!f)
+-                        return -errno;
++static int find_legacy_keymap(char **new_keymap) {
++        _cleanup_fclose_ FILE *f;
++        unsigned n = 0;
++        unsigned best_matching = 0;
+ 
+-                for (;;) {
+-                        char **a;
+-                        unsigned matching = 0;
+-                        int r;
+ 
+-                        r = read_next_mapping(f, &n, &a);
+-                        if (r < 0) {
+-                                fclose(f);
+-                                return r;
+-                        }
++        f = fopen(SYSTEMD_KBD_MODEL_MAP, "re");
++        if (!f)
++                return -errno;
+ 
+-                        if (r == 0)
+-                                break;
++        for (;;) {
++                _cleanup_strv_free_ char **a = NULL;
++                unsigned matching = 0;
++                int r;
+ 
+-                        /* Determine how well matching this entry is */
+-                        if (streq_ptr(state.x11_layout, a[1]))
+-                                /* If we got an exact match, this is best */
+-                                matching = 10;
+-                        else {
+-                                size_t x;
+-
+-                                x = strcspn(state.x11_layout, ",");
+-
+-                                /* We have multiple X layouts, look
+-                                 * for an entry that matches our key
+-                                 * with the everything but the first
+-                                 * layout stripped off. */
+-                                if (x > 0 &&
+-                                    strlen(a[1]) == x &&
+-                                    strneq(state.x11_layout, a[1], x))
+-                                        matching = 5;
+-                                else  {
+-                                        size_t w;
+-
+-                                        /* If that didn't work, strip
+-                                         * off the other layouts from
+-                                         * the entry, too */
+-
+-                                        w = strcspn(a[1], ",");
+-
+-                                        if (x > 0 && x == w &&
+-                                            memcmp(state.x11_layout, a[1], x) == 0)
+-                                                matching = 1;
+-                                }
++                r = read_next_mapping(f, &n, &a);
++                if (r < 0)
++                        return r;
++                if (r == 0)
++                        break;
++
++                /* Determine how well matching this entry is */
++                if (streq_ptr(state.x11_layout, a[1]))
++                        /* If we got an exact match, this is best */
++                        matching = 10;
++                else {
++                        size_t x;
++
++                        x = strcspn(state.x11_layout, ",");
++
++                        /* We have multiple X layouts, look for an
++                         * entry that matches our key with everything
++                         * but the first layout stripped off. */
++                        if (x > 0 &&
++                            strlen(a[1]) == x &&
++                            strneq(state.x11_layout, a[1], x))
++                                matching = 5;
++                        else  {
++                                size_t w;
++
++                                /* If that didn't work, strip off the
++                                 * other layouts from the entry, too */
++                                w = strcspn(a[1], ",");
++
++                                if (x > 0 && x == w &&
++                                    memcmp(state.x11_layout, a[1], x) == 0)
++                                        matching = 1;
+                         }
++                }
++
++                if (matching > 0 &&
++                    streq_ptr(state.x11_model, a[2])) {
++                        matching++;
+ 
+-                        if (matching > 0 &&
+-                            streq_ptr(state.x11_model, a[2])) {
++                        if (streq_ptr(state.x11_variant, a[3])) {
+                                 matching++;
+ 
+-                                if (streq_ptr(state.x11_variant, a[3])) {
++                                if (streq_ptr(state.x11_options, a[4]))
+                                         matching++;
+-
+-                                        if (streq_ptr(state.x11_options, a[4]))
+-                                                matching++;
+-                                }
+                         }
++                }
+ 
+-                        /* The best matching entry so far, then let's
+-                         * save that */
+-                        if (matching > best_matching) {
+-                                best_matching = matching;
++                /* The best matching entry so far, then let's save that */
++                if (matching > best_matching) {
++                        best_matching = matching;
+ 
+-                                free(new_keymap);
+-                                new_keymap = strdup(a[0]);
++                        free(*new_keymap);
++                        *new_keymap = strdup(a[0]);
++                        if (!*new_keymap)
++                                return -ENOMEM;
++                }
++        }
+ 
+-                                if (!new_keymap) {
+-                                        strv_free(a);
+-                                        fclose(f);
+-                                        return -ENOMEM;
+-                                }
+-                        }
++        return 0;
++}
+ 
+-                        strv_free(a);
+-                }
++static int convert_x11_to_vconsole(DBusConnection *connection) {
++        bool modified = false;
++        int r;
+ 
+-                fclose(f);
++        assert(connection);
++
++        if (isempty(state.x11_layout)) {
++
++                modified =
++                        !isempty(state.vc_keymap) ||
++                        !isempty(state.vc_keymap_toggle);
++
++                free_data_x11();
++        } else {
++                char *new_keymap = NULL;
++
++                r = find_converted_keymap(&new_keymap);
++                if (r < 0)
++                        return r;
++                else if (r == 0) {
++                        r = find_legacy_keymap(&new_keymap);
++                        if (r < 0)
++                                return r;
++                }
+ 
+                 if (!streq_ptr(state.vc_keymap, new_keymap)) {
+                         free(state.vc_keymap);
+@@ -907,7 +937,6 @@ static int convert_x11_to_vconsole(DBusConnection *connection) {
+         if (modified) {
+                 dbus_bool_t b;
+                 DBusMessage *changed;
+-                int r;
+ 
+                 r = write_data_vconsole();
+                 if (r < 0)
+diff --git a/src/shared/def.h b/src/shared/def.h
+index e4ef735..58c834c 100644
+--- a/src/shared/def.h
++++ b/src/shared/def.h
+@@ -41,3 +41,16 @@
+ #define LOWERCASE_LETTERS "abcdefghijklmnopqrstuvwxyz"
+ #define UPPERCASE_LETTERS "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+ #define LETTERS LOWERCASE_LETTERS UPPERCASE_LETTERS
++
++#ifdef HAVE_SPLIT_USR
++#define KBD_KEYMAP_DIRS                         \
++        "/usr/share/keymaps/\0"                 \
++        "/usr/share/kbd/keymaps/\0"             \
++        "/usr/lib/kbd/keymaps/\0"               \
++        "/lib/kbd/keymaps/\0"
++#else
++#define KBD_KEYMAP_DIRS                         \
++        "/usr/share/keymaps/\0"                 \
++        "/usr/share/kbd/keymaps/\0"             \
++        "/usr/lib/kbd/keymaps/\0"
++#endif
diff --git a/SOURCES/0042-cgroup-if-we-do-a-cgroup-operation-then-do-something.patch b/SOURCES/0042-cgroup-if-we-do-a-cgroup-operation-then-do-something.patch
deleted file mode 100644
index 627c665..0000000
--- a/SOURCES/0042-cgroup-if-we-do-a-cgroup-operation-then-do-something.patch
+++ /dev/null
@@ -1,422 +0,0 @@
-From 9c9e7b8fffbb21009d39a90076542e553a5c2190 Mon Sep 17 00:00:00 2001
-From: Lennart Poettering <lennart@poettering.net>
-Date: Mon, 23 Sep 2013 21:56:05 -0500
-Subject: [PATCH] cgroup: if we do a cgroup operation then do something on all
- supported controllers
-
-Previously we did operations like attach, trim or migrate only on the
-controllers that were enabled for a specific unit. With this changes we
-will now do them for all supproted controllers, and fall back to all
-possible prefix paths if the specified paths do not exist.
-
-This fixes issues if a controller is being disabled for a unit where it
-was previously enabled, and makes sure that all processes stay as "far
-down" the tree as groups exist.
----
- src/core/cgroup.c        |   8 +--
- src/core/execute.c       |   4 +-
- src/core/mount.c         |   2 +-
- src/core/scope.c         |   2 +-
- src/core/service.c       |   2 +-
- src/core/socket.c        |   2 +-
- src/core/swap.c          |   2 +-
- src/shared/cgroup-util.c | 154 ++++++++++++++++++++++++++++++-----------------
- src/shared/cgroup-util.h |  12 ++--
- 9 files changed, 118 insertions(+), 70 deletions(-)
-
-diff --git a/src/core/cgroup.c b/src/core/cgroup.c
-index 24a2306..2f1e4a3 100644
---- a/src/core/cgroup.c
-+++ b/src/core/cgroup.c
-@@ -409,13 +409,13 @@ static int unit_create_cgroups(Unit *u, CGroupControllerMask mask) {
-         }
- 
-         /* First, create our own group */
--        r = cg_create_with_mask(mask, path);
-+        r = cg_create_everywhere(u->manager->cgroup_supported, mask, path);
-         if (r < 0)
-                 log_error("Failed to create cgroup %s: %s", path, strerror(-r));
- 
-         /* Then, possibly move things over */
--        if (u->cgroup_path && !streq(path, u->cgroup_path)) {
--                r = cg_migrate_with_mask(mask, u->cgroup_path, path);
-+        if (u->cgroup_path) {
-+                r = cg_migrate_everywhere(u->manager->cgroup_supported, u->cgroup_path, path);
-                 if (r < 0)
-                         log_error("Failed to migrate cgroup %s: %s", path, strerror(-r));
-         }
-@@ -549,7 +549,7 @@ void unit_destroy_cgroup(Unit *u) {
-         if (!u->cgroup_path)
-                 return;
- 
--        r = cg_trim_with_mask(u->cgroup_mask, u->cgroup_path, !unit_has_name(u, SPECIAL_ROOT_SLICE));
-+        r = cg_trim_everywhere(u->manager->cgroup_supported, u->cgroup_path, !unit_has_name(u, SPECIAL_ROOT_SLICE));
-         if (r < 0)
-                 log_debug("Failed to destroy cgroup %s: %s", u->cgroup_path, strerror(-r));
- 
-diff --git a/src/core/execute.c b/src/core/execute.c
-index 43b571e..789122e 100644
---- a/src/core/execute.c
-+++ b/src/core/execute.c
-@@ -1016,7 +1016,7 @@ int exec_spawn(ExecCommand *command,
-                bool apply_chroot,
-                bool apply_tty_stdin,
-                bool confirm_spawn,
--               CGroupControllerMask cgroup_mask,
-+               CGroupControllerMask cgroup_supported,
-                const char *cgroup_path,
-                const char *unit_id,
-                int idle_pipe[4],
-@@ -1197,7 +1197,7 @@ int exec_spawn(ExecCommand *command,
-                 }
- 
-                 if (cgroup_path) {
--                        err = cg_attach_with_mask(cgroup_mask, cgroup_path, 0);
-+                        err = cg_attach_everywhere(cgroup_supported, cgroup_path, 0);
-                         if (err < 0) {
-                                 r = EXIT_CGROUP;
-                                 goto fail_child;
-diff --git a/src/core/mount.c b/src/core/mount.c
-index 5c18d4e..78c5c1e 100644
---- a/src/core/mount.c
-+++ b/src/core/mount.c
-@@ -888,7 +888,7 @@ static int mount_spawn(Mount *m, ExecCommand *c, pid_t *_pid) {
-                        true,
-                        true,
-                        UNIT(m)->manager->confirm_spawn,
--                       UNIT(m)->cgroup_mask,
-+                       UNIT(m)->manager->cgroup_supported,
-                        UNIT(m)->cgroup_path,
-                        UNIT(m)->id,
-                        NULL,
-diff --git a/src/core/scope.c b/src/core/scope.c
-index b94f3ff..50e5dba 100644
---- a/src/core/scope.c
-+++ b/src/core/scope.c
-@@ -257,7 +257,7 @@ static int scope_start(Unit *u) {
-                 return r;
-         }
- 
--        r = cg_attach_many_with_mask(u->cgroup_mask, u->cgroup_path, s->pids);
-+        r = cg_attach_many_everywhere(u->manager->cgroup_supported, u->cgroup_path, s->pids);
-         if (r < 0)
-                 return r;
- 
-diff --git a/src/core/service.c b/src/core/service.c
-index 5953f45..fc04196 100644
---- a/src/core/service.c
-+++ b/src/core/service.c
-@@ -1826,7 +1826,7 @@ static int service_spawn(
-                        apply_chroot,
-                        apply_tty_stdin,
-                        UNIT(s)->manager->confirm_spawn,
--                       UNIT(s)->cgroup_mask,
-+                       UNIT(s)->manager->cgroup_supported,
-                        path,
-                        UNIT(s)->id,
-                        s->type == SERVICE_IDLE ? UNIT(s)->manager->idle_pipe : NULL,
-diff --git a/src/core/socket.c b/src/core/socket.c
-index 2130e48..25c2a51 100644
---- a/src/core/socket.c
-+++ b/src/core/socket.c
-@@ -1241,7 +1241,7 @@ static int socket_spawn(Socket *s, ExecCommand *c, pid_t *_pid) {
-                        true,
-                        true,
-                        UNIT(s)->manager->confirm_spawn,
--                       UNIT(s)->cgroup_mask,
-+                       UNIT(s)->manager->cgroup_supported,
-                        UNIT(s)->cgroup_path,
-                        UNIT(s)->id,
-                        NULL,
-diff --git a/src/core/swap.c b/src/core/swap.c
-index 76c7d45..d225485 100644
---- a/src/core/swap.c
-+++ b/src/core/swap.c
-@@ -625,7 +625,7 @@ static int swap_spawn(Swap *s, ExecCommand *c, pid_t *_pid) {
-                        true,
-                        true,
-                        UNIT(s)->manager->confirm_spawn,
--                       UNIT(s)->cgroup_mask,
-+                       UNIT(s)->manager->cgroup_supported,
-                        UNIT(s)->cgroup_path,
-                        UNIT(s)->id,
-                        NULL,
-diff --git a/src/shared/cgroup-util.c b/src/shared/cgroup-util.c
-index 0bffebd..2e630d4 100644
---- a/src/shared/cgroup-util.c
-+++ b/src/shared/cgroup-util.c
-@@ -435,6 +435,46 @@ int cg_migrate_recursive(
-         return ret;
- }
- 
-+int cg_migrate_recursive_fallback(
-+                const char *cfrom,
-+                const char *pfrom,
-+                const char *cto,
-+                const char *pto,
-+                bool ignore_self,
-+                bool rem) {
-+
-+        int r;
-+
-+        assert(cfrom);
-+        assert(pfrom);
-+        assert(cto);
-+        assert(pto);
-+
-+        r = cg_migrate_recursive(cfrom, pfrom, cto, pto, ignore_self, rem);
-+        if (r < 0) {
-+                char prefix[strlen(pto) + 1];
-+
-+                /* This didn't work? Then let's try all prefixes of the destination */
-+
-+                strcpy(prefix, pto);
-+                for (;;) {
-+                        char *slash;
-+
-+                        slash = strrchr(prefix, '/');
-+                        if (!slash)
-+                                break;
-+
-+                        *slash = 0;
-+
-+                        r = cg_migrate_recursive(cfrom, pfrom, cto, prefix, ignore_self, rem);
-+                        if (r >= 0)
-+                                break;
-+                }
-+        }
-+
-+        return r;
-+}
-+
- static const char *normalize_controller(const char *controller) {
- 
-         assert(controller);
-@@ -607,6 +647,39 @@ int cg_attach(const char *controller, const char *path, pid_t pid) {
-         return write_string_file(fs, c);
- }
- 
-+int cg_attach_fallback(const char *controller, const char *path, pid_t pid) {
-+        int r;
-+
-+        assert(controller);
-+        assert(path);
-+        assert(pid >= 0);
-+
-+        r = cg_attach(controller, path, pid);
-+        if (r < 0) {
-+                char prefix[strlen(path) + 1];
-+
-+                /* This didn't work? Then let's try all prefixes of
-+                 * the destination */
-+
-+                strcpy(prefix, path);
-+                for (;;) {
-+                        char *slash;
-+
-+                        slash = strrchr(prefix, '/');
-+                        if (!slash)
-+                                break;
-+
-+                        *slash = 0;
-+
-+                        r = cg_attach(controller, prefix, pid);
-+                        if (r >= 0)
-+                                break;
-+                }
-+        }
-+
-+        return r;
-+}
-+
- int cg_set_group_access(
-                 const char *controller,
-                 const char *path,
-@@ -1607,7 +1680,7 @@ static const char mask_names[] =
-         "memory\0"
-         "devices\0";
- 
--int cg_create_with_mask(CGroupControllerMask mask, const char *path) {
-+int cg_create_everywhere(CGroupControllerMask supported, CGroupControllerMask mask, const char *path) {
-         CGroupControllerMask bit = 1;
-         const char *n;
-         int r;
-@@ -1623,102 +1696,75 @@ int cg_create_with_mask(CGroupControllerMask mask, const char *path) {
- 
-         /* Then, do the same in the other hierarchies */
-         NULSTR_FOREACH(n, mask_names) {
--                if (bit & mask)
-+                if (mask & bit)
-                         cg_create(n, path);
--                else
-+                else if (supported & bit)
-                         cg_trim(n, path, true);
- 
-                 bit <<= 1;
-         }
- 
--        return r;
-+        return 0;
- }
- 
--int cg_attach_with_mask(CGroupControllerMask mask, const char *path, pid_t pid) {
-+int cg_attach_everywhere(CGroupControllerMask supported, const char *path, pid_t pid) {
-         CGroupControllerMask bit = 1;
-         const char *n;
-         int r;
- 
-         r = cg_attach(SYSTEMD_CGROUP_CONTROLLER, path, pid);
-+        if (r < 0)
-+                return r;
- 
-         NULSTR_FOREACH(n, mask_names) {
--                if (bit & mask)
--                        cg_attach(n, path, pid);
--                else {
--                        char prefix[strlen(path) + 1], *slash;
--
--                        /* OK, this one is a bit harder... Now we need
--                         * to add to the closest parent cgroup we
--                         * can find */
--                        strcpy(prefix, path);
--                        while ((slash = strrchr(prefix, '/'))) {
--                                int q;
--                                *slash = 0;
--
--                                q = cg_attach(n, prefix, pid);
--                                if (q >= 0)
--                                        break;
--                        }
--                }
-+                if (supported & bit)
-+                        cg_attach_fallback(n, path, pid);
- 
-                 bit <<= 1;
-         }
- 
--        return r;
-+        return 0;
- }
- 
--int cg_attach_many_with_mask(CGroupControllerMask mask, const char *path, Set* pids) {
-+int cg_attach_many_everywhere(CGroupControllerMask supported, const char *path, Set* pids) {
-         Iterator i;
-         void *pidp;
-         int r = 0;
- 
-         SET_FOREACH(pidp, pids, i) {
-                 pid_t pid = PTR_TO_LONG(pidp);
--                int k;
-+                int q;
- 
--                k = cg_attach_with_mask(mask, path, pid);
--                if (k < 0)
--                        r = k;
-+                q = cg_attach_everywhere(supported, path, pid);
-+                if (q < 0)
-+                        r = q;
-         }
- 
-         return r;
- }
- 
--int cg_migrate_with_mask(CGroupControllerMask mask, const char *from, const char *to) {
-+int cg_migrate_everywhere(CGroupControllerMask supported, const char *from, const char *to) {
-         CGroupControllerMask bit = 1;
-         const char *n;
-         int r;
- 
--        if (path_equal(from, to))
--                return 0;
--
--        r = cg_migrate_recursive(SYSTEMD_CGROUP_CONTROLLER, from, SYSTEMD_CGROUP_CONTROLLER, to, false, true);
-+        if (!path_equal(from, to))  {
-+                r = cg_migrate_recursive(SYSTEMD_CGROUP_CONTROLLER, from, SYSTEMD_CGROUP_CONTROLLER, to, false, true);
-+                if (r < 0)
-+                        return r;
-+        }
- 
-         NULSTR_FOREACH(n, mask_names) {
--                if (bit & mask)
--                        cg_migrate_recursive(SYSTEMD_CGROUP_CONTROLLER, to, n, to, false, false);
--                else {
--                        char prefix[strlen(to) + 1], *slash;
--
--                        strcpy(prefix, to);
--                        while ((slash = strrchr(prefix, '/'))) {
--                                int q;
--
--                                *slash = 0;
--
--                                q = cg_migrate_recursive(SYSTEMD_CGROUP_CONTROLLER, to, n, prefix, false, false);
--                                if (q >= 0)
--                                        break;
--                        }
--                }
-+                if (supported & bit)
-+                        cg_migrate_recursive_fallback(SYSTEMD_CGROUP_CONTROLLER, to, n, to, false, false);
- 
-                 bit <<= 1;
-         }
- 
--        return r;
-+        return 0;
- }
- 
--int cg_trim_with_mask(CGroupControllerMask mask, const char *path, bool delete_root) {
-+int cg_trim_everywhere(CGroupControllerMask supported, const char *path, bool delete_root) {
-         CGroupControllerMask bit = 1;
-         const char *n;
-         int r;
-@@ -1728,13 +1774,13 @@ int cg_trim_with_mask(CGroupControllerMask mask, const char *path, bool delete_r
-                 return r;
- 
-         NULSTR_FOREACH(n, mask_names) {
--                if (bit & mask)
-+                if (supported & bit)
-                         cg_trim(n, path, delete_root);
- 
-                 bit <<= 1;
-         }
- 
--        return r;
-+        return 0;
- }
- 
- CGroupControllerMask cg_mask_supported(void) {
-diff --git a/src/shared/cgroup-util.h b/src/shared/cgroup-util.h
-index 0fc93c1..0963450 100644
---- a/src/shared/cgroup-util.h
-+++ b/src/shared/cgroup-util.h
-@@ -64,6 +64,7 @@ int cg_kill_recursive_and_wait(const char *controller, const char *path, bool re
- 
- int cg_migrate(const char *cfrom, const char *pfrom, const char *cto, const char *pto, bool ignore_self);
- int cg_migrate_recursive(const char *cfrom, const char *pfrom, const char *cto, const char *pto, bool ignore_self, bool remove);
-+int cg_migrate_recursive_fallback(const char *cfrom, const char *pfrom, const char *cto, const char *pto, bool ignore_self, bool rem);
- 
- int cg_split_spec(const char *spec, char **controller, char **path);
- int cg_join_spec(const char *controller, const char *path, char **spec);
-@@ -81,6 +82,7 @@ int cg_delete(const char *controller, const char *path);
- 
- int cg_create(const char *controller, const char *path);
- int cg_attach(const char *controller, const char *path, pid_t pid);
-+int cg_attach_fallback(const char *controller, const char *path, pid_t pid);
- int cg_create_and_attach(const char *controller, const char *path, pid_t pid);
- 
- int cg_set_attribute(const char *controller, const char *path, const char *attribute, const char *value);
-@@ -126,10 +128,10 @@ bool cg_controller_is_valid(const char *p, bool allow_named);
- 
- int cg_slice_to_path(const char *unit, char **ret);
- 
--int cg_create_with_mask(CGroupControllerMask mask, const char *path);
--int cg_attach_with_mask(CGroupControllerMask mask, const char *path, pid_t pid);
--int cg_attach_many_with_mask(CGroupControllerMask mask, const char *path, Set* pids);
--int cg_migrate_with_mask(CGroupControllerMask mask, const char *from, const char *to);
--int cg_trim_with_mask(CGroupControllerMask mask, const char *path, bool delete_root);
-+int cg_create_everywhere(CGroupControllerMask supported, CGroupControllerMask mask, const char *path);
-+int cg_attach_everywhere(CGroupControllerMask supported, const char *path, pid_t pid);
-+int cg_attach_many_everywhere(CGroupControllerMask supported, const char *path, Set* pids);
-+int cg_migrate_everywhere(CGroupControllerMask supported, const char *from, const char *to);
-+int cg_trim_everywhere(CGroupControllerMask supported, const char *path, bool delete_root);
- 
- CGroupControllerMask cg_mask_supported(void);
diff --git a/SOURCES/0042-core-socket-fix-SO_REUSEPORT.patch b/SOURCES/0042-core-socket-fix-SO_REUSEPORT.patch
new file mode 100644
index 0000000..2f8c231
--- /dev/null
+++ b/SOURCES/0042-core-socket-fix-SO_REUSEPORT.patch
@@ -0,0 +1,35 @@
+From 9dda034962ef7d339f07e5cdeae87f34db970431 Mon Sep 17 00:00:00 2001
+From: Shawn Landden <shawn@churchofgit.com>
+Date: Sat, 16 Nov 2013 13:18:13 -0800
+Subject: [PATCH] core/socket: fix SO_REUSEPORT
+
+---
+ src/core/load-fragment-gperf.gperf.m4 | 1 +
+ src/core/socket.c                     | 2 +-
+ 2 files changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/src/core/load-fragment-gperf.gperf.m4 b/src/core/load-fragment-gperf.gperf.m4
+index 31fb7bc..d65bcc1 100644
+--- a/src/core/load-fragment-gperf.gperf.m4
++++ b/src/core/load-fragment-gperf.gperf.m4
+@@ -211,6 +211,7 @@ Socket.Broadcast,                config_parse_bool,                  0,
+ Socket.PassCredentials,          config_parse_bool,                  0,                             offsetof(Socket, pass_cred)
+ Socket.PassSecurity,             config_parse_bool,                  0,                             offsetof(Socket, pass_sec)
+ Socket.TCPCongestion,            config_parse_string,                0,                             offsetof(Socket, tcp_congestion)
++Socket.ReusePort,                config_parse_bool,                  0,                             offsetof(Socket, reuseport)
+ Socket.MessageQueueMaxMessages,  config_parse_long,                  0,                             offsetof(Socket, mq_maxmsg)
+ Socket.MessageQueueMessageSize,  config_parse_long,                  0,                             offsetof(Socket, mq_msgsize)
+ Socket.Service,                  config_parse_socket_service,        0,                             0
+diff --git a/src/core/socket.c b/src/core/socket.c
+index d368f7e..e673f38 100644
+--- a/src/core/socket.c
++++ b/src/core/socket.c
+@@ -770,7 +770,7 @@ static void socket_apply_socket_options(Socket *s, int fd) {
+ 
+         if (s->reuseport) {
+                 int b = s->reuseport;
+-                if (setsockopt(fd, SOL_SOCKET, SO_REUSEPORT, &b, sizeof(b)))
++                if (setsockopt(fd, SOL_SOCKET, SO_REUSEPORT, &b, sizeof(b)) < 0)
+                         log_warning_unit(UNIT(s)->id, "SO_REUSEPORT failed: %m");
+         }
+ 
diff --git a/SOURCES/0043-activate-fix-crash-when-s-is-passed.patch b/SOURCES/0043-activate-fix-crash-when-s-is-passed.patch
new file mode 100644
index 0000000..b4519f7
--- /dev/null
+++ b/SOURCES/0043-activate-fix-crash-when-s-is-passed.patch
@@ -0,0 +1,23 @@
+From 6a4da7d980bf91207d07e2a7b1c4d1d2fe59e3e8 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Mantas=20Mikul=C4=97nas?= <grawity@gmail.com>
+Date: Wed, 13 Nov 2013 13:36:16 +0200
+Subject: [PATCH] activate: fix crash when -s is passed
+
+getopt_long() was told to accept -s which was never implemented.
+---
+ src/activate/activate.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/activate/activate.c b/src/activate/activate.c
+index 83d25b1..535b330 100644
+--- a/src/activate/activate.c
++++ b/src/activate/activate.c
+@@ -344,7 +344,7 @@ static int parse_argv(int argc, char *argv[]) {
+         assert(argc >= 0);
+         assert(argv);
+ 
+-        while ((c = getopt_long(argc, argv, "+hl:saE:", options, NULL)) >= 0)
++        while ((c = getopt_long(argc, argv, "+hl:aE:", options, NULL)) >= 0)
+                 switch(c) {
+                 case 'h':
+                         help();
diff --git a/SOURCES/0043-core-rework-how-we-match-mount-units-against-each-ot.patch b/SOURCES/0043-core-rework-how-we-match-mount-units-against-each-ot.patch
deleted file mode 100644
index 6376705..0000000
--- a/SOURCES/0043-core-rework-how-we-match-mount-units-against-each-ot.patch
+++ /dev/null
@@ -1,1156 +0,0 @@
-From f0af1f20acc04b744f4ce1ed4b028e84576541d7 Mon Sep 17 00:00:00 2001
-From: Lennart Poettering <lennart@poettering.net>
-Date: Thu, 26 Sep 2013 20:14:24 +0200
-Subject: [PATCH] core: rework how we match mount units against each other
-
-Previously to automatically create dependencies between mount units we
-matched every mount unit agains all others resulting in O(n^2)
-complexity. On setups with large amounts of mount units this might make
-things slow.
-
-This change replaces the matching code to use a hashtable that is keyed
-by a path prefix, and points to a set of units that require that path to
-be around. When a new mount unit is installed it is hence sufficient to
-simply look up this set of units via its own file system paths to know
-which units to order after itself.
-
-This patch also changes all unit types to only create automatic mount
-dependencies via the RequiresMountsFor= logic, and this is exposed to
-the outside to make things more transparent.
-
-With this change we still have some O(n) complexities in place when
-handling mounts, but that's currently unavoidable due to kernel APIs,
-and still substantially better than O(n^2) as before.
-
-https://bugs.freedesktop.org/show_bug.cgi?id=69740
----
- src/core/automount.c                  |  33 +----
- src/core/automount.h                  |   2 -
- src/core/load-fragment-gperf.gperf.m4 |   2 +-
- src/core/load-fragment.c              |  47 ++++---
- src/core/manager.c                    |  44 +++++-
- src/core/manager.h                    |  12 +-
- src/core/mount.c                      | 255 +++++++++-------------------------
- src/core/path.c                       |  32 +----
- src/core/path.h                       |   4 -
- src/core/socket.c                     |  49 ++-----
- src/core/socket.h                     |   4 -
- src/core/swap.c                       |  40 +-----
- src/core/swap.h                       |   2 -
- src/core/unit.c                       | 162 +++++++++++++++++----
- src/core/unit.h                       |   6 +-
- src/shared/socket-util.c              |   8 +-
- src/shared/socket-util.h              |   2 +-
- 17 files changed, 309 insertions(+), 395 deletions(-)
-
-diff --git a/src/core/automount.c b/src/core/automount.c
-index 6762392..d1379e0 100644
---- a/src/core/automount.c
-+++ b/src/core/automount.c
-@@ -117,42 +117,17 @@ static void automount_done(Unit *u) {
-         a->tokens = NULL;
- }
- 
--int automount_add_one_mount_link(Automount *a, Mount *m) {
-+static int automount_add_mount_links(Automount *a) {
-+        _cleanup_free_ char *parent = NULL;
-         int r;
- 
-         assert(a);
--        assert(m);
--
--        if (UNIT(a)->load_state != UNIT_LOADED ||
--            UNIT(m)->load_state != UNIT_LOADED)
--                return 0;
--
--        if (!path_startswith(a->where, m->where))
--                return 0;
- 
--        if (path_equal(a->where, m->where))
--                return 0;
--
--        r = unit_add_two_dependencies(UNIT(a), UNIT_AFTER, UNIT_REQUIRES, UNIT(m), true);
-+        r = path_get_parent(a->where, &parent);
-         if (r < 0)
-                 return r;
- 
--        return 0;
--}
--
--static int automount_add_mount_links(Automount *a) {
--        Unit *other;
--        int r;
--
--        assert(a);
--
--        LIST_FOREACH(units_by_type, other, UNIT(a)->manager->units_by_type[UNIT_MOUNT]) {
--                r = automount_add_one_mount_link(a, MOUNT(other));
--                if (r < 0)
--                        return r;
--        }
--
--        return 0;
-+        return unit_require_mounts_for(UNIT(a), parent);
- }
- 
- static int automount_add_default_dependencies(Automount *a) {
-diff --git a/src/core/automount.h b/src/core/automount.h
-index 0c6b8a7..a7a25d3 100644
---- a/src/core/automount.h
-+++ b/src/core/automount.h
-@@ -62,8 +62,6 @@ extern const UnitVTable automount_vtable;
- 
- int automount_send_ready(Automount *a, int status);
- 
--int automount_add_one_mount_link(Automount *a, Mount *m);
--
- const char* automount_state_to_string(AutomountState i) _const_;
- AutomountState automount_state_from_string(const char *s) _pure_;
- 
-diff --git a/src/core/load-fragment-gperf.gperf.m4 b/src/core/load-fragment-gperf.gperf.m4
-index 33c6880..3f064a9 100644
---- a/src/core/load-fragment-gperf.gperf.m4
-+++ b/src/core/load-fragment-gperf.gperf.m4
-@@ -117,7 +117,7 @@ Unit.PropagateReloadTo,          config_parse_unit_deps,             UNIT_PROPAG
- Unit.ReloadPropagatedFrom,       config_parse_unit_deps,             UNIT_RELOAD_PROPAGATED_FROM,   0
- Unit.PropagateReloadFrom,        config_parse_unit_deps,             UNIT_RELOAD_PROPAGATED_FROM,   0
- Unit.PartOf,                     config_parse_unit_deps,             UNIT_PART_OF,                  0
--Unit.RequiresMountsFor,          config_parse_unit_requires_mounts_for, 0,                          offsetof(Unit, requires_mounts_for)
-+Unit.RequiresMountsFor,          config_parse_unit_requires_mounts_for, 0,                          0
- Unit.StopWhenUnneeded,           config_parse_bool,                  0,                             offsetof(Unit, stop_when_unneeded)
- Unit.RefuseManualStart,          config_parse_bool,                  0,                             offsetof(Unit, refuse_manual_start)
- Unit.RefuseManualStop,           config_parse_bool,                  0,                             offsetof(Unit, refuse_manual_stop)
-diff --git a/src/core/load-fragment.c b/src/core/load-fragment.c
-index f4a268c..ed8602f 100644
---- a/src/core/load-fragment.c
-+++ b/src/core/load-fragment.c
-@@ -1742,33 +1742,48 @@ int config_parse_unit_condition_null(const char *unit,
- DEFINE_CONFIG_PARSE_ENUM(config_parse_notify_access, notify_access, NotifyAccess, "Failed to parse notify access specifier");
- DEFINE_CONFIG_PARSE_ENUM(config_parse_start_limit_action, start_limit_action, StartLimitAction, "Failed to parse start limit action specifier");
- 
--int config_parse_unit_requires_mounts_for(const char *unit,
--                                          const char *filename,
--                                          unsigned line,
--                                          const char *section,
--                                          const char *lvalue,
--                                          int ltype,
--                                          const char *rvalue,
--                                          void *data,
--                                          void *userdata) {
-+int config_parse_unit_requires_mounts_for(
-+                const char *unit,
-+                const char *filename,
-+                unsigned line,
-+                const char *section,
-+                const char *lvalue,
-+                int ltype,
-+                const char *rvalue,
-+                void *data,
-+                void *userdata) {
- 
-         Unit *u = userdata;
-+        char *state;
-+        size_t l;
-+        char *w;
-         int r;
--        bool empty_before;
- 
-         assert(filename);
-         assert(lvalue);
-         assert(rvalue);
-         assert(data);
- 
--        empty_before = !u->requires_mounts_for;
-+        FOREACH_WORD_QUOTED(w, l, rvalue, state) {
-+                _cleanup_free_ char *n;
-+
-+                n = strndup(w, l);
-+                if (!n)
-+                        return log_oom();
- 
--        r = config_parse_path_strv(unit, filename, line, section, lvalue, ltype,
--                                   rvalue, data, userdata);
-+                if (!utf8_is_valid(n)) {
-+                        log_syntax(unit, LOG_ERR, filename, line, EINVAL,
-+                                   "Path is not UTF-8 clean, ignoring assignment: %s", rvalue);
-+                        continue;
-+                }
- 
--        /* Make it easy to find units with requires_mounts set */
--        if (empty_before && u->requires_mounts_for)
--                LIST_PREPEND(Unit, has_requires_mounts_for, u->manager->has_requires_mounts_for, u);
-+                r = unit_require_mounts_for(u, n);
-+                if (r < 0) {
-+                        log_syntax(unit, LOG_ERR, filename, line, r,
-+                                   "Failed to add required mount for, ignoring: %s", rvalue);
-+                        continue;
-+                }
-+        }
- 
-         return r;
- }
-diff --git a/src/core/manager.c b/src/core/manager.c
-index 669af15..dadbedd 100644
---- a/src/core/manager.c
-+++ b/src/core/manager.c
-@@ -771,6 +771,9 @@ void manager_free(Manager *m) {
-         for (i = 0; i < RLIMIT_NLIMITS; i++)
-                 free(m->rlimit[i]);
- 
-+        assert(hashmap_isempty(m->units_requiring_mounts_for));
-+        hashmap_free(m->units_requiring_mounts_for);
-+
-         free(m);
- }
- 
-@@ -783,9 +786,11 @@ int manager_enumerate(Manager *m) {
-         /* Let's ask every type to load all units from disk/kernel
-          * that it might know */
-         for (c = 0; c < _UNIT_TYPE_MAX; c++)
--                if (unit_vtable[c]->enumerate)
--                        if ((q = unit_vtable[c]->enumerate(m)) < 0)
-+                if (unit_vtable[c]->enumerate) {
-+                        q = unit_vtable[c]->enumerate(m);
-+                        if (q < 0)
-                                 r = q;
-+                }
- 
-         manager_dispatch_load_queue(m);
-         return r;
-@@ -2765,6 +2770,41 @@ void manager_status_printf(Manager *m, bool ephemeral, const char *status, const
-         va_end(ap);
- }
- 
-+int manager_get_unit_by_path(Manager *m, const char *path, const char *suffix, Unit **_found) {
-+        _cleanup_free_ char *p = NULL;
-+        Unit *found;
-+
-+        assert(m);
-+        assert(path);
-+        assert(suffix);
-+        assert(_found);
-+
-+        p = unit_name_from_path(path, suffix);
-+        if (!p)
-+                return -ENOMEM;
-+
-+        found = manager_get_unit(m, p);
-+        if (!found) {
-+                *_found = NULL;
-+                return 0;
-+        }
-+
-+        *_found = found;
-+        return 1;
-+}
-+
-+Set *manager_get_units_requiring_mounts_for(Manager *m, const char *path) {
-+        char p[strlen(path)+1];
-+
-+        assert(m);
-+        assert(path);
-+
-+        strcpy(p, path);
-+        path_kill_slashes(p);
-+
-+        return hashmap_get(m->units_requiring_mounts_for, streq(p, "/") ? "" : p);
-+}
-+
- void watch_init(Watch *w) {
-         assert(w);
- 
-diff --git a/src/core/manager.h b/src/core/manager.h
-index 3969553..a3049b5 100644
---- a/src/core/manager.h
-+++ b/src/core/manager.h
-@@ -103,9 +103,6 @@ struct Manager {
-          * type we maintain a per type linked list */
-         LIST_HEAD(Unit, units_by_type[_UNIT_TYPE_MAX]);
- 
--        /* To optimize iteration of units that have requires_mounts_for set */
--        LIST_HEAD(Unit, has_requires_mounts_for);
--
-         /* Units that need to be loaded */
-         LIST_HEAD(Unit, load_queue); /* this is actually more a stack than a queue, but uh. */
- 
-@@ -251,6 +248,11 @@ struct Manager {
- 
-         char *switch_root;
-         char *switch_root_init;
-+
-+        /* This maps all possible path prefixes to the units needing
-+         * them. It's a hashmap with a path string as key and a Set as
-+         * value where Unit objects are contained. */
-+        Hashmap *units_requiring_mounts_for;
- };
- 
- int manager_new(SystemdRunningAs running_as, bool reexecuting, Manager **m);
-@@ -263,6 +265,8 @@ int manager_startup(Manager *m, FILE *serialization, FDSet *fds);
- Job *manager_get_job(Manager *m, uint32_t id);
- Unit *manager_get_unit(Manager *m, const char *name);
- 
-+int manager_get_unit_by_path(Manager *m, const char *path, const char *suffix, Unit **_found);
-+
- int manager_get_job_from_dbus_path(Manager *m, const char *s, Job **_j);
- 
- int manager_load_unit_prepare(Manager *m, const char *name, const char *path, DBusError *e, Unit **_ret);
-@@ -316,4 +320,6 @@ void manager_recheck_journal(Manager *m);
- void manager_set_show_status(Manager *m, bool b);
- void manager_status_printf(Manager *m, bool ephemeral, const char *status, const char *format, ...) _printf_attr_(4,5);
- 
-+Set *manager_get_units_requiring_mounts_for(Manager *m, const char *path);
-+
- void watch_init(Watch *w);
-diff --git a/src/core/mount.c b/src/core/mount.c
-index 78c5c1e..3d46557 100644
---- a/src/core/mount.c
-+++ b/src/core/mount.c
-@@ -157,138 +157,58 @@ _pure_ static MountParameters* get_mount_parameters(Mount *m) {
- }
- 
- static int mount_add_mount_links(Mount *m) {
--        Unit *other;
--        int r;
-+        _cleanup_free_ char *parent = NULL;
-         MountParameters *pm;
--
--        assert(m);
--
--        pm = get_mount_parameters_fragment(m);
--
--        /* Adds in links to other mount points that might lie below or
--         * above us in the hierarchy */
--
--        LIST_FOREACH(units_by_type, other, UNIT(m)->manager->units_by_type[UNIT_MOUNT]) {
--                Mount *n = MOUNT(other);
--                MountParameters *pn;
--
--                if (n == m)
--                        continue;
--
--                if (UNIT(n)->load_state != UNIT_LOADED)
--                        continue;
--
--                pn = get_mount_parameters_fragment(n);
--
--                if (path_startswith(m->where, n->where)) {
--
--                        if ((r = unit_add_dependency(UNIT(m), UNIT_AFTER, UNIT(n), true)) < 0)
--                                return r;
--
--                        if (pn)
--                                if ((r = unit_add_dependency(UNIT(m), UNIT_REQUIRES, UNIT(n), true)) < 0)
--                                        return r;
--
--                } else if (path_startswith(n->where, m->where)) {
--
--                        if ((r = unit_add_dependency(UNIT(n), UNIT_AFTER, UNIT(m), true)) < 0)
--                                return r;
--
--                        if (pm)
--                                if ((r = unit_add_dependency(UNIT(n), UNIT_REQUIRES, UNIT(m), true)) < 0)
--                                        return r;
--
--                } else if (pm && pm->what && path_startswith(pm->what, n->where)) {
--
--                        if ((r = unit_add_dependency(UNIT(m), UNIT_AFTER, UNIT(n), true)) < 0)
--                                return r;
--
--                        if ((r = unit_add_dependency(UNIT(m), UNIT_REQUIRES, UNIT(n), true)) < 0)
--                                return r;
--
--                } else if (pn && pn->what && path_startswith(pn->what, m->where)) {
--
--                        if ((r = unit_add_dependency(UNIT(n), UNIT_AFTER, UNIT(m), true)) < 0)
--                                return r;
--
--                        if ((r = unit_add_dependency(UNIT(n), UNIT_REQUIRES, UNIT(m), true)) < 0)
--                                return r;
--                }
--        }
--
--        return 0;
--}
--
--static int mount_add_swap_links(Mount *m) {
-         Unit *other;
-+        Iterator i;
-+        Set *s;
-         int r;
- 
-         assert(m);
- 
--        LIST_FOREACH(units_by_type, other, UNIT(m)->manager->units_by_type[UNIT_SWAP]) {
--                r = swap_add_one_mount_link(SWAP(other), m);
-+        if (!path_equal(m->where, "/")) {
-+                /* Adds in links to other mount points that might lie further
-+                 * up in the hierarchy */
-+                r = path_get_parent(m->where, &parent);
-                 if (r < 0)
-                         return r;
--        }
- 
--        return 0;
--}
--
--static int mount_add_path_links(Mount *m) {
--        Unit *other;
--        int r;
--
--        assert(m);
--
--        LIST_FOREACH(units_by_type, other, UNIT(m)->manager->units_by_type[UNIT_PATH]) {
--                r = path_add_one_mount_link(PATH(other), m);
-+                r = unit_require_mounts_for(UNIT(m), parent);
-                 if (r < 0)
-                         return r;
-         }
- 
--        return 0;
--}
--
--static int mount_add_automount_links(Mount *m) {
--        Unit *other;
--        int r;
--
--        assert(m);
--
--        LIST_FOREACH(units_by_type, other, UNIT(m)->manager->units_by_type[UNIT_AUTOMOUNT]) {
--                r = automount_add_one_mount_link(AUTOMOUNT(other), m);
-+        /* Adds in links to other mount points that might be needed
-+         * for the source path (if this is a bind mount) to be
-+         * available. */
-+        pm = get_mount_parameters_fragment(m);
-+        if (pm && path_is_absolute(pm->what)) {
-+                r = unit_require_mounts_for(UNIT(m), pm->what);
-                 if (r < 0)
-                         return r;
-         }
- 
--        return 0;
--}
-+        /* Adds in links to other units that use this path or paths
-+         * further down in the hierarchy */
-+        s = manager_get_units_requiring_mounts_for(UNIT(m)->manager, m->where);
-+        SET_FOREACH(other, s, i) {
- 
--static int mount_add_socket_links(Mount *m) {
--        Unit *other;
--        int r;
-+                if (other->load_state != UNIT_LOADED)
-+                        continue;
- 
--        assert(m);
-+                if (other == UNIT(m))
-+                        continue;
- 
--        LIST_FOREACH(units_by_type, other, UNIT(m)->manager->units_by_type[UNIT_SOCKET]) {
--                r = socket_add_one_mount_link(SOCKET(other), m);
-+                r = unit_add_dependency(other, UNIT_AFTER, UNIT(m), true);
-                 if (r < 0)
-                         return r;
--        }
- 
--        return 0;
--}
--
--static int mount_add_requires_mounts_links(Mount *m) {
--        Unit *other;
--        int r;
--
--        assert(m);
--
--        LIST_FOREACH(has_requires_mounts_for, other, UNIT(m)->manager->has_requires_mounts_for) {
--                r = unit_add_one_mount_link(other, m);
--                if (r < 0)
--                        return r;
-+                if (UNIT(m)->fragment_path) {
-+                        /* If we have fragment configuration, then make this dependency required */
-+                        r = unit_add_dependency(other, UNIT_REQUIRES, UNIT(m), true);
-+                        if (r < 0)
-+                                return r;
-+                }
-         }
- 
-         return 0;
-@@ -567,8 +487,9 @@ static int mount_fix_timeouts(Mount *m) {
- }
- 
- static int mount_verify(Mount *m) {
-+        _cleanup_free_ char *e = NULL;
-         bool b;
--        char *e;
-+
-         assert(m);
- 
-         if (UNIT(m)->load_state != UNIT_LOADED)
-@@ -577,12 +498,11 @@ static int mount_verify(Mount *m) {
-         if (!m->from_fragment && !m->from_proc_self_mountinfo)
-                 return -ENOENT;
- 
--        if (!(e = unit_name_from_path(m->where, ".mount")))
-+        e = unit_name_from_path(m->where, ".mount");
-+        if (!e)
-                 return -ENOMEM;
- 
-         b = unit_has_name(UNIT(m), e);
--        free(e);
--
-         if (!b) {
-                 log_error_unit(UNIT(m)->id,
-                                "%s's Where setting doesn't match unit name. Refusing.",
-@@ -646,26 +566,6 @@ static int mount_add_extras(Mount *m) {
-         if (r < 0)
-                 return r;
- 
--        r = mount_add_socket_links(m);
--        if (r < 0)
--                return r;
--
--        r = mount_add_swap_links(m);
--        if (r < 0)
--                return r;
--
--        r = mount_add_path_links(m);
--        if (r < 0)
--                return r;
--
--        r = mount_add_requires_mounts_links(m);
--        if (r < 0)
--                return r;
--
--        r = mount_add_automount_links(m);
--        if (r < 0)
--                return r;
--
-         r = mount_add_quota_links(m);
-         if (r < 0)
-                 return r;
-@@ -1650,79 +1550,56 @@ fail:
- static int mount_load_proc_self_mountinfo(Manager *m, bool set_flags) {
-         int r = 0;
-         unsigned i;
--        char *device, *path, *options, *options2, *fstype, *d, *p, *o;
- 
-         assert(m);
- 
-         rewind(m->proc_self_mountinfo);
- 
-         for (i = 1;; i++) {
-+                _cleanup_free_ char *device = NULL, *path = NULL, *options = NULL, *options2 = NULL, *fstype = NULL, *d = NULL, *p = NULL, *o = NULL;
-                 int k;
- 
--                device = path = options = options2 = fstype = d = p = o = NULL;
--
--                if ((k = fscanf(m->proc_self_mountinfo,
--                                "%*s "       /* (1) mount id */
--                                "%*s "       /* (2) parent id */
--                                "%*s "       /* (3) major:minor */
--                                "%*s "       /* (4) root */
--                                "%ms "       /* (5) mount point */
--                                "%ms"        /* (6) mount options */
--                                "%*[^-]"     /* (7) optional fields */
--                                "- "         /* (8) separator */
--                                "%ms "       /* (9) file system type */
--                                "%ms"        /* (10) mount source */
--                                "%ms"        /* (11) mount options 2 */
--                                "%*[^\n]",   /* some rubbish at the end */
--                                &path,
--                                &options,
--                                &fstype,
--                                &device,
--                                &options2)) != 5) {
--
--                        if (k == EOF)
--                                break;
--
-+                k = fscanf(m->proc_self_mountinfo,
-+                           "%*s "       /* (1) mount id */
-+                           "%*s "       /* (2) parent id */
-+                           "%*s "       /* (3) major:minor */
-+                           "%*s "       /* (4) root */
-+                           "%ms "       /* (5) mount point */
-+                           "%ms"        /* (6) mount options */
-+                           "%*[^-]"     /* (7) optional fields */
-+                           "- "         /* (8) separator */
-+                           "%ms "       /* (9) file system type */
-+                           "%ms"        /* (10) mount source */
-+                           "%ms"        /* (11) mount options 2 */
-+                           "%*[^\n]",   /* some rubbish at the end */
-+                           &path,
-+                           &options,
-+                           &fstype,
-+                           &device,
-+                           &options2);
-+
-+                if (k == EOF)
-+                        break;
-+
-+                if (k != 5) {
-                         log_warning("Failed to parse /proc/self/mountinfo:%u.", i);
--                        goto clean_up;
-+                        continue;
-                 }
- 
-                 o = strjoin(options, ",", options2, NULL);
--                if (!o) {
--                        r = -ENOMEM;
--                        goto finish;
--                }
-+                if (!o)
-+                        return log_oom();
- 
--                if (!(d = cunescape(device)) ||
--                    !(p = cunescape(path))) {
--                        r = -ENOMEM;
--                        goto finish;
--                }
-+                d = cunescape(device);
-+                p = cunescape(path);
-+                if (!d || !p)
-+                        return log_oom();
- 
--                if ((k = mount_add_one(m, d, p, o, fstype, 0, set_flags)) < 0)
-+                k = mount_add_one(m, d, p, o, fstype, 0, set_flags);
-+                if (k < 0)
-                         r = k;
--
--clean_up:
--                free(device);
--                free(path);
--                free(options);
--                free(options2);
--                free(fstype);
--                free(d);
--                free(p);
--                free(o);
-         }
- 
--finish:
--        free(device);
--        free(path);
--        free(options);
--        free(options2);
--        free(fstype);
--        free(d);
--        free(p);
--        free(o);
--
-         return r;
- }
- 
-diff --git a/src/core/path.c b/src/core/path.c
-index 8a09deb..99e2fed 100644
---- a/src/core/path.c
-+++ b/src/core/path.c
-@@ -241,10 +241,6 @@ static bool path_spec_check_good(PathSpec *s, bool initial) {
-         return good;
- }
- 
--static bool path_spec_startswith(PathSpec *s, const char *what) {
--        return path_startswith(s->path, what);
--}
--
- static void path_spec_mkdir(PathSpec *s, mode_t mode) {
-         int r;
- 
-@@ -301,38 +297,14 @@ static void path_done(Unit *u) {
-         path_free_specs(p);
- }
- 
--int path_add_one_mount_link(Path *p, Mount *m) {
-+static int path_add_mount_links(Path *p) {
-         PathSpec *s;
-         int r;
- 
-         assert(p);
--        assert(m);
--
--        if (UNIT(p)->load_state != UNIT_LOADED ||
--            UNIT(m)->load_state != UNIT_LOADED)
--                return 0;
- 
-         LIST_FOREACH(spec, s, p->specs) {
--                if (!path_spec_startswith(s, m->where))
--                        continue;
--
--                r = unit_add_two_dependencies(UNIT(p), UNIT_AFTER, UNIT_REQUIRES,
--                                              UNIT(m), true);
--                if (r < 0)
--                        return r;
--        }
--
--        return 0;
--}
--
--static int path_add_mount_links(Path *p) {
--        Unit *other;
--        int r;
--
--        assert(p);
--
--        LIST_FOREACH(units_by_type, other, UNIT(p)->manager->units_by_type[UNIT_MOUNT]) {
--                r = path_add_one_mount_link(p, MOUNT(other));
-+                r = unit_require_mounts_for(UNIT(p), s->path);
-                 if (r < 0)
-                         return r;
-         }
-diff --git a/src/core/path.h b/src/core/path.h
-index 6adab58..dec3df7 100644
---- a/src/core/path.h
-+++ b/src/core/path.h
-@@ -90,10 +90,6 @@ struct Path {
-         PathResult result;
- };
- 
--/* Called from the mount code figure out if a mount is a dependency of
-- * any of the paths of this path object */
--int path_add_one_mount_link(Path *p, Mount *m);
--
- void path_free_specs(Path *p);
- 
- extern const UnitVTable path_vtable;
-diff --git a/src/core/socket.c b/src/core/socket.c
-index 25c2a51..778f8c8 100644
---- a/src/core/socket.c
-+++ b/src/core/socket.c
-@@ -258,53 +258,24 @@ static int socket_verify(Socket *s) {
-         return 0;
- }
- 
--static bool socket_needs_mount(Socket *s, const char *prefix) {
-+static int socket_add_mount_links(Socket *s) {
-         SocketPort *p;
--
--        assert(s);
--
--        LIST_FOREACH(port, p, s->ports) {
--
--                if (p->type == SOCKET_SOCKET) {
--                        if (socket_address_needs_mount(&p->address, prefix))
--                                return true;
--                } else if (p->type == SOCKET_FIFO || p->type == SOCKET_SPECIAL) {
--                        if (path_startswith(p->path, prefix))
--                                return true;
--                }
--        }
--
--        return false;
--}
--
--int socket_add_one_mount_link(Socket *s, Mount *m) {
-         int r;
- 
-         assert(s);
--        assert(m);
- 
--        if (UNIT(s)->load_state != UNIT_LOADED ||
--            UNIT(m)->load_state != UNIT_LOADED)
--                return 0;
--
--        if (!socket_needs_mount(s, m->where))
--                return 0;
--
--        r = unit_add_two_dependencies(UNIT(s), UNIT_AFTER, UNIT_REQUIRES, UNIT(m), true);
--        if (r < 0)
--                return r;
--
--        return 0;
--}
-+        LIST_FOREACH(port, p, s->ports) {
-+                const char *path = NULL;
- 
--static int socket_add_mount_links(Socket *s) {
--        Unit *other;
--        int r;
-+                if (p->type == SOCKET_SOCKET)
-+                        path = socket_address_get_path(&p->address);
-+                else if (p->type == SOCKET_FIFO || p->type == SOCKET_SPECIAL)
-+                        path = p->path;
- 
--        assert(s);
-+                if (!path)
-+                        continue;
- 
--        LIST_FOREACH(units_by_type, other, UNIT(s)->manager->units_by_type[UNIT_MOUNT]) {
--                r = socket_add_one_mount_link(s, MOUNT(other));
-+                r = unit_require_mounts_for(UNIT(s), path);
-                 if (r < 0)
-                         return r;
-         }
-diff --git a/src/core/socket.h b/src/core/socket.h
-index 5733322..3d7eadc 100644
---- a/src/core/socket.h
-+++ b/src/core/socket.h
-@@ -156,10 +156,6 @@ struct Socket {
- /* Called from the service code when collecting fds */
- int socket_collect_fds(Socket *s, int **fds, unsigned *n_fds);
- 
--/* Called from the mount code figure out if a mount is a dependency of
-- * any of the sockets of this socket */
--int socket_add_one_mount_link(Socket *s, Mount *m);
--
- /* Called from the service code when a per-connection service ended */
- void socket_connection_unref(Socket *s);
- 
-diff --git a/src/core/swap.c b/src/core/swap.c
-index d225485..6f86a86 100644
---- a/src/core/swap.c
-+++ b/src/core/swap.c
-@@ -137,42 +137,6 @@ static void swap_done(Unit *u) {
-         unit_unwatch_timer(u, &s->timer_watch);
- }
- 
--int swap_add_one_mount_link(Swap *s, Mount *m) {
--         int r;
--
--        assert(s);
--        assert(m);
--
--        if (UNIT(s)->load_state != UNIT_LOADED ||
--            UNIT(m)->load_state != UNIT_LOADED)
--                return 0;
--
--        if (is_device_path(s->what))
--                return 0;
--
--        if (!path_startswith(s->what, m->where))
--                return 0;
--
--        r = unit_add_two_dependencies(UNIT(s), UNIT_AFTER, UNIT_REQUIRES, UNIT(m), true);
--        if (r < 0)
--                return r;
--
--        return 0;
--}
--
--static int swap_add_mount_links(Swap *s) {
--        Unit *other;
--        int r;
--
--        assert(s);
--
--        LIST_FOREACH(units_by_type, other, UNIT(s)->manager->units_by_type[UNIT_MOUNT])
--                if ((r = swap_add_one_mount_link(s, MOUNT(other))) < 0)
--                        return r;
--
--        return 0;
--}
--
- static int swap_add_device_links(Swap *s) {
-         SwapParameters *p;
- 
-@@ -300,11 +264,11 @@ static int swap_load(Unit *u) {
-                         if ((r = unit_set_description(u, s->what)) < 0)
-                                 return r;
- 
--                r = swap_add_device_links(s);
-+                r = unit_require_mounts_for(UNIT(s), s->what);
-                 if (r < 0)
-                         return r;
- 
--                r = swap_add_mount_links(s);
-+                r = swap_add_device_links(s);
-                 if (r < 0)
-                         return r;
- 
-diff --git a/src/core/swap.h b/src/core/swap.h
-index 7e48c0e..dd89535 100644
---- a/src/core/swap.h
-+++ b/src/core/swap.h
-@@ -107,8 +107,6 @@ struct Swap {
- 
- extern const UnitVTable swap_vtable;
- 
--int swap_add_one_mount_link(Swap *s, Mount *m);
--
- int swap_dispatch_reload(Manager *m);
- int swap_fd_event(Manager *m, int events);
- 
-diff --git a/src/core/unit.c b/src/core/unit.c
-index ab313b9..4b97710 100644
---- a/src/core/unit.c
-+++ b/src/core/unit.c
-@@ -374,6 +374,34 @@ static void unit_remove_transient(Unit *u) {
-         }
- }
- 
-+static void unit_free_requires_mounts_for(Unit *u) {
-+        char **j;
-+
-+        STRV_FOREACH(j, u->requires_mounts_for) {
-+                char s[strlen(*j) + 1];
-+
-+                PATH_FOREACH_PREFIX_MORE(s, *j) {
-+                        char *y;
-+                        Set *x;
-+
-+                        x = hashmap_get2(u->manager->units_requiring_mounts_for, s, (void**) &y);
-+                        if (!x)
-+                                continue;
-+
-+                        set_remove(x, u);
-+
-+                        if (set_isempty(x)) {
-+                                hashmap_remove(u->manager->units_requiring_mounts_for, y);
-+                                free(y);
-+                                set_free(x);
-+                        }
-+                }
-+        }
-+
-+        strv_free(u->requires_mounts_for);
-+        u->requires_mounts_for = NULL;
-+}
-+
- void unit_free(Unit *u) {
-         UnitDependency d;
-         Iterator i;
-@@ -390,6 +418,8 @@ void unit_free(Unit *u) {
-                 if (UNIT_VTABLE(u)->done)
-                         UNIT_VTABLE(u)->done(u);
- 
-+        unit_free_requires_mounts_for(u);
-+
-         SET_FOREACH(t, u->names, i)
-                 hashmap_remove_value(u->manager->units, t, u);
- 
-@@ -408,11 +438,6 @@ void unit_free(Unit *u) {
-         for (d = 0; d < _UNIT_DEPENDENCY_MAX; d++)
-                 bidi_set_free(u, u->dependencies[d]);
- 
--        if (u->requires_mounts_for) {
--                LIST_REMOVE(Unit, has_requires_mounts_for, u->manager->has_requires_mounts_for, u);
--                strv_free(u->requires_mounts_for);
--        }
--
-         if (u->type != _UNIT_TYPE_INVALID)
-                 LIST_REMOVE(Unit, units_by_type, u->manager->units_by_type[u->type], u);
- 
-@@ -2659,40 +2684,39 @@ void unit_ref_unset(UnitRef *ref) {
-         ref->unit = NULL;
- }
- 
--int unit_add_one_mount_link(Unit *u, Mount *m) {
-+int unit_add_mount_links(Unit *u) {
-         char **i;
-+        int r;
- 
-         assert(u);
--        assert(m);
--
--        if (u->load_state != UNIT_LOADED ||
--            UNIT(m)->load_state != UNIT_LOADED)
--                return 0;
- 
-         STRV_FOREACH(i, u->requires_mounts_for) {
-+                char prefix[strlen(*i) + 1];
- 
--                if (UNIT(m) == u)
--                        continue;
-+                PATH_FOREACH_PREFIX_MORE(prefix, *i) {
-+                        Unit *m;
- 
--                if (!path_startswith(*i, m->where))
--                        continue;
--
--                return unit_add_two_dependencies(u, UNIT_AFTER, UNIT_REQUIRES, UNIT(m), true);
--        }
--
--        return 0;
--}
-+                        r = manager_get_unit_by_path(u->manager, prefix, ".mount", &m);
-+                        if (r < 0)
-+                                return r;
-+                        if (r == 0)
-+                                continue;
-+                        if (m == u)
-+                                continue;
- 
--int unit_add_mount_links(Unit *u) {
--        Unit *other;
--        int r;
-+                        if (m->load_state != UNIT_LOADED)
-+                                continue;
- 
--        assert(u);
-+                        r = unit_add_dependency(u, UNIT_AFTER, m, true);
-+                        if (r < 0)
-+                                return r;
- 
--        LIST_FOREACH(units_by_type, other, u->manager->units_by_type[UNIT_MOUNT]) {
--                r = unit_add_one_mount_link(u, MOUNT(other));
--                if (r < 0)
--                        return r;
-+                        if (m->fragment_path) {
-+                                r = unit_add_dependency(u, UNIT_REQUIRES, m, true);
-+                                if (r < 0)
-+                                        return r;
-+                        }
-+                }
-         }
- 
-         return 0;
-@@ -3012,6 +3036,86 @@ int unit_kill_context(
-         return wait_for_exit;
- }
- 
-+int unit_require_mounts_for(Unit *u, const char *path) {
-+        char prefix[strlen(path) + 1], *p;
-+        int r;
-+
-+        assert(u);
-+        assert(path);
-+
-+        /* Registers a unit for requiring a certain path and all its
-+         * prefixes. We keep a simple array of these paths in the
-+         * unit, since its usually short. However, we build a prefix
-+         * table for all possible prefixes so that new appearing mount
-+         * units can easily determine which units to make themselves a
-+         * dependency of. */
-+
-+        p = strdup(path);
-+        if (!p)
-+                return -ENOMEM;
-+
-+        path_kill_slashes(p);
-+
-+        if (!path_is_absolute(p)) {
-+                free(p);
-+                return -EINVAL;
-+        }
-+
-+        if (!path_is_safe(p)) {
-+                free(p);
-+                return -EPERM;
-+        }
-+
-+        if (strv_contains(u->requires_mounts_for, p)) {
-+                free(p);
-+                return 0;
-+        }
-+
-+        r = strv_push(&u->requires_mounts_for, p);
-+        if (r < 0) {
-+                free(p);
-+                return r;
-+        }
-+
-+        PATH_FOREACH_PREFIX_MORE(prefix, p) {
-+                Set *x;
-+
-+                x = hashmap_get(u->manager->units_requiring_mounts_for, prefix);
-+                if (!x) {
-+                        char *q;
-+
-+                        if (!u->manager->units_requiring_mounts_for) {
-+                                u->manager->units_requiring_mounts_for = hashmap_new(string_hash_func, string_compare_func);
-+                                if (!u->manager->units_requiring_mounts_for)
-+                                        return -ENOMEM;
-+                        }
-+
-+                        q = strdup(prefix);
-+                        if (!q)
-+                                return -ENOMEM;
-+
-+                        x = set_new(NULL, NULL);
-+                        if (!x) {
-+                                free(q);
-+                                return -ENOMEM;
-+                        }
-+
-+                        r = hashmap_put(u->manager->units_requiring_mounts_for, q, x);
-+                        if (r < 0) {
-+                                free(q);
-+                                set_free(x);
-+                                return r;
-+                        }
-+                }
-+
-+                r = set_put(x, u);
-+                if (r < 0)
-+                        return r;
-+        }
-+
-+        return 0;
-+}
-+
- static const char* const unit_active_state_table[_UNIT_ACTIVE_STATE_MAX] = {
-         [UNIT_ACTIVE] = "active",
-         [UNIT_RELOADING] = "reloading",
-diff --git a/src/core/unit.h b/src/core/unit.h
-index 0caea18..6dd750f 100644
---- a/src/core/unit.h
-+++ b/src/core/unit.h
-@@ -173,7 +173,6 @@ struct Unit {
- 
-         /* Counterparts in the cgroup filesystem */
-         char *cgroup_path;
--        bool cgroup_realized;
-         CGroupControllerMask cgroup_mask;
- 
-         UnitRef slice;
-@@ -255,6 +254,8 @@ struct Unit {
-         bool no_gc:1;
- 
-         bool in_audit:1;
-+
-+        bool cgroup_realized:1;
- };
- 
- struct UnitStatusMessageFormats {
-@@ -589,7 +590,6 @@ void unit_ref_unset(UnitRef *ref);
- #define UNIT_DEREF(ref) ((ref).unit)
- #define UNIT_ISSET(ref) (!!(ref).unit)
- 
--int unit_add_one_mount_link(Unit *u, Mount *m);
- int unit_add_mount_links(Unit *u);
- 
- int unit_exec_context_defaults(Unit *u, ExecContext *c);
-@@ -609,6 +609,8 @@ int unit_kill_context(Unit *u, KillContext *c, bool sigkill, pid_t main_pid, pid
- 
- int unit_make_transient(Unit *u);
- 
-+int unit_require_mounts_for(Unit *u, const char *path);
-+
- const char *unit_active_state_to_string(UnitActiveState i) _const_;
- UnitActiveState unit_active_state_from_string(const char *s) _pure_;
- 
-diff --git a/src/shared/socket-util.c b/src/shared/socket-util.c
-index c583d3d..9224208 100644
---- a/src/shared/socket-util.c
-+++ b/src/shared/socket-util.c
-@@ -486,16 +486,16 @@ bool socket_address_is_netlink(const SocketAddress *a, const char *s) {
-         return socket_address_equal(a, &b);
- }
- 
--bool socket_address_needs_mount(const SocketAddress *a, const char *prefix) {
-+const char* socket_address_get_path(const SocketAddress *a) {
-         assert(a);
- 
-         if (socket_address_family(a) != AF_UNIX)
--                return false;
-+                return NULL;
- 
-         if (a->sockaddr.un.sun_path[0] == 0)
--                return false;
-+                return NULL;
- 
--        return path_startswith(a->sockaddr.un.sun_path, prefix);
-+        return a->sockaddr.un.sun_path;
- }
- 
- bool socket_ipv6_is_supported(void) {
-diff --git a/src/shared/socket-util.h b/src/shared/socket-util.h
-index 7829a33..e0b85ad 100644
---- a/src/shared/socket-util.h
-+++ b/src/shared/socket-util.h
-@@ -92,7 +92,7 @@ int make_socket_fd(const char* address, int flags);
- 
- bool socket_address_equal(const SocketAddress *a, const SocketAddress *b) _pure_;
- 
--bool socket_address_needs_mount(const SocketAddress *a, const char *prefix);
-+const char* socket_address_get_path(const SocketAddress *a);
- 
- const char* socket_address_bind_ipv6_only_to_string(SocketAddressBindIPv6Only b) _const_;
- SocketAddressBindIPv6Only socket_address_bind_ipv6_only_from_string(const char *s) _pure_;
diff --git a/SOURCES/0044-logind-never-consider-a-closing-session-relevant-for.patch b/SOURCES/0044-logind-never-consider-a-closing-session-relevant-for.patch
deleted file mode 100644
index 86aea72..0000000
--- a/SOURCES/0044-logind-never-consider-a-closing-session-relevant-for.patch
+++ /dev/null
@@ -1,23 +0,0 @@
-From 48797bdc98bb45dbd1aa7150bac5eff0acd31d58 Mon Sep 17 00:00:00 2001
-From: Lennart Poettering <lennart@poettering.net>
-Date: Thu, 26 Sep 2013 21:32:47 +0200
-Subject: [PATCH] logind: never consider a closing session relevant for PK
- checks
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1010215
----
- src/login/logind-dbus.c | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c
-index 77dda10..9f4c120 100644
---- a/src/login/logind-dbus.c
-+++ b/src/login/logind-dbus.c
-@@ -957,6 +957,7 @@ static int have_multiple_sessions(
-          * count, and non-login sessions do not count either. */
-         HASHMAP_FOREACH(session, m->sessions, i)
-                 if (session->class == SESSION_USER &&
-+                    !session->closing &&
-                     session->user->uid != uid)
-                         return true;
- 
diff --git a/SOURCES/0044-systemd-python-fix-booted-and-add-two-functions-to-d.patch b/SOURCES/0044-systemd-python-fix-booted-and-add-two-functions-to-d.patch
new file mode 100644
index 0000000..25d5952
--- /dev/null
+++ b/SOURCES/0044-systemd-python-fix-booted-and-add-two-functions-to-d.patch
@@ -0,0 +1,34 @@
+From 27b42c85817e4ebf03c60492f2bf187931450b51 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Mon, 11 Nov 2013 19:53:59 -0500
+Subject: [PATCH] systemd-python: fix booted() and add two functions to docs
+
+For some reason sphinx doesn't want to show inherited C functions.
+---
+ src/python-systemd/_daemon.c       | 2 +-
+ src/python-systemd/docs/daemon.rst | 2 ++
+ 2 files changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/src/python-systemd/_daemon.c b/src/python-systemd/_daemon.c
+index 6b84fb8..f0ab16f 100644
+--- a/src/python-systemd/_daemon.c
++++ b/src/python-systemd/_daemon.c
+@@ -51,7 +51,7 @@ static PyObject* booted(PyObject *self, PyObject *args) {
+         assert(args == NULL);
+ 
+         r = sd_booted();
+-        if (set_error(r, NULL, NULL))
++        if (set_error(r, NULL, NULL) < 0)
+                 return NULL;
+ 
+         return PyBool_FromLong(r);
+diff --git a/src/python-systemd/docs/daemon.rst b/src/python-systemd/docs/daemon.rst
+index 72280ca..0ad11ed 100644
+--- a/src/python-systemd/docs/daemon.rst
++++ b/src/python-systemd/docs/daemon.rst
+@@ -14,3 +14,5 @@
+    .. autofunction:: _is_socket_unix
+    .. autofunction:: _is_socket_inet
+    .. autofunction:: _is_mq
++   .. autofunction:: notify
++   .. autofunction:: booted
diff --git a/SOURCES/0045-man-drop-references-to-cgroup-wher-appropriate.patch b/SOURCES/0045-man-drop-references-to-cgroup-wher-appropriate.patch
deleted file mode 100644
index c2a207f..0000000
--- a/SOURCES/0045-man-drop-references-to-cgroup-wher-appropriate.patch
+++ /dev/null
@@ -1,436 +0,0 @@
-From a8c3f5121fac2cc4f8e3221a5a06b63d2e9c6f02 Mon Sep 17 00:00:00 2001
-From: Lennart Poettering <lennart@poettering.net>
-Date: Fri, 27 Sep 2013 00:05:07 +0200
-Subject: [PATCH] man: drop references to "cgroup" wher appropriate
-
-Since cgroups are mostly now an implementation detail of systemd lets
-deemphasize it a bit in the man pages. This renames systemd.cgroup(5) to
-systemd.resource-control(5) and uses the term "resource control" rather
-than "cgroup" where appropriate.
-
-This leaves the word "cgroup" in at a couple of places though, like for
-example systemd-cgtop and systemd-cgls where cgroup stuff is at the core
-of what is happening.
-
-Conflicts:
-	man/systemd.exec.xml
----
- Makefile-man.am                                    |  2 +-
- man/loginctl.xml                                   |  4 ++--
- man/machinectl.xml                                 |  4 ++--
- man/pam_systemd.xml                                |  2 +-
- man/systemctl.xml                                  | 14 ++++++-------
- man/systemd-cgls.xml                               |  6 +++---
- man/systemd-cgtop.xml                              |  4 ++--
- man/systemd.exec.xml                               |  5 +++--
- man/systemd.mount.xml                              |  6 +++---
- ...emd.cgroup.xml => systemd.resource-control.xml} | 24 ++++++++++------------
- man/systemd.scope.xml                              |  2 +-
- man/systemd.service.xml                            |  6 +++---
- man/systemd.slice.xml                              | 22 ++++++++++----------
- man/systemd.socket.xml                             | 12 +++++------
- man/systemd.swap.xml                               |  6 +++---
- 15 files changed, 59 insertions(+), 60 deletions(-)
- rename man/{systemd.cgroup.xml => systemd.resource-control.xml} (96%)
-
-diff --git a/Makefile-man.am b/Makefile-man.am
-index 1f63595..c8a4342 100644
---- a/Makefile-man.am
-+++ b/Makefile-man.am
-@@ -78,7 +78,6 @@ MANPAGES += \
- 	man/systemd-update-utmp.service.8 \
- 	man/systemd.1 \
- 	man/systemd.automount.5 \
--	man/systemd.cgroup.5 \
- 	man/systemd.device.5 \
- 	man/systemd.exec.5 \
- 	man/systemd.journal-fields.7 \
-@@ -86,6 +85,7 @@ MANPAGES += \
- 	man/systemd.mount.5 \
- 	man/systemd.path.5 \
- 	man/systemd.preset.5 \
-+	man/systemd.resource-control.5 \
- 	man/systemd.scope.5 \
- 	man/systemd.service.5 \
- 	man/systemd.slice.5 \
-diff --git a/man/loginctl.xml b/man/loginctl.xml
-index ef0dfc0..1b54ff7 100644
---- a/man/loginctl.xml
-+++ b/man/loginctl.xml
-@@ -117,8 +117,8 @@
-                                 <term><option>-l</option></term>
-                                 <term><option>--full</option></term>
- 
--                                <listitem><para>Do not ellipsize cgroup
--                                members.</para>
-+                                <listitem><para>Do not ellipsize
-+                                process tree entries.</para>
-                                 </listitem>
-                         </varlistentry>
- 
-diff --git a/man/machinectl.xml b/man/machinectl.xml
-index 5efa3a5..2ed9f2e 100644
---- a/man/machinectl.xml
-+++ b/man/machinectl.xml
-@@ -117,8 +117,8 @@
-                                 <term><option>-l</option></term>
-                                 <term><option>--full</option></term>
- 
--                                <listitem><para>Do not ellipsize cgroup
--                                members.</para>
-+                                <listitem><para>Do not ellipsize
-+                                process tree entries.</para>
-                                 </listitem>
-                         </varlistentry>
- 
-diff --git a/man/pam_systemd.xml b/man/pam_systemd.xml
-index 951ae20..0e25a4a 100644
---- a/man/pam_systemd.xml
-+++ b/man/pam_systemd.xml
-@@ -55,7 +55,7 @@
-                 <title>Description</title>
- 
-                 <para><command>pam_systemd</command> registers user
--                sessions in the systemd login manager
-+                sessions with the systemd login manager
-                 <citerefentry><refentrytitle>systemd-logind.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
-                 and hence the systemd control group hierarchy.</para>
- 
-diff --git a/man/systemctl.xml b/man/systemctl.xml
-index 51c34b7..a70c964 100644
---- a/man/systemctl.xml
-+++ b/man/systemctl.xml
-@@ -187,7 +187,7 @@ systemctl start foo
-         <term><option>--full</option></term>
- 
-         <listitem>
--          <para>Do not ellipsize unit names, cgroup members, and
-+          <para>Do not ellipsize unit names, process tree entries, and
-           truncate unit descriptions in the output of
-           <command>list-units</command> and
-           <command>list-jobs</command>.</para>
-@@ -724,14 +724,14 @@ kobject-uevent 1 systemd-udevd-kernel.socket systemd-udevd.service
-           <listitem>
-             <para>Set the specified unit properties at runtime where
-             this is supported. This allows changing configuration
--            parameter properties such as resource management controls at
-+            parameter properties such as resource control settings at
-             runtime. Not all properties may be changed at runtime, but
--            many resource management settings (primarily those in
--            <citerefentry><refentrytitle>systemd.cgroup</refentrytitle><manvolnum>5</manvolnum></citerefentry>)
-+            many resource control settings (primarily those in
-+            <citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry>)
-             may. The changes are applied instantly, and stored on disk
-             for future boots, unless <option>--runtime</option> is
--            passed, in which case the settings only apply until the next
--            reboot. The syntax of the property assignment follows
-+            passed, in which case the settings only apply until the
-+            next reboot. The syntax of the property assignment follows
-             closely the syntax of assignments in unit files.</para>
- 
-             <para>Example: <command>systemctl set-property foobar.service CPUShares=777</command></para>
-@@ -1299,7 +1299,7 @@ kobject-uevent 1 systemd-udevd-kernel.socket systemd-udevd.service
-       <citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
-       <citerefentry><refentrytitle>loginctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
-       <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
--      <citerefentry><refentrytitle>systemd.cgroup</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
-+      <citerefentry><refentrytitle>systemd.resource-management</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
-       <citerefentry><refentrytitle>systemd.special</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
-       <citerefentry><refentrytitle>wall</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
-       <citerefentry><refentrytitle>systemd.preset</refentrytitle><manvolnum>5</manvolnum></citerefentry>
-diff --git a/man/systemd-cgls.xml b/man/systemd-cgls.xml
-index fcaf894..432706b 100644
---- a/man/systemd-cgls.xml
-+++ b/man/systemd-cgls.xml
-@@ -116,8 +116,8 @@
-                                 <term><option>-l</option></term>
-                                 <term><option>--full</option></term>
- 
--                                <listitem><para>Do not ellipsize cgroup
--                                members.</para>
-+                                <listitem><para>Do not ellipsize
-+                                process tree members.</para>
-                                 </listitem>
-                         </varlistentry>
- 
-@@ -132,7 +132,7 @@
-                                 <term><option>-m <replaceable>MACHINE</replaceable></option></term>
-                                 <term><option>--machine=<replaceable>MACHINE</replaceable></option></term>
- 
--                                <listitem><para>Limit cgroups shown to
-+                                <listitem><para>Limit control groups shown to
-                                 the part corresponding to the
-                                 container <replaceable>MACHINE</replaceable>.
-                                 </para></listitem>
-diff --git a/man/systemd-cgtop.xml b/man/systemd-cgtop.xml
-index 51549c4..7faedfb 100644
---- a/man/systemd-cgtop.xml
-+++ b/man/systemd-cgtop.xml
-@@ -80,7 +80,7 @@
-                 <varname>MemoryAccounting=1</varname> and
-                 <varname>BlockIOAccounting=1</varname> settings in the
-                 unit files in question (See
--                <citerefentry><refentrytitle>systemd.cgroup</refentrytitle><manvolnum>5</manvolnum></citerefentry>
-+                <citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry>
-                 for details).</para>
- 
-                 <para>To emphasize this: unless
-@@ -274,7 +274,7 @@
-                         <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
-                         <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
-                         <citerefentry><refentrytitle>systemd-cgls</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
--                        <citerefentry><refentrytitle>systemd.cgroup</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
-+                        <citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
-                         <citerefentry><refentrytitle>top</refentrytitle><manvolnum>1</manvolnum></citerefentry>
-                 </para>
-         </refsect1>
-diff --git a/man/systemd.exec.xml b/man/systemd.exec.xml
-index 5721dc1..28d7fd4 100644
---- a/man/systemd.exec.xml
-+++ b/man/systemd.exec.xml
-@@ -1017,8 +1017,9 @@
-                           <citerefentry><refentrytitle>systemd.swap</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
-                           <citerefentry><refentrytitle>systemd.mount</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
-                           <citerefentry><refentrytitle>systemd.kill</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
--                          <citerefentry><refentrytitle>systemd.cgroup</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
--                          <citerefentry><refentrytitle>systemd.directives</refentrytitle><manvolnum>7</manvolnum></citerefentry>
-+                          <citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
-+                          <citerefentry><refentrytitle>systemd.directives</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
-+                          <citerefentry><refentrytitle>exec</refentrytitle><manvolnum>3</manvolnum></citerefentry>
-                   </para>
-         </refsect1>
- 
-diff --git a/man/systemd.mount.xml b/man/systemd.mount.xml
-index e5b5c3c..48af1ca 100644
---- a/man/systemd.mount.xml
-+++ b/man/systemd.mount.xml
-@@ -76,8 +76,8 @@
-                 <citerefentry><refentrytitle>systemd.kill</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
-                 which define the way the processes are terminated, and
-                 in
--                <citerefentry><refentrytitle>systemd.cgroup</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
--                which configure control group settings for the
-+                <citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
-+                which configure resource control settings for the
-                 processes of the service. Note that the User= and
-                 Group= options are not particularly useful for mount
-                 units specifying a <literal>Type=</literal> option or
-@@ -302,7 +302,7 @@
-                           <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
-                           <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
-                           <citerefentry><refentrytitle>systemd.kill</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
--                          <citerefentry><refentrytitle>systemd.cgroup</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
-+                          <citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
-                           <citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
-                           <citerefentry><refentrytitle>systemd.device</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
-                           <citerefentry><refentrytitle>proc</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
-diff --git a/man/systemd.cgroup.xml b/man/systemd.resource-control.xml
-similarity index 96%
-rename from man/systemd.cgroup.xml
-rename to man/systemd.resource-control.xml
-index cc0eb15..2427f208 100644
---- a/man/systemd.cgroup.xml
-+++ b/man/systemd.resource-control.xml
-@@ -22,9 +22,9 @@ You should have received a copy of the GNU Lesser General Public License
- along with systemd; If not, see <http://www.gnu.org/licenses/>.
- -->
- 
--<refentry id="systemd.cgroup">
-+<refentry id="systemd.resource-control">
-   <refentryinfo>
--    <title>systemd.cgroup</title>
-+    <title>systemd.resource-control</title>
-     <productname>systemd</productname>
- 
-     <authorgroup>
-@@ -38,13 +38,13 @@ along with systemd; If not, see <http://www.gnu.org/licenses/>.
-   </refentryinfo>
- 
-   <refmeta>
--    <refentrytitle>systemd.cgroup</refentrytitle>
-+    <refentrytitle>systemd.resource-control</refentrytitle>
-     <manvolnum>5</manvolnum>
-   </refmeta>
- 
-   <refnamediv>
--    <refname>systemd.cgroup</refname>
--    <refpurpose>Control Group configuration unit settings</refpurpose>
-+    <refname>systemd.resource-control</refname>
-+    <refpurpose>Resource control unit settings</refpurpose>
-   </refnamediv>
- 
-   <refsynopsisdiv>
-@@ -63,12 +63,10 @@ along with systemd; If not, see <http://www.gnu.org/licenses/>.
- 
-     <para>Unit configuration files for services, slices, scopes,
-     sockets, mount points, and swap devices share a subset of
--    configuration options which configure the control group settings
--    for spawned processes.</para>
--
--    <para>Control Groups is a concept for organizing processes in a
--    hierarch tree of named groups for the purpose of resource
--    management.</para>
-+    configuration options for resource control of spawned
-+    processes. Internally, this relies on the the Control Groups
-+    kernel concept for organizing processes in a hierarchial tree of
-+    named groups for the purpose of resource management.</para>
- 
-     <para>This man page lists the configuration options shared by
-     those six unit types. See
-@@ -82,7 +80,7 @@ along with systemd; If not, see <http://www.gnu.org/licenses/>.
-     and
-     <citerefentry><refentrytitle>systemd.swap</refentrytitle><manvolnum>5</manvolnum></citerefentry>
-     for more information on the specific unit configuration files. The
--    execution-specific configuration options are configured in the
-+    resource control configuration options are configured in the
-     [Slice], [Scope], [Service], [Socket], [Mount], or [Swap]
-     sections, depending on the unit type.</para>
-   </refsect1>
-@@ -91,7 +89,7 @@ along with systemd; If not, see <http://www.gnu.org/licenses/>.
-     <title>Options</title>
- 
-     <para>Units of the types listed above can have settings
--    for cgroup configuration:</para>
-+    for resource control configuration:</para>
- 
-     <variablelist class='unit-directives'>
- 
-diff --git a/man/systemd.scope.xml b/man/systemd.scope.xml
-index e8fa1ae..9813e0a 100644
---- a/man/systemd.scope.xml
-+++ b/man/systemd.scope.xml
-@@ -86,7 +86,7 @@ along with systemd; If not, see <http://www.gnu.org/licenses/>.
-       <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
-       <citerefentry><refentrytitle>systemd-run</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
-       <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
--      <citerefentry><refentrytitle>systemd.cgroup</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
-+      <citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
-       <citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
-       <citerefentry><refentrytitle>systemd.directives</refentrytitle><manvolnum>7</manvolnum></citerefentry>.
-     </para>
-diff --git a/man/systemd.service.xml b/man/systemd.service.xml
-index 8eda85f..45f96fa 100644
---- a/man/systemd.service.xml
-+++ b/man/systemd.service.xml
-@@ -76,8 +76,8 @@
-                 <citerefentry><refentrytitle>systemd.kill</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
-                 which define the way the processes of the service are
-                 terminated, and in
--                <citerefentry><refentrytitle>systemd.cgroup</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
--                which configure control group settings for the
-+                <citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
-+                which configure resource control settings for the
-                 processes of the service.</para>
- 
-                 <para>Unless <varname>DefaultDependencies=</varname>
-@@ -1006,7 +1006,7 @@
-                           <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
-                           <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
-                           <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
--                          <citerefentry><refentrytitle>systemd.cgroup</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
-+                          <citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
-                           <citerefentry><refentrytitle>systemd.kill</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
-                           <citerefentry><refentrytitle>systemd.directives</refentrytitle><manvolnum>7</manvolnum></citerefentry>
-                   </para>
-diff --git a/man/systemd.slice.xml b/man/systemd.slice.xml
-index b7b0622..4d27ddf 100644
---- a/man/systemd.slice.xml
-+++ b/man/systemd.slice.xml
-@@ -58,14 +58,14 @@ along with systemd; If not, see <http://www.gnu.org/licenses/>.
-     <literal>.slice</literal> encodes information about a slice which
-     is a concept for hierarchially managing resources of a group of
-     processes. This management is performed by creating a node in the
--    control group tree. Units that manage processes (primarilly scope
--    and service units) may be assigned to a specific slice. For each
--    slice, certain resource limits may the be set that apply to all
--    processes of all units contained in that slice. Slices are
--    organized hierarchially in a tree. The name of the slice encodes
--    the location in the tree. The name consists of a dash-separated
--    series of names, which describes the path to the slice from the
--    root slice. The root slice is named,
-+    Linux Control Group (cgroup) tree. Units that manage processes
-+    (primarilly scope and service units) may be assigned to a specific
-+    slice. For each slice, certain resource limits may the be set that
-+    apply to all processes of all units contained in that
-+    slice. Slices are organized hierarchially in a tree. The name of
-+    the slice encodes the location in the tree. The name consists of a
-+    dash-separated series of names, which describes the path to the
-+    slice from the root slice. The root slice is named,
-     <filename>-.slice</filename>. Example:
-     <filename>foo-bar.slice</filename> is a slice that is located
-     within <filename>foo.slice</filename>, which in turn is located in
-@@ -89,9 +89,9 @@ along with systemd; If not, see <http://www.gnu.org/licenses/>.
-     files. The common configuration items are configured
-     in the generic [Unit] and [Install] sections. The
-     slice specific configuration options are configured in
--    the [Slice] section. Currently, only generic cgroup settings
-+    the [Slice] section. Currently, only generic resource control settings
-     as described in
--    <citerefentry><refentrytitle>systemd.cgroup</refentrytitle><manvolnum>7</manvolnum></citerefentry> are allowed.
-+    <citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>7</manvolnum></citerefentry> are allowed.
-     </para>
- 
-     <para>Unless <varname>DefaultDependencies=false</varname>
-@@ -110,7 +110,7 @@ along with systemd; If not, see <http://www.gnu.org/licenses/>.
-     <para>
-       <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
-       <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
--      <citerefentry><refentrytitle>systemd.cgroup</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
-+      <citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
-       <citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
-       <citerefentry><refentrytitle>systemd.scope</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
-       <citerefentry><refentrytitle>systemd.special</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
-diff --git a/man/systemd.socket.xml b/man/systemd.socket.xml
-index 419a38c..8c88d9f 100644
---- a/man/systemd.socket.xml
-+++ b/man/systemd.socket.xml
-@@ -78,11 +78,11 @@
-                 <option>ExecStopPost=</option> commands are executed
-                 in, and in
-                 <citerefentry><refentrytitle>systemd.kill</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
--                which define the way the processes are
--                terminated, and in
--                <citerefentry><refentrytitle>systemd.cgroup</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
--                which configure control group settings for the
--                processes of the service.</para>
-+                which define the way the processes are terminated, and
-+                in
-+                <citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
-+                which configure resource control settings for the
-+                processes of the socket.</para>
- 
-                 <para>For each socket file a matching service file
-                 (see
-@@ -712,7 +712,7 @@
-                           <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
-                           <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
-                           <citerefentry><refentrytitle>systemd.kill</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
--                          <citerefentry><refentrytitle>systemd.cgroup</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
-+                          <citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
-                           <citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
-                           <citerefentry><refentrytitle>systemd.directives</refentrytitle><manvolnum>7</manvolnum></citerefentry>
-                   </para>
-diff --git a/man/systemd.swap.xml b/man/systemd.swap.xml
-index 18ef5b0..813ae6c 100644
---- a/man/systemd.swap.xml
-+++ b/man/systemd.swap.xml
-@@ -76,8 +76,8 @@
-                 <citerefentry><refentrytitle>systemd.kill</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
-                 which define the way the processes are
-                 terminated, and in
--                <citerefentry><refentrytitle>systemd.cgroup</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
--                which configure control group settings for the
-+                <citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
-+                which configure resource control settings for the
-                 processes of the service.</para>
- 
-                 <para>Swap units must be named after the devices
-@@ -206,7 +206,7 @@
-                           <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
-                           <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
-                           <citerefentry><refentrytitle>systemd.kill</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
--                          <citerefentry><refentrytitle>systemd.cgroup</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
-+                          <citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
-                           <citerefentry><refentrytitle>systemd.device</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
-                           <citerefentry><refentrytitle>systemd.mount</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
-                           <citerefentry><refentrytitle>swapon</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
diff --git a/SOURCES/0045-util.c-check-if-return-value-from-ttyname_r-is-0-ins.patch b/SOURCES/0045-util.c-check-if-return-value-from-ttyname_r-is-0-ins.patch
new file mode 100644
index 0000000..bcd7ad4
--- /dev/null
+++ b/SOURCES/0045-util.c-check-if-return-value-from-ttyname_r-is-0-ins.patch
@@ -0,0 +1,28 @@
+From 4003ebeac4b10481f32b5b1fdd65fcc905a4b9a7 Mon Sep 17 00:00:00 2001
+From: Thomas Hindoe Paaboel Andersen <phomes@gmail.com>
+Date: Sat, 30 Nov 2013 23:45:31 +0100
+Subject: [PATCH] util.c: check if return value from ttyname_r is > 0 instead
+ of != 0
+
+We must return a negative error code from getttyname_malloc but
+that would not be the case if ttyname_r returned a negative value.
+
+ttyname_r should only return EBADF, ENOTTY, or ERANGE so it should
+be safe to change.
+---
+ src/shared/util.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/shared/util.c b/src/shared/util.c
+index 6c88040..f602625 100644
+--- a/src/shared/util.c
++++ b/src/shared/util.c
+@@ -2561,7 +2561,7 @@ int getttyname_malloc(int fd, char **r) {
+         assert(r);
+ 
+         k = ttyname_r(fd, path, sizeof(path));
+-        if (k != 0)
++        if (k > 0)
+                 return -k;
+ 
+         char_array_0(path);
diff --git a/SOURCES/0046-activate-mention-E-in-the-help-text.patch b/SOURCES/0046-activate-mention-E-in-the-help-text.patch
new file mode 100644
index 0000000..a839f65
--- /dev/null
+++ b/SOURCES/0046-activate-mention-E-in-the-help-text.patch
@@ -0,0 +1,22 @@
+From 75095af78beb53ce399f50b004b4bf9a4de9ab60 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Mantas=20Mikul=C4=97nas?= <grawity@gmail.com>
+Date: Wed, 13 Nov 2013 13:36:17 +0200
+Subject: [PATCH] activate: mention -E in the help text
+
+---
+ src/activate/activate.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/src/activate/activate.c b/src/activate/activate.c
+index 535b330..a9461bc 100644
+--- a/src/activate/activate.c
++++ b/src/activate/activate.c
+@@ -316,6 +316,8 @@ static int help(void) {
+                "  -l --listen=ADDR     Listen for raw connections at ADDR\n"
+                "  -a --accept          Spawn separate child for each connection\n"
+                "  -h --help            Show this help and exit\n"
++               "  -E --environment=NAME[=VALUE]\n"
++               "                       Pass an environment variable to children\n"
+                "  --version            Print version string and exit\n"
+                "\n"
+                "Note: file descriptors from sd_listen_fds() will be passed through.\n"
diff --git a/SOURCES/0046-systemctl-make-sure-set-property-mangles-unit-names.patch b/SOURCES/0046-systemctl-make-sure-set-property-mangles-unit-names.patch
deleted file mode 100644
index 1c5dc03..0000000
--- a/SOURCES/0046-systemctl-make-sure-set-property-mangles-unit-names.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-From 86ccda12838942a4df2c974bad9386a60835ba67 Mon Sep 17 00:00:00 2001
-From: Lennart Poettering <lennart@poettering.net>
-Date: Fri, 27 Sep 2013 00:11:54 +0200
-Subject: [PATCH] systemctl: make sure set-property mangles unit names
-
----
- src/systemctl/systemctl.c | 9 +++++++--
- 1 file changed, 7 insertions(+), 2 deletions(-)
-
-diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c
-index 57e5bb9..16da293 100644
---- a/src/systemctl/systemctl.c
-+++ b/src/systemctl/systemctl.c
-@@ -3828,7 +3828,8 @@ static int append_assignment(DBusMessageIter *iter, const char *assignment) {
- 
- static int set_property(DBusConnection *bus, char **args) {
- 
--        _cleanup_free_ DBusMessage *m = NULL, *reply = NULL;
-+        _cleanup_dbus_message_unref_ DBusMessage *m = NULL, *reply = NULL;
-+        _cleanup_free_ char *n = NULL;
-         DBusMessageIter iter, sub;
-         dbus_bool_t runtime;
-         DBusError error;
-@@ -3849,7 +3850,11 @@ static int set_property(DBusConnection *bus, char **args) {
- 
-         runtime = arg_runtime;
- 
--        if (!dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &args[1]) ||
-+        n = unit_name_mangle(args[1]);
-+        if (!n)
-+                return log_oom();
-+
-+        if (!dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &n) ||
-             !dbus_message_iter_append_basic(&iter, DBUS_TYPE_BOOLEAN, &runtime) ||
-             !dbus_message_iter_open_container(&iter, DBUS_TYPE_ARRAY, "(sv)", &sub))
-                 return log_oom();
diff --git a/SOURCES/0047-dbus-fix-introspection-for-TimerSlackNSec.patch b/SOURCES/0047-dbus-fix-introspection-for-TimerSlackNSec.patch
deleted file mode 100644
index b6f2a1f..0000000
--- a/SOURCES/0047-dbus-fix-introspection-for-TimerSlackNSec.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-From 21062f680e6aff80a41ebb3d90543c310f6c22e6 Mon Sep 17 00:00:00 2001
-From: Lennart Poettering <lennart@poettering.net>
-Date: Fri, 27 Sep 2013 00:35:36 +0200
-Subject: [PATCH] dbus: fix introspection for TimerSlackNSec
-
----
- src/core/dbus-execute.h | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/core/dbus-execute.h b/src/core/dbus-execute.h
-index 5a6a559..79bf308 100644
---- a/src/core/dbus-execute.h
-+++ b/src/core/dbus-execute.h
-@@ -63,7 +63,7 @@
-         "  <property name=\"CPUSchedulingPolicy\" type=\"i\" access=\"read\"/>\n" \
-         "  <property name=\"CPUSchedulingPriority\" type=\"i\" access=\"read\"/>\n" \
-         "  <property name=\"CPUAffinity\" type=\"ay\" access=\"read\"/>\n" \
--        "  <property name=\"TimerSlackNS\" type=\"t\" access=\"read\"/>\n" \
-+        "  <property name=\"TimerSlackNSec\" type=\"t\" access=\"read\"/>\n" \
-         "  <property name=\"CPUSchedulingResetOnFork\" type=\"b\" access=\"read\"/>\n" \
-         "  <property name=\"NonBlocking\" type=\"b\" access=\"read\"/>\n" \
-         "  <property name=\"StandardInput\" type=\"s\" access=\"read\"/>\n" \
diff --git a/SOURCES/0047-docs-remove-unneeded-the-s-in-gudev-docs.patch b/SOURCES/0047-docs-remove-unneeded-the-s-in-gudev-docs.patch
new file mode 100644
index 0000000..f811a9b
--- /dev/null
+++ b/SOURCES/0047-docs-remove-unneeded-the-s-in-gudev-docs.patch
@@ -0,0 +1,38 @@
+From 9d175ba1edccb9e7e1d9d2994c3c074f43ea2539 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Sat, 30 Nov 2013 20:27:54 -0500
+Subject: [PATCH] docs: remove unneeded the's in gudev docs
+
+https://bugs.freedesktop.org/show_bug.cgi?id=72164
+---
+ src/libudev/libudev-device.c | 10 ++++------
+ 1 file changed, 4 insertions(+), 6 deletions(-)
+
+diff --git a/src/libudev/libudev-device.c b/src/libudev/libudev-device.c
+index a644904..161181a 100644
+--- a/src/libudev/libudev-device.c
++++ b/src/libudev/libudev-device.c
+@@ -980,9 +980,8 @@ static struct udev_device *device_new_from_parent(struct udev_device *udev_devic
+  * Find the next parent device, and fill in information from the sys
+  * device and the udev database entry.
+  *
+- * The returned the device is not referenced. It is attached to the
+- * child device, and will be cleaned up when the child device
+- * is cleaned up.
++ * Returned device is not referenced. It is attached to the child
++ * device, and will be cleaned up when the child device is cleaned up.
+  *
+  * It is not necessarily just the upper level directory, empty or not
+  * recognized sys directories are ignored.
+@@ -1016,9 +1015,8 @@ _public_ struct udev_device *udev_device_get_parent(struct udev_device *udev_dev
+  * If devtype is #NULL, only subsystem is checked, and any devtype will
+  * match.
+  *
+- * The returned the device is not referenced. It is attached to the
+- * child device, and will be cleaned up when the child device
+- * is cleaned up.
++ * Returned device is not referenced. It is attached to the child
++ * device, and will be cleaned up when the child device is cleaned up.
+  *
+  * It can be called as many times as needed, without caring about
+  * references.
diff --git a/SOURCES/0048-man-explicitly-say-when-multiple-units-can-be-specif.patch b/SOURCES/0048-man-explicitly-say-when-multiple-units-can-be-specif.patch
new file mode 100644
index 0000000..3d29fe8
--- /dev/null
+++ b/SOURCES/0048-man-explicitly-say-when-multiple-units-can-be-specif.patch
@@ -0,0 +1,235 @@
+From 521519ead8bb49d2c94aed90982ffcd6d5e34e92 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Sat, 30 Nov 2013 21:23:01 -0500
+Subject: [PATCH] man: explicitly say when multiple units can be specified
+
+itistoday> how do you specify multiple dependencies in a unit file? i've been
+           googling and can't find this basic thing :-\
+itistoday> do you use a comma, or use multiple After= statements?
+---
+ man/systemd.unit.xml | 128 ++++++++++++++++++++++++++++-----------------------
+ 1 file changed, 70 insertions(+), 58 deletions(-)
+
+diff --git a/man/systemd.unit.xml b/man/systemd.unit.xml
+index 5c8b8e8..029392c 100644
+--- a/man/systemd.unit.xml
++++ b/man/systemd.unit.xml
+@@ -410,10 +410,12 @@
+                                 of the other units gets deactivated or
+                                 its activation fails, this unit will
+                                 be deactivated. This option may be
+-                                specified more than once, in which
+-                                case requirement dependencies for all
+-                                listed names are created. Note that
+-                                requirement dependencies do not
++                                specified more than once or multiple
++                                space-separated units may be specified
++                                in one option in which case
++                                requirement dependencies for all
++                                listed names will be created. Note
++                                that requirement dependencies do not
+                                 influence the order in which services
+                                 are started or stopped. This has to be
+                                 configured independently with the
+@@ -476,22 +478,23 @@
+                                 <term><varname>RequisiteOverridable=</varname></term>
+ 
+                                 <listitem><para>Similar to
+-                                <varname>Requires=</varname>
+-                                and <varname>RequiresOverridable=</varname>, respectively. However,
+-                                if a unit listed here is not started
+-                                already it will not be started and the
+-                                transaction fails
+-                                immediately.</para></listitem>
++                                <varname>Requires=</varname> and
++                                <varname>RequiresOverridable=</varname>,
++                                respectively. However, if the units
++                                listed here are not started already
++                                they will not be started and the
++                                transaction will fail immediately.
++                                </para></listitem>
+                         </varlistentry>
+ 
+                         <varlistentry>
+                                 <term><varname>Wants=</varname></term>
+ 
+                                 <listitem><para>A weaker version of
+-                                <varname>Requires=</varname>. A unit
++                                <varname>Requires=</varname>. Units
+                                 listed in this option will be started
+                                 if the configuring unit is. However,
+-                                if the listed unit fails to start up
++                                if the listed units fail to start
+                                 or cannot be added to the transaction
+                                 this has no impact on the validity of
+                                 the transaction as a whole. This is
+@@ -501,8 +504,8 @@
+ 
+                                 <para>Note that dependencies of this
+                                 type may also be configured outside of
+-                                the unit configuration file by
+-                                adding a symlink to a
++                                the unit configuration file by adding
++                                symlinks to a
+                                 <filename>.wants/</filename> directory
+                                 accompanying the unit file. For
+                                 details see above.</para></listitem>
+@@ -534,7 +537,7 @@
+                                 of units. When systemd stops or restarts
+                                 the units listed here, the action is
+                                 propagated to this unit.
+-                                Note that this is a one way dependency -
++                                Note that this is a one way dependency —
+                                 changes to this unit do not affect the
+                                 listed units.
+                                 </para></listitem>
+@@ -543,12 +546,12 @@
+                         <varlistentry>
+                                 <term><varname>Conflicts=</varname></term>
+ 
+-                                <listitem><para>Configures negative
++                                <listitem><para>A space-separated list
++                                of unit names. Configures negative
+                                 requirement dependencies. If a unit
+-                                has a
+-                                <varname>Conflicts=</varname> setting
+-                                on another unit, starting the former
+-                                will stop the latter and vice
++                                has a <varname>Conflicts=</varname>
++                                setting on another unit, starting the
++                                former will stop the latter and vice
+                                 versa. Note that this setting is
+                                 independent of and orthogonal to the
+                                 <varname>After=</varname> and
+@@ -575,7 +578,8 @@
+                                 <term><varname>Before=</varname></term>
+                                 <term><varname>After=</varname></term>
+ 
+-                                <listitem><para>Configures ordering
++                                <listitem><para>A space-separated list
++                                of unit names. Configures ordering
+                                 dependencies between units. If a unit
+                                 <filename>foo.service</filename>
+                                 contains a setting
+@@ -624,18 +628,18 @@
+                                 type <varname>After=</varname> or
+                                 <varname>Before=</varname>. If two
+                                 units have no ordering dependencies
+-                                between them, they are shut down
+-                                or started up simultaneously, and
+-                                no ordering takes
++                                between them, they are shut down or
++                                started up simultaneously, and no
++                                ordering takes
+                                 place. </para></listitem>
+                         </varlistentry>
+ 
+                         <varlistentry>
+                                 <term><varname>OnFailure=</varname></term>
+ 
+-                                <listitem><para>Lists one or more
+-                                units that are activated when this
+-                                unit enters the
++                                <listitem><para>A space-separated list
++                                of one or more units that are
++                                activated when this unit enters the
+                                 <literal>failed</literal>
+                                 state.</para></listitem>
+                         </varlistentry>
+@@ -644,16 +648,17 @@
+                                 <term><varname>PropagatesReloadTo=</varname></term>
+                                 <term><varname>ReloadPropagatedFrom=</varname></term>
+ 
+-                                <listitem><para>Lists one or more
+-                                units where reload requests on the
+-                                unit will be propagated to/on the
+-                                other unit will be propagated
+-                                from. Issuing a reload request on a
+-                                unit will automatically also enqueue a
+-                                reload request on all units that the
+-                                reload request shall be propagated to
+-                                via these two
+-                                settings.</para></listitem>
++                                <listitem><para>A space-separated list
++                                of one or more units where reload
++                                requests on this unit will be
++                                propagated to, or reload requests on
++                                the other unit will be propagated to
++                                this unit, respectively. Issuing a
++                                reload request on a unit will
++                                automatically also enqueue a reload
++                                request on all units that the reload
++                                request shall be propagated to via
++                                these two settings.</para></listitem>
+                         </varlistentry>
+ 
+                         <varlistentry>
+@@ -1089,32 +1094,34 @@
+                         <varlistentry>
+                                 <term><varname>Alias=</varname></term>
+ 
+-                                <listitem><para>Additional names this
+-                                unit shall be installed under. The
+-                                names listed here must have the same
+-                                suffix (i.e. type) as the unit file
+-                                name. This option may be specified
+-                                more than once, in which case all
+-                                listed names are used. At installation
+-                                time,
+-                                <command>systemctl enable</command>
+-                                will create symlinks from these names
+-                                to the unit filename.</para></listitem>
++                                <listitem><para>A space-seperated list
++                                of additional names this unit shall be
++                                installed under. The names listed here
++                                must have the same suffix (i.e. type)
++                                as the unit file name. This option may
++                                be specified more than once, in which
++                                case all listed names are used. At
++                                installation time, <command>systemctl
++                                enable</command> will create symlinks
++                                from these names to the unit
++                                filename.</para></listitem>
+                         </varlistentry>
+ 
+                         <varlistentry>
+                                 <term><varname>WantedBy=</varname></term>
+                                 <term><varname>RequiredBy=</varname></term>
+ 
+-                                <listitem><para>A symbolic link is
+-                                created in the
+-                                <filename>.wants/</filename> or
+-                                <filename>.requires/</filename> directory
+-                                of the listed unit when this unit is
+-                                activated by <command>systemctl
+-                                enable</command>.  This has the effect
+-                                that a dependency of type
+-                                <varname>Wants=</varname> or
++                                <listitem><para>This option may be
++                                used more than once, or a
++                                space-separated list of unit names may
++                                be given. A symbolic link is created
++                                in the <filename>.wants/</filename> or
++                                <filename>.requires/</filename>
++                                directory of each of the listed units
++                                when this unit is installed by
++                                <command>systemctl enable</command>.
++                                This has the effect that a dependency
++                                of type <varname>Wants=</varname> or
+                                 <varname>Requires=</varname> is added
+                                 from the listed unit to the current
+                                 unit. The primary result is that the
+@@ -1160,7 +1167,12 @@
+                                 and <command>systemctl
+                                 disable</command> will automatically
+                                 install/uninstall units listed in this option as
+-                                well.</para></listitem>
++                                well.</para>
++
++                                <para>This option may be used more
++                                than once, or a space-separated list
++                                of unit names may be
++                                given.</para></listitem>
+                         </varlistentry>
+                 </variablelist>
+ 
diff --git a/SOURCES/0048-swap-properly-expose-timeout-property-on-the-bus.patch b/SOURCES/0048-swap-properly-expose-timeout-property-on-the-bus.patch
deleted file mode 100644
index 93150d9..0000000
--- a/SOURCES/0048-swap-properly-expose-timeout-property-on-the-bus.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-From 83ee5d7f274a3a365fd0f4855ec14e444bc56321 Mon Sep 17 00:00:00 2001
-From: Lennart Poettering <lennart@poettering.net>
-Date: Fri, 27 Sep 2013 02:02:21 +0200
-Subject: [PATCH] swap: properly expose timeout property on the bus
-
----
- src/core/dbus-swap.c | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/src/core/dbus-swap.c b/src/core/dbus-swap.c
-index 86fcf16..06edfdc 100644
---- a/src/core/dbus-swap.c
-+++ b/src/core/dbus-swap.c
-@@ -95,6 +95,7 @@ static DEFINE_BUS_PROPERTY_APPEND_ENUM(bus_swap_append_swap_result, swap_result,
- static const BusProperty bus_swap_properties[] = {
-         { "What",       bus_property_append_string, "s", offsetof(Swap, what),  true },
-         { "Priority",   bus_swap_append_priority,   "i", 0 },
-+        { "TimeoutUSec",bus_property_append_usec,   "t", offsetof(Swap, timeout_usec)},
-         BUS_EXEC_COMMAND_PROPERTY("ExecActivate",   offsetof(Swap, exec_command[SWAP_EXEC_ACTIVATE]),   false),
-         BUS_EXEC_COMMAND_PROPERTY("ExecDeactivate", offsetof(Swap, exec_command[SWAP_EXEC_DEACTIVATE]), false),
-         { "ControlPID", bus_property_append_pid,    "u", offsetof(Swap, control_pid) },
diff --git a/SOURCES/0049-build-sys-restore-detection-of-sphinx.patch b/SOURCES/0049-build-sys-restore-detection-of-sphinx.patch
deleted file mode 100644
index 41ee8fe..0000000
--- a/SOURCES/0049-build-sys-restore-detection-of-sphinx.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-From 2127292995c93c4324cc15a8034e009fb78eb5a5 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
-Date: Fri, 27 Sep 2013 08:24:00 +0200
-Subject: [PATCH] build-sys: restore detection of sphinx
-
----
- configure.ac | 2 ++
- 1 file changed, 2 insertions(+)
-
-diff --git a/configure.ac b/configure.ac
-index d3f853f..c7f4f1b 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -185,6 +185,7 @@ AS_IF([test "x$enable_python_devel" != "xno"], [
-                   [have_python_devel=no])])
-       AS_IF([test "x$have_python_devel" = xno -a "x$enable_python_devel" = xyes],
-             [AC_MSG_ERROR([*** python-devel support requested but libraries not found])])
-+      AC_PATH_PROGS(SPHINX_BUILD, sphinx-build-${PYTHON_VERSION} sphinx-build)
- ])
- AM_CONDITIONAL([HAVE_PYTHON_DEVEL], [test "$have_python_devel" = "yes"])
- 
-@@ -1051,6 +1052,7 @@ AC_MSG_RESULT([
-         SysV rc?.d directories:  ${SYSTEM_SYSVRCND_PATH}
-         Build Python:            ${PYTHON}
-         Installation Python:     ${PYTHON_BINARY}
-+        sphinx binary:           ${SPHINX_BUILD}
-         firmware path:           ${FIRMWARE_PATH}
-         PAM modules dir:         ${with_pamlibdir}
-         PAM configuration dir:   ${with_pamconfdir}
diff --git a/SOURCES/0049-util-fix-handling-of-trailing-whitespace-in-split_qu.patch b/SOURCES/0049-util-fix-handling-of-trailing-whitespace-in-split_qu.patch
new file mode 100644
index 0000000..e7fc500
--- /dev/null
+++ b/SOURCES/0049-util-fix-handling-of-trailing-whitespace-in-split_qu.patch
@@ -0,0 +1,122 @@
+From 996e958ecde418244f6aca999b5b1edaeeeb009b Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart@poettering.net>
+Date: Wed, 27 Nov 2013 22:37:52 +0100
+Subject: [PATCH] util: fix handling of trailing whitespace in split_quoted()
+
+Inspired by a patch by Lukas Nykryn.
+
+Conflicts:
+	src/test/test-strv.c
+---
+ src/shared/util.c    | 24 +++++++++++++++---------
+ src/test/test-strv.c | 26 ++++++++++++++++++++++++++
+ 2 files changed, 41 insertions(+), 9 deletions(-)
+
+diff --git a/src/shared/util.c b/src/shared/util.c
+index f602625..b1a4006 100644
+--- a/src/shared/util.c
++++ b/src/shared/util.c
+@@ -370,17 +370,21 @@ char *split(const char *c, size_t *l, const char *separator, char **state) {
+ /* Split a string into words, but consider strings enclosed in '' and
+  * "" as words even if they include spaces. */
+ char *split_quoted(const char *c, size_t *l, char **state) {
+-        char *current, *e;
++        const char *current, *e;
+         bool escaped = false;
+ 
+-        current = *state ? *state : (char*) c;
++        assert(c);
++        assert(l);
++        assert(state);
+ 
+-        if (!*current || *c == 0)
+-                return NULL;
++        current = *state ? *state : c;
+ 
+         current += strspn(current, WHITESPACE);
+ 
+-        if (*current == '\'') {
++        if (*current == 0)
++                return NULL;
++
++        else if (*current == '\'') {
+                 current ++;
+ 
+                 for (e = current; *e; e++) {
+@@ -393,7 +397,8 @@ char *split_quoted(const char *c, size_t *l, char **state) {
+                 }
+ 
+                 *l = e-current;
+-                *state = *e == 0 ? e : e+1;
++                *state = (char*) (*e == 0 ? e : e+1);
++
+         } else if (*current == '\"') {
+                 current ++;
+ 
+@@ -407,7 +412,8 @@ char *split_quoted(const char *c, size_t *l, char **state) {
+                 }
+ 
+                 *l = e-current;
+-                *state = *e == 0 ? e : e+1;
++                *state = (char*) (*e == 0 ? e : e+1);
++
+         } else {
+                 for (e = current; *e; e++) {
+                         if (escaped)
+@@ -418,10 +424,10 @@ char *split_quoted(const char *c, size_t *l, char **state) {
+                                 break;
+                 }
+                 *l = e-current;
+-                *state = e;
++                *state = (char*) e;
+         }
+ 
+-        return (char*) current;
++        return current;
+ }
+ 
+ int get_parent_of_pid(pid_t pid, pid_t *_ppid) {
+diff --git a/src/test/test-strv.c b/src/test/test-strv.c
+index c3d536d..ed26ad1 100644
+--- a/src/test/test-strv.c
++++ b/src/test/test-strv.c
+@@ -156,6 +156,20 @@ static void test_strv_quote_unquote(const char* const *split, const char *quoted
+         }
+ }
+ 
++static void test_strv_quote_unquote2(const char *quoted, const char ** list) {
++        _cleanup_strv_free_ char **s;
++        unsigned i = 0;
++        char **t;
++
++        s = strv_split_quoted(quoted);
++        assert_se(s);
++
++        STRV_FOREACH(t, s)
++                assert_se(streq(list[i++], *t));
++
++        assert_se(list[i] == NULL);
++}
++
+ static void test_strv_split_nulstr(void) {
+         _cleanup_strv_free_ char **l = NULL;
+         const char nulstr[] = "str0\0str1\0str2\0str3\0";
+@@ -309,6 +323,18 @@ int main(int argc, char *argv[]) {
+         test_strv_quote_unquote(input_table_quotes, QUOTES_STRING);
+         test_strv_quote_unquote(input_table_spaces, SPACES_STRING);
+ 
++        test_strv_quote_unquote2("    foo=bar     \"waldo\"    zzz    ", (const char*[]) { "foo=bar", "waldo", "zzz", NULL });
++        test_strv_quote_unquote2("", (const char*[]) { NULL });
++        test_strv_quote_unquote2(" ", (const char*[]) { NULL });
++        test_strv_quote_unquote2("   ", (const char*[]) { NULL });
++        test_strv_quote_unquote2("   x", (const char*[]) { "x", NULL });
++        test_strv_quote_unquote2("x   ", (const char*[]) { "x", NULL });
++        test_strv_quote_unquote2("  x   ", (const char*[]) { "x", NULL });
++        test_strv_quote_unquote2("  \"x\"   ", (const char*[]) { "x", NULL });
++        test_strv_quote_unquote2("  \'x\'   ", (const char*[]) { "x", NULL });
++        test_strv_quote_unquote2("  \'x\"\'   ", (const char*[]) { "x\"", NULL });
++        test_strv_quote_unquote2("  \"x\'\"   ", (const char*[]) { "x\'", NULL });
++
+         test_strv_split_nulstr();
+         test_strv_parse_nulstr();
+         test_strv_overlap();
diff --git a/SOURCES/0050-man-Improve-the-description-of-parameter-X-in-tmpfil.patch b/SOURCES/0050-man-Improve-the-description-of-parameter-X-in-tmpfil.patch
new file mode 100644
index 0000000..c6d99c6
--- /dev/null
+++ b/SOURCES/0050-man-Improve-the-description-of-parameter-X-in-tmpfil.patch
@@ -0,0 +1,42 @@
+From fb8be2cd82a3e00fdbe506e163fdf599e0bd5bd2 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?V=C3=A1clav=20Pavl=C3=ADn?= <vpavlin@redhat.com>
+Date: Thu, 3 Oct 2013 15:47:26 +0200
+Subject: [PATCH] man: Improve the description of parameter X in tmpfiles.d
+ page
+
+---
+ man/tmpfiles.d.xml | 21 ++++++++++++---------
+ 1 file changed, 12 insertions(+), 9 deletions(-)
+
+diff --git a/man/tmpfiles.d.xml b/man/tmpfiles.d.xml
+index 9fc4b7c..e8b630d 100644
+--- a/man/tmpfiles.d.xml
++++ b/man/tmpfiles.d.xml
+@@ -184,15 +184,18 @@ L    /tmp/foobar -    -    -    -   /dev/null</programlisting>
+                                 <varlistentry>
+                                         <term><varname>X</varname></term>
+                                         <listitem><para>Ignore a path
+-                                        during cleanup. Use this type
+-                                        to prevent path removal as
+-                                        controlled with the Age parameter.
+-                                        Note that if path is a directory,
+-                                        content of a directory is not
+-                                        excluded from clean-up, only
+-                                        directory itself. Lines of this
+-                                        type accept shell-style globs
+-                                        in place of normal path
++                                        during cleaning. Use this type
++                                        to exclude paths from clean-up
++                                        as controlled with the Age
++                                        parameter. Unlike x this
++                                        parameter will not exclude the
++                                        content if path is a directory,
++                                        but only directory itself.
++                                        Note that lines of this type do
++                                        not influence the effect of r
++                                        or R lines. Lines of this type
++                                        accept shell-style globs in
++                                        place of normal path
+                                         names.</para></listitem>
+                                 </varlistentry>
+ 
diff --git a/SOURCES/0050-util-add-macro-for-iterating-through-all-prefixes-of.patch b/SOURCES/0050-util-add-macro-for-iterating-through-all-prefixes-of.patch
deleted file mode 100644
index 5846c39..0000000
--- a/SOURCES/0050-util-add-macro-for-iterating-through-all-prefixes-of.patch
+++ /dev/null
@@ -1,119 +0,0 @@
-From c9f59a78c0016b37730cec831e1eec139ca4a561 Mon Sep 17 00:00:00 2001
-From: Lennart Poettering <lennart@poettering.net>
-Date: Wed, 25 Sep 2013 20:58:23 +0200
-Subject: [PATCH] util: add macro for iterating through all prefixes of a path
-
-Syntactic sugar in a macro PATH_FOREACH_PREFIX.
----
- src/shared/cgroup-util.c  | 26 ++++----------------------
- src/shared/path-util.h    |  3 +++
- src/test/test-path-util.c | 27 +++++++++++++++++++++++++++
- 3 files changed, 34 insertions(+), 22 deletions(-)
-
-diff --git a/src/shared/cgroup-util.c b/src/shared/cgroup-util.c
-index 2e630d4..dc0fe85 100644
---- a/src/shared/cgroup-util.c
-+++ b/src/shared/cgroup-util.c
-@@ -456,23 +456,14 @@ int cg_migrate_recursive_fallback(
- 
-                 /* This didn't work? Then let's try all prefixes of the destination */
- 
--                strcpy(prefix, pto);
--                for (;;) {
--                        char *slash;
--
--                        slash = strrchr(prefix, '/');
--                        if (!slash)
--                                break;
--
--                        *slash = 0;
--
-+                PATH_FOREACH_PREFIX(prefix, pto) {
-                         r = cg_migrate_recursive(cfrom, pfrom, cto, prefix, ignore_self, rem);
-                         if (r >= 0)
-                                 break;
-                 }
-         }
- 
--        return r;
-+        return 0;
- }
- 
- static const char *normalize_controller(const char *controller) {
-@@ -661,23 +652,14 @@ int cg_attach_fallback(const char *controller, const char *path, pid_t pid) {
-                 /* This didn't work? Then let's try all prefixes of
-                  * the destination */
- 
--                strcpy(prefix, path);
--                for (;;) {
--                        char *slash;
--
--                        slash = strrchr(prefix, '/');
--                        if (!slash)
--                                break;
--
--                        *slash = 0;
--
-+                PATH_FOREACH_PREFIX(prefix, path) {
-                         r = cg_attach(controller, prefix, pid);
-                         if (r >= 0)
-                                 break;
-                 }
-         }
- 
--        return r;
-+        return 0;
- }
- 
- int cg_set_group_access(
-diff --git a/src/shared/path-util.h b/src/shared/path-util.h
-index 9452931..03f2cf2 100644
---- a/src/shared/path-util.h
-+++ b/src/shared/path-util.h
-@@ -51,3 +51,6 @@ int path_is_read_only_fs(const char *path);
- int path_is_os_tree(const char *path);
- 
- int find_binary(const char *name, char **filename);
-+
-+#define PATH_FOREACH_PREFIX(prefix, path) \
-+        for (char *_slash = strrchr(path_kill_slashes(strcpy(prefix, path)), '/'); _slash && !(*_slash = 0); _slash = strrchr((prefix), '/'))
-diff --git a/src/test/test-path-util.c b/src/test/test-path-util.c
-index b0aeb11..e303e48 100644
---- a/src/test/test-path-util.c
-+++ b/src/test/test-path-util.c
-@@ -106,8 +106,35 @@ static void test_find_binary(void) {
-         assert(find_binary("xxxx-xxxx", &p) == -ENOENT);
- }
- 
-+static void test_prefixes(void) {
-+        static const char* values[] = { "/a/b/c", "/a/b", "/a", "", NULL};
-+        unsigned i = 0;
-+        char s[PATH_MAX];
-+
-+        PATH_FOREACH_PREFIX(s, "/a/b/c/d") {
-+                log_error("---%s---", s);
-+                assert_se(streq(s, values[i++]));
-+        }
-+
-+        assert_se(values[i] == NULL);
-+
-+        i = 0;
-+        PATH_FOREACH_PREFIX(s, "////a////b////c///d///////")
-+                assert_se(streq(s, values[i++]));
-+
-+        assert_se(values[i] == NULL);
-+
-+        PATH_FOREACH_PREFIX(s, "////")
-+                assert_se(streq(s, ""));
-+
-+        PATH_FOREACH_PREFIX(s, "")
-+                assert_not_reached("wut?");
-+
-+}
-+
- int main(void) {
-         test_path();
-         test_find_binary();
-+        test_prefixes();
-         return 0;
- }
diff --git a/SOURCES/0051-coredumpctl-in-case-of-error-free-pattern-after-prin.patch b/SOURCES/0051-coredumpctl-in-case-of-error-free-pattern-after-prin.patch
new file mode 100644
index 0000000..ec5fa69
--- /dev/null
+++ b/SOURCES/0051-coredumpctl-in-case-of-error-free-pattern-after-prin.patch
@@ -0,0 +1,26 @@
+From 70a0ba4546c69646ef7b220fb5e753416443d5b2 Mon Sep 17 00:00:00 2001
+From: Lukas Nykryn <lnykryn@redhat.com>
+Date: Tue, 14 Jan 2014 15:40:16 +0100
+Subject: [PATCH] coredumpctl: in case of error free pattern after print
+
+---
+ src/journal/coredumpctl.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/src/journal/coredumpctl.c b/src/journal/coredumpctl.c
+index 75c96cc..356d03d 100644
+--- a/src/journal/coredumpctl.c
++++ b/src/journal/coredumpctl.c
+@@ -126,10 +126,11 @@ static int add_match(Set *set, const char *match) {
+                 goto fail;
+ 
+         log_debug("Adding pattern: %s", pattern);
+-        r = set_consume(set, pattern);
++        r = set_put(set, pattern);
+         if (r < 0) {
+                 log_error("Failed to add pattern '%s': %s",
+                           pattern, strerror(-r));
++                free(pattern);
+                 goto fail;
+         }
+ 
diff --git a/SOURCES/0051-util-properly-handle-the-root-dir-in-PATH_FOREACH_PR.patch b/SOURCES/0051-util-properly-handle-the-root-dir-in-PATH_FOREACH_PR.patch
deleted file mode 100644
index a3deb42..0000000
--- a/SOURCES/0051-util-properly-handle-the-root-dir-in-PATH_FOREACH_PR.patch
+++ /dev/null
@@ -1,94 +0,0 @@
-From dc5e623cbd6c4250d514ec1c9d67c338cd71934c Mon Sep 17 00:00:00 2001
-From: Lennart Poettering <lennart@poettering.net>
-Date: Thu, 26 Sep 2013 19:58:33 +0200
-Subject: [PATCH] util: properly handle the root dir in PATH_FOREACH_PREFIX
-
-Also add PATH_FOREACH_PREFIX_MORE which includes the specified dir
-itself in the iteration
----
- src/shared/path-util.h    |  9 ++++++++-
- src/test/test-path-util.c | 34 ++++++++++++++++++++++++++++++----
- 2 files changed, 38 insertions(+), 5 deletions(-)
-
-diff --git a/src/shared/path-util.h b/src/shared/path-util.h
-index 03f2cf2..0a42de7 100644
---- a/src/shared/path-util.h
-+++ b/src/shared/path-util.h
-@@ -52,5 +52,12 @@ int path_is_os_tree(const char *path);
- 
- int find_binary(const char *name, char **filename);
- 
-+/* Iterates through the path prefixes of the specified path, going up
-+ * the tree, to root. Also returns "" (and not "/"!) for the root
-+ * directory. Excludes the specified directory itself */
- #define PATH_FOREACH_PREFIX(prefix, path) \
--        for (char *_slash = strrchr(path_kill_slashes(strcpy(prefix, path)), '/'); _slash && !(*_slash = 0); _slash = strrchr((prefix), '/'))
-+        for (char *_slash = ({ path_kill_slashes(strcpy(prefix, path)); streq(prefix, "/") ? NULL : strrchr(prefix, '/'); }); _slash && !(*_slash = 0); _slash = strrchr((prefix), '/'))
-+
-+/* Same as PATH_FOREACH_PREFIX but also includes the specified path itself */
-+#define PATH_FOREACH_PREFIX_MORE(prefix, path) \
-+        for (char *_slash = ({ path_kill_slashes(strcpy(prefix, path)); if (streq(prefix, "/")) prefix[0] = 0; strrchr(prefix, 0); }); _slash && !(*_slash = 0); _slash = strrchr((prefix), '/'))
-diff --git a/src/test/test-path-util.c b/src/test/test-path-util.c
-index e303e48..ed3b315 100644
---- a/src/test/test-path-util.c
-+++ b/src/test/test-path-util.c
-@@ -107,29 +107,55 @@ static void test_find_binary(void) {
- }
- 
- static void test_prefixes(void) {
--        static const char* values[] = { "/a/b/c", "/a/b", "/a", "", NULL};
--        unsigned i = 0;
-+        static const char* values[] = { "/a/b/c/d", "/a/b/c", "/a/b", "/a", "", NULL};
-+        unsigned i;
-         char s[PATH_MAX];
-+        bool b;
- 
--        PATH_FOREACH_PREFIX(s, "/a/b/c/d") {
-+        i = 0;
-+        PATH_FOREACH_PREFIX_MORE(s, "/a/b/c/d") {
-                 log_error("---%s---", s);
-                 assert_se(streq(s, values[i++]));
-         }
-+        assert_se(values[i] == NULL);
- 
-+        i = 1;
-+        PATH_FOREACH_PREFIX(s, "/a/b/c/d") {
-+                log_error("---%s---", s);
-+                assert_se(streq(s, values[i++]));
-+        }
-         assert_se(values[i] == NULL);
- 
-         i = 0;
--        PATH_FOREACH_PREFIX(s, "////a////b////c///d///////")
-+        PATH_FOREACH_PREFIX_MORE(s, "////a////b////c///d///////")
-                 assert_se(streq(s, values[i++]));
-+        assert_se(values[i] == NULL);
- 
-+        i = 1;
-+        PATH_FOREACH_PREFIX(s, "////a////b////c///d///////")
-+                assert_se(streq(s, values[i++]));
-         assert_se(values[i] == NULL);
- 
-         PATH_FOREACH_PREFIX(s, "////")
-+                assert_not_reached("Wut?");
-+
-+        b = false;
-+        PATH_FOREACH_PREFIX_MORE(s, "////") {
-+                assert_se(!b);
-                 assert_se(streq(s, ""));
-+                b = true;
-+        }
-+        assert_se(b);
- 
-         PATH_FOREACH_PREFIX(s, "")
-                 assert_not_reached("wut?");
- 
-+        b = false;
-+        PATH_FOREACH_PREFIX_MORE(s, "") {
-+                assert(!b);
-+                assert(streq(s, ""));
-+                b = true;
-+        }
- }
- 
- int main(void) {
diff --git a/SOURCES/0052-cgroup-get-rid-of-MemorySoftLimit.patch b/SOURCES/0052-cgroup-get-rid-of-MemorySoftLimit.patch
deleted file mode 100644
index 025b012..0000000
--- a/SOURCES/0052-cgroup-get-rid-of-MemorySoftLimit.patch
+++ /dev/null
@@ -1,245 +0,0 @@
-From 5ba4f4d42db066c3a9255768d5c38d841127bd07 Mon Sep 17 00:00:00 2001
-From: Lennart Poettering <lennart@poettering.net>
-Date: Tue, 17 Sep 2013 14:58:00 -0500
-Subject: [PATCH] cgroup: get rid of MemorySoftLimit=
-
-The cgroup attribute memory.soft_limit_in_bytes is unlikely to stay
-around in the kernel for good, so let's not expose it for now. We can
-readd something like it later when the kernel guys decided on a final
-API for this.
-
-Conflicts:
-	TODO
----
- TODO                                  |  9 +++++++++
- man/systemd.resource-control.xml      | 15 +++++----------
- src/core/cgroup.c                     | 16 ++--------------
- src/core/cgroup.h                     |  1 -
- src/core/dbus-cgroup.c                | 10 ++--------
- src/core/dbus-cgroup.h                |  1 -
- src/core/load-fragment-gperf.gperf.m4 |  1 -
- src/core/load-fragment.c              |  7 ++-----
- src/systemctl/systemctl.c             |  2 +-
- 9 files changed, 21 insertions(+), 41 deletions(-)
-
-diff --git a/TODO b/TODO
-index bfeaa81..4c3e14f 100644
---- a/TODO
-+++ b/TODO
-@@ -58,6 +58,15 @@ CGroup Rework Completion:
- 
- Features:
- 
-+* always set memory.user_hierarchy for all cgroups we create
-+
-+* After coming back from hibernation reset hibernation swap partition
-+
-+* mounts: do not test each mount unit against each other mount unit to
-+  determine prefixes. Instead generated list of all prefixes and
-+  interate through that to bring down complexity from O(n^2) to O(n)
-+  when loading units
-+
- * Move backlight and random-seed into /var/lib/systemd
- 
- * If we try to find a unit via a danglign symlink generate a clean
-diff --git a/man/systemd.resource-control.xml b/man/systemd.resource-control.xml
-index 2427f208..de017a7 100644
---- a/man/systemd.resource-control.xml
-+++ b/man/systemd.resource-control.xml
-@@ -134,22 +134,17 @@ along with systemd; If not, see <http://www.gnu.org/licenses/>.
- 
-       <varlistentry>
-         <term><varname>MemoryLimit=<replaceable>bytes</replaceable></varname></term>
--        <term><varname>MemorySoftLimit=<replaceable>bytes</replaceable></varname></term>
- 
-         <listitem>
--          <para>Specify the hard and soft limits on maximum memory
--          usage of the executed processes. The "hard" limit specifies
--          how much process and kernel memory can be used by tasks in
--          this unit, when there is no memory contention. If the kernel
--          detects memory contention, memory reclaim will be performed
--          until the memory usage is within the "soft" limit. Takes a
-+          <para>Specify the limit on maximum memory usage of the
-+          executed processes. The limit specifies how much process and
-+          kernel memory can be used by tasks in this unit. Takes a
-           memory size in bytes. If the value is suffixed with K, M, G
-           or T, the specified memory size is parsed as Kilobytes,
-           Megabytes, Gigabytes, or Terabytes (with the base 1024),
-           respectively. This controls the
--          <literal>memory.limit_in_bytes</literal> and
--          <literal>memory.soft_limit_in_bytes</literal> control group
--          attributes. For details about these control group attributes,
-+          <literal>memory.limit_in_bytes</literal> control group
-+          attribute. For details about this control group attribute,
-           see <ulink
-           url="https://www.kernel.org/doc/Documentation/cgroups/memory.txt">memory.txt</ulink>.</para>
- 
-diff --git a/src/core/cgroup.c b/src/core/cgroup.c
-index 2f1e4a3..8bf4d89 100644
---- a/src/core/cgroup.c
-+++ b/src/core/cgroup.c
-@@ -33,7 +33,7 @@ void cgroup_context_init(CGroupContext *c) {
-          * structure is preinitialized to 0 */
- 
-         c->cpu_shares = 1024;
--        c->memory_limit = c->memory_soft_limit = (uint64_t) -1;
-+        c->memory_limit = (uint64_t) -1;
-         c->blockio_weight = 1000;
- }
- 
-@@ -94,7 +94,6 @@ void cgroup_context_dump(CGroupContext *c, FILE* f, const char *prefix) {
-                 "%sCPUShares=%lu\n"
-                 "%sBlockIOWeight=%lu\n"
-                 "%sMemoryLimit=%" PRIu64 "\n"
--                "%sMemorySoftLimit=%" PRIu64 "\n"
-                 "%sDevicePolicy=%s\n",
-                 prefix, yes_no(c->cpu_accounting),
-                 prefix, yes_no(c->blockio_accounting),
-@@ -102,7 +101,6 @@ void cgroup_context_dump(CGroupContext *c, FILE* f, const char *prefix) {
-                 prefix, c->cpu_shares,
-                 prefix, c->blockio_weight,
-                 prefix, c->memory_limit,
--                prefix, c->memory_soft_limit,
-                 prefix, cgroup_device_policy_to_string(c->device_policy));
- 
-         LIST_FOREACH(device_allow, a, c->device_allow)
-@@ -266,15 +264,6 @@ void cgroup_context_apply(CGroupContext *c, CGroupControllerMask mask, const cha
- 
-                 if (r < 0)
-                         log_error("Failed to set memory.limit_in_bytes on %s: %s", path, strerror(-r));
--
--                if (c->memory_soft_limit != (uint64_t) -1) {
--                        sprintf(buf, "%" PRIu64 "\n", c->memory_soft_limit);
--                        r = cg_set_attribute("memory", path, "memory.soft_limit_in_bytes", buf);
--                } else
--                        r = cg_set_attribute("memory", path, "memory.soft_limit_in_bytes", "-1");
--
--                if (r < 0)
--                        log_error("Failed to set memory.soft_limit_in_bytes on %s: %s", path, strerror(-r));
-         }
- 
-         if (mask & CGROUP_DEVICE) {
-@@ -337,8 +326,7 @@ CGroupControllerMask cgroup_context_get_mask(CGroupContext *c) {
-                 mask |= CGROUP_BLKIO;
- 
-         if (c->memory_accounting ||
--            c->memory_limit != (uint64_t) -1 ||
--            c->memory_soft_limit != (uint64_t) -1)
-+            c->memory_limit != (uint64_t) -1)
-                 mask |= CGROUP_MEMORY;
- 
-         if (c->device_allow || c->device_policy != CGROUP_AUTO)
-diff --git a/src/core/cgroup.h b/src/core/cgroup.h
-index 786bd71..0a079e9 100644
---- a/src/core/cgroup.h
-+++ b/src/core/cgroup.h
-@@ -77,7 +77,6 @@ struct CGroupContext {
-         LIST_HEAD(CGroupBlockIODeviceBandwidth, blockio_device_bandwidths);
- 
-         uint64_t memory_limit;
--        uint64_t memory_soft_limit;
- 
-         CGroupDevicePolicy device_policy;
-         LIST_HEAD(CGroupDeviceAllow, device_allow);
-diff --git a/src/core/dbus-cgroup.c b/src/core/dbus-cgroup.c
-index 1f2a396..9ebcad9 100644
---- a/src/core/dbus-cgroup.c
-+++ b/src/core/dbus-cgroup.c
-@@ -133,7 +133,6 @@ const BusProperty bus_cgroup_context_properties[] = {
-         { "BlockIOWriteBandwidth",   bus_cgroup_append_device_bandwidths, "a(st)", 0                                           },
-         { "MemoryAccounting",        bus_property_append_bool,            "b",     offsetof(CGroupContext, memory_accounting)  },
-         { "MemoryLimit",             bus_property_append_uint64,          "t",     offsetof(CGroupContext, memory_limit)       },
--        { "MemorySoftLimit",         bus_property_append_uint64,          "t",     offsetof(CGroupContext, memory_soft_limit)  },
-         { "DevicePolicy",            bus_cgroup_append_device_policy,     "s",     offsetof(CGroupContext, device_policy)      },
-         { "DeviceAllow",             bus_cgroup_append_device_allow,      "a(ss)", 0                                           },
-         {}
-@@ -418,21 +417,16 @@ int bus_cgroup_set_property(
- 
-                 return 1;
- 
--        } else if (streq(name, "MemoryLimit") || streq(name, "MemorySoftLimit")) {
-+        } else if (streq(name, "MemoryLimit")) {
- 
-                 if (dbus_message_iter_get_arg_type(i) != DBUS_TYPE_UINT64)
-                         return -EINVAL;
- 
-                 if (mode != UNIT_CHECK) {
-                         uint64_t limit;
--
-                         dbus_message_iter_get_basic(i, &limit);
- 
--                        if (streq(name, "MemoryLimit"))
--                                c->memory_limit = limit;
--                        else
--                                c->memory_soft_limit = limit;
--
-+                        c->memory_limit = limit;
-                         unit_write_drop_in_private_format(u, mode, name, "%s=%" PRIu64, name, limit);
-                 }
- 
-diff --git a/src/core/dbus-cgroup.h b/src/core/dbus-cgroup.h
-index 4ce1e7e..e5ac4c3 100644
---- a/src/core/dbus-cgroup.h
-+++ b/src/core/dbus-cgroup.h
-@@ -37,7 +37,6 @@
-         "  <property name=\"BlockIOWriteBandwidth=\" type=\"a(st)\" access=\"read\"/>\n" \
-         "  <property name=\"MemoryAccounting\" type=\"b\" access=\"read\"/>\n" \
-         "  <property name=\"MemoryLimit\" type=\"t\" access=\"read\"/>\n" \
--        "  <property name=\"MemorySoftLimit\" type=\"t\" access=\"read\"/>\n" \
-         "  <property name=\"DevicePolicy\" type=\"s\" access=\"read\"/>\n" \
-         "  <property name=\"DeviceAllow\" type=\"a(ss)\" access=\"read\"/>\n"
- 
-diff --git a/src/core/load-fragment-gperf.gperf.m4 b/src/core/load-fragment-gperf.gperf.m4
-index 3f064a9..31fb7bc 100644
---- a/src/core/load-fragment-gperf.gperf.m4
-+++ b/src/core/load-fragment-gperf.gperf.m4
-@@ -89,7 +89,6 @@ $1.CPUAccounting,                config_parse_bool,                  0,
- $1.CPUShares,                    config_parse_cpu_shares,            0,                             offsetof($1, cgroup_context)
- $1.MemoryAccounting,             config_parse_bool,                  0,                             offsetof($1, cgroup_context.memory_accounting)
- $1.MemoryLimit,                  config_parse_memory_limit,          0,                             offsetof($1, cgroup_context)
--$1.MemorySoftLimit,              config_parse_memory_limit,          0,                             offsetof($1, cgroup_context)
- $1.DeviceAllow,                  config_parse_device_allow,          0,                             offsetof($1, cgroup_context)
- $1.DevicePolicy,                 config_parse_device_policy,         0,                             offsetof($1, cgroup_context.device_policy)
- $1.BlockIOAccounting,            config_parse_bool,                  0,                             offsetof($1, cgroup_context.blockio_accounting)
-diff --git a/src/core/load-fragment.c b/src/core/load-fragment.c
-index ed8602f..6e0a180 100644
---- a/src/core/load-fragment.c
-+++ b/src/core/load-fragment.c
-@@ -2015,14 +2015,11 @@ int config_parse_memory_limit(
-                 void *userdata) {
- 
-         CGroupContext *c = data;
--        uint64_t *limit;
-         off_t bytes;
-         int r;
- 
--        limit = streq(lvalue, "MemoryLimit") ? &c->memory_limit : &c->memory_soft_limit;
--
-         if (isempty(rvalue)) {
--                *limit = (uint64_t) -1;
-+                c->memory_limit = (uint64_t) -1;
-                 return 0;
-         }
- 
-@@ -2035,7 +2032,7 @@ int config_parse_memory_limit(
-                 return 0;
-         }
- 
--        *limit = (uint64_t) bytes;
-+        c->memory_limit = (uint64_t) bytes;
-         return 0;
- }
- 
-diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c
-index 16da293..1080065 100644
---- a/src/systemctl/systemctl.c
-+++ b/src/systemctl/systemctl.c
-@@ -3657,7 +3657,7 @@ static int append_assignment(DBusMessageIter *iter, const char *assignment) {
-                     !dbus_message_iter_append_basic(&sub, DBUS_TYPE_BOOLEAN, &b))
-                         return log_oom();
- 
--        } else if (streq(field, "MemoryLimit") || streq(field, "MemorySoftLimit")) {
-+        } else if (streq(field, "MemoryLimit")) {
-                 off_t bytes;
-                 uint64_t u;
- 
diff --git a/SOURCES/0052-udev-net_id-Introduce-predictable-network-names-for-.patch b/SOURCES/0052-udev-net_id-Introduce-predictable-network-names-for-.patch
new file mode 100644
index 0000000..463d571
--- /dev/null
+++ b/SOURCES/0052-udev-net_id-Introduce-predictable-network-names-for-.patch
@@ -0,0 +1,142 @@
+From 08f8572347ca597147ab761d425e4480885e1995 Mon Sep 17 00:00:00 2001
+From: Hendrik Brueckner <brueckner@redhat.com>
+Date: Thu, 9 Jan 2014 11:28:12 +0100
+Subject: [PATCH] udev/net_id: Introduce predictable network names for Linux on
+ System z
+
+Use the bus-ID to create predicatable devices names for network interfaces
+on Linux on System z instances.  The bus-ID identifies a device in the s390
+channel subsystem.
+
+Network interfaces of device type Ethernet are named as:
+    enccw0.0.1234    (13 characters)
+up to
+    enccwff.7.ffff   (14 characters)
+
+CTC network devices of device type SLIP, use a different prefix as follows:
+    slccw0.0.1234    (13 characters)
+
+See also Red Hat Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=870859
+[tomegun: typical problem of netdevs switching names between reboots.]
+
+Conflicts:
+	src/udev/udev-builtin-net_id.c
+---
+ src/udev/udev-builtin-net_id.c | 64 ++++++++++++++++++++++++++++++++++++++++--
+ 1 file changed, 62 insertions(+), 2 deletions(-)
+
+diff --git a/src/udev/udev-builtin-net_id.c b/src/udev/udev-builtin-net_id.c
+index 9ae8f08..d9de46d 100644
+--- a/src/udev/udev-builtin-net_id.c
++++ b/src/udev/udev-builtin-net_id.c
+@@ -28,6 +28,7 @@
+  *
+  * Two character prefixes based on the type of interface:
+  *   en -- ethernet
++ *   sl -- serial line IP (slip)
+  *   wl -- wlan
+  *   ww -- wwan
+  *
+@@ -101,6 +102,7 @@ enum netname_type{
+         NET_PCI,
+         NET_USB,
+         NET_BCMA,
++        NET_CCWGROUP,
+ };
+ 
+ struct netnames {
+@@ -118,6 +120,8 @@ struct netnames {
+         char usb_ports[IFNAMSIZ];
+ 
+         char bcma_core[IFNAMSIZ];
++
++        char ccw_core[IFNAMSIZ];
+ };
+ 
+ /* retrieve on-board index number and label from firmware */
+@@ -351,6 +355,44 @@ static int names_bcma(struct udev_device *dev, struct netnames *names) {
+         return 0;
+ }
+ 
++static int names_ccw(struct  udev_device *dev, struct netnames *names) {
++        struct udev_device *cdev;
++        const char *bus_id;
++        size_t bus_id_len;
++        int rc;
++
++        /* Retrieve the associated CCW device */
++        cdev = udev_device_get_parent(dev);
++        if (!cdev)
++                return -ENOENT;
++
++        /* Network devices are always grouped CCW devices */
++        if (!streq_ptr("ccwgroup", udev_device_get_subsystem(cdev)))
++                return -ENOENT;
++
++        /* Retrieve bus-ID of the grouped CCW device.  The bus-ID uniquely
++         * identifies the network device on the Linux on System z channel
++         * subsystem.  Note that the bus-ID contains lowercase characters.
++         */
++        bus_id = udev_device_get_sysname(cdev);
++        if (!bus_id)
++                return -ENOENT;
++
++        /* Check the length of the bus-ID.  Rely on that the kernel provides
++         * a correct bus-ID; alternatively, improve this check and parse and
++         * verify each bus-ID part...
++         */
++        bus_id_len = strlen(bus_id);
++        if (!bus_id_len || bus_id_len < 8 || bus_id_len > 9)
++                return -EINVAL;
++
++        /* Store the CCW bus-ID for use as network device name */
++        rc = snprintf(names->ccw_core, sizeof(names->ccw_core), "ccw%s", bus_id);
++        if (rc >= 0 && rc < (int)sizeof(names->ccw_core))
++                names->type = NET_CCWGROUP;
++        return 0;
++}
++
+ static int names_mac(struct udev_device *dev, struct netnames *names) {
+         const char *s;
+         unsigned int i;
+@@ -409,13 +451,21 @@ static int builtin_net_id(struct udev_device *dev, int argc, char *argv[], bool
+         struct netnames names = {};
+         int err;
+ 
+-        /* handle only ARPHRD_ETHER devices */
++        /* handle only ARPHRD_ETHER and ARPHRD_SLIP devices */
+         s = udev_device_get_sysattr_value(dev, "type");
+         if (!s)
+                 return EXIT_FAILURE;
+         i = strtoul(s, NULL, 0);
+-        if (i != 1)
++        switch (i) {
++        case 1: /* ARPHRD_ETHER */
++                prefix = "en";
++                break;
++        case 256: /* ARPHRD_SLIP */
++                prefix = "sl";
++                break;
++        default:
+                 return 0;
++        }
+ 
+         /* skip stacked devices, like VLANs, ... */
+         s = udev_device_get_sysattr_value(dev, "ifindex");
+@@ -447,6 +497,16 @@ static int builtin_net_id(struct udev_device *dev, int argc, char *argv[], bool
+                 ieee_oui(dev, &names, test);
+         }
+ 
++        /* get path names for Linux on System z network devices */
++        err = names_ccw(dev, &names);
++        if (err >= 0 && names.type == NET_CCWGROUP) {
++                char str[IFNAMSIZ];
++
++                if (snprintf(str, sizeof(str), "%s%s", prefix, names.ccw_core) < (int)sizeof(str))
++                        udev_builtin_add_property(dev, test, "ID_NET_NAME_PATH", str);
++                goto out;
++        }
++
+         /* get PCI based path names, we compose only PCI based paths */
+         err = names_pci(dev, &names);
+         if (err < 0)
diff --git a/SOURCES/0053-set-IgnoreOnIsolate-true-for-systemd-cryptsetup-.ser.patch b/SOURCES/0053-set-IgnoreOnIsolate-true-for-systemd-cryptsetup-.ser.patch
deleted file mode 100644
index 28c3c71..0000000
--- a/SOURCES/0053-set-IgnoreOnIsolate-true-for-systemd-cryptsetup-.ser.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-From 0ac89decd89110fa64fe1f9ff7ff5a271026a272 Mon Sep 17 00:00:00 2001
-From: Andrey Borzenkov <arvidjaar@gmail.com>
-Date: Sun, 29 Sep 2013 15:37:30 +0400
-Subject: [PATCH] set IgnoreOnIsolate=true for systemd-cryptsetup@.service
-
-When crypttab contains noauto, cryptsetup service does not have any
-explicit dependencies. If service is started later manually (directly or via
-mount dependency) it will be stopped on isolate.
-
-mount units already have IgnoreOnIsolate set by default. Set it by
-default for cryptsetup units as well.
----
- src/cryptsetup/cryptsetup-generator.c | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/src/cryptsetup/cryptsetup-generator.c b/src/cryptsetup/cryptsetup-generator.c
-index 8792e6b..e1798a3 100644
---- a/src/cryptsetup/cryptsetup-generator.c
-+++ b/src/cryptsetup/cryptsetup-generator.c
-@@ -118,6 +118,7 @@ static int create_disk(
-                 "Conflicts=umount.target\n"
-                 "DefaultDependencies=no\n"
-                 "BindsTo=dev-mapper-%i.device\n"
-+                "IgnoreOnIsolate=true\n"
-                 "After=systemd-readahead-collect.service systemd-readahead-replay.service\n",
-                 f);
- 
diff --git a/SOURCES/0053-tmpfiles-don-t-allow-label_fix-to-print-ENOENT-when-.patch b/SOURCES/0053-tmpfiles-don-t-allow-label_fix-to-print-ENOENT-when-.patch
new file mode 100644
index 0000000..ecb2e74
--- /dev/null
+++ b/SOURCES/0053-tmpfiles-don-t-allow-label_fix-to-print-ENOENT-when-.patch
@@ -0,0 +1,33 @@
+From 5d27397f97e26c9b1e9f01f041c2e68cbfb41eb3 Mon Sep 17 00:00:00 2001
+From: Lukas Nykryn <lnykryn@redhat.com>
+Date: Thu, 9 Jan 2014 18:00:50 +0100
+Subject: [PATCH] tmpfiles: don't allow label_fix to print ENOENT when we want
+ to ignore it
+
+---
+ src/tmpfiles/tmpfiles.c | 5 +----
+ 1 file changed, 1 insertion(+), 4 deletions(-)
+
+diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c
+index 239e56b..9a397af 100644
+--- a/src/tmpfiles/tmpfiles.c
++++ b/src/tmpfiles/tmpfiles.c
+@@ -434,8 +434,6 @@ finish:
+ }
+ 
+ static int item_set_perms_full(Item *i, const char *path, bool ignore_enoent) {
+-        int r;
+-
+         /* not using i->path directly because it may be a glob */
+         if (i->mode_set)
+                 if (chmod(path, i->mode) < 0) {
+@@ -456,8 +454,7 @@ static int item_set_perms_full(Item *i, const char *path, bool ignore_enoent) {
+                         }
+                 }
+ 
+-        r = label_fix(path, false, false);
+-        return r == -ENOENT && ignore_enoent ? 0 : r;
++        return label_fix(path, ignore_enoent, false);
+ }
+ 
+ static int item_set_perms(Item *i, const char *path) {
diff --git a/SOURCES/0054-delta-ensure-that-d_type-will-be-set-on-every-fs.patch b/SOURCES/0054-delta-ensure-that-d_type-will-be-set-on-every-fs.patch
new file mode 100644
index 0000000..ee073d0
--- /dev/null
+++ b/SOURCES/0054-delta-ensure-that-d_type-will-be-set-on-every-fs.patch
@@ -0,0 +1,22 @@
+From 8d48fb915cbfa1b4ad594b597f2567d682bfc635 Mon Sep 17 00:00:00 2001
+From: Lukas Nykryn <lnykryn@redhat.com>
+Date: Thu, 9 Jan 2014 16:43:00 +0100
+Subject: [PATCH] delta: ensure that d_type will be set on every fs
+
+---
+ src/delta/delta.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/src/delta/delta.c b/src/delta/delta.c
+index b3272d9..193642d 100644
+--- a/src/delta/delta.c
++++ b/src/delta/delta.c
+@@ -291,6 +291,8 @@ static int enumerate_dir(Hashmap *top, Hashmap *bottom, Hashmap *drops, const ch
+                 if (!de)
+                         break;
+ 
++                dirent_ensure_type(d, de);
++
+                 if (dropins && de->d_type == DT_DIR && endswith(de->d_name, ".d"))
+                         enumerate_dir_d(top, bottom, drops, path, de->d_name);
+ 
diff --git a/SOURCES/0054-main-don-t-free-fds-array-twice.patch b/SOURCES/0054-main-don-t-free-fds-array-twice.patch
deleted file mode 100644
index d9fdedc..0000000
--- a/SOURCES/0054-main-don-t-free-fds-array-twice.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-From 32eda9ada3dade4c9f6a8a176ee326ccdd61fda8 Mon Sep 17 00:00:00 2001
-From: Lennart Poettering <lennart@poettering.net>
-Date: Tue, 1 Oct 2013 00:06:48 +0200
-Subject: [PATCH] main: don't free fds array twice
-
----
- src/core/main.c | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/src/core/main.c b/src/core/main.c
-index 72bd542..662d16d 100644
---- a/src/core/main.c
-+++ b/src/core/main.c
-@@ -1567,6 +1567,7 @@ int main(int argc, char *argv[]) {
-         /* This will close all file descriptors that were opened, but
-          * not claimed by any unit. */
-         fdset_free(fds);
-+        fds = NULL;
- 
-         if (serialization) {
-                 fclose(serialization);
diff --git a/SOURCES/0055-local-fix-memory-leak-when-putting-together-locale-s.patch b/SOURCES/0055-local-fix-memory-leak-when-putting-together-locale-s.patch
deleted file mode 100644
index e17e503..0000000
--- a/SOURCES/0055-local-fix-memory-leak-when-putting-together-locale-s.patch
+++ /dev/null
@@ -1,147 +0,0 @@
-From 64d6d09b47d22db8a82373229c828e7cf1373955 Mon Sep 17 00:00:00 2001
-From: Lennart Poettering <lennart@poettering.net>
-Date: Tue, 1 Oct 2013 00:08:30 +0200
-Subject: [PATCH] local: fix memory leak when putting together locale settings
-
-Also, we need to use proper strv_env_xyz() calls when putting together
-the environment array, since otherwise settings won't be properly
-overriden.
-
-And let's get rid of strv_appendf(), is overkill and there was only one
-user.
----
- src/core/locale-setup.c | 31 +++++++++++++++++++++++++++----
- src/core/manager.c      |  4 +++-
- src/shared/strv.c       | 15 ---------------
- src/shared/strv.h       |  1 -
- 4 files changed, 30 insertions(+), 21 deletions(-)
-
-diff --git a/src/core/locale-setup.c b/src/core/locale-setup.c
-index 31374ac..276deb9 100644
---- a/src/core/locale-setup.c
-+++ b/src/core/locale-setup.c
-@@ -29,6 +29,7 @@
- #include "virt.h"
- #include "fileio.h"
- #include "strv.h"
-+#include "env-util.h"
- 
- enum {
-         /* We don't list LC_ALL here on purpose. People should be
-@@ -69,7 +70,7 @@ static const char * const variable_names[_VARIABLE_MAX] = {
- };
- 
- int locale_setup(char ***environment) {
--        char **env;
-+        char **add;
-         char *variables[_VARIABLE_MAX] = {};
-         int r = 0, i;
- 
-@@ -119,22 +120,44 @@ int locale_setup(char ***environment) {
-                         log_warning("Failed to read /etc/locale.conf: %s", strerror(-r));
-         }
- 
-+        add = NULL;
-         for (i = 0; i < _VARIABLE_MAX; i++) {
-+                char *s;
-+
-                 if (!variables[i])
-                         continue;
- 
--                env = strv_appendf(*environment, "%s=%s", variable_names[i], variables[i]);
--                if (!env) {
-+                s = strjoin(variable_names[i], "=", variables[i], NULL);
-+                if (!s) {
-+                        r = -ENOMEM;
-+                        goto finish;
-+                }
-+
-+                if (strv_push(&add, s) < 0) {
-+                        free(s);
-+                        r = -ENOMEM;
-+                        goto finish;
-+                }
-+        }
-+
-+        if (!strv_isempty(add)) {
-+                char **e;
-+
-+                e = strv_env_merge(2, *environment, add);
-+                if (!e) {
-                         r = -ENOMEM;
-                         goto finish;
-                 }
- 
--                *environment = env;
-+                strv_free(*environment);
-+                *environment = e;
-         }
- 
-         r = 0;
- 
- finish:
-+        strv_free(add);
-+
-         for (i = 0; i < _VARIABLE_MAX; i++)
-                 free(variables[i]);
- 
-diff --git a/src/core/manager.c b/src/core/manager.c
-index dadbedd..30b49ff 100644
---- a/src/core/manager.c
-+++ b/src/core/manager.c
-@@ -2666,14 +2666,16 @@ void manager_undo_generators(Manager *m) {
- }
- 
- int manager_environment_add(Manager *m, char **environment) {
--
-         char **e = NULL;
-         assert(m);
-+
-         e = strv_env_merge(2, m->environment, environment);
-         if (!e)
-                 return -ENOMEM;
-+
-         strv_free(m->environment);
-         m->environment = e;
-+
-         return 0;
- }
- 
-diff --git a/src/shared/strv.c b/src/shared/strv.c
-index 2df478f..adeee28 100644
---- a/src/shared/strv.c
-+++ b/src/shared/strv.c
-@@ -424,21 +424,6 @@ fail:
-         return NULL;
- }
- 
--char **strv_appendf(char **l, const char *format, ...) {
--        va_list ap;
--        _cleanup_free_ char *s = NULL;
--        int r;
--
--        va_start(ap, format);
--        r = vasprintf(&s, format, ap);
--        va_end(ap);
--
--        if (r < 0)
--                return NULL;
--
--        return strv_append(l, s);
--}
--
- int strv_push(char ***l, char *value) {
-         char **c;
-         unsigned n;
-diff --git a/src/shared/strv.h b/src/shared/strv.h
-index 4e80ea6..d1f2a0e 100644
---- a/src/shared/strv.h
-+++ b/src/shared/strv.h
-@@ -42,7 +42,6 @@ unsigned strv_length(char * const *l) _pure_;
- char **strv_merge(char **a, char **b);
- char **strv_merge_concat(char **a, char **b, const char *suffix);
- char **strv_append(char **l, const char *s);
--char **strv_appendf(char **l, const char *format, ...) _printf_attr_(2, 3);
- int strv_extend(char ***l, const char *value);
- int strv_push(char ***l, char *value);
- 
diff --git a/SOURCES/0055-shell-completion-dump-has-moved-to-systemd-analyze.patch b/SOURCES/0055-shell-completion-dump-has-moved-to-systemd-analyze.patch
new file mode 100644
index 0000000..041deda
--- /dev/null
+++ b/SOURCES/0055-shell-completion-dump-has-moved-to-systemd-analyze.patch
@@ -0,0 +1,81 @@
+From 544af839ed7dd06d20fb4efd201dd93dc0e98a15 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Mon, 21 Oct 2013 18:53:57 -0400
+Subject: [PATCH] shell-completion: dump has moved to systemd-analyze
+
+Rename NO_OPTION to STANDALONE for consistency with other files.
+---
+ shell-completion/bash/systemctl       | 2 +-
+ shell-completion/bash/systemd-analyze | 4 ++--
+ shell-completion/zsh/_systemctl       | 3 +--
+ shell-completion/zsh/_systemd-analyze | 1 +
+ 4 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/shell-completion/bash/systemctl b/shell-completion/bash/systemctl
+index e335ee8..eea4b6d 100644
+--- a/shell-completion/bash/systemctl
++++ b/shell-completion/bash/systemctl
+@@ -137,7 +137,7 @@ _systemctl () {
+                      [JOBS]='cancel'
+                 [SNAPSHOTS]='delete'
+                      [ENVS]='set-environment unset-environment'
+-               [STANDALONE]='daemon-reexec daemon-reload default dump
++               [STANDALONE]='daemon-reexec daemon-reload default
+                              emergency exit halt hibernate hybrid-sleep kexec list-jobs
+                              list-sockets list-units list-unit-files poweroff reboot rescue
+                              show-environment suspend get-default'
+diff --git a/shell-completion/bash/systemd-analyze b/shell-completion/bash/systemd-analyze
+index 5bd6768..b65466b 100644
+--- a/shell-completion/bash/systemd-analyze
++++ b/shell-completion/bash/systemd-analyze
+@@ -31,7 +31,7 @@ _systemd_analyze() {
+         local OPTS='--help --version --system --user --from-pattern --to-pattern --order --require'
+ 
+         local -A VERBS=(
+-                [NO_OPTION]='time blame plot'
++                [STANDALONE]='time blame plot dump'
+                 [CRITICAL_CHAIN]='critical-chain'
+                 [DOT]='dot'
+                 [LOG_LEVEL]='set-log-level'
+@@ -55,7 +55,7 @@ _systemd_analyze() {
+         if [[ -z $verb ]]; then
+                 comps=${VERBS[*]}
+ 
+-        elif __contains_word "$verb" ${VERBS[NO_OPTION]}; then
++        elif __contains_word "$verb" ${VERBS[STANDALONE]}; then
+                 if [[ $cur = -* ]]; then
+                         comps='--help --version --system --user'
+                 fi
+diff --git a/shell-completion/zsh/_systemctl b/shell-completion/zsh/_systemctl
+index 298e97e..3959cd5 100644
+--- a/shell-completion/zsh/_systemctl
++++ b/shell-completion/zsh/_systemctl
+@@ -38,7 +38,6 @@
+     "is-enabled:Check whether unit files are enabled"
+     "list-jobs:List jobs"
+     "cancel:Cancel all, one, or more jobs"
+-    "dump:Dump server status"
+     "snapshot:Create a snapshot"
+     "delete:Remove one or more snapshots"
+     "show-environment:Dump environment"
+@@ -264,7 +263,7 @@ done
+ (( $+functions[_systemctl_link] )) || _systemctl_link() { _files }
+ 
+ # no systemctl completion for:
+-#    [STANDALONE]='daemon-reexec daemon-reload default dump
++#    [STANDALONE]='daemon-reexec daemon-reload default
+ #                  emergency exit halt kexec list-jobs list-units
+ #                  list-unit-files poweroff reboot rescue show-environment'
+ #         [NAME]='snapshot load'
+diff --git a/shell-completion/zsh/_systemd-analyze b/shell-completion/zsh/_systemd-analyze
+index 37c60f5..2eda5fe 100644
+--- a/shell-completion/zsh/_systemd-analyze
++++ b/shell-completion/zsh/_systemd-analyze
+@@ -15,6 +15,7 @@ _systemd_analyze_command(){
+         'critical-chain:Print a tree of the time critical chain of units'
+         'plot:Output SVG graphic showing service initialization'
+         'dot:Dump dependency graph (in dot(1) format)'
++        'dump:Dump server status'
+         'set-log-level:Set systemd log threshold'
+     )
+ 
diff --git a/SOURCES/0056-hashmap-size-hashmap-bucket-array-dynamically.patch b/SOURCES/0056-hashmap-size-hashmap-bucket-array-dynamically.patch
deleted file mode 100644
index 2d3c916..0000000
--- a/SOURCES/0056-hashmap-size-hashmap-bucket-array-dynamically.patch
+++ /dev/null
@@ -1,470 +0,0 @@
-From 6b28d81fea017382e098c24514ae229fcb0a4a7d Mon Sep 17 00:00:00 2001
-From: Lennart Poettering <lennart@poettering.net>
-Date: Tue, 1 Oct 2013 00:13:18 +0200
-Subject: [PATCH] hashmap: size hashmap bucket array dynamically
-
-Instead of fixing the hashmap bucket array to 127 entries dynamically
-size it, starting with a smaller one of 31. As soon as a fill level of
-75% is reached, quadruple the size, and so on.
-
-This should siginficantly optimize the lookup time in large tables
-(from O(n) back to O(1)), and save memory on smaller tables (which most
-are).
----
- src/shared/hashmap.c    | 152 ++++++++++++++++++++++++++++++++++++------------
- src/shared/hashmap.h    |   1 +
- src/test/test-hashmap.c |  28 ++++++++-
- 3 files changed, 143 insertions(+), 38 deletions(-)
-
-diff --git a/src/shared/hashmap.c b/src/shared/hashmap.c
-index 4ea1a0f..6330792 100644
---- a/src/shared/hashmap.c
-+++ b/src/shared/hashmap.c
-@@ -28,7 +28,7 @@
- #include "hashmap.h"
- #include "macro.h"
- 
--#define NBUCKETS 127
-+#define INITIAL_N_BUCKETS 31
- 
- struct hashmap_entry {
-         const void *key;
-@@ -42,13 +42,13 @@ struct Hashmap {
-         compare_func_t compare_func;
- 
-         struct hashmap_entry *iterate_list_head, *iterate_list_tail;
--        unsigned n_entries;
-+
-+        struct hashmap_entry ** buckets;
-+        unsigned n_buckets, n_entries;
- 
-         bool from_pool;
- };
- 
--#define BY_HASH(h) ((struct hashmap_entry**) ((uint8_t*) (h) + ALIGN(sizeof(Hashmap))))
--
- struct pool {
-         struct pool *next;
-         unsigned n_tiles;
-@@ -64,6 +64,11 @@ static void *first_entry_tile = NULL;
- static void* allocate_tile(struct pool **first_pool, void **first_tile, size_t tile_size) {
-         unsigned i;
- 
-+        /* When a tile is released we add it to the list and simply
-+         * place the next pointer at its offset 0. */
-+
-+        assert(tile_size >= sizeof(void*));
-+
-         if (*first_tile) {
-                 void *r;
- 
-@@ -173,7 +178,7 @@ Hashmap *hashmap_new(hash_func_t hash_func, compare_func_t compare_func) {
- 
-         b = is_main_thread();
- 
--        size = ALIGN(sizeof(Hashmap)) + NBUCKETS * sizeof(struct hashmap_entry*);
-+        size = ALIGN(sizeof(Hashmap)) + INITIAL_N_BUCKETS * sizeof(struct hashmap_entry*);
- 
-         if (b) {
-                 h = allocate_tile(&first_hashmap_pool, &first_hashmap_tile, size);
-@@ -191,23 +196,30 @@ Hashmap *hashmap_new(hash_func_t hash_func, compare_func_t compare_func) {
-         h->hash_func = hash_func ? hash_func : trivial_hash_func;
-         h->compare_func = compare_func ? compare_func : trivial_compare_func;
- 
-+        h->n_buckets = INITIAL_N_BUCKETS;
-         h->n_entries = 0;
-         h->iterate_list_head = h->iterate_list_tail = NULL;
- 
-+        h->buckets = (struct hashmap_entry**) ((uint8_t*) h + ALIGN(sizeof(Hashmap)));
-+
-         h->from_pool = b;
- 
-         return h;
- }
- 
- int hashmap_ensure_allocated(Hashmap **h, hash_func_t hash_func, compare_func_t compare_func) {
-+        Hashmap *q;
-+
-         assert(h);
- 
-         if (*h)
-                 return 0;
- 
--        if (!(*h = hashmap_new(hash_func, compare_func)))
-+        q = hashmap_new(hash_func, compare_func);
-+        if (!q)
-                 return -ENOMEM;
- 
-+        *h = q;
-         return 0;
- }
- 
-@@ -216,11 +228,11 @@ static void link_entry(Hashmap *h, struct hashmap_entry *e, unsigned hash) {
-         assert(e);
- 
-         /* Insert into hash table */
--        e->bucket_next = BY_HASH(h)[hash];
-+        e->bucket_next = h->buckets[hash];
-         e->bucket_previous = NULL;
--        if (BY_HASH(h)[hash])
--                BY_HASH(h)[hash]->bucket_previous = e;
--        BY_HASH(h)[hash] = e;
-+        if (h->buckets[hash])
-+                h->buckets[hash]->bucket_previous = e;
-+        h->buckets[hash] = e;
- 
-         /* Insert into iteration list */
-         e->iterate_previous = h->iterate_list_tail;
-@@ -260,7 +272,7 @@ static void unlink_entry(Hashmap *h, struct hashmap_entry *e, unsigned hash) {
-         if (e->bucket_previous)
-                 e->bucket_previous->bucket_next = e->bucket_next;
-         else
--                BY_HASH(h)[hash] = e->bucket_next;
-+                h->buckets[hash] = e->bucket_next;
- 
-         assert(h->n_entries >= 1);
-         h->n_entries--;
-@@ -272,7 +284,7 @@ static void remove_entry(Hashmap *h, struct hashmap_entry *e) {
-         assert(h);
-         assert(e);
- 
--        hash = h->hash_func(e->key) % NBUCKETS;
-+        hash = h->hash_func(e->key) % h->n_buckets;
- 
-         unlink_entry(h, e, hash);
- 
-@@ -291,6 +303,9 @@ void hashmap_free(Hashmap*h) {
- 
-         hashmap_clear(h);
- 
-+        if (h->buckets != (struct hashmap_entry**) ((uint8_t*) h + ALIGN(sizeof(Hashmap))))
-+                free(h->buckets);
-+
-         if (h->from_pool)
-                 deallocate_tile(&first_hashmap_tile, h);
-         else
-@@ -357,22 +372,72 @@ void hashmap_clear_free_free(Hashmap *h) {
- static struct hashmap_entry *hash_scan(Hashmap *h, unsigned hash, const void *key) {
-         struct hashmap_entry *e;
-         assert(h);
--        assert(hash < NBUCKETS);
-+        assert(hash < h->n_buckets);
- 
--        for (e = BY_HASH(h)[hash]; e; e = e->bucket_next)
-+        for (e = h->buckets[hash]; e; e = e->bucket_next)
-                 if (h->compare_func(e->key, key) == 0)
-                         return e;
- 
-         return NULL;
- }
- 
-+static bool resize_buckets(Hashmap *h) {
-+        unsigned m;
-+        struct hashmap_entry **n, *i;
-+
-+        assert(h);
-+
-+        if (_likely_(h->n_entries*4 < h->n_buckets*3))
-+                return false;
-+
-+        /* Increase by four */
-+        m = (h->n_entries+1)*4-1;
-+
-+        /* If we hit OOM we simply risk packed hashmaps... */
-+        n = new0(struct hashmap_entry*, m);
-+        if (!n)
-+                return false;
-+
-+        for (i = h->iterate_list_head; i; i = i->iterate_next) {
-+                unsigned hash, x;
-+
-+                hash = h->hash_func(i->key);
-+
-+                /* First, drop from old bucket table */
-+                if (i->bucket_next)
-+                        i->bucket_next->bucket_previous = i->bucket_previous;
-+
-+                if (i->bucket_previous)
-+                        i->bucket_previous->bucket_next = i->bucket_next;
-+                else
-+                        h->buckets[hash % h->n_buckets] = i->bucket_next;
-+
-+                /* Then, add to new backet table */
-+                x = hash % m;
-+
-+                i->bucket_next = n[x];
-+                i->bucket_previous = NULL;
-+                if (n[x])
-+                        n[x]->bucket_previous = i;
-+                n[x] = i;
-+        }
-+
-+        if (h->buckets != (struct hashmap_entry**) ((uint8_t*) h + ALIGN(sizeof(Hashmap))))
-+                free(h->buckets);
-+
-+        h->buckets = n;
-+        h->n_buckets = m;
-+
-+        return true;
-+}
-+
- int hashmap_put(Hashmap *h, const void *key, void *value) {
-         struct hashmap_entry *e;
-         unsigned hash;
- 
-         assert(h);
- 
--        hash = h->hash_func(key) % NBUCKETS;
-+        hash = h->hash_func(key) % h->n_buckets;
-         e = hash_scan(h, hash, key);
-         if (e) {
-                 if (e->value == value)
-@@ -380,6 +445,9 @@ int hashmap_put(Hashmap *h, const void *key, void *value) {
-                 return -EEXIST;
-         }
- 
-+        if (resize_buckets(h))
-+                hash = h->hash_func(key) % h->n_buckets;
-+
-         if (h->from_pool)
-                 e = allocate_tile(&first_entry_pool, &first_entry_tile, sizeof(struct hashmap_entry));
-         else
-@@ -402,7 +470,7 @@ int hashmap_replace(Hashmap *h, const void *key, void *value) {
- 
-         assert(h);
- 
--        hash = h->hash_func(key) % NBUCKETS;
-+        hash = h->hash_func(key) % h->n_buckets;
-         e = hash_scan(h, hash, key);
-         if (e) {
-                 e->key = key;
-@@ -419,7 +487,7 @@ int hashmap_update(Hashmap *h, const void *key, void *value) {
- 
-         assert(h);
- 
--        hash = h->hash_func(key) % NBUCKETS;
-+        hash = h->hash_func(key) % h->n_buckets;
-         e = hash_scan(h, hash, key);
-         if (!e)
-                 return -ENOENT;
-@@ -435,7 +503,7 @@ void* hashmap_get(Hashmap *h, const void *key) {
-         if (!h)
-                 return NULL;
- 
--        hash = h->hash_func(key) % NBUCKETS;
-+        hash = h->hash_func(key) % h->n_buckets;
-         e = hash_scan(h, hash, key);
-         if (!e)
-                 return NULL;
-@@ -450,7 +518,7 @@ void* hashmap_get2(Hashmap *h, const void *key, void **key2) {
-         if (!h)
-                 return NULL;
- 
--        hash = h->hash_func(key) % NBUCKETS;
-+        hash = h->hash_func(key) % h->n_buckets;
-         e = hash_scan(h, hash, key);
-         if (!e)
-                 return NULL;
-@@ -467,7 +535,7 @@ bool hashmap_contains(Hashmap *h, const void *key) {
-         if (!h)
-                 return false;
- 
--        hash = h->hash_func(key) % NBUCKETS;
-+        hash = h->hash_func(key) % h->n_buckets;
- 
-         if (!hash_scan(h, hash, key))
-                 return false;
-@@ -483,7 +551,7 @@ void* hashmap_remove(Hashmap *h, const void *key) {
-         if (!h)
-                 return NULL;
- 
--        hash = h->hash_func(key) % NBUCKETS;
-+        hash = h->hash_func(key) % h->n_buckets;
- 
-         if (!(e = hash_scan(h, hash, key)))
-                 return NULL;
-@@ -501,11 +569,11 @@ int hashmap_remove_and_put(Hashmap *h, const void *old_key, const void *new_key,
-         if (!h)
-                 return -ENOENT;
- 
--        old_hash = h->hash_func(old_key) % NBUCKETS;
-+        old_hash = h->hash_func(old_key) % h->n_buckets;
-         if (!(e = hash_scan(h, old_hash, old_key)))
-                 return -ENOENT;
- 
--        new_hash = h->hash_func(new_key) % NBUCKETS;
-+        new_hash = h->hash_func(new_key) % h->n_buckets;
-         if (hash_scan(h, new_hash, new_key))
-                 return -EEXIST;
- 
-@@ -526,11 +594,11 @@ int hashmap_remove_and_replace(Hashmap *h, const void *old_key, const void *new_
-         if (!h)
-                 return -ENOENT;
- 
--        old_hash = h->hash_func(old_key) % NBUCKETS;
-+        old_hash = h->hash_func(old_key) % h->n_buckets;
-         if (!(e = hash_scan(h, old_hash, old_key)))
-                 return -ENOENT;
- 
--        new_hash = h->hash_func(new_key) % NBUCKETS;
-+        new_hash = h->hash_func(new_key) % h->n_buckets;
-         if ((k = hash_scan(h, new_hash, new_key)))
-                 if (e != k)
-                         remove_entry(h, k);
-@@ -552,9 +620,10 @@ void* hashmap_remove_value(Hashmap *h, const void *key, void *value) {
-         if (!h)
-                 return NULL;
- 
--        hash = h->hash_func(key) % NBUCKETS;
-+        hash = h->hash_func(key) % h->n_buckets;
- 
--        if (!(e = hash_scan(h, hash, key)))
-+        e = hash_scan(h, hash, key);
-+        if (!e)
-                 return NULL;
- 
-         if (e->value != value)
-@@ -642,9 +711,10 @@ void *hashmap_iterate_skip(Hashmap *h, const void *key, Iterator *i) {
-         if (!h)
-                 return NULL;
- 
--        hash = h->hash_func(key) % NBUCKETS;
-+        hash = h->hash_func(key) % h->n_buckets;
- 
--        if (!(e = hash_scan(h, hash, key)))
-+        e = hash_scan(h, hash, key);
-+        if (!e)
-                 return NULL;
- 
-         *i = (Iterator) e;
-@@ -723,6 +793,14 @@ unsigned hashmap_size(Hashmap *h) {
-         return h->n_entries;
- }
- 
-+unsigned hashmap_buckets(Hashmap *h) {
-+
-+        if (!h)
-+                return 0;
-+
-+        return h->n_buckets;
-+}
-+
- bool hashmap_isempty(Hashmap *h) {
- 
-         if (!h)
-@@ -766,12 +844,12 @@ void hashmap_move(Hashmap *h, Hashmap *other) {
- 
-                 n = e->iterate_next;
- 
--                h_hash = h->hash_func(e->key) % NBUCKETS;
-+                h_hash = h->hash_func(e->key) % h->n_buckets;
- 
-                 if (hash_scan(h, h_hash, e->key))
-                         continue;
- 
--                other_hash = other->hash_func(e->key) % NBUCKETS;
-+                other_hash = other->hash_func(e->key) % other->n_buckets;
- 
-                 unlink_entry(other, e, other_hash);
-                 link_entry(h, e, h_hash);
-@@ -787,12 +865,13 @@ int hashmap_move_one(Hashmap *h, Hashmap *other, const void *key) {
- 
-         assert(h);
- 
--        h_hash = h->hash_func(key) % NBUCKETS;
-+        h_hash = h->hash_func(key) % h->n_buckets;
-         if (hash_scan(h, h_hash, key))
-                 return -EEXIST;
- 
--        other_hash = other->hash_func(key) % NBUCKETS;
--        if (!(e = hash_scan(other, other_hash, key)))
-+        other_hash = other->hash_func(key) % other->n_buckets;
-+        e = hash_scan(other, other_hash, key);
-+        if (!e)
-                 return -ENOENT;
- 
-         unlink_entry(other, e, other_hash);
-@@ -806,7 +885,8 @@ Hashmap *hashmap_copy(Hashmap *h) {
- 
-         assert(h);
- 
--        if (!(copy = hashmap_new(h->hash_func, h->compare_func)))
-+        copy = hashmap_new(h->hash_func, h->compare_func);
-+        if (!copy)
-                 return NULL;
- 
-         if (hashmap_merge(copy, h) < 0) {
-@@ -845,7 +925,7 @@ void *hashmap_next(Hashmap *h, const void *key) {
-         if (!h)
-                 return NULL;
- 
--        hash = h->hash_func(key) % NBUCKETS;
-+        hash = h->hash_func(key) % h->n_buckets;
-         e = hash_scan(h, hash, key);
-         if (!e)
-                 return NULL;
-diff --git a/src/shared/hashmap.h b/src/shared/hashmap.h
-index 15b7e27..3d4f672 100644
---- a/src/shared/hashmap.h
-+++ b/src/shared/hashmap.h
-@@ -76,6 +76,7 @@ int hashmap_move_one(Hashmap *h, Hashmap *other, const void *key);
- 
- unsigned hashmap_size(Hashmap *h) _pure_;
- bool hashmap_isempty(Hashmap *h) _pure_;
-+unsigned hashmap_buckets(Hashmap *h) _pure_;
- 
- void *hashmap_iterate(Hashmap *h, Iterator *i, const void **key);
- void *hashmap_iterate_backwards(Hashmap *h, Iterator *i, const void **key);
-diff --git a/src/test/test-hashmap.c b/src/test/test-hashmap.c
-index 2aead79..349e8e5 100644
---- a/src/test/test-hashmap.c
-+++ b/src/test/test-hashmap.c
-@@ -467,6 +467,30 @@ static void test_hashmap_get(void) {
-         hashmap_free_free(m);
- }
- 
-+static void test_hashmap_many(void) {
-+        Hashmap *h;
-+        unsigned i;
-+
-+#define N_ENTRIES 100000
-+
-+        assert_se(h = hashmap_new(NULL, NULL));
-+
-+        for (i = 1; i < N_ENTRIES*3; i+=3) {
-+                assert_se(hashmap_put(h, UINT_TO_PTR(i), UINT_TO_PTR(i)) >= 0);
-+                assert_se(PTR_TO_UINT(hashmap_get(h, UINT_TO_PTR(i))) == i);
-+        }
-+
-+        for (i = 1; i < N_ENTRIES*3; i++)
-+                assert_se(hashmap_contains(h, UINT_TO_PTR(i)) == (i % 3 == 1));
-+
-+        log_info("%u <= %u * 0.75 = %g", hashmap_size(h), hashmap_buckets(h), hashmap_buckets(h) * 0.75);
-+
-+        assert_se(hashmap_size(h) <= hashmap_buckets(h) * 0.75);
-+        assert_se(hashmap_size(h) == N_ENTRIES);
-+
-+        hashmap_free(h);
-+}
-+
- static void test_uint64_compare_func(void) {
-         assert_se(uint64_compare_func("a", "a") == 0);
-         assert_se(uint64_compare_func("a", "b") == -1);
-@@ -484,8 +508,7 @@ static void test_string_compare_func(void) {
-         assert_se(string_compare_func("fred", "fred") == 0);
- }
- 
--int main(int argc, const char *argv[])
--{
-+int main(int argc, const char *argv[]) {
-         test_hashmap_copy();
-         test_hashmap_get_strv();
-         test_hashmap_move_one();
-@@ -502,6 +525,7 @@ int main(int argc, const char *argv[])
-         test_hashmap_isempty();
-         test_hashmap_get();
-         test_hashmap_size();
-+        test_hashmap_many();
-         test_uint64_compare_func();
-         test_trivial_compare_func();
-         test_string_compare_func();
diff --git a/SOURCES/0056-shell-completion-remove-load-from-systemctl.patch b/SOURCES/0056-shell-completion-remove-load-from-systemctl.patch
new file mode 100644
index 0000000..7227e58
--- /dev/null
+++ b/SOURCES/0056-shell-completion-remove-load-from-systemctl.patch
@@ -0,0 +1,46 @@
+From 9e658a10c1de26c8b4a18a7e55440bb8bd819f20 Mon Sep 17 00:00:00 2001
+From: Lukas Nykryn <lnykryn@redhat.com>
+Date: Wed, 15 Jan 2014 15:31:07 +0100
+Subject: [PATCH] shell-completion: remove load from systemctl
+
+Conflicts:
+	shell-completion/bash/systemctl
+---
+ shell-completion/bash/systemctl | 2 +-
+ shell-completion/zsh/_systemctl | 3 +--
+ 2 files changed, 2 insertions(+), 3 deletions(-)
+
+diff --git a/shell-completion/bash/systemctl b/shell-completion/bash/systemctl
+index eea4b6d..84149e3 100644
+--- a/shell-completion/bash/systemctl
++++ b/shell-completion/bash/systemctl
+@@ -141,7 +141,7 @@ _systemctl () {
+                              emergency exit halt hibernate hybrid-sleep kexec list-jobs
+                              list-sockets list-units list-unit-files poweroff reboot rescue
+                              show-environment suspend get-default'
+-                     [NAME]='snapshot load'
++                     [NAME]='snapshot'
+                      [FILE]='link'
+                   [TARGETS]='set-default'
+         )
+diff --git a/shell-completion/zsh/_systemctl b/shell-completion/zsh/_systemctl
+index 3959cd5..6d98cb6 100644
+--- a/shell-completion/zsh/_systemctl
++++ b/shell-completion/zsh/_systemctl
+@@ -24,7 +24,6 @@
+     "status:Show runtime status of one or more units"
+     "show:Show properties of one or more units/jobs or the manager"
+     "reset-failed:Reset failed state for all, one, or more units"
+-    "load:Load one or more units"
+     "list-unit-files:List installed unit files"
+     "enable:Enable one or more unit files"
+     "disable:Disable one or more unit files"
+@@ -266,7 +265,7 @@ done
+ #    [STANDALONE]='daemon-reexec daemon-reload default
+ #                  emergency exit halt kexec list-jobs list-units
+ #                  list-unit-files poweroff reboot rescue show-environment'
+-#         [NAME]='snapshot load'
++#         [NAME]='snapshot'
+ 
+ _systemctl_caching_policy()
+ {
diff --git a/SOURCES/0057-Fix-SELinux-check-for-transient-units.-1008864.patch b/SOURCES/0057-Fix-SELinux-check-for-transient-units.-1008864.patch
new file mode 100644
index 0000000..e456505
--- /dev/null
+++ b/SOURCES/0057-Fix-SELinux-check-for-transient-units.-1008864.patch
@@ -0,0 +1,105 @@
+From 96bb682b6fa33faaff5c3db7506e9864fe5c09dc Mon Sep 17 00:00:00 2001
+From: Dan Walsh <dwalsh@redhat.com>
+Date: Thu, 16 Jan 2014 12:59:10 +0100
+Subject: [PATCH] Fix SELinux check for transient units. (#1008864)
+
+SELinux does not have a path to check for a snapshot servic creation.
+This ends up giving us a bogus check.
+
+On snapshot creation we should check if the remote process type, has the ability to start a service with the type that systemd is running with.
+---
+ src/core/dbus-manager.c   |  6 +++---
+ src/core/selinux-access.c |  9 +++++----
+ src/core/selinux-access.h | 13 +++++++++++++
+ 3 files changed, 21 insertions(+), 7 deletions(-)
+
+diff --git a/src/core/dbus-manager.c b/src/core/dbus-manager.c
+index 8f4d017..7be5d13 100644
+--- a/src/core/dbus-manager.c
++++ b/src/core/dbus-manager.c
+@@ -1102,7 +1102,7 @@ static DBusHandlerResult bus_manager_message_handler(DBusConnection *connection,
+                 dbus_bool_t cleanup;
+                 Snapshot *s;
+ 
+-                SELINUX_ACCESS_CHECK(connection, message, "start");
++                SELINUX_RUNTIME_UNIT_ACCESS_CHECK(connection, message, "start");
+ 
+                 if (!dbus_message_get_args(
+                                     message,
+@@ -1155,7 +1155,7 @@ static DBusHandlerResult bus_manager_message_handler(DBusConnection *connection,
+                         return bus_send_error_reply(connection, message, &error, -ENOENT);
+                 }
+ 
+-                SELINUX_UNIT_ACCESS_CHECK(u, connection, message, "stop");
++                SELINUX_RUNTIME_UNIT_ACCESS_CHECK(connection, message, "stop");
+                 snapshot_remove(SNAPSHOT(u));
+ 
+                 reply = dbus_message_new_method_return(message);
+@@ -1765,7 +1765,7 @@ static DBusHandlerResult bus_manager_message_handler(DBusConnection *connection,
+                 if (r < 0)
+                         return bus_send_error_reply(connection, message, &error, r);
+ 
+-                SELINUX_UNIT_ACCESS_CHECK(u, connection, message, "start");
++                SELINUX_RUNTIME_UNIT_ACCESS_CHECK(connection, message, "start");
+ 
+                 if (u->load_state != UNIT_NOT_FOUND || set_size(u->dependencies[UNIT_REFERENCED_BY]) > 0) {
+                         dbus_set_error(&error, BUS_ERROR_UNIT_EXISTS, "Unit %s already exists.", name);
+diff --git a/src/core/selinux-access.c b/src/core/selinux-access.c
+index 0a3ee18..5d85b26 100644
+--- a/src/core/selinux-access.c
++++ b/src/core/selinux-access.c
+@@ -374,8 +374,9 @@ int selinux_access_check(
+                 goto finish;
+         }
+ 
+-        if (path) {
+-                tclass = "service";
++
++        tclass = "service";
++        if (path && !strneq(path,"system", strlen("system"))) {
+                 /* get the file context of the unit file */
+                 r = getfilecon(path, &fcon);
+                 if (r < 0) {
+@@ -384,9 +385,9 @@ int selinux_access_check(
+                         log_error("Failed to get security context on %s: %m",path);
+                         goto finish;
+                 }
+-
+         } else {
+-                tclass = "system";
++                if (path)
++                        tclass = "system";
+                 r = getcon(&fcon);
+                 if (r < 0) {
+                         dbus_set_error(error, DBUS_ERROR_ACCESS_DENIED, "Failed to get current context.");
+diff --git a/src/core/selinux-access.h b/src/core/selinux-access.h
+index 2d7ac64..92acd69 100644
+--- a/src/core/selinux-access.h
++++ b/src/core/selinux-access.h
+@@ -36,6 +36,18 @@ int selinux_access_check(DBusConnection *connection, DBusMessage *message, const
+                 DBusConnection *_c = (connection);                      \
+                 DBusMessage *_m = (message);                            \
+                 dbus_error_init(&_error);                               \
++                _r = selinux_access_check(_c, _m, "system", (permission), &_error); \
++                if (_r < 0)                                             \
++                        return bus_send_error_reply(_c, _m, &_error, _r); \
++        } while (false)
++
++#define SELINUX_RUNTIME_UNIT_ACCESS_CHECK(connection, message, permission) \
++        do {                                                            \
++                DBusError _error;                                       \
++                int _r;                                                 \
++                DBusConnection *_c = (connection);                      \
++                DBusMessage *_m = (message);                            \
++                dbus_error_init(&_error);                               \
+                 _r = selinux_access_check(_c, _m, NULL, (permission), &_error); \
+                 if (_r < 0)                                             \
+                         return bus_send_error_reply(_c, _m, &_error, _r); \
+@@ -57,6 +69,7 @@ int selinux_access_check(DBusConnection *connection, DBusMessage *message, const
+ #else
+ 
+ #define SELINUX_ACCESS_CHECK(connection, message, permission) do { } while (false)
++#define SELINUX_RUNTIME_UNIT_ACCESS_CHECK(connection, message, permission) do { } while (false)
+ #define SELINUX_UNIT_ACCESS_CHECK(unit, connection, message, permission) do { } while (false)
+ 
+ #endif
diff --git a/SOURCES/0057-smack-setup-fix-path-to-Smack-CIPSO-mappings.patch b/SOURCES/0057-smack-setup-fix-path-to-Smack-CIPSO-mappings.patch
deleted file mode 100644
index 701d29c..0000000
--- a/SOURCES/0057-smack-setup-fix-path-to-Smack-CIPSO-mappings.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-From d235f3854b80b7e3bedd96391bd9ea8db5b8ff93 Mon Sep 17 00:00:00 2001
-From: Patrick McCarty <patrick.mccarty@linux.intel.com>
-Date: Mon, 30 Sep 2013 17:43:38 -0700
-Subject: [PATCH] smack-setup: fix path to Smack/CIPSO mappings
-
-The correct path to the dir with CIPSO mappings is /etc/smack/cipso.d/;
-/etc/smack/cipso is a file that can include these mappings as well,
-though it is no longer supported in upstream libsmack.
----
- src/core/smack-setup.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/core/smack-setup.c b/src/core/smack-setup.c
-index d67a84a..1434dea 100644
---- a/src/core/smack-setup.c
-+++ b/src/core/smack-setup.c
-@@ -40,7 +40,7 @@
- #include "label.h"
- 
- #define SMACK_CONFIG "/etc/smack/accesses.d/"
--#define CIPSO_CONFIG "/etc/smack/cipso/"
-+#define CIPSO_CONFIG "/etc/smack/cipso.d/"
- 
- #ifdef HAVE_SMACK
- 
diff --git a/SOURCES/0058-acpi-fptd-fix-memory-leak-in-acpi_get_boot_usec.patch b/SOURCES/0058-acpi-fptd-fix-memory-leak-in-acpi_get_boot_usec.patch
new file mode 100644
index 0000000..2d0a17d
--- /dev/null
+++ b/SOURCES/0058-acpi-fptd-fix-memory-leak-in-acpi_get_boot_usec.patch
@@ -0,0 +1,22 @@
+From eaa9e2f4c332d7cf8ee4bc9e377edb2043031e85 Mon Sep 17 00:00:00 2001
+From: Lukas Nykryn <lnykryn@redhat.com>
+Date: Wed, 2 Oct 2013 13:39:49 +0200
+Subject: [PATCH] acpi-fptd: fix memory leak in acpi_get_boot_usec
+
+---
+ src/shared/acpi-fpdt.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/shared/acpi-fpdt.c b/src/shared/acpi-fpdt.c
+index b094f34..a7c83ed 100644
+--- a/src/shared/acpi-fpdt.c
++++ b/src/shared/acpi-fpdt.c
+@@ -81,7 +81,7 @@ struct acpi_fpdt_boot {
+ };
+ 
+ int acpi_get_boot_usec(usec_t *loader_start, usec_t *loader_exit) {
+-        char *buf;
++        _cleanup_free_ char *buf;
+         struct acpi_table_header *tbl;
+         size_t l;
+         struct acpi_fpdt_header *rec;
diff --git a/SOURCES/0058-fix-lingering-references-to-var-lib-backlight-random.patch b/SOURCES/0058-fix-lingering-references-to-var-lib-backlight-random.patch
deleted file mode 100644
index 498eca3..0000000
--- a/SOURCES/0058-fix-lingering-references-to-var-lib-backlight-random.patch
+++ /dev/null
@@ -1,51 +0,0 @@
-From 43c6d0a4d2fec97929de9aef0a36815d82ad22ac Mon Sep 17 00:00:00 2001
-From: Dave Reisner <dreisner@archlinux.org>
-Date: Wed, 2 Oct 2013 07:46:24 -0400
-Subject: [PATCH] fix lingering references to /var/lib/{backlight,random-seed}
-
-This should have been part of ef5bfcf668e6029faa78534dfe.
----
- man/systemd-backlight@.service.xml  | 2 +-
- man/systemd-random-seed.service.xml | 2 +-
- units/systemd-backlight@.service.in | 2 +-
- 3 files changed, 3 insertions(+), 3 deletions(-)
-
-diff --git a/man/systemd-backlight@.service.xml b/man/systemd-backlight@.service.xml
-index 2b73625..4318964 100644
---- a/man/systemd-backlight@.service.xml
-+++ b/man/systemd-backlight@.service.xml
-@@ -58,7 +58,7 @@
-                 is a service that restores the display backlight
-                 brightness at early-boot and saves it at shutdown. On
-                 disk, the backlight brightness is stored in
--                <filename>/var/lib/backlight/</filename>. Note that by
-+                <filename>/var/lib/systemd/backlight/</filename>. Note that by
-                 default, only firmware backlight devices are
-                 saved/restored.</para>
-         </refsect1>
-diff --git a/man/systemd-random-seed.service.xml b/man/systemd-random-seed.service.xml
-index 8cd14b7..e5cd037 100644
---- a/man/systemd-random-seed.service.xml
-+++ b/man/systemd-random-seed.service.xml
-@@ -61,7 +61,7 @@
-                 for details. Saving/restoring the random seed across
-                 boots increases the amount of available entropy early
-                 at boot. On disk the random seed is stored in
--                <filename>/var/lib/random-seed</filename>.</para>
-+                <filename>/var/lib/systemd/random-seed</filename>.</para>
-         </refsect1>
- 
-         <refsect1>
-diff --git a/units/systemd-backlight@.service.in b/units/systemd-backlight@.service.in
-index b0e75db..5caa5d5 100644
---- a/units/systemd-backlight@.service.in
-+++ b/units/systemd-backlight@.service.in
-@@ -9,7 +9,7 @@
- Description=Load/Save Screen Backlight Brightness of %I
- Documentation=man:systemd-backlight@.service(8)
- DefaultDependencies=no
--RequiresMountsFor=/var/lib/backlight
-+RequiresMountsFor=/var/lib/systemd/backlight
- Conflicts=shutdown.target
- After=systemd-readahead-collect.service systemd-readahead-replay.service systemd-remount-fs.service
- Before=sysinit.target shutdown.target
diff --git a/SOURCES/0059-acpi-make-sure-we-never-free-an-uninitialized-pointe.patch b/SOURCES/0059-acpi-make-sure-we-never-free-an-uninitialized-pointe.patch
new file mode 100644
index 0000000..ec6e9d9
--- /dev/null
+++ b/SOURCES/0059-acpi-make-sure-we-never-free-an-uninitialized-pointe.patch
@@ -0,0 +1,22 @@
+From 9257a03a02a35f12e6d410dd16bf003c9bae742e Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart@poettering.net>
+Date: Wed, 2 Oct 2013 14:03:56 +0200
+Subject: [PATCH] acpi: make sure we never free an uninitialized pointer
+
+---
+ src/shared/acpi-fpdt.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/shared/acpi-fpdt.c b/src/shared/acpi-fpdt.c
+index a7c83ed..af58c7c 100644
+--- a/src/shared/acpi-fpdt.c
++++ b/src/shared/acpi-fpdt.c
+@@ -81,7 +81,7 @@ struct acpi_fpdt_boot {
+ };
+ 
+ int acpi_get_boot_usec(usec_t *loader_start, usec_t *loader_exit) {
+-        _cleanup_free_ char *buf;
++        _cleanup_free_ char *buf = NULL;
+         struct acpi_table_header *tbl;
+         size_t l;
+         struct acpi_fpdt_header *rec;
diff --git a/SOURCES/0059-cryptsetup-fix-OOM-handling-when-parsing-mount-optio.patch b/SOURCES/0059-cryptsetup-fix-OOM-handling-when-parsing-mount-optio.patch
deleted file mode 100644
index dbcb754..0000000
--- a/SOURCES/0059-cryptsetup-fix-OOM-handling-when-parsing-mount-optio.patch
+++ /dev/null
@@ -1,45 +0,0 @@
-From c201b69ff022a9527323d2445b11861ccbf3cfad Mon Sep 17 00:00:00 2001
-From: Lennart Poettering <lennart@poettering.net>
-Date: Wed, 2 Oct 2013 19:36:28 +0200
-Subject: [PATCH] cryptsetup: fix OOM handling when parsing mount options
-
----
- src/cryptsetup/cryptsetup.c | 11 ++++++-----
- 1 file changed, 6 insertions(+), 5 deletions(-)
-
-diff --git a/src/cryptsetup/cryptsetup.c b/src/cryptsetup/cryptsetup.c
-index 22b5eea..769c3e4 100644
---- a/src/cryptsetup/cryptsetup.c
-+++ b/src/cryptsetup/cryptsetup.c
-@@ -74,7 +74,7 @@ static int parse_one_option(const char *option) {
- 
-                 t = strdup(option+7);
-                 if (!t)
--                        return -ENOMEM;
-+                        return log_oom();
- 
-                 free(opt_cipher);
-                 opt_cipher = t;
-@@ -89,9 +89,10 @@ static int parse_one_option(const char *option) {
-         } else if (startswith(option, "tcrypt-keyfile=")) {
- 
-                 opt_type = CRYPT_TCRYPT;
--                if (path_is_absolute(option+15))
--                        opt_tcrypt_keyfiles = strv_append(opt_tcrypt_keyfiles, strdup(option+15));
--                else
-+                if (path_is_absolute(option+15)) {
-+                        if (strv_extend(&opt_tcrypt_keyfiles, option + 15) < 0)
-+                                return log_oom();
-+                } else
-                         log_error("Key file path '%s' is not absolute. Ignoring.", option+15);
- 
-         } else if (startswith(option, "keyfile-size=")) {
-@@ -113,7 +114,7 @@ static int parse_one_option(const char *option) {
- 
-                 t = strdup(option+5);
-                 if (!t)
--                        return -ENOMEM;
-+                        return log_oom();
- 
-                 free(opt_hash);
-                 opt_hash = t;
diff --git a/SOURCES/0060-journald-add-missing-error-check.patch b/SOURCES/0060-journald-add-missing-error-check.patch
deleted file mode 100644
index 8dff9a2..0000000
--- a/SOURCES/0060-journald-add-missing-error-check.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-From 69538099422c80bfef9c8761645c0a3fc64cc803 Mon Sep 17 00:00:00 2001
-From: Lennart Poettering <lennart@poettering.net>
-Date: Wed, 2 Oct 2013 19:36:43 +0200
-Subject: [PATCH] journald: add missing error check
-
----
- src/journal/journal-file.c | 2 ++
- 1 file changed, 2 insertions(+)
-
-diff --git a/src/journal/journal-file.c b/src/journal/journal-file.c
-index 1236403..81c344f 100644
---- a/src/journal/journal-file.c
-+++ b/src/journal/journal-file.c
-@@ -907,6 +907,8 @@ static int journal_file_append_field(
- 
-         osize = offsetof(Object, field.payload) + size;
-         r = journal_file_append_object(f, OBJECT_FIELD, osize, &o, &p);
-+        if (r < 0)
-+                return r;
- 
-         o->field.hash = htole64(hash);
-         memcpy(o->field.payload, field, size);
diff --git a/SOURCES/0060-systemctl-fix-name-mangling-for-sysv-units.patch b/SOURCES/0060-systemctl-fix-name-mangling-for-sysv-units.patch
new file mode 100644
index 0000000..2e8df3b
--- /dev/null
+++ b/SOURCES/0060-systemctl-fix-name-mangling-for-sysv-units.patch
@@ -0,0 +1,131 @@
+From f4cad2f52718b386ab8c233d6d702e808acfb844 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?V=C3=A1clav=20Pavl=C3=ADn?= <vpavlin@redhat.com>
+Date: Wed, 2 Oct 2013 16:42:42 +0200
+Subject: [PATCH] systemctl: fix name mangling for sysv units
+
+---
+ src/systemctl/systemctl.c | 45 ++++++++++++++++++---------------------------
+ 1 file changed, 18 insertions(+), 27 deletions(-)
+
+diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c
+index 0d1a487..036828b 100644
+--- a/src/systemctl/systemctl.c
++++ b/src/systemctl/systemctl.c
+@@ -4218,11 +4218,10 @@ static int set_environment(DBusConnection *bus, char **args) {
+         return 0;
+ }
+ 
+-static int enable_sysv_units(char **args) {
++static int enable_sysv_units(const char *verb, char **args) {
+         int r = 0;
+ 
+ #if defined(HAVE_SYSV_COMPAT) && defined(HAVE_CHKCONFIG)
+-        const char *verb = args[0];
+         unsigned f = 1, t = 1;
+         LookupPaths paths = {};
+ 
+@@ -4242,7 +4241,7 @@ static int enable_sysv_units(char **args) {
+                 return r;
+ 
+         r = 0;
+-        for (f = 1; args[f]; f++) {
++        for (f = 0; args[f]; f++) {
+                 const char *name;
+                 _cleanup_free_ char *p = NULL, *q = NULL;
+                 bool found_native = false, found_sysv;
+@@ -4365,7 +4364,7 @@ finish:
+         lookup_paths_free(&paths);
+ 
+         /* Drop all SysV units */
+-        for (f = 1, t = 1; args[f]; f++) {
++        for (f = 0, t = 0; args[f]; f++) {
+ 
+                 if (isempty(args[f]))
+                         continue;
+@@ -4423,16 +4422,16 @@ static int enable_unit(DBusConnection *bus, char **args) {
+ 
+         dbus_error_init(&error);
+ 
+-        r = enable_sysv_units(args);
+-        if (r < 0)
+-                return r;
+-
+         if (!args[1])
+                 return 0;
+ 
+         r = mangle_names(args+1, &mangled_names);
+         if (r < 0)
+-                goto finish;
++                return r;
++
++        r = enable_sysv_units(verb, mangled_names);
++        if (r < 0)
++                return r;
+ 
+         if (!bus || avoid_bus()) {
+                 if (streq(verb, "enable")) {
+@@ -4624,11 +4623,15 @@ static int unit_is_enabled(DBusConnection *bus, char **args) {
+         _cleanup_dbus_message_unref_ DBusMessage *reply = NULL;
+         bool enabled;
+         char **name;
+-        char *n;
++        _cleanup_strv_free_ char **mangled_names = NULL;
+ 
+         dbus_error_init(&error);
+ 
+-        r = enable_sysv_units(args);
++        r = mangle_names(args+1, &mangled_names);
++        if (r < 0)
++                return r;
++
++        r = enable_sysv_units(args[0], mangled_names);
+         if (r < 0)
+                 return r;
+ 
+@@ -4636,16 +4639,10 @@ static int unit_is_enabled(DBusConnection *bus, char **args) {
+ 
+         if (!bus || avoid_bus()) {
+ 
+-                STRV_FOREACH(name, args+1) {
++                STRV_FOREACH(name, mangled_names) {
+                         UnitFileState state;
+ 
+-                        n = unit_name_mangle(*name);
+-                        if (!n)
+-                                return log_oom();
+-
+-                        state = unit_file_get_state(arg_scope, arg_root, n);
+-
+-                        free(n);
++                        state = unit_file_get_state(arg_scope, arg_root, *name);
+ 
+                         if (state < 0)
+                                 return state;
+@@ -4660,13 +4657,9 @@ static int unit_is_enabled(DBusConnection *bus, char **args) {
+                 }
+ 
+         } else {
+-                STRV_FOREACH(name, args+1) {
++                STRV_FOREACH(name, mangled_names) {
+                         const char *s;
+ 
+-                        n = unit_name_mangle(*name);
+-                        if (!n)
+-                                return log_oom();
+-
+                         r = bus_method_call_with_reply (
+                                         bus,
+                                         "org.freedesktop.systemd1",
+@@ -4675,11 +4668,9 @@ static int unit_is_enabled(DBusConnection *bus, char **args) {
+                                         "GetUnitFileState",
+                                         &reply,
+                                         NULL,
+-                                        DBUS_TYPE_STRING, &n,
++                                        DBUS_TYPE_STRING, name,
+                                         DBUS_TYPE_INVALID);
+ 
+-                        free(n);
+-
+                         if (r)
+                                 return r;
+ 
diff --git a/SOURCES/0061-bus-fix-potentially-uninitialized-memory-access.patch b/SOURCES/0061-bus-fix-potentially-uninitialized-memory-access.patch
deleted file mode 100644
index ac10649..0000000
--- a/SOURCES/0061-bus-fix-potentially-uninitialized-memory-access.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From 6ea4084c96dd151eca88b3277148e249e3eebe38 Mon Sep 17 00:00:00 2001
-From: Lennart Poettering <lennart@poettering.net>
-Date: Wed, 2 Oct 2013 19:37:11 +0200
-Subject: [PATCH] bus: fix potentially uninitialized memory access
-
----
- src/libsystemd-bus/bus-internal.c | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/src/libsystemd-bus/bus-internal.c b/src/libsystemd-bus/bus-internal.c
-index 0e66f3d..cac948e 100644
---- a/src/libsystemd-bus/bus-internal.c
-+++ b/src/libsystemd-bus/bus-internal.c
-@@ -63,7 +63,7 @@ bool object_path_is_valid(const char *p) {
- 
- bool interface_name_is_valid(const char *p) {
-         const char *q;
--        bool dot, found_dot;
-+        bool dot, found_dot = false;
- 
-         if (isempty(p))
-                 return false;
-@@ -103,7 +103,7 @@ bool interface_name_is_valid(const char *p) {
- 
- bool service_name_is_valid(const char *p) {
-         const char *q;
--        bool dot, found_dot, unique;
-+        bool dot, found_dot = false, unique;
- 
-         if (isempty(p))
-                 return false;
diff --git a/SOURCES/0061-execute-more-debugging-messages.patch b/SOURCES/0061-execute-more-debugging-messages.patch
new file mode 100644
index 0000000..5093eea
--- /dev/null
+++ b/SOURCES/0061-execute-more-debugging-messages.patch
@@ -0,0 +1,121 @@
+From a454e9c726630fe4811a1c93b2d88b0e77b3094f Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Wed, 28 Aug 2013 08:01:30 -0400
+Subject: [PATCH] execute: more debugging messages
+
+---
+ src/core/execute.c     | 35 +++++++++++++++++++++--------------
+ src/login/pam-module.c |  3 ++-
+ 2 files changed, 23 insertions(+), 15 deletions(-)
+
+diff --git a/src/core/execute.c b/src/core/execute.c
+index a53ef48..981b9e4 100644
+--- a/src/core/execute.c
++++ b/src/core/execute.c
+@@ -317,12 +317,12 @@ static int setup_input(const ExecContext *context, int socket_fd, bool apply_tty
+         case EXEC_INPUT_TTY_FAIL: {
+                 int fd, r;
+ 
+-                if ((fd = acquire_terminal(
+-                                     tty_path(context),
+-                                     i == EXEC_INPUT_TTY_FAIL,
+-                                     i == EXEC_INPUT_TTY_FORCE,
+-                                     false,
+-                                     (usec_t) -1)) < 0)
++                fd = acquire_terminal(tty_path(context),
++                                      i == EXEC_INPUT_TTY_FAIL,
++                                      i == EXEC_INPUT_TTY_FORCE,
++                                      false,
++                                      (usec_t) -1);
++                if (fd < 0)
+                         return fd;
+ 
+                 if (fd != STDIN_FILENO) {
+@@ -748,6 +748,7 @@ static int setup_pam(
+         char **e = NULL;
+         bool close_session = false;
+         pid_t pam_pid = 0, parent_pid;
++        int flags = 0;
+ 
+         assert(name);
+         assert(user);
+@@ -760,6 +761,9 @@ static int setup_pam(
+          * daemon. We do things this way to ensure that the main PID
+          * of the daemon is the one we initially fork()ed. */
+ 
++        if (log_get_max_level() < LOG_PRI(LOG_DEBUG))
++                flags |= PAM_SILENT;
++
+         pam_code = pam_start(name, user, &conv, &handle);
+         if (pam_code != PAM_SUCCESS) {
+                 handle = NULL;
+@@ -772,11 +776,11 @@ static int setup_pam(
+                         goto fail;
+         }
+ 
+-        pam_code = pam_acct_mgmt(handle, PAM_SILENT);
++        pam_code = pam_acct_mgmt(handle, flags);
+         if (pam_code != PAM_SUCCESS)
+                 goto fail;
+ 
+-        pam_code = pam_open_session(handle, PAM_SILENT);
++        pam_code = pam_open_session(handle, flags);
+         if (pam_code != PAM_SUCCESS)
+                 goto fail;
+ 
+@@ -850,7 +854,7 @@ static int setup_pam(
+ 
+                 /* If our parent died we'll end the session */
+                 if (getppid() != parent_pid) {
+-                        pam_code = pam_close_session(handle, PAM_DATA_SILENT);
++                        pam_code = pam_close_session(handle, flags);
+                         if (pam_code != PAM_SUCCESS)
+                                 goto child_finish;
+                 }
+@@ -858,7 +862,7 @@ static int setup_pam(
+                 r = 0;
+ 
+         child_finish:
+-                pam_end(handle, pam_code | PAM_DATA_SILENT);
++                pam_end(handle, pam_code | flags);
+                 _exit(r);
+         }
+ 
+@@ -880,16 +884,19 @@ static int setup_pam(
+         return 0;
+ 
+ fail:
+-        if (pam_code != PAM_SUCCESS)
++        if (pam_code != PAM_SUCCESS) {
++                log_error("PAM failed: %s", pam_strerror(handle, pam_code));
+                 err = -EPERM;  /* PAM errors do not map to errno */
+-        else
++        } else {
++                log_error("PAM failed: %m");
+                 err = -errno;
++        }
+ 
+         if (handle) {
+                 if (close_session)
+-                        pam_code = pam_close_session(handle, PAM_DATA_SILENT);
++                        pam_code = pam_close_session(handle, flags);
+ 
+-                pam_end(handle, pam_code | PAM_DATA_SILENT);
++                pam_end(handle, pam_code | flags);
+         }
+ 
+         strv_free(e);
+diff --git a/src/login/pam-module.c b/src/login/pam-module.c
+index 49296b5..973daf7 100644
+--- a/src/login/pam-module.c
++++ b/src/login/pam-module.c
+@@ -199,7 +199,8 @@ _public_ PAM_EXTERN int pam_sm_open_session(
+ 
+         dbus_error_init(&error);
+ 
+-        /* pam_syslog(handle, LOG_INFO, "pam-systemd initializing"); */
++        if (debug)
++                pam_syslog(handle, LOG_INFO, "pam-systemd initializing");
+ 
+         /* Make this a NOP on non-logind systems */
+         if (!logind_running())
diff --git a/SOURCES/0062-dbus-fix-return-value-of-dispatch_rqueue.patch b/SOURCES/0062-dbus-fix-return-value-of-dispatch_rqueue.patch
deleted file mode 100644
index 010cdd1..0000000
--- a/SOURCES/0062-dbus-fix-return-value-of-dispatch_rqueue.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-From 26a238ce83143c6bac8afa4639ba4dcfd9d48ca7 Mon Sep 17 00:00:00 2001
-From: Lennart Poettering <lennart@poettering.net>
-Date: Wed, 2 Oct 2013 19:37:30 +0200
-Subject: [PATCH] dbus: fix return value of dispatch_rqueue()
-
----
- src/libsystemd-bus/sd-bus.c | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/src/libsystemd-bus/sd-bus.c b/src/libsystemd-bus/sd-bus.c
-index 3f766fb..db0880f 100644
---- a/src/libsystemd-bus/sd-bus.c
-+++ b/src/libsystemd-bus/sd-bus.c
-@@ -1215,11 +1215,11 @@ static int dispatch_rqueue(sd_bus *bus, sd_bus_message **m) {
-                 if (r == 0)
-                         return ret;
- 
--                r = 1;
-+                ret = 1;
-         } while (!z);
- 
-         *m = z;
--        return 1;
-+        return ret;
- }
- 
- int sd_bus_send(sd_bus *bus, sd_bus_message *m, uint64_t *serial) {
diff --git a/SOURCES/0062-logind-fix-bus-introspection-data-for-TakeControl.patch b/SOURCES/0062-logind-fix-bus-introspection-data-for-TakeControl.patch
new file mode 100644
index 0000000..7b09e47
--- /dev/null
+++ b/SOURCES/0062-logind-fix-bus-introspection-data-for-TakeControl.patch
@@ -0,0 +1,22 @@
+From 52fe02b97504dfefb89db203cf7c6e93679ff681 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart@poettering.net>
+Date: Fri, 4 Oct 2013 21:16:40 +0200
+Subject: [PATCH] logind: fix bus introspection data for TakeControl()
+
+---
+ src/login/logind-session-dbus.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/login/logind-session-dbus.c b/src/login/logind-session-dbus.c
+index 5f6bafb..be4e01c 100644
+--- a/src/login/logind-session-dbus.c
++++ b/src/login/logind-session-dbus.c
+@@ -41,7 +41,7 @@
+         "   <arg name=\"who\" type=\"s\"/>\n"                           \
+         "   <arg name=\"signal\" type=\"s\"/>\n"                        \
+         "  </method>\n"                                                 \
+-        "  <method name=\"TakeControl\"/>\n"                            \
++        "  <method name=\"TakeControl\">\n"                             \
+         "   <arg name=\"force\" type=\"b\"/>\n"                         \
+         "  </method>\n"                                                 \
+         "  <method name=\"ReleaseControl\"/>\n"                         \
diff --git a/SOURCES/0063-modules-load-fix-error-handling.patch b/SOURCES/0063-modules-load-fix-error-handling.patch
deleted file mode 100644
index 8859cae..0000000
--- a/SOURCES/0063-modules-load-fix-error-handling.patch
+++ /dev/null
@@ -1,24 +0,0 @@
-From caf4ebe6cde955a39445b7a94f1173fef3d40d95 Mon Sep 17 00:00:00 2001
-From: Lennart Poettering <lennart@poettering.net>
-Date: Wed, 2 Oct 2013 19:37:44 +0200
-Subject: [PATCH] modules-load: fix error handling
-
----
- src/modules-load/modules-load.c | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/src/modules-load/modules-load.c b/src/modules-load/modules-load.c
-index 7b19ee0..49ee420 100644
---- a/src/modules-load/modules-load.c
-+++ b/src/modules-load/modules-load.c
-@@ -302,8 +302,8 @@ int main(int argc, char *argv[]) {
- 
-                 STRV_FOREACH(i, arg_proc_cmdline_modules) {
-                         k = load_module(ctx, *i);
--                        if (k < 0)
--                                r = EXIT_FAILURE;
-+                        if (k < 0 && r == 0)
-+                                r = k;
-                 }
- 
-                 r = conf_files_list_nulstr(&files, ".conf", NULL, conf_file_dirs);
diff --git a/SOURCES/0063-utf8-fix-utf8_is_printable.patch b/SOURCES/0063-utf8-fix-utf8_is_printable.patch
new file mode 100644
index 0000000..0074c63
--- /dev/null
+++ b/SOURCES/0063-utf8-fix-utf8_is_printable.patch
@@ -0,0 +1,44 @@
+From 91eda57764f26d3ebdbf8194a528d8d60d0f409a Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Sat, 5 Oct 2013 22:47:52 -0400
+Subject: [PATCH] utf8: fix utf8_is_printable
+
+---
+ src/shared/utf8.c    | 5 +++--
+ src/test/test-utf8.c | 1 +
+ 2 files changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/src/shared/utf8.c b/src/shared/utf8.c
+index a8e28ac..31120af 100644
+--- a/src/shared/utf8.c
++++ b/src/shared/utf8.c
+@@ -141,14 +141,15 @@ bool utf8_is_printable(const char* str, size_t length) {
+ 
+         assert(str);
+ 
+-        for (p = (const uint8_t*) str; length; p++) {
++        for (p = (const uint8_t*) str; length;) {
+                 int encoded_len = utf8_encoded_valid_unichar((const char *)p);
+-                int32_t val = utf8_encoded_to_unichar((const char*)p);
++                int val = utf8_encoded_to_unichar((const char*)p);
+ 
+                 if (encoded_len < 0 || val < 0 || is_unicode_control(val))
+                         return false;
+ 
+                 length -= encoded_len;
++                p += encoded_len;
+         }
+ 
+         return true;
+diff --git a/src/test/test-utf8.c b/src/test/test-utf8.c
+index 7bd0db1..f0182ee 100644
+--- a/src/test/test-utf8.c
++++ b/src/test/test-utf8.c
+@@ -26,6 +26,7 @@ static void test_utf8_is_printable(void) {
+         assert_se(utf8_is_printable("ascii is valid\tunicode", 22));
+         assert_se(utf8_is_printable("\342\204\242", 3));
+         assert_se(!utf8_is_printable("\341\204", 2));
++        assert_se(utf8_is_printable("ąę", 4));
+ }
+ 
+ static void test_utf8_is_valid(void) {
diff --git a/SOURCES/0064-efi-never-call-qsort-on-potentially-NULL-arrays.patch b/SOURCES/0064-efi-never-call-qsort-on-potentially-NULL-arrays.patch
deleted file mode 100644
index d4518da..0000000
--- a/SOURCES/0064-efi-never-call-qsort-on-potentially-NULL-arrays.patch
+++ /dev/null
@@ -1,23 +0,0 @@
-From 8744e02186cd7253aebc84043de7455ef0044e2d Mon Sep 17 00:00:00 2001
-From: Lennart Poettering <lennart@poettering.net>
-Date: Wed, 2 Oct 2013 19:38:09 +0200
-Subject: [PATCH] efi: never call qsort on potentially NULL arrays
-
----
- src/shared/efivars.c | 3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
-diff --git a/src/shared/efivars.c b/src/shared/efivars.c
-index 8d004ba..99340c9 100644
---- a/src/shared/efivars.c
-+++ b/src/shared/efivars.c
-@@ -383,7 +383,8 @@ int efi_get_boot_options(uint16_t **options) {
-                 list[count ++] = id;
-         }
- 
--        qsort(list, count, sizeof(uint16_t), cmp_uint16);
-+        if (list)
-+                qsort(list, count, sizeof(uint16_t), cmp_uint16);
- 
-         *options = list;
-         return count;
diff --git a/SOURCES/0064-keymap-Fix-Samsung-900X-34-C.patch b/SOURCES/0064-keymap-Fix-Samsung-900X-34-C.patch
new file mode 100644
index 0000000..4782f3a
--- /dev/null
+++ b/SOURCES/0064-keymap-Fix-Samsung-900X-34-C.patch
@@ -0,0 +1,39 @@
+From 774b623c772bbb716b74c8927b6f90cfbce795b9 Mon Sep 17 00:00:00 2001
+From: Martin Pitt <martinpitt@gnome.org>
+Date: Wed, 9 Oct 2013 16:05:15 +0200
+Subject: [PATCH] keymap: Fix Samsung 900X[34]C
+
+It appears that it's not really the 900 vs. 940 or the X3 vs X4, but the
+A/B/C/D suffix after that which makes the difference between the keymaps. On a
+NP900X3C-A04RU you get
+
+   MODALIAS=dmi:bvn*:bvr*:bd*:svnSAMSUNGELECTRONICSCO.,LTD.:pn900X3C/900X3D/900X4C/900X4D:*
+
+So change the matches to use AB vs. CDG as the differentiator.
+
+Thanks to Anatoly Markov for reporting and testing!
+---
+ hwdb/60-keyboard.hwdb | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/hwdb/60-keyboard.hwdb b/hwdb/60-keyboard.hwdb
+index 20d398f..b497f92 100644
+--- a/hwdb/60-keyboard.hwdb
++++ b/hwdb/60-keyboard.hwdb
+@@ -904,6 +904,7 @@ keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*550P*:pvr*
+  KEYBOARD_KEY_a9=!                                      # Fn Lock - Function lock off
+ 
+ keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*700Z*:pvr*
++keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*900X[34][CDG]*:pvr*
+ keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*940X3G*:pvr*
+  KEYBOARD_KEY_ce=!prog1                                 # Fn+F1 launch settings
+  KEYBOARD_KEY_a0=!mute                                  # Fn+F6 mute
+@@ -915,7 +916,7 @@ keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*940X3G*:pvr*
+ 
+ # Series 9
+ keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*90X3A*:pvr*
+-keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*900X[34]*:pvr*
++keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*900X[34][AB]*:pvr*
+  KEYBOARD_KEY_ce=!                                      # Fn+F8 keyboard backlight up
+  KEYBOARD_KEY_8d=!                                      # Fn+F7 keyboard backlight down
+  KEYBOARD_KEY_96=!                                      # Fn+F1 performance mode (?)
diff --git a/SOURCES/0065-do-not-accept-garbage-from-acpi-firmware-performance.patch b/SOURCES/0065-do-not-accept-garbage-from-acpi-firmware-performance.patch
new file mode 100644
index 0000000..531aa76
--- /dev/null
+++ b/SOURCES/0065-do-not-accept-garbage-from-acpi-firmware-performance.patch
@@ -0,0 +1,30 @@
+From d6987c081c5b0d1a2d9083b3d50fb78c63ab4904 Mon Sep 17 00:00:00 2001
+From: Kay Sievers <kay@vrfy.org>
+Date: Thu, 10 Oct 2013 01:38:11 +0200
+Subject: [PATCH] do not accept "garbage" from acpi firmware performance data
+ (FPDT)
+
+00000000  46 42 50 54 38 00 00 00  02 00 30 02 00 00 00 00  |FBPT8.....0.....|
+00000010  23 45 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |#E..............|
+00000020  f5 6a 51 00 00 00 00 00  00 00 00 00 00 00 00 00  |.jQ.............|
+00000030  00 00 00 00 00 00 00 00  70 74 61 6c 58 00 00 00  |........ptalX...|
+---
+ src/shared/acpi-fpdt.c | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/src/shared/acpi-fpdt.c b/src/shared/acpi-fpdt.c
+index af58c7c..75648b4 100644
+--- a/src/shared/acpi-fpdt.c
++++ b/src/shared/acpi-fpdt.c
+@@ -146,6 +146,11 @@ int acpi_get_boot_usec(usec_t *loader_start, usec_t *loader_exit) {
+         if (brec.type != ACPI_FPDT_BOOT_REC)
+                 return -EINVAL;
+ 
++        if (brec.startup_start == 0 || brec.exit_services_exit < brec.startup_start)
++                return -EINVAL;
++        if (brec.exit_services_exit > NSEC_PER_HOUR)
++                return -EINVAL;
++
+         if (loader_start)
+                 *loader_start = brec.startup_start / 1000;
+         if (loader_exit)
diff --git a/SOURCES/0065-strv-don-t-access-potentially-NULL-string-arrays.patch b/SOURCES/0065-strv-don-t-access-potentially-NULL-string-arrays.patch
deleted file mode 100644
index 450fb66..0000000
--- a/SOURCES/0065-strv-don-t-access-potentially-NULL-string-arrays.patch
+++ /dev/null
@@ -1,24 +0,0 @@
-From fb197fc897370c0ea840099e1c8da6353ea12514 Mon Sep 17 00:00:00 2001
-From: Lennart Poettering <lennart@poettering.net>
-Date: Wed, 2 Oct 2013 19:38:28 +0200
-Subject: [PATCH] strv: don't access potentially NULL string arrays
-
----
- src/shared/env-util.c | 4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
-
-diff --git a/src/shared/env-util.c b/src/shared/env-util.c
-index 5e29629..7976881 100644
---- a/src/shared/env-util.c
-+++ b/src/shared/env-util.c
-@@ -405,7 +405,9 @@ char **strv_env_clean_log(char **e, const char *message) {
-                 e[k++] = *p;
-         }
- 
--        e[k] = NULL;
-+        if (e)
-+                e[k] = NULL;
-+
-         return e;
- }
- 
diff --git a/SOURCES/0066-login-fix-invalid-free-in-sd_session_get_vt.patch b/SOURCES/0066-login-fix-invalid-free-in-sd_session_get_vt.patch
new file mode 100644
index 0000000..01743fd
--- /dev/null
+++ b/SOURCES/0066-login-fix-invalid-free-in-sd_session_get_vt.patch
@@ -0,0 +1,24 @@
+From 540aab87440dbde3bf6a1d057df9c7a79adf7031 Mon Sep 17 00:00:00 2001
+From: David Herrmann <dh.herrmann@gmail.com>
+Date: Thu, 10 Oct 2013 13:09:37 +0200
+Subject: [PATCH] login: fix invalid free() in sd_session_get_vt()
+
+We need to clear variables markes as _cleanup_free_. Otherwise, our
+error-paths might corrupt random memory.
+---
+ src/login/sd-login.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/login/sd-login.c b/src/login/sd-login.c
+index 71d8c29..6c27dfe 100644
+--- a/src/login/sd-login.c
++++ b/src/login/sd-login.c
+@@ -350,7 +350,7 @@ _public_ int sd_session_get_tty(const char *session, char **tty) {
+ }
+ 
+ _public_ int sd_session_get_vt(const char *session, unsigned *vtnr) {
+-        _cleanup_free_ char *vtnr_string;
++        _cleanup_free_ char *vtnr_string = NULL;
+         unsigned u;
+         int r;
+ 
diff --git a/SOURCES/0066-mkdir-pass-a-proper-function-pointer-to-mkdir_safe_i.patch b/SOURCES/0066-mkdir-pass-a-proper-function-pointer-to-mkdir_safe_i.patch
deleted file mode 100644
index 6f6f40a..0000000
--- a/SOURCES/0066-mkdir-pass-a-proper-function-pointer-to-mkdir_safe_i.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-From 56c6d3913e4cd7160b14f9f8a9c7b232444a5235 Mon Sep 17 00:00:00 2001
-From: Lennart Poettering <lennart@poettering.net>
-Date: Wed, 2 Oct 2013 19:38:52 +0200
-Subject: [PATCH] mkdir: pass a proper function pointer to mkdir_safe_internal
-
----
- src/shared/mkdir.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/shared/mkdir.c b/src/shared/mkdir.c
-index b7e5c6e..43c6ea6 100644
---- a/src/shared/mkdir.c
-+++ b/src/shared/mkdir.c
-@@ -53,7 +53,7 @@ int mkdir_safe_internal(const char *path, mode_t mode, uid_t uid, gid_t gid, mkd
- }
- 
- int mkdir_safe(const char *path, mode_t mode, uid_t uid, gid_t gid) {
--        return mkdir_safe_internal(path, mode, uid, gid, false);
-+        return mkdir_safe_internal(path, mode, uid, gid, mkdir);
- }
- 
- static int is_dir(const char* path) {
diff --git a/SOURCES/0067-login-make-sd_session_get_vt-actually-work.patch b/SOURCES/0067-login-make-sd_session_get_vt-actually-work.patch
new file mode 100644
index 0000000..74b6f71
--- /dev/null
+++ b/SOURCES/0067-login-make-sd_session_get_vt-actually-work.patch
@@ -0,0 +1,24 @@
+From b2301b8a4a17d51ac713fd39484fe48075ad2f64 Mon Sep 17 00:00:00 2001
+From: David Herrmann <dh.herrmann@gmail.com>
+Date: Thu, 10 Oct 2013 13:11:27 +0200
+Subject: [PATCH] login: make sd_session_get_vt() actually work
+
+We use VTNR, not VTNr as key. Until now sd_session_get_vt() just returns
+an error.
+---
+ src/login/sd-login.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/login/sd-login.c b/src/login/sd-login.c
+index 6c27dfe..7e25041 100644
+--- a/src/login/sd-login.c
++++ b/src/login/sd-login.c
+@@ -354,7 +354,7 @@ _public_ int sd_session_get_vt(const char *session, unsigned *vtnr) {
+         unsigned u;
+         int r;
+ 
+-        r = session_get_string(session, "VTNr", &vtnr_string);
++        r = session_get_string(session, "VTNR", &vtnr_string);
+         if (r < 0)
+                 return r;
+ 
diff --git a/SOURCES/0067-tmpfiles.d-include-setgid-perms-for-run-log-journal.patch b/SOURCES/0067-tmpfiles.d-include-setgid-perms-for-run-log-journal.patch
deleted file mode 100644
index 68c461f..0000000
--- a/SOURCES/0067-tmpfiles.d-include-setgid-perms-for-run-log-journal.patch
+++ /dev/null
@@ -1,23 +0,0 @@
-From 6a89a85811f364d1df7c5a6f992132bec693273d Mon Sep 17 00:00:00 2001
-From: Dave Reisner <dreisner@archlinux.org>
-Date: Wed, 2 Oct 2013 15:35:16 -0400
-Subject: [PATCH] tmpfiles.d: include setgid perms for /run/log/journal
-
-4608af4333d0f7f5 set permissions for journal storage on persistent disk
-but not the volatile storage.
-
-ref: https://bugs.archlinux.org/task/37170
----
- tmpfiles.d/systemd.conf | 2 ++
- 1 file changed, 2 insertions(+)
-
-diff --git a/tmpfiles.d/systemd.conf b/tmpfiles.d/systemd.conf
-index c397c71..ae292a0 100644
---- a/tmpfiles.d/systemd.conf
-+++ b/tmpfiles.d/systemd.conf
-@@ -26,3 +26,5 @@ F /run/nologin 0644 - - - "System is booting up."
- 
- m /var/log/journal 2755 root systemd-journal - -
- m /var/log/journal/%m 2755 root systemd-journal - -
-+m /run/log/journal 2755 root systemd-journal - -
-+m /run/log/journal/%m 2755 root systemd-journal - -
diff --git a/SOURCES/0068-Make-sure-that-we-don-t-dereference-NULL.patch b/SOURCES/0068-Make-sure-that-we-don-t-dereference-NULL.patch
new file mode 100644
index 0000000..48887d0
--- /dev/null
+++ b/SOURCES/0068-Make-sure-that-we-don-t-dereference-NULL.patch
@@ -0,0 +1,27 @@
+From 9765cfab7747c4d9435ec16a5fe29affeb2e52a7 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Sat, 12 Oct 2013 13:43:07 -0400
+Subject: [PATCH] Make sure that we don't dereference NULL
+
+The code was actually safe, because b should
+never be null, because if rvalue is empty, a different
+branch is taken. But we *do* check for NULL in the
+loop above, so it's better to also check here for symmetry.
+---
+ src/core/load-fragment.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/src/core/load-fragment.c b/src/core/load-fragment.c
+index 44920d6..f01843d 100644
+--- a/src/core/load-fragment.c
++++ b/src/core/load-fragment.c
+@@ -1860,7 +1860,8 @@ int config_parse_documentation(const char *unit,
+                         free(*a);
+                 }
+         }
+-        *b = NULL;
++        if (b)
++                *b = NULL;
+ 
+         return r;
+ }
diff --git a/SOURCES/0068-gpt-auto-generator-exit-immediately-if-in-container.patch b/SOURCES/0068-gpt-auto-generator-exit-immediately-if-in-container.patch
deleted file mode 100644
index 461eb0b..0000000
--- a/SOURCES/0068-gpt-auto-generator-exit-immediately-if-in-container.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-From b5515ebda086ada98da101c72455668a91841749 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
-Date: Thu, 3 Oct 2013 22:13:01 -0400
-Subject: [PATCH] gpt-auto-generator: exit immediately if in container
-
-Otherwise we get an ugly warning when running systemd in
-a container.
----
- src/gpt-auto-generator/gpt-auto-generator.c | 8 ++++++++
- 1 file changed, 8 insertions(+)
-
-diff --git a/src/gpt-auto-generator/gpt-auto-generator.c b/src/gpt-auto-generator/gpt-auto-generator.c
-index ca54925..d2b4213 100644
---- a/src/gpt-auto-generator/gpt-auto-generator.c
-+++ b/src/gpt-auto-generator/gpt-auto-generator.c
-@@ -38,6 +38,7 @@
- #include "libudev.h"
- #include "special.h"
- #include "unit-name.h"
-+#include "virt.h"
- 
- /* TODO:
-  *
-@@ -481,6 +482,13 @@ int main(int argc, char *argv[]) {
-         umask(0022);
- 
-         if (in_initrd()) {
-+                log_debug("In initrd, exiting.");
-+                r = 0;
-+                goto finish;
-+        }
-+
-+        if (detect_container(NULL) > 0) {
-+                log_debug("In a container, exiting.");
-                 r = 0;
-                 goto finish;
-         }
diff --git a/SOURCES/0069-gitignore-ignore-clang-analyze-output.patch b/SOURCES/0069-gitignore-ignore-clang-analyze-output.patch
new file mode 100644
index 0000000..84f5b8e
--- /dev/null
+++ b/SOURCES/0069-gitignore-ignore-clang-analyze-output.patch
@@ -0,0 +1,21 @@
+From 9f433bba1d84c974f73d7c5929850a317981f692 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Sat, 12 Oct 2013 19:50:54 -0400
+Subject: [PATCH] gitignore: ignore clang --analyze output
+
+---
+ .gitignore | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/.gitignore b/.gitignore
+index 5b38c0b..56e10a6 100644
+--- a/.gitignore
++++ b/.gitignore
+@@ -162,6 +162,7 @@
+ *.la
+ *.lo
+ *.o
++*.plist
+ *.stamp
+ *.pyc
+ __pycache__/
diff --git a/SOURCES/0069-systemd-order-remote-mounts-from-mountinfo-before-re.patch b/SOURCES/0069-systemd-order-remote-mounts-from-mountinfo-before-re.patch
deleted file mode 100644
index 11bc34e..0000000
--- a/SOURCES/0069-systemd-order-remote-mounts-from-mountinfo-before-re.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-From e6d71d64929cff5bbcfe56dc185062f86fd2a202 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
-Date: Thu, 3 Oct 2013 22:15:08 -0400
-Subject: [PATCH] systemd: order remote mounts from mountinfo before
- remote-fs.target
-
-Usually the network is stopped before filesystems are umounted.
-Ordering network filesystems before remote-fs.target means that their
-unmounting will be performed earlier, and can terminate sucessfully.
-
-https://bugs.freedesktop.org/show_bug.cgi?id=70002
----
- src/core/mount.c | 5 ++++-
- 1 file changed, 4 insertions(+), 1 deletion(-)
-
-diff --git a/src/core/mount.c b/src/core/mount.c
-index 3d46557..93bfa99 100644
---- a/src/core/mount.c
-+++ b/src/core/mount.c
-@@ -1440,6 +1440,9 @@ static int mount_add_one(
- 
-         u = manager_get_unit(m, e);
-         if (!u) {
-+                const char* const target =
-+                        fstype_is_network(fstype) ? SPECIAL_REMOTE_FS_TARGET : SPECIAL_LOCAL_FS_TARGET;
-+
-                 delete = true;
- 
-                 u = unit_new(m, sizeof(Mount));
-@@ -1466,7 +1469,7 @@ static int mount_add_one(
-                         goto fail;
-                 }
- 
--                r = unit_add_dependency_by_name(u, UNIT_BEFORE, SPECIAL_LOCAL_FS_TARGET, NULL, true);
-+                r = unit_add_dependency_by_name(u, UNIT_BEFORE, target, NULL, true);
-                 if (r < 0)
-                         goto fail;
- 
diff --git a/SOURCES/0070-man-add-more-markup-to-udevadm-8.patch b/SOURCES/0070-man-add-more-markup-to-udevadm-8.patch
new file mode 100644
index 0000000..efbecde
--- /dev/null
+++ b/SOURCES/0070-man-add-more-markup-to-udevadm-8.patch
@@ -0,0 +1,94 @@
+From 52473fa9ee6d097431c48c0b9c4b4a51837c75eb Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Sun, 13 Oct 2013 19:43:19 -0400
+Subject: [PATCH] man: add more markup to udevadm(8)
+
+---
+ man/udevadm.xml | 49 +++++++++++++++++++++++++++++++++----------------
+ 1 file changed, 33 insertions(+), 16 deletions(-)
+
+diff --git a/man/udevadm.xml b/man/udevadm.xml
+index b959216..a1ffe42 100644
+--- a/man/udevadm.xml
++++ b/man/udevadm.xml
+@@ -61,9 +61,10 @@
+   </refsynopsisdiv>
+ 
+   <refsect1><title>Description</title>
+-    <para>udevadm expects a command and command specific options.  It
+-    controls the runtime behavior of udev, requests kernel events,
+-    manages the event queue, and provides simple debugging mechanisms.</para>
++    <para><command>udevadm</command> expects a command and command
++    specific options.  It controls the runtime behavior of
++    <command>systemd-udevd</command>, requests kernel events, manages
++    the event queue, and provides simple debugging mechanisms.</para>
+   </refsect1>
+ 
+   <refsect1><title>OPTIONS</title>
+@@ -97,23 +98,37 @@
+         <varlistentry>
+           <term><option>--query=<replaceable>type</replaceable></option></term>
+           <listitem>
+-            <para>Query the database for specified type of device data. It needs the
+-            <option>--path</option> or <option>--name</option> to identify the specified
+-            device. Valid queries are:
+-            <command>name</command>, <command>symlink</command>, <command>path</command>,
+-            <command>property</command>, <command>all</command>.</para>
++            <para>Query the database for specified type of device
++            data. It needs the <option>--path</option> or
++            <option>--name</option> to identify the specified
++            device. Valid queries are: <constant>name</constant>,
++            <constant>symlink</constant>, <constant>path</constant>,
++            <constant>property</constant>,
++            <constant>all</constant>.</para>
+           </listitem>
+         </varlistentry>
+         <varlistentry>
+           <term><option>--path=<replaceable>devpath</replaceable></option></term>
+           <listitem>
+-            <para>The devpath of the device to query.</para>
++            <para>The <filename>/sys</filename> path of the device to
++            query, e.g.
++            <filename><optional>/sys</optional>/class/block/sda</filename>.
++            Note that this option usually isn't very useful, since
++            <command>udev</command> can guess the type of the
++            argument, so <command>udevadm
++            --devpath=/class/block/sda</command> is equivalent to
++            <command>udevadm /sys/class/block/sda</command>.</para>
+           </listitem>
+         </varlistentry>
+         <varlistentry>
+           <term><option>--name=<replaceable>file</replaceable></option></term>
+           <listitem>
+-            <para>The name of the device node or a symlink to query</para>
++            <para>The name of the device node or a symlink to query,
++            e.g. <filename><optional>/dev</optional>/sda</filename>.
++            Note that this option usually isn't very useful, since
++            <command>udev</command> can guess the type of the
++            argument, so <command>udevadm --name=sda</command> is
++            equivalent to <command>udevadm /dev/sda</command>.</para>
+           </listitem>
+         </varlistentry>
+         <varlistentry>
+@@ -462,13 +477,15 @@
+           </listitem>
+         </varlistentry>
+         <varlistentry>
+-          <term><option>--resolve-names=<replaceable>early|late|never</replaceable></option></term>
++          <term><option>--resolve-names=<constant>early</constant>|<constant>late</constant>|<constant>never</constant></option></term>
+           <listitem>
+-            <para>Specify when udevadm should resolve names of users and groups.
+-              When set to early (the default) names will be resolved when the
+-              rules are parsed. When set to late names will be resolved for
+-              every event. When set to never names will never be resolved and
+-              all devices will be owned by root.</para>
++            <para>Specify when udevadm should resolve names of users
++            and groups.  When set to <constant>early</constant> (the
++            default) names will be resolved when the rules are
++            parsed. When set to <constant>late</constant> names will
++            be resolved for every event. When set to
++            <constant>never</constant> names will never be resolved
++            and all devices will be owned by root.</para>
+           </listitem>
+         </varlistentry>
+         <varlistentry>
diff --git a/SOURCES/0070-manager-when-verifying-whether-clients-may-change-en.patch b/SOURCES/0070-manager-when-verifying-whether-clients-may-change-en.patch
deleted file mode 100644
index 6a0ac45..0000000
--- a/SOURCES/0070-manager-when-verifying-whether-clients-may-change-en.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-From d36d41d6a28ae21da6e6e032f9988049bad0cea3 Mon Sep 17 00:00:00 2001
-From: Lennart Poettering <lennart@poettering.net>
-Date: Fri, 4 Oct 2013 17:01:37 +0200
-Subject: [PATCH] manager: when verifying whether clients may change
- environment using selinux check for "reload" rather "reboot"
-
-This appears to be a copy/paste error.
----
- src/core/dbus-manager.c | 6 +++---
- 1 file changed, 3 insertions(+), 3 deletions(-)
-
-diff --git a/src/core/dbus-manager.c b/src/core/dbus-manager.c
-index 676a07f..8f4d017 100644
---- a/src/core/dbus-manager.c
-+++ b/src/core/dbus-manager.c
-@@ -1397,7 +1397,7 @@ static DBusHandlerResult bus_manager_message_handler(DBusConnection *connection,
-                 _cleanup_strv_free_ char **l = NULL;
-                 char **e = NULL;
- 
--                SELINUX_ACCESS_CHECK(connection, message, "reboot");
-+                SELINUX_ACCESS_CHECK(connection, message, "reload");
- 
-                 r = bus_parse_strv(message, &l);
-                 if (r == -ENOMEM)
-@@ -1424,7 +1424,7 @@ static DBusHandlerResult bus_manager_message_handler(DBusConnection *connection,
-                 _cleanup_strv_free_ char **l = NULL;
-                 char **e = NULL;
- 
--                SELINUX_ACCESS_CHECK(connection, message, "reboot");
-+                SELINUX_ACCESS_CHECK(connection, message, "reload");
- 
-                 r = bus_parse_strv(message, &l);
-                 if (r == -ENOMEM)
-@@ -1452,7 +1452,7 @@ static DBusHandlerResult bus_manager_message_handler(DBusConnection *connection,
-                 char **f = NULL;
-                 DBusMessageIter iter;
- 
--                SELINUX_ACCESS_CHECK(connection, message, "reboot");
-+                SELINUX_ACCESS_CHECK(connection, message, "reload");
- 
-                 if (!dbus_message_iter_init(message, &iter))
-                         goto oom;
diff --git a/SOURCES/0071-Fix-bad-assert-in-show_pid_array.patch b/SOURCES/0071-Fix-bad-assert-in-show_pid_array.patch
new file mode 100644
index 0000000..08c3d4e
--- /dev/null
+++ b/SOURCES/0071-Fix-bad-assert-in-show_pid_array.patch
@@ -0,0 +1,35 @@
+From 50f0e2315d0c22d2e98e53ff02e7ae2412463e9a Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Mon, 14 Oct 2013 19:15:24 -0400
+Subject: [PATCH] Fix bad assert in show_pid_array
+
+This function should get the same treatment as other qsort uses
+did in 7ff7394 "Never call qsort on potentially NULL arrays".
+
+Reported-by: Oleksii Shevchuk <alxchk@gmail.com>
+---
+ src/shared/cgroup-show.c | 4 +---
+ 1 file changed, 1 insertion(+), 3 deletions(-)
+
+diff --git a/src/shared/cgroup-show.c b/src/shared/cgroup-show.c
+index cc44ab4..aa0f017 100644
+--- a/src/shared/cgroup-show.c
++++ b/src/shared/cgroup-show.c
+@@ -44,8 +44,6 @@ static void show_pid_array(int pids[], unsigned n_pids, const char *prefix, unsi
+         unsigned i, m, pid_width;
+         pid_t biggest = 0;
+ 
+-        assert(n_pids > 0);
+-
+         /* Filter duplicates */
+         m = 0;
+         for (i = 0; i < n_pids; i++) {
+@@ -65,7 +63,7 @@ static void show_pid_array(int pids[], unsigned n_pids, const char *prefix, unsi
+         pid_width = DECIMAL_STR_WIDTH(biggest);
+ 
+         /* And sort */
+-        qsort(pids, n_pids, sizeof(pid_t), compare);
++        qsort_safe(pids, n_pids, sizeof(pid_t), compare);
+ 
+         if(flags & OUTPUT_FULL_WIDTH)
+                 n_columns = 0;
diff --git a/SOURCES/0071-mount-check-for-NULL-before-reading-pm-what.patch b/SOURCES/0071-mount-check-for-NULL-before-reading-pm-what.patch
deleted file mode 100644
index ca14af6..0000000
--- a/SOURCES/0071-mount-check-for-NULL-before-reading-pm-what.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From 1f8cb5185ca41b891ebfa2e6aed093be49b958ce Mon Sep 17 00:00:00 2001
-From: Dave Reisner <dreisner@archlinux.org>
-Date: Fri, 4 Oct 2013 18:22:40 -0400
-Subject: [PATCH] mount: check for NULL before reading pm->what
-
-Since a57f7e2c828b85, a mount unit with garbage in it would cause
-systemd to crash on loading it.
-
-ref: https://bugs.freedesktop.org/show_bug.cgi?id=70148
----
- src/core/mount.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/core/mount.c b/src/core/mount.c
-index 93bfa99..db055f0 100644
---- a/src/core/mount.c
-+++ b/src/core/mount.c
-@@ -182,7 +182,7 @@ static int mount_add_mount_links(Mount *m) {
-          * for the source path (if this is a bind mount) to be
-          * available. */
-         pm = get_mount_parameters_fragment(m);
--        if (pm && path_is_absolute(pm->what)) {
-+        if (pm && pm->what && path_is_absolute(pm->what)) {
-                 r = unit_require_mounts_for(UNIT(m), pm->what);
-                 if (r < 0)
-                         return r;
diff --git a/SOURCES/0072-Never-call-qsort-on-potentially-NULL-arrays.patch b/SOURCES/0072-Never-call-qsort-on-potentially-NULL-arrays.patch
new file mode 100644
index 0000000..1df9c4c
--- /dev/null
+++ b/SOURCES/0072-Never-call-qsort-on-potentially-NULL-arrays.patch
@@ -0,0 +1,25 @@
+From 87f830a2046141ed917661a726c3ec38b4d15e89 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Fri, 11 Oct 2013 19:33:13 -0400
+Subject: [PATCH] Never call qsort on potentially NULL arrays
+
+This extends 62678ded 'efi: never call qsort on potentially
+NULL arrays' to all other places where qsort is used and it
+is not obvious that the count is non-zero.
+---
+ src/shared/cgroup-show.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/src/shared/cgroup-show.c b/src/shared/cgroup-show.c
+index aa0f017..f6e56db 100644
+--- a/src/shared/cgroup-show.c
++++ b/src/shared/cgroup-show.c
+@@ -44,6 +44,8 @@ static void show_pid_array(int pids[], unsigned n_pids, const char *prefix, unsi
+         unsigned i, m, pid_width;
+         pid_t biggest = 0;
+ 
++        assert(n_pids > 0);
++
+         /* Filter duplicates */
+         m = 0;
+         for (i = 0; i < n_pids; i++) {
diff --git a/SOURCES/0072-core-do-not-add-what-to-RequiresMountsFor-for-networ.patch b/SOURCES/0072-core-do-not-add-what-to-RequiresMountsFor-for-networ.patch
deleted file mode 100644
index de392ad..0000000
--- a/SOURCES/0072-core-do-not-add-what-to-RequiresMountsFor-for-networ.patch
+++ /dev/null
@@ -1,178 +0,0 @@
-From 37d5a05d8444e816937fb6736b35a9bc7de0865d Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
-Date: Sat, 5 Oct 2013 13:09:43 -0400
-Subject: [PATCH] core: do not add "what" to RequiresMountsFor for network
- mounts
-
-For cifs mount like //server/share, we would get
-RequiresMountsFor=/server/share, which probably isn't
-harmful, but quite confusing.
-
-Unfortunately a bunch of static functions had to be moved
-up, but patch is really one line.
----
- src/core/mount.c | 137 ++++++++++++++++++++++++++++---------------------------
- 1 file changed, 70 insertions(+), 67 deletions(-)
-
-diff --git a/src/core/mount.c b/src/core/mount.c
-index db055f0..70cd372 100644
---- a/src/core/mount.c
-+++ b/src/core/mount.c
-@@ -59,6 +59,72 @@ static const UnitActiveState state_translation_table[_MOUNT_STATE_MAX] = {
-         [MOUNT_FAILED] = UNIT_FAILED
- };
- 
-+static char* mount_test_option(const char *haystack, const char *needle) {
-+        struct mntent me = { .mnt_opts = (char*) haystack };
-+
-+        assert(needle);
-+
-+        /* Like glibc's hasmntopt(), but works on a string, not a
-+         * struct mntent */
-+
-+        if (!haystack)
-+                return NULL;
-+
-+        return hasmntopt(&me, needle);
-+}
-+
-+static bool mount_is_network(MountParameters *p) {
-+        assert(p);
-+
-+        if (mount_test_option(p->options, "_netdev"))
-+                return true;
-+
-+        if (p->fstype && fstype_is_network(p->fstype))
-+                return true;
-+
-+        return false;
-+}
-+
-+static bool mount_is_bind(MountParameters *p) {
-+        assert(p);
-+
-+        if (mount_test_option(p->options, "bind"))
-+                return true;
-+
-+        if (p->fstype && streq(p->fstype, "bind"))
-+                return true;
-+
-+        if (mount_test_option(p->options, "rbind"))
-+                return true;
-+
-+        if (p->fstype && streq(p->fstype, "rbind"))
-+                return true;
-+
-+        return false;
-+}
-+
-+static bool mount_is_auto(MountParameters *p) {
-+        assert(p);
-+
-+        return !mount_test_option(p->options, "noauto");
-+}
-+
-+static bool needs_quota(MountParameters *p) {
-+        assert(p);
-+
-+        if (mount_is_network(p))
-+                return false;
-+
-+        if (mount_is_bind(p))
-+                return false;
-+
-+        return mount_test_option(p->options, "usrquota") ||
-+                mount_test_option(p->options, "grpquota") ||
-+                mount_test_option(p->options, "quota") ||
-+                mount_test_option(p->options, "usrjquota") ||
-+                mount_test_option(p->options, "grpjquota");
-+}
-+
- static void mount_init(Unit *u) {
-         Mount *m = MOUNT(u);
- 
-@@ -182,7 +248,10 @@ static int mount_add_mount_links(Mount *m) {
-          * for the source path (if this is a bind mount) to be
-          * available. */
-         pm = get_mount_parameters_fragment(m);
--        if (pm && pm->what && path_is_absolute(pm->what)) {
-+        if (pm && pm->what &&
-+            path_is_absolute(pm->what) &&
-+            !mount_is_network(pm)) {
-+
-                 r = unit_require_mounts_for(UNIT(m), pm->what);
-                 if (r < 0)
-                         return r;
-@@ -214,72 +283,6 @@ static int mount_add_mount_links(Mount *m) {
-         return 0;
- }
- 
--static char* mount_test_option(const char *haystack, const char *needle) {
--        struct mntent me = { .mnt_opts = (char*) haystack };
--
--        assert(needle);
--
--        /* Like glibc's hasmntopt(), but works on a string, not a
--         * struct mntent */
--
--        if (!haystack)
--                return NULL;
--
--        return hasmntopt(&me, needle);
--}
--
--static bool mount_is_network(MountParameters *p) {
--        assert(p);
--
--        if (mount_test_option(p->options, "_netdev"))
--                return true;
--
--        if (p->fstype && fstype_is_network(p->fstype))
--                return true;
--
--        return false;
--}
--
--static bool mount_is_bind(MountParameters *p) {
--        assert(p);
--
--        if (mount_test_option(p->options, "bind"))
--                return true;
--
--        if (p->fstype && streq(p->fstype, "bind"))
--                return true;
--
--        if (mount_test_option(p->options, "rbind"))
--                return true;
--
--        if (p->fstype && streq(p->fstype, "rbind"))
--                return true;
--
--        return false;
--}
--
--static bool mount_is_auto(MountParameters *p) {
--        assert(p);
--
--        return !mount_test_option(p->options, "noauto");
--}
--
--static bool needs_quota(MountParameters *p) {
--        assert(p);
--
--        if (mount_is_network(p))
--                return false;
--
--        if (mount_is_bind(p))
--                return false;
--
--        return mount_test_option(p->options, "usrquota") ||
--                mount_test_option(p->options, "grpquota") ||
--                mount_test_option(p->options, "quota") ||
--                mount_test_option(p->options, "usrjquota") ||
--                mount_test_option(p->options, "grpjquota");
--}
--
- static int mount_add_device_links(Mount *m) {
-         MountParameters *p;
-         bool device_wants_mount = false;
diff --git a/SOURCES/0073-rules-expose-loop-block-devices-to-systemd.patch b/SOURCES/0073-rules-expose-loop-block-devices-to-systemd.patch
new file mode 100644
index 0000000..0da76da
--- /dev/null
+++ b/SOURCES/0073-rules-expose-loop-block-devices-to-systemd.patch
@@ -0,0 +1,32 @@
+From 24888798c1c90dbdc7ab0aa0b57f2196066712c4 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart@poettering.net>
+Date: Wed, 16 Oct 2013 02:49:54 +0200
+Subject: [PATCH] rules: expose loop block devices to systemd
+
+Since the kernel no longer exposes a large number of "dead" loop devices
+it is OK to expose them now in systemd, so let's do that. This has the
+benefit that mount dependencies on loop devices start to work.
+---
+ rules/99-systemd.rules.in | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/rules/99-systemd.rules.in b/rules/99-systemd.rules.in
+index bbb7d0c..3c99475 100644
+--- a/rules/99-systemd.rules.in
++++ b/rules/99-systemd.rules.in
+@@ -11,12 +11,12 @@ SUBSYSTEM=="tty", KERNEL=="tty[a-zA-Z]*|hvc*|xvc*|hvsi*", TAG+="systemd"
+ 
+ KERNEL=="vport*", TAG+="systemd"
+ 
+-SUBSYSTEM=="block", KERNEL!="ram*|loop*", TAG+="systemd"
+-SUBSYSTEM=="block", KERNEL!="ram*|loop*", ENV{DM_UDEV_DISABLE_OTHER_RULES_FLAG}=="1", ENV{SYSTEMD_READY}="0"
++SUBSYSTEM=="block", KERNEL!="ram*", TAG+="systemd"
++SUBSYSTEM=="block", KERNEL!="ram*", ENV{DM_UDEV_DISABLE_OTHER_RULES_FLAG}=="1", ENV{SYSTEMD_READY}="0"
+ 
+ # Ignore encrypted devices with no identified superblock on it, since
+ # we are probably still calling mke2fs or mkswap on it.
+-SUBSYSTEM=="block", KERNEL!="ram*|loop*", ENV{DM_UUID}=="CRYPT-*", ENV{ID_PART_TABLE_TYPE}=="", ENV{ID_FS_USAGE}=="", ENV{SYSTEMD_READY}="0"
++SUBSYSTEM=="block", KERNEL!="ram*", ENV{DM_UUID}=="CRYPT-*", ENV{ID_PART_TABLE_TYPE}=="", ENV{ID_FS_USAGE}=="", ENV{SYSTEMD_READY}="0"
+ 
+ # Ignore raid devices that are not yet assembled and started
+ SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="md*", TEST!="md/array_state", ENV{SYSTEMD_READY}="0"
diff --git a/SOURCES/0073-systemd-serialize-deserialize-forbid_restart-value.patch b/SOURCES/0073-systemd-serialize-deserialize-forbid_restart-value.patch
deleted file mode 100644
index adcc980..0000000
--- a/SOURCES/0073-systemd-serialize-deserialize-forbid_restart-value.patch
+++ /dev/null
@@ -1,48 +0,0 @@
-From 901779a7633bcb9831e14fd80eb6db0a22c39f22 Mon Sep 17 00:00:00 2001
-From: Sylvia Else <sylviabz1@cryogenic.net>
-Date: Sun, 6 Oct 2013 23:06:35 -0400
-Subject: [PATCH] systemd: serialize/deserialize forbid_restart value
-
-The Service type's forbid_restart field was not preserved by
-serialization/deserialization, so the fact that the service should not
-be restarted after stopping was lost.
-
-If a systemctl stop foo command has been given, but the foo service
-has not yet stopped, and then the systemctl --system daemon-reload was
-given, then when the foo service eventually stopped, systemd would
-restart it.
-
-https://bugs.freedesktop.org/show_bug.cgi?id=69800
----
- src/core/service.c | 11 +++++++++++
- 1 file changed, 11 insertions(+)
-
-diff --git a/src/core/service.c b/src/core/service.c
-index fc04196..7a78060 100644
---- a/src/core/service.c
-+++ b/src/core/service.c
-@@ -2653,6 +2653,9 @@ static int service_serialize(Unit *u, FILE *f, FDSet *fds) {
-         if (s->exec_context.var_tmp_dir)
-                 unit_serialize_item(u, f, "var-tmp-dir", s->exec_context.var_tmp_dir);
- 
-+        if (s->forbid_restart)
-+                unit_serialize_item(u, f, "forbid_restart", yes_no(s->forbid_restart));
-+
-         return 0;
- }
- 
-@@ -2789,6 +2792,14 @@ static int service_deserialize_item(Unit *u, const char *key, const char *value,
-                         return log_oom();
- 
-                 s->exec_context.var_tmp_dir = t;
-+        } else if (streq(key, "forbid_restart")) {
-+                int b;
-+
-+                b = parse_boolean(value);
-+                if (b < 0)
-+                        log_debug_unit(u->id, "Failed to parse forbid_restart value %s", value);
-+                else
-+                        s->forbid_restart = b;
-         } else
-                 log_debug_unit(u->id, "Unknown serialization key '%s'", key);
- 
diff --git a/SOURCES/0074-core-unify-the-way-we-denote-serialization-attribute.patch b/SOURCES/0074-core-unify-the-way-we-denote-serialization-attribute.patch
deleted file mode 100644
index 840ea8f..0000000
--- a/SOURCES/0074-core-unify-the-way-we-denote-serialization-attribute.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-From 5a09d8f3a0b610beaef3445abb57f45daae6f10f Mon Sep 17 00:00:00 2001
-From: Lennart Poettering <lennart@poettering.net>
-Date: Wed, 9 Oct 2013 00:13:55 +0200
-Subject: [PATCH] core: unify the way we denote serialization attributes
-
----
- src/core/service.c | 6 +++---
- 1 file changed, 3 insertions(+), 3 deletions(-)
-
-diff --git a/src/core/service.c b/src/core/service.c
-index 7a78060..cfc8ba6 100644
---- a/src/core/service.c
-+++ b/src/core/service.c
-@@ -2654,7 +2654,7 @@ static int service_serialize(Unit *u, FILE *f, FDSet *fds) {
-                 unit_serialize_item(u, f, "var-tmp-dir", s->exec_context.var_tmp_dir);
- 
-         if (s->forbid_restart)
--                unit_serialize_item(u, f, "forbid_restart", yes_no(s->forbid_restart));
-+                unit_serialize_item(u, f, "forbid-restart", yes_no(s->forbid_restart));
- 
-         return 0;
- }
-@@ -2792,12 +2792,12 @@ static int service_deserialize_item(Unit *u, const char *key, const char *value,
-                         return log_oom();
- 
-                 s->exec_context.var_tmp_dir = t;
--        } else if (streq(key, "forbid_restart")) {
-+        } else if (streq(key, "forbid-restart")) {
-                 int b;
- 
-                 b = parse_boolean(value);
-                 if (b < 0)
--                        log_debug_unit(u->id, "Failed to parse forbid_restart value %s", value);
-+                        log_debug_unit(u->id, "Failed to parse forbid-restart value %s", value);
-                 else
-                         s->forbid_restart = b;
-         } else
diff --git a/SOURCES/0074-rules-don-t-limit-some-of-the-rules-to-the-add-actio.patch b/SOURCES/0074-rules-don-t-limit-some-of-the-rules-to-the-add-actio.patch
new file mode 100644
index 0000000..fa85b4f
--- /dev/null
+++ b/SOURCES/0074-rules-don-t-limit-some-of-the-rules-to-the-add-actio.patch
@@ -0,0 +1,35 @@
+From d59e493f9b1b6645c9d1916bdc3e8b4802643ab5 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart@poettering.net>
+Date: Wed, 16 Oct 2013 02:51:24 +0200
+Subject: [PATCH] rules: don't limit some of the rules to the "add" action
+
+Devices should show up in systemd regardless whether the user invoked
+"udevadm trigger" or not. Before this change some devices might have
+suddenly disappeared due issuing that command.
+
+Conflicts:
+	rules/99-systemd.rules.in
+---
+ rules/99-systemd.rules.in | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/rules/99-systemd.rules.in b/rules/99-systemd.rules.in
+index 3c99475..307f18f 100644
+--- a/rules/99-systemd.rules.in
++++ b/rules/99-systemd.rules.in
+@@ -53,12 +53,12 @@ ACTION=="add", SUBSYSTEM=="net", KERNEL!="lo", RUN+="@rootlibexecdir@/systemd-sy
+ 
+ # Pull in backlight save/restore for all firmware backlight devices
+ 
+-ACTION=="add", SUBSYSTEM=="backlight", ATTR{type}=="firmware", TAG+="systemd", ENV{SYSTEMD_WANTS}+="systemd-backlight@$name.service"
++SUBSYSTEM=="backlight", ATTR{type}=="firmware", TAG+="systemd", ENV{SYSTEMD_WANTS}+="systemd-backlight@$name.service"
+ 
+ # Asynchronously mount file systems implemented by these modules as
+ # soon as they are loaded.
+ 
+-SUBSYSTEM=="module", KERNEL=="fuse", ACTION=="add", TAG+="systemd", ENV{SYSTEMD_WANTS}+="sys-fs-fuse-connections.mount"
+-SUBSYSTEM=="module", KERNEL=="configfs", ACTION=="add", TAG+="systemd", ENV{SYSTEMD_WANTS}+="sys-kernel-config.mount"
++SUBSYSTEM=="module", KERNEL=="fuse", TAG+="systemd", ENV{SYSTEMD_WANTS}+="sys-fs-fuse-connections.mount"
++SUBSYSTEM=="module", KERNEL=="configfs", TAG+="systemd", ENV{SYSTEMD_WANTS}+="sys-kernel-config.mount"
+ 
+ LABEL="systemd_end"
diff --git a/SOURCES/0075-hwdb-update.patch b/SOURCES/0075-hwdb-update.patch
new file mode 100644
index 0000000..66eb771
--- /dev/null
+++ b/SOURCES/0075-hwdb-update.patch
@@ -0,0 +1,1629 @@
+From 805268127b9bceb16f58bf52e3f993e87ea0b9f8 Mon Sep 17 00:00:00 2001
+From: Kay Sievers <kay@vrfy.org>
+Date: Sun, 20 Oct 2013 01:12:29 +0200
+Subject: [PATCH] hwdb: update
+
+---
+ hwdb/20-OUI.hwdb              | 391 +++++++++++++++++++++++++++++++++++++++++-
+ hwdb/20-pci-vendor-model.hwdb | 216 ++++++++++++++++++++---
+ 2 files changed, 578 insertions(+), 29 deletions(-)
+
+diff --git a/hwdb/20-OUI.hwdb b/hwdb/20-OUI.hwdb
+index e913b28..5067167 100644
+--- a/hwdb/20-OUI.hwdb
++++ b/hwdb/20-OUI.hwdb
+@@ -12278,7 +12278,7 @@ OUI:40D85501B*
+  ID_OUI_FROM_DATABASE=Audio Enhancement
+ 
+ OUI:40D85501C*
+- ID_OUI_FROM_DATABASE=BERG
++ ID_OUI_FROM_DATABASE=BERG Cloud Limited
+ 
+ OUI:40D85501D*
+  ID_OUI_FROM_DATABASE=Scharco Elektronik GmbH
+@@ -13324,6 +13324,93 @@ OUI:40D85517B*
+ OUI:40D85517C*
+  ID_OUI_FROM_DATABASE=Critical Link
+ 
++OUI:40D85517D*
++ ID_OUI_FROM_DATABASE=Kiwigrid GmbH
++
++OUI:40D85517E*
++ ID_OUI_FROM_DATABASE=TOKHATEC
++
++OUI:40D85517F*
++ ID_OUI_FROM_DATABASE=Telvent
++
++OUI:40D855180*
++ ID_OUI_FROM_DATABASE=BroadSoft Inc
++
++OUI:40D855181*
++ ID_OUI_FROM_DATABASE=eROCCA
++
++OUI:40D855182*
++ ID_OUI_FROM_DATABASE=Georg Neumann GmbH
++
++OUI:40D855183*
++ ID_OUI_FROM_DATABASE=EMAC, Inc.
++
++OUI:40D855184*
++ ID_OUI_FROM_DATABASE=Satkirit Ltd
++
++OUI:40D855185*
++ ID_OUI_FROM_DATABASE=Standard Change Makers
++
++OUI:40D855186*
++ ID_OUI_FROM_DATABASE=KST technology
++
++OUI:40D855187*
++ ID_OUI_FROM_DATABASE=CDEX Corp.
++
++OUI:40D855188*
++ ID_OUI_FROM_DATABASE=Array Corporation
++
++OUI:40D855189*
++ ID_OUI_FROM_DATABASE=Yoozma Corporation
++
++OUI:40D85518A*
++ ID_OUI_FROM_DATABASE=Aplex Technology Inc.
++
++OUI:40D85518B*
++ ID_OUI_FROM_DATABASE=Diagnosys Test Systems Ltd
++
++OUI:40D85518C*
++ ID_OUI_FROM_DATABASE=EOS S.r.l.
++
++OUI:40D85518D*
++ ID_OUI_FROM_DATABASE=Zoe Medical
++
++OUI:40D85518E*
++ ID_OUI_FROM_DATABASE=Kerun Visual Technology Co., Ltd.(Shenzhen)
++
++OUI:40D85518F*
++ ID_OUI_FROM_DATABASE=Beat Sensing co. , ltd.
++
++OUI:40D855190*
++ ID_OUI_FROM_DATABASE=Spider Tecnologia Ind. e Com Ltda
++
++OUI:40D855191*
++ ID_OUI_FROM_DATABASE=Soukai Electric
++
++OUI:40D855192*
++ ID_OUI_FROM_DATABASE=GENERAL DYNAMICS C4 SYSTEMS
++
++OUI:40D855193*
++ ID_OUI_FROM_DATABASE=FORZA SILICON CORP.
++
++OUI:40D855194*
++ ID_OUI_FROM_DATABASE=RF Code
++
++OUI:40D855195*
++ ID_OUI_FROM_DATABASE=TONNA ELECTRONIQUE
++
++OUI:40D855196*
++ ID_OUI_FROM_DATABASE=Advanced Micro Controls Inc.
++
++OUI:40D855197*
++ ID_OUI_FROM_DATABASE=Berg Cloud Limited
++
++OUI:40D855198*
++ ID_OUI_FROM_DATABASE=devboards GmbH
++
++OUI:40D855199*
++ ID_OUI_FROM_DATABASE=PRESSOL Schmiergeraete GmbH
++
+ OUI:000000*
+  ID_OUI_FROM_DATABASE=XEROX CORPORATION
+ 
+@@ -46883,7 +46970,7 @@ OUI:0080B7*
+  ID_OUI_FROM_DATABASE=STELLAR COMPUTER
+ 
+ OUI:0080B8*
+- ID_OUI_FROM_DATABASE=BUG, INCORPORATED
++ ID_OUI_FROM_DATABASE=B.U.G. MORISEIKI, INCORPORATED
+ 
+ OUI:0080B9*
+  ID_OUI_FROM_DATABASE=ARCHE TECHNOLIGIES INC.
+@@ -51589,6 +51676,9 @@ OUI:04F7E4*
+ OUI:04F8C2*
+  ID_OUI_FROM_DATABASE=Flaircomm Microelectronics, Inc.
+ 
++OUI:04F938*
++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
++
+ OUI:04FE31*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
+@@ -52132,6 +52222,9 @@ OUI:08512E*
+ OUI:085240*
+  ID_OUI_FROM_DATABASE=EbV Elektronikbau- und Vertriebs GmbH
+ 
++OUI:085AE0*
++ ID_OUI_FROM_DATABASE=Recovision Technology Co., Ltd.
++
+ OUI:085B0E*
+  ID_OUI_FROM_DATABASE=Fortinet, Inc.
+ 
+@@ -52297,6 +52390,9 @@ OUI:08FC52*
+ OUI:08FC88*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
++OUI:08FD0E*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
++
+ OUI:0C0400*
+  ID_OUI_FROM_DATABASE=Jantar d.o.o.
+ 
+@@ -52306,6 +52402,9 @@ OUI:0C0535*
+ OUI:0C1105*
+  ID_OUI_FROM_DATABASE=Ringslink (Xiamen) Network Communication Technologies Co., Ltd
+ 
++OUI:0C1262*
++ ID_OUI_FROM_DATABASE=zte corporation
++
+ OUI:0C130B*
+  ID_OUI_FROM_DATABASE=Uniqoteq Ltd.
+ 
+@@ -52366,6 +52465,9 @@ OUI:0C4DE9*
+ OUI:0C51F7*
+  ID_OUI_FROM_DATABASE=CHAUVIN ARNOUX
+ 
++OUI:0C54A5*
++ ID_OUI_FROM_DATABASE=PEGATRON CORPORATION
++
+ OUI:0C5521*
+  ID_OUI_FROM_DATABASE=Axiros GmbH
+ 
+@@ -52627,6 +52729,9 @@ OUI:100D7F*
+ OUI:100E2B*
+  ID_OUI_FROM_DATABASE=NEC CASIO Mobile Communications
+ 
++OUI:100E7E*
++ ID_OUI_FROM_DATABASE=Juniper networks
++
+ OUI:1010B6*
+  ID_OUI_FROM_DATABASE=McCain Inc
+ 
+@@ -53023,6 +53128,9 @@ OUI:149090*
+ OUI:149448*
+  ID_OUI_FROM_DATABASE=BLU CASTLE S.A.
+ 
++OUI:1499E2*
++ ID_OUI_FROM_DATABASE=Apple, Inc
++
+ OUI:149FE8*
+  ID_OUI_FROM_DATABASE=Lenovo Mobile Communication Technology Ltd.
+ 
+@@ -53095,6 +53203,9 @@ OUI:14EE9D*
+ OUI:14F0C5*
+  ID_OUI_FROM_DATABASE=Xtremio Ltd.
+ 
++OUI:14F28E*
++ ID_OUI_FROM_DATABASE=ShenYang ZhongKe-Allwin Technology Co.LTD
++
+ OUI:14F42A*
+  ID_OUI_FROM_DATABASE=Samsung Electronics
+ 
+@@ -53257,6 +53368,9 @@ OUI:1867B0*
+ OUI:186D99*
+  ID_OUI_FROM_DATABASE=Adanis Inc.
+ 
++OUI:1879A2*
++ ID_OUI_FROM_DATABASE=GMJ ELECTRIC LIMITED
++
+ OUI:187A93*
+  ID_OUI_FROM_DATABASE=AMICCOM Electronics Corporation
+ 
+@@ -53440,6 +53554,9 @@ OUI:1C19DE*
+ OUI:1C1D67*
+  ID_OUI_FROM_DATABASE=Shenzhen Huawei Communication Technologies Co., Ltd
+ 
++OUI:1C1D86*
++ ID_OUI_FROM_DATABASE=Cisco
++
+ OUI:1C334D*
+  ID_OUI_FROM_DATABASE=ITS Telecom
+ 
+@@ -53803,6 +53920,9 @@ OUI:20858C*
+ OUI:208984*
+  ID_OUI_FROM_DATABASE=COMPAL INFORMATION (KUNSHAN) CO., LTD
+ 
++OUI:208986*
++ ID_OUI_FROM_DATABASE=zte corporation
++
+ OUI:20918A*
+  ID_OUI_FROM_DATABASE=PROFALUX
+ 
+@@ -53929,6 +54049,9 @@ OUI:20FEDB*
+ OUI:2401C7*
+  ID_OUI_FROM_DATABASE=Cisco
+ 
++OUI:24050F*
++ ID_OUI_FROM_DATABASE=MTN Electronic Co. Ltd
++
+ OUI:240917*
+  ID_OUI_FROM_DATABASE=Devlin Electronics Limited
+ 
+@@ -54034,6 +54157,9 @@ OUI:249442*
+ OUI:249504*
+  ID_OUI_FROM_DATABASE=SFR
+ 
++OUI:24A2E1*
++ ID_OUI_FROM_DATABASE=Apple, Inc
++
+ OUI:24A42C*
+  ID_OUI_FROM_DATABASE=KOUKAAM a.s.
+ 
+@@ -54043,6 +54169,9 @@ OUI:24A43C*
+ OUI:24A495*
+  ID_OUI_FROM_DATABASE=Thales Canada Inc.
+ 
++OUI:24A87D*
++ ID_OUI_FROM_DATABASE=Panasonic Automotive Systems Asia Pacific(Thailand)Co.,Ltd.
++
+ OUI:24A937*
+  ID_OUI_FROM_DATABASE=PURE Storage
+ 
+@@ -54121,6 +54250,9 @@ OUI:24DBAC*
+ OUI:24DBAD*
+  ID_OUI_FROM_DATABASE=ShopperTrak RCT Corporation
+ 
++OUI:24DBED*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
++
+ OUI:24DEC6*
+  ID_OUI_FROM_DATABASE=Aruba Networks
+ 
+@@ -54130,6 +54262,9 @@ OUI:24E271*
+ OUI:24E6BA*
+  ID_OUI_FROM_DATABASE=JSC Zavod im. Kozitsky
+ 
++OUI:24E9B3*
++ ID_OUI_FROM_DATABASE=Cisco
++
+ OUI:24EA40*
+  ID_OUI_FROM_DATABASE=Systeme Helmholz GmbH
+ 
+@@ -54547,6 +54682,9 @@ OUI:2C553C*
+ OUI:2C59E5*
+  ID_OUI_FROM_DATABASE=Hewlett Packard
+ 
++OUI:2C5A05*
++ ID_OUI_FROM_DATABASE=Nokia Corporation
++
+ OUI:2C5AA3*
+  ID_OUI_FROM_DATABASE=PROMATE ELECTRONIC CO.LTD
+ 
+@@ -54940,6 +55078,9 @@ OUI:3407FB*
+ OUI:340804*
+  ID_OUI_FROM_DATABASE=D-Link Corporation
+ 
++OUI:3413A8*
++ ID_OUI_FROM_DATABASE=Mediplan Limited
++
+ OUI:3413E8*
+  ID_OUI_FROM_DATABASE=Intel Corporate
+ 
+@@ -55321,6 +55462,9 @@ OUI:386E21*
+ OUI:3872C0*
+  ID_OUI_FROM_DATABASE=COMTREND
+ 
++OUI:387B47*
++ ID_OUI_FROM_DATABASE=AKELA, Inc.
++
+ OUI:388345*
+  ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO., LTD.
+ 
+@@ -55390,6 +55534,9 @@ OUI:38C7BA*
+ OUI:38C85C*
+  ID_OUI_FROM_DATABASE=Cisco SPVTG
+ 
++OUI:38C9A9*
++ ID_OUI_FROM_DATABASE=SMART High Reliability Solutions, Inc.
++
+ OUI:38CA97*
+  ID_OUI_FROM_DATABASE=Contour Design LLC
+ 
+@@ -55459,6 +55606,9 @@ OUI:3C081E*
+ OUI:3C096D*
+  ID_OUI_FROM_DATABASE=Powerhouse Dynamics
+ 
++OUI:3C0E23*
++ ID_OUI_FROM_DATABASE=Cisco
++
+ OUI:3C0FC1*
+  ID_OUI_FROM_DATABASE=KBC Networks
+ 
+@@ -55507,6 +55657,9 @@ OUI:3C300C*
+ OUI:3C363D*
+  ID_OUI_FROM_DATABASE=Nokia Corporation
+ 
++OUI:3C36E4*
++ ID_OUI_FROM_DATABASE=Arris Group, Inc.
++
+ OUI:3C3888*
+  ID_OUI_FROM_DATABASE=ConnectQuest, llc
+ 
+@@ -55672,6 +55825,9 @@ OUI:3CD0F8*
+ OUI:3CD16E*
+  ID_OUI_FROM_DATABASE=Telepower Communication Co., Ltd
+ 
++OUI:3CD4D6*
++ ID_OUI_FROM_DATABASE=WirelessWERX, Inc
++
+ OUI:3CD7DA*
+  ID_OUI_FROM_DATABASE=SK Mtek microelectronics(shenzhen)limited
+ 
+@@ -55771,6 +55927,9 @@ OUI:402CF4*
+ OUI:403004*
+  ID_OUI_FROM_DATABASE=Apple
+ 
++OUI:403067*
++ ID_OUI_FROM_DATABASE=Conlog (Pty) Ltd
++
+ OUI:40336C*
+  ID_OUI_FROM_DATABASE=Godrej & Boyce Mfg. co. ltd
+ 
+@@ -55918,6 +56077,9 @@ OUI:40B3FC*
+ OUI:40B4F0*
+  ID_OUI_FROM_DATABASE=Juniper Networks
+ 
++OUI:40B6B1*
++ ID_OUI_FROM_DATABASE=SUNGSAM CO,.Ltd
++
+ OUI:40B7F3*
+  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+ 
+@@ -55972,6 +56134,9 @@ OUI:40ECF8*
+ OUI:40EF4C*
+  ID_OUI_FROM_DATABASE=Fihonest communication co.,Ltd
+ 
++OUI:40F02F*
++ ID_OUI_FROM_DATABASE=Liteon Technology Corporation
++
+ OUI:40F14C*
+  ID_OUI_FROM_DATABASE=ISE Europe SPRL
+ 
+@@ -56203,6 +56368,12 @@ OUI:44C233*
+ OUI:44C39B*
+  ID_OUI_FROM_DATABASE=OOO RUBEZH NPO
+ 
++OUI:44C4A9*
++ ID_OUI_FROM_DATABASE=Opticom Communication, LLC
++
++OUI:44C56F*
++ ID_OUI_FROM_DATABASE=NGN Easy Satfinder (Tianjin) Electronic Co., Ltd
++
+ OUI:44C9A2*
+  ID_OUI_FROM_DATABASE=Greenwald Industries
+ 
+@@ -56362,6 +56533,9 @@ OUI:48B253*
+ OUI:48B8DE*
+  ID_OUI_FROM_DATABASE=HOMEWINS TECHNOLOGY CO.,LTD.
+ 
++OUI:48B977*
++ ID_OUI_FROM_DATABASE=PulseOn Oy
++
+ OUI:48B9C2*
+  ID_OUI_FROM_DATABASE=Teletics Inc.
+ 
+@@ -56659,9 +56833,15 @@ OUI:4CCC34*
+ OUI:4CD637*
+  ID_OUI_FROM_DATABASE=Qsono Electronics Co., Ltd
+ 
++OUI:4CD9C4*
++ ID_OUI_FROM_DATABASE=Magneti Marelli Automotive Electronics (Guangzhou) Co. Ltd
++
+ OUI:4CDF3D*
+  ID_OUI_FROM_DATABASE=TEAM ENGINEERS ADVANCE TECHNOLOGIES INDIA PVT LTD
+ 
++OUI:4CE1BB*
++ ID_OUI_FROM_DATABASE=Zhuhai HiFocus Technology Co., Ltd.
++
+ OUI:4CE676*
+  ID_OUI_FROM_DATABASE=Buffalo Inc.
+ 
+@@ -56701,6 +56881,9 @@ OUI:5011EB*
+ OUI:5017FF*
+  ID_OUI_FROM_DATABASE=Cisco
+ 
++OUI:501AC5*
++ ID_OUI_FROM_DATABASE=Microsoft
++
+ OUI:50206B*
+  ID_OUI_FROM_DATABASE=Emerson Climate Technologies Transportation Solutions
+ 
+@@ -56812,6 +56995,9 @@ OUI:507D02*
+ OUI:507E5D*
+  ID_OUI_FROM_DATABASE=Arcadyan Technology Corporation
+ 
++OUI:508569*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,LTD
++
+ OUI:5087B8*
+  ID_OUI_FROM_DATABASE=Nuvyyo Inc
+ 
+@@ -56995,6 +57181,9 @@ OUI:5435DF*
+ OUI:543968*
+  ID_OUI_FROM_DATABASE=Edgewater Networks Inc
+ 
++OUI:5439DF*
++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
++
+ OUI:543D37*
+  ID_OUI_FROM_DATABASE=Ruckus Wireless
+ 
+@@ -57055,6 +57244,9 @@ OUI:5481AD*
+ OUI:54847B*
+  ID_OUI_FROM_DATABASE=Digital Devices GmbH
+ 
++OUI:54880E*
++ ID_OUI_FROM_DATABASE=Samsung Electro Mechanics co., LTD.
++
+ OUI:548922*
+  ID_OUI_FROM_DATABASE=Zelfy Inc
+ 
+@@ -57439,6 +57631,9 @@ OUI:5C2479*
+ OUI:5C260A*
+  ID_OUI_FROM_DATABASE=Dell Inc.
+ 
++OUI:5C2AEF*
++ ID_OUI_FROM_DATABASE=Open Access Pty Ltd
++
+ OUI:5C3327*
+  ID_OUI_FROM_DATABASE=Spazio Italia srl
+ 
+@@ -57547,6 +57742,9 @@ OUI:5CA39D*
+ OUI:5CA3EB*
+  ID_OUI_FROM_DATABASE=Lokel s.r.o.
+ 
++OUI:5CA48A*
++ ID_OUI_FROM_DATABASE=Cisco
++
+ OUI:5CAC4C*
+  ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+ 
+@@ -58228,6 +58426,9 @@ OUI:64E161*
+ OUI:64E599*
+  ID_OUI_FROM_DATABASE=EFM Networks
+ 
++OUI:64E625*
++ ID_OUI_FROM_DATABASE=Woxu Wireless Co., Ltd
++
+ OUI:64E682*
+  ID_OUI_FROM_DATABASE=Apple
+ 
+@@ -58318,6 +58519,9 @@ OUI:683EEC*
+ OUI:684352*
+  ID_OUI_FROM_DATABASE=Bhuu Limited
+ 
++OUI:684898*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
++
+ OUI:684B88*
+  ID_OUI_FROM_DATABASE=Galtronics Telemetry Inc.
+ 
+@@ -58573,6 +58777,9 @@ OUI:6C3A84*
+ OUI:6C3BE5*
+  ID_OUI_FROM_DATABASE=Hewlett Packard
+ 
++OUI:6C3C53*
++ ID_OUI_FROM_DATABASE=SoundHawk Corp
++
+ OUI:6C3E6D*
+  ID_OUI_FROM_DATABASE=Apple
+ 
+@@ -58912,6 +59119,9 @@ OUI:706582*
+ OUI:70704C*
+  ID_OUI_FROM_DATABASE=Purple Communications, Inc
+ 
++OUI:7071B3*
++ ID_OUI_FROM_DATABASE=Brain Corporation
++
+ OUI:7071BC*
+  ID_OUI_FROM_DATABASE=PEGATRON CORPORATION
+ 
+@@ -58936,6 +59146,9 @@ OUI:7076F0*
+ OUI:707BE8*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
++OUI:707C18*
++ ID_OUI_FROM_DATABASE=ADATA Technology Co., Ltd
++
+ OUI:707E43*
+  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+ 
+@@ -59128,6 +59341,9 @@ OUI:74372F*
+ OUI:743889*
+  ID_OUI_FROM_DATABASE=ANNAX Anzeigesysteme GmbH
+ 
++OUI:743ECB*
++ ID_OUI_FROM_DATABASE=Gentrice tech
++
+ OUI:744401*
+  ID_OUI_FROM_DATABASE=NETGEAR
+ 
+@@ -59533,6 +59749,9 @@ OUI:78A6BD*
+ OUI:78A714*
+  ID_OUI_FROM_DATABASE=Amphenol
+ 
++OUI:78A873*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
++
+ OUI:78AB60*
+  ID_OUI_FROM_DATABASE=ABB Australia
+ 
+@@ -59644,6 +59863,9 @@ OUI:78E8B6*
+ OUI:78EC22*
+  ID_OUI_FROM_DATABASE=Shanghai Qihui Telecom Technology Co., LTD
+ 
++OUI:78EC74*
++ ID_OUI_FROM_DATABASE=Kyland-USA
++
+ OUI:78EF4C*
+  ID_OUI_FROM_DATABASE=Unetconvergence Co., Ltd.
+ 
+@@ -59749,6 +59971,9 @@ OUI:7C3E9D*
+ OUI:7C438F*
+  ID_OUI_FROM_DATABASE=E-Band Communications Corp.
+ 
++OUI:7C444C*
++ ID_OUI_FROM_DATABASE=Entertainment Solutions, S.L.
++
+ OUI:7C49B9*
+  ID_OUI_FROM_DATABASE=Plexus Manufacturing Sdn Bhd
+ 
+@@ -59911,6 +60136,9 @@ OUI:7CC8D7*
+ OUI:7CCB0D*
+  ID_OUI_FROM_DATABASE=Antaira Technologies, LLC
+ 
++OUI:7CCD11*
++ ID_OUI_FROM_DATABASE=MS-Magnet
++
+ OUI:7CCD3C*
+  ID_OUI_FROM_DATABASE=Guangzhou Juzing Technology Co., Ltd
+ 
+@@ -60181,6 +60409,9 @@ OUI:80B95C*
+ OUI:80BAAC*
+  ID_OUI_FROM_DATABASE=TeleAdapt Ltd
+ 
++OUI:80BAE6*
++ ID_OUI_FROM_DATABASE=Neets
++
+ OUI:80BBEB*
+  ID_OUI_FROM_DATABASE=Satmap Systems Ltd
+ 
+@@ -60373,6 +60604,9 @@ OUI:847E40*
+ OUI:8482F4*
+  ID_OUI_FROM_DATABASE=Beijing Huasun Unicreate Technology Co., Ltd
+ 
++OUI:848336*
++ ID_OUI_FROM_DATABASE=Newrun
++
+ OUI:848371*
+  ID_OUI_FROM_DATABASE=Avaya, Inc
+ 
+@@ -60475,6 +60709,9 @@ OUI:84F64C*
+ OUI:84FCFE*
+  ID_OUI_FROM_DATABASE=Apple
+ 
++OUI:84FE9E*
++ ID_OUI_FROM_DATABASE=RTC Industries, Inc.
++
+ OUI:880355*
+  ID_OUI_FROM_DATABASE=Arcadyan Technology Corp.
+ 
+@@ -60634,6 +60871,9 @@ OUI:889821*
+ OUI:889B39*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
++OUI:889CA6*
++ ID_OUI_FROM_DATABASE=BTB Korea INC
++
+ OUI:889FFA*
+  ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+ 
+@@ -60664,6 +60904,9 @@ OUI:88BFD5*
+ OUI:88C36E*
+  ID_OUI_FROM_DATABASE=Beijing Ereneben lnformation Technology Limited
+ 
++OUI:88C626*
++ ID_OUI_FROM_DATABASE=Logitech - Ultimate Ears
++
+ OUI:88C663*
+  ID_OUI_FROM_DATABASE=Apple
+ 
+@@ -60760,6 +61003,9 @@ OUI:8C2F39*
+ OUI:8C3330*
+  ID_OUI_FROM_DATABASE=EmFirst Co., Ltd.
+ 
++OUI:8C3AE3*
++ ID_OUI_FROM_DATABASE=LG Electronics
++
+ OUI:8C3C07*
+  ID_OUI_FROM_DATABASE=Skiva Technologies, Inc.
+ 
+@@ -60778,6 +61024,9 @@ OUI:8C4B59*
+ OUI:8C4CDC*
+  ID_OUI_FROM_DATABASE=PLANEX COMMUNICATIONS INC.
+ 
++OUI:8C4DB9*
++ ID_OUI_FROM_DATABASE=Unmonday Ltd
++
+ OUI:8C4DEA*
+  ID_OUI_FROM_DATABASE=Cerio Corporation
+ 
+@@ -60790,6 +61039,9 @@ OUI:8C53F7*
+ OUI:8C541D*
+  ID_OUI_FROM_DATABASE=LGE
+ 
++OUI:8C569D*
++ ID_OUI_FROM_DATABASE=Imaging Solutions Group
++
+ OUI:8C56C5*
+  ID_OUI_FROM_DATABASE=Nintendo Co., Ltd.
+ 
+@@ -60943,6 +61195,9 @@ OUI:8CDD8D*
+ OUI:8CDE52*
+  ID_OUI_FROM_DATABASE=ISSC Technologies Corp.
+ 
++OUI:8CDE99*
++ ID_OUI_FROM_DATABASE=Comlab Inc.
++
+ OUI:8CE081*
+  ID_OUI_FROM_DATABASE=zte corporation
+ 
+@@ -61138,6 +61393,9 @@ OUI:907F61*
+ OUI:908260*
+  ID_OUI_FROM_DATABASE=IEEE 1904.1 Working Group
+ 
++OUI:90837A*
++ ID_OUI_FROM_DATABASE=General Electric Water & Process Technologies
++
+ OUI:90840D*
+  ID_OUI_FROM_DATABASE=Apple
+ 
+@@ -61204,6 +61462,9 @@ OUI:90B21F*
+ OUI:90B8D0*
+  ID_OUI_FROM_DATABASE=Joyent, Inc.
+ 
++OUI:90B931*
++ ID_OUI_FROM_DATABASE=Apple, Inc
++
+ OUI:90B97D*
+  ID_OUI_FROM_DATABASE=Johnson Outdoors Marine Electronics d/b/a Minnkota
+ 
+@@ -61543,6 +61804,9 @@ OUI:94F720*
+ OUI:94FAE8*
+  ID_OUI_FROM_DATABASE=Shenzhen Eycom Technology Co., Ltd
+ 
++OUI:94FBB2*
++ ID_OUI_FROM_DATABASE=Shenzhen Gongjin Electronics Co.,Ltd
++
+ OUI:94FD1D*
+  ID_OUI_FROM_DATABASE=WhereWhen Corp
+ 
+@@ -61747,6 +62011,9 @@ OUI:98D6F7*
+ OUI:98D88C*
+  ID_OUI_FROM_DATABASE=Nortel Networks
+ 
++OUI:98DA92*
++ ID_OUI_FROM_DATABASE=Vuzix Corporation
++
+ OUI:98DCD9*
+  ID_OUI_FROM_DATABASE=UNITEC Co., Ltd.
+ 
+@@ -61780,6 +62047,9 @@ OUI:98FE03*
+ OUI:98FE94*
+  ID_OUI_FROM_DATABASE=Apple
+ 
++OUI:98FF6A*
++ ID_OUI_FROM_DATABASE=OTEC(Shanghai)Technology Co.,Ltd.
++
+ OUI:98FFD0*
+  ID_OUI_FROM_DATABASE=Lenovo Mobile Communication Technology Ltd.
+ 
+@@ -61849,6 +62119,9 @@ OUI:9C417C*
+ OUI:9C443D*
+  ID_OUI_FROM_DATABASE=CHENGDU XUGUANG TECHNOLOGY CO, LTD
+ 
++OUI:9C44A6*
++ ID_OUI_FROM_DATABASE=SwiftTest, Inc.
++
+ OUI:9C4563*
+  ID_OUI_FROM_DATABASE=DIMEP Sistemas
+ 
+@@ -61927,6 +62200,9 @@ OUI:9C7BD2*
+ OUI:9C807D*
+  ID_OUI_FROM_DATABASE=SYSCABLE Korea Inc.
+ 
++OUI:9C80DF*
++ ID_OUI_FROM_DATABASE=Arcadyan Technology Corporation
++
+ OUI:9C8888*
+  ID_OUI_FROM_DATABASE=Simac Techniek NV
+ 
+@@ -62098,6 +62374,9 @@ OUI:A01917*
+ OUI:A01C05*
+  ID_OUI_FROM_DATABASE=NIMAX TELECOM CO.,LTD.
+ 
++OUI:A01D48*
++ ID_OUI_FROM_DATABASE=Hewlett Packard
++
+ OUI:A02195*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Digital Imaging
+ 
+@@ -62416,6 +62695,9 @@ OUI:A433D1*
+ OUI:A438FC*
+  ID_OUI_FROM_DATABASE=Plastic Logic
+ 
++OUI:A43A69*
++ ID_OUI_FROM_DATABASE=Vers Inc
++
+ OUI:A4466B*
+  ID_OUI_FROM_DATABASE=EOC Technology
+ 
+@@ -62461,6 +62743,9 @@ OUI:A46706*
+ OUI:A46E79*
+  ID_OUI_FROM_DATABASE=DFT System Co.Ltd
+ 
++OUI:A47733*
++ ID_OUI_FROM_DATABASE=Google
++
+ OUI:A47760*
+  ID_OUI_FROM_DATABASE=Nokia Corporation
+ 
+@@ -62911,6 +63196,9 @@ OUI:AC20AA*
+ OUI:AC220B*
+  ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC.
+ 
++OUI:AC2DA3*
++ ID_OUI_FROM_DATABASE=TXTR GmbH
++
+ OUI:AC2FA8*
+  ID_OUI_FROM_DATABASE=Humannix Co.,Ltd.
+ 
+@@ -62986,6 +63274,9 @@ OUI:AC6123*
+ OUI:AC6706*
+  ID_OUI_FROM_DATABASE=Ruckus Wireless
+ 
++OUI:AC6BAC*
++ ID_OUI_FROM_DATABASE=Jenny Science AG
++
+ OUI:AC6E1A*
+  ID_OUI_FROM_DATABASE=Shenzhen Gongjin Electronics Co.,Ltd
+ 
+@@ -63085,6 +63376,9 @@ OUI:ACBEB6*
+ OUI:ACC2EC*
+  ID_OUI_FROM_DATABASE=CLT INT'L IND. CORP.
+ 
++OUI:ACC595*
++ ID_OUI_FROM_DATABASE=Graphite Systems
++
+ OUI:ACC698*
+  ID_OUI_FROM_DATABASE=Kohzu Precision Co., Ltd.
+ 
+@@ -63172,6 +63466,9 @@ OUI:ACF7F3*
+ OUI:ACF97E*
+  ID_OUI_FROM_DATABASE=ELESYS INC.
+ 
++OUI:ACFDEC*
++ ID_OUI_FROM_DATABASE=Apple, Inc
++
+ OUI:B00594*
+  ID_OUI_FROM_DATABASE=Liteon Technology Corporation
+ 
+@@ -63193,6 +63490,9 @@ OUI:B01B7C*
+ OUI:B01C91*
+  ID_OUI_FROM_DATABASE=Elim Co
+ 
++OUI:B024F3*
++ ID_OUI_FROM_DATABASE=Progeny Systems
++
+ OUI:B0358D*
+  ID_OUI_FROM_DATABASE=Nokia Corporation
+ 
+@@ -63286,6 +63586,9 @@ OUI:B09134*
+ OUI:B0973A*
+  ID_OUI_FROM_DATABASE=E-Fuel Corporation
+ 
++OUI:B0989F*
++ ID_OUI_FROM_DATABASE=LG CNS
++
+ OUI:B09928*
+  ID_OUI_FROM_DATABASE=Fujitsu Limited
+ 
+@@ -63313,6 +63616,9 @@ OUI:B0AA36*
+ OUI:B0ACFA*
+  ID_OUI_FROM_DATABASE=Fujitsu Limited
+ 
++OUI:B0ADAA*
++ ID_OUI_FROM_DATABASE=Avaya, Inc
++
+ OUI:B0B2DC*
+  ID_OUI_FROM_DATABASE=Zyxel Communications Corporation
+ 
+@@ -63364,6 +63670,9 @@ OUI:B0D09C*
+ OUI:B0D2F5*
+  ID_OUI_FROM_DATABASE=Vello Systems, Inc.
+ 
++OUI:B0D7C5*
++ ID_OUI_FROM_DATABASE=STP KFT
++
+ OUI:B0DF3A*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
+@@ -63466,6 +63775,9 @@ OUI:B43741*
+ OUI:B439D6*
+  ID_OUI_FROM_DATABASE=ProCurve Networking by HP
+ 
++OUI:B43A28*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
++
+ OUI:B43DB2*
+  ID_OUI_FROM_DATABASE=Degreane Horizon
+ 
+@@ -63784,6 +64096,9 @@ OUI:B8782E*
+ OUI:B8797E*
+  ID_OUI_FROM_DATABASE=Secure Meters (UK) Limited
+ 
++OUI:B87AC9*
++ ID_OUI_FROM_DATABASE=Siemens Ltd.
++
+ OUI:B8871E*
+  ID_OUI_FROM_DATABASE=Good Mind Industries Co., Ltd.
+ 
+@@ -63823,6 +64138,9 @@ OUI:B8975A*
+ OUI:B898B0*
+  ID_OUI_FROM_DATABASE=Atlona Inc.
+ 
++OUI:B898F7*
++ ID_OUI_FROM_DATABASE=Gionee Communication Equipment Co,Ltd.ShenZhen
++
+ OUI:B89AED*
+  ID_OUI_FROM_DATABASE=OceanServer Technology, Inc
+ 
+@@ -63985,12 +64303,18 @@ OUI:BC125E*
+ OUI:BC1401*
+  ID_OUI_FROM_DATABASE=Hitron Technologies. Inc
+ 
++OUI:BC14EF*
++ ID_OUI_FROM_DATABASE=ITON Technology Limited
++
+ OUI:BC15A6*
+  ID_OUI_FROM_DATABASE=Taiwan Jantek Electronics,Ltd.
+ 
+ OUI:BC1665*
+  ID_OUI_FROM_DATABASE=Cisco
+ 
++OUI:BC1A67*
++ ID_OUI_FROM_DATABASE=YF Technology Co., Ltd
++
+ OUI:BC20A4*
+  ID_OUI_FROM_DATABASE=Samsung Electronics
+ 
+@@ -64021,6 +64345,9 @@ OUI:BC2D98*
+ OUI:BC305B*
+  ID_OUI_FROM_DATABASE=Dell Inc.
+ 
++OUI:BC307D*
++ ID_OUI_FROM_DATABASE=Wistron Neweb Corp.
++
+ OUI:BC35E5*
+  ID_OUI_FROM_DATABASE=Hydro Systems Company
+ 
+@@ -64207,6 +64534,9 @@ OUI:BCE59F*
+ OUI:BCEA2B*
+  ID_OUI_FROM_DATABASE=CityCom GmbH
+ 
++OUI:BCEE7B*
++ ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC.
++
+ OUI:BCF2AF*
+  ID_OUI_FROM_DATABASE=devolo AG
+ 
+@@ -64324,6 +64654,9 @@ OUI:C0626B*
+ OUI:C06394*
+  ID_OUI_FROM_DATABASE=Apple
+ 
++OUI:C064C6*
++ ID_OUI_FROM_DATABASE=Nokia Corporation
++
+ OUI:C06599*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
+@@ -64462,6 +64795,9 @@ OUI:C0E54E*
+ OUI:C0EAE4*
+  ID_OUI_FROM_DATABASE=Sonicwall
+ 
++OUI:C0F1C4*
++ ID_OUI_FROM_DATABASE=Pacidal Corporation Ltd.
++
+ OUI:C0F8DA*
+  ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+ 
+@@ -64642,6 +64978,9 @@ OUI:C47F51*
+ OUI:C4823F*
+  ID_OUI_FROM_DATABASE=Fujian Newland Auto-ID Tech. Co,.Ltd.
+ 
++OUI:C4824E*
++ ID_OUI_FROM_DATABASE=Changzhou Uchip Electronics Co., LTD.
++
+ OUI:C48508*
+  ID_OUI_FROM_DATABASE=Intel Corporate
+ 
+@@ -65005,6 +65344,9 @@ OUI:C8F386*
+ OUI:C8F406*
+  ID_OUI_FROM_DATABASE=Avaya, Inc
+ 
++OUI:C8F68D*
++ ID_OUI_FROM_DATABASE=S.E.TECHNOLOGIES LIMITED
++
+ OUI:C8F704*
+  ID_OUI_FROM_DATABASE=Building Block Video
+ 
+@@ -65143,6 +65485,9 @@ OUI:CC5D57*
+ OUI:CC60BB*
+  ID_OUI_FROM_DATABASE=Empower RF Systems
+ 
++OUI:CC65AD*
++ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
++
+ OUI:CC69B0*
+  ID_OUI_FROM_DATABASE=Global Traffic Technologies, LLC
+ 
+@@ -65533,6 +65878,9 @@ OUI:D0DFB2*
+ OUI:D0DFC7*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
++OUI:D0E140*
++ ID_OUI_FROM_DATABASE=Apple, Inc
++
+ OUI:D0E347*
+  ID_OUI_FROM_DATABASE=Yoga
+ 
+@@ -65716,6 +66064,9 @@ OUI:D479C3*
+ OUI:D47B75*
+  ID_OUI_FROM_DATABASE=HARTING Electronics GmbH
+ 
++OUI:D481CA*
++ ID_OUI_FROM_DATABASE=iDevices, LLC
++
+ OUI:D4823E*
+  ID_OUI_FROM_DATABASE=Argosy Technologies, Ltd.
+ 
+@@ -65965,6 +66316,9 @@ OUI:D8543A*
+ OUI:D857EF*
+  ID_OUI_FROM_DATABASE=Samsung Electronics
+ 
++OUI:D858D7*
++ ID_OUI_FROM_DATABASE=CZ.NIC, z.s.p.o.
++
+ OUI:D85D4C*
+  ID_OUI_FROM_DATABASE=TP-LINK Technologies Co.,Ltd.
+ 
+@@ -66004,6 +66358,9 @@ OUI:D878E5*
+ OUI:D87988*
+  ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co., Ltd.
+ 
++OUI:D87CDD*
++ ID_OUI_FROM_DATABASE=SANIX INCORPORATED
++
+ OUI:D88A3B*
+  ID_OUI_FROM_DATABASE=UNIT-EM
+ 
+@@ -66475,6 +66832,9 @@ OUI:E067B3*
+ OUI:E06995*
+  ID_OUI_FROM_DATABASE=PEGATRON CORPORATION
+ 
++OUI:E0750A*
++ ID_OUI_FROM_DATABASE=ALPS ERECTORIC CO.,LTD.
++
+ OUI:E0757D*
+  ID_OUI_FROM_DATABASE=Motorola Mobility LLC
+ 
+@@ -66577,6 +66937,9 @@ OUI:E0C6B3*
+ OUI:E0C79D*
+  ID_OUI_FROM_DATABASE=Texas Instruments
+ 
++OUI:E0C86A*
++ ID_OUI_FROM_DATABASE=SHENZHEN TW-SCIE Co., Ltd
++
+ OUI:E0C922*
+  ID_OUI_FROM_DATABASE=Jireh Energy Tech., Ltd.
+ 
+@@ -66661,6 +67024,9 @@ OUI:E0F9BE*
+ OUI:E0FAEC*
+  ID_OUI_FROM_DATABASE=Platan sp. z o.o. sp. k.
+ 
++OUI:E40439*
++ ID_OUI_FROM_DATABASE=TomTom Software Ltd
++
+ OUI:E4115B*
+  ID_OUI_FROM_DATABASE=Hewlett Packard
+ 
+@@ -66997,6 +67363,9 @@ OUI:E85E53*
+ OUI:E8611F*
+  ID_OUI_FROM_DATABASE=Dawning Information Industry Co.,Ltd
+ 
++OUI:E86183*
++ ID_OUI_FROM_DATABASE=Black Diamond Advanced Technology, LLC
++
+ OUI:E86CDA*
+  ID_OUI_FROM_DATABASE=Supercomputers and Neurocomputers Research Center
+ 
+@@ -67435,6 +67804,9 @@ OUI:F02408*
+ OUI:F02572*
+  ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
+ 
++OUI:F025B7*
++ ID_OUI_FROM_DATABASE=Samsung Electro Mechanics co., LTD.
++
+ OUI:F0264C*
+  ID_OUI_FROM_DATABASE=Dr. Sigrist AG
+ 
+@@ -67486,6 +67858,9 @@ OUI:F05DC8*
+ OUI:F05F5A*
+  ID_OUI_FROM_DATABASE=Getriebebau NORD GmbH and Co. KG
+ 
++OUI:F06130*
++ ID_OUI_FROM_DATABASE=Advantage Pharmacy Services, LLC
++
+ OUI:F0620D*
+  ID_OUI_FROM_DATABASE=Shenzhen Egreat Tech Corp.,Ltd
+ 
+@@ -67681,6 +68056,9 @@ OUI:F40321*
+ OUI:F4044C*
+  ID_OUI_FROM_DATABASE=ValenceTech Limited
+ 
++OUI:F4068D*
++ ID_OUI_FROM_DATABASE=devolo AG
++
+ OUI:F40B93*
+  ID_OUI_FROM_DATABASE=Research In Motion
+ 
+@@ -68107,6 +68485,9 @@ OUI:F89FB8*
+ OUI:F8A03D*
+  ID_OUI_FROM_DATABASE=Dinstar Technologies Co., Ltd.
+ 
++OUI:F8A2B4*
++ ID_OUI_FROM_DATABASE=RHEWA-WAAGENFABRIK August Freudewald GmbH &amp;Co. KG
++
+ OUI:F8A45F*
+  ID_OUI_FROM_DATABASE=Beijing Xiaomi communications co.,ltd
+ 
+@@ -68245,6 +68626,9 @@ OUI:FC0647*
+ OUI:FC0877*
+  ID_OUI_FROM_DATABASE=Prentke Romich Company
+ 
++OUI:FC09D8*
++ ID_OUI_FROM_DATABASE=ACTEON Group
++
+ OUI:FC0A81*
+  ID_OUI_FROM_DATABASE=Motorola Solutions Inc.
+ 
+@@ -68314,6 +68698,9 @@ OUI:FC455F*
+ OUI:FC48EF*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
++OUI:FC4B1C*
++ ID_OUI_FROM_DATABASE=INTERSENSOR S.R.L.
++
+ OUI:FC4BBC*
+  ID_OUI_FROM_DATABASE=Sunplus Technology Co., Ltd.
+ 
+diff --git a/hwdb/20-pci-vendor-model.hwdb b/hwdb/20-pci-vendor-model.hwdb
+index fdb534d..289f81c 100644
+--- a/hwdb/20-pci-vendor-model.hwdb
++++ b/hwdb/20-pci-vendor-model.hwdb
+@@ -4158,7 +4158,7 @@ pci:v00001002d00005F57*
+  ID_MODEL_FROM_DATABASE=R423 [Radeon X800 XT]
+ 
+ pci:v00001002d00006600*
+- ID_MODEL_FROM_DATABASE=Mars [Radeon HD 8670A/8750M]
++ ID_MODEL_FROM_DATABASE=Mars [Radeon HD 8670A/8670M/8750M]
+ 
+ pci:v00001002d00006601*
+  ID_MODEL_FROM_DATABASE=Mars [Radeon HD 8730M]
+@@ -4169,6 +4169,12 @@ pci:v00001002d00006602*
+ pci:v00001002d00006603*
+  ID_MODEL_FROM_DATABASE=Mars
+ 
++pci:v00001002d00006604*
++ ID_MODEL_FROM_DATABASE=Mars [Radeon R7 M265]
++
++pci:v00001002d00006605*
++ ID_MODEL_FROM_DATABASE=Mars [Radeon R7 M260]
++
+ pci:v00001002d00006606*
+  ID_MODEL_FROM_DATABASE=Mars XTX [Radeon HD 8790M]
+ 
+@@ -4176,13 +4182,13 @@ pci:v00001002d00006607*
+  ID_MODEL_FROM_DATABASE=Mars LE [Radeon HD 8530M]
+ 
+ pci:v00001002d00006610*
+- ID_MODEL_FROM_DATABASE=Oland [Radeon HD 8600 Series]
++ ID_MODEL_FROM_DATABASE=Oland XT [Radeon HD 8670/R7 250]
+ 
+ pci:v00001002d00006611*
+  ID_MODEL_FROM_DATABASE=Oland [Radeon HD 8570]
+ 
+ pci:v00001002d00006613*
+- ID_MODEL_FROM_DATABASE=Oland [Radeon HD 8500 Series]
++ ID_MODEL_FROM_DATABASE=Oland PRO [Radeon R7 240]
+ 
+ pci:v00001002d00006620*
+  ID_MODEL_FROM_DATABASE=Mars
+@@ -4197,10 +4203,10 @@ pci:v00001002d00006631*
+  ID_MODEL_FROM_DATABASE=Oland
+ 
+ pci:v00001002d00006640*
+- ID_MODEL_FROM_DATABASE=Saturn [Radeon HD 8950]
++ ID_MODEL_FROM_DATABASE=Saturn XT [Radeon HD 8950M]
+ 
+ pci:v00001002d00006641*
+- ID_MODEL_FROM_DATABASE=Saturn PRO
++ ID_MODEL_FROM_DATABASE=Saturn PRO [Radeon HD 8930M]
+ 
+ pci:v00001002d00006649*
+  ID_MODEL_FROM_DATABASE=Bonaire
+@@ -4236,13 +4242,13 @@ pci:v00001002d0000665Csv00001787sd00002329*
+  ID_MODEL_FROM_DATABASE=Radeon HD 7790 TurboDuo
+ 
+ pci:v00001002d0000665D*
+- ID_MODEL_FROM_DATABASE=Bonaire
++ ID_MODEL_FROM_DATABASE=Bonaire [Radeon R7 200 Series]
+ 
+ pci:v00001002d00006660*
+- ID_MODEL_FROM_DATABASE=Sun XT [Radeon HD 8670A]
++ ID_MODEL_FROM_DATABASE=Sun XT [Radeon HD 8670A/8670M/8690M]
+ 
+ pci:v00001002d00006663*
+- ID_MODEL_FROM_DATABASE=Sun PRO [Radeon HD 8500M Series]
++ ID_MODEL_FROM_DATABASE=Sun PRO [Radeon HD 8570M]
+ 
+ pci:v00001002d00006664*
+  ID_MODEL_FROM_DATABASE=Jet XT [Radeon R5 M200 Series]
+@@ -4254,7 +4260,7 @@ pci:v00001002d00006667*
+  ID_MODEL_FROM_DATABASE=Jet ULT [Radeon R5 M200 Series]
+ 
+ pci:v00001002d0000666F*
+- ID_MODEL_FROM_DATABASE=Sun [Radeon HD 8500M]
++ ID_MODEL_FROM_DATABASE=Sun LE [Radeon HD 8550M]
+ 
+ pci:v00001002d00006670*
+  ID_MODEL_FROM_DATABASE=Hainan
+@@ -5675,6 +5681,15 @@ pci:v00001002d0000678Asv00001002sd0000030C*
+ pci:v00001002d0000678Asv00001002sd00000310*
+  ID_MODEL_FROM_DATABASE=FirePro S9000
+ 
++pci:v00001002d0000678Asv00001002sd00000420*
++ ID_MODEL_FROM_DATABASE=Radeon Sky 700
++
++pci:v00001002d0000678Asv00001002sd00000422*
++ ID_MODEL_FROM_DATABASE=Radeon Sky 900
++
++pci:v00001002d0000678Asv00001002sd00000B0E*
++ ID_MODEL_FROM_DATABASE=FirePro S10000 Passive
++
+ pci:v00001002d0000678Asv00001002sd00000B2A*
+  ID_MODEL_FROM_DATABASE=FirePro S10000
+ 
+@@ -5691,11 +5706,14 @@ pci:v00001002d00006792*
+  ID_MODEL_FROM_DATABASE=Tahiti
+ 
+ pci:v00001002d00006798*
+- ID_MODEL_FROM_DATABASE=Tahiti XT [Radeon HD 7970]
++ ID_MODEL_FROM_DATABASE=Tahiti XT [Radeon HD 7970/R9 280X]
+ 
+ pci:v00001002d00006798sv00001002sd00003000*
+  ID_MODEL_FROM_DATABASE=Tahiti XT2 [Radeon HD 7970 GHz Edition]
+ 
++pci:v00001002d00006798sv00001002sd00003001*
++ ID_MODEL_FROM_DATABASE=Tahiti XTL [Radeon R9 280X]
++
+ pci:v00001002d00006798sv00001002sd00004000*
+  ID_MODEL_FROM_DATABASE=Radeon HD 8970 OEM
+ 
+@@ -5717,6 +5735,12 @@ pci:v00001002d00006798sv00001043sd0000044A*
+ pci:v00001002d00006798sv00001043sd0000044C*
+  ID_MODEL_FROM_DATABASE=Tahiti XT2 [Matrix HD 7970 Platinum]
+ 
++pci:v00001002d00006798sv00001043sd00003001*
++ ID_MODEL_FROM_DATABASE=Tahiti XTL [ROG Matrix R9 280X]
++
++pci:v00001002d00006798sv00001043sd00003006*
++ ID_MODEL_FROM_DATABASE=Tahiti XTL [Radeon R9 280X DirectCU II TOP]
++
+ pci:v00001002d00006798sv00001043sd00009999*
+  ID_MODEL_FROM_DATABASE=ARES II
+ 
+@@ -5771,6 +5795,9 @@ pci:v00001002d0000679Bsv00001002sd00000B2A*
+ pci:v00001002d0000679Bsv00001462sd00008036*
+  ID_MODEL_FROM_DATABASE=Radeon HD 8990 OEM
+ 
++pci:v00001002d0000679Bsv0000148Csd00008990*
++ ID_MODEL_FROM_DATABASE=Radeon HD 8990 OEM
++
+ pci:v00001002d0000679E*
+  ID_MODEL_FROM_DATABASE=Tahiti LE [Radeon HD 7870 XT]
+ 
+@@ -5834,6 +5861,9 @@ pci:v00001002d00006808*
+ pci:v00001002d00006808sv00001002sd00000310*
+  ID_MODEL_FROM_DATABASE=FirePro S7000
+ 
++pci:v00001002d00006808sv00001002sd00000420*
++ ID_MODEL_FROM_DATABASE=Radeon Sky 500
++
+ pci:v00001002d00006809*
+  ID_MODEL_FROM_DATABASE=Pitcairn LE GL [FirePro W5000]
+ 
+@@ -5865,19 +5895,22 @@ pci:v00001002d00006819sv0000174Bsd0000E221*
+  ID_MODEL_FROM_DATABASE=Radeon HD 7850 2GB GDDR5 DVI-I/DVI-D/HDMI/DP
+ 
+ pci:v00001002d00006820*
+- ID_MODEL_FROM_DATABASE=Venus XTX [Radeon HD 8800M Series]
++ ID_MODEL_FROM_DATABASE=Venus XTX [Radeon HD 8890M]
+ 
+ pci:v00001002d00006820sv0000103Csd00001851*
+  ID_MODEL_FROM_DATABASE=Radeon HD 7750M
+ 
+ pci:v00001002d00006821*
+- ID_MODEL_FROM_DATABASE=Venus XT [Radeon HD 8800M Series]
++ ID_MODEL_FROM_DATABASE=Venus XT [Radeon HD 8870M]
++
++pci:v00001002d00006821sv00001002sd0000031E*
++ ID_MODEL_FROM_DATABASE=FirePro SX4000
+ 
+ pci:v00001002d00006822*
+  ID_MODEL_FROM_DATABASE=Venus PRO
+ 
+ pci:v00001002d00006823*
+- ID_MODEL_FROM_DATABASE=Venus PRO [Radeon HD 8800M Series]
++ ID_MODEL_FROM_DATABASE=Venus PRO [Radeon HD 8850M]
+ 
+ pci:v00001002d00006825*
+  ID_MODEL_FROM_DATABASE=Heathrow XT [Radeon HD 7870M]
+@@ -5901,7 +5934,7 @@ pci:v00001002d0000682A*
+  ID_MODEL_FROM_DATABASE=Venus PRO
+ 
+ pci:v00001002d0000682B*
+- ID_MODEL_FROM_DATABASE=Venus LE [Radeon HD 8800M Series]
++ ID_MODEL_FROM_DATABASE=Venus LE [Radeon HD 8830M]
+ 
+ pci:v00001002d0000682D*
+  ID_MODEL_FROM_DATABASE=Chelsea XT GL [FirePro M4000]
+@@ -5919,7 +5952,7 @@ pci:v00001002d00006831*
+  ID_MODEL_FROM_DATABASE=Cape Verde [AMD Radeon HD 7700M Series]
+ 
+ pci:v00001002d00006835*
+- ID_MODEL_FROM_DATABASE=Cape Verde PRX [Radeon R7 200 Series]
++ ID_MODEL_FROM_DATABASE=Cape Verde PRX [Radeon R7 260]
+ 
+ pci:v00001002d00006837*
+  ID_MODEL_FROM_DATABASE=Cape Verde LE [Radeon HD 7730/8730]
+@@ -16466,6 +16499,12 @@ pci:v00001077d00008031*
+ pci:v00001077d00008032*
+  ID_MODEL_FROM_DATABASE=8300 Series 10GbE Converged Network Adapter (iSCSI)
+ 
++pci:v00001077d00008430*
++ ID_MODEL_FROM_DATABASE=ISP8324 1/10GbE Converged Network Controller (NIC VF)
++
++pci:v00001077d00008431*
++ ID_MODEL_FROM_DATABASE=8300 Series 10GbE Converged Network Adapter (FCoE VF)
++
+ pci:v00001077d00008432*
+  ID_MODEL_FROM_DATABASE=ISP2432M-based 10GbE Converged Network Adapter (CNA)
+ 
+@@ -17090,6 +17129,12 @@ pci:v00001093d00002890*
+ pci:v00001093d000028C0*
+  ID_MODEL_FROM_DATABASE=PCI-6014
+ 
++pci:v00001093d000028D0*
++ ID_MODEL_FROM_DATABASE=PCI-5122
++
++pci:v00001093d000028E0*
++ ID_MODEL_FROM_DATABASE=PXI-5122
++
+ pci:v00001093d00002A60*
+  ID_MODEL_FROM_DATABASE=PCI-6023E
+ 
+@@ -17174,12 +17219,33 @@ pci:v00001093d000070BF*
+ pci:v00001093d000070C0*
+  ID_MODEL_FROM_DATABASE=PCI-6143
+ 
++pci:v00001093d000070F0*
++ ID_MODEL_FROM_DATABASE=PXI-5922
++
++pci:v00001093d000070F1*
++ ID_MODEL_FROM_DATABASE=PCI-5922
++
+ pci:v00001093d000070F2*
+  ID_MODEL_FROM_DATABASE=PCI-6224
+ 
++pci:v00001093d00007121*
++ ID_MODEL_FROM_DATABASE=PXI-5122EX
++
++pci:v00001093d00007122*
++ ID_MODEL_FROM_DATABASE=PCI-5122EX
++
+ pci:v00001093d00007144*
+  ID_MODEL_FROM_DATABASE=PXI-5124 (12-bit 200 MS/s Digitizer)
+ 
++pci:v00001093d00007145*
++ ID_MODEL_FROM_DATABASE=PCI-5124
++
++pci:v00001093d0000714C*
++ ID_MODEL_FROM_DATABASE=PXI-5114
++
++pci:v00001093d0000714D*
++ ID_MODEL_FROM_DATABASE=PCI-5114
++
+ pci:v00001093d0000716C*
+  ID_MODEL_FROM_DATABASE=PCI-6225
+ 
+@@ -17195,6 +17261,60 @@ pci:v00001093d000071BC*
+ pci:v00001093d000071D0*
+  ID_MODEL_FROM_DATABASE=PXI-6143
+ 
++pci:v00001093d00007260*
++ ID_MODEL_FROM_DATABASE=PXI-5142
++
++pci:v00001093d00007261*
++ ID_MODEL_FROM_DATABASE=PCI-5142
++
++pci:v00001093d000072A8*
++ ID_MODEL_FROM_DATABASE=PXI-5152
++
++pci:v00001093d000072A9*
++ ID_MODEL_FROM_DATABASE=PCI-5152
++
++pci:v00001093d000072AA*
++ ID_MODEL_FROM_DATABASE=PXI-5105
++
++pci:v00001093d000072AB*
++ ID_MODEL_FROM_DATABASE=PCI-5105
++
++pci:v00001093d0000730F*
++ ID_MODEL_FROM_DATABASE=PXI-5922EX
++
++pci:v00001093d00007310*
++ ID_MODEL_FROM_DATABASE=PCI-5922EX
++
++pci:v00001093d00007333*
++ ID_MODEL_FROM_DATABASE=PXI-5900
++
++pci:v00001093d00007349*
++ ID_MODEL_FROM_DATABASE=PXI-5154
++
++pci:v00001093d0000734A*
++ ID_MODEL_FROM_DATABASE=PCI-5154
++
++pci:v00001093d0000737D*
++ ID_MODEL_FROM_DATABASE=PXI-5124EX
++
++pci:v00001093d000073F0*
++ ID_MODEL_FROM_DATABASE=PXI-5153
++
++pci:v00001093d000073F1*
++ ID_MODEL_FROM_DATABASE=PCI-5153
++
++pci:v00001093d0000745E*
++ ID_MODEL_FROM_DATABASE=PXI-5153EX
++
++pci:v00001093d0000745F*
++ ID_MODEL_FROM_DATABASE=PCI-5153EX
++
++pci:v00001093d00007460*
++ ID_MODEL_FROM_DATABASE=PXI-5154EX
++
++pci:v00001093d00007461*
++ ID_MODEL_FROM_DATABASE=PCI-5154EX
++
+ pci:v00001093d0000B001*
+  ID_MODEL_FROM_DATABASE=IMAQ-PCI-1408
+ 
+@@ -17226,7 +17346,10 @@ pci:v00001093d0000B091*
+  ID_MODEL_FROM_DATABASE=IMAQ-PXI-1411
+ 
+ pci:v00001093d0000C4C4*
+- ID_MODEL_FROM_DATABASE=PXIe-4353
++ ID_MODEL_FROM_DATABASE=PXIe-4353/5160
++
++pci:v00001093d0000C4C4sv00001093sd000076D0*
++ ID_MODEL_FROM_DATABASE=PXIe-5160
+ 
+ pci:v00001093d0000C801*
+  ID_MODEL_FROM_DATABASE=PCI-GPIB
+@@ -25557,10 +25680,10 @@ pci:v000010DEd00000FE5*
+  ID_MODEL_FROM_DATABASE=GK107 [GeForce K340 USM]
+ 
+ pci:v000010DEd00000FE6*
+- ID_MODEL_FROM_DATABASE=GK107 [NVS K1 USM]
++ ID_MODEL_FROM_DATABASE=GK107 [GRID K1 NVS USM]
+ 
+ pci:v000010DEd00000FE7*
+- ID_MODEL_FROM_DATABASE=GK107GL [GRID K1]
++ ID_MODEL_FROM_DATABASE=GK107GL [GRID K100 vGPU]
+ 
+ pci:v000010DEd00000FE7sv000010DEsd0000101E*
+  ID_MODEL_FROM_DATABASE=GRID K100
+@@ -25575,13 +25698,13 @@ pci:v000010DEd00000FF2*
+  ID_MODEL_FROM_DATABASE=GK107GL [GRID K1]
+ 
+ pci:v000010DEd00000FF5*
+- ID_MODEL_FROM_DATABASE=GK107GL [Tesla K1 USM]
++ ID_MODEL_FROM_DATABASE=GK107GL [GRID K1 Tesla USM]
+ 
+ pci:v000010DEd00000FF6*
+  ID_MODEL_FROM_DATABASE=GK107GLM [Quadro K1100M]
+ 
+ pci:v000010DEd00000FF7*
+- ID_MODEL_FROM_DATABASE=GK107GL [Quadro K1 USM]
++ ID_MODEL_FROM_DATABASE=GK107GL [GRID K140Q vGPU]
+ 
+ pci:v000010DEd00000FF7sv000010DEsd00001037*
+  ID_MODEL_FROM_DATABASE=GRID K140Q
+@@ -25652,6 +25775,9 @@ pci:v000010DEd00001021*
+ pci:v000010DEd00001022*
+  ID_MODEL_FROM_DATABASE=GK110GL [Tesla K20c]
+ 
++pci:v000010DEd00001024*
++ ID_MODEL_FROM_DATABASE=GK110GL [Tesla K40c]
++
+ pci:v000010DEd00001026*
+  ID_MODEL_FROM_DATABASE=GK110GL [Tesla K20s]
+ 
+@@ -26246,6 +26372,9 @@ pci:v000010DEd00001140sv000017AAsd00003983*
+ pci:v000010DEd00001140sv000017AAsd00005003*
+  ID_MODEL_FROM_DATABASE=GeForce GT 720M
+ 
++pci:v000010DEd00001140sv000017AAsd00005005*
++ ID_MODEL_FROM_DATABASE=GeForce 705M
++
+ pci:v000010DEd00001140sv000017AAsd0000500D*
+  ID_MODEL_FROM_DATABASE=GeForce GT 620M
+ 
+@@ -26334,13 +26463,13 @@ pci:v000010DEd0000118A*
+  ID_MODEL_FROM_DATABASE=GK104GL [GRID K520]
+ 
+ pci:v000010DEd0000118B*
+- ID_MODEL_FROM_DATABASE=GK104 [GeForce K2 USM]
++ ID_MODEL_FROM_DATABASE=GK104GL [GRID K2 GeForce USM]
+ 
+ pci:v000010DEd0000118C*
+- ID_MODEL_FROM_DATABASE=GK104 [NVS K2 USM]
++ ID_MODEL_FROM_DATABASE=GK104 [GRID K2 NVS USM]
+ 
+ pci:v000010DEd0000118D*
+- ID_MODEL_FROM_DATABASE=GK104GL [GRID K2]
++ ID_MODEL_FROM_DATABASE=GK104GL [GRID K200 vGPU]
+ 
+ pci:v000010DEd0000118Dsv000010DEsd0000101D*
+  ID_MODEL_FROM_DATABASE=GRID K200
+@@ -26351,6 +26480,9 @@ pci:v000010DEd0000118E*
+ pci:v000010DEd0000118F*
+  ID_MODEL_FROM_DATABASE=GK104GL [Tesla K10]
+ 
++pci:v000010DEd00001193*
++ ID_MODEL_FROM_DATABASE=GK104 [GeForce GTX 760 Ti OEM]
++
+ pci:v000010DEd0000119D*
+  ID_MODEL_FROM_DATABASE=GK104M [GeForce GTX 775M]
+ 
+@@ -26379,7 +26511,7 @@ pci:v000010DEd000011A7*
+  ID_MODEL_FROM_DATABASE=GK104M [GeForce GTX 675MX]
+ 
+ pci:v000010DEd000011B0*
+- ID_MODEL_FROM_DATABASE=GK104GL [Quadro K2 USM]
++ ID_MODEL_FROM_DATABASE=GK104GL [GRID K240Q\K260Q vGPU]
+ 
+ pci:v000010DEd000011B0sv000010DEsd0000101A*
+  ID_MODEL_FROM_DATABASE=GRID K240Q
+@@ -26388,7 +26520,7 @@ pci:v000010DEd000011B0sv000010DEsd0000101B*
+  ID_MODEL_FROM_DATABASE=GRID K260Q
+ 
+ pci:v000010DEd000011B1*
+- ID_MODEL_FROM_DATABASE=GK104GL [Tesla K2 USM]
++ ID_MODEL_FROM_DATABASE=GK104GL [GRID K2 Tesla USM]
+ 
+ pci:v000010DEd000011B6*
+  ID_MODEL_FROM_DATABASE=GK104GLM [Quadro K3100M]
+@@ -32642,6 +32774,9 @@ pci:v00001179d00000618*
+ pci:v00001179d00000701*
+  ID_MODEL_FROM_DATABASE=FIR Port Type-O
+ 
++pci:v00001179d00000803*
++ ID_MODEL_FROM_DATABASE=TC6371AF SD Host Controller
++
+ pci:v00001179d00000804*
+  ID_MODEL_FROM_DATABASE=TC6371AF SmartMedia Controller
+ 
+@@ -40046,6 +40181,9 @@ pci:v000013F6d00008788sv000014C3sd00001710*
+ pci:v000013F6d00008788sv000014C3sd00001711*
+  ID_MODEL_FROM_DATABASE=HiFier Serenade
+ 
++pci:v000013F6d00008788sv000014C3sd00001713*
++ ID_MODEL_FROM_DATABASE=HiFier Serenade III
++
+ pci:v000013F6d00008788sv00001A58sd00000910*
+  ID_MODEL_FROM_DATABASE=Barracuda AC-1
+ 
+@@ -50711,8 +50849,11 @@ pci:v00001A41d00000002*
+ pci:v00001A41d00000200*
+  ID_MODEL_FROM_DATABASE=TILE-Gx processor
+ 
++pci:v00001A41d00000201*
++ ID_MODEL_FROM_DATABASE=TILE-Gx Processor Virtual Function
++
+ pci:v00001A41d00002000*
+- ID_MODEL_FROM_DATABASE=TILE-Gx PCI Express Bridge
++ ID_MODEL_FROM_DATABASE=TILE-Gx PCI Express Root Port
+ 
+ pci:v00001A4A*
+  ID_VENDOR_FROM_DATABASE=SLAC National Accelerator Lab PPA-REG
+@@ -51353,6 +51494,15 @@ pci:v00001CC5*
+ pci:v00001CC5d00000100*
+  ID_MODEL_FROM_DATABASE=CAN-PCIe-02
+ 
++pci:v00001CE4*
++ ID_VENDOR_FROM_DATABASE=Exablaze
++
++pci:v00001CE4d00000001*
++ ID_MODEL_FROM_DATABASE=ExaNIC X4
++
++pci:v00001CE4d00000002*
++ ID_MODEL_FROM_DATABASE=ExaNIC X2
++
+ pci:v00001D44*
+  ID_VENDOR_FROM_DATABASE=DPT
+ 
+@@ -54131,6 +54281,9 @@ pci:v00008086d000008B4sv00008086sd00000270*
+ pci:v00008086d000008B4sv00008086sd00008270*
+  ID_MODEL_FROM_DATABASE=Dual Band Wireless AC 3160
+ 
++pci:v00008086d000008CF*
++ ID_MODEL_FROM_DATABASE=Atom Processor Z2760 Integrated Graphics Controller
++
+ pci:v00008086d00000960*
+  ID_MODEL_FROM_DATABASE=80960RP (i960RP) Microprocessor/Bridge
+ 
+@@ -56369,6 +56522,9 @@ pci:v00008086d000010FBsv0000103Csd0000211B*
+ pci:v00008086d000010FBsv0000103Csd00002147*
+  ID_MODEL_FROM_DATABASE=Ethernet 10Gb 1-port 561i Adapter
+ 
++pci:v00008086d000010FBsv0000103Csd00002159*
++ ID_MODEL_FROM_DATABASE=Ethernet 10Gb 2-port 562i Adapter
++
+ pci:v00008086d000010FBsv0000108Esd00007B11*
+  ID_MODEL_FROM_DATABASE=Ethernet Server Adapter X520-2
+ 
+@@ -57290,6 +57446,9 @@ pci:v00008086d00001528sv00001028sd00001F61*
+ pci:v00008086d00001528sv0000103Csd0000192D*
+  ID_MODEL_FROM_DATABASE=561FLR-T 2-port 10Gb Ethernet Adapter
+ 
++pci:v00008086d00001528sv0000103Csd00002004*
++ ID_MODEL_FROM_DATABASE=Ethernet 10Gb 2-port 561i Adapter
++
+ pci:v00008086d00001528sv0000103Csd0000211A*
+  ID_MODEL_FROM_DATABASE=Ethernet 10Gb 2-port 561T Adapter
+ 
+@@ -57416,6 +57575,9 @@ pci:v00008086d0000155D*
+ pci:v00008086d0000155Dsv00008086sd00000001*
+  ID_MODEL_FROM_DATABASE=Ethernet Server Bypass Adapter X520-SR2
+ 
++pci:v00008086d0000155Dsv00008086sd00000002*
++ ID_MODEL_FROM_DATABASE=Ethernet Server Bypass Adapter X520-LR2
++
+ pci:v00008086d00001560*
+  ID_MODEL_FROM_DATABASE=Ethernet Controller X540
+ 
+@@ -69747,7 +69909,7 @@ pci:v00009005d00000285sv0000103Csd00003227*
+  ID_MODEL_FROM_DATABASE=AAR-2610SA
+ 
+ pci:v00009005d00000285sv0000108Esd00000286*
+- ID_MODEL_FROM_DATABASE=STK RAID INT
++ ID_MODEL_FROM_DATABASE=Sun StorageTek SAS RAID HBA, Internal
+ 
+ pci:v00009005d00000285sv0000108Esd00000287*
+  ID_MODEL_FROM_DATABASE=STK RAID EXT
diff --git a/SOURCES/0075-journald-fix-minor-memory-leak.patch b/SOURCES/0075-journald-fix-minor-memory-leak.patch
deleted file mode 100644
index 627a2e1..0000000
--- a/SOURCES/0075-journald-fix-minor-memory-leak.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-From e5440ffff5a2dd4f46a7f19fd2e9af4abe3e0121 Mon Sep 17 00:00:00 2001
-From: Lennart Poettering <lennart@poettering.net>
-Date: Wed, 9 Oct 2013 04:03:45 +0200
-Subject: [PATCH] journald: fix minor memory leak
-
----
- src/journal/journal-vacuum.c | 2 ++
- 1 file changed, 2 insertions(+)
-
-diff --git a/src/journal/journal-vacuum.c b/src/journal/journal-vacuum.c
-index c73ad8f..8d5effb 100644
---- a/src/journal/journal-vacuum.c
-+++ b/src/journal/journal-vacuum.c
-@@ -278,6 +278,8 @@ int journal_directory_vacuum(
-                         } else if (errno != ENOENT)
-                                 log_warning("Failed to delete %s/%s: %m", directory, p);
- 
-+                        free(p);
-+
-                         continue;
-                 }
- 
diff --git a/SOURCES/0076-journald-remove-rotated-file-from-hashmap-when-rotat.patch b/SOURCES/0076-journald-remove-rotated-file-from-hashmap-when-rotat.patch
deleted file mode 100644
index bd20427..0000000
--- a/SOURCES/0076-journald-remove-rotated-file-from-hashmap-when-rotat.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-From 42ca19f57176c4b89fc318b5612e644f66ff8d37 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
-Date: Wed, 9 Oct 2013 22:13:13 -0400
-Subject: [PATCH] journald: remove rotated file from hashmap when rotation
- fails
-
-Before, when the user journal file was rotated, journal_file_rotate
-could close the old file and fail to open the new file. In that
-case, we would leave the old (deallocated) file in the hashmap.
-On subsequent accesses, we could retrieve this stale entry, leading
-to a segfault.
-
-When journal_file_rotate fails with the file pointer set to 0,
-old file is certainly gone, and cannot be used anymore.
-
-https://bugzilla.redhat.com/show_bug.cgi?id=890463
----
- src/journal/journald-server.c | 4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
-
-diff --git a/src/journal/journald-server.c b/src/journal/journald-server.c
-index 8007b05..2ae0591 100644
---- a/src/journal/journald-server.c
-+++ b/src/journal/journald-server.c
-@@ -321,8 +321,10 @@ void server_rotate(Server *s) {
-                 if (r < 0)
-                         if (f)
-                                 log_error("Failed to rotate %s: %s", f->path, strerror(-r));
--                        else
-+                        else {
-                                 log_error("Failed to create user journal: %s", strerror(-r));
-+                                hashmap_remove(s->user_journals, k);
-+                        }
-                 else {
-                         hashmap_replace(s->user_journals, k, f);
-                         server_fix_perms(s, f, PTR_TO_UINT32(k));
diff --git a/SOURCES/0076-rules-remove-pointless-MODE-settings.patch b/SOURCES/0076-rules-remove-pointless-MODE-settings.patch
new file mode 100644
index 0000000..e2f5e28
--- /dev/null
+++ b/SOURCES/0076-rules-remove-pointless-MODE-settings.patch
@@ -0,0 +1,40 @@
+From d5ac78410cbf19b9e9e420286ad1afce03764c6d Mon Sep 17 00:00:00 2001
+From: Kay Sievers <kay@vrfy.org>
+Date: Mon, 21 Oct 2013 03:49:03 +0200
+Subject: [PATCH] rules: remove pointless MODE= settings
+
+Changing the default MODE= for the group accessi, but not specifying
+a GROUP= does not provide anything.
+
+It disables the default logic that the mode switches to 0660 as soon
+as a GROUP= is specifed, which make custom rules uneccesarily complicated.
+
+https://bugs.freedesktop.org/show_bug.cgi?id=70665
+---
+ rules/50-udev-default.rules | 6 ++----
+ 1 file changed, 2 insertions(+), 4 deletions(-)
+
+diff --git a/rules/50-udev-default.rules b/rules/50-udev-default.rules
+index f764789..679dfdf 100644
+--- a/rules/50-udev-default.rules
++++ b/rules/50-udev-default.rules
+@@ -20,9 +20,7 @@ KERNEL=="tty[A-Z]*[0-9]|pppox[0-9]*|ircomm[0-9]*|noz[0-9]*|rfcomm[0-9]*", GROUP=
+ 
+ SUBSYSTEM=="mem", KERNEL=="mem|kmem|port", GROUP="kmem", MODE="0640"
+ 
+-SUBSYSTEM=="input", KERNEL=="mouse*|mice|event*", MODE="0640"
+-SUBSYSTEM=="input", KERNEL=="ts[0-9]*|uinput", MODE="0640"
+-SUBSYSTEM=="input", KERNEL=="js[0-9]*", MODE="0644"
++SUBSYSTEM=="input", KERNEL=="js[0-9]*", MODE="0664"
+ 
+ SUBSYSTEM=="video4linux", GROUP="video"
+ SUBSYSTEM=="misc", KERNEL=="agpgart", GROUP="video"
+@@ -63,7 +61,7 @@ SUBSYSTEM=="raw", KERNEL=="raw[0-9]*", GROUP="disk"
+ SUBSYSTEM=="aoe", GROUP="disk", MODE="0220"
+ SUBSYSTEM=="aoe", KERNEL=="err", MODE="0440"
+ 
+-KERNEL=="rfkill", MODE="0644"
++KERNEL=="rfkill", MODE="0664"
+ KERNEL=="tun", MODE="0666", OPTIONS+="static_node=net/tun"
+ 
+ KERNEL=="fuse", MODE="0666", OPTIONS+="static_node=fuse"
diff --git a/SOURCES/0077-catalog-remove-links-to-non-existent-wiki-pages.patch b/SOURCES/0077-catalog-remove-links-to-non-existent-wiki-pages.patch
new file mode 100644
index 0000000..242ab4f
--- /dev/null
+++ b/SOURCES/0077-catalog-remove-links-to-non-existent-wiki-pages.patch
@@ -0,0 +1,89 @@
+From c1dfe1e12f7f37d3f3ad13160146a551a396f3c0 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Thu, 24 Oct 2013 00:45:10 -0400
+Subject: [PATCH] catalog: remove links to non-existent wiki pages
+
+AFAIK, we don't have even one page with message explanations.
+If/when we add them, we can add links.
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1017161
+---
+ catalog/systemd.catalog | 9 ---------
+ 1 file changed, 9 deletions(-)
+
+diff --git a/catalog/systemd.catalog b/catalog/systemd.catalog
+index 892b2ad..3c2fe64 100644
+--- a/catalog/systemd.catalog
++++ b/catalog/systemd.catalog
+@@ -204,7 +204,6 @@ Unit @UNIT@ has begun shutting down.
+ Subject: Unit @UNIT@ has finished shutting down
+ Defined-By: systemd
+ Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
+-Documentation: http://www.freedesktop.org/wiki/Software/systemd/catalog/@MESSAGE_ID@
+ 
+ Unit @UNIT@ has finished shutting down.
+ 
+@@ -212,7 +211,6 @@ Unit @UNIT@ has finished shutting down.
+ Subject: Unit @UNIT@ has failed
+ Defined-By: systemd
+ Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
+-Documentation: http://www.freedesktop.org/wiki/Software/systemd/catalog/@MESSAGE_ID@
+ 
+ Unit @UNIT@ has failed.
+ 
+@@ -222,7 +220,6 @@ The result is @RESULT@.
+ Subject: Unit @UNIT@ has begun with reloading its configuration
+ Defined-By: systemd
+ Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
+-Documentation: http://www.freedesktop.org/wiki/Software/systemd/catalog/@MESSAGE_ID@
+ 
+ Unit @UNIT@ has begun with reloading its configuration
+ 
+@@ -230,7 +227,6 @@ Unit @UNIT@ has begun with reloading its configuration
+ Subject: Unit @UNIT@ has finished reloading its configuration
+ Defined-By: systemd
+ Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
+-Documentation: http://www.freedesktop.org/wiki/Software/systemd/catalog/@MESSAGE_ID@
+ 
+ Unit @UNIT@ has finished reloading its configuration
+ 
+@@ -240,7 +236,6 @@ The result is @RESULT@.
+ Subject: Process @EXECUTABLE@ could not be executed
+ Defined-By: systemd
+ Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
+-Documentation: http://www.freedesktop.org/wiki/Software/systemd/catalog/@MESSAGE_ID@
+ 
+ The process @EXECUTABLE@ could not be executed and failed.
+ 
+@@ -250,7 +245,6 @@ The error number returned while executing this process is @ERRNO@.
+ Subject: One or more messages could not be forwarded to syslog
+ Defined-By: systemd
+ Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
+-Documentation: http://www.freedesktop.org/wiki/Software/systemd/catalog/@MESSAGE_ID@
+ 
+ One or more messages could not be forwarded to the syslog service
+ running side-by-side with journald. This usually indicates that the
+@@ -261,7 +255,6 @@ messages queued.
+ Subject: Mount point is not empty
+ Defined-By: systemd
+ Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
+-Documentation: http://www.freedesktop.org/wiki/Software/systemd/catalog/@MESSAGE_ID@
+ 
+ The directory @WHERE@ is specified as the mount point (second field in
+ /etc/fstab or Where= field in systemd unit file) and is not empty.
+@@ -274,7 +267,6 @@ location.
+ Subject: A virtual machine or container has been started
+ Defined-By: systemd
+ Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
+-Documentation: http://www.freedesktop.org/wiki/Software/systemd/catalog/@MESSAGE_ID@
+ 
+ The virtual machine @NAME@ with its leader PID @LEADER@ has been
+ started is now ready to use.
+@@ -283,7 +275,6 @@ started is now ready to use.
+ Subject: A virtual machine or container has been terminated
+ Defined-By: systemd
+ Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
+-Documentation: http://www.freedesktop.org/wiki/Software/systemd/catalog/@MESSAGE_ID@
+ 
+ The virtual machine @NAME@ with its leader PID @LEADER@ has been
+ shut down.
diff --git a/SOURCES/0077-udevadm.xml-document-resolve-names-option-for-test.patch b/SOURCES/0077-udevadm.xml-document-resolve-names-option-for-test.patch
deleted file mode 100644
index 3b9a3da..0000000
--- a/SOURCES/0077-udevadm.xml-document-resolve-names-option-for-test.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From b83f0d2ac4845071541737428e9e7b15aa12c982 Mon Sep 17 00:00:00 2001
-From: Dave Reisner <dreisner@archlinux.org>
-Date: Sun, 13 Oct 2013 17:42:51 -0400
-Subject: [PATCH] udevadm.xml: document --resolve-names option for test
-
-And remove documentation of the --subsystem flag which doesn't actually
-exist.
----
- man/udevadm.xml | 8 ++++++--
- 1 file changed, 6 insertions(+), 2 deletions(-)
-
-diff --git a/man/udevadm.xml b/man/udevadm.xml
-index d0b257d..b959216 100644
---- a/man/udevadm.xml
-+++ b/man/udevadm.xml
-@@ -462,9 +462,13 @@
-           </listitem>
-         </varlistentry>
-         <varlistentry>
--          <term><option>--subsystem=<replaceable>string</replaceable></option></term>
-+          <term><option>--resolve-names=<replaceable>early|late|never</replaceable></option></term>
-           <listitem>
--            <para>The subsystem string.</para>
-+            <para>Specify when udevadm should resolve names of users and groups.
-+              When set to early (the default) names will be resolved when the
-+              rules are parsed. When set to late names will be resolved for
-+              every event. When set to never names will never be resolved and
-+              all devices will be owned by root.</para>
-           </listitem>
-         </varlistentry>
-         <varlistentry>
diff --git a/SOURCES/0078-dbus-common-avoid-leak-in-error-path.patch b/SOURCES/0078-dbus-common-avoid-leak-in-error-path.patch
deleted file mode 100644
index c49dbab..0000000
--- a/SOURCES/0078-dbus-common-avoid-leak-in-error-path.patch
+++ /dev/null
@@ -1,68 +0,0 @@
-From 8ce4a7267b3e22e1633f2cfdc1898e52c54fb254 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
-Date: Fri, 11 Oct 2013 19:33:20 -0400
-Subject: [PATCH] dbus-common: avoid leak in error path
-
-src/shared/dbus-common.c:968:33: warning: Potential leak of memory pointed to by 'l'
-                        return -EINVAL;
-                                ^~~~~~
----
- src/shared/dbus-common.c | 20 ++++++++++----------
- 1 file changed, 10 insertions(+), 10 deletions(-)
-
-diff --git a/src/shared/dbus-common.c b/src/shared/dbus-common.c
-index c727cae..3ba2d87 100644
---- a/src/shared/dbus-common.c
-+++ b/src/shared/dbus-common.c
-@@ -934,7 +934,7 @@ int bus_parse_strv_iter(DBusMessageIter *iter, char ***_l) {
- int bus_parse_strv_pairs_iter(DBusMessageIter *iter, char ***_l) {
-         DBusMessageIter sub, sub2;
-         unsigned n = 0, i = 0;
--        char **l;
-+        _cleanup_strv_free_ char **l = NULL;
- 
-         assert(iter);
-         assert(_l);
-@@ -953,6 +953,7 @@ int bus_parse_strv_pairs_iter(DBusMessageIter *iter, char ***_l) {
-         l = new(char*, n*2+1);
-         if (!l)
-                 return -ENOMEM;
-+        l[0] = NULL; /* make sure that l is properly terminated at all times */
- 
-         dbus_message_iter_recurse(iter, &sub);
- 
-@@ -968,26 +969,25 @@ int bus_parse_strv_pairs_iter(DBusMessageIter *iter, char ***_l) {
-                         return -EINVAL;
- 
-                 l[i] = strdup(a);
--                if (!l[i]) {
--                        strv_free(l);
-+                if (!l[i])
-                         return -ENOMEM;
--                }
-+                i++;
- 
--                l[++i] = strdup(b);
--                if (!l[i]) {
--                        strv_free(l);
-+                l[i] = strdup(b);
-+                if (!l[i])
-                         return -ENOMEM;
--                }
--
-                 i++;
-+
-                 dbus_message_iter_next(&sub);
-         }
- 
-         assert(i == n*2);
-         l[i] = NULL;
- 
--        if (_l)
-+        if (_l) {
-                 *_l = l;
-+                l = NULL; /* avoid freeing */
-+        }
- 
-         return 0;
- }
diff --git a/SOURCES/0078-udev-builtin-path_id-add-support-for-bcma-bus.patch b/SOURCES/0078-udev-builtin-path_id-add-support-for-bcma-bus.patch
new file mode 100644
index 0000000..b3d3af9
--- /dev/null
+++ b/SOURCES/0078-udev-builtin-path_id-add-support-for-bcma-bus.patch
@@ -0,0 +1,47 @@
+From 8e98bfcd1771a460ccf99fa7df7d46cac2e1754a Mon Sep 17 00:00:00 2001
+From: Tom Gundersen <teg@jklm.no>
+Date: Sat, 26 Oct 2013 12:22:04 +0200
+Subject: [PATCH] udev-builtin: path_id - add support for bcma bus
+
+This matches the bcma support in the network device naming.
+
+Eventually wa want to make sure ID_PATH is equivalent to ID_NET_NAME_PATH,
+so we never need to match on the latter.
+---
+ src/udev/udev-builtin-path_id.c | 16 ++++++++++++++++
+ 1 file changed, 16 insertions(+)
+
+diff --git a/src/udev/udev-builtin-path_id.c b/src/udev/udev-builtin-path_id.c
+index 0659967..763f3c3 100644
+--- a/src/udev/udev-builtin-path_id.c
++++ b/src/udev/udev-builtin-path_id.c
+@@ -452,6 +452,19 @@ static struct udev_device *handle_usb(struct udev_device *parent, char **path)
+         return parent;
+ }
+ 
++static struct udev_device *handle_bcma(struct udev_device *parent, char **path)
++{
++        const char *sysname;
++        unsigned int core;
++
++        sysname = udev_device_get_sysname(parent);
++        if (sscanf(sysname, "bcma%*u:%u", &core) != 1)
++                return NULL;
++
++        path_prepend(path, "bcma-%u", core);
++        return parent;
++}
++
+ static struct udev_device *handle_ccw(struct udev_device *parent, struct udev_device *dev, char **path)
+ {
+         struct udev_device *scsi_dev;
+@@ -509,6 +522,9 @@ static int builtin_path_id(struct udev_device *dev, int argc, char *argv[], bool
+                 } else if (streq(subsys, "usb")) {
+                         parent = handle_usb(parent, &path);
+                         some_transport = true;
++                } else if (streq(subsys, "bcma")) {
++                        parent = handle_bcma(parent, &path);
++                        some_transport = true;
+                 } else if (streq(subsys, "serio")) {
+                         path_prepend(&path, "serio-%s", udev_device_get_sysnum(parent));
+                         parent = skip_subsystem(parent, "serio");
diff --git a/SOURCES/0079-drop-ins-check-return-value.patch b/SOURCES/0079-drop-ins-check-return-value.patch
deleted file mode 100644
index a7088f4..0000000
--- a/SOURCES/0079-drop-ins-check-return-value.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From 49a1b4948c3da7828c4b3765782e43f8a26c2929 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
-Date: Fri, 11 Oct 2013 19:33:36 -0400
-Subject: [PATCH] drop-ins: check return value
-
-If the function failed, nothing serious would happen
-because unlink would probably return EFAULT, but this
-would obscure the real error and is a bit sloppy.
----
- src/core/unit.c | 3 +++
- 1 file changed, 3 insertions(+)
-
-diff --git a/src/core/unit.c b/src/core/unit.c
-index 4b97710..1db7d06 100644
---- a/src/core/unit.c
-+++ b/src/core/unit.c
-@@ -2908,6 +2908,9 @@ int unit_remove_drop_in(Unit *u, UnitSetPropertiesMode mode, const char *name) {
-                 return 0;
- 
-         r = drop_in_file(u, mode, name, &p, &q);
-+        if (r < 0)
-+                return r;
-+
-         if (unlink(q) < 0)
-                 r = errno == ENOENT ? 0 : -errno;
-         else
diff --git a/SOURCES/0079-libudev-default-log_priority-to-INFO.patch b/SOURCES/0079-libudev-default-log_priority-to-INFO.patch
new file mode 100644
index 0000000..e680015
--- /dev/null
+++ b/SOURCES/0079-libudev-default-log_priority-to-INFO.patch
@@ -0,0 +1,23 @@
+From 1842d7a64410f099a454f341ecf0ad9d6682f8ec Mon Sep 17 00:00:00 2001
+From: Tom Gundersen <teg@jklm.no>
+Date: Wed, 30 Oct 2013 15:09:01 +0100
+Subject: [PATCH] libudev: default log_priority to INFO
+
+This brings it in sync with the default config file.
+---
+ src/libudev/libudev.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/libudev/libudev.c b/src/libudev/libudev.c
+index 208039a..bc73a5a 100644
+--- a/src/libudev/libudev.c
++++ b/src/libudev/libudev.c
+@@ -125,7 +125,7 @@ _public_ struct udev *udev_new(void)
+                 return NULL;
+         udev->refcount = 1;
+         udev->log_fn = log_stderr;
+-        udev->log_priority = LOG_ERR;
++        udev->log_priority = LOG_INFO;
+         udev_list_init(udev, &udev->properties_list, true);
+ 
+         f = fopen("/etc/udev/udev.conf", "re");
diff --git a/SOURCES/0080-nspawn-only-pass-in-slice-setting-if-it-is-set.patch b/SOURCES/0080-nspawn-only-pass-in-slice-setting-if-it-is-set.patch
new file mode 100644
index 0000000..7888d44
--- /dev/null
+++ b/SOURCES/0080-nspawn-only-pass-in-slice-setting-if-it-is-set.patch
@@ -0,0 +1,22 @@
+From d5e2897030849371bc976ecb8de3ca2fbf16b6bb Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart@poettering.net>
+Date: Wed, 30 Oct 2013 18:40:21 +0100
+Subject: [PATCH] nspawn: only pass in slice setting if it is set
+
+---
+ src/nspawn/nspawn.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c
+index eb9605c..9616dbf 100644
+--- a/src/nspawn/nspawn.c
++++ b/src/nspawn/nspawn.c
+@@ -1202,7 +1202,7 @@ static int register_machine(void) {
+                         "container",
+                         (uint32_t) 0,
+                         strempty(arg_directory),
+-                        1, "Slice", "s", strempty(arg_slice));
++                        !isempty(arg_slice), "Slice", "s", arg_slice);
+         if (r < 0) {
+                 log_error("Failed to register machine: %s", error.message ? error.message : strerror(-r));
+                 return r;
diff --git a/SOURCES/0080-shared-util-Fix-glob_extend-argument.patch b/SOURCES/0080-shared-util-Fix-glob_extend-argument.patch
deleted file mode 100644
index e0a7153..0000000
--- a/SOURCES/0080-shared-util-Fix-glob_extend-argument.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-From ebdc476db9419b36a046e8870ee6bb4bc6f57dc3 Mon Sep 17 00:00:00 2001
-From: Bastien Nocera <hadess@hadess.net>
-Date: Mon, 14 Oct 2013 08:15:51 +0200
-Subject: [PATCH] shared/util: Fix glob_extend() argument
-
-glob_extend() would completely fail to work, or return incorrect
-data if it wasn't being passed the current getopt "optarg" variable
-as it used the global variable, instead of the passed parameters.
----
- src/shared/util.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/shared/util.c b/src/shared/util.c
-index f6f3b18..3d4ca7c 100644
---- a/src/shared/util.c
-+++ b/src/shared/util.c
-@@ -4370,7 +4370,7 @@ int glob_extend(char ***strv, const char *path) {
-         char **p;
- 
-         errno = 0;
--        k = glob(optarg, GLOB_NOSORT|GLOB_BRACE, NULL, &g);
-+        k = glob(path, GLOB_NOSORT|GLOB_BRACE, NULL, &g);
- 
-         if (k == GLOB_NOMATCH)
-                 return -ENOENT;
diff --git a/SOURCES/0081-Fix-for-SIGSEGV-in-systemd-bootchart-on-short-living.patch b/SOURCES/0081-Fix-for-SIGSEGV-in-systemd-bootchart-on-short-living.patch
deleted file mode 100644
index df97a46..0000000
--- a/SOURCES/0081-Fix-for-SIGSEGV-in-systemd-bootchart-on-short-living.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From 3a01553871713888812f234b62a40e892f9f2b8c Mon Sep 17 00:00:00 2001
-From: Igor Zhbanov <i.zhbanov@samsung.com>
-Date: Tue, 15 Oct 2013 14:35:13 +0400
-Subject: [PATCH] Fix for SIGSEGV in systemd-bootchart on short-living
- processes
-
-The function svg_ps_bars() dereferencess NULL pointer in the line
-	endtime = ps->last->sampledata->sampletime;
-because of partially initialized ps_struct (ps->last == NULL).
-
-If some process terminates between scaning /proc directory in the log_sample()
-function and reading additional information from /proc/PID/... files,
-the files couldn't be read, the loop will be continued and partially
-initialized structure returned.
----
- src/bootchart/store.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/bootchart/store.c b/src/bootchart/store.c
-index f8c97c2..7f86cfe 100644
---- a/src/bootchart/store.c
-+++ b/src/bootchart/store.c
-@@ -275,7 +275,7 @@ schedstat_next:
-                         pscount++;
- 
-                         /* mark our first sample */
--                        ps->first = ps->sample;
-+                        ps->first = ps->last = ps->sample;
-                         ps->sample->runtime = atoll(rt);
-                         ps->sample->waittime = atoll(wt);
- 
diff --git a/SOURCES/0081-zsh-completion-add-systemd-run.patch b/SOURCES/0081-zsh-completion-add-systemd-run.patch
new file mode 100644
index 0000000..697c4a7
--- /dev/null
+++ b/SOURCES/0081-zsh-completion-add-systemd-run.patch
@@ -0,0 +1,60 @@
+From d437087966e4a5f7ad0b37b4254988de41e16228 Mon Sep 17 00:00:00 2001
+From: Ronny Chevalier <chevalier.ronny@gmail.com>
+Date: Wed, 30 Oct 2013 21:57:44 +0100
+Subject: [PATCH] zsh-completion: add systemd-run
+
+---
+ Makefile.am                       |  1 +
+ shell-completion/zsh/_systemd-run | 31 +++++++++++++++++++++++++++++++
+ 2 files changed, 32 insertions(+)
+ create mode 100644 shell-completion/zsh/_systemd-run
+
+diff --git a/Makefile.am b/Makefile.am
+index 8d9c587..0c11477 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -352,6 +352,7 @@ dist_zshcompletion_DATA = \
+ 	shell-completion/zsh/_kernel-install \
+ 	shell-completion/zsh/_systemd-nspawn \
+ 	shell-completion/zsh/_systemd-analyze \
++	shell-completion/zsh/_systemd-run \
+ 	shell-completion/zsh/_sd_hosts_or_user_at_host \
+ 	shell-completion/zsh/_systemd-delta \
+ 	shell-completion/zsh/_systemd
+diff --git a/shell-completion/zsh/_systemd-run b/shell-completion/zsh/_systemd-run
+new file mode 100644
+index 0000000..0c81c54
+--- /dev/null
++++ b/shell-completion/zsh/_systemd-run
+@@ -0,0 +1,31 @@
++#compdef systemd-run
++
++__systemctl() {
++        local -a _modes
++        _modes=("--user" "--system")
++        systemctl ${words:*_modes} --full --no-legend --no-pager "$@" 2>/dev/null
++}
++
++__get_slices () {
++        __systemctl list-units --all -t slice \
++        | { while read -r a b; do echo $a; done; };
++}
++
++__slices () {
++        local -a _slices
++        _slices=(${(fo)"$(__get_slices)"})
++        typeset -U _slices
++        _describe 'slices' _slices
++}
++
++_arguments \
++        {-h,--help}'[Show help message]' \
++        '--version[Show package version]' \
++        '--user[Run as user unit]' \
++        '--scope[Run this as scope rather than service]' \
++        '--unit=[Run under the specified unit name]:unit name' \
++        '--description=[Description for unit]:description' \
++        '--slice=[Run in the specified slice]:slices:__slices' \
++        {-r,--remain-after-exit}'[Leave service around until explicitly stopped]' \
++        '--send-sighup[Send SIGHUP when terminating]' \
++        '*::command:_command'
diff --git a/SOURCES/0082-man-document-the-b-special-boot-option.patch b/SOURCES/0082-man-document-the-b-special-boot-option.patch
deleted file mode 100644
index 70dc3b3..0000000
--- a/SOURCES/0082-man-document-the-b-special-boot-option.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From 051ee7b5173acc07875f6cf5b0c839302f9ce04d Mon Sep 17 00:00:00 2001
-From: Jan Engelhardt <jengelh@inai.de>
-Date: Tue, 15 Oct 2013 08:58:50 +0200
-Subject: [PATCH] man: document the -b special boot option
-
----
- man/kernel-command-line.xml | 1 +
- man/systemd.xml             | 1 +
- 2 files changed, 2 insertions(+)
-
-diff --git a/man/kernel-command-line.xml b/man/kernel-command-line.xml
-index cc267a3..abe68e5 100644
---- a/man/kernel-command-line.xml
-+++ b/man/kernel-command-line.xml
-@@ -123,6 +123,7 @@
-                         </varlistentry>
- 
-                         <varlistentry>
-+                                <term><varname>-b</varname></term>
-                                 <term><varname>emergency</varname></term>
-                                 <term><varname>single</varname></term>
-                                 <term><varname>s</varname></term>
-diff --git a/man/systemd.xml b/man/systemd.xml
-index 97ef768..89939f3 100644
---- a/man/systemd.xml
-+++ b/man/systemd.xml
-@@ -1149,6 +1149,7 @@
-                         </varlistentry>
- 
-                         <varlistentry>
-+                                <term><varname>-b</varname></term>
-                                 <term><varname>emergency</varname></term>
- 
-                                 <listitem><para>Boot into emergency
diff --git a/SOURCES/0082-systemctl-fix-typo-in-help-text.patch b/SOURCES/0082-systemctl-fix-typo-in-help-text.patch
new file mode 100644
index 0000000..fe90610
--- /dev/null
+++ b/SOURCES/0082-systemctl-fix-typo-in-help-text.patch
@@ -0,0 +1,22 @@
+From 9e6ece2b9eb8d57a9d724d6b7bbb92524ac52ad3 Mon Sep 17 00:00:00 2001
+From: Thomas Hindoe Paaboel Andersen <phomes@gmail.com>
+Date: Fri, 1 Nov 2013 20:46:49 +0100
+Subject: [PATCH] systemctl: fix typo in help text
+
+---
+ src/systemctl/systemctl.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c
+index 036828b..36040db 100644
+--- a/src/systemctl/systemctl.c
++++ b/src/systemctl/systemctl.c
+@@ -4743,7 +4743,7 @@ static int systemctl_help(void) {
+                "  -f --force          When enabling unit files, override existing symlinks\n"
+                "                      When shutting down, execute action immediately\n"
+                "     --root=PATH      Enable unit files in the specified root directory\n"
+-               "  -n --lines=INTEGER  Numer of journal entries to show\n"
++               "  -n --lines=INTEGER  Number of journal entries to show\n"
+                "  -o --output=STRING  Change journal output mode (short, short-monotonic,\n"
+                "                      verbose, export, json, json-pretty, json-sse, cat)\n\n"
+                "Unit Commands:\n"
diff --git a/SOURCES/0083-detect_virtualization-returns-NULL-pass-empty-string.patch b/SOURCES/0083-detect_virtualization-returns-NULL-pass-empty-string.patch
new file mode 100644
index 0000000..55bd8bd
--- /dev/null
+++ b/SOURCES/0083-detect_virtualization-returns-NULL-pass-empty-string.patch
@@ -0,0 +1,32 @@
+From 98ec954cba5abf87f29cf5122825eb565b5bdf64 Mon Sep 17 00:00:00 2001
+From: Kay Sievers <kay@vrfy.org>
+Date: Sat, 2 Nov 2013 00:01:32 +0100
+Subject: [PATCH] detect_virtualization() returns NULL; pass empty string to
+ dbus
+
+---
+ src/core/dbus-manager.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/src/core/dbus-manager.c b/src/core/dbus-manager.c
+index 7be5d13..6d16c2a 100644
+--- a/src/core/dbus-manager.c
++++ b/src/core/dbus-manager.c
+@@ -466,7 +466,7 @@ static int bus_manager_append_progress(DBusMessageIter *i, const char *property,
+ 
+ static int bus_manager_append_virt(DBusMessageIter *i, const char *property, void *data) {
+         Manager *m = data;
+-        const char *id = "";
++        const char *id = NULL;
+ 
+         assert(i);
+         assert(property);
+@@ -474,6 +474,8 @@ static int bus_manager_append_virt(DBusMessageIter *i, const char *property, voi
+ 
+         detect_virtualization(&id);
+ 
++        if (!id)
++                id = "";
+         if (!dbus_message_iter_append_basic(i, DBUS_TYPE_STRING, &id))
+                 return -ENOMEM;
+ 
diff --git a/SOURCES/0083-tmpfiles-log-unaccessible-FUSE-mount-points-only-as-.patch b/SOURCES/0083-tmpfiles-log-unaccessible-FUSE-mount-points-only-as-.patch
deleted file mode 100644
index ab3c202..0000000
--- a/SOURCES/0083-tmpfiles-log-unaccessible-FUSE-mount-points-only-as-.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From 1d007bd94d09c955d548f4425a591f5a3bf032e4 Mon Sep 17 00:00:00 2001
-From: Kay Sievers <kay@vrfy.org>
-Date: Thu, 17 Oct 2013 03:20:46 +0200
-Subject: [PATCH] tmpfiles: log unaccessible FUSE mount points only as debug
- message
-
----
- src/tmpfiles/tmpfiles.c | 11 +++++++----
- 1 file changed, 7 insertions(+), 4 deletions(-)
-
-diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c
-index 5eca82a..ea99920 100644
---- a/src/tmpfiles/tmpfiles.c
-+++ b/src/tmpfiles/tmpfiles.c
-@@ -273,12 +273,15 @@ static int dir_cleanup(
-                         continue;
- 
-                 if (fstatat(dirfd(d), dent->d_name, &s, AT_SYMLINK_NOFOLLOW) < 0) {
-+                        if (errno == ENOENT)
-+                                continue;
- 
--                        if (errno != ENOENT) {
-+                        /* FUSE, NFS mounts, SELinux might return EACCES */
-+                        if (errno == EACCES)
-+                                log_debug("stat(%s/%s) failed: %m", p, dent->d_name);
-+                        else
-                                 log_error("stat(%s/%s) failed: %m", p, dent->d_name);
--                                r = -errno;
--                        }
--
-+                        r = -errno;
-                         continue;
-                 }
- 
diff --git a/SOURCES/0084-move-utf8-functions-from-libudev-private.h-to-utf8.h.patch b/SOURCES/0084-move-utf8-functions-from-libudev-private.h-to-utf8.h.patch
deleted file mode 100644
index 1130387..0000000
--- a/SOURCES/0084-move-utf8-functions-from-libudev-private.h-to-utf8.h.patch
+++ /dev/null
@@ -1,514 +0,0 @@
-From 1bd14ab0b60de49c8546f22d90996b95423b9eeb Mon Sep 17 00:00:00 2001
-From: Dave Reisner <dreisner@archlinux.org>
-Date: Tue, 17 Sep 2013 15:39:09 -0400
-Subject: [PATCH] move utf8 functions from libudev-private.h to utf8.h
-
-There's now some more obvious overlap amongst the two utf8 validation
-functions, but no more than there already was previously.
-
-This also adds some menial tests for anyone who wants to do more
-merging of these two in the future.
----
- .gitignore                 |   2 +
- Makefile.am                |  10 +++
- src/libudev/libudev-util.c | 171 +--------------------------------------------
- src/shared/utf8.c          | 151 +++++++++++++++++++++++++++++++++++++++
- src/shared/utf8.h          |   4 ++
- src/test/test-utf8.c       |  59 ++++++++++++++++
- 6 files changed, 229 insertions(+), 168 deletions(-)
- create mode 100644 src/test/test-utf8.c
-
-diff --git a/.gitignore b/.gitignore
-index 61bc2a3..deeee53 100644
---- a/.gitignore
-+++ b/.gitignore
-@@ -124,6 +124,7 @@
- /test-list
- /test-log
- /test-login
-+/test-login-shared
- /test-loopback
- /test-mmap-cache
- /test-ns
-@@ -143,6 +144,7 @@
- /test-udev
- /test-unit-file
- /test-unit-name
-+/test-utf8
- /test-util
- /test-watchdog
- /timedatectl
-diff --git a/Makefile.am b/Makefile.am
-index 25bfd91..6dd33ad 100644
---- a/Makefile.am
-+++ b/Makefile.am
-@@ -1121,6 +1121,7 @@ tests += \
- 	test-strxcpyx \
- 	test-unit-name \
- 	test-unit-file \
-+	test-utf8 \
- 	test-util \
- 	test-date \
- 	test-sleep \
-@@ -1223,6 +1224,15 @@ test_unit_file_CFLAGS = \
- test_unit_file_LDADD = \
- 	libsystemd-core.la
- 
-+test_utf8_SOURCES = \
-+	src/test/test-utf8.c
-+
-+test_utf8_CFLAGS = \
-+	$(AM_CFLAGS)
-+
-+test_utf8_LDADD = \
-+	libsystemd-shared.la
-+
- test_util_SOURCES = \
- 	src/test/test-util.c
- 
-diff --git a/src/libudev/libudev-util.c b/src/libudev/libudev-util.c
-index 714dc50..d54430c 100644
---- a/src/libudev/libudev-util.c
-+++ b/src/libudev/libudev-util.c
-@@ -34,6 +34,7 @@
- 
- #include "libudev.h"
- #include "libudev-private.h"
-+#include "utf8.h"
- 
- /**
-  * SECTION:libudev-util
-@@ -306,129 +307,6 @@ void util_remove_trailing_chars(char *path, char c)
-                 path[--len] = '\0';
- }
- 
--/* count of characters used to encode one unicode char */
--static int utf8_encoded_expected_len(const char *str)
--{
--        unsigned char c = (unsigned char)str[0];
--
--        if (c < 0x80)
--                return 1;
--        if ((c & 0xe0) == 0xc0)
--                return 2;
--        if ((c & 0xf0) == 0xe0)
--                return 3;
--        if ((c & 0xf8) == 0xf0)
--                return 4;
--        if ((c & 0xfc) == 0xf8)
--                return 5;
--        if ((c & 0xfe) == 0xfc)
--                return 6;
--        return 0;
--}
--
--/* decode one unicode char */
--static int utf8_encoded_to_unichar(const char *str)
--{
--        int unichar;
--        int len;
--        int i;
--
--        len = utf8_encoded_expected_len(str);
--        switch (len) {
--        case 1:
--                return (int)str[0];
--        case 2:
--                unichar = str[0] & 0x1f;
--                break;
--        case 3:
--                unichar = (int)str[0] & 0x0f;
--                break;
--        case 4:
--                unichar = (int)str[0] & 0x07;
--                break;
--        case 5:
--                unichar = (int)str[0] & 0x03;
--                break;
--        case 6:
--                unichar = (int)str[0] & 0x01;
--                break;
--        default:
--                return -1;
--        }
--
--        for (i = 1; i < len; i++) {
--                if (((int)str[i] & 0xc0) != 0x80)
--                        return -1;
--                unichar <<= 6;
--                unichar |= (int)str[i] & 0x3f;
--        }
--
--        return unichar;
--}
--
--/* expected size used to encode one unicode char */
--static int utf8_unichar_to_encoded_len(int unichar)
--{
--        if (unichar < 0x80)
--                return 1;
--        if (unichar < 0x800)
--                return 2;
--        if (unichar < 0x10000)
--                return 3;
--        if (unichar < 0x200000)
--                return 4;
--        if (unichar < 0x4000000)
--                return 5;
--        return 6;
--}
--
--/* check if unicode char has a valid numeric range */
--static int utf8_unichar_valid_range(int unichar)
--{
--        if (unichar > 0x10ffff)
--                return 0;
--        if ((unichar & 0xfffff800) == 0xd800)
--                return 0;
--        if ((unichar > 0xfdcf) && (unichar < 0xfdf0))
--                return 0;
--        if ((unichar & 0xffff) == 0xffff)
--                return 0;
--        return 1;
--}
--
--/* validate one encoded unicode char and return its length */
--static int utf8_encoded_valid_unichar(const char *str)
--{
--        int len;
--        int unichar;
--        int i;
--
--        len = utf8_encoded_expected_len(str);
--        if (len == 0)
--                return -1;
--
--        /* ascii is valid */
--        if (len == 1)
--                return 1;
--
--        /* check if expected encoded chars are available */
--        for (i = 0; i < len; i++)
--                if ((str[i] & 0x80) != 0x80)
--                        return -1;
--
--        unichar = utf8_encoded_to_unichar(str);
--
--        /* check if encoded length matches encoded value */
--        if (utf8_unichar_to_encoded_len(unichar) != len)
--                return -1;
--
--        /* check if value has valid range */
--        if (!utf8_unichar_valid_range(unichar))
--                return -1;
--
--        return len;
--}
--
- int util_replace_whitespace(const char *str, char *to, size_t len)
- {
-         size_t i, j;
-@@ -457,17 +335,6 @@ int util_replace_whitespace(const char *str, char *to, size_t len)
-         return 0;
- }
- 
--static int is_whitelisted(char c, const char *white)
--{
--        if ((c >= '0' && c <= '9') ||
--            (c >= 'A' && c <= 'Z') ||
--            (c >= 'a' && c <= 'z') ||
--            strchr("#+-.:=@_", c) != NULL ||
--            (white != NULL && strchr(white, c) != NULL))
--                return 1;
--        return 0;
--}
--
- /* allow chars in whitelist, plain ascii, hex-escaping and valid utf8 */
- int util_replace_chars(char *str, const char *white)
- {
-@@ -477,7 +344,7 @@ int util_replace_chars(char *str, const char *white)
-         while (str[i] != '\0') {
-                 int len;
- 
--                if (is_whitelisted(str[i], white)) {
-+                if (is_utf8_encoding_whitelisted(str[i], white)) {
-                         i++;
-                         continue;
-                 }
-@@ -525,39 +392,7 @@ int util_replace_chars(char *str, const char *white)
-  **/
- _public_ int udev_util_encode_string(const char *str, char *str_enc, size_t len)
- {
--        size_t i, j;
--
--        if (str == NULL || str_enc == NULL)
--                return -1;
--
--        for (i = 0, j = 0; str[i] != '\0'; i++) {
--                int seqlen;
--
--                seqlen = utf8_encoded_valid_unichar(&str[i]);
--                if (seqlen > 1) {
--                        if (len-j < (size_t)seqlen)
--                                goto err;
--                        memcpy(&str_enc[j], &str[i], seqlen);
--                        j += seqlen;
--                        i += (seqlen-1);
--                } else if (str[i] == '\\' || !is_whitelisted(str[i], NULL)) {
--                        if (len-j < 4)
--                                goto err;
--                        sprintf(&str_enc[j], "\\x%02x", (unsigned char) str[i]);
--                        j += 4;
--                } else {
--                        if (len-j < 1)
--                                goto err;
--                        str_enc[j] = str[i];
--                        j++;
--                }
--        }
--        if (len-j < 1)
--                goto err;
--        str_enc[j] = '\0';
--        return 0;
--err:
--        return -1;
-+        return udev_encode_string(str, str_enc, len);
- }
- 
- /*
-diff --git a/src/shared/utf8.c b/src/shared/utf8.c
-index 655cc77..1a68394 100644
---- a/src/shared/utf8.c
-+++ b/src/shared/utf8.c
-@@ -317,3 +317,154 @@ char *utf16_to_utf8(const void *s, size_t length) {
- 
-         return r;
- }
-+
-+/* count of characters used to encode one unicode char */
-+static int utf8_encoded_expected_len(const char *str) {
-+        unsigned char c = (unsigned char)str[0];
-+
-+        if (c < 0x80)
-+                return 1;
-+        if ((c & 0xe0) == 0xc0)
-+                return 2;
-+        if ((c & 0xf0) == 0xe0)
-+                return 3;
-+        if ((c & 0xf8) == 0xf0)
-+                return 4;
-+        if ((c & 0xfc) == 0xf8)
-+                return 5;
-+        if ((c & 0xfe) == 0xfc)
-+                return 6;
-+        return 0;
-+}
-+
-+/* decode one unicode char */
-+static int utf8_encoded_to_unichar(const char *str) {
-+        int unichar;
-+        int len;
-+        int i;
-+
-+        len = utf8_encoded_expected_len(str);
-+        switch (len) {
-+        case 1:
-+                return (int)str[0];
-+        case 2:
-+                unichar = str[0] & 0x1f;
-+                break;
-+        case 3:
-+                unichar = (int)str[0] & 0x0f;
-+                break;
-+        case 4:
-+                unichar = (int)str[0] & 0x07;
-+                break;
-+        case 5:
-+                unichar = (int)str[0] & 0x03;
-+                break;
-+        case 6:
-+                unichar = (int)str[0] & 0x01;
-+                break;
-+        default:
-+                return -1;
-+        }
-+
-+        for (i = 1; i < len; i++) {
-+                if (((int)str[i] & 0xc0) != 0x80)
-+                        return -1;
-+                unichar <<= 6;
-+                unichar |= (int)str[i] & 0x3f;
-+        }
-+
-+        return unichar;
-+}
-+
-+/* expected size used to encode one unicode char */
-+static int utf8_unichar_to_encoded_len(int unichar) {
-+        if (unichar < 0x80)
-+                return 1;
-+        if (unichar < 0x800)
-+                return 2;
-+        if (unichar < 0x10000)
-+                return 3;
-+        if (unichar < 0x200000)
-+                return 4;
-+        if (unichar < 0x4000000)
-+                return 5;
-+        return 6;
-+}
-+
-+/* validate one encoded unicode char and return its length */
-+int utf8_encoded_valid_unichar(const char *str) {
-+        int len;
-+        int unichar;
-+        int i;
-+
-+        len = utf8_encoded_expected_len(str);
-+        if (len == 0)
-+                return -1;
-+
-+        /* ascii is valid */
-+        if (len == 1)
-+                return 1;
-+
-+        /* check if expected encoded chars are available */
-+        for (i = 0; i < len; i++)
-+                if ((str[i] & 0x80) != 0x80)
-+                        return -1;
-+
-+        unichar = utf8_encoded_to_unichar(str);
-+
-+        /* check if encoded length matches encoded value */
-+        if (utf8_unichar_to_encoded_len(unichar) != len)
-+                return -1;
-+
-+        /* check if value has valid range */
-+        if (!is_unicode_valid(unichar))
-+                return -1;
-+
-+        return len;
-+}
-+
-+int is_utf8_encoding_whitelisted(char c, const char *white) {
-+        if ((c >= '0' && c <= '9') ||
-+            (c >= 'A' && c <= 'Z') ||
-+            (c >= 'a' && c <= 'z') ||
-+            strchr("#+-.:=@_", c) != NULL ||
-+            (white != NULL && strchr(white, c) != NULL))
-+                return 1;
-+        return 0;
-+}
-+
-+int udev_encode_string(const char *str, char *str_enc, size_t len) {
-+        size_t i, j;
-+
-+        if (str == NULL || str_enc == NULL)
-+                return -1;
-+
-+        for (i = 0, j = 0; str[i] != '\0'; i++) {
-+                int seqlen;
-+
-+                seqlen = utf8_encoded_valid_unichar(&str[i]);
-+                if (seqlen > 1) {
-+                        if (len-j < (size_t)seqlen)
-+                                goto err;
-+                        memcpy(&str_enc[j], &str[i], seqlen);
-+                        j += seqlen;
-+                        i += (seqlen-1);
-+                } else if (str[i] == '\\' || !is_utf8_encoding_whitelisted(str[i], NULL)) {
-+                        if (len-j < 4)
-+                                goto err;
-+                        sprintf(&str_enc[j], "\\x%02x", (unsigned char) str[i]);
-+                        j += 4;
-+                } else {
-+                        if (len-j < 1)
-+                                goto err;
-+                        str_enc[j] = str[i];
-+                        j++;
-+                }
-+        }
-+        if (len-j < 1)
-+                goto err;
-+        str_enc[j] = '\0';
-+        return 0;
-+err:
-+        return -1;
-+}
-diff --git a/src/shared/utf8.h b/src/shared/utf8.h
-index f805ea6..7a5608c 100644
---- a/src/shared/utf8.h
-+++ b/src/shared/utf8.h
-@@ -34,3 +34,7 @@ char *utf8_filter(const char *s);
- char *ascii_filter(const char *s);
- 
- char *utf16_to_utf8(const void *s, size_t length);
-+
-+int utf8_encoded_valid_unichar(const char *str);
-+int is_utf8_encoding_whitelisted(char c, const char *white);
-+int udev_encode_string(const char *str, char *str_enc, size_t len);
-diff --git a/src/test/test-utf8.c b/src/test/test-utf8.c
-new file mode 100644
-index 0000000..d2b9771
---- /dev/null
-+++ b/src/test/test-utf8.c
-@@ -0,0 +1,59 @@
-+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
-+
-+/***
-+  This file is part of systemd.
-+
-+  Copyright 2013 Dave Reisner
-+
-+  systemd is free software; you can redistribute it and/or modify it
-+  under the terms of the GNU Lesser General Public License as published by
-+  the Free Software Foundation; either version 2.1 of the License, or
-+  (at your option) any later version.
-+
-+  systemd is distributed in the hope that it will be useful, but
-+  WITHOUT ANY WARRANTY; without even the implied warranty of
-+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+  Lesser General Public License for more details.
-+
-+  You should have received a copy of the GNU Lesser General Public License
-+  along with systemd; If not, see <http://www.gnu.org/licenses/>.
-+***/
-+
-+
-+#include "utf8.h"
-+#include "util.h"
-+
-+/* helpers for test_udev_encode_string */
-+static char *do_encode_string(const char *in) {
-+        size_t out_len = strlen(in) * 4;
-+        char *out = malloc(out_len);
-+
-+        assert_se(out);
-+        assert_se(udev_encode_string(in, out, out_len) >= 0);
-+        puts(out);
-+
-+        return out;
-+}
-+
-+static bool expect_encoded_as(const char *in, const char *expected) {
-+        _cleanup_free_ char *encoded = do_encode_string(in);
-+        return streq(encoded, expected);
-+}
-+
-+static void test_udev_encode_string(void) {
-+        assert_se(expect_encoded_as("systemd sucks", "systemd\\x20sucks"));
-+        assert_se(expect_encoded_as("pinkiepie", "pinkiepie"));
-+        assert_se(expect_encoded_as("valíd\\ųtf8", "valíd\\x5cųtf8"));
-+        assert_se(expect_encoded_as("s/ash/ng", "s\\x2fash\\x2fng"));
-+}
-+
-+static void test_utf8_is_valid(void) {
-+        assert_se(utf8_is_valid("ascii is valid unicode"));
-+        assert_se(utf8_is_valid("\341\204\242"));
-+        assert_se(!utf8_is_valid("\341\204"));
-+}
-+
-+int main(int argc, char *argv[]) {
-+        test_utf8_is_valid();
-+        test_udev_encode_string();
-+}
diff --git a/SOURCES/0084-udev-builtin-keyboard-Fix-large-scan-codes-on-32-bit.patch b/SOURCES/0084-udev-builtin-keyboard-Fix-large-scan-codes-on-32-bit.patch
new file mode 100644
index 0000000..648a718
--- /dev/null
+++ b/SOURCES/0084-udev-builtin-keyboard-Fix-large-scan-codes-on-32-bit.patch
@@ -0,0 +1,31 @@
+From 4b2a44e3fa0e56b638dab29def3f499788a03334 Mon Sep 17 00:00:00 2001
+From: Martin Pitt <martinpitt@gnome.org>
+Date: Mon, 4 Nov 2013 07:25:45 +0100
+Subject: [PATCH] udev-builtin-keyboard: Fix large scan codes on 32 bit
+ architectures
+
+Use strtoul(), as scan codes are always positive. On 32 bit architectures
+strtol gives wrong results:
+
+  strtol("fffffff0", &endptr, 16)
+
+returns 2147483647 instead of 4294967280.
+
+https://launchpad.net/bugs/1247676
+---
+ src/udev/udev-builtin-keyboard.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/udev/udev-builtin-keyboard.c b/src/udev/udev-builtin-keyboard.c
+index ddd8535..8f457ab 100644
+--- a/src/udev/udev-builtin-keyboard.c
++++ b/src/udev/udev-builtin-keyboard.c
+@@ -88,7 +88,7 @@ static int builtin_keyboard(struct udev_device *dev, int argc, char *argv[], boo
+                         continue;
+ 
+                 /* KEYBOARD_KEY_<hex scan code>=<key identifier string> */
+-                scancode = strtol(key + 13, &endptr, 16);
++                scancode = strtoul(key + 13, &endptr, 16);
+                 if (endptr[0] != '\0') {
+                         log_error("Error, unable to parse scan code from '%s'\n", key);
+                         continue;
diff --git a/SOURCES/0085-Use-udev_encode_string-in-fstab_node_to_udev_node.patch b/SOURCES/0085-Use-udev_encode_string-in-fstab_node_to_udev_node.patch
deleted file mode 100644
index fb9d269..0000000
--- a/SOURCES/0085-Use-udev_encode_string-in-fstab_node_to_udev_node.patch
+++ /dev/null
@@ -1,113 +0,0 @@
-From b6c9f1408abaebffc4b8151fa5615075767f4a92 Mon Sep 17 00:00:00 2001
-From: Dave Reisner <dreisner@archlinux.org>
-Date: Tue, 17 Sep 2013 15:47:08 -0400
-Subject: [PATCH] Use udev_encode_string in fstab_node_to_udev_node
-
-Resolves a longstanding bug which caused this function to wrongly
-handle (escape) valid utf8 characters.
----
- src/shared/util.c    | 20 +++++++++-----------
- src/test/test-util.c | 36 ++++++++++++++++++++++++++++++++++++
- 2 files changed, 45 insertions(+), 11 deletions(-)
-
-diff --git a/src/shared/util.c b/src/shared/util.c
-index 3d4ca7c..766957a 100644
---- a/src/shared/util.c
-+++ b/src/shared/util.c
-@@ -73,6 +73,7 @@
- #include "hashmap.h"
- #include "env-util.h"
- #include "fileio.h"
-+#include "utf8.h"
- 
- int saved_argc = 0;
- char **saved_argv = NULL;
-@@ -3495,26 +3496,23 @@ int signal_from_string_try_harder(const char *s) {
- }
- 
- static char *tag_to_udev_node(const char *tagvalue, const char *by) {
--        char *dn, *t, *u;
--        int r;
--
--        /* FIXME: to follow udev's logic 100% we need to leave valid
--         * UTF8 chars unescaped */
-+        _cleanup_free_ char *t = NULL, *u = NULL;
-+        char *dn;
-+        size_t enc_len;
- 
-         u = unquote(tagvalue, "\"\'");
-         if (u == NULL)
-                 return NULL;
- 
--        t = xescape(u, "/ ");
--        free(u);
--
-+        enc_len = strlen(u) * 4;
-+        t = new(char, enc_len);
-         if (t == NULL)
-                 return NULL;
- 
--        r = asprintf(&dn, "/dev/disk/by-%s/%s", by, t);
--        free(t);
-+        if (udev_encode_string(u, t, enc_len) < 0)
-+                return NULL;
- 
--        if (r < 0)
-+        if (asprintf(&dn, "/dev/disk/by-%s/%s", by, t) < 0)
-                 return NULL;
- 
-         return dn;
-diff --git a/src/test/test-util.c b/src/test/test-util.c
-index dd7768d..ad13d53 100644
---- a/src/test/test-util.c
-+++ b/src/test/test-util.c
-@@ -547,6 +547,41 @@ static void test_split_pair(void) {
-         assert_se(streq(b, "="));
- }
- 
-+static void test_fstab_node_to_udev_node(void) {
-+        char *n;
-+
-+        n = fstab_node_to_udev_node("LABEL=applé/jack");
-+        puts(n);
-+        assert_se(streq(n, "/dev/disk/by-label/applé\\x2fjack"));
-+        free(n);
-+
-+        n = fstab_node_to_udev_node("PARTLABEL=pinkié pie");
-+        puts(n);
-+        assert_se(streq(n, "/dev/disk/by-partlabel/pinkié\\x20pie"));
-+        free(n);
-+
-+        n = fstab_node_to_udev_node("UUID=037b9d94-148e-4ee4-8d38-67bfe15bb535");
-+        puts(n);
-+        assert_se(streq(n, "/dev/disk/by-uuid/037b9d94-148e-4ee4-8d38-67bfe15bb535"));
-+        free(n);
-+
-+        n = fstab_node_to_udev_node("PARTUUID=037b9d94-148e-4ee4-8d38-67bfe15bb535");
-+        puts(n);
-+        assert_se(streq(n, "/dev/disk/by-partuuid/037b9d94-148e-4ee4-8d38-67bfe15bb535"));
-+        free(n);
-+
-+
-+        n = fstab_node_to_udev_node("PONIES=awesome");
-+        puts(n);
-+        assert_se(streq(n, "PONIES=awesome"));
-+        free(n);
-+
-+        n = fstab_node_to_udev_node("/dev/xda1");
-+        puts(n);
-+        assert_se(streq(n, "/dev/xda1"));
-+        free(n);
-+}
-+
- int main(int argc, char *argv[]) {
-         test_streq_ptr();
-         test_first_word();
-@@ -582,6 +617,7 @@ int main(int argc, char *argv[]) {
-         test_strrep();
-         test_parse_user_at_host();
-         test_split_pair();
-+        test_fstab_node_to_udev_node();
- 
-         return 0;
- }
diff --git a/SOURCES/0085-nspawn-log-out-of-memory-errors.patch b/SOURCES/0085-nspawn-log-out-of-memory-errors.patch
new file mode 100644
index 0000000..3e6ba0c
--- /dev/null
+++ b/SOURCES/0085-nspawn-log-out-of-memory-errors.patch
@@ -0,0 +1,37 @@
+From 472b443a7e1949f6d35d5216b6323424719d1b8c Mon Sep 17 00:00:00 2001
+From: Djalal Harouni <tixxdz@opendz.org>
+Date: Tue, 5 Nov 2013 15:26:37 +0100
+Subject: [PATCH] nspawn: log out of memory errors
+
+---
+ src/nspawn/nspawn.c | 7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c
+index 9616dbf..db47fbd 100644
+--- a/src/nspawn/nspawn.c
++++ b/src/nspawn/nspawn.c
+@@ -224,6 +224,9 @@ static int parse_argv(int argc, char *argv[]) {
+ 
+                 case 'S':
+                         arg_slice = strdup(optarg);
++                        if (!arg_slice)
++                                return log_oom();
++
+                         break;
+ 
+                 case 'M':
+@@ -315,11 +318,11 @@ static int parse_argv(int argc, char *argv[]) {
+ 
+                         r = strv_extend(x, a);
+                         if (r < 0)
+-                                return r;
++                                return log_oom();
+ 
+                         r = strv_extend(x, b);
+                         if (r < 0)
+-                                return r;
++                                return log_oom();
+ 
+                         break;
+                 }
diff --git a/SOURCES/0086-Fix-buffer-overrun-when-enumerating-files.patch b/SOURCES/0086-Fix-buffer-overrun-when-enumerating-files.patch
deleted file mode 100644
index 06024b3..0000000
--- a/SOURCES/0086-Fix-buffer-overrun-when-enumerating-files.patch
+++ /dev/null
@@ -1,173 +0,0 @@
-From 29328cbda5daea22f02e4ca94ca75783f22efc61 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
-Date: Sun, 29 Sep 2013 14:40:58 +0200
-Subject: [PATCH] Fix buffer overrun when enumerating files
-
-https://bugs.freedesktop.org/show_bug.cgi?id=69887
-
-Based-on-a-patch-by: Hans Petter Jansson <hpj@copyleft.no>
----
- src/shared/util.c    | 79 +++++++++++++++++-----------------------------------
- src/test/test-util.c | 10 +++++++
- 2 files changed, 36 insertions(+), 53 deletions(-)
-
-diff --git a/src/shared/util.c b/src/shared/util.c
-index 766957a..4f80cc8 100644
---- a/src/shared/util.c
-+++ b/src/shared/util.c
-@@ -4412,38 +4412,31 @@ int dirent_ensure_type(DIR *d, struct dirent *de) {
- }
- 
- int in_search_path(const char *path, char **search) {
--        char **i, *parent;
-+        char **i;
-+        _cleanup_free_ char *parent = NULL;
-         int r;
- 
-         r = path_get_parent(path, &parent);
-         if (r < 0)
-                 return r;
- 
--        r = 0;
--
--        STRV_FOREACH(i, search) {
--                if (path_equal(parent, *i)) {
--                        r = 1;
--                        break;
--                }
--        }
--
--        free(parent);
-+        STRV_FOREACH(i, search)
-+                if (path_equal(parent, *i))
-+                        return 1;
- 
--        return r;
-+        return 0;
- }
- 
- int get_files_in_directory(const char *path, char ***list) {
--        DIR *d;
--        int r = 0;
--        unsigned n = 0;
--        char **l = NULL;
-+        _cleanup_closedir_ DIR *d = NULL;
-+        size_t bufsize = 0, n = 0;
-+        _cleanup_strv_free_ char **l = NULL;
- 
-         assert(path);
- 
-         /* Returns all files in a directory in *list, and the number
-          * of files as return value. If list is NULL returns only the
--         * number */
-+         * number. */
- 
-         d = opendir(path);
-         if (!d)
-@@ -4455,11 +4448,9 @@ int get_files_in_directory(const char *path, char ***list) {
-                 int k;
- 
-                 k = readdir_r(d, &buf.de, &de);
--                if (k != 0) {
--                        r = -k;
--                        goto finish;
--                }
--
-+                assert(k >= 0);
-+                if (k > 0)
-+                        return -k;
-                 if (!de)
-                         break;
- 
-@@ -4469,43 +4460,25 @@ int get_files_in_directory(const char *path, char ***list) {
-                         continue;
- 
-                 if (list) {
--                        if ((unsigned) r >= n) {
--                                char **t;
--
--                                n = MAX(16, 2*r);
--                                t = realloc(l, sizeof(char*) * n);
--                                if (!t) {
--                                        r = -ENOMEM;
--                                        goto finish;
--                                }
--
--                                l = t;
--                        }
--
--                        assert((unsigned) r < n);
-+                        /* one extra slot is needed for the terminating NULL */
-+                        if (!GREEDY_REALLOC(l, bufsize, n + 2))
-+                                return -ENOMEM;
- 
--                        l[r] = strdup(de->d_name);
--                        if (!l[r]) {
--                                r = -ENOMEM;
--                                goto finish;
--                        }
-+                        l[n] = strdup(de->d_name);
-+                        if (!l[n])
-+                                return -ENOMEM;
- 
--                        l[++r] = NULL;
-+                        l[++n] = NULL;
-                 } else
--                        r++;
-+                        n++;
-         }
- 
--finish:
--        if (d)
--                closedir(d);
--
--        if (r >= 0) {
--                if (list)
--                        *list = l;
--        } else
--                strv_free(l);
-+        if (list) {
-+                *list = l;
-+                l = NULL; /* avoid freeing */
-+        }
- 
--        return r;
-+        return n;
- }
- 
- char *strjoin(const char *x, ...) {
-diff --git a/src/test/test-util.c b/src/test/test-util.c
-index ad13d53..c5762ed 100644
---- a/src/test/test-util.c
-+++ b/src/test/test-util.c
-@@ -27,6 +27,7 @@
- #include <errno.h>
- 
- #include "util.h"
-+#include "strv.h"
- 
- static void test_streq_ptr(void) {
-         assert_se(streq_ptr(NULL, NULL));
-@@ -582,6 +583,14 @@ static void test_fstab_node_to_udev_node(void) {
-         free(n);
- }
- 
-+static void test_get_files_in_directory(void) {
-+        _cleanup_strv_free_ char **l = NULL, **t = NULL;
-+
-+        assert_se(get_files_in_directory("/tmp", &l) >= 0);
-+        assert_se(get_files_in_directory(".", &l) >= 0);
-+        assert_se(get_files_in_directory(".", NULL) >= 0);
-+}
-+
- int main(int argc, char *argv[]) {
-         test_streq_ptr();
-         test_first_word();
-@@ -618,6 +627,7 @@ int main(int argc, char *argv[]) {
-         test_parse_user_at_host();
-         test_split_pair();
-         test_fstab_node_to_udev_node();
-+        test_get_files_in_directory();
- 
-         return 0;
- }
diff --git a/SOURCES/0086-man-fix-typo.patch b/SOURCES/0086-man-fix-typo.patch
new file mode 100644
index 0000000..b985a5a
--- /dev/null
+++ b/SOURCES/0086-man-fix-typo.patch
@@ -0,0 +1,22 @@
+From 97df020a95852dddd28787ee846691c301b58807 Mon Sep 17 00:00:00 2001
+From: Ronny Chevalier <chevalier.ronny@gmail.com>
+Date: Sun, 3 Nov 2013 15:07:31 +0100
+Subject: [PATCH] man: fix typo
+
+---
+ man/systemd-run.xml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/man/systemd-run.xml b/man/systemd-run.xml
+index e76a402..252335b 100644
+--- a/man/systemd-run.xml
++++ b/man/systemd-run.xml
+@@ -60,7 +60,7 @@ along with systemd; If not, see <http://www.gnu.org/licenses/>.
+   <refsect1>
+     <title>Description</title>
+ 
+-    <para><command>systemd-run</command> may be used create and start
++    <para><command>systemd-run</command> may be used to create and start
+     a transient <filename>.service</filename> or a
+     <filename>.scope</filename> unit and run the specified
+     <replaceable>COMMAND</replaceable> in it.</para>
diff --git a/SOURCES/0087-man-do-not-use-term-in-para.patch b/SOURCES/0087-man-do-not-use-term-in-para.patch
new file mode 100644
index 0000000..20e3451
--- /dev/null
+++ b/SOURCES/0087-man-do-not-use-term-in-para.patch
@@ -0,0 +1,23 @@
+From 2bdcb1a688e047a1b7712acc6d8efbcd7a437373 Mon Sep 17 00:00:00 2001
+From: Kay Sievers <kay@vrfy.org>
+Date: Tue, 5 Nov 2013 21:34:50 +0100
+Subject: [PATCH] man: do not use <term> in <para>
+
+Element term in namespace '' encountered in para, but no template matches.
+---
+ man/systemd.mount.xml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/man/systemd.mount.xml b/man/systemd.mount.xml
+index 71a5736..df5a79e 100644
+--- a/man/systemd.mount.xml
++++ b/man/systemd.mount.xml
+@@ -261,7 +261,7 @@
+                                 a time span value such as "5min
+                                 20s". Pass 0 to disable the timeout
+                                 logic. Default value is setted up in manager configuration
+-                                file via <term><varname>DefaultTimeoutStart=</varname></term>.</para></listitem>
++                                file via <varname>DefaultTimeoutStart=</varname>.</para></listitem>
+                         </varlistentry>
+                 </variablelist>
+ 
diff --git a/SOURCES/0087-shared-utf8-merge-implementations-remove-cruft.patch b/SOURCES/0087-shared-utf8-merge-implementations-remove-cruft.patch
deleted file mode 100644
index 685e5e7..0000000
--- a/SOURCES/0087-shared-utf8-merge-implementations-remove-cruft.patch
+++ /dev/null
@@ -1,401 +0,0 @@
-From 3fde78dba9ad834ab264ad6888672833874b9101 Mon Sep 17 00:00:00 2001
-From: Dave Reisner <dreisner@archlinux.org>
-Date: Wed, 18 Sep 2013 11:52:14 -0400
-Subject: [PATCH] shared/utf8: merge implementations, remove cruft
-
-This unifies the utf8 handling code which was previously duplicated in
-udev and systemd.
----
- TODO                 |   1 -
- src/shared/utf8.c    | 279 +++++++++++++--------------------------------------
- src/shared/utf8.h    |   3 +-
- src/test/test-utf8.c |   9 ++
- 4 files changed, 81 insertions(+), 211 deletions(-)
-
-diff --git a/TODO b/TODO
-index 4c3e14f..8b7325e 100644
---- a/TODO
-+++ b/TODO
-@@ -599,7 +599,6 @@ Features:
- * udev:
-   - remove src/udev/udev-builtin-firmware.c (CONFIG_FW_LOADER_USER_HELPER=n)
-   - move to LGPL
--  - unify utf8 validator code with shared/
-   - kill scsi_id
-   - add trigger --subsystem-match=usb/usb_device device
- 
-diff --git a/src/shared/utf8.c b/src/shared/utf8.c
-index 1a68394..732f0f0 100644
---- a/src/shared/utf8.c
-+++ b/src/shared/utf8.c
-@@ -51,8 +51,6 @@
- #include "utf8.h"
- #include "util.h"
- 
--#define FILTER_CHAR '_'
--
- static inline bool is_unicode_valid(uint32_t ch) {
- 
-         if (ch >= 0x110000) /* End of unicode space */
-@@ -67,17 +65,6 @@ static inline bool is_unicode_valid(uint32_t ch) {
-         return true;
- }
- 
--static inline bool is_continuation_char(uint8_t ch) {
--        if ((ch & 0xc0) != 0x80) /* 10xxxxxx */
--                return false;
--        return true;
--}
--
--static inline void merge_continuation_char(uint32_t *u_ch, uint8_t ch) {
--        *u_ch <<= 6;
--        *u_ch |= ch & 0x3f;
--}
--
- static bool is_unicode_control(uint32_t ch) {
- 
-         /*
-@@ -90,163 +77,97 @@ static bool is_unicode_control(uint32_t ch) {
-                 (0x7F <= ch && ch <= 0x9F);
- }
- 
--bool utf8_is_printable(const char* str, size_t length) {
--        uint32_t val = 0;
--        uint32_t min = 0;
--        const uint8_t *p;
-+/* count of characters used to encode one unicode char */
-+static int utf8_encoded_expected_len(const char *str) {
-+        unsigned char c = (unsigned char)str[0];
- 
--        assert(str);
-+        if (c < 0x80)
-+                return 1;
-+        if ((c & 0xe0) == 0xc0)
-+                return 2;
-+        if ((c & 0xf0) == 0xe0)
-+                return 3;
-+        if ((c & 0xf8) == 0xf0)
-+                return 4;
-+        if ((c & 0xfc) == 0xf8)
-+                return 5;
-+        if ((c & 0xfe) == 0xfc)
-+                return 6;
-+        return 0;
-+}
- 
--        for (p = (const uint8_t*) str; length; p++, length--) {
--                if (*p < 128) {
--                        val = *p;
--                } else {
--                        if ((*p & 0xe0) == 0xc0) { /* 110xxxxx two-char seq. */
--                                min = 128;
--                                val = (uint32_t) (*p & 0x1e);
--                                goto ONE_REMAINING;
--                        } else if ((*p & 0xf0) == 0xe0) { /* 1110xxxx three-char seq.*/
--                                min = (1 << 11);
--                                val = (uint32_t) (*p & 0x0f);
--                                goto TWO_REMAINING;
--                        } else if ((*p & 0xf8) == 0xf0) { /* 11110xxx four-char seq */
--                                min = (1 << 16);
--                                val = (uint32_t) (*p & 0x07);
--                        } else
--                                return false;
--
--                        p++;
--                        length--;
--                        if (!length || !is_continuation_char(*p))
--                                return false;
--                        merge_continuation_char(&val, *p);
--
--                TWO_REMAINING:
--                        p++;
--                        length--;
--                        if (!is_continuation_char(*p))
--                                return false;
--                        merge_continuation_char(&val, *p);
--
--                ONE_REMAINING:
--                        p++;
--                        length--;
--                        if (!is_continuation_char(*p))
--                                return false;
--                        merge_continuation_char(&val, *p);
--
--                        if (val < min)
--                                return false;
--                }
-+/* decode one unicode char */
-+static int utf8_encoded_to_unichar(const char *str) {
-+        int unichar;
-+        int len;
-+        int i;
- 
--                if (is_unicode_control(val))
--                        return false;
-+        len = utf8_encoded_expected_len(str);
-+        switch (len) {
-+        case 1:
-+                return (int)str[0];
-+        case 2:
-+                unichar = str[0] & 0x1f;
-+                break;
-+        case 3:
-+                unichar = (int)str[0] & 0x0f;
-+                break;
-+        case 4:
-+                unichar = (int)str[0] & 0x07;
-+                break;
-+        case 5:
-+                unichar = (int)str[0] & 0x03;
-+                break;
-+        case 6:
-+                unichar = (int)str[0] & 0x01;
-+                break;
-+        default:
-+                return -1;
-         }
- 
--        return true;
-+        for (i = 1; i < len; i++) {
-+                if (((int)str[i] & 0xc0) != 0x80)
-+                        return -1;
-+                unichar <<= 6;
-+                unichar |= (int)str[i] & 0x3f;
-+        }
-+
-+        return unichar;
- }
- 
--static char* utf8_validate(const char *str, char *output) {
--        uint32_t val = 0;
--        uint32_t min = 0;
--        const uint8_t *p, *last;
--        int size;
--        uint8_t *o;
-+bool utf8_is_printable(const char* str, size_t length) {
-+        const uint8_t *p;
- 
-         assert(str);
- 
--        o = (uint8_t*) output;
--        for (p = (const uint8_t*) str; *p; p++) {
--                if (*p < 128) {
--                        if (o)
--                                *o = *p;
--                } else {
--                        last = p;
--
--                        if ((*p & 0xe0) == 0xc0) { /* 110xxxxx two-char seq. */
--                                size = 2;
--                                min = 128;
--                                val = (uint32_t) (*p & 0x1e);
--                                goto ONE_REMAINING;
--                        } else if ((*p & 0xf0) == 0xe0) { /* 1110xxxx three-char seq.*/
--                                size = 3;
--                                min = (1 << 11);
--                                val = (uint32_t) (*p & 0x0f);
--                                goto TWO_REMAINING;
--                        } else if ((*p & 0xf8) == 0xf0) { /* 11110xxx four-char seq */
--                                size = 4;
--                                min = (1 << 16);
--                                val = (uint32_t) (*p & 0x07);
--                        } else
--                                goto error;
--
--                        p++;
--                        if (!is_continuation_char(*p))
--                                goto error;
--                        merge_continuation_char(&val, *p);
--
--                TWO_REMAINING:
--                        p++;
--                        if (!is_continuation_char(*p))
--                                goto error;
--                        merge_continuation_char(&val, *p);
--
--                ONE_REMAINING:
--                        p++;
--                        if (!is_continuation_char(*p))
--                                goto error;
--                        merge_continuation_char(&val, *p);
--
--                        if (val < min)
--                                goto error;
--
--                        if (!is_unicode_valid(val))
--                                goto error;
--
--                        if (o) {
--                                memcpy(o, last, (size_t) size);
--                                o += size;
--                        }
--
--                        continue;
--
--                error:
--                        if (o) {
--                                *o = FILTER_CHAR;
--                                p = last; /* We retry at the next character */
--                        } else
--                                goto failure;
--                }
-+        for (p = (const uint8_t*) str; length; p++) {
-+                int encoded_len = utf8_encoded_valid_unichar((const char *)p);
-+                int32_t val = utf8_encoded_to_unichar((const char*)p);
- 
--                if (o)
--                        o++;
--        }
-+                if (encoded_len < 0 || val < 0 || is_unicode_control(val))
-+                        return false;
- 
--        if (o) {
--                *o = '\0';
--                return output;
-+                length -= encoded_len;
-         }
- 
--        return (char*) str;
--
--failure:
--        return NULL;
--}
--
--char* utf8_is_valid (const char *str) {
--        return utf8_validate(str, NULL);
-+        return true;
- }
- 
--char* utf8_filter (const char *str) {
--        char *new_str;
-+const char *utf8_is_valid(const char *str) {
-+        const uint8_t *p;
- 
-         assert(str);
- 
--        new_str = malloc(strlen(str) + 1);
--        if (!new_str)
--                return NULL;
-+        for (p = (const uint8_t*) str; *p; ) {
-+                int len = utf8_encoded_valid_unichar((const char *)p);
-+
-+                if (len < 0)
-+                        return NULL;
-+
-+                p += len;
-+        }
- 
--        return utf8_validate(str, new_str);
-+        return str;
- }
- 
- char *ascii_is_valid(const char *str) {
-@@ -318,64 +239,6 @@ char *utf16_to_utf8(const void *s, size_t length) {
-         return r;
- }
- 
--/* count of characters used to encode one unicode char */
--static int utf8_encoded_expected_len(const char *str) {
--        unsigned char c = (unsigned char)str[0];
--
--        if (c < 0x80)
--                return 1;
--        if ((c & 0xe0) == 0xc0)
--                return 2;
--        if ((c & 0xf0) == 0xe0)
--                return 3;
--        if ((c & 0xf8) == 0xf0)
--                return 4;
--        if ((c & 0xfc) == 0xf8)
--                return 5;
--        if ((c & 0xfe) == 0xfc)
--                return 6;
--        return 0;
--}
--
--/* decode one unicode char */
--static int utf8_encoded_to_unichar(const char *str) {
--        int unichar;
--        int len;
--        int i;
--
--        len = utf8_encoded_expected_len(str);
--        switch (len) {
--        case 1:
--                return (int)str[0];
--        case 2:
--                unichar = str[0] & 0x1f;
--                break;
--        case 3:
--                unichar = (int)str[0] & 0x0f;
--                break;
--        case 4:
--                unichar = (int)str[0] & 0x07;
--                break;
--        case 5:
--                unichar = (int)str[0] & 0x03;
--                break;
--        case 6:
--                unichar = (int)str[0] & 0x01;
--                break;
--        default:
--                return -1;
--        }
--
--        for (i = 1; i < len; i++) {
--                if (((int)str[i] & 0xc0) != 0x80)
--                        return -1;
--                unichar <<= 6;
--                unichar |= (int)str[i] & 0x3f;
--        }
--
--        return unichar;
--}
--
- /* expected size used to encode one unicode char */
- static int utf8_unichar_to_encoded_len(int unichar) {
-         if (unichar < 0x80)
-diff --git a/src/shared/utf8.h b/src/shared/utf8.h
-index 7a5608c..22e1346 100644
---- a/src/shared/utf8.h
-+++ b/src/shared/utf8.h
-@@ -25,12 +25,11 @@
- 
- #include "macro.h"
- 
--char *utf8_is_valid(const char *s) _pure_;
-+const char *utf8_is_valid(const char *s) _pure_;
- char *ascii_is_valid(const char *s) _pure_;
- 
- bool utf8_is_printable(const char* str, size_t length) _pure_;
- 
--char *utf8_filter(const char *s);
- char *ascii_filter(const char *s);
- 
- char *utf16_to_utf8(const void *s, size_t length);
-diff --git a/src/test/test-utf8.c b/src/test/test-utf8.c
-index d2b9771..26cc37b 100644
---- a/src/test/test-utf8.c
-+++ b/src/test/test-utf8.c
-@@ -47,6 +47,12 @@ static void test_udev_encode_string(void) {
-         assert_se(expect_encoded_as("s/ash/ng", "s\\x2fash\\x2fng"));
- }
- 
-+static void test_utf8_is_printable(void) {
-+        assert_se(utf8_is_printable("ascii is valid\tunicode", 22));
-+        assert_se(utf8_is_printable("\342\204\242", 3));
-+        assert_se(!utf8_is_printable("\341\204", 2));
-+}
-+
- static void test_utf8_is_valid(void) {
-         assert_se(utf8_is_valid("ascii is valid unicode"));
-         assert_se(utf8_is_valid("\341\204\242"));
-@@ -55,5 +61,8 @@ static void test_utf8_is_valid(void) {
- 
- int main(int argc, char *argv[]) {
-         test_utf8_is_valid();
-+        test_utf8_is_printable();
-         test_udev_encode_string();
-+
-+        return 0;
- }
diff --git a/SOURCES/0088-device-nodes-move-device-node-specific-code-to-own-f.patch b/SOURCES/0088-device-nodes-move-device-node-specific-code-to-own-f.patch
deleted file mode 100644
index 4aac24b..0000000
--- a/SOURCES/0088-device-nodes-move-device-node-specific-code-to-own-f.patch
+++ /dev/null
@@ -1,418 +0,0 @@
-From a6b1359b406410ca48160deb442a62f73f3b7508 Mon Sep 17 00:00:00 2001
-From: Dave Reisner <dreisner@archlinux.org>
-Date: Wed, 18 Sep 2013 12:12:04 -0400
-Subject: [PATCH] device-nodes: move device node specific code to own file
-
-In the process, rename udev_encode_string which is poorly named for what
-it does. It deals specifically with encoding names that udev creates and
-has its own rules: utf8 is valid but some ascii is not (e.g. path
-separators), and everything else is simply escaped. Rename it to
-encode_devnode_name.
----
- .gitignore                   |  1 +
- Makefile.am                  | 14 ++++++++-
- src/libudev/libudev-util.c   |  5 +--
- src/shared/device-nodes.c    | 74 ++++++++++++++++++++++++++++++++++++++++++++
- src/shared/device-nodes.h    | 23 ++++++++++++++
- src/shared/utf8.c            | 46 ---------------------------
- src/shared/utf8.h            |  2 --
- src/shared/util.c            |  4 +--
- src/test/test-device-nodes.c | 55 ++++++++++++++++++++++++++++++++
- src/test/test-utf8.c         | 28 +----------------
- 10 files changed, 172 insertions(+), 80 deletions(-)
- create mode 100644 src/shared/device-nodes.c
- create mode 100644 src/shared/device-nodes.h
- create mode 100644 src/test/test-device-nodes.c
-
-diff --git a/.gitignore b/.gitignore
-index deeee53..8115d4d 100644
---- a/.gitignore
-+++ b/.gitignore
-@@ -101,6 +101,7 @@
- /test-cgroup-util
- /test-daemon
- /test-date
-+/test-device-nodes
- /test-efivars
- /test-engine
- /test-env-replace
-diff --git a/Makefile.am b/Makefile.am
-index 6dd33ad..aa16522 100644
---- a/Makefile.am
-+++ b/Makefile.am
-@@ -640,6 +640,8 @@ libsystemd_shared_la_SOURCES = \
- 	src/shared/list.h \
- 	src/shared/macro.h \
- 	src/shared/def.h \
-+	src/shared/device-nodes.c \
-+	src/shared/device-nodes.h \
- 	src/shared/sparse-endian.h \
- 	src/shared/util.c \
- 	src/shared/util.h \
-@@ -1135,7 +1137,8 @@ tests += \
- 	test-time \
- 	test-hashmap \
- 	test-list \
--	test-tables
-+	test-tables \
-+	test-device-nodes
- 
- EXTRA_DIST += \
- 	test/sched_idle_bad.service \
-@@ -1147,6 +1150,15 @@ EXTRA_DIST += \
- EXTRA_DIST += \
- 	src/test/test-helper.h
- 
-+test_device_nodes_SOURCES = \
-+	src/test/test-device-nodes.c
-+
-+test_device_nodes_CFLAGS = \
-+	$(AM_CFLAGS)
-+
-+test_device_nodes_LDADD = \
-+	libsystemd-shared.la
-+
- test_engine_SOURCES = \
- 	src/test/test-engine.c
- 
-diff --git a/src/libudev/libudev-util.c b/src/libudev/libudev-util.c
-index d54430c..b5b9db6 100644
---- a/src/libudev/libudev-util.c
-+++ b/src/libudev/libudev-util.c
-@@ -32,6 +32,7 @@
- #include <sys/stat.h>
- #include <sys/param.h>
- 
-+#include "device-nodes.h"
- #include "libudev.h"
- #include "libudev-private.h"
- #include "utf8.h"
-@@ -344,7 +345,7 @@ int util_replace_chars(char *str, const char *white)
-         while (str[i] != '\0') {
-                 int len;
- 
--                if (is_utf8_encoding_whitelisted(str[i], white)) {
-+                if (whitelisted_char_for_devnode(str[i], white)) {
-                         i++;
-                         continue;
-                 }
-@@ -392,7 +393,7 @@ int util_replace_chars(char *str, const char *white)
-  **/
- _public_ int udev_util_encode_string(const char *str, char *str_enc, size_t len)
- {
--        return udev_encode_string(str, str_enc, len);
-+        return encode_devnode_name(str, str_enc, len);
- }
- 
- /*
-diff --git a/src/shared/device-nodes.c b/src/shared/device-nodes.c
-new file mode 100644
-index 0000000..986553e
---- /dev/null
-+++ b/src/shared/device-nodes.c
-@@ -0,0 +1,74 @@
-+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
-+
-+/***
-+  This file is part of systemd.
-+
-+  Copyright 2012 Lennart Poettering
-+
-+  systemd is free software; you can redistribute it and/or modify it
-+  under the terms of the GNU Lesser General Public License as published by
-+  the Free Software Foundation; either version 2.1 of the License, or
-+  (at your option) any later version.
-+
-+  systemd is distributed in the hope that it will be useful, but
-+  WITHOUT ANY WARRANTY; without even the implied warranty of
-+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+  Lesser General Public License for more details.
-+
-+  You should have received a copy of the GNU Lesser General Public License
-+  along with systemd; If not, see <http://www.gnu.org/licenses/>.
-+***/
-+
-+#include <stdlib.h>
-+#include <stdio.h>
-+#include <stdint.h>
-+#include <sys/types.h>
-+
-+#include "device-nodes.h"
-+#include "utf8.h"
-+
-+int whitelisted_char_for_devnode(char c, const char *white) {
-+        if ((c >= '0' && c <= '9') ||
-+            (c >= 'A' && c <= 'Z') ||
-+            (c >= 'a' && c <= 'z') ||
-+            strchr("#+-.:=@_", c) != NULL ||
-+            (white != NULL && strchr(white, c) != NULL))
-+                return 1;
-+        return 0;
-+}
-+
-+int encode_devnode_name(const char *str, char *str_enc, size_t len) {
-+        size_t i, j;
-+
-+        if (str == NULL || str_enc == NULL)
-+                return -1;
-+
-+        for (i = 0, j = 0; str[i] != '\0'; i++) {
-+                int seqlen;
-+
-+                seqlen = utf8_encoded_valid_unichar(&str[i]);
-+                if (seqlen > 1) {
-+                        if (len-j < (size_t)seqlen)
-+                                goto err;
-+                        memcpy(&str_enc[j], &str[i], seqlen);
-+                        j += seqlen;
-+                        i += (seqlen-1);
-+                } else if (str[i] == '\\' || !whitelisted_char_for_devnode(str[i], NULL)) {
-+                        if (len-j < 4)
-+                                goto err;
-+                        sprintf(&str_enc[j], "\\x%02x", (unsigned char) str[i]);
-+                        j += 4;
-+                } else {
-+                        if (len-j < 1)
-+                                goto err;
-+                        str_enc[j] = str[i];
-+                        j++;
-+                }
-+        }
-+        if (len-j < 1)
-+                goto err;
-+        str_enc[j] = '\0';
-+        return 0;
-+err:
-+        return -1;
-+}
-diff --git a/src/shared/device-nodes.h b/src/shared/device-nodes.h
-new file mode 100644
-index 0000000..a98195a
---- /dev/null
-+++ b/src/shared/device-nodes.h
-@@ -0,0 +1,23 @@
-+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
-+
-+/***
-+  This file is part of systemd.
-+
-+  Copyright 2012 Lennart Poettering
-+
-+  systemd is free software; you can redistribute it and/or modify it
-+  under the terms of the GNU Lesser General Public License as published by
-+  the Free Software Foundation; either version 2.1 of the License, or
-+  (at your option) any later version.
-+
-+  systemd is distributed in the hope that it will be useful, but
-+  WITHOUT ANY WARRANTY; without even the implied warranty of
-+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+  Lesser General Public License for more details.
-+
-+  You should have received a copy of the GNU Lesser General Public License
-+  along with systemd; If not, see <http://www.gnu.org/licenses/>.
-+***/
-+
-+int encode_devnode_name(const char *str, char *str_enc, size_t len);
-+int whitelisted_char_for_devnode(char c, const char *additional);
-diff --git a/src/shared/utf8.c b/src/shared/utf8.c
-index 732f0f0..c3d97cc 100644
---- a/src/shared/utf8.c
-+++ b/src/shared/utf8.c
-@@ -285,49 +285,3 @@ int utf8_encoded_valid_unichar(const char *str) {
- 
-         return len;
- }
--
--int is_utf8_encoding_whitelisted(char c, const char *white) {
--        if ((c >= '0' && c <= '9') ||
--            (c >= 'A' && c <= 'Z') ||
--            (c >= 'a' && c <= 'z') ||
--            strchr("#+-.:=@_", c) != NULL ||
--            (white != NULL && strchr(white, c) != NULL))
--                return 1;
--        return 0;
--}
--
--int udev_encode_string(const char *str, char *str_enc, size_t len) {
--        size_t i, j;
--
--        if (str == NULL || str_enc == NULL)
--                return -1;
--
--        for (i = 0, j = 0; str[i] != '\0'; i++) {
--                int seqlen;
--
--                seqlen = utf8_encoded_valid_unichar(&str[i]);
--                if (seqlen > 1) {
--                        if (len-j < (size_t)seqlen)
--                                goto err;
--                        memcpy(&str_enc[j], &str[i], seqlen);
--                        j += seqlen;
--                        i += (seqlen-1);
--                } else if (str[i] == '\\' || !is_utf8_encoding_whitelisted(str[i], NULL)) {
--                        if (len-j < 4)
--                                goto err;
--                        sprintf(&str_enc[j], "\\x%02x", (unsigned char) str[i]);
--                        j += 4;
--                } else {
--                        if (len-j < 1)
--                                goto err;
--                        str_enc[j] = str[i];
--                        j++;
--                }
--        }
--        if (len-j < 1)
--                goto err;
--        str_enc[j] = '\0';
--        return 0;
--err:
--        return -1;
--}
-diff --git a/src/shared/utf8.h b/src/shared/utf8.h
-index 22e1346..96a03ea 100644
---- a/src/shared/utf8.h
-+++ b/src/shared/utf8.h
-@@ -35,5 +35,3 @@ char *ascii_filter(const char *s);
- char *utf16_to_utf8(const void *s, size_t length);
- 
- int utf8_encoded_valid_unichar(const char *str);
--int is_utf8_encoding_whitelisted(char c, const char *white);
--int udev_encode_string(const char *str, char *str_enc, size_t len);
-diff --git a/src/shared/util.c b/src/shared/util.c
-index 4f80cc8..4711d91 100644
---- a/src/shared/util.c
-+++ b/src/shared/util.c
-@@ -73,7 +73,7 @@
- #include "hashmap.h"
- #include "env-util.h"
- #include "fileio.h"
--#include "utf8.h"
-+#include "device-nodes.h"
- 
- int saved_argc = 0;
- char **saved_argv = NULL;
-@@ -3509,7 +3509,7 @@ static char *tag_to_udev_node(const char *tagvalue, const char *by) {
-         if (t == NULL)
-                 return NULL;
- 
--        if (udev_encode_string(u, t, enc_len) < 0)
-+        if (encode_devnode_name(u, t, enc_len) < 0)
-                 return NULL;
- 
-         if (asprintf(&dn, "/dev/disk/by-%s/%s", by, t) < 0)
-diff --git a/src/test/test-device-nodes.c b/src/test/test-device-nodes.c
-new file mode 100644
-index 0000000..2f3dedb
---- /dev/null
-+++ b/src/test/test-device-nodes.c
-@@ -0,0 +1,55 @@
-+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
-+
-+/***
-+  This file is part of systemd.
-+
-+  Copyright 2013 Dave Reisner
-+
-+  systemd is free software; you can redistribute it and/or modify it
-+  under the terms of the GNU Lesser General Public License as published by
-+  the Free Software Foundation; either version 2.1 of the License, or
-+  (at your option) any later version.
-+
-+  systemd is distributed in the hope that it will be useful, but
-+  WITHOUT ANY WARRANTY; without even the implied warranty of
-+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+  Lesser General Public License for more details.
-+
-+  You should have received a copy of the GNU Lesser General Public License
-+  along with systemd; If not, see <http://www.gnu.org/licenses/>.
-+***/
-+
-+#include <sys/types.h>
-+
-+#include "device-nodes.h"
-+#include "util.h"
-+
-+/* helpers for test_encode_devnode_name */
-+static char *do_encode_string(const char *in) {
-+        size_t out_len = strlen(in) * 4;
-+        char *out = malloc(out_len);
-+
-+        assert_se(out);
-+        assert_se(encode_devnode_name(in, out, out_len) >= 0);
-+        puts(out);
-+
-+        return out;
-+}
-+
-+static bool expect_encoded_as(const char *in, const char *expected) {
-+        _cleanup_free_ char *encoded = do_encode_string(in);
-+        return streq(encoded, expected);
-+}
-+
-+static void test_encode_devnode_name(void) {
-+        assert_se(expect_encoded_as("systemd sucks", "systemd\\x20sucks"));
-+        assert_se(expect_encoded_as("pinkiepie", "pinkiepie"));
-+        assert_se(expect_encoded_as("valíd\\ųtf8", "valíd\\x5cųtf8"));
-+        assert_se(expect_encoded_as("s/ash/ng", "s\\x2fash\\x2fng"));
-+}
-+
-+int main(int argc, char *argv[]) {
-+        test_encode_devnode_name();
-+
-+        return 0;
-+}
-diff --git a/src/test/test-utf8.c b/src/test/test-utf8.c
-index 26cc37b..b5a833e 100644
---- a/src/test/test-utf8.c
-+++ b/src/test/test-utf8.c
-@@ -19,34 +19,9 @@
-   along with systemd; If not, see <http://www.gnu.org/licenses/>.
- ***/
- 
--
- #include "utf8.h"
- #include "util.h"
- 
--/* helpers for test_udev_encode_string */
--static char *do_encode_string(const char *in) {
--        size_t out_len = strlen(in) * 4;
--        char *out = malloc(out_len);
--
--        assert_se(out);
--        assert_se(udev_encode_string(in, out, out_len) >= 0);
--        puts(out);
--
--        return out;
--}
--
--static bool expect_encoded_as(const char *in, const char *expected) {
--        _cleanup_free_ char *encoded = do_encode_string(in);
--        return streq(encoded, expected);
--}
--
--static void test_udev_encode_string(void) {
--        assert_se(expect_encoded_as("systemd sucks", "systemd\\x20sucks"));
--        assert_se(expect_encoded_as("pinkiepie", "pinkiepie"));
--        assert_se(expect_encoded_as("valíd\\ųtf8", "valíd\\x5cųtf8"));
--        assert_se(expect_encoded_as("s/ash/ng", "s\\x2fash\\x2fng"));
--}
--
- static void test_utf8_is_printable(void) {
-         assert_se(utf8_is_printable("ascii is valid\tunicode", 22));
-         assert_se(utf8_is_printable("\342\204\242", 3));
-@@ -55,14 +30,13 @@ static void test_utf8_is_printable(void) {
- 
- static void test_utf8_is_valid(void) {
-         assert_se(utf8_is_valid("ascii is valid unicode"));
--        assert_se(utf8_is_valid("\341\204\242"));
-+        assert_se(utf8_is_valid("\342\204\242"));
-         assert_se(!utf8_is_valid("\341\204"));
- }
- 
- int main(int argc, char *argv[]) {
-         test_utf8_is_valid();
-         test_utf8_is_printable();
--        test_udev_encode_string();
- 
-         return 0;
- }
diff --git a/SOURCES/0088-shutdown-trim-the-cgroup-tree-on-loop-iteration.patch b/SOURCES/0088-shutdown-trim-the-cgroup-tree-on-loop-iteration.patch
new file mode 100644
index 0000000..ad78f06
--- /dev/null
+++ b/SOURCES/0088-shutdown-trim-the-cgroup-tree-on-loop-iteration.patch
@@ -0,0 +1,65 @@
+From 8742fc797d827ff92831af7d8af353e6bb073ddc Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart@poettering.net>
+Date: Tue, 5 Nov 2013 22:17:03 +0100
+Subject: [PATCH] shutdown: trim the cgroup tree on loop iteration
+
+This way we leave the cgroup empty before exiting in a container which
+makes sure the container manager will get cgroup notification event
+
+https://bugs.freedesktop.org/show_bug.cgi?id=68370
+https://bugzilla.redhat.com/show_bug.cgi?id=988883
+---
+ src/core/shutdown.c | 16 +++++++++++++---
+ 1 file changed, 13 insertions(+), 3 deletions(-)
+
+diff --git a/src/core/shutdown.c b/src/core/shutdown.c
+index 4709746..ea02b60 100644
+--- a/src/core/shutdown.c
++++ b/src/core/shutdown.c
+@@ -46,6 +46,7 @@
+ #include "virt.h"
+ #include "watchdog.h"
+ #include "killall.h"
++#include "cgroup-util.h"
+ 
+ #define FINALIZE_ATTEMPTS 50
+ 
+@@ -131,12 +132,12 @@ static int pivot_to_new_root(void) {
+ }
+ 
+ int main(int argc, char *argv[]) {
+-        _cleanup_free_ char *line = NULL;
+-        int cmd, r;
+-        unsigned retries;
+         bool need_umount = true, need_swapoff = true, need_loop_detach = true, need_dm_detach = true;
+         bool in_container, use_watchdog = false;
++        _cleanup_free_ char *line = NULL, *cgroup = NULL;
+         char *arguments[3];
++        unsigned retries;
++        int cmd, r;
+ 
+         /* suppress shutdown status output if 'quiet' is used  */
+         r = read_one_line_file("/proc/cmdline", &line);
+@@ -186,6 +187,8 @@ int main(int argc, char *argv[]) {
+                 goto error;
+         }
+ 
++        cg_get_root_path(&cgroup);
++
+         use_watchdog = !!getenv("WATCHDOG_USEC");
+ 
+         /* lock us into memory */
+@@ -210,6 +213,13 @@ int main(int argc, char *argv[]) {
+                 if (use_watchdog)
+                         watchdog_ping();
+ 
++                /* Let's trim the cgroup tree on each iteration so
++                   that we leave an empty cgroup tree around, so that
++                   container managers get a nice notify event when we
++                   are down */
++                if (cgroup)
++                        cg_trim(SYSTEMD_CGROUP_CONTROLLER, cgroup, false);
++
+                 if (need_umount) {
+                         log_info("Unmounting file systems.");
+                         r = umount_all(&changed);
diff --git a/SOURCES/0089-run-support-system-to-match-other-commands-even-if-r.patch b/SOURCES/0089-run-support-system-to-match-other-commands-even-if-r.patch
new file mode 100644
index 0000000..74ec531
--- /dev/null
+++ b/SOURCES/0089-run-support-system-to-match-other-commands-even-if-r.patch
@@ -0,0 +1,112 @@
+From 8588ecf209ae4f8a198614b3786c58e584528f98 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart@poettering.net>
+Date: Wed, 6 Nov 2013 17:31:20 +0100
+Subject: [PATCH] run: support --system to match other commands, even if
+ redundant
+
+Conflicts:
+	man/systemd-run.xml
+	src/run/run.c
+---
+ man/systemd-run.xml |  9 +++++++++
+ src/run/run.c       | 20 +++++++++++++-------
+ 2 files changed, 22 insertions(+), 7 deletions(-)
+
+diff --git a/man/systemd-run.xml b/man/systemd-run.xml
+index 252335b..48a0715 100644
+--- a/man/systemd-run.xml
++++ b/man/systemd-run.xml
+@@ -113,6 +113,15 @@ along with systemd; If not, see <http://www.gnu.org/licenses/>.
+       </varlistentry>
+ 
+       <varlistentry>
++        <term><option>--system</option></term>
++
++        <listitem>
++          <para>Talk to the service manager of the system. This is the
++          implied default.</para>
++        </listitem>
++      </varlistentry>
++
++      <varlistentry>
+         <term><option>--scope</option></term>
+ 
+         <listitem>
+diff --git a/src/run/run.c b/src/run/run.c
+index 18a4920..a6abead 100644
+--- a/src/run/run.c
++++ b/src/run/run.c
+@@ -61,6 +61,7 @@ static int parse_argv(int argc, char *argv[]) {
+         enum {
+                 ARG_VERSION = 0x100,
+                 ARG_USER,
++                ARG_SYSTEM,
+                 ARG_SCOPE,
+                 ARG_UNIT,
+                 ARG_DESCRIPTION,
+@@ -72,6 +73,7 @@ static int parse_argv(int argc, char *argv[]) {
+                 { "help",              no_argument,       NULL, 'h'             },
+                 { "version",           no_argument,       NULL, ARG_VERSION     },
+                 { "user",              no_argument,       NULL, ARG_USER        },
++                { "system",            no_argument,       NULL, ARG_SYSTEM      },
+                 { "scope",             no_argument,       NULL, ARG_SCOPE       },
+                 { "unit",              required_argument, NULL, ARG_UNIT        },
+                 { "description",       required_argument, NULL, ARG_DESCRIPTION },
+@@ -103,6 +105,10 @@ static int parse_argv(int argc, char *argv[]) {
+                         arg_user = true;
+                         break;
+ 
++                case ARG_SYSTEM:
++                        arg_user = false;
++                        break;
++
+                 case ARG_SCOPE:
+                         arg_scope = true;
+                         break;
+@@ -333,12 +339,12 @@ int main(int argc, char* argv[]) {
+ 
+         r = parse_argv(argc, argv);
+         if (r <= 0)
+-                goto fail;
++                goto finish;
+ 
+         r = find_binary(argv[optind], &command);
+         if (r < 0) {
+                 log_error("Failed to find executable %s: %s", argv[optind], strerror(-r));
+-                goto fail;
++                goto finish;
+         }
+         argv[optind] = command;
+ 
+@@ -346,7 +352,7 @@ int main(int argc, char* argv[]) {
+                 description = strv_join(argv + optind, " ");
+                 if (!description) {
+                         r = log_oom();
+-                        goto fail;
++                        goto finish;
+                 }
+ 
+                 arg_description = description;
+@@ -357,8 +363,8 @@ int main(int argc, char* argv[]) {
+         else
+                 r = sd_bus_open_system(&bus);
+         if (r < 0) {
+-                log_error("Failed to create new bus connection: %s", strerror(-r));
+-                goto fail;
++                log_error("Failed to create bus connection: %s", strerror(-r));
++                goto finish;
+         }
+ 
+         if (arg_scope)
+@@ -368,9 +374,9 @@ int main(int argc, char* argv[]) {
+         if (r < 0) {
+                 log_error("Failed start transient unit: %s", error.message ? error.message : strerror(-r));
+                 sd_bus_error_free(&error);
+-                goto fail;
++                goto finish;
+         }
+ 
+-fail:
++finish:
+         return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
+ }
diff --git a/SOURCES/0089-shared-util-fix-off-by-one-error-in-tag_to_udev_node.patch b/SOURCES/0089-shared-util-fix-off-by-one-error-in-tag_to_udev_node.patch
deleted file mode 100644
index b7146f4..0000000
--- a/SOURCES/0089-shared-util-fix-off-by-one-error-in-tag_to_udev_node.patch
+++ /dev/null
@@ -1,47 +0,0 @@
-From 665bb7f5ec052d5e78bb298f1f2fc181ba03c411 Mon Sep 17 00:00:00 2001
-From: Dave Reisner <dreisner@archlinux.org>
-Date: Sun, 6 Oct 2013 18:26:23 -0400
-Subject: [PATCH] shared/util: fix off-by-one error in tag_to_udev_node
-
-Triggered false negatives when encoding a string which needed every
-character to be escaped, e.g. "LABEL=/".
----
- src/shared/util.c            | 2 +-
- src/test/test-device-nodes.c | 4 +++-
- 2 files changed, 4 insertions(+), 2 deletions(-)
-
-diff --git a/src/shared/util.c b/src/shared/util.c
-index 4711d91..e69d1ff 100644
---- a/src/shared/util.c
-+++ b/src/shared/util.c
-@@ -3504,7 +3504,7 @@ static char *tag_to_udev_node(const char *tagvalue, const char *by) {
-         if (u == NULL)
-                 return NULL;
- 
--        enc_len = strlen(u) * 4;
-+        enc_len = strlen(u) * 4 + 1;
-         t = new(char, enc_len);
-         if (t == NULL)
-                 return NULL;
-diff --git a/src/test/test-device-nodes.c b/src/test/test-device-nodes.c
-index 2f3dedb..59ba4be 100644
---- a/src/test/test-device-nodes.c
-+++ b/src/test/test-device-nodes.c
-@@ -26,7 +26,7 @@
- 
- /* helpers for test_encode_devnode_name */
- static char *do_encode_string(const char *in) {
--        size_t out_len = strlen(in) * 4;
-+        size_t out_len = strlen(in) * 4 + 1;
-         char *out = malloc(out_len);
- 
-         assert_se(out);
-@@ -46,6 +46,8 @@ static void test_encode_devnode_name(void) {
-         assert_se(expect_encoded_as("pinkiepie", "pinkiepie"));
-         assert_se(expect_encoded_as("valíd\\ųtf8", "valíd\\x5cųtf8"));
-         assert_se(expect_encoded_as("s/ash/ng", "s\\x2fash\\x2fng"));
-+        assert_se(expect_encoded_as("/", "\\x2f"));
-+        assert_se(expect_encoded_as("!", "\\x21"));
- }
- 
- int main(int argc, char *argv[]) {
diff --git a/SOURCES/0090-acpi-fpdt-break-on-zero-or-negative-length-read.patch b/SOURCES/0090-acpi-fpdt-break-on-zero-or-negative-length-read.patch
new file mode 100644
index 0000000..9807e91
--- /dev/null
+++ b/SOURCES/0090-acpi-fpdt-break-on-zero-or-negative-length-read.patch
@@ -0,0 +1,23 @@
+From 113e2da2789ac680d2042993dcf76eef43072f4d Mon Sep 17 00:00:00 2001
+From: Pavel Holica <conscript89@gmail.com>
+Date: Wed, 6 Nov 2013 23:24:16 +0100
+Subject: [PATCH] acpi-fpdt: break on zero or negative length read
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1027478
+---
+ src/shared/acpi-fpdt.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/src/shared/acpi-fpdt.c b/src/shared/acpi-fpdt.c
+index 75648b4..7bae47f 100644
+--- a/src/shared/acpi-fpdt.c
++++ b/src/shared/acpi-fpdt.c
+@@ -109,6 +109,8 @@ int acpi_get_boot_usec(usec_t *loader_start, usec_t *loader_exit) {
+         for (rec = (struct acpi_fpdt_header *)(buf + sizeof(struct acpi_table_header));
+              (char *)rec < buf + l;
+              rec = (struct acpi_fpdt_header *)((char *)rec + rec->length)) {
++                if (rec->length <= 0)
++                        break;
+                 if (rec->type != ACPI_FPDT_TYPE_BOOT)
+                         continue;
+                 if (rec->length != sizeof(struct acpi_fpdt_header))
diff --git a/SOURCES/0090-udev-path_id-fix-by-path-link-generation-for-scm-dev.patch b/SOURCES/0090-udev-path_id-fix-by-path-link-generation-for-scm-dev.patch
deleted file mode 100644
index 81471cb..0000000
--- a/SOURCES/0090-udev-path_id-fix-by-path-link-generation-for-scm-dev.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-From dd6fb603d74e958f6a24b07f8792f07a576111ee Mon Sep 17 00:00:00 2001
-From: Sebastian Ott <sebott@linux.vnet.ibm.com>
-Date: Tue, 17 Sep 2013 19:16:08 +0200
-Subject: [PATCH] udev: path_id - fix by-path link generation for scm devices
-
-Set some_transport = true to prevent scm devices from being ignored.
-
-Suggested-by: Harald Hoyer <harald@redhat.com>
-Signed-off-by: Sebastian Ott <sebott@linux.vnet.ibm.com>
----
- src/udev/udev-builtin-path_id.c | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/src/udev/udev-builtin-path_id.c b/src/udev/udev-builtin-path_id.c
-index da02731..0659967 100644
---- a/src/udev/udev-builtin-path_id.c
-+++ b/src/udev/udev-builtin-path_id.c
-@@ -531,6 +531,7 @@ static int builtin_path_id(struct udev_device *dev, int argc, char *argv[], bool
-                 } else if (streq(subsys, "scm")) {
-                         path_prepend(&path, "scm-%s", udev_device_get_sysname(parent));
-                         parent = skip_subsystem(parent, "scm");
-+                        some_transport = true;
-                 }
- 
-                 parent = udev_device_get_parent(parent);
diff --git a/SOURCES/0091-hashmap-randomize-hash-functions-a-bit.patch b/SOURCES/0091-hashmap-randomize-hash-functions-a-bit.patch
deleted file mode 100644
index 5c7b270..0000000
--- a/SOURCES/0091-hashmap-randomize-hash-functions-a-bit.patch
+++ /dev/null
@@ -1,374 +0,0 @@
-From 9bf25f9e532dad32d71e95a85c413996d4bd58ac Mon Sep 17 00:00:00 2001
-From: Lennart Poettering <lennart@poettering.net>
-Date: Tue, 1 Oct 2013 23:11:23 +0200
-Subject: [PATCH] hashmap: randomize hash functions a bit
-
----
- configure.ac         |   2 +-
- src/shared/hashmap.c | 104 +++++++++++++++++++++++++++++++--------------------
- src/shared/util.c    |  19 ++++++++++
- src/shared/util.h    |   1 +
- 4 files changed, 85 insertions(+), 41 deletions(-)
-
-diff --git a/configure.ac b/configure.ac
-index c7f4f1b..2ae0411 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -804,7 +804,7 @@ have_myhostname=no
- AC_ARG_ENABLE(myhostname, AS_HELP_STRING([--disable-myhostname], [disable nss-myhostname support]))
- if test "x$enable_myhostname" != "xno"; then
-         AC_HEADER_STDC
--        AC_CHECK_HEADERS([arpa/inet.h fcntl.h inttypes.h netdb.h netinet/in.h stdlib.h string.h sys/socket.h sys/time.h unistd.h nss.h sys/ioctl.h])
-+        AC_CHECK_HEADERS([arpa/inet.h fcntl.h inttypes.h netdb.h netinet/in.h stdlib.h string.h sys/socket.h sys/time.h unistd.h nss.h sys/ioctl.h sys/auxv.h])
- 
-         AC_C_CONST
-         AC_TYPE_SIZE_T
-diff --git a/src/shared/hashmap.c b/src/shared/hashmap.c
-index 6330792..f06fce6 100644
---- a/src/shared/hashmap.c
-+++ b/src/shared/hashmap.c
-@@ -24,6 +24,10 @@
- #include <string.h>
- #include <errno.h>
- 
-+#ifdef HAVE_SYS_AUXV_H
-+#include <sys/auxv.h>
-+#endif
-+
- #include "util.h"
- #include "hashmap.h"
- #include "macro.h"
-@@ -46,6 +50,7 @@ struct Hashmap {
-         struct hashmap_entry ** buckets;
-         unsigned n_buckets, n_entries;
- 
-+        unsigned random_xor;
-         bool from_pool;
- };
- 
-@@ -171,10 +176,15 @@ int uint64_compare_func(const void *_a, const void *_b) {
-         return a < b ? -1 : (a > b ? 1 : 0);
- }
- 
-+static unsigned bucket_hash(Hashmap *h, const void *p) {
-+        return (h->hash_func(p) ^ h->random_xor) % h->n_buckets;
-+}
-+
- Hashmap *hashmap_new(hash_func_t hash_func, compare_func_t compare_func) {
-         bool b;
-         Hashmap *h;
-         size_t size;
-+        void *auxv;
- 
-         b = is_main_thread();
- 
-@@ -204,6 +214,19 @@ Hashmap *hashmap_new(hash_func_t hash_func, compare_func_t compare_func) {
- 
-         h->from_pool = b;
- 
-+        /* Let's randomize our hash functions a bit so that they are
-+         * harder to guess for clients. For this, start out by cheaply
-+         * using some bits the kernel passed into the process using
-+         * the auxiliary vector. If the hashmap grows later on we will
-+         * rehash everything using a new random XOR mask from
-+         * /dev/random. */
-+#ifdef HAVE_SYS_AUXV_H
-+        auxv = (void*) getauxval(AT_RANDOM);
-+        h->random_xor = auxv ? *(unsigned*) auxv : random_u();
-+#else
-+        h->random_xor = random_u();
-+#endif
-+
-         return h;
- }
- 
-@@ -284,8 +307,7 @@ static void remove_entry(Hashmap *h, struct hashmap_entry *e) {
-         assert(h);
-         assert(e);
- 
--        hash = h->hash_func(e->key) % h->n_buckets;
--
-+        hash = bucket_hash(h, e->key);
-         unlink_entry(h, e, hash);
- 
-         if (h->from_pool)
-@@ -368,7 +390,6 @@ void hashmap_clear_free_free(Hashmap *h) {
-         }
- }
- 
--
- static struct hashmap_entry *hash_scan(Hashmap *h, unsigned hash, const void *key) {
-         struct hashmap_entry *e;
-         assert(h);
-@@ -382,8 +403,8 @@ static struct hashmap_entry *hash_scan(Hashmap *h, unsigned hash, const void *ke
- }
- 
- static bool resize_buckets(Hashmap *h) {
--        unsigned m;
-         struct hashmap_entry **n, *i;
-+        unsigned m, nxor;
- 
-         assert(h);
- 
-@@ -398,6 +419,11 @@ static bool resize_buckets(Hashmap *h) {
-         if (!n)
-                 return false;
- 
-+        /* Let's use a different randomized xor value for the
-+         * extension, so that people cannot guess what we are using
-+         * here forever */
-+        nxor = random_u();
-+
-         for (i = h->iterate_list_head; i; i = i->iterate_next) {
-                 unsigned hash, x;
- 
-@@ -410,10 +436,10 @@ static bool resize_buckets(Hashmap *h) {
-                 if (i->bucket_previous)
-                         i->bucket_previous->bucket_next = i->bucket_next;
-                 else
--                        h->buckets[hash % h->n_buckets] = i->bucket_next;
-+                        h->buckets[(hash ^ h->random_xor) % h->n_buckets] = i->bucket_next;
- 
-                 /* Then, add to new backet table */
--                x = hash % m;
-+                x = (hash ^ nxor) % m;
- 
-                 i->bucket_next = n[x];
-                 i->bucket_previous = NULL;
-@@ -427,6 +453,7 @@ static bool resize_buckets(Hashmap *h) {
- 
-         h->buckets = n;
-         h->n_buckets = m;
-+        h->random_xor = nxor;
- 
-         return true;
- }
-@@ -437,7 +464,7 @@ int hashmap_put(Hashmap *h, const void *key, void *value) {
- 
-         assert(h);
- 
--        hash = h->hash_func(key) % h->n_buckets;
-+        hash = bucket_hash(h, key);
-         e = hash_scan(h, hash, key);
-         if (e) {
-                 if (e->value == value)
-@@ -446,7 +473,7 @@ int hashmap_put(Hashmap *h, const void *key, void *value) {
-         }
- 
-         if (resize_buckets(h))
--                hash = h->hash_func(key) % h->n_buckets;
-+                hash = bucket_hash(h, key);
- 
-         if (h->from_pool)
-                 e = allocate_tile(&first_entry_pool, &first_entry_tile, sizeof(struct hashmap_entry));
-@@ -470,7 +497,7 @@ int hashmap_replace(Hashmap *h, const void *key, void *value) {
- 
-         assert(h);
- 
--        hash = h->hash_func(key) % h->n_buckets;
-+        hash = bucket_hash(h, key);
-         e = hash_scan(h, hash, key);
-         if (e) {
-                 e->key = key;
-@@ -487,7 +514,7 @@ int hashmap_update(Hashmap *h, const void *key, void *value) {
- 
-         assert(h);
- 
--        hash = h->hash_func(key) % h->n_buckets;
-+        hash = bucket_hash(h, key);
-         e = hash_scan(h, hash, key);
-         if (!e)
-                 return -ENOENT;
-@@ -503,7 +530,7 @@ void* hashmap_get(Hashmap *h, const void *key) {
-         if (!h)
-                 return NULL;
- 
--        hash = h->hash_func(key) % h->n_buckets;
-+        hash = bucket_hash(h, key);
-         e = hash_scan(h, hash, key);
-         if (!e)
-                 return NULL;
-@@ -518,7 +545,7 @@ void* hashmap_get2(Hashmap *h, const void *key, void **key2) {
-         if (!h)
-                 return NULL;
- 
--        hash = h->hash_func(key) % h->n_buckets;
-+        hash = bucket_hash(h, key);
-         e = hash_scan(h, hash, key);
-         if (!e)
-                 return NULL;
-@@ -535,12 +562,8 @@ bool hashmap_contains(Hashmap *h, const void *key) {
-         if (!h)
-                 return false;
- 
--        hash = h->hash_func(key) % h->n_buckets;
--
--        if (!hash_scan(h, hash, key))
--                return false;
--
--        return true;
-+        hash = bucket_hash(h, key);
-+        return !!hash_scan(h, hash, key);
- }
- 
- void* hashmap_remove(Hashmap *h, const void *key) {
-@@ -551,9 +574,9 @@ void* hashmap_remove(Hashmap *h, const void *key) {
-         if (!h)
-                 return NULL;
- 
--        hash = h->hash_func(key) % h->n_buckets;
--
--        if (!(e = hash_scan(h, hash, key)))
-+        hash = bucket_hash(h, key);
-+        e = hash_scan(h, hash, key);
-+        if (!e)
-                 return NULL;
- 
-         data = e->value;
-@@ -569,11 +592,12 @@ int hashmap_remove_and_put(Hashmap *h, const void *old_key, const void *new_key,
-         if (!h)
-                 return -ENOENT;
- 
--        old_hash = h->hash_func(old_key) % h->n_buckets;
--        if (!(e = hash_scan(h, old_hash, old_key)))
-+        old_hash = bucket_hash(h, old_key);
-+        e = hash_scan(h, old_hash, old_key);
-+        if (!e)
-                 return -ENOENT;
- 
--        new_hash = h->hash_func(new_key) % h->n_buckets;
-+        new_hash = bucket_hash(h, new_key);
-         if (hash_scan(h, new_hash, new_key))
-                 return -EEXIST;
- 
-@@ -594,12 +618,14 @@ int hashmap_remove_and_replace(Hashmap *h, const void *old_key, const void *new_
-         if (!h)
-                 return -ENOENT;
- 
--        old_hash = h->hash_func(old_key) % h->n_buckets;
--        if (!(e = hash_scan(h, old_hash, old_key)))
-+        old_hash = bucket_hash(h, old_key);
-+        e = hash_scan(h, old_hash, old_key);
-+        if (!e)
-                 return -ENOENT;
- 
--        new_hash = h->hash_func(new_key) % h->n_buckets;
--        if ((k = hash_scan(h, new_hash, new_key)))
-+        new_hash = bucket_hash(h, new_key);
-+        k = hash_scan(h, new_hash, new_key);
-+        if (k)
-                 if (e != k)
-                         remove_entry(h, k);
- 
-@@ -620,7 +646,7 @@ void* hashmap_remove_value(Hashmap *h, const void *key, void *value) {
-         if (!h)
-                 return NULL;
- 
--        hash = h->hash_func(key) % h->n_buckets;
-+        hash = bucket_hash(h, key);
- 
-         e = hash_scan(h, hash, key);
-         if (!e)
-@@ -711,7 +737,7 @@ void *hashmap_iterate_skip(Hashmap *h, const void *key, Iterator *i) {
-         if (!h)
-                 return NULL;
- 
--        hash = h->hash_func(key) % h->n_buckets;
-+        hash = bucket_hash(h, key);
- 
-         e = hash_scan(h, hash, key);
-         if (!e)
-@@ -820,9 +846,9 @@ int hashmap_merge(Hashmap *h, Hashmap *other) {
-         for (e = other->iterate_list_head; e; e = e->iterate_next) {
-                 int r;
- 
--                if ((r = hashmap_put(h, e->key, e->value)) < 0)
--                        if (r != -EEXIST)
--                                return r;
-+                r = hashmap_put(h, e->key, e->value);
-+                if (r < 0 && r != -EEXIST)
-+                        return r;
-         }
- 
-         return 0;
-@@ -844,13 +870,11 @@ void hashmap_move(Hashmap *h, Hashmap *other) {
- 
-                 n = e->iterate_next;
- 
--                h_hash = h->hash_func(e->key) % h->n_buckets;
--
-+                h_hash = bucket_hash(h, e->key);
-                 if (hash_scan(h, h_hash, e->key))
-                         continue;
- 
--                other_hash = other->hash_func(e->key) % other->n_buckets;
--
-+                other_hash = bucket_hash(other, e->key);
-                 unlink_entry(other, e, other_hash);
-                 link_entry(h, e, h_hash);
-         }
-@@ -865,11 +889,11 @@ int hashmap_move_one(Hashmap *h, Hashmap *other, const void *key) {
- 
-         assert(h);
- 
--        h_hash = h->hash_func(key) % h->n_buckets;
-+        h_hash = bucket_hash(h, key);
-         if (hash_scan(h, h_hash, key))
-                 return -EEXIST;
- 
--        other_hash = other->hash_func(key) % other->n_buckets;
-+        other_hash = bucket_hash(other, key);
-         e = hash_scan(other, other_hash, key);
-         if (!e)
-                 return -ENOENT;
-@@ -925,7 +949,7 @@ void *hashmap_next(Hashmap *h, const void *key) {
-         if (!h)
-                 return NULL;
- 
--        hash = h->hash_func(key) % h->n_buckets;
-+        hash = bucket_hash(h, key);
-         e = hash_scan(h, hash, key);
-         if (!e)
-                 return NULL;
-diff --git a/src/shared/util.c b/src/shared/util.c
-index e69d1ff..95fe35e 100644
---- a/src/shared/util.c
-+++ b/src/shared/util.c
-@@ -2420,6 +2420,25 @@ fallback:
-         return random() * RAND_MAX + random();
- }
- 
-+unsigned random_u(void) {
-+        _cleanup_close_ int fd;
-+        unsigned u;
-+        ssize_t r;
-+
-+        fd = open("/dev/urandom", O_RDONLY|O_CLOEXEC|O_NOCTTY);
-+        if (fd < 0)
-+                goto fallback;
-+
-+        r = loop_read(fd, &u, sizeof(u), true);
-+        if (r != sizeof(u))
-+                goto fallback;
-+
-+        return u;
-+
-+fallback:
-+        return random() * RAND_MAX + random();
-+}
-+
- void rename_process(const char name[8]) {
-         assert(name);
- 
-diff --git a/src/shared/util.h b/src/shared/util.h
-index 63f4e3d..1b845b3 100644
---- a/src/shared/util.h
-+++ b/src/shared/util.h
-@@ -253,6 +253,7 @@ int make_null_stdio(void);
- int make_console_stdio(void);
- 
- unsigned long long random_ull(void);
-+unsigned random_u(void);
- 
- /* For basic lookup tables with strictly enumerated entries */
- #define __DEFINE_STRING_TABLE_LOOKUP(name,type,scope)                   \
diff --git a/SOURCES/0091-man-add-rationale-into-systemd-halt-8.patch b/SOURCES/0091-man-add-rationale-into-systemd-halt-8.patch
new file mode 100644
index 0000000..d678ec3
--- /dev/null
+++ b/SOURCES/0091-man-add-rationale-into-systemd-halt-8.patch
@@ -0,0 +1,28 @@
+From e701defc239f63731940b8d0867405e0b36b9ada Mon Sep 17 00:00:00 2001
+From: Jan Engelhardt <jengelh@inai.de>
+Date: Thu, 7 Nov 2013 01:17:49 +0100
+Subject: [PATCH] man: add rationale into systemd-halt(8)
+
+The explanation is from
+http://people.debian.org/~stapelberg/docs/systemd-dependencies.html
+---
+ man/systemd-halt.service.xml | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/man/systemd-halt.service.xml b/man/systemd-halt.service.xml
+index 812281e..90b443f 100644
+--- a/man/systemd-halt.service.xml
++++ b/man/systemd-halt.service.xml
+@@ -83,6 +83,12 @@
+                 remaining swap devices, detach all remaining storage
+                 devices and kill all remaining processes.</para>
+ 
++                <para>It is necessary to have this code in a separate binary
++                because otherwise rebooting after an upgrade might be broken —
++                the running PID 1 could still depend on libraries which are not
++                available any more, thus keeping the filesystem busy, which
++                then cannot be re-mounted read-only.</para>
++
+                 <para>Immediately before executing the actual system
+                 halt/poweroff/reboot/kexec
+                 <filename>systemd-shutdown</filename> will run all
diff --git a/SOURCES/0092-Configurable-Timeouts-Restarts-default-values.patch b/SOURCES/0092-Configurable-Timeouts-Restarts-default-values.patch
deleted file mode 100644
index 6267d66..0000000
--- a/SOURCES/0092-Configurable-Timeouts-Restarts-default-values.patch
+++ /dev/null
@@ -1,293 +0,0 @@
-From b78b223c1f2cfb6bdeac4dc22748e7289c4537da Mon Sep 17 00:00:00 2001
-From: Oleksii Shevchuk <alxchk@gmail.com>
-Date: Mon, 4 Nov 2013 18:47:43 +0200
-Subject: [PATCH] Configurable Timeouts/Restarts default values
-
-https://bugs.freedesktop.org/show_bug.cgi?id=71132
-
-Patch adds DefaultTimeoutStartSec, DefaultTimeoutStopSec, DefaultRestartSec
-configuration options to manager configuration file.
----
- man/systemd-system.conf.xml | 24 +++++++++++++++++++++++-
- man/systemd.mount.xml       |  4 ++--
- man/systemd.service.xml     |  6 ++++--
- man/systemd.socket.xml      |  4 ++--
- man/systemd.swap.xml        |  4 ++--
- src/core/device.c           |  2 +-
- src/core/main.c             |  9 +++++++++
- src/core/manager.h          |  3 +++
- src/core/mount.c            |  2 +-
- src/core/scope.c            |  2 +-
- src/core/service.c          |  6 +++---
- src/core/socket.c           |  2 +-
- src/core/swap.c             |  2 +-
- src/core/system.conf        |  3 +++
- src/core/user.conf          |  3 +++
- 15 files changed, 59 insertions(+), 17 deletions(-)
-
-diff --git a/man/systemd-system.conf.xml b/man/systemd-system.conf.xml
-index e8cf8a9..c1f2648 100644
---- a/man/systemd-system.conf.xml
-+++ b/man/systemd-system.conf.xml
-@@ -61,7 +61,6 @@
-                 otherwise <filename>user.conf</filename>. These
-                 configuration files contain a few settings controlling
-                 basic manager operations.</para>
--
-         </refsect1>
- 
-         <refsect1>
-@@ -95,6 +94,29 @@
-                         </varlistentry>
- 
-                         <varlistentry>
-+                                <term><varname>DefaultTimeoutStartSec=</varname></term>
-+                                <term><varname>DefaultTimeoutStopSec=</varname></term>
-+                                <term><varname>DefaultRestartSec=</varname></term>
-+
-+                                <listitem><para>Configures the default
-+                                time-outs for starting and stopping of
-+                                units, as well as the default time to
-+                                sleep between automatic restarts of a
-+                                units, as configured per-unit in
-+                                <varname>TimeoutStartSec=</varname>,
-+                                <varname>TimeoutStopSec=</varname> and
-+                                <varname>RestartSec=</varname> (for
-+                                service units see
-+                                <citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry>
-+                                for details on the per-unit
-+                                settings). For non-service units
-+                                <varname>DefaultTimeoutStartSec=</varname>
-+                                sets the default
-+                                <varname>TimeoutSec=</varname> value.
-+                                </para></listitem>
-+                        </varlistentry>
-+
-+                        <varlistentry>
-                                 <term><varname>CPUAffinity=</varname></term>
- 
-                                 <listitem><para>Configures the initial
-diff --git a/man/systemd.mount.xml b/man/systemd.mount.xml
-index 48af1ca..71a5736 100644
---- a/man/systemd.mount.xml
-+++ b/man/systemd.mount.xml
-@@ -260,8 +260,8 @@
-                                 Takes a unit-less value in seconds, or
-                                 a time span value such as "5min
-                                 20s". Pass 0 to disable the timeout
--                                logic. Defaults to
--                                90s.</para></listitem>
-+                                logic. Default value is setted up in manager configuration
-+                                file via <term><varname>DefaultTimeoutStart=</varname></term>.</para></listitem>
-                         </varlistentry>
-                 </variablelist>
- 
-diff --git a/man/systemd.service.xml b/man/systemd.service.xml
-index 45f96fa..1e94f82 100644
---- a/man/systemd.service.xml
-+++ b/man/systemd.service.xml
-@@ -523,7 +523,8 @@
-                                 Takes a unit-less value in seconds, or a
-                                 time span value such as "5min
-                                 20s". Pass 0 to disable the timeout
--                                logic. Defaults to 90s, except when
-+                                logic. Defaults to <varname>TimeoutStartSec=</varname> in
-+                                manager configuration file, except when
-                                 <varname>Type=oneshot</varname> is
-                                 used in which case the timeout
-                                 is disabled by default.
-@@ -544,7 +545,8 @@
-                                 Takes a unit-less value in seconds, or a
-                                 time span value such as "5min
-                                 20s". Pass 0 to disable the timeout
--                                logic. Defaults to 90s.
-+                                logic. Defaults to <varname>TimeoutStartSec=</varname> in
-+                                manager configuration file.
-                                 </para></listitem>
-                         </varlistentry>
- 
-diff --git a/man/systemd.socket.xml b/man/systemd.socket.xml
-index 8c88d9f..1c78562 100644
---- a/man/systemd.socket.xml
-+++ b/man/systemd.socket.xml
-@@ -679,8 +679,8 @@
-                                 Takes a unit-less value in seconds, or
-                                 a time span value such as "5min
-                                 20s". Pass 0 to disable the timeout
--                                logic. Defaults to
--                                90s.</para></listitem>
-+                                logic. Defaults to <varname>TimeoutStartSec=</varname> in
-+                                manager configuration file.</para></listitem>
-                         </varlistentry>
- 
-                         <varlistentry>
-diff --git a/man/systemd.swap.xml b/man/systemd.swap.xml
-index 813ae6c..13f6c84 100644
---- a/man/systemd.swap.xml
-+++ b/man/systemd.swap.xml
-@@ -186,8 +186,8 @@
-                                 Takes a unit-less value in seconds, or
-                                 a time span value such as "5min
-                                 20s". Pass 0 to disable the timeout
--                                logic. Defaults to
--                                90s.</para></listitem>
-+                                logic. Defaults to <varname>TimeoutStartSec=</varname> in
-+                                manager configuration file.</para></listitem>
-                         </varlistentry>
-                 </variablelist>
- 
-diff --git a/src/core/device.c b/src/core/device.c
-index 9fca82a..5397bd6 100644
---- a/src/core/device.c
-+++ b/src/core/device.c
-@@ -70,7 +70,7 @@ static void device_init(Unit *u) {
-          * indefinitely for plugged in devices, something which cannot
-          * happen for the other units since their operations time out
-          * anyway. */
--        UNIT(d)->job_timeout = DEFAULT_TIMEOUT_USEC;
-+        UNIT(d)->job_timeout = u->manager->default_timeout_start_usec;
- 
-         UNIT(d)->ignore_on_isolate = true;
-         UNIT(d)->ignore_on_snapshot = true;
-diff --git a/src/core/main.c b/src/core/main.c
-index 662d16d..b72d7f4 100644
---- a/src/core/main.c
-+++ b/src/core/main.c
-@@ -90,6 +90,9 @@ static bool arg_switched_root = false;
- static char ***arg_join_controllers = NULL;
- static ExecOutput arg_default_std_output = EXEC_OUTPUT_JOURNAL;
- static ExecOutput arg_default_std_error = EXEC_OUTPUT_INHERIT;
-+static usec_t arg_default_restart_usec = DEFAULT_RESTART_USEC;
-+static usec_t arg_default_timeout_start_usec = DEFAULT_TIMEOUT_USEC;
-+static usec_t arg_default_timeout_stop_usec = DEFAULT_TIMEOUT_USEC;
- static usec_t arg_runtime_watchdog = 0;
- static usec_t arg_shutdown_watchdog = 10 * USEC_PER_MINUTE;
- static char **arg_default_environment = NULL;
-@@ -636,6 +639,9 @@ static int parse_config_file(void) {
-                 { "Manager", "CPUAffinity",           config_parse_cpu_affinity2, 0, NULL                    },
-                 { "Manager", "DefaultStandardOutput", config_parse_output,       0, &arg_default_std_output  },
-                 { "Manager", "DefaultStandardError",  config_parse_output,       0, &arg_default_std_error   },
-+                { "Manager", "DefaultTimeoutStartSec", config_parse_sec,         0, &arg_default_timeout_start_usec },
-+                { "Manager", "DefaultTimeoutStopSec", config_parse_sec,          0, &arg_default_timeout_stop_usec  },
-+                { "Manager", "DefaultRestartSec",     config_parse_sec,          0, &arg_default_restart_usec  },
-                 { "Manager", "JoinControllers",       config_parse_join_controllers, 0, &arg_join_controllers },
-                 { "Manager", "RuntimeWatchdogSec",    config_parse_sec,          0, &arg_runtime_watchdog    },
-                 { "Manager", "ShutdownWatchdogSec",   config_parse_sec,          0, &arg_shutdown_watchdog   },
-@@ -1542,6 +1548,9 @@ int main(int argc, char *argv[]) {
-         m->confirm_spawn = arg_confirm_spawn;
-         m->default_std_output = arg_default_std_output;
-         m->default_std_error = arg_default_std_error;
-+        m->default_restart_usec = arg_default_restart_usec;
-+        m->default_timeout_start_usec = arg_default_timeout_start_usec;
-+        m->default_timeout_stop_usec = arg_default_timeout_stop_usec;
-         m->runtime_watchdog = arg_runtime_watchdog;
-         m->shutdown_watchdog = arg_shutdown_watchdog;
-         m->userspace_timestamp = userspace_timestamp;
-diff --git a/src/core/manager.h b/src/core/manager.h
-index a3049b5..e74c609 100644
---- a/src/core/manager.h
-+++ b/src/core/manager.h
-@@ -230,6 +230,9 @@ struct Manager {
- 
-         ExecOutput default_std_output, default_std_error;
- 
-+        usec_t default_restart_usec, default_timeout_start_usec,
-+                default_timeout_stop_usec;
-+
-         struct rlimit *rlimit[RLIMIT_NLIMITS];
- 
-         /* non-zero if we are reloading or reexecuting, */
-diff --git a/src/core/mount.c b/src/core/mount.c
-index 70cd372..c0445a6 100644
---- a/src/core/mount.c
-+++ b/src/core/mount.c
-@@ -131,7 +131,7 @@ static void mount_init(Unit *u) {
-         assert(u);
-         assert(u->load_state == UNIT_STUB);
- 
--        m->timeout_usec = DEFAULT_TIMEOUT_USEC;
-+        m->timeout_usec = u->manager->default_timeout_start_usec;
-         m->directory_mode = 0755;
- 
-         exec_context_init(&m->exec_context);
-diff --git a/src/core/scope.c b/src/core/scope.c
-index 50e5dba..41da3b9 100644
---- a/src/core/scope.c
-+++ b/src/core/scope.c
-@@ -46,7 +46,7 @@ static void scope_init(Unit *u) {
-         assert(u);
-         assert(u->load_state == UNIT_STUB);
- 
--        s->timeout_stop_usec = DEFAULT_TIMEOUT_USEC;
-+        s->timeout_stop_usec = u->manager->default_timeout_stop_usec;
- 
-         watch_init(&s->timer_watch);
- 
-diff --git a/src/core/service.c b/src/core/service.c
-index cfc8ba6..ea47f8c 100644
---- a/src/core/service.c
-+++ b/src/core/service.c
-@@ -124,9 +124,9 @@ static void service_init(Unit *u) {
-         assert(u);
-         assert(u->load_state == UNIT_STUB);
- 
--        s->timeout_start_usec = DEFAULT_TIMEOUT_USEC;
--        s->timeout_stop_usec = DEFAULT_TIMEOUT_USEC;
--        s->restart_usec = DEFAULT_RESTART_USEC;
-+        s->timeout_start_usec = u->manager->default_timeout_start_usec;
-+        s->timeout_stop_usec = u->manager->default_timeout_stop_usec;
-+        s->restart_usec = u->manager->default_restart_usec;
-         s->type = _SERVICE_TYPE_INVALID;
- 
-         watch_init(&s->watchdog_watch);
-diff --git a/src/core/socket.c b/src/core/socket.c
-index 778f8c8..247f2fb 100644
---- a/src/core/socket.c
-+++ b/src/core/socket.c
-@@ -73,7 +73,7 @@ static void socket_init(Unit *u) {
-         assert(u->load_state == UNIT_STUB);
- 
-         s->backlog = SOMAXCONN;
--        s->timeout_usec = DEFAULT_TIMEOUT_USEC;
-+        s->timeout_usec = u->manager->default_timeout_start_usec;
-         s->directory_mode = 0755;
-         s->socket_mode = 0666;
- 
-diff --git a/src/core/swap.c b/src/core/swap.c
-index 6f86a86..392cb17 100644
---- a/src/core/swap.c
-+++ b/src/core/swap.c
-@@ -86,7 +86,7 @@ static void swap_init(Unit *u) {
-         assert(s);
-         assert(UNIT(s)->load_state == UNIT_STUB);
- 
--        s->timeout_usec = DEFAULT_TIMEOUT_USEC;
-+        s->timeout_usec = u->manager->default_timeout_start_usec;
- 
-         exec_context_init(&s->exec_context);
-         s->exec_context.std_output = u->manager->default_std_output;
-diff --git a/src/core/system.conf b/src/core/system.conf
-index 7b03c87..3c6cc03 100644
---- a/src/core/system.conf
-+++ b/src/core/system.conf
-@@ -24,6 +24,9 @@
- #ShutdownWatchdogSec=10min
- #CapabilityBoundingSet=
- #TimerSlackNSec=
-+#DefaultTimeoutStartSec=90s
-+#DefaultTimeoutStopSec=90s
-+#DefaultRestartSec=100ms
- #DefaultEnvironment=
- #DefaultLimitCPU=
- #DefaultLimitFSIZE=
-diff --git a/src/core/user.conf b/src/core/user.conf
-index 4a0129a..b030701 100644
---- a/src/core/user.conf
-+++ b/src/core/user.conf
-@@ -14,3 +14,6 @@
- #LogLocation=no
- #DefaultStandardOutput=inherit
- #DefaultStandardError=inherit
-+#DefaultTimeoutStartSec=90s
-+#DefaultTimeoutStopSec=90s
-+#DefaultRestartSec=100ms
diff --git a/SOURCES/0092-systemd-python-convert-keyword-value-to-string.patch b/SOURCES/0092-systemd-python-convert-keyword-value-to-string.patch
new file mode 100644
index 0000000..ab97a86
--- /dev/null
+++ b/SOURCES/0092-systemd-python-convert-keyword-value-to-string.patch
@@ -0,0 +1,27 @@
+From f9c5cdfe9fe4d3ac8b075ed55d58f79cc067cdae Mon Sep 17 00:00:00 2001
+From: Richard Marko <rmarko@fedoraproject.org>
+Date: Tue, 5 Nov 2013 15:41:20 +0100
+Subject: [PATCH] systemd-python: convert keyword value to string
+
+Allows using journal.send('msg', PRIORITY=journal.LOG_CRIT)
+
+Before this commit this results in
+TypeError: cannot concatenate 'str' and 'int' objects
+and requires passing PRIORITY value as string to work.
+---
+ src/python-systemd/journal.py | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/src/python-systemd/journal.py b/src/python-systemd/journal.py
+index d0bcd24..9c7e004 100644
+--- a/src/python-systemd/journal.py
++++ b/src/python-systemd/journal.py
+@@ -352,6 +352,8 @@ def get_catalog(mid):
+ def _make_line(field, value):
+         if isinstance(value, bytes):
+                 return field.encode('utf-8') + b'=' + value
++        elif isinstance(value, int):
++                return field + '=' + str(value)
+         else:
+                 return field + '=' + value
+ 
diff --git a/SOURCES/0093-Make-hibernation-test-work-for-swap-files.patch b/SOURCES/0093-Make-hibernation-test-work-for-swap-files.patch
new file mode 100644
index 0000000..08a6534
--- /dev/null
+++ b/SOURCES/0093-Make-hibernation-test-work-for-swap-files.patch
@@ -0,0 +1,25 @@
+From 4baeb24c8002e602d9eca1ba240aa2e166de4ae6 Mon Sep 17 00:00:00 2001
+From: Jan Janssen <medhefgo@web.de>
+Date: Thu, 31 Oct 2013 17:22:03 +0100
+Subject: [PATCH] Make hibernation test work for swap files
+
+Suspend to disk works for swap files too (even if it is located
+on an ecrypted file system):
+https://www.kernel.org/doc/Documentation/power/swsusp-and-swap-files.txt
+---
+ src/shared/sleep-config.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/shared/sleep-config.c b/src/shared/sleep-config.c
+index d068bfc..2bb0493 100644
+--- a/src/shared/sleep-config.c
++++ b/src/shared/sleep-config.c
+@@ -206,7 +206,7 @@ static int hibernation_partition_size(size_t *size, size_t *used) {
+                 if (!d)
+                         return -ENOMEM;
+ 
+-                if (!streq(type, "partition")) {
++                if (!streq(type, "partition") && !streq(type, "file")) {
+                         log_debug("Partition %s has type %s, ignoring.", d, type);
+                         continue;
+                 }
diff --git a/SOURCES/0093-manager-configurable-StartLimit-default-values.patch b/SOURCES/0093-manager-configurable-StartLimit-default-values.patch
deleted file mode 100644
index c564dda..0000000
--- a/SOURCES/0093-manager-configurable-StartLimit-default-values.patch
+++ /dev/null
@@ -1,161 +0,0 @@
-From 4490d065a987d464fed86b2d48d607766c192bfe Mon Sep 17 00:00:00 2001
-From: Lukas Nykryn <lnykryn@redhat.com>
-Date: Fri, 8 Nov 2013 16:01:22 +0100
-Subject: [PATCH] manager: configurable StartLimit default values
-
-https://bugzilla.redhat.com/show_bug.cgi?id=821723
----
- man/systemd-system.conf.xml | 13 +++++++++++++
- man/systemd.service.xml     |  9 ++++++---
- src/core/main.c             |  6 ++++++
- src/core/manager.h          |  3 +++
- src/core/service.c          |  4 +++-
- src/core/system.conf        |  2 ++
- src/core/user.conf          |  2 ++
- src/shared/def.h            |  3 +++
- 8 files changed, 38 insertions(+), 4 deletions(-)
-
-diff --git a/man/systemd-system.conf.xml b/man/systemd-system.conf.xml
-index c1f2648..9a1a99f 100644
---- a/man/systemd-system.conf.xml
-+++ b/man/systemd-system.conf.xml
-@@ -115,6 +115,19 @@
-                                 <varname>TimeoutSec=</varname> value.
-                                 </para></listitem>
-                         </varlistentry>
-+                        <varlistentry>
-+                                <term><varname>DefaultStartLimitInterval=</varname></term>
-+                                <term><varname>DefaultStartLimitBurst=</varname></term>
-+
-+                                <listitem><para>Configure the default start rate
-+                                limiting, as configured per-service by
-+                                <varname>StartLimitInterval=</varname> and
-+                                <varname>StartLimitBurst=</varname>. See
-+                                <citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry>
-+                                for details on the per-service
-+                                settings).
-+                                </para></listitem>
-+                        </varlistentry>
- 
-                         <varlistentry>
-                                 <term><varname>CPUAffinity=</varname></term>
-diff --git a/man/systemd.service.xml b/man/systemd.service.xml
-index 1e94f82..7200fb9 100644
---- a/man/systemd.service.xml
-+++ b/man/systemd.service.xml
-@@ -862,12 +862,15 @@
-                                 these two options, this rate limiting
-                                 may be modified. Use
-                                 <varname>StartLimitInterval=</varname>
--                                to configure the checking interval
--                                (defaults to 10s, set to 0 to disable
-+                                to configure the checking interval (defaults to
-+                                <varname>DefaultStartLimitInterval=</varname> in
-+                                manager configuration file, set to 0 to disable
-                                 any kind of rate limiting). Use
-                                 <varname>StartLimitBurst=</varname> to
-                                 configure how many starts per interval
--                                are allowed (defaults to 5). These
-+                                are allowed (defaults to
-+                                <varname>DefaultStartLimitBurst=</varname> in
-+                                manager configuration file). These
-                                 configuration options are particularly
-                                 useful in conjunction with
-                                 <varname>Restart=</varname>, however
-diff --git a/src/core/main.c b/src/core/main.c
-index b72d7f4..4911768 100644
---- a/src/core/main.c
-+++ b/src/core/main.c
-@@ -93,6 +93,8 @@ static ExecOutput arg_default_std_error = EXEC_OUTPUT_INHERIT;
- static usec_t arg_default_restart_usec = DEFAULT_RESTART_USEC;
- static usec_t arg_default_timeout_start_usec = DEFAULT_TIMEOUT_USEC;
- static usec_t arg_default_timeout_stop_usec = DEFAULT_TIMEOUT_USEC;
-+static usec_t arg_default_start_limit_interval = DEFAULT_START_LIMIT_INTERVAL;
-+static unsigned arg_default_start_limit_burst = DEFAULT_START_LIMIT_BURST;
- static usec_t arg_runtime_watchdog = 0;
- static usec_t arg_shutdown_watchdog = 10 * USEC_PER_MINUTE;
- static char **arg_default_environment = NULL;
-@@ -642,6 +644,8 @@ static int parse_config_file(void) {
-                 { "Manager", "DefaultTimeoutStartSec", config_parse_sec,         0, &arg_default_timeout_start_usec },
-                 { "Manager", "DefaultTimeoutStopSec", config_parse_sec,          0, &arg_default_timeout_stop_usec  },
-                 { "Manager", "DefaultRestartSec",     config_parse_sec,          0, &arg_default_restart_usec  },
-+                { "Manager", "DefaultStartLimitInterval", config_parse_sec,      0, &arg_default_start_limit_interval },
-+                { "Manager", "DefaultStartLimitBurst", config_parse_unsigned,    0, &arg_default_start_limit_burst },
-                 { "Manager", "JoinControllers",       config_parse_join_controllers, 0, &arg_join_controllers },
-                 { "Manager", "RuntimeWatchdogSec",    config_parse_sec,          0, &arg_runtime_watchdog    },
-                 { "Manager", "ShutdownWatchdogSec",   config_parse_sec,          0, &arg_shutdown_watchdog   },
-@@ -1551,6 +1555,8 @@ int main(int argc, char *argv[]) {
-         m->default_restart_usec = arg_default_restart_usec;
-         m->default_timeout_start_usec = arg_default_timeout_start_usec;
-         m->default_timeout_stop_usec = arg_default_timeout_stop_usec;
-+        m->default_start_limit_interval = arg_default_start_limit_interval;
-+        m->default_start_limit_burst = arg_default_start_limit_burst;
-         m->runtime_watchdog = arg_runtime_watchdog;
-         m->shutdown_watchdog = arg_shutdown_watchdog;
-         m->userspace_timestamp = userspace_timestamp;
-diff --git a/src/core/manager.h b/src/core/manager.h
-index e74c609..ee42c5e 100644
---- a/src/core/manager.h
-+++ b/src/core/manager.h
-@@ -233,6 +233,9 @@ struct Manager {
-         usec_t default_restart_usec, default_timeout_start_usec,
-                 default_timeout_stop_usec;
- 
-+        usec_t default_start_limit_interval;
-+        unsigned default_start_limit_burst;
-+
-         struct rlimit *rlimit[RLIMIT_NLIMITS];
- 
-         /* non-zero if we are reloading or reexecuting, */
-diff --git a/src/core/service.c b/src/core/service.c
-index ea47f8c..cefb253 100644
---- a/src/core/service.c
-+++ b/src/core/service.c
-@@ -143,7 +143,9 @@ static void service_init(Unit *u) {
-         kill_context_init(&s->kill_context);
-         cgroup_context_init(&s->cgroup_context);
- 
--        RATELIMIT_INIT(s->start_limit, 10*USEC_PER_SEC, 5);
-+        RATELIMIT_INIT(s->start_limit,
-+                       u->manager->default_start_limit_interval,
-+                       u->manager->default_start_limit_burst);
- 
-         s->control_command_id = _SERVICE_EXEC_COMMAND_INVALID;
- }
-diff --git a/src/core/system.conf b/src/core/system.conf
-index 3c6cc03..38bbca5 100644
---- a/src/core/system.conf
-+++ b/src/core/system.conf
-@@ -27,6 +27,8 @@
- #DefaultTimeoutStartSec=90s
- #DefaultTimeoutStopSec=90s
- #DefaultRestartSec=100ms
-+#DefaultStartLimitInterval=10s
-+#DefaultStartLimitBurst=5
- #DefaultEnvironment=
- #DefaultLimitCPU=
- #DefaultLimitFSIZE=
-diff --git a/src/core/user.conf b/src/core/user.conf
-index b030701..923ca66 100644
---- a/src/core/user.conf
-+++ b/src/core/user.conf
-@@ -17,3 +17,5 @@
- #DefaultTimeoutStartSec=90s
- #DefaultTimeoutStopSec=90s
- #DefaultRestartSec=100ms
-+#DefaultStartLimitInterval=10s
-+#DefaultStartLimitBurst=5
-diff --git a/src/shared/def.h b/src/shared/def.h
-index edd0bcf..e4ef735 100644
---- a/src/shared/def.h
-+++ b/src/shared/def.h
-@@ -27,6 +27,9 @@
- #define DEFAULT_RESTART_USEC (100*USEC_PER_MSEC)
- #define DEFAULT_CONFIRM_USEC (30*USEC_PER_SEC)
- 
-+#define DEFAULT_START_LIMIT_INTERVAL (10*USEC_PER_SEC)
-+#define DEFAULT_START_LIMIT_BURST 5
-+
- #define DEFAULT_EXIT_USEC (5*USEC_PER_MINUTE)
- 
- #define SYSTEMD_CGROUP_CONTROLLER "name=systemd"
diff --git a/SOURCES/0094-man-add-docs-for-sd_is_special-and-some-man-page-sym.patch b/SOURCES/0094-man-add-docs-for-sd_is_special-and-some-man-page-sym.patch
new file mode 100644
index 0000000..2b774d0
--- /dev/null
+++ b/SOURCES/0094-man-add-docs-for-sd_is_special-and-some-man-page-sym.patch
@@ -0,0 +1,134 @@
+From 5b154beab0557c51f18012e7d01d29d48d1910f3 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart@poettering.net>
+Date: Thu, 7 Nov 2013 17:51:09 +0100
+Subject: [PATCH] man: add docs for sd_is_special() and some man page symlinks
+
+Conflicts:
+	Makefile.am
+---
+ Makefile-man.am            | 15 +++++++++++++++
+ man/sd_is_fifo.xml         | 17 +++++++++++++++++
+ man/sd_seat_get_active.xml |  2 ++
+ 3 files changed, 34 insertions(+)
+
+diff --git a/Makefile-man.am b/Makefile-man.am
+index c8a4342..b8c8acc 100644
+--- a/Makefile-man.am
++++ b/Makefile-man.am
+@@ -138,6 +138,7 @@ MANPAGES_ALIAS += \
+ 	man/sd_is_socket.3 \
+ 	man/sd_is_socket_inet.3 \
+ 	man/sd_is_socket_unix.3 \
++	man/sd_is_special.3 \
+ 	man/sd_journal.3 \
+ 	man/sd_journal_add_conjunction.3 \
+ 	man/sd_journal_add_disjunction.3 \
+@@ -238,6 +239,7 @@ man/sd_is_mq.3: man/sd_is_fifo.3
+ man/sd_is_socket.3: man/sd_is_fifo.3
+ man/sd_is_socket_inet.3: man/sd_is_fifo.3
+ man/sd_is_socket_unix.3: man/sd_is_fifo.3
++man/sd_is_special.3: man/sd_is_fifo.3
+ man/sd_journal.3: man/sd_journal_open.3
+ man/sd_journal_add_conjunction.3: man/sd_journal_add_match.3
+ man/sd_journal_add_disjunction.3: man/sd_journal_add_match.3
+@@ -410,6 +412,9 @@ man/sd_is_socket_inet.html: man/sd_is_fifo.html
+ man/sd_is_socket_unix.html: man/sd_is_fifo.html
+ 	$(html-alias)
+ 
++man/sd_is_special.html: man/sd_is_fifo.html
++	$(html-alias)
++
+ man/sd_journal.html: man/sd_journal_open.html
+ 	$(html-alias)
+ 
+@@ -844,7 +849,9 @@ MANPAGES_ALIAS += \
+ 	man/sd_pid_get_slice.3 \
+ 	man/sd_pid_get_unit.3 \
+ 	man/sd_pid_get_user_unit.3 \
++	man/sd_seat_can_graphical.3 \
+ 	man/sd_seat_can_multi_session.3 \
++	man/sd_seat_can_tty.3 \
+ 	man/sd_seat_get_sessions.3 \
+ 	man/sd_session_get_class.3 \
+ 	man/sd_session_get_display.3 \
+@@ -873,7 +880,9 @@ man/sd_pid_get_owner_uid.3: man/sd_pid_get_session.3
+ man/sd_pid_get_slice.3: man/sd_pid_get_session.3
+ man/sd_pid_get_unit.3: man/sd_pid_get_session.3
+ man/sd_pid_get_user_unit.3: man/sd_pid_get_session.3
++man/sd_seat_can_graphical.3: man/sd_seat_get_active.3
+ man/sd_seat_can_multi_session.3: man/sd_seat_get_active.3
++man/sd_seat_can_tty.3: man/sd_seat_get_active.3
+ man/sd_seat_get_sessions.3: man/sd_seat_get_active.3
+ man/sd_session_get_class.3: man/sd_session_is_active.3
+ man/sd_session_get_display.3: man/sd_session_is_active.3
+@@ -930,9 +939,15 @@ man/sd_pid_get_unit.html: man/sd_pid_get_session.html
+ man/sd_pid_get_user_unit.html: man/sd_pid_get_session.html
+ 	$(html-alias)
+ 
++man/sd_seat_can_graphical.html: man/sd_seat_get_active.html
++	$(html-alias)
++
+ man/sd_seat_can_multi_session.html: man/sd_seat_get_active.html
+ 	$(html-alias)
+ 
++man/sd_seat_can_tty.html: man/sd_seat_get_active.html
++	$(html-alias)
++
+ man/sd_seat_get_sessions.html: man/sd_seat_get_active.html
+ 	$(html-alias)
+ 
+diff --git a/man/sd_is_fifo.xml b/man/sd_is_fifo.xml
+index 2bc860c..4d9cd79 100644
+--- a/man/sd_is_fifo.xml
++++ b/man/sd_is_fifo.xml
+@@ -48,6 +48,7 @@
+                 <refname>sd_is_socket_inet</refname>
+                 <refname>sd_is_socket_unix</refname>
+                 <refname>sd_is_mq</refname>
++                <refname>sd_is_special</refname>
+                 <refpurpose>Check the type of a file descriptor</refpurpose>
+         </refnamediv>
+ 
+@@ -93,6 +94,12 @@
+                                 <paramdef>const char *<parameter>path</parameter></paramdef>
+                         </funcprototype>
+ 
++                        <funcprototype>
++                                <funcdef>int <function>sd_is_special</function></funcdef>
++                                <paramdef>int <parameter>fd</parameter></paramdef>
++                                <paramdef>const char *<parameter>path</parameter></paramdef>
++                        </funcprototype>
++
+                 </funcsynopsis>
+         </refsynopsisdiv>
+ 
+@@ -153,6 +160,16 @@
+                 <parameter>path</parameter> parameter is not
+                 <constant>NULL</constant>, it is checked whether the
+                 message queue is bound to the specified name.</para>
++
++                <para><function>sd_is_special()</function> may be
++                called to check whether the specified file descriptor
++                refers to a special file. If the
++                <parameter>path</parameter> parameter is not
++                <constant>NULL</constant>, it is checked whether file
++                descriptor is bound to the specified file
++                name. Special files in this context are character
++                device nodes and files in <filename>/proc</filename>
++                or <filename>/sys</filename>.</para>
+         </refsect1>
+ 
+         <refsect1>
+diff --git a/man/sd_seat_get_active.xml b/man/sd_seat_get_active.xml
+index 1610d3e..cd87696 100644
+--- a/man/sd_seat_get_active.xml
++++ b/man/sd_seat_get_active.xml
+@@ -46,6 +46,8 @@
+                 <refname>sd_seat_get_active</refname>
+                 <refname>sd_seat_get_sessions</refname>
+                 <refname>sd_seat_can_multi_session</refname>
++                <refname>sd_seat_can_tty</refname>
++                <refname>sd_seat_can_graphical</refname>
+                 <refpurpose>Determine state of a specific seat</refpurpose>
+         </refnamediv>
+ 
diff --git a/SOURCES/0094-sysctl-bring-back-etc-sysctl.conf.patch b/SOURCES/0094-sysctl-bring-back-etc-sysctl.conf.patch
deleted file mode 100644
index 9b8e129..0000000
--- a/SOURCES/0094-sysctl-bring-back-etc-sysctl.conf.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-From c5e66155b5d6bb57aa1c93bdab988e61c3e41bbe Mon Sep 17 00:00:00 2001
-From: Harald Hoyer <harald@redhat.com>
-Date: Mon, 11 Nov 2013 11:17:57 +0100
-Subject: [PATCH] sysctl: bring back /etc/sysctl.conf
-
-Read /etc/sysctl.conf as the last file, overwriting everything.
----
- src/sysctl/sysctl.c | 4 ++++
- 1 file changed, 4 insertions(+)
-
-diff --git a/src/sysctl/sysctl.c b/src/sysctl/sysctl.c
-index b5670db..878c923 100644
---- a/src/sysctl/sysctl.c
-+++ b/src/sysctl/sysctl.c
-@@ -311,6 +311,10 @@ int main(int argc, char *argv[]) {
-                         if (k < 0 && r == 0)
-                                 r = k;
-                 }
-+
-+                k = parse_file(sysctl_options, "/etc/sysctl.conf", true);
-+                if (k < 0 && r == 0)
-+                        r = k;
-         }
- 
-         k = apply_all(sysctl_options);
diff --git a/SOURCES/0095-systemctl-return-r-instead-of-always-returning-0.patch b/SOURCES/0095-systemctl-return-r-instead-of-always-returning-0.patch
new file mode 100644
index 0000000..53cec6a
--- /dev/null
+++ b/SOURCES/0095-systemctl-return-r-instead-of-always-returning-0.patch
@@ -0,0 +1,22 @@
+From 72002c70f780a73efc8357fe0249228e6d0a6924 Mon Sep 17 00:00:00 2001
+From: Michal Sekletar <msekleta@redhat.com>
+Date: Wed, 6 Nov 2013 11:18:02 +0100
+Subject: [PATCH] systemctl: return r instead of always returning 0
+
+---
+ src/systemctl/systemctl.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c
+index 36040db..1d68b38 100644
+--- a/src/systemctl/systemctl.c
++++ b/src/systemctl/systemctl.c
+@@ -1362,7 +1362,7 @@ static int list_jobs(DBusConnection *bus, char **args) {
+         }
+         free(jobs);
+ 
+-        return 0;
++        return r;
+ }
+ 
+ static int cancel_job(DBusConnection *bus, char **args) {
diff --git a/SOURCES/0095-tmpfiles-add-a-new-m-line-type-that-adjusts-user-gro.patch b/SOURCES/0095-tmpfiles-add-a-new-m-line-type-that-adjusts-user-gro.patch
deleted file mode 100644
index a65c0b5..0000000
--- a/SOURCES/0095-tmpfiles-add-a-new-m-line-type-that-adjusts-user-gro.patch
+++ /dev/null
@@ -1,158 +0,0 @@
-From cb869b77802b536aab1716714cdd5478d891d3f4 Mon Sep 17 00:00:00 2001
-From: Lennart Poettering <lennart@poettering.net>
-Date: Tue, 17 Sep 2013 16:33:30 -0500
-Subject: [PATCH] tmpfiles: add a new "m" line type that adjusts
- user/group/mode of a file if it exists
-
----
- man/systemd-tmpfiles.xml |  2 +-
- man/tmpfiles.d.xml       | 11 +++++++++++
- src/tmpfiles/tmpfiles.c  | 39 +++++++++++++++++++++++++++++++--------
- 3 files changed, 43 insertions(+), 9 deletions(-)
-
-diff --git a/man/systemd-tmpfiles.xml b/man/systemd-tmpfiles.xml
-index 281ab3c..ba727e1 100644
---- a/man/systemd-tmpfiles.xml
-+++ b/man/systemd-tmpfiles.xml
-@@ -165,7 +165,7 @@
-                 <title>See Also</title>
-                 <para>
-                         <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
--                        <citerefentry><refentrytitle>tmpfiles.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
-+                        <citerefentry><refentrytitle>tmpfiles.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>
-                 </para>
-         </refsect1>
- 
-diff --git a/man/tmpfiles.d.xml b/man/tmpfiles.d.xml
-index cdc87c9..98e3690 100644
---- a/man/tmpfiles.d.xml
-+++ b/man/tmpfiles.d.xml
-@@ -152,6 +152,17 @@ L    /tmp/foobar -    -    -    -   /dev/null</programlisting>
-                                 </varlistentry>
- 
-                                 <varlistentry>
-+                                        <term><varname>m</varname></term>
-+                                        <listitem><para>If the
-+                                        specified file path exists
-+                                        adjust its access mode, group
-+                                        and user to the specified
-+                                        values and reset the SELinux
-+                                        label. If it doesn't exist do
-+                                        nothing.</para></listitem>
-+                                </varlistentry>
-+
-+                                <varlistentry>
-                                         <term><varname>x</varname></term>
-                                         <listitem><para>Ignore a path
-                                         during cleaning. Use this type
-diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c
-index ea99920..49e6529 100644
---- a/src/tmpfiles/tmpfiles.c
-+++ b/src/tmpfiles/tmpfiles.c
-@@ -68,6 +68,7 @@ typedef enum ItemType {
-         CREATE_SYMLINK = 'L',
-         CREATE_CHAR_DEVICE = 'c',
-         CREATE_BLOCK_DEVICE = 'b',
-+        ADJUST_MODE = 'm',
- 
-         /* These ones take globs */
-         IGNORE_PATH = 'x',
-@@ -256,8 +257,8 @@ static int dir_cleanup(
-                 dev_t rootdev,
-                 bool mountpoint,
-                 int maxdepth,
--                bool keep_this_level)
--{
-+                bool keep_this_level) {
-+
-         struct dirent *dent;
-         struct timespec times[2];
-         bool deleted = false;
-@@ -431,12 +432,16 @@ finish:
-         return r;
- }
- 
--static int item_set_perms(Item *i, const char *path) {
-+static int item_set_perms_full(Item *i, const char *path, bool ignore_enoent) {
-+        int r;
-+
-         /* not using i->path directly because it may be a glob */
-         if (i->mode_set)
-                 if (chmod(path, i->mode) < 0) {
--                        log_error("chmod(%s) failed: %m", path);
--                        return -errno;
-+                        if (errno != ENOENT || !ignore_enoent) {
-+                                log_error("chmod(%s) failed: %m", path);
-+                                return -errno;
-+                        }
-                 }
- 
-         if (i->uid_set || i->gid_set)
-@@ -444,11 +449,18 @@ static int item_set_perms(Item *i, const char *path) {
-                           i->uid_set ? i->uid : (uid_t) -1,
-                           i->gid_set ? i->gid : (gid_t) -1) < 0) {
- 
--                        log_error("chown(%s) failed: %m", path);
--                        return -errno;
-+                        if (errno != ENOENT || !ignore_enoent) {
-+                                log_error("chown(%s) failed: %m", path);
-+                                return -errno;
-+                        }
-                 }
- 
--        return label_fix(path, false, false);
-+        r = label_fix(path, false, false);
-+        return r == -ENOENT && ignore_enoent ? 0 : r;
-+}
-+
-+static int item_set_perms(Item *i, const char *path) {
-+        return item_set_perms_full(i, path, false);
- }
- 
- static int write_one_file(Item *i, const char *path) {
-@@ -644,6 +656,7 @@ static int create_item(Item *i) {
-                 if (r < 0)
-                         return r;
-                 break;
-+
-         case WRITE_FILE:
-                 r = glob_item(i, write_one_file);
-                 if (r < 0)
-@@ -651,6 +664,13 @@ static int create_item(Item *i) {
- 
-                 break;
- 
-+        case ADJUST_MODE:
-+                r = item_set_perms_full(i, i->path, true);
-+                if (r < 0)
-+                        return r;
-+
-+                break;
-+
-         case TRUNCATE_DIRECTORY:
-         case CREATE_DIRECTORY:
- 
-@@ -821,6 +841,7 @@ static int remove_item_instance(Item *i, const char *instance) {
-         case RELABEL_PATH:
-         case RECURSIVE_RELABEL_PATH:
-         case WRITE_FILE:
-+        case ADJUST_MODE:
-                 break;
- 
-         case REMOVE_PATH:
-@@ -866,6 +887,7 @@ static int remove_item(Item *i) {
-         case RELABEL_PATH:
-         case RECURSIVE_RELABEL_PATH:
-         case WRITE_FILE:
-+        case ADJUST_MODE:
-                 break;
- 
-         case REMOVE_PATH:
-@@ -1093,6 +1115,7 @@ static int parse_line(const char *fname, unsigned line, const char *buffer) {
-         case RECURSIVE_REMOVE_PATH:
-         case RELABEL_PATH:
-         case RECURSIVE_RELABEL_PATH:
-+        case ADJUST_MODE:
-                 break;
- 
-         case CREATE_SYMLINK:
diff --git a/SOURCES/0096-journal-fix-minor-memory-leak.patch b/SOURCES/0096-journal-fix-minor-memory-leak.patch
new file mode 100644
index 0000000..4b99d8c
--- /dev/null
+++ b/SOURCES/0096-journal-fix-minor-memory-leak.patch
@@ -0,0 +1,22 @@
+From 9d2d041c768d1597cd556a322e4eb3d1d623f318 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart@poettering.net>
+Date: Fri, 8 Nov 2013 13:53:25 +0100
+Subject: [PATCH] journal: fix minor memory leak
+
+---
+ src/journal/sd-journal.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/journal/sd-journal.c b/src/journal/sd-journal.c
+index 7700d6c..9676f0f 100644
+--- a/src/journal/sd-journal.c
++++ b/src/journal/sd-journal.c
+@@ -1276,7 +1276,7 @@ static void check_network(sd_journal *j, int fd) {
+ static bool file_has_type_prefix(const char *prefix, const char *filename) {
+         const char *full, *tilded, *atted;
+ 
+-        full = strappend(prefix, ".journal");
++        full = strappenda(prefix, ".journal");
+         tilded = strappenda(full, "~");
+         atted = strappenda(prefix, "@");
+ 
diff --git a/SOURCES/0097-man-units-fix-installation-of-systemd-nspawn-.servic.patch b/SOURCES/0097-man-units-fix-installation-of-systemd-nspawn-.servic.patch
new file mode 100644
index 0000000..956462c
--- /dev/null
+++ b/SOURCES/0097-man-units-fix-installation-of-systemd-nspawn-.servic.patch
@@ -0,0 +1,57 @@
+From a3794196f13a2fd47d61517a304c15e162a6c06a Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Thu, 7 Nov 2013 23:57:19 -0500
+Subject: [PATCH] man,units: fix installation of systemd-nspawn@.service and
+ add example
+
+---
+ TODO                             |  1 +
+ man/systemd-nspawn.xml           | 12 ++++++++++++
+ units/systemd-nspawn@.service.in |  2 +-
+ 3 files changed, 14 insertions(+), 1 deletion(-)
+
+diff --git a/TODO b/TODO
+index 07269f4..ad4b733 100644
+--- a/TODO
++++ b/TODO
+@@ -493,6 +493,7 @@ Features:
+   - nspawn: maybe add a way to drop additional caps, in addition to add additional caps
+   - nspawn: maybe explicitly reset loginuid?
+   - nspawn: make it work for dwalsh and shared /usr containers -- tmpfs mounts as command line parameters, selinux exec context
++  - refuses to boot containers without /etc/machine-id (OK?), and with empty /etc/machine-id (not OK).
+ 
+ * cryptsetup:
+   - cryptsetup-generator: allow specification of passwords in crypttab itself
+diff --git a/man/systemd-nspawn.xml b/man/systemd-nspawn.xml
+index 7d450f9..ba9e516 100644
+--- a/man/systemd-nspawn.xml
++++ b/man/systemd-nspawn.xml
+@@ -428,6 +428,18 @@
+         </refsect1>
+ 
+         <refsect1>
++                <title>Example 4</title>
++
++                <programlisting># mv ~/arch-tree /var/lib/container/arch
++# systemctl enable systemd-nspawn@arch.service
++# systemctl start systemd-nspawn@arch.service</programlisting>
++
++                <para>This makes the Arch Linux container part of the
++                <filename>multi-user.target</filename> on the host.
++                </para>
++        </refsect1>
++
++        <refsect1>
+                 <title>Exit status</title>
+ 
+                 <para>The exit code of the program executed in the
+diff --git a/units/systemd-nspawn@.service.in b/units/systemd-nspawn@.service.in
+index eca62e3..8e00736 100644
+--- a/units/systemd-nspawn@.service.in
++++ b/units/systemd-nspawn@.service.in
+@@ -14,4 +14,4 @@ ExecStart=@bindir@/systemd-nspawn -bjD /var/lib/container/%i
+ Type=notify
+ 
+ [Install]
+-Also=multi-user.target
++WantedBy=multi-user.target
diff --git a/SOURCES/0098-systemd-fix-memory-leak-in-cgroup-code.patch b/SOURCES/0098-systemd-fix-memory-leak-in-cgroup-code.patch
new file mode 100644
index 0000000..069e194
--- /dev/null
+++ b/SOURCES/0098-systemd-fix-memory-leak-in-cgroup-code.patch
@@ -0,0 +1,65 @@
+From 19a5f184904952d20cf1a6ea81e6e295fe991765 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Fri, 8 Nov 2013 08:41:13 -0500
+Subject: [PATCH] systemd: fix memory leak in cgroup code
+
+If the unit already was in the hashmap, path would be leaked.
+---
+ src/core/cgroup.c | 24 +++++++++++++-----------
+ 1 file changed, 13 insertions(+), 11 deletions(-)
+
+diff --git a/src/core/cgroup.c b/src/core/cgroup.c
+index 8bf4d89..b60707c 100644
+--- a/src/core/cgroup.c
++++ b/src/core/cgroup.c
+@@ -376,23 +376,23 @@ static CGroupControllerMask unit_get_siblings_mask(Unit *u) {
+ }
+ 
+ static int unit_create_cgroups(Unit *u, CGroupControllerMask mask) {
+-        char *path = NULL;
++        _cleanup_free_ char *path;
+         int r;
+-        bool is_in_hash = false;
++        bool was_in_hash = false;
+ 
+         assert(u);
+ 
+         path = unit_default_cgroup_path(u);
+         if (!path)
+-                return -ENOMEM;
++                return log_oom();
+ 
+         r = hashmap_put(u->manager->cgroup_unit, path, u);
+         if (r == 0)
+-                is_in_hash = true;
+-
+-        if (r < 0) {
+-                log_error("cgroup %s exists already: %s", path, strerror(-r));
+-                free(path);
++                was_in_hash = true;
++        else if (r < 0) {
++                log_error(r == -EEXIST ?
++                          "cgroup %s exists already: %s" : "hashmap_put failed for %s: %s",
++                          path, strerror(-r));
+                 return r;
+         }
+ 
+@@ -405,13 +405,15 @@ static int unit_create_cgroups(Unit *u, CGroupControllerMask mask) {
+         if (u->cgroup_path) {
+                 r = cg_migrate_everywhere(u->manager->cgroup_supported, u->cgroup_path, path);
+                 if (r < 0)
+-                        log_error("Failed to migrate cgroup %s: %s", path, strerror(-r));
++                        log_error("Failed to migrate cgroup from %s to %s: %s",
++                                  u->cgroup_path, path, strerror(-r));
+         }
+ 
+-        if (!is_in_hash) {
+-                /* And remember the new data */
++        if (!was_in_hash) {
++                /* Remember the new data */
+                 free(u->cgroup_path);
+                 u->cgroup_path = path;
++                path = NULL;
+         }
+ 
+         u->cgroup_realized = true;
diff --git a/SOURCES/0099-button-don-t-exit-if-we-cannot-handle-a-button-press.patch b/SOURCES/0099-button-don-t-exit-if-we-cannot-handle-a-button-press.patch
new file mode 100644
index 0000000..3a1167c
--- /dev/null
+++ b/SOURCES/0099-button-don-t-exit-if-we-cannot-handle-a-button-press.patch
@@ -0,0 +1,22 @@
+From 47be95beb25c23acbd7a47fa226a5523eb4a6e35 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart@poettering.net>
+Date: Sun, 10 Nov 2013 23:05:08 +0100
+Subject: [PATCH] button: don't exit if we cannot handle a button press
+
+---
+ src/login/logind-button.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/login/logind-button.c b/src/login/logind-button.c
+index ea45c28..4f456d2 100644
+--- a/src/login/logind-button.c
++++ b/src/login/logind-button.c
+@@ -172,7 +172,7 @@ static int button_handle(
+                  * execute another one until the lid is opened/closed again */
+                 b->lid_close_queued = false;
+ 
+-        return r;
++        return 0;
+ }
+ 
+ int button_process(Button *b) {
diff --git a/SOURCES/0100-timer-properly-format-relative-timestamps-in-the-fut.patch b/SOURCES/0100-timer-properly-format-relative-timestamps-in-the-fut.patch
new file mode 100644
index 0000000..8d9b3a7
--- /dev/null
+++ b/SOURCES/0100-timer-properly-format-relative-timestamps-in-the-fut.patch
@@ -0,0 +1,120 @@
+From dc7bf475eda82d02b5a0f243fee6741fab56729c Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart@poettering.net>
+Date: Mon, 11 Nov 2013 03:02:52 +0100
+Subject: [PATCH] timer: properly format relative timestamps in the future
+
+---
+ src/shared/time-util.c | 69 ++++++++++++++++++++++++++++++++------------------
+ 1 file changed, 44 insertions(+), 25 deletions(-)
+
+diff --git a/src/shared/time-util.c b/src/shared/time-util.c
+index 860be61..b8a6bd7 100644
+--- a/src/shared/time-util.c
++++ b/src/shared/time-util.c
+@@ -191,55 +191,62 @@ char *format_timestamp_us(char *buf, size_t l, usec_t t) {
+ }
+ 
+ char *format_timestamp_relative(char *buf, size_t l, usec_t t) {
++        const char *s;
+         usec_t n, d;
+ 
+         n = now(CLOCK_REALTIME);
+ 
+-        if (t <= 0 || t > n || t + USEC_PER_DAY*7 <= t)
++        if (t <= 0 || (t == (usec_t) -1))
+                 return NULL;
+ 
+-        d = n - t;
++        if (n > t) {
++                d = n - t;
++                s = "ago";
++        } else {
++                d = t - n;
++                s = "left";
++        }
+ 
+         if (d >= USEC_PER_YEAR)
+-                snprintf(buf, l, "%llu years %llu months ago",
++                snprintf(buf, l, "%llu years %llu months %s",
+                          (unsigned long long) (d / USEC_PER_YEAR),
+-                         (unsigned long long) ((d % USEC_PER_YEAR) / USEC_PER_MONTH));
++                         (unsigned long long) ((d % USEC_PER_YEAR) / USEC_PER_MONTH), s);
+         else if (d >= USEC_PER_MONTH)
+-                snprintf(buf, l, "%llu months %llu days ago",
++                snprintf(buf, l, "%llu months %llu days %s",
+                          (unsigned long long) (d / USEC_PER_MONTH),
+-                         (unsigned long long) ((d % USEC_PER_MONTH) / USEC_PER_DAY));
++                         (unsigned long long) ((d % USEC_PER_MONTH) / USEC_PER_DAY), s);
+         else if (d >= USEC_PER_WEEK)
+-                snprintf(buf, l, "%llu weeks %llu days ago",
++                snprintf(buf, l, "%llu weeks %llu days %s",
+                          (unsigned long long) (d / USEC_PER_WEEK),
+-                         (unsigned long long) ((d % USEC_PER_WEEK) / USEC_PER_DAY));
++                         (unsigned long long) ((d % USEC_PER_WEEK) / USEC_PER_DAY), s);
+         else if (d >= 2*USEC_PER_DAY)
+-                snprintf(buf, l, "%llu days ago", (unsigned long long) (d / USEC_PER_DAY));
++                snprintf(buf, l, "%llu days %s", (unsigned long long) (d / USEC_PER_DAY), s);
+         else if (d >= 25*USEC_PER_HOUR)
+-                snprintf(buf, l, "1 day %lluh ago",
+-                         (unsigned long long) ((d - USEC_PER_DAY) / USEC_PER_HOUR));
++                snprintf(buf, l, "1 day %lluh %s",
++                         (unsigned long long) ((d - USEC_PER_DAY) / USEC_PER_HOUR), s);
+         else if (d >= 6*USEC_PER_HOUR)
+-                snprintf(buf, l, "%lluh ago",
+-                         (unsigned long long) (d / USEC_PER_HOUR));
++                snprintf(buf, l, "%lluh %s",
++                         (unsigned long long) (d / USEC_PER_HOUR), s);
+         else if (d >= USEC_PER_HOUR)
+-                snprintf(buf, l, "%lluh %llumin ago",
++                snprintf(buf, l, "%lluh %llumin %s",
+                          (unsigned long long) (d / USEC_PER_HOUR),
+-                         (unsigned long long) ((d % USEC_PER_HOUR) / USEC_PER_MINUTE));
++                         (unsigned long long) ((d % USEC_PER_HOUR) / USEC_PER_MINUTE), s);
+         else if (d >= 5*USEC_PER_MINUTE)
+-                snprintf(buf, l, "%llumin ago",
+-                         (unsigned long long) (d / USEC_PER_MINUTE));
++                snprintf(buf, l, "%llumin %s",
++                         (unsigned long long) (d / USEC_PER_MINUTE), s);
+         else if (d >= USEC_PER_MINUTE)
+-                snprintf(buf, l, "%llumin %llus ago",
++                snprintf(buf, l, "%llumin %llus %s",
+                          (unsigned long long) (d / USEC_PER_MINUTE),
+-                         (unsigned long long) ((d % USEC_PER_MINUTE) / USEC_PER_SEC));
++                         (unsigned long long) ((d % USEC_PER_MINUTE) / USEC_PER_SEC), s);
+         else if (d >= USEC_PER_SEC)
+-                snprintf(buf, l, "%llus ago",
+-                         (unsigned long long) (d / USEC_PER_SEC));
++                snprintf(buf, l, "%llus %s",
++                         (unsigned long long) (d / USEC_PER_SEC), s);
+         else if (d >= USEC_PER_MSEC)
+-                snprintf(buf, l, "%llums ago",
+-                         (unsigned long long) (d / USEC_PER_MSEC));
++                snprintf(buf, l, "%llums %s",
++                         (unsigned long long) (d / USEC_PER_MSEC), s);
+         else if (d > 0)
+-                snprintf(buf, l, "%lluus ago",
+-                         (unsigned long long) d);
++                snprintf(buf, l, "%lluus %s",
++                         (unsigned long long) d, s);
+         else
+                 snprintf(buf, l, "now");
+ 
+@@ -479,6 +486,18 @@ int parse_timestamp(const char *t, usec_t *usec) {
+                         return r;
+ 
+                 goto finish;
++        } else if (endswith(t, " left")) {
++                _cleanup_free_ char *z;
++
++                z = strndup(t, strlen(t) - 4);
++                if (!z)
++                        return -ENOMEM;
++
++                r = parse_sec(z, &plus);
++                if (r < 0)
++                        return r;
++
++                goto finish;
+         }
+ 
+         for (i = 0; i < ELEMENTSOF(day_nr); i++) {
diff --git a/SOURCES/0101-timer-consider-usec_t-1-an-invalid-timestamp.patch b/SOURCES/0101-timer-consider-usec_t-1-an-invalid-timestamp.patch
new file mode 100644
index 0000000..40d0397
--- /dev/null
+++ b/SOURCES/0101-timer-consider-usec_t-1-an-invalid-timestamp.patch
@@ -0,0 +1,48 @@
+From eaae0683686ccd07d1cf79f2247032586162f854 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart@poettering.net>
+Date: Mon, 11 Nov 2013 03:03:17 +0100
+Subject: [PATCH] timer: consider (usec_t) -1 an invalid timestamp
+
+---
+ src/shared/time-util.c | 4 ++--
+ src/shared/time-util.h | 5 ++++-
+ 2 files changed, 6 insertions(+), 3 deletions(-)
+
+diff --git a/src/shared/time-util.c b/src/shared/time-util.c
+index b8a6bd7..81d4ede 100644
+--- a/src/shared/time-util.c
++++ b/src/shared/time-util.c
+@@ -157,7 +157,7 @@ char *format_timestamp(char *buf, size_t l, usec_t t) {
+         assert(buf);
+         assert(l > 0);
+ 
+-        if (t <= 0)
++        if (t <= 0 || t == (usec_t) -1)
+                 return NULL;
+ 
+         sec = (time_t) (t / USEC_PER_SEC);
+@@ -175,7 +175,7 @@ char *format_timestamp_us(char *buf, size_t l, usec_t t) {
+         assert(buf);
+         assert(l > 0);
+ 
+-        if (t <= 0)
++        if (t <= 0 || t == (usec_t) -1)
+                 return NULL;
+ 
+         sec = (time_t) (t / USEC_PER_SEC);
+diff --git a/src/shared/time-util.h b/src/shared/time-util.h
+index 7660fe1..bc10d22 100644
+--- a/src/shared/time-util.h
++++ b/src/shared/time-util.h
+@@ -64,7 +64,10 @@ dual_timestamp* dual_timestamp_get(dual_timestamp *ts);
+ dual_timestamp* dual_timestamp_from_realtime(dual_timestamp *ts, usec_t u);
+ dual_timestamp* dual_timestamp_from_monotonic(dual_timestamp *ts, usec_t u);
+ 
+-#define dual_timestamp_is_set(ts) ((ts)->realtime > 0)
++static inline bool dual_timestamp_is_set(dual_timestamp *ts) {
++        return ((ts->realtime > 0 && ts->realtime != (usec_t) -1) ||
++                (ts->monotonic > 0 && ts->monotonic != (usec_t) -1));
++}
+ 
+ usec_t timespec_load(const struct timespec *ts) _pure_;
+ struct timespec *timespec_store(struct timespec *ts, usec_t u);
diff --git a/SOURCES/0102-Resolve-dev-console-to-the-active-tty-instead-of-jus.patch b/SOURCES/0102-Resolve-dev-console-to-the-active-tty-instead-of-jus.patch
new file mode 100644
index 0000000..405308f
--- /dev/null
+++ b/SOURCES/0102-Resolve-dev-console-to-the-active-tty-instead-of-jus.patch
@@ -0,0 +1,33 @@
+From 41882edd0421d7f611bcec8cba9379ac8bfa24a9 Mon Sep 17 00:00:00 2001
+From: Olivier Brunel <jjk@jjacky.com>
+Date: Fri, 20 Sep 2013 22:18:28 +0200
+Subject: [PATCH] Resolve /dev/console to the active tty instead of just "tty0"
+
+When resolving /dev/console one would often get "tty0" meaning the active VT.
+Resolving to the actual tty (e.g. "tty1") will notably help on boot when
+determining whether or not PID1 can output to the console.
+---
+ src/shared/util.c | 10 ++++++++++
+ 1 file changed, 10 insertions(+)
+
+diff --git a/src/shared/util.c b/src/shared/util.c
+index b1a4006..8a542da 100644
+--- a/src/shared/util.c
++++ b/src/shared/util.c
+@@ -3627,6 +3627,16 @@ char *resolve_dev_console(char **active) {
+         else
+                 tty = *active;
+ 
++        if (streq(tty, "tty0")) {
++                char *tmp;
++
++                /* Get the active VC (e.g. tty1) */
++                if (read_one_line_file("/sys/class/tty/tty0/active", &tmp) >= 0) {
++                        free(*active);
++                        tty = *active = tmp;
++                }
++        }
++
+         return tty;
+ }
+ 
diff --git a/SOURCES/0103-Only-disable-output-on-console-during-boot-if-needed.patch b/SOURCES/0103-Only-disable-output-on-console-during-boot-if-needed.patch
new file mode 100644
index 0000000..446b085
--- /dev/null
+++ b/SOURCES/0103-Only-disable-output-on-console-during-boot-if-needed.patch
@@ -0,0 +1,37 @@
+From 6a2697e8d12f8a09caa26394ecdbbb6d0721f757 Mon Sep 17 00:00:00 2001
+From: Olivier Brunel <jjk@jjacky.com>
+Date: Fri, 20 Sep 2013 22:18:29 +0200
+Subject: [PATCH] Only disable output on console during boot if needed
+
+If there are no more jobs on console, no need/we shouldn't disable output.
+---
+ src/core/manager.c | 2 +-
+ src/core/unit.c    | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/core/manager.c b/src/core/manager.c
+index 58dacdc..ce32baf 100644
+--- a/src/core/manager.c
++++ b/src/core/manager.c
+@@ -1761,7 +1761,7 @@ static int process_event(Manager *m, struct epoll_event *ev) {
+         }
+ 
+         case WATCH_IDLE_PIPE: {
+-                m->no_console_output = true;
++                m->no_console_output = m->n_on_console > 0;
+ 
+                 manager_unwatch_idle_pipe(m);
+                 close_idle_pipe(m);
+diff --git a/src/core/unit.c b/src/core/unit.c
+index 0f57b06..acd9c74 100644
+--- a/src/core/unit.c
++++ b/src/core/unit.c
+@@ -1457,7 +1457,7 @@ void unit_notify(Unit *u, UnitActiveState os, UnitActiveState ns, bool reload_su
+ 
+                                 if (m->n_on_console == 0)
+                                         /* unset no_console_output flag, since the console is free */
+-                                        m->no_console_output = 0;
++                                        m->no_console_output = false;
+                         } else
+                                 m->n_on_console ++;
+                 }
diff --git a/SOURCES/0104-Fix-possible-lack-of-status-messages-on-shutdown-reb.patch b/SOURCES/0104-Fix-possible-lack-of-status-messages-on-shutdown-reb.patch
new file mode 100644
index 0000000..d3e1a98
--- /dev/null
+++ b/SOURCES/0104-Fix-possible-lack-of-status-messages-on-shutdown-reb.patch
@@ -0,0 +1,26 @@
+From f64dc9cfd4f2fb79c3b46b2657961b407c6b3235 Mon Sep 17 00:00:00 2001
+From: Olivier Brunel <jjk@jjacky.com>
+Date: Fri, 20 Sep 2013 22:18:30 +0200
+Subject: [PATCH] Fix possible lack of status messages on shutdown/reboot
+
+Since 31a7eb86 the output on console can be disabled to avoid colliding with
+gettys. However, it could also lead to a lack of messages during
+shutdown/reboot.
+---
+ src/core/job.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/src/core/job.c b/src/core/job.c
+index 5ea9803..7d2b994 100644
+--- a/src/core/job.c
++++ b/src/core/job.c
+@@ -1099,6 +1099,9 @@ void job_shutdown_magic(Job *j) {
+         if (!unit_has_name(j->unit, SPECIAL_SHUTDOWN_TARGET))
+                 return;
+ 
++        /* In case messages on console has been disabled on boot */
++        j->unit->manager->no_console_output = false;
++
+         if (detect_container(NULL) > 0)
+                 return;
+ 
diff --git a/SOURCES/0105-random-seed-improve-debugging-messages-a-bit.patch b/SOURCES/0105-random-seed-improve-debugging-messages-a-bit.patch
new file mode 100644
index 0000000..08eb783
--- /dev/null
+++ b/SOURCES/0105-random-seed-improve-debugging-messages-a-bit.patch
@@ -0,0 +1,70 @@
+From 03269523c0f254846613ae3ae0183f4724e47ed8 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Tue, 12 Nov 2013 22:05:16 -0500
+Subject: [PATCH] random-seed: improve debugging messages a bit
+
+---
+ Makefile.am                   | 2 ++
+ src/random-seed/random-seed.c | 8 ++++----
+ 2 files changed, 6 insertions(+), 4 deletions(-)
+
+diff --git a/Makefile.am b/Makefile.am
+index 0c11477..3103bac 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -159,6 +159,7 @@ AM_CPPFLAGS = \
+ 	-DSYSTEMD_TTY_ASK_PASSWORD_AGENT_BINARY_PATH=\"$(rootbindir)/systemd-tty-ask-password-agent\" \
+ 	-DSYSTEMD_STDIO_BRIDGE_BINARY_PATH=\"$(bindir)/systemd-stdio-bridge\" \
+ 	-DROOTPREFIX=\"$(rootprefix)\" \
++	-DRANDOM_SEED_DIR=\"$(localstatedir)/lib/systemd/\" \
+ 	-DRANDOM_SEED=\"$(localstatedir)/lib/systemd/random-seed\" \
+ 	-DSYSTEMD_CRYPTSETUP_PATH=\"$(rootlibexecdir)/systemd-cryptsetup\" \
+ 	-DSYSTEM_GENERATOR_PATH=\"$(systemgeneratordir)\" \
+@@ -4227,6 +4228,7 @@ substitutions = \
+        '|PACKAGE_VERSION=$(PACKAGE_VERSION)|' \
+        '|PACKAGE_NAME=$(PACKAGE_NAME)|' \
+        '|PACKAGE_URL=$(PACKAGE_URL)|' \
++       '|RANDOM_SEED_DIR=$(localstatedir)/lib/systemd/|' \
+        '|RANDOM_SEED=$(localstatedir)/lib/systemd/random-seed|' \
+        '|prefix=$(prefix)|' \
+        '|exec_prefix=$(exec_prefix)|' \
+diff --git a/src/random-seed/random-seed.c b/src/random-seed/random-seed.c
+index afbd500..af79ecf 100644
+--- a/src/random-seed/random-seed.c
++++ b/src/random-seed/random-seed.c
+@@ -72,7 +72,7 @@ int main(int argc, char *argv[]) {
+ 
+         r = mkdir_parents_label(RANDOM_SEED, 0755);
+         if (r < 0) {
+-                log_error("Failed to create parent directory of " RANDOM_SEED ": %s", strerror(-r));
++                log_error("Failed to create directory " RANDOM_SEED_DIR ": %s", strerror(-r));
+                 goto finish;
+         }
+ 
+@@ -86,7 +86,7 @@ int main(int argc, char *argv[]) {
+                 if (seed_fd < 0) {
+                         seed_fd = open(RANDOM_SEED, O_RDONLY|O_CLOEXEC|O_NOCTTY);
+                         if (seed_fd < 0) {
+-                                log_error("Failed to open random seed: %m");
++                                log_error("Failed to open " RANDOM_SEED ": %m");
+                                 r = -errno;
+                                 goto finish;
+                         }
+@@ -106,7 +106,7 @@ int main(int argc, char *argv[]) {
+                 if (k <= 0) {
+ 
+                         if (r != 0)
+-                                log_error("Failed to read seed file: %m");
++                                log_error("Failed to read seed from " RANDOM_SEED ": %m");
+ 
+                         r = k == 0 ? -EIO : (int) k;
+ 
+@@ -125,7 +125,7 @@ int main(int argc, char *argv[]) {
+ 
+                 seed_fd = open(RANDOM_SEED, O_WRONLY|O_CLOEXEC|O_NOCTTY|O_CREAT, 0600);
+                 if (seed_fd < 0) {
+-                        log_error("Failed to open random seed: %m");
++                        log_error("Failed to open " RANDOM_SEED ": %m");
+                         r = -errno;
+                         goto finish;
+                 }
diff --git a/SOURCES/0106-Fix-RemainAfterExit-services-keeping-a-hold-on-conso.patch b/SOURCES/0106-Fix-RemainAfterExit-services-keeping-a-hold-on-conso.patch
new file mode 100644
index 0000000..86dead0
--- /dev/null
+++ b/SOURCES/0106-Fix-RemainAfterExit-services-keeping-a-hold-on-conso.patch
@@ -0,0 +1,54 @@
+From 210dca6fd02254b8c4d145064cdfadbfef68dbd3 Mon Sep 17 00:00:00 2001
+From: Olivier Brunel <jjk@jjacky.com>
+Date: Thu, 14 Nov 2013 15:52:54 +0100
+Subject: [PATCH] Fix RemainAfterExit services keeping a hold on console
+
+When a service exits succesfully and has RemainAfterExit set, its hold
+on the console (in m->n_on_console) wasn't released since the unit state
+didn't change.
+---
+ src/core/service.c | 16 ++++++++++++++++
+ src/core/unit.c    |  3 +++
+ 2 files changed, 19 insertions(+)
+
+diff --git a/src/core/service.c b/src/core/service.c
+index 5662180..62ae8f0 100644
+--- a/src/core/service.c
++++ b/src/core/service.c
+@@ -1570,6 +1570,22 @@ static void service_set_state(Service *s, ServiceState state) {
+         if (state == SERVICE_EXITED && UNIT(s)->manager->n_reloading <= 0)
+                 unit_destroy_cgroup(UNIT(s));
+ 
++        /* For remain_after_exit services, let's see if we can "release" the
++         * hold on the console, since unit_notify() only does that in case of
++         * change of state */
++        if (state == SERVICE_EXITED && s->remain_after_exit &&
++            UNIT(s)->manager->n_on_console > 0) {
++                ExecContext *ec = unit_get_exec_context(UNIT(s));
++                if (ec && exec_context_may_touch_console(ec)) {
++                        Manager *m = UNIT(s)->manager;
++
++                        m->n_on_console --;
++                        if (m->n_on_console == 0)
++                                /* unset no_console_output flag, since the console is free */
++                                m->no_console_output = false;
++                }
++        }
++
+         if (old_state != state)
+                 log_debug_unit(UNIT(s)->id,
+                                "%s changed %s -> %s", UNIT(s)->id,
+diff --git a/src/core/unit.c b/src/core/unit.c
+index acd9c74..6c2c4a0 100644
+--- a/src/core/unit.c
++++ b/src/core/unit.c
+@@ -1449,6 +1449,9 @@ void unit_notify(Unit *u, UnitActiveState os, UnitActiveState ns, bool reload_su
+         if (UNIT_IS_INACTIVE_OR_FAILED(ns))
+                 unit_destroy_cgroup(u);
+ 
++        /* Note that this doesn't apply to RemainAfterExit services exiting
++         * sucessfully, since there's no change of state in that case. Which is
++         * why it is handled in service_set_state() */
+         if (UNIT_IS_INACTIVE_OR_FAILED(os) != UNIT_IS_INACTIVE_OR_FAILED(ns)) {
+                 ExecContext *ec = unit_get_exec_context(u);
+                 if (ec && exec_context_may_touch_console(ec)) {
diff --git a/SOURCES/0107-keymap-Add-Toshiba-Satellite-U940.patch b/SOURCES/0107-keymap-Add-Toshiba-Satellite-U940.patch
new file mode 100644
index 0000000..7419cb1
--- /dev/null
+++ b/SOURCES/0107-keymap-Add-Toshiba-Satellite-U940.patch
@@ -0,0 +1,28 @@
+From d76eefd8a937c6ed75cb24a2c14fa37291e663be Mon Sep 17 00:00:00 2001
+From: Jose Ignacio Naranjo <joseignacio.naranjo@gmail.com>
+Date: Sun, 17 Nov 2013 21:11:34 +0100
+Subject: [PATCH] keymap: Add Toshiba Satellite U940
+
+Signed-off-by: Martin Pitt <martinpitt@gnome.org>
+---
+ hwdb/60-keyboard.hwdb | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+diff --git a/hwdb/60-keyboard.hwdb b/hwdb/60-keyboard.hwdb
+index b497f92..d4d948d 100644
+--- a/hwdb/60-keyboard.hwdb
++++ b/hwdb/60-keyboard.hwdb
+@@ -1031,6 +1031,13 @@ keyboard:dmi:bvn*:bvr*:bd*:svnTOSHIBA*:pnSatellite*P75-A:pvr*
+  KEYBOARD_KEY_a9=switchvideomode                        # switch display outputs
+  KEYBOARD_KEY_d4=wlan                                   # RF Switch Off
+ 
++# Satellite U940
++keyboard:name:Toshiba*input*device:dmi:bvn*:bvr*:bd*:svnTOSHIBA*:pnSATELLITEU940:pvr*
++ KEYBOARD_KEY_13c=brightnessdown
++ KEYBOARD_KEY_13d=brightnessup
++ KEYBOARD_KEY_13e=switchvideomode
++ KEYBOARD_KEY_13f=f21                                   # Touchpad toggle
++
+ ###########################################################
+ # VIA
+ ###########################################################
diff --git a/SOURCES/0108-calendar-support-yearly-and-annually-names-the-same-.patch b/SOURCES/0108-calendar-support-yearly-and-annually-names-the-same-.patch
new file mode 100644
index 0000000..7ed6206
--- /dev/null
+++ b/SOURCES/0108-calendar-support-yearly-and-annually-names-the-same-.patch
@@ -0,0 +1,38 @@
+From 9e4b36ca509cdcb39afaa9fc7a0f1901b8855647 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart@poettering.net>
+Date: Tue, 19 Nov 2013 01:13:42 +0100
+Subject: [PATCH] calendar: support 'yearly' and 'annually' names the same way
+ as cron
+
+---
+ src/shared/calendarspec.c | 17 +++++++++++++++++
+ 1 file changed, 17 insertions(+)
+
+diff --git a/src/shared/calendarspec.c b/src/shared/calendarspec.c
+index 7979e23..7075159 100644
+--- a/src/shared/calendarspec.c
++++ b/src/shared/calendarspec.c
+@@ -686,6 +686,23 @@ int calendar_spec_from_string(const char *p, CalendarSpec **spec) {
+                 if (r < 0)
+                         goto fail;
+ 
++        } else if (strcaseeq(p, "anually") || strcaseeq(p, "yearly")) {
++                r = const_chain(1, &c->month);
++                if (r < 0)
++                        goto fail;
++                r = const_chain(1, &c->day);
++                if (r < 0)
++                        goto fail;
++                r = const_chain(0, &c->hour);
++                if (r < 0)
++                        goto fail;
++                r = const_chain(0, &c->minute);
++                if (r < 0)
++                        goto fail;
++                r = const_chain(0, &c->second);
++                if (r < 0)
++                        goto fail;
++
+         } else if (strcaseeq(p, "weekly")) {
+ 
+                 c->weekdays_bits = 1;
diff --git a/SOURCES/0109-hashmap-be-a-bit-more-conservative-with-pre-allocati.patch b/SOURCES/0109-hashmap-be-a-bit-more-conservative-with-pre-allocati.patch
new file mode 100644
index 0000000..49110a5
--- /dev/null
+++ b/SOURCES/0109-hashmap-be-a-bit-more-conservative-with-pre-allocati.patch
@@ -0,0 +1,57 @@
+From 79d427226ea91530362d41e778e1064a396aad09 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart@poettering.net>
+Date: Tue, 19 Nov 2013 21:02:59 +0100
+Subject: [PATCH] hashmap: be a bit more conservative with pre-allocating hash
+ tables and items
+
+---
+ src/shared/hashmap.c | 9 +++++----
+ 1 file changed, 5 insertions(+), 4 deletions(-)
+
+diff --git a/src/shared/hashmap.c b/src/shared/hashmap.c
+index f06fce6..8f5957b 100644
+--- a/src/shared/hashmap.c
++++ b/src/shared/hashmap.c
+@@ -66,13 +66,14 @@ static void *first_hashmap_tile = NULL;
+ static struct pool *first_entry_pool = NULL;
+ static void *first_entry_tile = NULL;
+ 
+-static void* allocate_tile(struct pool **first_pool, void **first_tile, size_t tile_size) {
++static void* allocate_tile(struct pool **first_pool, void **first_tile, size_t tile_size, unsigned at_least) {
+         unsigned i;
+ 
+         /* When a tile is released we add it to the list and simply
+          * place the next pointer at its offset 0. */
+ 
+         assert(tile_size >= sizeof(void*));
++        assert(at_least > 0);
+ 
+         if (*first_tile) {
+                 void *r;
+@@ -88,7 +89,7 @@ static void* allocate_tile(struct pool **first_pool, void **first_tile, size_t t
+                 struct pool *p;
+ 
+                 n = *first_pool ? (*first_pool)->n_tiles : 0;
+-                n = MAX(512U, n * 2);
++                n = MAX(at_least, n * 2);
+                 size = PAGE_ALIGN(ALIGN(sizeof(struct pool)) + n*tile_size);
+                 n = (size - ALIGN(sizeof(struct pool))) / tile_size;
+ 
+@@ -191,7 +192,7 @@ Hashmap *hashmap_new(hash_func_t hash_func, compare_func_t compare_func) {
+         size = ALIGN(sizeof(Hashmap)) + INITIAL_N_BUCKETS * sizeof(struct hashmap_entry*);
+ 
+         if (b) {
+-                h = allocate_tile(&first_hashmap_pool, &first_hashmap_tile, size);
++                h = allocate_tile(&first_hashmap_pool, &first_hashmap_tile, size, 8);
+                 if (!h)
+                         return NULL;
+ 
+@@ -476,7 +477,7 @@ int hashmap_put(Hashmap *h, const void *key, void *value) {
+                 hash = bucket_hash(h, key);
+ 
+         if (h->from_pool)
+-                e = allocate_tile(&first_entry_pool, &first_entry_tile, sizeof(struct hashmap_entry));
++                e = allocate_tile(&first_entry_pool, &first_entry_tile, sizeof(struct hashmap_entry), 64U);
+         else
+                 e = new(struct hashmap_entry, 1);
+ 
diff --git a/SOURCES/0110-manager-don-t-do-plymouth-in-a-container.patch b/SOURCES/0110-manager-don-t-do-plymouth-in-a-container.patch
new file mode 100644
index 0000000..e2393a2
--- /dev/null
+++ b/SOURCES/0110-manager-don-t-do-plymouth-in-a-container.patch
@@ -0,0 +1,26 @@
+From d4b53c89833bf8dc934eee8a19bd3b112135fe71 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart@poettering.net>
+Date: Wed, 20 Nov 2013 03:44:11 +0100
+Subject: [PATCH] manager: don't do plymouth in a container
+
+Given that plymouth listens on an abstract namespace socket and if
+CLONE_NEWNET is not used the abstract namespace is shared with the host
+we might actually end up send plymouth data to the host.
+---
+ src/core/manager.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/src/core/manager.c b/src/core/manager.c
+index ce32baf..944c196 100644
+--- a/src/core/manager.c
++++ b/src/core/manager.c
+@@ -1966,6 +1966,9 @@ void manager_send_unit_plymouth(Manager *m, Unit *u) {
+         if (m->running_as != SYSTEMD_SYSTEM)
+                 return;
+ 
++        if (detect_container(NULL) > 0)
++                return;
++
+         if (u->type != UNIT_SERVICE &&
+             u->type != UNIT_MOUNT &&
+             u->type != UNIT_SWAP)
diff --git a/SOURCES/0111-hwdb-Update-database-of-Bluetooth-company-identifier.patch b/SOURCES/0111-hwdb-Update-database-of-Bluetooth-company-identifier.patch
new file mode 100644
index 0000000..4ebe150
--- /dev/null
+++ b/SOURCES/0111-hwdb-Update-database-of-Bluetooth-company-identifier.patch
@@ -0,0 +1,327 @@
+From 9151c0ff148c20cdeb6e9fbc5909d56133718780 Mon Sep 17 00:00:00 2001
+From: Marcel Holtmann <marcel@holtmann.org>
+Date: Sat, 21 Sep 2013 11:45:05 -0700
+Subject: [PATCH] hwdb: Update database of Bluetooth company identifiers
+
+---
+ hwdb/20-bluetooth-vendor-product.hwdb | 209 +++++++++++++++++++++++++++++++---
+ 1 file changed, 193 insertions(+), 16 deletions(-)
+
+diff --git a/hwdb/20-bluetooth-vendor-product.hwdb b/hwdb/20-bluetooth-vendor-product.hwdb
+index c8cb322..faecf42 100644
+--- a/hwdb/20-bluetooth-vendor-product.hwdb
++++ b/hwdb/20-bluetooth-vendor-product.hwdb
+@@ -46,7 +46,7 @@ bluetooth:v000D*
+  ID_VENDOR_FROM_DATABASE=Texas Instruments Inc.
+ 
+ bluetooth:v000E*
+- ID_VENDOR_FROM_DATABASE=Ceva, Inc. (formerly Parthus Technologies Inc.)
++ ID_VENDOR_FROM_DATABASE=Ceva, Inc. (formerly Parthus Technologies, Inc.)
+ 
+ bluetooth:v000F*
+  ID_VENDOR_FROM_DATABASE=Broadcom Corporation
+@@ -55,7 +55,7 @@ bluetooth:v0010*
+  ID_VENDOR_FROM_DATABASE=Mitel Semiconductor
+ 
+ bluetooth:v0011*
+- ID_VENDOR_FROM_DATABASE=Widcomm, Inc.
++ ID_VENDOR_FROM_DATABASE=Widcomm, Inc
+ 
+ bluetooth:v0012*
+  ID_VENDOR_FROM_DATABASE=Zeevo, Inc.
+@@ -73,13 +73,13 @@ bluetooth:v0016*
+  ID_VENDOR_FROM_DATABASE=KC Technology Inc.
+ 
+ bluetooth:v0017*
+- ID_VENDOR_FROM_DATABASE=Newlogic
++ ID_VENDOR_FROM_DATABASE=NewLogic
+ 
+ bluetooth:v0018*
+  ID_VENDOR_FROM_DATABASE=Transilica, Inc.
+ 
+ bluetooth:v0019*
+- ID_VENDOR_FROM_DATABASE=Rohde & Schwartz GmbH & Co. KG
++ ID_VENDOR_FROM_DATABASE=Rohde & Schwarz GmbH & Co. KG
+ 
+ bluetooth:v001A*
+  ID_VENDOR_FROM_DATABASE=TTPCom Limited
+@@ -151,7 +151,7 @@ bluetooth:v0030*
+  ID_VENDOR_FROM_DATABASE=ST Microelectronics
+ 
+ bluetooth:v0031*
+- ID_VENDOR_FROM_DATABASE=Synopsys
++ ID_VENDOR_FROM_DATABASE=Synopsis
+ 
+ bluetooth:v0032*
+  ID_VENDOR_FROM_DATABASE=Red-M (Communications) Ltd
+@@ -190,16 +190,16 @@ bluetooth:v003D*
+  ID_VENDOR_FROM_DATABASE=IPextreme, Inc.
+ 
+ bluetooth:v003E*
+- ID_VENDOR_FROM_DATABASE=Systems and Chips, Inc
++ ID_VENDOR_FROM_DATABASE=Systems and Chips, Inc.
+ 
+ bluetooth:v003F*
+- ID_VENDOR_FROM_DATABASE=Bluetooth SIG, Inc
++ ID_VENDOR_FROM_DATABASE=Bluetooth SIG, Inc.
+ 
+ bluetooth:v0040*
+  ID_VENDOR_FROM_DATABASE=Seiko Epson Corporation
+ 
+ bluetooth:v0041*
+- ID_VENDOR_FROM_DATABASE=Integrated Silicon Solution Taiwain, Inc.
++ ID_VENDOR_FROM_DATABASE=Integrated Silicon Solution Taiwan, Inc.
+ 
+ bluetooth:v0042*
+  ID_VENDOR_FROM_DATABASE=CONWISE Technology Corporation Ltd
+@@ -244,7 +244,7 @@ bluetooth:v004F*
+  ID_VENDOR_FROM_DATABASE=APT Licensing Ltd.
+ 
+ bluetooth:v0050*
+- ID_VENDOR_FROM_DATABASE=SiRF Technology, Inc.
++ ID_VENDOR_FROM_DATABASE=SiRF Technology
+ 
+ bluetooth:v0051*
+  ID_VENDOR_FROM_DATABASE=Tzero Technologies, Inc.
+@@ -379,7 +379,7 @@ bluetooth:v007C*
+  ID_VENDOR_FROM_DATABASE=A & R Cambridge
+ 
+ bluetooth:v007D*
+- ID_VENDOR_FROM_DATABASE=Seers Technology Co. Ltd.
++ ID_VENDOR_FROM_DATABASE=Seers Technology Co. Ltd
+ 
+ bluetooth:v007E*
+  ID_VENDOR_FROM_DATABASE=Sports Tracking Technologies Ltd.
+@@ -406,7 +406,7 @@ bluetooth:v0085*
+  ID_VENDOR_FROM_DATABASE=BlueRadios, Inc.
+ 
+ bluetooth:v0086*
+- ID_VENDOR_FROM_DATABASE=equinux AG
++ ID_VENDOR_FROM_DATABASE=equinox AG
+ 
+ bluetooth:v0087*
+  ID_VENDOR_FROM_DATABASE=Garmin International, Inc.
+@@ -421,7 +421,7 @@ bluetooth:v008A*
+  ID_VENDOR_FROM_DATABASE=Jawbone
+ 
+ bluetooth:v008B*
+- ID_VENDOR_FROM_DATABASE=Topcon Positioning Systems, LLC
++ ID_VENDOR_FROM_DATABASE=Topcorn Positioning Systems, LLC
+ 
+ bluetooth:v008C*
+  ID_VENDOR_FROM_DATABASE=Qualcomm Labs, Inc.
+@@ -433,13 +433,13 @@ bluetooth:v008E*
+  ID_VENDOR_FROM_DATABASE=Quintic Corp.
+ 
+ bluetooth:v008F*
+- ID_VENDOR_FROM_DATABASE=Stollmann E+V GmbH
++ ID_VENDOR_FROM_DATABASE=Stollman E+V GmbH
+ 
+ bluetooth:v0090*
+  ID_VENDOR_FROM_DATABASE=Funai Electric Co., Ltd.
+ 
+ bluetooth:v0091*
+- ID_VENDOR_FROM_DATABASE=Advanced PANMOBIL systems GmbH & Co. KG
++ ID_VENDOR_FROM_DATABASE=Advanced PANMOBIL Systems GmbH & Co. KG
+ 
+ bluetooth:v0092*
+  ID_VENDOR_FROM_DATABASE=ThinkOptics, Inc.
+@@ -460,7 +460,7 @@ bluetooth:v0097*
+  ID_VENDOR_FROM_DATABASE=Bluetrek Technologies Limited
+ 
+ bluetooth:v0098*
+- ID_VENDOR_FROM_DATABASE=zero1.tv GmbH
++ ID_VENDOR_FROM_DATABASE=zer01.tv GmbH
+ 
+ bluetooth:v0099*
+  ID_VENDOR_FROM_DATABASE=i.Tech Dynamic Global Distribution Ltd.
+@@ -511,7 +511,7 @@ bluetooth:v00A8*
+  ID_VENDOR_FROM_DATABASE=ARP Devices Limited
+ 
+ bluetooth:v00A9*
+- ID_VENDOR_FROM_DATABASE=Magneti Marelli S.p.A.
++ ID_VENDOR_FROM_DATABASE=Magneti Marelli S.p.A
+ 
+ bluetooth:v00AA*
+  ID_VENDOR_FROM_DATABASE=CAEN RFID srl
+@@ -539,3 +539,180 @@ bluetooth:v00B1*
+ 
+ bluetooth:v00B2*
+  ID_VENDOR_FROM_DATABASE=Bekey A/S
++
++bluetooth:v00B3*
++ ID_VENDOR_FROM_DATABASE=Clarinox Technologies Pty. Ltd.
++
++bluetooth:v00B4*
++ ID_VENDOR_FROM_DATABASE=BDE Technology Co., Ltd.
++
++bluetooth:v00B5*
++ ID_VENDOR_FROM_DATABASE=Swirl Networks
++
++bluetooth:v00B6*
++ ID_VENDOR_FROM_DATABASE=Meso international
++
++bluetooth:v00B7*
++ ID_VENDOR_FROM_DATABASE=TreLab Ltd
++
++bluetooth:v00B8*
++ ID_VENDOR_FROM_DATABASE=Qualcomm Innovation Center, Inc. (QuIC)
++
++bluetooth:v00B9*
++ ID_VENDOR_FROM_DATABASE=Johnson Controls, Inc.
++
++bluetooth:v00BA*
++ ID_VENDOR_FROM_DATABASE=Starkey Laboratories Inc.
++
++bluetooth:v00BB*
++ ID_VENDOR_FROM_DATABASE=S-Power Electronics Limited
++
++bluetooth:v00BC*
++ ID_VENDOR_FROM_DATABASE=Ace Sensor Inc
++
++bluetooth:v00BD*
++ ID_VENDOR_FROM_DATABASE=Aplix Corporation
++
++bluetooth:v00BE*
++ ID_VENDOR_FROM_DATABASE=AAMP of America
++
++bluetooth:v00BF*
++ ID_VENDOR_FROM_DATABASE=Stalmart Technology Limited
++
++bluetooth:v00C0*
++ ID_VENDOR_FROM_DATABASE=AMICCOM Electronics Corporation
++
++bluetooth:v00C1*
++ ID_VENDOR_FROM_DATABASE=Shenzhen Excelsecu Data Technology Co.,Ltd
++
++bluetooth:v00C2*
++ ID_VENDOR_FROM_DATABASE=Geneq Inc.
++
++bluetooth:v00C3*
++ ID_VENDOR_FROM_DATABASE=adidas AG
++
++bluetooth:v00C4*
++ ID_VENDOR_FROM_DATABASE=LG Electronics
++
++bluetooth:v00C5*
++ ID_VENDOR_FROM_DATABASE=Onset Computer Corporation
++
++bluetooth:v00C6*
++ ID_VENDOR_FROM_DATABASE=Selfly BV
++
++bluetooth:v00C7*
++ ID_VENDOR_FROM_DATABASE=Quuppa Oy.
++
++bluetooth:v00C8*
++ ID_VENDOR_FROM_DATABASE=GeLo Inc
++
++bluetooth:v00C9*
++ ID_VENDOR_FROM_DATABASE=Evluma
++
++bluetooth:v00CA*
++ ID_VENDOR_FROM_DATABASE=MC10
++
++bluetooth:v00CB*
++ ID_VENDOR_FROM_DATABASE=Binauric SE
++
++bluetooth:v00CC*
++ ID_VENDOR_FROM_DATABASE=Beats Electronics
++
++bluetooth:v00CD*
++ ID_VENDOR_FROM_DATABASE=Microchip Technology Inc.
++
++bluetooth:v00CE*
++ ID_VENDOR_FROM_DATABASE=Elgato Systems GmbH
++
++bluetooth:v00CF*
++ ID_VENDOR_FROM_DATABASE=ARCHOS SA
++
++bluetooth:v00D1*
++ ID_VENDOR_FROM_DATABASE=Polar Electro Europe B.V.
++
++bluetooth:v00D2*
++ ID_VENDOR_FROM_DATABASE=Dialog Semiconductor B.V.
++
++bluetooth:v00D3*
++ ID_VENDOR_FROM_DATABASE=Taixingbang Technology (HK) Co,. LTD.
++
++bluetooth:v00D4*
++ ID_VENDOR_FROM_DATABASE=Kawantech
++
++bluetooth:v00D5*
++ ID_VENDOR_FROM_DATABASE=Austco Communication Systems
++
++bluetooth:v00D6*
++ ID_VENDOR_FROM_DATABASE=Timex Group USA, Inc.
++
++bluetooth:v00D7*
++ ID_VENDOR_FROM_DATABASE=Qualcomm Technologies, Inc.
++
++bluetooth:v00D8*
++ ID_VENDOR_FROM_DATABASE=Qualcomm Connected Experiences, Inc.
++
++bluetooth:v00D9*
++ ID_VENDOR_FROM_DATABASE=Voyetra Turtle Beach
++
++bluetooth:v00DA*
++ ID_VENDOR_FROM_DATABASE=txtr GmbH
++
++bluetooth:v00DB*
++ ID_VENDOR_FROM_DATABASE=Biosentronics
++
++bluetooth:v00DC*
++ ID_VENDOR_FROM_DATABASE=Procter & Gamble
++
++bluetooth:v00DD*
++ ID_VENDOR_FROM_DATABASE=Hosiden Corporation
++
++bluetooth:v00DE*
++ ID_VENDOR_FROM_DATABASE=Muzik LLC
++
++bluetooth:v00DF*
++ ID_VENDOR_FROM_DATABASE=Misfit Wearables Corp
++
++bluetooth:v00E0*
++ ID_VENDOR_FROM_DATABASE=Google
++
++bluetooth:v00E1*
++ ID_VENDOR_FROM_DATABASE=Danlers Ltd
++
++bluetooth:v00E2*
++ ID_VENDOR_FROM_DATABASE=Semilink Inc
++
++bluetooth:v00E3*
++ ID_VENDOR_FROM_DATABASE=inMusic Brands, Inc
++
++bluetooth:v00E4*
++ ID_VENDOR_FROM_DATABASE=L.S. Research Inc.
++
++bluetooth:v00E5*
++ ID_VENDOR_FROM_DATABASE=Eden Software Consultants Ltd.
++
++bluetooth:v00E6*
++ ID_VENDOR_FROM_DATABASE=Freshtemp
++
++bluetooth:v00E7*
++ ID_VENDOR_FROM_DATABASE=KS Technologies
++
++bluetooth:v00E8*
++ ID_VENDOR_FROM_DATABASE=ACTS Technologies
++
++bluetooth:v00E9*
++ ID_VENDOR_FROM_DATABASE=Vtrack Systems
++
++bluetooth:v00EA*
++ ID_VENDOR_FROM_DATABASE=Nielsen-Kellerman Company
++
++bluetooth:v00EB*
++ ID_VENDOR_FROM_DATABASE=Server Technology, Inc.
++
++bluetooth:v00EC*
++ ID_VENDOR_FROM_DATABASE=BioResearch Associates
++
++bluetooth:v00ED*
++ ID_VENDOR_FROM_DATABASE=Jolly Logic, LLC
++
++bluetooth:v00EE*
++ ID_VENDOR_FROM_DATABASE=Above Average Outcomes, Inc.
diff --git a/SOURCES/0112-automount-log-info-about-triggering-process.patch b/SOURCES/0112-automount-log-info-about-triggering-process.patch
new file mode 100644
index 0000000..08de3c9
--- /dev/null
+++ b/SOURCES/0112-automount-log-info-about-triggering-process.patch
@@ -0,0 +1,26 @@
+From 46405e5b293eeb66eb10e79f824a51cbaf5147ab Mon Sep 17 00:00:00 2001
+From: Kay Sievers <kay@vrfy.org>
+Date: Thu, 28 Nov 2013 01:25:10 +0100
+Subject: [PATCH] automount: log info about triggering process
+
+Conflicts:
+	src/core/automount.c
+---
+ src/core/automount.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/core/automount.c b/src/core/automount.c
+index d1379e0..203104e 100644
+--- a/src/core/automount.c
++++ b/src/core/automount.c
+@@ -776,8 +776,8 @@ static void automount_fd_event(Unit *u, int fd, uint32_t events, Watch *w) {
+                         _cleanup_free_ char *p = NULL;
+ 
+                         get_process_comm(packet.v5_packet.pid, &p);
+-                        log_debug_unit(u->id,
+-                                       "Got direct mount request on %s, triggered by %lu (%s)",
++                        log_info_unit(u->id,
++                                       "Got automount request for %s, triggered by %lu (%s)",
+                                        a->where, (unsigned long) packet.v5_packet.pid, strna(p));
+                 } else
+                         log_debug_unit(u->id, "Got direct mount request on %s", a->where);
diff --git a/SOURCES/0113-hwdb-Update-database-of-Bluetooth-company-identifier.patch b/SOURCES/0113-hwdb-Update-database-of-Bluetooth-company-identifier.patch
new file mode 100644
index 0000000..0d0176a
--- /dev/null
+++ b/SOURCES/0113-hwdb-Update-database-of-Bluetooth-company-identifier.patch
@@ -0,0 +1,147 @@
+From 99e5a2d023c6651d76f5a5d36fa8b0400dd3720a Mon Sep 17 00:00:00 2001
+From: Marcel Holtmann <marcel@holtmann.org>
+Date: Fri, 29 Nov 2013 07:26:47 -0800
+Subject: [PATCH] hwdb: Update database of Bluetooth company identifiers
+
+---
+ hwdb/20-bluetooth-vendor-product.hwdb | 109 +++++++++++++++++++++++++++++++++-
+ 1 file changed, 107 insertions(+), 2 deletions(-)
+
+diff --git a/hwdb/20-bluetooth-vendor-product.hwdb b/hwdb/20-bluetooth-vendor-product.hwdb
+index faecf42..dcc25bb 100644
+--- a/hwdb/20-bluetooth-vendor-product.hwdb
++++ b/hwdb/20-bluetooth-vendor-product.hwdb
+@@ -366,6 +366,9 @@ bluetooth:v0077*
+ bluetooth:v0078*
+  ID_VENDOR_FROM_DATABASE=Nike, Inc.
+ 
++bluetooth:v0078p0001*
++ ID_PRODUCT_FROM_DATABASE=Nike+ FuelBand
++
+ bluetooth:v0079*
+  ID_VENDOR_FROM_DATABASE=lesswire AG
+ 
+@@ -457,7 +460,7 @@ bluetooth:v0096*
+  ID_VENDOR_FROM_DATABASE=ODM Technology, Inc.
+ 
+ bluetooth:v0097*
+- ID_VENDOR_FROM_DATABASE=Bluetrek Technologies Limited
++ ID_VENDOR_FROM_DATABASE=ConnecteDevice Ltd.
+ 
+ bluetooth:v0098*
+  ID_VENDOR_FROM_DATABASE=zer01.tv GmbH
+@@ -634,7 +637,7 @@ bluetooth:v00D2*
+  ID_VENDOR_FROM_DATABASE=Dialog Semiconductor B.V.
+ 
+ bluetooth:v00D3*
+- ID_VENDOR_FROM_DATABASE=Taixingbang Technology (HK) Co,. LTD.
++ ID_VENDOR_FROM_DATABASE=Taixingbang Technology (HK) Co,. LTD.
+ 
+ bluetooth:v00D4*
+  ID_VENDOR_FROM_DATABASE=Kawantech
+@@ -716,3 +719,105 @@ bluetooth:v00ED*
+ 
+ bluetooth:v00EE*
+  ID_VENDOR_FROM_DATABASE=Above Average Outcomes, Inc.
++
++bluetooth:v00EF*
++ ID_VENDOR_FROM_DATABASE=Bitsplitters GmbH
++
++bluetooth:v00F0*
++ ID_VENDOR_FROM_DATABASE=PayPal, Inc.
++
++bluetooth:v00F1*
++ ID_VENDOR_FROM_DATABASE=Witron Technology Limited
++
++bluetooth:v00F2*
++ ID_VENDOR_FROM_DATABASE=Morse Project Inc.
++
++bluetooth:v00F3*
++ ID_VENDOR_FROM_DATABASE=Kent Displays Inc.
++
++bluetooth:v00F4*
++ ID_VENDOR_FROM_DATABASE=Nautilus Inc.
++
++bluetooth:v00F5*
++ ID_VENDOR_FROM_DATABASE=Smartifier Oy
++
++bluetooth:v00F6*
++ ID_VENDOR_FROM_DATABASE=Elcometer Limited
++
++bluetooth:v00F7*
++ ID_VENDOR_FROM_DATABASE=VSN Technologies Inc.
++
++bluetooth:v00F8*
++ ID_VENDOR_FROM_DATABASE=AceUni Corp., Ltd.
++
++bluetooth:v00F9*
++ ID_VENDOR_FROM_DATABASE=StickNFind
++
++bluetooth:v00FA*
++ ID_VENDOR_FROM_DATABASE=Crystal Code AB
++
++bluetooth:v00FB*
++ ID_VENDOR_FROM_DATABASE=KOUKAAM a.s.
++
++bluetooth:v00FC*
++ ID_VENDOR_FROM_DATABASE=Delphi Corporation
++
++bluetooth:v00FD*
++ ID_VENDOR_FROM_DATABASE=ValenceTech Limited
++
++bluetooth:v00FE*
++ ID_VENDOR_FROM_DATABASE=Reserved
++
++bluetooth:v00FF*
++ ID_VENDOR_FROM_DATABASE=Typo Products, LLC
++
++bluetooth:v0100*
++ ID_VENDOR_FROM_DATABASE=TomTom International BV
++
++bluetooth:v0101*
++ ID_VENDOR_FROM_DATABASE=Fugoo, Inc
++
++bluetooth:v0102*
++ ID_VENDOR_FROM_DATABASE=Keiser Corporation
++
++bluetooth:v0103*
++ ID_VENDOR_FROM_DATABASE=Bang & Olufsen A/S
++
++bluetooth:v0104*
++ ID_VENDOR_FROM_DATABASE=PLUS Locations Systems Pty Ltd
++
++bluetooth:v0105*
++ ID_VENDOR_FROM_DATABASE=Ubiquitous Computing Technology Corporation
++
++bluetooth:v0106*
++ ID_VENDOR_FROM_DATABASE=Innovative Yachtter Solutions
++
++bluetooth:v0107*
++ ID_VENDOR_FROM_DATABASE=William Demant Holding A/S
++
++bluetooth:v0108*
++ ID_VENDOR_FROM_DATABASE=Chicony Electronics Co., Ltd.
++
++bluetooth:v0109*
++ ID_VENDOR_FROM_DATABASE=Atus BV
++
++bluetooth:v010A*
++ ID_VENDOR_FROM_DATABASE=Codegate Ltd.
++
++bluetooth:v010B*
++ ID_VENDOR_FROM_DATABASE=ERi, Inc.
++
++bluetooth:v010C*
++ ID_VENDOR_FROM_DATABASE=Transducers Direct, LLC
++
++bluetooth:v010D*
++ ID_VENDOR_FROM_DATABASE=Fujitsu Ten Limited
++
++bluetooth:v010E*
++ ID_VENDOR_FROM_DATABASE=Audi AG
++
++bluetooth:v010F*
++ ID_VENDOR_FROM_DATABASE=HiSilicon Technologies Co., Ltd.
++
++bluetooth:v0110*
++ ID_VENDOR_FROM_DATABASE=Nippon Seiki Co., Ltd.
diff --git a/SOURCES/0114-journal-fail-silently-in-sd_j_sendv-if-journal-is-un.patch b/SOURCES/0114-journal-fail-silently-in-sd_j_sendv-if-journal-is-un.patch
new file mode 100644
index 0000000..a164ad5
--- /dev/null
+++ b/SOURCES/0114-journal-fail-silently-in-sd_j_sendv-if-journal-is-un.patch
@@ -0,0 +1,34 @@
+From d57b2e82e42d68555c92da2b19e07dbfdd74ab12 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Tue, 3 Dec 2013 08:07:32 -0500
+Subject: [PATCH] journal: fail silently in sd_j_sendv() if journal is
+ unavailable
+
+"syslog(3) and sd_journal_print() may largely be used interchangeably
+functionality-wise" according to sd_journal_print(3). This socket
+should be always available except in rare circumstatances, and we
+don't random applications to fail on logging, so let's do what syslog
+did. The alternative of forcing all callers to do error handling for
+this rare case doesn't really have any benefits, since if they can't
+log there isn't much they can do anyway.
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1023041
+---
+ src/journal/journal-send.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/src/journal/journal-send.c b/src/journal/journal-send.c
+index d00e26f..d99ff0c 100644
+--- a/src/journal/journal-send.c
++++ b/src/journal/journal-send.c
+@@ -305,6 +305,10 @@ _public_ int sd_journal_sendv(const struct iovec *iov, int n) {
+         if (k >= 0)
+                 return 0;
+ 
++        /* Fail silently if the journal is not available */
++        if (errno == ENOENT)
++                return 0;
++
+         if (errno != EMSGSIZE && errno != ENOBUFS)
+                 return -errno;
+ 
diff --git a/SOURCES/0115-Fix-memory-leak-in-stdout-journal-streams.patch b/SOURCES/0115-Fix-memory-leak-in-stdout-journal-streams.patch
new file mode 100644
index 0000000..186952d
--- /dev/null
+++ b/SOURCES/0115-Fix-memory-leak-in-stdout-journal-streams.patch
@@ -0,0 +1,23 @@
+From ac67da03ebc56ab45b3fbb166fe961cb753d2777 Mon Sep 17 00:00:00 2001
+From: Dan McGee <dan@archlinux.org>
+Date: Sun, 8 Dec 2013 14:33:45 -0600
+Subject: [PATCH] Fix memory leak in stdout journal streams
+
+Just as 'identifier' is strdup-ed and freed, we need to do the same for
+unit_id.
+---
+ src/journal/journald-stream.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/src/journal/journald-stream.c b/src/journal/journald-stream.c
+index 9c4efec..4080622 100644
+--- a/src/journal/journald-stream.c
++++ b/src/journal/journald-stream.c
+@@ -339,6 +339,7 @@ void stdout_stream_free(StdoutStream *s) {
+ #endif
+ 
+         free(s->identifier);
++        free(s->unit_id);
+         free(s);
+ }
+ 
diff --git a/SOURCES/0116-man-document-is-enabled-output.patch b/SOURCES/0116-man-document-is-enabled-output.patch
new file mode 100644
index 0000000..f4c79d8
--- /dev/null
+++ b/SOURCES/0116-man-document-is-enabled-output.patch
@@ -0,0 +1,92 @@
+From ce006689117c3226ddb0eb5a1f8e5963cab1c92a Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Sun, 8 Dec 2013 18:56:16 -0500
+Subject: [PATCH] man: document 'is-enabled' output
+
+https://bugzilla.redhat.com/show_bug.cgi?id=953077
+---
+ man/systemctl.xml | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++-----
+ 1 file changed, 59 insertions(+), 5 deletions(-)
+
+diff --git a/man/systemctl.xml b/man/systemctl.xml
+index 166282c..b4bc15d 100644
+--- a/man/systemctl.xml
++++ b/man/systemctl.xml
+@@ -437,7 +437,7 @@ systemctl start foo
+ 
+         <listitem>
+           <para>When used with <command>enable</command>,
+-          <command>disable</command>, <command>is-enabled</command>
++          <command>disable</command>,
+           (and related commands), make changes only temporarily, so
+           that they are lost on the next reboot. This will have the
+           effect that changes are not made in subdirectories of
+@@ -885,10 +885,64 @@ kobject-uevent 1 systemd-udevd-kernel.socket systemd-udevd.service
+ 
+           <listitem>
+             <para>Checks whether any of the specified unit files are
+-            enabled (as with <command>enable</command>). Returns an exit
+-            code of 0 if at least one is enabled, non-zero
+-            otherwise. Prints the current enable status. To suppress
+-            this output, use <option>--quiet</option>.</para>
++            enabled (as with <command>enable</command>). Returns an
++            exit code of 0 if at least one is enabled, non-zero
++            otherwise. Prints the current enable status (see table).
++            To suppress this output, use <option>--quiet</option>.
++            </para>
++
++            <table>
++              <title>
++                <command>is-enabled</command> output
++              </title>
++
++              <tgroup cols='3'>
++                <thead>
++                  <row>
++                    <entry>Printed string</entry>
++                    <entry>Meaning</entry>
++                    <entry>Return value</entry>
++                  </row>
++                </thead>
++                <tbody>
++                  <row>
++                    <entry><literal>enabled</literal></entry>
++                    <entry morerows='1'>Enabled through a symlink in <filename>.wants</filename> directory (permanently or just in <filename>/run</filename>)</entry>
++                    <entry morerows='1'>0</entry>
++                  </row>
++                  <row>
++                    <entry><literal>enabled-runtime</literal></entry>
++                  </row>
++                  <row>
++                    <entry><literal>linked</literal></entry>
++                    <entry morerows='1'>Made available through a symlink to the unit file (permanently or just in <filename>/run</filename>)</entry>
++                    <entry morerows='1'>1</entry>
++                  </row>
++                  <row>
++                    <entry><literal>linked-runtime</literal></entry>
++                  </row>
++                  <row>
++                    <entry><literal>masked</literal></entry>
++                    <entry morerows='1'>Disabled entirely (permanently or just in <filename>/run</filename>)</entry>
++                    <entry morerows='1'>1</entry>
++                  </row>
++                  <row>
++                    <entry><literal>masked-runtime</literal></entry>
++                  </row>
++                  <row>
++                    <entry><literal>static</literal></entry>
++                    <entry>Unit is not enabled, but has no provisions for enabling in [Install] section</entry>
++                    <entry>1</entry>
++                  </row>
++                  <row>
++                    <entry><literal>disabled</literal></entry>
++                    <entry>Unit is not enabled</entry>
++                    <entry>1</entry>
++                  </row>
++                </tbody>
++              </tgroup>
++            </table>
++
+           </listitem>
+         </varlistentry>
+ 
diff --git a/SOURCES/0117-hostnamed-avoid-using-NULL-in-error-path.patch b/SOURCES/0117-hostnamed-avoid-using-NULL-in-error-path.patch
new file mode 100644
index 0000000..0833384
--- /dev/null
+++ b/SOURCES/0117-hostnamed-avoid-using-NULL-in-error-path.patch
@@ -0,0 +1,32 @@
+From 7722552d5eade35dbb6c433e82774fcd2e157232 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Mon, 6 Jan 2014 12:16:55 +0000
+Subject: [PATCH] hostnamed: avoid using NULL in error path
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1047335
+---
+ src/hostname/hostnamed.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/hostname/hostnamed.c b/src/hostname/hostnamed.c
+index 6a43aeb..0c24b65 100644
+--- a/src/hostname/hostnamed.c
++++ b/src/hostname/hostnamed.c
+@@ -637,7 +637,7 @@ static int connect_bus(DBusConnection **_bus) {
+         if (!bus) {
+                 log_error("Failed to get system D-Bus connection: %s", bus_error_message(&error));
+                 r = -ECONNREFUSED;
+-                goto fail;
++                goto fail2;
+         }
+ 
+         dbus_connection_set_exit_on_disconnect(bus, FALSE);
+@@ -669,7 +669,7 @@ static int connect_bus(DBusConnection **_bus) {
+ fail:
+         dbus_connection_close(bus);
+         dbus_connection_unref(bus);
+-
++fail2:
+         dbus_error_free(&error);
+ 
+         return r;
diff --git a/SOURCES/0118-core-do-not-segfault-if-swap-activity-happens-when-p.patch b/SOURCES/0118-core-do-not-segfault-if-swap-activity-happens-when-p.patch
new file mode 100644
index 0000000..2e0f1ad
--- /dev/null
+++ b/SOURCES/0118-core-do-not-segfault-if-swap-activity-happens-when-p.patch
@@ -0,0 +1,87 @@
+From 80b37e95f732ab5de22fda0d8d14c7d58ac29877 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Sun, 12 Jan 2014 11:38:56 -0500
+Subject: [PATCH] core: do not segfault if swap activity happens when
+ /proc/swaps is not open
+
+In https://bugzilla.redhat.com/show_bug.cgi?id=969795 systemd crashes
+in swap_dispatch_reload called from manager_loop becuase m->proc_swaps
+is NULL. It can legitimately be NULL if something went wrong when
+initially enumerating swap devices when starting the manager. This
+is probably a sign of significant trouble, but let's do our best
+to recover.
+---
+ src/core/swap.c | 45 +++++++++++++++++++++++++++++----------------
+ 1 file changed, 29 insertions(+), 16 deletions(-)
+
+diff --git a/src/core/swap.c b/src/core/swap.c
+index 147f710..f295b65 100644
+--- a/src/core/swap.c
++++ b/src/core/swap.c
+@@ -1068,14 +1068,40 @@ static int swap_load_proc_swaps(Manager *m, bool set_flags) {
+         return r;
+ }
+ 
++static int open_proc_swaps(Manager *m) {
++        if (!m->proc_swaps) {
++                struct epoll_event ev = {
++                        .events = EPOLLPRI,
++                        .data.ptr = &m->swap_watch,
++                };
++
++                m->proc_swaps = fopen("/proc/swaps", "re");
++                if (!m->proc_swaps)
++                        return (errno == ENOENT) ? 0 : -errno;
++
++                m->swap_watch.type = WATCH_SWAP;
++                m->swap_watch.fd = fileno(m->proc_swaps);
++
++                if (epoll_ctl(m->epoll_fd, EPOLL_CTL_ADD, m->swap_watch.fd, &ev) < 0)
++                        return -errno;
++        }
++
++        return 0;
++}
++
+ int swap_dispatch_reload(Manager *m) {
+         /* This function should go as soon as the kernel properly notifies us */
++        int r;
+ 
+         if (_likely_(!m->request_reload))
+                 return 0;
+ 
+         m->request_reload = false;
+ 
++        r = open_proc_swaps(m);
++        if (r < 0)
++                return r;
++
+         return swap_fd_event(m, EPOLLPRI);
+ }
+ 
+@@ -1225,22 +1251,9 @@ static int swap_enumerate(Manager *m) {
+         int r;
+         assert(m);
+ 
+-        if (!m->proc_swaps) {
+-                struct epoll_event ev = {
+-                        .events = EPOLLPRI,
+-                        .data.ptr = &m->swap_watch,
+-                };
+-
+-                m->proc_swaps = fopen("/proc/swaps", "re");
+-                if (!m->proc_swaps)
+-                        return (errno == ENOENT) ? 0 : -errno;
+-
+-                m->swap_watch.type = WATCH_SWAP;
+-                m->swap_watch.fd = fileno(m->proc_swaps);
+-
+-                if (epoll_ctl(m->epoll_fd, EPOLL_CTL_ADD, m->swap_watch.fd, &ev) < 0)
+-                        return -errno;
+-        }
++        r = open_proc_swaps(m);
++        if (r < 0)
++                return r;
+ 
+         r = swap_load_proc_swaps(m, false);
+         if (r < 0)
diff --git a/SOURCES/0119-kernel-install-add-h-help.patch b/SOURCES/0119-kernel-install-add-h-help.patch
new file mode 100644
index 0000000..43f033b
--- /dev/null
+++ b/SOURCES/0119-kernel-install-add-h-help.patch
@@ -0,0 +1,69 @@
+From ced01b28f5e44cc708ae7af681919e4dc83da169 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Sun, 8 Dec 2013 07:46:46 -0500
+Subject: [PATCH] kernel-install: add -h/--help
+
+---
+ src/kernel-install/kernel-install | 21 ++++++++++++++-------
+ 1 file changed, 14 insertions(+), 7 deletions(-)
+
+diff --git a/src/kernel-install/kernel-install b/src/kernel-install/kernel-install
+index 9d3e75d..f5ff362 100644
+--- a/src/kernel-install/kernel-install
++++ b/src/kernel-install/kernel-install
+@@ -21,9 +21,9 @@
+ 
+ usage()
+ {
+-    echo "Usage:" >&2
+-    echo "        $0 add <kernel-version> <kernel-image>" >&2
+-    echo "        $0 remove <kernel-version> <kernel-image>" >&2
++    echo "Usage:"
++    echo "        $0 add KERNEL-VERSION KERNEL-IMAGE"
++    echo "        $0 remove KERNEL-VERSION KERNEL-IMAGE"
+ }
+ 
+ dropindirs_sort()
+@@ -54,6 +54,13 @@ dropindirs_sort()
+ 
+ export LC_COLLATE=C
+ 
++for i in "$@"; do
++    if [ "$i" == "--help" -o "$i" == "-h" ]; then
++        usage
++        exit 0
++    fi
++done
++
+ if [[ "${0##*/}" == 'installkernel' ]]; then
+     COMMAND='add'
+ else
+@@ -75,7 +82,7 @@ if ! [[ $MACHINE_ID ]]; then
+ fi
+ 
+ if [[ ! $COMMAND ]] || [[ ! $KERNEL_VERSION ]]; then
+-    usage
++    echo "Not enough arguments" >&2
+     exit 1
+ fi
+ 
+@@ -90,8 +97,8 @@ readarray -t PLUGINS < <(
+ 
+ case $COMMAND in
+     add)
+-        if [[ ! $KERNEL_IMAGE ]]; then
+-            usage
++        if [[ ! "$KERNEL_IMAGE" ]]; then
++            echo "Command 'add' requires an argument" >&2
+             exit 1
+         fi
+ 
+@@ -121,7 +128,7 @@ case $COMMAND in
+         ;;
+ 
+     *)
+-        usage
++        echo "Unknown command '$COMMAND'" >&2
+         exit 1
+         ;;
+ esac
diff --git a/SOURCES/0120-kernel-install-fix-help-output.patch b/SOURCES/0120-kernel-install-fix-help-output.patch
new file mode 100644
index 0000000..5fb2323
--- /dev/null
+++ b/SOURCES/0120-kernel-install-fix-help-output.patch
@@ -0,0 +1,25 @@
+From 13279ea569e963ac8cd7062a33108c209b9e2308 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?S=C3=A9bastien=20Luttringer?= <seblu@seblu.net>
+Date: Thu, 5 Dec 2013 02:55:05 +0100
+Subject: [PATCH] kernel-install: fix help output
+
+Kernel install doesn't need the second argument on his command line when
+removing.
+This is correctly documented in the man page.
+---
+ src/kernel-install/kernel-install | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/kernel-install/kernel-install b/src/kernel-install/kernel-install
+index f5ff362..3ae1d77 100644
+--- a/src/kernel-install/kernel-install
++++ b/src/kernel-install/kernel-install
+@@ -23,7 +23,7 @@ usage()
+ {
+     echo "Usage:"
+     echo "        $0 add KERNEL-VERSION KERNEL-IMAGE"
+-    echo "        $0 remove KERNEL-VERSION KERNEL-IMAGE"
++    echo "        $0 remove KERNEL-VERSION"
+ }
+ 
+ dropindirs_sort()
diff --git a/SOURCES/0121-man-improve-wording-and-comma-usage-in-systemd.journ.patch b/SOURCES/0121-man-improve-wording-and-comma-usage-in-systemd.journ.patch
new file mode 100644
index 0000000..5eb475b
--- /dev/null
+++ b/SOURCES/0121-man-improve-wording-and-comma-usage-in-systemd.journ.patch
@@ -0,0 +1,67 @@
+From 4984e8c420d3e091d5e42094bbf5e38721702dad Mon Sep 17 00:00:00 2001
+From: "Jason St. John" <jstjohn@purdue.edu>
+Date: Tue, 10 Dec 2013 00:10:03 -0500
+Subject: [PATCH] man: improve wording and comma usage in
+ systemd.journal-fields(7)
+
+Improve wording under "Description" and "_KERNEL_DEVICE="
+---
+ man/systemd.journal-fields.xml | 16 ++++++++--------
+ 1 file changed, 8 insertions(+), 8 deletions(-)
+
+diff --git a/man/systemd.journal-fields.xml b/man/systemd.journal-fields.xml
+index 8a15598..bb89ed5 100644
+--- a/man/systemd.journal-fields.xml
++++ b/man/systemd.journal-fields.xml
+@@ -51,14 +51,14 @@
+                 <title>Description</title>
+ 
+                 <para>Entries in the journal resemble an environment
+-                block in their syntax, however with fields that can
++                block in their syntax but with fields that can
+                 include binary data. Primarily, fields are formatted
+                 UTF-8 text strings, and binary formatting is used only
+                 where formatting as UTF-8 text strings makes little
+                 sense. New fields may freely be defined by
+                 applications, but a few fields have special
+                 meaning. All fields with special meanings are
+-                optional. In some cases fields may appear more than
++                optional. In some cases, fields may appear more than
+                 once per entry.</para>
+         </refsect1>
+ 
+@@ -176,7 +176,7 @@
+                                 <term><varname>_UID=</varname></term>
+                                 <term><varname>_GID=</varname></term>
+                                 <listitem>
+-                                        <para>The process, user and
++                                        <para>The process, user, and
+                                         group ID of the process the
+                                         journal entry originates from
+                                         formatted as a decimal
+@@ -190,7 +190,7 @@
+                                 <term><varname>_CMDLINE=</varname></term>
+                                 <listitem>
+                                         <para>The name, the executable
+-                                        path and the command line of
++                                        path, and the command line of
+                                         the process the journal entry
+                                         originates from.</para>
+                                 </listitem>
+@@ -389,12 +389,12 @@
+                                         the major and minor of the
+                                         device node, separated by <literal>:</literal>
+                                         and prefixed by <literal>b</literal>. Similar
+-                                        for character devices, but
++                                        for character devices but
+                                         prefixed by <literal>c</literal>. For network
+-                                        devices the interface index,
++                                        devices, this is the interface index
+                                         prefixed by <literal>n</literal>. For all other
+-                                        devices <literal>+</literal> followed by the
+-                                        subsystem name, followed by
++                                        devices, this is the subsystem name
++                                        prefixed by <literal>+</literal>, followed by
+                                         <literal>:</literal>, followed by the kernel
+                                         device name.</para>
+                                 </listitem>
diff --git a/SOURCES/0122-drop-several-entries-from-kbd-model-map-whose-kbd-la.patch b/SOURCES/0122-drop-several-entries-from-kbd-model-map-whose-kbd-la.patch
new file mode 100644
index 0000000..1d3fb33
--- /dev/null
+++ b/SOURCES/0122-drop-several-entries-from-kbd-model-map-whose-kbd-la.patch
@@ -0,0 +1,84 @@
+From b39fc4c896dffbe14d14b17dab68961027194856 Mon Sep 17 00:00:00 2001
+From: Adam Williamson <awilliam@redhat.com>
+Date: Mon, 9 Dec 2013 21:58:34 -0800
+Subject: [PATCH] drop several entries from kbd-model-map whose kbd layouts do
+ not exist
+
+kbd-model-map was generated from system-config-keyboard's keyboard_models.py.
+Several of the kbd layouts referred in that file do not exist and, so far as I
+can tell, never did. I believe these entries existed simply to provide the xkb
+configuration information for those layouts, and there never were matching kbd
+entries; the kbd names were entirely notional, to satisfy the need for some
+entry or other in that field.
+
+For systemd, the only function of kbd-model-map is to 'match' kbd and xkb
+configurations, so it does not make any sense to maintain entries for cases
+where only one or the other exists in this context.
+---
+ src/locale/kbd-model-map | 12 ------------
+ 1 file changed, 12 deletions(-)
+
+diff --git a/src/locale/kbd-model-map b/src/locale/kbd-model-map
+index 1fe9bca..78c7887 100644
+--- a/src/locale/kbd-model-map
++++ b/src/locale/kbd-model-map
+@@ -4,22 +4,18 @@ sg			ch	pc105		de_nodeadkeys	terminate:ctrl_alt_bksp
+ nl			nl	pc105		-		terminate:ctrl_alt_bksp
+ mk-utf			mk,us	pc105		-		terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll
+ trq			tr	pc105		-		terminate:ctrl_alt_bksp
+-guj			in,us	pc105		guj		terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll
+ uk			gb	pc105		-		terminate:ctrl_alt_bksp
+ is-latin1		is	pc105		-		terminate:ctrl_alt_bksp
+ de			de	pc105		-		terminate:ctrl_alt_bksp
+-gur			gur,us	pc105		-		terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll
+ la-latin1		latam	pc105		-		terminate:ctrl_alt_bksp
+ us			us	pc105+inet	-		terminate:ctrl_alt_bksp
+ ko			kr	pc105		-		terminate:ctrl_alt_bksp
+ ro-std			ro	pc105		std		terminate:ctrl_alt_bksp
+ de-latin1		de	pc105		-		terminate:ctrl_alt_bksp
+-tml-inscript		in,us	pc105		tam		terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll
+ slovene			si	pc105		-		terminate:ctrl_alt_bksp
+ hu101			hu	pc105		qwerty		terminate:ctrl_alt_bksp
+ jp106			jp	jp106		-		terminate:ctrl_alt_bksp
+ croat			hr	pc105		-		terminate:ctrl_alt_bksp
+-ben-probhat		in,us	pc105		ben_probhat	terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll
+ fi-latin1		fi	pc105		-		terminate:ctrl_alt_bksp
+ it2			it	pc105		-		terminate:ctrl_alt_bksp
+ hu			hu	pc105		-		terminate:ctrl_alt_bksp
+@@ -29,7 +25,6 @@ fr_CH			ch	pc105		fr		terminate:ctrl_alt_bksp
+ dk-latin1		dk	pc105		-		terminate:ctrl_alt_bksp
+ fr			fr	pc105		-		terminate:ctrl_alt_bksp
+ it			it	pc105		-		terminate:ctrl_alt_bksp
+-tml-uni			in,us	pc105		tam_TAB		terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll
+ ua-utf			ua,us	pc105		-		terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll
+ fr-latin1		fr	pc105		-		terminate:ctrl_alt_bksp
+ sg-latin1		ch	pc105		de_nodeadkeys	terminate:ctrl_alt_bksp
+@@ -39,16 +34,12 @@ fr-pc			fr	pc105		-		terminate:ctrl_alt_bksp
+ bg_pho-utf8		bg,us	pc105		,phonetic	terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll
+ it-ibm			it	pc105		-		terminate:ctrl_alt_bksp
+ cz-us-qwertz		cz,us	pc105		-		terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll
+-ar-digits		ara,us	pc105		digits		terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll
+ br-abnt2		br	abnt2		-		terminate:ctrl_alt_bksp
+ ro			ro	pc105		-		terminate:ctrl_alt_bksp
+ us-acentos		us	pc105		intl		terminate:ctrl_alt_bksp
+ pt-latin1		pt	pc105		-		terminate:ctrl_alt_bksp
+ ro-std-cedilla		ro	pc105		std_cedilla	terminate:ctrl_alt_bksp
+ tj			tj	pc105		-		terminate:ctrl_alt_bksp
+-ar-qwerty		ara,us	pc105		qwerty		terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll
+-ar-azerty-digits	ara,us	pc105		azerty_digits	terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll
+-ben			in,us	pc105		ben		terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll
+ de-latin1-nodeadkeys	de	pc105		nodeadkeys	terminate:ctrl_alt_bksp
+ no			no	pc105		-		terminate:ctrl_alt_bksp
+ bg_bds-utf8		bg,us	pc105		-		terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll
+@@ -60,11 +51,8 @@ pl2			pl	pc105		-		terminate:ctrl_alt_bksp
+ es			es	pc105		-		terminate:ctrl_alt_bksp
+ ro-cedilla		ro	pc105		cedilla		terminate:ctrl_alt_bksp
+ ie			ie	pc105		-		terminate:ctrl_alt_bksp
+-ar-azerty		ara,us	pc105		azerty		terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll
+-ar-qwerty-digits	ara,us	pc105		qwerty_digits	terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll
+ et			ee	pc105		-		terminate:ctrl_alt_bksp
+ sk-qwerty		sk	pc105		-		terminate:ctrl_alt_bksp,qwerty
+-dev			dev,us	pc105		-		terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll
+ fr-latin9		fr	pc105		latin9		terminate:ctrl_alt_bksp
+ fr_CH-latin1		ch	pc105		fr		terminate:ctrl_alt_bksp
+ cf			ca	pc105		-		terminate:ctrl_alt_bksp
diff --git a/SOURCES/0123-correct-name-of-Tajik-kbd-layout-in-kbd-model-map.patch b/SOURCES/0123-correct-name-of-Tajik-kbd-layout-in-kbd-model-map.patch
new file mode 100644
index 0000000..b7509f7
--- /dev/null
+++ b/SOURCES/0123-correct-name-of-Tajik-kbd-layout-in-kbd-model-map.patch
@@ -0,0 +1,22 @@
+From ccc70cad7ae319fcff491bbd657b2ff06d4d3ee8 Mon Sep 17 00:00:00 2001
+From: Adam Williamson <awilliam@redhat.com>
+Date: Mon, 9 Dec 2013 22:02:25 -0800
+Subject: [PATCH] correct name of Tajik kbd layout in kbd-model-map
+
+---
+ src/locale/kbd-model-map | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/locale/kbd-model-map b/src/locale/kbd-model-map
+index 78c7887..322c0a9 100644
+--- a/src/locale/kbd-model-map
++++ b/src/locale/kbd-model-map
+@@ -39,7 +39,7 @@ ro			ro	pc105		-		terminate:ctrl_alt_bksp
+ us-acentos		us	pc105		intl		terminate:ctrl_alt_bksp
+ pt-latin1		pt	pc105		-		terminate:ctrl_alt_bksp
+ ro-std-cedilla		ro	pc105		std_cedilla	terminate:ctrl_alt_bksp
+-tj			tj	pc105		-		terminate:ctrl_alt_bksp
++tj_alt-UTF8		tj	pc105		-		terminate:ctrl_alt_bksp
+ de-latin1-nodeadkeys	de	pc105		nodeadkeys	terminate:ctrl_alt_bksp
+ no			no	pc105		-		terminate:ctrl_alt_bksp
+ bg_bds-utf8		bg,us	pc105		-		terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll
diff --git a/SOURCES/0124-hwdb-Update-database-of-Bluetooth-company-identifier.patch b/SOURCES/0124-hwdb-Update-database-of-Bluetooth-company-identifier.patch
new file mode 100644
index 0000000..fba8d02
--- /dev/null
+++ b/SOURCES/0124-hwdb-Update-database-of-Bluetooth-company-identifier.patch
@@ -0,0 +1,35 @@
+From 3ec8c3972d2a93027ce2b07a22b3ee8fdfb447cc Mon Sep 17 00:00:00 2001
+From: Marcel Holtmann <marcel@holtmann.org>
+Date: Tue, 10 Dec 2013 03:17:39 -0800
+Subject: [PATCH] hwdb: Update database of Bluetooth company identifiers
+
+---
+ hwdb/20-bluetooth-vendor-product.hwdb | 18 ++++++++++++++++++
+ 1 file changed, 18 insertions(+)
+
+diff --git a/hwdb/20-bluetooth-vendor-product.hwdb b/hwdb/20-bluetooth-vendor-product.hwdb
+index dcc25bb..6f8301f 100644
+--- a/hwdb/20-bluetooth-vendor-product.hwdb
++++ b/hwdb/20-bluetooth-vendor-product.hwdb
+@@ -821,3 +821,21 @@ bluetooth:v010F*
+ 
+ bluetooth:v0110*
+  ID_VENDOR_FROM_DATABASE=Nippon Seiki Co., Ltd.
++
++bluetooth:v0111*
++ ID_VENDOR_FROM_DATABASE=Steelseries ApS
++
++bluetooth:v0112*
++ ID_VENDOR_FROM_DATABASE=vyzybl Inc.
++
++bluetooth:v0113*
++ ID_VENDOR_FROM_DATABASE=Openbrain Technologies, Co., Ltd.
++
++bluetooth:v0114*
++ ID_VENDOR_FROM_DATABASE=Xensr
++
++bluetooth:v0115*
++ ID_VENDOR_FROM_DATABASE=e.solutions
++
++bluetooth:v0116*
++ ID_VENDOR_FROM_DATABASE=1OAK Technologies
diff --git a/SOURCES/0125-Ensure-unit-is-journaled-for-short-lived-or-oneshot-.patch b/SOURCES/0125-Ensure-unit-is-journaled-for-short-lived-or-oneshot-.patch
new file mode 100644
index 0000000..1c804b0
--- /dev/null
+++ b/SOURCES/0125-Ensure-unit-is-journaled-for-short-lived-or-oneshot-.patch
@@ -0,0 +1,33 @@
+From 3bdb6f693180ae6a64af158ddf23fb1335380e48 Mon Sep 17 00:00:00 2001
+From: Dan McGee <dan@archlinux.org>
+Date: Sun, 8 Dec 2013 13:27:05 -0600
+Subject: [PATCH] Ensure unit is journaled for short-lived or oneshot processes
+
+In the time it takes to process incoming log messages, the process we
+are logging details for may exit. This means the cgroup data is no
+longer available from '/proc'. Unfortunately, the way the code was
+structured before, we never log _SYSTEMD_UNIT if we don't have this
+cgroup information.
+
+Add an else if case that allows the passed in unit_id to be logged even
+if we couldn't capture cgroup information. This ensures a command like
+`journalctl -u run-XXX` will return all log messages from a oneshot
+process.
+---
+ src/journal/journald-server.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/src/journal/journald-server.c b/src/journal/journald-server.c
+index a0a8e9c..1fcb3d5 100644
+--- a/src/journal/journald-server.c
++++ b/src/journal/journald-server.c
+@@ -626,6 +626,9 @@ static void dispatch_message_real(
+                         }
+ 
+                         free(c);
++                } else if (unit_id) {
++                        x = strappenda("_SYSTEMD_UNIT=", unit_id);
++                        IOVEC_SET_STRING(iovec[n++], x);
+                 }
+ 
+ #ifdef HAVE_SELINUX
diff --git a/SOURCES/0126-core-manager-remove-infinite-loop.patch b/SOURCES/0126-core-manager-remove-infinite-loop.patch
new file mode 100644
index 0000000..c07716c
--- /dev/null
+++ b/SOURCES/0126-core-manager-remove-infinite-loop.patch
@@ -0,0 +1,25 @@
+From 31a3bfaf3da730a2d6f32a8ab9d9e10e77905d4f Mon Sep 17 00:00:00 2001
+From: Shawn Landden <shawn@churchofgit.com>
+Date: Tue, 10 Dec 2013 09:28:26 -0800
+Subject: [PATCH] core/manager: remove infinite loop
+
+---
+ src/core/manager.c | 4 +---
+ 1 file changed, 1 insertion(+), 3 deletions(-)
+
+diff --git a/src/core/manager.c b/src/core/manager.c
+index 944c196..a34a3c6 100644
+--- a/src/core/manager.c
++++ b/src/core/manager.c
+@@ -2285,10 +2285,8 @@ int manager_deserialize(Manager *m, FILE *f, FDSet *fds) {
+         }
+ 
+ finish:
+-        if (ferror(f)) {
++        if (ferror(f))
+                 r = -EIO;
+-                goto finish;
+-        }
+ 
+         assert(m->n_reloading > 0);
+         m->n_reloading --;
diff --git a/SOURCES/0127-util-check-for-overflow-in-greedy_realloc.patch b/SOURCES/0127-util-check-for-overflow-in-greedy_realloc.patch
new file mode 100644
index 0000000..b7f5d0e
--- /dev/null
+++ b/SOURCES/0127-util-check-for-overflow-in-greedy_realloc.patch
@@ -0,0 +1,34 @@
+From aa37345b6b9c0910d871d05ff028c257b657ffb7 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart@poettering.net>
+Date: Tue, 10 Dec 2013 18:53:03 +0000
+Subject: [PATCH] util: check for overflow in greedy_realloc()
+
+Conflicts:
+	src/shared/util.c
+---
+ src/shared/util.c | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/src/shared/util.c b/src/shared/util.c
+index 8a542da..e9b8255 100644
+--- a/src/shared/util.c
++++ b/src/shared/util.c
+@@ -5838,10 +5838,18 @@ void* greedy_realloc(void **p, size_t *allocated, size_t need) {
+         size_t a;
+         void *q;
+ 
++        assert(p);
++        assert(allocated);
++
+         if (*allocated >= need)
+                 return *p;
+ 
+         a = MAX(64u, need * 2);
++
++        /* check for overflows */
++        if (a < need)
++                return NULL;
++
+         q = realloc(*p, a);
+         if (!q)
+                 return NULL;
diff --git a/SOURCES/0128-journald-use-a-bit-more-cleanup-magic.patch b/SOURCES/0128-journald-use-a-bit-more-cleanup-magic.patch
new file mode 100644
index 0000000..2a7e2f8
--- /dev/null
+++ b/SOURCES/0128-journald-use-a-bit-more-cleanup-magic.patch
@@ -0,0 +1,35 @@
+From f1a8d50c069f57f0b9d23c81e50686bc8a2e43b7 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart@poettering.net>
+Date: Tue, 10 Dec 2013 19:51:47 +0000
+Subject: [PATCH] journald: use a bit more cleanup magic!
+
+---
+ src/journal/journald-stream.c | 8 +-------
+ 1 file changed, 1 insertion(+), 7 deletions(-)
+
+diff --git a/src/journal/journald-stream.c b/src/journal/journald-stream.c
+index 4080622..771a2bd 100644
+--- a/src/journal/journald-stream.c
++++ b/src/journal/journald-stream.c
+@@ -75,7 +75,7 @@ struct StdoutStream {
+ 
+ static int stdout_stream_log(StdoutStream *s, const char *p) {
+         struct iovec iovec[N_IOVEC_META_FIELDS + 5];
+-        char *message = NULL, *syslog_priority = NULL, *syslog_facility = NULL, *syslog_identifier = NULL;
++        _cleanup_free_ char *message = NULL, *syslog_priority = NULL, *syslog_facility = NULL, *syslog_identifier = NULL;
+         unsigned n = 0;
+         int priority;
+         char *label = NULL;
+@@ -128,12 +128,6 @@ static int stdout_stream_log(StdoutStream *s, const char *p) {
+ #endif
+ 
+         server_dispatch_message(s->server, iovec, n, ELEMENTSOF(iovec), &s->ucred, NULL, label, label_len, s->unit_id, priority, 0);
+-
+-        free(message);
+-        free(syslog_priority);
+-        free(syslog_facility);
+-        free(syslog_identifier);
+-
+         return 0;
+ }
+ 
diff --git a/SOURCES/0129-activate-clean-up-inherited-descriptors.patch b/SOURCES/0129-activate-clean-up-inherited-descriptors.patch
new file mode 100644
index 0000000..3467859
--- /dev/null
+++ b/SOURCES/0129-activate-clean-up-inherited-descriptors.patch
@@ -0,0 +1,77 @@
+From 25854e394d661eeb661c6974f01b492f55868307 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Tue, 10 Dec 2013 21:52:11 -0500
+Subject: [PATCH] activate: clean up inherited descriptors
+
+> [simon@troela server]$ /usr/lib/systemd/systemd-activate -l 9000 main.js
+> Assertion 'fd == 3 + count' failed at src/activate/activate.c:115,
+> function open_sockets(). Aborting.
+> Aborted (core dumped)
+
+> after a bit debuging i found the problem:
+> slim appears to leak an fd into all of its children:
+> stat /proc/14004/fd/3  (14004 is the pid a random process in my session)
+>  File: '/proc/14004/fd/3' -> '/var/log/slim.log'
+
+systemd-activate should be robust against the shell (or anything else) leaking
+descriptors. Now everything except stdin/stdout/stderr and received sockets
+will be closed.
+---
+ src/activate/activate.c | 23 +++++++++++++++++++----
+ 1 file changed, 19 insertions(+), 4 deletions(-)
+
+diff --git a/src/activate/activate.c b/src/activate/activate.c
+index a9461bc..6aa8b9f 100644
+--- a/src/activate/activate.c
++++ b/src/activate/activate.c
+@@ -137,6 +137,17 @@ static int open_sockets(int *epoll_fd, bool accept) {
+                 count ++;
+         }
+ 
++        /* Close logging and all other descriptors */
++        if (arg_listen) {
++                int except[3 + n];
++
++                for (fd = 0; fd < SD_LISTEN_FDS_START + n; fd++)
++                        except[fd] = fd;
++
++                log_close();
++                close_all_fds(except, 3 + n);
++        }
++
+         /** Note: we leak some fd's on error here. I doesn't matter
+          *  much, since the program will exit immediately anyway, but
+          *  would be a pain to fix.
+@@ -147,6 +158,7 @@ static int open_sockets(int *epoll_fd, bool accept) {
+ 
+                 fd = make_socket_fd(*address, SOCK_STREAM | (arg_accept*SOCK_CLOEXEC));
+                 if (fd < 0) {
++                        log_open();
+                         log_error("Failed to open '%s': %s", *address, strerror(-fd));
+                         return fd;
+                 }
+@@ -154,6 +166,9 @@ static int open_sockets(int *epoll_fd, bool accept) {
+                 count ++;
+         }
+ 
++        if (arg_listen)
++                log_open();
++
+         *epoll_fd = epoll_create1(EPOLL_CLOEXEC);
+         if (*epoll_fd < 0) {
+                 log_error("Failed to create epoll object: %m");
+@@ -298,10 +313,10 @@ static void sigchld_hdl(int sig, siginfo_t *t, void *data) {
+ 
+ static int install_chld_handler(void) {
+         int r;
+-        struct sigaction act;
+-        zero(act);
+-        act.sa_flags = SA_SIGINFO;
+-        act.sa_sigaction = sigchld_hdl;
++        struct sigaction act = {
++                .sa_flags = SA_SIGINFO,
++                .sa_sigaction = sigchld_hdl,
++        };
+ 
+         r = sigaction(SIGCHLD, &act, 0);
+         if (r < 0)
diff --git a/SOURCES/0130-man-explain-in-more-detail-how-SYSTEMD_READY-influen.patch b/SOURCES/0130-man-explain-in-more-detail-how-SYSTEMD_READY-influen.patch
new file mode 100644
index 0000000..845b047
--- /dev/null
+++ b/SOURCES/0130-man-explain-in-more-detail-how-SYSTEMD_READY-influen.patch
@@ -0,0 +1,95 @@
+From f0f727fbb8576afc7ea31f2b6aacccdd565472d0 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart@poettering.net>
+Date: Wed, 11 Dec 2013 18:38:51 +0100
+Subject: [PATCH] man: explain in more detail how SYSTEMD_READY= influences
+ SYSTEMD_WANTS= in udev rules
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1026860
+---
+ man/systemd.device.xml | 45 +++++++++++++++++++++++++++++++--------------
+ 1 file changed, 31 insertions(+), 14 deletions(-)
+
+diff --git a/man/systemd.device.xml b/man/systemd.device.xml
+index 96ebe89..002b647 100644
+--- a/man/systemd.device.xml
++++ b/man/systemd.device.xml
+@@ -70,12 +70,15 @@
+                 since no device-specific options may be
+                 configured.</para>
+ 
+-                <para>systemd will automatically create dynamic device
+-                units for all kernel devices that are marked with the
+-                "systemd" udev tag (by default all block and network
+-                devices, and a few others). This may be used to define
+-                dependencies between devices and other
+-                units.</para>
++                <para>systemd will dynamically create device units for
++                all kernel devices that are marked with the "systemd"
++                udev tag (by default all block and network devices,
++                and a few others). This may be used to define
++                dependencies between devices and other units. To tag a
++                udev device use <literal>TAG+="systemd"</literal> in
++                the udev rules file, see
++                <citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry>
++                for details.</para>
+ 
+                 <para>Device units are named after the
+                 <filename>/sys</filename> and
+@@ -93,7 +96,7 @@
+ 
+                 <para>The settings of device units may either be
+                 configured via unit files, or directly from the udev
+-                database (which is recommended). The following udev
++                database (which is recommended). The following udev device
+                 properties are understood by systemd:</para>
+ 
+                 <variablelist class='udev-directives'>
+@@ -101,16 +104,26 @@
+                                 <term><varname>SYSTEMD_WANTS=</varname></term>
+                                 <listitem><para>Adds dependencies of
+                                 type <varname>Wants</varname> from
+-                                this unit to all listed units. This
++                                the device unit to all listed units. This
+                                 may be used to activate arbitrary
+-                                units, when a specific device becomes
++                                units when a specific device becomes
+                                 available. Note that this and the
+                                 other tags are not taken into account
+                                 unless the device is tagged with the
+                                 <literal>systemd</literal> string in
+                                 the udev database, because otherwise
+                                 the device is not exposed as systemd
+-                                unit.</para></listitem>
++                                unit (see above). Note that systemd
++                                will only act on
++                                <varname>Wants</varname> dependencies
++                                when a device first becomes active, it
++                                will not act on them if they are added
++                                to devices that are already
++                                active. Use
++                                <varname>SYSTEMD_READY=</varname> (see
++                                below) to influence on which udev
++                                event to trigger the device
++                                dependencies.</para></listitem>
+                         </varlistentry>
+ 
+                         <varlistentry>
+@@ -135,10 +148,14 @@
+                                 device disappears from the udev
+                                 tree. This option is useful to support
+                                 devices that initially show up in an
+-                                uninitialized state in the tree, and for
+-                                which a changed event is generated the
+-                                moment they are fully set
+-                                up.</para></listitem>
++                                uninitialized state in the tree, and
++                                for which a <literal>changed</literal>
++                                event is generated the moment they are
++                                fully set up. Note that
++                                <varname>SYSTEMD_WANTS=</varname> (see
++                                above) is not acted on as long as
++                                <varname>SYSTEMD_READY=0</varname> is
++                                set for a device.</para></listitem>
+                         </varlistentry>
+ 
+                         <varlistentry>
diff --git a/SOURCES/0131-units-don-t-run-readahead-done-timers-in-containers.patch b/SOURCES/0131-units-don-t-run-readahead-done-timers-in-containers.patch
new file mode 100644
index 0000000..b2a01c0
--- /dev/null
+++ b/SOURCES/0131-units-don-t-run-readahead-done-timers-in-containers.patch
@@ -0,0 +1,36 @@
+From 295730ffeef69a057773ba201cb1ad9e81c187fa Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart@poettering.net>
+Date: Wed, 11 Dec 2013 23:31:34 +0100
+Subject: [PATCH] units: don't run readahead done timers in containers
+
+We don't run the collector in the container either, hence we don't need
+to stop it either.
+---
+ units/systemd-readahead-done.service.in | 1 +
+ units/systemd-readahead-done.timer      | 1 +
+ 2 files changed, 2 insertions(+)
+
+diff --git a/units/systemd-readahead-done.service.in b/units/systemd-readahead-done.service.in
+index c3b2ac5..e0d9579 100644
+--- a/units/systemd-readahead-done.service.in
++++ b/units/systemd-readahead-done.service.in
+@@ -12,6 +12,7 @@ DefaultDependencies=no
+ Conflicts=shutdown.target
+ After=default.target
+ Before=shutdown.target
++ConditionVirtualization=no
+ 
+ [Service]
+ Type=oneshot
+diff --git a/units/systemd-readahead-done.timer b/units/systemd-readahead-done.timer
+index 41bfb2b..a9f6278 100644
+--- a/units/systemd-readahead-done.timer
++++ b/units/systemd-readahead-done.timer
+@@ -12,6 +12,7 @@ DefaultDependencies=no
+ Conflicts=shutdown.target
+ After=default.target
+ Before=shutdown.target
++ConditionVirtualization=no
+ 
+ [Timer]
+ OnActiveSec=30s
diff --git a/SOURCES/0132-nspawn-complain-and-continue-if-machine-has-same-id.patch b/SOURCES/0132-nspawn-complain-and-continue-if-machine-has-same-id.patch
new file mode 100644
index 0000000..1ba1db8
--- /dev/null
+++ b/SOURCES/0132-nspawn-complain-and-continue-if-machine-has-same-id.patch
@@ -0,0 +1,63 @@
+From e16c7a905dbb6882970a13678e42816847565841 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Wed, 11 Dec 2013 22:00:33 -0500
+Subject: [PATCH] nspawn: complain and continue if machine has same id
+
+If --link-journal=host or --link-journal=guest is used, this totally
+cannot work and we exit with an error. If however --link-journal=auto
+or --link-journal=no is used, just display a warning.
+
+Having the same machine id can happen if booting from the same
+filesystem as the host. Since other things mostly function correctly,
+let's allow that.
+
+https://bugs.freedesktop.org/show_bug.cgi?id=68369
+---
+ src/nspawn/nspawn.c | 23 +++++++++++++++++++----
+ 1 file changed, 19 insertions(+), 4 deletions(-)
+
+diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c
+index db47fbd..4bc49a3 100644
+--- a/src/nspawn/nspawn.c
++++ b/src/nspawn/nspawn.c
+@@ -802,14 +802,11 @@ static int setup_hostname(void) {
+ }
+ 
+ static int setup_journal(const char *directory) {
+-        sd_id128_t machine_id;
++        sd_id128_t machine_id, this_id;
+         _cleanup_free_ char *p = NULL, *b = NULL, *q = NULL, *d = NULL;
+         char *id;
+         int r;
+ 
+-        if (arg_link_journal == LINK_NO)
+-                return 0;
+-
+         p = strappend(directory, "/etc/machine-id");
+         if (!p)
+                 return log_oom();
+@@ -833,6 +830,24 @@ static int setup_journal(const char *directory) {
+                 return r;
+         }
+ 
++        r = sd_id128_get_machine(&this_id);
++        if (r < 0) {
++                log_error("Failed to retrieve machine ID: %s", strerror(-r));
++                return r;
++        }
++
++        if (sd_id128_equal(machine_id, this_id)) {
++                log_full(arg_link_journal == LINK_AUTO ? LOG_WARNING : LOG_ERR,
++                         "Host and machine ids are equal (%s): refusing to link journals", id);
++                if (arg_link_journal == LINK_AUTO)
++                        return 0;
++                return
++                        -EEXIST;
++        }
++
++        if (arg_link_journal == LINK_NO)
++                return 0;
++
+         free(p);
+         p = strappend("/var/log/journal/", id);
+         q = strjoin(directory, "/var/log/journal/", id, NULL);
diff --git a/SOURCES/0133-man-beef-up-ExecStart-description.patch b/SOURCES/0133-man-beef-up-ExecStart-description.patch
new file mode 100644
index 0000000..0100ab5
--- /dev/null
+++ b/SOURCES/0133-man-beef-up-ExecStart-description.patch
@@ -0,0 +1,150 @@
+From 1e09f64d4735563be7b7f7e98d727ba15fe6a523 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Sat, 14 Dec 2013 17:21:55 -0500
+Subject: [PATCH] man: beef up ExecStart description
+
+We have lots of questions from people who assume that shell syntax works
+here, so let's be very explicit what is allowed and what is not. A few
+examples should also help.
+
+http://bugs.debian.org/732156
+---
+ man/systemd.service.xml | 97 ++++++++++++++++++++++++++++++++++++++++---------
+ 1 file changed, 80 insertions(+), 17 deletions(-)
+
+diff --git a/man/systemd.service.xml b/man/systemd.service.xml
+index 3f31c11..ca297ba 100644
+--- a/man/systemd.service.xml
++++ b/man/systemd.service.xml
+@@ -305,9 +305,10 @@
+                                 <term><varname>ExecStart=</varname></term>
+                                 <listitem><para>Commands with their
+                                 arguments that are executed when this
+-                                service is started. The first
+-                                argument must be an absolute path
+-                                name.</para>
++                                service is started. For each of the
++                                specified commands, the first argument
++                                must be an absolute and literal path
++                                to an executable.</para>
+ 
+                                 <para>When <varname>Type</varname> is
+                                 not <option>oneshot</option>, only one
+@@ -332,6 +333,35 @@
+                                 prior assignments of this option will
+                                 have no effect.</para>
+ 
++                                <para>Each command line is split on
++                                whitespace, with the first item being
++                                the command to execute, and the
++                                subsequent items being the arguments.
++                                Double quotes ("...") and single
++                                quotes ('...') may be used, in which
++                                case everything until the next
++                                matching quote becomes part of the
++                                same argument. Quotes themselves are
++                                removed after parsing. In addition, a
++                                trailing backslash
++                                (<literal>\</literal>) may be used to
++                                merge lines. This syntax is intended
++                                to be very similar to shell syntax,
++                                but only the meta-characters and
++                                expansions described in the following
++                                paragraphs are understood.
++                                Specifically, redirection using
++                                <literal>&lt;</literal>,
++                                <literal>&lt;&lt;</literal>,
++                                <literal>&gt;</literal>, and
++                                <literal>&gt;&gt;</literal>, pipes
++                                using <literal>|</literal>, and
++                                running programs in the background
++                                using <literal>&amp;</literal>
++                                and <emphasis>other elements of shell
++                                syntax are not supported</emphasis>.
++                                </para>
++
+                                 <para>If more than one command is
+                                 specified, the commands are invoked
+                                 one by one sequentially in the order
+@@ -350,10 +380,11 @@
+                                 <para>The command line accepts
+                                 <literal>%</literal> specifiers as
+                                 described in
+-                                <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>. Note
+-                                that the first argument of the command
+-                                line (i.e. the program to execute) may
+-                                not include specifiers.</para>
++                                <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
++                                Note that the first argument of the
++                                command line (i.e. the program to
++                                execute) may not include
++                                specifiers.</para>
+ 
+                                 <para>Basic environment variable
+                                 substitution is supported. Use
+@@ -372,9 +403,7 @@
+                                 more arguments. To pass literal dollar sign
+                                 use <literal>$$</literal>. Note that the first
+                                 argument (i.e. the program to execute)
+-                                may not be a variable, since it must
+-                                be a literal and absolute path
+-                                name.</para>
++                                may not be a variable.</para>
+ 
+                                 <para>Optionally, if the absolute file
+                                 name is prefixed with
+@@ -402,13 +431,47 @@
+                                 <programlisting>ExecStart=/bin/sh -c 'dmesg | tac'
+                                 </programlisting>
+ 
+-                                <para>For services run by a user
+-                                instance of systemd the special
+-                                environment variable
+-                                <varname>$MANAGERPID</varname> is set
+-                                to the PID of the systemd
+-                                instance.</para>
+-                                </listitem>
++                                <para>Only select environment variables
++                                are set for executed commands. See
++                                <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
++                                </para>
++
++                                <para>Example:</para>
++                                <programlisting>ExecStart=/bin/echo one ; /bin/echo "two two"
++                                </programlisting>
++                                <para>This will execute
++                                <command>/bin/echo</command> two
++                                times, each time with one argument,
++                                <literal>one</literal> and
++                                <literal>two two</literal>,
++                                respectively. Since two commands are
++                                specified
++                                <varname>Type=oneshot</varname> must
++                                be used.</para>
++
++                                <para>Example:</para>
++                                <programlisting>ExecStart=/bin/echo / &gt;/dev/null &amp; \; \
++/bin/ls
++                                </programlisting>
++                                <para>This will execute
++                                <command>/bin/echo</command> with five
++                                arguments: <literal>/</literal>,
++                                <literal>&gt;/dev/null</literal>,
++                                <literal>&amp;</literal>,
++                                <literal>;</literal>, and
++                                <literal>/bin/ls</literal>.</para>
++
++                                <para>Example:</para>
++                                <programlisting>Environment="ONE=one" 'TWO=two two'
++ExecStart=/bin/echo $ONE $TWO ${TWO}
++                                </programlisting>
++                                <para>This will execute
++                                <command>/bin/echo</command> with four
++                                arguments: <literal>one</literal>,
++                                <literal>two</literal>,
++                                <literal>two</literal>, and
++                                <literal>two two</literal>.</para>
++                              </listitem>
+                         </varlistentry>
+ 
+                         <varlistentry>
diff --git a/SOURCES/0134-man-remove-advice-to-avoid-setting-the-same-var-more.patch b/SOURCES/0134-man-remove-advice-to-avoid-setting-the-same-var-more.patch
new file mode 100644
index 0000000..c5fc953
--- /dev/null
+++ b/SOURCES/0134-man-remove-advice-to-avoid-setting-the-same-var-more.patch
@@ -0,0 +1,53 @@
+From 69924ed702e14592ba0aae1510fca652c7d306df Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Sat, 14 Dec 2013 17:30:25 -0500
+Subject: [PATCH] man: remove advice to avoid setting the same var more than
+ once
+
+So far the compatibility with .desktop settings hasn't been imporant
+at all, and we do not want people to write convoluted unit
+files.
+---
+ man/systemd.service.xml |  6 +-----
+ man/systemd.unit.xml    | 11 +++++++++++
+ 2 files changed, 12 insertions(+), 5 deletions(-)
+
+diff --git a/man/systemd.service.xml b/man/systemd.service.xml
+index ca297ba..8f9137c 100644
+--- a/man/systemd.service.xml
++++ b/man/systemd.service.xml
+@@ -321,11 +321,7 @@
+                                 (these semicolons must be passed as
+                                 separate words). Alternatively, this
+                                 directive may be specified more than
+-                                once with the same effect. However,
+-                                the latter syntax is not recommended
+-                                for compatibility with parsers
+-                                suitable for XDG
+-                                <filename>.desktop</filename> files.
++                                once with the same effect.
+                                 Lone semicolons may be escaped as
+                                 <literal>\;</literal>. If the empty
+                                 string is assigned to this option, the
+diff --git a/man/systemd.unit.xml b/man/systemd.unit.xml
+index 029392c..77127ff 100644
+--- a/man/systemd.unit.xml
++++ b/man/systemd.unit.xml
+@@ -120,6 +120,17 @@
+                 <citerefentry><refentrytitle>systemd.scope</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
+                 </para>
+ 
++                <para>Various settings are allowed to be specified
++                more than once, in which case the interpretation
++                depends on the setting. Often, multiple settings form
++                a list, and setting to an empty value "resets", which
++                means that previous assignments are ignored. When this
++                is allowed, it is mentioned in the description of the
++                setting. Note that using multiple assignments to the
++                same value makes the unit file incompatible with
++                parsers for the XDG <filename>.desktop</filename> file
++                format.</para>
++
+                 <para>Unit files are loaded from a set of paths
+                 determined during compilation, described in the next section.
+                 </para>
diff --git a/SOURCES/0135-systemctl-add-the-plain-option-to-the-help-message.patch b/SOURCES/0135-systemctl-add-the-plain-option-to-the-help-message.patch
new file mode 100644
index 0000000..23dd90e
--- /dev/null
+++ b/SOURCES/0135-systemctl-add-the-plain-option-to-the-help-message.patch
@@ -0,0 +1,23 @@
+From f1150c21ae7c7b337c29c12624046eccebc6b636 Mon Sep 17 00:00:00 2001
+From: Djalal Harouni <tixxdz@opendz.org>
+Date: Sun, 15 Dec 2013 00:05:38 +0100
+Subject: [PATCH] systemctl: add the --plain option to the help message
+
+---
+ src/systemctl/systemctl.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c
+index 1d68b38..d29133c 100644
+--- a/src/systemctl/systemctl.c
++++ b/src/systemctl/systemctl.c
+@@ -4745,7 +4745,8 @@ static int systemctl_help(void) {
+                "     --root=PATH      Enable unit files in the specified root directory\n"
+                "  -n --lines=INTEGER  Number of journal entries to show\n"
+                "  -o --output=STRING  Change journal output mode (short, short-monotonic,\n"
+-               "                      verbose, export, json, json-pretty, json-sse, cat)\n\n"
++               "                      verbose, export, json, json-pretty, json-sse, cat)\n"
++               "     --plain          Print unit dependencies as a list instead of a tree\n\n"
+                "Unit Commands:\n"
+                "  list-units                      List loaded units\n"
+                "  list-sockets                    List loaded sockets ordered by address\n"
diff --git a/SOURCES/0136-Fix-a-few-resource-leaks-in-error-paths.patch b/SOURCES/0136-Fix-a-few-resource-leaks-in-error-paths.patch
new file mode 100644
index 0000000..0e9ce24
--- /dev/null
+++ b/SOURCES/0136-Fix-a-few-resource-leaks-in-error-paths.patch
@@ -0,0 +1,67 @@
+From c26444ca9751a1f7cec28f8140b9674cec2ee3ce Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Sun, 15 Dec 2013 16:25:04 -0500
+Subject: [PATCH] Fix a few resource leaks in error paths
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1043304
+
+Conflicts:
+	src/libsystemd-bus/bus-objects.c
+	src/udev/net/link-config.c
+---
+ src/sleep/sleep.c | 15 +++++++--------
+ 1 file changed, 7 insertions(+), 8 deletions(-)
+
+diff --git a/src/sleep/sleep.c b/src/sleep/sleep.c
+index a56ab89..f96987f 100644
+--- a/src/sleep/sleep.c
++++ b/src/sleep/sleep.c
+@@ -57,15 +57,14 @@ static int write_mode(char **modes) {
+         return r;
+ }
+ 
+-static int write_state(FILE *f0, char **states) {
+-        FILE _cleanup_fclose_ *f = f0;
++static int write_state(FILE **f, char **states) {
+         char **state;
+         int r = 0;
+ 
+         STRV_FOREACH(state, states) {
+                 int k;
+ 
+-                k = write_string_to_file(f, *state);
++                k = write_string_to_file(*f, *state);
+                 if (k == 0)
+                         return 0;
+                 log_debug("Failed to write '%s' to /sys/power/state: %s",
+@@ -73,9 +72,9 @@ static int write_state(FILE *f0, char **states) {
+                 if (r == 0)
+                         r = k;
+ 
+-                fclose(f);
+-                f = fopen("/sys/power/state", "we");
+-                if (!f) {
++                fclose(*f);
++                *f = fopen("/sys/power/state", "we");
++                if (!*f) {
+                         log_error("Failed to open /sys/power/state: %m");
+                         return -errno;
+                 }
+@@ -87,7 +86,7 @@ static int write_state(FILE *f0, char **states) {
+ static int execute(char **modes, char **states) {
+         char* arguments[4];
+         int r;
+-        FILE *f;
++        _cleanup_fclose_ FILE *f = NULL;
+         const char* note = strappenda("SLEEP=", arg_verb);
+ 
+         /* This file is opened first, so that if we hit an error,
+@@ -115,7 +114,7 @@ static int execute(char **modes, char **states) {
+                    note,
+                    NULL);
+ 
+-        r = write_state(f, states);
++        r = write_state(&f, states);
+         if (r < 0)
+                 return r;
+ 
diff --git a/SOURCES/0137-Fix-a-few-signed-unsigned-format-string-issues.patch b/SOURCES/0137-Fix-a-few-signed-unsigned-format-string-issues.patch
new file mode 100644
index 0000000..1991645
--- /dev/null
+++ b/SOURCES/0137-Fix-a-few-signed-unsigned-format-string-issues.patch
@@ -0,0 +1,81 @@
+From fbf1747793446a4779dbd503ba07d3e0cb3cd360 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Sun, 15 Dec 2013 16:26:27 -0500
+Subject: [PATCH] Fix a few signed/unsigned format string issues
+
+Since numbers involved are all small, behaviour was correct already.
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1043304
+---
+ src/shared/time-util.c         |  2 +-
+ src/udev/udev-builtin-net_id.c | 21 +++++++--------------
+ 2 files changed, 8 insertions(+), 15 deletions(-)
+
+diff --git a/src/shared/time-util.c b/src/shared/time-util.c
+index 81d4ede..d31401b 100644
+--- a/src/shared/time-util.c
++++ b/src/shared/time-util.c
+@@ -382,7 +382,7 @@ void dual_timestamp_deserialize(const char *value, dual_timestamp *t) {
+         assert(value);
+         assert(t);
+ 
+-        if (sscanf(value, "%lli %llu", &a, &b) != 2)
++        if (sscanf(value, "%llu %llu", &a, &b) != 2)
+                 log_debug("Failed to parse finish timestamp value %s", value);
+         else {
+                 t->realtime = a;
+diff --git a/src/udev/udev-builtin-net_id.c b/src/udev/udev-builtin-net_id.c
+index d9de46d..b3cb04b 100644
+--- a/src/udev/udev-builtin-net_id.c
++++ b/src/udev/udev-builtin-net_id.c
+@@ -170,23 +170,17 @@ out:
+ 
+ static int dev_pci_slot(struct udev_device *dev, struct netnames *names) {
+         struct udev *udev = udev_device_get_udev(names->pcidev);
+-        unsigned int domain;
+-        unsigned int bus;
+-        unsigned int slot;
+-        unsigned int func;
+-        unsigned int dev_id = 0;
++        unsigned domain, bus, slot, func, dev_id = 0;
+         size_t l;
+         char *s;
+         const char *attr;
+         struct udev_device *pci = NULL;
+-        char slots[256];
+-        DIR *dir;
++        char slots[256], str[256];
++        _cleanup_closedir_ DIR *dir = NULL;
+         struct dirent *dent;
+-        char str[256];
+-        int hotplug_slot = 0;
+-        int err = 0;
++        int hotplug_slot = 0, err = 0;
+ 
+-        if (sscanf(udev_device_get_sysname(names->pcidev), "%x:%x:%x.%d", &domain, &bus, &slot, &func) != 4)
++        if (sscanf(udev_device_get_sysname(names->pcidev), "%x:%x:%x.%u", &domain, &bus, &slot, &func) != 4)
+                 return -ENOENT;
+ 
+         /* kernel provided multi-device index */
+@@ -243,7 +237,6 @@ static int dev_pci_slot(struct udev_device *dev, struct netnames *names) {
+                 if (hotplug_slot > 0)
+                         break;
+         }
+-        closedir(dir);
+ 
+         if (hotplug_slot > 0) {
+                 s = names->pci_slot;
+@@ -345,11 +338,11 @@ static int names_bcma(struct udev_device *dev, struct netnames *names) {
+                 return -ENOENT;
+ 
+         /* bus num:core num */
+-        if (sscanf(udev_device_get_sysname(bcmadev), "bcma%*d:%d", &core) != 1)
++        if (sscanf(udev_device_get_sysname(bcmadev), "bcma%*u:%u", &core) != 1)
+                 return -EINVAL;
+         /* suppress the common core == 0 */
+         if (core > 0)
+-                snprintf(names->bcma_core, sizeof(names->bcma_core), "b%d", core);
++                snprintf(names->bcma_core, sizeof(names->bcma_core), "b%u", core);
+ 
+         names->type = NET_BCMA;
+         return 0;
diff --git a/SOURCES/0138-journal-file-protect-against-alloca-0.patch b/SOURCES/0138-journal-file-protect-against-alloca-0.patch
new file mode 100644
index 0000000..c069194
--- /dev/null
+++ b/SOURCES/0138-journal-file-protect-against-alloca-0.patch
@@ -0,0 +1,23 @@
+From d3bf15d0b7c461aae4d97fe6425a6f0cea277222 Mon Sep 17 00:00:00 2001
+From: Thomas Hindoe Paaboel Andersen <phomes@gmail.com>
+Date: Mon, 16 Dec 2013 23:35:30 +0100
+Subject: [PATCH] journal-file: protect against alloca(0)
+
+---
+ src/journal/journal-file.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/src/journal/journal-file.c b/src/journal/journal-file.c
+index 962cdd6..ebf72f3 100644
+--- a/src/journal/journal-file.c
++++ b/src/journal/journal-file.c
+@@ -2730,7 +2730,8 @@ int journal_file_copy_entry(JournalFile *from, JournalFile *to, Object *o, uint6
+         ts.realtime = le64toh(o->entry.realtime);
+ 
+         n = journal_file_entry_n_items(o);
+-        items = alloca(sizeof(EntryItem) * n);
++        /* alloca() can't take 0, hence let's allocate at least one */
++        items = alloca(sizeof(EntryItem) * MAX(1u, n));
+ 
+         for (i = 0; i < n; i++) {
+                 uint64_t l, h;
diff --git a/SOURCES/0139-man-describe-journalctl-show-cursor.patch b/SOURCES/0139-man-describe-journalctl-show-cursor.patch
new file mode 100644
index 0000000..e858676
--- /dev/null
+++ b/SOURCES/0139-man-describe-journalctl-show-cursor.patch
@@ -0,0 +1,42 @@
+From d6be31a099e36738c48a322466f080701a39d1a9 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Mon, 16 Dec 2013 23:40:00 -0500
+Subject: [PATCH] man: describe journalctl --show-cursor
+
+---
+ man/journalctl.xml | 22 +++++++++++++++++-----
+ 1 file changed, 17 insertions(+), 5 deletions(-)
+
+diff --git a/man/journalctl.xml b/man/journalctl.xml
+index b5a0c53..dd8cb18 100644
+--- a/man/journalctl.xml
++++ b/man/journalctl.xml
+@@ -565,11 +565,23 @@
+                         <varlistentry>
+                                 <term><option>--after-cursor=</option></term>
+ 
+-                                <listitem><para>Start showing entries from the
+-                                location in the journal
+-                                <emphasis>after</emphasis> the location
+-                                specified by the this cursor.
+-                                </para></listitem>
++                                <listitem><para>Start showing entries
++                                from the location in the journal
++                                <emphasis>after</emphasis> the
++                                location specified by the this cursor.
++                                The cursor is shown when the
++                                <option>--show-cursor</option> option
++                                is used.</para></listitem>
++                        </varlistentry>
++
++                        <varlistentry>
++                                <term><option>--show-cursor</option></term>
++
++                                <listitem><para>The cursor is shown after the last
++                                entry after two dashes:</para>
++                                <programlisting>-- cursor: s=0639...</programlisting>
++                                <para>The format of this the cursor is private
++                                and subject ot change.</para></listitem>
+                         </varlistentry>
+ 
+                         <varlistentry>
diff --git a/SOURCES/0140-journal-fix-against-theoretical-undefined-behavior.patch b/SOURCES/0140-journal-fix-against-theoretical-undefined-behavior.patch
new file mode 100644
index 0000000..b7737e3
--- /dev/null
+++ b/SOURCES/0140-journal-fix-against-theoretical-undefined-behavior.patch
@@ -0,0 +1,39 @@
+From 072cebc2c736bec33e90299b49d82976c12b5549 Mon Sep 17 00:00:00 2001
+From: Shawn Landden <shawn@churchofgit.com>
+Date: Mon, 16 Dec 2013 15:41:00 -0800
+Subject: [PATCH] journal: fix against (theoretical) undefined behavior
+
+While all the libc implementations I know return NULL when memchr's size
+parameter is 0, without accessing any memory, passing NULL to memchr is
+still invalid:
+
+C11 7.24.1p2: Where an argument declared as "size_t n" specifies the length
+of the array for a function, n can have the value zero on a call to that
+function. Unless explicitly stated otherwise in the description of a
+particular function in this subclause, pointer arguments on such a call
+shall still have valid values, as described in 7.1.4. On such a call, a
+function that locates a character finds no occurrence, a function that
+compares two character sequences returns zero, and a function that copies
+characters copies zero characters.
+
+see http://llvm.org/bugs/show_bug.cgi?id=18247
+---
+ src/journal/journal-file.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/src/journal/journal-file.c b/src/journal/journal-file.c
+index ebf72f3..2c0fd0c 100644
+--- a/src/journal/journal-file.c
++++ b/src/journal/journal-file.c
+@@ -1010,7 +1010,10 @@ static int journal_file_append_data(
+         if (r < 0)
+                 return r;
+ 
+-        eq = memchr(data, '=', size);
++        if (!data)
++                eq = NULL;
++        else
++                eq = memchr(data, '=', size);
+         if (eq && eq > data) {
+                 uint64_t fp;
+                 Object *fo;
diff --git a/SOURCES/0141-journald-downgrade-warning-message-when-dev-kmsg-doe.patch b/SOURCES/0141-journald-downgrade-warning-message-when-dev-kmsg-doe.patch
new file mode 100644
index 0000000..2ba9527
--- /dev/null
+++ b/SOURCES/0141-journald-downgrade-warning-message-when-dev-kmsg-doe.patch
@@ -0,0 +1,24 @@
+From b92a3a82b9bfdce438821f6f941f81ef2b4dd9e1 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart@poettering.net>
+Date: Tue, 17 Dec 2013 19:56:06 +0100
+Subject: [PATCH] journald: downgrade warning message when /dev/kmsg does not
+ exist
+
+---
+ src/journal/journald-kmsg.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/src/journal/journald-kmsg.c b/src/journal/journald-kmsg.c
+index 21649d0..9895808 100644
+--- a/src/journal/journald-kmsg.c
++++ b/src/journal/journald-kmsg.c
+@@ -382,7 +382,8 @@ int server_open_dev_kmsg(Server *s) {
+ 
+         s->dev_kmsg_fd = open("/dev/kmsg", O_RDWR|O_CLOEXEC|O_NONBLOCK|O_NOCTTY);
+         if (s->dev_kmsg_fd < 0) {
+-                log_warning("Failed to open /dev/kmsg, ignoring: %m");
++                log_full(errno == ENOENT ? LOG_DEBUG : LOG_WARNING,
++                         "Failed to open /dev/kmsg, ignoring: %m");
+                 return 0;
+         }
+ 
diff --git a/SOURCES/0142-journal-file.c-remove-redundant-assignment-of-variab.patch b/SOURCES/0142-journal-file.c-remove-redundant-assignment-of-variab.patch
new file mode 100644
index 0000000..7d152a1
--- /dev/null
+++ b/SOURCES/0142-journal-file.c-remove-redundant-assignment-of-variab.patch
@@ -0,0 +1,24 @@
+From cbd7e523d1bccde7fc1ad2ca18c74b8ee00f2940 Mon Sep 17 00:00:00 2001
+From: Thomas Hindoe Paaboel Andersen <phomes@gmail.com>
+Date: Tue, 17 Dec 2013 20:15:45 +0100
+Subject: [PATCH] journal-file.c: remove redundant assignment of variable
+
+we also do 'last_index = (uint64_t) -1;' at the end of the while
+loop so there is no reason to also do it here.
+---
+ src/journal/journal-file.c | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/src/journal/journal-file.c b/src/journal/journal-file.c
+index 2c0fd0c..9f04c58 100644
+--- a/src/journal/journal-file.c
++++ b/src/journal/journal-file.c
+@@ -1628,8 +1628,6 @@ static int generic_array_bisect(
+                                         else
+                                                 left = y + 1;
+                                 }
+-
+-                                last_index = (uint64_t) -1;
+                         }
+ 
+                         for (;;) {
diff --git a/SOURCES/0143-login-Don-t-stop-a-running-user-manager-from-garbage.patch b/SOURCES/0143-login-Don-t-stop-a-running-user-manager-from-garbage.patch
new file mode 100644
index 0000000..d0aa0b2
--- /dev/null
+++ b/SOURCES/0143-login-Don-t-stop-a-running-user-manager-from-garbage.patch
@@ -0,0 +1,33 @@
+From 85e0484fedb9f4cf0220e19a5207a3923326fb7f Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Thomas=20B=C3=A4chler?= <thomas@archlinux.org>
+Date: Sun, 15 Dec 2013 12:06:37 +0100
+Subject: [PATCH] login: Don't stop a running user manager from
+ garbage-collecting the user.
+
+With the current logic, a user will never be garbage-collected, since its
+manager will always be around. Change the logic such that a user is
+garbage-collected when it has no sessions and linger is disabled.
+
+Conflicts:
+	src/login/logind-user.c
+---
+ src/login/logind-user.c | 6 ------
+ 1 file changed, 6 deletions(-)
+
+diff --git a/src/login/logind-user.c b/src/login/logind-user.c
+index adbe638..e2fce5c 100644
+--- a/src/login/logind-user.c
++++ b/src/login/logind-user.c
+@@ -629,12 +629,6 @@ int user_check_gc(User *u, bool drop_not_started) {
+         if (u->slice_job || u->service_job)
+                 return 1;
+ 
+-        if (u->slice && manager_unit_is_active(u->manager, u->slice) != 0)
+-                return 1;
+-
+-        if (u->service && manager_unit_is_active(u->manager, u->service) != 0)
+-                return 1;
+-
+         return 0;
+ }
+ 
diff --git a/SOURCES/0144-log-when-we-log-to-dev-console-and-got-disconnected-.patch b/SOURCES/0144-log-when-we-log-to-dev-console-and-got-disconnected-.patch
new file mode 100644
index 0000000..5af8230
--- /dev/null
+++ b/SOURCES/0144-log-when-we-log-to-dev-console-and-got-disconnected-.patch
@@ -0,0 +1,42 @@
+From 87823e84ec7b0e6939596063c540219a681bbbb9 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart@poettering.net>
+Date: Wed, 18 Dec 2013 16:49:15 +0100
+Subject: [PATCH] log: when we log to /dev/console and got disconnected (maybe
+ due to vhangup) reconnect
+
+---
+ src/shared/log.c | 21 +++++++++++++++++++--
+ 1 file changed, 19 insertions(+), 2 deletions(-)
+
+diff --git a/src/shared/log.c b/src/shared/log.c
+index 8f4995a..605d069 100644
+--- a/src/shared/log.c
++++ b/src/shared/log.c
+@@ -337,8 +337,25 @@ static int write_to_console(
+                 IOVEC_SET_STRING(iovec[n++], ANSI_HIGHLIGHT_OFF);
+         IOVEC_SET_STRING(iovec[n++], "\n");
+ 
+-        if (writev(console_fd, iovec, n) < 0)
+-                return -errno;
++        if (writev(console_fd, iovec, n) < 0) {
++
++                if (errno == EIO && getpid() == 1) {
++
++                        /* If somebody tried to kick us from our
++                         * console tty (via vhangup() or suchlike),
++                         * try to reconnect */
++
++                        log_close_console();
++                        log_open_console();
++
++                        if (console_fd < 0)
++                                return 0;
++
++                        if (writev(console_fd, iovec, n) < 0)
++                                return -errno;
++                } else
++                        return -errno;
++        }
+ 
+         return 1;
+ }
diff --git a/SOURCES/0145-loginctl-when-showing-device-tree-of-seats-with-no-d.patch b/SOURCES/0145-loginctl-when-showing-device-tree-of-seats-with-no-d.patch
new file mode 100644
index 0000000..983678c
--- /dev/null
+++ b/SOURCES/0145-loginctl-when-showing-device-tree-of-seats-with-no-d.patch
@@ -0,0 +1,23 @@
+From 63c96665d60fd219410eb213b2e2fd83ef242616 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart@poettering.net>
+Date: Wed, 18 Dec 2013 17:16:33 +0100
+Subject: [PATCH] loginctl: when showing device tree of seats with no devices
+ show something useful
+
+---
+ src/login/sysfs-show.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/src/login/sysfs-show.c b/src/login/sysfs-show.c
+index 3c03bd1..14de7d8 100644
+--- a/src/login/sysfs-show.c
++++ b/src/login/sysfs-show.c
+@@ -182,6 +182,8 @@ int show_sysfs(const char *seat, const char *prefix, unsigned n_columns) {
+         first = udev_enumerate_get_list_entry(e);
+         if (first)
+                 show_sysfs_one(udev, seat, &first, "/", prefix, n_columns);
++        else
++                printf("%s%s%s\n", prefix, draw_special_char(DRAW_TREE_RIGHT), "(none)");
+ 
+ finish:
+         if (e)
diff --git a/SOURCES/0146-man-be-more-explicit-about-option-arguments-that-tak.patch b/SOURCES/0146-man-be-more-explicit-about-option-arguments-that-tak.patch
new file mode 100644
index 0000000..a0d5914
--- /dev/null
+++ b/SOURCES/0146-man-be-more-explicit-about-option-arguments-that-tak.patch
@@ -0,0 +1,52 @@
+From 44d5ed4f1e398188bad5283fd75b91594de54cd0 Mon Sep 17 00:00:00 2001
+From: "Jason St. John" <jstjohn@purdue.edu>
+Date: Tue, 17 Dec 2013 18:48:43 -0500
+Subject: [PATCH] man: be more explicit about option arguments that take
+ 128-bit IDs in journalctl(1)
+
+It may not be immediately obvious to the reader what "ID128" is, so replace the
+example option argument "ID128" with "128-bit-ID".
+---
+ man/journalctl.xml | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/man/journalctl.xml b/man/journalctl.xml
+index dd8cb18..2ee1647 100644
+--- a/man/journalctl.xml
++++ b/man/journalctl.xml
+@@ -714,7 +714,7 @@
+ 
+                         <varlistentry>
+                                 <term><option>--list-catalog
+-                                <optional><replaceable>ID128...</replaceable></optional>
++                                <optional><replaceable>128-bit-ID...</replaceable></optional>
+                                 </option></term>
+ 
+                                 <listitem><para>List the contents of
+@@ -723,7 +723,7 @@
+                                 description strings.</para>
+ 
+                                 <para>If any
+-                                <replaceable>ID128</replaceable>s are
++                                <replaceable>128-bit-ID</replaceable>s are
+                                 specified, only those entries are shown.
+                                 </para>
+                                 </listitem>
+@@ -731,7 +731,7 @@
+ 
+                         <varlistentry>
+                                 <term><option>--dump-catalog
+-                                <optional><replaceable>ID128...</replaceable></optional>
++                                <optional><replaceable>128-bit-ID...</replaceable></optional>
+                                 </option></term>
+ 
+                                 <listitem><para>Show the contents of
+@@ -742,7 +742,7 @@
+                                 files.</para>
+ 
+                                 <para>If any
+-                                <replaceable>ID128</replaceable>s are
++                                <replaceable>128-bit-ID</replaceable>s are
+                                 specified, only those entries are shown.
+                                 </para>
+                                 </listitem>
diff --git a/SOURCES/0147-man-add-DOI-for-refereed-article-on-Forward-Secure-S.patch b/SOURCES/0147-man-add-DOI-for-refereed-article-on-Forward-Secure-S.patch
new file mode 100644
index 0000000..247541f
--- /dev/null
+++ b/SOURCES/0147-man-add-DOI-for-refereed-article-on-Forward-Secure-S.patch
@@ -0,0 +1,59 @@
+From 214ead7a0ff493e8961e0368ece5414d1409c4cf Mon Sep 17 00:00:00 2001
+From: "Jason St. John" <jstjohn@purdue.edu>
+Date: Tue, 17 Dec 2013 19:40:02 -0500
+Subject: [PATCH] man: add DOI for refereed article on Forward Secure Sealing
+ to journald.conf(5)
+
+In journalctl(1), be more explicit about the reference to "Seal=" in
+journald.conf(5) and what information can be found there.
+---
+ man/journalctl.xml    |  8 ++++++--
+ man/journald.conf.xml | 10 +++++-----
+ 2 files changed, 11 insertions(+), 7 deletions(-)
+
+diff --git a/man/journalctl.xml b/man/journalctl.xml
+index 2ee1647..0e188df 100644
+--- a/man/journalctl.xml
++++ b/man/journalctl.xml
+@@ -770,10 +770,14 @@
+                                 sealing key is stored in the journal
+                                 data directory and shall remain on the
+                                 host. The verification key should be
+-                                stored externally. Also see the
++                                stored externally. Refer to the
+                                 <option>Seal=</option> option in
+                                 <citerefentry><refentrytitle>journald.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+-                                for details.</para></listitem>
++                                for information on Forward Secure
++                                Sealing and for a link to a refereed
++                                scholarly paper detailing the
++                                cryptographic theory it is based on.
++                                </para></listitem>
+                         </varlistentry>
+ 
+                         <varlistentry>
+diff --git a/man/journald.conf.xml b/man/journald.conf.xml
+index 7aa2e78..8e642a3 100644
+--- a/man/journald.conf.xml
++++ b/man/journald.conf.xml
+@@ -130,15 +130,15 @@
+                                 by
+                                 <citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>'s
+                                 <option>--setup-keys</option>
+-                                command), forward secure sealing (FSS)
++                                command), Forward Secure Sealing (FSS)
+                                 for all persistent journal files is
+                                 enabled. FSS is based on <ulink
+                                 url="https://eprint.iacr.org/2013/397">Seekable
+                                 Sequential Key Generators</ulink> by
+-                                G. A. Marson and B. Poettering and
+-                                may be used to protect journal files
+-                                from unnoticed
+-                                alteration.</para></listitem>
++                                G. A. Marson and B. Poettering
++                                (doi:10.1007/978-3-642-40203-6_7)
++                                and may be used to protect journal files
++                                from unnoticed alteration.</para></listitem>
+                         </varlistentry>
+ 
+                         <varlistentry>
diff --git a/SOURCES/0148-keymap-Refactor-Acer-tables.patch b/SOURCES/0148-keymap-Refactor-Acer-tables.patch
new file mode 100644
index 0000000..c7f7417
--- /dev/null
+++ b/SOURCES/0148-keymap-Refactor-Acer-tables.patch
@@ -0,0 +1,145 @@
+From fd5f1706cda158e7a89e955f861bd34d7a8b429f Mon Sep 17 00:00:00 2001
+From: Martin Pitt <martinpitt@gnome.org>
+Date: Thu, 19 Dec 2013 08:33:32 +0100
+Subject: [PATCH] keymap: Refactor Acer tables
+
+Move common keys into generic Acer table, and factorize the model specific
+exceptions.
+---
+ hwdb/60-keyboard.hwdb | 101 ++++++++++++++++++--------------------------------
+ 1 file changed, 36 insertions(+), 65 deletions(-)
+
+diff --git a/hwdb/60-keyboard.hwdb b/hwdb/60-keyboard.hwdb
+index d4d948d..ab9e569 100644
+--- a/hwdb/60-keyboard.hwdb
++++ b/hwdb/60-keyboard.hwdb
+@@ -46,52 +46,7 @@
+ # Acer
+ ##########################################
+ 
+-# Acer platform kernel driver
+-keyboard:name:Acer WMI hotkeys:dmi:bvn*:bvr*:bd*:svn*:pnAcer*:pvr*
+- KEYBOARD_KEY_82=f21
+-
+-# Aspire 5720
+-keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnAspire*5720*:pvr*
+-keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnZG8*:pvr*
+- KEYBOARD_KEY_84=bluetooth                              # sent when bluetooth module missing, and key pressed
+- KEYBOARD_KEY_92=media                                  # Acer arcade
+- KEYBOARD_KEY_d4=bluetooth                              # Bluetooth on
+- KEYBOARD_KEY_d9=bluetooth                              # Bluetooth off
+- KEYBOARD_KEY_f4=prog3                                  # e-key
+-
+-# Aspire 5920g
+-keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnAspire*5920G:*
+- KEYBOARD_KEY_8a=media
+- KEYBOARD_KEY_92=media
+- KEYBOARD_KEY_a6=setup
+- KEYBOARD_KEY_b2=www
+- KEYBOARD_KEY_d9=bluetooth                              # (toggle) on-to-off
+-
+-# Aspire 6920
+-keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnAspire*6920:*
+- KEYBOARD_KEY_d9=bluetooth                              # (toggle) on-to-off
+- KEYBOARD_KEY_92=media
+- KEYBOARD_KEY_9e=back
+- KEYBOARD_KEY_83=rewind
+- KEYBOARD_KEY_89=fastforward
+-
+-# Aspire 8930
+-keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnAspire*8930:*
+- KEYBOARD_KEY_ca=prog3                                  # key 'HOLD' on CineDash Media Console
+- KEYBOARD_KEY_83=rewind
+- KEYBOARD_KEY_89=fastforward
+- KEYBOARD_KEY_92=media                                  # key 'ARCADE' on CineDash Media Console
+- KEYBOARD_KEY_9e=back
+-
+-# Travelmate C300
+-keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnTravelMate*C3[01]0*:pvr*
+- KEYBOARD_KEY_67=f24                                    # FIXME: rotate screen
+- KEYBOARD_KEY_68=up
+- KEYBOARD_KEY_69=down
+- KEYBOARD_KEY_6b=fn
+- KEYBOARD_KEY_6c=screenlock                             # FIXME: lock tablet device/buttons
+-
+-#
++# common keys
+ keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pn*
+ keyboard:dmi:bvn*:bvr*:bd*:svnGateway*:pnA0A1*:pvr*
+ keyboard:dmi:bvn*:bvr*:bd*:svneMachines:pneMachines*E725:pvr*
+@@ -99,6 +54,7 @@ keyboard:dmi:bvn*:bvr*:bd*:svneMachines:pneMachines*E725:pvr*
+  KEYBOARD_KEY_a6=setup                                  # Fn+F2 Acer eSettings
+  KEYBOARD_KEY_a7=battery                                # Fn+F3 Power Management
+  KEYBOARD_KEY_a9=switchvideomode                        # Fn+F5
++ KEYBOARD_KEY_b2=www
+  KEYBOARD_KEY_b3=euro
+  KEYBOARD_KEY_b4=dollar
+  KEYBOARD_KEY_ce=brightnessup                           # Fn+Right
+@@ -118,33 +74,48 @@ keyboard:dmi:bvn*:bvr*:bd*:svneMachines:pneMachines*E725:pvr*
+  KEYBOARD_KEY_f8=fn
+  KEYBOARD_KEY_f9=prog1                                  # Launch NTI shadow
+ 
+-#
++# Acer platform kernel driver
++keyboard:name:Acer WMI hotkeys:dmi:bvn*:bvr*:bd*:svn*:pnAcer*:pvr*
++ KEYBOARD_KEY_82=f21					# Touchpad toggle
++
++# Aspire models
++keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnAspire*:pvr*
++ KEYBOARD_KEY_84=bluetooth                              # sent when bluetooth module missing, and key pressed
++ KEYBOARD_KEY_d9=bluetooth                              # Bluetooth off
++ KEYBOARD_KEY_92=media                                  # Acer arcade
++
++keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnAspire*5720*:pvr*
++keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnZG8*:pvr*
++ KEYBOARD_KEY_f4=prog3                                  # e-key
++
++keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnAspire*5920G:*
++ KEYBOARD_KEY_8a=media
++ KEYBOARD_KEY_a6=setup
++
++keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnAspire*6920:*
++keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnAspire*8930:*
++ KEYBOARD_KEY_ca=prog3                                  # key 'HOLD' on CineDash Media Console
++ KEYBOARD_KEY_83=rewind
++ KEYBOARD_KEY_89=fastforward
++ KEYBOARD_KEY_9e=back
++
++# Travelmate C300
++keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnTravelMate*C3[01]0*:pvr*
++ KEYBOARD_KEY_67=f24                                    # FIXME: rotate screen
++ KEYBOARD_KEY_68=up
++ KEYBOARD_KEY_69=down
++ KEYBOARD_KEY_6b=fn
++ KEYBOARD_KEY_6c=screenlock                             # FIXME: lock tablet device/buttons
++
++# on some models this isn't brightnessup
+ keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pn*5210*:pvr*
+ keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pn*5220*:pvr*
+ keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pn*5610*:pvr*
+ keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pn*5620*:pvr*
+ keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pn*5720*:pvr*
+- KEYBOARD_KEY_ee=screenlock
+-
+-#
+-keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnTravelMate*6292*:pvr*
+-keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnTravelMate*8471*:pvr*
+ keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnTravelMate*4720*:pvr*
+-keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnTravelMate*7720*:pvr*
+-keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnAspire*1810T*:pvr*
+-keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnAO751h:*
+-keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnAO531h:*
+- KEYBOARD_KEY_d9=bluetooth
+-
+-#
+-keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnTravelMate*4720*:pvr*
+- KEYBOARD_KEY_b2=www
+- KEYBOARD_KEY_ee=screenlock
+-
+-#
+ keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnTravelMate*6593:*
+ keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnAspire*1640:*
+- KEYBOARD_KEY_b2=www
+  KEYBOARD_KEY_ee=screenlock
+ 
+ ###########################################################
diff --git a/SOURCES/0149-logind-remove-dead-variable.patch b/SOURCES/0149-logind-remove-dead-variable.patch
new file mode 100644
index 0000000..d31a83d
--- /dev/null
+++ b/SOURCES/0149-logind-remove-dead-variable.patch
@@ -0,0 +1,37 @@
+From d999e2ffa714ceda7859df25e2db296444dcbd1b Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Thu, 19 Dec 2013 14:16:46 -0500
+Subject: [PATCH] logind: remove dead variable
+
+Noticed-by: Jan Alexander Steffens <jan.steffens@gmail.com>
+---
+ src/login/logind-user.c | 3 ---
+ src/login/logind-user.h | 1 -
+ 2 files changed, 4 deletions(-)
+
+diff --git a/src/login/logind-user.c b/src/login/logind-user.c
+index e2fce5c..b87311c 100644
+--- a/src/login/logind-user.c
++++ b/src/login/logind-user.c
+@@ -648,9 +648,6 @@ UserState user_get_state(User *u) {
+ 
+         assert(u);
+ 
+-        if (u->closing)
+-                return USER_CLOSING;
+-
+         if (u->slice_job || u->service_job)
+                 return USER_OPENING;
+ 
+diff --git a/src/login/logind-user.h b/src/login/logind-user.h
+index b9171d3..a36f456 100644
+--- a/src/login/logind-user.h
++++ b/src/login/logind-user.h
+@@ -61,7 +61,6 @@ struct User {
+ 
+         bool in_gc_queue:1;
+         bool started:1;
+-        bool closing:1;
+ 
+         LIST_HEAD(Session, sessions);
+         LIST_FIELDS(User, gc_queue);
diff --git a/SOURCES/0150-hwdb-update.patch b/SOURCES/0150-hwdb-update.patch
new file mode 100644
index 0000000..27dd141
--- /dev/null
+++ b/SOURCES/0150-hwdb-update.patch
@@ -0,0 +1,4917 @@
+From 2ad4d7a28f6875caaeba0af6d093d644f995f4ff Mon Sep 17 00:00:00 2001
+From: Marcel Holtmann <marcel@holtmann.org>
+Date: Sun, 22 Dec 2013 11:32:11 -0800
+Subject: [PATCH] hwdb: update
+
+Conflicts:
+	hwdb/20-sdio-vendor-model.hwdb
+---
+ hwdb/20-OUI.hwdb              | 1174 ++++++++++++++++++++++++++++++++++++++++-
+ hwdb/20-pci-vendor-model.hwdb |  689 ++++++++++++++++++++++--
+ hwdb/20-usb-vendor-model.hwdb |  112 +++-
+ 3 files changed, 1922 insertions(+), 53 deletions(-)
+
+diff --git a/hwdb/20-OUI.hwdb b/hwdb/20-OUI.hwdb
+index 5067167..92b96ae 100644
+--- a/hwdb/20-OUI.hwdb
++++ b/hwdb/20-OUI.hwdb
+@@ -13411,6 +13411,222 @@ OUI:40D855198*
+ OUI:40D855199*
+  ID_OUI_FROM_DATABASE=PRESSOL Schmiergeraete GmbH
+ 
++OUI:40D85519A*
++ ID_OUI_FROM_DATABASE=Rohde&Schwarz Topex SA
++
++OUI:40D85519B*
++ ID_OUI_FROM_DATABASE=Northern Star Technologies
++
++OUI:40D85519C*
++ ID_OUI_FROM_DATABASE=Parris Service Corporation
++
++OUI:40D85519D*
++ ID_OUI_FROM_DATABASE=EMAC, Inc.
++
++OUI:40D85519E*
++ ID_OUI_FROM_DATABASE=Thirdwayv Inc.
++
++OUI:40D85519F*
++ ID_OUI_FROM_DATABASE=Patria Aviation Oy
++
++OUI:40D8551A0*
++ ID_OUI_FROM_DATABASE=Futaba Corporation
++
++OUI:40D8551A1*
++ ID_OUI_FROM_DATABASE=KRONOTECH SRL
++
++OUI:40D8551A2*
++ ID_OUI_FROM_DATABASE=HIPODROMO DE AGUA CALIENTE, S.A. DE C.V.
++
++OUI:40D8551A3*
++ ID_OUI_FROM_DATABASE=Noritake Itron Corporation
++
++OUI:40D8551A4*
++ ID_OUI_FROM_DATABASE=cibite AG
++
++OUI:40D8551A5*
++ ID_OUI_FROM_DATABASE=DemoPad
++
++OUI:40D8551A6*
++ ID_OUI_FROM_DATABASE=RB-LINK Wireless
++
++OUI:40D8551A7*
++ ID_OUI_FROM_DATABASE=ENTEC Electric & Electronic CO., LTD
++
++OUI:40D8551A8*
++ ID_OUI_FROM_DATABASE=Multiobrabotka
++
++OUI:40D8551A9*
++ ID_OUI_FROM_DATABASE=Lubino s.r.o.
++
++OUI:40D8551AA*
++ ID_OUI_FROM_DATABASE=Broachlink Technology Co.,Limited
++
++OUI:40D8551AB*
++ ID_OUI_FROM_DATABASE=Rosslare Enterprises Limited
++
++OUI:40D8551AC*
++ ID_OUI_FROM_DATABASE=ELAN SYSTEMS
++
++OUI:40D8551AD*
++ ID_OUI_FROM_DATABASE=WICHER DIGITAL TECHNIK
++
++OUI:40D8551AE*
++ ID_OUI_FROM_DATABASE=Autonomous Solutions, Inc
++
++OUI:40D8551AF*
++ ID_OUI_FROM_DATABASE=Vigitron Inc.
++
++OUI:40D8551B0*
++ ID_OUI_FROM_DATABASE=Shin-ei Electronic Measuring Co.,Ltd.
++
++OUI:40D8551B1*
++ ID_OUI_FROM_DATABASE=Logos 01 S.r.l.
++
++OUI:40D8551B2*
++ ID_OUI_FROM_DATABASE=AGE A. Gilg Elektronik
++
++OUI:40D8551B3*
++ ID_OUI_FROM_DATABASE=BETTINI SRL
++
++OUI:40D8551B4*
++ ID_OUI_FROM_DATABASE=Inforce Computing Inc.
++
++OUI:40D8551B5*
++ ID_OUI_FROM_DATABASE=A+EC Klein Ingenieurbuero
++
++OUI:40D8551B6*
++ ID_OUI_FROM_DATABASE=Magic Systems
++
++OUI:40D8551B7*
++ ID_OUI_FROM_DATABASE=TEWS Elektronik GmbH & Co. KG
++
++OUI:40D8551B8*
++ ID_OUI_FROM_DATABASE=Orion Systems, Inc
++
++OUI:40D8551B9*
++ ID_OUI_FROM_DATABASE=Beking Industrieele automatisering
++
++OUI:40D8551BA*
++ ID_OUI_FROM_DATABASE=Creative Lighting And Sound Systems Pty Ltd
++
++OUI:40D8551BB*
++ ID_OUI_FROM_DATABASE=Micromega Dynamics SA
++
++OUI:40D8551BC*
++ ID_OUI_FROM_DATABASE=KbDevice,Inc.
++
++OUI:40D8551BD*
++ ID_OUI_FROM_DATABASE=HORIBA ABX
++
++OUI:40D8551BE*
++ ID_OUI_FROM_DATABASE=PEEK TRAFFIC
++
++OUI:40D8551BF*
++ ID_OUI_FROM_DATABASE=shanghai mingding information tech co.Ltd
++
++OUI:40D8551C0*
++ ID_OUI_FROM_DATABASE=NPB Automation AB
++
++OUI:40D8551C1*
++ ID_OUI_FROM_DATABASE=Triamec Motion AG
++
++OUI:40D8551C2*
++ ID_OUI_FROM_DATABASE=Digital Display Systems
++
++OUI:40D8551C3*
++ ID_OUI_FROM_DATABASE=Cornfed Systems LLC
++
++OUI:40D8551C4*
++ ID_OUI_FROM_DATABASE=QED Advanced Systems Limited
++
++OUI:40D8551C6*
++ ID_OUI_FROM_DATABASE=Device Solutions Ltd
++
++OUI:40D8551C7*
++ ID_OUI_FROM_DATABASE=Wexiödisk AB
++
++OUI:40D8551C8*
++ ID_OUI_FROM_DATABASE=Sensata Technologies
++
++OUI:40D8551C9*
++ ID_OUI_FROM_DATABASE=Andy-L Ltd.
++
++OUI:40D8551CA*
++ ID_OUI_FROM_DATABASE=Rigel Engineering
++
++OUI:40D8551CB*
++ ID_OUI_FROM_DATABASE=MG S.r.l.
++
++OUI:40D8551CD*
++ ID_OUI_FROM_DATABASE=YXLON International A/S
++
++OUI:40D8551CE*
++ ID_OUI_FROM_DATABASE=Peter Huber
++
++OUI:40D8551CF*
++ ID_OUI_FROM_DATABASE=Omnik New Energy Co., Ltd
++
++OUI:40D8551D0*
++ ID_OUI_FROM_DATABASE=Webeasy BV
++
++OUI:40D8551D1*
++ ID_OUI_FROM_DATABASE=Founder Broadband Network Service Co.,Ltd.
++
++OUI:40D8551D2*
++ ID_OUI_FROM_DATABASE=InventLab s.c.
++
++OUI:40D8551D3*
++ ID_OUI_FROM_DATABASE=Kaluga Teletypes Manufacturing Plant
++
++OUI:40D8551D4*
++ ID_OUI_FROM_DATABASE=Prisma Engineering srl
++
++OUI:40D8551D5*
++ ID_OUI_FROM_DATABASE=FST21 Ltd.
++
++OUI:40D8551D6*
++ ID_OUI_FROM_DATABASE=EMS Computers Pty Ltd
++
++OUI:40D8551D7*
++ ID_OUI_FROM_DATABASE=Wheatstone Corporation
++
++OUI:40D8551D8*
++ ID_OUI_FROM_DATABASE=Owl Computing Technologies, Inc.
++
++OUI:40D8551D9*
++ ID_OUI_FROM_DATABASE=Commercial Wireless Systems International LLC.
++
++OUI:40D8551DA*
++ ID_OUI_FROM_DATABASE=Energy Technology and Control Ltd.
++
++OUI:40D8551DB*
++ ID_OUI_FROM_DATABASE=NIPPON TECHNO LAB.,INC,
++
++OUI:40D8551DC*
++ ID_OUI_FROM_DATABASE=Aplex Technology Inc.
++
++OUI:40D8551DD*
++ ID_OUI_FROM_DATABASE=BaOpt Benelux bv
++
++OUI:40D8551DE*
++ ID_OUI_FROM_DATABASE=Vidisys GmbH
++
++OUI:40D8551DF*
++ ID_OUI_FROM_DATABASE=Chengdu Meihuan Technology Co.,Ltd
++
++OUI:40D8551E0*
++ ID_OUI_FROM_DATABASE=Embedded Technology Corporation
++
++OUI:40D8551E1*
++ ID_OUI_FROM_DATABASE=AD QUALITE
++
++OUI:40D8551E2*
++ ID_OUI_FROM_DATABASE=ELNEC s.r.o.
++
++OUI:40D8551E3*
++ ID_OUI_FROM_DATABASE=Mega Electronics Ltd
++
+ OUI:000000*
+  ID_OUI_FROM_DATABASE=XEROX CORPORATION
+ 
+@@ -13664,7 +13880,7 @@ OUI:000053*
+  ID_OUI_FROM_DATABASE=COMPUCORP
+ 
+ OUI:000054*
+- ID_OUI_FROM_DATABASE=MODICON, INC.
++ ID_OUI_FROM_DATABASE=Schnieder Electric
+ 
+ OUI:000055*
+  ID_OUI_FROM_DATABASE=COMMISSARIAT A L`ENERGIE ATOM.
+@@ -13694,7 +13910,7 @@ OUI:00005D*
+  ID_OUI_FROM_DATABASE=CS TELECOM
+ 
+ OUI:00005E*
+- ID_OUI_FROM_DATABASE=USC INFORMATION SCIENCES INST
++ ID_OUI_FROM_DATABASE=ICANN, IANA Department
+ 
+ OUI:00005F*
+  ID_OUI_FROM_DATABASE=SUMITOMO ELECTRIC IND., LTD.
+@@ -17957,7 +18173,7 @@ OUI:0005ED*
+  ID_OUI_FROM_DATABASE=Technikum Joanneum GmbH
+ 
+ OUI:0005EE*
+- ID_OUI_FROM_DATABASE=BEWATOR Group
++ ID_OUI_FROM_DATABASE=Siemens AB, Infrastructure & Cities, Building Technologies Division, IC BT SSP SP BA PR
+ 
+ OUI:0005EF*
+  ID_OUI_FROM_DATABASE=ADOIR Digital Technology
+@@ -19412,7 +19628,7 @@ OUI:0007D2*
+  ID_OUI_FROM_DATABASE=Logopak Systeme GmbH & Co. KG
+ 
+ OUI:0007D3*
+- ID_OUI_FROM_DATABASE=Stork Prints B.V.
++ ID_OUI_FROM_DATABASE=SPGPrints B.V.
+ 
+ OUI:0007D4*
+  ID_OUI_FROM_DATABASE=Zhejiang Yutong Network Communication Co Ltd.
+@@ -19613,7 +19829,7 @@ OUI:000815*
+  ID_OUI_FROM_DATABASE=CATS Co., Ltd.
+ 
+ OUI:000816*
+- ID_OUI_FROM_DATABASE=Bluetags A/S
++ ID_OUI_FROM_DATABASE=Bluelon ApS
+ 
+ OUI:000817*
+  ID_OUI_FROM_DATABASE=EmergeCore Networks LLC
+@@ -29819,7 +30035,7 @@ OUI:001587*
+  ID_OUI_FROM_DATABASE=Takenaka Seisakusho Co.,Ltd
+ 
+ OUI:001588*
+- ID_OUI_FROM_DATABASE=Balda Solution Malaysia Sdn Bhd
++ ID_OUI_FROM_DATABASE=Salutica Allied Solutions Sdn Bhd
+ 
+ OUI:001589*
+  ID_OUI_FROM_DATABASE=D-MAX Technology Co.,Ltd
+@@ -33935,7 +34151,7 @@ OUI:001AE7*
+  ID_OUI_FROM_DATABASE=Aztek Networks, Inc.
+ 
+ OUI:001AE8*
+- ID_OUI_FROM_DATABASE=Siemens Enterprise Communications GmbH & Co. KG
++ ID_OUI_FROM_DATABASE=Unify GmbH and Co KG
+ 
+ OUI:001AE9*
+  ID_OUI_FROM_DATABASE=Nintendo Co., Ltd.
+@@ -36926,7 +37142,7 @@ OUI:001ECC*
+  ID_OUI_FROM_DATABASE=2Wire, Inc.
+ 
+ OUI:001ECD*
+- ID_OUI_FROM_DATABASE=2Wire, Inc.
++ ID_OUI_FROM_DATABASE=KYLAND Technology Co. LTD
+ 
+ OUI:001ECE*
+  ID_OUI_FROM_DATABASE=2Wire, Inc.
+@@ -40337,7 +40553,7 @@ OUI:002340*
+  ID_OUI_FROM_DATABASE=MiX Telematics
+ 
+ OUI:002341*
+- ID_OUI_FROM_DATABASE=Siemens AG, Infrastructure & Cities Sector, Building Technologies Division
++ ID_OUI_FROM_DATABASE=Siemens AB, Infrastructure & Cities, Building Technologies Division, IC BT SSP SP BA PR
+ 
+ OUI:002342*
+  ID_OUI_FROM_DATABASE=Coffee Equipment Company
+@@ -42200,7 +42416,7 @@ OUI:0025B8*
+  ID_OUI_FROM_DATABASE=Agile Communications, Inc.
+ 
+ OUI:0025B9*
+- ID_OUI_FROM_DATABASE=Agilink Systems Corp.
++ ID_OUI_FROM_DATABASE=Cypress Solutions Inc
+ 
+ OUI:0025BA*
+  ID_OUI_FROM_DATABASE=Alcatel-Lucent IPD
+@@ -44405,7 +44621,7 @@ OUI:004065*
+  ID_OUI_FROM_DATABASE=GTE SPACENET
+ 
+ OUI:004066*
+- ID_OUI_FROM_DATABASE=HITACHI CABLE, LTD.
++ ID_OUI_FROM_DATABASE=Hitachi Metals, Ltd.
+ 
+ OUI:004067*
+  ID_OUI_FROM_DATABASE=OMNIBYTE CORPORATION
+@@ -46100,7 +46316,7 @@ OUI:0060A3*
+  ID_OUI_FROM_DATABASE=CONTINUUM TECHNOLOGY CORP.
+ 
+ OUI:0060A4*
+- ID_OUI_FROM_DATABASE=GRINAKER SYSTEM TECHNOLOGIES
++ ID_OUI_FROM_DATABASE=GEW Technologies (PTY)Ltd
+ 
+ OUI:0060A5*
+  ID_OUI_FROM_DATABASE=PERFORMANCE TELECOM CORP.
+@@ -46904,7 +47120,7 @@ OUI:0080A1*
+  ID_OUI_FROM_DATABASE=MICROTEST, INC.
+ 
+ OUI:0080A2*
+- ID_OUI_FROM_DATABASE=Tattile SRL
++ ID_OUI_FROM_DATABASE=CREATIVE ELECTRONIC SYSTEMS
+ 
+ OUI:0080A3*
+  ID_OUI_FROM_DATABASE=Lantronix
+@@ -47188,6 +47404,9 @@ OUI:0080FF*
+ OUI:008865*
+  ID_OUI_FROM_DATABASE=Apple
+ 
++OUI:008B43*
++ ID_OUI_FROM_DATABASE=RFTECH
++
+ OUI:008C10*
+  ID_OUI_FROM_DATABASE=Black Box Corp.
+ 
+@@ -47980,6 +48199,9 @@ OUI:0091D6*
+ OUI:0091FA*
+  ID_OUI_FROM_DATABASE=Synapse Product Development
+ 
++OUI:0092FA*
++ ID_OUI_FROM_DATABASE=SHENZHEN WISKY TECHNOLOGY CO.,LTD
++
+ OUI:009363*
+  ID_OUI_FROM_DATABASE=Uni-Link Technology Co., Ltd.
+ 
+@@ -51340,6 +51562,9 @@ OUI:00E8AB*
+ OUI:00EB2D*
+  ID_OUI_FROM_DATABASE=Sony Mobile Communications AB
+ 
++OUI:00EEBD*
++ ID_OUI_FROM_DATABASE=HTC Corporation
++
+ OUI:00F051*
+  ID_OUI_FROM_DATABASE=KWB Gmbh
+ 
+@@ -51481,6 +51706,9 @@ OUI:044BFF*
+ OUI:044CEF*
+  ID_OUI_FROM_DATABASE=Fujian Sanao Technology Co.,Ltd
+ 
++OUI:044E06*
++ ID_OUI_FROM_DATABASE=Ericsson AB
++
+ OUI:044F8B*
+  ID_OUI_FROM_DATABASE=Adapteva, Inc.
+ 
+@@ -51628,6 +51856,9 @@ OUI:04DAD2*
+ OUI:04DB56*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
++OUI:04DB8A*
++ ID_OUI_FROM_DATABASE=Suntech International Ltd.
++
+ OUI:04DD4C*
+  ID_OUI_FROM_DATABASE=Velocytech
+ 
+@@ -51664,6 +51895,9 @@ OUI:04EE91*
+ OUI:04F021*
+  ID_OUI_FROM_DATABASE=Compex Systems Pte Ltd
+ 
++OUI:04F13E*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:04F17D*
+  ID_OUI_FROM_DATABASE=Tarana Wireless
+ 
+@@ -52117,6 +52351,12 @@ OUI:08008F*
+ OUI:080090*
+  ID_OUI_FROM_DATABASE=SONOMA SYSTEMS
+ 
++OUI:080371*
++ ID_OUI_FROM_DATABASE=KRG CORPORATE
++
++OUI:0805CD*
++ ID_OUI_FROM_DATABASE=DongGuang EnMai Electronic Product Co.Ltd.
++
+ OUI:0808C2*
+  ID_OUI_FROM_DATABASE=Samsung Electronics
+ 
+@@ -52204,12 +52444,21 @@ OUI:083E0C*
+ OUI:083E8E*
+  ID_OUI_FROM_DATABASE=Hon Hai Precision Ind.Co.Ltd
+ 
++OUI:083F3E*
++ ID_OUI_FROM_DATABASE=WSH GmbH
++
++OUI:083F76*
++ ID_OUI_FROM_DATABASE=Intellian Technologies, Inc.
++
+ OUI:084027*
+  ID_OUI_FROM_DATABASE=Gridstore Inc.
+ 
+ OUI:08482C*
+  ID_OUI_FROM_DATABASE=Raycore Taiwan Co., LTD.
+ 
++OUI:084929*
++ ID_OUI_FROM_DATABASE=CYBATI
++
+ OUI:084E1C*
+  ID_OUI_FROM_DATABASE=H2A Systems, LLC
+ 
+@@ -52222,6 +52471,9 @@ OUI:08512E*
+ OUI:085240*
+  ID_OUI_FROM_DATABASE=EbV Elektronikbau- und Vertriebs GmbH
+ 
++OUI:085700*
++ ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
++
+ OUI:085AE0*
+  ID_OUI_FROM_DATABASE=Recovision Technology Co., Ltd.
+ 
+@@ -52240,6 +52492,9 @@ OUI:0868D0*
+ OUI:0868EA*
+  ID_OUI_FROM_DATABASE=EITO ELECTRONICS CO., LTD.
+ 
++OUI:086DF2*
++ ID_OUI_FROM_DATABASE=Shenzhen MIMOWAVE Technology Co.,Ltd
++
+ OUI:087045*
+  ID_OUI_FROM_DATABASE=Apple
+ 
+@@ -52450,6 +52705,9 @@ OUI:0C3956*
+ OUI:0C3C65*
+  ID_OUI_FROM_DATABASE=Dome Imaging Inc
+ 
++OUI:0C3E9F*
++ ID_OUI_FROM_DATABASE=Apple, Inc
++
+ OUI:0C469D*
+  ID_OUI_FROM_DATABASE=MS Sedco
+ 
+@@ -52462,6 +52720,9 @@ OUI:0C4C39*
+ OUI:0C4DE9*
+  ID_OUI_FROM_DATABASE=Apple
+ 
++OUI:0C4F5A*
++ ID_OUI_FROM_DATABASE=ASA-RT s.r.l.
++
+ OUI:0C51F7*
+  ID_OUI_FROM_DATABASE=CHAUVIN ARNOUX
+ 
+@@ -52597,6 +52858,9 @@ OUI:0CC0C0*
+ OUI:0CC3A7*
+  ID_OUI_FROM_DATABASE=Meritec
+ 
++OUI:0CC47A*
++ ID_OUI_FROM_DATABASE=Super Micro Computer, Inc.
++
+ OUI:0CC47E*
+  ID_OUI_FROM_DATABASE=EUCAST Co., Ltd.
+ 
+@@ -52657,6 +52921,9 @@ OUI:0CDDEF*
+ OUI:0CDFA4*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
++OUI:0CE0E4*
++ ID_OUI_FROM_DATABASE=Plantronics, Inc
++
+ OUI:0CE5D3*
+  ID_OUI_FROM_DATABASE=DH electronics GmbH
+ 
+@@ -52765,6 +53032,9 @@ OUI:101F74*
+ OUI:102279*
+  ID_OUI_FROM_DATABASE=ZeroDesktop, Inc.
+ 
++OUI:1027BE*
++ ID_OUI_FROM_DATABASE=TVIP
++
+ OUI:102831*
+  ID_OUI_FROM_DATABASE=Morion Inc.
+ 
+@@ -52954,6 +53224,12 @@ OUI:10D542*
+ OUI:10DDB1*
+  ID_OUI_FROM_DATABASE=Apple
+ 
++OUI:10DDF4*
++ ID_OUI_FROM_DATABASE=Maxway Electronics CO.,LTD
++
++OUI:10DEE4*
++ ID_OUI_FROM_DATABASE=automationNEXT GmbH
++
+ OUI:10E2D5*
+  ID_OUI_FROM_DATABASE=Qi Hardware Inc.
+ 
+@@ -53155,6 +53431,12 @@ OUI:14B1C8*
+ OUI:14B73D*
+  ID_OUI_FROM_DATABASE=ARCHEAN Technologies
+ 
++OUI:14B968*
++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
++
++OUI:14C089*
++ ID_OUI_FROM_DATABASE=DUNE HD LTD
++
+ OUI:14C21D*
+  ID_OUI_FROM_DATABASE=Sabtech Industries
+ 
+@@ -53275,6 +53557,9 @@ OUI:182012*
+ OUI:182032*
+  ID_OUI_FROM_DATABASE=Apple
+ 
++OUI:1820A6*
++ ID_OUI_FROM_DATABASE=Sage Co., Ltd.
++
+ OUI:182666*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
+@@ -53386,6 +53671,9 @@ OUI:1880CE*
+ OUI:1880F5*
+  ID_OUI_FROM_DATABASE=Alcatel-Lucent Shanghai Bell Co., Ltd
+ 
++OUI:188331*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
++
+ OUI:188410*
+  ID_OUI_FROM_DATABASE=CoreTrust Inc.
+ 
+@@ -53401,6 +53689,9 @@ OUI:188796*
+ OUI:188857*
+  ID_OUI_FROM_DATABASE=Beijing Jinhong Xi-Dian Information Technology Corp.
+ 
++OUI:1889DF*
++ ID_OUI_FROM_DATABASE=CerebrEX Inc.
++
+ OUI:188ED5*
+  ID_OUI_FROM_DATABASE=TP Vision Belgium N.V. - innovation site Brugge
+ 
+@@ -53491,6 +53782,9 @@ OUI:18E288*
+ OUI:18E2C2*
+  ID_OUI_FROM_DATABASE=Samsung Electronics
+ 
++OUI:18E728*
++ ID_OUI_FROM_DATABASE=Cisco
++
+ OUI:18E7F4*
+  ID_OUI_FROM_DATABASE=Apple
+ 
+@@ -53521,6 +53815,9 @@ OUI:18FC9F*
+ OUI:18FE34*
+  ID_OUI_FROM_DATABASE=Espressif Inc.
+ 
++OUI:18FF2E*
++ ID_OUI_FROM_DATABASE=Shenzhen Rui Ying Da Technology Co., Ltd
++
+ OUI:1C0656*
+  ID_OUI_FROM_DATABASE=IDY Corporation
+ 
+@@ -53551,6 +53848,9 @@ OUI:1C184A*
+ OUI:1C19DE*
+  ID_OUI_FROM_DATABASE=eyevis GmbH
+ 
++OUI:1C1B68*
++ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
++
+ OUI:1C1D67*
+  ID_OUI_FROM_DATABASE=Shenzhen Huawei Communication Technologies Co., Ltd
+ 
+@@ -53707,6 +54007,9 @@ OUI:1CA770*
+ OUI:1CAA07*
+  ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
+ 
++OUI:1CAB01*
++ ID_OUI_FROM_DATABASE=Innovolt
++
+ OUI:1CABA7*
+  ID_OUI_FROM_DATABASE=Apple
+ 
+@@ -53770,6 +54073,9 @@ OUI:1CE62B*
+ OUI:1CE6C7*
+  ID_OUI_FROM_DATABASE=Cisco
+ 
++OUI:1CEEE8*
++ ID_OUI_FROM_DATABASE=Ilshin Elecom
++
+ OUI:1CF061*
+  ID_OUI_FROM_DATABASE=SCAPS GmbH
+ 
+@@ -53779,6 +54085,9 @@ OUI:1CF5E7*
+ OUI:1CFA68*
+  ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
+ 
++OUI:1CFCBB*
++ ID_OUI_FROM_DATABASE=Realfiction ApS
++
+ OUI:1CFEA7*
+  ID_OUI_FROM_DATABASE=IDentytech Solutins Ltd.
+ 
+@@ -53794,12 +54103,21 @@ OUI:200505*
+ OUI:2005E8*
+  ID_OUI_FROM_DATABASE=OOO InProMedia
+ 
++OUI:2008ED*
++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
++
+ OUI:200A5E*
+  ID_OUI_FROM_DATABASE=Xiangshan Giant Eagle Technology Developing co.,LTD
+ 
+ OUI:200BC7*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
++OUI:200CC8*
++ ID_OUI_FROM_DATABASE=NETGEAR INC.,
++
++OUI:200E95*
++ ID_OUI_FROM_DATABASE=IEC – TC9 WG43
++
+ OUI:20107A*
+  ID_OUI_FROM_DATABASE=Gemtek Technology Co., Ltd.
+ 
+@@ -53917,6 +54235,9 @@ OUI:207D74*
+ OUI:20858C*
+  ID_OUI_FROM_DATABASE=Assa
+ 
++OUI:2087AC*
++ ID_OUI_FROM_DATABASE=AES motomation
++
+ OUI:208984*
+  ID_OUI_FROM_DATABASE=COMPAL INFORMATION (KUNSHAN) CO., LTD
+ 
+@@ -54022,6 +54343,9 @@ OUI:20E564*
+ OUI:20E791*
+  ID_OUI_FROM_DATABASE=Siemens Healthcare Diagnostics, Inc
+ 
++OUI:20EAC7*
++ ID_OUI_FROM_DATABASE=SHENZHEN RIOPINE ELECTRONICS CO., LTD
++
+ OUI:20EEC6*
+  ID_OUI_FROM_DATABASE=Elefirst Science & Tech Co ., ltd
+ 
+@@ -54070,6 +54394,9 @@ OUI:241064*
+ OUI:241125*
+  ID_OUI_FROM_DATABASE=Hutek Co., Ltd.
+ 
++OUI:241148*
++ ID_OUI_FROM_DATABASE=Entropix, LLC
++
+ OUI:2411D0*
+  ID_OUI_FROM_DATABASE=Chongqing Ehs Science and Technology Development Co.,Ltd.
+ 
+@@ -54085,6 +54412,9 @@ OUI:241F2C*
+ OUI:2421AB*
+  ID_OUI_FROM_DATABASE=Sony Ericsson Mobile Communications
+ 
++OUI:242642*
++ ID_OUI_FROM_DATABASE=SHARP Corporation.
++
+ OUI:242FFA*
+  ID_OUI_FROM_DATABASE=Toshiba Global Commerce Solutions
+ 
+@@ -54328,6 +54658,9 @@ OUI:281878*
+ OUI:2818FD*
+  ID_OUI_FROM_DATABASE=Aditya Infotech Ltd.
+ 
++OUI:282246*
++ ID_OUI_FROM_DATABASE=Beijing Sinoix Communication Co., LTD
++
+ OUI:2826A6*
+  ID_OUI_FROM_DATABASE=PBR electronics GmbH
+ 
+@@ -54397,6 +54730,12 @@ OUI:286046*
+ OUI:286094*
+  ID_OUI_FROM_DATABASE=CAPELEC
+ 
++OUI:286336*
++ ID_OUI_FROM_DATABASE=Siemens AG - Industrial Automation - EWA
++
++OUI:28656B*
++ ID_OUI_FROM_DATABASE=Keystone Microtech Corporation
++
+ OUI:286AB8*
+  ID_OUI_FROM_DATABASE=Apple
+ 
+@@ -54451,6 +54790,9 @@ OUI:28987B*
+ OUI:289A4B*
+  ID_OUI_FROM_DATABASE=SteelSeries ApS
+ 
++OUI:289AFA*
++ ID_OUI_FROM_DATABASE=TCT Mobile Limited
++
+ OUI:289EDF*
+  ID_OUI_FROM_DATABASE=Danfoss Turbocor Compressors, Inc
+ 
+@@ -54487,6 +54829,9 @@ OUI:28BA18*
+ OUI:28BAB5*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
++OUI:28BB59*
++ ID_OUI_FROM_DATABASE=RNET Technologies, Inc.
++
+ OUI:28BE9B*
+  ID_OUI_FROM_DATABASE=Technicolor USA Inc.
+ 
+@@ -54502,6 +54847,9 @@ OUI:28C68E*
+ OUI:28C718*
+  ID_OUI_FROM_DATABASE=Altierre
+ 
++OUI:28C825*
++ ID_OUI_FROM_DATABASE=DellKing Industrial Co., Ltd
++
+ OUI:28C914*
+  ID_OUI_FROM_DATABASE=Taimag Corporation
+ 
+@@ -54547,6 +54895,9 @@ OUI:28D997*
+ OUI:28DB81*
+  ID_OUI_FROM_DATABASE=Shanghai Guao Electronic Technology Co., Ltd
+ 
++OUI:28DEF6*
++ ID_OUI_FROM_DATABASE=bioMerieux Inc.
++
+ OUI:28E02C*
+  ID_OUI_FROM_DATABASE=Apple
+ 
+@@ -54598,6 +54949,9 @@ OUI:2C00F7*
+ OUI:2C0623*
+  ID_OUI_FROM_DATABASE=Win Leader Inc.
+ 
++OUI:2C073C*
++ ID_OUI_FROM_DATABASE=DEVLINE LIMITED
++
+ OUI:2C10C1*
+  ID_OUI_FROM_DATABASE=Nintendo Co., Ltd.
+ 
+@@ -54655,6 +55009,9 @@ OUI:2C3A28*
+ OUI:2C3BFD*
+  ID_OUI_FROM_DATABASE=Netstor Technology Co., Ltd.
+ 
++OUI:2C3ECF*
++ ID_OUI_FROM_DATABASE=Cisco
++
+ OUI:2C3F38*
+  ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
+ 
+@@ -54673,6 +55030,9 @@ OUI:2C441B*
+ OUI:2C44FD*
+  ID_OUI_FROM_DATABASE=Hewlett Packard
+ 
++OUI:2C534A*
++ ID_OUI_FROM_DATABASE=Shenzhen Winyao Electronic Limited
++
+ OUI:2C542D*
+  ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
+ 
+@@ -54748,6 +55108,9 @@ OUI:2C922C*
+ OUI:2C9464*
+  ID_OUI_FROM_DATABASE=Cincoze Co., Ltd.
+ 
++OUI:2C957F*
++ ID_OUI_FROM_DATABASE=zte corporation
++
+ OUI:2C9717*
+  ID_OUI_FROM_DATABASE=I.C.Y. B.V.
+ 
+@@ -55009,6 +55372,9 @@ OUI:3092F6*
+ OUI:309BAD*
+  ID_OUI_FROM_DATABASE=BBK Electronics Corp., Ltd.,
+ 
++OUI:30A8DB*
++ ID_OUI_FROM_DATABASE=Sony Mobile Communications AB
++
+ OUI:30AABD*
+  ID_OUI_FROM_DATABASE=Shanghai Reallytek Information Technology Co.,Ltd
+ 
+@@ -55024,6 +55390,12 @@ OUI:30B216*
+ OUI:30B3A2*
+  ID_OUI_FROM_DATABASE=Shenzhen Heguang Measurement & Control Technology Co.,Ltd
+ 
++OUI:30B5C2*
++ ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
++
++OUI:30C750*
++ ID_OUI_FROM_DATABASE=MIC Technology Group
++
+ OUI:30C82A*
+  ID_OUI_FROM_DATABASE=Wi-Next s.r.l.
+ 
+@@ -55060,6 +55432,9 @@ OUI:30F31D*
+ OUI:30F33A*
+  ID_OUI_FROM_DATABASE=+plugg srl
+ 
++OUI:30F42F*
++ ID_OUI_FROM_DATABASE=ESP
++
+ OUI:30F70D*
+  ID_OUI_FROM_DATABASE=Cisco Systems
+ 
+@@ -55087,6 +55462,9 @@ OUI:3413E8*
+ OUI:34159E*
+  ID_OUI_FROM_DATABASE=Apple
+ 
++OUI:3417EB*
++ ID_OUI_FROM_DATABASE=Dell Inc PCBA Test
++
+ OUI:341A4C*
+  ID_OUI_FROM_DATABASE=SHENZHEN WEIBU ELECTRONICS CO.,LTD.
+ 
+@@ -55117,6 +55495,9 @@ OUI:343111*
+ OUI:3440B5*
+  ID_OUI_FROM_DATABASE=IBM
+ 
++OUI:34466F*
++ ID_OUI_FROM_DATABASE=HiTEM Engineering
++
+ OUI:344B3D*
+  ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Tech.Co.,Ltd.
+ 
+@@ -55126,6 +55507,9 @@ OUI:344B50*
+ OUI:344F3F*
+  ID_OUI_FROM_DATABASE=IO-Power Technology Co., Ltd.
+ 
++OUI:344F5C*
++ ID_OUI_FROM_DATABASE=R&amp;M AG
++
+ OUI:344F69*
+  ID_OUI_FROM_DATABASE=EKINOPS SAS
+ 
+@@ -55318,6 +55702,12 @@ OUI:34D7B4*
+ OUI:34DBFD*
+  ID_OUI_FROM_DATABASE=Cisco
+ 
++OUI:34DE1A*
++ ID_OUI_FROM_DATABASE=Intel Corporate
++
++OUI:34DE34*
++ ID_OUI_FROM_DATABASE=zte corporation
++
+ OUI:34DF2A*
+  ID_OUI_FROM_DATABASE=Fujikon Industrial Co.,Limited
+ 
+@@ -55456,6 +55846,9 @@ OUI:386793*
+ OUI:386BBB*
+  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+ 
++OUI:386C9B*
++ ID_OUI_FROM_DATABASE=Ivy Biomedical
++
+ OUI:386E21*
+  ID_OUI_FROM_DATABASE=Wasion Group Ltd.
+ 
+@@ -55576,9 +55969,15 @@ OUI:38ECE4*
+ OUI:38EE9D*
+  ID_OUI_FROM_DATABASE=Anedo Ltd.
+ 
++OUI:38F098*
++ ID_OUI_FROM_DATABASE=Vapor Stone Rail Systems
++
+ OUI:38F597*
+  ID_OUI_FROM_DATABASE=home2net GmbH
+ 
++OUI:38F708*
++ ID_OUI_FROM_DATABASE=National Resource Management, Inc.
++
+ OUI:38F8B7*
+  ID_OUI_FROM_DATABASE=V2COM PARTICIPACOES S.A.
+ 
+@@ -55603,9 +56002,15 @@ OUI:3C0771*
+ OUI:3C081E*
+  ID_OUI_FROM_DATABASE=Beijing Yupont Electric Power Technology Co.,Ltd
+ 
++OUI:3C08F6*
++ ID_OUI_FROM_DATABASE=Cisco
++
+ OUI:3C096D*
+  ID_OUI_FROM_DATABASE=Powerhouse Dynamics
+ 
++OUI:3C0C48*
++ ID_OUI_FROM_DATABASE=Servergy, Inc.
++
+ OUI:3C0E23*
+  ID_OUI_FROM_DATABASE=Cisco
+ 
+@@ -55639,6 +56044,9 @@ OUI:3C1A79*
+ OUI:3C1CBE*
+  ID_OUI_FROM_DATABASE=JADAK LLC
+ 
++OUI:3C25D7*
++ ID_OUI_FROM_DATABASE=Nokia Corporation
++
+ OUI:3C26D5*
+  ID_OUI_FROM_DATABASE=Sotera Wireless
+ 
+@@ -55744,6 +56152,9 @@ OUI:3C83B5*
+ OUI:3C86A8*
+  ID_OUI_FROM_DATABASE=Sangshin elecom .co,, LTD
+ 
++OUI:3C89A6*
++ ID_OUI_FROM_DATABASE=KAPELSE
++
+ OUI:3C8AB0*
+  ID_OUI_FROM_DATABASE=Juniper Networks
+ 
+@@ -55837,6 +56248,9 @@ OUI:3CD92B*
+ OUI:3CDF1E*
+  ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
+ 
++OUI:3CDFBD*
++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
++
+ OUI:3CE072*
+  ID_OUI_FROM_DATABASE=Apple
+ 
+@@ -55870,6 +56284,9 @@ OUI:3CF748*
+ OUI:3CFB96*
+  ID_OUI_FROM_DATABASE=Emcraft Systems LLC
+ 
++OUI:400107*
++ ID_OUI_FROM_DATABASE=Arista Corp
++
+ OUI:4001C6*
+  ID_OUI_FROM_DATABASE=3COM EUROPE LTD
+ 
+@@ -55948,6 +56365,9 @@ OUI:40406B*
+ OUI:404A03*
+  ID_OUI_FROM_DATABASE=ZyXEL Communications Corporation
+ 
++OUI:404A18*
++ ID_OUI_FROM_DATABASE=Addrek Smart Solutions
++
+ OUI:404D8E*
+  ID_OUI_FROM_DATABASE=Shenzhen Huawei Communication Technologies Co., Ltd
+ 
+@@ -56011,6 +56431,9 @@ OUI:407074*
+ OUI:407496*
+  ID_OUI_FROM_DATABASE=aFUN TECHNOLOGY INC.
+ 
++OUI:407875*
++ ID_OUI_FROM_DATABASE=IMBEL - Industria de Material Belico do Brasil
++
+ OUI:407A80*
+  ID_OUI_FROM_DATABASE=Nokia Corporation
+ 
+@@ -56059,6 +56482,9 @@ OUI:40A6A4*
+ OUI:40A6D9*
+  ID_OUI_FROM_DATABASE=Apple
+ 
++OUI:40A8F0*
++ ID_OUI_FROM_DATABASE=Hewlett Packard
++
+ OUI:40AC8D*
+  ID_OUI_FROM_DATABASE=Data Management, Inc.
+ 
+@@ -56164,6 +56590,9 @@ OUI:4403A7*
+ OUI:440CFD*
+  ID_OUI_FROM_DATABASE=NetMan Co., Ltd.
+ 
++OUI:4411C2*
++ ID_OUI_FROM_DATABASE=Telegartner Karl Gartner GmbH
++
+ OUI:441319*
+  ID_OUI_FROM_DATABASE=WKK TECHNOLOGY LTD.
+ 
+@@ -56182,6 +56611,9 @@ OUI:4423AA*
+ OUI:4425BB*
+  ID_OUI_FROM_DATABASE=Bamboo Entertainment Corporation
+ 
++OUI:442938*
++ ID_OUI_FROM_DATABASE=NietZsche enterprise Co.Ltd.
++
+ OUI:442A60*
+  ID_OUI_FROM_DATABASE=Apple
+ 
+@@ -56230,6 +56662,9 @@ OUI:443D21*
+ OUI:443EB2*
+  ID_OUI_FROM_DATABASE=DEOTRON Co., LTD.
+ 
++OUI:444891*
++ ID_OUI_FROM_DATABASE=HDMI Licensing, LLC
++
+ OUI:444A65*
+  ID_OUI_FROM_DATABASE=Silverflare Ltd.
+ 
+@@ -56287,6 +56722,9 @@ OUI:446D57*
+ OUI:44700B*
+  ID_OUI_FROM_DATABASE=IFFU
+ 
++OUI:447098*
++ ID_OUI_FROM_DATABASE=MING HONG TECHNOLOGY (SHEN ZHEN) LIMITED
++
+ OUI:447BC4*
+  ID_OUI_FROM_DATABASE=DualShine Technology(SZ)Co.,Ltd
+ 
+@@ -56296,6 +56734,9 @@ OUI:447C7F*
+ OUI:447DA5*
+  ID_OUI_FROM_DATABASE=VTION INFORMATION TECHNOLOGY (FUJIAN) CO.,LTD
+ 
++OUI:447E76*
++ ID_OUI_FROM_DATABASE=Trek Technology (S) Pte Ltd
++
+ OUI:447E95*
+  ID_OUI_FROM_DATABASE=Alpha and Omega, Inc
+ 
+@@ -56365,6 +56806,9 @@ OUI:44C15C*
+ OUI:44C233*
+  ID_OUI_FROM_DATABASE=Guangzhou Comet Technology Development Co.Ltd
+ 
++OUI:44C306*
++ ID_OUI_FROM_DATABASE=SIFROM Inc.
++
+ OUI:44C39B*
+  ID_OUI_FROM_DATABASE=OOO RUBEZH NPO
+ 
+@@ -56443,6 +56887,9 @@ OUI:4813F3*
+ OUI:48174C*
+  ID_OUI_FROM_DATABASE=MicroPower technologies
+ 
++OUI:481842*
++ ID_OUI_FROM_DATABASE=Shanghai Winaas Co. Equipment Co. Ltd.
++
+ OUI:481BD2*
+  ID_OUI_FROM_DATABASE=Intron Scientific co., ltd.
+ 
+@@ -56458,6 +56905,9 @@ OUI:4833DD*
+ OUI:48343D*
+  ID_OUI_FROM_DATABASE=IEP GmbH
+ 
++OUI:483D32*
++ ID_OUI_FROM_DATABASE=Syscor Controls &amp; Automation
++
+ OUI:484487*
+  ID_OUI_FROM_DATABASE=Cisco SPVTG
+ 
+@@ -56476,6 +56926,9 @@ OUI:485261*
+ OUI:485A3F*
+  ID_OUI_FROM_DATABASE=WISOL
+ 
++OUI:485AB6*
++ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
++
+ OUI:485B39*
+  ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC.
+ 
+@@ -56500,6 +56953,9 @@ OUI:486FD2*
+ OUI:487119*
+  ID_OUI_FROM_DATABASE=SGB GROUP LTD.
+ 
++OUI:48746E*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:488E42*
+  ID_OUI_FROM_DATABASE=DIGALOG GmbH
+ 
+@@ -56530,6 +56986,9 @@ OUI:48AA5D*
+ OUI:48B253*
+  ID_OUI_FROM_DATABASE=Marketaxess Corporation
+ 
++OUI:48B5A7*
++ ID_OUI_FROM_DATABASE=Glory Horse Industries Ltd.
++
+ OUI:48B8DE*
+  ID_OUI_FROM_DATABASE=HOMEWINS TECHNOLOGY CO.,LTD.
+ 
+@@ -56554,6 +57013,9 @@ OUI:48C8B6*
+ OUI:48CB6E*
+  ID_OUI_FROM_DATABASE=Cello Electronics (UK) Ltd
+ 
++OUI:48D0CF*
++ ID_OUI_FROM_DATABASE=Universal Electronics, Inc.
++
+ OUI:48D224*
+  ID_OUI_FROM_DATABASE=Liteon Technology Corporation
+ 
+@@ -56584,6 +57046,12 @@ OUI:48EB30*
+ OUI:48ED80*
+  ID_OUI_FROM_DATABASE=daesung eltec
+ 
++OUI:48EE07*
++ ID_OUI_FROM_DATABASE=Silver Palm Technologies LLC
++
++OUI:48EE86*
++ ID_OUI_FROM_DATABASE=UTStarcom (China) Co.,Ltd
++
+ OUI:48F230*
+  ID_OUI_FROM_DATABASE=Ubizcore Co.,LTD
+ 
+@@ -56605,6 +57073,9 @@ OUI:48F925*
+ OUI:48FCB8*
+  ID_OUI_FROM_DATABASE=Woodstream Corporation
+ 
++OUI:48FEEA*
++ ID_OUI_FROM_DATABASE=HOMA B.V.
++
+ OUI:4C0082*
+  ID_OUI_FROM_DATABASE=Cisco
+ 
+@@ -56626,6 +57097,9 @@ OUI:4C09B4*
+ OUI:4C0B3A*
+  ID_OUI_FROM_DATABASE=TCT Mobile Limited
+ 
++OUI:4C0DEE*
++ ID_OUI_FROM_DATABASE=JABIL CIRCUIT (SHANGHAI) LTD.
++
+ OUI:4C0F6E*
+  ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+ 
+@@ -56746,6 +57220,9 @@ OUI:4C7897*
+ OUI:4C79BA*
+  ID_OUI_FROM_DATABASE=Intel Corporate
+ 
++OUI:4C7F62*
++ ID_OUI_FROM_DATABASE=Nokia Corporation
++
+ OUI:4C804F*
+  ID_OUI_FROM_DATABASE=Armstrong Monitoring Corp
+ 
+@@ -56755,6 +57232,9 @@ OUI:4C8093*
+ OUI:4C82CF*
+  ID_OUI_FROM_DATABASE=Echostar Technologies
+ 
++OUI:4C8B30*
++ ID_OUI_FROM_DATABASE=Actiontec Electronics, Inc
++
+ OUI:4C8B55*
+  ID_OUI_FROM_DATABASE=Grupo Digicon
+ 
+@@ -56779,6 +57259,9 @@ OUI:4C9E80*
+ OUI:4C9EE4*
+  ID_OUI_FROM_DATABASE=Hanyang Navicom Co.,Ltd.
+ 
++OUI:4CA56D*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
++
+ OUI:4CA74B*
+  ID_OUI_FROM_DATABASE=Alcatel Lucent
+ 
+@@ -56833,6 +57316,9 @@ OUI:4CCC34*
+ OUI:4CD637*
+  ID_OUI_FROM_DATABASE=Qsono Electronics Co., Ltd
+ 
++OUI:4CD7B6*
++ ID_OUI_FROM_DATABASE=Helmer Scientific
++
+ OUI:4CD9C4*
+  ID_OUI_FROM_DATABASE=Magneti Marelli Automotive Electronics (Guangzhou) Co. Ltd
+ 
+@@ -56854,6 +57340,9 @@ OUI:4CEDDE*
+ OUI:4CF02E*
+  ID_OUI_FROM_DATABASE=Vifa Denmark A/S
+ 
++OUI:4CF45B*
++ ID_OUI_FROM_DATABASE=Blue Clover Devices
++
+ OUI:4CF737*
+  ID_OUI_FROM_DATABASE=SamJi Electronics Co., Ltd
+ 
+@@ -56884,6 +57373,9 @@ OUI:5017FF*
+ OUI:501AC5*
+  ID_OUI_FROM_DATABASE=Microsoft
+ 
++OUI:501CBF*
++ ID_OUI_FROM_DATABASE=Cisco
++
+ OUI:50206B*
+  ID_OUI_FROM_DATABASE=Emerson Climate Technologies Transportation Solutions
+ 
+@@ -56950,6 +57442,9 @@ OUI:504F94*
+ OUI:505663*
+  ID_OUI_FROM_DATABASE=Texas Instruments
+ 
++OUI:5056A8*
++ ID_OUI_FROM_DATABASE=Jolla Ltd
++
+ OUI:5057A8*
+  ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
+ 
+@@ -56959,6 +57454,9 @@ OUI:505AC6*
+ OUI:506028*
+  ID_OUI_FROM_DATABASE=Xirrus Inc.
+ 
++OUI:506184*
++ ID_OUI_FROM_DATABASE=Avaya, Inc
++
+ OUI:5061D6*
+  ID_OUI_FROM_DATABASE=Indu-Sol GmbH
+ 
+@@ -57025,6 +57523,9 @@ OUI:509871*
+ OUI:509F27*
+  ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
+ 
++OUI:50A054*
++ ID_OUI_FROM_DATABASE=Actineon
++
+ OUI:50A0BF*
+  ID_OUI_FROM_DATABASE=Alba Fiber Systems Inc.
+ 
+@@ -57046,6 +57547,9 @@ OUI:50ABBF*
+ OUI:50AF73*
+  ID_OUI_FROM_DATABASE=Shenzhen Bitland Information Technology Co., Ltd.
+ 
++OUI:50B695*
++ ID_OUI_FROM_DATABASE=Micropoint Biotechnologies,Inc.
++
+ OUI:50B7C3*
+  ID_OUI_FROM_DATABASE=Samsung Electronics CO., LTD
+ 
+@@ -57163,6 +57667,9 @@ OUI:5422F8*
+ OUI:542696*
+  ID_OUI_FROM_DATABASE=Apple
+ 
++OUI:54271E*
++ ID_OUI_FROM_DATABASE=AzureWave Technonloies, Inc.
++
+ OUI:542A9C*
+  ID_OUI_FROM_DATABASE=LSY Defense, LLC.
+ 
+@@ -57175,6 +57682,9 @@ OUI:542F89*
+ OUI:543131*
+  ID_OUI_FROM_DATABASE=Raster Vision Ltd
+ 
++OUI:543530*
++ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
++
+ OUI:5435DF*
+  ID_OUI_FROM_DATABASE=Symeo GmbH
+ 
+@@ -57214,6 +57724,9 @@ OUI:545FA9*
+ OUI:5461EA*
+  ID_OUI_FROM_DATABASE=Zaplox AB
+ 
++OUI:54724F*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:547398*
+  ID_OUI_FROM_DATABASE=Toyo Electronics Corporation
+ 
+@@ -57274,6 +57787,9 @@ OUI:549D85*
+ OUI:54A04F*
+  ID_OUI_FROM_DATABASE=t-mac Technologies Ltd
+ 
++OUI:54A31B*
++ ID_OUI_FROM_DATABASE=Shenzhen Linkworld Technology Co,.LTD
++
+ OUI:54A51B*
+  ID_OUI_FROM_DATABASE=Shenzhen Huawei Communication Technologies Co., Ltd
+ 
+@@ -57286,6 +57802,9 @@ OUI:54A619*
+ OUI:54A9D4*
+  ID_OUI_FROM_DATABASE=Minibar Systems
+ 
++OUI:54AE27*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:54B620*
+  ID_OUI_FROM_DATABASE=SUHDOL E&C Co.Ltd.
+ 
+@@ -57295,9 +57814,15 @@ OUI:54BEF7*
+ OUI:54CDA7*
+  ID_OUI_FROM_DATABASE=Fujian Shenzhou Electronic Co.,Ltd
+ 
++OUI:54CDEE*
++ ID_OUI_FROM_DATABASE=ShenZhen Apexis Electronic Co.,Ltd
++
+ OUI:54D0ED*
+  ID_OUI_FROM_DATABASE=AXIM Communications
+ 
++OUI:54D163*
++ ID_OUI_FROM_DATABASE=MAX-TECH,INC
++
+ OUI:54D1B0*
+  ID_OUI_FROM_DATABASE=Universal Laser Systems, Inc
+ 
+@@ -57310,6 +57835,9 @@ OUI:54DF63*
+ OUI:54E032*
+  ID_OUI_FROM_DATABASE=Juniper Networks
+ 
++OUI:54E2E0*
++ ID_OUI_FROM_DATABASE=Pace plc
++
+ OUI:54E3B0*
+  ID_OUI_FROM_DATABASE=JVL Industri Elektronik
+ 
+@@ -57337,6 +57865,9 @@ OUI:54FB58*
+ OUI:54FDBF*
+  ID_OUI_FROM_DATABASE=Scheidt & Bachmann GmbH
+ 
++OUI:580528*
++ ID_OUI_FROM_DATABASE=LABRIS NETWORKS
++
+ OUI:580556*
+  ID_OUI_FROM_DATABASE=Elettronica GF S.r.L.
+ 
+@@ -57346,6 +57877,9 @@ OUI:5808FA*
+ OUI:5809E5*
+  ID_OUI_FROM_DATABASE=Kivic Inc.
+ 
++OUI:580A20*
++ ID_OUI_FROM_DATABASE=Cisco
++
+ OUI:581243*
+  ID_OUI_FROM_DATABASE=AcSiP Technology Corp.
+ 
+@@ -57394,6 +57928,9 @@ OUI:5846E1*
+ OUI:5848C0*
+  ID_OUI_FROM_DATABASE=COFLEC
+ 
++OUI:58493B*
++ ID_OUI_FROM_DATABASE=Palo Alto Networks
++
+ OUI:5849BA*
+  ID_OUI_FROM_DATABASE=Chitai Electronic Corp.
+ 
+@@ -57406,6 +57943,9 @@ OUI:584CEE*
+ OUI:585076*
+  ID_OUI_FROM_DATABASE=Linear Equipamentos Eletronicos SA
+ 
++OUI:5850AB*
++ ID_OUI_FROM_DATABASE=TLS Corporation
++
+ OUI:5850E6*
+  ID_OUI_FROM_DATABASE=Best Buy Corporation
+ 
+@@ -57493,6 +58033,9 @@ OUI:589835*
+ OUI:58986F*
+  ID_OUI_FROM_DATABASE=Revolution Display
+ 
++OUI:589CFC*
++ ID_OUI_FROM_DATABASE=FreeBSD Foundation
++
+ OUI:58A2B5*
+  ID_OUI_FROM_DATABASE=LG Electronics
+ 
+@@ -57628,6 +58171,9 @@ OUI:5C22C4*
+ OUI:5C2479*
+  ID_OUI_FROM_DATABASE=Baltech AG
+ 
++OUI:5C254C*
++ ID_OUI_FROM_DATABASE=Avire Global Pte Ltd
++
+ OUI:5C260A*
+  ID_OUI_FROM_DATABASE=Dell Inc.
+ 
+@@ -57757,6 +58303,9 @@ OUI:5CBD9E*
+ OUI:5CC213*
+  ID_OUI_FROM_DATABASE=Fr. Sauter AG
+ 
++OUI:5CC5D4*
++ ID_OUI_FROM_DATABASE=Intel Corporate
++
+ OUI:5CC6D0*
+  ID_OUI_FROM_DATABASE=Skyworth Digital technology(shenzhen)co.ltd.
+ 
+@@ -57808,6 +58357,9 @@ OUI:5CE286*
+ OUI:5CE2F4*
+  ID_OUI_FROM_DATABASE=AcSiP Technology Corp.
+ 
++OUI:5CE7BF*
++ ID_OUI_FROM_DATABASE=New Singularity International Technical Development Co.,Ltd
++
+ OUI:5CE8EB*
+  ID_OUI_FROM_DATABASE=Samsung Electronics
+ 
+@@ -57826,6 +58378,9 @@ OUI:5CF370*
+ OUI:5CF3FC*
+  ID_OUI_FROM_DATABASE=IBM Corp
+ 
++OUI:5CF50D*
++ ID_OUI_FROM_DATABASE=Institute of microelectronic applications
++
+ OUI:5CF6DC*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,LTD
+ 
+@@ -57847,6 +58402,9 @@ OUI:5CFFFF*
+ OUI:6002B4*
+  ID_OUI_FROM_DATABASE=Wistron NeWeb Corp.
+ 
++OUI:600308*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:600347*
+  ID_OUI_FROM_DATABASE=Billion Electric Co. Ltd.
+ 
+@@ -57874,6 +58432,9 @@ OUI:601D0F*
+ OUI:601E02*
+  ID_OUI_FROM_DATABASE=EltexAlatau
+ 
++OUI:602103*
++ ID_OUI_FROM_DATABASE=STCUBE.INC
++
+ OUI:6021C0*
+  ID_OUI_FROM_DATABASE=Murata Manufactuaring Co.,Ltd.
+ 
+@@ -58117,12 +58678,18 @@ OUI:60FB42*
+ OUI:60FE1E*
+  ID_OUI_FROM_DATABASE=China Palms Telecom.Ltd
+ 
++OUI:60FE20*
++ ID_OUI_FROM_DATABASE=2 Wire
++
+ OUI:60FEC5*
+  ID_OUI_FROM_DATABASE=Apple
+ 
+ OUI:60FEF9*
+  ID_OUI_FROM_DATABASE=Thomas & Betts
+ 
++OUI:60FFDD*
++ ID_OUI_FROM_DATABASE=C.E. ELECTRONICS, INC
++
+ OUI:6400F1*
+  ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
+ 
+@@ -58228,6 +58795,9 @@ OUI:645563*
+ OUI:64557F*
+  ID_OUI_FROM_DATABASE=NSFOCUS Information Technology Co., Ltd.
+ 
++OUI:6455B1*
++ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
++
+ OUI:645601*
+  ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD
+ 
+@@ -58363,6 +58933,9 @@ OUI:64AE88*
+ OUI:64B310*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
++OUI:64B370*
++ ID_OUI_FROM_DATABASE=PowerComm Solutons LLC
++
+ OUI:64B64A*
+  ID_OUI_FROM_DATABASE=ViVOtech, Inc.
+ 
+@@ -58435,12 +59008,18 @@ OUI:64E682*
+ OUI:64E84F*
+  ID_OUI_FROM_DATABASE=Serialway Communication Technology Co. Ltd
+ 
++OUI:64E892*
++ ID_OUI_FROM_DATABASE=Morio Denki Co., Ltd.
++
+ OUI:64E8E6*
+  ID_OUI_FROM_DATABASE=global moisture management system
+ 
+ OUI:64E950*
+  ID_OUI_FROM_DATABASE=Cisco
+ 
++OUI:64EB8C*
++ ID_OUI_FROM_DATABASE=Seiko Epson Corporation
++
+ OUI:64ED57*
+  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+ 
+@@ -58570,6 +59149,9 @@ OUI:687251*
+ OUI:68764F*
+  ID_OUI_FROM_DATABASE=Sony Mobile Communications AB
+ 
++OUI:687848*
++ ID_OUI_FROM_DATABASE=Westunitis Co., Ltd.
++
+ OUI:68784C*
+  ID_OUI_FROM_DATABASE=Nortel Networks
+ 
+@@ -58594,6 +59176,9 @@ OUI:688470*
+ OUI:688540*
+  ID_OUI_FROM_DATABASE=IGI Mobile, Inc.
+ 
++OUI:68856A*
++ ID_OUI_FROM_DATABASE=OuterLink Corporation
++
+ OUI:6886A7*
+  ID_OUI_FROM_DATABASE=Cisco
+ 
+@@ -58684,6 +59269,9 @@ OUI:68CE4E*
+ OUI:68D1FD*
+  ID_OUI_FROM_DATABASE=Shenzhen Trimax Technology Co.,Ltd
+ 
++OUI:68D247*
++ ID_OUI_FROM_DATABASE=Portalis LC
++
+ OUI:68D925*
+  ID_OUI_FROM_DATABASE=ProSys Development Services
+ 
+@@ -58732,6 +59320,9 @@ OUI:68FCB3*
+ OUI:6C0460*
+  ID_OUI_FROM_DATABASE=RBH Access Technologies Inc.
+ 
++OUI:6C09D6*
++ ID_OUI_FROM_DATABASE=Digiquest Electronics LTD
++
+ OUI:6C0E0D*
+  ID_OUI_FROM_DATABASE=Sony Ericsson Mobile Communications AB
+ 
+@@ -58816,12 +59407,18 @@ OUI:6C5D63*
+ OUI:6C5E7A*
+  ID_OUI_FROM_DATABASE=Ubiquitous Internet Telecom Co., Ltd
+ 
++OUI:6C5F1C*
++ ID_OUI_FROM_DATABASE=Lenovo Mobile Communication Technology Ltd.
++
+ OUI:6C6126*
+  ID_OUI_FROM_DATABASE=Rinicom Holdings
+ 
+ OUI:6C626D*
+  ID_OUI_FROM_DATABASE=Micro-Star INT'L CO., LTD
+ 
++OUI:6C641A*
++ ID_OUI_FROM_DATABASE=Penguin Computing
++
+ OUI:6C6F18*
+  ID_OUI_FROM_DATABASE=Stereotaxis, Inc.
+ 
+@@ -58864,6 +59461,9 @@ OUI:6C92BF*
+ OUI:6C98EB*
+  ID_OUI_FROM_DATABASE=Xyne GmbH
+ 
++OUI:6C9989*
++ ID_OUI_FROM_DATABASE=Cisco
++
+ OUI:6C9AC9*
+  ID_OUI_FROM_DATABASE=Valentine Research, Inc.
+ 
+@@ -59023,6 +59623,9 @@ OUI:702559*
+ OUI:702B1D*
+  ID_OUI_FROM_DATABASE=E-Domus International Limited
+ 
++OUI:702C1F*
++ ID_OUI_FROM_DATABASE=Wisol
++
+ OUI:702F4B*
+  ID_OUI_FROM_DATABASE=PolyVision Inc.
+ 
+@@ -59071,6 +59674,9 @@ OUI:704AE4*
+ OUI:704CED*
+  ID_OUI_FROM_DATABASE=TMRG, Inc.
+ 
++OUI:704E01*
++ ID_OUI_FROM_DATABASE=KWANGWON TECH CO., LTD.
++
+ OUI:7052C5*
+  ID_OUI_FROM_DATABASE=Avaya, Inc.
+ 
+@@ -59389,9 +59995,15 @@ OUI:746630*
+ OUI:746A89*
+  ID_OUI_FROM_DATABASE=Rezolt Corporation
+ 
++OUI:746A8F*
++ ID_OUI_FROM_DATABASE=VS Vision Systems GmbH
++
+ OUI:746B82*
+  ID_OUI_FROM_DATABASE=MOVEK
+ 
++OUI:746F3D*
++ ID_OUI_FROM_DATABASE=Contec GmbH
++
+ OUI:7472F2*
+  ID_OUI_FROM_DATABASE=Chipsip Technology Co., Ltd.
+ 
+@@ -59413,6 +60025,9 @@ OUI:747E2D*
+ OUI:74867A*
+  ID_OUI_FROM_DATABASE=Dell Inc PCBA Test
+ 
++OUI:74882A*
++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
++
+ OUI:74888B*
+  ID_OUI_FROM_DATABASE=ADB Broadband Italia
+ 
+@@ -59422,6 +60037,9 @@ OUI:748E08*
+ OUI:748EF8*
+  ID_OUI_FROM_DATABASE=Brocade Communications Systems, Inc.
+ 
++OUI:748F1B*
++ ID_OUI_FROM_DATABASE=MasterImage 3D
++
+ OUI:749050*
+  ID_OUI_FROM_DATABASE=Renesas Electronics Corporation
+ 
+@@ -59437,6 +60055,9 @@ OUI:74943D*
+ OUI:749975*
+  ID_OUI_FROM_DATABASE=IBM Corporation
+ 
++OUI:749C52*
++ ID_OUI_FROM_DATABASE=Huizhou Desay SV Automotive Co., Ltd.
++
+ OUI:749DDC*
+  ID_OUI_FROM_DATABASE=2Wire
+ 
+@@ -59467,6 +60088,9 @@ OUI:74BE08*
+ OUI:74BFA1*
+  ID_OUI_FROM_DATABASE=HYUNTECK
+ 
++OUI:74C621*
++ ID_OUI_FROM_DATABASE=Zhejiang Hite Renewable Energy Co.,LTD
++
+ OUI:74C99A*
+  ID_OUI_FROM_DATABASE=Ericsson AB
+ 
+@@ -59605,6 +60229,9 @@ OUI:78303B*
+ OUI:7830E1*
+  ID_OUI_FROM_DATABASE=UltraClenz, LLC
+ 
++OUI:7831C1*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:78324F*
+  ID_OUI_FROM_DATABASE=Millennium Group, Inc.
+ 
+@@ -59614,6 +60241,9 @@ OUI:783CE3*
+ OUI:783D5B*
+  ID_OUI_FROM_DATABASE=TELNET Redes Inteligentes S.A.
+ 
++OUI:783E53*
++ ID_OUI_FROM_DATABASE=BSkyB Ltd
++
+ OUI:783F15*
+  ID_OUI_FROM_DATABASE=EasySYNC Ltd.
+ 
+@@ -59638,6 +60268,9 @@ OUI:78491D*
+ OUI:784B08*
+  ID_OUI_FROM_DATABASE=f.robotics acquisitions ltd
+ 
++OUI:784B87*
++ ID_OUI_FROM_DATABASE=Murata Manufacturing Co.,Ltd.
++
+ OUI:78510C*
+  ID_OUI_FROM_DATABASE=LiveU Ltd.
+ 
+@@ -59674,6 +60307,9 @@ OUI:78617C*
+ OUI:7866AE*
+  ID_OUI_FROM_DATABASE=ZTEC Instruments, Inc.
+ 
++OUI:786A89*
++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
++
+ OUI:786C1C*
+  ID_OUI_FROM_DATABASE=Apple
+ 
+@@ -59737,6 +60373,9 @@ OUI:78A2A0*
+ OUI:78A3E4*
+  ID_OUI_FROM_DATABASE=Apple
+ 
++OUI:78A504*
++ ID_OUI_FROM_DATABASE=Texas Instruments
++
+ OUI:78A5DD*
+  ID_OUI_FROM_DATABASE=Shenzhen Smarteye Digital Electronics Co., Ltd
+ 
+@@ -59830,6 +60469,9 @@ OUI:78D5B5*
+ OUI:78D6F0*
+  ID_OUI_FROM_DATABASE=Samsung Electro Mechanics
+ 
++OUI:78D752*
++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
++
+ OUI:78D99F*
+  ID_OUI_FROM_DATABASE=NuCom HK Ltd.
+ 
+@@ -59887,6 +60529,9 @@ OUI:78FE3D*
+ OUI:78FE41*
+  ID_OUI_FROM_DATABASE=Socus networks
+ 
++OUI:78FEE2*
++ ID_OUI_FROM_DATABASE=Shanghai Diveo Technology Co., Ltd
++
+ OUI:78FF57*
+  ID_OUI_FROM_DATABASE=Intel Corporate
+ 
+@@ -59929,6 +60574,9 @@ OUI:7C1476*
+ OUI:7C160D*
+  ID_OUI_FROM_DATABASE=Saia-Burgess Controls AG
+ 
++OUI:7C1A03*
++ ID_OUI_FROM_DATABASE=8Locations Co., Ltd.
++
+ OUI:7C1AFC*
+  ID_OUI_FROM_DATABASE=Dalian Co-Edifice Video Technology Co., Ltd
+ 
+@@ -60058,6 +60706,9 @@ OUI:7C822D*
+ OUI:7C8306*
+  ID_OUI_FROM_DATABASE=Glen Dimplex Nordic as
+ 
++OUI:7C8D91*
++ ID_OUI_FROM_DATABASE=Shanghai Hongzhuo Information Technology co.,LTD
++
+ OUI:7C8EE4*
+  ID_OUI_FROM_DATABASE=Texas Instruments
+ 
+@@ -60172,6 +60823,9 @@ OUI:7CDD90*
+ OUI:7CE044*
+  ID_OUI_FROM_DATABASE=NEON Inc
+ 
++OUI:7CE1FF*
++ ID_OUI_FROM_DATABASE=Computer Performance, Inc. DBA Digital Loggers, Inc.
++
+ OUI:7CE56B*
+  ID_OUI_FROM_DATABASE=ESEN Optoelectronics Technology Co.,Ltd.
+ 
+@@ -60214,6 +60868,9 @@ OUI:80000B*
+ OUI:800010*
+  ID_OUI_FROM_DATABASE=ATT BELL LABORATORIES
+ 
++OUI:80006E*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:8005DF*
+  ID_OUI_FROM_DATABASE=Montage Technology Group Limited
+ 
+@@ -60307,9 +60964,15 @@ OUI:805719*
+ OUI:8058C5*
+  ID_OUI_FROM_DATABASE=NovaTec Kommunikationstechnik GmbH
+ 
++OUI:8059FD*
++ ID_OUI_FROM_DATABASE=Noviga
++
+ OUI:806007*
+  ID_OUI_FROM_DATABASE=RIM
+ 
++OUI:80618F*
++ ID_OUI_FROM_DATABASE=Shenzhen sangfei consumer communications co.,ltd
++
+ OUI:806459*
+  ID_OUI_FROM_DATABASE=Nimbus Inc.
+ 
+@@ -60448,6 +61111,9 @@ OUI:80D733*
+ OUI:80DB31*
+  ID_OUI_FROM_DATABASE=Power Quotient International Co., Ltd.
+ 
++OUI:80EA96*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:80EE73*
+  ID_OUI_FROM_DATABASE=Shuttle Inc.
+ 
+@@ -60481,6 +61147,9 @@ OUI:840F45*
+ OUI:841715*
+  ID_OUI_FROM_DATABASE=GP Electronics (HK) Ltd.
+ 
++OUI:841766*
++ ID_OUI_FROM_DATABASE=Weifang GoerTek Electronics Co., Ltd
++
+ OUI:841888*
+  ID_OUI_FROM_DATABASE=Juniper Networks
+ 
+@@ -60502,9 +61171,15 @@ OUI:84248D*
+ OUI:84253F*
+  ID_OUI_FROM_DATABASE=Silex Technology, Inc
+ 
++OUI:8425A4*
++ ID_OUI_FROM_DATABASE=Tariox Limited
++
+ OUI:8425DB*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
++OUI:842615*
++ ID_OUI_FROM_DATABASE=ADB Broadband Italia
++
+ OUI:84262B*
+  ID_OUI_FROM_DATABASE=Alcatel-Lucent
+ 
+@@ -60586,6 +61261,9 @@ OUI:846AED*
+ OUI:846EB1*
+  ID_OUI_FROM_DATABASE=Park Assist LLC
+ 
++OUI:847207*
++ ID_OUI_FROM_DATABASE=I&C Technology
++
+ OUI:84742A*
+  ID_OUI_FROM_DATABASE=zte corporation
+ 
+@@ -60610,12 +61288,18 @@ OUI:848336*
+ OUI:848371*
+  ID_OUI_FROM_DATABASE=Avaya, Inc
+ 
++OUI:848433*
++ ID_OUI_FROM_DATABASE=Paradox Engineering SA
++
+ OUI:848506*
+  ID_OUI_FROM_DATABASE=Apple
+ 
+ OUI:848D84*
+  ID_OUI_FROM_DATABASE=Rajant Corporation
+ 
++OUI:848E0C*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:848E96*
+  ID_OUI_FROM_DATABASE=Embertec Pty Ltd
+ 
+@@ -60838,6 +61522,9 @@ OUI:888717*
+ OUI:8887DD*
+  ID_OUI_FROM_DATABASE=DarbeeVision Inc.
+ 
++OUI:888914*
++ ID_OUI_FROM_DATABASE=All Components Incorporated
++
+ OUI:888964*
+  ID_OUI_FROM_DATABASE=GSI Electronics Inc.
+ 
+@@ -60853,6 +61540,9 @@ OUI:889166*
+ OUI:8891DD*
+  ID_OUI_FROM_DATABASE=Racktivity
+ 
++OUI:889471*
++ ID_OUI_FROM_DATABASE=Brocade Communications Systems, Inc.
++
+ OUI:8894F9*
+  ID_OUI_FROM_DATABASE=Gemicom Technology, Inc.
+ 
+@@ -60883,6 +61573,9 @@ OUI:88A3CC*
+ OUI:88A5BD*
+  ID_OUI_FROM_DATABASE=QPCOM INC.
+ 
++OUI:88A73C*
++ ID_OUI_FROM_DATABASE=Ragentek Technology Group
++
+ OUI:88ACC1*
+  ID_OUI_FROM_DATABASE=Generiton Co., Ltd.
+ 
+@@ -60916,6 +61609,9 @@ OUI:88CB87*
+ OUI:88D7BC*
+  ID_OUI_FROM_DATABASE=DEP Company
+ 
++OUI:88D962*
++ ID_OUI_FROM_DATABASE=Canopus Systems US LLC
++
+ OUI:88DC96*
+  ID_OUI_FROM_DATABASE=SENAO Networks, Inc.
+ 
+@@ -60928,12 +61624,18 @@ OUI:88E0A0*
+ OUI:88E0F3*
+  ID_OUI_FROM_DATABASE=Juniper Networks
+ 
++OUI:88E3AB*
++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
++
+ OUI:88E712*
+  ID_OUI_FROM_DATABASE=Whirlpool Corporation
+ 
+ OUI:88E7A6*
+  ID_OUI_FROM_DATABASE=iKnowledge Integration Corp.
+ 
++OUI:88E8F8*
++ ID_OUI_FROM_DATABASE=YONG TAI ELECTRONIC (DONGGUAN) LTD.
++
+ OUI:88E917*
+  ID_OUI_FROM_DATABASE=Tamaggo
+ 
+@@ -60949,6 +61651,9 @@ OUI:88F488*
+ OUI:88F490*
+  ID_OUI_FROM_DATABASE=Jetmobile Pte Ltd
+ 
++OUI:88F7C7*
++ ID_OUI_FROM_DATABASE=Technicolor USA Inc.
++
+ OUI:88FD15*
+  ID_OUI_FROM_DATABASE=LINEEYE CO., LTD
+ 
+@@ -60994,6 +61699,9 @@ OUI:8C271D*
+ OUI:8C278A*
+  ID_OUI_FROM_DATABASE=Vocollect Inc
+ 
++OUI:8C2937*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:8C2DAA*
+  ID_OUI_FROM_DATABASE=Apple
+ 
+@@ -61012,6 +61720,9 @@ OUI:8C3C07*
+ OUI:8C3C4A*
+  ID_OUI_FROM_DATABASE=NAKAYO TELECOMMUNICATIONS,INC.
+ 
++OUI:8C41F2*
++ ID_OUI_FROM_DATABASE=RDA Technologies Ltd.
++
+ OUI:8C4435*
+  ID_OUI_FROM_DATABASE=Shanghai BroadMobi Communication Technology Co., Ltd.
+ 
+@@ -61099,6 +61810,9 @@ OUI:8C7716*
+ OUI:8C7B9D*
+  ID_OUI_FROM_DATABASE=Apple
+ 
++OUI:8C7C92*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:8C7CB5*
+  ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+ 
+@@ -61153,6 +61867,9 @@ OUI:8CB82C*
+ OUI:8CB864*
+  ID_OUI_FROM_DATABASE=AcSiP Technology Corp.
+ 
++OUI:8CBEBE*
++ ID_OUI_FROM_DATABASE=Xiaomi Technology Co.,Ltd
++
+ OUI:8CC121*
+  ID_OUI_FROM_DATABASE=Panasonic Corporation AVC Networks Company
+ 
+@@ -61285,6 +62002,9 @@ OUI:902B34*
+ OUI:902E87*
+  ID_OUI_FROM_DATABASE=LabJack
+ 
++OUI:9031CD*
++ ID_OUI_FROM_DATABASE=Onyx Healthcare Inc.
++
+ OUI:90342B*
+  ID_OUI_FROM_DATABASE=Gatekeeper Systems, Inc.
+ 
+@@ -61324,6 +62044,9 @@ OUI:9049FA*
+ OUI:904CE5*
+  ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+ 
++OUI:904E2B*
++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
++
+ OUI:90507B*
+  ID_OUI_FROM_DATABASE=Advanced PANMOBIL Systems GmbH & Co. KG
+ 
+@@ -61426,6 +62149,9 @@ OUI:9092B4*
+ OUI:9094E4*
+  ID_OUI_FROM_DATABASE=D-Link International
+ 
++OUI:909864*
++ ID_OUI_FROM_DATABASE=Impex-Sat GmbH&amp;Co KG
++
+ OUI:909916*
+  ID_OUI_FROM_DATABASE=ELVEES NeoTek OJSC
+ 
+@@ -61501,6 +62227,12 @@ OUI:90D92C*
+ OUI:90DA4E*
+  ID_OUI_FROM_DATABASE=AVANU
+ 
++OUI:90DB46*
++ ID_OUI_FROM_DATABASE=E-LEAD ELECTRONIC CO., LTD
++
++OUI:90DFB7*
++ ID_OUI_FROM_DATABASE=s.m.s smart microwave sensors GmbH
++
+ OUI:90E0F0*
+  ID_OUI_FROM_DATABASE=Harman International
+ 
+@@ -61513,6 +62245,12 @@ OUI:90E6BA*
+ OUI:90EA60*
+  ID_OUI_FROM_DATABASE=SPI Lasers Ltd
+ 
++OUI:90F1AA*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,LTD
++
++OUI:90F1B0*
++ ID_OUI_FROM_DATABASE=Hangzhou Anheng Info&Tech CO.,LTD
++
+ OUI:90F278*
+  ID_OUI_FROM_DATABASE=Radius Gateway
+ 
+@@ -61624,6 +62362,9 @@ OUI:945047*
+ OUI:945103*
+  ID_OUI_FROM_DATABASE=Samsung Electronics
+ 
++OUI:9451BF*
++ ID_OUI_FROM_DATABASE=Hyundai ESG
++
+ OUI:94592D*
+  ID_OUI_FROM_DATABASE=EKE Building Technology Systems Ltd
+ 
+@@ -61681,6 +62422,9 @@ OUI:949BFD*
+ OUI:949C55*
+  ID_OUI_FROM_DATABASE=Alta Data Technologies
+ 
++OUI:949F3F*
++ ID_OUI_FROM_DATABASE=Optek Digital Technology company limited
++
+ OUI:949FB4*
+  ID_OUI_FROM_DATABASE=ChengDu JiaFaAnTai Technology Co.,Ltd
+ 
+@@ -61711,6 +62455,9 @@ OUI:94BA56*
+ OUI:94BF1E*
+  ID_OUI_FROM_DATABASE=eflow Inc. / Smart Device Planning and Development Division
+ 
++OUI:94C014*
++ ID_OUI_FROM_DATABASE=Sorter Sp. j. Konrad Grzeszczyk MichaA, Ziomek
++
+ OUI:94C150*
+  ID_OUI_FROM_DATABASE=2Wire Inc
+ 
+@@ -61939,6 +62686,9 @@ OUI:9873C4*
+ OUI:9876B6*
+  ID_OUI_FROM_DATABASE=Adafruit
+ 
++OUI:987770*
++ ID_OUI_FROM_DATABASE=Pep Digital Technology (Guangzhou) Co., Ltd
++
+ OUI:988217*
+  ID_OUI_FROM_DATABASE=Disruptive Ltd
+ 
+@@ -61990,6 +62740,9 @@ OUI:98BC57*
+ OUI:98BC99*
+  ID_OUI_FROM_DATABASE=Edeltech Co.,Ltd.
+ 
++OUI:98C0EB*
++ ID_OUI_FROM_DATABASE=Global Regency Ltd
++
+ OUI:98C845*
+  ID_OUI_FROM_DATABASE=PacketAccess
+ 
+@@ -62026,6 +62779,9 @@ OUI:98E79A*
+ OUI:98EC65*
+  ID_OUI_FROM_DATABASE=Cosesy ApS
+ 
++OUI:98F0AB*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:98F537*
+  ID_OUI_FROM_DATABASE=zte corporation
+ 
+@@ -62113,6 +62869,9 @@ OUI:9C31B6*
+ OUI:9C3AAF*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
++OUI:9C3EAA*
++ ID_OUI_FROM_DATABASE=EnvyLogic Co.,Ltd.
++
+ OUI:9C417C*
+  ID_OUI_FROM_DATABASE=Hame  Technology Co.,  Limited
+ 
+@@ -62179,6 +62938,12 @@ OUI:9C611D*
+ OUI:9C645E*
+  ID_OUI_FROM_DATABASE=Harman Consumer Group
+ 
++OUI:9C65B0*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
++
++OUI:9C65F9*
++ ID_OUI_FROM_DATABASE=AcSiP Technology Corp.
++
+ OUI:9C6650*
+  ID_OUI_FROM_DATABASE=Glodio Technolies Co.,Ltd Tianjin Branch
+ 
+@@ -62203,6 +62968,9 @@ OUI:9C807D*
+ OUI:9C80DF*
+  ID_OUI_FROM_DATABASE=Arcadyan Technology Corporation
+ 
++OUI:9C86DA*
++ ID_OUI_FROM_DATABASE=Phoenix Geophysics Ltd.
++
+ OUI:9C8888*
+  ID_OUI_FROM_DATABASE=Simac Techniek NV
+ 
+@@ -62272,6 +63040,9 @@ OUI:9CB793*
+ OUI:9CBB98*
+  ID_OUI_FROM_DATABASE=Shen Zhen RND Electronic Co.,LTD
+ 
++OUI:9CBD9D*
++ ID_OUI_FROM_DATABASE=SkyDisk, Inc.
++
+ OUI:9CC077*
+  ID_OUI_FROM_DATABASE=PrintCounts, LLC
+ 
+@@ -62332,6 +63103,9 @@ OUI:9CF8DB*
+ OUI:9CF938*
+  ID_OUI_FROM_DATABASE=AREVA NP GmbH
+ 
++OUI:9CFBF1*
++ ID_OUI_FROM_DATABASE=MESOMATIC GmbH & Co.KG
++
+ OUI:9CFFBE*
+  ID_OUI_FROM_DATABASE=OTSL Inc.
+ 
+@@ -62449,6 +63223,9 @@ OUI:A05DE7*
+ OUI:A05E6B*
+  ID_OUI_FROM_DATABASE=MELPER Co., Ltd.
+ 
++OUI:A06518*
++ ID_OUI_FROM_DATABASE=VNPT TECHNOLOGY
++
+ OUI:A067BE*
+  ID_OUI_FROM_DATABASE=Sicon s.r.l.
+ 
+@@ -62479,6 +63256,9 @@ OUI:A073FC*
+ OUI:A07591*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
++OUI:A07771*
++ ID_OUI_FROM_DATABASE=Vialis BV
++
+ OUI:A078BA*
+  ID_OUI_FROM_DATABASE=Pantech Co., Ltd.
+ 
+@@ -62500,6 +63280,9 @@ OUI:A08869*
+ OUI:A088B4*
+  ID_OUI_FROM_DATABASE=Intel Corporate
+ 
++OUI:A089E4*
++ ID_OUI_FROM_DATABASE=Skyworth Digital Technology(Shenzhen) Co.,Ltd
++
+ OUI:A08A87*
+  ID_OUI_FROM_DATABASE=HuiZhou KaiYue Electronic Co.,Ltd
+ 
+@@ -62599,6 +63382,9 @@ OUI:A0E25A*
+ OUI:A0E295*
+  ID_OUI_FROM_DATABASE=DAT System Co.,Ltd
+ 
++OUI:A0E453*
++ ID_OUI_FROM_DATABASE=Sony Mobile Communications AB
++
+ OUI:A0E534*
+  ID_OUI_FROM_DATABASE=Stratec Biomedical AG
+ 
+@@ -62635,6 +63421,9 @@ OUI:A0F419*
+ OUI:A0F450*
+  ID_OUI_FROM_DATABASE=HTC Corporation
+ 
++OUI:A0F459*
++ ID_OUI_FROM_DATABASE=FN-LINK TECHNOLOGY LIMITED
++
+ OUI:A0FE91*
+  ID_OUI_FROM_DATABASE=AVAT Automation GmbH
+ 
+@@ -62740,6 +63529,9 @@ OUI:A45D36*
+ OUI:A46706*
+  ID_OUI_FROM_DATABASE=Apple
+ 
++OUI:A46CC1*
++ ID_OUI_FROM_DATABASE=LTi REEnergy GmbH
++
+ OUI:A46E79*
+  ID_OUI_FROM_DATABASE=DFT System Co.Ltd
+ 
+@@ -62785,6 +63577,9 @@ OUI:A49947*
+ OUI:A49981*
+  ID_OUI_FROM_DATABASE=FuJian Elite Power Tech CO.,LTD.
+ 
++OUI:A49A58*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
++
+ OUI:A49B13*
+  ID_OUI_FROM_DATABASE=Burroughs Payment Systems, Inc.
+ 
+@@ -62836,6 +63631,9 @@ OUI:A4B980*
+ OUI:A4BADB*
+  ID_OUI_FROM_DATABASE=Dell Inc.
+ 
++OUI:A4BBAF*
++ ID_OUI_FROM_DATABASE=Lime Instruments
++
+ OUI:A4BE61*
+  ID_OUI_FROM_DATABASE=EutroVision System, Inc.
+ 
+@@ -62941,6 +63739,9 @@ OUI:A80180*
+ OUI:A80600*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
++OUI:A80C0D*
++ ID_OUI_FROM_DATABASE=Cisco
++
+ OUI:A8154D*
+  ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
+ 
+@@ -62959,6 +63760,9 @@ OUI:A81FAF*
+ OUI:A82066*
+  ID_OUI_FROM_DATABASE=Apple
+ 
++OUI:A824EB*
++ ID_OUI_FROM_DATABASE=ZAO NPO Introtest
++
+ OUI:A826D9*
+  ID_OUI_FROM_DATABASE=HTC Corporation
+ 
+@@ -62992,6 +63796,9 @@ OUI:A854B2*
+ OUI:A8556A*
+  ID_OUI_FROM_DATABASE=Pocketnet Technology Inc.
+ 
++OUI:A8574E*
++ ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
++
+ OUI:A85BB0*
+  ID_OUI_FROM_DATABASE=Shenzhen Dehoo Technology Co.,Ltd
+ 
+@@ -63034,6 +63841,9 @@ OUI:A87B39*
+ OUI:A87E33*
+  ID_OUI_FROM_DATABASE=Nokia Danmark A/S
+ 
++OUI:A881F1*
++ ID_OUI_FROM_DATABASE=BMEYE B.V.
++
+ OUI:A886DD*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
+@@ -63085,12 +63895,18 @@ OUI:A8B0AE*
+ OUI:A8B1D4*
+  ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
+ 
++OUI:A8B9B3*
++ ID_OUI_FROM_DATABASE=ESSYS
++
+ OUI:A8BBCF*
+  ID_OUI_FROM_DATABASE=Apple
+ 
+ OUI:A8BD1A*
+  ID_OUI_FROM_DATABASE=Honey Bee (Hong Kong) Limited
+ 
++OUI:A8BD3A*
++ ID_OUI_FROM_DATABASE=UNIONMAN TECHNOLOGY CO.,LTD
++
+ OUI:A8C222*
+  ID_OUI_FROM_DATABASE=TM-Research Inc.
+ 
+@@ -63157,6 +63973,9 @@ OUI:AA0004*
+ OUI:AC0142*
+  ID_OUI_FROM_DATABASE=Uriel Technologies SIA
+ 
++OUI:AC02CA*
++ ID_OUI_FROM_DATABASE=HI Solutions, Inc.
++
+ OUI:AC02CF*
+  ID_OUI_FROM_DATABASE=RW Tecnologia Industria e Comercio Ltda
+ 
+@@ -63208,6 +64027,9 @@ OUI:AC319D*
+ OUI:AC34CB*
+  ID_OUI_FROM_DATABASE=Shanhai GBCOM Communication Technology Co. Ltd
+ 
++OUI:AC3613*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
++
+ OUI:AC3C0B*
+  ID_OUI_FROM_DATABASE=Apple
+ 
+@@ -63406,6 +64228,9 @@ OUI:ACCE8F*
+ OUI:ACCF23*
+  ID_OUI_FROM_DATABASE=Hi-flying electronics technology Co.,Ltd
+ 
++OUI:ACCF5C*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:ACD180*
+  ID_OUI_FROM_DATABASE=Crexendo Business Solutions, Inc.
+ 
+@@ -63421,6 +64246,9 @@ OUI:ACD9D6*
+ OUI:ACDBDA*
+  ID_OUI_FROM_DATABASE=Shenzhen Geniatech Inc, Ltd
+ 
++OUI:ACE069*
++ ID_OUI_FROM_DATABASE=ISAAC Instruments
++
+ OUI:ACE215*
+  ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
+ 
+@@ -63493,6 +64321,9 @@ OUI:B01C91*
+ OUI:B024F3*
+  ID_OUI_FROM_DATABASE=Progeny Systems
+ 
++OUI:B03495*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:B0358D*
+  ID_OUI_FROM_DATABASE=Nokia Corporation
+ 
+@@ -63523,6 +64354,9 @@ OUI:B050BC*
+ OUI:B0518E*
+  ID_OUI_FROM_DATABASE=Holl technology CO.Ltd.
+ 
++OUI:B05706*
++ ID_OUI_FROM_DATABASE=Vallox Oy
++
+ OUI:B058C4*
+  ID_OUI_FROM_DATABASE=Broadcast Microwave Services, Inc
+ 
+@@ -63538,6 +64372,12 @@ OUI:B06563*
+ OUI:B065BD*
+  ID_OUI_FROM_DATABASE=Apple
+ 
++OUI:B068B6*
++ ID_OUI_FROM_DATABASE=Hangzhou OYE Technology Co. Ltd
++
++OUI:B06971*
++ ID_OUI_FROM_DATABASE=DEI Sales, Inc.
++
+ OUI:B06CBF*
+  ID_OUI_FROM_DATABASE=3ality Digital Systems GmbH
+ 
+@@ -63568,6 +64408,9 @@ OUI:B0808C*
+ OUI:B081D8*
+  ID_OUI_FROM_DATABASE=I-sys Corp
+ 
++OUI:B0869E*
++ ID_OUI_FROM_DATABASE=Chloride S.r.L
++
+ OUI:B08807*
+  ID_OUI_FROM_DATABASE=Strata Worldwide
+ 
+@@ -63643,6 +64486,9 @@ OUI:B0BF99*
+ OUI:B0C4E7*
+  ID_OUI_FROM_DATABASE=Samsung Electronics
+ 
++OUI:B0C554*
++ ID_OUI_FROM_DATABASE=D-Link International
++
+ OUI:B0C69A*
+  ID_OUI_FROM_DATABASE=Juniper Networks
+ 
+@@ -63673,6 +64519,9 @@ OUI:B0D2F5*
+ OUI:B0D7C5*
+  ID_OUI_FROM_DATABASE=STP KFT
+ 
++OUI:B0DA00*
++ ID_OUI_FROM_DATABASE=CERA ELECTRONIQUE
++
+ OUI:B0DF3A*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
+@@ -63694,6 +64543,9 @@ OUI:B0E97E*
+ OUI:B0EC71*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
++OUI:B0EC8F*
++ ID_OUI_FROM_DATABASE=GMX SAS
++
+ OUI:B0EE45*
+  ID_OUI_FROM_DATABASE=AzureWave Technologies, Inc.
+ 
+@@ -63736,6 +64588,9 @@ OUI:B41489*
+ OUI:B41513*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
++OUI:B418D1*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:B41DEF*
+  ID_OUI_FROM_DATABASE=Internet Laboratories, Inc.
+ 
+@@ -63754,6 +64609,9 @@ OUI:B428F1*
+ OUI:B42A39*
+  ID_OUI_FROM_DATABASE=ORBIT MERRET, spol. s r. o.
+ 
++OUI:B42C92*
++ ID_OUI_FROM_DATABASE=Zhejiang Weirong Electronic Co., Ltd
++
+ OUI:B42CBE*
+  ID_OUI_FROM_DATABASE=Direct Payment Solutions Limited
+ 
+@@ -63787,6 +64645,9 @@ OUI:B43E3B*
+ OUI:B4417A*
+  ID_OUI_FROM_DATABASE=ShenZhen Gongjin Electronics Co.,Ltd
+ 
++OUI:B4430D*
++ ID_OUI_FROM_DATABASE=Broadlink Pty Ltd
++
+ OUI:B44CC2*
+  ID_OUI_FROM_DATABASE=NR ELECTRIC CO., LTD
+ 
+@@ -63847,6 +64708,9 @@ OUI:B482C5*
+ OUI:B482FE*
+  ID_OUI_FROM_DATABASE=Askey Computer Corp
+ 
++OUI:B48547*
++ ID_OUI_FROM_DATABASE=Amptown System Company GmbH
++
+ OUI:B48910*
+  ID_OUI_FROM_DATABASE=Coster T.E. S.P.A.
+ 
+@@ -63856,6 +64720,9 @@ OUI:B4944E*
+ OUI:B49842*
+  ID_OUI_FROM_DATABASE=zte corporation
+ 
++OUI:B4994C*
++ ID_OUI_FROM_DATABASE=Texas Instruments
++
+ OUI:B499BA*
+  ID_OUI_FROM_DATABASE=Hewlett-Packard Company
+ 
+@@ -63875,7 +64742,7 @@ OUI:B4A5A9*
+  ID_OUI_FROM_DATABASE=MODI GmbH
+ 
+ OUI:B4A82B*
+- ID_OUI_FROM_DATABASE=Histar
++ ID_OUI_FROM_DATABASE=Histar Digital Electronics Co., Ltd.
+ 
+ OUI:B4A95A*
+  ID_OUI_FROM_DATABASE=Avaya, Inc
+@@ -63895,6 +64762,9 @@ OUI:B4B362*
+ OUI:B4B52F*
+  ID_OUI_FROM_DATABASE=Hewlett Packard
+ 
++OUI:B4B542*
++ ID_OUI_FROM_DATABASE=Hubbell Power Systems, Inc.
++
+ OUI:B4B5AF*
+  ID_OUI_FROM_DATABASE=Minsung Electronics
+ 
+@@ -64021,6 +64891,9 @@ OUI:B830A8*
+ OUI:B836D8*
+  ID_OUI_FROM_DATABASE=Videoswitch
+ 
++OUI:B83861*
++ ID_OUI_FROM_DATABASE=Cisco
++
+ OUI:B838CA*
+  ID_OUI_FROM_DATABASE=Kyokko Tsushin System CO.,LTD
+ 
+@@ -64036,6 +64909,9 @@ OUI:B83E59*
+ OUI:B8415F*
+  ID_OUI_FROM_DATABASE=ASP AG
+ 
++OUI:B843E4*
++ ID_OUI_FROM_DATABASE=Vlatacom
++
+ OUI:B847C6*
+  ID_OUI_FROM_DATABASE=SanJet Technology Corp.
+ 
+@@ -64075,6 +64951,9 @@ OUI:B8653B*
+ OUI:B86B23*
+  ID_OUI_FROM_DATABASE=Toshiba
+ 
++OUI:B86CE8*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
++
+ OUI:B870F4*
+  ID_OUI_FROM_DATABASE=COMPAL INFORMATION (KUNSHAN) CO., LTD.
+ 
+@@ -64543,6 +65422,9 @@ OUI:BCF2AF*
+ OUI:BCF5AC*
+  ID_OUI_FROM_DATABASE=LG Electronics
+ 
++OUI:BCF61C*
++ ID_OUI_FROM_DATABASE=Geomodeling Wuxi Technology Co. Ltd.
++
+ OUI:BCF685*
+  ID_OUI_FROM_DATABASE=D-Link International
+ 
+@@ -64762,6 +65644,9 @@ OUI:C0C3B6*
+ OUI:C0C520*
+  ID_OUI_FROM_DATABASE=Ruckus Wireless
+ 
++OUI:C0C569*
++ ID_OUI_FROM_DATABASE=SHANGHAI LYNUC CNC TECHNOLOGY CO.,LTD
++
+ OUI:C0C687*
+  ID_OUI_FROM_DATABASE=Cisco SPVTG
+ 
+@@ -64798,6 +65683,9 @@ OUI:C0EAE4*
+ OUI:C0F1C4*
+  ID_OUI_FROM_DATABASE=Pacidal Corporation Ltd.
+ 
++OUI:C0F79D*
++ ID_OUI_FROM_DATABASE=Powercode
++
+ OUI:C0F8DA*
+  ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+ 
+@@ -64816,18 +65704,27 @@ OUI:C401B1*
+ OUI:C40415*
+  ID_OUI_FROM_DATABASE=NETGEAR INC.,
+ 
++OUI:C40528*
++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
++
+ OUI:C40938*
+  ID_OUI_FROM_DATABASE=Fujian Star-net Communication Co., Ltd
+ 
+ OUI:C40ACB*
+  ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
+ 
++OUI:C40E45*
++ ID_OUI_FROM_DATABASE=ACK Networks,Inc.
++
+ OUI:C40F09*
+  ID_OUI_FROM_DATABASE=Hermes electronic GmbH
+ 
+ OUI:C4108A*
+  ID_OUI_FROM_DATABASE=Ruckus Wireless
+ 
++OUI:C4143C*
++ ID_OUI_FROM_DATABASE=Cisco
++
+ OUI:C416FA*
+  ID_OUI_FROM_DATABASE=Prysm Inc
+ 
+@@ -64858,6 +65755,9 @@ OUI:C42628*
+ OUI:C42795*
+  ID_OUI_FROM_DATABASE=Technicolor USA Inc.
+ 
++OUI:C4291D*
++ ID_OUI_FROM_DATABASE=KLEMSAN ELEKTRIK ELEKTRONIK SAN.VE TIC.AS.
++
+ OUI:C42C03*
+  ID_OUI_FROM_DATABASE=Apple
+ 
+@@ -64900,9 +65800,15 @@ OUI:C44AD0*
+ OUI:C44B44*
+  ID_OUI_FROM_DATABASE=Omniprint Inc.
+ 
++OUI:C44E1F*
++ ID_OUI_FROM_DATABASE=BlueN
++
+ OUI:C44EAC*
+  ID_OUI_FROM_DATABASE=Shenzhen Shiningworth Technology Co., Ltd.
+ 
++OUI:C45006*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
++
+ OUI:C45444*
+  ID_OUI_FROM_DATABASE=QUANTA COMPUTER INC.
+ 
+@@ -65002,6 +65908,9 @@ OUI:C495A2*
+ OUI:C49805*
+  ID_OUI_FROM_DATABASE=Minieum Networks, Inc
+ 
++OUI:C4A81D*
++ ID_OUI_FROM_DATABASE=D-Link International
++
+ OUI:C4AAA1*
+  ID_OUI_FROM_DATABASE=SUMMIT DEVELOPMENT, spol.s r.o.
+ 
+@@ -65014,12 +65923,18 @@ OUI:C4B512*
+ OUI:C4BA99*
+  ID_OUI_FROM_DATABASE=I+ME Actia Informatik und Mikro-Elektronik GmbH
+ 
++OUI:C4C0AE*
++ ID_OUI_FROM_DATABASE=MIDORI ELECTRONIC CO., LTD.
++
+ OUI:C4C19F*
+  ID_OUI_FROM_DATABASE=National Oilwell Varco Instrumentation, Monitoring, and Optimization (NOV IMO)
+ 
+ OUI:C4C755*
+  ID_OUI_FROM_DATABASE=Beijing HuaqinWorld Technology Co.,Ltd
+ 
++OUI:C4C919*
++ ID_OUI_FROM_DATABASE=Energy Imports Ltd
++
+ OUI:C4CAD9*
+  ID_OUI_FROM_DATABASE=Hangzhou H3C Technologies Co., Limited
+ 
+@@ -65050,6 +65965,9 @@ OUI:C4E7BE*
+ OUI:C4E92F*
+  ID_OUI_FROM_DATABASE=AB Sciex
+ 
++OUI:C4E984*
++ ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
++
+ OUI:C4EBE3*
+  ID_OUI_FROM_DATABASE=RRCN SAS
+ 
+@@ -65092,6 +66010,9 @@ OUI:C80E95*
+ OUI:C81479*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
++OUI:C816BD*
++ ID_OUI_FROM_DATABASE=HISENSE ELECTRIC CO.,LTD.
++
+ OUI:C819F7*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
+@@ -65302,6 +66223,9 @@ OUI:C8D2C1*
+ OUI:C8D3A3*
+  ID_OUI_FROM_DATABASE=D-Link International
+ 
++OUI:C8D429*
++ ID_OUI_FROM_DATABASE=Muehlbauer AG
++
+ OUI:C8D5FE*
+  ID_OUI_FROM_DATABASE=Shenzhen Zowee Technology Co., Ltd
+ 
+@@ -65428,6 +66352,9 @@ OUI:CC34D7*
+ OUI:CC3540*
+  ID_OUI_FROM_DATABASE=Technicolor USA Inc.
+ 
++OUI:CC398C*
++ ID_OUI_FROM_DATABASE=Shiningtek
++
+ OUI:CC3A61*
+  ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO MECHANICS CO., LTD.
+ 
+@@ -65527,6 +66454,12 @@ OUI:CC7D37*
+ OUI:CC7EE7*
+  ID_OUI_FROM_DATABASE=Panasonic AVC Networks Company
+ 
++OUI:CC856C*
++ ID_OUI_FROM_DATABASE=SHENZHEN MDK DIGITAL TECHNOLOGY CO.,LTD
++
++OUI:CC89FD*
++ ID_OUI_FROM_DATABASE=Nokia Corporation
++
+ OUI:CC8CE3*
+  ID_OUI_FROM_DATABASE=Texas Instruments
+ 
+@@ -65539,18 +66472,27 @@ OUI:CC912B*
+ OUI:CC944A*
+  ID_OUI_FROM_DATABASE=Pfeiffer Vacuum GmbH
+ 
++OUI:CC95D7*
++ ID_OUI_FROM_DATABASE=VIZIO, Inc
++
+ OUI:CC96A0*
+  ID_OUI_FROM_DATABASE=Shenzhen Huawei Communication Technologies Co., Ltd
+ 
+ OUI:CC9E00*
+  ID_OUI_FROM_DATABASE=Nintendo Co., Ltd.
+ 
++OUI:CC9F35*
++ ID_OUI_FROM_DATABASE=Transbit Sp. z o.o.
++
+ OUI:CCA374*
+  ID_OUI_FROM_DATABASE=Guangdong Guanglian Electronic Technology Co.Ltd
+ 
+ OUI:CCA462*
+  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+ 
++OUI:CCA614*
++ ID_OUI_FROM_DATABASE=AIFA TECHNOLOGY CORP.
++
+ OUI:CCAF78*
+  ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+ 
+@@ -65650,6 +66592,9 @@ OUI:CCF954*
+ OUI:CCF9E8*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
++OUI:CCFA00*
++ ID_OUI_FROM_DATABASE=LG Electronics
++
+ OUI:CCFB65*
+  ID_OUI_FROM_DATABASE=Nintendo Co., Ltd.
+ 
+@@ -65731,6 +66676,9 @@ OUI:D0574C*
+ OUI:D05785*
+  ID_OUI_FROM_DATABASE=Pantech Co., Ltd.
+ 
++OUI:D057A1*
++ ID_OUI_FROM_DATABASE=Werma Signaltechnik GmbH & Co. KG
++
+ OUI:D05875*
+  ID_OUI_FROM_DATABASE=Active Control Technology Inc.
+ 
+@@ -65743,6 +66691,9 @@ OUI:D05A0F*
+ OUI:D05FCE*
+  ID_OUI_FROM_DATABASE=Hitachi Data Systems
+ 
++OUI:D0634D*
++ ID_OUI_FROM_DATABASE=Meiko Maschinenbau GmbH &amp; Co. KG
++
+ OUI:D063B4*
+  ID_OUI_FROM_DATABASE=SolidRun Ltd.
+ 
+@@ -65755,6 +66706,9 @@ OUI:D067E5*
+ OUI:D0699E*
+  ID_OUI_FROM_DATABASE=LUMINEX Lighting Control Equipment
+ 
++OUI:D069D0*
++ ID_OUI_FROM_DATABASE=Verto Medical Solutions, LLC
++
+ OUI:D0737F*
+  ID_OUI_FROM_DATABASE=Mini-Circuits
+ 
+@@ -65767,12 +66721,18 @@ OUI:D073D5*
+ OUI:D075BE*
+  ID_OUI_FROM_DATABASE=Reno A&E
+ 
++OUI:D07AB5*
++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
++
+ OUI:D07DE5*
+  ID_OUI_FROM_DATABASE=Forward Pay Systems, Inc.
+ 
+ OUI:D07E28*
+  ID_OUI_FROM_DATABASE=Hewlett Packard
+ 
++OUI:D07E35*
++ ID_OUI_FROM_DATABASE=Intel Corporate
++
+ OUI:D08999*
+  ID_OUI_FROM_DATABASE=APCON, Inc.
+ 
+@@ -65797,6 +66757,9 @@ OUI:D095C7*
+ OUI:D09B05*
+  ID_OUI_FROM_DATABASE=Emtronix
+ 
++OUI:D09C30*
++ ID_OUI_FROM_DATABASE=Foster Electric Company, Limited
++
+ OUI:D09D0A*
+  ID_OUI_FROM_DATABASE=LINKCOM
+ 
+@@ -65824,6 +66787,9 @@ OUI:D0B53D*
+ OUI:D0BB80*
+  ID_OUI_FROM_DATABASE=SHL Telemedicine International Ltd.
+ 
++OUI:D0BD01*
++ ID_OUI_FROM_DATABASE=DS International
++
+ OUI:D0BE2C*
+  ID_OUI_FROM_DATABASE=CNSLink Co., Ltd.
+ 
+@@ -65965,6 +66931,9 @@ OUI:D4206D*
+ OUI:D4223F*
+  ID_OUI_FROM_DATABASE=Lenovo Mobile Communication Technology Ltd.
+ 
++OUI:D4224E*
++ ID_OUI_FROM_DATABASE=Alcatel Lucent
++
+ OUI:D42751*
+  ID_OUI_FROM_DATABASE=Infopia Co., Ltd
+ 
+@@ -65977,6 +66946,12 @@ OUI:D429EA*
+ OUI:D42C3D*
+  ID_OUI_FROM_DATABASE=Sky Light Digital Limited
+ 
++OUI:D42F23*
++ ID_OUI_FROM_DATABASE=Akenori PTE Ltd
++
++OUI:D4319D*
++ ID_OUI_FROM_DATABASE=Sinwatec
++
+ OUI:D43A65*
+  ID_OUI_FROM_DATABASE=IGRS Engineering Lab Ltd.
+ 
+@@ -66241,6 +67216,9 @@ OUI:D809C3*
+ OUI:D80DE3*
+  ID_OUI_FROM_DATABASE=FXI TECHNOLOGIES AS
+ 
++OUI:D8150D*
++ ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
++
+ OUI:D8160A*
+  ID_OUI_FROM_DATABASE=Nippon Electro-Sensory Devices
+ 
+@@ -66277,6 +67255,9 @@ OUI:D82916*
+ OUI:D82986*
+  ID_OUI_FROM_DATABASE=Best Wish Technology LTD
+ 
++OUI:D82A15*
++ ID_OUI_FROM_DATABASE=Leitner SpA
++
+ OUI:D82A7E*
+  ID_OUI_FROM_DATABASE=Nokia Corporation
+ 
+@@ -66325,9 +67306,15 @@ OUI:D85D4C*
+ OUI:D85D84*
+  ID_OUI_FROM_DATABASE=CAx soft GmbH
+ 
++OUI:D86194*
++ ID_OUI_FROM_DATABASE=Objetivos y Sevicios de Valor Añadido
++
+ OUI:D862DB*
+  ID_OUI_FROM_DATABASE=Eno Inc.
+ 
++OUI:D86595*
++ ID_OUI_FROM_DATABASE=Toy's Myth Inc.
++
+ OUI:D866C6*
+  ID_OUI_FROM_DATABASE=Shenzhen Daystar Technology Co.,ltd
+ 
+@@ -66361,6 +67348,9 @@ OUI:D87988*
+ OUI:D87CDD*
+  ID_OUI_FROM_DATABASE=SANIX INCORPORATED
+ 
++OUI:D881CE*
++ ID_OUI_FROM_DATABASE=AHN INC.
++
+ OUI:D88A3B*
+  ID_OUI_FROM_DATABASE=UNIT-EM
+ 
+@@ -66418,6 +67408,9 @@ OUI:D8B377*
+ OUI:D8B6C1*
+  ID_OUI_FROM_DATABASE=NetworkAccountant, Inc.
+ 
++OUI:D8B6D6*
++ ID_OUI_FROM_DATABASE=Blu Tether Limited
++
+ OUI:D8B8F6*
+  ID_OUI_FROM_DATABASE=Nantworks
+ 
+@@ -66466,6 +67459,12 @@ OUI:D8DA52*
+ OUI:D8DCE9*
+  ID_OUI_FROM_DATABASE=Kunshan Erlab ductless filtration system Co.,Ltd
+ 
++OUI:D8DD5F*
++ ID_OUI_FROM_DATABASE=BALMUDA Inc.
++
++OUI:D8DDFD*
++ ID_OUI_FROM_DATABASE=Texas Instruments
++
+ OUI:D8DF0D*
+  ID_OUI_FROM_DATABASE=beroNet GmbH
+ 
+@@ -66484,9 +67483,15 @@ OUI:D8E952*
+ OUI:D8EB97*
+  ID_OUI_FROM_DATABASE=TRENDnet, Inc.
+ 
++OUI:D8EE78*
++ ID_OUI_FROM_DATABASE=Moog Protokraft
++
+ OUI:D8F0F2*
+  ID_OUI_FROM_DATABASE=Zeebo Inc
+ 
++OUI:D8FC93*
++ ID_OUI_FROM_DATABASE=Intel Corporate
++
+ OUI:D8FE8F*
+  ID_OUI_FROM_DATABASE=IDFone Co., Ltd.
+ 
+@@ -66499,6 +67504,9 @@ OUI:DC0265*
+ OUI:DC028E*
+  ID_OUI_FROM_DATABASE=zte corporation
+ 
++OUI:DC052F*
++ ID_OUI_FROM_DATABASE=National Products Inc.
++
+ OUI:DC0575*
+  ID_OUI_FROM_DATABASE=SIEMENS ENERGY AUTOMATION
+ 
+@@ -66619,6 +67627,9 @@ OUI:DC86D8*
+ OUI:DC9B1E*
+  ID_OUI_FROM_DATABASE=Intercom, Inc.
+ 
++OUI:DC9B9C*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:DC9C52*
+  ID_OUI_FROM_DATABASE=Sapphire Technology Limited.
+ 
+@@ -66670,6 +67681,9 @@ OUI:DCC101*
+ OUI:DCC422*
+  ID_OUI_FROM_DATABASE=Systembase Limited
+ 
++OUI:DCC793*
++ ID_OUI_FROM_DATABASE=Nokia Corporation
++
+ OUI:DCCBA8*
+  ID_OUI_FROM_DATABASE=Explora Technologies Inc
+ 
+@@ -66703,6 +67717,9 @@ OUI:DCDECA*
+ OUI:DCE2AC*
+  ID_OUI_FROM_DATABASE=Lumens Digital Optics Inc.
+ 
++OUI:DCE578*
++ ID_OUI_FROM_DATABASE=Experimental Factory of Scientific Engineering and Special Design Department
++
+ OUI:DCE71C*
+  ID_OUI_FROM_DATABASE=AUG Elektronik GmbH
+ 
+@@ -66781,6 +67798,9 @@ OUI:E03005*
+ OUI:E031D0*
+  ID_OUI_FROM_DATABASE=SZ Telstar CO., LTD
+ 
++OUI:E036E3*
++ ID_OUI_FROM_DATABASE=Stage One International Co., Ltd.
++
+ OUI:E039D7*
+  ID_OUI_FROM_DATABASE=Plexxi, Inc.
+ 
+@@ -66793,6 +67813,9 @@ OUI:E03E4A*
+ OUI:E03E7D*
+  ID_OUI_FROM_DATABASE=data-complex GmbH
+ 
++OUI:E03F49*
++ ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC.
++
+ OUI:E0469A*
+  ID_OUI_FROM_DATABASE=NETGEAR
+ 
+@@ -66841,6 +67864,9 @@ OUI:E0757D*
+ OUI:E07C62*
+  ID_OUI_FROM_DATABASE=Whistle Labs, Inc.
+ 
++OUI:E07F53*
++ ID_OUI_FROM_DATABASE=TECHBOARD SRL
++
+ OUI:E07F88*
+  ID_OUI_FROM_DATABASE=EVIDENCE Network SIA
+ 
+@@ -66967,6 +67993,9 @@ OUI:E0D10A*
+ OUI:E0D1E6*
+  ID_OUI_FROM_DATABASE=Aliph dba Jawbone
+ 
++OUI:E0D31A*
++ ID_OUI_FROM_DATABASE=EQUES Technology Co., Limited
++
+ OUI:E0D7BA*
+  ID_OUI_FROM_DATABASE=Texas Instruments
+ 
+@@ -66979,6 +68008,9 @@ OUI:E0DADC*
+ OUI:E0DB55*
+  ID_OUI_FROM_DATABASE=Dell Inc
+ 
++OUI:E0DB88*
++ ID_OUI_FROM_DATABASE=Open Standard Digital-IF Interface for SATCOM Systems
++
+ OUI:E0DCA0*
+  ID_OUI_FROM_DATABASE=Siemens Electrical Apparatus Ltd., Suzhou Chengdu Branch
+ 
+@@ -67030,6 +68062,9 @@ OUI:E40439*
+ OUI:E4115B*
+  ID_OUI_FROM_DATABASE=Hewlett Packard
+ 
++OUI:E4121D*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
++
+ OUI:E41289*
+  ID_OUI_FROM_DATABASE=topsystem Systemhaus GmbH
+ 
+@@ -67093,6 +68128,9 @@ OUI:E446BD*
+ OUI:E448C7*
+  ID_OUI_FROM_DATABASE=Cisco SPVTG
+ 
++OUI:E44C6C*
++ ID_OUI_FROM_DATABASE=Shenzhen Guo Wei Electronic Co,. Ltd.
++
+ OUI:E44E18*
+  ID_OUI_FROM_DATABASE=Gardasoft VisionLimited
+ 
+@@ -67144,6 +68182,9 @@ OUI:E47CF9*
+ OUI:E47D5A*
+  ID_OUI_FROM_DATABASE=Beijing Hanbang Technology Corp.
+ 
++OUI:E48184*
++ ID_OUI_FROM_DATABASE=Alcatel-Lucent
++
+ OUI:E481B3*
+  ID_OUI_FROM_DATABASE=Shenzhen ACT Industrial Co.,Ltd.
+ 
+@@ -67267,6 +68308,9 @@ OUI:E8056D*
+ OUI:E80688*
+  ID_OUI_FROM_DATABASE=Apple
+ 
++OUI:E8088B*
++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
++
+ OUI:E80B13*
+  ID_OUI_FROM_DATABASE=Akib Systems Taiwan, INC
+ 
+@@ -67285,6 +68329,9 @@ OUI:E81132*
+ OUI:E81324*
+  ID_OUI_FROM_DATABASE=GuangZhou Bonsoninfo System CO.,LTD
+ 
++OUI:E817FC*
++ ID_OUI_FROM_DATABASE=NIFTY Corporation
++
+ OUI:E82877*
+  ID_OUI_FROM_DATABASE=TMY Co., Ltd.
+ 
+@@ -67363,6 +68410,9 @@ OUI:E85E53*
+ OUI:E8611F*
+  ID_OUI_FROM_DATABASE=Dawning Information Industry Co.,Ltd
+ 
++OUI:E8617E*
++ ID_OUI_FROM_DATABASE=Liteon Technology Corporation
++
+ OUI:E86183*
+  ID_OUI_FROM_DATABASE=Black Diamond Advanced Technology, LLC
+ 
+@@ -67438,6 +68488,9 @@ OUI:E8A4C1*
+ OUI:E8ABFA*
+  ID_OUI_FROM_DATABASE=Shenzhen Reecam Tech.Ltd.
+ 
++OUI:E8B1FC*
++ ID_OUI_FROM_DATABASE=Intel Corporate
++
+ OUI:E8B4AE*
+  ID_OUI_FROM_DATABASE=Shenzhen C&D Electronics Co.,Ltd
+ 
+@@ -67519,6 +68572,9 @@ OUI:E8E776*
+ OUI:E8E875*
+  ID_OUI_FROM_DATABASE=iS5 Communications Inc.
+ 
++OUI:E8EA6A*
++ ID_OUI_FROM_DATABASE=StarTech.com
++
+ OUI:E8EADA*
+  ID_OUI_FROM_DATABASE=Denkovi Assembly Electroncs LTD
+ 
+@@ -67534,6 +68590,9 @@ OUI:E8F226*
+ OUI:E8F928*
+  ID_OUI_FROM_DATABASE=RFTECH SRL
+ 
++OUI:E8FC60*
++ ID_OUI_FROM_DATABASE=ELCOM Innovations Private Limited
++
+ OUI:EC0ED6*
+  ID_OUI_FROM_DATABASE=ITECH INSTRUMENTS SAS
+ 
+@@ -67756,6 +68815,12 @@ OUI:ECF236*
+ OUI:ECF35B*
+  ID_OUI_FROM_DATABASE=Nokia Corporation
+ 
++OUI:ECF4BB*
++ ID_OUI_FROM_DATABASE=Dell Inc PCBA Test
++
++OUI:ECF72B*
++ ID_OUI_FROM_DATABASE=HD DIGITAL TECH CO., LTD.
++
+ OUI:ECFAAA*
+  ID_OUI_FROM_DATABASE=The IMS Company
+ 
+@@ -67783,6 +68848,9 @@ OUI:F008F1*
+ OUI:F013C3*
+  ID_OUI_FROM_DATABASE=SHENZHEN FENDA TECHNOLOGY CO., LTD
+ 
++OUI:F015A0*
++ ID_OUI_FROM_DATABASE=KyungDong One Co., Ltd.
++
+ OUI:F01C13*
+  ID_OUI_FROM_DATABASE=LG Electronics
+ 
+@@ -67822,12 +68890,21 @@ OUI:F02A61*
+ OUI:F02FD8*
+  ID_OUI_FROM_DATABASE=Bi2-Vision
+ 
++OUI:F0321A*
++ ID_OUI_FROM_DATABASE=Mita-Teknik A/S
++
+ OUI:F037A1*
+  ID_OUI_FROM_DATABASE=Huike Electronics (SHENZHEN) CO., LTD.
+ 
++OUI:F03A4B*
++ ID_OUI_FROM_DATABASE=Bloombase, Inc.
++
+ OUI:F03A55*
+  ID_OUI_FROM_DATABASE=Omega Elektronik AS
+ 
++OUI:F03FF8*
++ ID_OUI_FROM_DATABASE=R L Drake
++
+ OUI:F04335*
+  ID_OUI_FROM_DATABASE=DVN(Shanghai)Ltd.
+ 
+@@ -67900,12 +68977,18 @@ OUI:F07F0C*
+ OUI:F081AF*
+  ID_OUI_FROM_DATABASE=IRZ AUTOMATION TECHNOLOGIES LTD
+ 
++OUI:F08261*
++ ID_OUI_FROM_DATABASE=SAGEMCOM
++
+ OUI:F0842F*
+  ID_OUI_FROM_DATABASE=ADB Broadband Italia
+ 
+ OUI:F084C9*
+  ID_OUI_FROM_DATABASE=zte corporation
+ 
++OUI:F08A28*
++ ID_OUI_FROM_DATABASE=JIANGSU HENGSION ELECTRONIC S and T CO.,LTD
++
+ OUI:F08BFE*
+  ID_OUI_FROM_DATABASE=COSTEL.,CO.LTD
+ 
+@@ -67990,6 +69073,9 @@ OUI:F0DA7C*
+ OUI:F0DB30*
+  ID_OUI_FROM_DATABASE=Yottabyte
+ 
++OUI:F0DBF8*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:F0DCE2*
+  ID_OUI_FROM_DATABASE=Apple
+ 
+@@ -68029,6 +69115,9 @@ OUI:F0F260*
+ OUI:F0F5AE*
+  ID_OUI_FROM_DATABASE=Adaptrum Inc.
+ 
++OUI:F0F61C*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:F0F644*
+  ID_OUI_FROM_DATABASE=Whitesky Science & Technology Co.,Ltd.
+ 
+@@ -68089,6 +69178,9 @@ OUI:F42896*
+ OUI:F436E1*
+  ID_OUI_FROM_DATABASE=Abilis Systems SARL
+ 
++OUI:F437B7*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:F43814*
+  ID_OUI_FROM_DATABASE=Shanghai Howell Electronic Co.,Ltd
+ 
+@@ -68191,6 +69283,9 @@ OUI:F48771*
+ OUI:F48E09*
+  ID_OUI_FROM_DATABASE=Nokia Corporation
+ 
++OUI:F490CA*
++ ID_OUI_FROM_DATABASE=Tensorcom
++
+ OUI:F490EA*
+  ID_OUI_FROM_DATABASE=Deciso B.V.
+ 
+@@ -68221,9 +69316,15 @@ OUI:F4B164*
+ OUI:F4B381*
+  ID_OUI_FROM_DATABASE=WindowMaster A/S
+ 
++OUI:F4B52F*
++ ID_OUI_FROM_DATABASE=Juniper networks
++
+ OUI:F4B549*
+  ID_OUI_FROM_DATABASE=Yeastar Technology Co., Ltd.
+ 
++OUI:F4B6E5*
++ ID_OUI_FROM_DATABASE=TerraSem Co.,Ltd
++
+ OUI:F4B72A*
+  ID_OUI_FROM_DATABASE=TIME INTERCONNECT LTD
+ 
+@@ -68251,6 +69352,9 @@ OUI:F4CD90*
+ OUI:F4CE46*
+  ID_OUI_FROM_DATABASE=Hewlett-Packard Company
+ 
++OUI:F4CFE2*
++ ID_OUI_FROM_DATABASE=Cisco
++
+ OUI:F4D9FB*
+  ID_OUI_FROM_DATABASE=Samsung Electronics CO., LTD
+ 
+@@ -68260,6 +69364,9 @@ OUI:F4DC4D*
+ OUI:F4DCDA*
+  ID_OUI_FROM_DATABASE=Zhuhai Jiahe Communication Technology Co., limited
+ 
++OUI:F4DCF9*
++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
++
+ OUI:F4E142*
+  ID_OUI_FROM_DATABASE=Delta Elektronika BV
+ 
+@@ -68413,6 +69520,9 @@ OUI:F8572E*
+ OUI:F85BC9*
+  ID_OUI_FROM_DATABASE=M-Cube Spa
+ 
++OUI:F85C45*
++ ID_OUI_FROM_DATABASE=IC Nexus Co. Ltd.
++
+ OUI:F85F2A*
+  ID_OUI_FROM_DATABASE=Nokia Corporation
+ 
+@@ -68494,6 +69604,9 @@ OUI:F8A45F*
+ OUI:F8A963*
+  ID_OUI_FROM_DATABASE=COMPAL INFORMATION (KUNSHAN) CO., LTD.
+ 
++OUI:F8A9D0*
++ ID_OUI_FROM_DATABASE=LG Electronics
++
+ OUI:F8A9DE*
+  ID_OUI_FROM_DATABASE=PUISSANCE PLUS
+ 
+@@ -68566,6 +69679,9 @@ OUI:F8DC7A*
+ OUI:F8DFA8*
+  ID_OUI_FROM_DATABASE=ZTE Corporation
+ 
++OUI:F8E079*
++ ID_OUI_FROM_DATABASE=Motorola Mobility LLC
++
+ OUI:F8E4FB*
+  ID_OUI_FROM_DATABASE=Actiontec Electronics, Inc
+ 
+@@ -68581,6 +69697,9 @@ OUI:F8EA0A*
+ OUI:F8EDA5*
+  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+ 
++OUI:F8F005*
++ ID_OUI_FROM_DATABASE=Newport Media Inc.
++
+ OUI:F8F014*
+  ID_OUI_FROM_DATABASE=RackWare Inc.
+ 
+@@ -68623,12 +69742,18 @@ OUI:FC01CD*
+ OUI:FC0647*
+  ID_OUI_FROM_DATABASE=Cortland Research, LLC
+ 
++OUI:FC07A0*
++ ID_OUI_FROM_DATABASE=LRE Medical GmbH
++
+ OUI:FC0877*
+  ID_OUI_FROM_DATABASE=Prentke Romich Company
+ 
+ OUI:FC09D8*
+  ID_OUI_FROM_DATABASE=ACTEON Group
+ 
++OUI:FC09F6*
++ ID_OUI_FROM_DATABASE=GUANGDONG TONZE ELECTRIC CO.,LTD
++
+ OUI:FC0A81*
+  ID_OUI_FROM_DATABASE=Motorola Solutions Inc.
+ 
+@@ -68641,6 +69766,15 @@ OUI:FC10BD*
+ OUI:FC1186*
+  ID_OUI_FROM_DATABASE=Logic3 plc
+ 
++OUI:FC1349*
++ ID_OUI_FROM_DATABASE=Global Apps Corp.
++
++OUI:FC15B4*
++ ID_OUI_FROM_DATABASE=Hewlett Packard
++
++OUI:FC1607*
++ ID_OUI_FROM_DATABASE=Taian Technology(Wuxi) Co.,Ltd.
++
+ OUI:FC1794*
+  ID_OUI_FROM_DATABASE=InterCreative Co., Ltd
+ 
+@@ -68668,6 +69802,9 @@ OUI:FC229C*
+ OUI:FC253F*
+  ID_OUI_FROM_DATABASE=Apple
+ 
++OUI:FC27A2*
++ ID_OUI_FROM_DATABASE=TRANS ELECTRIC CO., LTD.
++
+ OUI:FC2A54*
+  ID_OUI_FROM_DATABASE=Connected Data, Inc.
+ 
+@@ -68761,6 +69898,9 @@ OUI:FC8E7E*
+ OUI:FC8FC4*
+  ID_OUI_FROM_DATABASE=Intelligent Technology Inc.
+ 
++OUI:FC923B*
++ ID_OUI_FROM_DATABASE=Nokia Corporation
++
+ OUI:FC946C*
+  ID_OUI_FROM_DATABASE=UBIVELOX
+ 
+@@ -68791,6 +69931,9 @@ OUI:FCAF6A*
+ OUI:FCB0C4*
+  ID_OUI_FROM_DATABASE=Shanghai DareGlobal Technologies Co., Ltd
+ 
++OUI:FCBBA1*
++ ID_OUI_FROM_DATABASE=Shenzhen Minicreate Technology Co.,Ltd
++
+ OUI:FCC23D*
+  ID_OUI_FROM_DATABASE=Atmel Corporation
+ 
+@@ -68851,6 +69994,9 @@ OUI:FCF528*
+ OUI:FCF8AE*
+  ID_OUI_FROM_DATABASE=Intel Corporate
+ 
++OUI:FCF8B7*
++ ID_OUI_FROM_DATABASE=TRONTEQ Electronic
++
+ OUI:FCFAF7*
+  ID_OUI_FROM_DATABASE=Shanghai Baud Data Communication Co.,Ltd.
+ 
+diff --git a/hwdb/20-pci-vendor-model.hwdb b/hwdb/20-pci-vendor-model.hwdb
+index 289f81c..6142dc8 100644
+--- a/hwdb/20-pci-vendor-model.hwdb
++++ b/hwdb/20-pci-vendor-model.hwdb
+@@ -917,6 +917,9 @@ pci:v00001000d0000005Bsv00001028sd00001F37*
+ pci:v00001000d0000005Bsv00001028sd00001F38*
+  ID_MODEL_FROM_DATABASE=PERC H710 Mini (for monolithics)
+ 
++pci:v00001000d0000005Bsv00008086sd00003510*
++ ID_MODEL_FROM_DATABASE=RMS25PB080 RAID Controller
++
+ pci:v00001000d0000005Bsv00008086sd00003513*
+  ID_MODEL_FROM_DATABASE=RMS25CB080 RAID Controller
+ 
+@@ -4203,7 +4206,7 @@ pci:v00001002d00006631*
+  ID_MODEL_FROM_DATABASE=Oland
+ 
+ pci:v00001002d00006640*
+- ID_MODEL_FROM_DATABASE=Saturn XT [Radeon HD 8950M]
++ ID_MODEL_FROM_DATABASE=Saturn XT [FirePro M6100]
+ 
+ pci:v00001002d00006641*
+  ID_MODEL_FROM_DATABASE=Saturn PRO [Radeon HD 8930M]
+@@ -4248,7 +4251,10 @@ pci:v00001002d00006660*
+  ID_MODEL_FROM_DATABASE=Sun XT [Radeon HD 8670A/8670M/8690M]
+ 
+ pci:v00001002d00006663*
+- ID_MODEL_FROM_DATABASE=Sun PRO [Radeon HD 8570M]
++ ID_MODEL_FROM_DATABASE=Sun PRO [Radeon HD 8570A/8570M]
++
++pci:v00001002d00006663sv00001025sd00000846*
++ ID_MODEL_FROM_DATABASE=Radeon HD 8570A
+ 
+ pci:v00001002d00006664*
+  ID_MODEL_FROM_DATABASE=Jet XT [Radeon R5 M200 Series]
+@@ -4904,12 +4910,18 @@ pci:v00001002d00006758sv0000174Bsd00007670*
+ pci:v00001002d00006758sv0000174Bsd0000E181*
+  ID_MODEL_FROM_DATABASE=Radeon HD 6670
+ 
++pci:v00001002d00006758sv00001787sd00002309*
++ ID_MODEL_FROM_DATABASE=Radeon HD 6670
++
+ pci:v00001002d00006759*
+- ID_MODEL_FROM_DATABASE=Turks PRO [Radeon HD 6570/7570]
++ ID_MODEL_FROM_DATABASE=Turks PRO [Radeon HD 6570/7570/8550]
+ 
+ pci:v00001002d00006759sv0000103Csd00003130*
+  ID_MODEL_FROM_DATABASE=Radeon HD 6570
+ 
++pci:v00001002d00006759sv00001043sd00000403*
++ ID_MODEL_FROM_DATABASE=Radeon HD 6570
++
+ pci:v00001002d00006759sv00001462sd00002500*
+  ID_MODEL_FROM_DATABASE=Radeon HD 6570
+ 
+@@ -4925,6 +4937,9 @@ pci:v00001002d00006759sv00001642sd00003A67*
+ pci:v00001002d00006759sv00001682sd00003280*
+  ID_MODEL_FROM_DATABASE=Radeon HD 7570
+ 
++pci:v00001002d00006759sv00001682sd00003530*
++ ID_MODEL_FROM_DATABASE=Radeon HD 8550
++
+ pci:v00001002d00006759sv0000174Bsd00007570*
+  ID_MODEL_FROM_DATABASE=Radeon HD 7570
+ 
+@@ -5585,6 +5600,9 @@ pci:v00001002d00006779sv0000103Csd00002128*
+ pci:v00001002d00006779sv0000103Csd00002AEE*
+  ID_MODEL_FROM_DATABASE=Radeon HD 7450A
+ 
++pci:v00001002d00006779sv00001462sd00002125*
++ ID_MODEL_FROM_DATABASE=Radeon HD 6450
++
+ pci:v00001002d00006779sv00001462sd00002346*
+  ID_MODEL_FROM_DATABASE=Radeon HD 7450
+ 
+@@ -5813,6 +5831,15 @@ pci:v00001002d000067A1*
+ pci:v00001002d000067A2*
+  ID_MODEL_FROM_DATABASE=Hawaii GL
+ 
++pci:v00001002d000067A8*
++ ID_MODEL_FROM_DATABASE=Hawaii
++
++pci:v00001002d000067A9*
++ ID_MODEL_FROM_DATABASE=Hawaii
++
++pci:v00001002d000067AA*
++ ID_MODEL_FROM_DATABASE=Hawaii
++
+ pci:v00001002d000067B0*
+  ID_MODEL_FROM_DATABASE=Hawaii XT [Radeon R9 290X]
+ 
+@@ -5907,7 +5934,7 @@ pci:v00001002d00006821sv00001002sd0000031E*
+  ID_MODEL_FROM_DATABASE=FirePro SX4000
+ 
+ pci:v00001002d00006822*
+- ID_MODEL_FROM_DATABASE=Venus PRO
++ ID_MODEL_FROM_DATABASE=Venus PRO [Radeon E8860]
+ 
+ pci:v00001002d00006823*
+  ID_MODEL_FROM_DATABASE=Venus PRO [Radeon HD 8850M]
+@@ -7463,6 +7490,9 @@ pci:v00001002d000068F9sv0000103Csd00002AAE*
+ pci:v00001002d000068F9sv0000103Csd00003580*
+  ID_MODEL_FROM_DATABASE=Radeon HD 5450
+ 
++pci:v00001002d000068F9sv00001043sd00000386*
++ ID_MODEL_FROM_DATABASE=Radeon HD 5450
++
+ pci:v00001002d000068F9sv00001043sd000003C2*
+  ID_MODEL_FROM_DATABASE=EAH5450 SILENT/DI/512MD2 (LP)
+ 
+@@ -8834,9 +8864,18 @@ pci:v00001002d00009901*
+ pci:v00001002d00009902*
+  ID_MODEL_FROM_DATABASE=Trinity HDMI Audio Controller
+ 
++pci:v00001002d00009902sv0000103Csd0000194E*
++ ID_MODEL_FROM_DATABASE=ProBook 455 G1 Notebook
++
+ pci:v00001002d00009903*
+  ID_MODEL_FROM_DATABASE=Trinity [Radeon HD 7640G]
+ 
++pci:v00001002d00009903sv0000103Csd0000194E*
++ ID_MODEL_FROM_DATABASE=ProBook 455 G1 Notebook
++
++pci:v00001002d00009903sv0000103Csd00001952*
++ ID_MODEL_FROM_DATABASE=ProBook 455 G1 Notebook
++
+ pci:v00001002d00009904*
+  ID_MODEL_FROM_DATABASE=Trinity [Radeon HD 7560D]
+ 
+@@ -10964,6 +11003,9 @@ pci:v00001022d00007801*
+ pci:v00001022d00007801sv0000103Csd0000168B*
+  ID_MODEL_FROM_DATABASE=ProBook 4535s Notebook
+ 
++pci:v00001022d00007801sv0000103Csd0000194E*
++ ID_MODEL_FROM_DATABASE=ProBook 455 G1 Notebook
++
+ pci:v00001022d00007802*
+  ID_MODEL_FROM_DATABASE=FCH SATA Controller [RAID mode]
+ 
+@@ -10982,27 +11024,45 @@ pci:v00001022d00007806*
+ pci:v00001022d00007807*
+  ID_MODEL_FROM_DATABASE=FCH USB OHCI Controller
+ 
++pci:v00001022d00007807sv0000103Csd0000194E*
++ ID_MODEL_FROM_DATABASE=ProBook 455 G1 Notebook
++
+ pci:v00001022d00007808*
+  ID_MODEL_FROM_DATABASE=FCH USB EHCI Controller
+ 
++pci:v00001022d00007808sv0000103Csd0000194E*
++ ID_MODEL_FROM_DATABASE=ProBook 455 G1 Notebook
++
+ pci:v00001022d00007809*
+  ID_MODEL_FROM_DATABASE=FCH USB OHCI Controller
+ 
++pci:v00001022d00007809sv0000103Csd0000194E*
++ ID_MODEL_FROM_DATABASE=ProBook 455 G1 Notebook
++
+ pci:v00001022d0000780B*
+  ID_MODEL_FROM_DATABASE=FCH SMBus Controller
+ 
++pci:v00001022d0000780Bsv0000103Csd0000194E*
++ ID_MODEL_FROM_DATABASE=ProBook 455 G1 Notebook
++
+ pci:v00001022d0000780C*
+  ID_MODEL_FROM_DATABASE=FCH IDE Controller
+ 
+ pci:v00001022d0000780D*
+  ID_MODEL_FROM_DATABASE=FCH Azalia Controller
+ 
++pci:v00001022d0000780Dsv0000103Csd0000194E*
++ ID_MODEL_FROM_DATABASE=ProBook 455 G1 Notebook
++
+ pci:v00001022d0000780Dsv00001043sd00008444*
+  ID_MODEL_FROM_DATABASE=F2A85-M Series
+ 
+ pci:v00001022d0000780E*
+  ID_MODEL_FROM_DATABASE=FCH LPC Bridge
+ 
++pci:v00001022d0000780Esv0000103Csd0000194E*
++ ID_MODEL_FROM_DATABASE=ProBook 455 G1 Notebook
++
+ pci:v00001022d0000780F*
+  ID_MODEL_FROM_DATABASE=FCH PCI Bridge
+ 
+@@ -11015,11 +11075,41 @@ pci:v00001022d00007813*
+ pci:v00001022d00007814*
+  ID_MODEL_FROM_DATABASE=FCH USB XHCI Controller
+ 
++pci:v00001022d00007814sv0000103Csd0000194E*
++ ID_MODEL_FROM_DATABASE=ProBook 455 G1 Notebook
++
+ pci:v00001022d00007900*
+- ID_MODEL_FROM_DATABASE=CZ SATA Controller [IDE mode]
++ ID_MODEL_FROM_DATABASE=FCH SATA Controller [IDE mode]
++
++pci:v00001022d00007901*
++ ID_MODEL_FROM_DATABASE=FCH SATA Controller [AHCI mode]
++
++pci:v00001022d00007902*
++ ID_MODEL_FROM_DATABASE=FCH SATA Controller [RAID mode]
++
++pci:v00001022d00007903*
++ ID_MODEL_FROM_DATABASE=FCH SATA Controller [RAID mode]
++
++pci:v00001022d00007904*
++ ID_MODEL_FROM_DATABASE=FCH SATA Controller [AHCI mode]
++
++pci:v00001022d00007906*
++ ID_MODEL_FROM_DATABASE=FCH SD Flash Controller
++
++pci:v00001022d00007908*
++ ID_MODEL_FROM_DATABASE=FCH USB EHCI Controller
+ 
+ pci:v00001022d0000790B*
+- ID_MODEL_FROM_DATABASE=CZ SMBus Controller
++ ID_MODEL_FROM_DATABASE=FCH SMBus Controller
++
++pci:v00001022d0000790E*
++ ID_MODEL_FROM_DATABASE=FCH LPC Bridge
++
++pci:v00001022d0000790F*
++ ID_MODEL_FROM_DATABASE=FCH PCI Bridge
++
++pci:v00001022d00007914*
++ ID_MODEL_FROM_DATABASE=FCH USB XHCI Controller
+ 
+ pci:v00001022d00009600*
+  ID_MODEL_FROM_DATABASE=RS780 Host Bridge
+@@ -23672,6 +23762,21 @@ pci:v000010DEd000005E6*
+ pci:v000010DEd000005E7*
+  ID_MODEL_FROM_DATABASE=GT200GL [Tesla C1060 / M1060]
+ 
++pci:v000010DEd000005E7sv000010DEsd00000595*
++ ID_MODEL_FROM_DATABASE=Tesla T10 Processor
++
++pci:v000010DEd000005E7sv000010DEsd0000068F*
++ ID_MODEL_FROM_DATABASE=Tesla T10 Processor
++
++pci:v000010DEd000005E7sv000010DEsd00000697*
++ ID_MODEL_FROM_DATABASE=Tesla M1060
++
++pci:v000010DEd000005E7sv000010DEsd00000714*
++ ID_MODEL_FROM_DATABASE=Tesla M1060
++
++pci:v000010DEd000005E7sv000010DEsd00000743*
++ ID_MODEL_FROM_DATABASE=Tesla M1060
++
+ pci:v000010DEd000005EA*
+  ID_MODEL_FROM_DATABASE=GT200 [GeForce GTX 260]
+ 
+@@ -23732,6 +23837,9 @@ pci:v000010DEd00000608*
+ pci:v000010DEd00000609*
+  ID_MODEL_FROM_DATABASE=G92M [GeForce 8800M GTS]
+ 
++pci:v000010DEd00000609sv0000106Bsd000000A7*
++ ID_MODEL_FROM_DATABASE=GeForce 8800 GS
++
+ pci:v000010DEd0000060A*
+  ID_MODEL_FROM_DATABASE=G92M [GeForce GTX 280M]
+ 
+@@ -23864,6 +23972,9 @@ pci:v000010DEd0000062D*
+ pci:v000010DEd0000062E*
+  ID_MODEL_FROM_DATABASE=G94 [GeForce 9600 GT]
+ 
++pci:v000010DEd0000062Esv0000106Bsd00000605*
++ ID_MODEL_FROM_DATABASE=GeForce GT 130
++
+ pci:v000010DEd0000062F*
+  ID_MODEL_FROM_DATABASE=G94 [GeForce 9800 S]
+ 
+@@ -23921,6 +24032,9 @@ pci:v000010DEd00000648*
+ pci:v000010DEd00000649*
+  ID_MODEL_FROM_DATABASE=G96M [GeForce 9600M GT]
+ 
++pci:v000010DEd00000649sv00001043sd0000202D*
++ ID_MODEL_FROM_DATABASE=GeForce GT 220M
++
+ pci:v000010DEd0000064A*
+  ID_MODEL_FROM_DATABASE=G96M [GeForce 9700M GT]
+ 
+@@ -23942,12 +24056,21 @@ pci:v000010DEd00000651*
+ pci:v000010DEd00000652*
+  ID_MODEL_FROM_DATABASE=G96M [GeForce GT 130M]
+ 
++pci:v000010DEd00000652sv0000152Dsd00000850*
++ ID_MODEL_FROM_DATABASE=GeForce GT 240M LE
++
+ pci:v000010DEd00000653*
+  ID_MODEL_FROM_DATABASE=G96M [GeForce GT 120M]
+ 
+ pci:v000010DEd00000654*
+  ID_MODEL_FROM_DATABASE=G96M [GeForce GT 220M]
+ 
++pci:v000010DEd00000654sv00001043sd000014A2*
++ ID_MODEL_FROM_DATABASE=GeForce GT 320M
++
++pci:v000010DEd00000654sv00001043sd000014D2*
++ ID_MODEL_FROM_DATABASE=GeForce GT 320M
++
+ pci:v000010DEd00000655*
+  ID_MODEL_FROM_DATABASE=G96 [GeForce GT 120]
+ 
+@@ -24098,6 +24221,9 @@ pci:v000010DEd000006E7*
+ pci:v000010DEd000006E8*
+  ID_MODEL_FROM_DATABASE=G98M [GeForce 9200M GS]
+ 
++pci:v000010DEd000006E8sv0000103Csd0000360B*
++ ID_MODEL_FROM_DATABASE=GeForce 9200M GE
++
+ pci:v000010DEd000006E9*
+  ID_MODEL_FROM_DATABASE=G98M [GeForce 9300M GS]
+ 
+@@ -24596,6 +24722,9 @@ pci:v000010DEd000007FEsv00001019sd0000297A*
+ pci:v000010DEd000007FEsv00001AFAsd00007150*
+  ID_MODEL_FROM_DATABASE=JW-IN7150-HD
+ 
++pci:v000010DEd00000840*
++ ID_MODEL_FROM_DATABASE=C77 [GeForce 8200M]
++
+ pci:v000010DEd00000844*
+  ID_MODEL_FROM_DATABASE=C77 [GeForce 9100M G]
+ 
+@@ -24665,6 +24794,9 @@ pci:v000010DEd00000865*
+ pci:v000010DEd00000866*
+  ID_MODEL_FROM_DATABASE=C79 [GeForce 9400M G]
+ 
++pci:v000010DEd00000866sv0000106Bsd000000B1*
++ ID_MODEL_FROM_DATABASE=GeForce 9400M
++
+ pci:v000010DEd00000867*
+  ID_MODEL_FROM_DATABASE=C79 [GeForce 9400]
+ 
+@@ -24746,6 +24878,9 @@ pci:v000010DEd0000087E*
+ pci:v000010DEd0000087F*
+  ID_MODEL_FROM_DATABASE=ION LE VGA
+ 
++pci:v000010DEd000008A0*
++ ID_MODEL_FROM_DATABASE=MCP89 [GeForce 320M]
++
+ pci:v000010DEd000008A2*
+  ID_MODEL_FROM_DATABASE=MCP89 [GeForce 320M]
+ 
+@@ -24755,6 +24890,9 @@ pci:v000010DEd000008A3*
+ pci:v000010DEd000008A4*
+  ID_MODEL_FROM_DATABASE=MCP89 [GeForce 320M]
+ 
++pci:v000010DEd000008A5*
++ ID_MODEL_FROM_DATABASE=MCP89 [GeForce 320M]
++
+ pci:v000010DEd00000A20*
+  ID_MODEL_FROM_DATABASE=GT216 [GeForce GT 220]
+ 
+@@ -24875,6 +25013,9 @@ pci:v000010DEd00000A73*
+ pci:v000010DEd00000A74*
+  ID_MODEL_FROM_DATABASE=GT218M [GeForce G210M]
+ 
++pci:v000010DEd00000A74sv00001B0Asd0000903A*
++ ID_MODEL_FROM_DATABASE=GeForce G210
++
+ pci:v000010DEd00000A75*
+  ID_MODEL_FROM_DATABASE=GT218M [GeForce 310M]
+ 
+@@ -24986,6 +25127,9 @@ pci:v000010DEd00000A7Asv00001462sd0000AC82*
+ pci:v000010DEd00000A7Asv00001462sd0000AE33*
+  ID_MODEL_FROM_DATABASE=GeForce 405
+ 
++pci:v000010DEd00000A7Asv00001642sd00003980*
++ ID_MODEL_FROM_DATABASE=GeForce 405
++
+ pci:v000010DEd00000A7Asv000017AAsd00003950*
+  ID_MODEL_FROM_DATABASE=GeForce 405M
+ 
+@@ -24995,6 +25139,9 @@ pci:v000010DEd00000A7Asv000017AAsd0000397D*
+ pci:v000010DEd00000A7Asv00001B0Asd00002091*
+  ID_MODEL_FROM_DATABASE=GeForce 315M
+ 
++pci:v000010DEd00000A7Asv00001B0Asd000090B4*
++ ID_MODEL_FROM_DATABASE=GeForce 405
++
+ pci:v000010DEd00000A7Asv00001BFDsd00000003*
+  ID_MODEL_FROM_DATABASE=GeForce 405
+ 
+@@ -25266,7 +25413,7 @@ pci:v000010DEd00000AD8*
+  ID_MODEL_FROM_DATABASE=MCP78S [GeForce 8200] SATA Controller (RAID mode)
+ 
+ pci:v000010DEd00000BE2*
+- ID_MODEL_FROM_DATABASE=High Definition Audio Controller
++ ID_MODEL_FROM_DATABASE=GT216 HDMI Audio Controller
+ 
+ pci:v000010DEd00000BE2sv00001043sd00008311*
+  ID_MODEL_FROM_DATABASE=ENGT220/DI/1GD3(LP)/V2
+@@ -25460,12 +25607,42 @@ pci:v000010DEd00000DE4*
+ pci:v000010DEd00000DE5*
+  ID_MODEL_FROM_DATABASE=GF108 [GeForce GT 530]
+ 
++pci:v000010DEd00000DE7*
++ ID_MODEL_FROM_DATABASE=GF108 [GeForce GT 610]
++
+ pci:v000010DEd00000DE8*
+  ID_MODEL_FROM_DATABASE=GF108M [GeForce GT 620M]
+ 
+ pci:v000010DEd00000DE9*
+  ID_MODEL_FROM_DATABASE=GF108M [GeForce GT 630M]
+ 
++pci:v000010DEd00000DE9sv00001025sd00000692*
++ ID_MODEL_FROM_DATABASE=GeForce GT 620M
++
++pci:v000010DEd00000DE9sv00001025sd00000725*
++ ID_MODEL_FROM_DATABASE=GeForce GT 620M
++
++pci:v000010DEd00000DE9sv00001025sd00000728*
++ ID_MODEL_FROM_DATABASE=GeForce GT 620M
++
++pci:v000010DEd00000DE9sv00001025sd0000072B*
++ ID_MODEL_FROM_DATABASE=GeForce GT 620M
++
++pci:v000010DEd00000DE9sv00001025sd0000072E*
++ ID_MODEL_FROM_DATABASE=GeForce GT 620M
++
++pci:v000010DEd00000DE9sv00001025sd00000753*
++ ID_MODEL_FROM_DATABASE=GeForce GT 620M
++
++pci:v000010DEd00000DE9sv00001025sd00000754*
++ ID_MODEL_FROM_DATABASE=GeForce GT 620M
++
++pci:v000010DEd00000DE9sv000017AAsd00003977*
++ ID_MODEL_FROM_DATABASE=GeForce GT 640M LE
++
++pci:v000010DEd00000DE9sv00001B0Asd00002210*
++ ID_MODEL_FROM_DATABASE=GeForce GT 635M
++
+ pci:v000010DEd00000DEA*
+  ID_MODEL_FROM_DATABASE=GF108M [GeForce 610M]
+ 
+@@ -25514,6 +25691,12 @@ pci:v000010DEd00000DF3*
+ pci:v000010DEd00000DF4*
+  ID_MODEL_FROM_DATABASE=GF108M [GeForce GT 540M]
+ 
++pci:v000010DEd00000DF4sv0000152Dsd00000952*
++ ID_MODEL_FROM_DATABASE=GeForce GT 630M
++
++pci:v000010DEd00000DF4sv0000152Dsd00000953*
++ ID_MODEL_FROM_DATABASE=GeForce GT 630M
++
+ pci:v000010DEd00000DF5*
+  ID_MODEL_FROM_DATABASE=GF108M [GeForce GT 525M]
+ 
+@@ -25610,6 +25793,9 @@ pci:v000010DEd00000FC6sv00001043sd00008428*
+ pci:v000010DEd00000FCD*
+  ID_MODEL_FROM_DATABASE=GK107M [GeForce GT 755M]
+ 
++pci:v000010DEd00000FCE*
++ ID_MODEL_FROM_DATABASE=GK107M [GeForce GT 640M LE]
++
+ pci:v000010DEd00000FD1*
+  ID_MODEL_FROM_DATABASE=GK107M [GeForce GT 650M]
+ 
+@@ -25667,6 +25853,9 @@ pci:v000010DEd00000FE0*
+ pci:v000010DEd00000FE1*
+  ID_MODEL_FROM_DATABASE=GK107M [GeForce GT 730M]
+ 
++pci:v000010DEd00000FE2*
++ ID_MODEL_FROM_DATABASE=GK107M [GeForce GT 745M]
++
+ pci:v000010DEd00000FE3*
+  ID_MODEL_FROM_DATABASE=GK107M [GeForce GT 745M]
+ 
+@@ -25688,6 +25877,12 @@ pci:v000010DEd00000FE7*
+ pci:v000010DEd00000FE7sv000010DEsd0000101E*
+  ID_MODEL_FROM_DATABASE=GRID K100
+ 
++pci:v000010DEd00000FE9*
++ ID_MODEL_FROM_DATABASE=GK107M [GeForce GT 750M Mac Edition]
++
++pci:v000010DEd00000FEA*
++ ID_MODEL_FROM_DATABASE=GK107M [GeForce GT 755M Mac Edition]
++
+ pci:v000010DEd00000FEF*
+  ID_MODEL_FROM_DATABASE=GK107GL [GRID K340]
+ 
+@@ -25739,6 +25934,15 @@ pci:v000010DEd00001003*
+ pci:v000010DEd00001004*
+  ID_MODEL_FROM_DATABASE=GK110 [GeForce GTX 780]
+ 
++pci:v000010DEd00001004sv00003842sd00000784*
++ ID_MODEL_FROM_DATABASE=GK110B [GeForce GTX 780 SC w/ ACX Cooler]
++
++pci:v000010DEd00001004sv00003842sd00001784*
++ ID_MODEL_FROM_DATABASE=GK110B [GeForce GTX 780 Dual FTW w/ ACX Cooler]
++
++pci:v000010DEd00001004sv00003842sd00001788*
++ ID_MODEL_FROM_DATABASE=GK110B [GeForce GTX 780 Dual Classified w/ ACX Cooler]
++
+ pci:v000010DEd00001005*
+  ID_MODEL_FROM_DATABASE=GK110 [GeForce GTX Titan]
+ 
+@@ -25763,6 +25967,9 @@ pci:v000010DEd00001005sv00003842sd00002794*
+ pci:v000010DEd00001005sv00003842sd00002795*
+  ID_MODEL_FROM_DATABASE=GeForce GTX Titan SC Hydro Copper Signature
+ 
++pci:v000010DEd0000100A*
++ ID_MODEL_FROM_DATABASE=GK110B [GeForce GTX 780 Ti]
++
+ pci:v000010DEd0000101F*
+  ID_MODEL_FROM_DATABASE=GK110GL [Tesla K20]
+ 
+@@ -25775,15 +25982,24 @@ pci:v000010DEd00001021*
+ pci:v000010DEd00001022*
+  ID_MODEL_FROM_DATABASE=GK110GL [Tesla K20c]
+ 
++pci:v000010DEd00001023*
++ ID_MODEL_FROM_DATABASE=GK110BGL [Tesla K40m]
++
+ pci:v000010DEd00001024*
+- ID_MODEL_FROM_DATABASE=GK110GL [Tesla K40c]
++ ID_MODEL_FROM_DATABASE=GK110BGL [Tesla K40c]
+ 
+ pci:v000010DEd00001026*
+  ID_MODEL_FROM_DATABASE=GK110GL [Tesla K20s]
+ 
++pci:v000010DEd00001027*
++ ID_MODEL_FROM_DATABASE=GK110BGL [Tesla K40st]
++
+ pci:v000010DEd00001028*
+  ID_MODEL_FROM_DATABASE=GK110GL [Tesla K20m]
+ 
++pci:v000010DEd00001029*
++ ID_MODEL_FROM_DATABASE=GK110BGL [Tesla K40s]
++
+ pci:v000010DEd0000103A*
+  ID_MODEL_FROM_DATABASE=GK110GL [Quadro K6000]
+ 
+@@ -25832,6 +26048,12 @@ pci:v000010DEd00001057*
+ pci:v000010DEd00001058*
+  ID_MODEL_FROM_DATABASE=GF119M [GeForce 610M]
+ 
++pci:v000010DEd00001058sv0000103Csd00002AED*
++ ID_MODEL_FROM_DATABASE=GeForce 610
++
++pci:v000010DEd00001058sv0000103Csd00002AF1*
++ ID_MODEL_FROM_DATABASE=GeForce 610
++
+ pci:v000010DEd00001058sv00001043sd000010AC*
+  ID_MODEL_FROM_DATABASE=GeForce GT 610M
+ 
+@@ -25841,6 +26063,9 @@ pci:v000010DEd00001058sv00001043sd000010BC*
+ pci:v000010DEd00001058sv00001043sd00001652*
+  ID_MODEL_FROM_DATABASE=GeForce GT 610M
+ 
++pci:v000010DEd00001059*
++ ID_MODEL_FROM_DATABASE=GF119M [GeForce 610M]
++
+ pci:v000010DEd0000105A*
+  ID_MODEL_FROM_DATABASE=GF119M [GeForce 610M]
+ 
+@@ -25904,6 +26129,12 @@ pci:v000010DEd00001091sv000010DEsd0000088E*
+ pci:v000010DEd00001091sv000010DEsd00000891*
+  ID_MODEL_FROM_DATABASE=Tesla X2090
+ 
++pci:v000010DEd00001091sv000010DEsd00000974*
++ ID_MODEL_FROM_DATABASE=Tesla X2090
++
++pci:v000010DEd00001091sv000010DEsd0000098D*
++ ID_MODEL_FROM_DATABASE=Tesla X2090
++
+ pci:v000010DEd00001094*
+  ID_MODEL_FROM_DATABASE=GF110GL [Tesla M2075]
+ 
+@@ -25941,7 +26172,7 @@ pci:v000010DEd000010D8*
+  ID_MODEL_FROM_DATABASE=GT218 [NVS 300]
+ 
+ pci:v000010DEd00001140*
+- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M / GT 620M/625M/630M/720M]
++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M]
+ 
+ pci:v000010DEd00001140sv00001025sd00000600*
+  ID_MODEL_FROM_DATABASE=GeForce GT 620M
+@@ -26081,6 +26312,9 @@ pci:v000010DEd00001140sv00001028sd00000554*
+ pci:v000010DEd00001140sv00001028sd00000557*
+  ID_MODEL_FROM_DATABASE=GeForce GT 620M
+ 
++pci:v000010DEd00001140sv00001028sd00000562*
++ ID_MODEL_FROM_DATABASE=GeForce GT 625M
++
+ pci:v000010DEd00001140sv00001028sd00000565*
+  ID_MODEL_FROM_DATABASE=GeForce GT 630M
+ 
+@@ -26111,6 +26345,12 @@ pci:v000010DEd00001140sv00001028sd000005B3*
+ pci:v000010DEd00001140sv00001028sd000005DA*
+  ID_MODEL_FROM_DATABASE=GeForce GT 630M
+ 
++pci:v000010DEd00001140sv00001028sd000005DE*
++ ID_MODEL_FROM_DATABASE=GeForce GT 720M
++
++pci:v000010DEd00001140sv00001028sd000005E0*
++ ID_MODEL_FROM_DATABASE=GeForce GT 720M
++
+ pci:v000010DEd00001140sv00001028sd000005E8*
+  ID_MODEL_FROM_DATABASE=GeForce GT 630M
+ 
+@@ -26156,6 +26396,9 @@ pci:v000010DEd00001140sv00001043sd0000126D*
+ pci:v000010DEd00001140sv00001043sd0000131D*
+  ID_MODEL_FROM_DATABASE=GeForce GT 720M
+ 
++pci:v000010DEd00001140sv00001043sd000013FD*
++ ID_MODEL_FROM_DATABASE=GeForce GT 720M
++
+ pci:v000010DEd00001140sv00001043sd000014C7*
+  ID_MODEL_FROM_DATABASE=GeForce GT 720M
+ 
+@@ -26189,6 +26432,9 @@ pci:v000010DEd00001140sv00001043sd0000224A*
+ pci:v000010DEd00001140sv00001043sd00008595*
+  ID_MODEL_FROM_DATABASE=GeForce GT 720M
+ 
++pci:v000010DEd00001140sv00001072sd0000152D*
++ ID_MODEL_FROM_DATABASE=GeForce GT 720M
++
+ pci:v000010DEd00001140sv000010CFsd000017F5*
+  ID_MODEL_FROM_DATABASE=GeForce GT 720M
+ 
+@@ -26291,6 +26537,9 @@ pci:v000010DEd00001140sv0000144Dsd0000C709*
+ pci:v000010DEd00001140sv0000144Dsd0000C711*
+  ID_MODEL_FROM_DATABASE=GeForce 710M
+ 
++pci:v000010DEd00001140sv0000144Dsd0000C736*
++ ID_MODEL_FROM_DATABASE=GeForce 710M
++
+ pci:v000010DEd00001140sv00001462sd000010B8*
+  ID_MODEL_FROM_DATABASE=GeForce GT 710M
+ 
+@@ -26303,6 +26552,9 @@ pci:v000010DEd00001140sv00001462sd0000AA33*
+ pci:v000010DEd00001140sv00001462sd0000AAA2*
+  ID_MODEL_FROM_DATABASE=GeForce GT 720M
+ 
++pci:v000010DEd00001140sv00001462sd0000AAA3*
++ ID_MODEL_FROM_DATABASE=GeForce 820M
++
+ pci:v000010DEd00001140sv00001462sd0000AE71*
+  ID_MODEL_FROM_DATABASE=GeForce GT 720M
+ 
+@@ -26315,15 +26567,30 @@ pci:v000010DEd00001140sv0000152Dsd00000982*
+ pci:v000010DEd00001140sv0000152Dsd00000983*
+  ID_MODEL_FROM_DATABASE=GeForce GT 630M
+ 
++pci:v000010DEd00001140sv0000152Dsd00001012*
++ ID_MODEL_FROM_DATABASE=GeForce 710M
++
+ pci:v000010DEd00001140sv0000152Dsd00001030*
+  ID_MODEL_FROM_DATABASE=GeForce GT 630M
+ 
+ pci:v000010DEd00001140sv0000152Dsd00001055*
+  ID_MODEL_FROM_DATABASE=GeForce 710M
+ 
++pci:v000010DEd00001140sv0000152Dsd00001067*
++ ID_MODEL_FROM_DATABASE=GeForce GT 720M
++
++pci:v000010DEd00001140sv0000152Dsd00001072*
++ ID_MODEL_FROM_DATABASE=GeForce GT 720M
++
+ pci:v000010DEd00001140sv000017AAsd00002200*
+  ID_MODEL_FROM_DATABASE=NVS 5200M
+ 
++pci:v000010DEd00001140sv000017AAsd00002213*
++ ID_MODEL_FROM_DATABASE=GeForce GT 720M
++
++pci:v000010DEd00001140sv000017AAsd00002220*
++ ID_MODEL_FROM_DATABASE=GeForce GT 720M
++
+ pci:v000010DEd00001140sv000017AAsd00003656*
+  ID_MODEL_FROM_DATABASE=GeForce GT 620M
+ 
+@@ -26369,6 +26636,9 @@ pci:v000010DEd00001140sv000017AAsd00003977*
+ pci:v000010DEd00001140sv000017AAsd00003983*
+  ID_MODEL_FROM_DATABASE=GeForce 610M
+ 
++pci:v000010DEd00001140sv000017AAsd00005001*
++ ID_MODEL_FROM_DATABASE=GeForce 610M
++
+ pci:v000010DEd00001140sv000017AAsd00005003*
+  ID_MODEL_FROM_DATABASE=GeForce GT 720M
+ 
+@@ -26414,18 +26684,33 @@ pci:v000010DEd00001140sv000017AAsd0000502E*
+ pci:v000010DEd00001140sv000017AAsd0000502F*
+  ID_MODEL_FROM_DATABASE=GeForce GT 720M
+ 
++pci:v000010DEd00001140sv000017AAsd0000503E*
++ ID_MODEL_FROM_DATABASE=GeForce 710M
++
++pci:v000010DEd00001140sv000017AAsd0000503F*
++ ID_MODEL_FROM_DATABASE=GeForce 820M
++
+ pci:v000010DEd00001140sv00001854sd00000177*
+  ID_MODEL_FROM_DATABASE=GeForce 710M
+ 
+ pci:v000010DEd00001140sv00001854sd00000180*
+  ID_MODEL_FROM_DATABASE=GeForce 710M
+ 
++pci:v000010DEd00001140sv00001854sd00000190*
++ ID_MODEL_FROM_DATABASE=GeForce GT 720M
++
++pci:v000010DEd00001140sv00001854sd00000192*
++ ID_MODEL_FROM_DATABASE=GeForce GT 720M
++
+ pci:v000010DEd00001140sv00001B0Asd000020DD*
+  ID_MODEL_FROM_DATABASE=GeForce GT 620M
+ 
+ pci:v000010DEd00001140sv00001B0Asd000020DF*
+  ID_MODEL_FROM_DATABASE=GeForce GT 620M
+ 
++pci:v000010DEd00001140sv00001B0Asd00002202*
++ ID_MODEL_FROM_DATABASE=GeForce GT 720M
++
+ pci:v000010DEd00001180*
+  ID_MODEL_FROM_DATABASE=GK104 [GeForce GTX 680]
+ 
+@@ -26484,10 +26769,10 @@ pci:v000010DEd00001193*
+  ID_MODEL_FROM_DATABASE=GK104 [GeForce GTX 760 Ti OEM]
+ 
+ pci:v000010DEd0000119D*
+- ID_MODEL_FROM_DATABASE=GK104M [GeForce GTX 775M]
++ ID_MODEL_FROM_DATABASE=GK104M [GeForce GTX 775M Mac Edition]
+ 
+ pci:v000010DEd0000119E*
+- ID_MODEL_FROM_DATABASE=GK104M [GeForce GTX 780M]
++ ID_MODEL_FROM_DATABASE=GK104M [GeForce GTX 780M Mac Edition]
+ 
+ pci:v000010DEd0000119F*
+  ID_MODEL_FROM_DATABASE=GK104M [GeForce GTX 780M]
+@@ -27210,32 +27495,23 @@ pci:v000010EC*
+  ID_VENDOR_FROM_DATABASE=Realtek Semiconductor Co., Ltd.
+ 
+ pci:v000010ECd00000139*
+- ID_MODEL_FROM_DATABASE=Zonet Zen3200
+-
+-pci:v000010ECd00000880*
+- ID_MODEL_FROM_DATABASE=Realtek 880 High Definition Audio
+-
+-pci:v000010ECd00000883*
+- ID_MODEL_FROM_DATABASE=Realtek 883 High Definition Audio
+-
+-pci:v000010ECd00000885*
+- ID_MODEL_FROM_DATABASE=Realtek 885 High Definition Audio
+-
+-pci:v000010ECd00000888*
+- ID_MODEL_FROM_DATABASE=Realtek 888 High Definition Audio
+-
+-pci:v000010ECd00000892*
+- ID_MODEL_FROM_DATABASE=Realtek 892 High Definition Audio
++ ID_MODEL_FROM_DATABASE=RTL-8139/8139C/8139C+ Ethernet Controller
+ 
+ pci:v000010ECd00005209*
+  ID_MODEL_FROM_DATABASE=RTS5209 PCI Express Card Reader
+ 
++pci:v000010ECd00005227*
++ ID_MODEL_FROM_DATABASE=RTS5227 PCI Express Card Reader
++
+ pci:v000010ECd00005229*
+  ID_MODEL_FROM_DATABASE=RTS5229 PCI Express Card Reader
+ 
+ pci:v000010ECd00005229sv00001025sd00000813*
+  ID_MODEL_FROM_DATABASE=Aspire R7-571
+ 
++pci:v000010ECd00005229sv0000103Csd0000194E*
++ ID_MODEL_FROM_DATABASE=ProBook 455 G1 Notebook
++
+ pci:v000010ECd00005288*
+  ID_MODEL_FROM_DATABASE=Barossa PCI Express Card Reader
+ 
+@@ -27449,6 +27725,9 @@ pci:v000010ECd00008168*
+ pci:v000010ECd00008168sv00001019sd00008168*
+  ID_MODEL_FROM_DATABASE=RTL8111/8168 PCI Express Gigabit Ethernet controller
+ 
++pci:v000010ECd00008168sv00001028sd00000283*
++ ID_MODEL_FROM_DATABASE=Vostro 220
++
+ pci:v000010ECd00008168sv00001028sd000004B2*
+  ID_MODEL_FROM_DATABASE=Vostro 3350
+ 
+@@ -27458,6 +27737,9 @@ pci:v000010ECd00008168sv00001028sd000004DA*
+ pci:v000010ECd00008168sv0000103Csd00001611*
+  ID_MODEL_FROM_DATABASE=Pavilion DM1Z-3000
+ 
++pci:v000010ECd00008168sv0000103Csd00001950*
++ ID_MODEL_FROM_DATABASE=ProBook 450/455
++
+ pci:v000010ECd00008168sv00001043sd000011F5*
+  ID_MODEL_FROM_DATABASE=A6J-Q008
+ 
+@@ -27617,6 +27899,9 @@ pci:v000010ECd00008199sv00001462sd00006894*
+ pci:v000010ECd00008723*
+  ID_MODEL_FROM_DATABASE=RTL8723AE PCIe Wireless Network Adapter
+ 
++pci:v000010ECd0000B723*
++ ID_MODEL_FROM_DATABASE=RTL8723BE PCIe Wireless Network Adapter
++
+ pci:v000010ED*
+  ID_VENDOR_FROM_DATABASE=Ascii Corporation
+ 
+@@ -31562,6 +31847,15 @@ pci:v00001137d00000042*
+ pci:v00001137d00000042sv00001137sd00000047*
+  ID_MODEL_FROM_DATABASE=VIC P81E PCIe Management Controller
+ 
++pci:v00001137d00000042sv00001137sd00000085*
++ ID_MODEL_FROM_DATABASE=VIC 1225 PCIe Management Controller
++
++pci:v00001137d00000042sv00001137sd000000CD*
++ ID_MODEL_FROM_DATABASE=VIC 1285 PCIe Management Controller
++
++pci:v00001137d00000042sv00001137sd000000CE*
++ ID_MODEL_FROM_DATABASE=VIC 1225T PCIe Management Controller
++
+ pci:v00001137d00000043*
+  ID_MODEL_FROM_DATABASE=VIC Ethernet NIC
+ 
+@@ -31580,6 +31874,12 @@ pci:v00001137d00000043sv00001137sd00000084*
+ pci:v00001137d00000043sv00001137sd00000085*
+  ID_MODEL_FROM_DATABASE=VIC 1225 PCIe Ethernet NIC
+ 
++pci:v00001137d00000043sv00001137sd000000CD*
++ ID_MODEL_FROM_DATABASE=VIC 1285 PCIe Ethernet NIC
++
++pci:v00001137d00000043sv00001137sd000000CE*
++ ID_MODEL_FROM_DATABASE=VIC 1225T PCIe Ethernet NIC
++
+ pci:v00001137d00000044*
+  ID_MODEL_FROM_DATABASE=VIC Ethernet NIC Dynamic
+ 
+@@ -31598,6 +31898,12 @@ pci:v00001137d00000044sv00001137sd00000084*
+ pci:v00001137d00000044sv00001137sd00000085*
+  ID_MODEL_FROM_DATABASE=VIC 1225 PCIe Ethernet NIC Dynamic
+ 
++pci:v00001137d00000044sv00001137sd000000CD*
++ ID_MODEL_FROM_DATABASE=VIC 1285 PCIe Ethernet NIC Dynamic
++
++pci:v00001137d00000044sv00001137sd000000CE*
++ ID_MODEL_FROM_DATABASE=VIC 1225T PCIe Ethernet NIC Dynamic
++
+ pci:v00001137d00000045*
+  ID_MODEL_FROM_DATABASE=VIC FCoE HBA
+ 
+@@ -31610,18 +31916,24 @@ pci:v00001137d00000045sv00001137sd00000048*
+ pci:v00001137d00000045sv00001137sd0000004F*
+  ID_MODEL_FROM_DATABASE=VIC 1280 Mezzanine FCoE HBA
+ 
++pci:v00001137d00000045sv00001137sd00000084*
++ ID_MODEL_FROM_DATABASE=VIC 1240 MLOM FCoE HBA
++
++pci:v00001137d00000045sv00001137sd00000085*
++ ID_MODEL_FROM_DATABASE=VIC 1225 PCIe FCoE HBA
++
++pci:v00001137d00000045sv00001137sd000000CD*
++ ID_MODEL_FROM_DATABASE=VIC 1285 PCIe FCoE HBA
++
++pci:v00001137d00000045sv00001137sd000000CE*
++ ID_MODEL_FROM_DATABASE=VIC 1225T PCIe FCoE HBA
++
+ pci:v00001137d0000004E*
+  ID_MODEL_FROM_DATABASE=VIC 82 PCIe Upstream Port
+ 
+ pci:v00001137d00000071*
+  ID_MODEL_FROM_DATABASE=VIC SR-IOV VF
+ 
+-pci:v00001137d00000084*
+- ID_MODEL_FROM_DATABASE=VIC 1240 MLOM FCoE HBA
+-
+-pci:v00001137d00000085*
+- ID_MODEL_FROM_DATABASE=VIC 1225 PCIe FCOE HBA
+-
+ pci:v00001137d000000CF*
+  ID_MODEL_FROM_DATABASE=VIC Userspace NIC
+ 
+@@ -35087,6 +35399,15 @@ pci:v000011F8d00007384*
+ pci:v000011F8d00008000*
+  ID_MODEL_FROM_DATABASE=PM8000  [SPC - SAS Protocol Controller]
+ 
++pci:v000011F8d00008032*
++ ID_MODEL_FROM_DATABASE=ATTO Celerity FC8xEN
++
++pci:v000011F8d00008032sv0000117Csd0000003B*
++ ID_MODEL_FROM_DATABASE=Celerity FC-82EN Fibre Channel Adapter
++
++pci:v000011F8d00008032sv0000117Csd0000003C*
++ ID_MODEL_FROM_DATABASE=Celerity FC-84EN Fibre Channel Adapter
++
+ pci:v000011F9*
+  ID_VENDOR_FROM_DATABASE=I-Cube Inc
+ 
+@@ -42029,6 +42350,24 @@ pci:v0000144C*
+ pci:v0000144D*
+  ID_VENDOR_FROM_DATABASE=Samsung Electronics Co Ltd
+ 
++pci:v0000144Dd00001600*
++ ID_MODEL_FROM_DATABASE=Apple PCIe SSD
++
++pci:v0000144Dd0000A800*
++ ID_MODEL_FROM_DATABASE=XP941 PCIe SSD
++
++pci:v0000144Dd0000A820*
++ ID_MODEL_FROM_DATABASE=NVMe SSD Controller 171X
++
++pci:v0000144Dd0000A820sv00001028sd00001F95*
++ ID_MODEL_FROM_DATABASE=Express Flash NVMe XS1715 SSD 400GB
++
++pci:v0000144Dd0000A820sv00001028sd00001F96*
++ ID_MODEL_FROM_DATABASE=Express Flash NVMe XS1715 SSD 800GB
++
++pci:v0000144Dd0000A820sv00001028sd00001F97*
++ ID_MODEL_FROM_DATABASE=Express Flash NVMe XS1715 SSD 1600GB
++
+ pci:v0000144E*
+  ID_VENDOR_FROM_DATABASE=OLITEC
+ 
+@@ -42527,6 +42866,9 @@ pci:v000014C2*
+ pci:v000014C3*
+  ID_VENDOR_FROM_DATABASE=MEDIATEK Corp.
+ 
++pci:v000014C3d00007630*
++ ID_MODEL_FROM_DATABASE=MT7630e 802.11bgn Wireless Network Adapter
++
+ pci:v000014C4*
+  ID_VENDOR_FROM_DATABASE=IWASAKI Information Systems Co Ltd
+ 
+@@ -46334,6 +46676,9 @@ pci:v000015ADd000007B0*
+ pci:v000015ADd000007C0*
+  ID_MODEL_FROM_DATABASE=PVSCSI SCSI Controller
+ 
++pci:v000015ADd000007E0*
++ ID_MODEL_FROM_DATABASE=SATA AHCI controller
++
+ pci:v000015ADd00000801*
+  ID_MODEL_FROM_DATABASE=Virtual Machine Interface
+ 
+@@ -46623,11 +46968,17 @@ pci:v000015BCd00000103*
+  ID_MODEL_FROM_DATABASE=QX4 PCI Express quad 4-gigabit Fibre Channel controller
+ 
+ pci:v000015BCd00000105*
+- ID_MODEL_FROM_DATABASE=Celerity FC-42XS Fibre Channel Adapter
++ ID_MODEL_FROM_DATABASE=Celerity FC-44XS/FC-42XS/FC-41XS/FC-44ES/FC-42ES/FC-41ES
+ 
+ pci:v000015BCd00000105sv0000117Csd00000022*
+  ID_MODEL_FROM_DATABASE=Celerity FC-42XS Fibre Channel Adapter
+ 
++pci:v000015BCd00000105sv0000117Csd00000025*
++ ID_MODEL_FROM_DATABASE=Celerity FC-44ES Fibre Channel Adapter
++
++pci:v000015BCd00000105sv0000117Csd00000026*
++ ID_MODEL_FROM_DATABASE=Celerity FC-42ES Fibre Channel Adapter
++
+ pci:v000015BCd00001100*
+  ID_MODEL_FROM_DATABASE=E8001-66442 PCI Express CIC
+ 
+@@ -48215,6 +48566,9 @@ pci:v0000170C*
+ pci:v00001719*
+  ID_VENDOR_FROM_DATABASE=EZChip Technologies
+ 
++pci:v00001719d00001000*
++ ID_MODEL_FROM_DATABASE=NPA Access Network Processor Family
++
+ pci:v00001725*
+  ID_VENDOR_FROM_DATABASE=Vitesse Semiconductor
+ 
+@@ -49040,9 +49394,15 @@ pci:v00001814d00003092*
+ pci:v00001814d00003290*
+  ID_MODEL_FROM_DATABASE=RT3290 Wireless 802.11n 1T/1R PCIe
+ 
++pci:v00001814d00003290sv0000103Csd000018EC*
++ ID_MODEL_FROM_DATABASE=Ralink RT3290LE 802.11bgn 1x1 Wi-Fi and Bluetooth 4.0 Combo Adapter
++
+ pci:v00001814d00003298*
+  ID_MODEL_FROM_DATABASE=RT3290 Bluetooth
+ 
++pci:v00001814d00003298sv0000103Csd000018EC*
++ ID_MODEL_FROM_DATABASE=Ralink RT3290LE 802.11bgn 1x1 Wi-Fi and Bluetooth 4.0 Combo Adapter
++
+ pci:v00001814d00003592*
+  ID_MODEL_FROM_DATABASE=RT3592 Wireless 802.11abgn 2T/2R PCIe
+ 
+@@ -51299,6 +51659,9 @@ pci:v00001B4Bd00009172*
+ pci:v00001B4Bd0000917A*
+  ID_MODEL_FROM_DATABASE=88SE9172 SATA III 6Gb/s RAID Controller
+ 
++pci:v00001B4Bd00009183*
++ ID_MODEL_FROM_DATABASE=88SS9183 PCIe SSD Controller
++
+ pci:v00001B4Bd00009192*
+  ID_MODEL_FROM_DATABASE=88SE9172 SATA III 6Gb/s RAID Controller
+ 
+@@ -51455,9 +51818,27 @@ pci:v00001C1Cd00000001*
+ pci:v00001C2C*
+  ID_VENDOR_FROM_DATABASE=Fiberblaze
+ 
++pci:v00001C2Cd0000000A*
++ ID_MODEL_FROM_DATABASE=Capture
++
++pci:v00001C2Cd0000000F*
++ ID_MODEL_FROM_DATABASE=SmartNIC
++
++pci:v00001C2Cd000000A0*
++ ID_MODEL_FROM_DATABASE=FBC4G Capture 4x1Gb
++
++pci:v00001C2Cd000000A1*
++ ID_MODEL_FROM_DATABASE=FBC4XG Capture 4x10Gb
++
++pci:v00001C2Cd000000A2*
++ ID_MODEL_FROM_DATABASE=FBC8XG Capture 8x10Gb
++
+ pci:v00001C32*
+  ID_VENDOR_FROM_DATABASE=Highland Technology, Inc.
+ 
++pci:v00001C33*
++ ID_VENDOR_FROM_DATABASE=Daktronics, Inc
++
+ pci:v00001C3B*
+  ID_VENDOR_FROM_DATABASE=Accensus, LLC
+ 
+@@ -51503,6 +51884,9 @@ pci:v00001CE4d00000001*
+ pci:v00001CE4d00000002*
+  ID_MODEL_FROM_DATABASE=ExaNIC X2
+ 
++pci:v00001CF7*
++ ID_VENDOR_FROM_DATABASE=Subspace Dynamics
++
+ pci:v00001D44*
+  ID_VENDOR_FROM_DATABASE=DPT
+ 
+@@ -54284,6 +54668,81 @@ pci:v00008086d000008B4sv00008086sd00008270*
+ pci:v00008086d000008CF*
+  ID_MODEL_FROM_DATABASE=Atom Processor Z2760 Integrated Graphics Controller
+ 
++pci:v00008086d0000095A*
++ ID_MODEL_FROM_DATABASE=Wireless 7265
++
++pci:v00008086d0000095Asv00008086sd00001010*
++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
++
++pci:v00008086d0000095Asv00008086sd00005000*
++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-N 7265
++
++pci:v00008086d0000095Asv00008086sd00005002*
++ ID_MODEL_FROM_DATABASE=Wireless-N 7265
++
++pci:v00008086d0000095Asv00008086sd00005010*
++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
++
++pci:v00008086d0000095Asv00008086sd00005020*
++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-N 7265
++
++pci:v00008086d0000095Asv00008086sd0000502A*
++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-N 7265
++
++pci:v00008086d0000095Asv00008086sd00005090*
++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
++
++pci:v00008086d0000095Asv00008086sd00005110*
++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
++
++pci:v00008086d0000095Asv00008086sd00005400*
++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
++
++pci:v00008086d0000095Asv00008086sd00005410*
++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
++
++pci:v00008086d0000095Asv00008086sd00005420*
++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-N 7265
++
++pci:v00008086d0000095Asv00008086sd00005490*
++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
++
++pci:v00008086d0000095Asv00008086sd00009010*
++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
++
++pci:v00008086d0000095Asv00008086sd00009210*
++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
++
++pci:v00008086d0000095Asv00008086sd00009410*
++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
++
++pci:v00008086d0000095B*
++ ID_MODEL_FROM_DATABASE=Wireless 7265
++
++pci:v00008086d0000095Bsv00008086sd0000500A*
++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
++
++pci:v00008086d0000095Bsv00008086sd00005012*
++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
++
++pci:v00008086d0000095Bsv00008086sd00005200*
++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-N 7265
++
++pci:v00008086d0000095Bsv00008086sd00005202*
++ ID_MODEL_FROM_DATABASE=Wireless-N 7265
++
++pci:v00008086d0000095Bsv00008086sd00005210*
++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
++
++pci:v00008086d0000095Bsv00008086sd00005290*
++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
++
++pci:v00008086d0000095Bsv00008086sd00005302*
++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
++
++pci:v00008086d0000095Bsv00008086sd00005310*
++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
++
+ pci:v00008086d00000960*
+  ID_MODEL_FROM_DATABASE=80960RP (i960RP) Microprocessor/Bridge
+ 
+@@ -54299,6 +54758,9 @@ pci:v00008086d00000A04*
+ pci:v00008086d00000A06*
+  ID_MODEL_FROM_DATABASE=Haswell-ULT Integrated Graphics Controller
+ 
++pci:v00008086d00000A0C*
++ ID_MODEL_FROM_DATABASE=Haswell-ULT HD Audio Controller
++
+ pci:v00008086d00000A16*
+  ID_MODEL_FROM_DATABASE=Haswell-ULT Integrated Graphics Controller
+ 
+@@ -57332,6 +57794,12 @@ pci:v00008086d00001521sv00001028sd00001F62*
+ pci:v00008086d00001521sv0000103Csd000017D1*
+  ID_MODEL_FROM_DATABASE=Ethernet 1Gb 4-port 366FLR Adapter
+ 
++pci:v00008086d00001521sv0000103Csd00002003*
++ ID_MODEL_FROM_DATABASE=Ethernet 1Gb 2-port 367i Adapter
++
++pci:v00008086d00001521sv0000103Csd00002226*
++ ID_MODEL_FROM_DATABASE=Ethernet 1Gb 1-port 364i Adapter
++
+ pci:v00008086d00001521sv0000103Csd0000337F*
+  ID_MODEL_FROM_DATABASE=Ethernet 1Gb 2-port 361i Adapter
+ 
+@@ -57407,6 +57875,9 @@ pci:v00008086d00001523sv0000103Csd00001784*
+ pci:v00008086d00001523sv0000103Csd000018D1*
+  ID_MODEL_FROM_DATABASE=Ethernet 1Gb 2-port 361FLB Adapter
+ 
++pci:v00008086d00001523sv0000103Csd00001989*
++ ID_MODEL_FROM_DATABASE=Ethernet 1Gb 2-port 363i Adapter
++
+ pci:v00008086d00001523sv0000103Csd0000339F*
+  ID_MODEL_FROM_DATABASE=Ethernet 1Gb 4-port 366M Adapter
+ 
+@@ -57584,6 +58055,9 @@ pci:v00008086d00001560*
+ pci:v00008086d0000157B*
+  ID_MODEL_FROM_DATABASE=I210 Gigabit Network Connection
+ 
++pci:v00008086d0000157C*
++ ID_MODEL_FROM_DATABASE=I210 Gigabit Backplane Connection
++
+ pci:v00008086d000015A0*
+  ID_MODEL_FROM_DATABASE=Ethernet Connection (2) I218-LM
+ 
+@@ -58448,6 +58922,9 @@ pci:v00008086d00001E2Dsv00001849sd00001E2D*
+ pci:v00008086d00001E31*
+  ID_MODEL_FROM_DATABASE=7 Series/C210 Series Chipset Family USB xHCI Host Controller
+ 
++pci:v00008086d00001E31sv0000103Csd000017AB*
++ ID_MODEL_FROM_DATABASE=ProBook 6570b
++
+ pci:v00008086d00001E31sv00001043sd00001477*
+  ID_MODEL_FROM_DATABASE=N56VZ
+ 
+@@ -58748,7 +59225,7 @@ pci:v00008086d00001F3F*
+ pci:v00008086d00001F40*
+  ID_MODEL_FROM_DATABASE=Ethernet Connection I354 1.0 GbE Backplane
+ 
+-pci:v00008086d00001F40sv00001028sd000010F1*
++pci:v00008086d00001F40sv00001028sd000005F1*
+  ID_MODEL_FROM_DATABASE=Ethernet Connection I354 1.0 GbE Backplane
+ 
+ pci:v00008086d00001F41*
+@@ -65144,6 +65621,9 @@ pci:v00008086d00002E17*
+ pci:v00008086d00002E20*
+  ID_MODEL_FROM_DATABASE=4 Series Chipset DRAM Controller
+ 
++pci:v00008086d00002E20sv00001028sd00000283*
++ ID_MODEL_FROM_DATABASE=Dell Vostro 220
++
+ pci:v00008086d00002E20sv00001043sd000082D3*
+  ID_MODEL_FROM_DATABASE=P5Q Deluxe Motherboard
+ 
+@@ -67689,7 +68169,7 @@ pci:v00008086d00004227*
+  ID_MODEL_FROM_DATABASE=PRO/Wireless 3945ABG [Golan] Network Connection
+ 
+ pci:v00008086d00004227sv00008086sd00001011*
+- ID_MODEL_FROM_DATABASE=ThinkPad R60e/X60s
++ ID_MODEL_FROM_DATABASE=ThinkPad T60/R60e/X60s
+ 
+ pci:v00008086d00004227sv00008086sd00001014*
+  ID_MODEL_FROM_DATABASE=PRO/Wireless 3945BG Network Connection
+@@ -69155,6 +69635,111 @@ pci:v00008086d00009C65*
+ pci:v00008086d00009C66*
+  ID_MODEL_FROM_DATABASE=Lynx Point-LP SPI Controller #1
+ 
++pci:v00008086d00009C83*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP SATA Controller [AHCI Mode]
++
++pci:v00008086d00009C85*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP SATA Controller [RAID Mode]
++
++pci:v00008086d00009C87*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP SATA Controller [RAID Mode]
++
++pci:v00008086d00009C8F*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP SATA Controller [RAID Mode]
++
++pci:v00008086d00009C90*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP PCI Express Root Port #1
++
++pci:v00008086d00009C92*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP PCI Express Root Port #2
++
++pci:v00008086d00009C94*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP PCI Express Root Port #3
++
++pci:v00008086d00009C96*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP PCI Express Root Port #4
++
++pci:v00008086d00009C98*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP PCI Express Root Port #5
++
++pci:v00008086d00009C9A*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP PCI Express Root Port #6
++
++pci:v00008086d00009CA0*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP High Definition Audio Controller
++
++pci:v00008086d00009CA2*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP SMBus Controller
++
++pci:v00008086d00009CA4*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP Thermal Management Controller
++
++pci:v00008086d00009CA6*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP USB EHCI Controller
++
++pci:v00008086d00009CB1*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP USB xHCI Controller
++
++pci:v00008086d00009CB5*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP Secure Digital IO Controller
++
++pci:v00008086d00009CB6*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP Smart Sound Technology Controller
++
++pci:v00008086d00009CBA*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP MEI Controller #1
++
++pci:v00008086d00009CBB*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP MEI Controller #2
++
++pci:v00008086d00009CBC*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP IDE-r Controller
++
++pci:v00008086d00009CBD*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP KT Controller
++
++pci:v00008086d00009CC1*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP LPC Controller
++
++pci:v00008086d00009CC2*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP LPC Controller
++
++pci:v00008086d00009CC3*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP LPC Controller
++
++pci:v00008086d00009CC5*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP LPC Controller
++
++pci:v00008086d00009CC6*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP LPC Controller
++
++pci:v00008086d00009CC7*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP LPC Controller
++
++pci:v00008086d00009CC9*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP LPC Controller
++
++pci:v00008086d00009CE0*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP Serial IO DMA Controller
++
++pci:v00008086d00009CE1*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP Serial IO I2C Controller #0
++
++pci:v00008086d00009CE2*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP Serial IO I2C Controller #1
++
++pci:v00008086d00009CE3*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP Serial IO UART Controller #0
++
++pci:v00008086d00009CE4*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP Serial IO UART Controller #1
++
++pci:v00008086d00009CE5*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP Serial IO GSPI Controller #0
++
++pci:v00008086d00009CE6*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP Serial IO GSPI Controller #1
++
+ pci:v00008086d0000A000*
+  ID_MODEL_FROM_DATABASE=Atom Processor D4xx/D5xx/N4xx/N5xx DMI Bridge
+ 
+@@ -70691,6 +71276,24 @@ pci:v0000BDBDd0000A11E*
+ pci:v0000BDBDd0000A121*
+  ID_MODEL_FROM_DATABASE=DeckLink HD Extreme 3D/3D+
+ 
++pci:v0000BDBDd0000A124*
++ ID_MODEL_FROM_DATABASE=Intensity Extreme
++
++pci:v0000BDBDd0000A126*
++ ID_MODEL_FROM_DATABASE=Intensity Shuttle
++
++pci:v0000BDBDd0000A127*
++ ID_MODEL_FROM_DATABASE=UltraStudio Express
++
++pci:v0000BDBDd0000A129*
++ ID_MODEL_FROM_DATABASE=UltraStudio Mini Monitor
++
++pci:v0000BDBDd0000A12A*
++ ID_MODEL_FROM_DATABASE=UltraStudio Mini Recorder
++
++pci:v0000BDBDd0000A12D*
++ ID_MODEL_FROM_DATABASE=UltraStudio 4K
++
+ pci:v0000BDBDd0000A12E*
+  ID_MODEL_FROM_DATABASE=DeckLink 4K Extreme
+ 
+@@ -70700,6 +71303,9 @@ pci:v0000BDBDd0000A12F*
+ pci:v0000BDBDd0000A130*
+  ID_MODEL_FROM_DATABASE=DeckLink Mini Recorder
+ 
++pci:v0000BDBDd0000A132*
++ ID_MODEL_FROM_DATABASE=UltraStudio 4K
++
+ pci:v0000C001*
+  ID_VENDOR_FROM_DATABASE=TSI Telsys
+ 
+@@ -70860,7 +71466,7 @@ pci:v0000DCBA*
+  ID_VENDOR_FROM_DATABASE=Dynamic Engineering
+ 
+ pci:v0000DCBAd00000046*
+- ID_MODEL_FROM_DATABASE=PCIeAlteraCycloneIV
++ ID_MODEL_FROM_DATABASE=PCIe Altera Cyclone IV
+ 
+ pci:v0000DCBAd00000047*
+  ID_MODEL_FROM_DATABASE=VPX-RCB
+@@ -70868,6 +71474,15 @@ pci:v0000DCBAd00000047*
+ pci:v0000DCBAd00000048*
+  ID_MODEL_FROM_DATABASE=PMC-Biserial-III-BAE9
+ 
++pci:v0000DCBAd0000004E*
++ ID_MODEL_FROM_DATABASE=PC104p-Biserial-III-NVY5
++
++pci:v0000DCBAd0000004F*
++ ID_MODEL_FROM_DATABASE=PC104p-Biserial-III-NVY6
++
++pci:v0000DCBAd00000052*
++ ID_MODEL_FROM_DATABASE=PCIeBiSerialDb37 BA22 LVDS IO
++
+ pci:v0000DD01*
+  ID_VENDOR_FROM_DATABASE=Digital Devices GmbH
+ 
+diff --git a/hwdb/20-usb-vendor-model.hwdb b/hwdb/20-usb-vendor-model.hwdb
+index da8385e..6663820 100644
+--- a/hwdb/20-usb-vendor-model.hwdb
++++ b/hwdb/20-usb-vendor-model.hwdb
+@@ -53,6 +53,12 @@ usb:v017C*
+ usb:v017Cp145F*
+  ID_MODEL_FROM_DATABASE=Trust Deskset
+ 
++usb:v0200*
++ ID_VENDOR_FROM_DATABASE=TP-Link
++
++usb:v0200p0201*
++ ID_MODEL_FROM_DATABASE=MA180 UMTS Modem
++
+ usb:v0204*
+  ID_VENDOR_FROM_DATABASE=Chipsbank Microelectronics Co., Ltd
+ 
+@@ -515,6 +521,12 @@ usb:v03F0p0417*
+ usb:v03F0p0423*
+  ID_MODEL_FROM_DATABASE=HS-COMBO Cardreader
+ 
++usb:v03F0p042A*
++ ID_MODEL_FROM_DATABASE=LaserJet M1132 MFP
++
++usb:v03F0p0441*
++ ID_MODEL_FROM_DATABASE=HP Prime Calculator
++
+ usb:v03F0p0504*
+  ID_MODEL_FROM_DATABASE=DeskJet 885c
+ 
+@@ -957,7 +969,7 @@ usb:v03F0p2317*
+  ID_MODEL_FROM_DATABASE=LaserJet 4350
+ 
+ usb:v03F0p231D*
+- ID_MODEL_FROM_DATABASE=4 GB Flash Drive
++ ID_MODEL_FROM_DATABASE=Broadcom 2070 Bluetooth Combo
+ 
+ usb:v03F0p2402*
+  ID_MODEL_FROM_DATABASE=PhotoSmart 7700 series
+@@ -1214,6 +1226,9 @@ usb:v03F0p3B17*
+ usb:v03F0p3C02*
+  ID_MODEL_FROM_DATABASE=PhotoSmart 7350
+ 
++usb:v03F0p3C05*
++ ID_MODEL_FROM_DATABASE=Scanjet Professional 1000 Mobile Scanner
++
+ usb:v03F0p3C11*
+  ID_MODEL_FROM_DATABASE=PSC 1358
+ 
+@@ -2018,6 +2033,9 @@ usb:v0403p8040*
+ usb:v0403p8070*
+  ID_MODEL_FROM_DATABASE=7 Port Hub
+ 
++usb:v0403p8140*
++ ID_MODEL_FROM_DATABASE=Vehicle Explorer Interface
++
+ usb:v0403p8210*
+  ID_MODEL_FROM_DATABASE=MGTimer - MGCC (Vic) Timing System
+ 
+@@ -2036,6 +2054,12 @@ usb:v0403p8A28*
+ usb:v0403p8A98*
+  ID_MODEL_FROM_DATABASE=TIAO Multi-Protocol Adapter
+ 
++usb:v0403p9133*
++ ID_MODEL_FROM_DATABASE=CallerID
++
++usb:v0403p9135*
++ ID_MODEL_FROM_DATABASE=Rotary Pub alarm
++
+ usb:v0403p9E90*
+  ID_MODEL_FROM_DATABASE=Marvell OpenRD Base/Client
+ 
+@@ -2978,6 +3002,9 @@ usb:v040Ap6005*
+ usb:v040B*
+  ID_VENDOR_FROM_DATABASE=Weltrend Semiconductor
+ 
++usb:v040Bp0A68*
++ ID_MODEL_FROM_DATABASE=Func MS-3 gaming mouse [WT6573F MCU]
++
+ usb:v040Bp6510*
+  ID_MODEL_FROM_DATABASE=Weltrend Bar Code Reader
+ 
+@@ -3662,6 +3689,9 @@ usb:v041Ep4057*
+ usb:v041Ep4058*
+  ID_MODEL_FROM_DATABASE=Live! Cam Optia AF
+ 
++usb:v041Ep405F*
++ ID_MODEL_FROM_DATABASE=WebCam Vista (VF0330)
++
+ usb:v041Ep4061*
+  ID_MODEL_FROM_DATABASE=Live! Cam Notebook Pro [VF0400]
+ 
+@@ -5255,6 +5285,9 @@ usb:v0457p0162*
+ usb:v0457p0163*
+  ID_MODEL_FROM_DATABASE=802.11 Wireless LAN Adapter
+ 
++usb:v0457p0817*
++ ID_MODEL_FROM_DATABASE=SiS-184-ASUS-4352.17 touch panel
++
+ usb:v0457p5401*
+  ID_MODEL_FROM_DATABASE=Wireless Adapter RO80211GS-USB
+ 
+@@ -5531,6 +5564,9 @@ usb:v0458p7079*
+ usb:v0458p707F*
+  ID_MODEL_FROM_DATABASE=TVGo DVB-T03 [RTL2832]
+ 
++usb:v0458p7088*
++ ID_MODEL_FROM_DATABASE=WideCam 1050
++
+ usb:v0459*
+  ID_VENDOR_FROM_DATABASE=Adobe Systems, Inc.
+ 
+@@ -6401,6 +6437,9 @@ usb:v045Ep0772*
+ usb:v045Ep0779*
+  ID_MODEL_FROM_DATABASE=LifeCam HD-3000
+ 
++usb:v045Ep0797*
++ ID_MODEL_FROM_DATABASE=Optical Mouse 200
++
+ usb:v045Ep930A*
+  ID_MODEL_FROM_DATABASE=ISOUSB.SYS Intel 82930 Isochronous IO Test Board
+ 
+@@ -6624,7 +6663,7 @@ usb:v046A*
+  ID_VENDOR_FROM_DATABASE=Cherry GmbH
+ 
+ usb:v046Ap0001*
+- ID_MODEL_FROM_DATABASE=My3000 Keyboard
++ ID_MODEL_FROM_DATABASE=Keyboard
+ 
+ usb:v046Ap0003*
+  ID_MODEL_FROM_DATABASE=My3000 Hub
+@@ -8504,6 +8543,9 @@ usb:v0480pA006*
+ usb:v0480pA007*
+  ID_MODEL_FROM_DATABASE=External Disk USB 3.0
+ 
++usb:v0480pD010*
++ ID_MODEL_FROM_DATABASE=External Disk 3TB
++
+ usb:v0481*
+  ID_VENDOR_FROM_DATABASE=Zenith Data Systems
+ 
+@@ -8597,6 +8639,9 @@ usb:v0483p5001*
+ usb:v0483p5710*
+  ID_MODEL_FROM_DATABASE=Joystick in FS Mode
+ 
++usb:v0483p5720*
++ ID_MODEL_FROM_DATABASE=STM microSD Flash Device
++
+ usb:v0483p5721*
+  ID_MODEL_FROM_DATABASE=Hantek DDS-3X25 Arbitrary Waveform Generator
+ 
+@@ -8693,6 +8738,12 @@ usb:v048Dp9009*
+ usb:v048Dp9135*
+  ID_MODEL_FROM_DATABASE=Zolid Mini DVB-T Stick
+ 
++usb:v048Dp9503*
++ ID_MODEL_FROM_DATABASE=ITE it9503 feature-limited DVB-T transmission chip [ccHDtv]
++
++usb:v048Dp9507*
++ ID_MODEL_FROM_DATABASE=ITE it9507 full featured DVB-T transmission chip [ccHDtv]
++
+ usb:v048F*
+  ID_VENDOR_FROM_DATABASE=Eicon Tech.
+ 
+@@ -10937,9 +10988,21 @@ usb:v04A9p3260*
+ usb:v04A9p3264*
+  ID_MODEL_FROM_DATABASE=PowerShot A1400
+ 
++usb:v04A9p3265*
++ ID_MODEL_FROM_DATABASE=Powershot ELPH 130 IS / IXUS 140
++
+ usb:v04A9p3268*
+  ID_MODEL_FROM_DATABASE=PowerShot ELPH 330 HS / IXUS 255 HS
+ 
++usb:v04A9p3271*
++ ID_MODEL_FROM_DATABASE=PowerShot A2500
++
++usb:v04A9p3276*
++ ID_MODEL_FROM_DATABASE=PowerShot SX170 IS
++
++usb:v04A9p327D*
++ ID_MODEL_FROM_DATABASE=Powershot ELPH 115 IS / IXUS 132
++
+ usb:v04AA*
+  ID_VENDOR_FROM_DATABASE=DaeWoo Telecom, Ltd
+ 
+@@ -11162,6 +11225,9 @@ usb:v04B0p0425*
+ usb:v04B0p0428*
+  ID_MODEL_FROM_DATABASE=D7000
+ 
++usb:v04B0p0429*
++ ID_MODEL_FROM_DATABASE=D5100
++
+ usb:v04B0p042A*
+  ID_MODEL_FROM_DATABASE=D800 (ptp)
+ 
+@@ -12806,6 +12872,9 @@ usb:v04D9p1503*
+ usb:v04D9p1603*
+  ID_MODEL_FROM_DATABASE=Keyboard
+ 
++usb:v04D9p1702*
++ ID_MODEL_FROM_DATABASE=Keyboard LKS02
++
+ usb:v04D9p2013*
+  ID_MODEL_FROM_DATABASE=Keyboard [Das Keyboard]
+ 
+@@ -12821,6 +12890,9 @@ usb:v04D9p2519*
+ usb:v04D9p2832*
+  ID_MODEL_FROM_DATABASE=1channel Telephone line recorder
+ 
++usb:v04D9p2834*
++ ID_MODEL_FROM_DATABASE=HT82A834R Audio MCU
++
+ usb:v04D9pA055*
+  ID_MODEL_FROM_DATABASE=Keyboard
+ 
+@@ -14252,6 +14324,9 @@ usb:v04F2pB354*
+ usb:v04F3*
+  ID_VENDOR_FROM_DATABASE=Elan Microelectronics Corp.
+ 
++usb:v04F3p000A*
++ ID_MODEL_FROM_DATABASE=Touchscreen
++
+ usb:v04F3p0103*
+  ID_MODEL_FROM_DATABASE=ActiveJet K-2024 Multimedia Keyboard
+ 
+@@ -15302,6 +15377,12 @@ usb:v050Dp1102*
+ usb:v050Dp1103*
+  ID_MODEL_FROM_DATABASE=F9L1103 N750 DB 802.11abgn 2x3:3 [Ralink RT3573]
+ 
++usb:v050Dp1106*
++ ID_MODEL_FROM_DATABASE=F9L1106v1 802.11a/b/g/n/ac Wireless Adapter [Broadcom BCM43526]
++
++usb:v050Dp1109*
++ ID_MODEL_FROM_DATABASE=F9L1109v1 802.11a/b/g/n/ac Wireless Adapter [Realtek RTL8812AU]
++
+ usb:v050Dp11F2*
+  ID_MODEL_FROM_DATABASE=ISY Wireless Micro Adapter IWL 2000 [RTL8188CUS]
+ 
+@@ -16514,6 +16595,9 @@ usb:v054Cp0485*
+ usb:v054Cp04CB*
+  ID_MODEL_FROM_DATABASE=WALKMAN NWZ-E354
+ 
++usb:v054Cp06BB*
++ ID_MODEL_FROM_DATABASE=WALKMAN NWZ-F805
++
+ usb:v054Cp1000*
+  ID_MODEL_FROM_DATABASE=Wireless Buzz! Receiver
+ 
+@@ -47582,6 +47666,15 @@ usb:v2101*
+ usb:v2101p0201*
+  ID_MODEL_FROM_DATABASE=SIIG 4-to-2 Printer Switch
+ 
++usb:v2149*
++ ID_VENDOR_FROM_DATABASE=Advanced Silicon S.A.
++
++usb:v2149p211B*
++ ID_MODEL_FROM_DATABASE=Touchscreen Controller
++
++usb:v2149p2703*
++ ID_MODEL_FROM_DATABASE=TS58xxA/TC56xxA [CoolTouch]
++
+ usb:v2162*
+  ID_VENDOR_FROM_DATABASE=Creative (?)
+ 
+@@ -47636,6 +47729,21 @@ usb:v2227*
+ usb:v2227p3105*
+  ID_MODEL_FROM_DATABASE=SKYDATA SKD-U100
+ 
++usb:v2232*
++ ID_VENDOR_FROM_DATABASE=Silicon Motion
++
++usb:v2232p1005*
++ ID_MODEL_FROM_DATABASE=WebCam SCB-0385N
++
++usb:v2232p1028*
++ ID_MODEL_FROM_DATABASE=WebCam SC-03FFL11939N
++
++usb:v2232p1029*
++ ID_MODEL_FROM_DATABASE=WebCam SC-13HDL11939N
++
++usb:v2232p1037*
++ ID_MODEL_FROM_DATABASE=WebCam SC-03FFM12339N
++
+ usb:v2233*
+  ID_VENDOR_FROM_DATABASE=RadioShack Corporation
+ 
diff --git a/SOURCES/0151-delta-replace-readdir_r-with-readdir.patch b/SOURCES/0151-delta-replace-readdir_r-with-readdir.patch
new file mode 100644
index 0000000..ca8ebba
--- /dev/null
+++ b/SOURCES/0151-delta-replace-readdir_r-with-readdir.patch
@@ -0,0 +1,31 @@
+From 095e14ab14e22d4fa605411bb0f47a856c90df8b Mon Sep 17 00:00:00 2001
+From: Florian Weimer <fweimer@redhat.com>
+Date: Thu, 19 Dec 2013 11:16:12 +0100
+Subject: [PATCH] delta: replace readdir_r with readdir
+
+---
+ src/delta/delta.c | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/src/delta/delta.c b/src/delta/delta.c
+index 193642d..c2550d6 100644
+--- a/src/delta/delta.c
++++ b/src/delta/delta.c
+@@ -280,13 +280,13 @@ static int enumerate_dir(Hashmap *top, Hashmap *bottom, Hashmap *drops, const ch
+ 
+         for (;;) {
+                 struct dirent *de;
+-                union dirent_storage buf;
+                 int k;
+                 char *p;
+ 
+-                k = readdir_r(d, &buf.de, &de);
+-                if (k != 0)
+-                        return -k;
++                errno = 0;
++                de = readdir(d);
++                if (!de && errno != 0)
++                        return -errno;
+ 
+                 if (!de)
+                         break;
diff --git a/SOURCES/0152-delta-fix-delta-for-drop-ins.patch b/SOURCES/0152-delta-fix-delta-for-drop-ins.patch
new file mode 100644
index 0000000..7a257aa
--- /dev/null
+++ b/SOURCES/0152-delta-fix-delta-for-drop-ins.patch
@@ -0,0 +1,375 @@
+From 5bb09b7611b2bb5df0df432df20c84ca741cad24 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Sun, 22 Dec 2013 19:45:02 -0500
+Subject: [PATCH] delta: fix delta for drop-ins
+
+Also, fix highlighting, add more debug statements, make const tables
+static and global, run path_kill_slashes only at entry.
+
+Conflicts:
+	src/delta/delta.c
+---
+ src/delta/delta.c | 174 +++++++++++++++++++++++++-----------------------------
+ 1 file changed, 79 insertions(+), 95 deletions(-)
+
+diff --git a/src/delta/delta.c b/src/delta/delta.c
+index c2550d6..06c7431 100644
+--- a/src/delta/delta.c
++++ b/src/delta/delta.c
+@@ -33,6 +33,34 @@
+ #include "build.h"
+ #include "strv.h"
+ 
++static const char prefixes[] =
++        "/etc\0"
++        "/run\0"
++        "/usr/local/lib\0"
++        "/usr/local/share\0"
++        "/usr/lib\0"
++        "/usr/share\0"
++#ifdef HAVE_SPLIT_USR
++        "/lib\0"
++#endif
++        ;
++
++static const char suffixes[] =
++        "sysctl.d\0"
++        "tmpfiles.d\0"
++        "modules-load.d\0"
++        "binfmt.d\0"
++        "systemd/system\0"
++        "systemd/user\0"
++        "systemd/system-preset\0"
++        "systemd/user-preset\0"
++        "udev/rules.d\0"
++        "modprobe.d\0";
++
++static const char have_dropins[] =
++        "systemd/system\0"
++        "systemd/user\0";
++
+ static bool arg_no_pager = false;
+ static int arg_diff = -1;
+ 
+@@ -48,6 +76,14 @@ static enum {
+         (SHOW_MASKED | SHOW_EQUIVALENT | SHOW_REDIRECTED | SHOW_OVERRIDDEN | SHOW_EXTENDED)
+ } arg_flags = 0;
+ 
++static void pager_open_if_enabled(void) {
++
++        if (arg_no_pager)
++                return;
++
++        pager_open(false);
++}
++
+ static int equivalent(const char *a, const char *b) {
+         _cleanup_free_ char *x = NULL, *y = NULL;
+ 
+@@ -76,7 +112,7 @@ static int notify_override_equivalent(const char *top, const char *bottom) {
+                 return 0;
+ 
+         printf("%s%s%s %s → %s\n",
+-               ansi_highlight_green(), "[EQUIVALENT]", ansi_highlight(), top, bottom);
++               ansi_highlight_green(), "[EQUIVALENT]", ansi_highlight_off(), top, bottom);
+         return 1;
+ }
+ 
+@@ -160,24 +196,26 @@ static int found_override(const char *top, const char *bottom) {
+ }
+ 
+ static int enumerate_dir_d(Hashmap *top, Hashmap *bottom, Hashmap *drops, const char *toppath, const char *drop) {
+-        _cleanup_free_ char *conf = NULL;
++        _cleanup_free_ char *unit = NULL;
+         _cleanup_free_ char *path = NULL;
+         _cleanup_strv_free_ char **list = NULL;
+         char **file;
+         char *c;
+         int r;
+ 
++        assert(!endswith(drop, "/"));
++
+         path = strjoin(toppath, "/", drop, NULL);
+         if (!path)
+                 return -ENOMEM;
+ 
+-        path_kill_slashes(path);
++        log_debug("Looking at %s", path);
+ 
+-        conf = strdup(drop);
+-        if (!conf)
++        unit = strdup(drop);
++        if (!unit)
+                 return -ENOMEM;
+ 
+-        c = strrchr(conf, '.');
++        c = strrchr(unit, '.');
+         if (!c)
+                 return -EINVAL;
+         *c = 0;
+@@ -200,35 +238,21 @@ static int enumerate_dir_d(Hashmap *top, Hashmap *bottom, Hashmap *drops, const
+                 p = strjoin(path, "/", *file, NULL);
+                 if (!p)
+                         return -ENOMEM;
++                d = p + strlen(toppath) + 1;
+ 
+-                path_kill_slashes(p);
+-
+-                d = strrchr(p, '/');
+-                if (!d || d == p) {
+-                        free(p);
+-                        return -EINVAL;
+-                }
+-                d--;
+-                d = strrchr(p, '/');
+-
+-                if (!d || d == p) {
+-                        free(p);
+-                        return -EINVAL;
+-                }
+-
++                log_debug("Adding at top: %s → %s", d, p);
+                 k = hashmap_put(top, d, p);
+                 if (k >= 0) {
+                         p = strdup(p);
+                         if (!p)
+                                 return -ENOMEM;
+-                        d = strrchr(p, '/');
+-                        d--;
+-                        d = strrchr(p, '/');
++                        d = p + strlen(toppath) + 1;
+                 } else if (k != -EEXIST) {
+                         free(p);
+                         return k;
+                 }
+ 
++                log_debug("Adding at bottom: %s → %s", d, p);
+                 free(hashmap_remove(bottom, d));
+                 k = hashmap_put(bottom, d, p);
+                 if (k < 0) {
+@@ -236,14 +260,14 @@ static int enumerate_dir_d(Hashmap *top, Hashmap *bottom, Hashmap *drops, const
+                         return k;
+                 }
+ 
+-                h = hashmap_get(drops, conf);
++                h = hashmap_get(drops, unit);
+                 if (!h) {
+                         h = hashmap_new(string_hash_func, string_compare_func);
+                         if (!h)
+                                 return -ENOMEM;
+-                        hashmap_put(drops, conf, h);
+-                        conf = strdup(conf);
+-                        if (!conf)
++                        hashmap_put(drops, unit, h);
++                        unit = strdup(unit);
++                        if (!unit)
+                                 return -ENOMEM;
+                 }
+ 
+@@ -251,7 +275,8 @@ static int enumerate_dir_d(Hashmap *top, Hashmap *bottom, Hashmap *drops, const
+                 if (!p)
+                         return -ENOMEM;
+ 
+-                k = hashmap_put(h, path_get_file_name(p), p);
++                log_debug("Adding to drops: %s → %s → %s", unit, basename(p), p);
++                k = hashmap_put(h, basename(p), p);
+                 if (k < 0) {
+                         free(p);
+                         if (k != -EEXIST)
+@@ -269,12 +294,14 @@ static int enumerate_dir(Hashmap *top, Hashmap *bottom, Hashmap *drops, const ch
+         assert(drops);
+         assert(path);
+ 
++        log_debug("Looking at %s", path);
++
+         d = opendir(path);
+         if (!d) {
+                 if (errno == ENOENT)
+                         return 0;
+ 
+-                log_error("Failed to enumerate %s: %m", path);
++                log_error("Failed to open %s: %m", path);
+                 return -errno;
+         }
+ 
+@@ -285,11 +312,8 @@ static int enumerate_dir(Hashmap *top, Hashmap *bottom, Hashmap *drops, const ch
+ 
+                 errno = 0;
+                 de = readdir(d);
+-                if (!de && errno != 0)
+-                        return -errno;
+-
+                 if (!de)
+-                        break;
++                        return -errno;
+ 
+                 dirent_ensure_type(d, de);
+ 
+@@ -303,9 +327,8 @@ static int enumerate_dir(Hashmap *top, Hashmap *bottom, Hashmap *drops, const ch
+                 if (!p)
+                         return -ENOMEM;
+ 
+-                path_kill_slashes(p);
+-
+-                k = hashmap_put(top, path_get_file_name(p), p);
++                log_debug("Adding at top: %s → %s", basename(p), p);
++                k = hashmap_put(top, basename(p), p);
+                 if (k >= 0) {
+                         p = strdup(p);
+                         if (!p)
+@@ -315,44 +338,37 @@ static int enumerate_dir(Hashmap *top, Hashmap *bottom, Hashmap *drops, const ch
+                         return k;
+                 }
+ 
+-                free(hashmap_remove(bottom, path_get_file_name(p)));
+-                k = hashmap_put(bottom, path_get_file_name(p), p);
++                log_debug("Adding at bottom: %s → %s", basename(p), p);
++                free(hashmap_remove(bottom, basename(p)));
++                k = hashmap_put(bottom, basename(p), p);
+                 if (k < 0) {
+                         free(p);
+                         return k;
+                 }
+         }
+-
+-        return 0;
+ }
+ 
+-static int process_suffix(const char *prefixes, const char *suffix, bool dropins) {
++static int process_suffix(const char *suffix) {
+         const char *p;
+         char *f;
+-        Hashmap *top, *bottom=NULL, *drops=NULL;
++        Hashmap *top, *bottom, *drops;
+         Hashmap *h;
+         char *key;
+         int r = 0, k;
+         Iterator i, j;
+         int n_found = 0;
++        bool dropins;
+ 
+-        assert(prefixes);
+         assert(suffix);
++        assert(!startswith(suffix, "/"));
++        assert(!strstr(suffix, "//"));
+ 
+-        top = hashmap_new(string_hash_func, string_compare_func);
+-        if (!top) {
+-                r = -ENOMEM;
+-                goto finish;
+-        }
++        dropins = nulstr_contains(have_dropins, suffix);
+ 
++        top = hashmap_new(string_hash_func, string_compare_func);
+         bottom = hashmap_new(string_hash_func, string_compare_func);
+-        if (!bottom) {
+-                r = -ENOMEM;
+-                goto finish;
+-        }
+-
+         drops = hashmap_new(string_hash_func, string_compare_func);
+-        if (!drops) {
++        if (!top || !bottom || !drops) {
+                 r = -ENOMEM;
+                 goto finish;
+         }
+@@ -367,10 +383,8 @@ static int process_suffix(const char *prefixes, const char *suffix, bool dropins
+                 }
+ 
+                 k = enumerate_dir(top, bottom, drops, t, dropins);
+-                if (k < 0)
++                if (r == 0)
+                         r = k;
+-
+-                log_debug("Looking at %s", t);
+         }
+ 
+         HASHMAP_FOREACH_KEY(f, key, top, i) {
+@@ -411,21 +425,20 @@ finish:
+         return r < 0 ? r : n_found;
+ }
+ 
+-static int process_suffix_chop(const char *prefixes, const char *suffix, const char *have_dropins) {
++static int process_suffix_chop(const char *suffix) {
+         const char *p;
+ 
+-        assert(prefixes);
+         assert(suffix);
+ 
+         if (!path_is_absolute(suffix))
+-                return process_suffix(prefixes, suffix, nulstr_contains(have_dropins, suffix));
++                return process_suffix(suffix);
+ 
+         /* Strip prefix from the suffix */
+         NULSTR_FOREACH(p, prefixes) {
+                 if (startswith(suffix, p)) {
+                         suffix += strlen(p);
+                         suffix += strspn(suffix, "/");
+-                        return process_suffix(prefixes, suffix, nulstr_contains(have_dropins, suffix));
++                        return process_suffix(suffix);
+                 }
+         }
+ 
+@@ -550,35 +563,6 @@ static int parse_argv(int argc, char *argv[]) {
+ }
+ 
+ int main(int argc, char *argv[]) {
+-
+-        const char prefixes[] =
+-                "/etc\0"
+-                "/run\0"
+-                "/usr/local/lib\0"
+-                "/usr/local/share\0"
+-                "/usr/lib\0"
+-                "/usr/share\0"
+-#ifdef HAVE_SPLIT_USR
+-                "/lib\0"
+-#endif
+-                ;
+-
+-        const char suffixes[] =
+-                "sysctl.d\0"
+-                "tmpfiles.d\0"
+-                "modules-load.d\0"
+-                "binfmt.d\0"
+-                "systemd/system\0"
+-                "systemd/user\0"
+-                "systemd/system-preset\0"
+-                "systemd/user-preset\0"
+-                "udev/rules.d\0"
+-                "modprobe.d\0";
+-
+-        const char have_dropins[] =
+-                "systemd/system\0"
+-                "systemd/user\0";
+-
+         int r = 0, k;
+         int n_found = 0;
+ 
+@@ -597,14 +581,14 @@ int main(int argc, char *argv[]) {
+         else if (arg_diff)
+                 arg_flags |= SHOW_OVERRIDDEN;
+ 
+-        if (!arg_no_pager)
+-                pager_open(false);
++        pager_open_if_enabled();
+ 
+         if (optind < argc) {
+                 int i;
+ 
+                 for (i = optind; i < argc; i++) {
+-                        k = process_suffix_chop(prefixes, argv[i], have_dropins);
++                        path_kill_slashes(argv[i]);
++                        k = process_suffix_chop(argv[i]);
+                         if (k < 0)
+                                 r = k;
+                         else
+@@ -615,7 +599,7 @@ int main(int argc, char *argv[]) {
+                 const char *n;
+ 
+                 NULSTR_FOREACH(n, suffixes) {
+-                        k = process_suffix(prefixes, n, nulstr_contains(have_dropins, n));
++                        k = process_suffix(n);
+                         if (k < 0)
+                                 r = k;
+                         else
diff --git a/SOURCES/0153-delta-if-prefix-is-specified-only-show-overrides-the.patch b/SOURCES/0153-delta-if-prefix-is-specified-only-show-overrides-the.patch
new file mode 100644
index 0000000..efb109c
--- /dev/null
+++ b/SOURCES/0153-delta-if-prefix-is-specified-only-show-overrides-the.patch
@@ -0,0 +1,251 @@
+From 13fb7479365d958e76b149fe5615be74f519f03a Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Sun, 22 Dec 2013 22:53:23 -0500
+Subject: [PATCH] delta: if prefix is specified, only show overrides there
+
+systemd-delta /run/systemd/system will show all unit overrides
+in /run, etc.
+---
+ man/systemd-delta.xml | 80 +++++++++++++++++++++++++++++++++++++++++----------
+ src/delta/delta.c     | 71 ++++++++++++++++++++++++++++-----------------
+ 2 files changed, 109 insertions(+), 42 deletions(-)
+
+diff --git a/man/systemd-delta.xml b/man/systemd-delta.xml
+index 413ebd8..4d3ab78 100644
+--- a/man/systemd-delta.xml
++++ b/man/systemd-delta.xml
+@@ -49,7 +49,9 @@
+ 
+         <refsynopsisdiv>
+                 <cmdsynopsis>
+-                        <command>systemd-delta <arg choice="opt" rep="repeat">OPTIONS</arg> <arg choice="opt" rep="repeat">SUFFIX</arg></command>
++                        <command>systemd-delta</command>
++			<arg choice="opt" rep="repeat">OPTIONS</arg>
++			<arg choice="opt" rep="repeat"><replaceable>PREFIX</replaceable><optional>/<replaceable>SUFFIX</replaceable></optional>|<replaceable>SUFFIX</replaceable></arg>
+                 </cmdsynopsis>
+         </refsynopsisdiv>
+ 
+@@ -57,18 +59,46 @@
+                 <title>Description</title>
+ 
+                 <para><command>systemd-delta</command> may be used to
+-                identify and compare configuration files in
+-                <filename>/etc</filename> that override default
+-                counterparts in <filename>/usr</filename>. The command
+-                line argument can be one or more name of a subdirectories of
+-                <filename>/etc</filename> or
+-                <filename>/usr/lib</filename> to compare, such as
+-                <filename>tmpfiles.d</filename>, <filename>sysctl.d</filename> or
+-                <filename>systemd/system</filename>.</para>
+-
+-                <para>When no argument is specified a number of
+-                well-known subdirectories are searched for overridden
+-                files.</para>
++                identify and compare configuration files that override
++                other configuration files. Files in
++                <filename>/etc</filename> have highest priority, files
++                in <filename>/run</filename> have the second highest
++                priority, ..., files in <filename>/lib</filename> have
++                lowest priority. Files in a directory with higher
++                priority override files with the same name in
++                directories of lower priority. In addition, certain
++                configuration files can have <literal>.d</literal>
++                directories which contain "drop-in" files with
++                configuration snippets which augment the main
++                configuration file. "Drop-in" files can be overriden
++                in the same way by placing files with the same name in
++                a directory of higher priority (except that in case of
++                "drop-in" files, both the "drop-in" file name and the
++                name of the containing directory, which corresponds to
++                the name of the main configuration file, must match).
++                For a fuller explanation, see
++                <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
++		</para>
++
++		<para>The command line argument will be split into a
++		prefix and a suffix. Either is optional. The prefix
++		must be one of the directories containing
++		configuration files (<filename>/etc</filename>,
++		<filename>/run</filename>,
++		<filename>/usr/lib</filename>, ...). If it is given,
++		only overriding files contained in this directory will
++		be shown. Otherwise, all overriding files will be
++		shown. The suffix must be a name of a subdirectory
++		containing configuration files like
++		<filename>tmpfiles.d</filename>,
++		<filename>sysctl.d</filename> or
++		<filename>systemd/system</filename>. If it is given,
++		only configuration files in this subdirectory (across
++		all configuration paths) will be analyzed. Otherwise,
++		all configuration files will be analyzed. If the
++		commandline argument is not given at all, all
++		configuration files will be analyzed. See below for
++		some examples.</para>
+         </refsect1>
+ 
+         <refsect1>
+@@ -168,9 +198,28 @@
+                         </varlistentry>
+ 
+                 </variablelist>
+-
+         </refsect1>
+ 
++	<refsect1>
++		<title>Examples</title>
++
++		<para>To see all local configuration:</para>
++		<programlisting>systemd-delta
++		</programlisting>
++
++		<para>To see all runtime configuration:</para>
++		<programlisting>systemd-delta /run
++		</programlisting>
++
++		<para>To see all system unit configuration changes:</para>
++		<programlisting>systemd-delta systemd/system
++		</programlisting>
++
++		<para>To see all runtime "drop-in" changes for system units:</para>
++		<programlisting>systemd-delta --type=extended /run/systemd/system
++		</programlisting>
++	</refsect1>
++
+         <refsect1>
+                 <title>Exit status</title>
+ 
+@@ -181,7 +230,8 @@
+         <refsect1>
+                 <title>See Also</title>
+                 <para>
+-                        <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>
++                        <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
++                        <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+                 </para>
+         </refsect1>
+ 
+diff --git a/src/delta/delta.c b/src/delta/delta.c
+index 06c7431..a8dd57e 100644
+--- a/src/delta/delta.c
++++ b/src/delta/delta.c
+@@ -4,6 +4,7 @@
+   This file is part of systemd.
+ 
+   Copyright 2012 Lennart Poettering
++  Copyright 2013 Zbigniew Jędrzejewski-Szmek
+ 
+   systemd is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Lesser General Public License as published by
+@@ -348,7 +349,7 @@ static int enumerate_dir(Hashmap *top, Hashmap *bottom, Hashmap *drops, const ch
+         }
+ }
+ 
+-static int process_suffix(const char *suffix) {
++static int process_suffix(const char *suffix, const char *onlyprefix) {
+         const char *p;
+         char *f;
+         Hashmap *top, *bottom, *drops;
+@@ -393,20 +394,23 @@ static int process_suffix(const char *suffix) {
+                 o = hashmap_get(bottom, key);
+                 assert(o);
+ 
+-                if (path_equal(o, f))
+-                        notify_override_unchanged(f);
+-                else {
+-                        k = found_override(f, o);
+-                        if (k < 0)
+-                                r = k;
+-                        else
+-                                n_found += k;
++                if (!onlyprefix || startswith(o, onlyprefix)) {
++                        if (path_equal(o, f)) {
++                                notify_override_unchanged(f);
++                        } else {
++                                k = found_override(f, o);
++                                if (k < 0)
++                                        r = k;
++                                else
++                                        n_found += k;
++                        }
+                 }
+ 
+                 h = hashmap_get(drops, key);
+                 if (h)
+                         HASHMAP_FOREACH(o, h, j)
+-                                n_found += notify_override_extended(f, o);
++                                if (!onlyprefix || startswith(o, onlyprefix))
++                                        n_found += notify_override_extended(f, o);
+         }
+ 
+ finish:
+@@ -425,24 +429,41 @@ finish:
+         return r < 0 ? r : n_found;
+ }
+ 
+-static int process_suffix_chop(const char *suffix) {
++static int process_suffixes(const char *onlyprefix) {
++        const char *n;
++        int n_found = 0, r;
++
++        NULSTR_FOREACH(n, suffixes) {
++                r = process_suffix(n, onlyprefix);
++                if (r < 0)
++                        return r;
++                else
++                        n_found += r;
++        }
++        return n_found;
++}
++
++static int process_suffix_chop(const char *arg) {
+         const char *p;
+ 
+-        assert(suffix);
++        assert(arg);
+ 
+-        if (!path_is_absolute(suffix))
+-                return process_suffix(suffix);
++        if (!path_is_absolute(arg))
++                return process_suffix(arg, NULL);
+ 
+         /* Strip prefix from the suffix */
+         NULSTR_FOREACH(p, prefixes) {
+-                if (startswith(suffix, p)) {
+-                        suffix += strlen(p);
++                const char *suffix = startswith(arg, p);
++                if (suffix) {
+                         suffix += strspn(suffix, "/");
+-                        return process_suffix(suffix);
++                        if (*suffix)
++                                return process_suffix(suffix, NULL);
++                        else
++                                return process_suffixes(arg);
+                 }
+         }
+ 
+-        log_error("Invalid suffix specification %s.", suffix);
++        log_error("Invalid suffix specification %s.", arg);
+         return -EINVAL;
+ }
+ 
+@@ -596,15 +617,11 @@ int main(int argc, char *argv[]) {
+                 }
+ 
+         } else {
+-                const char *n;
+-
+-                NULSTR_FOREACH(n, suffixes) {
+-                        k = process_suffix(n);
+-                        if (k < 0)
+-                                r = k;
+-                        else
+-                                n_found += k;
+-                }
++                k = process_suffixes(NULL);
++                if (k < 0)
++                        r = k;
++                else
++                        n_found += k;
+         }
+ 
+         if (r >= 0)
diff --git a/SOURCES/0154-man-units-tmpfiles.d-5-cleanup.patch b/SOURCES/0154-man-units-tmpfiles.d-5-cleanup.patch
new file mode 100644
index 0000000..6d8b332
--- /dev/null
+++ b/SOURCES/0154-man-units-tmpfiles.d-5-cleanup.patch
@@ -0,0 +1,401 @@
+From b2d9ad357e136b289238eb05648c504d0c0bc06b Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Tue, 24 Dec 2013 10:21:45 -0500
+Subject: [PATCH] man,units: tmpfiles.d(5) cleanup
+
+Condition for /lib (necessary for split /usr) was missing from the unit.
+
+Some changes which were done in tmpfiles.d(5) were not carried over to
+systemd-tmpfiles(1).
+
+Also use markup where possible.
+
+Conflicts:
+	man/tmpfiles.d.xml
+---
+ man/systemd-tmpfiles.xml                |  53 ++++++----
+ man/tmpfiles.d.xml                      | 168 +++++++++++++++++++-------------
+ units/systemd-tmpfiles-setup.service.in |   1 +
+ 3 files changed, 134 insertions(+), 88 deletions(-)
+
+diff --git a/man/systemd-tmpfiles.xml b/man/systemd-tmpfiles.xml
+index ba727e1..91c0372 100644
+--- a/man/systemd-tmpfiles.xml
++++ b/man/systemd-tmpfiles.xml
+@@ -54,7 +54,9 @@
+ 
+         <refsynopsisdiv>
+                 <cmdsynopsis>
+-                        <command>systemd-tmpfiles <arg choice="opt" rep="repeat">OPTIONS</arg> <arg choice="opt" rep="repeat">CONFIGURATION FILE</arg></command>
++                        <command>systemd-tmpfiles</command>
++                        <arg choice="opt" rep="repeat">OPTIONS</arg>
++                        <arg choice="opt" rep="repeat"><replaceable>CONFIGFILE</replaceable></arg>
+                 </cmdsynopsis>
+ 
+                 <para><filename>systemd-tmpfiles-setup.service</filename></para>
+@@ -67,22 +69,20 @@
+                 <title>Description</title>
+ 
+                 <para><command>systemd-tmpfiles</command> creates,
+-                deletes and cleans up volatile and temporary files and
++                deletes, and cleans up volatile and temporary files and
+                 directories, based on the configuration file format and
+-                location specified in <citerefentry>
+-                        <refentrytitle>tmpfiles.d</refentrytitle>
+-                        <manvolnum>5</manvolnum>
+-                </citerefentry>.</para>
++                location specified in
++                <citerefentry><refentrytitle>tmpfiles.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
++                </para>
+ 
+                 <para>If invoked with no arguments, it applies all
+                 directives from all configuration files. If one or
+                 more filenames are passed on the command line, only
+                 the directives in these files are applied. If only
+                 the basename of a configuration file is specified,
+-                all configuration directories as specified in <citerefentry>
+-                        <refentrytitle>tmpfiles.d</refentrytitle>
+-                        <manvolnum>5</manvolnum>
+-                </citerefentry> are searched for a matching file.</para>
++                all configuration directories as specified in
++                <citerefentry><refentrytitle>tmpfiles.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>
++                are searched for a matching file.</para>
+         </refsect1>
+ 
+         <refsect1>
+@@ -94,12 +94,25 @@
+ 
+                         <varlistentry>
+                                 <term><option>--create</option></term>
+-                                <listitem><para>If this option is passed, all
+-                                files and directories marked with f,
+-                                F, d, D in the configuration files are
+-                                created. Files and directories marked with z,
+-                                Z have their ownership, access mode and security
+-                                labels set.</para></listitem>
++                                <listitem><para>If this option is
++                                passed, all files and directories
++                                marked with <varname>f</varname>,
++                                <varname>F</varname>,
++                                <varname>w</varname>,
++                                <varname>d</varname>,
++                                <varname>D</varname>,
++                                <varname>p</varname>,
++                                <varname>L</varname>,
++                                <varname>c</varname>,
++                                <varname>b</varname>,
++                                <varname>m</varname> in the
++                                configuration files are created or
++                                written to. Files and directories
++                                marked with <varname>z</varname>,
++                                <varname>Z</varname>,
++                                <varname>m</varname> have their
++                                ownership, access mode and security
++                                labels set. </para></listitem>
+                         </varlistentry>
+ 
+                         <varlistentry>
+@@ -113,9 +126,11 @@
+                         <varlistentry>
+                                 <term><option>--remove</option></term>
+                                 <listitem><para>If this option is
+-                                passed, all files and directories marked
+-                                with r, R in the configuration files
+-                                are removed.</para></listitem>
++                                passed, all files and directories
++                                marked with <varname>r</varname>,
++                                <varname>R</varname> in the
++                                configuration files are
++                                removed.</para></listitem>
+                         </varlistentry>
+                         <varlistentry>
+                                 <term><option>--prefix=PATH</option></term>
+diff --git a/man/tmpfiles.d.xml b/man/tmpfiles.d.xml
+index e8b630d..a00637b 100644
+--- a/man/tmpfiles.d.xml
++++ b/man/tmpfiles.d.xml
+@@ -67,23 +67,32 @@
+                 <title>Configuration Format</title>
+ 
+                 <para>Each configuration file shall be named in the
+-                style of <filename>&lt;package&gt;.conf</filename>.
+-                Files in <filename>/etc/</filename> override files
+-                with the same name in <filename>/usr/lib/</filename>
+-                and <filename>/run/</filename>.  Files in
+-                <filename>/run/</filename> override files with the same
+-                name in <filename>/usr/lib/</filename>. Packages
++                style of
++                <filename><replaceable>package</replaceable>.conf</filename>
++                or
++                <filename><replaceable>package</replaceable>-<replaceable>part</replaceable>.conf</filename>.
++                The second variant should be used when it is desirable
++                to make it easy to override just this part of
++                configuration.</para>
++
++                <para>Files in <filename>/etc/tmpfiles.d</filename>
++                override files with the same name in
++                <filename>/usr/lib/tmpfiles.d</filename> and
++                <filename>/run/tmpfiles.d</filename>. Files in
++                <filename>/run/tmpfiles.d</filename> override files
++                with the same name in
++                <filename>/usr/lib/tmpfiles.d</filename>. Packages
+                 should install their configuration files in
+-                <filename>/usr/lib/</filename>. Files in
+-                <filename>/etc/</filename> are reserved for the local
+-                administrator, who may use this logic to override the
+-                configuration files installed by vendor packages. All
+-                configuration files are sorted by their filename in
+-                lexicographic order, regardless in which of the
+-                directories they reside. If multiple files specify the
+-                same path, the entry in the file with the lexicographically
+-                earliest name will be applied, all all other conflicting
+-                entries logged as errors.</para>
++                <filename>/usr/lib/tmpfiles.d</filename>. Files in
++                <filename>/etc/tmpfiles.d</filename> are reserved for
++                the local administrator, who may use this logic to
++                override the configuration files installed by vendor
++                packages. All configuration files are sorted by their
++                filename in lexicographic order, regardless in which
++                of the directories they reside. If multiple files
++                specify the same path, the entry in the file with the
++                lexicographically earliest name will be applied, all
++                all other conflicting entries logged as errors.</para>
+ 
+                 <para>If the administrator wants to disable a
+                 configuration file supplied by the vendor, the
+@@ -93,10 +102,10 @@
+                 same filename.</para>
+ 
+                 <para>The configuration format is one line per path
+-                containing action, path, mode, ownership, age and argument
++                containing type, path, mode, ownership, age, and argument
+                 fields:</para>
+ 
+-                <programlisting>Type Path        Mode UID  GID  Age Argument
++                <programlisting>#Type Path        Mode UID  GID  Age Argument
+ d    /run/user   0755 root root 10d -
+ L    /tmp/foobar -    -    -    -   /dev/null</programlisting>
+ 
+@@ -109,12 +118,12 @@ L    /tmp/foobar -    -    -    -   /dev/null</programlisting>
+                         <variablelist>
+                                 <varlistentry>
+                                         <term><varname>f</varname></term>
+-                                        <listitem><para>Create a file if it does not exist yet (optionally writing a short string into it, if the argument parameter is passed)</para></listitem>
++                                        <listitem><para>Create a file if it does not exist yet. If the argument parameter is given, it will be written to the file.</para></listitem>
+                                 </varlistentry>
+ 
+                                 <varlistentry>
+                                         <term><varname>F</varname></term>
+-                                        <listitem><para>Create or truncate a file (optionally writing a short string into it, if the argument parameter is passed)</para></listitem>
++                                        <listitem><para>Create or truncate a file. If the argument parameter is given, it will be written to the file.</para></listitem>
+                                 </varlistentry>
+ 
+                                 <varlistentry>
+@@ -127,32 +136,32 @@ L    /tmp/foobar -    -    -    -   /dev/null</programlisting>
+ 
+                                 <varlistentry>
+                                         <term><varname>d</varname></term>
+-                                        <listitem><para>Create a directory if it does not exist yet</para></listitem>
++                                        <listitem><para>Create a directory if it does not exist yet.</para></listitem>
+                                 </varlistentry>
+ 
+                                 <varlistentry>
+                                         <term><varname>D</varname></term>
+-                                        <listitem><para>Create or empty a directory</para></listitem>
++                                        <listitem><para>Create or empty a directory.</para></listitem>
+                                 </varlistentry>
+ 
+                                 <varlistentry>
+                                         <term><varname>p</varname></term>
+-                                        <listitem><para>Create a named pipe (FIFO) if it does not exist yet</para></listitem>
++                                        <listitem><para>Create a named pipe (FIFO) if it does not exist yet.</para></listitem>
+                                 </varlistentry>
+ 
+                                 <varlistentry>
+                                         <term><varname>L</varname></term>
+-                                        <listitem><para>Create a symlink if it does not exist yet</para></listitem>
++                                        <listitem><para>Create a symlink if it does not exist yet.</para></listitem>
+                                 </varlistentry>
+ 
+                                 <varlistentry>
+                                         <term><varname>c</varname></term>
+-                                        <listitem><para>Create a character device node if it does not exist yet</para></listitem>
++                                        <listitem><para>Create a character device node if it does not exist yet.</para></listitem>
+                                 </varlistentry>
+ 
+                                 <varlistentry>
+                                         <term><varname>b</varname></term>
+-                                        <listitem><para>Create a block device node if it does not exist yet</para></listitem>
++                                        <listitem><para>Create a block device node if it does not exist yet.</para></listitem>
+                                 </varlistentry>
+ 
+                                 <varlistentry>
+@@ -174,11 +183,12 @@ L    /tmp/foobar -    -    -    -   /dev/null</programlisting>
+                                         as controlled with the Age
+                                         parameter. Note that lines of
+                                         this type do not influence the
+-                                        effect of r or R lines. Lines
+-                                        of this type accept
++                                        effect of <varname>r</varname>
++                                        or <varname>R</varname> lines.
++                                        Lines of this type accept
+                                         shell-style globs in place of
+-                                        normal path
+-                                        names.</para></listitem>
++                                        normal path names.
++                                        </para></listitem>
+                                 </varlistentry>
+ 
+                                 <varlistentry>
+@@ -187,28 +197,31 @@ L    /tmp/foobar -    -    -    -   /dev/null</programlisting>
+                                         during cleaning. Use this type
+                                         to exclude paths from clean-up
+                                         as controlled with the Age
+-                                        parameter. Unlike x this
++                                        parameter. Unlike
++                                        <varname>x</varname>, this
+                                         parameter will not exclude the
+-                                        content if path is a directory,
+-                                        but only directory itself.
+-                                        Note that lines of this type do
+-                                        not influence the effect of r
+-                                        or R lines. Lines of this type
+-                                        accept shell-style globs in
+-                                        place of normal path
+-                                        names.</para></listitem>
++                                        content if path is a
++                                        directory, but only directory
++                                        itself. Note that lines of
++                                        this type do not influence the
++                                        effect of <varname>r</varname>
++                                        or <varname>R</varname> lines.
++                                        Lines of this type accept
++                                        shell-style globs in place of
++                                        normal path names.
++                                        </para></listitem>
+                                 </varlistentry>
+ 
+                                 <varlistentry>
+                                         <term><varname>r</varname></term>
+                                         <listitem><para>Remove a file
+-                                        or directory if it
+-                                        exists. This may not be used
+-                                        to remove non-empty
+-                                        directories, use R for
+-                                        that. Lines of this type
+-                                        accept shell-style globs in
+-                                        place of normal path
++                                        or directory if it exists.
++                                        This may not be used to remove
++                                        non-empty directories, use
++                                        <varname>R</varname> for that.
++                                        Lines of this type accept
++                                        shell-style globs in place of
++                                        normal path
+                                         names.</para></listitem>
+                                 </varlistentry>
+ 
+@@ -308,11 +321,14 @@ L    /tmp/foobar -    -    -    -   /dev/null</programlisting>
+                         <para>The file access mode to use when
+                         creating this file or directory. If omitted or
+                         when set to -, the default is used: 0755 for
+-                        directories, 0644 for all other file
+-                        objects. For z, Z lines, if omitted or when set
+-                        to -, the file access mode will not be
+-                        modified. This parameter is ignored for x, r,
+-                        R, L lines.</para>
++                        directories, 0644 for all other file objects.
++                        For <varname>z</varname>, <varname>Z</varname>
++                        lines, if omitted or when set to
++                        <literal>-</literal>, the file access mode
++                        will not be modified. This parameter is
++                        ignored for <varname>x</varname>,
++                        <varname>r</varname>, <varname>R</varname>,
++                        <varname>L</varname> lines.</para>
+                 </refsect2>
+ 
+                 <refsect2>
+@@ -321,10 +337,15 @@ L    /tmp/foobar -    -    -    -   /dev/null</programlisting>
+                         <para>The user and group to use for this file
+                         or directory. This may either be a numeric
+                         user/group ID or a user or group name. If
+-                        omitted or when set to -, the default 0 (root)
+-                        is used. For z, Z lines, when omitted or when set to -,
+-                        the file ownership will not be modified.
+-                        These parameters are ignored for x, r, R, L lines.</para>
++                        omitted or when set to <literal>-</literal>,
++                        the default 0 (root) is used. For
++                        <varname>z</varname>, <varname>Z</varname>
++                        lines, when omitted or when set to -, the file
++                        ownership will not be modified. These
++                        parameters are ignored for
++                        <varname>x</varname>, <varname>r</varname>,
++                        <varname>R</varname>, <varname>L</varname>
++                        lines.</para>
+                 </refsect2>
+ 
+                 <refsect2>
+@@ -357,28 +378,37 @@ L    /tmp/foobar -    -    -    -   /dev/null</programlisting>
+                         <para>When the age is set to zero, the files are cleaned
+                         unconditionally.</para>
+ 
+-                        <para>The age field only applies to lines starting with
+-                        d, D and x. If omitted or set to -, no automatic clean-up
+-                        is done.</para>
++                        <para>The age field only applies to lines
++                        starting with <varname>d</varname>,
++                        <varname>D</varname>, and
++                        <varname>x</varname>. If omitted or set to
++                        <literal>-</literal>, no automatic clean-up is
++                        done.</para>
+ 
+                         <para>If the age field starts with a tilde
+-                        character (~), the clean-up is only applied to
+-                        files and directories one level inside the
+-                        directory specified, but not the files and
+-                        directories immediately inside it.</para>
++                        character <literal>~</literal>, the clean-up
++                        is only applied to files and directories one
++                        level inside the directory specified, but not
++                        the files and directories immediately inside
++                        it.</para>
+                 </refsect2>
+ 
+                 <refsect2>
+                         <title>Argument</title>
+ 
+-                        <para>For L lines determines the destination
+-                        path of the symlink. For c, b determines the
++                        <para>For <varname>L</varname> lines
++                        determines the destination path of the
++                        symlink. For <varname>c</varname>,
++                        <varname>b</varname> determines the
+                         major/minor of the device node, with major and
+-                        minor formatted as integers, separated by :,
+-                        e.g. "1:3". For f, F, w may be used to specify
+-                        a short string that is written to the file,
+-                        suffixed by a newline. Ignored for all other
+-                        lines.</para>
++                        minor formatted as integers, separated by
++                        <literal>:</literal>, e.g.
++                        <literal>1:3</literal>. For
++                        <varname>f</varname>, <varname>F</varname>,
++                        and <varname>w</varname> may be used to
++                        specify a short string that is written to the
++                        file, suffixed by a newline. Ignored for all
++                        other lines.</para>
+                 </refsect2>
+ 
+         </refsect1>
+diff --git a/units/systemd-tmpfiles-setup.service.in b/units/systemd-tmpfiles-setup.service.in
+index 6f98063..3405e28 100644
+--- a/units/systemd-tmpfiles-setup.service.in
++++ b/units/systemd-tmpfiles-setup.service.in
+@@ -14,6 +14,7 @@ Conflicts=shutdown.target
+ After=systemd-readahead-collect.service systemd-readahead-replay.service local-fs.target
+ Before=sysinit.target shutdown.target
+ ConditionDirectoryNotEmpty=|/usr/lib/tmpfiles.d
++ConditionDirectoryNotEmpty=|/lib/tmpfiles.d
+ ConditionDirectoryNotEmpty=|/usr/local/lib/tmpfiles.d
+ ConditionDirectoryNotEmpty=|/etc/tmpfiles.d
+ ConditionDirectoryNotEmpty=|/run/tmpfiles.d
diff --git a/SOURCES/0155-tmpfiles-introduce-the-concept-of-unsafe-operations.patch b/SOURCES/0155-tmpfiles-introduce-the-concept-of-unsafe-operations.patch
new file mode 100644
index 0000000..60be1d3
--- /dev/null
+++ b/SOURCES/0155-tmpfiles-introduce-the-concept-of-unsafe-operations.patch
@@ -0,0 +1,281 @@
+From 97784aaf5e005bf57c572a6f8ccae5baee59bd0f Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Fri, 20 Dec 2013 20:25:39 -0500
+Subject: [PATCH] tmpfiles: introduce the concept of unsafe operations
+
+Various operations done by systemd-tmpfiles may only be safely done at
+boot (e.g. removal of X lockfiles in /tmp, creation of /run/nologin).
+Other operations may be done at any point in time (e.g. setting the
+ownership on /{run,var}/log/journal). This distinction is largely
+orthogonal to the type of operation.
+
+A new switch --unsafe is added, and operations which should only be
+executed during bootup are marked with an exclamation mark in the
+configuration files. systemd-tmpfiles.service is modified to use this
+switch, and guards are added so it is hard to re-start it by mistake.
+
+If we install a new version of systemd, we actually want to enforce
+some changes to tmpfiles configuration immediately. This should now be
+possible to do safely, so distribution packages can be modified to
+execute the "safe" subset at package installation time.
+
+/run/nologin creation is split out into a separate service, to make it
+easy to override.
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1043212
+https://bugzilla.redhat.com/show_bug.cgi?id=1045849
+---
+ Makefile.am                             |  1 +
+ man/systemd-tmpfiles.xml                |  6 ++++++
+ man/tmpfiles.d.xml                      | 25 +++++++++++++++++++++++++
+ src/tmpfiles/tmpfiles.c                 | 22 +++++++++++++++++++---
+ tmpfiles.d/legacy.conf                  |  6 +++---
+ tmpfiles.d/systemd-nologin.conf         | 11 +++++++++++
+ tmpfiles.d/systemd.conf                 |  4 +---
+ tmpfiles.d/x11.conf                     |  2 +-
+ units/systemd-tmpfiles-setup.service.in |  6 ++++--
+ 9 files changed, 71 insertions(+), 12 deletions(-)
+ create mode 100644 tmpfiles.d/systemd-nologin.conf
+
+diff --git a/Makefile.am b/Makefile.am
+index 3103bac..f4867d9 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -1589,6 +1589,7 @@ nodist_systemunit_DATA += \
+ 
+ dist_tmpfiles_DATA = \
+ 	tmpfiles.d/systemd.conf \
++	tmpfiles.d/systemd-nologin.conf \
+ 	tmpfiles.d/tmp.conf \
+ 	tmpfiles.d/x11.conf
+ 
+diff --git a/man/systemd-tmpfiles.xml b/man/systemd-tmpfiles.xml
+index 91c0372..495247e 100644
+--- a/man/systemd-tmpfiles.xml
++++ b/man/systemd-tmpfiles.xml
+@@ -133,6 +133,12 @@
+                                 removed.</para></listitem>
+                         </varlistentry>
+                         <varlistentry>
++                                <term><option>--unsafe</option></term>
++                                <listitem><para>Also execute lines
++                                with an exclamation mark.
++                                </para></listitem>
++                        </varlistentry>
++                        <varlistentry>
+                                 <term><option>--prefix=PATH</option></term>
+                                 <listitem><para>Only apply rules that
+                                 apply to paths with the specified
+diff --git a/man/tmpfiles.d.xml b/man/tmpfiles.d.xml
+index a00637b..39aa68d 100644
+--- a/man/tmpfiles.d.xml
++++ b/man/tmpfiles.d.xml
+@@ -113,6 +113,9 @@ L    /tmp/foobar -    -    -    -   /dev/null</programlisting>
+                 <refsect2>
+                         <title>Type</title>
+ 
++                        <para>The type consists of a single letter and
++                        optionally an exclamation mark.</para>
++
+                         <para>The following line types are understood:</para>
+ 
+                         <variablelist>
+@@ -262,6 +265,28 @@ L    /tmp/foobar -    -    -    -   /dev/null</programlisting>
+                                         names.</para></listitem>
+                                 </varlistentry>
+                         </variablelist>
++
++                        <para>If the exclamation mark is used, this
++                        line is only safe of execute during boot, and
++                        can break a running system. Lines without the
++                        exclamation mark are presumed to be safe to
++                        execute at any time, e.g. on package upgrades.
++                        <command>systemd-tmpfiles</command> will
++                        execute line with an exclamation mark only if
++                        option <option>--unsafe</option> is given.
++                        </para>
++
++                        <para>For example:
++                        <programlisting>
++# Make sure these are created by default so that nobody else can
++d /tmp/.X11-unix 1777 root root 10d
++
++# Unlink the X11 lock files
++r! /tmp/.X[0-9]*-lock
++                        </programlisting>
++                        The second line in contrast to the first one
++                        would break a running system, and will only be
++                        executed with <option>--unsafe</option>.</para>
+                 </refsect2>
+ 
+                 <refsect2>
+diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c
+index 9a397af..1983717 100644
+--- a/src/tmpfiles/tmpfiles.c
++++ b/src/tmpfiles/tmpfiles.c
+@@ -106,6 +106,7 @@ static Set *unix_sockets = NULL;
+ static bool arg_create = false;
+ static bool arg_clean = false;
+ static bool arg_remove = false;
++static bool arg_unsafe = false;
+ 
+ static char **include_prefixes = NULL;
+ static char **exclude_prefixes = NULL;
+@@ -1073,7 +1074,7 @@ static int parse_line(const char *fname, unsigned line, const char *buffer) {
+         _cleanup_item_free_ Item *i = NULL;
+         Item *existing;
+         _cleanup_free_ char
+-                *mode = NULL, *user = NULL, *group = NULL, *age = NULL, *path = NULL;
++                *action = NULL, *mode = NULL, *user = NULL, *group = NULL, *age = NULL, *path = NULL;
+         char type;
+         Hashmap *h;
+         int r, n = -1;
+@@ -1083,8 +1084,8 @@ static int parse_line(const char *fname, unsigned line, const char *buffer) {
+         assert(buffer);
+ 
+         r = sscanf(buffer,
+-                   "%c %ms %ms %ms %ms %ms %n",
+-                   &type,
++                   "%ms %ms %ms %ms %ms %ms %n",
++                   &action,
+                    &path,
+                    &mode,
+                    &user,
+@@ -1096,6 +1097,14 @@ static int parse_line(const char *fname, unsigned line, const char *buffer) {
+                 return -EIO;
+         }
+ 
++        if (strlen(action) > 2 || (strlen(action) > 1 && action[1] != '!')) {
++                log_error("[%s:%u] Unknown modifier '%s'", fname, line, action);
++                return -EINVAL;
++        } else if (strlen(action) > 1 && !arg_unsafe)
++                return 0;
++
++        type = action[0];
++
+         i = new0(Item, 1);
+         if (!i)
+                 return log_oom();
+@@ -1266,6 +1275,7 @@ static int help(void) {
+                "     --create               Create marked files/directories\n"
+                "     --clean                Clean up marked directories\n"
+                "     --remove               Remove marked files/directories\n"
++               "     --unsafe               Execute actions only safe at boot\n"
+                "     --prefix=PATH          Only apply rules that apply to paths with the specified prefix\n"
+                "     --exclude-prefix=PATH  Ignore rules that apply to paths with the specified prefix\n",
+                program_invocation_short_name);
+@@ -1279,6 +1289,7 @@ static int parse_argv(int argc, char *argv[]) {
+                 ARG_CREATE,
+                 ARG_CLEAN,
+                 ARG_REMOVE,
++                ARG_UNSAFE,
+                 ARG_PREFIX,
+                 ARG_EXCLUDE_PREFIX,
+         };
+@@ -1288,6 +1299,7 @@ static int parse_argv(int argc, char *argv[]) {
+                 { "create",         no_argument,         NULL, ARG_CREATE         },
+                 { "clean",          no_argument,         NULL, ARG_CLEAN          },
+                 { "remove",         no_argument,         NULL, ARG_REMOVE         },
++                { "unsafe",         no_argument,         NULL, ARG_UNSAFE         },
+                 { "prefix",         required_argument,   NULL, ARG_PREFIX         },
+                 { "exclude-prefix", required_argument,   NULL, ARG_EXCLUDE_PREFIX },
+                 { NULL,             0,                   NULL, 0                  }
+@@ -1318,6 +1330,10 @@ static int parse_argv(int argc, char *argv[]) {
+                         arg_remove = true;
+                         break;
+ 
++                case ARG_UNSAFE:
++                        arg_unsafe = true;
++                        break;
++
+                 case ARG_PREFIX:
+                         if (strv_extend(&include_prefixes, optarg) < 0)
+                                 return log_oom();
+diff --git a/tmpfiles.d/legacy.conf b/tmpfiles.d/legacy.conf
+index 3fff347..a165687 100644
+--- a/tmpfiles.d/legacy.conf
++++ b/tmpfiles.d/legacy.conf
+@@ -29,6 +29,6 @@ d /run/lock/lockdev 0775 root lock -
+ # kernel command line options 'fsck.mode=force', 'fsck.mode=skip' and
+ # 'quotacheck.mode=force'
+ 
+-r /forcefsck
+-r /fastboot
+-r /forcequotacheck
++r! /forcefsck
++r! /fastboot
++r! /forcequotacheck
+diff --git a/tmpfiles.d/systemd-nologin.conf b/tmpfiles.d/systemd-nologin.conf
+new file mode 100644
+index 0000000..d61232b
+--- /dev/null
++++ b/tmpfiles.d/systemd-nologin.conf
+@@ -0,0 +1,11 @@
++#  This file is part of systemd.
++#
++#  systemd is free software; you can redistribute it and/or modify it
++#  under the terms of the GNU Lesser General Public License as published by
++#  the Free Software Foundation; either version 2.1 of the License, or
++#  (at your option) any later version.
++
++# See tmpfiles.d(5) and systemd-forbid-user-logins.service(5).
++# This file has special suffix so it is not run by mistake.
++
++F! /run/nologin 0644 - - - "System is booting up. See pam_nologin(8)"
+diff --git a/tmpfiles.d/systemd.conf b/tmpfiles.d/systemd.conf
+index a05c657..7c6d6b9 100644
+--- a/tmpfiles.d/systemd.conf
++++ b/tmpfiles.d/systemd.conf
+@@ -8,7 +8,7 @@
+ # See tmpfiles.d(5) for details
+ 
+ d /run/user 0755 root root ~10d
+-F /run/utmp 0664 root utmp -
++F! /run/utmp 0664 root utmp -
+ 
+ f /var/log/wtmp 0664 root utmp -
+ f /var/log/btmp 0600 root utmp -
+@@ -22,8 +22,6 @@ d /run/systemd/users 0755 root root -
+ d /run/systemd/machines 0755 root root -
+ d /run/systemd/shutdown 0755 root root -
+ 
+-F /run/nologin 0644 - - - "System is booting up. See pam_nologin(8)"
+-
+ m /var/log/journal 2755 root systemd-journal - -
+ m /var/log/journal/%m 2755 root systemd-journal - -
+ m /run/log/journal 2755 root systemd-journal - -
+diff --git a/tmpfiles.d/x11.conf b/tmpfiles.d/x11.conf
+index ece6a5c..4c96a54 100644
+--- a/tmpfiles.d/x11.conf
++++ b/tmpfiles.d/x11.conf
+@@ -15,4 +15,4 @@ d /tmp/.font-unix 1777 root root 10d
+ d /tmp/.Test-unix 1777 root root 10d
+ 
+ # Unlink the X11 lock files
+-r /tmp/.X[0-9]*-lock
++r! /tmp/.X[0-9]*-lock
+diff --git a/units/systemd-tmpfiles-setup.service.in b/units/systemd-tmpfiles-setup.service.in
+index 3405e28..c2dcae0 100644
+--- a/units/systemd-tmpfiles-setup.service.in
++++ b/units/systemd-tmpfiles-setup.service.in
+@@ -6,7 +6,7 @@
+ #  (at your option) any later version.
+ 
+ [Unit]
+-Description=Recreate Volatile Files and Directories
++Description=Create Volatile Files and Directories
+ Documentation=man:tmpfiles.d(5) man:systemd-tmpfiles(8)
+ DefaultDependencies=no
+ Wants=local-fs.target
+@@ -18,8 +18,10 @@ ConditionDirectoryNotEmpty=|/lib/tmpfiles.d
+ ConditionDirectoryNotEmpty=|/usr/local/lib/tmpfiles.d
+ ConditionDirectoryNotEmpty=|/etc/tmpfiles.d
+ ConditionDirectoryNotEmpty=|/run/tmpfiles.d
++RefuseManualStart=yes
++RefuseManualStop=yes
+ 
+ [Service]
+ Type=oneshot
+ RemainAfterExit=yes
+-ExecStart=@rootbindir@/systemd-tmpfiles --create --remove --exclude-prefix=/dev
++ExecStart=@rootbindir@/systemd-tmpfiles --create --remove --unsafe --exclude-prefix=/dev
diff --git a/SOURCES/0156-sleep-config-fix-useless-check-for-swapfile-type.patch b/SOURCES/0156-sleep-config-fix-useless-check-for-swapfile-type.patch
new file mode 100644
index 0000000..9e5e16a
--- /dev/null
+++ b/SOURCES/0156-sleep-config-fix-useless-check-for-swapfile-type.patch
@@ -0,0 +1,43 @@
+From 4a57577928328ccd3f695a2723872ca9f9d911fb Mon Sep 17 00:00:00 2001
+From: Dave Reisner <dreisner@archlinux.org>
+Date: Tue, 24 Dec 2013 16:42:06 -0500
+Subject: [PATCH] sleep-config: fix useless check for swapfile type
+
+Since 0c6f1f4ea49 the check was useless, because the kernel will
+ever only write "partition" or "file" there.
+
+OTOH, it is possible that "\\040(deleted)" (escaped " (deleted)")
+will be added for removed files. This should not happen, so add
+a warning to detect those cases.
+---
+ src/shared/sleep-config.c | 10 +++-------
+ 1 file changed, 3 insertions(+), 7 deletions(-)
+
+diff --git a/src/shared/sleep-config.c b/src/shared/sleep-config.c
+index 2bb0493..d76e3ad 100644
+--- a/src/shared/sleep-config.c
++++ b/src/shared/sleep-config.c
+@@ -183,7 +183,7 @@ static int hibernation_partition_size(size_t *size, size_t *used) {
+         (void) fscanf(f, "%*s %*s %*s %*s %*s\n");
+ 
+         for (i = 1;; i++) {
+-                _cleanup_free_ char *dev = NULL, *d = NULL, *type = NULL;
++                _cleanup_free_ char *dev = NULL, *type = NULL;
+                 size_t size_field, used_field;
+                 int k;
+ 
+@@ -202,12 +202,8 @@ static int hibernation_partition_size(size_t *size, size_t *used) {
+                         continue;
+                 }
+ 
+-                d = cunescape(dev);
+-                if (!d)
+-                        return -ENOMEM;
+-
+-                if (!streq(type, "partition") && !streq(type, "file")) {
+-                        log_debug("Partition %s has type %s, ignoring.", d, type);
++                if (streq(type, "partition") && endswith(dev, "\\040(deleted)")) {
++                        log_warning("Ignoring deleted swapfile '%s'.", dev);
+                         continue;
+                 }
+ 
diff --git a/SOURCES/0157-man-resolve-word-omissions.patch b/SOURCES/0157-man-resolve-word-omissions.patch
new file mode 100644
index 0000000..3e2c3c8
--- /dev/null
+++ b/SOURCES/0157-man-resolve-word-omissions.patch
@@ -0,0 +1,725 @@
+From 36cd86e0d91fdc201b5e5bb2862cf12606da6fdf Mon Sep 17 00:00:00 2001
+From: Jan Engelhardt <jengelh@inai.de>
+Date: Thu, 26 Dec 2013 02:47:43 +0100
+Subject: [PATCH] man: resolve word omissions
+
+This is a recurring submission and includes corrections to:
+word omissions and word class choice.
+
+Conflicts:
+	man/sd_bus_message_get_cookie.xml
+	man/sd_bus_request_name.xml
+	man/sd_watchdog_enabled.xml
+	man/systemd-getty-generator.xml
+---
+ man/binfmt.d.xml                            | 4 ++--
+ man/journald.conf.xml                       | 2 +-
+ man/loginctl.xml                            | 2 +-
+ man/sd-daemon.xml                           | 2 +-
+ man/sd-journal.xml                          | 2 +-
+ man/sd-login.xml                            | 4 ++--
+ man/sd_booted.xml                           | 2 +-
+ man/sd_get_seats.xml                        | 8 ++++----
+ man/sd_id128_get_machine.xml                | 2 +-
+ man/sd_id128_randomize.xml                  | 2 +-
+ man/sd_id128_to_string.xml                  | 2 +-
+ man/sd_is_fifo.xml                          | 2 +-
+ man/sd_journal_add_match.xml                | 2 +-
+ man/sd_journal_get_catalog.xml              | 2 +-
+ man/sd_journal_get_cursor.xml               | 2 +-
+ man/sd_journal_get_cutoff_realtime_usec.xml | 2 +-
+ man/sd_journal_get_data.xml                 | 2 +-
+ man/sd_journal_get_fd.xml                   | 2 +-
+ man/sd_journal_get_realtime_usec.xml        | 2 +-
+ man/sd_journal_get_usage.xml                | 2 +-
+ man/sd_journal_next.xml                     | 6 +++---
+ man/sd_journal_print.xml                    | 2 +-
+ man/sd_journal_query_unique.xml             | 2 +-
+ man/sd_journal_seek_head.xml                | 4 ++--
+ man/sd_journal_stream_fd.xml                | 2 +-
+ man/sd_listen_fds.xml                       | 4 ++--
+ man/sd_login_monitor_new.xml                | 2 +-
+ man/sd_notify.xml                           | 4 ++--
+ man/sd_pid_get_session.xml                  | 2 +-
+ man/sd_seat_get_active.xml                  | 2 +-
+ man/sd_session_is_active.xml                | 2 +-
+ man/sd_uid_get_state.xml                    | 4 ++--
+ man/sysctl.d.xml                            | 4 ++--
+ man/systemctl.xml                           | 4 ++--
+ man/systemd-getty-generator.xml             | 8 ++++----
+ man/systemd-halt.service.xml                | 2 +-
+ man/systemd-machine-id-setup.xml            | 2 +-
+ man/systemd.preset.xml                      | 4 ++--
+ man/systemd.service.xml                     | 2 +-
+ man/systemd.socket.xml                      | 4 ++--
+ man/systemd.unit.xml                        | 4 ++--
+ man/tmpfiles.d.xml                          | 4 ++--
+ 42 files changed, 62 insertions(+), 62 deletions(-)
+
+diff --git a/man/binfmt.d.xml b/man/binfmt.d.xml
+index 94f97e0..6f8668b 100644
+--- a/man/binfmt.d.xml
++++ b/man/binfmt.d.xml
+@@ -88,8 +88,8 @@
+                 administrator, who may use this logic to override the
+                 configuration files installed from vendor
+                 packages. All files are sorted by their filename in
+-                lexicographic order, regardless in which of the
+-                directories they reside. If multiple files specify
++                lexicographic order, regardless of which of the
++                directories they reside in. If multiple files specify
+                 the same binary type name, the entry in the file with
+                 the lexicographically latest name will be applied.</para>
+ 
+diff --git a/man/journald.conf.xml b/man/journald.conf.xml
+index 8e642a3..b362c5d 100644
+--- a/man/journald.conf.xml
++++ b/man/journald.conf.xml
+@@ -155,7 +155,7 @@
+                                 into the system journal. If
+                                 <literal>uid</literal>, any user ID
+                                 will get his own journal files
+-                                regardless whether it belongs to a
++                                regardless of whether it belongs to a
+                                 system service or refers to a real
+                                 logged in user. If
+                                 <literal>none</literal>, journal files
+diff --git a/man/loginctl.xml b/man/loginctl.xml
+index 1b54ff7..133d6cf 100644
+--- a/man/loginctl.xml
++++ b/man/loginctl.xml
+@@ -109,7 +109,7 @@
+ 
+                                 <listitem><para>When showing
+                                 session/user/seat properties, show all
+-                                properties regardless whether they are
++                                properties regardless of whether they are
+                                 set or not.</para></listitem>
+                         </varlistentry>
+ 
+diff --git a/man/sd-daemon.xml b/man/sd-daemon.xml
+index 6e804e1..84c1afa 100644
+--- a/man/sd-daemon.xml
++++ b/man/sd-daemon.xml
+@@ -144,7 +144,7 @@
+                 <para>These APIs are implemented in the reference
+                 implementation's <filename>sd-daemon.c</filename> and
+                 <filename>sd-daemon.h</filename> files. These
+-                interfaces are available as shared library, which can
++                interfaces are available as a shared library, which can
+                 be compiled and linked to with the
+                 <constant>libsystemd-daemon</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+                 file. Alternatively, applications consuming these APIs
+diff --git a/man/sd-journal.xml b/man/sd-journal.xml
+index 6d39611..832d584 100644
+--- a/man/sd-journal.xml
++++ b/man/sd-journal.xml
+@@ -98,7 +98,7 @@
+         <refsect1>
+                 <title>Notes</title>
+ 
+-                <para>These APIs are implemented as shared library,
++                <para>These APIs are implemented as a shared library,
+                 which can be compiled and linked to with the
+                 <constant>libsystemd-journal</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+                 file.</para>
+diff --git a/man/sd-login.xml b/man/sd-login.xml
+index 251b35b..1d47b29 100644
+--- a/man/sd-login.xml
++++ b/man/sd-login.xml
+@@ -99,7 +99,7 @@
+                 caller with the libc
+                 <citerefentry><refentrytitle>free</refentrytitle><manvolnum>3</manvolnum></citerefentry>
+                 call after use, including the strings referenced
+-                therein. Similar, individual strings returned need to
++                therein. Similarly, individual strings returned need to
+                 be freed, as well.</para>
+ 
+                 <para>As a special exception, instead of an empty
+@@ -120,7 +120,7 @@
+         <refsect1>
+                 <title>Notes</title>
+ 
+-                <para>These APIs are implemented as shared library,
++                <para>These APIs are implemented as a shared library,
+                 which can be compiled and linked to with the
+                 <constant>libsystemd-login</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+                 file.</para>
+diff --git a/man/sd_booted.xml b/man/sd_booted.xml
+index 64c0cd9..6f8cc95 100644
+--- a/man/sd_booted.xml
++++ b/man/sd_booted.xml
+@@ -100,7 +100,7 @@
+                 in the reference implementation's
+                 <filename>sd-daemon.c</filename> and
+                 <filename>sd-daemon.h</filename> files. These
+-                interfaces are available as shared library, which can
++                interfaces are available as a shared library, which can
+                 be compiled and linked to with the
+                 <constant>libsystemd-daemon</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+                 file. Alternatively, applications consuming these APIs
+diff --git a/man/sd_get_seats.xml b/man/sd_get_seats.xml
+index 8254b7c..1e55af3 100644
+--- a/man/sd_get_seats.xml
++++ b/man/sd_get_seats.xml
+@@ -90,13 +90,13 @@
+                 <constant>NULL</constant> may be returned and should be considered
+                 equivalent to an empty array.</para>
+ 
+-                <para>Similar, <function>sd_get_sessions()</function> may
++                <para>Similarly, <function>sd_get_sessions()</function> may
+                 be used to determine all current login sessions.</para>
+ 
+-                <para>Similar, <function>sd_get_uids()</function> may
++                <para>Similarly, <function>sd_get_uids()</function> may
+                 be used to determine all Unix users who currently have login sessions.</para>
+ 
+-                <para>Similar,
++                <para>Similarly,
+                 <function>sd_get_machine_names()</function> may be
+                 used to determine all current virtual machines and
+                 containers on the system.</para>
+@@ -122,7 +122,7 @@
+                 <function>sd_get_sessions()</function>,
+                 <function>sd_get_uids()</function> and
+                 <function>sd_get_machine_names()</function> interfaces
+-                are available as shared library, which can be compiled
++                are available as a shared library, which can be compiled
+                 and linked to with the
+                 <constant>libsystemd-login</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+                 file.</para>
+diff --git a/man/sd_id128_get_machine.xml b/man/sd_id128_get_machine.xml
+index 6bee7ad..084fda2 100644
+--- a/man/sd_id128_get_machine.xml
++++ b/man/sd_id128_get_machine.xml
+@@ -116,7 +116,7 @@
+ 
+                 <para>The <function>sd_id128_get_machine()</function>
+                 and <function>sd_id128_get_boot()</function>
+-                interfaces are available as shared library, which can
++                interfaces are available as a shared library, which can
+                 be compiled and linked to with the
+                 <literal>libsystemd-id128</literal> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+                 file.</para>
+diff --git a/man/sd_id128_randomize.xml b/man/sd_id128_randomize.xml
+index 0b95803..100de16 100644
+--- a/man/sd_id128_randomize.xml
++++ b/man/sd_id128_randomize.xml
+@@ -95,7 +95,7 @@
+                 <title>Notes</title>
+ 
+                 <para>The <function>sd_id128_randomize()</function> interface
+-                is available as shared library, which can be compiled
++                is available as a shared library, which can be compiled
+                 and linked to with the
+                 <literal>libsystemd-id128</literal> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+                 file.</para>
+diff --git a/man/sd_id128_to_string.xml b/man/sd_id128_to_string.xml
+index 71cf82a..eae2915 100644
+--- a/man/sd_id128_to_string.xml
++++ b/man/sd_id128_to_string.xml
+@@ -118,7 +118,7 @@
+ 
+                 <para>The <function>sd_id128_to_string()</function>
+                 and <function>sd_id128_from_string()</function> interfaces are
+-                available as shared library, which can be compiled and
++                available as a shared library, which can be compiled and
+                 linked to with the <literal>libsystemd-id128</literal> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+                 file.</para>
+         </refsect1>
+diff --git a/man/sd_is_fifo.xml b/man/sd_is_fifo.xml
+index 4d9cd79..5e79453 100644
+--- a/man/sd_is_fifo.xml
++++ b/man/sd_is_fifo.xml
+@@ -208,7 +208,7 @@
+                 related functions are implemented in the reference
+                 implementation's <filename>sd-daemon.c</filename> and
+                 <filename>sd-daemon.h</filename> files. These
+-                interfaces are available as shared library, which can
++                interfaces are available as a shared library, which can
+                 be compiled and linked to with the
+                 <constant>libsystemd-daemon</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+                 file. Alternatively, applications consuming these APIs
+diff --git a/man/sd_journal_add_match.xml b/man/sd_journal_add_match.xml
+index b6c7b06..6568234 100644
+--- a/man/sd_journal_add_match.xml
++++ b/man/sd_journal_add_match.xml
+@@ -174,7 +174,7 @@
+                 <function>sd_journal_add_disjunction()</function>,
+                 <function>sd_journal_add_conjunction()</function> and
+                 <function>sd_journal_flush_matches()</function>
+-                interfaces are available as shared library, which can
++                interfaces are available as a shared library, which can
+                 be compiled and linked to with the
+                 <constant>libsystemd-journal</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+                 file.</para>
+diff --git a/man/sd_journal_get_catalog.xml b/man/sd_journal_get_catalog.xml
+index 4a7e0a1..ecd329f 100644
+--- a/man/sd_journal_get_catalog.xml
++++ b/man/sd_journal_get_catalog.xml
+@@ -118,7 +118,7 @@
+ 
+                 <para>The <function>sd_journal_get_catalog()</function> and
+                 <function>sd_journal_get_catalog_for_message_id()</function>
+-                interfaces are available as shared library, which can
++                interfaces are available as a shared library, which can
+                 be compiled and linked to with the
+                 <constant>libsystemd-journal</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+                 file.</para>
+diff --git a/man/sd_journal_get_cursor.xml b/man/sd_journal_get_cursor.xml
+index 4cee7d5..046c154 100644
+--- a/man/sd_journal_get_cursor.xml
++++ b/man/sd_journal_get_cursor.xml
+@@ -130,7 +130,7 @@
+ 
+                 <para>The <function>sd_journal_get_cursor()</function>
+                 and <function>sd_journal_test_cursor()</function>
+-                interfaces are available as shared library, which can
++                interfaces are available as a shared library, which can
+                 be compiled and linked to with the
+                 <constant>libsystemd-journal</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+                 file.</para>
+diff --git a/man/sd_journal_get_cutoff_realtime_usec.xml b/man/sd_journal_get_cutoff_realtime_usec.xml
+index 9bf8220..287c1c5 100644
+--- a/man/sd_journal_get_cutoff_realtime_usec.xml
++++ b/man/sd_journal_get_cutoff_realtime_usec.xml
+@@ -122,7 +122,7 @@
+                 <function>sd_journal_get_cutoff_realtime_usec()</function>
+                 and
+                 <function>sd_journal_get_cutoff_monotonic_usec()</function>
+-                interfaces are available as shared library, which can
++                interfaces are available as a shared library, which can
+                 be compiled and linked to with the
+                 <constant>libsystemd-journal</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+                 file.</para>
+diff --git a/man/sd_journal_get_data.xml b/man/sd_journal_get_data.xml
+index 0e1111e..6ed52b5 100644
+--- a/man/sd_journal_get_data.xml
++++ b/man/sd_journal_get_data.xml
+@@ -203,7 +203,7 @@
+                 <function>sd_journal_set_data_threshold()</function>
+                 and
+                 <function>sd_journal_get_data_threshold()</function>
+-                interfaces are available as shared library, which can
++                interfaces are available as a shared library, which can
+                 be compiled and linked to with the
+                 <constant>libsystemd-journal</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+                 file.</para>
+diff --git a/man/sd_journal_get_fd.xml b/man/sd_journal_get_fd.xml
+index 764f716..4b36f97 100644
+--- a/man/sd_journal_get_fd.xml
++++ b/man/sd_journal_get_fd.xml
+@@ -253,7 +253,7 @@ else {
+                 <function>sd_journal_reliable_fd()</function>,
+                 <function>sd_journal_process()</function> and
+                 <function>sd_journal_wait()</function> interfaces are
+-                available as shared library, which can be compiled and
++                available as a shared library, which can be compiled and
+                 linked to with the
+                 <constant>libsystemd-journal</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+                 file.</para>
+diff --git a/man/sd_journal_get_realtime_usec.xml b/man/sd_journal_get_realtime_usec.xml
+index 8870c29..bf1aa50 100644
+--- a/man/sd_journal_get_realtime_usec.xml
++++ b/man/sd_journal_get_realtime_usec.xml
+@@ -122,7 +122,7 @@
+                 <function>sd_journal_get_realtime_usec()</function>
+                 and
+                 <function>sd_journal_get_monotonic_usec()</function>
+-                interfaces are available as shared library, which can
++                interfaces are available as a shared library, which can
+                 be compiled and linked to with the
+                 <constant>libsystemd-journal</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+                 file.</para>
+diff --git a/man/sd_journal_get_usage.xml b/man/sd_journal_get_usage.xml
+index 180d8b2..08d8640 100644
+--- a/man/sd_journal_get_usage.xml
++++ b/man/sd_journal_get_usage.xml
+@@ -84,7 +84,7 @@
+                 <title>Notes</title>
+ 
+                 <para>The <function>sd_journal_get_usage()</function>
+-                interface is available as shared library, which can be
++                interface is available as a shared library, which can be
+                 compiled and linked to with the
+                 <constant>libsystemd-journal</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+                 file.</para>
+diff --git a/man/sd_journal_next.xml b/man/sd_journal_next.xml
+index 6e437d1..1409b0d 100644
+--- a/man/sd_journal_next.xml
++++ b/man/sd_journal_next.xml
+@@ -102,7 +102,7 @@
+                 functions such as
+                 <citerefentry><refentrytitle>sd_journal_get_data</refentrytitle><manvolnum>3</manvolnum></citerefentry>.</para>
+ 
+-                <para>Similar, <function>sd_journal_previous()</function> sets
++                <para>Similarly, <function>sd_journal_previous()</function> sets
+                 the read pointer back one entry.</para>
+ 
+                 <para><function>sd_journal_next_skip()</function> and
+@@ -129,7 +129,7 @@
+                 <citerefentry><refentrytitle>sd_journal_seek_head</refentrytitle><manvolnum>3</manvolnum></citerefentry>
+                 and <function>sd_journal_next()</function> in order to
+                 make iterating through the journal easier. See below
+-                for an example. Similar,
++                for an example. Similarly,
+                 <function>SD_JOURNAL_FOREACH_BACKWARDS()</function>
+                 may be used for iterating the journal in reverse
+                 order.</para>
+@@ -156,7 +156,7 @@
+                 <para>The <function>sd_journal_next()</function>, <function>sd_journal_previous()</function>,
+                 <function>sd_journal_next_skip()</function> and
+                 <function>sd_journal_previous_skip()</function> interfaces are
+-                available as shared library, which can be compiled and
++                available as a shared library, which can be compiled and
+                 linked to with the
+                 <constant>libsystemd-journal</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+                 file.</para>
+diff --git a/man/sd_journal_print.xml b/man/sd_journal_print.xml
+index e61a648..a716cc3 100644
+--- a/man/sd_journal_print.xml
++++ b/man/sd_journal_print.xml
+@@ -227,7 +227,7 @@ sd_journal_send("MESSAGE=Hello World, this is PID %lu!", (unsigned long) getpid(
+                 <function>sd_journal_printv()</function>,
+                 <function>sd_journal_send()</function> and
+                 <function>sd_journal_sendv()</function> interfaces
+-                are available as shared library, which can be compiled
++                are available as a shared library, which can be compiled
+                 and linked to with the
+                 <constant>libsystemd-journal</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+                 file.</para>
+diff --git a/man/sd_journal_query_unique.xml b/man/sd_journal_query_unique.xml
+index f5d9d2b..f0b9204 100644
+--- a/man/sd_journal_query_unique.xml
++++ b/man/sd_journal_query_unique.xml
+@@ -156,7 +156,7 @@
+                 <para>The <function>sd_journal_query_unique()</function>,
+                 <function>sd_journal_enumerate_unique()</function> and
+                 <function>sd_journal_restart_unique()</function>
+-                interfaces are available as shared library, which can
++                interfaces are available as a shared library, which can
+                 be compiled and linked to with the
+                 <constant>libsystemd-journal</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+                 file.</para>
+diff --git a/man/sd_journal_seek_head.xml b/man/sd_journal_seek_head.xml
+index 03de30a..939f0b1 100644
+--- a/man/sd_journal_seek_head.xml
++++ b/man/sd_journal_seek_head.xml
+@@ -94,7 +94,7 @@
+                 seeks to the beginning of the journal, i.e. the oldest
+                 available entry.</para>
+ 
+-                <para>Similar,
++                <para>Similarly,
+                 <function>sd_journal_seek_tail()</function> may be
+                 used to seek to the end of the journal, i.e. the most
+                 recent available entry.</para>
+@@ -156,7 +156,7 @@
+                 <function>sd_journal_seek_monotonic_usec()</function>,
+                 <function>sd_journal_seek_realtime_usec()</function>,
+                 and <function>sd_journal_seek_cursor()</function>
+-                interfaces are available as shared library, which can
++                interfaces are available as a shared library, which can
+                 be compiled and linked to with the
+                 <constant>libsystemd-journal</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+                 file.</para>
+diff --git a/man/sd_journal_stream_fd.xml b/man/sd_journal_stream_fd.xml
+index 4bd0abc..a8dc8fd 100644
+--- a/man/sd_journal_stream_fd.xml
++++ b/man/sd_journal_stream_fd.xml
+@@ -112,7 +112,7 @@
+                 <title>Notes</title>
+ 
+                 <para>The <function>sd_journal_stream_fd()</function>
+-                interface is available as shared library, which can
++                interface is available as a shared library, which can
+                 be compiled and linked to with the
+                 <constant>libsystemd-journal</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+                 file.</para>
+diff --git a/man/sd_listen_fds.xml b/man/sd_listen_fds.xml
+index 240300d..aaabdbf 100644
+--- a/man/sd_listen_fds.xml
++++ b/man/sd_listen_fds.xml
+@@ -73,7 +73,7 @@
+                 parameter is non-zero,
+                 <function>sd_listen_fds()</function> will unset the
+                 <varname>$LISTEN_FDS</varname>/<varname>$LISTEN_PID</varname>
+-                environment variables before returning (regardless
++                environment variables before returning (regardless of
+                 whether the function call itself succeeded or
+                 not). Further calls to
+                 <function>sd_listen_fds()</function> will then fail,
+@@ -149,7 +149,7 @@
+                 implemented in the reference implementation's
+                 <filename>sd-daemon.c</filename> and
+                 <filename>sd-daemon.h</filename> files. These
+-                interfaces are available as shared library, which can
++                interfaces are available as a shared library, which can
+                 be compiled and linked to with the
+                 <constant>libsystemd-daemon</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+                 file. Alternatively, applications consuming these APIs
+diff --git a/man/sd_login_monitor_new.xml b/man/sd_login_monitor_new.xml
+index 909a3d9..f439d3e 100644
+--- a/man/sd_login_monitor_new.xml
++++ b/man/sd_login_monitor_new.xml
+@@ -224,7 +224,7 @@ else {
+                 <function>sd_login_monitor_get_fd()</function>,
+                 <function>sd_login_monitor_get_events()</function> and
+                 <function>sd_login_monitor_get_timeout()</function>
+-                interfaces are available as shared library, which can
++                interfaces are available as a shared library, which can
+                 be compiled and linked to with the
+                 <constant>libsystemd-login</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+                 file.</para>
+diff --git a/man/sd_notify.xml b/man/sd_notify.xml
+index 55965ff..e078140 100644
+--- a/man/sd_notify.xml
++++ b/man/sd_notify.xml
+@@ -79,7 +79,7 @@
+                 <para>If the <parameter>unset_environment</parameter>
+                 parameter is non-zero, <function>sd_notify()</function>
+                 will unset the <varname>$NOTIFY_SOCKET</varname>
+-                environment variable before returning (regardless
++                environment variable before returning (regardless of
+                 whether the function call itself succeeded or
+                 not). Further calls to
+                 <function>sd_notify()</function> will then fail, but
+@@ -236,7 +236,7 @@
+                 the reference implementation's
+                 <filename>sd-daemon.c</filename> and
+                 <filename>sd-daemon.h</filename> files. These
+-                interfaces are available as shared library, which can
++                interfaces are available as a shared library, which can
+                 be compiled and linked to with the
+                 <constant>libsystemd-daemon</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+                 file. Alternatively, applications consuming these APIs
+diff --git a/man/sd_pid_get_session.xml b/man/sd_pid_get_session.xml
+index e5c7709..ff5905b 100644
+--- a/man/sd_pid_get_session.xml
++++ b/man/sd_pid_get_session.xml
+@@ -186,7 +186,7 @@
+                 <function>sd_pid_get_owner_uid()</function>,
+                 <function>sd_pid_get_machine_name()</function> and
+                 <function>sd_pid_get_slice()</function> interfaces are
+-                available as shared library, which can be compiled and
++                available as a shared library, which can be compiled and
+                 linked to with the
+                 <constant>libsystemd-login</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+                 file.</para>
+diff --git a/man/sd_seat_get_active.xml b/man/sd_seat_get_active.xml
+index cd87696..23d582d 100644
+--- a/man/sd_seat_get_active.xml
++++ b/man/sd_seat_get_active.xml
+@@ -164,7 +164,7 @@
+                 <function>sd_seat_can_multi_session()</function>,
+                 <function>sd_seat_can_tty()</function> and
+                 <function>sd_seat_can_grapical()</function> interfaces
+-                are available as shared library, which can be compiled
++                are available as a shared library, which can be compiled
+                 and linked to with the
+                 <constant>libsystemd-login</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+                 file.</para>
+diff --git a/man/sd_session_is_active.xml b/man/sd_session_is_active.xml
+index 293ce71..06891f7 100644
+--- a/man/sd_session_is_active.xml
++++ b/man/sd_session_is_active.xml
+@@ -252,7 +252,7 @@
+                 <function>sd_session_get_class()</function>,
+                 <function>sd_session_get_display()</function> and
+                 <function>sd_session_get_tty()</function>
+-                interfaces are available as shared library, which can
++                interfaces are available as a shared library, which can
+                 be compiled and linked to with the
+                 <constant>libsystemd-login</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+                 file.</para>
+diff --git a/man/sd_uid_get_state.xml b/man/sd_uid_get_state.xml
+index d4d23f4..0faa765 100644
+--- a/man/sd_uid_get_state.xml
++++ b/man/sd_uid_get_state.xml
+@@ -139,7 +139,7 @@
+                 be returned and should be considered equivalent to an
+                 empty array.</para>
+ 
+-                <para>Similar, <function>sd_uid_get_seats()</function>
++                <para>Similarly, <function>sd_uid_get_seats()</function>
+                 may be used to determine the list of seats on which
+                 the user currently has sessions. Similar semantics
+                 apply, however note that the user may have
+@@ -171,7 +171,7 @@
+                 <function>sd_uid_is_on_seat()</function>,
+                 <function>sd_uid_get_sessions()</function>, and
+                 <function>sd_uid_get_seats()</function> interfaces are
+-                available as shared library, which can be compiled and
++                available as a shared library, which can be compiled and
+                 linked to with the <constant>libsystemd-login</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+                 file.</para>
+         </refsect1>
+diff --git a/man/sysctl.d.xml b/man/sysctl.d.xml
+index 854864c..5544283 100644
+--- a/man/sysctl.d.xml
++++ b/man/sysctl.d.xml
+@@ -89,8 +89,8 @@
+                 administrator, who may use this logic to override the
+                 configuration files installed by vendor packages. All
+                 configuration files are sorted by their filename in
+-                lexicographic order, regardless in which of the
+-                directories they reside. If multiple files specify the
++                lexicographic order, regardless of which of the
++                directories they reside in. If multiple files specify the
+                 same variable name, the entry in the file with the
+                 lexicographically latest name will be applied. It is
+                 recommended to prefix all filenames with a two-digit
+diff --git a/man/systemctl.xml b/man/systemctl.xml
+index b4bc15d..61deb19 100644
+--- a/man/systemctl.xml
++++ b/man/systemctl.xml
+@@ -250,7 +250,7 @@ systemctl start foo
+           sleep state. Any user may take these locks and privileged
+           users may override these locks. If any locks are taken,
+           shutdown and sleep state requests will normally fail
+-          (regardless if privileged or not) and a list of active locks
++          (regardless of whether privileged or not) and a list of active locks
+           is printed. However, if <option>--ignore-inhibitors</option>
+           is specified, the locks are ignored and not printed, and the
+           operation attempted anyway, possibly requiring additional
+@@ -445,7 +445,7 @@ systemctl start foo
+           with identical immediate effects, however, since the latter
+           is lost on reboot, the changes are lost too.</para>
+ 
+-          <para>Similar, when used with
++          <para>Similarly, when used with
+           <command>set-property</command>, make changes only
+           temporarily, so that they are lost on the next
+           reboot.</para>
+diff --git a/man/systemd-getty-generator.xml b/man/systemd-getty-generator.xml
+index da88e72..b1993ae 100644
+--- a/man/systemd-getty-generator.xml
++++ b/man/systemd-getty-generator.xml
+@@ -61,10 +61,10 @@
+                 subsystem. It will also instantiate
+                 <filename>serial-getty@.service</filename> instances
+                 for virtualizer consoles, if execution in a
+-                virtualized environment is detected. This should
+-                ensure that the user is shown a login prompt at the
+-                right place, regardless in which environment the
+-                system is started. For example, it is sufficient to
++                virtualized environment is detected. This
++                should ensure that the user is shown a login prompt at
++                the right place, regardless of which environment the
++                system is started in. For example, it is sufficient to
+                 redirect the kernel console with a kernel command line
+                 argument such as <varname>console=</varname> to get
+                 both kernel messages and a getty prompt on a serial
+diff --git a/man/systemd-halt.service.xml b/man/systemd-halt.service.xml
+index 90b443f..99457aa 100644
+--- a/man/systemd-halt.service.xml
++++ b/man/systemd-halt.service.xml
+@@ -65,7 +65,7 @@
+                 <para><filename>systemd-halt.service</filename> is a
+                 system service that is pulled in by
+                 <filename>halt.target</filename> and is responsible
+-                for the actual system halt. Similar,
++                for the actual system halt. Similarly,
+                 <filename>systemd-poweroff.service</filename> is
+                 pulled in by <filename>poweroff.target</filename>,
+                 <filename>systemd-reboot.service</filename> by
+diff --git a/man/systemd-machine-id-setup.xml b/man/systemd-machine-id-setup.xml
+index fef76bc..bc38d55 100644
+--- a/man/systemd-machine-id-setup.xml
++++ b/man/systemd-machine-id-setup.xml
+@@ -80,7 +80,7 @@
+                 UUID passed is sufficiently unique and is different
+                 for every booted instanced of the VM.</para>
+ 
+-                <para>Similar, if run inside a Linux container
++                <para>Similarly, if run inside a Linux container
+                 environment and a UUID is set for the container this
+                 is used to initialize the machine ID. For details see
+                 the documentation of the <ulink
+diff --git a/man/systemd.preset.xml b/man/systemd.preset.xml
+index 16db8cd..55cb4de 100644
+--- a/man/systemd.preset.xml
++++ b/man/systemd.preset.xml
+@@ -126,8 +126,8 @@
+                 administrator, who may use this logic to override the
+                 preset files installed by vendor packages. All preset
+                 files are sorted by their filename in lexicographic
+-                order, regardless in which of the directories they
+-                reside. If multiple files specify the same unit name,
++                order, regardless of which of the directories they
++                reside in. If multiple files specify the same unit name,
+                 the entry in the file with the lexicographically earliest
+                 name will be applied. It is recommended to prefix all
+                 filenames with a two-digit number and a dash, to simplify
+diff --git a/man/systemd.service.xml b/man/systemd.service.xml
+index 8f9137c..80a935d 100644
+--- a/man/systemd.service.xml
++++ b/man/systemd.service.xml
+@@ -712,7 +712,7 @@ ExecStart=/bin/echo $ONE $TWO ${TWO}
+                                 timeout for the service expires.
+                                 If set to
+                                 <option>always</option>, the service
+-                                will be restarted regardless whether
++                                will be restarted regardless of whether
+                                 it exited cleanly or not, got
+                                 terminated abnormally by a signal or
+                                 hit a timeout.</para>
+diff --git a/man/systemd.socket.xml b/man/systemd.socket.xml
+index 1c78562..ac3127d 100644
+--- a/man/systemd.socket.xml
++++ b/man/systemd.socket.xml
+@@ -213,7 +213,7 @@
+                                 traffic on any of the sockets will
+                                 trigger service activation, and all
+                                 listed sockets will be passed to the
+-                                service, regardless whether there is
++                                service, regardless of whether there is
+                                 incoming traffic on them or not. If
+                                 the empty string is assigned to any of
+                                 these options, the list of addresses
+@@ -225,7 +225,7 @@
+                                 it is often desirable to listen on it
+                                 before the interface it is configured
+                                 on is up and running, and even
+-                                regardless whether it will be up and
++                                regardless of whether it will be up and
+                                 running ever at all. To deal with this
+                                 it is recommended to set the
+                                 <varname>FreeBind=</varname> option
+diff --git a/man/systemd.unit.xml b/man/systemd.unit.xml
+index 77127ff..b70c5e9 100644
+--- a/man/systemd.unit.xml
++++ b/man/systemd.unit.xml
+@@ -634,7 +634,7 @@
+                                 dependency on another unit is shut
+                                 down while the latter is started up,
+                                 the shut down is ordered before the
+-                                start-up regardless whether the
++                                start-up regardless of whether the
+                                 ordering dependency is actually of
+                                 type <varname>After=</varname> or
+                                 <varname>Before=</varname>. If two
+@@ -938,7 +938,7 @@
+                                 exists, is a regular file and marked
+                                 executable.</para>
+ 
+-                                <para>Similar,
++                                <para>Similarly,
+                                 <varname>ConditionKernelCommandLine=</varname>
+                                 may be used to check whether a
+                                 specific kernel command line option is
+diff --git a/man/tmpfiles.d.xml b/man/tmpfiles.d.xml
+index 39aa68d..ed88751 100644
+--- a/man/tmpfiles.d.xml
++++ b/man/tmpfiles.d.xml
+@@ -88,8 +88,8 @@
+                 the local administrator, who may use this logic to
+                 override the configuration files installed by vendor
+                 packages. All configuration files are sorted by their
+-                filename in lexicographic order, regardless in which
+-                of the directories they reside. If multiple files
++                filename in lexicographic order, regardless of which
++                of the directories they reside in. If multiple files
+                 specify the same path, the entry in the file with the
+                 lexicographically earliest name will be applied, all
+                 all other conflicting entries logged as errors.</para>
diff --git a/SOURCES/0158-man-improvements-to-comma-placement.patch b/SOURCES/0158-man-improvements-to-comma-placement.patch
new file mode 100644
index 0000000..042cecc
--- /dev/null
+++ b/SOURCES/0158-man-improvements-to-comma-placement.patch
@@ -0,0 +1,507 @@
+From 17bb3520f3e976c9e1cec61c330b1e37449b7832 Mon Sep 17 00:00:00 2001
+From: Jan Engelhardt <jengelh@inai.de>
+Date: Thu, 26 Dec 2013 02:47:44 +0100
+Subject: [PATCH] man: improvements to comma placement
+
+This is a recurring submission and includes corrections to:
+comma placement.
+
+Conflicts:
+	man/sd_bus_message_get_cookie.xml
+	man/sd_bus_request_name.xml
+	man/sd_session_is_active.xml
+	man/sd_watchdog_enabled.xml
+	man/systemctl.xml
+	man/systemd.exec.xml
+	man/systemd.timer.xml
+	man/systemd.unit.xml
+---
+ man/halt.xml                           | 2 +-
+ man/hostnamectl.xml                    | 2 +-
+ man/sd-daemon.xml                      | 4 ++--
+ man/sd-readahead.xml                   | 2 +-
+ man/sd_booted.xml                      | 2 +-
+ man/sd_get_seats.xml                   | 2 +-
+ man/sd_is_fifo.xml                     | 2 +-
+ man/sd_listen_fds.xml                  | 2 +-
+ man/sd_login_monitor_new.xml           | 6 +++---
+ man/sd_notify.xml                      | 2 +-
+ man/sd_readahead.xml                   | 2 +-
+ man/sd_seat_get_active.xml             | 4 ++--
+ man/sd_uid_get_state.xml               | 4 ++--
+ man/shutdown.xml                       | 2 +-
+ man/systemd-analyze.xml                | 2 +-
+ man/systemd-ask-password.xml           | 2 +-
+ man/systemd-cat.xml                    | 2 +-
+ man/systemd-cgls.xml                   | 2 +-
+ man/systemd-cgtop.xml                  | 2 +-
+ man/systemd-coredumpctl.xml            | 2 +-
+ man/systemd-delta.xml                  | 2 +-
+ man/systemd-machine-id-setup.xml       | 2 +-
+ man/systemd-notify.xml                 | 2 +-
+ man/systemd-tmpfiles.xml               | 2 +-
+ man/systemd-tty-ask-password-agent.xml | 2 +-
+ man/systemd.device.xml                 | 2 +-
+ man/systemd.mount.xml                  | 2 +-
+ man/systemd.service.xml                | 2 +-
+ man/systemd.special.xml                | 2 +-
+ man/systemd.swap.xml                   | 2 +-
+ man/systemd.xml                        | 2 +-
+ man/telinit.xml                        | 2 +-
+ man/timedatectl.xml                    | 2 +-
+ 33 files changed, 38 insertions(+), 38 deletions(-)
+
+diff --git a/man/halt.xml b/man/halt.xml
+index 2a13d3c..f54a864 100644
+--- a/man/halt.xml
++++ b/man/halt.xml
+@@ -148,7 +148,7 @@
+         <refsect1>
+                 <title>Exit status</title>
+ 
+-                <para>On success 0 is returned, a non-zero failure
++                <para>On success, 0 is returned, a non-zero failure
+                 code otherwise.</para>
+         </refsect1>
+ 
+diff --git a/man/hostnamectl.xml b/man/hostnamectl.xml
+index b39fb55..a0776f5 100644
+--- a/man/hostnamectl.xml
++++ b/man/hostnamectl.xml
+@@ -255,7 +255,7 @@
+         <refsect1>
+                 <title>Exit status</title>
+ 
+-                <para>On success 0 is returned, a non-zero failure
++                <para>On success, 0 is returned, a non-zero failure
+                 code otherwise.</para>
+         </refsect1>
+ 
+diff --git a/man/sd-daemon.xml b/man/sd-daemon.xml
+index 84c1afa..b48eac9 100644
+--- a/man/sd-daemon.xml
++++ b/man/sd-daemon.xml
+@@ -83,7 +83,7 @@
+                 <citerefentry><refentrytitle>sd_booted</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
+                 <citerefentry><refentrytitle>sd_is_fifo</refentrytitle><manvolnum>3</manvolnum></citerefentry>
+                 for more information about the functions
+-                implemented. In addition to these functions a couple
++                implemented. In addition to these functions, a couple
+                 of logging prefixes are defined as macros:</para>
+ 
+                 <programlisting>#define SD_EMERG   "&lt;0&gt;"  /* system is unusable */
+@@ -135,7 +135,7 @@
+                 implementation. See the respective function man pages
+                 for details.</para>
+ 
+-                <para>In addition, for details about the algorithms
++                <para>In addition, for details about the algorithms,
+                 check the liberally licensed reference implementation
+                 sources:
+                 <ulink url="http://cgit.freedesktop.org/systemd/systemd/plain/src/libsystemd-daemon/sd-daemon.c"/>
+diff --git a/man/sd-readahead.xml b/man/sd-readahead.xml
+index f8a0a0b..bcc46b2 100644
+--- a/man/sd-readahead.xml
++++ b/man/sd-readahead.xml
+@@ -83,7 +83,7 @@
+                 reference implementation. See the respective function
+                 man pages for details.</para>
+ 
+-                <para>In addition, for details about the algorithms
++                <para>In addition, for details about the algorithms,
+                 check the liberally licensed reference implementation
+                 sources:
+                 <ulink url="http://cgit.freedesktop.org/systemd/systemd/plain/src/readahead/sd-readahead.c"/>
+diff --git a/man/sd_booted.xml b/man/sd_booted.xml
+index 6f8cc95..1e38d2a 100644
+--- a/man/sd_booted.xml
++++ b/man/sd_booted.xml
+@@ -106,7 +106,7 @@
+                 file. Alternatively, applications consuming these APIs
+                 may copy the implementation into their source
+                 tree. For more details about the reference
+-                implementation see
++                implementation, see
+                 <citerefentry><refentrytitle>sd-daemon</refentrytitle><manvolnum>3</manvolnum></citerefentry>.</para>
+ 
+                 <para>If the reference implementation is used as
+diff --git a/man/sd_get_seats.xml b/man/sd_get_seats.xml
+index 1e55af3..f0e7655 100644
+--- a/man/sd_get_seats.xml
++++ b/man/sd_get_seats.xml
+@@ -107,7 +107,7 @@
+         <refsect1>
+                 <title>Return Value</title>
+ 
+-                <para>On success <function>sd_get_seats()</function>,
++                <para>On success, <function>sd_get_seats()</function>,
+                 <function>sd_get_sessions()</function>,
+                 <function>sd_get_uids()</function> and
+                 <function>sd_get_machine_names()</function> return the
+diff --git a/man/sd_is_fifo.xml b/man/sd_is_fifo.xml
+index 5e79453..4bb2236 100644
+--- a/man/sd_is_fifo.xml
++++ b/man/sd_is_fifo.xml
+@@ -214,7 +214,7 @@
+                 file. Alternatively, applications consuming these APIs
+                 may copy the implementation into their source
+                 tree. For more details about the reference
+-                implementation see
++                implementation, see
+                 <citerefentry><refentrytitle>sd-daemon</refentrytitle><manvolnum>3</manvolnum></citerefentry>.</para>
+ 
+                 <para>These functions continue to work as described,
+diff --git a/man/sd_listen_fds.xml b/man/sd_listen_fds.xml
+index aaabdbf..6a9e082 100644
+--- a/man/sd_listen_fds.xml
++++ b/man/sd_listen_fds.xml
+@@ -155,7 +155,7 @@
+                 file. Alternatively, applications consuming these APIs
+                 may copy the implementation into their source
+                 tree. For more details about the reference
+-                implementation see
++                implementation, see
+                 <citerefentry><refentrytitle>sd-daemon</refentrytitle><manvolnum>3</manvolnum></citerefentry>.</para>
+ 
+                 <para>If the reference implementation is used as
+diff --git a/man/sd_login_monitor_new.xml b/man/sd_login_monitor_new.xml
+index f439d3e..14ff241 100644
+--- a/man/sd_login_monitor_new.xml
++++ b/man/sd_login_monitor_new.xml
+@@ -198,13 +198,13 @@ else {
+         <refsect1>
+                 <title>Return Value</title>
+ 
+-                <para>On success
++                <para>On success,
+                 <function>sd_login_monitor_new()</function>,
+                 <function>sd_login_monitor_flush()</function> and
+                 <function>sd_login_monitor_get_timeout()</function>
+-                return 0 or a positive integer. On success
++                return 0 or a positive integer. On success,
+                 <function>sd_login_monitor_get_fd()</function> returns
+-                a Unix file descriptor. On success
++                a Unix file descriptor. On success,
+                 <function>sd_login_monitor_get_events()</function>
+                 returns a combination of <constant>POLLIN</constant>,
+                 <constant>POLLOUT</constant> and suchlike. On failure,
+diff --git a/man/sd_notify.xml b/man/sd_notify.xml
+index e078140..aae27a8 100644
+--- a/man/sd_notify.xml
++++ b/man/sd_notify.xml
+@@ -241,7 +241,7 @@
+                 <constant>libsystemd-daemon</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+                 file. Alternatively, applications consuming these APIs
+                 may copy the implementation into their source tree. For
+-                more details about the reference implementation see
++                more details about the reference implementation, see
+                 <citerefentry><refentrytitle>sd-daemon</refentrytitle><manvolnum>3</manvolnum></citerefentry>.</para>
+ 
+                 <para>If the reference implementation is used as
+diff --git a/man/sd_readahead.xml b/man/sd_readahead.xml
+index bb01bcf..9827299 100644
+--- a/man/sd_readahead.xml
++++ b/man/sd_readahead.xml
+@@ -139,7 +139,7 @@
+                 <filename>sd-readahead.h</filename> files. It is
+                 recommended that applications consuming this API copy
+                 the implementation into their source tree. For more
+-                details about the reference implementation see
++                details about the reference implementation, see
+                 <citerefentry><refentrytitle>sd-readahead</refentrytitle><manvolnum>3</manvolnum></citerefentry></para>
+ 
+                 <para>If -DDISABLE_SYSTEMD is set during compilation,
+diff --git a/man/sd_seat_get_active.xml b/man/sd_seat_get_active.xml
+index 23d582d..c64ba13 100644
+--- a/man/sd_seat_get_active.xml
++++ b/man/sd_seat_get_active.xml
+@@ -143,9 +143,9 @@
+         <refsect1>
+                 <title>Return Value</title>
+ 
+-                <para> On success
++                <para> On success,
+                 <function>sd_seat_get_active()</function>
+-                returns 0 or a positive integer. On success
++                returns 0 or a positive integer. On success,
+                 <function>sd_seat_get_sessions()</function> returns
+                 the number of entries in the session identifier
+                 array. If the test succeeds,
+diff --git a/man/sd_uid_get_state.xml b/man/sd_uid_get_state.xml
+index 0faa765..30b254c 100644
+--- a/man/sd_uid_get_state.xml
++++ b/man/sd_uid_get_state.xml
+@@ -152,11 +152,11 @@
+         <refsect1>
+                 <title>Return Value</title>
+ 
+-                <para>On success
++                <para>On success,
+                 <function>sd_uid_get_state()</function> returns 0 or a
+                 positive integer. If the test succeeds,
+                 <function>sd_uid_is_on_seat()</function> returns a
+-                positive integer, if it fails
++                positive integer; if it fails,
+                 0. <function>sd_uid_get_sessions()</function> and
+                 <function>sd_uid_get_seats()</function> return the
+                 number of entries in the returned arrays. On failure,
+diff --git a/man/shutdown.xml b/man/shutdown.xml
+index 795fb66..27e7e87 100644
+--- a/man/shutdown.xml
++++ b/man/shutdown.xml
+@@ -164,7 +164,7 @@
+         <refsect1>
+                 <title>Exit status</title>
+ 
+-                <para>On success 0 is returned, a non-zero failure
++                <para>On success, 0 is returned, a non-zero failure
+                 code otherwise.</para>
+         </refsect1>
+ 
+diff --git a/man/systemd-analyze.xml b/man/systemd-analyze.xml
+index aefbfc8..b7753f9 100644
+--- a/man/systemd-analyze.xml
++++ b/man/systemd-analyze.xml
+@@ -270,7 +270,7 @@
+         <refsect1>
+                 <title>Exit status</title>
+ 
+-                <para>On success 0 is returned, a non-zero failure
++                <para>On success, 0 is returned, a non-zero failure
+                 code otherwise.</para>
+         </refsect1>
+ 
+diff --git a/man/systemd-ask-password.xml b/man/systemd-ask-password.xml
+index 8af328d..79902cb 100644
+--- a/man/systemd-ask-password.xml
++++ b/man/systemd-ask-password.xml
+@@ -167,7 +167,7 @@
+         <refsect1>
+                 <title>Exit status</title>
+ 
+-                <para>On success 0 is returned, a non-zero failure
++                <para>On success, 0 is returned, a non-zero failure
+                 code otherwise.</para>
+         </refsect1>
+ 
+diff --git a/man/systemd-cat.xml b/man/systemd-cat.xml
+index ffb1dfd..ba7a2cf 100644
+--- a/man/systemd-cat.xml
++++ b/man/systemd-cat.xml
+@@ -158,7 +158,7 @@
+         <refsect1>
+                 <title>Exit status</title>
+ 
+-                <para>On success 0 is returned, a non-zero failure
++                <para>On success, 0 is returned, a non-zero failure
+                 code otherwise.</para>
+         </refsect1>
+ 
+diff --git a/man/systemd-cgls.xml b/man/systemd-cgls.xml
+index 432706b..152b883 100644
+--- a/man/systemd-cgls.xml
++++ b/man/systemd-cgls.xml
+@@ -145,7 +145,7 @@
+         <refsect1>
+                 <title>Exit status</title>
+ 
+-                <para>On success 0 is returned, a non-zero failure
++                <para>On success, 0 is returned, a non-zero failure
+                 code otherwise.</para>
+         </refsect1>
+ 
+diff --git a/man/systemd-cgtop.xml b/man/systemd-cgtop.xml
+index 7faedfb..0e1f7c5 100644
+--- a/man/systemd-cgtop.xml
++++ b/man/systemd-cgtop.xml
+@@ -264,7 +264,7 @@
+         <refsect1>
+                 <title>Exit status</title>
+ 
+-                <para>On success 0 is returned, a non-zero failure
++                <para>On success, 0 is returned, a non-zero failure
+                 code otherwise.</para>
+         </refsect1>
+ 
+diff --git a/man/systemd-coredumpctl.xml b/man/systemd-coredumpctl.xml
+index 9ccb67d..67f75d1 100644
+--- a/man/systemd-coredumpctl.xml
++++ b/man/systemd-coredumpctl.xml
+@@ -200,7 +200,7 @@
+ 
+         <refsect1>
+                 <title>Exit status</title>
+-                <para>On success 0 is returned, a non-zero failure
++                <para>On success, 0 is returned, a non-zero failure
+                 code otherwise. Not finding any matching coredumps is treated
+                 as failure.
+                 </para>
+diff --git a/man/systemd-delta.xml b/man/systemd-delta.xml
+index 4d3ab78..ebaa349 100644
+--- a/man/systemd-delta.xml
++++ b/man/systemd-delta.xml
+@@ -223,7 +223,7 @@
+         <refsect1>
+                 <title>Exit status</title>
+ 
+-                <para>On success 0 is returned, a non-zero failure
++                <para>On success, 0 is returned, a non-zero failure
+                 code otherwise.</para>
+         </refsect1>
+ 
+diff --git a/man/systemd-machine-id-setup.xml b/man/systemd-machine-id-setup.xml
+index bc38d55..7b3aa7e 100644
+--- a/man/systemd-machine-id-setup.xml
++++ b/man/systemd-machine-id-setup.xml
+@@ -116,7 +116,7 @@
+         <refsect1>
+                 <title>Exit status</title>
+ 
+-                <para>On success 0 is returned, a non-zero failure
++                <para>On success, 0 is returned, a non-zero failure
+                 code otherwise.</para>
+         </refsect1>
+ 
+diff --git a/man/systemd-notify.xml b/man/systemd-notify.xml
+index a769346..e14977d 100644
+--- a/man/systemd-notify.xml
++++ b/man/systemd-notify.xml
+@@ -172,7 +172,7 @@
+         <refsect1>
+                 <title>Exit status</title>
+ 
+-                <para>On success 0 is returned, a non-zero failure
++                <para>On success, 0 is returned, a non-zero failure
+                 code otherwise.</para>
+         </refsect1>
+ 
+diff --git a/man/systemd-tmpfiles.xml b/man/systemd-tmpfiles.xml
+index 495247e..c678031 100644
+--- a/man/systemd-tmpfiles.xml
++++ b/man/systemd-tmpfiles.xml
+@@ -178,7 +178,7 @@
+         <refsect1>
+                 <title>Exit status</title>
+ 
+-                <para>On success 0 is returned, a non-zero failure
++                <para>On success, 0 is returned, a non-zero failure
+                 code otherwise.</para>
+         </refsect1>
+ 
+diff --git a/man/systemd-tty-ask-password-agent.xml b/man/systemd-tty-ask-password-agent.xml
+index 31a18ba..cb5fb43 100644
+--- a/man/systemd-tty-ask-password-agent.xml
++++ b/man/systemd-tty-ask-password-agent.xml
+@@ -148,7 +148,7 @@
+         <refsect1>
+                 <title>Exit status</title>
+ 
+-                <para>On success 0 is returned, a non-zero failure
++                <para>On success, 0 is returned, a non-zero failure
+                 code otherwise.</para>
+         </refsect1>
+ 
+diff --git a/man/systemd.device.xml b/man/systemd.device.xml
+index 002b647..586473c 100644
+--- a/man/systemd.device.xml
++++ b/man/systemd.device.xml
+@@ -75,7 +75,7 @@
+                 udev tag (by default all block and network devices,
+                 and a few others). This may be used to define
+                 dependencies between devices and other units. To tag a
+-                udev device use <literal>TAG+="systemd"</literal> in
++                udev device, use <literal>TAG+="systemd"</literal> in
+                 the udev rules file, see
+                 <citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry>
+                 for details.</para>
+diff --git a/man/systemd.mount.xml b/man/systemd.mount.xml
+index df5a79e..6f9f70c 100644
+--- a/man/systemd.mount.xml
++++ b/man/systemd.mount.xml
+@@ -94,7 +94,7 @@
+                 in a unit file
+                 <filename>home-lennart.mount</filename>. For details
+                 about the escaping logic used to convert a file system
+-                path to a unit name see
++                path to a unit name, see
+                 <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>.</para>
+ 
+                 <para>Optionally, a mount unit may be accompanied by
+diff --git a/man/systemd.service.xml b/man/systemd.service.xml
+index 80a935d..e869f95 100644
+--- a/man/systemd.service.xml
++++ b/man/systemd.service.xml
+@@ -441,7 +441,7 @@
+                                 <literal>one</literal> and
+                                 <literal>two two</literal>,
+                                 respectively. Since two commands are
+-                                specified
++                                specified,
+                                 <varname>Type=oneshot</varname> must
+                                 be used.</para>
+ 
+diff --git a/man/systemd.special.xml b/man/systemd.special.xml
+index 863a029..76bb5cd 100644
+--- a/man/systemd.special.xml
++++ b/man/systemd.special.xml
+@@ -996,7 +996,7 @@
+                 <filename>smartcard.target</filename>,
+                 <filename>sound.target</filename>.</para>
+ 
+-                <para>In addition the following special unit is
++                <para>In addition, the following special unit is
+                 understood only when systemd runs as service instance:</para>
+ 
+                 <variablelist>
+diff --git a/man/systemd.swap.xml b/man/systemd.swap.xml
+index 13f6c84..5e8b25f 100644
+--- a/man/systemd.swap.xml
++++ b/man/systemd.swap.xml
+@@ -85,7 +85,7 @@
+                 <filename noindex='true'>/dev/sda5</filename> must be configured in a
+                 unit file <filename>dev-sda5.swap</filename>. For
+                 details about the escaping logic used to convert a
+-                file system path to a unit name see
++                file system path to a unit name, see
+                 <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>.</para>
+ 
+                 <para>All swap units automatically get the appropriate
+diff --git a/man/systemd.xml b/man/systemd.xml
+index 85c06d3..23a0c26 100644
+--- a/man/systemd.xml
++++ b/man/systemd.xml
+@@ -494,7 +494,7 @@
+                 <filename>/proc</filename>.</para>
+ 
+                 <para>For more information about the concepts and
+-                ideas behind systemd please refer to the <ulink
++                ideas behind systemd, please refer to the <ulink
+                 url="http://0pointer.de/blog/projects/systemd.html">Original
+                 Design Document</ulink>.</para>
+ 
+diff --git a/man/telinit.xml b/man/telinit.xml
+index bb80939..b20a60a 100644
+--- a/man/telinit.xml
++++ b/man/telinit.xml
+@@ -171,7 +171,7 @@
+         <refsect1>
+                 <title>Exit status</title>
+ 
+-                <para>On success 0 is returned, a non-zero failure
++                <para>On success, 0 is returned, a non-zero failure
+                 code otherwise.</para>
+         </refsect1>
+ 
+diff --git a/man/timedatectl.xml b/man/timedatectl.xml
+index be0ad3f..f4975ce 100644
+--- a/man/timedatectl.xml
++++ b/man/timedatectl.xml
+@@ -222,7 +222,7 @@
+         <refsect1>
+                 <title>Exit status</title>
+ 
+-                <para>On success 0 is returned, a non-zero failure
++                <para>On success, 0 is returned, a non-zero failure
+                 code otherwise.</para>
+         </refsect1>
+ 
diff --git a/SOURCES/0159-man-grammar-and-wording-improvements.patch b/SOURCES/0159-man-grammar-and-wording-improvements.patch
new file mode 100644
index 0000000..09d5e86
--- /dev/null
+++ b/SOURCES/0159-man-grammar-and-wording-improvements.patch
@@ -0,0 +1,79 @@
+From 24f82a86f4d61809f9eb913c1244a4a6df7ba896 Mon Sep 17 00:00:00 2001
+From: Jan Engelhardt <jengelh@inai.de>
+Date: Thu, 26 Dec 2013 02:47:45 +0100
+Subject: [PATCH] man: grammar and wording improvements
+
+This is a recurring submission and includes corrections to:
+- missing words, preposition choice.
+- change of /lib to /usr/lib, because that is what most distros are
+  using as the system-wide location for systemd/udev files.
+
+Conflicts:
+	man/journalctl.xml
+	man/sd_bus_message_get_cookie.xml
+	man/sd_bus_request_name.xml
+	man/systemctl.xml
+	man/systemd-networkd.service.xml
+	man/systemd.device.xml
+	man/systemd.exec.xml
+	man/systemd.timer.xml
+	man/udev.xml
+---
+ man/daemon.xml          | 2 +-
+ man/sd_is_fifo.xml      | 2 +-
+ man/systemd.service.xml | 2 +-
+ man/systemd.unit.xml    | 2 +-
+ 4 files changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/man/daemon.xml b/man/daemon.xml
+index 7790420..1fe4546 100644
+--- a/man/daemon.xml
++++ b/man/daemon.xml
+@@ -408,7 +408,7 @@
+                         description files.</para>
+ 
+                         <para>In systemd, if the developer or
+-                        administrator wants to make sure a service or
++                        administrator wants to make sure that a service or
+                         other unit is activated automatically on boot,
+                         it is recommended to place a symlink to the
+                         unit file in the <filename>.wants/</filename>
+diff --git a/man/sd_is_fifo.xml b/man/sd_is_fifo.xml
+index 4bb2236..58cd1c9 100644
+--- a/man/sd_is_fifo.xml
++++ b/man/sd_is_fifo.xml
+@@ -165,7 +165,7 @@
+                 called to check whether the specified file descriptor
+                 refers to a special file. If the
+                 <parameter>path</parameter> parameter is not
+-                <constant>NULL</constant>, it is checked whether file
++                <constant>NULL</constant>, it is checked whether the file
+                 descriptor is bound to the specified file
+                 name. Special files in this context are character
+                 device nodes and files in <filename>/proc</filename>
+diff --git a/man/systemd.service.xml b/man/systemd.service.xml
+index e869f95..e3a370f 100644
+--- a/man/systemd.service.xml
++++ b/man/systemd.service.xml
+@@ -427,7 +427,7 @@
+                                 <programlisting>ExecStart=/bin/sh -c 'dmesg | tac'
+                                 </programlisting>
+ 
+-                                <para>Only select environment variables
++                                <para>Only select environment variables that
+                                 are set for executed commands. See
+                                 <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
+                                 </para>
+diff --git a/man/systemd.unit.xml b/man/systemd.unit.xml
+index b70c5e9..f6b4b24 100644
+--- a/man/systemd.unit.xml
++++ b/man/systemd.unit.xml
+@@ -548,7 +548,7 @@
+                                 of units. When systemd stops or restarts
+                                 the units listed here, the action is
+                                 propagated to this unit.
+-                                Note that this is a one way dependency —
++                                Note that this is a one-way dependency —
+                                 changes to this unit do not affect the
+                                 listed units.
+                                 </para></listitem>
diff --git a/SOURCES/0160-man-document-fail-nofail-auto-noauto.patch b/SOURCES/0160-man-document-fail-nofail-auto-noauto.patch
new file mode 100644
index 0000000..ddf240b
--- /dev/null
+++ b/SOURCES/0160-man-document-fail-nofail-auto-noauto.patch
@@ -0,0 +1,130 @@
+From 9395355f4733cecc72b31f384e313606745c14d2 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Wed, 25 Dec 2013 23:20:57 -0500
+Subject: [PATCH] man: document fail/nofail, auto/noauto
+
+Also s/filesystem/file system/ in a few places.
+
+Conflicts:
+	TODO
+	man/systemd-fsck@.service.xml
+	man/systemd-fstab-generator.xml
+---
+ man/systemd-fsck@.service.xml   |  5 ++++-
+ man/systemd-fstab-generator.xml |  6 ++++++
+ man/systemd-halt.service.xml    |  2 +-
+ man/systemd.mount.xml           | 20 +++++++++++++++++++-
+ man/systemd.unit.xml            |  2 +-
+ man/udevadm.xml                 |  2 +-
+ 6 files changed, 32 insertions(+), 5 deletions(-)
+
+diff --git a/man/systemd-fsck@.service.xml b/man/systemd-fsck@.service.xml
+index e934352..c653dc5 100644
+--- a/man/systemd-fsck@.service.xml
++++ b/man/systemd-fsck@.service.xml
+@@ -62,7 +62,10 @@
+                 system
+                 check. <filename>systemd-fsck-root.service</filename> is
+                 responsible for file system checks on the root
+-                file system.</para>
++                file system. The root file system check is performed
++                before the other file systems. Either service is enabled
++                at boot if passno in <filename>/etc/fstab</filename> for
++                the file system is set to a value greater than zero.</para>
+ 
+                 <para><filename>systemd-fsck</filename> will
+                 forward file system checking progress to the
+diff --git a/man/systemd-fstab-generator.xml b/man/systemd-fstab-generator.xml
+index 9ca16c7..e3cf5d2 100644
+--- a/man/systemd-fstab-generator.xml
++++ b/man/systemd-fstab-generator.xml
+@@ -61,6 +61,12 @@
+                 reloaded. This will instantiate mount and swap units
+                 as necessary.</para>
+ 
++                <para>The <varname>passno</varname> field is treated
++                like a simple boolean, and the ordering information is
++                discarded. However, if the root file system is
++                checked, it is checked before all the other
++                file systems.</para>
++
+                 <para>See
+                 <citerefentry><refentrytitle>systemd.mount</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+                 and
+diff --git a/man/systemd-halt.service.xml b/man/systemd-halt.service.xml
+index 99457aa..bec2e36 100644
+--- a/man/systemd-halt.service.xml
++++ b/man/systemd-halt.service.xml
+@@ -86,7 +86,7 @@
+                 <para>It is necessary to have this code in a separate binary
+                 because otherwise rebooting after an upgrade might be broken —
+                 the running PID 1 could still depend on libraries which are not
+-                available any more, thus keeping the filesystem busy, which
++                available any more, thus keeping the file system busy, which
+                 then cannot be re-mounted read-only.</para>
+ 
+                 <para>Immediately before executing the actual system
+diff --git a/man/systemd.mount.xml b/man/systemd.mount.xml
+index 6f9f70c..cadf950 100644
+--- a/man/systemd.mount.xml
++++ b/man/systemd.mount.xml
+@@ -132,7 +132,10 @@
+                 for details). Mounts listed in
+                 <filename>/etc/fstab</filename> will be converted into
+                 native units dynamically at boot and when the
+-                configuration of the system manager is reloaded. See
++                configuration of the system manager is reloaded. In
++                general, configuring mount points through
++                <filename>/etc/fstab</filename> is the preferred
++                approach. See
+                 <citerefentry><refentrytitle>systemd-fstab-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry>
+                 for details about the conversion.</para>
+ 
+@@ -159,6 +162,21 @@
+                 <literal>s</literal>, <literal>min</literal>,
+                 <literal>h</literal>, <literal>ms</literal>.</para>
+ 
++                <para>If <option>nofail</option> is given, this mount
++                will be only wanted, not required, by the
++                <filename>local-fs.target</filename>. This means that
++                the boot will continue even if this mount point is not
++                mounted successfully. Option <option>fail</option> has
++                the opposite meaning and is the default.</para>
++
++                <para>If <option>noauto</option> is given, this mount
++                will not be added as a dependency for
++                <filename>local-fs.target</filename>. This means that
++                it will not be mounted automatically during boot,
++                unless it is pulled in by some other unit. Option
++                <option>auto</option> has the opposite meaning and is
++                the default.</para>
++
+                 <para>If a mount point is configured in both
+                 <filename>/etc/fstab</filename> and a unit file that
+                 is stored below <filename>/usr</filename>, the former
+diff --git a/man/systemd.unit.xml b/man/systemd.unit.xml
+index f6b4b24..4704352 100644
+--- a/man/systemd.unit.xml
++++ b/man/systemd.unit.xml
+@@ -232,7 +232,7 @@
+                 multiple units from a single configuration file. If
+                 systemd looks for a unit configuration file, it will
+                 first search for the literal unit name in the
+-                filesystem. If that yields no success and the unit
++                file system. If that yields no success and the unit
+                 name contains an <literal>@</literal> character, systemd will look for a
+                 unit template that shares the same name but with the
+                 instance string (i.e. the part between the <literal>@</literal> character
+diff --git a/man/udevadm.xml b/man/udevadm.xml
+index a1ffe42..ca3713f 100644
+--- a/man/udevadm.xml
++++ b/man/udevadm.xml
+@@ -461,7 +461,7 @@
+         <varlistentry>
+           <term><option>--root=<replaceable>string</replaceable></option></term>
+           <listitem>
+-            <para>Alternative root path in the filesystem for reading and writing files.</para>
++            <para>Alternative root path in the file system for reading and writing files.</para>
+           </listitem>
+         </varlistentry>
+       </variablelist>
diff --git a/SOURCES/0161-man-fix-description-of-is-enabled-returned-value.patch b/SOURCES/0161-man-fix-description-of-is-enabled-returned-value.patch
new file mode 100644
index 0000000..a29e918
--- /dev/null
+++ b/SOURCES/0161-man-fix-description-of-is-enabled-returned-value.patch
@@ -0,0 +1,22 @@
+From 823c9b307bdcbce12ee7af42ab2e8b4a01df1831 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Tue, 24 Dec 2013 22:57:15 -0500
+Subject: [PATCH] man: fix description of is-enabled returned value
+
+---
+ man/systemctl.xml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/man/systemctl.xml b/man/systemctl.xml
+index 61deb19..25b03d8 100644
+--- a/man/systemctl.xml
++++ b/man/systemctl.xml
+@@ -932,7 +932,7 @@ kobject-uevent 1 systemd-udevd-kernel.socket systemd-udevd.service
+                   <row>
+                     <entry><literal>static</literal></entry>
+                     <entry>Unit is not enabled, but has no provisions for enabling in [Install] section</entry>
+-                    <entry>1</entry>
++                    <entry>0</entry>
+                   </row>
+                   <row>
+                     <entry><literal>disabled</literal></entry>
diff --git a/SOURCES/0162-man-fix-Type-reference.patch b/SOURCES/0162-man-fix-Type-reference.patch
new file mode 100644
index 0000000..262de6f
--- /dev/null
+++ b/SOURCES/0162-man-fix-Type-reference.patch
@@ -0,0 +1,23 @@
+From 8c9d4932e5d6ee02b6fc3373a8f68d89faf49928 Mon Sep 17 00:00:00 2001
+From: Marcos Felipe Rasia de Mello <marcosfrm@gmail.com>
+Date: Thu, 26 Dec 2013 17:47:57 -0200
+Subject: [PATCH] man: fix Type= reference
+
+Simple man page fix attached.
+---
+ man/systemd.service.xml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/man/systemd.service.xml b/man/systemd.service.xml
+index e3a370f..898c19d 100644
+--- a/man/systemd.service.xml
++++ b/man/systemd.service.xml
+@@ -139,7 +139,7 @@
+ 
+                                 <para>If set to
+                                 <option>simple</option> (the default
+-                                value if <varname>BusName=</varname>
++                                value if <varname>Type=</varname>
+                                 is not specified), it is expected that
+                                 the process configured with
+                                 <varname>ExecStart=</varname> is the
diff --git a/SOURCES/0163-man-fix-Type-reference-v2.patch b/SOURCES/0163-man-fix-Type-reference-v2.patch
new file mode 100644
index 0000000..c5bfe20
--- /dev/null
+++ b/SOURCES/0163-man-fix-Type-reference-v2.patch
@@ -0,0 +1,37 @@
+From 7f66158304287727f35c24d9bd4c700c0923bc73 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Fri, 27 Dec 2013 01:18:39 -0500
+Subject: [PATCH] man: fix Type= reference v2
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+grawity:
+
+  It looks like the old version _was_ correct – the default value will
+  be "Type=dbus" if the service has a BusName set.
+
+  Suggested change: "if neither Type= nor BusName= is specified"
+---
+ man/systemd.service.xml | 8 +++++---
+ 1 file changed, 5 insertions(+), 3 deletions(-)
+
+diff --git a/man/systemd.service.xml b/man/systemd.service.xml
+index 898c19d..71bcfb4 100644
+--- a/man/systemd.service.xml
++++ b/man/systemd.service.xml
+@@ -139,9 +139,11 @@
+ 
+                                 <para>If set to
+                                 <option>simple</option> (the default
+-                                value if <varname>Type=</varname>
+-                                is not specified), it is expected that
+-                                the process configured with
++                                value if neither
++                                <varname>Type=</varname> nor
++                                <varname>BusName=</varname> are
++                                specified), it is expected that the
++                                process configured with
+                                 <varname>ExecStart=</varname> is the
+                                 main process of the service. In this
+                                 mode, if the process offers
diff --git a/SOURCES/0164-hwdb-Update-database-of-Bluetooth-company-identifier.patch b/SOURCES/0164-hwdb-Update-database-of-Bluetooth-company-identifier.patch
new file mode 100644
index 0000000..ac7a4f8
--- /dev/null
+++ b/SOURCES/0164-hwdb-Update-database-of-Bluetooth-company-identifier.patch
@@ -0,0 +1,38 @@
+From 48acc4b9f59e019748459e01c8c125803ac88df3 Mon Sep 17 00:00:00 2001
+From: Marcel Holtmann <marcel@holtmann.org>
+Date: Fri, 27 Dec 2013 09:35:20 -0800
+Subject: [PATCH] hwdb: Update database of Bluetooth company identifiers
+
+---
+ hwdb/20-bluetooth-vendor-product.hwdb | 14 +++++++++++++-
+ 1 file changed, 13 insertions(+), 1 deletion(-)
+
+diff --git a/hwdb/20-bluetooth-vendor-product.hwdb b/hwdb/20-bluetooth-vendor-product.hwdb
+index 6f8301f..192b715 100644
+--- a/hwdb/20-bluetooth-vendor-product.hwdb
++++ b/hwdb/20-bluetooth-vendor-product.hwdb
+@@ -427,7 +427,7 @@ bluetooth:v008B*
+  ID_VENDOR_FROM_DATABASE=Topcorn Positioning Systems, LLC
+ 
+ bluetooth:v008C*
+- ID_VENDOR_FROM_DATABASE=Qualcomm Labs, Inc.
++ ID_VENDOR_FROM_DATABASE=Qualcomm Retail Solutions, Inc. (formerly Qualcomm Labs, Inc.)
+ 
+ bluetooth:v008D*
+  ID_VENDOR_FROM_DATABASE=Zscan Software
+@@ -839,3 +839,15 @@ bluetooth:v0115*
+ 
+ bluetooth:v0116*
+  ID_VENDOR_FROM_DATABASE=1OAK Technologies
++
++bluetooth:v0117*
++ ID_VENDOR_FROM_DATABASE=Wimoto Technologies Inc
++
++bluetooth:v0118*
++ ID_VENDOR_FROM_DATABASE=Radius Networks, Inc.
++
++bluetooth:v0119*
++ ID_VENDOR_FROM_DATABASE=Wize Technology Co., Ltd.
++
++bluetooth:v011A*
++ ID_VENDOR_FROM_DATABASE=Qualcomm Labs, Inc.
diff --git a/SOURCES/0165-man-add-a-note-about-propagating-signals.patch b/SOURCES/0165-man-add-a-note-about-propagating-signals.patch
new file mode 100644
index 0000000..2db8823
--- /dev/null
+++ b/SOURCES/0165-man-add-a-note-about-propagating-signals.patch
@@ -0,0 +1,61 @@
+From a49c79e807843bbd87961b3d4b81ea79076c043e Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Fri, 27 Dec 2013 15:27:24 -0500
+Subject: [PATCH] man: add a note about propagating signals
+
+---
+ man/systemd.service.xml | 39 +++++++++++++++++++++++++--------------
+ 1 file changed, 25 insertions(+), 14 deletions(-)
+
+diff --git a/man/systemd.service.xml b/man/systemd.service.xml
+index 71bcfb4..af3e0f2 100644
+--- a/man/systemd.service.xml
++++ b/man/systemd.service.xml
+@@ -734,22 +734,33 @@ ExecStart=/bin/echo $ONE $TWO ${TWO}
+                                 considered successful termination, in
+                                 addition to the normal successful exit
+                                 code 0 and the signals <constant>SIGHUP</constant>, <constant>SIGINT</constant>,
+-                                <constant>SIGTERM</constant> and <constant>SIGPIPE</constant>. Exit status
++                                <constant>SIGTERM</constant>, and <constant>SIGPIPE</constant>. Exit status
+                                 definitions can either be numeric exit
+                                 codes or termination signal names,
+-                                separated by spaces. Example:
+-                                <literal>SuccessExitStatus=1 2 8
+-                                <constant>SIGKILL</constant></literal>, ensures that exit
+-                                codes 1, 2, 8 and the termination
+-                                signal <constant>SIGKILL</constant> are considered clean
+-                                service terminations. This option may
+-                                appear more than once in which case
+-                                the list of successful exit statuses
+-                                is merged. If the empty string is
+-                                assigned to this option, the list is
+-                                reset, all prior assignments of this
+-                                option will have no
+-                                effect.</para></listitem>
++                                separated by spaces. For example:
++				<programlisting>SuccessExitStatus=1 2 8 <constant>SIGKILL</constant></programlisting>
++				ensures that exit codes 1, 2, 8 and
++				the termination signal
++				<constant>SIGKILL</constant> are
++				considered clean service terminations.
++			        </para>
++
++				<para>Note that if a process has a
++				signal handler installed and exits by
++				calling
++				<citerefentry><refentrytitle>_exit</refentrytitle><manvolnum>2</manvolnum></citerefentry>
++				in response to a signal, the
++				information about the signal is lost.
++				Programs should instead perform cleanup and kill themselves with the same signal instead. See
++				<ulink url="http://www.cons.org/cracauer/sigint.html">Proper handling of SIGINT/SIGQUIT — How to be a proper program</ulink>.</para>
++
++				<para>This option may appear more than once
++				in which case the list of successful
++				exit statuses is merged. If the empty
++				string is assigned to this option, the
++				list is reset, all prior assignments
++				of this option will have no
++				effect.</para></listitem>
+                         </varlistentry>
+ 
+                         <varlistentry>
diff --git a/SOURCES/0166-man-include-autoconf-snippet-in-daemon-7.patch b/SOURCES/0166-man-include-autoconf-snippet-in-daemon-7.patch
new file mode 100644
index 0000000..e6f0e03
--- /dev/null
+++ b/SOURCES/0166-man-include-autoconf-snippet-in-daemon-7.patch
@@ -0,0 +1,41 @@
+From f338abbfbc3e385dda57ebc22769e54ab3f5edc8 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= <mgorny@gentoo.org>
+Date: Fri, 27 Dec 2013 23:44:27 -0500
+Subject: [PATCH] man: include autoconf snippet in daemon(7)
+
+https://bugs.freedesktop.org/show_bug.cgi?id=40446
+---
+ man/daemon.xml | 20 ++++++++++++++------
+ 1 file changed, 14 insertions(+), 6 deletions(-)
+
+diff --git a/man/daemon.xml b/man/daemon.xml
+index 1fe4546..105826a 100644
+--- a/man/daemon.xml
++++ b/man/daemon.xml
+@@ -765,12 +765,20 @@
+ 
+                         <programlisting>PKG_PROG_PKG_CONFIG
+ AC_ARG_WITH([systemdsystemunitdir],
+-        AS_HELP_STRING([--with-systemdsystemunitdir=DIR], [Directory for systemd service files]),
+-        [], [with_systemdsystemunitdir=$($PKG_CONFIG --variable=systemdsystemunitdir systemd)])
+-if test "x$with_systemdsystemunitdir" != xno; then
+-        AC_SUBST([systemdsystemunitdir], [$with_systemdsystemunitdir])
+-fi
+-AM_CONDITIONAL(HAVE_SYSTEMD, [test -n "$with_systemdsystemunitdir" -a "x$with_systemdsystemunitdir" != xno ])</programlisting>
++     AS_HELP_STRING([--with-systemdsystemunitdir=DIR], [Directory for systemd service files]),,
++     [with_systemdsystemunitdir=auto])
++AS_IF([test "x$with_systemdsystemunitdir" = "xyes" -o "x$with_systemdsystemunitdir" = "xauto"], [
++     def_systemdsystemunitdir=$($PKG_CONFIG --variable=systemdsystemunitdir systemd)
++
++     AS_IF([test "x$def_systemdsystemunitdir" = "x"],
++         [AS_IF([test "x$with_systemdsystemunitdir" = "xyes"],
++                [AC_MSG_ERROR([systemd support requested but pkg-config unable to query systemd package])])
++          with_systemdsystemunitdir=no],
++         [with_systemdsystemunitdir=$def_systemdsystemunitdir])])
++AS_IF([test "x$with_systemdsystemunitdir" != "xno"],
++      [AC_SUBST([systemdsystemunitdir], [$with_systemdsystemunitdir])])
++AM_CONDITIONAL(HAVE_SYSTEMD, [test "x$with_systemdsystemunitdir" != "xno"])
++</programlisting>
+ 
+                         <para>This snippet allows automatic
+                         installation of the unit files on systemd
diff --git a/SOURCES/0167-systemd-python-fix-setting-of-exception-codes.patch b/SOURCES/0167-systemd-python-fix-setting-of-exception-codes.patch
new file mode 100644
index 0000000..32dd320
--- /dev/null
+++ b/SOURCES/0167-systemd-python-fix-setting-of-exception-codes.patch
@@ -0,0 +1,325 @@
+From b22a215807207c1a6332a22505840478ac633afd Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Sun, 29 Dec 2013 23:39:28 -0500
+Subject: [PATCH] systemd-python: fix setting of exception codes
+
+The return value of 0 would be treated as failure by mistake,
+resulting in " SystemError: error return without exception set".
+The way that set_error() is used is changed to be the same
+everywhere.
+---
+ src/python-systemd/_daemon.c | 14 +++++-----
+ src/python-systemd/_reader.c | 63 ++++++++++++++++++++------------------------
+ 2 files changed, 35 insertions(+), 42 deletions(-)
+
+diff --git a/src/python-systemd/_daemon.c b/src/python-systemd/_daemon.c
+index f0ab16f..c6db69f 100644
+--- a/src/python-systemd/_daemon.c
++++ b/src/python-systemd/_daemon.c
+@@ -88,7 +88,7 @@ static PyObject* notify(PyObject *self, PyObject *args, PyObject *keywds) {
+ #endif
+ 
+         r = sd_notify(unset, msg);
+-        if (set_error(r, NULL, NULL))
++        if (set_error(r, NULL, NULL) < 0)
+                 return NULL;
+ 
+         return PyBool_FromLong(r);
+@@ -123,7 +123,7 @@ static PyObject* listen_fds(PyObject *self, PyObject *args, PyObject *keywds) {
+ #endif
+ 
+         r = sd_listen_fds(unset);
+-        if (set_error(r, NULL, NULL))
++        if (set_error(r, NULL, NULL) < 0)
+                 return NULL;
+ 
+         return long_FromLong(r);
+@@ -151,7 +151,7 @@ static PyObject* is_fifo(PyObject *self, PyObject *args) {
+ #endif
+ 
+         r = sd_is_fifo(fd, path);
+-        if (set_error(r, path, NULL))
++        if (set_error(r, path, NULL) < 0)
+                 return NULL;
+ 
+         return PyBool_FromLong(r);
+@@ -179,7 +179,7 @@ static PyObject* is_mq(PyObject *self, PyObject *args) {
+ #endif
+ 
+         r = sd_is_mq(fd, path);
+-        if (set_error(r, path, NULL))
++        if (set_error(r, path, NULL) < 0)
+                 return NULL;
+ 
+         return PyBool_FromLong(r);
+@@ -203,7 +203,7 @@ static PyObject* is_socket(PyObject *self, PyObject *args) {
+                 return NULL;
+ 
+         r = sd_is_socket(fd, family, type, listening);
+-        if (set_error(r, NULL, NULL))
++        if (set_error(r, NULL, NULL) < 0)
+                 return NULL;
+ 
+         return PyBool_FromLong(r);
+@@ -230,7 +230,7 @@ static PyObject* is_socket_inet(PyObject *self, PyObject *args) {
+         }
+ 
+         r = sd_is_socket_inet(fd, family, type, listening, (uint16_t) port);
+-        if (set_error(r, NULL, NULL))
++        if (set_error(r, NULL, NULL) < 0)
+                 return NULL;
+ 
+         return PyBool_FromLong(r);
+@@ -265,7 +265,7 @@ static PyObject* is_socket_unix(PyObject *self, PyObject *args) {
+ #endif
+ 
+         r = sd_is_socket_unix(fd, type, listening, path, length);
+-        if (set_error(r, path, NULL))
++        if (set_error(r, path, NULL) < 0)
+                 return NULL;
+ 
+         return PyBool_FromLong(r);
+diff --git a/src/python-systemd/_reader.c b/src/python-systemd/_reader.c
+index bc5db19..0c88926 100644
+--- a/src/python-systemd/_reader.c
++++ b/src/python-systemd/_reader.c
+@@ -206,8 +206,7 @@ PyDoc_STRVAR(Reader_reliable_fd__doc__,
+ static PyObject* Reader_reliable_fd(Reader *self, PyObject *args)
+ {
+     int r = sd_journal_reliable_fd(self->j);
+-    set_error(r, NULL, NULL);
+-    if (r < 0)
++    if (set_error(r, NULL, NULL) < 0)
+         return NULL;
+     return PyBool_FromLong(r);
+ }
+@@ -221,8 +220,7 @@ PyDoc_STRVAR(Reader_get_events__doc__,
+ static PyObject* Reader_get_events(Reader *self, PyObject *args)
+ {
+     int r = sd_journal_get_events(self->j);
+-    set_error(r, NULL, NULL);
+-    if (r < 0)
++    if (set_error(r, NULL, NULL) < 0)
+         return NULL;
+     return long_FromLong(r);
+ }
+@@ -242,8 +240,7 @@ static PyObject* Reader_get_timeout(Reader *self, PyObject *args)
+     uint64_t t;
+ 
+     r = sd_journal_get_timeout(self->j, &t);
+-    set_error(r, NULL, NULL);
+-    if (r < 0)
++    if (set_error(r, NULL, NULL) < 0)
+         return NULL;
+ 
+     if (t == (uint64_t) -1)
+@@ -265,8 +262,7 @@ static PyObject* Reader_get_timeout_ms(Reader *self, PyObject *args)
+     uint64_t t;
+ 
+     r = sd_journal_get_timeout(self->j, &t);
+-    set_error(r, NULL, NULL);
+-    if (r < 0)
++    if (set_error(r, NULL, NULL) < 0)
+         return NULL;
+ 
+     return absolute_timeout(t);
+@@ -304,7 +300,7 @@ static PyObject* Reader_get_usage(Reader *self, PyObject *args)
+     uint64_t bytes;
+ 
+     r = sd_journal_get_usage(self->j, &bytes);
+-    if (set_error(r, NULL, NULL))
++    if (set_error(r, NULL, NULL) < 0)
+         return NULL;
+ 
+     assert_cc(sizeof(unsigned long long) == sizeof(bytes));
+@@ -366,8 +362,7 @@ static PyObject* Reader_next(Reader *self, PyObject *args)
+         assert_not_reached("should not be here");
+     Py_END_ALLOW_THREADS
+ 
+-    set_error(r, NULL, NULL);
+-    if (r < 0)
++    if (set_error(r, NULL, NULL) < 0)
+         return NULL;
+     return PyBool_FromLong(r);
+ }
+@@ -445,7 +440,8 @@ static PyObject* Reader_get(Reader *self, PyObject *args)
+     if (r == -ENOENT) {
+         PyErr_SetString(PyExc_KeyError, field);
+         return NULL;
+-    } else if (set_error(r, NULL, "field name is not valid"))
++    }
++    if (set_error(r, NULL, "field name is not valid") < 0)
+         return NULL;
+ 
+     r = extract(msg, msg_len, NULL, &value);
+@@ -530,7 +526,7 @@ static PyObject* Reader_get_realtime(Reader *self, PyObject *args)
+     assert(!args);
+ 
+     r = sd_journal_get_realtime_usec(self->j, &timestamp);
+-    if (set_error(r, NULL, NULL))
++    if (set_error(r, NULL, NULL) < 0)
+         return NULL;
+ 
+     assert_cc(sizeof(unsigned long long) == sizeof(timestamp));
+@@ -555,7 +551,7 @@ static PyObject* Reader_get_monotonic(Reader *self, PyObject *args)
+     assert(!args);
+ 
+     r = sd_journal_get_monotonic_usec(self->j, &timestamp, &id);
+-    if (set_error(r, NULL, NULL))
++    if (set_error(r, NULL, NULL) < 0)
+         return NULL;
+ 
+     assert_cc(sizeof(unsigned long long) == sizeof(timestamp));
+@@ -598,8 +594,7 @@ static PyObject* Reader_add_match(Reader *self, PyObject *args, PyObject *keywds
+         return NULL;
+ 
+     r = sd_journal_add_match(self->j, match, match_len);
+-    set_error(r, NULL, "Invalid match");
+-    if (r < 0)
++    if (set_error(r, NULL, "Invalid match") < 0)
+             return NULL;
+ 
+     Py_RETURN_NONE;
+@@ -616,8 +611,7 @@ static PyObject* Reader_add_disjunction(Reader *self, PyObject *args)
+ {
+     int r;
+     r = sd_journal_add_disjunction(self->j);
+-    set_error(r, NULL, NULL);
+-    if (r < 0)
++    if (set_error(r, NULL, NULL) < 0)
+         return NULL;
+     Py_RETURN_NONE;
+ }
+@@ -633,8 +627,7 @@ static PyObject* Reader_add_conjunction(Reader *self, PyObject *args)
+ {
+     int r;
+     r = sd_journal_add_conjunction(self->j);
+-    set_error(r, NULL, NULL);
+-    if (r < 0)
++    if (set_error(r, NULL, NULL) < 0)
+         return NULL;
+     Py_RETURN_NONE;
+ }
+@@ -661,7 +654,7 @@ static PyObject* Reader_seek_head(Reader *self, PyObject *args)
+     Py_BEGIN_ALLOW_THREADS
+     r = sd_journal_seek_head(self->j);
+     Py_END_ALLOW_THREADS
+-    if (set_error(r, NULL, NULL))
++    if (set_error(r, NULL, NULL) < 0)
+         return NULL;
+     Py_RETURN_NONE;
+ }
+@@ -678,7 +671,7 @@ static PyObject* Reader_seek_tail(Reader *self, PyObject *args)
+     Py_BEGIN_ALLOW_THREADS
+     r = sd_journal_seek_tail(self->j);
+     Py_END_ALLOW_THREADS
+-    if (set_error(r, NULL, NULL))
++    if (set_error(r, NULL, NULL) < 0)
+         return NULL;
+     Py_RETURN_NONE;
+ }
+@@ -699,7 +692,7 @@ static PyObject* Reader_seek_realtime(Reader *self, PyObject *args)
+     Py_BEGIN_ALLOW_THREADS
+     r = sd_journal_seek_realtime_usec(self->j, timestamp);
+     Py_END_ALLOW_THREADS
+-    if (set_error(r, NULL, NULL))
++    if (set_error(r, NULL, NULL) < 0)
+         return NULL;
+     Py_RETURN_NONE;
+ }
+@@ -723,20 +716,20 @@ static PyObject* Reader_seek_monotonic(Reader *self, PyObject *args)
+ 
+     if (bootid) {
+         r = sd_id128_from_string(bootid, &id);
+-        if (set_error(r, NULL, "Invalid bootid"))
++        if (set_error(r, NULL, "Invalid bootid") < 0)
+             return NULL;
+     } else {
+         Py_BEGIN_ALLOW_THREADS
+         r = sd_id128_get_boot(&id);
+         Py_END_ALLOW_THREADS
+-        if (set_error(r, NULL, NULL))
++        if (set_error(r, NULL, NULL) < 0)
+             return NULL;
+     }
+ 
+     Py_BEGIN_ALLOW_THREADS
+     r = sd_journal_seek_monotonic_usec(self->j, id, timestamp);
+     Py_END_ALLOW_THREADS
+-    if (set_error(r, NULL, NULL))
++    if (set_error(r, NULL, NULL) < 0)
+         return NULL;
+ 
+     Py_RETURN_NONE;
+@@ -809,7 +802,7 @@ static PyObject* Reader_seek_cursor(Reader *self, PyObject *args)
+     Py_BEGIN_ALLOW_THREADS
+     r = sd_journal_seek_cursor(self->j, cursor);
+     Py_END_ALLOW_THREADS
+-    if (set_error(r, NULL, "Invalid cursor"))
++    if (set_error(r, NULL, "Invalid cursor") < 0)
+         return NULL;
+     Py_RETURN_NONE;
+ }
+@@ -828,7 +821,7 @@ static PyObject* Reader_get_cursor(Reader *self, PyObject *args)
+     assert(!args);
+ 
+     r = sd_journal_get_cursor(self->j, &cursor);
+-    if (set_error(r, NULL, NULL))
++    if (set_error(r, NULL, NULL) < 0)
+         return NULL;
+ 
+     return unicode_FromString(cursor);
+@@ -851,8 +844,7 @@ static PyObject* Reader_test_cursor(Reader *self, PyObject *args)
+         return NULL;
+ 
+     r = sd_journal_test_cursor(self->j, cursor);
+-    set_error(r, NULL, NULL);
+-    if (r < 0)
++    if (set_error(r, NULL, NULL) < 0)
+         return NULL;
+ 
+     return PyBool_FromLong(r);
+@@ -876,7 +868,7 @@ static PyObject* Reader_query_unique(Reader *self, PyObject *args)
+     Py_BEGIN_ALLOW_THREADS
+     r = sd_journal_query_unique(self->j, query);
+     Py_END_ALLOW_THREADS
+-    if (set_error(r, NULL, "Invalid field name"))
++    if (set_error(r, NULL, "Invalid field name") < 0)
+         return NULL;
+ 
+     value_set = PySet_New(0);
+@@ -930,7 +922,8 @@ static PyObject* Reader_get_catalog(Reader *self, PyObject *args)
+         else
+             set_error(r, NULL, NULL);
+         return NULL;
+-    } else if (set_error(r, NULL, NULL))
++    }
++    if (set_error(r, NULL, NULL) < 0)
+         return NULL;
+ 
+     return unicode_FromString(msg);
+@@ -955,13 +948,13 @@ static PyObject* get_catalog(PyObject *self, PyObject *args)
+         return NULL;
+ 
+     r = sd_id128_from_string(id_, &id);
+-    if (set_error(r, NULL, "Invalid id128"))
++    if (set_error(r, NULL, "Invalid id128") < 0)
+         return NULL;
+ 
+     Py_BEGIN_ALLOW_THREADS
+     r = sd_journal_get_catalog_for_message_id(id, &msg);
+     Py_END_ALLOW_THREADS
+-    if (set_error(r, NULL, NULL))
++    if (set_error(r, NULL, NULL) < 0)
+         return NULL;
+ 
+     return unicode_FromString(msg);
+@@ -979,7 +972,7 @@ static PyObject* Reader_get_data_threshold(Reader *self, void *closure)
+     int r;
+ 
+     r = sd_journal_get_data_threshold(self->j, &cvalue);
+-    if (set_error(r, NULL, NULL))
++    if (set_error(r, NULL, NULL) < 0)
+         return NULL;
+ 
+     return long_FromSize_t(cvalue);
diff --git a/SOURCES/0168-systemd-python-fix-listen_fds-under-Python-2.patch b/SOURCES/0168-systemd-python-fix-listen_fds-under-Python-2.patch
new file mode 100644
index 0000000..46d4dd1
--- /dev/null
+++ b/SOURCES/0168-systemd-python-fix-listen_fds-under-Python-2.patch
@@ -0,0 +1,22 @@
+From 9135ee7824ab7f645488e9fa163eda49d4d2b12e Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Mon, 30 Dec 2013 00:01:00 -0500
+Subject: [PATCH] systemd-python: fix listen_fds under Python 2
+
+---
+ src/python-systemd/_daemon.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/python-systemd/_daemon.c b/src/python-systemd/_daemon.c
+index c6db69f..3982e85 100644
+--- a/src/python-systemd/_daemon.c
++++ b/src/python-systemd/_daemon.c
+@@ -114,7 +114,7 @@ static PyObject* listen_fds(PyObject *self, PyObject *args, PyObject *keywds) {
+ #else
+         PyObject *obj = NULL;
+         if (!PyArg_ParseTupleAndKeywords(args, keywds, "|O:_listen_fds",
+-                                         (char**) kwlist, &unset, &obj))
++                                         (char**) kwlist, &obj))
+                 return NULL;
+         if (obj != NULL)
+                 unset = PyObject_IsTrue(obj);
diff --git a/SOURCES/0169-man-expand-on-some-more-subtle-points-in-systemd.soc.patch b/SOURCES/0169-man-expand-on-some-more-subtle-points-in-systemd.soc.patch
new file mode 100644
index 0000000..064a939
--- /dev/null
+++ b/SOURCES/0169-man-expand-on-some-more-subtle-points-in-systemd.soc.patch
@@ -0,0 +1,120 @@
+From 6fe43c70ac008feaf26f49420c559565e3b50528 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Mon, 30 Dec 2013 00:11:30 -0500
+Subject: [PATCH] man: expand on some more subtle points in systemd.socket(5)
+
+http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=727708#1694
+---
+ man/systemd.socket.xml | 67 ++++++++++++++++++++++++++++++++++++--------------
+ 1 file changed, 49 insertions(+), 18 deletions(-)
+
+diff --git a/man/systemd.socket.xml b/man/systemd.socket.xml
+index ac3127d..570a6fb 100644
+--- a/man/systemd.socket.xml
++++ b/man/systemd.socket.xml
+@@ -85,21 +85,26 @@
+                 processes of the socket.</para>
+ 
+                 <para>For each socket file a matching service file
+-                (see
++                must exist, describing the service to start on
++                incoming traffic on the socket (see
+                 <citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+-                for details) must exist, describing the service to
+-                start on incoming traffic on the socket. Depending on
+-                the setting of <option>Accept=</option> (see below),
+-                this must either be named like the socket unit, but
+-                with the suffix replaced; or it must be a template
+-                file named the same way. Example: a socket file
++                for more information about .service files). The name
++                of the .service unit is by default the same as the
++                name of the .socket unit, but can be altered with
++                <option>Service=</option> option described below.
++                Depending on the setting of <option>Accept=</option>
++                option described below, this .service unit must either
++                be named like the .socket unit, but with the suffix
++                replaced, unless overridden with
++                <option>Service=</option>; or it must be a template
++                unit named the same way. Example: a socket file
+                 <filename>foo.socket</filename> needs a matching
+                 service <filename>foo.service</filename> if
+                 <option>Accept=false</option> is set. If
+-                <option>Accept=true</option> is set, a service template
+-                file <filename>foo@.service</filename> must exist from
+-                which services are instantiated for each incoming
+-                connection.</para>
++                <option>Accept=true</option> is set, a service
++                template file <filename>foo@.service</filename> must
++                exist from which services are instantiated for each
++                incoming connection.</para>
+ 
+                 <para>Unless <varname>DefaultDependencies=</varname>
+                 is set to <option>false</option>, socket units will
+@@ -116,9 +121,21 @@
+                 boot or late system shutdown should disable this
+                 option.</para>
+ 
++		<para>Socket units will have a
++		<varname>Before=</varname> dependency on the service
++		which they trigger added implicitly. No implicit
++		<varname>WantedBy=</varname> or
++		<varname>RequiredBy=</varname> dependency from the
++		socket to the service is added. This means that the
++		service may be started without the socket, in which
++		case it must be able to open sockets by itself. To
++		prevent this, an explicit <varname>Requires=</varname>
++		dependency may be added.</para>
++
+                 <para>Socket units may be used to implement on-demand
+                 starting of services, as well as parallelized starting
+-                of services.</para>
++                of services. See the blog stories linked at the end
++                for introduction.</para>
+ 
+                 <para>Note that the daemon software configured for
+                 socket activation with socket units needs to be able
+@@ -221,12 +238,23 @@
+                                 of any of these options will have no
+                                 effect.</para>
+ 
++                                <para>It is also possible to have more
++                                than one socket unit for the same
++                                service when using
++                                <varname>Service=</varname>, and the
++                                service will receive all the sockets
++                                configured in all the socket units.
++                                Sockets configured in one unit are
++                                passed in the order of configuration,
++                                but no ordering between socket units
++                                is specified.</para>
++
+                                 <para>If an IP address is used here,
+                                 it is often desirable to listen on it
+                                 before the interface it is configured
+                                 on is up and running, and even
+                                 regardless of whether it will be up and
+-                                running ever at all. To deal with this
++                                running at any point. To deal with this
+                                 it is recommended to set the
+                                 <varname>FreeBind=</varname> option
+                                 described below.</para></listitem>
+@@ -687,11 +715,14 @@
+                                 <term><varname>Service=</varname></term>
+                                 <listitem><para>Specifies the service
+                                 unit name to activate on incoming
+-                                traffic. This defaults to the service
+-                                that bears the same name as the socket
+-                                (ignoring the different suffixes). In
+-                                most cases it should not be necessary
+-                                to use this option.</para></listitem>
++                                traffic. This setting is only allowed
++                                for sockets with
++                                <varname>Accept=no</varname>. It
++                                defaults to the service that bears the
++                                same name as the socket (with the
++                                suffix replaced). In most cases it
++                                should not be necessary to use this
++                                option.</para></listitem>
+                         </varlistentry>
+ 
+                 </variablelist>
diff --git a/SOURCES/0170-tmpfiles-rename-unsafe-to-boot.patch b/SOURCES/0170-tmpfiles-rename-unsafe-to-boot.patch
new file mode 100644
index 0000000..c8ac916
--- /dev/null
+++ b/SOURCES/0170-tmpfiles-rename-unsafe-to-boot.patch
@@ -0,0 +1,119 @@
+From 81e897b916baa556c7f0ef7bceedb5b73d550bad Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Mon, 30 Dec 2013 13:00:38 -0500
+Subject: [PATCH] tmpfiles: rename --unsafe to --boot
+
+As suggested by Kay, it is better to describe what is done,
+not what might happen.
+---
+ man/systemd-tmpfiles.xml                |  2 +-
+ man/tmpfiles.d.xml                      |  4 ++--
+ src/tmpfiles/tmpfiles.c                 | 14 +++++++-------
+ units/systemd-tmpfiles-setup.service.in |  2 +-
+ 4 files changed, 11 insertions(+), 11 deletions(-)
+
+diff --git a/man/systemd-tmpfiles.xml b/man/systemd-tmpfiles.xml
+index c678031..64f9cf9 100644
+--- a/man/systemd-tmpfiles.xml
++++ b/man/systemd-tmpfiles.xml
+@@ -133,7 +133,7 @@
+                                 removed.</para></listitem>
+                         </varlistentry>
+                         <varlistentry>
+-                                <term><option>--unsafe</option></term>
++                                <term><option>--boot</option></term>
+                                 <listitem><para>Also execute lines
+                                 with an exclamation mark.
+                                 </para></listitem>
+diff --git a/man/tmpfiles.d.xml b/man/tmpfiles.d.xml
+index ed88751..8267ffc 100644
+--- a/man/tmpfiles.d.xml
++++ b/man/tmpfiles.d.xml
+@@ -273,7 +273,7 @@ L    /tmp/foobar -    -    -    -   /dev/null</programlisting>
+                         execute at any time, e.g. on package upgrades.
+                         <command>systemd-tmpfiles</command> will
+                         execute line with an exclamation mark only if
+-                        option <option>--unsafe</option> is given.
++                        option <option>--boot</option> is given.
+                         </para>
+ 
+                         <para>For example:
+@@ -286,7 +286,7 @@ r! /tmp/.X[0-9]*-lock
+                         </programlisting>
+                         The second line in contrast to the first one
+                         would break a running system, and will only be
+-                        executed with <option>--unsafe</option>.</para>
++                        executed with <option>--boot</option>.</para>
+                 </refsect2>
+ 
+                 <refsect2>
+diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c
+index 1983717..67b13bc 100644
+--- a/src/tmpfiles/tmpfiles.c
++++ b/src/tmpfiles/tmpfiles.c
+@@ -106,7 +106,7 @@ static Set *unix_sockets = NULL;
+ static bool arg_create = false;
+ static bool arg_clean = false;
+ static bool arg_remove = false;
+-static bool arg_unsafe = false;
++static bool arg_boot = false;
+ 
+ static char **include_prefixes = NULL;
+ static char **exclude_prefixes = NULL;
+@@ -1100,7 +1100,7 @@ static int parse_line(const char *fname, unsigned line, const char *buffer) {
+         if (strlen(action) > 2 || (strlen(action) > 1 && action[1] != '!')) {
+                 log_error("[%s:%u] Unknown modifier '%s'", fname, line, action);
+                 return -EINVAL;
+-        } else if (strlen(action) > 1 && !arg_unsafe)
++        } else if (strlen(action) > 1 && !arg_boot)
+                 return 0;
+ 
+         type = action[0];
+@@ -1275,7 +1275,7 @@ static int help(void) {
+                "     --create               Create marked files/directories\n"
+                "     --clean                Clean up marked directories\n"
+                "     --remove               Remove marked files/directories\n"
+-               "     --unsafe               Execute actions only safe at boot\n"
++               "     --boot                 Execute actions only safe at boot\n"
+                "     --prefix=PATH          Only apply rules that apply to paths with the specified prefix\n"
+                "     --exclude-prefix=PATH  Ignore rules that apply to paths with the specified prefix\n",
+                program_invocation_short_name);
+@@ -1289,7 +1289,7 @@ static int parse_argv(int argc, char *argv[]) {
+                 ARG_CREATE,
+                 ARG_CLEAN,
+                 ARG_REMOVE,
+-                ARG_UNSAFE,
++                ARG_BOOT,
+                 ARG_PREFIX,
+                 ARG_EXCLUDE_PREFIX,
+         };
+@@ -1299,7 +1299,7 @@ static int parse_argv(int argc, char *argv[]) {
+                 { "create",         no_argument,         NULL, ARG_CREATE         },
+                 { "clean",          no_argument,         NULL, ARG_CLEAN          },
+                 { "remove",         no_argument,         NULL, ARG_REMOVE         },
+-                { "unsafe",         no_argument,         NULL, ARG_UNSAFE         },
++                { "boot",           no_argument,         NULL, ARG_BOOT           },
+                 { "prefix",         required_argument,   NULL, ARG_PREFIX         },
+                 { "exclude-prefix", required_argument,   NULL, ARG_EXCLUDE_PREFIX },
+                 { NULL,             0,                   NULL, 0                  }
+@@ -1330,8 +1330,8 @@ static int parse_argv(int argc, char *argv[]) {
+                         arg_remove = true;
+                         break;
+ 
+-                case ARG_UNSAFE:
+-                        arg_unsafe = true;
++                case ARG_BOOT:
++                        arg_boot = true;
+                         break;
+ 
+                 case ARG_PREFIX:
+diff --git a/units/systemd-tmpfiles-setup.service.in b/units/systemd-tmpfiles-setup.service.in
+index c2dcae0..01043b7 100644
+--- a/units/systemd-tmpfiles-setup.service.in
++++ b/units/systemd-tmpfiles-setup.service.in
+@@ -24,4 +24,4 @@ RefuseManualStop=yes
+ [Service]
+ Type=oneshot
+ RemainAfterExit=yes
+-ExecStart=@rootbindir@/systemd-tmpfiles --create --remove --unsafe --exclude-prefix=/dev
++ExecStart=@rootbindir@/systemd-tmpfiles --create --remove --boot --exclude-prefix=/dev
diff --git a/SOURCES/0171-sleep-config-Dereference-pointer-before-check-for-NU.patch b/SOURCES/0171-sleep-config-Dereference-pointer-before-check-for-NU.patch
new file mode 100644
index 0000000..0812944
--- /dev/null
+++ b/SOURCES/0171-sleep-config-Dereference-pointer-before-check-for-NU.patch
@@ -0,0 +1,47 @@
+From 44d380fa1042c56eee959c8cf8477aa62b8d8a0e Mon Sep 17 00:00:00 2001
+From: Stefan Beller <stefanbeller@googlemail.com>
+Date: Mon, 30 Dec 2013 17:43:52 +0100
+Subject: [PATCH] sleep-config: Dereference pointer before check for NULL
+
+This fixes a bug pointed out by http://css.csail.mit.edu/stack/
+(Optimization-unstable code)
+It is a similar fix as f146f5e159 (2013-12-30, core:
+Forgot to dereference pointer when checking for NULL)
+
+To explain this bug consider the following similar, but simpler code:
+	if (!p)
+		free(*p)
+
+Assume the if condition evaluates to true, then we will access *p,
+which means the compiler can assume p is a valid pointer, so it could
+dereference p and use the value *p.
+Assuming p as a valid pointer, !p will be false.
+But initally we assumed the condition evaluates to true.
+
+By this reasoning the optimizing compiler can deduce, we have dead code.
+("The if will never be taken, as *p must be valid, because otherwise
+accessing *p inside the if would segfault")
+
+This led to an error message of the static code checker, so I checked the
+code in question.
+
+As we access *modes and *states before the check in the changed line of
+this patch, I assume the line to be wrong and we actually wanted to check
+for *modes and *states being both non null.
+---
+ src/shared/sleep-config.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/shared/sleep-config.c b/src/shared/sleep-config.c
+index d76e3ad..b2a0787 100644
+--- a/src/shared/sleep-config.c
++++ b/src/shared/sleep-config.c
+@@ -94,7 +94,7 @@ int parse_sleep_config(const char *verb, char ***modes, char ***states) {
+         } else
+                 assert_not_reached("what verb");
+ 
+-        if (!modes || !states) {
++        if (!*modes || !*states) {
+                 strv_free(*modes);
+                 strv_free(*states);
+                 return log_oom();
diff --git a/SOURCES/0172-sleep-config-fix-double-free.patch b/SOURCES/0172-sleep-config-fix-double-free.patch
new file mode 100644
index 0000000..439932b
--- /dev/null
+++ b/SOURCES/0172-sleep-config-fix-double-free.patch
@@ -0,0 +1,99 @@
+From 9835435400e945b294872a525aacf99a5ad5bcf5 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Tue, 31 Dec 2013 11:23:58 -0500
+Subject: [PATCH] sleep-config: fix double free
+
+Before 34a3baa4d 'sleep-config: Dereference pointer before check for NULL'
+oom conditions would not be detected properly. After that commit, a double
+free was performed.
+
+Rework the whole function to be easier to understand, and also replace
+strv_split_nulstr with strv_new, since we know the strings anyway.
+---
+ src/shared/sleep-config.c | 38 ++++++++++++++++++++------------------
+ 1 file changed, 20 insertions(+), 18 deletions(-)
+
+diff --git a/src/shared/sleep-config.c b/src/shared/sleep-config.c
+index b2a0787..70a0896 100644
+--- a/src/shared/sleep-config.c
++++ b/src/shared/sleep-config.c
+@@ -28,11 +28,14 @@
+ #include "strv.h"
+ #include "util.h"
+ 
+-int parse_sleep_config(const char *verb, char ***modes, char ***states) {
++#define USE(x, y) do{ (x) = (y); (y) = NULL; } while(0)
++
++int parse_sleep_config(const char *verb, char ***_modes, char ***_states) {
+         _cleanup_strv_free_ char
+                 **suspend_mode = NULL, **suspend_state = NULL,
+                 **hibernate_mode = NULL, **hibernate_state = NULL,
+                 **hybrid_mode = NULL, **hybrid_state = NULL;
++        char **modes, **states;
+ 
+         const ConfigTableItem items[] = {
+                 { "Sleep",   "SuspendMode",      config_parse_strv,  0, &suspend_mode  },
+@@ -59,47 +62,46 @@ int parse_sleep_config(const char *verb, char ***modes, char ***states) {
+ 
+         if (streq(verb, "suspend")) {
+                 /* empty by default */
+-                *modes = suspend_mode;
++                USE(modes, suspend_mode);
+ 
+                 if (suspend_state)
+-                        *states = suspend_state;
++                        USE(states, suspend_state);
+                 else
+-                        *states = strv_split_nulstr("mem\0standby\0freeze\0");
++                        states = strv_new("mem", "standby", "freeze", NULL);
+ 
+-                suspend_mode = suspend_state = NULL;
+         } else if (streq(verb, "hibernate")) {
+                 if (hibernate_mode)
+-                        *modes = hibernate_mode;
++                        USE(modes, hibernate_mode);
+                 else
+-                        *modes = strv_split_nulstr("platform\0shutdown\0");
++                        modes = strv_new("platform", "shutdown", NULL);
+ 
+                 if (hibernate_state)
+-                        *states = hibernate_state;
++                        USE(states, hibernate_state);
+                 else
+-                        *states = strv_split_nulstr("disk\0");
++                        states = strv_new("disk", NULL);
+ 
+-                hibernate_mode = hibernate_state = NULL;
+         } else if (streq(verb, "hybrid-sleep")) {
+                 if (hybrid_mode)
+-                        *modes = hybrid_mode;
++                        USE(modes, hybrid_mode);
+                 else
+-                        *modes = strv_split_nulstr("suspend\0platform\0shutdown\0");
++                        modes = strv_new("suspend", "platform", "shutdown", NULL);
+ 
+                 if (hybrid_state)
+-                        *states = hybrid_state;
++                        USE(states, hybrid_state);
+                 else
+-                        *states = strv_split_nulstr("disk\0");
++                        states = strv_new("disk", NULL);
+ 
+-                hybrid_mode = hybrid_state = NULL;
+         } else
+                 assert_not_reached("what verb");
+ 
+-        if (!*modes || !*states) {
+-                strv_free(*modes);
+-                strv_free(*states);
++        if ((!modes && !streq(verb, "suspend")) || !states) {
++                strv_free(modes);
++                strv_free(states);
+                 return log_oom();
+         }
+ 
++        *_modes = modes;
++        *_states = states;
+         return 0;
+ }
+ 
diff --git a/SOURCES/0173-core-service-check-if-mainpid-matches-only-if-it-is-.patch b/SOURCES/0173-core-service-check-if-mainpid-matches-only-if-it-is-.patch
new file mode 100644
index 0000000..729d377
--- /dev/null
+++ b/SOURCES/0173-core-service-check-if-mainpid-matches-only-if-it-is-.patch
@@ -0,0 +1,26 @@
+From 32e036b9baa6e9c9ecc90ae5db558db0a93847b2 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Mon, 30 Dec 2013 11:21:56 -0500
+Subject: [PATCH] core/service: check if mainpid matches only if it is set
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1047304
+
+Conflicts:
+	src/core/service.c
+---
+ src/core/service.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/core/service.c b/src/core/service.c
+index 62ae8f0..f0acda1 100644
+--- a/src/core/service.c
++++ b/src/core/service.c
+@@ -3400,7 +3400,7 @@ static void service_notify_message(Unit *u, pid_t pid, char **tags) {
+                 return;
+         }
+ 
+-        if (s->notify_access == NOTIFY_MAIN && pid != s->main_pid) {
++        if (s->notify_access == NOTIFY_MAIN && s->main_pid != 0 && pid != s->main_pid) {
+                 log_warning_unit(u->id,
+                                  "%s: Got notification message from PID %lu, but reception only permitted for PID %lu",
+                                  u->id, (unsigned long) pid, (unsigned long) s->main_pid);
diff --git a/SOURCES/0174-man-typo-fix.patch b/SOURCES/0174-man-typo-fix.patch
new file mode 100644
index 0000000..6b02abd
--- /dev/null
+++ b/SOURCES/0174-man-typo-fix.patch
@@ -0,0 +1,22 @@
+From 903086a167718d33ebb5e4f1825d1696e45ff1a5 Mon Sep 17 00:00:00 2001
+From: Thomas Hindoe Paaboel Andersen <phomes@gmail.com>
+Date: Sat, 4 Jan 2014 23:21:13 +0100
+Subject: [PATCH] man: typo fix
+
+---
+ man/systemd.time.xml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/man/systemd.time.xml b/man/systemd.time.xml
+index f438fa5..a837f23 100644
+--- a/man/systemd.time.xml
++++ b/man/systemd.time.xml
+@@ -222,7 +222,7 @@
+                 <para>In the date and time specifications, any
+                 component may be specified as <literal>*</literal> in
+                 which case any value will match. Alternatively, each
+-                component can be specified as list of values separated
++                component can be specified as a list of values separated
+                 by commas. Values may also be suffixed with
+                 <literal>/</literal> and a repetition value, which
+                 indicates that the value and all values plus multiples
diff --git a/SOURCES/0175-swap-remove-if-else-with-the-same-data-path.patch b/SOURCES/0175-swap-remove-if-else-with-the-same-data-path.patch
new file mode 100644
index 0000000..39753dd
--- /dev/null
+++ b/SOURCES/0175-swap-remove-if-else-with-the-same-data-path.patch
@@ -0,0 +1,29 @@
+From 6710995e2c264939da4d383b5d37724c46282cdc Mon Sep 17 00:00:00 2001
+From: Stefan Beller <stefanbeller@googlemail.com>
+Date: Fri, 3 Jan 2014 20:33:20 +0100
+Subject: [PATCH] swap: remove if/else with the same data path
+
+This was introduced in e1770af812 (2012-02-03, swap: replace failure
+boolean by result enum).
+
+This just removes unneeded lines of code, no functional change.
+---
+ src/core/swap.c | 5 +----
+ 1 file changed, 1 insertion(+), 4 deletions(-)
+
+diff --git a/src/core/swap.c b/src/core/swap.c
+index f295b65..727bb95 100644
+--- a/src/core/swap.c
++++ b/src/core/swap.c
+@@ -959,10 +959,7 @@ static void swap_sigchld_event(Unit *u, pid_t pid, int code, int status) {
+         case SWAP_DEACTIVATING_SIGKILL:
+         case SWAP_DEACTIVATING_SIGTERM:
+ 
+-                if (f == SWAP_SUCCESS)
+-                        swap_enter_dead(s, f);
+-                else
+-                        swap_enter_dead(s, f);
++                swap_enter_dead(s, f);
+                 break;
+ 
+         default:
diff --git a/SOURCES/0176-hwdb-update.patch b/SOURCES/0176-hwdb-update.patch
new file mode 100644
index 0000000..331e48b
--- /dev/null
+++ b/SOURCES/0176-hwdb-update.patch
@@ -0,0 +1,769 @@
+From 6dc222a83a577bfd29def018fb7a8c591b2d6761 Mon Sep 17 00:00:00 2001
+From: Marcel Holtmann <marcel@holtmann.org>
+Date: Sun, 5 Jan 2014 00:44:34 -0800
+Subject: [PATCH] hwdb: update
+
+Conflicts:
+	hwdb/20-sdio-vendor-model.hwdb
+---
+ hwdb/20-OUI.hwdb              |  97 +++++++++++++++++++++++++-
+ hwdb/20-pci-vendor-model.hwdb | 154 ++++++++++++++++++++++++++++++++++++++----
+ hwdb/20-usb-vendor-model.hwdb |   6 ++
+ 3 files changed, 241 insertions(+), 16 deletions(-)
+
+diff --git a/hwdb/20-OUI.hwdb b/hwdb/20-OUI.hwdb
+index 92b96ae..a51a00a 100644
+--- a/hwdb/20-OUI.hwdb
++++ b/hwdb/20-OUI.hwdb
+@@ -13627,6 +13627,12 @@ OUI:40D8551E2*
+ OUI:40D8551E3*
+  ID_OUI_FROM_DATABASE=Mega Electronics Ltd
+ 
++OUI:40D8551E4*
++ ID_OUI_FROM_DATABASE=STEK Ltd
++
++OUI:40D855EE6*
++ ID_OUI_FROM_DATABASE=Narinet, Inc.
++
+ OUI:000000*
+  ID_OUI_FROM_DATABASE=XEROX CORPORATION
+ 
+@@ -35222,7 +35228,7 @@ OUI:001C4C*
+  ID_OUI_FROM_DATABASE=Petrotest Instruments
+ 
+ OUI:001C4D*
+- ID_OUI_FROM_DATABASE=Zeemote Technology Inc. (part of Aplix).
++ ID_OUI_FROM_DATABASE=Aplix IP Holdings Corporation
+ 
+ OUI:001C4E*
+  ID_OUI_FROM_DATABASE=TASA International Limited
+@@ -52606,6 +52612,9 @@ OUI:08D42B*
+ OUI:08D5C0*
+  ID_OUI_FROM_DATABASE=Seers Technology Co., Ltd
+ 
++OUI:08D833*
++ ID_OUI_FROM_DATABASE=Shenzhen RF Technology Co,.Ltd
++
+ OUI:08E5DA*
+  ID_OUI_FROM_DATABASE=NANJING FUJITSU COMPUTER PRODUCTS CO.,LTD.
+ 
+@@ -53308,6 +53317,9 @@ OUI:1423D7*
+ OUI:142BD2*
+  ID_OUI_FROM_DATABASE=Armtel Ltd.
+ 
++OUI:142D27*
++ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
++
+ OUI:142D8B*
+  ID_OUI_FROM_DATABASE=Incipio Technologies, Inc
+ 
+@@ -53761,6 +53773,9 @@ OUI:18C451*
+ OUI:18C8E7*
+  ID_OUI_FROM_DATABASE=Shenzhen Hualistone Technology Co.,Ltd
+ 
++OUI:18CC23*
++ ID_OUI_FROM_DATABASE=Philio Technology Corporation
++
+ OUI:18D071*
+  ID_OUI_FROM_DATABASE=DASAN SMC, Inc.
+ 
+@@ -54688,6 +54703,9 @@ OUI:2838CF*
+ OUI:2839E7*
+  ID_OUI_FROM_DATABASE=Preceno Technology Pte.Ltd.
+ 
++OUI:283B96*
++ ID_OUI_FROM_DATABASE=Cool Control LTD
++
+ OUI:283CE4*
+  ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
+ 
+@@ -54907,6 +54925,9 @@ OUI:28E14C*
+ OUI:28E297*
+  ID_OUI_FROM_DATABASE=Shanghai InfoTM Microelectronics Co.,Ltd.
+ 
++OUI:28E347*
++ ID_OUI_FROM_DATABASE=Liteon Technology Corporation
++
+ OUI:28E608*
+  ID_OUI_FROM_DATABASE=Tokheim
+ 
+@@ -55717,6 +55738,9 @@ OUI:34E0CF*
+ OUI:34E0D7*
+  ID_OUI_FROM_DATABASE=DONGGUAN QISHENG ELECTRONICS INDUSTRIAL CO., LTD
+ 
++OUI:34E2FD*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:34EF44*
+  ID_OUI_FROM_DATABASE=2Wire
+ 
+@@ -56023,6 +56047,9 @@ OUI:3C1040*
+ OUI:3C106F*
+  ID_OUI_FROM_DATABASE=ALBAHITH TECHNOLOGIES
+ 
++OUI:3C15C2*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:3C15EA*
+  ID_OUI_FROM_DATABASE=TESCOM CO., LTD.
+ 
+@@ -56227,6 +56254,9 @@ OUI:3CC99E*
+ OUI:3CCA87*
+  ID_OUI_FROM_DATABASE=Iders Incorporated
+ 
++OUI:3CCD93*
++ ID_OUI_FROM_DATABASE=LG ELECTRONICS INC
++
+ OUI:3CCE73*
+  ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
+ 
+@@ -56408,7 +56438,7 @@ OUI:40667A*
+  ID_OUI_FROM_DATABASE=mediola - connected living AG
+ 
+ OUI:406826*
+- ID_OUI_FROM_DATABASE=Thales Optronics Limited
++ ID_OUI_FROM_DATABASE=Thales UK Limited
+ 
+ OUI:406AAB*
+  ID_OUI_FROM_DATABASE=RIM
+@@ -57436,6 +57466,9 @@ OUI:5048EB*
+ OUI:504A5E*
+  ID_OUI_FROM_DATABASE=Masimo Corporation
+ 
++OUI:504A6E*
++ ID_OUI_FROM_DATABASE=NETGEAR INC.,
++
+ OUI:504F94*
+  ID_OUI_FROM_DATABASE=Loxone Electronics GmbH
+ 
+@@ -58480,6 +58513,9 @@ OUI:6045BD*
+ OUI:604616*
+  ID_OUI_FROM_DATABASE=XIAMEN VANN INTELLIGENT CO., LTD
+ 
++OUI:6047D4*
++ ID_OUI_FROM_DATABASE=FORICS Electronic Technology Co., Ltd.
++
+ OUI:604A1C*
+  ID_OUI_FROM_DATABASE=SUYIN Corporation
+ 
+@@ -58630,6 +58666,9 @@ OUI:60D30A*
+ OUI:60D819*
+  ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+ 
++OUI:60D9C7*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:60DA23*
+  ID_OUI_FROM_DATABASE=Estech Co.,Ltd
+ 
+@@ -58849,6 +58888,9 @@ OUI:6473E2*
+ OUI:647657*
+  ID_OUI_FROM_DATABASE=Innovative Security Designs
+ 
++OUI:6476BA*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:647791*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
+@@ -58882,6 +58924,9 @@ OUI:6487D7*
+ OUI:6488FF*
+  ID_OUI_FROM_DATABASE=Sichuan Changhong Electric Ltd.
+ 
++OUI:648D9E*
++ ID_OUI_FROM_DATABASE=IVT Electronic Co.,Ltd
++
+ OUI:64995D*
+  ID_OUI_FROM_DATABASE=LGE
+ 
+@@ -59161,6 +59206,9 @@ OUI:687924*
+ OUI:6879ED*
+  ID_OUI_FROM_DATABASE=SHARP Corporation
+ 
++OUI:687CC8*
++ ID_OUI_FROM_DATABASE=Measurement Systems S. de R.L.
++
+ OUI:687CD5*
+  ID_OUI_FROM_DATABASE=Y Soft Corporation, a.s.
+ 
+@@ -59425,6 +59473,9 @@ OUI:6C6F18*
+ OUI:6C7039*
+  ID_OUI_FROM_DATABASE=Novar GmbH
+ 
++OUI:6C709F*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:6C71D9*
+  ID_OUI_FROM_DATABASE=AzureWave Technologies, Inc
+ 
+@@ -59779,6 +59830,9 @@ OUI:708B78*
+ OUI:708D09*
+  ID_OUI_FROM_DATABASE=Nokia Corporation
+ 
++OUI:709383*
++ ID_OUI_FROM_DATABASE=Intelligent Optical Network High Tech CO.,LTD.
++
+ OUI:7093F8*
+  ID_OUI_FROM_DATABASE=Space Monkey, Inc.
+ 
+@@ -60166,6 +60220,9 @@ OUI:74F612*
+ OUI:74F726*
+  ID_OUI_FROM_DATABASE=Neuron Robotics
+ 
++OUI:74F85D*
++ ID_OUI_FROM_DATABASE=Berkeley Nucleonics Corp
++
+ OUI:74FDA0*
+  ID_OUI_FROM_DATABASE=Compupal (Group) Corporation
+ 
+@@ -60862,6 +60919,9 @@ OUI:7CFADF*
+ OUI:7CFE28*
+  ID_OUI_FROM_DATABASE=Salutron Inc.
+ 
++OUI:7CFF62*
++ ID_OUI_FROM_DATABASE=Huizhou Super Electron Technology Co.,Ltd.
++
+ OUI:80000B*
+  ID_OUI_FROM_DATABASE=Intel Corporate
+ 
+@@ -61105,6 +61165,9 @@ OUI:80D019*
+ OUI:80D18B*
+  ID_OUI_FROM_DATABASE=Hangzhou I'converge Technology Co.,Ltd
+ 
++OUI:80D433*
++ ID_OUI_FROM_DATABASE=LzLabs GmbH
++
+ OUI:80D733*
+  ID_OUI_FROM_DATABASE=QSR Automations, Inc.
+ 
+@@ -61336,6 +61399,9 @@ OUI:84ACA4*
+ OUI:84AF1F*
+  ID_OUI_FROM_DATABASE=Beat System Service Co,. Ltd.
+ 
++OUI:84B59C*
++ ID_OUI_FROM_DATABASE=Juniper networks
++
+ OUI:84C2E4*
+  ID_OUI_FROM_DATABASE=Jiangsu Qinheng Co., Ltd.
+ 
+@@ -61402,6 +61468,9 @@ OUI:880355*
+ OUI:880905*
+  ID_OUI_FROM_DATABASE=MTMCommunications
+ 
++OUI:880FB6*
++ ID_OUI_FROM_DATABASE=Jabil Circuits India Pvt Ltd,-EHTP unit
++
+ OUI:881036*
+  ID_OUI_FROM_DATABASE=Panodic(ShenZhen) Electronics Limted
+ 
+@@ -62605,6 +62674,9 @@ OUI:983000*
+ OUI:983071*
+  ID_OUI_FROM_DATABASE=DAIKYUNG VASCOM
+ 
++OUI:98349D*
++ ID_OUI_FROM_DATABASE=Krauss Maffei Technologies GmbH
++
+ OUI:983571*
+  ID_OUI_FROM_DATABASE=Sub10 Systems Ltd
+ 
+@@ -63061,6 +63133,9 @@ OUI:9CCAD9*
+ OUI:9CCD82*
+  ID_OUI_FROM_DATABASE=CHENG UEI PRECISION INDUSTRY CO.,LTD
+ 
++OUI:9CD21E*
++ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
++
+ OUI:9CD24B*
+  ID_OUI_FROM_DATABASE=zte corporation
+ 
+@@ -63358,6 +63433,9 @@ OUI:A0CEC8*
+ OUI:A0CF5B*
+  ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
+ 
++OUI:A0D12A*
++ ID_OUI_FROM_DATABASE=AXPRO Technology Inc.
++
+ OUI:A0D3C1*
+  ID_OUI_FROM_DATABASE=Hewlett Packard
+ 
+@@ -64366,6 +64444,9 @@ OUI:B05B1F*
+ OUI:B05CE5*
+  ID_OUI_FROM_DATABASE=Nokia Corporation
+ 
++OUI:B061C7*
++ ID_OUI_FROM_DATABASE=Ericsson-LG Enterprise
++
+ OUI:B06563*
+  ID_OUI_FROM_DATABASE=Shanghai Railway Communication Factory
+ 
+@@ -64684,6 +64765,9 @@ OUI:B46293*
+ OUI:B462AD*
+  ID_OUI_FROM_DATABASE=raytest GmbH
+ 
++OUI:B46698*
++ ID_OUI_FROM_DATABASE=Zealabs srl
++
+ OUI:B467E9*
+  ID_OUI_FROM_DATABASE=Qingdao GoerTek Technology Co., Ltd.
+ 
+@@ -65590,6 +65674,9 @@ OUI:C098E5*
+ OUI:C09C92*
+  ID_OUI_FROM_DATABASE=COBY
+ 
++OUI:C09D26*
++ ID_OUI_FROM_DATABASE=Topicon HK Lmd.
++
+ OUI:C09F42*
+  ID_OUI_FROM_DATABASE=Apple
+ 
+@@ -65833,6 +65920,9 @@ OUI:C45DD8*
+ OUI:C46044*
+  ID_OUI_FROM_DATABASE=Everex Electronics Limited
+ 
++OUI:C4626B*
++ ID_OUI_FROM_DATABASE=ZPT Vigantice
++
+ OUI:C462EA*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
+@@ -68605,6 +68695,9 @@ OUI:EC14F6*
+ OUI:EC172F*
+  ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO., LTD.
+ 
++OUI:EC1766*
++ ID_OUI_FROM_DATABASE=Research Centre Module
++
+ OUI:EC1A59*
+  ID_OUI_FROM_DATABASE=Belkin International Inc.
+ 
+diff --git a/hwdb/20-pci-vendor-model.hwdb b/hwdb/20-pci-vendor-model.hwdb
+index 6142dc8..7f833e3 100644
+--- a/hwdb/20-pci-vendor-model.hwdb
++++ b/hwdb/20-pci-vendor-model.hwdb
+@@ -4166,6 +4166,9 @@ pci:v00001002d00006600*
+ pci:v00001002d00006601*
+  ID_MODEL_FROM_DATABASE=Mars [Radeon HD 8730M]
+ 
++pci:v00001002d00006601sv0000103Csd00002100*
++ ID_MODEL_FROM_DATABASE=FirePro M4100
++
+ pci:v00001002d00006602*
+  ID_MODEL_FROM_DATABASE=Mars
+ 
+@@ -4185,10 +4188,22 @@ pci:v00001002d00006607*
+  ID_MODEL_FROM_DATABASE=Mars LE [Radeon HD 8530M]
+ 
+ pci:v00001002d00006610*
+- ID_MODEL_FROM_DATABASE=Oland XT [Radeon HD 8670/R7 250]
++ ID_MODEL_FROM_DATABASE=Oland XT [Radeon HD 8670 / R7 250]
+ 
+ pci:v00001002d00006611*
+- ID_MODEL_FROM_DATABASE=Oland [Radeon HD 8570]
++ ID_MODEL_FROM_DATABASE=Oland [Radeon HD 8570 / R7 240 OEM]
++
++pci:v00001002d00006611sv00001028sd0000210B*
++ ID_MODEL_FROM_DATABASE=Radeon R5 240 OEM
++
++pci:v00001002d00006611sv0000174Bsd00004248*
++ ID_MODEL_FROM_DATABASE=Radeon R7 240 OEM
++
++pci:v00001002d00006611sv0000174Bsd0000A240*
++ ID_MODEL_FROM_DATABASE=Radeon R7 240 OEM
++
++pci:v00001002d00006611sv00001B0Asd000090D3*
++ ID_MODEL_FROM_DATABASE=Radeon R7 240 OEM
+ 
+ pci:v00001002d00006613*
+  ID_MODEL_FROM_DATABASE=Oland PRO [Radeon R7 240]
+@@ -4224,7 +4239,7 @@ pci:v00001002d00006658*
+  ID_MODEL_FROM_DATABASE=Bonaire XTX [Radeon R7 260X]
+ 
+ pci:v00001002d0000665C*
+- ID_MODEL_FROM_DATABASE=Bonaire XT [Radeon HD 7790/8770]
++ ID_MODEL_FROM_DATABASE=Bonaire XT [Radeon HD 7790/8770 / R9 260 OEM]
+ 
+ pci:v00001002d0000665Csv00001043sd00000452*
+  ID_MODEL_FROM_DATABASE=Radeon HD 7790 DirectCU II OC
+@@ -4235,6 +4250,12 @@ pci:v00001002d0000665Csv00001462sd00002930*
+ pci:v00001002d0000665Csv00001462sd00002932*
+  ID_MODEL_FROM_DATABASE=Radeon HD 8770
+ 
++pci:v00001002d0000665Csv00001462sd00002934*
++ ID_MODEL_FROM_DATABASE=Radeon R9 260 OEM
++
++pci:v00001002d0000665Csv0000148Csd00009260*
++ ID_MODEL_FROM_DATABASE=Radeon R9 260 OEM
++
+ pci:v00001002d0000665Csv00001682sd00003310*
+  ID_MODEL_FROM_DATABASE=Radeon HD 7790 Black Edition 2 GB
+ 
+@@ -4817,9 +4838,21 @@ pci:v00001002d00006742sv0000148Csd00006570*
+ pci:v00001002d00006742sv00001682sd00006570*
+  ID_MODEL_FROM_DATABASE=Turks [Radeon HD 6570]
+ 
++pci:v00001002d00006742sv0000174Bsd00005570*
++ ID_MODEL_FROM_DATABASE=Turks [Radeon HD 5570]
++
+ pci:v00001002d00006742sv0000174Bsd00006570*
+  ID_MODEL_FROM_DATABASE=Turks [Radeon HD 6570]
+ 
++pci:v00001002d00006742sv0000174Bsd00007570*
++ ID_MODEL_FROM_DATABASE=Turks [Radeon HD 7570]
++
++pci:v00001002d00006742sv0000174Bsd00008510*
++ ID_MODEL_FROM_DATABASE=Turks [Radeon HD 8510]
++
++pci:v00001002d00006742sv0000174Bsd00008570*
++ ID_MODEL_FROM_DATABASE=Turks [Radeon HD 8570]
++
+ pci:v00001002d00006742sv00001787sd00006570*
+  ID_MODEL_FROM_DATABASE=Turks [Radeon HD 6570]
+ 
+@@ -5541,13 +5574,13 @@ pci:v00001002d00006770sv000017AAsd00003658*
+  ID_MODEL_FROM_DATABASE=Radeon HD 7470A
+ 
+ pci:v00001002d00006771*
+- ID_MODEL_FROM_DATABASE=Caicos XTX [Radeon HD 8490]
++ ID_MODEL_FROM_DATABASE=Caicos XTX [Radeon HD 8490 / R5 235X OEM]
+ 
+ pci:v00001002d00006772*
+  ID_MODEL_FROM_DATABASE=Caicos [Radeon HD 7450A]
+ 
+ pci:v00001002d00006778*
+- ID_MODEL_FROM_DATABASE=Caicos XT [Radeon HD 7470/8470]
++ ID_MODEL_FROM_DATABASE=Caicos XT [Radeon HD 7470/8470 / R5 235 OEM]
+ 
+ pci:v00001002d00006778sv00001019sd00000024*
+  ID_MODEL_FROM_DATABASE=Radeon HD 7470
+@@ -5580,7 +5613,7 @@ pci:v00001002d00006778sv0000174Bsd0000E145*
+  ID_MODEL_FROM_DATABASE=Radeon HD 7470
+ 
+ pci:v00001002d00006779*
+- ID_MODEL_FROM_DATABASE=Caicos [Radeon HD 6450/7450/8450]
++ ID_MODEL_FROM_DATABASE=Caicos [Radeon HD 6450/7450/8450 / R5 230 OEM]
+ 
+ pci:v00001002d00006779sv00001019sd00000016*
+  ID_MODEL_FROM_DATABASE=Radeon HD 6450
+@@ -5979,7 +6012,7 @@ pci:v00001002d00006831*
+  ID_MODEL_FROM_DATABASE=Cape Verde [AMD Radeon HD 7700M Series]
+ 
+ pci:v00001002d00006835*
+- ID_MODEL_FROM_DATABASE=Cape Verde PRX [Radeon R7 260]
++ ID_MODEL_FROM_DATABASE=Cape Verde PRX [Radeon R9 255 OEM]
+ 
+ pci:v00001002d00006837*
+  ID_MODEL_FROM_DATABASE=Cape Verde LE [Radeon HD 7730/8730]
+@@ -8967,7 +9000,7 @@ pci:v00001002d0000999C*
+  ID_MODEL_FROM_DATABASE=Richland
+ 
+ pci:v00001002d0000999D*
+- ID_MODEL_FROM_DATABASE=Richland
++ ID_MODEL_FROM_DATABASE=Richland [Radeon HD 8550D]
+ 
+ pci:v00001002d000099A0*
+  ID_MODEL_FROM_DATABASE=Trinity [Radeon HD 7520G]
+@@ -17663,6 +17696,9 @@ pci:v0000109Ed0000036Esv00001461sd00000761*
+ pci:v0000109Ed0000036Esv00001461sd00000771*
+  ID_MODEL_FROM_DATABASE=AverMedia AVerTV DVB-T 771
+ 
++pci:v0000109Ed0000036Esv00001464sd0000AA00*
++ ID_MODEL_FROM_DATABASE=iTuner Spectra8
++
+ pci:v0000109Ed0000036Esv000014F1sd00000001*
+  ID_MODEL_FROM_DATABASE=Bt878 Mediastream Controller NTSC
+ 
+@@ -27503,6 +27539,9 @@ pci:v000010ECd00005209*
+ pci:v000010ECd00005227*
+  ID_MODEL_FROM_DATABASE=RTS5227 PCI Express Card Reader
+ 
++pci:v000010ECd00005227sv000017AAsd0000220E*
++ ID_MODEL_FROM_DATABASE=ThinkPad T440p
++
+ pci:v000010ECd00005229*
+  ID_MODEL_FROM_DATABASE=RTS5229 PCI Express Card Reader
+ 
+@@ -48170,9 +48209,18 @@ pci:v0000168Cd00000033*
+ pci:v0000168Cd00000034*
+  ID_MODEL_FROM_DATABASE=AR9462 Wireless Network Adapter
+ 
++pci:v0000168Cd00000034sv00001A56sd00002003*
++ ID_MODEL_FROM_DATABASE=Killer Wireless-N 1202 Half-size Mini PCIe Card
++
+ pci:v0000168Cd00000036*
+  ID_MODEL_FROM_DATABASE=QCA9565 / AR9565 Wireless Network Adapter
+ 
++pci:v0000168Cd00000037*
++ ID_MODEL_FROM_DATABASE=AR9485 Wireless Network Adapter
++
++pci:v0000168Cd00000037sv00001A3Bsd00002100*
++ ID_MODEL_FROM_DATABASE=AW-NB100H 802.11n Wireless Mini PCIe Card
++
+ pci:v0000168Cd0000003C*
+  ID_MODEL_FROM_DATABASE=QCA988x 802.11ac Wireless Network Adapter
+ 
+@@ -48191,6 +48239,9 @@ pci:v0000168Cd00009013*
+ pci:v0000168Cd0000FF19*
+  ID_MODEL_FROM_DATABASE=AR5006X Wireless Network Adapter
+ 
++pci:v0000168Cd0000FF1B*
++ ID_MODEL_FROM_DATABASE=AR2425 Wireless Network Adapter [AR5007EG 802.11bg]
++
+ pci:v0000168Cd0000FF1C*
+  ID_MODEL_FROM_DATABASE=AR5008 Wireless Network Adapter
+ 
+@@ -49406,6 +49457,9 @@ pci:v00001814d00003298sv0000103Csd000018EC*
+ pci:v00001814d00003592*
+  ID_MODEL_FROM_DATABASE=RT3592 Wireless 802.11abgn 2T/2R PCIe
+ 
++pci:v00001814d0000359F*
++ ID_MODEL_FROM_DATABASE=RT3592 PCIe Wireless Network Adapter
++
+ pci:v00001814d00005360*
+  ID_MODEL_FROM_DATABASE=RT5360 Wireless 802.11n 1T/1R
+ 
+@@ -49421,6 +49475,9 @@ pci:v00001814d00005390*
+ pci:v00001814d00005390sv0000103Csd00001636*
+  ID_MODEL_FROM_DATABASE=U98Z077.00 Half-size Mini PCIe Card
+ 
++pci:v00001814d00005392*
++ ID_MODEL_FROM_DATABASE=RT5392 PCIe Wireless Network Adapter
++
+ pci:v00001814d0000539F*
+  ID_MODEL_FROM_DATABASE=RT5390 [802.11 b/g/n 1T1R G-band PCI Express Single Chip]
+ 
+@@ -50585,6 +50642,12 @@ pci:v00001957d00000087*
+ pci:v00001957d000000B4*
+  ID_MODEL_FROM_DATABASE=MPC8315E
+ 
++pci:v00001957d000000B6*
++ ID_MODEL_FROM_DATABASE=MPC8314E
++
++pci:v00001957d000000B6sv00001A56sd00001101*
++ ID_MODEL_FROM_DATABASE=Killer Xeno Pro Gigabit Ethernet Controller
++
+ pci:v00001957d000000C2*
+  ID_MODEL_FROM_DATABASE=MPC8379E
+ 
+@@ -50669,6 +50732,12 @@ pci:v00001957d00007011*
+ pci:v00001957d00007018*
+  ID_MODEL_FROM_DATABASE=MPC8610
+ 
++pci:v00001957d0000C006*
++ ID_MODEL_FROM_DATABASE=MPC8308
++
++pci:v00001957d0000C006sv00001A56sd00001201*
++ ID_MODEL_FROM_DATABASE=Killer E2100 Gigabit Ethernet Controller
++
+ pci:v00001958*
+  ID_VENDOR_FROM_DATABASE=Faster Technology, LLC.
+ 
+@@ -54164,6 +54233,9 @@ pci:v00008086d00000412*
+ pci:v00008086d00000416*
+  ID_MODEL_FROM_DATABASE=4th Gen Core Processor Integrated Graphics Controller
+ 
++pci:v00008086d00000416sv000017AAsd0000220E*
++ ID_MODEL_FROM_DATABASE=ThinkPad T440p
++
+ pci:v00008086d0000041A*
+  ID_MODEL_FROM_DATABASE=Xeon E3-1200 v3 Processor Integrated Graphics Controller
+ 
+@@ -54680,9 +54752,15 @@ pci:v00008086d0000095Asv00008086sd00005000*
+ pci:v00008086d0000095Asv00008086sd00005002*
+  ID_MODEL_FROM_DATABASE=Wireless-N 7265
+ 
++pci:v00008086d0000095Asv00008086sd0000500A*
++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
++
+ pci:v00008086d0000095Asv00008086sd00005010*
+  ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
+ 
++pci:v00008086d0000095Asv00008086sd00005012*
++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
++
+ pci:v00008086d0000095Asv00008086sd00005020*
+  ID_MODEL_FROM_DATABASE=Dual Band Wireless-N 7265
+ 
+@@ -54695,6 +54773,9 @@ pci:v00008086d0000095Asv00008086sd00005090*
+ pci:v00008086d0000095Asv00008086sd00005110*
+  ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
+ 
++pci:v00008086d0000095Asv00008086sd00005190*
++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
++
+ pci:v00008086d0000095Asv00008086sd00005400*
+  ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
+ 
+@@ -54707,24 +54788,30 @@ pci:v00008086d0000095Asv00008086sd00005420*
+ pci:v00008086d0000095Asv00008086sd00005490*
+  ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
+ 
++pci:v00008086d0000095Asv00008086sd00005590*
++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
++
+ pci:v00008086d0000095Asv00008086sd00009010*
+  ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
+ 
+-pci:v00008086d0000095Asv00008086sd00009210*
++pci:v00008086d0000095Asv00008086sd00009110*
+  ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
+ 
+-pci:v00008086d0000095Asv00008086sd00009410*
++pci:v00008086d0000095Asv00008086sd00009210*
+  ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
+ 
+-pci:v00008086d0000095B*
+- ID_MODEL_FROM_DATABASE=Wireless 7265
++pci:v00008086d0000095Asv00008086sd00009310*
++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
+ 
+-pci:v00008086d0000095Bsv00008086sd0000500A*
++pci:v00008086d0000095Asv00008086sd00009410*
+  ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
+ 
+-pci:v00008086d0000095Bsv00008086sd00005012*
++pci:v00008086d0000095Asv00008086sd00009510*
+  ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
+ 
++pci:v00008086d0000095B*
++ ID_MODEL_FROM_DATABASE=Wireless 7265
++
+ pci:v00008086d0000095Bsv00008086sd00005200*
+  ID_MODEL_FROM_DATABASE=Dual Band Wireless-N 7265
+ 
+@@ -54860,6 +54947,9 @@ pci:v00008086d00000C01*
+ pci:v00008086d00000C04*
+  ID_MODEL_FROM_DATABASE=Xeon E3-1200 v3/4th Gen Core Processor DRAM Controller
+ 
++pci:v00008086d00000C04sv000017AAsd0000220E*
++ ID_MODEL_FROM_DATABASE=ThinkPad T440p
++
+ pci:v00008086d00000C05*
+  ID_MODEL_FROM_DATABASE=Xeon E3-1200 v3/4th Gen Core Processor PCI Express x8 Controller
+ 
+@@ -54872,6 +54962,9 @@ pci:v00008086d00000C09*
+ pci:v00008086d00000C0C*
+  ID_MODEL_FROM_DATABASE=Xeon E3-1200 v3/4th Gen Core Processor HD Audio Controller
+ 
++pci:v00008086d00000C0Csv000017AAsd0000220E*
++ ID_MODEL_FROM_DATABASE=ThinkPad T440p
++
+ pci:v00008086d00000C46*
+  ID_MODEL_FROM_DATABASE=Atom Processor S1200 PCI Express Root Port 1
+ 
+@@ -57986,6 +58079,9 @@ pci:v00008086d00001539*
+ pci:v00008086d0000153A*
+  ID_MODEL_FROM_DATABASE=Ethernet Connection I217-LM
+ 
++pci:v00008086d0000153Asv000017AAsd0000220E*
++ ID_MODEL_FROM_DATABASE=ThinkPad T440p
++
+ pci:v00008086d0000153B*
+  ID_MODEL_FROM_DATABASE=Ethernet Connection I217-V
+ 
+@@ -69035,6 +69131,9 @@ pci:v00008086d00008C02*
+ pci:v00008086d00008C03*
+  ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family 6-port SATA Controller 1 [AHCI mode]
+ 
++pci:v00008086d00008C03sv000017AAsd0000220E*
++ ID_MODEL_FROM_DATABASE=ThinkPad T440p
++
+ pci:v00008086d00008C04*
+  ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family SATA Controller 1 [RAID mode]
+ 
+@@ -69062,12 +69161,18 @@ pci:v00008086d00008C0F*
+ pci:v00008086d00008C10*
+  ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family PCI Express Root Port #1
+ 
++pci:v00008086d00008C10sv000017AAsd0000220E*
++ ID_MODEL_FROM_DATABASE=ThinkPad T440p
++
+ pci:v00008086d00008C11*
+  ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family PCI Express Root Port #1
+ 
+ pci:v00008086d00008C12*
+  ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family PCI Express Root Port #2
+ 
++pci:v00008086d00008C12sv000017AAsd0000220E*
++ ID_MODEL_FROM_DATABASE=ThinkPad T440p
++
+ pci:v00008086d00008C13*
+  ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family PCI Express Root Port #2
+ 
+@@ -69110,12 +69215,18 @@ pci:v00008086d00008C1F*
+ pci:v00008086d00008C20*
+  ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset High Definition Audio Controller
+ 
++pci:v00008086d00008C20sv000017AAsd0000220E*
++ ID_MODEL_FROM_DATABASE=ThinkPad T440p
++
+ pci:v00008086d00008C21*
+  ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset High Definition Audio Controller
+ 
+ pci:v00008086d00008C22*
+  ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family SMBus Controller
+ 
++pci:v00008086d00008C22sv000017AAsd0000220E*
++ ID_MODEL_FROM_DATABASE=ThinkPad T440p
++
+ pci:v00008086d00008C23*
+  ID_MODEL_FROM_DATABASE=8 Series Chipset Family CHAP Counters
+ 
+@@ -69125,12 +69236,21 @@ pci:v00008086d00008C24*
+ pci:v00008086d00008C26*
+  ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family USB EHCI #1
+ 
++pci:v00008086d00008C26sv000017AAsd0000220E*
++ ID_MODEL_FROM_DATABASE=ThinkPad T440p
++
+ pci:v00008086d00008C2D*
+  ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family USB EHCI #2
+ 
++pci:v00008086d00008C2Dsv000017AAsd0000220E*
++ ID_MODEL_FROM_DATABASE=ThinkPad T440p
++
+ pci:v00008086d00008C31*
+  ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family USB xHCI
+ 
++pci:v00008086d00008C31sv000017AAsd0000220E*
++ ID_MODEL_FROM_DATABASE=ThinkPad T440p
++
+ pci:v00008086d00008C33*
+  ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family LAN Controller
+ 
+@@ -69140,6 +69260,9 @@ pci:v00008086d00008C34*
+ pci:v00008086d00008C3A*
+  ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family MEI Controller #1
+ 
++pci:v00008086d00008C3Asv000017AAsd0000220E*
++ ID_MODEL_FROM_DATABASE=ThinkPad T440p
++
+ pci:v00008086d00008C3B*
+  ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family MEI Controller #2
+ 
+@@ -69197,6 +69320,9 @@ pci:v00008086d00008C4E*
+ pci:v00008086d00008C4F*
+  ID_MODEL_FROM_DATABASE=QM87 Express LPC Controller
+ 
++pci:v00008086d00008C4Fsv000017AAsd0000220E*
++ ID_MODEL_FROM_DATABASE=ThinkPad T440p
++
+ pci:v00008086d00008C50*
+  ID_MODEL_FROM_DATABASE=B85 Express LPC Controller
+ 
+diff --git a/hwdb/20-usb-vendor-model.hwdb b/hwdb/20-usb-vendor-model.hwdb
+index 6663820..60dbcd2 100644
+--- a/hwdb/20-usb-vendor-model.hwdb
++++ b/hwdb/20-usb-vendor-model.hwdb
+@@ -46055,6 +46055,12 @@ usb:v1B5A*
+ usb:v1B65*
+  ID_VENDOR_FROM_DATABASE=The Hong Kong Standards and Testing Centre Ltd.
+ 
++usb:v1B71*
++ ID_VENDOR_FROM_DATABASE=Fushicai
++
++usb:v1B71p3002*
++ ID_MODEL_FROM_DATABASE=USBTV007 Video Grabber [EasyCAP]
++
+ usb:v1B72*
+  ID_VENDOR_FROM_DATABASE=ATERGI TECHNOLOGY CO., LTD.
+ 
diff --git a/SOURCES/0177-journal-Add-missing-byte-order-conversions.patch b/SOURCES/0177-journal-Add-missing-byte-order-conversions.patch
new file mode 100644
index 0000000..13f36ef
--- /dev/null
+++ b/SOURCES/0177-journal-Add-missing-byte-order-conversions.patch
@@ -0,0 +1,58 @@
+From dcf643901f6aeeda806e19fa7cbb766ded3f3d44 Mon Sep 17 00:00:00 2001
+From: George McCollister <george.mccollister@gmail.com>
+Date: Tue, 31 Dec 2013 14:37:32 -0600
+Subject: [PATCH] journal: Add missing byte order conversions
+
+Convert entry_array.items[0] to host byte order prior to passing it to
+chain_cache_put().
+
+[zj: also use le64toh in journal-verify.c]
+
+https://bugs.freedesktop.org/show_bug.cgi?id=73194
+---
+ src/journal/journal-file.c   | 4 ++--
+ src/journal/journal-verify.c | 6 +++---
+ 2 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/src/journal/journal-file.c b/src/journal/journal-file.c
+index 9f04c58..748816a 100644
+--- a/src/journal/journal-file.c
++++ b/src/journal/journal-file.c
+@@ -1452,7 +1452,7 @@ static int generic_array_get(
+ 
+ found:
+         /* Let's cache this item for the next invocation */
+-        chain_cache_put(f->chain_cache, ci, first, a, o->entry_array.items[0], t, i);
++        chain_cache_put(f->chain_cache, ci, first, a, le64toh(o->entry_array.items[0]), t, i);
+ 
+         r = journal_file_move_to_object(f, OBJECT_ENTRY, p, &o);
+         if (r < 0)
+@@ -1685,7 +1685,7 @@ found:
+                 return 0;
+ 
+         /* Let's cache this item for the next invocation */
+-        chain_cache_put(f->chain_cache, ci, first, a, array->entry_array.items[0], t, subtract_one ? (i > 0 ? i-1 : (uint64_t) -1) : i);
++        chain_cache_put(f->chain_cache, ci, first, a, le64toh(array->entry_array.items[0]), t, subtract_one ? (i > 0 ? i-1 : (uint64_t) -1) : i);
+ 
+         if (subtract_one && i == 0)
+                 p = last_p;
+diff --git a/src/journal/journal-verify.c b/src/journal/journal-verify.c
+index 3405811..82b0f0a 100644
+--- a/src/journal/journal-verify.c
++++ b/src/journal/journal-verify.c
+@@ -249,12 +249,12 @@ static int journal_file_object_verify(JournalFile *f, uint64_t offset, Object *o
+                 }
+ 
+                 for (i = 0; i < journal_file_entry_array_n_items(o); i++)
+-                        if (o->entry_array.items[i] != 0 &&
+-                            !VALID64(o->entry_array.items[i])) {
++                        if (le64toh(o->entry_array.items[i]) != 0 &&
++                            !VALID64(le64toh(o->entry_array.items[i]))) {
+                                 log_error(OFSfmt": invalid object entry array item (%"PRIu64"/%"PRIu64"): "OFSfmt,
+                                           offset,
+                                           i, journal_file_entry_array_n_items(o),
+-                                          o->entry_array.items[i]);
++                                          le64toh(o->entry_array.items[i]));
+                                 return -EBADMSG;
+                         }
+ 
diff --git a/SOURCES/0178-hwdb-change-key-mappings-for-Samsung-90X3A.patch b/SOURCES/0178-hwdb-change-key-mappings-for-Samsung-90X3A.patch
new file mode 100644
index 0000000..e7547c6
--- /dev/null
+++ b/SOURCES/0178-hwdb-change-key-mappings-for-Samsung-90X3A.patch
@@ -0,0 +1,39 @@
+From 3d7988d5f0db77f35581a5fb5786a84723d7ce6e Mon Sep 17 00:00:00 2001
+From: Raudi <mpell@web.de>
+Date: Mon, 6 Jan 2014 19:44:08 -0500
+Subject: [PATCH] hwdb: change key mappings for Samsung 90X3A
+
+The Key codes didn't match with the described key. Also the key
+identifier strings were missing. I hope I chose appropriate ones.
+
+https://bugs.freedesktop.org/show_bug.cgi?id=70296
+---
+ hwdb/60-keyboard.hwdb | 8 +++++++-
+ 1 file changed, 7 insertions(+), 1 deletion(-)
+
+diff --git a/hwdb/60-keyboard.hwdb b/hwdb/60-keyboard.hwdb
+index ab9e569..644cb94 100644
+--- a/hwdb/60-keyboard.hwdb
++++ b/hwdb/60-keyboard.hwdb
+@@ -886,7 +886,6 @@ keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*940X3G*:pvr*
+  KEYBOARD_KEY_b3=!prog3                                 # Fn+F11 fan/cooling mode changer
+ 
+ # Series 9
+-keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*90X3A*:pvr*
+ keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*900X[34][AB]*:pvr*
+  KEYBOARD_KEY_ce=!                                      # Fn+F8 keyboard backlight up
+  KEYBOARD_KEY_8d=!                                      # Fn+F7 keyboard backlight down
+@@ -894,6 +893,13 @@ keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*900X[34][AB]*:pvr
+  KEYBOARD_KEY_97=!                                      # Fn+F12 Wi-Fi toggle
+  KEYBOARD_KEY_d5=!                                      # Fn+F6 battery life extender
+ 
++keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*90X3A*:pvr*
++ KEYBOARD_KEY_ce=!prog1                                 # Fn+F1 launch settings
++ KEYBOARD_KEY_8d=!prog3                                 # Fn+F6 performance mode
++ KEYBOARD_KEY_97=!kbdillumdown                          # Fn+F7 keyboard backlight down
++ KEYBOARD_KEY_96=!kbdillumup                            # Fn+F8 keyboard backlight up
++ KEYBOARD_KEY_d5=!wlan                                  # Fn+F12 Wi-Fi toggle
++
+ # SQ1US
+ keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pnSQ1US:pvr*
+  KEYBOARD_KEY_d4=menu
diff --git a/SOURCES/0179-hwdb-add-Samsung-700G.patch b/SOURCES/0179-hwdb-add-Samsung-700G.patch
new file mode 100644
index 0000000..a8cf51a
--- /dev/null
+++ b/SOURCES/0179-hwdb-add-Samsung-700G.patch
@@ -0,0 +1,22 @@
+From c28eaf0a17c230cdda898525a132109a50f82996 Mon Sep 17 00:00:00 2001
+From: Dmitry Pisklov <dpisklov@gmail.com>
+Date: Mon, 6 Jan 2014 20:06:59 -0500
+Subject: [PATCH] hwdb: add Samsung 700G
+
+https://bugs.freedesktop.org/show_bug.cgi?id=72311
+---
+ hwdb/60-keyboard.hwdb | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/hwdb/60-keyboard.hwdb b/hwdb/60-keyboard.hwdb
+index 644cb94..ccfc734 100644
+--- a/hwdb/60-keyboard.hwdb
++++ b/hwdb/60-keyboard.hwdb
+@@ -875,6 +875,7 @@ keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*550P*:pvr*
+  KEYBOARD_KEY_a9=!                                      # Fn Lock - Function lock off
+ 
+ keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*700Z*:pvr*
++keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*700G*:pvr*
+ keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*900X[34][CDG]*:pvr*
+ keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*940X3G*:pvr*
+  KEYBOARD_KEY_ce=!prog1                                 # Fn+F1 launch settings
diff --git a/SOURCES/0180-hwdb-remove-duplicate-entry-for-Samsung-700Z.patch b/SOURCES/0180-hwdb-remove-duplicate-entry-for-Samsung-700Z.patch
new file mode 100644
index 0000000..c566805
--- /dev/null
+++ b/SOURCES/0180-hwdb-remove-duplicate-entry-for-Samsung-700Z.patch
@@ -0,0 +1,28 @@
+From 13e1c1cd5d95e077fe9e08ec6e80b3ac91e957f2 Mon Sep 17 00:00:00 2001
+From: Dmitry Pisklov <dpisklov@gmail.com>
+Date: Mon, 6 Jan 2014 20:08:21 -0500
+Subject: [PATCH] hwdb: remove duplicate entry for Samsung 700Z
+
+keyboardbrightnessup/down are not even real keys.
+
+https://bugs.freedesktop.org/show_bug.cgi?id=72311
+---
+ hwdb/60-keyboard.hwdb | 5 -----
+ 1 file changed, 5 deletions(-)
+
+diff --git a/hwdb/60-keyboard.hwdb b/hwdb/60-keyboard.hwdb
+index ccfc734..cf3d1fb 100644
+--- a/hwdb/60-keyboard.hwdb
++++ b/hwdb/60-keyboard.hwdb
+@@ -918,11 +918,6 @@ keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*SX20S*:pvr*
+  KEYBOARD_KEY_77=f22                                    # Touchpad on
+  KEYBOARD_KEY_79=f23                                    # Touchpad off
+ 
+-keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*700Z*:pvr*
+- KEYBOARD_KEY_ba=ejectcd
+- KEYBOARD_KEY_96=keyboardbrightnessup
+- KEYBOARD_KEY_97=keyboardbrightnessdown
+-
+ keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*700T*:pvr*
+  KEYBOARD_KEY_ad=leftmeta
+ 
diff --git a/SOURCES/0181-hwdb-fix-match-for-Thinkpad-X201-tablet.patch b/SOURCES/0181-hwdb-fix-match-for-Thinkpad-X201-tablet.patch
new file mode 100644
index 0000000..0c30675
--- /dev/null
+++ b/SOURCES/0181-hwdb-fix-match-for-Thinkpad-X201-tablet.patch
@@ -0,0 +1,22 @@
+From ce340fda3e72602eac5165c33527f444eff78d18 Mon Sep 17 00:00:00 2001
+From: AppleBloom <rat.o.drat@gmail.com>
+Date: Mon, 6 Jan 2014 20:51:47 -0500
+Subject: [PATCH] hwdb: fix match for Thinkpad X201 tablet
+
+https://bugs.freedesktop.org/show_bug.cgi?id=71929
+---
+ hwdb/60-keyboard.hwdb | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/hwdb/60-keyboard.hwdb b/hwdb/60-keyboard.hwdb
+index cf3d1fb..d253724 100644
+--- a/hwdb/60-keyboard.hwdb
++++ b/hwdb/60-keyboard.hwdb
+@@ -524,6 +524,7 @@ keyboard:dmi:bvn*:bvr*:bd*:svnLENOVO*:pnS10-*:pvr*
+ 
+ # Thinkpad X200_Tablet
+ keyboard:dmi:bvn*:bvr*:bd*:svnLENOVO*:pnThinkPad*X2*Tablet*:pvr*
++keyboard:dmi:bvn*:bvr*:bd*:svnLENOVO*:pn*:pvrThinkPad*X2*Tablet*
+  KEYBOARD_KEY_5d=menu
+  KEYBOARD_KEY_63=fn
+  KEYBOARD_KEY_66=screenlock
diff --git a/SOURCES/0182-keymap-Recognize-different-Toshiba-Satellite-capital.patch b/SOURCES/0182-keymap-Recognize-different-Toshiba-Satellite-capital.patch
new file mode 100644
index 0000000..4f223e2
--- /dev/null
+++ b/SOURCES/0182-keymap-Recognize-different-Toshiba-Satellite-capital.patch
@@ -0,0 +1,26 @@
+From a3d80446f49c5b5e40522fc250b1df3356cb0cf1 Mon Sep 17 00:00:00 2001
+From: Martin Pitt <martinpitt@gnome.org>
+Date: Tue, 7 Jan 2014 09:40:01 +0100
+Subject: [PATCH] keymap: Recognize different Toshiba Satellite capitalizations
+
+https://launchpad.net/bugs/665918
+---
+ hwdb/60-keyboard.hwdb | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/hwdb/60-keyboard.hwdb b/hwdb/60-keyboard.hwdb
+index d253724..84a061f 100644
+--- a/hwdb/60-keyboard.hwdb
++++ b/hwdb/60-keyboard.hwdb
+@@ -1056,9 +1056,9 @@ keyboard:dmi:bvn*:bvr*:bd*:svnFOXCONN:pnQBOOK:*
+ keyboard:dmi:bvn*:bvr*:bd*:svnMTC:pn*:pvrA0:*
+ keyboard:dmi:bvn*:bvr*:bd*:svnMio*Technology:pnN890:*
+ keyboard:dmi:bvn*:bvr*:bd*:svnPEGATRON*CORP.:pnSpring*Peak:*
+-keyboard:dmi:bvn*:bvr*:bd*:svnTOSHIBA:pnSatellite*[uU]30[05]*:pvr*
++keyboard:dmi:bvn*:bvr*:bd*:svnTOSHIBA:pnSatellite*[uU][35]0[05]*:pvr*
++keyboard:dmi:bvn*:bvr*:bd*:svnTOSHIBA:pnSATELLITE*[uU][35]0[05]*:pvr*
+ keyboard:dmi:bvn*:bvr*:bd*:svnTOSHIBA:pnSatellite*Pro*[uU]300*:pvr*
+-keyboard:dmi:bvn*:bvr*:bd*:svnTOSHIBA:pnSATELLITE*[uU]500*:pvr*
+ keyboard:dmi:bvn*:bvr*:bd*:svnViooo*Corporation:pnPT17:*
+ keyboard:dmi:bvn*:bvr*:bd*:svnHANNspree:pnSN10E100:*
+ keyboard:dmi:bvn*:bvr*:bd*:svnGIGABYTE:pni1520M:*
diff --git a/SOURCES/0183-sleep.c-fix-typo.patch b/SOURCES/0183-sleep.c-fix-typo.patch
new file mode 100644
index 0000000..a37a28f
--- /dev/null
+++ b/SOURCES/0183-sleep.c-fix-typo.patch
@@ -0,0 +1,22 @@
+From 5eaadd27a8c22c2a9e5c66c5cc69c9354eff036e Mon Sep 17 00:00:00 2001
+From: Michele Curti <michele.curti@gmail.com>
+Date: Tue, 7 Jan 2014 17:51:41 +0100
+Subject: [PATCH] sleep.c: fix typo
+
+---
+ src/sleep/sleep.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/sleep/sleep.c b/src/sleep/sleep.c
+index f96987f..c228cb6 100644
+--- a/src/sleep/sleep.c
++++ b/src/sleep/sleep.c
+@@ -90,7 +90,7 @@ static int execute(char **modes, char **states) {
+         const char* note = strappenda("SLEEP=", arg_verb);
+ 
+         /* This file is opened first, so that if we hit an error,
+-         * we can abort before modyfing any state. */
++         * we can abort before modifying any state. */
+         f = fopen("/sys/power/state", "we");
+         if (!f) {
+                 log_error("Failed to open /sys/power/state: %m");
diff --git a/SOURCES/0184-man-mention-which-variables-will-be-expanded-in-Exec.patch b/SOURCES/0184-man-mention-which-variables-will-be-expanded-in-Exec.patch
new file mode 100644
index 0000000..622312d
--- /dev/null
+++ b/SOURCES/0184-man-mention-which-variables-will-be-expanded-in-Exec.patch
@@ -0,0 +1,86 @@
+From b993c1cda2625b91562ada55f21da2310e9b436d Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Thu, 9 Jan 2014 22:23:32 -0500
+Subject: [PATCH] man: mention which variables will be expanded in ExecStart
+
+Conflicts:
+	man/systemd.service.xml
+---
+ man/systemd.exec.xml    |  6 ++++--
+ man/systemd.service.xml | 35 +++++++++++++++++++++++------------
+ 2 files changed, 27 insertions(+), 14 deletions(-)
+
+diff --git a/man/systemd.exec.xml b/man/systemd.exec.xml
+index f50161f..612b4d2 100644
+--- a/man/systemd.exec.xml
++++ b/man/systemd.exec.xml
+@@ -295,9 +295,11 @@
+                                 for the assignment.</para>
+ 
+                                 <para>Example:
+-                                <programlisting>Environment="VAR1=word1 word2" VAR2=word3 "VAR3=word 5 6"</programlisting>
++                                <programlisting>Environment="VAR1=word1 word2" VAR2=word3 "VAR3=$word 5 6"</programlisting>
+                                 gives three variables <literal>VAR1</literal>,
+-                                <literal>VAR2</literal>, <literal>VAR3</literal>.
++                                <literal>VAR2</literal>, <literal>VAR3</literal>
++                                with the values <literal>word1 word2</literal>,
++                                <literal>word3</literal>, <literal>$word 5 6</literal>.
+                                 </para>
+ 
+                                 <para>
+diff --git a/man/systemd.service.xml b/man/systemd.service.xml
+index af3e0f2..4fb21ba 100644
+--- a/man/systemd.service.xml
++++ b/man/systemd.service.xml
+@@ -392,16 +392,32 @@
+                                 replaced by the value of the
+                                 environment variable including all
+                                 whitespace it contains, resulting in a
+-                                single argument.  Use
++                                single argument. Use
+                                 <literal>$FOO</literal> as a separate
+                                 word on the command line, in which
+                                 case it will be replaced by the value
+-                                of the environment variable split up
+-                                at whitespace, resulting in zero or
+-                                more arguments. To pass literal dollar sign
+-                                use <literal>$$</literal>. Note that the first
+-                                argument (i.e. the program to execute)
+-                                may not be a variable.</para>
++                                of the environment variable split at
++                                whitespace, resulting in zero or more
++                                arguments. To pass a literal dollar
++                                sign, use <literal>$$</literal>.
++                                Variables whose value is not known at
++                                expansion time are treated as empty
++                                strings. Note that the first argument
++                                (i.e. the program to execute) may not
++                                be a variable.</para>
++
++                                <para>Variables to be used in this
++                                fashion may be defined through
++                                <varname>Environment=</varname> and
++                                <varname>EnvironmentFile=</varname>.
++                                In addition, variables listed in
++                                section "Environment variables in
++                                spawned processes" in
++                                <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>
++                                which are considered "static
++                                configuration" may used (this includes
++                                e.g. <varname>$USER</varname>, but not
++                                <varname>$TERM</varname>).</para>
+ 
+                                 <para>Optionally, if the absolute file
+                                 name is prefixed with
+@@ -429,11 +445,6 @@
+                                 <programlisting>ExecStart=/bin/sh -c 'dmesg | tac'
+                                 </programlisting>
+ 
+-                                <para>Only select environment variables that
+-                                are set for executed commands. See
+-                                <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
+-                                </para>
+-
+                                 <para>Example:</para>
+                                 <programlisting>ExecStart=/bin/echo one ; /bin/echo "two two"
+                                 </programlisting>
diff --git a/SOURCES/0185-hwdb-Add-support-for-Toshiba-Satellite-P75-A7200-key.patch b/SOURCES/0185-hwdb-Add-support-for-Toshiba-Satellite-P75-A7200-key.patch
new file mode 100644
index 0000000..0dc8aba
--- /dev/null
+++ b/SOURCES/0185-hwdb-Add-support-for-Toshiba-Satellite-P75-A7200-key.patch
@@ -0,0 +1,28 @@
+From 6ccaa6a0b732ab324629c8b1c24a8e775f51da86 Mon Sep 17 00:00:00 2001
+From: Unai Uribarri <unaiur@gmail.com>
+Date: Sat, 11 Jan 2014 09:19:41 -0500
+Subject: [PATCH] hwdb: Add support for Toshiba Satellite P75-A7200 keyboard
+
+---
+ hwdb/60-keyboard.hwdb | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/hwdb/60-keyboard.hwdb b/hwdb/60-keyboard.hwdb
+index 84a061f..e3d1f02 100644
+--- a/hwdb/60-keyboard.hwdb
++++ b/hwdb/60-keyboard.hwdb
+@@ -1012,6 +1012,14 @@ keyboard:name:Toshiba*input*device:dmi:bvn*:bvr*:bd*:svnTOSHIBA*:pnSATELLITEU940
+  KEYBOARD_KEY_13e=switchvideomode
+  KEYBOARD_KEY_13f=f21                                   # Touchpad toggle
+ 
++# Satellite P75-A7200
++keyboard:name:Toshiba*input*device:dmi:bvn*:bvr*:bd*:svnTOSHIBA*:pnSatellite*P75-A:pvr*
++ KEYBOARD_KEY_13c=brightnessdown
++ KEYBOARD_KEY_13d=brightnessup
++ KEYBOARD_KEY_13e=switchvideomode
++ KEYBOARD_KEY_13f=touchpad_toggle
++ KEYBOARD_KEY_9e=wlan
++
+ ###########################################################
+ # VIA
+ ###########################################################
diff --git a/SOURCES/0186-journal-fix-access-to-munmapped-memory-in-sd_journal.patch b/SOURCES/0186-journal-fix-access-to-munmapped-memory-in-sd_journal.patch
new file mode 100644
index 0000000..37d6d58
--- /dev/null
+++ b/SOURCES/0186-journal-fix-access-to-munmapped-memory-in-sd_journal.patch
@@ -0,0 +1,320 @@
+From 035c9e559064114e3f7ba19b593a97c4a4d4f060 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Sat, 28 Dec 2013 19:33:23 -0500
+Subject: [PATCH] journal: fix access to munmapped memory in
+ sd_journal_enumerate_unique
+
+sd_j_e_u needs to keep a reference to an object while comparing it
+with possibly duplicate objects in other files. Because the size of
+mmap cache is limited, with enough files and object to compare to,
+at some point the object being compared would be munmapped, resulting
+in a segmentation fault.
+
+Fix this issue by turning keep_always into a reference count that can
+be increased and decreased. Other callers which set keep_always=true
+are unmodified: their references are never released but are ignored
+when the whole file is closed, which happens at some point. keep_always
+is increased in sd_j_e_u and later on released.
+---
+ src/journal/journal-file.c   |  5 +---
+ src/journal/journal-file.h   | 24 +++++++++++++++++++
+ src/journal/journal-verify.c |  4 ----
+ src/journal/mmap-cache.c     | 57 +++++++++++++++++++++++++++++++++++---------
+ src/journal/mmap-cache.h     | 18 +++++++++++++-
+ src/journal/sd-journal.c     | 18 +++++++++++---
+ 6 files changed, 103 insertions(+), 23 deletions(-)
+
+diff --git a/src/journal/journal-file.c b/src/journal/journal-file.c
+index 748816a..9dbd674 100644
+--- a/src/journal/journal-file.c
++++ b/src/journal/journal-file.c
+@@ -419,7 +419,6 @@ int journal_file_move_to_object(JournalFile *f, int type, uint64_t offset, Objec
+         void *t;
+         Object *o;
+         uint64_t s;
+-        unsigned context;
+ 
+         assert(f);
+         assert(ret);
+@@ -428,10 +427,8 @@ int journal_file_move_to_object(JournalFile *f, int type, uint64_t offset, Objec
+         if (!VALID64(offset))
+                 return -EFAULT;
+ 
+-        /* One context for each type, plus one catch-all for the rest */
+-        context = type > 0 && type < _OBJECT_TYPE_MAX ? type : 0;
+ 
+-        r = journal_file_move_to(f, context, false, offset, sizeof(ObjectHeader), &t);
++        r = journal_file_move_to(f, type_to_context(type), false, offset, sizeof(ObjectHeader), &t);
+         if (r < 0)
+                 return r;
+ 
+diff --git a/src/journal/journal-file.h b/src/journal/journal-file.h
+index 5cc2c2d..376c3d4 100644
+--- a/src/journal/journal-file.h
++++ b/src/journal/journal-file.h
+@@ -128,6 +128,10 @@ int journal_file_open_reliably(
+ #define ALIGN64(x) (((x) + 7ULL) & ~7ULL)
+ #define VALID64(x) (((x) & 7ULL) == 0ULL)
+ 
++/* Use six characters to cover the offsets common in smallish journal
++ * files without adding too many zeros. */
++#define OFSfmt "%06"PRIx64
++
+ static inline bool VALID_REALTIME(uint64_t u) {
+         /* This considers timestamps until the year 3112 valid. That should be plenty room... */
+         return u > 0 && u < (1ULL << 55);
+@@ -197,3 +201,23 @@ int journal_file_get_cutoff_realtime_usec(JournalFile *f, usec_t *from, usec_t *
+ int journal_file_get_cutoff_monotonic_usec(JournalFile *f, sd_id128_t boot, usec_t *from, usec_t *to);
+ 
+ bool journal_file_rotate_suggested(JournalFile *f, usec_t max_file_usec);
++
++
++static unsigned type_to_context(int type) {
++        /* One context for each type, plus one catch-all for the rest */
++        return type > 0 && type < _OBJECT_TYPE_MAX ? type : 0;
++}
++
++static inline int journal_file_object_keep(JournalFile *f, Object *o, uint64_t offset) {
++        unsigned context = type_to_context(o->object.type);
++
++        return mmap_cache_get(f->mmap, f->fd, f->prot, context, true,
++                              offset, o->object.size, &f->last_stat, NULL);
++}
++
++static inline int journal_file_object_release(JournalFile *f, Object *o, uint64_t offset) {
++        unsigned context = type_to_context(o->object.type);
++
++        return mmap_cache_release(f->mmap, f->fd, f->prot, context,
++                                  offset, o->object.size);
++}
+diff --git a/src/journal/journal-verify.c b/src/journal/journal-verify.c
+index 82b0f0a..f2422ff 100644
+--- a/src/journal/journal-verify.c
++++ b/src/journal/journal-verify.c
+@@ -34,10 +34,6 @@
+ #include "compress.h"
+ #include "fsprg.h"
+ 
+-/* Use six characters to cover the offsets common in smallish journal
+- * files without adding to many zeros. */
+-#define OFSfmt "%06"PRIx64
+-
+ static int journal_file_object_verify(JournalFile *f, uint64_t offset, Object *o) {
+         uint64_t i;
+ 
+diff --git a/src/journal/mmap-cache.c b/src/journal/mmap-cache.c
+index 03b57be..cfb26da 100644
+--- a/src/journal/mmap-cache.c
++++ b/src/journal/mmap-cache.c
+@@ -38,7 +38,7 @@ typedef struct FileDescriptor FileDescriptor;
+ struct Window {
+         MMapCache *cache;
+ 
+-        bool keep_always;
++        unsigned keep_always;
+         bool in_unused;
+ 
+         int prot;
+@@ -182,7 +182,7 @@ static void context_detach_window(Context *c) {
+         c->window = NULL;
+         LIST_REMOVE(Context, by_window, w->contexts, c);
+ 
+-        if (!w->contexts && !w->keep_always) {
++        if (!w->contexts && w->keep_always == 0) {
+                 /* Not used anymore? */
+                 LIST_PREPEND(Window, unused, c->cache->unused, w);
+                 if (!c->cache->last_unused)
+@@ -357,7 +357,6 @@ static int try_context(
+         assert(m->n_ref > 0);
+         assert(fd >= 0);
+         assert(size > 0);
+-        assert(ret);
+ 
+         c = hashmap_get(m->contexts, UINT_TO_PTR(context+1));
+         if (!c)
+@@ -375,9 +374,10 @@ static int try_context(
+                 return 0;
+         }
+ 
+-        c->window->keep_always = c->window->keep_always || keep_always;
++        c->window->keep_always += keep_always;
+ 
+-        *ret = (uint8_t*) c->window->ptr + (offset - c->window->offset);
++        if (ret)
++                *ret = (uint8_t*) c->window->ptr + (offset - c->window->offset);
+         return 1;
+ }
+ 
+@@ -399,7 +399,6 @@ static int find_mmap(
+         assert(m->n_ref > 0);
+         assert(fd >= 0);
+         assert(size > 0);
+-        assert(ret);
+ 
+         f = hashmap_get(m->fds, INT_TO_PTR(fd + 1));
+         if (!f)
+@@ -419,9 +418,10 @@ static int find_mmap(
+                 return -ENOMEM;
+ 
+         context_attach_window(c, w);
+-        w->keep_always = w->keep_always || keep_always;
++        w->keep_always += keep_always;
+ 
+-        *ret = (uint8_t*) w->ptr + (offset - w->offset);
++        if (ret)
++                *ret = (uint8_t*) w->ptr + (offset - w->offset);
+         return 1;
+ }
+ 
+@@ -447,7 +447,6 @@ static int add_mmap(
+         assert(m->n_ref > 0);
+         assert(fd >= 0);
+         assert(size > 0);
+-        assert(ret);
+ 
+         woffset = offset & ~((uint64_t) page_size() - 1ULL);
+         wsize = size + (offset - woffset);
+@@ -517,7 +516,8 @@ static int add_mmap(
+         c->window = w;
+         LIST_PREPEND(Context, by_window, w->contexts, c);
+ 
+-        *ret = (uint8_t*) w->ptr + (offset - w->offset);
++        if (ret)
++                *ret = (uint8_t*) w->ptr + (offset - w->offset);
+         return 1;
+ }
+ 
+@@ -538,7 +538,6 @@ int mmap_cache_get(
+         assert(m->n_ref > 0);
+         assert(fd >= 0);
+         assert(size > 0);
+-        assert(ret);
+ 
+         /* Check whether the current context is the right one already */
+         r = try_context(m, fd, prot, context, keep_always, offset, size, ret);
+@@ -554,6 +553,42 @@ int mmap_cache_get(
+         return add_mmap(m, fd, prot, context, keep_always, offset, size, st, ret);
+ }
+ 
++int mmap_cache_release(
++                MMapCache *m,
++                int fd,
++                int prot,
++                unsigned context,
++                uint64_t offset,
++                size_t size) {
++
++        FileDescriptor *f;
++        Window *w;
++
++        assert(m);
++        assert(m->n_ref > 0);
++        assert(fd >= 0);
++        assert(size > 0);
++
++        f = hashmap_get(m->fds, INT_TO_PTR(fd + 1));
++        if (!f)
++                return -EBADF;
++
++        assert(f->fd == fd);
++
++        LIST_FOREACH(by_fd, w, f->windows)
++                if (window_matches(w, fd, prot, offset, size))
++                        break;
++
++        if (!w)
++                return -ENOENT;
++
++        if (w->keep_always == 0)
++                return -ENOLCK;
++
++        w->keep_always -= 1;
++        return 0;
++}
++
+ void mmap_cache_close_fd(MMapCache *m, int fd) {
+         FileDescriptor *f;
+ 
+diff --git a/src/journal/mmap-cache.h b/src/journal/mmap-cache.h
+index 0c42fb8..e5e3b38 100644
+--- a/src/journal/mmap-cache.h
++++ b/src/journal/mmap-cache.h
+@@ -31,6 +31,22 @@ MMapCache* mmap_cache_new(void);
+ MMapCache* mmap_cache_ref(MMapCache *m);
+ MMapCache* mmap_cache_unref(MMapCache *m);
+ 
+-int mmap_cache_get(MMapCache *m, int fd, int prot, unsigned context, bool keep_always, uint64_t offset, size_t size, struct stat *st, void **ret);
++int mmap_cache_get(
++        MMapCache *m,
++        int fd,
++        int prot,
++        unsigned context,
++        bool keep_always,
++        uint64_t offset,
++        size_t size,
++        struct stat *st,
++        void **ret);
++int mmap_cache_release(
++        MMapCache *m,
++        int fd,
++        int prot,
++        unsigned context,
++        uint64_t offset,
++        size_t size);
+ void mmap_cache_close_fd(MMapCache *m, int fd);
+ void mmap_cache_close_context(MMapCache *m, unsigned context);
+diff --git a/src/journal/sd-journal.c b/src/journal/sd-journal.c
+index 9676f0f..67a77e6 100644
+--- a/src/journal/sd-journal.c
++++ b/src/journal/sd-journal.c
+@@ -2506,9 +2506,7 @@ _public_ int sd_journal_query_unique(sd_journal *j, const char *field) {
+ }
+ 
+ _public_ int sd_journal_enumerate_unique(sd_journal *j, const void **data, size_t *l) {
+-        Object *o;
+         size_t k;
+-        int r;
+ 
+         if (!j)
+                 return -EINVAL;
+@@ -2533,9 +2531,11 @@ _public_ int sd_journal_enumerate_unique(sd_journal *j, const void **data, size_
+         for (;;) {
+                 JournalFile *of;
+                 Iterator i;
++                Object *o;
+                 const void *odata;
+                 size_t ol;
+                 bool found;
++                int r;
+ 
+                 /* Proceed to next data object in the field's linked list */
+                 if (j->unique_offset == 0) {
+@@ -2572,8 +2572,16 @@ _public_ int sd_journal_enumerate_unique(sd_journal *j, const void **data, size_
+                         return r;
+ 
+                 /* Let's do the type check by hand, since we used 0 context above. */
+-                if (o->object.type != OBJECT_DATA)
++                if (o->object.type != OBJECT_DATA) {
++                        log_error("%s:offset " OFSfmt ": object has type %d, expected %d",
++                                  j->unique_file->path, j->unique_offset,
++                                  o->object.type, OBJECT_DATA);
+                         return -EBADMSG;
++                }
++
++                r = journal_file_object_keep(j->unique_file, o, j->unique_offset);
++                if (r < 0)
++                        return r;
+ 
+                 r = return_data(j, j->unique_file, o, &odata, &ol);
+                 if (r < 0)
+@@ -2607,6 +2615,10 @@ _public_ int sd_journal_enumerate_unique(sd_journal *j, const void **data, size_
+                 if (found)
+                         continue;
+ 
++                r = journal_file_object_release(j->unique_file, o, j->unique_offset);
++                if (r < 0)
++                        return r;
++
+                 r = return_data(j, j->unique_file, o, data, l);
+                 if (r < 0)
+                         return r;
diff --git a/SOURCES/0187-gpt-auto-generator-skip-nonexistent-devices.patch b/SOURCES/0187-gpt-auto-generator-skip-nonexistent-devices.patch
new file mode 100644
index 0000000..4b7115f
--- /dev/null
+++ b/SOURCES/0187-gpt-auto-generator-skip-nonexistent-devices.patch
@@ -0,0 +1,32 @@
+From 7f3f1b3f979a96182b2eb44eeea86993506108d5 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?=C5=81ukasz=20Stelmach?= <l.stelmach@samsung.com>
+Date: Tue, 7 Jan 2014 15:00:22 +0100
+Subject: [PATCH] gpt-auto-generator: skip nonexistent devices
+
+The devices we work with have eMMC chips for storage. The chips
+provide four "hardware" partitions.  The first is /dev/mmcblk0, it
+takes almost whole space and holds a GPT with several real partitions
+(/dev/mmcblk0p?). Then there are three block devices (mmcblk0boot0,
+mmcblk0boot1, rpmb) that are part of the same hardware as mmcblk0 that
+are presented by the kernel as children of the latter. That relationship
+makes gpt-auto-generator try to peek them but since they are not GPT
+partitions blkid_do_safeprobe() returns -2 making verify_gpt_parition()
+function return -ENODEV.
+---
+ src/gpt-auto-generator/gpt-auto-generator.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/src/gpt-auto-generator/gpt-auto-generator.c b/src/gpt-auto-generator/gpt-auto-generator.c
+index d2b4213..1f09aed 100644
+--- a/src/gpt-auto-generator/gpt-auto-generator.c
++++ b/src/gpt-auto-generator/gpt-auto-generator.c
+@@ -306,6 +306,9 @@ static int enumerate_partitions(struct udev *udev, dev_t dev) {
+ 
+                 r = verify_gpt_partition(node, &type_id, &nr, &fstype);
+                 if (r < 0) {
++                        /* skip child devices which are not detected properly */
++                        if (r == -ENODEV)
++                                continue;
+                         log_error("Failed to verify GPT partition %s: %s",
+                                   node, strerror(-r));
+                         udev_device_unref(q);
diff --git a/SOURCES/0188-gpt-auto-generator-use-EBADSLT-code-when-unable-to-d.patch b/SOURCES/0188-gpt-auto-generator-use-EBADSLT-code-when-unable-to-d.patch
new file mode 100644
index 0000000..3b194f3
--- /dev/null
+++ b/SOURCES/0188-gpt-auto-generator-use-EBADSLT-code-when-unable-to-d.patch
@@ -0,0 +1,38 @@
+From 59250a9f6ac82b91cae43ae6a022298df1a67ee1 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Sat, 11 Jan 2014 16:45:29 -0500
+Subject: [PATCH] gpt-auto-generator: use EBADSLT code when unable to detect
+ partition type
+
+ENODEV suggests that something is missing, which is be misleading
+here.
+---
+ src/gpt-auto-generator/gpt-auto-generator.c | 8 +++-----
+ 1 file changed, 3 insertions(+), 5 deletions(-)
+
+diff --git a/src/gpt-auto-generator/gpt-auto-generator.c b/src/gpt-auto-generator/gpt-auto-generator.c
+index 1f09aed..f1749be 100644
+--- a/src/gpt-auto-generator/gpt-auto-generator.c
++++ b/src/gpt-auto-generator/gpt-auto-generator.c
+@@ -73,10 +73,8 @@ static int verify_gpt_partition(const char *node, sd_id128_t *type, unsigned *nr
+ 
+         errno = 0;
+         r = blkid_do_safeprobe(b);
+-        if (r == -2)
+-                return -ENODEV;
+-        else if (r == 1)
+-                return -ENODEV;
++        if (r == -2 || r == 1) /* no result or uncertain */
++                return -EBADSLT;
+         else if (r != 0)
+                 return errno ? -errno : -EIO;
+ 
+@@ -307,7 +305,7 @@ static int enumerate_partitions(struct udev *udev, dev_t dev) {
+                 r = verify_gpt_partition(node, &type_id, &nr, &fstype);
+                 if (r < 0) {
+                         /* skip child devices which are not detected properly */
+-                        if (r == -ENODEV)
++                        if (r == -EBADSLT)
+                                 continue;
+                         log_error("Failed to verify GPT partition %s: %s",
+                                   node, strerror(-r));
diff --git a/SOURCES/0189-nspawn-explicitly-terminate-machines-when-we-exit-ns.patch b/SOURCES/0189-nspawn-explicitly-terminate-machines-when-we-exit-ns.patch
new file mode 100644
index 0000000..b3eb736
--- /dev/null
+++ b/SOURCES/0189-nspawn-explicitly-terminate-machines-when-we-exit-ns.patch
@@ -0,0 +1,123 @@
+From 5a69011a7d265ec42562fdfdb99d886570a49d7a Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart@poettering.net>
+Date: Wed, 6 Nov 2013 02:05:06 +0100
+Subject: [PATCH] nspawn: explicitly terminate machines when we exit nspawn
+
+https://bugs.freedesktop.org/show_bug.cgi?id=68370
+https://bugzilla.redhat.com/show_bug.cgi?id=988883
+
+Conflicts:
+	src/nspawn/nspawn.c
+
+Conflicts:
+	src/nspawn/nspawn.c
+---
+ src/nspawn/nspawn.c | 68 +++++++++++++++++++++++++++++++++++++++++++++++++----
+ 1 file changed, 64 insertions(+), 4 deletions(-)
+
+diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c
+index 4bc49a3..f326f99 100644
+--- a/src/nspawn/nspawn.c
++++ b/src/nspawn/nspawn.c
+@@ -43,9 +43,9 @@
+ #include <sys/socket.h>
+ #include <linux/netlink.h>
+ 
+-#include <systemd/sd-daemon.h>
+-#include <systemd/sd-bus.h>
+-
++#include "sd-daemon.h"
++#include "sd-bus.h"
++#include "sd-id128.h"
+ #include "log.h"
+ #include "util.h"
+ #include "mkdir.h"
+@@ -56,13 +56,13 @@
+ #include "strv.h"
+ #include "path-util.h"
+ #include "loopback-setup.h"
+-#include "sd-id128.h"
+ #include "dev-setup.h"
+ #include "fdset.h"
+ #include "build.h"
+ #include "fileio.h"
+ #include "bus-internal.h"
+ #include "bus-message.h"
++#include "bus-error.h"
+ 
+ #ifndef TTY_GID
+ #define TTY_GID 5
+@@ -1229,6 +1229,60 @@ static int register_machine(void) {
+         return 0;
+ }
+ 
++static int terminate_machine(pid_t pid) {
++        _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL;
++        _cleanup_bus_message_unref_ sd_bus_message *reply = NULL;
++        _cleanup_bus_unref_ sd_bus *bus = NULL;
++        const char *path;
++        int r;
++
++        r = sd_bus_open_system(&bus);
++        if (r < 0) {
++                log_error("Failed to open system bus: %s", strerror(-r));
++                return r;
++        }
++
++        r = sd_bus_call_method(
++                        bus,
++                        "org.freedesktop.machine1",
++                        "/org/freedesktop/machine1",
++                        "org.freedesktop.machine1.Manager",
++                        "GetMachineByPID",
++                        &error,
++                        &reply,
++                        "u",
++                        (uint32_t) pid);
++        if (r < 0) {
++                /* Note that the machine might already have been
++                 * cleaned up automatically, hence don't consider it a
++                 * failure if we cannot get the machine object. */
++                log_debug("Failed to get machine: %s", bus_error_message(&error, r));
++                return 0;
++        }
++
++        r = sd_bus_message_read(reply, "o", &path);
++        if (r < 0) {
++                log_error("Failed to parse GetMachineByPID() reply: %s", bus_error_message(&error, r));
++                return r;
++        }
++
++        r = sd_bus_call_method(
++                        bus,
++                        "org.freedesktop.machine1",
++                        path,
++                        "org.freedesktop.machine1.Machine",
++                        "Terminate",
++                        &error,
++                        NULL,
++                        NULL);
++        if (r < 0) {
++                log_debug("Failed to terminate machine: %s", bus_error_message(&error, r));
++                return 0;
++        }
++
++        return 0;
++}
++
+ static bool audit_enabled(void) {
+         int fd;
+ 
+@@ -1704,6 +1758,12 @@ int main(int argc, char *argv[]) {
+                 if (saved_attr_valid)
+                         tcsetattr(STDIN_FILENO, TCSANOW, &saved_attr);
+ 
++                /* Kill if it is not dead yet anyway */
++                terminate_machine(pid);
++
++                /* Redundant, but better safe than sorry */
++                kill(pid, SIGKILL);
++
+                 k = wait_for_terminate(pid, &status);
+                 if (k < 0) {
+                         r = EXIT_FAILURE;
diff --git a/SOURCES/0190-bash-completion-journalctl-file.patch b/SOURCES/0190-bash-completion-journalctl-file.patch
new file mode 100644
index 0000000..2da6b7c
--- /dev/null
+++ b/SOURCES/0190-bash-completion-journalctl-file.patch
@@ -0,0 +1,35 @@
+From 30b346ca4f331934ce49a1199137778562ff38d2 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Fri, 15 Nov 2013 19:00:01 -0500
+Subject: [PATCH] bash-completion: journalctl --file
+
+Conflicts:
+	shell-completion/bash/journalctl
+---
+ shell-completion/bash/journalctl | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+diff --git a/shell-completion/bash/journalctl b/shell-completion/bash/journalctl
+index 3c40d57..441b636 100644
+--- a/shell-completion/bash/journalctl
++++ b/shell-completion/bash/journalctl
+@@ -43,7 +43,7 @@ _journalctl() {
+                               -h --help -l --local --new-id128 -m --merge --no-pager
+                               --no-tail -q --quiet --setup-keys --this-boot --verify
+                               --version --list-catalog --update-catalog'
+-                       [ARG]='-b --boot --this-boot -D --directory -F --field
++                       [ARG]='-b --boot --this-boot -D --directory --file -F --field
+                               -o --output -u --unit --user-unit'
+                 [ARGUNKNOWN]='-c --cursor --interval -n --lines -p --priority --since --until
+                               --verify-key'
+@@ -58,6 +58,10 @@ _journalctl() {
+                                 comps=$(compgen -d -- "$cur")
+                                 compopt -o filenames
+                         ;;
++                        --file)
++                                comps=$(compgen -f -- "$cur")
++                                compopt -o filenames
++                        ;;
+                         --output|-o)
+                                 comps='short short-monotonic verbose export json cat'
+                         ;;
diff --git a/SOURCES/0191-journalctl-zsh-completion-fix-several-issues-in-help.patch b/SOURCES/0191-journalctl-zsh-completion-fix-several-issues-in-help.patch
new file mode 100644
index 0000000..24cc9fe
--- /dev/null
+++ b/SOURCES/0191-journalctl-zsh-completion-fix-several-issues-in-help.patch
@@ -0,0 +1,135 @@
+From d7e71959bf4e186404e112e0c5c5c1ecdbe2056c Mon Sep 17 00:00:00 2001
+From: "Jason St. John" <jstjohn@purdue.edu>
+Date: Tue, 17 Dec 2013 21:36:27 -0500
+Subject: [PATCH] journalctl,zsh-completion: fix several issues in --help
+ message text
+
+-- fix grammar and reword some descriptions for clarity
+-- add a useful description of what --follow does
+-- fix the description for --after-cursor
+-- properly introduce the FSS acronym for "Forward Secure Sealing" in
+both sections
+-- clarify the --disk-usage command
+
+[zj: perform similar changes to zsh completions]
+
+squash! journalctl: fix several issues in --help message text
+
+Conflicts:
+	src/journal/journalctl.c
+
+Conflicts:
+	shell-completion/zsh/_journalctl
+	src/journal/journalctl.c
+---
+ shell-completion/zsh/_journalctl | 14 +++++++-------
+ src/journal/journalctl.c         | 34 +++++++++++++++++-----------------
+ 2 files changed, 24 insertions(+), 24 deletions(-)
+
+diff --git a/shell-completion/zsh/_journalctl b/shell-completion/zsh/_journalctl
+index 73646b5..57f9452 100644
+--- a/shell-completion/zsh/_journalctl
++++ b/shell-completion/zsh/_journalctl
+@@ -70,14 +70,14 @@ _arguments -s \
+     {-q,--quiet}"[Don't show privilege warning]" \
+     {-m,--merge}'[Show entries from all available journals]' \
+     {-b+,--boot=}'[Show data only from the specified boot or offset]:boot id or offset:_journal_boots' \
+-    {-k,--dmesg}'[Show only kernel messages, Implies -b]' \
++    {-k,--dmesg}'[Show only kernel messages from the current boot]' \
+     {-u+,--unit=}'[Show data only from the specified unit]:units:_journal_fields _SYSTEMD_UNIT' \
+     '--user-unit=[Show data only from the specified user session unit]:units:_journal_fields USER_UNIT' \
+     {-p+,--priority=}'[Show only messages within the specified priority range]:priority:_journal_fields PRIORITY' \
+-    {-c+,--cursor=}'[Start showing entries from specified cursor]:cursors:_journal_fields __CURSORS' \
+-    '--after-cursor=[Start showing entries from the location in the journal after the cursor]:cursors:_journal_fields __CURSORS' \
+-    '--since=[Start showing entries newer or of the specified date]:YYYY-MM-DD HH\:MM\:SS' \
+-    '--until=[Stop showing entries older or of the specified date]:YYYY-MM-DD HH\:MM\:SS' \
++    {-c+,--cursor=}'[Start showing entries from the specified cursor]:cursors:_journal_fields __CURSORS' \
++    '--after-cursor=[Start showing entries from after the specified cursor]:cursors:_journal_fields __CURSORS' \
++    '--since=[Start showing entries on or newer than the specified date]:YYYY-MM-DD HH\:MM\:SS' \
++    '--until=[Stop showing entries on or older than the specified date]:YYYY-MM-DD HH\:MM\:SS' \
+     {-F,--field=}'[List all values a certain field takes]:Fields:_list_fields' \
+     '--system[Show system and kernel messages]' \
+     '--user[Show messages from user services]' \
+@@ -90,8 +90,8 @@ _arguments -s \
+     '--list-catalog[List messages in catalog]' \
+     '--dump-catalog[Dump messages in catalog]' \
+     '--update-catalog[Update binary catalog database]' \
+-    '--setup-keys[Generate new FSS key pair]' \
+-    '--force[Force recreation of FSS keys]' \
++    '--setup-keys[Generate a new FSS key pair]' \
++    '--force[Force recreation of the FSS keys]' \
+     '--interval=[Time interval for changing the FSS sealing key]:time interval' \
+     '--verify[Verify journal file consistency]' \
+     '--verify-key=[Specify FSS verification key]:FSS key' \
+diff --git a/src/journal/journalctl.c b/src/journal/journalctl.c
+index 0876ee6..54e3ddd 100644
+--- a/src/journal/journalctl.c
++++ b/src/journal/journalctl.c
+@@ -118,29 +118,29 @@ static int help(void) {
+                "Query the journal.\n\n"
+                "Flags:\n"
+                "     --system              Show only the system journal\n"
+-               "     --user                Show only the user journal for current user\n"
+-               "     --since=DATE          Start showing entries newer or of the specified date\n"
+-               "     --until=DATE          Stop showing entries older or of the specified date\n"
+-               "  -c --cursor=CURSOR       Start showing entries from specified cursor\n"
+-               "     --after-cursor=CURSOR Start showing entries from specified cursor\n"
++               "     --user                Show only the user journal for the current user\n"
++               "     --since=DATE          Start showing entries on or newer than the specified date\n"
++               "     --until=DATE          Stop showing entries on or older than the specified date\n"
++               "  -c --cursor=CURSOR       Start showing entries from the specified cursor\n"
++               "     --after-cursor=CURSOR Start showing entries from after the specified cursor\n"
+                "     --show-cursor         Print the cursor after all the entries\n"
+-               "  -b --boot[=ID]           Show data only from ID or current boot if unspecified\n"
+-               "  -k --dmesg               Show kernel message log from current boot\n"
++               "  -b --boot[=ID]           Show data only from ID or, if unspecified, the current boot\n"
++               "  -k --dmesg               Show kernel message log from the current boot\n"
+                "  -u --unit=UNIT           Show data only from the specified unit\n"
+                "     --user-unit=UNIT      Show data only from the specified user session unit\n"
+                "  -p --priority=RANGE      Show only messages within the specified priority range\n"
+                "  -e --pager-end           Immediately jump to end of the journal in the pager\n"
+-               "  -f --follow              Follow journal\n"
++               "  -f --follow              Follow the journal\n"
+                "  -n --lines[=INTEGER]     Number of journal entries to show\n"
+                "     --no-tail             Show all lines, even in follow mode\n"
+                "  -r --reverse             Show the newest entries first\n"
+                "  -o --output=STRING       Change journal output mode (short, short-iso,\n"
+-               "                           short-precise, short-monotonic, verbose,\n"
+-               "                           export, json, json-pretty, json-sse, cat)\n"
++               "                                   short-precise, short-monotonic, verbose,\n"
++               "                                   export, json, json-pretty, json-sse, cat)\n"
+                "  -x --catalog             Add message explanations where available\n"
+                "  -l --full                Do not ellipsize fields\n"
+                "  -a --all                 Show all fields, including long and unprintable\n"
+-               "  -q --quiet               Don't show privilege warning\n"
++               "  -q --quiet               Do not show privilege warning\n"
+                "     --no-pager            Do not pipe output into a pager\n"
+                "  -m --merge               Show entries from all available journals\n"
+                "  -D --directory=PATH      Show journal files from directory\n"
+@@ -149,20 +149,20 @@ static int help(void) {
+ #ifdef HAVE_GCRYPT
+                "     --interval=TIME       Time interval for changing the FSS sealing key\n"
+                "     --verify-key=KEY      Specify FSS verification key\n"
+-               "     --force               Force overriding new FSS key pair with --setup-keys\n"
++               "     --force               Force overriding of the FSS key pair with --setup-keys\n"
+ #endif
+                "\nCommands:\n"
+-               "  -h --help                Show this help\n"
++               "  -h --help                Show this help text\n"
+                "     --version             Show package version\n"
+-               "     --new-id128           Generate a new 128 Bit ID\n"
++               "     --new-id128           Generate a new 128-bit ID\n"
+                "     --header              Show journal header information\n"
+-               "     --disk-usage          Show total disk usage\n"
+-               "  -F --field=FIELD         List all values a certain field takes\n"
++               "     --disk-usage          Show total disk usage of all journal files\n"
++               "  -F --field=FIELD         List all values that a specified field takes\n"
+                "     --list-catalog        Show message IDs of all entries in the message catalog\n"
+                "     --dump-catalog        Show entries in the message catalog\n"
+                "     --update-catalog      Update the message catalog database\n"
+ #ifdef HAVE_GCRYPT
+-               "     --setup-keys          Generate new FSS key pair\n"
++               "     --setup-keys          Generate a new FSS key pair\n"
+                "     --verify              Verify journal file consistency\n"
+ #endif
+                , program_invocation_short_name);
diff --git a/SOURCES/0192-cgroup-run-PID-1-in-the-root-cgroup.patch b/SOURCES/0192-cgroup-run-PID-1-in-the-root-cgroup.patch
new file mode 100644
index 0000000..38a14e5
--- /dev/null
+++ b/SOURCES/0192-cgroup-run-PID-1-in-the-root-cgroup.patch
@@ -0,0 +1,61 @@
+From c46be83563a2d20a480988dab55404f941b9cc35 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart@poettering.net>
+Date: Tue, 5 Nov 2013 22:14:52 +0100
+Subject: [PATCH] cgroup: run PID 1 in the root cgroup
+
+This way cleaning up the cgroup tree on shutdown is a lot easier since
+we are in the root dir. Also PID 1 was previously artificially placed in
+system.slice, even though our rule actually was not to have processes in
+slices. The root slice otoh is magic anyway, so having PID 1 in there
+sounds less surprising.
+
+Of course, this means that PID is scheduled against the three top-level
+slices.
+---
+ src/core/cgroup.c | 16 ++++++++--------
+ 1 file changed, 8 insertions(+), 8 deletions(-)
+
+diff --git a/src/core/cgroup.c b/src/core/cgroup.c
+index b60707c..32e2599 100644
+--- a/src/core/cgroup.c
++++ b/src/core/cgroup.c
+@@ -591,8 +591,8 @@ pid_t unit_search_main_pid(Unit *u) {
+ 
+ int manager_setup_cgroup(Manager *m) {
+         _cleanup_free_ char *path = NULL;
++        char *e;
+         int r;
+-        char *e, *a;
+ 
+         assert(m);
+ 
+@@ -612,9 +612,13 @@ int manager_setup_cgroup(Manager *m) {
+                 return r;
+         }
+ 
+-        /* Already in /system.slice? If so, let's cut this off again */
++        /* LEGACY: Already in /system.slice? If so, let's cut this
++         * off. This is to support live upgrades from older systemd
++         * versions where PID 1 was moved there. */
+         if (m->running_as == SYSTEMD_SYSTEM) {
+                 e = endswith(m->cgroup_root, "/" SPECIAL_SYSTEM_SLICE);
++                if (!e)
++                        e = endswith(m->cgroup_root, "/system");
+                 if (e)
+                         *e = 0;
+         }
+@@ -645,12 +649,8 @@ int manager_setup_cgroup(Manager *m) {
+                         log_debug("Release agent already installed.");
+         }
+ 
+-        /* 4. Realize the system slice and put us in there */
+-        if (m->running_as == SYSTEMD_SYSTEM) {
+-                a = strappenda(m->cgroup_root, "/" SPECIAL_SYSTEM_SLICE);
+-                r = cg_create_and_attach(SYSTEMD_CGROUP_CONTROLLER, a, 0);
+-        } else
+-                r = cg_create_and_attach(SYSTEMD_CGROUP_CONTROLLER, m->cgroup_root, 0);
++        /* 4. Make sure we are in the root cgroup */
++        r = cg_create_and_attach(SYSTEMD_CGROUP_CONTROLLER, m->cgroup_root, 0);
+         if (r < 0) {
+                 log_error("Failed to create root cgroup hierarchy: %s", strerror(-r));
+                 return r;
diff --git a/SOURCES/0193-pam-retrieve-value-of-debug-param-first.patch b/SOURCES/0193-pam-retrieve-value-of-debug-param-first.patch
new file mode 100644
index 0000000..5d6a2f1
--- /dev/null
+++ b/SOURCES/0193-pam-retrieve-value-of-debug-param-first.patch
@@ -0,0 +1,36 @@
+From c9f24bd31d2b980718ecdc55ab33f5baa35ec4a2 Mon Sep 17 00:00:00 2001
+From: Michal Sekletar <msekleta@redhat.com>
+Date: Mon, 10 Feb 2014 13:47:38 +0100
+Subject: [PATCH] pam: retrieve value of debug param first
+
+We are setting debug to false by default, so we should should first retrieve
+value of debug parameter and then log only if debug was set. Now we don't take
+the value passed to us into the count.
+---
+ src/login/pam-module.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/src/login/pam-module.c b/src/login/pam-module.c
+index 973daf7..878a704 100644
+--- a/src/login/pam-module.c
++++ b/src/login/pam-module.c
+@@ -199,9 +199,6 @@ _public_ PAM_EXTERN int pam_sm_open_session(
+ 
+         dbus_error_init(&error);
+ 
+-        if (debug)
+-                pam_syslog(handle, LOG_INFO, "pam-systemd initializing");
+-
+         /* Make this a NOP on non-logind systems */
+         if (!logind_running())
+                 return PAM_SUCCESS;
+@@ -214,6 +211,9 @@ _public_ PAM_EXTERN int pam_sm_open_session(
+                 goto finish;
+         }
+ 
++        if (debug)
++                pam_syslog(handle, LOG_INFO, "pam-systemd initializing");
++
+         r = get_user_data(handle, &username, &pw);
+         if (r != PAM_SUCCESS)
+                 goto finish;
diff --git a/SOURCES/0194-utils-silence-the-compiler-warning.patch b/SOURCES/0194-utils-silence-the-compiler-warning.patch
new file mode 100644
index 0000000..7c644e0
--- /dev/null
+++ b/SOURCES/0194-utils-silence-the-compiler-warning.patch
@@ -0,0 +1,22 @@
+From 34c5f9d3b7020312310de1ea9b6446c51b911cb3 Mon Sep 17 00:00:00 2001
+From: Michal Sekletar <msekleta@redhat.com>
+Date: Mon, 10 Feb 2014 15:41:47 +0100
+Subject: [PATCH] utils: silence the compiler warning
+
+---
+ src/shared/util.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/shared/util.c b/src/shared/util.c
+index e9b8255..2086847 100644
+--- a/src/shared/util.c
++++ b/src/shared/util.c
+@@ -427,7 +427,7 @@ char *split_quoted(const char *c, size_t *l, char **state) {
+                 *state = (char*) e;
+         }
+ 
+-        return current;
++        return (char *) current;
+ }
+ 
+ int get_parent_of_pid(pid_t pid, pid_t *_ppid) {
diff --git a/SOURCES/0195-s390-getty-generator-initialize-essential-system-ter.patch b/SOURCES/0195-s390-getty-generator-initialize-essential-system-ter.patch
new file mode 100644
index 0000000..ce31e20
--- /dev/null
+++ b/SOURCES/0195-s390-getty-generator-initialize-essential-system-ter.patch
@@ -0,0 +1,58 @@
+From d87f3874bac62d012ff5e573c2b803b3244a02da Mon Sep 17 00:00:00 2001
+From: Hendrik Brueckner <brueckner@redhat.com>
+Date: Fri, 31 Jan 2014 17:08:37 +0100
+Subject: [PATCH] s390/getty-generator: initialize essential system
+ terminals/consoles
+
+Ensure to start getty programs on all essential system consoles on Linux on
+System z.  Add these essential devices to the list of virtualization_consoles
+to always generate getty configurations.
+
+For the sake of completion, the list of essential consoles is:
+
+  /dev/sclp_line0 - Operating system messages applet (LPAR)
+  /dev/ttysclp0 - Integrated ASCII console applet (z/VM and LPAR)
+  /dev/ttyS0 - Already handled by systemd (3215 console on z/VM)
+  /dev/hvc0  - Already handled by systemd (IUCV HVC terminal on z/VM)
+
+Depending on the environment, z/VM or LPAR, only a subset of these terminals
+are available.
+
+See also RH BZ 860158[1] "Cannot login via Operating System Console into RHEL7
+instance installed on a LPAR".  This bugzilla actually blocks the installation
+of Linux on System z instances in LPAR mode.
+
+[1] https://bugzilla.redhat.com/show_bug.cgi?id=860158
+---
+ rules/99-systemd.rules.in             | 2 +-
+ src/getty-generator/getty-generator.c | 4 +++-
+ 2 files changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/rules/99-systemd.rules.in b/rules/99-systemd.rules.in
+index 307f18f..0e0a567 100644
+--- a/rules/99-systemd.rules.in
++++ b/rules/99-systemd.rules.in
+@@ -7,7 +7,7 @@
+ 
+ ACTION=="remove", GOTO="systemd_end"
+ 
+-SUBSYSTEM=="tty", KERNEL=="tty[a-zA-Z]*|hvc*|xvc*|hvsi*", TAG+="systemd"
++SUBSYSTEM=="tty", KERNEL=="tty[a-zA-Z]*|hvc*|xvc*|hvsi*|ttysclp*|sclp_line*", TAG+="systemd"
+ 
+ KERNEL=="vport*", TAG+="systemd"
+ 
+diff --git a/src/getty-generator/getty-generator.c b/src/getty-generator/getty-generator.c
+index 6c93806..40374b5 100644
+--- a/src/getty-generator/getty-generator.c
++++ b/src/getty-generator/getty-generator.c
+@@ -91,7 +91,9 @@ int main(int argc, char *argv[]) {
+         static const char virtualization_consoles[] =
+                 "hvc0\0"
+                 "xvc0\0"
+-                "hvsi0\0";
++                "hvsi0\0"
++                "sclp_line0\0"
++                "ttysclp0\0";
+ 
+         int r = EXIT_SUCCESS;
+         char *active;
diff --git a/SOURCES/0196-pam-use-correct-log-level.patch b/SOURCES/0196-pam-use-correct-log-level.patch
new file mode 100644
index 0000000..fb6ba86
--- /dev/null
+++ b/SOURCES/0196-pam-use-correct-log-level.patch
@@ -0,0 +1,22 @@
+From e4478da5da5d3cfa56cf88e8d8ef598245e96535 Mon Sep 17 00:00:00 2001
+From: Michal Sekletar <msekleta@redhat.com>
+Date: Mon, 10 Feb 2014 16:53:05 +0100
+Subject: [PATCH] pam: use correct log level
+
+---
+ src/login/pam-module.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/login/pam-module.c b/src/login/pam-module.c
+index 878a704..02f1618 100644
+--- a/src/login/pam-module.c
++++ b/src/login/pam-module.c
+@@ -212,7 +212,7 @@ _public_ PAM_EXTERN int pam_sm_open_session(
+         }
+ 
+         if (debug)
+-                pam_syslog(handle, LOG_INFO, "pam-systemd initializing");
++                pam_syslog(handle, LOG_DEBUG, "pam-systemd initializing");
+ 
+         r = get_user_data(handle, &username, &pw);
+         if (r != PAM_SUCCESS)
diff --git a/SOURCES/0197-pam-do-not-set-XDG_RUNTIME_DIR-unconditionally.patch b/SOURCES/0197-pam-do-not-set-XDG_RUNTIME_DIR-unconditionally.patch
new file mode 100644
index 0000000..0e128e9
--- /dev/null
+++ b/SOURCES/0197-pam-do-not-set-XDG_RUNTIME_DIR-unconditionally.patch
@@ -0,0 +1,159 @@
+From 281100560056e06f69d2cdb4dcc854bd3717734f Mon Sep 17 00:00:00 2001
+From: Michal Sekletar <msekleta@redhat.com>
+Date: Mon, 10 Feb 2014 17:41:32 +0100
+Subject: [PATCH] pam: do not set XDG_RUNTIME_DIR unconditionally
+
+If the session's original user is not the same as the newly logged in one we
+will not set XDG_RUNTIME_DIR.
+
+Patch based on upstream commit baae0358f349870544884e405e82e4be7d8add9f
+---
+ src/login/logind-dbus.c         |  2 ++
+ src/login/logind-session-dbus.c |  1 +
+ src/login/pam-module.c          | 52 ++++++++++++++++++++---------------------
+ 3 files changed, 29 insertions(+), 26 deletions(-)
+
+diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c
+index bb85c7d..69e94aa 100644
+--- a/src/login/logind-dbus.c
++++ b/src/login/logind-dbus.c
+@@ -90,6 +90,7 @@
+         "   <arg name=\"path\" type=\"o\" direction=\"out\"/>\n"        \
+         "   <arg name=\"runtime_path\" type=\"o\" direction=\"out\"/>\n" \
+         "   <arg name=\"fd\" type=\"h\" direction=\"out\"/>\n"          \
++        "   <arg name=\"uid\" type=\"u\" direction=\"out\"/>\n"         \
+         "   <arg name=\"seat\" type=\"s\" direction=\"out\"/>\n"        \
+         "   <arg name=\"vtnr\" type=\"u\" direction=\"out\"/>\n"        \
+         "   <arg name=\"existing\" type=\"b\" direction=\"out\"/>\n"    \
+@@ -523,6 +524,7 @@ static int bus_manager_create_session(Manager *m, DBusMessage *message) {
+                                 DBUS_TYPE_OBJECT_PATH, &path,
+                                 DBUS_TYPE_STRING, &session->user->runtime_path,
+                                 DBUS_TYPE_UNIX_FD, &fifo_fd,
++                                DBUS_TYPE_UINT32, &session->user->uid,
+                                 DBUS_TYPE_STRING, &cseat,
+                                 DBUS_TYPE_UINT32, &vtnr,
+                                 DBUS_TYPE_BOOLEAN, &exists,
+diff --git a/src/login/logind-session-dbus.c b/src/login/logind-session-dbus.c
+index be4e01c..86b0746 100644
+--- a/src/login/logind-session-dbus.c
++++ b/src/login/logind-session-dbus.c
+@@ -755,6 +755,7 @@ int session_send_create_reply(Session *s, DBusError *error) {
+                                     DBUS_TYPE_OBJECT_PATH, &path,
+                                     DBUS_TYPE_STRING, &s->user->runtime_path,
+                                     DBUS_TYPE_UNIX_FD, &fifo_fd,
++                                    DBUS_TYPE_UINT32, &s->user->uid,
+                                     DBUS_TYPE_STRING, &cseat,
+                                     DBUS_TYPE_UINT32, &vtnr,
+                                     DBUS_TYPE_BOOLEAN, &exists,
+diff --git a/src/login/pam-module.c b/src/login/pam-module.c
+index 02f1618..22d9733 100644
+--- a/src/login/pam-module.c
++++ b/src/login/pam-module.c
+@@ -86,31 +86,24 @@ static int get_user_data(
+ 
+         const char *username = NULL;
+         struct passwd *pw = NULL;
+-        uid_t uid;
+         int r;
+ 
+         assert(handle);
+         assert(ret_username);
+         assert(ret_pw);
+ 
+-        r = audit_loginuid_from_pid(0, &uid);
+-        if (r >= 0)
+-                pw = pam_modutil_getpwuid(handle, uid);
+-        else {
+-                r = pam_get_user(handle, &username, NULL);
+-                if (r != PAM_SUCCESS) {
+-                        pam_syslog(handle, LOG_ERR, "Failed to get user name.");
+-                        return r;
+-                }
+-
+-                if (isempty(username)) {
+-                        pam_syslog(handle, LOG_ERR, "User name not valid.");
+-                        return PAM_AUTH_ERR;
+-                }
++        r = pam_get_user(handle, &username, NULL);
++        if (r != PAM_SUCCESS) {
++                pam_syslog(handle, LOG_ERR, "Failed to get user name.");
++                return r;
++        }
+ 
+-                pw = pam_modutil_getpwnam(handle, username);
++        if (isempty(username)) {
++                pam_syslog(handle, LOG_ERR, "User name not valid.");
++                return PAM_AUTH_ERR;
+         }
+ 
++        pw = pam_modutil_getpwnam(handle, username);
+         if (!pw) {
+                 pam_syslog(handle, LOG_ERR, "Failed to get user data.");
+                 return PAM_USER_UNKNOWN;
+@@ -123,16 +116,14 @@ static int get_user_data(
+ }
+ 
+ static int get_seat_from_display(const char *display, const char **seat, uint32_t *vtnr) {
+-        _cleanup_free_ char *p = NULL;
+-        int r;
++        _cleanup_free_ char *p = NULL, *tty=NULL;
+         _cleanup_close_ int fd = -1;
+         union sockaddr_union sa = {
+                 .un.sun_family = AF_UNIX,
+         };
+         struct ucred ucred;
+         socklen_t l;
+-        _cleanup_free_ char *tty = NULL;
+-        int v;
++        int v, r;
+ 
+         assert(display);
+         assert(vtnr);
+@@ -186,14 +177,14 @@ _public_ PAM_EXTERN int pam_sm_open_session(
+         bool debug = false;
+         const char *username, *id, *object_path, *runtime_path, *service = NULL, *tty = NULL, *display = NULL, *remote_user = NULL, *remote_host = NULL, *seat = NULL, *type = NULL, *class = NULL, *class_pam = NULL, *cvtnr = NULL;
+         DBusError error;
+-        uint32_t uid, pid;
+         DBusMessageIter iter;
+         int session_fd = -1;
+         DBusConnection *bus = NULL;
+         DBusMessage *m = NULL, *reply = NULL;
+         dbus_bool_t remote, existing;
+         int r;
+-        uint32_t vtnr = 0;
++        uint32_t uid, pid, vtnr = 0;
++        uid_t original_uid;
+ 
+         assert(handle);
+ 
+@@ -389,6 +380,7 @@ _public_ PAM_EXTERN int pam_sm_open_session(
+                                    DBUS_TYPE_OBJECT_PATH, &object_path,
+                                    DBUS_TYPE_STRING, &runtime_path,
+                                    DBUS_TYPE_UNIX_FD, &session_fd,
++                                   DBUS_TYPE_UINT32, &original_uid,
+                                    DBUS_TYPE_STRING, &seat,
+                                    DBUS_TYPE_UINT32, &vtnr,
+                                    DBUS_TYPE_BOOLEAN, &existing,
+@@ -409,10 +401,18 @@ _public_ PAM_EXTERN int pam_sm_open_session(
+                 goto finish;
+         }
+ 
+-        r = pam_misc_setenv(handle, "XDG_RUNTIME_DIR", runtime_path, 0);
+-        if (r != PAM_SUCCESS) {
+-                pam_syslog(handle, LOG_ERR, "Failed to set runtime dir.");
+-                goto finish;
++        if (original_uid == pw->pw_uid) {
++               /* Don't set $XDG_RUNTIME_DIR if the user we now
++                * authenticated for does not match the original user
++                * of the session. We do this in order not to result
++                * in privileged apps clobbering the runtime directory
++                * unnecessarily. */
++
++                r = pam_misc_setenv(handle, "XDG_RUNTIME_DIR", runtime_path, 0);
++                if (r != PAM_SUCCESS) {
++                        pam_syslog(handle, LOG_ERR, "Failed to set runtime dir.");
++                        return r;
++                }
+         }
+ 
+         if (!isempty(seat)) {
diff --git a/SOURCES/0198-selinux-Don-t-attempt-to-load-policy-in-initramfs-if.patch b/SOURCES/0198-selinux-Don-t-attempt-to-load-policy-in-initramfs-if.patch
new file mode 100644
index 0000000..9efd464
--- /dev/null
+++ b/SOURCES/0198-selinux-Don-t-attempt-to-load-policy-in-initramfs-if.patch
@@ -0,0 +1,40 @@
+From 4083e4d76b61bc9eb40583f941412c1ea1a0285b Mon Sep 17 00:00:00 2001
+From: Colin Walters <walters@verbum.org>
+Date: Fri, 21 Feb 2014 03:29:00 +0100
+Subject: [PATCH] selinux: Don't attempt to load policy in initramfs if it
+ doesn't exist
+
+Currently on at least Fedora, SELinux policy does not come in the
+initramfs.  systemd will attempt to load *both* in the initramfs and
+in the real root.
+
+Now, the selinux_init_load_policy() API has a regular error return
+value, as well as an "enforcing" boolean.  To determine enforcing
+state, it looks for /etc/selinux/config as well as the presence of
+"enforcing=" on the kernel command line.
+
+Ordinarily, neither of those exist in the initramfs, so it will return
+"unknown" for enforcing, and systemd will simply ignore the failure to
+load policy.
+---
+ src/core/selinux-setup.c | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+diff --git a/src/core/selinux-setup.c b/src/core/selinux-setup.c
+index 7a32ed5..9a5d6b2 100644
+--- a/src/core/selinux-setup.c
++++ b/src/core/selinux-setup.c
+@@ -58,6 +58,13 @@ int selinux_setup(bool *loaded_policy) {
+        cb.func_log = null_log;
+        selinux_set_callback(SELINUX_CB_LOG, cb);
+ 
++       /* Don't load policy in the initrd if we don't appear to have
++        * it.  For the real root, we check below if we've already
++        * loaded policy, and return gracefully.
++        */
++       if (in_initrd() && access(selinux_path(), F_OK) < 0)
++               return 0;
++
+        /* Already initialized by somebody else? */
+        r = getcon_raw(&con);
+        if (r == 0) {
diff --git a/SOURCES/0199-kernel-install-add-fedora-specific-callouts-to-new-k.patch b/SOURCES/0199-kernel-install-add-fedora-specific-callouts-to-new-k.patch
new file mode 100644
index 0000000..092bc0e
--- /dev/null
+++ b/SOURCES/0199-kernel-install-add-fedora-specific-callouts-to-new-k.patch
@@ -0,0 +1,42 @@
+From 4d66c1673654c639a350f784c59b4c613c94edf7 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Wed, 13 Mar 2013 07:57:53 +0100
+Subject: [PATCH] kernel-install: add fedora specific callouts to
+ new-kernel-pkg
+
+---
+ src/kernel-install/kernel-install | 21 +++++++++++++++++++++
+ 1 file changed, 21 insertions(+)
+
+diff --git a/src/kernel-install/kernel-install b/src/kernel-install/kernel-install
+index 3ae1d77..3a2ac56 100644
+--- a/src/kernel-install/kernel-install
++++ b/src/kernel-install/kernel-install
+@@ -19,6 +19,27 @@
+ # You should have received a copy of the GNU Lesser General Public License
+ # along with systemd; If not, see <http://www.gnu.org/licenses/>.
+ 
++if [[ -x /sbin/new-kernel-pkg ]]; then
++    [[ "$2" == *\+* ]] && flavor=-"${2##*+}"
++    case "$1" in
++        add)
++            /sbin/new-kernel-pkg --package "kernel${flavor}" --install "$2" || exit $?
++            /sbin/new-kernel-pkg --package "kernel${flavor}" --mkinitrd --dracut --depmod --update "$2" || exit $?
++            /sbin/new-kernel-pkg --package "kernel${flavor}" --rpmposttrans "$2" || exit $?
++            ;;
++        remove)
++            /sbin/new-kernel-pkg --package "kernel${flavor+-$flavor}" --rminitrd --rmmoddep --remove "$2" || exit $?
++            ;;
++        *)
++            ;;
++    esac
++
++    # exit, if we can't find a boot loader spec conforming setup
++    if ! [[ -d /boot/loader/entries || -L /boot/loader/entries ]]; then
++        exit 0
++    fi
++fi
++
+ usage()
+ {
+     echo "Usage:"
diff --git a/SOURCES/0200-remove-user-.service.patch b/SOURCES/0200-remove-user-.service.patch
new file mode 100644
index 0000000..d6784ca
--- /dev/null
+++ b/SOURCES/0200-remove-user-.service.patch
@@ -0,0 +1,91 @@
+From a76f607703911f314fea41148ef7c23fac20029d Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Wed, 30 Oct 2013 18:22:49 +0100
+Subject: [PATCH] remove user@.service
+
+fixes rhbz#1019738
+---
+ Makefile.am             |  2 --
+ src/login/logind-user.c | 42 ------------------------------------------
+ 2 files changed, 44 deletions(-)
+
+diff --git a/Makefile.am b/Makefile.am
+index f4867d9..df63275 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -437,7 +437,6 @@ nodist_systemunit_DATA = \
+ 	units/systemd-sysctl.service \
+ 	units/emergency.service \
+ 	units/rescue.service \
+-	units/user@.service \
+ 	units/systemd-hibernate.service \
+ 	units/systemd-hybrid-sleep.service \
+ 	units/systemd-suspend.service \
+@@ -486,7 +485,6 @@ EXTRA_DIST += \
+ 	units/user/systemd-exit.service.in \
+ 	units/systemd-fsck@.service.in \
+ 	units/systemd-fsck-root.service.in \
+-	units/user@.service.in \
+ 	units/systemd-udevd.service \
+ 	units/systemd-udev-trigger.service \
+ 	units/systemd-udev-settle.service \
+diff --git a/src/login/logind-user.c b/src/login/logind-user.c
+index b87311c..8e7256b 100644
+--- a/src/login/logind-user.c
++++ b/src/login/logind-user.c
+@@ -365,43 +365,6 @@ static int user_start_slice(User *u) {
+         return 0;
+ }
+ 
+-static int user_start_service(User *u) {
+-        DBusError error;
+-        char *job;
+-        int r;
+-
+-        assert(u);
+-
+-        dbus_error_init(&error);
+-
+-        if (!u->service) {
+-                char lu[DECIMAL_STR_MAX(unsigned long) + 1], *service;
+-                sprintf(lu, "%lu", (unsigned long) u->uid);
+-
+-                service = unit_name_build("user", lu, ".service");
+-                if (!service)
+-                        return log_oom();
+-
+-                r = manager_start_unit(u->manager, service, &error, &job);
+-                if (r < 0) {
+-                        log_error("Failed to start user service: %s", bus_error(&error, r));
+-                        dbus_error_free(&error);
+-
+-                        free(service);
+-                } else {
+-                        u->service = service;
+-
+-                        free(u->service_job);
+-                        u->service_job = job;
+-                }
+-        }
+-
+-        if (u->service)
+-                hashmap_put(u->manager->user_units, u->service, u);
+-
+-        return 0;
+-}
+-
+ int user_start(User *u) {
+         int r;
+ 
+@@ -422,11 +385,6 @@ int user_start(User *u) {
+         if (r < 0)
+                 return r;
+ 
+-        /* Spawn user systemd */
+-        r = user_start_service(u);
+-        if (r < 0)
+-                return r;
+-
+         if (!dual_timestamp_is_set(&u->timestamp))
+                 dual_timestamp_get(&u->timestamp);
+ 
diff --git a/SOURCES/0201-Fix-bad-assert-in-show_pid_array.patch b/SOURCES/0201-Fix-bad-assert-in-show_pid_array.patch
new file mode 100644
index 0000000..5a7ef1d
--- /dev/null
+++ b/SOURCES/0201-Fix-bad-assert-in-show_pid_array.patch
@@ -0,0 +1,26 @@
+From a01fee0ef04e93dbe1eecb1aa276e515114e9c1b Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Mon, 14 Oct 2013 19:15:24 -0400
+Subject: [PATCH] Fix bad assert in show_pid_array
+
+This function should get the same treatment as other qsort uses
+did in 7ff7394 "Never call qsort on potentially NULL arrays".
+
+Reported-by: Oleksii Shevchuk <alxchk@gmail.com>
+---
+ src/shared/cgroup-show.c | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/src/shared/cgroup-show.c b/src/shared/cgroup-show.c
+index f6e56db..aa0f017 100644
+--- a/src/shared/cgroup-show.c
++++ b/src/shared/cgroup-show.c
+@@ -44,8 +44,6 @@ static void show_pid_array(int pids[], unsigned n_pids, const char *prefix, unsi
+         unsigned i, m, pid_width;
+         pid_t biggest = 0;
+ 
+-        assert(n_pids > 0);
+-
+         /* Filter duplicates */
+         m = 0;
+         for (i = 0; i < n_pids; i++) {
diff --git a/SOURCES/0202-mount-don-t-send-out-PropertiesChanged-message-if-ac.patch b/SOURCES/0202-mount-don-t-send-out-PropertiesChanged-message-if-ac.patch
new file mode 100644
index 0000000..d3e7674
--- /dev/null
+++ b/SOURCES/0202-mount-don-t-send-out-PropertiesChanged-message-if-ac.patch
@@ -0,0 +1,69 @@
+From 3b321e8bb1548432624b374f7077f4aaaae40a2d Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart@poettering.net>
+Date: Wed, 26 Feb 2014 04:27:50 +0100
+Subject: [PATCH] mount: don't send out PropertiesChanged message if actually
+ nothing got changed
+
+Conflicts:
+	src/core/mount.c
+---
+ src/core/mount.c | 15 ++++++++++++---
+ 1 file changed, 12 insertions(+), 3 deletions(-)
+
+diff --git a/src/core/mount.c b/src/core/mount.c
+index c0445a6..62ec7fe 100644
+--- a/src/core/mount.c
++++ b/src/core/mount.c
+@@ -1414,7 +1414,7 @@ static int mount_add_one(
+                 bool set_flags) {
+         int r;
+         Unit *u;
+-        bool delete;
++        bool delete, changed = false;;
+         char *e, *w = NULL, *o = NULL, *f = NULL;
+         MountParameters *p;
+         bool load_extras = false;
+@@ -1483,6 +1483,7 @@ static int mount_add_one(
+                 }
+ 
+                 unit_add_to_load_queue(u);
++                changed = true;
+         } else {
+                 delete = false;
+                 free(e);
+@@ -1502,6 +1503,7 @@ static int mount_add_one(
+                         /* Load in the extras later on, after we
+                          * finished initialization of the unit */
+                         load_extras = true;
++                        changed = true;
+                 }
+         }
+ 
+@@ -1513,10 +1515,16 @@ static int mount_add_one(
+         }
+ 
+         p = &MOUNT(u)->parameters_proc_self_mountinfo;
++
++        changed = changed ||
++                !streq_ptr(p->options, options) ||
++                !streq_ptr(p->what, what) ||
++                !streq_ptr(p->fstype, fstype);
++
+         if (set_flags) {
+                 MOUNT(u)->is_mounted = true;
+                 MOUNT(u)->just_mounted = !MOUNT(u)->from_proc_self_mountinfo;
+-                MOUNT(u)->just_changed = !streq_ptr(p->options, o);
++                MOUNT(u)->just_changed = changed;
+         }
+ 
+         MOUNT(u)->from_proc_self_mountinfo = true;
+@@ -1538,7 +1546,8 @@ static int mount_add_one(
+                         goto fail;
+         }
+ 
+-        unit_add_to_dbus_queue(u);
++        if (changed)
++                unit_add_to_dbus_queue(u);
+ 
+         return 0;
+ 
diff --git a/SOURCES/0203-udev-rules-setup-tty-permissions-and-group-for-sclp_.patch b/SOURCES/0203-udev-rules-setup-tty-permissions-and-group-for-sclp_.patch
new file mode 100644
index 0000000..b9d9a8c
--- /dev/null
+++ b/SOURCES/0203-udev-rules-setup-tty-permissions-and-group-for-sclp_.patch
@@ -0,0 +1,24 @@
+From 01f17a96d58033e281e52483d1afb73362c98aa8 Mon Sep 17 00:00:00 2001
+From: Lukas Nykryn <lnykryn@redhat.com>
+Date: Thu, 27 Feb 2014 11:19:09 +0100
+Subject: [PATCH] udev/rules: setup tty permissions and group for sclp_line,
+ ttysclp and 3270/tty
+
+---
+ rules/50-udev-default.rules | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/rules/50-udev-default.rules b/rules/50-udev-default.rules
+index 679dfdf..0bccf67 100644
+--- a/rules/50-udev-default.rules
++++ b/rules/50-udev-default.rules
+@@ -15,6 +15,9 @@ ACTION!="add", GOTO="default_permissions_end"
+ SUBSYSTEM=="tty", KERNEL=="ptmx", GROUP="tty", MODE="0666"
+ SUBSYSTEM=="tty", KERNEL=="tty", GROUP="tty", MODE="0666"
+ SUBSYSTEM=="tty", KERNEL=="tty[0-9]*", GROUP="tty", MODE="0620"
++SUBSYSTEM=="tty", KERNEL=="sclp_line[0-9]*", GROUP="tty", MODE="0620"
++SUBSYSTEM=="tty", KERNEL=="ttysclp[0-9]*", GROUP="tty", MODE="0620"
++SUBSYSTEM=="tty", KERNEL=="3270/tty[0-9]*", GROUP="tty", MODE="0620"
+ SUBSYSTEM=="vc", KERNEL=="vcs*|vcsa*", GROUP="tty"
+ KERNEL=="tty[A-Z]*[0-9]|pppox[0-9]*|ircomm[0-9]*|noz[0-9]*|rfcomm[0-9]*", GROUP="dialout"
+ 
diff --git a/SOURCES/0204-cdrom_id-use-the-old-MMC-fallback.patch b/SOURCES/0204-cdrom_id-use-the-old-MMC-fallback.patch
new file mode 100644
index 0000000..bc9671f
--- /dev/null
+++ b/SOURCES/0204-cdrom_id-use-the-old-MMC-fallback.patch
@@ -0,0 +1,54 @@
+From 0f9f786f2f6fa8e7aa0c00b29c36296e8b291d76 Mon Sep 17 00:00:00 2001
+From: Lukas Nykryn <lnykryn@redhat.com>
+Date: Thu, 27 Feb 2014 11:06:37 +0100
+Subject: [PATCH] cdrom_id: use the old MMC fallback
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1038015
+The problem seems to be that the your virtual DVD is emulating a really
+old DVD device, and doing it kind of strangely.
+
+> dracut:# /lib/udev/cdrom_id --debug /dev/sr0
+> probing: '/dev/sr0'
+> INQUIRY: [IMM     ][Virtual CD/DVD   ][0316]
+> GET CONFIGURATION failed with SK=5h/ASC=24h/ACQ=00h
+
+So your virtual drive rejects the GET CONFIGURATION command as illegal.
+
+Other pre-MMC2 drives that don't accept this command usually return the
+error
+SK=5h,ASC=20h (invalid/unsupported command code), in which case cdrom_id
+tries an older method, and then ID_CDROM_MEDIA_TRACK_COUNT_DATA gets set
+and all the /dev/disk/by-label (etc) links get set up.
+
+The virtual drive returns the error SK=5h,ASC=24h (invalid field in
+Command Descriptor Block), which cdrom_id doesn't handle, so it gives up
+and the links never get made.
+
+The ideal solution would be to make the IMM to emulate a device that's
+less than 15 years old, but I'm not going to hold my breath waiting for
+that.
+
+So probably cdrom_id should also use the old MMC fallback when the error
+is SK=5h,ASC=24h, and then all of this would work as expected.
+
+Suggested-by:Luca Miccini <lmiccini@redhat.com>
+
+Conflicts:
+	src/udev/cdrom_id/cdrom_id.c
+---
+ src/udev/cdrom_id/cdrom_id.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/udev/cdrom_id/cdrom_id.c b/src/udev/cdrom_id/cdrom_id.c
+index 1ad0459..ae19542 100644
+--- a/src/udev/cdrom_id/cdrom_id.c
++++ b/src/udev/cdrom_id/cdrom_id.c
+@@ -555,7 +555,7 @@ static int cd_profiles(struct udev *udev, int fd)
+         if ((err != 0)) {
+                 info_scsi_cmd_err(udev, "GET CONFIGURATION", err);
+                 /* handle pre-MMC2 drives which do not support GET CONFIGURATION */
+-                if (SK(err) == 0x5 && ASC(err) == 0x20) {
++                if (SK(err) == 0x5 && (ASC(err) == 0x20 || ASC(err) == 0x24)) {
+                         log_debug("drive is pre-MMC2 and does not support 46h get configuration command\n");
+                         log_debug("trying to work around the problem\n");
+                         ret = cd_profiles_old_mmc(udev, fd);
diff --git a/SOURCES/0205-core-introduce-new-stop-protocol-for-unit-scopes.patch b/SOURCES/0205-core-introduce-new-stop-protocol-for-unit-scopes.patch
new file mode 100644
index 0000000..6f6c239
--- /dev/null
+++ b/SOURCES/0205-core-introduce-new-stop-protocol-for-unit-scopes.patch
@@ -0,0 +1,265 @@
+From 1c961f8bf67a798d51d88195f89d035012a681d4 Mon Sep 17 00:00:00 2001
+From: Michal Sekletar <msekleta@redhat.com>
+Date: Thu, 27 Feb 2014 17:56:16 +0100
+Subject: [PATCH] core: introduce new stop protocol for unit scopes
+
+By specifiy a Controller property when creating the scope a client can
+specify a bus name that will be notified with a RequestStop bus signal
+when the scope has been asked to shut down, instead of sending SIGTERM
+to the scope processes themselves.
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1032695
+
+Based-on: 2d4a39e759c4ab846ad8a546abeddd40bc8d736e
+---
+ src/core/dbus-scope.c    | 55 ++++++++++++++++++++++++++++++++++++++++++++++++
+ src/core/dbus-scope.h    |  2 ++
+ src/core/scope.c         | 20 +++++++++++++++---
+ src/core/scope.h         |  2 ++
+ src/run/run.c            |  8 +++++++
+ src/shared/dbus-common.c | 42 ++++++++++++++++++++++++++++++++++++
+ src/shared/dbus-common.h |  2 ++
+ 7 files changed, 128 insertions(+), 3 deletions(-)
+
+diff --git a/src/core/dbus-scope.c b/src/core/dbus-scope.c
+index 783a969..b576f76 100644
+--- a/src/core/dbus-scope.c
++++ b/src/core/dbus-scope.c
+@@ -31,10 +31,12 @@
+ #define BUS_SCOPE_INTERFACE                                             \
+         " <interface name=\"org.freedesktop.systemd1.Scope\">\n"        \
+         BUS_UNIT_CGROUP_INTERFACE                                       \
++        "  <property name=\"Controller\" type=\"s\" access=\"read\"/>\n"\
+         "  <property name=\"TimeoutStopUSec\" type=\"t\" access=\"read\"/>\n" \
+         BUS_KILL_CONTEXT_INTERFACE                                      \
+         BUS_CGROUP_CONTEXT_INTERFACE                                    \
+         "  <property name=\"Result\" type=\"s\" access=\"read\"/>\n"    \
++        "  <signal name=\"RequestStop\"/>\n"                            \
+         " </interface>\n"
+ 
+ #define INTROSPECTION                                                   \
+@@ -56,6 +58,7 @@ const char bus_scope_interface[] _introspect_("Scope") = BUS_SCOPE_INTERFACE;
+ static DEFINE_BUS_PROPERTY_APPEND_ENUM(bus_scope_append_scope_result, scope_result, ScopeResult);
+ 
+ static const BusProperty bus_scope_properties[] = {
++        { "Controller",             bus_property_append_string,    "s", offsetof(Scope, controller)        },
+         { "TimeoutStopUSec",        bus_property_append_usec,      "t", offsetof(Scope, timeout_stop_usec) },
+         { "Result",                 bus_scope_append_scope_result, "s", offsetof(Scope, result)            },
+         {}
+@@ -127,6 +130,31 @@ static int bus_scope_set_transient_property(
+ 
+                 return 1;
+ 
++        } else if (streq(name, "Controller")) {
++                const char *controller;
++
++                if (dbus_message_iter_get_arg_type(i) != DBUS_TYPE_STRING)
++                        return -EINVAL;
++
++                dbus_message_iter_get_basic(i, &controller);
++
++                if (!isempty(controller) && !bus_service_name_is_valid(controller))
++                        return -EINVAL;
++
++                if (mode != UNIT_CHECK) {
++                        char *c = NULL;
++
++                        if (!isempty(controller)) {
++                                c = strdup(controller);
++                                if (!c)
++                                        return -ENOMEM;
++                        }
++
++                        free(s->controller);
++                        s->controller = c;
++                }
++
++                return 1;
+         } else if (streq(name, "TimeoutStopUSec")) {
+ 
+                 if (dbus_message_iter_get_arg_type(i) != DBUS_TYPE_UINT64)
+@@ -187,3 +215,30 @@ int bus_scope_commit_properties(Unit *u) {
+         unit_realize_cgroup(u);
+         return 0;
+ }
++
++int bus_scope_send_request_stop(Scope *s) {
++        _cleanup_dbus_message_unref_ DBusMessage *m = NULL;
++        _cleanup_free_ char *p = NULL;
++        int r;
++
++        assert(s);
++
++        if (!s->controller)
++                return 0;
++
++        p = unit_dbus_path(UNIT(s));
++        if (!p)
++                return -ENOMEM;
++
++        m = dbus_message_new_signal(p,
++                                    "org.freedesktop.systemd1.Scope",
++                                    "RequestStop");
++        if (!m)
++                return 0;
++
++        r = dbus_message_set_destination(m, s->controller);
++        if (!r)
++                return 0;
++
++        return dbus_connection_send(UNIT(s)->manager->api_bus, m, NULL);
++}
+diff --git a/src/core/dbus-scope.h b/src/core/dbus-scope.h
+index e6836f1..34720f2 100644
+--- a/src/core/dbus-scope.h
++++ b/src/core/dbus-scope.h
+@@ -30,4 +30,6 @@ DBusHandlerResult bus_scope_message_handler(Unit *u, DBusConnection *c, DBusMess
+ int bus_scope_set_property(Unit *u, const char *name, DBusMessageIter *i, UnitSetPropertiesMode mode, DBusError *error);
+ int bus_scope_commit_properties(Unit *u);
+ 
++int bus_scope_send_request_stop(Scope *s);
++
+ extern const char bus_scope_interface[];
+diff --git a/src/core/scope.c b/src/core/scope.c
+index 41da3b9..e75fc2b 100644
+--- a/src/core/scope.c
++++ b/src/core/scope.c
+@@ -64,6 +64,9 @@ static void scope_done(Unit *u) {
+ 
+         cgroup_context_done(&s->cgroup_context);
+ 
++        free(s->controller);
++        s->controller = NULL;
++
+         set_free(s->pids);
+         s->pids = NULL;
+ 
+@@ -198,6 +201,7 @@ static void scope_enter_dead(Scope *s, ScopeResult f) {
+ }
+ 
+ static void scope_enter_signal(Scope *s, ScopeState state, ScopeResult f) {
++        bool skip_signal = false;
+         int r;
+ 
+         assert(s);
+@@ -205,13 +209,23 @@ static void scope_enter_signal(Scope *s, ScopeState state, ScopeResult f) {
+         if (f != SCOPE_SUCCESS)
+                 s->result = f;
+ 
+-        r = unit_kill_context(
++        /* If we have a controller set let's ask the controller nicely
++         * to terminate the scope, instead of us going directly into
++         * SIGTERM beserk mode */
++        if (state == SCOPE_STOP_SIGTERM)
++                skip_signal = bus_scope_send_request_stop(s) > 0;
++
++        if (!skip_signal) {
++                r = unit_kill_context(
+                         UNIT(s),
+                         &s->kill_context,
+                         state != SCOPE_STOP_SIGTERM,
+                         -1, -1, false);
+-        if (r < 0)
+-                goto fail;
++
++                if (r < 0)
++                        goto fail;
++        } else
++                r = 1;
+ 
+         if (r > 0) {
+                 if (s->timeout_stop_usec > 0) {
+diff --git a/src/core/scope.h b/src/core/scope.h
+index 2a3dcb7..b4bafa7 100644
+--- a/src/core/scope.h
++++ b/src/core/scope.h
+@@ -55,6 +55,8 @@ struct Scope {
+ 
+         usec_t timeout_stop_usec;
+ 
++        char *controller;
++
+         Set *pids;
+ 
+         Watch timer_watch;
+diff --git a/src/run/run.c b/src/run/run.c
+index a6abead..93e3f88 100644
+--- a/src/run/run.c
++++ b/src/run/run.c
+@@ -315,6 +315,14 @@ static int start_transient_scope(
+         if (r < 0)
+                 return r;
+ 
++        {
++                const char *unique_id;
++                sd_bus_get_unique_name(bus, &unique_id);
++                r = sd_bus_message_append(m, "(sv)", "Controller", "s", unique_id);
++                if (r < 0)
++                        return r;
++        }
++
+         r = sd_bus_message_append(m, "(sv)", "PIDs", "au", 1, (uint32_t) getpid());
+         if (r < 0)
+                 return r;
+diff --git a/src/shared/dbus-common.c b/src/shared/dbus-common.c
+index 3ba2d87..8a68708 100644
+--- a/src/shared/dbus-common.c
++++ b/src/shared/dbus-common.c
+@@ -1428,3 +1428,45 @@ const char *bus_message_get_sender_with_fallback(DBusMessage *m) {
+ 
+         return ":no-sender";
+ }
++
++bool bus_service_name_is_valid(const char *p) {
++        const char *q;
++        bool dot, found_dot = false, unique;
++
++        if (isempty(p))
++                return false;
++
++        unique = p[0] == ':';
++
++        for (dot = true, q = unique ? p+1 : p; *q; q++)
++                if (*q == '.') {
++                        if (dot)
++                                return false;
++
++                        found_dot = dot = true;
++                } else {
++                        bool good;
++
++                        good =
++                                (*q >= 'a' && *q <= 'z') ||
++                                (*q >= 'A' && *q <= 'Z') ||
++                                ((!dot || unique) && *q >= '0' && *q <= '9') ||
++                                *q == '_' || *q == '-';
++
++                        if (!good)
++                                return false;
++
++                        dot = false;
++                }
++
++        if (q - p > 255)
++                return false;
++
++        if (dot)
++                return false;
++
++        if (!found_dot)
++                return false;
++
++        return true;
++}
+diff --git a/src/shared/dbus-common.h b/src/shared/dbus-common.h
+index 9752f08..8d01d14 100644
+--- a/src/shared/dbus-common.h
++++ b/src/shared/dbus-common.h
+@@ -242,5 +242,7 @@ const char *bus_message_get_sender_with_fallback(DBusMessage *m);
+ 
+ void bus_message_unrefp(DBusMessage **reply);
+ 
++bool bus_service_name_is_valid(const char *p);
++
+ #define _cleanup_dbus_message_unref_ __attribute__((cleanup(bus_message_unrefp)))
+ #define _cleanup_dbus_error_free_ __attribute__((cleanup(dbus_error_free)))
diff --git a/SOURCES/0206-core-watch-SIGCHLD-more-closely-to-track-processes-o.patch b/SOURCES/0206-core-watch-SIGCHLD-more-closely-to-track-processes-o.patch
new file mode 100644
index 0000000..5ebd63a
--- /dev/null
+++ b/SOURCES/0206-core-watch-SIGCHLD-more-closely-to-track-processes-o.patch
@@ -0,0 +1,716 @@
+From 1386240aee3f78a9101a118f11a7028571d33a71 Mon Sep 17 00:00:00 2001
+From: Michal Sekletar <msekleta@redhat.com>
+Date: Thu, 27 Feb 2014 18:16:19 +0100
+Subject: [PATCH] core: watch SIGCHLD more closely to track processes of units
+ with no reliable cgroup empty notifier
+
+When a process dies that we can associate with a specific unit, start
+watching all other processes of that unit, so that we can associate
+those processes with the unit too.
+
+Also, for service units start doing this as soon as we get the first
+SIGCHLD for either control or main process, so that we can follow the
+processes of the service from one to the other, as long as process that
+remain are processes of the ones we watched that died and got reassigned
+to us as parent.
+
+Similar, for scope units start doing this as soon as the scope
+controller abandons the unit, and thus management entirely reverts to
+systemd. To abandon a unit introduce a new Abandon() scope unit method
+call.
+
+Based-on: a911bb9ab27ac0eb3bbf4e8b4109e5da9b88eee3
+---
+ src/core/dbus-scope.c |  36 +++++++++----
+ src/core/manager.c    |   2 +-
+ src/core/scope.c      |  87 ++++++++++++++++++++++---------
+ src/core/scope.h      |   5 +-
+ src/core/service.c    | 140 ++++++++++++++++++++++++++++++--------------------
+ src/core/unit.c       | 112 +++++++++++++++++++++++++++++++++++++++-
+ src/core/unit.h       |   9 ++++
+ 7 files changed, 298 insertions(+), 93 deletions(-)
+
+diff --git a/src/core/dbus-scope.c b/src/core/dbus-scope.c
+index b576f76..58dd9ff 100644
+--- a/src/core/dbus-scope.c
++++ b/src/core/dbus-scope.c
+@@ -30,6 +30,7 @@
+ 
+ #define BUS_SCOPE_INTERFACE                                             \
+         " <interface name=\"org.freedesktop.systemd1.Scope\">\n"        \
++        "  <method name=\"Abandon\"/>\n"                                \
+         BUS_UNIT_CGROUP_INTERFACE                                       \
+         "  <property name=\"Controller\" type=\"s\" access=\"read\"/>\n"\
+         "  <property name=\"TimeoutStopUSec\" type=\"t\" access=\"read\"/>\n" \
+@@ -66,19 +67,40 @@ static const BusProperty bus_scope_properties[] = {
+ 
+ DBusHandlerResult bus_scope_message_handler(Unit *u, DBusConnection *c, DBusMessage *message) {
+         Scope *s = SCOPE(u);
++        _cleanup_dbus_message_unref_ DBusMessage *reply = NULL;
+ 
+-        const BusBoundProperties bps[] = {
++        SELINUX_UNIT_ACCESS_CHECK(u, c, message, "status");
++
++        if (dbus_message_is_method_call(message, "org.freedesktop.systemd1.Scope", "Abandon")) {
++                int r;
++
++                r = scope_abandon(s);
++                if (r < 0)
++                        log_error("Failed to mark scope %s as abandoned : %s", UNIT(s)->id, strerror(-r));
++
++                reply = dbus_message_new_method_return(message);
++                if (!reply)
++                        goto oom;
++        } else {
++                const BusBoundProperties bps[] = {
+                 { "org.freedesktop.systemd1.Unit",  bus_unit_properties,           u },
+                 { "org.freedesktop.systemd1.Scope", bus_unit_cgroup_properties,    u },
+                 { "org.freedesktop.systemd1.Scope", bus_scope_properties,          s },
+                 { "org.freedesktop.systemd1.Scope", bus_cgroup_context_properties, &s->cgroup_context },
+                 { "org.freedesktop.systemd1.Scope", bus_kill_context_properties,   &s->kill_context   },
+                 {}
+-        };
++                };
+ 
+-        SELINUX_UNIT_ACCESS_CHECK(u, c, message, "status");
++               return  bus_default_message_handler(c, message, INTROSPECTION, INTERFACES_LIST, bps);
++        }
++
++        if (reply)
++                if (!bus_maybe_send_reply(c, message, reply))
++                        goto oom;
+ 
+-        return bus_default_message_handler(c, message, INTROSPECTION, INTERFACES_LIST, bps);
++        return DBUS_HANDLER_RESULT_HANDLED;
++oom:
++        return DBUS_HANDLER_RESULT_NEED_MEMORY;
+ }
+ 
+ static int bus_scope_set_transient_property(
+@@ -102,10 +124,6 @@ static int bus_scope_set_transient_property(
+                     dbus_message_iter_get_element_type(i) != DBUS_TYPE_UINT32)
+                         return -EINVAL;
+ 
+-                r = set_ensure_allocated(&s->pids, trivial_hash_func, trivial_compare_func);
+-                if (r < 0)
+-                        return r;
+-
+                 dbus_message_iter_recurse(i, &sub);
+                 while (dbus_message_iter_get_arg_type(&sub) == DBUS_TYPE_UINT32) {
+                         uint32_t pid;
+@@ -116,7 +134,7 @@ static int bus_scope_set_transient_property(
+                                 return -EINVAL;
+ 
+                         if (mode != UNIT_CHECK) {
+-                                r = set_put(s->pids, LONG_TO_PTR(pid));
++                                r = unit_watch_pid(UNIT(s), pid);
+                                 if (r < 0 && r != -EEXIST)
+                                         return r;
+                         }
+diff --git a/src/core/manager.c b/src/core/manager.c
+index a34a3c6..db5094f 100644
+--- a/src/core/manager.c
++++ b/src/core/manager.c
+@@ -1389,7 +1389,7 @@ static int manager_dispatch_sigchld(Manager *m) {
+                 log_debug_unit(u->id,
+                                "Child %lu belongs to %s", (long unsigned) si.si_pid, u->id);
+ 
+-                hashmap_remove(m->watch_pids, LONG_TO_PTR(si.si_pid));
++                unit_unwatch_pid(u, si.si_pid);
+                 UNIT_VTABLE(u)->sigchld_event(u, si.si_pid, si.si_code, si.si_status);
+         }
+ 
+diff --git a/src/core/scope.c b/src/core/scope.c
+index e75fc2b..22bdfb2 100644
+--- a/src/core/scope.c
++++ b/src/core/scope.c
+@@ -35,6 +35,7 @@
+ static const UnitActiveState state_translation_table[_SCOPE_STATE_MAX] = {
+         [SCOPE_DEAD] = UNIT_INACTIVE,
+         [SCOPE_RUNNING] = UNIT_ACTIVE,
++        [SCOPE_ABANDONED] = UNIT_ACTIVE,
+         [SCOPE_STOP_SIGTERM] = UNIT_DEACTIVATING,
+         [SCOPE_STOP_SIGKILL] = UNIT_DEACTIVATING,
+         [SCOPE_FAILED] = UNIT_FAILED
+@@ -67,9 +68,6 @@ static void scope_done(Unit *u) {
+         free(s->controller);
+         s->controller = NULL;
+ 
+-        set_free(s->pids);
+-        s->pids = NULL;
+-
+         unit_unwatch_timer(u, &s->timer_watch);
+ }
+ 
+@@ -84,6 +82,9 @@ static void scope_set_state(Scope *s, ScopeState state) {
+             state != SCOPE_STOP_SIGKILL)
+                 unit_unwatch_timer(UNIT(s), &s->timer_watch);
+ 
++        if (state == SCOPE_DEAD || state == SCOPE_FAILED)
++                unit_unwatch_all_pids(UNIT(s));
++
+         if (state != old_state)
+                 log_debug("%s changed %s -> %s",
+                           UNIT(s)->id,
+@@ -115,7 +116,7 @@ static int scope_verify(Scope *s) {
+         if (UNIT(s)->load_state != UNIT_LOADED)
+                 return 0;
+ 
+-        if (set_size(s->pids) <= 0 && UNIT(s)->manager->n_reloading <= 0) {
++        if (set_size(UNIT(s)->pids) <= 0 && UNIT(s)->manager->n_reloading <= 0) {
+                 log_error_unit(UNIT(s)->id, "Scope %s has no PIDs. Refusing.", UNIT(s)->id);
+                 return -EINVAL;
+         }
+@@ -169,6 +170,9 @@ static int scope_coldplug(Unit *u) {
+                                 return r;
+                 }
+ 
++                if (s->deserialized_state != SCOPE_DEAD && s->deserialized_state != SCOPE_FAILED)
++                        unit_watch_all_pids(UNIT(s));
++
+                 scope_set_state(s, s->deserialized_state);
+         }
+ 
+@@ -209,6 +213,8 @@ static void scope_enter_signal(Scope *s, ScopeState state, ScopeResult f) {
+         if (f != SCOPE_SUCCESS)
+                 s->result = f;
+ 
++        unit_watch_all_pids(UNIT(s));
++
+         /* If we have a controller set let's ask the controller nicely
+          * to terminate the scope, instead of us going directly into
+          * SIGTERM beserk mode */
+@@ -271,13 +277,10 @@ static int scope_start(Unit *u) {
+                 return r;
+         }
+ 
+-        r = cg_attach_many_everywhere(u->manager->cgroup_supported, u->cgroup_path, s->pids);
++        r = cg_attach_many_everywhere(u->manager->cgroup_supported, u->cgroup_path, UNIT(s)->pids);
+         if (r < 0)
+                 return r;
+ 
+-        set_free(s->pids);
+-        s->pids = NULL;
+-
+         s->result = SCOPE_SUCCESS;
+ 
+         scope_set_state(s, SCOPE_RUNNING);
+@@ -288,13 +291,13 @@ static int scope_stop(Unit *u) {
+         Scope *s = SCOPE(u);
+ 
+         assert(s);
+-        assert(s->state == SCOPE_RUNNING);
+ 
+         if (s->state == SCOPE_STOP_SIGTERM ||
+             s->state == SCOPE_STOP_SIGKILL)
+                 return 0;
+ 
+-        assert(s->state == SCOPE_RUNNING);
++        assert(s->state == SCOPE_RUNNING ||
++               s->state == SCOPE_ABANDONED);
+ 
+         scope_enter_signal(s, SCOPE_STOP_SIGTERM, SCOPE_SUCCESS);
+         return 0;
+@@ -358,7 +361,7 @@ static bool scope_check_gc(Unit *u) {
+         /* Never clean up scopes that still have a process around,
+          * even if the scope is formally dead. */
+ 
+-        if (UNIT(s)->cgroup_path) {
++        if (u->cgroup_path) {
+                 r = cg_is_empty_recursive(SYSTEMD_CGROUP_CONTROLLER, UNIT(s)->cgroup_path, true);
+                 if (r <= 0)
+                         return true;
+@@ -367,6 +370,33 @@ static bool scope_check_gc(Unit *u) {
+         return false;
+ }
+ 
++static void scope_notify_cgroup_empty_event(Unit *u) {
++        Scope *s = SCOPE(u);
++
++        assert(u);
++
++        log_debug_unit(u->id, "%s: cgroup is empty", u->id);
++
++        if (s->state == SCOPE_RUNNING || s->state == SCOPE_ABANDONED ||
++            s->state == SCOPE_STOP_SIGTERM || SCOPE_STOP_SIGKILL)
++                scope_enter_dead(s, SCOPE_SUCCESS);
++}
++
++static void scope_sigchld_event(Unit *u, pid_t pid, int code, int status) {
++        /* If we get a SIGCHLD event for one of the processes we were
++           interested in, then we look for others to watch, under the
++           assumption that we'll sooner or later get a SIGCHLD for
++           them, as the original process we watched was probably the
++           parent of them, and they are hence now our children. */
++
++        unit_tidy_watch_pids(u, 0, 0);
++        unit_watch_all_pids(u);
++
++        /* If the PID set is empty now, then let's finish this off */
++        if (set_isempty(u->pids))
++                scope_notify_cgroup_empty_event(u);
++}
++
+ static void scope_timer_event(Unit *u, uint64_t elapsed, Watch*w) {
+         Scope *s = SCOPE(u);
+ 
+@@ -397,24 +427,30 @@ static void scope_timer_event(Unit *u, uint64_t elapsed, Watch*w) {
+         }
+ }
+ 
+-static void scope_notify_cgroup_empty_event(Unit *u) {
+-        Scope *s = SCOPE(u);
+-        assert(u);
++int scope_abandon(Scope *s) {
++        assert(s);
+ 
+-        log_debug_unit(u->id, "%s: cgroup is empty", u->id);
++        if (s->state != SCOPE_RUNNING && s->state != SCOPE_ABANDONED)
++                return -ESTALE;
+ 
+-        switch (s->state) {
++        free(s->controller);
++        s->controller = NULL;
+ 
+-        case SCOPE_RUNNING:
+-        case SCOPE_STOP_SIGTERM:
+-        case SCOPE_STOP_SIGKILL:
+-                scope_enter_dead(s, SCOPE_SUCCESS);
++        /* The client is no longer watching the remaining processes,
++         * so let's step in here, under the assumption that the
++         * remaining processes will be sooner or later reassigned to
++         * us as parent. */
+ 
+-                break;
++        unit_tidy_watch_pids(UNIT(s), 0, 0);
++        unit_watch_all_pids(UNIT(s));
+ 
+-        default:
+-                ;
+-        }
++        /* If the PID set is empty now, then let's finish this off */
++        if (set_isempty(UNIT(s)->pids))
++                scope_notify_cgroup_empty_event(UNIT(s));
++        else
++                scope_set_state(s, SCOPE_ABANDONED);
++
++        return 0;
+ }
+ 
+ _pure_ static UnitActiveState scope_active_state(Unit *u) {
+@@ -432,6 +468,7 @@ _pure_ static const char *scope_sub_state_to_string(Unit *u) {
+ static const char* const scope_state_table[_SCOPE_STATE_MAX] = {
+         [SCOPE_DEAD] = "dead",
+         [SCOPE_RUNNING] = "running",
++        [SCOPE_ABANDONED] = "abandoned",
+         [SCOPE_STOP_SIGTERM] = "stop-sigterm",
+         [SCOPE_STOP_SIGKILL] = "stop-sigkill",
+         [SCOPE_FAILED] = "failed",
+@@ -481,6 +518,8 @@ const UnitVTable scope_vtable = {
+ 
+         .check_gc = scope_check_gc,
+ 
++        .sigchld_event = scope_sigchld_event,
++
+         .timer_event = scope_timer_event,
+ 
+         .reset_failed = scope_reset_failed,
+diff --git a/src/core/scope.h b/src/core/scope.h
+index b4bafa7..1e9f201 100644
+--- a/src/core/scope.h
++++ b/src/core/scope.h
+@@ -29,6 +29,7 @@ typedef struct Scope Scope;
+ typedef enum ScopeState {
+         SCOPE_DEAD,
+         SCOPE_RUNNING,
++        SCOPE_ABANDONED,
+         SCOPE_STOP_SIGTERM,
+         SCOPE_STOP_SIGKILL,
+         SCOPE_FAILED,
+@@ -57,13 +58,13 @@ struct Scope {
+ 
+         char *controller;
+ 
+-        Set *pids;
+-
+         Watch timer_watch;
+ };
+ 
+ extern const UnitVTable scope_vtable;
+ 
++int scope_abandon(Scope *s);
++
+ const char* scope_state_to_string(ScopeState i) _const_;
+ ScopeState scope_state_from_string(const char *s) _pure_;
+ 
+diff --git a/src/core/service.c b/src/core/service.c
+index f0acda1..41e5cb5 100644
+--- a/src/core/service.c
++++ b/src/core/service.c
+@@ -1546,6 +1546,11 @@ static void service_set_state(Service *s, ServiceState state) {
+                 s->control_command_id = _SERVICE_EXEC_COMMAND_INVALID;
+         }
+ 
++        if (state == SERVICE_DEAD ||
++            state == SERVICE_FAILED ||
++            state == SERVICE_AUTO_RESTART)
++                unit_unwatch_all_pids(UNIT(s));
++
+         if (state != SERVICE_START_PRE &&
+             state != SERVICE_START &&
+             state != SERVICE_START_POST &&
+@@ -1661,8 +1666,14 @@ static int service_coldplug(Unit *u) {
+                                         return r;
+                         }
+ 
++                if (s->deserialized_state != SERVICE_DEAD &&
++                    s->deserialized_state != SERVICE_FAILED &&
++                    s->deserialized_state != SERVICE_AUTO_RESTART)
++                        unit_watch_all_pids(UNIT(s));
++
+                 if (s->deserialized_state == SERVICE_START_POST ||
+-                    s->deserialized_state == SERVICE_RUNNING)
++                    s->deserialized_state == SERVICE_RUNNING ||
++                    s->deserialized_state == SERVICE_RELOAD)
+                         service_handle_watchdog(s);
+ 
+                 service_set_state(s, s->deserialized_state);
+@@ -1970,6 +1981,7 @@ static void service_enter_stop_post(Service *s, ServiceResult f) {
+                 s->result = f;
+ 
+         service_unwatch_control_pid(s);
++        unit_watch_all_pids(UNIT(s));
+ 
+         s->control_command = s->exec_command[SERVICE_EXEC_STOP_POST];
+         if (s->control_command) {
+@@ -2010,6 +2022,8 @@ static void service_enter_signal(Service *s, ServiceState state, ServiceResult f
+         if (f != SERVICE_SUCCESS)
+                 s->result = f;
+ 
++        unit_watch_all_pids(UNIT(s));
++
+         r = unit_kill_context(
+                         UNIT(s),
+                         &s->kill_context,
+@@ -2055,6 +2069,7 @@ static void service_enter_stop(Service *s, ServiceResult f) {
+                 s->result = f;
+ 
+         service_unwatch_control_pid(s);
++        unit_watch_all_pids(UNIT(s));
+ 
+         s->control_command = s->exec_command[SERVICE_EXEC_STOP];
+         if (s->control_command) {
+@@ -2961,6 +2976,62 @@ fail:
+         service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_RESOURCES);
+ }
+ 
++static void service_notify_cgroup_empty_event(Unit *u) {
++        Service *s = SERVICE(u);
++
++        assert(u);
++
++        log_debug_unit(u->id, "%s: cgroup is empty", u->id);
++
++        switch (s->state) {
++
++                /* Waiting for SIGCHLD is usually more interesting,
++                 * because it includes return codes/signals. Which is
++                 * why we ignore the cgroup events for most cases,
++                 * except when we don't know pid which to expect the
++                 * SIGCHLD for. */
++
++        case SERVICE_START:
++        case SERVICE_START_POST:
++                /* If we were hoping for the daemon to write its PID file,
++                 * we can give up now. */
++                if (s->pid_file_pathspec) {
++                        log_warning_unit(u->id,
++                                         "%s never wrote its PID file. Failing.", UNIT(s)->id);
++                        service_unwatch_pid_file(s);
++                        if (s->state == SERVICE_START)
++                                service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
++                        else
++                                service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
++                }
++                break;
++
++        case SERVICE_RUNNING:
++                /* service_enter_running() will figure out what to do */
++                service_enter_running(s, SERVICE_SUCCESS);
++                break;
++
++        case SERVICE_STOP_SIGTERM:
++        case SERVICE_STOP_SIGKILL:
++
++                if (main_pid_good(s) <= 0 && !control_pid_good(s))
++                        service_enter_stop_post(s, SERVICE_SUCCESS);
++
++                break;
++
++        case SERVICE_STOP_POST:
++        case SERVICE_FINAL_SIGTERM:
++        case SERVICE_FINAL_SIGKILL:
++                if (main_pid_good(s) <= 0 && !control_pid_good(s))
++                        service_enter_dead(s, SERVICE_SUCCESS, true);
++
++                break;
++
++        default:
++                ;
++        }
++}
++
+ static void service_sigchld_event(Unit *u, pid_t pid, int code, int status) {
+         Service *s = SERVICE(u);
+         ServiceResult f;
+@@ -3229,6 +3300,18 @@ static void service_sigchld_event(Unit *u, pid_t pid, int code, int status) {
+ 
+         /* Notify clients about changed exit status */
+         unit_add_to_dbus_queue(u);
++
++        /* We got one SIGCHLD for the service, let's watch all
++         * processes that are now running of the service, and watch
++         * that. Among the PIDs we then watch will be children
++         * reassigned to us, which hopefully allows us to identify
++         * when all children are gone */
++        unit_tidy_watch_pids(u, s->main_pid, s->control_pid);
++        unit_watch_all_pids(u);
++
++        /* If the PID set is empty now, then let's finish this off */
++        if (set_isempty(u->pids))
++                service_notify_cgroup_empty_event(u);
+ }
+ 
+ static void service_timer_event(Unit *u, uint64_t elapsed, Watch* w) {
+@@ -3332,61 +3415,6 @@ static void service_timer_event(Unit *u, uint64_t elapsed, Watch* w) {
+         }
+ }
+ 
+-static void service_notify_cgroup_empty_event(Unit *u) {
+-        Service *s = SERVICE(u);
+-
+-        assert(u);
+-
+-        log_debug_unit(u->id, "%s: cgroup is empty", u->id);
+-
+-        switch (s->state) {
+-
+-                /* Waiting for SIGCHLD is usually more interesting,
+-                 * because it includes return codes/signals. Which is
+-                 * why we ignore the cgroup events for most cases,
+-                 * except when we don't know pid which to expect the
+-                 * SIGCHLD for. */
+-
+-        case SERVICE_START:
+-        case SERVICE_START_POST:
+-                /* If we were hoping for the daemon to write its PID file,
+-                 * we can give up now. */
+-                if (s->pid_file_pathspec) {
+-                        log_warning_unit(u->id,
+-                                         "%s never wrote its PID file. Failing.", UNIT(s)->id);
+-                        service_unwatch_pid_file(s);
+-                        if (s->state == SERVICE_START)
+-                                service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
+-                        else
+-                                service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
+-                }
+-                break;
+-
+-        case SERVICE_RUNNING:
+-                /* service_enter_running() will figure out what to do */
+-                service_enter_running(s, SERVICE_SUCCESS);
+-                break;
+-
+-        case SERVICE_STOP_SIGTERM:
+-        case SERVICE_STOP_SIGKILL:
+-
+-                if (main_pid_good(s) <= 0 && !control_pid_good(s))
+-                        service_enter_stop_post(s, SERVICE_SUCCESS);
+-
+-                break;
+-
+-        case SERVICE_FINAL_SIGTERM:
+-        case SERVICE_FINAL_SIGKILL:
+-                if (main_pid_good(s) <= 0 && !control_pid_good(s))
+-                        service_enter_dead(s, SERVICE_SUCCESS, true);
+-
+-                break;
+-
+-        default:
+-                ;
+-        }
+-}
+-
+ static void service_notify_message(Unit *u, pid_t pid, char **tags) {
+         Service *s = SERVICE(u);
+         const char *e;
+diff --git a/src/core/unit.c b/src/core/unit.c
+index 6c2c4a0..0332094 100644
+--- a/src/core/unit.c
++++ b/src/core/unit.c
+@@ -472,6 +472,8 @@ void unit_free(Unit *u) {
+ 
+         set_free_free(u->names);
+ 
++        unit_unwatch_all_pids(u);
++
+         condition_free_list(u->conditions);
+ 
+         unit_ref_unset(&u->slice);
+@@ -1658,13 +1660,25 @@ void unit_unwatch_fd(Unit *u, Watch *w) {
+ }
+ 
+ int unit_watch_pid(Unit *u, pid_t pid) {
++        int q, r;
++
+         assert(u);
+         assert(pid >= 1);
+ 
++        r = set_ensure_allocated(&u->pids, trivial_hash_func, trivial_compare_func);
++        if (r < 0)
++                return r;
++
+         /* Watch a specific PID. We only support one unit watching
+          * each PID for now. */
+ 
+-        return hashmap_put(u->manager->watch_pids, LONG_TO_PTR(pid), u);
++        r = set_put(u->pids, LONG_TO_PTR(pid));
++
++        q = hashmap_put(u->manager->watch_pids, LONG_TO_PTR(pid), u);
++        if (q < 0)
++                return q;
++
++        return r;
+ }
+ 
+ void unit_unwatch_pid(Unit *u, pid_t pid) {
+@@ -1672,6 +1686,102 @@ void unit_unwatch_pid(Unit *u, pid_t pid) {
+         assert(pid >= 1);
+ 
+         hashmap_remove_value(u->manager->watch_pids, LONG_TO_PTR(pid), u);
++        set_remove(u->pids, LONG_TO_PTR(pid));
++}
++
++static int watch_pids_in_path(Unit *u, const char *path) {
++        _cleanup_closedir_ DIR *d = NULL;
++        _cleanup_fclose_ FILE *f = NULL;
++        int ret = 0, r;
++
++        assert(u);
++        assert(path);
++
++        /* Adds all PIDs from a specific cgroup path to the set of PIDs we watch. */
++
++        r = cg_enumerate_processes(SYSTEMD_CGROUP_CONTROLLER, path, &f);
++        if (r >= 0) {
++                pid_t pid;
++
++                while ((r = cg_read_pid(f, &pid)) > 0) {
++                        r = unit_watch_pid(u, pid);
++                        if (r < 0 && ret >= 0)
++                                ret = r;
++                }
++                if (r < 0 && ret >= 0)
++                        ret = r;
++
++        } else if (ret >= 0)
++                ret = r;
++
++        r = cg_enumerate_subgroups(SYSTEMD_CGROUP_CONTROLLER, path, &d);
++        if (r >= 0) {
++                char *fn;
++
++                while ((r = cg_read_subgroup(d, &fn)) > 0) {
++                        _cleanup_free_ char *p = NULL;
++
++                        p = strjoin(path, "/", fn, NULL);
++                        free(fn);
++
++                        if (!p)
++                                return -ENOMEM;
++
++                        r = watch_pids_in_path(u, p);
++                        if (r < 0 && ret >= 0)
++                                ret = r;
++                }
++                if (r < 0 && ret >= 0)
++                        ret = r;
++
++        } else if (ret >= 0)
++                ret = r;
++
++        return ret;
++}
++
++
++int unit_watch_all_pids(Unit *u) {
++        assert(u);
++
++        if (!u->cgroup_path)
++                return -ENOENT;
++
++        /* Adds all PIDs from our cgroup to the set of PIDs we watch */
++
++        return watch_pids_in_path(u, u->cgroup_path);
++}
++
++void unit_unwatch_all_pids(Unit *u) {
++        Iterator i;
++        void *e;
++
++        assert(u);
++
++        SET_FOREACH(e, u->pids, i)
++                hashmap_remove_value(u->manager->watch_pids, e, u);
++
++        set_free(u->pids);
++        u->pids = NULL;
++}
++
++void unit_tidy_watch_pids(Unit *u, pid_t except1, pid_t except2) {
++        Iterator i;
++        void *e;
++
++        assert(u);
++
++        /* Cleans dead PIDs from our list */
++
++        SET_FOREACH(e, u->pids, i) {
++                pid_t pid = PTR_TO_LONG(e);
++
++                if (pid == except1 || pid == except2)
++                        continue;
++
++                if (kill(pid, 0) < 0 && errno == ESRCH)
++                        set_remove(u->pids, e);
++        }
+ }
+ 
+ int unit_watch_timer(Unit *u, clockid_t clock_id, bool relative, usec_t usec, Watch *w) {
+diff --git a/src/core/unit.h b/src/core/unit.h
+index 6dd750f..6dff25e 100644
+--- a/src/core/unit.h
++++ b/src/core/unit.h
+@@ -198,6 +198,11 @@ struct Unit {
+         /* CGroup realize members queue */
+         LIST_FIELDS(Unit, cgroup_queue);
+ 
++        /* PIDs we keep an eye on. Note that a unit might have many
++         * more, but these are the ones we care enough about to
++         * process SIGCHLD for */
++        Set *pids;
++
+         /* Used during GC sweeps */
+         unsigned gc_marker;
+ 
+@@ -531,6 +536,10 @@ void unit_unwatch_fd(Unit *u, Watch *w);
+ 
+ int unit_watch_pid(Unit *u, pid_t pid);
+ void unit_unwatch_pid(Unit *u, pid_t pid);
++int unit_watch_all_pids(Unit *u);
++void unit_unwatch_all_pids(Unit *u);
++
++void unit_tidy_watch_pids(Unit *u, pid_t except1, pid_t except2);
+ 
+ int unit_watch_timer(Unit *u, clockid_t, bool relative, usec_t usec, Watch *w);
+ void unit_unwatch_timer(Unit *u, Watch *w);
diff --git a/SOURCES/0207-logind-rework-session-shutdown-logic.patch b/SOURCES/0207-logind-rework-session-shutdown-logic.patch
new file mode 100644
index 0000000..b9387e2
--- /dev/null
+++ b/SOURCES/0207-logind-rework-session-shutdown-logic.patch
@@ -0,0 +1,597 @@
+From 553a962a570cade5c44953593209d25e28ec5145 Mon Sep 17 00:00:00 2001
+From: Michal Sekletar <msekleta@redhat.com>
+Date: Mon, 3 Mar 2014 15:37:49 +0100
+Subject: [PATCH] logind: rework session shutdown logic
+
+Simplify the shutdown logic a bit:
+
+- Keep the session FIFO around in the PAM module, even after the session
+  shutdown hook has been finished. This allows logind to track precisely
+  when the PAM handler goes away.
+
+- In the ReleaseSession() call start a timer, that will stop terminate
+  the session when elapsed.
+
+- Never fiddle with the KillMode of scopes to configure whether user
+  processes should be killed or not. Instead, simply leave the scope
+  units around when we terminate a session whose processes should not be
+  killed.
+
+- When killing is enabled, stop the session scope on FIFO EOF or after
+  the ReleaseSession() timeout. When killing is disabled, simply tell
+  PID 1 to abandon the scope.
+
+Because the scopes stay around and hence all processes are always member
+of a scope, the system shutdown logic should be more robust, as the
+scopes can be shutdown as part of the usual shutdown logic.
+
+Based-on: 5f41d1f10fd97e93517b6a762b1bec247f4d1171
+---
+ src/login/logind-dbus.c    |  51 +++++++++++-------
+ src/login/logind-session.c | 130 +++++++++++++++++++++++++++++++++++----------
+ src/login/logind-session.h |   4 ++
+ src/login/logind-user.c    |  23 +++++---
+ src/login/logind-user.h    |   1 +
+ src/login/logind.c         |  23 ++++++--
+ src/login/logind.h         |   4 +-
+ src/login/pam-module.c     |  11 ++--
+ 8 files changed, 182 insertions(+), 65 deletions(-)
+
+diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c
+index 69e94aa..8de301e 100644
+--- a/src/login/logind-dbus.c
++++ b/src/login/logind-dbus.c
+@@ -1747,13 +1747,7 @@ static DBusHandlerResult manager_message_handler(
+                 if (!session)
+                         return bus_send_error_reply(connection, message, &error, -ENOENT);
+ 
+-                /* We use the FIFO to detect stray sessions where the
+-                process invoking PAM dies abnormally. We need to make
+-                sure that that process is not killed if at the clean
+-                end of the session it closes the FIFO. Hence, with
+-                this call explicitly turn off the FIFO logic, so that
+-                the PAM code can finish clean up on its own */
+-                session_remove_fifo(session);
++                session_release(session);
+ 
+                 reply = dbus_message_new_method_return(message);
+                 if (!reply)
+@@ -2551,7 +2545,6 @@ int manager_start_scope(
+                 const char *slice,
+                 const char *description,
+                 const char *after,
+-                const char *kill_mode,
+                 DBusError *error,
+                 char **job) {
+ 
+@@ -2623,18 +2616,6 @@ int manager_start_scope(
+                         return log_oom();
+         }
+ 
+-        if (!isempty(kill_mode)) {
+-                const char *kill_mode_property = "KillMode";
+-
+-                if (!dbus_message_iter_open_container(&sub, DBUS_TYPE_STRUCT, NULL, &sub2) ||
+-                    !dbus_message_iter_append_basic(&sub2, DBUS_TYPE_STRING, &kill_mode_property) ||
+-                    !dbus_message_iter_open_container(&sub2, DBUS_TYPE_VARIANT, "s", &sub3) ||
+-                    !dbus_message_iter_append_basic(&sub3, DBUS_TYPE_STRING, &kill_mode) ||
+-                    !dbus_message_iter_close_container(&sub2, &sub3) ||
+-                    !dbus_message_iter_close_container(&sub, &sub2))
+-                        return log_oom();
+-        }
+-
+         /* cgroup empty notification is not available in containers
+          * currently. To make this less problematic, let's shorten the
+          * stop timeout for sessions, so that we don't wait
+@@ -2793,6 +2774,36 @@ int manager_stop_unit(Manager *manager, const char *unit, DBusError *error, char
+         return 1;
+ }
+ 
++int manager_abandon_scope(Manager *manager, const char *scope, DBusError *error) {
++        _cleanup_dbus_message_unref_ DBusMessage *reply = NULL;
++        _cleanup_free_ char *path = NULL;
++        int r;
++
++        assert(manager);
++        assert(scope);
++
++        path = unit_dbus_path_from_name(scope);
++        if (!path)
++                return -ENOMEM;
++
++        r = bus_method_call_with_reply(
++                manager->bus,
++                "org.freedesktop.systemd1",
++                path,
++                "org.freedesktop.systemd1.Scope",
++                "Abandon",
++                &reply,
++                error,
++                DBUS_TYPE_INVALID);
++
++        if (r < 0) {
++                log_error("Failed to abandon scope %s", scope);
++                return r;
++        }
++
++        return 1;
++}
++
+ int manager_kill_unit(Manager *manager, const char *unit, KillWho who, int signo, DBusError *error) {
+         _cleanup_dbus_message_unref_ DBusMessage *reply = NULL;
+         const char *w;
+diff --git a/src/login/logind-session.c b/src/login/logind-session.c
+index 27aa335..78e6d74 100644
+--- a/src/login/logind-session.c
++++ b/src/login/logind-session.c
+@@ -24,6 +24,7 @@
+ #include <unistd.h>
+ #include <sys/epoll.h>
+ #include <fcntl.h>
++#include <sys/timerfd.h>
+ 
+ #include <systemd/sd-id128.h>
+ #include <systemd/sd-messages.h>
+@@ -36,6 +37,8 @@
+ #include "dbus-common.h"
+ #include "logind-session.h"
+ 
++#define RELEASE_SEC 20
++
+ static unsigned devt_hash_func(const void *p) {
+         uint64_t u = *(const dev_t*)p;
+ 
+@@ -505,7 +508,6 @@ static int session_start_scope(Session *s) {
+ 
+         if (!s->scope) {
+                 _cleanup_free_ char *description = NULL;
+-                const char *kill_mode;
+                 char *scope, *job;
+ 
+                 description = strjoin("Session ", s->id, " of user ", s->user->name, NULL);
+@@ -516,9 +518,7 @@ static int session_start_scope(Session *s) {
+                 if (!scope)
+                         return log_oom();
+ 
+-                kill_mode = manager_shall_kill(s->manager, s->user->name) ? "control-group" : "none";
+-
+-                r = manager_start_scope(s->manager, scope, s->leader, s->user->slice, description, "systemd-user-sessions.service", kill_mode, &error, &job);
++                r = manager_start_scope(s->manager, scope, s->leader, s->user->slice, description, "systemd-logind.service", &error, &job);
+                 if (r < 0) {
+                         log_error("Failed to start session scope %s: %s %s",
+                                   scope, bus_error(&error, r), error.name);
+@@ -579,23 +579,22 @@ int session_start(Session *s) {
+ 
+         s->started = true;
+ 
+-        /* Save session data */
++        /* Save data */
+         session_save(s);
+         user_save(s->user);
++        if (s->seat)
++                seat_save(s->seat);
+ 
++        /* Send signals */
+         session_send_signal(s, true);
+ 
+         if (s->seat) {
+-                seat_save(s->seat);
+-
+                 if (s->seat->active == s)
+                         seat_send_changed(s->seat, "Sessions\0ActiveSession\0");
+                 else
+                         seat_send_changed(s->seat, "Sessions\0");
+         }
+ 
+-        user_send_changed(s->user, "Sessions\0");
+-
+         return 0;
+ }
+ 
+@@ -611,15 +610,24 @@ static int session_stop_scope(Session *s) {
+         if (!s->scope)
+                 return 0;
+ 
+-        r = manager_stop_unit(s->manager, s->scope, &error, &job);
+-        if (r < 0) {
+-                log_error("Failed to stop session scope: %s", bus_error(&error, r));
+-                dbus_error_free(&error);
+-                return r;
+-        }
++        if (manager_shall_kill(s->manager, s->user->name)) {
++                r = manager_stop_unit(s->manager, s->scope, &error, &job);
++                if (r < 0) {
++                        log_error("Failed to stop session scope: %s", bus_error(&error, r));
++                        dbus_error_free(&error);
++                        return r;
++                }
+ 
+-        free(s->scope_job);
+-        s->scope_job = job;
++                free(s->scope_job);
++                s->scope_job = job;
++        } else {
++                r = manager_abandon_scope(s->manager, s->scope, &error);
++                if (r < 0) {
++                        log_error("Failed to abandon session scope: %s", bus_error(&error, r));
++                        dbus_error_free(&error);
++                        return r;
++                }
++        }
+ 
+         return 0;
+ }
+@@ -644,6 +652,19 @@ static int session_unlink_x11_socket(Session *s) {
+         return r < 0 ? -errno : 0;
+ }
+ 
++static void session_close_timer_fd(Session *s) {
++        assert(s);
++
++        if (s->timer_fd <= 0)
++                return;
++
++        hashmap_remove(s->manager->timer_fds, INT_TO_PTR(s->timer_fd + 1));
++        epoll_ctl(s->manager->epoll_fd, EPOLL_CTL_DEL, s->timer_fd, NULL);
++
++        close_nointr(s->timer_fd);
++        s->timer_fd = -1;
++}
++
+ int session_stop(Session *s) {
+         int r;
+ 
+@@ -652,11 +673,18 @@ int session_stop(Session *s) {
+         if (!s->user)
+                 return -ESTALE;
+ 
++        session_close_timer_fd(s);
++
++        /* We are going down, don't care about FIFOs anymore */
++        session_remove_fifo(s);
++
+         /* Kill cgroup */
+         r = session_stop_scope(s);
+ 
+         session_save(s);
+ 
++        s->stopping = true;
++
+         return r;
+ }
+ 
+@@ -678,6 +706,8 @@ int session_finalize(Session *s) {
+                            "MESSAGE=Removed session %s.", s->id,
+                            NULL);
+ 
++        session_close_timer_fd(s);
++
+         /* Kill session devices */
+         while ((sd = hashmap_first(s->devices)))
+                 session_device_free(sd);
+@@ -698,16 +728,64 @@ int session_finalize(Session *s) {
+                 if (s->seat->active == s)
+                         seat_set_active(s->seat, NULL);
+ 
+-                seat_send_changed(s->seat, "Sessions\0");
+                 seat_save(s->seat);
++                seat_send_changed(s->seat, "Sessions\0");
+         }
+ 
+-        user_send_changed(s->user, "Sessions\0");
+         user_save(s->user);
++        user_send_changed(s->user, "Sessions\0");
+ 
+         return r;
+ }
+ 
++void session_release(Session *s) {
++        int r;
++
++        struct itimerspec its = { .it_value.tv_sec = RELEASE_SEC };
++        struct epoll_event ev = {};
++
++        assert(s);
++
++        if (!s->started || s->stopping)
++                return;
++
++        if (s->timer_fd >= 0)
++                return;
++
++        s->timer_fd = timerfd_create(CLOCK_MONOTONIC, TFD_NONBLOCK|TFD_CLOEXEC);
++        if (s->timer_fd < 0) {
++                log_error("Failed to create session release timer fd");
++                goto out;
++        }
++
++        r = hashmap_put(s->manager->timer_fds, INT_TO_PTR(s->timer_fd + 1), s);
++        if (r < 0) {
++                log_error("Failed to store session release timer fd");
++                goto out;
++        }
++
++        ev.events = EPOLLONESHOT;
++        ev.data.u32 = FD_OTHER_BASE + s->timer_fd;
++
++        r = epoll_ctl(s->manager->epoll_fd, EPOLL_CTL_ADD, s->timer_fd, &ev);
++        if (r < 0) {
++                log_error("Failed to add session release timer fd to epoll instance");
++                goto out;
++        }
++
++        r = timerfd_settime(s->timer_fd, TFD_TIMER_ABSTIME, &its, NULL);
++        if (r < 0) {
++                log_error("Failed to arm timer : %m");
++                goto out;
++        }
++
++out:
++        if (s->timer_fd >= 0) {
++                close_nointr(s->timer_fd);
++                s->timer_fd = -1;
++        }
++}
++
+ bool session_is_active(Session *s) {
+         assert(s);
+ 
+@@ -904,8 +982,6 @@ void session_remove_fifo(Session *s) {
+ }
+ 
+ int session_check_gc(Session *s, bool drop_not_started) {
+-        int r;
+-
+         assert(s);
+ 
+         if (drop_not_started && !s->started)
+@@ -915,11 +991,7 @@ int session_check_gc(Session *s, bool drop_not_started) {
+                 return 0;
+ 
+         if (s->fifo_fd >= 0) {
+-                r = pipe_eof(s->fifo_fd);
+-                if (r < 0)
+-                        return r;
+-
+-                if (r == 0)
++                if (pipe_eof(s->fifo_fd) <= 0)
+                         return 1;
+         }
+ 
+@@ -945,15 +1017,15 @@ void session_add_to_gc_queue(Session *s) {
+ SessionState session_get_state(Session *s) {
+         assert(s);
+ 
++        if (s->stopping || s->timer_fd >= 0)
++                return SESSION_CLOSING;
++
+         if (s->closing)
+                 return SESSION_CLOSING;
+ 
+         if (s->scope_job)
+                 return SESSION_OPENING;
+ 
+-        if (s->fifo_fd < 0)
+-                return SESSION_CLOSING;
+-
+         if (session_is_active(s))
+                 return SESSION_ACTIVE;
+ 
+diff --git a/src/login/logind-session.h b/src/login/logind-session.h
+index f175a89..9b76582 100644
+--- a/src/login/logind-session.h
++++ b/src/login/logind-session.h
+@@ -98,11 +98,14 @@ struct Session {
+         int fifo_fd;
+         char *fifo_path;
+ 
++        int timer_fd;
++
+         bool idle_hint;
+         dual_timestamp idle_hint_timestamp;
+ 
+         bool in_gc_queue:1;
+         bool started:1;
++        bool stopping:1;
+         bool closing:1;
+ 
+         DBusMessage *create_message;
+@@ -130,6 +133,7 @@ void session_remove_fifo(Session *s);
+ int session_start(Session *s);
+ int session_stop(Session *s);
+ int session_finalize(Session *s);
++void session_release(Session *s);
+ int session_save(Session *s);
+ int session_load(Session *s);
+ int session_kill(Session *s, KillWho who, int signo);
+diff --git a/src/login/logind-user.c b/src/login/logind-user.c
+index 8e7256b..653574e 100644
+--- a/src/login/logind-user.c
++++ b/src/login/logind-user.c
+@@ -487,6 +487,8 @@ int user_stop(User *u) {
+         if (k < 0)
+                 r = k;
+ 
++        u->stopping = true;
++
+         user_save(u);
+ 
+         return r;
+@@ -602,22 +604,27 @@ void user_add_to_gc_queue(User *u) {
+ 
+ UserState user_get_state(User *u) {
+         Session *i;
+-        bool all_closing = true;
+ 
+         assert(u);
+ 
++        if (u->stopping)
++                return USER_CLOSING;
++
+         if (u->slice_job || u->service_job)
+                 return USER_OPENING;
+ 
+-        LIST_FOREACH(sessions_by_user, i, u->sessions) {
+-                if (session_is_active(i))
+-                        return USER_ACTIVE;
+-                if (session_get_state(i) != SESSION_CLOSING)
+-                        all_closing = false;
+-        }
++        if (u->sessions) {
++                bool all_closing = true;
++
++                LIST_FOREACH(sessions_by_user, i, u->sessions) {
++                        if (session_is_active(i))
++                                return USER_ACTIVE;
++                        if (session_get_state(i) != SESSION_CLOSING)
++                                all_closing = false;
++                }
+ 
+-        if (u->sessions)
+                 return all_closing ? USER_CLOSING : USER_ONLINE;
++        }
+ 
+         if (user_check_linger_file(u) > 0)
+                 return USER_LINGERING;
+diff --git a/src/login/logind-user.h b/src/login/logind-user.h
+index a36f456..a12532e 100644
+--- a/src/login/logind-user.h
++++ b/src/login/logind-user.h
+@@ -61,6 +61,7 @@ struct User {
+ 
+         bool in_gc_queue:1;
+         bool started:1;
++        bool stopping:1;
+ 
+         LIST_HEAD(Session, sessions);
+         LIST_FIELDS(User, gc_queue);
+diff --git a/src/login/logind.c b/src/login/logind.c
+index 0628032..5180be7 100644
+--- a/src/login/logind.c
++++ b/src/login/logind.c
+@@ -80,10 +80,11 @@ Manager *manager_new(void) {
+         m->session_fds = hashmap_new(trivial_hash_func, trivial_compare_func);
+         m->inhibitor_fds = hashmap_new(trivial_hash_func, trivial_compare_func);
+         m->button_fds = hashmap_new(trivial_hash_func, trivial_compare_func);
++        m->timer_fds = hashmap_new(trivial_hash_func, trivial_compare_func);
+ 
+         if (!m->devices || !m->seats || !m->sessions || !m->users || !m->inhibitors || !m->buttons || !m->busnames ||
+             !m->user_units || !m->session_units ||
+-            !m->session_fds || !m->inhibitor_fds || !m->button_fds) {
++            !m->session_fds || !m->inhibitor_fds || !m->button_fds || !m->timer_fds) {
+                 manager_free(m);
+                 return NULL;
+         }
+@@ -149,6 +150,7 @@ void manager_free(Manager *m) {
+         hashmap_free(m->session_fds);
+         hashmap_free(m->inhibitor_fds);
+         hashmap_free(m->button_fds);
++        hashmap_free(m->timer_fds);
+ 
+         if (m->console_active_fd >= 0)
+                 close_nointr_nofail(m->console_active_fd);
+@@ -620,6 +622,13 @@ static void manager_dispatch_other(Manager *m, int fd) {
+                 return;
+         }
+ 
++        s = hashmap_get(m->timer_fds, INT_TO_PTR(fd + 1));
++        if (s) {
++                assert(s->timer_fd == fd);
++                session_stop(s);
++                return;
++        }
++
+         i = hashmap_get(m->inhibitor_fds, INT_TO_PTR(fd + 1));
+         if (i) {
+                 assert(i->fifo_fd == fd);
+@@ -942,8 +951,12 @@ void manager_gc(Manager *m, bool drop_not_started) {
+                 LIST_REMOVE(Session, gc_queue, m->session_gc_queue, session);
+                 session->in_gc_queue = false;
+ 
+-                if (session_check_gc(session, drop_not_started) == 0) {
++                /* First, if we are not closing yet, initiate stopping */
++                if (!session_check_gc(session, drop_not_started) &&
++                    session_get_state(session) != SESSION_CLOSING)
+                         session_stop(session);
++
++                if (!session_check_gc(session, drop_not_started)) {
+                         session_finalize(session);
+                         session_free(session);
+                 }
+@@ -953,8 +966,11 @@ void manager_gc(Manager *m, bool drop_not_started) {
+                 LIST_REMOVE(User, gc_queue, m->user_gc_queue, user);
+                 user->in_gc_queue = false;
+ 
+-                if (user_check_gc(user, drop_not_started) == 0) {
++                if (!user_check_gc(user, drop_not_started) &&
++                    user_get_state(user) != USER_CLOSING)
+                         user_stop(user);
++
++                if (!user_check_gc(user, drop_not_started)) {
+                         user_finalize(user);
+                         user_free(user);
+                 }
+@@ -1032,6 +1048,7 @@ finish:
+ 
+         return r;
+ }
++
+ int manager_startup(Manager *m) {
+         int r;
+         Seat *seat;
+diff --git a/src/login/logind.h b/src/login/logind.h
+index 9e6296c..0d2248f 100644
+--- a/src/login/logind.h
++++ b/src/login/logind.h
+@@ -88,6 +88,7 @@ struct Manager {
+         Hashmap *session_fds;
+         Hashmap *inhibitor_fds;
+         Hashmap *button_fds;
++        Hashmap *timer_fds;
+ 
+         usec_t inhibit_delay_max;
+ 
+@@ -183,9 +184,10 @@ int manager_send_changed(Manager *manager, const char *properties);
+ 
+ int manager_dispatch_delayed(Manager *manager);
+ 
+-int manager_start_scope(Manager *manager, const char *scope, pid_t pid, const char *slice, const char *description, const char *after, const char *kill_mode, DBusError *error, char **job);
++int manager_start_scope(Manager *manager, const char *scope, pid_t pid, const char *slice, const char *description, const char *after, DBusError *error, char **job);
+ int manager_start_unit(Manager *manager, const char *unit, DBusError *error, char **job);
+ int manager_stop_unit(Manager *manager, const char *unit, DBusError *error, char **job);
++int manager_abandon_scope(Manager *manager, const char *scope, DBusError *error);
+ int manager_kill_unit(Manager *manager, const char *unit, KillWho who, int signo, DBusError *error);
+ int manager_unit_is_active(Manager *manager, const char *unit);
+ 
+diff --git a/src/login/pam-module.c b/src/login/pam-module.c
+index 22d9733..7bd4783 100644
+--- a/src/login/pam-module.c
++++ b/src/login/pam-module.c
+@@ -478,7 +478,7 @@ _public_ PAM_EXTERN int pam_sm_close_session(
+                 int flags,
+                 int argc, const char **argv) {
+ 
+-        const void *p = NULL, *existing = NULL;
++        const void *existing = NULL;
+         const char *id;
+         DBusConnection *bus = NULL;
+         DBusMessage *m = NULL, *reply = NULL;
+@@ -535,12 +535,15 @@ _public_ PAM_EXTERN int pam_sm_close_session(
+                 }
+         }
+ 
++
++        /* Note that we are knowingly leaking the FIFO fd here. This
++         * way, logind can watch us die. If we closed it here it would
++         * not have any clue when that is completed. Given that one
++         * cannot really have multiple PAM sessions open from the same
++         * process this means we will leak one FD at max. */
+         r = PAM_SUCCESS;
+ 
+ finish:
+-        pam_get_data(handle, "systemd.session-fd", &p);
+-        if (p)
+-                close_nointr(PTR_TO_INT(p) - 1);
+ 
+         dbus_error_free(&error);
+ 
diff --git a/SOURCES/0208-logind-order-all-scopes-after-both-systemd-logind.se.patch b/SOURCES/0208-logind-order-all-scopes-after-both-systemd-logind.se.patch
new file mode 100644
index 0000000..53803da
--- /dev/null
+++ b/SOURCES/0208-logind-order-all-scopes-after-both-systemd-logind.se.patch
@@ -0,0 +1,87 @@
+From 10c5a4fec72a42369af812769802be974af3a012 Mon Sep 17 00:00:00 2001
+From: Michal Sekletar <msekleta@redhat.com>
+Date: Mon, 3 Mar 2014 16:07:39 +0100
+Subject: [PATCH] logind: order all scopes after both systemd-logind.service
+ and systemd-user-sessions.service
+
+This way at shutdown we can be sure that the sessions go away before the
+network.
+
+Based-on: ba4c5d93b73ef7bba0ae0c6bf2b36a42360f7a34
+---
+ src/login/logind-dbus.c    | 17 ++++++++++++++---
+ src/login/logind-session.c |  2 +-
+ src/login/logind.h         |  2 +-
+ 3 files changed, 16 insertions(+), 5 deletions(-)
+
+diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c
+index 8de301e..a68e9b4 100644
+--- a/src/login/logind-dbus.c
++++ b/src/login/logind-dbus.c
+@@ -2545,10 +2545,11 @@ int manager_start_scope(
+                 const char *slice,
+                 const char *description,
+                 const char *after,
++                const char *after2,
+                 DBusError *error,
+                 char **job) {
+ 
+-        const char *timeout_stop_property = "TimeoutStopUSec", *send_sighup_property = "SendSIGHUP", *pids_property = "PIDs";
++        const char *timeout_stop_property = "TimeoutStopUSec", *send_sighup_property = "SendSIGHUP", *pids_property = "PIDs", *after_property = "After";
+         _cleanup_dbus_message_unref_ DBusMessage *m = NULL, *reply = NULL;
+         DBusMessageIter iter, sub, sub2, sub3, sub4;
+         uint64_t timeout = 500 * USEC_PER_MSEC;
+@@ -2603,8 +2604,6 @@ int manager_start_scope(
+         }
+ 
+         if (!isempty(after)) {
+-                const char *after_property = "After";
+-
+                 if (!dbus_message_iter_open_container(&sub, DBUS_TYPE_STRUCT, NULL, &sub2) ||
+                     !dbus_message_iter_append_basic(&sub2, DBUS_TYPE_STRING, &after_property) ||
+                     !dbus_message_iter_open_container(&sub2, DBUS_TYPE_VARIANT, "as", &sub3) ||
+@@ -2616,6 +2615,18 @@ int manager_start_scope(
+                         return log_oom();
+         }
+ 
++        if (!isempty(after2)) {
++                if (!dbus_message_iter_open_container(&sub, DBUS_TYPE_STRUCT, NULL, &sub2) ||
++                    !dbus_message_iter_append_basic(&sub2, DBUS_TYPE_STRING, &after_property) ||
++                    !dbus_message_iter_open_container(&sub2, DBUS_TYPE_VARIANT, "as", &sub3) ||
++                    !dbus_message_iter_open_container(&sub3, DBUS_TYPE_ARRAY, "s", &sub4) ||
++                    !dbus_message_iter_append_basic(&sub4, DBUS_TYPE_STRING, &after2) ||
++                    !dbus_message_iter_close_container(&sub3, &sub4) ||
++                    !dbus_message_iter_close_container(&sub2, &sub3) ||
++                    !dbus_message_iter_close_container(&sub, &sub2))
++                        return log_oom();
++        }
++
+         /* cgroup empty notification is not available in containers
+          * currently. To make this less problematic, let's shorten the
+          * stop timeout for sessions, so that we don't wait
+diff --git a/src/login/logind-session.c b/src/login/logind-session.c
+index 78e6d74..2bac0a2 100644
+--- a/src/login/logind-session.c
++++ b/src/login/logind-session.c
+@@ -518,7 +518,7 @@ static int session_start_scope(Session *s) {
+                 if (!scope)
+                         return log_oom();
+ 
+-                r = manager_start_scope(s->manager, scope, s->leader, s->user->slice, description, "systemd-logind.service", &error, &job);
++                r = manager_start_scope(s->manager, scope, s->leader, s->user->slice, description, "systemd-logind.service", "systemd-user-session.service", &error, &job);
+                 if (r < 0) {
+                         log_error("Failed to start session scope %s: %s %s",
+                                   scope, bus_error(&error, r), error.name);
+diff --git a/src/login/logind.h b/src/login/logind.h
+index 0d2248f..540572f 100644
+--- a/src/login/logind.h
++++ b/src/login/logind.h
+@@ -184,7 +184,7 @@ int manager_send_changed(Manager *manager, const char *properties);
+ 
+ int manager_dispatch_delayed(Manager *manager);
+ 
+-int manager_start_scope(Manager *manager, const char *scope, pid_t pid, const char *slice, const char *description, const char *after, DBusError *error, char **job);
++int manager_start_scope(Manager *manager, const char *scope, pid_t pid, const char *slice, const char *description, const char *after, const char *after2, DBusError *error, char **job);
+ int manager_start_unit(Manager *manager, const char *unit, DBusError *error, char **job);
+ int manager_stop_unit(Manager *manager, const char *unit, DBusError *error, char **job);
+ int manager_abandon_scope(Manager *manager, const char *scope, DBusError *error);
diff --git a/SOURCES/0209-logind-given-that-we-can-now-relatively-safely-shutd.patch b/SOURCES/0209-logind-given-that-we-can-now-relatively-safely-shutd.patch
new file mode 100644
index 0000000..547f5bf
--- /dev/null
+++ b/SOURCES/0209-logind-given-that-we-can-now-relatively-safely-shutd.patch
@@ -0,0 +1,43 @@
+From adc1b71d84ab8b618c623749f43dc6350d75de6b Mon Sep 17 00:00:00 2001
+From: Michal Sekletar <msekleta@redhat.com>
+Date: Tue, 4 Mar 2014 17:00:54 +0100
+Subject: [PATCH] logind: given that we can now relatively safely shutdown
+ sessions copes without working cgroup empty notifications there's no need to
+ set the stop timeout of sessions scopes low
+
+Based-on: a50df72b37ce2a7caf7775c70d18c3f9504b9e80
+---
+ src/login/logind-dbus.c | 11 +----------
+ 1 file changed, 1 insertion(+), 10 deletions(-)
+
+diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c
+index a68e9b4..6cabb7b 100644
+--- a/src/login/logind-dbus.c
++++ b/src/login/logind-dbus.c
+@@ -2549,10 +2549,9 @@ int manager_start_scope(
+                 DBusError *error,
+                 char **job) {
+ 
+-        const char *timeout_stop_property = "TimeoutStopUSec", *send_sighup_property = "SendSIGHUP", *pids_property = "PIDs", *after_property = "After";
++        const char *send_sighup_property = "SendSIGHUP", *pids_property = "PIDs", *after_property = "After";
+         _cleanup_dbus_message_unref_ DBusMessage *m = NULL, *reply = NULL;
+         DBusMessageIter iter, sub, sub2, sub3, sub4;
+-        uint64_t timeout = 500 * USEC_PER_MSEC;
+         dbus_bool_t send_sighup = true;
+         const char *fail = "fail";
+         uint32_t u;
+@@ -2632,14 +2631,6 @@ int manager_start_scope(
+          * stop timeout for sessions, so that we don't wait
+          * forever. */
+ 
+-        if (!dbus_message_iter_open_container(&sub, DBUS_TYPE_STRUCT, NULL, &sub2) ||
+-            !dbus_message_iter_append_basic(&sub2, DBUS_TYPE_STRING, &timeout_stop_property) ||
+-            !dbus_message_iter_open_container(&sub2, DBUS_TYPE_VARIANT, "t", &sub3) ||
+-            !dbus_message_iter_append_basic(&sub3, DBUS_TYPE_UINT64, &timeout) ||
+-            !dbus_message_iter_close_container(&sub2, &sub3) ||
+-            !dbus_message_iter_close_container(&sub, &sub2))
+-                return log_oom();
+-
+         /* Make sure that the session shells are terminated with
+          * SIGHUP since bash and friends tend to ignore SIGTERM */
+         if (!dbus_message_iter_open_container(&sub, DBUS_TYPE_STRUCT, NULL, &sub2) ||
diff --git a/SOURCES/0210-utmp-make-sure-we-don-t-write-the-utmp-reboot-record.patch b/SOURCES/0210-utmp-make-sure-we-don-t-write-the-utmp-reboot-record.patch
new file mode 100644
index 0000000..fdee14a
--- /dev/null
+++ b/SOURCES/0210-utmp-make-sure-we-don-t-write-the-utmp-reboot-record.patch
@@ -0,0 +1,24 @@
+From cd31a2a77cccee55836ae77ac9f436c3764baf88 Mon Sep 17 00:00:00 2001
+From: Lukas Nykryn <lnykryn@redhat.com>
+Date: Thu, 30 Jan 2014 14:37:23 +0100
+Subject: [PATCH] utmp: make sure we don't write the utmp reboot record twice
+ on each boot
+
+---
+ src/update-utmp/update-utmp.c | 3 ---
+ 1 file changed, 3 deletions(-)
+
+diff --git a/src/update-utmp/update-utmp.c b/src/update-utmp/update-utmp.c
+index 202aa98..3606d17 100644
+--- a/src/update-utmp/update-utmp.c
++++ b/src/update-utmp/update-utmp.c
+@@ -268,9 +268,6 @@ static int on_runlevel(Context *c) {
+                         return q;
+                 }
+ 
+-                /* Hmm, we didn't find any runlevel, that means we
+-                 * have been rebooted */
+-                r = on_reboot(c);
+                 previous = 0;
+         }
+ 
diff --git a/SOURCES/0211-rules-mark-loop-device-as-SYSTEMD_READY-0-if-no-file.patch b/SOURCES/0211-rules-mark-loop-device-as-SYSTEMD_READY-0-if-no-file.patch
new file mode 100644
index 0000000..e47f069
--- /dev/null
+++ b/SOURCES/0211-rules-mark-loop-device-as-SYSTEMD_READY-0-if-no-file.patch
@@ -0,0 +1,28 @@
+From 4c3ce66158917f3fff65e25b5dde622bff3ec6f8 Mon Sep 17 00:00:00 2001
+From: Peter Rajnoha <prajnoha@redhat.com>
+Date: Thu, 6 Mar 2014 15:49:55 +0100
+Subject: [PATCH] rules: mark loop device as SYSTEMD_READY=0 if no file is
+ attached
+
+Check existence of loop/backing_file in sysfs and mark loop
+devices with SYSTEMD_READY if missing. Such loop files is
+uninitialized and it's not ready for use yet (there's no file
+attached).
+---
+ rules/99-systemd.rules.in | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/rules/99-systemd.rules.in b/rules/99-systemd.rules.in
+index 0e0a567..0471719 100644
+--- a/rules/99-systemd.rules.in
++++ b/rules/99-systemd.rules.in
+@@ -25,6 +25,9 @@ SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="md*", ATTR{md/array_state}=="
+ # Ignore nbd devices in the "add" event, with "change" the nbd is ready
+ ACTION=="add", SUBSYSTEM=="block", KERNEL=="nbd*", ENV{SYSTEMD_READY}="0"
+ 
++# Ignore loop devices that don't have any file attached
++ACTION=="add|change", KERNEL=="loop[0-9]*", TEST!="loop/backing_file", ENV{SYSTEMD_READY}="0"
++
+ # We need a hardware independent way to identify network devices. We
+ # use the /sys/subsystem path for this. Current vanilla kernels don't
+ # actually support that hierarchy right now, however upcoming kernels
diff --git a/SOURCES/0212-logind-fix-reference-to-systemd-user-sessions.servic.patch b/SOURCES/0212-logind-fix-reference-to-systemd-user-sessions.servic.patch
new file mode 100644
index 0000000..c4a2f33
--- /dev/null
+++ b/SOURCES/0212-logind-fix-reference-to-systemd-user-sessions.servic.patch
@@ -0,0 +1,22 @@
+From eed10abd7ed29316dcc0a234506117069c98f949 Mon Sep 17 00:00:00 2001
+From: Michal Sekletar <msekleta@redhat.com>
+Date: Mon, 10 Mar 2014 17:47:35 +0100
+Subject: [PATCH] logind: fix reference to systemd-user-sessions.service
+
+---
+ src/login/logind-session.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/login/logind-session.c b/src/login/logind-session.c
+index 2bac0a2..f31961a 100644
+--- a/src/login/logind-session.c
++++ b/src/login/logind-session.c
+@@ -518,7 +518,7 @@ static int session_start_scope(Session *s) {
+                 if (!scope)
+                         return log_oom();
+ 
+-                r = manager_start_scope(s->manager, scope, s->leader, s->user->slice, description, "systemd-logind.service", "systemd-user-session.service", &error, &job);
++                r = manager_start_scope(s->manager, scope, s->leader, s->user->slice, description, "systemd-logind.service", "systemd-user-sessions.service", &error, &job);
+                 if (r < 0) {
+                         log_error("Failed to start session scope %s: %s %s",
+                                   scope, bus_error(&error, r), error.name);
diff --git a/SOURCES/0213-logind-add-forgotten-call-to-user_send_changed.patch b/SOURCES/0213-logind-add-forgotten-call-to-user_send_changed.patch
new file mode 100644
index 0000000..858c260
--- /dev/null
+++ b/SOURCES/0213-logind-add-forgotten-call-to-user_send_changed.patch
@@ -0,0 +1,21 @@
+From 4a725025497979ad512e242335360b23fb43b349 Mon Sep 17 00:00:00 2001
+From: Michal Sekletar <msekleta@redhat.com>
+Date: Mon, 10 Mar 2014 18:11:45 +0100
+Subject: [PATCH] logind: add forgotten call to user_send_changed()
+
+---
+ src/login/logind-session.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/src/login/logind-session.c b/src/login/logind-session.c
+index f31961a..e519d35 100644
+--- a/src/login/logind-session.c
++++ b/src/login/logind-session.c
+@@ -587,6 +587,7 @@ int session_start(Session *s) {
+ 
+         /* Send signals */
+         session_send_signal(s, true);
++        user_send_changed(s->user, "Sessions\0");
+ 
+         if (s->seat) {
+                 if (s->seat->active == s)
diff --git a/SOURCES/0214-logind-save-session-after-setting-the-stopping-flag.patch b/SOURCES/0214-logind-save-session-after-setting-the-stopping-flag.patch
new file mode 100644
index 0000000..8e10f41
--- /dev/null
+++ b/SOURCES/0214-logind-save-session-after-setting-the-stopping-flag.patch
@@ -0,0 +1,25 @@
+From 66cd858045170353359d05dd0b4d259d6059de72 Mon Sep 17 00:00:00 2001
+From: Michal Sekletar <msekleta@redhat.com>
+Date: Mon, 10 Mar 2014 18:22:55 +0100
+Subject: [PATCH] logind: save session after setting the stopping flag
+
+---
+ src/login/logind-session.c | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+diff --git a/src/login/logind-session.c b/src/login/logind-session.c
+index e519d35..3ab41e6 100644
+--- a/src/login/logind-session.c
++++ b/src/login/logind-session.c
+@@ -682,10 +682,9 @@ int session_stop(Session *s) {
+         /* Kill cgroup */
+         r = session_stop_scope(s);
+ 
+-        session_save(s);
+-
+         s->stopping = true;
+ 
++        session_save(s);
+         return r;
+ }
+ 
diff --git a/SOURCES/0215-logind-save-user-state-after-stopping-the-session.patch b/SOURCES/0215-logind-save-user-state-after-stopping-the-session.patch
new file mode 100644
index 0000000..ea53156
--- /dev/null
+++ b/SOURCES/0215-logind-save-user-state-after-stopping-the-session.patch
@@ -0,0 +1,22 @@
+From 34c3bd12815064d0d3820ac0b30c0952ba5fd1fe Mon Sep 17 00:00:00 2001
+From: Michal Sekletar <msekleta@redhat.com>
+Date: Mon, 10 Mar 2014 18:26:34 +0100
+Subject: [PATCH] logind: save user state after stopping the session
+
+---
+ src/login/logind-session.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/src/login/logind-session.c b/src/login/logind-session.c
+index 3ab41e6..2a2a670 100644
+--- a/src/login/logind-session.c
++++ b/src/login/logind-session.c
+@@ -685,6 +685,8 @@ int session_stop(Session *s) {
+         s->stopping = true;
+ 
+         session_save(s);
++        user_save(s);
++
+         return r;
+ }
+ 
diff --git a/SOURCES/0216-logind-initialize-timer_fd.patch b/SOURCES/0216-logind-initialize-timer_fd.patch
new file mode 100644
index 0000000..19d5cac
--- /dev/null
+++ b/SOURCES/0216-logind-initialize-timer_fd.patch
@@ -0,0 +1,21 @@
+From fe828286b888871e18bc68173cd281619bd7b4b2 Mon Sep 17 00:00:00 2001
+From: Michal Sekletar <msekleta@redhat.com>
+Date: Tue, 11 Mar 2014 13:26:38 +0100
+Subject: [PATCH] logind: initialize timer_fd
+
+---
+ src/login/logind-session.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/src/login/logind-session.c b/src/login/logind-session.c
+index 2a2a670..d7c3187 100644
+--- a/src/login/logind-session.c
++++ b/src/login/logind-session.c
+@@ -89,6 +89,7 @@ Session* session_new(Manager *m, const char *id) {
+ 
+         s->manager = m;
+         s->fifo_fd = -1;
++        s->timer_fd = -1;
+ 
+         return s;
+ }
diff --git a/SOURCES/0217-service-don-t-create-extra-cgroup-for-control-proces.patch b/SOURCES/0217-service-don-t-create-extra-cgroup-for-control-proces.patch
new file mode 100644
index 0000000..c7ffdb4
--- /dev/null
+++ b/SOURCES/0217-service-don-t-create-extra-cgroup-for-control-proces.patch
@@ -0,0 +1,46 @@
+From d09b7328c7757cebdc2fb0032361c086733bd3f7 Mon Sep 17 00:00:00 2001
+From: Lukas Nykryn <lnykryn@redhat.com>
+Date: Mon, 10 Mar 2014 15:11:29 +0100
+Subject: [PATCH] service: don't create extra cgroup for control process when
+ reloading SysV service
+
+Unfortunately common practice in initscripts is to have reload as an
+alias for restart (https://fedoraproject.org/wiki/Packaging:SysVInitScript).
+In that case the newly started process will be killed immediately after
+the reload process ends and its cgroup is destroyed.
+---
+ src/core/service.c | 13 ++++++++++++-
+ 1 file changed, 12 insertions(+), 1 deletion(-)
+
+diff --git a/src/core/service.c b/src/core/service.c
+index 41e5cb5..dff5286 100644
+--- a/src/core/service.c
++++ b/src/core/service.c
+@@ -2353,7 +2353,15 @@ static void service_enter_reload(Service *s) {
+                                   !s->root_directory_start_only,
+                                   false,
+                                   false,
++#ifdef HAVE_SYSV_COMPAT
++                                  /* Don't create extra cgroup for SysV services.
++                                   * Unfortunately common practice was to have reload as an alias
++                                   * for restart and we are killing the new main process, when destroying
++                                   * cgroup for the control process*/
++                                  !s->is_sysv,
++#else
+                                   true,
++#endif
+                                   &s->control_pid);
+                 if (r < 0)
+                         goto fail;
+@@ -3174,7 +3182,10 @@ static void service_sigchld_event(Unit *u, pid_t pid, int code, int status) {
+                 /* Immediately get rid of the cgroup, so that the
+                  * kernel doesn't delay the cgroup empty messages for
+                  * the service cgroup any longer than necessary */
+-                service_kill_control_processes(s);
++#ifdef HAVE_SYSV_COMPAT
++                if (!s->is_sysv)
++#endif
++                        service_kill_control_processes(s);
+ 
+                 if (s->control_command &&
+                     s->control_command->command_next &&
diff --git a/SOURCES/0218-logind-pass-pointer-to-User-object-to-user_save.patch b/SOURCES/0218-logind-pass-pointer-to-User-object-to-user_save.patch
new file mode 100644
index 0000000..a9deb00
--- /dev/null
+++ b/SOURCES/0218-logind-pass-pointer-to-User-object-to-user_save.patch
@@ -0,0 +1,22 @@
+From 83062f40f3e39d089396ad7918620ecab8534179 Mon Sep 17 00:00:00 2001
+From: Michal Sekletar <msekleta@redhat.com>
+Date: Tue, 11 Mar 2014 20:42:42 +0100
+Subject: [PATCH] logind: pass pointer to User object to user_save()
+
+---
+ src/login/logind-session.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/login/logind-session.c b/src/login/logind-session.c
+index d7c3187..b0e4bf6 100644
+--- a/src/login/logind-session.c
++++ b/src/login/logind-session.c
+@@ -686,7 +686,7 @@ int session_stop(Session *s) {
+         s->stopping = true;
+ 
+         session_save(s);
+-        user_save(s);
++        user_save(s->user);
+ 
+         return r;
+ }
diff --git a/SOURCES/0219-fstab-generator-When-parsing-the-root-cmdline-option.patch b/SOURCES/0219-fstab-generator-When-parsing-the-root-cmdline-option.patch
new file mode 100644
index 0000000..2f4467c
--- /dev/null
+++ b/SOURCES/0219-fstab-generator-When-parsing-the-root-cmdline-option.patch
@@ -0,0 +1,26 @@
+From 42f30a9750ca939f1e805d5fb7790cd8dd3dee62 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Thomas=20B=C3=A4chler?= <thomas@archlinux.org>
+Date: Mon, 30 Sep 2013 00:32:33 +0200
+Subject: [PATCH] fstab-generator: When parsing the root= cmdline option, set
+ FsckPassNo to 1
+
+[tomegun: without this we would never fsck the rootfs if it was directly
+mounted 'rw' from the initrd. We now risk fsck'ing it twice in the case it
+is mounted 'ro', so that should be addressed in a separate patch.]
+---
+ src/fstab-generator/fstab-generator.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/fstab-generator/fstab-generator.c b/src/fstab-generator/fstab-generator.c
+index 9efccb9..6cecb4e 100644
+--- a/src/fstab-generator/fstab-generator.c
++++ b/src/fstab-generator/fstab-generator.c
+@@ -449,7 +449,7 @@ static int parse_new_root_from_proc_cmdline(void) {
+         }
+ 
+         log_debug("Found entry what=%s where=/sysroot type=%s", what, type);
+-        r = add_mount(what, "/sysroot", type, opts, 0, noauto, nofail, false,
++        r = add_mount(what, "/sysroot", type, opts, 1, noauto, nofail, false,
+                       SPECIAL_INITRD_ROOT_FS_TARGET, "/proc/cmdline");
+ 
+         return (r < 0) ? r : 0;
diff --git a/SOURCES/0220-gpt-auto-generator-Generate-explicit-dependencies-on.patch b/SOURCES/0220-gpt-auto-generator-Generate-explicit-dependencies-on.patch
new file mode 100644
index 0000000..5f88f3d
--- /dev/null
+++ b/SOURCES/0220-gpt-auto-generator-Generate-explicit-dependencies-on.patch
@@ -0,0 +1,52 @@
+From 23623890843b81c5d0bd6115ae1f458539b2d43b Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Thomas=20B=C3=A4chler?= <thomas@archlinux.org>
+Date: Mon, 30 Sep 2013 01:34:45 +0200
+Subject: [PATCH] gpt-auto-generator: Generate explicit dependencies on
+ systemd-fsck@.service instead of using FsckPassNo
+
+[tomegun: check for OOM]
+---
+ src/gpt-auto-generator/gpt-auto-generator.c | 14 +++++++++-----
+ 1 file changed, 9 insertions(+), 5 deletions(-)
+
+diff --git a/src/gpt-auto-generator/gpt-auto-generator.c b/src/gpt-auto-generator/gpt-auto-generator.c
+index f1749be..adbf71d 100644
+--- a/src/gpt-auto-generator/gpt-auto-generator.c
++++ b/src/gpt-auto-generator/gpt-auto-generator.c
+@@ -179,7 +179,7 @@ static int add_swap(const char *path, const char *fstype) {
+ }
+ 
+ static int add_home(const char *path, const char *fstype) {
+-        _cleanup_free_ char *unit = NULL, *lnk = NULL;
++        _cleanup_free_ char *unit = NULL, *lnk = NULL, *fsck = NULL;
+         _cleanup_fclose_ FILE *f = NULL;
+ 
+         if (dir_is_empty("/home") <= 0)
+@@ -197,19 +197,23 @@ static int add_home(const char *path, const char *fstype) {
+                 return -errno;
+         }
+ 
++        fsck = unit_name_from_path_instance("systemd-fsck", path, ".service");
++        if (!fsck)
++                return log_oom();
++
+         fprintf(f,
+                 "# Automatically generated by systemd-gpt-auto-generator\n\n"
+                 "[Unit]\n"
+                 "DefaultDependencies=no\n"
+-                "After=" SPECIAL_LOCAL_FS_PRE_TARGET "\n"
++                "Requires=%s\n"
++                "After=" SPECIAL_LOCAL_FS_PRE_TARGET " %s\n"
+                 "Conflicts=" SPECIAL_UMOUNT_TARGET "\n"
+                 "Before=" SPECIAL_UMOUNT_TARGET " " SPECIAL_LOCAL_FS_TARGET "\n\n"
+                 "[Mount]\n"
+                 "What=%s\n"
+                 "Where=/home\n"
+-                "Type=%s\n"
+-                "FsckPassNo=2\n",
+-                path, fstype);
++                "Type=%s\n",
++                fsck, fsck, path, fstype);
+ 
+         fflush(f);
+         if (ferror(f)) {
diff --git a/SOURCES/0221-fstab-generator-Generate-explicit-dependencies-on-sy.patch b/SOURCES/0221-fstab-generator-Generate-explicit-dependencies-on-sy.patch
new file mode 100644
index 0000000..7404814
--- /dev/null
+++ b/SOURCES/0221-fstab-generator-Generate-explicit-dependencies-on-sy.patch
@@ -0,0 +1,108 @@
+From 8a9eab141ab379c658fc198fb0b0ee4ca3bdd1d2 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Thomas=20B=C3=A4chler?= <thomas@archlinux.org>
+Date: Mon, 30 Sep 2013 01:34:44 +0200
+Subject: [PATCH] fstab-generator: Generate explicit dependencies on
+ systemd-fsck@.service instead of using FsckPassNo
+
+[tomegun:
+  * order all fsck instances after fsck-root
+  * check for OOM
+  * added notes in the manpages]
+
+Conflicts:
+	man/systemd-fsck@.service.xml
+	man/systemd-fstab-generator.xml
+---
+ man/systemd-fsck@.service.xml         |  4 +---
+ man/systemd-fstab-generator.xml       |  9 ++++-----
+ src/fstab-generator/fstab-generator.c | 21 +++++++++++++++++----
+ units/systemd-fsck@.service.in        |  2 +-
+ 4 files changed, 23 insertions(+), 13 deletions(-)
+
+diff --git a/man/systemd-fsck@.service.xml b/man/systemd-fsck@.service.xml
+index c653dc5..17bd1c0 100644
+--- a/man/systemd-fsck@.service.xml
++++ b/man/systemd-fsck@.service.xml
+@@ -63,9 +63,7 @@
+                 check. <filename>systemd-fsck-root.service</filename> is
+                 responsible for file system checks on the root
+                 file system. The root file system check is performed
+-                before the other file systems. Either service is enabled
+-                at boot if passno in <filename>/etc/fstab</filename> for
+-                the file system is set to a value greater than zero.</para>
++                before the other file systems.</para>
+ 
+                 <para><filename>systemd-fsck</filename> will
+                 forward file system checking progress to the
+diff --git a/man/systemd-fstab-generator.xml b/man/systemd-fstab-generator.xml
+index e3cf5d2..740db8f 100644
+--- a/man/systemd-fstab-generator.xml
++++ b/man/systemd-fstab-generator.xml
+@@ -61,11 +61,10 @@
+                 reloaded. This will instantiate mount and swap units
+                 as necessary.</para>
+ 
+-                <para>The <varname>passno</varname> field is treated
+-                like a simple boolean, and the ordering information is
+-                discarded. However, if the root file system is
+-                checked, it is checked before all the other
+-                file systems.</para>
++                <para>The <term><varname>passno</varname></term> field
++                is treated like a simlpe boolean, and the ordering information
++                is discarded. However, the root filesystem is checked
++                before all the other filesystems.</para>
+ 
+                 <para>See
+                 <citerefentry><refentrytitle>systemd.mount</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+diff --git a/src/fstab-generator/fstab-generator.c b/src/fstab-generator/fstab-generator.c
+index 6cecb4e..7874ff1 100644
+--- a/src/fstab-generator/fstab-generator.c
++++ b/src/fstab-generator/fstab-generator.c
+@@ -209,17 +209,30 @@ static int add_mount(
+                         "Before=%s\n",
+                         post);
+ 
++        if (passno > 0) {
++                _cleanup_free_ char *fsck = NULL;
++
++                fsck = unit_name_from_path_instance("systemd-fsck", what, ".service");
++                if (!fsck)
++                        return log_oom();
++
++                fprintf(f,
++                        "Requires=%s\n"
++                        "After=%s\n",
++                        fsck,
++                        fsck);
++        }
++
++
+         fprintf(f,
+                 "\n"
+                 "[Mount]\n"
+                 "What=%s\n"
+                 "Where=%s\n"
+-                "Type=%s\n"
+-                "FsckPassNo=%i\n",
++                "Type=%s\n",
+                 what,
+                 where,
+-                type,
+-                passno);
++                type);
+ 
+         if (!isempty(opts) &&
+             !streq(opts, "defaults"))
+diff --git a/units/systemd-fsck@.service.in b/units/systemd-fsck@.service.in
+index e229cdc..c12efa8 100644
+--- a/units/systemd-fsck@.service.in
++++ b/units/systemd-fsck@.service.in
+@@ -10,7 +10,7 @@ Description=File System Check on %f
+ Documentation=man:systemd-fsck@.service(8)
+ DefaultDependencies=no
+ BindsTo=%i.device
+-After=systemd-readahead-collect.service systemd-readahead-replay.service %i.device
++After=systemd-readahead-collect.service systemd-readahead-replay.service %i.device systemd-fsck-root.service
+ Before=shutdown.target
+ 
+ [Service]
diff --git a/SOURCES/0222-fsck-root-only-run-when-requested-in-fstab.patch b/SOURCES/0222-fsck-root-only-run-when-requested-in-fstab.patch
new file mode 100644
index 0000000..21d7714
--- /dev/null
+++ b/SOURCES/0222-fsck-root-only-run-when-requested-in-fstab.patch
@@ -0,0 +1,92 @@
+From 8610788332cb6492d8e5275b32200db4138401bb Mon Sep 17 00:00:00 2001
+From: Tom Gundersen <teg@jklm.no>
+Date: Sat, 19 Oct 2013 11:38:42 +0200
+Subject: [PATCH] fsck-root: only run when requested in fstab
+
+fsck-root is redundant in case an initrd is used, or in case the rootfs
+is never remounted 'rw', so the new default is the correct behavior for
+most users. For the rest, they should enable it in fstab.
+---
+ Makefile.am                           |  1 -
+ man/systemd-fsck@.service.xml         |  4 +++-
+ src/fstab-generator/fstab-generator.c | 31 ++++++++++++++++++++++---------
+ 3 files changed, 25 insertions(+), 11 deletions(-)
+
+diff --git a/Makefile.am b/Makefile.am
+index df63275..fa2fba6 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -4415,7 +4415,6 @@ SYSINIT_TARGET_WANTS += \
+ 	systemd-update-utmp.service
+ LOCAL_FS_TARGET_WANTS += \
+ 	systemd-remount-fs.service \
+-	systemd-fsck-root.service \
+ 	tmp.mount
+ MULTI_USER_TARGET_WANTS += \
+ 	getty.target \
+diff --git a/man/systemd-fsck@.service.xml b/man/systemd-fsck@.service.xml
+index 17bd1c0..811392b 100644
+--- a/man/systemd-fsck@.service.xml
++++ b/man/systemd-fsck@.service.xml
+@@ -63,7 +63,9 @@
+                 check. <filename>systemd-fsck-root.service</filename> is
+                 responsible for file system checks on the root
+                 file system. The root file system check is performed
+-                before the other file systems.</para>
++                before the other file systems. Either service is enabled
++                at boot if passno in <filename>/etc/fstab</filename> for
++                the filesystem is set to a value greater than zero.</para>
+ 
+                 <para><filename>systemd-fsck</filename> will
+                 forward file system checking progress to the
+diff --git a/src/fstab-generator/fstab-generator.c b/src/fstab-generator/fstab-generator.c
+index 7874ff1..c0c2992 100644
+--- a/src/fstab-generator/fstab-generator.c
++++ b/src/fstab-generator/fstab-generator.c
+@@ -210,17 +210,29 @@ static int add_mount(
+                         post);
+ 
+         if (passno > 0) {
+-                _cleanup_free_ char *fsck = NULL;
++                if (streq(where, "/")) {
++                        lnk = strjoin(arg_dest, "/", SPECIAL_LOCAL_FS_TARGET, ".wants/", "systemd-fsck-root.service", NULL);
++                        if (!lnk)
++                                return log_oom();
+ 
+-                fsck = unit_name_from_path_instance("systemd-fsck", what, ".service");
+-                if (!fsck)
+-                        return log_oom();
++                        mkdir_parents_label(lnk, 0755);
++                        if (symlink("systemd-fsck-root.service", lnk) < 0) {
++                                log_error("Failed to create symlink %s: %m", lnk);
++                                return -errno;
++                        }
++                } else {
++                        _cleanup_free_ char *fsck = NULL;
+ 
+-                fprintf(f,
+-                        "Requires=%s\n"
+-                        "After=%s\n",
+-                        fsck,
+-                        fsck);
++                        fsck = unit_name_from_path_instance("systemd-fsck", what, ".service");
++                        if (!fsck)
++                                return log_oom();
++
++                        fprintf(f,
++                                "Requires=%s\n"
++                                "After=%s\n",
++                                fsck,
++                                fsck);
++                }
+         }
+ 
+ 
+@@ -248,6 +260,7 @@ static int add_mount(
+ 
+         if (!noauto) {
+                 if (post) {
++                        free(lnk);
+                         lnk = strjoin(arg_dest, "/", post, nofail || automount ? ".wants/" : ".requires/", name, NULL);
+                         if (!lnk)
+                                 return log_oom();
diff --git a/SOURCES/0223-core-allow-PIDs-to-be-watched-by-two-units-at-the-sa.patch b/SOURCES/0223-core-allow-PIDs-to-be-watched-by-two-units-at-the-sa.patch
new file mode 100644
index 0000000..62ebf31
--- /dev/null
+++ b/SOURCES/0223-core-allow-PIDs-to-be-watched-by-two-units-at-the-sa.patch
@@ -0,0 +1,360 @@
+From 49bfaaa65107a9d79fbb1276e44fd4e3c98b0e9c Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart@poettering.net>
+Date: Fri, 7 Feb 2014 11:58:25 +0100
+Subject: [PATCH] core: allow PIDs to be watched by two units at the same time
+
+In some cases it is interesting to map a PID to two units at the same
+time. For example, when a user logs in via a getty, which is reexeced to
+/sbin/login that binary will be explicitly referenced as main pid of the
+getty service, as well as implicitly referenced as part of the session
+scope.
+
+Conflicts:
+	src/core/manager.c
+	src/core/manager.h
+---
+ src/core/manager.c | 201 ++++++++++++++++++++++++++++++-----------------------
+ src/core/manager.h |   9 ++-
+ src/core/unit.c    |  28 ++++++--
+ 3 files changed, 142 insertions(+), 96 deletions(-)
+
+diff --git a/src/core/manager.c b/src/core/manager.c
+index db5094f..2829c95 100644
+--- a/src/core/manager.c
++++ b/src/core/manager.c
+@@ -525,7 +525,10 @@ int manager_new(SystemdRunningAs running_as, bool reexecuting, Manager **_m) {
+         if (!(m->jobs = hashmap_new(trivial_hash_func, trivial_compare_func)))
+                 goto fail;
+ 
+-        if (!(m->watch_pids = hashmap_new(trivial_hash_func, trivial_compare_func)))
++        if (!(m->watch_pids1 = hashmap_new(trivial_hash_func, trivial_compare_func)))
++                goto fail;
++
++        if (!(m->watch_pids2 = hashmap_new(trivial_hash_func, trivial_compare_func)))
+                 goto fail;
+ 
+         m->cgroup_unit = hashmap_new(string_hash_func, string_compare_func);
+@@ -740,7 +743,8 @@ void manager_free(Manager *m) {
+ 
+         hashmap_free(m->units);
+         hashmap_free(m->jobs);
+-        hashmap_free(m->watch_pids);
++        hashmap_free(m->watch_pids1);
++        hashmap_free(m->watch_pids2);
+         hashmap_free(m->watch_bus);
+ 
+         if (m->epoll_fd >= 0)
+@@ -1247,6 +1251,26 @@ unsigned manager_dispatch_dbus_queue(Manager *m) {
+         return n;
+ }
+ 
++static void manager_invoke_notify_message(Manager *m, Unit *u, pid_t pid, char *buf, size_t n) {
++        _cleanup_strv_free_ char **tags = NULL;
++
++        assert(m);
++        assert(u);
++        assert(buf);
++        assert(n > 0);
++
++        tags = strv_split(buf, "\n\r");
++        if (!tags) {
++                log_oom();
++                return;
++        }
++
++        log_debug_unit(u->id, "Got notification message for unit %s", u->id);
++
++        if (UNIT_VTABLE(u)->notify_message)
++                UNIT_VTABLE(u)->notify_message(u, pid, tags);
++}
++
+ static int manager_process_notify_fd(Manager *m) {
+         ssize_t n;
+ 
+@@ -1259,6 +1283,8 @@ static int manager_process_notify_fd(Manager *m) {
+                         .iov_len = sizeof(buf)-1,
+                 };
+ 
++                bool found = false;
++
+                 union {
+                         struct cmsghdr cmsghdr;
+                         uint8_t buf[CMSG_SPACE(sizeof(struct ucred))];
+@@ -1272,7 +1298,6 @@ static int manager_process_notify_fd(Manager *m) {
+                 };
+                 struct ucred *ucred;
+                 Unit *u;
+-                _cleanup_strv_free_ char **tags = NULL;
+ 
+                 n = recvmsg(m->notify_watch.fd, &msghdr, MSG_DONTWAIT);
+                 if (n <= 0) {
+@@ -1295,105 +1320,105 @@ static int manager_process_notify_fd(Manager *m) {
+ 
+                 ucred = (struct ucred*) CMSG_DATA(&control.cmsghdr);
+ 
+-                u = hashmap_get(m->watch_pids, LONG_TO_PTR(ucred->pid));
+-                if (!u) {
+-                        u = manager_get_unit_by_pid(m, ucred->pid);
+-                        if (!u) {
+-                                log_warning("Cannot find unit for notify message of PID %lu.", (unsigned long) ucred->pid);
+-                                continue;
+-                        }
+-                }
+-
+                 assert((size_t) n < sizeof(buf));
+                 buf[n] = 0;
+-                tags = strv_split(buf, "\n\r");
+-                if (!tags)
+-                        return log_oom();
+-
+-                log_debug_unit(u->id, "Got notification message for unit %s", u->id);
+-
+-                if (UNIT_VTABLE(u)->notify_message)
+-                        UNIT_VTABLE(u)->notify_message(u, ucred->pid, tags);
+-        }
+-
+-        return 0;
+-}
+-
+-static int manager_dispatch_sigchld(Manager *m) {
+-        assert(m);
+-
+-        for (;;) {
+-                siginfo_t si = {};
+-                Unit *u;
+-                int r;
+-
+-                /* First we call waitd() for a PID and do not reap the
+-                 * zombie. That way we can still access /proc/$PID for
+-                 * it while it is a zombie. */
+-                if (waitid(P_ALL, 0, &si, WEXITED|WNOHANG|WNOWAIT) < 0) {
+-
+-                        if (errno == ECHILD)
+-                                break;
+ 
+-                        if (errno == EINTR)
+-                                continue;
+-
+-                        return -errno;
++                u = manager_get_unit_by_pid(m, ucred->pid);
++                if (u) {
++                        manager_invoke_notify_message(m, u, ucred->pid, buf, n);
++                        found = true;
+                 }
+ 
+-                if (si.si_pid <= 0)
+-                        break;
+-
+-                if (si.si_code == CLD_EXITED || si.si_code == CLD_KILLED || si.si_code == CLD_DUMPED) {
+-                        _cleanup_free_ char *name = NULL;
+-
+-                        get_process_comm(si.si_pid, &name);
+-                        log_debug("Got SIGCHLD for process %lu (%s)", (unsigned long) si.si_pid, strna(name));
++                u = hashmap_get(m->watch_pids1, LONG_TO_PTR(ucred->pid));
++                if (u) {
++                        manager_invoke_notify_message(m, u, ucred->pid, buf, n);
++                        found = true;
+                 }
+ 
+-                /* Let's flush any message the dying child might still
+-                 * have queued for us. This ensures that the process
+-                 * still exists in /proc so that we can figure out
+-                 * which cgroup and hence unit it belongs to. */
+-                r = manager_process_notify_fd(m);
+-                if (r < 0)
+-                        return r;
+-
+-                /* And now figure out the unit this belongs to */
+-                u = hashmap_get(m->watch_pids, LONG_TO_PTR(si.si_pid));
+-                if (!u)
+-                        u = manager_get_unit_by_pid(m, si.si_pid);
+-
+-                /* And now, we actually reap the zombie. */
+-                if (waitid(P_PID, si.si_pid, &si, WEXITED) < 0) {
+-                        if (errno == EINTR)
+-                                continue;
+-
+-                        return -errno;
++                u = hashmap_get(m->watch_pids2, LONG_TO_PTR(ucred->pid));
++                if (u) {
++                        manager_invoke_notify_message(m, u, ucred->pid, buf, n);
++                        found = true;
+                 }
+ 
+-                if (si.si_code != CLD_EXITED && si.si_code != CLD_KILLED && si.si_code != CLD_DUMPED)
+-                        continue;
++                if (!found)
++                        log_warning("Cannot find unit for notify message of PID %lu.",(long unsigned) ucred->pid);
++        }
+ 
+-                log_debug("Child %lu died (code=%s, status=%i/%s)",
+-                          (long unsigned) si.si_pid,
+-                          sigchld_code_to_string(si.si_code),
+-                          si.si_status,
+-                          strna(si.si_code == CLD_EXITED
+-                                ? exit_status_to_string(si.si_status, EXIT_STATUS_FULL)
+-                                : signal_to_string(si.si_status)));
++        return 0;
++}
+ 
+-                if (!u)
+-                        continue;
++static void invoke_sigchld_event(Manager *m, Unit *u, siginfo_t *si) {
++        assert(m);
++        assert(u);
++        assert(si);
+ 
+-                log_debug_unit(u->id,
+-                               "Child %lu belongs to %s", (long unsigned) si.si_pid, u->id);
++        log_debug_unit(u->id, "Child %lu belongs to %s",(long unsigned) si->si_pid, u->id);
+ 
+-                unit_unwatch_pid(u, si.si_pid);
+-                UNIT_VTABLE(u)->sigchld_event(u, si.si_pid, si.si_code, si.si_status);
+-        }
++        unit_unwatch_pid(u, si->si_pid);
++        UNIT_VTABLE(u)->sigchld_event(u, si->si_pid, si->si_code, si->si_status);
++}
+ 
+-        return 0;
++static int manager_dispatch_sigchld(Manager *m) {
++    assert(m);
++
++    for (;;) {
++            siginfo_t si = {};
++
++            /* First we call waitd() for a PID and do not reap the
++             * zombie. That way we can still access /proc/$PID for
++             * it while it is a zombie. */
++            if (waitid(P_ALL, 0, &si, WEXITED|WNOHANG|WNOWAIT) < 0) {
++
++                    if (errno == ECHILD)
++                            break;
++
++                    if (errno == EINTR)
++                            continue;
++
++                    return -errno;
++            }
++
++            if (si.si_pid <= 0)
++                    break;
++
++            if (si.si_code == CLD_EXITED || si.si_code == CLD_KILLED || si.si_code == CLD_DUMPED) {
++                    _cleanup_free_ char *name = NULL;
++                    Unit *u;
++
++                    get_process_comm(si.si_pid, &name);
++
++                    log_debug("Child %lu (%s) died (code=%s, status=%i/%s)",
++                              (long unsigned) si.si_pid, strna(name),
++                              sigchld_code_to_string(si.si_code),
++                              si.si_status,
++                              strna(si.si_code == CLD_EXITED
++                                    ? exit_status_to_string(si.si_status, EXIT_STATUS_FULL)
++                                    : signal_to_string(si.si_status)));
++
++                    /* And now figure out the unit this belongs
++                     * to, it might be multiple... */
++                    u = manager_get_unit_by_pid(m, si.si_pid);
++                    if (u)
++                            invoke_sigchld_event(m, u, &si);
++                    u = hashmap_get(m->watch_pids1, LONG_TO_PTR(si.si_pid));
++                    if (u)
++                            invoke_sigchld_event(m, u, &si);
++                    u = hashmap_get(m->watch_pids2, LONG_TO_PTR(si.si_pid));
++                    if (u)
++                            invoke_sigchld_event(m, u, &si);
++            }
++
++            /* And now, we actually reap the zombie. */
++            if (waitid(P_PID, si.si_pid, &si, WEXITED) < 0) {
++                    if (errno == EINTR)
++                            continue;
++
++                    return -errno;
++            }
++    }
++
++    return 0;
+ }
+ 
+ static int manager_start_target(Manager *m, const char *name, JobMode mode) {
+diff --git a/src/core/manager.h b/src/core/manager.h
+index ee42c5e..0133ea5 100644
+--- a/src/core/manager.h
++++ b/src/core/manager.h
+@@ -125,7 +125,14 @@ struct Manager {
+         /* Units that should be realized */
+         LIST_HEAD(Unit, cgroup_queue);
+ 
+-        Hashmap *watch_pids;  /* pid => Unit object n:1 */
++        /* We use two hash tables here, since the same PID might be
++         * watched by two different units: once the unit that forked
++         * it off, and possibly a different unit to which it was
++         * joined as cgroup member. Since we know that it is either
++         * one or two units for each PID we just use to hashmaps
++         * here. */
++        Hashmap *watch_pids1;  /* pid => Unit object n:1 */
++        Hashmap *watch_pids2;  /* pid => Unit object n:1 */
+ 
+         char *notify_socket;
+ 
+diff --git a/src/core/unit.c b/src/core/unit.c
+index 0332094..a510eb2 100644
+--- a/src/core/unit.c
++++ b/src/core/unit.c
+@@ -1665,16 +1665,27 @@ int unit_watch_pid(Unit *u, pid_t pid) {
+         assert(u);
+         assert(pid >= 1);
+ 
++        /* Watch a specific PID. We only support one or two units
++         * watching each PID for now, not more. */
++
++        r = hashmap_ensure_allocated(&u->manager->watch_pids1, trivial_hash_func, trivial_compare_func);
++        if (r < 0)
++                return r;
++
+         r = set_ensure_allocated(&u->pids, trivial_hash_func, trivial_compare_func);
+         if (r < 0)
+                 return r;
+ 
+-        /* Watch a specific PID. We only support one unit watching
+-         * each PID for now. */
++        r = hashmap_put(u->manager->watch_pids1, LONG_TO_PTR(pid), u);
++        if (r == -EEXIST) {
++                r = hashmap_ensure_allocated(&u->manager->watch_pids2, trivial_hash_func, trivial_compare_func);
++                if (r < 0)
++                        return r;
+ 
+-        r = set_put(u->pids, LONG_TO_PTR(pid));
++                r = hashmap_put(u->manager->watch_pids2, LONG_TO_PTR(pid), u);
++        }
+ 
+-        q = hashmap_put(u->manager->watch_pids, LONG_TO_PTR(pid), u);
++        q = set_put(u->pids, LONG_TO_PTR(pid));
+         if (q < 0)
+                 return q;
+ 
+@@ -1685,7 +1696,8 @@ void unit_unwatch_pid(Unit *u, pid_t pid) {
+         assert(u);
+         assert(pid >= 1);
+ 
+-        hashmap_remove_value(u->manager->watch_pids, LONG_TO_PTR(pid), u);
++        hashmap_remove_value(u->manager->watch_pids1, LONG_TO_PTR(pid), u);
++        hashmap_remove_value(u->manager->watch_pids2, LONG_TO_PTR(pid), u);
+         set_remove(u->pids, LONG_TO_PTR(pid));
+ }
+ 
+@@ -1758,8 +1770,10 @@ void unit_unwatch_all_pids(Unit *u) {
+ 
+         assert(u);
+ 
+-        SET_FOREACH(e, u->pids, i)
+-                hashmap_remove_value(u->manager->watch_pids, e, u);
++        SET_FOREACH(e, u->pids, i) {
++                hashmap_remove_value(u->manager->watch_pids1, e, u);
++                hashmap_remove_value(u->manager->watch_pids2, e, u);
++        }
+ 
+         set_free(u->pids);
+         u->pids = NULL;
diff --git a/SOURCES/0224-core-correctly-unregister-PIDs-from-PID-hashtables.patch b/SOURCES/0224-core-correctly-unregister-PIDs-from-PID-hashtables.patch
new file mode 100644
index 0000000..19726e6
--- /dev/null
+++ b/SOURCES/0224-core-correctly-unregister-PIDs-from-PID-hashtables.patch
@@ -0,0 +1,97 @@
+From 8581dc72de05227a236b6ff3751c40f1e0be1b2f Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart@poettering.net>
+Date: Thu, 6 Mar 2014 02:19:42 +0100
+Subject: [PATCH] core: correctly unregister PIDs from PID hashtables
+
+Conflicts:
+	src/core/unit.c
+---
+ src/core/unit.c | 41 ++++++++++++++++++-----------------------
+ 1 file changed, 18 insertions(+), 23 deletions(-)
+
+diff --git a/src/core/unit.c b/src/core/unit.c
+index a510eb2..6ee34ec 100644
+--- a/src/core/unit.c
++++ b/src/core/unit.c
+@@ -1668,11 +1668,11 @@ int unit_watch_pid(Unit *u, pid_t pid) {
+         /* Watch a specific PID. We only support one or two units
+          * watching each PID for now, not more. */
+ 
+-        r = hashmap_ensure_allocated(&u->manager->watch_pids1, trivial_hash_func, trivial_compare_func);
++        r = set_ensure_allocated(&u->pids, trivial_hash_func, trivial_compare_func);
+         if (r < 0)
+                 return r;
+ 
+-        r = set_ensure_allocated(&u->pids, trivial_hash_func, trivial_compare_func);
++        r = hashmap_ensure_allocated(&u->manager->watch_pids1, trivial_hash_func, trivial_compare_func);
+         if (r < 0)
+                 return r;
+ 
+@@ -1701,7 +1701,17 @@ void unit_unwatch_pid(Unit *u, pid_t pid) {
+         set_remove(u->pids, LONG_TO_PTR(pid));
+ }
+ 
+-static int watch_pids_in_path(Unit *u, const char *path) {
++void unit_unwatch_all_pids(Unit *u) {
++        assert(u);
++
++        while (!set_isempty(u->pids))
++                unit_unwatch_pid(u, PTR_TO_LONG(set_first(u->pids)));
++
++        set_free(u->pids);
++        u->pids = NULL;
++}
++
++static int unit_watch_pids_in_path(Unit *u, const char *path) {
+         _cleanup_closedir_ DIR *d = NULL;
+         _cleanup_fclose_ FILE *f = NULL;
+         int ret = 0, r;
+@@ -1739,7 +1749,7 @@ static int watch_pids_in_path(Unit *u, const char *path) {
+                         if (!p)
+                                 return -ENOMEM;
+ 
+-                        r = watch_pids_in_path(u, p);
++                        r = unit_watch_pids_in_path(u, p);
+                         if (r < 0 && ret >= 0)
+                                 ret = r;
+                 }
+@@ -1756,27 +1766,12 @@ static int watch_pids_in_path(Unit *u, const char *path) {
+ int unit_watch_all_pids(Unit *u) {
+         assert(u);
+ 
+-        if (!u->cgroup_path)
+-                return -ENOENT;
+-
+         /* Adds all PIDs from our cgroup to the set of PIDs we watch */
+ 
+-        return watch_pids_in_path(u, u->cgroup_path);
+-}
+-
+-void unit_unwatch_all_pids(Unit *u) {
+-        Iterator i;
+-        void *e;
+-
+-        assert(u);
+-
+-        SET_FOREACH(e, u->pids, i) {
+-                hashmap_remove_value(u->manager->watch_pids1, e, u);
+-                hashmap_remove_value(u->manager->watch_pids2, e, u);
+-        }
++        if (!u->cgroup_path)
++                return -ENOENT;
+ 
+-        set_free(u->pids);
+-        u->pids = NULL;
++        return unit_watch_pids_in_path(u, u->cgroup_path);
+ }
+ 
+ void unit_tidy_watch_pids(Unit *u, pid_t except1, pid_t except2) {
+@@ -1794,7 +1789,7 @@ void unit_tidy_watch_pids(Unit *u, pid_t except1, pid_t except2) {
+                         continue;
+ 
+                 if (kill(pid, 0) < 0 && errno == ESRCH)
+-                        set_remove(u->pids, e);
++                        unit_unwatch_pid(u, pid);
+         }
+ }
+ 
diff --git a/SOURCES/0225-logind-uninitialized-timer_fd-is-set-to-1.patch b/SOURCES/0225-logind-uninitialized-timer_fd-is-set-to-1.patch
new file mode 100644
index 0000000..214ad91
--- /dev/null
+++ b/SOURCES/0225-logind-uninitialized-timer_fd-is-set-to-1.patch
@@ -0,0 +1,22 @@
+From 855cfba6fb79066f46f02bbab09d498eda0d7cdd Mon Sep 17 00:00:00 2001
+From: Michal Sekletar <msekleta@redhat.com>
+Date: Thu, 13 Mar 2014 11:16:36 +0100
+Subject: [PATCH] logind: uninitialized timer_fd is set to -1
+
+---
+ src/login/logind-session.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/login/logind-session.c b/src/login/logind-session.c
+index b0e4bf6..730f11d 100644
+--- a/src/login/logind-session.c
++++ b/src/login/logind-session.c
+@@ -657,7 +657,7 @@ static int session_unlink_x11_socket(Session *s) {
+ static void session_close_timer_fd(Session *s) {
+         assert(s);
+ 
+-        if (s->timer_fd <= 0)
++        if (s->timer_fd < 0)
+                 return;
+ 
+         hashmap_remove(s->manager->timer_fds, INT_TO_PTR(s->timer_fd + 1));
diff --git a/SOURCES/0226-logind-add-forgotten-return-statement.patch b/SOURCES/0226-logind-add-forgotten-return-statement.patch
new file mode 100644
index 0000000..dc11357
--- /dev/null
+++ b/SOURCES/0226-logind-add-forgotten-return-statement.patch
@@ -0,0 +1,22 @@
+From bb13793eb734f73c4faba11d4d90077c977ec673 Mon Sep 17 00:00:00 2001
+From: Michal Sekletar <msekleta@redhat.com>
+Date: Thu, 13 Mar 2014 11:18:27 +0100
+Subject: [PATCH] logind: add forgotten return statement
+
+---
+ src/login/logind-session.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/src/login/logind-session.c b/src/login/logind-session.c
+index 730f11d..ece222a 100644
+--- a/src/login/logind-session.c
++++ b/src/login/logind-session.c
+@@ -782,6 +782,8 @@ void session_release(Session *s) {
+                 goto out;
+         }
+ 
++        return;
++
+ out:
+         if (s->timer_fd >= 0) {
+                 close_nointr(s->timer_fd);
diff --git a/SOURCES/0227-core-remove-extra-semicolon-and-make-gcc-shut-up.patch b/SOURCES/0227-core-remove-extra-semicolon-and-make-gcc-shut-up.patch
new file mode 100644
index 0000000..96c3003
--- /dev/null
+++ b/SOURCES/0227-core-remove-extra-semicolon-and-make-gcc-shut-up.patch
@@ -0,0 +1,22 @@
+From dce7f7c81bebf628623aad4a666fef6449294a8e Mon Sep 17 00:00:00 2001
+From: Michal Sekletar <msekleta@redhat.com>
+Date: Thu, 13 Mar 2014 11:25:45 +0100
+Subject: [PATCH] core: remove extra semicolon and make gcc shut up
+
+---
+ src/core/mount.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/core/mount.c b/src/core/mount.c
+index 62ec7fe..3672338 100644
+--- a/src/core/mount.c
++++ b/src/core/mount.c
+@@ -1414,7 +1414,7 @@ static int mount_add_one(
+                 bool set_flags) {
+         int r;
+         Unit *u;
+-        bool delete, changed = false;;
++        bool delete, changed = false;
+         char *e, *w = NULL, *o = NULL, *f = NULL;
+         MountParameters *p;
+         bool load_extras = false;
diff --git a/SOURCES/0228-core-fix-detection-of-dead-processes.patch b/SOURCES/0228-core-fix-detection-of-dead-processes.patch
new file mode 100644
index 0000000..9c35a9b
--- /dev/null
+++ b/SOURCES/0228-core-fix-detection-of-dead-processes.patch
@@ -0,0 +1,87 @@
+From f04488d2842544de263e245ee1a21e789ec818a8 Mon Sep 17 00:00:00 2001
+From: Yuxuan Shui <yshuiv7@gmail.com>
+Date: Sat, 15 Feb 2014 02:38:50 +0800
+Subject: [PATCH] core: fix detection of dead processes
+
+Commit 5ba6985b moves the UNIT_VTABLE(u)->sigchld_event before systemd
+actually reaps the zombie. Which leads to service_load_pid_file accepting
+zombie as a valid pid.
+
+This fixes timeouts like:
+[ 2746.602243] systemd[1]: chronyd.service stop-sigterm timed out. Killing.
+[ 2836.852545] systemd[1]: chronyd.service still around after SIGKILL. Ignoring.
+[ 2927.102187] systemd[1]: chronyd.service stop-final-sigterm timed out. Killing.
+[ 3017.352560] systemd[1]: chronyd.service still around after final SIGKILL. Entering failed mode.
+---
+ src/core/service.c |  8 ++++++++
+ src/shared/util.c  | 25 +++++++++++++++++++++++++
+ src/shared/util.h  |  1 +
+ 3 files changed, 34 insertions(+)
+
+diff --git a/src/core/service.c b/src/core/service.c
+index dff5286..3eacf3b 100644
+--- a/src/core/service.c
++++ b/src/core/service.c
+@@ -1429,6 +1429,14 @@ static int service_load_pid_file(Service *s, bool may_warn) {
+                 return -ESRCH;
+         }
+ 
++        if (get_process_state(pid) == 'Z') {
++                if (may_warn)
++                        log_info_unit(UNIT(s)->id,
++                                      "PID "PID_FMT" read from file %s is a zombie.",
++                                      pid, s->pid_file);
++                return -ESRCH;
++        }
++
+         if (s->main_pid_known) {
+                 if (pid == s->main_pid)
+                         return 0;
+diff --git a/src/shared/util.c b/src/shared/util.c
+index 2086847..090a204 100644
+--- a/src/shared/util.c
++++ b/src/shared/util.c
+@@ -558,6 +558,31 @@ char *truncate_nl(char *s) {
+         return s;
+ }
+ 
++int get_process_state(pid_t pid) {
++        const char *p;
++        char state;
++        int r;
++        _cleanup_free_ char *line = NULL;
++
++        assert(pid >= 0);
++
++        p = procfs_file_alloca(pid, "stat");
++        r = read_one_line_file(p, &line);
++        if (r < 0)
++                return r;
++
++        p = strrchr(line, ')');
++        if (!p)
++                return -EIO;
++
++        p++;
++
++        if (sscanf(p, " %c", &state) != 1)
++                return -EIO;
++
++        return (unsigned char) state;
++}
++
+ int get_process_comm(pid_t pid, char **name) {
+         const char *p;
+ 
+diff --git a/src/shared/util.h b/src/shared/util.h
+index 222abe0..1d60687 100644
+--- a/src/shared/util.h
++++ b/src/shared/util.h
+@@ -215,6 +215,7 @@ char *file_in_same_dir(const char *path, const char *filename);
+ 
+ int rmdir_parents(const char *path, const char *stop);
+ 
++char get_process_state(pid_t pid);
+ int get_process_comm(pid_t pid, char **name);
+ int get_process_cmdline(pid_t pid, size_t max_length, bool comm_fallback, char **line);
+ int get_process_exe(pid_t pid, char **name);
diff --git a/SOURCES/0229-Fix-prototype-of-get_process_state.patch b/SOURCES/0229-Fix-prototype-of-get_process_state.patch
new file mode 100644
index 0000000..571ba22
--- /dev/null
+++ b/SOURCES/0229-Fix-prototype-of-get_process_state.patch
@@ -0,0 +1,22 @@
+From 9ada721f27bbf373f407b40de1ae558397e4c851 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Fri, 14 Feb 2014 23:04:50 -0500
+Subject: [PATCH] Fix prototype of get_process_state
+
+---
+ src/shared/util.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/shared/util.h b/src/shared/util.h
+index 1d60687..3a4bc98 100644
+--- a/src/shared/util.h
++++ b/src/shared/util.h
+@@ -215,7 +215,7 @@ char *file_in_same_dir(const char *path, const char *filename);
+ 
+ int rmdir_parents(const char *path, const char *stop);
+ 
+-char get_process_state(pid_t pid);
++int get_process_state(pid_t pid);
+ int get_process_comm(pid_t pid, char **name);
+ int get_process_cmdline(pid_t pid, size_t max_length, bool comm_fallback, char **line);
+ int get_process_exe(pid_t pid, char **name);
diff --git a/SOURCES/0230-core-check-for-return-value-from-get_process_state.patch b/SOURCES/0230-core-check-for-return-value-from-get_process_state.patch
new file mode 100644
index 0000000..411e573
--- /dev/null
+++ b/SOURCES/0230-core-check-for-return-value-from-get_process_state.patch
@@ -0,0 +1,35 @@
+From 54461c902d71e43fd5cc0010e0352903685c3974 Mon Sep 17 00:00:00 2001
+From: Yuxuan Shui <yshuiv7@gmail.com>
+Date: Sat, 15 Feb 2014 13:20:55 +0800
+Subject: [PATCH] core: check for return value from get_process_state
+
+Fix for commit e10c9985bb.
+---
+ src/core/service.c | 12 +++++++++---
+ 1 file changed, 9 insertions(+), 3 deletions(-)
+
+diff --git a/src/core/service.c b/src/core/service.c
+index 3eacf3b..f6fdbbc 100644
+--- a/src/core/service.c
++++ b/src/core/service.c
+@@ -1429,11 +1429,17 @@ static int service_load_pid_file(Service *s, bool may_warn) {
+                 return -ESRCH;
+         }
+ 
+-        if (get_process_state(pid) == 'Z') {
++        r = get_process_state(pid);
++        if (r < 0) {
++                if (may_warn)
++                        log_info_unit(UNIT(s)->id, "Failed to read /proc/%d/stat: %s",
++                                      pid, strerror(-r));
++                return r;
++        } else if (r == 'Z') {
+                 if (may_warn)
+                         log_info_unit(UNIT(s)->id,
+-                                      "PID "PID_FMT" read from file %s is a zombie.",
+-                                      pid, s->pid_file);
++                                      "PID %lu read from file %s is a zombie.",
++                                      (unsigned long) pid, s->pid_file);
+                 return -ESRCH;
+         }
+ 
diff --git a/SOURCES/0231-unit-add-waiting-jobs-to-run-queue-in-unit_coldplug.patch b/SOURCES/0231-unit-add-waiting-jobs-to-run-queue-in-unit_coldplug.patch
new file mode 100644
index 0000000..d412557
--- /dev/null
+++ b/SOURCES/0231-unit-add-waiting-jobs-to-run-queue-in-unit_coldplug.patch
@@ -0,0 +1,29 @@
+From 95f08deefa7c0611854d2831960e77be9a814969 Mon Sep 17 00:00:00 2001
+From: Michal Sekletar <msekleta@redhat.com>
+Date: Wed, 2 Apr 2014 15:13:18 +0200
+Subject: [PATCH] unit: add waiting jobs to run queue in unit_coldplug
+
+When we have job installed and added to run queue for service which is still in
+dead state and systemd initiates reload then after reload we never add
+deserialized job to the run queue again. This is caused by check in
+service_coldplug() where we check if deserialized state is something else than
+dead state, which is not the case thus we never call service_set_state() and
+finally unit_notify() where we would have added job to the run queue.
+---
+ src/core/unit.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/src/core/unit.c b/src/core/unit.c
+index 6ee34ec..a4e6c18 100644
+--- a/src/core/unit.c
++++ b/src/core/unit.c
+@@ -2539,6 +2539,9 @@ int unit_coldplug(Unit *u) {
+                 r = job_coldplug(u->job);
+                 if (r < 0)
+                         return r;
++
++                if (u->job->state == JOB_WAITING)
++                        job_add_to_run_queue(u->job);
+         } else if (u->deserialized_job >= 0) {
+                 /* legacy */
+                 r = manager_add_job(u->manager, u->deserialized_job, u, JOB_IGNORE_REQUIREMENTS, false, NULL, NULL);
diff --git a/SOURCES/0232-logind-session-save-stopping-flag.patch b/SOURCES/0232-logind-session-save-stopping-flag.patch
new file mode 100644
index 0000000..e19886b
--- /dev/null
+++ b/SOURCES/0232-logind-session-save-stopping-flag.patch
@@ -0,0 +1,60 @@
+From bd9127d97ae66b547a6e3a89a70b5045d706b68c Mon Sep 17 00:00:00 2001
+From: Lukas Nykryn <lnykryn@redhat.com>
+Date: Wed, 2 Apr 2014 14:41:26 +0200
+Subject: [PATCH] logind-session: save stopping flag
+
+---
+ src/login/logind-session.c | 15 ++++++++++++---
+ 1 file changed, 12 insertions(+), 3 deletions(-)
+
+diff --git a/src/login/logind-session.c b/src/login/logind-session.c
+index ece222a..0fa290b 100644
+--- a/src/login/logind-session.c
++++ b/src/login/logind-session.c
+@@ -187,12 +187,14 @@ int session_save(Session *s) {
+                 "USER=%s\n"
+                 "ACTIVE=%i\n"
+                 "STATE=%s\n"
+-                "REMOTE=%i\n",
++                "REMOTE=%i\n"
++                "STOPPING=%i\n",
+                 (unsigned long) s->user->uid,
+                 s->user->name,
+                 session_is_active(s),
+                 session_state_to_string(session_get_state(s)),
+-                s->remote);
++                s->remote,
++                s->stopping);
+ 
+         if (s->type >= 0)
+                 fprintf(f, "TYPE=%s\n", session_type_to_string(s->type));
+@@ -267,7 +269,8 @@ int session_load(Session *s) {
+                 *class = NULL,
+                 *uid = NULL,
+                 *realtime = NULL,
+-                *monotonic = NULL;
++                *monotonic = NULL,
++                *stopping = NULL;
+ 
+         int k, r;
+ 
+@@ -291,6 +294,7 @@ int session_load(Session *s) {
+                            "UID",            &uid,
+                            "REALTIME",       &realtime,
+                            "MONOTONIC",      &monotonic,
++                           "STOPPING",       &stopping,
+                            NULL);
+ 
+         if (r < 0) {
+@@ -391,6 +395,11 @@ int session_load(Session *s) {
+                         s->timestamp.monotonic = l;
+         }
+ 
++        if (stopping) {
++                k = parse_boolean(stopping);
++                if (k >= 0)
++                        s->stopping = k;
++        }
+         return r;
+ }
+ 
diff --git a/SOURCES/60-alias-kmsg.rules b/SOURCES/60-alias-kmsg.rules
new file mode 100644
index 0000000..9c7236a
--- /dev/null
+++ b/SOURCES/60-alias-kmsg.rules
@@ -0,0 +1,10 @@
+SUBSYSTEM!="block", GOTO="log_end"
+KERNEL=="loop*|ram*", GOTO="log_end"
+ACTION=="remove", GOTO="log_end"
+ENV{DM_UDEV_DISABLE_OTHER_RULES_FLAG}=="1", GOTO="log_end"
+ENV{DM_UDEV_DISABLE_DISK_RULES_FLAG}=="1", GOTO="log_end"
+
+IMPORT{cmdline}="udev.alias"
+ENV{udev.alias}=="1", RUN+="/bin/sh -c 'echo udev-alias: $name \($links\) > /dev/kmsg'"
+
+LABEL="log_end"
diff --git a/SOURCES/85-display-manager.preset b/SOURCES/85-display-manager.preset
deleted file mode 100644
index c1d3069..0000000
--- a/SOURCES/85-display-manager.preset
+++ /dev/null
@@ -1,10 +0,0 @@
-# We enable all display managers by default. Since only one can
-# actually be enabled at the same time the one which is installed
-# first wins
-
-enable gdm.service
-enable lightdm.service
-enable slim.service
-enable lxdm.service
-enable kdm.service
-enable xdm.service
diff --git a/SOURCES/90-default.preset b/SOURCES/90-default.preset
deleted file mode 100644
index 41ec976..0000000
--- a/SOURCES/90-default.preset
+++ /dev/null
@@ -1,106 +0,0 @@
-# Also see:
-# https://fedoraproject.org/wiki/Starting_services_by_default
-
-# systemd
-enable remote-fs.target
-enable getty@tty1.service
-enable systemd-readahead-replay.service
-enable systemd-readahead-collect.service
-
-# System stuff
-enable sshd.service
-enable atd.*
-enable crond.*
-enable chronyd.service
-enable rpcbind.*
-enable NetworkManager.service
-enable NetworkManager-dispatcher.service
-enable ModemManager.service
-enable auditd.service
-enable restorecond.service
-enable bluetooth.*
-enable avahi-daemon.*
-enable cups.*
-
-# The various syslog implementations
-enable rsyslog.*
-enable syslog-ng.*
-enable sysklogd.*
-
-# Network facing
-enable firewalld.service
-enable libvirtd.service
-enable xinetd.service
-enable ladvd.service
-
-# Storage
-enable multipathd.service
-enable libstoragemgmt.service
-enable lvm2-monitor.*
-enable lvm2-lvmetad.*
-enable dm-event.*
-enable dmraid-activation.service
-
-# https://bugzilla.redhat.com/show_bug.cgi?id=855372
-enable mdmonitor.service
-enable mdmonitor-takeover.service
-
-# https://bugzilla.redhat.com/show_bug.cgi?id=876237
-enable spice-vdagentd.service
-
-# https://bugzilla.redhat.com/show_bug.cgi?id=885406
-enable qemu-guest-agent.service
-
-# https://bugzilla.redhat.com/show_bug.cgi?id=928726
-enable dnf-makecache.timer
-
-# https://bugzilla.redhat.com/show_bug.cgi?id=929403
-enable initial-setup-graphical.service
-enable initial-setup-text.service
-
-# https://bugzilla.redhat.com/show_bug.cgi?id=957135
-enable vmtoolsd.service
-
-#https://bugzilla.redhat.com/show_bug.cgi?id=995987
-enable kdump.service
-
-#https://bugzilla.redhat.com/show_bug.cgi?id=1009970
-enable tuned.service
-
-# Hardware
-enable gpm.*
-enable gpsd.*
-enable irqbalance.service
-enable lm_sensors.service
-enable mcelog.*
-enable acpid.*
-enable smartd.service
-enable pcscd.socket
-enable rngd.service
-
-# Other stuff
-enable abrtd.service
-enable abrt-ccpp.service
-enable abrt-oops.service
-enable abrt-xorg.service
-enable abrt-vmcore.service
-enable lttng-sessiond.service
-enable ksm.service
-enable ksmtuned.service
-enable rootfs-resize.service
-enable sysstat.service
-enable uuidd.service
-enable xendomains.service
-enable xenstored.service
-enable xenconsoled.service
-enable hypervkvpd.service
-enable hypervvssd.service
-
-# Desktop stuff
-enable accounts-daemon.service
-enable rtkit-daemon.service
-enable upower.service
-enable udisks2.service
-enable polkit.service
-enable packagekit-offline-update.service
-enable PackageKit.service
diff --git a/SOURCES/rc.local b/SOURCES/rc.local
index 87f017f..8e633ff 100644
--- a/SOURCES/rc.local
+++ b/SOURCES/rc.local
@@ -10,4 +10,4 @@
 # Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
 # that this script will be executed during boot.
 
-exit 0
+touch /var/lock/subsys/local
diff --git a/SPECS/systemd.spec b/SPECS/systemd.spec
index b0f4033..67dad2f 100644
--- a/SPECS/systemd.spec
+++ b/SPECS/systemd.spec
@@ -10,124 +10,259 @@
 
 Name:           systemd
 Url:            http://www.freedesktop.org/wiki/Software/systemd
-Version:        207
-Release:        8%{?dist}
+Version:        208
+Release:        11%{?dist}
 # For a breakdown of the licensing, see README
 License:        LGPLv2+ and MIT and GPLv2+
 Summary:        A System and Service Manager
 
 Source0:        http://www.freedesktop.org/software/systemd/%{name}-%{version}.tar.xz
-
-# Fedora's default preset policy
-Source1:        90-default.preset
-Source7:        99-default-disable.preset
-Source5:        85-display-manager.preset
-# Feodora's SysV convert script. meh.
+# RHEL7 default preset policy
+Source1:        99-default-disable.preset
+# SysV convert script.
 Source2:        systemd-sysv-convert
 # Stop-gap, just to ensure things work fine with rsyslog without having to change the package right-away
-Source4:        listen.conf
+Source3:        listen.conf
 # Prevent accidental removal of the systemd package
-Source6:        yum-protect-systemd.conf
+Source4:        yum-protect-systemd.conf
 # ship /etc/rc.d/rc.local https://bugzilla.redhat.com/show_bug.cgi?id=968401
-Source8:        rc.local
-
+Source5:        rc.local
+#https://bugzilla.redhat.com/show_bug.cgi?id=1032711
+Source6:        60-alias-kmsg.rules
 
 # RHEL-specific:
-Patch0001: 0001-RHEL-units-add-Install-section-to-tmp.mount.patch
-Patch0002: 0002-kernel-install-add-fedora-specific-callouts-to-new-k.patch
-Patch0003: 0003-core-cgroup-first-print-then-free.patch
-Patch0004: 0004-swap-fix-reverse-dependencies.patch
-Patch0005: 0005-update-TODO.patch
-Patch0006: 0006-cryptsetup-generator-don-t-create-tmp-swap-units.patch
-Patch0007: 0007-cryptsetup-generator-allow-specifying-options-in-pro.patch
-Patch0008: 0008-automount-rename-repeat_unmont-to-repeat_unmount.patch
-Patch0009: 0009-cgroup-add-the-missing-setting-of-variable-s-value.patch
-Patch0010: 0010-cgroup-correct-the-log-information.patch
-Patch0011: 0011-cgroup-fix-incorrectly-setting-memory-cgroup.patch
-Patch0012: 0012-random-seed-we-should-return-errno-of-failed-loop_wr.patch
-Patch0013: 0013-update-TODO.patch
-Patch0014: 0014-libudev-fix-move_later-comparison.patch
-Patch0015: 0015-man-document-luks.options-kernel-commandline.patch
-Patch0016: 0016-keymap-remove-some-commented-out-lines.patch
-Patch0017: 0017-Advertise-hibernation-only-if-there-s-enough-free-sw.patch
-Patch0018: 0018-README-add-SCSI-BSG-option.patch
-Patch0019: 0019-swap-create-.wants-symlink-to-auto-swap-devices.patch
-Patch0020: 0020-cgroup-add-missing-equals-for-BlockIOWeight.patch
-Patch0021: 0021-Assume-that-proc-meminfo-can-be-missing.patch
-Patch0022: 0022-transaction.c-do-not-point-users-to-logs-when-unit-n.patch
-Patch0023: 0023-Verify-validity-of-session-name-when-received-from-o.patch
-Patch0024: 0024-udev-rules-avoid-erroring-on-trailing-whitespace.patch
-Patch0025: 0025-keymap-Add-Samsung-Series-5-Ultra.patch
-Patch0026: 0026-login-fix-login_is_valid-test.patch
-Patch0027: 0027-polkit-Avoid-race-condition-in-scraping-proc.patch
-Patch0028: 0028-core-whenever-a-new-PID-is-passed-to-us-make-sure-we.patch
-Patch0029: 0029-remove-user-.service.patch
-Patch0030: 0030-cgroup-always-enable-memory.use_hierarchy-for-all-cg.patch
-Patch0031: 0031-logind-return-EINVAL-when-PID-is-wrong.patch
-Patch0032: 0032-core-drop-some-out-of-date-references-to-cgroup-sett.patch
-Patch0033: 0033-man-explain-NAME-in-systemctl-man-page.patch
-Patch0034: 0034-journald-accept-EPOLLERR-from-dev-kmsg.patch
-Patch0035: 0035-journald-avoid-NSS-in-journald.patch
-Patch0036: 0036-libudev-add-missing-global-to-symbol-export.patch
-Patch0037: 0037-gpt-auto-generator-do-not-assume-that-dev-block-u-u-.patch
-Patch0038: 0038-logind-put-correct-user-object-paths-in-introspectio.patch
-Patch0039: 0039-Fix-obsolete-references-to-systemd-random-seed-load..patch
-Patch0040: 0040-cgroup-always-enable-memory.use_hierarchy-for-all-cg.patch
-Patch0041: 0041-journalctl-1-s-adm-systemd-journal.patch
-Patch0042: 0042-cgroup-if-we-do-a-cgroup-operation-then-do-something.patch
-Patch0043: 0043-core-rework-how-we-match-mount-units-against-each-ot.patch
-Patch0044: 0044-logind-never-consider-a-closing-session-relevant-for.patch
-Patch0045: 0045-man-drop-references-to-cgroup-wher-appropriate.patch
-Patch0046: 0046-systemctl-make-sure-set-property-mangles-unit-names.patch
-Patch0047: 0047-dbus-fix-introspection-for-TimerSlackNSec.patch
-Patch0048: 0048-swap-properly-expose-timeout-property-on-the-bus.patch
-Patch0049: 0049-build-sys-restore-detection-of-sphinx.patch
-Patch0050: 0050-util-add-macro-for-iterating-through-all-prefixes-of.patch
-Patch0051: 0051-util-properly-handle-the-root-dir-in-PATH_FOREACH_PR.patch
-Patch0052: 0052-cgroup-get-rid-of-MemorySoftLimit.patch
-Patch0053: 0053-set-IgnoreOnIsolate-true-for-systemd-cryptsetup-.ser.patch
-Patch0054: 0054-main-don-t-free-fds-array-twice.patch
-Patch0055: 0055-local-fix-memory-leak-when-putting-together-locale-s.patch
-Patch0056: 0056-hashmap-size-hashmap-bucket-array-dynamically.patch
-Patch0057: 0057-smack-setup-fix-path-to-Smack-CIPSO-mappings.patch
-Patch0058: 0058-fix-lingering-references-to-var-lib-backlight-random.patch
-Patch0059: 0059-cryptsetup-fix-OOM-handling-when-parsing-mount-optio.patch
-Patch0060: 0060-journald-add-missing-error-check.patch
-Patch0061: 0061-bus-fix-potentially-uninitialized-memory-access.patch
-Patch0062: 0062-dbus-fix-return-value-of-dispatch_rqueue.patch
-Patch0063: 0063-modules-load-fix-error-handling.patch
-Patch0064: 0064-efi-never-call-qsort-on-potentially-NULL-arrays.patch
-Patch0065: 0065-strv-don-t-access-potentially-NULL-string-arrays.patch
-Patch0066: 0066-mkdir-pass-a-proper-function-pointer-to-mkdir_safe_i.patch
-Patch0067: 0067-tmpfiles.d-include-setgid-perms-for-run-log-journal.patch
-Patch0068: 0068-gpt-auto-generator-exit-immediately-if-in-container.patch
-Patch0069: 0069-systemd-order-remote-mounts-from-mountinfo-before-re.patch
-Patch0070: 0070-manager-when-verifying-whether-clients-may-change-en.patch
-Patch0071: 0071-mount-check-for-NULL-before-reading-pm-what.patch
-Patch0072: 0072-core-do-not-add-what-to-RequiresMountsFor-for-networ.patch
-Patch0073: 0073-systemd-serialize-deserialize-forbid_restart-value.patch
-Patch0074: 0074-core-unify-the-way-we-denote-serialization-attribute.patch
-Patch0075: 0075-journald-fix-minor-memory-leak.patch
-Patch0076: 0076-journald-remove-rotated-file-from-hashmap-when-rotat.patch
-Patch0077: 0077-udevadm.xml-document-resolve-names-option-for-test.patch
-Patch0078: 0078-dbus-common-avoid-leak-in-error-path.patch
-Patch0079: 0079-drop-ins-check-return-value.patch
-Patch0080: 0080-shared-util-Fix-glob_extend-argument.patch
-Patch0081: 0081-Fix-for-SIGSEGV-in-systemd-bootchart-on-short-living.patch
-Patch0082: 0082-man-document-the-b-special-boot-option.patch
-Patch0083: 0083-tmpfiles-log-unaccessible-FUSE-mount-points-only-as-.patch
-Patch0084: 0084-move-utf8-functions-from-libudev-private.h-to-utf8.h.patch
-Patch0085: 0085-Use-udev_encode_string-in-fstab_node_to_udev_node.patch
-Patch0086: 0086-Fix-buffer-overrun-when-enumerating-files.patch
-Patch0087: 0087-shared-utf8-merge-implementations-remove-cruft.patch
-Patch0088: 0088-device-nodes-move-device-node-specific-code-to-own-f.patch
-Patch0089: 0089-shared-util-fix-off-by-one-error-in-tag_to_udev_node.patch
-Patch0090: 0090-udev-path_id-fix-by-path-link-generation-for-scm-dev.patch
-Patch0091: 0091-hashmap-randomize-hash-functions-a-bit.patch
-Patch0092: 0092-Configurable-Timeouts-Restarts-default-values.patch
-Patch0093: 0093-manager-configurable-StartLimit-default-values.patch
-Patch0094: 0094-sysctl-bring-back-etc-sysctl.conf.patch
-Patch0095: 0095-tmpfiles-add-a-new-m-line-type-that-adjusts-user-gro.patch
+Patch0001: 0001-units-add-Install-section-to-tmp.mount.patch
+Patch0002: 0002-man-explain-NAME-in-systemctl-man-page.patch
+Patch0003: 0003-fix-lingering-references-to-var-lib-backlight-random.patch
+Patch0004: 0004-cryptsetup-fix-OOM-handling-when-parsing-mount-optio.patch
+Patch0005: 0005-journald-add-missing-error-check.patch
+Patch0006: 0006-bus-fix-potentially-uninitialized-memory-access.patch
+Patch0007: 0007-dbus-fix-return-value-of-dispatch_rqueue.patch
+Patch0008: 0008-modules-load-fix-error-handling.patch
+Patch0009: 0009-efi-never-call-qsort-on-potentially-NULL-arrays.patch
+Patch0010: 0010-strv-don-t-access-potentially-NULL-string-arrays.patch
+Patch0011: 0011-mkdir-pass-a-proper-function-pointer-to-mkdir_safe_i.patch
+Patch0012: 0012-tmpfiles.d-include-setgid-perms-for-run-log-journal.patch
+Patch0013: 0013-gpt-auto-generator-exit-immediately-if-in-container.patch
+Patch0014: 0014-systemd-order-remote-mounts-from-mountinfo-before-re.patch
+Patch0015: 0015-manager-when-verifying-whether-clients-may-change-en.patch
+Patch0016: 0016-mount-check-for-NULL-before-reading-pm-what.patch
+Patch0017: 0017-core-do-not-add-what-to-RequiresMountsFor-for-networ.patch
+Patch0018: 0018-systemd-serialize-deserialize-forbid_restart-value.patch
+Patch0019: 0019-core-unify-the-way-we-denote-serialization-attribute.patch
+Patch0020: 0020-journald-fix-minor-memory-leak.patch
+Patch0021: 0021-journald-remove-rotated-file-from-hashmap-when-rotat.patch
+Patch0022: 0022-udevadm.xml-document-resolve-names-option-for-test.patch
+Patch0023: 0023-dbus-common-avoid-leak-in-error-path.patch
+Patch0024: 0024-drop-ins-check-return-value.patch
+Patch0025: 0025-shared-util-Fix-glob_extend-argument.patch
+Patch0026: 0026-Fix-for-SIGSEGV-in-systemd-bootchart-on-short-living.patch
+Patch0027: 0027-man-document-the-b-special-boot-option.patch
+Patch0028: 0028-tmpfiles-log-unaccessible-FUSE-mount-points-only-as-.patch
+Patch0029: 0029-shared-util-fix-off-by-one-error-in-tag_to_udev_node.patch
+Patch0030: 0030-Configurable-Timeouts-Restarts-default-values.patch
+Patch0031: 0031-manager-configurable-StartLimit-default-values.patch
+Patch0032: 0032-sysctl-bring-back-etc-sysctl.conf.patch
+Patch0033: 0033-systemd-treat-reload-failure-as-failure.patch
+Patch0034: 0034-journal-when-appending-to-journal-file-allocate-larg.patch
+Patch0035: 0035-journal-optimize-bisection-logic-a-bit-by-caching-th.patch
+Patch0036: 0036-journal-fix-iteration-when-we-go-backwards-from-the-.patch
+Patch0037: 0037-journal-allow-journal_file_copy_entry-to-work-on-non.patch
+Patch0038: 0038-journal-simplify-pre-allocation-logic.patch
+Patch0039: 0039-journald-mention-how-long-we-needed-to-flush-to-var-.patch
+Patch0040: 0040-Never-call-qsort-on-potentially-NULL-arrays.patch
+Patch0041: 0041-localed-match-converted-keymaps-before-legacy.patch
+Patch0042: 0042-core-socket-fix-SO_REUSEPORT.patch
+Patch0043: 0043-activate-fix-crash-when-s-is-passed.patch
+Patch0044: 0044-systemd-python-fix-booted-and-add-two-functions-to-d.patch
+Patch0045: 0045-util.c-check-if-return-value-from-ttyname_r-is-0-ins.patch
+Patch0046: 0046-activate-mention-E-in-the-help-text.patch
+Patch0047: 0047-docs-remove-unneeded-the-s-in-gudev-docs.patch
+Patch0048: 0048-man-explicitly-say-when-multiple-units-can-be-specif.patch
+Patch0049: 0049-util-fix-handling-of-trailing-whitespace-in-split_qu.patch
+Patch0050: 0050-man-Improve-the-description-of-parameter-X-in-tmpfil.patch
+Patch0051: 0051-coredumpctl-in-case-of-error-free-pattern-after-prin.patch
+Patch0052: 0052-udev-net_id-Introduce-predictable-network-names-for-.patch
+Patch0053: 0053-tmpfiles-don-t-allow-label_fix-to-print-ENOENT-when-.patch
+Patch0054: 0054-delta-ensure-that-d_type-will-be-set-on-every-fs.patch
+Patch0055: 0055-shell-completion-dump-has-moved-to-systemd-analyze.patch
+Patch0056: 0056-shell-completion-remove-load-from-systemctl.patch
+Patch0057: 0057-Fix-SELinux-check-for-transient-units.-1008864.patch
+Patch0058: 0058-acpi-fptd-fix-memory-leak-in-acpi_get_boot_usec.patch
+Patch0059: 0059-acpi-make-sure-we-never-free-an-uninitialized-pointe.patch
+Patch0060: 0060-systemctl-fix-name-mangling-for-sysv-units.patch
+Patch0061: 0061-execute-more-debugging-messages.patch
+Patch0062: 0062-logind-fix-bus-introspection-data-for-TakeControl.patch
+Patch0063: 0063-utf8-fix-utf8_is_printable.patch
+Patch0064: 0064-keymap-Fix-Samsung-900X-34-C.patch
+Patch0065: 0065-do-not-accept-garbage-from-acpi-firmware-performance.patch
+Patch0066: 0066-login-fix-invalid-free-in-sd_session_get_vt.patch
+Patch0067: 0067-login-make-sd_session_get_vt-actually-work.patch
+Patch0068: 0068-Make-sure-that-we-don-t-dereference-NULL.patch
+Patch0069: 0069-gitignore-ignore-clang-analyze-output.patch
+Patch0070: 0070-man-add-more-markup-to-udevadm-8.patch
+Patch0071: 0071-Fix-bad-assert-in-show_pid_array.patch
+Patch0072: 0072-Never-call-qsort-on-potentially-NULL-arrays.patch
+Patch0073: 0073-rules-expose-loop-block-devices-to-systemd.patch
+Patch0074: 0074-rules-don-t-limit-some-of-the-rules-to-the-add-actio.patch
+Patch0075: 0075-hwdb-update.patch
+Patch0076: 0076-rules-remove-pointless-MODE-settings.patch
+Patch0077: 0077-catalog-remove-links-to-non-existent-wiki-pages.patch
+Patch0078: 0078-udev-builtin-path_id-add-support-for-bcma-bus.patch
+Patch0079: 0079-libudev-default-log_priority-to-INFO.patch
+Patch0080: 0080-nspawn-only-pass-in-slice-setting-if-it-is-set.patch
+Patch0081: 0081-zsh-completion-add-systemd-run.patch
+Patch0082: 0082-systemctl-fix-typo-in-help-text.patch
+Patch0083: 0083-detect_virtualization-returns-NULL-pass-empty-string.patch
+Patch0084: 0084-udev-builtin-keyboard-Fix-large-scan-codes-on-32-bit.patch
+Patch0085: 0085-nspawn-log-out-of-memory-errors.patch
+Patch0086: 0086-man-fix-typo.patch
+Patch0087: 0087-man-do-not-use-term-in-para.patch
+Patch0088: 0088-shutdown-trim-the-cgroup-tree-on-loop-iteration.patch
+Patch0089: 0089-run-support-system-to-match-other-commands-even-if-r.patch
+Patch0090: 0090-acpi-fpdt-break-on-zero-or-negative-length-read.patch
+Patch0091: 0091-man-add-rationale-into-systemd-halt-8.patch
+Patch0092: 0092-systemd-python-convert-keyword-value-to-string.patch
+Patch0093: 0093-Make-hibernation-test-work-for-swap-files.patch
+Patch0094: 0094-man-add-docs-for-sd_is_special-and-some-man-page-sym.patch
+Patch0095: 0095-systemctl-return-r-instead-of-always-returning-0.patch
+Patch0096: 0096-journal-fix-minor-memory-leak.patch
+Patch0097: 0097-man-units-fix-installation-of-systemd-nspawn-.servic.patch
+Patch0098: 0098-systemd-fix-memory-leak-in-cgroup-code.patch
+Patch0099: 0099-button-don-t-exit-if-we-cannot-handle-a-button-press.patch
+Patch0100: 0100-timer-properly-format-relative-timestamps-in-the-fut.patch
+Patch0101: 0101-timer-consider-usec_t-1-an-invalid-timestamp.patch
+Patch0102: 0102-Resolve-dev-console-to-the-active-tty-instead-of-jus.patch
+Patch0103: 0103-Only-disable-output-on-console-during-boot-if-needed.patch
+Patch0104: 0104-Fix-possible-lack-of-status-messages-on-shutdown-reb.patch
+Patch0105: 0105-random-seed-improve-debugging-messages-a-bit.patch
+Patch0106: 0106-Fix-RemainAfterExit-services-keeping-a-hold-on-conso.patch
+Patch0107: 0107-keymap-Add-Toshiba-Satellite-U940.patch
+Patch0108: 0108-calendar-support-yearly-and-annually-names-the-same-.patch
+Patch0109: 0109-hashmap-be-a-bit-more-conservative-with-pre-allocati.patch
+Patch0110: 0110-manager-don-t-do-plymouth-in-a-container.patch
+Patch0111: 0111-hwdb-Update-database-of-Bluetooth-company-identifier.patch
+Patch0112: 0112-automount-log-info-about-triggering-process.patch
+Patch0113: 0113-hwdb-Update-database-of-Bluetooth-company-identifier.patch
+Patch0114: 0114-journal-fail-silently-in-sd_j_sendv-if-journal-is-un.patch
+Patch0115: 0115-Fix-memory-leak-in-stdout-journal-streams.patch
+Patch0116: 0116-man-document-is-enabled-output.patch
+Patch0117: 0117-hostnamed-avoid-using-NULL-in-error-path.patch
+Patch0118: 0118-core-do-not-segfault-if-swap-activity-happens-when-p.patch
+Patch0119: 0119-kernel-install-add-h-help.patch
+Patch0120: 0120-kernel-install-fix-help-output.patch
+Patch0121: 0121-man-improve-wording-and-comma-usage-in-systemd.journ.patch
+Patch0122: 0122-drop-several-entries-from-kbd-model-map-whose-kbd-la.patch
+Patch0123: 0123-correct-name-of-Tajik-kbd-layout-in-kbd-model-map.patch
+Patch0124: 0124-hwdb-Update-database-of-Bluetooth-company-identifier.patch
+Patch0125: 0125-Ensure-unit-is-journaled-for-short-lived-or-oneshot-.patch
+Patch0126: 0126-core-manager-remove-infinite-loop.patch
+Patch0127: 0127-util-check-for-overflow-in-greedy_realloc.patch
+Patch0128: 0128-journald-use-a-bit-more-cleanup-magic.patch
+Patch0129: 0129-activate-clean-up-inherited-descriptors.patch
+Patch0130: 0130-man-explain-in-more-detail-how-SYSTEMD_READY-influen.patch
+Patch0131: 0131-units-don-t-run-readahead-done-timers-in-containers.patch
+Patch0132: 0132-nspawn-complain-and-continue-if-machine-has-same-id.patch
+Patch0133: 0133-man-beef-up-ExecStart-description.patch
+Patch0134: 0134-man-remove-advice-to-avoid-setting-the-same-var-more.patch
+Patch0135: 0135-systemctl-add-the-plain-option-to-the-help-message.patch
+Patch0136: 0136-Fix-a-few-resource-leaks-in-error-paths.patch
+Patch0137: 0137-Fix-a-few-signed-unsigned-format-string-issues.patch
+Patch0138: 0138-journal-file-protect-against-alloca-0.patch
+Patch0139: 0139-man-describe-journalctl-show-cursor.patch
+Patch0140: 0140-journal-fix-against-theoretical-undefined-behavior.patch
+Patch0141: 0141-journald-downgrade-warning-message-when-dev-kmsg-doe.patch
+Patch0142: 0142-journal-file.c-remove-redundant-assignment-of-variab.patch
+Patch0143: 0143-login-Don-t-stop-a-running-user-manager-from-garbage.patch
+Patch0144: 0144-log-when-we-log-to-dev-console-and-got-disconnected-.patch
+Patch0145: 0145-loginctl-when-showing-device-tree-of-seats-with-no-d.patch
+Patch0146: 0146-man-be-more-explicit-about-option-arguments-that-tak.patch
+Patch0147: 0147-man-add-DOI-for-refereed-article-on-Forward-Secure-S.patch
+Patch0148: 0148-keymap-Refactor-Acer-tables.patch
+Patch0149: 0149-logind-remove-dead-variable.patch
+Patch0150: 0150-hwdb-update.patch
+Patch0151: 0151-delta-replace-readdir_r-with-readdir.patch
+Patch0152: 0152-delta-fix-delta-for-drop-ins.patch
+Patch0153: 0153-delta-if-prefix-is-specified-only-show-overrides-the.patch
+Patch0154: 0154-man-units-tmpfiles.d-5-cleanup.patch
+Patch0155: 0155-tmpfiles-introduce-the-concept-of-unsafe-operations.patch
+Patch0156: 0156-sleep-config-fix-useless-check-for-swapfile-type.patch
+Patch0157: 0157-man-resolve-word-omissions.patch
+Patch0158: 0158-man-improvements-to-comma-placement.patch
+Patch0159: 0159-man-grammar-and-wording-improvements.patch
+Patch0160: 0160-man-document-fail-nofail-auto-noauto.patch
+Patch0161: 0161-man-fix-description-of-is-enabled-returned-value.patch
+Patch0162: 0162-man-fix-Type-reference.patch
+Patch0163: 0163-man-fix-Type-reference-v2.patch
+Patch0164: 0164-hwdb-Update-database-of-Bluetooth-company-identifier.patch
+Patch0165: 0165-man-add-a-note-about-propagating-signals.patch
+Patch0166: 0166-man-include-autoconf-snippet-in-daemon-7.patch
+Patch0167: 0167-systemd-python-fix-setting-of-exception-codes.patch
+Patch0168: 0168-systemd-python-fix-listen_fds-under-Python-2.patch
+Patch0169: 0169-man-expand-on-some-more-subtle-points-in-systemd.soc.patch
+Patch0170: 0170-tmpfiles-rename-unsafe-to-boot.patch
+Patch0171: 0171-sleep-config-Dereference-pointer-before-check-for-NU.patch
+Patch0172: 0172-sleep-config-fix-double-free.patch
+Patch0173: 0173-core-service-check-if-mainpid-matches-only-if-it-is-.patch
+Patch0174: 0174-man-typo-fix.patch
+Patch0175: 0175-swap-remove-if-else-with-the-same-data-path.patch
+Patch0176: 0176-hwdb-update.patch
+Patch0177: 0177-journal-Add-missing-byte-order-conversions.patch
+Patch0178: 0178-hwdb-change-key-mappings-for-Samsung-90X3A.patch
+Patch0179: 0179-hwdb-add-Samsung-700G.patch
+Patch0180: 0180-hwdb-remove-duplicate-entry-for-Samsung-700Z.patch
+Patch0181: 0181-hwdb-fix-match-for-Thinkpad-X201-tablet.patch
+Patch0182: 0182-keymap-Recognize-different-Toshiba-Satellite-capital.patch
+Patch0183: 0183-sleep.c-fix-typo.patch
+Patch0184: 0184-man-mention-which-variables-will-be-expanded-in-Exec.patch
+Patch0185: 0185-hwdb-Add-support-for-Toshiba-Satellite-P75-A7200-key.patch
+Patch0186: 0186-journal-fix-access-to-munmapped-memory-in-sd_journal.patch
+Patch0187: 0187-gpt-auto-generator-skip-nonexistent-devices.patch
+Patch0188: 0188-gpt-auto-generator-use-EBADSLT-code-when-unable-to-d.patch
+Patch0189: 0189-nspawn-explicitly-terminate-machines-when-we-exit-ns.patch
+Patch0190: 0190-bash-completion-journalctl-file.patch
+Patch0191: 0191-journalctl-zsh-completion-fix-several-issues-in-help.patch
+Patch0192: 0192-cgroup-run-PID-1-in-the-root-cgroup.patch
+Patch0193: 0193-pam-retrieve-value-of-debug-param-first.patch
+Patch0194: 0194-utils-silence-the-compiler-warning.patch
+Patch0195: 0195-s390-getty-generator-initialize-essential-system-ter.patch
+Patch0196: 0196-pam-use-correct-log-level.patch
+Patch0197: 0197-pam-do-not-set-XDG_RUNTIME_DIR-unconditionally.patch
+Patch0198: 0198-selinux-Don-t-attempt-to-load-policy-in-initramfs-if.patch
+Patch0199: 0199-kernel-install-add-fedora-specific-callouts-to-new-k.patch
+Patch0200: 0200-remove-user-.service.patch
+Patch0201: 0201-Fix-bad-assert-in-show_pid_array.patch
+Patch0202: 0202-mount-don-t-send-out-PropertiesChanged-message-if-ac.patch
+Patch0203: 0203-udev-rules-setup-tty-permissions-and-group-for-sclp_.patch
+Patch0204: 0204-cdrom_id-use-the-old-MMC-fallback.patch
+Patch0205: 0205-core-introduce-new-stop-protocol-for-unit-scopes.patch
+Patch0206: 0206-core-watch-SIGCHLD-more-closely-to-track-processes-o.patch
+Patch0207: 0207-logind-rework-session-shutdown-logic.patch
+Patch0208: 0208-logind-order-all-scopes-after-both-systemd-logind.se.patch
+Patch0209: 0209-logind-given-that-we-can-now-relatively-safely-shutd.patch
+Patch0210: 0210-utmp-make-sure-we-don-t-write-the-utmp-reboot-record.patch
+Patch0211: 0211-rules-mark-loop-device-as-SYSTEMD_READY-0-if-no-file.patch
+Patch0212: 0212-logind-fix-reference-to-systemd-user-sessions.servic.patch
+Patch0213: 0213-logind-add-forgotten-call-to-user_send_changed.patch
+Patch0214: 0214-logind-save-session-after-setting-the-stopping-flag.patch
+Patch0215: 0215-logind-save-user-state-after-stopping-the-session.patch
+Patch0216: 0216-logind-initialize-timer_fd.patch
+Patch0217: 0217-service-don-t-create-extra-cgroup-for-control-proces.patch
+Patch0218: 0218-logind-pass-pointer-to-User-object-to-user_save.patch
+Patch0219: 0219-fstab-generator-When-parsing-the-root-cmdline-option.patch
+Patch0220: 0220-gpt-auto-generator-Generate-explicit-dependencies-on.patch
+Patch0221: 0221-fstab-generator-Generate-explicit-dependencies-on-sy.patch
+Patch0222: 0222-fsck-root-only-run-when-requested-in-fstab.patch
+Patch0223: 0223-core-allow-PIDs-to-be-watched-by-two-units-at-the-sa.patch
+Patch0224: 0224-core-correctly-unregister-PIDs-from-PID-hashtables.patch
+Patch0225: 0225-logind-uninitialized-timer_fd-is-set-to-1.patch
+Patch0226: 0226-logind-add-forgotten-return-statement.patch
+Patch0227: 0227-core-remove-extra-semicolon-and-make-gcc-shut-up.patch
+Patch0228: 0228-core-fix-detection-of-dead-processes.patch
+Patch0229: 0229-Fix-prototype-of-get_process_state.patch
+Patch0230: 0230-core-check-for-return-value-from-get_process_state.patch
+Patch0231: 0231-unit-add-waiting-jobs-to-run-queue-in-unit_coldplug.patch
+Patch0232: 0232-logind-session-save-stopping-flag.patch
 
 %global num_patches %{lua: c=0; for i,p in ipairs(patches) do c=c+1; end; print(c);}
 
@@ -155,12 +290,11 @@ BuildRequires:  intltool
 BuildRequires:  gperf
 BuildRequires:  gtk-doc
 BuildRequires:  python2-devel
-%if %{num_patches}
 BuildRequires:  automake
 BuildRequires:  autoconf
 BuildRequires:  libtool
 BuildRequires:  git
-%endif
+
 Requires(post): coreutils
 Requires(post): gawk
 Requires(post): sed
@@ -172,6 +306,7 @@ Requires:       dbus
 Requires:       nss-myhostname
 Requires:       %{name}-libs = %{version}-%{release}
 Requires:       kmod >= 14
+Requires:       redhat-release >= 7.0
 
 Provides:       /bin/systemctl
 Provides:       /sbin/shutdown
@@ -200,6 +335,7 @@ Obsoletes:      upstart < 1.2-3
 Obsoletes:      upstart-sysvinit < 1.2-3
 Conflicts:      upstart-sysvinit
 Obsoletes:      hal
+Obsoletes:      ConsoleKit
 
 %description
 systemd is a system and service manager for Linux, compatible with
@@ -281,55 +417,52 @@ Obsoletes:      systemd < 204-10
 systemd-journal-gatewayd serves journal events over the network using HTTP.
 
 %prep
-%setup -q 
-
-%if %{num_patches}
-    git init
-    git config user.email "systemd-maint@redhat.com"
-    git config user.name "Fedora systemd team"
-    git add .
-    git commit -a -q -m "%{version} baseline."
-
-    # Apply all the patches.
-    git am \
-        --exclude .gitignore \
-        --exclude docs/.gitignore \
-        --exclude docs/gudev/.gitignore \
-        --exclude docs/libudev/.gitignore \
-        --exclude docs/sysvinit/.gitignore \
-        --exclude docs/var-log/.gitignore \
-        --exclude hwdb/.gitignore \
-        --exclude m4/.gitignore \
-        --exclude man/.gitignore \
-        --exclude po/.gitignore \
-        --exclude rules/.gitignore \
-        --exclude src/.gitignore \
-        --exclude src/analyze/.gitignore \
-        --exclude src/core/.gitignore \
-        --exclude src/gudev/.gitignore \
-        --exclude src/hostname/.gitignore \
-        --exclude src/journal/.gitignore \
-        --exclude src/libsystemd-daemon/.gitignore \
-        --exclude src/libsystemd-id128/.gitignore \
-        --exclude src/libudev/.gitignore \
-        --exclude src/locale/.gitignore \
-        --exclude src/login/.gitignore \
-        --exclude src/python-systemd/.gitignore \
-        --exclude src/python-systemd/docs/.gitignore \
-        --exclude src/timedate/.gitignore \
-        --exclude src/udev/.gitignore \
-        --exclude src/udev/scsi_id/.gitignore \
-        --exclude sysctl.d/.gitignore \
-        --exclude test/.gitignore \
-        --exclude units/.gitignore \
-        --exclude units/user/.gitignore \
-        %{patches}
-%endif
+%setup -q
+
+git init
+git config user.email "systemd-maint@redhat.com"
+git config user.name "Fedora systemd team"
+git add .
+git commit -a -q -m "%{version} baseline."
+
+# Apply all the patches.
+git am \
+    --exclude .gitignore \
+    --exclude docs/.gitignore \
+    --exclude docs/gudev/.gitignore \
+    --exclude docs/libudev/.gitignore \
+    --exclude docs/sysvinit/.gitignore \
+    --exclude docs/var-log/.gitignore \
+    --exclude hwdb/.gitignore \
+    --exclude m4/.gitignore \
+    --exclude man/.gitignore \
+    --exclude po/.gitignore \
+    --exclude rules/.gitignore \
+    --exclude src/.gitignore \
+    --exclude src/analyze/.gitignore \
+    --exclude src/core/.gitignore \
+    --exclude src/gudev/.gitignore \
+    --exclude src/hostname/.gitignore \
+    --exclude src/journal/.gitignore \
+    --exclude src/libsystemd-daemon/.gitignore \
+    --exclude src/libsystemd-id128/.gitignore \
+    --exclude src/libudev/.gitignore \
+    --exclude src/locale/.gitignore \
+    --exclude src/login/.gitignore \
+    --exclude src/python-systemd/.gitignore \
+    --exclude src/python-systemd/docs/* \
+    --exclude src/timedate/.gitignore \
+    --exclude src/udev/.gitignore \
+    --exclude src/udev/scsi_id/.gitignore \
+    --exclude sysctl.d/.gitignore \
+    --exclude test/.gitignore \
+    --exclude units/.gitignore \
+    --exclude units/user/.gitignore \
+    %{patches}
+
 
 %build
-%if %{num_patches}
-    autoreconf
-%endif
+autoreconf
 
 %configure \
         --libexecdir=%{_prefix}/lib \
@@ -391,12 +524,10 @@ touch %{buildroot}%{_sysconfdir}/localtime
 mkdir -p %{buildroot}%{_sysconfdir}/X11/xorg.conf.d
 touch %{buildroot}%{_sysconfdir}/X11/xorg.conf.d/00-keyboard.conf
 
-# Install Fedora default preset policy
+# Install default preset policy
 mkdir -p %{buildroot}%{_prefix}/lib/systemd/system-preset/
 mkdir -p %{buildroot}%{_prefix}/lib/systemd/user-preset/
 install -m 0644 %{SOURCE1} %{buildroot}%{_prefix}/lib/systemd/system-preset/
-install -m 0644 %{SOURCE5} %{buildroot}%{_prefix}/lib/systemd/system-preset/
-install -m 0644 %{SOURCE7} %{buildroot}%{_prefix}/lib/systemd/system-preset/
 
 # Make sure the shutdown/sleep drop-in dirs exist
 mkdir -p %{buildroot}%{_prefix}/lib/systemd/system-shutdown/
@@ -416,15 +547,15 @@ install -m 0755 %{SOURCE2} %{buildroot}%{_bindir}/
 
 # Install rsyslog fragment
 mkdir -p %{buildroot}%{_sysconfdir}/rsyslog.d/
-install -m 0644 %{SOURCE4} %{buildroot}%{_sysconfdir}/rsyslog.d/
+install -m 0644 %{SOURCE3} %{buildroot}%{_sysconfdir}/rsyslog.d/
 
 # Install yum protection fragment
 mkdir -p %{buildroot}%{_sysconfdir}/yum/protected.d/
-install -m 0644 %{SOURCE6} %{buildroot}%{_sysconfdir}/yum/protected.d/systemd.conf
+install -m 0644 %{SOURCE4} %{buildroot}%{_sysconfdir}/yum/protected.d/systemd.conf
 
 # Install rc.local
 mkdir -p %{buildroot}%{_sysconfdir}/rc.d/
-install -m 0644 %{SOURCE8} %{buildroot}%{_sysconfdir}/rc.d/rc.local
+install -m 0644 %{SOURCE5} %{buildroot}%{_sysconfdir}/rc.d/rc.local
 ln -s rc.d/rc.local %{buildroot}%{_sysconfdir}/rc.local
 
 # To avoid making life hard for Rawhide-using developers, don't package the
@@ -443,6 +574,8 @@ rm -f %{buildroot}%{_prefix}/lib/systemd/system/local-fs.target.wants/tmp.mount
 # No gpt-auto-generator in RHEL7
 rm -f %{buildroot}%{_prefix}/lib/systemd/system-generators/systemd-gpt-auto-generator
 
+install -m 0644 %{SOURCE6} $RPM_BUILD_ROOT/%{_udevrulesdir}/
+
 %pre
 getent group cdrom >/dev/null 2>&1 || groupadd -r -g 11 cdrom >/dev/null 2>&1 || :
 getent group tape >/dev/null 2>&1 || groupadd -r -g 33 tape >/dev/null 2>&1 || :
@@ -499,10 +632,7 @@ systemctl daemon-reexec >/dev/null 2>&1 || :
 systemctl start systemd-udevd.service >/dev/null 2>&1 || :
 udevadm hwdb --update >/dev/null 2>&1 || :
 journalctl --update-catalog >/dev/null 2>&1 || :
-
-# Stop-gap until rsyslog.rpm does this on its own. (This is supposed
-# to fail when the link already exists)
-ln -s /usr/lib/systemd/system/rsyslog.service /etc/systemd/system/syslog.service >/dev/null 2>&1 || :
+systemd-tmpfiles --create >/dev/null 2>&1 || :
 
 if [ $1 -eq 1 ] ; then
         # Try to read default runlevel from the old inittab if it exists
@@ -793,9 +923,8 @@ getent passwd systemd-journal-gateway >/dev/null 2>&1 || useradd -r -l -u 191 -g
 %{_prefix}/lib/tmpfiles.d/x11.conf
 %{_prefix}/lib/tmpfiles.d/legacy.conf
 %{_prefix}/lib/tmpfiles.d/tmp.conf
+%{_prefix}/lib/tmpfiles.d/systemd-nologin.conf
 %{_prefix}/lib/sysctl.d/50-default.conf
-%{_prefix}/lib/systemd/system-preset/85-display-manager.preset
-%{_prefix}/lib/systemd/system-preset/90-default.preset
 %{_prefix}/lib/systemd/system-preset/99-default-disable.preset
 %{_prefix}/lib/systemd/catalog/systemd.catalog
 %{_prefix}/lib/kernel/install.d/50-depmod.install
@@ -932,6 +1061,79 @@ getent passwd systemd-journal-gateway >/dev/null 2>&1 || useradd -r -l -u 191 -g
 %{_datadir}/systemd/gatewayd
 
 %changelog
+* Wed Apr 02 2014 Lukáš Nykrýn <lnykryn@redhat.com> - 208-11
+- logind-session: save stopping flag (#1082692)
+- unit: add waiting jobs to run queue in unit_coldplug (#1083159)
+
+* Fri Mar 28 2014 Harald Hoyer <harald@redhat.com> 208-10
+- require redhat-release >= 7.0
+Resolves: rhbz#1070114
+
+* Fri Mar 14 2014 Lukáš Nykrýn <lnykryn@redhat.com> - 208-9
+- fixes crashes in logind and systemd (#1073994)
+- run fsck before mouting root in initramfs (#1056661)
+
+* Thu Mar 06 2014 Lukáš Nykrýn <lnykryn@redhat.com> - 208-8
+- rules: mark loop device as SYSTEMD_READY=0 if no file is attached (#1067422)
+- utmp: make sure we don't write the utmp reboot record twice on each boot (#1053600)
+- rework session shutdown logic (#1047614)
+- introduce new stop protocol for unit scopes (#1064976)
+
+* Wed Mar 05 2014 Lukáš Nykrýn <lnykryn@redhat.com> - 208-7
+- setup tty permissions and group for /dev/sclp_line0 (#1070310)
+- cdrom_id: use the old MMC fallback (#1038015)
+- mount: don't send out PropertiesChanged message if actually nothing got changed (#1069718)
+
+* Wed Feb 26 2014 Lukáš Nykrýn <lnykryn@redhat.com> - 208-6
+- fix boot if SELINUX=permissive in configuration file and trying to boot in enforcing=1 (#907841)
+
+* Tue Feb 25 2014 Lukáš Nykrýn <lnykryn@redhat.com> - 208-5
+- reintroduce 60-alias-kmsg.rules (#1032711)
+
+* Mon Feb 17 2014 Lukáš Nykrýn <lnykryn@redhat.com> - 208-4
+- fstab-generator: revert wrongly applied patch
+
+* Fri Feb 14 2014 Lukáš Nykrýn <lnykryn@redhat.com> - 208-3
+- dbus-manager: fix selinux check for enable/disable
+
+* Wed Feb 12 2014 Michal Sekletar <msekleta@redhat.com> - 208-2
+- require redhat-release package
+- call systemd-tmpfiles after package installation (#1059345)
+- move preset policy out of systemd package (#903690)
+
+* Tue Feb 11 2014 Michal Sekletar <msekleta@redhat.com> - 208-1
+- rebase to systemd-208 (#1063332)
+- do not create symlink /etc/systemd/system/syslog.service (#1055421)
+
+* Fri Jan 24 2014 Daniel Mach <dmach@redhat.com> - 207-14
+- Mass rebuild 2014-01-24
+
+* Thu Jan 16 2014 Lukáš Nykrýn <lnykryn@redhat.com> - 207-13
+- fix SELinux check for transient units (#1008864)
+
+* Wed Jan 15 2014 Lukáš Nykrýn <lnykryn@redhat.com> - 207-12
+- shell-completion: remove load and dump from systemctl (#1048066)
+- delta: ensure that d_type will be set on every fs (#1050795)
+- tmpfiles: don't allow label_fix to print ENOENT when we want to ignore it (#1044871)
+- udev/net_id: Introduce predictable network names for Linux on System z (#870859)
+- coredumpctl: in case of error free pattern after print (#1052786)
+
+* Fri Dec 27 2013 Daniel Mach <dmach@redhat.com> - 207-11
+- Mass rebuild 2013-12-27
+
+* Thu Dec 19 2013 Lukas Nykryn <lnykryn@redhat.com> - 207-10
+- cgroup_show: don't call show_pid_array on empty arrays
+
+* Wed Dec 18 2013 Lukas Nykryn <lnykryn@redhat.com> - 207-9
+- treat reload failure as failure (#1036848)
+- improve journal performance (#1029604)
+- backport bugfixes (#1043525)
+- fix handling of trailing whitespace in split_quoted (#984832)
+- localed: match converted keymaps before legacy (#903776)
+- improve the description of parameter X in tmpfiles.d page (#1029604)
+- obsolete ConsoleKit (#1039761)
+- make rc.local more backward comaptible (#1039465)
+
 * Tue Nov 19 2013 Lukas Nykryn <lnykryn@redhat.com> - 207-8
 - tmpfiles: introduce m (#1030961)