diff --git a/.gitignore b/.gitignore
index 26038c2..c67ed22 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1 @@
-SOURCES/libdnf-0.11.1.tar.gz
+SOURCES/libdnf-0.22.5.tar.gz
diff --git a/.libdnf.metadata b/.libdnf.metadata
index 14df4d7..cecb49a 100644
--- a/.libdnf.metadata
+++ b/.libdnf.metadata
@@ -1 +1 @@
-460f7c454e61a6e3eb323fa64ff2e8b3058d8359 SOURCES/libdnf-0.11.1.tar.gz
+d456a4e02426c4fb837d85bfcfb2645ecb4d0788 SOURCES/libdnf-0.22.5.tar.gz
diff --git a/SOURCES/0001-Use-arch-from-spec-in-hy_subject_get_best_selector-RhBug1542307.patch b/SOURCES/0001-Use-arch-from-spec-in-hy_subject_get_best_selector-RhBug1542307.patch
deleted file mode 100644
index 43ba1d7..0000000
--- a/SOURCES/0001-Use-arch-from-spec-in-hy_subject_get_best_selector-RhBug1542307.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From 04cb64836deabf398ccdbf671be9a83837309c57 Mon Sep 17 00:00:00 2001
-From: Jaroslav Mracek <jmracek@redhat.com>
-Date: Tue, 2 Oct 2018 16:59:32 +0200
-Subject: [PATCH] Use arch from spec in hy_subject_get_best_selector (RhBug:1542307)
-
----
- libdnf/hy-subject.c | 3 +++
- 1 file changed, 3 insertions(+)
-
-diff --git a/libdnf/hy-subject.c b/libdnf/hy-subject.c
-index 488ee6a..b72f4b5 100644
---- a/libdnf/hy-subject.c
-+++ b/libdnf/hy-subject.c
-@@ -382,6 +382,9 @@ nevra_to_selector(HyNevra nevra, DnfSack *sack)
-                 hy_selector_set(selector, HY_PKG_EVR, HY_EQ, evrbuf->str);
-             }
-         }
-+        const char * arch = hy_nevra_get_string(nevra, HY_NEVRA_ARCH);
-+        if (arch)
-+            hy_selector_set(selector, HY_PKG_ARCH, HY_EQ, arch);
-     }
- 
-     if (hy_selector_has_matches(selector)) {
---
-libgit2 0.26.7
-
diff --git a/SOURCES/queue_init_clone-const_cast.patch b/SOURCES/queue_init_clone-const_cast.patch
new file mode 100644
index 0000000..92de8ec
--- /dev/null
+++ b/SOURCES/queue_init_clone-const_cast.patch
@@ -0,0 +1,49 @@
+diff -Naur a/libdnf/goal/IdQueue.hpp b/libdnf/goal/IdQueue.hpp
+--- a/libdnf/goal/IdQueue.hpp	2019-01-04 14:12:04.000000000 +0100
++++ b/libdnf/goal/IdQueue.hpp	2019-01-08 09:54:45.858216988 +0100
+@@ -51,13 +51,13 @@
+ };
+ 
+ inline IdQueue::IdQueue() { queue_init(&queue); }
+-inline IdQueue::IdQueue(const IdQueue & src) { queue_init_clone(&queue, &src.queue); }
++inline IdQueue::IdQueue(const IdQueue & src) { queue_init_clone(&queue, const_cast<Queue *>(&src.queue)); }
+ inline IdQueue::IdQueue(IdQueue && src)
+ {
+     queue_init(&queue);
+     std::swap(queue, src.queue);
+ }
+-inline IdQueue::IdQueue(const Queue & src) { queue_init_clone(&queue, &src); }
++inline IdQueue::IdQueue(const Queue & src) { queue_init_clone(&queue, const_cast<Queue *>(&src)); }
+ 
+ inline IdQueue::~IdQueue() { queue_free(&queue); }
+ 
+diff -Naur a/libdnf/repo/solvable/DependencyContainer.cpp b/libdnf/repo/solvable/DependencyContainer.cpp
+--- a/libdnf/repo/solvable/DependencyContainer.cpp	2019-01-04 14:12:04.000000000 +0100
++++ b/libdnf/repo/solvable/DependencyContainer.cpp	2019-01-08 09:54:19.623031878 +0100
+@@ -32,7 +32,7 @@
+ DependencyContainer::DependencyContainer(const DependencyContainer &src)
+         : sack(src.sack)
+ {
+-    queue_init_clone(&this->queue, &queue);
++    queue_init_clone(&this->queue, const_cast<Queue *>(&queue));
+ }
+ 
+ 
+@@ -45,7 +45,7 @@
+ DependencyContainer::DependencyContainer(DnfSack *sack, Queue queue)
+         : sack(sack)
+ {
+-    queue_init_clone(&this->queue, &queue);
++    queue_init_clone(&this->queue, const_cast<Queue *>(&queue));
+ }
+ 
+ DependencyContainer::~DependencyContainer()
+@@ -56,7 +56,7 @@
+ DependencyContainer &DependencyContainer::operator=(DependencyContainer &&src) noexcept
+ {
+     sack = src.sack;
+-    queue_init_clone(&queue, &src.queue);
++    queue_init_clone(&queue, const_cast<Queue *>(&src.queue));
+     return *this;
+ }
+ 
diff --git a/SPECS/libdnf.spec b/SPECS/libdnf.spec
index 83e90ce..497d542 100644
--- a/SPECS/libdnf.spec
+++ b/SPECS/libdnf.spec
@@ -1,5 +1,7 @@
-%global libsolv_version 0.6.21-1
-%global dnf_conflict 2.7.2
+%global libsolv_version 0.6.34-1
+%global libmodulemd_version 1.6.1
+%global dnf_conflict 4.0.9.2
+%global swig_version 3.0.12
 
 %bcond_with valgrind
 
