diff --git a/0001-time-util-map-ALARM-clockids-to-non-ALARM-clockids-i.patch b/0001-time-util-map-ALARM-clockids-to-non-ALARM-clockids-i.patch
deleted file mode 100644
index 2b8fe9b..0000000
--- a/0001-time-util-map-ALARM-clockids-to-non-ALARM-clockids-i.patch
+++ /dev/null
@@ -1,76 +0,0 @@
-From d15dd311752fcafa92d2e6a00c582020dc0f6ac3 Mon Sep 17 00:00:00 2001
-From: Lennart Poettering <lennart@poettering.net>
-Date: Fri, 12 Feb 2016 21:29:01 +0100
-Subject: [PATCH] time-util: map ALARM clockids to non-ALARM clockids in now()
-
-Fixes: #2597
-(cherry picked from commit 32c1f5a57998f2a9e1992af006b83e39e3155830)
----
- src/basic/time-util.c              | 24 ++++++++++++++++++++++--
- src/libsystemd/sd-event/sd-event.c |  6 +++++-
- 2 files changed, 27 insertions(+), 3 deletions(-)
-
-diff --git a/src/basic/time-util.c b/src/basic/time-util.c
-index 3973850b44..510f018d9b 100644
---- a/src/basic/time-util.c
-+++ b/src/basic/time-util.c
-@@ -42,10 +42,30 @@
- 
- static nsec_t timespec_load_nsec(const struct timespec *ts);
- 
-+static clockid_t map_clock_id(clockid_t c) {
-+
-+        /* Some more exotic archs (s390, ppc, …) lack the "ALARM" flavour of the clocks. Thus, clock_gettime() will
-+         * fail for them. Since they are essentially the same as their non-ALARM pendants (their only difference is
-+         * when timers are set on them), let's just map them accordingly. This way, we can get the correct time even on
-+         * those archs. */
-+
-+        switch (c) {
-+
-+        case CLOCK_BOOTTIME_ALARM:
-+                return CLOCK_BOOTTIME;
-+
-+        case CLOCK_REALTIME_ALARM:
-+                return CLOCK_REALTIME;
-+
-+        default:
-+                return c;
-+        }
-+}
-+
- usec_t now(clockid_t clock_id) {
-         struct timespec ts;
- 
--        assert_se(clock_gettime(clock_id, &ts) == 0);
-+        assert_se(clock_gettime(map_clock_id(clock_id), &ts) == 0);
- 
-         return timespec_load(&ts);
- }
-@@ -53,7 +73,7 @@ usec_t now(clockid_t clock_id) {
- nsec_t now_nsec(clockid_t clock_id) {
-         struct timespec ts;
- 
--        assert_se(clock_gettime(clock_id, &ts) == 0);
-+        assert_se(clock_gettime(map_clock_id(clock_id), &ts) == 0);
- 
-         return timespec_load_nsec(&ts);
- }
-diff --git a/src/libsystemd/sd-event/sd-event.c b/src/libsystemd/sd-event/sd-event.c
-index deef6ba9d3..2b46a1ff06 100644
---- a/src/libsystemd/sd-event/sd-event.c
-+++ b/src/libsystemd/sd-event/sd-event.c
-@@ -2780,9 +2780,13 @@ _public_ int sd_event_now(sd_event *e, clockid_t clock, uint64_t *usec) {
-                 *usec = e->timestamp.monotonic;
-                 break;
- 
--        default:
-+        case CLOCK_BOOTTIME:
-+        case CLOCK_BOOTTIME_ALARM:
-                 *usec = e->timestamp_boottime;
-                 break;
-+
-+        default:
-+                assert_not_reached("Unknown clock?");
-         }
- 
-         return 0;
diff --git a/0002-core-fix-indenting-in-dump-output.patch b/0002-core-fix-indenting-in-dump-output.patch
deleted file mode 100644
index 42070f4..0000000
--- a/0002-core-fix-indenting-in-dump-output.patch
+++ /dev/null
@@ -1,24 +0,0 @@
-From 3e1d3577dd20a49d6eb5007c65b4efb7862df903 Mon Sep 17 00:00:00 2001
-From: Lennart Poettering <lennart@poettering.net>
-Date: Fri, 12 Feb 2016 21:33:39 +0100
-Subject: [PATCH] core: fix indenting in dump output
-
-Fixes: #2593
-(cherry picked from commit b895d15511526b7046c8c51e6689684144a63ae0)
----
- src/core/unit.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/core/unit.c b/src/core/unit.c
-index d39e3dcaeb..3c4f85e744 100644
---- a/src/core/unit.c
-+++ b/src/core/unit.c
-@@ -888,7 +888,7 @@ void unit_dump(Unit *u, FILE *f, const char *prefix) {
-                 "%s\tInstance: %s\n"
-                 "%s\tUnit Load State: %s\n"
-                 "%s\tUnit Active State: %s\n"
--                "%s\nState Change Timestamp: %s\n"
-+                "%s\tState Change Timestamp: %s\n"
-                 "%s\tInactive Exit Timestamp: %s\n"
-                 "%s\tActive Enter Timestamp: %s\n"
-                 "%s\tActive Exit Timestamp: %s\n"
diff --git a/0003-networkd-FIONREAD-is-not-reliable-on-some-sockets.patch b/0003-networkd-FIONREAD-is-not-reliable-on-some-sockets.patch
deleted file mode 100644
index b2aec3f..0000000
--- a/0003-networkd-FIONREAD-is-not-reliable-on-some-sockets.patch
+++ /dev/null
@@ -1,238 +0,0 @@
-From 66a35872a2429a095f8cdfd5b00f94d0b28daa0f Mon Sep 17 00:00:00 2001
-From: Lennart Poettering <lennart@poettering.net>
-Date: Mon, 15 Feb 2016 22:50:01 +0100
-Subject: [PATCH] networkd: FIONREAD is not reliable on some sockets
-
-Fixes: #2457
-(cherry picked from commit 4edc2c9b6b5b921873eb82e58719ed4d9e0d69bf)
----
- src/basic/socket-util.c                  | 34 ++++++++++++++++++++++++++++++++
- src/basic/socket-util.h                  |  2 ++
- src/libsystemd-network/sd-dhcp-client.c  | 23 +++++++++------------
- src/libsystemd-network/sd-dhcp-server.c  |  9 ++++-----
- src/libsystemd-network/sd-dhcp6-client.c | 13 ++++++------
- src/libsystemd-network/sd-ndisc.c        | 13 +++++-------
- src/resolve/resolved-manager.c           | 10 ++++------
- 7 files changed, 64 insertions(+), 40 deletions(-)
-
-diff --git a/src/basic/socket-util.c b/src/basic/socket-util.c
-index 49e5f5b125..58512686e3 100644
---- a/src/basic/socket-util.c
-+++ b/src/basic/socket-util.c
-@@ -936,3 +936,37 @@ int receive_one_fd(int transport_fd, int flags) {
- 
-         return *(int*) CMSG_DATA(found);
- }
-+
-+ssize_t next_datagram_size_fd(int fd) {
-+        ssize_t l;
-+        int k;
-+
-+        /* This is a bit like FIONREAD/SIOCINQ, however a bit more powerful. The difference being: recv(MSG_PEEK) will
-+         * actually cause the next datagram in the queue to be validated regarding checksums, which FIONREAD dosn't
-+         * do. This difference is actually of major importance as we need to be sure that the size returned here
-+         * actually matches what we will read with recvmsg() next, as otherwise we might end up allocating a buffer of
-+         * the wrong size. */
-+
-+        l = recv(fd, NULL, 0, MSG_PEEK|MSG_TRUNC);
-+        if (l < 0) {
-+                if (errno == EOPNOTSUPP)
-+                        goto fallback;
-+
-+                return -errno;
-+        }
-+        if (l == 0)
-+                goto fallback;
-+
-+        return l;
-+
-+fallback:
-+        k = 0;
-+
-+        /* Some sockets (AF_PACKET) do not support null-sized recv() with MSG_TRUNC set, let's fall back to FIONREAD
-+         * for them. Checksums don't matter for raw sockets anyway, hence this should be fine. */
-+
-+        if (ioctl(fd, FIONREAD, &k) < 0)
-+                return -errno;
-+
-+        return (ssize_t) k;
-+}
-diff --git a/src/basic/socket-util.h b/src/basic/socket-util.h
-index 92edc1dc22..d17a2f35f8 100644
---- a/src/basic/socket-util.h
-+++ b/src/basic/socket-util.h
-@@ -133,5 +133,7 @@ int send_one_fd_sa(int transport_fd,
- #define send_one_fd(transport_fd, fd, flags) send_one_fd_sa(transport_fd, fd, NULL, 0, flags)
- int receive_one_fd(int transport_fd, int flags);
- 
-+ssize_t next_datagram_size_fd(int fd);
-+
- #define CMSG_FOREACH(cmsg, mh)                                          \
-         for ((cmsg) = CMSG_FIRSTHDR(mh); (cmsg); (cmsg) = CMSG_NXTHDR((mh), (cmsg)))
-diff --git a/src/libsystemd-network/sd-dhcp-client.c b/src/libsystemd-network/sd-dhcp-client.c
-index cad1a52c09..729ef880ce 100644
---- a/src/libsystemd-network/sd-dhcp-client.c
-+++ b/src/libsystemd-network/sd-dhcp-client.c
-@@ -1525,20 +1525,17 @@ static int client_receive_message_udp(sd_event_source *s, int fd,
-                                       uint32_t revents, void *userdata) {
-         sd_dhcp_client *client = userdata;
-         _cleanup_free_ DHCPMessage *message = NULL;
--        int buflen = 0, len, r;
-         const struct ether_addr zero_mac = { { 0, 0, 0, 0, 0, 0 } };
-         const struct ether_addr *expected_chaddr = NULL;
-         uint8_t expected_hlen = 0;
-+        ssize_t len, buflen;
- 
-         assert(s);
-         assert(client);
- 
--        r = ioctl(fd, FIONREAD, &buflen);
--        if (r < 0)
--                return -errno;
--        else if (buflen < 0)
--                /* this can't be right */
--                return -EIO;
-+        buflen = next_datagram_size_fd(fd);
-+        if (buflen < 0)
-+                return buflen;
- 
-         message = malloc0(buflen);
-         if (!message)
-@@ -1616,17 +1613,15 @@ static int client_receive_message_raw(sd_event_source *s, int fd,
-         };
-         struct cmsghdr *cmsg;
-         bool checksum = true;
--        int buflen = 0, len, r;
-+        ssize_t buflen, len;
-+        int r;
- 
-         assert(s);
-         assert(client);
- 
--        r = ioctl(fd, FIONREAD, &buflen);
--        if (r < 0)
--                return -errno;
--        else if (buflen < 0)
--                /* this can't be right */
--                return -EIO;
-+        buflen = next_datagram_size_fd(fd);
-+        if (buflen < 0)
-+                return buflen;
- 
-         packet = malloc0(buflen);
-         if (!packet)
-diff --git a/src/libsystemd-network/sd-dhcp-server.c b/src/libsystemd-network/sd-dhcp-server.c
-index ad3a37b722..54ff1a3f28 100644
---- a/src/libsystemd-network/sd-dhcp-server.c
-+++ b/src/libsystemd-network/sd-dhcp-server.c
-@@ -955,14 +955,13 @@ static int server_receive_message(sd_event_source *s, int fd,
-                 .msg_controllen = sizeof(cmsgbuf),
-         };
-         struct cmsghdr *cmsg;
--        int buflen = 0, len;
-+        ssize_t buflen, len;
- 
-         assert(server);
- 
--        if (ioctl(fd, FIONREAD, &buflen) < 0)
--                return -errno;
--        else if (buflen < 0)
--                return -EIO;
-+        buflen = next_datagram_size_fd(fd);
-+        if (buflen < 0)
-+                return buflen;
- 
-         message = malloc(buflen);
-         if (!message)
-diff --git a/src/libsystemd-network/sd-dhcp6-client.c b/src/libsystemd-network/sd-dhcp6-client.c
-index 5b6b9cbcac..7d56d4cc60 100644
---- a/src/libsystemd-network/sd-dhcp6-client.c
-+++ b/src/libsystemd-network/sd-dhcp6-client.c
-@@ -33,6 +33,7 @@
- #include "in-addr-util.h"
- #include "network-internal.h"
- #include "random-util.h"
-+#include "socket-util.h"
- #include "string-table.h"
- #include "util.h"
- 
-@@ -891,18 +892,16 @@ static int client_receive_message(sd_event_source *s, int fd, uint32_t revents,
-         sd_dhcp6_client *client = userdata;
-         DHCP6_CLIENT_DONT_DESTROY(client);
-         _cleanup_free_ DHCP6Message *message = NULL;
--        int r, buflen, len;
-+        ssize_t buflen, len;
-+        int r = 0;
- 
-         assert(s);
-         assert(client);
-         assert(client->event);
- 
--        r = ioctl(fd, FIONREAD, &buflen);
--        if (r < 0)
--                return -errno;
--        else if (buflen < 0)
--                /* This really should not happen */
--                return -EIO;
-+        buflen = next_datagram_size_fd(fd);
-+        if (buflen < 0)
-+                return buflen;
- 
-         message = malloc(buflen);
-         if (!message)
-diff --git a/src/libsystemd-network/sd-ndisc.c b/src/libsystemd-network/sd-ndisc.c
-index 519d2aa36b..bae6a49fe6 100644
---- a/src/libsystemd-network/sd-ndisc.c
-+++ b/src/libsystemd-network/sd-ndisc.c
-@@ -491,19 +491,16 @@ static int ndisc_router_advertisment_recv(sd_event_source *s, int fd, uint32_t r
-         struct cmsghdr *cmsg;
-         struct in6_addr *gw;
-         unsigned lifetime;
--        ssize_t len;
--        int r, pref, stateful, buflen = 0;
-+        ssize_t len, buflen;
-+        int r, pref, stateful;
- 
-         assert(s);
-         assert(nd);
-         assert(nd->event);
- 
--        r = ioctl(fd, FIONREAD, &buflen);
--        if (r < 0)
--                return -errno;
--        else if (buflen < 0)
--                /* This really should not happen */
--                return -EIO;
-+        buflen = next_datagram_size_fd(fd);
-+        if (buflen < 0)
-+                return buflen;
- 
-         iov.iov_len = buflen;
- 
-diff --git a/src/resolve/resolved-manager.c b/src/resolve/resolved-manager.c
-index bf5efe4cfa..7f9073448a 100644
---- a/src/resolve/resolved-manager.c
-+++ b/src/resolve/resolved-manager.c
-@@ -617,18 +617,16 @@ int manager_recv(Manager *m, int fd, DnsProtocol protocol, DnsPacket **ret) {
-         struct msghdr mh = {};
-         struct cmsghdr *cmsg;
-         struct iovec iov;
--        int ms = 0, r;
--        ssize_t l;
-+        ssize_t ms, l;
-+        int r;
- 
-         assert(m);
-         assert(fd >= 0);
-         assert(ret);
- 
--        r = ioctl(fd, FIONREAD, &ms);
--        if (r < 0)
--                return -errno;
-+        ms = next_datagram_size_fd(fd);
-         if (ms < 0)
--                return -EIO;
-+                return ms;
- 
-         r = dns_packet_new(&p, protocol, ms);
-         if (r < 0)
diff --git a/0004-networkd-rework-idle-detection-logic-of-networkd.patch b/0004-networkd-rework-idle-detection-logic-of-networkd.patch
deleted file mode 100644
index 698c2f0..0000000
--- a/0004-networkd-rework-idle-detection-logic-of-networkd.patch
+++ /dev/null
@@ -1,55 +0,0 @@
-From 1b8cc9fb6cac9d5882ab33b79f880d03d1859efb Mon Sep 17 00:00:00 2001
-From: Lennart Poettering <lennart@poettering.net>
-Date: Mon, 15 Feb 2016 19:11:18 +0100
-Subject: [PATCH] networkd: rework idle detection logic of networkd
-
-This patch makes networkd stay around as long as there is more than just a
-loopback interface around, or the loopback device isn't fully probed yet, or
-the loopback device has a .network file attached.
-
-In essence, this means networkd stays around now continously as it should,
-unless it is running in some (container?) environment that really has no
-interface except a loopback device.
-
-Fixes #2577.
-
-(cherry picked from commit 9dc907f9c93636cb63ca90300fa3b8c03812701f)
----
- src/network/networkd-manager.c | 19 ++++++++-----------
- 1 file changed, 8 insertions(+), 11 deletions(-)
-
-diff --git a/src/network/networkd-manager.c b/src/network/networkd-manager.c
-index b527191a5a..b8cb7f875d 100644
---- a/src/network/networkd-manager.c
-+++ b/src/network/networkd-manager.c
-@@ -1091,22 +1091,19 @@ static bool manager_check_idle(void *userdata) {
- 
-         assert(m);
- 
-+        /* Check whether we are idle now. The only case when we decide to be idle is when there's only a loopback
-+         * device around, for which we have no configuration, and which already left the PENDING state. In all other
-+         * cases we are not idle. */
-+
-         HASHMAP_FOREACH(link, m->links, i) {
--                /* we are not woken on udev activity, so let's just wait for the
--                 * pending udev event */
-+                /* We are not woken on udev activity, so let's just wait for the pending udev event */
-                 if (link->state == LINK_STATE_PENDING)
-                         return false;
- 
--                if (!link->network)
--                        continue;
-+                if ((link->flags & IFF_LOOPBACK) == 0)
-+                        return false;
- 
--                /* we are not woken on netork activity, so let's stay around */
--                if (link_lldp_enabled(link) ||
--                    link_ipv4ll_enabled(link) ||
--                    link_dhcp4_server_enabled(link) ||
--                    link_dhcp4_enabled(link) ||
--                    link_dhcp6_enabled(link) ||
--                    link_ipv6_accept_ra_enabled(link))
-+                if (link->network)
-                         return false;
-         }
- 
diff --git a/0005-core-fix-assertion-check.patch b/0005-core-fix-assertion-check.patch
deleted file mode 100644
index 588751e..0000000
--- a/0005-core-fix-assertion-check.patch
+++ /dev/null
@@ -1,24 +0,0 @@
-From 84494c062524f39771cc9363597daa29d5d041b6 Mon Sep 17 00:00:00 2001
-From: Lennart Poettering <lennart@poettering.net>
-Date: Tue, 16 Feb 2016 13:18:36 +0100
-Subject: [PATCH] core: fix assertion check
-
-Fixes: #2632
-(cherry picked from commit 3f51aec8647fe13f4b1e46b2f75ff635403adf91)
----
- src/core/timer.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/core/timer.c b/src/core/timer.c
-index 6f3e6a8db3..3d0bae16e5 100644
---- a/src/core/timer.c
-+++ b/src/core/timer.c
-@@ -334,7 +334,7 @@ static void add_random(Timer *t, usec_t *v) {
-         usec_t add;
- 
-         assert(t);
--        assert(*v);
-+        assert(v);
- 
-         if (t->random_usec == 0)
-                 return;
diff --git a/0006-udev-fix-cg_unified-return-code-checking.patch b/0006-udev-fix-cg_unified-return-code-checking.patch
deleted file mode 100644
index 1153630..0000000
--- a/0006-udev-fix-cg_unified-return-code-checking.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From 19bc96f7cdda48ca331d5cb0060d3a7eaad59a16 Mon Sep 17 00:00:00 2001
-From: Lennart Poettering <lennart@poettering.net>
-Date: Tue, 16 Feb 2016 14:03:47 +0100
-Subject: [PATCH] udev: fix cg_unified() return code checking
-
-Fixes fall-out from 8b3aa503c171acdb9ec63484a8c50e2680d31e79.
-
-Fixes: #2635
-(cherry picked from commit 6d2353394fc33e923d1ab464c8f88df2a5105ffb)
----
- src/udev/udevd.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/udev/udevd.c b/src/udev/udevd.c
-index 2c1c4a967b..bb92f16352 100644
---- a/src/udev/udevd.c
-+++ b/src/udev/udevd.c
-@@ -1715,7 +1715,7 @@ int main(int argc, char *argv[]) {
-                    by PID1. otherwise we are not guaranteed to have a dedicated cgroup */
-                 r = cg_pid_get_path(SYSTEMD_CGROUP_CONTROLLER, 0, &cgroup);
-                 if (r < 0) {
--                        if (r == -ENOENT || r == -ENOEXEC)
-+                        if (r == -ENOENT || r == -ENOMEDIUM)
-                                 log_debug_errno(r, "did not find dedicated cgroup: %m");
-                         else
-                                 log_warning_errno(r, "failed to get cgroup: %m");
diff --git a/0007-core-revert-core-resolve-specifier-in-config_parse_e.patch b/0007-core-revert-core-resolve-specifier-in-config_parse_e.patch
deleted file mode 100644
index a9c1c78..0000000
--- a/0007-core-revert-core-resolve-specifier-in-config_parse_e.patch
+++ /dev/null
@@ -1,54 +0,0 @@
-From 31acc428d9bfa04582ca7c5ec3580ef2b7aed172 Mon Sep 17 00:00:00 2001
-From: Evgeny Vereshchagin <evvers@ya.ru>
-Date: Wed, 17 Feb 2016 22:32:36 +0000
-Subject: [PATCH] core: revert "core: resolve specifier in config_parse_exec()"
-
-This reverts commit cb48dfca6a8bc15d9081651001a16bf51e03838a.
-
-Exec*-settings resolve specifiers twice:
-%%U -> config_parse_exec [cb48dfca6a8] -> %U -> service_spawn -> 0
-
-Fixes #2637
-
-(cherry picked from commit bd1b973fb326e9b7587494fd6108e5ded46e9163)
----
- src/core/load-fragment.c | 11 +----------
- 1 file changed, 1 insertion(+), 10 deletions(-)
-
-diff --git a/src/core/load-fragment.c b/src/core/load-fragment.c
-index b3dec7b8cc..8804b3ac41 100644
---- a/src/core/load-fragment.c
-+++ b/src/core/load-fragment.c
-@@ -574,9 +574,7 @@ int config_parse_exec(
-                 void *data,
-                 void *userdata) {
- 
--        _cleanup_free_ char *cmd = NULL;
-         ExecCommand **e = data;
--        Unit *u = userdata;
-         const char *p;
-         bool semicolon;
-         int r;
-@@ -585,7 +583,6 @@ int config_parse_exec(
-         assert(lvalue);
-         assert(rvalue);
-         assert(e);
--        assert(u);
- 
-         e += ltype;
-         rvalue += strspn(rvalue, WHITESPACE);
-@@ -596,13 +593,7 @@ int config_parse_exec(
-                 return 0;
-         }
- 
--        r = unit_full_printf(u, rvalue, &cmd);
--        if (r < 0) {
--                log_syntax(unit, LOG_ERR, filename, line, r, "Failed to resolve unit specifiers on %s, ignoring: %m", rvalue);
--                return 0;
--        }
--
--        p = cmd;
-+        p = rvalue;
-         do {
-                 _cleanup_free_ char *path = NULL, *firstword = NULL;
-                 bool separate_argv0 = false, ignore = false;
diff --git a/0008-activate-fix-E-option-parsing.patch b/0008-activate-fix-E-option-parsing.patch
deleted file mode 100644
index cba8b41..0000000
--- a/0008-activate-fix-E-option-parsing.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-From 3ea302d20b1c60f469ed7315611d002a0d88f57d Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
-Date: Thu, 18 Feb 2016 21:54:31 -0500
-Subject: [PATCH] activate: fix -E option parsing
-
-Fixes #2658.
-
-(cherry picked from commit b722348d050aa2754cd9f903e8c3ce810c616b06)
----
- src/activate/activate.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/activate/activate.c b/src/activate/activate.c
-index 0db4967edb..4b3d0e5371 100644
---- a/src/activate/activate.c
-+++ b/src/activate/activate.c
-@@ -379,7 +379,7 @@ static int parse_argv(int argc, char *argv[]) {
-         assert(argc >= 0);
-         assert(argv);
- 
--        while ((c = getopt_long(argc, argv, "+hl:aEd", options, NULL)) >= 0)
-+        while ((c = getopt_long(argc, argv, "+hl:aE:d", options, NULL)) >= 0)
-                 switch(c) {
-                 case 'h':
-                         help();
diff --git a/0009-basic-strbuf-do-not-call-bsearch-with-a-null-argumen.patch b/0009-basic-strbuf-do-not-call-bsearch-with-a-null-argumen.patch
deleted file mode 100644
index 6888c9f..0000000
--- a/0009-basic-strbuf-do-not-call-bsearch-with-a-null-argumen.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-From 328e8daf82c4e82ebcd06ae87bb825d5060cb94b Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
-Date: Thu, 18 Feb 2016 17:33:10 -0500
-Subject: [PATCH] basic/strbuf: do not call bsearch with a null argument
-
-Das ist verboten!
-
-src/basic/strbuf.c:162:23: runtime error: null pointer passed as argument 2,
-                           which is declared to never be null
-
-(cherry picked from commit 82501b3fc40dae2660a86ab07462f33fe26347ad)
----
- src/basic/strbuf.c | 4 ++++
- 1 file changed, 4 insertions(+)
-
-diff --git a/src/basic/strbuf.c b/src/basic/strbuf.c
-index 77220c0251..dac2881603 100644
---- a/src/basic/strbuf.c
-+++ b/src/basic/strbuf.c
-@@ -156,6 +156,10 @@ ssize_t strbuf_add_string(struct strbuf *str, const char *s, size_t len) {
-                         return off;
-                 }
- 
-+                /* bsearch is not allowed on a NULL sequence */
-+                if (node->children_count == 0)
-+                        break;
-+
-                 /* lookup child node */
-                 c = s[len - 1 - depth];
-                 search.c = c;
diff --git a/0010-udev-path_id-correct-segmentation-fault-due-to-missi.patch b/0010-udev-path_id-correct-segmentation-fault-due-to-missi.patch
deleted file mode 100644
index 5c3442e..0000000
--- a/0010-udev-path_id-correct-segmentation-fault-due-to-missi.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-From 28c6938992e05238fa077ff820015bb37e1ecae6 Mon Sep 17 00:00:00 2001
-From: Hendrik Brueckner <brueckner@linux.vnet.ibm.com>
-Date: Fri, 19 Feb 2016 15:21:18 +0100
-Subject: [PATCH] udev/path_id: correct segmentation fault due to missing NULL
- check
-
-Running "udevadm test-builtin path_id /sys/devices/platform/" results
-in a segmentation fault.
-
-The problem is that udev_device_get_subsystem(dev) might return NULL
-in a streq() call.  Solve this problem by using streq_ptr() instead.
-
-(cherry picked from commit 5181ab917d6407cb57043e98955f0de1614366ea)
----
- src/udev/udev-builtin-path_id.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/udev/udev-builtin-path_id.c b/src/udev/udev-builtin-path_id.c
-index b6ed45d8ba..6e9adc6e96 100644
---- a/src/udev/udev-builtin-path_id.c
-+++ b/src/udev/udev-builtin-path_id.c
-@@ -712,7 +712,7 @@ static int builtin_path_id(struct udev_device *dev, int argc, char *argv[], bool
-          * devices do not expose their buses and do not provide a unique
-          * and predictable name that way.
-          */
--        if (streq(udev_device_get_subsystem(dev), "block") && !supported_transport)
-+        if (streq_ptr(udev_device_get_subsystem(dev), "block") && !supported_transport)
-                 path = mfree(path);
- 
-         if (path != NULL) {
diff --git a/0011-networkd-make-sure-we-allocate-the-NTA-set-before-we.patch b/0011-networkd-make-sure-we-allocate-the-NTA-set-before-we.patch
deleted file mode 100644
index 95ac776..0000000
--- a/0011-networkd-make-sure-we-allocate-the-NTA-set-before-we.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-From 319dadd4b39ed03271848ca649e4d76de0fbf8ff Mon Sep 17 00:00:00 2001
-From: Lennart Poettering <lennart@poettering.net>
-Date: Sun, 21 Feb 2016 22:27:01 +0100
-Subject: [PATCH] networkd: make sure we allocate the NTA set before we add
- items to it
-
-See: #2683
-(cherry picked from commit cbbf38aefc7a3d18d68f0d8fffb6b59d77948690)
----
- src/network/networkd-network.c | 4 ++++
- 1 file changed, 4 insertions(+)
-
-diff --git a/src/network/networkd-network.c b/src/network/networkd-network.c
-index 4315790093..54f76fe206 100644
---- a/src/network/networkd-network.c
-+++ b/src/network/networkd-network.c
-@@ -994,6 +994,10 @@ int config_parse_dnssec_negative_trust_anchors(
-                         continue;
-                 }
- 
-+                r = set_ensure_allocated(&n->dnssec_negative_trust_anchors, &dns_name_hash_ops);
-+                if (r < 0)
-+                        return log_oom();
-+
-                 r = set_put(n->dnssec_negative_trust_anchors, w);
-                 if (r < 0)
-                         return log_oom();
diff --git a/0012-networkd-tunnel-fix-tunnel-address.patch b/0012-networkd-tunnel-fix-tunnel-address.patch
deleted file mode 100644
index 69fdb9f..0000000
--- a/0012-networkd-tunnel-fix-tunnel-address.patch
+++ /dev/null
@@ -1,70 +0,0 @@
-From f432f7f9037833d77e6e0d16c275b950e1cd8e03 Mon Sep 17 00:00:00 2001
-From: Susant Sahani <ssahani@gmail.com>
-Date: Sat, 20 Feb 2016 18:03:31 +0530
-Subject: [PATCH] networkd: tunnel fix tunnel address
-
-this fixes 2655
-
-(cherry picked from commit 07dcb085893a2fe212b7e158028725876d2ab98f)
----
- src/network/networkd-netdev-tunnel.c | 12 ++++++------
- 1 file changed, 6 insertions(+), 6 deletions(-)
-
-diff --git a/src/network/networkd-netdev-tunnel.c b/src/network/networkd-netdev-tunnel.c
-index 46ff2974f4..7aaa041ba3 100644
---- a/src/network/networkd-netdev-tunnel.c
-+++ b/src/network/networkd-netdev-tunnel.c
-@@ -54,7 +54,7 @@ static int netdev_ipip_fill_message_create(NetDev *netdev, Link *link, sd_netlin
-         assert(link);
-         assert(m);
-         assert(t);
--        assert(t->family == AF_INET || t->family != -1);
-+        assert(IN_SET(t->family, AF_INET, AF_UNSPEC));
- 
-         r = sd_netlink_message_append_u32(m, IFLA_IPTUN_LINK, link->ifindex);
-         if (r < 0)
-@@ -87,7 +87,7 @@ static int netdev_sit_fill_message_create(NetDev *netdev, Link *link, sd_netlink
-         assert(link);
-         assert(m);
-         assert(t);
--        assert(t->family == AF_INET || t->family != -1);
-+        assert(IN_SET(t->family, AF_INET, AF_UNSPEC));
- 
-         r = sd_netlink_message_append_u32(m, IFLA_IPTUN_LINK, link->ifindex);
-         if (r < 0)
-@@ -124,7 +124,7 @@ static int netdev_gre_fill_message_create(NetDev *netdev, Link *link, sd_netlink
-                 t = GRETAP(netdev);
- 
-         assert(t);
--        assert(t->family == AF_INET || t->family != -1);
-+        assert(IN_SET(t->family, AF_INET, AF_UNSPEC));
-         assert(link);
-         assert(m);
- 
-@@ -497,7 +497,7 @@ static void ipip_init(NetDev *n) {
-         assert(t);
- 
-         t->pmtudisc = true;
--        t->family = -1;
-+        t->family = AF_UNSPEC;
- }
- 
- static void sit_init(NetDev *n) {
-@@ -507,7 +507,7 @@ static void sit_init(NetDev *n) {
-         assert(t);
- 
-         t->pmtudisc = true;
--        t->family = -1;
-+        t->family = AF_UNSPEC;
- }
- 
- static void vti_init(NetDev *n) {
-@@ -538,7 +538,7 @@ static void gre_init(NetDev *n) {
-         assert(t);
- 
-         t->pmtudisc = true;
--        t->family = -1;
-+        t->family = AF_UNSPEC;
- }
- 
- static void ip6gre_init(NetDev *n) {
diff --git a/0013-calendarspec-fix-find_next-skipping-times.patch b/0013-calendarspec-fix-find_next-skipping-times.patch
deleted file mode 100644
index 18ba97f..0000000
--- a/0013-calendarspec-fix-find_next-skipping-times.patch
+++ /dev/null
@@ -1,47 +0,0 @@
-From 182b69ec5eade7b2accc09d58128b6d286067299 Mon Sep 17 00:00:00 2001
-From: Hristo Venev <hristo@venev.name>
-Date: Mon, 22 Feb 2016 08:02:48 -0500
-Subject: [PATCH] calendarspec: fix find_next skipping times
-
-reset usec when bumping hours/minutes
-
-(cherry picked from commit a022d76e6a7c711954be5535e6308d0a470e232a)
----
- src/basic/calendarspec.c     | 4 ++--
- src/test/test-calendarspec.c | 1 +
- 2 files changed, 3 insertions(+), 2 deletions(-)
-
-diff --git a/src/basic/calendarspec.c b/src/basic/calendarspec.c
-index 775879076d..ac7b7c4c87 100644
---- a/src/basic/calendarspec.c
-+++ b/src/basic/calendarspec.c
-@@ -1027,7 +1027,7 @@ static int find_next(const CalendarSpec *spec, struct tm *tm, usec_t *usec) {
- 
-                 r = find_matching_component(spec->hour, &c.tm_hour);
-                 if (r > 0)
--                        c.tm_min = c.tm_sec = 0;
-+                        c.tm_min = c.tm_sec = tm_usec = 0;
-                 if (r < 0 || tm_out_of_bounds(&c, spec->utc)) {
-                         c.tm_mday ++;
-                         c.tm_hour = c.tm_min = c.tm_sec = tm_usec = 0;
-@@ -1036,7 +1036,7 @@ static int find_next(const CalendarSpec *spec, struct tm *tm, usec_t *usec) {
- 
-                 r = find_matching_component(spec->minute, &c.tm_min);
-                 if (r > 0)
--                        c.tm_sec = 0;
-+                        c.tm_sec = tm_usec = 0;
-                 if (r < 0 || tm_out_of_bounds(&c, spec->utc)) {
-                         c.tm_hour ++;
-                         c.tm_min = c.tm_sec = tm_usec = 0;
-diff --git a/src/test/test-calendarspec.c b/src/test/test-calendarspec.c
-index 8754cb3381..5a8c6cbfb6 100644
---- a/src/test/test-calendarspec.c
-+++ b/src/test/test-calendarspec.c
-@@ -137,6 +137,7 @@ int main(int argc, char* argv[]) {
-         test_next("2015-11-13 09:11:23.42", "EET", 12345, 1447398683420000);
-         test_next("2015-11-13 09:11:23.42/1.77", "EET", 1447398683420000, 1447398685190000);
-         test_next("2015-11-13 09:11:23.42/1.77", "EET", 1447398683419999, 1447398683420000);
-+        test_next("Sun 16:00:00", "CET", 1456041600123456, 1456066800000000);
- 
-         assert_se(calendar_spec_from_string("test", &c) < 0);
-         assert_se(calendar_spec_from_string("", &c) < 0);
diff --git a/0014-core-exclude-.slice-units-from-systemctl-isolate.patch b/0014-core-exclude-.slice-units-from-systemctl-isolate.patch
deleted file mode 100644
index 5dee7f0..0000000
--- a/0014-core-exclude-.slice-units-from-systemctl-isolate.patch
+++ /dev/null
@@ -1,52 +0,0 @@
-From 3d08427e07af2419f542c3786db2e78f0ed7c282 Mon Sep 17 00:00:00 2001
-From: Lennart Poettering <lennart@poettering.net>
-Date: Thu, 18 Feb 2016 22:51:23 +0100
-Subject: [PATCH] core: exclude .slice units from "systemctl isolate"
-
-Fixes: #1969
-(cherry picked from commit 1b4cd0cf11feb7d41f2eff17f86fa55b31bb6841)
----
- src/core/scope.c | 3 +--
- src/core/slice.c | 8 ++++++++
- 2 files changed, 9 insertions(+), 2 deletions(-)
-
-diff --git a/src/core/scope.c b/src/core/scope.c
-index c5d0ecef04..361695c3f9 100644
---- a/src/core/scope.c
-+++ b/src/core/scope.c
-@@ -50,8 +50,7 @@ static void scope_init(Unit *u) {
-         assert(u->load_state == UNIT_STUB);
- 
-         s->timeout_stop_usec = u->manager->default_timeout_stop_usec;
--
--        UNIT(s)->ignore_on_isolate = true;
-+        u->ignore_on_isolate = true;
- }
- 
- static void scope_done(Unit *u) {
-diff --git a/src/core/slice.c b/src/core/slice.c
-index d65364c6f4..667f61bde5 100644
---- a/src/core/slice.c
-+++ b/src/core/slice.c
-@@ -34,6 +34,13 @@ static const UnitActiveState state_translation_table[_SLICE_STATE_MAX] = {
-         [SLICE_ACTIVE] = UNIT_ACTIVE
- };
- 
-+static void slice_init(Unit *u) {
-+        assert(u);
-+        assert(u->load_state == UNIT_STUB);
-+
-+        u->ignore_on_isolate = true;
-+}
-+
- static void slice_set_state(Slice *t, SliceState state) {
-         SliceState old_state;
-         assert(t);
-@@ -305,6 +312,7 @@ const UnitVTable slice_vtable = {
-         .no_instances = true,
-         .can_transient = true,
- 
-+        .init = slice_init,
-         .load = slice_load,
- 
-         .coldplug = slice_coldplug,
diff --git a/0015-shorten-hostname-before-checking-for-trailing-dot.patch b/0015-shorten-hostname-before-checking-for-trailing-dot.patch
deleted file mode 100644
index 9298bc4..0000000
--- a/0015-shorten-hostname-before-checking-for-trailing-dot.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-From 414c46af13efbb4b0eeb0c7d429e1941742f120e Mon Sep 17 00:00:00 2001
-From: Thomas Blume <Thomas.Blume@suse.com>
-Date: Mon, 29 Feb 2016 10:19:01 +0100
-Subject: [PATCH] shorten hostname before checking for trailing dot
-
-Shortening can lead to a hostname that has a trailing dot.
-Therefore it should be done before checking from trailing dots.
-
-(cherry picked from commit 46e1a2278116e2f5067c35127ccbd8589335f734)
----
- src/basic/hostname-util.c | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/src/basic/hostname-util.c b/src/basic/hostname-util.c
-index 7bb23448ed..123cee3125 100644
---- a/src/basic/hostname-util.c
-+++ b/src/basic/hostname-util.c
-@@ -122,6 +122,8 @@ char* hostname_cleanup(char *s) {
- 
-         assert(s);
- 
-+        strshorten(s, HOST_NAME_MAX);
-+
-         for (p = s, d = s, dot = true; *p; p++) {
-                 if (*p == '.') {
-                         if (dot)
-@@ -141,8 +143,6 @@ char* hostname_cleanup(char *s) {
-         else
-                 *d = 0;
- 
--        strshorten(s, HOST_NAME_MAX);
--
-         return s;
- }
- 
diff --git a/0016-hashmap-use-void-and-uint8_t-for-generic-pointers.patch b/0016-hashmap-use-void-and-uint8_t-for-generic-pointers.patch
deleted file mode 100644
index 4c811ee..0000000
--- a/0016-hashmap-use-void-and-uint8_t-for-generic-pointers.patch
+++ /dev/null
@@ -1,81 +0,0 @@
-From 270eaf14c4905a9635bd1d009cb1565cd4f3626f Mon Sep 17 00:00:00 2001
-From: Lennart Poettering <lennart@poettering.net>
-Date: Mon, 22 Feb 2016 18:40:28 +0100
-Subject: [PATCH] hashmap: use void* and uint8_t* for generic pointers
-
-As suggested by CODING_STYLE we should use "void*" as type for generic memory,
-and uint8_t* for generic bytes. Hence use that instead of "char*", which should
-really be used only for strings these days.
-
-(cherry picked from commit 1a39bc8c650802630696c38e510a4a2a4c6bda92)
----
- src/basic/hashmap.c | 14 +++++++-------
- 1 file changed, 7 insertions(+), 7 deletions(-)
-
-diff --git a/src/basic/hashmap.c b/src/basic/hashmap.c
-index 6f1a049d47..85b8d812b3 100644
---- a/src/basic/hashmap.c
-+++ b/src/basic/hashmap.c
-@@ -176,7 +176,7 @@ enum HashmapType {
- };
- 
- struct _packed_ indirect_storage {
--        char    *storage;                  /* where buckets and DIBs are stored */
-+        void *storage;                     /* where buckets and DIBs are stored */
-         uint8_t  hash_key[HASH_KEY_SIZE];  /* hash key; changes during resize */
- 
-         unsigned n_entries;                /* number of stored entries */
-@@ -193,7 +193,7 @@ struct direct_storage {
-         /* This gives us 39 bytes on 64bit, or 35 bytes on 32bit.
-          * That's room for 4 set_entries + 4 DIB bytes + 3 unused bytes on 64bit,
-          *              or 7 set_entries + 7 DIB bytes + 0 unused bytes on 32bit. */
--        char storage[sizeof(struct indirect_storage)];
-+        uint8_t storage[sizeof(struct indirect_storage)];
- };
- 
- #define DIRECT_BUCKETS(entry_t) \
-@@ -302,7 +302,7 @@ static void n_entries_dec(HashmapBase *h) {
-                 h->n_direct_entries--;
- }
- 
--static char *storage_ptr(HashmapBase *h) {
-+static void *storage_ptr(HashmapBase *h) {
-         return h->has_indirect ? h->indirect.storage
-                                : h->direct.storage;
- }
-@@ -347,7 +347,7 @@ static void get_hash_key(uint8_t hash_key[HASH_KEY_SIZE], bool reuse_is_ok) {
- 
- static struct hashmap_base_entry *bucket_at(HashmapBase *h, unsigned idx) {
-         return (struct hashmap_base_entry*)
--                (storage_ptr(h) + idx * hashmap_type_info[h->type].entry_size);
-+                ((uint8_t*) storage_ptr(h) + idx * hashmap_type_info[h->type].entry_size);
- }
- 
- static struct plain_hashmap_entry *plain_bucket_at(Hashmap *h, unsigned idx) {
-@@ -381,7 +381,7 @@ static struct hashmap_base_entry *bucket_at_virtual(HashmapBase *h, struct swap_
- 
- static dib_raw_t *dib_raw_ptr(HashmapBase *h) {
-         return (dib_raw_t*)
--                (storage_ptr(h) + hashmap_type_info[h->type].entry_size * n_buckets(h));
-+                ((uint8_t*) storage_ptr(h) + hashmap_type_info[h->type].entry_size * n_buckets(h));
- }
- 
- static unsigned bucket_distance(HashmapBase *h, unsigned idx, unsigned from) {
-@@ -1028,7 +1028,7 @@ static int hashmap_base_put_boldly(HashmapBase *h, unsigned idx,
-  */
- static int resize_buckets(HashmapBase *h, unsigned entries_add) {
-         struct swap_entries swap;
--        char *new_storage;
-+        void *new_storage;
-         dib_raw_t *old_dibs, *new_dibs;
-         const struct hashmap_type_info *hi;
-         unsigned idx, optimal_idx;
-@@ -1095,7 +1095,7 @@ static int resize_buckets(HashmapBase *h, unsigned entries_add) {
-         h->indirect.n_buckets = (1U << new_shift) /
-                                 (hi->entry_size + sizeof(dib_raw_t));
- 
--        old_dibs = (dib_raw_t*)(new_storage + hi->entry_size * old_n_buckets);
-+        old_dibs = (dib_raw_t*)((uint8_t*) new_storage + hi->entry_size * old_n_buckets);
-         new_dibs = dib_raw_ptr(h);
- 
-         /*
diff --git a/0017-resolved-fix-notification-iteration-logic-when-trans.patch b/0017-resolved-fix-notification-iteration-logic-when-trans.patch
deleted file mode 100644
index c4e627c..0000000
--- a/0017-resolved-fix-notification-iteration-logic-when-trans.patch
+++ /dev/null
@@ -1,260 +0,0 @@
-From 61596a9aac5f0d4cef3845b04d61f2dad4aa0814 Mon Sep 17 00:00:00 2001
-From: Lennart Poettering <lennart@poettering.net>
-Date: Mon, 22 Feb 2016 20:39:45 +0100
-Subject: [PATCH] resolved: fix notification iteration logic when transactions
- are completed
-
-When a transaction is complete, and we notify its owners, make sure we deal
-correctly with the requesters removing themselves from the list of owners while
-we continue iterating.
-
-This was previously already dealt with with transactions that require other
-transactions for DNSSEC purposes, fix this for other possibly transaction
-owners too now.
-
-Since iterating through "Set" objects is not safe regarding removal of entries
-from it, rework the logic to use two Sets, and move each entry we notified from
-one set to the other set before we dispatch the notification. This move operation
-requires no additional memory, and enables us to ensure that we don't notify
-any object twice.
-
-Fixes: #2676
-(cherry picked from commit 35aa04e9edf422beac3493afa555d29575b3046c)
----
- src/basic/macro.h                      |  6 ++++
- src/basic/set.h                        |  3 ++
- src/resolve/resolved-dns-query.c       |  5 +++
- src/resolve/resolved-dns-transaction.c | 62 ++++++++++++++++------------------
- src/resolve/resolved-dns-transaction.h |  6 ++--
- src/resolve/resolved-dns-zone.c        |  5 +++
- 6 files changed, 52 insertions(+), 35 deletions(-)
-
-diff --git a/src/basic/macro.h b/src/basic/macro.h
-index 2695d0edb7..ab5cc97e17 100644
---- a/src/basic/macro.h
-+++ b/src/basic/macro.h
-@@ -361,6 +361,12 @@ static inline unsigned long ALIGN_POWER2(unsigned long u) {
-                 _found;                         \
-         })
- 
-+#define SWAP_TWO(x, y) do {                        \
-+                typeof(x) _t = (x);                \
-+                (x) = (y);                         \
-+                (y) = (_t);                        \
-+        } while (false)
-+
- /* Define C11 thread_local attribute even on older gcc compiler
-  * version */
- #ifndef thread_local
-diff --git a/src/basic/set.h b/src/basic/set.h
-index 2bff5062da..e0d9dd001c 100644
---- a/src/basic/set.h
-+++ b/src/basic/set.h
-@@ -126,6 +126,9 @@ int set_put_strdupv(Set *s, char **l);
- #define SET_FOREACH(e, s, i) \
-         for ((i) = ITERATOR_FIRST; set_iterate((s), &(i), (void**)&(e)); )
- 
-+#define SET_FOREACH_MOVE(e, d, s)                                       \
-+        for (; ({ e = set_first(s); assert_se(!e || set_move_one(d, s, e) >= 0); e; }); )
-+
- DEFINE_TRIVIAL_CLEANUP_FUNC(Set*, set_free);
- DEFINE_TRIVIAL_CLEANUP_FUNC(Set*, set_free_free);
- 
-diff --git a/src/resolve/resolved-dns-query.c b/src/resolve/resolved-dns-query.c
-index a378b2b7f7..2a02544eb6 100644
---- a/src/resolve/resolved-dns-query.c
-+++ b/src/resolve/resolved-dns-query.c
-@@ -62,6 +62,7 @@ static void dns_query_candidate_stop(DnsQueryCandidate *c) {
- 
-         while ((t = set_steal_first(c->transactions))) {
-                 set_remove(t->notify_query_candidates, c);
-+                set_remove(t->notify_query_candidates_done, c);
-                 dns_transaction_gc(t);
-         }
- }
-@@ -139,6 +140,10 @@ static int dns_query_candidate_add_transaction(DnsQueryCandidate *c, DnsResource
-         if (r < 0)
-                 goto gc;
- 
-+        r = set_ensure_allocated(&t->notify_query_candidates_done, NULL);
-+        if (r < 0)
-+                goto gc;
-+
-         r = set_put(t->notify_query_candidates, c);
-         if (r < 0)
-                 goto gc;
-diff --git a/src/resolve/resolved-dns-transaction.c b/src/resolve/resolved-dns-transaction.c
-index d48fdd1281..4f5cbab702 100644
---- a/src/resolve/resolved-dns-transaction.c
-+++ b/src/resolve/resolved-dns-transaction.c
-@@ -52,6 +52,7 @@ static void dns_transaction_flush_dnssec_transactions(DnsTransaction *t) {
- 
-         while ((z = set_steal_first(t->dnssec_transactions))) {
-                 set_remove(z->notify_transactions, t);
-+                set_remove(z->notify_transactions_done, t);
-                 dns_transaction_gc(z);
-         }
- }
-@@ -100,14 +101,26 @@ DnsTransaction* dns_transaction_free(DnsTransaction *t) {
-                 set_remove(c->transactions, t);
-         set_free(t->notify_query_candidates);
- 
-+        while ((c = set_steal_first(t->notify_query_candidates_done)))
-+                set_remove(c->transactions, t);
-+        set_free(t->notify_query_candidates_done);
-+
-         while ((i = set_steal_first(t->notify_zone_items)))
-                 i->probe_transaction = NULL;
-         set_free(t->notify_zone_items);
- 
-+        while ((i = set_steal_first(t->notify_zone_items_done)))
-+                i->probe_transaction = NULL;
-+        set_free(t->notify_zone_items_done);
-+
-         while ((z = set_steal_first(t->notify_transactions)))
-                 set_remove(z->dnssec_transactions, t);
-         set_free(t->notify_transactions);
- 
-+        while ((z = set_steal_first(t->notify_transactions_done)))
-+                set_remove(z->dnssec_transactions, t);
-+        set_free(t->notify_transactions_done);
-+
-         dns_transaction_flush_dnssec_transactions(t);
-         set_free(t->dnssec_transactions);
- 
-@@ -128,8 +141,11 @@ bool dns_transaction_gc(DnsTransaction *t) {
-                 return true;
- 
-         if (set_isempty(t->notify_query_candidates) &&
-+            set_isempty(t->notify_query_candidates_done) &&
-             set_isempty(t->notify_zone_items) &&
--            set_isempty(t->notify_transactions)) {
-+            set_isempty(t->notify_zone_items_done) &&
-+            set_isempty(t->notify_transactions) &&
-+            set_isempty(t->notify_transactions_done)) {
-                 dns_transaction_free(t);
-                 return false;
-         }
-@@ -266,6 +282,7 @@ static void dns_transaction_tentative(DnsTransaction *t, DnsPacket *p) {
-         log_debug("We have the lexicographically larger IP address and thus lost in the conflict.");
- 
-         t->block_gc++;
-+
-         while ((z = set_first(t->notify_zone_items))) {
-                 /* First, make sure the zone item drops the reference
-                  * to us */
-@@ -284,7 +301,6 @@ void dns_transaction_complete(DnsTransaction *t, DnsTransactionState state) {
-         DnsQueryCandidate *c;
-         DnsZoneItem *z;
-         DnsTransaction *d;
--        Iterator i;
-         const char *st;
- 
-         assert(t);
-@@ -329,39 +345,17 @@ void dns_transaction_complete(DnsTransaction *t, DnsTransactionState state) {
-          * transaction isn't freed while we are still looking at it */
-         t->block_gc++;
- 
--        SET_FOREACH(c, t->notify_query_candidates, i)
-+        SET_FOREACH_MOVE(c, t->notify_query_candidates_done, t->notify_query_candidates)
-                 dns_query_candidate_notify(c);
--        SET_FOREACH(z, t->notify_zone_items, i)
--                dns_zone_item_notify(z);
-+        SWAP_TWO(t->notify_query_candidates, t->notify_query_candidates_done);
- 
--        if (!set_isempty(t->notify_transactions)) {
--                DnsTransaction **nt;
--                unsigned j, n = 0;
--
--                /* We need to be careful when notifying other
--                 * transactions, as that might destroy other
--                 * transactions in our list. Hence, in order to be
--                 * able to safely iterate through the list of
--                 * transactions, take a GC lock on all of them
--                 * first. Then, in a second loop, notify them, but
--                 * first unlock that specific transaction. */
--
--                nt = newa(DnsTransaction*, set_size(t->notify_transactions));
--                SET_FOREACH(d, t->notify_transactions, i) {
--                        nt[n++] = d;
--                        d->block_gc++;
--                }
--
--                assert(n == set_size(t->notify_transactions));
-+        SET_FOREACH_MOVE(z, t->notify_zone_items_done, t->notify_zone_items)
-+                dns_zone_item_notify(z);
-+        SWAP_TWO(t->notify_zone_items, t->notify_zone_items_done);
- 
--                for (j = 0; j < n; j++) {
--                        if (set_contains(t->notify_transactions, nt[j]))
--                                dns_transaction_notify(nt[j], t);
--
--                        nt[j]->block_gc--;
--                        dns_transaction_gc(nt[j]);
--                }
--        }
-+        SET_FOREACH_MOVE(d, t->notify_transactions_done, t->notify_transactions)
-+                dns_transaction_notify(d, t);
-+        SWAP_TWO(t->notify_transactions, t->notify_transactions_done);
- 
-         t->block_gc--;
-         dns_transaction_gc(t);
-@@ -1619,6 +1613,10 @@ static int dns_transaction_add_dnssec_transaction(DnsTransaction *t, DnsResource
-         if (r < 0)
-                 goto gc;
- 
-+        r = set_ensure_allocated(&aux->notify_transactions_done, NULL);
-+        if (r < 0)
-+                goto gc;
-+
-         r = set_put(t->dnssec_transactions, aux);
-         if (r < 0)
-                 goto gc;
-diff --git a/src/resolve/resolved-dns-transaction.h b/src/resolve/resolved-dns-transaction.h
-index 4617194711..fd0237d166 100644
---- a/src/resolve/resolved-dns-transaction.h
-+++ b/src/resolve/resolved-dns-transaction.h
-@@ -119,17 +119,17 @@ struct DnsTransaction {
-         /* Query candidates this transaction is referenced by and that
-          * shall be notified about this specific transaction
-          * completing. */
--        Set *notify_query_candidates;
-+        Set *notify_query_candidates, *notify_query_candidates_done;
- 
-         /* Zone items this transaction is referenced by and that shall
-          * be notified about completion. */
--        Set *notify_zone_items;
-+        Set *notify_zone_items, *notify_zone_items_done;
- 
-         /* Other transactions that this transactions is referenced by
-          * and that shall be notified about completion. This is used
-          * when transactions want to validate their RRsets, but need
-          * another DNSKEY or DS RR to do so. */
--        Set *notify_transactions;
-+        Set *notify_transactions, *notify_transactions_done;
- 
-         /* The opposite direction: the transactions this transaction
-          * created in order to request DNSKEY or DS RRs. */
-diff --git a/src/resolve/resolved-dns-zone.c b/src/resolve/resolved-dns-zone.c
-index f52383cfd1..be535cff14 100644
---- a/src/resolve/resolved-dns-zone.c
-+++ b/src/resolve/resolved-dns-zone.c
-@@ -38,6 +38,7 @@ void dns_zone_item_probe_stop(DnsZoneItem *i) {
-         i->probe_transaction = NULL;
- 
-         set_remove(t->notify_zone_items, i);
-+        set_remove(t->notify_zone_items_done, i);
-         dns_transaction_gc(t);
- }
- 
-@@ -186,6 +187,10 @@ static int dns_zone_item_probe_start(DnsZoneItem *i)  {
-         if (r < 0)
-                 goto gc;
- 
-+        r = set_ensure_allocated(&t->notify_zone_items_done, NULL);
-+        if (r < 0)
-+                goto gc;
-+
-         r = set_put(t->notify_zone_items, i);
-         if (r < 0)
-                 goto gc;
diff --git a/0018-selinux-always-try-to-load-the-full-selinux-db.patch b/0018-selinux-always-try-to-load-the-full-selinux-db.patch
deleted file mode 100644
index dd82e1e..0000000
--- a/0018-selinux-always-try-to-load-the-full-selinux-db.patch
+++ /dev/null
@@ -1,249 +0,0 @@
-From a4feb275ce859fb63e1153cb2eb16ed276f3a96f Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
-Date: Tue, 1 Mar 2016 20:35:55 -0500
-Subject: [PATCH] selinux: always try to load the full selinux db
-
-https://github.com/systemd/systemd/pull/2508#issuecomment-190901170
-Maybe fixes https://bugzilla.redhat.com/show_bug.cgi?id=1308771.
-
-(cherry picked from commit c3dacc8bbf2dc2f5d498072418289c3ba79160ac)
----
- src/basic/selinux-util.c          | 16 ++++------------
- src/basic/selinux-util.h          |  2 +-
- src/core/main.c                   |  2 +-
- src/hostname/hostnamed.c          |  2 +-
- src/locale/localed.c              |  2 +-
- src/login/logind.c                |  2 +-
- src/resolve/resolved.c            |  2 +-
- src/sysusers/sysusers.c           |  2 +-
- src/test/test-udev.c              |  2 +-
- src/timedate/timedated.c          |  2 +-
- src/tmpfiles/tmpfiles.c           |  2 +-
- src/udev/udevadm.c                |  2 +-
- src/udev/udevd.c                  |  2 +-
- src/update-done/update-done.c     |  2 +-
- src/user-sessions/user-sessions.c |  2 +-
- 15 files changed, 18 insertions(+), 26 deletions(-)
-
-diff --git a/src/basic/selinux-util.c b/src/basic/selinux-util.c
-index 6c63b9d652..71ceac1bcd 100644
---- a/src/basic/selinux-util.c
-+++ b/src/basic/selinux-util.c
-@@ -80,31 +80,23 @@ void mac_selinux_retest(void) {
- #endif
- }
- 
--int mac_selinux_init(const char *prefix) {
-+int mac_selinux_init(void) {
-         int r = 0;
- 
- #ifdef HAVE_SELINUX
-         usec_t before_timestamp, after_timestamp;
-         struct mallinfo before_mallinfo, after_mallinfo;
- 
--        if (!mac_selinux_use())
-+        if (label_hnd)
-                 return 0;
- 
--        if (label_hnd)
-+        if (!mac_selinux_use())
-                 return 0;
- 
-         before_mallinfo = mallinfo();
-         before_timestamp = now(CLOCK_MONOTONIC);
- 
--        if (prefix) {
--                struct selinux_opt options[] = {
--                        { .type = SELABEL_OPT_SUBSET, .value = prefix },
--                };
--
--                label_hnd = selabel_open(SELABEL_CTX_FILE, options, ELEMENTSOF(options));
--        } else
--                label_hnd = selabel_open(SELABEL_CTX_FILE, NULL, 0);
--
-+        label_hnd = selabel_open(SELABEL_CTX_FILE, NULL, 0);
-         if (!label_hnd) {
-                 log_enforcing("Failed to initialize SELinux context: %m");
-                 r = security_getenforce() == 1 ? -errno : 0;
-diff --git a/src/basic/selinux-util.h b/src/basic/selinux-util.h
-index 27e8edb41b..ce6bc8e44c 100644
---- a/src/basic/selinux-util.h
-+++ b/src/basic/selinux-util.h
-@@ -29,7 +29,7 @@ bool mac_selinux_use(void);
- bool mac_selinux_have(void);
- void mac_selinux_retest(void);
- 
--int mac_selinux_init(const char *prefix);
-+int mac_selinux_init(void);
- void mac_selinux_finish(void);
- 
- int mac_selinux_fix(const char *path, bool ignore_enoent, bool ignore_erofs);
-diff --git a/src/core/main.c b/src/core/main.c
-index e2088574c0..d861960c6d 100644
---- a/src/core/main.c
-+++ b/src/core/main.c
-@@ -1382,7 +1382,7 @@ int main(int argc, char *argv[]) {
-                         dual_timestamp_get(&security_finish_timestamp);
-                 }
- 
--                if (mac_selinux_init(NULL) < 0) {
-+                if (mac_selinux_init() < 0) {
-                         error_message = "Failed to initialize SELinux policy";
-                         goto finish;
-                 }
-diff --git a/src/hostname/hostnamed.c b/src/hostname/hostnamed.c
-index c37e32e96b..d11756e615 100644
---- a/src/hostname/hostnamed.c
-+++ b/src/hostname/hostnamed.c
-@@ -706,7 +706,7 @@ int main(int argc, char *argv[]) {
-         log_open();
- 
-         umask(0022);
--        mac_selinux_init("/etc");
-+        mac_selinux_init();
- 
-         if (argc != 1) {
-                 log_error("This program takes no arguments.");
-diff --git a/src/locale/localed.c b/src/locale/localed.c
-index f0fe59cc67..a2fc6af4c9 100644
---- a/src/locale/localed.c
-+++ b/src/locale/localed.c
-@@ -1296,7 +1296,7 @@ int main(int argc, char *argv[]) {
-         log_open();
- 
-         umask(0022);
--        mac_selinux_init("/etc");
-+        mac_selinux_init();
- 
-         if (argc != 1) {
-                 log_error("This program takes no arguments.");
-diff --git a/src/login/logind.c b/src/login/logind.c
-index 933602eb08..d5f6757bd3 100644
---- a/src/login/logind.c
-+++ b/src/login/logind.c
-@@ -1126,7 +1126,7 @@ int main(int argc, char *argv[]) {
-                 goto finish;
-         }
- 
--        r = mac_selinux_init("/run");
-+        r = mac_selinux_init();
-         if (r < 0) {
-                 log_error_errno(r, "Could not initialize labelling: %m");
-                 goto finish;
-diff --git a/src/resolve/resolved.c b/src/resolve/resolved.c
-index c7e2ab14d6..161ea03412 100644
---- a/src/resolve/resolved.c
-+++ b/src/resolve/resolved.c
-@@ -48,7 +48,7 @@ int main(int argc, char *argv[]) {
- 
-         umask(0022);
- 
--        r = mac_selinux_init(NULL);
-+        r = mac_selinux_init();
-         if (r < 0) {
-                 log_error_errno(r, "SELinux setup failed: %m");
-                 goto finish;
-diff --git a/src/sysusers/sysusers.c b/src/sysusers/sysusers.c
-index 863c628323..4377f1b910 100644
---- a/src/sysusers/sysusers.c
-+++ b/src/sysusers/sysusers.c
-@@ -1820,7 +1820,7 @@ int main(int argc, char *argv[]) {
- 
-         umask(0022);
- 
--        r = mac_selinux_init(NULL);
-+        r = mac_selinux_init();
-         if (r < 0) {
-                 log_error_errno(r, "SELinux setup failed: %m");
-                 goto finish;
-diff --git a/src/test/test-udev.c b/src/test/test-udev.c
-index 9cc64f7c68..d01789fe08 100644
---- a/src/test/test-udev.c
-+++ b/src/test/test-udev.c
-@@ -93,7 +93,7 @@ int main(int argc, char *argv[]) {
-                 return EXIT_FAILURE;
- 
-         log_debug("version %s", VERSION);
--        mac_selinux_init("/dev");
-+        mac_selinux_init();
- 
-         action = argv[1];
-         if (action == NULL) {
-diff --git a/src/timedate/timedated.c b/src/timedate/timedated.c
-index 2a10135fba..a522d0c5f9 100644
---- a/src/timedate/timedated.c
-+++ b/src/timedate/timedated.c
-@@ -159,7 +159,7 @@ static int context_write_data_local_rtc(Context *c) {
-                 }
-         }
- 
--        mac_selinux_init("/etc");
-+        mac_selinux_init();
-         return write_string_file_atomic_label("/etc/adjtime", w);
- }
- 
-diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c
-index 7b105a6bd4..f3487013cf 100644
---- a/src/tmpfiles/tmpfiles.c
-+++ b/src/tmpfiles/tmpfiles.c
-@@ -2288,7 +2288,7 @@ int main(int argc, char *argv[]) {
- 
-         umask(0022);
- 
--        mac_selinux_init(NULL);
-+        mac_selinux_init();
- 
-         items = ordered_hashmap_new(&string_hash_ops);
-         globs = ordered_hashmap_new(&string_hash_ops);
-diff --git a/src/udev/udevadm.c b/src/udev/udevadm.c
-index 7bd2c1ea42..a6a873e5de 100644
---- a/src/udev/udevadm.c
-+++ b/src/udev/udevadm.c
-@@ -93,7 +93,7 @@ int main(int argc, char *argv[]) {
- 
-         log_parse_environment();
-         log_open();
--        mac_selinux_init("/dev");
-+        mac_selinux_init();
- 
-         while ((c = getopt_long(argc, argv, "+dhV", options, NULL)) >= 0)
-                 switch (c) {
-diff --git a/src/udev/udevd.c b/src/udev/udevd.c
-index bb92f16352..243df7386f 100644
---- a/src/udev/udevd.c
-+++ b/src/udev/udevd.c
-@@ -1695,7 +1695,7 @@ int main(int argc, char *argv[]) {
- 
-         umask(022);
- 
--        r = mac_selinux_init("/dev");
-+        r = mac_selinux_init();
-         if (r < 0) {
-                 log_error_errno(r, "could not initialize labelling: %m");
-                 goto exit;
-diff --git a/src/update-done/update-done.c b/src/update-done/update-done.c
-index 931e583785..da306a4444 100644
---- a/src/update-done/update-done.c
-+++ b/src/update-done/update-done.c
-@@ -101,7 +101,7 @@ int main(int argc, char *argv[]) {
-                 return EXIT_FAILURE;
-         }
- 
--        r = mac_selinux_init(NULL);
-+        r = mac_selinux_init();
-         if (r < 0) {
-                 log_error_errno(r, "SELinux setup failed: %m");
-                 goto finish;
-diff --git a/src/user-sessions/user-sessions.c b/src/user-sessions/user-sessions.c
-index 8bf44e2100..9b29b5ba1d 100644
---- a/src/user-sessions/user-sessions.c
-+++ b/src/user-sessions/user-sessions.c
-@@ -40,7 +40,7 @@ int main(int argc, char*argv[]) {
- 
-         umask(0022);
- 
--        mac_selinux_init(NULL);
-+        mac_selinux_init();
- 
-         if (streq(argv[1], "start")) {
-                 int r = 0;
diff --git a/0019-selinux-use-raw-variants-of-security_compute_create-.patch b/0019-selinux-use-raw-variants-of-security_compute_create-.patch
deleted file mode 100644
index ca2521b..0000000
--- a/0019-selinux-use-raw-variants-of-security_compute_create-.patch
+++ /dev/null
@@ -1,45 +0,0 @@
-From 4f1ae61da9eda1115c1461e77a44101d96532700 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
-Date: Wed, 2 Mar 2016 10:16:39 -0500
-Subject: [PATCH] selinux: use raw variants of security_compute_create and
- setfscreatecon
-
-As suggested by Evgeny Vereshchagin as a follow up for
-https://github.com/systemd/systemd/pull/2781#issuecomment-191043402.
-
-(cherry picked from commit 5c5433ad32c3d911f0c66cc124d190d40a2b5f5b)
----
- src/basic/selinux-util.c | 6 +++---
- 1 file changed, 3 insertions(+), 3 deletions(-)
-
-diff --git a/src/basic/selinux-util.c b/src/basic/selinux-util.c
-index 71ceac1bcd..5e6181f662 100644
---- a/src/basic/selinux-util.c
-+++ b/src/basic/selinux-util.c
-@@ -217,7 +217,7 @@ int mac_selinux_get_create_label_from_exe(const char *exe, char **label) {
-                 return -errno;
- 
-         sclass = string_to_security_class("process");
--        r = security_compute_create(mycon, fcon, sclass, (security_context_t *) label);
-+        r = security_compute_create_raw(mycon, fcon, sclass, (security_context_t *) label);
-         if (r < 0)
-                 return -errno;
- #endif
-@@ -296,7 +296,7 @@ int mac_selinux_get_child_mls_label(int socket_fd, const char *exe, const char *
-                 return -ENOMEM;
- 
-         sclass = string_to_security_class("process");
--        r = security_compute_create(mycon, fcon, sclass, (security_context_t *) label);
-+        r = security_compute_create_raw(mycon, fcon, sclass, (security_context_t *) label);
-         if (r < 0)
-                 return -errno;
- #endif
-@@ -350,7 +350,7 @@ int mac_selinux_create_file_prepare(const char *path, mode_t mode) {
- 
-                 log_enforcing("Failed to determine SELinux security context for %s: %m", path);
-         } else {
--                if (setfscreatecon(filecon) >= 0)
-+                if (setfscreatecon_raw(filecon) >= 0)
-                         return 0; /* Success! */
- 
-                 log_enforcing("Failed to set SELinux security context %s for %s: %m", filecon, path);
diff --git a/0020-test-compress-benchmark-skip-loop-iteration-if-size-.patch b/0020-test-compress-benchmark-skip-loop-iteration-if-size-.patch
deleted file mode 100644
index b290625..0000000
--- a/0020-test-compress-benchmark-skip-loop-iteration-if-size-.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-From f4bb8c3a9aed5ddefb66380c818d04aa0b663693 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
-Date: Fri, 4 Mar 2016 21:46:47 -0500
-Subject: [PATCH] test-compress-benchmark: skip loop iteration if size is 0
-
-Otherwise we would hit an assert in the compression code.
-
-(cherry picked from commit 15b947fb798cd131355ba9935802d58e92bdba6e)
----
- src/journal/test-compress-benchmark.c | 2 ++
- 1 file changed, 2 insertions(+)
-
-diff --git a/src/journal/test-compress-benchmark.c b/src/journal/test-compress-benchmark.c
-index 5b2d130cd6..0ef6d36a50 100644
---- a/src/journal/test-compress-benchmark.c
-+++ b/src/journal/test-compress-benchmark.c
-@@ -105,6 +105,8 @@ static void test_compress_decompress(const char* label, const char* type,
-                 int r;
- 
-                 size = permute(i);
-+                if (size == 0)
-+                        continue;
- 
-                 log_debug("%s %zu %zu", type, i, size);
- 
diff --git a/0021-time-util-fall-back-to-CLOCK_MONOTONIC-if-CLOCK_BOOT.patch b/0021-time-util-fall-back-to-CLOCK_MONOTONIC-if-CLOCK_BOOT.patch
deleted file mode 100644
index dc11d5a..0000000
--- a/0021-time-util-fall-back-to-CLOCK_MONOTONIC-if-CLOCK_BOOT.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-From c411521802d5e89eeb5cdf39cdd7b9538a3a3a08 Mon Sep 17 00:00:00 2001
-From: Lubomir Rintel <lkundrak@v3.sk>
-Date: Tue, 15 Mar 2016 12:43:33 +0100
-Subject: [PATCH] time-util: fall back to CLOCK_MONOTONIC if CLOCK_BOOTTIME
- unsupported
-
-It was added in 2.6.39, and causes an assertion to fail when running in mock
-hosted on 2.6.23-based RHEL-6:
-
-Assertion 'clock_gettime(map_clock_id(clock_id), &ts) == 0' failed at systemd/src/basic/time-util.c:70, function now(). Aborting.
-
-(cherry picked from commit 2abd5b5a49ae368b258ffc7257ab703bccda67dd)
----
- src/basic/time-util.c | 7 +++++--
- 1 file changed, 5 insertions(+), 2 deletions(-)
-
-diff --git a/src/basic/time-util.c b/src/basic/time-util.c
-index 510f018d9b..ec112e23e2 100644
---- a/src/basic/time-util.c
-+++ b/src/basic/time-util.c
-@@ -47,12 +47,15 @@ static clockid_t map_clock_id(clockid_t c) {
-         /* Some more exotic archs (s390, ppc, …) lack the "ALARM" flavour of the clocks. Thus, clock_gettime() will
-          * fail for them. Since they are essentially the same as their non-ALARM pendants (their only difference is
-          * when timers are set on them), let's just map them accordingly. This way, we can get the correct time even on
--         * those archs. */
-+         * those archs.
-+         *
-+         * Also, older kernels don't support CLOCK_BOOTTIME: fall back to CLOCK_MONOTONIC. */
- 
-         switch (c) {
- 
-+        case CLOCK_BOOTTIME:
-         case CLOCK_BOOTTIME_ALARM:
--                return CLOCK_BOOTTIME;
-+                return clock_boottime_or_monotonic ();
- 
-         case CLOCK_REALTIME_ALARM:
-                 return CLOCK_REALTIME;
diff --git a/0022-headers-use-__inline__-instead-of-inline.patch b/0022-headers-use-__inline__-instead-of-inline.patch
deleted file mode 100644
index 29ea18e..0000000
--- a/0022-headers-use-__inline__-instead-of-inline.patch
+++ /dev/null
@@ -1,47 +0,0 @@
-From b1ab67134c28ade32eab8fde37840efac789affc Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
-Date: Fri, 11 Mar 2016 13:41:49 -0500
-Subject: [PATCH] headers: use __inline__ instead of inline
-
-https://gcc.gnu.org/onlinedocs/gcc-5.3.0/gcc/Alternate-Keywords.html#Alternate-Keywords
-recommends __inline__ over inline in ANSI C compatible headers.
-Tested with gcc-5.3 and clang-3.7.
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1316964
-(cherry picked from commit 0cb27225e9c658d80538ace7a267ba0a2d2f44f2)
----
- src/systemd/_sd-common.h | 2 +-
- src/systemd/sd-id128.h   | 4 ++--
- 2 files changed, 3 insertions(+), 3 deletions(-)
-
-diff --git a/src/systemd/_sd-common.h b/src/systemd/_sd-common.h
-index 2d4e1f26e1..3bb886be75 100644
---- a/src/systemd/_sd-common.h
-+++ b/src/systemd/_sd-common.h
-@@ -74,7 +74,7 @@
- #endif
- 
- #define _SD_DEFINE_POINTER_CLEANUP_FUNC(type, func)             \
--        static inline void func##p(type **p) {                  \
-+        static __inline__ void func##p(type **p) {              \
-                 if (*p)                                         \
-                         func(*p);                               \
-         }                                                       \
-diff --git a/src/systemd/sd-id128.h b/src/systemd/sd-id128.h
-index a3bf5897b8..4dff0b9b81 100644
---- a/src/systemd/sd-id128.h
-+++ b/src/systemd/sd-id128.h
-@@ -100,11 +100,11 @@ int sd_id128_get_boot(sd_id128_t *ret);
-                 ((x).bytes[15] & 15) >= 10 ? 'a' + ((x).bytes[15] & 15) - 10 : '0' + ((x).bytes[15] & 15), \
-                 0 })
- 
--_sd_pure_ static inline int sd_id128_equal(sd_id128_t a, sd_id128_t b) {
-+_sd_pure_ static __inline__ int sd_id128_equal(sd_id128_t a, sd_id128_t b) {
-         return memcmp(&a, &b, 16) == 0;
- }
- 
--_sd_pure_ static inline int sd_id128_is_null(sd_id128_t a) {
-+_sd_pure_ static __inline__ int sd_id128_is_null(sd_id128_t a) {
-         return a.qwords[0] == 0 && a.qwords[1] == 0;
- }
- 
diff --git a/0023-dev-console-must-be-labeled-with-SELinux-label.patch b/0023-dev-console-must-be-labeled-with-SELinux-label.patch
deleted file mode 100644
index 06d1842..0000000
--- a/0023-dev-console-must-be-labeled-with-SELinux-label.patch
+++ /dev/null
@@ -1,47 +0,0 @@
-From 641a7f0c61ff42ea55ad7152e7f874ea5d680a2d Mon Sep 17 00:00:00 2001
-From: Dan Walsh <dwalsh@redhat.com>
-Date: Wed, 9 Mar 2016 09:29:25 -0500
-Subject: [PATCH] /dev/console must be labeled with SELinux label
-
-If the user specifies an selinux_apifs_context all content created in
-the container including /dev/console should use this label.
-
-Currently when this uses the default label it gets labeled user_devpts_t,
-which would require us to write a policy allowing container processes to
-manage user_devpts_t.  This means that an escaped process would be allowed
-to attack all users terminals as well as other container terminals.  Changing
-the label to match the apifs_context, means the processes would only be allowed
-to manage their specific tty.
-
-This change fixes a problem preventing RKT containers from working with systemd-nspawn.
-
-(cherry picked from commit 68b020494d1ff085281061413d9236b5865ef238)
----
- src/nspawn/nspawn.c | 7 +++++++
- 1 file changed, 7 insertions(+)
-
-diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c
-index ef348c335b..8c06f6ef75 100644
---- a/src/nspawn/nspawn.c
-+++ b/src/nspawn/nspawn.c
-@@ -87,6 +87,7 @@
- #ifdef HAVE_SECCOMP
- #include "seccomp-util.h"
- #endif
-+#include "selinux-util.h"
- #include "signal-util.h"
- #include "socket-util.h"
- #include "stat-util.h"
-@@ -3286,6 +3287,12 @@ int main(int argc, char *argv[]) {
-                 goto finish;
-         }
- 
-+        if (arg_selinux_apifs_context) {
-+                r = mac_selinux_apply(console, arg_selinux_apifs_context);
-+                if (r < 0)
-+                        goto finish;
-+        }
-+
-         if (unlockpt(master) < 0) {
-                 r = log_error_errno(errno, "Failed to unlock tty: %m");
-                 goto finish;
diff --git a/0024-fstab-generator-fix-automount-option-and-don-t-start.patch b/0024-fstab-generator-fix-automount-option-and-don-t-start.patch
deleted file mode 100644
index 2f52d1e..0000000
--- a/0024-fstab-generator-fix-automount-option-and-don-t-start.patch
+++ /dev/null
@@ -1,90 +0,0 @@
-From 1b8bdd05fcecd83cc8c8269f06a50ced055ab864 Mon Sep 17 00:00:00 2001
-From: Franck Bui <fbui@suse.com>
-Date: Tue, 1 Dec 2015 18:01:44 +0100
-Subject: [PATCH] fstab-generator: fix automount option and don't start
- associated mount unit at boot
-
-Without this patch applied the mount unit with 'automount' option was still
-pulled by local-fs.target and thus was activated during the boot process which
-defeats the purpose of the 'automount' option:
-
-   $ grep /mnt /etc/fstab
-   /dev/vdb1 /mnt ext2 defaults,x-systemd.automount 0 0
-
-   $ reboot
-   ...
-
-   $ mount | grep mnt
-   systemd-1 on /mnt type autofs (rw,relatime,fd=34,pgrp=1,timeout=0,minproto=5,maxproto=5,direct)
-   /dev/vdb1 on /mnt type ext2 (rw,relatime)
-
-   $ systemctl status mnt.mount | grep Active
-      Active: active (mounted) since Thu 2016-03-03 21:36:22 CET; 42s ago
-
-With the patch applied:
-
-   $ reboot
-   ...
-
-   $ mount | grep mnt
-   systemd-1 on /mnt type autofs (rw,relatime,fd=22,pgrp=1,timeout=0,minproto=5,maxproto=5,direct)
-
-   $ systemctl status mnt.mount | grep Active
-      Active: inactive (dead)
-
-   $ ls /mnt
-   lost+found
-
-   $ systemctl status mnt.mount | grep Active
-      Active: active (mounted) since Thu 2016-03-03 21:47:32 CET; 4s ago
-
-(cherry picked from commit 2b14df4a9ae92623b584e61db6b5b37accd832c1)
----
- src/core/mount.c                      | 11 ++++++++++-
- src/fstab-generator/fstab-generator.c |  4 ++--
- 2 files changed, 12 insertions(+), 3 deletions(-)
-
-diff --git a/src/core/mount.c b/src/core/mount.c
-index de1075d3a0..cfe4b0f517 100644
---- a/src/core/mount.c
-+++ b/src/core/mount.c
-@@ -104,6 +104,14 @@ static bool mount_is_auto(const MountParameters *p) {
-         return !fstab_test_option(p->options, "noauto\0");
- }
- 
-+static bool mount_is_automount(const MountParameters *p) {
-+        assert(p);
-+
-+        return fstab_test_option(p->options,
-+                                 "comment=systemd.automount\0"
-+                                 "x-systemd.automount\0");
-+}
-+
- static bool needs_quota(const MountParameters *p) {
-         assert(p);
- 
-@@ -328,7 +336,8 @@ static int mount_add_device_links(Mount *m) {
-         if (path_equal(m->where, "/"))
-                 return 0;
- 
--        if (mount_is_auto(p) && UNIT(m)->manager->running_as == MANAGER_SYSTEM)
-+        if (mount_is_auto(p) && !mount_is_automount(p) &&
-+            UNIT(m)->manager->running_as == MANAGER_SYSTEM)
-                 device_wants_mount = true;
- 
-         r = unit_add_node_link(UNIT(m), p->what, device_wants_mount, m->from_fragment ? UNIT_BINDS_TO : UNIT_REQUIRES);
-diff --git a/src/fstab-generator/fstab-generator.c b/src/fstab-generator/fstab-generator.c
-index 97a48764ae..6f576b5ecf 100644
---- a/src/fstab-generator/fstab-generator.c
-+++ b/src/fstab-generator/fstab-generator.c
-@@ -336,8 +336,8 @@ static int add_mount(
-         if (r < 0)
-                 return log_error_errno(r, "Failed to write unit file %s: %m", unit);
- 
--        if (!noauto) {
--                lnk = strjoin(arg_dest, "/", post, nofail || automount ? ".wants/" : ".requires/", name, NULL);
-+        if (!noauto && !automount) {
-+                lnk = strjoin(arg_dest, "/", post, nofail ? ".wants/" : ".requires/", name, NULL);
-                 if (!lnk)
-                         return log_oom();
- 
diff --git a/0999-Add-a-workaround-for-linux-net-if.h-conflict.patch b/0999-Add-a-workaround-for-linux-net-if.h-conflict.patch
deleted file mode 100644
index af68975..0000000
--- a/0999-Add-a-workaround-for-linux-net-if.h-conflict.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-From d9e075d88e7d9d82464147d8283771d709c14ef8 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
-Date: Tue, 9 Feb 2016 15:13:33 -0500
-Subject: [PATCH] Add a workaround for {linux/net}/if.h conflict
-
-Include linux/if.h and make sure we don't include the other file.
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1300256
----
- src/shared/firewall-util.c | 3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
-diff --git a/src/shared/firewall-util.c b/src/shared/firewall-util.c
-index 0d3da2e..c38f9cc 100644
---- a/src/shared/firewall-util.c
-+++ b/src/shared/firewall-util.c
-@@ -16,15 +16,16 @@
-   You should have received a copy of the GNU Lesser General Public License
-   along with systemd; If not, see <http://www.gnu.org/licenses/>.
- ***/
-+#define _NET_IF_H 1
- 
- #include <alloca.h>
- #include <arpa/inet.h>
- #include <endian.h>
- #include <errno.h>
--#include <net/if.h>
- #include <stddef.h>
- #include <string.h>
- #include <sys/socket.h>
-+#include <linux/if.h>
- #include <linux/netfilter_ipv4/ip_tables.h>
- #include <linux/netfilter/nf_nat.h>
- #include <linux/netfilter/xt_addrtype.h>
--- 
-2.5.0
-
diff --git a/sources b/sources
index 6588311..ce780e6 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-5d696f65381b2608da70544df07c2b3c  systemd-229.tar.gz
+f2f10a6f100c38582b4f02d60210227d  systemd-230.tar.gz
diff --git a/systemd.spec b/systemd.spec
index f16f517..832f984 100644
--- a/systemd.spec
+++ b/systemd.spec
@@ -12,8 +12,8 @@
 
 Name:           systemd
 Url:            http://www.freedesktop.org/wiki/Software/systemd
-Version:        229
-Release:        15%{?gitcommit:.git%{gitcommitshort}}%{?dist}
+Version:        230
+Release:        1%{?gitcommit:.git%{gitcommitshort}}%{?dist}
 # For a breakdown of the licensing, see README
 License:        LGPLv2+ and MIT and GPLv2+
 Summary:        A System and Service Manager
@@ -37,33 +37,7 @@ Source7:        systemd-journal-remote.xml
 Source8:        systemd-journal-gatewayd.xml
 Source9:        20-yama-ptrace.conf
 
-Patch0001:      0001-time-util-map-ALARM-clockids-to-non-ALARM-clockids-i.patch
-Patch0002:      0002-core-fix-indenting-in-dump-output.patch
-Patch0003:      0003-networkd-FIONREAD-is-not-reliable-on-some-sockets.patch
-Patch0004:      0004-networkd-rework-idle-detection-logic-of-networkd.patch
-Patch0005:      0005-core-fix-assertion-check.patch
-Patch0006:      0006-udev-fix-cg_unified-return-code-checking.patch
-Patch0007:      0007-core-revert-core-resolve-specifier-in-config_parse_e.patch
-Patch0008:      0008-activate-fix-E-option-parsing.patch
-Patch0009:      0009-basic-strbuf-do-not-call-bsearch-with-a-null-argumen.patch
-Patch0010:      0010-udev-path_id-correct-segmentation-fault-due-to-missi.patch
-Patch0011:      0011-networkd-make-sure-we-allocate-the-NTA-set-before-we.patch
-Patch0012:      0012-networkd-tunnel-fix-tunnel-address.patch
-Patch0013:      0013-calendarspec-fix-find_next-skipping-times.patch
-Patch0014:      0014-core-exclude-.slice-units-from-systemctl-isolate.patch
-Patch0015:      0015-shorten-hostname-before-checking-for-trailing-dot.patch
-Patch0016:      0016-hashmap-use-void-and-uint8_t-for-generic-pointers.patch
-Patch0017:      0017-resolved-fix-notification-iteration-logic-when-trans.patch
-Patch0018:      0018-selinux-always-try-to-load-the-full-selinux-db.patch
-Patch0019:      0019-selinux-use-raw-variants-of-security_compute_create-.patch
-Patch0020:      0020-test-compress-benchmark-skip-loop-iteration-if-size-.patch
-Patch0021:      0021-time-util-fall-back-to-CLOCK_MONOTONIC-if-CLOCK_BOOT.patch
-Patch0022:      0022-headers-use-__inline__-instead-of-inline.patch
-Patch0023:      0023-dev-console-must-be-labeled-with-SELinux-label.patch
-Patch0024:      0024-fstab-generator-fix-automount-option-and-don-t-start.patch
-
 Patch0998:      0998-resolved-create-etc-resolv.conf-symlink-at-runtime.patch
-Patch0999:      0999-Add-a-workaround-for-linux-net-if.h-conflict.patch
 
 # kernel-install patch for grubby, drop if grubby is obsolete
 Patch1000:      kernel-install-grubby.patch
@@ -126,6 +100,7 @@ Requires:       %{name}-pam = %{version}-%{release}
 Requires:       %{name}-libs = %{version}-%{release}
 Recommends:     diffutils
 Requires:       util-linux
+Recommends:     libxkbcommon%{_?isa}
 Provides:       /bin/systemctl
 Provides:       /sbin/shutdown
 Provides:       syslog
@@ -170,23 +145,11 @@ Requires:       %{name} = %{version}-%{release}
 %description pam
 Systemd PAM module registers the session with systemd-logind.
 
-%package compat-libs
-Summary:        systemd compatibility libraries
-License:        LGPLv2+ and MIT
-# To reduce confusion, this package can only be installed in parallel
-# with the normal systemd-libs, same version.
-Requires:       systemd-libs%{?_isa} = %{version}-%{release}
-
-%description compat-libs
-Compatibility libraries for systemd. If your package requires this
-package, you need to update your link options and build.
-
 %package devel
 Summary:        Development headers for systemd
 License:        LGPLv2+ and MIT
 # We need both libsystemd and libsystemd-<compat> libraries
 Requires:       %{name}-libs%{?_isa} = %{version}-%{release}
-Requires:       %{name}-compat-libs%{?_isa} = %{version}-%{release}
 Provides:       libudev-devel = %{version}
 Obsoletes:      libudev-devel < 183
 
@@ -277,8 +240,6 @@ systemd-journal-remote, and systemd-journal-upload.
         --exclude src/core/.gitignore \
         --exclude src/hostname/.gitignore \
         --exclude src/journal/.gitignore \
-        --exclude src/libsystemd-daemon/.gitignore \
-        --exclude src/libsystemd-id128/.gitignore \
         --exclude src/libudev/.gitignore \
         --exclude src/locale/.gitignore \
         --exclude src/login/.gitignore \
@@ -320,7 +281,6 @@ CONFIGURE_OPTS=(
 
 %configure \
         "${CONFIGURE_OPTS[@]}" \
-        --enable-compat-libs \
         --enable-xkbcommon \
         PYTHON=%{__python3}
 make %{?_smp_mflags} GCC_COLORS="" V=1
@@ -534,9 +494,6 @@ fi
 %post libs -p /sbin/ldconfig
 %postun libs -p /sbin/ldconfig
 
-%post compat-libs -p /sbin/ldconfig
-%postun compat-libs -p /sbin/ldconfig
-
 %global udev_services systemd-udev{d,-settle,-trigger}.service systemd-udevd-{control,kernel}.socket systemd-timesyncd.service
 
 %post udev
@@ -651,7 +608,6 @@ getent passwd systemd-journal-upload >/dev/null 2>&1 || useradd -r -l -g systemd
 %config(noreplace) %{_sysconfdir}/systemd/user.conf
 %config(noreplace) %{_sysconfdir}/systemd/logind.conf
 %config(noreplace) %{_sysconfdir}/systemd/journald.conf
-%config(noreplace) %{_sysconfdir}/systemd/bootchart.conf
 %config(noreplace) %{_sysconfdir}/systemd/resolved.conf
 %config(noreplace) %{_sysconfdir}/systemd/coredump.conf
 %config(noreplace) %{_sysconfdir}/yum/protected.d/systemd.conf
@@ -691,6 +647,7 @@ getent passwd systemd-journal-upload >/dev/null 2>&1 || useradd -r -l -g systemd
 %{_bindir}/systemd-resolve
 %{_bindir}/systemd-sysusers
 %{_bindir}/systemd-firstboot
+%{_bindir}/systemd-socket-activate
 %{_bindir}/hostnamectl
 %{_bindir}/localectl
 %{_bindir}/timedatectl
@@ -837,7 +794,6 @@ getent passwd systemd-journal-upload >/dev/null 2>&1 || useradd -r -l -g systemd
 %exclude %{_datadir}/zsh/site-functions/_systemd-nspawn
 %{pkgdir}/catalog/systemd.*.catalog
 %{pkgdir}/network/80-container-host0.network
-%{pkgdir}/network/80-container-ve.network
 
 %ghost %dir %{_localstatedir}/lib/rpm-state/systemd
 
@@ -851,20 +807,10 @@ getent passwd systemd-journal-upload >/dev/null 2>&1 || useradd -r -l -g systemd
 %files pam
 %{_libdir}/security/pam_systemd.so
 
-%files compat-libs
-%{_libdir}/libsystemd-daemon.so.*
-%{_libdir}/libsystemd-login.so.*
-%{_libdir}/libsystemd-journal.so.*
-%{_libdir}/libsystemd-id128.so.*
-
 %files devel
 %dir %{_includedir}/systemd
 %{_libdir}/libudev.so
 %{_libdir}/libsystemd.so
-%{_libdir}/libsystemd-daemon.so
-%{_libdir}/libsystemd-login.so
-%{_libdir}/libsystemd-journal.so
-%{_libdir}/libsystemd-id128.so
 %{_includedir}/systemd/sd-daemon.h
 %{_includedir}/systemd/sd-login.h
 %{_includedir}/systemd/sd-journal.h
@@ -878,10 +824,6 @@ getent passwd systemd-journal-upload >/dev/null 2>&1 || useradd -r -l -g systemd
 %{_includedir}/libudev.h
 %{_libdir}/pkgconfig/libudev.pc
 %{_libdir}/pkgconfig/libsystemd.pc
-%{_libdir}/pkgconfig/libsystemd-daemon.pc
-%{_libdir}/pkgconfig/libsystemd-login.pc
-%{_libdir}/pkgconfig/libsystemd-journal.pc
-%{_libdir}/pkgconfig/libsystemd-id128.pc
 %{_mandir}/man3/*
 
 %files udev
@@ -985,6 +927,8 @@ getent passwd systemd-journal-upload >/dev/null 2>&1 || useradd -r -l -g systemd
 %{pkgdir}/systemd-import
 %{pkgdir}/systemd-importd
 %{pkgdir}/systemd-pull
+%{pkgdir}/network/80-container-ve.network
+%{pkgdir}/network/80-container-vz.network
 %{_datadir}/dbus-1/system-services/org.freedesktop.machine1.service
 %{_datadir}/dbus-1/system-services/org.freedesktop.import1.service
 %{_datadir}/polkit-1/actions/org.freedesktop.import1.policy
@@ -1015,6 +959,12 @@ getent passwd systemd-journal-upload >/dev/null 2>&1 || useradd -r -l -g systemd
 %{_mandir}/man[1578]/systemd-nspawn.*
 
 %changelog
+* Wed May 18 2016 Zbigniew Jędrzejewski-Szmek <zbyszek@bupkis> - 230-1
+- New version
+- Drop compat-libs
+- Require libxkbcommon explictly, since the automatic dependency will
+  not be generated anymore
+
 * Tue Apr 26 2016 Zbigniew Jędrzejewski-Szmek <zbyszek@bupkis> - 229-15
 - Remove duplicated entries in -container %%files (#1330395)