diff --git a/.cockpit.metadata b/.cockpit.metadata
index 8e16f96..9e5b49f 100644
--- a/.cockpit.metadata
+++ b/.cockpit.metadata
@@ -1 +1 @@
-236c4ed6fc4cfc4d78edf1d6fc9c54de08d82432 SOURCES/cockpit-160.tar.xz
+dca96395c50ceb53ea1b9ccebdd48545977b9e91 SOURCES/cockpit-165.tar.xz
diff --git a/.gitignore b/.gitignore
index d294e5d..afd96c1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1 @@
-SOURCES/cockpit-160.tar.xz
+SOURCES/cockpit-165.tar.xz
diff --git a/SPECS/cockpit.spec b/SPECS/cockpit.spec
index eb44907..daff981 100644
--- a/SPECS/cockpit.spec
+++ b/SPECS/cockpit.spec
@@ -22,6 +22,13 @@
 # define to build the dashboard
 %define build_dashboard 1
 
+# on RHEL 7.x we build subscriptions; superseded in RHEL 8 (and Fedora) by
+# external subscription-manager-cockpit
+%if 0%{?rhel} >= 7 && 0%{?rhel} < 8
+%define build_subscriptions 1
+%endif
+
+
 %define libssh_version 0.7.1
 %if 0%{?fedora} > 0 && 0%{?fedora} < 22
 %define libssh_version 0.6.0
@@ -33,12 +40,12 @@ Summary:        A user interface for Linux servers
 License:        LGPLv2+
 URL:            http://cockpit-project.org/
 
-Version:        160
+Version:        165
 %if %{defined wip}
 Release:        1.%{wip}%{?dist}
 Source0:        cockpit-%{version}.tar.gz
 %else
-Release:        1%{?dist}
+Release:        3%{?dist}
 Source0:        https://github.com/cockpit-project/cockpit/releases/download/%{version}/cockpit-%{version}.tar.xz
 %endif
 
@@ -83,7 +90,10 @@ Requires: %{name}-system = %{version}-%{release}
 Recommends: %{name}-dashboard = %{version}-%{release}
 Recommends: %{name}-networkmanager = %{version}-%{release}
 Recommends: %{name}-storaged = %{version}-%{release}
-Recommends: sscg >= 2.0.4
+Recommends: sscg >= 2.3
+%if 0%{?rhel} >= 8
+Recommends: subscription-manager-cockpit
+%endif
 %ifarch x86_64 %{arm} aarch64 ppc64le i686 s390x
 Recommends: %{name}-docker = %{version}-%{release}
 %endif
@@ -127,7 +137,13 @@ fi
 
 %build
 exec 2>&1
-%configure --disable-silent-rules --with-cockpit-user=cockpit-ws --with-selinux-config-type=etc_t %{?rhel:--without-storaged-iscsi-sessions} %{!?build_dashboard:--disable-ssh}
+%configure \
+    --disable-silent-rules \
+    --with-cockpit-user=cockpit-ws \
+    --with-selinux-config-type=etc_t \
+    %{?rhel:--without-storaged-iscsi-sessions} \
+    --with-appstream-data-packages='[ "appstream-data" ]' \
+    %{!?build_dashboard:--disable-ssh}
 make -j4 %{?extra_flags} all
 
 %check
@@ -186,8 +202,12 @@ find %{buildroot}%{_datadir}/%{name}/kdump -type f >> kdump.list
 echo '%dir %{_datadir}/%{name}/sosreport' > sosreport.list
 find %{buildroot}%{_datadir}/%{name}/sosreport -type f >> sosreport.list
 
-echo '%dir %{_datadir}/%{name}/subscriptions' > subscriptions.list
-find %{buildroot}%{_datadir}/%{name}/subscriptions -type f >> subscriptions.list
+%if %{defined build_subscriptions}
+echo '%dir %{_datadir}/%{name}/subscriptions' >> system.list
+find %{buildroot}%{_datadir}/%{name}/subscriptions -type f >> system.list
+%else
+rm -rf %{buildroot}/%{_datadir}/%{name}/subscriptions
+%endif
 
 echo '%dir %{_datadir}/%{name}/storaged' > storaged.list
 find %{buildroot}%{_datadir}/%{name}/storaged -type f >> storaged.list
