[systemd/f18] couple of reverts, patches from v197+

Michal Schmidt michich at fedoraproject.org
Mon Jan 28 18:54:09 UTC 2013


commit 54dbdc6c2a513fed37fdec82d70fbba1f9cc37e6
Author: Michal Schmidt <mschmidt at redhat.com>
Date:   Mon Jan 28 17:08:46 2013 +0100

    couple of reverts, patches from v197+
    
    Revert a couple of patches causing surprising breakage.
    Resolves: #896135, #903716
    Pick more post-v197 fixes and minor enhancements from upstream.
    Resolves: #873634, #875531, #860464, #889624, #890827, #756787, #866693, #757928

 ...udev-network-device-renaming-immediately-.patch |   98 +
 ...udev-set-device-node-permissions-only-at-.patch |   58 +
 ...onour-inhibitors-when-shutting-down-or-en.patch |  239 ++
 0016-man-localectl-s-set-keyboard-set-keymap.patch |   23 +
 ...-sense-of-dvorak-alt-intel-X-variant-in-m.patch |   24 +
 ...nt-that-JoinControllers-might-be-ineffect.patch |   38 +
 ...-Type-forking-services-ignore-exit-status.patch |   46 +
 ...on-t-hit-an-assert-if-we-try-to-reboot-an.patch |   26 +
 ...onour-inhibitors-only-when-running-unpriv.patch |   71 +
 ...re-non-tty-non-x11-session-when-checking-.patch |   31 +
 ...load-font-to-dev-tty1-and-copy-it-to-all-.patch |  151 +
 ...n-wiki-documentation-about-network.target.patch |   41 +
 ...ink-in-API-FS-documentation-from-the-wiki.patch |   89 +
 0026-vconsole-copy-font-to-tty1-15.patch           |  117 +
 0027-localectl-fix-typo-in-man-page.patch          |   24 +
 ...rrect-order-of-precedence-for-fstab-units.patch |   33 +
 ...eference-to-new-wiki-page-to-all-api-moun.patch |  113 +
 ...erence-to-wiki-doc-from-DefaultController.patch |   47 +
 ...e-dev-vcsa1-15-to-check-for-allocated-VTs.patch |   30 +
 ...re-use-correct-argument-of-type-JobResult.patch |   23 +
 0033-journalctl-quit-on-I-O-error.patch            |   39 +
 ...-core-do-not-make-sockets-dependent-on-lo.patch |   25 +
 ...nt-replace-specifiers-in-path-unit-s-Unit.patch |   45 +
 0036-load-fragment-fix-bad-memory-access.patch     |   23 +
 ...-the-final-umount-loop-don-t-use-MNT_FORC.patch |   33 +
 ...gnore-loop-devices-without-a-backing-file.patch |   35 +
 ...oginctl-cgls-do-not-ellipsize-cgroup-memb.patch |  777 ++++
 0040-man-typo-fixes.patch                          |   39 +
 ...it-s-PartOf-and-ConsistsOf-deps-to-intros.patch |   29 +
 ...ll-unit-settings-that-take-lists-allow-th.patch | 1934 ++++++++++
 ...perly-signal-permanent-failure-of-a-servi.patch |   38 +
 0044-util-fix-bad-memory-access.patch              |   22 +
 0045-hwdb-update.patch                             | 3691 ++++++++++++++++++++
 ...awn-add-audit-caps-to-default-set-to-keep.patch |   62 +
 ...te-suggested-yum-command-line-in-nspawn-1.patch |   33 +
 ...pfiles-do-not-make-run-nologin-executable.patch |   20 +
 ...-shutdown-loop-convert-to-enumerate-match.patch |   45 +
 0050-Fix-some-typos.patch                          |   37 +
 ...y-the-meaning-of-timeout-0-for-password-a.patch |   42 +
 ...c-combine-Wformat-options-into-one-argume.patch |   29 +
 ...-allow-one-shutdown-sleep-action-to-be-qu.patch |  206 ++
 0054-hwdb-update.patch                             |  720 ++++
 ...-really-stop-watchdog-timer-when-stopping.patch |   27 +
 ...e-sure-the-watchdog-timer-is-not-restarte.patch |   31 +
 ...ore-Set-source-for-mountinfo-.mount-units.patch |   48 +
 ...temd.exec-explicit-Environment-assignment.patch |   54 +
 ...on-proc-self-mountinfo-in-systemd.mount-5.patch |   34 +
 ...ess-Delete-debugging-message-logged-as-an.patch |   24 +
 ...don-t-need-that-many-debug-messages-by-de.patch |   40 +
 ...-Resumed-signal-after-we-come-back-from-s.patch |  112 +
 ...UnlockSessions-clal-to-complement-LockSes.patch |   96 +
 ...ow-seat-master-and-uaccess-devices-in-sea.patch |   50 +
 ...tl-don-t-show-UACCESS-info-in-device-tree.patch |   46 +
 0066-logind-rework-delay-inhibition-logic.patch    |  447 +++
 0067-tmpfiles-introduce-type-X.patch               |  332 ++
 ...-job-fix-merging-with-ignore-dependencies.patch |   24 +
 ...me-stdout-is-always-writable-if-it-does-n.patch |   39 +
 ...mention-that-PrivateTmp-means-var-tmp-too.patch |   36 +
 ...support-for-the-brower-hotkey-on-the-HP-P.patch |   24 +
 0072-keymap-Add-HP-HDX-9494NR.patch                |   63 +
 ...eymap-Add-HP-HDX-9494NR-Fix-touchpad-keys.patch |   23 +
 systemd.spec                                       |   71 +-
 62 files changed, 10866 insertions(+), 1 deletions(-)
---
diff --git a/0013-F18-Revert-udev-network-device-renaming-immediately-.patch b/0013-F18-Revert-udev-network-device-renaming-immediately-.patch
new file mode 100644
index 0000000..26675bc
--- /dev/null
+++ b/0013-F18-Revert-udev-network-device-renaming-immediately-.patch
@@ -0,0 +1,98 @@
+From 6cebb9b39ec04ba11c81dca9b0c10faa51929d72 Mon Sep 17 00:00:00 2001
+From: Michal Schmidt <mschmidt at redhat.com>
+Date: Mon, 28 Jan 2013 14:15:56 +0100
+Subject: [PATCH] (F18) Revert "udev: network device renaming - immediately
+ give up if the target name isn't available"
+
+This reverts commit 97595710b77aa162ca5e20da57d0a1ed7355eaad (and fixes
+it up for printk_kmsg-related changes that came later).
+
+Many users upgraded from earlier Fedora releases and kept their
+/etc/udev/rules.d/70-persistent-net.rules with rules renaming interfaces
+into the ethX namespace. The udev change that made this entirely
+unsupported was not announced loud enough. For F18 let's re-add the
+renaming hack.
+
+Add an annoying message about the need to fix udev rules.
+
+BZ: https://bugzilla.redhat.com/show_bug.cgi?id=896135
+---
+ src/udev/udev-event.c | 54 ++++++++++++++++++++++++++++++++++++++++++++++++---
+ 1 file changed, 51 insertions(+), 3 deletions(-)
+
+diff --git a/src/udev/udev-event.c b/src/udev/udev-event.c
+index 5eedf4f..8aedc5f 100644
+--- a/src/udev/udev-event.c
++++ b/src/udev/udev-event.c
+@@ -750,7 +750,14 @@ static int rename_netif(struct udev_event *event)
+         struct udev_device *dev = event->dev;
+         int sk;
+         struct ifreq ifr;
++        int loop;
+         int err;
++        static const char rename_hack_msg_fmt[] =
++                "Tried to rename network interface %s, but the target name %s already exists! "
++                "The names that udev rules assign to network interfaces must be changed. "
++                "Avoid names that collide with kernel created ones. "
++                "A workaround will be attempted now, but this WILL BREAK in a future release! "
++                "See https://bugs.freedesktop.org/show_bug.cgi?id=56929#c3\n";
+ 
+         log_debug("changing net interface name from '%s' to '%s'\n",
+                   udev_device_get_sysname(dev), event->name);
+@@ -766,12 +773,53 @@ static int rename_netif(struct udev_event *event)
+         util_strscpy(ifr.ifr_name, IFNAMSIZ, udev_device_get_sysname(dev));
+         util_strscpy(ifr.ifr_newname, IFNAMSIZ, event->name);
+         err = ioctl(sk, SIOCSIFNAME, &ifr);
+-        if (err >= 0) {
++        if (err == 0) {
+                 print_kmsg("renamed network interface %s to %s\n", ifr.ifr_name, ifr.ifr_newname);
+-        } else {
++                goto out;
++        }
++
++        /* keep trying if the destination interface name already exists */
++        err = -errno;
++        if (err != -EEXIST)
++                goto out;
++
++        /* F18: scream both into dmesg and journal */
++        print_kmsg(rename_hack_msg_fmt, ifr.ifr_name, ifr.ifr_newname);
++        log_error (rename_hack_msg_fmt, ifr.ifr_name, ifr.ifr_newname);
++
++        /* free our own name, another process may wait for us */
++        snprintf(ifr.ifr_newname, IFNAMSIZ, "rename%u", udev_device_get_ifindex(dev));
++        err = ioctl(sk, SIOCSIFNAME, &ifr);
++        if (err < 0) {
+                 err = -errno;
+-                log_error("error changing net interface name %s to %s: %m\n", ifr.ifr_name, ifr.ifr_newname);
++                goto out;
++        }
++
++        /* log temporary name */
++        print_kmsg("renamed network interface %s to %s\n", ifr.ifr_name, ifr.ifr_newname);
++
++        /* wait a maximum of 90 seconds for our target to become available */
++        util_strscpy(ifr.ifr_name, IFNAMSIZ, ifr.ifr_newname);
++        util_strscpy(ifr.ifr_newname, IFNAMSIZ, event->name);
++        loop = 90 * 20;
++        while (loop--) {
++                const struct timespec duration = { 0, 1000 * 1000 * 1000 / 20 };
++
++                nanosleep(&duration, NULL);
++
++                err = ioctl(sk, SIOCSIFNAME, &ifr);
++                if (err == 0) {
++                        print_kmsg("renamed network interface %s to %s\n", ifr.ifr_name, ifr.ifr_newname);
++                        break;
++                }
++                err = -errno;
++                if (err != -EEXIST)
++                        break;
+         }
++
++out:
++        if (err < 0)
++                log_error("error changing net interface name %s to %s: %m\n", ifr.ifr_name, ifr.ifr_newname);
+         close(sk);
+         return err;
+ }
diff --git a/0014-F18-Revert-udev-set-device-node-permissions-only-at-.patch b/0014-F18-Revert-udev-set-device-node-permissions-only-at-.patch
new file mode 100644
index 0000000..8a9126f
--- /dev/null
+++ b/0014-F18-Revert-udev-set-device-node-permissions-only-at-.patch
@@ -0,0 +1,58 @@
+From f45160dfd901824b898751383bd299ee3ad4abdf Mon Sep 17 00:00:00 2001
+From: Michal Schmidt <mschmidt at redhat.com>
+Date: Mon, 28 Jan 2013 15:15:23 +0100
+Subject: [PATCH] (F18) Revert "udev: set device node permissions only at "add"
+ events"
+
+This reverts commit 48a849ee17fb25e0001bfcc0f28a4aa633d016a1.
+
+Kay says a proper fix for the BZ is non-trivial, so the change that
+broke 12-vdsm-lvm.rules should be reverted in F18.
+
+BZ: https://bugzilla.redhat.com/show_bug.cgi?id=903716
+---
+ src/udev/udev-node.c | 29 ++++++++++++++---------------
+ 1 file changed, 14 insertions(+), 15 deletions(-)
+
+diff --git a/src/udev/udev-node.c b/src/udev/udev-node.c
+index 1e378ad..7774303 100644
+--- a/src/udev/udev-node.c
++++ b/src/udev/udev-node.c
+@@ -279,23 +279,22 @@ static int node_fixup(struct udev_device *dev, mode_t mode, uid_t uid, gid_t gid
+                 goto out;
+         }
+ 
++        if ((stats.st_mode & 0777) != (mode & 0777) || stats.st_uid != uid || stats.st_gid != gid) {
++                log_debug("set permissions %s, %#o, uid=%u, gid=%u\n", devnode, mode, uid, gid);
++                chmod(devnode, mode);
++                chown(devnode, uid, gid);
++        } else {
++                log_debug("preserve permissions %s, %#o, uid=%u, gid=%u\n", devnode, mode, uid, gid);
++        }
++
+         /*
+-         * Set permissions and selinux file context only on add events. We always
+-         * set it on bootup (coldplug) with "trigger --action=add" for all devices
+-         * and for any newly added devices (hotplug). We don't want to change it
+-         * later, in case something else has applied custom settings in the meantime.
++         * Set initial selinux file context only on add events.
++         * We set the proper context on bootup (triger) or for newly
++         * added devices, but we don't change it later, in case
++         * something else has set a custom context in the meantime.
+          */
+-        if (strcmp(udev_device_get_action(dev), "add") == 0) {
+-                if ((stats.st_mode & 0777) != (mode & 0777) || stats.st_uid != uid || stats.st_gid != gid) {
+-                        log_debug("set permissions %s, %#o, uid=%u, gid=%u\n", devnode, mode, uid, gid);
+-                        chmod(devnode, mode);
+-                        chown(devnode, uid, gid);
+-                } else {
+-                        log_debug("preserve permissions %s, %#o, uid=%u, gid=%u\n", devnode, mode, uid, gid);
+-                }
+-
+-                label_fix(devnode, true, false);
+-        }
++        if (strcmp(udev_device_get_action(dev), "add") == 0)
++            label_fix(devnode, true, false);
+ 
+         /* always update timestamp when we re-use the node, like on media change events */
+         utimensat(AT_FDCWD, devnode, NULL, 0);
diff --git a/0015-systemctl-honour-inhibitors-when-shutting-down-or-en.patch b/0015-systemctl-honour-inhibitors-when-shutting-down-or-en.patch
new file mode 100644
index 0000000..84fa9f8
--- /dev/null
+++ b/0015-systemctl-honour-inhibitors-when-shutting-down-or-en.patch
@@ -0,0 +1,239 @@
+From 2100a589b3fe2f0dec0168c5231c6dc513a2409c Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Fri, 11 Jan 2013 04:24:05 +0100
+Subject: [PATCH] systemctl: honour inhibitors when shutting down or entering
+ sleep state (cherry picked from commit
+ b37844d3d72af3afbcb801476cf07c085519f392)
+
+---
+ man/systemctl.xml         |  27 ++++++++++
+ src/systemctl/systemctl.c | 122 +++++++++++++++++++++++++++++++++++++++++++++-
+ 2 files changed, 147 insertions(+), 2 deletions(-)
+
+diff --git a/man/systemctl.xml b/man/systemctl.xml
+index f86952c..2f33e0c 100644
+--- a/man/systemctl.xml
++++ b/man/systemctl.xml
+@@ -191,6 +191,33 @@
+                         </varlistentry>
+ 
+                         <varlistentry>
++                                <term><option>-i</option></term>
++                                <term><option>--ignore-inhibitors</option></term>
++
++                                <listitem><para>When system shutdown
++                                or a sleep state is requested, ignore
++                                inhibitor locks. Applications can
++                                establish inhibitor locks to avoid
++                                that certain important operations
++                                (such as CD burning or suchlike) are
++                                interrupted by system shutdown or a
++                                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
++                                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
++                                privileges.</para></listitem>
++                        </varlistentry>
++
++                        <varlistentry>
+                                 <term><option>--quiet</option></term>
+                                 <term><option>-q</option></term>
+ 
+diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c
+index 2ebfff8..1ebe49d 100644
+--- a/src/systemctl/systemctl.c
++++ b/src/systemctl/systemctl.c
+@@ -78,6 +78,7 @@ static bool arg_no_pager = false;
+ static bool arg_no_wtmp = false;
+ static bool arg_no_wall = false;
+ static bool arg_no_reload = false;
++static bool arg_ignore_inhibitors = false;
+ static bool arg_dry = false;
+ static bool arg_quiet = false;
+ static bool arg_full = false;
+@@ -1804,6 +1805,104 @@ static int reboot_with_logind(DBusConnection *bus, enum action a) {
+ #endif
+ }
+ 
++static int check_inhibitors(DBusConnection *bus, enum action a) {
++#ifdef HAVE_LOGIND
++        _cleanup_dbus_message_unref_ DBusMessage *reply = NULL;
++        DBusMessageIter iter, sub, sub2;
++        int r;
++        unsigned c = 0;
++
++        if (arg_ignore_inhibitors)
++                return 0;
++
++        if (!on_tty())
++                return 0;
++
++        r = bus_method_call_with_reply(
++                        bus,
++                        "org.freedesktop.login1",
++                        "/org/freedesktop/login1",
++                        "org.freedesktop.login1.Manager",
++                        "ListInhibitors",
++                        &reply,
++                        NULL,
++                        DBUS_TYPE_INVALID);
++        if (r < 0)
++                /* If logind is not around, then there are no inhibitors... */
++                return 0;
++
++        if (!dbus_message_iter_init(reply, &iter) ||
++            dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_ARRAY ||
++            dbus_message_iter_get_element_type(&iter) != DBUS_TYPE_STRUCT) {
++                log_error("Failed to parse reply.");
++                return -EIO;
++        }
++
++        dbus_message_iter_recurse(&iter, &sub);
++        while (dbus_message_iter_get_arg_type(&sub) != DBUS_TYPE_INVALID) {
++                const char *what, *who, *why, *mode;
++                uint32_t uid, pid;
++                _cleanup_strv_free_ char **sv = NULL;
++                _cleanup_free_ char *comm = NULL;
++
++                if (dbus_message_iter_get_arg_type(&sub) != DBUS_TYPE_STRUCT) {
++                        log_error("Failed to parse reply.");
++                        return -EIO;
++                }
++
++                dbus_message_iter_recurse(&sub, &sub2);
++
++                if (bus_iter_get_basic_and_next(&sub2, DBUS_TYPE_STRING, &what, true) < 0 ||
++                    bus_iter_get_basic_and_next(&sub2, DBUS_TYPE_STRING, &who, true) < 0 ||
++                    bus_iter_get_basic_and_next(&sub2, DBUS_TYPE_STRING, &why, true) < 0 ||
++                    bus_iter_get_basic_and_next(&sub2, DBUS_TYPE_STRING, &mode, true) < 0 ||
++                    bus_iter_get_basic_and_next(&sub2, DBUS_TYPE_UINT32, &uid, true) < 0 ||
++                    bus_iter_get_basic_and_next(&sub2, DBUS_TYPE_UINT32, &pid, false) < 0) {
++                        log_error("Failed to parse reply.");
++                        return -EIO;
++                }
++
++                if (!streq(mode, "block"))
++                        goto next;
++
++                sv = strv_split(what, ":");
++                if (!sv)
++                        return log_oom();
++
++                if (!strv_contains(sv,
++                                  a == ACTION_HALT ||
++                                  a == ACTION_POWEROFF ||
++                                  a == ACTION_REBOOT ||
++                                  a == ACTION_KEXEC ? "shutdown" : "sleep"))
++                        goto next;
++
++                get_process_comm(pid, &comm);
++                log_warning("Operation inhibited by \"%s\" (PID %lu \"%s\", UID %lu), reason is \"%s\".", who, (unsigned long) pid, strna(comm), (unsigned long) uid, why);
++                c++;
++
++        next:
++                dbus_message_iter_next(&sub);
++        }
++
++        dbus_message_iter_recurse(&iter, &sub);
++
++        if (c <= 0)
++                return 0;
++
++        log_error("Please try again after closing inhibitors or ignore them with 'systemctl %s -i'.",
++                  a == ACTION_HALT ? "halt" :
++                  a == ACTION_POWEROFF ? "poweroff" :
++                  a == ACTION_REBOOT ? "reboot" :
++                  a == ACTION_KEXEC ? "kexec" :
++                  a == ACTION_SUSPEND ? "suspend" :
++                  a == ACTION_HIBERNATE ? "hibernate" : "hybrid-sleep");
++
++        return -EPERM;
++#else
++        return 0;
++#endif
++}
++
+ static int start_special(DBusConnection *bus, char **args) {
+         enum action a;
+         int r;
+@@ -1831,6 +1930,12 @@ static int start_special(DBusConnection *bus, char **args) {
+              a == ACTION_EXIT))
+                 return daemon_reload(bus, args);
+ 
++        if (arg_force <= 0) {
++                r = check_inhibitors(bus, a);
++                if (r < 0)
++                        return r;
++        }
++
+         /* first try logind, to allow authentication with polkit */
+         if (geteuid() != 0 &&
+             (a == ACTION_POWEROFF ||
+@@ -3952,6 +4057,8 @@ static int systemctl_help(void) {
+                "                      pending\n"
+                "     --ignore-dependencies\n"
+                "                      When queueing a new job, ignore all its dependencies\n"
++               "  -i --ignore-inhibitors\n"
++               "                      When shutting down or sleeping, ignore inhibitors\n"
+                "     --kill-who=WHO   Who to send signal to\n"
+                "  -s --signal=SIGNAL  Which signal to send\n"
+                "  -H --host=[USER@]HOST\n"
+@@ -4162,6 +4269,7 @@ static int systemctl_parse_argv(int argc, char *argv[]) {
+                 { "full",      no_argument,       NULL, ARG_FULL      },
+                 { "fail",      no_argument,       NULL, ARG_FAIL      },
+                 { "ignore-dependencies", no_argument, NULL, ARG_IGNORE_DEPENDENCIES },
++                { "ignore-inhibitors", no_argument, NULL, 'i'         },
+                 { "user",      no_argument,       NULL, ARG_USER      },
+                 { "system",    no_argument,       NULL, ARG_SYSTEM    },
+                 { "global",    no_argument,       NULL, ARG_GLOBAL    },
+@@ -4191,7 +4299,7 @@ static int systemctl_parse_argv(int argc, char *argv[]) {
+         assert(argc >= 0);
+         assert(argv);
+ 
+-        while ((c = getopt_long(argc, argv, "ht:p:aqfs:H:Pn:o:", options, NULL)) >= 0) {
++        while ((c = getopt_long(argc, argv, "ht:p:aqfs:H:Pn:o:i", options, NULL)) >= 0) {
+ 
+                 switch (c) {
+ 
+@@ -4357,6 +4465,10 @@ static int systemctl_parse_argv(int argc, char *argv[]) {
+                         }
+                         break;
+ 
++                case 'i':
++                        arg_ignore_inhibitors = true;
++                        break;
++
+                 case '?':
+                         return -EINVAL;
+ 
+@@ -5229,6 +5341,12 @@ static _noreturn_ void halt_now(enum action a) {
+ static int halt_main(DBusConnection *bus) {
+         int r;
+ 
++        if (arg_when <= 0 && arg_force <= 0) {
++                r = check_inhibitors(bus, arg_action);
++                if (r < 0)
++                        return r;
++        }
++
+         if (geteuid() != 0) {
+                 /* Try logind if we are a normal user and no special
+                  * mode applies. Maybe PolicyKit allows us to shutdown
+@@ -5236,7 +5354,7 @@ static int halt_main(DBusConnection *bus) {
+ 
+                 if (arg_when <= 0 &&
+                     !arg_dry &&
+-                    !arg_force &&
++                    arg_force <= 0 &&
+                     (arg_action == ACTION_POWEROFF ||
+                      arg_action == ACTION_REBOOT)) {
+                         r = reboot_with_logind(bus, arg_action);
diff --git a/0016-man-localectl-s-set-keyboard-set-keymap.patch b/0016-man-localectl-s-set-keyboard-set-keymap.patch
new file mode 100644
index 0000000..10a0f07
--- /dev/null
+++ b/0016-man-localectl-s-set-keyboard-set-keymap.patch
@@ -0,0 +1,23 @@
+From 315729da525ccc5d0b3d05e3c51ada78a9d838a3 Mon Sep 17 00:00:00 2001
+From: Kay Sievers <kay at vrfy.org>
+Date: Sun, 13 Jan 2013 11:19:37 +0100
+Subject: [PATCH] man: localectl - s/set-keyboard/set-keymap/ (cherry picked
+ from commit 735248643920eadf021526714c1eb67518086e8d)
+
+---
+ man/localectl.xml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/man/localectl.xml b/man/localectl.xml
+index 33508cf..f375bfa 100644
+--- a/man/localectl.xml
++++ b/man/localectl.xml
+@@ -194,7 +194,7 @@
+                                 <listitem><para>List available
+                                 keyboard mappings for the console,
+                                 useful for configuration with
+-                                <command>set-keyboard</command>.</para></listitem>
++                                <command>set-keymap</command>.</para></listitem>
+                         </varlistentry>
+ 
+                         <varlistentry>
diff --git a/0017-locale-make-sense-of-dvorak-alt-intel-X-variant-in-m.patch b/0017-locale-make-sense-of-dvorak-alt-intel-X-variant-in-m.patch
new file mode 100644
index 0000000..e6500f9
--- /dev/null
+++ b/0017-locale-make-sense-of-dvorak-alt-intel-X-variant-in-m.patch
@@ -0,0 +1,24 @@
+From b7e1e4ed4159647268a2773d3a5827e1a07ebf17 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Mon, 14 Jan 2013 18:23:18 +0100
+Subject: [PATCH] locale: make sense of "dvorak-alt-intel" X variant in mapping
+ database
+
+https://bugzilla.redhat.com/show_bug.cgi?id=873634
+(cherry picked from commit 65426b76324ea8ecf9d42812151b12e314bd2742)
+---
+ src/locale/kbd-model-map | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/src/locale/kbd-model-map b/src/locale/kbd-model-map
+index b0860ab..1fe9bca 100644
+--- a/src/locale/kbd-model-map
++++ b/src/locale/kbd-model-map
+@@ -53,6 +53,7 @@ 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
+ dvorak			us	pc105		dvorak		terminate:ctrl_alt_bksp
++dvorak			us	pc105		dvorak-alt-intl	terminate:ctrl_alt_bksp
+ ru			ru,us	pc105		-		terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll
+ cz-lat2			cz	pc105		qwerty		terminate:ctrl_alt_bksp
+ pl2			pl	pc105		-		terminate:ctrl_alt_bksp
diff --git a/0018-core-document-that-JoinControllers-might-be-ineffect.patch b/0018-core-document-that-JoinControllers-might-be-ineffect.patch
new file mode 100644
index 0000000..7f8d0ee
--- /dev/null
+++ b/0018-core-document-that-JoinControllers-might-be-ineffect.patch
@@ -0,0 +1,38 @@
+From 2dcc89840ae19fe79adf88b7a004fe6a1bb33d84 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Mon, 14 Jan 2013 20:37:12 +0100
+Subject: [PATCH] core: document that JoinControllers= might be ineffective in
+ initrd uses
+
+https://bugzilla.redhat.com/show_bug.cgi?id=875531
+(cherry picked from commit e5e991a11c7749f8cb424e99ca4206264b0cf836)
+---
+ man/systemd.conf.xml | 15 ++++++++++++++-
+ 1 file changed, 14 insertions(+), 1 deletion(-)
+
+diff --git a/man/systemd.conf.xml b/man/systemd.conf.xml
+index a6be932..da3c7f7 100644
+--- a/man/systemd.conf.xml
++++ b/man/systemd.conf.xml
+@@ -134,7 +134,20 @@
+                                 'cpu,cpuacct'. Pass an empty string to
+                                 ensure that systemd mounts all
+                                 controllers in separate
+-                                hierarchies.</para></listitem>
++                                hierarchies.</para>
++
++                                <para>Note that this option is only
++                                applied once, at very early boot. If
++                                you use an initial RAM disk (initrd)
++                                that uses systemd it might hence be
++                                necessary to rebuild the initrd if
++                                this option is changed, and make sure
++                                the new configuration file is included
++                                in it. Otherwise the initrd might
++                                mount the controllers in different
++                                configuration than intended, and the
++                                main system cannot remount them
++                                anymore.</para></listitem>
+                         </varlistentry>
+ 
+                         <varlistentry>
diff --git a/0019-service-for-Type-forking-services-ignore-exit-status.patch b/0019-service-for-Type-forking-services-ignore-exit-status.patch
new file mode 100644
index 0000000..1beec60
--- /dev/null
+++ b/0019-service-for-Type-forking-services-ignore-exit-status.patch
@@ -0,0 +1,46 @@
+From 877dc69a6783ca8d307f4f2972fe025509cf5cf8 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Mon, 14 Jan 2013 21:05:17 +0100
+Subject: [PATCH] service: for Type=forking services, ignore exit status of
+ main process depending on ExecStart's ignore setting
+
+https://bugzilla.redhat.com/show_bug.cgi?id=860464
+(cherry picked from commit fbeefb45ac1a257a0c5af975ad26d68ed6c39fda)
+---
+ src/core/service.c | 18 ++++++++++++++----
+ 1 file changed, 14 insertions(+), 4 deletions(-)
+
+diff --git a/src/core/service.c b/src/core/service.c
+index 5db72b8..82b664f 100644
+--- a/src/core/service.c
++++ b/src/core/service.c
+@@ -2931,15 +2931,25 @@ static void service_sigchld_event(Unit *u, pid_t pid, int code, int status) {
+                 s->main_pid = 0;
+                 exec_status_exit(&s->main_exec_status, &s->exec_context, pid, code, status);
+ 
+-                /* If this is not a forking service than the main
+-                 * process got started and hence we copy the exit
+-                 * status so that it is recorded both as main and as
+-                 * control process exit status */
+                 if (s->main_command) {
++                        /* If this is not a forking service than the
++                         * main process got started and hence we copy
++                         * the exit status so that it is recorded both
++                         * as main and as control process exit
++                         * status */
++
+                         s->main_command->exec_status = s->main_exec_status;
+ 
+                         if (s->main_command->ignore)
+                                 f = SERVICE_SUCCESS;
++                } else if (s->exec_command[SERVICE_EXEC_START]) {
++
++                        /* If this is a forked process, then we should
++                         * ignore the return value if this was
++                         * configured for the starter process */
++
++                        if (s->exec_command[SERVICE_EXEC_START]->ignore)
++                                f = SERVICE_SUCCESS;
+                 }
+ 
+                 log_struct(f == SERVICE_SUCCESS ? LOG_DEBUG : LOG_NOTICE,
diff --git a/0020-systemctl-don-t-hit-an-assert-if-we-try-to-reboot-an.patch b/0020-systemctl-don-t-hit-an-assert-if-we-try-to-reboot-an.patch
new file mode 100644
index 0000000..58e0640
--- /dev/null
+++ b/0020-systemctl-don-t-hit-an-assert-if-we-try-to-reboot-an.patch
@@ -0,0 +1,26 @@
+From 7c426f3f278ae51d39348648d399926d5f3aa8e4 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Sat, 12 Jan 2013 00:00:22 +0100
+Subject: [PATCH] systemctl: don't hit an assert if we try to reboot and dbus
+ is dead
+
+https://bugzilla.redhat.com/show_bug.cgi?id=889624
+(cherry picked from commit d255133d8edc84662d2370a77414505a800d1922)
+---
+ src/systemctl/systemctl.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c
+index 1ebe49d..b876720 100644
+--- a/src/systemctl/systemctl.c
++++ b/src/systemctl/systemctl.c
+@@ -1762,6 +1762,9 @@ static int reboot_with_logind(DBusConnection *bus, enum action a) {
+         const char *method;
+         dbus_bool_t interactive = true;
+ 
++        if (!bus)
++                return -EIO;
++
+         polkit_agent_open_if_enabled();
+ 
+         switch (a) {
diff --git a/0021-systemctl-honour-inhibitors-only-when-running-unpriv.patch b/0021-systemctl-honour-inhibitors-only-when-running-unpriv.patch
new file mode 100644
index 0000000..dbd0076
--- /dev/null
+++ b/0021-systemctl-honour-inhibitors-only-when-running-unpriv.patch
@@ -0,0 +1,71 @@
+From 05e814d1f8bc47dddcd737ee0a6e9f25e6c1a7c7 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Sat, 12 Jan 2013 00:09:22 +0100
+Subject: [PATCH] systemctl: honour inhibitors only when running unprivileged
+ (cherry picked from commit 748ebafa7a10d4e1f168dd8ae0193124cdf4226e)
+
+---
+ src/systemctl/systemctl.c | 29 +++++++++++++++++------------
+ 1 file changed, 17 insertions(+), 12 deletions(-)
+
+diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c
+index b876720..012fd56 100644
+--- a/src/systemctl/systemctl.c
++++ b/src/systemctl/systemctl.c
+@@ -1815,7 +1815,16 @@ static int check_inhibitors(DBusConnection *bus, enum action a) {
+         int r;
+         unsigned c = 0;
+ 
+-        if (arg_ignore_inhibitors)
++        if (!bus)
++                return 0;
++
++        if (arg_ignore_inhibitors || arg_force > 0)
++                return 0;
++
++        if (arg_when > 0)
++                return 0;
++
++        if (geteuid() == 0)
+                 return 0;
+ 
+         if (!on_tty())
+@@ -1914,6 +1923,10 @@ static int start_special(DBusConnection *bus, char **args) {
+ 
+         a = verb_to_action(args[0]);
+ 
++        r = check_inhibitors(bus, a);
++        if (r < 0)
++                return r;
++
+         if (arg_force >= 2 && geteuid() != 0) {
+                 log_error("Must be root.");
+                 return -EPERM;
+@@ -1933,12 +1946,6 @@ static int start_special(DBusConnection *bus, char **args) {
+              a == ACTION_EXIT))
+                 return daemon_reload(bus, args);
+ 
+-        if (arg_force <= 0) {
+-                r = check_inhibitors(bus, a);
+-                if (r < 0)
+-                        return r;
+-        }
+-
+         /* first try logind, to allow authentication with polkit */
+         if (geteuid() != 0 &&
+             (a == ACTION_POWEROFF ||
+@@ -5344,11 +5351,9 @@ static _noreturn_ void halt_now(enum action a) {
+ static int halt_main(DBusConnection *bus) {
+         int r;
+ 
+-        if (arg_when <= 0 && arg_force <= 0) {
+-                r = check_inhibitors(bus, arg_action);
+-                if (r < 0)
+-                        return r;
+-        }
++        r = check_inhibitors(bus, arg_action);
++        if (r < 0)
++                return r;
+ 
+         if (geteuid() != 0) {
+                 /* Try logind if we are a normal user and no special
diff --git a/0022-logind-ignore-non-tty-non-x11-session-when-checking-.patch b/0022-logind-ignore-non-tty-non-x11-session-when-checking-.patch
new file mode 100644
index 0000000..ad755b9
--- /dev/null
+++ b/0022-logind-ignore-non-tty-non-x11-session-when-checking-.patch
@@ -0,0 +1,31 @@
+From 063c988f6ce8a2f35ae636ed026ddfdc5a75e4d2 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Mon, 14 Jan 2013 21:40:38 +0100
+Subject: [PATCH] logind: ignore non-tty/non-x11 session when checking if there
+ are other sessions before shutting down
+
+https://bugzilla.redhat.com/show_bug.cgi?id=890827
+(cherry picked from commit 1ca04b87979b2add53ebb8a7fdf13c34fb6c2743)
+---
+ src/login/logind-dbus.c | 7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c
+index 77a06f2..d64debe 100644
+--- a/src/login/logind-dbus.c
++++ b/src/login/logind-dbus.c
+@@ -979,9 +979,12 @@ static int have_multiple_sessions(
+ 
+         assert(m);
+ 
+-        /* Check for other users' sessions. Greeter sessions do not count. */
++        /* Check for other users' sessions. Greeter sessions do not
++         * count, and non-login sessions do not count either. */
+         HASHMAP_FOREACH(session, m->sessions, i)
+-                if (session->class == SESSION_USER && session->user->uid != uid)
++                if (session->class == SESSION_USER &&
++                    (session->type == SESSION_TTY || session->type == SESSION_X11) &&
++                    session->user->uid != uid)
+                         return true;
+ 
+         return false;
diff --git a/0023-vconsole-upload-font-to-dev-tty1-and-copy-it-to-all-.patch b/0023-vconsole-upload-font-to-dev-tty1-and-copy-it-to-all-.patch
new file mode 100644
index 0000000..ed39878
--- /dev/null
+++ b/0023-vconsole-upload-font-to-dev-tty1-and-copy-it-to-all-.patch
@@ -0,0 +1,151 @@
+From 4a674e08c1972955c4a220f840531829f82b4a86 Mon Sep 17 00:00:00 2001
+From: Kay Sievers <kay at vrfy.org>
+Date: Tue, 15 Jan 2013 02:25:56 +0100
+Subject: [PATCH] vconsole: upload font to /dev/tty1 and copy it to all
+ allocated VTs (cherry picked from commit
+ dd04aac97f9e4739152e77d9f52bb0d0da1375d6)
+
+---
+ src/vconsole/vconsole-setup.c | 74 +++++++++++++++++++++++++++++++++++--------
+ 1 file changed, 60 insertions(+), 14 deletions(-)
+
+diff --git a/src/vconsole/vconsole-setup.c b/src/vconsole/vconsole-setup.c
+index b9d8681..d8cdb7c 100644
+--- a/src/vconsole/vconsole-setup.c
++++ b/src/vconsole/vconsole-setup.c
+@@ -33,6 +33,7 @@
+ #include <sys/wait.h>
+ #include <linux/tiocl.h>
+ #include <linux/kd.h>
++#include <linux/vt.h>
+ 
+ #include "util.h"
+ #include "log.h"
+@@ -84,7 +85,7 @@ static int enable_utf8(int fd) {
+         return r;
+ }
+ 
+-static int load_keymap(const char *vc, const char *map, const char *map_toggle, bool utf8, pid_t *_pid) {
++static int keymap_load(const char *vc, const char *map, const char *map_toggle, bool utf8, pid_t *_pid) {
+         const char *args[8];
+         int i = 0;
+         pid_t pid;
+@@ -119,7 +120,7 @@ static int load_keymap(const char *vc, const char *map, const char *map_toggle,
+         return 0;
+ }
+ 
+-static int load_font(const char *vc, const char *font, const char *map, const char *unimap, pid_t *_pid) {
++static int font_load(const char *vc, const char *font, const char *map, const char *unimap, pid_t *_pid) {
+         const char *args[9];
+         int i = 0;
+         pid_t pid;
+@@ -157,6 +158,50 @@ static int load_font(const char *vc, const char *font, const char *map, const ch
+         return 0;
+ }
+ 
++static void font_copy_to_all_vts(int fd, int from_vt) {
++        struct vt_stat vts;
++        unsigned short bits;
++        int i;
++        int r;
++
++        /* get 16 bit mask of used VT numbers */
++        zero(vts);
++        r = ioctl(fd, VT_GETSTATE, &vts);
++        if (r < 0)
++                return;
++
++        bits = vts.v_state;
++        for (i = 1; i <= 16; i++) {
++                char vtname[16];
++                int vtfd;
++                struct console_font_op cfo;
++                bool used;
++
++                /* skip unused VTs */
++                used = bits & 1;
++                bits >>= 1;
++                if (!used)
++                        continue;
++
++                if (i == from_vt)
++                        continue;
++
++                snprintf(vtname , sizeof(vtname), "/dev/tty%i", i);
++                vtfd = open_terminal(vtname, O_RDWR|O_CLOEXEC);
++                if (vtfd < 0)
++                        continue;
++
++                /* copy font from from_vt to this VT */
++                zero(cfo);
++                cfo.op = KD_FONT_OP_COPY;
++                /* the index numbers seem to start at 0 for tty1 */
++                cfo.height = from_vt - 1;
++                ioctl(vtfd, KDFONTOP, &cfo);
++
++                close_nointr_nofail(vtfd);
++        }
++}
++
+ int main(int argc, char **argv) {
+         const char *vc;
+         char *vc_keymap = NULL;
+@@ -166,8 +211,9 @@ int main(int argc, char **argv) {
+         char *vc_font_unimap = NULL;
+         int fd = -1;
+         bool utf8;
+-        int r = EXIT_FAILURE;
+         pid_t font_pid = 0, keymap_pid = 0;
++        int font_copy_from_vt = 0;
++        int r = EXIT_FAILURE;
+ 
+         log_set_target(LOG_TARGET_AUTO);
+         log_parse_environment();
+@@ -177,8 +223,10 @@ int main(int argc, char **argv) {
+ 
+         if (argv[1])
+                 vc = argv[1];
+-        else
+-                vc = "/dev/tty0";
++        else {
++                vc = "/dev/tty1";
++                font_copy_from_vt = 1;
++        }
+ 
+         fd = open_terminal(vc, O_RDWR|O_CLOEXEC);
+         if (fd < 0) {
+@@ -223,27 +271,25 @@ int main(int argc, char **argv) {
+                         log_warning("Failed to read /etc/vconsole.conf: %s", strerror(-r));
+         }
+ 
+-        if (r <= 0) {
+-        }
+-
+-        r = EXIT_FAILURE;
+-
+         if (utf8)
+                 enable_utf8(fd);
+         else
+                 disable_utf8(fd);
+ 
+-
+-        if (load_keymap(vc, vc_keymap, vc_keymap_toggle, utf8, &keymap_pid) >= 0 &&
+-            load_font(vc, vc_font, vc_font_map, vc_font_unimap, &font_pid) >= 0)
++        r = EXIT_FAILURE;
++        if (keymap_load(vc, vc_keymap, vc_keymap_toggle, utf8, &keymap_pid) >= 0 &&
++            font_load(vc, vc_font, vc_font_map, vc_font_unimap, &font_pid) >= 0)
+                 r = EXIT_SUCCESS;
+ 
+ finish:
+         if (keymap_pid > 0)
+                 wait_for_terminate_and_warn(KBD_LOADKEYS, keymap_pid);
+ 
+-        if (font_pid > 0)
++        if (font_pid > 0) {
+                 wait_for_terminate_and_warn(KBD_SETFONT, font_pid);
++                if (font_copy_from_vt > 0)
++                        font_copy_to_all_vts(fd, font_copy_from_vt);
++        }
+ 
+         free(vc_keymap);
+         free(vc_font);
diff --git a/0024-man-link-in-wiki-documentation-about-network.target.patch b/0024-man-link-in-wiki-documentation-about-network.target.patch
new file mode 100644
index 0000000..b664ded
--- /dev/null
+++ b/0024-man-link-in-wiki-documentation-about-network.target.patch
@@ -0,0 +1,41 @@
+From c2a8a0e1d59672cde78f2e85f1e53bfd5869101c Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Tue, 15 Jan 2013 04:12:53 +0100
+Subject: [PATCH] man: link in wiki documentation about network.target (cherry
+ picked from commit aa6c53bf05f27bb094735e7bc2bbfc73ac7bc2ba)
+
+---
+ man/systemd.special.xml | 10 ++++++++++
+ units/network.target    |  1 +
+ 2 files changed, 11 insertions(+)
+
+diff --git a/man/systemd.special.xml b/man/systemd.special.xml
+index d3b6181..20f1c1f 100644
+--- a/man/systemd.special.xml
++++ b/man/systemd.special.xml
+@@ -414,6 +414,16 @@
+                                         referring to the
+                                         <literal>$network</literal>
+                                         facility.</para>
++
++                                        <para>This unit is supposed to
++                                        indicate when the network is
++                                        "up", but it is only very
++                                        losely defined what that is
++                                        supposed to mean. Also see <ulink
++                                        url="http://www.freedesktop.org/wiki/Software/systemd/NetworkTarget">Running
++                                        Services After the Network is
++                                        up</ulink> for more
++                                        information.</para>
+                                 </listitem>
+                         </varlistentry>
+                         <varlistentry>
+diff --git a/units/network.target b/units/network.target
+index 5406f4e..65fc64b 100644
+--- a/units/network.target
++++ b/units/network.target
+@@ -8,3 +8,4 @@
+ [Unit]
+ Description=Network
+ Documentation=man:systemd.special(7)
++Documentation=http://www.freedesktop.org/wiki/Software/systemd/NetworkTarget
diff --git a/0025-man-link-in-API-FS-documentation-from-the-wiki.patch b/0025-man-link-in-API-FS-documentation-from-the-wiki.patch
new file mode 100644
index 0000000..3786ca8
--- /dev/null
+++ b/0025-man-link-in-API-FS-documentation-from-the-wiki.patch
@@ -0,0 +1,89 @@
+From 144b31e8b0f383abab1b1010370ad658cb8c11d3 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Tue, 15 Jan 2013 05:10:50 +0100
+Subject: [PATCH] man: link in API FS documentation from the wiki (cherry
+ picked from commit 236bc7573a400b77e515c441a34419b133d11b18)
+
+---
+ man/systemd-remount-fs.service.xml  | 24 +++++++++++++++---------
+ man/systemd.mount.xml               | 12 ++++++++++--
+ units/systemd-remount-fs.service.in |  1 +
+ 3 files changed, 26 insertions(+), 11 deletions(-)
+
+diff --git a/man/systemd-remount-fs.service.xml b/man/systemd-remount-fs.service.xml
+index d920c0c..9fe953e 100644
+--- a/man/systemd-remount-fs.service.xml
++++ b/man/systemd-remount-fs.service.xml
+@@ -59,20 +59,26 @@
+                 listed in
+                 <citerefentry><refentrytitle>fstab</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+                 to the root file system, the <filename>/usr</filename>
+-                file system and the kernel API virtual file
+-                systems. This is required so that the mount options of
+-                these file systems -- which are pre-mounted by the
+-                kernel, the initial RAM disk, container environments
+-                or system manager code -- are updated to those listed
+-                in <filename>/etc/fstab</filename>. This service
+-                ignores normal file systems and only changes the root
+-                file system (i.e. <filename>/</filename>),
++                file system and the kernel API file systems. This is
++                required so that the mount options of these file
++                systems -- which are pre-mounted by the kernel, the
++                initial RAM disk, container environments or system
++                manager code -- are updated to those listed in
++                <filename>/etc/fstab</filename>. This service ignores
++                normal file systems and only changes the root file
++                system (i.e. <filename>/</filename>),
+                 <filename>/usr</filename> and the virtual kernel API
+                 file systems such as <filename>/proc</filename>,
+                 <filename>/sys</filename> or
+                 <filename>/dev/</filename>. This service executes no
+                 operation if <filename>/etc/fstab</filename> does not
+-                exist or lists no entries for the mentioned file systems.</para>
++                exist or lists no entries for the mentioned file
++                systems.</para>
++
++                <para>For a longer discussion of kernel API file
++                systems see <ulink
++                url="http://www.freedesktop.org/wiki/Software/systemd/APIFileSystems">API
++                File Systems</ulink>.</para>
+         </refsect1>
+ 
+         <refsect1>
+diff --git a/man/systemd.mount.xml b/man/systemd.mount.xml
+index 78b5f52..d194083 100644
+--- a/man/systemd.mount.xml
++++ b/man/systemd.mount.xml
+@@ -102,10 +102,18 @@
+                 in the file system hierarchy, a dependency between both
+                 units is created automatically.</para>
+ 
+-                <para>Mount points created at runtime independent on
+-                unit files or <filename>/etc/fstab</filename> will be
++                <para>Mount points created at runtime (independently of
++                unit files or <filename>/etc/fstab</filename>) will be
+                 monitored by systemd and appear like any other mount
+                 unit in systemd.</para>
++
++                <para>Some file systems have special semantics as API
++                file systems for kernel-to-userspace and
++                userspace-to-userpace interfaces. Some of them may not
++                be changed via mount units, and cannot be disabled.
++                For a longer discussion see <ulink
++                url="http://www.freedesktop.org/wiki/Software/systemd/APIFileSystems">API
++                File Systems</ulink>.</para>
+         </refsect1>
+ 
+         <refsect1>
+diff --git a/units/systemd-remount-fs.service.in b/units/systemd-remount-fs.service.in
+index cddb0a1..70e1a86 100644
+--- a/units/systemd-remount-fs.service.in
++++ b/units/systemd-remount-fs.service.in
+@@ -8,6 +8,7 @@
+ [Unit]
+ Description=Remount Root and Kernel File Systems
+ Documentation=man:systemd-remount-fs.service(8)
++Documentation=http://www.freedesktop.org/wiki/Software/systemd/APIFileSystems
+ DefaultDependencies=no
+ Conflicts=shutdown.target
+ After=systemd-readahead-collect.service systemd-readahead-replay.service systemd-fsck-root.service
diff --git a/0026-vconsole-copy-font-to-tty1-15.patch b/0026-vconsole-copy-font-to-tty1-15.patch
new file mode 100644
index 0000000..ebbe01c
--- /dev/null
+++ b/0026-vconsole-copy-font-to-tty1-15.patch
@@ -0,0 +1,117 @@
+From be9d3099a7d5b2c4981ea8241ece207cb193b2f2 Mon Sep 17 00:00:00 2001
+From: Kay Sievers <kay at vrfy.org>
+Date: Tue, 15 Jan 2013 15:57:12 +0100
+Subject: [PATCH] vconsole: copy font to tty1-15 (cherry picked from commit
+ d3b37e846950aab3ce940c46204b729552093df8)
+
+---
+ src/vconsole/vconsole-setup.c | 58 +++++++++++++++++++++----------------------
+ 1 file changed, 29 insertions(+), 29 deletions(-)
+
+diff --git a/src/vconsole/vconsole-setup.c b/src/vconsole/vconsole-setup.c
+index d8cdb7c..679dc1a 100644
+--- a/src/vconsole/vconsole-setup.c
++++ b/src/vconsole/vconsole-setup.c
+@@ -158,47 +158,47 @@ static int font_load(const char *vc, const char *font, const char *map, const ch
+         return 0;
+ }
+ 
+-static void font_copy_to_all_vts(int fd, int from_vt) {
+-        struct vt_stat vts;
+-        unsigned short bits;
++/*
++ * A newly allocated VT uses the font from the active VT. Here
++ * we update all possibly already allocated VTs with the configured
++ * font. It also allows to restart systemd-vconsole-setup.service,
++ * to apply a new font to all VTs.
++ */
++static void font_copy_to_all_vcs(int fd) {
++        struct vt_stat vcs;
+         int i;
+         int r;
+ 
+-        /* get 16 bit mask of used VT numbers */
+-        zero(vts);
+-        r = ioctl(fd, VT_GETSTATE, &vts);
++        /* get active, and 16 bit mask of used VT numbers */
++        zero(vcs);
++        r = ioctl(fd, VT_GETSTATE, &vcs);
+         if (r < 0)
+                 return;
+ 
+-        bits = vts.v_state;
+-        for (i = 1; i <= 16; i++) {
+-                char vtname[16];
+-                int vtfd;
++        for (i = 1; i <= 15; i++) {
++                char vcname[16];
++                int vcfd;
+                 struct console_font_op cfo;
+-                bool used;
+ 
+-                /* skip unused VTs */
+-                used = bits & 1;
+-                bits >>= 1;
+-                if (!used)
++                if (i == vcs.v_active)
+                         continue;
+ 
+-                if (i == from_vt)
++                /* skip unused VTs above tty6 to avoid allocating them */
++                if (i > 6 && ((vcs.v_state >> i) & 1) == 0)
+                         continue;
+ 
+-                snprintf(vtname , sizeof(vtname), "/dev/tty%i", i);
+-                vtfd = open_terminal(vtname, O_RDWR|O_CLOEXEC);
+-                if (vtfd < 0)
++                snprintf(vcname , sizeof(vcname), "/dev/tty%i", i);
++                vcfd = open_terminal(vcname, O_RDWR|O_CLOEXEC);
++                if (vcfd < 0)
+                         continue;
+ 
+-                /* copy font from from_vt to this VT */
++                /* copy font from active VT, where the font was uploaded to */
+                 zero(cfo);
+                 cfo.op = KD_FONT_OP_COPY;
+-                /* the index numbers seem to start at 0 for tty1 */
+-                cfo.height = from_vt - 1;
+-                ioctl(vtfd, KDFONTOP, &cfo);
++                cfo.height = vcs.v_active-1; /* tty1 == index 0 */
++                ioctl(vcfd, KDFONTOP, &cfo);
+ 
+-                close_nointr_nofail(vtfd);
++                close_nointr_nofail(vcfd);
+         }
+ }
+ 
+@@ -212,7 +212,7 @@ int main(int argc, char **argv) {
+         int fd = -1;
+         bool utf8;
+         pid_t font_pid = 0, keymap_pid = 0;
+-        int font_copy_from_vt = 0;
++        bool font_copy = false;
+         int r = EXIT_FAILURE;
+ 
+         log_set_target(LOG_TARGET_AUTO);
+@@ -224,8 +224,8 @@ int main(int argc, char **argv) {
+         if (argv[1])
+                 vc = argv[1];
+         else {
+-                vc = "/dev/tty1";
+-                font_copy_from_vt = 1;
++                vc = "/dev/tty0";
++                font_copy = true;
+         }
+ 
+         fd = open_terminal(vc, O_RDWR|O_CLOEXEC);
+@@ -287,8 +287,8 @@ finish:
+ 
+         if (font_pid > 0) {
+                 wait_for_terminate_and_warn(KBD_SETFONT, font_pid);
+-                if (font_copy_from_vt > 0)
+-                        font_copy_to_all_vts(fd, font_copy_from_vt);
++                if (font_copy)
++                        font_copy_to_all_vcs(fd);
+         }
+ 
+         free(vc_keymap);
diff --git a/0027-localectl-fix-typo-in-man-page.patch b/0027-localectl-fix-typo-in-man-page.patch
new file mode 100644
index 0000000..edf2c9c
--- /dev/null
+++ b/0027-localectl-fix-typo-in-man-page.patch
@@ -0,0 +1,24 @@
+From be50fc0741345eceb235d866660aaf5e36d71592 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Tue, 15 Jan 2013 16:27:11 +0100
+Subject: [PATCH] localectl: fix typo in man page
+
+https://bugs.freedesktop.org/show_bug.cgi?id=59247
+(cherry picked from commit 8bae5e6abeca9ec2beb6d6e6b14a558283e895c9)
+---
+ man/localectl.xml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/man/localectl.xml b/man/localectl.xml
+index f375bfa..73bff98 100644
+--- a/man/localectl.xml
++++ b/man/localectl.xml
+@@ -183,7 +183,7 @@
+                                 mapping of X11, after converting it to
+                                 the closest matching X11 keyboard
+                                 mapping. Use
+-                                <command>list-locales</command> for a
++                                <command>list-keymaps</command> for a
+                                 list of available keyboard mappings
+                                 (see below).</para></listitem>
+                         </varlistentry>
diff --git a/0028-man-correct-order-of-precedence-for-fstab-units.patch b/0028-man-correct-order-of-precedence-for-fstab-units.patch
new file mode 100644
index 0000000..e3f4252
--- /dev/null
+++ b/0028-man-correct-order-of-precedence-for-fstab-units.patch
@@ -0,0 +1,33 @@
+From a4f80b965230e39a47d239e7cc72f40ddd837b71 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Tue, 15 Jan 2013 18:10:11 +0100
+Subject: [PATCH] man: correct order of precedence for fstab units (cherry
+ picked from commit c32247e9d7c4231d4f731c9103d90b4e2e1682a2)
+
+---
+ man/systemd.mount.xml | 12 ++++++++++--
+ 1 file changed, 10 insertions(+), 2 deletions(-)
+
+diff --git a/man/systemd.mount.xml b/man/systemd.mount.xml
+index d194083..749d426 100644
+--- a/man/systemd.mount.xml
++++ b/man/systemd.mount.xml
+@@ -153,8 +153,16 @@
+                 <literal>h</literal>, <literal>ms</literal>.</para>
+ 
+                 <para>If a mount point is configured in both
+-                <filename>/etc/fstab</filename> and a unit file, the
+-                configuration in the latter takes precedence.</para>
++                <filename>/etc/fstab</filename> and a unit file that
++                is stored below <filename>/usr</filename> the former
++                will take precedence. If the unit file is stored below
++                <filename>/etc</filename> it will take
++                precedence. This means: native unit files take
++                precedence over traditional configuration files, but
++                this is superseded by the rule that configuration in
++                <filename>/etc</filename> will always take precedence
++                over configuration in
++                <filename>/usr</filename>.</para>
+         </refsect1>
+ 
+         <refsect1>
diff --git a/0029-units-add-reference-to-new-wiki-page-to-all-api-moun.patch b/0029-units-add-reference-to-new-wiki-page-to-all-api-moun.patch
new file mode 100644
index 0000000..ca1c653
--- /dev/null
+++ b/0029-units-add-reference-to-new-wiki-page-to-all-api-moun.patch
@@ -0,0 +1,113 @@
+From b1a7605696035acc9df7e49b4c506c79a294b8b0 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Tue, 15 Jan 2013 18:13:34 +0100
+Subject: [PATCH] units: add reference to new wiki page to all api mount units
+ (cherry picked from commit 25ed795892f309feecf048d4b5e66e5447b9c4ad)
+
+---
+ units/dev-hugepages.mount               | 1 +
+ units/dev-mqueue.mount                  | 1 +
+ units/proc-sys-fs-binfmt_misc.automount | 1 +
+ units/proc-sys-fs-binfmt_misc.mount     | 1 +
+ units/sys-fs-fuse-connections.mount     | 1 +
+ units/sys-kernel-config.mount           | 1 +
+ units/sys-kernel-debug.mount            | 1 +
+ units/tmp.mount                         | 1 +
+ 8 files changed, 8 insertions(+)
+
+diff --git a/units/dev-hugepages.mount b/units/dev-hugepages.mount
+index 9381167..d711fae 100644
+--- a/units/dev-hugepages.mount
++++ b/units/dev-hugepages.mount
+@@ -8,6 +8,7 @@
+ [Unit]
+ Description=Huge Pages File System
+ Documentation=https://www.kernel.org/doc/Documentation/vm/hugetlbpage.txt
++Documentation=http://www.freedesktop.org/wiki/Software/systemd/APIFileSystems
+ DefaultDependencies=no
+ Before=sysinit.target
+ ConditionPathExists=/sys/kernel/mm/hugepages
+diff --git a/units/dev-mqueue.mount b/units/dev-mqueue.mount
+index 5786bb1..5c11ca7 100644
+--- a/units/dev-mqueue.mount
++++ b/units/dev-mqueue.mount
+@@ -8,6 +8,7 @@
+ [Unit]
+ Description=POSIX Message Queue File System
+ Documentation=man:mq_overview(7)
++Documentation=http://www.freedesktop.org/wiki/Software/systemd/APIFileSystems
+ DefaultDependencies=no
+ Before=sysinit.target
+ ConditionPathExists=/proc/sys/fs/mqueue
+diff --git a/units/proc-sys-fs-binfmt_misc.automount b/units/proc-sys-fs-binfmt_misc.automount
+index 7fd5afe..6be3893 100644
+--- a/units/proc-sys-fs-binfmt_misc.automount
++++ b/units/proc-sys-fs-binfmt_misc.automount
+@@ -8,6 +8,7 @@
+ [Unit]
+ Description=Arbitrary Executable File Formats File System Automount Point
+ Documentation=https://www.kernel.org/doc/Documentation/binfmt_misc.txt
++Documentation=http://www.freedesktop.org/wiki/Software/systemd/APIFileSystems
+ DefaultDependencies=no
+ Before=sysinit.target
+ ConditionPathExists=/proc/sys/fs/binfmt_misc/
+diff --git a/units/proc-sys-fs-binfmt_misc.mount b/units/proc-sys-fs-binfmt_misc.mount
+index c64c849..8c7c386 100644
+--- a/units/proc-sys-fs-binfmt_misc.mount
++++ b/units/proc-sys-fs-binfmt_misc.mount
+@@ -8,6 +8,7 @@
+ [Unit]
+ Description=Arbitrary Executable File Formats File System
+ Documentation=https://www.kernel.org/doc/Documentation/binfmt_misc.txt
++Documentation=http://www.freedesktop.org/wiki/Software/systemd/APIFileSystems
+ DefaultDependencies=no
+ 
+ [Mount]
+diff --git a/units/sys-fs-fuse-connections.mount b/units/sys-fs-fuse-connections.mount
+index 9269ea4..ebd93e2 100644
+--- a/units/sys-fs-fuse-connections.mount
++++ b/units/sys-fs-fuse-connections.mount
+@@ -8,6 +8,7 @@
+ [Unit]
+ Description=FUSE Control File System
+ Documentation=https://www.kernel.org/doc/Documentation/filesystems/fuse.txt
++Documentation=http://www.freedesktop.org/wiki/Software/systemd/APIFileSystems
+ DefaultDependencies=no
+ ConditionPathExists=/sys/fs/fuse/connections
+ After=systemd-modules-load.service
+diff --git a/units/sys-kernel-config.mount b/units/sys-kernel-config.mount
+index e7cd490..020101c 100644
+--- a/units/sys-kernel-config.mount
++++ b/units/sys-kernel-config.mount
+@@ -8,6 +8,7 @@
+ [Unit]
+ Description=Configuration File System
+ Documentation=https://www.kernel.org/doc/Documentation/filesystems/configfs/configfs.txt
++Documentation=http://www.freedesktop.org/wiki/Software/systemd/APIFileSystems
+ DefaultDependencies=no
+ ConditionPathExists=/sys/kernel/config
+ After=systemd-modules-load.service
+diff --git a/units/sys-kernel-debug.mount b/units/sys-kernel-debug.mount
+index 8b1e33e..5369728 100644
+--- a/units/sys-kernel-debug.mount
++++ b/units/sys-kernel-debug.mount
+@@ -8,6 +8,7 @@
+ [Unit]
+ Description=Debug File System
+ Documentation=https://www.kernel.org/doc/Documentation/filesystems/debugfs.txt
++Documentation=http://www.freedesktop.org/wiki/Software/systemd/APIFileSystems
+ DefaultDependencies=no
+ ConditionPathExists=/sys/kernel/debug
+ Before=sysinit.target
+diff --git a/units/tmp.mount b/units/tmp.mount
+index 94c41c2..99a3ba3 100644
+--- a/units/tmp.mount
++++ b/units/tmp.mount
+@@ -8,6 +8,7 @@
+ [Unit]
+ Description=Temporary Directory
+ Documentation=man:hier(7)
++Documentation=http://www.freedesktop.org/wiki/Software/systemd/APIFileSystems
+ DefaultDependencies=no
+ Conflicts=umount.target
+ Before=local-fs.target umount.target
diff --git a/0030-man-add-reference-to-wiki-doc-from-DefaultController.patch b/0030-man-add-reference-to-wiki-doc-from-DefaultController.patch
new file mode 100644
index 0000000..cd5e60c
--- /dev/null
+++ b/0030-man-add-reference-to-wiki-doc-from-DefaultController.patch
@@ -0,0 +1,47 @@
+From fd5b2125c19d5c57f4f9338327637025cb46869b Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Tue, 15 Jan 2013 18:17:53 +0100
+Subject: [PATCH] man: add reference to wiki doc from DefaultControllers=
+ setting (cherry picked from commit b02a01dc08317e961545521359f963752bd2c206)
+
+---
+ man/systemd.conf.xml | 19 ++++++++++++++-----
+ 1 file changed, 14 insertions(+), 5 deletions(-)
+
+diff --git a/man/systemd.conf.xml b/man/systemd.conf.xml
+index da3c7f7..d0164ca 100644
+--- a/man/systemd.conf.xml
++++ b/man/systemd.conf.xml
+@@ -114,7 +114,16 @@
+                                 of controller names. Pass an empty
+                                 string to ensure that systemd does not
+                                 touch any hierarchies but its
+-                                own.</para></listitem>
++                                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>
+@@ -144,10 +153,10 @@
+                                 this option is changed, and make sure
+                                 the new configuration file is included
+                                 in it. Otherwise the initrd might
+-                                mount the controllers in different
+-                                configuration than intended, and the
+-                                main system cannot remount them
+-                                anymore.</para></listitem>
++                                mount the controller hierachies in a
++                                different configuration than intended,
++                                and the main system cannot remount
++                                them anymore.</para></listitem>
+                         </varlistentry>
+ 
+                         <varlistentry>
diff --git a/0031-vconsole-use-dev-vcsa1-15-to-check-for-allocated-VTs.patch b/0031-vconsole-use-dev-vcsa1-15-to-check-for-allocated-VTs.patch
new file mode 100644
index 0000000..26b3d6d
--- /dev/null
+++ b/0031-vconsole-use-dev-vcsa1-15-to-check-for-allocated-VTs.patch
@@ -0,0 +1,30 @@
+From ad230436c8726236a9106a77c07e9e9c1ff0687a Mon Sep 17 00:00:00 2001
+From: Kay Sievers <kay at vrfy.org>
+Date: Tue, 15 Jan 2013 20:32:57 +0100
+Subject: [PATCH] vconsole: use /dev/vcsa1-15 to check for allocated VTs
+ (cherry picked from commit 10ffbc99afed12bd59bcf91d8242ea65b04eec40)
+
+---
+ src/vconsole/vconsole-setup.c | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+diff --git a/src/vconsole/vconsole-setup.c b/src/vconsole/vconsole-setup.c
+index 679dc1a..6501705 100644
+--- a/src/vconsole/vconsole-setup.c
++++ b/src/vconsole/vconsole-setup.c
+@@ -183,11 +183,12 @@ static void font_copy_to_all_vcs(int fd) {
+                 if (i == vcs.v_active)
+                         continue;
+ 
+-                /* skip unused VTs above tty6 to avoid allocating them */
+-                if (i > 6 && ((vcs.v_state >> i) & 1) == 0)
++                /* skip non-allocated ttys */
++                snprintf(vcname, sizeof(vcname), "/dev/vcs%i", i);
++                if (access(vcname, F_OK) < 0)
+                         continue;
+ 
+-                snprintf(vcname , sizeof(vcname), "/dev/tty%i", i);
++                snprintf(vcname, sizeof(vcname), "/dev/tty%i", i);
+                 vcfd = open_terminal(vcname, O_RDWR|O_CLOEXEC);
+                 if (vcfd < 0)
+                         continue;
diff --git a/0032-core-use-correct-argument-of-type-JobResult.patch b/0032-core-use-correct-argument-of-type-JobResult.patch
new file mode 100644
index 0000000..caa607e
--- /dev/null
+++ b/0032-core-use-correct-argument-of-type-JobResult.patch
@@ -0,0 +1,23 @@
+From 301f9bdc127a2c0a6e974be049c3fbd81324ac93 Mon Sep 17 00:00:00 2001
+From: Michal Sekletar <msekleta at redhat.com>
+Date: Fri, 11 Jan 2013 17:06:22 +0100
+Subject: [PATCH] core: use correct argument of type JobResult (cherry picked
+ from commit 38c888a4049438f2521edf38d55f937b53d17a9e)
+
+---
+ src/core/job.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/core/job.c b/src/core/job.c
+index 5ff95f5..31ab118 100644
+--- a/src/core/job.c
++++ b/src/core/job.c
+@@ -821,7 +821,7 @@ int job_finish_and_invalidate(Job *j, JobResult result, bool recursive) {
+                 log_struct(LOG_NOTICE,
+                            "UNIT=%s", u->id,
+                            "JOB_TYPE=%s", job_type_to_string(t),
+-                           "JOB_RESULT=%s", job_result_to_string(t),
++                           "JOB_RESULT=%s", job_result_to_string(result),
+                            "Job %s/%s failed with result '%s'.",
+                            u->id,
+                            job_type_to_string(t),
diff --git a/0033-journalctl-quit-on-I-O-error.patch b/0033-journalctl-quit-on-I-O-error.patch
new file mode 100644
index 0000000..f141bf1
--- /dev/null
+++ b/0033-journalctl-quit-on-I-O-error.patch
@@ -0,0 +1,39 @@
+From d28e2e3da2127f86661b7f86bf6c232740319dc4 Mon Sep 17 00:00:00 2001
+From: David Herrmann <dh.herrmann at googlemail.com>
+Date: Sun, 13 Jan 2013 12:28:38 +0100
+Subject: [PATCH] journalctl: quit on I/O error
+
+This makes journalctl quit on ferror() conditions on stdout. It fixes an
+annoying bug if you pipe its output through 'less' and press 'q'. Without
+this fix journalctl will continue reading all journal data until EOF which
+can take quite some time. For instance on my machine:
+
+    david-nb ~ # time journalctl | wc -l
+    327240
+
+    real    1m13.039s
+    user    1m0.217s
+    sys     0m10.467s
+
+However, expected behavior is journalctl to quit when its pager closed the
+output pipe.
+
+Signed-off-by: David Herrmann <dh.herrmann at googlemail.com>
+(cherry picked from commit 244692cbfb46df5ff79d07da8fb848a1165bd2fb)
+---
+ src/journal/journalctl.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/journal/journalctl.c b/src/journal/journalctl.c
+index a74d43b..45543a5 100644
+--- a/src/journal/journalctl.c
++++ b/src/journal/journalctl.c
+@@ -1077,7 +1077,7 @@ int main(int argc, char *argv[]) {
+                                 arg_catalog * OUTPUT_CATALOG;
+ 
+                         r = output_journal(stdout, j, arg_output, 0, flags);
+-                        if (r < 0)
++                        if (r < 0 || ferror(stdout))
+                                 goto finish;
+ 
+                         need_seek = true;
diff --git a/0034-core-do-not-make-sockets-dependent-on-lo.patch b/0034-core-do-not-make-sockets-dependent-on-lo.patch
new file mode 100644
index 0000000..5c6eb1a
--- /dev/null
+++ b/0034-core-do-not-make-sockets-dependent-on-lo.patch
@@ -0,0 +1,25 @@
+From 7aa63b43ffac09bc97cf05dd1b5370667d17fde2 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Micha=C5=82=20Bartoszkiewicz?= <mbartoszkiewicz at gmail.com>
+Date: Sat, 12 Jan 2013 23:05:52 +0100
+Subject: [PATCH] core: do not make sockets dependent on lo
+
+/sys/subsystem/net/devices/lo is never considered active, so sockets
+with BindToDevice=lo would never be activated.
+(cherry picked from commit 7d0c710d72f8a6e5c6909c65700aa088c53aebc6)
+---
+ src/core/socket.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/core/socket.c b/src/core/socket.c
+index fcbcdbe..d755040 100644
+--- a/src/core/socket.c
++++ b/src/core/socket.c
+@@ -308,7 +308,7 @@ static int socket_add_device_link(Socket *s) {
+ 
+         assert(s);
+ 
+-        if (!s->bind_to_device)
++        if (!s->bind_to_device || streq(s->bind_to_device, "lo"))
+                 return 0;
+ 
+         if (asprintf(&t, "/sys/subsystem/net/devices/%s", s->bind_to_device) < 0)
diff --git a/0035-load-fragment-replace-specifiers-in-path-unit-s-Unit.patch b/0035-load-fragment-replace-specifiers-in-path-unit-s-Unit.patch
new file mode 100644
index 0000000..56fe185
--- /dev/null
+++ b/0035-load-fragment-replace-specifiers-in-path-unit-s-Unit.patch
@@ -0,0 +1,45 @@
+From e01cec2c1a88aa7d110e41e7deb717bb71d04db0 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Tue, 15 Jan 2013 21:37:17 +0100
+Subject: [PATCH] load-fragment: replace specifiers in path unit's Unit=
+ setting (cherry picked from commit 858c33bf6002bcdbea185ddedde8f8d660afc731)
+
+---
+ src/core/load-fragment.c | 14 ++++++++++----
+ 1 file changed, 10 insertions(+), 4 deletions(-)
+
+diff --git a/src/core/load-fragment.c b/src/core/load-fragment.c
+index e35fdbc..0869d4f 100644
+--- a/src/core/load-fragment.c
++++ b/src/core/load-fragment.c
+@@ -1287,6 +1287,7 @@ int config_parse_path_unit(
+         int r;
+         DBusError error;
+         Unit *u;
++        _cleanup_free_ char *p = NULL;
+ 
+         assert(filename);
+         assert(lvalue);
+@@ -1295,13 +1296,18 @@ int config_parse_path_unit(
+ 
+         dbus_error_init(&error);
+ 
+-        if (endswith(rvalue, ".path")) {
+-                log_error("[%s:%u] Unit cannot be of type path, ignoring: %s", filename, line, rvalue);
++        p = unit_name_printf(u, rvalue);
++        if (!p)
++                return log_oom();
++
++        if (endswith(p, ".path")) {
++                log_error("[%s:%u] Unit cannot be of type path, ignoring: %s", filename, line, p);
+                 return 0;
+         }
+ 
+-        if ((r = manager_load_unit(UNIT(t)->manager, rvalue, NULL, &error, &u)) < 0) {
+-                log_error("[%s:%u] Failed to load unit %s, ignoring: %s", filename, line, rvalue, bus_error(&error, r));
++        r = manager_load_unit(UNIT(t)->manager, p, NULL, &error, &u);
++        if (r < 0) {
++                log_error("[%s:%u] Failed to load unit %s, ignoring: %s", filename, line, p, bus_error(&error, r));
+                 dbus_error_free(&error);
+                 return 0;
+         }
diff --git a/0036-load-fragment-fix-bad-memory-access.patch b/0036-load-fragment-fix-bad-memory-access.patch
new file mode 100644
index 0000000..1b28487
--- /dev/null
+++ b/0036-load-fragment-fix-bad-memory-access.patch
@@ -0,0 +1,23 @@
+From 856dc37041d98901943ba8a6e6bc9c26cc278b53 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Tue, 15 Jan 2013 21:45:37 +0100
+Subject: [PATCH] load-fragment: fix bad memory access (cherry picked from
+ commit cd7409576d36baeb4ccc93471d3bd9d72a436d59)
+
+---
+ src/core/load-fragment.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/core/load-fragment.c b/src/core/load-fragment.c
+index 0869d4f..e2ea003 100644
+--- a/src/core/load-fragment.c
++++ b/src/core/load-fragment.c
+@@ -1296,7 +1296,7 @@ int config_parse_path_unit(
+ 
+         dbus_error_init(&error);
+ 
+-        p = unit_name_printf(u, rvalue);
++        p = unit_name_printf(UNIT(t), rvalue);
+         if (!p)
+                 return log_oom();
+ 
diff --git a/0037-shutdown-in-the-final-umount-loop-don-t-use-MNT_FORC.patch b/0037-shutdown-in-the-final-umount-loop-don-t-use-MNT_FORC.patch
new file mode 100644
index 0000000..025a3c7
--- /dev/null
+++ b/0037-shutdown-in-the-final-umount-loop-don-t-use-MNT_FORC.patch
@@ -0,0 +1,33 @@
+From c8b64923a3124c80654b46dfa5b594257dde807b Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Wed, 16 Jan 2013 03:51:56 +0100
+Subject: [PATCH] shutdown: in the final umount loop don't use MNT_FORCE
+
+MNT_FORCE is honoured by NFS and FUSE and allows unmounting of the FS
+even if consumers still use it. For our brute-force loop we rely on
+EBUSY being reported as long as a file system is still used by a
+loopback device or suchlike. Hence, drop MNT_FORCE to make EBUSY
+reliable.
+(cherry picked from commit 0c08f5cde749bd2818475e487109cd0d413452df)
+---
+ src/core/umount.c | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/src/core/umount.c b/src/core/umount.c
+index 96232d3..c7b6cee 100644
+--- a/src/core/umount.c
++++ b/src/core/umount.c
+@@ -442,9 +442,11 @@ static int mount_points_list_umount(MountPoint **head, bool *changed, bool log_e
+                 )
+                         continue;
+ 
+-                /* Trying to umount. Forcing to umount if busy (only for NFS mounts) */
++                /* Trying to umount. We don't force here since we rely
++                 * on busy NFS and FUSE file systems to return EBUSY
++                 * until we closed everything on top of them. */
+                 log_info("Unmounting %s.", m->path);
+-                if (umount2(m->path, MNT_FORCE) == 0) {
++                if (umount2(m->path, 0) == 0) {
+                         if (changed)
+                                 *changed = true;
+ 
diff --git a/0038-shutdown-ignore-loop-devices-without-a-backing-file.patch b/0038-shutdown-ignore-loop-devices-without-a-backing-file.patch
new file mode 100644
index 0000000..fd36ae8
--- /dev/null
+++ b/0038-shutdown-ignore-loop-devices-without-a-backing-file.patch
@@ -0,0 +1,35 @@
+From 60009bdb242ea49e4e64311c67ee840993ffb557 Mon Sep 17 00:00:00 2001
+From: Kay Sievers <kay at vrfy.org>
+Date: Wed, 16 Jan 2013 04:35:54 +0100
+Subject: [PATCH] shutdown: ignore loop devices without a backing file (cherry
+ picked from commit bdffb521d01a2e2bc342154d74cb519755c52c25)
+
+---
+ src/core/umount.c | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+diff --git a/src/core/umount.c b/src/core/umount.c
+index c7b6cee..f0f2711 100644
+--- a/src/core/umount.c
++++ b/src/core/umount.c
+@@ -233,6 +233,7 @@ static int loopback_list_get(MountPoint **head) {
+         udev_list_entry_foreach(item, first) {
+                 MountPoint *lb;
+                 struct udev_device *d;
++                const char *backing;
+                 char *loop;
+                 const char *dn;
+ 
+@@ -241,6 +242,12 @@ static int loopback_list_get(MountPoint **head) {
+                         goto finish;
+                 }
+ 
++                backing = udev_device_get_sysattr_value(d, "loop/backing_file");
++                if (!backing) {
++                        udev_device_unref(d);
++                        continue;
++                }
++
+                 if (!(dn = udev_device_get_devnode(d))) {
+                         udev_device_unref(d);
+                         continue;
diff --git a/0039-systemctl-loginctl-cgls-do-not-ellipsize-cgroup-memb.patch b/0039-systemctl-loginctl-cgls-do-not-ellipsize-cgroup-memb.patch
new file mode 100644
index 0000000..bc61f92
--- /dev/null
+++ b/0039-systemctl-loginctl-cgls-do-not-ellipsize-cgroup-memb.patch
@@ -0,0 +1,777 @@
+From cc85665351f6f68b6190e37dbb3704ce28d1a55b Mon Sep 17 00:00:00 2001
+From: Lukas Nykryn <lnykryn at redhat.com>
+Date: Mon, 14 Jan 2013 18:16:50 +0100
+Subject: [PATCH] systemctl,loginctl,cgls: do not ellipsize cgroup members when
+ --full is specified
+
+New file output.h with output flags and modes.
+
+--full parameter also for cgls and loginctl.
+
+Include 'all' parameter in flags (show_cgroup_by_path, show_cgroup,
+show_cgroup_and_extra, show_cgroup_and_extra_by_spec).
+
+get_process_cmdline with max_length == 0 will not ellipsize output.
+
+Replace LINE_MAX with 0 in some calls of get_process_cmdline.
+
+[zj: Default to --full when under pager for clgs.
+     Drop '-f' since it wasn't documented and didn't actually work.
+     Reindent a bit.
+]
+(cherry picked from commit 9bdbc2e2ec523dbefe1c1c7e164b5544aff0b185)
+---
+ Makefile.am                   |  3 +-
+ man/loginctl.xml              |  7 ++++
+ man/systemctl.xml             |  2 +-
+ man/systemd-cgls.xml          |  8 +++++
+ src/cgls/cgls.c               | 34 +++++++++++++++----
+ src/core/selinux-access.c     |  4 +--
+ src/journal/coredump.c        |  2 +-
+ src/journal/journald-server.c |  2 +-
+ src/login/loginctl.c          | 24 +++++++++++--
+ src/shared/cgroup-show.c      | 49 ++++++++++++++-------------
+ src/shared/cgroup-show.h      | 10 +++---
+ src/shared/logs-show.h        | 23 +------------
+ src/shared/output-mode.h      | 44 ++++++++++++++++++++++++
+ src/shared/util.c             | 78 +++++++++++++++++++++++++------------------
+ src/systemctl/systemctl.c     | 14 ++++----
+ 15 files changed, 201 insertions(+), 103 deletions(-)
+ create mode 100644 src/shared/output-mode.h
+
+diff --git a/Makefile.am b/Makefile.am
+index 28d8d44..1413073 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -810,7 +810,8 @@ libsystemd_shared_la_SOURCES = \
+ 	src/shared/time-dst.c \
+ 	src/shared/time-dst.h \
+ 	src/shared/calendarspec.c \
+-	src/shared/calendarspec.h
++	src/shared/calendarspec.h \
++	src/shared/output-mode.h
+ 
+ libsystemd_shared_la_LIBADD = libsystemd-daemon.la
+ 
+diff --git a/man/loginctl.xml b/man/loginctl.xml
+index 5dbc1f6..8a20d18 100644
+--- a/man/loginctl.xml
++++ b/man/loginctl.xml
+@@ -110,6 +110,13 @@
+                                 set or not.</para></listitem>
+                         </varlistentry>
+ 
++                        <varlistentry>
++                                <term><option>--full</option></term>
++
++                                <listitem><para>Do not ellipsize cgroup
++                                members.</para>
++                                </listitem>
++                        </varlistentry>
+ 
+                         <varlistentry>
+                                 <term><option>--no-pager</option></term>
+diff --git a/man/systemctl.xml b/man/systemctl.xml
+index 2f33e0c..48c5a1c 100644
+--- a/man/systemctl.xml
++++ b/man/systemctl.xml
+@@ -156,7 +156,7 @@
+                                 <term><option>--full</option></term>
+ 
+                                 <listitem><para>Do not ellipsize unit
+-                                names and truncate unit descriptions
++                                names, cgroup members, and truncate unit descriptions
+                                 in the output of
+                                 <command>list-units</command> and
+                                 <command>list-jobs</command>.</para></listitem>
+diff --git a/man/systemd-cgls.xml b/man/systemd-cgls.xml
+index 4b6ee93..b280b87 100644
+--- a/man/systemd-cgls.xml
++++ b/man/systemd-cgls.xml
+@@ -111,6 +111,14 @@
+                         </varlistentry>
+ 
+                         <varlistentry>
++                                <term><option>--full</option></term>
++
++                                <listitem><para>Do not ellipsize cgroup
++                                members.</para>
++                                </listitem>
++                        </varlistentry>
++
++                        <varlistentry>
+                                 <term><option>-k</option></term>
+ 
+                                 <listitem><para>Include kernel
+diff --git a/src/cgls/cgls.c b/src/cgls/cgls.c
+index cfb728b..a05f979 100644
+--- a/src/cgls/cgls.c
++++ b/src/cgls/cgls.c
+@@ -33,10 +33,12 @@
+ #include "util.h"
+ #include "pager.h"
+ #include "build.h"
++#include "output-mode.h"
+ 
+ static bool arg_no_pager = false;
+ static bool arg_kernel_threads = false;
+ static bool arg_all = false;
++static int arg_full = -1;
+ 
+ static void help(void) {
+ 
+@@ -46,6 +48,7 @@ static void help(void) {
+                "     --version        Show package version\n"
+                "     --no-pager       Do not pipe output into a pager\n"
+                "  -a --all            Show all groups, including empty\n"
++               "  --full              Do not ellipsize output\n"
+                "  -k                  Include kernel threads in output\n",
+                program_invocation_short_name);
+ }
+@@ -54,7 +57,8 @@ static int parse_argv(int argc, char *argv[]) {
+ 
+         enum {
+                 ARG_NO_PAGER = 0x100,
+-                ARG_VERSION
++                ARG_VERSION,
++                ARG_FULL,
+         };
+ 
+         static const struct option options[] = {
+@@ -62,6 +66,7 @@ static int parse_argv(int argc, char *argv[]) {
+                 { "version",   no_argument,       NULL, ARG_VERSION  },
+                 { "no-pager",  no_argument,       NULL, ARG_NO_PAGER },
+                 { "all",       no_argument,       NULL, 'a'          },
++                { "full",      no_argument,       NULL, ARG_FULL     },
+                 { NULL,        0,                 NULL, 0            }
+         };
+ 
+@@ -91,6 +96,10 @@ static int parse_argv(int argc, char *argv[]) {
+                         arg_all = true;
+                         break;
+ 
++                case ARG_FULL:
++                        arg_full = true;
++                        break;
++
+                 case 'k':
+                         arg_kernel_threads = true;
+                         break;
+@@ -109,6 +118,7 @@ static int parse_argv(int argc, char *argv[]) {
+ 
+ int main(int argc, char *argv[]) {
+         int r = 0, retval = EXIT_FAILURE;
++        int output_flags;
+ 
+         log_parse_environment();
+         log_open();
+@@ -121,8 +131,17 @@ int main(int argc, char *argv[]) {
+                 goto finish;
+         }
+ 
+-        if (!arg_no_pager)
+-                pager_open();
++        if (!arg_no_pager) {
++                r = pager_open();
++                if (r > 0) {
++                        if (arg_full == -1)
++                                arg_full = true;
++                }
++        }
++
++        output_flags =
++                arg_all * OUTPUT_SHOW_ALL |
++                (arg_full > 0) * OUTPUT_FULL_WIDTH;
+ 
+         if (optind < argc) {
+                 unsigned i;
+@@ -131,7 +150,8 @@ int main(int argc, char *argv[]) {
+                         int q;
+                         printf("%s:\n", argv[i]);
+ 
+-                        q = show_cgroup_by_path(argv[i], NULL, 0, arg_kernel_threads, arg_all);
++                        q = show_cgroup_by_path(argv[i], NULL, 0,
++                                                arg_kernel_threads, output_flags);
+                         if (q < 0)
+                                 r = q;
+                 }
+@@ -147,7 +167,8 @@ int main(int argc, char *argv[]) {
+ 
+                 if (path_startswith(p, "/sys/fs/cgroup")) {
+                         printf("Working Directory %s:\n", p);
+-                        r = show_cgroup_by_path(p, NULL, 0, arg_kernel_threads, arg_all);
++                        r = show_cgroup_by_path(p, NULL, 0,
++                                                arg_kernel_threads, output_flags);
+                 } else {
+                         char _cleanup_free_ *root = NULL;
+                         const char *t = NULL;
+@@ -162,7 +183,8 @@ int main(int argc, char *argv[]) {
+                                 t = root[0] ? root : "/";
+                         }
+ 
+-                        r = show_cgroup(SYSTEMD_CGROUP_CONTROLLER, t, NULL, 0, arg_kernel_threads, arg_all);
++                        r = show_cgroup(SYSTEMD_CGROUP_CONTROLLER, t, NULL, 0,
++                                        arg_kernel_threads, output_flags);
+                 }
+         }
+ 
+diff --git a/src/core/selinux-access.c b/src/core/selinux-access.c
+index 6dfe8b4..b933698 100644
+--- a/src/core/selinux-access.c
++++ b/src/core/selinux-access.c
+@@ -134,7 +134,7 @@ static int bus_get_audit_data(
+         if (r < 0)
+                 return r;
+ 
+-        r = get_process_cmdline(pid, LINE_MAX, true, &audit->cmdline);
++        r = get_process_cmdline(pid, 0, true, &audit->cmdline);
+         if (r < 0)
+                 return r;
+ 
+@@ -280,7 +280,7 @@ static int get_audit_data(
+         if (r < 0)
+                 return r;
+ 
+-        r = get_process_cmdline(ucred.pid, LINE_MAX, true, &audit->cmdline);
++        r = get_process_cmdline(ucred.pid, 0, true, &audit->cmdline);
+         if (r < 0)
+                 return r;
+ 
+diff --git a/src/journal/coredump.c b/src/journal/coredump.c
+index a507fc6..c989be9 100644
+--- a/src/journal/coredump.c
++++ b/src/journal/coredump.c
+@@ -205,7 +205,7 @@ int main(int argc, char* argv[]) {
+                         IOVEC_SET_STRING(iovec[j++], core_exe);
+         }
+ 
+-        if (get_process_cmdline(pid, LINE_MAX, false, &t) >= 0) {
++        if (get_process_cmdline(pid, 0, false, &t) >= 0) {
+                 core_cmdline = strappend("COREDUMP_CMDLINE=", t);
+                 free(t);
+ 
+diff --git a/src/journal/journald-server.c b/src/journal/journald-server.c
+index 43ffe75..d3dec54 100644
+--- a/src/journal/journald-server.c
++++ b/src/journal/journald-server.c
+@@ -572,7 +572,7 @@ static void dispatch_message_real(
+                                 IOVEC_SET_STRING(iovec[n++], exe);
+                 }
+ 
+-                r = get_process_cmdline(ucred->pid, LINE_MAX, false, &t);
++                r = get_process_cmdline(ucred->pid, 0, false, &t);
+                 if (r >= 0) {
+                         cmdline = strappend("_CMDLINE=", t);
+                         free(t);
+diff --git a/src/login/loginctl.c b/src/login/loginctl.c
+index e2b33a6..0e57e08 100644
+--- a/src/login/loginctl.c
++++ b/src/login/loginctl.c
+@@ -40,6 +40,7 @@
+ 
+ static char **arg_property = NULL;
+ static bool arg_all = false;
++static bool arg_full = false;
+ static bool arg_no_pager = false;
+ static const char *arg_kill_who = NULL;
+ static int arg_signal = SIGTERM;
+@@ -402,6 +403,9 @@ static void print_session_status_info(SessionStatusInfo *i) {
+ 
+         if (i->default_control_group) {
+                 unsigned c;
++                int output_flags =
++                        arg_all * OUTPUT_SHOW_ALL |
++                        arg_full * OUTPUT_FULL_WIDTH;
+ 
+                 printf("\t  CGroup: %s\n", i->default_control_group);
+ 
+@@ -412,7 +416,10 @@ static void print_session_status_info(SessionStatusInfo *i) {
+                         else
+                                 c = 0;
+ 
+-                        show_cgroup_and_extra_by_spec(i->default_control_group, "\t\t  ", c, false, arg_all, &i->leader, i->leader > 0 ? 1 : 0);
++                        show_cgroup_and_extra_by_spec(i->default_control_group,
++                                                      "\t\t  ", c, false, &i->leader,
++                                                      i->leader > 0 ? 1 : 0,
++                                                      output_flags);
+                 }
+         }
+ }
+@@ -454,6 +461,9 @@ static void print_user_status_info(UserStatusInfo *i) {
+ 
+         if (i->default_control_group) {
+                 unsigned c;
++                int output_flags =
++                        arg_all * OUTPUT_SHOW_ALL |
++                        arg_full * OUTPUT_FULL_WIDTH;
+ 
+                 printf("\t  CGroup: %s\n", i->default_control_group);
+ 
+@@ -464,7 +474,8 @@ static void print_user_status_info(UserStatusInfo *i) {
+                         else
+                                 c = 0;
+ 
+-                        show_cgroup_by_path(i->default_control_group, "\t\t  ", c, false, arg_all);
++                        show_cgroup_by_path(i->default_control_group, "\t\t  ",
++                                            c, false, output_flags);
+                 }
+         }
+ }
+@@ -1323,6 +1334,7 @@ static int help(void) {
+                "  -p --property=NAME     Show only properties by this name\n"
+                "  -a --all               Show all properties, including empty ones\n"
+                "     --kill-who=WHO      Who to send signal to\n"
++               "  --full                 Do not ellipsize output\n"
+                "  -s --signal=SIGNAL     Which signal to send\n"
+                "     --no-ask-password   Don't prompt for password\n"
+                "  -H --host=[USER@]HOST  Show information for remote host\n"
+@@ -1362,7 +1374,8 @@ static int parse_argv(int argc, char *argv[]) {
+                 ARG_VERSION = 0x100,
+                 ARG_NO_PAGER,
+                 ARG_KILL_WHO,
+-                ARG_NO_ASK_PASSWORD
++                ARG_NO_ASK_PASSWORD,
++                ARG_FULL,
+         };
+ 
+         static const struct option options[] = {
+@@ -1376,6 +1389,7 @@ static int parse_argv(int argc, char *argv[]) {
+                 { "host",            required_argument, NULL, 'H'                 },
+                 { "privileged",      no_argument,       NULL, 'P'                 },
+                 { "no-ask-password", no_argument,       NULL, ARG_NO_ASK_PASSWORD },
++                { "full",            no_argument,       NULL, ARG_FULL            },
+                 { NULL,              0,                 NULL, 0                   }
+         };
+ 
+@@ -1447,6 +1461,10 @@ static int parse_argv(int argc, char *argv[]) {
+                         arg_host = optarg;
+                         break;
+ 
++                case ARG_FULL:
++                        arg_full = true;
++                        break;
++
+                 case '?':
+                         return -EINVAL;
+ 
+diff --git a/src/shared/cgroup-show.c b/src/shared/cgroup-show.c
+index 2b79f37..2f2669f 100644
+--- a/src/shared/cgroup-show.c
++++ b/src/shared/cgroup-show.c
+@@ -51,7 +51,7 @@ static unsigned ilog10(unsigned long ul) {
+         return n;
+ }
+ 
+-static void show_pid_array(int pids[], unsigned n_pids, const char *prefix, unsigned n_columns, bool extra, bool more, bool kernel_threads) {
++static void show_pid_array(int pids[], unsigned n_pids, const char *prefix, unsigned n_columns, bool extra, bool more, bool kernel_threads, OutputFlags flags) {
+         unsigned i, m, pid_width;
+         pid_t biggest = 0;
+ 
+@@ -76,11 +76,14 @@ static void show_pid_array(int pids[], unsigned n_pids, const char *prefix, unsi
+         /* And sort */
+         qsort(pids, n_pids, sizeof(pid_t), compare);
+ 
+-        if (n_columns > pid_width+2)
+-                n_columns -= pid_width+2;
+-        else
+-                n_columns = 20;
+-
++        if(flags & OUTPUT_FULL_WIDTH)
++                n_columns = 0;
++        else {
++                if (n_columns > pid_width+2)
++                        n_columns -= pid_width+2;
++                else
++                        n_columns = 20;
++        }
+         for (i = 0; i < n_pids; i++) {
+                 char *t = NULL;
+ 
+@@ -99,7 +102,7 @@ static void show_pid_array(int pids[], unsigned n_pids, const char *prefix, unsi
+ }
+ 
+ 
+-static int show_cgroup_one_by_path(const char *path, const char *prefix, unsigned n_columns, bool more, bool kernel_threads) {
++static int show_cgroup_one_by_path(const char *path, const char *prefix, unsigned n_columns, bool more, bool kernel_threads, OutputFlags flags) {
+         char *fn;
+         FILE *f;
+         size_t n = 0, n_allocated = 0;
+@@ -149,7 +152,7 @@ static int show_cgroup_one_by_path(const char *path, const char *prefix, unsigne
+                 goto finish;
+ 
+         if (n > 0)
+-                show_pid_array(pids, n, prefix, n_columns, false, more, kernel_threads);
++                show_pid_array(pids, n, prefix, n_columns, false, more, kernel_threads, flags);
+ 
+         r = 0;
+ 
+@@ -162,7 +165,7 @@ finish:
+         return r;
+ }
+ 
+-int show_cgroup_by_path(const char *path, const char *prefix, unsigned n_columns, bool kernel_threads, bool all) {
++int show_cgroup_by_path(const char *path, const char *prefix, unsigned n_columns, bool kernel_threads, OutputFlags flags) {
+         DIR *d;
+         char *last = NULL;
+         char *p1 = NULL, *p2 = NULL, *fn = NULL, *gn = NULL;
+@@ -197,13 +200,13 @@ int show_cgroup_by_path(const char *path, const char *prefix, unsigned n_columns
+                         goto finish;
+                 }
+ 
+-                if (!all && cg_is_empty_recursive(NULL, k, false) > 0) {
++                if (!(flags & OUTPUT_SHOW_ALL) && cg_is_empty_recursive(NULL, k, false) > 0) {
+                         free(k);
+                         continue;
+                 }
+ 
+                 if (!shown_pids) {
+-                        show_cgroup_one_by_path(path, prefix, n_columns, true, kernel_threads);
++                        show_cgroup_one_by_path(path, prefix, n_columns, true, kernel_threads, flags);
+                         shown_pids = true;
+                 }
+ 
+@@ -220,7 +223,7 @@ int show_cgroup_by_path(const char *path, const char *prefix, unsigned n_columns
+                                 }
+                         }
+ 
+-                        show_cgroup_by_path(last, p1, n_columns-2, kernel_threads, all);
++                        show_cgroup_by_path(last, p1, n_columns-2, kernel_threads, flags);
+                         free(last);
+                 }
+ 
+@@ -231,7 +234,7 @@ int show_cgroup_by_path(const char *path, const char *prefix, unsigned n_columns
+                 goto finish;
+ 
+         if (!shown_pids)
+-                show_cgroup_one_by_path(path, prefix, n_columns, !!last, kernel_threads);
++                show_cgroup_one_by_path(path, prefix, n_columns, !!last, kernel_threads, flags);
+ 
+         if (last) {
+                 printf("%s%s%s\n", prefix, draw_special_char(DRAW_TREE_RIGHT),
+@@ -245,7 +248,7 @@ int show_cgroup_by_path(const char *path, const char *prefix, unsigned n_columns
+                         }
+                 }
+ 
+-                show_cgroup_by_path(last, p2, n_columns-2, kernel_threads, all);
++                show_cgroup_by_path(last, p2, n_columns-2, kernel_threads, flags);
+         }
+ 
+         r = 0;
+@@ -261,7 +264,7 @@ finish:
+         return r;
+ }
+ 
+-int show_cgroup(const char *controller, const char *path, const char *prefix, unsigned n_columns, bool kernel_threads, bool all) {
++int show_cgroup(const char *controller, const char *path, const char *prefix, unsigned n_columns, bool kernel_threads, OutputFlags flags) {
+         char *p;
+         int r;
+ 
+@@ -272,13 +275,13 @@ int show_cgroup(const char *controller, const char *path, const char *prefix, un
+         if (r < 0)
+                 return r;
+ 
+-        r = show_cgroup_by_path(p, prefix, n_columns, kernel_threads, all);
++        r = show_cgroup_by_path(p, prefix, n_columns, kernel_threads, flags);
+         free(p);
+ 
+         return r;
+ }
+ 
+-static int show_extra_pids(const char *controller, const char *path, const char *prefix, unsigned n_columns, const pid_t pids[], unsigned n_pids) {
++static int show_extra_pids(const char *controller, const char *path, const char *prefix, unsigned n_columns, const pid_t pids[], unsigned n_pids, OutputFlags flags) {
+         pid_t *copy;
+         unsigned i, j;
+         int r;
+@@ -314,26 +317,26 @@ static int show_extra_pids(const char *controller, const char *path, const char
+                 copy[j++] = pids[i];
+         }
+ 
+-        show_pid_array(copy, j, prefix, n_columns, true, false, false);
++        show_pid_array(copy, j, prefix, n_columns, true, false, false, flags);
+ 
+         free(copy);
+         return 0;
+ }
+ 
+-int show_cgroup_and_extra(const char *controller, const char *path, const char *prefix, unsigned n_columns, bool kernel_threads, bool all, const pid_t extra_pids[], unsigned n_extra_pids) {
++int show_cgroup_and_extra(const char *controller, const char *path, const char *prefix, unsigned n_columns, bool kernel_threads, const pid_t extra_pids[], unsigned n_extra_pids, OutputFlags flags) {
+         int r;
+ 
+         assert(controller);
+         assert(path);
+ 
+-        r = show_cgroup(controller, path, prefix, n_columns, kernel_threads, all);
++        r = show_cgroup(controller, path, prefix, n_columns, kernel_threads, flags);
+         if (r < 0)
+                 return r;
+ 
+-        return show_extra_pids(controller, path, prefix, n_columns, extra_pids, n_extra_pids);
++        return show_extra_pids(controller, path, prefix, n_columns, extra_pids, n_extra_pids, flags);
+ }
+ 
+-int show_cgroup_and_extra_by_spec(const char *spec, const char *prefix, unsigned n_columns, bool kernel_threads, bool all, const pid_t extra_pids[], unsigned n_extra_pids) {
++int show_cgroup_and_extra_by_spec(const char *spec, const char *prefix, unsigned n_columns, bool kernel_threads, const pid_t extra_pids[], unsigned n_extra_pids, OutputFlags flags) {
+         int r;
+         _cleanup_free_ char *controller = NULL, *path = NULL;
+ 
+@@ -343,5 +346,5 @@ int show_cgroup_and_extra_by_spec(const char *spec, const char *prefix, unsigned
+         if (r < 0)
+                 return r;
+ 
+-        return show_cgroup_and_extra(controller, path, prefix, n_columns, kernel_threads, all, extra_pids, n_extra_pids);
++        return show_cgroup_and_extra(controller, path, prefix, n_columns, kernel_threads, extra_pids, n_extra_pids, flags);
+ }
+diff --git a/src/shared/cgroup-show.h b/src/shared/cgroup-show.h
+index dba900a..72bc8a6 100644
+--- a/src/shared/cgroup-show.h
++++ b/src/shared/cgroup-show.h
+@@ -24,11 +24,13 @@
+ 
+ #include <stdbool.h>
+ #include <sys/types.h>
++#include "util.h"
++#include "logs-show.h"
+ 
+-int show_cgroup_by_path(const char *path, const char *prefix, unsigned columns, bool kernel_threads, bool all);
+-int show_cgroup(const char *controller, const char *path, const char *prefix, unsigned columns, bool kernel_threads, bool all);
++int show_cgroup_by_path(const char *path, const char *prefix, unsigned columns, bool kernel_threads, OutputFlags flags);
++int show_cgroup(const char *controller, const char *path, const char *prefix, unsigned columns, bool kernel_threads, OutputFlags flags);
+ 
+-int show_cgroup_and_extra_by_spec(const char *spec, const char *prefix, unsigned n_columns, bool kernel_threads, bool all, const pid_t extra_pids[], unsigned n_extra_pids);
+-int show_cgroup_and_extra(const char *controller, const char *path, const char *prefix, unsigned n_columns, bool kernel_threads, bool all, const pid_t extra_pids[], unsigned n_extra_pids);
++int show_cgroup_and_extra_by_spec(const char *spec, const char *prefix, unsigned n_columns, bool kernel_threads, const pid_t extra_pids[], unsigned n_extra_pids, OutputFlags flags);
++int show_cgroup_and_extra(const char *controller, const char *path, const char *prefix, unsigned n_columns, bool kernel_threads, const pid_t extra_pids[], unsigned n_extra_pids, OutputFlags flags);
+ 
+ #endif
+diff --git a/src/shared/logs-show.h b/src/shared/logs-show.h
+index 11cb41a..6c32aa7 100644
+--- a/src/shared/logs-show.h
++++ b/src/shared/logs-show.h
+@@ -26,28 +26,7 @@
+ #include <systemd/sd-journal.h>
+ 
+ #include "util.h"
+-
+-typedef enum OutputMode {
+-        OUTPUT_SHORT,
+-        OUTPUT_SHORT_MONOTONIC,
+-        OUTPUT_VERBOSE,
+-        OUTPUT_EXPORT,
+-        OUTPUT_JSON,
+-        OUTPUT_JSON_PRETTY,
+-        OUTPUT_JSON_SSE,
+-        OUTPUT_CAT,
+-        _OUTPUT_MODE_MAX,
+-        _OUTPUT_MODE_INVALID = -1
+-} OutputMode;
+-
+-typedef enum OutputFlags {
+-        OUTPUT_SHOW_ALL       = 1 << 0,
+-        OUTPUT_FOLLOW         = 1 << 1,
+-        OUTPUT_WARN_CUTOFF    = 1 << 2,
+-        OUTPUT_FULL_WIDTH     = 1 << 3,
+-        OUTPUT_COLOR          = 1 << 4,
+-        OUTPUT_CATALOG        = 1 << 5
+-} OutputFlags;
++#include "output-mode.h"
+ 
+ int output_journal(
+                 FILE *f,
+diff --git a/src/shared/output-mode.h b/src/shared/output-mode.h
+new file mode 100644
+index 0000000..0efd430
+--- /dev/null
++++ b/src/shared/output-mode.h
+@@ -0,0 +1,44 @@
++/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
++
++#pragma once
++
++/***
++  This file is part of systemd.
++
++  Copyright 2013 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/>.
++***/
++
++typedef enum OutputMode {
++        OUTPUT_SHORT,
++        OUTPUT_SHORT_MONOTONIC,
++        OUTPUT_VERBOSE,
++        OUTPUT_EXPORT,
++        OUTPUT_JSON,
++        OUTPUT_JSON_PRETTY,
++        OUTPUT_JSON_SSE,
++        OUTPUT_CAT,
++        _OUTPUT_MODE_MAX,
++        _OUTPUT_MODE_INVALID = -1
++} OutputMode;
++
++typedef enum OutputFlags {
++        OUTPUT_SHOW_ALL       = 1 << 0,
++        OUTPUT_FOLLOW         = 1 << 1,
++        OUTPUT_WARN_CUTOFF    = 1 << 2,
++        OUTPUT_FULL_WIDTH     = 1 << 3,
++        OUTPUT_COLOR          = 1 << 4,
++        OUTPUT_CATALOG        = 1 << 5
++} OutputFlags;
+diff --git a/src/shared/util.c b/src/shared/util.c
+index 49b5844..13f1a1c 100644
+--- a/src/shared/util.c
++++ b/src/shared/util.c
+@@ -905,13 +905,10 @@ 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) {
+-        char *r, *k;
++        char *r = NULL, *k;
+         int c;
+-        bool space = false;
+-        size_t left;
+         FILE *f;
+ 
+-        assert(max_length > 0);
+         assert(line);
+ 
+         if (pid == 0)
+@@ -927,47 +924,64 @@ int get_process_cmdline(pid_t pid, size_t max_length, bool comm_fallback, char *
+ 
+         if (!f)
+                 return -errno;
++        if (max_length == 0) {
++                size_t len = 1;
++                while ((c = getc(f)) != EOF) {
++                        k = realloc(r, len+1);
++                        if (k == NULL) {
++                                free(r);
++                                fclose(f);
++                                return -ENOMEM;
++                        }
++                        r = k;
++                        r[len-1] = isprint(c) ? c : ' ';
++                        r[len] = 0;
++                        len++;
++                }
++        } else {
++                bool space = false;
++                size_t left;
++                r = new(char, max_length);
++                if (!r) {
++                        fclose(f);
++                        return -ENOMEM;
++                }
+ 
+-        r = new(char, max_length);
+-        if (!r) {
+-                fclose(f);
+-                return -ENOMEM;
+-        }
++                k = r;
++                left = max_length;
++                while ((c = getc(f)) != EOF) {
++
++                        if (isprint(c)) {
++                                if (space) {
++                                        if (left <= 4)
++                                                break;
+ 
+-        k = r;
+-        left = max_length;
+-        while ((c = getc(f)) != EOF) {
++                                        *(k++) = ' ';
++                                        left--;
++                                        space = false;
++                                }
+ 
+-                if (isprint(c)) {
+-                        if (space) {
+                                 if (left <= 4)
+                                         break;
+ 
+-                                *(k++) = ' ';
++                                *(k++) = (char) c;
+                                 left--;
+-                                space = false;
+-                        }
+-
+-                        if (left <= 4)
+-                                break;
++                        }  else
++                                space = true;
++                }
+ 
+-                        *(k++) = (char) c;
+-                        left--;
+-                }  else
+-                        space = true;
++                if (left <= 4) {
++                        size_t n = MIN(left-1, 3U);
++                        memcpy(k, "...", n);
++                        k[n] = 0;
++                } else
++                        *k = 0;
+         }
+ 
+-        if (left <= 4) {
+-                size_t n = MIN(left-1, 3U);
+-                memcpy(k, "...", n);
+-                k[n] = 0;
+-        } else
+-                *k = 0;
+-
+         fclose(f);
+ 
+         /* Kernel threads have no argv[] */
+-        if (r[0] == 0) {
++        if (r == NULL || r[0] == 0) {
+                 char *t;
+                 int h;
+ 
+diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c
+index 012fd56..45f3438 100644
+--- a/src/systemctl/systemctl.c
++++ b/src/systemctl/systemctl.c
+@@ -2199,6 +2199,12 @@ static void print_status_info(UnitStatusInfo *i) {
+         char since1[FORMAT_TIMESTAMP_RELATIVE_MAX], *s1;
+         char since2[FORMAT_TIMESTAMP_MAX], *s2;
+         const char *path;
++        int flags =
++                arg_all * OUTPUT_SHOW_ALL |
++                (!on_tty() || pager_have()) * OUTPUT_FULL_WIDTH |
++                on_tty() * OUTPUT_COLOR |
++                !arg_quiet * OUTPUT_WARN_CUTOFF |
++                arg_full * OUTPUT_FULL_WIDTH;
+ 
+         assert(i);
+ 
+@@ -2427,17 +2433,11 @@ static void print_status_info(UnitStatusInfo *i) {
+                         if (i->control_pid > 0)
+                                 extra[k++] = i->control_pid;
+ 
+-                        show_cgroup_and_extra_by_spec(i->default_control_group, "\t\t  ", c, false, arg_all, extra, k);
++                        show_cgroup_and_extra_by_spec(i->default_control_group, "\t\t  ", c, false, extra, k, flags);
+                 }
+         }
+ 
+         if (i->id && arg_transport != TRANSPORT_SSH) {
+-                int flags =
+-                        arg_all * OUTPUT_SHOW_ALL |
+-                        (!on_tty() || pager_have()) * OUTPUT_FULL_WIDTH |
+-                        on_tty() * OUTPUT_COLOR |
+-                        !arg_quiet * OUTPUT_WARN_CUTOFF;
+-
+                 printf("\n");
+                 show_journal_by_unit(stdout,
+                                      i->id,
diff --git a/0040-man-typo-fixes.patch b/0040-man-typo-fixes.patch
new file mode 100644
index 0000000..3d34d86
--- /dev/null
+++ b/0040-man-typo-fixes.patch
@@ -0,0 +1,39 @@
+From e9f0da617941d787e7b887241087052b41d190d5 Mon Sep 17 00:00:00 2001
+From: Thomas Hindoe Paaboel Andersen <phomes at gmail.com>
+Date: Wed, 16 Jan 2013 21:01:30 +0100
+Subject: [PATCH] man: typo fixes (cherry picked from commit
+ a485210ce73fe1186fdc5fae481dc31773e14b3c)
+
+Conflicts:
+	man/sd_session_is_active.xml
+---
+ man/sd_session_is_active.xml | 2 +-
+ man/systemd.special.xml      | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/man/sd_session_is_active.xml b/man/sd_session_is_active.xml
+index a9107cb..73b3741 100644
+--- a/man/sd_session_is_active.xml
++++ b/man/sd_session_is_active.xml
+@@ -181,7 +181,7 @@
+                 <para><function>sd_session_get_display()</function>
+                 may be used to determine the X11 display of the
+                 session identified by the specified session
+-                identifier. The returned string is one of needs to be
++                identifier. The returned string needs to be
+                 freed with the libc
+                 <citerefentry><refentrytitle>free</refentrytitle><manvolnum>3</manvolnum></citerefentry>
+                 call after use.</para>
+diff --git a/man/systemd.special.xml b/man/systemd.special.xml
+index 20f1c1f..4909cfb 100644
+--- a/man/systemd.special.xml
++++ b/man/systemd.special.xml
+@@ -418,7 +418,7 @@
+                                         <para>This unit is supposed to
+                                         indicate when the network is
+                                         "up", but it is only very
+-                                        losely defined what that is
++                                        loosely defined what that is
+                                         supposed to mean. Also see <ulink
+                                         url="http://www.freedesktop.org/wiki/Software/systemd/NetworkTarget">Running
+                                         Services After the Network is
diff --git a/0041-dbus-add-Unit-s-PartOf-and-ConsistsOf-deps-to-intros.patch b/0041-dbus-add-Unit-s-PartOf-and-ConsistsOf-deps-to-intros.patch
new file mode 100644
index 0000000..60185f3
--- /dev/null
+++ b/0041-dbus-add-Unit-s-PartOf-and-ConsistsOf-deps-to-intros.patch
@@ -0,0 +1,29 @@
+From d1aafbf90f317b5dac97a78eddabd3f20a0be63d Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Thu, 17 Jan 2013 02:24:49 +0100
+Subject: [PATCH] dbus: add Unit's PartOf and ConsistsOf deps to introspection
+ XML (cherry picked from commit 4b20075e2fbd99caee8b6a782050969a087a1a21)
+
+---
+ src/core/dbus-unit.h | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/src/core/dbus-unit.h b/src/core/dbus-unit.h
+index ac6785a..d3c835d 100644
+--- a/src/core/dbus-unit.h
++++ b/src/core/dbus-unit.h
+@@ -69,11 +69,13 @@
+         "  <property name=\"Requisite\" type=\"as\" access=\"read\"/>\n" \
+         "  <property name=\"RequisiteOverridable\" type=\"as\" access=\"read\"/>\n" \
+         "  <property name=\"Wants\" type=\"as\" access=\"read\"/>\n"    \
+-        "  <property name=\"BindsTo\" type=\"as\" access=\"read\"/>\n"    \
++        "  <property name=\"BindsTo\" type=\"as\" access=\"read\"/>\n"  \
++        "  <property name=\"PartOf\" type=\"as\" access=\"read\"/>\n"   \
+         "  <property name=\"RequiredBy\" type=\"as\" access=\"read\"/>\n" \
+         "  <property name=\"RequiredByOverridable\" type=\"as\" access=\"read\"/>\n" \
+         "  <property name=\"WantedBy\" type=\"as\" access=\"read\"/>\n" \
+         "  <property name=\"BoundBy\" type=\"as\" access=\"read\"/>\n" \
++        "  <property name=\"ConsistsOf\" type=\"as\" access=\"read\"/>\n" \
+         "  <property name=\"Conflicts\" type=\"as\" access=\"read\"/>\n" \
+         "  <property name=\"ConflictedBy\" type=\"as\" access=\"read\"/>\n" \
+         "  <property name=\"Before\" type=\"as\" access=\"read\"/>\n"   \
diff --git a/0042-units-for-all-unit-settings-that-take-lists-allow-th.patch b/0042-units-for-all-unit-settings-that-take-lists-allow-th.patch
new file mode 100644
index 0000000..0255e17
--- /dev/null
+++ b/0042-units-for-all-unit-settings-that-take-lists-allow-th.patch
@@ -0,0 +1,1934 @@
+From 1ce7da3d31e2ac2d294b8da0798eeb628b133099 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Thu, 17 Jan 2013 02:27:06 +0100
+Subject: [PATCH] units: for all unit settings that take lists, allow the empty
+ string for resetting the lists
+
+https://bugzilla.redhat.com/show_bug.cgi?id=756787
+(cherry picked from commit 74051b9b5865586bf4d30b9075649af838fb92bd)
+
+Conflicts:
+	src/core/load-fragment.c
+---
+ man/systemd.exec.xml                  | 190 +++++++++++------
+ man/systemd.path.xml                  |  23 ++-
+ man/systemd.service.xml               |  92 ++++++---
+ man/systemd.socket.xml                |  25 ++-
+ man/systemd.timer.xml                 |  16 +-
+ man/systemd.unit.xml                  |  17 +-
+ src/core/load-fragment-gperf.gperf.m4 |  14 +-
+ src/core/load-fragment.c              | 372 +++++++++++++++++++---------------
+ src/core/path.c                       |  16 +-
+ src/core/path.h                       |   2 +
+ src/core/socket.c                     |  11 +-
+ src/core/socket.h                     |   2 +
+ src/core/timer.c                      |  11 +-
+ src/core/timer.h                      |   2 +
+ src/shared/conf-parser.c              |  46 ++++-
+ 15 files changed, 538 insertions(+), 301 deletions(-)
+
+diff --git a/man/systemd.exec.xml b/man/systemd.exec.xml
+index 302ac43..37d2dd7 100644
+--- a/man/systemd.exec.xml
++++ b/man/systemd.exec.xml
+@@ -133,10 +133,15 @@
+                                 of group names or IDs. This option may
+                                 be specified more than once in which
+                                 case all listed groups are set as
+-                                supplementary groups. This option does
+-                                not override but extends the list of
+-                                supplementary groups configured in the
+-                                system group database for the
++                                supplementary groups. When the empty
++                                string is assigned the list of
++                                supplementary groups is reset, and all
++                                assignments prior to this one will
++                                have no effect. In any way, this
++                                option does not override, but extends
++                                the list of supplementary groups
++                                configured in the system group
++                                database for the
+                                 user.</para></listitem>
+                         </varlistentry>
+ 
+@@ -244,7 +249,13 @@
+                                 <listitem><para>Controls the CPU
+                                 affinity of the executed
+                                 processes. Takes a space-separated
+-                                list of CPU indexes. See
++                                list of CPU indexes. This option may
++                                be specified more than once in which
++                                case the specificed CPU affinity masks
++                                are merged. If the empty string is
++                                assigned the mask is reset, all
++                                assignments prior to this will have no
++                                effect. See
+                                 <citerefentry><refentrytitle>sched_setaffinity</refentrytitle><manvolnum>2</manvolnum></citerefentry>
+                                 for details.</para></listitem>
+                         </varlistentry>
+@@ -271,7 +282,11 @@
+                                 in which case all listed variables
+                                 will be set. If the same variable is
+                                 set twice the later setting will
+-                                override the earlier setting. See
++                                override the earlier setting. If the
++                                empty string is assigned to this
++                                option the list of environment
++                                variables is reset, all prior
++                                assignments have no effect. See
+                                 <citerefentry><refentrytitle>environ</refentrytitle><manvolnum>7</manvolnum></citerefentry>
+                                 for details.</para></listitem>
+                         </varlistentry>
+@@ -288,14 +303,22 @@
+                                 parser strips leading and
+                                 trailing whitespace from the values
+                                 of assignments, unless you use
+-                                double quotes (").
+-                                The
+-                                argument passed should be an absolute
+-                                file name or wildcard expression, optionally prefixed with
++                                double quotes (").</para>
++
++                                <para>The argument passed should be an
++                                absolute file name or wildcard
++                                expression, optionally prefixed with
+                                 "-", which indicates that if the file
+                                 does not exist it won't be read and no
+-                                error or warning message is
+-                                logged. The files listed with this
++                                error or warning message is logged.
++                                This option may be specified more than
++                                once in which case all specified files
++                                are read. If the empty string is
++                                assigned to this option the list of
++                                file to read is reset, all prior
++                                assignments have no effect.</para>
++
++                                <para>The files listed with this
+                                 directive will be read shortly before
+                                 the process is executed. Settings from
+                                 these files override settings made
+@@ -305,7 +328,7 @@
+                                 these files the files will be read in
+                                 the order they are specified and the
+                                 later setting will override the
+-                                earlier setting. </para></listitem>
++                                earlier setting.</para></listitem>
+                         </varlistentry>
+ 
+                         <varlistentry>
+@@ -695,8 +718,13 @@
+                                 capability bounding set is not
+                                 modified on process execution, hence
+                                 no limits on the capabilities of the
+-                                process are
+-                                enforced.</para></listitem>
++                                process are enforced. This option may
++                                appear more than once in which case
++                                the bounding sets are merged. If the empty
++                                string is assigned to this option the
++                                bounding set is reset, and all prior
++                                settings have no
++                                effect.</para></listitem>
+                         </varlistentry>
+ 
+                         <varlistentry>
+@@ -710,8 +738,12 @@
+                                 <option>no-setuid-fixup</option>,
+                                 <option>no-setuid-fixup-locked</option>,
+                                 <option>noroot</option> and/or
+-                                <option>noroot-locked</option>.
+-                                </para></listitem>
++                                <option>noroot-locked</option>. This
++                                option may appear more than once in
++                                which case the secure bits are
++                                ORed. If the empty string is assigned
++                                to this option the bits are reset to
++                                0.</para></listitem>
+                         </varlistentry>
+ 
+                         <varlistentry>
+@@ -739,10 +771,10 @@
+                                 groups the executed processes shall be
+                                 made members of. Takes a
+                                 space-separated list of cgroup
+-                                identifiers. A cgroup identifier has a
+-                                format like
++                                identifiers. A cgroup identifier is
++                                formatted like
+                                 <filename>cpu:/foo/bar</filename>,
+-                                where "cpu" identifies the kernel
++                                where "cpu" indicates the kernel
+                                 control group controller used, and
+                                 <filename>/foo/bar</filename> is the
+                                 control group path. The controller
+@@ -751,30 +783,50 @@
+                                 hierarchy is implied. Alternatively,
+                                 the path and ":" may be omitted, in
+                                 which case the default control group
+-                                path for this unit is implied. This
+-                                option may be used to place executed
+-                                processes in arbitrary groups in
+-                                arbitrary hierarchies -- which can be
+-                                configured externally with additional
+-                                execution limits. By default systemd
+-                                will place all executed processes in
+-                                separate per-unit control groups
+-                                (named after the unit) in the systemd
+-                                named hierarchy. Since every process
+-                                can be in one group per hierarchy only
+-                                overriding the control group path in
+-                                the named systemd hierarchy will
+-                                disable automatic placement in the
+-                                default group. This option is
+-                                primarily intended to place executed
+-                                processes in specific paths in
+-                                specific kernel controller
+-                                hierarchies. It is however not
++                                path for this unit is implied.</para>
++
++                                <para>This option may be used to place
++                                executed processes in arbitrary groups
++                                in arbitrary hierarchies -- which may
++                                then be externally configured with
++                                additional execution limits. By
++                                default systemd will place all
++                                executed processes in separate
++                                per-unit control groups (named after
++                                the unit) in the systemd named
++                                hierarchy. This option is primarily
++                                intended to place executed processes
++                                in specific paths in specific kernel
++                                controller hierarchies. It is not
+                                 recommended to manipulate the service
+                                 control group path in the systemd
+                                 named hierarchy. For details about
+                                 control groups see <ulink
+-                                url="http://www.kernel.org/doc/Documentation/cgroups/cgroups.txt">cgroups.txt</ulink>.</para></listitem>
++                                url="http://www.kernel.org/doc/Documentation/cgroups/cgroups.txt">cgroups.txt</ulink>.</para>
++
++                                <para>This option may appear more than
++                                once, in which case the list of
++                                control group assignments is
++                                merged. If the same hierarchy gets two
++                                different paths assigned only the
++                                later setting will take effect. If the
++                                empty string is assigned to this
++                                option the list of control group
++                                assignments is reset, all previous
++                                assignments will have no
++                                effect.</para>
++
++                                <para>Note that the list of control
++                                group assignments of a unit is
++                                extended implicitly based on the
++                                settings of
++                                <varname>DefaultControllers=</varname>
++                                of
++                                <citerefentry><refentrytitle>systemd.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
++                                but a unit's
++                                <varname>ControlGroup=</varname>
++                                setting for a specific controller
++                                takes precedence.</para></listitem>
+                         </varlistentry>
+ 
+                         <varlistentry>
+@@ -832,8 +884,8 @@
+                                 the controller and the default unit
+                                 cgroup path is implied. Thus, using
+                                 <varname>ControlGroupAttribute=</varname>
+-                                is in most case sufficient to make use
+-                                of control group enforcements,
++                                is in most cases sufficient to make
++                                use of control group enforcements,
+                                 explicit
+                                 <varname>ControlGroup=</varname> are
+                                 only necessary in case the implied
+@@ -844,7 +896,23 @@
+                                 url="http://www.kernel.org/doc/Documentation/cgroups/cgroups.txt">cgroups.txt</ulink>. This
+                                 option may appear more than once, in
+                                 order to set multiple control group
+-                                attributes.</para></listitem>
++                                attributes. If this option is used
++                                multiple times for the same cgroup
++                                attribute only the later setting takes
++                                effect. If the empty string is
++                                assigned to this option the list of
++                                attributes is reset, all previous
++                                cgroup attribute settings have no
++                                effect, including those done with
++                                <varname>CPUShares=</varname>,
++                                <varname>MemoryLimit=</varname>,
++                                <varname>MemorySoftLimit</varname>,
++                                <varname>DeviceAllow=</varname>,
++                                <varname>DeviceDeny=</varname>,
++                                <varname>BlockIOWeight=</varname>,
++                                <varname>BlockIOReadBandwidth=</varname>,
++                                <varname>BlockIOWriteBandwidth=</varname>.
++                                </para></listitem>
+                         </varlistentry>
+ 
+                         <varlistentry>
+@@ -988,18 +1056,21 @@
+                                 usual file access controls would
+                                 permit this. Directories listed in
+                                 <varname>InaccessibleDirectories=</varname>
+-                                will be made inaccessible for processes
+-                                inside the namespace. Note that
+-                                restricting access with these options
+-                                does not extend to submounts of a
+-                                directory. You must list submounts
+-                                separately in these settings to
+-                                ensure the same limited access. These
+-                                options may be specified more than
+-                                once in which case all directories
+-                                listed will have limited access from
+-                                within the
+-                                namespace.</para></listitem>
++                                will be made inaccessible for
++                                processes inside the namespace. Note
++                                that restricting access with these
++                                options does not extend to submounts
++                                of a directory. You must list
++                                submounts separately in these settings
++                                to ensure the same limited
++                                access. These options may be specified
++                                more than once in which case all
++                                directories listed will have limited
++                                access from within the namespace. If
++                                the empty string is assigned to this
++                                option the specific list is reset, and
++                                all prior assignments have no
++                                effect.</para></listitem>
+                         </varlistentry>
+ 
+                         <varlistentry>
+@@ -1131,8 +1202,13 @@
+                                 <function>exit_group</function>,
+                                 <function>exit</function> system calls
+                                 are implicitly whitelisted and don't
+-                                need to be listed
+-                                explicitly.</para></listitem>
++                                need to be listed explicitly. This
++                                option may be specified more than once
++                                in which case the filter masks are
++                                merged. If the empty string is
++                                assigned the filter is reset, all
++                                prior assignments will have no
++                                effect.</para></listitem>
+                         </varlistentry>
+ 
+                 </variablelist>
+diff --git a/man/systemd.path.xml b/man/systemd.path.xml
+index a27a97b..0c2d1a5 100644
+--- a/man/systemd.path.xml
++++ b/man/systemd.path.xml
+@@ -130,13 +130,15 @@
+                                 specified. <varname>PathChanged=</varname>
+                                 may be used to watch a file or
+                                 directory and activate the configured
+-                                unit whenever it changes. It is not activated
+-                                on every write to the watched file but it is
+-                                activated if the file which was open for writing
+-                                gets closed. <varname>PathModified=</varname>
+-                                is similar, but additionally it is activated
+-                                also on simple writes to the watched file.
+-
++                                unit whenever it changes. It is not
++                                activated on every write to the
++                                watched file but it is activated if
++                                the file which was open for writing
++                                gets
++                                closed. <varname>PathModified=</varname>
++                                is similar, but additionally it is
++                                activated also on simple writes to the
++                                watched file.
+                                 <varname>DirectoryNotEmpty=</varname>
+                                 may be used to watch a directory and
+                                 activate the configured unit whenever
+@@ -148,7 +150,12 @@
+ 
+                                 <para>Multiple directives may be
+                                 combined, of the same and of different
+-                                types, to watch multiple paths.</para>
++                                types, to watch multiple paths. If the
++                                empty string is assigned to any of
++                                these options the list of paths to
++                                watch is reset, and any prior
++                                assignments of these options will not
++                                have any effect.</para>
+ 
+                                 <para>If a path is already existing
+                                 (in case of
+diff --git a/man/systemd.service.xml b/man/systemd.service.xml
+index 598e863..8dbef49 100644
+--- a/man/systemd.service.xml
++++ b/man/systemd.service.xml
+@@ -315,14 +315,18 @@
+                                 for compatibility with parsers
+                                 suitable for XDG
+                                 <filename>.desktop</filename> files.
+-                                The commands are invoked one by
+-                                one sequentially in the order they
+-                                appear in the unit file.
+-                                When <varname>Type</varname> is
+-                                not <option>oneshot</option>, only one
++                                The commands are invoked one by one
++                                sequentially in the order they appear
++                                in the unit file.  When
++                                <varname>Type</varname> is not
++                                <option>oneshot</option>, only one
+                                 command may be given. Lone semicolons
+                                 may be escaped as
+-                                '<literal>\;</literal>'.</para>
++                                '<literal>\;</literal>'. If the empty
++                                string is assigned to this option the
++                                list of commands to start is reset,
++                                prior assignments of this option will
++                                have no effect.</para>
+ 
+                                 <para>Unless
+                                 <varname>Type=forking</varname> is
+@@ -338,23 +342,6 @@
+                                 line (i.e. the program to execute) may
+                                 not include specifiers.</para>
+ 
+-                                <para>Optionally, if the absolute file
+-                                name is prefixed with
+-                                '<literal>@</literal>', the second token
+-                                will be passed as
+-                                <literal>argv[0]</literal> to the
+-                                executed process, followed by the
+-                                further arguments specified. If the
+-                                absolute file name is prefixed with
+-                                '<literal>-</literal>' an exit code of
+-                                the command normally considered a
+-                                failure (i.e. non-zero exit status or
+-                                abnormal exit due to signal) is ignored
+-                                and considered success. If both
+-                                '<literal>-</literal>' and
+-                                '<literal>@</literal>' are used they
+-                                can appear in either order.</para>
+-
+                                 <para>On top of that basic environment
+                                 variable substitution is
+                                 supported. Use
+@@ -376,6 +363,23 @@
+                                 literal and absolute path
+                                 name.</para>
+ 
++                                <para>Optionally, if the absolute file
++                                name is prefixed with
++                                '<literal>@</literal>', the second token
++                                will be passed as
++                                <literal>argv[0]</literal> to the
++                                executed process, followed by the
++                                further arguments specified. If the
++                                absolute file name is prefixed with
++                                '<literal>-</literal>' an exit code of
++                                the command normally considered a
++                                failure (i.e. non-zero exit status or
++                                abnormal exit due to signal) is ignored
++                                and considered success. If both
++                                '<literal>-</literal>' and
++                                '<literal>@</literal>' are used they
++                                can appear in either order.</para>
++
+                                 <para>Note that this setting does not
+                                 directly support shell command
+                                 lines. If shell command lines are to
+@@ -616,8 +620,14 @@
+                                 SIGKILL</literal>", ensures that exit
+                                 codes 1, 2, 8 and the termination
+                                 signal SIGKILL are considered clean
+-                                service
+-                                terminations.</para></listitem>
++                                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>
+                         </varlistentry>
+ 
+                         <varlistentry>
+@@ -638,9 +648,16 @@
+                                 logic. Example:
+                                 "<literal>RestartPreventExitStatus=1 6
+                                 SIGABRT</literal>", ensures that exit
+-                                codes 1 and 6 and the termination signal
+-                                SIGABRT will not result in automatic
+-                                service restarting.</para></listitem>
++                                codes 1 and 6 and the termination
++                                signal SIGABRT will not result in
++                                automatic service restarting. This
++                                option may appear more than once in
++                                which case the list of restart preventing
++                                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>
+@@ -754,13 +771,22 @@
+                                 same time. Also note that a different
+                                 service may be activated on incoming
+                                 traffic than inherits the sockets. Or
+-                                in other words: The
++                                in other words: the
+                                 <varname>Service=</varname> setting of
+                                 <filename>.socket</filename> units
+-                                doesn't have to match the inverse of the
+-                                <varname>Sockets=</varname> setting of
+-                                the <filename>.service</filename> it
+-                                refers to.</para></listitem>
++                                doesn't have to match the inverse of
++                                the <varname>Sockets=</varname>
++                                setting of the
++                                <filename>.service</filename> it
++                                refers to.</para>
++
++                                <para>This option may appear more than
++                                once, in which case the list of socket
++                                units is merged. If the empty string
++                                is assigned to this option the list of
++                                sockets is reset, all prior uses of
++                                this setting will have no
++                                effect.</para></listitem>
+                         </varlistentry>
+ 
+                         <varlistentry>
+diff --git a/man/systemd.socket.xml b/man/systemd.socket.xml
+index 4b1fcc8..df54274 100644
+--- a/man/systemd.socket.xml
++++ b/man/systemd.socket.xml
+@@ -205,19 +205,24 @@
+ 
+                                 <para>These options may be specified
+                                 more than once in which case incoming
+-                                traffic on any of the sockets will trigger
+-                                service activation, and all listed
+-                                sockets will be passed to the service,
+-                                regardless whether there is incoming
+-                                traffic on them or not.</para>
+-
+-                                <para>If an IP address is used here, it
+-                                is often desirable to listen on it
++                                traffic on any of the sockets will
++                                trigger service activation, and all
++                                listed sockets will be passed to the
++                                service, regardless whether there is
++                                incoming traffic on them or not. If
++                                the empty string is assigned to any of
++                                these options, the list of addresses
++                                to listen on is reset, all prior uses
++                                of any of these options will have no
++                                effect.</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 whether it will be up and
+-                                running ever at all. To deal with this it is
+-                                recommended to set the
++                                running ever at all. To deal with this
++                                it is recommended to set the
+                                 <varname>FreeBind=</varname> option
+                                 described below.</para></listitem>
+                         </varlistentry>
+diff --git a/man/systemd.timer.xml b/man/systemd.timer.xml
+index 5cc543e..80c8061 100644
+--- a/man/systemd.timer.xml
++++ b/man/systemd.timer.xml
+@@ -115,7 +115,7 @@
+                                 machine was booted
+                                 up. <varname>OnStartupSec=</varname>
+                                 defines a timer relative to when
+-                                systemd was
++                                systemd was first
+                                 started. <varname>OnUnitActiveSec=</varname>
+                                 defines a timer relative to when the
+                                 unit the timer is activating was last
+@@ -157,7 +157,13 @@
+                                 <para>These are monotonic timers,
+                                 independent of wall-clock time and timezones. If the
+                                 computer is temporarily suspended, the
+-                                monotonic clock stops too.</para></listitem>
++                                monotonic clock stops too.</para>
++
++                                <para>If the empty string is assigned
++                                to any of these options the list of
++                                timers is reset, and all prior
++                                assignments will have no
++                                effect.</para></listitem>
+ 
+                         </varlistentry>
+ 
+@@ -169,8 +175,10 @@
+                                 event expressions. See
+                                 <citerefentry><refentrytitle>systemd.time</refentrytitle><manvolnum>7</manvolnum></citerefentry>
+                                 for more information on the syntax of
+-                                calendar event
+-                                expressions.</para></listitem>
++                                calendar event expressions. Otherwise
++                                the semantics are similar to
++                                <varname>OnActiveSec=</varname> and
++                                related settings.</para></listitem>
+                         </varlistentry>
+ 
+                         <varlistentry>
+diff --git a/man/systemd.unit.xml b/man/systemd.unit.xml
+index 54671e7..af25310 100644
+--- a/man/systemd.unit.xml
++++ b/man/systemd.unit.xml
+@@ -350,8 +350,13 @@
+                                 reference documentation that explains
+                                 what the unit's purpose is, followed
+                                 by how it is configured, followed by
+-                                any other related
+-                                documentation.</para></listitem>
++                                any other related documentation. This
++                                option may be specified more than once
++                                in which case the specified list of
++                                URIs is merged. If the empty string is
++                                assigned to this option the list is
++                                reset and all prior assignments will
++                                have no effect.</para></listitem>
+                         </varlistentry>
+ 
+                         <varlistentry>
+@@ -1003,8 +1008,12 @@
+                                 pipe symbol must be passed first, the
+                                 exclamation second. Except for
+                                 <varname>ConditionPathIsSymbolicLink=</varname>,
+-                                all path checks follow
+-                                symlinks.</para></listitem>
++                                all path checks follow symlinks. If
++                                any of these options is assigned the
++                                empty string the list of conditions is
++                                reset completely, all previous
++                                condition settings (of any kind) will
++                                have no effect.</para></listitem>
+                         </varlistentry>
+ 
+                         <varlistentry>
+diff --git a/src/core/load-fragment-gperf.gperf.m4 b/src/core/load-fragment-gperf.gperf.m4
+index 7fba0cf..1783ad0 100644
+--- a/src/core/load-fragment-gperf.gperf.m4
++++ b/src/core/load-fragment-gperf.gperf.m4
+@@ -174,13 +174,13 @@ Service.FsckPassNo,              config_parse_fsck_passno,           0,
+ EXEC_CONTEXT_CONFIG_ITEMS(Service)m4_dnl
+ KILL_CONTEXT_CONFIG_ITEMS(Service)m4_dnl
+ m4_dnl
+-Socket.ListenStream,             config_parse_socket_listen,         0,                             0
+-Socket.ListenDatagram,           config_parse_socket_listen,         0,                             0
+-Socket.ListenSequentialPacket,   config_parse_socket_listen,         0,                             0
+-Socket.ListenFIFO,               config_parse_socket_listen,         0,                             0
+-Socket.ListenNetlink,            config_parse_socket_listen,         0,                             0
+-Socket.ListenSpecial,            config_parse_socket_listen,         0,                             0
+-Socket.ListenMessageQueue,       config_parse_socket_listen,         0,                             0
++Socket.ListenStream,             config_parse_socket_listen,         SOCKET_SOCKET,                 0
++Socket.ListenDatagram,           config_parse_socket_listen,         SOCKET_SOCKET,                 0
++Socket.ListenSequentialPacket,   config_parse_socket_listen,         SOCKET_SOCKET,                 0
++Socket.ListenFIFO,               config_parse_socket_listen,         SOCKET_FIFO,                   0
++Socket.ListenNetlink,            config_parse_socket_listen,         SOCKET_SOCKET,                 0
++Socket.ListenSpecial,            config_parse_socket_listen,         SOCKET_SPECIAL,                0
++Socket.ListenMessageQueue,       config_parse_socket_listen,         SOCKET_MQUEUE,                 0
+ Socket.BindIPv6Only,             config_parse_socket_bind,           0,                             0,
+ Socket.Backlog,                  config_parse_unsigned,              0,                             offsetof(Socket, backlog)
+ Socket.BindToDevice,             config_parse_socket_bindtodevice,   0,                             0
+diff --git a/src/core/load-fragment.c b/src/core/load-fragment.c
+index e2ea003..40f4bfd 100644
+--- a/src/core/load-fragment.c
++++ b/src/core/load-fragment.c
+@@ -91,11 +91,11 @@ int config_parse_unit_deps(
+ 
+                 t = strndup(w, l);
+                 if (!t)
+-                        return -ENOMEM;
++                        return log_oom();
+ 
+                 k = unit_name_printf(u, t);
+                 if (!k)
+-                        return -ENOMEM;
++                        return log_oom();
+ 
+                 r = unit_add_dependency_by_name(u, d, k, NULL, true);
+                 if (r < 0)
+@@ -117,8 +117,7 @@ int config_parse_unit_string_printf(
+                 void *userdata) {
+ 
+         Unit *u = userdata;
+-        char *k;
+-        int r;
++        _cleanup_free_ char *k = NULL;
+ 
+         assert(filename);
+         assert(lvalue);
+@@ -127,12 +126,9 @@ int config_parse_unit_string_printf(
+ 
+         k = unit_full_printf(u, rvalue);
+         if (!k)
+-                return -ENOMEM;
+-
+-        r = config_parse_string(filename, line, section, lvalue, ltype, k, data, userdata);
+-        free (k);
++                return log_oom();
+ 
+-        return r;
++        return config_parse_string(filename, line, section, lvalue, ltype, k, data, userdata);
+ }
+ 
+ int config_parse_unit_strv_printf(
+@@ -146,8 +142,7 @@ int config_parse_unit_strv_printf(
+                 void *userdata) {
+ 
+         Unit *u = userdata;
+-        char *k;
+-        int r;
++        _cleanup_free_ char *k = NULL;
+ 
+         assert(filename);
+         assert(lvalue);
+@@ -156,12 +151,9 @@ int config_parse_unit_strv_printf(
+ 
+         k = unit_full_printf(u, rvalue);
+         if (!k)
+-                return -ENOMEM;
+-
+-        r = config_parse_strv(filename, line, section, lvalue, ltype, k, data, userdata);
+-        free(k);
++                return log_oom();
+ 
+-        return r;
++        return config_parse_strv(filename, line, section, lvalue, ltype, k, data, userdata);
+ }
+ 
+ int config_parse_unit_path_printf(
+@@ -175,8 +167,7 @@ int config_parse_unit_path_printf(
+                 void *userdata) {
+ 
+         Unit *u = userdata;
+-        char *k;
+-        int r;
++        _cleanup_free_ char *k = NULL;
+ 
+         assert(filename);
+         assert(lvalue);
+@@ -187,10 +178,7 @@ int config_parse_unit_path_printf(
+         if (!k)
+                 return log_oom();
+ 
+-        r = config_parse_path(filename, line, section, lvalue, ltype, k, data, userdata);
+-        free(k);
+-
+-        return r;
++        return config_parse_path(filename, line, section, lvalue, ltype, k, data, userdata);
+ }
+ 
+ int config_parse_socket_listen(
+@@ -213,50 +201,39 @@ int config_parse_socket_listen(
+ 
+         s = SOCKET(data);
+ 
++        if (isempty(rvalue)) {
++                /* An empty assignment removes all ports */
++                socket_free_ports(s);
++                return 0;
++        }
++
+         p = new0(SocketPort, 1);
+         if (!p)
+-                return -ENOMEM;
+-
+-        if (streq(lvalue, "ListenFIFO")) {
+-                p->type = SOCKET_FIFO;
+-
+-                if (!(p->path = unit_full_printf(UNIT(s), rvalue))) {
+-                        free(p);
+-                        return -ENOMEM;
+-                }
+-
+-                path_kill_slashes(p->path);
+-
+-        } else if (streq(lvalue, "ListenSpecial")) {
+-                p->type = SOCKET_SPECIAL;
+-
+-                if (!(p->path = unit_full_printf(UNIT(s), rvalue))) {
+-                        free(p);
+-                        return -ENOMEM;
+-                }
+-
+-                path_kill_slashes(p->path);
+-
+-        } else if (streq(lvalue, "ListenMessageQueue")) {
++                return log_oom();
+ 
+-                p->type = SOCKET_MQUEUE;
++        if (ltype != SOCKET_SOCKET) {
+ 
+-                if (!(p->path = unit_full_printf(UNIT(s), rvalue))) {
++                p->type = ltype;
++                p->path = unit_full_printf(UNIT(s), rvalue);
++                if (!p->path) {
+                         free(p);
+-                        return -ENOMEM;
++                        return log_oom();
+                 }
+ 
+                 path_kill_slashes(p->path);
+ 
+         } else if (streq(lvalue, "ListenNetlink")) {
+-                char  *k;
++                _cleanup_free_ char  *k = NULL;
+                 int r;
+ 
+                 p->type = SOCKET_SOCKET;
+                 k = unit_full_printf(UNIT(s), rvalue);
+-                r = socket_address_parse_netlink(&p->address, k);
+-                free(k);
++                if (!k) {
++                        free(p);
++                        return log_oom();
++                }
+ 
++                r = socket_address_parse_netlink(&p->address, k);
+                 if (r < 0) {
+                         log_error("[%s:%u] Failed to parse address value, ignoring: %s", filename, line, rvalue);
+                         free(p);
+@@ -264,14 +241,17 @@ int config_parse_socket_listen(
+                 }
+ 
+         } else {
+-                char *k;
++                _cleanup_free_ char *k = NULL;
+                 int r;
+ 
+                 p->type = SOCKET_SOCKET;
+                 k = unit_full_printf(UNIT(s), rvalue);
+-                r = socket_address_parse(&p->address, k);
+-                free(k);
++                if (!k) {
++                        free(p);
++                        return log_oom();
++                }
+ 
++                r = socket_address_parse(&p->address, k);
+                 if (r < 0) {
+                         log_error("[%s:%u] Failed to parse address value, ignoring: %s", filename, line, rvalue);
+                         free(p);
+@@ -430,12 +410,18 @@ int config_parse_exec(
+         assert(rvalue);
+         assert(e);
+ 
++        e += ltype;
++
++        if (isempty(rvalue)) {
++                /* An empty assignment resets the list */
++                exec_command_free_list(*e);
++                *e = NULL;
++                return 0;
++        }
++
+         /* We accept an absolute path as first argument, or
+          * alternatively an absolute prefixed with @ to allow
+          * overriding of argv[0]. */
+-
+-        e += ltype;
+-
+         for (;;) {
+                 int i;
+                 char *w;
+@@ -480,7 +466,7 @@ int config_parse_exec(
+ 
+                 n = new(char*, k + !honour_argv0);
+                 if (!n)
+-                        return -ENOMEM;
++                        return log_oom();
+ 
+                 k = 0;
+                 FOREACH_WORD_QUOTED(w, l, rvalue, state) {
+@@ -494,7 +480,7 @@ int config_parse_exec(
+ 
+                                 path = strndup(w, l);
+                                 if (!path) {
+-                                        r = -ENOMEM;
++                                        r = log_oom();
+                                         goto fail;
+                                 }
+ 
+@@ -509,7 +495,7 @@ int config_parse_exec(
+ 
+                                 c = n[k++] = cunescape_length(w, l);
+                                 if (!c) {
+-                                        r = -ENOMEM;
++                                        r = log_oom();
+                                         goto fail;
+                                 }
+ 
+@@ -532,7 +518,7 @@ int config_parse_exec(
+                 if (!path) {
+                         path = strdup(n[0]);
+                         if (!path) {
+-                                r = -ENOMEM;
++                                r = log_oom();
+                                 goto fail;
+                         }
+                 }
+@@ -541,7 +527,7 @@ int config_parse_exec(
+ 
+                 nce = new0(ExecCommand, 1);
+                 if (!nce) {
+-                        r = -ENOMEM;
++                        r = log_oom();
+                         goto fail;
+                 }
+ 
+@@ -589,8 +575,9 @@ int config_parse_socket_bindtodevice(
+         assert(data);
+ 
+         if (rvalue[0] && !streq(rvalue, "*")) {
+-                if (!(n = strdup(rvalue)))
+-                        return -ENOMEM;
++                n = strdup(rvalue);
++                if (!n)
++                        return log_oom();
+         } else
+                 n = NULL;
+ 
+@@ -718,7 +705,6 @@ int config_parse_exec_cpu_sched_prio(
+                 return 0;
+         }
+ 
+-
+         /* On Linux RR/FIFO range from 1 to 99 and OTHER/BATCH may only be 0 */
+         min = sched_get_priority_min(c->cpu_sched_policy);
+         max = sched_get_priority_max(c->cpu_sched_policy);
+@@ -754,6 +740,14 @@ int config_parse_exec_cpu_affinity(
+         assert(rvalue);
+         assert(data);
+ 
++        if (isempty(rvalue)) {
++                /* An empty assignment resets the CPU list */
++                if (c->cpuset)
++                        CPU_FREE(c->cpuset);
++                c->cpuset = NULL;
++                return 0;
++        }
++
+         FOREACH_WORD_QUOTED(w, l, rvalue, state) {
+                 char _cleanup_free_ *t = NULL;
+                 int r;
+@@ -761,14 +755,14 @@ int config_parse_exec_cpu_affinity(
+ 
+                 t = strndup(w, l);
+                 if (!t)
+-                        return -ENOMEM;
++                        return log_oom();
+ 
+                 r = safe_atou(t, &cpu);
+ 
+                 if (!c->cpuset) {
+                         c->cpuset = cpu_set_malloc(&c->cpuset_ncpus);
+                         if (!c->cpuset)
+-                                return -ENOMEM;
++                                return log_oom();
+                 }
+ 
+                 if (r < 0 || cpu >= c->cpuset_ncpus) {
+@@ -801,9 +795,10 @@ int config_parse_exec_capabilities(
+         assert(rvalue);
+         assert(data);
+ 
+-        if (!(cap = cap_from_text(rvalue))) {
++        cap = cap_from_text(rvalue);
++        if (!cap) {
+                 if (errno == ENOMEM)
+-                        return -ENOMEM;
++                        return log_oom();
+ 
+                 log_error("[%s:%u] Failed to parse capabilities, ignoring: %s", filename, line, rvalue);
+                 return 0;
+@@ -836,6 +831,12 @@ int config_parse_exec_secure_bits(
+         assert(rvalue);
+         assert(data);
+ 
++        if (isempty(rvalue)) {
++                /* An empty assignment resets the field */
++                c->secure_bits = 0;
++                return 0;
++        }
++
+         FOREACH_WORD_QUOTED(w, l, rvalue, state) {
+                 if (first_word(w, "keep-caps"))
+                         c->secure_bits |= SECURE_KEEP_CAPS;
+@@ -881,6 +882,12 @@ int config_parse_bounding_set(
+         assert(rvalue);
+         assert(data);
+ 
++        if (isempty(rvalue)) {
++                /* An empty assignment resets */
++                *capability_bounding_set_drop = 0;
++                return 0;
++        }
++
+         if (rvalue[0] == '~') {
+                 invert = true;
+                 rvalue++;
+@@ -898,7 +905,7 @@ int config_parse_bounding_set(
+ 
+                 t = strndup(w, l);
+                 if (!t)
+-                        return -ENOMEM;
++                        return log_oom();
+ 
+                 r = cap_from_name(t, &cap);
+                 if (r < 0) {
+@@ -945,9 +952,11 @@ int config_parse_limit(
+                 return 0;
+         }
+ 
+-        if (!*rl)
+-                if (!(*rl = new(struct rlimit, 1)))
+-                        return -ENOMEM;
++        if (!*rl) {
++                *rl = new(struct rlimit, 1);
++                if (!*rl)
++                        return log_oom();
++        }
+ 
+         (*rl)->rlim_cur = (*rl)->rlim_max = (rlim_t) u;
+         return 0;
+@@ -968,21 +977,28 @@ int config_parse_unit_cgroup(
+         size_t l;
+         char *state;
+ 
++        if (isempty(rvalue)) {
++                /* An empty assignment resets the list */
++                cgroup_bonding_free_list(u->cgroup_bondings, false);
++                u->cgroup_bondings = NULL;
++                return 0;
++        }
++
+         FOREACH_WORD_QUOTED(w, l, rvalue, state) {
+                 char _cleanup_free_ *t = NULL, *k = NULL, *ku = NULL;
+                 int r;
+ 
+                 t = strndup(w, l);
+                 if (!t)
+-                        return -ENOMEM;
++                        return log_oom();
+ 
+                 k = unit_full_printf(u, t);
+                 if (!k)
+-                        return -ENOMEM;
++                        return log_oom();
+ 
+                 ku = cunescape(k);
+                 if (!ku)
+-                        return -ENOMEM;
++                        return log_oom();
+ 
+                 r = unit_add_cgroup_from_text(u, ku);
+                 if (r < 0) {
+@@ -1071,7 +1087,8 @@ int config_parse_kill_signal(
+         assert(rvalue);
+         assert(sig);
+ 
+-        if ((r = signal_from_string_try_harder(rvalue)) <= 0) {
++        r = signal_from_string_try_harder(rvalue);
++        if (r <= 0) {
+                 log_error("[%s:%u] Failed to parse kill signal, ignoring: %s", filename, line, rvalue);
+                 return 0;
+         }
+@@ -1106,7 +1123,7 @@ int config_parse_exec_mount_flags(
+ 
+                 t = strndup(w, l);
+                 if (!t)
+-                        return -ENOMEM;
++                        return log_oom();
+ 
+                 if (streq(t, "shared"))
+                         flags |= MS_SHARED;
+@@ -1147,6 +1164,12 @@ int config_parse_timer(
+         assert(rvalue);
+         assert(data);
+ 
++        if (isempty(rvalue)) {
++                /* Empty assignment resets list */
++                timer_free_values(t);
++                return 0;
++        }
++
+         b = timer_base_from_string(lvalue);
+         if (b < 0) {
+                 log_error("[%s:%u] Failed to parse timer base, ignoring: %s", filename, line, lvalue);
+@@ -1171,7 +1194,7 @@ int config_parse_timer(
+ 
+         v = new0(TimerValue, 1);
+         if (!v)
+-                return -ENOMEM;
++                return log_oom();
+ 
+         v->base = b;
+         v->clock_id = id;
+@@ -1197,6 +1220,7 @@ int config_parse_timer_unit(
+         int r;
+         DBusError error;
+         Unit *u;
++        _cleanup_free_ char *p = NULL;
+ 
+         assert(filename);
+         assert(lvalue);
+@@ -1205,12 +1229,16 @@ int config_parse_timer_unit(
+ 
+         dbus_error_init(&error);
+ 
+-        if (endswith(rvalue, ".timer")) {
++        p = unit_name_printf(UNIT(t), rvalue);
++        if (!p)
++                return log_oom();
++
++        if (endswith(p, ".timer")) {
+                 log_error("[%s:%u] Unit cannot be of type timer, ignoring: %s", filename, line, rvalue);
+                 return 0;
+         }
+ 
+-        r = manager_load_unit(UNIT(t)->manager, rvalue, NULL, NULL, &u);
++        r = manager_load_unit(UNIT(t)->manager, p, NULL, NULL, &u);
+         if (r < 0) {
+                 log_error("[%s:%u] Failed to load unit %s, ignoring: %s", filename, line, rvalue, bus_error(&error, r));
+                 dbus_error_free(&error);
+@@ -1242,6 +1270,12 @@ int config_parse_path_spec(
+         assert(rvalue);
+         assert(data);
+ 
++        if (isempty(rvalue)) {
++                /* Empty assignment clears list */
++                path_free_specs(p);
++                return 0;
++        }
++
+         b = path_type_from_string(lvalue);
+         if (b < 0) {
+                 log_error("[%s:%u] Failed to parse path type, ignoring: %s", filename, line, lvalue);
+@@ -1331,6 +1365,7 @@ int config_parse_socket_service(
+         int r;
+         DBusError error;
+         Unit *x;
++        _cleanup_free_ char *p = NULL;
+ 
+         assert(filename);
+         assert(lvalue);
+@@ -1339,12 +1374,16 @@ int config_parse_socket_service(
+ 
+         dbus_error_init(&error);
+ 
+-        if (!endswith(rvalue, ".service")) {
++        p = unit_name_printf(UNIT(s), rvalue);
++        if (!p)
++                return log_oom();
++
++        if (!endswith(p, ".service")) {
+                 log_error("[%s:%u] Unit must be of type service, ignoring: %s", filename, line, rvalue);
+                 return 0;
+         }
+ 
+-        r = manager_load_unit(UNIT(s)->manager, rvalue, NULL, &error, &x);
++        r = manager_load_unit(UNIT(s)->manager, p, NULL, &error, &x);
+         if (r < 0) {
+                 log_error("[%s:%u] Failed to load unit %s, ignoring: %s", filename, line, rvalue, bus_error(&error, r));
+                 dbus_error_free(&error);
+@@ -1381,11 +1420,11 @@ int config_parse_service_sockets(
+ 
+                 t = strndup(w, l);
+                 if (!t)
+-                        return -ENOMEM;
++                        return log_oom();
+ 
+                 k = unit_name_printf(UNIT(s), t);
+                 if (!k)
+-                        return -ENOMEM;
++                        return log_oom();
+ 
+                 if (!endswith(k, ".socket")) {
+                         log_error("[%s:%u] Unit must be of type socket, ignoring: %s",
+@@ -1425,8 +1464,7 @@ int config_parse_service_timeout(
+         assert(s);
+ 
+         r = config_parse_usec(filename, line, section, lvalue, ltype, rvalue, data, userdata);
+-
+-        if (r)
++        if (r < 0)
+                 return r;
+ 
+         if (streq(lvalue, "TimeoutSec")) {
+@@ -1457,9 +1495,17 @@ int config_parse_unit_env_file(
+         assert(rvalue);
+         assert(data);
+ 
++        if (isempty(rvalue)) {
++                /* Empty assignment frees the list */
++
++                strv_free(*env);
++                *env = NULL;
++                return 0;
++        }
++
+         s = unit_full_printf(u, rvalue);
+         if (!s)
+-                return -ENOMEM;
++                return log_oom();
+ 
+         if (!path_is_absolute(s[0] == '-' ? s + 1 : s)) {
+                 log_error("[%s:%u] Path '%s' is not absolute, ignoring.", filename, line, s);
+@@ -1470,7 +1516,7 @@ int config_parse_unit_env_file(
+         k = strv_append(*env, s);
+         free(s);
+         if (!k)
+-                return -ENOMEM;
++                return log_oom();
+ 
+         strv_free(*env);
+         *env = k;
+@@ -1526,6 +1572,13 @@ int config_parse_unit_condition_path(
+         assert(rvalue);
+         assert(data);
+ 
++        if (isempty(rvalue)) {
++                /* Empty assignment resets the list */
++                condition_free_list(u->conditions);
++                u->conditions = NULL;
++                return 0;
++        }
++
+         trigger = rvalue[0] == '|';
+         if (trigger)
+                 rvalue++;
+@@ -1536,7 +1589,7 @@ int config_parse_unit_condition_path(
+ 
+         p = unit_full_printf(u, rvalue);
+         if (!p)
+-                return -ENOMEM;
++                return log_oom();
+ 
+         if (!path_is_absolute(p)) {
+                 log_error("[%s:%u] Path in condition not absolute, ignoring: %s", filename, line, p);
+@@ -1545,7 +1598,7 @@ int config_parse_unit_condition_path(
+ 
+         c = condition_new(cond, p, trigger, negate);
+         if (!c)
+-                return -ENOMEM;
++                return log_oom();
+ 
+         LIST_PREPEND(Condition, conditions, u->conditions, c);
+         return 0;
+@@ -1572,6 +1625,13 @@ int config_parse_unit_condition_string(
+         assert(rvalue);
+         assert(data);
+ 
++        if (isempty(rvalue)) {
++                /* Empty assignment resets the list */
++                condition_free_list(u->conditions);
++                u->conditions = NULL;
++                return 0;
++        }
++
+         trigger = rvalue[0] == '|';
+         if (trigger)
+                 rvalue++;
+@@ -1582,7 +1642,7 @@ int config_parse_unit_condition_string(
+ 
+         s = unit_full_printf(u, rvalue);
+         if (!s)
+-                return -ENOMEM;
++                return log_oom();
+ 
+         c = condition_new(cond, s, trigger, negate);
+         if (!c)
+@@ -1612,13 +1672,23 @@ int config_parse_unit_condition_null(
+         assert(rvalue);
+         assert(data);
+ 
+-        if ((trigger = rvalue[0] == '|'))
++        if (isempty(rvalue)) {
++                /* Empty assignment resets the list */
++                condition_free_list(u->conditions);
++                u->conditions = NULL;
++                return 0;
++        }
++
++        trigger = rvalue[0] == '|';
++        if (trigger)
+                 rvalue++;
+ 
+-        if ((negate = rvalue[0] == '!'))
++        negate = rvalue[0] == '!';
++        if (negate)
+                 rvalue++;
+ 
+-        if ((b = parse_boolean(rvalue)) < 0) {
++        b = parse_boolean(rvalue);
++        if (b < 0) {
+                 log_error("[%s:%u] Failed to parse boolean value in condition, ignoring: %s", filename, line, rvalue);
+                 return 0;
+         }
+@@ -1626,8 +1696,9 @@ int config_parse_unit_condition_null(
+         if (!b)
+                 negate = !negate;
+ 
+-        if (!(c = condition_new(CONDITION_NULL, NULL, trigger, negate)))
+-                return -ENOMEM;
++        c = condition_new(CONDITION_NULL, NULL, trigger, negate);
++        if (!c)
++                return log_oom();
+ 
+         LIST_PREPEND(Condition, conditions, u->conditions, c);
+         return 0;
+@@ -1647,7 +1718,7 @@ int config_parse_unit_cgroup_attr(
+                 void *userdata) {
+ 
+         Unit *u = data;
+-        char **l;
++        _cleanup_strv_free_ char **l = NULL;
+         int r;
+ 
+         assert(filename);
+@@ -1655,19 +1726,23 @@ int config_parse_unit_cgroup_attr(
+         assert(rvalue);
+         assert(data);
+ 
++        if (isempty(rvalue)) {
++                /* Empty assignment clears the list */
++                cgroup_attribute_free_list(u->cgroup_attributes);
++                u->cgroup_attributes = NULL;
++                return 0;
++        }
++
+         l = strv_split_quoted(rvalue);
+         if (!l)
+-                return -ENOMEM;
++                return log_oom();
+ 
+         if (strv_length(l) != 2) {
+                 log_error("[%s:%u] Failed to parse cgroup attribute value, ignoring: %s", filename, line, rvalue);
+-                strv_free(l);
+                 return 0;
+         }
+ 
+         r = unit_add_cgroup_attribute(u, NULL, l[0], l[1], NULL);
+-        strv_free(l);
+-
+         if (r < 0) {
+                 log_error("[%s:%u] Failed to add cgroup attribute value, ignoring: %s", filename, line, rvalue);
+                 return 0;
+@@ -1680,7 +1755,7 @@ int config_parse_unit_cpu_shares(const char *filename, unsigned line, const char
+         Unit *u = data;
+         int r;
+         unsigned long ul;
+-        char *t;
++        _cleanup_free_ char *t = NULL;
+ 
+         assert(filename);
+         assert(lvalue);
+@@ -1693,11 +1768,9 @@ int config_parse_unit_cpu_shares(const char *filename, unsigned line, const char
+         }
+ 
+         if (asprintf(&t, "%lu", ul) < 0)
+-                return -ENOMEM;
++                return log_oom();
+ 
+         r = unit_add_cgroup_attribute(u, "cpu", "cpu.shares", t, NULL);
+-        free(t);
+-
+         if (r < 0) {
+                 log_error("[%s:%u] Failed to add cgroup attribute value, ignoring: %s", filename, line, rvalue);
+                 return 0;
+@@ -1710,7 +1783,7 @@ int config_parse_unit_memory_limit(const char *filename, unsigned line, const ch
+         Unit *u = data;
+         int r;
+         off_t sz;
+-        char *t;
++        _cleanup_free_ char *t = NULL;
+ 
+         assert(filename);
+         assert(lvalue);
+@@ -1723,14 +1796,12 @@ int config_parse_unit_memory_limit(const char *filename, unsigned line, const ch
+         }
+ 
+         if (asprintf(&t, "%llu", (unsigned long long) sz) < 0)
+-                return -ENOMEM;
++                return log_oom();
+ 
+         r = unit_add_cgroup_attribute(u,
+                                       "memory",
+                                       streq(lvalue, "MemorySoftLimit") ? "memory.soft_limit_in_bytes" : "memory.limit_in_bytes",
+                                       t, NULL);
+-        free(t);
+-
+         if (r < 0) {
+                 log_error("[%s:%u] Failed to add cgroup attribute value, ignoring: %s", filename, line, rvalue);
+                 return 0;
+@@ -1740,7 +1811,7 @@ int config_parse_unit_memory_limit(const char *filename, unsigned line, const ch
+ }
+ 
+ static int device_map(const char *controller, const char *name, const char *value, char **ret) {
+-        char **l;
++        _cleanup_strv_free_ char **l = NULL;
+ 
+         assert(controller);
+         assert(name);
+@@ -1756,43 +1827,34 @@ static int device_map(const char *controller, const char *name, const char *valu
+         if (streq(l[0], "*")) {
+ 
+                 if (asprintf(ret, "a *:*%s%s",
+-                             isempty(l[1]) ? "" : " ", strempty(l[1])) < 0) {
+-                        strv_free(l);
++                             isempty(l[1]) ? "" : " ", strempty(l[1])) < 0)
+                         return -ENOMEM;
+-                }
+-
+         } else {
+                 struct stat st;
+ 
+                 if (stat(l[0], &st) < 0) {
+                         log_warning("Couldn't stat device %s", l[0]);
+-                        strv_free(l);
+                         return -errno;
+                 }
+ 
+                 if (!S_ISCHR(st.st_mode) && !S_ISBLK(st.st_mode)) {
+                         log_warning("%s is not a device.", l[0]);
+-                        strv_free(l);
+                         return -ENODEV;
+                 }
+ 
+                 if (asprintf(ret, "%c %u:%u%s%s",
+                              S_ISCHR(st.st_mode) ? 'c' : 'b',
+                              major(st.st_rdev), minor(st.st_rdev),
+-                             isempty(l[1]) ? "" : " ", strempty(l[1])) < 0) {
+-
+-                        strv_free(l);
++                             isempty(l[1]) ? "" : " ", strempty(l[1])) < 0)
+                         return -ENOMEM;
+-                }
+         }
+ 
+-        strv_free(l);
+         return 0;
+ }
+ 
+ int config_parse_unit_device_allow(const char *filename, unsigned line, const char *section, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata) {
+         Unit *u = data;
+-        char **l;
++        _cleanup_strv_free_ char **l = NULL;
+         int r;
+         unsigned k;
+ 
+@@ -1803,27 +1865,23 @@ int config_parse_unit_device_allow(const char *filename, unsigned line, const ch
+ 
+         l = strv_split_quoted(rvalue);
+         if (!l)
+-                return -ENOMEM;
++                return log_oom();
+ 
+         k = strv_length(l);
+         if (k < 1 || k > 2) {
+                 log_error("[%s:%u] Failed to parse device value, ignoring: %s", filename, line, rvalue);
+-                strv_free(l);
+                 return 0;
+         }
+ 
+         if (!streq(l[0], "*") && !path_startswith(l[0], "/dev")) {
+                 log_error("[%s:%u] Device node path not absolute, ignoring: %s", filename, line, rvalue);
+-                strv_free(l);
+                 return 0;
+         }
+ 
+         if (!isempty(l[1]) && !in_charset(l[1], "rwm")) {
+                 log_error("[%s:%u] Device access string invalid, ignoring: %s", filename, line, rvalue);
+-                strv_free(l);
+                 return 0;
+         }
+-        strv_free(l);
+ 
+         r = unit_add_cgroup_attribute(u, "devices",
+                                       streq(lvalue, "DeviceAllow") ? "devices.allow" : "devices.deny",
+@@ -1839,7 +1897,7 @@ int config_parse_unit_device_allow(const char *filename, unsigned line, const ch
+ 
+ static int blkio_map(const char *controller, const char *name, const char *value, char **ret) {
+         struct stat st;
+-        char **l;
++        _cleanup_strv_free_ char **l = NULL;
+         dev_t d;
+ 
+         assert(controller);
+@@ -1849,13 +1907,12 @@ static int blkio_map(const char *controller, const char *name, const char *value
+ 
+         l = strv_split_quoted(value);
+         if (!l)
+-                return -ENOMEM;
++                return log_oom();
+ 
+         assert(strv_length(l) == 2);
+ 
+         if (stat(l[0], &st) < 0) {
+                 log_warning("Couldn't stat device %s", l[0]);
+-                strv_free(l);
+                 return -errno;
+         }
+ 
+@@ -1871,16 +1928,12 @@ static int blkio_map(const char *controller, const char *name, const char *value
+                 block_get_whole_disk(d, &d);
+         } else {
+                 log_warning("%s is not a block device and file system block device cannot be determined or is not local.", l[0]);
+-                strv_free(l);
+                 return -ENODEV;
+         }
+ 
+-        if (asprintf(ret, "%u:%u %s", major(d), minor(d), l[1]) < 0) {
+-                strv_free(l);
++        if (asprintf(ret, "%u:%u %s", major(d), minor(d), l[1]) < 0)
+                 return -ENOMEM;
+-        }
+ 
+-        strv_free(l);
+         return 0;
+ }
+ 
+@@ -1890,7 +1943,8 @@ int config_parse_unit_blkio_weight(const char *filename, unsigned line, const ch
+         unsigned long ul;
+         const char *device = NULL, *weight;
+         unsigned k;
+-        char *t, **l;
++        _cleanup_free_ char *t = NULL;
++        _cleanup_strv_free_ char **l = NULL;
+ 
+         assert(filename);
+         assert(lvalue);
+@@ -1899,12 +1953,11 @@ int config_parse_unit_blkio_weight(const char *filename, unsigned line, const ch
+ 
+         l = strv_split_quoted(rvalue);
+         if (!l)
+-                return -ENOMEM;
++                return log_oom();
+ 
+         k = strv_length(l);
+         if (k < 1 || k > 2) {
+                 log_error("[%s:%u] Failed to parse weight value, ignoring: %s", filename, line, rvalue);
+-                strv_free(l);
+                 return 0;
+         }
+ 
+@@ -1917,13 +1970,11 @@ int config_parse_unit_blkio_weight(const char *filename, unsigned line, const ch
+ 
+         if (device && !path_is_absolute(device)) {
+                 log_error("[%s:%u] Failed to parse block device node value, ignoring: %s", filename, line, rvalue);
+-                strv_free(l);
+                 return 0;
+         }
+ 
+         if (safe_atolu(weight, &ul) < 0 || ul < 10 || ul > 1000) {
+                 log_error("[%s:%u] Failed to parse block IO weight value, ignoring: %s", filename, line, rvalue);
+-                strv_free(l);
+                 return 0;
+         }
+ 
+@@ -1931,17 +1982,13 @@ int config_parse_unit_blkio_weight(const char *filename, unsigned line, const ch
+                 r = asprintf(&t, "%s %lu", device, ul);
+         else
+                 r = asprintf(&t, "%lu", ul);
+-        strv_free(l);
+-
+         if (r < 0)
+-                return -ENOMEM;
++                return log_oom();
+ 
+         if (device)
+                 r = unit_add_cgroup_attribute(u, "blkio", "blkio.weight_device", t, blkio_map);
+         else
+                 r = unit_add_cgroup_attribute(u, "blkio", "blkio.weight", t, NULL);
+-        free(t);
+-
+         if (r < 0) {
+                 log_error("[%s:%u] Failed to add cgroup attribute value, ignoring: %s", filename, line, rvalue);
+                 return 0;
+@@ -1955,7 +2002,8 @@ int config_parse_unit_blkio_bandwidth(const char *filename, unsigned line, const
+         int r;
+         off_t bytes;
+         unsigned k;
+-        char *t, **l;
++        _cleanup_free_ char *t = NULL;
++        _cleanup_strv_free_ char **l = NULL;
+ 
+         assert(filename);
+         assert(lvalue);
+@@ -1964,38 +2012,31 @@ int config_parse_unit_blkio_bandwidth(const char *filename, unsigned line, const
+ 
+         l = strv_split_quoted(rvalue);
+         if (!l)
+-                return -ENOMEM;
++                return log_oom();
+ 
+         k = strv_length(l);
+         if (k != 2) {
+                 log_error("[%s:%u] Failed to parse bandwidth value, ignoring: %s", filename, line, rvalue);
+-                strv_free(l);
+                 return 0;
+         }
+ 
+         if (!path_is_absolute(l[0])) {
+                 log_error("[%s:%u] Failed to parse block device node value, ignoring: %s", filename, line, rvalue);
+-                strv_free(l);
+                 return 0;
+         }
+ 
+         if (parse_bytes(l[1], &bytes) < 0 || bytes <= 0) {
+                 log_error("[%s:%u] Failed to parse block IO bandwidth value, ignoring: %s", filename, line, rvalue);
+-                strv_free(l);
+                 return 0;
+         }
+ 
+         r = asprintf(&t, "%s %llu", l[0], (unsigned long long) bytes);
+-        strv_free(l);
+-
+         if (r < 0)
+-                return -ENOMEM;
++                return log_oom();
+ 
+         r = unit_add_cgroup_attribute(u, "blkio",
+                                       streq(lvalue, "BlockIOReadBandwidth") ? "blkio.read_bps_device" : "blkio.write_bps_device",
+                                       t, blkio_map);
+-        free(t);
+-
+         if (r < 0) {
+                 log_error("[%s:%u] Failed to add cgroup attribute value, ignoring: %s", filename, line, rvalue);
+                 return 0;
+@@ -2053,6 +2094,13 @@ int config_parse_documentation(
+         assert(rvalue);
+         assert(u);
+ 
++        if (isempty(rvalue)) {
++                /* Empty assignment resets the list */
++                strv_free(u->documentation);
++                u->documentation = NULL;
++                return 0;
++        }
++
+         r = config_parse_unit_strv_printf(filename, line, section, lvalue, ltype, rvalue, data, userdata);
+         if (r < 0)
+                 return r;
+@@ -2101,6 +2149,13 @@ int config_parse_syscall_filter(
+         assert(rvalue);
+         assert(u);
+ 
++        if (isempty(rvalue)) {
++                /* Empty assignment resets the list */
++                free(c->syscall_filter);
++                c->syscall_filter = NULL;
++                return 0;
++        }
++
+         if (rvalue[0] == '~') {
+                 invert = true;
+                 rvalue++;
+@@ -2112,7 +2167,7 @@ int config_parse_syscall_filter(
+                 n = (syscall_max() + 31) >> 4;
+                 c->syscall_filter = new(uint32_t, n);
+                 if (!c->syscall_filter)
+-                        return -ENOMEM;
++                        return log_oom();
+ 
+                 memset(c->syscall_filter, invert ? 0xFF : 0, n * sizeof(uint32_t));
+ 
+@@ -2132,10 +2187,9 @@ int config_parse_syscall_filter(
+ 
+                 t = strndup(w, l);
+                 if (!t)
+-                        return -ENOMEM;
++                        return log_oom();
+ 
+                 id = syscall_from_name(t);
+-
+                 if (id < 0)  {
+                         log_error("[%s:%u] Failed to parse syscall, ignoring: %s",
+                                   filename, line, t);
+diff --git a/src/core/path.c b/src/core/path.c
+index 767620b..3775577 100644
+--- a/src/core/path.c
++++ b/src/core/path.c
+@@ -248,22 +248,28 @@ static void path_init(Unit *u) {
+         p->directory_mode = 0755;
+ }
+ 
+-static void path_done(Unit *u) {
+-        Path *p = PATH(u);
++void path_free_specs(Path *p) {
+         PathSpec *s;
+ 
+         assert(p);
+ 
+-        unit_ref_unset(&p->unit);
+-
+         while ((s = p->specs)) {
+-                path_spec_unwatch(s, u);
++                path_spec_unwatch(s, UNIT(p));
+                 LIST_REMOVE(PathSpec, spec, p->specs, s);
+                 path_spec_done(s);
+                 free(s);
+         }
+ }
+ 
++static void path_done(Unit *u) {
++        Path *p = PATH(u);
++
++        assert(p);
++
++        unit_ref_unset(&p->unit);
++        path_free_specs(p);
++}
++
+ int path_add_one_mount_link(Path *p, Mount *m) {
+         PathSpec *s;
+         int r;
+diff --git a/src/core/path.h b/src/core/path.h
+index 7792688..645feef 100644
+--- a/src/core/path.h
++++ b/src/core/path.h
+@@ -98,6 +98,8 @@ void path_unit_notify(Unit *u, UnitActiveState new_state);
+  * 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;
+ 
+ const char* path_state_to_string(PathState i);
+diff --git a/src/core/socket.c b/src/core/socket.c
+index d755040..f2d8548 100644
+--- a/src/core/socket.c
++++ b/src/core/socket.c
+@@ -102,8 +102,7 @@ static void socket_unwatch_control_pid(Socket *s) {
+         s->control_pid = 0;
+ }
+ 
+-static void socket_done(Unit *u) {
+-        Socket *s = SOCKET(u);
++void socket_free_ports(Socket *s) {
+         SocketPort *p;
+ 
+         assert(s);
+@@ -119,6 +118,14 @@ static void socket_done(Unit *u) {
+                 free(p->path);
+                 free(p);
+         }
++}
++
++static void socket_done(Unit *u) {
++        Socket *s = SOCKET(u);
++
++        assert(s);
++
++        socket_free_ports(s);
+ 
+         exec_context_done(&s->exec_context);
+         exec_command_free_array(s->exec_command, _SOCKET_EXEC_COMMAND_MAX);
+diff --git a/src/core/socket.h b/src/core/socket.h
+index f099520..e0bae29 100644
+--- a/src/core/socket.h
++++ b/src/core/socket.h
+@@ -163,6 +163,8 @@ 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);
+ 
++void socket_free_ports(Socket *s);
++
+ extern const UnitVTable socket_vtable;
+ 
+ const char* socket_state_to_string(SocketState i);
+diff --git a/src/core/timer.c b/src/core/timer.c
+index 4453aa0..8061f79 100644
+--- a/src/core/timer.c
++++ b/src/core/timer.c
+@@ -48,8 +48,7 @@ static void timer_init(Unit *u) {
+         watch_init(&t->realtime_watch);
+ }
+ 
+-static void timer_done(Unit *u) {
+-        Timer *t = TIMER(u);
++void timer_free_values(Timer *t) {
+         TimerValue *v;
+ 
+         assert(t);
+@@ -62,6 +61,14 @@ static void timer_done(Unit *u) {
+ 
+                 free(v);
+         }
++}
++
++static void timer_done(Unit *u) {
++        Timer *t = TIMER(u);
++
++        assert(t);
++
++        timer_free_values(t);
+ 
+         unit_unwatch_timer(u, &t->monotonic_watch);
+         unit_unwatch_timer(u, &t->realtime_watch);
+diff --git a/src/core/timer.h b/src/core/timer.h
+index 10d3ce1..c145348 100644
+--- a/src/core/timer.h
++++ b/src/core/timer.h
+@@ -84,6 +84,8 @@ struct Timer {
+ 
+ void timer_unit_notify(Unit *u, UnitActiveState new_state);
+ 
++void timer_free_values(Timer *t);
++
+ extern const UnitVTable timer_vtable;
+ 
+ const char *timer_state_to_string(TimerState i);
+diff --git a/src/shared/conf-parser.c b/src/shared/conf-parser.c
+index 9f5c07c..7f28609 100644
+--- a/src/shared/conf-parser.c
++++ b/src/shared/conf-parser.c
+@@ -377,7 +377,8 @@ int config_parse_int(
+         assert(rvalue);
+         assert(data);
+ 
+-        if ((r = safe_atoi(rvalue, i)) < 0) {
++        r = safe_atoi(rvalue, i);
++        if (r < 0) {
+                 log_error("[%s:%u] Failed to parse numeric value, ingoring: %s", filename, line, rvalue);
+                 return 0;
+         }
+@@ -403,7 +404,8 @@ int config_parse_long(
+         assert(rvalue);
+         assert(data);
+ 
+-        if ((r = safe_atoli(rvalue, i)) < 0) {
++        r = safe_atoli(rvalue, i);
++        if (r < 0) {
+                 log_error("[%s:%u] Failed to parse numeric value, ignoring: %s", filename, line, rvalue);
+                 return 0;
+         }
+@@ -429,7 +431,8 @@ int config_parse_uint64(
+         assert(rvalue);
+         assert(data);
+ 
+-        if ((r = safe_atou64(rvalue, u)) < 0) {
++        r = safe_atou64(rvalue, u);
++        if (r < 0) {
+                 log_error("[%s:%u] Failed to parse numeric value, ignoring: %s", filename, line, rvalue);
+                 return 0;
+         }
+@@ -455,7 +458,8 @@ int config_parse_unsigned(
+         assert(rvalue);
+         assert(data);
+ 
+-        if ((r = safe_atou(rvalue, u)) < 0) {
++        r = safe_atou(rvalue, u);
++        if (r < 0) {
+                 log_error("[%s:%u] Failed to parse numeric value: %s", filename, line, rvalue);
+                 return r;
+         }
+@@ -595,7 +599,7 @@ int config_parse_string(
+ 
+         n = strdup(rvalue);
+         if (!n)
+-                return -ENOMEM;
++                return log_oom();
+ 
+         if (!utf8_is_valid(n)) {
+                 log_error("[%s:%u] String is not UTF-8 clean, ignoring assignment: %s", filename, line, rvalue);
+@@ -644,7 +648,7 @@ int config_parse_path(
+ 
+         n = strdup(rvalue);
+         if (!n)
+-                return -ENOMEM;
++                return log_oom();
+ 
+         path_kill_slashes(n);
+ 
+@@ -677,13 +681,19 @@ int config_parse_strv(
+         assert(rvalue);
+         assert(data);
+ 
++        if (isempty(rvalue)) {
++                /* Empty assignment resets the list */
++                strv_free(*sv);
++                *sv = NULL;
++        }
++
+         k = strv_length(*sv);
+         FOREACH_WORD_QUOTED(w, l, rvalue, state)
+                 k++;
+ 
+         n = new(char*, k+1);
+         if (!n)
+-                return -ENOMEM;
++                return log_oom();
+ 
+         if (*sv)
+                 for (k = 0; (*sv)[k]; k++)
+@@ -694,7 +704,7 @@ int config_parse_strv(
+         FOREACH_WORD_QUOTED(w, l, rvalue, state) {
+                 n[k] = cunescape_length(w, l);
+                 if (!n[k]) {
+-                        r = -ENOMEM;
++                        r = log_oom();
+                         goto fail;
+                 }
+ 
+@@ -744,13 +754,19 @@ int config_parse_path_strv(
+         assert(rvalue);
+         assert(data);
+ 
++        if (isempty(rvalue)) {
++                /* Empty assignment resets the list */
++                strv_free(*sv);
++                *sv = NULL;
++        }
++
+         k = strv_length(*sv);
+         FOREACH_WORD_QUOTED(w, l, rvalue, state)
+                 k++;
+ 
+         n = new(char*, k+1);
+         if (!n)
+-                return -ENOMEM;
++                return log_oom();
+ 
+         k = 0;
+         if (*sv)
+@@ -760,7 +776,7 @@ int config_parse_path_strv(
+         FOREACH_WORD_QUOTED(w, l, rvalue, state) {
+                 n[k] = strndup(w, l);
+                 if (!n[k]) {
+-                        r = -ENOMEM;
++                        r = log_oom();
+                         goto fail;
+                 }
+ 
+@@ -957,6 +973,16 @@ int config_parse_set_status(
+         assert(rvalue);
+         assert(data);
+ 
++        if (isempty(rvalue)) {
++                /* Empty assignment resets the list */
++
++                set_free(status_set->signal);
++                set_free(status_set->code);
++
++                status_set->signal = status_set->code = NULL;
++                return 0;
++        }
++
+         FOREACH_WORD(w, l, rvalue, state) {
+                 int val;
+                 char *temp;
diff --git a/0043-service-properly-signal-permanent-failure-of-a-servi.patch b/0043-service-properly-signal-permanent-failure-of-a-servi.patch
new file mode 100644
index 0000000..d157fb6
--- /dev/null
+++ b/0043-service-properly-signal-permanent-failure-of-a-servi.patch
@@ -0,0 +1,38 @@
+From d0b3169a9406ebf151b77b1be0e9b9d508349b98 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Thu, 17 Jan 2013 04:52:19 +0100
+Subject: [PATCH] service: properly signal permanent failure of a service to
+ its socket
+
+This makes sure that a service is not indefinitely restarted in a tight
+loop if it fails before it is able to process its socket.
+
+This corrects the breakage introduced with
+8d1b002a2e389e79a2414491523de549783abf73. Shame on me.
+(cherry picked from commit 464876c9c410b2f5bb997259510a13d0ee7d0af0)
+---
+ src/core/service.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/src/core/service.c b/src/core/service.c
+index 82b664f..d6a0ffe 100644
+--- a/src/core/service.c
++++ b/src/core/service.c
+@@ -1536,6 +1536,9 @@ static void service_set_state(Service *s, ServiceState state) {
+                 s->control_command_id = _SERVICE_EXEC_COMMAND_INVALID;
+         }
+ 
++        if (state == SERVICE_FAILED)
++                service_notify_sockets_dead(s, s->result == SERVICE_FAILURE_START_LIMIT);
++
+         if (state == SERVICE_DEAD ||
+             state == SERVICE_STOP ||
+             state == SERVICE_STOP_SIGTERM ||
+@@ -1543,7 +1546,6 @@ static void service_set_state(Service *s, ServiceState state) {
+             state == SERVICE_STOP_POST ||
+             state == SERVICE_FINAL_SIGTERM ||
+             state == SERVICE_FINAL_SIGKILL ||
+-            state == SERVICE_FAILED ||
+             state == SERVICE_AUTO_RESTART)
+                 service_notify_sockets_dead(s, false);
+ 
diff --git a/0044-util-fix-bad-memory-access.patch b/0044-util-fix-bad-memory-access.patch
new file mode 100644
index 0000000..6eea1a6
--- /dev/null
+++ b/0044-util-fix-bad-memory-access.patch
@@ -0,0 +1,22 @@
+From da252dce62cf33efebc91834f5ee852e745d66ce Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Thu, 17 Jan 2013 17:38:00 +0100
+Subject: [PATCH] util: fix bad memory access (cherry picked from commit
+ 86ed7ec58b9b6a0907bbb3b8d07c930e52915de0)
+
+---
+ src/shared/util.c | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/src/shared/util.c b/src/shared/util.c
+index 13f1a1c..b467ea3 100644
+--- a/src/shared/util.c
++++ b/src/shared/util.c
+@@ -439,7 +439,6 @@ int get_parent_of_pid(pid_t pid, pid_t *_ppid) {
+ 
+         if (!fgets(line, sizeof(line), f)) {
+                 r = feof(f) ? -EIO : -errno;
+-                fclose(f);
+                 return r;
+         }
+ 
diff --git a/0045-hwdb-update.patch b/0045-hwdb-update.patch
new file mode 100644
index 0000000..876e053
--- /dev/null
+++ b/0045-hwdb-update.patch
@@ -0,0 +1,3691 @@
+From a804f1d9024668957f95ee454ba2733a1555747f Mon Sep 17 00:00:00 2001
+From: Kay Sievers <kay at vrfy.org>
+Date: Fri, 18 Jan 2013 00:15:25 +0100
+Subject: [PATCH] hwdb: update (cherry picked from commit
+ 34048c8ca6446497afc69d4deb0c5ce42dffc010)
+
+---
+ hwdb/20-OUI.hwdb                | 450 +++++++++++++++++++--
+ hwdb/20-pci-vendor-product.hwdb | 840 ++++++++++++++++++++++++++++------------
+ hwdb/20-usb-vendor-product.hwdb |  15 +
+ 3 files changed, 1020 insertions(+), 285 deletions(-)
+
+diff --git a/hwdb/20-OUI.hwdb b/hwdb/20-OUI.hwdb
+index be98198..ac07a5d 100644
+--- a/hwdb/20-OUI.hwdb
++++ b/hwdb/20-OUI.hwdb
+@@ -56,7 +56,7 @@ OUI:0050C2010*
+  ID_OUI_FROM_DATABASE=Moisture Systems
+ 
+ OUI:0050C2011*
+- ID_OUI_FROM_DATABASE=BIHL & Wiedemann GmbH
++ ID_OUI_FROM_DATABASE=Bihl + Wiedemann GmbH
+ 
+ OUI:0050C2012*
+  ID_OUI_FROM_DATABASE=Floware System Solutions Ltd.
+@@ -3656,7 +3656,7 @@ OUI:0050C24CC*
+  ID_OUI_FROM_DATABASE=ImpediMed Limited
+ 
+ OUI:0050C24CD*
+- ID_OUI_FROM_DATABASE=Adasoft AG
++ ID_OUI_FROM_DATABASE=Bixi Systems AG
+ 
+ OUI:0050C24CE*
+  ID_OUI_FROM_DATABASE=Open Date Equipment Limited
+@@ -5174,7 +5174,7 @@ OUI:0050C26C7*
+  ID_OUI_FROM_DATABASE=QuickCircuit Ltd.
+ 
+ OUI:0050C26C8*
+- ID_OUI_FROM_DATABASE=B&S MEDIA Co., LTD.
++ ID_OUI_FROM_DATABASE=B&S MEDIA CO., LTD.
+ 
+ OUI:0050C26C9*
+  ID_OUI_FROM_DATABASE=NETAMI
+@@ -5375,7 +5375,7 @@ OUI:0050C270A*
+  ID_OUI_FROM_DATABASE=Efficient Channel Coding
+ 
+ OUI:0050C270B*
+- ID_OUI_FROM_DATABASE=B.E.A.R. Solutions (Australasia) Pty Ltd
++ ID_OUI_FROM_DATABASE=B.E.A.R. Solutions (Australasia) Pty, Ltd
+ 
+ OUI:0050C270C*
+  ID_OUI_FROM_DATABASE=Exertus
+@@ -7553,7 +7553,7 @@ OUI:0050C29E2*
+  ID_OUI_FROM_DATABASE=E-ViEWS SAFETY SYSTEMS, INC
+ 
+ OUI:0050C29E3*
+- ID_OUI_FROM_DATABASE=beON Automatenmanagement GmbH
++ ID_OUI_FROM_DATABASE=SAI Informationstechnik
+ 
+ OUI:0050C29E4*
+  ID_OUI_FROM_DATABASE=Pyxis Controls WLL
+@@ -9320,7 +9320,7 @@ OUI:0050C2C36*
+  ID_OUI_FROM_DATABASE=SET GmbH
+ 
+ OUI:0050C2C37*
+- ID_OUI_FROM_DATABASE=BEAR Solutions (Australasia) Pty Ltd
++ ID_OUI_FROM_DATABASE=B.E.A.R. Solutions (Australasia) Pty, Ltd
+ 
+ OUI:0050C2C38*
+  ID_OUI_FROM_DATABASE=Computer Automation Technology Inc
+@@ -9881,7 +9881,7 @@ OUI:0050C2CF4*
+  ID_OUI_FROM_DATABASE=Baudisch Electronic GmbH
+ 
+ OUI:0050C2CF5*
+- ID_OUI_FROM_DATABASE=Aircell
++ ID_OUI_FROM_DATABASE=AirCell Inc.
+ 
+ OUI:0050C2CF6*
+  ID_OUI_FROM_DATABASE=Epec Oy
+@@ -10178,7 +10178,7 @@ OUI:0050C2D58*
+  ID_OUI_FROM_DATABASE=NIK-ELEKTRONIKA Ltd
+ 
+ OUI:0050C2D59*
+- ID_OUI_FROM_DATABASE=Buanco System A/S
++ ID_OUI_FROM_DATABASE=BUANCO SYSTEM A/S
+ 
+ OUI:0050C2D5A*
+  ID_OUI_FROM_DATABASE=Embedded Monitoring Systems Ltd.
+@@ -10535,7 +10535,7 @@ OUI:0050C2DD0*
+  ID_OUI_FROM_DATABASE=IDC Solutions Pty Ltd
+ 
+ OUI:0050C2DD1*
+- ID_OUI_FROM_DATABASE=Dr. Ing. K. Brankamp System Prozessautomation GmbH
++ ID_OUI_FROM_DATABASE=Brankamp GmbH
+ 
+ OUI:0050C2DD2*
+  ID_OUI_FROM_DATABASE=Electronic Applications, Inc.
+@@ -12547,6 +12547,51 @@ OUI:40D855074*
+ OUI:40D855075*
+  ID_OUI_FROM_DATABASE=Teraflops
+ 
++OUI:40D855076*
++ ID_OUI_FROM_DATABASE=INTERNET PROTOCOLO LOGICA SL
++
++OUI:40D855077*
++ ID_OUI_FROM_DATABASE=TOEC TECHNOLOGY CO.,LTD
++
++OUI:40D855078*
++ ID_OUI_FROM_DATABASE=NACHI-FUJIKOSHI CORP
++
++OUI:40D855079*
++ ID_OUI_FROM_DATABASE=DelfiSolutions A/S
++
++OUI:40D85507A*
++ ID_OUI_FROM_DATABASE=4embedded
++
++OUI:40D85507B*
++ ID_OUI_FROM_DATABASE=IPS Technology Limited
++
++OUI:40D85507C*
++ ID_OUI_FROM_DATABASE=Agramkow Fluid Systems A/S
++
++OUI:40D85507D*
++ ID_OUI_FROM_DATABASE=Wuxi SiNeng New Energy Co., Ltd.
++
++OUI:40D85507E*
++ ID_OUI_FROM_DATABASE=TESCOM CORPORATION
++
++OUI:40D85507F*
++ ID_OUI_FROM_DATABASE=Wheatstone Corporation
++
++OUI:40D855080*
++ ID_OUI_FROM_DATABASE=Honeywell
++
++OUI:40D855081*
++ ID_OUI_FROM_DATABASE=Sicon srl
++
++OUI:40D855082*
++ ID_OUI_FROM_DATABASE=ard sa
++
++OUI:40D855083*
++ ID_OUI_FROM_DATABASE=DELOPT
++
++OUI:40D855084*
++ ID_OUI_FROM_DATABASE=Papendorf Software Engineering GmbH
++
+ OUI:000000*
+  ID_OUI_FROM_DATABASE=XEROX CORPORATION
+ 
+@@ -16814,7 +16859,7 @@ OUI:000590*
+  ID_OUI_FROM_DATABASE=Swissvoice Ltd.
+ 
+ OUI:000591*
+- ID_OUI_FROM_DATABASE=Active Silicon Ltd.
++ ID_OUI_FROM_DATABASE=Active Silicon Ltd
+ 
+ OUI:000592*
+  ID_OUI_FROM_DATABASE=Pultek Corp.
+@@ -17108,7 +17153,7 @@ OUI:0005F2*
+  ID_OUI_FROM_DATABASE=Power R, Inc.
+ 
+ OUI:0005F3*
+- ID_OUI_FROM_DATABASE=Weboyn
++ ID_OUI_FROM_DATABASE=Webyn
+ 
+ OUI:0005F4*
+  ID_OUI_FROM_DATABASE=System Base Co., Ltd.
+@@ -17324,7 +17369,7 @@ OUI:00063A*
+  ID_OUI_FROM_DATABASE=Dura Micro, Inc.
+ 
+ OUI:00063B*
+- ID_OUI_FROM_DATABASE=Arcturus Networks, Inc.
++ ID_OUI_FROM_DATABASE=Arcturus Networks Inc.
+ 
+ OUI:00063C*
+  ID_OUI_FROM_DATABASE=Intrinsyc Europe Ltd
+@@ -17645,7 +17690,7 @@ OUI:0006A5*
+  ID_OUI_FROM_DATABASE=PINON Corp.
+ 
+ OUI:0006A6*
+- ID_OUI_FROM_DATABASE=Artistic Licence (UK) Ltd
++ ID_OUI_FROM_DATABASE=Artistic Licence Engineering Ltd
+ 
+ OUI:0006A7*
+  ID_OUI_FROM_DATABASE=Primarion
+@@ -21332,7 +21377,7 @@ OUI:000B8F*
+  ID_OUI_FROM_DATABASE=AKITA ELECTRONICS SYSTEMS CO.,LTD.
+ 
+ OUI:000B90*
+- ID_OUI_FROM_DATABASE=Adva Optical Networking Inc.
++ ID_OUI_FROM_DATABASE=ADVA Optical Networking Ltd.
+ 
+ OUI:000B91*
+  ID_OUI_FROM_DATABASE=Aglaia Gesellschaft für Bildverarbeitung und Kommunikation mbH
+@@ -21896,7 +21941,7 @@ OUI:000C4C*
+  ID_OUI_FROM_DATABASE=Arcor AG&Co.
+ 
+ OUI:000C4D*
+- ID_OUI_FROM_DATABASE=ACRA CONTROL
++ ID_OUI_FROM_DATABASE=Curtiss-Wright Controls Avionics & Electronics
+ 
+ OUI:000C4E*
+  ID_OUI_FROM_DATABASE=Winbest Technology CO,LT
+@@ -22736,7 +22781,7 @@ OUI:000D66*
+  ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
+ 
+ OUI:000D67*
+- ID_OUI_FROM_DATABASE=BelAir Networks Inc.
++ ID_OUI_FROM_DATABASE=Ericsson
+ 
+ OUI:000D68*
+  ID_OUI_FROM_DATABASE=Vinci Systems, Inc.
+@@ -24647,7 +24692,7 @@ OUI:000FEB*
+  ID_OUI_FROM_DATABASE=Cylon Controls
+ 
+ OUI:000FEC*
+- ID_OUI_FROM_DATABASE=Arkus Inc.
++ ID_OUI_FROM_DATABASE=ARKUS Inc.
+ 
+ OUI:000FED*
+  ID_OUI_FROM_DATABASE=Anam Electronics Co., Ltd
+@@ -25931,7 +25976,7 @@ OUI:001198*
+  ID_OUI_FROM_DATABASE=Prism Media Products Limited
+ 
+ OUI:001199*
+- ID_OUI_FROM_DATABASE=2wcom GmbH
++ ID_OUI_FROM_DATABASE=2wcom Systems GmbH
+ 
+ OUI:00119A*
+  ID_OUI_FROM_DATABASE=Alkeria srl
+@@ -26249,7 +26294,7 @@ OUI:001202*
+  ID_OUI_FROM_DATABASE=Decrane Aerospace - Audio International Inc.
+ 
+ OUI:001203*
+- ID_OUI_FROM_DATABASE=Activ Networks
++ ID_OUI_FROM_DATABASE=ActivNetworks
+ 
+ OUI:001204*
+  ID_OUI_FROM_DATABASE=u10 Networks, Inc.
+@@ -29669,7 +29714,7 @@ OUI:001676*
+  ID_OUI_FROM_DATABASE=Intel Corporation
+ 
+ OUI:001677*
+- ID_OUI_FROM_DATABASE=Bihl+Wiedemann GmbH
++ ID_OUI_FROM_DATABASE=Bihl + Wiedemann GmbH
+ 
+ OUI:001678*
+  ID_OUI_FROM_DATABASE=SHENZHEN BAOAN GAOKE ELECTRONICS CO., LTD
+@@ -30974,7 +31019,7 @@ OUI:00182C*
+  ID_OUI_FROM_DATABASE=Ascend Networks, Inc.
+ 
+ OUI:00182D*
+- ID_OUI_FROM_DATABASE=Artec Group OÜ
++ ID_OUI_FROM_DATABASE=Artec Design
+ 
+ OUI:00182E*
+  ID_OUI_FROM_DATABASE=XStreamHD, LLC
+@@ -32852,7 +32897,7 @@ OUI:001A9E*
+  ID_OUI_FROM_DATABASE=ICON Digital International Limited
+ 
+ OUI:001A9F*
+- ID_OUI_FROM_DATABASE=A-Link Europe Ltd
++ ID_OUI_FROM_DATABASE=A-Link Ltd
+ 
+ OUI:001AA0*
+  ID_OUI_FROM_DATABASE=Dell Inc
+@@ -38903,7 +38948,7 @@ OUI:002281*
+  ID_OUI_FROM_DATABASE=Daintree Networks Inc
+ 
+ OUI:002282*
+- ID_OUI_FROM_DATABASE=8086 Limited
++ ID_OUI_FROM_DATABASE=8086 Consultancy
+ 
+ OUI:002283*
+  ID_OUI_FROM_DATABASE=Juniper Networks
+@@ -39113,7 +39158,7 @@ OUI:0022C7*
+  ID_OUI_FROM_DATABASE=SEGGER Microcontroller GmbH & Co. KG
+ 
+ OUI:0022C8*
+- ID_OUI_FROM_DATABASE=Applied Instruments
++ ID_OUI_FROM_DATABASE=Applied Instruments B.V.
+ 
+ OUI:0022C9*
+  ID_OUI_FROM_DATABASE=Lenord, Bauer & Co GmbH
+@@ -41723,7 +41768,7 @@ OUI:00263B*
+  ID_OUI_FROM_DATABASE=Onbnetech
+ 
+ OUI:00263C*
+- ID_OUI_FROM_DATABASE=Bachmann GmbH & Co. KG
++ ID_OUI_FROM_DATABASE=Bachmann Technology GmbH & Co. KG
+ 
+ OUI:00263D*
+  ID_OUI_FROM_DATABASE=MIA Corporation
+@@ -42407,7 +42452,7 @@ OUI:002722*
+  ID_OUI_FROM_DATABASE=Ubiquiti Networks
+ 
+ OUI:0027F8*
+- ID_OUI_FROM_DATABASE=Brocade Communications Systems, Inc
++ ID_OUI_FROM_DATABASE=Brocade Communications Systems, Inc.
+ 
+ OUI:002A6A*
+  ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
+@@ -43055,7 +43100,7 @@ OUI:0030D3*
+  ID_OUI_FROM_DATABASE=Agilent Technologies
+ 
+ OUI:0030D4*
+- ID_OUI_FROM_DATABASE=AAE Systems, Inc
++ ID_OUI_FROM_DATABASE=AAE Systems, Inc.
+ 
+ OUI:0030D5*
+  ID_OUI_FROM_DATABASE=DResearch GmbH
+@@ -44516,7 +44561,7 @@ OUI:0050B1*
+  ID_OUI_FROM_DATABASE=GIDDINGS & LEWIS
+ 
+ OUI:0050B2*
+- ID_OUI_FROM_DATABASE=BRODEL AUTOMATION
++ ID_OUI_FROM_DATABASE=BRODEL GmbH
+ 
+ OUI:0050B3*
+  ID_OUI_FROM_DATABASE=VOICEBOARD CORPORATION
+@@ -45514,6 +45559,9 @@ OUI:006440*
+ OUI:0064A6*
+  ID_OUI_FROM_DATABASE=Maquet CardioVascular
+ 
++OUI:00664B*
++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
++
+ OUI:006B9E*
+  ID_OUI_FROM_DATABASE=VIZIO Inc
+ 
+@@ -49244,7 +49292,7 @@ OUI:00D08A*
+  ID_OUI_FROM_DATABASE=PHOTRON USA
+ 
+ OUI:00D08B*
+- ID_OUI_FROM_DATABASE=ADVA Optical Networking Ltd
++ ID_OUI_FROM_DATABASE=ADVA Optical Networking Ltd.
+ 
+ OUI:00D08C*
+  ID_OUI_FROM_DATABASE=GENOA TECHNOLOGY, INC.
+@@ -50569,6 +50617,9 @@ OUI:044A50*
+ OUI:044BFF*
+  ID_OUI_FROM_DATABASE=GuangZhou Hedy Digital Technology Co., Ltd
+ 
++OUI:044CEF*
++ ID_OUI_FROM_DATABASE=Fujian Sanao Technology Co.,Ltd
++
+ OUI:044FAA*
+  ID_OUI_FROM_DATABASE=Ruckus Wireless
+ 
+@@ -50693,7 +50744,7 @@ OUI:04E1C8*
+  ID_OUI_FROM_DATABASE=IMS Soluções em Energia Ltda.
+ 
+ OUI:04E2F8*
+- ID_OUI_FROM_DATABASE=AEP srl
++ ID_OUI_FROM_DATABASE=AEP Ticketing solutions srl
+ 
+ OUI:04E451*
+  ID_OUI_FROM_DATABASE=Texas Instruments
+@@ -51178,6 +51229,9 @@ OUI:080CC9*
+ OUI:080D84*
+  ID_OUI_FROM_DATABASE=GECO, Inc.
+ 
++OUI:080EA8*
++ ID_OUI_FROM_DATABASE=Velex s.r.l.
++
+ OUI:080FFA*
+  ID_OUI_FROM_DATABASE=KSP INC.
+ 
+@@ -51253,6 +51307,9 @@ OUI:085B0E*
+ OUI:08606E*
+  ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC.
+ 
++OUI:086361*
++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
++
+ OUI:0868D0*
+  ID_OUI_FROM_DATABASE=Japan System Design
+ 
+@@ -51274,6 +51331,9 @@ OUI:0876FF*
+ OUI:087999*
+  ID_OUI_FROM_DATABASE=AIM GmbH
+ 
++OUI:087A4C*
++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
++
+ OUI:087BAA*
+  ID_OUI_FROM_DATABASE=SVYAZKOMPLEKTSERVICE, LLC
+ 
+@@ -51376,6 +51436,9 @@ OUI:08FAE0*
+ OUI:08FC52*
+  ID_OUI_FROM_DATABASE=OpenXS BV
+ 
++OUI:08FC88*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
++
+ OUI:0C130B*
+  ID_OUI_FROM_DATABASE=Uniqoteq Ltd.
+ 
+@@ -51457,6 +51520,9 @@ OUI:0C7D7C*
+ OUI:0C8230*
+  ID_OUI_FROM_DATABASE=SHENZHEN MAGNUS TECHNOLOGIES CO.,LTD
+ 
++OUI:0C8268*
++ ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
++
+ OUI:0C826A*
+  ID_OUI_FROM_DATABASE=Wuhan Huagong Genuine Optics Technology Co., Ltd
+ 
+@@ -51481,6 +51547,9 @@ OUI:0C924E*
+ OUI:0C93FB*
+  ID_OUI_FROM_DATABASE=BNS Solutions
+ 
++OUI:0C96BF*
++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
++
+ OUI:0C9D56*
+  ID_OUI_FROM_DATABASE=Consort Controls Ltd
+ 
+@@ -51871,6 +51940,9 @@ OUI:141BBD*
+ OUI:141BF0*
+  ID_OUI_FROM_DATABASE=Intellimedia Systems Ltd
+ 
++OUI:1423D7*
++ ID_OUI_FROM_DATABASE=EUTRONIX CO., LTD.
++
+ OUI:142DF5*
+  ID_OUI_FROM_DATABASE=Amphitech
+ 
+@@ -51946,6 +52018,9 @@ OUI:148FC6*
+ OUI:149090*
+  ID_OUI_FROM_DATABASE=KongTop industrial(shen zhen)CO.,LTD
+ 
++OUI:149448*
++ ID_OUI_FROM_DATABASE=BLU CASTLE S.A.
++
+ OUI:149FE8*
+  ID_OUI_FROM_DATABASE=Lenovo Mobile Communication Technology Ltd.
+ 
+@@ -52225,6 +52300,9 @@ OUI:18E7F4*
+ OUI:18E80F*
+  ID_OUI_FROM_DATABASE=Viking Electronics Inc.
+ 
++OUI:18E8DD*
++ ID_OUI_FROM_DATABASE=MODULETEK
++
+ OUI:18EF63*
+  ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
+ 
+@@ -52279,12 +52357,18 @@ OUI:1C3477*
+ OUI:1C35F1*
+  ID_OUI_FROM_DATABASE=NEW Lift Neue Elektronische Wege Steuerungsbau GmbH
+ 
++OUI:1C37BF*
++ ID_OUI_FROM_DATABASE=Cloudium Systems Ltd.
++
+ OUI:1C3A4F*
+  ID_OUI_FROM_DATABASE=AccuSpec Electronics, LLC
+ 
+ OUI:1C3DE7*
+  ID_OUI_FROM_DATABASE=Sigma Koki Co.,Ltd.
+ 
++OUI:1C3E84*
++ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
++
+ OUI:1C43EC*
+  ID_OUI_FROM_DATABASE=JAPAN CIRCUIT CO.,LTD
+ 
+@@ -52393,6 +52477,9 @@ OUI:1CB17F*
+ OUI:1CB243*
+  ID_OUI_FROM_DATABASE=TDC A/S
+ 
++OUI:1CBA8C*
++ ID_OUI_FROM_DATABASE=Texas Instruments
++
+ OUI:1CBBA8*
+  ID_OUI_FROM_DATABASE=OJSC "Ufimskiy Zavod "Promsvyaz"
+ 
+@@ -52435,6 +52522,9 @@ OUI:1CF061*
+ OUI:1CF5E7*
+  ID_OUI_FROM_DATABASE=Turtle Industry Co., Ltd.
+ 
++OUI:1CFA68*
++ ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
++
+ OUI:1CFEA7*
+  ID_OUI_FROM_DATABASE=IDentytech Solutins Ltd.
+ 
+@@ -52732,6 +52822,9 @@ OUI:24767D*
+ OUI:247703*
+  ID_OUI_FROM_DATABASE=Intel Corporate
+ 
++OUI:2481AA*
++ ID_OUI_FROM_DATABASE=KSH International Co., Ltd.
++
+ OUI:24828A*
+  ID_OUI_FROM_DATABASE=Prowave Technologies Ltd.
+ 
+@@ -52864,6 +52957,9 @@ OUI:28162E*
+ OUI:2817CE*
+  ID_OUI_FROM_DATABASE=Omnisense Ltd
+ 
++OUI:281878*
++ ID_OUI_FROM_DATABASE=Microsoft Corporation
++
+ OUI:2818FD*
+  ID_OUI_FROM_DATABASE=Aditya Infotech Ltd.
+ 
+@@ -52873,6 +52969,9 @@ OUI:2826A6*
+ OUI:2829D9*
+  ID_OUI_FROM_DATABASE=GlobalBeiMing technology (Beijing)Co. Ltd
+ 
++OUI:283152*
++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
++
+ OUI:283410*
+  ID_OUI_FROM_DATABASE=Enigma Diagnostics Limited
+ 
+@@ -52993,6 +53092,9 @@ OUI:28C718*
+ OUI:28C914*
+  ID_OUI_FROM_DATABASE=Taimag Corporation
+ 
++OUI:28CBEB*
++ ID_OUI_FROM_DATABASE=One
++
+ OUI:28CC01*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
+@@ -53008,6 +53110,9 @@ OUI:28CD4C*
+ OUI:28CFDA*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
++OUI:28CFE9*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:28D1AF*
+  ID_OUI_FROM_DATABASE=Nokia Corporation
+ 
+@@ -53080,6 +53185,9 @@ OUI:2C26C5*
+ OUI:2C27D7*
+  ID_OUI_FROM_DATABASE=Hewlett-Packard Company
+ 
++OUI:2C282D*
++ ID_OUI_FROM_DATABASE=BBK COMMUNICATIAO TECHNOLOGY CO.,LTD.
++
+ OUI:2C2D48*
+  ID_OUI_FROM_DATABASE=bct electronic GesmbH
+ 
+@@ -53098,6 +53206,9 @@ OUI:2C36A0*
+ OUI:2C36F8*
+  ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
+ 
++OUI:2C3996*
++ ID_OUI_FROM_DATABASE=SAGEMCOM
++
+ OUI:2C3A28*
+  ID_OUI_FROM_DATABASE=Fagor Electrónica
+ 
+@@ -53122,6 +53233,9 @@ OUI:2C441B*
+ OUI:2C542D*
+  ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
+ 
++OUI:2C59E5*
++ ID_OUI_FROM_DATABASE=Hewlett Packard
++
+ OUI:2C5AA3*
+  ID_OUI_FROM_DATABASE=PROMATE ELECTRONIC CO.LTD
+ 
+@@ -53143,9 +53257,6 @@ OUI:2C750F*
+ OUI:2C768A*
+  ID_OUI_FROM_DATABASE=Hewlett-Packard Company
+ 
+-OUI:2C7AFE*
+- ID_OUI_FROM_DATABASE=IEE&E "Black" ops
+-
+ OUI:2C7B5A*
+  ID_OUI_FROM_DATABASE=Milper Ltd
+ 
+@@ -53206,6 +53317,9 @@ OUI:2CCD27*
+ OUI:2CCD43*
+  ID_OUI_FROM_DATABASE=Summit Technology Group
+ 
++OUI:2CD05A*
++ ID_OUI_FROM_DATABASE=Liteon Technology Corporation
++
+ OUI:2CD1DA*
+  ID_OUI_FROM_DATABASE=Sanjole, Inc.
+ 
+@@ -53234,7 +53348,10 @@ OUI:2CEE26*
+  ID_OUI_FROM_DATABASE=Petroleum Geo-Services
+ 
+ OUI:2CF4C5*
+- ID_OUI_FROM_DATABASE=Avaya Inc
++ ID_OUI_FROM_DATABASE=Avaya, Inc
++
++OUI:30055C*
++ ID_OUI_FROM_DATABASE=Brother industries, LTD.
+ 
+ OUI:300B9C*
+  ID_OUI_FROM_DATABASE=Delta Mobile Systems, Inc.
+@@ -53575,6 +53692,9 @@ OUI:34C803*
+ OUI:34C99D*
+  ID_OUI_FROM_DATABASE=EIDOLON COMMUNICATIONS TECHNOLOGY CO. LTD.
+ 
++OUI:34CDBE*
++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
++
+ OUI:34CE94*
+  ID_OUI_FROM_DATABASE=Parsec (Pty) Ltd
+ 
+@@ -53692,6 +53812,9 @@ OUI:3863F6*
+ OUI:386645*
+  ID_OUI_FROM_DATABASE=OOSIC Technology CO.,Ltd
+ 
++OUI:386793*
++ ID_OUI_FROM_DATABASE=Asia Optical Co., Inc.
++
+ OUI:386BBB*
+  ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ 
+@@ -53914,6 +54037,9 @@ OUI:3C81D8*
+ OUI:3C83B5*
+  ID_OUI_FROM_DATABASE=Advance Vision Electronics Co. Ltd.
+ 
++OUI:3C86A8*
++ ID_OUI_FROM_DATABASE=Sangshin elecom .co,, LTD
++
+ OUI:3C8AE5*
+  ID_OUI_FROM_DATABASE=Tensun Information Technology(Hangzhou) Co.,LTD
+ 
+@@ -54019,6 +54145,9 @@ OUI:3CF52C*
+ OUI:3CF72A*
+  ID_OUI_FROM_DATABASE=Nokia Corporation
+ 
++OUI:3CFB96*
++ ID_OUI_FROM_DATABASE=Emcraft Systems LLC
++
+ OUI:4001C6*
+  ID_OUI_FROM_DATABASE=3COM EUROPE LTD
+ 
+@@ -54094,6 +54223,9 @@ OUI:404D8E*
+ OUI:4050E0*
+  ID_OUI_FROM_DATABASE=Milton Security Group LLC
+ 
++OUI:40516C*
++ ID_OUI_FROM_DATABASE=Grandex International Corporation
++
+ OUI:40520D*
+  ID_OUI_FROM_DATABASE=Pico Technology
+ 
+@@ -54173,7 +54305,7 @@ OUI:40987B*
+  ID_OUI_FROM_DATABASE=Aisino Corporation
+ 
+ OUI:409FC7*
+- ID_OUI_FROM_DATABASE=BAEKCHUN ENC Co., Ltd.
++ ID_OUI_FROM_DATABASE=BAEKCHUN I&C Co., Ltd.
+ 
+ OUI:40A6A4*
+  ID_OUI_FROM_DATABASE=PassivSystems Ltd
+@@ -54214,6 +54346,9 @@ OUI:40C245*
+ OUI:40C7C9*
+  ID_OUI_FROM_DATABASE=Naviit Inc.
+ 
++OUI:40CBA8*
++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
++
+ OUI:40CD3A*
+  ID_OUI_FROM_DATABASE=Z3 Technology
+ 
+@@ -54226,6 +54361,9 @@ OUI:40D40E*
+ OUI:40D559*
+  ID_OUI_FROM_DATABASE=MICRO S.E.R.I.
+ 
++OUI:40E730*
++ ID_OUI_FROM_DATABASE=DEY Storage Systems, Inc.
++
+ OUI:40E793*
+  ID_OUI_FROM_DATABASE=Shenzhen Siviton Technology Co.,Ltd
+ 
+@@ -54284,7 +54422,7 @@ OUI:442B03*
+  ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
+ 
+ OUI:44322A*
+- ID_OUI_FROM_DATABASE=Avaya Inc
++ ID_OUI_FROM_DATABASE=Avaya, Inc
+ 
+ OUI:44334C*
+  ID_OUI_FROM_DATABASE=Shenzhen Bilian electronic CO.,LTD
+@@ -54469,6 +54607,9 @@ OUI:44ED57*
+ OUI:44F459*
+  ID_OUI_FROM_DATABASE=Samsung Electronics
+ 
++OUI:44F849*
++ ID_OUI_FROM_DATABASE=Union Pacific Railroad
++
+ OUI:44FB42*
+  ID_OUI_FROM_DATABASE=Apple
+ 
+@@ -54625,6 +54766,9 @@ OUI:48F8B3*
+ OUI:48F8E1*
+  ID_OUI_FROM_DATABASE=Alcatel Lucent WT
+ 
++OUI:48F925*
++ ID_OUI_FROM_DATABASE=Maestronic
++
+ OUI:48FCB8*
+  ID_OUI_FROM_DATABASE=Woodstream Corporation
+ 
+@@ -54742,6 +54886,9 @@ OUI:4C774F*
+ OUI:4C7897*
+  ID_OUI_FROM_DATABASE=Arrowhead Alarm Products Ltd
+ 
++OUI:4C804F*
++ ID_OUI_FROM_DATABASE=Armstrong Monitoring Corp
++
+ OUI:4C8093*
+  ID_OUI_FROM_DATABASE=Intel Corporate
+ 
+@@ -54808,6 +54955,9 @@ OUI:4CC94F*
+ OUI:4CCA53*
+  ID_OUI_FROM_DATABASE=Skyera, Inc.
+ 
++OUI:4CCC34*
++ ID_OUI_FROM_DATABASE=Motorola Solutions Inc.
++
+ OUI:4CE676*
+  ID_OUI_FROM_DATABASE=Buffalo Inc.
+ 
+@@ -54829,6 +54979,9 @@ OUI:5001BB*
+ OUI:50053D*
+  ID_OUI_FROM_DATABASE=CyWee Group Ltd
+ 
++OUI:500604*
++ ID_OUI_FROM_DATABASE=Cisco
++
+ OUI:500B32*
+  ID_OUI_FROM_DATABASE=Foxda Technology Industrial(ShenZhen)Co.,LTD
+ 
+@@ -54865,6 +55018,9 @@ OUI:502DF4*
+ OUI:502ECE*
+  ID_OUI_FROM_DATABASE=Asahi Electronics Co.,Ltd
+ 
++OUI:503275*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
++
+ OUI:503955*
+  ID_OUI_FROM_DATABASE=Cisco SPVTG
+ 
+@@ -54943,6 +55099,9 @@ OUI:50934F*
+ OUI:509772*
+  ID_OUI_FROM_DATABASE=Westinghouse Digital
+ 
++OUI:509F27*
++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
++
+ OUI:50A4C8*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
+@@ -54986,7 +55145,7 @@ OUI:50EAD6*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
+ OUI:50EB1A*
+- ID_OUI_FROM_DATABASE=Brocade Communications Systems, Inc
++ ID_OUI_FROM_DATABASE=Brocade Communications Systems, Inc.
+ 
+ OUI:50ED94*
+  ID_OUI_FROM_DATABASE=Egatel SL
+@@ -54994,6 +55153,9 @@ OUI:50ED94*
+ OUI:50F003*
+  ID_OUI_FROM_DATABASE=Open Stack, Inc.
+ 
++OUI:50F520*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
++
+ OUI:50F61A*
+  ID_OUI_FROM_DATABASE=Kunshan JADE Technologies co., Ltd.
+ 
+@@ -55573,6 +55735,9 @@ OUI:5CF207*
+ OUI:5CF3FC*
+  ID_OUI_FROM_DATABASE=IBM Corp
+ 
++OUI:5CF8A1*
++ ID_OUI_FROM_DATABASE=Murata Manufactuaring Co.,Ltd.
++
+ OUI:5CF9DD*
+  ID_OUI_FROM_DATABASE=Dell Inc
+ 
+@@ -55651,6 +55816,9 @@ OUI:6052D0*
+ OUI:605464*
+  ID_OUI_FROM_DATABASE=Eyedro Green Solutions Inc.
+ 
++OUI:60601F*
++ ID_OUI_FROM_DATABASE=SZ DJI TECHNOLOGY CO.,LTD
++
+ OUI:6063FD*
+  ID_OUI_FROM_DATABASE=Transcend Communication Beijing Co.,Ltd.
+ 
+@@ -55807,6 +55975,9 @@ OUI:60FACD*
+ OUI:60FB42*
+  ID_OUI_FROM_DATABASE=Apple, Inc
+ 
++OUI:60FEC5*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:6400F1*
+  ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
+ 
+@@ -56014,6 +56185,9 @@ OUI:64AE0C*
+ OUI:64AE88*
+  ID_OUI_FROM_DATABASE=Polytec GmbH
+ 
++OUI:64B310*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
++
+ OUI:64B64A*
+  ID_OUI_FROM_DATABASE=ViVOtech, Inc.
+ 
+@@ -56026,6 +56200,9 @@ OUI:64BC11*
+ OUI:64C5AA*
+  ID_OUI_FROM_DATABASE=South African Broadcasting Corporation
+ 
++OUI:64C667*
++ ID_OUI_FROM_DATABASE=Barnes&Noble
++
+ OUI:64C6AF*
+  ID_OUI_FROM_DATABASE=AXERRA Networks Ltd
+ 
+@@ -56182,6 +56359,9 @@ OUI:6879ED*
+ OUI:687F74*
+  ID_OUI_FROM_DATABASE=Cisco-Linksys, LLC
+ 
++OUI:68831A*
++ ID_OUI_FROM_DATABASE=Pandora Mobility Corporation
++
+ OUI:688470*
+  ID_OUI_FROM_DATABASE=eSSys Co.,Ltd
+ 
+@@ -56233,6 +56413,9 @@ OUI:68AB8A*
+ OUI:68AF13*
+  ID_OUI_FROM_DATABASE=Futura Mobility
+ 
++OUI:68B094*
++ ID_OUI_FROM_DATABASE=INESA ELECTRON CO.,LTD
++
+ OUI:68B43A*
+  ID_OUI_FROM_DATABASE=WaterFurnace International, Inc.
+ 
+@@ -56500,6 +56683,9 @@ OUI:700514*
+ OUI:700BC0*
+  ID_OUI_FROM_DATABASE=Dewav Technology Company
+ 
++OUI:70105C*
++ ID_OUI_FROM_DATABASE=Cisco
++
+ OUI:701124*
+  ID_OUI_FROM_DATABASE=Apple
+ 
+@@ -56542,8 +56728,11 @@ OUI:7032D5*
+ OUI:703811*
+  ID_OUI_FROM_DATABASE=Invensys Rail
+ 
++OUI:7038B4*
++ ID_OUI_FROM_DATABASE=Low Tech Solutions
++
+ OUI:7038EE*
+- ID_OUI_FROM_DATABASE=Avaya Inc
++ ID_OUI_FROM_DATABASE=Avaya, Inc
+ 
+ OUI:703AD8*
+  ID_OUI_FROM_DATABASE=Shenzhen Afoundry Electronic Co., Ltd
+@@ -56734,6 +56923,9 @@ OUI:7415E2*
+ OUI:741E93*
+  ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Tech.Co.,Ltd.
+ 
++OUI:74258A*
++ ID_OUI_FROM_DATABASE=Hangzhou H3C Technologies Co., Limited
++
+ OUI:74273C*
+  ID_OUI_FROM_DATABASE=ChangYang Technology (Nanjing) Co., LTD
+ 
+@@ -56821,6 +57013,9 @@ OUI:747E1A*
+ OUI:747E2D*
+  ID_OUI_FROM_DATABASE=Beijing Thomson CITIC Digital Technology Co. LTD.
+ 
++OUI:74867A*
++ ID_OUI_FROM_DATABASE=Dell Inc PCBA Test
++
+ OUI:74888B*
+  ID_OUI_FROM_DATABASE=ADB Broadband Italia
+ 
+@@ -56920,6 +57115,9 @@ OUI:74F06D*
+ OUI:74F07D*
+  ID_OUI_FROM_DATABASE=BnCOM Co.,Ltd
+ 
++OUI:74F102*
++ ID_OUI_FROM_DATABASE=Beijing HCHCOM Technology Co., Ltd
++
+ OUI:74F612*
+  ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ 
+@@ -56965,6 +57163,9 @@ OUI:781DBA*
+ OUI:781DFD*
+  ID_OUI_FROM_DATABASE=Jabil Inc
+ 
++OUI:781FDB*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
++
+ OUI:78223D*
+  ID_OUI_FROM_DATABASE=Affirmed Networks
+ 
+@@ -57013,6 +57214,9 @@ OUI:78510C*
+ OUI:785262*
+  ID_OUI_FROM_DATABASE=Shenzhen Hojy Software Co., Ltd.
+ 
++OUI:78542E*
++ ID_OUI_FROM_DATABASE=D-Link International
++
+ OUI:785517*
+  ID_OUI_FROM_DATABASE=SankyuElectronics
+ 
+@@ -57064,6 +57268,9 @@ OUI:7898FD*
+ OUI:78995C*
+  ID_OUI_FROM_DATABASE=Nationz Technologies Inc
+ 
++OUI:789966*
++ ID_OUI_FROM_DATABASE=Musilab Electronics (DongGuan)Co.,Ltd.
++
+ OUI:78998F*
+  ID_OUI_FROM_DATABASE=MEDILINE ITALIA SRL
+ 
+@@ -57212,7 +57419,7 @@ OUI:7C11BE*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
+ OUI:7C1476*
+- ID_OUI_FROM_DATABASE=Damall Technologies S.A.S. Di Ludovic Anselme Glaglanon & C.
++ ID_OUI_FROM_DATABASE=Damall Technologies SAS
+ 
+ OUI:7C160D*
+  ID_OUI_FROM_DATABASE=Saia-Burgess Controls AG
+@@ -57322,6 +57529,9 @@ OUI:7C94B2*
+ OUI:7C9A9B*
+  ID_OUI_FROM_DATABASE=VSE valencia smart energy
+ 
++OUI:7CA15D*
++ ID_OUI_FROM_DATABASE=GN ReSound A/S
++
+ OUI:7CA29B*
+  ID_OUI_FROM_DATABASE=D.SignT GmbH & Co. KG
+ 
+@@ -57365,7 +57575,7 @@ OUI:7CC8D7*
+  ID_OUI_FROM_DATABASE=Damalisk
+ 
+ OUI:7CCB0D*
+- ID_OUI_FROM_DATABASE=Aaxeon Technologies Inc.
++ ID_OUI_FROM_DATABASE=Antaira Technologies, LLC
+ 
+ OUI:7CCFCF*
+  ID_OUI_FROM_DATABASE=Shanghai SEARI Intelligent System Co., Ltd
+@@ -57373,6 +57583,9 @@ OUI:7CCFCF*
+ OUI:7CD1C3*
+  ID_OUI_FROM_DATABASE=Apple Inc
+ 
++OUI:7CD762*
++ ID_OUI_FROM_DATABASE=Freestyle Technology Pty Ltd
++
+ OUI:7CD9FE*
+  ID_OUI_FROM_DATABASE=New Cosmos Electric Co., Ltd.
+ 
+@@ -57418,6 +57631,9 @@ OUI:7CF0BA*
+ OUI:7CF429*
+  ID_OUI_FROM_DATABASE=NUUO Inc.
+ 
++OUI:7CFADF*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:7CFE28*
+  ID_OUI_FROM_DATABASE=Salutron Inc.
+ 
+@@ -57721,6 +57937,9 @@ OUI:845787*
+ OUI:845DD7*
+  ID_OUI_FROM_DATABASE=Shenzhen Netcom Electronics Co.,Ltd
+ 
++OUI:846223*
++ ID_OUI_FROM_DATABASE=Shenzhen Coship Electronics Co., Ltd.
++
+ OUI:8462A6*
+  ID_OUI_FROM_DATABASE=EuroCB (Phils), Inc.
+ 
+@@ -57823,12 +58042,18 @@ OUI:84EA99*
+ OUI:84ED33*
+  ID_OUI_FROM_DATABASE=BBMC Co.,Ltd
+ 
++OUI:84F493*
++ ID_OUI_FROM_DATABASE=OMS spol. s.r.o.
++
+ OUI:84F64C*
+  ID_OUI_FROM_DATABASE=Cross Point BV
+ 
+ OUI:84FCFE*
+  ID_OUI_FROM_DATABASE=Apple
+ 
++OUI:880DD9*
++ ID_OUI_FROM_DATABASE=ISC applied systems corp
++
+ OUI:881036*
+  ID_OUI_FROM_DATABASE=Panodic(ShenZhen) Electronics Limted
+ 
+@@ -57850,6 +58075,9 @@ OUI:8823FE*
+ OUI:88252C*
+  ID_OUI_FROM_DATABASE=Arcadyan Technology Corporation
+ 
++OUI:882E5A*
++ ID_OUI_FROM_DATABASE=storONE
++
+ OUI:88308A*
+  ID_OUI_FROM_DATABASE=Murata Manufactuaring Co.,Ltd.
+ 
+@@ -58105,6 +58333,9 @@ OUI:8C76C1*
+ OUI:8C7712*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
++OUI:8C7716*
++ ID_OUI_FROM_DATABASE=LONGCHEER TELECOMMUNICATION LIMITED
++
+ OUI:8C7B9D*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
+@@ -58249,6 +58480,9 @@ OUI:901900*
+ OUI:901B0E*
+  ID_OUI_FROM_DATABASE=Fujitsu Technology Solutions GmbH
+ 
++OUI:901D27*
++ ID_OUI_FROM_DATABASE=zte corporation
++
+ OUI:901EDD*
+  ID_OUI_FROM_DATABASE=GREAT COMPUTER CORPORATION
+ 
+@@ -58423,6 +58657,9 @@ OUI:90D852*
+ OUI:90D92C*
+  ID_OUI_FROM_DATABASE=HUG-WITSCHI AG
+ 
++OUI:90DA4E*
++ ID_OUI_FROM_DATABASE=AVANU
++
+ OUI:90E0F0*
+  ID_OUI_FROM_DATABASE=IEEE P1722
+ 
+@@ -58597,6 +58834,9 @@ OUI:94CCB9*
+ OUI:94CDAC*
+  ID_OUI_FROM_DATABASE=Creowave Oy
+ 
++OUI:94CE2C*
++ ID_OUI_FROM_DATABASE=Sony Mobile Communications AB
++
+ OUI:94D019*
+  ID_OUI_FROM_DATABASE=Cydle Corp.
+ 
+@@ -58636,6 +58876,9 @@ OUI:94E711*
+ OUI:94E848*
+  ID_OUI_FROM_DATABASE=FYLDE MICRO LTD
+ 
++OUI:94EBCD*
++ ID_OUI_FROM_DATABASE=Research In Motion Limited
++
+ OUI:94F692*
+  ID_OUI_FROM_DATABASE=Geminico co.,Ltd.
+ 
+@@ -58876,6 +59119,9 @@ OUI:9C3178*
+ OUI:9C31B6*
+  ID_OUI_FROM_DATABASE=Kulite Semiconductor Products Inc
+ 
++OUI:9C3AAF*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
++
+ OUI:9C417C*
+  ID_OUI_FROM_DATABASE=Hame  Technology Co.,  Limited
+ 
+@@ -59032,6 +59278,9 @@ OUI:9CE1D6*
+ OUI:9CE635*
+  ID_OUI_FROM_DATABASE=Nintendo Co., Ltd.
+ 
++OUI:9CE6E7*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
++
+ OUI:9CEBE8*
+  ID_OUI_FROM_DATABASE=BizLink (Kunshan) Co.,Ltd
+ 
+@@ -59161,6 +59410,9 @@ OUI:A071A9*
+ OUI:A07332*
+  ID_OUI_FROM_DATABASE=Cashmaster International Limited
+ 
++OUI:A073FC*
++ ID_OUI_FROM_DATABASE=Rancore Technologies Private Limited
++
+ OUI:A07591*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
+@@ -59476,6 +59728,12 @@ OUI:A4E731*
+ OUI:A4E7E4*
+  ID_OUI_FROM_DATABASE=Connex GmbH
+ 
++OUI:A4E991*
++ ID_OUI_FROM_DATABASE=SISTEMAS AUDIOVISUALES ITELSIS S.L.
++
++OUI:A4EBD3*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
++
+ OUI:A4ED4E*
+  ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ 
+@@ -59701,6 +59959,9 @@ OUI:AC162D*
+ OUI:AC1702*
+  ID_OUI_FROM_DATABASE=Fibar Group sp. z o.o.
+ 
++OUI:AC1826*
++ ID_OUI_FROM_DATABASE=SEIKO EPSON CORPORATION
++
+ OUI:AC199F*
+  ID_OUI_FROM_DATABASE=SUNGROW POWER SUPPLY CO.,LTD.
+ 
+@@ -59950,6 +60211,9 @@ OUI:B01266*
+ OUI:B01408*
+  ID_OUI_FROM_DATABASE=LIGHTSPEED INTERNATIONAL CO.
+ 
++OUI:B01743*
++ ID_OUI_FROM_DATABASE=EDISON GLOBAL CIRCUITS LLC
++
+ OUI:B01B7C*
+  ID_OUI_FROM_DATABASE=Ontrol A.S.
+ 
+@@ -60055,6 +60319,9 @@ OUI:B0B2DC*
+ OUI:B0B32B*
+  ID_OUI_FROM_DATABASE=Slican Sp. z o.o.
+ 
++OUI:B0B448*
++ ID_OUI_FROM_DATABASE=Texas Instruments
++
+ OUI:B0B8D5*
+  ID_OUI_FROM_DATABASE=Nanjing Nengrui Auto Equipment CO.,Ltd
+ 
+@@ -60304,6 +60571,9 @@ OUI:B4D8A9*
+ OUI:B4D8DE*
+  ID_OUI_FROM_DATABASE=iota Computing, Inc.
+ 
++OUI:B4DD15*
++ ID_OUI_FROM_DATABASE=ControlThings Oy Ab
++
+ OUI:B4DF3B*
+  ID_OUI_FROM_DATABASE=Chromlech
+ 
+@@ -60349,6 +60619,9 @@ OUI:B80B9D*
+ OUI:B81413*
+  ID_OUI_FROM_DATABASE=Keen High Holding(HK) Ltd.
+ 
++OUI:B81619*
++ ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
++
+ OUI:B817C2*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
+@@ -60523,6 +60796,9 @@ OUI:B8BB6D*
+ OUI:B8BEBF*
+  ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
+ 
++OUI:B8C46F*
++ ID_OUI_FROM_DATABASE=PRIMMCON INDUSTRIES INC
++
+ OUI:B8C68E*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
+@@ -60721,6 +60997,9 @@ OUI:BC851F*
+ OUI:BC8B55*
+  ID_OUI_FROM_DATABASE=NPP ELIKS America Inc. DBA T&M Atlantic
+ 
++OUI:BC926B*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:BC99BC*
+  ID_OUI_FROM_DATABASE=FonSee Technology Inc.
+ 
+@@ -60766,6 +61045,9 @@ OUI:BCCD45*
+ OUI:BCCFCC*
+  ID_OUI_FROM_DATABASE=HTC Corporation
+ 
++OUI:BCD177*
++ ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
++
+ OUI:BCD5B6*
+  ID_OUI_FROM_DATABASE=d2d technologies
+ 
+@@ -60883,6 +61165,9 @@ OUI:C0830A*
+ OUI:C0847A*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
++OUI:C0885B*
++ ID_OUI_FROM_DATABASE=SnD Tech Co., Ltd.
++
+ OUI:C08ADE*
+  ID_OUI_FROM_DATABASE=Ruckus Wireless
+ 
+@@ -61408,6 +61693,9 @@ OUI:C8E1A7*
+ OUI:C8EE08*
+  ID_OUI_FROM_DATABASE=TANGTOP TECHNOLOGY CO.,LTD
+ 
++OUI:C8EEA6*
++ ID_OUI_FROM_DATABASE=Shenzhen SHX Technology Co., Ltd
++
+ OUI:C8EF2E*
+  ID_OUI_FROM_DATABASE=Beijing Gefei Tech. Co., Ltd
+ 
+@@ -61450,6 +61738,9 @@ OUI:CC09C8*
+ OUI:CC0CDA*
+  ID_OUI_FROM_DATABASE=Miljovakt AS
+ 
++OUI:CC0DEC*
++ ID_OUI_FROM_DATABASE=Cisco SPVTG
++
+ OUI:CC14A6*
+  ID_OUI_FROM_DATABASE=Yichun MyEnergy Domain, Inc
+ 
+@@ -61513,6 +61804,9 @@ OUI:CC5C75*
+ OUI:CC5D4E*
+  ID_OUI_FROM_DATABASE=ZyXEL Communications Corporation
+ 
++OUI:CC5D57*
++ ID_OUI_FROM_DATABASE=Information  System Research Institute,Inc.
++
+ OUI:CC60BB*
+  ID_OUI_FROM_DATABASE=Empower RF Systems
+ 
+@@ -61690,6 +61984,9 @@ OUI:D023DB*
+ OUI:D02788*
+  ID_OUI_FROM_DATABASE=Hon Hai Precision Ind.Co.Ltd
+ 
++OUI:D02DB3*
++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
++
+ OUI:D03110*
+  ID_OUI_FROM_DATABASE=Ingenic Semiconductor Co.,Ltd
+ 
+@@ -61744,6 +62041,9 @@ OUI:D0699E*
+ OUI:D0738E*
+  ID_OUI_FROM_DATABASE=DONG OH PRECISION CO., LTD.
+ 
++OUI:D073D5*
++ ID_OUI_FROM_DATABASE=LIFI LABS MANAGEMENT PTY LTD
++
+ OUI:D075BE*
+  ID_OUI_FROM_DATABASE=Reno A&E
+ 
+@@ -61792,6 +62092,9 @@ OUI:D0B53D*
+ OUI:D0BB80*
+  ID_OUI_FROM_DATABASE=SHL Telemedicine International Ltd.
+ 
++OUI:D0BE2C*
++ ID_OUI_FROM_DATABASE=CNSLink Co., Ltd.
++
+ OUI:D0C1B1*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
+@@ -61811,11 +62114,14 @@ OUI:D0D212*
+  ID_OUI_FROM_DATABASE=K2NET Co.,Ltd.
+ 
+ OUI:D0D286*
+- ID_OUI_FROM_DATABASE=Beckman Coulter Biomedical K.K.
++ ID_OUI_FROM_DATABASE=Beckman Coulter K.K.
+ 
+ OUI:D0D3FC*
+  ID_OUI_FROM_DATABASE=Mios, Ltd.
+ 
++OUI:D0D471*
++ ID_OUI_FROM_DATABASE=MVTECH co., Ltd
++
+ OUI:D0D6CC*
+  ID_OUI_FROM_DATABASE=Wintop
+ 
+@@ -61858,6 +62164,9 @@ OUI:D4000D*
+ OUI:D40057*
+  ID_OUI_FROM_DATABASE=MC Technologies GmbH
+ 
++OUI:D40129*
++ ID_OUI_FROM_DATABASE=Broadcom Corporation
++
+ OUI:D4024A*
+  ID_OUI_FROM_DATABASE=Delphian Systems LLC
+ 
+@@ -61960,6 +62269,9 @@ OUI:D46CBF*
+ OUI:D46CDA*
+  ID_OUI_FROM_DATABASE=CSM GmbH
+ 
++OUI:D46E5C*
++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
++
+ OUI:D46F42*
+  ID_OUI_FROM_DATABASE=WAXESS USA Inc
+ 
+@@ -62239,6 +62551,9 @@ OUI:D8AF3B*
+ OUI:D8AFF1*
+  ID_OUI_FROM_DATABASE=Panasonic Appliances Company
+ 
++OUI:D8B02E*
++ ID_OUI_FROM_DATABASE=Guangzhou Zonerich Business Machine Co., Ltd
++
+ OUI:D8B12A*
+  ID_OUI_FROM_DATABASE=Panasonic Mobile Communications Co., Ltd.
+ 
+@@ -62324,7 +62639,7 @@ OUI:DC07C1*
+  ID_OUI_FROM_DATABASE=HangZhou QiYang Technology Co.,Ltd.
+ 
+ OUI:DC0B1A*
+- ID_OUI_FROM_DATABASE=ADB Broadband SpA
++ ID_OUI_FROM_DATABASE=ADB Broadband Italia
+ 
+ OUI:DC0EA1*
+  ID_OUI_FROM_DATABASE=COMPAL INFORMATION (KUNSHAN) CO., LTD
+@@ -62338,6 +62653,9 @@ OUI:DC175A*
+ OUI:DC1D9F*
+  ID_OUI_FROM_DATABASE=U & B tech
+ 
++OUI:DC1DD4*
++ ID_OUI_FROM_DATABASE=Microstep-MIS spol. s r.o.
++
+ OUI:DC1EA3*
+  ID_OUI_FROM_DATABASE=Accensus LLC
+ 
+@@ -62497,6 +62815,9 @@ OUI:E00C7F*
+ OUI:E0143E*
+  ID_OUI_FROM_DATABASE=Modoosis Inc.
+ 
++OUI:E01877*
++ ID_OUI_FROM_DATABASE=Fujitsu Limited
++
+ OUI:E01C41*
+  ID_OUI_FROM_DATABASE=Aerohive Networks Inc.
+ 
+@@ -62650,6 +62971,9 @@ OUI:E0C2B7*
+ OUI:E0C3F3*
+  ID_OUI_FROM_DATABASE=ZTE Corporation
+ 
++OUI:E0C6B3*
++ ID_OUI_FROM_DATABASE=MilDef AB
++
+ OUI:E0C79D*
+  ID_OUI_FROM_DATABASE=Texas Instruments
+ 
+@@ -62731,6 +63055,9 @@ OUI:E41C4B*
+ OUI:E41F13*
+  ID_OUI_FROM_DATABASE=IBM Corp
+ 
++OUI:E425E7*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:E425E9*
+  ID_OUI_FROM_DATABASE=Color-Chip
+ 
+@@ -62785,12 +63112,18 @@ OUI:E455EA*
+ OUI:E45614*
+  ID_OUI_FROM_DATABASE=Suttle Apparatus
+ 
++OUI:E457A8*
++ ID_OUI_FROM_DATABASE=Stuart Manufacturing, Inc.
++
+ OUI:E46449*
+  ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ 
+ OUI:E467BA*
+  ID_OUI_FROM_DATABASE=Danish Interpretation Systems A/S
+ 
++OUI:E468A3*
++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
++
+ OUI:E46C21*
+  ID_OUI_FROM_DATABASE=messMa GmbH
+ 
+@@ -63073,6 +63406,9 @@ OUI:E8CBA1*
+ OUI:E8CC32*
+  ID_OUI_FROM_DATABASE=Micronet  LTD
+ 
++OUI:E8CD2D*
++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
++
+ OUI:E8D0FA*
+  ID_OUI_FROM_DATABASE=MKS Instruments Deutschland GmbH
+ 
+@@ -63136,9 +63472,15 @@ OUI:EC233D*
+ OUI:EC2368*
+  ID_OUI_FROM_DATABASE=IntelliVoice Co.,Ltd.
+ 
++OUI:EC2C49*
++ ID_OUI_FROM_DATABASE=University of Tokyo
++
+ OUI:EC3091*
+  ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
+ 
++OUI:EC3586*
++ ID_OUI_FROM_DATABASE=Apple`
++
+ OUI:EC3BF0*
+  ID_OUI_FROM_DATABASE=NovelSat
+ 
+@@ -63382,9 +63724,15 @@ OUI:F04DA2*
+ OUI:F05849*
+  ID_OUI_FROM_DATABASE=CareView Communications
+ 
++OUI:F05A09*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
++
+ OUI:F05D89*
+  ID_OUI_FROM_DATABASE=Dycon Limited
+ 
++OUI:F05DC8*
++ ID_OUI_FROM_DATABASE=Duracell Powermat
++
+ OUI:F05F5A*
+  ID_OUI_FROM_DATABASE=Getriebebau NORD GmbH and Co. KG
+ 
+@@ -63400,6 +63748,9 @@ OUI:F065DD*
+ OUI:F06853*
+  ID_OUI_FROM_DATABASE=Integrated Corporation
+ 
++OUI:F06BCA*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
++
+ OUI:F073AE*
+  ID_OUI_FROM_DATABASE=PEAK-System Technik
+ 
+@@ -63766,6 +64117,9 @@ OUI:F82EDB*
+ OUI:F82F5B*
+  ID_OUI_FROM_DATABASE=eGauge Systems LLC
+ 
++OUI:F82FA8*
++ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
++
+ OUI:F83094*
+  ID_OUI_FROM_DATABASE=Alcatel-Lucent Telecom Limited
+ 
+@@ -64018,6 +64372,9 @@ OUI:FC5090*
+ OUI:FC52CE*
+  ID_OUI_FROM_DATABASE=Control iD
+ 
++OUI:FC58FA*
++ ID_OUI_FROM_DATABASE=Shen Zhen Shi Xin Zhong Xin Technology Co.,Ltd.
++
+ OUI:FC5B24*
+  ID_OUI_FROM_DATABASE=Weibel Scientific A/S
+ 
+@@ -64051,6 +64408,9 @@ OUI:FC8329*
+ OUI:FC8399*
+  ID_OUI_FROM_DATABASE=Avaya, Inc
+ 
++OUI:FC8B97*
++ ID_OUI_FROM_DATABASE=Shenzhen Gongjin Electronics Co.,Ltd
++
+ OUI:FC8E7E*
+  ID_OUI_FROM_DATABASE=Pace plc
+ 
+@@ -64108,6 +64468,12 @@ OUI:FCD4F6*
+ OUI:FCD6BD*
+  ID_OUI_FROM_DATABASE=Robert Bosch GmbH
+ 
++OUI:FCDB96*
++ ID_OUI_FROM_DATABASE=ENERVALLEY CO., LTD
++
++OUI:FCDD55*
++ ID_OUI_FROM_DATABASE=Shenzhen WeWins wireless Co.,Ltd
++
+ OUI:FCE192*
+  ID_OUI_FROM_DATABASE=Sichuan Jinwangtong Electronic Science&Technology Co,.Ltd
+ 
+diff --git a/hwdb/20-pci-vendor-product.hwdb b/hwdb/20-pci-vendor-product.hwdb
+index 2e87004..f3fbbb7 100644
+--- a/hwdb/20-pci-vendor-product.hwdb
++++ b/hwdb/20-pci-vendor-product.hwdb
+@@ -3,14 +3,11 @@
+ # Data imported from: http://pci-ids.ucw.cz/v2.2/pci.ids
+ 
+ pci:v00000010*
+- ID_VENDOR_FROM_DATABASE=Allied Telesis, Inc
++ ID_VENDOR_FROM_DATABASE=Allied Telesis, Inc (Wrong ID)
+ 
+ pci:v00000010d00008139*
+  ID_PRODUCT_FROM_DATABASE=AT-2500TX V3 Ethernet
+ 
+-pci:v0000001A*
+- ID_VENDOR_FROM_DATABASE=Ascend Communications, Inc.
+-
+ pci:v0000001C*
+  ID_VENDOR_FROM_DATABASE=PEAK-System Technik GmbH
+ 
+@@ -23,9 +20,6 @@ pci:v0000001Cd00000001sv0000001Csd00000004*
+ pci:v0000001Cd00000001sv0000001Csd00000005*
+  ID_PRODUCT_FROM_DATABASE=2 Channel CAN Bus SJC1000 (Optically Isolated)
+ 
+-pci:v00000033*
+- ID_VENDOR_FROM_DATABASE=Paradyne corp.
+-
+ pci:v0000003D*
+  ID_VENDOR_FROM_DATABASE=Lockheed Martin-Marietta Corp
+ 
+@@ -35,60 +29,9 @@ pci:v00000059*
+ pci:v00000070*
+  ID_VENDOR_FROM_DATABASE=Hauppauge computer works Inc.
+ 
+-pci:v00000070d00000003*
+- ID_PRODUCT_FROM_DATABASE=WinTV PVR-250
+-
+-pci:v00000070d00000009*
+- ID_PRODUCT_FROM_DATABASE=WinTV PVR-150
+-
+-pci:v00000070d00000801*
+- ID_PRODUCT_FROM_DATABASE=WinTV PVR-150
+-
+-pci:v00000070d00000807*
+- ID_PRODUCT_FROM_DATABASE=WinTV PVR-150
+-
+-pci:v00000070d00004000*
+- ID_PRODUCT_FROM_DATABASE=WinTV PVR-350
+-
+-pci:v00000070d00004001*
+- ID_PRODUCT_FROM_DATABASE=WinTV PVR-250 (v1)
+-
+-pci:v00000070d00004009*
+- ID_PRODUCT_FROM_DATABASE=WinTV PVR-250
+-
+-pci:v00000070d00004800*
+- ID_PRODUCT_FROM_DATABASE=WinTV PVR-350
+-
+-pci:v00000070d00004801*
+- ID_PRODUCT_FROM_DATABASE=WinTV PVR-250 MCE
+-
+-pci:v00000070d00004803*
+- ID_PRODUCT_FROM_DATABASE=WinTV PVR-250
+-
+-pci:v00000070d00007444*
+- ID_PRODUCT_FROM_DATABASE=WinTV HVR-1600
+-
+ pci:v00000070d00007801*
+  ID_PRODUCT_FROM_DATABASE=WinTV HVR-1800 MCE
+ 
+-pci:v00000070d00008003*
+- ID_PRODUCT_FROM_DATABASE=WinTV PVR-150
+-
+-pci:v00000070d00008801*
+- ID_PRODUCT_FROM_DATABASE=WinTV PVR-150
+-
+-pci:v00000070d0000C108*
+- ID_PRODUCT_FROM_DATABASE=WinTV-HVR-4400-HD model 1278
+-
+-pci:v00000070d0000C801*
+- ID_PRODUCT_FROM_DATABASE=WinTV PVR-150
+-
+-pci:v00000070d0000E807*
+- ID_PRODUCT_FROM_DATABASE=WinTV PVR-500 MCE (1st tuner)
+-
+-pci:v00000070d0000E817*
+- ID_PRODUCT_FROM_DATABASE=WinTV PVR-500 MCE (2nd tuner)
+-
+ pci:v00000071*
+  ID_VENDOR_FROM_DATABASE=Nebula Electronics Ltd.
+ 
+@@ -101,9 +44,6 @@ pci:v00000095d00000680*
+ pci:v000000A7*
+  ID_VENDOR_FROM_DATABASE=Teles AG (Wrong ID)
+ 
+-pci:v000000F5*
+- ID_VENDOR_FROM_DATABASE=BFG Technologies, Inc.
+-
+ pci:v00000100*
+  ID_VENDOR_FROM_DATABASE=Ncipher Corp Ltd
+ 
+@@ -125,39 +65,27 @@ pci:v0000021Bd00008139*
+ pci:v00000270*
+  ID_VENDOR_FROM_DATABASE=Hauppauge computer works Inc. (Wrong ID)
+ 
+-pci:v00000291*
+- ID_VENDOR_FROM_DATABASE=Davicom Semiconductor, Inc.
+-
+-pci:v00000291d00008212*
+- ID_PRODUCT_FROM_DATABASE=DM9102A(DM9102AE, SM9102AF) Ethernet 100/10 MBit(Rev 40)
+-
+ pci:v000002AC*
+  ID_VENDOR_FROM_DATABASE=SpeedStream
+ 
+ pci:v000002ACd00001012*
+  ID_PRODUCT_FROM_DATABASE=1012 PCMCIA 10/100 Ethernet Card [RTL81xx]
+ 
+-pci:v000002E0*
+- ID_VENDOR_FROM_DATABASE=XFX Pine Group Inc
+-
+ pci:v00000303*
+  ID_VENDOR_FROM_DATABASE=Hewlett-Packard Company (Wrong ID)
+ 
+ pci:v00000308*
+- ID_VENDOR_FROM_DATABASE=ZyXEL Communications Corporation
++ ID_VENDOR_FROM_DATABASE=ZyXEL Communications Corporation (Wrong ID)
+ 
+ pci:v00000315*
+  ID_VENDOR_FROM_DATABASE=SK-Electronics Co., Ltd.
+ 
+ pci:v00000357*
+- ID_VENDOR_FROM_DATABASE=TTTech AG
++ ID_VENDOR_FROM_DATABASE=TTTech Computertechnik AG (Wrong ID)
+ 
+ pci:v00000357d0000000A*
+  ID_PRODUCT_FROM_DATABASE=TTP-Monitoring Card V2.0
+ 
+-pci:v0000036F*
+- ID_VENDOR_FROM_DATABASE=Trigem Computer Inc.
+-
+ pci:v00000432*
+  ID_VENDOR_FROM_DATABASE=SCM Microsystems, Inc.
+ 
+@@ -185,9 +113,6 @@ pci:v00000721*
+ pci:v00000777*
+  ID_VENDOR_FROM_DATABASE=Ubiquiti Networks, Inc.
+ 
+-pci:v00000777d00003005*
+- ID_PRODUCT_FROM_DATABASE=XtremeRange5
+-
+ pci:v00000795*
+  ID_VENDOR_FROM_DATABASE=Wired Inc.
+ 
+@@ -197,18 +122,6 @@ pci:v00000795d00006663*
+ pci:v00000795d00006666*
+  ID_PRODUCT_FROM_DATABASE=MediaPress (MPEG2 encoder board)
+ 
+-pci:v000007CA*
+- ID_VENDOR_FROM_DATABASE=AVerMedia Technologies Inc.
+-
+-pci:v000007CAd0000534A*
+- ID_PRODUCT_FROM_DATABASE=Slim mobile Express DVB-T (Fujitsu)
+-
+-pci:v000007CAd0000A301*
+- ID_PRODUCT_FROM_DATABASE=AVerTV 301
+-
+-pci:v000007CAd0000B808*
+- ID_PRODUCT_FROM_DATABASE=AVerTV DVB-T Volar (USB 2.0)
+-
+ pci:v000007D0*
+  ID_VENDOR_FROM_DATABASE=ITT Geospatial Systems
+ 
+@@ -1871,6 +1784,9 @@ pci:v00001002d00004152sv00001043sd0000C002*
+ pci:v00001002d00004152sv00001043sd0000C01A*
+  ID_PRODUCT_FROM_DATABASE=A9600XT/TD
+ 
++pci:v00001002d00004152sv00001462sd00009510*
++ ID_PRODUCT_FROM_DATABASE=RX9600XT (MS-8951)
++
+ pci:v00001002d00004152sv0000174Bsd00007C29*
+  ID_PRODUCT_FROM_DATABASE=Sapphire Radeon 9600XT
+ 
+@@ -2243,6 +2159,9 @@ pci:v00001002d00004382*
+ pci:v00001002d00004383*
+  ID_PRODUCT_FROM_DATABASE=SBx00 Azalia (Intel HDA)
+ 
++pci:v00001002d00004383sv00001019sd00002120*
++ ID_PRODUCT_FROM_DATABASE=A785GM-M
++
+ pci:v00001002d00004383sv0000103Csd00001611*
+  ID_PRODUCT_FROM_DATABASE=Pavilion DM1Z-3000
+ 
+@@ -2276,6 +2195,9 @@ pci:v00001002d00004384*
+ pci:v00001002d00004385*
+  ID_PRODUCT_FROM_DATABASE=SBx00 SMBus Controller
+ 
++pci:v00001002d00004385sv00001019sd00002120*
++ ID_PRODUCT_FROM_DATABASE=A785GM-M
++
+ pci:v00001002d00004385sv0000103Csd00001611*
+  ID_PRODUCT_FROM_DATABASE=Pavilion DM1Z-3000
+ 
+@@ -2477,6 +2399,9 @@ pci:v00001002d00004395*
+ pci:v00001002d00004396*
+  ID_PRODUCT_FROM_DATABASE=SB7x0/SB8x0/SB9x0 USB EHCI Controller
+ 
++pci:v00001002d00004396sv00001019sd00002120*
++ ID_PRODUCT_FROM_DATABASE=A785GM-M
++
+ pci:v00001002d00004396sv0000103Csd00001611*
+  ID_PRODUCT_FROM_DATABASE=Pavilion DM1Z-3000
+ 
+@@ -2495,6 +2420,9 @@ pci:v00001002d00004396sv0000174Bsd00001001*
+ pci:v00001002d00004397*
+  ID_PRODUCT_FROM_DATABASE=SB7x0/SB8x0/SB9x0 USB OHCI0 Controller
+ 
++pci:v00001002d00004397sv00001019sd00002120*
++ ID_PRODUCT_FROM_DATABASE=A785GM-M
++
+ pci:v00001002d00004397sv0000103Csd00001611*
+  ID_PRODUCT_FROM_DATABASE=Pavilion DM1Z-3000
+ 
+@@ -2513,6 +2441,9 @@ pci:v00001002d00004397sv0000174Bsd00001001*
+ pci:v00001002d00004398*
+  ID_PRODUCT_FROM_DATABASE=SB7x0 USB OHCI1 Controller
+ 
++pci:v00001002d00004398sv00001019sd00002120*
++ ID_PRODUCT_FROM_DATABASE=A785GM-M
++
+ pci:v00001002d00004398sv00001043sd000082EF*
+  ID_PRODUCT_FROM_DATABASE=M3A78-EH Motherboard
+ 
+@@ -2522,6 +2453,9 @@ pci:v00001002d00004398sv000015D9sd0000A811*
+ pci:v00001002d00004399*
+  ID_PRODUCT_FROM_DATABASE=SB7x0/SB8x0/SB9x0 USB OHCI2 Controller
+ 
++pci:v00001002d00004399sv00001019sd00002120*
++ ID_PRODUCT_FROM_DATABASE=A785GM-M
++
+ pci:v00001002d00004399sv00001043sd000082EF*
+  ID_PRODUCT_FROM_DATABASE=M3A78-EH Motherboard
+ 
+@@ -2534,12 +2468,18 @@ pci:v00001002d00004399sv0000174Bsd00001001*
+ pci:v00001002d0000439C*
+  ID_PRODUCT_FROM_DATABASE=SB7x0/SB8x0/SB9x0 IDE Controller
+ 
++pci:v00001002d0000439Csv00001019sd00002120*
++ ID_PRODUCT_FROM_DATABASE=A785GM-M
++
+ pci:v00001002d0000439Csv00001043sd000082EF*
+  ID_PRODUCT_FROM_DATABASE=M3A78-EH Motherboard
+ 
+ pci:v00001002d0000439D*
+  ID_PRODUCT_FROM_DATABASE=SB7x0/SB8x0/SB9x0 LPC host controller
+ 
++pci:v00001002d0000439Dsv00001019sd00002120*
++ ID_PRODUCT_FROM_DATABASE=A785GM-M
++
+ pci:v00001002d0000439Dsv0000103Csd00001611*
+  ID_PRODUCT_FROM_DATABASE=Pavilion DM1Z-3000
+ 
+@@ -3617,6 +3557,9 @@ pci:v00001002d0000515Esv0000103Csd00001304*
+ pci:v00001002d0000515Esv000015D9sd00008680*
+  ID_PRODUCT_FROM_DATABASE=X7DVL-E-O motherboard
+ 
++pci:v00001002d0000515Esv000015D9sd00009680*
++ ID_PRODUCT_FROM_DATABASE=X7DBN Motherboard
++
+ pci:v00001002d0000515Esv00008086sd00003476*
+  ID_PRODUCT_FROM_DATABASE=S5000PSLSATA Server Board
+ 
+@@ -4415,6 +4358,9 @@ pci:v00001002d00005E4Dsv0000148Csd00002116*
+ pci:v00001002d00005E4F*
+  ID_PRODUCT_FROM_DATABASE=RV410 [Radeon X700]
+ 
++pci:v00001002d00005E4Fsv00001569sd00001E4F*
++ ID_PRODUCT_FROM_DATABASE=Radeon X550 XT
++
+ pci:v00001002d00005E6B*
+  ID_PRODUCT_FROM_DATABASE=RV410 [Radeon X700 Pro (PCIE)] (Secondary)
+ 
+@@ -4478,6 +4424,9 @@ pci:v00001002d0000673E*
+ pci:v00001002d00006740*
+  ID_PRODUCT_FROM_DATABASE=Whistler XT [AMD Radeon HD 6700M Series]
+ 
++pci:v00001002d00006740sv00001028sd000004A3*
++ ID_PRODUCT_FROM_DATABASE=Precision M4600
++
+ pci:v00001002d00006741*
+  ID_PRODUCT_FROM_DATABASE=Whistler [AMD Radeon HD 6600M Series]
+ 
+@@ -4562,6 +4511,9 @@ pci:v00001002d00006818*
+ pci:v00001002d00006819*
+  ID_PRODUCT_FROM_DATABASE=Pitcairn PRO [Radeon HD 7800]
+ 
++pci:v00001002d00006819sv0000174Bsd0000E221*
++ ID_PRODUCT_FROM_DATABASE=Sapphire HD 7850 2G GDDR5 PCI-E DVI-I/DVI-D/HDMI/DP
++
+ pci:v00001002d00006820*
+  ID_PRODUCT_FROM_DATABASE=Radeon HD 8800M Series
+ 
+@@ -4736,6 +4688,9 @@ pci:v00001002d000068F9*
+ pci:v00001002d000068F9sv00001028sd0000010E*
+  ID_PRODUCT_FROM_DATABASE=XPS 8300
+ 
++pci:v00001002d000068F9sv00001043sd000003C2*
++ ID_PRODUCT_FROM_DATABASE=EAH5450 SILENT/DI/512MD2 (LP)
++
+ pci:v00001002d000068FA*
+  ID_PRODUCT_FROM_DATABASE=EG Cedar [Radeon HD 7300 Series]
+ 
+@@ -5570,6 +5525,9 @@ pci:v00001002d0000964A*
+ pci:v00001002d0000970F*
+  ID_PRODUCT_FROM_DATABASE=RS880 HDMI Audio [Radeon HD 4200 Series]
+ 
++pci:v00001002d0000970Fsv00001019sd00002120*
++ ID_PRODUCT_FROM_DATABASE=A785GM-M
++
+ pci:v00001002d0000970Fsv00001043sd000083A2*
+  ID_PRODUCT_FROM_DATABASE=M4A785TD Motherboard
+ 
+@@ -5579,6 +5537,9 @@ pci:v00001002d0000970Fsv00001043sd0000843E*
+ pci:v00001002d00009710*
+  ID_PRODUCT_FROM_DATABASE=RS880 [Radeon HD 4200]
+ 
++pci:v00001002d00009710sv00001019sd00002120*
++ ID_PRODUCT_FROM_DATABASE=A785GM-M
++
+ pci:v00001002d00009710sv00001043sd000083A2*
+  ID_PRODUCT_FROM_DATABASE=M4A785TD Motherboard
+ 
+@@ -5693,6 +5654,9 @@ pci:v00001002d0000AA88*
+ pci:v00001002d0000AA90*
+  ID_PRODUCT_FROM_DATABASE=Turks/Whistler HDMI Audio [Radeon HD 6000 Series]
+ 
++pci:v00001002d0000AA90sv00001028sd000004A3*
++ ID_PRODUCT_FROM_DATABASE=Precision M4600
++
+ pci:v00001002d0000AA98*
+  ID_PRODUCT_FROM_DATABASE=Caicos HDMI Audio [Radeon HD 6400 Series]
+ 
+@@ -5702,6 +5666,9 @@ pci:v00001002d0000AA98sv0000174Bsd0000AA98*
+ pci:v00001002d0000AAA0*
+  ID_PRODUCT_FROM_DATABASE=Tahiti XT HDMI Audio [Radeon HD 7970 Series]
+ 
++pci:v00001002d0000AAB0*
++ ID_PRODUCT_FROM_DATABASE=Cape Verde/Pitcairn HDMI Audio [Radeon HD 7700/7800 Series]
++
+ pci:v00001002d0000AC00*
+  ID_PRODUCT_FROM_DATABASE=Theater 600 Pro
+ 
+@@ -7694,6 +7661,9 @@ pci:v00001022d00009600sv00001043sd000082F1*
+ pci:v00001022d00009601*
+  ID_PRODUCT_FROM_DATABASE=RS880 Host Bridge
+ 
++pci:v00001022d00009601sv00001019sd00002120*
++ ID_PRODUCT_FROM_DATABASE=A785GM-M
++
+ pci:v00001022d00009601sv00001043sd0000843E*
+  ID_PRODUCT_FROM_DATABASE=M5A88-V EVO
+ 
+@@ -9297,10 +9267,10 @@ pci:v00001033d0000002D*
+  ID_PRODUCT_FROM_DATABASE=PCI to C-bus Bridge
+ 
+ pci:v00001033d00000035*
+- ID_PRODUCT_FROM_DATABASE=USB
++ ID_PRODUCT_FROM_DATABASE=OHCI USB Controller
+ 
+ pci:v00001033d00000035sv00001033sd00000035*
+- ID_PRODUCT_FROM_DATABASE=Hama USB 2.0 CardBus
++ ID_PRODUCT_FROM_DATABASE=USB Controller
+ 
+ pci:v00001033d00000035sv0000103Csd00001293*
+  ID_PRODUCT_FROM_DATABASE=USB add-in card
+@@ -9402,7 +9372,7 @@ pci:v00001033d000000DF*
+  ID_PRODUCT_FROM_DATABASE=Vr4131
+ 
+ pci:v00001033d000000E0*
+- ID_PRODUCT_FROM_DATABASE=USB 2.0
++ ID_PRODUCT_FROM_DATABASE=uPD72010x USB 2.0 Controller
+ 
+ pci:v00001033d000000E0sv000012EEsd00007001*
+  ID_PRODUCT_FROM_DATABASE=Root hub
+@@ -9437,6 +9407,9 @@ pci:v00001033d0000013A*
+ pci:v00001033d00000194*
+  ID_PRODUCT_FROM_DATABASE=uPD720200 USB 3.0 Host Controller
+ 
++pci:v00001033d00000194sv00001028sd000004A3*
++ ID_PRODUCT_FROM_DATABASE=Precision M4600
++
+ pci:v00001033d00000194sv00001028sd000004B2*
+  ID_PRODUCT_FROM_DATABASE=Vostro 3350
+ 
+@@ -10787,6 +10760,15 @@ pci:v0000104Ad00000009*
+ pci:v0000104Ad00000010*
+  ID_PRODUCT_FROM_DATABASE=STG4000 [3D Prophet Kyro Series]
+ 
++pci:v0000104Ad00000010sv0000104Asd00004018*
++ ID_PRODUCT_FROM_DATABASE=ST PowerVR Kyro (64MB AGP TVO)
++
++pci:v0000104Ad00000010sv00001681sd00000028*
++ ID_PRODUCT_FROM_DATABASE=3D Prophet 4000XT
++
++pci:v0000104Ad00000010sv00001681sd0000C010*
++ ID_PRODUCT_FROM_DATABASE=3D Prophet 4500 TV-Out
++
+ pci:v0000104Ad00000010sv00001681sd0000C069*
+  ID_PRODUCT_FROM_DATABASE=3D Prophet 4000XT
+ 
+@@ -11073,7 +11055,7 @@ pci:v0000104Cd00008024sv00001443sd00008024*
+  ID_PRODUCT_FROM_DATABASE=FireBoard Blue
+ 
+ pci:v0000104Cd00008024sv00001458sd00001000*
+- ID_PRODUCT_FROM_DATABASE=GA-EP45-DS5/GA-EG45M-DS2H Motherboard
++ ID_PRODUCT_FROM_DATABASE=Motherboard
+ 
+ pci:v0000104Cd00008025*
+  ID_PRODUCT_FROM_DATABASE=TSB82AA2 IEEE-1394b Link Layer Controller
+@@ -11114,6 +11096,9 @@ pci:v0000104Cd00008026sv00001043sd0000808D*
+ pci:v0000104Cd00008027*
+  ID_PRODUCT_FROM_DATABASE=PCI4451 IEEE-1394 Controller
+ 
++pci:v0000104Cd00008027sv00001028sd000000E5*
++ ID_PRODUCT_FROM_DATABASE=Latitude C810
++
+ pci:v0000104Cd00008027sv00001028sd000000E6*
+  ID_PRODUCT_FROM_DATABASE=PCI4451 IEEE-1394 Controller (Dell Inspiron 8100)
+ 
+@@ -14753,13 +14738,13 @@ pci:v000010B5d00000001*
+ pci:v000010B5d00000557*
+  ID_PRODUCT_FROM_DATABASE=PCI9030 32-bit 33MHz PCI <-> IOBus Bridge
+ 
+-pci:v000010B5d00000557sv0000105Bsd00009030*
++pci:v000010B5d00000557sv000010B5sd00009030*
+  ID_PRODUCT_FROM_DATABASE=Digium Tormenta 2 T400P-SS7 or E400P-SS7 Quad T1 or E1 PCI card
+ 
+ pci:v000010B5d00001000*
+  ID_PRODUCT_FROM_DATABASE=PCI9030 32-bit 33MHz PCI <-> IOBus Bridge
+ 
+-pci:v000010B5d00001000sv0000105Bsd00009030*
++pci:v000010B5d00001000sv000010B5sd00009030*
+  ID_PRODUCT_FROM_DATABASE=ATCOM AT400P Quad T1 PCI card
+ 
+ pci:v000010B5d00001024*
+@@ -14792,7 +14777,7 @@ pci:v000010B5d00001147*
+ pci:v000010B5d00002000*
+  ID_PRODUCT_FROM_DATABASE=PCI9030 32-bit 33MHz PCI <-> IOBus Bridge
+ 
+-pci:v000010B5d00002000sv0000105Bsd00009030*
++pci:v000010B5d00002000sv000010B5sd00009030*
+  ID_PRODUCT_FROM_DATABASE=ATCOM AE400P Quad E1 PCI card
+ 
+ pci:v000010B5d00002540*
+@@ -14813,13 +14798,13 @@ pci:v000010B5d00004000sv000010B5sd00009030*
+ pci:v000010B5d00004001*
+  ID_PRODUCT_FROM_DATABASE=PCI9030 32-bit 33MHz PCI <-> IOBus Bridge
+ 
+-pci:v000010B5d00004001sv0000105Bsd00009030*
++pci:v000010B5d00004001sv000010B5sd00009030*
+  ID_PRODUCT_FROM_DATABASE=ATCOM A400PE Quad E1 PCI card
+ 
+ pci:v000010B5d00004002*
+  ID_PRODUCT_FROM_DATABASE=PCI9030 32-bit 33MHz PCI <-> IOBus Bridge
+ 
+-pci:v000010B5d00004002sv0000105Bsd00009030*
++pci:v000010B5d00004002sv000010B5sd00009030*
+  ID_PRODUCT_FROM_DATABASE=ATCOM A400PT Quad T1 PCI card
+ 
+ pci:v000010B5d00006140*
+@@ -15305,6 +15290,9 @@ pci:v000010B5d00009056sv000010B5sd00003355*
+ pci:v000010B5d00009056sv000010B5sd00003415*
+  ID_PRODUCT_FROM_DATABASE=Alpermann+Velte PCIe TS: Time Synchronisation Board
+ 
++pci:v000010B5d00009056sv000010B5sd00003493*
++ ID_PRODUCT_FROM_DATABASE=Alpermann+Velte PCL PCIe 3G: Timecode Reader Board
++
+ pci:v000010B5d00009056sv00001369sd0000C001*
+  ID_PRODUCT_FROM_DATABASE=LX6464ES
+ 
+@@ -15410,15 +15398,12 @@ pci:v000010B5d0000D00Dsv000010B5sd00009030*
+ pci:v000010B5d0000D33D*
+  ID_PRODUCT_FROM_DATABASE=PCI9030 32-bit 33MHz PCI <-> IOBus Bridge
+ 
+-pci:v000010B5d0000D33Dsv0000105Bsd00009030*
++pci:v000010B5d0000D33Dsv000010B5sd00009030*
+  ID_PRODUCT_FROM_DATABASE=Tormenta 3 Varion V401PT Quad T1/J1 PCI card
+ 
+ pci:v000010B5d0000D44D*
+  ID_PRODUCT_FROM_DATABASE=PCI9030 32-bit 33MHz PCI <-> IOBus Bridge
+ 
+-pci:v000010B5d0000D44Dsv0000105Bsd00009030*
+- ID_PRODUCT_FROM_DATABASE=Tormenta 3 Varion V401PE Quad E1 PCI card
+-
+ pci:v000010B5d0000D44Dsv000010B5sd000017F6*
+  ID_PRODUCT_FROM_DATABASE=Allo CP100P/E 1-port E1/T1/J1 PCI/PCIe card
+ 
+@@ -15428,6 +15413,9 @@ pci:v000010B5d0000D44Dsv000010B5sd000017F7*
+ pci:v000010B5d0000D44Dsv000010B5sd000017F8*
+  ID_PRODUCT_FROM_DATABASE=Allo CP200P/E 2-port E1/T1/J1 PCI/PCIe card
+ 
++pci:v000010B5d0000D44Dsv000010B5sd00009030*
++ ID_PRODUCT_FROM_DATABASE=Tormenta 3 Varion V401PE Quad E1 PCI card
++
+ pci:v000010B6*
+  ID_VENDOR_FROM_DATABASE=Madge Networks
+ 
+@@ -16841,6 +16829,9 @@ pci:v000010DEd00000028sv00001092sd00004A02*
+ pci:v000010DEd00000028sv00001092sd00005A00*
+  ID_PRODUCT_FROM_DATABASE=RIVA TNT2/TNT2 Pro
+ 
++pci:v000010DEd00000028sv00001092sd00005A40*
++ ID_PRODUCT_FROM_DATABASE=Viper V770D AGP
++
+ pci:v000010DEd00000028sv00001092sd00006A02*
+  ID_PRODUCT_FROM_DATABASE=Viper V770 Ultra
+ 
+@@ -16946,6 +16937,9 @@ pci:v000010DEd0000002Dsv00001048sd00000C3A*
+ pci:v000010DEd0000002Dsv00001048sd00000C3B*
+  ID_PRODUCT_FROM_DATABASE=Erazor III LT
+ 
++pci:v000010DEd0000002Dsv0000107Dsd00002137*
++ ID_PRODUCT_FROM_DATABASE=WinFast 3D S325
++
+ pci:v000010DEd0000002Dsv000010DEsd00000006*
+  ID_PRODUCT_FROM_DATABASE=RIVA TNT2 Model 64/Model 64 Pro
+ 
+@@ -16964,6 +16958,9 @@ pci:v000010DEd0000002Dsv00001102sd0000102C*
+ pci:v000010DEd0000002Dsv00001462sd00008808*
+  ID_PRODUCT_FROM_DATABASE=MSI-8808
+ 
++pci:v000010DEd0000002Dsv000014AFsd00005620*
++ ID_PRODUCT_FROM_DATABASE=Gamer Cougar Video Edition
++
+ pci:v000010DEd0000002Dsv00001554sd00001041*
+  ID_PRODUCT_FROM_DATABASE=Pixelview RIVA TNT2 M64
+ 
+@@ -17015,9 +17012,18 @@ pci:v000010DEd00000041*
+ pci:v000010DEd00000041sv00001043sd0000817B*
+  ID_PRODUCT_FROM_DATABASE=V9999 Gamer Edition
+ 
++pci:v000010DEd00000041sv0000107Dsd00002992*
++ ID_PRODUCT_FROM_DATABASE=WinFast A400
++
++pci:v000010DEd00000041sv00001458sd0000310F*
++ ID_PRODUCT_FROM_DATABASE=Geforce 6800 GV-N6812
++
+ pci:v000010DEd00000042*
+  ID_PRODUCT_FROM_DATABASE=NV40.2 [GeForce 6800 LE]
+ 
++pci:v000010DEd00000042sv0000107Dsd0000299B*
++ ID_PRODUCT_FROM_DATABASE=WinFast A400 LE
++
+ pci:v000010DEd00000043*
+  ID_PRODUCT_FROM_DATABASE=NV40.3 [GeForce 6800 XE]
+ 
+@@ -21020,6 +21026,9 @@ pci:v000010DEd00000866*
+ pci:v000010DEd00000867*
+  ID_PRODUCT_FROM_DATABASE=C79 [GeForce 9400]
+ 
++pci:v000010DEd00000867sv0000106Bsd000000AD*
++ ID_PRODUCT_FROM_DATABASE=iMac 9,1
++
+ pci:v000010DEd00000868*
+  ID_PRODUCT_FROM_DATABASE=C79 [nForce 760i SLI]
+ 
+@@ -21221,18 +21230,33 @@ pci:v000010DEd00000A88*
+ pci:v000010DEd00000A89*
+  ID_PRODUCT_FROM_DATABASE=MCP79 Memory Controller
+ 
++pci:v000010DEd00000A98*
++ ID_PRODUCT_FROM_DATABASE=MCP79 Memory Controller
++
++pci:v000010DEd00000A98sv000010DEsd0000CB79*
++ ID_PRODUCT_FROM_DATABASE=iMac 9,1
++
+ pci:v000010DEd00000AA0*
+  ID_PRODUCT_FROM_DATABASE=MCP79 PCI Express Bridge
+ 
++pci:v000010DEd00000AA0sv000010DEsd0000CB79*
++ ID_PRODUCT_FROM_DATABASE=Apple iMac 9,1
++
+ pci:v000010DEd00000AA2*
+  ID_PRODUCT_FROM_DATABASE=MCP79 SMBus
+ 
++pci:v000010DEd00000AA2sv000010DEsd0000CB79*
++ ID_PRODUCT_FROM_DATABASE=Apple iMac 9,1
++
+ pci:v000010DEd00000AA2sv000019DAsd0000A123*
+  ID_PRODUCT_FROM_DATABASE=IONITX-F-E
+ 
+ pci:v000010DEd00000AA3*
+  ID_PRODUCT_FROM_DATABASE=MCP79 Co-processor
+ 
++pci:v000010DEd00000AA3sv000010DEsd0000CB79*
++ ID_PRODUCT_FROM_DATABASE=Apple iMac 9,1
++
+ pci:v000010DEd00000AA3sv000019DAsd0000A123*
+  ID_PRODUCT_FROM_DATABASE=IONITX-F-E
+ 
+@@ -21245,18 +21269,27 @@ pci:v000010DEd00000AA4sv000019DAsd0000A123*
+ pci:v000010DEd00000AA5*
+  ID_PRODUCT_FROM_DATABASE=MCP79 OHCI USB 1.1 Controller
+ 
++pci:v000010DEd00000AA5sv000010DEsd0000CB79*
++ ID_PRODUCT_FROM_DATABASE=Apple iMac 9,1
++
+ pci:v000010DEd00000AA5sv000019DAsd0000A123*
+  ID_PRODUCT_FROM_DATABASE=IONITX-F-E
+ 
+ pci:v000010DEd00000AA6*
+  ID_PRODUCT_FROM_DATABASE=MCP79 EHCI USB 2.0 Controller
+ 
++pci:v000010DEd00000AA6sv000010DEsd0000CB79*
++ ID_PRODUCT_FROM_DATABASE=Apple iMac 9,1
++
+ pci:v000010DEd00000AA6sv000019DAsd0000A123*
+  ID_PRODUCT_FROM_DATABASE=IONITX-F-E
+ 
+ pci:v000010DEd00000AA7*
+  ID_PRODUCT_FROM_DATABASE=MCP79 OHCI USB 1.1 Controller
+ 
++pci:v000010DEd00000AA7sv000010DEsd0000CB79*
++ ID_PRODUCT_FROM_DATABASE=Apple iMac 9,1
++
+ pci:v000010DEd00000AA7sv000019DAsd0000A123*
+  ID_PRODUCT_FROM_DATABASE=IONITX-F-E
+ 
+@@ -21266,6 +21299,9 @@ pci:v000010DEd00000AA8*
+ pci:v000010DEd00000AA9*
+  ID_PRODUCT_FROM_DATABASE=MCP79 EHCI USB 2.0 Controller
+ 
++pci:v000010DEd00000AA9sv000010DEsd0000CB79*
++ ID_PRODUCT_FROM_DATABASE=Apple iMac 9,1
++
+ pci:v000010DEd00000AA9sv000019DAsd0000A123*
+  ID_PRODUCT_FROM_DATABASE=IONITX-F-E
+ 
+@@ -21275,6 +21311,9 @@ pci:v000010DEd00000AAA*
+ pci:v000010DEd00000AAB*
+  ID_PRODUCT_FROM_DATABASE=MCP79 PCI Bridge
+ 
++pci:v000010DEd00000AABsv000010DEsd0000CB79*
++ ID_PRODUCT_FROM_DATABASE=Apple iMac 9,1
++
+ pci:v000010DEd00000AAC*
+  ID_PRODUCT_FROM_DATABASE=MCP79 LPC Bridge
+ 
+@@ -21287,12 +21326,18 @@ pci:v000010DEd00000AADsv000019DAsd0000A123*
+ pci:v000010DEd00000AAE*
+  ID_PRODUCT_FROM_DATABASE=MCP79 LPC Bridge
+ 
++pci:v000010DEd00000AAEsv000010DEsd0000CB79*
++ ID_PRODUCT_FROM_DATABASE=Apple iMac 9,1
++
+ pci:v000010DEd00000AAF*
+  ID_PRODUCT_FROM_DATABASE=MCP79 LPC Bridge
+ 
+ pci:v000010DEd00000AB0*
+  ID_PRODUCT_FROM_DATABASE=MCP79 Ethernet
+ 
++pci:v000010DEd00000AB0sv000010DEsd0000CB79*
++ ID_PRODUCT_FROM_DATABASE=Apple iMac 9,1
++
+ pci:v000010DEd00000AB0sv000019DAsd0000A123*
+  ID_PRODUCT_FROM_DATABASE=IONITX-F-E
+ 
+@@ -21326,6 +21371,9 @@ pci:v000010DEd00000AB8*
+ pci:v000010DEd00000AB9*
+  ID_PRODUCT_FROM_DATABASE=MCP79 AHCI Controller
+ 
++pci:v000010DEd00000AB9sv000010DEsd0000CB79*
++ ID_PRODUCT_FROM_DATABASE=Apple iMac 9,1
++
+ pci:v000010DEd00000ABA*
+  ID_PRODUCT_FROM_DATABASE=MCP79 AHCI Controller
+ 
+@@ -21347,6 +21395,9 @@ pci:v000010DEd00000ABF*
+ pci:v000010DEd00000AC0*
+  ID_PRODUCT_FROM_DATABASE=MCP79 High Definition Audio
+ 
++pci:v000010DEd00000AC0sv000010DEsd0000CB79*
++ ID_PRODUCT_FROM_DATABASE=Apple iMac 9,1
++
+ pci:v000010DEd00000AC1*
+  ID_PRODUCT_FROM_DATABASE=MCP79 High Definition Audio
+ 
+@@ -21359,15 +21410,24 @@ pci:v000010DEd00000AC3*
+ pci:v000010DEd00000AC4*
+  ID_PRODUCT_FROM_DATABASE=MCP79 PCI Express Bridge
+ 
++pci:v000010DEd00000AC4sv000010DEsd0000CB79*
++ ID_PRODUCT_FROM_DATABASE=Apple iMac 9,1
++
+ pci:v000010DEd00000AC5*
+  ID_PRODUCT_FROM_DATABASE=MCP79 PCI Express Bridge
+ 
+ pci:v000010DEd00000AC6*
+  ID_PRODUCT_FROM_DATABASE=MCP79 PCI Express Bridge
+ 
++pci:v000010DEd00000AC6sv000010DEsd0000CB79*
++ ID_PRODUCT_FROM_DATABASE=Apple iMac 9,1
++
+ pci:v000010DEd00000AC7*
+  ID_PRODUCT_FROM_DATABASE=MCP79 PCI Express Bridge
+ 
++pci:v000010DEd00000AC7sv000010DEsd0000CB79*
++ ID_PRODUCT_FROM_DATABASE=Apple iMac 9,1
++
+ pci:v000010DEd00000AC8*
+  ID_PRODUCT_FROM_DATABASE=MCP79 PCI Express Bridge
+ 
+@@ -21422,6 +21482,9 @@ pci:v000010DEd00000BE9*
+ pci:v000010DEd00000BE9sv00001558sd00008687*
+  ID_PRODUCT_FROM_DATABASE=CLEVO/KAPOK W860CU
+ 
++pci:v000010DEd00000BE9sv00003842sd00001452*
++ ID_PRODUCT_FROM_DATABASE=GeForce GTS 450
++
+ pci:v000010DEd00000BEA*
+  ID_PRODUCT_FROM_DATABASE=GF108 High Definition Audio Controller
+ 
+@@ -21590,6 +21653,9 @@ pci:v000010DEd00000DEF*
+ pci:v000010DEd00000DF0*
+  ID_PRODUCT_FROM_DATABASE=GF108 [GeForce GT 425M]
+ 
++pci:v000010DEd00000DF1*
++ ID_PRODUCT_FROM_DATABASE=GF108 [GeForce GT 420M]
++
+ pci:v000010DEd00000DF2*
+  ID_PRODUCT_FROM_DATABASE=GF108 [GeForce GT 435M]
+ 
+@@ -22530,10 +22596,10 @@ pci:v000010ECd00008167sv00001462sd0000236C*
+  ID_PRODUCT_FROM_DATABASE=945P Neo3-F motherboard
+ 
+ pci:v000010ECd00008168*
+- ID_PRODUCT_FROM_DATABASE=RTL8111/8168B PCI Express Gigabit Ethernet controller
++ ID_PRODUCT_FROM_DATABASE=RTL8111/8168 PCI Express Gigabit Ethernet controller
+ 
+ pci:v000010ECd00008168sv00001019sd00008168*
+- ID_PRODUCT_FROM_DATABASE=MCP73PVT-SM
++ ID_PRODUCT_FROM_DATABASE=RTL8111/8168 PCI Express Gigabit Ethernet controller
+ 
+ pci:v000010ECd00008168sv00001028sd000004B2*
+  ID_PRODUCT_FROM_DATABASE=Vostro 3350
+@@ -22562,11 +22628,17 @@ pci:v000010ECd00008168sv00001043sd000083A3*
+ pci:v000010ECd00008168sv00001043sd00008432*
+  ID_PRODUCT_FROM_DATABASE=P8P67 and other motherboards
+ 
++pci:v000010ECd00008168sv00001043sd00008505*
++ ID_PRODUCT_FROM_DATABASE=P8H77-I Motherboard
++
++pci:v000010ECd00008168sv0000105Bsd00000D7C*
++ ID_PRODUCT_FROM_DATABASE=D270S/D250S Motherboard
++
+ pci:v000010ECd00008168sv000010ECsd00008168*
+- ID_PRODUCT_FROM_DATABASE=TEG-ECTX Gigabit PCI-E Adapter [Trendnet]
++ ID_PRODUCT_FROM_DATABASE=RTL8111/8168 PCI Express Gigabit Ethernet controller
+ 
+ pci:v000010ECd00008168sv00001458sd0000E000*
+- ID_PRODUCT_FROM_DATABASE=GA-EP45-DS5/GA-EG45M-DS2H Motherboard
++ ID_PRODUCT_FROM_DATABASE=Motherboard
+ 
+ pci:v000010ECd00008168sv00001462sd0000238C*
+  ID_PRODUCT_FROM_DATABASE=Onboard RTL8111b on MSI P965 Platinum Mainboard
+@@ -26075,6 +26147,9 @@ pci:v00001131d00007134sv00001894sd0000FE01*
+ pci:v00001131d00007134sv00005168sd00000138*
+  ID_PRODUCT_FROM_DATABASE=FLY TV PRIME 34FM
+ 
++pci:v00001131d00007134sv00005168sd00000300*
++ ID_PRODUCT_FROM_DATABASE=FlyDVB-S
++
+ pci:v00001131d00007134sv00005ACEsd00005070*
+  ID_PRODUCT_FROM_DATABASE=Behold TV 507 FM
+ 
+@@ -27983,6 +28058,9 @@ pci:v00001180d00000552sv00001028sd00000188*
+ pci:v00001180d00000552sv00001043sd00001237*
+  ID_PRODUCT_FROM_DATABASE=A6J-Q008
+ 
++pci:v00001180d00000552sv00001043sd00001757*
++ ID_PRODUCT_FROM_DATABASE=M2400N laptop
++
+ pci:v00001180d00000552sv0000144Dsd0000C005*
+  ID_PRODUCT_FROM_DATABASE=X10 Laptop
+ 
+@@ -28091,6 +28169,9 @@ pci:v00001180d00000822sv000017AAsd0000201D*
+ pci:v00001180d00000822sv000017AAsd000020C7*
+  ID_PRODUCT_FROM_DATABASE=ThinkPad T61
+ 
++pci:v00001180d00000822sv000017AAsd000020C8*
++ ID_PRODUCT_FROM_DATABASE=ThinkPad W500
++
+ pci:v00001180d00000832*
+  ID_PRODUCT_FROM_DATABASE=R5C832 IEEE 1394 Controller
+ 
+@@ -30440,6 +30521,9 @@ pci:v00001217d000010F7*
+ pci:v00001217d000011F7*
+  ID_PRODUCT_FROM_DATABASE=OZ600 1394a-2000 Controller
+ 
++pci:v00001217d000011F7sv00001028sd000004A3*
++ ID_PRODUCT_FROM_DATABASE=Precision M4600
++
+ pci:v00001217d000013F7*
+  ID_PRODUCT_FROM_DATABASE=1394 OHCI Compliant Host Controller
+ 
+@@ -30554,9 +30638,21 @@ pci:v00001217d00008120*
+ pci:v00001217d00008130*
+  ID_PRODUCT_FROM_DATABASE=Integrated MS/MSPRO/xD Controller
+ 
++pci:v00001217d00008320*
++ ID_PRODUCT_FROM_DATABASE=OZ600 MMC/SD Controller
++
++pci:v00001217d00008320sv00001028sd000004A3*
++ ID_PRODUCT_FROM_DATABASE=Precision M4600
++
+ pci:v00001217d00008321*
+  ID_PRODUCT_FROM_DATABASE=Integrated MMC/SD controller
+ 
++pci:v00001217d00008330*
++ ID_PRODUCT_FROM_DATABASE=OZ600 MS/xD Controller
++
++pci:v00001217d00008330sv00001028sd000004A3*
++ ID_PRODUCT_FROM_DATABASE=Precision M4600
++
+ pci:v00001217d00008331*
+  ID_PRODUCT_FROM_DATABASE=O2 Flash Memory Card
+ 
+@@ -31244,6 +31340,9 @@ pci:v0000125Dd00001998*
+ pci:v0000125Dd00001998sv00001028sd000000B1*
+  ID_PRODUCT_FROM_DATABASE=Latitude C600
+ 
++pci:v0000125Dd00001998sv00001028sd000000E5*
++ ID_PRODUCT_FROM_DATABASE=Latitude C810
++
+ pci:v0000125Dd00001998sv00001028sd000000E6*
+  ID_PRODUCT_FROM_DATABASE=ES1983S Maestro-3i (Dell Inspiron 8100)
+ 
+@@ -36614,63 +36713,6 @@ pci:v00001461d0000F436*
+ pci:v00001462*
+  ID_VENDOR_FROM_DATABASE=Micro-Star International Co., Ltd.
+ 
+-pci:v00001462d00005501*
+- ID_PRODUCT_FROM_DATABASE=nVidia NV15DDR [GeForce2 Ti]
+-
+-pci:v00001462d00006819*
+- ID_PRODUCT_FROM_DATABASE=Broadcom Corporation BCM4306 802.11b/g Wireless LAN Controller [MSI CB54G]
+-
+-pci:v00001462d00006825*
+- ID_PRODUCT_FROM_DATABASE=PCI Card wireless 11g [PC54G]
+-
+-pci:v00001462d00006834*
+- ID_PRODUCT_FROM_DATABASE=RaLink RT2500 802.11g [PC54G2]
+-
+-pci:v00001462d00007125*
+- ID_PRODUCT_FROM_DATABASE=MS-7125 [K8N Neo4 Platinum]
+-
+-pci:v00001462d00007235*
+- ID_PRODUCT_FROM_DATABASE=P965 Neo MS-7235 mainboard
+-
+-pci:v00001462d00007242*
+- ID_PRODUCT_FROM_DATABASE=K9AGM RS485 Motherboard
+-
+-pci:v00001462d00007250*
+- ID_PRODUCT_FROM_DATABASE=MS-7250 Motherboard [K9N Platinum SLI/non-SLI]
+-
+-pci:v00001462d00007327*
+- ID_PRODUCT_FROM_DATABASE=K9AGM2-FIH Motherboard
+-
+-pci:v00001462d00007650*
+- ID_PRODUCT_FROM_DATABASE=Hetis 865GV-E (MS-7065)
+-
+-pci:v00001462d00008725*
+- ID_PRODUCT_FROM_DATABASE=NVIDIA NV25 [GeForce4 Ti 4600] VGA Adapter
+-
+-pci:v00001462d00009000*
+- ID_PRODUCT_FROM_DATABASE=NVIDIA NV28 [GeForce4 Ti 4800] VGA Adapter
+-
+-pci:v00001462d00009110*
+- ID_PRODUCT_FROM_DATABASE=GeFORCE FX5200
+-
+-pci:v00001462d00009119*
+- ID_PRODUCT_FROM_DATABASE=NVIDIA NV31 [GeForce FX 5600XT] VGA Adapter
+-
+-pci:v00001462d00009123*
+- ID_PRODUCT_FROM_DATABASE=NVIDIA NV31 [GeForce FX 5600] FX5600-VTDR128 [MS-8912]
+-
+-pci:v00001462d00009510*
+- ID_PRODUCT_FROM_DATABASE=Radeon 9600XT
+-
+-pci:v00001462d00009511*
+- ID_PRODUCT_FROM_DATABASE=Radeon 9600XT
+-
+-pci:v00001462d00009591*
+- ID_PRODUCT_FROM_DATABASE=nVidia Corporation NV36 [GeForce FX 5700LE]
+-
+-pci:v00001462d0000B834*
+- ID_PRODUCT_FROM_DATABASE=Wireless 11g Turbo G PCI card [MSI PC60G]
+-
+ pci:v00001463*
+  ID_VENDOR_FROM_DATABASE=Fast Corporation
+ 
+@@ -38294,6 +38336,9 @@ pci:v000014E4d000016C7sv000014E4sd0000000A*
+ pci:v000014E4d000016DD*
+  ID_PRODUCT_FROM_DATABASE=NetLink BCM5781 Gigabit Ethernet PCI Express
+ 
++pci:v000014E4d000016F3*
++ ID_PRODUCT_FROM_DATABASE=NetXtreme BCM5727 Gigabit Ethernet PCIe
++
+ pci:v000014E4d000016F7*
+  ID_PRODUCT_FROM_DATABASE=NetXtreme BCM5753 Gigabit Ethernet PCI Express
+ 
+@@ -42101,6 +42146,9 @@ pci:v0000168Cd00000029sv00000777sd00004005*
+ pci:v0000168Cd00000029sv00001186sd00003A7A*
+  ID_PRODUCT_FROM_DATABASE=DWA-552 802.11n Xtreme N Desktop Adapter (rev A2)
+ 
++pci:v0000168Cd00000029sv00001186sd00003A7D*
++ ID_PRODUCT_FROM_DATABASE=DWA-552 802.11n Xtreme N Desktop Adapter (rev A3)
++
+ pci:v0000168Cd0000002A*
+  ID_PRODUCT_FROM_DATABASE=AR928X Wireless Network Adapter (PCI-Express)
+ 
+@@ -42191,6 +42239,9 @@ pci:v0000168Cd00000030*
+ pci:v0000168Cd00000030sv0000103Csd00001627*
+  ID_PRODUCT_FROM_DATABASE=AR9380/HB112 802.11abgn 3×3 Wi-Fi Adapter
+ 
++pci:v0000168Cd00000030sv00001186sd00003A7E*
++ ID_PRODUCT_FROM_DATABASE=DWA-566 Wireless N 300 Dual Band PCIe Desktop Adapter
++
+ pci:v0000168Cd00000030sv00001A56sd00002000*
+  ID_PRODUCT_FROM_DATABASE=Killer Wireless-N 1102 Half-size Mini PCIe Card [AR9382]
+ 
+@@ -43590,7 +43641,7 @@ pci:v00001876d0000A103*
+  ID_PRODUCT_FROM_DATABASE=Vigra I/O
+ 
+ pci:v0000187E*
+- ID_VENDOR_FROM_DATABASE=ZyXEL Communication Corporation
++ ID_VENDOR_FROM_DATABASE=ZyXEL Communications Corporation
+ 
+ pci:v0000187Ed00003403*
+  ID_PRODUCT_FROM_DATABASE=ZyAir G-110 802.11g
+@@ -44184,97 +44235,97 @@ pci:v00001924d00000803sv00001924sd00001201*
+  ID_PRODUCT_FROM_DATABASE=SFA6902F-R1 SFP+ AOE Adapter
+ 
+ pci:v00001924d00000803sv00001924sd00006200*
+- ID_PRODUCT_FROM_DATABASE=SFN5122F-R0
++ ID_PRODUCT_FROM_DATABASE=SFN5122F-R0 SFP+ Server Adapter
+ 
+ pci:v00001924d00000803sv00001924sd00006201*
+- ID_PRODUCT_FROM_DATABASE=SFN5122F-R1
++ ID_PRODUCT_FROM_DATABASE=SFN5122F-R1 SFP+ Server Adapter
+ 
+ pci:v00001924d00000803sv00001924sd00006202*
+- ID_PRODUCT_FROM_DATABASE=SFN5122F-R2
++ ID_PRODUCT_FROM_DATABASE=SFN5122F-R2 SFP+ Server Adapter
+ 
+ pci:v00001924d00000803sv00001924sd00006204*
+- ID_PRODUCT_FROM_DATABASE=SFN5122F-R4
++ ID_PRODUCT_FROM_DATABASE=SFN5122F-R4 SFP+ Server Adapter
+ 
+ pci:v00001924d00000803sv00001924sd00006205*
+- ID_PRODUCT_FROM_DATABASE=SFN5122F-R5
++ ID_PRODUCT_FROM_DATABASE=SFN5122F-R5 SFP+ Server Adapter
+ 
+ pci:v00001924d00000803sv00001924sd00006206*
+- ID_PRODUCT_FROM_DATABASE=SFN5122F-R6
++ ID_PRODUCT_FROM_DATABASE=SFN5122F-R6 SFP+ Server Adapter
+ 
+ pci:v00001924d00000803sv00001924sd00006207*
+- ID_PRODUCT_FROM_DATABASE=SFN5122F-R7
++ ID_PRODUCT_FROM_DATABASE=SFN5122F-R7 SFP+ Server Adapter
+ 
+ pci:v00001924d00000803sv00001924sd00006210*
+- ID_PRODUCT_FROM_DATABASE=SFN5322F-R0
++ ID_PRODUCT_FROM_DATABASE=SFN5322F-R0 SFP+ Precision Time Synchronization Server Adapter
+ 
+ pci:v00001924d00000803sv00001924sd00006211*
+- ID_PRODUCT_FROM_DATABASE=SFN5322F-R1
++ ID_PRODUCT_FROM_DATABASE=SFN5322F-R1 SFP+ Precision Time Synchronization Server Adapter
+ 
+ pci:v00001924d00000803sv00001924sd00006217*
+- ID_PRODUCT_FROM_DATABASE=SFN5322F-R7
++ ID_PRODUCT_FROM_DATABASE=SFN5322F-R7 SFP+ Precision Time Synchronization Server Adapter
+ 
+ pci:v00001924d00000803sv00001924sd00006227*
+- ID_PRODUCT_FROM_DATABASE=SFN6122F-R7
++ ID_PRODUCT_FROM_DATABASE=SFN6122F-R7 SFP+ Server Adapter
+ 
+ pci:v00001924d00000803sv00001924sd00006237*
+- ID_PRODUCT_FROM_DATABASE=SFN6322F-R7
++ ID_PRODUCT_FROM_DATABASE=SFN6322F-R7 SFP+ Precision Time Synchronization Server Adapter
+ 
+ pci:v00001924d00000803sv00001924sd00006501*
+- ID_PRODUCT_FROM_DATABASE=SFN5802K-R1
++ ID_PRODUCT_FROM_DATABASE=SFN5802K-R1 Mezzanine Adapter
+ 
+ pci:v00001924d00000803sv00001924sd00006511*
+- ID_PRODUCT_FROM_DATABASE=SFN5814H-R1
++ ID_PRODUCT_FROM_DATABASE=SFN5814H-R1 Mezzanine Adapter
+ 
+ pci:v00001924d00000803sv00001924sd00006521*
+- ID_PRODUCT_FROM_DATABASE=SFN5812H-R1
++ ID_PRODUCT_FROM_DATABASE=SFN5812H-R1 Mezzanine Adapter
+ 
+ pci:v00001924d00000803sv00001924sd00006562*
+  ID_PRODUCT_FROM_DATABASE=SFN6832F-R2 SFP+ Mezzanine Adapter
+ 
+ pci:v00001924d00000803sv00001924sd00006A05*
+- ID_PRODUCT_FROM_DATABASE=SFN5112F-R5
++ ID_PRODUCT_FROM_DATABASE=SFN5112F-R5 SFP+ Server Adapter
+ 
+ pci:v00001924d00000803sv00001924sd00006A06*
+- ID_PRODUCT_FROM_DATABASE=SFN5112F-R6
++ ID_PRODUCT_FROM_DATABASE=SFN5112F-R6 SFP+ Server Adapter
+ 
+ pci:v00001924d00000803sv00001924sd00007206*
+- ID_PRODUCT_FROM_DATABASE=SFN5162F-R6
++ ID_PRODUCT_FROM_DATABASE=SFN5162F-R6 SFP+ Server Adapter
+ 
+ pci:v00001924d00000803sv00001924sd00007207*
+- ID_PRODUCT_FROM_DATABASE=SFN5162F-R7
++ ID_PRODUCT_FROM_DATABASE=SFN5162F-R7 SFP+ Server Adapter
+ 
+ pci:v00001924d00000803sv00001924sd00007A06*
+- ID_PRODUCT_FROM_DATABASE=SFN5152F-R6
++ ID_PRODUCT_FROM_DATABASE=SFN5152F-R6 SFP+ Server Adapter
+ 
+ pci:v00001924d00000803sv00001924sd00007A07*
+- ID_PRODUCT_FROM_DATABASE=SFN5152F-R7
++ ID_PRODUCT_FROM_DATABASE=SFN5152F-R7 SFP+ Server Adapter
+ 
+ pci:v00001924d00000813*
+  ID_PRODUCT_FROM_DATABASE=SFL9021 [Solarstorm]
+ 
+ pci:v00001924d00000813sv00001924sd00006100*
+- ID_PRODUCT_FROM_DATABASE=SFN5121T-R0
++ ID_PRODUCT_FROM_DATABASE=SFN5121T-R0 10GBASE-T Server Adapter
+ 
+ pci:v00001924d00000813sv00001924sd00006102*
+- ID_PRODUCT_FROM_DATABASE=SFN5121T-R2
++ ID_PRODUCT_FROM_DATABASE=SFN5121T-R2 10GBASE-T Server Adapter
+ 
+ pci:v00001924d00000813sv00001924sd00006103*
+- ID_PRODUCT_FROM_DATABASE=SFN5121T-R3
++ ID_PRODUCT_FROM_DATABASE=SFN5121T-R3 10GBASE-T Server Adapter
+ 
+ pci:v00001924d00000813sv00001924sd00006104*
+- ID_PRODUCT_FROM_DATABASE=SFN5121T-R4
++ ID_PRODUCT_FROM_DATABASE=SFN5121T-R4 10GBASE-T Server Adapter
+ 
+ pci:v00001924d00000813sv00001924sd00006902*
+- ID_PRODUCT_FROM_DATABASE=SFN5111T-R2
++ ID_PRODUCT_FROM_DATABASE=SFN5111T-R2 10GBASE-T Server Adapter
+ 
+ pci:v00001924d00000813sv00001924sd00006904*
+- ID_PRODUCT_FROM_DATABASE=SFN5111T-R4
++ ID_PRODUCT_FROM_DATABASE=SFN5111T-R4 10GBASE-T Server Adapter
+ 
+ pci:v00001924d00000813sv00001924sd00007104*
+- ID_PRODUCT_FROM_DATABASE=SFN5161T-R4
++ ID_PRODUCT_FROM_DATABASE=SFN5161T-R4 10GBASE-T Server Adapter
+ 
+ pci:v00001924d00000813sv00001924sd00007904*
+- ID_PRODUCT_FROM_DATABASE=SFN5151T-R4
++ ID_PRODUCT_FROM_DATABASE=SFN5151T-R4 10GBASE-T Server Adapter
+ 
+ pci:v00001924d00001803*
+  ID_PRODUCT_FROM_DATABASE=SFC9020 Virtual Function [Solarstorm]
+@@ -44787,7 +44838,7 @@ pci:v0000197Bd00002363sv00001043sd000081E4*
+  ID_PRODUCT_FROM_DATABASE=P5B [JMB363]
+ 
+ pci:v0000197Bd00002363sv00001458sd0000B000*
+- ID_PRODUCT_FROM_DATABASE=GA-EP45-DS5 Motherboard
++ ID_PRODUCT_FROM_DATABASE=Motherboard
+ 
+ pci:v0000197Bd00002363sv00001849sd00002363*
+  ID_PRODUCT_FROM_DATABASE=Motherboard (one of many)
+@@ -45425,6 +45476,9 @@ pci:v00001AF4d00001002*
+ pci:v00001AF4d00001003*
+  ID_PRODUCT_FROM_DATABASE=Virtio console
+ 
++pci:v00001AF4d00001009*
++ ID_PRODUCT_FROM_DATABASE=Virtio filesystem
++
+ pci:v00001AF5*
+  ID_VENDOR_FROM_DATABASE=Netezza Corp.
+ 
+@@ -45902,6 +45956,12 @@ pci:v00003080*
+ pci:v00003142*
+  ID_VENDOR_FROM_DATABASE=Post Impression Systems.
+ 
++pci:v000031AB*
++ ID_VENDOR_FROM_DATABASE=Zonet
++
++pci:v000031ABd00001FAA*
++ ID_PRODUCT_FROM_DATABASE=ZEW1602 802.11b/g Wireless Adapter
++
+ pci:v00003388*
+  ID_VENDOR_FROM_DATABASE=Hint Corp
+ 
+@@ -47495,6 +47555,9 @@ pci:v00008086d00000044*
+ pci:v00008086d00000044sv00001025sd00000347*
+  ID_PRODUCT_FROM_DATABASE=Aspire 7740G
+ 
++pci:v00008086d00000044sv00001025sd00000487*
++ ID_PRODUCT_FROM_DATABASE=TravelMate 5742
++
+ pci:v00008086d00000044sv0000E4BFsd000050C1*
+  ID_PRODUCT_FROM_DATABASE=PC1-GROOVE
+ 
+@@ -47702,9 +47765,15 @@ pci:v00008086d00000101sv0000106Bsd000000DC*
+ pci:v00008086d00000102*
+  ID_PRODUCT_FROM_DATABASE=2nd Generation Core Processor Family Integrated Graphics Controller
+ 
++pci:v00008086d00000102sv00001028sd000004AA*
++ ID_PRODUCT_FROM_DATABASE=XPS 8300
++
+ pci:v00008086d00000104*
+  ID_PRODUCT_FROM_DATABASE=2nd Generation Core Processor Family DRAM Controller
+ 
++pci:v00008086d00000104sv00001028sd000004A3*
++ ID_PRODUCT_FROM_DATABASE=Precision M4600
++
+ pci:v00008086d00000104sv00001028sd000004B2*
+  ID_PRODUCT_FROM_DATABASE=Vostro 3350
+ 
+@@ -47765,15 +47834,24 @@ pci:v00008086d00000126sv00001028sd000004CC*
+ pci:v00008086d00000150*
+  ID_PRODUCT_FROM_DATABASE=Xeon E3-1200 v2/3rd Gen Core processor DRAM Controller
+ 
++pci:v00008086d00000150sv00001043sd000084CA*
++ ID_PRODUCT_FROM_DATABASE=P8H77-I Motherboard
++
+ pci:v00008086d00000151*
+  ID_PRODUCT_FROM_DATABASE=Xeon E3-1200 v2/3rd Gen Core processor PCI Express Root Port
+ 
+ pci:v00008086d00000151sv00001043sd00001477*
+  ID_PRODUCT_FROM_DATABASE=N56VZ
+ 
++pci:v00008086d00000151sv00001043sd000084CA*
++ ID_PRODUCT_FROM_DATABASE=P8H77-I Motherboard
++
+ pci:v00008086d00000152*
+  ID_PRODUCT_FROM_DATABASE=Xeon E3-1200 v2/3rd Gen Core processor Graphics Controller
+ 
++pci:v00008086d00000152sv00001043sd000084CA*
++ ID_PRODUCT_FROM_DATABASE=P8H77-I Motherboard
++
+ pci:v00008086d00000153*
+  ID_PRODUCT_FROM_DATABASE=3rd Gen Core Processor Thermal Subsystem
+ 
+@@ -48305,6 +48383,9 @@ pci:v00008086d00000BE0*
+ pci:v00008086d00000BE1*
+  ID_PRODUCT_FROM_DATABASE=Atom Processor D2xxx/N2xxx Integrated Graphics Controller
+ 
++pci:v00008086d00000BE1sv0000105Bsd00000D7C*
++ ID_PRODUCT_FROM_DATABASE=D270S/D250S Motherboard
++
+ pci:v00008086d00000BE2*
+  ID_PRODUCT_FROM_DATABASE=Atom Processor D2xxx/N2xxx Integrated Graphics Controller
+ 
+@@ -48365,6 +48446,9 @@ pci:v00008086d00000BF4*
+ pci:v00008086d00000BF5*
+  ID_PRODUCT_FROM_DATABASE=Atom Processor D2xxx/N2xxx DRAM Controller
+ 
++pci:v00008086d00000BF5sv0000105Bsd00000D7C*
++ ID_PRODUCT_FROM_DATABASE=D270S/D250S Motherboard
++
+ pci:v00008086d00000BF6*
+  ID_PRODUCT_FROM_DATABASE=Atom Processor D2xxx/N2xxx DRAM Controller
+ 
+@@ -48393,82 +48477,100 @@ pci:v00008086d00000C0C*
+  ID_PRODUCT_FROM_DATABASE=Haswell HD Audio Controller
+ 
+ pci:v00008086d00000C46*
+- ID_PRODUCT_FROM_DATABASE=Centerton PCI Express Root Port 1
++ ID_PRODUCT_FROM_DATABASE=Atom Processor S1200 PCI Express Root Port 1
+ 
+ pci:v00008086d00000C47*
+- ID_PRODUCT_FROM_DATABASE=Centerton PCI Express Root Port 2
++ ID_PRODUCT_FROM_DATABASE=Atom Processor S1200 PCI Express Root Port 2
+ 
+ pci:v00008086d00000C48*
+- ID_PRODUCT_FROM_DATABASE=Centerton PCI Express Root Port 3
++ ID_PRODUCT_FROM_DATABASE=Atom Processor S1200 PCI Express Root Port 3
+ 
+ pci:v00008086d00000C49*
+- ID_PRODUCT_FROM_DATABASE=Centerton PCI Express Root Port 4
++ ID_PRODUCT_FROM_DATABASE=Atom Processor S1200 PCI Express Root Port 4
+ 
+ pci:v00008086d00000C4E*
+- ID_PRODUCT_FROM_DATABASE=Centerton NTB Primary
++ ID_PRODUCT_FROM_DATABASE=Atom Processor S1200 NTB Primary
+ 
+ pci:v00008086d00000C54*
+- ID_PRODUCT_FROM_DATABASE=Centerton Internal Management
++ ID_PRODUCT_FROM_DATABASE=Atom Processor S1200 Internal
++
++pci:v00008086d00000C55*
++ ID_PRODUCT_FROM_DATABASE=Atom Processor S1200 DFX 1
++
++pci:v00008086d00000C56*
++ ID_PRODUCT_FROM_DATABASE=Atom Processor S1200 DFX 2
+ 
+ pci:v00008086d00000C59*
+- ID_PRODUCT_FROM_DATABASE=Centerton SMBus 2.0 Controller 0
++ ID_PRODUCT_FROM_DATABASE=Atom Processor S1200 SMBus 2.0 Controller 0
+ 
+ pci:v00008086d00000C5A*
+- ID_PRODUCT_FROM_DATABASE=Centerton SMBus 2.0 Controller 1
++ ID_PRODUCT_FROM_DATABASE=Atom Processor S1200 SMBus 2.0 Controller 1
++
++pci:v00008086d00000C5B*
++ ID_PRODUCT_FROM_DATABASE=Atom Processor S1200 SMBus Controller 2
++
++pci:v00008086d00000C5C*
++ ID_PRODUCT_FROM_DATABASE=Atom Processor S1200 SMBus Controller 3
++
++pci:v00008086d00000C5D*
++ ID_PRODUCT_FROM_DATABASE=Atom Processor S1200 SMBus Controller 4
++
++pci:v00008086d00000C5E*
++ ID_PRODUCT_FROM_DATABASE=Atom Processor S1200 SMBus Controller 5
+ 
+ pci:v00008086d00000C5F*
+- ID_PRODUCT_FROM_DATABASE=Centerton UART
++ ID_PRODUCT_FROM_DATABASE=Atom Processor S1200 UART
+ 
+ pci:v00008086d00000C60*
+- ID_PRODUCT_FROM_DATABASE=Centerton Integrated Legacy Bus
++ ID_PRODUCT_FROM_DATABASE=Atom Processor S1200 Integrated Legacy Bus
+ 
+ pci:v00008086d00000C70*
+- ID_PRODUCT_FROM_DATABASE=Centerton Internal Fabric
++ ID_PRODUCT_FROM_DATABASE=Atom Processor S1200 Internal
+ 
+ pci:v00008086d00000C71*
+- ID_PRODUCT_FROM_DATABASE=Centerton Internal Fabric
++ ID_PRODUCT_FROM_DATABASE=Atom Processor S1200 Internal
+ 
+ pci:v00008086d00000C72*
+- ID_PRODUCT_FROM_DATABASE=Centerton Internal Fabric
++ ID_PRODUCT_FROM_DATABASE=Atom Processor S1200 Internal
+ 
+ pci:v00008086d00000C73*
+- ID_PRODUCT_FROM_DATABASE=Centerton Internal Fabric
++ ID_PRODUCT_FROM_DATABASE=Atom Processor S1200 Internal
+ 
+ pci:v00008086d00000C74*
+- ID_PRODUCT_FROM_DATABASE=Centerton Internal Fabric
++ ID_PRODUCT_FROM_DATABASE=Atom Processor S1200 Internal
+ 
+ pci:v00008086d00000C75*
+- ID_PRODUCT_FROM_DATABASE=Centerton Internal Fabric
++ ID_PRODUCT_FROM_DATABASE=Atom Processor S1200 Internal
+ 
+ pci:v00008086d00000C76*
+- ID_PRODUCT_FROM_DATABASE=Centerton Internal Fabric
++ ID_PRODUCT_FROM_DATABASE=Atom Processor S1200 Internal
+ 
+ pci:v00008086d00000C77*
+- ID_PRODUCT_FROM_DATABASE=Centerton Internal Fabric
++ ID_PRODUCT_FROM_DATABASE=Atom Processor S1200 Internal
+ 
+ pci:v00008086d00000C78*
+- ID_PRODUCT_FROM_DATABASE=Centerton Internal Fabric
++ ID_PRODUCT_FROM_DATABASE=Atom Processor S1200 Internal
+ 
+ pci:v00008086d00000C79*
+- ID_PRODUCT_FROM_DATABASE=Centerton Internal Fabric
++ ID_PRODUCT_FROM_DATABASE=Atom Processor S1200 Internal
+ 
+ pci:v00008086d00000C7A*
+- ID_PRODUCT_FROM_DATABASE=Centerton Internal Fabric
++ ID_PRODUCT_FROM_DATABASE=Atom Processor S1200 Internal
+ 
+ pci:v00008086d00000C7B*
+- ID_PRODUCT_FROM_DATABASE=Centerton Internal Fabric
++ ID_PRODUCT_FROM_DATABASE=Atom Processor S1200 Internal
+ 
+ pci:v00008086d00000C7C*
+- ID_PRODUCT_FROM_DATABASE=Centerton Internal Fabric
++ ID_PRODUCT_FROM_DATABASE=Atom Processor S1200 Internal
+ 
+ pci:v00008086d00000C7D*
+- ID_PRODUCT_FROM_DATABASE=Centerton Internal Fabric
++ ID_PRODUCT_FROM_DATABASE=Atom Processor S1200 Internal
+ 
+ pci:v00008086d00000C7E*
+- ID_PRODUCT_FROM_DATABASE=Centerton Internal Fabric
++ ID_PRODUCT_FROM_DATABASE=Atom Processor S1200 Internal
+ 
+ pci:v00008086d00000C7F*
+- ID_PRODUCT_FROM_DATABASE=Centerton Internal Fabric
++ ID_PRODUCT_FROM_DATABASE=Atom Processor S1200 Internal
+ 
+ pci:v00008086d00000D00*
+  ID_PRODUCT_FROM_DATABASE=Crystal Well DRAM Controller
+@@ -49590,7 +49692,7 @@ pci:v00008086d00001049sv0000103Csd000030C1*
+  ID_PRODUCT_FROM_DATABASE=Compaq 6910p
+ 
+ pci:v00008086d00001049sv000017AAsd000020B9*
+- ID_PRODUCT_FROM_DATABASE=ThinkPad T61
++ ID_PRODUCT_FROM_DATABASE=ThinkPad T61/R61
+ 
+ pci:v00008086d0000104A*
+  ID_PRODUCT_FROM_DATABASE=82566DM Gigabit Network Connection
+@@ -49958,6 +50060,9 @@ pci:v00008086d00001095*
+ pci:v00008086d00001096*
+  ID_PRODUCT_FROM_DATABASE=80003ES2LAN Gigabit Ethernet Controller (Copper)
+ 
++pci:v00008086d00001096sv000015D9sd00001096*
++ ID_PRODUCT_FROM_DATABASE=Motherboard
++
+ pci:v00008086d00001096sv000015D9sd00008680*
+  ID_PRODUCT_FROM_DATABASE=X7DVL-E-O motherboard
+ 
+@@ -51116,6 +51221,9 @@ pci:v00008086d00001501*
+ pci:v00008086d00001502*
+  ID_PRODUCT_FROM_DATABASE=82579LM Gigabit Network Connection
+ 
++pci:v00008086d00001502sv00001028sd000004A3*
++ ID_PRODUCT_FROM_DATABASE=Precision M4600
++
+ pci:v00008086d00001503*
+  ID_PRODUCT_FROM_DATABASE=82579V Gigabit Network Connection
+ 
+@@ -51575,6 +51683,9 @@ pci:v00008086d00001C02sv00001043sd0000844D*
+ pci:v00008086d00001C03*
+  ID_PRODUCT_FROM_DATABASE=6 Series/C200 Series Chipset Family 6 port SATA AHCI Controller
+ 
++pci:v00008086d00001C03sv00001028sd000004A3*
++ ID_PRODUCT_FROM_DATABASE=Precision M4600
++
+ pci:v00008086d00001C03sv00001028sd000004B2*
+  ID_PRODUCT_FROM_DATABASE=Vostro 3350
+ 
+@@ -51599,6 +51710,9 @@ pci:v00008086d00001C09*
+ pci:v00008086d00001C10*
+  ID_PRODUCT_FROM_DATABASE=6 Series/C200 Series Chipset Family PCI Express Root Port 1
+ 
++pci:v00008086d00001C10sv00001028sd000004AA*
++ ID_PRODUCT_FROM_DATABASE=XPS 8300
++
+ pci:v00008086d00001C10sv00001028sd000004DA*
+  ID_PRODUCT_FROM_DATABASE=Vostro 3750
+ 
+@@ -51608,6 +51722,9 @@ pci:v00008086d00001C10sv00008086sd00007270*
+ pci:v00008086d00001C12*
+  ID_PRODUCT_FROM_DATABASE=6 Series/C200 Series Chipset Family PCI Express Root Port 2
+ 
++pci:v00008086d00001C12sv00001028sd000004AA*
++ ID_PRODUCT_FROM_DATABASE=XPS 8300
++
+ pci:v00008086d00001C12sv00008086sd00007270*
+  ID_PRODUCT_FROM_DATABASE=Apple MacBookPro8,2 [Core i7, 15", 2011]
+ 
+@@ -51623,6 +51740,9 @@ pci:v00008086d00001C14sv00008086sd00007270*
+ pci:v00008086d00001C16*
+  ID_PRODUCT_FROM_DATABASE=6 Series/C200 Series Chipset Family PCI Express Root Port 4
+ 
++pci:v00008086d00001C16sv00001028sd000004AA*
++ ID_PRODUCT_FROM_DATABASE=XPS 8300
++
+ pci:v00008086d00001C18*
+  ID_PRODUCT_FROM_DATABASE=6 Series/C200 Series Chipset Family PCI Express Root Port 5
+ 
+@@ -51647,6 +51767,9 @@ pci:v00008086d00001C20*
+ pci:v00008086d00001C20sv00001028sd00000490*
+  ID_PRODUCT_FROM_DATABASE=Alienware M17x R3
+ 
++pci:v00008086d00001C20sv00001028sd000004A3*
++ ID_PRODUCT_FROM_DATABASE=Precision M4600
++
+ pci:v00008086d00001C20sv00001028sd000004AA*
+  ID_PRODUCT_FROM_DATABASE=XPS 8300
+ 
+@@ -51668,6 +51791,9 @@ pci:v00008086d00001C20sv00008086sd00007270*
+ pci:v00008086d00001C22*
+  ID_PRODUCT_FROM_DATABASE=6 Series/C200 Series Chipset Family SMBus Controller
+ 
++pci:v00008086d00001C22sv00001028sd000004A3*
++ ID_PRODUCT_FROM_DATABASE=Precision M4600
++
+ pci:v00008086d00001C22sv00001028sd000004AA*
+  ID_PRODUCT_FROM_DATABASE=XPS 8300
+ 
+@@ -51692,6 +51818,9 @@ pci:v00008086d00001C25*
+ pci:v00008086d00001C26*
+  ID_PRODUCT_FROM_DATABASE=6 Series/C200 Series Chipset Family USB Enhanced Host Controller #1
+ 
++pci:v00008086d00001C26sv00001028sd000004A3*
++ ID_PRODUCT_FROM_DATABASE=Precision M4600
++
+ pci:v00008086d00001C26sv00001028sd000004AA*
+  ID_PRODUCT_FROM_DATABASE=XPS 8300
+ 
+@@ -51722,6 +51851,9 @@ pci:v00008086d00001C2Csv00008086sd00007270*
+ pci:v00008086d00001C2D*
+  ID_PRODUCT_FROM_DATABASE=6 Series/C200 Series Chipset Family USB Enhanced Host Controller #2
+ 
++pci:v00008086d00001C2Dsv00001028sd000004A3*
++ ID_PRODUCT_FROM_DATABASE=Precision M4600
++
+ pci:v00008086d00001C2Dsv00001028sd000004AA*
+  ID_PRODUCT_FROM_DATABASE=XPS 8300
+ 
+@@ -51746,6 +51878,9 @@ pci:v00008086d00001C35*
+ pci:v00008086d00001C3A*
+  ID_PRODUCT_FROM_DATABASE=6 Series/C200 Series Chipset Family MEI Controller #1
+ 
++pci:v00008086d00001C3Asv00001028sd000004A3*
++ ID_PRODUCT_FROM_DATABASE=Precision M4600
++
+ pci:v00008086d00001C3Asv00001028sd000004AA*
+  ID_PRODUCT_FROM_DATABASE=XPS 8300
+ 
+@@ -51833,6 +51968,9 @@ pci:v00008086d00001C4E*
+ pci:v00008086d00001C4F*
+  ID_PRODUCT_FROM_DATABASE=QM67 Express Chipset Family LPC Controller
+ 
++pci:v00008086d00001C4Fsv00001028sd000004A3*
++ ID_PRODUCT_FROM_DATABASE=Precision M4600
++
+ pci:v00008086d00001C50*
+  ID_PRODUCT_FROM_DATABASE=B65 Express Chipset Family LPC Controller
+ 
+@@ -52082,6 +52220,9 @@ pci:v00008086d00001E01*
+ pci:v00008086d00001E02*
+  ID_PRODUCT_FROM_DATABASE=7 Series/C210 Series Chipset Family 6-port SATA Controller [AHCI mode]
+ 
++pci:v00008086d00001E02sv00001043sd000084CA*
++ ID_PRODUCT_FROM_DATABASE=P8H77-I Motherboard
++
+ pci:v00008086d00001E03*
+  ID_PRODUCT_FROM_DATABASE=7 Series Chipset Family 6-port SATA Controller [AHCI mode]
+ 
+@@ -52121,6 +52262,9 @@ pci:v00008086d00001E10sv00001043sd00001477*
+ pci:v00008086d00001E10sv00001043sd00001517*
+  ID_PRODUCT_FROM_DATABASE=Zenbook Prime UX31A
+ 
++pci:v00008086d00001E10sv00001043sd000084CA*
++ ID_PRODUCT_FROM_DATABASE=P8H77-I Motherboard
++
+ pci:v00008086d00001E12*
+  ID_PRODUCT_FROM_DATABASE=7 Series/C210 Series Chipset Family PCI Express Root Port 2
+ 
+@@ -52142,6 +52286,9 @@ pci:v00008086d00001E16sv00001043sd00001477*
+ pci:v00008086d00001E18*
+  ID_PRODUCT_FROM_DATABASE=7 Series/C210 Series Chipset Family PCI Express Root Port 5
+ 
++pci:v00008086d00001E18sv00001043sd000084CA*
++ ID_PRODUCT_FROM_DATABASE=P8H77-I Motherboard
++
+ pci:v00008086d00001E1A*
+  ID_PRODUCT_FROM_DATABASE=7 Series/C210 Series Chipset Family PCI Express Root Port 6
+ 
+@@ -52160,6 +52307,9 @@ pci:v00008086d00001E20sv00001043sd00001477*
+ pci:v00008086d00001E20sv00001043sd00001517*
+  ID_PRODUCT_FROM_DATABASE=Zenbook Prime UX31A
+ 
++pci:v00008086d00001E20sv00001043sd00008415*
++ ID_PRODUCT_FROM_DATABASE=P8H77-I Motherboard
++
+ pci:v00008086d00001E22*
+  ID_PRODUCT_FROM_DATABASE=7 Series/C210 Series Chipset Family SMBus Controller
+ 
+@@ -52169,6 +52319,9 @@ pci:v00008086d00001E22sv00001043sd00001477*
+ pci:v00008086d00001E22sv00001043sd00001517*
+  ID_PRODUCT_FROM_DATABASE=Zenbook Prime UX31A
+ 
++pci:v00008086d00001E22sv00001043sd000084CA*
++ ID_PRODUCT_FROM_DATABASE=P8H77-I Motherboard
++
+ pci:v00008086d00001E24*
+  ID_PRODUCT_FROM_DATABASE=7 Series/C210 Series Chipset Family Thermal Management Controller
+ 
+@@ -52187,6 +52340,9 @@ pci:v00008086d00001E26sv00001043sd00001477*
+ pci:v00008086d00001E26sv00001043sd00001517*
+  ID_PRODUCT_FROM_DATABASE=Zenbook Prime UX31A
+ 
++pci:v00008086d00001E26sv00001043sd000084CA*
++ ID_PRODUCT_FROM_DATABASE=P8H77-I Motherboard
++
+ pci:v00008086d00001E2D*
+  ID_PRODUCT_FROM_DATABASE=7 Series/C210 Series Chipset Family USB Enhanced Host Controller #2
+ 
+@@ -52196,6 +52352,9 @@ pci:v00008086d00001E2Dsv00001043sd00001477*
+ pci:v00008086d00001E2Dsv00001043sd00001517*
+  ID_PRODUCT_FROM_DATABASE=Zenbook Prime UX31A
+ 
++pci:v00008086d00001E2Dsv00001043sd000084CA*
++ ID_PRODUCT_FROM_DATABASE=P8H77-I Motherboard
++
+ pci:v00008086d00001E31*
+  ID_PRODUCT_FROM_DATABASE=7 Series/C210 Series Chipset Family USB xHCI Host Controller
+ 
+@@ -52205,6 +52364,9 @@ pci:v00008086d00001E31sv00001043sd00001477*
+ pci:v00008086d00001E31sv00001043sd00001517*
+  ID_PRODUCT_FROM_DATABASE=Zenbook Prime UX31A
+ 
++pci:v00008086d00001E31sv00001043sd000084CA*
++ ID_PRODUCT_FROM_DATABASE=P8H77-I Motherboard
++
+ pci:v00008086d00001E33*
+  ID_PRODUCT_FROM_DATABASE=7 Series/C210 Series Chipset Family LAN Controller
+ 
+@@ -52217,6 +52379,9 @@ pci:v00008086d00001E3Asv00001043sd00001477*
+ pci:v00008086d00001E3Asv00001043sd00001517*
+  ID_PRODUCT_FROM_DATABASE=Zenbook Prime UX31A
+ 
++pci:v00008086d00001E3Asv00001043sd000084CA*
++ ID_PRODUCT_FROM_DATABASE=P8H77-I Motherboard
++
+ pci:v00008086d00001E3B*
+  ID_PRODUCT_FROM_DATABASE=7 Series/C210 Series Chipset Family MEI Controller #2
+ 
+@@ -52256,6 +52421,9 @@ pci:v00008086d00001E49*
+ pci:v00008086d00001E4A*
+  ID_PRODUCT_FROM_DATABASE=H77 Express Chipset LPC Controller
+ 
++pci:v00008086d00001E4Asv00001043sd000084CA*
++ ID_PRODUCT_FROM_DATABASE=P8H77-I Motherboard
++
+ pci:v00008086d00001E4B*
+  ID_PRODUCT_FROM_DATABASE=7 Series Chipset Family LPC Controller
+ 
+@@ -52634,18 +52802,27 @@ pci:v00008086d00002448sv0000103Csd000030C1*
+ pci:v00008086d00002448sv0000104Dsd0000902D*
+  ID_PRODUCT_FROM_DATABASE=VAIO VGN-NR120E
+ 
++pci:v00008086d00002448sv0000105Bsd00000D7C*
++ ID_PRODUCT_FROM_DATABASE=D270S/D250S Motherboard
++
+ pci:v00008086d00002448sv0000144Dsd0000C00C*
+  ID_PRODUCT_FROM_DATABASE=P30 notebook
+ 
+ pci:v00008086d00002448sv0000144Dsd0000C072*
+  ID_PRODUCT_FROM_DATABASE=Notebook N150P
+ 
++pci:v00008086d00002448sv00001458sd00005000*
++ ID_PRODUCT_FROM_DATABASE=GA-D525TUD
++
+ pci:v00008086d00002448sv00001734sd00001055*
+  ID_PRODUCT_FROM_DATABASE=Amilo M1420
+ 
+ pci:v00008086d00002448sv000017AAsd000020AE*
+  ID_PRODUCT_FROM_DATABASE=ThinkPad T61
+ 
++pci:v00008086d00002448sv00008086sd0000544B*
++ ID_PRODUCT_FROM_DATABASE=Desktop Board D425KT
++
+ pci:v00008086d00002448sv0000E4BFsd0000CC47*
+  ID_PRODUCT_FROM_DATABASE=CCG-RUMBA
+ 
+@@ -52815,7 +52992,10 @@ pci:v00008086d0000244Esv0000103Csd0000330B*
+  ID_PRODUCT_FROM_DATABASE=ProLiant ML150 G6 Server
+ 
+ pci:v00008086d0000244Esv00001458sd00005000*
+- ID_PRODUCT_FROM_DATABASE=GA-EP45-DS5 Motherboard
++ ID_PRODUCT_FROM_DATABASE=Motherboard
++
++pci:v00008086d0000244Esv000015D9sd00009680*
++ ID_PRODUCT_FROM_DATABASE=X7DBN Motherboard
+ 
+ pci:v00008086d0000244Esv00001775sd000011CC*
+  ID_PRODUCT_FROM_DATABASE=CC11/CL11
+@@ -53268,7 +53448,7 @@ pci:v00008086d000024C5sv0000103Csd000008B0*
+  ID_PRODUCT_FROM_DATABASE=tc1100 tablet
+ 
+ pci:v00008086d000024C5sv00001043sd00001713*
+- ID_PRODUCT_FROM_DATABASE=M6800N
++ ID_PRODUCT_FROM_DATABASE=M2400N/M6800N laptop
+ 
+ pci:v00008086d000024C5sv00001043sd000080B0*
+  ID_PRODUCT_FROM_DATABASE=P4B533
+@@ -53330,6 +53510,9 @@ pci:v00008086d000024C6sv0000103Csd00000890*
+ pci:v00008086d000024C6sv0000103Csd000008B0*
+  ID_PRODUCT_FROM_DATABASE=tc1100 tablet
+ 
++pci:v00008086d000024C6sv00001043sd00001716*
++ ID_PRODUCT_FROM_DATABASE=M2400N laptop
++
+ pci:v00008086d000024C6sv00001043sd00001826*
+  ID_PRODUCT_FROM_DATABASE=M6800N
+ 
+@@ -54644,8 +54827,11 @@ pci:v00008086d000025D4sv000015D9sd00008680*
+ pci:v00008086d000025D8*
+  ID_PRODUCT_FROM_DATABASE=5000P Chipset Memory Controller Hub
+ 
++pci:v00008086d000025D8sv000015D9sd00009680*
++ ID_PRODUCT_FROM_DATABASE=X7DBN Motherboard
++
+ pci:v00008086d000025D8sv00008086sd00003476*
+- ID_PRODUCT_FROM_DATABASE=Intel S5000PSLSATA Server Board
++ ID_PRODUCT_FROM_DATABASE=S5000PSLSATA Server Board
+ 
+ pci:v00008086d000025E2*
+  ID_PRODUCT_FROM_DATABASE=5000 Series Chipset PCI Express x4 Port 2
+@@ -54677,8 +54863,11 @@ pci:v00008086d000025F0sv0000103Csd000031FD*
+ pci:v00008086d000025F0sv000015D9sd00008680*
+  ID_PRODUCT_FROM_DATABASE=X7DVL-E-O motherboard
+ 
++pci:v00008086d000025F0sv000015D9sd00009680*
++ ID_PRODUCT_FROM_DATABASE=X7DBN Motherboard
++
+ pci:v00008086d000025F0sv00008086sd00003476*
+- ID_PRODUCT_FROM_DATABASE=Intel S5000PSLSATA Server Board
++ ID_PRODUCT_FROM_DATABASE=S5000PSLSATA Server Board
+ 
+ pci:v00008086d000025F1*
+  ID_PRODUCT_FROM_DATABASE=5000 Series Chipset Reserved Registers
+@@ -54689,8 +54878,11 @@ pci:v00008086d000025F1sv0000103Csd000031FD*
+ pci:v00008086d000025F1sv000015D9sd00008680*
+  ID_PRODUCT_FROM_DATABASE=X7DVL-E-O motherboard
+ 
++pci:v00008086d000025F1sv000015D9sd00009680*
++ ID_PRODUCT_FROM_DATABASE=X7DBN Motherboard
++
+ pci:v00008086d000025F1sv00008086sd00003476*
+- ID_PRODUCT_FROM_DATABASE=Intel S5000PSLSATA Server Board
++ ID_PRODUCT_FROM_DATABASE=S5000PSLSATA Server Board
+ 
+ pci:v00008086d000025F3*
+  ID_PRODUCT_FROM_DATABASE=5000 Series Chipset Reserved Registers
+@@ -54701,8 +54893,11 @@ pci:v00008086d000025F3sv0000103Csd000031FD*
+ pci:v00008086d000025F3sv000015D9sd00008680*
+  ID_PRODUCT_FROM_DATABASE=X7DVL-E-O motherboard
+ 
++pci:v00008086d000025F3sv000015D9sd00009680*
++ ID_PRODUCT_FROM_DATABASE=X7DBN Motherboard
++
+ pci:v00008086d000025F3sv00008086sd00003476*
+- ID_PRODUCT_FROM_DATABASE=Intel S5000PSLSATA Server Board
++ ID_PRODUCT_FROM_DATABASE=S5000PSLSATA Server Board
+ 
+ pci:v00008086d000025F5*
+  ID_PRODUCT_FROM_DATABASE=5000 Series Chipset FBD Registers
+@@ -54713,8 +54908,11 @@ pci:v00008086d000025F5sv0000103Csd000031FD*
+ pci:v00008086d000025F5sv000015D9sd00008680*
+  ID_PRODUCT_FROM_DATABASE=X7DVL-E-O motherboard
+ 
++pci:v00008086d000025F5sv000015D9sd00009680*
++ ID_PRODUCT_FROM_DATABASE=X7DBN Motherboard
++
+ pci:v00008086d000025F5sv00008086sd00003476*
+- ID_PRODUCT_FROM_DATABASE=Intel S5000PSLSATA Server Board
++ ID_PRODUCT_FROM_DATABASE=S5000PSLSATA Server Board
+ 
+ pci:v00008086d000025F6*
+  ID_PRODUCT_FROM_DATABASE=5000 Series Chipset FBD Registers
+@@ -54725,8 +54923,11 @@ pci:v00008086d000025F6sv0000103Csd000031FD*
+ pci:v00008086d000025F6sv000015D9sd00008680*
+  ID_PRODUCT_FROM_DATABASE=X7DVL-E-O motherboard
+ 
++pci:v00008086d000025F6sv000015D9sd00009680*
++ ID_PRODUCT_FROM_DATABASE=X7DBN Motherboard
++
+ pci:v00008086d000025F6sv00008086sd00003476*
+- ID_PRODUCT_FROM_DATABASE=Intel S5000PSLSATA Server Board
++ ID_PRODUCT_FROM_DATABASE=S5000PSLSATA Server Board
+ 
+ pci:v00008086d000025F7*
+  ID_PRODUCT_FROM_DATABASE=5000 Series Chipset PCI Express x8 Port 2-3
+@@ -55319,6 +55520,9 @@ pci:v00008086d00002670sv0000103Csd000031FE*
+ pci:v00008086d00002670sv000015D9sd00008680*
+  ID_PRODUCT_FROM_DATABASE=X7DVL-E-O motherboard
+ 
++pci:v00008086d00002670sv000015D9sd00009680*
++ ID_PRODUCT_FROM_DATABASE=X7DBN Motherboard
++
+ pci:v00008086d00002670sv00008086sd00003476*
+  ID_PRODUCT_FROM_DATABASE=Intel S5000PSLSATA Server Board
+ 
+@@ -55334,6 +55538,9 @@ pci:v00008086d00002681sv0000103Csd000031FE*
+ pci:v00008086d00002681sv000015D9sd00008680*
+  ID_PRODUCT_FROM_DATABASE=X7DVL-E-O motherboard
+ 
++pci:v00008086d00002681sv000015D9sd00009680*
++ ID_PRODUCT_FROM_DATABASE=X7DBN Motherboard
++
+ pci:v00008086d00002681sv00008086sd00003476*
+  ID_PRODUCT_FROM_DATABASE=Intel S5000PSLSATA Server Board
+ 
+@@ -55361,6 +55568,9 @@ pci:v00008086d00002688sv0000103Csd000031FE*
+ pci:v00008086d00002688sv000015D9sd00008680*
+  ID_PRODUCT_FROM_DATABASE=X7DVL-E-O motherboard
+ 
++pci:v00008086d00002688sv000015D9sd00009680*
++ ID_PRODUCT_FROM_DATABASE=X7DBN Motherboard
++
+ pci:v00008086d00002688sv00008086sd00003476*
+  ID_PRODUCT_FROM_DATABASE=Intel S5000PSLSATA Server Board
+ 
+@@ -55379,6 +55589,9 @@ pci:v00008086d00002689sv0000103Csd000031FE*
+ pci:v00008086d00002689sv000015D9sd00008680*
+  ID_PRODUCT_FROM_DATABASE=X7DVL-E-O motherboard
+ 
++pci:v00008086d00002689sv000015D9sd00009680*
++ ID_PRODUCT_FROM_DATABASE=X7DBN Motherboard
++
+ pci:v00008086d00002689sv00008086sd00003476*
+  ID_PRODUCT_FROM_DATABASE=Intel S5000PSLSATA Server Board
+ 
+@@ -55394,6 +55607,9 @@ pci:v00008086d0000268Asv0000103Csd000031FE*
+ pci:v00008086d0000268Asv000015D9sd00008680*
+  ID_PRODUCT_FROM_DATABASE=X7DVL-E-O motherboard
+ 
++pci:v00008086d0000268Asv000015D9sd00009680*
++ ID_PRODUCT_FROM_DATABASE=X7DBN Motherboard
++
+ pci:v00008086d0000268Asv00008086sd00003476*
+  ID_PRODUCT_FROM_DATABASE=Intel S5000PSLSATA Server Board
+ 
+@@ -55424,6 +55640,9 @@ pci:v00008086d0000268Csv0000103Csd000031FE*
+ pci:v00008086d0000268Csv000015D9sd00008680*
+  ID_PRODUCT_FROM_DATABASE=X7DVL-E-O motherboard
+ 
++pci:v00008086d0000268Csv000015D9sd00009680*
++ ID_PRODUCT_FROM_DATABASE=X7DBN Motherboard
++
+ pci:v00008086d0000268Csv00008086sd00003476*
+  ID_PRODUCT_FROM_DATABASE=Intel S5000PSLSATA Server Board
+ 
+@@ -55433,6 +55652,9 @@ pci:v00008086d00002690*
+ pci:v00008086d00002690sv0000103Csd000031FE*
+  ID_PRODUCT_FROM_DATABASE=ProLiant DL140 G3
+ 
++pci:v00008086d00002690sv000015D9sd00009680*
++ ID_PRODUCT_FROM_DATABASE=X7DBN Motherboard
++
+ pci:v00008086d00002692*
+  ID_PRODUCT_FROM_DATABASE=631xESB/632xESB/3100 Chipset PCI Express Root Port 2
+ 
+@@ -55463,6 +55685,9 @@ pci:v00008086d0000269Bsv0000103Csd000031FE*
+ pci:v00008086d0000269Bsv000015D9sd00008680*
+  ID_PRODUCT_FROM_DATABASE=X7DVL-E-O motherboard
+ 
++pci:v00008086d0000269Bsv000015D9sd00009680*
++ ID_PRODUCT_FROM_DATABASE=X7DBN Motherboard
++
+ pci:v00008086d0000269Bsv00008086sd00003476*
+  ID_PRODUCT_FROM_DATABASE=Intel S5000PSLSATA Server Board
+ 
+@@ -55475,6 +55700,9 @@ pci:v00008086d0000269Esv0000103Csd000031FE*
+ pci:v00008086d0000269Esv000015D9sd00008680*
+  ID_PRODUCT_FROM_DATABASE=X7DVL-E-O motherboard
+ 
++pci:v00008086d0000269Esv000015D9sd00009680*
++ ID_PRODUCT_FROM_DATABASE=X7DBN Motherboard
++
+ pci:v00008086d00002770*
+  ID_PRODUCT_FROM_DATABASE=82945G/GZ/P/PL Memory Controller Hub
+ 
+@@ -55694,12 +55922,21 @@ pci:v00008086d000027B9sv000017AAsd00002009*
+ pci:v00008086d000027BC*
+  ID_PRODUCT_FROM_DATABASE=NM10 Family LPC Controller
+ 
++pci:v00008086d000027BCsv0000105Bsd00000D7C*
++ ID_PRODUCT_FROM_DATABASE=D270S/D250S Motherboard
++
+ pci:v00008086d000027BCsv0000144Dsd0000C072*
+  ID_PRODUCT_FROM_DATABASE=Notebook N150P
+ 
++pci:v00008086d000027BCsv00001458sd00005001*
++ ID_PRODUCT_FROM_DATABASE=GA-D525TUD
++
+ pci:v00008086d000027BCsv00008086sd00004F4D*
+  ID_PRODUCT_FROM_DATABASE=DeskTop Board D510MO
+ 
++pci:v00008086d000027BCsv00008086sd0000544B*
++ ID_PRODUCT_FROM_DATABASE=Desktop Board D425KT
++
+ pci:v00008086d000027BD*
+  ID_PRODUCT_FROM_DATABASE=82801GHM (ICH7-M DH) LPC Interface Bridge
+ 
+@@ -55733,6 +55970,9 @@ pci:v00008086d000027C0sv00001462sd00007236*
+ pci:v00008086d000027C0sv00001775sd000011CC*
+  ID_PRODUCT_FROM_DATABASE=CC11/CL11
+ 
++pci:v00008086d000027C0sv00008086sd0000544B*
++ ID_PRODUCT_FROM_DATABASE=Desktop Board D425KT
++
+ pci:v00008086d000027C0sv00008086sd0000544E*
+  ID_PRODUCT_FROM_DATABASE=DeskTop Board D945GTP
+ 
+@@ -55745,9 +55985,15 @@ pci:v00008086d000027C1sv00001028sd000001DF*
+ pci:v00008086d000027C1sv0000103Csd00002A3B*
+  ID_PRODUCT_FROM_DATABASE=Pavilion A1512X
+ 
++pci:v00008086d000027C1sv0000105Bsd00000D7C*
++ ID_PRODUCT_FROM_DATABASE=D270S/D250S Motherboard
++
+ pci:v00008086d000027C1sv0000144Dsd0000C072*
+  ID_PRODUCT_FROM_DATABASE=Notebook N150P
+ 
++pci:v00008086d000027C1sv00001458sd0000B005*
++ ID_PRODUCT_FROM_DATABASE=GA-D525TUD
++
+ pci:v00008086d000027C1sv00001775sd000011CC*
+  ID_PRODUCT_FROM_DATABASE=CC11/CL11
+ 
+@@ -55829,12 +56075,18 @@ pci:v00008086d000027C8sv00001043sd00001237*
+ pci:v00008086d000027C8sv00001043sd00008179*
+  ID_PRODUCT_FROM_DATABASE=P5KPL-VM,P5LD2-VM Mainboard
+ 
++pci:v00008086d000027C8sv0000105Bsd00000D7C*
++ ID_PRODUCT_FROM_DATABASE=D270S/D250S Motherboard
++
+ pci:v00008086d000027C8sv0000107Bsd00005048*
+  ID_PRODUCT_FROM_DATABASE=E4500
+ 
+ pci:v00008086d000027C8sv0000144Dsd0000C072*
+  ID_PRODUCT_FROM_DATABASE=Notebook N150P
+ 
++pci:v00008086d000027C8sv00001458sd00005004*
++ ID_PRODUCT_FROM_DATABASE=GA-D525TUD
++
+ pci:v00008086d000027C8sv00001775sd000011CC*
+  ID_PRODUCT_FROM_DATABASE=CC11/CL11
+ 
+@@ -55844,6 +56096,9 @@ pci:v00008086d000027C8sv000017AAsd0000200A*
+ pci:v00008086d000027C8sv00008086sd00004F4D*
+  ID_PRODUCT_FROM_DATABASE=DeskTop Board D510MO
+ 
++pci:v00008086d000027C8sv00008086sd0000544B*
++ ID_PRODUCT_FROM_DATABASE=Desktop Board D425KT
++
+ pci:v00008086d000027C8sv00008086sd0000544E*
+  ID_PRODUCT_FROM_DATABASE=DeskTop Board D945GTP
+ 
+@@ -55883,12 +56138,18 @@ pci:v00008086d000027C9sv00001043sd00001237*
+ pci:v00008086d000027C9sv00001043sd00008179*
+  ID_PRODUCT_FROM_DATABASE=P5KPL-VM,P5LD2-VM Mainboard
+ 
++pci:v00008086d000027C9sv0000105Bsd00000D7C*
++ ID_PRODUCT_FROM_DATABASE=D270S/D250S Motherboard
++
+ pci:v00008086d000027C9sv0000107Bsd00005048*
+  ID_PRODUCT_FROM_DATABASE=E4500
+ 
+ pci:v00008086d000027C9sv0000144Dsd0000C072*
+  ID_PRODUCT_FROM_DATABASE=Notebook N150P
+ 
++pci:v00008086d000027C9sv00001458sd00005004*
++ ID_PRODUCT_FROM_DATABASE=GA-D525TUD
++
+ pci:v00008086d000027C9sv00001775sd000011CC*
+  ID_PRODUCT_FROM_DATABASE=CC11/CL11
+ 
+@@ -55898,6 +56159,9 @@ pci:v00008086d000027C9sv000017AAsd0000200A*
+ pci:v00008086d000027C9sv00008086sd00004F4D*
+  ID_PRODUCT_FROM_DATABASE=DeskTop Board D510MO
+ 
++pci:v00008086d000027C9sv00008086sd0000544B*
++ ID_PRODUCT_FROM_DATABASE=Desktop Board D425KT
++
+ pci:v00008086d000027C9sv00008086sd0000544E*
+  ID_PRODUCT_FROM_DATABASE=DeskTop Board D945GTP
+ 
+@@ -55937,12 +56201,18 @@ pci:v00008086d000027CAsv00001043sd00001237*
+ pci:v00008086d000027CAsv00001043sd00008179*
+  ID_PRODUCT_FROM_DATABASE=P5KPL-VM,P5LD2-VM Mainboard
+ 
++pci:v00008086d000027CAsv0000105Bsd00000D7C*
++ ID_PRODUCT_FROM_DATABASE=D270S/D250S Motherboard
++
+ pci:v00008086d000027CAsv0000107Bsd00005048*
+  ID_PRODUCT_FROM_DATABASE=E4500
+ 
+ pci:v00008086d000027CAsv0000144Dsd0000C072*
+  ID_PRODUCT_FROM_DATABASE=Notebook N150P
+ 
++pci:v00008086d000027CAsv00001458sd00005004*
++ ID_PRODUCT_FROM_DATABASE=GA-D525TUD
++
+ pci:v00008086d000027CAsv00001775sd000011CC*
+  ID_PRODUCT_FROM_DATABASE=CC11/CL11
+ 
+@@ -55988,12 +56258,18 @@ pci:v00008086d000027CBsv00001043sd00001237*
+ pci:v00008086d000027CBsv00001043sd00008179*
+  ID_PRODUCT_FROM_DATABASE=P5KPL-VM,P5LD2-VM Mainboard
+ 
++pci:v00008086d000027CBsv0000105Bsd00000D7C*
++ ID_PRODUCT_FROM_DATABASE=D270S/D250S Motherboard
++
+ pci:v00008086d000027CBsv0000107Bsd00005048*
+  ID_PRODUCT_FROM_DATABASE=E4500
+ 
+ pci:v00008086d000027CBsv0000144Dsd0000C072*
+  ID_PRODUCT_FROM_DATABASE=Notebook N150P
+ 
++pci:v00008086d000027CBsv00001458sd00005004*
++ ID_PRODUCT_FROM_DATABASE=GA-D525TUD
++
+ pci:v00008086d000027CBsv00001775sd000011CC*
+  ID_PRODUCT_FROM_DATABASE=CC11/CL11
+ 
+@@ -56042,9 +56318,15 @@ pci:v00008086d000027CCsv00001043sd00001237*
+ pci:v00008086d000027CCsv00001043sd00008179*
+  ID_PRODUCT_FROM_DATABASE=P5KPL-VM,P5LD2-VM Mainboard
+ 
++pci:v00008086d000027CCsv0000105Bsd00000D7C*
++ ID_PRODUCT_FROM_DATABASE=D270S/D250S Motherboard
++
+ pci:v00008086d000027CCsv0000144Dsd0000C072*
+  ID_PRODUCT_FROM_DATABASE=Notebook N150P
+ 
++pci:v00008086d000027CCsv00001458sd00005006*
++ ID_PRODUCT_FROM_DATABASE=GA-D525TUD
++
+ pci:v00008086d000027CCsv00001775sd000011CC*
+  ID_PRODUCT_FROM_DATABASE=CC11/CL11
+ 
+@@ -56054,6 +56336,9 @@ pci:v00008086d000027CCsv000017AAsd0000200B*
+ pci:v00008086d000027CCsv00008086sd00004F4D*
+  ID_PRODUCT_FROM_DATABASE=DeskTop Board D510MO
+ 
++pci:v00008086d000027CCsv00008086sd0000544B*
++ ID_PRODUCT_FROM_DATABASE=Desktop Board D425KT
++
+ pci:v00008086d000027CCsv00008086sd0000544E*
+  ID_PRODUCT_FROM_DATABASE=DeskTop Board D945GTP
+ 
+@@ -56069,9 +56354,15 @@ pci:v00008086d000027D0sv0000103Csd000030A3*
+ pci:v00008086d000027D0sv0000144Dsd0000C072*
+  ID_PRODUCT_FROM_DATABASE=Notebook N150P
+ 
++pci:v00008086d000027D0sv00001458sd00005001*
++ ID_PRODUCT_FROM_DATABASE=GA-D525TUD
++
+ pci:v00008086d000027D0sv00001775sd000011CC*
+  ID_PRODUCT_FROM_DATABASE=CC11/CL11
+ 
++pci:v00008086d000027D0sv00008086sd0000544B*
++ ID_PRODUCT_FROM_DATABASE=Desktop Board D425KT
++
+ pci:v00008086d000027D2*
+  ID_PRODUCT_FROM_DATABASE=NM10/ICH7 Family PCI Express Port 2
+ 
+@@ -56087,6 +56378,9 @@ pci:v00008086d000027D2sv0000144Dsd0000C072*
+ pci:v00008086d000027D2sv00001775sd000011CC*
+  ID_PRODUCT_FROM_DATABASE=CC11/CL11
+ 
++pci:v00008086d000027D2sv00008086sd0000544B*
++ ID_PRODUCT_FROM_DATABASE=Desktop Board D425KT
++
+ pci:v00008086d000027D4*
+  ID_PRODUCT_FROM_DATABASE=NM10/ICH7 Family PCI Express Port 3
+ 
+@@ -56096,6 +56390,9 @@ pci:v00008086d000027D4sv0000144Dsd0000C072*
+ pci:v00008086d000027D4sv00001775sd000011CC*
+  ID_PRODUCT_FROM_DATABASE=CC11/CL11
+ 
++pci:v00008086d000027D4sv00008086sd0000544B*
++ ID_PRODUCT_FROM_DATABASE=Desktop Board D425KT
++
+ pci:v00008086d000027D6*
+  ID_PRODUCT_FROM_DATABASE=NM10/ICH7 Family PCI Express Port 4
+ 
+@@ -56108,6 +56405,9 @@ pci:v00008086d000027D6sv0000144Dsd0000C072*
+ pci:v00008086d000027D6sv00001775sd000011CC*
+  ID_PRODUCT_FROM_DATABASE=CC11/CL11
+ 
++pci:v00008086d000027D6sv00008086sd0000544B*
++ ID_PRODUCT_FROM_DATABASE=Desktop Board D425KT
++
+ pci:v00008086d000027D8*
+  ID_PRODUCT_FROM_DATABASE=NM10/ICH7 Family High Definition Audio Controller
+ 
+@@ -56144,6 +56444,9 @@ pci:v00008086d000027D8sv00001043sd00008290*
+ pci:v00008086d000027D8sv00001043sd000082EA*
+  ID_PRODUCT_FROM_DATABASE=P5KPL-CM Motherboard
+ 
++pci:v00008086d000027D8sv0000105Bsd00000D7C*
++ ID_PRODUCT_FROM_DATABASE=D270S/D250S Motherboard
++
+ pci:v00008086d000027D8sv0000107Bsd00005048*
+  ID_PRODUCT_FROM_DATABASE=E4500
+ 
+@@ -56162,6 +56465,9 @@ pci:v00008086d000027D8sv00001447sd00001043*
+ pci:v00008086d000027D8sv0000144Dsd0000C072*
+  ID_PRODUCT_FROM_DATABASE=Notebook N150P
+ 
++pci:v00008086d000027D8sv00001458sd0000A002*
++ ID_PRODUCT_FROM_DATABASE=GA-D525TUD (Realtek ALC887)
++
+ pci:v00008086d000027D8sv00001458sd0000A102*
+  ID_PRODUCT_FROM_DATABASE=GA-8I945PG-RH Mainboard
+ 
+@@ -56213,6 +56519,9 @@ pci:v00008086d000027DAsv0000103Csd00002A3B*
+ pci:v00008086d000027DAsv00001043sd00008179*
+  ID_PRODUCT_FROM_DATABASE=P5KPL-VM Motherboard
+ 
++pci:v00008086d000027DAsv0000105Bsd00000D7C*
++ ID_PRODUCT_FROM_DATABASE=D270S/D250S Motherboard
++
+ pci:v00008086d000027DAsv000010F7sd00008338*
+  ID_PRODUCT_FROM_DATABASE=Panasonic CF-Y5 laptop
+ 
+@@ -56220,7 +56529,7 @@ pci:v00008086d000027DAsv0000144Dsd0000C072*
+  ID_PRODUCT_FROM_DATABASE=Notebook N150P
+ 
+ pci:v00008086d000027DAsv00001458sd00005001*
+- ID_PRODUCT_FROM_DATABASE=GA-8I945PG-RH Mainboard
++ ID_PRODUCT_FROM_DATABASE=GA-8I945PG-RH/GA-D525TUD Mainboard
+ 
+ pci:v00008086d000027DAsv00001775sd000011CC*
+  ID_PRODUCT_FROM_DATABASE=CC11/CL11
+@@ -56231,6 +56540,9 @@ pci:v00008086d000027DAsv000017AAsd0000200F*
+ pci:v00008086d000027DAsv00008086sd00004F4D*
+  ID_PRODUCT_FROM_DATABASE=DeskTop Board D510MO
+ 
++pci:v00008086d000027DAsv00008086sd0000544B*
++ ID_PRODUCT_FROM_DATABASE=Desktop Board D425KT
++
+ pci:v00008086d000027DAsv00008086sd0000544E*
+  ID_PRODUCT_FROM_DATABASE=DeskTop Board D945GTP
+ 
+@@ -57762,7 +58074,7 @@ pci:v00008086d00002A00sv000017AAsd000020B1*
+  ID_PRODUCT_FROM_DATABASE=ThinkPad T61
+ 
+ pci:v00008086d00002A00sv000017AAsd000020B3*
+- ID_PRODUCT_FROM_DATABASE=T61
++ ID_PRODUCT_FROM_DATABASE=ThinkPad T61/R61
+ 
+ pci:v00008086d00002A00sv0000E4BFsd0000CC47*
+  ID_PRODUCT_FROM_DATABASE=CCG-RUMBA
+@@ -57789,7 +58101,7 @@ pci:v00008086d00002A02sv0000104Dsd0000902D*
+  ID_PRODUCT_FROM_DATABASE=VAIO VGN-NR120E
+ 
+ pci:v00008086d00002A02sv000017AAsd000020B5*
+- ID_PRODUCT_FROM_DATABASE=T61
++ ID_PRODUCT_FROM_DATABASE=ThinkPad T61/R61
+ 
+ pci:v00008086d00002A02sv0000E4BFsd0000CC47*
+  ID_PRODUCT_FROM_DATABASE=CCG-RUMBA
+@@ -57810,7 +58122,7 @@ pci:v00008086d00002A03sv0000104Dsd0000902D*
+  ID_PRODUCT_FROM_DATABASE=VAIO VGN-NR120E
+ 
+ pci:v00008086d00002A03sv000017AAsd000020B5*
+- ID_PRODUCT_FROM_DATABASE=T61
++ ID_PRODUCT_FROM_DATABASE=ThinkPad T61/R61
+ 
+ pci:v00008086d00002A03sv0000E4BFsd0000CC47*
+  ID_PRODUCT_FROM_DATABASE=CCG-RUMBA
+@@ -58829,6 +59141,9 @@ pci:v00008086d00003500*
+ pci:v00008086d00003500sv0000103Csd000031FE*
+  ID_PRODUCT_FROM_DATABASE=ProLiant DL140 G3
+ 
++pci:v00008086d00003500sv000015D9sd00009680*
++ ID_PRODUCT_FROM_DATABASE=X7DBN Motherboard
++
+ pci:v00008086d00003501*
+  ID_PRODUCT_FROM_DATABASE=6310ESB PCI Express Upstream Port
+ 
+@@ -58844,6 +59159,9 @@ pci:v00008086d0000350C*
+ pci:v00008086d0000350Csv0000103Csd000031FE*
+  ID_PRODUCT_FROM_DATABASE=ProLiant DL140 G3
+ 
++pci:v00008086d0000350Csv000015D9sd00009680*
++ ID_PRODUCT_FROM_DATABASE=X7DBN Motherboard
++
+ pci:v00008086d0000350D*
+  ID_PRODUCT_FROM_DATABASE=6310ESB PCI Express to PCI-X Bridge
+ 
+@@ -58853,6 +59171,9 @@ pci:v00008086d00003510*
+ pci:v00008086d00003510sv0000103Csd000031FE*
+  ID_PRODUCT_FROM_DATABASE=ProLiant DL140 G3
+ 
++pci:v00008086d00003510sv000015D9sd00009680*
++ ID_PRODUCT_FROM_DATABASE=X7DBN Motherboard
++
+ pci:v00008086d00003511*
+  ID_PRODUCT_FROM_DATABASE=6310ESB PCI Express Downstream Port E1
+ 
+@@ -58865,6 +59186,9 @@ pci:v00008086d00003515*
+ pci:v00008086d00003518*
+  ID_PRODUCT_FROM_DATABASE=6311ESB/6321ESB PCI Express Downstream Port E3
+ 
++pci:v00008086d00003518sv000015D9sd00009680*
++ ID_PRODUCT_FROM_DATABASE=X7DBN Motherboard
++
+ pci:v00008086d00003519*
+  ID_PRODUCT_FROM_DATABASE=6310ESB PCI Express Downstream Port E3
+ 
+@@ -59529,7 +59853,7 @@ pci:v00008086d00003A37sv00001043sd000082D4*
+  ID_PRODUCT_FROM_DATABASE=P5Q Deluxe Motherboard
+ 
+ pci:v00008086d00003A37sv00001458sd00005004*
+- ID_PRODUCT_FROM_DATABASE=GA-EP45-DS5/GA-EG45M-DS2H Motherboard
++ ID_PRODUCT_FROM_DATABASE=Motherboard
+ 
+ pci:v00008086d00003A38*
+  ID_PRODUCT_FROM_DATABASE=82801JI (ICH10 Family) USB UHCI Controller #5
+@@ -59547,7 +59871,7 @@ pci:v00008086d00003A38sv00001043sd000082D4*
+  ID_PRODUCT_FROM_DATABASE=P5Q Deluxe Motherboard
+ 
+ pci:v00008086d00003A38sv00001458sd00005004*
+- ID_PRODUCT_FROM_DATABASE=GA-EP45-DS5/GA-EG45M-DS2H Motherboard
++ ID_PRODUCT_FROM_DATABASE=Motherboard
+ 
+ pci:v00008086d00003A39*
+  ID_PRODUCT_FROM_DATABASE=82801JI (ICH10 Family) USB UHCI Controller #6
+@@ -59565,7 +59889,7 @@ pci:v00008086d00003A39sv00001043sd000082D4*
+  ID_PRODUCT_FROM_DATABASE=P5Q Deluxe Motherboard
+ 
+ pci:v00008086d00003A39sv00001458sd00005004*
+- ID_PRODUCT_FROM_DATABASE=GA-EP45-DS5/GA-EG45M-DS2H Motherboard
++ ID_PRODUCT_FROM_DATABASE=Motherboard
+ 
+ pci:v00008086d00003A3A*
+  ID_PRODUCT_FROM_DATABASE=82801JI (ICH10 Family) USB2 EHCI Controller #1
+@@ -61196,12 +61520,6 @@ pci:v00008086d00008185*
+ pci:v00008086d00008186*
+  ID_PRODUCT_FROM_DATABASE=Atom Processor E6xx LPC Bridge
+ 
+-pci:v00008086d0000821C*
+- ID_PRODUCT_FROM_DATABASE=Wellsburg PCI Express Root Port #7
+-
+-pci:v00008086d0000821D*
+- ID_PRODUCT_FROM_DATABASE=Wellsburg PCI Express Root Port #7
+-
+ pci:v00008086d000084C4*
+  ID_PRODUCT_FROM_DATABASE=450KX/GX [Orion] - 82454KX/GX PCI bridge
+ 
+@@ -61598,6 +61916,15 @@ pci:v00008086d00008D19*
+ pci:v00008086d00008D1A*
+  ID_PRODUCT_FROM_DATABASE=Wellsburg PCI Express Root Port #6
+ 
++pci:v00008086d00008D1B*
++ ID_PRODUCT_FROM_DATABASE=Wellsburg PCI Express Root Port #6
++
++pci:v00008086d00008D1C*
++ ID_PRODUCT_FROM_DATABASE=Wellsburg PCI Express Root Port #7
++
++pci:v00008086d00008D1D*
++ ID_PRODUCT_FROM_DATABASE=Wellsburg PCI Express Root Port #7
++
+ pci:v00008086d00008D1E*
+  ID_PRODUCT_FROM_DATABASE=Wellsburg PCI Express Root Port #8
+ 
+@@ -61829,6 +62156,18 @@ pci:v00008086d00009C1A*
+ pci:v00008086d00009C1B*
+  ID_PRODUCT_FROM_DATABASE=Lynx Point-LP PCI Express Root Port 6
+ 
++pci:v00008086d00009C1C*
++ ID_PRODUCT_FROM_DATABASE=Lynx Point-LP PCI Express Root Port 7
++
++pci:v00008086d00009C1D*
++ ID_PRODUCT_FROM_DATABASE=Lynx Point-LP PCI Express Root Port 7
++
++pci:v00008086d00009C1E*
++ ID_PRODUCT_FROM_DATABASE=Lynx Point-LP PCI Express Root Port 8
++
++pci:v00008086d00009C1F*
++ ID_PRODUCT_FROM_DATABASE=Lynx Point-LP PCI Express Root Port 8
++
+ pci:v00008086d00009C20*
+  ID_PRODUCT_FROM_DATABASE=Lynx Point-LP HD Audio Controller
+ 
+@@ -61847,6 +62186,9 @@ pci:v00008086d00009C24*
+ pci:v00008086d00009C26*
+  ID_PRODUCT_FROM_DATABASE=Lynx Point-LP USB EHCI #1
+ 
++pci:v00008086d00009C2D*
++ ID_PRODUCT_FROM_DATABASE=Lynx Point-LP USB EHCI #2
++
+ pci:v00008086d00009C31*
+  ID_PRODUCT_FROM_DATABASE=Lynx Point-LP USB xHCI HC
+ 
+@@ -61916,15 +62258,27 @@ pci:v00008086d00009C66*
+ pci:v00008086d0000A000*
+  ID_PRODUCT_FROM_DATABASE=Atom Processor D4xx/D5xx/N4xx/N5xx DMI Bridge
+ 
++pci:v00008086d0000A000sv00001458sd00005000*
++ ID_PRODUCT_FROM_DATABASE=GA-D525TUD
++
+ pci:v00008086d0000A000sv00008086sd00004F4D*
+  ID_PRODUCT_FROM_DATABASE=DeskTop Board D510MO
+ 
++pci:v00008086d0000A000sv00008086sd0000544B*
++ ID_PRODUCT_FROM_DATABASE=Desktop Board D425KT
++
+ pci:v00008086d0000A001*
+  ID_PRODUCT_FROM_DATABASE=Atom Processor D4xx/D5xx/N4xx/N5xx Integrated Graphics Controller
+ 
++pci:v00008086d0000A001sv00001458sd0000D000*
++ ID_PRODUCT_FROM_DATABASE=GA-D525TUD
++
+ pci:v00008086d0000A001sv00008086sd00004F4D*
+  ID_PRODUCT_FROM_DATABASE=DeskTop Board D510MO
+ 
++pci:v00008086d0000A001sv00008086sd0000544B*
++ ID_PRODUCT_FROM_DATABASE=Desktop Board D425KT
++
+ pci:v00008086d0000A002*
+  ID_PRODUCT_FROM_DATABASE=Atom Processor D4xx/D5xx/N4xx/N5xx Integrated Graphics Controller
+ 
+diff --git a/hwdb/20-usb-vendor-product.hwdb b/hwdb/20-usb-vendor-product.hwdb
+index a9b5a7e..423c5fb 100644
+--- a/hwdb/20-usb-vendor-product.hwdb
++++ b/hwdb/20-usb-vendor-product.hwdb
+@@ -46484,6 +46484,21 @@ usb:v2659p1207*
+ usb:v2659p1208*
+  ID_PRODUCT_FROM_DATABASE=Sundtek SkyTV Ultimate III
+ 
++usb:v2659p1209*
++ ID_PRODUCT_FROM_DATABASE=MediaTV Analog/FM/ATSC MiniPCIe
++
++usb:v2659p1210*
++ ID_PRODUCT_FROM_DATABASE=MediaTV Pro III (EU)
++
++usb:v2659p1211*
++ ID_PRODUCT_FROM_DATABASE=MediaTV Pro III (US)
++
++usb:v2659p1212*
++ ID_PRODUCT_FROM_DATABASE=MediaTV Pro III MiniPCIe (EU)
++
++usb:v2659p1213*
++ ID_PRODUCT_FROM_DATABASE=MediaTV Pro III MiniPCIe (US)
++
+ usb:v2730*
+  ID_VENDOR_FROM_DATABASE=Citizen
+ 
diff --git a/0046-nspawn-add-audit-caps-to-default-set-to-keep.patch b/0046-nspawn-add-audit-caps-to-default-set-to-keep.patch
new file mode 100644
index 0000000..b208acd
--- /dev/null
+++ b/0046-nspawn-add-audit-caps-to-default-set-to-keep.patch
@@ -0,0 +1,62 @@
+From bedaffda101f906b73891e4045da2b962c3325c8 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Fri, 18 Jan 2013 18:13:01 +0100
+Subject: [PATCH] nspawn: add audit caps to default set to keep
+
+Due to the brokeness of much of the userspace audit code we cannot
+really start too many systems without the audit caps set. To make nspawn
+easier to use just add the audit caps by default.
+
+To boot up containers successfully the kernel's auditing needs to be
+turned off still (use "audit=0" on the kernel command line), but at
+least no manual caps have to be passed anymore.
+
+In the long run auditing will be fixed for containers and ve virtualized
+properly at which time it should be safe to enable these caps anyway.
+(cherry picked from commit 88d04e31ce0837ebf937ab46c3c39a0d93ab4c7c)
+---
+ man/systemd-nspawn.xml | 8 +++++---
+ src/nspawn/nspawn.c    | 4 +++-
+ 2 files changed, 8 insertions(+), 4 deletions(-)
+
+diff --git a/man/systemd-nspawn.xml b/man/systemd-nspawn.xml
+index fef5c2c..e9a290f 100644
+--- a/man/systemd-nspawn.xml
++++ b/man/systemd-nspawn.xml
+@@ -220,8 +220,8 @@
+                                 list of capability names, see
+                                 <citerefentry><refentrytitle>capabilities</refentrytitle><manvolnum>7</manvolnum></citerefentry>
+                                 for more information. Note that the
+-                                following capabilities will be
+-                                granted in any way: CAP_CHOWN,
++                                following capabilities will be granted
++                                in any way: CAP_CHOWN,
+                                 CAP_DAC_OVERRIDE, CAP_DAC_READ_SEARCH,
+                                 CAP_FOWNER, CAP_FSETID, CAP_IPC_OWNER,
+                                 CAP_KILL, CAP_LEASE,
+@@ -232,7 +232,9 @@
+                                 CAP_SETUID, CAP_SYS_ADMIN,
+                                 CAP_SYS_CHROOT, CAP_SYS_NICE,
+                                 CAP_SYS_PTRACE, CAP_SYS_TTY_CONFIG,
+-                                CAP_SYS_RESOURCE, CAP_SYS_BOOT.</para></listitem>
++                                CAP_SYS_RESOURCE, CAP_SYS_BOOT,
++                                CAP_AUDIT_WRITE,
++                                CAP_AUDIT_CONTROL.</para></listitem>
+                         </varlistentry>
+ 
+                         <varlistentry>
+diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c
+index 1f3bda5..44557f6 100644
+--- a/src/nspawn/nspawn.c
++++ b/src/nspawn/nspawn.c
+@@ -95,7 +95,9 @@ static uint64_t arg_retain =
+         (1ULL << CAP_SYS_PTRACE) |
+         (1ULL << CAP_SYS_TTY_CONFIG) |
+         (1ULL << CAP_SYS_RESOURCE) |
+-        (1ULL << CAP_SYS_BOOT);
++        (1ULL << CAP_SYS_BOOT) |
++        (1ULL << CAP_AUDIT_WRITE) |
++        (1ULL << CAP_AUDIT_CONTROL);
+ 
+ static int help(void) {
+ 
diff --git a/0047-man-update-suggested-yum-command-line-in-nspawn-1.patch b/0047-man-update-suggested-yum-command-line-in-nspawn-1.patch
new file mode 100644
index 0000000..4cd7a81
--- /dev/null
+++ b/0047-man-update-suggested-yum-command-line-in-nspawn-1.patch
@@ -0,0 +1,33 @@
+From 61f28fddbc6954339842b93f5594edb336bc50f6 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Fri, 18 Jan 2013 18:22:55 +0100
+Subject: [PATCH] man: update suggested yum command line in nspawn(1) (cherry
+ picked from commit 2b3987a863975f5a1fa1754725e3d07a5d4f6478)
+
+---
+ man/systemd-nspawn.xml | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/man/systemd-nspawn.xml b/man/systemd-nspawn.xml
+index e9a290f..085c187 100644
+--- a/man/systemd-nspawn.xml
++++ b/man/systemd-nspawn.xml
+@@ -291,13 +291,13 @@
+         <refsect1>
+                 <title>Example 1</title>
+ 
+-                <programlisting># yum --releasever=17 --nogpgcheck --installroot ~/fedora-tree/ install yum passwd vim-minimal rootfiles systemd
+-# systemd-nspawn -D ~/fedora-tree /usr/lib/systemd/systemd</programlisting>
++                <programlisting># yum -y --releasever=19 --nogpg --installroot=/srv/mycontainer --disablerepo='*' --enablerepo=fedora install systemd passwd yum fedora-release vim-minimal
++# systemd-nspawn -bD /srv/mycontainer</programlisting>
+ 
+                 <para>This installs a minimal Fedora distribution into
+-                the directory <filename>~/fedora-tree/</filename>
+-                and then boots an OS in a namespace container in it,
+-                with systemd as init system.</para>
++                the directory <filename>/srv/mycontainer/</filename> and
++                then boots an OS in a namespace container in
++                it.</para>
+         </refsect1>
+ 
+         <refsect1>
diff --git a/0048-tmpfiles-do-not-make-run-nologin-executable.patch b/0048-tmpfiles-do-not-make-run-nologin-executable.patch
new file mode 100644
index 0000000..c80401b
--- /dev/null
+++ b/0048-tmpfiles-do-not-make-run-nologin-executable.patch
@@ -0,0 +1,20 @@
+From 2be42c50b89f70820f683ff7d36e53de62a1dea5 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Micha=C5=82=20Bartoszkiewicz?= <mbartoszkiewicz at gmail.com>
+Date: Fri, 18 Jan 2013 21:33:59 +0100
+Subject: [PATCH] tmpfiles: do not make /run/nologin executable (cherry picked
+ from commit 610d99284feb9e942bce601c6aac1a5074545e6b)
+
+---
+ tmpfiles.d/systemd.conf | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/tmpfiles.d/systemd.conf b/tmpfiles.d/systemd.conf
+index f3928d6..ee86f2e 100644
+--- a/tmpfiles.d/systemd.conf
++++ b/tmpfiles.d/systemd.conf
+@@ -21,4 +21,4 @@ d /run/systemd/sessions 0755 root root -
+ d /run/systemd/users 0755 root root -
+ d /run/systemd/shutdown 0755 root root -
+ 
+-F /run/nologin 0755 - - - "System is booting up."
++F /run/nologin 0644 - - - "System is booting up."
diff --git a/0049-shutdown-loop-convert-to-enumerate-match.patch b/0049-shutdown-loop-convert-to-enumerate-match.patch
new file mode 100644
index 0000000..52e72ed
--- /dev/null
+++ b/0049-shutdown-loop-convert-to-enumerate-match.patch
@@ -0,0 +1,45 @@
+From ab003157d9f533a1bfbdd0a839c2542e7efb23e3 Mon Sep 17 00:00:00 2001
+From: Kay Sievers <kay at vrfy.org>
+Date: Sun, 20 Jan 2013 16:18:00 +0100
+Subject: [PATCH] shutdown: loop - convert to enumerate match (cherry picked
+ from commit e1af7092a8e124eff5f7a668f0f1562c4df4b02f)
+
+---
+ src/core/umount.c | 10 ++--------
+ 1 file changed, 2 insertions(+), 8 deletions(-)
+
+diff --git a/src/core/umount.c b/src/core/umount.c
+index f0f2711..3fcb90e 100644
+--- a/src/core/umount.c
++++ b/src/core/umount.c
+@@ -219,7 +219,8 @@ static int loopback_list_get(MountPoint **head) {
+         }
+ 
+         if (udev_enumerate_add_match_subsystem(e, "block") < 0 ||
+-            udev_enumerate_add_match_sysname(e, "loop*") < 0) {
++            udev_enumerate_add_match_sysname(e, "loop*") < 0 ||
++            udev_enumerate_add_match_sysattr(e, "loop/backing_file", NULL) < 0) {
+                 r = -EIO;
+                 goto finish;
+         }
+@@ -233,7 +234,6 @@ static int loopback_list_get(MountPoint **head) {
+         udev_list_entry_foreach(item, first) {
+                 MountPoint *lb;
+                 struct udev_device *d;
+-                const char *backing;
+                 char *loop;
+                 const char *dn;
+ 
+@@ -242,12 +242,6 @@ static int loopback_list_get(MountPoint **head) {
+                         goto finish;
+                 }
+ 
+-                backing = udev_device_get_sysattr_value(d, "loop/backing_file");
+-                if (!backing) {
+-                        udev_device_unref(d);
+-                        continue;
+-                }
+-
+                 if (!(dn = udev_device_get_devnode(d))) {
+                         udev_device_unref(d);
+                         continue;
diff --git a/0050-Fix-some-typos.patch b/0050-Fix-some-typos.patch
new file mode 100644
index 0000000..67cda0e
--- /dev/null
+++ b/0050-Fix-some-typos.patch
@@ -0,0 +1,37 @@
+From 0b6b98ed0ff1cbdd02179b7551443a4e43716af2 Mon Sep 17 00:00:00 2001
+From: Eelco Dolstra <eelco.dolstra at logicblox.com>
+Date: Sun, 20 Jan 2013 16:27:58 +0100
+Subject: [PATCH] Fix some typos (cherry picked from commit
+ 28137202027b07fec5c270c1b1ef12ebaf35d58d)
+
+---
+ man/systemd.service.xml | 2 +-
+ src/core/manager.c      | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/man/systemd.service.xml b/man/systemd.service.xml
+index 8dbef49..79bf8d8 100644
+--- a/man/systemd.service.xml
++++ b/man/systemd.service.xml
+@@ -745,7 +745,7 @@
+                                 open access to the notification socket
+                                 when using
+                                 <varname>Type=notify</varname> or
+-                                <varname>WatchdogUsec=</varname> (see
++                                <varname>WatchdogSec=</varname> (see
+                                 above). If those options are used but
+                                 <varname>NotifyAccess=</varname> not
+                                 configured it will be implicitly set
+diff --git a/src/core/manager.c b/src/core/manager.c
+index df0fd63..79d1e85 100644
+--- a/src/core/manager.c
++++ b/src/core/manager.c
+@@ -122,7 +122,7 @@ static int manager_setup_notify(Manager *m) {
+         ev.data.ptr = &m->notify_watch;
+ 
+         if (epoll_ctl(m->epoll_fd, EPOLL_CTL_ADD, m->notify_watch.fd, &ev) < 0) {
+-                log_error("Failed to add timer change fd to epoll: %m");
++                log_error("Failed to add notification socket fd to epoll: %m");
+                 return -errno;
+         }
+ 
diff --git a/0051-man-clearify-the-meaning-of-timeout-0-for-password-a.patch b/0051-man-clearify-the-meaning-of-timeout-0-for-password-a.patch
new file mode 100644
index 0000000..a567dcb
--- /dev/null
+++ b/0051-man-clearify-the-meaning-of-timeout-0-for-password-a.patch
@@ -0,0 +1,42 @@
+From 05469f7b42b6947d02ec9dd41fb08e777a2f22b9 Mon Sep 17 00:00:00 2001
+From: Tom Gundersen <teg at jklm.no>
+Date: Wed, 23 Jan 2013 01:02:14 +0100
+Subject: [PATCH] man: clearify the meaning of timeout=0 for password agents
+
+The fact that timeout=0 makes password agents wait indefinitely is documented
+in http://www.freedesktop.org/wiki/Software/systemd/PasswordAgents. Document
+it also in the relevant man pages.
+(cherry picked from commit c93350728e822c3da7522664cf0a0e0ee10509fa)
+---
+ man/crypttab.xml             | 3 ++-
+ man/systemd-ask-password.xml | 3 ++-
+ 2 files changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/man/crypttab.xml b/man/crypttab.xml
+index 2a83994..acc7029 100644
+--- a/man/crypttab.xml
++++ b/man/crypttab.xml
+@@ -220,7 +220,8 @@
+                                 for querying for a password. If no
+                                 unit is specified seconds is used.
+                                 Supported units are s, ms,
+-                                us, min, h, d.</para></listitem>
++                                us, min, h, d. A timeout of 0 waits
++                                indefinitely.</para></listitem>
+                         </varlistentry>
+ 
+                         <varlistentry>
+diff --git a/man/systemd-ask-password.xml b/man/systemd-ask-password.xml
+index 7b0b9ab..563f9d5 100644
+--- a/man/systemd-ask-password.xml
++++ b/man/systemd-ask-password.xml
+@@ -129,7 +129,8 @@
+ 
+                                 <listitem><para>Specify the query
+                                 timeout in seconds. Defaults to
+-                                90s.</para></listitem>
++                                90s. A timeout of 0 waits indefinitely.
++                                </para></listitem>
+                         </varlistentry>
+ 
+                         <varlistentry>
diff --git a/0052-configure.ac-combine-Wformat-options-into-one-argume.patch b/0052-configure.ac-combine-Wformat-options-into-one-argume.patch
new file mode 100644
index 0000000..e3d162d
--- /dev/null
+++ b/0052-configure.ac-combine-Wformat-options-into-one-argume.patch
@@ -0,0 +1,29 @@
+From 0561647ccf955bb0e76a04924f26a0183e098d77 Mon Sep 17 00:00:00 2001
+From: Kay Sievers <kay at vrfy.org>
+Date: Tue, 22 Jan 2013 18:10:55 +0100
+Subject: [PATCH] configure.ac: combine --Wformat* options into one argument
+
+https://bugs.freedesktop.org/show_bug.cgi?id=59621
+(cherry picked from commit 780040dc2a4b08a2c1fe5bd8db3a70e966c2acb3)
+---
+ configure.ac | 4 +---
+ 1 file changed, 1 insertion(+), 3 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 7a3cd87..d1e9bb6 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -129,12 +129,10 @@ CC_CHECK_FLAGS_APPEND([with_cflags], [CFLAGS], [\
+         -Wextra \
+         -Wno-inline \
+         -Wundef \
+-        -Wformat=2 \
++        "-Wformat=2 -Wformat-security -Wformat-nonliteral" \
+         -Wlogical-op \
+         -Wsign-compare \
+-        -Wformat-security \
+         -Wmissing-include-dirs \
+-        -Wformat-nonliteral \
+         -Wold-style-definition \
+         -Wpointer-arith \
+         -Winit-self \
diff --git a/0053-logind-only-allow-one-shutdown-sleep-action-to-be-qu.patch b/0053-logind-only-allow-one-shutdown-sleep-action-to-be-qu.patch
new file mode 100644
index 0000000..7200089
--- /dev/null
+++ b/0053-logind-only-allow-one-shutdown-sleep-action-to-be-qu.patch
@@ -0,0 +1,206 @@
+From d4e2342bd4b1d0d0c642e231a744ec86098daeae Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Thu, 24 Jan 2013 04:56:44 +0100
+Subject: [PATCH] logind: only allow one shutdown/sleep action to be queued at
+ the same time
+
+This should make sure that closing the lid while shutting down won't
+suspend the machine but will simply cause the shutdown to complete.
+(cherry picked from commit af9792ac7f39354f80e9006c42c2400c5e41c447)
+---
+ src/login/logind-action.c |  9 ++++++-
+ src/login/logind-dbus.c   | 65 +++++++++++++++++++++++++++++++++++++++--------
+ src/login/logind.c        |  2 ++
+ src/login/logind.h        |  4 ++-
+ 4 files changed, 67 insertions(+), 13 deletions(-)
+
+diff --git a/src/login/logind-action.c b/src/login/logind-action.c
+index e1517d6..a796ebe 100644
+--- a/src/login/logind-action.c
++++ b/src/login/logind-action.c
+@@ -56,10 +56,15 @@ int manager_handle_action(
+         DBusError error;
+         int r;
+         InhibitWhat inhibit_operation;
+-        bool supported = true;
++        bool supported;
+ 
+         assert(m);
+ 
++        if (m->action_job || m->delayed_unit) {
++                log_debug("Action already in progress, ignoring.");
++                return -EALREADY;
++        }
++
+         /* If the key handling is turned off, don't do anything */
+         if (handle == HANDLE_IGNORE) {
+                 log_debug("Refusing operation, as it is turned off.");
+@@ -74,6 +79,8 @@ int manager_handle_action(
+                 supported = can_sleep("disk") > 0 && can_sleep_disk("suspend") > 0;
+         else if (handle == HANDLE_KEXEC)
+                 supported = access("/sbin/kexec", X_OK) >= 0;
++        else
++                supported = true;
+ 
+         if (!supported) {
+                 log_warning("Requested operation not supported, ignoring.");
+diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c
+index d64debe..0ff20fa 100644
+--- a/src/login/logind-dbus.c
++++ b/src/login/logind-dbus.c
+@@ -990,22 +990,44 @@ static int have_multiple_sessions(
+         return false;
+ }
+ 
+-static int send_start_unit(DBusConnection *connection, const char *unit_name, DBusError *error) {
+-        const char *mode = "replace";
++static int send_start_unit(Manager *m, const char *unit_name, DBusError *error) {
++        _cleanup_dbus_message_unref_ DBusMessage *reply = NULL;
++        const char *mode = "replace", *p;
++        int r;
++        char *c;
+ 
++        assert(m);
+         assert(unit_name);
+ 
+-        return bus_method_call_with_reply (
+-                        connection,
++        r = bus_method_call_with_reply(
++                        m->bus,
+                         "org.freedesktop.systemd1",
+                         "/org/freedesktop/systemd1",
+                         "org.freedesktop.systemd1.Manager",
+                         "StartUnit",
+-                        NULL,
+-                        NULL,
++                        &reply,
++                        error,
+                         DBUS_TYPE_STRING, &unit_name,
+                         DBUS_TYPE_STRING, &mode,
+                         DBUS_TYPE_INVALID);
++        if (r < 0)
++                return r;
++
++        if (!dbus_message_get_args(
++                            reply,
++                            error,
++                            DBUS_TYPE_OBJECT_PATH, &p,
++                            DBUS_TYPE_INVALID))
++                return -EINVAL;
++
++        c = strdup(p);
++        if (!c)
++                return -ENOMEM;
++
++        free(m->action_job);
++        m->action_job = c;
++
++        return 0;
+ }
+ 
+ static int send_prepare_for(Manager *m, InhibitWhat w, bool _active) {
+@@ -1226,6 +1248,7 @@ int bus_manager_shutdown_or_sleep_now_or_later(
+         assert(unit_name);
+         assert(w >= 0);
+         assert(w <= _INHIBIT_WHAT_MAX);
++        assert(!m->action_job);
+ 
+         delayed =
+                 m->inhibit_delay_max > 0 &&
+@@ -1240,7 +1263,7 @@ int bus_manager_shutdown_or_sleep_now_or_later(
+ 
+                 /* Shutdown is not delayed, execute it
+                  * immediately */
+-                r = send_start_unit(m->bus, unit_name, error);
++                r = send_start_unit(m, unit_name, error);
+         }
+ 
+         return r;
+@@ -1278,6 +1301,9 @@ static int bus_manager_do_shutdown_or_sleep(
+         assert(error);
+         assert(_reply);
+ 
++        if (m->action_job || m->delayed_unit)
++                return -EALREADY;
++
+         if (!dbus_message_get_args(
+                             message,
+                             error,
+@@ -2327,6 +2353,23 @@ DBusHandlerResult bus_message_filter(
+                         log_error("Failed to parse Released message: %s", bus_error_message(&error));
+                 else
+                         manager_cgroup_notify_empty(m, cgroup);
++
++        } else if (dbus_message_is_signal(message, "org.freedesktop.systemd1.Manager", "JobRemoved")) {
++                uint32_t id;
++                const char *path, *result, *unit;
++
++                if (!dbus_message_get_args(message, &error,
++                                           DBUS_TYPE_UINT32, &id,
++                                           DBUS_TYPE_OBJECT_PATH, &path,
++                                           DBUS_TYPE_STRING, &unit,
++                                           DBUS_TYPE_STRING, &result,
++                                           DBUS_TYPE_INVALID))
++                        log_error("Failed to parse JobRemoved message: %s", bus_error_message(&error));
++                else if (m->action_job && streq(m->action_job, path)) {
++                        log_info("Action is complete, result is '%s'.", result);
++                        free(m->action_job);
++                        m->action_job = NULL;
++                }
+         }
+ 
+         dbus_error_free(&error);
+@@ -2376,21 +2419,21 @@ int manager_dispatch_delayed(Manager *manager) {
+ 
+         bus_manager_log_shutdown(manager, manager->delayed_what, manager->delayed_unit);
+ 
++        /* Tell people about it */
++        send_prepare_for(manager, manager->delayed_what, false);
++
+         /* Reset delay data */
+         unit_name = manager->delayed_unit;
+         manager->delayed_unit = NULL;
+ 
+         /* Actually do the shutdown */
+         dbus_error_init(&error);
+-        r = send_start_unit(manager->bus, unit_name, &error);
++        r = send_start_unit(manager, unit_name, &error);
+         if (r < 0) {
+                 log_warning("Failed to send delayed message: %s", bus_error_message_or_strerror(&error, -r));
+                 dbus_error_free(&error);
+                 return r;
+         }
+ 
+-        /* Tell people about it */
+-        send_prepare_for(manager, manager->delayed_what, false);
+-
+         return 1;
+ }
+diff --git a/src/login/logind.c b/src/login/logind.c
+index 6776229..ed0b748 100644
+--- a/src/login/logind.c
++++ b/src/login/logind.c
+@@ -187,6 +187,8 @@ void manager_free(Manager *m) {
+         strv_free(m->kill_only_users);
+         strv_free(m->kill_exclude_users);
+ 
++        free(m->action_job);
++
+         free(m->cgroup_path);
+         free(m);
+ }
+diff --git a/src/login/logind.h b/src/login/logind.h
+index 816635d..fe6ea0f 100644
+--- a/src/login/logind.h
++++ b/src/login/logind.h
+@@ -100,7 +100,9 @@ struct Manager {
+ 
+         usec_t inhibit_delay_max;
+ 
+-        int idle_action_fd;
++        char* action_job;
++
++        int idle_action_fd; /* the timer_fd */
+         usec_t idle_action_usec;
+         usec_t idle_action_not_before_usec;
+         HandleAction idle_action;
diff --git a/0054-hwdb-update.patch b/0054-hwdb-update.patch
new file mode 100644
index 0000000..8f9ba87
--- /dev/null
+++ b/0054-hwdb-update.patch
@@ -0,0 +1,720 @@
+From 4deebadc410f1eaad0140a715833bc6c04df3c19 Mon Sep 17 00:00:00 2001
+From: Kay Sievers <kay at vrfy.org>
+Date: Thu, 24 Jan 2013 12:42:57 +0100
+Subject: [PATCH] hwdb: update (cherry picked from commit
+ 3939e155d57e0a7319ed3af8bff48e68aea76543)
+
+---
+ hwdb/20-OUI.hwdb                | 117 ++++++++++++++++++++++++++++++++++
+ hwdb/20-pci-vendor-product.hwdb | 136 ++++++++++++++++++++++++++++++++++++++--
+ 2 files changed, 248 insertions(+), 5 deletions(-)
+
+diff --git a/hwdb/20-OUI.hwdb b/hwdb/20-OUI.hwdb
+index ac07a5d..736299b 100644
+--- a/hwdb/20-OUI.hwdb
++++ b/hwdb/20-OUI.hwdb
+@@ -12592,6 +12592,36 @@ OUI:40D855083*
+ OUI:40D855084*
+  ID_OUI_FROM_DATABASE=Papendorf Software Engineering GmbH
+ 
++OUI:40D855085*
++ ID_OUI_FROM_DATABASE=Peek Traffic Corporation
++
++OUI:40D855086*
++ ID_OUI_FROM_DATABASE=DSP DESIGN
++
++OUI:40D855087*
++ ID_OUI_FROM_DATABASE=Bestel China
++
++OUI:40D855088*
++ ID_OUI_FROM_DATABASE=JEL SYSTEM CO., LTD.
++
++OUI:40D855089*
++ ID_OUI_FROM_DATABASE=WUHAN XINGTUXINKE ELECTRONIC CO.,LTD
++
++OUI:40D85508A*
++ ID_OUI_FROM_DATABASE=Leder Elektronik Design
++
++OUI:40D85508B*
++ ID_OUI_FROM_DATABASE=MeshWorks Wireless Oy
++
++OUI:40D85508C*
++ ID_OUI_FROM_DATABASE=Magnescale Co.,Ltd
++
++OUI:40D85508D*
++ ID_OUI_FROM_DATABASE=Boehme Nachrichtentechnik
++
++OUI:40D85508E*
++ ID_OUI_FROM_DATABASE=Lyngsoe Systems
++
+ OUI:000000*
+  ID_OUI_FROM_DATABASE=XEROX CORPORATION
+ 
+@@ -51292,6 +51322,9 @@ OUI:083AB8*
+ OUI:083E8E*
+  ID_OUI_FROM_DATABASE=Hon Hai Precision Ind.Co.Ltd
+ 
++OUI:08482C*
++ ID_OUI_FROM_DATABASE=Raycore Taiwan Co., LTD.
++
+ OUI:084E1C*
+  ID_OUI_FROM_DATABASE=H2A Systems, LLC
+ 
+@@ -51718,6 +51751,9 @@ OUI:10189E*
+ OUI:101B54*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
++OUI:101C0C*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:101D51*
+  ID_OUI_FROM_DATABASE=ON-Q LLC dba ON-Q Mesh Networks
+ 
+@@ -51727,6 +51763,9 @@ OUI:101DC0*
+ OUI:101F74*
+  ID_OUI_FROM_DATABASE=Hewlett-Packard Company
+ 
++OUI:102831*
++ ID_OUI_FROM_DATABASE=Morion Inc.
++
+ OUI:102D96*
+  ID_OUI_FROM_DATABASE=Looxcie Inc.
+ 
+@@ -51790,6 +51829,9 @@ OUI:1065A3*
+ OUI:1065CF*
+  ID_OUI_FROM_DATABASE=IQSIM
+ 
++OUI:106682*
++ ID_OUI_FROM_DATABASE=NEC AccessTechnica, Ltd.
++
+ OUI:10683F*
+  ID_OUI_FROM_DATABASE=LG Electronics
+ 
+@@ -51898,6 +51940,9 @@ OUI:10EA59*
+ OUI:10EED9*
+  ID_OUI_FROM_DATABASE=Canoga Perkins Corporation
+ 
++OUI:10F311*
++ ID_OUI_FROM_DATABASE=Cisco
++
+ OUI:10F3DB*
+  ID_OUI_FROM_DATABASE=Gridco Systems, Inc.
+ 
+@@ -52807,6 +52852,9 @@ OUI:24497B*
+ OUI:245FDF*
+  ID_OUI_FROM_DATABASE=KYOCERA Corporation
+ 
++OUI:246278*
++ ID_OUI_FROM_DATABASE=sysmocom - systems for mobile communications GmbH
++
+ OUI:246511*
+  ID_OUI_FROM_DATABASE=AVM GmbH
+ 
+@@ -52837,6 +52885,9 @@ OUI:248707*
+ OUI:249442*
+  ID_OUI_FROM_DATABASE=OPEN ROAD SOLUTIONS , INC.
+ 
++OUI:249504*
++ ID_OUI_FROM_DATABASE=SFR
++
+ OUI:24A42C*
+  ID_OUI_FROM_DATABASE=KOUKAAM a.s.
+ 
+@@ -52918,6 +52969,9 @@ OUI:24DEC6*
+ OUI:24E6BA*
+  ID_OUI_FROM_DATABASE=JSC Zavod im. Kozitsky
+ 
++OUI:24EA40*
++ ID_OUI_FROM_DATABASE=Systeme Helmholz GmbH
++
+ OUI:24EC99*
+  ID_OUI_FROM_DATABASE=Askey Computer Corp
+ 
+@@ -53347,6 +53401,9 @@ OUI:2CEDEB*
+ OUI:2CEE26*
+  ID_OUI_FROM_DATABASE=Petroleum Geo-Services
+ 
++OUI:2CF203*
++ ID_OUI_FROM_DATABASE=EMKO ELEKTRONIK SAN VE TIC AS
++
+ OUI:2CF4C5*
+  ID_OUI_FROM_DATABASE=Avaya, Inc
+ 
+@@ -53473,6 +53530,9 @@ OUI:3085A9*
+ OUI:308730*
+  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd
+ 
++OUI:308999*
++ ID_OUI_FROM_DATABASE=Guangdong East Power Co.,
++
+ OUI:308CFB*
+  ID_OUI_FROM_DATABASE=Dropcam
+ 
+@@ -53932,6 +53992,9 @@ OUI:3C0754*
+ OUI:3C0771*
+  ID_OUI_FROM_DATABASE=Sony Corporation
+ 
++OUI:3C081E*
++ ID_OUI_FROM_DATABASE=Beijing Yupont Electric Power Technology Co.,Ltd
++
+ OUI:3C096D*
+  ID_OUI_FROM_DATABASE=Powerhouse Dynamics
+ 
+@@ -56104,6 +56167,9 @@ OUI:646E6C*
+ OUI:647002*
+  ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO., LTD.
+ 
++OUI:6472D8*
++ ID_OUI_FROM_DATABASE=GooWi Technology Co.,Limited
++
+ OUI:6473E2*
+  ID_OUI_FROM_DATABASE=Arbiter Systems, Inc.
+ 
+@@ -56389,6 +56455,9 @@ OUI:68967B*
+ OUI:68974B*
+  ID_OUI_FROM_DATABASE=Shenzhen Costar Electronics Co. Ltd.
+ 
++OUI:6897E8*
++ ID_OUI_FROM_DATABASE=Society of Motion Picture &amp; Television Engineers
++
+ OUI:689C5E*
+  ID_OUI_FROM_DATABASE=AcSiP Technology Corp.
+ 
+@@ -56752,6 +56821,9 @@ OUI:704AAE*
+ OUI:704AE4*
+  ID_OUI_FROM_DATABASE=Rinstrum Pty Ltd
+ 
++OUI:7052C5*
++ ID_OUI_FROM_DATABASE=Avaya, Inc.
++
+ OUI:7054D2*
+  ID_OUI_FROM_DATABASE=PEGATRON CORPORATION
+ 
+@@ -57541,6 +57613,9 @@ OUI:7CA61D*
+ OUI:7CACB2*
+  ID_OUI_FROM_DATABASE=Bosch Software Innovations GmbH
+ 
++OUI:7CAD74*
++ ID_OUI_FROM_DATABASE=Cisco
++
+ OUI:7CB03E*
+  ID_OUI_FROM_DATABASE=OSRAM AG
+ 
+@@ -58111,6 +58186,9 @@ OUI:885C4F*
+ OUI:88615A*
+  ID_OUI_FROM_DATABASE=Siano Mobile Silicon Ltd.
+ 
++OUI:88685C*
++ ID_OUI_FROM_DATABASE=Shenzhen ChuangDao & Perpetual Eternal Technology Co.,Ltd
++
+ OUI:886B76*
+  ID_OUI_FROM_DATABASE=CHINA HOPEFUL GROUP HOPEFUL ELECTRIC CO.,LTD
+ 
+@@ -58567,6 +58645,9 @@ OUI:906EBB*
+ OUI:907025*
+  ID_OUI_FROM_DATABASE=Garea Microsys Co.,Ltd.
+ 
++OUI:907AF1*
++ ID_OUI_FROM_DATABASE=SNUPI Technologies
++
+ OUI:907F61*
+  ID_OUI_FROM_DATABASE=Chicony Electronics Co., Ltd.
+ 
+@@ -59803,6 +59884,9 @@ OUI:A85BB0*
+ OUI:A85BF3*
+  ID_OUI_FROM_DATABASE=Audivo GmbH
+ 
++OUI:A861AA*
++ ID_OUI_FROM_DATABASE=Cloudview Limited
++
+ OUI:A862A2*
+  ID_OUI_FROM_DATABASE=JIWUMEDIA CO., LTD.
+ 
+@@ -59995,6 +60079,9 @@ OUI:AC3FA4*
+ OUI:AC40EA*
+  ID_OUI_FROM_DATABASE=C&T Solution Inc.
+ 
++OUI:AC4122*
++ ID_OUI_FROM_DATABASE=Eclipse Electronic Systems Inc.
++
+ OUI:AC44F2*
+  ID_OUI_FROM_DATABASE=Revolabs Inc
+ 
+@@ -60607,6 +60694,9 @@ OUI:B4F323*
+ OUI:B4FC75*
+  ID_OUI_FROM_DATABASE=SEMA Electronics(HK) CO.,LTD
+ 
++OUI:B4FE8C*
++ ID_OUI_FROM_DATABASE=Centro Sicurezza Italia SpA
++
+ OUI:B80305*
+  ID_OUI_FROM_DATABASE=Intel Corporate
+ 
+@@ -60712,6 +60802,9 @@ OUI:B8763F*
+ OUI:B877C3*
+  ID_OUI_FROM_DATABASE=Decagon Devices, Inc.
+ 
++OUI:B8782E*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:B8797E*
+  ID_OUI_FROM_DATABASE=Secure Meters (UK) Limited
+ 
+@@ -61594,6 +61687,9 @@ OUI:C88B47*
+ OUI:C8903E*
+  ID_OUI_FROM_DATABASE=Pakton Technologies
+ 
++OUI:C89346*
++ ID_OUI_FROM_DATABASE=MXCHIP Company Limited
++
+ OUI:C89383*
+  ID_OUI_FROM_DATABASE=Embedded Automation, Inc.
+ 
+@@ -62332,6 +62428,9 @@ OUI:D4A02A*
+ OUI:D4A425*
+  ID_OUI_FROM_DATABASE=SMAX Technology Co., Ltd.
+ 
++OUI:D4A499*
++ ID_OUI_FROM_DATABASE=InView Technology Corporation
++
+ OUI:D4A928*
+  ID_OUI_FROM_DATABASE=GreenWave Reality Inc
+ 
+@@ -62443,6 +62542,9 @@ OUI:D81BFE*
+ OUI:D81C14*
+  ID_OUI_FROM_DATABASE=Compacta International, Ltd.
+ 
++OUI:D81EDE*
++ ID_OUI_FROM_DATABASE=B&W Group Ltd
++
+ OUI:D824BD*
+  ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
+ 
+@@ -62452,6 +62554,9 @@ OUI:D826B9*
+ OUI:D828C9*
+  ID_OUI_FROM_DATABASE=General Electric Consumer and Industrial
+ 
++OUI:D82916*
++ ID_OUI_FROM_DATABASE=Ascent Communication Technology
++
+ OUI:D82986*
+  ID_OUI_FROM_DATABASE=Best Wish Technology LTD
+ 
+@@ -63022,6 +63127,9 @@ OUI:E0E8E8*
+ OUI:E0ED1A*
+  ID_OUI_FROM_DATABASE=vastriver Technology Co., Ltd
+ 
++OUI:E0EDC7*
++ ID_OUI_FROM_DATABASE=Shenzhen Friendcom Technology Development Co., Ltd
++
+ OUI:E0EE1B*
+  ID_OUI_FROM_DATABASE=Panasonic Automotive Systems Company of America
+ 
+@@ -63868,6 +63976,9 @@ OUI:F0EEBB*
+ OUI:F0F002*
+  ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+ 
++OUI:F0F260*
++ ID_OUI_FROM_DATABASE=Mobitec AB
++
+ OUI:F0F644*
+  ID_OUI_FROM_DATABASE=Whitesky Science & Technology Co.,Ltd.
+ 
+@@ -63961,6 +64072,9 @@ OUI:F4559C*
+ OUI:F455E0*
+  ID_OUI_FROM_DATABASE=Niceway CNC Technology Co.,Ltd.Hunan Province
+ 
++OUI:F45842*
++ ID_OUI_FROM_DATABASE=Boxx TV Ltd
++
+ OUI:F45FD4*
+  ID_OUI_FROM_DATABASE=Cisco SPVTG
+ 
+@@ -64021,6 +64135,9 @@ OUI:F4ACC1*
+ OUI:F4B164*
+  ID_OUI_FROM_DATABASE=Lightning Telecommunications Technology Co. Ltd
+ 
++OUI:F4B381*
++ ID_OUI_FROM_DATABASE=WindowMaster A/S
++
+ OUI:F4B549*
+  ID_OUI_FROM_DATABASE=Yeastar Technology Co., Ltd.
+ 
+diff --git a/hwdb/20-pci-vendor-product.hwdb b/hwdb/20-pci-vendor-product.hwdb
+index f3fbbb7..7049d3a 100644
+--- a/hwdb/20-pci-vendor-product.hwdb
++++ b/hwdb/20-pci-vendor-product.hwdb
+@@ -1688,6 +1688,9 @@ pci:v00001002d00003152*
+ pci:v00001002d00003154*
+  ID_PRODUCT_FROM_DATABASE=M24GL [Mobility FireGL V3200]
+ 
++pci:v00001002d00003155*
++ ID_PRODUCT_FROM_DATABASE=RV380 [FireMV 2400]
++
+ pci:v00001002d00003171*
+  ID_PRODUCT_FROM_DATABASE=M24 [FireMV 2400] (Secondary)
+ 
+@@ -4400,6 +4403,9 @@ pci:v00001002d00006718*
+ pci:v00001002d00006719*
+  ID_PRODUCT_FROM_DATABASE=Cayman PRO [Radeon HD 6950]
+ 
++pci:v00001002d0000671C*
++ ID_PRODUCT_FROM_DATABASE=Antilles [Radeon HD 6990]
++
+ pci:v00001002d0000671D*
+  ID_PRODUCT_FROM_DATABASE=Antilles [AMD Radeon HD 6990]
+ 
+@@ -4409,6 +4415,15 @@ pci:v00001002d0000671F*
+ pci:v00001002d00006720*
+  ID_PRODUCT_FROM_DATABASE=Blackcomb [Radeon HD 6900M series]
+ 
++pci:v00001002d00006721*
++ ID_PRODUCT_FROM_DATABASE=Blackcomb [Mobility Radeon HD 6000 series]
++
++pci:v00001002d00006724*
++ ID_PRODUCT_FROM_DATABASE=Blackcomb [Mobility Radeon HD 6000 series]
++
++pci:v00001002d00006725*
++ ID_PRODUCT_FROM_DATABASE=Blackcomb [Mobility Radeon HD 6000 series]
++
+ pci:v00001002d00006738*
+  ID_PRODUCT_FROM_DATABASE=Barts XT [Radeon HD 6800 Series]
+ 
+@@ -4439,6 +4454,9 @@ pci:v00001002d00006742*
+ pci:v00001002d00006743*
+  ID_PRODUCT_FROM_DATABASE=Whistler [Radeon E6760]
+ 
++pci:v00001002d00006744*
++ ID_PRODUCT_FROM_DATABASE=Whistler [ATI Mobility Radeon HD 6000 series]
++
+ pci:v00001002d00006749*
+  ID_PRODUCT_FROM_DATABASE=Turks [FirePro V4900]
+ 
+@@ -4472,6 +4490,12 @@ pci:v00001002d00006761*
+ pci:v00001002d00006763*
+  ID_PRODUCT_FROM_DATABASE=Seymour [Radeon E6460]
+ 
++pci:v00001002d00006764*
++ ID_PRODUCT_FROM_DATABASE=Seymour [Mobility Radeon HD 6000 series]
++
++pci:v00001002d00006765*
++ ID_PRODUCT_FROM_DATABASE=Seymour [Mobility Radeon HD 6000 series]
++
+ pci:v00001002d00006770*
+  ID_PRODUCT_FROM_DATABASE=Caicos [Radeon HD 6400 Series]
+ 
+@@ -4499,6 +4523,9 @@ pci:v00001002d00006799*
+ pci:v00001002d0000679A*
+  ID_PRODUCT_FROM_DATABASE=Tahiti PRO [Radeon HD 7950]
+ 
++pci:v00001002d0000679B*
++ ID_PRODUCT_FROM_DATABASE=Tahiti [Radeon HD 7900 Series]
++
+ pci:v00001002d0000679E*
+  ID_PRODUCT_FROM_DATABASE=Tahiti LE [Radeon HD 7800 Series]
+ 
+@@ -4523,15 +4550,33 @@ pci:v00001002d00006821*
+ pci:v00001002d00006823*
+  ID_PRODUCT_FROM_DATABASE=Radeon HD 8800M Series
+ 
++pci:v00001002d00006824*
++ ID_PRODUCT_FROM_DATABASE=Chelsea [Radeon HD 7700M Series]
++
+ pci:v00001002d00006825*
+  ID_PRODUCT_FROM_DATABASE=Cape Verde [Radeon HD 7800M Series]
+ 
++pci:v00001002d00006826*
++ ID_PRODUCT_FROM_DATABASE=Chelsea [Radeon HD 7700M Series]
++
++pci:v00001002d00006827*
++ ID_PRODUCT_FROM_DATABASE=Cape Verde [Radeon HD 7800M Series]
++
+ pci:v00001002d0000682B*
+  ID_PRODUCT_FROM_DATABASE=Radeon HD 8800M Series
+ 
+ pci:v00001002d0000682F*
+  ID_PRODUCT_FROM_DATABASE=Cape Verde [Radeon HD 7700M Series]
+ 
++pci:v00001002d00006830*
++ ID_PRODUCT_FROM_DATABASE=Cape Verde [Radeon HD 7800M Series]
++
++pci:v00001002d00006831*
++ ID_PRODUCT_FROM_DATABASE=Cape Verde [AMD Radeon HD 7700M Series]
++
++pci:v00001002d00006837*
++ ID_PRODUCT_FROM_DATABASE=Cape Verde LE [Radeon HD 7700 Series]
++
+ pci:v00001002d0000683B*
+  ID_PRODUCT_FROM_DATABASE=Cape Verde [Radeon HD 7700 Series]
+ 
+@@ -4553,6 +4598,9 @@ pci:v00001002d00006842*
+ pci:v00001002d00006843*
+  ID_PRODUCT_FROM_DATABASE=Thames [Radeon HD 7670M]
+ 
++pci:v00001002d00006849*
++ ID_PRODUCT_FROM_DATABASE=Lombok [AMD Radeon HD 7400 Series]
++
+ pci:v00001002d00006850*
+  ID_PRODUCT_FROM_DATABASE=Lombok GL AIO [Radeon HD 7570]
+ 
+@@ -4592,6 +4640,9 @@ pci:v00001002d0000689B*
+ pci:v00001002d0000689C*
+  ID_PRODUCT_FROM_DATABASE=Hemlock [Radeon HD 5900 Series]
+ 
++pci:v00001002d0000689D*
++ ID_PRODUCT_FROM_DATABASE=Hemlock [ATI Radeon HD 5900 Series]
++
+ pci:v00001002d0000689E*
+  ID_PRODUCT_FROM_DATABASE=Cypress LE [Radeon HD 5800 Series]
+ 
+@@ -4652,6 +4703,9 @@ pci:v00001002d000068C7*
+ pci:v00001002d000068C8*
+  ID_PRODUCT_FROM_DATABASE=FirePro V4800
+ 
++pci:v00001002d000068C9*
++ ID_PRODUCT_FROM_DATABASE=Redwood [FirePro 3800 (FireGL)]
++
+ pci:v00001002d000068D8*
+  ID_PRODUCT_FROM_DATABASE=Redwood [Radeon HD 5670]
+ 
+@@ -4682,6 +4736,9 @@ pci:v00001002d000068F1*
+ pci:v00001002d000068F2*
+  ID_PRODUCT_FROM_DATABASE=Cedar [FirePro 2270]
+ 
++pci:v00001002d000068F8*
++ ID_PRODUCT_FROM_DATABASE=Cedar [Radeon HD 7300 Series]
++
+ pci:v00001002d000068F9*
+  ID_PRODUCT_FROM_DATABASE=Cedar PRO [Radeon HD 5450/6350]
+ 
+@@ -4940,6 +4997,9 @@ pci:v00001002d000071C6*
+ pci:v00001002d000071C7*
+  ID_PRODUCT_FROM_DATABASE=RV535 [Radeon X1650 Series]
+ 
++pci:v00001002d000071C7sv00001787sd00003000*
++ ID_PRODUCT_FROM_DATABASE=PowerColor X1650 PRO AGP
++
+ pci:v00001002d000071CE*
+  ID_PRODUCT_FROM_DATABASE=RV530LE [Radeon X1600]
+ 
+@@ -4973,6 +5033,9 @@ pci:v00001002d000071E6*
+ pci:v00001002d000071E7*
+  ID_PRODUCT_FROM_DATABASE=RV535 [Radeon X1650 Series]
+ 
++pci:v00001002d000071E7sv00001787sd00003001*
++ ID_PRODUCT_FROM_DATABASE=PowerColor X1650 PRO AGP
++
+ pci:v00001002d000071F2*
+  ID_PRODUCT_FROM_DATABASE=RV530GL [FireGL V3400 (Secondary)]
+ 
+@@ -5163,7 +5226,7 @@ pci:v00001002d00007942*
+  ID_PRODUCT_FROM_DATABASE=RS600 [Radeon Xpress 1250]
+ 
+ pci:v00001002d0000796E*
+- ID_PRODUCT_FROM_DATABASE=Radeon 2100
++ ID_PRODUCT_FROM_DATABASE=RS740 [Radeon 2100]
+ 
+ pci:v00001002d00007C37*
+  ID_PRODUCT_FROM_DATABASE=RV350 AQ [Radeon 9600 SE]
+@@ -5177,9 +5240,18 @@ pci:v00001002d00009400sv00001002sd00003000*
+ pci:v00001002d00009400sv00001002sd00003142*
+  ID_PRODUCT_FROM_DATABASE=HIS Radeon HD 2900XT 512MB GDDR3 VIVO PCIe
+ 
++pci:v00001002d00009401*
++ ID_PRODUCT_FROM_DATABASE=R600 [Radeon HD 2900 XT]
++
++pci:v00001002d00009402*
++ ID_PRODUCT_FROM_DATABASE=R600 [Radeon HD 2900 XT]
++
+ pci:v00001002d00009403*
+  ID_PRODUCT_FROM_DATABASE=R600 [Radeon HD 2900 PRO]
+ 
++pci:v00001002d00009405*
++ ID_PRODUCT_FROM_DATABASE=R600 [Radeon HD 2900 GT]
++
+ pci:v00001002d0000940A*
+  ID_PRODUCT_FROM_DATABASE=R600GL [Fire GL V8650]
+ 
+@@ -5207,9 +5279,18 @@ pci:v00001002d00009442sv0000174Bsd0000E810*
+ pci:v00001002d00009443*
+  ID_PRODUCT_FROM_DATABASE=R700 [Radeon HD 4850]
+ 
++pci:v00001002d00009444*
++ ID_PRODUCT_FROM_DATABASE=RV770 [FirePro V8750 (FireGL)]
++
++pci:v00001002d00009446*
++ ID_PRODUCT_FROM_DATABASE=RV770 [FirePro V7760 (FireGL)]
++
+ pci:v00001002d0000944A*
+  ID_PRODUCT_FROM_DATABASE=M98L [Mobility Radeon HD 4850]
+ 
++pci:v00001002d0000944B*
++ ID_PRODUCT_FROM_DATABASE=RV770 [Mobility Radeon HD 4850 X2]
++
+ pci:v00001002d0000944C*
+  ID_PRODUCT_FROM_DATABASE=RV770 LE [Radeon HD 4800 Series]
+ 
+@@ -5222,6 +5303,9 @@ pci:v00001002d00009450*
+ pci:v00001002d00009452*
+  ID_PRODUCT_FROM_DATABASE=RV770 [FireStream 9250]
+ 
++pci:v00001002d00009456*
++ ID_PRODUCT_FROM_DATABASE=RV770 [FirePro 3D V8700]
++
+ pci:v00001002d0000945A*
+  ID_PRODUCT_FROM_DATABASE=M98 XT [Mobility Radeon HD 4870]
+ 
+@@ -5231,6 +5315,9 @@ pci:v00001002d00009460*
+ pci:v00001002d00009462*
+  ID_PRODUCT_FROM_DATABASE=RV790LE [Radeon HD 4800 Series]
+ 
++pci:v00001002d0000946A*
++ ID_PRODUCT_FROM_DATABASE=RV770 [FirePro M7750]
++
+ pci:v00001002d00009480*
+  ID_PRODUCT_FROM_DATABASE=M96 [Mobility Radeon HD 4650]
+ 
+@@ -5288,6 +5375,9 @@ pci:v00001002d000094B3*
+ pci:v00001002d000094B4*
+  ID_PRODUCT_FROM_DATABASE=RV740 LE [ATI Radeon HD 4700 Series]
+ 
++pci:v00001002d000094B5*
++ ID_PRODUCT_FROM_DATABASE=RV740 [Radeon HD 4770]
++
+ pci:v00001002d000094C1*
+  ID_PRODUCT_FROM_DATABASE=RV610 [Radeon HD 2400 XT]
+ 
+@@ -5315,6 +5405,12 @@ pci:v00001002d000094C3sv000018BCsd00003550*
+ pci:v00001002d000094C4*
+  ID_PRODUCT_FROM_DATABASE=RV610 LE AGP [Radeon HD 2400 PRO AGP]
+ 
++pci:v00001002d000094C5*
++ ID_PRODUCT_FROM_DATABASE=RV610 [Radeon HD 2400 LE]
++
++pci:v00001002d000094C7*
++ ID_PRODUCT_FROM_DATABASE=RV610 [Radeon HD 2350]
++
+ pci:v00001002d000094C8*
+  ID_PRODUCT_FROM_DATABASE=Radeon HD 2400 XT
+ 
+@@ -5342,12 +5438,18 @@ pci:v00001002d00009504*
+ pci:v00001002d00009505*
+  ID_PRODUCT_FROM_DATABASE=RV670PRO [Radeon HD 3850]
+ 
++pci:v00001002d00009506*
++ ID_PRODUCT_FROM_DATABASE=RV670 [Mobility Radeon HD 3850 X2]
++
+ pci:v00001002d00009507*
+  ID_PRODUCT_FROM_DATABASE=RV670 [Radeon HD 3850]
+ 
+ pci:v00001002d00009508*
+  ID_PRODUCT_FROM_DATABASE=M88 XT Mobility Radeon HD 3870]
+ 
++pci:v00001002d00009509*
++ ID_PRODUCT_FROM_DATABASE=RV670 [Mobility Radeon HD 3870]
++
+ pci:v00001002d0000950F*
+  ID_PRODUCT_FROM_DATABASE=R680 [Radeon HD 3870 x2]
+ 
+@@ -5411,6 +5513,9 @@ pci:v00001002d00009588sv00001458sd0000216C*
+ pci:v00001002d00009589*
+  ID_PRODUCT_FROM_DATABASE=RV630 [Radeon HD 2600 Series]
+ 
++pci:v00001002d0000958B*
++ ID_PRODUCT_FROM_DATABASE=RV630 [Mobility Radeon HD 2600 XT]
++
+ pci:v00001002d0000958C*
+  ID_PRODUCT_FROM_DATABASE=RV630GL [FireGL v5600]
+ 
+@@ -5435,6 +5540,9 @@ pci:v00001002d00009596*
+ pci:v00001002d00009596sv00001043sd00000028*
+  ID_PRODUCT_FROM_DATABASE=EAH3650 SILENT/HTDI/512M/A
+ 
++pci:v00001002d00009597*
++ ID_PRODUCT_FROM_DATABASE=RV635 [Radeon HD 2600 Series]
++
+ pci:v00001002d00009598*
+  ID_PRODUCT_FROM_DATABASE=RV630 [Radeon HD 3600 Series]
+ 
+@@ -5579,6 +5687,9 @@ pci:v00001002d00009901*
+ pci:v00001002d00009902*
+  ID_PRODUCT_FROM_DATABASE=Trinity HDMI Audio Controller
+ 
++pci:v00001002d00009903*
++ ID_PRODUCT_FROM_DATABASE=Trinity [Radeon HD 7640G]
++
+ pci:v00001002d00009904*
+  ID_PRODUCT_FROM_DATABASE=Trinity [Radeon HD 7560D]
+ 
+@@ -15642,7 +15753,7 @@ pci:v000010B7d00007646*
+  ID_PRODUCT_FROM_DATABASE=3cSOHO100-TX Hurricane
+ 
+ pci:v000010B7d00007770*
+- ID_PRODUCT_FROM_DATABASE=3CRWE777 PCI(PLX) Wireless Adaptor [Airconnect]
++ ID_PRODUCT_FROM_DATABASE=3CRWE777 PCI Wireless Adapter [Airconnect]
+ 
+ pci:v000010B7d00007940*
+  ID_PRODUCT_FROM_DATABASE=3c803 FDDILink UTP Controller
+@@ -16889,6 +17000,9 @@ pci:v000010DEd00000029sv00001102sd0000102F*
+ pci:v000010DEd00000029sv000014AFsd00005820*
+  ID_PRODUCT_FROM_DATABASE=Maxi Gamer Xentor 32
+ 
++pci:v000010DEd00000029sv00004843sd00004F34*
++ ID_PRODUCT_FROM_DATABASE=Dynamite
++
+ pci:v000010DEd0000002A*
+  ID_PRODUCT_FROM_DATABASE=NV5 [Riva TNT2]
+ 
+@@ -17853,7 +17967,7 @@ pci:v000010DEd00000101sv0000107Dsd00002822*
+  ID_PRODUCT_FROM_DATABASE=WinFast GeForce 256
+ 
+ pci:v000010DEd00000101sv00001102sd0000102E*
+- ID_PRODUCT_FROM_DATABASE=CT6971 GeForce 256 DDR
++ ID_PRODUCT_FROM_DATABASE=CT6970/CT6971
+ 
+ pci:v000010DEd00000101sv000014AFsd00005021*
+  ID_PRODUCT_FROM_DATABASE=3D Prophet DDR-DVI
+@@ -18263,6 +18377,12 @@ pci:v000010DEd000001D0*
+ pci:v000010DEd000001D1*
+  ID_PRODUCT_FROM_DATABASE=G72 [GeForce 7300 LE]
+ 
++pci:v000010DEd000001D1sv0000107Dsd00005EFA*
++ ID_PRODUCT_FROM_DATABASE=WinFast PX7300LE-TD128
++
++pci:v000010DEd000001D1sv0000107Dsd00005EFB*
++ ID_PRODUCT_FROM_DATABASE=WinFast PX7300LE-TD256
++
+ pci:v000010DEd000001D1sv00001462sd00000345*
+  ID_PRODUCT_FROM_DATABASE=7300LE PCI Express Graphics Adapter
+ 
+@@ -21741,7 +21861,7 @@ pci:v000010DEd00000FD2*
+  ID_PRODUCT_FROM_DATABASE=GK107 [GeForce GT 640M]
+ 
+ pci:v000010DEd00000FF2*
+- ID_PRODUCT_FROM_DATABASE=GK107 [VGX K1]
++ ID_PRODUCT_FROM_DATABASE=GK107 [GRID K1]
+ 
+ pci:v000010DEd00000FFA*
+  ID_PRODUCT_FROM_DATABASE=GK107 [Quadro K600]
+@@ -21873,7 +21993,7 @@ pci:v000010DEd000011BE*
+  ID_PRODUCT_FROM_DATABASE=GK104 [Quadro K3000M]
+ 
+ pci:v000010DEd000011BF*
+- ID_PRODUCT_FROM_DATABASE=GK104GL [VGX K2]
++ ID_PRODUCT_FROM_DATABASE=GK104GL [GRID K2]
+ 
+ pci:v000010DEd000011FA*
+  ID_PRODUCT_FROM_DATABASE=GK104 [Quadro K4000]
+@@ -45938,6 +46058,12 @@ pci:v0000270F*
+ pci:v00002711*
+  ID_VENDOR_FROM_DATABASE=AVID Technology Inc.
+ 
++pci:v00002955*
++ ID_VENDOR_FROM_DATABASE=Connectix Virtual PC
++
++pci:v00002955d00006E61*
++ ID_PRODUCT_FROM_DATABASE=OHCI USB 1.1 controller
++
+ pci:v000029B4*
+  ID_VENDOR_FROM_DATABASE=82q35 Express MEI Controller
+ 
diff --git a/0055-service-really-stop-watchdog-timer-when-stopping.patch b/0055-service-really-stop-watchdog-timer-when-stopping.patch
new file mode 100644
index 0000000..1f55fee
--- /dev/null
+++ b/0055-service-really-stop-watchdog-timer-when-stopping.patch
@@ -0,0 +1,27 @@
+From d774e05381334b64bf2d95f8cdf4f3d9cd7b7949 Mon Sep 17 00:00:00 2001
+From: Michael Olbrich <m.olbrich at pengutronix.de>
+Date: Wed, 23 Jan 2013 14:12:15 +0100
+Subject: [PATCH] service: really stop watchdog timer when stopping
+
+For services without ExecStop= the state SERVICE_STOP is never entered. as
+a result the watchdog timer is not stopped and the service is restarted (if
+it is configuered to restart).
+Stopping the watchdog timer for SERVICE_STOP_SIGTERM as well fixes this.
+(cherry picked from commit 6d594baa3fa3a361efc2a4c1da3557fc4eba960d)
+---
+ 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 d6a0ffe..8eefd2d 100644
+--- a/src/core/service.c
++++ b/src/core/service.c
+@@ -1565,7 +1565,7 @@ static void service_set_state(Service *s, ServiceState state) {
+                 service_connection_unref(s);
+         }
+ 
+-        if (state == SERVICE_STOP)
++        if (state == SERVICE_STOP || state == SERVICE_STOP_SIGTERM)
+                 service_stop_watchdog(s);
+ 
+         /* For the inactive states unit_notify() will trim the cgroup,
diff --git a/0056-service-make-sure-the-watchdog-timer-is-not-restarte.patch b/0056-service-make-sure-the-watchdog-timer-is-not-restarte.patch
new file mode 100644
index 0000000..ad67f38
--- /dev/null
+++ b/0056-service-make-sure-the-watchdog-timer-is-not-restarte.patch
@@ -0,0 +1,31 @@
+From 5b2e87901b0220f8c32f3eb0de16a61de5be889f Mon Sep 17 00:00:00 2001
+From: Michael Olbrich <m.olbrich at pengutronix.de>
+Date: Wed, 23 Jan 2013 14:12:16 +0100
+Subject: [PATCH] service: make sure the watchdog timer is not restarted while
+ stopping
+
+A watchdog notification may be handled after the watchdog timer was stopped
+while stopping the service. As a result the timer is restarted and the
+service may be restarted as well.
+The watchdog timestamp is initially set during startup in
+service_enter_start_post() and cleared when the timer is stopped. Therefore
+it can be used as an indication if the timer should be reset.
+(cherry picked from commit 90527fbb2c48ffda5c6d8f232f8993a90b2632a4)
+---
+ src/core/service.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/src/core/service.c b/src/core/service.c
+index 8eefd2d..0218e76 100644
+--- a/src/core/service.c
++++ b/src/core/service.c
+@@ -3415,7 +3415,8 @@ static void service_notify_message(Unit *u, pid_t pid, char **tags) {
+         if (strv_find(tags, "WATCHDOG=1")) {
+                 log_debug_unit(u->id,
+                                "%s: got WATCHDOG=1", u->id);
+-                service_reset_watchdog(s);
++                if (dual_timestamp_is_set(&s->watchdog_timestamp))
++                        service_reset_watchdog(s);
+         }
+ 
+         /* Notify clients about changed status or main pid */
diff --git a/0057-core-Set-source-for-mountinfo-.mount-units.patch b/0057-core-Set-source-for-mountinfo-.mount-units.patch
new file mode 100644
index 0000000..217eff2
--- /dev/null
+++ b/0057-core-Set-source-for-mountinfo-.mount-units.patch
@@ -0,0 +1,48 @@
+From 23aabcca1dc3f166d724810ff834c34517595a65 Mon Sep 17 00:00:00 2001
+From: Umut Tezduyar <umut at tezduyar.com>
+Date: Wed, 23 Jan 2013 09:23:49 +0100
+Subject: [PATCH] core: Set source for mountinfo .mount units (cherry picked
+ from commit aa7cb2098302d45c8768ca08bf1e433a19aa46b9)
+
+---
+ src/core/mount.c | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+diff --git a/src/core/mount.c b/src/core/mount.c
+index 5d2b010..4f3a6e4 100644
+--- a/src/core/mount.c
++++ b/src/core/mount.c
+@@ -1472,7 +1472,7 @@ static int mount_add_one(
+         int r;
+         Unit *u;
+         bool delete;
+-        char *e, *w = NULL, *o = NULL, *f = NULL;
++        char *e, *w = NULL, *o = NULL, *s = NULL, *f = NULL;
+         MountParameters *p;
+         bool load_extras = false;
+ 
+@@ -1545,6 +1545,7 @@ static int mount_add_one(
+ 
+         if (!(w = strdup(what)) ||
+             !(o = strdup(options)) ||
++            !(s = strdup("/proc/self/mountinfo")) ||
+             !(f = strdup(fstype))) {
+                 r = -ENOMEM;
+                 goto fail;
+@@ -1558,6 +1559,8 @@ static int mount_add_one(
+         }
+ 
+         MOUNT(u)->from_proc_self_mountinfo = true;
++        free(u->source_path);
++        u->source_path = s;
+ 
+         free(p->what);
+         p->what = w;
+@@ -1583,6 +1586,7 @@ static int mount_add_one(
+ fail:
+         free(w);
+         free(o);
++        free(s);
+         free(f);
+ 
+         if (delete && u)
diff --git a/0058-man-systemd.exec-explicit-Environment-assignment.patch b/0058-man-systemd.exec-explicit-Environment-assignment.patch
new file mode 100644
index 0000000..c1a71ad
--- /dev/null
+++ b/0058-man-systemd.exec-explicit-Environment-assignment.patch
@@ -0,0 +1,54 @@
+From 78fe0f6400c6b905e82f04c46c445899c6e577ee Mon Sep 17 00:00:00 2001
+From: Frederic Crozat <fcrozat at suse.com>
+Date: Thu, 24 Jan 2013 18:06:00 +0100
+Subject: [PATCH] man: systemd.exec - explicit Environment assignment
+
+Hi all,
+
+while working on another bug, I discovered the "strange" way systemd is
+parsing Environment= in .service and thought it was worth documenting
+(because I don't expect people to find this syntax by themselves unless
+they read the parsing code ;)
+
+Be more verbose about using space in Environment field and not
+using value of other variables
+
+Fixes https://bugzilla.redhat.com/show_bug.cgi?id=840260
+
+[zj: expand and reformat the example a bit]
+(cherry picked from commit 0ae9c92a933869d5695396d067aa555dacbbba08)
+---
+ man/systemd.exec.xml | 19 +++++++++++++++++--
+ 1 file changed, 17 insertions(+), 2 deletions(-)
+
+diff --git a/man/systemd.exec.xml b/man/systemd.exec.xml
+index 37d2dd7..d196c04 100644
+--- a/man/systemd.exec.xml
++++ b/man/systemd.exec.xml
+@@ -286,9 +286,24 @@
+                                 empty string is assigned to this
+                                 option the list of environment
+                                 variables is reset, all prior
+-                                assignments have no effect. See
++                                assignments have no effect.
++                                Variable expansion is not performed
++                                inside the strings, and $ has no special
++                                meaning.
++                                If you need to assign a value containing spaces
++                                to a variable, use double quotes (")
++                                for the assignment.</para>
++
++                                <para>Example:
++                                <programlisting>Environment="VAR1=word1 word2" VAR2=word3 "VAR3=word 5 6"</programlisting>
++                                gives three variables <literal>VAR1</literal>,
++                                <literal>VAR2</literal>, <literal>VAR3</literal>.
++                                </para>
++
++                                <para>
++                                See
+                                 <citerefentry><refentrytitle>environ</refentrytitle><manvolnum>7</manvolnum></citerefentry>
+-                                for details.</para></listitem>
++                                for details about environment variables.</para></listitem>
+                         </varlistentry>
+                         <varlistentry>
+                                 <term><varname>EnvironmentFile=</varname></term>
diff --git a/0059-man-mention-proc-self-mountinfo-in-systemd.mount-5.patch b/0059-man-mention-proc-self-mountinfo-in-systemd.mount-5.patch
new file mode 100644
index 0000000..aca2f4b
--- /dev/null
+++ b/0059-man-mention-proc-self-mountinfo-in-systemd.mount-5.patch
@@ -0,0 +1,34 @@
+From 89f465f1ebb31d8d710b34ce5c8f9cb4e0314081 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Thu, 24 Jan 2013 19:59:33 -0500
+Subject: [PATCH] man: mention /proc/self/mountinfo in systemd.mount(5) (cherry
+ picked from commit e22ac43bc057a305d748221c3b2c935084d6f1b5)
+
+---
+ man/systemd.mount.xml | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+diff --git a/man/systemd.mount.xml b/man/systemd.mount.xml
+index 749d426..0845fa0 100644
+--- a/man/systemd.mount.xml
++++ b/man/systemd.mount.xml
+@@ -105,7 +105,10 @@
+                 <para>Mount points created at runtime (independently of
+                 unit files or <filename>/etc/fstab</filename>) will be
+                 monitored by systemd and appear like any other mount
+-                unit in systemd.</para>
++                unit in systemd.
++                See <filename>/proc/self/mountinfo</filename> description
++                in <citerefentry><refentrytitle>proc</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
++                </para>
+ 
+                 <para>Some file systems have special semantics as API
+                 file systems for kernel-to-userspace and
+@@ -297,6 +300,7 @@
+                           <citerefentry><refentrytitle>systemd.kill</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>,
+                           <citerefentry><refentrytitle>mount</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
+                           <citerefentry><refentrytitle>systemd-fstab-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry>
+                   </para>
diff --git a/0060-selinux-access-Delete-debugging-message-logged-as-an.patch b/0060-selinux-access-Delete-debugging-message-logged-as-an.patch
new file mode 100644
index 0000000..da984a5
--- /dev/null
+++ b/0060-selinux-access-Delete-debugging-message-logged-as-an.patch
@@ -0,0 +1,24 @@
+From 17d961d7b14dc322507f8b0d1fc67d0f658ccdf5 Mon Sep 17 00:00:00 2001
+From: Colin Walters <walters at verbum.org>
+Date: Thu, 24 Jan 2013 17:47:45 -0500
+Subject: [PATCH] selinux-access: Delete debugging message logged as an error
+
+I don't see why this should be logged at all, so let's delete it.
+(cherry picked from commit 6fd55349ab1c392b01d7979f115f8be2cd89d76a)
+---
+ src/core/selinux-access.c | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/src/core/selinux-access.c b/src/core/selinux-access.c
+index b933698..41f824a 100644
+--- a/src/core/selinux-access.c
++++ b/src/core/selinux-access.c
+@@ -308,8 +308,6 @@ static int get_calling_context(
+         */
+         sender = dbus_message_get_sender(message);
+         if (sender) {
+-                log_error("SELinux Got Sender %s", sender);
+-
+                 r = bus_get_selinux_security_context(connection, sender, scon, error);
+                 if (r >= 0)
+                         return r;
diff --git a/0061-selinux-we-don-t-need-that-many-debug-messages-by-de.patch b/0061-selinux-we-don-t-need-that-many-debug-messages-by-de.patch
new file mode 100644
index 0000000..a348982
--- /dev/null
+++ b/0061-selinux-we-don-t-need-that-many-debug-messages-by-de.patch
@@ -0,0 +1,40 @@
+From b8b2bd1f1d0e3f2f84ae2e7193e52ec867c70d02 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Fri, 25 Jan 2013 03:05:08 +0100
+Subject: [PATCH] selinux: we don't need that many debug messages by default
+ (cherry picked from commit 035dba6f8261af9f714ac3901d695ff39d4a896b)
+
+---
+ src/core/selinux-access.c | 5 -----
+ 1 file changed, 5 deletions(-)
+
+diff --git a/src/core/selinux-access.c b/src/core/selinux-access.c
+index 41f824a..be728d5 100644
+--- a/src/core/selinux-access.c
++++ b/src/core/selinux-access.c
+@@ -104,8 +104,6 @@ static int bus_get_selinux_security_context(
+ 
+         *scon = b;
+ 
+-        log_debug("GetConnectionSELinuxSecurityContext %s (pid %ld)", *scon, (long) bus_get_unix_process_id(connection, name, error));
+-
+         return 0;
+ }
+ 
+@@ -316,7 +314,6 @@ static int get_calling_context(
+                 return r;
+         }
+ 
+-        log_debug("SELinux No Sender");
+         if (!dbus_connection_get_unix_fd(connection, &fd)) {
+                 log_error("bus_connection_get_unix_fd failed %m");
+                 return -EINVAL;
+@@ -361,8 +358,6 @@ int selinux_access_check(
+         if (r < 0)
+                 return r;
+ 
+-        log_debug("SELinux access check for path=%s permission=%s", strna(path), permission);
+-
+         audit.uid = audit.loginuid = (uid_t) -1;
+         audit.gid = (gid_t) -1;
+         audit.cmdline = NULL;
diff --git a/0062-logind-send-Resumed-signal-after-we-come-back-from-s.patch b/0062-logind-send-Resumed-signal-after-we-come-back-from-s.patch
new file mode 100644
index 0000000..286ed23
--- /dev/null
+++ b/0062-logind-send-Resumed-signal-after-we-come-back-from-s.patch
@@ -0,0 +1,112 @@
+From 7f77fed65087294f36d4fd60881575c7cb0498ec Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Thu, 24 Jan 2013 05:15:36 +0100
+Subject: [PATCH] logind: send Resumed() signal after we come back from
+ suspend/hibernate/hybrid-sleep
+
+This allows clients to get asynchronous notifications for user-requested
+suspend/hibernate cycles. Kernel-triggered automatic suspending is not
+covered.
+(cherry picked from commit ee17c9281d3c208ca3f4fadd800990e61e8fd4f2)
+---
+ src/login/logind-dbus.c | 24 ++++++++++++++++--------
+ src/login/logind.h      |  1 +
+ 2 files changed, 17 insertions(+), 8 deletions(-)
+
+diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c
+index 0ff20fa..1717584 100644
+--- a/src/login/logind-dbus.c
++++ b/src/login/logind-dbus.c
+@@ -197,6 +197,7 @@
+         "   <arg name=\"id\" type=\"s\"/>\n"                            \
+         "   <arg name=\"path\" type=\"o\"/>\n"                          \
+         "  </signal>\n"                                                 \
++        "  <signal name=\"Resumed\"/>\n"                                \
+         "  <signal name=\"PrepareForShutdown\">\n"                      \
+         "   <arg name=\"active\" type=\"b\"/>\n"                        \
+         "  </signal>\n"                                                 \
+@@ -990,7 +991,7 @@ static int have_multiple_sessions(
+         return false;
+ }
+ 
+-static int send_start_unit(Manager *m, const char *unit_name, DBusError *error) {
++static int send_start_unit(Manager *m, const char *unit_name, bool send_resumed, DBusError *error) {
+         _cleanup_dbus_message_unref_ DBusMessage *reply = NULL;
+         const char *mode = "replace", *p;
+         int r;
+@@ -1026,6 +1027,7 @@ static int send_start_unit(Manager *m, const char *unit_name, DBusError *error)
+ 
+         free(m->action_job);
+         m->action_job = c;
++        m->send_resumed_after_action_job = send_resumed;
+ 
+         return 0;
+ }
+@@ -1037,8 +1039,7 @@ static int send_prepare_for(Manager *m, InhibitWhat w, bool _active) {
+         };
+ 
+         dbus_bool_t active = _active;
+-        DBusMessage *message;
+-        int r = 0;
++        _cleanup_dbus_message_unref_ DBusMessage *message = NULL;
+ 
+         assert(m);
+         assert(w >= 0);
+@@ -1051,10 +1052,9 @@ static int send_prepare_for(Manager *m, InhibitWhat w, bool _active) {
+ 
+         if (!dbus_message_append_args(message, DBUS_TYPE_BOOLEAN, &active, DBUS_TYPE_INVALID) ||
+             !dbus_connection_send(m->bus, message, NULL))
+-                r = -ENOMEM;
++                return -ENOMEM;
+ 
+-        dbus_message_unref(message);
+-        return r;
++        return 0;
+ }
+ 
+ static int delay_shutdown_or_sleep(Manager *m, InhibitWhat w, const char *unit_name) {
+@@ -1263,7 +1263,7 @@ int bus_manager_shutdown_or_sleep_now_or_later(
+ 
+                 /* Shutdown is not delayed, execute it
+                  * immediately */
+-                r = send_start_unit(m, unit_name, error);
++                r = send_start_unit(m, unit_name, w & INHIBIT_SLEEP, error);
+         }
+ 
+         return r;
+@@ -2369,6 +2369,14 @@ DBusHandlerResult bus_message_filter(
+                         log_info("Action is complete, result is '%s'.", result);
+                         free(m->action_job);
+                         m->action_job = NULL;
++
++                        if (m->send_resumed_after_action_job) {
++                                _cleanup_dbus_message_unref_ DBusMessage *s = NULL;
++
++                                s = dbus_message_new_signal("/org/freedesktop/login1", "org.freedesktop.login1.Manager", "Resumed");
++                                if (s)
++                                        dbus_connection_send(m->bus, s, NULL);
++                        }
+                 }
+         }
+ 
+@@ -2428,7 +2436,7 @@ int manager_dispatch_delayed(Manager *manager) {
+ 
+         /* Actually do the shutdown */
+         dbus_error_init(&error);
+-        r = send_start_unit(manager, unit_name, &error);
++        r = send_start_unit(manager, unit_name, manager->delayed_what & INHIBIT_SLEEP, &error);
+         if (r < 0) {
+                 log_warning("Failed to send delayed message: %s", bus_error_message_or_strerror(&error, -r));
+                 dbus_error_free(&error);
+diff --git a/src/login/logind.h b/src/login/logind.h
+index fe6ea0f..7a0f8f2 100644
+--- a/src/login/logind.h
++++ b/src/login/logind.h
+@@ -101,6 +101,7 @@ struct Manager {
+         usec_t inhibit_delay_max;
+ 
+         char* action_job;
++        bool send_resumed_after_action_job;
+ 
+         int idle_action_fd; /* the timer_fd */
+         usec_t idle_action_usec;
diff --git a/0063-logind-add-UnlockSessions-clal-to-complement-LockSes.patch b/0063-logind-add-UnlockSessions-clal-to-complement-LockSes.patch
new file mode 100644
index 0000000..1b71dc6
--- /dev/null
+++ b/0063-logind-add-UnlockSessions-clal-to-complement-LockSes.patch
@@ -0,0 +1,96 @@
+From 9abc2c6f11d12a2c849df0ada0f2aeb621d34459 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Thu, 24 Jan 2013 05:29:37 +0100
+Subject: [PATCH] logind: add UnlockSessions() clal to complement
+ LockSessions() (cherry picked from commit
+ b61600291e3bbc51482bbb9823ccd48f03c130da)
+
+---
+ man/loginctl.xml        | 8 +++++---
+ src/login/loginctl.c    | 6 +++++-
+ src/login/logind-dbus.c | 7 +++++--
+ 3 files changed, 15 insertions(+), 6 deletions(-)
+
+diff --git a/man/loginctl.xml b/man/loginctl.xml
+index 8a20d18..9d082cf 100644
+--- a/man/loginctl.xml
++++ b/man/loginctl.xml
+@@ -251,10 +251,12 @@
+ 
+                         <varlistentry>
+                                 <term><command>lock-sessions</command></term>
++                                <term><command>unlock-sessions</command></term>
+ 
+-                                <listitem><para>Activate the screen
+-                                lock on all current sessions
+-                                supporting it.</para></listitem>
++                                <listitem><para>Activates/deactivates
++                                the screen lock on all current
++                                sessions supporting
++                                it.</para></listitem>
+                         </varlistentry>
+ 
+                         <varlistentry>
+diff --git a/src/login/loginctl.c b/src/login/loginctl.c
+index 0e57e08..473c77b 100644
+--- a/src/login/loginctl.c
++++ b/src/login/loginctl.c
+@@ -1287,6 +1287,8 @@ static int flush_devices(DBusConnection *bus, char **args, unsigned n) {
+ }
+ 
+ static int lock_sessions(DBusConnection *bus, char **args, unsigned n) {
++        assert(args);
++
+         polkit_agent_open_if_enabled();
+ 
+         return bus_method_call_with_reply (
+@@ -1294,7 +1296,7 @@ static int lock_sessions(DBusConnection *bus, char **args, unsigned n) {
+                         "org.freedesktop.login1",
+                         "/org/freedesktop/login1",
+                         "org.freedesktop.login1.Manager",
+-                        "LockSessions",
++                        streq(args[0], "lock-sessions") ? "LockSessions" : "UnlockSessions",
+                         NULL,
+                         NULL,
+                         DBUS_TYPE_INVALID);
+@@ -1348,6 +1350,7 @@ static int help(void) {
+                "  lock-session [ID...]            Screen lock one or more sessions\n"
+                "  unlock-session [ID...]          Screen unlock one or more sessions\n"
+                "  lock-sessions                   Screen lock all current sessions\n"
++               "  unlock-sessions                 Screen unlock all current sessions\n"
+                "  terminate-session [ID...]       Terminate one or more sessions\n"
+                "  kill-session [ID...]            Send signal to processes of a session\n"
+                "  list-users                      List users\n"
+@@ -1496,6 +1499,7 @@ static int loginctl_main(DBusConnection *bus, int argc, char *argv[], DBusError
+                 { "lock-session",          MORE,   2, activate         },
+                 { "unlock-session",        MORE,   2, activate         },
+                 { "lock-sessions",         EQUAL,  1, lock_sessions    },
++                { "unlock-sessions",       EQUAL,  1, lock_sessions    },
+                 { "terminate-session",     MORE,   2, activate         },
+                 { "kill-session",          MORE,   2, kill_session     },
+                 { "list-users",            EQUAL,  1, list_users       },
+diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c
+index 1717584..0960aab 100644
+--- a/src/login/logind-dbus.c
++++ b/src/login/logind-dbus.c
+@@ -102,6 +102,7 @@
+         "   <arg name=\"id\" type=\"s\" direction=\"in\"/>\n"           \
+         "  </method>\n"                                                 \
+         "  <method name=\"LockSessions\"/>\n"                           \
++        "  <method name=\"UnlockSessions\"/>\n"                         \
+         "  <method name=\"KillSession\">\n"                             \
+         "   <arg name=\"id\" type=\"s\" direction=\"in\"/>\n"           \
+         "   <arg name=\"who\" type=\"s\" direction=\"in\"/>\n"          \
+@@ -1853,8 +1854,10 @@ static DBusHandlerResult manager_message_handler(
+                 if (!reply)
+                         goto oom;
+ 
+-        } else if (dbus_message_is_method_call(message, "org.freedesktop.login1.Manager", "LockSessions")) {
+-                r = session_send_lock_all(m, true);
++        } else if (dbus_message_is_method_call(message, "org.freedesktop.login1.Manager", "LockSessions") ||
++                   dbus_message_is_method_call(message, "org.freedesktop.login1.Manager", "UnlockSessions")) {
++
++                r = session_send_lock_all(m, streq(dbus_message_get_member(message), "LockSessions"));
+                 if (r < 0)
+                         bus_send_error_reply(connection, message, NULL, r);
+ 
diff --git a/0064-loginctl-show-seat-master-and-uaccess-devices-in-sea.patch b/0064-loginctl-show-seat-master-and-uaccess-devices-in-sea.patch
new file mode 100644
index 0000000..f70b440
--- /dev/null
+++ b/0064-loginctl-show-seat-master-and-uaccess-devices-in-sea.patch
@@ -0,0 +1,50 @@
+From ce036ab97ed711dabc779b13a9a3cc575d0507b5 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Thu, 24 Jan 2013 05:47:37 +0100
+Subject: [PATCH] loginctl: show seat master and uaccess devices in seat-status
+ output (cherry picked from commit d239d84aa384a532e1056ec1d09fef16d843b8eb)
+
+---
+ src/login/sysfs-show.c | 9 +++++++--
+ 1 file changed, 7 insertions(+), 2 deletions(-)
+
+diff --git a/src/login/sysfs-show.c b/src/login/sysfs-show.c
+index d113ec3..da34c3a 100644
+--- a/src/login/sysfs-show.c
++++ b/src/login/sysfs-show.c
+@@ -45,6 +45,7 @@ static int show_sysfs_one(
+                 struct udev_device *d;
+                 const char *sn, *name, *sysfs, *subsystem, *sysname;
+                 char *l, *k;
++                bool is_master, uaccess;
+ 
+                 sysfs = udev_list_entry_get_name(*item);
+                 if (!path_startswith(sysfs, sub))
+@@ -60,13 +61,16 @@ static int show_sysfs_one(
+                 if (isempty(sn))
+                         sn = "seat0";
+ 
+-                /* fixme, also check for tag 'seat' here */
++                /* Explicitly also check for tag 'seat' here */
+                 if (!streq(seat, sn) || !udev_device_has_tag(d, "seat")) {
+                         udev_device_unref(d);
+                         *item = udev_list_entry_get_next(*item);
+                         continue;
+                 }
+ 
++                is_master = udev_device_has_tag(d, "seat-master");
++                uaccess = udev_device_has_tag(d, "uaccess");
++
+                 name = udev_device_get_sysattr_value(d, "name");
+                 if (!name)
+                         name = udev_device_get_sysattr_value(d, "id");
+@@ -110,7 +114,8 @@ static int show_sysfs_one(
+                 free(k);
+ 
+                 if (asprintf(&l,
+-                             "(%s:%s)%s%s%s",
++                             "%s%s%s:%s%s%s%s",
++                             is_master ? "[MASTER] " : "", uaccess ? "[ACL] " : "",
+                              subsystem, sysname,
+                              name ? " \"" : "", name ? name : "", name ? "\"" : "") < 0) {
+                         udev_device_unref(d);
diff --git a/0065-loginctl-don-t-show-UACCESS-info-in-device-tree.patch b/0065-loginctl-don-t-show-UACCESS-info-in-device-tree.patch
new file mode 100644
index 0000000..d2a3730
--- /dev/null
+++ b/0065-loginctl-don-t-show-UACCESS-info-in-device-tree.patch
@@ -0,0 +1,46 @@
+From 2fc3a85f081e2861b6ee3b599332c39046b8e56e Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Fri, 25 Jan 2013 04:48:34 +0100
+Subject: [PATCH] loginctl: don't show [UACCESS] info in device tree
+
+As the tree doesn't really necessarily show all device node devices and
+only those are marked for uaccess it's kinda pointless showing this at
+all, since it would give a pretty incomplete impression of the uaccess
+information.
+(cherry picked from commit 5d1fb81b2c602abd2605f6e50810ac7fcb06c024)
+---
+ src/login/sysfs-show.c | 7 +++----
+ 1 file changed, 3 insertions(+), 4 deletions(-)
+
+diff --git a/src/login/sysfs-show.c b/src/login/sysfs-show.c
+index da34c3a..fc3af75 100644
+--- a/src/login/sysfs-show.c
++++ b/src/login/sysfs-show.c
+@@ -45,7 +45,7 @@ static int show_sysfs_one(
+                 struct udev_device *d;
+                 const char *sn, *name, *sysfs, *subsystem, *sysname;
+                 char *l, *k;
+-                bool is_master, uaccess;
++                bool is_master;
+ 
+                 sysfs = udev_list_entry_get_name(*item);
+                 if (!path_startswith(sysfs, sub))
+@@ -69,7 +69,6 @@ static int show_sysfs_one(
+                 }
+ 
+                 is_master = udev_device_has_tag(d, "seat-master");
+-                uaccess = udev_device_has_tag(d, "uaccess");
+ 
+                 name = udev_device_get_sysattr_value(d, "name");
+                 if (!name)
+@@ -114,8 +113,8 @@ static int show_sysfs_one(
+                 free(k);
+ 
+                 if (asprintf(&l,
+-                             "%s%s%s:%s%s%s%s",
+-                             is_master ? "[MASTER] " : "", uaccess ? "[ACL] " : "",
++                             "%s%s:%s%s%s%s",
++                             is_master ? "[MASTER] " : "",
+                              subsystem, sysname,
+                              name ? " \"" : "", name ? name : "", name ? "\"" : "") < 0) {
+                         udev_device_unref(d);
diff --git a/0066-logind-rework-delay-inhibition-logic.patch b/0066-logind-rework-delay-inhibition-logic.patch
new file mode 100644
index 0000000..2fca1f1
--- /dev/null
+++ b/0066-logind-rework-delay-inhibition-logic.patch
@@ -0,0 +1,447 @@
+From 8547ac2198ca2ed310ce50379cec911d9ce7fa90 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Fri, 25 Jan 2013 06:30:23 +0100
+Subject: [PATCH] logind: rework delay inhibition logic
+
+- Don't allow any locks to be taken while we are in the process of
+  executing the specific operation, so that apps are not surprised if a
+  suspend/shutdown happens while they rely on their inhibitor.
+
+- Get rid of the Resumed signal, it was a bad idea, and redundant due to
+  PrepareForSleep(false), see below.
+
+- Always send out PrepareFor{Shutdown,Sleep} signals, instead of only if
+  a delay lock is taken.
+
+- Move PrepareForSleep(false) after we come back from the suspend, so
+  that apps can use this as "Resumed" notification. This also has the
+  benefit that apps know when to take a new lock.
+(cherry picked from commit 314b4b0a68d9ab35de981923a088fc8c8820caa5)
+
+Conflicts:
+	TODO
+---
+ src/login/logind-action.c |   2 +-
+ src/login/logind-dbus.c   | 218 +++++++++++++++++++++++++---------------------
+ src/login/logind.c        |   4 +-
+ src/login/logind.h        |  22 +++--
+ 4 files changed, 133 insertions(+), 113 deletions(-)
+
+diff --git a/src/login/logind-action.c b/src/login/logind-action.c
+index a796ebe..1e529e1 100644
+--- a/src/login/logind-action.c
++++ b/src/login/logind-action.c
+@@ -60,7 +60,7 @@ int manager_handle_action(
+ 
+         assert(m);
+ 
+-        if (m->action_job || m->delayed_unit) {
++        if (m->action_what) {
+                 log_debug("Action already in progress, ignoring.");
+                 return -EALREADY;
+         }
+diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c
+index 0960aab..f351859 100644
+--- a/src/login/logind-dbus.c
++++ b/src/login/logind-dbus.c
+@@ -198,7 +198,6 @@
+         "   <arg name=\"id\" type=\"s\"/>\n"                            \
+         "   <arg name=\"path\" type=\"o\"/>\n"                          \
+         "  </signal>\n"                                                 \
+-        "  <signal name=\"Resumed\"/>\n"                                \
+         "  <signal name=\"PrepareForShutdown\">\n"                      \
+         "   <arg name=\"active\" type=\"b\"/>\n"                        \
+         "  </signal>\n"                                                 \
+@@ -298,9 +297,9 @@ static int bus_manager_append_preparing(DBusMessageIter *i, const char *property
+         assert(property);
+ 
+         if (streq(property, "PreparingForShutdown"))
+-                b = !!(m->delayed_what & INHIBIT_SHUTDOWN);
++                b = !!(m->action_what & INHIBIT_SHUTDOWN);
+         else
+-                b = !!(m->delayed_what & INHIBIT_SLEEP);
++                b = !!(m->action_what & INHIBIT_SLEEP);
+ 
+         dbus_message_iter_append_basic(i, DBUS_TYPE_BOOLEAN, &b);
+         return 0;
+@@ -697,7 +696,13 @@ fail:
+         return r;
+ }
+ 
+-static int bus_manager_inhibit(Manager *m, DBusConnection *connection, DBusMessage *message, DBusError *error, DBusMessage **_reply) {
++static int bus_manager_inhibit(
++                Manager *m,
++                DBusConnection *connection,
++                DBusMessage *message,
++                DBusError *error,
++                DBusMessage **_reply) {
++
+         Inhibitor *i = NULL;
+         char *id = NULL;
+         const char *who, *why, *what, *mode;
+@@ -744,6 +749,15 @@ static int bus_manager_inhibit(Manager *m, DBusConnection *connection, DBusMessa
+                 goto fail;
+         }
+ 
++        /* Don't allow taking delay locks while we are already
++         * executing the operation. We shouldn't create the impression
++         * that the lock was successful if the machine is about to go
++         * down/suspend any moment. */
++        if (m->action_what & w) {
++                r = -EALREADY;
++                goto fail;
++        }
++
+         r = verify_polkit(connection, message,
+                           w == INHIBIT_SHUTDOWN             ? (mm == INHIBIT_BLOCK ? "org.freedesktop.login1.inhibit-block-shutdown" : "org.freedesktop.login1.inhibit-delay-shutdown") :
+                           w == INHIBIT_SLEEP                ? (mm == INHIBIT_BLOCK ? "org.freedesktop.login1.inhibit-block-sleep"    : "org.freedesktop.login1.inhibit-delay-sleep") :
+@@ -992,15 +1006,59 @@ static int have_multiple_sessions(
+         return false;
+ }
+ 
+-static int send_start_unit(Manager *m, const char *unit_name, bool send_resumed, DBusError *error) {
++static int bus_manager_log_shutdown(
++                Manager *m,
++                InhibitWhat w,
++                const char *unit_name) {
++
++        const char *p, *q;
++
++        assert(m);
++        assert(unit_name);
++
++        if (w != INHIBIT_SHUTDOWN)
++                return 0;
++
++        if (streq(unit_name, SPECIAL_POWEROFF_TARGET)) {
++                p = "MESSAGE=System is powering down.";
++                q = "SHUTDOWN=power-off";
++        } else if (streq(unit_name, SPECIAL_HALT_TARGET)) {
++                p = "MESSAGE=System is halting.";
++                q = "SHUTDOWN=halt";
++        } else if (streq(unit_name, SPECIAL_REBOOT_TARGET)) {
++                p = "MESSAGE=System is rebooting.";
++                q = "SHUTDOWN=reboot";
++        } else if (streq(unit_name, SPECIAL_KEXEC_TARGET)) {
++                p = "MESSAGE=System is rebooting with kexec.";
++                q = "SHUTDOWN=kexec";
++        } else {
++                p = "MESSAGE=System is shutting down.";
++                q = NULL;
++        }
++
++        return log_struct(LOG_NOTICE, MESSAGE_ID(SD_MESSAGE_SHUTDOWN),
++                          p,
++                          q, NULL);
++}
++
++static int execute_shutdown_or_sleep(
++                Manager *m,
++                InhibitWhat w,
++                const char *unit_name,
++                DBusError *error) {
++
+         _cleanup_dbus_message_unref_ DBusMessage *reply = NULL;
+         const char *mode = "replace", *p;
+         int r;
+         char *c;
+ 
+         assert(m);
++        assert(w >= 0);
++        assert(w < _INHIBIT_WHAT_MAX);
+         assert(unit_name);
+ 
++        bus_manager_log_shutdown(m, w, unit_name);
++
+         r = bus_method_call_with_reply(
+                         m->bus,
+                         "org.freedesktop.systemd1",
+@@ -1026,54 +1084,27 @@ static int send_start_unit(Manager *m, const char *unit_name, bool send_resumed,
+         if (!c)
+                 return -ENOMEM;
+ 
++        m->action_unit = unit_name;
+         free(m->action_job);
+         m->action_job = c;
+-        m->send_resumed_after_action_job = send_resumed;
++        m->action_what = w;
+ 
+         return 0;
+ }
+ 
+-static int send_prepare_for(Manager *m, InhibitWhat w, bool _active) {
+-        static const char * const signal_name[_INHIBIT_WHAT_MAX] = {
+-                [INHIBIT_SHUTDOWN] = "PrepareForShutdown",
+-                [INHIBIT_SLEEP] = "PrepareForSleep"
+-        };
+-
+-        dbus_bool_t active = _active;
+-        _cleanup_dbus_message_unref_ DBusMessage *message = NULL;
+-
+-        assert(m);
+-        assert(w >= 0);
+-        assert(w < _INHIBIT_WHAT_MAX);
+-        assert(signal_name[w]);
+-
+-        message = dbus_message_new_signal("/org/freedesktop/login1", "org.freedesktop.login1.Manager", signal_name[w]);
+-        if (!message)
+-                return -ENOMEM;
+-
+-        if (!dbus_message_append_args(message, DBUS_TYPE_BOOLEAN, &active, DBUS_TYPE_INVALID) ||
+-            !dbus_connection_send(m->bus, message, NULL))
+-                return -ENOMEM;
+-
+-        return 0;
+-}
++static int delay_shutdown_or_sleep(
++                Manager *m,
++                InhibitWhat w,
++                const char *unit_name) {
+ 
+-static int delay_shutdown_or_sleep(Manager *m, InhibitWhat w, const char *unit_name) {
+         assert(m);
+         assert(w >= 0);
+         assert(w < _INHIBIT_WHAT_MAX);
++        assert(unit_name);
+ 
+-        /* Tell everybody to prepare for shutdown/sleep */
+-        send_prepare_for(m, w, true);
+-
+-        /* Update timestamp for timeout */
+-        if (!m->delayed_unit)
+-                m->delayed_timestamp = now(CLOCK_MONOTONIC);
+-
+-        /* Remember what we want to do, possibly overriding what kind
+-         * of unit we previously queued. */
+-        m->delayed_unit = unit_name;
+-        m->delayed_what = w;
++        m->action_timestamp = now(CLOCK_MONOTONIC);
++        m->action_unit = unit_name;
++        m->action_what = w;
+ 
+         return 0;
+ }
+@@ -1201,39 +1232,29 @@ finish:
+         return 0;
+ }
+ 
+-static int bus_manager_log_shutdown(
+-                Manager *m,
+-                InhibitWhat w,
+-                const char *unit_name) {
++static int send_prepare_for(Manager *m, InhibitWhat w, bool _active) {
++        static const char * const signal_name[_INHIBIT_WHAT_MAX] = {
++                [INHIBIT_SHUTDOWN] = "PrepareForShutdown",
++                [INHIBIT_SLEEP] = "PrepareForSleep"
++        };
+ 
+-        const char *p, *q;
++        dbus_bool_t active = _active;
++        _cleanup_dbus_message_unref_ DBusMessage *message = NULL;
+ 
+         assert(m);
+-        assert(unit_name);
++        assert(w >= 0);
++        assert(w < _INHIBIT_WHAT_MAX);
++        assert(signal_name[w]);
+ 
+-        if (w != INHIBIT_SHUTDOWN)
+-                return 0;
++        message = dbus_message_new_signal("/org/freedesktop/login1", "org.freedesktop.login1.Manager", signal_name[w]);
++        if (!message)
++                return -ENOMEM;
+ 
+-        if (streq(unit_name, SPECIAL_POWEROFF_TARGET)) {
+-                p = "MESSAGE=System is powering down.";
+-                q = "SHUTDOWN=power-off";
+-        } else if (streq(unit_name, SPECIAL_HALT_TARGET)) {
+-                p = "MESSAGE=System is halting.";
+-                q = "SHUTDOWN=halt";
+-        } else if (streq(unit_name, SPECIAL_REBOOT_TARGET)) {
+-                p = "MESSAGE=System is rebooting.";
+-                q = "SHUTDOWN=reboot";
+-        } else if (streq(unit_name, SPECIAL_KEXEC_TARGET)) {
+-                p = "MESSAGE=System is rebooting with kexec.";
+-                q = "SHUTDOWN=kexec";
+-        } else {
+-                p = "MESSAGE=System is shutting down.";
+-                q = NULL;
+-        }
++        if (!dbus_message_append_args(message, DBUS_TYPE_BOOLEAN, &active, DBUS_TYPE_INVALID) ||
++            !dbus_connection_send(m->bus, message, NULL))
++                return -ENOMEM;
+ 
+-        return log_struct(LOG_NOTICE, MESSAGE_ID(SD_MESSAGE_SHUTDOWN),
+-                          p,
+-                          q, NULL);
++        return 0;
+ }
+ 
+ int bus_manager_shutdown_or_sleep_now_or_later(
+@@ -1251,6 +1272,9 @@ int bus_manager_shutdown_or_sleep_now_or_later(
+         assert(w <= _INHIBIT_WHAT_MAX);
+         assert(!m->action_job);
+ 
++        /* Tell everybody to prepare for shutdown/sleep */
++        send_prepare_for(m, w, true);
++
+         delayed =
+                 m->inhibit_delay_max > 0 &&
+                 manager_is_inhibited(m, w, INHIBIT_DELAY, NULL, false, false, 0);
+@@ -1259,13 +1283,10 @@ int bus_manager_shutdown_or_sleep_now_or_later(
+                 /* Shutdown is delayed, keep in mind what we
+                  * want to do, and start a timeout */
+                 r = delay_shutdown_or_sleep(m, w, unit_name);
+-        else {
+-                bus_manager_log_shutdown(m, w, unit_name);
+-
++        else
+                 /* Shutdown is not delayed, execute it
+                  * immediately */
+-                r = send_start_unit(m, unit_name, w & INHIBIT_SLEEP, error);
+-        }
++                r = execute_shutdown_or_sleep(m, w, unit_name, error);
+ 
+         return r;
+ }
+@@ -1302,7 +1323,8 @@ static int bus_manager_do_shutdown_or_sleep(
+         assert(error);
+         assert(_reply);
+ 
+-        if (m->action_job || m->delayed_unit)
++        /* Don't allow multiple jobs being executed at the same time */
++        if (m->action_what)
+                 return -EALREADY;
+ 
+         if (!dbus_message_get_args(
+@@ -2368,18 +2390,18 @@ DBusHandlerResult bus_message_filter(
+                                            DBUS_TYPE_STRING, &result,
+                                            DBUS_TYPE_INVALID))
+                         log_error("Failed to parse JobRemoved message: %s", bus_error_message(&error));
++
+                 else if (m->action_job && streq(m->action_job, path)) {
+-                        log_info("Action is complete, result is '%s'.", result);
+-                        free(m->action_job);
+-                        m->action_job = NULL;
+ 
+-                        if (m->send_resumed_after_action_job) {
+-                                _cleanup_dbus_message_unref_ DBusMessage *s = NULL;
++                        log_info("Operation finished.");
+ 
+-                                s = dbus_message_new_signal("/org/freedesktop/login1", "org.freedesktop.login1.Manager", "Resumed");
+-                                if (s)
+-                                        dbus_connection_send(m->bus, s, NULL);
+-                        }
++                        /* Tell people that they now may take a lock again */
++                        send_prepare_for(m, m->action_what, false);
++
++                        free(m->action_job);
++                        m->action_job = NULL;
++                        m->action_unit = NULL;
++                        m->action_what = 0;
+                 }
+         }
+ 
+@@ -2411,38 +2433,32 @@ finish:
+ }
+ 
+ int manager_dispatch_delayed(Manager *manager) {
+-        const char *unit_name;
+         DBusError error;
+-        bool delayed;
+         int r;
+ 
+         assert(manager);
+ 
+-        if (!manager->delayed_unit)
++        if (!manager->action_unit || manager->action_job)
+                 return 0;
+ 
+         /* Continue delay? */
+-        delayed =
+-                manager->delayed_timestamp + manager->inhibit_delay_max > now(CLOCK_MONOTONIC) &&
+-                manager_is_inhibited(manager, manager->delayed_what, INHIBIT_DELAY, NULL, false, false, 0);
+-        if (delayed)
+-                return 0;
++        if (manager_is_inhibited(manager, manager->action_what, INHIBIT_DELAY, NULL, false, false, 0)) {
+ 
+-        bus_manager_log_shutdown(manager, manager->delayed_what, manager->delayed_unit);
+-
+-        /* Tell people about it */
+-        send_prepare_for(manager, manager->delayed_what, false);
++                if (manager->action_timestamp + manager->inhibit_delay_max > now(CLOCK_MONOTONIC))
++                        return 0;
+ 
+-        /* Reset delay data */
+-        unit_name = manager->delayed_unit;
+-        manager->delayed_unit = NULL;
++                log_info("Delay lock is active but inhibitor timeout is reached.");
++        }
+ 
+-        /* Actually do the shutdown */
++        /* Actually do the operation */
+         dbus_error_init(&error);
+-        r = send_start_unit(manager, unit_name, manager->delayed_what & INHIBIT_SLEEP, &error);
++        r = execute_shutdown_or_sleep(manager, manager->action_what, manager->action_unit, &error);
+         if (r < 0) {
+                 log_warning("Failed to send delayed message: %s", bus_error_message_or_strerror(&error, -r));
+                 dbus_error_free(&error);
++
++                manager->action_unit = NULL;
++                manager->action_what = 0;
+                 return r;
+         }
+ 
+diff --git a/src/login/logind.c b/src/login/logind.c
+index ed0b748..be793e2 100644
+--- a/src/login/logind.c
++++ b/src/login/logind.c
+@@ -1628,11 +1628,11 @@ int manager_run(Manager *m) {
+ 
+                 manager_gc(m, true);
+ 
+-                if (m->delayed_unit) {
++                if (m->action_what != 0) {
+                         usec_t x, y;
+ 
+                         x = now(CLOCK_MONOTONIC);
+-                        y = m->delayed_timestamp + m->inhibit_delay_max;
++                        y = m->action_timestamp + m->inhibit_delay_max;
+ 
+                         msec = x >= y ? 0 : (int) ((y - x) / USEC_PER_MSEC);
+                 }
+diff --git a/src/login/logind.h b/src/login/logind.h
+index 7a0f8f2..904dc20 100644
+--- a/src/login/logind.h
++++ b/src/login/logind.h
+@@ -91,17 +91,21 @@ struct Manager {
+         Hashmap *inhibitor_fds;
+         Hashmap *button_fds;
+ 
+-        /* If a shutdown was delayed due to a inhibitor this contains
+-           the unit name we are supposed to start after the delay is
+-           over */
+-        const char *delayed_unit;
+-        InhibitWhat delayed_what;
+-        usec_t delayed_timestamp;
+-
+         usec_t inhibit_delay_max;
+ 
+-        char* action_job;
+-        bool send_resumed_after_action_job;
++        /* If an action is currently being executed or is delayed,
++         * this is != 0 and encodes what is being done */
++        InhibitWhat action_what;
++
++        /* If a shutdown/suspend was delayed due to a inhibitor this
++           contains the unit name we are supposed to start after the
++           delay is over */
++        const char *action_unit;
++
++        /* If a shutdown/suspend is currently executed, then this is
++         * the job of it */
++        char *action_job;
++        usec_t action_timestamp;
+ 
+         int idle_action_fd; /* the timer_fd */
+         usec_t idle_action_usec;
diff --git a/0067-tmpfiles-introduce-type-X.patch b/0067-tmpfiles-introduce-type-X.patch
new file mode 100644
index 0000000..4acfb09
--- /dev/null
+++ b/0067-tmpfiles-introduce-type-X.patch
@@ -0,0 +1,332 @@
+From 312803beb2b76556e2f8b90982cbbdde4d72d400 Mon Sep 17 00:00:00 2001
+From: Michal Sekletar <msekleta at redhat.com>
+Date: Fri, 18 Jan 2013 16:13:08 +0100
+Subject: [PATCH] tmpfiles: introduce type X
+
+Type X will exclude path itself from clean-up. However, if the path is a
+directory systemd-tmpfiles will clean-up its content.
+
+In contrast to type x, where path is ignored completely, type X needs some
+Age parameter. In order to determine Age parameter, we will look for config
+entries of type d or D and pick the best match.  Best match is either
+exact match or longest prefix match.
+(cherry picked from commit 78a92a5a2306709e4587e332728a76901323ade9)
+---
+ man/tmpfiles.d.xml      |  15 ++++
+ src/tmpfiles/tmpfiles.c | 192 +++++++++++++++++++++++++++++++-----------------
+ 2 files changed, 138 insertions(+), 69 deletions(-)
+
+diff --git a/man/tmpfiles.d.xml b/man/tmpfiles.d.xml
+index 785264e..519f9bc 100644
+--- a/man/tmpfiles.d.xml
++++ b/man/tmpfiles.d.xml
+@@ -166,6 +166,21 @@ L    /tmp/foobar -    -    -    -   /dev/null</programlisting>
+                                 </varlistentry>
+ 
+                                 <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
++                                        names.</para></listitem>
++                                </varlistentry>
++
++                                <varlistentry>
+                                         <term><varname>r</varname></term>
+                                         <listitem><para>Remove a file
+                                         or directory if it
+diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c
+index d8fb07e..c2023f5 100644
+--- a/src/tmpfiles/tmpfiles.c
++++ b/src/tmpfiles/tmpfiles.c
+@@ -70,6 +70,7 @@ typedef enum ItemType {
+ 
+         /* These ones take globs */
+         IGNORE_PATH = 'x',
++        IGNORE_DIRECTORY_PATH = 'X',
+         REMOVE_PATH = 'r',
+         RECURSIVE_REMOVE_PATH = 'R',
+         RELABEL_PATH = 'z',
+@@ -119,7 +120,7 @@ static const char * const conf_file_dirs[] = {
+ #define MAX_DEPTH 256
+ 
+ static bool needs_glob(ItemType t) {
+-        return t == IGNORE_PATH || t == REMOVE_PATH || t == RECURSIVE_REMOVE_PATH || t == RELABEL_PATH || t == RECURSIVE_RELABEL_PATH;
++        return t == IGNORE_PATH || t == IGNORE_DIRECTORY_PATH || t == REMOVE_PATH || t == RECURSIVE_REMOVE_PATH || t == RELABEL_PATH || t == RECURSIVE_RELABEL_PATH;
+ }
+ 
+ static struct Item* find_glob(Hashmap *h, const char *match) {
+@@ -218,6 +219,7 @@ static bool unix_socket_alive(const char *fn) {
+ }
+ 
+ static int dir_cleanup(
++                Item *i,
+                 const char *p,
+                 DIR *d,
+                 const struct stat *ds,
+@@ -297,7 +299,7 @@ static int dir_cleanup(
+                                         continue;
+                                 }
+ 
+-                                q = dir_cleanup(sub_path, sub_dir, &s, cutoff, rootdev, false, maxdepth-1, false);
++                                q = dir_cleanup(i, sub_path, sub_dir, &s, cutoff, rootdev, false, maxdepth-1, false);
+                                 closedir(sub_dir);
+ 
+                                 if (q < 0)
+@@ -320,12 +322,14 @@ static int dir_cleanup(
+                         if (age >= cutoff)
+                                 continue;
+ 
+-                        log_debug("rmdir '%s'\n", sub_path);
++                        if (!i->type == IGNORE_DIRECTORY_PATH || !streq(dent->d_name, p)) {
++                                log_debug("rmdir '%s'\n", sub_path);
+ 
+-                        if (unlinkat(dirfd(d), dent->d_name, AT_REMOVEDIR) < 0) {
+-                                if (errno != ENOENT && errno != ENOTEMPTY) {
+-                                        log_error("rmdir(%s): %m", sub_path);
+-                                        r = -errno;
++                                if (unlinkat(dirfd(d), dent->d_name, AT_REMOVEDIR) < 0) {
++                                        if (errno != ENOENT && errno != ENOTEMPTY) {
++                                                log_error("rmdir(%s): %m", sub_path);
++                                                r = -errno;
++                                        }
+                                 }
+                         }
+ 
+@@ -395,68 +399,6 @@ finish:
+         return r;
+ }
+ 
+-static int clean_item(Item *i) {
+-        DIR *d;
+-        struct stat s, ps;
+-        bool mountpoint;
+-        int r;
+-        usec_t cutoff, n;
+-
+-        assert(i);
+-
+-        if (i->type != CREATE_DIRECTORY &&
+-            i->type != TRUNCATE_DIRECTORY &&
+-            i->type != IGNORE_PATH)
+-                return 0;
+-
+-        if (!i->age_set)
+-                return 0;
+-
+-        n = now(CLOCK_REALTIME);
+-        if (n < i->age)
+-                return 0;
+-
+-        cutoff = n - i->age;
+-
+-        d = opendir(i->path);
+-        if (!d) {
+-                if (errno == ENOENT)
+-                        return 0;
+-
+-                log_error("Failed to open directory %s: %m", i->path);
+-                return -errno;
+-        }
+-
+-        if (fstat(dirfd(d), &s) < 0) {
+-                log_error("stat(%s) failed: %m", i->path);
+-                r = -errno;
+-                goto finish;
+-        }
+-
+-        if (!S_ISDIR(s.st_mode)) {
+-                log_error("%s is not a directory.", i->path);
+-                r = -ENOTDIR;
+-                goto finish;
+-        }
+-
+-        if (fstatat(dirfd(d), "..", &ps, AT_SYMLINK_NOFOLLOW) != 0) {
+-                log_error("stat(%s/..) failed: %m", i->path);
+-                r = -errno;
+-                goto finish;
+-        }
+-
+-        mountpoint = s.st_dev != ps.st_dev ||
+-                     (s.st_dev == ps.st_dev && s.st_ino == ps.st_ino);
+-
+-        r = dir_cleanup(i->path, d, &s, cutoff, s.st_dev, mountpoint, MAX_DEPTH, i->keep_first_level);
+-
+-finish:
+-        if (d)
+-                closedir(d);
+-
+-        return r;
+-}
+-
+ static int item_set_perms(Item *i, const char *path) {
+         /* not using i->path directly because it may be a glob */
+         if (i->mode_set)
+@@ -669,6 +611,7 @@ static int create_item(Item *i) {
+         switch (i->type) {
+ 
+         case IGNORE_PATH:
++        case IGNORE_DIRECTORY_PATH:
+         case REMOVE_PATH:
+         case RECURSIVE_REMOVE_PATH:
+                 return 0;
+@@ -852,6 +795,7 @@ static int remove_item_instance(Item *i, const char *instance) {
+         case CREATE_BLOCK_DEVICE:
+         case CREATE_CHAR_DEVICE:
+         case IGNORE_PATH:
++        case IGNORE_DIRECTORY_PATH:
+         case RELABEL_PATH:
+         case RECURSIVE_RELABEL_PATH:
+         case WRITE_FILE:
+@@ -896,6 +840,7 @@ static int remove_item(Item *i) {
+         case CREATE_CHAR_DEVICE:
+         case CREATE_BLOCK_DEVICE:
+         case IGNORE_PATH:
++        case IGNORE_DIRECTORY_PATH:
+         case RELABEL_PATH:
+         case RECURSIVE_RELABEL_PATH:
+         case WRITE_FILE:
+@@ -911,6 +856,84 @@ static int remove_item(Item *i) {
+         return r;
+ }
+ 
++static int clean_item_instance(Item *i, const char* instance) {
++        DIR *d;
++        struct stat s, ps;
++        bool mountpoint;
++        int r;
++        usec_t cutoff, n;
++
++        assert(i);
++
++        if (!i->age_set)
++                return 0;
++
++        n = now(CLOCK_REALTIME);
++        if (n < i->age)
++                return 0;
++
++        cutoff = n - i->age;
++
++        d = opendir(instance);
++        if (!d) {
++                if (errno == ENOENT || errno == ENOTDIR)
++                        return 0;
++
++                log_error("Failed to open directory %s: %m", i->path);
++                return -errno;
++        }
++
++        if (fstat(dirfd(d), &s) < 0) {
++                log_error("stat(%s) failed: %m", i->path);
++                r = -errno;
++                goto finish;
++        }
++
++        if (!S_ISDIR(s.st_mode)) {
++                log_error("%s is not a directory.", i->path);
++                r = -ENOTDIR;
++                goto finish;
++        }
++
++        if (fstatat(dirfd(d), "..", &ps, AT_SYMLINK_NOFOLLOW) != 0) {
++                log_error("stat(%s/..) failed: %m", i->path);
++                r = -errno;
++                goto finish;
++        }
++
++        mountpoint = s.st_dev != ps.st_dev ||
++                     (s.st_dev == ps.st_dev && s.st_ino == ps.st_ino);
++
++        r = dir_cleanup(i, instance, d, &s, cutoff, s.st_dev, mountpoint, MAX_DEPTH, i->keep_first_level);
++
++finish:
++        if (d)
++                closedir(d);
++
++        return r;
++}
++
++static int clean_item(Item *i) {
++        int r = 0;
++
++        assert(i);
++
++        switch (i->type) {
++        case CREATE_DIRECTORY:
++        case TRUNCATE_DIRECTORY:
++        case IGNORE_PATH:
++                clean_item_instance(i, i->path);
++                break;
++        case IGNORE_DIRECTORY_PATH:
++                r = glob_item(i, clean_item_instance);
++                break;
++        default:
++                break;
++        }
++
++        return r;
++}
++
+ static int process_item(Item *i) {
+         int r, q, p;
+ 
+@@ -1030,6 +1053,7 @@ static int parse_line(const char *fname, unsigned line, const char *buffer) {
+         case TRUNCATE_DIRECTORY:
+         case CREATE_FIFO:
+         case IGNORE_PATH:
++        case IGNORE_DIRECTORY_PATH:
+         case REMOVE_PATH:
+         case RECURSIVE_REMOVE_PATH:
+         case RELABEL_PATH:
+@@ -1266,6 +1290,8 @@ static int read_config_file(const char *fn, bool ignore_enoent) {
+         FILE *f;
+         unsigned v = 0;
+         int r = 0;
++        Iterator iterator;
++        Item *i;
+ 
+         assert(fn);
+ 
+@@ -1298,6 +1324,34 @@ static int read_config_file(const char *fn, bool ignore_enoent) {
+                                 r = k;
+         }
+ 
++        /* we have to determine age parameter for each entry of type X */
++        HASHMAP_FOREACH(i, globs, iterator) {
++                Iterator iter;
++                Item *j, *candidate_item = NULL;
++
++                if (i->type != IGNORE_DIRECTORY_PATH)
++                        continue;
++
++                HASHMAP_FOREACH(j, items, iter) {
++                        if (j->type != CREATE_DIRECTORY && j->type != TRUNCATE_DIRECTORY)
++                                continue;
++
++                        if (path_equal(j->path, i->path)) {
++                                candidate_item = j;
++                                break;
++                        }
++
++                        if ((!candidate_item && path_startswith(i->path, j->path)) ||
++                            (candidate_item && path_startswith(j->path, candidate_item->path) && (fnmatch(i->path, j->path, FNM_PATHNAME | FNM_PERIOD) == 0)))
++                                candidate_item = j;
++                }
++
++                if (candidate_item) {
++                        i->age = candidate_item->age;
++                        i->age_set = true;
++                }
++        }
++
+         if (ferror(f)) {
+                 log_error("Failed to read from file %s: %m", fn);
+                 if (r == 0)
diff --git a/0068-job-fix-merging-with-ignore-dependencies.patch b/0068-job-fix-merging-with-ignore-dependencies.patch
new file mode 100644
index 0000000..b6ae6d4
--- /dev/null
+++ b/0068-job-fix-merging-with-ignore-dependencies.patch
@@ -0,0 +1,24 @@
+From 9b0866e90559157262eaae33049691e9ed66ad37 Mon Sep 17 00:00:00 2001
+From: Michal Schmidt <mschmidt at redhat.com>
+Date: Fri, 25 Jan 2013 19:54:21 +0100
+Subject: [PATCH] job: fix merging with --ignore-dependencies
+
+This fixes a bug where a job with --ignore-dependencies would wait for
+other jobs because it merged into a previously queued job.
+(cherry picked from commit e45460d666512db4f908f86e8722d7932dcf0f82)
+---
+ src/core/job.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/src/core/job.c b/src/core/job.c
+index 31ab118..3279fda 100644
+--- a/src/core/job.c
++++ b/src/core/job.c
+@@ -166,6 +166,7 @@ static void job_merge_into_installed(Job *j, Job *other) {
+                 assert(other->type == JOB_NOP);
+ 
+         j->override = j->override || other->override;
++        j->ignore_order = j->ignore_order || other->ignore_order;
+ }
+ 
+ Job* job_install(Job *j) {
diff --git a/0069-nspawn-assume-stdout-is-always-writable-if-it-does-n.patch b/0069-nspawn-assume-stdout-is-always-writable-if-it-does-n.patch
new file mode 100644
index 0000000..1ff40f4
--- /dev/null
+++ b/0069-nspawn-assume-stdout-is-always-writable-if-it-does-n.patch
@@ -0,0 +1,39 @@
+From 977da434f08bb1e7125b367420f46fa2586b7d43 Mon Sep 17 00:00:00 2001
+From: Michal Schmidt <mschmidt at redhat.com>
+Date: Sat, 26 Jan 2013 00:16:13 +0100
+Subject: [PATCH] nspawn: assume stdout is always writable if it does not
+ support epoll
+
+stdout can be redirected to a regular file. Regular files don't support epoll.
+nspawn failed with: "Failed to register fds in epoll: Operation not permitted".
+
+If stdout does not support epoll, assume it's always writable.
+(cherry picked from commit f2956e80c99cd41ca6bbbe41b09e01b234ca8778)
+---
+ src/nspawn/nspawn.c | 13 +++++++++++--
+ 1 file changed, 11 insertions(+), 2 deletions(-)
+
+diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c
+index 44557f6..67f26a9 100644
+--- a/src/nspawn/nspawn.c
++++ b/src/nspawn/nspawn.c
+@@ -876,8 +876,17 @@ static int process_pty(int master, pid_t pid, sigset_t *mask) {
+         signal_ev.events = EPOLLIN;
+         signal_ev.data.fd = signal_fd;
+ 
+-        if (epoll_ctl(ep, EPOLL_CTL_ADD, STDOUT_FILENO, &stdout_ev) < 0 ||
+-            epoll_ctl(ep, EPOLL_CTL_ADD, master, &master_ev) < 0 ||
++        if (epoll_ctl(ep, EPOLL_CTL_ADD, STDOUT_FILENO, &stdout_ev) < 0) {
++                if (errno != EPERM) {
++                        log_error("Failed to register stdout in epoll: %m");
++                        r = -errno;
++                        goto finish;
++                }
++                /* stdout without epoll support. Likely redirected to regular file. */
++                stdout_writable = true;
++        }
++
++        if (epoll_ctl(ep, EPOLL_CTL_ADD, master, &master_ev) < 0 ||
+             epoll_ctl(ep, EPOLL_CTL_ADD, signal_fd, &signal_ev) < 0) {
+                 log_error("Failed to register fds in epoll: %m");
+                 r = -errno;
diff --git a/0070-man-mention-that-PrivateTmp-means-var-tmp-too.patch b/0070-man-mention-that-PrivateTmp-means-var-tmp-too.patch
new file mode 100644
index 0000000..777f9b0
--- /dev/null
+++ b/0070-man-mention-that-PrivateTmp-means-var-tmp-too.patch
@@ -0,0 +1,36 @@
+From 0e53b4b6e13268747f21f378aeddd9165405a272 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Fri, 25 Jan 2013 14:25:43 -0500
+Subject: [PATCH] man: mention that PrivateTmp means /var/tmp too (cherry
+ picked from commit 652d0dd7097984801fca0378b762bf96e8fda029)
+
+---
+ man/systemd.exec.xml | 10 ++++++----
+ 1 file changed, 6 insertions(+), 4 deletions(-)
+
+diff --git a/man/systemd.exec.xml b/man/systemd.exec.xml
+index d196c04..7747df7 100644
+--- a/man/systemd.exec.xml
++++ b/man/systemd.exec.xml
+@@ -1094,15 +1094,17 @@
+                                 <listitem><para>Takes a boolean
+                                 argument. If true sets up a new file
+                                 system namespace for the executed
+-                                processes and mounts a private
+-                                <filename>/tmp</filename> directory
+-                                inside it, that is not shared by
++                                processes and mounts private
++                                <filename>/tmp</filename> and
++                                <filename>/var/tmp</filename> directories
++                                inside it, that are not shared by
+                                 processes outside of the
+                                 namespace. This is useful to secure
+                                 access to temporary files of the
+                                 process, but makes sharing between
+                                 processes via
+-                                <filename>/tmp</filename>
++                                <filename>/tmp</filename> or
++                                <filename>/var/tmp</filename>
+                                 impossible. Defaults to
+                                 false.</para></listitem>
+                         </varlistentry>
diff --git a/0071-keymap-Add-support-for-the-brower-hotkey-on-the-HP-P.patch b/0071-keymap-Add-support-for-the-brower-hotkey-on-the-HP-P.patch
new file mode 100644
index 0000000..12f0b54
--- /dev/null
+++ b/0071-keymap-Add-support-for-the-brower-hotkey-on-the-HP-P.patch
@@ -0,0 +1,24 @@
+From f881e306873dfe9deead58c73e6fde3b759e720c Mon Sep 17 00:00:00 2001
+From: Ayan George <ayan.george at canonical.com>
+Date: Mon, 28 Jan 2013 07:30:01 +0100
+Subject: [PATCH] keymap: Add support for the brower hotkey on the HP ProBook
+
+https://bugs.launchpad.net/bugs/1105191
+(cherry picked from commit c437b20d6efcbd14b086b93de8633d3c23eee811)
+---
+ src/udev/keymap/95-keymap.rules | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/udev/keymap/95-keymap.rules b/src/udev/keymap/95-keymap.rules
+index 347b5a1..945b131 100644
+--- a/src/udev/keymap/95-keymap.rules
++++ b/src/udev/keymap/95-keymap.rules
+@@ -96,7 +96,7 @@ ENV{DMI_VENDOR}=="Hewlett-Packard*", ATTR{[dmi/id]product_name}=="*2510p*|*2530p
+ ENV{DMI_VENDOR}=="Hewlett-Packard*", ATTR{[dmi/id]product_name}=="*[tT][xX]2*", RUN+="keymap $name hewlett-packard-tx2"
+ ENV{DMI_VENDOR}=="Hewlett-Packard", ATTR{[dmi/id]product_name}=="Presario 2100*", RUN+="keymap $name hewlett-packard-presario-2100"
+ ENV{DMI_VENDOR}=="Hewlett-Packard", ATTR{[dmi/id]product_name}=="HP G62 Notebook PC", RUN+="keymap $name 0xB2 www"
+-ENV{DMI_VENDOR}=="Hewlett-Packard", ATTR{[dmi/id]product_name}=="HP ProBook*", RUN+="keymap $name 0xF8 rfkill"
++ENV{DMI_VENDOR}=="Hewlett-Packard", ATTR{[dmi/id]product_name}=="HP ProBook*", RUN+="keymap $name 0xF8 rfkill 0xB2 www"
+ ENV{DMI_VENDOR}=="Hewlett-Packard", ATTR{[dmi/id]product_name}=="HP EliteBook 8440p", RUN+="keymap $name hewlett-packard_elitebook-8440p"
+ # HP Pavillion dv6315ea has empty DMI_VENDOR
+ ATTR{[dmi/id]board_vendor}=="Quanta", ATTR{[dmi/id]board_name}=="30B7", ATTR{[dmi/id]board_version}=="65.2B", RUN+="keymap $name 0x88 media" # "quick play
diff --git a/0072-keymap-Add-HP-HDX-9494NR.patch b/0072-keymap-Add-HP-HDX-9494NR.patch
new file mode 100644
index 0000000..4a49196
--- /dev/null
+++ b/0072-keymap-Add-HP-HDX-9494NR.patch
@@ -0,0 +1,63 @@
+From 56ab9106d1a8acaa94ae86546a897a9a923e1261 Mon Sep 17 00:00:00 2001
+From: Martin Pitt <martinpitt at gnome.org>
+Date: Mon, 28 Jan 2013 07:41:36 +0100
+Subject: [PATCH] keymap: Add HP HDX 9494NR
+
+Add touchpad and www keys.
+
+https://bugzilla.redhat.com/show_bug.cgi?id=757928
+(cherry picked from commit 4dbcb1b3bada9632ca3ea763a8d8cf0ffcbc25d5)
+---
+ Makefile.am                                     | 1 +
+ keymaps/hewlett-packard-hdx9494nr               | 3 +++
+ src/udev/keymap/95-keyboard-force-release.rules | 2 +-
+ src/udev/keymap/95-keymap.rules                 | 1 +
+ 4 files changed, 6 insertions(+), 1 deletion(-)
+ create mode 100644 keymaps/hewlett-packard-hdx9494nr
+
+diff --git a/Makefile.am b/Makefile.am
+index 1413073..c5ff79d 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -2342,6 +2342,7 @@ dist_udevkeymap_DATA = \
+ 	keymaps/hewlett-packard-tablet \
+ 	keymaps/hewlett-packard-tx2 \
+ 	keymaps/hewlett-packard_elitebook-8440p \
++	keymaps/hewlett-packard-hdx9494nr \
+ 	keymaps/ibm-thinkpad-usb-keyboard-trackpoint \
+ 	keymaps/inventec-symphony_6.0_7.0 \
+ 	keymaps/lenovo-3000 \
+diff --git a/keymaps/hewlett-packard-hdx9494nr b/keymaps/hewlett-packard-hdx9494nr
+new file mode 100644
+index 0000000..f3484e1
+--- /dev/null
++++ b/keymaps/hewlett-packard-hdx9494nr
+@@ -0,0 +1,3 @@
++0xB2 www # FnF3
++0xD8 f22 # touchpad off
++0xD9 f23 # touchpad on
+diff --git a/src/udev/keymap/95-keyboard-force-release.rules b/src/udev/keymap/95-keyboard-force-release.rules
+index f97a022..3e33e85 100644
+--- a/src/udev/keymap/95-keyboard-force-release.rules
++++ b/src/udev/keymap/95-keyboard-force-release.rules
+@@ -42,7 +42,7 @@ ENV{DMI_VENDOR}=="Viooo Corporation", ATTR{[dmi/id]product_name}=="PT17", RUN+="
+ # These are all the HP laptops that setup a touchpad toggle key
+ ENV{DMI_VENDOR}=="Hewlett-Packard*", ATTR{[dmi/id]product_name}=="*[pP][aA][vV][iI][lL][iI][oO][nN]*", RUN+="keyboard-force-release.sh $devpath hp-other"
+ ENV{DMI_VENDOR}=="Hewlett-Packard*", ATTR{[dmi/id]product_name}=="*[tT][xX]2*", RUN+="keyboard-force-release.sh $devpath hp-other"
+-ENV{DMI_VENDOR}=="Hewlett-Packard*", ATTR{[dmi/id]product_name}=="*2510p*|*2530p*|HP G60 Notebook PC", RUN+="keyboard-force-release.sh $devpath hp-other"
++ENV{DMI_VENDOR}=="Hewlett-Packard*", ATTR{[dmi/id]product_name}=="*2510p*|*2530p*|HP G60 Notebook PC|HDX9494NR", RUN+="keyboard-force-release.sh $devpath hp-other"
+ 
+ ENV{DMI_VENDOR}=="Zepto", ATTR{[dmi/id]product_name}=="Znote 6615WD", RUN+="keyboard-force-release.sh $devpath common-volume-keys"
+ 
+diff --git a/src/udev/keymap/95-keymap.rules b/src/udev/keymap/95-keymap.rules
+index 945b131..a13063e 100644
+--- a/src/udev/keymap/95-keymap.rules
++++ b/src/udev/keymap/95-keymap.rules
+@@ -98,6 +98,7 @@ ENV{DMI_VENDOR}=="Hewlett-Packard", ATTR{[dmi/id]product_name}=="Presario 2100*"
+ ENV{DMI_VENDOR}=="Hewlett-Packard", ATTR{[dmi/id]product_name}=="HP G62 Notebook PC", RUN+="keymap $name 0xB2 www"
+ ENV{DMI_VENDOR}=="Hewlett-Packard", ATTR{[dmi/id]product_name}=="HP ProBook*", RUN+="keymap $name 0xF8 rfkill 0xB2 www"
+ ENV{DMI_VENDOR}=="Hewlett-Packard", ATTR{[dmi/id]product_name}=="HP EliteBook 8440p", RUN+="keymap $name hewlett-packard_elitebook-8440p"
++ENV{DMI_VENDOR}=="Hewlett-Packard", ATTR{[dmi/id]product_name}=="HDX9494NR", RUN+="keymap $name hewlett-packard-hdx9494nr"
+ # HP Pavillion dv6315ea has empty DMI_VENDOR
+ ATTR{[dmi/id]board_vendor}=="Quanta", ATTR{[dmi/id]board_name}=="30B7", ATTR{[dmi/id]board_version}=="65.2B", RUN+="keymap $name 0x88 media" # "quick play
+ 
diff --git a/0073-keymap-Add-HP-HDX-9494NR-Fix-touchpad-keys.patch b/0073-keymap-Add-HP-HDX-9494NR-Fix-touchpad-keys.patch
new file mode 100644
index 0000000..b2958fb
--- /dev/null
+++ b/0073-keymap-Add-HP-HDX-9494NR-Fix-touchpad-keys.patch
@@ -0,0 +1,23 @@
+From e739715f7ddc8f748845ef8c95c9e35780e3cedd Mon Sep 17 00:00:00 2001
+From: Martin Pitt <martinpitt at gnome.org>
+Date: Mon, 28 Jan 2013 16:21:51 +0100
+Subject: [PATCH] keymap: Add HP HDX 9494NR: Fix touchpad keys
+
+Previous commit had them the wrong way around.
+
+https://bugzilla.redhat.com/show_bug.cgi?id=757928
+(cherry picked from commit 5b56ba707fcd0242d79264c7064563cc8ad81977)
+---
+ keymaps/hewlett-packard-hdx9494nr | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/keymaps/hewlett-packard-hdx9494nr b/keymaps/hewlett-packard-hdx9494nr
+index f3484e1..9221787 100644
+--- a/keymaps/hewlett-packard-hdx9494nr
++++ b/keymaps/hewlett-packard-hdx9494nr
+@@ -1,3 +1,3 @@
+ 0xB2 www # FnF3
+-0xD8 f22 # touchpad off
+-0xD9 f23 # touchpad on
++0xD8 f23 # touchpad off
++0xD9 f22 # touchpad on
diff --git a/systemd.spec b/systemd.spec
index 8e12b63..c5fa21e 100644
--- a/systemd.spec
+++ b/systemd.spec
@@ -14,7 +14,7 @@ Name:           systemd
 Url:            http://www.freedesktop.org/wiki/Software/systemd
 
 Version:        197
-Release:        1%{?gitcommit:.git%{gitcommit}}%{?dist}.1
+Release:        1%{?gitcommit:.git%{gitcommit}}%{?dist}.2
 # For a breakdown of the licensing, see README
 License:        LGPLv2+ and MIT and GPLv2+
 Summary:        A System and Service Manager
@@ -90,6 +90,69 @@ Patch0009:      0009-man-systemd-bootchart.xml-fix-typo.patch
 Patch0010:      0010-man-systemd.unit.xml-fix-typos.patch
 Patch0011:      0011-dbus-properly-serialize-calendar-timer-data.patch
 Patch0012:      0012-udev-Fix-device-matching-in-the-accelerometer.patch
+# Revert more incompatibilities
+Patch0013:      0013-F18-Revert-udev-network-device-renaming-immediately-.patch
+Patch0014:      0014-F18-Revert-udev-set-device-node-permissions-only-at-.patch
+
+Patch0015:      0015-systemctl-honour-inhibitors-when-shutting-down-or-en.patch
+Patch0016:      0016-man-localectl-s-set-keyboard-set-keymap.patch
+Patch0017:      0017-locale-make-sense-of-dvorak-alt-intel-X-variant-in-m.patch
+Patch0018:      0018-core-document-that-JoinControllers-might-be-ineffect.patch
+Patch0019:      0019-service-for-Type-forking-services-ignore-exit-status.patch
+Patch0020:      0020-systemctl-don-t-hit-an-assert-if-we-try-to-reboot-an.patch
+Patch0021:      0021-systemctl-honour-inhibitors-only-when-running-unpriv.patch
+Patch0022:      0022-logind-ignore-non-tty-non-x11-session-when-checking-.patch
+Patch0023:      0023-vconsole-upload-font-to-dev-tty1-and-copy-it-to-all-.patch
+Patch0024:      0024-man-link-in-wiki-documentation-about-network.target.patch
+Patch0025:      0025-man-link-in-API-FS-documentation-from-the-wiki.patch
+Patch0026:      0026-vconsole-copy-font-to-tty1-15.patch
+Patch0027:      0027-localectl-fix-typo-in-man-page.patch
+Patch0028:      0028-man-correct-order-of-precedence-for-fstab-units.patch
+Patch0029:      0029-units-add-reference-to-new-wiki-page-to-all-api-moun.patch
+Patch0030:      0030-man-add-reference-to-wiki-doc-from-DefaultController.patch
+Patch0031:      0031-vconsole-use-dev-vcsa1-15-to-check-for-allocated-VTs.patch
+Patch0032:      0032-core-use-correct-argument-of-type-JobResult.patch
+Patch0033:      0033-journalctl-quit-on-I-O-error.patch
+Patch0034:      0034-core-do-not-make-sockets-dependent-on-lo.patch
+Patch0035:      0035-load-fragment-replace-specifiers-in-path-unit-s-Unit.patch
+Patch0036:      0036-load-fragment-fix-bad-memory-access.patch
+Patch0037:      0037-shutdown-in-the-final-umount-loop-don-t-use-MNT_FORC.patch
+Patch0038:      0038-shutdown-ignore-loop-devices-without-a-backing-file.patch
+Patch0039:      0039-systemctl-loginctl-cgls-do-not-ellipsize-cgroup-memb.patch
+Patch0040:      0040-man-typo-fixes.patch
+Patch0041:      0041-dbus-add-Unit-s-PartOf-and-ConsistsOf-deps-to-intros.patch
+Patch0042:      0042-units-for-all-unit-settings-that-take-lists-allow-th.patch
+Patch0043:      0043-service-properly-signal-permanent-failure-of-a-servi.patch
+Patch0044:      0044-util-fix-bad-memory-access.patch
+Patch0045:      0045-hwdb-update.patch
+Patch0046:      0046-nspawn-add-audit-caps-to-default-set-to-keep.patch
+Patch0047:      0047-man-update-suggested-yum-command-line-in-nspawn-1.patch
+Patch0048:      0048-tmpfiles-do-not-make-run-nologin-executable.patch
+Patch0049:      0049-shutdown-loop-convert-to-enumerate-match.patch
+Patch0050:      0050-Fix-some-typos.patch
+Patch0051:      0051-man-clearify-the-meaning-of-timeout-0-for-password-a.patch
+Patch0052:      0052-configure.ac-combine-Wformat-options-into-one-argume.patch
+Patch0053:      0053-logind-only-allow-one-shutdown-sleep-action-to-be-qu.patch
+Patch0054:      0054-hwdb-update.patch
+Patch0055:      0055-service-really-stop-watchdog-timer-when-stopping.patch
+Patch0056:      0056-service-make-sure-the-watchdog-timer-is-not-restarte.patch
+Patch0057:      0057-core-Set-source-for-mountinfo-.mount-units.patch
+Patch0058:      0058-man-systemd.exec-explicit-Environment-assignment.patch
+Patch0059:      0059-man-mention-proc-self-mountinfo-in-systemd.mount-5.patch
+Patch0060:      0060-selinux-access-Delete-debugging-message-logged-as-an.patch
+Patch0061:      0061-selinux-we-don-t-need-that-many-debug-messages-by-de.patch
+Patch0062:      0062-logind-send-Resumed-signal-after-we-come-back-from-s.patch
+Patch0063:      0063-logind-add-UnlockSessions-clal-to-complement-LockSes.patch
+Patch0064:      0064-loginctl-show-seat-master-and-uaccess-devices-in-sea.patch
+Patch0065:      0065-loginctl-don-t-show-UACCESS-info-in-device-tree.patch
+Patch0066:      0066-logind-rework-delay-inhibition-logic.patch
+Patch0067:      0067-tmpfiles-introduce-type-X.patch
+Patch0068:      0068-job-fix-merging-with-ignore-dependencies.patch
+Patch0069:      0069-nspawn-assume-stdout-is-always-writable-if-it-does-n.patch
+Patch0070:      0070-man-mention-that-PrivateTmp-means-var-tmp-too.patch
+Patch0071:      0071-keymap-Add-support-for-the-brower-hotkey-on-the-HP-P.patch
+Patch0072:      0072-keymap-Add-HP-HDX-9494NR.patch
+Patch0073:      0073-keymap-Add-HP-HDX-9494NR-Fix-touchpad-keys.patch
 
 Obsoletes:      SysVinit < 2.86-24, sysvinit < 2.86-24
 Provides:       SysVinit = 2.86-24, sysvinit = 2.86-24
@@ -730,6 +793,12 @@ fi
 %{_libdir}/pkgconfig/gudev-1.0*
 
 %changelog
+* Mon Jan 28 2013 Michal Schmidt <mschmidt at redhat.com> - 197-1.fc18.2
+- Revert a couple of patches causing surprising breakage.
+- Resolves: #896135, #903716
+- Pick more post-v197 fixes and minor enhancements from upstream.
+- Resolves: #873634, #875531, #860464, #889624, #890827, #756787, #757928
+
 * Sat Jan 12 2013 Michal Schmidt <mschmidt at redhat.com> - 197-1.fc18.1
 - Pick post-v197 fixes.
 


More information about the scm-commits mailing list