diff --git a/.cockpit.metadata b/.cockpit.metadata
index 86f5aad..62efc42 100644
--- a/.cockpit.metadata
+++ b/.cockpit.metadata
@@ -1 +1 @@
-b15bce22d7aaf99e60d0fb12678b5298c49bc2a6 SOURCES/cockpit-196.tar.xz
+b88c95b0f9b613e27161704c1e0145e7adaeab92 SOURCES/cockpit-209.tar.xz
diff --git a/.gitignore b/.gitignore
index a6f0cbd..04b0ebe 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1 @@
-SOURCES/cockpit-196.tar.xz
+SOURCES/cockpit-209.tar.xz
diff --git a/SPECS/cockpit.spec b/SPECS/cockpit.spec
index f113756..91d4795 100644
--- a/SPECS/cockpit.spec
+++ b/SPECS/cockpit.spec
@@ -1,6 +1,6 @@
 # This spec file has been automatically updated
-Version:        196
-Release: 1%{?dist}
+Version:        209
+Release: 2%{?dist}
 #
 # This file is maintained at the following location:
 # https://github.com/cockpit-project/cockpit/blob/master/tools/cockpit.spec
@@ -44,40 +44,9 @@ Release: 1%{?dist}
 # build optional extensions like cockpit-docker
 %define build_optional 0
 
-# cockpit's firewall service definition moved to firewalld
-%if 0%{?fedora} || 0%{?rhel} >= 8
-%define firewalld_service 0
-%else
-%define firewalld_service 1
-%endif
-
 %define __lib lib
 
-# on RHEL 7.x we build subscriptions; superseded later by
-# external subscription-manager-cockpit
-%if (0%{?rhel} >= 7 && 0%{?rhel} < 8) && 0%{?centos} == 0
-%define build_subscriptions 1
-%endif
-
-# cockpit-kubernetes is RHEL 7 64 bit only
-%if 0%{?rhel} >= 7 && 0%{?rhel} < 8
-%ifarch aarch64 x86_64 ppc64le s390x
-%define build_kubernetes 1
-%endif
-%endif
-
-# cockpit-machines-ovirt is RHEL 7 only
-%if 0%{?rhel} >= 7 && 0%{?rhel} < 8
-%define build_ovirt 1
-%endif
-
-%if 0%{?rhel} >= 8
-%global go_scl_prefix go-toolset-7-
-%else
-%global go_scl_prefix %{nil}
-%endif
-
-%if 0%{?rhel} >= 7
+%if 0%{?rhel}
 %define vdo_on_demand 1
 %endif
 
@@ -100,25 +69,22 @@ BuildRequires: pkgconfig(polkit-agent-1) >= 0.105
 BuildRequires: pam-devel
 
 BuildRequires: autoconf automake
-%if 0%{?fedora} || 0%{?rhel} >= 8
 BuildRequires: /usr/bin/python3
-%else
-BuildRequires: /usr/bin/python2
-%endif
-BuildRequires: intltool
+BuildRequires: gettext >= 0.19.7
 %if %{defined build_dashboard}
-BuildRequires: libssh-devel >= 0.7.1
+BuildRequires: libssh-devel >= 0.8
 %endif
 BuildRequires: openssl-devel
+BuildRequires: gnutls-devel >= 3.4.3
 BuildRequires: zlib-devel
-BuildRequires: krb5-devel
+BuildRequires: krb5-devel >= 1.11
 BuildRequires: libxslt-devel
 BuildRequires: docbook-style-xsl
 BuildRequires: glib-networking
 BuildRequires: sed
 
 BuildRequires: glib2-devel >= 2.37.4
-BuildRequires: systemd-devel
+BuildRequires: systemd-devel >= 235
 BuildRequires: pcp-libs-devel
 BuildRequires: krb5-server
 BuildRequires: gdb
@@ -135,25 +101,20 @@ Requires: cockpit-ws
 Requires: cockpit-system
 
 # Optional components
-%if 0%{?fedora} || 0%{?rhel} >= 8
 %if 0%{?rhel} == 0
 Recommends: cockpit-dashboard
 %ifarch x86_64 %{arm} aarch64 ppc64le i686 s390x
 Recommends: (cockpit-docker if /usr/bin/docker)
 %endif