@@ -204,6 +224,9 @@ find %{buildroot}%{_datadir}/%{name}/packagekit -type f >> packagekit.list
 echo '%dir %{_datadir}/%{name}/machines' > machines.list
 find %{buildroot}%{_datadir}/%{name}/machines -type f >> machines.list
 
+echo '%dir %{_datadir}/%{name}/ovirt' > ovirt.list
+find %{buildroot}%{_datadir}/%{name}/ovirt -type f >> ovirt.list
+
 # on CentOS systems we don't have the required setroubleshoot-server packages
 %if 0%{?centos}
 rm -rf %{buildroot}%{_datadir}/%{name}/selinux
@@ -235,8 +258,10 @@ rm %{buildroot}/%{_libexecdir}/cockpit-stub
 touch kubernetes.list
 %endif
 
-# On RHEL and CentOS, apps/ovirt are not currently built
-rm -rf %{buildroot}/%{_datadir}/%{name}/apps %{buildroot}/%{_datadir}/%{name}/ovirt
+# On RHEL, apps is not currently built
+%if 0%{?rhel}
+rm -rf %{buildroot}/%{_datadir}/%{name}/apps
+%endif
 
 sed -i "s|%{buildroot}||" *.list
 
@@ -248,9 +273,9 @@ sed -i '/\.map\(\.gz\)\?$/d' *.list
 tar -C %{buildroot}/usr/src/debug -cf - . | tar -C %{buildroot} -xf -
 rm -rf %{buildroot}/usr/src/debug
 
-# On RHEL kdump, subscriptions, networkmanager, selinux, and sosreport are part of the system package
+# On RHEL kdump, networkmanager, selinux, and sosreport are part of the system package
 %if 0%{?rhel}
-cat kdump.list subscriptions.list sosreport.list networkmanager.list selinux.list >> system.list
+cat kdump.list sosreport.list networkmanager.list selinux.list >> system.list
 rm %{buildroot}/usr/share/metainfo/org.cockpit-project.cockpit-sosreport.metainfo.xml
 rm %{buildroot}/usr/share/pixmaps/cockpit-sosreport.png
 %endif
@@ -260,8 +285,12 @@ rm %{buildroot}/usr/share/pixmaps/cockpit-sosreport.png
 # dwz has trouble with the go binaries
 # https://fedoraproject.org/wiki/PackagingDrafts/Go
 %global _dwz_low_mem_die_limit 0
+%if 0%{?fedora} >= 27 || 0%{?rhel} >= 8
+%global _debugsource_packages 1
+%global _debuginfo_subpackages 0
+%endif
 
-%define find_debug_info %{_rpmconfigdir}/find-debuginfo.sh %{?_missing_build_ids_terminate_build:--strict-build-id} %{?_include_minidebuginfo:-m} %{?_find_debuginfo_dwz_opts} %{?_find_debuginfo_opts} "%{_builddir}/%{?buildsubdir}"
+%define find_debug_info %{_rpmconfigdir}/find-debuginfo.sh %{?_missing_build_ids_terminate_build:--strict-build-id} %{?_include_minidebuginfo:-m} %{?_find_debuginfo_dwz_opts} %{?_find_debuginfo_opts} %{?_debugsource_packages:-S debugsourcefiles.list} "%{_builddir}/%{?buildsubdir}"
 
 # Redefine how debug info is built to slip in our extra debug files
 %define __debug_install_post   \
@@ -308,12 +337,35 @@ Requires: %{name}-bridge >= %{required_base}
 Requires: %{name}-system >= %{required_base}
 Requires: libvirt
 Requires: libvirt-client
+# Optional components (for f24 we use soft deps)
+%if 0%{?fedora} >= 24 || 0%{?rhel} >= 8
+Recommends: virt-install
+%endif
 
 %description machines
 The Cockpit components for managing virtual machines.
 
+If "virt-install" is installed, you can also create new virtual machines.
+
 %files machines -f machines.list
 
