diff --git a/.gitignore b/.gitignore
index 28ed57e..d101600 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1 @@
-SOURCES/libdnf-0.33.0.tar.gz
+SOURCES/libdnf-0.39.1.tar.gz
diff --git a/.libdnf.metadata b/.libdnf.metadata
index 68030a2..4bef024 100644
--- a/.libdnf.metadata
+++ b/.libdnf.metadata
@@ -1 +1 @@
-50ede2a9751bb06bc2ccb2d42a30fefc0d443191 SOURCES/libdnf-0.33.0.tar.gz
+a74a37b029439749298705ff3c1ccfbd0f0fd821 SOURCES/libdnf-0.39.1.tar.gz
diff --git a/SOURCES/0001-Set-default-to-skip_if_unavailablefalse-RhBug1679509.patch b/SOURCES/0001-Set-default-to-skip_if_unavailablefalse-RhBug1679509.patch
deleted file mode 100644
index b521599..0000000
--- a/SOURCES/0001-Set-default-to-skip_if_unavailablefalse-RhBug1679509.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-From c04e8362708bbb7d14b7d9a9bdc8fd212af53c59 Mon Sep 17 00:00:00 2001
-From: Jaroslav Mracek <jmracek@redhat.com>
-Date: Fri, 15 Mar 2019 14:02:23 +0100
-Subject: [PATCH] Set default to skip_if_unavailable=false (RhBug:1679509)
-
----
- libdnf/conf/ConfigRepo.cpp | 2 +-
- libdnf/dnf-repo.cpp        | 2 ++
- 2 files changed, 3 insertions(+), 1 deletion(-)
-
-diff --git a/libdnf/conf/ConfigRepo.cpp b/libdnf/conf/ConfigRepo.cpp
-index e684940..43fe56b 100644
---- a/libdnf/conf/ConfigRepo.cpp
-+++ b/libdnf/conf/ConfigRepo.cpp
-@@ -71,7 +71,7 @@ class ConfigRepo::Impl {
-     OptionChild<OptionString> sslclientkey{masterConfig.sslclientkey()};
-     OptionChild<OptionBool> deltarpm{masterConfig.deltarpm()};
-     OptionChild<OptionNumber<std::uint32_t> > deltarpm_percentage{masterConfig.deltarpm_percentage()};
--    OptionBool skip_if_unavailable{true};
-+    OptionBool skip_if_unavailable{false};
-     OptionString enabled_metadata{""};
-     OptionEnum<std::string> failovermethod{"priority", {"priority", "roundrobin"}};
- };
-diff --git a/libdnf/dnf-repo.cpp b/libdnf/dnf-repo.cpp
-index dfe161d..34bbc8f 100644
---- a/libdnf/dnf-repo.cpp
-+++ b/libdnf/dnf-repo.cpp
-@@ -966,6 +966,8 @@ dnf_repo_set_keyfile_data(DnfRepo *repo, GError **error)
-             priv->required = FALSE;
-         else
-             priv->required = TRUE;
-+    } else {
-+        priv->required = TRUE;
-     }
- 
-     /* cost is optional */
---
-libgit2 0.27.7
-
diff --git a/SOURCES/0001-user-agent-Drop-the-whitelist.patch b/SOURCES/0001-user-agent-Drop-the-whitelist.patch
new file mode 100644
index 0000000..f897cb6
--- /dev/null
+++ b/SOURCES/0001-user-agent-Drop-the-whitelist.patch
@@ -0,0 +1,131 @@
+From 1dffef87fc2f07763f64eeabc1ea891e68d23541 Mon Sep 17 00:00:00 2001
+From: Michal Domonkos <mdomonko@redhat.com>
+Date: Tue, 26 Nov 2019 13:05:49 +0100
+Subject: [PATCH] [user-agent] Drop the whitelist
+
+ - Stop checking os-release(5) data against a hard-coded whitelist and
+   just use them as they are, to avoid a maintenance burden in the
+   future (see [1] for details)
+
+ - Clean up the getUserAgent() function a bit
+
+Note that, by removing the whitelist, there's a risk of leaking a
+"unique" value from the os-release file now, but a rather small one.
+
+[1] https://github.com/rpm-software-management/libdnf/pull/851
+---
+ libdnf/utils/os-release.cpp | 58 ++++++++++++++++++++--------------------------------------
+ libdnf/utils/os-release.hpp |  7 ++-----
+ 2 files changed, 22 insertions(+), 43 deletions(-)
+
+diff --git a/libdnf/utils/os-release.cpp b/libdnf/utils/os-release.cpp
+index 57be110..1d8a95b 100644
+--- a/libdnf/utils/os-release.cpp
++++ b/libdnf/utils/os-release.cpp
+@@ -36,17 +36,8 @@
+ namespace libdnf {
+ 
+ // sorted by precedence (see os-release(5) for details)
+-static const std::array<const std::string, 2> paths = {"/etc/os-release", "/usr/lib/os-release"};
+-// whitelists used for sanity-checking the os-release data when constructing a
+-// User-Agent string (to avoid reporting rare systems or platforms that could
+-// be tracked)
+-static const std::map<std::string, std::vector<std::string>> distros = {
+-    // taken from the {fedora,generic}-release.spec files
+-    { "Fedora", { "cinnamon", "cloud", "container", "coreos", "generic", "iot",
+-                  "kde", "matecompiz", "server", "silverblue", "snappy", "soas",
+-                  "workstation", "xfce" } },
+-};
+-std::array<const std::string, 1> canons = { "Linux" };
++static const std::array<const std::string, 2>
++paths = {"/etc/os-release", "/usr/lib/os-release"};
+ 
+ std::map<std::string, std::string> getOsReleaseData()
+ {
+@@ -118,47 +109,38 @@ std::string getUserAgent(const std::map<std::string, std::string> & osReleaseDat
+ {
+     std::ostringstream oss;
+     auto logger(Log::getLogger());
+-    std::string msg = "os-release: falling back to basic User-Agent";
+ 
+-    // start with the basic libdnf string
+     oss << USER_AGENT;
++    std::string fallback = oss.str();
+ 
+-    // mandatory OS data (bail out if missing or unknown)
+     if (!osReleaseData.count("NAME") || !osReleaseData.count("VERSION_ID")) {
+-        logger->debug(tfm::format("%s: missing NAME or VERSION_ID", msg));
+-        return oss.str();
++        logger->debug(tfm::format(
++            "User-Agent: falling back to '%s': missing NAME or VERSION_ID",
++            fallback
++        ));
++        return fallback;
+     }
+     std::string name = osReleaseData.at("NAME");
+     std::string version = osReleaseData.at("VERSION_ID");
+-    if (!distros.count(name)) {
+-        logger->debug(tfm::format("%s: distro %s not whitelisted", msg, name));
+-        return oss.str();
+-    }
++    std::string variant = "generic";
++    if (osReleaseData.count("VARIANT_ID"))
++        variant = osReleaseData.at("VARIANT_ID");
+ 
+-    // mandatory platform data from RPM (bail out if missing or unknown)
+     std::string canon = getCanonOs();
+     std::string arch = getBaseArch();
+-    if (canon.empty() || arch.empty()
+-        || std::find(canons.begin(), canons.end(), canon) == canons.end()) {
+-        logger->debug(tfm::format("%s: could not detect canonical OS or basearch", msg));
+-        return oss.str();
+-    }
+-
+-    // optional OS data (use fallback values if missing or unknown)
+-    std::string variant = "generic";
+-    auto list = distros.at(name);
+-    if (osReleaseData.count("VARIANT_ID")) {
+-        std::string value = osReleaseData.at("VARIANT_ID");
+-        if (std::find(list.begin(), list.end(), value) != list.end())
+-            variant = value;
++    if (canon.empty() || arch.empty()) {
++        logger->debug(tfm::format(
++            "User-Agent: falling back to '%s': could not detect OS or basearch",
++            fallback
++        ));
++        return fallback;
+     }
+ 
+-    // good to go!
+-    oss << " (" << name << " " << version << "; " << variant << "; "
+-        << canon << "." << arch << ")";
++    oss << " (" << name << " " << version << "; " << variant << "; " << canon
++        << "." << arch << ")";
+ 
+     std::string result = oss.str();
+-    logger->debug(tfm::format("os-release: User-Agent constructed: %s", result));
++    logger->debug(tfm::format("User-Agent: constructed: '%s'", result));
+     return result;
+ }
+ 
+diff --git a/libdnf/utils/os-release.hpp b/libdnf/utils/os-release.hpp
+index ef4d14f..e7b24a7 100644
+--- a/libdnf/utils/os-release.hpp
++++ b/libdnf/utils/os-release.hpp
+@@ -50,11 +50,8 @@ getOsReleaseData();
+  *   libdnf (NAME VERSION_ID; VARIANT_ID; OS.BASEARCH)
+  *
+  * where NAME, VERSION_ID and VARIANT_ID are OS identifiers read from the
+- * passed os-release data, and OS and BASEARCH (if found) are the canonical OS
+- * name and base architecture, respectively, detected using RPM.
+- *
+- * Note that the OS part (enclosed in parentheses) will only be included for
+- * whitelisted values.
++ * passed os-release data, and OS and BASEARCH are the canonical OS name and
++ * base architecture, respectively, detected using RPM.
+  *
+  * @param  osReleaseData a map containing os-release data (will be loaded from
+  *                       disk if not specified)
+--
+libgit2 0.28.2
+
diff --git a/SOURCES/0002-Add-configuration-option-skip_if_unavailable-RhBug1689931.patch b/SOURCES/0002-Add-configuration-option-skip_if_unavailable-RhBug1689931.patch
deleted file mode 100644
index 7f59740..0000000
--- a/SOURCES/0002-Add-configuration-option-skip_if_unavailable-RhBug1689931.patch
+++ /dev/null
@@ -1,89 +0,0 @@
-From 7e8a01dc9408cc48700f3d2a75cff67b3364d0c5 Mon Sep 17 00:00:00 2001
-From: Jaroslav Mracek <jmracek@redhat.com>
-Date: Wed, 20 Mar 2019 09:06:15 +0100
-Subject: [PATCH] Add configuration option skip_if_unavailable (RhBug:1689931)
-
----
- libdnf/conf/ConfigMain.cpp | 3 +++
- libdnf/conf/ConfigMain.hpp | 1 +
- libdnf/conf/ConfigRepo.cpp | 4 ++--
- libdnf/conf/ConfigRepo.hpp | 2 +-
- 4 files changed, 7 insertions(+), 3 deletions(-)
-
-diff --git a/libdnf/conf/ConfigMain.cpp b/libdnf/conf/ConfigMain.cpp
-index 2fc1f11..39cf8ab 100644
---- a/libdnf/conf/ConfigMain.cpp
-+++ b/libdnf/conf/ConfigMain.cpp
-@@ -333,6 +333,7 @@ class ConfigMain::Impl {
-     OptionString sslclientkey{""};
-     OptionBool deltarpm{true};
-     OptionNumber<std::uint32_t> deltarpm_percentage{75};
-+    OptionBool skip_if_unavailable{false};
- };
- 
- ConfigMain::Impl::Impl(Config & owner)
-@@ -469,6 +470,7 @@ ConfigMain::Impl::Impl(Config & owner)
-     owner.optBinds().add("sslclientkey", sslclientkey);
-     owner.optBinds().add("deltarpm", deltarpm);
-     owner.optBinds().add("deltarpm_percentage", deltarpm_percentage);
-+    owner.optBinds().add("skip_if_unavailable", skip_if_unavailable);
- }
- 
- ConfigMain::ConfigMain() { pImpl = std::unique_ptr<Impl>(new Impl(*this)); }
-@@ -572,5 +574,6 @@ OptionString & ConfigMain::sslclientcert() { return pImpl->sslclientcert; }
- OptionString & ConfigMain::sslclientkey() { return pImpl->sslclientkey; }
- OptionBool & ConfigMain::deltarpm() { return pImpl->deltarpm; }
- OptionNumber<std::uint32_t> & ConfigMain::deltarpm_percentage() { return pImpl->deltarpm_percentage; }
-+OptionBool & ConfigMain::skip_if_unavailable() { return pImpl->skip_if_unavailable; }
- 
- }
-diff --git a/libdnf/conf/ConfigMain.hpp b/libdnf/conf/ConfigMain.hpp
-index 331cdec..c2ead25 100644
---- a/libdnf/conf/ConfigMain.hpp
-+++ b/libdnf/conf/ConfigMain.hpp
-@@ -151,6 +151,7 @@ public:
-     OptionString & sslclientkey();
-     OptionBool & deltarpm();
-     OptionNumber<std::uint32_t> & deltarpm_percentage();
-+    OptionBool & skip_if_unavailable();
- 
- private:
-     class Impl;
-diff --git a/libdnf/conf/ConfigRepo.cpp b/libdnf/conf/ConfigRepo.cpp
-index 43fe56b..e86cdff 100644
---- a/libdnf/conf/ConfigRepo.cpp
-+++ b/libdnf/conf/ConfigRepo.cpp
-@@ -71,7 +71,7 @@ class ConfigRepo::Impl {
-     OptionChild<OptionString> sslclientkey{masterConfig.sslclientkey()};
-     OptionChild<OptionBool> deltarpm{masterConfig.deltarpm()};
-     OptionChild<OptionNumber<std::uint32_t> > deltarpm_percentage{masterConfig.deltarpm_percentage()};
--    OptionBool skip_if_unavailable{false};
-+    OptionChild<OptionBool> skip_if_unavailable{masterConfig.skip_if_unavailable()};
-     OptionString enabled_metadata{""};
-     OptionEnum<std::string> failovermethod{"priority", {"priority", "roundrobin"}};
- };
-@@ -195,7 +195,7 @@ OptionChild<OptionString> & ConfigRepo::sslclientcert() { return pImpl->sslclien
- OptionChild<OptionString> & ConfigRepo::sslclientkey() { return pImpl->sslclientkey; }
- OptionChild<OptionBool> & ConfigRepo::deltarpm() { return pImpl->deltarpm; }
- OptionChild<OptionNumber<std::uint32_t> > & ConfigRepo::deltarpm_percentage() { return pImpl->deltarpm_percentage; }
--OptionBool & ConfigRepo::skip_if_unavailable() { return pImpl->skip_if_unavailable; }
-+OptionChild<OptionBool> & ConfigRepo::skip_if_unavailable() { return pImpl->skip_if_unavailable; }
- OptionString & ConfigRepo::enabled_metadata() { return pImpl->enabled_metadata; }
- OptionEnum<std::string> & ConfigRepo::failovermethod() { return pImpl->failovermethod; }
- 
-diff --git a/libdnf/conf/ConfigRepo.hpp b/libdnf/conf/ConfigRepo.hpp
-index c3e992b..a47030b 100644
---- a/libdnf/conf/ConfigRepo.hpp
-+++ b/libdnf/conf/ConfigRepo.hpp
-@@ -85,7 +85,7 @@ public:
-     OptionChild<OptionString> & sslclientkey();
-     OptionChild<OptionBool> & deltarpm();
-     OptionChild<OptionNumber<std::uint32_t> > & deltarpm_percentage();
--    OptionBool & skip_if_unavailable();
-+    OptionChild<OptionBool> & skip_if_unavailable();
-     // option recognized by other tools, e.g. gnome-software, but unused in dnf
-     OptionString & enabled_metadata();
-     // yum compatibility options
---
-libgit2 0.27.7
-
diff --git a/SPECS/libdnf.spec b/SPECS/libdnf.spec
index 7c9d294..2ccbcb6 100644
--- a/SPECS/libdnf.spec
+++ b/SPECS/libdnf.spec
@@ -1,9 +1,20 @@
-%global libsolv_version 0.7.4-1
+%global libsolv_version 0.7.7
 %global libmodulemd_version 1.6.1
-%global librepo_version 1.9.5
-%global dnf_conflict 4.2.5
+%global librepo_version 1.11.0
+%global dnf_conflict 4.2.13
 %global swig_version 3.0.12
 
+# set sphinx package name according to distro
+%global requires_python2_sphinx python2-sphinx
+%global requires_python3_sphinx python3-sphinx
+%if 0%{?rhel} == 7
+    %global requires_python2_sphinx python-sphinx
+%endif
+%if 0%{?suse_version}
+    %global requires_python2_sphinx python2-Sphinx
+    %global requires_python3_sphinx python3-Sphinx
+%endif
+
 %bcond_with valgrind
 
 # Do not build bindings for python3 for RHEL <= 7
@@ -26,19 +37,24 @@
 %bcond_with rhsm
 %endif
 
+%if 0%{?rhel}
+%bcond_with zchunk
+%else
+%bcond_without zchunk
+%endif
+
 %global _cmake_opts \\\
     -DENABLE_RHSM_SUPPORT=%{?with_rhsm:ON}%{!?with_rhsm:OFF} \\\
     %{nil}
 
 Name:           libdnf
-Version:        0.33.0
-Release:        1%{?dist}
+Version:        0.39.1
+Release:        2%{?dist}
 Summary:        Library providing simplified C and Python API to libsolv
 License:        LGPLv2+
 URL:            https://github.com/rpm-software-management/libdnf
 Source0:        %{url}/archive/%{version}/%{name}-%{version}.tar.gz
-Patch0001:      0001-Set-default-to-skip_if_unavailablefalse-RhBug1679509.patch
-Patch0002:      0002-Add-configuration-option-skip_if_unavailable-RhBug1689931.patch
+Patch1:         0001-user-agent-Drop-the-whitelist.patch
 
 BuildRequires:  cmake
 BuildRequires:  gcc
@@ -55,6 +71,9 @@ BuildRequires:  rpm-devel >= 4.11.0
 %if %{with rhsm}
 BuildRequires:  pkgconfig(librhsm) >= 0.0.3
 %endif
+%if %{with zchunk}
+BuildRequires:  pkgconfig(zck) >= 0.9.11
+%endif
 BuildRequires:  pkgconfig(sqlite3)
 BuildRequires:  pkgconfig(json-c)
 BuildRequires:  pkgconfig(cppunit)
@@ -68,6 +87,16 @@ Requires:       libmodulemd%{?_isa} >= %{libmodulemd_version}
 Requires:       libsolv%{?_isa} >= %{libsolv_version}
 Requires:       librepo%{?_isa} >= %{librepo_version}
 
+%if %{without python2}
+# Obsoleted from here so we can track the fast growing version easily.
+# We intentionally only obsolete and not provide, this is a broken upgrade
+# prevention, not providing the removed functionality.
+Obsoletes:      python2-%{name} < %{version}-%{release}
+Obsoletes:      python2-hawkey < %{version}-%{release}
+Obsoletes:      python2-hawkey-debuginfo < %{version}-%{release}
+Obsoletes:      python2-libdnf-debuginfo < %{version}-%{release}
+%endif
+
 %description
 A Library providing simplified C and Python API to libsolv.
 
@@ -85,11 +114,12 @@ Development files for %{name}.
 Summary:        Python 2 bindings for the libdnf library.
 Requires:       %{name}%{?_isa} = %{version}-%{release}
 BuildRequires:  python2-devel
+%if !0%{?mageia}
+BuildRequires:  %{requires_python2_sphinx}
+%endif
 %if 0%{?rhel} == 7
-BuildRequires:  python-sphinx
 BuildRequires:  swig3 >= %{swig_version}
 %else
-BuildRequires:  python2-sphinx
 BuildRequires:  swig >= %{swig_version}
 %endif
 
@@ -103,7 +133,7 @@ Python 2 bindings for the libdnf library.
 Summary:        Python 3 bindings for the libdnf library.
 Requires:       %{name}%{?_isa} = %{version}-%{release}
 BuildRequires:  python3-devel
-BuildRequires:  python3-sphinx
+BuildRequires:  %{requires_python3_sphinx}
 BuildRequires:  swig >= %{swig_version}
 
 %description -n python3-%{name}
@@ -161,39 +191,49 @@ mkdir build-py3
 %build
 %if %{with python2}
 pushd build-py2
-  %cmake -DPYTHON_DESIRED:FILEPATH=%{__python2} -DWITH_MAN=OFF ../ %{!?with_valgrind:-DDISABLE_VALGRIND=1} %{_cmake_opts}
+  %if 0%{?mageia} || 0%{?suse_version}
+    cd ..
+    %define _cmake_builddir build-py2
+    %define __builddir build-py2
+  %endif
+  %cmake -DPYTHON_DESIRED:FILEPATH=%{__python2} -DWITH_MAN=OFF ../ %{!?with_zchunk:-DWITH_ZCHUNK=OFF} %{!?with_valgrind:-DDISABLE_VALGRIND=1} %{_cmake_opts}
   %make_build
 popd
 %endif # with python2
 
 %if %{with python3}
 pushd build-py3
-  %cmake -DPYTHON_DESIRED:FILEPATH=%{__python3} -DWITH_GIR=0 -DWITH_MAN=0 -Dgtkdoc=0 ../ %{!?with_valgrind:-DDISABLE_VALGRIND=1} %{_cmake_opts}
+  %if 0%{?mageia} || 0%{?suse_version}
+    cd ..
+    %define _cmake_builddir build-py3
+    %define __builddir build-py3
+  %endif
+  %cmake -DPYTHON_DESIRED:FILEPATH=%{__python3} -DWITH_GIR=0 -DWITH_MAN=0 -Dgtkdoc=0 ../ %{!?with_zchunk:-DWITH_ZCHUNK=OFF} %{!?with_valgrind:-DDISABLE_VALGRIND=1} %{_cmake_opts}
   %make_build
 popd
 %endif
 
 %check
-if [ "$(id -u)" == "0" ] ; then
-        cat <<ERROR 1>&2
-Package tests cannot be run under superuser account.
-Please build the package as non-root user.
-ERROR
-        exit 1
-fi
-
 %if %{with python2}
 pushd build-py2
   make ARGS="-V" test
 popd
 %endif # with python2
 %if %{with python3}
-# Run just the Python tests, not all of them, since
-# we have coverage of the core from the first build
+# If we didn't run the general tests yet, do it now.
+%if %{without python2}
+pushd build-py3
+  make ARGS="-V" test
+popd
+%else
+# Otherwise, run just the Python tests, not all of
+# them, since we have coverage of the core from the
+# first build
 pushd build-py3/python/hawkey/tests
   make ARGS="-V" test
 popd
 %endif
+%endif
 
 %install
 %if %{with python2}
@@ -209,7 +249,7 @@ popd
 
 %find_lang %{name}
 
-%if 0%{?rhel} && 0%{?rhel} <= 7
+%if (0%{?rhel} && 0%{?rhel} <= 7) || 0%{?suse_version}
 %post -p /sbin/ldconfig
 %postun -p /sbin/ldconfig
 %else
@@ -220,6 +260,8 @@ popd
 %license COPYING
 %doc README.md AUTHORS
 %{_libdir}/%{name}.so.*
+%dir %{_libdir}/libdnf/
+%dir %{_libdir}/libdnf/plugins/
 %{_libdir}/libdnf/plugins/README
 
 %files devel
@@ -249,6 +291,99 @@ popd
 %endif
 
 %changelog
+* Thu Dec 12 2019 Pavla Kratochvilova <pkratoch@redhat.com> - 0.39.1-2
+- [user-agent] Stop checking os-release(5) data against a hard-coded whitelist (RhBug:1777255)
+
+* Mon Nov 25 2019 Ales Matej <amatej@redhat.com> - 0.39.1-1
+- Update to 0.39.1
+- Report reason how package was excluded (RhBug:1649754)
+- Additional Arm detection improvements (RhBug:1691430)
+- Set skip_if_unavailable for media repos to skip their update (RhBug:1716067)
+- Add support of xml:base for remote and local url in context (RhBug:1734350,1717865)
+
+* Wed Nov 13 2019 Ales Matej <amatej@redhat.com> - 0.38.1-1
+- Update to 0.38.1
+- Change the best option default to false
+- Use more descriptive message when failed to retrieve GPG key (RhBug:1605117)
+- Add removeMetadataTypeFromDownload function to the API
+- Context part of libdnf can now read vars (urlvars) from dirs and environment
+- Throw exception immediately if file cannot be opened
+- Add test when there is no primary metadata in compatible format (RhBug:1744960)
+- Various improvements to countme features
+- Don't abort on rpmdb checksum calculation failure
+- Enable module dependency trees when using set_modules_enabled_by_pkgset() (RhBug:1762314)
+- Resolve problem with --best and search in provides (RhBug:1737469)
+- New method "Query::filterSubject()", replaces Solution::getBestSolution()
+- The Solution class was removed
+- Add query argument into get_best_query and get_best_solution
+- Add module reset function into dnf_context
+- Add method to get all repository metadata locations
+- Catch NoModuleException in case of not existent value was used in persistor (RhBug:1761773)
+
+* Tue Oct 22 2019 Ales Matej <amatej@redhat.com> - 0.35.5-1
+- Update to 0.35.5
+- Make libdnf own its plugin directory (RhBug:1714265)
+- Set priority of dnf.conf.d drop-ins
+- Fix toString() to not insert [] (RhBug:1584442)
+- Fix handling large number of filenames on input (RhBug:1690915)
+- Detect armv7 with crypto extension only on arm version >= 8
+- A new standardized User-Agent field consisting of the libdnf and OS version
+  (including the variant) (RhBug:1156007)
+- Add basic countme support (RhBug:1647454)
+- Fix crash in PackageKit (RhBug:1636803)
+- Do not create @System.solv files (RhBug:1707995)
+- Set LRO_CACHEDIR so zchunk works again (RhBug:1739867)
+- Improve detection of extras packages by comparing (name, arch) pair instead
+  of full NEVRA (RhBuh:1684517)
+- Improve handling multilib packages in the history command (RhBug:1728637)
+- Repo download: use full error description into the exception text (RhBug:1741442)
+- Properly close hawkey.log (RhBug:1594016)
+- Fix dnf updateinfo --update to not list advisories for packages updatable
+  only from non-enabled modules
+- Apply modular filtering by package name (RhBug:1702729)
+
+* Wed Oct 16 2019 Pavla Kratochvilova <pkratoch@redhat.com> - 0.35.1-9
+- Prevent reinstalling modified packages with same NEVRA (RhBug:1728252,1644241,1760825)
+
+* Fri Sep 06 2019 Marek Blaha <mblaha@redhat.com> - 0.35.1-8
+- Enhanced fix of moving directories in minimal container (RhBug:1700341)
+
+* Thu Sep 05 2019 Jaroslav Mracek <jmracek@redhat.com> - 0.35.1-7
+- Remove patch to not fail when installing modular RPMs without modular metadata
+
+* Thu Sep 05 2019 Marek Blaha <mblaha@redhat.com> - 0.35.1-6
+- Fix moving directories in minimal container (RhBug:1700341)
+
+* Tue Aug 06 2019 Pavla Kratochvilova <pkratoch@redhat.com> - 0.35.1-5
+- Add suport for query sequence conversions
+
+* Thu Aug 01 2019 Pavla Kratochvilova <pkratoch@redhat.com> - 0.35.1-4
+- Fix typo in error message (RhBug:1726661)
+- Update localizations from zanata (RhBug:1689991)
+- Don't disable nonexistent but required repositories (RhBug:1689331)
+- Ignore trailing blank lines of multiline value (RhBug:1722493)
+- Re-size includes map before re-computation (RhBug:1725213)
+
+* Tue Jul 16 2019 Marek Blaha <mblaha@redhat.com> - 0.35.1-3
+- Fix attaching and detaching of libsolvRepo and repo_internalize_trigger()
+  (RhBug:1730224)
+
+* Thu Jul 04 2019 Pavla Kratochvilova <pkratoch@redhat.com> - 0.35.1-2
+- Add patch to not fail when installing modular RPMs without modular metadata
+
+* Tue Jun 11 2019 Pavla Kratochvilova <pkratoch@redhat.com> - 0.35.1-1
+- Update to 0.35.1
+- Skip invalid key files in "/etc/pki/rpm-gpg" with warning (RhBug:1644040)
+- Enable timestamp preserving for downloaded data (RhBug:1688537)
+- Fix 'database is locked' error (RhBug:1631533)
+- Replace the 'Failed to synchronize cache' message (RhBug:1712055)
+- Fix 'no such table: main.trans_cmdline' error (RhBug:1596540)
+- Fix: skip_if_unavailable=true for local repositories (RhBug:1716313)
+- Add support of modular FailSafe (RhBug:1623128)
+- Add support of DNF main config file in context; used by PackageKit and
+  microdnf (RhBug:1689331)
+- Exit gpg-agent after repokey import (RhBug:1650266)
+
 * Mon May 13 2019 Pavla Kratochvilova <pkratoch@redhat.com> - 0.33.0-1
 - Update to 0.33.0
 - Enhance sorting for module list (RhBug:1590358)