-%endif
 Recommends: (cockpit-networkmanager if NetworkManager)
 Recommends: (cockpit-storaged if udisks2)
 Recommends: cockpit-packagekit
-%if 0%{?rhel} >= 8 && 0%{?centos} == 0
-Recommends: subscription-manager-cockpit
-%endif
 Suggests: cockpit-pcp
-%if 0%{?build_kubernetes}
-Suggests: cockpit-kubernetes
-%endif
 Suggests: cockpit-selinux
 %endif
+%if 0%{?rhel} && 0%{?centos} == 0
+Recommends: subscription-manager-cockpit
+%endif
 
 %prep
 %setup -q -n cockpit-%{version}
@@ -163,10 +124,8 @@ exec 2>&1
 %configure \
     --disable-silent-rules \
     --with-cockpit-user=cockpit-ws \
+    --with-cockpit-ws-instance-user=cockpit-wsinstance \
     --with-selinux-config-type=etc_t \
-%if 0%{?rhel} >= 7 && 0%{?rhel} < 8
-    --without-storaged-iscsi-sessions \
-%endif
     --with-appstream-data-packages='[ "appstream-data" ]' \
     --with-nfs-client-package='"nfs-utils"' \
     %{?vdo_on_demand:--with-vdo-package='"vdo"'}