+%package machines-ovirt
+BuildArch: noarch
+Summary: Cockpit user interface for oVirt virtual machines
+Requires: %{name}-bridge >= %{required_base}
+Requires: %{name}-system >= %{required_base}
+Requires: libvirt
+Requires: libvirt-client
+# package of old name "cockpit-ovirt" was shipped on fedora only
+%if 0%{?fedora} >= 25
+Obsoletes: %{name}-ovirt < 161
+%endif
+
+%description machines-ovirt
+The Cockpit components for managing oVirt virtual machines.
+
+%files machines-ovirt -f ovirt.list
+
 %package ostree
 Summary: Cockpit user interface for rpm-ostree
 # Requires: Uses new translations functionality
@@ -375,20 +427,16 @@ else
 fi
 %endif
 
+# storaged on RHEL 7.4 and Fedora < 27, udisks on newer ones
+# Recommends: not supported in RHEL < 8
 %package storaged
 Summary: Cockpit user interface for storage, using Storaged
 Requires: %{name}-shell >= %{required_base}
-Requires: storaged >= 2.1.1
-%if 0%{?fedora} >= 24 || 0%{?rhel} >= 8
-Recommends: storaged-lvm2 >= 2.1.1
-Recommends: storaged-iscsi >= 2.1.1
-Recommends: device-mapper-multipath
-%else
-Requires: storaged-lvm2 >= 2.1.1
-Requires: storaged-iscsi >= 2.1.1
+Requires: udisks2 >= 2.6
+Requires: udisks2-lvm2 >= 2.6
+Requires: udisks2-iscsi >= 2.6
 Requires: device-mapper-multipath
-%endif
-%if 0%{?fedora}
+%if 0%{?fedora} || 0%{?rhel} >= 8
 Requires: python3
 Requires: python3-dbus
 %else
@@ -422,12 +470,17 @@ Requires: NetworkManager
 Provides: %{name}-kdump = %{version}-%{release}
 Requires: kexec-tools
 # Optional components (only when soft deps are supported)
+%if 0%{?fedora} >= 24 || 0%{?rhel} >= 8
+Recommends: polkit
+%endif
 %if 0%{?rhel} >= 8
 Recommends: NetworkManager-team
 Recommends: setroubleshoot-server >= 3.3.3
 %endif
 Provides: %{name}-selinux = %{version}-%{release}
 Provides: %{name}-sosreport = %{version}-%{release}
+%endif
+%if %{defined build_subscriptions}
 Provides: %{name}-subscriptions = %{version}-%{release}
 Requires: subscription-manager >= 1.13
 %endif
@@ -452,7 +505,7 @@ These files are not required for running Cockpit.
 %files tests
 %config(noreplace) %{_sysconfdir}/cockpit/cockpit.conf
 %{_datadir}/%{name}/playground
-%{_prefix}/lib/cockpit-test-assets
+%{_prefix}/%{__lib}/cockpit-test-assets
 
 %package ws
 Summary: Cockpit Web Service
@@ -535,19 +588,6 @@ sosreport tool.
 /usr/share/metainfo/org.cockpit-project.cockpit-sosreport.metainfo.xml
 /usr/share/pixmaps/cockpit-sosreport.png
 
-%package subscriptions
-Summary: Cockpit subscription user interface package
-Requires: %{name}-bridge >= %{required_base}
-Requires: %{name}-shell >= %{required_base}
-Requires: subscription-manager >= 1.13
-BuildArch: noarch
-
-%description subscriptions
-This package contains the Cockpit user interface integration with local
-subscription management.
-
-%files subscriptions -f subscriptions.list
-
 %package networkmanager
 Summary: Cockpit user interface for networking, using NetworkManager
 Requires: %{name}-bridge >= %{required_base}
@@ -592,7 +632,12 @@ Summary: Cockpit user interface for Docker containers
 Requires: %{name}-bridge >= %{required_base}
 Requires: %{name}-shell >= %{required_base}
 Requires: /usr/bin/docker
