[systemd/f20] Backport fixes, documentation, and hwdb changes

Zbigniew Jędrzejewski-Szmek zbyszek at fedoraproject.org
Wed Jan 15 00:53:12 UTC 2014


commit b12ff759bdbdbd6eebd8183de03c0530423bcbfb
Author: Zbigniew Jędrzejewski-Szmek <zbyszek at in.waw.pl>
Date:   Tue Jan 14 19:52:39 2014 -0500

    Backport fixes, documentation, and hwdb changes
    
    Patches which were backed out because of the freeze, are now
    reapplied.

 ...-a-start-job-for-all-units-specified-with.patch |   46 +
 ...-device-ignore-SYSTEMD_WANTS-in-user-mode.patch |    3 -
 ...Fix-memory-leak-in-stdout-journal-streams.patch |   23 +
 0143-man-document-is-enabled-output.patch          |   92 +
 ...-hostnamed-avoid-using-NULL-in-error-path.patch |   32 +
 ...use-correct-who-enum-values-with-KillUnit.patch |   31 +
 ...emd-add-a-start-job-for-all-units-specifi.patch |   49 +
 ...-segfault-if-swap-activity-happens-when-p.patch |   87 +
 0148-kernel-install-add-h-help.patch               |   69 +
 0149-kernel-install-fix-help-output.patch          |   25 +
 ...-wording-and-comma-usage-in-systemd.journ.patch |   67 +
 ...l-entries-from-kbd-model-map-whose-kbd-la.patch |   84 +
 ...name-of-Tajik-kbd-layout-in-kbd-model-map.patch |   22 +
 ...-database-of-Bluetooth-company-identifier.patch |   35 +
 ...-is-journaled-for-short-lived-or-oneshot-.patch |   33 +
 ...udev-hwdb-use-libudev-not-systemd-logging.patch |   62 +
 0156-core-manager-remove-infinite-loop.patch       |   25 +
 ...util-check-for-overflow-in-greedy_realloc.patch |   34 +
 0158-journald-use-a-bit-more-cleanup-magic.patch   |   35 +
 ...rnald-malloc-less-when-streaming-messages.patch |  110 +
 0160-activate-clean-up-inherited-descriptors.patch |   77 +
 ...-in-more-detail-how-SYSTEMD_READY-influen.patch |   95 +
 ...t-run-readahead-done-timers-in-containers.patch |   36 +
 ...-replace-mktemp-with-mkstemp-to-avoid-war.patch |   37 +
 ...-pipe-journalctl-help-output-into-a-pager.patch |   45 +
 ...plain-and-continue-if-machine-has-same-id.patch |   63 +
 0166-man-beef-up-ExecStart-description.patch       |  150 +
 ...advice-to-avoid-setting-the-same-var-more.patch |   53 +
 ...-add-the-plain-option-to-the-help-message.patch |   23 +
 0169-Fix-a-few-resource-leaks-in-error-paths.patch |   67 +
 ...-few-signed-unsigned-format-string-issues.patch |   81 +
 ...rder-to-increase-the-send-recv-buffers-of.patch |   60 +
 ...o-set-SO_SNDBUF-when-spawning-a-service-w.patch |   32 +
 0173-journal-file-protect-against-alloca-0.patch   |   23 +
 0174-man-describe-journalctl-show-cursor.patch     |   42 +
 ...ix-against-theoretical-undefined-behavior.patch |   39 +
 ...wngrade-warning-message-when-dev-kmsg-doe.patch |   24 +
 ...e.c-remove-redundant-assignment-of-variab.patch |   24 +
 ...-stop-a-running-user-manager-from-garbage.patch |   33 +
 ...ices-received-from-udev-are-always-initia.patch |  157 +
 ...eopen-dev-console-each-time-we-call-log_o.patch |   49 +
 ...-log-to-dev-console-and-got-disconnected-.patch |   42 +
 ...en-showing-device-tree-of-seats-with-no-d.patch |   23 +
 ...-explicit-about-option-arguments-that-tak.patch |   52 +
 ...-for-refereed-article-on-Forward-Secure-S.patch |   59 +
 ...zsh-completion-fix-several-issues-in-help.patch |  132 +
 0186-keymap-Refactor-Acer-tables.patch             |  145 +
 ...uce-send-timeout-to-something-more-sensib.patch |   49 +
 0188-DEFAULT_PATH_SPLIT_USR-macro.patch            |   43 +
 ...-generator-Do-not-try-to-fsck-non-devices.patch |   28 +
 0190-logind-remove-dead-variable.patch             |   37 +
 0191-hwdb-update.patch                             | 4917 ++++++++++++++++++++
 0192-delta-replace-readdir_r-with-readdir.patch    |   31 +
 0193-delta-fix-delta-for-drop-ins.patch            |  375 ++
 ...efix-is-specified-only-show-overrides-the.patch |  251 +
 ...or-and-friends-add-a-newline-after-each-l.patch | 1520 ++++++
 0196-man-units-tmpfiles.d-5-cleanup.patch          |  401 ++
 ...ntroduce-the-concept-of-unsafe-operations.patch |  281 ++
 ...onfig-fix-useless-check-for-swapfile-type.patch |   43 +
 ...make-sure-b-foobar-cannot-be-misunderstoo.patch |  178 +
 0200-man-resolve-word-omissions.patch              |  725 +++
 0201-man-improvements-to-comma-placement.patch     |  507 ++
 0202-man-grammar-and-wording-improvements.patch    |   79 +
 0203-man-document-fail-nofail-auto-noauto.patch    |  130 +
 ...-description-of-is-enabled-returned-value.patch |   22 +
 0205-man-fix-Type-reference.patch                  |   23 +
 0206-man-fix-Type-reference-v2.patch               |   37 +
 ...-database-of-Bluetooth-company-identifier.patch |   38 +
 ...-man-add-a-note-about-propagating-signals.patch |   61 +
 ...-man-include-autoconf-snippet-in-daemon-7.patch |   41 +
 ...emd-python-fix-setting-of-exception-codes.patch |  325 ++
 ...temd-python-fix-listen_fds-under-Python-2.patch |   22 +
 ...on-some-more-subtle-points-in-systemd.soc.patch |  120 +
 0213-tmpfiles-rename-unsafe-to-boot.patch          |  119 +
 ...g-Dereference-pointer-before-check-for-NU.patch |   47 +
 0215-sleep-config-fix-double-free.patch            |   99 +
 0216-rules-drivers-do-not-reset-RUN-list.patch     |   33 +
 ...ager-print-info-about-interesting-signals.patch |   45 +
 ...e-check-if-mainpid-matches-only-if-it-is-.patch |   26 +
 0219-man-typo-fix.patch                            |   22 +
 ...ap-remove-if-else-with-the-same-data-path.patch |   29 +
 0221-hwdb-update.patch                             |  769 +++
 ...ournal-Add-missing-byte-order-conversions.patch |   58 +
 ...wdb-change-key-mappings-for-Samsung-90X3A.patch |   39 +
 0224-hwdb-add-Samsung-700G.patch                   |   22 +
 ...b-remove-duplicate-entry-for-Samsung-700Z.patch |   28 +
 0226-hwdb-fix-match-for-Thinkpad-X201-tablet.patch |   22 +
 ...gnize-different-Toshiba-Satellite-capital.patch |   26 +
 0228-sleep.c-fix-typo.patch                        |   22 +
 ...nsure-that-d_type-will-be-set-on-every-fs.patch |   22 +
 ...n-t-allow-label_fix-to-print-ENOENT-when-.patch |   33 +
 ...-which-variables-will-be-expanded-in-Exec.patch |   86 +
 ...pport-for-Toshiba-Satellite-P75-A7200-key.patch |   28 +
 ...-access-to-munmapped-memory-in-sd_journal.patch |  321 ++
 ...t-auto-generator-skip-nonexistent-devices.patch |   32 +
 ...nerator-use-EBADSLT-code-when-unable-to-d.patch |   38 +
 ...o-not-free-space-when-disk-space-runs-low.patch |  265 ++
 0237-man-add-busctl-1.patch                        |  239 +
 kernel-install-grubby.patch                        |   11 +-
 systemd.spec                                       |  147 +-
 100 files changed, 15507 insertions(+), 32 deletions(-)
---
diff --git a/0140-systemd-add-a-start-job-for-all-units-specified-with.patch b/0140-systemd-add-a-start-job-for-all-units-specified-with.patch
new file mode 100644
index 0000000..269ab55
--- /dev/null
+++ b/0140-systemd-add-a-start-job-for-all-units-specified-with.patch
@@ -0,0 +1,46 @@
+From 043a559ff3732439fc61872a6320ee0a05dd088f Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Thu, 5 Dec 2013 00:41:12 -0500
+Subject: [PATCH] systemd: add a start job for all units specified with
+ SYSTEMD_WANTS=
+
+---
+ src/core/device.c | 14 +++++++++++---
+ 1 file changed, 11 insertions(+), 3 deletions(-)
+
+diff --git a/src/core/device.c b/src/core/device.c
+index 5397bd6..610fe88 100644
+--- a/src/core/device.c
++++ b/src/core/device.c
+@@ -281,7 +281,8 @@ static int device_update_unit(Manager *m, struct udev_device *dev, const char *p
+                         size_t l;
+ 
+                         FOREACH_WORD_QUOTED(w, l, wants, state) {
+-                                char *e, *n;
++                                _cleanup_free_ char *e, *n = NULL;
++                                Unit *other;
+ 
+                                 e = strndup(w, l);
+                                 if (!e) {
+@@ -293,12 +294,19 @@ static int device_update_unit(Manager *m, struct udev_device *dev, const char *p
+                                         r = -ENOMEM;
+                                         goto fail;
+                                 }
+-                                free(e);
+ 
+                                 r = unit_add_dependency_by_name(u, UNIT_WANTS, n, NULL, true);
+-                                free(n);
+                                 if (r < 0)
+                                         goto fail;
++
++                                other = manager_get_unit(u->manager, n);
++                                if (!other || !unit_can_start(other))
++                                        continue;
++
++                                r = manager_add_job(u->manager, JOB_START, other, JOB_REPLACE, true, NULL, NULL);
++                                if (r < 0)
++                                        log_warning("Failed to add job %s/%s, ignoring: %s.",
++                                                    other->id, job_type_to_string(JOB_START), strerror(-r));
+                         }
+                 }
+         }
diff --git a/0141-core-device-ignore-SYSTEMD_WANTS-in-user-mode.patch b/0141-core-device-ignore-SYSTEMD_WANTS-in-user-mode.patch
index b28dbfd..de66012 100644
--- a/0141-core-device-ignore-SYSTEMD_WANTS-in-user-mode.patch
+++ b/0141-core-device-ignore-SYSTEMD_WANTS-in-user-mode.patch
@@ -23,6 +23,3 @@ index 610fe88..e02c207 100644
                          char *state, *w;
                          size_t l;
  
--- 
-1.8.4.2
-
diff --git a/0142-Fix-memory-leak-in-stdout-journal-streams.patch b/0142-Fix-memory-leak-in-stdout-journal-streams.patch
new file mode 100644
index 0000000..7f86517
--- /dev/null
+++ b/0142-Fix-memory-leak-in-stdout-journal-streams.patch
@@ -0,0 +1,23 @@
+From 371ce08fb9814a39ca2f984d6040aaf0f6c172e8 Mon Sep 17 00:00:00 2001
+From: Dan McGee <dan at archlinux.org>
+Date: Sun, 8 Dec 2013 14:33:45 -0600
+Subject: [PATCH] Fix memory leak in stdout journal streams
+
+Just as 'identifier' is strdup-ed and freed, we need to do the same for
+unit_id.
+---
+ src/journal/journald-stream.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/src/journal/journald-stream.c b/src/journal/journald-stream.c
+index 9c4efec..4080622 100644
+--- a/src/journal/journald-stream.c
++++ b/src/journal/journald-stream.c
+@@ -339,6 +339,7 @@ void stdout_stream_free(StdoutStream *s) {
+ #endif
+ 
+         free(s->identifier);
++        free(s->unit_id);
+         free(s);
+ }
+ 
diff --git a/0143-man-document-is-enabled-output.patch b/0143-man-document-is-enabled-output.patch
new file mode 100644
index 0000000..2f4fdd8
--- /dev/null
+++ b/0143-man-document-is-enabled-output.patch
@@ -0,0 +1,92 @@
+From 77e9da01ad6383aab4d50a00b705ec96f16cb55e Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Sun, 8 Dec 2013 18:56:16 -0500
+Subject: [PATCH] man: document 'is-enabled' output
+
+https://bugzilla.redhat.com/show_bug.cgi?id=953077
+---
+ man/systemctl.xml | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++-----
+ 1 file changed, 59 insertions(+), 5 deletions(-)
+
+diff --git a/man/systemctl.xml b/man/systemctl.xml
+index 166282c..b4bc15d 100644
+--- a/man/systemctl.xml
++++ b/man/systemctl.xml
+@@ -437,7 +437,7 @@ systemctl start foo
+ 
+         <listitem>
+           <para>When used with <command>enable</command>,
+-          <command>disable</command>, <command>is-enabled</command>
++          <command>disable</command>,
+           (and related commands), make changes only temporarily, so
+           that they are lost on the next reboot. This will have the
+           effect that changes are not made in subdirectories of
+@@ -885,10 +885,64 @@ kobject-uevent 1 systemd-udevd-kernel.socket systemd-udevd.service
+ 
+           <listitem>
+             <para>Checks whether any of the specified unit files are
+-            enabled (as with <command>enable</command>). Returns an exit
+-            code of 0 if at least one is enabled, non-zero
+-            otherwise. Prints the current enable status. To suppress
+-            this output, use <option>--quiet</option>.</para>
++            enabled (as with <command>enable</command>). Returns an
++            exit code of 0 if at least one is enabled, non-zero
++            otherwise. Prints the current enable status (see table).
++            To suppress this output, use <option>--quiet</option>.
++            </para>
++
++            <table>
++              <title>
++                <command>is-enabled</command> output
++              </title>
++
++              <tgroup cols='3'>
++                <thead>
++                  <row>
++                    <entry>Printed string</entry>
++                    <entry>Meaning</entry>
++                    <entry>Return value</entry>
++                  </row>
++                </thead>
++                <tbody>
++                  <row>
++                    <entry><literal>enabled</literal></entry>
++                    <entry morerows='1'>Enabled through a symlink in <filename>.wants</filename> directory (permanently or just in <filename>/run</filename>)</entry>
++                    <entry morerows='1'>0</entry>
++                  </row>
++                  <row>
++                    <entry><literal>enabled-runtime</literal></entry>
++                  </row>
++                  <row>
++                    <entry><literal>linked</literal></entry>
++                    <entry morerows='1'>Made available through a symlink to the unit file (permanently or just in <filename>/run</filename>)</entry>
++                    <entry morerows='1'>1</entry>
++                  </row>
++                  <row>
++                    <entry><literal>linked-runtime</literal></entry>
++                  </row>
++                  <row>
++                    <entry><literal>masked</literal></entry>
++                    <entry morerows='1'>Disabled entirely (permanently or just in <filename>/run</filename>)</entry>
++                    <entry morerows='1'>1</entry>
++                  </row>
++                  <row>
++                    <entry><literal>masked-runtime</literal></entry>
++                  </row>
++                  <row>
++                    <entry><literal>static</literal></entry>
++                    <entry>Unit is not enabled, but has no provisions for enabling in [Install] section</entry>
++                    <entry>1</entry>
++                  </row>
++                  <row>
++                    <entry><literal>disabled</literal></entry>
++                    <entry>Unit is not enabled</entry>
++                    <entry>1</entry>
++                  </row>
++                </tbody>
++              </tgroup>
++            </table>
++
+           </listitem>
+         </varlistentry>
+ 
diff --git a/0144-hostnamed-avoid-using-NULL-in-error-path.patch b/0144-hostnamed-avoid-using-NULL-in-error-path.patch
new file mode 100644
index 0000000..8d62943
--- /dev/null
+++ b/0144-hostnamed-avoid-using-NULL-in-error-path.patch
@@ -0,0 +1,32 @@
+From d4ae9b53caa77d17528d36610ad70dd2eb1bb54c Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Mon, 6 Jan 2014 12:16:55 +0000
+Subject: [PATCH] hostnamed: avoid using NULL in error path
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1047335
+---
+ src/hostname/hostnamed.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/hostname/hostnamed.c b/src/hostname/hostnamed.c
+index 6a43aeb..0c24b65 100644
+--- a/src/hostname/hostnamed.c
++++ b/src/hostname/hostnamed.c
+@@ -637,7 +637,7 @@ static int connect_bus(DBusConnection **_bus) {
+         if (!bus) {
+                 log_error("Failed to get system D-Bus connection: %s", bus_error_message(&error));
+                 r = -ECONNREFUSED;
+-                goto fail;
++                goto fail2;
+         }
+ 
+         dbus_connection_set_exit_on_disconnect(bus, FALSE);
+@@ -669,7 +669,7 @@ static int connect_bus(DBusConnection **_bus) {
+ fail:
+         dbus_connection_close(bus);
+         dbus_connection_unref(bus);
+-
++fail2:
+         dbus_error_free(&error);
+ 
+         return r;
diff --git a/0145-logind-use-correct-who-enum-values-with-KillUnit.patch b/0145-logind-use-correct-who-enum-values-with-KillUnit.patch
new file mode 100644
index 0000000..0c1d66a
--- /dev/null
+++ b/0145-logind-use-correct-who-enum-values-with-KillUnit.patch
@@ -0,0 +1,31 @@
+From 524147c1ef991edf4432aac51c880b363b4402df Mon Sep 17 00:00:00 2001
+From: Marius Vollmer <mvollmer at redhat.com>
+Date: Thu, 31 Oct 2013 15:55:07 +0200
+Subject: [PATCH] logind: use correct "who" enum values with KillUnit.
+
+---
+ src/login/logind-dbus.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c
+index bb85c7d..583d62e 100644
+--- a/src/login/logind-dbus.c
++++ b/src/login/logind-dbus.c
+@@ -2799,7 +2799,7 @@ int manager_kill_unit(Manager *manager, const char *unit, KillWho who, int signo
+         assert(manager);
+         assert(unit);
+ 
+-        w = who == KILL_LEADER ? "process" : "cgroup";
++        w = who == KILL_LEADER ? "control" : "all";
+         assert_cc(sizeof(signo) == sizeof(int32_t));
+ 
+         r = bus_method_call_with_reply(
+@@ -2815,7 +2815,7 @@ int manager_kill_unit(Manager *manager, const char *unit, KillWho who, int signo
+                         DBUS_TYPE_INT32, &signo,
+                         DBUS_TYPE_INVALID);
+         if (r < 0) {
+-                log_error("Failed to stop unit %s: %s", unit, bus_error(error, r));
++                log_error("Failed to kill unit %s: %s", unit, bus_error(error, r));
+                 return r;
+         }
+ 
diff --git a/0146-Revert-systemd-add-a-start-job-for-all-units-specifi.patch b/0146-Revert-systemd-add-a-start-job-for-all-units-specifi.patch
new file mode 100644
index 0000000..bb465d9
--- /dev/null
+++ b/0146-Revert-systemd-add-a-start-job-for-all-units-specifi.patch
@@ -0,0 +1,49 @@
+From 106c98f6b08d3b9254b419b09bc4ceed1963d7aa Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Tue, 14 Jan 2014 17:31:00 -0500
+Subject: [PATCH] Revert "systemd: add a start job for all units specified with
+ SYSTEMD_WANTS="
+
+This reverts commit 043a559ff3732439fc61872a6320ee0a05dd088f.
+
+This was a mistake, and was reverted upstream.
+---
+ src/core/device.c | 14 +++-----------
+ 1 file changed, 3 insertions(+), 11 deletions(-)
+
+diff --git a/src/core/device.c b/src/core/device.c
+index e02c207..f79c206 100644
+--- a/src/core/device.c
++++ b/src/core/device.c
+@@ -282,8 +282,7 @@ static int device_update_unit(Manager *m, struct udev_device *dev, const char *p
+                         size_t l;
+ 
+                         FOREACH_WORD_QUOTED(w, l, wants, state) {
+-                                _cleanup_free_ char *e, *n = NULL;
+-                                Unit *other;
++                                char *e, *n;
+ 
+                                 e = strndup(w, l);
+                                 if (!e) {
+@@ -295,19 +294,12 @@ static int device_update_unit(Manager *m, struct udev_device *dev, const char *p
+                                         r = -ENOMEM;
+                                         goto fail;
+                                 }
++                                free(e);
+ 
+                                 r = unit_add_dependency_by_name(u, UNIT_WANTS, n, NULL, true);
++                                free(n);
+                                 if (r < 0)
+                                         goto fail;
+-
+-                                other = manager_get_unit(u->manager, n);
+-                                if (!other || !unit_can_start(other))
+-                                        continue;
+-
+-                                r = manager_add_job(u->manager, JOB_START, other, JOB_REPLACE, true, NULL, NULL);
+-                                if (r < 0)
+-                                        log_warning("Failed to add job %s/%s, ignoring: %s.",
+-                                                    other->id, job_type_to_string(JOB_START), strerror(-r));
+                         }
+                 }
+         }
diff --git a/0147-core-do-not-segfault-if-swap-activity-happens-when-p.patch b/0147-core-do-not-segfault-if-swap-activity-happens-when-p.patch
new file mode 100644
index 0000000..dd7a6a3
--- /dev/null
+++ b/0147-core-do-not-segfault-if-swap-activity-happens-when-p.patch
@@ -0,0 +1,87 @@
+From 85a77eea8d7114675602a33d2e067fd7c4ad0624 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Sun, 12 Jan 2014 11:38:56 -0500
+Subject: [PATCH] core: do not segfault if swap activity happens when
+ /proc/swaps is not open
+
+In https://bugzilla.redhat.com/show_bug.cgi?id=969795 systemd crashes
+in swap_dispatch_reload called from manager_loop becuase m->proc_swaps
+is NULL. It can legitimately be NULL if something went wrong when
+initially enumerating swap devices when starting the manager. This
+is probably a sign of significant trouble, but let's do our best
+to recover.
+---
+ src/core/swap.c | 45 +++++++++++++++++++++++++++++----------------
+ 1 file changed, 29 insertions(+), 16 deletions(-)
+
+diff --git a/src/core/swap.c b/src/core/swap.c
+index 147f710..f295b65 100644
+--- a/src/core/swap.c
++++ b/src/core/swap.c
+@@ -1068,14 +1068,40 @@ static int swap_load_proc_swaps(Manager *m, bool set_flags) {
+         return r;
+ }
+ 
++static int open_proc_swaps(Manager *m) {
++        if (!m->proc_swaps) {
++                struct epoll_event ev = {
++                        .events = EPOLLPRI,
++                        .data.ptr = &m->swap_watch,
++                };
++
++                m->proc_swaps = fopen("/proc/swaps", "re");
++                if (!m->proc_swaps)
++                        return (errno == ENOENT) ? 0 : -errno;
++
++                m->swap_watch.type = WATCH_SWAP;
++                m->swap_watch.fd = fileno(m->proc_swaps);
++
++                if (epoll_ctl(m->epoll_fd, EPOLL_CTL_ADD, m->swap_watch.fd, &ev) < 0)
++                        return -errno;
++        }
++
++        return 0;
++}
++
+ int swap_dispatch_reload(Manager *m) {
+         /* This function should go as soon as the kernel properly notifies us */
++        int r;
+ 
+         if (_likely_(!m->request_reload))
+                 return 0;
+ 
+         m->request_reload = false;
+ 
++        r = open_proc_swaps(m);
++        if (r < 0)
++                return r;
++
+         return swap_fd_event(m, EPOLLPRI);
+ }
+ 
+@@ -1225,22 +1251,9 @@ static int swap_enumerate(Manager *m) {
+         int r;
+         assert(m);
+ 
+-        if (!m->proc_swaps) {
+-                struct epoll_event ev = {
+-                        .events = EPOLLPRI,
+-                        .data.ptr = &m->swap_watch,
+-                };
+-
+-                m->proc_swaps = fopen("/proc/swaps", "re");
+-                if (!m->proc_swaps)
+-                        return (errno == ENOENT) ? 0 : -errno;
+-
+-                m->swap_watch.type = WATCH_SWAP;
+-                m->swap_watch.fd = fileno(m->proc_swaps);
+-
+-                if (epoll_ctl(m->epoll_fd, EPOLL_CTL_ADD, m->swap_watch.fd, &ev) < 0)
+-                        return -errno;
+-        }
++        r = open_proc_swaps(m);
++        if (r < 0)
++                return r;
+ 
+         r = swap_load_proc_swaps(m, false);
+         if (r < 0)
diff --git a/0148-kernel-install-add-h-help.patch b/0148-kernel-install-add-h-help.patch
new file mode 100644
index 0000000..fae104a
--- /dev/null
+++ b/0148-kernel-install-add-h-help.patch
@@ -0,0 +1,69 @@
+From cb5fd30c9ca64024335129d393c15a9586433ca2 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Sun, 8 Dec 2013 07:46:46 -0500
+Subject: [PATCH] kernel-install: add -h/--help
+
+---
+ src/kernel-install/kernel-install | 21 ++++++++++++++-------
+ 1 file changed, 14 insertions(+), 7 deletions(-)
+
+diff --git a/src/kernel-install/kernel-install b/src/kernel-install/kernel-install
+index 9d3e75d..f5ff362 100644
+--- a/src/kernel-install/kernel-install
++++ b/src/kernel-install/kernel-install
+@@ -21,9 +21,9 @@
+ 
+ usage()
+ {
+-    echo "Usage:" >&2
+-    echo "        $0 add <kernel-version> <kernel-image>" >&2
+-    echo "        $0 remove <kernel-version> <kernel-image>" >&2
++    echo "Usage:"
++    echo "        $0 add KERNEL-VERSION KERNEL-IMAGE"
++    echo "        $0 remove KERNEL-VERSION KERNEL-IMAGE"
+ }
+ 
+ dropindirs_sort()
+@@ -54,6 +54,13 @@ dropindirs_sort()
+ 
+ export LC_COLLATE=C
+ 
++for i in "$@"; do
++    if [ "$i" == "--help" -o "$i" == "-h" ]; then
++        usage
++        exit 0
++    fi
++done
++
+ if [[ "${0##*/}" == 'installkernel' ]]; then
+     COMMAND='add'
+ else
+@@ -75,7 +82,7 @@ if ! [[ $MACHINE_ID ]]; then
+ fi
+ 
+ if [[ ! $COMMAND ]] || [[ ! $KERNEL_VERSION ]]; then
+-    usage
++    echo "Not enough arguments" >&2
+     exit 1
+ fi
+ 
+@@ -90,8 +97,8 @@ readarray -t PLUGINS < <(
+ 
+ case $COMMAND in
+     add)
+-        if [[ ! $KERNEL_IMAGE ]]; then
+-            usage
++        if [[ ! "$KERNEL_IMAGE" ]]; then
++            echo "Command 'add' requires an argument" >&2
+             exit 1
+         fi
+ 
+@@ -121,7 +128,7 @@ case $COMMAND in
+         ;;
+ 
+     *)
+-        usage
++        echo "Unknown command '$COMMAND'" >&2
+         exit 1
+         ;;
+ esac
diff --git a/0149-kernel-install-fix-help-output.patch b/0149-kernel-install-fix-help-output.patch
new file mode 100644
index 0000000..2ed9d61
--- /dev/null
+++ b/0149-kernel-install-fix-help-output.patch
@@ -0,0 +1,25 @@
+From 245b830c77bfbac0346bd1df3fa5d6b81d77014a Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?S=C3=A9bastien=20Luttringer?= <seblu at seblu.net>
+Date: Thu, 5 Dec 2013 02:55:05 +0100
+Subject: [PATCH] kernel-install: fix help output
+
+Kernel install doesn't need the second argument on his command line when
+removing.
+This is correctly documented in the man page.
+---
+ src/kernel-install/kernel-install | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/kernel-install/kernel-install b/src/kernel-install/kernel-install
+index f5ff362..3ae1d77 100644
+--- a/src/kernel-install/kernel-install
++++ b/src/kernel-install/kernel-install
+@@ -23,7 +23,7 @@ usage()
+ {
+     echo "Usage:"
+     echo "        $0 add KERNEL-VERSION KERNEL-IMAGE"
+-    echo "        $0 remove KERNEL-VERSION KERNEL-IMAGE"
++    echo "        $0 remove KERNEL-VERSION"
+ }
+ 
+ dropindirs_sort()
diff --git a/0150-man-improve-wording-and-comma-usage-in-systemd.journ.patch b/0150-man-improve-wording-and-comma-usage-in-systemd.journ.patch
new file mode 100644
index 0000000..69eb561
--- /dev/null
+++ b/0150-man-improve-wording-and-comma-usage-in-systemd.journ.patch
@@ -0,0 +1,67 @@
+From 07e7e0378c3f2b73e56e886f7a4b59068dbbbc55 Mon Sep 17 00:00:00 2001
+From: "Jason St. John" <jstjohn at purdue.edu>
+Date: Tue, 10 Dec 2013 00:10:03 -0500
+Subject: [PATCH] man: improve wording and comma usage in
+ systemd.journal-fields(7)
+
+Improve wording under "Description" and "_KERNEL_DEVICE="
+---
+ man/systemd.journal-fields.xml | 16 ++++++++--------
+ 1 file changed, 8 insertions(+), 8 deletions(-)
+
+diff --git a/man/systemd.journal-fields.xml b/man/systemd.journal-fields.xml
+index 8a15598..bb89ed5 100644
+--- a/man/systemd.journal-fields.xml
++++ b/man/systemd.journal-fields.xml
+@@ -51,14 +51,14 @@
+                 <title>Description</title>
+ 
+                 <para>Entries in the journal resemble an environment
+-                block in their syntax, however with fields that can
++                block in their syntax but with fields that can
+                 include binary data. Primarily, fields are formatted
+                 UTF-8 text strings, and binary formatting is used only
+                 where formatting as UTF-8 text strings makes little
+                 sense. New fields may freely be defined by
+                 applications, but a few fields have special
+                 meaning. All fields with special meanings are
+-                optional. In some cases fields may appear more than
++                optional. In some cases, fields may appear more than
+                 once per entry.</para>
+         </refsect1>
+ 
+@@ -176,7 +176,7 @@
+                                 <term><varname>_UID=</varname></term>
+                                 <term><varname>_GID=</varname></term>
+                                 <listitem>
+-                                        <para>The process, user and
++                                        <para>The process, user, and
+                                         group ID of the process the
+                                         journal entry originates from
+                                         formatted as a decimal
+@@ -190,7 +190,7 @@
+                                 <term><varname>_CMDLINE=</varname></term>
+                                 <listitem>
+                                         <para>The name, the executable
+-                                        path and the command line of
++                                        path, and the command line of
+                                         the process the journal entry
+                                         originates from.</para>
+                                 </listitem>
+@@ -389,12 +389,12 @@
+                                         the major and minor of the
+                                         device node, separated by <literal>:</literal>
+                                         and prefixed by <literal>b</literal>. Similar
+-                                        for character devices, but
++                                        for character devices but
+                                         prefixed by <literal>c</literal>. For network
+-                                        devices the interface index,
++                                        devices, this is the interface index
+                                         prefixed by <literal>n</literal>. For all other
+-                                        devices <literal>+</literal> followed by the
+-                                        subsystem name, followed by
++                                        devices, this is the subsystem name
++                                        prefixed by <literal>+</literal>, followed by
+                                         <literal>:</literal>, followed by the kernel
+                                         device name.</para>
+                                 </listitem>
diff --git a/0151-drop-several-entries-from-kbd-model-map-whose-kbd-la.patch b/0151-drop-several-entries-from-kbd-model-map-whose-kbd-la.patch
new file mode 100644
index 0000000..6dceeae
--- /dev/null
+++ b/0151-drop-several-entries-from-kbd-model-map-whose-kbd-la.patch
@@ -0,0 +1,84 @@
+From 26dcf06766bc1fc533d301831838e9e302315134 Mon Sep 17 00:00:00 2001
+From: Adam Williamson <awilliam at redhat.com>
+Date: Mon, 9 Dec 2013 21:58:34 -0800
+Subject: [PATCH] drop several entries from kbd-model-map whose kbd layouts do
+ not exist
+
+kbd-model-map was generated from system-config-keyboard's keyboard_models.py.
+Several of the kbd layouts referred in that file do not exist and, so far as I
+can tell, never did. I believe these entries existed simply to provide the xkb
+configuration information for those layouts, and there never were matching kbd
+entries; the kbd names were entirely notional, to satisfy the need for some
+entry or other in that field.
+
+For systemd, the only function of kbd-model-map is to 'match' kbd and xkb
+configurations, so it does not make any sense to maintain entries for cases
+where only one or the other exists in this context.
+---
+ src/locale/kbd-model-map | 12 ------------
+ 1 file changed, 12 deletions(-)
+
+diff --git a/src/locale/kbd-model-map b/src/locale/kbd-model-map
+index 1fe9bca..78c7887 100644
+--- a/src/locale/kbd-model-map
++++ b/src/locale/kbd-model-map
+@@ -4,22 +4,18 @@ sg			ch	pc105		de_nodeadkeys	terminate:ctrl_alt_bksp
+ nl			nl	pc105		-		terminate:ctrl_alt_bksp
+ mk-utf			mk,us	pc105		-		terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll
+ trq			tr	pc105		-		terminate:ctrl_alt_bksp
+-guj			in,us	pc105		guj		terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll
+ uk			gb	pc105		-		terminate:ctrl_alt_bksp
+ is-latin1		is	pc105		-		terminate:ctrl_alt_bksp
+ de			de	pc105		-		terminate:ctrl_alt_bksp
+-gur			gur,us	pc105		-		terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll
+ la-latin1		latam	pc105		-		terminate:ctrl_alt_bksp
+ us			us	pc105+inet	-		terminate:ctrl_alt_bksp
+ ko			kr	pc105		-		terminate:ctrl_alt_bksp
+ ro-std			ro	pc105		std		terminate:ctrl_alt_bksp
+ de-latin1		de	pc105		-		terminate:ctrl_alt_bksp
+-tml-inscript		in,us	pc105		tam		terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll
+ slovene			si	pc105		-		terminate:ctrl_alt_bksp
+ hu101			hu	pc105		qwerty		terminate:ctrl_alt_bksp
+ jp106			jp	jp106		-		terminate:ctrl_alt_bksp
+ croat			hr	pc105		-		terminate:ctrl_alt_bksp
+-ben-probhat		in,us	pc105		ben_probhat	terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll
+ fi-latin1		fi	pc105		-		terminate:ctrl_alt_bksp
+ it2			it	pc105		-		terminate:ctrl_alt_bksp
+ hu			hu	pc105		-		terminate:ctrl_alt_bksp
+@@ -29,7 +25,6 @@ fr_CH			ch	pc105		fr		terminate:ctrl_alt_bksp
+ dk-latin1		dk	pc105		-		terminate:ctrl_alt_bksp
+ fr			fr	pc105		-		terminate:ctrl_alt_bksp
+ it			it	pc105		-		terminate:ctrl_alt_bksp
+-tml-uni			in,us	pc105		tam_TAB		terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll
+ ua-utf			ua,us	pc105		-		terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll
+ fr-latin1		fr	pc105		-		terminate:ctrl_alt_bksp
+ sg-latin1		ch	pc105		de_nodeadkeys	terminate:ctrl_alt_bksp
+@@ -39,16 +34,12 @@ fr-pc			fr	pc105		-		terminate:ctrl_alt_bksp
+ bg_pho-utf8		bg,us	pc105		,phonetic	terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll
+ it-ibm			it	pc105		-		terminate:ctrl_alt_bksp
+ cz-us-qwertz		cz,us	pc105		-		terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll
+-ar-digits		ara,us	pc105		digits		terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll
+ br-abnt2		br	abnt2		-		terminate:ctrl_alt_bksp
+ ro			ro	pc105		-		terminate:ctrl_alt_bksp
+ us-acentos		us	pc105		intl		terminate:ctrl_alt_bksp
+ pt-latin1		pt	pc105		-		terminate:ctrl_alt_bksp
+ ro-std-cedilla		ro	pc105		std_cedilla	terminate:ctrl_alt_bksp
+ tj			tj	pc105		-		terminate:ctrl_alt_bksp
+-ar-qwerty		ara,us	pc105		qwerty		terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll
+-ar-azerty-digits	ara,us	pc105		azerty_digits	terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll
+-ben			in,us	pc105		ben		terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll
+ de-latin1-nodeadkeys	de	pc105		nodeadkeys	terminate:ctrl_alt_bksp
+ no			no	pc105		-		terminate:ctrl_alt_bksp
+ bg_bds-utf8		bg,us	pc105		-		terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll
+@@ -60,11 +51,8 @@ pl2			pl	pc105		-		terminate:ctrl_alt_bksp
+ es			es	pc105		-		terminate:ctrl_alt_bksp
+ ro-cedilla		ro	pc105		cedilla		terminate:ctrl_alt_bksp
+ ie			ie	pc105		-		terminate:ctrl_alt_bksp
+-ar-azerty		ara,us	pc105		azerty		terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll
+-ar-qwerty-digits	ara,us	pc105		qwerty_digits	terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll
+ et			ee	pc105		-		terminate:ctrl_alt_bksp
+ sk-qwerty		sk	pc105		-		terminate:ctrl_alt_bksp,qwerty
+-dev			dev,us	pc105		-		terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll
+ fr-latin9		fr	pc105		latin9		terminate:ctrl_alt_bksp
+ fr_CH-latin1		ch	pc105		fr		terminate:ctrl_alt_bksp
+ cf			ca	pc105		-		terminate:ctrl_alt_bksp
diff --git a/0152-correct-name-of-Tajik-kbd-layout-in-kbd-model-map.patch b/0152-correct-name-of-Tajik-kbd-layout-in-kbd-model-map.patch
new file mode 100644
index 0000000..b64a443
--- /dev/null
+++ b/0152-correct-name-of-Tajik-kbd-layout-in-kbd-model-map.patch
@@ -0,0 +1,22 @@
+From bc0cbe40cbfde7e8194f6f4b9b17e7102efa35c7 Mon Sep 17 00:00:00 2001
+From: Adam Williamson <awilliam at redhat.com>
+Date: Mon, 9 Dec 2013 22:02:25 -0800
+Subject: [PATCH] correct name of Tajik kbd layout in kbd-model-map
+
+---
+ src/locale/kbd-model-map | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/locale/kbd-model-map b/src/locale/kbd-model-map
+index 78c7887..322c0a9 100644
+--- a/src/locale/kbd-model-map
++++ b/src/locale/kbd-model-map
+@@ -39,7 +39,7 @@ ro			ro	pc105		-		terminate:ctrl_alt_bksp
+ us-acentos		us	pc105		intl		terminate:ctrl_alt_bksp
+ pt-latin1		pt	pc105		-		terminate:ctrl_alt_bksp
+ ro-std-cedilla		ro	pc105		std_cedilla	terminate:ctrl_alt_bksp
+-tj			tj	pc105		-		terminate:ctrl_alt_bksp
++tj_alt-UTF8		tj	pc105		-		terminate:ctrl_alt_bksp
+ de-latin1-nodeadkeys	de	pc105		nodeadkeys	terminate:ctrl_alt_bksp
+ no			no	pc105		-		terminate:ctrl_alt_bksp
+ bg_bds-utf8		bg,us	pc105		-		terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll
diff --git a/0153-hwdb-Update-database-of-Bluetooth-company-identifier.patch b/0153-hwdb-Update-database-of-Bluetooth-company-identifier.patch
new file mode 100644
index 0000000..15b0ddc
--- /dev/null
+++ b/0153-hwdb-Update-database-of-Bluetooth-company-identifier.patch
@@ -0,0 +1,35 @@
+From 4ee475e4786ac69b74a75fd668f0bb8e07bdde2d Mon Sep 17 00:00:00 2001
+From: Marcel Holtmann <marcel at holtmann.org>
+Date: Tue, 10 Dec 2013 03:17:39 -0800
+Subject: [PATCH] hwdb: Update database of Bluetooth company identifiers
+
+---
+ hwdb/20-bluetooth-vendor-product.hwdb | 18 ++++++++++++++++++
+ 1 file changed, 18 insertions(+)
+
+diff --git a/hwdb/20-bluetooth-vendor-product.hwdb b/hwdb/20-bluetooth-vendor-product.hwdb
+index dcc25bb..6f8301f 100644
+--- a/hwdb/20-bluetooth-vendor-product.hwdb
++++ b/hwdb/20-bluetooth-vendor-product.hwdb
+@@ -821,3 +821,21 @@ bluetooth:v010F*
+ 
+ bluetooth:v0110*
+  ID_VENDOR_FROM_DATABASE=Nippon Seiki Co., Ltd.
++
++bluetooth:v0111*
++ ID_VENDOR_FROM_DATABASE=Steelseries ApS
++
++bluetooth:v0112*
++ ID_VENDOR_FROM_DATABASE=vyzybl Inc.
++
++bluetooth:v0113*
++ ID_VENDOR_FROM_DATABASE=Openbrain Technologies, Co., Ltd.
++
++bluetooth:v0114*
++ ID_VENDOR_FROM_DATABASE=Xensr
++
++bluetooth:v0115*
++ ID_VENDOR_FROM_DATABASE=e.solutions
++
++bluetooth:v0116*
++ ID_VENDOR_FROM_DATABASE=1OAK Technologies
diff --git a/0154-Ensure-unit-is-journaled-for-short-lived-or-oneshot-.patch b/0154-Ensure-unit-is-journaled-for-short-lived-or-oneshot-.patch
new file mode 100644
index 0000000..9c35091
--- /dev/null
+++ b/0154-Ensure-unit-is-journaled-for-short-lived-or-oneshot-.patch
@@ -0,0 +1,33 @@
+From d8b3047ccb52c2b55683f2fe12f0674f63d746cb Mon Sep 17 00:00:00 2001
+From: Dan McGee <dan at archlinux.org>
+Date: Sun, 8 Dec 2013 13:27:05 -0600
+Subject: [PATCH] Ensure unit is journaled for short-lived or oneshot processes
+
+In the time it takes to process incoming log messages, the process we
+are logging details for may exit. This means the cgroup data is no
+longer available from '/proc'. Unfortunately, the way the code was
+structured before, we never log _SYSTEMD_UNIT if we don't have this
+cgroup information.
+
+Add an else if case that allows the passed in unit_id to be logged even
+if we couldn't capture cgroup information. This ensures a command like
+`journalctl -u run-XXX` will return all log messages from a oneshot
+process.
+---
+ src/journal/journald-server.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/src/journal/journald-server.c b/src/journal/journald-server.c
+index a0a8e9c..1fcb3d5 100644
+--- a/src/journal/journald-server.c
++++ b/src/journal/journald-server.c
+@@ -626,6 +626,9 @@ static void dispatch_message_real(
+                         }
+ 
+                         free(c);
++                } else if (unit_id) {
++                        x = strappenda("_SYSTEMD_UNIT=", unit_id);
++                        IOVEC_SET_STRING(iovec[n++], x);
+                 }
+ 
+ #ifdef HAVE_SELINUX
diff --git a/0155-libudev-hwdb-use-libudev-not-systemd-logging.patch b/0155-libudev-hwdb-use-libudev-not-systemd-logging.patch
new file mode 100644
index 0000000..e4f88c0
--- /dev/null
+++ b/0155-libudev-hwdb-use-libudev-not-systemd-logging.patch
@@ -0,0 +1,62 @@
+From 4c5b792c88c81d0595a1273804d2cd405140f81d Mon Sep 17 00:00:00 2001
+From: Kay Sievers <kay at vrfy.org>
+Date: Tue, 10 Dec 2013 16:36:45 +0100
+Subject: [PATCH] libudev: hwdb - use libudev not systemd logging
+
+---
+ src/libudev/libudev-hwdb.c | 20 ++++++++++----------
+ 1 file changed, 10 insertions(+), 10 deletions(-)
+
+diff --git a/src/libudev/libudev-hwdb.c b/src/libudev/libudev-hwdb.c
+index de1cb83..ba43b9f 100644
+--- a/src/libudev/libudev-hwdb.c
++++ b/src/libudev/libudev-hwdb.c
+@@ -277,38 +277,38 @@ _public_ struct udev_hwdb *udev_hwdb_new(struct udev *udev) {
+ 
+         hwdb->f = fopen("/etc/udev/hwdb.bin", "re");
+         if (!hwdb->f) {
+-                log_debug("error reading /etc/udev/hwdb.bin: %m");
++                udev_dbg(udev, "error reading /etc/udev/hwdb.bin: %m");
+                 udev_hwdb_unref(hwdb);
+                 return NULL;
+         }
+ 
+         if (fstat(fileno(hwdb->f), &hwdb->st) < 0 ||
+             (size_t)hwdb->st.st_size < offsetof(struct trie_header_f, strings_len) + 8) {
+-                log_debug("error reading /etc/udev/hwdb.bin: %m");
++                udev_dbg(udev, "error reading /etc/udev/hwdb.bin: %m");
+                 udev_hwdb_unref(hwdb);
+                 return NULL;
+         }
+ 
+         hwdb->map = mmap(0, hwdb->st.st_size, PROT_READ, MAP_SHARED, fileno(hwdb->f), 0);
+         if (hwdb->map == MAP_FAILED) {
+-                log_debug("error mapping /etc/udev/hwdb.bin: %m");
++                udev_dbg(udev, "error mapping /etc/udev/hwdb.bin: %m");
+                 udev_hwdb_unref(hwdb);
+                 return NULL;
+         }
+ 
+         if (memcmp(hwdb->map, sig, sizeof(hwdb->head->signature)) != 0 ||
+             (size_t)hwdb->st.st_size != le64toh(hwdb->head->file_size)) {
+-                log_debug("error recognizing the format of /etc/udev/hwdb.bin");
++                udev_dbg(udev, "error recognizing the format of /etc/udev/hwdb.bin");
+                 udev_hwdb_unref(hwdb);
+                 return NULL;
+         }
+ 
+-        log_debug("=== trie on-disk ===\n");
+-        log_debug("tool version:          %"PRIu64, le64toh(hwdb->head->tool_version));
+-        log_debug("file size:        %8llu bytes\n", (unsigned long long) hwdb->st.st_size);
+-        log_debug("header size       %8"PRIu64" bytes\n", le64toh(hwdb->head->header_size));
+-        log_debug("strings           %8"PRIu64" bytes\n", le64toh(hwdb->head->strings_len));
+-        log_debug("nodes             %8"PRIu64" bytes\n", le64toh(hwdb->head->nodes_len));
++        udev_dbg(udev, "=== trie on-disk ===\n");
++        udev_dbg(udev, "tool version:          %"PRIu64, le64toh(hwdb->head->tool_version));
++        udev_dbg(udev, "file size:        %8llu bytes\n", (unsigned long long) hwdb->st.st_size);
++        udev_dbg(udev, "header size       %8"PRIu64" bytes\n", le64toh(hwdb->head->header_size));
++        udev_dbg(udev, "strings           %8"PRIu64" bytes\n", le64toh(hwdb->head->strings_len));
++        udev_dbg(udev, "nodes             %8"PRIu64" bytes\n", le64toh(hwdb->head->nodes_len));
+         return hwdb;
+ }
+ 
diff --git a/0156-core-manager-remove-infinite-loop.patch b/0156-core-manager-remove-infinite-loop.patch
new file mode 100644
index 0000000..53e8f4c
--- /dev/null
+++ b/0156-core-manager-remove-infinite-loop.patch
@@ -0,0 +1,25 @@
+From 906a89f8e60c9a39610afd7edbc41f79a3c711e7 Mon Sep 17 00:00:00 2001
+From: Shawn Landden <shawn at churchofgit.com>
+Date: Tue, 10 Dec 2013 09:28:26 -0800
+Subject: [PATCH] core/manager: remove infinite loop
+
+---
+ src/core/manager.c | 4 +---
+ 1 file changed, 1 insertion(+), 3 deletions(-)
+
+diff --git a/src/core/manager.c b/src/core/manager.c
+index 944c196..a34a3c6 100644
+--- a/src/core/manager.c
++++ b/src/core/manager.c
+@@ -2285,10 +2285,8 @@ int manager_deserialize(Manager *m, FILE *f, FDSet *fds) {
+         }
+ 
+ finish:
+-        if (ferror(f)) {
++        if (ferror(f))
+                 r = -EIO;
+-                goto finish;
+-        }
+ 
+         assert(m->n_reloading > 0);
+         m->n_reloading --;
diff --git a/0157-util-check-for-overflow-in-greedy_realloc.patch b/0157-util-check-for-overflow-in-greedy_realloc.patch
new file mode 100644
index 0000000..9cdcc40
--- /dev/null
+++ b/0157-util-check-for-overflow-in-greedy_realloc.patch
@@ -0,0 +1,34 @@
+From b7b1af75b9f76f3bff35369b0c1666890c586144 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Tue, 10 Dec 2013 18:53:03 +0000
+Subject: [PATCH] util: check for overflow in greedy_realloc()
+
+Conflicts:
+	src/shared/util.c
+---
+ src/shared/util.c | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/src/shared/util.c b/src/shared/util.c
+index 1510c5e..02bae90 100644
+--- a/src/shared/util.c
++++ b/src/shared/util.c
+@@ -5832,10 +5832,18 @@ void* greedy_realloc(void **p, size_t *allocated, size_t need) {
+         size_t a;
+         void *q;
+ 
++        assert(p);
++        assert(allocated);
++
+         if (*allocated >= need)
+                 return *p;
+ 
+         a = MAX(64u, need * 2);
++
++        /* check for overflows */
++        if (a < need)
++                return NULL;
++
+         q = realloc(*p, a);
+         if (!q)
+                 return NULL;
diff --git a/0158-journald-use-a-bit-more-cleanup-magic.patch b/0158-journald-use-a-bit-more-cleanup-magic.patch
new file mode 100644
index 0000000..2338479
--- /dev/null
+++ b/0158-journald-use-a-bit-more-cleanup-magic.patch
@@ -0,0 +1,35 @@
+From ce69ab385535d23bec04018941b0cda19d2d4855 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Tue, 10 Dec 2013 19:51:47 +0000
+Subject: [PATCH] journald: use a bit more cleanup magic!
+
+---
+ src/journal/journald-stream.c | 8 +-------
+ 1 file changed, 1 insertion(+), 7 deletions(-)
+
+diff --git a/src/journal/journald-stream.c b/src/journal/journald-stream.c
+index 4080622..771a2bd 100644
+--- a/src/journal/journald-stream.c
++++ b/src/journal/journald-stream.c
+@@ -75,7 +75,7 @@ struct StdoutStream {
+ 
+ static int stdout_stream_log(StdoutStream *s, const char *p) {
+         struct iovec iovec[N_IOVEC_META_FIELDS + 5];
+-        char *message = NULL, *syslog_priority = NULL, *syslog_facility = NULL, *syslog_identifier = NULL;
++        _cleanup_free_ char *message = NULL, *syslog_priority = NULL, *syslog_facility = NULL, *syslog_identifier = NULL;
+         unsigned n = 0;
+         int priority;
+         char *label = NULL;
+@@ -128,12 +128,6 @@ static int stdout_stream_log(StdoutStream *s, const char *p) {
+ #endif
+ 
+         server_dispatch_message(s->server, iovec, n, ELEMENTSOF(iovec), &s->ucred, NULL, label, label_len, s->unit_id, priority, 0);
+-
+-        free(message);
+-        free(syslog_priority);
+-        free(syslog_facility);
+-        free(syslog_identifier);
+-
+         return 0;
+ }
+ 
diff --git a/0159-journald-malloc-less-when-streaming-messages.patch b/0159-journald-malloc-less-when-streaming-messages.patch
new file mode 100644
index 0000000..362b36d
--- /dev/null
+++ b/0159-journald-malloc-less-when-streaming-messages.patch
@@ -0,0 +1,110 @@
+From feaaf9358a0bd619ef77dca732aa08e21f5c1a56 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Tue, 10 Dec 2013 06:17:01 -0500
+Subject: [PATCH] journald: malloc less when streaming messages
+
+---
+ src/journal/journald-stream.c | 23 ++++++++++++-----------
+ src/journal/journald-syslog.c |  4 ++--
+ src/journal/journald-syslog.h |  2 +-
+ 3 files changed, 15 insertions(+), 14 deletions(-)
+
+diff --git a/src/journal/journald-stream.c b/src/journal/journald-stream.c
+index 771a2bd..aae381b 100644
+--- a/src/journal/journald-stream.c
++++ b/src/journal/journald-stream.c
+@@ -75,9 +75,11 @@ struct StdoutStream {
+ 
+ static int stdout_stream_log(StdoutStream *s, const char *p) {
+         struct iovec iovec[N_IOVEC_META_FIELDS + 5];
+-        _cleanup_free_ char *message = NULL, *syslog_priority = NULL, *syslog_facility = NULL, *syslog_identifier = NULL;
+-        unsigned n = 0;
+         int priority;
++        char syslog_priority[] = "PRIORITY=\0";
++        char syslog_facility[sizeof("SYSLOG_FACILITY=") + DECIMAL_STR_MAX(priority)];
++        _cleanup_free_ char *message = NULL, *syslog_identifier = NULL;
++        unsigned n = 0;
+         char *label = NULL;
+         size_t label_len = 0;
+ 
+@@ -90,7 +92,7 @@ static int stdout_stream_log(StdoutStream *s, const char *p) {
+         priority = s->priority;
+ 
+         if (s->level_prefix)
+-                syslog_parse_priority((char**) &p, &priority, false);
++                syslog_parse_priority(&p, &priority, false);
+ 
+         if (s->forward_to_syslog || s->server->forward_to_syslog)
+                 server_forward_syslog(s->server, syslog_fixup_facility(priority), s->identifier, p, &s->ucred, NULL);
+@@ -103,12 +105,13 @@ static int stdout_stream_log(StdoutStream *s, const char *p) {
+ 
+         IOVEC_SET_STRING(iovec[n++], "_TRANSPORT=stdout");
+ 
+-        if (asprintf(&syslog_priority, "PRIORITY=%i", priority & LOG_PRIMASK) >= 0)
+-                IOVEC_SET_STRING(iovec[n++], syslog_priority);
++        syslog_priority[strlen("PRIORITY=")] = '0' + LOG_PRI(priority);
++        IOVEC_SET_STRING(iovec[n++], syslog_priority);
+ 
+-        if (priority & LOG_FACMASK)
+-                if (asprintf(&syslog_facility, "SYSLOG_FACILITY=%i", LOG_FAC(priority)) >= 0)
+-                        IOVEC_SET_STRING(iovec[n++], syslog_facility);
++        if (priority & LOG_FACMASK) {
++                snprintf(syslog_facility, sizeof(syslog_facility), "SYSLOG_FACILITY=%i", LOG_FAC(priority));
++                IOVEC_SET_STRING(iovec[n++], syslog_facility);
++        }
+ 
+         if (s->identifier) {
+                 syslog_identifier = strappend("SYSLOG_IDENTIFIER=", s->identifier);
+@@ -408,7 +411,7 @@ fail:
+ 
+ int server_open_stdout_socket(Server *s) {
+         int r;
+-        struct epoll_event ev;
++        struct epoll_event ev = { .events = EPOLLIN };
+ 
+         assert(s);
+ 
+@@ -441,8 +444,6 @@ int server_open_stdout_socket(Server *s) {
+         } else
+                 fd_nonblock(s->stdout_fd, 1);
+ 
+-        zero(ev);
+-        ev.events = EPOLLIN;
+         ev.data.fd = s->stdout_fd;
+         if (epoll_ctl(s->epoll_fd, EPOLL_CTL_ADD, s->stdout_fd, &ev) < 0) {
+                 log_error("Failed to add stdout server fd to epoll object: %m");
+diff --git a/src/journal/journald-syslog.c b/src/journal/journald-syslog.c
+index c2770a5..5d9b665 100644
+--- a/src/journal/journald-syslog.c
++++ b/src/journal/journald-syslog.c
+@@ -236,7 +236,7 @@ size_t syslog_parse_identifier(const char **buf, char **identifier, char **pid)
+         return e;
+ }
+ 
+-void syslog_parse_priority(char **p, int *priority, bool with_facility) {
++void syslog_parse_priority(const char **p, int *priority, bool with_facility) {
+         int a = 0, b = 0, c = 0;
+         int k;
+ 
+@@ -365,7 +365,7 @@ void server_process_syslog_message(
+         assert(buf);
+ 
+         orig = buf;
+-        syslog_parse_priority((char**) &buf, &priority, true);
++        syslog_parse_priority(&buf, &priority, true);
+ 
+         if (s->forward_to_syslog)
+                 forward_syslog_raw(s, priority, orig, ucred, tv);
+diff --git a/src/journal/journald-syslog.h b/src/journal/journald-syslog.h
+index 8ccdb77..057ea79 100644
+--- a/src/journal/journald-syslog.h
++++ b/src/journal/journald-syslog.h
+@@ -25,7 +25,7 @@
+ 
+ int syslog_fixup_facility(int priority) _const_;
+ 
+-void syslog_parse_priority(char **p, int *priority, bool with_facility);
++void syslog_parse_priority(const char **p, int *priority, bool with_facility);
+ size_t syslog_parse_identifier(const char **buf, char **identifier, char **pid);
+ 
+ void server_forward_syslog(Server *s, int priority, const char *identifier, const char *message, struct ucred *ucred, struct timeval *tv);
diff --git a/0160-activate-clean-up-inherited-descriptors.patch b/0160-activate-clean-up-inherited-descriptors.patch
new file mode 100644
index 0000000..8776646
--- /dev/null
+++ b/0160-activate-clean-up-inherited-descriptors.patch
@@ -0,0 +1,77 @@
+From 9b618fb2369046434ced28fe1420d8d5c75cd46e Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Tue, 10 Dec 2013 21:52:11 -0500
+Subject: [PATCH] activate: clean up inherited descriptors
+
+> [simon at troela server]$ /usr/lib/systemd/systemd-activate -l 9000 main.js
+> Assertion 'fd == 3 + count' failed at src/activate/activate.c:115,
+> function open_sockets(). Aborting.
+> Aborted (core dumped)
+
+> after a bit debuging i found the problem:
+> slim appears to leak an fd into all of its children:
+> stat /proc/14004/fd/3  (14004 is the pid a random process in my session)
+>  File: '/proc/14004/fd/3' -> '/var/log/slim.log'
+
+systemd-activate should be robust against the shell (or anything else) leaking
+descriptors. Now everything except stdin/stdout/stderr and received sockets
+will be closed.
+---
+ src/activate/activate.c | 23 +++++++++++++++++++----
+ 1 file changed, 19 insertions(+), 4 deletions(-)
+
+diff --git a/src/activate/activate.c b/src/activate/activate.c
+index a9461bc..6aa8b9f 100644
+--- a/src/activate/activate.c
++++ b/src/activate/activate.c
+@@ -137,6 +137,17 @@ static int open_sockets(int *epoll_fd, bool accept) {
+                 count ++;
+         }
+ 
++        /* Close logging and all other descriptors */
++        if (arg_listen) {
++                int except[3 + n];
++
++                for (fd = 0; fd < SD_LISTEN_FDS_START + n; fd++)
++                        except[fd] = fd;
++
++                log_close();
++                close_all_fds(except, 3 + n);
++        }
++
+         /** Note: we leak some fd's on error here. I doesn't matter
+          *  much, since the program will exit immediately anyway, but
+          *  would be a pain to fix.
+@@ -147,6 +158,7 @@ static int open_sockets(int *epoll_fd, bool accept) {
+ 
+                 fd = make_socket_fd(*address, SOCK_STREAM | (arg_accept*SOCK_CLOEXEC));
+                 if (fd < 0) {
++                        log_open();
+                         log_error("Failed to open '%s': %s", *address, strerror(-fd));
+                         return fd;
+                 }
+@@ -154,6 +166,9 @@ static int open_sockets(int *epoll_fd, bool accept) {
+                 count ++;
+         }
+ 
++        if (arg_listen)
++                log_open();
++
+         *epoll_fd = epoll_create1(EPOLL_CLOEXEC);
+         if (*epoll_fd < 0) {
+                 log_error("Failed to create epoll object: %m");
+@@ -298,10 +313,10 @@ static void sigchld_hdl(int sig, siginfo_t *t, void *data) {
+ 
+ static int install_chld_handler(void) {
+         int r;
+-        struct sigaction act;
+-        zero(act);
+-        act.sa_flags = SA_SIGINFO;
+-        act.sa_sigaction = sigchld_hdl;
++        struct sigaction act = {
++                .sa_flags = SA_SIGINFO,
++                .sa_sigaction = sigchld_hdl,
++        };
+ 
+         r = sigaction(SIGCHLD, &act, 0);
+         if (r < 0)
diff --git a/0161-man-explain-in-more-detail-how-SYSTEMD_READY-influen.patch b/0161-man-explain-in-more-detail-how-SYSTEMD_READY-influen.patch
new file mode 100644
index 0000000..297de17
--- /dev/null
+++ b/0161-man-explain-in-more-detail-how-SYSTEMD_READY-influen.patch
@@ -0,0 +1,95 @@
+From bb9c2f82137bb6d1a352341eb81ed2a0ac96d4cb Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Wed, 11 Dec 2013 18:38:51 +0100
+Subject: [PATCH] man: explain in more detail how SYSTEMD_READY= influences
+ SYSTEMD_WANTS= in udev rules
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1026860
+---
+ man/systemd.device.xml | 45 +++++++++++++++++++++++++++++++--------------
+ 1 file changed, 31 insertions(+), 14 deletions(-)
+
+diff --git a/man/systemd.device.xml b/man/systemd.device.xml
+index 96ebe89..002b647 100644
+--- a/man/systemd.device.xml
++++ b/man/systemd.device.xml
+@@ -70,12 +70,15 @@
+                 since no device-specific options may be
+                 configured.</para>
+ 
+-                <para>systemd will automatically create dynamic device
+-                units for all kernel devices that are marked with the
+-                "systemd" udev tag (by default all block and network
+-                devices, and a few others). This may be used to define
+-                dependencies between devices and other
+-                units.</para>
++                <para>systemd will dynamically create device units for
++                all kernel devices that are marked with the "systemd"
++                udev tag (by default all block and network devices,
++                and a few others). This may be used to define
++                dependencies between devices and other units. To tag a
++                udev device use <literal>TAG+="systemd"</literal> in
++                the udev rules file, see
++                <citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry>
++                for details.</para>
+ 
+                 <para>Device units are named after the
+                 <filename>/sys</filename> and
+@@ -93,7 +96,7 @@
+ 
+                 <para>The settings of device units may either be
+                 configured via unit files, or directly from the udev
+-                database (which is recommended). The following udev
++                database (which is recommended). The following udev device
+                 properties are understood by systemd:</para>
+ 
+                 <variablelist class='udev-directives'>
+@@ -101,16 +104,26 @@
+                                 <term><varname>SYSTEMD_WANTS=</varname></term>
+                                 <listitem><para>Adds dependencies of
+                                 type <varname>Wants</varname> from
+-                                this unit to all listed units. This
++                                the device unit to all listed units. This
+                                 may be used to activate arbitrary
+-                                units, when a specific device becomes
++                                units when a specific device becomes
+                                 available. Note that this and the
+                                 other tags are not taken into account
+                                 unless the device is tagged with the
+                                 <literal>systemd</literal> string in
+                                 the udev database, because otherwise
+                                 the device is not exposed as systemd
+-                                unit.</para></listitem>
++                                unit (see above). Note that systemd
++                                will only act on
++                                <varname>Wants</varname> dependencies
++                                when a device first becomes active, it
++                                will not act on them if they are added
++                                to devices that are already
++                                active. Use
++                                <varname>SYSTEMD_READY=</varname> (see
++                                below) to influence on which udev
++                                event to trigger the device
++                                dependencies.</para></listitem>
+                         </varlistentry>
+ 
+                         <varlistentry>
+@@ -135,10 +148,14 @@
+                                 device disappears from the udev
+                                 tree. This option is useful to support
+                                 devices that initially show up in an
+-                                uninitialized state in the tree, and for
+-                                which a changed event is generated the
+-                                moment they are fully set
+-                                up.</para></listitem>
++                                uninitialized state in the tree, and
++                                for which a <literal>changed</literal>
++                                event is generated the moment they are
++                                fully set up. Note that
++                                <varname>SYSTEMD_WANTS=</varname> (see
++                                above) is not acted on as long as
++                                <varname>SYSTEMD_READY=0</varname> is
++                                set for a device.</para></listitem>
+                         </varlistentry>
+ 
+                         <varlistentry>
diff --git a/0162-units-don-t-run-readahead-done-timers-in-containers.patch b/0162-units-don-t-run-readahead-done-timers-in-containers.patch
new file mode 100644
index 0000000..ac5f405
--- /dev/null
+++ b/0162-units-don-t-run-readahead-done-timers-in-containers.patch
@@ -0,0 +1,36 @@
+From 3fa582ff9d4bea413a7a0e301b7dbca6b33382b0 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Wed, 11 Dec 2013 23:31:34 +0100
+Subject: [PATCH] units: don't run readahead done timers in containers
+
+We don't run the collector in the container either, hence we don't need
+to stop it either.
+---
+ units/systemd-readahead-done.service.in | 1 +
+ units/systemd-readahead-done.timer      | 1 +
+ 2 files changed, 2 insertions(+)
+
+diff --git a/units/systemd-readahead-done.service.in b/units/systemd-readahead-done.service.in
+index c3b2ac5..e0d9579 100644
+--- a/units/systemd-readahead-done.service.in
++++ b/units/systemd-readahead-done.service.in
+@@ -12,6 +12,7 @@ DefaultDependencies=no
+ Conflicts=shutdown.target
+ After=default.target
+ Before=shutdown.target
++ConditionVirtualization=no
+ 
+ [Service]
+ Type=oneshot
+diff --git a/units/systemd-readahead-done.timer b/units/systemd-readahead-done.timer
+index 41bfb2b..a9f6278 100644
+--- a/units/systemd-readahead-done.timer
++++ b/units/systemd-readahead-done.timer
+@@ -12,6 +12,7 @@ DefaultDependencies=no
+ Conflicts=shutdown.target
+ After=default.target
+ Before=shutdown.target
++ConditionVirtualization=no
+ 
+ [Timer]
+ OnActiveSec=30s
diff --git a/0163-test-fileio-replace-mktemp-with-mkstemp-to-avoid-war.patch b/0163-test-fileio-replace-mktemp-with-mkstemp-to-avoid-war.patch
new file mode 100644
index 0000000..db7b9d7
--- /dev/null
+++ b/0163-test-fileio-replace-mktemp-with-mkstemp-to-avoid-war.patch
@@ -0,0 +1,37 @@
+From 622dfd7a6553cc27b6f75653481dd8808f717c49 Mon Sep 17 00:00:00 2001
+From: Thomas Hindoe Paaboel Andersen <phomes at gmail.com>
+Date: Thu, 12 Dec 2013 00:06:30 +0100
+Subject: [PATCH] test-fileio: replace mktemp with mkstemp to avoid warnings
+
+This is a fairly useless thing to do but it makes the compilers
+and analyzers shut up about the use of mktemp.
+---
+ src/test/test-fileio.c | 8 ++++++--
+ 1 file changed, 6 insertions(+), 2 deletions(-)
+
+diff --git a/src/test/test-fileio.c b/src/test/test-fileio.c
+index 06f3e28..b005f3b 100644
+--- a/src/test/test-fileio.c
++++ b/src/test/test-fileio.c
+@@ -41,7 +41,9 @@ static void test_parse_env_file(void) {
+         char **i;
+         unsigned k;
+ 
+-        assert_se(mktemp(p));
++        fd = mkstemp(p);
++        assert_se(fd >= 0);
++        close(fd);
+ 
+         fd = mkostemp(t, O_CLOEXEC);
+         assert_se(fd >= 0);
+@@ -152,7 +154,9 @@ static void test_parse_multiline_env_file(void) {
+         _cleanup_strv_free_ char **a = NULL, **b = NULL;
+         char **i;
+ 
+-        assert_se(mktemp(p));
++        fd = mkstemp(p);
++        assert_se(fd >= 0);
++        close(fd);
+ 
+         fd = mkostemp(t, O_CLOEXEC);
+         assert_se(fd >= 0);
diff --git a/0164-journal-pipe-journalctl-help-output-into-a-pager.patch b/0164-journal-pipe-journalctl-help-output-into-a-pager.patch
new file mode 100644
index 0000000..8e0c0ca
--- /dev/null
+++ b/0164-journal-pipe-journalctl-help-output-into-a-pager.patch
@@ -0,0 +1,45 @@
+From 59f2f4cfd399275c3da061212fc25636ee72367f Mon Sep 17 00:00:00 2001
+From: Djalal Harouni <tixxdz at opendz.org>
+Date: Thu, 12 Dec 2013 00:22:48 +0100
+Subject: [PATCH] journal: pipe journalctl help output into a pager
+
+journalctl help output might run off the screen, so be consistent
+as other systemd tools do and pipe it into a pager.
+---
+ src/journal/journalctl.c | 14 ++++++++++++--
+ 1 file changed, 12 insertions(+), 2 deletions(-)
+
+diff --git a/src/journal/journalctl.c b/src/journal/journalctl.c
+index a5c4779..71e28b0 100644
+--- a/src/journal/journalctl.c
++++ b/src/journal/journalctl.c
+@@ -114,8 +114,18 @@ typedef struct boot_id_t {
+         uint64_t last;
+ } boot_id_t;
+ 
++static void pager_open_if_enabled(void) {
++
++        if (arg_no_pager)
++                return;
++
++        pager_open(arg_pager_end);
++}
++
+ static int help(void) {
+ 
++        pager_open_if_enabled();
++
+         printf("%s [OPTIONS...] [MATCHES...]\n\n"
+                "Query the journal.\n\n"
+                "Flags:\n"
+@@ -1635,8 +1645,8 @@ int main(int argc, char *argv[]) {
+                 return EXIT_FAILURE;
+         }
+ 
+-        if (!arg_no_pager && !arg_follow)
+-                pager_open(arg_pager_end);
++        if (!arg_follow)
++                pager_open_if_enabled();
+ 
+         if (!arg_quiet) {
+                 usec_t start, end;
diff --git a/0165-nspawn-complain-and-continue-if-machine-has-same-id.patch b/0165-nspawn-complain-and-continue-if-machine-has-same-id.patch
new file mode 100644
index 0000000..7597fe9
--- /dev/null
+++ b/0165-nspawn-complain-and-continue-if-machine-has-same-id.patch
@@ -0,0 +1,63 @@
+From bedb539662380d6a120db1e8dbb63b55d2ecac2c Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Wed, 11 Dec 2013 22:00:33 -0500
+Subject: [PATCH] nspawn: complain and continue if machine has same id
+
+If --link-journal=host or --link-journal=guest is used, this totally
+cannot work and we exit with an error. If however --link-journal=auto
+or --link-journal=no is used, just display a warning.
+
+Having the same machine id can happen if booting from the same
+filesystem as the host. Since other things mostly function correctly,
+let's allow that.
+
+https://bugs.freedesktop.org/show_bug.cgi?id=68369
+---
+ src/nspawn/nspawn.c | 23 +++++++++++++++++++----
+ 1 file changed, 19 insertions(+), 4 deletions(-)
+
+diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c
+index 7346253..618f9c3 100644
+--- a/src/nspawn/nspawn.c
++++ b/src/nspawn/nspawn.c
+@@ -811,14 +811,11 @@ static int setup_hostname(void) {
+ }
+ 
+ static int setup_journal(const char *directory) {
+-        sd_id128_t machine_id;
++        sd_id128_t machine_id, this_id;
+         _cleanup_free_ char *p = NULL, *b = NULL, *q = NULL, *d = NULL;
+         char *id;
+         int r;
+ 
+-        if (arg_link_journal == LINK_NO)
+-                return 0;
+-
+         p = strappend(directory, "/etc/machine-id");
+         if (!p)
+                 return log_oom();
+@@ -842,6 +839,24 @@ static int setup_journal(const char *directory) {
+                 return r;
+         }
+ 
++        r = sd_id128_get_machine(&this_id);
++        if (r < 0) {
++                log_error("Failed to retrieve machine ID: %s", strerror(-r));
++                return r;
++        }
++
++        if (sd_id128_equal(machine_id, this_id)) {
++                log_full(arg_link_journal == LINK_AUTO ? LOG_WARNING : LOG_ERR,
++                         "Host and machine ids are equal (%s): refusing to link journals", id);
++                if (arg_link_journal == LINK_AUTO)
++                        return 0;
++                return
++                        -EEXIST;
++        }
++
++        if (arg_link_journal == LINK_NO)
++                return 0;
++
+         free(p);
+         p = strappend("/var/log/journal/", id);
+         q = strjoin(directory, "/var/log/journal/", id, NULL);
diff --git a/0166-man-beef-up-ExecStart-description.patch b/0166-man-beef-up-ExecStart-description.patch
new file mode 100644
index 0000000..6c1fb82
--- /dev/null
+++ b/0166-man-beef-up-ExecStart-description.patch
@@ -0,0 +1,150 @@
+From a6ba849c002fc991a290d2792573a9145f02aaf6 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Sat, 14 Dec 2013 17:21:55 -0500
+Subject: [PATCH] man: beef up ExecStart description
+
+We have lots of questions from people who assume that shell syntax works
+here, so let's be very explicit what is allowed and what is not. A few
+examples should also help.
+
+http://bugs.debian.org/732156
+---
+ man/systemd.service.xml | 97 ++++++++++++++++++++++++++++++++++++++++---------
+ 1 file changed, 80 insertions(+), 17 deletions(-)
+
+diff --git a/man/systemd.service.xml b/man/systemd.service.xml
+index 3f31c11..ca297ba 100644
+--- a/man/systemd.service.xml
++++ b/man/systemd.service.xml
+@@ -305,9 +305,10 @@
+                                 <term><varname>ExecStart=</varname></term>
+                                 <listitem><para>Commands with their
+                                 arguments that are executed when this
+-                                service is started. The first
+-                                argument must be an absolute path
+-                                name.</para>
++                                service is started. For each of the
++                                specified commands, the first argument
++                                must be an absolute and literal path
++                                to an executable.</para>
+ 
+                                 <para>When <varname>Type</varname> is
+                                 not <option>oneshot</option>, only one
+@@ -332,6 +333,35 @@
+                                 prior assignments of this option will
+                                 have no effect.</para>
+ 
++                                <para>Each command line is split on
++                                whitespace, with the first item being
++                                the command to execute, and the
++                                subsequent items being the arguments.
++                                Double quotes ("...") and single
++                                quotes ('...') may be used, in which
++                                case everything until the next
++                                matching quote becomes part of the
++                                same argument. Quotes themselves are
++                                removed after parsing. In addition, a
++                                trailing backslash
++                                (<literal>\</literal>) may be used to
++                                merge lines. This syntax is intended
++                                to be very similar to shell syntax,
++                                but only the meta-characters and
++                                expansions described in the following
++                                paragraphs are understood.
++                                Specifically, redirection using
++                                <literal>&lt;</literal>,
++                                <literal>&lt;&lt;</literal>,
++                                <literal>&gt;</literal>, and
++                                <literal>&gt;&gt;</literal>, pipes
++                                using <literal>|</literal>, and
++                                running programs in the background
++                                using <literal>&amp;</literal>
++                                and <emphasis>other elements of shell
++                                syntax are not supported</emphasis>.
++                                </para>
++
+                                 <para>If more than one command is
+                                 specified, the commands are invoked
+                                 one by one sequentially in the order
+@@ -350,10 +380,11 @@
+                                 <para>The command line accepts
+                                 <literal>%</literal> specifiers as
+                                 described in
+-                                <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>. Note
+-                                that the first argument of the command
+-                                line (i.e. the program to execute) may
+-                                not include specifiers.</para>
++                                <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
++                                Note that the first argument of the
++                                command line (i.e. the program to
++                                execute) may not include
++                                specifiers.</para>
+ 
+                                 <para>Basic environment variable
+                                 substitution is supported. Use
+@@ -372,9 +403,7 @@
+                                 more arguments. To pass literal dollar sign
+                                 use <literal>$$</literal>. Note that the first
+                                 argument (i.e. the program to execute)
+-                                may not be a variable, since it must
+-                                be a literal and absolute path
+-                                name.</para>
++                                may not be a variable.</para>
+ 
+                                 <para>Optionally, if the absolute file
+                                 name is prefixed with
+@@ -402,13 +431,47 @@
+                                 <programlisting>ExecStart=/bin/sh -c 'dmesg | tac'
+                                 </programlisting>
+ 
+-                                <para>For services run by a user
+-                                instance of systemd the special
+-                                environment variable
+-                                <varname>$MANAGERPID</varname> is set
+-                                to the PID of the systemd
+-                                instance.</para>
+-                                </listitem>
++                                <para>Only select environment variables
++                                are set for executed commands. See
++                                <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
++                                </para>
++
++                                <para>Example:</para>
++                                <programlisting>ExecStart=/bin/echo one ; /bin/echo "two two"
++                                </programlisting>
++                                <para>This will execute
++                                <command>/bin/echo</command> two
++                                times, each time with one argument,
++                                <literal>one</literal> and
++                                <literal>two two</literal>,
++                                respectively. Since two commands are
++                                specified
++                                <varname>Type=oneshot</varname> must
++                                be used.</para>
++
++                                <para>Example:</para>
++                                <programlisting>ExecStart=/bin/echo / &gt;/dev/null &amp; \; \
++/bin/ls
++                                </programlisting>
++                                <para>This will execute
++                                <command>/bin/echo</command> with five
++                                arguments: <literal>/</literal>,
++                                <literal>&gt;/dev/null</literal>,
++                                <literal>&amp;</literal>,
++                                <literal>;</literal>, and
++                                <literal>/bin/ls</literal>.</para>
++
++                                <para>Example:</para>
++                                <programlisting>Environment="ONE=one" 'TWO=two two'
++ExecStart=/bin/echo $ONE $TWO ${TWO}
++                                </programlisting>
++                                <para>This will execute
++                                <command>/bin/echo</command> with four
++                                arguments: <literal>one</literal>,
++                                <literal>two</literal>,
++                                <literal>two</literal>, and
++                                <literal>two two</literal>.</para>
++                              </listitem>
+                         </varlistentry>
+ 
+                         <varlistentry>
diff --git a/0167-man-remove-advice-to-avoid-setting-the-same-var-more.patch b/0167-man-remove-advice-to-avoid-setting-the-same-var-more.patch
new file mode 100644
index 0000000..b1943b1
--- /dev/null
+++ b/0167-man-remove-advice-to-avoid-setting-the-same-var-more.patch
@@ -0,0 +1,53 @@
+From 7c6c28dca3b75b7d0c2d067752ed917b113d90d2 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Sat, 14 Dec 2013 17:30:25 -0500
+Subject: [PATCH] man: remove advice to avoid setting the same var more than
+ once
+
+So far the compatibility with .desktop settings hasn't been imporant
+at all, and we do not want people to write convoluted unit
+files.
+---
+ man/systemd.service.xml |  6 +-----
+ man/systemd.unit.xml    | 11 +++++++++++
+ 2 files changed, 12 insertions(+), 5 deletions(-)
+
+diff --git a/man/systemd.service.xml b/man/systemd.service.xml
+index ca297ba..8f9137c 100644
+--- a/man/systemd.service.xml
++++ b/man/systemd.service.xml
+@@ -321,11 +321,7 @@
+                                 (these semicolons must be passed as
+                                 separate words). Alternatively, this
+                                 directive may be specified more than
+-                                once with the same effect. However,
+-                                the latter syntax is not recommended
+-                                for compatibility with parsers
+-                                suitable for XDG
+-                                <filename>.desktop</filename> files.
++                                once with the same effect.
+                                 Lone semicolons may be escaped as
+                                 <literal>\;</literal>. If the empty
+                                 string is assigned to this option, the
+diff --git a/man/systemd.unit.xml b/man/systemd.unit.xml
+index 029392c..77127ff 100644
+--- a/man/systemd.unit.xml
++++ b/man/systemd.unit.xml
+@@ -120,6 +120,17 @@
+                 <citerefentry><refentrytitle>systemd.scope</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
+                 </para>
+ 
++                <para>Various settings are allowed to be specified
++                more than once, in which case the interpretation
++                depends on the setting. Often, multiple settings form
++                a list, and setting to an empty value "resets", which
++                means that previous assignments are ignored. When this
++                is allowed, it is mentioned in the description of the
++                setting. Note that using multiple assignments to the
++                same value makes the unit file incompatible with
++                parsers for the XDG <filename>.desktop</filename> file
++                format.</para>
++
+                 <para>Unit files are loaded from a set of paths
+                 determined during compilation, described in the next section.
+                 </para>
diff --git a/0168-systemctl-add-the-plain-option-to-the-help-message.patch b/0168-systemctl-add-the-plain-option-to-the-help-message.patch
new file mode 100644
index 0000000..ec04f72
--- /dev/null
+++ b/0168-systemctl-add-the-plain-option-to-the-help-message.patch
@@ -0,0 +1,23 @@
+From c818ae0c9288afac78a1761de3bd65007448558a Mon Sep 17 00:00:00 2001
+From: Djalal Harouni <tixxdz at opendz.org>
+Date: Sun, 15 Dec 2013 00:05:38 +0100
+Subject: [PATCH] systemctl: add the --plain option to the help message
+
+---
+ src/systemctl/systemctl.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c
+index db584b2..bc9808a 100644
+--- a/src/systemctl/systemctl.c
++++ b/src/systemctl/systemctl.c
+@@ -4748,7 +4748,8 @@ static int systemctl_help(void) {
+                "     --root=PATH      Enable unit files in the specified root directory\n"
+                "  -n --lines=INTEGER  Number of journal entries to show\n"
+                "  -o --output=STRING  Change journal output mode (short, short-monotonic,\n"
+-               "                      verbose, export, json, json-pretty, json-sse, cat)\n\n"
++               "                      verbose, export, json, json-pretty, json-sse, cat)\n"
++               "     --plain          Print unit dependencies as a list instead of a tree\n\n"
+                "Unit Commands:\n"
+                "  list-units                      List loaded units\n"
+                "  list-sockets                    List loaded sockets ordered by address\n"
diff --git a/0169-Fix-a-few-resource-leaks-in-error-paths.patch b/0169-Fix-a-few-resource-leaks-in-error-paths.patch
new file mode 100644
index 0000000..fc01bb9
--- /dev/null
+++ b/0169-Fix-a-few-resource-leaks-in-error-paths.patch
@@ -0,0 +1,67 @@
+From 010d6c4909ed75c247ff91a555c7942f9c2ce1c5 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Sun, 15 Dec 2013 16:25:04 -0500
+Subject: [PATCH] Fix a few resource leaks in error paths
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1043304
+
+Conflicts:
+	src/libsystemd-bus/bus-objects.c
+	src/udev/net/link-config.c
+---
+ src/sleep/sleep.c | 15 +++++++--------
+ 1 file changed, 7 insertions(+), 8 deletions(-)
+
+diff --git a/src/sleep/sleep.c b/src/sleep/sleep.c
+index a56ab89..f96987f 100644
+--- a/src/sleep/sleep.c
++++ b/src/sleep/sleep.c
+@@ -57,15 +57,14 @@ static int write_mode(char **modes) {
+         return r;
+ }
+ 
+-static int write_state(FILE *f0, char **states) {
+-        FILE _cleanup_fclose_ *f = f0;
++static int write_state(FILE **f, char **states) {
+         char **state;
+         int r = 0;
+ 
+         STRV_FOREACH(state, states) {
+                 int k;
+ 
+-                k = write_string_to_file(f, *state);
++                k = write_string_to_file(*f, *state);
+                 if (k == 0)
+                         return 0;
+                 log_debug("Failed to write '%s' to /sys/power/state: %s",
+@@ -73,9 +72,9 @@ static int write_state(FILE *f0, char **states) {
+                 if (r == 0)
+                         r = k;
+ 
+-                fclose(f);
+-                f = fopen("/sys/power/state", "we");
+-                if (!f) {
++                fclose(*f);
++                *f = fopen("/sys/power/state", "we");
++                if (!*f) {
+                         log_error("Failed to open /sys/power/state: %m");
+                         return -errno;
+                 }
+@@ -87,7 +86,7 @@ static int write_state(FILE *f0, char **states) {
+ static int execute(char **modes, char **states) {
+         char* arguments[4];
+         int r;
+-        FILE *f;
++        _cleanup_fclose_ FILE *f = NULL;
+         const char* note = strappenda("SLEEP=", arg_verb);
+ 
+         /* This file is opened first, so that if we hit an error,
+@@ -115,7 +114,7 @@ static int execute(char **modes, char **states) {
+                    note,
+                    NULL);
+ 
+-        r = write_state(f, states);
++        r = write_state(&f, states);
+         if (r < 0)
+                 return r;
+ 
diff --git a/0170-Fix-a-few-signed-unsigned-format-string-issues.patch b/0170-Fix-a-few-signed-unsigned-format-string-issues.patch
new file mode 100644
index 0000000..085e455
--- /dev/null
+++ b/0170-Fix-a-few-signed-unsigned-format-string-issues.patch
@@ -0,0 +1,81 @@
+From dca7710c31218a2292c8e3987d1e906b27bed4e9 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Sun, 15 Dec 2013 16:26:27 -0500
+Subject: [PATCH] Fix a few signed/unsigned format string issues
+
+Since numbers involved are all small, behaviour was correct already.
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1043304
+---
+ src/shared/time-util.c         |  2 +-
+ src/udev/udev-builtin-net_id.c | 21 +++++++--------------
+ 2 files changed, 8 insertions(+), 15 deletions(-)
+
+diff --git a/src/shared/time-util.c b/src/shared/time-util.c
+index 81d4ede..d31401b 100644
+--- a/src/shared/time-util.c
++++ b/src/shared/time-util.c
+@@ -382,7 +382,7 @@ void dual_timestamp_deserialize(const char *value, dual_timestamp *t) {
+         assert(value);
+         assert(t);
+ 
+-        if (sscanf(value, "%lli %llu", &a, &b) != 2)
++        if (sscanf(value, "%llu %llu", &a, &b) != 2)
+                 log_debug("Failed to parse finish timestamp value %s", value);
+         else {
+                 t->realtime = a;
+diff --git a/src/udev/udev-builtin-net_id.c b/src/udev/udev-builtin-net_id.c
+index 9ae8f08..9bc1946 100644
+--- a/src/udev/udev-builtin-net_id.c
++++ b/src/udev/udev-builtin-net_id.c
+@@ -166,23 +166,17 @@ out:
+ 
+ static int dev_pci_slot(struct udev_device *dev, struct netnames *names) {
+         struct udev *udev = udev_device_get_udev(names->pcidev);
+-        unsigned int domain;
+-        unsigned int bus;
+-        unsigned int slot;
+-        unsigned int func;
+-        unsigned int dev_id = 0;
++        unsigned domain, bus, slot, func, dev_id = 0;
+         size_t l;
+         char *s;
+         const char *attr;
+         struct udev_device *pci = NULL;
+-        char slots[256];
+-        DIR *dir;
++        char slots[256], str[256];
++        _cleanup_closedir_ DIR *dir = NULL;
+         struct dirent *dent;
+-        char str[256];
+-        int hotplug_slot = 0;
+-        int err = 0;
++        int hotplug_slot = 0, err = 0;
+ 
+-        if (sscanf(udev_device_get_sysname(names->pcidev), "%x:%x:%x.%d", &domain, &bus, &slot, &func) != 4)
++        if (sscanf(udev_device_get_sysname(names->pcidev), "%x:%x:%x.%u", &domain, &bus, &slot, &func) != 4)
+                 return -ENOENT;
+ 
+         /* kernel provided multi-device index */
+@@ -239,7 +233,6 @@ static int dev_pci_slot(struct udev_device *dev, struct netnames *names) {
+                 if (hotplug_slot > 0)
+                         break;
+         }
+-        closedir(dir);
+ 
+         if (hotplug_slot > 0) {
+                 s = names->pci_slot;
+@@ -341,11 +334,11 @@ static int names_bcma(struct udev_device *dev, struct netnames *names) {
+                 return -ENOENT;
+ 
+         /* bus num:core num */
+-        if (sscanf(udev_device_get_sysname(bcmadev), "bcma%*d:%d", &core) != 1)
++        if (sscanf(udev_device_get_sysname(bcmadev), "bcma%*u:%u", &core) != 1)
+                 return -EINVAL;
+         /* suppress the common core == 0 */
+         if (core > 0)
+-                snprintf(names->bcma_core, sizeof(names->bcma_core), "b%d", core);
++                snprintf(names->bcma_core, sizeof(names->bcma_core), "b%u", core);
+ 
+         names->type = NET_BCMA;
+         return 0;
diff --git a/0171-util-try-harder-to-increase-the-send-recv-buffers-of.patch b/0171-util-try-harder-to-increase-the-send-recv-buffers-of.patch
new file mode 100644
index 0000000..361253f
--- /dev/null
+++ b/0171-util-try-harder-to-increase-the-send-recv-buffers-of.patch
@@ -0,0 +1,60 @@
+From 4a0ab3a8fd59d38dabb9a7096939d8d8e8adc62f Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Mon, 16 Dec 2013 17:04:36 +0100
+Subject: [PATCH] util: try harder to increase the send/recv buffers of sockets
+
+If we have the priviliges we will try SO_SNDBUFFORCE/SO_RCVBUFFORCE and
+only fall back to SO_SNDBUF/SO_RCVBUF if that fails.
+---
+ src/shared/util.c | 25 ++++++++++++-------------
+ 1 file changed, 12 insertions(+), 13 deletions(-)
+
+diff --git a/src/shared/util.c b/src/shared/util.c
+index 02bae90..8824b9b 100644
+--- a/src/shared/util.c
++++ b/src/shared/util.c
+@@ -4928,15 +4928,15 @@ int fd_inc_sndbuf(int fd, size_t n) {
+         socklen_t l = sizeof(value);
+ 
+         r = getsockopt(fd, SOL_SOCKET, SO_SNDBUF, &value, &l);
+-        if (r >= 0 &&
+-            l == sizeof(value) &&
+-            (size_t) value >= n*2)
++        if (r >= 0 && l == sizeof(value) && (size_t) value >= n*2)
+                 return 0;
+ 
++        /* If we have the privileges we will ignore the kernel limit. */
++
+         value = (int) n;
+-        r = setsockopt(fd, SOL_SOCKET, SO_SNDBUF, &value, sizeof(value));
+-        if (r < 0)
+-                return -errno;
++        if (setsockopt(fd, SOL_SOCKET, SO_SNDBUFFORCE, &value, sizeof(value)) < 0)
++                if (setsockopt(fd, SOL_SOCKET, SO_SNDBUF, &value, sizeof(value)) < 0)
++                        return -errno;
+ 
+         return 1;
+ }
+@@ -4946,16 +4946,15 @@ int fd_inc_rcvbuf(int fd, size_t n) {
+         socklen_t l = sizeof(value);
+ 
+         r = getsockopt(fd, SOL_SOCKET, SO_RCVBUF, &value, &l);
+-        if (r >= 0 &&
+-            l == sizeof(value) &&
+-            (size_t) value >= n*2)
++        if (r >= 0 && l == sizeof(value) && (size_t) value >= n*2)
+                 return 0;
+ 
+-        value = (int) n;
+-        r = setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &value, sizeof(value));
+-        if (r < 0)
+-                return -errno;
++        /* If we have the privileges we will ignore the kernel limit. */
+ 
++        value = (int) n;
++        if (setsockopt(fd, SOL_SOCKET, SO_RCVBUFFORCE, &value, sizeof(value)) < 0)
++                if (setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &value, sizeof(value)) < 0)
++                        return -errno;
+         return 1;
+ }
+ 
diff --git a/0172-execute-also-set-SO_SNDBUF-when-spawning-a-service-w.patch b/0172-execute-also-set-SO_SNDBUF-when-spawning-a-service-w.patch
new file mode 100644
index 0000000..82de044
--- /dev/null
+++ b/0172-execute-also-set-SO_SNDBUF-when-spawning-a-service-w.patch
@@ -0,0 +1,32 @@
+From 8d872d28194f58da2311ca88072084458dc2eb15 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Mon, 16 Dec 2013 20:00:09 +0100
+Subject: [PATCH] execute: also set SO_SNDBUF when spawning a service with
+ stdout/stderr connected to journald
+
+---
+ src/core/execute.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/src/core/execute.c b/src/core/execute.c
+index 58be72a..9b85379 100644
+--- a/src/core/execute.c
++++ b/src/core/execute.c
+@@ -75,6 +75,8 @@
+ /* This assumes there is a 'tty' group */
+ #define TTY_MODE 0620
+ 
++#define SNDBUF_SIZE (8*1024*1024)
++
+ static int shift_fds(int fds[], unsigned n_fds) {
+         int start, restart_from;
+ 
+@@ -232,6 +234,8 @@ static int connect_logger_as(const ExecContext *context, ExecOutput output, cons
+                 return -errno;
+         }
+ 
++        fd_inc_sndbuf(fd, SNDBUF_SIZE);
++
+         dprintf(fd,
+                 "%s\n"
+                 "%s\n"
diff --git a/0173-journal-file-protect-against-alloca-0.patch b/0173-journal-file-protect-against-alloca-0.patch
new file mode 100644
index 0000000..953373e
--- /dev/null
+++ b/0173-journal-file-protect-against-alloca-0.patch
@@ -0,0 +1,23 @@
+From a25fd0d4bd3cf652e55c24e7dc873fe530fa111a Mon Sep 17 00:00:00 2001
+From: Thomas Hindoe Paaboel Andersen <phomes at gmail.com>
+Date: Mon, 16 Dec 2013 23:35:30 +0100
+Subject: [PATCH] journal-file: protect against alloca(0)
+
+---
+ src/journal/journal-file.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/src/journal/journal-file.c b/src/journal/journal-file.c
+index 090cf97..8ea258b 100644
+--- a/src/journal/journal-file.c
++++ b/src/journal/journal-file.c
+@@ -2737,7 +2737,8 @@ int journal_file_copy_entry(JournalFile *from, JournalFile *to, Object *o, uint6
+         ts.realtime = le64toh(o->entry.realtime);
+ 
+         n = journal_file_entry_n_items(o);
+-        items = alloca(sizeof(EntryItem) * n);
++        /* alloca() can't take 0, hence let's allocate at least one */
++        items = alloca(sizeof(EntryItem) * MAX(1u, n));
+ 
+         for (i = 0; i < n; i++) {
+                 uint64_t l, h;
diff --git a/0174-man-describe-journalctl-show-cursor.patch b/0174-man-describe-journalctl-show-cursor.patch
new file mode 100644
index 0000000..e36e5b6
--- /dev/null
+++ b/0174-man-describe-journalctl-show-cursor.patch
@@ -0,0 +1,42 @@
+From 2d46a006393fe823e119a14794a931bd9bc25f74 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Mon, 16 Dec 2013 23:40:00 -0500
+Subject: [PATCH] man: describe journalctl --show-cursor
+
+---
+ man/journalctl.xml | 22 +++++++++++++++++-----
+ 1 file changed, 17 insertions(+), 5 deletions(-)
+
+diff --git a/man/journalctl.xml b/man/journalctl.xml
+index c0cc96d..d936933 100644
+--- a/man/journalctl.xml
++++ b/man/journalctl.xml
+@@ -576,11 +576,23 @@
+                         <varlistentry>
+                                 <term><option>--after-cursor=</option></term>
+ 
+-                                <listitem><para>Start showing entries from the
+-                                location in the journal
+-                                <emphasis>after</emphasis> the location
+-                                specified by the this cursor.
+-                                </para></listitem>
++                                <listitem><para>Start showing entries
++                                from the location in the journal
++                                <emphasis>after</emphasis> the
++                                location specified by the this cursor.
++                                The cursor is shown when the
++                                <option>--show-cursor</option> option
++                                is used.</para></listitem>
++                        </varlistentry>
++
++                        <varlistentry>
++                                <term><option>--show-cursor</option></term>
++
++                                <listitem><para>The cursor is shown after the last
++                                entry after two dashes:</para>
++                                <programlisting>-- cursor: s=0639...</programlisting>
++                                <para>The format of this the cursor is private
++                                and subject ot change.</para></listitem>
+                         </varlistentry>
+ 
+                         <varlistentry>
diff --git a/0175-journal-fix-against-theoretical-undefined-behavior.patch b/0175-journal-fix-against-theoretical-undefined-behavior.patch
new file mode 100644
index 0000000..d2825e4
--- /dev/null
+++ b/0175-journal-fix-against-theoretical-undefined-behavior.patch
@@ -0,0 +1,39 @@
+From 9e32b8f531a1e15f85cce97bea931c43a9db7798 Mon Sep 17 00:00:00 2001
+From: Shawn Landden <shawn at churchofgit.com>
+Date: Mon, 16 Dec 2013 15:41:00 -0800
+Subject: [PATCH] journal: fix against (theoretical) undefined behavior
+
+While all the libc implementations I know return NULL when memchr's size
+parameter is 0, without accessing any memory, passing NULL to memchr is
+still invalid:
+
+C11 7.24.1p2: Where an argument declared as "size_t n" specifies the length
+of the array for a function, n can have the value zero on a call to that
+function. Unless explicitly stated otherwise in the description of a
+particular function in this subclause, pointer arguments on such a call
+shall still have valid values, as described in 7.1.4. On such a call, a
+function that locates a character finds no occurrence, a function that
+compares two character sequences returns zero, and a function that copies
+characters copies zero characters.
+
+see http://llvm.org/bugs/show_bug.cgi?id=18247
+---
+ src/journal/journal-file.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/src/journal/journal-file.c b/src/journal/journal-file.c
+index 8ea258b..71ef092 100644
+--- a/src/journal/journal-file.c
++++ b/src/journal/journal-file.c
+@@ -1010,7 +1010,10 @@ static int journal_file_append_data(
+         if (r < 0)
+                 return r;
+ 
+-        eq = memchr(data, '=', size);
++        if (!data)
++                eq = NULL;
++        else
++                eq = memchr(data, '=', size);
+         if (eq && eq > data) {
+                 uint64_t fp;
+                 Object *fo;
diff --git a/0176-journald-downgrade-warning-message-when-dev-kmsg-doe.patch b/0176-journald-downgrade-warning-message-when-dev-kmsg-doe.patch
new file mode 100644
index 0000000..6936e38
--- /dev/null
+++ b/0176-journald-downgrade-warning-message-when-dev-kmsg-doe.patch
@@ -0,0 +1,24 @@
+From 602fa0f30e4770b1f45e005a7ed9417065b0d640 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Tue, 17 Dec 2013 19:56:06 +0100
+Subject: [PATCH] journald: downgrade warning message when /dev/kmsg does not
+ exist
+
+---
+ src/journal/journald-kmsg.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/src/journal/journald-kmsg.c b/src/journal/journald-kmsg.c
+index 21649d0..9895808 100644
+--- a/src/journal/journald-kmsg.c
++++ b/src/journal/journald-kmsg.c
+@@ -382,7 +382,8 @@ int server_open_dev_kmsg(Server *s) {
+ 
+         s->dev_kmsg_fd = open("/dev/kmsg", O_RDWR|O_CLOEXEC|O_NONBLOCK|O_NOCTTY);
+         if (s->dev_kmsg_fd < 0) {
+-                log_warning("Failed to open /dev/kmsg, ignoring: %m");
++                log_full(errno == ENOENT ? LOG_DEBUG : LOG_WARNING,
++                         "Failed to open /dev/kmsg, ignoring: %m");
+                 return 0;
+         }
+ 
diff --git a/0177-journal-file.c-remove-redundant-assignment-of-variab.patch b/0177-journal-file.c-remove-redundant-assignment-of-variab.patch
new file mode 100644
index 0000000..e5baa81
--- /dev/null
+++ b/0177-journal-file.c-remove-redundant-assignment-of-variab.patch
@@ -0,0 +1,24 @@
+From 029cd4a129832bcc750206deb05695da350efe77 Mon Sep 17 00:00:00 2001
+From: Thomas Hindoe Paaboel Andersen <phomes at gmail.com>
+Date: Tue, 17 Dec 2013 20:15:45 +0100
+Subject: [PATCH] journal-file.c: remove redundant assignment of variable
+
+we also do 'last_index = (uint64_t) -1;' at the end of the while
+loop so there is no reason to also do it here.
+---
+ src/journal/journal-file.c | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/src/journal/journal-file.c b/src/journal/journal-file.c
+index 71ef092..5ef6a2a 100644
+--- a/src/journal/journal-file.c
++++ b/src/journal/journal-file.c
+@@ -1628,8 +1628,6 @@ static int generic_array_bisect(
+                                         else
+                                                 left = y + 1;
+                                 }
+-
+-                                last_index = (uint64_t) -1;
+                         }
+ 
+                         for (;;) {
diff --git a/0178-login-Don-t-stop-a-running-user-manager-from-garbage.patch b/0178-login-Don-t-stop-a-running-user-manager-from-garbage.patch
new file mode 100644
index 0000000..4523e80
--- /dev/null
+++ b/0178-login-Don-t-stop-a-running-user-manager-from-garbage.patch
@@ -0,0 +1,33 @@
+From 0fa446efab8593abc726a7c2438549098db4cc70 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Thomas=20B=C3=A4chler?= <thomas at archlinux.org>
+Date: Sun, 15 Dec 2013 12:06:37 +0100
+Subject: [PATCH] login: Don't stop a running user manager from
+ garbage-collecting the user.
+
+With the current logic, a user will never be garbage-collected, since its
+manager will always be around. Change the logic such that a user is
+garbage-collected when it has no sessions and linger is disabled.
+
+Conflicts:
+	src/login/logind-user.c
+---
+ src/login/logind-user.c | 6 ------
+ 1 file changed, 6 deletions(-)
+
+diff --git a/src/login/logind-user.c b/src/login/logind-user.c
+index adbe638..e2fce5c 100644
+--- a/src/login/logind-user.c
++++ b/src/login/logind-user.c
+@@ -629,12 +629,6 @@ int user_check_gc(User *u, bool drop_not_started) {
+         if (u->slice_job || u->service_job)
+                 return 1;
+ 
+-        if (u->slice && manager_unit_is_active(u->manager, u->slice) != 0)
+-                return 1;
+-
+-        if (u->service && manager_unit_is_active(u->manager, u->service) != 0)
+-                return 1;
+-
+         return 0;
+ }
+ 
diff --git a/0179-libudev-devices-received-from-udev-are-always-initia.patch b/0179-libudev-devices-received-from-udev-are-always-initia.patch
new file mode 100644
index 0000000..492bb25
--- /dev/null
+++ b/0179-libudev-devices-received-from-udev-are-always-initia.patch
@@ -0,0 +1,157 @@
+From 0e075f4d98a653cc0b468fc786fcd869075a75e1 Mon Sep 17 00:00:00 2001
+From: Kay Sievers <kay at vrfy.org>
+Date: Wed, 18 Dec 2013 16:49:19 +0100
+Subject: [PATCH] libudev: devices received from udev are always initialized
+
+Conflicts:
+	TODO
+---
+ src/libudev/libudev-device.c  |  2 ++
+ src/libudev/libudev-monitor.c | 62 +++++++++++++++++++++----------------------
+ 2 files changed, 33 insertions(+), 31 deletions(-)
+
+diff --git a/src/libudev/libudev-device.c b/src/libudev/libudev-device.c
+index 161181a..b6c4e24 100644
+--- a/src/libudev/libudev-device.c
++++ b/src/libudev/libudev-device.c
+@@ -536,6 +536,8 @@ int udev_device_read_db(struct udev_device *udev_device, const char *dbfile)
+                 udev_dbg(udev_device->udev, "no db file to read %s: %m\n", dbfile);
+                 return -1;
+         }
++
++        /* devices with a database entry are initialized */
+         udev_device->is_initialized = true;
+ 
+         while (fgets(line, sizeof(line), f)) {
+diff --git a/src/libudev/libudev-monitor.c b/src/libudev/libudev-monitor.c
+index 0212792..ff89e14 100644
+--- a/src/libudev/libudev-monitor.c
++++ b/src/libudev/libudev-monitor.c
+@@ -324,9 +324,6 @@ _public_ int udev_monitor_enable_receiving(struct udev_monitor *udev_monitor)
+         int err = 0;
+         const int on = 1;
+ 
+-        if (udev_monitor->snl.nl.nl_family == 0)
+-                return -EINVAL;
+-
+         udev_monitor_filter_update(udev_monitor);
+ 
+         if (!udev_monitor->bound) {
+@@ -524,7 +521,6 @@ _public_ struct udev_device *udev_monitor_receive_device(struct udev_monitor *ud
+         char buf[8192];
+         ssize_t buflen;
+         ssize_t bufpos;
+-        struct udev_monitor_netlink_header *nlh;
+ 
+ retry:
+         if (udev_monitor == NULL)
+@@ -536,11 +532,8 @@ retry:
+         smsg.msg_iovlen = 1;
+         smsg.msg_control = cred_msg;
+         smsg.msg_controllen = sizeof(cred_msg);
+-
+-        if (udev_monitor->snl.nl.nl_family != 0) {
+-                smsg.msg_name = &snl;
+-                smsg.msg_namelen = sizeof(snl);
+-        }
++        smsg.msg_name = &snl;
++        smsg.msg_namelen = sizeof(snl);
+ 
+         buflen = recvmsg(udev_monitor->sock, &smsg, 0);
+         if (buflen < 0) {
+@@ -554,20 +547,18 @@ retry:
+                 return NULL;
+         }
+ 
+-        if (udev_monitor->snl.nl.nl_family != 0) {
+-                if (snl.nl.nl_groups == 0) {
+-                        /* unicast message, check if we trust the sender */
+-                        if (udev_monitor->snl_trusted_sender.nl.nl_pid == 0 ||
+-                            snl.nl.nl_pid != udev_monitor->snl_trusted_sender.nl.nl_pid) {
+-                                udev_dbg(udev_monitor->udev, "unicast netlink message ignored\n");
+-                                return NULL;
+-                        }
+-                } else if (snl.nl.nl_groups == UDEV_MONITOR_KERNEL) {
+-                        if (snl.nl.nl_pid > 0) {
+-                                udev_dbg(udev_monitor->udev, "multicast kernel netlink message from pid %d ignored\n",
+-                                     snl.nl.nl_pid);
+-                                return NULL;
+-                        }
++        if (snl.nl.nl_groups == 0) {
++                /* unicast message, check if we trust the sender */
++                if (udev_monitor->snl_trusted_sender.nl.nl_pid == 0 ||
++                    snl.nl.nl_pid != udev_monitor->snl_trusted_sender.nl.nl_pid) {
++                        udev_dbg(udev_monitor->udev, "unicast netlink message ignored\n");
++                        return NULL;
++                }
++        } else if (snl.nl.nl_groups == UDEV_MONITOR_KERNEL) {
++                if (snl.nl.nl_pid > 0) {
++                        udev_dbg(udev_monitor->udev, "multicast kernel netlink message from pid %d ignored\n",
++                             snl.nl.nl_pid);
++                        return NULL;
+                 }
+         }
+ 
+@@ -583,35 +574,47 @@ retry:
+                 return NULL;
+         }
+ 
++        udev_device = udev_device_new(udev_monitor->udev);
++        if (udev_device == NULL)
++                return NULL;
++
+         if (memcmp(buf, "libudev", 8) == 0) {
++                struct udev_monitor_netlink_header *nlh;
++
+                 /* udev message needs proper version magic */
+                 nlh = (struct udev_monitor_netlink_header *) buf;
+                 if (nlh->magic != htonl(UDEV_MONITOR_MAGIC)) {
+                         udev_err(udev_monitor->udev, "unrecognized message signature (%x != %x)\n",
+-                            nlh->magic, htonl(UDEV_MONITOR_MAGIC));
++                                 nlh->magic, htonl(UDEV_MONITOR_MAGIC));
++                        udev_device_unref(udev_device);
+                         return NULL;
+                 }
+-                if (nlh->properties_off+32 > (size_t)buflen)
++                if (nlh->properties_off+32 > (size_t)buflen) {
++                        udev_device_unref(udev_device);
+                         return NULL;
++                }
++
+                 bufpos = nlh->properties_off;
++
++                /* devices received from udev are always initialized */
++                udev_device_set_is_initialized(udev_device);
+         } else {
+                 /* kernel message with header */
+                 bufpos = strlen(buf) + 1;
+                 if ((size_t)bufpos < sizeof("a@/d") || bufpos >= buflen) {
+                         udev_dbg(udev_monitor->udev, "invalid message length\n");
++                        udev_device_unref(udev_device);
+                         return NULL;
+                 }
+ 
+                 /* check message header */
+                 if (strstr(buf, "@/") == NULL) {
+                         udev_dbg(udev_monitor->udev, "unrecognized message header\n");
++                        udev_device_unref(udev_device);
+                         return NULL;
+                 }
+         }
+ 
+-        udev_device = udev_device_new(udev_monitor->udev);
+-        if (udev_device == NULL)
+-                return NULL;
+         udev_device_set_info_loaded(udev_device);
+ 
+         while (bufpos < buflen) {
+@@ -664,9 +667,6 @@ int udev_monitor_send_device(struct udev_monitor *udev_monitor,
+         struct udev_list_entry *list_entry;
+         uint64_t tag_bloom_bits;
+ 
+-        if (udev_monitor->snl.nl.nl_family == 0)
+-                return -EINVAL;
+-
+         blen = udev_device_get_properties_monitor_buf(udev_device, &buf);
+         if (blen < 32)
+                 return -EINVAL;
diff --git a/0180-log-don-t-reopen-dev-console-each-time-we-call-log_o.patch b/0180-log-don-t-reopen-dev-console-each-time-we-call-log_o.patch
new file mode 100644
index 0000000..ea04f74
--- /dev/null
+++ b/0180-log-don-t-reopen-dev-console-each-time-we-call-log_o.patch
@@ -0,0 +1,49 @@
+From df5013c79d99848730abe4585dd93f77409a95c0 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Wed, 18 Dec 2013 05:07:34 +0100
+Subject: [PATCH] log: don't reopen /dev/console each time we call log_open()
+
+Instead, force reopen it only if we really really have to.
+---
+ src/core/main.c     | 1 +
+ src/core/shutdown.c | 1 +
+ src/shared/log.c    | 2 --
+ 3 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/core/main.c b/src/core/main.c
+index 58c3a9e..935762f 100644
+--- a/src/core/main.c
++++ b/src/core/main.c
+@@ -1347,6 +1347,7 @@ int main(int argc, char *argv[]) {
+                 /* Running inside a container, as PID 1 */
+                 arg_running_as = SYSTEMD_SYSTEM;
+                 log_set_target(LOG_TARGET_CONSOLE);
++                log_close_console(); /* force reopen of /dev/console */
+                 log_open();
+ 
+                 /* For the later on, see above... */
+diff --git a/src/core/shutdown.c b/src/core/shutdown.c
+index ea02b60..5e0f3ce 100644
+--- a/src/core/shutdown.c
++++ b/src/core/shutdown.c
+@@ -155,6 +155,7 @@ int main(int argc, char *argv[]) {
+ 
+         log_parse_environment();
+         log_set_target(LOG_TARGET_CONSOLE); /* syslog will die if not gone yet */
++        log_close_console(); /* force reopen of /dev/console */
+         log_open();
+ 
+         umask(0022);
+diff --git a/src/shared/log.c b/src/shared/log.c
+index 8f4995a..bd918fb 100644
+--- a/src/shared/log.c
++++ b/src/shared/log.c
+@@ -272,8 +272,6 @@ int log_open(void) {
+         log_close_journal();
+         log_close_syslog();
+ 
+-        /* Get the real /dev/console if we are PID=1, hence reopen */
+-        log_close_console();
+         return log_open_console();
+ }
+ 
diff --git a/0181-log-when-we-log-to-dev-console-and-got-disconnected-.patch b/0181-log-when-we-log-to-dev-console-and-got-disconnected-.patch
new file mode 100644
index 0000000..643807f
--- /dev/null
+++ b/0181-log-when-we-log-to-dev-console-and-got-disconnected-.patch
@@ -0,0 +1,42 @@
+From 21804157ff0e60508fd128310505381f7b3ec2b0 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Wed, 18 Dec 2013 16:49:15 +0100
+Subject: [PATCH] log: when we log to /dev/console and got disconnected (maybe
+ due to vhangup) reconnect
+
+---
+ src/shared/log.c | 21 +++++++++++++++++++--
+ 1 file changed, 19 insertions(+), 2 deletions(-)
+
+diff --git a/src/shared/log.c b/src/shared/log.c
+index bd918fb..de770ca 100644
+--- a/src/shared/log.c
++++ b/src/shared/log.c
+@@ -335,8 +335,25 @@ static int write_to_console(
+                 IOVEC_SET_STRING(iovec[n++], ANSI_HIGHLIGHT_OFF);
+         IOVEC_SET_STRING(iovec[n++], "\n");
+ 
+-        if (writev(console_fd, iovec, n) < 0)
+-                return -errno;
++        if (writev(console_fd, iovec, n) < 0) {
++
++                if (errno == EIO && getpid() == 1) {
++
++                        /* If somebody tried to kick us from our
++                         * console tty (via vhangup() or suchlike),
++                         * try to reconnect */
++
++                        log_close_console();
++                        log_open_console();
++
++                        if (console_fd < 0)
++                                return 0;
++
++                        if (writev(console_fd, iovec, n) < 0)
++                                return -errno;
++                } else
++                        return -errno;
++        }
+ 
+         return 1;
+ }
diff --git a/0182-loginctl-when-showing-device-tree-of-seats-with-no-d.patch b/0182-loginctl-when-showing-device-tree-of-seats-with-no-d.patch
new file mode 100644
index 0000000..68ec5ce
--- /dev/null
+++ b/0182-loginctl-when-showing-device-tree-of-seats-with-no-d.patch
@@ -0,0 +1,23 @@
+From d34a6029e4a59c75d9826e0aa57e548a86b08bba Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Wed, 18 Dec 2013 17:16:33 +0100
+Subject: [PATCH] loginctl: when showing device tree of seats with no devices
+ show something useful
+
+---
+ src/login/sysfs-show.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/src/login/sysfs-show.c b/src/login/sysfs-show.c
+index f7d11dd..cb12ebf 100644
+--- a/src/login/sysfs-show.c
++++ b/src/login/sysfs-show.c
+@@ -181,6 +181,8 @@ int show_sysfs(const char *seat, const char *prefix, unsigned n_columns) {
+         first = udev_enumerate_get_list_entry(e);
+         if (first)
+                 show_sysfs_one(udev, seat, &first, "/", prefix, n_columns);
++        else
++                printf("%s%s%s\n", prefix, draw_special_char(DRAW_TREE_RIGHT), "(none)");
+ 
+         return r;
+ }
diff --git a/0183-man-be-more-explicit-about-option-arguments-that-tak.patch b/0183-man-be-more-explicit-about-option-arguments-that-tak.patch
new file mode 100644
index 0000000..f930ed0
--- /dev/null
+++ b/0183-man-be-more-explicit-about-option-arguments-that-tak.patch
@@ -0,0 +1,52 @@
+From 6bd96f28f8d67cb5cb77057e60badb4550ae35f3 Mon Sep 17 00:00:00 2001
+From: "Jason St. John" <jstjohn at purdue.edu>
+Date: Tue, 17 Dec 2013 18:48:43 -0500
+Subject: [PATCH] man: be more explicit about option arguments that take
+ 128-bit IDs in journalctl(1)
+
+It may not be immediately obvious to the reader what "ID128" is, so replace the
+example option argument "ID128" with "128-bit-ID".
+---
+ man/journalctl.xml | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/man/journalctl.xml b/man/journalctl.xml
+index d936933..dced90f 100644
+--- a/man/journalctl.xml
++++ b/man/journalctl.xml
+@@ -725,7 +725,7 @@
+ 
+                         <varlistentry>
+                                 <term><option>--list-catalog
+-                                <optional><replaceable>ID128...</replaceable></optional>
++                                <optional><replaceable>128-bit-ID...</replaceable></optional>
+                                 </option></term>
+ 
+                                 <listitem><para>List the contents of
+@@ -734,7 +734,7 @@
+                                 description strings.</para>
+ 
+                                 <para>If any
+-                                <replaceable>ID128</replaceable>s are
++                                <replaceable>128-bit-ID</replaceable>s are
+                                 specified, only those entries are shown.
+                                 </para>
+                                 </listitem>
+@@ -742,7 +742,7 @@
+ 
+                         <varlistentry>
+                                 <term><option>--dump-catalog
+-                                <optional><replaceable>ID128...</replaceable></optional>
++                                <optional><replaceable>128-bit-ID...</replaceable></optional>
+                                 </option></term>
+ 
+                                 <listitem><para>Show the contents of
+@@ -753,7 +753,7 @@
+                                 files.</para>
+ 
+                                 <para>If any
+-                                <replaceable>ID128</replaceable>s are
++                                <replaceable>128-bit-ID</replaceable>s are
+                                 specified, only those entries are shown.
+                                 </para>
+                                 </listitem>
diff --git a/0184-man-add-DOI-for-refereed-article-on-Forward-Secure-S.patch b/0184-man-add-DOI-for-refereed-article-on-Forward-Secure-S.patch
new file mode 100644
index 0000000..9e08719
--- /dev/null
+++ b/0184-man-add-DOI-for-refereed-article-on-Forward-Secure-S.patch
@@ -0,0 +1,59 @@
+From 1f3128aec84ea40d54423386384ad28a789cb381 Mon Sep 17 00:00:00 2001
+From: "Jason St. John" <jstjohn at purdue.edu>
+Date: Tue, 17 Dec 2013 19:40:02 -0500
+Subject: [PATCH] man: add DOI for refereed article on Forward Secure Sealing
+ to journald.conf(5)
+
+In journalctl(1), be more explicit about the reference to "Seal=" in
+journald.conf(5) and what information can be found there.
+---
+ man/journalctl.xml    |  8 ++++++--
+ man/journald.conf.xml | 10 +++++-----
+ 2 files changed, 11 insertions(+), 7 deletions(-)
+
+diff --git a/man/journalctl.xml b/man/journalctl.xml
+index dced90f..d75c758 100644
+--- a/man/journalctl.xml
++++ b/man/journalctl.xml
+@@ -781,10 +781,14 @@
+                                 sealing key is stored in the journal
+                                 data directory and shall remain on the
+                                 host. The verification key should be
+-                                stored externally. Also see the
++                                stored externally. Refer to the
+                                 <option>Seal=</option> option in
+                                 <citerefentry><refentrytitle>journald.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+-                                for details.</para></listitem>
++                                for information on Forward Secure
++                                Sealing and for a link to a refereed
++                                scholarly paper detailing the
++                                cryptographic theory it is based on.
++                                </para></listitem>
+                         </varlistentry>
+ 
+                         <varlistentry>
+diff --git a/man/journald.conf.xml b/man/journald.conf.xml
+index 7aa2e78..8e642a3 100644
+--- a/man/journald.conf.xml
++++ b/man/journald.conf.xml
+@@ -130,15 +130,15 @@
+                                 by
+                                 <citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>'s
+                                 <option>--setup-keys</option>
+-                                command), forward secure sealing (FSS)
++                                command), Forward Secure Sealing (FSS)
+                                 for all persistent journal files is
+                                 enabled. FSS is based on <ulink
+                                 url="https://eprint.iacr.org/2013/397">Seekable
+                                 Sequential Key Generators</ulink> by
+-                                G. A. Marson and B. Poettering and
+-                                may be used to protect journal files
+-                                from unnoticed
+-                                alteration.</para></listitem>
++                                G. A. Marson and B. Poettering
++                                (doi:10.1007/978-3-642-40203-6_7)
++                                and may be used to protect journal files
++                                from unnoticed alteration.</para></listitem>
+                         </varlistentry>
+ 
+                         <varlistentry>
diff --git a/0185-journalctl-zsh-completion-fix-several-issues-in-help.patch b/0185-journalctl-zsh-completion-fix-several-issues-in-help.patch
new file mode 100644
index 0000000..4a8b38f
--- /dev/null
+++ b/0185-journalctl-zsh-completion-fix-several-issues-in-help.patch
@@ -0,0 +1,132 @@
+From 643f82598b69d3b3002294a456a459cceb075cd3 Mon Sep 17 00:00:00 2001
+From: "Jason St. John" <jstjohn at purdue.edu>
+Date: Tue, 17 Dec 2013 21:36:27 -0500
+Subject: [PATCH] journalctl,zsh-completion: fix several issues in --help
+ message text
+
+-- fix grammar and reword some descriptions for clarity
+-- add a useful description of what --follow does
+-- fix the description for --after-cursor
+-- properly introduce the FSS acronym for "Forward Secure Sealing" in
+both sections
+-- clarify the --disk-usage command
+
+[zj: perform similar changes to zsh completions]
+
+squash! journalctl: fix several issues in --help message text
+
+Conflicts:
+	src/journal/journalctl.c
+---
+ shell-completion/zsh/_journalctl | 14 +++++++-------
+ src/journal/journalctl.c         | 34 +++++++++++++++++-----------------
+ 2 files changed, 24 insertions(+), 24 deletions(-)
+
+diff --git a/shell-completion/zsh/_journalctl b/shell-completion/zsh/_journalctl
+index 29ff3e3..8c3dbb0 100644
+--- a/shell-completion/zsh/_journalctl
++++ b/shell-completion/zsh/_journalctl
+@@ -71,14 +71,14 @@ _arguments -s \
+     {-m,--merge}'[Show entries from all available journals]' \
+     {-b+,--boot=}'[Show data only from the specified boot or offset]:boot id or offset:_journal_boots' \
+     '--list-boots[List boots ordered by time]' \
+-    {-k,--dmesg}'[Show only kernel messages, Implies -b]' \
++    {-k,--dmesg}'[Show only kernel messages from the current boot]' \
+     {-u+,--unit=}'[Show data only from the specified unit]:units:_journal_fields _SYSTEMD_UNIT' \
+     '--user-unit=[Show data only from the specified user session unit]:units:_journal_fields USER_UNIT' \
+     {-p+,--priority=}'[Show only messages within the specified priority range]:priority:_journal_fields PRIORITY' \
+-    {-c+,--cursor=}'[Start showing entries from specified cursor]:cursors:_journal_fields __CURSORS' \
+-    '--after-cursor=[Start showing entries from the location in the journal after the cursor]:cursors:_journal_fields __CURSORS' \
+-    '--since=[Start showing entries newer or of the specified date]:YYYY-MM-DD HH\:MM\:SS' \
+-    '--until=[Stop showing entries older or of the specified date]:YYYY-MM-DD HH\:MM\:SS' \
++    {-c+,--cursor=}'[Start showing entries from the specified cursor]:cursors:_journal_fields __CURSORS' \
++    '--after-cursor=[Start showing entries from after the specified cursor]:cursors:_journal_fields __CURSORS' \
++    '--since=[Start showing entries on or newer than the specified date]:YYYY-MM-DD HH\:MM\:SS' \
++    '--until=[Stop showing entries on or older than the specified date]:YYYY-MM-DD HH\:MM\:SS' \
+     {-F,--field=}'[List all values a certain field takes]:Fields:_list_fields' \
+     '--system[Show system and kernel messages]' \
+     '--user[Show messages from user services]' \
+@@ -91,8 +91,8 @@ _arguments -s \
+     '--list-catalog[List messages in catalog]' \
+     '--dump-catalog[Dump messages in catalog]' \
+     '--update-catalog[Update binary catalog database]' \
+-    '--setup-keys[Generate new FSS key pair]' \
+-    '--force[Force recreation of FSS keys]' \
++    '--setup-keys[Generate a new FSS key pair]' \
++    '--force[Force recreation of the FSS keys]' \
+     '--interval=[Time interval for changing the FSS sealing key]:time interval' \
+     '--verify[Verify journal file consistency]' \
+     '--verify-key=[Specify FSS verification key]:FSS key' \
+diff --git a/src/journal/journalctl.c b/src/journal/journalctl.c
+index 71e28b0..1d66792 100644
+--- a/src/journal/journalctl.c
++++ b/src/journal/journalctl.c
+@@ -130,30 +130,30 @@ static int help(void) {
+                "Query the journal.\n\n"
+                "Flags:\n"
+                "     --system              Show only the system journal\n"
+-               "     --user                Show only the user journal for current user\n"
+-               "     --since=DATE          Start showing entries newer or of the specified date\n"
+-               "     --until=DATE          Stop showing entries older or of the specified date\n"
+-               "  -c --cursor=CURSOR       Start showing entries from specified cursor\n"
+-               "     --after-cursor=CURSOR Start showing entries from specified cursor\n"
++               "     --user                Show only the user journal for the current user\n"
++               "     --since=DATE          Start showing entries on or newer than the specified date\n"
++               "     --until=DATE          Stop showing entries on or older than the specified date\n"
++               "  -c --cursor=CURSOR       Start showing entries from the specified cursor\n"
++               "     --after-cursor=CURSOR Start showing entries from after the specified cursor\n"
+                "     --show-cursor         Print the cursor after all the entries\n"
+-               "  -b --boot[=ID]           Show data only from ID or current boot if unspecified\n"
++               "  -b --boot[=ID]           Show data only from ID or, if unspecified, the current boot\n"
+                "     --list-boots          Show terse information about recorded boots\n"
+-               "  -k --dmesg               Show kernel message log from current boot\n"
++               "  -k --dmesg               Show kernel message log from the current boot\n"
+                "  -u --unit=UNIT           Show data only from the specified unit\n"
+                "     --user-unit=UNIT      Show data only from the specified user session unit\n"
+                "  -p --priority=RANGE      Show only messages within the specified priority range\n"
+                "  -e --pager-end           Immediately jump to end of the journal in the pager\n"
+-               "  -f --follow              Follow journal\n"
++               "  -f --follow              Follow the journal\n"
+                "  -n --lines[=INTEGER]     Number of journal entries to show\n"
+                "     --no-tail             Show all lines, even in follow mode\n"
+                "  -r --reverse             Show the newest entries first\n"
+                "  -o --output=STRING       Change journal output mode (short, short-iso,\n"
+-               "                           short-precise, short-monotonic, verbose,\n"
+-               "                           export, json, json-pretty, json-sse, cat)\n"
++               "                                   short-precise, short-monotonic, verbose,\n"
++               "                                   export, json, json-pretty, json-sse, cat)\n"
+                "  -x --catalog             Add message explanations where available\n"
+                "  -l --full                Do not ellipsize fields\n"
+                "  -a --all                 Show all fields, including long and unprintable\n"
+-               "  -q --quiet               Don't show privilege warning\n"
++               "  -q --quiet               Do not show privilege warning\n"
+                "     --no-pager            Do not pipe output into a pager\n"
+                "  -m --merge               Show entries from all available journals\n"
+                "  -D --directory=PATH      Show journal files from directory\n"
+@@ -162,20 +162,20 @@ static int help(void) {
+ #ifdef HAVE_GCRYPT
+                "     --interval=TIME       Time interval for changing the FSS sealing key\n"
+                "     --verify-key=KEY      Specify FSS verification key\n"
+-               "     --force               Force overriding new FSS key pair with --setup-keys\n"
++               "     --force               Force overriding of the FSS key pair with --setup-keys\n"
+ #endif
+                "\nCommands:\n"
+-               "  -h --help                Show this help\n"
++               "  -h --help                Show this help text\n"
+                "     --version             Show package version\n"
+-               "     --new-id128           Generate a new 128 Bit ID\n"
++               "     --new-id128           Generate a new 128-bit ID\n"
+                "     --header              Show journal header information\n"
+-               "     --disk-usage          Show total disk usage\n"
+-               "  -F --field=FIELD         List all values a certain field takes\n"
++               "     --disk-usage          Show total disk usage of all journal files\n"
++               "  -F --field=FIELD         List all values that a specified field takes\n"
+                "     --list-catalog        Show message IDs of all entries in the message catalog\n"
+                "     --dump-catalog        Show entries in the message catalog\n"
+                "     --update-catalog      Update the message catalog database\n"
+ #ifdef HAVE_GCRYPT
+-               "     --setup-keys          Generate new FSS key pair\n"
++               "     --setup-keys          Generate a new FSS key pair\n"
+                "     --verify              Verify journal file consistency\n"
+ #endif
+                , program_invocation_short_name);
diff --git a/0186-keymap-Refactor-Acer-tables.patch b/0186-keymap-Refactor-Acer-tables.patch
new file mode 100644
index 0000000..424f2b1
--- /dev/null
+++ b/0186-keymap-Refactor-Acer-tables.patch
@@ -0,0 +1,145 @@
+From 7bf8a20c2f52a3684deef37098f7a73a873da93c Mon Sep 17 00:00:00 2001
+From: Martin Pitt <martinpitt at gnome.org>
+Date: Thu, 19 Dec 2013 08:33:32 +0100
+Subject: [PATCH] keymap: Refactor Acer tables
+
+Move common keys into generic Acer table, and factorize the model specific
+exceptions.
+---
+ hwdb/60-keyboard.hwdb | 101 ++++++++++++++++++--------------------------------
+ 1 file changed, 36 insertions(+), 65 deletions(-)
+
+diff --git a/hwdb/60-keyboard.hwdb b/hwdb/60-keyboard.hwdb
+index d4d948d..ab9e569 100644
+--- a/hwdb/60-keyboard.hwdb
++++ b/hwdb/60-keyboard.hwdb
+@@ -46,52 +46,7 @@
+ # Acer
+ ##########################################
+ 
+-# Acer platform kernel driver
+-keyboard:name:Acer WMI hotkeys:dmi:bvn*:bvr*:bd*:svn*:pnAcer*:pvr*
+- KEYBOARD_KEY_82=f21
+-
+-# Aspire 5720
+-keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnAspire*5720*:pvr*
+-keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnZG8*:pvr*
+- KEYBOARD_KEY_84=bluetooth                              # sent when bluetooth module missing, and key pressed
+- KEYBOARD_KEY_92=media                                  # Acer arcade
+- KEYBOARD_KEY_d4=bluetooth                              # Bluetooth on
+- KEYBOARD_KEY_d9=bluetooth                              # Bluetooth off
+- KEYBOARD_KEY_f4=prog3                                  # e-key
+-
+-# Aspire 5920g
+-keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnAspire*5920G:*
+- KEYBOARD_KEY_8a=media
+- KEYBOARD_KEY_92=media
+- KEYBOARD_KEY_a6=setup
+- KEYBOARD_KEY_b2=www
+- KEYBOARD_KEY_d9=bluetooth                              # (toggle) on-to-off
+-
+-# Aspire 6920
+-keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnAspire*6920:*
+- KEYBOARD_KEY_d9=bluetooth                              # (toggle) on-to-off
+- KEYBOARD_KEY_92=media
+- KEYBOARD_KEY_9e=back
+- KEYBOARD_KEY_83=rewind
+- KEYBOARD_KEY_89=fastforward
+-
+-# Aspire 8930
+-keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnAspire*8930:*
+- KEYBOARD_KEY_ca=prog3                                  # key 'HOLD' on CineDash Media Console
+- KEYBOARD_KEY_83=rewind
+- KEYBOARD_KEY_89=fastforward
+- KEYBOARD_KEY_92=media                                  # key 'ARCADE' on CineDash Media Console
+- KEYBOARD_KEY_9e=back
+-
+-# Travelmate C300
+-keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnTravelMate*C3[01]0*:pvr*
+- KEYBOARD_KEY_67=f24                                    # FIXME: rotate screen
+- KEYBOARD_KEY_68=up
+- KEYBOARD_KEY_69=down
+- KEYBOARD_KEY_6b=fn
+- KEYBOARD_KEY_6c=screenlock                             # FIXME: lock tablet device/buttons
+-
+-#
++# common keys
+ keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pn*
+ keyboard:dmi:bvn*:bvr*:bd*:svnGateway*:pnA0A1*:pvr*
+ keyboard:dmi:bvn*:bvr*:bd*:svneMachines:pneMachines*E725:pvr*
+@@ -99,6 +54,7 @@ keyboard:dmi:bvn*:bvr*:bd*:svneMachines:pneMachines*E725:pvr*
+  KEYBOARD_KEY_a6=setup                                  # Fn+F2 Acer eSettings
+  KEYBOARD_KEY_a7=battery                                # Fn+F3 Power Management
+  KEYBOARD_KEY_a9=switchvideomode                        # Fn+F5
++ KEYBOARD_KEY_b2=www
+  KEYBOARD_KEY_b3=euro
+  KEYBOARD_KEY_b4=dollar
+  KEYBOARD_KEY_ce=brightnessup                           # Fn+Right
+@@ -118,33 +74,48 @@ keyboard:dmi:bvn*:bvr*:bd*:svneMachines:pneMachines*E725:pvr*
+  KEYBOARD_KEY_f8=fn
+  KEYBOARD_KEY_f9=prog1                                  # Launch NTI shadow
+ 
+-#
++# Acer platform kernel driver
++keyboard:name:Acer WMI hotkeys:dmi:bvn*:bvr*:bd*:svn*:pnAcer*:pvr*
++ KEYBOARD_KEY_82=f21					# Touchpad toggle
++
++# Aspire models
++keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnAspire*:pvr*
++ KEYBOARD_KEY_84=bluetooth                              # sent when bluetooth module missing, and key pressed
++ KEYBOARD_KEY_d9=bluetooth                              # Bluetooth off
++ KEYBOARD_KEY_92=media                                  # Acer arcade
++
++keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnAspire*5720*:pvr*
++keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnZG8*:pvr*
++ KEYBOARD_KEY_f4=prog3                                  # e-key
++
++keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnAspire*5920G:*
++ KEYBOARD_KEY_8a=media
++ KEYBOARD_KEY_a6=setup
++
++keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnAspire*6920:*
++keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnAspire*8930:*
++ KEYBOARD_KEY_ca=prog3                                  # key 'HOLD' on CineDash Media Console
++ KEYBOARD_KEY_83=rewind
++ KEYBOARD_KEY_89=fastforward
++ KEYBOARD_KEY_9e=back
++
++# Travelmate C300
++keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnTravelMate*C3[01]0*:pvr*
++ KEYBOARD_KEY_67=f24                                    # FIXME: rotate screen
++ KEYBOARD_KEY_68=up
++ KEYBOARD_KEY_69=down
++ KEYBOARD_KEY_6b=fn
++ KEYBOARD_KEY_6c=screenlock                             # FIXME: lock tablet device/buttons
++
++# on some models this isn't brightnessup
+ keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pn*5210*:pvr*
+ keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pn*5220*:pvr*
+ keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pn*5610*:pvr*
+ keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pn*5620*:pvr*
+ keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pn*5720*:pvr*
+- KEYBOARD_KEY_ee=screenlock
+-
+-#
+-keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnTravelMate*6292*:pvr*
+-keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnTravelMate*8471*:pvr*
+ keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnTravelMate*4720*:pvr*
+-keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnTravelMate*7720*:pvr*
+-keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnAspire*1810T*:pvr*
+-keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnAO751h:*
+-keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnAO531h:*
+- KEYBOARD_KEY_d9=bluetooth
+-
+-#
+-keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnTravelMate*4720*:pvr*
+- KEYBOARD_KEY_b2=www
+- KEYBOARD_KEY_ee=screenlock
+-
+-#
+ keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnTravelMate*6593:*
+ keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnAspire*1640:*
+- KEYBOARD_KEY_b2=www
+  KEYBOARD_KEY_ee=screenlock
+ 
+ ###########################################################
diff --git a/0187-logging-reduce-send-timeout-to-something-more-sensib.patch b/0187-logging-reduce-send-timeout-to-something-more-sensib.patch
new file mode 100644
index 0000000..4c7c234
--- /dev/null
+++ b/0187-logging-reduce-send-timeout-to-something-more-sensib.patch
@@ -0,0 +1,49 @@
+From f1a638c065df3432bb69cc664b5425b96de13325 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Sat, 14 Dec 2013 11:54:26 -0500
+Subject: [PATCH] logging: reduce send timeout to something more sensible
+
+For a user, the timeout of 1 min per message seems equivalent to a hang.
+If journald cannot process a message from PID1 for 10 ms then something
+is significantly wrong. It's better to lose the message and continue.
+---
+ src/shared/log.c       | 5 ++++-
+ src/shared/time-util.c | 7 +++----
+ 2 files changed, 7 insertions(+), 5 deletions(-)
+
+diff --git a/src/shared/log.c b/src/shared/log.c
+index de770ca..2267764 100644
+--- a/src/shared/log.c
++++ b/src/shared/log.c
+@@ -126,7 +126,10 @@ static int create_log_socket(int type) {
+         /* We need a blocking fd here since we'd otherwise lose
+         messages way too early. However, let's not hang forever in the
+         unlikely case of a deadlock. */
+-        timeval_store(&tv, 1*USEC_PER_MINUTE);
++        if (getpid() == 1)
++                timeval_store(&tv, 10 * USEC_PER_MSEC);
++        else
++                timeval_store(&tv, 10 * USEC_PER_SEC);
+         setsockopt(fd, SOL_SOCKET, SO_SNDTIMEO, &tv, sizeof(tv));
+ 
+         return fd;
+diff --git a/src/shared/time-util.c b/src/shared/time-util.c
+index d31401b..505b280 100644
+--- a/src/shared/time-util.c
++++ b/src/shared/time-util.c
+@@ -141,12 +141,11 @@ struct timeval *timeval_store(struct timeval *tv, usec_t u) {
+         if (u == (usec_t) -1) {
+                 tv->tv_sec = (time_t) -1;
+                 tv->tv_usec = (suseconds_t) -1;
+-                return tv;
++        } else {
++                tv->tv_sec = (time_t) (u / USEC_PER_SEC);
++                tv->tv_usec = (suseconds_t) (u % USEC_PER_SEC);
+         }
+ 
+-        tv->tv_sec = (time_t) (u / USEC_PER_SEC);
+-        tv->tv_usec = (suseconds_t) (u % USEC_PER_SEC);
+-
+         return tv;
+ }
+ 
diff --git a/0188-DEFAULT_PATH_SPLIT_USR-macro.patch b/0188-DEFAULT_PATH_SPLIT_USR-macro.patch
new file mode 100644
index 0000000..60d290f
--- /dev/null
+++ b/0188-DEFAULT_PATH_SPLIT_USR-macro.patch
@@ -0,0 +1,43 @@
+From e02f70c30b2ad98e5547faebd1304d5273eb0fe6 Mon Sep 17 00:00:00 2001
+From: Shawn Landden <shawn at churchofgit.com>
+Date: Fri, 20 Dec 2013 15:35:38 -0800
+Subject: [PATCH] DEFAULT_PATH_SPLIT_USR macro
+
+---
+ src/nspawn/nspawn.c    | 2 +-
+ src/shared/path-util.h | 7 +++++--
+ 2 files changed, 6 insertions(+), 3 deletions(-)
+
+diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c
+index 618f9c3..cafc306 100644
+--- a/src/nspawn/nspawn.c
++++ b/src/nspawn/nspawn.c
+@@ -1227,7 +1227,7 @@ int main(int argc, char *argv[]) {
+                         gid_t gid = (gid_t) -1;
+                         unsigned n_env = 2;
+                         const char *envp[] = {
+-                                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
++                                "PATH=" DEFAULT_PATH_SPLIT_USR,
+                                 "container=systemd-nspawn", /* LXC sets container=lxc, so follow the scheme here */
+                                 NULL, /* TERM */
+                                 NULL, /* HOME */
+diff --git a/src/shared/path-util.h b/src/shared/path-util.h
+index 0a42de7..1e58e1b 100644
+--- a/src/shared/path-util.h
++++ b/src/shared/path-util.h
+@@ -25,10 +25,13 @@
+ 
+ #include "macro.h"
+ 
++#define DEFAULT_PATH_NORMAL "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin"
++#define DEFAULT_PATH_SPLIT_USR DEFAULT_PATH_NORMAL ":/sbin:/bin"
++
+ #ifdef HAVE_SPLIT_USR
+-#  define DEFAULT_PATH "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
++#  define DEFAULT_PATH DEFAULT_PATH_SPLIT_USR
+ #else
+-#  define DEFAULT_PATH "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin"
++#  define DEFAULT_PATH DEFAULT_PATH_NORMAL
+ #endif
+ 
+ bool is_path(const char *p) _pure_;
diff --git a/0189-fstab-generator-Do-not-try-to-fsck-non-devices.patch b/0189-fstab-generator-Do-not-try-to-fsck-non-devices.patch
new file mode 100644
index 0000000..7bb4534
--- /dev/null
+++ b/0189-fstab-generator-Do-not-try-to-fsck-non-devices.patch
@@ -0,0 +1,28 @@
+From 67ab7e43a7c5623af367193817f5b562d635b0aa Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Thomas=20B=C3=A4chler?= <thomas at archlinux.org>
+Date: Sat, 21 Dec 2013 11:22:37 +0100
+Subject: [PATCH] fstab-generator: Do not try to fsck non-devices
+
+This fixes a regression introduced in 64e70e4 where the mount fails
+when fstab is misconfigured with fs_passno > 0 on a virtual file
+system like nfs, and the type is specified as "auto".
+---
+ src/fstab-generator/fstab-generator.c | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/src/fstab-generator/fstab-generator.c b/src/fstab-generator/fstab-generator.c
+index 4137796..8c4c61c 100644
+--- a/src/fstab-generator/fstab-generator.c
++++ b/src/fstab-generator/fstab-generator.c
+@@ -153,6 +153,11 @@ static int add_fsck(FILE *f, const char *what, const char *where, const char *ty
+         if (passno == 0)
+                 return 0;
+ 
++        if (!is_device_path(what)) {
++                log_warning("Checking was requested for \"%s\", but it is not a device.", what);
++                return 0;
++        }
++
+         if (type && !streq(type, "auto")) {
+                 int r;
+                 const char *checker;
diff --git a/0190-logind-remove-dead-variable.patch b/0190-logind-remove-dead-variable.patch
new file mode 100644
index 0000000..59b0a63
--- /dev/null
+++ b/0190-logind-remove-dead-variable.patch
@@ -0,0 +1,37 @@
+From 45e44dd49cafc1befdc1fb6d948071520335964a Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Thu, 19 Dec 2013 14:16:46 -0500
+Subject: [PATCH] logind: remove dead variable
+
+Noticed-by: Jan Alexander Steffens <jan.steffens at gmail.com>
+---
+ src/login/logind-user.c | 3 ---
+ src/login/logind-user.h | 1 -
+ 2 files changed, 4 deletions(-)
+
+diff --git a/src/login/logind-user.c b/src/login/logind-user.c
+index e2fce5c..b87311c 100644
+--- a/src/login/logind-user.c
++++ b/src/login/logind-user.c
+@@ -648,9 +648,6 @@ UserState user_get_state(User *u) {
+ 
+         assert(u);
+ 
+-        if (u->closing)
+-                return USER_CLOSING;
+-
+         if (u->slice_job || u->service_job)
+                 return USER_OPENING;
+ 
+diff --git a/src/login/logind-user.h b/src/login/logind-user.h
+index b9171d3..a36f456 100644
+--- a/src/login/logind-user.h
++++ b/src/login/logind-user.h
+@@ -61,7 +61,6 @@ struct User {
+ 
+         bool in_gc_queue:1;
+         bool started:1;
+-        bool closing:1;
+ 
+         LIST_HEAD(Session, sessions);
+         LIST_FIELDS(User, gc_queue);
diff --git a/0191-hwdb-update.patch b/0191-hwdb-update.patch
new file mode 100644
index 0000000..7359702
--- /dev/null
+++ b/0191-hwdb-update.patch
@@ -0,0 +1,4917 @@
+From 59f89c783a3dd29bc024be457dfd7ad664d55358 Mon Sep 17 00:00:00 2001
+From: Marcel Holtmann <marcel at holtmann.org>
+Date: Sun, 22 Dec 2013 11:32:11 -0800
+Subject: [PATCH] hwdb: update
+
+Conflicts:
+	hwdb/20-sdio-vendor-model.hwdb
+---
+ hwdb/20-OUI.hwdb              | 1174 ++++++++++++++++++++++++++++++++++++++++-
+ hwdb/20-pci-vendor-model.hwdb |  689 ++++++++++++++++++++++--
+ hwdb/20-usb-vendor-model.hwdb |  112 +++-
+ 3 files changed, 1922 insertions(+), 53 deletions(-)
+
+diff --git a/hwdb/20-OUI.hwdb b/hwdb/20-OUI.hwdb
+index 5067167..92b96ae 100644
+--- a/hwdb/20-OUI.hwdb
++++ b/hwdb/20-OUI.hwdb
+@@ -13411,6 +13411,222 @@ OUI:40D855198*
+ OUI:40D855199*
+  ID_OUI_FROM_DATABASE=PRESSOL Schmiergeraete GmbH
+ 
++OUI:40D85519A*
++ ID_OUI_FROM_DATABASE=Rohde&Schwarz Topex SA
++
++OUI:40D85519B*
++ ID_OUI_FROM_DATABASE=Northern Star Technologies
++
++OUI:40D85519C*
++ ID_OUI_FROM_DATABASE=Parris Service Corporation
++
++OUI:40D85519D*
++ ID_OUI_FROM_DATABASE=EMAC, Inc.
++
++OUI:40D85519E*
++ ID_OUI_FROM_DATABASE=Thirdwayv Inc.
++
++OUI:40D85519F*
++ ID_OUI_FROM_DATABASE=Patria Aviation Oy
++
++OUI:40D8551A0*
++ ID_OUI_FROM_DATABASE=Futaba Corporation
++
++OUI:40D8551A1*
++ ID_OUI_FROM_DATABASE=KRONOTECH SRL
++
++OUI:40D8551A2*
++ ID_OUI_FROM_DATABASE=HIPODROMO DE AGUA CALIENTE, S.A. DE C.V.
++
++OUI:40D8551A3*
++ ID_OUI_FROM_DATABASE=Noritake Itron Corporation
++
++OUI:40D8551A4*
++ ID_OUI_FROM_DATABASE=cibite AG
++
++OUI:40D8551A5*
++ ID_OUI_FROM_DATABASE=DemoPad
++
++OUI:40D8551A6*
++ ID_OUI_FROM_DATABASE=RB-LINK Wireless
++
++OUI:40D8551A7*
++ ID_OUI_FROM_DATABASE=ENTEC Electric & Electronic CO., LTD
++
++OUI:40D8551A8*
++ ID_OUI_FROM_DATABASE=Multiobrabotka
++
++OUI:40D8551A9*
++ ID_OUI_FROM_DATABASE=Lubino s.r.o.
++
++OUI:40D8551AA*
++ ID_OUI_FROM_DATABASE=Broachlink Technology Co.,Limited
++
++OUI:40D8551AB*
++ ID_OUI_FROM_DATABASE=Rosslare Enterprises Limited
++
++OUI:40D8551AC*
++ ID_OUI_FROM_DATABASE=ELAN SYSTEMS
++
++OUI:40D8551AD*
++ ID_OUI_FROM_DATABASE=WICHER DIGITAL TECHNIK
++
++OUI:40D8551AE*
++ ID_OUI_FROM_DATABASE=Autonomous Solutions, Inc
++
++OUI:40D8551AF*
++ ID_OUI_FROM_DATABASE=Vigitron Inc.
++
++OUI:40D8551B0*
++ ID_OUI_FROM_DATABASE=Shin-ei Electronic Measuring Co.,Ltd.
++
++OUI:40D8551B1*
++ ID_OUI_FROM_DATABASE=Logos 01 S.r.l.
++
++OUI:40D8551B2*
++ ID_OUI_FROM_DATABASE=AGE A. Gilg Elektronik
++
++OUI:40D8551B3*
++ ID_OUI_FROM_DATABASE=BETTINI SRL
++
++OUI:40D8551B4*
++ ID_OUI_FROM_DATABASE=Inforce Computing Inc.
++
++OUI:40D8551B5*
++ ID_OUI_FROM_DATABASE=A+EC Klein Ingenieurbuero
++
++OUI:40D8551B6*
++ ID_OUI_FROM_DATABASE=Magic Systems
++
++OUI:40D8551B7*
++ ID_OUI_FROM_DATABASE=TEWS Elektronik GmbH & Co. KG
++
++OUI:40D8551B8*
++ ID_OUI_FROM_DATABASE=Orion Systems, Inc
++
++OUI:40D8551B9*
++ ID_OUI_FROM_DATABASE=Beking Industrieele automatisering
++
++OUI:40D8551BA*
++ ID_OUI_FROM_DATABASE=Creative Lighting And Sound Systems Pty Ltd
++
++OUI:40D8551BB*
++ ID_OUI_FROM_DATABASE=Micromega Dynamics SA
++
++OUI:40D8551BC*
++ ID_OUI_FROM_DATABASE=KbDevice,Inc.
++
++OUI:40D8551BD*
++ ID_OUI_FROM_DATABASE=HORIBA ABX
++
++OUI:40D8551BE*
++ ID_OUI_FROM_DATABASE=PEEK TRAFFIC
++
++OUI:40D8551BF*
++ ID_OUI_FROM_DATABASE=shanghai mingding information tech co.Ltd
++
++OUI:40D8551C0*
++ ID_OUI_FROM_DATABASE=NPB Automation AB
++
++OUI:40D8551C1*
++ ID_OUI_FROM_DATABASE=Triamec Motion AG
++
++OUI:40D8551C2*
++ ID_OUI_FROM_DATABASE=Digital Display Systems
++
++OUI:40D8551C3*
++ ID_OUI_FROM_DATABASE=Cornfed Systems LLC
++
++OUI:40D8551C4*
++ ID_OUI_FROM_DATABASE=QED Advanced Systems Limited
++
++OUI:40D8551C6*
++ ID_OUI_FROM_DATABASE=Device Solutions Ltd
++
++OUI:40D8551C7*
++ ID_OUI_FROM_DATABASE=Wexiödisk AB
++
++OUI:40D8551C8*
++ ID_OUI_FROM_DATABASE=Sensata Technologies
++
++OUI:40D8551C9*
++ ID_OUI_FROM_DATABASE=Andy-L Ltd.
++
++OUI:40D8551CA*
++ ID_OUI_FROM_DATABASE=Rigel Engineering
++
++OUI:40D8551CB*
++ ID_OUI_FROM_DATABASE=MG S.r.l.
++
++OUI:40D8551CD*
++ ID_OUI_FROM_DATABASE=YXLON International A/S
++
++OUI:40D8551CE*
++ ID_OUI_FROM_DATABASE=Peter Huber
++
++OUI:40D8551CF*
++ ID_OUI_FROM_DATABASE=Omnik New Energy Co., Ltd
++
++OUI:40D8551D0*
++ ID_OUI_FROM_DATABASE=Webeasy BV
++
++OUI:40D8551D1*
++ ID_OUI_FROM_DATABASE=Founder Broadband Network Service Co.,Ltd.
++
++OUI:40D8551D2*
++ ID_OUI_FROM_DATABASE=InventLab s.c.
++
++OUI:40D8551D3*
++ ID_OUI_FROM_DATABASE=Kaluga Teletypes Manufacturing Plant
++
++OUI:40D8551D4*
++ ID_OUI_FROM_DATABASE=Prisma Engineering srl
++
++OUI:40D8551D5*
++ ID_OUI_FROM_DATABASE=FST21 Ltd.
++
++OUI:40D8551D6*
++ ID_OUI_FROM_DATABASE=EMS Computers Pty Ltd
++
++OUI:40D8551D7*
++ ID_OUI_FROM_DATABASE=Wheatstone Corporation
++
++OUI:40D8551D8*
++ ID_OUI_FROM_DATABASE=Owl Computing Technologies, Inc.
++
++OUI:40D8551D9*
++ ID_OUI_FROM_DATABASE=Commercial Wireless Systems International LLC.
++
++OUI:40D8551DA*
++ ID_OUI_FROM_DATABASE=Energy Technology and Control Ltd.
++
++OUI:40D8551DB*
++ ID_OUI_FROM_DATABASE=NIPPON TECHNO LAB.,INC,
++
++OUI:40D8551DC*
++ ID_OUI_FROM_DATABASE=Aplex Technology Inc.
++
++OUI:40D8551DD*
++ ID_OUI_FROM_DATABASE=BaOpt Benelux bv
++
++OUI:40D8551DE*
++ ID_OUI_FROM_DATABASE=Vidisys GmbH
++
++OUI:40D8551DF*
++ ID_OUI_FROM_DATABASE=Chengdu Meihuan Technology Co.,Ltd
++
++OUI:40D8551E0*
++ ID_OUI_FROM_DATABASE=Embedded Technology Corporation
++
++OUI:40D8551E1*
++ ID_OUI_FROM_DATABASE=AD QUALITE
++
++OUI:40D8551E2*
++ ID_OUI_FROM_DATABASE=ELNEC s.r.o.
++
++OUI:40D8551E3*
++ ID_OUI_FROM_DATABASE=Mega Electronics Ltd
++
+ OUI:000000*
+  ID_OUI_FROM_DATABASE=XEROX CORPORATION
+ 
+@@ -13664,7 +13880,7 @@ OUI:000053*
+  ID_OUI_FROM_DATABASE=COMPUCORP
+ 
+ OUI:000054*
+- ID_OUI_FROM_DATABASE=MODICON, INC.
++ ID_OUI_FROM_DATABASE=Schnieder Electric
+ 
+ OUI:000055*
+  ID_OUI_FROM_DATABASE=COMMISSARIAT A L`ENERGIE ATOM.
+@@ -13694,7 +13910,7 @@ OUI:00005D*
+  ID_OUI_FROM_DATABASE=CS TELECOM
+ 
+ OUI:00005E*
+- ID_OUI_FROM_DATABASE=USC INFORMATION SCIENCES INST
++ ID_OUI_FROM_DATABASE=ICANN, IANA Department
+ 
+ OUI:00005F*
+  ID_OUI_FROM_DATABASE=SUMITOMO ELECTRIC IND., LTD.
+@@ -17957,7 +18173,7 @@ OUI:0005ED*
+  ID_OUI_FROM_DATABASE=Technikum Joanneum GmbH
+ 
+ OUI:0005EE*
+- ID_OUI_FROM_DATABASE=BEWATOR Group
++ ID_OUI_FROM_DATABASE=Siemens AB, Infrastructure & Cities, Building Technologies Division, IC BT SSP SP BA PR
+ 
+ OUI:0005EF*
+  ID_OUI_FROM_DATABASE=ADOIR Digital Technology
+@@ -19412,7 +19628,7 @@ OUI:0007D2*
+  ID_OUI_FROM_DATABASE=Logopak Systeme GmbH & Co. KG
+ 
+ OUI:0007D3*
+- ID_OUI_FROM_DATABASE=Stork Prints B.V.
++ ID_OUI_FROM_DATABASE=SPGPrints B.V.
+ 
+ OUI:0007D4*
+  ID_OUI_FROM_DATABASE=Zhejiang Yutong Network Communication Co Ltd.
+@@ -19613,7 +19829,7 @@ OUI:000815*
+  ID_OUI_FROM_DATABASE=CATS Co., Ltd.
+ 
+ OUI:000816*
+- ID_OUI_FROM_DATABASE=Bluetags A/S
++ ID_OUI_FROM_DATABASE=Bluelon ApS
+ 
+ OUI:000817*
+  ID_OUI_FROM_DATABASE=EmergeCore Networks LLC
+@@ -29819,7 +30035,7 @@ OUI:001587*
+  ID_OUI_FROM_DATABASE=Takenaka Seisakusho Co.,Ltd
+ 
+ OUI:001588*
+- ID_OUI_FROM_DATABASE=Balda Solution Malaysia Sdn Bhd
++ ID_OUI_FROM_DATABASE=Salutica Allied Solutions Sdn Bhd
+ 
+ OUI:001589*
+  ID_OUI_FROM_DATABASE=D-MAX Technology Co.,Ltd
+@@ -33935,7 +34151,7 @@ OUI:001AE7*
+  ID_OUI_FROM_DATABASE=Aztek Networks, Inc.
+ 
+ OUI:001AE8*
+- ID_OUI_FROM_DATABASE=Siemens Enterprise Communications GmbH & Co. KG
++ ID_OUI_FROM_DATABASE=Unify GmbH and Co KG
+ 
+ OUI:001AE9*
+  ID_OUI_FROM_DATABASE=Nintendo Co., Ltd.
+@@ -36926,7 +37142,7 @@ OUI:001ECC*
+  ID_OUI_FROM_DATABASE=2Wire, Inc.
+ 
+ OUI:001ECD*
+- ID_OUI_FROM_DATABASE=2Wire, Inc.
++ ID_OUI_FROM_DATABASE=KYLAND Technology Co. LTD
+ 
+ OUI:001ECE*
+  ID_OUI_FROM_DATABASE=2Wire, Inc.
+@@ -40337,7 +40553,7 @@ OUI:002340*
+  ID_OUI_FROM_DATABASE=MiX Telematics
+ 
+ OUI:002341*
+- ID_OUI_FROM_DATABASE=Siemens AG, Infrastructure & Cities Sector, Building Technologies Division
++ ID_OUI_FROM_DATABASE=Siemens AB, Infrastructure & Cities, Building Technologies Division, IC BT SSP SP BA PR
+ 
+ OUI:002342*
+  ID_OUI_FROM_DATABASE=Coffee Equipment Company
+@@ -42200,7 +42416,7 @@ OUI:0025B8*
+  ID_OUI_FROM_DATABASE=Agile Communications, Inc.
+ 
+ OUI:0025B9*
+- ID_OUI_FROM_DATABASE=Agilink Systems Corp.
++ ID_OUI_FROM_DATABASE=Cypress Solutions Inc
+ 
+ OUI:0025BA*
+  ID_OUI_FROM_DATABASE=Alcatel-Lucent IPD
+@@ -44405,7 +44621,7 @@ OUI:004065*
+  ID_OUI_FROM_DATABASE=GTE SPACENET
+ 
+ OUI:004066*
+- ID_OUI_FROM_DATABASE=HITACHI CABLE, LTD.
++ ID_OUI_FROM_DATABASE=Hitachi Metals, Ltd.
+ 
+ OUI:004067*
+  ID_OUI_FROM_DATABASE=OMNIBYTE CORPORATION
+@@ -46100,7 +46316,7 @@ OUI:0060A3*
+  ID_OUI_FROM_DATABASE=CONTINUUM TECHNOLOGY CORP.
+ 
+ OUI:0060A4*
+- ID_OUI_FROM_DATABASE=GRINAKER SYSTEM TECHNOLOGIES
++ ID_OUI_FROM_DATABASE=GEW Technologies (PTY)Ltd
+ 
+ OUI:0060A5*
+  ID_OUI_FROM_DATABASE=PERFORMANCE TELECOM CORP.
+@@ -46904,7 +47120,7 @@ OUI:0080A1*
+  ID_OUI_FROM_DATABASE=MICROTEST, INC.
+ 
+ OUI:0080A2*
+- ID_OUI_FROM_DATABASE=Tattile SRL
++ ID_OUI_FROM_DATABASE=CREATIVE ELECTRONIC SYSTEMS
+ 
+ OUI:0080A3*
+  ID_OUI_FROM_DATABASE=Lantronix
+@@ -47188,6 +47404,9 @@ OUI:0080FF*
+ OUI:008865*
+  ID_OUI_FROM_DATABASE=Apple
+ 
++OUI:008B43*
++ ID_OUI_FROM_DATABASE=RFTECH
++
+ OUI:008C10*
+  ID_OUI_FROM_DATABASE=Black Box Corp.
+ 
+@@ -47980,6 +48199,9 @@ OUI:0091D6*
+ OUI:0091FA*
+  ID_OUI_FROM_DATABASE=Synapse Product Development
+ 
++OUI:0092FA*
++ ID_OUI_FROM_DATABASE=SHENZHEN WISKY TECHNOLOGY CO.,LTD
++
+ OUI:009363*
+  ID_OUI_FROM_DATABASE=Uni-Link Technology Co., Ltd.
+ 
+@@ -51340,6 +51562,9 @@ OUI:00E8AB*
+ OUI:00EB2D*
+  ID_OUI_FROM_DATABASE=Sony Mobile Communications AB
+ 
++OUI:00EEBD*
++ ID_OUI_FROM_DATABASE=HTC Corporation
++
+ OUI:00F051*
+  ID_OUI_FROM_DATABASE=KWB Gmbh
+ 
+@@ -51481,6 +51706,9 @@ OUI:044BFF*
+ OUI:044CEF*
+  ID_OUI_FROM_DATABASE=Fujian Sanao Technology Co.,Ltd
+ 
++OUI:044E06*
++ ID_OUI_FROM_DATABASE=Ericsson AB
++
+ OUI:044F8B*
+  ID_OUI_FROM_DATABASE=Adapteva, Inc.
+ 
+@@ -51628,6 +51856,9 @@ OUI:04DAD2*
+ OUI:04DB56*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
++OUI:04DB8A*
++ ID_OUI_FROM_DATABASE=Suntech International Ltd.
++
+ OUI:04DD4C*
+  ID_OUI_FROM_DATABASE=Velocytech
+ 
+@@ -51664,6 +51895,9 @@ OUI:04EE91*
+ OUI:04F021*
+  ID_OUI_FROM_DATABASE=Compex Systems Pte Ltd
+ 
++OUI:04F13E*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:04F17D*
+  ID_OUI_FROM_DATABASE=Tarana Wireless
+ 
+@@ -52117,6 +52351,12 @@ OUI:08008F*
+ OUI:080090*
+  ID_OUI_FROM_DATABASE=SONOMA SYSTEMS
+ 
++OUI:080371*
++ ID_OUI_FROM_DATABASE=KRG CORPORATE
++
++OUI:0805CD*
++ ID_OUI_FROM_DATABASE=DongGuang EnMai Electronic Product Co.Ltd.
++
+ OUI:0808C2*
+  ID_OUI_FROM_DATABASE=Samsung Electronics
+ 
+@@ -52204,12 +52444,21 @@ OUI:083E0C*
+ OUI:083E8E*
+  ID_OUI_FROM_DATABASE=Hon Hai Precision Ind.Co.Ltd
+ 
++OUI:083F3E*
++ ID_OUI_FROM_DATABASE=WSH GmbH
++
++OUI:083F76*
++ ID_OUI_FROM_DATABASE=Intellian Technologies, Inc.
++
+ OUI:084027*
+  ID_OUI_FROM_DATABASE=Gridstore Inc.
+ 
+ OUI:08482C*
+  ID_OUI_FROM_DATABASE=Raycore Taiwan Co., LTD.
+ 
++OUI:084929*
++ ID_OUI_FROM_DATABASE=CYBATI
++
+ OUI:084E1C*
+  ID_OUI_FROM_DATABASE=H2A Systems, LLC
+ 
+@@ -52222,6 +52471,9 @@ OUI:08512E*
+ OUI:085240*
+  ID_OUI_FROM_DATABASE=EbV Elektronikbau- und Vertriebs GmbH
+ 
++OUI:085700*
++ ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
++
+ OUI:085AE0*
+  ID_OUI_FROM_DATABASE=Recovision Technology Co., Ltd.
+ 
+@@ -52240,6 +52492,9 @@ OUI:0868D0*
+ OUI:0868EA*
+  ID_OUI_FROM_DATABASE=EITO ELECTRONICS CO., LTD.
+ 
++OUI:086DF2*
++ ID_OUI_FROM_DATABASE=Shenzhen MIMOWAVE Technology Co.,Ltd
++
+ OUI:087045*
+  ID_OUI_FROM_DATABASE=Apple
+ 
+@@ -52450,6 +52705,9 @@ OUI:0C3956*
+ OUI:0C3C65*
+  ID_OUI_FROM_DATABASE=Dome Imaging Inc
+ 
++OUI:0C3E9F*
++ ID_OUI_FROM_DATABASE=Apple, Inc
++
+ OUI:0C469D*
+  ID_OUI_FROM_DATABASE=MS Sedco
+ 
+@@ -52462,6 +52720,9 @@ OUI:0C4C39*
+ OUI:0C4DE9*
+  ID_OUI_FROM_DATABASE=Apple
+ 
++OUI:0C4F5A*
++ ID_OUI_FROM_DATABASE=ASA-RT s.r.l.
++
+ OUI:0C51F7*
+  ID_OUI_FROM_DATABASE=CHAUVIN ARNOUX
+ 
+@@ -52597,6 +52858,9 @@ OUI:0CC0C0*
+ OUI:0CC3A7*
+  ID_OUI_FROM_DATABASE=Meritec
+ 
++OUI:0CC47A*
++ ID_OUI_FROM_DATABASE=Super Micro Computer, Inc.
++
+ OUI:0CC47E*
+  ID_OUI_FROM_DATABASE=EUCAST Co., Ltd.
+ 
+@@ -52657,6 +52921,9 @@ OUI:0CDDEF*
+ OUI:0CDFA4*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
++OUI:0CE0E4*
++ ID_OUI_FROM_DATABASE=Plantronics, Inc
++
+ OUI:0CE5D3*
+  ID_OUI_FROM_DATABASE=DH electronics GmbH
+ 
+@@ -52765,6 +53032,9 @@ OUI:101F74*
+ OUI:102279*
+  ID_OUI_FROM_DATABASE=ZeroDesktop, Inc.
+ 
++OUI:1027BE*
++ ID_OUI_FROM_DATABASE=TVIP
++
+ OUI:102831*
+  ID_OUI_FROM_DATABASE=Morion Inc.
+ 
+@@ -52954,6 +53224,12 @@ OUI:10D542*
+ OUI:10DDB1*
+  ID_OUI_FROM_DATABASE=Apple
+ 
++OUI:10DDF4*
++ ID_OUI_FROM_DATABASE=Maxway Electronics CO.,LTD
++
++OUI:10DEE4*
++ ID_OUI_FROM_DATABASE=automationNEXT GmbH
++
+ OUI:10E2D5*
+  ID_OUI_FROM_DATABASE=Qi Hardware Inc.
+ 
+@@ -53155,6 +53431,12 @@ OUI:14B1C8*
+ OUI:14B73D*
+  ID_OUI_FROM_DATABASE=ARCHEAN Technologies
+ 
++OUI:14B968*
++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
++
++OUI:14C089*
++ ID_OUI_FROM_DATABASE=DUNE HD LTD
++
+ OUI:14C21D*
+  ID_OUI_FROM_DATABASE=Sabtech Industries
+ 
+@@ -53275,6 +53557,9 @@ OUI:182012*
+ OUI:182032*
+  ID_OUI_FROM_DATABASE=Apple
+ 
++OUI:1820A6*
++ ID_OUI_FROM_DATABASE=Sage Co., Ltd.
++
+ OUI:182666*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
+@@ -53386,6 +53671,9 @@ OUI:1880CE*
+ OUI:1880F5*
+  ID_OUI_FROM_DATABASE=Alcatel-Lucent Shanghai Bell Co., Ltd
+ 
++OUI:188331*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
++
+ OUI:188410*
+  ID_OUI_FROM_DATABASE=CoreTrust Inc.
+ 
+@@ -53401,6 +53689,9 @@ OUI:188796*
+ OUI:188857*
+  ID_OUI_FROM_DATABASE=Beijing Jinhong Xi-Dian Information Technology Corp.
+ 
++OUI:1889DF*
++ ID_OUI_FROM_DATABASE=CerebrEX Inc.
++
+ OUI:188ED5*
+  ID_OUI_FROM_DATABASE=TP Vision Belgium N.V. - innovation site Brugge
+ 
+@@ -53491,6 +53782,9 @@ OUI:18E288*
+ OUI:18E2C2*
+  ID_OUI_FROM_DATABASE=Samsung Electronics
+ 
++OUI:18E728*
++ ID_OUI_FROM_DATABASE=Cisco
++
+ OUI:18E7F4*
+  ID_OUI_FROM_DATABASE=Apple
+ 
+@@ -53521,6 +53815,9 @@ OUI:18FC9F*
+ OUI:18FE34*
+  ID_OUI_FROM_DATABASE=Espressif Inc.
+ 
++OUI:18FF2E*
++ ID_OUI_FROM_DATABASE=Shenzhen Rui Ying Da Technology Co., Ltd
++
+ OUI:1C0656*
+  ID_OUI_FROM_DATABASE=IDY Corporation
+ 
+@@ -53551,6 +53848,9 @@ OUI:1C184A*
+ OUI:1C19DE*
+  ID_OUI_FROM_DATABASE=eyevis GmbH
+ 
++OUI:1C1B68*
++ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
++
+ OUI:1C1D67*
+  ID_OUI_FROM_DATABASE=Shenzhen Huawei Communication Technologies Co., Ltd
+ 
+@@ -53707,6 +54007,9 @@ OUI:1CA770*
+ OUI:1CAA07*
+  ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
+ 
++OUI:1CAB01*
++ ID_OUI_FROM_DATABASE=Innovolt
++
+ OUI:1CABA7*
+  ID_OUI_FROM_DATABASE=Apple
+ 
+@@ -53770,6 +54073,9 @@ OUI:1CE62B*
+ OUI:1CE6C7*
+  ID_OUI_FROM_DATABASE=Cisco
+ 
++OUI:1CEEE8*
++ ID_OUI_FROM_DATABASE=Ilshin Elecom
++
+ OUI:1CF061*
+  ID_OUI_FROM_DATABASE=SCAPS GmbH
+ 
+@@ -53779,6 +54085,9 @@ OUI:1CF5E7*
+ OUI:1CFA68*
+  ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
+ 
++OUI:1CFCBB*
++ ID_OUI_FROM_DATABASE=Realfiction ApS
++
+ OUI:1CFEA7*
+  ID_OUI_FROM_DATABASE=IDentytech Solutins Ltd.
+ 
+@@ -53794,12 +54103,21 @@ OUI:200505*
+ OUI:2005E8*
+  ID_OUI_FROM_DATABASE=OOO InProMedia
+ 
++OUI:2008ED*
++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
++
+ OUI:200A5E*
+  ID_OUI_FROM_DATABASE=Xiangshan Giant Eagle Technology Developing co.,LTD
+ 
+ OUI:200BC7*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
++OUI:200CC8*
++ ID_OUI_FROM_DATABASE=NETGEAR INC.,
++
++OUI:200E95*
++ ID_OUI_FROM_DATABASE=IEC – TC9 WG43
++
+ OUI:20107A*
+  ID_OUI_FROM_DATABASE=Gemtek Technology Co., Ltd.
+ 
+@@ -53917,6 +54235,9 @@ OUI:207D74*
+ OUI:20858C*
+  ID_OUI_FROM_DATABASE=Assa
+ 
++OUI:2087AC*
++ ID_OUI_FROM_DATABASE=AES motomation
++
+ OUI:208984*
+  ID_OUI_FROM_DATABASE=COMPAL INFORMATION (KUNSHAN) CO., LTD
+ 
+@@ -54022,6 +54343,9 @@ OUI:20E564*
+ OUI:20E791*
+  ID_OUI_FROM_DATABASE=Siemens Healthcare Diagnostics, Inc
+ 
++OUI:20EAC7*
++ ID_OUI_FROM_DATABASE=SHENZHEN RIOPINE ELECTRONICS CO., LTD
++
+ OUI:20EEC6*
+  ID_OUI_FROM_DATABASE=Elefirst Science & Tech Co ., ltd
+ 
+@@ -54070,6 +54394,9 @@ OUI:241064*
+ OUI:241125*
+  ID_OUI_FROM_DATABASE=Hutek Co., Ltd.
+ 
++OUI:241148*
++ ID_OUI_FROM_DATABASE=Entropix, LLC
++
+ OUI:2411D0*
+  ID_OUI_FROM_DATABASE=Chongqing Ehs Science and Technology Development Co.,Ltd.
+ 
+@@ -54085,6 +54412,9 @@ OUI:241F2C*
+ OUI:2421AB*
+  ID_OUI_FROM_DATABASE=Sony Ericsson Mobile Communications
+ 
++OUI:242642*
++ ID_OUI_FROM_DATABASE=SHARP Corporation.
++
+ OUI:242FFA*
+  ID_OUI_FROM_DATABASE=Toshiba Global Commerce Solutions
+ 
+@@ -54328,6 +54658,9 @@ OUI:281878*
+ OUI:2818FD*
+  ID_OUI_FROM_DATABASE=Aditya Infotech Ltd.
+ 
++OUI:282246*
++ ID_OUI_FROM_DATABASE=Beijing Sinoix Communication Co., LTD
++
+ OUI:2826A6*
+  ID_OUI_FROM_DATABASE=PBR electronics GmbH
+ 
+@@ -54397,6 +54730,12 @@ OUI:286046*
+ OUI:286094*
+  ID_OUI_FROM_DATABASE=CAPELEC
+ 
++OUI:286336*
++ ID_OUI_FROM_DATABASE=Siemens AG - Industrial Automation - EWA
++
++OUI:28656B*
++ ID_OUI_FROM_DATABASE=Keystone Microtech Corporation
++
+ OUI:286AB8*
+  ID_OUI_FROM_DATABASE=Apple
+ 
+@@ -54451,6 +54790,9 @@ OUI:28987B*
+ OUI:289A4B*
+  ID_OUI_FROM_DATABASE=SteelSeries ApS
+ 
++OUI:289AFA*
++ ID_OUI_FROM_DATABASE=TCT Mobile Limited
++
+ OUI:289EDF*
+  ID_OUI_FROM_DATABASE=Danfoss Turbocor Compressors, Inc
+ 
+@@ -54487,6 +54829,9 @@ OUI:28BA18*
+ OUI:28BAB5*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
++OUI:28BB59*
++ ID_OUI_FROM_DATABASE=RNET Technologies, Inc.
++
+ OUI:28BE9B*
+  ID_OUI_FROM_DATABASE=Technicolor USA Inc.
+ 
+@@ -54502,6 +54847,9 @@ OUI:28C68E*
+ OUI:28C718*
+  ID_OUI_FROM_DATABASE=Altierre
+ 
++OUI:28C825*
++ ID_OUI_FROM_DATABASE=DellKing Industrial Co., Ltd
++
+ OUI:28C914*
+  ID_OUI_FROM_DATABASE=Taimag Corporation
+ 
+@@ -54547,6 +54895,9 @@ OUI:28D997*
+ OUI:28DB81*
+  ID_OUI_FROM_DATABASE=Shanghai Guao Electronic Technology Co., Ltd
+ 
++OUI:28DEF6*
++ ID_OUI_FROM_DATABASE=bioMerieux Inc.
++
+ OUI:28E02C*
+  ID_OUI_FROM_DATABASE=Apple
+ 
+@@ -54598,6 +54949,9 @@ OUI:2C00F7*
+ OUI:2C0623*
+  ID_OUI_FROM_DATABASE=Win Leader Inc.
+ 
++OUI:2C073C*
++ ID_OUI_FROM_DATABASE=DEVLINE LIMITED
++
+ OUI:2C10C1*
+  ID_OUI_FROM_DATABASE=Nintendo Co., Ltd.
+ 
+@@ -54655,6 +55009,9 @@ OUI:2C3A28*
+ OUI:2C3BFD*
+  ID_OUI_FROM_DATABASE=Netstor Technology Co., Ltd.
+ 
++OUI:2C3ECF*
++ ID_OUI_FROM_DATABASE=Cisco
++
+ OUI:2C3F38*
+  ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
+ 
+@@ -54673,6 +55030,9 @@ OUI:2C441B*
+ OUI:2C44FD*
+  ID_OUI_FROM_DATABASE=Hewlett Packard
+ 
++OUI:2C534A*
++ ID_OUI_FROM_DATABASE=Shenzhen Winyao Electronic Limited
++
+ OUI:2C542D*
+  ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
+ 
+@@ -54748,6 +55108,9 @@ OUI:2C922C*
+ OUI:2C9464*
+  ID_OUI_FROM_DATABASE=Cincoze Co., Ltd.
+ 
++OUI:2C957F*
++ ID_OUI_FROM_DATABASE=zte corporation
++
+ OUI:2C9717*
+  ID_OUI_FROM_DATABASE=I.C.Y. B.V.
+ 
+@@ -55009,6 +55372,9 @@ OUI:3092F6*
+ OUI:309BAD*
+  ID_OUI_FROM_DATABASE=BBK Electronics Corp., Ltd.,
+ 
++OUI:30A8DB*
++ ID_OUI_FROM_DATABASE=Sony Mobile Communications AB
++
+ OUI:30AABD*
+  ID_OUI_FROM_DATABASE=Shanghai Reallytek Information Technology Co.,Ltd
+ 
+@@ -55024,6 +55390,12 @@ OUI:30B216*
+ OUI:30B3A2*
+  ID_OUI_FROM_DATABASE=Shenzhen Heguang Measurement & Control Technology Co.,Ltd
+ 
++OUI:30B5C2*
++ ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
++
++OUI:30C750*
++ ID_OUI_FROM_DATABASE=MIC Technology Group
++
+ OUI:30C82A*
+  ID_OUI_FROM_DATABASE=Wi-Next s.r.l.
+ 
+@@ -55060,6 +55432,9 @@ OUI:30F31D*
+ OUI:30F33A*
+  ID_OUI_FROM_DATABASE=+plugg srl
+ 
++OUI:30F42F*
++ ID_OUI_FROM_DATABASE=ESP
++
+ OUI:30F70D*
+  ID_OUI_FROM_DATABASE=Cisco Systems
+ 
+@@ -55087,6 +55462,9 @@ OUI:3413E8*
+ OUI:34159E*
+  ID_OUI_FROM_DATABASE=Apple
+ 
++OUI:3417EB*
++ ID_OUI_FROM_DATABASE=Dell Inc PCBA Test
++
+ OUI:341A4C*
+  ID_OUI_FROM_DATABASE=SHENZHEN WEIBU ELECTRONICS CO.,LTD.
+ 
+@@ -55117,6 +55495,9 @@ OUI:343111*
+ OUI:3440B5*
+  ID_OUI_FROM_DATABASE=IBM
+ 
++OUI:34466F*
++ ID_OUI_FROM_DATABASE=HiTEM Engineering
++
+ OUI:344B3D*
+  ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Tech.Co.,Ltd.
+ 
+@@ -55126,6 +55507,9 @@ OUI:344B50*
+ OUI:344F3F*
+  ID_OUI_FROM_DATABASE=IO-Power Technology Co., Ltd.
+ 
++OUI:344F5C*
++ ID_OUI_FROM_DATABASE=R&amp;M AG
++
+ OUI:344F69*
+  ID_OUI_FROM_DATABASE=EKINOPS SAS
+ 
+@@ -55318,6 +55702,12 @@ OUI:34D7B4*
+ OUI:34DBFD*
+  ID_OUI_FROM_DATABASE=Cisco
+ 
++OUI:34DE1A*
++ ID_OUI_FROM_DATABASE=Intel Corporate
++
++OUI:34DE34*
++ ID_OUI_FROM_DATABASE=zte corporation
++
+ OUI:34DF2A*
+  ID_OUI_FROM_DATABASE=Fujikon Industrial Co.,Limited
+ 
+@@ -55456,6 +55846,9 @@ OUI:386793*
+ OUI:386BBB*
+  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+ 
++OUI:386C9B*
++ ID_OUI_FROM_DATABASE=Ivy Biomedical
++
+ OUI:386E21*
+  ID_OUI_FROM_DATABASE=Wasion Group Ltd.
+ 
+@@ -55576,9 +55969,15 @@ OUI:38ECE4*
+ OUI:38EE9D*
+  ID_OUI_FROM_DATABASE=Anedo Ltd.
+ 
++OUI:38F098*
++ ID_OUI_FROM_DATABASE=Vapor Stone Rail Systems
++
+ OUI:38F597*
+  ID_OUI_FROM_DATABASE=home2net GmbH
+ 
++OUI:38F708*
++ ID_OUI_FROM_DATABASE=National Resource Management, Inc.
++
+ OUI:38F8B7*
+  ID_OUI_FROM_DATABASE=V2COM PARTICIPACOES S.A.
+ 
+@@ -55603,9 +56002,15 @@ OUI:3C0771*
+ OUI:3C081E*
+  ID_OUI_FROM_DATABASE=Beijing Yupont Electric Power Technology Co.,Ltd
+ 
++OUI:3C08F6*
++ ID_OUI_FROM_DATABASE=Cisco
++
+ OUI:3C096D*
+  ID_OUI_FROM_DATABASE=Powerhouse Dynamics
+ 
++OUI:3C0C48*
++ ID_OUI_FROM_DATABASE=Servergy, Inc.
++
+ OUI:3C0E23*
+  ID_OUI_FROM_DATABASE=Cisco
+ 
+@@ -55639,6 +56044,9 @@ OUI:3C1A79*
+ OUI:3C1CBE*
+  ID_OUI_FROM_DATABASE=JADAK LLC
+ 
++OUI:3C25D7*
++ ID_OUI_FROM_DATABASE=Nokia Corporation
++
+ OUI:3C26D5*
+  ID_OUI_FROM_DATABASE=Sotera Wireless
+ 
+@@ -55744,6 +56152,9 @@ OUI:3C83B5*
+ OUI:3C86A8*
+  ID_OUI_FROM_DATABASE=Sangshin elecom .co,, LTD
+ 
++OUI:3C89A6*
++ ID_OUI_FROM_DATABASE=KAPELSE
++
+ OUI:3C8AB0*
+  ID_OUI_FROM_DATABASE=Juniper Networks
+ 
+@@ -55837,6 +56248,9 @@ OUI:3CD92B*
+ OUI:3CDF1E*
+  ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
+ 
++OUI:3CDFBD*
++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
++
+ OUI:3CE072*
+  ID_OUI_FROM_DATABASE=Apple
+ 
+@@ -55870,6 +56284,9 @@ OUI:3CF748*
+ OUI:3CFB96*
+  ID_OUI_FROM_DATABASE=Emcraft Systems LLC
+ 
++OUI:400107*
++ ID_OUI_FROM_DATABASE=Arista Corp
++
+ OUI:4001C6*
+  ID_OUI_FROM_DATABASE=3COM EUROPE LTD
+ 
+@@ -55948,6 +56365,9 @@ OUI:40406B*
+ OUI:404A03*
+  ID_OUI_FROM_DATABASE=ZyXEL Communications Corporation
+ 
++OUI:404A18*
++ ID_OUI_FROM_DATABASE=Addrek Smart Solutions
++
+ OUI:404D8E*
+  ID_OUI_FROM_DATABASE=Shenzhen Huawei Communication Technologies Co., Ltd
+ 
+@@ -56011,6 +56431,9 @@ OUI:407074*
+ OUI:407496*
+  ID_OUI_FROM_DATABASE=aFUN TECHNOLOGY INC.
+ 
++OUI:407875*
++ ID_OUI_FROM_DATABASE=IMBEL - Industria de Material Belico do Brasil
++
+ OUI:407A80*
+  ID_OUI_FROM_DATABASE=Nokia Corporation
+ 
+@@ -56059,6 +56482,9 @@ OUI:40A6A4*
+ OUI:40A6D9*
+  ID_OUI_FROM_DATABASE=Apple
+ 
++OUI:40A8F0*
++ ID_OUI_FROM_DATABASE=Hewlett Packard
++
+ OUI:40AC8D*
+  ID_OUI_FROM_DATABASE=Data Management, Inc.
+ 
+@@ -56164,6 +56590,9 @@ OUI:4403A7*
+ OUI:440CFD*
+  ID_OUI_FROM_DATABASE=NetMan Co., Ltd.
+ 
++OUI:4411C2*
++ ID_OUI_FROM_DATABASE=Telegartner Karl Gartner GmbH
++
+ OUI:441319*
+  ID_OUI_FROM_DATABASE=WKK TECHNOLOGY LTD.
+ 
+@@ -56182,6 +56611,9 @@ OUI:4423AA*
+ OUI:4425BB*
+  ID_OUI_FROM_DATABASE=Bamboo Entertainment Corporation
+ 
++OUI:442938*
++ ID_OUI_FROM_DATABASE=NietZsche enterprise Co.Ltd.
++
+ OUI:442A60*
+  ID_OUI_FROM_DATABASE=Apple
+ 
+@@ -56230,6 +56662,9 @@ OUI:443D21*
+ OUI:443EB2*
+  ID_OUI_FROM_DATABASE=DEOTRON Co., LTD.
+ 
++OUI:444891*
++ ID_OUI_FROM_DATABASE=HDMI Licensing, LLC
++
+ OUI:444A65*
+  ID_OUI_FROM_DATABASE=Silverflare Ltd.
+ 
+@@ -56287,6 +56722,9 @@ OUI:446D57*
+ OUI:44700B*
+  ID_OUI_FROM_DATABASE=IFFU
+ 
++OUI:447098*
++ ID_OUI_FROM_DATABASE=MING HONG TECHNOLOGY (SHEN ZHEN) LIMITED
++
+ OUI:447BC4*
+  ID_OUI_FROM_DATABASE=DualShine Technology(SZ)Co.,Ltd
+ 
+@@ -56296,6 +56734,9 @@ OUI:447C7F*
+ OUI:447DA5*
+  ID_OUI_FROM_DATABASE=VTION INFORMATION TECHNOLOGY (FUJIAN) CO.,LTD
+ 
++OUI:447E76*
++ ID_OUI_FROM_DATABASE=Trek Technology (S) Pte Ltd
++
+ OUI:447E95*
+  ID_OUI_FROM_DATABASE=Alpha and Omega, Inc
+ 
+@@ -56365,6 +56806,9 @@ OUI:44C15C*
+ OUI:44C233*
+  ID_OUI_FROM_DATABASE=Guangzhou Comet Technology Development Co.Ltd
+ 
++OUI:44C306*
++ ID_OUI_FROM_DATABASE=SIFROM Inc.
++
+ OUI:44C39B*
+  ID_OUI_FROM_DATABASE=OOO RUBEZH NPO
+ 
+@@ -56443,6 +56887,9 @@ OUI:4813F3*
+ OUI:48174C*
+  ID_OUI_FROM_DATABASE=MicroPower technologies
+ 
++OUI:481842*
++ ID_OUI_FROM_DATABASE=Shanghai Winaas Co. Equipment Co. Ltd.
++
+ OUI:481BD2*
+  ID_OUI_FROM_DATABASE=Intron Scientific co., ltd.
+ 
+@@ -56458,6 +56905,9 @@ OUI:4833DD*
+ OUI:48343D*
+  ID_OUI_FROM_DATABASE=IEP GmbH
+ 
++OUI:483D32*
++ ID_OUI_FROM_DATABASE=Syscor Controls &amp; Automation
++
+ OUI:484487*
+  ID_OUI_FROM_DATABASE=Cisco SPVTG
+ 
+@@ -56476,6 +56926,9 @@ OUI:485261*
+ OUI:485A3F*
+  ID_OUI_FROM_DATABASE=WISOL
+ 
++OUI:485AB6*
++ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
++
+ OUI:485B39*
+  ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC.
+ 
+@@ -56500,6 +56953,9 @@ OUI:486FD2*
+ OUI:487119*
+  ID_OUI_FROM_DATABASE=SGB GROUP LTD.
+ 
++OUI:48746E*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:488E42*
+  ID_OUI_FROM_DATABASE=DIGALOG GmbH
+ 
+@@ -56530,6 +56986,9 @@ OUI:48AA5D*
+ OUI:48B253*
+  ID_OUI_FROM_DATABASE=Marketaxess Corporation
+ 
++OUI:48B5A7*
++ ID_OUI_FROM_DATABASE=Glory Horse Industries Ltd.
++
+ OUI:48B8DE*
+  ID_OUI_FROM_DATABASE=HOMEWINS TECHNOLOGY CO.,LTD.
+ 
+@@ -56554,6 +57013,9 @@ OUI:48C8B6*
+ OUI:48CB6E*
+  ID_OUI_FROM_DATABASE=Cello Electronics (UK) Ltd
+ 
++OUI:48D0CF*
++ ID_OUI_FROM_DATABASE=Universal Electronics, Inc.
++
+ OUI:48D224*
+  ID_OUI_FROM_DATABASE=Liteon Technology Corporation
+ 
+@@ -56584,6 +57046,12 @@ OUI:48EB30*
+ OUI:48ED80*
+  ID_OUI_FROM_DATABASE=daesung eltec
+ 
++OUI:48EE07*
++ ID_OUI_FROM_DATABASE=Silver Palm Technologies LLC
++
++OUI:48EE86*
++ ID_OUI_FROM_DATABASE=UTStarcom (China) Co.,Ltd
++
+ OUI:48F230*
+  ID_OUI_FROM_DATABASE=Ubizcore Co.,LTD
+ 
+@@ -56605,6 +57073,9 @@ OUI:48F925*
+ OUI:48FCB8*
+  ID_OUI_FROM_DATABASE=Woodstream Corporation
+ 
++OUI:48FEEA*
++ ID_OUI_FROM_DATABASE=HOMA B.V.
++
+ OUI:4C0082*
+  ID_OUI_FROM_DATABASE=Cisco
+ 
+@@ -56626,6 +57097,9 @@ OUI:4C09B4*
+ OUI:4C0B3A*
+  ID_OUI_FROM_DATABASE=TCT Mobile Limited
+ 
++OUI:4C0DEE*
++ ID_OUI_FROM_DATABASE=JABIL CIRCUIT (SHANGHAI) LTD.
++
+ OUI:4C0F6E*
+  ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+ 
+@@ -56746,6 +57220,9 @@ OUI:4C7897*
+ OUI:4C79BA*
+  ID_OUI_FROM_DATABASE=Intel Corporate
+ 
++OUI:4C7F62*
++ ID_OUI_FROM_DATABASE=Nokia Corporation
++
+ OUI:4C804F*
+  ID_OUI_FROM_DATABASE=Armstrong Monitoring Corp
+ 
+@@ -56755,6 +57232,9 @@ OUI:4C8093*
+ OUI:4C82CF*
+  ID_OUI_FROM_DATABASE=Echostar Technologies
+ 
++OUI:4C8B30*
++ ID_OUI_FROM_DATABASE=Actiontec Electronics, Inc
++
+ OUI:4C8B55*
+  ID_OUI_FROM_DATABASE=Grupo Digicon
+ 
+@@ -56779,6 +57259,9 @@ OUI:4C9E80*
+ OUI:4C9EE4*
+  ID_OUI_FROM_DATABASE=Hanyang Navicom Co.,Ltd.
+ 
++OUI:4CA56D*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
++
+ OUI:4CA74B*
+  ID_OUI_FROM_DATABASE=Alcatel Lucent
+ 
+@@ -56833,6 +57316,9 @@ OUI:4CCC34*
+ OUI:4CD637*
+  ID_OUI_FROM_DATABASE=Qsono Electronics Co., Ltd
+ 
++OUI:4CD7B6*
++ ID_OUI_FROM_DATABASE=Helmer Scientific
++
+ OUI:4CD9C4*
+  ID_OUI_FROM_DATABASE=Magneti Marelli Automotive Electronics (Guangzhou) Co. Ltd
+ 
+@@ -56854,6 +57340,9 @@ OUI:4CEDDE*
+ OUI:4CF02E*
+  ID_OUI_FROM_DATABASE=Vifa Denmark A/S
+ 
++OUI:4CF45B*
++ ID_OUI_FROM_DATABASE=Blue Clover Devices
++
+ OUI:4CF737*
+  ID_OUI_FROM_DATABASE=SamJi Electronics Co., Ltd
+ 
+@@ -56884,6 +57373,9 @@ OUI:5017FF*
+ OUI:501AC5*
+  ID_OUI_FROM_DATABASE=Microsoft
+ 
++OUI:501CBF*
++ ID_OUI_FROM_DATABASE=Cisco
++
+ OUI:50206B*
+  ID_OUI_FROM_DATABASE=Emerson Climate Technologies Transportation Solutions
+ 
+@@ -56950,6 +57442,9 @@ OUI:504F94*
+ OUI:505663*
+  ID_OUI_FROM_DATABASE=Texas Instruments
+ 
++OUI:5056A8*
++ ID_OUI_FROM_DATABASE=Jolla Ltd
++
+ OUI:5057A8*
+  ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
+ 
+@@ -56959,6 +57454,9 @@ OUI:505AC6*
+ OUI:506028*
+  ID_OUI_FROM_DATABASE=Xirrus Inc.
+ 
++OUI:506184*
++ ID_OUI_FROM_DATABASE=Avaya, Inc
++
+ OUI:5061D6*
+  ID_OUI_FROM_DATABASE=Indu-Sol GmbH
+ 
+@@ -57025,6 +57523,9 @@ OUI:509871*
+ OUI:509F27*
+  ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
+ 
++OUI:50A054*
++ ID_OUI_FROM_DATABASE=Actineon
++
+ OUI:50A0BF*
+  ID_OUI_FROM_DATABASE=Alba Fiber Systems Inc.
+ 
+@@ -57046,6 +57547,9 @@ OUI:50ABBF*
+ OUI:50AF73*
+  ID_OUI_FROM_DATABASE=Shenzhen Bitland Information Technology Co., Ltd.
+ 
++OUI:50B695*
++ ID_OUI_FROM_DATABASE=Micropoint Biotechnologies,Inc.
++
+ OUI:50B7C3*
+  ID_OUI_FROM_DATABASE=Samsung Electronics CO., LTD
+ 
+@@ -57163,6 +57667,9 @@ OUI:5422F8*
+ OUI:542696*
+  ID_OUI_FROM_DATABASE=Apple
+ 
++OUI:54271E*
++ ID_OUI_FROM_DATABASE=AzureWave Technonloies, Inc.
++
+ OUI:542A9C*
+  ID_OUI_FROM_DATABASE=LSY Defense, LLC.
+ 
+@@ -57175,6 +57682,9 @@ OUI:542F89*
+ OUI:543131*
+  ID_OUI_FROM_DATABASE=Raster Vision Ltd
+ 
++OUI:543530*
++ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
++
+ OUI:5435DF*
+  ID_OUI_FROM_DATABASE=Symeo GmbH
+ 
+@@ -57214,6 +57724,9 @@ OUI:545FA9*
+ OUI:5461EA*
+  ID_OUI_FROM_DATABASE=Zaplox AB
+ 
++OUI:54724F*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:547398*
+  ID_OUI_FROM_DATABASE=Toyo Electronics Corporation
+ 
+@@ -57274,6 +57787,9 @@ OUI:549D85*
+ OUI:54A04F*
+  ID_OUI_FROM_DATABASE=t-mac Technologies Ltd
+ 
++OUI:54A31B*
++ ID_OUI_FROM_DATABASE=Shenzhen Linkworld Technology Co,.LTD
++
+ OUI:54A51B*
+  ID_OUI_FROM_DATABASE=Shenzhen Huawei Communication Technologies Co., Ltd
+ 
+@@ -57286,6 +57802,9 @@ OUI:54A619*
+ OUI:54A9D4*
+  ID_OUI_FROM_DATABASE=Minibar Systems
+ 
++OUI:54AE27*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:54B620*
+  ID_OUI_FROM_DATABASE=SUHDOL E&C Co.Ltd.
+ 
+@@ -57295,9 +57814,15 @@ OUI:54BEF7*
+ OUI:54CDA7*
+  ID_OUI_FROM_DATABASE=Fujian Shenzhou Electronic Co.,Ltd
+ 
++OUI:54CDEE*
++ ID_OUI_FROM_DATABASE=ShenZhen Apexis Electronic Co.,Ltd
++
+ OUI:54D0ED*
+  ID_OUI_FROM_DATABASE=AXIM Communications
+ 
++OUI:54D163*
++ ID_OUI_FROM_DATABASE=MAX-TECH,INC
++
+ OUI:54D1B0*
+  ID_OUI_FROM_DATABASE=Universal Laser Systems, Inc
+ 
+@@ -57310,6 +57835,9 @@ OUI:54DF63*
+ OUI:54E032*
+  ID_OUI_FROM_DATABASE=Juniper Networks
+ 
++OUI:54E2E0*
++ ID_OUI_FROM_DATABASE=Pace plc
++
+ OUI:54E3B0*
+  ID_OUI_FROM_DATABASE=JVL Industri Elektronik
+ 
+@@ -57337,6 +57865,9 @@ OUI:54FB58*
+ OUI:54FDBF*
+  ID_OUI_FROM_DATABASE=Scheidt & Bachmann GmbH
+ 
++OUI:580528*
++ ID_OUI_FROM_DATABASE=LABRIS NETWORKS
++
+ OUI:580556*
+  ID_OUI_FROM_DATABASE=Elettronica GF S.r.L.
+ 
+@@ -57346,6 +57877,9 @@ OUI:5808FA*
+ OUI:5809E5*
+  ID_OUI_FROM_DATABASE=Kivic Inc.
+ 
++OUI:580A20*
++ ID_OUI_FROM_DATABASE=Cisco
++
+ OUI:581243*
+  ID_OUI_FROM_DATABASE=AcSiP Technology Corp.
+ 
+@@ -57394,6 +57928,9 @@ OUI:5846E1*
+ OUI:5848C0*
+  ID_OUI_FROM_DATABASE=COFLEC
+ 
++OUI:58493B*
++ ID_OUI_FROM_DATABASE=Palo Alto Networks
++
+ OUI:5849BA*
+  ID_OUI_FROM_DATABASE=Chitai Electronic Corp.
+ 
+@@ -57406,6 +57943,9 @@ OUI:584CEE*
+ OUI:585076*
+  ID_OUI_FROM_DATABASE=Linear Equipamentos Eletronicos SA
+ 
++OUI:5850AB*
++ ID_OUI_FROM_DATABASE=TLS Corporation
++
+ OUI:5850E6*
+  ID_OUI_FROM_DATABASE=Best Buy Corporation
+ 
+@@ -57493,6 +58033,9 @@ OUI:589835*
+ OUI:58986F*
+  ID_OUI_FROM_DATABASE=Revolution Display
+ 
++OUI:589CFC*
++ ID_OUI_FROM_DATABASE=FreeBSD Foundation
++
+ OUI:58A2B5*
+  ID_OUI_FROM_DATABASE=LG Electronics
+ 
+@@ -57628,6 +58171,9 @@ OUI:5C22C4*
+ OUI:5C2479*
+  ID_OUI_FROM_DATABASE=Baltech AG
+ 
++OUI:5C254C*
++ ID_OUI_FROM_DATABASE=Avire Global Pte Ltd
++
+ OUI:5C260A*
+  ID_OUI_FROM_DATABASE=Dell Inc.
+ 
+@@ -57757,6 +58303,9 @@ OUI:5CBD9E*
+ OUI:5CC213*
+  ID_OUI_FROM_DATABASE=Fr. Sauter AG
+ 
++OUI:5CC5D4*
++ ID_OUI_FROM_DATABASE=Intel Corporate
++
+ OUI:5CC6D0*
+  ID_OUI_FROM_DATABASE=Skyworth Digital technology(shenzhen)co.ltd.
+ 
+@@ -57808,6 +58357,9 @@ OUI:5CE286*
+ OUI:5CE2F4*
+  ID_OUI_FROM_DATABASE=AcSiP Technology Corp.
+ 
++OUI:5CE7BF*
++ ID_OUI_FROM_DATABASE=New Singularity International Technical Development Co.,Ltd
++
+ OUI:5CE8EB*
+  ID_OUI_FROM_DATABASE=Samsung Electronics
+ 
+@@ -57826,6 +58378,9 @@ OUI:5CF370*
+ OUI:5CF3FC*
+  ID_OUI_FROM_DATABASE=IBM Corp
+ 
++OUI:5CF50D*
++ ID_OUI_FROM_DATABASE=Institute of microelectronic applications
++
+ OUI:5CF6DC*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,LTD
+ 
+@@ -57847,6 +58402,9 @@ OUI:5CFFFF*
+ OUI:6002B4*
+  ID_OUI_FROM_DATABASE=Wistron NeWeb Corp.
+ 
++OUI:600308*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:600347*
+  ID_OUI_FROM_DATABASE=Billion Electric Co. Ltd.
+ 
+@@ -57874,6 +58432,9 @@ OUI:601D0F*
+ OUI:601E02*
+  ID_OUI_FROM_DATABASE=EltexAlatau
+ 
++OUI:602103*
++ ID_OUI_FROM_DATABASE=STCUBE.INC
++
+ OUI:6021C0*
+  ID_OUI_FROM_DATABASE=Murata Manufactuaring Co.,Ltd.
+ 
+@@ -58117,12 +58678,18 @@ OUI:60FB42*
+ OUI:60FE1E*
+  ID_OUI_FROM_DATABASE=China Palms Telecom.Ltd
+ 
++OUI:60FE20*
++ ID_OUI_FROM_DATABASE=2 Wire
++
+ OUI:60FEC5*
+  ID_OUI_FROM_DATABASE=Apple
+ 
+ OUI:60FEF9*
+  ID_OUI_FROM_DATABASE=Thomas & Betts
+ 
++OUI:60FFDD*
++ ID_OUI_FROM_DATABASE=C.E. ELECTRONICS, INC
++
+ OUI:6400F1*
+  ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
+ 
+@@ -58228,6 +58795,9 @@ OUI:645563*
+ OUI:64557F*
+  ID_OUI_FROM_DATABASE=NSFOCUS Information Technology Co., Ltd.
+ 
++OUI:6455B1*
++ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
++
+ OUI:645601*
+  ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD
+ 
+@@ -58363,6 +58933,9 @@ OUI:64AE88*
+ OUI:64B310*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
++OUI:64B370*
++ ID_OUI_FROM_DATABASE=PowerComm Solutons LLC
++
+ OUI:64B64A*
+  ID_OUI_FROM_DATABASE=ViVOtech, Inc.
+ 
+@@ -58435,12 +59008,18 @@ OUI:64E682*
+ OUI:64E84F*
+  ID_OUI_FROM_DATABASE=Serialway Communication Technology Co. Ltd
+ 
++OUI:64E892*
++ ID_OUI_FROM_DATABASE=Morio Denki Co., Ltd.
++
+ OUI:64E8E6*
+  ID_OUI_FROM_DATABASE=global moisture management system
+ 
+ OUI:64E950*
+  ID_OUI_FROM_DATABASE=Cisco
+ 
++OUI:64EB8C*
++ ID_OUI_FROM_DATABASE=Seiko Epson Corporation
++
+ OUI:64ED57*
+  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+ 
+@@ -58570,6 +59149,9 @@ OUI:687251*
+ OUI:68764F*
+  ID_OUI_FROM_DATABASE=Sony Mobile Communications AB
+ 
++OUI:687848*
++ ID_OUI_FROM_DATABASE=Westunitis Co., Ltd.
++
+ OUI:68784C*
+  ID_OUI_FROM_DATABASE=Nortel Networks
+ 
+@@ -58594,6 +59176,9 @@ OUI:688470*
+ OUI:688540*
+  ID_OUI_FROM_DATABASE=IGI Mobile, Inc.
+ 
++OUI:68856A*
++ ID_OUI_FROM_DATABASE=OuterLink Corporation
++
+ OUI:6886A7*
+  ID_OUI_FROM_DATABASE=Cisco
+ 
+@@ -58684,6 +59269,9 @@ OUI:68CE4E*
+ OUI:68D1FD*
+  ID_OUI_FROM_DATABASE=Shenzhen Trimax Technology Co.,Ltd
+ 
++OUI:68D247*
++ ID_OUI_FROM_DATABASE=Portalis LC
++
+ OUI:68D925*
+  ID_OUI_FROM_DATABASE=ProSys Development Services
+ 
+@@ -58732,6 +59320,9 @@ OUI:68FCB3*
+ OUI:6C0460*
+  ID_OUI_FROM_DATABASE=RBH Access Technologies Inc.
+ 
++OUI:6C09D6*
++ ID_OUI_FROM_DATABASE=Digiquest Electronics LTD
++
+ OUI:6C0E0D*
+  ID_OUI_FROM_DATABASE=Sony Ericsson Mobile Communications AB
+ 
+@@ -58816,12 +59407,18 @@ OUI:6C5D63*
+ OUI:6C5E7A*
+  ID_OUI_FROM_DATABASE=Ubiquitous Internet Telecom Co., Ltd
+ 
++OUI:6C5F1C*
++ ID_OUI_FROM_DATABASE=Lenovo Mobile Communication Technology Ltd.
++
+ OUI:6C6126*
+  ID_OUI_FROM_DATABASE=Rinicom Holdings
+ 
+ OUI:6C626D*
+  ID_OUI_FROM_DATABASE=Micro-Star INT'L CO., LTD
+ 
++OUI:6C641A*
++ ID_OUI_FROM_DATABASE=Penguin Computing
++
+ OUI:6C6F18*
+  ID_OUI_FROM_DATABASE=Stereotaxis, Inc.
+ 
+@@ -58864,6 +59461,9 @@ OUI:6C92BF*
+ OUI:6C98EB*
+  ID_OUI_FROM_DATABASE=Xyne GmbH
+ 
++OUI:6C9989*
++ ID_OUI_FROM_DATABASE=Cisco
++
+ OUI:6C9AC9*
+  ID_OUI_FROM_DATABASE=Valentine Research, Inc.
+ 
+@@ -59023,6 +59623,9 @@ OUI:702559*
+ OUI:702B1D*
+  ID_OUI_FROM_DATABASE=E-Domus International Limited
+ 
++OUI:702C1F*
++ ID_OUI_FROM_DATABASE=Wisol
++
+ OUI:702F4B*
+  ID_OUI_FROM_DATABASE=PolyVision Inc.
+ 
+@@ -59071,6 +59674,9 @@ OUI:704AE4*
+ OUI:704CED*
+  ID_OUI_FROM_DATABASE=TMRG, Inc.
+ 
++OUI:704E01*
++ ID_OUI_FROM_DATABASE=KWANGWON TECH CO., LTD.
++
+ OUI:7052C5*
+  ID_OUI_FROM_DATABASE=Avaya, Inc.
+ 
+@@ -59389,9 +59995,15 @@ OUI:746630*
+ OUI:746A89*
+  ID_OUI_FROM_DATABASE=Rezolt Corporation
+ 
++OUI:746A8F*
++ ID_OUI_FROM_DATABASE=VS Vision Systems GmbH
++
+ OUI:746B82*
+  ID_OUI_FROM_DATABASE=MOVEK
+ 
++OUI:746F3D*
++ ID_OUI_FROM_DATABASE=Contec GmbH
++
+ OUI:7472F2*
+  ID_OUI_FROM_DATABASE=Chipsip Technology Co., Ltd.
+ 
+@@ -59413,6 +60025,9 @@ OUI:747E2D*
+ OUI:74867A*
+  ID_OUI_FROM_DATABASE=Dell Inc PCBA Test
+ 
++OUI:74882A*
++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
++
+ OUI:74888B*
+  ID_OUI_FROM_DATABASE=ADB Broadband Italia
+ 
+@@ -59422,6 +60037,9 @@ OUI:748E08*
+ OUI:748EF8*
+  ID_OUI_FROM_DATABASE=Brocade Communications Systems, Inc.
+ 
++OUI:748F1B*
++ ID_OUI_FROM_DATABASE=MasterImage 3D
++
+ OUI:749050*
+  ID_OUI_FROM_DATABASE=Renesas Electronics Corporation
+ 
+@@ -59437,6 +60055,9 @@ OUI:74943D*
+ OUI:749975*
+  ID_OUI_FROM_DATABASE=IBM Corporation
+ 
++OUI:749C52*
++ ID_OUI_FROM_DATABASE=Huizhou Desay SV Automotive Co., Ltd.
++
+ OUI:749DDC*
+  ID_OUI_FROM_DATABASE=2Wire
+ 
+@@ -59467,6 +60088,9 @@ OUI:74BE08*
+ OUI:74BFA1*
+  ID_OUI_FROM_DATABASE=HYUNTECK
+ 
++OUI:74C621*
++ ID_OUI_FROM_DATABASE=Zhejiang Hite Renewable Energy Co.,LTD
++
+ OUI:74C99A*
+  ID_OUI_FROM_DATABASE=Ericsson AB
+ 
+@@ -59605,6 +60229,9 @@ OUI:78303B*
+ OUI:7830E1*
+  ID_OUI_FROM_DATABASE=UltraClenz, LLC
+ 
++OUI:7831C1*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:78324F*
+  ID_OUI_FROM_DATABASE=Millennium Group, Inc.
+ 
+@@ -59614,6 +60241,9 @@ OUI:783CE3*
+ OUI:783D5B*
+  ID_OUI_FROM_DATABASE=TELNET Redes Inteligentes S.A.
+ 
++OUI:783E53*
++ ID_OUI_FROM_DATABASE=BSkyB Ltd
++
+ OUI:783F15*
+  ID_OUI_FROM_DATABASE=EasySYNC Ltd.
+ 
+@@ -59638,6 +60268,9 @@ OUI:78491D*
+ OUI:784B08*
+  ID_OUI_FROM_DATABASE=f.robotics acquisitions ltd
+ 
++OUI:784B87*
++ ID_OUI_FROM_DATABASE=Murata Manufacturing Co.,Ltd.
++
+ OUI:78510C*
+  ID_OUI_FROM_DATABASE=LiveU Ltd.
+ 
+@@ -59674,6 +60307,9 @@ OUI:78617C*
+ OUI:7866AE*
+  ID_OUI_FROM_DATABASE=ZTEC Instruments, Inc.
+ 
++OUI:786A89*
++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
++
+ OUI:786C1C*
+  ID_OUI_FROM_DATABASE=Apple
+ 
+@@ -59737,6 +60373,9 @@ OUI:78A2A0*
+ OUI:78A3E4*
+  ID_OUI_FROM_DATABASE=Apple
+ 
++OUI:78A504*
++ ID_OUI_FROM_DATABASE=Texas Instruments
++
+ OUI:78A5DD*
+  ID_OUI_FROM_DATABASE=Shenzhen Smarteye Digital Electronics Co., Ltd
+ 
+@@ -59830,6 +60469,9 @@ OUI:78D5B5*
+ OUI:78D6F0*
+  ID_OUI_FROM_DATABASE=Samsung Electro Mechanics
+ 
++OUI:78D752*
++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
++
+ OUI:78D99F*
+  ID_OUI_FROM_DATABASE=NuCom HK Ltd.
+ 
+@@ -59887,6 +60529,9 @@ OUI:78FE3D*
+ OUI:78FE41*
+  ID_OUI_FROM_DATABASE=Socus networks
+ 
++OUI:78FEE2*
++ ID_OUI_FROM_DATABASE=Shanghai Diveo Technology Co., Ltd
++
+ OUI:78FF57*
+  ID_OUI_FROM_DATABASE=Intel Corporate
+ 
+@@ -59929,6 +60574,9 @@ OUI:7C1476*
+ OUI:7C160D*
+  ID_OUI_FROM_DATABASE=Saia-Burgess Controls AG
+ 
++OUI:7C1A03*
++ ID_OUI_FROM_DATABASE=8Locations Co., Ltd.
++
+ OUI:7C1AFC*
+  ID_OUI_FROM_DATABASE=Dalian Co-Edifice Video Technology Co., Ltd
+ 
+@@ -60058,6 +60706,9 @@ OUI:7C822D*
+ OUI:7C8306*
+  ID_OUI_FROM_DATABASE=Glen Dimplex Nordic as
+ 
++OUI:7C8D91*
++ ID_OUI_FROM_DATABASE=Shanghai Hongzhuo Information Technology co.,LTD
++
+ OUI:7C8EE4*
+  ID_OUI_FROM_DATABASE=Texas Instruments
+ 
+@@ -60172,6 +60823,9 @@ OUI:7CDD90*
+ OUI:7CE044*
+  ID_OUI_FROM_DATABASE=NEON Inc
+ 
++OUI:7CE1FF*
++ ID_OUI_FROM_DATABASE=Computer Performance, Inc. DBA Digital Loggers, Inc.
++
+ OUI:7CE56B*
+  ID_OUI_FROM_DATABASE=ESEN Optoelectronics Technology Co.,Ltd.
+ 
+@@ -60214,6 +60868,9 @@ OUI:80000B*
+ OUI:800010*
+  ID_OUI_FROM_DATABASE=ATT BELL LABORATORIES
+ 
++OUI:80006E*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:8005DF*
+  ID_OUI_FROM_DATABASE=Montage Technology Group Limited
+ 
+@@ -60307,9 +60964,15 @@ OUI:805719*
+ OUI:8058C5*
+  ID_OUI_FROM_DATABASE=NovaTec Kommunikationstechnik GmbH
+ 
++OUI:8059FD*
++ ID_OUI_FROM_DATABASE=Noviga
++
+ OUI:806007*
+  ID_OUI_FROM_DATABASE=RIM
+ 
++OUI:80618F*
++ ID_OUI_FROM_DATABASE=Shenzhen sangfei consumer communications co.,ltd
++
+ OUI:806459*
+  ID_OUI_FROM_DATABASE=Nimbus Inc.
+ 
+@@ -60448,6 +61111,9 @@ OUI:80D733*
+ OUI:80DB31*
+  ID_OUI_FROM_DATABASE=Power Quotient International Co., Ltd.
+ 
++OUI:80EA96*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:80EE73*
+  ID_OUI_FROM_DATABASE=Shuttle Inc.
+ 
+@@ -60481,6 +61147,9 @@ OUI:840F45*
+ OUI:841715*
+  ID_OUI_FROM_DATABASE=GP Electronics (HK) Ltd.
+ 
++OUI:841766*
++ ID_OUI_FROM_DATABASE=Weifang GoerTek Electronics Co., Ltd
++
+ OUI:841888*
+  ID_OUI_FROM_DATABASE=Juniper Networks
+ 
+@@ -60502,9 +61171,15 @@ OUI:84248D*
+ OUI:84253F*
+  ID_OUI_FROM_DATABASE=Silex Technology, Inc
+ 
++OUI:8425A4*
++ ID_OUI_FROM_DATABASE=Tariox Limited
++
+ OUI:8425DB*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
++OUI:842615*
++ ID_OUI_FROM_DATABASE=ADB Broadband Italia
++
+ OUI:84262B*
+  ID_OUI_FROM_DATABASE=Alcatel-Lucent
+ 
+@@ -60586,6 +61261,9 @@ OUI:846AED*
+ OUI:846EB1*
+  ID_OUI_FROM_DATABASE=Park Assist LLC
+ 
++OUI:847207*
++ ID_OUI_FROM_DATABASE=I&C Technology
++
+ OUI:84742A*
+  ID_OUI_FROM_DATABASE=zte corporation
+ 
+@@ -60610,12 +61288,18 @@ OUI:848336*
+ OUI:848371*
+  ID_OUI_FROM_DATABASE=Avaya, Inc
+ 
++OUI:848433*
++ ID_OUI_FROM_DATABASE=Paradox Engineering SA
++
+ OUI:848506*
+  ID_OUI_FROM_DATABASE=Apple
+ 
+ OUI:848D84*
+  ID_OUI_FROM_DATABASE=Rajant Corporation
+ 
++OUI:848E0C*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:848E96*
+  ID_OUI_FROM_DATABASE=Embertec Pty Ltd
+ 
+@@ -60838,6 +61522,9 @@ OUI:888717*
+ OUI:8887DD*
+  ID_OUI_FROM_DATABASE=DarbeeVision Inc.
+ 
++OUI:888914*
++ ID_OUI_FROM_DATABASE=All Components Incorporated
++
+ OUI:888964*
+  ID_OUI_FROM_DATABASE=GSI Electronics Inc.
+ 
+@@ -60853,6 +61540,9 @@ OUI:889166*
+ OUI:8891DD*
+  ID_OUI_FROM_DATABASE=Racktivity
+ 
++OUI:889471*
++ ID_OUI_FROM_DATABASE=Brocade Communications Systems, Inc.
++
+ OUI:8894F9*
+  ID_OUI_FROM_DATABASE=Gemicom Technology, Inc.
+ 
+@@ -60883,6 +61573,9 @@ OUI:88A3CC*
+ OUI:88A5BD*
+  ID_OUI_FROM_DATABASE=QPCOM INC.
+ 
++OUI:88A73C*
++ ID_OUI_FROM_DATABASE=Ragentek Technology Group
++
+ OUI:88ACC1*
+  ID_OUI_FROM_DATABASE=Generiton Co., Ltd.
+ 
+@@ -60916,6 +61609,9 @@ OUI:88CB87*
+ OUI:88D7BC*
+  ID_OUI_FROM_DATABASE=DEP Company
+ 
++OUI:88D962*
++ ID_OUI_FROM_DATABASE=Canopus Systems US LLC
++
+ OUI:88DC96*
+  ID_OUI_FROM_DATABASE=SENAO Networks, Inc.
+ 
+@@ -60928,12 +61624,18 @@ OUI:88E0A0*
+ OUI:88E0F3*
+  ID_OUI_FROM_DATABASE=Juniper Networks
+ 
++OUI:88E3AB*
++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
++
+ OUI:88E712*
+  ID_OUI_FROM_DATABASE=Whirlpool Corporation
+ 
+ OUI:88E7A6*
+  ID_OUI_FROM_DATABASE=iKnowledge Integration Corp.
+ 
++OUI:88E8F8*
++ ID_OUI_FROM_DATABASE=YONG TAI ELECTRONIC (DONGGUAN) LTD.
++
+ OUI:88E917*
+  ID_OUI_FROM_DATABASE=Tamaggo
+ 
+@@ -60949,6 +61651,9 @@ OUI:88F488*
+ OUI:88F490*
+  ID_OUI_FROM_DATABASE=Jetmobile Pte Ltd
+ 
++OUI:88F7C7*
++ ID_OUI_FROM_DATABASE=Technicolor USA Inc.
++
+ OUI:88FD15*
+  ID_OUI_FROM_DATABASE=LINEEYE CO., LTD
+ 
+@@ -60994,6 +61699,9 @@ OUI:8C271D*
+ OUI:8C278A*
+  ID_OUI_FROM_DATABASE=Vocollect Inc
+ 
++OUI:8C2937*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:8C2DAA*
+  ID_OUI_FROM_DATABASE=Apple
+ 
+@@ -61012,6 +61720,9 @@ OUI:8C3C07*
+ OUI:8C3C4A*
+  ID_OUI_FROM_DATABASE=NAKAYO TELECOMMUNICATIONS,INC.
+ 
++OUI:8C41F2*
++ ID_OUI_FROM_DATABASE=RDA Technologies Ltd.
++
+ OUI:8C4435*
+  ID_OUI_FROM_DATABASE=Shanghai BroadMobi Communication Technology Co., Ltd.
+ 
+@@ -61099,6 +61810,9 @@ OUI:8C7716*
+ OUI:8C7B9D*
+  ID_OUI_FROM_DATABASE=Apple
+ 
++OUI:8C7C92*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:8C7CB5*
+  ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+ 
+@@ -61153,6 +61867,9 @@ OUI:8CB82C*
+ OUI:8CB864*
+  ID_OUI_FROM_DATABASE=AcSiP Technology Corp.
+ 
++OUI:8CBEBE*
++ ID_OUI_FROM_DATABASE=Xiaomi Technology Co.,Ltd
++
+ OUI:8CC121*
+  ID_OUI_FROM_DATABASE=Panasonic Corporation AVC Networks Company
+ 
+@@ -61285,6 +62002,9 @@ OUI:902B34*
+ OUI:902E87*
+  ID_OUI_FROM_DATABASE=LabJack
+ 
++OUI:9031CD*
++ ID_OUI_FROM_DATABASE=Onyx Healthcare Inc.
++
+ OUI:90342B*
+  ID_OUI_FROM_DATABASE=Gatekeeper Systems, Inc.
+ 
+@@ -61324,6 +62044,9 @@ OUI:9049FA*
+ OUI:904CE5*
+  ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+ 
++OUI:904E2B*
++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
++
+ OUI:90507B*
+  ID_OUI_FROM_DATABASE=Advanced PANMOBIL Systems GmbH & Co. KG
+ 
+@@ -61426,6 +62149,9 @@ OUI:9092B4*
+ OUI:9094E4*
+  ID_OUI_FROM_DATABASE=D-Link International
+ 
++OUI:909864*
++ ID_OUI_FROM_DATABASE=Impex-Sat GmbH&amp;Co KG
++
+ OUI:909916*
+  ID_OUI_FROM_DATABASE=ELVEES NeoTek OJSC
+ 
+@@ -61501,6 +62227,12 @@ OUI:90D92C*
+ OUI:90DA4E*
+  ID_OUI_FROM_DATABASE=AVANU
+ 
++OUI:90DB46*
++ ID_OUI_FROM_DATABASE=E-LEAD ELECTRONIC CO., LTD
++
++OUI:90DFB7*
++ ID_OUI_FROM_DATABASE=s.m.s smart microwave sensors GmbH
++
+ OUI:90E0F0*
+  ID_OUI_FROM_DATABASE=Harman International
+ 
+@@ -61513,6 +62245,12 @@ OUI:90E6BA*
+ OUI:90EA60*
+  ID_OUI_FROM_DATABASE=SPI Lasers Ltd
+ 
++OUI:90F1AA*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,LTD
++
++OUI:90F1B0*
++ ID_OUI_FROM_DATABASE=Hangzhou Anheng Info&Tech CO.,LTD
++
+ OUI:90F278*
+  ID_OUI_FROM_DATABASE=Radius Gateway
+ 
+@@ -61624,6 +62362,9 @@ OUI:945047*
+ OUI:945103*
+  ID_OUI_FROM_DATABASE=Samsung Electronics
+ 
++OUI:9451BF*
++ ID_OUI_FROM_DATABASE=Hyundai ESG
++
+ OUI:94592D*
+  ID_OUI_FROM_DATABASE=EKE Building Technology Systems Ltd
+ 
+@@ -61681,6 +62422,9 @@ OUI:949BFD*
+ OUI:949C55*
+  ID_OUI_FROM_DATABASE=Alta Data Technologies
+ 
++OUI:949F3F*
++ ID_OUI_FROM_DATABASE=Optek Digital Technology company limited
++
+ OUI:949FB4*
+  ID_OUI_FROM_DATABASE=ChengDu JiaFaAnTai Technology Co.,Ltd
+ 
+@@ -61711,6 +62455,9 @@ OUI:94BA56*
+ OUI:94BF1E*
+  ID_OUI_FROM_DATABASE=eflow Inc. / Smart Device Planning and Development Division
+ 
++OUI:94C014*
++ ID_OUI_FROM_DATABASE=Sorter Sp. j. Konrad Grzeszczyk MichaA, Ziomek
++
+ OUI:94C150*
+  ID_OUI_FROM_DATABASE=2Wire Inc
+ 
+@@ -61939,6 +62686,9 @@ OUI:9873C4*
+ OUI:9876B6*
+  ID_OUI_FROM_DATABASE=Adafruit
+ 
++OUI:987770*
++ ID_OUI_FROM_DATABASE=Pep Digital Technology (Guangzhou) Co., Ltd
++
+ OUI:988217*
+  ID_OUI_FROM_DATABASE=Disruptive Ltd
+ 
+@@ -61990,6 +62740,9 @@ OUI:98BC57*
+ OUI:98BC99*
+  ID_OUI_FROM_DATABASE=Edeltech Co.,Ltd.
+ 
++OUI:98C0EB*
++ ID_OUI_FROM_DATABASE=Global Regency Ltd
++
+ OUI:98C845*
+  ID_OUI_FROM_DATABASE=PacketAccess
+ 
+@@ -62026,6 +62779,9 @@ OUI:98E79A*
+ OUI:98EC65*
+  ID_OUI_FROM_DATABASE=Cosesy ApS
+ 
++OUI:98F0AB*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:98F537*
+  ID_OUI_FROM_DATABASE=zte corporation
+ 
+@@ -62113,6 +62869,9 @@ OUI:9C31B6*
+ OUI:9C3AAF*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
++OUI:9C3EAA*
++ ID_OUI_FROM_DATABASE=EnvyLogic Co.,Ltd.
++
+ OUI:9C417C*
+  ID_OUI_FROM_DATABASE=Hame  Technology Co.,  Limited
+ 
+@@ -62179,6 +62938,12 @@ OUI:9C611D*
+ OUI:9C645E*
+  ID_OUI_FROM_DATABASE=Harman Consumer Group
+ 
++OUI:9C65B0*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
++
++OUI:9C65F9*
++ ID_OUI_FROM_DATABASE=AcSiP Technology Corp.
++
+ OUI:9C6650*
+  ID_OUI_FROM_DATABASE=Glodio Technolies Co.,Ltd Tianjin Branch
+ 
+@@ -62203,6 +62968,9 @@ OUI:9C807D*
+ OUI:9C80DF*
+  ID_OUI_FROM_DATABASE=Arcadyan Technology Corporation
+ 
++OUI:9C86DA*
++ ID_OUI_FROM_DATABASE=Phoenix Geophysics Ltd.
++
+ OUI:9C8888*
+  ID_OUI_FROM_DATABASE=Simac Techniek NV
+ 
+@@ -62272,6 +63040,9 @@ OUI:9CB793*
+ OUI:9CBB98*
+  ID_OUI_FROM_DATABASE=Shen Zhen RND Electronic Co.,LTD
+ 
++OUI:9CBD9D*
++ ID_OUI_FROM_DATABASE=SkyDisk, Inc.
++
+ OUI:9CC077*
+  ID_OUI_FROM_DATABASE=PrintCounts, LLC
+ 
+@@ -62332,6 +63103,9 @@ OUI:9CF8DB*
+ OUI:9CF938*
+  ID_OUI_FROM_DATABASE=AREVA NP GmbH
+ 
++OUI:9CFBF1*
++ ID_OUI_FROM_DATABASE=MESOMATIC GmbH & Co.KG
++
+ OUI:9CFFBE*
+  ID_OUI_FROM_DATABASE=OTSL Inc.
+ 
+@@ -62449,6 +63223,9 @@ OUI:A05DE7*
+ OUI:A05E6B*
+  ID_OUI_FROM_DATABASE=MELPER Co., Ltd.
+ 
++OUI:A06518*
++ ID_OUI_FROM_DATABASE=VNPT TECHNOLOGY
++
+ OUI:A067BE*
+  ID_OUI_FROM_DATABASE=Sicon s.r.l.
+ 
+@@ -62479,6 +63256,9 @@ OUI:A073FC*
+ OUI:A07591*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
++OUI:A07771*
++ ID_OUI_FROM_DATABASE=Vialis BV
++
+ OUI:A078BA*
+  ID_OUI_FROM_DATABASE=Pantech Co., Ltd.
+ 
+@@ -62500,6 +63280,9 @@ OUI:A08869*
+ OUI:A088B4*
+  ID_OUI_FROM_DATABASE=Intel Corporate
+ 
++OUI:A089E4*
++ ID_OUI_FROM_DATABASE=Skyworth Digital Technology(Shenzhen) Co.,Ltd
++
+ OUI:A08A87*
+  ID_OUI_FROM_DATABASE=HuiZhou KaiYue Electronic Co.,Ltd
+ 
+@@ -62599,6 +63382,9 @@ OUI:A0E25A*
+ OUI:A0E295*
+  ID_OUI_FROM_DATABASE=DAT System Co.,Ltd
+ 
++OUI:A0E453*
++ ID_OUI_FROM_DATABASE=Sony Mobile Communications AB
++
+ OUI:A0E534*
+  ID_OUI_FROM_DATABASE=Stratec Biomedical AG
+ 
+@@ -62635,6 +63421,9 @@ OUI:A0F419*
+ OUI:A0F450*
+  ID_OUI_FROM_DATABASE=HTC Corporation
+ 
++OUI:A0F459*
++ ID_OUI_FROM_DATABASE=FN-LINK TECHNOLOGY LIMITED
++
+ OUI:A0FE91*
+  ID_OUI_FROM_DATABASE=AVAT Automation GmbH
+ 
+@@ -62740,6 +63529,9 @@ OUI:A45D36*
+ OUI:A46706*
+  ID_OUI_FROM_DATABASE=Apple
+ 
++OUI:A46CC1*
++ ID_OUI_FROM_DATABASE=LTi REEnergy GmbH
++
+ OUI:A46E79*
+  ID_OUI_FROM_DATABASE=DFT System Co.Ltd
+ 
+@@ -62785,6 +63577,9 @@ OUI:A49947*
+ OUI:A49981*
+  ID_OUI_FROM_DATABASE=FuJian Elite Power Tech CO.,LTD.
+ 
++OUI:A49A58*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
++
+ OUI:A49B13*
+  ID_OUI_FROM_DATABASE=Burroughs Payment Systems, Inc.
+ 
+@@ -62836,6 +63631,9 @@ OUI:A4B980*
+ OUI:A4BADB*
+  ID_OUI_FROM_DATABASE=Dell Inc.
+ 
++OUI:A4BBAF*
++ ID_OUI_FROM_DATABASE=Lime Instruments
++
+ OUI:A4BE61*
+  ID_OUI_FROM_DATABASE=EutroVision System, Inc.
+ 
+@@ -62941,6 +63739,9 @@ OUI:A80180*
+ OUI:A80600*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
++OUI:A80C0D*
++ ID_OUI_FROM_DATABASE=Cisco
++
+ OUI:A8154D*
+  ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
+ 
+@@ -62959,6 +63760,9 @@ OUI:A81FAF*
+ OUI:A82066*
+  ID_OUI_FROM_DATABASE=Apple
+ 
++OUI:A824EB*
++ ID_OUI_FROM_DATABASE=ZAO NPO Introtest
++
+ OUI:A826D9*
+  ID_OUI_FROM_DATABASE=HTC Corporation
+ 
+@@ -62992,6 +63796,9 @@ OUI:A854B2*
+ OUI:A8556A*
+  ID_OUI_FROM_DATABASE=Pocketnet Technology Inc.
+ 
++OUI:A8574E*
++ ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
++
+ OUI:A85BB0*
+  ID_OUI_FROM_DATABASE=Shenzhen Dehoo Technology Co.,Ltd
+ 
+@@ -63034,6 +63841,9 @@ OUI:A87B39*
+ OUI:A87E33*
+  ID_OUI_FROM_DATABASE=Nokia Danmark A/S
+ 
++OUI:A881F1*
++ ID_OUI_FROM_DATABASE=BMEYE B.V.
++
+ OUI:A886DD*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
+@@ -63085,12 +63895,18 @@ OUI:A8B0AE*
+ OUI:A8B1D4*
+  ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
+ 
++OUI:A8B9B3*
++ ID_OUI_FROM_DATABASE=ESSYS
++
+ OUI:A8BBCF*
+  ID_OUI_FROM_DATABASE=Apple
+ 
+ OUI:A8BD1A*
+  ID_OUI_FROM_DATABASE=Honey Bee (Hong Kong) Limited
+ 
++OUI:A8BD3A*
++ ID_OUI_FROM_DATABASE=UNIONMAN TECHNOLOGY CO.,LTD
++
+ OUI:A8C222*
+  ID_OUI_FROM_DATABASE=TM-Research Inc.
+ 
+@@ -63157,6 +63973,9 @@ OUI:AA0004*
+ OUI:AC0142*
+  ID_OUI_FROM_DATABASE=Uriel Technologies SIA
+ 
++OUI:AC02CA*
++ ID_OUI_FROM_DATABASE=HI Solutions, Inc.
++
+ OUI:AC02CF*
+  ID_OUI_FROM_DATABASE=RW Tecnologia Industria e Comercio Ltda
+ 
+@@ -63208,6 +64027,9 @@ OUI:AC319D*
+ OUI:AC34CB*
+  ID_OUI_FROM_DATABASE=Shanhai GBCOM Communication Technology Co. Ltd
+ 
++OUI:AC3613*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
++
+ OUI:AC3C0B*
+  ID_OUI_FROM_DATABASE=Apple
+ 
+@@ -63406,6 +64228,9 @@ OUI:ACCE8F*
+ OUI:ACCF23*
+  ID_OUI_FROM_DATABASE=Hi-flying electronics technology Co.,Ltd
+ 
++OUI:ACCF5C*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:ACD180*
+  ID_OUI_FROM_DATABASE=Crexendo Business Solutions, Inc.
+ 
+@@ -63421,6 +64246,9 @@ OUI:ACD9D6*
+ OUI:ACDBDA*
+  ID_OUI_FROM_DATABASE=Shenzhen Geniatech Inc, Ltd
+ 
++OUI:ACE069*
++ ID_OUI_FROM_DATABASE=ISAAC Instruments
++
+ OUI:ACE215*
+  ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
+ 
+@@ -63493,6 +64321,9 @@ OUI:B01C91*
+ OUI:B024F3*
+  ID_OUI_FROM_DATABASE=Progeny Systems
+ 
++OUI:B03495*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:B0358D*
+  ID_OUI_FROM_DATABASE=Nokia Corporation
+ 
+@@ -63523,6 +64354,9 @@ OUI:B050BC*
+ OUI:B0518E*
+  ID_OUI_FROM_DATABASE=Holl technology CO.Ltd.
+ 
++OUI:B05706*
++ ID_OUI_FROM_DATABASE=Vallox Oy
++
+ OUI:B058C4*
+  ID_OUI_FROM_DATABASE=Broadcast Microwave Services, Inc
+ 
+@@ -63538,6 +64372,12 @@ OUI:B06563*
+ OUI:B065BD*
+  ID_OUI_FROM_DATABASE=Apple
+ 
++OUI:B068B6*
++ ID_OUI_FROM_DATABASE=Hangzhou OYE Technology Co. Ltd
++
++OUI:B06971*
++ ID_OUI_FROM_DATABASE=DEI Sales, Inc.
++
+ OUI:B06CBF*
+  ID_OUI_FROM_DATABASE=3ality Digital Systems GmbH
+ 
+@@ -63568,6 +64408,9 @@ OUI:B0808C*
+ OUI:B081D8*
+  ID_OUI_FROM_DATABASE=I-sys Corp
+ 
++OUI:B0869E*
++ ID_OUI_FROM_DATABASE=Chloride S.r.L
++
+ OUI:B08807*
+  ID_OUI_FROM_DATABASE=Strata Worldwide
+ 
+@@ -63643,6 +64486,9 @@ OUI:B0BF99*
+ OUI:B0C4E7*
+  ID_OUI_FROM_DATABASE=Samsung Electronics
+ 
++OUI:B0C554*
++ ID_OUI_FROM_DATABASE=D-Link International
++
+ OUI:B0C69A*
+  ID_OUI_FROM_DATABASE=Juniper Networks
+ 
+@@ -63673,6 +64519,9 @@ OUI:B0D2F5*
+ OUI:B0D7C5*
+  ID_OUI_FROM_DATABASE=STP KFT
+ 
++OUI:B0DA00*
++ ID_OUI_FROM_DATABASE=CERA ELECTRONIQUE
++
+ OUI:B0DF3A*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
+@@ -63694,6 +64543,9 @@ OUI:B0E97E*
+ OUI:B0EC71*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
++OUI:B0EC8F*
++ ID_OUI_FROM_DATABASE=GMX SAS
++
+ OUI:B0EE45*
+  ID_OUI_FROM_DATABASE=AzureWave Technologies, Inc.
+ 
+@@ -63736,6 +64588,9 @@ OUI:B41489*
+ OUI:B41513*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
++OUI:B418D1*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:B41DEF*
+  ID_OUI_FROM_DATABASE=Internet Laboratories, Inc.
+ 
+@@ -63754,6 +64609,9 @@ OUI:B428F1*
+ OUI:B42A39*
+  ID_OUI_FROM_DATABASE=ORBIT MERRET, spol. s r. o.
+ 
++OUI:B42C92*
++ ID_OUI_FROM_DATABASE=Zhejiang Weirong Electronic Co., Ltd
++
+ OUI:B42CBE*
+  ID_OUI_FROM_DATABASE=Direct Payment Solutions Limited
+ 
+@@ -63787,6 +64645,9 @@ OUI:B43E3B*
+ OUI:B4417A*
+  ID_OUI_FROM_DATABASE=ShenZhen Gongjin Electronics Co.,Ltd
+ 
++OUI:B4430D*
++ ID_OUI_FROM_DATABASE=Broadlink Pty Ltd
++
+ OUI:B44CC2*
+  ID_OUI_FROM_DATABASE=NR ELECTRIC CO., LTD
+ 
+@@ -63847,6 +64708,9 @@ OUI:B482C5*
+ OUI:B482FE*
+  ID_OUI_FROM_DATABASE=Askey Computer Corp
+ 
++OUI:B48547*
++ ID_OUI_FROM_DATABASE=Amptown System Company GmbH
++
+ OUI:B48910*
+  ID_OUI_FROM_DATABASE=Coster T.E. S.P.A.
+ 
+@@ -63856,6 +64720,9 @@ OUI:B4944E*
+ OUI:B49842*
+  ID_OUI_FROM_DATABASE=zte corporation
+ 
++OUI:B4994C*
++ ID_OUI_FROM_DATABASE=Texas Instruments
++
+ OUI:B499BA*
+  ID_OUI_FROM_DATABASE=Hewlett-Packard Company
+ 
+@@ -63875,7 +64742,7 @@ OUI:B4A5A9*
+  ID_OUI_FROM_DATABASE=MODI GmbH
+ 
+ OUI:B4A82B*
+- ID_OUI_FROM_DATABASE=Histar
++ ID_OUI_FROM_DATABASE=Histar Digital Electronics Co., Ltd.
+ 
+ OUI:B4A95A*
+  ID_OUI_FROM_DATABASE=Avaya, Inc
+@@ -63895,6 +64762,9 @@ OUI:B4B362*
+ OUI:B4B52F*
+  ID_OUI_FROM_DATABASE=Hewlett Packard
+ 
++OUI:B4B542*
++ ID_OUI_FROM_DATABASE=Hubbell Power Systems, Inc.
++
+ OUI:B4B5AF*
+  ID_OUI_FROM_DATABASE=Minsung Electronics
+ 
+@@ -64021,6 +64891,9 @@ OUI:B830A8*
+ OUI:B836D8*
+  ID_OUI_FROM_DATABASE=Videoswitch
+ 
++OUI:B83861*
++ ID_OUI_FROM_DATABASE=Cisco
++
+ OUI:B838CA*
+  ID_OUI_FROM_DATABASE=Kyokko Tsushin System CO.,LTD
+ 
+@@ -64036,6 +64909,9 @@ OUI:B83E59*
+ OUI:B8415F*
+  ID_OUI_FROM_DATABASE=ASP AG
+ 
++OUI:B843E4*
++ ID_OUI_FROM_DATABASE=Vlatacom
++
+ OUI:B847C6*
+  ID_OUI_FROM_DATABASE=SanJet Technology Corp.
+ 
+@@ -64075,6 +64951,9 @@ OUI:B8653B*
+ OUI:B86B23*
+  ID_OUI_FROM_DATABASE=Toshiba
+ 
++OUI:B86CE8*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
++
+ OUI:B870F4*
+  ID_OUI_FROM_DATABASE=COMPAL INFORMATION (KUNSHAN) CO., LTD.
+ 
+@@ -64543,6 +65422,9 @@ OUI:BCF2AF*
+ OUI:BCF5AC*
+  ID_OUI_FROM_DATABASE=LG Electronics
+ 
++OUI:BCF61C*
++ ID_OUI_FROM_DATABASE=Geomodeling Wuxi Technology Co. Ltd.
++
+ OUI:BCF685*
+  ID_OUI_FROM_DATABASE=D-Link International
+ 
+@@ -64762,6 +65644,9 @@ OUI:C0C3B6*
+ OUI:C0C520*
+  ID_OUI_FROM_DATABASE=Ruckus Wireless
+ 
++OUI:C0C569*
++ ID_OUI_FROM_DATABASE=SHANGHAI LYNUC CNC TECHNOLOGY CO.,LTD
++
+ OUI:C0C687*
+  ID_OUI_FROM_DATABASE=Cisco SPVTG
+ 
+@@ -64798,6 +65683,9 @@ OUI:C0EAE4*
+ OUI:C0F1C4*
+  ID_OUI_FROM_DATABASE=Pacidal Corporation Ltd.
+ 
++OUI:C0F79D*
++ ID_OUI_FROM_DATABASE=Powercode
++
+ OUI:C0F8DA*
+  ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+ 
+@@ -64816,18 +65704,27 @@ OUI:C401B1*
+ OUI:C40415*
+  ID_OUI_FROM_DATABASE=NETGEAR INC.,
+ 
++OUI:C40528*
++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
++
+ OUI:C40938*
+  ID_OUI_FROM_DATABASE=Fujian Star-net Communication Co., Ltd
+ 
+ OUI:C40ACB*
+  ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
+ 
++OUI:C40E45*
++ ID_OUI_FROM_DATABASE=ACK Networks,Inc.
++
+ OUI:C40F09*
+  ID_OUI_FROM_DATABASE=Hermes electronic GmbH
+ 
+ OUI:C4108A*
+  ID_OUI_FROM_DATABASE=Ruckus Wireless
+ 
++OUI:C4143C*
++ ID_OUI_FROM_DATABASE=Cisco
++
+ OUI:C416FA*
+  ID_OUI_FROM_DATABASE=Prysm Inc
+ 
+@@ -64858,6 +65755,9 @@ OUI:C42628*
+ OUI:C42795*
+  ID_OUI_FROM_DATABASE=Technicolor USA Inc.
+ 
++OUI:C4291D*
++ ID_OUI_FROM_DATABASE=KLEMSAN ELEKTRIK ELEKTRONIK SAN.VE TIC.AS.
++
+ OUI:C42C03*
+  ID_OUI_FROM_DATABASE=Apple
+ 
+@@ -64900,9 +65800,15 @@ OUI:C44AD0*
+ OUI:C44B44*
+  ID_OUI_FROM_DATABASE=Omniprint Inc.
+ 
++OUI:C44E1F*
++ ID_OUI_FROM_DATABASE=BlueN
++
+ OUI:C44EAC*
+  ID_OUI_FROM_DATABASE=Shenzhen Shiningworth Technology Co., Ltd.
+ 
++OUI:C45006*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
++
+ OUI:C45444*
+  ID_OUI_FROM_DATABASE=QUANTA COMPUTER INC.
+ 
+@@ -65002,6 +65908,9 @@ OUI:C495A2*
+ OUI:C49805*
+  ID_OUI_FROM_DATABASE=Minieum Networks, Inc
+ 
++OUI:C4A81D*
++ ID_OUI_FROM_DATABASE=D-Link International
++
+ OUI:C4AAA1*
+  ID_OUI_FROM_DATABASE=SUMMIT DEVELOPMENT, spol.s r.o.
+ 
+@@ -65014,12 +65923,18 @@ OUI:C4B512*
+ OUI:C4BA99*
+  ID_OUI_FROM_DATABASE=I+ME Actia Informatik und Mikro-Elektronik GmbH
+ 
++OUI:C4C0AE*
++ ID_OUI_FROM_DATABASE=MIDORI ELECTRONIC CO., LTD.
++
+ OUI:C4C19F*
+  ID_OUI_FROM_DATABASE=National Oilwell Varco Instrumentation, Monitoring, and Optimization (NOV IMO)
+ 
+ OUI:C4C755*
+  ID_OUI_FROM_DATABASE=Beijing HuaqinWorld Technology Co.,Ltd
+ 
++OUI:C4C919*
++ ID_OUI_FROM_DATABASE=Energy Imports Ltd
++
+ OUI:C4CAD9*
+  ID_OUI_FROM_DATABASE=Hangzhou H3C Technologies Co., Limited
+ 
+@@ -65050,6 +65965,9 @@ OUI:C4E7BE*
+ OUI:C4E92F*
+  ID_OUI_FROM_DATABASE=AB Sciex
+ 
++OUI:C4E984*
++ ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
++
+ OUI:C4EBE3*
+  ID_OUI_FROM_DATABASE=RRCN SAS
+ 
+@@ -65092,6 +66010,9 @@ OUI:C80E95*
+ OUI:C81479*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
++OUI:C816BD*
++ ID_OUI_FROM_DATABASE=HISENSE ELECTRIC CO.,LTD.
++
+ OUI:C819F7*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
+@@ -65302,6 +66223,9 @@ OUI:C8D2C1*
+ OUI:C8D3A3*
+  ID_OUI_FROM_DATABASE=D-Link International
+ 
++OUI:C8D429*
++ ID_OUI_FROM_DATABASE=Muehlbauer AG
++
+ OUI:C8D5FE*
+  ID_OUI_FROM_DATABASE=Shenzhen Zowee Technology Co., Ltd
+ 
+@@ -65428,6 +66352,9 @@ OUI:CC34D7*
+ OUI:CC3540*
+  ID_OUI_FROM_DATABASE=Technicolor USA Inc.
+ 
++OUI:CC398C*
++ ID_OUI_FROM_DATABASE=Shiningtek
++
+ OUI:CC3A61*
+  ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO MECHANICS CO., LTD.
+ 
+@@ -65527,6 +66454,12 @@ OUI:CC7D37*
+ OUI:CC7EE7*
+  ID_OUI_FROM_DATABASE=Panasonic AVC Networks Company
+ 
++OUI:CC856C*
++ ID_OUI_FROM_DATABASE=SHENZHEN MDK DIGITAL TECHNOLOGY CO.,LTD
++
++OUI:CC89FD*
++ ID_OUI_FROM_DATABASE=Nokia Corporation
++
+ OUI:CC8CE3*
+  ID_OUI_FROM_DATABASE=Texas Instruments
+ 
+@@ -65539,18 +66472,27 @@ OUI:CC912B*
+ OUI:CC944A*
+  ID_OUI_FROM_DATABASE=Pfeiffer Vacuum GmbH
+ 
++OUI:CC95D7*
++ ID_OUI_FROM_DATABASE=VIZIO, Inc
++
+ OUI:CC96A0*
+  ID_OUI_FROM_DATABASE=Shenzhen Huawei Communication Technologies Co., Ltd
+ 
+ OUI:CC9E00*
+  ID_OUI_FROM_DATABASE=Nintendo Co., Ltd.
+ 
++OUI:CC9F35*
++ ID_OUI_FROM_DATABASE=Transbit Sp. z o.o.
++
+ OUI:CCA374*
+  ID_OUI_FROM_DATABASE=Guangdong Guanglian Electronic Technology Co.Ltd
+ 
+ OUI:CCA462*
+  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+ 
++OUI:CCA614*
++ ID_OUI_FROM_DATABASE=AIFA TECHNOLOGY CORP.
++
+ OUI:CCAF78*
+  ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+ 
+@@ -65650,6 +66592,9 @@ OUI:CCF954*
+ OUI:CCF9E8*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
++OUI:CCFA00*
++ ID_OUI_FROM_DATABASE=LG Electronics
++
+ OUI:CCFB65*
+  ID_OUI_FROM_DATABASE=Nintendo Co., Ltd.
+ 
+@@ -65731,6 +66676,9 @@ OUI:D0574C*
+ OUI:D05785*
+  ID_OUI_FROM_DATABASE=Pantech Co., Ltd.
+ 
++OUI:D057A1*
++ ID_OUI_FROM_DATABASE=Werma Signaltechnik GmbH & Co. KG
++
+ OUI:D05875*
+  ID_OUI_FROM_DATABASE=Active Control Technology Inc.
+ 
+@@ -65743,6 +66691,9 @@ OUI:D05A0F*
+ OUI:D05FCE*
+  ID_OUI_FROM_DATABASE=Hitachi Data Systems
+ 
++OUI:D0634D*
++ ID_OUI_FROM_DATABASE=Meiko Maschinenbau GmbH &amp; Co. KG
++
+ OUI:D063B4*
+  ID_OUI_FROM_DATABASE=SolidRun Ltd.
+ 
+@@ -65755,6 +66706,9 @@ OUI:D067E5*
+ OUI:D0699E*
+  ID_OUI_FROM_DATABASE=LUMINEX Lighting Control Equipment
+ 
++OUI:D069D0*
++ ID_OUI_FROM_DATABASE=Verto Medical Solutions, LLC
++
+ OUI:D0737F*
+  ID_OUI_FROM_DATABASE=Mini-Circuits
+ 
+@@ -65767,12 +66721,18 @@ OUI:D073D5*
+ OUI:D075BE*
+  ID_OUI_FROM_DATABASE=Reno A&E
+ 
++OUI:D07AB5*
++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
++
+ OUI:D07DE5*
+  ID_OUI_FROM_DATABASE=Forward Pay Systems, Inc.
+ 
+ OUI:D07E28*
+  ID_OUI_FROM_DATABASE=Hewlett Packard
+ 
++OUI:D07E35*
++ ID_OUI_FROM_DATABASE=Intel Corporate
++
+ OUI:D08999*
+  ID_OUI_FROM_DATABASE=APCON, Inc.
+ 
+@@ -65797,6 +66757,9 @@ OUI:D095C7*
+ OUI:D09B05*
+  ID_OUI_FROM_DATABASE=Emtronix
+ 
++OUI:D09C30*
++ ID_OUI_FROM_DATABASE=Foster Electric Company, Limited
++
+ OUI:D09D0A*
+  ID_OUI_FROM_DATABASE=LINKCOM
+ 
+@@ -65824,6 +66787,9 @@ OUI:D0B53D*
+ OUI:D0BB80*
+  ID_OUI_FROM_DATABASE=SHL Telemedicine International Ltd.
+ 
++OUI:D0BD01*
++ ID_OUI_FROM_DATABASE=DS International
++
+ OUI:D0BE2C*
+  ID_OUI_FROM_DATABASE=CNSLink Co., Ltd.
+ 
+@@ -65965,6 +66931,9 @@ OUI:D4206D*
+ OUI:D4223F*
+  ID_OUI_FROM_DATABASE=Lenovo Mobile Communication Technology Ltd.
+ 
++OUI:D4224E*
++ ID_OUI_FROM_DATABASE=Alcatel Lucent
++
+ OUI:D42751*
+  ID_OUI_FROM_DATABASE=Infopia Co., Ltd
+ 
+@@ -65977,6 +66946,12 @@ OUI:D429EA*
+ OUI:D42C3D*
+  ID_OUI_FROM_DATABASE=Sky Light Digital Limited
+ 
++OUI:D42F23*
++ ID_OUI_FROM_DATABASE=Akenori PTE Ltd
++
++OUI:D4319D*
++ ID_OUI_FROM_DATABASE=Sinwatec
++
+ OUI:D43A65*
+  ID_OUI_FROM_DATABASE=IGRS Engineering Lab Ltd.
+ 
+@@ -66241,6 +67216,9 @@ OUI:D809C3*
+ OUI:D80DE3*
+  ID_OUI_FROM_DATABASE=FXI TECHNOLOGIES AS
+ 
++OUI:D8150D*
++ ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
++
+ OUI:D8160A*
+  ID_OUI_FROM_DATABASE=Nippon Electro-Sensory Devices
+ 
+@@ -66277,6 +67255,9 @@ OUI:D82916*
+ OUI:D82986*
+  ID_OUI_FROM_DATABASE=Best Wish Technology LTD
+ 
++OUI:D82A15*
++ ID_OUI_FROM_DATABASE=Leitner SpA
++
+ OUI:D82A7E*
+  ID_OUI_FROM_DATABASE=Nokia Corporation
+ 
+@@ -66325,9 +67306,15 @@ OUI:D85D4C*
+ OUI:D85D84*
+  ID_OUI_FROM_DATABASE=CAx soft GmbH
+ 
++OUI:D86194*
++ ID_OUI_FROM_DATABASE=Objetivos y Sevicios de Valor Añadido
++
+ OUI:D862DB*
+  ID_OUI_FROM_DATABASE=Eno Inc.
+ 
++OUI:D86595*
++ ID_OUI_FROM_DATABASE=Toy's Myth Inc.
++
+ OUI:D866C6*
+  ID_OUI_FROM_DATABASE=Shenzhen Daystar Technology Co.,ltd
+ 
+@@ -66361,6 +67348,9 @@ OUI:D87988*
+ OUI:D87CDD*
+  ID_OUI_FROM_DATABASE=SANIX INCORPORATED
+ 
++OUI:D881CE*
++ ID_OUI_FROM_DATABASE=AHN INC.
++
+ OUI:D88A3B*
+  ID_OUI_FROM_DATABASE=UNIT-EM
+ 
+@@ -66418,6 +67408,9 @@ OUI:D8B377*
+ OUI:D8B6C1*
+  ID_OUI_FROM_DATABASE=NetworkAccountant, Inc.
+ 
++OUI:D8B6D6*
++ ID_OUI_FROM_DATABASE=Blu Tether Limited
++
+ OUI:D8B8F6*
+  ID_OUI_FROM_DATABASE=Nantworks
+ 
+@@ -66466,6 +67459,12 @@ OUI:D8DA52*
+ OUI:D8DCE9*
+  ID_OUI_FROM_DATABASE=Kunshan Erlab ductless filtration system Co.,Ltd
+ 
++OUI:D8DD5F*
++ ID_OUI_FROM_DATABASE=BALMUDA Inc.
++
++OUI:D8DDFD*
++ ID_OUI_FROM_DATABASE=Texas Instruments
++
+ OUI:D8DF0D*
+  ID_OUI_FROM_DATABASE=beroNet GmbH
+ 
+@@ -66484,9 +67483,15 @@ OUI:D8E952*
+ OUI:D8EB97*
+  ID_OUI_FROM_DATABASE=TRENDnet, Inc.
+ 
++OUI:D8EE78*
++ ID_OUI_FROM_DATABASE=Moog Protokraft
++
+ OUI:D8F0F2*
+  ID_OUI_FROM_DATABASE=Zeebo Inc
+ 
++OUI:D8FC93*
++ ID_OUI_FROM_DATABASE=Intel Corporate
++
+ OUI:D8FE8F*
+  ID_OUI_FROM_DATABASE=IDFone Co., Ltd.
+ 
+@@ -66499,6 +67504,9 @@ OUI:DC0265*
+ OUI:DC028E*
+  ID_OUI_FROM_DATABASE=zte corporation
+ 
++OUI:DC052F*
++ ID_OUI_FROM_DATABASE=National Products Inc.
++
+ OUI:DC0575*
+  ID_OUI_FROM_DATABASE=SIEMENS ENERGY AUTOMATION
+ 
+@@ -66619,6 +67627,9 @@ OUI:DC86D8*
+ OUI:DC9B1E*
+  ID_OUI_FROM_DATABASE=Intercom, Inc.
+ 
++OUI:DC9B9C*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:DC9C52*
+  ID_OUI_FROM_DATABASE=Sapphire Technology Limited.
+ 
+@@ -66670,6 +67681,9 @@ OUI:DCC101*
+ OUI:DCC422*
+  ID_OUI_FROM_DATABASE=Systembase Limited
+ 
++OUI:DCC793*
++ ID_OUI_FROM_DATABASE=Nokia Corporation
++
+ OUI:DCCBA8*
+  ID_OUI_FROM_DATABASE=Explora Technologies Inc
+ 
+@@ -66703,6 +67717,9 @@ OUI:DCDECA*
+ OUI:DCE2AC*
+  ID_OUI_FROM_DATABASE=Lumens Digital Optics Inc.
+ 
++OUI:DCE578*
++ ID_OUI_FROM_DATABASE=Experimental Factory of Scientific Engineering and Special Design Department
++
+ OUI:DCE71C*
+  ID_OUI_FROM_DATABASE=AUG Elektronik GmbH
+ 
+@@ -66781,6 +67798,9 @@ OUI:E03005*
+ OUI:E031D0*
+  ID_OUI_FROM_DATABASE=SZ Telstar CO., LTD
+ 
++OUI:E036E3*
++ ID_OUI_FROM_DATABASE=Stage One International Co., Ltd.
++
+ OUI:E039D7*
+  ID_OUI_FROM_DATABASE=Plexxi, Inc.
+ 
+@@ -66793,6 +67813,9 @@ OUI:E03E4A*
+ OUI:E03E7D*
+  ID_OUI_FROM_DATABASE=data-complex GmbH
+ 
++OUI:E03F49*
++ ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC.
++
+ OUI:E0469A*
+  ID_OUI_FROM_DATABASE=NETGEAR
+ 
+@@ -66841,6 +67864,9 @@ OUI:E0757D*
+ OUI:E07C62*
+  ID_OUI_FROM_DATABASE=Whistle Labs, Inc.
+ 
++OUI:E07F53*
++ ID_OUI_FROM_DATABASE=TECHBOARD SRL
++
+ OUI:E07F88*
+  ID_OUI_FROM_DATABASE=EVIDENCE Network SIA
+ 
+@@ -66967,6 +67993,9 @@ OUI:E0D10A*
+ OUI:E0D1E6*
+  ID_OUI_FROM_DATABASE=Aliph dba Jawbone
+ 
++OUI:E0D31A*
++ ID_OUI_FROM_DATABASE=EQUES Technology Co., Limited
++
+ OUI:E0D7BA*
+  ID_OUI_FROM_DATABASE=Texas Instruments
+ 
+@@ -66979,6 +68008,9 @@ OUI:E0DADC*
+ OUI:E0DB55*
+  ID_OUI_FROM_DATABASE=Dell Inc
+ 
++OUI:E0DB88*
++ ID_OUI_FROM_DATABASE=Open Standard Digital-IF Interface for SATCOM Systems
++
+ OUI:E0DCA0*
+  ID_OUI_FROM_DATABASE=Siemens Electrical Apparatus Ltd., Suzhou Chengdu Branch
+ 
+@@ -67030,6 +68062,9 @@ OUI:E40439*
+ OUI:E4115B*
+  ID_OUI_FROM_DATABASE=Hewlett Packard
+ 
++OUI:E4121D*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
++
+ OUI:E41289*
+  ID_OUI_FROM_DATABASE=topsystem Systemhaus GmbH
+ 
+@@ -67093,6 +68128,9 @@ OUI:E446BD*
+ OUI:E448C7*
+  ID_OUI_FROM_DATABASE=Cisco SPVTG
+ 
++OUI:E44C6C*
++ ID_OUI_FROM_DATABASE=Shenzhen Guo Wei Electronic Co,. Ltd.
++
+ OUI:E44E18*
+  ID_OUI_FROM_DATABASE=Gardasoft VisionLimited
+ 
+@@ -67144,6 +68182,9 @@ OUI:E47CF9*
+ OUI:E47D5A*
+  ID_OUI_FROM_DATABASE=Beijing Hanbang Technology Corp.
+ 
++OUI:E48184*
++ ID_OUI_FROM_DATABASE=Alcatel-Lucent
++
+ OUI:E481B3*
+  ID_OUI_FROM_DATABASE=Shenzhen ACT Industrial Co.,Ltd.
+ 
+@@ -67267,6 +68308,9 @@ OUI:E8056D*
+ OUI:E80688*
+  ID_OUI_FROM_DATABASE=Apple
+ 
++OUI:E8088B*
++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
++
+ OUI:E80B13*
+  ID_OUI_FROM_DATABASE=Akib Systems Taiwan, INC
+ 
+@@ -67285,6 +68329,9 @@ OUI:E81132*
+ OUI:E81324*
+  ID_OUI_FROM_DATABASE=GuangZhou Bonsoninfo System CO.,LTD
+ 
++OUI:E817FC*
++ ID_OUI_FROM_DATABASE=NIFTY Corporation
++
+ OUI:E82877*
+  ID_OUI_FROM_DATABASE=TMY Co., Ltd.
+ 
+@@ -67363,6 +68410,9 @@ OUI:E85E53*
+ OUI:E8611F*
+  ID_OUI_FROM_DATABASE=Dawning Information Industry Co.,Ltd
+ 
++OUI:E8617E*
++ ID_OUI_FROM_DATABASE=Liteon Technology Corporation
++
+ OUI:E86183*
+  ID_OUI_FROM_DATABASE=Black Diamond Advanced Technology, LLC
+ 
+@@ -67438,6 +68488,9 @@ OUI:E8A4C1*
+ OUI:E8ABFA*
+  ID_OUI_FROM_DATABASE=Shenzhen Reecam Tech.Ltd.
+ 
++OUI:E8B1FC*
++ ID_OUI_FROM_DATABASE=Intel Corporate
++
+ OUI:E8B4AE*
+  ID_OUI_FROM_DATABASE=Shenzhen C&D Electronics Co.,Ltd
+ 
+@@ -67519,6 +68572,9 @@ OUI:E8E776*
+ OUI:E8E875*
+  ID_OUI_FROM_DATABASE=iS5 Communications Inc.
+ 
++OUI:E8EA6A*
++ ID_OUI_FROM_DATABASE=StarTech.com
++
+ OUI:E8EADA*
+  ID_OUI_FROM_DATABASE=Denkovi Assembly Electroncs LTD
+ 
+@@ -67534,6 +68590,9 @@ OUI:E8F226*
+ OUI:E8F928*
+  ID_OUI_FROM_DATABASE=RFTECH SRL
+ 
++OUI:E8FC60*
++ ID_OUI_FROM_DATABASE=ELCOM Innovations Private Limited
++
+ OUI:EC0ED6*
+  ID_OUI_FROM_DATABASE=ITECH INSTRUMENTS SAS
+ 
+@@ -67756,6 +68815,12 @@ OUI:ECF236*
+ OUI:ECF35B*
+  ID_OUI_FROM_DATABASE=Nokia Corporation
+ 
++OUI:ECF4BB*
++ ID_OUI_FROM_DATABASE=Dell Inc PCBA Test
++
++OUI:ECF72B*
++ ID_OUI_FROM_DATABASE=HD DIGITAL TECH CO., LTD.
++
+ OUI:ECFAAA*
+  ID_OUI_FROM_DATABASE=The IMS Company
+ 
+@@ -67783,6 +68848,9 @@ OUI:F008F1*
+ OUI:F013C3*
+  ID_OUI_FROM_DATABASE=SHENZHEN FENDA TECHNOLOGY CO., LTD
+ 
++OUI:F015A0*
++ ID_OUI_FROM_DATABASE=KyungDong One Co., Ltd.
++
+ OUI:F01C13*
+  ID_OUI_FROM_DATABASE=LG Electronics
+ 
+@@ -67822,12 +68890,21 @@ OUI:F02A61*
+ OUI:F02FD8*
+  ID_OUI_FROM_DATABASE=Bi2-Vision
+ 
++OUI:F0321A*
++ ID_OUI_FROM_DATABASE=Mita-Teknik A/S
++
+ OUI:F037A1*
+  ID_OUI_FROM_DATABASE=Huike Electronics (SHENZHEN) CO., LTD.
+ 
++OUI:F03A4B*
++ ID_OUI_FROM_DATABASE=Bloombase, Inc.
++
+ OUI:F03A55*
+  ID_OUI_FROM_DATABASE=Omega Elektronik AS
+ 
++OUI:F03FF8*
++ ID_OUI_FROM_DATABASE=R L Drake
++
+ OUI:F04335*
+  ID_OUI_FROM_DATABASE=DVN(Shanghai)Ltd.
+ 
+@@ -67900,12 +68977,18 @@ OUI:F07F0C*
+ OUI:F081AF*
+  ID_OUI_FROM_DATABASE=IRZ AUTOMATION TECHNOLOGIES LTD
+ 
++OUI:F08261*
++ ID_OUI_FROM_DATABASE=SAGEMCOM
++
+ OUI:F0842F*
+  ID_OUI_FROM_DATABASE=ADB Broadband Italia
+ 
+ OUI:F084C9*
+  ID_OUI_FROM_DATABASE=zte corporation
+ 
++OUI:F08A28*
++ ID_OUI_FROM_DATABASE=JIANGSU HENGSION ELECTRONIC S and T CO.,LTD
++
+ OUI:F08BFE*
+  ID_OUI_FROM_DATABASE=COSTEL.,CO.LTD
+ 
+@@ -67990,6 +69073,9 @@ OUI:F0DA7C*
+ OUI:F0DB30*
+  ID_OUI_FROM_DATABASE=Yottabyte
+ 
++OUI:F0DBF8*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:F0DCE2*
+  ID_OUI_FROM_DATABASE=Apple
+ 
+@@ -68029,6 +69115,9 @@ OUI:F0F260*
+ OUI:F0F5AE*
+  ID_OUI_FROM_DATABASE=Adaptrum Inc.
+ 
++OUI:F0F61C*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:F0F644*
+  ID_OUI_FROM_DATABASE=Whitesky Science & Technology Co.,Ltd.
+ 
+@@ -68089,6 +69178,9 @@ OUI:F42896*
+ OUI:F436E1*
+  ID_OUI_FROM_DATABASE=Abilis Systems SARL
+ 
++OUI:F437B7*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:F43814*
+  ID_OUI_FROM_DATABASE=Shanghai Howell Electronic Co.,Ltd
+ 
+@@ -68191,6 +69283,9 @@ OUI:F48771*
+ OUI:F48E09*
+  ID_OUI_FROM_DATABASE=Nokia Corporation
+ 
++OUI:F490CA*
++ ID_OUI_FROM_DATABASE=Tensorcom
++
+ OUI:F490EA*
+  ID_OUI_FROM_DATABASE=Deciso B.V.
+ 
+@@ -68221,9 +69316,15 @@ OUI:F4B164*
+ OUI:F4B381*
+  ID_OUI_FROM_DATABASE=WindowMaster A/S
+ 
++OUI:F4B52F*
++ ID_OUI_FROM_DATABASE=Juniper networks
++
+ OUI:F4B549*
+  ID_OUI_FROM_DATABASE=Yeastar Technology Co., Ltd.
+ 
++OUI:F4B6E5*
++ ID_OUI_FROM_DATABASE=TerraSem Co.,Ltd
++
+ OUI:F4B72A*
+  ID_OUI_FROM_DATABASE=TIME INTERCONNECT LTD
+ 
+@@ -68251,6 +69352,9 @@ OUI:F4CD90*
+ OUI:F4CE46*
+  ID_OUI_FROM_DATABASE=Hewlett-Packard Company
+ 
++OUI:F4CFE2*
++ ID_OUI_FROM_DATABASE=Cisco
++
+ OUI:F4D9FB*
+  ID_OUI_FROM_DATABASE=Samsung Electronics CO., LTD
+ 
+@@ -68260,6 +69364,9 @@ OUI:F4DC4D*
+ OUI:F4DCDA*
+  ID_OUI_FROM_DATABASE=Zhuhai Jiahe Communication Technology Co., limited
+ 
++OUI:F4DCF9*
++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
++
+ OUI:F4E142*
+  ID_OUI_FROM_DATABASE=Delta Elektronika BV
+ 
+@@ -68413,6 +69520,9 @@ OUI:F8572E*
+ OUI:F85BC9*
+  ID_OUI_FROM_DATABASE=M-Cube Spa
+ 
++OUI:F85C45*
++ ID_OUI_FROM_DATABASE=IC Nexus Co. Ltd.
++
+ OUI:F85F2A*
+  ID_OUI_FROM_DATABASE=Nokia Corporation
+ 
+@@ -68494,6 +69604,9 @@ OUI:F8A45F*
+ OUI:F8A963*
+  ID_OUI_FROM_DATABASE=COMPAL INFORMATION (KUNSHAN) CO., LTD.
+ 
++OUI:F8A9D0*
++ ID_OUI_FROM_DATABASE=LG Electronics
++
+ OUI:F8A9DE*
+  ID_OUI_FROM_DATABASE=PUISSANCE PLUS
+ 
+@@ -68566,6 +69679,9 @@ OUI:F8DC7A*
+ OUI:F8DFA8*
+  ID_OUI_FROM_DATABASE=ZTE Corporation
+ 
++OUI:F8E079*
++ ID_OUI_FROM_DATABASE=Motorola Mobility LLC
++
+ OUI:F8E4FB*
+  ID_OUI_FROM_DATABASE=Actiontec Electronics, Inc
+ 
+@@ -68581,6 +69697,9 @@ OUI:F8EA0A*
+ OUI:F8EDA5*
+  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+ 
++OUI:F8F005*
++ ID_OUI_FROM_DATABASE=Newport Media Inc.
++
+ OUI:F8F014*
+  ID_OUI_FROM_DATABASE=RackWare Inc.
+ 
+@@ -68623,12 +69742,18 @@ OUI:FC01CD*
+ OUI:FC0647*
+  ID_OUI_FROM_DATABASE=Cortland Research, LLC
+ 
++OUI:FC07A0*
++ ID_OUI_FROM_DATABASE=LRE Medical GmbH
++
+ OUI:FC0877*
+  ID_OUI_FROM_DATABASE=Prentke Romich Company
+ 
+ OUI:FC09D8*
+  ID_OUI_FROM_DATABASE=ACTEON Group
+ 
++OUI:FC09F6*
++ ID_OUI_FROM_DATABASE=GUANGDONG TONZE ELECTRIC CO.,LTD
++
+ OUI:FC0A81*
+  ID_OUI_FROM_DATABASE=Motorola Solutions Inc.
+ 
+@@ -68641,6 +69766,15 @@ OUI:FC10BD*
+ OUI:FC1186*
+  ID_OUI_FROM_DATABASE=Logic3 plc
+ 
++OUI:FC1349*
++ ID_OUI_FROM_DATABASE=Global Apps Corp.
++
++OUI:FC15B4*
++ ID_OUI_FROM_DATABASE=Hewlett Packard
++
++OUI:FC1607*
++ ID_OUI_FROM_DATABASE=Taian Technology(Wuxi) Co.,Ltd.
++
+ OUI:FC1794*
+  ID_OUI_FROM_DATABASE=InterCreative Co., Ltd
+ 
+@@ -68668,6 +69802,9 @@ OUI:FC229C*
+ OUI:FC253F*
+  ID_OUI_FROM_DATABASE=Apple
+ 
++OUI:FC27A2*
++ ID_OUI_FROM_DATABASE=TRANS ELECTRIC CO., LTD.
++
+ OUI:FC2A54*
+  ID_OUI_FROM_DATABASE=Connected Data, Inc.
+ 
+@@ -68761,6 +69898,9 @@ OUI:FC8E7E*
+ OUI:FC8FC4*
+  ID_OUI_FROM_DATABASE=Intelligent Technology Inc.
+ 
++OUI:FC923B*
++ ID_OUI_FROM_DATABASE=Nokia Corporation
++
+ OUI:FC946C*
+  ID_OUI_FROM_DATABASE=UBIVELOX
+ 
+@@ -68791,6 +69931,9 @@ OUI:FCAF6A*
+ OUI:FCB0C4*
+  ID_OUI_FROM_DATABASE=Shanghai DareGlobal Technologies Co., Ltd
+ 
++OUI:FCBBA1*
++ ID_OUI_FROM_DATABASE=Shenzhen Minicreate Technology Co.,Ltd
++
+ OUI:FCC23D*
+  ID_OUI_FROM_DATABASE=Atmel Corporation
+ 
+@@ -68851,6 +69994,9 @@ OUI:FCF528*
+ OUI:FCF8AE*
+  ID_OUI_FROM_DATABASE=Intel Corporate
+ 
++OUI:FCF8B7*
++ ID_OUI_FROM_DATABASE=TRONTEQ Electronic
++
+ OUI:FCFAF7*
+  ID_OUI_FROM_DATABASE=Shanghai Baud Data Communication Co.,Ltd.
+ 
+diff --git a/hwdb/20-pci-vendor-model.hwdb b/hwdb/20-pci-vendor-model.hwdb
+index 289f81c..6142dc8 100644
+--- a/hwdb/20-pci-vendor-model.hwdb
++++ b/hwdb/20-pci-vendor-model.hwdb
+@@ -917,6 +917,9 @@ pci:v00001000d0000005Bsv00001028sd00001F37*
+ pci:v00001000d0000005Bsv00001028sd00001F38*
+  ID_MODEL_FROM_DATABASE=PERC H710 Mini (for monolithics)
+ 
++pci:v00001000d0000005Bsv00008086sd00003510*
++ ID_MODEL_FROM_DATABASE=RMS25PB080 RAID Controller
++
+ pci:v00001000d0000005Bsv00008086sd00003513*
+  ID_MODEL_FROM_DATABASE=RMS25CB080 RAID Controller
+ 
+@@ -4203,7 +4206,7 @@ pci:v00001002d00006631*
+  ID_MODEL_FROM_DATABASE=Oland
+ 
+ pci:v00001002d00006640*
+- ID_MODEL_FROM_DATABASE=Saturn XT [Radeon HD 8950M]
++ ID_MODEL_FROM_DATABASE=Saturn XT [FirePro M6100]
+ 
+ pci:v00001002d00006641*
+  ID_MODEL_FROM_DATABASE=Saturn PRO [Radeon HD 8930M]
+@@ -4248,7 +4251,10 @@ pci:v00001002d00006660*
+  ID_MODEL_FROM_DATABASE=Sun XT [Radeon HD 8670A/8670M/8690M]
+ 
+ pci:v00001002d00006663*
+- ID_MODEL_FROM_DATABASE=Sun PRO [Radeon HD 8570M]
++ ID_MODEL_FROM_DATABASE=Sun PRO [Radeon HD 8570A/8570M]
++
++pci:v00001002d00006663sv00001025sd00000846*
++ ID_MODEL_FROM_DATABASE=Radeon HD 8570A
+ 
+ pci:v00001002d00006664*
+  ID_MODEL_FROM_DATABASE=Jet XT [Radeon R5 M200 Series]
+@@ -4904,12 +4910,18 @@ pci:v00001002d00006758sv0000174Bsd00007670*
+ pci:v00001002d00006758sv0000174Bsd0000E181*
+  ID_MODEL_FROM_DATABASE=Radeon HD 6670
+ 
++pci:v00001002d00006758sv00001787sd00002309*
++ ID_MODEL_FROM_DATABASE=Radeon HD 6670
++
+ pci:v00001002d00006759*
+- ID_MODEL_FROM_DATABASE=Turks PRO [Radeon HD 6570/7570]
++ ID_MODEL_FROM_DATABASE=Turks PRO [Radeon HD 6570/7570/8550]
+ 
+ pci:v00001002d00006759sv0000103Csd00003130*
+  ID_MODEL_FROM_DATABASE=Radeon HD 6570
+ 
++pci:v00001002d00006759sv00001043sd00000403*
++ ID_MODEL_FROM_DATABASE=Radeon HD 6570
++
+ pci:v00001002d00006759sv00001462sd00002500*
+  ID_MODEL_FROM_DATABASE=Radeon HD 6570
+ 
+@@ -4925,6 +4937,9 @@ pci:v00001002d00006759sv00001642sd00003A67*
+ pci:v00001002d00006759sv00001682sd00003280*
+  ID_MODEL_FROM_DATABASE=Radeon HD 7570
+ 
++pci:v00001002d00006759sv00001682sd00003530*
++ ID_MODEL_FROM_DATABASE=Radeon HD 8550
++
+ pci:v00001002d00006759sv0000174Bsd00007570*
+  ID_MODEL_FROM_DATABASE=Radeon HD 7570
+ 
+@@ -5585,6 +5600,9 @@ pci:v00001002d00006779sv0000103Csd00002128*
+ pci:v00001002d00006779sv0000103Csd00002AEE*
+  ID_MODEL_FROM_DATABASE=Radeon HD 7450A
+ 
++pci:v00001002d00006779sv00001462sd00002125*
++ ID_MODEL_FROM_DATABASE=Radeon HD 6450
++
+ pci:v00001002d00006779sv00001462sd00002346*
+  ID_MODEL_FROM_DATABASE=Radeon HD 7450
+ 
+@@ -5813,6 +5831,15 @@ pci:v00001002d000067A1*
+ pci:v00001002d000067A2*
+  ID_MODEL_FROM_DATABASE=Hawaii GL
+ 
++pci:v00001002d000067A8*
++ ID_MODEL_FROM_DATABASE=Hawaii
++
++pci:v00001002d000067A9*
++ ID_MODEL_FROM_DATABASE=Hawaii
++
++pci:v00001002d000067AA*
++ ID_MODEL_FROM_DATABASE=Hawaii
++
+ pci:v00001002d000067B0*
+  ID_MODEL_FROM_DATABASE=Hawaii XT [Radeon R9 290X]
+ 
+@@ -5907,7 +5934,7 @@ pci:v00001002d00006821sv00001002sd0000031E*
+  ID_MODEL_FROM_DATABASE=FirePro SX4000
+ 
+ pci:v00001002d00006822*
+- ID_MODEL_FROM_DATABASE=Venus PRO
++ ID_MODEL_FROM_DATABASE=Venus PRO [Radeon E8860]
+ 
+ pci:v00001002d00006823*
+  ID_MODEL_FROM_DATABASE=Venus PRO [Radeon HD 8850M]
+@@ -7463,6 +7490,9 @@ pci:v00001002d000068F9sv0000103Csd00002AAE*
+ pci:v00001002d000068F9sv0000103Csd00003580*
+  ID_MODEL_FROM_DATABASE=Radeon HD 5450
+ 
++pci:v00001002d000068F9sv00001043sd00000386*
++ ID_MODEL_FROM_DATABASE=Radeon HD 5450
++
+ pci:v00001002d000068F9sv00001043sd000003C2*
+  ID_MODEL_FROM_DATABASE=EAH5450 SILENT/DI/512MD2 (LP)
+ 
+@@ -8834,9 +8864,18 @@ pci:v00001002d00009901*
+ pci:v00001002d00009902*
+  ID_MODEL_FROM_DATABASE=Trinity HDMI Audio Controller
+ 
++pci:v00001002d00009902sv0000103Csd0000194E*
++ ID_MODEL_FROM_DATABASE=ProBook 455 G1 Notebook
++
+ pci:v00001002d00009903*
+  ID_MODEL_FROM_DATABASE=Trinity [Radeon HD 7640G]
+ 
++pci:v00001002d00009903sv0000103Csd0000194E*
++ ID_MODEL_FROM_DATABASE=ProBook 455 G1 Notebook
++
++pci:v00001002d00009903sv0000103Csd00001952*
++ ID_MODEL_FROM_DATABASE=ProBook 455 G1 Notebook
++
+ pci:v00001002d00009904*
+  ID_MODEL_FROM_DATABASE=Trinity [Radeon HD 7560D]
+ 
+@@ -10964,6 +11003,9 @@ pci:v00001022d00007801*
+ pci:v00001022d00007801sv0000103Csd0000168B*
+  ID_MODEL_FROM_DATABASE=ProBook 4535s Notebook
+ 
++pci:v00001022d00007801sv0000103Csd0000194E*
++ ID_MODEL_FROM_DATABASE=ProBook 455 G1 Notebook
++
+ pci:v00001022d00007802*
+  ID_MODEL_FROM_DATABASE=FCH SATA Controller [RAID mode]
+ 
+@@ -10982,27 +11024,45 @@ pci:v00001022d00007806*
+ pci:v00001022d00007807*
+  ID_MODEL_FROM_DATABASE=FCH USB OHCI Controller
+ 
++pci:v00001022d00007807sv0000103Csd0000194E*
++ ID_MODEL_FROM_DATABASE=ProBook 455 G1 Notebook
++
+ pci:v00001022d00007808*
+  ID_MODEL_FROM_DATABASE=FCH USB EHCI Controller
+ 
++pci:v00001022d00007808sv0000103Csd0000194E*
++ ID_MODEL_FROM_DATABASE=ProBook 455 G1 Notebook
++
+ pci:v00001022d00007809*
+  ID_MODEL_FROM_DATABASE=FCH USB OHCI Controller
+ 
++pci:v00001022d00007809sv0000103Csd0000194E*
++ ID_MODEL_FROM_DATABASE=ProBook 455 G1 Notebook
++
+ pci:v00001022d0000780B*
+  ID_MODEL_FROM_DATABASE=FCH SMBus Controller
+ 
++pci:v00001022d0000780Bsv0000103Csd0000194E*
++ ID_MODEL_FROM_DATABASE=ProBook 455 G1 Notebook
++
+ pci:v00001022d0000780C*
+  ID_MODEL_FROM_DATABASE=FCH IDE Controller
+ 
+ pci:v00001022d0000780D*
+  ID_MODEL_FROM_DATABASE=FCH Azalia Controller
+ 
++pci:v00001022d0000780Dsv0000103Csd0000194E*
++ ID_MODEL_FROM_DATABASE=ProBook 455 G1 Notebook
++
+ pci:v00001022d0000780Dsv00001043sd00008444*
+  ID_MODEL_FROM_DATABASE=F2A85-M Series
+ 
+ pci:v00001022d0000780E*
+  ID_MODEL_FROM_DATABASE=FCH LPC Bridge
+ 
++pci:v00001022d0000780Esv0000103Csd0000194E*
++ ID_MODEL_FROM_DATABASE=ProBook 455 G1 Notebook
++
+ pci:v00001022d0000780F*
+  ID_MODEL_FROM_DATABASE=FCH PCI Bridge
+ 
+@@ -11015,11 +11075,41 @@ pci:v00001022d00007813*
+ pci:v00001022d00007814*
+  ID_MODEL_FROM_DATABASE=FCH USB XHCI Controller
+ 
++pci:v00001022d00007814sv0000103Csd0000194E*
++ ID_MODEL_FROM_DATABASE=ProBook 455 G1 Notebook
++
+ pci:v00001022d00007900*
+- ID_MODEL_FROM_DATABASE=CZ SATA Controller [IDE mode]
++ ID_MODEL_FROM_DATABASE=FCH SATA Controller [IDE mode]
++
++pci:v00001022d00007901*
++ ID_MODEL_FROM_DATABASE=FCH SATA Controller [AHCI mode]
++
++pci:v00001022d00007902*
++ ID_MODEL_FROM_DATABASE=FCH SATA Controller [RAID mode]
++
++pci:v00001022d00007903*
++ ID_MODEL_FROM_DATABASE=FCH SATA Controller [RAID mode]
++
++pci:v00001022d00007904*
++ ID_MODEL_FROM_DATABASE=FCH SATA Controller [AHCI mode]
++
++pci:v00001022d00007906*
++ ID_MODEL_FROM_DATABASE=FCH SD Flash Controller
++
++pci:v00001022d00007908*
++ ID_MODEL_FROM_DATABASE=FCH USB EHCI Controller
+ 
+ pci:v00001022d0000790B*
+- ID_MODEL_FROM_DATABASE=CZ SMBus Controller
++ ID_MODEL_FROM_DATABASE=FCH SMBus Controller
++
++pci:v00001022d0000790E*
++ ID_MODEL_FROM_DATABASE=FCH LPC Bridge
++
++pci:v00001022d0000790F*
++ ID_MODEL_FROM_DATABASE=FCH PCI Bridge
++
++pci:v00001022d00007914*
++ ID_MODEL_FROM_DATABASE=FCH USB XHCI Controller
+ 
+ pci:v00001022d00009600*
+  ID_MODEL_FROM_DATABASE=RS780 Host Bridge
+@@ -23672,6 +23762,21 @@ pci:v000010DEd000005E6*
+ pci:v000010DEd000005E7*
+  ID_MODEL_FROM_DATABASE=GT200GL [Tesla C1060 / M1060]
+ 
++pci:v000010DEd000005E7sv000010DEsd00000595*
++ ID_MODEL_FROM_DATABASE=Tesla T10 Processor
++
++pci:v000010DEd000005E7sv000010DEsd0000068F*
++ ID_MODEL_FROM_DATABASE=Tesla T10 Processor
++
++pci:v000010DEd000005E7sv000010DEsd00000697*
++ ID_MODEL_FROM_DATABASE=Tesla M1060
++
++pci:v000010DEd000005E7sv000010DEsd00000714*
++ ID_MODEL_FROM_DATABASE=Tesla M1060
++
++pci:v000010DEd000005E7sv000010DEsd00000743*
++ ID_MODEL_FROM_DATABASE=Tesla M1060
++
+ pci:v000010DEd000005EA*
+  ID_MODEL_FROM_DATABASE=GT200 [GeForce GTX 260]
+ 
+@@ -23732,6 +23837,9 @@ pci:v000010DEd00000608*
+ pci:v000010DEd00000609*
+  ID_MODEL_FROM_DATABASE=G92M [GeForce 8800M GTS]
+ 
++pci:v000010DEd00000609sv0000106Bsd000000A7*
++ ID_MODEL_FROM_DATABASE=GeForce 8800 GS
++
+ pci:v000010DEd0000060A*
+  ID_MODEL_FROM_DATABASE=G92M [GeForce GTX 280M]
+ 
+@@ -23864,6 +23972,9 @@ pci:v000010DEd0000062D*
+ pci:v000010DEd0000062E*
+  ID_MODEL_FROM_DATABASE=G94 [GeForce 9600 GT]
+ 
++pci:v000010DEd0000062Esv0000106Bsd00000605*
++ ID_MODEL_FROM_DATABASE=GeForce GT 130
++
+ pci:v000010DEd0000062F*
+  ID_MODEL_FROM_DATABASE=G94 [GeForce 9800 S]
+ 
+@@ -23921,6 +24032,9 @@ pci:v000010DEd00000648*
+ pci:v000010DEd00000649*
+  ID_MODEL_FROM_DATABASE=G96M [GeForce 9600M GT]
+ 
++pci:v000010DEd00000649sv00001043sd0000202D*
++ ID_MODEL_FROM_DATABASE=GeForce GT 220M
++
+ pci:v000010DEd0000064A*
+  ID_MODEL_FROM_DATABASE=G96M [GeForce 9700M GT]
+ 
+@@ -23942,12 +24056,21 @@ pci:v000010DEd00000651*
+ pci:v000010DEd00000652*
+  ID_MODEL_FROM_DATABASE=G96M [GeForce GT 130M]
+ 
++pci:v000010DEd00000652sv0000152Dsd00000850*
++ ID_MODEL_FROM_DATABASE=GeForce GT 240M LE
++
+ pci:v000010DEd00000653*
+  ID_MODEL_FROM_DATABASE=G96M [GeForce GT 120M]
+ 
+ pci:v000010DEd00000654*
+  ID_MODEL_FROM_DATABASE=G96M [GeForce GT 220M]
+ 
++pci:v000010DEd00000654sv00001043sd000014A2*
++ ID_MODEL_FROM_DATABASE=GeForce GT 320M
++
++pci:v000010DEd00000654sv00001043sd000014D2*
++ ID_MODEL_FROM_DATABASE=GeForce GT 320M
++
+ pci:v000010DEd00000655*
+  ID_MODEL_FROM_DATABASE=G96 [GeForce GT 120]
+ 
+@@ -24098,6 +24221,9 @@ pci:v000010DEd000006E7*
+ pci:v000010DEd000006E8*
+  ID_MODEL_FROM_DATABASE=G98M [GeForce 9200M GS]
+ 
++pci:v000010DEd000006E8sv0000103Csd0000360B*
++ ID_MODEL_FROM_DATABASE=GeForce 9200M GE
++
+ pci:v000010DEd000006E9*
+  ID_MODEL_FROM_DATABASE=G98M [GeForce 9300M GS]
+ 
+@@ -24596,6 +24722,9 @@ pci:v000010DEd000007FEsv00001019sd0000297A*
+ pci:v000010DEd000007FEsv00001AFAsd00007150*
+  ID_MODEL_FROM_DATABASE=JW-IN7150-HD
+ 
++pci:v000010DEd00000840*
++ ID_MODEL_FROM_DATABASE=C77 [GeForce 8200M]
++
+ pci:v000010DEd00000844*
+  ID_MODEL_FROM_DATABASE=C77 [GeForce 9100M G]
+ 
+@@ -24665,6 +24794,9 @@ pci:v000010DEd00000865*
+ pci:v000010DEd00000866*
+  ID_MODEL_FROM_DATABASE=C79 [GeForce 9400M G]
+ 
++pci:v000010DEd00000866sv0000106Bsd000000B1*
++ ID_MODEL_FROM_DATABASE=GeForce 9400M
++
+ pci:v000010DEd00000867*
+  ID_MODEL_FROM_DATABASE=C79 [GeForce 9400]
+ 
+@@ -24746,6 +24878,9 @@ pci:v000010DEd0000087E*
+ pci:v000010DEd0000087F*
+  ID_MODEL_FROM_DATABASE=ION LE VGA
+ 
++pci:v000010DEd000008A0*
++ ID_MODEL_FROM_DATABASE=MCP89 [GeForce 320M]
++
+ pci:v000010DEd000008A2*
+  ID_MODEL_FROM_DATABASE=MCP89 [GeForce 320M]
+ 
+@@ -24755,6 +24890,9 @@ pci:v000010DEd000008A3*
+ pci:v000010DEd000008A4*
+  ID_MODEL_FROM_DATABASE=MCP89 [GeForce 320M]
+ 
++pci:v000010DEd000008A5*
++ ID_MODEL_FROM_DATABASE=MCP89 [GeForce 320M]
++
+ pci:v000010DEd00000A20*
+  ID_MODEL_FROM_DATABASE=GT216 [GeForce GT 220]
+ 
+@@ -24875,6 +25013,9 @@ pci:v000010DEd00000A73*
+ pci:v000010DEd00000A74*
+  ID_MODEL_FROM_DATABASE=GT218M [GeForce G210M]
+ 
++pci:v000010DEd00000A74sv00001B0Asd0000903A*
++ ID_MODEL_FROM_DATABASE=GeForce G210
++
+ pci:v000010DEd00000A75*
+  ID_MODEL_FROM_DATABASE=GT218M [GeForce 310M]
+ 
+@@ -24986,6 +25127,9 @@ pci:v000010DEd00000A7Asv00001462sd0000AC82*
+ pci:v000010DEd00000A7Asv00001462sd0000AE33*
+  ID_MODEL_FROM_DATABASE=GeForce 405
+ 
++pci:v000010DEd00000A7Asv00001642sd00003980*
++ ID_MODEL_FROM_DATABASE=GeForce 405
++
+ pci:v000010DEd00000A7Asv000017AAsd00003950*
+  ID_MODEL_FROM_DATABASE=GeForce 405M
+ 
+@@ -24995,6 +25139,9 @@ pci:v000010DEd00000A7Asv000017AAsd0000397D*
+ pci:v000010DEd00000A7Asv00001B0Asd00002091*
+  ID_MODEL_FROM_DATABASE=GeForce 315M
+ 
++pci:v000010DEd00000A7Asv00001B0Asd000090B4*
++ ID_MODEL_FROM_DATABASE=GeForce 405
++
+ pci:v000010DEd00000A7Asv00001BFDsd00000003*
+  ID_MODEL_FROM_DATABASE=GeForce 405
+ 
+@@ -25266,7 +25413,7 @@ pci:v000010DEd00000AD8*
+  ID_MODEL_FROM_DATABASE=MCP78S [GeForce 8200] SATA Controller (RAID mode)
+ 
+ pci:v000010DEd00000BE2*
+- ID_MODEL_FROM_DATABASE=High Definition Audio Controller
++ ID_MODEL_FROM_DATABASE=GT216 HDMI Audio Controller
+ 
+ pci:v000010DEd00000BE2sv00001043sd00008311*
+  ID_MODEL_FROM_DATABASE=ENGT220/DI/1GD3(LP)/V2
+@@ -25460,12 +25607,42 @@ pci:v000010DEd00000DE4*
+ pci:v000010DEd00000DE5*
+  ID_MODEL_FROM_DATABASE=GF108 [GeForce GT 530]
+ 
++pci:v000010DEd00000DE7*
++ ID_MODEL_FROM_DATABASE=GF108 [GeForce GT 610]
++
+ pci:v000010DEd00000DE8*
+  ID_MODEL_FROM_DATABASE=GF108M [GeForce GT 620M]
+ 
+ pci:v000010DEd00000DE9*
+  ID_MODEL_FROM_DATABASE=GF108M [GeForce GT 630M]
+ 
++pci:v000010DEd00000DE9sv00001025sd00000692*
++ ID_MODEL_FROM_DATABASE=GeForce GT 620M
++
++pci:v000010DEd00000DE9sv00001025sd00000725*
++ ID_MODEL_FROM_DATABASE=GeForce GT 620M
++
++pci:v000010DEd00000DE9sv00001025sd00000728*
++ ID_MODEL_FROM_DATABASE=GeForce GT 620M
++
++pci:v000010DEd00000DE9sv00001025sd0000072B*
++ ID_MODEL_FROM_DATABASE=GeForce GT 620M
++
++pci:v000010DEd00000DE9sv00001025sd0000072E*
++ ID_MODEL_FROM_DATABASE=GeForce GT 620M
++
++pci:v000010DEd00000DE9sv00001025sd00000753*
++ ID_MODEL_FROM_DATABASE=GeForce GT 620M
++
++pci:v000010DEd00000DE9sv00001025sd00000754*
++ ID_MODEL_FROM_DATABASE=GeForce GT 620M
++
++pci:v000010DEd00000DE9sv000017AAsd00003977*
++ ID_MODEL_FROM_DATABASE=GeForce GT 640M LE
++
++pci:v000010DEd00000DE9sv00001B0Asd00002210*
++ ID_MODEL_FROM_DATABASE=GeForce GT 635M
++
+ pci:v000010DEd00000DEA*
+  ID_MODEL_FROM_DATABASE=GF108M [GeForce 610M]
+ 
+@@ -25514,6 +25691,12 @@ pci:v000010DEd00000DF3*
+ pci:v000010DEd00000DF4*
+  ID_MODEL_FROM_DATABASE=GF108M [GeForce GT 540M]
+ 
++pci:v000010DEd00000DF4sv0000152Dsd00000952*
++ ID_MODEL_FROM_DATABASE=GeForce GT 630M
++
++pci:v000010DEd00000DF4sv0000152Dsd00000953*
++ ID_MODEL_FROM_DATABASE=GeForce GT 630M
++
+ pci:v000010DEd00000DF5*
+  ID_MODEL_FROM_DATABASE=GF108M [GeForce GT 525M]
+ 
+@@ -25610,6 +25793,9 @@ pci:v000010DEd00000FC6sv00001043sd00008428*
+ pci:v000010DEd00000FCD*
+  ID_MODEL_FROM_DATABASE=GK107M [GeForce GT 755M]
+ 
++pci:v000010DEd00000FCE*
++ ID_MODEL_FROM_DATABASE=GK107M [GeForce GT 640M LE]
++
+ pci:v000010DEd00000FD1*
+  ID_MODEL_FROM_DATABASE=GK107M [GeForce GT 650M]
+ 
+@@ -25667,6 +25853,9 @@ pci:v000010DEd00000FE0*
+ pci:v000010DEd00000FE1*
+  ID_MODEL_FROM_DATABASE=GK107M [GeForce GT 730M]
+ 
++pci:v000010DEd00000FE2*
++ ID_MODEL_FROM_DATABASE=GK107M [GeForce GT 745M]
++
+ pci:v000010DEd00000FE3*
+  ID_MODEL_FROM_DATABASE=GK107M [GeForce GT 745M]
+ 
+@@ -25688,6 +25877,12 @@ pci:v000010DEd00000FE7*
+ pci:v000010DEd00000FE7sv000010DEsd0000101E*
+  ID_MODEL_FROM_DATABASE=GRID K100
+ 
++pci:v000010DEd00000FE9*
++ ID_MODEL_FROM_DATABASE=GK107M [GeForce GT 750M Mac Edition]
++
++pci:v000010DEd00000FEA*
++ ID_MODEL_FROM_DATABASE=GK107M [GeForce GT 755M Mac Edition]
++
+ pci:v000010DEd00000FEF*
+  ID_MODEL_FROM_DATABASE=GK107GL [GRID K340]
+ 
+@@ -25739,6 +25934,15 @@ pci:v000010DEd00001003*
+ pci:v000010DEd00001004*
+  ID_MODEL_FROM_DATABASE=GK110 [GeForce GTX 780]
+ 
++pci:v000010DEd00001004sv00003842sd00000784*
++ ID_MODEL_FROM_DATABASE=GK110B [GeForce GTX 780 SC w/ ACX Cooler]
++
++pci:v000010DEd00001004sv00003842sd00001784*
++ ID_MODEL_FROM_DATABASE=GK110B [GeForce GTX 780 Dual FTW w/ ACX Cooler]
++
++pci:v000010DEd00001004sv00003842sd00001788*
++ ID_MODEL_FROM_DATABASE=GK110B [GeForce GTX 780 Dual Classified w/ ACX Cooler]
++
+ pci:v000010DEd00001005*
+  ID_MODEL_FROM_DATABASE=GK110 [GeForce GTX Titan]
+ 
+@@ -25763,6 +25967,9 @@ pci:v000010DEd00001005sv00003842sd00002794*
+ pci:v000010DEd00001005sv00003842sd00002795*
+  ID_MODEL_FROM_DATABASE=GeForce GTX Titan SC Hydro Copper Signature
+ 
++pci:v000010DEd0000100A*
++ ID_MODEL_FROM_DATABASE=GK110B [GeForce GTX 780 Ti]
++
+ pci:v000010DEd0000101F*
+  ID_MODEL_FROM_DATABASE=GK110GL [Tesla K20]
+ 
+@@ -25775,15 +25982,24 @@ pci:v000010DEd00001021*
+ pci:v000010DEd00001022*
+  ID_MODEL_FROM_DATABASE=GK110GL [Tesla K20c]
+ 
++pci:v000010DEd00001023*
++ ID_MODEL_FROM_DATABASE=GK110BGL [Tesla K40m]
++
+ pci:v000010DEd00001024*
+- ID_MODEL_FROM_DATABASE=GK110GL [Tesla K40c]
++ ID_MODEL_FROM_DATABASE=GK110BGL [Tesla K40c]
+ 
+ pci:v000010DEd00001026*
+  ID_MODEL_FROM_DATABASE=GK110GL [Tesla K20s]
+ 
++pci:v000010DEd00001027*
++ ID_MODEL_FROM_DATABASE=GK110BGL [Tesla K40st]
++
+ pci:v000010DEd00001028*
+  ID_MODEL_FROM_DATABASE=GK110GL [Tesla K20m]
+ 
++pci:v000010DEd00001029*
++ ID_MODEL_FROM_DATABASE=GK110BGL [Tesla K40s]
++
+ pci:v000010DEd0000103A*
+  ID_MODEL_FROM_DATABASE=GK110GL [Quadro K6000]
+ 
+@@ -25832,6 +26048,12 @@ pci:v000010DEd00001057*
+ pci:v000010DEd00001058*
+  ID_MODEL_FROM_DATABASE=GF119M [GeForce 610M]
+ 
++pci:v000010DEd00001058sv0000103Csd00002AED*
++ ID_MODEL_FROM_DATABASE=GeForce 610
++
++pci:v000010DEd00001058sv0000103Csd00002AF1*
++ ID_MODEL_FROM_DATABASE=GeForce 610
++
+ pci:v000010DEd00001058sv00001043sd000010AC*
+  ID_MODEL_FROM_DATABASE=GeForce GT 610M
+ 
+@@ -25841,6 +26063,9 @@ pci:v000010DEd00001058sv00001043sd000010BC*
+ pci:v000010DEd00001058sv00001043sd00001652*
+  ID_MODEL_FROM_DATABASE=GeForce GT 610M
+ 
++pci:v000010DEd00001059*
++ ID_MODEL_FROM_DATABASE=GF119M [GeForce 610M]
++
+ pci:v000010DEd0000105A*
+  ID_MODEL_FROM_DATABASE=GF119M [GeForce 610M]
+ 
+@@ -25904,6 +26129,12 @@ pci:v000010DEd00001091sv000010DEsd0000088E*
+ pci:v000010DEd00001091sv000010DEsd00000891*
+  ID_MODEL_FROM_DATABASE=Tesla X2090
+ 
++pci:v000010DEd00001091sv000010DEsd00000974*
++ ID_MODEL_FROM_DATABASE=Tesla X2090
++
++pci:v000010DEd00001091sv000010DEsd0000098D*
++ ID_MODEL_FROM_DATABASE=Tesla X2090
++
+ pci:v000010DEd00001094*
+  ID_MODEL_FROM_DATABASE=GF110GL [Tesla M2075]
+ 
+@@ -25941,7 +26172,7 @@ pci:v000010DEd000010D8*
+  ID_MODEL_FROM_DATABASE=GT218 [NVS 300]
+ 
+ pci:v000010DEd00001140*
+- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M / GT 620M/625M/630M/720M]
++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M]
+ 
+ pci:v000010DEd00001140sv00001025sd00000600*
+  ID_MODEL_FROM_DATABASE=GeForce GT 620M
+@@ -26081,6 +26312,9 @@ pci:v000010DEd00001140sv00001028sd00000554*
+ pci:v000010DEd00001140sv00001028sd00000557*
+  ID_MODEL_FROM_DATABASE=GeForce GT 620M
+ 
++pci:v000010DEd00001140sv00001028sd00000562*
++ ID_MODEL_FROM_DATABASE=GeForce GT 625M
++
+ pci:v000010DEd00001140sv00001028sd00000565*
+  ID_MODEL_FROM_DATABASE=GeForce GT 630M
+ 
+@@ -26111,6 +26345,12 @@ pci:v000010DEd00001140sv00001028sd000005B3*
+ pci:v000010DEd00001140sv00001028sd000005DA*
+  ID_MODEL_FROM_DATABASE=GeForce GT 630M
+ 
++pci:v000010DEd00001140sv00001028sd000005DE*
++ ID_MODEL_FROM_DATABASE=GeForce GT 720M
++
++pci:v000010DEd00001140sv00001028sd000005E0*
++ ID_MODEL_FROM_DATABASE=GeForce GT 720M
++
+ pci:v000010DEd00001140sv00001028sd000005E8*
+  ID_MODEL_FROM_DATABASE=GeForce GT 630M
+ 
+@@ -26156,6 +26396,9 @@ pci:v000010DEd00001140sv00001043sd0000126D*
+ pci:v000010DEd00001140sv00001043sd0000131D*
+  ID_MODEL_FROM_DATABASE=GeForce GT 720M
+ 
++pci:v000010DEd00001140sv00001043sd000013FD*
++ ID_MODEL_FROM_DATABASE=GeForce GT 720M
++
+ pci:v000010DEd00001140sv00001043sd000014C7*
+  ID_MODEL_FROM_DATABASE=GeForce GT 720M
+ 
+@@ -26189,6 +26432,9 @@ pci:v000010DEd00001140sv00001043sd0000224A*
+ pci:v000010DEd00001140sv00001043sd00008595*
+  ID_MODEL_FROM_DATABASE=GeForce GT 720M
+ 
++pci:v000010DEd00001140sv00001072sd0000152D*
++ ID_MODEL_FROM_DATABASE=GeForce GT 720M
++
+ pci:v000010DEd00001140sv000010CFsd000017F5*
+  ID_MODEL_FROM_DATABASE=GeForce GT 720M
+ 
+@@ -26291,6 +26537,9 @@ pci:v000010DEd00001140sv0000144Dsd0000C709*
+ pci:v000010DEd00001140sv0000144Dsd0000C711*
+  ID_MODEL_FROM_DATABASE=GeForce 710M
+ 
++pci:v000010DEd00001140sv0000144Dsd0000C736*
++ ID_MODEL_FROM_DATABASE=GeForce 710M
++
+ pci:v000010DEd00001140sv00001462sd000010B8*
+  ID_MODEL_FROM_DATABASE=GeForce GT 710M
+ 
+@@ -26303,6 +26552,9 @@ pci:v000010DEd00001140sv00001462sd0000AA33*
+ pci:v000010DEd00001140sv00001462sd0000AAA2*
+  ID_MODEL_FROM_DATABASE=GeForce GT 720M
+ 
++pci:v000010DEd00001140sv00001462sd0000AAA3*
++ ID_MODEL_FROM_DATABASE=GeForce 820M
++
+ pci:v000010DEd00001140sv00001462sd0000AE71*
+  ID_MODEL_FROM_DATABASE=GeForce GT 720M
+ 
+@@ -26315,15 +26567,30 @@ pci:v000010DEd00001140sv0000152Dsd00000982*
+ pci:v000010DEd00001140sv0000152Dsd00000983*
+  ID_MODEL_FROM_DATABASE=GeForce GT 630M
+ 
++pci:v000010DEd00001140sv0000152Dsd00001012*
++ ID_MODEL_FROM_DATABASE=GeForce 710M
++
+ pci:v000010DEd00001140sv0000152Dsd00001030*
+  ID_MODEL_FROM_DATABASE=GeForce GT 630M
+ 
+ pci:v000010DEd00001140sv0000152Dsd00001055*
+  ID_MODEL_FROM_DATABASE=GeForce 710M
+ 
++pci:v000010DEd00001140sv0000152Dsd00001067*
++ ID_MODEL_FROM_DATABASE=GeForce GT 720M
++
++pci:v000010DEd00001140sv0000152Dsd00001072*
++ ID_MODEL_FROM_DATABASE=GeForce GT 720M
++
+ pci:v000010DEd00001140sv000017AAsd00002200*
+  ID_MODEL_FROM_DATABASE=NVS 5200M
+ 
++pci:v000010DEd00001140sv000017AAsd00002213*
++ ID_MODEL_FROM_DATABASE=GeForce GT 720M
++
++pci:v000010DEd00001140sv000017AAsd00002220*
++ ID_MODEL_FROM_DATABASE=GeForce GT 720M
++
+ pci:v000010DEd00001140sv000017AAsd00003656*
+  ID_MODEL_FROM_DATABASE=GeForce GT 620M
+ 
+@@ -26369,6 +26636,9 @@ pci:v000010DEd00001140sv000017AAsd00003977*
+ pci:v000010DEd00001140sv000017AAsd00003983*
+  ID_MODEL_FROM_DATABASE=GeForce 610M
+ 
++pci:v000010DEd00001140sv000017AAsd00005001*
++ ID_MODEL_FROM_DATABASE=GeForce 610M
++
+ pci:v000010DEd00001140sv000017AAsd00005003*
+  ID_MODEL_FROM_DATABASE=GeForce GT 720M
+ 
+@@ -26414,18 +26684,33 @@ pci:v000010DEd00001140sv000017AAsd0000502E*
+ pci:v000010DEd00001140sv000017AAsd0000502F*
+  ID_MODEL_FROM_DATABASE=GeForce GT 720M
+ 
++pci:v000010DEd00001140sv000017AAsd0000503E*
++ ID_MODEL_FROM_DATABASE=GeForce 710M
++
++pci:v000010DEd00001140sv000017AAsd0000503F*
++ ID_MODEL_FROM_DATABASE=GeForce 820M
++
+ pci:v000010DEd00001140sv00001854sd00000177*
+  ID_MODEL_FROM_DATABASE=GeForce 710M
+ 
+ pci:v000010DEd00001140sv00001854sd00000180*
+  ID_MODEL_FROM_DATABASE=GeForce 710M
+ 
++pci:v000010DEd00001140sv00001854sd00000190*
++ ID_MODEL_FROM_DATABASE=GeForce GT 720M
++
++pci:v000010DEd00001140sv00001854sd00000192*
++ ID_MODEL_FROM_DATABASE=GeForce GT 720M
++
+ pci:v000010DEd00001140sv00001B0Asd000020DD*
+  ID_MODEL_FROM_DATABASE=GeForce GT 620M
+ 
+ pci:v000010DEd00001140sv00001B0Asd000020DF*
+  ID_MODEL_FROM_DATABASE=GeForce GT 620M
+ 
++pci:v000010DEd00001140sv00001B0Asd00002202*
++ ID_MODEL_FROM_DATABASE=GeForce GT 720M
++
+ pci:v000010DEd00001180*
+  ID_MODEL_FROM_DATABASE=GK104 [GeForce GTX 680]
+ 
+@@ -26484,10 +26769,10 @@ pci:v000010DEd00001193*
+  ID_MODEL_FROM_DATABASE=GK104 [GeForce GTX 760 Ti OEM]
+ 
+ pci:v000010DEd0000119D*
+- ID_MODEL_FROM_DATABASE=GK104M [GeForce GTX 775M]
++ ID_MODEL_FROM_DATABASE=GK104M [GeForce GTX 775M Mac Edition]
+ 
+ pci:v000010DEd0000119E*
+- ID_MODEL_FROM_DATABASE=GK104M [GeForce GTX 780M]
++ ID_MODEL_FROM_DATABASE=GK104M [GeForce GTX 780M Mac Edition]
+ 
+ pci:v000010DEd0000119F*
+  ID_MODEL_FROM_DATABASE=GK104M [GeForce GTX 780M]
+@@ -27210,32 +27495,23 @@ pci:v000010EC*
+  ID_VENDOR_FROM_DATABASE=Realtek Semiconductor Co., Ltd.
+ 
+ pci:v000010ECd00000139*
+- ID_MODEL_FROM_DATABASE=Zonet Zen3200
+-
+-pci:v000010ECd00000880*
+- ID_MODEL_FROM_DATABASE=Realtek 880 High Definition Audio
+-
+-pci:v000010ECd00000883*
+- ID_MODEL_FROM_DATABASE=Realtek 883 High Definition Audio
+-
+-pci:v000010ECd00000885*
+- ID_MODEL_FROM_DATABASE=Realtek 885 High Definition Audio
+-
+-pci:v000010ECd00000888*
+- ID_MODEL_FROM_DATABASE=Realtek 888 High Definition Audio
+-
+-pci:v000010ECd00000892*
+- ID_MODEL_FROM_DATABASE=Realtek 892 High Definition Audio
++ ID_MODEL_FROM_DATABASE=RTL-8139/8139C/8139C+ Ethernet Controller
+ 
+ pci:v000010ECd00005209*
+  ID_MODEL_FROM_DATABASE=RTS5209 PCI Express Card Reader
+ 
++pci:v000010ECd00005227*
++ ID_MODEL_FROM_DATABASE=RTS5227 PCI Express Card Reader
++
+ pci:v000010ECd00005229*
+  ID_MODEL_FROM_DATABASE=RTS5229 PCI Express Card Reader
+ 
+ pci:v000010ECd00005229sv00001025sd00000813*
+  ID_MODEL_FROM_DATABASE=Aspire R7-571
+ 
++pci:v000010ECd00005229sv0000103Csd0000194E*
++ ID_MODEL_FROM_DATABASE=ProBook 455 G1 Notebook
++
+ pci:v000010ECd00005288*
+  ID_MODEL_FROM_DATABASE=Barossa PCI Express Card Reader
+ 
+@@ -27449,6 +27725,9 @@ pci:v000010ECd00008168*
+ pci:v000010ECd00008168sv00001019sd00008168*
+  ID_MODEL_FROM_DATABASE=RTL8111/8168 PCI Express Gigabit Ethernet controller
+ 
++pci:v000010ECd00008168sv00001028sd00000283*
++ ID_MODEL_FROM_DATABASE=Vostro 220
++
+ pci:v000010ECd00008168sv00001028sd000004B2*
+  ID_MODEL_FROM_DATABASE=Vostro 3350
+ 
+@@ -27458,6 +27737,9 @@ pci:v000010ECd00008168sv00001028sd000004DA*
+ pci:v000010ECd00008168sv0000103Csd00001611*
+  ID_MODEL_FROM_DATABASE=Pavilion DM1Z-3000
+ 
++pci:v000010ECd00008168sv0000103Csd00001950*
++ ID_MODEL_FROM_DATABASE=ProBook 450/455
++
+ pci:v000010ECd00008168sv00001043sd000011F5*
+  ID_MODEL_FROM_DATABASE=A6J-Q008
+ 
+@@ -27617,6 +27899,9 @@ pci:v000010ECd00008199sv00001462sd00006894*
+ pci:v000010ECd00008723*
+  ID_MODEL_FROM_DATABASE=RTL8723AE PCIe Wireless Network Adapter
+ 
++pci:v000010ECd0000B723*
++ ID_MODEL_FROM_DATABASE=RTL8723BE PCIe Wireless Network Adapter
++
+ pci:v000010ED*
+  ID_VENDOR_FROM_DATABASE=Ascii Corporation
+ 
+@@ -31562,6 +31847,15 @@ pci:v00001137d00000042*
+ pci:v00001137d00000042sv00001137sd00000047*
+  ID_MODEL_FROM_DATABASE=VIC P81E PCIe Management Controller
+ 
++pci:v00001137d00000042sv00001137sd00000085*
++ ID_MODEL_FROM_DATABASE=VIC 1225 PCIe Management Controller
++
++pci:v00001137d00000042sv00001137sd000000CD*
++ ID_MODEL_FROM_DATABASE=VIC 1285 PCIe Management Controller
++
++pci:v00001137d00000042sv00001137sd000000CE*
++ ID_MODEL_FROM_DATABASE=VIC 1225T PCIe Management Controller
++
+ pci:v00001137d00000043*
+  ID_MODEL_FROM_DATABASE=VIC Ethernet NIC
+ 
+@@ -31580,6 +31874,12 @@ pci:v00001137d00000043sv00001137sd00000084*
+ pci:v00001137d00000043sv00001137sd00000085*
+  ID_MODEL_FROM_DATABASE=VIC 1225 PCIe Ethernet NIC
+ 
++pci:v00001137d00000043sv00001137sd000000CD*
++ ID_MODEL_FROM_DATABASE=VIC 1285 PCIe Ethernet NIC
++
++pci:v00001137d00000043sv00001137sd000000CE*
++ ID_MODEL_FROM_DATABASE=VIC 1225T PCIe Ethernet NIC
++
+ pci:v00001137d00000044*
+  ID_MODEL_FROM_DATABASE=VIC Ethernet NIC Dynamic
+ 
+@@ -31598,6 +31898,12 @@ pci:v00001137d00000044sv00001137sd00000084*
+ pci:v00001137d00000044sv00001137sd00000085*
+  ID_MODEL_FROM_DATABASE=VIC 1225 PCIe Ethernet NIC Dynamic
+ 
++pci:v00001137d00000044sv00001137sd000000CD*
++ ID_MODEL_FROM_DATABASE=VIC 1285 PCIe Ethernet NIC Dynamic
++
++pci:v00001137d00000044sv00001137sd000000CE*
++ ID_MODEL_FROM_DATABASE=VIC 1225T PCIe Ethernet NIC Dynamic
++
+ pci:v00001137d00000045*
+  ID_MODEL_FROM_DATABASE=VIC FCoE HBA
+ 
+@@ -31610,18 +31916,24 @@ pci:v00001137d00000045sv00001137sd00000048*
+ pci:v00001137d00000045sv00001137sd0000004F*
+  ID_MODEL_FROM_DATABASE=VIC 1280 Mezzanine FCoE HBA
+ 
++pci:v00001137d00000045sv00001137sd00000084*
++ ID_MODEL_FROM_DATABASE=VIC 1240 MLOM FCoE HBA
++
++pci:v00001137d00000045sv00001137sd00000085*
++ ID_MODEL_FROM_DATABASE=VIC 1225 PCIe FCoE HBA
++
++pci:v00001137d00000045sv00001137sd000000CD*
++ ID_MODEL_FROM_DATABASE=VIC 1285 PCIe FCoE HBA
++
++pci:v00001137d00000045sv00001137sd000000CE*
++ ID_MODEL_FROM_DATABASE=VIC 1225T PCIe FCoE HBA
++
+ pci:v00001137d0000004E*
+  ID_MODEL_FROM_DATABASE=VIC 82 PCIe Upstream Port
+ 
+ pci:v00001137d00000071*
+  ID_MODEL_FROM_DATABASE=VIC SR-IOV VF
+ 
+-pci:v00001137d00000084*
+- ID_MODEL_FROM_DATABASE=VIC 1240 MLOM FCoE HBA
+-
+-pci:v00001137d00000085*
+- ID_MODEL_FROM_DATABASE=VIC 1225 PCIe FCOE HBA
+-
+ pci:v00001137d000000CF*
+  ID_MODEL_FROM_DATABASE=VIC Userspace NIC
+ 
+@@ -35087,6 +35399,15 @@ pci:v000011F8d00007384*
+ pci:v000011F8d00008000*
+  ID_MODEL_FROM_DATABASE=PM8000  [SPC - SAS Protocol Controller]
+ 
++pci:v000011F8d00008032*
++ ID_MODEL_FROM_DATABASE=ATTO Celerity FC8xEN
++
++pci:v000011F8d00008032sv0000117Csd0000003B*
++ ID_MODEL_FROM_DATABASE=Celerity FC-82EN Fibre Channel Adapter
++
++pci:v000011F8d00008032sv0000117Csd0000003C*
++ ID_MODEL_FROM_DATABASE=Celerity FC-84EN Fibre Channel Adapter
++
+ pci:v000011F9*
+  ID_VENDOR_FROM_DATABASE=I-Cube Inc
+ 
+@@ -42029,6 +42350,24 @@ pci:v0000144C*
+ pci:v0000144D*
+  ID_VENDOR_FROM_DATABASE=Samsung Electronics Co Ltd
+ 
++pci:v0000144Dd00001600*
++ ID_MODEL_FROM_DATABASE=Apple PCIe SSD
++
++pci:v0000144Dd0000A800*
++ ID_MODEL_FROM_DATABASE=XP941 PCIe SSD
++
++pci:v0000144Dd0000A820*
++ ID_MODEL_FROM_DATABASE=NVMe SSD Controller 171X
++
++pci:v0000144Dd0000A820sv00001028sd00001F95*
++ ID_MODEL_FROM_DATABASE=Express Flash NVMe XS1715 SSD 400GB
++
++pci:v0000144Dd0000A820sv00001028sd00001F96*
++ ID_MODEL_FROM_DATABASE=Express Flash NVMe XS1715 SSD 800GB
++
++pci:v0000144Dd0000A820sv00001028sd00001F97*
++ ID_MODEL_FROM_DATABASE=Express Flash NVMe XS1715 SSD 1600GB
++
+ pci:v0000144E*
+  ID_VENDOR_FROM_DATABASE=OLITEC
+ 
+@@ -42527,6 +42866,9 @@ pci:v000014C2*
+ pci:v000014C3*
+  ID_VENDOR_FROM_DATABASE=MEDIATEK Corp.
+ 
++pci:v000014C3d00007630*
++ ID_MODEL_FROM_DATABASE=MT7630e 802.11bgn Wireless Network Adapter
++
+ pci:v000014C4*
+  ID_VENDOR_FROM_DATABASE=IWASAKI Information Systems Co Ltd
+ 
+@@ -46334,6 +46676,9 @@ pci:v000015ADd000007B0*
+ pci:v000015ADd000007C0*
+  ID_MODEL_FROM_DATABASE=PVSCSI SCSI Controller
+ 
++pci:v000015ADd000007E0*
++ ID_MODEL_FROM_DATABASE=SATA AHCI controller
++
+ pci:v000015ADd00000801*
+  ID_MODEL_FROM_DATABASE=Virtual Machine Interface
+ 
+@@ -46623,11 +46968,17 @@ pci:v000015BCd00000103*
+  ID_MODEL_FROM_DATABASE=QX4 PCI Express quad 4-gigabit Fibre Channel controller
+ 
+ pci:v000015BCd00000105*
+- ID_MODEL_FROM_DATABASE=Celerity FC-42XS Fibre Channel Adapter
++ ID_MODEL_FROM_DATABASE=Celerity FC-44XS/FC-42XS/FC-41XS/FC-44ES/FC-42ES/FC-41ES
+ 
+ pci:v000015BCd00000105sv0000117Csd00000022*
+  ID_MODEL_FROM_DATABASE=Celerity FC-42XS Fibre Channel Adapter
+ 
++pci:v000015BCd00000105sv0000117Csd00000025*
++ ID_MODEL_FROM_DATABASE=Celerity FC-44ES Fibre Channel Adapter
++
++pci:v000015BCd00000105sv0000117Csd00000026*
++ ID_MODEL_FROM_DATABASE=Celerity FC-42ES Fibre Channel Adapter
++
+ pci:v000015BCd00001100*
+  ID_MODEL_FROM_DATABASE=E8001-66442 PCI Express CIC
+ 
+@@ -48215,6 +48566,9 @@ pci:v0000170C*
+ pci:v00001719*
+  ID_VENDOR_FROM_DATABASE=EZChip Technologies
+ 
++pci:v00001719d00001000*
++ ID_MODEL_FROM_DATABASE=NPA Access Network Processor Family
++
+ pci:v00001725*
+  ID_VENDOR_FROM_DATABASE=Vitesse Semiconductor
+ 
+@@ -49040,9 +49394,15 @@ pci:v00001814d00003092*
+ pci:v00001814d00003290*
+  ID_MODEL_FROM_DATABASE=RT3290 Wireless 802.11n 1T/1R PCIe
+ 
++pci:v00001814d00003290sv0000103Csd000018EC*
++ ID_MODEL_FROM_DATABASE=Ralink RT3290LE 802.11bgn 1x1 Wi-Fi and Bluetooth 4.0 Combo Adapter
++
+ pci:v00001814d00003298*
+  ID_MODEL_FROM_DATABASE=RT3290 Bluetooth
+ 
++pci:v00001814d00003298sv0000103Csd000018EC*
++ ID_MODEL_FROM_DATABASE=Ralink RT3290LE 802.11bgn 1x1 Wi-Fi and Bluetooth 4.0 Combo Adapter
++
+ pci:v00001814d00003592*
+  ID_MODEL_FROM_DATABASE=RT3592 Wireless 802.11abgn 2T/2R PCIe
+ 
+@@ -51299,6 +51659,9 @@ pci:v00001B4Bd00009172*
+ pci:v00001B4Bd0000917A*
+  ID_MODEL_FROM_DATABASE=88SE9172 SATA III 6Gb/s RAID Controller
+ 
++pci:v00001B4Bd00009183*
++ ID_MODEL_FROM_DATABASE=88SS9183 PCIe SSD Controller
++
+ pci:v00001B4Bd00009192*
+  ID_MODEL_FROM_DATABASE=88SE9172 SATA III 6Gb/s RAID Controller
+ 
+@@ -51455,9 +51818,27 @@ pci:v00001C1Cd00000001*
+ pci:v00001C2C*
+  ID_VENDOR_FROM_DATABASE=Fiberblaze
+ 
++pci:v00001C2Cd0000000A*
++ ID_MODEL_FROM_DATABASE=Capture
++
++pci:v00001C2Cd0000000F*
++ ID_MODEL_FROM_DATABASE=SmartNIC
++
++pci:v00001C2Cd000000A0*
++ ID_MODEL_FROM_DATABASE=FBC4G Capture 4x1Gb
++
++pci:v00001C2Cd000000A1*
++ ID_MODEL_FROM_DATABASE=FBC4XG Capture 4x10Gb
++
++pci:v00001C2Cd000000A2*
++ ID_MODEL_FROM_DATABASE=FBC8XG Capture 8x10Gb
++
+ pci:v00001C32*
+  ID_VENDOR_FROM_DATABASE=Highland Technology, Inc.
+ 
++pci:v00001C33*
++ ID_VENDOR_FROM_DATABASE=Daktronics, Inc
++
+ pci:v00001C3B*
+  ID_VENDOR_FROM_DATABASE=Accensus, LLC
+ 
+@@ -51503,6 +51884,9 @@ pci:v00001CE4d00000001*
+ pci:v00001CE4d00000002*
+  ID_MODEL_FROM_DATABASE=ExaNIC X2
+ 
++pci:v00001CF7*
++ ID_VENDOR_FROM_DATABASE=Subspace Dynamics
++
+ pci:v00001D44*
+  ID_VENDOR_FROM_DATABASE=DPT
+ 
+@@ -54284,6 +54668,81 @@ pci:v00008086d000008B4sv00008086sd00008270*
+ pci:v00008086d000008CF*
+  ID_MODEL_FROM_DATABASE=Atom Processor Z2760 Integrated Graphics Controller
+ 
++pci:v00008086d0000095A*
++ ID_MODEL_FROM_DATABASE=Wireless 7265
++
++pci:v00008086d0000095Asv00008086sd00001010*
++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
++
++pci:v00008086d0000095Asv00008086sd00005000*
++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-N 7265
++
++pci:v00008086d0000095Asv00008086sd00005002*
++ ID_MODEL_FROM_DATABASE=Wireless-N 7265
++
++pci:v00008086d0000095Asv00008086sd00005010*
++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
++
++pci:v00008086d0000095Asv00008086sd00005020*
++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-N 7265
++
++pci:v00008086d0000095Asv00008086sd0000502A*
++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-N 7265
++
++pci:v00008086d0000095Asv00008086sd00005090*
++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
++
++pci:v00008086d0000095Asv00008086sd00005110*
++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
++
++pci:v00008086d0000095Asv00008086sd00005400*
++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
++
++pci:v00008086d0000095Asv00008086sd00005410*
++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
++
++pci:v00008086d0000095Asv00008086sd00005420*
++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-N 7265
++
++pci:v00008086d0000095Asv00008086sd00005490*
++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
++
++pci:v00008086d0000095Asv00008086sd00009010*
++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
++
++pci:v00008086d0000095Asv00008086sd00009210*
++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
++
++pci:v00008086d0000095Asv00008086sd00009410*
++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
++
++pci:v00008086d0000095B*
++ ID_MODEL_FROM_DATABASE=Wireless 7265
++
++pci:v00008086d0000095Bsv00008086sd0000500A*
++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
++
++pci:v00008086d0000095Bsv00008086sd00005012*
++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
++
++pci:v00008086d0000095Bsv00008086sd00005200*
++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-N 7265
++
++pci:v00008086d0000095Bsv00008086sd00005202*
++ ID_MODEL_FROM_DATABASE=Wireless-N 7265
++
++pci:v00008086d0000095Bsv00008086sd00005210*
++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
++
++pci:v00008086d0000095Bsv00008086sd00005290*
++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
++
++pci:v00008086d0000095Bsv00008086sd00005302*
++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
++
++pci:v00008086d0000095Bsv00008086sd00005310*
++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
++
+ pci:v00008086d00000960*
+  ID_MODEL_FROM_DATABASE=80960RP (i960RP) Microprocessor/Bridge
+ 
+@@ -54299,6 +54758,9 @@ pci:v00008086d00000A04*
+ pci:v00008086d00000A06*
+  ID_MODEL_FROM_DATABASE=Haswell-ULT Integrated Graphics Controller
+ 
++pci:v00008086d00000A0C*
++ ID_MODEL_FROM_DATABASE=Haswell-ULT HD Audio Controller
++
+ pci:v00008086d00000A16*
+  ID_MODEL_FROM_DATABASE=Haswell-ULT Integrated Graphics Controller
+ 
+@@ -57332,6 +57794,12 @@ pci:v00008086d00001521sv00001028sd00001F62*
+ pci:v00008086d00001521sv0000103Csd000017D1*
+  ID_MODEL_FROM_DATABASE=Ethernet 1Gb 4-port 366FLR Adapter
+ 
++pci:v00008086d00001521sv0000103Csd00002003*
++ ID_MODEL_FROM_DATABASE=Ethernet 1Gb 2-port 367i Adapter
++
++pci:v00008086d00001521sv0000103Csd00002226*
++ ID_MODEL_FROM_DATABASE=Ethernet 1Gb 1-port 364i Adapter
++
+ pci:v00008086d00001521sv0000103Csd0000337F*
+  ID_MODEL_FROM_DATABASE=Ethernet 1Gb 2-port 361i Adapter
+ 
+@@ -57407,6 +57875,9 @@ pci:v00008086d00001523sv0000103Csd00001784*
+ pci:v00008086d00001523sv0000103Csd000018D1*
+  ID_MODEL_FROM_DATABASE=Ethernet 1Gb 2-port 361FLB Adapter
+ 
++pci:v00008086d00001523sv0000103Csd00001989*
++ ID_MODEL_FROM_DATABASE=Ethernet 1Gb 2-port 363i Adapter
++
+ pci:v00008086d00001523sv0000103Csd0000339F*
+  ID_MODEL_FROM_DATABASE=Ethernet 1Gb 4-port 366M Adapter
+ 
+@@ -57584,6 +58055,9 @@ pci:v00008086d00001560*
+ pci:v00008086d0000157B*
+  ID_MODEL_FROM_DATABASE=I210 Gigabit Network Connection
+ 
++pci:v00008086d0000157C*
++ ID_MODEL_FROM_DATABASE=I210 Gigabit Backplane Connection
++
+ pci:v00008086d000015A0*
+  ID_MODEL_FROM_DATABASE=Ethernet Connection (2) I218-LM
+ 
+@@ -58448,6 +58922,9 @@ pci:v00008086d00001E2Dsv00001849sd00001E2D*
+ pci:v00008086d00001E31*
+  ID_MODEL_FROM_DATABASE=7 Series/C210 Series Chipset Family USB xHCI Host Controller
+ 
++pci:v00008086d00001E31sv0000103Csd000017AB*
++ ID_MODEL_FROM_DATABASE=ProBook 6570b
++
+ pci:v00008086d00001E31sv00001043sd00001477*
+  ID_MODEL_FROM_DATABASE=N56VZ
+ 
+@@ -58748,7 +59225,7 @@ pci:v00008086d00001F3F*
+ pci:v00008086d00001F40*
+  ID_MODEL_FROM_DATABASE=Ethernet Connection I354 1.0 GbE Backplane
+ 
+-pci:v00008086d00001F40sv00001028sd000010F1*
++pci:v00008086d00001F40sv00001028sd000005F1*
+  ID_MODEL_FROM_DATABASE=Ethernet Connection I354 1.0 GbE Backplane
+ 
+ pci:v00008086d00001F41*
+@@ -65144,6 +65621,9 @@ pci:v00008086d00002E17*
+ pci:v00008086d00002E20*
+  ID_MODEL_FROM_DATABASE=4 Series Chipset DRAM Controller
+ 
++pci:v00008086d00002E20sv00001028sd00000283*
++ ID_MODEL_FROM_DATABASE=Dell Vostro 220
++
+ pci:v00008086d00002E20sv00001043sd000082D3*
+  ID_MODEL_FROM_DATABASE=P5Q Deluxe Motherboard
+ 
+@@ -67689,7 +68169,7 @@ pci:v00008086d00004227*
+  ID_MODEL_FROM_DATABASE=PRO/Wireless 3945ABG [Golan] Network Connection
+ 
+ pci:v00008086d00004227sv00008086sd00001011*
+- ID_MODEL_FROM_DATABASE=ThinkPad R60e/X60s
++ ID_MODEL_FROM_DATABASE=ThinkPad T60/R60e/X60s
+ 
+ pci:v00008086d00004227sv00008086sd00001014*
+  ID_MODEL_FROM_DATABASE=PRO/Wireless 3945BG Network Connection
+@@ -69155,6 +69635,111 @@ pci:v00008086d00009C65*
+ pci:v00008086d00009C66*
+  ID_MODEL_FROM_DATABASE=Lynx Point-LP SPI Controller #1
+ 
++pci:v00008086d00009C83*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP SATA Controller [AHCI Mode]
++
++pci:v00008086d00009C85*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP SATA Controller [RAID Mode]
++
++pci:v00008086d00009C87*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP SATA Controller [RAID Mode]
++
++pci:v00008086d00009C8F*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP SATA Controller [RAID Mode]
++
++pci:v00008086d00009C90*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP PCI Express Root Port #1
++
++pci:v00008086d00009C92*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP PCI Express Root Port #2
++
++pci:v00008086d00009C94*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP PCI Express Root Port #3
++
++pci:v00008086d00009C96*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP PCI Express Root Port #4
++
++pci:v00008086d00009C98*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP PCI Express Root Port #5
++
++pci:v00008086d00009C9A*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP PCI Express Root Port #6
++
++pci:v00008086d00009CA0*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP High Definition Audio Controller
++
++pci:v00008086d00009CA2*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP SMBus Controller
++
++pci:v00008086d00009CA4*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP Thermal Management Controller
++
++pci:v00008086d00009CA6*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP USB EHCI Controller
++
++pci:v00008086d00009CB1*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP USB xHCI Controller
++
++pci:v00008086d00009CB5*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP Secure Digital IO Controller
++
++pci:v00008086d00009CB6*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP Smart Sound Technology Controller
++
++pci:v00008086d00009CBA*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP MEI Controller #1
++
++pci:v00008086d00009CBB*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP MEI Controller #2
++
++pci:v00008086d00009CBC*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP IDE-r Controller
++
++pci:v00008086d00009CBD*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP KT Controller
++
++pci:v00008086d00009CC1*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP LPC Controller
++
++pci:v00008086d00009CC2*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP LPC Controller
++
++pci:v00008086d00009CC3*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP LPC Controller
++
++pci:v00008086d00009CC5*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP LPC Controller
++
++pci:v00008086d00009CC6*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP LPC Controller
++
++pci:v00008086d00009CC7*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP LPC Controller
++
++pci:v00008086d00009CC9*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP LPC Controller
++
++pci:v00008086d00009CE0*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP Serial IO DMA Controller
++
++pci:v00008086d00009CE1*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP Serial IO I2C Controller #0
++
++pci:v00008086d00009CE2*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP Serial IO I2C Controller #1
++
++pci:v00008086d00009CE3*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP Serial IO UART Controller #0
++
++pci:v00008086d00009CE4*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP Serial IO UART Controller #1
++
++pci:v00008086d00009CE5*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP Serial IO GSPI Controller #0
++
++pci:v00008086d00009CE6*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP Serial IO GSPI Controller #1
++
+ pci:v00008086d0000A000*
+  ID_MODEL_FROM_DATABASE=Atom Processor D4xx/D5xx/N4xx/N5xx DMI Bridge
+ 
+@@ -70691,6 +71276,24 @@ pci:v0000BDBDd0000A11E*
+ pci:v0000BDBDd0000A121*
+  ID_MODEL_FROM_DATABASE=DeckLink HD Extreme 3D/3D+
+ 
++pci:v0000BDBDd0000A124*
++ ID_MODEL_FROM_DATABASE=Intensity Extreme
++
++pci:v0000BDBDd0000A126*
++ ID_MODEL_FROM_DATABASE=Intensity Shuttle
++
++pci:v0000BDBDd0000A127*
++ ID_MODEL_FROM_DATABASE=UltraStudio Express
++
++pci:v0000BDBDd0000A129*
++ ID_MODEL_FROM_DATABASE=UltraStudio Mini Monitor
++
++pci:v0000BDBDd0000A12A*
++ ID_MODEL_FROM_DATABASE=UltraStudio Mini Recorder
++
++pci:v0000BDBDd0000A12D*
++ ID_MODEL_FROM_DATABASE=UltraStudio 4K
++
+ pci:v0000BDBDd0000A12E*
+  ID_MODEL_FROM_DATABASE=DeckLink 4K Extreme
+ 
+@@ -70700,6 +71303,9 @@ pci:v0000BDBDd0000A12F*
+ pci:v0000BDBDd0000A130*
+  ID_MODEL_FROM_DATABASE=DeckLink Mini Recorder
+ 
++pci:v0000BDBDd0000A132*
++ ID_MODEL_FROM_DATABASE=UltraStudio 4K
++
+ pci:v0000C001*
+  ID_VENDOR_FROM_DATABASE=TSI Telsys
+ 
+@@ -70860,7 +71466,7 @@ pci:v0000DCBA*
+  ID_VENDOR_FROM_DATABASE=Dynamic Engineering
+ 
+ pci:v0000DCBAd00000046*
+- ID_MODEL_FROM_DATABASE=PCIeAlteraCycloneIV
++ ID_MODEL_FROM_DATABASE=PCIe Altera Cyclone IV
+ 
+ pci:v0000DCBAd00000047*
+  ID_MODEL_FROM_DATABASE=VPX-RCB
+@@ -70868,6 +71474,15 @@ pci:v0000DCBAd00000047*
+ pci:v0000DCBAd00000048*
+  ID_MODEL_FROM_DATABASE=PMC-Biserial-III-BAE9
+ 
++pci:v0000DCBAd0000004E*
++ ID_MODEL_FROM_DATABASE=PC104p-Biserial-III-NVY5
++
++pci:v0000DCBAd0000004F*
++ ID_MODEL_FROM_DATABASE=PC104p-Biserial-III-NVY6
++
++pci:v0000DCBAd00000052*
++ ID_MODEL_FROM_DATABASE=PCIeBiSerialDb37 BA22 LVDS IO
++
+ pci:v0000DD01*
+  ID_VENDOR_FROM_DATABASE=Digital Devices GmbH
+ 
+diff --git a/hwdb/20-usb-vendor-model.hwdb b/hwdb/20-usb-vendor-model.hwdb
+index da8385e..6663820 100644
+--- a/hwdb/20-usb-vendor-model.hwdb
++++ b/hwdb/20-usb-vendor-model.hwdb
+@@ -53,6 +53,12 @@ usb:v017C*
+ usb:v017Cp145F*
+  ID_MODEL_FROM_DATABASE=Trust Deskset
+ 
++usb:v0200*
++ ID_VENDOR_FROM_DATABASE=TP-Link
++
++usb:v0200p0201*
++ ID_MODEL_FROM_DATABASE=MA180 UMTS Modem
++
+ usb:v0204*
+  ID_VENDOR_FROM_DATABASE=Chipsbank Microelectronics Co., Ltd
+ 
+@@ -515,6 +521,12 @@ usb:v03F0p0417*
+ usb:v03F0p0423*
+  ID_MODEL_FROM_DATABASE=HS-COMBO Cardreader
+ 
++usb:v03F0p042A*
++ ID_MODEL_FROM_DATABASE=LaserJet M1132 MFP
++
++usb:v03F0p0441*
++ ID_MODEL_FROM_DATABASE=HP Prime Calculator
++
+ usb:v03F0p0504*
+  ID_MODEL_FROM_DATABASE=DeskJet 885c
+ 
+@@ -957,7 +969,7 @@ usb:v03F0p2317*
+  ID_MODEL_FROM_DATABASE=LaserJet 4350
+ 
+ usb:v03F0p231D*
+- ID_MODEL_FROM_DATABASE=4 GB Flash Drive
++ ID_MODEL_FROM_DATABASE=Broadcom 2070 Bluetooth Combo
+ 
+ usb:v03F0p2402*
+  ID_MODEL_FROM_DATABASE=PhotoSmart 7700 series
+@@ -1214,6 +1226,9 @@ usb:v03F0p3B17*
+ usb:v03F0p3C02*
+  ID_MODEL_FROM_DATABASE=PhotoSmart 7350
+ 
++usb:v03F0p3C05*
++ ID_MODEL_FROM_DATABASE=Scanjet Professional 1000 Mobile Scanner
++
+ usb:v03F0p3C11*
+  ID_MODEL_FROM_DATABASE=PSC 1358
+ 
+@@ -2018,6 +2033,9 @@ usb:v0403p8040*
+ usb:v0403p8070*
+  ID_MODEL_FROM_DATABASE=7 Port Hub
+ 
++usb:v0403p8140*
++ ID_MODEL_FROM_DATABASE=Vehicle Explorer Interface
++
+ usb:v0403p8210*
+  ID_MODEL_FROM_DATABASE=MGTimer - MGCC (Vic) Timing System
+ 
+@@ -2036,6 +2054,12 @@ usb:v0403p8A28*
+ usb:v0403p8A98*
+  ID_MODEL_FROM_DATABASE=TIAO Multi-Protocol Adapter
+ 
++usb:v0403p9133*
++ ID_MODEL_FROM_DATABASE=CallerID
++
++usb:v0403p9135*
++ ID_MODEL_FROM_DATABASE=Rotary Pub alarm
++
+ usb:v0403p9E90*
+  ID_MODEL_FROM_DATABASE=Marvell OpenRD Base/Client
+ 
+@@ -2978,6 +3002,9 @@ usb:v040Ap6005*
+ usb:v040B*
+  ID_VENDOR_FROM_DATABASE=Weltrend Semiconductor
+ 
++usb:v040Bp0A68*
++ ID_MODEL_FROM_DATABASE=Func MS-3 gaming mouse [WT6573F MCU]
++
+ usb:v040Bp6510*
+  ID_MODEL_FROM_DATABASE=Weltrend Bar Code Reader
+ 
+@@ -3662,6 +3689,9 @@ usb:v041Ep4057*
+ usb:v041Ep4058*
+  ID_MODEL_FROM_DATABASE=Live! Cam Optia AF
+ 
++usb:v041Ep405F*
++ ID_MODEL_FROM_DATABASE=WebCam Vista (VF0330)
++
+ usb:v041Ep4061*
+  ID_MODEL_FROM_DATABASE=Live! Cam Notebook Pro [VF0400]
+ 
+@@ -5255,6 +5285,9 @@ usb:v0457p0162*
+ usb:v0457p0163*
+  ID_MODEL_FROM_DATABASE=802.11 Wireless LAN Adapter
+ 
++usb:v0457p0817*
++ ID_MODEL_FROM_DATABASE=SiS-184-ASUS-4352.17 touch panel
++
+ usb:v0457p5401*
+  ID_MODEL_FROM_DATABASE=Wireless Adapter RO80211GS-USB
+ 
+@@ -5531,6 +5564,9 @@ usb:v0458p7079*
+ usb:v0458p707F*
+  ID_MODEL_FROM_DATABASE=TVGo DVB-T03 [RTL2832]
+ 
++usb:v0458p7088*
++ ID_MODEL_FROM_DATABASE=WideCam 1050
++
+ usb:v0459*
+  ID_VENDOR_FROM_DATABASE=Adobe Systems, Inc.
+ 
+@@ -6401,6 +6437,9 @@ usb:v045Ep0772*
+ usb:v045Ep0779*
+  ID_MODEL_FROM_DATABASE=LifeCam HD-3000
+ 
++usb:v045Ep0797*
++ ID_MODEL_FROM_DATABASE=Optical Mouse 200
++
+ usb:v045Ep930A*
+  ID_MODEL_FROM_DATABASE=ISOUSB.SYS Intel 82930 Isochronous IO Test Board
+ 
+@@ -6624,7 +6663,7 @@ usb:v046A*
+  ID_VENDOR_FROM_DATABASE=Cherry GmbH
+ 
+ usb:v046Ap0001*
+- ID_MODEL_FROM_DATABASE=My3000 Keyboard
++ ID_MODEL_FROM_DATABASE=Keyboard
+ 
+ usb:v046Ap0003*
+  ID_MODEL_FROM_DATABASE=My3000 Hub
+@@ -8504,6 +8543,9 @@ usb:v0480pA006*
+ usb:v0480pA007*
+  ID_MODEL_FROM_DATABASE=External Disk USB 3.0
+ 
++usb:v0480pD010*
++ ID_MODEL_FROM_DATABASE=External Disk 3TB
++
+ usb:v0481*
+  ID_VENDOR_FROM_DATABASE=Zenith Data Systems
+ 
+@@ -8597,6 +8639,9 @@ usb:v0483p5001*
+ usb:v0483p5710*
+  ID_MODEL_FROM_DATABASE=Joystick in FS Mode
+ 
++usb:v0483p5720*
++ ID_MODEL_FROM_DATABASE=STM microSD Flash Device
++
+ usb:v0483p5721*
+  ID_MODEL_FROM_DATABASE=Hantek DDS-3X25 Arbitrary Waveform Generator
+ 
+@@ -8693,6 +8738,12 @@ usb:v048Dp9009*
+ usb:v048Dp9135*
+  ID_MODEL_FROM_DATABASE=Zolid Mini DVB-T Stick
+ 
++usb:v048Dp9503*
++ ID_MODEL_FROM_DATABASE=ITE it9503 feature-limited DVB-T transmission chip [ccHDtv]
++
++usb:v048Dp9507*
++ ID_MODEL_FROM_DATABASE=ITE it9507 full featured DVB-T transmission chip [ccHDtv]
++
+ usb:v048F*
+  ID_VENDOR_FROM_DATABASE=Eicon Tech.
+ 
+@@ -10937,9 +10988,21 @@ usb:v04A9p3260*
+ usb:v04A9p3264*
+  ID_MODEL_FROM_DATABASE=PowerShot A1400
+ 
++usb:v04A9p3265*
++ ID_MODEL_FROM_DATABASE=Powershot ELPH 130 IS / IXUS 140
++
+ usb:v04A9p3268*
+  ID_MODEL_FROM_DATABASE=PowerShot ELPH 330 HS / IXUS 255 HS
+ 
++usb:v04A9p3271*
++ ID_MODEL_FROM_DATABASE=PowerShot A2500
++
++usb:v04A9p3276*
++ ID_MODEL_FROM_DATABASE=PowerShot SX170 IS
++
++usb:v04A9p327D*
++ ID_MODEL_FROM_DATABASE=Powershot ELPH 115 IS / IXUS 132
++
+ usb:v04AA*
+  ID_VENDOR_FROM_DATABASE=DaeWoo Telecom, Ltd
+ 
+@@ -11162,6 +11225,9 @@ usb:v04B0p0425*
+ usb:v04B0p0428*
+  ID_MODEL_FROM_DATABASE=D7000
+ 
++usb:v04B0p0429*
++ ID_MODEL_FROM_DATABASE=D5100
++
+ usb:v04B0p042A*
+  ID_MODEL_FROM_DATABASE=D800 (ptp)
+ 
+@@ -12806,6 +12872,9 @@ usb:v04D9p1503*
+ usb:v04D9p1603*
+  ID_MODEL_FROM_DATABASE=Keyboard
+ 
++usb:v04D9p1702*
++ ID_MODEL_FROM_DATABASE=Keyboard LKS02
++
+ usb:v04D9p2013*
+  ID_MODEL_FROM_DATABASE=Keyboard [Das Keyboard]
+ 
+@@ -12821,6 +12890,9 @@ usb:v04D9p2519*
+ usb:v04D9p2832*
+  ID_MODEL_FROM_DATABASE=1channel Telephone line recorder
+ 
++usb:v04D9p2834*
++ ID_MODEL_FROM_DATABASE=HT82A834R Audio MCU
++
+ usb:v04D9pA055*
+  ID_MODEL_FROM_DATABASE=Keyboard
+ 
+@@ -14252,6 +14324,9 @@ usb:v04F2pB354*
+ usb:v04F3*
+  ID_VENDOR_FROM_DATABASE=Elan Microelectronics Corp.
+ 
++usb:v04F3p000A*
++ ID_MODEL_FROM_DATABASE=Touchscreen
++
+ usb:v04F3p0103*
+  ID_MODEL_FROM_DATABASE=ActiveJet K-2024 Multimedia Keyboard
+ 
+@@ -15302,6 +15377,12 @@ usb:v050Dp1102*
+ usb:v050Dp1103*
+  ID_MODEL_FROM_DATABASE=F9L1103 N750 DB 802.11abgn 2x3:3 [Ralink RT3573]
+ 
++usb:v050Dp1106*
++ ID_MODEL_FROM_DATABASE=F9L1106v1 802.11a/b/g/n/ac Wireless Adapter [Broadcom BCM43526]
++
++usb:v050Dp1109*
++ ID_MODEL_FROM_DATABASE=F9L1109v1 802.11a/b/g/n/ac Wireless Adapter [Realtek RTL8812AU]
++
+ usb:v050Dp11F2*
+  ID_MODEL_FROM_DATABASE=ISY Wireless Micro Adapter IWL 2000 [RTL8188CUS]
+ 
+@@ -16514,6 +16595,9 @@ usb:v054Cp0485*
+ usb:v054Cp04CB*
+  ID_MODEL_FROM_DATABASE=WALKMAN NWZ-E354
+ 
++usb:v054Cp06BB*
++ ID_MODEL_FROM_DATABASE=WALKMAN NWZ-F805
++
+ usb:v054Cp1000*
+  ID_MODEL_FROM_DATABASE=Wireless Buzz! Receiver
+ 
+@@ -47582,6 +47666,15 @@ usb:v2101*
+ usb:v2101p0201*
+  ID_MODEL_FROM_DATABASE=SIIG 4-to-2 Printer Switch
+ 
++usb:v2149*
++ ID_VENDOR_FROM_DATABASE=Advanced Silicon S.A.
++
++usb:v2149p211B*
++ ID_MODEL_FROM_DATABASE=Touchscreen Controller
++
++usb:v2149p2703*
++ ID_MODEL_FROM_DATABASE=TS58xxA/TC56xxA [CoolTouch]
++
+ usb:v2162*
+  ID_VENDOR_FROM_DATABASE=Creative (?)
+ 
+@@ -47636,6 +47729,21 @@ usb:v2227*
+ usb:v2227p3105*
+  ID_MODEL_FROM_DATABASE=SKYDATA SKD-U100
+ 
++usb:v2232*
++ ID_VENDOR_FROM_DATABASE=Silicon Motion
++
++usb:v2232p1005*
++ ID_MODEL_FROM_DATABASE=WebCam SCB-0385N
++
++usb:v2232p1028*
++ ID_MODEL_FROM_DATABASE=WebCam SC-03FFL11939N
++
++usb:v2232p1029*
++ ID_MODEL_FROM_DATABASE=WebCam SC-13HDL11939N
++
++usb:v2232p1037*
++ ID_MODEL_FROM_DATABASE=WebCam SC-03FFM12339N
++
+ usb:v2233*
+  ID_VENDOR_FROM_DATABASE=RadioShack Corporation
+ 
diff --git a/0192-delta-replace-readdir_r-with-readdir.patch b/0192-delta-replace-readdir_r-with-readdir.patch
new file mode 100644
index 0000000..0ebc7d7
--- /dev/null
+++ b/0192-delta-replace-readdir_r-with-readdir.patch
@@ -0,0 +1,31 @@
+From 3c0667a5ed5bc7043499f176d68f77dea6bae944 Mon Sep 17 00:00:00 2001
+From: Florian Weimer <fweimer at redhat.com>
+Date: Thu, 19 Dec 2013 11:16:12 +0100
+Subject: [PATCH] delta: replace readdir_r with readdir
+
+---
+ src/delta/delta.c | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/src/delta/delta.c b/src/delta/delta.c
+index b3272d9..fd024fc 100644
+--- a/src/delta/delta.c
++++ b/src/delta/delta.c
+@@ -280,13 +280,13 @@ static int enumerate_dir(Hashmap *top, Hashmap *bottom, Hashmap *drops, const ch
+ 
+         for (;;) {
+                 struct dirent *de;
+-                union dirent_storage buf;
+                 int k;
+                 char *p;
+ 
+-                k = readdir_r(d, &buf.de, &de);
+-                if (k != 0)
+-                        return -k;
++                errno = 0;
++                de = readdir(d);
++                if (!de && errno != 0)
++                        return -errno;
+ 
+                 if (!de)
+                         break;
diff --git a/0193-delta-fix-delta-for-drop-ins.patch b/0193-delta-fix-delta-for-drop-ins.patch
new file mode 100644
index 0000000..94b5a5d
--- /dev/null
+++ b/0193-delta-fix-delta-for-drop-ins.patch
@@ -0,0 +1,375 @@
+From e0902bd55deee738f3d6e33b8744364ef922caa2 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Sun, 22 Dec 2013 19:45:02 -0500
+Subject: [PATCH] delta: fix delta for drop-ins
+
+Also, fix highlighting, add more debug statements, make const tables
+static and global, run path_kill_slashes only at entry.
+
+Conflicts:
+	src/delta/delta.c
+---
+ src/delta/delta.c | 174 +++++++++++++++++++++++++-----------------------------
+ 1 file changed, 79 insertions(+), 95 deletions(-)
+
+diff --git a/src/delta/delta.c b/src/delta/delta.c
+index fd024fc..e97f2e9 100644
+--- a/src/delta/delta.c
++++ b/src/delta/delta.c
+@@ -33,6 +33,34 @@
+ #include "build.h"
+ #include "strv.h"
+ 
++static const char prefixes[] =
++        "/etc\0"
++        "/run\0"
++        "/usr/local/lib\0"
++        "/usr/local/share\0"
++        "/usr/lib\0"
++        "/usr/share\0"
++#ifdef HAVE_SPLIT_USR
++        "/lib\0"
++#endif
++        ;
++
++static const char suffixes[] =
++        "sysctl.d\0"
++        "tmpfiles.d\0"
++        "modules-load.d\0"
++        "binfmt.d\0"
++        "systemd/system\0"
++        "systemd/user\0"
++        "systemd/system-preset\0"
++        "systemd/user-preset\0"
++        "udev/rules.d\0"
++        "modprobe.d\0";
++
++static const char have_dropins[] =
++        "systemd/system\0"
++        "systemd/user\0";
++
+ static bool arg_no_pager = false;
+ static int arg_diff = -1;
+ 
+@@ -48,6 +76,14 @@ static enum {
+         (SHOW_MASKED | SHOW_EQUIVALENT | SHOW_REDIRECTED | SHOW_OVERRIDDEN | SHOW_EXTENDED)
+ } arg_flags = 0;
+ 
++static void pager_open_if_enabled(void) {
++
++        if (arg_no_pager)
++                return;
++
++        pager_open(false);
++}
++
+ static int equivalent(const char *a, const char *b) {
+         _cleanup_free_ char *x = NULL, *y = NULL;
+ 
+@@ -76,7 +112,7 @@ static int notify_override_equivalent(const char *top, const char *bottom) {
+                 return 0;
+ 
+         printf("%s%s%s %s → %s\n",
+-               ansi_highlight_green(), "[EQUIVALENT]", ansi_highlight(), top, bottom);
++               ansi_highlight_green(), "[EQUIVALENT]", ansi_highlight_off(), top, bottom);
+         return 1;
+ }
+ 
+@@ -160,24 +196,26 @@ static int found_override(const char *top, const char *bottom) {
+ }
+ 
+ static int enumerate_dir_d(Hashmap *top, Hashmap *bottom, Hashmap *drops, const char *toppath, const char *drop) {
+-        _cleanup_free_ char *conf = NULL;
++        _cleanup_free_ char *unit = NULL;
+         _cleanup_free_ char *path = NULL;
+         _cleanup_strv_free_ char **list = NULL;
+         char **file;
+         char *c;
+         int r;
+ 
++        assert(!endswith(drop, "/"));
++
+         path = strjoin(toppath, "/", drop, NULL);
+         if (!path)
+                 return -ENOMEM;
+ 
+-        path_kill_slashes(path);
++        log_debug("Looking at %s", path);
+ 
+-        conf = strdup(drop);
+-        if (!conf)
++        unit = strdup(drop);
++        if (!unit)
+                 return -ENOMEM;
+ 
+-        c = strrchr(conf, '.');
++        c = strrchr(unit, '.');
+         if (!c)
+                 return -EINVAL;
+         *c = 0;
+@@ -200,35 +238,21 @@ static int enumerate_dir_d(Hashmap *top, Hashmap *bottom, Hashmap *drops, const
+                 p = strjoin(path, "/", *file, NULL);
+                 if (!p)
+                         return -ENOMEM;
++                d = p + strlen(toppath) + 1;
+ 
+-                path_kill_slashes(p);
+-
+-                d = strrchr(p, '/');
+-                if (!d || d == p) {
+-                        free(p);
+-                        return -EINVAL;
+-                }
+-                d--;
+-                d = strrchr(p, '/');
+-
+-                if (!d || d == p) {
+-                        free(p);
+-                        return -EINVAL;
+-                }
+-
++                log_debug("Adding at top: %s → %s", d, p);
+                 k = hashmap_put(top, d, p);
+                 if (k >= 0) {
+                         p = strdup(p);
+                         if (!p)
+                                 return -ENOMEM;
+-                        d = strrchr(p, '/');
+-                        d--;
+-                        d = strrchr(p, '/');
++                        d = p + strlen(toppath) + 1;
+                 } else if (k != -EEXIST) {
+                         free(p);
+                         return k;
+                 }
+ 
++                log_debug("Adding at bottom: %s → %s", d, p);
+                 free(hashmap_remove(bottom, d));
+                 k = hashmap_put(bottom, d, p);
+                 if (k < 0) {
+@@ -236,14 +260,14 @@ static int enumerate_dir_d(Hashmap *top, Hashmap *bottom, Hashmap *drops, const
+                         return k;
+                 }
+ 
+-                h = hashmap_get(drops, conf);
++                h = hashmap_get(drops, unit);
+                 if (!h) {
+                         h = hashmap_new(string_hash_func, string_compare_func);
+                         if (!h)
+                                 return -ENOMEM;
+-                        hashmap_put(drops, conf, h);
+-                        conf = strdup(conf);
+-                        if (!conf)
++                        hashmap_put(drops, unit, h);
++                        unit = strdup(unit);
++                        if (!unit)
+                                 return -ENOMEM;
+                 }
+ 
+@@ -251,7 +275,8 @@ static int enumerate_dir_d(Hashmap *top, Hashmap *bottom, Hashmap *drops, const
+                 if (!p)
+                         return -ENOMEM;
+ 
+-                k = hashmap_put(h, path_get_file_name(p), p);
++                log_debug("Adding to drops: %s → %s → %s", unit, basename(p), p);
++                k = hashmap_put(h, basename(p), p);
+                 if (k < 0) {
+                         free(p);
+                         if (k != -EEXIST)
+@@ -269,12 +294,14 @@ static int enumerate_dir(Hashmap *top, Hashmap *bottom, Hashmap *drops, const ch
+         assert(drops);
+         assert(path);
+ 
++        log_debug("Looking at %s", path);
++
+         d = opendir(path);
+         if (!d) {
+                 if (errno == ENOENT)
+                         return 0;
+ 
+-                log_error("Failed to enumerate %s: %m", path);
++                log_error("Failed to open %s: %m", path);
+                 return -errno;
+         }
+ 
+@@ -285,11 +312,8 @@ static int enumerate_dir(Hashmap *top, Hashmap *bottom, Hashmap *drops, const ch
+ 
+                 errno = 0;
+                 de = readdir(d);
+-                if (!de && errno != 0)
+-                        return -errno;
+-
+                 if (!de)
+-                        break;
++                        return -errno;
+ 
+                 if (dropins && de->d_type == DT_DIR && endswith(de->d_name, ".d"))
+                         enumerate_dir_d(top, bottom, drops, path, de->d_name);
+@@ -301,9 +325,8 @@ static int enumerate_dir(Hashmap *top, Hashmap *bottom, Hashmap *drops, const ch
+                 if (!p)
+                         return -ENOMEM;
+ 
+-                path_kill_slashes(p);
+-
+-                k = hashmap_put(top, path_get_file_name(p), p);
++                log_debug("Adding at top: %s → %s", basename(p), p);
++                k = hashmap_put(top, basename(p), p);
+                 if (k >= 0) {
+                         p = strdup(p);
+                         if (!p)
+@@ -313,44 +336,37 @@ static int enumerate_dir(Hashmap *top, Hashmap *bottom, Hashmap *drops, const ch
+                         return k;
+                 }
+ 
+-                free(hashmap_remove(bottom, path_get_file_name(p)));
+-                k = hashmap_put(bottom, path_get_file_name(p), p);
++                log_debug("Adding at bottom: %s → %s", basename(p), p);
++                free(hashmap_remove(bottom, basename(p)));
++                k = hashmap_put(bottom, basename(p), p);
+                 if (k < 0) {
+                         free(p);
+                         return k;
+                 }
+         }
+-
+-        return 0;
+ }
+ 
+-static int process_suffix(const char *prefixes, const char *suffix, bool dropins) {
++static int process_suffix(const char *suffix) {
+         const char *p;
+         char *f;
+-        Hashmap *top, *bottom=NULL, *drops=NULL;
++        Hashmap *top, *bottom, *drops;
+         Hashmap *h;
+         char *key;
+         int r = 0, k;
+         Iterator i, j;
+         int n_found = 0;
++        bool dropins;
+ 
+-        assert(prefixes);
+         assert(suffix);
++        assert(!startswith(suffix, "/"));
++        assert(!strstr(suffix, "//"));
+ 
+-        top = hashmap_new(string_hash_func, string_compare_func);
+-        if (!top) {
+-                r = -ENOMEM;
+-                goto finish;
+-        }
++        dropins = nulstr_contains(have_dropins, suffix);
+ 
++        top = hashmap_new(string_hash_func, string_compare_func);
+         bottom = hashmap_new(string_hash_func, string_compare_func);
+-        if (!bottom) {
+-                r = -ENOMEM;
+-                goto finish;
+-        }
+-
+         drops = hashmap_new(string_hash_func, string_compare_func);
+-        if (!drops) {
++        if (!top || !bottom || !drops) {
+                 r = -ENOMEM;
+                 goto finish;
+         }
+@@ -365,10 +381,8 @@ static int process_suffix(const char *prefixes, const char *suffix, bool dropins
+                 }
+ 
+                 k = enumerate_dir(top, bottom, drops, t, dropins);
+-                if (k < 0)
++                if (r == 0)
+                         r = k;
+-
+-                log_debug("Looking at %s", t);
+         }
+ 
+         HASHMAP_FOREACH_KEY(f, key, top, i) {
+@@ -409,21 +423,20 @@ finish:
+         return r < 0 ? r : n_found;
+ }
+ 
+-static int process_suffix_chop(const char *prefixes, const char *suffix, const char *have_dropins) {
++static int process_suffix_chop(const char *suffix) {
+         const char *p;
+ 
+-        assert(prefixes);
+         assert(suffix);
+ 
+         if (!path_is_absolute(suffix))
+-                return process_suffix(prefixes, suffix, nulstr_contains(have_dropins, suffix));
++                return process_suffix(suffix);
+ 
+         /* Strip prefix from the suffix */
+         NULSTR_FOREACH(p, prefixes) {
+                 if (startswith(suffix, p)) {
+                         suffix += strlen(p);
+                         suffix += strspn(suffix, "/");
+-                        return process_suffix(prefixes, suffix, nulstr_contains(have_dropins, suffix));
++                        return process_suffix(suffix);
+                 }
+         }
+ 
+@@ -548,35 +561,6 @@ static int parse_argv(int argc, char *argv[]) {
+ }
+ 
+ int main(int argc, char *argv[]) {
+-
+-        const char prefixes[] =
+-                "/etc\0"
+-                "/run\0"
+-                "/usr/local/lib\0"
+-                "/usr/local/share\0"
+-                "/usr/lib\0"
+-                "/usr/share\0"
+-#ifdef HAVE_SPLIT_USR
+-                "/lib\0"
+-#endif
+-                ;
+-
+-        const char suffixes[] =
+-                "sysctl.d\0"
+-                "tmpfiles.d\0"
+-                "modules-load.d\0"
+-                "binfmt.d\0"
+-                "systemd/system\0"
+-                "systemd/user\0"
+-                "systemd/system-preset\0"
+-                "systemd/user-preset\0"
+-                "udev/rules.d\0"
+-                "modprobe.d\0";
+-
+-        const char have_dropins[] =
+-                "systemd/system\0"
+-                "systemd/user\0";
+-
+         int r = 0, k;
+         int n_found = 0;
+ 
+@@ -595,14 +579,14 @@ int main(int argc, char *argv[]) {
+         else if (arg_diff)
+                 arg_flags |= SHOW_OVERRIDDEN;
+ 
+-        if (!arg_no_pager)
+-                pager_open(false);
++        pager_open_if_enabled();
+ 
+         if (optind < argc) {
+                 int i;
+ 
+                 for (i = optind; i < argc; i++) {
+-                        k = process_suffix_chop(prefixes, argv[i], have_dropins);
++                        path_kill_slashes(argv[i]);
++                        k = process_suffix_chop(argv[i]);
+                         if (k < 0)
+                                 r = k;
+                         else
+@@ -613,7 +597,7 @@ int main(int argc, char *argv[]) {
+                 const char *n;
+ 
+                 NULSTR_FOREACH(n, suffixes) {
+-                        k = process_suffix(prefixes, n, nulstr_contains(have_dropins, n));
++                        k = process_suffix(n);
+                         if (k < 0)
+                                 r = k;
+                         else
diff --git a/0194-delta-if-prefix-is-specified-only-show-overrides-the.patch b/0194-delta-if-prefix-is-specified-only-show-overrides-the.patch
new file mode 100644
index 0000000..23026ab
--- /dev/null
+++ b/0194-delta-if-prefix-is-specified-only-show-overrides-the.patch
@@ -0,0 +1,251 @@
+From 31ce1352b687551d62d3b7d4dc1276b2dff1d65a Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Sun, 22 Dec 2013 22:53:23 -0500
+Subject: [PATCH] delta: if prefix is specified, only show overrides there
+
+systemd-delta /run/systemd/system will show all unit overrides
+in /run, etc.
+---
+ man/systemd-delta.xml | 80 +++++++++++++++++++++++++++++++++++++++++----------
+ src/delta/delta.c     | 71 ++++++++++++++++++++++++++++-----------------
+ 2 files changed, 109 insertions(+), 42 deletions(-)
+
+diff --git a/man/systemd-delta.xml b/man/systemd-delta.xml
+index 413ebd8..4d3ab78 100644
+--- a/man/systemd-delta.xml
++++ b/man/systemd-delta.xml
+@@ -49,7 +49,9 @@
+ 
+         <refsynopsisdiv>
+                 <cmdsynopsis>
+-                        <command>systemd-delta <arg choice="opt" rep="repeat">OPTIONS</arg> <arg choice="opt" rep="repeat">SUFFIX</arg></command>
++                        <command>systemd-delta</command>
++			<arg choice="opt" rep="repeat">OPTIONS</arg>
++			<arg choice="opt" rep="repeat"><replaceable>PREFIX</replaceable><optional>/<replaceable>SUFFIX</replaceable></optional>|<replaceable>SUFFIX</replaceable></arg>
+                 </cmdsynopsis>
+         </refsynopsisdiv>
+ 
+@@ -57,18 +59,46 @@
+                 <title>Description</title>
+ 
+                 <para><command>systemd-delta</command> may be used to
+-                identify and compare configuration files in
+-                <filename>/etc</filename> that override default
+-                counterparts in <filename>/usr</filename>. The command
+-                line argument can be one or more name of a subdirectories of
+-                <filename>/etc</filename> or
+-                <filename>/usr/lib</filename> to compare, such as
+-                <filename>tmpfiles.d</filename>, <filename>sysctl.d</filename> or
+-                <filename>systemd/system</filename>.</para>
+-
+-                <para>When no argument is specified a number of
+-                well-known subdirectories are searched for overridden
+-                files.</para>
++                identify and compare configuration files that override
++                other configuration files. Files in
++                <filename>/etc</filename> have highest priority, files
++                in <filename>/run</filename> have the second highest
++                priority, ..., files in <filename>/lib</filename> have
++                lowest priority. Files in a directory with higher
++                priority override files with the same name in
++                directories of lower priority. In addition, certain
++                configuration files can have <literal>.d</literal>
++                directories which contain "drop-in" files with
++                configuration snippets which augment the main
++                configuration file. "Drop-in" files can be overriden
++                in the same way by placing files with the same name in
++                a directory of higher priority (except that in case of
++                "drop-in" files, both the "drop-in" file name and the
++                name of the containing directory, which corresponds to
++                the name of the main configuration file, must match).
++                For a fuller explanation, see
++                <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
++		</para>
++
++		<para>The command line argument will be split into a
++		prefix and a suffix. Either is optional. The prefix
++		must be one of the directories containing
++		configuration files (<filename>/etc</filename>,
++		<filename>/run</filename>,
++		<filename>/usr/lib</filename>, ...). If it is given,
++		only overriding files contained in this directory will
++		be shown. Otherwise, all overriding files will be
++		shown. The suffix must be a name of a subdirectory
++		containing configuration files like
++		<filename>tmpfiles.d</filename>,
++		<filename>sysctl.d</filename> or
++		<filename>systemd/system</filename>. If it is given,
++		only configuration files in this subdirectory (across
++		all configuration paths) will be analyzed. Otherwise,
++		all configuration files will be analyzed. If the
++		commandline argument is not given at all, all
++		configuration files will be analyzed. See below for
++		some examples.</para>
+         </refsect1>
+ 
+         <refsect1>
+@@ -168,9 +198,28 @@
+                         </varlistentry>
+ 
+                 </variablelist>
+-
+         </refsect1>
+ 
++	<refsect1>
++		<title>Examples</title>
++
++		<para>To see all local configuration:</para>
++		<programlisting>systemd-delta
++		</programlisting>
++
++		<para>To see all runtime configuration:</para>
++		<programlisting>systemd-delta /run
++		</programlisting>
++
++		<para>To see all system unit configuration changes:</para>
++		<programlisting>systemd-delta systemd/system
++		</programlisting>
++
++		<para>To see all runtime "drop-in" changes for system units:</para>
++		<programlisting>systemd-delta --type=extended /run/systemd/system
++		</programlisting>
++	</refsect1>
++
+         <refsect1>
+                 <title>Exit status</title>
+ 
+@@ -181,7 +230,8 @@
+         <refsect1>
+                 <title>See Also</title>
+                 <para>
+-                        <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>
++                        <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
++                        <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+                 </para>
+         </refsect1>
+ 
+diff --git a/src/delta/delta.c b/src/delta/delta.c
+index e97f2e9..ae658f9 100644
+--- a/src/delta/delta.c
++++ b/src/delta/delta.c
+@@ -4,6 +4,7 @@
+   This file is part of systemd.
+ 
+   Copyright 2012 Lennart Poettering
++  Copyright 2013 Zbigniew Jędrzejewski-Szmek
+ 
+   systemd is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Lesser General Public License as published by
+@@ -346,7 +347,7 @@ static int enumerate_dir(Hashmap *top, Hashmap *bottom, Hashmap *drops, const ch
+         }
+ }
+ 
+-static int process_suffix(const char *suffix) {
++static int process_suffix(const char *suffix, const char *onlyprefix) {
+         const char *p;
+         char *f;
+         Hashmap *top, *bottom, *drops;
+@@ -391,20 +392,23 @@ static int process_suffix(const char *suffix) {
+                 o = hashmap_get(bottom, key);
+                 assert(o);
+ 
+-                if (path_equal(o, f))
+-                        notify_override_unchanged(f);
+-                else {
+-                        k = found_override(f, o);
+-                        if (k < 0)
+-                                r = k;
+-                        else
+-                                n_found += k;
++                if (!onlyprefix || startswith(o, onlyprefix)) {
++                        if (path_equal(o, f)) {
++                                notify_override_unchanged(f);
++                        } else {
++                                k = found_override(f, o);
++                                if (k < 0)
++                                        r = k;
++                                else
++                                        n_found += k;
++                        }
+                 }
+ 
+                 h = hashmap_get(drops, key);
+                 if (h)
+                         HASHMAP_FOREACH(o, h, j)
+-                                n_found += notify_override_extended(f, o);
++                                if (!onlyprefix || startswith(o, onlyprefix))
++                                        n_found += notify_override_extended(f, o);
+         }
+ 
+ finish:
+@@ -423,24 +427,41 @@ finish:
+         return r < 0 ? r : n_found;
+ }
+ 
+-static int process_suffix_chop(const char *suffix) {
++static int process_suffixes(const char *onlyprefix) {
++        const char *n;
++        int n_found = 0, r;
++
++        NULSTR_FOREACH(n, suffixes) {
++                r = process_suffix(n, onlyprefix);
++                if (r < 0)
++                        return r;
++                else
++                        n_found += r;
++        }
++        return n_found;
++}
++
++static int process_suffix_chop(const char *arg) {
+         const char *p;
+ 
+-        assert(suffix);
++        assert(arg);
+ 
+-        if (!path_is_absolute(suffix))
+-                return process_suffix(suffix);
++        if (!path_is_absolute(arg))
++                return process_suffix(arg, NULL);
+ 
+         /* Strip prefix from the suffix */
+         NULSTR_FOREACH(p, prefixes) {
+-                if (startswith(suffix, p)) {
+-                        suffix += strlen(p);
++                const char *suffix = startswith(arg, p);
++                if (suffix) {
+                         suffix += strspn(suffix, "/");
+-                        return process_suffix(suffix);
++                        if (*suffix)
++                                return process_suffix(suffix, NULL);
++                        else
++                                return process_suffixes(arg);
+                 }
+         }
+ 
+-        log_error("Invalid suffix specification %s.", suffix);
++        log_error("Invalid suffix specification %s.", arg);
+         return -EINVAL;
+ }
+ 
+@@ -594,15 +615,11 @@ int main(int argc, char *argv[]) {
+                 }
+ 
+         } else {
+-                const char *n;
+-
+-                NULSTR_FOREACH(n, suffixes) {
+-                        k = process_suffix(n);
+-                        if (k < 0)
+-                                r = k;
+-                        else
+-                                n_found += k;
+-                }
++                k = process_suffixes(NULL);
++                if (k < 0)
++                        r = k;
++                else
++                        n_found += k;
+         }
+ 
+         if (r >= 0)
diff --git a/0195-log-log_error-and-friends-add-a-newline-after-each-l.patch b/0195-log-log_error-and-friends-add-a-newline-after-each-l.patch
new file mode 100644
index 0000000..e89402c
--- /dev/null
+++ b/0195-log-log_error-and-friends-add-a-newline-after-each-l.patch
@@ -0,0 +1,1520 @@
+From 316d1c573345d8d13a289ce38cbe2fd683a75d98 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Tue, 24 Dec 2013 16:39:37 +0100
+Subject: [PATCH] log: log_error() and friends add a newline after each line
+ anyway, so avoid including it in the log strings
+
+Conflicts:
+	src/bus-driverd/bus-driverd.c
+	src/bus-proxyd/bus-proxyd.c
+	src/shared/path-util.c
+	src/udev/net/link-config.c
+	src/udev/scsi_id/scsi_id.c
+	src/udev/scsi_id/scsi_serial.c
+	src/udev/udev-builtin-keyboard.c
+	src/udev/udev-event.c
+	src/udev/udev-rules.c
+	src/udev/udevadm-monitor.c
+	src/udev/udevadm-trigger.c
+	src/udev/udevd.c
+---
+ src/binfmt/binfmt.c                    |   2 +-
+ src/bootchart/bootchart.c              |   4 +-
+ src/journal/coredumpctl.c              |   2 +-
+ src/journal/journal-authenticate.c     |   2 +-
+ src/modules-load/modules-load.c        |   4 +-
+ src/sysctl/sysctl.c                    |   2 +-
+ src/test/test-udev.c                   |   8 +-
+ src/tmpfiles/tmpfiles.c                |   4 +-
+ src/udev/accelerometer/accelerometer.c |   2 +-
+ src/udev/ata_id/ata_id.c               |   6 +-
+ src/udev/cdrom_id/cdrom_id.c           | 160 ++++++++++++++++-----------------
+ src/udev/udev-builtin-blkid.c          |   2 +-
+ src/udev/udev-builtin-firmware.c       |  10 +--
+ src/udev/udev-builtin-input_id.c       |  14 +--
+ src/udev/udev-builtin-kmod.c           |  18 ++--
+ src/udev/udev-builtin-usb_id.c         |  22 ++---
+ src/udev/udev-ctrl.c                   |  22 ++---
+ src/udev/udev-node.c                   |  32 +++----
+ src/udev/udev-watch.c                  |  10 +--
+ src/udev/udevadm-hwdb.c                |  42 ++++-----
+ src/udev/udevadm-settle.c              |  16 ++--
+ src/udev/udevadm-test.c                |   4 +-
+ src/udev/udevadm.c                     |   2 +-
+ 23 files changed, 195 insertions(+), 195 deletions(-)
+
+diff --git a/src/binfmt/binfmt.c b/src/binfmt/binfmt.c
+index 5a42b3d..7ed1ae7 100644
+--- a/src/binfmt/binfmt.c
++++ b/src/binfmt/binfmt.c
+@@ -94,7 +94,7 @@ static int apply_file(const char *path, bool ignore_enoent) {
+                 return r;
+         }
+ 
+-        log_debug("apply: %s\n", path);
++        log_debug("apply: %s", path);
+         for (;;) {
+                 char l[LINE_MAX], *p;
+                 int k;
+diff --git a/src/bootchart/bootchart.c b/src/bootchart/bootchart.c
+index 14ccd3e..9f99c1f 100644
+--- a/src/bootchart/bootchart.c
++++ b/src/bootchart/bootchart.c
+@@ -262,12 +262,12 @@ static void do_journal_append(char *file)
+ 
+         f = open(file, O_RDONLY);
+         if (f < 0) {
+-                log_error("Failed to read bootchart data: %m\n");
++                log_error("Failed to read bootchart data: %m");
+                 return;
+         }
+         n = loop_read(f, p + 10, BOOTCHART_MAX, false);
+         if (n < 0) {
+-                log_error("Failed to read bootchart data: %s\n", strerror(-n));
++                log_error("Failed to read bootchart data: %s", strerror(-n));
+                 close(f);
+                 return;
+         }
+diff --git a/src/journal/coredumpctl.c b/src/journal/coredumpctl.c
+index 75c96cc..560a91b 100644
+--- a/src/journal/coredumpctl.c
++++ b/src/journal/coredumpctl.c
+@@ -417,7 +417,7 @@ static int dump_core(sd_journal* j) {
+ 
+         r = sd_journal_previous(j);
+         if (r >= 0)
+-                log_warning("More than one entry matches, ignoring rest.\n");
++                log_warning("More than one entry matches, ignoring rest.");
+ 
+         return 0;
+ }
+diff --git a/src/journal/journal-authenticate.c b/src/journal/journal-authenticate.c
+index bd7100a..f416b79 100644
+--- a/src/journal/journal-authenticate.c
++++ b/src/journal/journal-authenticate.c
+@@ -60,7 +60,7 @@ int journal_file_append_tag(JournalFile *f) {
+         o->tag.seqnum = htole64(journal_file_tag_seqnum(f));
+         o->tag.epoch = htole64(FSPRG_GetEpoch(f->fsprg_state));
+ 
+-        log_debug("Writing tag %"PRIu64" for epoch %"PRIu64"\n",
++        log_debug("Writing tag %"PRIu64" for epoch %"PRIu64"",
+                   le64toh(o->tag.seqnum),
+                   FSPRG_GetEpoch(f->fsprg_state));
+ 
+diff --git a/src/modules-load/modules-load.c b/src/modules-load/modules-load.c
+index 49ee420..9789398 100644
+--- a/src/modules-load/modules-load.c
++++ b/src/modules-load/modules-load.c
+@@ -122,7 +122,7 @@ static int load_module(struct kmod_ctx *ctx, const char *m) {
+         struct kmod_list *itr, *modlist = NULL;
+         int r = 0;
+ 
+-        log_debug("load: %s\n", m);
++        log_debug("load: %s", m);
+ 
+         r = kmod_module_new_from_lookup(ctx, m, &modlist);
+         if (r < 0) {
+@@ -190,7 +190,7 @@ static int apply_file(struct kmod_ctx *ctx, const char *path, bool ignore_enoent
+                 return r;
+         }
+ 
+-        log_debug("apply: %s\n", path);
++        log_debug("apply: %s", path);
+         for (;;) {
+                 char line[LINE_MAX], *l;
+                 int k;
+diff --git a/src/sysctl/sysctl.c b/src/sysctl/sysctl.c
+index b5670db..8fb0eb6 100644
+--- a/src/sysctl/sysctl.c
++++ b/src/sysctl/sysctl.c
+@@ -132,7 +132,7 @@ static int parse_file(Hashmap *sysctl_options, const char *path, bool ignore_eno
+                 return r;
+         }
+ 
+-        log_debug("parse: %s\n", path);
++        log_debug("parse: %s", path);
+         while (!feof(f)) {
+                 char l[LINE_MAX], *p, *value, *new_value, *property, *existing;
+                 void *v;
+diff --git a/src/test/test-udev.c b/src/test/test-udev.c
+index 17825f1..676669b 100644
+--- a/src/test/test-udev.c
++++ b/src/test/test-udev.c
+@@ -101,20 +101,20 @@ int main(int argc, char *argv[])
+         if (udev == NULL)
+                 return EXIT_FAILURE;
+ 
+-        log_debug("version %s\n", VERSION);
++        log_debug("version %s", VERSION);
+         label_init("/dev");
+ 
+         sigprocmask(SIG_SETMASK, NULL, &sigmask_orig);
+ 
+         action = argv[1];
+         if (action == NULL) {
+-                log_error("action missing\n");
++                log_error("action missing");
+                 goto out;
+         }
+ 
+         devpath = argv[2];
+         if (devpath == NULL) {
+-                log_error("devpath missing\n");
++                log_error("devpath missing");
+                 goto out;
+         }
+ 
+@@ -123,7 +123,7 @@ int main(int argc, char *argv[])
+         strscpyl(syspath, sizeof(syspath), "/sys", devpath, NULL);
+         dev = udev_device_new_from_syspath(udev, syspath);
+         if (dev == NULL) {
+-                log_debug("unknown device '%s'\n", devpath);
++                log_debug("unknown device '%s'", devpath);
+                 goto out;
+         }
+ 
+diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c
+index e23847b..00f74c2 100644
+--- a/src/tmpfiles/tmpfiles.c
++++ b/src/tmpfiles/tmpfiles.c
+@@ -359,7 +359,7 @@ static int dir_cleanup(
+                                 continue;
+ 
+                         if (i->type != IGNORE_DIRECTORY_PATH || !streq(dent->d_name, p)) {
+-                                log_debug("rmdir '%s'\n", sub_path);
++                                log_debug("rmdir '%s'", sub_path);
+ 
+                                 if (unlinkat(dirfd(d), dent->d_name, AT_REMOVEDIR) < 0) {
+                                         if (errno != ENOENT && errno != ENOTEMPTY) {
+@@ -407,7 +407,7 @@ static int dir_cleanup(
+                         if (age >= cutoff)
+                                 continue;
+ 
+-                        log_debug("unlink '%s'\n", sub_path);
++                        log_debug("unlink '%s'", sub_path);
+ 
+                         if (unlinkat(dirfd(d), dent->d_name, 0) < 0) {
+                                 if (errno != ENOENT) {
+diff --git a/src/udev/accelerometer/accelerometer.c b/src/udev/accelerometer/accelerometer.c
+index e611b48..9610d7c 100644
+--- a/src/udev/accelerometer/accelerometer.c
++++ b/src/udev/accelerometer/accelerometer.c
+@@ -334,7 +334,7 @@ int main (int argc, char** argv)
+                 return 0;
+         }
+ 
+-        log_debug("opening accelerometer device %s\n", devnode);
++        log_debug("opening accelerometer device %s", devnode);
+         test_orientation(udev, dev, devnode);
+         free(devnode);
+         log_close();
+diff --git a/src/udev/ata_id/ata_id.c b/src/udev/ata_id/ata_id.c
+index d375d43..5e55f8d 100644
+--- a/src/udev/ata_id/ata_id.c
++++ b/src/udev/ata_id/ata_id.c
+@@ -462,14 +462,14 @@ int main(int argc, char *argv[])
+ 
+         node = argv[optind];
+         if (node == NULL) {
+-                log_error("no node specified\n");
++                log_error("no node specified");
+                 rc = 1;
+                 goto exit;
+         }
+ 
+         fd = open(node, O_RDONLY|O_NONBLOCK);
+         if (fd < 0) {
+-                log_error("unable to open '%s'\n", node);
++                log_error("unable to open '%s'", node);
+                 rc = 1;
+                 goto exit;
+         }
+@@ -501,7 +501,7 @@ int main(int argc, char *argv[])
+         } else {
+                 /* If this fails, then try HDIO_GET_IDENTITY */
+                 if (ioctl(fd, HDIO_GET_IDENTITY, &id) != 0) {
+-                        log_debug("HDIO_GET_IDENTITY failed for '%s': %m\n", node);
++                        log_debug("HDIO_GET_IDENTITY failed for '%s': %m", node);
+                         rc = 2;
+                         goto close;
+                 }
+diff --git a/src/udev/cdrom_id/cdrom_id.c b/src/udev/cdrom_id/cdrom_id.c
+index 1ad0459..1fc0dfa 100644
+--- a/src/udev/cdrom_id/cdrom_id.c
++++ b/src/udev/cdrom_id/cdrom_id.c
+@@ -137,10 +137,10 @@ static bool is_mounted(const char *device)
+ static void info_scsi_cmd_err(struct udev *udev, const char *cmd, int err)
+ {
+         if (err == -1) {
+-                log_debug("%s failed\n", cmd);
++                log_debug("%s failed", cmd);
+                 return;
+         }
+-        log_debug("%s failed with SK=%Xh/ASC=%02Xh/ACQ=%02Xh\n", cmd, SK(err), ASC(err), ASCQ(err));
++        log_debug("%s failed with SK=%Xh/ASC=%02Xh/ACQ=%02Xh", cmd, SK(err), ASC(err), ASCQ(err));
+ }
+ 
+ struct scsi_cmd {
+@@ -205,11 +205,11 @@ static int media_lock(struct udev *udev, int fd, bool lock)
+         /* disable the kernel's lock logic */
+         err = ioctl(fd, CDROM_CLEAR_OPTIONS, CDO_LOCK);
+         if (err < 0)
+-                log_debug("CDROM_CLEAR_OPTIONS, CDO_LOCK failed\n");
++                log_debug("CDROM_CLEAR_OPTIONS, CDO_LOCK failed");
+ 
+         err = ioctl(fd, CDROM_LOCKDOOR, lock ? 1 : 0);
+         if (err < 0)
+-                log_debug("CDROM_LOCKDOOR failed\n");
++                log_debug("CDROM_LOCKDOOR failed");
+ 
+         return err;
+ }
+@@ -237,7 +237,7 @@ static int cd_capability_compat(struct udev *udev, int fd)
+ 
+         capability = ioctl(fd, CDROM_GET_CAPABILITY, NULL);
+         if (capability < 0) {
+-                log_debug("CDROM_GET_CAPABILITY failed\n");
++                log_debug("CDROM_GET_CAPABILITY failed");
+                 return -1;
+         }
+ 
+@@ -261,7 +261,7 @@ static int cd_capability_compat(struct udev *udev, int fd)
+ static int cd_media_compat(struct udev *udev, int fd)
+ {
+         if (ioctl(fd, CDROM_DRIVE_STATUS, CDSL_CURRENT) != CDS_DISC_OK) {
+-                log_debug("CDROM_DRIVE_STATUS != CDS_DISC_OK\n");
++                log_debug("CDROM_DRIVE_STATUS != CDS_DISC_OK");
+                 return -1;
+         }
+         cd_media = 1;
+@@ -285,11 +285,11 @@ static int cd_inquiry(struct udev *udev, int fd)
+         }
+ 
+         if ((inq[0] & 0x1F) != 5) {
+-                log_debug("not an MMC unit\n");
++                log_debug("not an MMC unit");
+                 return -1;
+         }
+ 
+-        log_debug("INQUIRY: [%.8s][%.16s][%.4s]\n", inq + 8, inq + 16, inq + 32);
++        log_debug("INQUIRY: [%.8s][%.16s][%.4s]", inq + 8, inq + 16, inq + 32);
+         return 0;
+ }
+ 
+@@ -299,105 +299,105 @@ static void feature_profile_media(struct udev *udev, int cur_profile)
+         case 0x03:
+         case 0x04:
+         case 0x05:
+-                log_debug("profile 0x%02x \n", cur_profile);
++                log_debug("profile 0x%02x ", cur_profile);
+                 cd_media = 1;
+                 cd_media_mo = 1;
+                 break;
+         case 0x08:
+-                log_debug("profile 0x%02x media_cd_rom\n", cur_profile);
++                log_debug("profile 0x%02x media_cd_rom", cur_profile);
+                 cd_media = 1;
+                 cd_media_cd_rom = 1;
+                 break;
+         case 0x09:
+-                log_debug("profile 0x%02x media_cd_r\n", cur_profile);
++                log_debug("profile 0x%02x media_cd_r", cur_profile);
+                 cd_media = 1;
+                 cd_media_cd_r = 1;
+                 break;
+         case 0x0a:
+-                log_debug("profile 0x%02x media_cd_rw\n", cur_profile);
++                log_debug("profile 0x%02x media_cd_rw", cur_profile);
+                 cd_media = 1;
+                 cd_media_cd_rw = 1;
+                 break;
+         case 0x10:
+-                log_debug("profile 0x%02x media_dvd_ro\n", cur_profile);
++                log_debug("profile 0x%02x media_dvd_ro", cur_profile);
+                 cd_media = 1;
+                 cd_media_dvd_rom = 1;
+                 break;
+         case 0x11:
+-                log_debug("profile 0x%02x media_dvd_r\n", cur_profile);
++                log_debug("profile 0x%02x media_dvd_r", cur_profile);
+                 cd_media = 1;
+                 cd_media_dvd_r = 1;
+                 break;
+         case 0x12:
+-                log_debug("profile 0x%02x media_dvd_ram\n", cur_profile);
++                log_debug("profile 0x%02x media_dvd_ram", cur_profile);
+                 cd_media = 1;
+                 cd_media_dvd_ram = 1;
+                 break;
+         case 0x13:
+-                log_debug("profile 0x%02x media_dvd_rw_ro\n", cur_profile);
++                log_debug("profile 0x%02x media_dvd_rw_ro", cur_profile);
+                 cd_media = 1;
+                 cd_media_dvd_rw = 1;
+                 cd_media_dvd_rw_ro = 1;
+                 break;
+         case 0x14:
+-                log_debug("profile 0x%02x media_dvd_rw_seq\n", cur_profile);
++                log_debug("profile 0x%02x media_dvd_rw_seq", cur_profile);
+                 cd_media = 1;
+                 cd_media_dvd_rw = 1;
+                 cd_media_dvd_rw_seq = 1;
+                 break;
+         case 0x1B:
+-                log_debug("profile 0x%02x media_dvd_plus_r\n", cur_profile);
++                log_debug("profile 0x%02x media_dvd_plus_r", cur_profile);
+                 cd_media = 1;
+                 cd_media_dvd_plus_r = 1;
+                 break;
+         case 0x1A:
+-                log_debug("profile 0x%02x media_dvd_plus_rw\n", cur_profile);
++                log_debug("profile 0x%02x media_dvd_plus_rw", cur_profile);
+                 cd_media = 1;
+                 cd_media_dvd_plus_rw = 1;
+                 break;
+         case 0x2A:
+-                log_debug("profile 0x%02x media_dvd_plus_rw_dl\n", cur_profile);
++                log_debug("profile 0x%02x media_dvd_plus_rw_dl", cur_profile);
+                 cd_media = 1;
+                 cd_media_dvd_plus_rw_dl = 1;
+                 break;
+         case 0x2B:
+-                log_debug("profile 0x%02x media_dvd_plus_r_dl\n", cur_profile);
++                log_debug("profile 0x%02x media_dvd_plus_r_dl", cur_profile);
+                 cd_media = 1;
+                 cd_media_dvd_plus_r_dl = 1;
+                 break;
+         case 0x40:
+-                log_debug("profile 0x%02x media_bd\n", cur_profile);
++                log_debug("profile 0x%02x media_bd", cur_profile);
+                 cd_media = 1;
+                 cd_media_bd = 1;
+                 break;
+         case 0x41:
+         case 0x42:
+-                log_debug("profile 0x%02x media_bd_r\n", cur_profile);
++                log_debug("profile 0x%02x media_bd_r", cur_profile);
+                 cd_media = 1;
+                 cd_media_bd_r = 1;
+                 break;
+         case 0x43:
+-                log_debug("profile 0x%02x media_bd_re\n", cur_profile);
++                log_debug("profile 0x%02x media_bd_re", cur_profile);
+                 cd_media = 1;
+                 cd_media_bd_re = 1;
+                 break;
+         case 0x50:
+-                log_debug("profile 0x%02x media_hddvd\n", cur_profile);
++                log_debug("profile 0x%02x media_hddvd", cur_profile);
+                 cd_media = 1;
+                 cd_media_hddvd = 1;
+                 break;
+         case 0x51:
+-                log_debug("profile 0x%02x media_hddvd_r\n", cur_profile);
++                log_debug("profile 0x%02x media_hddvd_r", cur_profile);
+                 cd_media = 1;
+                 cd_media_hddvd_r = 1;
+                 break;
+         case 0x52:
+-                log_debug("profile 0x%02x media_hddvd_rw\n", cur_profile);
++                log_debug("profile 0x%02x media_hddvd_rw", cur_profile);
+                 cd_media = 1;
+                 cd_media_hddvd_rw = 1;
+                 break;
+         default:
+-                log_debug("profile 0x%02x <ignored>\n", cur_profile);
++                log_debug("profile 0x%02x <ignored>", cur_profile);
+                 break;
+         }
+ }
+@@ -414,77 +414,77 @@ static int feature_profiles(struct udev *udev, const unsigned char *profiles, si
+                 case 0x03:
+                 case 0x04:
+                 case 0x05:
+-                        log_debug("profile 0x%02x mo\n", profile);
++                        log_debug("profile 0x%02x mo", profile);
+                         cd_mo = 1;
+                         break;
+                 case 0x08:
+-                        log_debug("profile 0x%02x cd_rom\n", profile);
++                        log_debug("profile 0x%02x cd_rom", profile);
+                         cd_cd_rom = 1;
+                         break;
+                 case 0x09:
+-                        log_debug("profile 0x%02x cd_r\n", profile);
++                        log_debug("profile 0x%02x cd_r", profile);
+                         cd_cd_r = 1;
+                         break;
+                 case 0x0A:
+-                        log_debug("profile 0x%02x cd_rw\n", profile);
++                        log_debug("profile 0x%02x cd_rw", profile);
+                         cd_cd_rw = 1;
+                         break;
+                 case 0x10:
+-                        log_debug("profile 0x%02x dvd_rom\n", profile);
++                        log_debug("profile 0x%02x dvd_rom", profile);
+                         cd_dvd_rom = 1;
+                         break;
+                 case 0x12:
+-                        log_debug("profile 0x%02x dvd_ram\n", profile);
++                        log_debug("profile 0x%02x dvd_ram", profile);
+                         cd_dvd_ram = 1;
+                         break;
+                 case 0x13:
+                 case 0x14:
+-                        log_debug("profile 0x%02x dvd_rw\n", profile);
++                        log_debug("profile 0x%02x dvd_rw", profile);
+                         cd_dvd_rw = 1;
+                         break;
+                 case 0x1B:
+-                        log_debug("profile 0x%02x dvd_plus_r\n", profile);
++                        log_debug("profile 0x%02x dvd_plus_r", profile);
+                         cd_dvd_plus_r = 1;
+                         break;
+                 case 0x1A:
+-                        log_debug("profile 0x%02x dvd_plus_rw\n", profile);
++                        log_debug("profile 0x%02x dvd_plus_rw", profile);
+                         cd_dvd_plus_rw = 1;
+                         break;
+                 case 0x2A:
+-                        log_debug("profile 0x%02x dvd_plus_rw_dl\n", profile);
++                        log_debug("profile 0x%02x dvd_plus_rw_dl", profile);
+                         cd_dvd_plus_rw_dl = 1;
+                         break;
+                 case 0x2B:
+-                        log_debug("profile 0x%02x dvd_plus_r_dl\n", profile);
++                        log_debug("profile 0x%02x dvd_plus_r_dl", profile);
+                         cd_dvd_plus_r_dl = 1;
+                         break;
+                 case 0x40:
+                         cd_bd = 1;
+-                        log_debug("profile 0x%02x bd\n", profile);
++                        log_debug("profile 0x%02x bd", profile);
+                         break;
+                 case 0x41:
+                 case 0x42:
+                         cd_bd_r = 1;
+-                        log_debug("profile 0x%02x bd_r\n", profile);
++                        log_debug("profile 0x%02x bd_r", profile);
+                         break;
+                 case 0x43:
+                         cd_bd_re = 1;
+-                        log_debug("profile 0x%02x bd_re\n", profile);
++                        log_debug("profile 0x%02x bd_re", profile);
+                         break;
+                 case 0x50:
+                         cd_hddvd = 1;
+-                        log_debug("profile 0x%02x hddvd\n", profile);
++                        log_debug("profile 0x%02x hddvd", profile);
+                         break;
+                 case 0x51:
+                         cd_hddvd_r = 1;
+-                        log_debug("profile 0x%02x hddvd_r\n", profile);
++                        log_debug("profile 0x%02x hddvd_r", profile);
+                         break;
+                 case 0x52:
+                         cd_hddvd_rw = 1;
+-                        log_debug("profile 0x%02x hddvd_rw\n", profile);
++                        log_debug("profile 0x%02x hddvd_rw", profile);
+                         break;
+                 default:
+-                        log_debug("profile 0x%02x <ignored>\n", profile);
++                        log_debug("profile 0x%02x <ignored>", profile);
+                         break;
+                 }
+         }
+@@ -507,13 +507,13 @@ static int cd_profiles_old_mmc(struct udev *udev, int fd)
+         if ((err != 0)) {
+                 info_scsi_cmd_err(udev, "READ DISC INFORMATION", err);
+                 if (cd_media == 1) {
+-                        log_debug("no current profile, but disc is present; assuming CD-ROM\n");
++                        log_debug("no current profile, but disc is present; assuming CD-ROM");
+                         cd_media_cd_rom = 1;
+                         cd_media_track_count = 1;
+                         cd_media_track_count_data = 1;
+                         return 0;
+                 } else {
+-                        log_debug("no current profile, assuming no media\n");
++                        log_debug("no current profile, assuming no media");
+                         return -1;
+                 }
+         };
+@@ -522,13 +522,13 @@ static int cd_profiles_old_mmc(struct udev *udev, int fd)
+ 
+         if (header[2] & 16) {
+                 cd_media_cd_rw = 1;
+-                log_debug("profile 0x0a media_cd_rw\n");
++                log_debug("profile 0x0a media_cd_rw");
+         } else if ((header[2] & 3) < 2 && cd_cd_r) {
+                 cd_media_cd_r = 1;
+-                log_debug("profile 0x09 media_cd_r\n");
++                log_debug("profile 0x09 media_cd_r");
+         } else {
+                 cd_media_cd_rom = 1;
+-                log_debug("profile 0x08 media_cd_rom\n");
++                log_debug("profile 0x08 media_cd_rom");
+         }
+         return 0;
+ }
+@@ -556,8 +556,8 @@ static int cd_profiles(struct udev *udev, int fd)
+                 info_scsi_cmd_err(udev, "GET CONFIGURATION", err);
+                 /* handle pre-MMC2 drives which do not support GET CONFIGURATION */
+                 if (SK(err) == 0x5 && ASC(err) == 0x20) {
+-                        log_debug("drive is pre-MMC2 and does not support 46h get configuration command\n");
+-                        log_debug("trying to work around the problem\n");
++                        log_debug("drive is pre-MMC2 and does not support 46h get configuration command");
++                        log_debug("trying to work around the problem");
+                         ret = cd_profiles_old_mmc(udev, fd);
+                 }
+                 goto out;
+@@ -565,18 +565,18 @@ static int cd_profiles(struct udev *udev, int fd)
+ 
+         cur_profile = features[6] << 8 | features[7];
+         if (cur_profile > 0) {
+-                log_debug("current profile 0x%02x\n", cur_profile);
++                log_debug("current profile 0x%02x", cur_profile);
+                 feature_profile_media (udev, cur_profile);
+                 ret = 0; /* we have media */
+         } else {
+-                log_debug("no current profile, assuming no media\n");
++                log_debug("no current profile, assuming no media");
+         }
+ 
+         len = features[0] << 24 | features[1] << 16 | features[2] << 8 | features[3];
+-        log_debug("GET CONFIGURATION: size of features buffer 0x%04x\n", len);
++        log_debug("GET CONFIGURATION: size of features buffer 0x%04x", len);
+ 
+         if (len > sizeof(features)) {
+-                log_debug("can not get features in a single query, truncating\n");
++                log_debug("can not get features in a single query, truncating");
+                 len = sizeof(features);
+         } else if (len <= 8) {
+                 len = sizeof(features);
+@@ -596,10 +596,10 @@ static int cd_profiles(struct udev *udev, int fd)
+ 
+         /* parse the length once more, in case the drive decided to have other features suddenly :) */
+         len = features[0] << 24 | features[1] << 16 | features[2] << 8 | features[3];
+-        log_debug("GET CONFIGURATION: size of features buffer 0x%04x\n", len);
++        log_debug("GET CONFIGURATION: size of features buffer 0x%04x", len);
+ 
+         if (len > sizeof(features)) {
+-                log_debug("can not get features in a single query, truncating\n");
++                log_debug("can not get features in a single query, truncating");
+                 len = sizeof(features);
+         }
+ 
+@@ -611,11 +611,11 @@ static int cd_profiles(struct udev *udev, int fd)
+ 
+                 switch (feature) {
+                 case 0x00:
+-                        log_debug("GET CONFIGURATION: feature 'profiles', with %i entries\n", features[i+3] / 4);
++                        log_debug("GET CONFIGURATION: feature 'profiles', with %i entries", features[i+3] / 4);
+                         feature_profiles(udev, &features[i]+4, features[i+3]);
+                         break;
+                 default:
+-                        log_debug("GET CONFIGURATION: feature 0x%04x <ignored>, with 0x%02x bytes\n", feature, features[i+3]);
++                        log_debug("GET CONFIGURATION: feature 0x%04x <ignored>, with 0x%02x bytes", feature, features[i+3]);
+                         break;
+                 }
+         }
+@@ -646,8 +646,8 @@ static int cd_media_info(struct udev *udev, int fd)
+         };
+ 
+         cd_media = 1;
+-        log_debug("disk type %02x\n", header[8]);
+-        log_debug("hardware reported media status: %s\n", media_status[header[2] & 3]);
++        log_debug("disk type %02x", header[8]);
++        log_debug("hardware reported media status: %s", media_status[header[2] & 3]);
+ 
+         /* exclude plain CDROM, some fake cdroms return 0 for "blank" media here */
+         if (!cd_media_cd_rom)
+@@ -685,7 +685,7 @@ static int cd_media_info(struct udev *udev, int fd)
+                         }
+                         if (dvdstruct[4] & 0x02) {
+                                 cd_media_state = media_status[2];
+-                                log_debug("write-protected DVD-RAM media inserted\n");
++                                log_debug("write-protected DVD-RAM media inserted");
+                                 goto determined;
+                         }
+ 
+@@ -702,13 +702,13 @@ static int cd_media_info(struct udev *udev, int fd)
+ 
+                         len = format[3];
+                         if (len & 7 || len < 16) {
+-                                log_debug("invalid format capacities length\n");
++                                log_debug("invalid format capacities length");
+                                 return -1;
+                         }
+ 
+                         switch(format[8] & 3) {
+                             case 1:
+-                                log_debug("unformatted DVD-RAM media inserted\n");
++                                log_debug("unformatted DVD-RAM media inserted");
+                                 /* This means that last format was interrupted
+                                  * or failed, blank dvd-ram discs are factory
+                                  * formatted. Take no action here as it takes
+@@ -717,12 +717,12 @@ static int cd_media_info(struct udev *udev, int fd)
+                                 goto determined;
+ 
+                             case 2:
+-                                log_debug("formatted DVD-RAM media inserted\n");
++                                log_debug("formatted DVD-RAM media inserted");
+                                 break;
+ 
+                             case 3:
+                                 cd_media = 0; //return no media
+-                                log_debug("format capacities returned no media\n");
++                                log_debug("format capacities returned no media");
+                                 return -1;
+                         }
+                 }
+@@ -758,9 +758,9 @@ static int cd_media_info(struct udev *udev, int fd)
+ 
+                 if (!result) {
+                         cd_media_state = media_status[0];
+-                        log_debug("no data in blocks 0 or 16, assuming blank\n");
++                        log_debug("no data in blocks 0 or 16, assuming blank");
+                 } else {
+-                        log_debug("data in blocks 0 or 16, assuming complete\n");
++                        log_debug("data in blocks 0 or 16, assuming complete");
+                 }
+         }
+ 
+@@ -796,7 +796,7 @@ static int cd_media_toc(struct udev *udev, int fd)
+         }
+ 
+         len = (header[0] << 8 | header[1]) + 2;
+-        log_debug("READ TOC: len: %d, start track: %d, end track: %d\n", len, header[2], header[3]);
++        log_debug("READ TOC: len: %d, start track: %d, end track: %d", len, header[2], header[3]);
+         if (len > sizeof(toc))
+                 return -1;
+         if (len < 2)
+@@ -830,7 +830,7 @@ static int cd_media_toc(struct udev *udev, int fd)
+                 is_data_track = (p[1] & 0x04) != 0;
+ 
+                 block = p[4] << 24 | p[5] << 16 | p[6] << 8 | p[7];
+-                log_debug("track=%u info=0x%x(%s) start_block=%u\n",
++                log_debug("track=%u info=0x%x(%s) start_block=%u",
+                      p[2], p[1] & 0x0f, is_data_track ? "data":"audio", block);
+ 
+                 if (is_data_track)
+@@ -850,7 +850,7 @@ static int cd_media_toc(struct udev *udev, int fd)
+                 return -1;
+         }
+         len = header[4+4] << 24 | header[4+5] << 16 | header[4+6] << 8 | header[4+7];
+-        log_debug("last track %u starts at block %u\n", header[4+2], len);
++        log_debug("last track %u starts at block %u", header[4+2], len);
+         cd_media_session_last_offset = (unsigned long long int)len * 2048;
+         return 0;
+ }
+@@ -919,7 +919,7 @@ int main(int argc, char *argv[])
+ 
+         node = argv[optind];
+         if (!node) {
+-                log_error("no device\n");
++                log_error("no device");
+                 fprintf(stderr, "no device\n");
+                 rc = 1;
+                 goto exit;
+@@ -937,12 +937,12 @@ int main(int argc, char *argv[])
+                 nanosleep(&duration, NULL);
+         }
+         if (fd < 0) {
+-                log_debug("unable to open '%s'\n", node);
++                log_debug("unable to open '%s'", node);
+                 fprintf(stderr, "unable to open '%s'\n", node);
+                 rc = 1;
+                 goto exit;
+         }
+-        log_debug("probing: '%s'\n", node);
++        log_debug("probing: '%s'", node);
+ 
+         /* same data as original cdrom_id */
+         if (cd_capability_compat(udev, fd) < 0) {
+@@ -973,19 +973,19 @@ int main(int argc, char *argv[])
+ work:
+         /* lock the media, so we enable eject button events */
+         if (lock && cd_media) {
+-                log_debug("PREVENT_ALLOW_MEDIUM_REMOVAL (lock)\n");
++                log_debug("PREVENT_ALLOW_MEDIUM_REMOVAL (lock)");
+                 media_lock(udev, fd, true);
+         }
+ 
+         if (unlock && cd_media) {
+-                log_debug("PREVENT_ALLOW_MEDIUM_REMOVAL (unlock)\n");
++                log_debug("PREVENT_ALLOW_MEDIUM_REMOVAL (unlock)");
+                 media_lock(udev, fd, false);
+         }
+ 
+         if (eject) {
+-                log_debug("PREVENT_ALLOW_MEDIUM_REMOVAL (unlock)\n");
++                log_debug("PREVENT_ALLOW_MEDIUM_REMOVAL (unlock)");
+                 media_lock(udev, fd, false);
+-                log_debug("START_STOP_UNIT (eject)\n");
++                log_debug("START_STOP_UNIT (eject)");
+                 media_eject(udev, fd);
+         }
+ 
+diff --git a/src/udev/udev-builtin-blkid.c b/src/udev/udev-builtin-blkid.c
+index b48dccc..c806bd6 100644
+--- a/src/udev/udev-builtin-blkid.c
++++ b/src/udev/udev-builtin-blkid.c
+@@ -190,7 +190,7 @@ static int builtin_blkid(struct udev_device *dev, int argc, char *argv[], bool t
+         if (err < 0)
+                 goto out;
+ 
+-        log_debug("probe %s %sraid offset=%llu\n",
++        log_debug("probe %s %sraid offset=%llu",
+                   udev_device_get_devnode(dev),
+                   noraid ? "no" : "", (unsigned long long) offset);
+ 
+diff --git a/src/udev/udev-builtin-firmware.c b/src/udev/udev-builtin-firmware.c
+index b80940b..8cfeed6 100644
+--- a/src/udev/udev-builtin-firmware.c
++++ b/src/udev/udev-builtin-firmware.c
+@@ -33,7 +33,7 @@ static bool set_loading(struct udev *udev, char *loadpath, const char *state)
+ 
+         ldfile = fopen(loadpath, "we");
+         if (ldfile == NULL) {
+-                log_error("error: can not open '%s'\n", loadpath);
++                log_error("error: can not open '%s'", loadpath);
+                 return false;
+         };
+         fprintf(ldfile, "%s\n", state);
+@@ -53,7 +53,7 @@ static bool copy_firmware(struct udev *udev, const char *source, const char *tar
+                 return false;
+         }
+ 
+-        log_debug("writing '%s' (%zi) to '%s'\n", source, size, target);
++        log_debug("writing '%s' (%zi) to '%s'", source, size, target);
+ 
+         fsource = fopen(source, "re");
+         if (fsource == NULL)
+@@ -90,7 +90,7 @@ static int builtin_firmware(struct udev_device *dev, int argc, char *argv[], boo
+ 
+         firmware = udev_device_get_property_value(dev, "FIRMWARE");
+         if (firmware == NULL) {
+-                log_error("firmware parameter missing\n\n");
++                log_error("firmware parameter missing");
+                 rc = EXIT_FAILURE;
+                 goto exit;
+         }
+@@ -112,7 +112,7 @@ static int builtin_firmware(struct udev_device *dev, int argc, char *argv[], boo
+         strscpyl(loadpath, sizeof(loadpath), udev_device_get_syspath(dev), "/loading", NULL);
+ 
+         if (fwfile == NULL) {
+-                log_debug("did not find firmware file '%s'\n", firmware);
++                log_debug("did not find firmware file '%s'", firmware);
+                 rc = EXIT_FAILURE;
+                 /*
+                  * Do not cancel the request in the initrd, the real root might have
+@@ -136,7 +136,7 @@ static int builtin_firmware(struct udev_device *dev, int argc, char *argv[], boo
+ 
+         strscpyl(datapath, sizeof(datapath), udev_device_get_syspath(dev), "/data", NULL);
+         if (!copy_firmware(udev, fwpath, datapath, statbuf.st_size)) {
+-                log_error("error sending firmware '%s' to device\n", firmware);
++                log_error("error sending firmware '%s' to device", firmware);
+                 set_loading(udev, loadpath, "-1");
+                 rc = EXIT_FAILURE;
+                 goto exit;
+diff --git a/src/udev/udev-builtin-input_id.c b/src/udev/udev-builtin-input_id.c
+index 445b602..4691fc0 100644
+--- a/src/udev/udev-builtin-input_id.c
++++ b/src/udev/udev-builtin-input_id.c
+@@ -57,7 +57,7 @@ static void get_cap_mask(struct udev_device *dev,
+         unsigned long val;
+ 
+         snprintf(text, sizeof(text), "%s", udev_device_get_sysattr_value(pdev, attr));
+-        log_debug("%s raw kernel attribute: %s\n", attr, text);
++        log_debug("%s raw kernel attribute: %s", attr, text);
+ 
+         memset (bitmask, 0, bitmask_size);
+         i = 0;
+@@ -66,7 +66,7 @@ static void get_cap_mask(struct udev_device *dev,
+                 if (i < bitmask_size/sizeof(unsigned long))
+                         bitmask[i] = val;
+                 else
+-                        log_debug("ignoring %s block %lX which is larger than maximum size\n", attr, val);
++                        log_debug("ignoring %s block %lX which is larger than maximum size", attr, val);
+                 *word = '\0';
+                 ++i;
+         }
+@@ -74,12 +74,12 @@ static void get_cap_mask(struct udev_device *dev,
+         if (i < bitmask_size / sizeof(unsigned long))
+                 bitmask[i] = val;
+         else
+-                log_debug("ignoring %s block %lX which is larger than maximum size\n", attr, val);
++                log_debug("ignoring %s block %lX which is larger than maximum size", attr, val);
+ 
+         if (test) {
+                 /* printf pattern with the right unsigned long number of hex chars */
+                 snprintf(text, sizeof(text), "  bit %%4u: %%0%zilX\n", 2 * sizeof(unsigned long));
+-                log_debug("%s decoded bit map:\n", attr);
++                log_debug("%s decoded bit map:", attr);
+                 val = bitmask_size / sizeof (unsigned long);
+                 /* skip over leading zeros */
+                 while (bitmask[val-1] == 0 && val > 0)
+@@ -151,7 +151,7 @@ static void test_key (struct udev_device *dev,
+ 
+         /* do we have any KEY_* capability? */
+         if (!test_bit (EV_KEY, bitmask_ev)) {
+-                log_debug("test_key: no EV_KEY capability\n");
++                log_debug("test_key: no EV_KEY capability");
+                 return;
+         }
+ 
+@@ -159,13 +159,13 @@ static void test_key (struct udev_device *dev,
+         found = 0;
+         for (i = 0; i < BTN_MISC/BITS_PER_LONG; ++i) {
+                 found |= bitmask_key[i];
+-                log_debug("test_key: checking bit block %lu for any keys; found=%i\n", (unsigned long)i*BITS_PER_LONG, found > 0);
++                log_debug("test_key: checking bit block %lu for any keys; found=%i", (unsigned long)i*BITS_PER_LONG, found > 0);
+         }
+         /* If there are no keys in the lower block, check the higher block */
+         if (!found) {
+                 for (i = KEY_OK; i < BTN_TRIGGER_HAPPY; ++i) {
+                         if (test_bit (i, bitmask_key)) {
+-                                log_debug("test_key: Found key %x in high block\n", i);
++                                log_debug("test_key: Found key %x in high block", i);
+                                 found = 1;
+                                 break;
+                         }
+diff --git a/src/udev/udev-builtin-kmod.c b/src/udev/udev-builtin-kmod.c
+index fc28121..097f881 100644
+--- a/src/udev/udev-builtin-kmod.c
++++ b/src/udev/udev-builtin-kmod.c
+@@ -44,18 +44,18 @@ static int load_module(struct udev *udev, const char *alias)
+                 return err;
+ 
+         if (list == NULL)
+-                log_debug("no module matches '%s'\n", alias);
++                log_debug("no module matches '%s'", alias);
+ 
+         kmod_list_foreach(l, list) {
+                 struct kmod_module *mod = kmod_module_get_module(l);
+ 
+                 err = kmod_module_probe_insert_module(mod, KMOD_PROBE_APPLY_BLACKLIST, NULL, NULL, NULL, NULL);
+                 if (err == KMOD_PROBE_APPLY_BLACKLIST)
+-                        log_debug("module '%s' is blacklisted\n", kmod_module_get_name(mod));
++                        log_debug("module '%s' is blacklisted", kmod_module_get_name(mod));
+                 else if (err == 0)
+-                        log_debug("inserted '%s'\n", kmod_module_get_name(mod));
++                        log_debug("inserted '%s'", kmod_module_get_name(mod));
+                 else
+-                        log_debug("failed to insert '%s'\n", kmod_module_get_name(mod));
++                        log_debug("failed to insert '%s'", kmod_module_get_name(mod));
+ 
+                 kmod_module_unref(mod);
+         }
+@@ -79,12 +79,12 @@ static int builtin_kmod(struct udev_device *dev, int argc, char *argv[], bool te
+                 return 0;
+ 
+         if (argc < 3 || !streq(argv[1], "load")) {
+-                log_error("expect: %s load <module>\n", argv[0]);
++                log_error("expect: %s load <module>", argv[0]);
+                 return EXIT_FAILURE;
+         }
+ 
+         for (i = 2; argv[i]; i++) {
+-                log_debug("execute '%s' '%s'\n", argv[1], argv[i]);
++                log_debug("execute '%s' '%s'", argv[1], argv[i]);
+                 load_module(udev, argv[i]);
+         }
+ 
+@@ -101,7 +101,7 @@ static int builtin_kmod_init(struct udev *udev)
+         if (!ctx)
+                 return -ENOMEM;
+ 
+-        log_debug("load module index\n");
++        log_debug("load module index");
+         kmod_set_log_fn(ctx, udev_kmod_log, udev);
+         kmod_load_resources(ctx);
+         return 0;
+@@ -110,14 +110,14 @@ static int builtin_kmod_init(struct udev *udev)
+ /* called on udev shutdown and reload request */
+ static void builtin_kmod_exit(struct udev *udev)
+ {
+-        log_debug("unload module index\n");
++        log_debug("unload module index");
+         ctx = kmod_unref(ctx);
+ }
+ 
+ /* called every couple of seconds during event activity; 'true' if config has changed */
+ static bool builtin_kmod_validate(struct udev *udev)
+ {
+-        log_debug("validate module index\n");
++        log_debug("validate module index");
+         if (!ctx)
+                 return false;
+         return (kmod_validate_resources(ctx) != KMOD_RESOURCES_OK);
+diff --git a/src/udev/udev-builtin-usb_id.c b/src/udev/udev-builtin-usb_id.c
+index 3e2f43e..1b9f824 100644
+--- a/src/udev/udev-builtin-usb_id.c
++++ b/src/udev/udev-builtin-usb_id.c
+@@ -275,7 +275,7 @@ static int builtin_usb_id(struct udev_device *dev, int argc, char *argv[], bool
+         /* usb interface directory */
+         dev_interface = udev_device_get_parent_with_subsystem_devtype(dev, "usb", "usb_interface");
+         if (dev_interface == NULL) {
+-                log_debug("unable to access usb_interface device of '%s'\n",
++                log_debug("unable to access usb_interface device of '%s'",
+                      udev_device_get_syspath(dev));
+                 return EXIT_FAILURE;
+         }
+@@ -285,7 +285,7 @@ static int builtin_usb_id(struct udev_device *dev, int argc, char *argv[], bool
+ 
+         if_class = udev_device_get_sysattr_value(dev_interface, "bInterfaceClass");
+         if (!if_class) {
+-                log_debug("%s: cannot get bInterfaceClass attribute\n",
++                log_debug("%s: cannot get bInterfaceClass attribute",
+                      udev_device_get_sysname(dev));
+                 return EXIT_FAILURE;
+         }
+@@ -300,13 +300,13 @@ static int builtin_usb_id(struct udev_device *dev, int argc, char *argv[], bool
+                 set_usb_iftype(type_str, if_class_num, sizeof(type_str)-1);
+         }
+ 
+-        log_debug("%s: if_class %d protocol %d\n",
++        log_debug("%s: if_class %d protocol %d",
+              udev_device_get_syspath(dev_interface), if_class_num, protocol);
+ 
+         /* usb device directory */
+         dev_usb = udev_device_get_parent_with_subsystem_devtype(dev_interface, "usb", "usb_device");
+         if (!dev_usb) {
+-                log_debug("unable to find parent 'usb' device of '%s'\n",
++                log_debug("unable to find parent 'usb' device of '%s'",
+                      udev_device_get_syspath(dev));
+                 return EXIT_FAILURE;
+         }
+@@ -323,19 +323,19 @@ static int builtin_usb_id(struct udev_device *dev, int argc, char *argv[], bool
+                 /* get scsi device */
+                 dev_scsi = udev_device_get_parent_with_subsystem_devtype(dev, "scsi", "scsi_device");
+                 if (dev_scsi == NULL) {
+-                        log_debug("unable to find parent 'scsi' device of '%s'\n",
++                        log_debug("unable to find parent 'scsi' device of '%s'",
+                              udev_device_get_syspath(dev));
+                         goto fallback;
+                 }
+                 if (sscanf(udev_device_get_sysname(dev_scsi), "%d:%d:%d:%d", &host, &bus, &target, &lun) != 4) {
+-                        log_debug("invalid scsi device '%s'\n", udev_device_get_sysname(dev_scsi));
++                        log_debug("invalid scsi device '%s'", udev_device_get_sysname(dev_scsi));
+                         goto fallback;
+                 }
+ 
+                 /* Generic SPC-2 device */
+                 scsi_vendor = udev_device_get_sysattr_value(dev_scsi, "vendor");
+                 if (!scsi_vendor) {
+-                        log_debug("%s: cannot get SCSI vendor attribute\n",
++                        log_debug("%s: cannot get SCSI vendor attribute",
+                              udev_device_get_sysname(dev_scsi));
+                         goto fallback;
+                 }
+@@ -345,7 +345,7 @@ static int builtin_usb_id(struct udev_device *dev, int argc, char *argv[], bool
+ 
+                 scsi_model = udev_device_get_sysattr_value(dev_scsi, "model");
+                 if (!scsi_model) {
+-                        log_debug("%s: cannot get SCSI model attribute\n",
++                        log_debug("%s: cannot get SCSI model attribute",
+                              udev_device_get_sysname(dev_scsi));
+                         goto fallback;
+                 }
+@@ -355,7 +355,7 @@ static int builtin_usb_id(struct udev_device *dev, int argc, char *argv[], bool
+ 
+                 scsi_type = udev_device_get_sysattr_value(dev_scsi, "type");
+                 if (!scsi_type) {
+-                        log_debug("%s: cannot get SCSI type attribute\n",
++                        log_debug("%s: cannot get SCSI type attribute",
+                              udev_device_get_sysname(dev_scsi));
+                         goto fallback;
+                 }
+@@ -363,7 +363,7 @@ static int builtin_usb_id(struct udev_device *dev, int argc, char *argv[], bool
+ 
+                 scsi_rev = udev_device_get_sysattr_value(dev_scsi, "rev");
+                 if (!scsi_rev) {
+-                        log_debug("%s: cannot get SCSI revision attribute\n",
++                        log_debug("%s: cannot get SCSI revision attribute",
+                              udev_device_get_sysname(dev_scsi));
+                         goto fallback;
+                 }
+@@ -389,7 +389,7 @@ fallback:
+                 if (!usb_vendor)
+                         usb_vendor = vendor_id;
+                 if (!usb_vendor) {
+-                        log_debug("No USB vendor information available\n");
++                        log_debug("No USB vendor information available");
+                         return EXIT_FAILURE;
+                 }
+                 udev_util_encode_string(usb_vendor, vendor_str_enc, sizeof(vendor_str_enc));
+diff --git a/src/udev/udev-ctrl.c b/src/udev/udev-ctrl.c
+index e60da90..1898685 100644
+--- a/src/udev/udev-ctrl.c
++++ b/src/udev/udev-ctrl.c
+@@ -84,7 +84,7 @@ struct udev_ctrl *udev_ctrl_new_from_fd(struct udev *udev, int fd)
+         if (fd < 0) {
+                 uctrl->sock = socket(AF_LOCAL, SOCK_SEQPACKET|SOCK_NONBLOCK|SOCK_CLOEXEC, 0);
+                 if (uctrl->sock < 0) {
+-                        log_error("error getting socket: %m\n");
++                        log_error("error getting socket: %m");
+                         udev_ctrl_unref(uctrl);
+                         return NULL;
+                 }
+@@ -118,14 +118,14 @@ int udev_ctrl_enable_receiving(struct udev_ctrl *uctrl)
+ 
+                 if (err < 0) {
+                         err = -errno;
+-                        log_error("bind failed: %m\n");
++                        log_error("bind failed: %m");
+                         return err;
+                 }
+ 
+                 err = listen(uctrl->sock, 0);
+                 if (err < 0) {
+                         err = -errno;
+-                        log_error("listen failed: %m\n");
++                        log_error("listen failed: %m");
+                         return err;
+                 }
+ 
+@@ -193,7 +193,7 @@ struct udev_ctrl_connection *udev_ctrl_get_connection(struct udev_ctrl *uctrl)
+         conn->sock = accept4(uctrl->sock, NULL, NULL, SOCK_CLOEXEC|SOCK_NONBLOCK);
+         if (conn->sock < 0) {
+                 if (errno != EINTR)
+-                        log_error("unable to receive ctrl connection: %m\n");
++                        log_error("unable to receive ctrl connection: %m");
+                 goto err;
+         }
+ 
+@@ -204,7 +204,7 @@ struct udev_ctrl_connection *udev_ctrl_get_connection(struct udev_ctrl *uctrl)
+                 goto err;
+         }
+         if (ucred.uid > 0) {
+-                log_error("sender uid=%i, message ignored\n", ucred.uid);
++                log_error("sender uid=%i, message ignored", ucred.uid);
+                 goto err;
+         }
+ 
+@@ -367,11 +367,11 @@ struct udev_ctrl_msg *udev_ctrl_receive_msg(struct udev_ctrl_connection *conn)
+                                 continue;
+                         goto err;
+                 } else if (r == 0) {
+-                        log_error("timeout waiting for ctrl message\n");
++                        log_error("timeout waiting for ctrl message");
+                         goto err;
+                 } else {
+                         if (!(pfd[0].revents & POLLIN)) {
+-                                log_error("ctrl connection error: %m\n");
++                                log_error("ctrl connection error: %m");
+                                 goto err;
+                         }
+                 }
+@@ -388,24 +388,24 @@ struct udev_ctrl_msg *udev_ctrl_receive_msg(struct udev_ctrl_connection *conn)
+         smsg.msg_controllen = sizeof(cred_msg);
+         size = recvmsg(conn->sock, &smsg, 0);
+         if (size <  0) {
+-                log_error("unable to receive ctrl message: %m\n");
++                log_error("unable to receive ctrl message: %m");
+                 goto err;
+         }
+         cmsg = CMSG_FIRSTHDR(&smsg);
+         cred = (struct ucred *) CMSG_DATA(cmsg);
+ 
+         if (cmsg == NULL || cmsg->cmsg_type != SCM_CREDENTIALS) {
+-                log_error("no sender credentials received, message ignored\n");
++                log_error("no sender credentials received, message ignored");
+                 goto err;
+         }
+ 
+         if (cred->uid != 0) {
+-                log_error("sender uid=%i, message ignored\n", cred->uid);
++                log_error("sender uid=%i, message ignored", cred->uid);
+                 goto err;
+         }
+ 
+         if (uctrl_msg->ctrl_msg_wire.magic != UDEV_CTRL_MAGIC) {
+-                log_error("message magic 0x%08x doesn't match, ignore it\n", uctrl_msg->ctrl_msg_wire.magic);
++                log_error("message magic 0x%08x doesn't match, ignore it", uctrl_msg->ctrl_msg_wire.magic);
+                 goto err;
+         }
+ 
+diff --git a/src/udev/udev-node.c b/src/udev/udev-node.c
+index 1148a15..ca3d781 100644
+--- a/src/udev/udev-node.c
++++ b/src/udev/udev-node.c
+@@ -65,7 +65,7 @@ static int node_symlink(struct udev_device *dev, const char *node, const char *s
+         /* preserve link with correct target, do not replace node of other device */
+         if (lstat(slink, &stats) == 0) {
+                 if (S_ISBLK(stats.st_mode) || S_ISCHR(stats.st_mode)) {
+-                        log_error("conflicting device node '%s' found, link to '%s' will not be created\n", slink, node);
++                        log_error("conflicting device node '%s' found, link to '%s' will not be created", slink, node);
+                         goto exit;
+                 } else if (S_ISLNK(stats.st_mode)) {
+                         char buf[UTIL_PATH_SIZE];
+@@ -75,7 +75,7 @@ static int node_symlink(struct udev_device *dev, const char *node, const char *s
+                         if (len > 0 && len < (int)sizeof(buf)) {
+                                 buf[len] = '\0';
+                                 if (streq(target, buf)) {
+-                                        log_debug("preserve already existing symlink '%s' to '%s'\n", slink, target);
++                                        log_debug("preserve already existing symlink '%s' to '%s'", slink, target);
+                                         label_fix(slink, true, false);
+                                         utimensat(AT_FDCWD, slink, NULL, AT_SYMLINK_NOFOLLOW);
+                                         goto exit;
+@@ -83,7 +83,7 @@ static int node_symlink(struct udev_device *dev, const char *node, const char *s
+                         }
+                 }
+         } else {
+-                log_debug("creating symlink '%s' to '%s'\n", slink, target);
++                log_debug("creating symlink '%s' to '%s'", slink, target);
+                 do {
+                         err = mkdir_parents_label(slink, 0755);
+                         if (err != 0 && err != -ENOENT)
+@@ -98,7 +98,7 @@ static int node_symlink(struct udev_device *dev, const char *node, const char *s
+                         goto exit;
+         }
+ 
+-        log_debug("atomically replace '%s'\n", slink);
++        log_debug("atomically replace '%s'", slink);
+         strscpyl(slink_tmp, sizeof(slink_tmp), slink, ".tmp-", udev_device_get_id_filename(dev), NULL);
+         unlink(slink_tmp);
+         do {
+@@ -112,12 +112,12 @@ static int node_symlink(struct udev_device *dev, const char *node, const char *s
+                 label_context_clear();
+         } while (err == -ENOENT);
+         if (err != 0) {
+-                log_error("symlink '%s' '%s' failed: %m\n", target, slink_tmp);
++                log_error("symlink '%s' '%s' failed: %m", target, slink_tmp);
+                 goto exit;
+         }
+         err = rename(slink_tmp, slink);
+         if (err != 0) {
+-                log_error("rename '%s' '%s' failed: %m\n", slink_tmp, slink);
++                log_error("rename '%s' '%s' failed: %m", slink_tmp, slink);
+                 unlink(slink_tmp);
+         }
+ exit:
+@@ -151,7 +151,7 @@ static const char *link_find_prioritized(struct udev_device *dev, bool add, cons
+                 if (dent->d_name[0] == '.')
+                         continue;
+ 
+-                log_debug("found '%s' claiming '%s'\n", dent->d_name, stackdir);
++                log_debug("found '%s' claiming '%s'", dent->d_name, stackdir);
+ 
+                 /* did we find ourself? */
+                 if (streq(dent->d_name, udev_device_get_id_filename(dev)))
+@@ -164,7 +164,7 @@ static const char *link_find_prioritized(struct udev_device *dev, bool add, cons
+                         devnode = udev_device_get_devnode(dev_db);
+                         if (devnode != NULL) {
+                                 if (target == NULL || udev_device_get_devlink_priority(dev_db) > priority) {
+-                                        log_debug("'%s' claims priority %i for '%s'\n",
++                                        log_debug("'%s' claims priority %i for '%s'",
+                                                   udev_device_get_syspath(dev_db), udev_device_get_devlink_priority(dev_db), stackdir);
+                                         priority = udev_device_get_devlink_priority(dev_db);
+                                         strscpy(buf, bufsize, devnode);
+@@ -197,11 +197,11 @@ static void link_update(struct udev_device *dev, const char *slink, bool add)
+ 
+         target = link_find_prioritized(dev, add, dirname, buf, sizeof(buf));
+         if (target == NULL) {
+-                log_debug("no reference left, remove '%s'\n", slink);
++                log_debug("no reference left, remove '%s'", slink);
+                 if (unlink(slink) == 0)
+                         util_delete_path(udev, slink);
+         } else {
+-                log_debug("creating link '%s' to '%s'\n", slink, target);
++                log_debug("creating link '%s' to '%s'", slink, target);
+                 node_symlink(dev, target, slink);
+         }
+ 
+@@ -246,7 +246,7 @@ void udev_node_update_old_links(struct udev_device *dev, struct udev_device *dev
+                 if (found)
+                         continue;
+ 
+-                log_debug("update old name, '%s' no longer belonging to '%s'\n",
++                log_debug("update old name, '%s' no longer belonging to '%s'",
+                      name, udev_device_get_devpath(dev));
+                 link_update(dev, name, false);
+         }
+@@ -266,24 +266,24 @@ static int node_permissions_apply(struct udev_device *dev, bool apply, mode_t mo
+ 
+         if (lstat(devnode, &stats) != 0) {
+                 err = -errno;
+-                log_debug("can not stat() node '%s' (%m)\n", devnode);
++                log_debug("can not stat() node '%s' (%m)", devnode);
+                 goto out;
+         }
+ 
+         if (((stats.st_mode & S_IFMT) != (mode & S_IFMT)) || (stats.st_rdev != devnum)) {
+                 err = -EEXIST;
+-                log_debug("found node '%s' with non-matching devnum %s, skip handling\n",
++                log_debug("found node '%s' with non-matching devnum %s, skip handling",
+                           udev_device_get_devnode(dev), udev_device_get_id_filename(dev));
+                 goto out;
+         }
+ 
+         if (apply) {
+                 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);
++                        log_debug("set permissions %s, %#o, uid=%u, gid=%u", 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);
++                        log_debug("preserve permissions %s, %#o, uid=%u, gid=%u", devnode, mode, uid, gid);
+                 }
+                 label_fix(devnode, true, false);
+         }
+@@ -299,7 +299,7 @@ void udev_node_add(struct udev_device *dev, bool apply, mode_t mode, uid_t uid,
+         char filename[UTIL_PATH_SIZE];
+         struct udev_list_entry *list_entry;
+ 
+-        log_debug("handling device node '%s', devnum=%s, mode=%#o, uid=%d, gid=%d\n",
++        log_debug("handling device node '%s', devnum=%s, mode=%#o, uid=%d, gid=%d",
+                   udev_device_get_devnode(dev), udev_device_get_id_filename(dev), mode, uid, gid);
+ 
+         if (node_permissions_apply(dev, apply, mode, uid, gid) < 0)
+diff --git a/src/udev/udev-watch.c b/src/udev/udev-watch.c
+index 9b694c6..cbe0c37 100644
+--- a/src/udev/udev-watch.c
++++ b/src/udev/udev-watch.c
+@@ -40,7 +40,7 @@ int udev_watch_init(struct udev *udev)
+ {
+         inotify_fd = inotify_init1(IN_CLOEXEC);
+         if (inotify_fd < 0)
+-                log_error("inotify_init failed: %m\n");
++                log_error("inotify_init failed: %m");
+         return inotify_fd;
+ }
+ 
+@@ -79,7 +79,7 @@ void udev_watch_restore(struct udev *udev)
+                         if (dev == NULL)
+                                 goto unlink;
+ 
+-                        log_debug("restoring old watch on '%s'\n", udev_device_get_devnode(dev));
++                        log_debug("restoring old watch on '%s'", udev_device_get_devnode(dev));
+                         udev_watch_begin(udev, dev);
+                         udev_device_unref(dev);
+ unlink:
+@@ -103,10 +103,10 @@ void udev_watch_begin(struct udev *udev, struct udev_device *dev)
+         if (inotify_fd < 0)
+                 return;
+ 
+-        log_debug("adding watch on '%s'\n", udev_device_get_devnode(dev));
++        log_debug("adding watch on '%s'", udev_device_get_devnode(dev));
+         wd = inotify_add_watch(inotify_fd, udev_device_get_devnode(dev), IN_CLOSE_WRITE);
+         if (wd < 0) {
+-                log_error("inotify_add_watch(%d, %s, %o) failed: %m\n",
++                log_error("inotify_add_watch(%d, %s, %o) failed: %m",
+                     inotify_fd, udev_device_get_devnode(dev), IN_CLOSE_WRITE);
+                 return;
+         }
+@@ -133,7 +133,7 @@ void udev_watch_end(struct udev *udev, struct udev_device *dev)
+         if (wd < 0)
+                 return;
+ 
+-        log_debug("removing watch on '%s'\n", udev_device_get_devnode(dev));
++        log_debug("removing watch on '%s'", udev_device_get_devnode(dev));
+         inotify_rm_watch(inotify_fd, wd);
+ 
+         snprintf(filename, sizeof(filename), "/run/udev/watch/%d", wd);
+diff --git a/src/udev/udevadm-hwdb.c b/src/udev/udevadm-hwdb.c
+index d9dc73b..fe56758 100644
+--- a/src/udev/udevadm-hwdb.c
++++ b/src/udev/udevadm-hwdb.c
+@@ -389,17 +389,17 @@ static int trie_store(struct trie *trie, const char *filename) {
+                 goto out;
+         }
+ 
+-        log_debug("=== trie on-disk ===\n");
+-        log_debug("size:             %8llu bytes\n", (unsigned long long)size);
+-        log_debug("header:           %8zu bytes\n", sizeof(struct trie_header_f));
+-        log_debug("nodes:            %8llu bytes (%8llu)\n",
++        log_debug("=== trie on-disk ===");
++        log_debug("size:             %8llu bytes", (unsigned long long)size);
++        log_debug("header:           %8zu bytes", sizeof(struct trie_header_f));
++        log_debug("nodes:            %8llu bytes (%8llu)",
+                   (unsigned long long)t.nodes_count * sizeof(struct trie_node_f), (unsigned long long)t.nodes_count);
+-        log_debug("child pointers:   %8llu bytes (%8llu)\n",
++        log_debug("child pointers:   %8llu bytes (%8llu)",
+                   (unsigned long long)t.children_count * sizeof(struct trie_child_entry_f), (unsigned long long)t.children_count);
+-        log_debug("value pointers:   %8llu bytes (%8llu)\n",
++        log_debug("value pointers:   %8llu bytes (%8llu)",
+                   (unsigned long long)t.values_count * sizeof(struct trie_value_entry_f), (unsigned long long)t.values_count);
+-        log_debug("string store:     %8llu bytes\n", (unsigned long long)trie->strings->len);
+-        log_debug("strings start:    %8llu\n", (unsigned long long) t.strings_off);
++        log_debug("string store:     %8llu bytes", (unsigned long long)trie->strings->len);
++        log_debug("strings start:    %8llu", (unsigned long long) t.strings_off);
+ out:
+         free(filename_tmp);
+         return err;
+@@ -412,7 +412,7 @@ static int insert_data(struct trie *trie, struct udev_list *match_list,
+ 
+         value = strchr(line, '=');
+         if (!value) {
+-                log_error("Error, key/value pair expected but got '%s' in '%s':\n", line, filename);
++                log_error("Error, key/value pair expected but got '%s' in '%s':", line, filename);
+                 return -EINVAL;
+         }
+ 
+@@ -420,7 +420,7 @@ static int insert_data(struct trie *trie, struct udev_list *match_list,
+         value++;
+ 
+         if (line[0] == '\0' || value[0] == '\0') {
+-                log_error("Error, empty key or value '%s' in '%s':\n", line, filename);
++                log_error("Error, empty key or value '%s' in '%s':", line, filename);
+                 return -EINVAL;
+         }
+ 
+@@ -471,7 +471,7 @@ static int import_file(struct udev *udev, struct trie *trie, const char *filenam
+                                 break;
+ 
+                         if (line[0] == ' ') {
+-                                log_error("Error, MATCH expected but got '%s' in '%s':\n", line, filename);
++                                log_error("Error, MATCH expected but got '%s' in '%s':", line, filename);
+                                 break;
+                         }
+ 
+@@ -482,7 +482,7 @@ static int import_file(struct udev *udev, struct trie *trie, const char *filenam
+ 
+                 case HW_MATCH:
+                         if (len == 0) {
+-                                log_error("Error, DATA expected but got empty line in '%s':\n", filename);
++                                log_error("Error, DATA expected but got empty line in '%s':", filename);
+                                 state = HW_NONE;
+                                 udev_list_cleanup(&match_list);
+                                 break;
+@@ -508,7 +508,7 @@ static int import_file(struct udev *udev, struct trie *trie, const char *filenam
+                         }
+ 
+                         if (line[0] != ' ') {
+-                                log_error("Error, DATA expected but got '%s' in '%s':\n", line, filename);
++                                log_error("Error, DATA expected but got '%s' in '%s':", line, filename);
+                                 state = HW_NONE;
+                                 udev_list_cleanup(&match_list);
+                                 break;
+@@ -602,7 +602,7 @@ static int adm_hwdb(struct udev *udev, int argc, char *argv[]) {
+ 
+                 err = conf_files_list_strv(&files, ".hwdb", root, conf_file_dirs);
+                 if (err < 0) {
+-                        log_error("failed to enumerate hwdb files: %s\n", strerror(-err));
++                        log_error("failed to enumerate hwdb files: %s", strerror(-err));
+                         rc = EXIT_FAILURE;
+                         goto out;
+                 }
+@@ -614,18 +614,18 @@ static int adm_hwdb(struct udev *udev, int argc, char *argv[]) {
+ 
+                 strbuf_complete(trie->strings);
+ 
+-                log_debug("=== trie in-memory ===\n");
+-                log_debug("nodes:            %8zu bytes (%8zu)\n",
++                log_debug("=== trie in-memory ===");
++                log_debug("nodes:            %8zu bytes (%8zu)",
+                           trie->nodes_count * sizeof(struct trie_node), trie->nodes_count);
+-                log_debug("children arrays:  %8zu bytes (%8zu)\n",
++                log_debug("children arrays:  %8zu bytes (%8zu)",
+                           trie->children_count * sizeof(struct trie_child_entry), trie->children_count);
+-                log_debug("values arrays:    %8zu bytes (%8zu)\n",
++                log_debug("values arrays:    %8zu bytes (%8zu)",
+                           trie->values_count * sizeof(struct trie_value_entry), trie->values_count);
+-                log_debug("strings:          %8zu bytes\n",
++                log_debug("strings:          %8zu bytes",
+                           trie->strings->len);
+-                log_debug("strings incoming: %8zu bytes (%8zu)\n",
++                log_debug("strings incoming: %8zu bytes (%8zu)",
+                           trie->strings->in_len, trie->strings->in_count);
+-                log_debug("strings dedup'ed: %8zu bytes (%8zu)\n",
++                log_debug("strings dedup'ed: %8zu bytes (%8zu)",
+                           trie->strings->dedup_len, trie->strings->dedup_count);
+ 
+                 if (asprintf(&hwdb_bin, "%s/etc/udev/hwdb.bin", root) < 0) {
+diff --git a/src/udev/udevadm-settle.c b/src/udev/udevadm-settle.c
+index c4fc4ee..a131e3f 100644
+--- a/src/udev/udevadm-settle.c
++++ b/src/udev/udevadm-settle.c
+@@ -113,20 +113,20 @@ static int adm_settle(struct udev *udev, int argc, char *argv[])
+                         end = udev_queue_get_kernel_seqnum(udev_queue);
+ 
+                 if (start > end) {
+-                        log_error("seq-start larger than seq-end, ignoring\n");
++                        log_error("seq-start larger than seq-end, ignoring");
+                         start = 0;
+                         end = 0;
+                 }
+ 
+                 if (start > kernel_seq || end > kernel_seq) {
+-                        log_error("seq-start or seq-end larger than current kernel value, ignoring\n");
++                        log_error("seq-start or seq-end larger than current kernel value, ignoring");
+                         start = 0;
+                         end = 0;
+                 }
+-                log_debug("start=%llu end=%llu current=%llu\n", (unsigned long long)start, (unsigned long long)end, kernel_seq);
++                log_debug("start=%llu end=%llu current=%llu", (unsigned long long)start, (unsigned long long)end, kernel_seq);
+         } else {
+                 if (end > 0) {
+-                        log_error("seq-end needs seq-start parameter, ignoring\n");
++                        log_error("seq-end needs seq-start parameter, ignoring");
+                         end = 0;
+                 }
+         }
+@@ -138,7 +138,7 @@ static int adm_settle(struct udev *udev, int argc, char *argv[])
+                 uctrl = udev_ctrl_new(udev);
+                 if (uctrl != NULL) {
+                         if (udev_ctrl_send_ping(uctrl, timeout) < 0) {
+-                                log_debug("no connection to daemon\n");
++                                log_debug("no connection to daemon");
+                                 udev_ctrl_unref(uctrl);
+                                 rc = EXIT_SUCCESS;
+                                 goto out;
+@@ -150,10 +150,10 @@ static int adm_settle(struct udev *udev, int argc, char *argv[])
+         pfd[0].events = POLLIN;
+         pfd[0].fd = inotify_init1(IN_CLOEXEC);
+         if (pfd[0].fd < 0) {
+-                log_error("inotify_init failed: %m\n");
++                log_error("inotify_init failed: %m");
+         } else {
+                 if (inotify_add_watch(pfd[0].fd, "/run/udev" , IN_MOVED_TO) < 0) {
+-                        log_error("watching /run/udev failed\n");
++                        log_error("watching /run/udev failed");
+                         close(pfd[0].fd);
+                         pfd[0].fd = -1;
+                 }
+@@ -206,7 +206,7 @@ static int adm_settle(struct udev *udev, int argc, char *argv[])
+                                 struct udev_list_entry *list_entry;
+ 
+                                 if (!quiet && udev_queue_get_queued_list_entry(udev_queue) != NULL) {
+-                                        log_debug("timeout waiting for udev queue\n");
++                                        log_debug("timeout waiting for udev queue");
+                                         printf("\nudevadm settle - timeout of %i seconds reached, the event queue contains:\n", timeout);
+                                         udev_list_entry_foreach(list_entry, udev_queue_get_queued_list_entry(udev_queue))
+                                                 printf("  %s (%s)\n",
+diff --git a/src/udev/udevadm-test.c b/src/udev/udevadm-test.c
+index df1409b..3aa3274 100644
+--- a/src/udev/udevadm-test.c
++++ b/src/udev/udevadm-test.c
+@@ -52,7 +52,7 @@ static int adm_test(struct udev *udev, int argc, char *argv[])
+                 {}
+         };
+ 
+-        log_debug("version %s\n", VERSION);
++        log_debug("version %s", VERSION);
+ 
+         for (;;) {
+                 int option;
+@@ -74,7 +74,7 @@ static int adm_test(struct udev *udev, int argc, char *argv[])
+                                 resolve_names = -1;
+                         } else {
+                                 fprintf(stderr, "resolve-names must be early, late or never\n");
+-                                log_error("resolve-names must be early, late or never\n");
++                                log_error("resolve-names must be early, late or never");
+                                 exit(EXIT_FAILURE);
+                         }
+                         break;
+diff --git a/src/udev/udevadm.c b/src/udev/udevadm.c
+index e14b3ca..dbca369 100644
+--- a/src/udev/udevadm.c
++++ b/src/udev/udevadm.c
+@@ -79,7 +79,7 @@ static int run_command(struct udev *udev, const struct udevadm_cmd *cmd, int arg
+ {
+         if (cmd->debug)
+                 log_set_max_level(LOG_DEBUG);
+-        log_debug("calling: %s\n", cmd->name);
++        log_debug("calling: %s", cmd->name);
+         return cmd->cmd(udev, argc, argv);
+ }
+ 
diff --git a/0196-man-units-tmpfiles.d-5-cleanup.patch b/0196-man-units-tmpfiles.d-5-cleanup.patch
new file mode 100644
index 0000000..fd8eb7b
--- /dev/null
+++ b/0196-man-units-tmpfiles.d-5-cleanup.patch
@@ -0,0 +1,401 @@
+From 6972095a2b6eb919b622a89d11e0dc823ed60efb Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Tue, 24 Dec 2013 10:21:45 -0500
+Subject: [PATCH] man,units: tmpfiles.d(5) cleanup
+
+Condition for /lib (necessary for split /usr) was missing from the unit.
+
+Some changes which were done in tmpfiles.d(5) were not carried over to
+systemd-tmpfiles(1).
+
+Also use markup where possible.
+
+Conflicts:
+	man/tmpfiles.d.xml
+---
+ man/systemd-tmpfiles.xml                |  53 ++++++----
+ man/tmpfiles.d.xml                      | 168 +++++++++++++++++++-------------
+ units/systemd-tmpfiles-setup.service.in |   1 +
+ 3 files changed, 134 insertions(+), 88 deletions(-)
+
+diff --git a/man/systemd-tmpfiles.xml b/man/systemd-tmpfiles.xml
+index ba727e1..91c0372 100644
+--- a/man/systemd-tmpfiles.xml
++++ b/man/systemd-tmpfiles.xml
+@@ -54,7 +54,9 @@
+ 
+         <refsynopsisdiv>
+                 <cmdsynopsis>
+-                        <command>systemd-tmpfiles <arg choice="opt" rep="repeat">OPTIONS</arg> <arg choice="opt" rep="repeat">CONFIGURATION FILE</arg></command>
++                        <command>systemd-tmpfiles</command>
++                        <arg choice="opt" rep="repeat">OPTIONS</arg>
++                        <arg choice="opt" rep="repeat"><replaceable>CONFIGFILE</replaceable></arg>
+                 </cmdsynopsis>
+ 
+                 <para><filename>systemd-tmpfiles-setup.service</filename></para>
+@@ -67,22 +69,20 @@
+                 <title>Description</title>
+ 
+                 <para><command>systemd-tmpfiles</command> creates,
+-                deletes and cleans up volatile and temporary files and
++                deletes, and cleans up volatile and temporary files and
+                 directories, based on the configuration file format and
+-                location specified in <citerefentry>
+-                        <refentrytitle>tmpfiles.d</refentrytitle>
+-                        <manvolnum>5</manvolnum>
+-                </citerefentry>.</para>
++                location specified in
++                <citerefentry><refentrytitle>tmpfiles.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
++                </para>
+ 
+                 <para>If invoked with no arguments, it applies all
+                 directives from all configuration files. If one or
+                 more filenames are passed on the command line, only
+                 the directives in these files are applied. If only
+                 the basename of a configuration file is specified,
+-                all configuration directories as specified in <citerefentry>
+-                        <refentrytitle>tmpfiles.d</refentrytitle>
+-                        <manvolnum>5</manvolnum>
+-                </citerefentry> are searched for a matching file.</para>
++                all configuration directories as specified in
++                <citerefentry><refentrytitle>tmpfiles.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>
++                are searched for a matching file.</para>
+         </refsect1>
+ 
+         <refsect1>
+@@ -94,12 +94,25 @@
+ 
+                         <varlistentry>
+                                 <term><option>--create</option></term>
+-                                <listitem><para>If this option is passed, all
+-                                files and directories marked with f,
+-                                F, d, D in the configuration files are
+-                                created. Files and directories marked with z,
+-                                Z have their ownership, access mode and security
+-                                labels set.</para></listitem>
++                                <listitem><para>If this option is
++                                passed, all files and directories
++                                marked with <varname>f</varname>,
++                                <varname>F</varname>,
++                                <varname>w</varname>,
++                                <varname>d</varname>,
++                                <varname>D</varname>,
++                                <varname>p</varname>,
++                                <varname>L</varname>,
++                                <varname>c</varname>,
++                                <varname>b</varname>,
++                                <varname>m</varname> in the
++                                configuration files are created or
++                                written to. Files and directories
++                                marked with <varname>z</varname>,
++                                <varname>Z</varname>,
++                                <varname>m</varname> have their
++                                ownership, access mode and security
++                                labels set. </para></listitem>
+                         </varlistentry>
+ 
+                         <varlistentry>
+@@ -113,9 +126,11 @@
+                         <varlistentry>
+                                 <term><option>--remove</option></term>
+                                 <listitem><para>If this option is
+-                                passed, all files and directories marked
+-                                with r, R in the configuration files
+-                                are removed.</para></listitem>
++                                passed, all files and directories
++                                marked with <varname>r</varname>,
++                                <varname>R</varname> in the
++                                configuration files are
++                                removed.</para></listitem>
+                         </varlistentry>
+                         <varlistentry>
+                                 <term><option>--prefix=PATH</option></term>
+diff --git a/man/tmpfiles.d.xml b/man/tmpfiles.d.xml
+index e8b630d..a00637b 100644
+--- a/man/tmpfiles.d.xml
++++ b/man/tmpfiles.d.xml
+@@ -67,23 +67,32 @@
+                 <title>Configuration Format</title>
+ 
+                 <para>Each configuration file shall be named in the
+-                style of <filename>&lt;package&gt;.conf</filename>.
+-                Files in <filename>/etc/</filename> override files
+-                with the same name in <filename>/usr/lib/</filename>
+-                and <filename>/run/</filename>.  Files in
+-                <filename>/run/</filename> override files with the same
+-                name in <filename>/usr/lib/</filename>. Packages
++                style of
++                <filename><replaceable>package</replaceable>.conf</filename>
++                or
++                <filename><replaceable>package</replaceable>-<replaceable>part</replaceable>.conf</filename>.
++                The second variant should be used when it is desirable
++                to make it easy to override just this part of
++                configuration.</para>
++
++                <para>Files in <filename>/etc/tmpfiles.d</filename>
++                override files with the same name in
++                <filename>/usr/lib/tmpfiles.d</filename> and
++                <filename>/run/tmpfiles.d</filename>. Files in
++                <filename>/run/tmpfiles.d</filename> override files
++                with the same name in
++                <filename>/usr/lib/tmpfiles.d</filename>. Packages
+                 should install their configuration files in
+-                <filename>/usr/lib/</filename>. Files in
+-                <filename>/etc/</filename> are reserved for the local
+-                administrator, who may use this logic to override the
+-                configuration files installed by vendor packages. All
+-                configuration files are sorted by their filename in
+-                lexicographic order, regardless in which of the
+-                directories they reside. If multiple files specify the
+-                same path, the entry in the file with the lexicographically
+-                earliest name will be applied, all all other conflicting
+-                entries logged as errors.</para>
++                <filename>/usr/lib/tmpfiles.d</filename>. Files in
++                <filename>/etc/tmpfiles.d</filename> are reserved for
++                the local administrator, who may use this logic to
++                override the configuration files installed by vendor
++                packages. All configuration files are sorted by their
++                filename in lexicographic order, regardless in which
++                of the directories they reside. If multiple files
++                specify the same path, the entry in the file with the
++                lexicographically earliest name will be applied, all
++                all other conflicting entries logged as errors.</para>
+ 
+                 <para>If the administrator wants to disable a
+                 configuration file supplied by the vendor, the
+@@ -93,10 +102,10 @@
+                 same filename.</para>
+ 
+                 <para>The configuration format is one line per path
+-                containing action, path, mode, ownership, age and argument
++                containing type, path, mode, ownership, age, and argument
+                 fields:</para>
+ 
+-                <programlisting>Type Path        Mode UID  GID  Age Argument
++                <programlisting>#Type Path        Mode UID  GID  Age Argument
+ d    /run/user   0755 root root 10d -
+ L    /tmp/foobar -    -    -    -   /dev/null</programlisting>
+ 
+@@ -109,12 +118,12 @@ L    /tmp/foobar -    -    -    -   /dev/null</programlisting>
+                         <variablelist>
+                                 <varlistentry>
+                                         <term><varname>f</varname></term>
+-                                        <listitem><para>Create a file if it does not exist yet (optionally writing a short string into it, if the argument parameter is passed)</para></listitem>
++                                        <listitem><para>Create a file if it does not exist yet. If the argument parameter is given, it will be written to the file.</para></listitem>
+                                 </varlistentry>
+ 
+                                 <varlistentry>
+                                         <term><varname>F</varname></term>
+-                                        <listitem><para>Create or truncate a file (optionally writing a short string into it, if the argument parameter is passed)</para></listitem>
++                                        <listitem><para>Create or truncate a file. If the argument parameter is given, it will be written to the file.</para></listitem>
+                                 </varlistentry>
+ 
+                                 <varlistentry>
+@@ -127,32 +136,32 @@ L    /tmp/foobar -    -    -    -   /dev/null</programlisting>
+ 
+                                 <varlistentry>
+                                         <term><varname>d</varname></term>
+-                                        <listitem><para>Create a directory if it does not exist yet</para></listitem>
++                                        <listitem><para>Create a directory if it does not exist yet.</para></listitem>
+                                 </varlistentry>
+ 
+                                 <varlistentry>
+                                         <term><varname>D</varname></term>
+-                                        <listitem><para>Create or empty a directory</para></listitem>
++                                        <listitem><para>Create or empty a directory.</para></listitem>
+                                 </varlistentry>
+ 
+                                 <varlistentry>
+                                         <term><varname>p</varname></term>
+-                                        <listitem><para>Create a named pipe (FIFO) if it does not exist yet</para></listitem>
++                                        <listitem><para>Create a named pipe (FIFO) if it does not exist yet.</para></listitem>
+                                 </varlistentry>
+ 
+                                 <varlistentry>
+                                         <term><varname>L</varname></term>
+-                                        <listitem><para>Create a symlink if it does not exist yet</para></listitem>
++                                        <listitem><para>Create a symlink if it does not exist yet.</para></listitem>
+                                 </varlistentry>
+ 
+                                 <varlistentry>
+                                         <term><varname>c</varname></term>
+-                                        <listitem><para>Create a character device node if it does not exist yet</para></listitem>
++                                        <listitem><para>Create a character device node if it does not exist yet.</para></listitem>
+                                 </varlistentry>
+ 
+                                 <varlistentry>
+                                         <term><varname>b</varname></term>
+-                                        <listitem><para>Create a block device node if it does not exist yet</para></listitem>
++                                        <listitem><para>Create a block device node if it does not exist yet.</para></listitem>
+                                 </varlistentry>
+ 
+                                 <varlistentry>
+@@ -174,11 +183,12 @@ L    /tmp/foobar -    -    -    -   /dev/null</programlisting>
+                                         as controlled with the Age
+                                         parameter. Note that lines of
+                                         this type do not influence the
+-                                        effect of r or R lines. Lines
+-                                        of this type accept
++                                        effect of <varname>r</varname>
++                                        or <varname>R</varname> lines.
++                                        Lines of this type accept
+                                         shell-style globs in place of
+-                                        normal path
+-                                        names.</para></listitem>
++                                        normal path names.
++                                        </para></listitem>
+                                 </varlistentry>
+ 
+                                 <varlistentry>
+@@ -187,28 +197,31 @@ L    /tmp/foobar -    -    -    -   /dev/null</programlisting>
+                                         during cleaning. Use this type
+                                         to exclude paths from clean-up
+                                         as controlled with the Age
+-                                        parameter. Unlike x this
++                                        parameter. Unlike
++                                        <varname>x</varname>, this
+                                         parameter will not exclude the
+-                                        content if path is a directory,
+-                                        but only directory itself.
+-                                        Note that lines of this type do
+-                                        not influence the effect of r
+-                                        or R lines. Lines of this type
+-                                        accept shell-style globs in
+-                                        place of normal path
+-                                        names.</para></listitem>
++                                        content if path is a
++                                        directory, but only directory
++                                        itself. Note that lines of
++                                        this type do not influence the
++                                        effect of <varname>r</varname>
++                                        or <varname>R</varname> lines.
++                                        Lines of this type accept
++                                        shell-style globs in place of
++                                        normal path names.
++                                        </para></listitem>
+                                 </varlistentry>
+ 
+                                 <varlistentry>
+                                         <term><varname>r</varname></term>
+                                         <listitem><para>Remove a file
+-                                        or directory if it
+-                                        exists. This may not be used
+-                                        to remove non-empty
+-                                        directories, use R for
+-                                        that. Lines of this type
+-                                        accept shell-style globs in
+-                                        place of normal path
++                                        or directory if it exists.
++                                        This may not be used to remove
++                                        non-empty directories, use
++                                        <varname>R</varname> for that.
++                                        Lines of this type accept
++                                        shell-style globs in place of
++                                        normal path
+                                         names.</para></listitem>
+                                 </varlistentry>
+ 
+@@ -308,11 +321,14 @@ L    /tmp/foobar -    -    -    -   /dev/null</programlisting>
+                         <para>The file access mode to use when
+                         creating this file or directory. If omitted or
+                         when set to -, the default is used: 0755 for
+-                        directories, 0644 for all other file
+-                        objects. For z, Z lines, if omitted or when set
+-                        to -, the file access mode will not be
+-                        modified. This parameter is ignored for x, r,
+-                        R, L lines.</para>
++                        directories, 0644 for all other file objects.
++                        For <varname>z</varname>, <varname>Z</varname>
++                        lines, if omitted or when set to
++                        <literal>-</literal>, the file access mode
++                        will not be modified. This parameter is
++                        ignored for <varname>x</varname>,
++                        <varname>r</varname>, <varname>R</varname>,
++                        <varname>L</varname> lines.</para>
+                 </refsect2>
+ 
+                 <refsect2>
+@@ -321,10 +337,15 @@ L    /tmp/foobar -    -    -    -   /dev/null</programlisting>
+                         <para>The user and group to use for this file
+                         or directory. This may either be a numeric
+                         user/group ID or a user or group name. If
+-                        omitted or when set to -, the default 0 (root)
+-                        is used. For z, Z lines, when omitted or when set to -,
+-                        the file ownership will not be modified.
+-                        These parameters are ignored for x, r, R, L lines.</para>
++                        omitted or when set to <literal>-</literal>,
++                        the default 0 (root) is used. For
++                        <varname>z</varname>, <varname>Z</varname>
++                        lines, when omitted or when set to -, the file
++                        ownership will not be modified. These
++                        parameters are ignored for
++                        <varname>x</varname>, <varname>r</varname>,
++                        <varname>R</varname>, <varname>L</varname>
++                        lines.</para>
+                 </refsect2>
+ 
+                 <refsect2>
+@@ -357,28 +378,37 @@ L    /tmp/foobar -    -    -    -   /dev/null</programlisting>
+                         <para>When the age is set to zero, the files are cleaned
+                         unconditionally.</para>
+ 
+-                        <para>The age field only applies to lines starting with
+-                        d, D and x. If omitted or set to -, no automatic clean-up
+-                        is done.</para>
++                        <para>The age field only applies to lines
++                        starting with <varname>d</varname>,
++                        <varname>D</varname>, and
++                        <varname>x</varname>. If omitted or set to
++                        <literal>-</literal>, no automatic clean-up is
++                        done.</para>
+ 
+                         <para>If the age field starts with a tilde
+-                        character (~), the clean-up is only applied to
+-                        files and directories one level inside the
+-                        directory specified, but not the files and
+-                        directories immediately inside it.</para>
++                        character <literal>~</literal>, the clean-up
++                        is only applied to files and directories one
++                        level inside the directory specified, but not
++                        the files and directories immediately inside
++                        it.</para>
+                 </refsect2>
+ 
+                 <refsect2>
+                         <title>Argument</title>
+ 
+-                        <para>For L lines determines the destination
+-                        path of the symlink. For c, b determines the
++                        <para>For <varname>L</varname> lines
++                        determines the destination path of the
++                        symlink. For <varname>c</varname>,
++                        <varname>b</varname> determines the
+                         major/minor of the device node, with major and
+-                        minor formatted as integers, separated by :,
+-                        e.g. "1:3". For f, F, w may be used to specify
+-                        a short string that is written to the file,
+-                        suffixed by a newline. Ignored for all other
+-                        lines.</para>
++                        minor formatted as integers, separated by
++                        <literal>:</literal>, e.g.
++                        <literal>1:3</literal>. For
++                        <varname>f</varname>, <varname>F</varname>,
++                        and <varname>w</varname> may be used to
++                        specify a short string that is written to the
++                        file, suffixed by a newline. Ignored for all
++                        other lines.</para>
+                 </refsect2>
+ 
+         </refsect1>
+diff --git a/units/systemd-tmpfiles-setup.service.in b/units/systemd-tmpfiles-setup.service.in
+index 6f98063..3405e28 100644
+--- a/units/systemd-tmpfiles-setup.service.in
++++ b/units/systemd-tmpfiles-setup.service.in
+@@ -14,6 +14,7 @@ Conflicts=shutdown.target
+ After=systemd-readahead-collect.service systemd-readahead-replay.service local-fs.target
+ Before=sysinit.target shutdown.target
+ ConditionDirectoryNotEmpty=|/usr/lib/tmpfiles.d
++ConditionDirectoryNotEmpty=|/lib/tmpfiles.d
+ ConditionDirectoryNotEmpty=|/usr/local/lib/tmpfiles.d
+ ConditionDirectoryNotEmpty=|/etc/tmpfiles.d
+ ConditionDirectoryNotEmpty=|/run/tmpfiles.d
diff --git a/0197-tmpfiles-introduce-the-concept-of-unsafe-operations.patch b/0197-tmpfiles-introduce-the-concept-of-unsafe-operations.patch
new file mode 100644
index 0000000..bfe7f21
--- /dev/null
+++ b/0197-tmpfiles-introduce-the-concept-of-unsafe-operations.patch
@@ -0,0 +1,281 @@
+From 66b1ee20b814b02cd0fb73fec4a2a9b11defc607 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Fri, 20 Dec 2013 20:25:39 -0500
+Subject: [PATCH] tmpfiles: introduce the concept of unsafe operations
+
+Various operations done by systemd-tmpfiles may only be safely done at
+boot (e.g. removal of X lockfiles in /tmp, creation of /run/nologin).
+Other operations may be done at any point in time (e.g. setting the
+ownership on /{run,var}/log/journal). This distinction is largely
+orthogonal to the type of operation.
+
+A new switch --unsafe is added, and operations which should only be
+executed during bootup are marked with an exclamation mark in the
+configuration files. systemd-tmpfiles.service is modified to use this
+switch, and guards are added so it is hard to re-start it by mistake.
+
+If we install a new version of systemd, we actually want to enforce
+some changes to tmpfiles configuration immediately. This should now be
+possible to do safely, so distribution packages can be modified to
+execute the "safe" subset at package installation time.
+
+/run/nologin creation is split out into a separate service, to make it
+easy to override.
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1043212
+https://bugzilla.redhat.com/show_bug.cgi?id=1045849
+---
+ Makefile.am                             |  1 +
+ man/systemd-tmpfiles.xml                |  6 ++++++
+ man/tmpfiles.d.xml                      | 25 +++++++++++++++++++++++++
+ src/tmpfiles/tmpfiles.c                 | 22 +++++++++++++++++++---
+ tmpfiles.d/legacy.conf                  |  6 +++---
+ tmpfiles.d/systemd-nologin.conf         | 11 +++++++++++
+ tmpfiles.d/systemd.conf                 |  4 +---
+ tmpfiles.d/x11.conf                     |  2 +-
+ units/systemd-tmpfiles-setup.service.in |  6 ++++--
+ 9 files changed, 71 insertions(+), 12 deletions(-)
+ create mode 100644 tmpfiles.d/systemd-nologin.conf
+
+diff --git a/Makefile.am b/Makefile.am
+index 16a5c3c..6233a7f 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -1599,6 +1599,7 @@ nodist_systemunit_DATA += \
+ 
+ dist_tmpfiles_DATA = \
+ 	tmpfiles.d/systemd.conf \
++	tmpfiles.d/systemd-nologin.conf \
+ 	tmpfiles.d/tmp.conf \
+ 	tmpfiles.d/x11.conf
+ 
+diff --git a/man/systemd-tmpfiles.xml b/man/systemd-tmpfiles.xml
+index 91c0372..495247e 100644
+--- a/man/systemd-tmpfiles.xml
++++ b/man/systemd-tmpfiles.xml
+@@ -133,6 +133,12 @@
+                                 removed.</para></listitem>
+                         </varlistentry>
+                         <varlistentry>
++                                <term><option>--unsafe</option></term>
++                                <listitem><para>Also execute lines
++                                with an exclamation mark.
++                                </para></listitem>
++                        </varlistentry>
++                        <varlistentry>
+                                 <term><option>--prefix=PATH</option></term>
+                                 <listitem><para>Only apply rules that
+                                 apply to paths with the specified
+diff --git a/man/tmpfiles.d.xml b/man/tmpfiles.d.xml
+index a00637b..39aa68d 100644
+--- a/man/tmpfiles.d.xml
++++ b/man/tmpfiles.d.xml
+@@ -113,6 +113,9 @@ L    /tmp/foobar -    -    -    -   /dev/null</programlisting>
+                 <refsect2>
+                         <title>Type</title>
+ 
++                        <para>The type consists of a single letter and
++                        optionally an exclamation mark.</para>
++
+                         <para>The following line types are understood:</para>
+ 
+                         <variablelist>
+@@ -262,6 +265,28 @@ L    /tmp/foobar -    -    -    -   /dev/null</programlisting>
+                                         names.</para></listitem>
+                                 </varlistentry>
+                         </variablelist>
++
++                        <para>If the exclamation mark is used, this
++                        line is only safe of execute during boot, and
++                        can break a running system. Lines without the
++                        exclamation mark are presumed to be safe to
++                        execute at any time, e.g. on package upgrades.
++                        <command>systemd-tmpfiles</command> will
++                        execute line with an exclamation mark only if
++                        option <option>--unsafe</option> is given.
++                        </para>
++
++                        <para>For example:
++                        <programlisting>
++# Make sure these are created by default so that nobody else can
++d /tmp/.X11-unix 1777 root root 10d
++
++# Unlink the X11 lock files
++r! /tmp/.X[0-9]*-lock
++                        </programlisting>
++                        The second line in contrast to the first one
++                        would break a running system, and will only be
++                        executed with <option>--unsafe</option>.</para>
+                 </refsect2>
+ 
+                 <refsect2>
+diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c
+index 00f74c2..30a8a55 100644
+--- a/src/tmpfiles/tmpfiles.c
++++ b/src/tmpfiles/tmpfiles.c
+@@ -106,6 +106,7 @@ static Set *unix_sockets = NULL;
+ static bool arg_create = false;
+ static bool arg_clean = false;
+ static bool arg_remove = false;
++static bool arg_unsafe = false;
+ 
+ static char **include_prefixes = NULL;
+ static char **exclude_prefixes = NULL;
+@@ -1073,7 +1074,7 @@ static int parse_line(const char *fname, unsigned line, const char *buffer) {
+         _cleanup_item_free_ Item *i = NULL;
+         Item *existing;
+         _cleanup_free_ char
+-                *mode = NULL, *user = NULL, *group = NULL, *age = NULL, *path = NULL;
++                *action = NULL, *mode = NULL, *user = NULL, *group = NULL, *age = NULL, *path = NULL;
+         char type;
+         Hashmap *h;
+         int r, n = -1;
+@@ -1083,8 +1084,8 @@ static int parse_line(const char *fname, unsigned line, const char *buffer) {
+         assert(buffer);
+ 
+         r = sscanf(buffer,
+-                   "%c %ms %ms %ms %ms %ms %n",
+-                   &type,
++                   "%ms %ms %ms %ms %ms %ms %n",
++                   &action,
+                    &path,
+                    &mode,
+                    &user,
+@@ -1096,6 +1097,14 @@ static int parse_line(const char *fname, unsigned line, const char *buffer) {
+                 return -EIO;
+         }
+ 
++        if (strlen(action) > 2 || (strlen(action) > 1 && action[1] != '!')) {
++                log_error("[%s:%u] Unknown modifier '%s'", fname, line, action);
++                return -EINVAL;
++        } else if (strlen(action) > 1 && !arg_unsafe)
++                return 0;
++
++        type = action[0];
++
+         i = new0(Item, 1);
+         if (!i)
+                 return log_oom();
+@@ -1266,6 +1275,7 @@ static int help(void) {
+                "     --create               Create marked files/directories\n"
+                "     --clean                Clean up marked directories\n"
+                "     --remove               Remove marked files/directories\n"
++               "     --unsafe               Execute actions only safe at boot\n"
+                "     --prefix=PATH          Only apply rules that apply to paths with the specified prefix\n"
+                "     --exclude-prefix=PATH  Ignore rules that apply to paths with the specified prefix\n",
+                program_invocation_short_name);
+@@ -1279,6 +1289,7 @@ static int parse_argv(int argc, char *argv[]) {
+                 ARG_CREATE,
+                 ARG_CLEAN,
+                 ARG_REMOVE,
++                ARG_UNSAFE,
+                 ARG_PREFIX,
+                 ARG_EXCLUDE_PREFIX,
+         };
+@@ -1288,6 +1299,7 @@ static int parse_argv(int argc, char *argv[]) {
+                 { "create",         no_argument,         NULL, ARG_CREATE         },
+                 { "clean",          no_argument,         NULL, ARG_CLEAN          },
+                 { "remove",         no_argument,         NULL, ARG_REMOVE         },
++                { "unsafe",         no_argument,         NULL, ARG_UNSAFE         },
+                 { "prefix",         required_argument,   NULL, ARG_PREFIX         },
+                 { "exclude-prefix", required_argument,   NULL, ARG_EXCLUDE_PREFIX },
+                 { NULL,             0,                   NULL, 0                  }
+@@ -1318,6 +1330,10 @@ static int parse_argv(int argc, char *argv[]) {
+                         arg_remove = true;
+                         break;
+ 
++                case ARG_UNSAFE:
++                        arg_unsafe = true;
++                        break;
++
+                 case ARG_PREFIX:
+                         if (strv_extend(&include_prefixes, optarg) < 0)
+                                 return log_oom();
+diff --git a/tmpfiles.d/legacy.conf b/tmpfiles.d/legacy.conf
+index 3fff347..a165687 100644
+--- a/tmpfiles.d/legacy.conf
++++ b/tmpfiles.d/legacy.conf
+@@ -29,6 +29,6 @@ d /run/lock/lockdev 0775 root lock -
+ # kernel command line options 'fsck.mode=force', 'fsck.mode=skip' and
+ # 'quotacheck.mode=force'
+ 
+-r /forcefsck
+-r /fastboot
+-r /forcequotacheck
++r! /forcefsck
++r! /fastboot
++r! /forcequotacheck
+diff --git a/tmpfiles.d/systemd-nologin.conf b/tmpfiles.d/systemd-nologin.conf
+new file mode 100644
+index 0000000..d61232b
+--- /dev/null
++++ b/tmpfiles.d/systemd-nologin.conf
+@@ -0,0 +1,11 @@
++#  This file is part of systemd.
++#
++#  systemd is free software; you can redistribute it and/or modify it
++#  under the terms of the GNU Lesser General Public License as published by
++#  the Free Software Foundation; either version 2.1 of the License, or
++#  (at your option) any later version.
++
++# See tmpfiles.d(5) and systemd-forbid-user-logins.service(5).
++# This file has special suffix so it is not run by mistake.
++
++F! /run/nologin 0644 - - - "System is booting up. See pam_nologin(8)"
+diff --git a/tmpfiles.d/systemd.conf b/tmpfiles.d/systemd.conf
+index a05c657..7c6d6b9 100644
+--- a/tmpfiles.d/systemd.conf
++++ b/tmpfiles.d/systemd.conf
+@@ -8,7 +8,7 @@
+ # See tmpfiles.d(5) for details
+ 
+ d /run/user 0755 root root ~10d
+-F /run/utmp 0664 root utmp -
++F! /run/utmp 0664 root utmp -
+ 
+ f /var/log/wtmp 0664 root utmp -
+ f /var/log/btmp 0600 root utmp -
+@@ -22,8 +22,6 @@ d /run/systemd/users 0755 root root -
+ d /run/systemd/machines 0755 root root -
+ d /run/systemd/shutdown 0755 root root -
+ 
+-F /run/nologin 0644 - - - "System is booting up. See pam_nologin(8)"
+-
+ m /var/log/journal 2755 root systemd-journal - -
+ m /var/log/journal/%m 2755 root systemd-journal - -
+ m /run/log/journal 2755 root systemd-journal - -
+diff --git a/tmpfiles.d/x11.conf b/tmpfiles.d/x11.conf
+index ece6a5c..4c96a54 100644
+--- a/tmpfiles.d/x11.conf
++++ b/tmpfiles.d/x11.conf
+@@ -15,4 +15,4 @@ d /tmp/.font-unix 1777 root root 10d
+ d /tmp/.Test-unix 1777 root root 10d
+ 
+ # Unlink the X11 lock files
+-r /tmp/.X[0-9]*-lock
++r! /tmp/.X[0-9]*-lock
+diff --git a/units/systemd-tmpfiles-setup.service.in b/units/systemd-tmpfiles-setup.service.in
+index 3405e28..c2dcae0 100644
+--- a/units/systemd-tmpfiles-setup.service.in
++++ b/units/systemd-tmpfiles-setup.service.in
+@@ -6,7 +6,7 @@
+ #  (at your option) any later version.
+ 
+ [Unit]
+-Description=Recreate Volatile Files and Directories
++Description=Create Volatile Files and Directories
+ Documentation=man:tmpfiles.d(5) man:systemd-tmpfiles(8)
+ DefaultDependencies=no
+ Wants=local-fs.target
+@@ -18,8 +18,10 @@ ConditionDirectoryNotEmpty=|/lib/tmpfiles.d
+ ConditionDirectoryNotEmpty=|/usr/local/lib/tmpfiles.d
+ ConditionDirectoryNotEmpty=|/etc/tmpfiles.d
+ ConditionDirectoryNotEmpty=|/run/tmpfiles.d
++RefuseManualStart=yes
++RefuseManualStop=yes
+ 
+ [Service]
+ Type=oneshot
+ RemainAfterExit=yes
+-ExecStart=@rootbindir@/systemd-tmpfiles --create --remove --exclude-prefix=/dev
++ExecStart=@rootbindir@/systemd-tmpfiles --create --remove --unsafe --exclude-prefix=/dev
diff --git a/0198-sleep-config-fix-useless-check-for-swapfile-type.patch b/0198-sleep-config-fix-useless-check-for-swapfile-type.patch
new file mode 100644
index 0000000..2871866
--- /dev/null
+++ b/0198-sleep-config-fix-useless-check-for-swapfile-type.patch
@@ -0,0 +1,43 @@
+From 5e86ba530ae6f7a4c9aec4069b0b8481003094c6 Mon Sep 17 00:00:00 2001
+From: Dave Reisner <dreisner at archlinux.org>
+Date: Tue, 24 Dec 2013 16:42:06 -0500
+Subject: [PATCH] sleep-config: fix useless check for swapfile type
+
+Since 0c6f1f4ea49 the check was useless, because the kernel will
+ever only write "partition" or "file" there.
+
+OTOH, it is possible that "\\040(deleted)" (escaped " (deleted)")
+will be added for removed files. This should not happen, so add
+a warning to detect those cases.
+---
+ src/shared/sleep-config.c | 10 +++-------
+ 1 file changed, 3 insertions(+), 7 deletions(-)
+
+diff --git a/src/shared/sleep-config.c b/src/shared/sleep-config.c
+index 2bb0493..d76e3ad 100644
+--- a/src/shared/sleep-config.c
++++ b/src/shared/sleep-config.c
+@@ -183,7 +183,7 @@ static int hibernation_partition_size(size_t *size, size_t *used) {
+         (void) fscanf(f, "%*s %*s %*s %*s %*s\n");
+ 
+         for (i = 1;; i++) {
+-                _cleanup_free_ char *dev = NULL, *d = NULL, *type = NULL;
++                _cleanup_free_ char *dev = NULL, *type = NULL;
+                 size_t size_field, used_field;
+                 int k;
+ 
+@@ -202,12 +202,8 @@ static int hibernation_partition_size(size_t *size, size_t *used) {
+                         continue;
+                 }
+ 
+-                d = cunescape(dev);
+-                if (!d)
+-                        return -ENOMEM;
+-
+-                if (!streq(type, "partition") && !streq(type, "file")) {
+-                        log_debug("Partition %s has type %s, ignoring.", d, type);
++                if (streq(type, "partition") && endswith(dev, "\\040(deleted)")) {
++                        log_warning("Ignoring deleted swapfile '%s'.", dev);
+                         continue;
+                 }
+ 
diff --git a/0199-journalctl-make-sure-b-foobar-cannot-be-misunderstoo.patch b/0199-journalctl-make-sure-b-foobar-cannot-be-misunderstoo.patch
new file mode 100644
index 0000000..08ec28f
--- /dev/null
+++ b/0199-journalctl-make-sure-b-foobar-cannot-be-misunderstoo.patch
@@ -0,0 +1,178 @@
+From 2c3dd6140293fb09b4c78b5db2dbcad35ee7d002 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Thu, 26 Dec 2013 01:52:01 +0100
+Subject: [PATCH] journalctl: make sure -b --foobar cannot be misunderstood as
+ --boot=--foobar
+
+Conflicts:
+	src/journal/journalctl.c
+	src/systemd/sd-bus.h
+---
+ src/journal/journalctl.c | 111 +++++++++++++++++++++++++----------------------
+ 1 file changed, 60 insertions(+), 51 deletions(-)
+
+diff --git a/src/journal/journalctl.c b/src/journal/journalctl.c
+index 1d66792..ccd96b2 100644
+--- a/src/journal/journalctl.c
++++ b/src/journal/journalctl.c
+@@ -72,7 +72,8 @@ static bool arg_no_tail = false;
+ static bool arg_quiet = false;
+ static bool arg_merge = false;
+ static bool arg_boot = false;
+-static char *arg_boot_descriptor = NULL;
++static sd_id128_t arg_boot_id = {};
++static int arg_boot_offset = 0;
+ static bool arg_dmesg = false;
+ static const char *arg_cursor = NULL;
+ static const char *arg_after_cursor = NULL;
+@@ -122,6 +123,41 @@ static void pager_open_if_enabled(void) {
+         pager_open(arg_pager_end);
+ }
+ 
++static int parse_boot_descriptor(const char *x, sd_id128_t *boot_id, int *offset) {
++        sd_id128_t id = SD_ID128_NULL;
++        int off = 0, r;
++
++        if (strlen(x) >= 32) {
++                char *t;
++
++                t = strndupa(x, 32);
++                r = sd_id128_from_string(t, &id);
++                if (r >= 0)
++                        x += 32;
++
++                if (*x != '-' && *x != '+' && *x != 0)
++                        return -EINVAL;
++
++                if (*x != 0) {
++                        r = safe_atoi(x, &off);
++                        if (r < 0)
++                                return r;
++                }
++        } else {
++                r = safe_atoi(x, &off);
++                if (r < 0)
++                        return r;
++        }
++
++        if (boot_id)
++                *boot_id = id;
++
++        if (offset)
++                *offset = off;
++
++        return 0;
++}
++
+ static int help(void) {
+ 
+         pager_open_if_enabled();
+@@ -365,16 +401,23 @@ static int parse_argv(int argc, char *argv[]) {
+                 case 'b':
+                         arg_boot = true;
+ 
+-                        if (optarg)
+-                                arg_boot_descriptor = optarg;
+-                        else if (optind < argc) {
+-                                int boot;
++                        if (optarg) {
++                                r =  parse_boot_descriptor(optarg, &arg_boot_id, &arg_boot_offset);
++                                if (r < 0) {
++                                        log_error("Failed to parse boot descriptor '%s'", optarg);
++                                        return -EINVAL;
++                                }
++                        } else {
++
++                                /* Hmm, no argument? Maybe the next
++                                 * word on the command line is
++                                 * supposed to be the argument? Let's
++                                 * see if there is one and is parsable
++                                 * as a boot descriptor... */
+ 
+-                                if (argv[optind][0] != '-' ||
+-                                    safe_atoi(argv[optind], &boot) >= 0) {
+-                                        arg_boot_descriptor = argv[optind];
++                                if (optind < argc &&
++                                    parse_boot_descriptor(argv[optind], &arg_boot_id, &arg_boot_offset) >= 0)
+                                         optind++;
+-                                }
+                         }
+ 
+                         break;
+@@ -809,9 +852,6 @@ static int get_relative_boot_id(sd_journal *j, sd_id128_t *boot_id, int relative
+         assert(j);
+         assert(boot_id);
+ 
+-        if (relative == 0 && !sd_id128_equal(*boot_id, SD_ID128_NULL))
+-                return 0;
+-
+         r = sd_journal_query_unique(j, "_BOOT_ID");
+         if (r < 0)
+                 return r;
+@@ -878,58 +918,27 @@ static int get_relative_boot_id(sd_journal *j, sd_id128_t *boot_id, int relative
+ 
+ static int add_boot(sd_journal *j) {
+         char match[9+32+1] = "_BOOT_ID=";
+-        char *offset;
+-        sd_id128_t boot_id = SD_ID128_NULL;
+-        int r, relative = 0;
++        int r;
+ 
+         assert(j);
+ 
+         if (!arg_boot)
+                 return 0;
+ 
+-        if (!arg_boot_descriptor)
++        if (arg_boot_offset == 0 && sd_id128_equal(arg_boot_id, SD_ID128_NULL))
+                 return add_match_this_boot(j);
+ 
+-        if (strlen(arg_boot_descriptor) >= 32) {
+-                char tmp = arg_boot_descriptor[32];
+-                arg_boot_descriptor[32] = '\0';
+-                r = sd_id128_from_string(arg_boot_descriptor, &boot_id);
+-                arg_boot_descriptor[32] = tmp;
+-
+-                if (r < 0) {
+-                        log_error("Failed to parse boot ID '%.32s': %s",
+-                                  arg_boot_descriptor, strerror(-r));
+-                        return r;
+-                }
+-
+-                offset = arg_boot_descriptor + 32;
+-
+-                if (*offset && *offset != '-' && *offset != '+') {
+-                        log_error("Relative boot ID offset must start with a '+' or a '-', found '%s' ", offset);
+-                        return -EINVAL;
+-                }
+-        } else
+-                offset = arg_boot_descriptor;
+-
+-        if (*offset) {
+-                r = safe_atoi(offset, &relative);
+-                if (r < 0) {
+-                        log_error("Failed to parse relative boot ID number '%s'", offset);
+-                        return -EINVAL;
+-                }
+-        }
+-
+-        r = get_relative_boot_id(j, &boot_id, relative);
++        r = get_relative_boot_id(j, &arg_boot_id, arg_boot_offset);
+         if (r < 0) {
+-                if (sd_id128_equal(boot_id, SD_ID128_NULL))
+-                        log_error("Failed to look up boot %+d: %s", relative, strerror(-r));
++                if (sd_id128_equal(arg_boot_id, SD_ID128_NULL))
++                        log_error("Failed to look up boot %+i: %s", arg_boot_offset, strerror(-r));
+                 else
+-                        log_error("Failed to look up boot ID "SD_ID128_FORMAT_STR"%+d: %s",
+-                                  SD_ID128_FORMAT_VAL(boot_id), relative, strerror(-r));
++                        log_error("Failed to look up boot ID "SD_ID128_FORMAT_STR"%+i: %s",
++                                  SD_ID128_FORMAT_VAL(arg_boot_id), arg_boot_offset, strerror(-r));
+                 return r;
+         }
+ 
+-        sd_id128_to_string(boot_id, match + 9);
++        sd_id128_to_string(arg_boot_id, match + 9);
+ 
+         r = sd_journal_add_match(j, match, sizeof(match) - 1);
+         if (r < 0) {
diff --git a/0200-man-resolve-word-omissions.patch b/0200-man-resolve-word-omissions.patch
new file mode 100644
index 0000000..8528eef
--- /dev/null
+++ b/0200-man-resolve-word-omissions.patch
@@ -0,0 +1,725 @@
+From 424e80301de3b39d8641a49a7755af6dc3d6b4e8 Mon Sep 17 00:00:00 2001
+From: Jan Engelhardt <jengelh at inai.de>
+Date: Thu, 26 Dec 2013 02:47:43 +0100
+Subject: [PATCH] man: resolve word omissions
+
+This is a recurring submission and includes corrections to:
+word omissions and word class choice.
+
+Conflicts:
+	man/sd_bus_message_get_cookie.xml
+	man/sd_bus_request_name.xml
+	man/sd_watchdog_enabled.xml
+	man/systemd-getty-generator.xml
+---
+ man/binfmt.d.xml                            | 4 ++--
+ man/journald.conf.xml                       | 2 +-
+ man/loginctl.xml                            | 2 +-
+ man/sd-daemon.xml                           | 2 +-
+ man/sd-journal.xml                          | 2 +-
+ man/sd-login.xml                            | 4 ++--
+ man/sd_booted.xml                           | 2 +-
+ man/sd_get_seats.xml                        | 8 ++++----
+ man/sd_id128_get_machine.xml                | 2 +-
+ man/sd_id128_randomize.xml                  | 2 +-
+ man/sd_id128_to_string.xml                  | 2 +-
+ man/sd_is_fifo.xml                          | 2 +-
+ man/sd_journal_add_match.xml                | 2 +-
+ man/sd_journal_get_catalog.xml              | 2 +-
+ man/sd_journal_get_cursor.xml               | 2 +-
+ man/sd_journal_get_cutoff_realtime_usec.xml | 2 +-
+ man/sd_journal_get_data.xml                 | 2 +-
+ man/sd_journal_get_fd.xml                   | 2 +-
+ man/sd_journal_get_realtime_usec.xml        | 2 +-
+ man/sd_journal_get_usage.xml                | 2 +-
+ man/sd_journal_next.xml                     | 6 +++---
+ man/sd_journal_print.xml                    | 2 +-
+ man/sd_journal_query_unique.xml             | 2 +-
+ man/sd_journal_seek_head.xml                | 4 ++--
+ man/sd_journal_stream_fd.xml                | 2 +-
+ man/sd_listen_fds.xml                       | 4 ++--
+ man/sd_login_monitor_new.xml                | 2 +-
+ man/sd_notify.xml                           | 4 ++--
+ man/sd_pid_get_session.xml                  | 2 +-
+ man/sd_seat_get_active.xml                  | 2 +-
+ man/sd_session_is_active.xml                | 2 +-
+ man/sd_uid_get_state.xml                    | 4 ++--
+ man/sysctl.d.xml                            | 4 ++--
+ man/systemctl.xml                           | 4 ++--
+ man/systemd-getty-generator.xml             | 8 ++++----
+ man/systemd-halt.service.xml                | 2 +-
+ man/systemd-machine-id-setup.xml            | 2 +-
+ man/systemd.preset.xml                      | 4 ++--
+ man/systemd.service.xml                     | 2 +-
+ man/systemd.socket.xml                      | 4 ++--
+ man/systemd.unit.xml                        | 4 ++--
+ man/tmpfiles.d.xml                          | 4 ++--
+ 42 files changed, 62 insertions(+), 62 deletions(-)
+
+diff --git a/man/binfmt.d.xml b/man/binfmt.d.xml
+index 94f97e0..6f8668b 100644
+--- a/man/binfmt.d.xml
++++ b/man/binfmt.d.xml
+@@ -88,8 +88,8 @@
+                 administrator, who may use this logic to override the
+                 configuration files installed from vendor
+                 packages. All files are sorted by their filename in
+-                lexicographic order, regardless in which of the
+-                directories they reside. If multiple files specify
++                lexicographic order, regardless of which of the
++                directories they reside in. If multiple files specify
+                 the same binary type name, the entry in the file with
+                 the lexicographically latest name will be applied.</para>
+ 
+diff --git a/man/journald.conf.xml b/man/journald.conf.xml
+index 8e642a3..b362c5d 100644
+--- a/man/journald.conf.xml
++++ b/man/journald.conf.xml
+@@ -155,7 +155,7 @@
+                                 into the system journal. If
+                                 <literal>uid</literal>, any user ID
+                                 will get his own journal files
+-                                regardless whether it belongs to a
++                                regardless of whether it belongs to a
+                                 system service or refers to a real
+                                 logged in user. If
+                                 <literal>none</literal>, journal files
+diff --git a/man/loginctl.xml b/man/loginctl.xml
+index 1b54ff7..133d6cf 100644
+--- a/man/loginctl.xml
++++ b/man/loginctl.xml
+@@ -109,7 +109,7 @@
+ 
+                                 <listitem><para>When showing
+                                 session/user/seat properties, show all
+-                                properties regardless whether they are
++                                properties regardless of whether they are
+                                 set or not.</para></listitem>
+                         </varlistentry>
+ 
+diff --git a/man/sd-daemon.xml b/man/sd-daemon.xml
+index 6e804e1..84c1afa 100644
+--- a/man/sd-daemon.xml
++++ b/man/sd-daemon.xml
+@@ -144,7 +144,7 @@
+                 <para>These APIs are implemented in the reference
+                 implementation's <filename>sd-daemon.c</filename> and
+                 <filename>sd-daemon.h</filename> files. These
+-                interfaces are available as shared library, which can
++                interfaces are available as a shared library, which can
+                 be compiled and linked to with the
+                 <constant>libsystemd-daemon</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+                 file. Alternatively, applications consuming these APIs
+diff --git a/man/sd-journal.xml b/man/sd-journal.xml
+index 6d39611..832d584 100644
+--- a/man/sd-journal.xml
++++ b/man/sd-journal.xml
+@@ -98,7 +98,7 @@
+         <refsect1>
+                 <title>Notes</title>
+ 
+-                <para>These APIs are implemented as shared library,
++                <para>These APIs are implemented as a shared library,
+                 which can be compiled and linked to with the
+                 <constant>libsystemd-journal</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+                 file.</para>
+diff --git a/man/sd-login.xml b/man/sd-login.xml
+index 251b35b..1d47b29 100644
+--- a/man/sd-login.xml
++++ b/man/sd-login.xml
+@@ -99,7 +99,7 @@
+                 caller with the libc
+                 <citerefentry><refentrytitle>free</refentrytitle><manvolnum>3</manvolnum></citerefentry>
+                 call after use, including the strings referenced
+-                therein. Similar, individual strings returned need to
++                therein. Similarly, individual strings returned need to
+                 be freed, as well.</para>
+ 
+                 <para>As a special exception, instead of an empty
+@@ -120,7 +120,7 @@
+         <refsect1>
+                 <title>Notes</title>
+ 
+-                <para>These APIs are implemented as shared library,
++                <para>These APIs are implemented as a shared library,
+                 which can be compiled and linked to with the
+                 <constant>libsystemd-login</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+                 file.</para>
+diff --git a/man/sd_booted.xml b/man/sd_booted.xml
+index 64c0cd9..6f8cc95 100644
+--- a/man/sd_booted.xml
++++ b/man/sd_booted.xml
+@@ -100,7 +100,7 @@
+                 in the reference implementation's
+                 <filename>sd-daemon.c</filename> and
+                 <filename>sd-daemon.h</filename> files. These
+-                interfaces are available as shared library, which can
++                interfaces are available as a shared library, which can
+                 be compiled and linked to with the
+                 <constant>libsystemd-daemon</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+                 file. Alternatively, applications consuming these APIs
+diff --git a/man/sd_get_seats.xml b/man/sd_get_seats.xml
+index 8254b7c..1e55af3 100644
+--- a/man/sd_get_seats.xml
++++ b/man/sd_get_seats.xml
+@@ -90,13 +90,13 @@
+                 <constant>NULL</constant> may be returned and should be considered
+                 equivalent to an empty array.</para>
+ 
+-                <para>Similar, <function>sd_get_sessions()</function> may
++                <para>Similarly, <function>sd_get_sessions()</function> may
+                 be used to determine all current login sessions.</para>
+ 
+-                <para>Similar, <function>sd_get_uids()</function> may
++                <para>Similarly, <function>sd_get_uids()</function> may
+                 be used to determine all Unix users who currently have login sessions.</para>
+ 
+-                <para>Similar,
++                <para>Similarly,
+                 <function>sd_get_machine_names()</function> may be
+                 used to determine all current virtual machines and
+                 containers on the system.</para>
+@@ -122,7 +122,7 @@
+                 <function>sd_get_sessions()</function>,
+                 <function>sd_get_uids()</function> and
+                 <function>sd_get_machine_names()</function> interfaces
+-                are available as shared library, which can be compiled
++                are available as a shared library, which can be compiled
+                 and linked to with the
+                 <constant>libsystemd-login</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+                 file.</para>
+diff --git a/man/sd_id128_get_machine.xml b/man/sd_id128_get_machine.xml
+index 6bee7ad..084fda2 100644
+--- a/man/sd_id128_get_machine.xml
++++ b/man/sd_id128_get_machine.xml
+@@ -116,7 +116,7 @@
+ 
+                 <para>The <function>sd_id128_get_machine()</function>
+                 and <function>sd_id128_get_boot()</function>
+-                interfaces are available as shared library, which can
++                interfaces are available as a shared library, which can
+                 be compiled and linked to with the
+                 <literal>libsystemd-id128</literal> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+                 file.</para>
+diff --git a/man/sd_id128_randomize.xml b/man/sd_id128_randomize.xml
+index 0b95803..100de16 100644
+--- a/man/sd_id128_randomize.xml
++++ b/man/sd_id128_randomize.xml
+@@ -95,7 +95,7 @@
+                 <title>Notes</title>
+ 
+                 <para>The <function>sd_id128_randomize()</function> interface
+-                is available as shared library, which can be compiled
++                is available as a shared library, which can be compiled
+                 and linked to with the
+                 <literal>libsystemd-id128</literal> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+                 file.</para>
+diff --git a/man/sd_id128_to_string.xml b/man/sd_id128_to_string.xml
+index 71cf82a..eae2915 100644
+--- a/man/sd_id128_to_string.xml
++++ b/man/sd_id128_to_string.xml
+@@ -118,7 +118,7 @@
+ 
+                 <para>The <function>sd_id128_to_string()</function>
+                 and <function>sd_id128_from_string()</function> interfaces are
+-                available as shared library, which can be compiled and
++                available as a shared library, which can be compiled and
+                 linked to with the <literal>libsystemd-id128</literal> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+                 file.</para>
+         </refsect1>
+diff --git a/man/sd_is_fifo.xml b/man/sd_is_fifo.xml
+index 4d9cd79..5e79453 100644
+--- a/man/sd_is_fifo.xml
++++ b/man/sd_is_fifo.xml
+@@ -208,7 +208,7 @@
+                 related functions are implemented in the reference
+                 implementation's <filename>sd-daemon.c</filename> and
+                 <filename>sd-daemon.h</filename> files. These
+-                interfaces are available as shared library, which can
++                interfaces are available as a shared library, which can
+                 be compiled and linked to with the
+                 <constant>libsystemd-daemon</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+                 file. Alternatively, applications consuming these APIs
+diff --git a/man/sd_journal_add_match.xml b/man/sd_journal_add_match.xml
+index b6c7b06..6568234 100644
+--- a/man/sd_journal_add_match.xml
++++ b/man/sd_journal_add_match.xml
+@@ -174,7 +174,7 @@
+                 <function>sd_journal_add_disjunction()</function>,
+                 <function>sd_journal_add_conjunction()</function> and
+                 <function>sd_journal_flush_matches()</function>
+-                interfaces are available as shared library, which can
++                interfaces are available as a shared library, which can
+                 be compiled and linked to with the
+                 <constant>libsystemd-journal</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+                 file.</para>
+diff --git a/man/sd_journal_get_catalog.xml b/man/sd_journal_get_catalog.xml
+index 4a7e0a1..ecd329f 100644
+--- a/man/sd_journal_get_catalog.xml
++++ b/man/sd_journal_get_catalog.xml
+@@ -118,7 +118,7 @@
+ 
+                 <para>The <function>sd_journal_get_catalog()</function> and
+                 <function>sd_journal_get_catalog_for_message_id()</function>
+-                interfaces are available as shared library, which can
++                interfaces are available as a shared library, which can
+                 be compiled and linked to with the
+                 <constant>libsystemd-journal</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+                 file.</para>
+diff --git a/man/sd_journal_get_cursor.xml b/man/sd_journal_get_cursor.xml
+index 4cee7d5..046c154 100644
+--- a/man/sd_journal_get_cursor.xml
++++ b/man/sd_journal_get_cursor.xml
+@@ -130,7 +130,7 @@
+ 
+                 <para>The <function>sd_journal_get_cursor()</function>
+                 and <function>sd_journal_test_cursor()</function>
+-                interfaces are available as shared library, which can
++                interfaces are available as a shared library, which can
+                 be compiled and linked to with the
+                 <constant>libsystemd-journal</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+                 file.</para>
+diff --git a/man/sd_journal_get_cutoff_realtime_usec.xml b/man/sd_journal_get_cutoff_realtime_usec.xml
+index 9bf8220..287c1c5 100644
+--- a/man/sd_journal_get_cutoff_realtime_usec.xml
++++ b/man/sd_journal_get_cutoff_realtime_usec.xml
+@@ -122,7 +122,7 @@
+                 <function>sd_journal_get_cutoff_realtime_usec()</function>
+                 and
+                 <function>sd_journal_get_cutoff_monotonic_usec()</function>
+-                interfaces are available as shared library, which can
++                interfaces are available as a shared library, which can
+                 be compiled and linked to with the
+                 <constant>libsystemd-journal</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+                 file.</para>
+diff --git a/man/sd_journal_get_data.xml b/man/sd_journal_get_data.xml
+index 0e1111e..6ed52b5 100644
+--- a/man/sd_journal_get_data.xml
++++ b/man/sd_journal_get_data.xml
+@@ -203,7 +203,7 @@
+                 <function>sd_journal_set_data_threshold()</function>
+                 and
+                 <function>sd_journal_get_data_threshold()</function>
+-                interfaces are available as shared library, which can
++                interfaces are available as a shared library, which can
+                 be compiled and linked to with the
+                 <constant>libsystemd-journal</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+                 file.</para>
+diff --git a/man/sd_journal_get_fd.xml b/man/sd_journal_get_fd.xml
+index 764f716..4b36f97 100644
+--- a/man/sd_journal_get_fd.xml
++++ b/man/sd_journal_get_fd.xml
+@@ -253,7 +253,7 @@ else {
+                 <function>sd_journal_reliable_fd()</function>,
+                 <function>sd_journal_process()</function> and
+                 <function>sd_journal_wait()</function> interfaces are
+-                available as shared library, which can be compiled and
++                available as a shared library, which can be compiled and
+                 linked to with the
+                 <constant>libsystemd-journal</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+                 file.</para>
+diff --git a/man/sd_journal_get_realtime_usec.xml b/man/sd_journal_get_realtime_usec.xml
+index 8870c29..bf1aa50 100644
+--- a/man/sd_journal_get_realtime_usec.xml
++++ b/man/sd_journal_get_realtime_usec.xml
+@@ -122,7 +122,7 @@
+                 <function>sd_journal_get_realtime_usec()</function>
+                 and
+                 <function>sd_journal_get_monotonic_usec()</function>
+-                interfaces are available as shared library, which can
++                interfaces are available as a shared library, which can
+                 be compiled and linked to with the
+                 <constant>libsystemd-journal</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+                 file.</para>
+diff --git a/man/sd_journal_get_usage.xml b/man/sd_journal_get_usage.xml
+index 180d8b2..08d8640 100644
+--- a/man/sd_journal_get_usage.xml
++++ b/man/sd_journal_get_usage.xml
+@@ -84,7 +84,7 @@
+                 <title>Notes</title>
+ 
+                 <para>The <function>sd_journal_get_usage()</function>
+-                interface is available as shared library, which can be
++                interface is available as a shared library, which can be
+                 compiled and linked to with the
+                 <constant>libsystemd-journal</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+                 file.</para>
+diff --git a/man/sd_journal_next.xml b/man/sd_journal_next.xml
+index 6e437d1..1409b0d 100644
+--- a/man/sd_journal_next.xml
++++ b/man/sd_journal_next.xml
+@@ -102,7 +102,7 @@
+                 functions such as
+                 <citerefentry><refentrytitle>sd_journal_get_data</refentrytitle><manvolnum>3</manvolnum></citerefentry>.</para>
+ 
+-                <para>Similar, <function>sd_journal_previous()</function> sets
++                <para>Similarly, <function>sd_journal_previous()</function> sets
+                 the read pointer back one entry.</para>
+ 
+                 <para><function>sd_journal_next_skip()</function> and
+@@ -129,7 +129,7 @@
+                 <citerefentry><refentrytitle>sd_journal_seek_head</refentrytitle><manvolnum>3</manvolnum></citerefentry>
+                 and <function>sd_journal_next()</function> in order to
+                 make iterating through the journal easier. See below
+-                for an example. Similar,
++                for an example. Similarly,
+                 <function>SD_JOURNAL_FOREACH_BACKWARDS()</function>
+                 may be used for iterating the journal in reverse
+                 order.</para>
+@@ -156,7 +156,7 @@
+                 <para>The <function>sd_journal_next()</function>, <function>sd_journal_previous()</function>,
+                 <function>sd_journal_next_skip()</function> and
+                 <function>sd_journal_previous_skip()</function> interfaces are
+-                available as shared library, which can be compiled and
++                available as a shared library, which can be compiled and
+                 linked to with the
+                 <constant>libsystemd-journal</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+                 file.</para>
+diff --git a/man/sd_journal_print.xml b/man/sd_journal_print.xml
+index e61a648..a716cc3 100644
+--- a/man/sd_journal_print.xml
++++ b/man/sd_journal_print.xml
+@@ -227,7 +227,7 @@ sd_journal_send("MESSAGE=Hello World, this is PID %lu!", (unsigned long) getpid(
+                 <function>sd_journal_printv()</function>,
+                 <function>sd_journal_send()</function> and
+                 <function>sd_journal_sendv()</function> interfaces
+-                are available as shared library, which can be compiled
++                are available as a shared library, which can be compiled
+                 and linked to with the
+                 <constant>libsystemd-journal</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+                 file.</para>
+diff --git a/man/sd_journal_query_unique.xml b/man/sd_journal_query_unique.xml
+index f5d9d2b..f0b9204 100644
+--- a/man/sd_journal_query_unique.xml
++++ b/man/sd_journal_query_unique.xml
+@@ -156,7 +156,7 @@
+                 <para>The <function>sd_journal_query_unique()</function>,
+                 <function>sd_journal_enumerate_unique()</function> and
+                 <function>sd_journal_restart_unique()</function>
+-                interfaces are available as shared library, which can
++                interfaces are available as a shared library, which can
+                 be compiled and linked to with the
+                 <constant>libsystemd-journal</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+                 file.</para>
+diff --git a/man/sd_journal_seek_head.xml b/man/sd_journal_seek_head.xml
+index 03de30a..939f0b1 100644
+--- a/man/sd_journal_seek_head.xml
++++ b/man/sd_journal_seek_head.xml
+@@ -94,7 +94,7 @@
+                 seeks to the beginning of the journal, i.e. the oldest
+                 available entry.</para>
+ 
+-                <para>Similar,
++                <para>Similarly,
+                 <function>sd_journal_seek_tail()</function> may be
+                 used to seek to the end of the journal, i.e. the most
+                 recent available entry.</para>
+@@ -156,7 +156,7 @@
+                 <function>sd_journal_seek_monotonic_usec()</function>,
+                 <function>sd_journal_seek_realtime_usec()</function>,
+                 and <function>sd_journal_seek_cursor()</function>
+-                interfaces are available as shared library, which can
++                interfaces are available as a shared library, which can
+                 be compiled and linked to with the
+                 <constant>libsystemd-journal</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+                 file.</para>
+diff --git a/man/sd_journal_stream_fd.xml b/man/sd_journal_stream_fd.xml
+index 4bd0abc..a8dc8fd 100644
+--- a/man/sd_journal_stream_fd.xml
++++ b/man/sd_journal_stream_fd.xml
+@@ -112,7 +112,7 @@
+                 <title>Notes</title>
+ 
+                 <para>The <function>sd_journal_stream_fd()</function>
+-                interface is available as shared library, which can
++                interface is available as a shared library, which can
+                 be compiled and linked to with the
+                 <constant>libsystemd-journal</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+                 file.</para>
+diff --git a/man/sd_listen_fds.xml b/man/sd_listen_fds.xml
+index 240300d..aaabdbf 100644
+--- a/man/sd_listen_fds.xml
++++ b/man/sd_listen_fds.xml
+@@ -73,7 +73,7 @@
+                 parameter is non-zero,
+                 <function>sd_listen_fds()</function> will unset the
+                 <varname>$LISTEN_FDS</varname>/<varname>$LISTEN_PID</varname>
+-                environment variables before returning (regardless
++                environment variables before returning (regardless of
+                 whether the function call itself succeeded or
+                 not). Further calls to
+                 <function>sd_listen_fds()</function> will then fail,
+@@ -149,7 +149,7 @@
+                 implemented in the reference implementation's
+                 <filename>sd-daemon.c</filename> and
+                 <filename>sd-daemon.h</filename> files. These
+-                interfaces are available as shared library, which can
++                interfaces are available as a shared library, which can
+                 be compiled and linked to with the
+                 <constant>libsystemd-daemon</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+                 file. Alternatively, applications consuming these APIs
+diff --git a/man/sd_login_monitor_new.xml b/man/sd_login_monitor_new.xml
+index 909a3d9..f439d3e 100644
+--- a/man/sd_login_monitor_new.xml
++++ b/man/sd_login_monitor_new.xml
+@@ -224,7 +224,7 @@ else {
+                 <function>sd_login_monitor_get_fd()</function>,
+                 <function>sd_login_monitor_get_events()</function> and
+                 <function>sd_login_monitor_get_timeout()</function>
+-                interfaces are available as shared library, which can
++                interfaces are available as a shared library, which can
+                 be compiled and linked to with the
+                 <constant>libsystemd-login</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+                 file.</para>
+diff --git a/man/sd_notify.xml b/man/sd_notify.xml
+index 55965ff..e078140 100644
+--- a/man/sd_notify.xml
++++ b/man/sd_notify.xml
+@@ -79,7 +79,7 @@
+                 <para>If the <parameter>unset_environment</parameter>
+                 parameter is non-zero, <function>sd_notify()</function>
+                 will unset the <varname>$NOTIFY_SOCKET</varname>
+-                environment variable before returning (regardless
++                environment variable before returning (regardless of
+                 whether the function call itself succeeded or
+                 not). Further calls to
+                 <function>sd_notify()</function> will then fail, but
+@@ -236,7 +236,7 @@
+                 the reference implementation's
+                 <filename>sd-daemon.c</filename> and
+                 <filename>sd-daemon.h</filename> files. These
+-                interfaces are available as shared library, which can
++                interfaces are available as a shared library, which can
+                 be compiled and linked to with the
+                 <constant>libsystemd-daemon</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+                 file. Alternatively, applications consuming these APIs
+diff --git a/man/sd_pid_get_session.xml b/man/sd_pid_get_session.xml
+index e5c7709..ff5905b 100644
+--- a/man/sd_pid_get_session.xml
++++ b/man/sd_pid_get_session.xml
+@@ -186,7 +186,7 @@
+                 <function>sd_pid_get_owner_uid()</function>,
+                 <function>sd_pid_get_machine_name()</function> and
+                 <function>sd_pid_get_slice()</function> interfaces are
+-                available as shared library, which can be compiled and
++                available as a shared library, which can be compiled and
+                 linked to with the
+                 <constant>libsystemd-login</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+                 file.</para>
+diff --git a/man/sd_seat_get_active.xml b/man/sd_seat_get_active.xml
+index cd87696..23d582d 100644
+--- a/man/sd_seat_get_active.xml
++++ b/man/sd_seat_get_active.xml
+@@ -164,7 +164,7 @@
+                 <function>sd_seat_can_multi_session()</function>,
+                 <function>sd_seat_can_tty()</function> and
+                 <function>sd_seat_can_grapical()</function> interfaces
+-                are available as shared library, which can be compiled
++                are available as a shared library, which can be compiled
+                 and linked to with the
+                 <constant>libsystemd-login</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+                 file.</para>
+diff --git a/man/sd_session_is_active.xml b/man/sd_session_is_active.xml
+index 293ce71..06891f7 100644
+--- a/man/sd_session_is_active.xml
++++ b/man/sd_session_is_active.xml
+@@ -252,7 +252,7 @@
+                 <function>sd_session_get_class()</function>,
+                 <function>sd_session_get_display()</function> and
+                 <function>sd_session_get_tty()</function>
+-                interfaces are available as shared library, which can
++                interfaces are available as a shared library, which can
+                 be compiled and linked to with the
+                 <constant>libsystemd-login</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+                 file.</para>
+diff --git a/man/sd_uid_get_state.xml b/man/sd_uid_get_state.xml
+index d4d23f4..0faa765 100644
+--- a/man/sd_uid_get_state.xml
++++ b/man/sd_uid_get_state.xml
+@@ -139,7 +139,7 @@
+                 be returned and should be considered equivalent to an
+                 empty array.</para>
+ 
+-                <para>Similar, <function>sd_uid_get_seats()</function>
++                <para>Similarly, <function>sd_uid_get_seats()</function>
+                 may be used to determine the list of seats on which
+                 the user currently has sessions. Similar semantics
+                 apply, however note that the user may have
+@@ -171,7 +171,7 @@
+                 <function>sd_uid_is_on_seat()</function>,
+                 <function>sd_uid_get_sessions()</function>, and
+                 <function>sd_uid_get_seats()</function> interfaces are
+-                available as shared library, which can be compiled and
++                available as a shared library, which can be compiled and
+                 linked to with the <constant>libsystemd-login</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+                 file.</para>
+         </refsect1>
+diff --git a/man/sysctl.d.xml b/man/sysctl.d.xml
+index 854864c..5544283 100644
+--- a/man/sysctl.d.xml
++++ b/man/sysctl.d.xml
+@@ -89,8 +89,8 @@
+                 administrator, who may use this logic to override the
+                 configuration files installed by vendor packages. All
+                 configuration files are sorted by their filename in
+-                lexicographic order, regardless in which of the
+-                directories they reside. If multiple files specify the
++                lexicographic order, regardless of which of the
++                directories they reside in. If multiple files specify the
+                 same variable name, the entry in the file with the
+                 lexicographically latest name will be applied. It is
+                 recommended to prefix all filenames with a two-digit
+diff --git a/man/systemctl.xml b/man/systemctl.xml
+index b4bc15d..61deb19 100644
+--- a/man/systemctl.xml
++++ b/man/systemctl.xml
+@@ -250,7 +250,7 @@ systemctl start foo
+           sleep state. Any user may take these locks and privileged
+           users may override these locks. If any locks are taken,
+           shutdown and sleep state requests will normally fail
+-          (regardless if privileged or not) and a list of active locks
++          (regardless of whether privileged or not) and a list of active locks
+           is printed. However, if <option>--ignore-inhibitors</option>
+           is specified, the locks are ignored and not printed, and the
+           operation attempted anyway, possibly requiring additional
+@@ -445,7 +445,7 @@ systemctl start foo
+           with identical immediate effects, however, since the latter
+           is lost on reboot, the changes are lost too.</para>
+ 
+-          <para>Similar, when used with
++          <para>Similarly, when used with
+           <command>set-property</command>, make changes only
+           temporarily, so that they are lost on the next
+           reboot.</para>
+diff --git a/man/systemd-getty-generator.xml b/man/systemd-getty-generator.xml
+index da88e72..b1993ae 100644
+--- a/man/systemd-getty-generator.xml
++++ b/man/systemd-getty-generator.xml
+@@ -61,10 +61,10 @@
+                 subsystem. It will also instantiate
+                 <filename>serial-getty at .service</filename> instances
+                 for virtualizer consoles, if execution in a
+-                virtualized environment is detected. This should
+-                ensure that the user is shown a login prompt at the
+-                right place, regardless in which environment the
+-                system is started. For example, it is sufficient to
++                virtualized environment is detected. This
++                should ensure that the user is shown a login prompt at
++                the right place, regardless of which environment the
++                system is started in. For example, it is sufficient to
+                 redirect the kernel console with a kernel command line
+                 argument such as <varname>console=</varname> to get
+                 both kernel messages and a getty prompt on a serial
+diff --git a/man/systemd-halt.service.xml b/man/systemd-halt.service.xml
+index 90b443f..99457aa 100644
+--- a/man/systemd-halt.service.xml
++++ b/man/systemd-halt.service.xml
+@@ -65,7 +65,7 @@
+                 <para><filename>systemd-halt.service</filename> is a
+                 system service that is pulled in by
+                 <filename>halt.target</filename> and is responsible
+-                for the actual system halt. Similar,
++                for the actual system halt. Similarly,
+                 <filename>systemd-poweroff.service</filename> is
+                 pulled in by <filename>poweroff.target</filename>,
+                 <filename>systemd-reboot.service</filename> by
+diff --git a/man/systemd-machine-id-setup.xml b/man/systemd-machine-id-setup.xml
+index fef76bc..bc38d55 100644
+--- a/man/systemd-machine-id-setup.xml
++++ b/man/systemd-machine-id-setup.xml
+@@ -80,7 +80,7 @@
+                 UUID passed is sufficiently unique and is different
+                 for every booted instanced of the VM.</para>
+ 
+-                <para>Similar, if run inside a Linux container
++                <para>Similarly, if run inside a Linux container
+                 environment and a UUID is set for the container this
+                 is used to initialize the machine ID. For details see
+                 the documentation of the <ulink
+diff --git a/man/systemd.preset.xml b/man/systemd.preset.xml
+index 16db8cd..55cb4de 100644
+--- a/man/systemd.preset.xml
++++ b/man/systemd.preset.xml
+@@ -126,8 +126,8 @@
+                 administrator, who may use this logic to override the
+                 preset files installed by vendor packages. All preset
+                 files are sorted by their filename in lexicographic
+-                order, regardless in which of the directories they
+-                reside. If multiple files specify the same unit name,
++                order, regardless of which of the directories they
++                reside in. If multiple files specify the same unit name,
+                 the entry in the file with the lexicographically earliest
+                 name will be applied. It is recommended to prefix all
+                 filenames with a two-digit number and a dash, to simplify
+diff --git a/man/systemd.service.xml b/man/systemd.service.xml
+index 8f9137c..80a935d 100644
+--- a/man/systemd.service.xml
++++ b/man/systemd.service.xml
+@@ -712,7 +712,7 @@ ExecStart=/bin/echo $ONE $TWO ${TWO}
+                                 timeout for the service expires.
+                                 If set to
+                                 <option>always</option>, the service
+-                                will be restarted regardless whether
++                                will be restarted regardless of whether
+                                 it exited cleanly or not, got
+                                 terminated abnormally by a signal or
+                                 hit a timeout.</para>
+diff --git a/man/systemd.socket.xml b/man/systemd.socket.xml
+index 1c78562..ac3127d 100644
+--- a/man/systemd.socket.xml
++++ b/man/systemd.socket.xml
+@@ -213,7 +213,7 @@
+                                 traffic on any of the sockets will
+                                 trigger service activation, and all
+                                 listed sockets will be passed to the
+-                                service, regardless whether there is
++                                service, regardless of whether there is
+                                 incoming traffic on them or not. If
+                                 the empty string is assigned to any of
+                                 these options, the list of addresses
+@@ -225,7 +225,7 @@
+                                 it is often desirable to listen on it
+                                 before the interface it is configured
+                                 on is up and running, and even
+-                                regardless whether it will be up and
++                                regardless of whether it will be up and
+                                 running ever at all. To deal with this
+                                 it is recommended to set the
+                                 <varname>FreeBind=</varname> option
+diff --git a/man/systemd.unit.xml b/man/systemd.unit.xml
+index 77127ff..b70c5e9 100644
+--- a/man/systemd.unit.xml
++++ b/man/systemd.unit.xml
+@@ -634,7 +634,7 @@
+                                 dependency on another unit is shut
+                                 down while the latter is started up,
+                                 the shut down is ordered before the
+-                                start-up regardless whether the
++                                start-up regardless of whether the
+                                 ordering dependency is actually of
+                                 type <varname>After=</varname> or
+                                 <varname>Before=</varname>. If two
+@@ -938,7 +938,7 @@
+                                 exists, is a regular file and marked
+                                 executable.</para>
+ 
+-                                <para>Similar,
++                                <para>Similarly,
+                                 <varname>ConditionKernelCommandLine=</varname>
+                                 may be used to check whether a
+                                 specific kernel command line option is
+diff --git a/man/tmpfiles.d.xml b/man/tmpfiles.d.xml
+index 39aa68d..ed88751 100644
+--- a/man/tmpfiles.d.xml
++++ b/man/tmpfiles.d.xml
+@@ -88,8 +88,8 @@
+                 the local administrator, who may use this logic to
+                 override the configuration files installed by vendor
+                 packages. All configuration files are sorted by their
+-                filename in lexicographic order, regardless in which
+-                of the directories they reside. If multiple files
++                filename in lexicographic order, regardless of which
++                of the directories they reside in. If multiple files
+                 specify the same path, the entry in the file with the
+                 lexicographically earliest name will be applied, all
+                 all other conflicting entries logged as errors.</para>
diff --git a/0201-man-improvements-to-comma-placement.patch b/0201-man-improvements-to-comma-placement.patch
new file mode 100644
index 0000000..b1a9674
--- /dev/null
+++ b/0201-man-improvements-to-comma-placement.patch
@@ -0,0 +1,507 @@
+From 4a1155c88d295e81037fd8a48b585a00fbf43cbc Mon Sep 17 00:00:00 2001
+From: Jan Engelhardt <jengelh at inai.de>
+Date: Thu, 26 Dec 2013 02:47:44 +0100
+Subject: [PATCH] man: improvements to comma placement
+
+This is a recurring submission and includes corrections to:
+comma placement.
+
+Conflicts:
+	man/sd_bus_message_get_cookie.xml
+	man/sd_bus_request_name.xml
+	man/sd_session_is_active.xml
+	man/sd_watchdog_enabled.xml
+	man/systemctl.xml
+	man/systemd.exec.xml
+	man/systemd.timer.xml
+	man/systemd.unit.xml
+---
+ man/halt.xml                           | 2 +-
+ man/hostnamectl.xml                    | 2 +-
+ man/sd-daemon.xml                      | 4 ++--
+ man/sd-readahead.xml                   | 2 +-
+ man/sd_booted.xml                      | 2 +-
+ man/sd_get_seats.xml                   | 2 +-
+ man/sd_is_fifo.xml                     | 2 +-
+ man/sd_listen_fds.xml                  | 2 +-
+ man/sd_login_monitor_new.xml           | 6 +++---
+ man/sd_notify.xml                      | 2 +-
+ man/sd_readahead.xml                   | 2 +-
+ man/sd_seat_get_active.xml             | 4 ++--
+ man/sd_uid_get_state.xml               | 4 ++--
+ man/shutdown.xml                       | 2 +-
+ man/systemd-analyze.xml                | 2 +-
+ man/systemd-ask-password.xml           | 2 +-
+ man/systemd-cat.xml                    | 2 +-
+ man/systemd-cgls.xml                   | 2 +-
+ man/systemd-cgtop.xml                  | 2 +-
+ man/systemd-coredumpctl.xml            | 2 +-
+ man/systemd-delta.xml                  | 2 +-
+ man/systemd-machine-id-setup.xml       | 2 +-
+ man/systemd-notify.xml                 | 2 +-
+ man/systemd-tmpfiles.xml               | 2 +-
+ man/systemd-tty-ask-password-agent.xml | 2 +-
+ man/systemd.device.xml                 | 2 +-
+ man/systemd.mount.xml                  | 2 +-
+ man/systemd.service.xml                | 2 +-
+ man/systemd.special.xml                | 2 +-
+ man/systemd.swap.xml                   | 2 +-
+ man/systemd.xml                        | 2 +-
+ man/telinit.xml                        | 2 +-
+ man/timedatectl.xml                    | 2 +-
+ 33 files changed, 38 insertions(+), 38 deletions(-)
+
+diff --git a/man/halt.xml b/man/halt.xml
+index 2a13d3c..f54a864 100644
+--- a/man/halt.xml
++++ b/man/halt.xml
+@@ -148,7 +148,7 @@
+         <refsect1>
+                 <title>Exit status</title>
+ 
+-                <para>On success 0 is returned, a non-zero failure
++                <para>On success, 0 is returned, a non-zero failure
+                 code otherwise.</para>
+         </refsect1>
+ 
+diff --git a/man/hostnamectl.xml b/man/hostnamectl.xml
+index b39fb55..a0776f5 100644
+--- a/man/hostnamectl.xml
++++ b/man/hostnamectl.xml
+@@ -255,7 +255,7 @@
+         <refsect1>
+                 <title>Exit status</title>
+ 
+-                <para>On success 0 is returned, a non-zero failure
++                <para>On success, 0 is returned, a non-zero failure
+                 code otherwise.</para>
+         </refsect1>
+ 
+diff --git a/man/sd-daemon.xml b/man/sd-daemon.xml
+index 84c1afa..b48eac9 100644
+--- a/man/sd-daemon.xml
++++ b/man/sd-daemon.xml
+@@ -83,7 +83,7 @@
+                 <citerefentry><refentrytitle>sd_booted</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
+                 <citerefentry><refentrytitle>sd_is_fifo</refentrytitle><manvolnum>3</manvolnum></citerefentry>
+                 for more information about the functions
+-                implemented. In addition to these functions a couple
++                implemented. In addition to these functions, a couple
+                 of logging prefixes are defined as macros:</para>
+ 
+                 <programlisting>#define SD_EMERG   "&lt;0&gt;"  /* system is unusable */
+@@ -135,7 +135,7 @@
+                 implementation. See the respective function man pages
+                 for details.</para>
+ 
+-                <para>In addition, for details about the algorithms
++                <para>In addition, for details about the algorithms,
+                 check the liberally licensed reference implementation
+                 sources:
+                 <ulink url="http://cgit.freedesktop.org/systemd/systemd/plain/src/libsystemd-daemon/sd-daemon.c"/>
+diff --git a/man/sd-readahead.xml b/man/sd-readahead.xml
+index f8a0a0b..bcc46b2 100644
+--- a/man/sd-readahead.xml
++++ b/man/sd-readahead.xml
+@@ -83,7 +83,7 @@
+                 reference implementation. See the respective function
+                 man pages for details.</para>
+ 
+-                <para>In addition, for details about the algorithms
++                <para>In addition, for details about the algorithms,
+                 check the liberally licensed reference implementation
+                 sources:
+                 <ulink url="http://cgit.freedesktop.org/systemd/systemd/plain/src/readahead/sd-readahead.c"/>
+diff --git a/man/sd_booted.xml b/man/sd_booted.xml
+index 6f8cc95..1e38d2a 100644
+--- a/man/sd_booted.xml
++++ b/man/sd_booted.xml
+@@ -106,7 +106,7 @@
+                 file. Alternatively, applications consuming these APIs
+                 may copy the implementation into their source
+                 tree. For more details about the reference
+-                implementation see
++                implementation, see
+                 <citerefentry><refentrytitle>sd-daemon</refentrytitle><manvolnum>3</manvolnum></citerefentry>.</para>
+ 
+                 <para>If the reference implementation is used as
+diff --git a/man/sd_get_seats.xml b/man/sd_get_seats.xml
+index 1e55af3..f0e7655 100644
+--- a/man/sd_get_seats.xml
++++ b/man/sd_get_seats.xml
+@@ -107,7 +107,7 @@
+         <refsect1>
+                 <title>Return Value</title>
+ 
+-                <para>On success <function>sd_get_seats()</function>,
++                <para>On success, <function>sd_get_seats()</function>,
+                 <function>sd_get_sessions()</function>,
+                 <function>sd_get_uids()</function> and
+                 <function>sd_get_machine_names()</function> return the
+diff --git a/man/sd_is_fifo.xml b/man/sd_is_fifo.xml
+index 5e79453..4bb2236 100644
+--- a/man/sd_is_fifo.xml
++++ b/man/sd_is_fifo.xml
+@@ -214,7 +214,7 @@
+                 file. Alternatively, applications consuming these APIs
+                 may copy the implementation into their source
+                 tree. For more details about the reference
+-                implementation see
++                implementation, see
+                 <citerefentry><refentrytitle>sd-daemon</refentrytitle><manvolnum>3</manvolnum></citerefentry>.</para>
+ 
+                 <para>These functions continue to work as described,
+diff --git a/man/sd_listen_fds.xml b/man/sd_listen_fds.xml
+index aaabdbf..6a9e082 100644
+--- a/man/sd_listen_fds.xml
++++ b/man/sd_listen_fds.xml
+@@ -155,7 +155,7 @@
+                 file. Alternatively, applications consuming these APIs
+                 may copy the implementation into their source
+                 tree. For more details about the reference
+-                implementation see
++                implementation, see
+                 <citerefentry><refentrytitle>sd-daemon</refentrytitle><manvolnum>3</manvolnum></citerefentry>.</para>
+ 
+                 <para>If the reference implementation is used as
+diff --git a/man/sd_login_monitor_new.xml b/man/sd_login_monitor_new.xml
+index f439d3e..14ff241 100644
+--- a/man/sd_login_monitor_new.xml
++++ b/man/sd_login_monitor_new.xml
+@@ -198,13 +198,13 @@ else {
+         <refsect1>
+                 <title>Return Value</title>
+ 
+-                <para>On success
++                <para>On success,
+                 <function>sd_login_monitor_new()</function>,
+                 <function>sd_login_monitor_flush()</function> and
+                 <function>sd_login_monitor_get_timeout()</function>
+-                return 0 or a positive integer. On success
++                return 0 or a positive integer. On success,
+                 <function>sd_login_monitor_get_fd()</function> returns
+-                a Unix file descriptor. On success
++                a Unix file descriptor. On success,
+                 <function>sd_login_monitor_get_events()</function>
+                 returns a combination of <constant>POLLIN</constant>,
+                 <constant>POLLOUT</constant> and suchlike. On failure,
+diff --git a/man/sd_notify.xml b/man/sd_notify.xml
+index e078140..aae27a8 100644
+--- a/man/sd_notify.xml
++++ b/man/sd_notify.xml
+@@ -241,7 +241,7 @@
+                 <constant>libsystemd-daemon</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+                 file. Alternatively, applications consuming these APIs
+                 may copy the implementation into their source tree. For
+-                more details about the reference implementation see
++                more details about the reference implementation, see
+                 <citerefentry><refentrytitle>sd-daemon</refentrytitle><manvolnum>3</manvolnum></citerefentry>.</para>
+ 
+                 <para>If the reference implementation is used as
+diff --git a/man/sd_readahead.xml b/man/sd_readahead.xml
+index bb01bcf..9827299 100644
+--- a/man/sd_readahead.xml
++++ b/man/sd_readahead.xml
+@@ -139,7 +139,7 @@
+                 <filename>sd-readahead.h</filename> files. It is
+                 recommended that applications consuming this API copy
+                 the implementation into their source tree. For more
+-                details about the reference implementation see
++                details about the reference implementation, see
+                 <citerefentry><refentrytitle>sd-readahead</refentrytitle><manvolnum>3</manvolnum></citerefentry></para>
+ 
+                 <para>If -DDISABLE_SYSTEMD is set during compilation,
+diff --git a/man/sd_seat_get_active.xml b/man/sd_seat_get_active.xml
+index 23d582d..c64ba13 100644
+--- a/man/sd_seat_get_active.xml
++++ b/man/sd_seat_get_active.xml
+@@ -143,9 +143,9 @@
+         <refsect1>
+                 <title>Return Value</title>
+ 
+-                <para> On success
++                <para> On success,
+                 <function>sd_seat_get_active()</function>
+-                returns 0 or a positive integer. On success
++                returns 0 or a positive integer. On success,
+                 <function>sd_seat_get_sessions()</function> returns
+                 the number of entries in the session identifier
+                 array. If the test succeeds,
+diff --git a/man/sd_uid_get_state.xml b/man/sd_uid_get_state.xml
+index 0faa765..30b254c 100644
+--- a/man/sd_uid_get_state.xml
++++ b/man/sd_uid_get_state.xml
+@@ -152,11 +152,11 @@
+         <refsect1>
+                 <title>Return Value</title>
+ 
+-                <para>On success
++                <para>On success,
+                 <function>sd_uid_get_state()</function> returns 0 or a
+                 positive integer. If the test succeeds,
+                 <function>sd_uid_is_on_seat()</function> returns a
+-                positive integer, if it fails
++                positive integer; if it fails,
+                 0. <function>sd_uid_get_sessions()</function> and
+                 <function>sd_uid_get_seats()</function> return the
+                 number of entries in the returned arrays. On failure,
+diff --git a/man/shutdown.xml b/man/shutdown.xml
+index 795fb66..27e7e87 100644
+--- a/man/shutdown.xml
++++ b/man/shutdown.xml
+@@ -164,7 +164,7 @@
+         <refsect1>
+                 <title>Exit status</title>
+ 
+-                <para>On success 0 is returned, a non-zero failure
++                <para>On success, 0 is returned, a non-zero failure
+                 code otherwise.</para>
+         </refsect1>
+ 
+diff --git a/man/systemd-analyze.xml b/man/systemd-analyze.xml
+index aefbfc8..b7753f9 100644
+--- a/man/systemd-analyze.xml
++++ b/man/systemd-analyze.xml
+@@ -270,7 +270,7 @@
+         <refsect1>
+                 <title>Exit status</title>
+ 
+-                <para>On success 0 is returned, a non-zero failure
++                <para>On success, 0 is returned, a non-zero failure
+                 code otherwise.</para>
+         </refsect1>
+ 
+diff --git a/man/systemd-ask-password.xml b/man/systemd-ask-password.xml
+index 8af328d..79902cb 100644
+--- a/man/systemd-ask-password.xml
++++ b/man/systemd-ask-password.xml
+@@ -167,7 +167,7 @@
+         <refsect1>
+                 <title>Exit status</title>
+ 
+-                <para>On success 0 is returned, a non-zero failure
++                <para>On success, 0 is returned, a non-zero failure
+                 code otherwise.</para>
+         </refsect1>
+ 
+diff --git a/man/systemd-cat.xml b/man/systemd-cat.xml
+index ffb1dfd..ba7a2cf 100644
+--- a/man/systemd-cat.xml
++++ b/man/systemd-cat.xml
+@@ -158,7 +158,7 @@
+         <refsect1>
+                 <title>Exit status</title>
+ 
+-                <para>On success 0 is returned, a non-zero failure
++                <para>On success, 0 is returned, a non-zero failure
+                 code otherwise.</para>
+         </refsect1>
+ 
+diff --git a/man/systemd-cgls.xml b/man/systemd-cgls.xml
+index 432706b..152b883 100644
+--- a/man/systemd-cgls.xml
++++ b/man/systemd-cgls.xml
+@@ -145,7 +145,7 @@
+         <refsect1>
+                 <title>Exit status</title>
+ 
+-                <para>On success 0 is returned, a non-zero failure
++                <para>On success, 0 is returned, a non-zero failure
+                 code otherwise.</para>
+         </refsect1>
+ 
+diff --git a/man/systemd-cgtop.xml b/man/systemd-cgtop.xml
+index 7faedfb..0e1f7c5 100644
+--- a/man/systemd-cgtop.xml
++++ b/man/systemd-cgtop.xml
+@@ -264,7 +264,7 @@
+         <refsect1>
+                 <title>Exit status</title>
+ 
+-                <para>On success 0 is returned, a non-zero failure
++                <para>On success, 0 is returned, a non-zero failure
+                 code otherwise.</para>
+         </refsect1>
+ 
+diff --git a/man/systemd-coredumpctl.xml b/man/systemd-coredumpctl.xml
+index 9ccb67d..67f75d1 100644
+--- a/man/systemd-coredumpctl.xml
++++ b/man/systemd-coredumpctl.xml
+@@ -200,7 +200,7 @@
+ 
+         <refsect1>
+                 <title>Exit status</title>
+-                <para>On success 0 is returned, a non-zero failure
++                <para>On success, 0 is returned, a non-zero failure
+                 code otherwise. Not finding any matching coredumps is treated
+                 as failure.
+                 </para>
+diff --git a/man/systemd-delta.xml b/man/systemd-delta.xml
+index 4d3ab78..ebaa349 100644
+--- a/man/systemd-delta.xml
++++ b/man/systemd-delta.xml
+@@ -223,7 +223,7 @@
+         <refsect1>
+                 <title>Exit status</title>
+ 
+-                <para>On success 0 is returned, a non-zero failure
++                <para>On success, 0 is returned, a non-zero failure
+                 code otherwise.</para>
+         </refsect1>
+ 
+diff --git a/man/systemd-machine-id-setup.xml b/man/systemd-machine-id-setup.xml
+index bc38d55..7b3aa7e 100644
+--- a/man/systemd-machine-id-setup.xml
++++ b/man/systemd-machine-id-setup.xml
+@@ -116,7 +116,7 @@
+         <refsect1>
+                 <title>Exit status</title>
+ 
+-                <para>On success 0 is returned, a non-zero failure
++                <para>On success, 0 is returned, a non-zero failure
+                 code otherwise.</para>
+         </refsect1>
+ 
+diff --git a/man/systemd-notify.xml b/man/systemd-notify.xml
+index a769346..e14977d 100644
+--- a/man/systemd-notify.xml
++++ b/man/systemd-notify.xml
+@@ -172,7 +172,7 @@
+         <refsect1>
+                 <title>Exit status</title>
+ 
+-                <para>On success 0 is returned, a non-zero failure
++                <para>On success, 0 is returned, a non-zero failure
+                 code otherwise.</para>
+         </refsect1>
+ 
+diff --git a/man/systemd-tmpfiles.xml b/man/systemd-tmpfiles.xml
+index 495247e..c678031 100644
+--- a/man/systemd-tmpfiles.xml
++++ b/man/systemd-tmpfiles.xml
+@@ -178,7 +178,7 @@
+         <refsect1>
+                 <title>Exit status</title>
+ 
+-                <para>On success 0 is returned, a non-zero failure
++                <para>On success, 0 is returned, a non-zero failure
+                 code otherwise.</para>
+         </refsect1>
+ 
+diff --git a/man/systemd-tty-ask-password-agent.xml b/man/systemd-tty-ask-password-agent.xml
+index 31a18ba..cb5fb43 100644
+--- a/man/systemd-tty-ask-password-agent.xml
++++ b/man/systemd-tty-ask-password-agent.xml
+@@ -148,7 +148,7 @@
+         <refsect1>
+                 <title>Exit status</title>
+ 
+-                <para>On success 0 is returned, a non-zero failure
++                <para>On success, 0 is returned, a non-zero failure
+                 code otherwise.</para>
+         </refsect1>
+ 
+diff --git a/man/systemd.device.xml b/man/systemd.device.xml
+index 002b647..586473c 100644
+--- a/man/systemd.device.xml
++++ b/man/systemd.device.xml
+@@ -75,7 +75,7 @@
+                 udev tag (by default all block and network devices,
+                 and a few others). This may be used to define
+                 dependencies between devices and other units. To tag a
+-                udev device use <literal>TAG+="systemd"</literal> in
++                udev device, use <literal>TAG+="systemd"</literal> in
+                 the udev rules file, see
+                 <citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry>
+                 for details.</para>
+diff --git a/man/systemd.mount.xml b/man/systemd.mount.xml
+index df5a79e..6f9f70c 100644
+--- a/man/systemd.mount.xml
++++ b/man/systemd.mount.xml
+@@ -94,7 +94,7 @@
+                 in a unit file
+                 <filename>home-lennart.mount</filename>. For details
+                 about the escaping logic used to convert a file system
+-                path to a unit name see
++                path to a unit name, see
+                 <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>.</para>
+ 
+                 <para>Optionally, a mount unit may be accompanied by
+diff --git a/man/systemd.service.xml b/man/systemd.service.xml
+index 80a935d..e869f95 100644
+--- a/man/systemd.service.xml
++++ b/man/systemd.service.xml
+@@ -441,7 +441,7 @@
+                                 <literal>one</literal> and
+                                 <literal>two two</literal>,
+                                 respectively. Since two commands are
+-                                specified
++                                specified,
+                                 <varname>Type=oneshot</varname> must
+                                 be used.</para>
+ 
+diff --git a/man/systemd.special.xml b/man/systemd.special.xml
+index 863a029..76bb5cd 100644
+--- a/man/systemd.special.xml
++++ b/man/systemd.special.xml
+@@ -996,7 +996,7 @@
+                 <filename>smartcard.target</filename>,
+                 <filename>sound.target</filename>.</para>
+ 
+-                <para>In addition the following special unit is
++                <para>In addition, the following special unit is
+                 understood only when systemd runs as service instance:</para>
+ 
+                 <variablelist>
+diff --git a/man/systemd.swap.xml b/man/systemd.swap.xml
+index 13f6c84..5e8b25f 100644
+--- a/man/systemd.swap.xml
++++ b/man/systemd.swap.xml
+@@ -85,7 +85,7 @@
+                 <filename noindex='true'>/dev/sda5</filename> must be configured in a
+                 unit file <filename>dev-sda5.swap</filename>. For
+                 details about the escaping logic used to convert a
+-                file system path to a unit name see
++                file system path to a unit name, see
+                 <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>.</para>
+ 
+                 <para>All swap units automatically get the appropriate
+diff --git a/man/systemd.xml b/man/systemd.xml
+index 85c06d3..23a0c26 100644
+--- a/man/systemd.xml
++++ b/man/systemd.xml
+@@ -494,7 +494,7 @@
+                 <filename>/proc</filename>.</para>
+ 
+                 <para>For more information about the concepts and
+-                ideas behind systemd please refer to the <ulink
++                ideas behind systemd, please refer to the <ulink
+                 url="http://0pointer.de/blog/projects/systemd.html">Original
+                 Design Document</ulink>.</para>
+ 
+diff --git a/man/telinit.xml b/man/telinit.xml
+index bb80939..b20a60a 100644
+--- a/man/telinit.xml
++++ b/man/telinit.xml
+@@ -171,7 +171,7 @@
+         <refsect1>
+                 <title>Exit status</title>
+ 
+-                <para>On success 0 is returned, a non-zero failure
++                <para>On success, 0 is returned, a non-zero failure
+                 code otherwise.</para>
+         </refsect1>
+ 
+diff --git a/man/timedatectl.xml b/man/timedatectl.xml
+index be0ad3f..f4975ce 100644
+--- a/man/timedatectl.xml
++++ b/man/timedatectl.xml
+@@ -222,7 +222,7 @@
+         <refsect1>
+                 <title>Exit status</title>
+ 
+-                <para>On success 0 is returned, a non-zero failure
++                <para>On success, 0 is returned, a non-zero failure
+                 code otherwise.</para>
+         </refsect1>
+ 
diff --git a/0202-man-grammar-and-wording-improvements.patch b/0202-man-grammar-and-wording-improvements.patch
new file mode 100644
index 0000000..f40a0a9
--- /dev/null
+++ b/0202-man-grammar-and-wording-improvements.patch
@@ -0,0 +1,79 @@
+From cae52ffc976561b6c847a38e3ea9d9a9ce2c1513 Mon Sep 17 00:00:00 2001
+From: Jan Engelhardt <jengelh at inai.de>
+Date: Thu, 26 Dec 2013 02:47:45 +0100
+Subject: [PATCH] man: grammar and wording improvements
+
+This is a recurring submission and includes corrections to:
+- missing words, preposition choice.
+- change of /lib to /usr/lib, because that is what most distros are
+  using as the system-wide location for systemd/udev files.
+
+Conflicts:
+	man/journalctl.xml
+	man/sd_bus_message_get_cookie.xml
+	man/sd_bus_request_name.xml
+	man/systemctl.xml
+	man/systemd-networkd.service.xml
+	man/systemd.device.xml
+	man/systemd.exec.xml
+	man/systemd.timer.xml
+	man/udev.xml
+---
+ man/daemon.xml          | 2 +-
+ man/sd_is_fifo.xml      | 2 +-
+ man/systemd.service.xml | 2 +-
+ man/systemd.unit.xml    | 2 +-
+ 4 files changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/man/daemon.xml b/man/daemon.xml
+index 7790420..1fe4546 100644
+--- a/man/daemon.xml
++++ b/man/daemon.xml
+@@ -408,7 +408,7 @@
+                         description files.</para>
+ 
+                         <para>In systemd, if the developer or
+-                        administrator wants to make sure a service or
++                        administrator wants to make sure that a service or
+                         other unit is activated automatically on boot,
+                         it is recommended to place a symlink to the
+                         unit file in the <filename>.wants/</filename>
+diff --git a/man/sd_is_fifo.xml b/man/sd_is_fifo.xml
+index 4bb2236..58cd1c9 100644
+--- a/man/sd_is_fifo.xml
++++ b/man/sd_is_fifo.xml
+@@ -165,7 +165,7 @@
+                 called to check whether the specified file descriptor
+                 refers to a special file. If the
+                 <parameter>path</parameter> parameter is not
+-                <constant>NULL</constant>, it is checked whether file
++                <constant>NULL</constant>, it is checked whether the file
+                 descriptor is bound to the specified file
+                 name. Special files in this context are character
+                 device nodes and files in <filename>/proc</filename>
+diff --git a/man/systemd.service.xml b/man/systemd.service.xml
+index e869f95..e3a370f 100644
+--- a/man/systemd.service.xml
++++ b/man/systemd.service.xml
+@@ -427,7 +427,7 @@
+                                 <programlisting>ExecStart=/bin/sh -c 'dmesg | tac'
+                                 </programlisting>
+ 
+-                                <para>Only select environment variables
++                                <para>Only select environment variables that
+                                 are set for executed commands. See
+                                 <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
+                                 </para>
+diff --git a/man/systemd.unit.xml b/man/systemd.unit.xml
+index b70c5e9..f6b4b24 100644
+--- a/man/systemd.unit.xml
++++ b/man/systemd.unit.xml
+@@ -548,7 +548,7 @@
+                                 of units. When systemd stops or restarts
+                                 the units listed here, the action is
+                                 propagated to this unit.
+-                                Note that this is a one way dependency —
++                                Note that this is a one-way dependency —
+                                 changes to this unit do not affect the
+                                 listed units.
+                                 </para></listitem>
diff --git a/0203-man-document-fail-nofail-auto-noauto.patch b/0203-man-document-fail-nofail-auto-noauto.patch
new file mode 100644
index 0000000..104ec34
--- /dev/null
+++ b/0203-man-document-fail-nofail-auto-noauto.patch
@@ -0,0 +1,130 @@
+From 6566f27fc123e1b2fd14e5177dcb21c6b3598d5d Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Wed, 25 Dec 2013 23:20:57 -0500
+Subject: [PATCH] man: document fail/nofail, auto/noauto
+
+Also s/filesystem/file system/ in a few places.
+
+Conflicts:
+	TODO
+	man/systemd-fsck at .service.xml
+	man/systemd-fstab-generator.xml
+---
+ man/systemd-fsck at .service.xml   |  5 ++++-
+ man/systemd-fstab-generator.xml |  6 ++++++
+ man/systemd-halt.service.xml    |  2 +-
+ man/systemd.mount.xml           | 20 +++++++++++++++++++-
+ man/systemd.unit.xml            |  2 +-
+ man/udevadm.xml                 |  2 +-
+ 6 files changed, 32 insertions(+), 5 deletions(-)
+
+diff --git a/man/systemd-fsck at .service.xml b/man/systemd-fsck at .service.xml
+index e934352..c653dc5 100644
+--- a/man/systemd-fsck at .service.xml
++++ b/man/systemd-fsck at .service.xml
+@@ -62,7 +62,10 @@
+                 system
+                 check. <filename>systemd-fsck-root.service</filename> is
+                 responsible for file system checks on the root
+-                file system.</para>
++                file system. The root file system check is performed
++                before the other file systems. Either service is enabled
++                at boot if passno in <filename>/etc/fstab</filename> for
++                the file system is set to a value greater than zero.</para>
+ 
+                 <para><filename>systemd-fsck</filename> will
+                 forward file system checking progress to the
+diff --git a/man/systemd-fstab-generator.xml b/man/systemd-fstab-generator.xml
+index 9ca16c7..e3cf5d2 100644
+--- a/man/systemd-fstab-generator.xml
++++ b/man/systemd-fstab-generator.xml
+@@ -61,6 +61,12 @@
+                 reloaded. This will instantiate mount and swap units
+                 as necessary.</para>
+ 
++                <para>The <varname>passno</varname> field is treated
++                like a simple boolean, and the ordering information is
++                discarded. However, if the root file system is
++                checked, it is checked before all the other
++                file systems.</para>
++
+                 <para>See
+                 <citerefentry><refentrytitle>systemd.mount</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+                 and
+diff --git a/man/systemd-halt.service.xml b/man/systemd-halt.service.xml
+index 99457aa..bec2e36 100644
+--- a/man/systemd-halt.service.xml
++++ b/man/systemd-halt.service.xml
+@@ -86,7 +86,7 @@
+                 <para>It is necessary to have this code in a separate binary
+                 because otherwise rebooting after an upgrade might be broken —
+                 the running PID 1 could still depend on libraries which are not
+-                available any more, thus keeping the filesystem busy, which
++                available any more, thus keeping the file system busy, which
+                 then cannot be re-mounted read-only.</para>
+ 
+                 <para>Immediately before executing the actual system
+diff --git a/man/systemd.mount.xml b/man/systemd.mount.xml
+index 6f9f70c..cadf950 100644
+--- a/man/systemd.mount.xml
++++ b/man/systemd.mount.xml
+@@ -132,7 +132,10 @@
+                 for details). Mounts listed in
+                 <filename>/etc/fstab</filename> will be converted into
+                 native units dynamically at boot and when the
+-                configuration of the system manager is reloaded. See
++                configuration of the system manager is reloaded. In
++                general, configuring mount points through
++                <filename>/etc/fstab</filename> is the preferred
++                approach. See
+                 <citerefentry><refentrytitle>systemd-fstab-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry>
+                 for details about the conversion.</para>
+ 
+@@ -159,6 +162,21 @@
+                 <literal>s</literal>, <literal>min</literal>,
+                 <literal>h</literal>, <literal>ms</literal>.</para>
+ 
++                <para>If <option>nofail</option> is given, this mount
++                will be only wanted, not required, by the
++                <filename>local-fs.target</filename>. This means that
++                the boot will continue even if this mount point is not
++                mounted successfully. Option <option>fail</option> has
++                the opposite meaning and is the default.</para>
++
++                <para>If <option>noauto</option> is given, this mount
++                will not be added as a dependency for
++                <filename>local-fs.target</filename>. This means that
++                it will not be mounted automatically during boot,
++                unless it is pulled in by some other unit. Option
++                <option>auto</option> has the opposite meaning and is
++                the default.</para>
++
+                 <para>If a mount point is configured in both
+                 <filename>/etc/fstab</filename> and a unit file that
+                 is stored below <filename>/usr</filename>, the former
+diff --git a/man/systemd.unit.xml b/man/systemd.unit.xml
+index f6b4b24..4704352 100644
+--- a/man/systemd.unit.xml
++++ b/man/systemd.unit.xml
+@@ -232,7 +232,7 @@
+                 multiple units from a single configuration file. If
+                 systemd looks for a unit configuration file, it will
+                 first search for the literal unit name in the
+-                filesystem. If that yields no success and the unit
++                file system. If that yields no success and the unit
+                 name contains an <literal>@</literal> character, systemd will look for a
+                 unit template that shares the same name but with the
+                 instance string (i.e. the part between the <literal>@</literal> character
+diff --git a/man/udevadm.xml b/man/udevadm.xml
+index a1ffe42..ca3713f 100644
+--- a/man/udevadm.xml
++++ b/man/udevadm.xml
+@@ -461,7 +461,7 @@
+         <varlistentry>
+           <term><option>--root=<replaceable>string</replaceable></option></term>
+           <listitem>
+-            <para>Alternative root path in the filesystem for reading and writing files.</para>
++            <para>Alternative root path in the file system for reading and writing files.</para>
+           </listitem>
+         </varlistentry>
+       </variablelist>
diff --git a/0204-man-fix-description-of-is-enabled-returned-value.patch b/0204-man-fix-description-of-is-enabled-returned-value.patch
new file mode 100644
index 0000000..0686560
--- /dev/null
+++ b/0204-man-fix-description-of-is-enabled-returned-value.patch
@@ -0,0 +1,22 @@
+From 8debc611398abf60d16e73982c9d56b5ea957e15 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Tue, 24 Dec 2013 22:57:15 -0500
+Subject: [PATCH] man: fix description of is-enabled returned value
+
+---
+ man/systemctl.xml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/man/systemctl.xml b/man/systemctl.xml
+index 61deb19..25b03d8 100644
+--- a/man/systemctl.xml
++++ b/man/systemctl.xml
+@@ -932,7 +932,7 @@ kobject-uevent 1 systemd-udevd-kernel.socket systemd-udevd.service
+                   <row>
+                     <entry><literal>static</literal></entry>
+                     <entry>Unit is not enabled, but has no provisions for enabling in [Install] section</entry>
+-                    <entry>1</entry>
++                    <entry>0</entry>
+                   </row>
+                   <row>
+                     <entry><literal>disabled</literal></entry>
diff --git a/0205-man-fix-Type-reference.patch b/0205-man-fix-Type-reference.patch
new file mode 100644
index 0000000..7bc3030
--- /dev/null
+++ b/0205-man-fix-Type-reference.patch
@@ -0,0 +1,23 @@
+From c32611c5388de404cf4b169fa3d757c2603e597d Mon Sep 17 00:00:00 2001
+From: Marcos Felipe Rasia de Mello <marcosfrm at gmail.com>
+Date: Thu, 26 Dec 2013 17:47:57 -0200
+Subject: [PATCH] man: fix Type= reference
+
+Simple man page fix attached.
+---
+ man/systemd.service.xml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/man/systemd.service.xml b/man/systemd.service.xml
+index e3a370f..898c19d 100644
+--- a/man/systemd.service.xml
++++ b/man/systemd.service.xml
+@@ -139,7 +139,7 @@
+ 
+                                 <para>If set to
+                                 <option>simple</option> (the default
+-                                value if <varname>BusName=</varname>
++                                value if <varname>Type=</varname>
+                                 is not specified), it is expected that
+                                 the process configured with
+                                 <varname>ExecStart=</varname> is the
diff --git a/0206-man-fix-Type-reference-v2.patch b/0206-man-fix-Type-reference-v2.patch
new file mode 100644
index 0000000..694a0f3
--- /dev/null
+++ b/0206-man-fix-Type-reference-v2.patch
@@ -0,0 +1,37 @@
+From 73868c5b0a59438256d8abd4157ff915a7dc1f37 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Fri, 27 Dec 2013 01:18:39 -0500
+Subject: [PATCH] man: fix Type= reference v2
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+grawity:
+
+  It looks like the old version _was_ correct – the default value will
+  be "Type=dbus" if the service has a BusName set.
+
+  Suggested change: "if neither Type= nor BusName= is specified"
+---
+ man/systemd.service.xml | 8 +++++---
+ 1 file changed, 5 insertions(+), 3 deletions(-)
+
+diff --git a/man/systemd.service.xml b/man/systemd.service.xml
+index 898c19d..71bcfb4 100644
+--- a/man/systemd.service.xml
++++ b/man/systemd.service.xml
+@@ -139,9 +139,11 @@
+ 
+                                 <para>If set to
+                                 <option>simple</option> (the default
+-                                value if <varname>Type=</varname>
+-                                is not specified), it is expected that
+-                                the process configured with
++                                value if neither
++                                <varname>Type=</varname> nor
++                                <varname>BusName=</varname> are
++                                specified), it is expected that the
++                                process configured with
+                                 <varname>ExecStart=</varname> is the
+                                 main process of the service. In this
+                                 mode, if the process offers
diff --git a/0207-hwdb-Update-database-of-Bluetooth-company-identifier.patch b/0207-hwdb-Update-database-of-Bluetooth-company-identifier.patch
new file mode 100644
index 0000000..c013152
--- /dev/null
+++ b/0207-hwdb-Update-database-of-Bluetooth-company-identifier.patch
@@ -0,0 +1,38 @@
+From d38baf3d9088a2d206a6b622fb7f609dc115bd6a Mon Sep 17 00:00:00 2001
+From: Marcel Holtmann <marcel at holtmann.org>
+Date: Fri, 27 Dec 2013 09:35:20 -0800
+Subject: [PATCH] hwdb: Update database of Bluetooth company identifiers
+
+---
+ hwdb/20-bluetooth-vendor-product.hwdb | 14 +++++++++++++-
+ 1 file changed, 13 insertions(+), 1 deletion(-)
+
+diff --git a/hwdb/20-bluetooth-vendor-product.hwdb b/hwdb/20-bluetooth-vendor-product.hwdb
+index 6f8301f..192b715 100644
+--- a/hwdb/20-bluetooth-vendor-product.hwdb
++++ b/hwdb/20-bluetooth-vendor-product.hwdb
+@@ -427,7 +427,7 @@ bluetooth:v008B*
+  ID_VENDOR_FROM_DATABASE=Topcorn Positioning Systems, LLC
+ 
+ bluetooth:v008C*
+- ID_VENDOR_FROM_DATABASE=Qualcomm Labs, Inc.
++ ID_VENDOR_FROM_DATABASE=Qualcomm Retail Solutions, Inc. (formerly Qualcomm Labs, Inc.)
+ 
+ bluetooth:v008D*
+  ID_VENDOR_FROM_DATABASE=Zscan Software
+@@ -839,3 +839,15 @@ bluetooth:v0115*
+ 
+ bluetooth:v0116*
+  ID_VENDOR_FROM_DATABASE=1OAK Technologies
++
++bluetooth:v0117*
++ ID_VENDOR_FROM_DATABASE=Wimoto Technologies Inc
++
++bluetooth:v0118*
++ ID_VENDOR_FROM_DATABASE=Radius Networks, Inc.
++
++bluetooth:v0119*
++ ID_VENDOR_FROM_DATABASE=Wize Technology Co., Ltd.
++
++bluetooth:v011A*
++ ID_VENDOR_FROM_DATABASE=Qualcomm Labs, Inc.
diff --git a/0208-man-add-a-note-about-propagating-signals.patch b/0208-man-add-a-note-about-propagating-signals.patch
new file mode 100644
index 0000000..687f5a7
--- /dev/null
+++ b/0208-man-add-a-note-about-propagating-signals.patch
@@ -0,0 +1,61 @@
+From 16142c7f1f24c58af1388608f1efb382a094bcb5 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Fri, 27 Dec 2013 15:27:24 -0500
+Subject: [PATCH] man: add a note about propagating signals
+
+---
+ man/systemd.service.xml | 39 +++++++++++++++++++++++++--------------
+ 1 file changed, 25 insertions(+), 14 deletions(-)
+
+diff --git a/man/systemd.service.xml b/man/systemd.service.xml
+index 71bcfb4..af3e0f2 100644
+--- a/man/systemd.service.xml
++++ b/man/systemd.service.xml
+@@ -734,22 +734,33 @@ ExecStart=/bin/echo $ONE $TWO ${TWO}
+                                 considered successful termination, in
+                                 addition to the normal successful exit
+                                 code 0 and the signals <constant>SIGHUP</constant>, <constant>SIGINT</constant>,
+-                                <constant>SIGTERM</constant> and <constant>SIGPIPE</constant>. Exit status
++                                <constant>SIGTERM</constant>, and <constant>SIGPIPE</constant>. Exit status
+                                 definitions can either be numeric exit
+                                 codes or termination signal names,
+-                                separated by spaces. Example:
+-                                <literal>SuccessExitStatus=1 2 8
+-                                <constant>SIGKILL</constant></literal>, ensures that exit
+-                                codes 1, 2, 8 and the termination
+-                                signal <constant>SIGKILL</constant> are considered clean
+-                                service terminations. This option may
+-                                appear more than once in which case
+-                                the list of successful exit statuses
+-                                is merged. If the empty string is
+-                                assigned to this option, the list is
+-                                reset, all prior assignments of this
+-                                option will have no
+-                                effect.</para></listitem>
++                                separated by spaces. For example:
++				<programlisting>SuccessExitStatus=1 2 8 <constant>SIGKILL</constant></programlisting>
++				ensures that exit codes 1, 2, 8 and
++				the termination signal
++				<constant>SIGKILL</constant> are
++				considered clean service terminations.
++			        </para>
++
++				<para>Note that if a process has a
++				signal handler installed and exits by
++				calling
++				<citerefentry><refentrytitle>_exit</refentrytitle><manvolnum>2</manvolnum></citerefentry>
++				in response to a signal, the
++				information about the signal is lost.
++				Programs should instead perform cleanup and kill themselves with the same signal instead. See
++				<ulink url="http://www.cons.org/cracauer/sigint.html">Proper handling of SIGINT/SIGQUIT — How to be a proper program</ulink>.</para>
++
++				<para>This option may appear more than once
++				in which case the list of successful
++				exit statuses is merged. If the empty
++				string is assigned to this option, the
++				list is reset, all prior assignments
++				of this option will have no
++				effect.</para></listitem>
+                         </varlistentry>
+ 
+                         <varlistentry>
diff --git a/0209-man-include-autoconf-snippet-in-daemon-7.patch b/0209-man-include-autoconf-snippet-in-daemon-7.patch
new file mode 100644
index 0000000..1a74456
--- /dev/null
+++ b/0209-man-include-autoconf-snippet-in-daemon-7.patch
@@ -0,0 +1,41 @@
+From cc5b9c30f5e8312ee8905f7882da7ab79fef571c Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= <mgorny at gentoo.org>
+Date: Fri, 27 Dec 2013 23:44:27 -0500
+Subject: [PATCH] man: include autoconf snippet in daemon(7)
+
+https://bugs.freedesktop.org/show_bug.cgi?id=40446
+---
+ man/daemon.xml | 20 ++++++++++++++------
+ 1 file changed, 14 insertions(+), 6 deletions(-)
+
+diff --git a/man/daemon.xml b/man/daemon.xml
+index 1fe4546..105826a 100644
+--- a/man/daemon.xml
++++ b/man/daemon.xml
+@@ -765,12 +765,20 @@
+ 
+                         <programlisting>PKG_PROG_PKG_CONFIG
+ AC_ARG_WITH([systemdsystemunitdir],
+-        AS_HELP_STRING([--with-systemdsystemunitdir=DIR], [Directory for systemd service files]),
+-        [], [with_systemdsystemunitdir=$($PKG_CONFIG --variable=systemdsystemunitdir systemd)])
+-if test "x$with_systemdsystemunitdir" != xno; then
+-        AC_SUBST([systemdsystemunitdir], [$with_systemdsystemunitdir])
+-fi
+-AM_CONDITIONAL(HAVE_SYSTEMD, [test -n "$with_systemdsystemunitdir" -a "x$with_systemdsystemunitdir" != xno ])</programlisting>
++     AS_HELP_STRING([--with-systemdsystemunitdir=DIR], [Directory for systemd service files]),,
++     [with_systemdsystemunitdir=auto])
++AS_IF([test "x$with_systemdsystemunitdir" = "xyes" -o "x$with_systemdsystemunitdir" = "xauto"], [
++     def_systemdsystemunitdir=$($PKG_CONFIG --variable=systemdsystemunitdir systemd)
++
++     AS_IF([test "x$def_systemdsystemunitdir" = "x"],
++         [AS_IF([test "x$with_systemdsystemunitdir" = "xyes"],
++                [AC_MSG_ERROR([systemd support requested but pkg-config unable to query systemd package])])
++          with_systemdsystemunitdir=no],
++         [with_systemdsystemunitdir=$def_systemdsystemunitdir])])
++AS_IF([test "x$with_systemdsystemunitdir" != "xno"],
++      [AC_SUBST([systemdsystemunitdir], [$with_systemdsystemunitdir])])
++AM_CONDITIONAL(HAVE_SYSTEMD, [test "x$with_systemdsystemunitdir" != "xno"])
++</programlisting>
+ 
+                         <para>This snippet allows automatic
+                         installation of the unit files on systemd
diff --git a/0210-systemd-python-fix-setting-of-exception-codes.patch b/0210-systemd-python-fix-setting-of-exception-codes.patch
new file mode 100644
index 0000000..82d0980
--- /dev/null
+++ b/0210-systemd-python-fix-setting-of-exception-codes.patch
@@ -0,0 +1,325 @@
+From 2a683cff7e7ac4f94ce545a0907d5b5b883c2a36 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Sun, 29 Dec 2013 23:39:28 -0500
+Subject: [PATCH] systemd-python: fix setting of exception codes
+
+The return value of 0 would be treated as failure by mistake,
+resulting in " SystemError: error return without exception set".
+The way that set_error() is used is changed to be the same
+everywhere.
+---
+ src/python-systemd/_daemon.c | 14 +++++-----
+ src/python-systemd/_reader.c | 63 ++++++++++++++++++++------------------------
+ 2 files changed, 35 insertions(+), 42 deletions(-)
+
+diff --git a/src/python-systemd/_daemon.c b/src/python-systemd/_daemon.c
+index f0ab16f..c6db69f 100644
+--- a/src/python-systemd/_daemon.c
++++ b/src/python-systemd/_daemon.c
+@@ -88,7 +88,7 @@ static PyObject* notify(PyObject *self, PyObject *args, PyObject *keywds) {
+ #endif
+ 
+         r = sd_notify(unset, msg);
+-        if (set_error(r, NULL, NULL))
++        if (set_error(r, NULL, NULL) < 0)
+                 return NULL;
+ 
+         return PyBool_FromLong(r);
+@@ -123,7 +123,7 @@ static PyObject* listen_fds(PyObject *self, PyObject *args, PyObject *keywds) {
+ #endif
+ 
+         r = sd_listen_fds(unset);
+-        if (set_error(r, NULL, NULL))
++        if (set_error(r, NULL, NULL) < 0)
+                 return NULL;
+ 
+         return long_FromLong(r);
+@@ -151,7 +151,7 @@ static PyObject* is_fifo(PyObject *self, PyObject *args) {
+ #endif
+ 
+         r = sd_is_fifo(fd, path);
+-        if (set_error(r, path, NULL))
++        if (set_error(r, path, NULL) < 0)
+                 return NULL;
+ 
+         return PyBool_FromLong(r);
+@@ -179,7 +179,7 @@ static PyObject* is_mq(PyObject *self, PyObject *args) {
+ #endif
+ 
+         r = sd_is_mq(fd, path);
+-        if (set_error(r, path, NULL))
++        if (set_error(r, path, NULL) < 0)
+                 return NULL;
+ 
+         return PyBool_FromLong(r);
+@@ -203,7 +203,7 @@ static PyObject* is_socket(PyObject *self, PyObject *args) {
+                 return NULL;
+ 
+         r = sd_is_socket(fd, family, type, listening);
+-        if (set_error(r, NULL, NULL))
++        if (set_error(r, NULL, NULL) < 0)
+                 return NULL;
+ 
+         return PyBool_FromLong(r);
+@@ -230,7 +230,7 @@ static PyObject* is_socket_inet(PyObject *self, PyObject *args) {
+         }
+ 
+         r = sd_is_socket_inet(fd, family, type, listening, (uint16_t) port);
+-        if (set_error(r, NULL, NULL))
++        if (set_error(r, NULL, NULL) < 0)
+                 return NULL;
+ 
+         return PyBool_FromLong(r);
+@@ -265,7 +265,7 @@ static PyObject* is_socket_unix(PyObject *self, PyObject *args) {
+ #endif
+ 
+         r = sd_is_socket_unix(fd, type, listening, path, length);
+-        if (set_error(r, path, NULL))
++        if (set_error(r, path, NULL) < 0)
+                 return NULL;
+ 
+         return PyBool_FromLong(r);
+diff --git a/src/python-systemd/_reader.c b/src/python-systemd/_reader.c
+index bc5db19..0c88926 100644
+--- a/src/python-systemd/_reader.c
++++ b/src/python-systemd/_reader.c
+@@ -206,8 +206,7 @@ PyDoc_STRVAR(Reader_reliable_fd__doc__,
+ static PyObject* Reader_reliable_fd(Reader *self, PyObject *args)
+ {
+     int r = sd_journal_reliable_fd(self->j);
+-    set_error(r, NULL, NULL);
+-    if (r < 0)
++    if (set_error(r, NULL, NULL) < 0)
+         return NULL;
+     return PyBool_FromLong(r);
+ }
+@@ -221,8 +220,7 @@ PyDoc_STRVAR(Reader_get_events__doc__,
+ static PyObject* Reader_get_events(Reader *self, PyObject *args)
+ {
+     int r = sd_journal_get_events(self->j);
+-    set_error(r, NULL, NULL);
+-    if (r < 0)
++    if (set_error(r, NULL, NULL) < 0)
+         return NULL;
+     return long_FromLong(r);
+ }
+@@ -242,8 +240,7 @@ static PyObject* Reader_get_timeout(Reader *self, PyObject *args)
+     uint64_t t;
+ 
+     r = sd_journal_get_timeout(self->j, &t);
+-    set_error(r, NULL, NULL);
+-    if (r < 0)
++    if (set_error(r, NULL, NULL) < 0)
+         return NULL;
+ 
+     if (t == (uint64_t) -1)
+@@ -265,8 +262,7 @@ static PyObject* Reader_get_timeout_ms(Reader *self, PyObject *args)
+     uint64_t t;
+ 
+     r = sd_journal_get_timeout(self->j, &t);
+-    set_error(r, NULL, NULL);
+-    if (r < 0)
++    if (set_error(r, NULL, NULL) < 0)
+         return NULL;
+ 
+     return absolute_timeout(t);
+@@ -304,7 +300,7 @@ static PyObject* Reader_get_usage(Reader *self, PyObject *args)
+     uint64_t bytes;
+ 
+     r = sd_journal_get_usage(self->j, &bytes);
+-    if (set_error(r, NULL, NULL))
++    if (set_error(r, NULL, NULL) < 0)
+         return NULL;
+ 
+     assert_cc(sizeof(unsigned long long) == sizeof(bytes));
+@@ -366,8 +362,7 @@ static PyObject* Reader_next(Reader *self, PyObject *args)
+         assert_not_reached("should not be here");
+     Py_END_ALLOW_THREADS
+ 
+-    set_error(r, NULL, NULL);
+-    if (r < 0)
++    if (set_error(r, NULL, NULL) < 0)
+         return NULL;
+     return PyBool_FromLong(r);
+ }
+@@ -445,7 +440,8 @@ static PyObject* Reader_get(Reader *self, PyObject *args)
+     if (r == -ENOENT) {
+         PyErr_SetString(PyExc_KeyError, field);
+         return NULL;
+-    } else if (set_error(r, NULL, "field name is not valid"))
++    }
++    if (set_error(r, NULL, "field name is not valid") < 0)
+         return NULL;
+ 
+     r = extract(msg, msg_len, NULL, &value);
+@@ -530,7 +526,7 @@ static PyObject* Reader_get_realtime(Reader *self, PyObject *args)
+     assert(!args);
+ 
+     r = sd_journal_get_realtime_usec(self->j, &timestamp);
+-    if (set_error(r, NULL, NULL))
++    if (set_error(r, NULL, NULL) < 0)
+         return NULL;
+ 
+     assert_cc(sizeof(unsigned long long) == sizeof(timestamp));
+@@ -555,7 +551,7 @@ static PyObject* Reader_get_monotonic(Reader *self, PyObject *args)
+     assert(!args);
+ 
+     r = sd_journal_get_monotonic_usec(self->j, &timestamp, &id);
+-    if (set_error(r, NULL, NULL))
++    if (set_error(r, NULL, NULL) < 0)
+         return NULL;
+ 
+     assert_cc(sizeof(unsigned long long) == sizeof(timestamp));
+@@ -598,8 +594,7 @@ static PyObject* Reader_add_match(Reader *self, PyObject *args, PyObject *keywds
+         return NULL;
+ 
+     r = sd_journal_add_match(self->j, match, match_len);
+-    set_error(r, NULL, "Invalid match");
+-    if (r < 0)
++    if (set_error(r, NULL, "Invalid match") < 0)
+             return NULL;
+ 
+     Py_RETURN_NONE;
+@@ -616,8 +611,7 @@ static PyObject* Reader_add_disjunction(Reader *self, PyObject *args)
+ {
+     int r;
+     r = sd_journal_add_disjunction(self->j);
+-    set_error(r, NULL, NULL);
+-    if (r < 0)
++    if (set_error(r, NULL, NULL) < 0)
+         return NULL;
+     Py_RETURN_NONE;
+ }
+@@ -633,8 +627,7 @@ static PyObject* Reader_add_conjunction(Reader *self, PyObject *args)
+ {
+     int r;
+     r = sd_journal_add_conjunction(self->j);
+-    set_error(r, NULL, NULL);
+-    if (r < 0)
++    if (set_error(r, NULL, NULL) < 0)
+         return NULL;
+     Py_RETURN_NONE;
+ }
+@@ -661,7 +654,7 @@ static PyObject* Reader_seek_head(Reader *self, PyObject *args)
+     Py_BEGIN_ALLOW_THREADS
+     r = sd_journal_seek_head(self->j);
+     Py_END_ALLOW_THREADS
+-    if (set_error(r, NULL, NULL))
++    if (set_error(r, NULL, NULL) < 0)
+         return NULL;
+     Py_RETURN_NONE;
+ }
+@@ -678,7 +671,7 @@ static PyObject* Reader_seek_tail(Reader *self, PyObject *args)
+     Py_BEGIN_ALLOW_THREADS
+     r = sd_journal_seek_tail(self->j);
+     Py_END_ALLOW_THREADS
+-    if (set_error(r, NULL, NULL))
++    if (set_error(r, NULL, NULL) < 0)
+         return NULL;
+     Py_RETURN_NONE;
+ }
+@@ -699,7 +692,7 @@ static PyObject* Reader_seek_realtime(Reader *self, PyObject *args)
+     Py_BEGIN_ALLOW_THREADS
+     r = sd_journal_seek_realtime_usec(self->j, timestamp);
+     Py_END_ALLOW_THREADS
+-    if (set_error(r, NULL, NULL))
++    if (set_error(r, NULL, NULL) < 0)
+         return NULL;
+     Py_RETURN_NONE;
+ }
+@@ -723,20 +716,20 @@ static PyObject* Reader_seek_monotonic(Reader *self, PyObject *args)
+ 
+     if (bootid) {
+         r = sd_id128_from_string(bootid, &id);
+-        if (set_error(r, NULL, "Invalid bootid"))
++        if (set_error(r, NULL, "Invalid bootid") < 0)
+             return NULL;
+     } else {
+         Py_BEGIN_ALLOW_THREADS
+         r = sd_id128_get_boot(&id);
+         Py_END_ALLOW_THREADS
+-        if (set_error(r, NULL, NULL))
++        if (set_error(r, NULL, NULL) < 0)
+             return NULL;
+     }
+ 
+     Py_BEGIN_ALLOW_THREADS
+     r = sd_journal_seek_monotonic_usec(self->j, id, timestamp);
+     Py_END_ALLOW_THREADS
+-    if (set_error(r, NULL, NULL))
++    if (set_error(r, NULL, NULL) < 0)
+         return NULL;
+ 
+     Py_RETURN_NONE;
+@@ -809,7 +802,7 @@ static PyObject* Reader_seek_cursor(Reader *self, PyObject *args)
+     Py_BEGIN_ALLOW_THREADS
+     r = sd_journal_seek_cursor(self->j, cursor);
+     Py_END_ALLOW_THREADS
+-    if (set_error(r, NULL, "Invalid cursor"))
++    if (set_error(r, NULL, "Invalid cursor") < 0)
+         return NULL;
+     Py_RETURN_NONE;
+ }
+@@ -828,7 +821,7 @@ static PyObject* Reader_get_cursor(Reader *self, PyObject *args)
+     assert(!args);
+ 
+     r = sd_journal_get_cursor(self->j, &cursor);
+-    if (set_error(r, NULL, NULL))
++    if (set_error(r, NULL, NULL) < 0)
+         return NULL;
+ 
+     return unicode_FromString(cursor);
+@@ -851,8 +844,7 @@ static PyObject* Reader_test_cursor(Reader *self, PyObject *args)
+         return NULL;
+ 
+     r = sd_journal_test_cursor(self->j, cursor);
+-    set_error(r, NULL, NULL);
+-    if (r < 0)
++    if (set_error(r, NULL, NULL) < 0)
+         return NULL;
+ 
+     return PyBool_FromLong(r);
+@@ -876,7 +868,7 @@ static PyObject* Reader_query_unique(Reader *self, PyObject *args)
+     Py_BEGIN_ALLOW_THREADS
+     r = sd_journal_query_unique(self->j, query);
+     Py_END_ALLOW_THREADS
+-    if (set_error(r, NULL, "Invalid field name"))
++    if (set_error(r, NULL, "Invalid field name") < 0)
+         return NULL;
+ 
+     value_set = PySet_New(0);
+@@ -930,7 +922,8 @@ static PyObject* Reader_get_catalog(Reader *self, PyObject *args)
+         else
+             set_error(r, NULL, NULL);
+         return NULL;
+-    } else if (set_error(r, NULL, NULL))
++    }
++    if (set_error(r, NULL, NULL) < 0)
+         return NULL;
+ 
+     return unicode_FromString(msg);
+@@ -955,13 +948,13 @@ static PyObject* get_catalog(PyObject *self, PyObject *args)
+         return NULL;
+ 
+     r = sd_id128_from_string(id_, &id);
+-    if (set_error(r, NULL, "Invalid id128"))
++    if (set_error(r, NULL, "Invalid id128") < 0)
+         return NULL;
+ 
+     Py_BEGIN_ALLOW_THREADS
+     r = sd_journal_get_catalog_for_message_id(id, &msg);
+     Py_END_ALLOW_THREADS
+-    if (set_error(r, NULL, NULL))
++    if (set_error(r, NULL, NULL) < 0)
+         return NULL;
+ 
+     return unicode_FromString(msg);
+@@ -979,7 +972,7 @@ static PyObject* Reader_get_data_threshold(Reader *self, void *closure)
+     int r;
+ 
+     r = sd_journal_get_data_threshold(self->j, &cvalue);
+-    if (set_error(r, NULL, NULL))
++    if (set_error(r, NULL, NULL) < 0)
+         return NULL;
+ 
+     return long_FromSize_t(cvalue);
diff --git a/0211-systemd-python-fix-listen_fds-under-Python-2.patch b/0211-systemd-python-fix-listen_fds-under-Python-2.patch
new file mode 100644
index 0000000..fb0e675
--- /dev/null
+++ b/0211-systemd-python-fix-listen_fds-under-Python-2.patch
@@ -0,0 +1,22 @@
+From 353a5553a38d002a69a4fbafabf1e9ab50ff32c2 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Mon, 30 Dec 2013 00:01:00 -0500
+Subject: [PATCH] systemd-python: fix listen_fds under Python 2
+
+---
+ src/python-systemd/_daemon.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/python-systemd/_daemon.c b/src/python-systemd/_daemon.c
+index c6db69f..3982e85 100644
+--- a/src/python-systemd/_daemon.c
++++ b/src/python-systemd/_daemon.c
+@@ -114,7 +114,7 @@ static PyObject* listen_fds(PyObject *self, PyObject *args, PyObject *keywds) {
+ #else
+         PyObject *obj = NULL;
+         if (!PyArg_ParseTupleAndKeywords(args, keywds, "|O:_listen_fds",
+-                                         (char**) kwlist, &unset, &obj))
++                                         (char**) kwlist, &obj))
+                 return NULL;
+         if (obj != NULL)
+                 unset = PyObject_IsTrue(obj);
diff --git a/0212-man-expand-on-some-more-subtle-points-in-systemd.soc.patch b/0212-man-expand-on-some-more-subtle-points-in-systemd.soc.patch
new file mode 100644
index 0000000..a08fc4b
--- /dev/null
+++ b/0212-man-expand-on-some-more-subtle-points-in-systemd.soc.patch
@@ -0,0 +1,120 @@
+From 204a710b647527c35cee26962bbd324e6cebc822 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Mon, 30 Dec 2013 00:11:30 -0500
+Subject: [PATCH] man: expand on some more subtle points in systemd.socket(5)
+
+http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=727708#1694
+---
+ man/systemd.socket.xml | 67 ++++++++++++++++++++++++++++++++++++--------------
+ 1 file changed, 49 insertions(+), 18 deletions(-)
+
+diff --git a/man/systemd.socket.xml b/man/systemd.socket.xml
+index ac3127d..570a6fb 100644
+--- a/man/systemd.socket.xml
++++ b/man/systemd.socket.xml
+@@ -85,21 +85,26 @@
+                 processes of the socket.</para>
+ 
+                 <para>For each socket file a matching service file
+-                (see
++                must exist, describing the service to start on
++                incoming traffic on the socket (see
+                 <citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+-                for details) must exist, describing the service to
+-                start on incoming traffic on the socket. Depending on
+-                the setting of <option>Accept=</option> (see below),
+-                this must either be named like the socket unit, but
+-                with the suffix replaced; or it must be a template
+-                file named the same way. Example: a socket file
++                for more information about .service files). The name
++                of the .service unit is by default the same as the
++                name of the .socket unit, but can be altered with
++                <option>Service=</option> option described below.
++                Depending on the setting of <option>Accept=</option>
++                option described below, this .service unit must either
++                be named like the .socket unit, but with the suffix
++                replaced, unless overridden with
++                <option>Service=</option>; or it must be a template
++                unit named the same way. Example: a socket file
+                 <filename>foo.socket</filename> needs a matching
+                 service <filename>foo.service</filename> if
+                 <option>Accept=false</option> is set. If
+-                <option>Accept=true</option> is set, a service template
+-                file <filename>foo at .service</filename> must exist from
+-                which services are instantiated for each incoming
+-                connection.</para>
++                <option>Accept=true</option> is set, a service
++                template file <filename>foo at .service</filename> must
++                exist from which services are instantiated for each
++                incoming connection.</para>
+ 
+                 <para>Unless <varname>DefaultDependencies=</varname>
+                 is set to <option>false</option>, socket units will
+@@ -116,9 +121,21 @@
+                 boot or late system shutdown should disable this
+                 option.</para>
+ 
++		<para>Socket units will have a
++		<varname>Before=</varname> dependency on the service
++		which they trigger added implicitly. No implicit
++		<varname>WantedBy=</varname> or
++		<varname>RequiredBy=</varname> dependency from the
++		socket to the service is added. This means that the
++		service may be started without the socket, in which
++		case it must be able to open sockets by itself. To
++		prevent this, an explicit <varname>Requires=</varname>
++		dependency may be added.</para>
++
+                 <para>Socket units may be used to implement on-demand
+                 starting of services, as well as parallelized starting
+-                of services.</para>
++                of services. See the blog stories linked at the end
++                for introduction.</para>
+ 
+                 <para>Note that the daemon software configured for
+                 socket activation with socket units needs to be able
+@@ -221,12 +238,23 @@
+                                 of any of these options will have no
+                                 effect.</para>
+ 
++                                <para>It is also possible to have more
++                                than one socket unit for the same
++                                service when using
++                                <varname>Service=</varname>, and the
++                                service will receive all the sockets
++                                configured in all the socket units.
++                                Sockets configured in one unit are
++                                passed in the order of configuration,
++                                but no ordering between socket units
++                                is specified.</para>
++
+                                 <para>If an IP address is used here,
+                                 it is often desirable to listen on it
+                                 before the interface it is configured
+                                 on is up and running, and even
+                                 regardless of whether it will be up and
+-                                running ever at all. To deal with this
++                                running at any point. To deal with this
+                                 it is recommended to set the
+                                 <varname>FreeBind=</varname> option
+                                 described below.</para></listitem>
+@@ -687,11 +715,14 @@
+                                 <term><varname>Service=</varname></term>
+                                 <listitem><para>Specifies the service
+                                 unit name to activate on incoming
+-                                traffic. This defaults to the service
+-                                that bears the same name as the socket
+-                                (ignoring the different suffixes). In
+-                                most cases it should not be necessary
+-                                to use this option.</para></listitem>
++                                traffic. This setting is only allowed
++                                for sockets with
++                                <varname>Accept=no</varname>. It
++                                defaults to the service that bears the
++                                same name as the socket (with the
++                                suffix replaced). In most cases it
++                                should not be necessary to use this
++                                option.</para></listitem>
+                         </varlistentry>
+ 
+                 </variablelist>
diff --git a/0213-tmpfiles-rename-unsafe-to-boot.patch b/0213-tmpfiles-rename-unsafe-to-boot.patch
new file mode 100644
index 0000000..aec129c
--- /dev/null
+++ b/0213-tmpfiles-rename-unsafe-to-boot.patch
@@ -0,0 +1,119 @@
+From 3d2c847396cf348ef1ee55f5d4211045a6202efc Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Mon, 30 Dec 2013 13:00:38 -0500
+Subject: [PATCH] tmpfiles: rename --unsafe to --boot
+
+As suggested by Kay, it is better to describe what is done,
+not what might happen.
+---
+ man/systemd-tmpfiles.xml                |  2 +-
+ man/tmpfiles.d.xml                      |  4 ++--
+ src/tmpfiles/tmpfiles.c                 | 14 +++++++-------
+ units/systemd-tmpfiles-setup.service.in |  2 +-
+ 4 files changed, 11 insertions(+), 11 deletions(-)
+
+diff --git a/man/systemd-tmpfiles.xml b/man/systemd-tmpfiles.xml
+index c678031..64f9cf9 100644
+--- a/man/systemd-tmpfiles.xml
++++ b/man/systemd-tmpfiles.xml
+@@ -133,7 +133,7 @@
+                                 removed.</para></listitem>
+                         </varlistentry>
+                         <varlistentry>
+-                                <term><option>--unsafe</option></term>
++                                <term><option>--boot</option></term>
+                                 <listitem><para>Also execute lines
+                                 with an exclamation mark.
+                                 </para></listitem>
+diff --git a/man/tmpfiles.d.xml b/man/tmpfiles.d.xml
+index ed88751..8267ffc 100644
+--- a/man/tmpfiles.d.xml
++++ b/man/tmpfiles.d.xml
+@@ -273,7 +273,7 @@ L    /tmp/foobar -    -    -    -   /dev/null</programlisting>
+                         execute at any time, e.g. on package upgrades.
+                         <command>systemd-tmpfiles</command> will
+                         execute line with an exclamation mark only if
+-                        option <option>--unsafe</option> is given.
++                        option <option>--boot</option> is given.
+                         </para>
+ 
+                         <para>For example:
+@@ -286,7 +286,7 @@ r! /tmp/.X[0-9]*-lock
+                         </programlisting>
+                         The second line in contrast to the first one
+                         would break a running system, and will only be
+-                        executed with <option>--unsafe</option>.</para>
++                        executed with <option>--boot</option>.</para>
+                 </refsect2>
+ 
+                 <refsect2>
+diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c
+index 30a8a55..4dd1638 100644
+--- a/src/tmpfiles/tmpfiles.c
++++ b/src/tmpfiles/tmpfiles.c
+@@ -106,7 +106,7 @@ static Set *unix_sockets = NULL;
+ static bool arg_create = false;
+ static bool arg_clean = false;
+ static bool arg_remove = false;
+-static bool arg_unsafe = false;
++static bool arg_boot = false;
+ 
+ static char **include_prefixes = NULL;
+ static char **exclude_prefixes = NULL;
+@@ -1100,7 +1100,7 @@ static int parse_line(const char *fname, unsigned line, const char *buffer) {
+         if (strlen(action) > 2 || (strlen(action) > 1 && action[1] != '!')) {
+                 log_error("[%s:%u] Unknown modifier '%s'", fname, line, action);
+                 return -EINVAL;
+-        } else if (strlen(action) > 1 && !arg_unsafe)
++        } else if (strlen(action) > 1 && !arg_boot)
+                 return 0;
+ 
+         type = action[0];
+@@ -1275,7 +1275,7 @@ static int help(void) {
+                "     --create               Create marked files/directories\n"
+                "     --clean                Clean up marked directories\n"
+                "     --remove               Remove marked files/directories\n"
+-               "     --unsafe               Execute actions only safe at boot\n"
++               "     --boot                 Execute actions only safe at boot\n"
+                "     --prefix=PATH          Only apply rules that apply to paths with the specified prefix\n"
+                "     --exclude-prefix=PATH  Ignore rules that apply to paths with the specified prefix\n",
+                program_invocation_short_name);
+@@ -1289,7 +1289,7 @@ static int parse_argv(int argc, char *argv[]) {
+                 ARG_CREATE,
+                 ARG_CLEAN,
+                 ARG_REMOVE,
+-                ARG_UNSAFE,
++                ARG_BOOT,
+                 ARG_PREFIX,
+                 ARG_EXCLUDE_PREFIX,
+         };
+@@ -1299,7 +1299,7 @@ static int parse_argv(int argc, char *argv[]) {
+                 { "create",         no_argument,         NULL, ARG_CREATE         },
+                 { "clean",          no_argument,         NULL, ARG_CLEAN          },
+                 { "remove",         no_argument,         NULL, ARG_REMOVE         },
+-                { "unsafe",         no_argument,         NULL, ARG_UNSAFE         },
++                { "boot",           no_argument,         NULL, ARG_BOOT           },
+                 { "prefix",         required_argument,   NULL, ARG_PREFIX         },
+                 { "exclude-prefix", required_argument,   NULL, ARG_EXCLUDE_PREFIX },
+                 { NULL,             0,                   NULL, 0                  }
+@@ -1330,8 +1330,8 @@ static int parse_argv(int argc, char *argv[]) {
+                         arg_remove = true;
+                         break;
+ 
+-                case ARG_UNSAFE:
+-                        arg_unsafe = true;
++                case ARG_BOOT:
++                        arg_boot = true;
+                         break;
+ 
+                 case ARG_PREFIX:
+diff --git a/units/systemd-tmpfiles-setup.service.in b/units/systemd-tmpfiles-setup.service.in
+index c2dcae0..01043b7 100644
+--- a/units/systemd-tmpfiles-setup.service.in
++++ b/units/systemd-tmpfiles-setup.service.in
+@@ -24,4 +24,4 @@ RefuseManualStop=yes
+ [Service]
+ Type=oneshot
+ RemainAfterExit=yes
+-ExecStart=@rootbindir@/systemd-tmpfiles --create --remove --unsafe --exclude-prefix=/dev
++ExecStart=@rootbindir@/systemd-tmpfiles --create --remove --boot --exclude-prefix=/dev
diff --git a/0214-sleep-config-Dereference-pointer-before-check-for-NU.patch b/0214-sleep-config-Dereference-pointer-before-check-for-NU.patch
new file mode 100644
index 0000000..5bbb976
--- /dev/null
+++ b/0214-sleep-config-Dereference-pointer-before-check-for-NU.patch
@@ -0,0 +1,47 @@
+From ba087745bca7eea8f62cc529c3e6c5eaf6bf2904 Mon Sep 17 00:00:00 2001
+From: Stefan Beller <stefanbeller at googlemail.com>
+Date: Mon, 30 Dec 2013 17:43:52 +0100
+Subject: [PATCH] sleep-config: Dereference pointer before check for NULL
+
+This fixes a bug pointed out by http://css.csail.mit.edu/stack/
+(Optimization-unstable code)
+It is a similar fix as f146f5e159 (2013-12-30, core:
+Forgot to dereference pointer when checking for NULL)
+
+To explain this bug consider the following similar, but simpler code:
+	if (!p)
+		free(*p)
+
+Assume the if condition evaluates to true, then we will access *p,
+which means the compiler can assume p is a valid pointer, so it could
+dereference p and use the value *p.
+Assuming p as a valid pointer, !p will be false.
+But initally we assumed the condition evaluates to true.
+
+By this reasoning the optimizing compiler can deduce, we have dead code.
+("The if will never be taken, as *p must be valid, because otherwise
+accessing *p inside the if would segfault")
+
+This led to an error message of the static code checker, so I checked the
+code in question.
+
+As we access *modes and *states before the check in the changed line of
+this patch, I assume the line to be wrong and we actually wanted to check
+for *modes and *states being both non null.
+---
+ src/shared/sleep-config.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/shared/sleep-config.c b/src/shared/sleep-config.c
+index d76e3ad..b2a0787 100644
+--- a/src/shared/sleep-config.c
++++ b/src/shared/sleep-config.c
+@@ -94,7 +94,7 @@ int parse_sleep_config(const char *verb, char ***modes, char ***states) {
+         } else
+                 assert_not_reached("what verb");
+ 
+-        if (!modes || !states) {
++        if (!*modes || !*states) {
+                 strv_free(*modes);
+                 strv_free(*states);
+                 return log_oom();
diff --git a/0215-sleep-config-fix-double-free.patch b/0215-sleep-config-fix-double-free.patch
new file mode 100644
index 0000000..be26e91
--- /dev/null
+++ b/0215-sleep-config-fix-double-free.patch
@@ -0,0 +1,99 @@
+From e8d2aa2c8d3533a2dc6f0db5ed22453a16bcf1ee Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Tue, 31 Dec 2013 11:23:58 -0500
+Subject: [PATCH] sleep-config: fix double free
+
+Before 34a3baa4d 'sleep-config: Dereference pointer before check for NULL'
+oom conditions would not be detected properly. After that commit, a double
+free was performed.
+
+Rework the whole function to be easier to understand, and also replace
+strv_split_nulstr with strv_new, since we know the strings anyway.
+---
+ src/shared/sleep-config.c | 38 ++++++++++++++++++++------------------
+ 1 file changed, 20 insertions(+), 18 deletions(-)
+
+diff --git a/src/shared/sleep-config.c b/src/shared/sleep-config.c
+index b2a0787..70a0896 100644
+--- a/src/shared/sleep-config.c
++++ b/src/shared/sleep-config.c
+@@ -28,11 +28,14 @@
+ #include "strv.h"
+ #include "util.h"
+ 
+-int parse_sleep_config(const char *verb, char ***modes, char ***states) {
++#define USE(x, y) do{ (x) = (y); (y) = NULL; } while(0)
++
++int parse_sleep_config(const char *verb, char ***_modes, char ***_states) {
+         _cleanup_strv_free_ char
+                 **suspend_mode = NULL, **suspend_state = NULL,
+                 **hibernate_mode = NULL, **hibernate_state = NULL,
+                 **hybrid_mode = NULL, **hybrid_state = NULL;
++        char **modes, **states;
+ 
+         const ConfigTableItem items[] = {
+                 { "Sleep",   "SuspendMode",      config_parse_strv,  0, &suspend_mode  },
+@@ -59,47 +62,46 @@ int parse_sleep_config(const char *verb, char ***modes, char ***states) {
+ 
+         if (streq(verb, "suspend")) {
+                 /* empty by default */
+-                *modes = suspend_mode;
++                USE(modes, suspend_mode);
+ 
+                 if (suspend_state)
+-                        *states = suspend_state;
++                        USE(states, suspend_state);
+                 else
+-                        *states = strv_split_nulstr("mem\0standby\0freeze\0");
++                        states = strv_new("mem", "standby", "freeze", NULL);
+ 
+-                suspend_mode = suspend_state = NULL;
+         } else if (streq(verb, "hibernate")) {
+                 if (hibernate_mode)
+-                        *modes = hibernate_mode;
++                        USE(modes, hibernate_mode);
+                 else
+-                        *modes = strv_split_nulstr("platform\0shutdown\0");
++                        modes = strv_new("platform", "shutdown", NULL);
+ 
+                 if (hibernate_state)
+-                        *states = hibernate_state;
++                        USE(states, hibernate_state);
+                 else
+-                        *states = strv_split_nulstr("disk\0");
++                        states = strv_new("disk", NULL);
+ 
+-                hibernate_mode = hibernate_state = NULL;
+         } else if (streq(verb, "hybrid-sleep")) {
+                 if (hybrid_mode)
+-                        *modes = hybrid_mode;
++                        USE(modes, hybrid_mode);
+                 else
+-                        *modes = strv_split_nulstr("suspend\0platform\0shutdown\0");
++                        modes = strv_new("suspend", "platform", "shutdown", NULL);
+ 
+                 if (hybrid_state)
+-                        *states = hybrid_state;
++                        USE(states, hybrid_state);
+                 else
+-                        *states = strv_split_nulstr("disk\0");
++                        states = strv_new("disk", NULL);
+ 
+-                hybrid_mode = hybrid_state = NULL;
+         } else
+                 assert_not_reached("what verb");
+ 
+-        if (!*modes || !*states) {
+-                strv_free(*modes);
+-                strv_free(*states);
++        if ((!modes && !streq(verb, "suspend")) || !states) {
++                strv_free(modes);
++                strv_free(states);
+                 return log_oom();
+         }
+ 
++        *_modes = modes;
++        *_states = states;
+         return 0;
+ }
+ 
diff --git a/0216-rules-drivers-do-not-reset-RUN-list.patch b/0216-rules-drivers-do-not-reset-RUN-list.patch
new file mode 100644
index 0000000..1c9eb58
--- /dev/null
+++ b/0216-rules-drivers-do-not-reset-RUN-list.patch
@@ -0,0 +1,33 @@
+From eb882aa36d9c700b7b5469df3f2bf43092d5c68b Mon Sep 17 00:00:00 2001
+From: Kay Sievers <kay at vrfy.org>
+Date: Fri, 3 Jan 2014 01:32:03 +0100
+Subject: [PATCH] rules: drivers - do not reset RUN list
+
+---
+ rules/80-drivers.rules | 14 +++++++-------
+ 1 file changed, 7 insertions(+), 7 deletions(-)
+
+diff --git a/rules/80-drivers.rules b/rules/80-drivers.rules
+index 0b22d73..8551f47 100644
+--- a/rules/80-drivers.rules
++++ b/rules/80-drivers.rules
+@@ -2,12 +2,12 @@
+ 
+ ACTION=="remove", GOTO="drivers_end"
+ 
+-ENV{MODALIAS}=="?*", RUN{builtin}="kmod load $env{MODALIAS}"
+-SUBSYSTEM=="tifm", ENV{TIFM_CARD_TYPE}=="SD", RUN{builtin}="kmod load tifm_sd"
+-SUBSYSTEM=="tifm", ENV{TIFM_CARD_TYPE}=="MS", RUN{builtin}="kmod load tifm_ms"
+-SUBSYSTEM=="memstick", RUN{builtin}="kmod load ms_block mspro_block"
+-SUBSYSTEM=="i2o", RUN{builtin}="kmod load i2o_block"
+-SUBSYSTEM=="module", KERNEL=="parport_pc", RUN{builtin}="kmod load ppdev"
+-KERNEL=="mtd*ro", ENV{MTD_FTL}=="smartmedia", RUN{builtin}="kmod load sm_ftl"
++ENV{MODALIAS}=="?*", RUN{builtin}+="kmod load $env{MODALIAS}"
++SUBSYSTEM=="tifm", ENV{TIFM_CARD_TYPE}=="SD", RUN{builtin}+="kmod load tifm_sd"
++SUBSYSTEM=="tifm", ENV{TIFM_CARD_TYPE}=="MS", RUN{builtin}+="kmod load tifm_ms"
++SUBSYSTEM=="memstick", RUN{builtin}+="kmod load ms_block mspro_block"
++SUBSYSTEM=="i2o", RUN{builtin}+="kmod load i2o_block"
++SUBSYSTEM=="module", KERNEL=="parport_pc", RUN{builtin}+="kmod load ppdev"
++KERNEL=="mtd*ro", ENV{MTD_FTL}=="smartmedia", RUN{builtin}+="kmod load sm_ftl"
+ 
+ LABEL="drivers_end"
diff --git a/0217-core-manager-print-info-about-interesting-signals.patch b/0217-core-manager-print-info-about-interesting-signals.patch
new file mode 100644
index 0000000..3cad48c
--- /dev/null
+++ b/0217-core-manager-print-info-about-interesting-signals.patch
@@ -0,0 +1,45 @@
+From 0e09a7e4c14e6b1d31a9a56b80d02b52c9583ab1 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Fri, 27 Dec 2013 22:12:38 -0500
+Subject: [PATCH] core/manager: print info about interesting signals
+
+Information about signals which are not routinely received by systemd
+are printed at info level. This should make it easier to see what is
+happening in the system.
+---
+ src/core/manager.c | 18 ++++++++++++------
+ 1 file changed, 12 insertions(+), 6 deletions(-)
+
+diff --git a/src/core/manager.c b/src/core/manager.c
+index a34a3c6..69ad4b5 100644
+--- a/src/core/manager.c
++++ b/src/core/manager.c
+@@ -1435,16 +1435,22 @@ static int manager_process_signal_fd(Manager *m) {
+                 }
+ 
+                 if (sfsi.ssi_pid > 0) {
+-                        char *p = NULL;
++                        _cleanup_free_ char *p = NULL;
+ 
+                         get_process_comm(sfsi.ssi_pid, &p);
+ 
+-                        log_debug("Received SIG%s from PID %lu (%s).",
+-                                  signal_to_string(sfsi.ssi_signo),
+-                                  (unsigned long) sfsi.ssi_pid, strna(p));
+-                        free(p);
++                        log_full(sfsi.ssi_signo == SIGCHLD ||
++                                 (sfsi.ssi_signo == SIGTERM && m->running_as == SYSTEMD_USER)
++                                 ? LOG_DEBUG : LOG_INFO,
++                                 "Received SIG%s from PID %lu (%s).",
++                                 signal_to_string(sfsi.ssi_signo),
++                                 (unsigned long) sfsi.ssi_pid, strna(p));
+                 } else
+-                        log_debug("Received SIG%s.", signal_to_string(sfsi.ssi_signo));
++                        log_full(sfsi.ssi_signo == SIGCHLD ||
++                                 (sfsi.ssi_signo == SIGTERM && m->running_as == SYSTEMD_USER)
++                                 ? LOG_DEBUG : LOG_INFO,
++                                 "Received SIG%s.",
++                                 signal_to_string(sfsi.ssi_signo));
+ 
+                 switch (sfsi.ssi_signo) {
+ 
diff --git a/0218-core-service-check-if-mainpid-matches-only-if-it-is-.patch b/0218-core-service-check-if-mainpid-matches-only-if-it-is-.patch
new file mode 100644
index 0000000..707ce3e
--- /dev/null
+++ b/0218-core-service-check-if-mainpid-matches-only-if-it-is-.patch
@@ -0,0 +1,26 @@
+From d4466e04783415eee7eec269104e60ab1f6b4b50 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Mon, 30 Dec 2013 11:21:56 -0500
+Subject: [PATCH] core/service: check if mainpid matches only if it is set
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1047304
+
+Conflicts:
+	src/core/service.c
+---
+ src/core/service.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/core/service.c b/src/core/service.c
+index 62ae8f0..f0acda1 100644
+--- a/src/core/service.c
++++ b/src/core/service.c
+@@ -3400,7 +3400,7 @@ static void service_notify_message(Unit *u, pid_t pid, char **tags) {
+                 return;
+         }
+ 
+-        if (s->notify_access == NOTIFY_MAIN && pid != s->main_pid) {
++        if (s->notify_access == NOTIFY_MAIN && s->main_pid != 0 && pid != s->main_pid) {
+                 log_warning_unit(u->id,
+                                  "%s: Got notification message from PID %lu, but reception only permitted for PID %lu",
+                                  u->id, (unsigned long) pid, (unsigned long) s->main_pid);
diff --git a/0219-man-typo-fix.patch b/0219-man-typo-fix.patch
new file mode 100644
index 0000000..6a1759b
--- /dev/null
+++ b/0219-man-typo-fix.patch
@@ -0,0 +1,22 @@
+From dfb3a987b160406fb4cf6cc3935cf54571d7c373 Mon Sep 17 00:00:00 2001
+From: Thomas Hindoe Paaboel Andersen <phomes at gmail.com>
+Date: Sat, 4 Jan 2014 23:21:13 +0100
+Subject: [PATCH] man: typo fix
+
+---
+ man/systemd.time.xml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/man/systemd.time.xml b/man/systemd.time.xml
+index f438fa5..a837f23 100644
+--- a/man/systemd.time.xml
++++ b/man/systemd.time.xml
+@@ -222,7 +222,7 @@
+                 <para>In the date and time specifications, any
+                 component may be specified as <literal>*</literal> in
+                 which case any value will match. Alternatively, each
+-                component can be specified as list of values separated
++                component can be specified as a list of values separated
+                 by commas. Values may also be suffixed with
+                 <literal>/</literal> and a repetition value, which
+                 indicates that the value and all values plus multiples
diff --git a/0220-swap-remove-if-else-with-the-same-data-path.patch b/0220-swap-remove-if-else-with-the-same-data-path.patch
new file mode 100644
index 0000000..fc12f02
--- /dev/null
+++ b/0220-swap-remove-if-else-with-the-same-data-path.patch
@@ -0,0 +1,29 @@
+From d61f36a7ef07c252b49cc8015fe37b69bffb1a35 Mon Sep 17 00:00:00 2001
+From: Stefan Beller <stefanbeller at googlemail.com>
+Date: Fri, 3 Jan 2014 20:33:20 +0100
+Subject: [PATCH] swap: remove if/else with the same data path
+
+This was introduced in e1770af812 (2012-02-03, swap: replace failure
+boolean by result enum).
+
+This just removes unneeded lines of code, no functional change.
+---
+ src/core/swap.c | 5 +----
+ 1 file changed, 1 insertion(+), 4 deletions(-)
+
+diff --git a/src/core/swap.c b/src/core/swap.c
+index f295b65..727bb95 100644
+--- a/src/core/swap.c
++++ b/src/core/swap.c
+@@ -959,10 +959,7 @@ static void swap_sigchld_event(Unit *u, pid_t pid, int code, int status) {
+         case SWAP_DEACTIVATING_SIGKILL:
+         case SWAP_DEACTIVATING_SIGTERM:
+ 
+-                if (f == SWAP_SUCCESS)
+-                        swap_enter_dead(s, f);
+-                else
+-                        swap_enter_dead(s, f);
++                swap_enter_dead(s, f);
+                 break;
+ 
+         default:
diff --git a/0221-hwdb-update.patch b/0221-hwdb-update.patch
new file mode 100644
index 0000000..2c7a3c1
--- /dev/null
+++ b/0221-hwdb-update.patch
@@ -0,0 +1,769 @@
+From 3c8008b94726f3812ac28f4a33db61635323ee6a Mon Sep 17 00:00:00 2001
+From: Marcel Holtmann <marcel at holtmann.org>
+Date: Sun, 5 Jan 2014 00:44:34 -0800
+Subject: [PATCH] hwdb: update
+
+Conflicts:
+	hwdb/20-sdio-vendor-model.hwdb
+---
+ hwdb/20-OUI.hwdb              |  97 +++++++++++++++++++++++++-
+ hwdb/20-pci-vendor-model.hwdb | 154 ++++++++++++++++++++++++++++++++++++++----
+ hwdb/20-usb-vendor-model.hwdb |   6 ++
+ 3 files changed, 241 insertions(+), 16 deletions(-)
+
+diff --git a/hwdb/20-OUI.hwdb b/hwdb/20-OUI.hwdb
+index 92b96ae..a51a00a 100644
+--- a/hwdb/20-OUI.hwdb
++++ b/hwdb/20-OUI.hwdb
+@@ -13627,6 +13627,12 @@ OUI:40D8551E2*
+ OUI:40D8551E3*
+  ID_OUI_FROM_DATABASE=Mega Electronics Ltd
+ 
++OUI:40D8551E4*
++ ID_OUI_FROM_DATABASE=STEK Ltd
++
++OUI:40D855EE6*
++ ID_OUI_FROM_DATABASE=Narinet, Inc.
++
+ OUI:000000*
+  ID_OUI_FROM_DATABASE=XEROX CORPORATION
+ 
+@@ -35222,7 +35228,7 @@ OUI:001C4C*
+  ID_OUI_FROM_DATABASE=Petrotest Instruments
+ 
+ OUI:001C4D*
+- ID_OUI_FROM_DATABASE=Zeemote Technology Inc. (part of Aplix).
++ ID_OUI_FROM_DATABASE=Aplix IP Holdings Corporation
+ 
+ OUI:001C4E*
+  ID_OUI_FROM_DATABASE=TASA International Limited
+@@ -52606,6 +52612,9 @@ OUI:08D42B*
+ OUI:08D5C0*
+  ID_OUI_FROM_DATABASE=Seers Technology Co., Ltd
+ 
++OUI:08D833*
++ ID_OUI_FROM_DATABASE=Shenzhen RF Technology Co,.Ltd
++
+ OUI:08E5DA*
+  ID_OUI_FROM_DATABASE=NANJING FUJITSU COMPUTER PRODUCTS CO.,LTD.
+ 
+@@ -53308,6 +53317,9 @@ OUI:1423D7*
+ OUI:142BD2*
+  ID_OUI_FROM_DATABASE=Armtel Ltd.
+ 
++OUI:142D27*
++ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
++
+ OUI:142D8B*
+  ID_OUI_FROM_DATABASE=Incipio Technologies, Inc
+ 
+@@ -53761,6 +53773,9 @@ OUI:18C451*
+ OUI:18C8E7*
+  ID_OUI_FROM_DATABASE=Shenzhen Hualistone Technology Co.,Ltd
+ 
++OUI:18CC23*
++ ID_OUI_FROM_DATABASE=Philio Technology Corporation
++
+ OUI:18D071*
+  ID_OUI_FROM_DATABASE=DASAN SMC, Inc.
+ 
+@@ -54688,6 +54703,9 @@ OUI:2838CF*
+ OUI:2839E7*
+  ID_OUI_FROM_DATABASE=Preceno Technology Pte.Ltd.
+ 
++OUI:283B96*
++ ID_OUI_FROM_DATABASE=Cool Control LTD
++
+ OUI:283CE4*
+  ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
+ 
+@@ -54907,6 +54925,9 @@ OUI:28E14C*
+ OUI:28E297*
+  ID_OUI_FROM_DATABASE=Shanghai InfoTM Microelectronics Co.,Ltd.
+ 
++OUI:28E347*
++ ID_OUI_FROM_DATABASE=Liteon Technology Corporation
++
+ OUI:28E608*
+  ID_OUI_FROM_DATABASE=Tokheim
+ 
+@@ -55717,6 +55738,9 @@ OUI:34E0CF*
+ OUI:34E0D7*
+  ID_OUI_FROM_DATABASE=DONGGUAN QISHENG ELECTRONICS INDUSTRIAL CO., LTD
+ 
++OUI:34E2FD*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:34EF44*
+  ID_OUI_FROM_DATABASE=2Wire
+ 
+@@ -56023,6 +56047,9 @@ OUI:3C1040*
+ OUI:3C106F*
+  ID_OUI_FROM_DATABASE=ALBAHITH TECHNOLOGIES
+ 
++OUI:3C15C2*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:3C15EA*
+  ID_OUI_FROM_DATABASE=TESCOM CO., LTD.
+ 
+@@ -56227,6 +56254,9 @@ OUI:3CC99E*
+ OUI:3CCA87*
+  ID_OUI_FROM_DATABASE=Iders Incorporated
+ 
++OUI:3CCD93*
++ ID_OUI_FROM_DATABASE=LG ELECTRONICS INC
++
+ OUI:3CCE73*
+  ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
+ 
+@@ -56408,7 +56438,7 @@ OUI:40667A*
+  ID_OUI_FROM_DATABASE=mediola - connected living AG
+ 
+ OUI:406826*
+- ID_OUI_FROM_DATABASE=Thales Optronics Limited
++ ID_OUI_FROM_DATABASE=Thales UK Limited
+ 
+ OUI:406AAB*
+  ID_OUI_FROM_DATABASE=RIM
+@@ -57436,6 +57466,9 @@ OUI:5048EB*
+ OUI:504A5E*
+  ID_OUI_FROM_DATABASE=Masimo Corporation
+ 
++OUI:504A6E*
++ ID_OUI_FROM_DATABASE=NETGEAR INC.,
++
+ OUI:504F94*
+  ID_OUI_FROM_DATABASE=Loxone Electronics GmbH
+ 
+@@ -58480,6 +58513,9 @@ OUI:6045BD*
+ OUI:604616*
+  ID_OUI_FROM_DATABASE=XIAMEN VANN INTELLIGENT CO., LTD
+ 
++OUI:6047D4*
++ ID_OUI_FROM_DATABASE=FORICS Electronic Technology Co., Ltd.
++
+ OUI:604A1C*
+  ID_OUI_FROM_DATABASE=SUYIN Corporation
+ 
+@@ -58630,6 +58666,9 @@ OUI:60D30A*
+ OUI:60D819*
+  ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+ 
++OUI:60D9C7*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:60DA23*
+  ID_OUI_FROM_DATABASE=Estech Co.,Ltd
+ 
+@@ -58849,6 +58888,9 @@ OUI:6473E2*
+ OUI:647657*
+  ID_OUI_FROM_DATABASE=Innovative Security Designs
+ 
++OUI:6476BA*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:647791*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
+@@ -58882,6 +58924,9 @@ OUI:6487D7*
+ OUI:6488FF*
+  ID_OUI_FROM_DATABASE=Sichuan Changhong Electric Ltd.
+ 
++OUI:648D9E*
++ ID_OUI_FROM_DATABASE=IVT Electronic Co.,Ltd
++
+ OUI:64995D*
+  ID_OUI_FROM_DATABASE=LGE
+ 
+@@ -59161,6 +59206,9 @@ OUI:687924*
+ OUI:6879ED*
+  ID_OUI_FROM_DATABASE=SHARP Corporation
+ 
++OUI:687CC8*
++ ID_OUI_FROM_DATABASE=Measurement Systems S. de R.L.
++
+ OUI:687CD5*
+  ID_OUI_FROM_DATABASE=Y Soft Corporation, a.s.
+ 
+@@ -59425,6 +59473,9 @@ OUI:6C6F18*
+ OUI:6C7039*
+  ID_OUI_FROM_DATABASE=Novar GmbH
+ 
++OUI:6C709F*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:6C71D9*
+  ID_OUI_FROM_DATABASE=AzureWave Technologies, Inc
+ 
+@@ -59779,6 +59830,9 @@ OUI:708B78*
+ OUI:708D09*
+  ID_OUI_FROM_DATABASE=Nokia Corporation
+ 
++OUI:709383*
++ ID_OUI_FROM_DATABASE=Intelligent Optical Network High Tech CO.,LTD.
++
+ OUI:7093F8*
+  ID_OUI_FROM_DATABASE=Space Monkey, Inc.
+ 
+@@ -60166,6 +60220,9 @@ OUI:74F612*
+ OUI:74F726*
+  ID_OUI_FROM_DATABASE=Neuron Robotics
+ 
++OUI:74F85D*
++ ID_OUI_FROM_DATABASE=Berkeley Nucleonics Corp
++
+ OUI:74FDA0*
+  ID_OUI_FROM_DATABASE=Compupal (Group) Corporation
+ 
+@@ -60862,6 +60919,9 @@ OUI:7CFADF*
+ OUI:7CFE28*
+  ID_OUI_FROM_DATABASE=Salutron Inc.
+ 
++OUI:7CFF62*
++ ID_OUI_FROM_DATABASE=Huizhou Super Electron Technology Co.,Ltd.
++
+ OUI:80000B*
+  ID_OUI_FROM_DATABASE=Intel Corporate
+ 
+@@ -61105,6 +61165,9 @@ OUI:80D019*
+ OUI:80D18B*
+  ID_OUI_FROM_DATABASE=Hangzhou I'converge Technology Co.,Ltd
+ 
++OUI:80D433*
++ ID_OUI_FROM_DATABASE=LzLabs GmbH
++
+ OUI:80D733*
+  ID_OUI_FROM_DATABASE=QSR Automations, Inc.
+ 
+@@ -61336,6 +61399,9 @@ OUI:84ACA4*
+ OUI:84AF1F*
+  ID_OUI_FROM_DATABASE=Beat System Service Co,. Ltd.
+ 
++OUI:84B59C*
++ ID_OUI_FROM_DATABASE=Juniper networks
++
+ OUI:84C2E4*
+  ID_OUI_FROM_DATABASE=Jiangsu Qinheng Co., Ltd.
+ 
+@@ -61402,6 +61468,9 @@ OUI:880355*
+ OUI:880905*
+  ID_OUI_FROM_DATABASE=MTMCommunications
+ 
++OUI:880FB6*
++ ID_OUI_FROM_DATABASE=Jabil Circuits India Pvt Ltd,-EHTP unit
++
+ OUI:881036*
+  ID_OUI_FROM_DATABASE=Panodic(ShenZhen) Electronics Limted
+ 
+@@ -62605,6 +62674,9 @@ OUI:983000*
+ OUI:983071*
+  ID_OUI_FROM_DATABASE=DAIKYUNG VASCOM
+ 
++OUI:98349D*
++ ID_OUI_FROM_DATABASE=Krauss Maffei Technologies GmbH
++
+ OUI:983571*
+  ID_OUI_FROM_DATABASE=Sub10 Systems Ltd
+ 
+@@ -63061,6 +63133,9 @@ OUI:9CCAD9*
+ OUI:9CCD82*
+  ID_OUI_FROM_DATABASE=CHENG UEI PRECISION INDUSTRY CO.,LTD
+ 
++OUI:9CD21E*
++ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
++
+ OUI:9CD24B*
+  ID_OUI_FROM_DATABASE=zte corporation
+ 
+@@ -63358,6 +63433,9 @@ OUI:A0CEC8*
+ OUI:A0CF5B*
+  ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
+ 
++OUI:A0D12A*
++ ID_OUI_FROM_DATABASE=AXPRO Technology Inc.
++
+ OUI:A0D3C1*
+  ID_OUI_FROM_DATABASE=Hewlett Packard
+ 
+@@ -64366,6 +64444,9 @@ OUI:B05B1F*
+ OUI:B05CE5*
+  ID_OUI_FROM_DATABASE=Nokia Corporation
+ 
++OUI:B061C7*
++ ID_OUI_FROM_DATABASE=Ericsson-LG Enterprise
++
+ OUI:B06563*
+  ID_OUI_FROM_DATABASE=Shanghai Railway Communication Factory
+ 
+@@ -64684,6 +64765,9 @@ OUI:B46293*
+ OUI:B462AD*
+  ID_OUI_FROM_DATABASE=raytest GmbH
+ 
++OUI:B46698*
++ ID_OUI_FROM_DATABASE=Zealabs srl
++
+ OUI:B467E9*
+  ID_OUI_FROM_DATABASE=Qingdao GoerTek Technology Co., Ltd.
+ 
+@@ -65590,6 +65674,9 @@ OUI:C098E5*
+ OUI:C09C92*
+  ID_OUI_FROM_DATABASE=COBY
+ 
++OUI:C09D26*
++ ID_OUI_FROM_DATABASE=Topicon HK Lmd.
++
+ OUI:C09F42*
+  ID_OUI_FROM_DATABASE=Apple
+ 
+@@ -65833,6 +65920,9 @@ OUI:C45DD8*
+ OUI:C46044*
+  ID_OUI_FROM_DATABASE=Everex Electronics Limited
+ 
++OUI:C4626B*
++ ID_OUI_FROM_DATABASE=ZPT Vigantice
++
+ OUI:C462EA*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
+@@ -68605,6 +68695,9 @@ OUI:EC14F6*
+ OUI:EC172F*
+  ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO., LTD.
+ 
++OUI:EC1766*
++ ID_OUI_FROM_DATABASE=Research Centre Module
++
+ OUI:EC1A59*
+  ID_OUI_FROM_DATABASE=Belkin International Inc.
+ 
+diff --git a/hwdb/20-pci-vendor-model.hwdb b/hwdb/20-pci-vendor-model.hwdb
+index 6142dc8..7f833e3 100644
+--- a/hwdb/20-pci-vendor-model.hwdb
++++ b/hwdb/20-pci-vendor-model.hwdb
+@@ -4166,6 +4166,9 @@ pci:v00001002d00006600*
+ pci:v00001002d00006601*
+  ID_MODEL_FROM_DATABASE=Mars [Radeon HD 8730M]
+ 
++pci:v00001002d00006601sv0000103Csd00002100*
++ ID_MODEL_FROM_DATABASE=FirePro M4100
++
+ pci:v00001002d00006602*
+  ID_MODEL_FROM_DATABASE=Mars
+ 
+@@ -4185,10 +4188,22 @@ pci:v00001002d00006607*
+  ID_MODEL_FROM_DATABASE=Mars LE [Radeon HD 8530M]
+ 
+ pci:v00001002d00006610*
+- ID_MODEL_FROM_DATABASE=Oland XT [Radeon HD 8670/R7 250]
++ ID_MODEL_FROM_DATABASE=Oland XT [Radeon HD 8670 / R7 250]
+ 
+ pci:v00001002d00006611*
+- ID_MODEL_FROM_DATABASE=Oland [Radeon HD 8570]
++ ID_MODEL_FROM_DATABASE=Oland [Radeon HD 8570 / R7 240 OEM]
++
++pci:v00001002d00006611sv00001028sd0000210B*
++ ID_MODEL_FROM_DATABASE=Radeon R5 240 OEM
++
++pci:v00001002d00006611sv0000174Bsd00004248*
++ ID_MODEL_FROM_DATABASE=Radeon R7 240 OEM
++
++pci:v00001002d00006611sv0000174Bsd0000A240*
++ ID_MODEL_FROM_DATABASE=Radeon R7 240 OEM
++
++pci:v00001002d00006611sv00001B0Asd000090D3*
++ ID_MODEL_FROM_DATABASE=Radeon R7 240 OEM
+ 
+ pci:v00001002d00006613*
+  ID_MODEL_FROM_DATABASE=Oland PRO [Radeon R7 240]
+@@ -4224,7 +4239,7 @@ pci:v00001002d00006658*
+  ID_MODEL_FROM_DATABASE=Bonaire XTX [Radeon R7 260X]
+ 
+ pci:v00001002d0000665C*
+- ID_MODEL_FROM_DATABASE=Bonaire XT [Radeon HD 7790/8770]
++ ID_MODEL_FROM_DATABASE=Bonaire XT [Radeon HD 7790/8770 / R9 260 OEM]
+ 
+ pci:v00001002d0000665Csv00001043sd00000452*
+  ID_MODEL_FROM_DATABASE=Radeon HD 7790 DirectCU II OC
+@@ -4235,6 +4250,12 @@ pci:v00001002d0000665Csv00001462sd00002930*
+ pci:v00001002d0000665Csv00001462sd00002932*
+  ID_MODEL_FROM_DATABASE=Radeon HD 8770
+ 
++pci:v00001002d0000665Csv00001462sd00002934*
++ ID_MODEL_FROM_DATABASE=Radeon R9 260 OEM
++
++pci:v00001002d0000665Csv0000148Csd00009260*
++ ID_MODEL_FROM_DATABASE=Radeon R9 260 OEM
++
+ pci:v00001002d0000665Csv00001682sd00003310*
+  ID_MODEL_FROM_DATABASE=Radeon HD 7790 Black Edition 2 GB
+ 
+@@ -4817,9 +4838,21 @@ pci:v00001002d00006742sv0000148Csd00006570*
+ pci:v00001002d00006742sv00001682sd00006570*
+  ID_MODEL_FROM_DATABASE=Turks [Radeon HD 6570]
+ 
++pci:v00001002d00006742sv0000174Bsd00005570*
++ ID_MODEL_FROM_DATABASE=Turks [Radeon HD 5570]
++
+ pci:v00001002d00006742sv0000174Bsd00006570*
+  ID_MODEL_FROM_DATABASE=Turks [Radeon HD 6570]
+ 
++pci:v00001002d00006742sv0000174Bsd00007570*
++ ID_MODEL_FROM_DATABASE=Turks [Radeon HD 7570]
++
++pci:v00001002d00006742sv0000174Bsd00008510*
++ ID_MODEL_FROM_DATABASE=Turks [Radeon HD 8510]
++
++pci:v00001002d00006742sv0000174Bsd00008570*
++ ID_MODEL_FROM_DATABASE=Turks [Radeon HD 8570]
++
+ pci:v00001002d00006742sv00001787sd00006570*
+  ID_MODEL_FROM_DATABASE=Turks [Radeon HD 6570]
+ 
+@@ -5541,13 +5574,13 @@ pci:v00001002d00006770sv000017AAsd00003658*
+  ID_MODEL_FROM_DATABASE=Radeon HD 7470A
+ 
+ pci:v00001002d00006771*
+- ID_MODEL_FROM_DATABASE=Caicos XTX [Radeon HD 8490]
++ ID_MODEL_FROM_DATABASE=Caicos XTX [Radeon HD 8490 / R5 235X OEM]
+ 
+ pci:v00001002d00006772*
+  ID_MODEL_FROM_DATABASE=Caicos [Radeon HD 7450A]
+ 
+ pci:v00001002d00006778*
+- ID_MODEL_FROM_DATABASE=Caicos XT [Radeon HD 7470/8470]
++ ID_MODEL_FROM_DATABASE=Caicos XT [Radeon HD 7470/8470 / R5 235 OEM]
+ 
+ pci:v00001002d00006778sv00001019sd00000024*
+  ID_MODEL_FROM_DATABASE=Radeon HD 7470
+@@ -5580,7 +5613,7 @@ pci:v00001002d00006778sv0000174Bsd0000E145*
+  ID_MODEL_FROM_DATABASE=Radeon HD 7470
+ 
+ pci:v00001002d00006779*
+- ID_MODEL_FROM_DATABASE=Caicos [Radeon HD 6450/7450/8450]
++ ID_MODEL_FROM_DATABASE=Caicos [Radeon HD 6450/7450/8450 / R5 230 OEM]
+ 
+ pci:v00001002d00006779sv00001019sd00000016*
+  ID_MODEL_FROM_DATABASE=Radeon HD 6450
+@@ -5979,7 +6012,7 @@ pci:v00001002d00006831*
+  ID_MODEL_FROM_DATABASE=Cape Verde [AMD Radeon HD 7700M Series]
+ 
+ pci:v00001002d00006835*
+- ID_MODEL_FROM_DATABASE=Cape Verde PRX [Radeon R7 260]
++ ID_MODEL_FROM_DATABASE=Cape Verde PRX [Radeon R9 255 OEM]
+ 
+ pci:v00001002d00006837*
+  ID_MODEL_FROM_DATABASE=Cape Verde LE [Radeon HD 7730/8730]
+@@ -8967,7 +9000,7 @@ pci:v00001002d0000999C*
+  ID_MODEL_FROM_DATABASE=Richland
+ 
+ pci:v00001002d0000999D*
+- ID_MODEL_FROM_DATABASE=Richland
++ ID_MODEL_FROM_DATABASE=Richland [Radeon HD 8550D]
+ 
+ pci:v00001002d000099A0*
+  ID_MODEL_FROM_DATABASE=Trinity [Radeon HD 7520G]
+@@ -17663,6 +17696,9 @@ pci:v0000109Ed0000036Esv00001461sd00000761*
+ pci:v0000109Ed0000036Esv00001461sd00000771*
+  ID_MODEL_FROM_DATABASE=AverMedia AVerTV DVB-T 771
+ 
++pci:v0000109Ed0000036Esv00001464sd0000AA00*
++ ID_MODEL_FROM_DATABASE=iTuner Spectra8
++
+ pci:v0000109Ed0000036Esv000014F1sd00000001*
+  ID_MODEL_FROM_DATABASE=Bt878 Mediastream Controller NTSC
+ 
+@@ -27503,6 +27539,9 @@ pci:v000010ECd00005209*
+ pci:v000010ECd00005227*
+  ID_MODEL_FROM_DATABASE=RTS5227 PCI Express Card Reader
+ 
++pci:v000010ECd00005227sv000017AAsd0000220E*
++ ID_MODEL_FROM_DATABASE=ThinkPad T440p
++
+ pci:v000010ECd00005229*
+  ID_MODEL_FROM_DATABASE=RTS5229 PCI Express Card Reader
+ 
+@@ -48170,9 +48209,18 @@ pci:v0000168Cd00000033*
+ pci:v0000168Cd00000034*
+  ID_MODEL_FROM_DATABASE=AR9462 Wireless Network Adapter
+ 
++pci:v0000168Cd00000034sv00001A56sd00002003*
++ ID_MODEL_FROM_DATABASE=Killer Wireless-N 1202 Half-size Mini PCIe Card
++
+ pci:v0000168Cd00000036*
+  ID_MODEL_FROM_DATABASE=QCA9565 / AR9565 Wireless Network Adapter
+ 
++pci:v0000168Cd00000037*
++ ID_MODEL_FROM_DATABASE=AR9485 Wireless Network Adapter
++
++pci:v0000168Cd00000037sv00001A3Bsd00002100*
++ ID_MODEL_FROM_DATABASE=AW-NB100H 802.11n Wireless Mini PCIe Card
++
+ pci:v0000168Cd0000003C*
+  ID_MODEL_FROM_DATABASE=QCA988x 802.11ac Wireless Network Adapter
+ 
+@@ -48191,6 +48239,9 @@ pci:v0000168Cd00009013*
+ pci:v0000168Cd0000FF19*
+  ID_MODEL_FROM_DATABASE=AR5006X Wireless Network Adapter
+ 
++pci:v0000168Cd0000FF1B*
++ ID_MODEL_FROM_DATABASE=AR2425 Wireless Network Adapter [AR5007EG 802.11bg]
++
+ pci:v0000168Cd0000FF1C*
+  ID_MODEL_FROM_DATABASE=AR5008 Wireless Network Adapter
+ 
+@@ -49406,6 +49457,9 @@ pci:v00001814d00003298sv0000103Csd000018EC*
+ pci:v00001814d00003592*
+  ID_MODEL_FROM_DATABASE=RT3592 Wireless 802.11abgn 2T/2R PCIe
+ 
++pci:v00001814d0000359F*
++ ID_MODEL_FROM_DATABASE=RT3592 PCIe Wireless Network Adapter
++
+ pci:v00001814d00005360*
+  ID_MODEL_FROM_DATABASE=RT5360 Wireless 802.11n 1T/1R
+ 
+@@ -49421,6 +49475,9 @@ pci:v00001814d00005390*
+ pci:v00001814d00005390sv0000103Csd00001636*
+  ID_MODEL_FROM_DATABASE=U98Z077.00 Half-size Mini PCIe Card
+ 
++pci:v00001814d00005392*
++ ID_MODEL_FROM_DATABASE=RT5392 PCIe Wireless Network Adapter
++
+ pci:v00001814d0000539F*
+  ID_MODEL_FROM_DATABASE=RT5390 [802.11 b/g/n 1T1R G-band PCI Express Single Chip]
+ 
+@@ -50585,6 +50642,12 @@ pci:v00001957d00000087*
+ pci:v00001957d000000B4*
+  ID_MODEL_FROM_DATABASE=MPC8315E
+ 
++pci:v00001957d000000B6*
++ ID_MODEL_FROM_DATABASE=MPC8314E
++
++pci:v00001957d000000B6sv00001A56sd00001101*
++ ID_MODEL_FROM_DATABASE=Killer Xeno Pro Gigabit Ethernet Controller
++
+ pci:v00001957d000000C2*
+  ID_MODEL_FROM_DATABASE=MPC8379E
+ 
+@@ -50669,6 +50732,12 @@ pci:v00001957d00007011*
+ pci:v00001957d00007018*
+  ID_MODEL_FROM_DATABASE=MPC8610
+ 
++pci:v00001957d0000C006*
++ ID_MODEL_FROM_DATABASE=MPC8308
++
++pci:v00001957d0000C006sv00001A56sd00001201*
++ ID_MODEL_FROM_DATABASE=Killer E2100 Gigabit Ethernet Controller
++
+ pci:v00001958*
+  ID_VENDOR_FROM_DATABASE=Faster Technology, LLC.
+ 
+@@ -54164,6 +54233,9 @@ pci:v00008086d00000412*
+ pci:v00008086d00000416*
+  ID_MODEL_FROM_DATABASE=4th Gen Core Processor Integrated Graphics Controller
+ 
++pci:v00008086d00000416sv000017AAsd0000220E*
++ ID_MODEL_FROM_DATABASE=ThinkPad T440p
++
+ pci:v00008086d0000041A*
+  ID_MODEL_FROM_DATABASE=Xeon E3-1200 v3 Processor Integrated Graphics Controller
+ 
+@@ -54680,9 +54752,15 @@ pci:v00008086d0000095Asv00008086sd00005000*
+ pci:v00008086d0000095Asv00008086sd00005002*
+  ID_MODEL_FROM_DATABASE=Wireless-N 7265
+ 
++pci:v00008086d0000095Asv00008086sd0000500A*
++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
++
+ pci:v00008086d0000095Asv00008086sd00005010*
+  ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
+ 
++pci:v00008086d0000095Asv00008086sd00005012*
++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
++
+ pci:v00008086d0000095Asv00008086sd00005020*
+  ID_MODEL_FROM_DATABASE=Dual Band Wireless-N 7265
+ 
+@@ -54695,6 +54773,9 @@ pci:v00008086d0000095Asv00008086sd00005090*
+ pci:v00008086d0000095Asv00008086sd00005110*
+  ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
+ 
++pci:v00008086d0000095Asv00008086sd00005190*
++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
++
+ pci:v00008086d0000095Asv00008086sd00005400*
+  ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
+ 
+@@ -54707,24 +54788,30 @@ pci:v00008086d0000095Asv00008086sd00005420*
+ pci:v00008086d0000095Asv00008086sd00005490*
+  ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
+ 
++pci:v00008086d0000095Asv00008086sd00005590*
++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
++
+ pci:v00008086d0000095Asv00008086sd00009010*
+  ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
+ 
+-pci:v00008086d0000095Asv00008086sd00009210*
++pci:v00008086d0000095Asv00008086sd00009110*
+  ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
+ 
+-pci:v00008086d0000095Asv00008086sd00009410*
++pci:v00008086d0000095Asv00008086sd00009210*
+  ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
+ 
+-pci:v00008086d0000095B*
+- ID_MODEL_FROM_DATABASE=Wireless 7265
++pci:v00008086d0000095Asv00008086sd00009310*
++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
+ 
+-pci:v00008086d0000095Bsv00008086sd0000500A*
++pci:v00008086d0000095Asv00008086sd00009410*
+  ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
+ 
+-pci:v00008086d0000095Bsv00008086sd00005012*
++pci:v00008086d0000095Asv00008086sd00009510*
+  ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
+ 
++pci:v00008086d0000095B*
++ ID_MODEL_FROM_DATABASE=Wireless 7265
++
+ pci:v00008086d0000095Bsv00008086sd00005200*
+  ID_MODEL_FROM_DATABASE=Dual Band Wireless-N 7265
+ 
+@@ -54860,6 +54947,9 @@ pci:v00008086d00000C01*
+ pci:v00008086d00000C04*
+  ID_MODEL_FROM_DATABASE=Xeon E3-1200 v3/4th Gen Core Processor DRAM Controller
+ 
++pci:v00008086d00000C04sv000017AAsd0000220E*
++ ID_MODEL_FROM_DATABASE=ThinkPad T440p
++
+ pci:v00008086d00000C05*
+  ID_MODEL_FROM_DATABASE=Xeon E3-1200 v3/4th Gen Core Processor PCI Express x8 Controller
+ 
+@@ -54872,6 +54962,9 @@ pci:v00008086d00000C09*
+ pci:v00008086d00000C0C*
+  ID_MODEL_FROM_DATABASE=Xeon E3-1200 v3/4th Gen Core Processor HD Audio Controller
+ 
++pci:v00008086d00000C0Csv000017AAsd0000220E*
++ ID_MODEL_FROM_DATABASE=ThinkPad T440p
++
+ pci:v00008086d00000C46*
+  ID_MODEL_FROM_DATABASE=Atom Processor S1200 PCI Express Root Port 1
+ 
+@@ -57986,6 +58079,9 @@ pci:v00008086d00001539*
+ pci:v00008086d0000153A*
+  ID_MODEL_FROM_DATABASE=Ethernet Connection I217-LM
+ 
++pci:v00008086d0000153Asv000017AAsd0000220E*
++ ID_MODEL_FROM_DATABASE=ThinkPad T440p
++
+ pci:v00008086d0000153B*
+  ID_MODEL_FROM_DATABASE=Ethernet Connection I217-V
+ 
+@@ -69035,6 +69131,9 @@ pci:v00008086d00008C02*
+ pci:v00008086d00008C03*
+  ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family 6-port SATA Controller 1 [AHCI mode]
+ 
++pci:v00008086d00008C03sv000017AAsd0000220E*
++ ID_MODEL_FROM_DATABASE=ThinkPad T440p
++
+ pci:v00008086d00008C04*
+  ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family SATA Controller 1 [RAID mode]
+ 
+@@ -69062,12 +69161,18 @@ pci:v00008086d00008C0F*
+ pci:v00008086d00008C10*
+  ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family PCI Express Root Port #1
+ 
++pci:v00008086d00008C10sv000017AAsd0000220E*
++ ID_MODEL_FROM_DATABASE=ThinkPad T440p
++
+ pci:v00008086d00008C11*
+  ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family PCI Express Root Port #1
+ 
+ pci:v00008086d00008C12*
+  ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family PCI Express Root Port #2
+ 
++pci:v00008086d00008C12sv000017AAsd0000220E*
++ ID_MODEL_FROM_DATABASE=ThinkPad T440p
++
+ pci:v00008086d00008C13*
+  ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family PCI Express Root Port #2
+ 
+@@ -69110,12 +69215,18 @@ pci:v00008086d00008C1F*
+ pci:v00008086d00008C20*
+  ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset High Definition Audio Controller
+ 
++pci:v00008086d00008C20sv000017AAsd0000220E*
++ ID_MODEL_FROM_DATABASE=ThinkPad T440p
++
+ pci:v00008086d00008C21*
+  ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset High Definition Audio Controller
+ 
+ pci:v00008086d00008C22*
+  ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family SMBus Controller
+ 
++pci:v00008086d00008C22sv000017AAsd0000220E*
++ ID_MODEL_FROM_DATABASE=ThinkPad T440p
++
+ pci:v00008086d00008C23*
+  ID_MODEL_FROM_DATABASE=8 Series Chipset Family CHAP Counters
+ 
+@@ -69125,12 +69236,21 @@ pci:v00008086d00008C24*
+ pci:v00008086d00008C26*
+  ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family USB EHCI #1
+ 
++pci:v00008086d00008C26sv000017AAsd0000220E*
++ ID_MODEL_FROM_DATABASE=ThinkPad T440p
++
+ pci:v00008086d00008C2D*
+  ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family USB EHCI #2
+ 
++pci:v00008086d00008C2Dsv000017AAsd0000220E*
++ ID_MODEL_FROM_DATABASE=ThinkPad T440p
++
+ pci:v00008086d00008C31*
+  ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family USB xHCI
+ 
++pci:v00008086d00008C31sv000017AAsd0000220E*
++ ID_MODEL_FROM_DATABASE=ThinkPad T440p
++
+ pci:v00008086d00008C33*
+  ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family LAN Controller
+ 
+@@ -69140,6 +69260,9 @@ pci:v00008086d00008C34*
+ pci:v00008086d00008C3A*
+  ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family MEI Controller #1
+ 
++pci:v00008086d00008C3Asv000017AAsd0000220E*
++ ID_MODEL_FROM_DATABASE=ThinkPad T440p
++
+ pci:v00008086d00008C3B*
+  ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family MEI Controller #2
+ 
+@@ -69197,6 +69320,9 @@ pci:v00008086d00008C4E*
+ pci:v00008086d00008C4F*
+  ID_MODEL_FROM_DATABASE=QM87 Express LPC Controller
+ 
++pci:v00008086d00008C4Fsv000017AAsd0000220E*
++ ID_MODEL_FROM_DATABASE=ThinkPad T440p
++
+ pci:v00008086d00008C50*
+  ID_MODEL_FROM_DATABASE=B85 Express LPC Controller
+ 
+diff --git a/hwdb/20-usb-vendor-model.hwdb b/hwdb/20-usb-vendor-model.hwdb
+index 6663820..60dbcd2 100644
+--- a/hwdb/20-usb-vendor-model.hwdb
++++ b/hwdb/20-usb-vendor-model.hwdb
+@@ -46055,6 +46055,12 @@ usb:v1B5A*
+ usb:v1B65*
+  ID_VENDOR_FROM_DATABASE=The Hong Kong Standards and Testing Centre Ltd.
+ 
++usb:v1B71*
++ ID_VENDOR_FROM_DATABASE=Fushicai
++
++usb:v1B71p3002*
++ ID_MODEL_FROM_DATABASE=USBTV007 Video Grabber [EasyCAP]
++
+ usb:v1B72*
+  ID_VENDOR_FROM_DATABASE=ATERGI TECHNOLOGY CO., LTD.
+ 
diff --git a/0222-journal-Add-missing-byte-order-conversions.patch b/0222-journal-Add-missing-byte-order-conversions.patch
new file mode 100644
index 0000000..8493e83
--- /dev/null
+++ b/0222-journal-Add-missing-byte-order-conversions.patch
@@ -0,0 +1,58 @@
+From 43539d6b60ef0db3e98d00bef0024614c8c1807a Mon Sep 17 00:00:00 2001
+From: George McCollister <george.mccollister at gmail.com>
+Date: Tue, 31 Dec 2013 14:37:32 -0600
+Subject: [PATCH] journal: Add missing byte order conversions
+
+Convert entry_array.items[0] to host byte order prior to passing it to
+chain_cache_put().
+
+[zj: also use le64toh in journal-verify.c]
+
+https://bugs.freedesktop.org/show_bug.cgi?id=73194
+---
+ src/journal/journal-file.c   | 4 ++--
+ src/journal/journal-verify.c | 6 +++---
+ 2 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/src/journal/journal-file.c b/src/journal/journal-file.c
+index 5ef6a2a..ba65464 100644
+--- a/src/journal/journal-file.c
++++ b/src/journal/journal-file.c
+@@ -1452,7 +1452,7 @@ static int generic_array_get(
+ 
+ found:
+         /* Let's cache this item for the next invocation */
+-        chain_cache_put(f->chain_cache, ci, first, a, o->entry_array.items[0], t, i);
++        chain_cache_put(f->chain_cache, ci, first, a, le64toh(o->entry_array.items[0]), t, i);
+ 
+         r = journal_file_move_to_object(f, OBJECT_ENTRY, p, &o);
+         if (r < 0)
+@@ -1685,7 +1685,7 @@ found:
+                 return 0;
+ 
+         /* Let's cache this item for the next invocation */
+-        chain_cache_put(f->chain_cache, ci, first, a, array->entry_array.items[0], t, subtract_one ? (i > 0 ? i-1 : (uint64_t) -1) : i);
++        chain_cache_put(f->chain_cache, ci, first, a, le64toh(array->entry_array.items[0]), t, subtract_one ? (i > 0 ? i-1 : (uint64_t) -1) : i);
+ 
+         if (subtract_one && i == 0)
+                 p = last_p;
+diff --git a/src/journal/journal-verify.c b/src/journal/journal-verify.c
+index 3405811..82b0f0a 100644
+--- a/src/journal/journal-verify.c
++++ b/src/journal/journal-verify.c
+@@ -249,12 +249,12 @@ static int journal_file_object_verify(JournalFile *f, uint64_t offset, Object *o
+                 }
+ 
+                 for (i = 0; i < journal_file_entry_array_n_items(o); i++)
+-                        if (o->entry_array.items[i] != 0 &&
+-                            !VALID64(o->entry_array.items[i])) {
++                        if (le64toh(o->entry_array.items[i]) != 0 &&
++                            !VALID64(le64toh(o->entry_array.items[i]))) {
+                                 log_error(OFSfmt": invalid object entry array item (%"PRIu64"/%"PRIu64"): "OFSfmt,
+                                           offset,
+                                           i, journal_file_entry_array_n_items(o),
+-                                          o->entry_array.items[i]);
++                                          le64toh(o->entry_array.items[i]));
+                                 return -EBADMSG;
+                         }
+ 
diff --git a/0223-hwdb-change-key-mappings-for-Samsung-90X3A.patch b/0223-hwdb-change-key-mappings-for-Samsung-90X3A.patch
new file mode 100644
index 0000000..511c442
--- /dev/null
+++ b/0223-hwdb-change-key-mappings-for-Samsung-90X3A.patch
@@ -0,0 +1,39 @@
+From c47bbfc9af040f1b0fce2edced4136ee921d9e70 Mon Sep 17 00:00:00 2001
+From: Raudi <mpell at web.de>
+Date: Mon, 6 Jan 2014 19:44:08 -0500
+Subject: [PATCH] hwdb: change key mappings for Samsung 90X3A
+
+The Key codes didn't match with the described key. Also the key
+identifier strings were missing. I hope I chose appropriate ones.
+
+https://bugs.freedesktop.org/show_bug.cgi?id=70296
+---
+ hwdb/60-keyboard.hwdb | 8 +++++++-
+ 1 file changed, 7 insertions(+), 1 deletion(-)
+
+diff --git a/hwdb/60-keyboard.hwdb b/hwdb/60-keyboard.hwdb
+index ab9e569..644cb94 100644
+--- a/hwdb/60-keyboard.hwdb
++++ b/hwdb/60-keyboard.hwdb
+@@ -886,7 +886,6 @@ keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*940X3G*:pvr*
+  KEYBOARD_KEY_b3=!prog3                                 # Fn+F11 fan/cooling mode changer
+ 
+ # Series 9
+-keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*90X3A*:pvr*
+ keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*900X[34][AB]*:pvr*
+  KEYBOARD_KEY_ce=!                                      # Fn+F8 keyboard backlight up
+  KEYBOARD_KEY_8d=!                                      # Fn+F7 keyboard backlight down
+@@ -894,6 +893,13 @@ keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*900X[34][AB]*:pvr
+  KEYBOARD_KEY_97=!                                      # Fn+F12 Wi-Fi toggle
+  KEYBOARD_KEY_d5=!                                      # Fn+F6 battery life extender
+ 
++keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*90X3A*:pvr*
++ KEYBOARD_KEY_ce=!prog1                                 # Fn+F1 launch settings
++ KEYBOARD_KEY_8d=!prog3                                 # Fn+F6 performance mode
++ KEYBOARD_KEY_97=!kbdillumdown                          # Fn+F7 keyboard backlight down
++ KEYBOARD_KEY_96=!kbdillumup                            # Fn+F8 keyboard backlight up
++ KEYBOARD_KEY_d5=!wlan                                  # Fn+F12 Wi-Fi toggle
++
+ # SQ1US
+ keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pnSQ1US:pvr*
+  KEYBOARD_KEY_d4=menu
diff --git a/0224-hwdb-add-Samsung-700G.patch b/0224-hwdb-add-Samsung-700G.patch
new file mode 100644
index 0000000..41cb167
--- /dev/null
+++ b/0224-hwdb-add-Samsung-700G.patch
@@ -0,0 +1,22 @@
+From 8e48fd6cc5e12bb1662970dc7a7d306550a9a079 Mon Sep 17 00:00:00 2001
+From: Dmitry Pisklov <dpisklov at gmail.com>
+Date: Mon, 6 Jan 2014 20:06:59 -0500
+Subject: [PATCH] hwdb: add Samsung 700G
+
+https://bugs.freedesktop.org/show_bug.cgi?id=72311
+---
+ hwdb/60-keyboard.hwdb | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/hwdb/60-keyboard.hwdb b/hwdb/60-keyboard.hwdb
+index 644cb94..ccfc734 100644
+--- a/hwdb/60-keyboard.hwdb
++++ b/hwdb/60-keyboard.hwdb
+@@ -875,6 +875,7 @@ keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*550P*:pvr*
+  KEYBOARD_KEY_a9=!                                      # Fn Lock - Function lock off
+ 
+ keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*700Z*:pvr*
++keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*700G*:pvr*
+ keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*900X[34][CDG]*:pvr*
+ keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*940X3G*:pvr*
+  KEYBOARD_KEY_ce=!prog1                                 # Fn+F1 launch settings
diff --git a/0225-hwdb-remove-duplicate-entry-for-Samsung-700Z.patch b/0225-hwdb-remove-duplicate-entry-for-Samsung-700Z.patch
new file mode 100644
index 0000000..0f668a2
--- /dev/null
+++ b/0225-hwdb-remove-duplicate-entry-for-Samsung-700Z.patch
@@ -0,0 +1,28 @@
+From 1bfc778f2c82180873407f2da8a8c3335ae37b07 Mon Sep 17 00:00:00 2001
+From: Dmitry Pisklov <dpisklov at gmail.com>
+Date: Mon, 6 Jan 2014 20:08:21 -0500
+Subject: [PATCH] hwdb: remove duplicate entry for Samsung 700Z
+
+keyboardbrightnessup/down are not even real keys.
+
+https://bugs.freedesktop.org/show_bug.cgi?id=72311
+---
+ hwdb/60-keyboard.hwdb | 5 -----
+ 1 file changed, 5 deletions(-)
+
+diff --git a/hwdb/60-keyboard.hwdb b/hwdb/60-keyboard.hwdb
+index ccfc734..cf3d1fb 100644
+--- a/hwdb/60-keyboard.hwdb
++++ b/hwdb/60-keyboard.hwdb
+@@ -918,11 +918,6 @@ keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*SX20S*:pvr*
+  KEYBOARD_KEY_77=f22                                    # Touchpad on
+  KEYBOARD_KEY_79=f23                                    # Touchpad off
+ 
+-keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*700Z*:pvr*
+- KEYBOARD_KEY_ba=ejectcd
+- KEYBOARD_KEY_96=keyboardbrightnessup
+- KEYBOARD_KEY_97=keyboardbrightnessdown
+-
+ keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*700T*:pvr*
+  KEYBOARD_KEY_ad=leftmeta
+ 
diff --git a/0226-hwdb-fix-match-for-Thinkpad-X201-tablet.patch b/0226-hwdb-fix-match-for-Thinkpad-X201-tablet.patch
new file mode 100644
index 0000000..ac9269d
--- /dev/null
+++ b/0226-hwdb-fix-match-for-Thinkpad-X201-tablet.patch
@@ -0,0 +1,22 @@
+From 0ec2b82ee4f1bb1fdbf3293cfe10e59240d5c533 Mon Sep 17 00:00:00 2001
+From: AppleBloom <rat.o.drat at gmail.com>
+Date: Mon, 6 Jan 2014 20:51:47 -0500
+Subject: [PATCH] hwdb: fix match for Thinkpad X201 tablet
+
+https://bugs.freedesktop.org/show_bug.cgi?id=71929
+---
+ hwdb/60-keyboard.hwdb | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/hwdb/60-keyboard.hwdb b/hwdb/60-keyboard.hwdb
+index cf3d1fb..d253724 100644
+--- a/hwdb/60-keyboard.hwdb
++++ b/hwdb/60-keyboard.hwdb
+@@ -524,6 +524,7 @@ keyboard:dmi:bvn*:bvr*:bd*:svnLENOVO*:pnS10-*:pvr*
+ 
+ # Thinkpad X200_Tablet
+ keyboard:dmi:bvn*:bvr*:bd*:svnLENOVO*:pnThinkPad*X2*Tablet*:pvr*
++keyboard:dmi:bvn*:bvr*:bd*:svnLENOVO*:pn*:pvrThinkPad*X2*Tablet*
+  KEYBOARD_KEY_5d=menu
+  KEYBOARD_KEY_63=fn
+  KEYBOARD_KEY_66=screenlock
diff --git a/0227-keymap-Recognize-different-Toshiba-Satellite-capital.patch b/0227-keymap-Recognize-different-Toshiba-Satellite-capital.patch
new file mode 100644
index 0000000..3486097
--- /dev/null
+++ b/0227-keymap-Recognize-different-Toshiba-Satellite-capital.patch
@@ -0,0 +1,26 @@
+From 5ed0efb00ec5cf103debcb4fc5f38398c59cc619 Mon Sep 17 00:00:00 2001
+From: Martin Pitt <martinpitt at gnome.org>
+Date: Tue, 7 Jan 2014 09:40:01 +0100
+Subject: [PATCH] keymap: Recognize different Toshiba Satellite capitalizations
+
+https://launchpad.net/bugs/665918
+---
+ hwdb/60-keyboard.hwdb | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/hwdb/60-keyboard.hwdb b/hwdb/60-keyboard.hwdb
+index d253724..84a061f 100644
+--- a/hwdb/60-keyboard.hwdb
++++ b/hwdb/60-keyboard.hwdb
+@@ -1056,9 +1056,9 @@ keyboard:dmi:bvn*:bvr*:bd*:svnFOXCONN:pnQBOOK:*
+ keyboard:dmi:bvn*:bvr*:bd*:svnMTC:pn*:pvrA0:*
+ keyboard:dmi:bvn*:bvr*:bd*:svnMio*Technology:pnN890:*
+ keyboard:dmi:bvn*:bvr*:bd*:svnPEGATRON*CORP.:pnSpring*Peak:*
+-keyboard:dmi:bvn*:bvr*:bd*:svnTOSHIBA:pnSatellite*[uU]30[05]*:pvr*
++keyboard:dmi:bvn*:bvr*:bd*:svnTOSHIBA:pnSatellite*[uU][35]0[05]*:pvr*
++keyboard:dmi:bvn*:bvr*:bd*:svnTOSHIBA:pnSATELLITE*[uU][35]0[05]*:pvr*
+ keyboard:dmi:bvn*:bvr*:bd*:svnTOSHIBA:pnSatellite*Pro*[uU]300*:pvr*
+-keyboard:dmi:bvn*:bvr*:bd*:svnTOSHIBA:pnSATELLITE*[uU]500*:pvr*
+ keyboard:dmi:bvn*:bvr*:bd*:svnViooo*Corporation:pnPT17:*
+ keyboard:dmi:bvn*:bvr*:bd*:svnHANNspree:pnSN10E100:*
+ keyboard:dmi:bvn*:bvr*:bd*:svnGIGABYTE:pni1520M:*
diff --git a/0228-sleep.c-fix-typo.patch b/0228-sleep.c-fix-typo.patch
new file mode 100644
index 0000000..0ad123a
--- /dev/null
+++ b/0228-sleep.c-fix-typo.patch
@@ -0,0 +1,22 @@
+From b1f114caf2e2b0913e4122847c7fa2b182b86771 Mon Sep 17 00:00:00 2001
+From: Michele Curti <michele.curti at gmail.com>
+Date: Tue, 7 Jan 2014 17:51:41 +0100
+Subject: [PATCH] sleep.c: fix typo
+
+---
+ src/sleep/sleep.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/sleep/sleep.c b/src/sleep/sleep.c
+index f96987f..c228cb6 100644
+--- a/src/sleep/sleep.c
++++ b/src/sleep/sleep.c
+@@ -90,7 +90,7 @@ static int execute(char **modes, char **states) {
+         const char* note = strappenda("SLEEP=", arg_verb);
+ 
+         /* This file is opened first, so that if we hit an error,
+-         * we can abort before modyfing any state. */
++         * we can abort before modifying any state. */
+         f = fopen("/sys/power/state", "we");
+         if (!f) {
+                 log_error("Failed to open /sys/power/state: %m");
diff --git a/0229-delta-ensure-that-d_type-will-be-set-on-every-fs.patch b/0229-delta-ensure-that-d_type-will-be-set-on-every-fs.patch
new file mode 100644
index 0000000..d005b76
--- /dev/null
+++ b/0229-delta-ensure-that-d_type-will-be-set-on-every-fs.patch
@@ -0,0 +1,22 @@
+From 35fbb83e322dfe14771d0c84b623b423a38b1200 Mon Sep 17 00:00:00 2001
+From: Lukas Nykryn <lnykryn at redhat.com>
+Date: Thu, 9 Jan 2014 16:43:00 +0100
+Subject: [PATCH] delta: ensure that d_type will be set on every fs
+
+---
+ src/delta/delta.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/src/delta/delta.c b/src/delta/delta.c
+index ae658f9..a8dd57e 100644
+--- a/src/delta/delta.c
++++ b/src/delta/delta.c
+@@ -316,6 +316,8 @@ static int enumerate_dir(Hashmap *top, Hashmap *bottom, Hashmap *drops, const ch
+                 if (!de)
+                         return -errno;
+ 
++                dirent_ensure_type(d, de);
++
+                 if (dropins && de->d_type == DT_DIR && endswith(de->d_name, ".d"))
+                         enumerate_dir_d(top, bottom, drops, path, de->d_name);
+ 
diff --git a/0230-tmpfiles-don-t-allow-label_fix-to-print-ENOENT-when-.patch b/0230-tmpfiles-don-t-allow-label_fix-to-print-ENOENT-when-.patch
new file mode 100644
index 0000000..6e7cb46
--- /dev/null
+++ b/0230-tmpfiles-don-t-allow-label_fix-to-print-ENOENT-when-.patch
@@ -0,0 +1,33 @@
+From 3bef88018c93e77d50d3206e84f6fa2fe8c2fb99 Mon Sep 17 00:00:00 2001
+From: Lukas Nykryn <lnykryn at redhat.com>
+Date: Thu, 9 Jan 2014 18:00:50 +0100
+Subject: [PATCH] tmpfiles: don't allow label_fix to print ENOENT when we want
+ to ignore it
+
+---
+ src/tmpfiles/tmpfiles.c | 5 +----
+ 1 file changed, 1 insertion(+), 4 deletions(-)
+
+diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c
+index 4dd1638..5e49cc8 100644
+--- a/src/tmpfiles/tmpfiles.c
++++ b/src/tmpfiles/tmpfiles.c
+@@ -435,8 +435,6 @@ finish:
+ }
+ 
+ static int item_set_perms_full(Item *i, const char *path, bool ignore_enoent) {
+-        int r;
+-
+         /* not using i->path directly because it may be a glob */
+         if (i->mode_set)
+                 if (chmod(path, i->mode) < 0) {
+@@ -457,8 +455,7 @@ static int item_set_perms_full(Item *i, const char *path, bool ignore_enoent) {
+                         }
+                 }
+ 
+-        r = label_fix(path, false, false);
+-        return r == -ENOENT && ignore_enoent ? 0 : r;
++        return label_fix(path, ignore_enoent, false);
+ }
+ 
+ static int item_set_perms(Item *i, const char *path) {
diff --git a/0231-man-mention-which-variables-will-be-expanded-in-Exec.patch b/0231-man-mention-which-variables-will-be-expanded-in-Exec.patch
new file mode 100644
index 0000000..a491004
--- /dev/null
+++ b/0231-man-mention-which-variables-will-be-expanded-in-Exec.patch
@@ -0,0 +1,86 @@
+From 4f4e72a317126e9d41db675ddae27a0942cd23bf Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Thu, 9 Jan 2014 22:23:32 -0500
+Subject: [PATCH] man: mention which variables will be expanded in ExecStart
+
+Conflicts:
+	man/systemd.service.xml
+---
+ man/systemd.exec.xml    |  6 ++++--
+ man/systemd.service.xml | 35 +++++++++++++++++++++++------------
+ 2 files changed, 27 insertions(+), 14 deletions(-)
+
+diff --git a/man/systemd.exec.xml b/man/systemd.exec.xml
+index e213ec4..c8414d4 100644
+--- a/man/systemd.exec.xml
++++ b/man/systemd.exec.xml
+@@ -295,9 +295,11 @@
+                                 for the assignment.</para>
+ 
+                                 <para>Example:
+-                                <programlisting>Environment="VAR1=word1 word2" VAR2=word3 "VAR3=word 5 6"</programlisting>
++                                <programlisting>Environment="VAR1=word1 word2" VAR2=word3 "VAR3=$word 5 6"</programlisting>
+                                 gives three variables <literal>VAR1</literal>,
+-                                <literal>VAR2</literal>, <literal>VAR3</literal>.
++                                <literal>VAR2</literal>, <literal>VAR3</literal>
++                                with the values <literal>word1 word2</literal>,
++                                <literal>word3</literal>, <literal>$word 5 6</literal>.
+                                 </para>
+ 
+                                 <para>
+diff --git a/man/systemd.service.xml b/man/systemd.service.xml
+index af3e0f2..4fb21ba 100644
+--- a/man/systemd.service.xml
++++ b/man/systemd.service.xml
+@@ -392,16 +392,32 @@
+                                 replaced by the value of the
+                                 environment variable including all
+                                 whitespace it contains, resulting in a
+-                                single argument.  Use
++                                single argument. Use
+                                 <literal>$FOO</literal> as a separate
+                                 word on the command line, in which
+                                 case it will be replaced by the value
+-                                of the environment variable split up
+-                                at whitespace, resulting in zero or
+-                                more arguments. To pass literal dollar sign
+-                                use <literal>$$</literal>. Note that the first
+-                                argument (i.e. the program to execute)
+-                                may not be a variable.</para>
++                                of the environment variable split at
++                                whitespace, resulting in zero or more
++                                arguments. To pass a literal dollar
++                                sign, use <literal>$$</literal>.
++                                Variables whose value is not known at
++                                expansion time are treated as empty
++                                strings. Note that the first argument
++                                (i.e. the program to execute) may not
++                                be a variable.</para>
++
++                                <para>Variables to be used in this
++                                fashion may be defined through
++                                <varname>Environment=</varname> and
++                                <varname>EnvironmentFile=</varname>.
++                                In addition, variables listed in
++                                section "Environment variables in
++                                spawned processes" in
++                                <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>
++                                which are considered "static
++                                configuration" may used (this includes
++                                e.g. <varname>$USER</varname>, but not
++                                <varname>$TERM</varname>).</para>
+ 
+                                 <para>Optionally, if the absolute file
+                                 name is prefixed with
+@@ -429,11 +445,6 @@
+                                 <programlisting>ExecStart=/bin/sh -c 'dmesg | tac'
+                                 </programlisting>
+ 
+-                                <para>Only select environment variables that
+-                                are set for executed commands. See
+-                                <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
+-                                </para>
+-
+                                 <para>Example:</para>
+                                 <programlisting>ExecStart=/bin/echo one ; /bin/echo "two two"
+                                 </programlisting>
diff --git a/0232-hwdb-Add-support-for-Toshiba-Satellite-P75-A7200-key.patch b/0232-hwdb-Add-support-for-Toshiba-Satellite-P75-A7200-key.patch
new file mode 100644
index 0000000..a9f69ab
--- /dev/null
+++ b/0232-hwdb-Add-support-for-Toshiba-Satellite-P75-A7200-key.patch
@@ -0,0 +1,28 @@
+From 0fb47635e6db4d27b821388274c0c83d612fc0bb Mon Sep 17 00:00:00 2001
+From: Unai Uribarri <unaiur at gmail.com>
+Date: Sat, 11 Jan 2014 09:19:41 -0500
+Subject: [PATCH] hwdb: Add support for Toshiba Satellite P75-A7200 keyboard
+
+---
+ hwdb/60-keyboard.hwdb | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/hwdb/60-keyboard.hwdb b/hwdb/60-keyboard.hwdb
+index 84a061f..e3d1f02 100644
+--- a/hwdb/60-keyboard.hwdb
++++ b/hwdb/60-keyboard.hwdb
+@@ -1012,6 +1012,14 @@ keyboard:name:Toshiba*input*device:dmi:bvn*:bvr*:bd*:svnTOSHIBA*:pnSATELLITEU940
+  KEYBOARD_KEY_13e=switchvideomode
+  KEYBOARD_KEY_13f=f21                                   # Touchpad toggle
+ 
++# Satellite P75-A7200
++keyboard:name:Toshiba*input*device:dmi:bvn*:bvr*:bd*:svnTOSHIBA*:pnSatellite*P75-A:pvr*
++ KEYBOARD_KEY_13c=brightnessdown
++ KEYBOARD_KEY_13d=brightnessup
++ KEYBOARD_KEY_13e=switchvideomode
++ KEYBOARD_KEY_13f=touchpad_toggle
++ KEYBOARD_KEY_9e=wlan
++
+ ###########################################################
+ # VIA
+ ###########################################################
diff --git a/0233-journal-fix-access-to-munmapped-memory-in-sd_journal.patch b/0233-journal-fix-access-to-munmapped-memory-in-sd_journal.patch
new file mode 100644
index 0000000..4b23ffe
--- /dev/null
+++ b/0233-journal-fix-access-to-munmapped-memory-in-sd_journal.patch
@@ -0,0 +1,321 @@
+From 9b9103a07cc32fa76be4c71fcd9a93b5d946edd4 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Sat, 28 Dec 2013 19:33:23 -0500
+Subject: [PATCH] journal: fix access to munmapped memory in
+ sd_journal_enumerate_unique
+
+sd_j_e_u needs to keep a reference to an object while comparing it
+with possibly duplicate objects in other files. Because the size of
+mmap cache is limited, with enough files and object to compare to,
+at some point the object being compared would be munmapped, resulting
+in a segmentation fault.
+
+Fix this issue by turning keep_always into a reference count that can
+be increased and decreased. Other callers which set keep_always=true
+are unmodified: their references are never released but are ignored
+when the whole file is closed, which happens at some point. keep_always
+is increased in sd_j_e_u and later on released.
+---
+ src/journal/journal-file.c   |  5 +---
+ src/journal/journal-file.h   | 24 +++++++++++++++++++
+ src/journal/journal-verify.c |  4 ----
+ src/journal/mmap-cache.c     | 57 +++++++++++++++++++++++++++++++++++---------
+ src/journal/mmap-cache.h     | 18 +++++++++++++-
+ src/journal/sd-journal.c     | 18 +++++++++++---
+ 6 files changed, 103 insertions(+), 23 deletions(-)
+
+diff --git a/src/journal/journal-file.c b/src/journal/journal-file.c
+index ba65464..4d9787a 100644
+--- a/src/journal/journal-file.c
++++ b/src/journal/journal-file.c
+@@ -419,7 +419,6 @@ int journal_file_move_to_object(JournalFile *f, int type, uint64_t offset, Objec
+         void *t;
+         Object *o;
+         uint64_t s;
+-        unsigned context;
+ 
+         assert(f);
+         assert(ret);
+@@ -428,10 +427,8 @@ int journal_file_move_to_object(JournalFile *f, int type, uint64_t offset, Objec
+         if (!VALID64(offset))
+                 return -EFAULT;
+ 
+-        /* One context for each type, plus one catch-all for the rest */
+-        context = type > 0 && type < _OBJECT_TYPE_MAX ? type : 0;
+ 
+-        r = journal_file_move_to(f, context, false, offset, sizeof(ObjectHeader), &t);
++        r = journal_file_move_to(f, type_to_context(type), false, offset, sizeof(ObjectHeader), &t);
+         if (r < 0)
+                 return r;
+ 
+diff --git a/src/journal/journal-file.h b/src/journal/journal-file.h
+index 50bdb67..0bd23f7 100644
+--- a/src/journal/journal-file.h
++++ b/src/journal/journal-file.h
+@@ -128,6 +128,10 @@ int journal_file_open_reliably(
+ #define ALIGN64(x) (((x) + 7ULL) & ~7ULL)
+ #define VALID64(x) (((x) & 7ULL) == 0ULL)
+ 
++/* Use six characters to cover the offsets common in smallish journal
++ * files without adding too many zeros. */
++#define OFSfmt "%06"PRIx64
++
+ static inline bool VALID_REALTIME(uint64_t u) {
+         /* This considers timestamps until the year 3112 valid. That should be plenty room... */
+         return u > 0 && u < (1ULL << 55);
+@@ -197,3 +201,23 @@ int journal_file_get_cutoff_realtime_usec(JournalFile *f, usec_t *from, usec_t *
+ int journal_file_get_cutoff_monotonic_usec(JournalFile *f, sd_id128_t boot, usec_t *from, usec_t *to);
+ 
+ bool journal_file_rotate_suggested(JournalFile *f, usec_t max_file_usec);
++
++
++static unsigned type_to_context(int type) {
++        /* One context for each type, plus one catch-all for the rest */
++        return type > 0 && type < _OBJECT_TYPE_MAX ? type : 0;
++}
++
++static inline int journal_file_object_keep(JournalFile *f, Object *o, uint64_t offset) {
++        unsigned context = type_to_context(o->object.type);
++
++        return mmap_cache_get(f->mmap, f->fd, f->prot, context, true,
++                              offset, o->object.size, &f->last_stat, NULL);
++}
++
++static inline int journal_file_object_release(JournalFile *f, Object *o, uint64_t offset) {
++        unsigned context = type_to_context(o->object.type);
++
++        return mmap_cache_release(f->mmap, f->fd, f->prot, context,
++                                  offset, o->object.size);
++}
+diff --git a/src/journal/journal-verify.c b/src/journal/journal-verify.c
+index 82b0f0a..f2422ff 100644
+--- a/src/journal/journal-verify.c
++++ b/src/journal/journal-verify.c
+@@ -34,10 +34,6 @@
+ #include "compress.h"
+ #include "fsprg.h"
+ 
+-/* Use six characters to cover the offsets common in smallish journal
+- * files without adding to many zeros. */
+-#define OFSfmt "%06"PRIx64
+-
+ static int journal_file_object_verify(JournalFile *f, uint64_t offset, Object *o) {
+         uint64_t i;
+ 
+diff --git a/src/journal/mmap-cache.c b/src/journal/mmap-cache.c
+index 42a8a7d..24b2bb8 100644
+--- a/src/journal/mmap-cache.c
++++ b/src/journal/mmap-cache.c
+@@ -38,7 +38,7 @@ typedef struct FileDescriptor FileDescriptor;
+ struct Window {
+         MMapCache *cache;
+ 
+-        bool keep_always;
++        unsigned keep_always;
+         bool in_unused;
+ 
+         int prot;
+@@ -185,7 +185,7 @@ static void context_detach_window(Context *c) {
+         c->window = NULL;
+         LIST_REMOVE(Context, by_window, w->contexts, c);
+ 
+-        if (!w->contexts && !w->keep_always) {
++        if (!w->contexts && w->keep_always == 0) {
+                 /* Not used anymore? */
+                 LIST_PREPEND(Window, unused, c->cache->unused, w);
+                 if (!c->cache->last_unused)
+@@ -360,7 +360,6 @@ static int try_context(
+         assert(m->n_ref > 0);
+         assert(fd >= 0);
+         assert(size > 0);
+-        assert(ret);
+ 
+         c = hashmap_get(m->contexts, UINT_TO_PTR(context+1));
+         if (!c)
+@@ -378,9 +377,10 @@ static int try_context(
+                 return 0;
+         }
+ 
+-        c->window->keep_always = c->window->keep_always || keep_always;
++        c->window->keep_always += keep_always;
+ 
+-        *ret = (uint8_t*) c->window->ptr + (offset - c->window->offset);
++        if (ret)
++                *ret = (uint8_t*) c->window->ptr + (offset - c->window->offset);
+         return 1;
+ }
+ 
+@@ -402,7 +402,6 @@ static int find_mmap(
+         assert(m->n_ref > 0);
+         assert(fd >= 0);
+         assert(size > 0);
+-        assert(ret);
+ 
+         f = hashmap_get(m->fds, INT_TO_PTR(fd + 1));
+         if (!f)
+@@ -422,9 +421,10 @@ static int find_mmap(
+                 return -ENOMEM;
+ 
+         context_attach_window(c, w);
+-        w->keep_always = w->keep_always || keep_always;
++        w->keep_always += keep_always;
+ 
+-        *ret = (uint8_t*) w->ptr + (offset - w->offset);
++        if (ret)
++                *ret = (uint8_t*) w->ptr + (offset - w->offset);
+         return 1;
+ }
+ 
+@@ -450,7 +450,6 @@ static int add_mmap(
+         assert(m->n_ref > 0);
+         assert(fd >= 0);
+         assert(size > 0);
+-        assert(ret);
+ 
+         woffset = offset & ~((uint64_t) page_size() - 1ULL);
+         wsize = size + (offset - woffset);
+@@ -520,7 +519,8 @@ static int add_mmap(
+         c->window = w;
+         LIST_PREPEND(Context, by_window, w->contexts, c);
+ 
+-        *ret = (uint8_t*) w->ptr + (offset - w->offset);
++        if (ret)
++                *ret = (uint8_t*) w->ptr + (offset - w->offset);
+         return 1;
+ }
+ 
+@@ -541,7 +541,6 @@ int mmap_cache_get(
+         assert(m->n_ref > 0);
+         assert(fd >= 0);
+         assert(size > 0);
+-        assert(ret);
+ 
+         /* Check whether the current context is the right one already */
+         r = try_context(m, fd, prot, context, keep_always, offset, size, ret);
+@@ -563,6 +562,42 @@ int mmap_cache_get(
+         return add_mmap(m, fd, prot, context, keep_always, offset, size, st, ret);
+ }
+ 
++int mmap_cache_release(
++                MMapCache *m,
++                int fd,
++                int prot,
++                unsigned context,
++                uint64_t offset,
++                size_t size) {
++
++        FileDescriptor *f;
++        Window *w;
++
++        assert(m);
++        assert(m->n_ref > 0);
++        assert(fd >= 0);
++        assert(size > 0);
++
++        f = hashmap_get(m->fds, INT_TO_PTR(fd + 1));
++        if (!f)
++                return -EBADF;
++
++        assert(f->fd == fd);
++
++        LIST_FOREACH(by_fd, w, f->windows)
++                if (window_matches(w, fd, prot, offset, size))
++                        break;
++
++        if (!w)
++                return -ENOENT;
++
++        if (w->keep_always == 0)
++                return -ENOLCK;
++
++        w->keep_always -= 1;
++        return 0;
++}
++
+ void mmap_cache_close_fd(MMapCache *m, int fd) {
+         FileDescriptor *f;
+ 
+diff --git a/src/journal/mmap-cache.h b/src/journal/mmap-cache.h
+index 912336d..647555a 100644
+--- a/src/journal/mmap-cache.h
++++ b/src/journal/mmap-cache.h
+@@ -31,7 +31,23 @@ MMapCache* mmap_cache_new(void);
+ MMapCache* mmap_cache_ref(MMapCache *m);
+ MMapCache* mmap_cache_unref(MMapCache *m);
+ 
+-int mmap_cache_get(MMapCache *m, int fd, int prot, unsigned context, bool keep_always, uint64_t offset, size_t size, struct stat *st, void **ret);
++int mmap_cache_get(
++        MMapCache *m,
++        int fd,
++        int prot,
++        unsigned context,
++        bool keep_always,
++        uint64_t offset,
++        size_t size,
++        struct stat *st,
++        void **ret);
++int mmap_cache_release(
++        MMapCache *m,
++        int fd,
++        int prot,
++        unsigned context,
++        uint64_t offset,
++        size_t size);
+ void mmap_cache_close_fd(MMapCache *m, int fd);
+ void mmap_cache_close_context(MMapCache *m, unsigned context);
+ 
+diff --git a/src/journal/sd-journal.c b/src/journal/sd-journal.c
+index 52abbe9..46c3feb 100644
+--- a/src/journal/sd-journal.c
++++ b/src/journal/sd-journal.c
+@@ -2508,9 +2508,7 @@ _public_ int sd_journal_query_unique(sd_journal *j, const char *field) {
+ }
+ 
+ _public_ int sd_journal_enumerate_unique(sd_journal *j, const void **data, size_t *l) {
+-        Object *o;
+         size_t k;
+-        int r;
+ 
+         if (!j)
+                 return -EINVAL;
+@@ -2535,9 +2533,11 @@ _public_ int sd_journal_enumerate_unique(sd_journal *j, const void **data, size_
+         for (;;) {
+                 JournalFile *of;
+                 Iterator i;
++                Object *o;
+                 const void *odata;
+                 size_t ol;
+                 bool found;
++                int r;
+ 
+                 /* Proceed to next data object in the field's linked list */
+                 if (j->unique_offset == 0) {
+@@ -2574,8 +2574,16 @@ _public_ int sd_journal_enumerate_unique(sd_journal *j, const void **data, size_
+                         return r;
+ 
+                 /* Let's do the type check by hand, since we used 0 context above. */
+-                if (o->object.type != OBJECT_DATA)
++                if (o->object.type != OBJECT_DATA) {
++                        log_error("%s:offset " OFSfmt ": object has type %d, expected %d",
++                                  j->unique_file->path, j->unique_offset,
++                                  o->object.type, OBJECT_DATA);
+                         return -EBADMSG;
++                }
++
++                r = journal_file_object_keep(j->unique_file, o, j->unique_offset);
++                if (r < 0)
++                        return r;
+ 
+                 r = return_data(j, j->unique_file, o, &odata, &ol);
+                 if (r < 0)
+@@ -2609,6 +2617,10 @@ _public_ int sd_journal_enumerate_unique(sd_journal *j, const void **data, size_
+                 if (found)
+                         continue;
+ 
++                r = journal_file_object_release(j->unique_file, o, j->unique_offset);
++                if (r < 0)
++                        return r;
++
+                 r = return_data(j, j->unique_file, o, data, l);
+                 if (r < 0)
+                         return r;
diff --git a/0234-gpt-auto-generator-skip-nonexistent-devices.patch b/0234-gpt-auto-generator-skip-nonexistent-devices.patch
new file mode 100644
index 0000000..1735610
--- /dev/null
+++ b/0234-gpt-auto-generator-skip-nonexistent-devices.patch
@@ -0,0 +1,32 @@
+From 182a32427b50aed5812833e3ecb8a6078160a501 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?=C5=81ukasz=20Stelmach?= <l.stelmach at samsung.com>
+Date: Tue, 7 Jan 2014 15:00:22 +0100
+Subject: [PATCH] gpt-auto-generator: skip nonexistent devices
+
+The devices we work with have eMMC chips for storage. The chips
+provide four "hardware" partitions.  The first is /dev/mmcblk0, it
+takes almost whole space and holds a GPT with several real partitions
+(/dev/mmcblk0p?). Then there are three block devices (mmcblk0boot0,
+mmcblk0boot1, rpmb) that are part of the same hardware as mmcblk0 that
+are presented by the kernel as children of the latter. That relationship
+makes gpt-auto-generator try to peek them but since they are not GPT
+partitions blkid_do_safeprobe() returns -2 making verify_gpt_parition()
+function return -ENODEV.
+---
+ src/gpt-auto-generator/gpt-auto-generator.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/src/gpt-auto-generator/gpt-auto-generator.c b/src/gpt-auto-generator/gpt-auto-generator.c
+index 25440e7..0e8e959 100644
+--- a/src/gpt-auto-generator/gpt-auto-generator.c
++++ b/src/gpt-auto-generator/gpt-auto-generator.c
+@@ -298,6 +298,9 @@ static int enumerate_partitions(struct udev *udev, dev_t dev) {
+ 
+                 r = verify_gpt_partition(node, &type_id, &nr, &fstype);
+                 if (r < 0) {
++                        /* skip child devices which are not detected properly */
++                        if (r == -ENODEV)
++                                continue;
+                         log_error("Failed to verify GPT partition %s: %s",
+                                   node, strerror(-r));
+                         return r;
diff --git a/0235-gpt-auto-generator-use-EBADSLT-code-when-unable-to-d.patch b/0235-gpt-auto-generator-use-EBADSLT-code-when-unable-to-d.patch
new file mode 100644
index 0000000..90dcbbb
--- /dev/null
+++ b/0235-gpt-auto-generator-use-EBADSLT-code-when-unable-to-d.patch
@@ -0,0 +1,38 @@
+From 15ef380be7e38898fe2aef4ae3aa6fb0ce804564 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Sat, 11 Jan 2014 16:45:29 -0500
+Subject: [PATCH] gpt-auto-generator: use EBADSLT code when unable to detect
+ partition type
+
+ENODEV suggests that something is missing, which is be misleading
+here.
+---
+ src/gpt-auto-generator/gpt-auto-generator.c | 8 +++-----
+ 1 file changed, 3 insertions(+), 5 deletions(-)
+
+diff --git a/src/gpt-auto-generator/gpt-auto-generator.c b/src/gpt-auto-generator/gpt-auto-generator.c
+index 0e8e959..d7c09f0 100644
+--- a/src/gpt-auto-generator/gpt-auto-generator.c
++++ b/src/gpt-auto-generator/gpt-auto-generator.c
+@@ -74,10 +74,8 @@ static int verify_gpt_partition(const char *node, sd_id128_t *type, unsigned *nr
+ 
+         errno = 0;
+         r = blkid_do_safeprobe(b);
+-        if (r == -2)
+-                return -ENODEV;
+-        else if (r == 1)
+-                return -ENODEV;
++        if (r == -2 || r == 1) /* no result or uncertain */
++                return -EBADSLT;
+         else if (r != 0)
+                 return errno ? -errno : -EIO;
+ 
+@@ -299,7 +297,7 @@ static int enumerate_partitions(struct udev *udev, dev_t dev) {
+                 r = verify_gpt_partition(node, &type_id, &nr, &fstype);
+                 if (r < 0) {
+                         /* skip child devices which are not detected properly */
+-                        if (r == -ENODEV)
++                        if (r == -EBADSLT)
+                                 continue;
+                         log_error("Failed to verify GPT partition %s: %s",
+                                   node, strerror(-r));
diff --git a/0236-journald-do-not-free-space-when-disk-space-runs-low.patch b/0236-journald-do-not-free-space-when-disk-space-runs-low.patch
new file mode 100644
index 0000000..53a0bda
--- /dev/null
+++ b/0236-journald-do-not-free-space-when-disk-space-runs-low.patch
@@ -0,0 +1,265 @@
+From 96dc1b72f3fb5d344538984121e11e5804905145 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Wed, 13 Nov 2013 00:42:22 -0500
+Subject: [PATCH] journald: do not free space when disk space runs low
+
+Before, journald would remove journal files until both MaxUse= and
+KeepFree= settings would be satisfied. The first one depends (if set
+automatically) on the size of the file system and is constant.  But
+the second one depends on current use of the file system, and a spike
+in disk usage would cause journald to delete journal files, trying to
+reach usage which would leave 15% of the disk free. This behaviour is
+surprising for the user who doesn't expect his logs to be purged when
+disk usage goes above 85%, which on a large disk could be some
+gigabytes from being full. In addition attempting to keep 15% free
+provides an attack vector where filling the disk sufficiently disposes
+of almost all logs.
+
+Instead, obey KeepFree= only as a limit on adding additional files.
+When replacing old files with new, ignore KeepFree=. This means that
+if journal disk usage reached some high point that at some later point
+start to violate the KeepFree= constraint, journald will not add files
+to go above this point, but it will stay (slightly) below it. When
+journald is restarted, it forgets the previous maximum usage value,
+and sets the limit based on the current usage, so if disk remains to
+be filled, journald might use one journal-file-size less on each
+restart, if restarts happen just after rotation. This seems like a
+reasonable compromise between implementation complexity and robustness.
+---
+ man/journald.conf.xml                   | 39 +++++++++++++++++++++++----------
+ src/journal/journal-file.h              |  1 +
+ src/journal/journal-vacuum.c            |  6 ++---
+ src/journal/journal-vacuum.h            |  2 +-
+ src/journal/journald-server.c           | 22 ++++++++++++++-----
+ src/journal/test-journal-interleaving.c |  4 ++--
+ src/journal/test-journal.c              |  4 ++--
+ src/shared/macro.h                      |  7 ++++++
+ 8 files changed, 58 insertions(+), 27 deletions(-)
+
+diff --git a/man/journald.conf.xml b/man/journald.conf.xml
+index b362c5d..e0796e1 100644
+--- a/man/journald.conf.xml
++++ b/man/journald.conf.xml
+@@ -250,20 +250,35 @@
+                                 <para><varname>SystemMaxUse=</varname>
+                                 and <varname>RuntimeMaxUse=</varname>
+                                 control how much disk space the
+-                                journal may use up at
+-                                maximum. Defaults to 10% of the size
+-                                of the respective file
+-                                system. <varname>SystemKeepFree=</varname>
+-                                and
++                                journal may use up at maximum.
++                                <varname>SystemKeepFree=</varname> and
+                                 <varname>RuntimeKeepFree=</varname>
+                                 control how much disk space
+-                                systemd-journald shall always leave
+-                                free for other uses. Defaults to 15%
+-                                of the size of the respective file
+-                                system. systemd-journald will respect
+-                                both limits, i.e. use the smaller of
+-                                the two values.
+-                                <varname>SystemMaxFileSize=</varname>
++                                systemd-journald shall leave free for
++                                other uses.
++                                <command>systemd-journald</command>
++                                will respect both limits and use the
++                                smaller of the two values.</para>
++
++                                <para>The first pair defaults to 10%
++                                and the second to 15% of the size of
++                                the respective file system. If the
++                                file system is nearly full and either
++                                <varname>SystemKeepFree=</varname> or
++                                <varname>RuntimeKeepFree=</varname> is
++                                violated when systemd-journald is
++                                started, the value will be raised to
++                                percentage that is actually free. This
++                                means that if before there was enough
++                                free space and journal files were
++                                created, and subsequently something
++                                else causes the file system to fill
++                                up, journald will stop using more
++                                space, but it'll will not removing
++                                existing files to go reduce footprint
++                                either.</para>
++
++                                <para><varname>SystemMaxFileSize=</varname>
+                                 and
+                                 <varname>RuntimeMaxFileSize=</varname>
+                                 control how large individual journal
+diff --git a/src/journal/journal-file.h b/src/journal/journal-file.h
+index 0bd23f7..2e06b57 100644
+--- a/src/journal/journal-file.h
++++ b/src/journal/journal-file.h
+@@ -37,6 +37,7 @@
+ 
+ typedef struct JournalMetrics {
+         uint64_t max_use;
++        uint64_t use;
+         uint64_t max_size;
+         uint64_t min_size;
+         uint64_t keep_free;
+diff --git a/src/journal/journal-vacuum.c b/src/journal/journal-vacuum.c
+index d4a1c6c..8b07f65 100644
+--- a/src/journal/journal-vacuum.c
++++ b/src/journal/journal-vacuum.c
+@@ -150,7 +150,6 @@ static int journal_file_empty(int dir_fd, const char *name) {
+ int journal_directory_vacuum(
+                 const char *directory,
+                 uint64_t max_use,
+-                uint64_t min_free,
+                 usec_t max_retention_usec,
+                 usec_t *oldest_usec) {
+ 
+@@ -164,7 +163,7 @@ int journal_directory_vacuum(
+ 
+         assert(directory);
+ 
+-        if (max_use <= 0 && min_free <= 0 && max_retention_usec <= 0)
++        if (max_use <= 0 && max_retention_usec <= 0)
+                 return 0;
+ 
+         if (max_retention_usec > 0) {
+@@ -310,8 +309,7 @@ int journal_directory_vacuum(
+                 }
+ 
+                 if ((max_retention_usec <= 0 || list[i].realtime >= retention_limit) &&
+-                    (max_use <= 0 || sum <= max_use) &&
+-                    (min_free <= 0 || (uint64_t) ss.f_bavail * (uint64_t) ss.f_bsize >= min_free))
++                    (max_use <= 0 || sum <= max_use))
+                         break;
+ 
+                 if (unlinkat(dirfd(d), list[i].filename, 0) >= 0) {
+diff --git a/src/journal/journal-vacuum.h b/src/journal/journal-vacuum.h
+index f5e3e52..bc30c3a 100644
+--- a/src/journal/journal-vacuum.h
++++ b/src/journal/journal-vacuum.h
+@@ -23,4 +23,4 @@
+ 
+ #include <inttypes.h>
+ 
+-int journal_directory_vacuum(const char *directory, uint64_t max_use, uint64_t min_free, usec_t max_retention_usec, usec_t *oldest_usec);
++int journal_directory_vacuum(const char *directory, uint64_t max_use, usec_t max_retention_usec, usec_t *oldest_usec);
+diff --git a/src/journal/journald-server.c b/src/journal/journald-server.c
+index 1fcb3d5..cd2cfe9 100644
+--- a/src/journal/journald-server.c
++++ b/src/journal/journald-server.c
+@@ -158,9 +158,18 @@ static uint64_t available_space(Server *s, bool verbose) {
+         }
+ 
+         ss_avail = ss.f_bsize * ss.f_bavail;
+-        avail = ss_avail > m->keep_free ? ss_avail - m->keep_free : 0;
+ 
+-        s->cached_available_space = MIN(m->max_use, avail) > sum ? MIN(m->max_use, avail) - sum : 0;
++        /* If we reached a high mark, we will always allow this much
++         * again, unless usage goes above max_use. This watermark
++         * value is cached so that we don't give up space on pressure,
++         * but hover below the maximum usage. */
++
++        if (m->use < sum)
++                m->use = sum;
++
++        avail = LESS_BY(ss_avail, m->keep_free);
++
++        s->cached_available_space = LESS_BY(MIN(m->max_use, avail), sum);
+         s->cached_available_space_timestamp = ts;
+ 
+         if (verbose) {
+@@ -168,13 +177,14 @@ static uint64_t available_space(Server *s, bool verbose) {
+                         fb4[FORMAT_BYTES_MAX], fb5[FORMAT_BYTES_MAX];
+ 
+                 server_driver_message(s, SD_MESSAGE_JOURNAL_USAGE,
+-                                      "%s journal is using %s (max %s, leaving %s of free %s, current limit %s).",
++                                      "%s journal is using %s (max allowed %s, "
++                                      "trying to leave %s free of %s available → current limit %s).",
+                                       s->system_journal ? "Permanent" : "Runtime",
+                                       format_bytes(fb1, sizeof(fb1), sum),
+                                       format_bytes(fb2, sizeof(fb2), m->max_use),
+                                       format_bytes(fb3, sizeof(fb3), m->keep_free),
+                                       format_bytes(fb4, sizeof(fb4), ss_avail),
+-                                      format_bytes(fb5, sizeof(fb5), MIN(m->max_use, avail)));
++                                      format_bytes(fb5, sizeof(fb5), s->cached_available_space + sum));
+         }
+ 
+         return s->cached_available_space;
+@@ -378,7 +388,7 @@ void server_vacuum(Server *s) {
+         if (s->system_journal) {
+                 char *p = strappenda("/var/log/journal/", ids);
+ 
+-                r = journal_directory_vacuum(p, s->system_metrics.max_use, s->system_metrics.keep_free, s->max_retention_usec, &s->oldest_file_usec);
++                r = journal_directory_vacuum(p, s->system_metrics.max_use, s->max_retention_usec, &s->oldest_file_usec);
+                 if (r < 0 && r != -ENOENT)
+                         log_error("Failed to vacuum %s: %s", p, strerror(-r));
+         }
+@@ -386,7 +396,7 @@ void server_vacuum(Server *s) {
+         if (s->runtime_journal) {
+                 char *p = strappenda("/run/log/journal/", ids);
+ 
+-                r = journal_directory_vacuum(p, s->runtime_metrics.max_use, s->runtime_metrics.keep_free, s->max_retention_usec, &s->oldest_file_usec);
++                r = journal_directory_vacuum(p, s->runtime_metrics.max_use, s->max_retention_usec, &s->oldest_file_usec);
+                 if (r < 0 && r != -ENOENT)
+                         log_error("Failed to vacuum %s: %s", p, strerror(-r));
+         }
+diff --git a/src/journal/test-journal-interleaving.c b/src/journal/test-journal-interleaving.c
+index 1a058ea..974fa3b 100644
+--- a/src/journal/test-journal-interleaving.c
++++ b/src/journal/test-journal-interleaving.c
+@@ -194,7 +194,7 @@ static void test_skip(void (*setup)(void))
+         if (arg_keep)
+                 log_info("Not removing %s", t);
+         else {
+-                journal_directory_vacuum(".", 3000000, 0, 0, NULL);
++                journal_directory_vacuum(".", 3000000, 0, NULL);
+ 
+                 assert_se(rm_rf_dangerous(t, false, true, false) >= 0);
+         }
+@@ -279,7 +279,7 @@ static void test_sequence_numbers(void) {
+         if (arg_keep)
+                 log_info("Not removing %s", t);
+         else {
+-                journal_directory_vacuum(".", 3000000, 0, 0, NULL);
++                journal_directory_vacuum(".", 3000000, 0, NULL);
+ 
+                 assert_se(rm_rf_dangerous(t, false, true, false) >= 0);
+         }
+diff --git a/src/journal/test-journal.c b/src/journal/test-journal.c
+index 190c426..3b8778d 100644
+--- a/src/journal/test-journal.c
++++ b/src/journal/test-journal.c
+@@ -126,7 +126,7 @@ static void test_non_empty(void) {
+         if (arg_keep)
+                 log_info("Not removing %s", t);
+         else {
+-                journal_directory_vacuum(".", 3000000, 0, 0, NULL);
++                journal_directory_vacuum(".", 3000000, 0, NULL);
+ 
+                 assert_se(rm_rf_dangerous(t, false, true, false) >= 0);
+         }
+@@ -165,7 +165,7 @@ static void test_empty(void) {
+         if (arg_keep)
+                 log_info("Not removing %s", t);
+         else {
+-                journal_directory_vacuum(".", 3000000, 0, 0, NULL);
++                journal_directory_vacuum(".", 3000000, 0, NULL);
+ 
+                 assert_se(rm_rf_dangerous(t, false, true, false) >= 0);
+         }
+diff --git a/src/shared/macro.h b/src/shared/macro.h
+index d4f92b6..bc5b3c1 100644
+--- a/src/shared/macro.h
++++ b/src/shared/macro.h
+@@ -114,6 +114,13 @@ static inline size_t ALIGN_TO(size_t l, size_t ali) {
+                         _a < _b ? _a : _b;      \
+                 })
+ 
++#define LESS_BY(A,B)                            \
++        __extension__ ({                        \
++                        typeof(A) _A = (A);     \
++                        typeof(B) _B = (B);     \
++                        _A > _B ? _A - _B : 0;  \
++                })
++
+ #ifndef CLAMP
+ #define CLAMP(x, low, high)                                             \
+         __extension__ ({                                                \
diff --git a/0237-man-add-busctl-1.patch b/0237-man-add-busctl-1.patch
new file mode 100644
index 0000000..208c839
--- /dev/null
+++ b/0237-man-add-busctl-1.patch
@@ -0,0 +1,239 @@
+From 7cfdb4b03c310e9bb55609a98eb70356e4c50148 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Sat, 11 Jan 2014 23:44:34 -0500
+Subject: [PATCH] man: add busctl(1)
+
+Conflicts:
+	Makefile-man.am
+	TODO
+	man/systemd-bus-proxyd.xml
+---
+ Makefile-man.am |   1 +
+ man/busctl.xml  | 206 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 207 insertions(+)
+ create mode 100644 man/busctl.xml
+
+diff --git a/Makefile-man.am b/Makefile-man.am
+index 3f626e8..9c3cb35 100644
+--- a/Makefile-man.am
++++ b/Makefile-man.am
+@@ -3,6 +3,7 @@
+ 
+ MANPAGES += \
+ 	man/bootup.7 \
++	man/busctl.1 \
+ 	man/daemon.7 \
+ 	man/halt.8 \
+ 	man/hostname.5 \
+diff --git a/man/busctl.xml b/man/busctl.xml
+new file mode 100644
+index 0000000..0c5f05a
+--- /dev/null
++++ b/man/busctl.xml
+@@ -0,0 +1,206 @@
++<?xml version='1.0'?> <!--*-nxml-*-->
++<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
++"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
++
++<!--
++This file is part of systemd.
++
++Copyright 2014 Zbigniew Jędrzejewski-Szmek
++
++systemd is free software; you can redistribute it and/or modify it
++under the terms of the GNU Lesser General Public License as published by
++the Free Software Foundation; either version 2.1 of the License, or
++(at your option) any later version.
++
++systemd is distributed in the hope that it will be useful, but
++WITHOUT ANY WARRANTY; without even the implied warranty of
++MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++Lesser General Public License for more details.
++
++You should have received a copy of the GNU Lesser General Public License
++along with systemd; If not, see <http://www.gnu.org/licenses/>.
++-->
++
++<refentry id="busctl">
++
++  <refentryinfo>
++    <title>busctl</title>
++    <productname>systemd</productname>
++
++    <authorgroup>
++      <author>
++        <contrib>A monkey with a typewriter</contrib>
++        <firstname>Zbigniew</firstname>
++        <surname>Jędrzejewski-Szmek</surname>
++        <email>zbyszek at in.waw.pl</email>
++      </author>
++    </authorgroup>
++  </refentryinfo>
++
++  <refmeta>
++    <refentrytitle>busctl</refentrytitle>
++    <manvolnum>1</manvolnum>
++  </refmeta>
++
++  <refnamediv>
++    <refname>busctl</refname>
++    <refpurpose>Introspect the bus</refpurpose>
++  </refnamediv>
++
++  <refsynopsisdiv>
++    <cmdsynopsis>
++      <command>busctl</command>
++      <arg choice="opt" rep="repeat">OPTIONS</arg>
++      <arg choice="opt">COMMAND</arg>
++      <arg choice="opt" rep="repeat"><replaceable>NAME</replaceable></arg>
++    </cmdsynopsis>
++  </refsynopsisdiv>
++
++  <refsect1>
++    <title>Description</title>
++
++    <para><command>busctl</command> may be used to
++    introspect and monitor the D-Bus bus.</para>
++  </refsect1>
++
++  <refsect1>
++    <title>Options</title>
++
++    <para>The following options are understood:</para>
++
++    <variablelist>
++      <varlistentry>
++        <term><option>-h</option></term>
++        <term><option>--help</option></term>
++
++        <listitem><para>Print a short help text and exit.
++        </para></listitem>
++      </varlistentry>
++
++      <varlistentry>
++        <term><option>--version</option></term>
++
++        <listitem>
++          <para>Print a short version string and exit.</para>
++        </listitem>
++      </varlistentry>
++
++      <varlistentry>
++        <term><option>--no-pager</option></term>
++
++        <listitem>
++          <para>Do not pipe output into a pager.</para>
++        </listitem>
++      </varlistentry>
++
++      <varlistentry>
++        <term><option>--system</option></term>
++
++        <listitem>
++          <para>Talk to the systemd system manager (the
++          default).</para>
++        </listitem>
++      </varlistentry>
++
++      <varlistentry>
++        <term><option>--user</option></term>
++
++        <listitem>
++          <para>Talk to the systemd manager of the calling
++          user.</para>
++        </listitem>
++      </varlistentry>
++
++      <varlistentry>
++          <term><option>--address=<replaceable>ADDRESS</replaceable></option></term>
++
++          <listitem><para>Connect to the bus specified by
++          <replaceable>ADDRESS</replaceable> instead of using suitable
++          defaults for either the system or user bus (see
++          <option>--system</option> and <option>--user</option>
++          options).</para></listitem>
++      </varlistentry>
++
++      <varlistentry>
++          <term><option>--show-machine</option></term>
++
++          <listitem><para>When showing the list of endpoints, show a
++          column containing the names of containers they belong to.
++          See
++          <citerefentry><refentrytitle>systemd-machined.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>.
++          </para></listitem>
++      </varlistentry>
++
++      <varlistentry>
++          <term><option>--unique</option></term>
++
++          <listitem><para>When showing the list of endpoints, show
++          only "unique" names (of the form
++          <literal>:<replaceable>number</replaceable>.<replaceable>number</replaceable></literal>).
++          </para></listitem>
++      </varlistentry>
++
++      <varlistentry>
++          <term><option>--acquired</option></term>
++
++          <listitem><para>The opposite of <option>--unique</option> —
++          only "well-known" names will be shown.</para></listitem>
++      </varlistentry>
++
++      <varlistentry>
++          <term><option>--activatable</option></term>
++
++          <listitem><para>When showing the list of endpoints, show
++          only endpoints which haven't actually been activated yet,
++          but may be started automatically if accessed.</para>
++          </listitem>
++      </varlistentry>
++
++      <varlistentry>
++          <term><option>--match=<replaceable>MATCH</replaceable></option></term>
++
++          <listitem><para>When showing messages being exchanged, show only the
++          subset matching <replaceable>MATCH</replaceable>.</para></listitem>
++          <!-- TODO: link to sd_bus_add_match when it is written? -->
++      </varlistentry>
++    </variablelist>
++  </refsect1>
++
++  <refsect1>
++    <title>Commands</title>
++
++    <para>The following commands are understood:</para>
++
++    <variablelist>
++      <varlistentry>
++        <term><command>list</command></term>
++
++        <listitem><para>Show endpoints attached to the bus. This is
++        the default if no command is specified.</para></listitem>
++      </varlistentry>
++
++      <varlistentry>
++        <term><command>monitor</command>  <arg choice="opt" rep="repeat"><replaceable>NAME</replaceable></arg></term>
++
++        <listitem><para>Dump messages being exchanged. If
++        <replaceable>NAME</replaceable> is specified, show messages
++        to or from this endpoint. Otherwsise, show all messages on the
++        bus.</para></listitem>
++      </varlistentry>
++    </variablelist>
++  </refsect1>
++
++  <refsect1>
++    <title>See Also</title>
++
++    <para>
++      <citerefentry><refentrytitle>dbus-daemon</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
++      <ulink url="http://freedesktop.org/wiki/Software/dbus">D-Bus</ulink>,
++      <ulink url="https://code.google.com/p/d-bus/">kdbus</ulink>,
++      <citerefentry><refentrytitle>sd-bus</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
++      <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
++      <citerefentry><refentrytitle>systemd-bus-proxyd</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
++      <citerefentry><refentrytitle>machinectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>
++    </para>
++  </refsect1>
++</refentry>
diff --git a/kernel-install-grubby.patch b/kernel-install-grubby.patch
index 717c484..481859d 100644
--- a/kernel-install-grubby.patch
+++ b/kernel-install-grubby.patch
@@ -1,6 +1,6 @@
-From dd33348393551411885397ff7d88a3a908eeb018 Mon Sep 17 00:00:00 2001
+From 0fe97bc02e3108efdb844feb1b367a89ba995d83 Mon Sep 17 00:00:00 2001
 From: Harald Hoyer <harald at redhat.com>
-Date: Wed, 13 Mar 2013 07:57:53 +0100
+Date: Tue, 14 Jan 2014 17:48:08 -0500
 Subject: [PATCH] kernel-install: add fedora specific callouts to
  new-kernel-pkg
 
@@ -9,7 +9,7 @@ Subject: [PATCH] kernel-install: add fedora specific callouts to
  1 file changed, 21 insertions(+)
 
 diff --git a/src/kernel-install/kernel-install b/src/kernel-install/kernel-install
-index fb2ee57..31e988a 100644
+index 3ae1d77..3a2ac56 100644
 --- a/src/kernel-install/kernel-install
 +++ b/src/kernel-install/kernel-install
 @@ -19,6 +19,27 @@
@@ -39,7 +39,4 @@ index fb2ee57..31e988a 100644
 +
  usage()
  {
-     echo "Usage:" >&2
--- 
-1.8.3.1
-
+     echo "Usage:"
diff --git a/systemd.spec b/systemd.spec
index 9f9edf6..bb52ff5 100644
--- a/systemd.spec
+++ b/systemd.spec
@@ -16,7 +16,7 @@
 Name:           systemd
 Url:            http://www.freedesktop.org/wiki/Software/systemd
 Version:        208
-Release:        10%{?gitcommit:.git%{gitcommit}}%{?dist}
+Release:        11%{?gitcommit:.git%{gitcommit}}%{?dist}
 # For a breakdown of the licensing, see README
 License:        LGPLv2+ and MIT and GPLv2+
 Summary:        A System and Service Manager
@@ -97,7 +97,7 @@ Patch057:       0057-libudev-default-log_priority-to-INFO.patch
 Patch058:       0058-nspawn-only-pass-in-slice-setting-if-it-is-set.patch
 Patch059:       0059-zsh-completion-add-systemd-run.patch
 Patch060:       0060-man-explain-NAME-in-systemctl-man-page.patch
-#Patch061:       0061-virt-move-caching-of-virtualization-check-results-in.patch
+Patch061:       0061-virt-move-caching-of-virtualization-check-results-in.patch
 Patch062:       0062-systemctl-fix-typo-in-help-text.patch
 Patch063:       0063-analyze-plot-place-the-text-on-the-side-with-most-sp.patch
 Patch064:       0064-detect_virtualization-returns-NULL-pass-empty-string.patch
@@ -129,8 +129,8 @@ Patch089:       0089-timer-properly-format-relative-timestamps-in-the-fut.patch
 Patch090:       0090-timer-consider-usec_t-1-an-invalid-timestamp.patch
 Patch091:       0091-udev-usb_id-remove-obsoleted-bInterfaceSubClass-5-ma.patch
 Patch092:       0092-Add-support-for-saving-restoring-keyboard-backlights.patch
-#Patch093:       0093-static-nodes-don-t-call-mkdir.patch
-#Patch094:       0094-Fix-kmod-error-message-to-have-correct-version-requi.patch
+Patch093:       0093-static-nodes-don-t-call-mkdir.patch
+Patch094:       0094-Fix-kmod-error-message-to-have-correct-version-requi.patch
 Patch095:       0095-systemd-python-fix-booted-and-add-two-functions-to-d.patch
 Patch096:       0096-activate-mention-E-in-the-help-text.patch
 Patch097:       0097-activate-fix-crash-when-s-is-passed.patch
@@ -152,13 +152,13 @@ Patch112:       0112-tmpfiles-adjust-excludes-for-the-new-per-service-pri.patch
 Patch113:       0113-core-socket-fix-SO_REUSEPORT.patch
 Patch114:       0114-localed-match-converted-keymaps-before-legacy.patch
 Patch115:       0115-keymap-Add-Toshiba-Satellite-U940.patch
-#Patch116:       0116-calendar-support-yearly-and-annually-names-the-same-.patch
-#Patch117:       0117-hashmap-be-a-bit-more-conservative-with-pre-allocati.patch
-#Patch118:       0118-manager-don-t-do-plymouth-in-a-container.patch
-#Patch119:       0119-nspawn-add-new-drop-capability-switch.patch
-#Patch120:       0120-valgrind-make-running-PID-1-in-valgrind-useful.patch
-#Patch121:       0121-efi-boot-generator-don-t-mount-boot-eagerly.patch
-#Patch122:       0122-hwdb-Update-database-of-Bluetooth-company-identifier.patch
+Patch116:       0116-calendar-support-yearly-and-annually-names-the-same-.patch
+Patch117:       0117-hashmap-be-a-bit-more-conservative-with-pre-allocati.patch
+Patch118:       0118-manager-don-t-do-plymouth-in-a-container.patch
+Patch119:       0119-nspawn-add-new-drop-capability-switch.patch
+Patch120:       0120-valgrind-make-running-PID-1-in-valgrind-useful.patch
+Patch121:       0121-efi-boot-generator-don-t-mount-boot-eagerly.patch
+Patch122:       0122-hwdb-Update-database-of-Bluetooth-company-identifier.patch
 Patch123:       0123-journal-when-appending-to-journal-file-allocate-larg.patch
 Patch124:       0124-journal-make-table-const.patch
 Patch125:       0125-journald-keep-statistics-on-how-of-we-hit-miss-the-m.patch
@@ -167,16 +167,113 @@ Patch127:       0127-journal-fix-iteration-when-we-go-backwards-from-the-.patch
 Patch128:       0128-journal-allow-journal_file_copy_entry-to-work-on-non.patch
 Patch129:       0129-journal-simplify-pre-allocation-logic.patch
 Patch130:       0130-journald-mention-how-long-we-needed-to-flush-to-var-.patch
-#Patch131:       0131-automount-log-info-about-triggering-process.patch
-#Patch132:       0132-virt-split-detect_vm-into-separate-functions.patch
-#Patch133:       0133-hwdb-Update-database-of-Bluetooth-company-identifier.patch
-#Patch134:       0134-sysfs-show.c-return-negative-error.patch
-#Patch135:       0135-util.c-check-if-return-value-from-ttyname_r-is-0-ins.patch
-#Patch136:       0136-docs-remove-unneeded-the-s-in-gudev-docs.patch
-#Patch137:       0137-man-explicitly-say-when-multiple-units-can-be-specif.patch
-#Patch138:       0138-systemd-treat-reload-failure-as-failure.patch
-#Patch139:       0139-journal-fail-silently-in-sd_j_sendv-if-journal-is-un.patch
-Patch140:       0141-core-device-ignore-SYSTEMD_WANTS-in-user-mode.patch
+Patch131:       0131-automount-log-info-about-triggering-process.patch
+Patch132:       0132-virt-split-detect_vm-into-separate-functions.patch
+Patch133:       0133-hwdb-Update-database-of-Bluetooth-company-identifier.patch
+Patch134:       0134-sysfs-show.c-return-negative-error.patch
+Patch135:       0135-util.c-check-if-return-value-from-ttyname_r-is-0-ins.patch
+Patch136:       0136-docs-remove-unneeded-the-s-in-gudev-docs.patch
+Patch137:       0137-man-explicitly-say-when-multiple-units-can-be-specif.patch
+Patch138:       0138-systemd-treat-reload-failure-as-failure.patch
+Patch139:       0139-journal-fail-silently-in-sd_j_sendv-if-journal-is-un.patch
+Patch140:       0140-systemd-add-a-start-job-for-all-units-specified-with.patch
+Patch141:       0141-core-device-ignore-SYSTEMD_WANTS-in-user-mode.patch
+Patch142:       0142-Fix-memory-leak-in-stdout-journal-streams.patch
+Patch143:       0143-man-document-is-enabled-output.patch
+Patch144:       0144-hostnamed-avoid-using-NULL-in-error-path.patch
+Patch145:       0145-logind-use-correct-who-enum-values-with-KillUnit.patch
+Patch146:       0146-Revert-systemd-add-a-start-job-for-all-units-specifi.patch
+Patch147:       0147-core-do-not-segfault-if-swap-activity-happens-when-p.patch
+Patch148:       0148-kernel-install-add-h-help.patch
+Patch149:       0149-kernel-install-fix-help-output.patch
+Patch150:       0150-man-improve-wording-and-comma-usage-in-systemd.journ.patch
+Patch151:       0151-drop-several-entries-from-kbd-model-map-whose-kbd-la.patch
+Patch152:       0152-correct-name-of-Tajik-kbd-layout-in-kbd-model-map.patch
+Patch153:       0153-hwdb-Update-database-of-Bluetooth-company-identifier.patch
+Patch154:       0154-Ensure-unit-is-journaled-for-short-lived-or-oneshot-.patch
+Patch155:       0155-libudev-hwdb-use-libudev-not-systemd-logging.patch
+Patch156:       0156-core-manager-remove-infinite-loop.patch
+Patch157:       0157-util-check-for-overflow-in-greedy_realloc.patch
+Patch158:       0158-journald-use-a-bit-more-cleanup-magic.patch
+Patch159:       0159-journald-malloc-less-when-streaming-messages.patch
+Patch160:       0160-activate-clean-up-inherited-descriptors.patch
+Patch161:       0161-man-explain-in-more-detail-how-SYSTEMD_READY-influen.patch
+Patch162:       0162-units-don-t-run-readahead-done-timers-in-containers.patch
+Patch163:       0163-test-fileio-replace-mktemp-with-mkstemp-to-avoid-war.patch
+Patch164:       0164-journal-pipe-journalctl-help-output-into-a-pager.patch
+Patch165:       0165-nspawn-complain-and-continue-if-machine-has-same-id.patch
+Patch166:       0166-man-beef-up-ExecStart-description.patch
+Patch167:       0167-man-remove-advice-to-avoid-setting-the-same-var-more.patch
+Patch168:       0168-systemctl-add-the-plain-option-to-the-help-message.patch
+Patch169:       0169-Fix-a-few-resource-leaks-in-error-paths.patch
+Patch170:       0170-Fix-a-few-signed-unsigned-format-string-issues.patch
+Patch171:       0171-util-try-harder-to-increase-the-send-recv-buffers-of.patch
+Patch172:       0172-execute-also-set-SO_SNDBUF-when-spawning-a-service-w.patch
+Patch173:       0173-journal-file-protect-against-alloca-0.patch
+Patch174:       0174-man-describe-journalctl-show-cursor.patch
+Patch175:       0175-journal-fix-against-theoretical-undefined-behavior.patch
+Patch176:       0176-journald-downgrade-warning-message-when-dev-kmsg-doe.patch
+Patch177:       0177-journal-file.c-remove-redundant-assignment-of-variab.patch
+Patch178:       0178-login-Don-t-stop-a-running-user-manager-from-garbage.patch
+Patch179:       0179-libudev-devices-received-from-udev-are-always-initia.patch
+Patch180:       0180-log-don-t-reopen-dev-console-each-time-we-call-log_o.patch
+Patch181:       0181-log-when-we-log-to-dev-console-and-got-disconnected-.patch
+Patch182:       0182-loginctl-when-showing-device-tree-of-seats-with-no-d.patch
+Patch183:       0183-man-be-more-explicit-about-option-arguments-that-tak.patch
+Patch184:       0184-man-add-DOI-for-refereed-article-on-Forward-Secure-S.patch
+Patch185:       0185-journalctl-zsh-completion-fix-several-issues-in-help.patch
+Patch186:       0186-keymap-Refactor-Acer-tables.patch
+Patch187:       0187-logging-reduce-send-timeout-to-something-more-sensib.patch
+Patch188:       0188-DEFAULT_PATH_SPLIT_USR-macro.patch
+Patch189:       0189-fstab-generator-Do-not-try-to-fsck-non-devices.patch
+Patch190:       0190-logind-remove-dead-variable.patch
+Patch191:       0191-hwdb-update.patch
+Patch192:       0192-delta-replace-readdir_r-with-readdir.patch
+Patch193:       0193-delta-fix-delta-for-drop-ins.patch
+Patch194:       0194-delta-if-prefix-is-specified-only-show-overrides-the.patch
+Patch195:       0195-log-log_error-and-friends-add-a-newline-after-each-l.patch
+Patch196:       0196-man-units-tmpfiles.d-5-cleanup.patch
+Patch197:       0197-tmpfiles-introduce-the-concept-of-unsafe-operations.patch
+Patch198:       0198-sleep-config-fix-useless-check-for-swapfile-type.patch
+Patch199:       0199-journalctl-make-sure-b-foobar-cannot-be-misunderstoo.patch
+Patch200:       0200-man-resolve-word-omissions.patch
+Patch201:       0201-man-improvements-to-comma-placement.patch
+Patch202:       0202-man-grammar-and-wording-improvements.patch
+Patch203:       0203-man-document-fail-nofail-auto-noauto.patch
+Patch204:       0204-man-fix-description-of-is-enabled-returned-value.patch
+Patch205:       0205-man-fix-Type-reference.patch
+Patch206:       0206-man-fix-Type-reference-v2.patch
+Patch207:       0207-hwdb-Update-database-of-Bluetooth-company-identifier.patch
+Patch208:       0208-man-add-a-note-about-propagating-signals.patch
+Patch209:       0209-man-include-autoconf-snippet-in-daemon-7.patch
+Patch210:       0210-systemd-python-fix-setting-of-exception-codes.patch
+Patch211:       0211-systemd-python-fix-listen_fds-under-Python-2.patch
+Patch212:       0212-man-expand-on-some-more-subtle-points-in-systemd.soc.patch
+Patch213:       0213-tmpfiles-rename-unsafe-to-boot.patch
+Patch214:       0214-sleep-config-Dereference-pointer-before-check-for-NU.patch
+Patch215:       0215-sleep-config-fix-double-free.patch
+Patch216:       0216-rules-drivers-do-not-reset-RUN-list.patch
+Patch217:       0217-core-manager-print-info-about-interesting-signals.patch
+Patch218:       0218-core-service-check-if-mainpid-matches-only-if-it-is-.patch
+Patch219:       0219-man-typo-fix.patch
+Patch220:       0220-swap-remove-if-else-with-the-same-data-path.patch
+Patch221:       0221-hwdb-update.patch
+Patch222:       0222-journal-Add-missing-byte-order-conversions.patch
+Patch223:       0223-hwdb-change-key-mappings-for-Samsung-90X3A.patch
+Patch224:       0224-hwdb-add-Samsung-700G.patch
+Patch225:       0225-hwdb-remove-duplicate-entry-for-Samsung-700Z.patch
+Patch226:       0226-hwdb-fix-match-for-Thinkpad-X201-tablet.patch
+Patch227:       0227-keymap-Recognize-different-Toshiba-Satellite-capital.patch
+Patch228:       0228-sleep.c-fix-typo.patch
+Patch229:       0229-delta-ensure-that-d_type-will-be-set-on-every-fs.patch
+Patch230:       0230-tmpfiles-don-t-allow-label_fix-to-print-ENOENT-when-.patch
+Patch231:       0231-man-mention-which-variables-will-be-expanded-in-Exec.patch
+Patch232:       0232-hwdb-Add-support-for-Toshiba-Satellite-P75-A7200-key.patch
+Patch233:       0233-journal-fix-access-to-munmapped-memory-in-sd_journal.patch
+Patch234:       0234-gpt-auto-generator-skip-nonexistent-devices.patch
+Patch235:       0235-gpt-auto-generator-use-EBADSLT-code-when-unable-to-d.patch
+Patch236:       0236-journald-do-not-free-space-when-disk-space-runs-low.patch
+Patch237:       0237-man-add-busctl-1.patch
 
 # kernel-install patch for grubby, drop if grubby is obsolete
 Patch1000:      kernel-install-grubby.patch
@@ -224,7 +321,7 @@ Requires(pre):  /usr/bin/getent
 Requires(pre):  /usr/sbin/groupadd
 Requires:       dbus
 Requires:       %{name}-libs = %{version}-%{release}
-Requires:       kmod >= 14
+Requires:       kmod >= 15
 Requires:       diffutils
 Provides:       /bin/systemctl
 Provides:       /sbin/shutdown
@@ -705,6 +802,7 @@ getent passwd systemd-journal-gateway >/dev/null 2>&1 || useradd -r -l -u 191 -g
 %{_prefix}/lib/systemd/system-generators/systemd-efi-boot-generator
 %{_prefix}/lib/systemd/system-generators/systemd-gpt-auto-generator
 %{_prefix}/lib/tmpfiles.d/systemd.conf
+%{_prefix}/lib/tmpfiles.d/systemd-nologin.conf
 %{_prefix}/lib/tmpfiles.d/x11.conf
 %{_prefix}/lib/tmpfiles.d/legacy.conf
 %{_prefix}/lib/tmpfiles.d/tmp.conf
@@ -828,6 +926,11 @@ getent passwd systemd-journal-gateway >/dev/null 2>&1 || useradd -r -l -u 191 -g
 %{_datadir}/systemd/gatewayd
 
 %changelog
+* Tue Dec 03 2013 Zbigniew Jędrzejewski-Szmek <zbyszek at in.waw.pl> - 208-11
+- Backport a few fixes, relevant documentation updates, and HWDB changes
+  (#1051797, #1051768, #1047335, #1047304, #1047186, #1045849, #1043304,
+   #1043212, #1039351, #1031325, #1023820, #1017509, #953077)
+
 * Tue Dec 03 2013 Zbigniew Jędrzejewski-Szmek <zbyszek at in.waw.pl> - 208-10
 - Remove patch for #1026860 now that LVM rules have been updated
 


More information about the scm-commits mailing list