@@ -182,9 +141,8 @@ make install-tests DESTDIR=%{buildroot}
 mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/pam.d
 install -p -m 644 tools/cockpit.pam $RPM_BUILD_ROOT%{_sysconfdir}/pam.d/cockpit
 rm -f %{buildroot}/%{_libdir}/cockpit/*.so
-%if 0%{?firewalld_service} == 0
+# shipped in firewalld since 0.6, everywhere in Fedora/RHEL 8
 rm -f %{buildroot}/%{_prefix}/%{__lib}/firewalld/services/cockpit.xml
-%endif
 install -p -m 644 AUTHORS COPYING README.md %{buildroot}%{_docdir}/cockpit/
 
 # Build the package lists for resource packages
@@ -192,14 +150,8 @@ echo '%dir %{_datadir}/cockpit/base1' > base.list
 find %{buildroot}%{_datadir}/cockpit/base1 -type f >> base.list
 echo '%{_sysconfdir}/cockpit/machines.d' >> base.list
 echo %{buildroot}%{_datadir}/polkit-1/actions/org.cockpit-project.cockpit-bridge.policy >> base.list
-# RHEL 7 needs to keep cockpit-ssh in dashboard for backwards compat
-%if 0%{?rhel} == 7
-find %{buildroot}%{_datadir}/cockpit/ssh -type f >> dashboard.list
-echo '%{_libexecdir}/cockpit-ssh' >> dashboard.list
-%else
 find %{buildroot}%{_datadir}/cockpit/ssh -type f >> base.list
 echo '%{_libexecdir}/cockpit-ssh' >> base.list
-%endif
 
 %if %{defined build_dashboard}
 echo '%dir %{_datadir}/cockpit/dashboard' >> dashboard.list
@@ -233,13 +185,6 @@ find %{buildroot}%{_datadir}/cockpit/kdump -type f >> kdump.list
 echo '%dir %{_datadir}/cockpit/sosreport' > sosreport.list
 find %{buildroot}%{_datadir}/cockpit/sosreport -type f >> sosreport.list
 
-%if %{defined build_subscriptions}
-echo '%dir %{_datadir}/cockpit/subscriptions' >> system.list
-find %{buildroot}%{_datadir}/cockpit/subscriptions -type f >> system.list
-%else
-rm -rf %{buildroot}/%{_datadir}/cockpit/subscriptions
-%endif
-
 echo '%dir %{_datadir}/cockpit/storaged' > storaged.list
 find %{buildroot}%{_datadir}/cockpit/storaged -type f >> storaged.list
 
@@ -255,14 +200,6 @@ find %{buildroot}%{_datadir}/cockpit/apps -type f >> packagekit.list
 echo '%dir %{_datadir}/cockpit/machines' > machines.list
 find %{buildroot}%{_datadir}/cockpit/machines -type f >> machines.list
 
-%if 0%{?build_ovirt}
-echo '%dir %{_datadir}/cockpit/ovirt' > ovirt.list
-find %{buildroot}%{_datadir}/cockpit/ovirt -type f >> ovirt.list
-%else
-rm -rf %{buildroot}/%{_datadir}/cockpit/ovirt
-touch ovirt.list
-%endif
-
 echo '%dir %{_datadir}/cockpit/selinux' > selinux.list
 find %{buildroot}%{_datadir}/cockpit/selinux -type f >> selinux.list
 
@@ -270,7 +207,7 @@ echo '%dir %{_datadir}/cockpit/playground' > tests.list
 find %{buildroot}%{_datadir}/cockpit/playground -type f >> tests.list
 
 %ifarch x86_64 %{arm} aarch64 ppc64le i686 s390x
-%if 0%{?fedora} || 0%{?rhel} < 8
+%if 0%{?fedora}
 echo '%dir %{_datadir}/cockpit/docker' > docker.list
 find %{buildroot}%{_datadir}/cockpit/docker -type f >> docker.list
 %else
@@ -282,21 +219,6 @@ rm -rf %{buildroot}/%{_datadir}/cockpit/docker
 touch docker.list
 %endif
 
-%if 0%{?build_kubernetes}
-%if %{defined wip}
-%else
-rm %{buildroot}/%{_datadir}/cockpit/kubernetes/override.json
-%endif
-echo '%dir %{_datadir}/cockpit/kubernetes' > kubernetes.list
-find %{buildroot}%{_datadir}/cockpit/kubernetes -type f >> kubernetes.list
-%else
-rm -rf %{buildroot}/%{_datadir}/cockpit/kubernetes
-rm -f %{buildroot}/%{_libexecdir}/cockpit-kube-auth
-rm -f %{buildroot}/%{_libexecdir}/cockpit-kube-launch
-rm %{buildroot}/%{_libexecdir}/cockpit-stub
-touch kubernetes.list
-%endif
-
 # when not building basic packages, remove their files
 %if 0%{?build_basic} == 0
 for pkg in base1 branding motd kdump networkmanager realmd selinux shell sosreport ssh static systemd tuned users; do
@@ -309,7 +231,7 @@ done
 for lib in systemd tmpfiles.d firewalld; do
     rm -r %{buildroot}/%{_prefix}/%{__lib}/$lib
 done
-for libexec in cockpit-askpass cockpit-session cockpit-ws cockpit-desktop; do
+for libexec in cockpit-askpass cockpit-session cockpit-ws cockpit-tls cockpit-wsinstance-factory cockpit-desktop; do
     rm %{buildroot}/%{_libexecdir}/$libexec
 done
 rm -r %{buildroot}/%{_libdir}/security %{buildroot}/%{_sysconfdir}/pam.d %{buildroot}/%{_sysconfdir}/motd.d %{buildroot}/%{_sysconfdir}/issue.d
@@ -320,15 +242,13 @@ rm -f %{buildroot}%{_datadir}/metainfo/cockpit.appdata.xml
 
 # when not building optional packages, remove their files
 %if 0%{?build_optional} == 0
-for pkg in apps dashboard docker kubernetes machines ovirt packagekit pcp playground storaged; do
+for pkg in apps dashboard docker machines packagekit pcp playground storaged; do
     rm -rf %{buildroot}/%{_datadir}/cockpit/$pkg
 done
 # files from -tests
 rm -r %{buildroot}/%{_prefix}/%{__lib}/cockpit-test-assets %{buildroot}/%{_sysconfdir}/cockpit/cockpit.conf
 # files from -pcp
 rm -r %{buildroot}/%{_libexecdir}/cockpit-pcp %{buildroot}/%{_localstatedir}/lib/pcp/
-# files from -kubernetes
-rm -f %{buildroot}/%{_libexecdir}/cockpit-kube-auth %{buildroot}/%{_libexecdir}/cockpit-kube-launch %{buildroot}/%{_libexecdir}/cockpit-stub
 # files from -machines
 rm -f %{buildroot}/%{_prefix}/share/metainfo/org.cockpit-project.cockpit-machines.metainfo.xml
 # files from -storaged
@@ -350,24 +270,16 @@ rm -rf %{buildroot}/usr/src/debug
 cat kdump.list sosreport.list networkmanager.list selinux.list >> system.list
 rm -f %{buildroot}%{_datadir}/metainfo/org.cockpit-project.cockpit-sosreport.metainfo.xml
 rm -f %{buildroot}%{_datadir}/metainfo/org.cockpit-project.cockpit-kdump.metainfo.xml
-rm -f %{buildroot}%{_datadir}/pixmaps/cockpit-sosreport.png
-%endif
-
-%if 0%{?rhel}
 rm -f %{buildroot}%{_datadir}/metainfo/org.cockpit-project.cockpit-selinux.metainfo.xml
+rm -f %{buildroot}%{_datadir}/pixmaps/cockpit-sosreport.png
 %endif
 
 %if 0%{?build_basic}
 %find_lang cockpit
 %endif
 
-# dwz has trouble with the go binaries
-# https://fedoraproject.org/wiki/PackagingDrafts/Go
-%global _dwz_low_mem_die_limit 0
-%if 0%{?fedora} || 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} %{?_debugsource_packages:-S debugsourcefiles.list} "%{_builddir}/%{?buildsubdir}"
 
@@ -402,13 +314,11 @@ troubleshooting, interactive command-line sessions, and more.
 %package bridge
 Summary: Cockpit bridge server-side component
 Requires: glib-networking
-%if 0%{?rhel} != 7
 Provides: cockpit-ssh = %{version}-%{release}
 # cockpit-ssh moved from dashboard to bridge in 171
 Conflicts: cockpit-dashboard < 170.x
 # PR #10430 dropped workaround for ws' inability to understand x-host-key challenge
 Conflicts: cockpit-ws < 181.x
-%endif
 
 %description bridge
 The Cockpit bridge component installed server side and runs commands on the
@@ -450,31 +360,26 @@ Provides: cockpit-users = %{version}-%{release}
 %if 0%{?rhel}
 Provides: cockpit-networkmanager = %{version}-%{release}
 Obsoletes: cockpit-networkmanager
-Requires: NetworkManager
+Requires: NetworkManager >= 1.6
 Provides: cockpit-kdump = %{version}-%{release}
 Requires: kexec-tools
-# Optional components (only when soft deps are supported)
-%if 0%{?fedora} || 0%{?rhel} >= 8
 Recommends: polkit
-%endif
-%if 0%{?rhel} >= 8
 Recommends: NetworkManager-team
 Recommends: setroubleshoot-server >= 3.3.3
-%endif
 Provides: cockpit-selinux = %{version}-%{release}
 Provides: cockpit-sosreport = %{version}-%{release}
 %endif
-%if %{defined build_subscriptions}
-Provides: cockpit-subscriptions = %{version}-%{release}
-Requires: subscription-manager >= 1.13
+%if 0%{?fedora} >= 29
+# 0.7.0 (actually) supports task cancellation.
+# 0.7.1 fixes tasks never announcing completion.
+Recommends: (reportd >= 0.7.1 if abrt)
 %endif
 # NPM modules which are also available as packages
-Provides: bundled(js-jquery) = 3.4.0
+Provides: bundled(js-jquery) = 3.4.1
 Provides: bundled(js-moment) = 2.24.0
 Provides: bundled(nodejs-flot) = 0.8.3
-Provides: bundled(nodejs-promise) = 8.0.3
 Provides: bundled(xstatic-bootstrap-datepicker-common) = 1.9.0
-Provides: bundled(xstatic-patternfly-common) = 3.58.0
+Provides: bundled(xstatic-patternfly-common) = 3.59.4
 
 %description system
 This package contains the Cockpit shell and system configuration interfaces.
@@ -486,18 +391,11 @@ Summary: Cockpit Web Service
 Requires: glib-networking
 Requires: openssl
 Requires: glib2 >= 2.37.4
-# RHEL/CentOS 7 has firewalld 0.6.x, but does not ship cockpit service
-%if 0%{?rhel} != 7
-%if 0%{?firewalld_service}
-Conflicts: firewalld >= 0.6.0-1
-%else
 Conflicts: firewalld < 0.6.0-1
-%endif
-%endif
-%if 0%{?fedora} || 0%{?rhel} >= 8
 Recommends: sscg >= 2.3
 Recommends: system-logos
-%endif
+Requires: systemd >= 235
+Suggests: sssd-dbus
 Requires(post): systemd
 Requires(preun): systemd
 Requires(postun): systemd
@@ -505,11 +403,16 @@ Requires(postun): systemd
 %description ws
 The Cockpit Web Service listens on the network, and authenticates users.
 
+If sssd-dbus is installed, you can enable client certificate/smart card
+authentication via sssd/FreeIPA.
+
 %files ws -f cockpit.lang
 %doc %{_mandir}/man1/cockpit-desktop.1.gz
 %doc %{_mandir}/man5/cockpit.conf.5.gz
 %doc %{_mandir}/man8/cockpit-ws.8.gz
+%doc %{_mandir}/man8/cockpit-tls.8.gz
 %doc %{_mandir}/man8/remotectl.8.gz
+%doc %{_mandir}/man8/pam_cockpit_cert.8.gz
 %doc %{_mandir}/man8/pam_ssh_add.8.gz
 %config(noreplace) %{_sysconfdir}/cockpit/ws-certs.d
 %config(noreplace) %{_sysconfdir}/pam.d/cockpit
@@ -520,22 +423,33 @@ The Cockpit Web Service listens on the network, and authenticates users.
 %{_unitdir}/cockpit.service
 %{_unitdir}/cockpit-motd.service
 %{_unitdir}/cockpit.socket
-%if 0%{?firewalld_service}
-%{_prefix}/%{__lib}/firewalld/services/cockpit.xml
-%endif
+%{_unitdir}/cockpit-wsinstance-http.socket
+%{_unitdir}/cockpit-wsinstance-http.service
+%{_unitdir}/cockpit-wsinstance-http-redirect.socket
+%{_unitdir}/cockpit-wsinstance-http-redirect.service
+%{_unitdir}/cockpit-wsinstance-https-factory.socket
+%{_unitdir}/cockpit-wsinstance-https-factory@.service
+%{_unitdir}/cockpit-wsinstance-https@.socket
+%{_unitdir}/cockpit-wsinstance-https@.service
+%{_unitdir}/system-cockpithttps.slice
 %{_prefix}/%{__lib}/tmpfiles.d/cockpit-tempfiles.conf
 %{_sbindir}/remotectl
 %{_libdir}/security/pam_ssh_add.so
+%{_libdir}/security/pam_cockpit_cert.so
 %{_libexecdir}/cockpit-ws
+%{_libexecdir}/cockpit-wsinstance-factory
+%{_libexecdir}/cockpit-tls
 %{_libexecdir}/cockpit-desktop
-%attr(4750, root, cockpit-ws) %{_libexecdir}/cockpit-session
+%attr(4750, root, cockpit-wsinstance) %{_libexecdir}/cockpit-session
 %attr(775, -, wheel) %{_localstatedir}/lib/cockpit
 %{_datadir}/cockpit/static
 %{_datadir}/cockpit/branding
 
 %pre ws
 getent group cockpit-ws >/dev/null || groupadd -r cockpit-ws
-getent passwd cockpit-ws >/dev/null || useradd -r -g cockpit-ws -d /nonexisting -s /sbin/nologin -c "User for cockpit-ws" cockpit-ws
+getent passwd cockpit-ws >/dev/null || useradd -r -g cockpit-ws -d /nonexisting -s /sbin/nologin -c "User for cockpit web service" cockpit-ws
+getent group cockpit-wsinstance >/dev/null || groupadd -r cockpit-wsinstance
+getent passwd cockpit-wsinstance >/dev/null || useradd -r -g cockpit-wsinstance -d /nonexisting -s /sbin/nologin -c "User for cockpit-ws instances" cockpit-wsinstance
 
 %post ws
 %systemd_post cockpit.socket
@@ -584,13 +498,11 @@ sosreport tool.
 
 %package networkmanager
 Summary: Cockpit user interface for networking, using NetworkManager
-Requires: cockpit-bridge >= 122
-Requires: cockpit-shell >= 122
-Requires: NetworkManager
-# Optional components (only when soft deps are supported)
-%if 0%{?fedora} || 0%{?rhel} >= 8
+Requires: cockpit-bridge >= 186
+Requires: cockpit-shell >= 186
+Requires: NetworkManager >= 1.6
+# Optional components
 Recommends: NetworkManager-team
-%endif
 BuildArch: noarch
 
 %description networkmanager
@@ -606,9 +518,7 @@ The Cockpit component for managing networking.  This package uses NetworkManager
 Summary: Cockpit SELinux package
 Requires: cockpit-bridge >= 122
 Requires: cockpit-shell >= 122
-%if 0%{?fedora} || 0%{?rhel} >= 8
 Requires: setroubleshoot-server >= 3.3.3
-%endif
 BuildArch: noarch
 
 %description selinux
@@ -635,23 +545,14 @@ Dummy package from building optional packages only; never install or publish me.
 
 %package -n cockpit-storaged
 Summary: Cockpit user interface for storage, using udisks
-Requires: cockpit-shell >= 122
+Requires: cockpit-shell >= 186
 Requires: udisks2 >= 2.6
-%if 0%{?rhel} == 7
-# Recommends: not supported in RHEL <= 7
-Requires: udisks2-lvm2 >= 2.6
-Requires: udisks2-iscsi >= 2.6
-Requires: device-mapper-multipath
-Requires: python
-Requires: python-dbus
-%else
 Recommends: udisks2-lvm2 >= 2.6
 Recommends: udisks2-iscsi >= 2.6
 Recommends: device-mapper-multipath
 Recommends: clevis-luks
 Requires: %{__python3}
 Requires: python3-dbus
-%endif
 BuildArch: noarch
 
 %description -n cockpit-storaged
@@ -678,21 +579,15 @@ These files are not required for running Cockpit.
 %package -n cockpit-machines
 BuildArch: noarch
 Summary: Cockpit user interface for virtual machines
-Requires: cockpit-bridge >= 122
-Requires: cockpit-system >= 122
-%if 0%{?rhel} == 7
-Requires: libvirt
-%else
-Requires: (libvirt-daemon-kvm or libvirt)
-%endif
+Requires: cockpit-bridge >= 186
+Requires: cockpit-system >= 186
+Requires: libvirt-daemon-kvm
 Requires: libvirt-client
-%if 0%{?fedora} || 0%{?rhel} >= 8
 Requires: libvirt-dbus >= 1.2.0
 # Optional components
 Recommends: virt-install
 Recommends: libosinfo
 Recommends: python3-gobject-base
-%endif
 
 %description -n cockpit-machines
 The Cockpit components for managing virtual machines.
@@ -702,27 +597,6 @@ If "virt-install" is installed, you can also create new virtual machines.
 %files -n cockpit-machines -f machines.list
 %{_datadir}/metainfo/org.cockpit-project.cockpit-machines.metainfo.xml
 
-%if 0%{?build_ovirt}
-
-%package -n cockpit-machines-ovirt
-BuildArch: noarch
-Summary: Cockpit user interface for oVirt virtual machines
-Requires: cockpit-bridge >= 122
-Requires: cockpit-system >= 122
-%if 0%{?rhel} == 7
-Requires: libvirt
-%else
-Requires: (libvirt-daemon-kvm or libvirt)
-%endif
-Requires: libvirt-client
-
-%description -n cockpit-machines-ovirt
-The Cockpit components for managing oVirt virtual machines.
-
-%files -n cockpit-machines-ovirt -f ovirt.list
-
-%endif
-
 %package -n cockpit-pcp
 Summary: Cockpit PCP integration
 Requires: cockpit-bridge >= 134.x
@@ -744,17 +618,9 @@ Cockpit support for reading PCP metrics and loading PCP archives.
 %if %{defined build_dashboard}
 %package -n cockpit-dashboard
 Summary: Cockpit remote servers and dashboard
-%if 0%{?rhel} == 7
-Provides: cockpit-ssh = %{version}-%{release}
-# nothing depends on the dashboard, but we can't use it with older versions of the bridge
-Conflicts: cockpit-bridge < 135
-# PR #10430 dropped workaround for ws' inability to understand x-host-key challenge
-Conflicts: cockpit-ws < 173.1
-%else
 BuildArch: noarch
 Requires: cockpit-ssh >= 135
 Conflicts: cockpit-ws < 135
-%endif
 
 %description -n cockpit-dashboard
 Cockpit support for connecting to remote servers (through ssh),
@@ -765,19 +631,13 @@ bastion hosts, and a basic dashboard.
 %endif
 
 %ifarch x86_64 %{arm} aarch64 ppc64le i686 s390x
-
-%if 0%{?fedora} || 0%{?rhel} < 8
+%if 0%{?fedora}
 %package -n cockpit-docker
 Summary: Cockpit user interface for Docker containers
 Requires: cockpit-bridge >= 122
 Requires: cockpit-shell >= 122
-Requires: /usr/bin/docker
-Requires: /usr/lib/systemd/system/docker.service
-%if 0%{?fedora}
+Requires: (docker or moby-engine or docker-ce)
 Requires: %{__python3}
-%else
-Requires: python2
-%endif
 
 %description -n cockpit-docker
 The Cockpit components for interacting with Docker and user interface.
@@ -788,36 +648,10 @@ This package is not yet complete.
 %endif
 %endif
 
-%if 0%{?build_kubernetes}
-
-%package -n cockpit-kubernetes
-Summary: Cockpit user interface for Kubernetes cluster
-Requires: /usr/bin/kubectl
-# Requires: Needs newer localization support
-Requires: cockpit-bridge >= 137.x
-Requires: cockpit-shell >= 137.x
-BuildRequires: %{go_scl_prefix}golang-bin
-BuildRequires: %{go_scl_prefix}golang-src
-Provides: cockpit-stub = %{version}-%{release}
-
-%description -n cockpit-kubernetes
-The Cockpit components for visualizing and configuring a Kubernetes
-cluster. Installed on the Kubernetes master. This package is not yet complete.
-
-%if 0%{?rhel} >= 8
-%enable_gotoolset7
-%endif
-
-%files -n cockpit-kubernetes -f kubernetes.list
-%{_libexecdir}/cockpit-kube-auth
-%{_libexecdir}/cockpit-kube-launch
-%{_libexecdir}/cockpit-stub
-%endif
-
 %package -n cockpit-packagekit
 Summary: Cockpit user interface for packages
 BuildArch: noarch
-Requires: cockpit-bridge >= 138
+Requires: cockpit-bridge >= 186
 Requires: PackageKit
 
 %description -n cockpit-packagekit
@@ -830,6 +664,39 @@ via PackageKit.
 
 # The changelog is automatically generated and merged
 %changelog
+* Mon Dec 16 2019 Matej Marusak <mmmarusak@redhat.com> - 209-2
+- Remove SELinux policy hack from spec file
+
+* Fri Dec 13 2019 Matej Marusak <mmmarusak@redhat.com> - 209-1
+- New overview design
+- Session timeouts
+- Banners on login screen
+- Client certificate authentication
+- Dropped support for pam_rhost
+
+* Thu Nov 28 2019 Matej Marusak <mmarusak@redhat.com> - 208-1
+- Fix SELinux policy update hack in %post
+
+* Thu Nov 14 2019 Matej Marusak <mmarusak@redhat.com> - 207-1
+- Web server: Accept EC certificates
+- Redesigned notifications
+
+* Wed Nov 13 2019 Martin Pitt <mpitt@redhat.com> - 206-1
+- Sync with Fedora 31, to get cockpit-tls prerequisite for upcoming Smart card
+  support
+- Logging in with SELinux-restricted user role now works (rhbz#1727382)
+
+* Fri Sep 13 2019 Martin Pitt <mpitt@redhat.com> - 196.3-1
+- systemd: Warn if not connected to Insights (rhbz#1745964)
+
+* Tue Aug 13 2019 Martin Pitt <mpitt@redhat.com> - 196.2-1
+- firewall: Show any included services on a service (rhbz#1721548)
+
+* Thu Aug 01 2019 Martin Pitt <mpitt@redhat.com> - 196.1-1
+- networkmanager: Show correct IPv6 route metric in dialog (rhbz#1719575)
+- networkmanager: Ensure that endianess is always set (rhbz#1728213)
+- Update translations (rhbz#1689977)
+
 * Thu Jun 13 2019 Martin Pitt <mpitt@redhat.com> - 196-1
 - Networking: Add Firewall Zones configuration rhbz#1678473
 - Fix ssh login to unknown hosts rhbz#1701174