@@ -10,6 +12,13 @@
 %bcond_without python3
 %endif
 
+%if 0%{?rhel} > 7 || 0%{?fedora} > 29
+# Disable python2 build by default
+%bcond_with python2
+%else
+%bcond_without python2
+%endif
+
 %if 0%{?rhel} && ! 0%{?centos}
 %bcond_without rhsm
 %else
@@ -21,16 +30,17 @@
     %{nil}
 
 Name:           libdnf
-Version:        0.11.1
-Release:        4%{?dist}
+Version:        0.22.5
+Release:        1%{?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-Use-arch-from-spec-in-hy_subject_get_best_selector-RhBug1542307.patch
+Patch0:         queue_init_clone-const_cast.patch
 
 BuildRequires:  cmake
 BuildRequires:  gcc
+BuildRequires:  gcc-c++
 BuildRequires:  libsolv-devel >= %{libsolv_version}
 BuildRequires:  pkgconfig(librepo)
 BuildRequires:  pkgconfig(check)
@@ -39,12 +49,20 @@ BuildRequires:  valgrind
 %endif
 BuildRequires:  pkgconfig(gio-unix-2.0) >= 2.46.0
 BuildRequires:  pkgconfig(gtk-doc)
-BuildRequires:  pkgconfig(gobject-introspection-1.0)
 BuildRequires:  rpm-devel >= 4.11.0
 %if %{with rhsm}
-BuildRequires:  pkgconfig(librhsm)
+BuildRequires:  pkgconfig(librhsm) >= 0.0.3
 %endif
-
+BuildRequires:  pkgconfig(sqlite3)
+BuildRequires:  pkgconfig(json-c)
+BuildRequires:  pkgconfig(cppunit)
+BuildRequires:  pkgconfig(libcrypto)
+BuildRequires:  pkgconfig(modulemd) >= %{libmodulemd_version}
+BuildRequires:  pkgconfig(smartcols)
+BuildRequires:  gettext
+BuildRequires:  gpgme-devel
+
+Requires:       libmodulemd%{?_isa} >= %{libmodulemd_version}
 Requires:       libsolv%{?_isa} >= %{libsolv_version}
 
 %description
@@ -58,6 +76,38 @@ Requires:       libsolv-devel%{?_isa} >= %{libsolv_version}
 %description devel
 Development files for %{name}.
 
+%if %{with python2}
+%package -n python2-%{name}
+%{?python_provide:%python_provide python2-%{name}}
+Summary:        Python 2 bindings for the libdnf library.
+Requires:       %{name}%{?_isa} = %{version}-%{release}
+BuildRequires:  python2-devel
+%if 0%{?rhel} == 7
+BuildRequires:  python-sphinx
+BuildRequires:  swig3 >= %{swig_version}
+%else
+BuildRequires:  python2-sphinx
+BuildRequires:  swig >= %{swig_version}
+%endif
+
+%description -n python2-%{name}
+Python 2 bindings for the libdnf library.
+%endif # with python2
+
+%if %{with python3}
+%package -n python3-%{name}
+%{?python_provide:%python_provide python3-%{name}}
+Summary:        Python 3 bindings for the libdnf library.
+Requires:       %{name}%{?_isa} = %{version}-%{release}
+BuildRequires:  python3-devel
+BuildRequires:  python3-sphinx
+BuildRequires:  swig >= %{swig_version}
+
+%description -n python3-%{name}
+Python 3 bindings for the libdnf library.
+%endif
+
+%if %{with python2}
 %package -n python2-hawkey
 Summary:        Python 2 bindings for the hawkey library
 %{?python_provide:%python_provide python2-hawkey}
@@ -68,6 +118,7 @@ BuildRequires:  python-nose
 BuildRequires:  python2-nose
 %endif
 Requires:       %{name}%{?_isa} = %{version}-%{release}
+Requires:       python2-%{name} = %{version}-%{release}
 # Fix problem with hawkey - dnf version incompatibility
 # Can be deleted for distros where only python2-dnf >= 2.0.0
 Conflicts:      python2-dnf < %{dnf_conflict}
@@ -75,6 +126,7 @@ Conflicts:      python-dnf < %{dnf_conflict}
 
 %description -n python2-hawkey
 Python 2 bindings for the hawkey library.
+%endif # with python2
 
 %if %{with python3}
 %package -n python3-hawkey
@@ -83,9 +135,11 @@ Summary:        Python 3 bindings for the hawkey library
 BuildRequires:  python3-devel
 BuildRequires:  python3-nose
 Requires:       %{name}%{?_isa} = %{version}-%{release}
+Requires:       python3-%{name} = %{version}-%{release}
 # Fix problem with hawkey - dnf version incompatibility
 # Can be deleted for distros where only python3-dnf >= 2.0.0
 Conflicts:      python3-dnf < %{dnf_conflict}
+# Obsoletes F27 packages
 Obsoletes:      platform-python-hawkey < %{version}-%{release}
 
 %description -n python3-hawkey
@@ -94,20 +148,24 @@ Python 3 bindings for the hawkey library.
 
 %prep
 %autosetup -p1
+%if %{with python2}
 mkdir build-py2
+%endif # with python2
 %if %{with python3}
 mkdir build-py3
 %endif
 
 %build
+%if %{with python2}
 pushd build-py2
-  %cmake -DWITH_MAN=OFF ../ %{!?with_valgrind:-DDISABLE_VALGRIND=1} %{_cmake_opts}
+  %cmake -DPYTHON_DESIRED:FILEPATH=%{__python2} -DWITH_MAN=OFF ../ %{!?with_valgrind:-DDISABLE_VALGRIND=1} %{_cmake_opts}
   %make_build
 popd
+%endif # with python2
 
 %if %{with python3}
 pushd build-py3
-  %cmake -DPYTHON_DESIRED:str=3 -DWITH_GIR=0 -DWITH_MAN=0 -Dgtkdoc=0 ../ %{!?with_valgrind:-DDISABLE_VALGRIND=1} %{_cmake_opts}
+  %cmake -DPYTHON_DESIRED:FILEPATH=%{__python3} -DWITH_GIR=0 -DWITH_MAN=0 -Dgtkdoc=0 ../ %{!?with_valgrind:-DDISABLE_VALGRIND=1} %{_cmake_opts}
   %make_build
 popd
 %endif
@@ -120,9 +178,12 @@ 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
@@ -132,33 +193,52 @@ popd
 %endif
 
 %install
+%if %{with python2}
 pushd build-py2
   %make_install
 popd
+%endif # with python2
 %if %{with python3}
 pushd build-py3
   %make_install
 popd
 %endif
 
+%find_lang %{name}
+
+%if 0%{?rhel} && 0%{?rhel} <= 7
 %post -p /sbin/ldconfig
 %postun -p /sbin/ldconfig
+%else
+%ldconfig_scriptlets
+%endif
 
-%files
+%files -f %{name}.lang
 %license COPYING
-%doc README.md AUTHORS NEWS
+%doc README.md AUTHORS
 %{_libdir}/%{name}.so.*
-%{_libdir}/girepository-1.0/Dnf-*.typelib
+%{_libdir}/libdnf/plugins/README
 
 %files devel
 %doc %{_datadir}/gtk-doc/html/%{name}/
 %{_libdir}/%{name}.so
 %{_libdir}/pkgconfig/%{name}.pc
 %{_includedir}/%{name}/
-%{_datadir}/gir-1.0/Dnf-*.gir
 
+%if %{with python2}
+%files -n python2-%{name}
+%{python2_sitearch}/%{name}/
+%endif # with python2
+
+%if %{with python3}
+%files -n python3-%{name}
+%{python3_sitearch}/%{name}/
+%endif
+
+%if %{with python2}
 %files -n python2-hawkey
 %{python2_sitearch}/hawkey/
+%endif # with python2
 
 %if %{with python3}
 %files -n python3-hawkey
@@ -166,88 +246,21 @@ popd
 %endif
 
 %changelog
-* Thu Nov 08 2018 Jaroslav Mracek <jmracek@redhat.com> - 0.11.1-4
-- Backport patch for RHBZ#1542307 from upstream libdnf-0.11.1
-
-* Tue Nov 07 2017 Igor Gnatenko <ignatenkobrain@fedoraproject.org> - 0.11.1-3
-- Use better Obsoletes for platform-python
-
-* Fri Nov 03 2017 Igor Gnatenko <ignatenko@redhat.com> - 0.11.1-2
-- Remove platform-python subpackage
-
-* Mon Oct 16 2017 Jaroslav Mracek <jmracek@redhat.com> - 0.11.1-1
-- Rerelease of 0.11.1-1
-- Improvement query performance
-- Run file query in hy_subject_get_best_solution only for files (arguments that start with ``/`` or
-  ``*/``)
-- Resolves: rhbz#1498207 - DNF crash during upgrade installation F26 -> F27
-
-* Tue Oct 10 2017 Igor Gnatenko <ignatenko@redhat.com> - 0.11.0-1
-- Update to 0.11.0
-
-* Mon Oct 02 2017 Jaroslav Mracek <jmracek@redhat.com> - 0.10.1-2
-- Rerelease of 0.10.1-1
-
-* Wed Sep 27 2017 Jaroslav Mracek <jmracek@redhat.com> - 0.10.1-1
-- Update to 0.10.1
-- It improves query performance with name and arch filters. Also nevra filter will now
-  handle string with or without epoch.
-- Additionally for python bindings it renames NEVRA._has_just_name() to NEVRA.has_just_name() due
-  to movement of code into c part of library.
-- Resolves: rhbz#1260242 - --exclude does not affect dnf remove's removal of requirements
-- Resolves: rhbz#1485881 - DNF claims it cannot install package, which have been already installed
-- Resolves: rhbz#1361187 - [abrt] python-ipython-console: filter_updown(): python3.5 killed by SIGABRT
-
-* Fri Sep 15 2017 Igor Gnatenko <ignatenko@redhat.com> - 0.9.3-8
-- Disable platform python on old releases
-
-* Tue Aug 15 2017 Lumír Balhar <lbalhar@redhat.com> - 0.9.3-7
-- Add platform-python subpackage
-
-* Fri Aug 11 2017 Igor Gnatenko <ignatenko@redhat.com> - 0.9.3-6
-- Rebuilt after RPM update (№ 3)
-
-* Thu Aug 10 2017 Igor Gnatenko <ignatenko@redhat.com> - 0.9.3-5
-- Rebuilt for RPM soname bump
-
-* Thu Aug 10 2017 Igor Gnatenko <ignatenko@redhat.com> - 0.9.3-4
-- Rebuilt for RPM soname bump
-
-* Thu Aug 03 2017 Fedora Release Engineering <releng@fedoraproject.org> - 0.9.3-3
-- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild
-
-* Wed Jul 26 2017 Fedora Release Engineering <releng@fedoraproject.org> - 0.9.3-2
-- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
-
-* Mon Jul 24 2017 Jaroslav Mracek <jmracek@redhat.com> - 0.9.3-1
-- Update to 0.9.3
-
-* Sat Jul 01 2017 Igor Gnatenko <ignatenko@redhat.com> - 0.9.2-1
-- Update to 0.9.2
-
-* Mon Jun 12 2017 Jaroslav Mracek <jmracek@redhat.com> - 0.9.1-1
-- Update to 0.9.1
-
-* Mon May 22 2017 Jaroslav Mracek <jmracek@redhat.com> - 0.9.0-1
-- Update to 0.9.0
-
-* Tue May 02 2017 Jaroslav Mracek <jmracek@redhat.com> - 0.8.2-1
-- Update to 0.8.2
-
-* Fri Mar 24 2017 Igor Gnatenko <ignatenko@redhat.com> - 0.8.1-1
-- Update to 0.8.1
+* Tue Jan 08 2019 Daniel Mach <dmach@redhat.com> - 0.22.5-1
+- Update to 0.22.5
+- queue_init_clone src argument const_cast for libsolv 0.6.34 compatibility
 
-* Tue Mar 21 2017 Jaroslav Mracek <jmracek@redhat.com> - 0.8.0-1
-- Update to 0.8.0
+* Wed Jun 13 2018 Marek Blaha <mblaha@redhat.com> - 0.11.1-1
+- Update to 0.11.1
 
-* Mon Feb 20 2017 Igor Gnatenko <ignatenko@redhat.com> - 0.7.4-1
-- Update to 0.7.4
+* Fri May 18 2018 Daniel Mach <dmach@redhat.com> - 0.7.4-4
+- Rebuild on additional architectures
 
-* Fri Feb 10 2017 Igor Gnatenko <ignatenko@redhat.com> - 0.7.3-1
-- Update to 0.7.3
+* Thu Mar 23 2017 Igor Gnatenko <ignatenko@redhat.com> - 0.7.4-3
+- Backport patch to find releasever in RPMDB
 
-* Wed Feb 08 2017 Igor Gnatenko <ignatenko@redhat.com> - 0.7.2-1
-- 0.7.2
+* Mon Feb 20 2017 Jan Silhan <jsilhan@redhat.com> - 0.7.4-2
+- 0.7.4
 
 * Fri Jan 06 2017 Igor Gnatenko <ignatenko@redhat.com> - 0.7.1-1
 - 0.7.1