-Requires: python
+Requires: /usr/lib/systemd/system/docker.service
+%if 0%{?fedora} || 0%{?rhel} >= 8
+Requires: python3
+%else
+Requires: python2
+%endif
 
 %description docker
 The Cockpit components for interacting with Docker and user interface.
@@ -634,38 +679,46 @@ The Cockpit component for installing package updates, via PackageKit.
 
 %files packagekit -f packagekit.list
 
-
 %changelog
-* Mon Jan 29 2018 Martin Pitt <mpitt@redhat.com> 160-1
- - Add check boxes for common NFS mount options
- - Redesign package list on Software Updates page and show RHEL Errata
- - Clarify Software Update status if only security updates are available
- - Add serial console to virtual Machines page and redesign the Consoles tab
- - Show more error message details for failures on virtual Machines page
-
-* Fri Dec 08 2017 Martin Pitt <mpitt@redhat.com> 157-1
- - Correctly compute "used" space for NFS mounts
-
-* Tue Nov 07 2017 Martin Pitt <mpitt@redhat.com> 155-1
- - Add NFS client support to the Storage page
- - Add checkboxes for common Storage encryption and mount options
-
-* Thu Sep 21 2017 Martin Pitt <mpitt@redhat.com> 151-1
-- Fix tooltip on "Edit Server" button on Dashboard rhbz#1449887
-
-* Fri Aug 04 2017 Martin Pitt <mpitt@redhat.com> 148-1
-- Update Cluster/Registry Image tags design to current Openshift Web Console
-- Delete Kubernetes session tokens on logout
-- Detect unregistered RHEL systems on Software Updates page
-
-* Thu Jul 27 2017 Dominik Perpeet <dperpeet@redhat.com> 147-1
-- Update to 147 release
-- Add "Software Updates" page for packages
-- Fix Kubernetes authentication when Kubernetes configured for RBAC
-- Add configuration of account locking and password expiry to Accounts page
-- Consistently ignore loopback traffic on all network load graphs
-- Add ABRT integration to the System page
-- Resize the terminal dynamically to use all available space
+* Tue Apr 17 2018 Martin Pitt <mpitt@redhat.com> 165-3
+- Revert "noarch" change for cockpit-doc as well
+
+* Tue Apr 17 2018 Martin Pitt <mpitt@redhat.com> 165-2
+- Revert "noarch" changes from 165-1, they cause too much fallout
+
+* Fri Apr 13 2018 Martin Pitt <mpitt@redhat.com> 165-1
+- Update to 165 release
+- New VMs can be created on Machines page
+- Improve LVM volume resizing
+- Hide Docker storage pool reset button when it cannot work properly
+- Move NFS management into new details page
+- Show more details of sessions and services that keep NFS busy
+- Machines page now shows proper error notifications
+- Show virtual machines that are being created
+- Detect if libvirtd is not running and offer to start and/or enable it
+- Enable building of cockpit-machines-ovirt rhbz#1515796
+
+* Mon Feb 26 2018 Martin Pitt <mpitt@redhat.com> 160-3
+- storaged: Drop VDO async option rhbz#1548988
+
+* Mon Jan 29 2018 Martin Pitt <mpitt@redhat.com> 160-2
+- Add kubevirt Virtual Machines overview
+- Redesign package list on Software Updates page and show RHEL Errata
+
+* Wed Jan 10 2018 Martin Pitt <mpitt@redhat.com> 159-1
+- Update to 159 release
+- Configure data deduplication with VDO devices on Storage page
+- Add serial console to virtual Machines page and redesign the Consoles tab
+- Show more error message details for failures on virtual Machines page
+
+* Thu Dec 14 2017 Martin Pitt <mpitt@redhat.com> 158-1
+- Update to 158 release
+- New package "cockpit-packagekit", which provides a "Software Updates" page
+  for installing package updates rhbz#1479836
+- Add NFS client support to the Storage page
+- Add checkboxes for common Storage encryption and mount options
+- Adjust cockpit-storaged dependencies to storaged → udisks2 rename
+  rhbz#1510667
 
 * Thu Jun 29 2017 Dominik Perpeet <dperpeet@redhat.com> 141-4
 - Bump for rebuild on more architectures