[PackageKit-commit] packagekit: Branch 'master' - 97 commits

Richard Hughes hughsient at kemper.freedesktop.org
Mon Dec 13 02:22:28 PST 2010


 .gitignore                                     |    6 
 NEWS                                           |   84 
 README.transifex                               |   11 
 RELEASE                                        |   10 
 backends/.gitignore                            |    1 
 backends/Makefile.am                           |    4 
 backends/alpm/Makefile.am                      |    3 
 backends/alpm/pk-backend-alpm.c                |    2 
 backends/apt/Makefile.am                       |    3 
 backends/apt/pk-backend-apt.c                  |    3 
 backends/aptcc/Makefile.am                     |   10 
 backends/aptcc/apt.cpp                         |  262 -
 backends/aptcc/gstMatcher.cpp                  |  154 
 backends/aptcc/gstMatcher.h                    |   51 
 backends/aptcc/pk-backend-aptcc.cpp            |  310 -
 backends/box/Makefile.am                       |    3 
 backends/box/pk-backend-box.c                  |    2 
 backends/conary/Makefile.am                    |    3 
 backends/conary/pk-backend-conary.c            |    2 
 backends/dummy/pk-backend-dummy.c              |   62 
 backends/entropy/Makefile.am                   |    3 
 backends/entropy/pk-backend-entropy.c          |    2 
 backends/opkg/Makefile.am                      |    3 
 backends/opkg/pk-backend-opkg.c                |    2 
 backends/pacman/Makefile.am                    |    3 
 backends/pacman/backend-pacman.c               |    3 
 backends/pisi/Makefile.am                      |    3 
 backends/pisi/pk-backend-pisi.c                |    2 
 backends/poldek/Makefile.am                    |    3 
 backends/poldek/pk-backend-poldek.c            |    2 
 backends/portage/Makefile.am                   |    3 
 backends/portage/pk-backend-portage.c          |    2 
 backends/ports/Makefile.am                     |    3 
 backends/ports/pk-backend-ports.c              |    2 
 backends/razor/Makefile.am                     |    3 
 backends/razor/pk-backend-razor.c              |    2 
 backends/slapt/Makefile.am                     |    3 
 backends/slapt/pk-backend-slapt.c              |    2 
 backends/smart/Makefile.am                     |    3 
 backends/smart/pk-backend-smart.c              |    2 
 backends/smart/smartBackend.py                 |    6 
 backends/test/Makefile.am                      |    3 
 backends/test/pk-backend-test-fail.c           |   11 
 backends/test/pk-backend-test-succeed.c        |    9 
 backends/urpmi/Makefile.am                     |    3 
 backends/urpmi/pk-backend-urpmi.c              |    3 
 backends/yum/Makefile.am                       |    5 
 backends/yum/Yum.conf                          |   17 
 backends/yum/pk-backend-yum.c                  | 2741 -------------
 backends/yum/yumBackend.py                     |  140 
 backends/zif/.gitignore                        |    1 
 backends/zif/Makefile.am                       |   27 
 backends/zif/licenses.txt                      |    1 
 backends/zif/pk-backend-zif.c                  | 5102 +++++++++++++++++++++++++
 backends/zif/zif-comps-groups.conf             |    1 
 backends/zypp/Makefile.am                      |    3 
 backends/zypp/pk-backend-zypp.cpp              |  459 +-
 backends/zypp/zypp-utils.cpp                   |   54 
 backends/zypp/zypp-utils.h                     |    2 
 client/pk-console.c                            |   21 
 configure.ac                                   |   20 
 contrib/PackageKit.spec.in                     |   17 
 contrib/pk-completion.bash                     |    7 
 docs/api/spec/pk-concepts.xml                  |    3 
 docs/html/pk-download.html                     |   11 
 lib/packagekit-glib2/pk-bitfield.c             |   23 
 lib/packagekit-glib2/pk-client-helper.c        |   66 
 lib/packagekit-glib2/pk-client-sync.c          |   57 
 lib/packagekit-glib2/pk-client-sync.h          |    8 
 lib/packagekit-glib2/pk-client.c               |   83 
 lib/packagekit-glib2/pk-client.h               |   11 
 lib/packagekit-glib2/pk-distro-upgrade.c       |   57 
 lib/packagekit-glib2/pk-distro-upgrade.h       |    7 
 lib/packagekit-glib2/pk-enum.c                 |   44 
 lib/packagekit-glib2/pk-enum.h                 |   20 
 lib/packagekit-glib2/pk-self-test.c            |    4 
 lib/packagekit-qt/src/client.cpp               |    3 
 lib/packagekit-qt/src/clientprivate.cpp        |   26 
 lib/packagekit-qt/src/clientprivate.h          |   27 
 lib/packagekit-qt/src/enum.h                   | 1123 ++---
 lib/packagekit-qt/src/transaction.cpp          |   17 
 lib/packagekit-qt/src/transaction.h            |   12 
 lib/packagekit-qt/src/transactionprivate.cpp   |    2 
 lib/python/packagekit/backend.py               |   10 
 lib/python/packagekit/client.py                |    2 
 po/cs.po                                       | 2490 +++++++-----
 po/es.po                                       |  911 ++--
 po/eu.po                                       | 2075 ++++++++++
 po/pl.po                                       |  775 +--
 po/uk.po                                       |  964 ++--
 po/zh_TW.po                                    |  873 ++--
 policy/org.freedesktop.packagekit.policy.in    |   16 
 src/egg-string.c                               |    2 
 src/org.freedesktop.PackageKit.Transaction.xml |  102 
 src/pk-backend.c                               |   86 
 src/pk-backend.h                               |   11 
 src/pk-transaction-list.c                      |    3 
 src/pk-transaction.c                           |  122 
 src/pk-transaction.h                           |    7 
 99 files changed, 12990 insertions(+), 6753 deletions(-)

New commits:
commit 6e4b7e6de79891cdba9d10eed4ec7b326ebcb856
Author: Richard Hughes <richard at hughsie.com>
Date:   Mon Dec 13 10:22:11 2010 +0000

    Release version 0.6.11

diff --git a/NEWS b/NEWS
index 38064b0..ceb86bf 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,87 @@
+Version 0.6.11
+~~~~~~~~~~~~~~
+Released: 2010-12-13
+
+Notes:
+ - Additonal notes have been added to the DBus specification that allow
+   backends to send the origin of a installed package. This is optional.
+ - Additionally, more reccomendations have been made to allow searching
+   by repository. See the DBus specification for more details.
+ - An experimental Zif backend has been added. This should not be used
+   on production machines as it may crash and cause filesystem corruption.
+
+Translations:
+ - Added Basque translation (assar)
+ - Updated Chinese (Taiwan) (zh_TW) translation (Cheng-Chia Tseng)
+ - Updated Czech (cs) translation (fri)
+ - Updated Polish (pl) translation (Piotr DrÄ…g)
+ - Updated Spanish (Castilian) (es) translation (Jorge González)
+ - Updated Ukrainian (uk) translation (Yuri Chornoivan)
+
+Libraries:
+ - glib: Add some C getters to PkDistroUpgrade (Richard Hughes)
+ - packagekit-qt: Add searchGroups methods that can take a string so we can search on categories (Daniel Nicoletti)
+ - packagekit-qt: Emit transactionListChanged(empty) when daemon crashes (Daniel Nicoletti)
+ - packagekit-qt: Fix order of initialization (Daniel Nicoletti)
+ - packagekit-qt: Updated enums and converted tabs to spaces (Daniel Nicoletti)
+ - packagekit-qt: Use QDBusServiceWatcher instead of watching for serviceOwnerChanged() (Daniel Nicoletti)
+ - packagekit-qt: Write the getCategories() code so we can use it (Daniel Nicoletti)
+ - python: use SetHints now instead of SetLocale (Tim Waugh)
+
+Backends:
+ - aptcc: Added GStreamer search (Daniel Nicoletti)
+ - aptcc: Fix crash due to NULL strings
+ - aptcc: Fix regex not to match "()(64bit)" as we don't support multiarch anyway (Daniel Nicoletti)
+ - aptcc: Make sure the package is valid before some operations (Daniel Nicoletti)
+ - aptcc: Port away from PK_BACKEND_OPTIONS (Daniel Nicoletti)
+ - aptcc: Set the env proxy vars so that Apt::Acquire is not overwritten, fixes LP: #633008 (Daniel Nicoletti)
+ - aptcc: Use the new PK_ERROR_ENUM_CANNOT_GET_LOCK (Daniel Nicoletti)
+ - dummy: Add a more realistic UpgradeSystem (Richard Hughes)
+ - dummy: Fix a potential NULL dereference spotted by clang (Richard Hughes)
+ - pacman: Prevent recursive logging (Jonathan Conder)
+ - smart: Add origin to installed, if available (Anders F Bjorklund)
+ - yum: Allow a cache refresh when offline to deal with networkless setups (Richard Hughes)
+ - yum: Do not claim to implement the RepoSetData method (Richard Hughes)
+ - yum: Fix compiling when not using Zif (Richard Hughes)
+ - yum: Set the repository directory when doing a complete upgrade (Richard Hughes)
+ - yum: Support repo:foo virtual categories and searching using SearchGroup (Richard Hughes)
+ - yum: Support the optional origin extension for installed packages by using the yumdb information (Richard Hughes)
+ - zif: Add a new backend, which uses Zif to interface with the rpmdb and the Fedora metadata (Richard Hughes)
+ - zif: Add support for SearchGroup('repo:foo') (Richard Hughes)
+ - zif: Don't emit a ZifState warning if an update does not have update details (Richard Hughes)
+ - zif: Fix changelog generation when there is no changeset version available (Richard Hughes)
+ - zif: For updates without updateinfo, do not put '<none>' in the translated display (Richard Hughes)
+ - zif: Get the update vendor string and send to the daemon (Richard Hughes)
+ - zif: If we are running in background mode, depsolve the update lists (Richard Hughes)
+ - zif: Try to use PK_ERROR_ENUM_INTERNAL_ERROR less by using the correct PackageKit error code (Richard Hughes)
+ - zif: Use zif_package_get_printable() to get easier to understand error messages (Richard Hughes)
+ - zypp: Catch ZYppFactoryException in get_zypp (Zhang Qiang)
+ - zypp: Filter installed packages to update (Zhang Qiang)
+ - zypp: Fix a logic error in refresh cache (Zhang Qiang)
+ - zypp: Fix a typo in get_zypp (Zhang Qiang)
+ - zypp: Port from PK_BACKEND_OPTIONS function table (Duncan Mac-Vicar P)
+ - zypp: Support repo filter in geting repo list (Zhang Qiang)
+ - zypp: Transfer correct restart info while updating packages (Zhang Qiang)
+ - zypp: Use zypp::sat::SolvAttr::filelist in search file (Zhang Qiang)
+
+New Features:
+ - Add a new backend role for updating the whole distro: UpgradeSystem (Richard Hughes)
+ - Allow backend to encode the package origin in the package-id (Richard Hughes)
+ - Added PK_ERROR_ENUM_CANNOT_FETCH_SOURCES when refreshing cache fails (Daniel Nicoletti)
+ - Add recommendation repo:foo' to be able to return all packages in a certain repository (Richard Hughes)
+ - Change the spec to recommend 'category:web-development' rather than '@web-development' (Richard Hughes)
+ - Spawn KDE Debconf frontend if KDE is running (Matthias Klumpp)
+
+Bugfixes:
+ - Allow cancelling a transaction if it is not cancellable (Richard Hughes)
+ - Always show update a package even if already update (Zhang Qiang)
+ - Correct the description of org.freedesktop.packagekit.upgrade-system (Sveinung Kvilhaugsvik)
+ - Do not disable background mode if we are marked as interactive, as the two are orthognal (Richard Hughes)
+ - Ensure we can send a cache-age of maxuint to fix command-not-found (Richard Hughes)
+ - Ensure we emit PK_STATUS_ENUM_WAIT when a transaction is in the 'ready' state (Richard Hughes)
+ - Ignore unknown entries in the pk_x_bitfield_from_string() to ensure forwards compatibility (Richard Hughes)
+ - Use G_LOG_DOMAIN in all the backends (Richard Hughes)
+
 Version 0.6.10
 ~~~~~~~~~~~~~~
 Released: 2010-11-01
diff --git a/docs/html/pk-download.html b/docs/html/pk-download.html
index e6547f4..5410b6b 100644
--- a/docs/html/pk-download.html
+++ b/docs/html/pk-download.html
@@ -72,6 +72,7 @@ Releases are normally on the first working Monday of each month.
 </p>
 <table>
 <tr><td><b>Version</b></td><td>&nbsp;&nbsp;</td><td><b>Date</b></td></tr>
+<tr><td>0.6.11</td><td></td><td>2010-12-13</td></tr>
 <tr><td>0.6.10</td><td></td><td>2010-11-01</td></tr>
 <tr><td>0.6.9</td><td></td><td>2010-10-04</td></tr>
 <tr><td>0.6.8</td><td></td><td>2010-09-06</td></tr>
commit 8be3967a18eda8928326a0e064674ddedfcc3290
Merge: 02721af... a0d3395...
Author: Matthias Klumpp <matthias at nlinux.org>
Date:   Sun Dec 12 18:31:26 2010 +0100

    Merge branch 'master' of gitorious.org:packagekit/packagekit

commit 02721af4f8302914227c18d0b3834191add6dabb
Author: Matthias Klumpp <matthias at nlinux.org>
Date:   Sun Dec 12 18:30:45 2010 +0100

    trivial: Fix compilation issue with GCC 4.5
    
    For some reason, GCC throws an error cause the
    "command" var might be not initialized.
    So we initialize it now.

diff --git a/src/pk-transaction.c b/src/pk-transaction.c
index 2d7c8cd..a77df9a 100644
--- a/src/pk-transaction.c
+++ b/src/pk-transaction.c
@@ -687,7 +687,7 @@ pk_transaction_process_script (PkTransaction *transaction, const gchar *filename
 	GFile *file = NULL;
 	GFileInfo *info = NULL;
 	guint file_uid;
-	gchar *command;
+	gchar *command = NULL;
 	gint exit_status = 0;
 	gboolean ret;
 	GError *error = NULL;
commit a0d3395f6b3372dab3e516921dcdcec746ab8653
Author: Anders F Bjorklund <afb at users.sourceforge.net>
Date:   Fri Dec 10 12:23:05 2010 +0100

    smart: add origin to installed, if available

diff --git a/backends/smart/smartBackend.py b/backends/smart/smartBackend.py
index d7eeeab..5121efe 100755
--- a/backends/smart/smartBackend.py
+++ b/backends/smart/smartBackend.py
@@ -1029,7 +1029,7 @@ class PackageKitSmartBackend(PackageKitBaseBackend):
         if repoid == 'local':
             channels = self.ctrl.getFileChannels()
         elif repoid:
-            if repoid == 'installed':
+            if repoid.startswith('installed'):
                 repoid = self.systemchannel
             channels = self.ctrl.getChannels()
             channels = [x for x in channels if x.getAlias() == repoid]
@@ -1073,6 +1073,10 @@ class PackageKitSmartBackend(PackageKitBaseBackend):
         channel = loader.getChannel()
         if package.installed:
             data = 'installed'
+            if hasattr(smart.pkgconf, 'getOrigin'):
+                origin = smart.pkgconf.getOrigin(package)
+                if origin:
+                    data += ':' + origin
         elif self._channel_is_local(channel):
             data = 'local'
         else:
commit 34a11a9123d14155097c1f7f81b1f45f54da0bf4
Author: Tim Waugh <twaugh at redhat.com>
Date:   Fri Dec 10 11:05:41 2010 +0000

    python: use SetHints now instead of SetLocale.

diff --git a/lib/python/packagekit/client.py b/lib/python/packagekit/client.py
index 5273a7e..b051fd3 100644
--- a/lib/python/packagekit/client.py
+++ b/lib/python/packagekit/client.py
@@ -168,7 +168,7 @@ class PackageKitTransaction:
 
     def set_locale(self, code):
         '''Set the language to the given locale code'''
-        return self._iface.SetLocale(code)
+        return self._iface.SetHints(['locale=%s' % code])
 
     def cancel(self):
         '''Cancel the transaction'''
commit 2ecb5fde0b9e14dcf897362f4e136b2f53331b6f
Author: Zhang Qiang <qiang.z.zhang at intel.com>
Date:   Fri Dec 10 14:05:58 2010 +0800

    zypp:use zypp::sat::SolvAttr::filelist in search file
    
    Use zypp::sat::SolvAttr::filelist to instead of calling
    zypp_get_packages_by_file to search file with full path.
    
    Without this patch, 'pkcon search file' can only search files that has
    already been installed.

diff --git a/backends/zypp/pk-backend-zypp.cpp b/backends/zypp/pk-backend-zypp.cpp
index 29b171a..f3af16f 100644
--- a/backends/zypp/pk-backend-zypp.cpp
+++ b/backends/zypp/pk-backend-zypp.cpp
@@ -1433,14 +1433,13 @@ backend_find_packages_thread (PkBackend *backend)
 		// did not search in srcpackages.
 		break;
 	case SEARCH_TYPE_FILE: {
-		// zypp_build_pool (TRUE); called by zypp_get_packages_by_file
-		std::vector<zypp::sat::Solvable> *r;
-		r = zypp_get_packages_by_file (backend, search);
-		v.swap( *r );
-		delete r;
-		// zypp_get_packages_by_file does strange things :)
-		// Maybe it would be sufficient to simply query
-		// zypp::sat::SolvAttr::filelist instead?
+		zypp_build_pool (backend, TRUE);
+		q.addKind( zypp::ResKind::package );
+		q.addAttribute( zypp::sat::SolvAttr::name );
+		q.addAttribute( zypp::sat::SolvAttr::description );
+		q.addAttribute( zypp::sat::SolvAttr::filelist );
+		q.setFilesMatchFullPath(true);
+		q.setMatchExact();
 		break;
 	    }
 	};
commit d10753a01553899e8e4f7659b6e6a4745d9a0275
Author: Richard Hughes <richard at hughsie.com>
Date:   Thu Dec 9 18:29:56 2010 +0000

    zif: add support for SearchGroup('repo:foo')

diff --git a/backends/zif/pk-backend-zif.c b/backends/zif/pk-backend-zif.c
index 0efdfba..2cc0695 100644
--- a/backends/zif/pk-backend-zif.c
+++ b/backends/zif/pk-backend-zif.c
@@ -776,6 +776,96 @@ out:
 }
 
 /**
+ * pk_backend_search_repos:
+ */
+static GPtrArray *
+pk_backend_search_repos (gchar **repos,
+			 ZifState *state,
+			 GError **error)
+{
+	gboolean ret;
+	gchar *installed_repo_id = NULL;
+	GPtrArray *array_local = NULL;
+	GPtrArray *array = NULL;
+	GPtrArray *array_remote = NULL;
+	GPtrArray *array_tmp = NULL;
+	guint i;
+	ZifPackage *package;
+	ZifState *state_local;
+	ZifStoreRemote *store;
+
+	/* set steps */
+	ret = zif_state_set_steps (state,
+				   NULL,
+				   90, /* search installed */
+				   5, /* get remote store */
+				   5, /* get store */
+				   -1);
+	g_assert (ret);
+
+	/* results array */
+	array_tmp = zif_object_array_new ();
+
+	/* blank */
+	if (g_strcmp0 (repos[0], "repo:") == 0)
+		goto skip;
+
+	/* get all installed packages that were installed from this repo */
+	installed_repo_id = g_strdup_printf ("installed:%s", repos[0]);
+	state_local = zif_state_get_child (state);
+	array_local = zif_store_get_packages (priv->store_local, state_local, error);
+	if (array_local == NULL)
+		goto out;
+	for (i=0; i<array_local->len; i++) {
+		package = g_ptr_array_index (array_local, i);
+		if (g_strcmp0 (zif_package_get_data (package),
+			       installed_repo_id) == 0)
+			zif_object_array_add (array_tmp, package);
+	}
+
+	/* this section done */
+	ret = zif_state_done (state, error);
+	if (!ret)
+		goto out;
+
+	/* get all the available packages from this repo */
+	state_local = zif_state_get_child (state);
+	store = zif_repos_get_store (priv->repos, repos[0], state_local, error);
+	if (store == NULL)
+		goto out;
+
+	/* this section done */
+	ret = zif_state_done (state, error);
+	if (!ret)
+		goto out;
+
+	state_local = zif_state_get_child (state);
+	array_remote = zif_store_get_packages (ZIF_STORE (store), state_local, error);
+	if (array_remote == NULL)
+		goto out;
+	zif_object_array_add_array (array_tmp, array_remote);
+
+	/* this section done */
+	ret = zif_state_done (state, error);
+	if (!ret)
+		goto out;
+skip:
+	/* success */
+	array = g_ptr_array_ref (array_tmp);
+out:
+	g_free (installed_repo_id);
+	if (store != NULL)
+		g_object_unref (store);
+	if (array_tmp != NULL)
+		g_ptr_array_unref (array_tmp);
+	if (array_local != NULL)
+		g_ptr_array_unref (array_local);
+	if (array_remote != NULL)
+		g_ptr_array_unref (array_remote);
+	return array;
+}
+
+/**
  * pk_backend_search_collections:
  */
 static GPtrArray *
@@ -1172,6 +1262,20 @@ pk_backend_search_thread (PkBackend *backend)
 					search_stripped[i] = g_strdup (&search[i][1]);
 				array = zif_store_array_search_category (store_array, search_stripped, state_local, &error);
 				g_strfreev (search_stripped);
+			} else if (g_str_has_prefix (search[0], "category:")) {
+				search_entries = g_strv_length (search);
+				search_stripped = g_new0 (gchar *, search_entries + 1);
+				for (i=0; i < search_entries; i++)
+					search_stripped[i] = g_strdup (&search[i][9]);
+				array = zif_store_array_search_category (store_array, search_stripped, state_local, &error);
+				g_strfreev (search_stripped);
+			} else if (g_str_has_prefix (search[0], "repo:")) {
+				search_entries = g_strv_length (search);
+				search_stripped = g_new0 (gchar *, search_entries + 1);
+				for (i=0; i < search_entries; i++)
+					search_stripped[i] = g_strdup (&search[i][5]);
+				array = pk_backend_search_repos (search_stripped, state_local, &error);
+				g_strfreev (search_stripped);
 			} else if (g_strcmp0 (search[0], "newest") == 0) {
 				recent = zif_config_get_uint (priv->config, "recent", &error);
 				array = pk_backend_search_newest (store_array, state_local, recent, &error);
@@ -4389,21 +4493,29 @@ out:
 static gboolean
 pk_backend_get_categories_thread (PkBackend *backend)
 {
+	const gchar *name;
+	const gchar *repo_id;
+	gboolean enabled;
 	gboolean ret;
 	gchar *cat_id;
+	GError *error = NULL;
 	GPtrArray *array = NULL;
+	GPtrArray *repos = NULL;
 	GPtrArray *stores = NULL;
 	guint i;
 	ZifCategory *cat;
-
 	ZifState *state_local;
-	GError *error = NULL;
+	ZifState *state_loop;
+	ZifState *state_tmp;
+	ZifStoreRemote *store;
 
 	/* set steps */
 	ret = zif_state_set_steps (priv->state,
 				   NULL,
 				   25, /* get stores */
-				   60, /* get cats */
+				   50, /* get cats */
+				   5, /* get repos */
+				   5, /* emit repos */
 				   15, /* emit */
 				   -1);
 	g_assert (ret);
@@ -4489,8 +4601,131 @@ pk_backend_get_categories_thread (PkBackend *backend)
 		g_error_free (error);
 		goto out;
 	}
+
+	/* add the repo category objects */
+	pk_backend_category (backend,
+			     NULL,
+			     "repo:",
+			     "Software Sources",
+			     "Packages from specific software sources",
+			     "base-system");
+	state_local = zif_state_get_child (priv->state);
+	repos = zif_repos_get_stores (priv->repos, state_local, &error);
+	if (repos == NULL) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_REPO_NOT_FOUND,
+				       "failed to find repos: %s",
+				       error->message);
+		g_error_free (error);
+		goto out;
+	}
+
+	/* this section done */
+	ret = zif_state_done (priv->state, &error);
+	if (!ret) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+				       "cancelled: %s",
+				       error->message);
+		g_error_free (error);
+		goto out;
+	}
+
+	/* looks at each store */
+	state_local = zif_state_get_child (priv->state);
+	zif_state_set_number_steps (state_local, repos->len);
+	for (i=0; i<repos->len; i++) {
+		store = g_ptr_array_index (repos, i);
+
+		/* allow filtering on devel */
+		state_loop = zif_state_get_child (state_local);
+
+		/* devel, name, enabled */
+		ret = zif_state_set_steps (state_loop,
+					   NULL,
+					   50, /* get enabled */
+					   50, /* get name */
+					   -1);
+		g_assert (ret);
+
+		state_tmp = zif_state_get_child (state_loop);
+		enabled = zif_store_remote_get_enabled (store, state_tmp, NULL);
+		if (!enabled) {
+			ret = zif_state_finished (state_loop, &error);
+			if (!ret) {
+				pk_backend_error_code (backend,
+						       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+						       "cancelled: %s",
+						       error->message);
+				g_error_free (error);
+				goto out;
+			}
+			goto skip;
+		}
+
+		/* this section done */
+		ret = zif_state_done (state_loop, &error);
+		if (!ret) {
+			pk_backend_error_code (backend,
+					       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+					       "cancelled: %s",
+					       error->message);
+			g_error_free (error);
+			goto out;
+		}
+
+		/* get name */
+		state_tmp = zif_state_get_child (state_loop);
+		name = zif_store_remote_get_name (store, state_tmp, NULL);
+
+		/* this section done */
+		ret = zif_state_done (state_loop, &error);
+		if (!ret) {
+			pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+				       "cancelled: %s",
+				       error->message);
+			g_error_free (error);
+			goto out;
+		}
+
+		/* emit */
+		repo_id = zif_store_get_id (ZIF_STORE (store));
+		cat_id = g_strdup_printf ("repo:%s", repo_id);
+		pk_backend_category (backend,
+				     "repo:",
+				     cat_id,
+				     name,
+				     name,
+				     "base-system");
+		g_free (cat_id);
+skip:
+		/* this section done */
+		ret = zif_state_done (state_local, &error);
+		if (!ret) {
+			pk_backend_error_code (backend,
+					       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+					       "cancelled: %s",
+					       error->message);
+			g_error_free (error);
+			goto out;
+		}
+	}
+
+	/* this section done */
+	ret = zif_state_done (priv->state, &error);
+	if (!ret) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+				       "cancelled: %s",
+				       error->message);
+		g_error_free (error);
+		goto out;
+	}
 out:
 	pk_backend_finished (backend);
+	if (repos != NULL)
+		g_ptr_array_unref (repos);
 	if (array != NULL)
 		g_ptr_array_unref (array);
 	if (stores != NULL)
commit 520752778559a4b2a6f14340febe7b82d89f1005
Author: Matthias Klumpp <matthias at nlinux.org>
Date:   Thu Dec 9 18:46:30 2010 +0100

    Spawn KDE Debconf frontend if KDE is running
    
    Make pk-glib2 run a KDE frontend if it is installed
    and KDE is running.
    This will make it possible for KDE users to have nice
    KDE dialogs displayed when using pkcon.

diff --git a/lib/packagekit-glib2/pk-client-helper.c b/lib/packagekit-glib2/pk-client-helper.c
index fd440ac..4781a90 100644
--- a/lib/packagekit-glib2/pk-client-helper.c
+++ b/lib/packagekit-glib2/pk-client-helper.c
@@ -110,19 +110,21 @@ pk_client_helper_stop (PkClientHelper *client_helper, GError **error)
 	g_return_val_if_fail (priv->socket_file != NULL, FALSE);
 
 	/* close the socket */
-	ret = g_socket_close (priv->socket, error);
-	if (!ret)
-		goto out;
+	if (priv->socket != NULL) {
+		ret = g_socket_close (priv->socket, error);
+		if (!ret)
+			goto out;
 
-	/* stop watching for events */
-	if (priv->io_channel_socket_listen_id > 0)
-		g_source_remove (priv->io_channel_socket_listen_id);
-	if (priv->io_channel_child_stdout_listen_id > 0)
-		g_source_remove (priv->io_channel_child_stdout_listen_id);
-	if (priv->io_channel_child_stderr_listen_id > 0)
-		g_source_remove (priv->io_channel_child_stderr_listen_id);
-	if (priv->io_channel_child_stdin_listen_id > 0)
-		g_source_remove (priv->io_channel_child_stdin_listen_id);
+		/* stop watching for events */
+		if (priv->io_channel_socket_listen_id > 0)
+			g_source_remove (priv->io_channel_socket_listen_id);
+		if (priv->io_channel_child_stdout_listen_id > 0)
+			g_source_remove (priv->io_channel_child_stdout_listen_id);
+		if (priv->io_channel_child_stderr_listen_id > 0)
+			g_source_remove (priv->io_channel_child_stderr_listen_id);
+		if (priv->io_channel_child_stdin_listen_id > 0)
+			g_source_remove (priv->io_channel_child_stdin_listen_id);
+	}
 
 	/* kill process */
 	if (priv->child_pid > 0) {
@@ -138,10 +140,15 @@ pk_client_helper_stop (PkClientHelper *client_helper, GError **error)
 		}
 	}
 
+	/* when we're here, everything worked fine */
+	ret = TRUE;
+
 	/* remove any socket file */
-	ret = g_file_delete (priv->socket_file, NULL, error);
-	if (!ret)
-		goto out;
+	if (g_file_query_exists (priv->socket_file, NULL)) {
+		ret = g_file_delete (priv->socket_file, NULL, error);
+		if (!ret)
+		    goto out;
+	}
 out:
 	return ret;
 }
@@ -437,7 +444,10 @@ pk_client_helper_start (PkClientHelper *client_helper,
 			gchar **argv, gchar **envp,
 			GError **error)
 {
+	guint i;
 	gboolean ret = FALSE;
+	gboolean use_kde_helper = FALSE;
+	GError *error_local = NULL;
 	gint fd;
 	GSocketAddress *address = NULL;
 	PkClientHelperPrivate *priv = client_helper->priv;
@@ -459,13 +469,20 @@ pk_client_helper_start (PkClientHelper *client_helper,
 	}
 
 	g_debug ("using socket in %s", socket_filename);
+	priv->socket_file = g_file_new_for_path (socket_filename);
+
+	/* preconfigure KDE frontend, if requested */
+	for (i=0; envp[i] != NULL; i++) {
+		if (g_strcmp0 (envp[i], "DEBIAN_FRONTEND=kde") == 0)
+			if (g_file_test ("/usr/bin/debconf-kde-helper", G_FILE_TEST_EXISTS))
+				use_kde_helper = TRUE;
+	}
 
 	/* cache for actual start */
 	priv->argv = g_strdupv (argv);
 	priv->envp = g_strdupv (envp);
 
 	/* create socket */
-	priv->socket_file = g_file_new_for_path (socket_filename);
 	priv->socket = g_socket_new (G_SOCKET_FAMILY_UNIX, G_SOCKET_TYPE_STREAM, G_SOCKET_PROTOCOL_DEFAULT, error);
 	if (priv->socket == NULL)
 		goto out;
@@ -476,6 +493,23 @@ pk_client_helper_start (PkClientHelper *client_helper,
 	if (!ret)
 		goto out;
 
+	/* spawn KDE debconf communicator */
+	if (use_kde_helper) {
+		priv->argv = g_new0 (gchar *, 2);
+		priv->argv[0] = g_strdup ("/usr/bin/debconf-kde-helper");
+		priv->argv[1] = g_strconcat ("--socket-path", "=", socket_filename, NULL);
+
+		ret = g_spawn_async (NULL, priv->argv, NULL, G_SPAWN_STDOUT_TO_DEV_NULL,
+			NULL, NULL, &priv->child_pid, &error_local);
+		if (!ret) {
+			g_warning ("failed to spawn: %s", error_local->message);
+			g_error_free (error_local);
+			goto out;
+		}
+		g_debug ("started process %s with pid %i", priv->argv[0], priv->child_pid);
+		goto out;
+	}
+
 	/* listen to the socket */
 	ret = g_socket_listen (priv->socket, error);
 	if (!ret)
commit a53380b0846cfcf5cc263b2c1ee26220d9eec728
Author: Richard Hughes <richard at hughsie.com>
Date:   Thu Dec 9 16:29:38 2010 +0000

    yum: Support repo:foo virtual categories and searching using SearchGroup

diff --git a/backends/yum/yumBackend.py b/backends/yum/yumBackend.py
index 0d10c49..0edce6d 100755
--- a/backends/yum/yumBackend.py
+++ b/backends/yum/yumBackend.py
@@ -520,6 +520,113 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
             raise PkError(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
         return pkgs
 
+    def _handle_repo_group_search_using_yumdb(self, repo_id, filters):
+        """
+        Handle the special repo groups
+        """
+        self.percentage(None)
+        pkgfilter = YumFilter(filters)
+        available = []
+        installed = []
+
+        pkgs = []
+        # get installed packages that came from this repo
+        try:
+            pkgs = self.yumbase.rpmdb
+        except exceptions.IOError, e:
+            self.error(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
+        except Exception, e:
+            self.error(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
+        for pkg in pkgs:
+            if pkg.yumdb_info.get('from_repo') == repo_id:
+                pkgfilter.add_installed([pkg])
+
+        # find the correct repo
+        try:
+            repos = self.yumbase.repos.findRepos(repo_id)
+        except exceptions.IOError, e:
+            raise PkError(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
+        except Exception, e:
+            raise PkError(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
+        if len(repos) == 0:
+            raise PkError(ERROR_REPO_NOT_FOUND, "cannot find repo %s" % repo)
+
+        # the repo might have been disabled if it is no longer contactable
+        if not repos[0].isEnabled():
+            raise PkError(ERROR_PACKAGE_NOT_FOUND, '%s cannot be found as %s is disabled' % (_format_package_id(package_id), repos[0].id))
+
+        # populate the sack with data
+        try:
+            self.yumbase.repos.populateSack(repo_id)
+        except exceptions.IOError, e:
+            raise PkError(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
+        except Exception, e:
+            raise PkError(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
+        for pkg in repos[0].sack:
+            available.append(pkg)
+
+        # add list to filter
+        pkgfilter.add_installed(installed)
+        pkgfilter.add_available(available)
+        package_list = pkgfilter.post_process()
+        self._show_package_list(package_list)
+        self.percentage(100)
+
+    def _handle_repo_group_search(self, repo_id, filters):
+        """
+        Handle the special repo groups
+        This is much slower than using _handle_repo_group_search_using_yumdb()
+        as we have to resolve each package in the repo to see if it's
+        installed.
+        Of course, on RHEL5, there is no yumdb.
+        """
+        self.percentage(None)
+        pkgfilter = YumFilter(filters)
+        available = []
+        installed = []
+
+        # find the correct repo
+        try:
+            repos = self.yumbase.repos.findRepos(repo_id)
+        except exceptions.IOError, e:
+            raise PkError(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
+        except Exception, e:
+            raise PkError(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
+        if len(repos) == 0:
+            raise PkError(ERROR_REPO_NOT_FOUND, "cannot find repo %s" % repo)
+        print "found repos"
+
+        # the repo might have been disabled if it is no longer contactable
+        if not repos[0].isEnabled():
+            raise PkError(ERROR_PACKAGE_NOT_FOUND, '%s cannot be found as %s is disabled' % (_format_package_id(package_id), repos[0].id))
+
+        # populate the sack with data
+        try:
+            self.yumbase.repos.populateSack(repo_id)
+        except exceptions.IOError, e:
+            raise PkError(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
+        except Exception, e:
+            raise PkError(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
+
+        for pkg in repos[0].sack:
+            try:
+                instpo = self.yumbase.rpmdb.searchNevra(name=pkg.name, epoch=pkg.epoch, ver=pkg.ver, rel=pkg.rel, arch=pkg.arch)
+            except exceptions.IOError, e:
+                raise PkError(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
+            except Exception, e:
+                raise PkError(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
+            if self._is_inst(pkg):
+                installed.append(instpo[0])
+            else:
+                available.append(pkg)
+
+        # add list to filter
+        pkgfilter.add_installed(installed)
+        pkgfilter.add_available(available)
+        package_list = pkgfilter.post_process()
+        self._show_package_list(package_list)
+        self.percentage(100)
+
     def _handle_newest(self, filters):
         """
         Handle the special newest group
@@ -640,6 +747,14 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
                 self.error(e.code, e.details, exit=False)
             return
 
+        # handle repo groups
+        if 'repo:' in values[0]:
+            try:
+                self._handle_repo_group_search_using_yumdb(values[0].replace('repo:',''), filters)
+            except PkError, e:
+                self.error(e.code, e.details, exit=False)
+            return
+
         # for each search term
         for value in values:
             # handle dynamic groups (yum comps group)
@@ -894,6 +1009,20 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
                 self.category("", cat_id, name, summary, icon)
                 self._get_groups(cat_id)
 
+        # also add the repo category objects
+        self.category("", 'repo:', 'Software Sources', 'Packages from specific software sources', 'base-system')
+        try:
+            repos = self.yumbase.repos.repos.values()
+        except exceptions.IOError, e:
+            self.error(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
+            return
+        except Exception, e:
+            self.error(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
+            return
+        for repo in repos:
+            if repo.isEnabled():
+                self.category("repo:", "repo:" + repo.id, repo.name, 'Packages from ' + repo.name, 'base-system')
+
     def _get_groups(self, cat_id):
         '''
         Implement the get-collections functionality
commit c1ddea497f0634acc393f15f554553403fbc5943
Author: Richard Hughes <richard at hughsie.com>
Date:   Thu Dec 9 16:21:10 2010 +0000

    Add 'repo:foo' to the specification to be able to return all packages in a certain repository and to list them as categories

diff --git a/src/org.freedesktop.PackageKit.Transaction.xml b/src/org.freedesktop.PackageKit.Transaction.xml
index b879efa..da08713 100644
--- a/src/org.freedesktop.PackageKit.Transaction.xml
+++ b/src/org.freedesktop.PackageKit.Transaction.xml
@@ -283,6 +283,13 @@
             This method typically emits
             <doc:tt>Categories</doc:tt> and <doc:tt>Error</doc:tt>.
           </doc:para>
+          <doc:para>
+            Note: Categories can be returned that represent groups of
+            packages in a specific repository.
+            These will have a category prefix of <doc:tt>repo:</doc:tt>
+            which should be understood by <doc:tt>SearchGroups</doc:tt>
+            if this feature is used.
+          </doc:para>
       </doc:doc>
     </method>
 
@@ -1205,6 +1212,14 @@
               This is still supported, and backends should continue to support
               category searches like <doc:tt>@web-development</doc:tt>.
             </doc:para>
+            <doc:para>
+              If the values strings are prefixed with <doc:tt>repo:</doc:tt> then
+              the request is treated as a 'repository search', for example:
+              <doc:tt>repo:fedora-debuginfo</doc:tt>.
+              In this instance all packages that were either installed
+              from, or can be installed from the <doc:tt>fedora-debuginfo</doc:tt>
+              source would be returned.
+            </doc:para>
           </doc:summary>
         </doc:doc>
       </arg>
commit 2272147a6d0aa846da8aa3e41c099f4082ee43e3
Author: Richard Hughes <richard at hughsie.com>
Date:   Thu Dec 9 16:19:27 2010 +0000

    Change the spec to recommend 'category:web-development' rather than '@web-development' as it's less magic

diff --git a/src/org.freedesktop.PackageKit.Transaction.xml b/src/org.freedesktop.PackageKit.Transaction.xml
index 2855550..b879efa 100644
--- a/src/org.freedesktop.PackageKit.Transaction.xml
+++ b/src/org.freedesktop.PackageKit.Transaction.xml
@@ -1194,11 +1194,16 @@
             <doc:para>
               An enumerated group type, or <doc:tt>unknown</doc:tt>. The search
               cannot contain spaces.
+              The following recommendations are made below:
             </doc:para>
             <doc:para>
-              If the values strings are prefixed with <doc:tt>@</doc:tt> then
-              this is treated as a category, for example:
-              <doc:tt>@web-development</doc:tt>.
+              If the values strings are prefixed with <doc:tt>category:</doc:tt> then
+              the request is treated as a 'category search', for example:
+              <doc:tt>category:web-development</doc:tt>.
+              Note: the old nomenclature for a 'category search' suggested
+              using a <doc:tt>@</doc:tt> prefix for the values options.
+              This is still supported, and backends should continue to support
+              category searches like <doc:tt>@web-development</doc:tt>.
             </doc:para>
           </doc:summary>
         </doc:doc>
commit ef0f3ede40592650248db5673ede85ab66b5d841
Author: Richard Hughes <richard at hughsie.com>
Date:   Thu Dec 9 12:14:45 2010 +0000

    yum: support the optional origin extension for installed packages by using the yumdb information

diff --git a/backends/yum/yumBackend.py b/backends/yum/yumBackend.py
index f956d3e..0d10c49 100755
--- a/backends/yum/yumBackend.py
+++ b/backends/yum/yumBackend.py
@@ -421,7 +421,7 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
             try:
                 res = self.yumbase.searchGenerator(searchlist, values)
                 for (pkg, inst) in res:
-                    if pkg.repo.id == 'installed':
+                    if pkg.repo.id.startswith('installed'):
                         installed.append(pkg)
                     else:
                         available.append(pkg)
@@ -1056,7 +1056,7 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
         # get e, v, r from package id version
         e, v, r = _getEVR(idver)
 
-        if repo == 'installed':
+        if repo.startswith('installed'):
             # search the rpmdb for the nevra
             try:
                 pkgs = self.yumbase.rpmdb.searchNevra(name=n, epoch=e, ver=v, rel=r, arch=a)
@@ -2478,7 +2478,7 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
 
         # if we are remote and in the cache, our size is zero
         size = pkg.size
-        if pkg.repo.id != 'installed' and pkg.verifyLocalPkg():
+        if not pkg.repo.id.startswith('installed') and pkg.verifyLocalPkg():
             size = 0
 
         group = self.comps.get_group(pkg.name)
@@ -2514,6 +2514,11 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
         repo = str(pkg.repo)
         if repo.startswith('/'):
             repo = "local"
+        # can we add data from the yumdb
+        if repo == 'installed':
+            repo_tmp = pkg.yumdb_info.get('from_repo')
+            if repo_tmp:
+                repo = 'installed:' + repo_tmp
         package_id = self.get_package_id(pkg.name, pkgver, pkg.arch, repo)
         return package_id
 
commit 07e6cd5ba15bd8c3f4553c5bdf748a7c7636c4fa
Author: Richard Hughes <richard at hughsie.com>
Date:   Thu Dec 9 11:16:35 2010 +0000

    Add an optional spec enhancement to allow backend to encode the package origin in the package-id
    
    This allow local package-id in the format 'hal;0.1;i386;installed:fedora'

diff --git a/docs/api/spec/pk-concepts.xml b/docs/api/spec/pk-concepts.xml
index aaf82b2..b74b532 100644
--- a/docs/api/spec/pk-concepts.xml
+++ b/docs/api/spec/pk-concepts.xml
@@ -22,8 +22,7 @@
       be present.
       For instance, <literal>gnome-keyring-manager;2.18.0;;</literal> is
       valid but <literal>gnome-keyring-manager;2.18.0</literal> is not.
-      The data field can be used for the repository name or any other purpose.
-      It is designed to make the life of a backend writer a little bit easier.
+      The data field is used for the repository name.
     </para>
     <para>
       The data field for an installed package must be
diff --git a/src/org.freedesktop.PackageKit.Transaction.xml b/src/org.freedesktop.PackageKit.Transaction.xml
index 17b3ab9..2855550 100644
--- a/src/org.freedesktop.PackageKit.Transaction.xml
+++ b/src/org.freedesktop.PackageKit.Transaction.xml
@@ -1063,7 +1063,8 @@
           <doc:para>
             <doc:tt>Package</doc:tt> enumerated types should be
             <doc:tt>available</doc:tt> or <doc:tt>installed</doc:tt>.
-          </doc:para>        </doc:description>
+          </doc:para>
+        </doc:description>
       </doc:doc>
       <arg type="s" name="filter" direction="in">
         <doc:doc>
@@ -1115,7 +1116,8 @@
           <doc:para>
             <doc:tt>Package</doc:tt> enumerated types should be
             <doc:tt>available</doc:tt> or <doc:tt>installed</doc:tt>.
-          </doc:para>        </doc:description>
+          </doc:para>
+        </doc:description>
       </doc:doc>
       <arg type="s" name="filter" direction="in">
         <doc:doc>
@@ -1870,7 +1872,32 @@
         <doc:doc>
           <doc:summary>
             <doc:para>
-              A valid package ID string with as much data as known
+              This identifier is of the form <doc:tt>name;version;arch;data</doc:tt>
+              in a single string and is meant to represent a single package
+              unique across all local and remote data stores.
+            </doc:para>
+            <doc:para>
+              For a remote, not-installed package the data field should
+              be set as the repository identifier or repository name.
+            </doc:para>
+            <doc:para>
+              The data field for an installed package must be prefixed
+              with <doc:tt>installed</doc:tt> as this is used to identify
+              which packages are installable or installed in the client
+              tools.
+            </doc:para>
+            <doc:para>
+              As a special extension, if the package manager is able to
+              track which repository a package was originally installed
+              from, then the data field can be set to
+              <doc:tt>installed:REPO-NAME</doc:tt> which allows the
+              frontend client to advise the user of the package origin.
+            </doc:para>
+            <doc:para>
+              The data field for a non-installed local package must be
+              <doc:tt>local</doc:tt> as this signifies a repository name is
+              not available and that package resides locally on the
+              client system rather than in any specific repository.
             </doc:para>
           </doc:summary>
         </doc:doc>
commit adbf3a705ff16d0b9d561aea210c8a7c5b9920e7
Author: Richard Hughes <richard at hughsie.com>
Date:   Tue Dec 7 16:00:45 2010 +0000

    trivial: remove some flags that are no longer needed now the transaction has it's own state

diff --git a/src/pk-transaction.c b/src/pk-transaction.c
index 77bc85b..2d7c8cd 100644
--- a/src/pk-transaction.c
+++ b/src/pk-transaction.c
@@ -91,8 +91,6 @@ struct PkTransactionPrivate
 	guint			 remaining_time;
 	guint			 speed;
 	gboolean		 finished;
-	gboolean		 running;
-	gboolean		 has_been_run;
 	gboolean		 allow_cancel;
 	gboolean		 waiting_for_auth;
 	gboolean		 emit_eula_required;
@@ -1051,9 +1049,6 @@ pk_transaction_finished_cb (PkBackend *backend, PkExitEnum exit_enum, PkTransact
 	/* we should get no more from the backend with this tid */
 	transaction->priv->finished = TRUE;
 
-	/* mark not running */
-	transaction->priv->running = FALSE;
-
 	/* if we did ::repo-signature-required or ::eula-required, change the error code */
 	if (transaction->priv->emit_signature_required)
 		exit_enum = PK_EXIT_ENUM_KEY_REQUIRED;
@@ -1945,8 +1940,6 @@ pk_transaction_set_running (PkTransaction *transaction)
 				  G_CALLBACK (pk_transaction_speed_cb), transaction);
 
 	/* mark running */
-	priv->running = TRUE;
-	priv->has_been_run = TRUE;
 	priv->allow_cancel = FALSE;
 
 	/* reset after the pre-transaction checks */
@@ -2826,7 +2819,7 @@ pk_transaction_cancel (PkTransaction *transaction, DBusGMethodInvocation *contex
 
 skip_uid:
 	/* if it's never been run, just remove this transaction from the list */
-	if (!transaction->priv->has_been_run) {
+	if (transaction->priv->state <= PK_TRANSACTION_STATE_READY) {
 		pk_transaction_progress_changed_emit (transaction, 100, 100, 0, 0);
 		pk_transaction_allow_cancel_emit (transaction, FALSE);
 		pk_transaction_status_changed_emit (transaction, PK_STATUS_ENUM_FINISHED);
@@ -5766,8 +5759,6 @@ pk_transaction_init (PkTransaction *transaction)
 #endif
 	transaction->priv = PK_TRANSACTION_GET_PRIVATE (transaction);
 	transaction->priv->finished = FALSE;
-	transaction->priv->running = FALSE;
-	transaction->priv->has_been_run = FALSE;
 	transaction->priv->waiting_for_auth = FALSE;
 	transaction->priv->allow_cancel = TRUE;
 	transaction->priv->emit_eula_required = FALSE;
commit bdc9c0edf89817ef75f086c961a2f6164db33769
Author: Richard Hughes <richard at hughsie.com>
Date:   Tue Dec 7 15:58:41 2010 +0000

    Allow cancelling a transaction if it is not cancellable
    
    Also, don't set an auto-cancel timeout as it's really not a safe thing
    to do. Let the backend handle this always.

diff --git a/src/pk-backend.c b/src/pk-backend.c
index 151689d..48723db 100644
--- a/src/pk-backend.c
+++ b/src/pk-backend.c
@@ -114,7 +114,6 @@ struct PkBackendPrivate
 	guint			 signal_error_timeout;
 	guint			 signal_finished;
 	guint			 speed;
-	guint			 cancel_id;
 	GHashTable		*eulas;
 	GModule			*handle;
 	GThread			*thread;
@@ -2253,12 +2252,6 @@ pk_backend_finished (PkBackend *backend)
 	/* safe to check now */
 	g_return_val_if_fail (backend->priv->locked != FALSE, FALSE);
 
-	/* no longer need to cancel */
-	if (backend->priv->cancel_id != 0) {
-		g_source_remove (backend->priv->cancel_id);
-		backend->priv->cancel_id = 0;
-	}
-
 	/* find out what we just did */
 	role_text = pk_role_enum_to_string (backend->priv->role);
 	g_debug ("finished role %s", role_text);
@@ -2740,9 +2733,6 @@ pk_backend_finalize (GObject *object)
 	g_object_unref (backend->priv->conf);
 	g_hash_table_destroy (backend->priv->eulas);
 
-	if (backend->priv->cancel_id > 0)
-		g_source_remove (backend->priv->cancel_id);
-
 	if (backend->priv->handle != NULL)
 		g_module_close (backend->priv->handle);
 	g_debug ("parent_class->finalize");
@@ -2965,22 +2955,6 @@ pk_backend_reset (PkBackend *backend)
 }
 
 /**
- * pk_backend_cancel_cb:
- */
-static gboolean
-pk_backend_cancel_cb (PkBackend *backend)
-{
-	/* set an error if the backend didn't do it for us */
-	if (!backend->priv->set_error) {
-		g_warning ("backend failed to exit in %ims, cancelling ourselves", PK_BACKEND_CANCEL_ACTION_TIMEOUT);
-		pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_CANCELLED, "transaction was cancelled");
-		pk_backend_finished (backend);
-	}
-	backend->priv->cancel_id = 0;
-	return FALSE;
-}
-
-/**
  * pk_backend_cancel:
  */
 void
@@ -2990,13 +2964,6 @@ pk_backend_cancel (PkBackend *backend)
 
 	/* call into the backend */
 	backend->priv->desc->cancel (backend);
-
-	/* set an error if the backend didn't do it for us */
-	backend->priv->cancel_id = g_timeout_add (PK_BACKEND_CANCEL_ACTION_TIMEOUT,
-						  (GSourceFunc) pk_backend_cancel_cb, backend);
-#if GLIB_CHECK_VERSION(2,25,8)
-	g_source_set_name_by_id (backend->priv->cancel_id, "[PkBackend] cancel");
-#endif
 }
 
 /**
@@ -3469,7 +3436,6 @@ pk_backend_init (PkBackend *backend)
 	backend->priv->locked = FALSE;
 	backend->priv->use_threads = FALSE;
 	backend->priv->signal_finished = 0;
-	backend->priv->cancel_id = 0;
 	backend->priv->speed = 0;
 	backend->priv->signal_error_timeout = 0;
 	backend->priv->during_initialize = FALSE;
diff --git a/src/pk-transaction.c b/src/pk-transaction.c
index ac77e84..77bc85b 100644
--- a/src/pk-transaction.c
+++ b/src/pk-transaction.c
@@ -2790,16 +2790,6 @@ pk_transaction_cancel (PkTransaction *transaction, DBusGMethodInvocation *contex
 		goto out;
 	}
 
-	/* check if it's safe to kill */
-	if (!transaction->priv->allow_cancel) {
-		error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_CANNOT_CANCEL,
-				     "Tried to cancel %s (%s) that is not safe to kill",
-				     transaction->priv->tid,
-				     pk_role_enum_to_string (transaction->priv->role));
-		pk_transaction_dbus_return_error (context, error);
-		goto out;
-	}
-
 	/* first, check the sender -- if it's the same we don't need to check the uid */
 	sender = dbus_g_method_get_sender (context);
 	ret = (g_strcmp0 (transaction->priv->sender, sender) == 0);
commit 512fb25514fa6926b46bb5734f3b55a533c1723d
Author: Richard Hughes <richard at hughsie.com>
Date:   Tue Dec 7 15:52:09 2010 +0000

    zif: try to use PK_ERROR_ENUM_INTERNAL_ERROR less by using the correct PackageKit error code

diff --git a/backends/zif/pk-backend-zif.c b/backends/zif/pk-backend-zif.c
index d7c718d..0efdfba 100644
--- a/backends/zif/pk-backend-zif.c
+++ b/backends/zif/pk-backend-zif.c
@@ -128,6 +128,150 @@ pk_backend_is_all_installed (gchar **package_ids)
 }
 
 /**
+ * pk_backend_convert_error:
+ */
+static PkErrorEnum
+pk_backend_convert_error (const GError *error)
+{
+	PkErrorEnum error_code = PK_ERROR_ENUM_INTERNAL_ERROR;
+	if (error->domain == ZIF_STATE_ERROR) {
+		switch (error->code) {
+		case ZIF_STATE_ERROR_CANCELLED:
+			error_code = PK_ERROR_ENUM_TRANSACTION_CANCELLED;
+			break;
+		case ZIF_STATE_ERROR_INVALID:
+			error_code = PK_ERROR_ENUM_INTERNAL_ERROR;
+			break;
+		default:
+			error_code = PK_ERROR_ENUM_INTERNAL_ERROR;
+		}
+	} else if (error->domain == ZIF_TRANSACTION_ERROR) {
+		switch (error->code) {
+		case ZIF_TRANSACTION_ERROR_FAILED:
+			error_code = PK_ERROR_ENUM_TRANSACTION_ERROR;
+			break;
+		case ZIF_TRANSACTION_ERROR_NOTHING_TO_DO:
+			error_code = PK_ERROR_ENUM_NO_PACKAGES_TO_UPDATE;
+			break;
+		case ZIF_TRANSACTION_ERROR_NOT_SUPPORTED:
+			error_code = PK_ERROR_ENUM_NOT_SUPPORTED;
+			break;
+		case ZIF_TRANSACTION_ERROR_CONFLICTING:
+			error_code = PK_ERROR_ENUM_FILE_CONFLICTS;
+			break;
+		default:
+			error_code = PK_ERROR_ENUM_INTERNAL_ERROR;
+		}
+	} else if (error->domain == ZIF_STORE_ERROR) {
+		switch (error->code) {
+		case ZIF_STORE_ERROR_FAILED_AS_OFFLINE:
+			error_code = PK_ERROR_ENUM_NO_NETWORK;
+			break;
+		case ZIF_STORE_ERROR_FAILED_TO_FIND:
+			error_code = PK_ERROR_ENUM_PACKAGE_NOT_FOUND;
+			break;
+		case ZIF_STORE_ERROR_FAILED_TO_DOWNLOAD:
+			error_code = PK_ERROR_ENUM_PACKAGE_DOWNLOAD_FAILED;
+			break;
+		case ZIF_STORE_ERROR_ARRAY_IS_EMPTY:
+			error_code = PK_ERROR_ENUM_NO_PACKAGES_TO_UPDATE;
+			break;
+		case ZIF_STORE_ERROR_NO_SUPPORT:
+			error_code = PK_ERROR_ENUM_NOT_SUPPORTED;
+			break;
+		case ZIF_STORE_ERROR_NOT_LOCKED:
+			error_code = PK_ERROR_ENUM_NOT_SUPPORTED;
+			break;
+		case ZIF_STORE_ERROR_FAILED:
+		case ZIF_STORE_ERROR_MULTIPLE_MATCHES:
+			error_code = PK_ERROR_ENUM_INTERNAL_ERROR;
+			break;
+		default:
+			error_code = PK_ERROR_ENUM_INTERNAL_ERROR;
+		}
+	} else if (error->domain == ZIF_PACKAGE_ERROR) {
+		switch (error->code) {
+		case ZIF_PACKAGE_ERROR_FAILED:
+			error_code = PK_ERROR_ENUM_INTERNAL_ERROR;
+			break;
+		default:
+			error_code = PK_ERROR_ENUM_INTERNAL_ERROR;
+		}
+	} else if (error->domain == ZIF_CONFIG_ERROR) {
+		switch (error->code) {
+		case ZIF_CONFIG_ERROR_FAILED:
+			error_code = PK_ERROR_ENUM_INTERNAL_ERROR;
+			break;
+		default:
+			error_code = PK_ERROR_ENUM_INTERNAL_ERROR;
+		}
+	} else if (error->domain == ZIF_DOWNLOAD_ERROR) {
+		switch (error->code) {
+		case ZIF_DOWNLOAD_ERROR_FAILED:
+		case ZIF_DOWNLOAD_ERROR_PERMISSION_DENIED:
+			error_code = PK_ERROR_ENUM_INTERNAL_ERROR;
+			break;
+		default:
+			error_code = PK_ERROR_ENUM_INTERNAL_ERROR;
+		}
+	} else if (error->domain == ZIF_MD_ERROR) {
+		switch (error->code) {
+		case ZIF_MD_ERROR_NO_SUPPORT:
+			error_code = PK_ERROR_ENUM_NOT_SUPPORTED;
+			break;
+		case ZIF_MD_ERROR_FAILED_AS_OFFLINE:
+			error_code = PK_ERROR_ENUM_NO_NETWORK;
+			break;
+		case ZIF_MD_ERROR_FAILED_DOWNLOAD:
+			error_code = PK_ERROR_ENUM_PACKAGE_DOWNLOAD_FAILED;
+			break;
+		case ZIF_MD_ERROR_BAD_SQL:
+		case ZIF_MD_ERROR_FAILED_TO_LOAD:
+		case ZIF_MD_ERROR_FILE_TOO_OLD:
+		case ZIF_MD_ERROR_FAILED:
+		case ZIF_MD_ERROR_NO_FILENAME:
+			error_code = PK_ERROR_ENUM_INTERNAL_ERROR;
+			break;
+		default:
+			error_code = PK_ERROR_ENUM_INTERNAL_ERROR;
+		}
+	} else if (error->domain == ZIF_RELEASE_ERROR) {
+		switch (error->code) {
+		case ZIF_RELEASE_ERROR_DOWNLOAD_FAILED:
+			error_code = PK_ERROR_ENUM_PACKAGE_DOWNLOAD_FAILED;
+			break;
+		case ZIF_RELEASE_ERROR_FILE_INVALID:
+			error_code = PK_ERROR_ENUM_FAILED_CONFIG_PARSING;
+			break;
+		case ZIF_RELEASE_ERROR_LOW_DISKSPACE:
+			error_code = PK_ERROR_ENUM_NO_SPACE_ON_DEVICE;
+			break;
+		case ZIF_RELEASE_ERROR_NOT_FOUND:
+			error_code = PK_ERROR_ENUM_PACKAGE_NOT_FOUND;
+			break;
+		case ZIF_RELEASE_ERROR_NOT_SUPPORTED:
+			error_code = PK_ERROR_ENUM_NOT_SUPPORTED;
+			break;
+		case ZIF_RELEASE_ERROR_NO_UUID_FOR_ROOT:
+		case ZIF_RELEASE_ERROR_SETUP_INVALID:
+		case ZIF_RELEASE_ERROR_SPAWN_FAILED:
+		case ZIF_RELEASE_ERROR_WRITE_FAILED:
+			error_code = PK_ERROR_ENUM_INTERNAL_ERROR;
+			break;
+		default:
+			error_code = PK_ERROR_ENUM_INTERNAL_ERROR;
+		}
+	}
+	if (error_code == PK_ERROR_ENUM_INTERNAL_ERROR) {
+		g_warning ("failed to match error: %s:%i: %s",
+			   g_quark_to_string (error->domain),
+			   error->code,
+			   error->message);
+	}
+	return error_code;
+}
+
+/**
  * pk_backend_transaction_start:
  */
 void
@@ -192,7 +336,7 @@ pk_backend_transaction_start (PkBackend *backend)
 					  &error);
 	if (!ret) {
 		pk_backend_error_code (backend,
-				       PK_ERROR_ENUM_INTERNAL_ERROR,
+				       pk_backend_convert_error (error),
 				       "failed to set prefix: %s",
 				       error->message);
 		g_error_free (error);
@@ -237,6 +381,9 @@ pk_backend_transaction_start (PkBackend *backend)
 	/* setup state */
 	zif_state_reset (priv->state);
 
+	/* allow cancelling again */
+	g_cancellable_reset (priv->cancellable);
+
 	/* start with a new transaction */
 	zif_transaction_reset (priv->transaction);
 out:
@@ -965,7 +1112,7 @@ pk_backend_search_thread (PkBackend *backend)
 							     &error);
 	if (store_array == NULL) {
 		pk_backend_error_code (backend,
-				       PK_ERROR_ENUM_INTERNAL_ERROR,
+				       pk_backend_convert_error (error),
 				       "failed to get stores: %s",
 				       error->message);
 		g_error_free (error);
@@ -990,7 +1137,7 @@ pk_backend_search_thread (PkBackend *backend)
 		array = zif_store_array_get_packages (store_array, state_local, &error);
 		if (array == NULL) {
 			pk_backend_error_code (backend,
-				       PK_ERROR_ENUM_INTERNAL_ERROR,
+				       pk_backend_convert_error (error),
 				       "failed to get packages: %s", error->message);
 			g_error_free (error);
 			goto out;
@@ -1030,7 +1177,7 @@ pk_backend_search_thread (PkBackend *backend)
 				array = pk_backend_search_newest (store_array, state_local, recent, &error);
 				if (array == NULL) {
 					pk_backend_error_code (backend,
-				       PK_ERROR_ENUM_INTERNAL_ERROR,
+				       pk_backend_convert_error (error),
 				       "failed to get packages: %s", error->message);
 					g_error_free (error);
 					goto out;
@@ -1039,7 +1186,7 @@ pk_backend_search_thread (PkBackend *backend)
 				array = pk_backend_search_collections (store_array, state_local, &error);
 				if (array == NULL) {
 					pk_backend_error_code (backend,
-				       PK_ERROR_ENUM_INTERNAL_ERROR,
+				       pk_backend_convert_error (error),
 				       "failed to get packages: %s", error->message);
 					g_error_free (error);
 					goto out;
@@ -1061,7 +1208,7 @@ pk_backend_search_thread (PkBackend *backend)
 		}
 		if (array == NULL) {
 			pk_backend_error_code (backend,
-				       PK_ERROR_ENUM_INTERNAL_ERROR,
+				       pk_backend_convert_error (error),
 				       "failed to search: %s", error->message);
 			g_error_free (error);
 			goto out;
@@ -1370,6 +1517,7 @@ pk_backend_initialize (PkBackend *backend)
 
 	/* ZifState */
 	priv->state = zif_state_new ();
+	zif_state_set_cancellable (priv->state, priv->cancellable);
 	g_signal_connect (priv->state, "percentage-changed",
 			  G_CALLBACK (pk_backend_state_percentage_changed_cb),
 			  backend);
@@ -1558,6 +1706,7 @@ void
 pk_backend_cancel (PkBackend *backend)
 {
 	/* try to cancel the thread */
+	g_debug ("cancelling transaction");
 	g_cancellable_cancel (priv->cancellable);
 }
 
@@ -1599,7 +1748,7 @@ pk_backend_download_packages_thread (PkBackend *backend)
 						  &error);
 	if (!ret) {
 		pk_backend_error_code (backend,
-				       PK_ERROR_ENUM_INTERNAL_ERROR,
+				       pk_backend_convert_error (error),
 				       "failed to add enabled stores: %s",
 				       error->message);
 		g_error_free (error);
@@ -1822,7 +1971,7 @@ pk_backend_get_depends_thread (PkBackend *backend)
 							     &error);
 	if (store_array == NULL) {
 		pk_backend_error_code (backend,
-				       PK_ERROR_ENUM_INTERNAL_ERROR,
+				       pk_backend_convert_error (error),
 				       "failed to get stores: %s", error->message);
 		g_error_free (error);
 		goto out;
@@ -2032,7 +2181,7 @@ pk_backend_get_requires_thread (PkBackend *backend)
 							     &error);
 	if (store_array == NULL) {
 		pk_backend_error_code (backend,
-				       PK_ERROR_ENUM_INTERNAL_ERROR,
+				       pk_backend_convert_error (error),
 				       "failed to get stores: %s", error->message);
 		g_error_free (error);
 		goto out;
@@ -2247,7 +2396,7 @@ pk_backend_get_details_thread (PkBackend *backend)
 							     &error);
 	if (store_array == NULL) {
 		pk_backend_error_code (backend,
-				       PK_ERROR_ENUM_INTERNAL_ERROR,
+				       pk_backend_convert_error (error),
 				       "failed to get stores: %s",
 				       error->message);
 		g_error_free (error);
@@ -2536,7 +2685,7 @@ pk_backend_get_files_thread (PkBackend *backend)
 							     &error);
 	if (store_array == NULL) {
 		pk_backend_error_code (backend,
-				       PK_ERROR_ENUM_INTERNAL_ERROR,
+				       pk_backend_convert_error (error),
 				       "failed to get stores: %s", error->message);
 		g_error_free (error);
 		goto out;
@@ -2599,7 +2748,7 @@ pk_backend_get_files_thread (PkBackend *backend)
 		files = zif_package_get_files (package, state_tmp, &error);
 		if (files == NULL) {
 			pk_backend_error_code (backend,
-					       PK_ERROR_ENUM_INTERNAL_ERROR,
+					       pk_backend_convert_error (error),
 					       "no files for %s: %s",
 					       package_ids[i],
 					       error->message);
@@ -2695,7 +2844,7 @@ pk_backend_get_updates_thread (PkBackend *backend)
 						  &error);
 	if (!ret) {
 		pk_backend_error_code (backend,
-				       PK_ERROR_ENUM_INTERNAL_ERROR,
+				       pk_backend_convert_error (error),
 				       "failed to add enabled stores: %s",
 				       error->message);
 		g_error_free (error);
@@ -2762,7 +2911,7 @@ pk_backend_get_updates_thread (PkBackend *backend)
 	updates = zif_store_array_resolve (store_array, search, state_local, &error);
 	if (updates == NULL) {
 		pk_backend_error_code (backend,
-				       PK_ERROR_ENUM_INTERNAL_ERROR,
+				       pk_backend_convert_error (error),
 				       "failed to get updates: %s", error->message);
 		g_error_free (error);
 		goto out;
@@ -3018,7 +3167,7 @@ pk_backend_get_update_detail_thread (PkBackend *backend)
 						  &error);
 	if (!ret) {
 		pk_backend_error_code (backend,
-				       PK_ERROR_ENUM_INTERNAL_ERROR,
+				       pk_backend_convert_error (error),
 				       "failed to add enabled stores: %s",
 				       error->message);
 		g_error_free (error);
@@ -3390,7 +3539,7 @@ pk_backend_run_transaction (PkBackend *backend, ZifState *state)
 				      &error);
 	if (!ret) {
 		pk_backend_error_code (backend,
-				       PK_ERROR_ENUM_INTERNAL_ERROR,
+				       pk_backend_convert_error (error),
 				       "failed to commit transaction: %s",
 				       error->message);
 		g_error_free (error);
@@ -3557,7 +3706,7 @@ pk_backend_update_packages_thread (PkBackend *backend)
 						  &error);
 	if (!ret) {
 		pk_backend_error_code (backend,
-				       PK_ERROR_ENUM_INTERNAL_ERROR,
+				       pk_backend_convert_error (error),
 				       "failed to add enabled stores: %s",
 				       error->message);
 		g_error_free (error);
@@ -3694,7 +3843,7 @@ pk_backend_install_packages_thread (PkBackend *backend)
 						  &error);
 	if (!ret) {
 		pk_backend_error_code (backend,
-				       PK_ERROR_ENUM_INTERNAL_ERROR,
+				       pk_backend_convert_error (error),
 				       "failed to add enabled stores: %s",
 				       error->message);
 		g_error_free (error);
@@ -3830,7 +3979,7 @@ pk_backend_install_files_thread (PkBackend *backend)
 						  &error);
 	if (!ret) {
 		pk_backend_error_code (backend,
-				       PK_ERROR_ENUM_INTERNAL_ERROR,
+				       pk_backend_convert_error (error),
 				       "failed to add enabled stores: %s",
 				       error->message);
 		g_error_free (error);
@@ -3968,7 +4117,7 @@ pk_backend_refresh_cache_thread (PkBackend *backend)
 						  &error);
 	if (!ret) {
 		pk_backend_error_code (backend,
-				       PK_ERROR_ENUM_INTERNAL_ERROR,
+				       pk_backend_convert_error (error),
 				       "failed to add enabled stores: %s",
 				       error->message);
 		g_error_free (error);
@@ -3992,7 +4141,7 @@ pk_backend_refresh_cache_thread (PkBackend *backend)
 	ret = zif_store_array_clean (store_array, state_local, &error);
 	if (!ret) {
 		pk_backend_error_code (backend,
-				       PK_ERROR_ENUM_INTERNAL_ERROR,
+				       pk_backend_convert_error (error),
 				       "failed to clean: %s", error->message);
 		g_error_free (error);
 		goto out;
@@ -4358,7 +4507,6 @@ pk_backend_upgrade_system_thread (PkBackend *backend)
 	gchar **distro_id_split = NULL;
 	guint version;
 	gboolean ret;
-	PkErrorEnum error_code;
 	GError *error = NULL;
 	ZifReleaseUpgradeKind upgrade_kind_zif = ZIF_RELEASE_UPGRADE_KIND_DEFAULT;
 	PkUpgradeKindEnum upgrade_kind = pk_backend_get_uint (backend, "upgrade_kind");
@@ -4397,33 +4545,8 @@ pk_backend_upgrade_system_thread (PkBackend *backend)
 					   &error);
 	if (!ret) {
 		/* convert the ZifRelease error code into a PK error enum */
-		switch (error->code) {
-		case ZIF_RELEASE_ERROR_DOWNLOAD_FAILED:
-			error_code = PK_ERROR_ENUM_PACKAGE_DOWNLOAD_FAILED;
-			break;
-		case ZIF_RELEASE_ERROR_FILE_INVALID:
-			error_code = PK_ERROR_ENUM_FAILED_CONFIG_PARSING;
-			break;
-		case ZIF_RELEASE_ERROR_LOW_DISKSPACE:
-			error_code = PK_ERROR_ENUM_NO_SPACE_ON_DEVICE;
-			break;
-		case ZIF_RELEASE_ERROR_NOT_FOUND:
-			error_code = PK_ERROR_ENUM_PACKAGE_NOT_FOUND;
-			break;
-		case ZIF_RELEASE_ERROR_NOT_SUPPORTED:
-			error_code = PK_ERROR_ENUM_NOT_SUPPORTED;
-			break;
-		case ZIF_RELEASE_ERROR_NO_UUID_FOR_ROOT:
-		case ZIF_RELEASE_ERROR_SETUP_INVALID:
-		case ZIF_RELEASE_ERROR_SPAWN_FAILED:
-		case ZIF_RELEASE_ERROR_WRITE_FAILED:
-			error_code = PK_ERROR_ENUM_INTERNAL_ERROR;
-			break;
-		default:
-			error_code = PK_ERROR_ENUM_INTERNAL_ERROR;
-		}
 		pk_backend_error_code (backend,
-				       error_code,
+				       pk_backend_convert_error (error),
 				       "failed to upgrade: %s",
 				       error->message);
 		g_error_free (error);
commit a7c7729279dd86c68784e08aaf98d23a5c3e9340
Author: Daniel Nicoletti <dantti85-pk at yahoo.com.br>
Date:   Thu Dec 2 16:50:55 2010 -0200

    aptcc: Use the new PK_ERROR_ENUM_CANNOT_GET_LOCK

diff --git a/backends/aptcc/pk-backend-aptcc.cpp b/backends/aptcc/pk-backend-aptcc.cpp
index a7e5d6d..ae17807 100644
--- a/backends/aptcc/pk-backend-aptcc.cpp
+++ b/backends/aptcc/pk-backend-aptcc.cpp
@@ -774,7 +774,7 @@ pk_backend_refresh_cache_thread (PkBackend *backend)
 	OpTextProgress Prog(*_config);
 	if (Cache.BuildCaches(&Prog, true) == false) {
 		if (_error->PendingError() == true) {
-			show_errors(backend, PK_ERROR_ENUM_CANNOT_GET_LOCK);
+			show_errors(backend, PK_ERROR_ENUM_CANNOT_FETCH_SOURCES);
 		}
 		delete m_apt;
 		pk_backend_finished (backend);
commit 47834d1be5a940ffa7aac1cdf0c0cbeca0e1536b
Author: Daniel Nicoletti <dantti85-pk at yahoo.com.br>
Date:   Thu Dec 2 16:48:48 2010 -0200

    Added PK_ERROR_ENUM_CANNOT_FETCH_SOURCES so when refreshing cache fails to reach some source we have a proper message

diff --git a/lib/packagekit-glib2/pk-enum.c b/lib/packagekit-glib2/pk-enum.c
index 7369372..29f1e1f 100644
--- a/lib/packagekit-glib2/pk-enum.c
+++ b/lib/packagekit-glib2/pk-enum.c
@@ -193,6 +193,7 @@ static const PkEnumMatch enum_error[] = {
 	{PK_ERROR_ENUM_PACKAGE_DATABASE_CHANGED, "package-database-changed"},
 	{PK_ERROR_ENUM_PROVIDE_TYPE_NOT_SUPPORTED, "provide-type-not-supported"},
 	{PK_ERROR_ENUM_INSTALL_ROOT_INVALID,	"install-root-invalid"},
+	{PK_ERROR_ENUM_CANNOT_FETCH_SOURCES,	"cannot-fetch-sources"},
 	{0, NULL}
 };
 
diff --git a/lib/packagekit-glib2/pk-enum.h b/lib/packagekit-glib2/pk-enum.h
index 6181635..1902757 100644
--- a/lib/packagekit-glib2/pk-enum.h
+++ b/lib/packagekit-glib2/pk-enum.h
@@ -363,6 +363,7 @@ typedef enum {
 	PK_ERROR_ENUM_PACKAGE_DATABASE_CHANGED,
 	PK_ERROR_ENUM_PROVIDE_TYPE_NOT_SUPPORTED,
 	PK_ERROR_ENUM_INSTALL_ROOT_INVALID,
+	PK_ERROR_ENUM_CANNOT_FETCH_SOURCES,
 	PK_ERROR_ENUM_LAST
 } PkErrorEnum;
 
diff --git a/lib/packagekit-qt/src/enum.h b/lib/packagekit-qt/src/enum.h
index b2d6fb5..4a54bf4 100644
--- a/lib/packagekit-qt/src/enum.h
+++ b/lib/packagekit-qt/src/enum.h
@@ -323,6 +323,7 @@ public:
         ErrorPackageDatabaseChanged,
         ErrorProvideTypeNotSupported,
         ErrorInstallRootInvalid,
+        ErrorCannotFetchSources,
         /* this always has to be at the end of the list */
         LastError
     } Error;
commit e20ace7007b51c9f5f7a63d47e83ba9daf46ba73
Author: Daniel Nicoletti <dantti85-pk at yahoo.com.br>
Date:   Thu Dec 2 16:39:57 2010 -0200

    packagekit-qt: Updated enums and converted tabs to spaces

diff --git a/lib/packagekit-qt/src/enum.h b/lib/packagekit-qt/src/enum.h
index 095e744..b2d6fb5 100644
--- a/lib/packagekit-qt/src/enum.h
+++ b/lib/packagekit-qt/src/enum.h
@@ -1,7 +1,7 @@
 /*
  * This file is part of the QPackageKit project
  * Copyright (C) 2008 Adrien Bustany <madcat at mymadcat.com>
- * Copyright (C) 2009 Daniel Nicoletti <dantti85-pk at yahoo.com.br>
+ * Copyright (C) 2009-2010 Daniel Nicoletti <dantti85-pk at yahoo.com.br>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Library General Public
@@ -28,584 +28,588 @@
 namespace PackageKit {
 
 /**
- * \class Enum enum.h Enum
- * \author Adrien Bustany <madcat at mymadcat.com>
- *
- * \brief Represents a PackageKit's enums
- *
- * This class represents a PackageKit enums.
- *
- */
+* \class Enum enum.h Enum
+* \author Adrien Bustany <madcat at mymadcat.com>
+*
+* \brief Represents a PackageKit's enums
+*
+* This class represents a PackageKit enums.
+*
+*/
 class Enum : public QObject
 {
-	Q_OBJECT
-	Q_ENUMS(Role)
-	Q_ENUMS(Status)
-	Q_ENUMS(Exit)
-	Q_ENUMS(Network)
-	Q_ENUMS(Filter)
-	Q_ENUMS(Restart)
-	Q_ENUMS(Message)
-	Q_ENUMS(Error)
-	Q_ENUMS(Group)
-	Q_ENUMS(UpdateState)
-	Q_ENUMS(Info)
-	Q_ENUMS(DistroUpgrade)
-	Q_ENUMS(SigType)
-	Q_ENUMS(Provides)
-	Q_ENUMS(License)
-	Q_ENUMS(MediaType)
-	Q_ENUMS(Authorize)
+    Q_OBJECT
+    Q_ENUMS(Role)
+    Q_ENUMS(Status)
+    Q_ENUMS(Exit)
+    Q_ENUMS(Network)
+    Q_ENUMS(Filter)
+    Q_ENUMS(Restart)
+    Q_ENUMS(Message)
+    Q_ENUMS(Error)
+    Q_ENUMS(Group)
+    Q_ENUMS(UpdateState)
+    Q_ENUMS(Info)
+    Q_ENUMS(DistroUpgrade)
+    Q_ENUMS(SigType)
+    Q_ENUMS(Provides)
+    Q_ENUMS(License)
+    Q_ENUMS(MediaType)
+    Q_ENUMS(Authorize)
 public:
-	/**
-	 * Lists all the available actions
-	 * \sa getActions
-	 */
-	typedef enum {
-		UnknownRole,
-		RoleCancel,
-		RoleGetDepends,
-		RoleGetDetails,
-		RoleGetFiles,
-		RoleGetPackages,
-		RoleGetRepoList,
-		RoleGetRequires,
-		RoleGetUpdateDetail,
-		RoleGetUpdates,
-		RoleInstallFiles,
-		RoleInstallPackages,
-		RoleInstallSignature,
-		RoleRefreshCache,
-		RoleRemovePackages,
-		RoleRepoEnable,
-		RoleRepoSetData,
-		RoleResolve,
-		RoleRollback,
-		RoleSearchDetails,
-		RoleSearchFile,
-		RoleSearchGroup,
-		RoleSearchName,
-		RoleUpdatePackages,
-		RoleUpdateSystem,
-		RoleWhatProvides,
-		RoleAcceptEula,
-		RoleDownloadPackages,
-		RoleGetDistroUpgrades,
-		RoleGetCategories,
-		RoleGetOldTransactions,
-		RoleSimulateInstallFiles,
-		RoleSimulateInstallPackages,
-		RoleSimulateRemovePackages,
-		RoleSimulateUpdatePackages,
-		/* this always has to be at the end of the list */
-		LastRole
-	} Role;
-	typedef Bitfield Roles;
+    /**
+    * Lists all the available actions
+    * \sa getActions
+    */
+    typedef enum {
+        UnknownRole,
+        RoleCancel,
+        RoleGetDepends,
+        RoleGetDetails,
+        RoleGetFiles,
+        RoleGetPackages,
+        RoleGetRepoList,
+        RoleGetRequires,
+        RoleGetUpdateDetail,
+        RoleGetUpdates,
+        RoleInstallFiles,
+        RoleInstallPackages,
+        RoleInstallSignature,
+        RoleRefreshCache,
+        RoleRemovePackages,
+        RoleRepoEnable,
+        RoleRepoSetData,
+        RoleResolve,
+        RoleRollback,
+        RoleSearchDetails,
+        RoleSearchFile,
+        RoleSearchGroup,
+        RoleSearchName,
+        RoleUpdatePackages,
+        RoleUpdateSystem,
+        RoleWhatProvides,
+        RoleAcceptEula,
+        RoleDownloadPackages,
+        RoleGetDistroUpgrades,
+        RoleGetCategories,
+        RoleGetOldTransactions,
+        RoleSimulateInstallFiles,
+        RoleSimulateInstallPackages,
+        RoleSimulateRemovePackages,
+        RoleSimulateUpdatePackages,
+        RoleUpgradeSystem, // Since 0.6.11
+        /* this always has to be at the end of the list */
+        LastRole
+    } Role;
+    typedef Bitfield Roles;
 
-	/**
-	 * Describes the current state of the transaction
-	 */
-	typedef enum {
-		UnknownStatus,
-		StatusWait,
-		StatusSetup,
-		StatusRunning,
-		StatusQuery,
-		StatusInfo,
-		StatusRemove,
-		StatusRefreshCache,
-		StatusDownload,
-		StatusInstall,
-		StatusUpdate,
-		StatusCleanup,
-		StatusObsolete,
-		StatusDepResolve,
-		StatusSigCheck,
-		StatusRollback,
-		StatusTestCommit,
-		StatusCommit,
-		StatusRequest,
-		StatusFinished,
-		StatusCancel,
-		StatusDownloadRepository,
-		StatusDownloadPackagelist,
-		StatusDownloadFilelist,
-		StatusDownloadChangelog,
-		StatusDownloadGroup,
-		StatusDownloadUpdateinfo,
-		StatusRepackaging,
-		StatusLoadingCache,
-		StatusScanApplications,
-		StatusGeneratePackageList,
-		StatusWaitingForLock,
-		StatusWaitingForAuth,
-		StatusScanProcessList,
-		StatusCheckExecutableFiles,
-		StatusCheckLibraries,
-		StatusCopyFiles,
-		/* this always has to be at the end of the list */
-		LastStatus
-	} Status;
+    /**
+    * Describes the current state of the transaction
+    */
+    typedef enum {
+        UnknownStatus,
+        StatusWait,
+        StatusSetup,
+        StatusRunning,
+        StatusQuery,
+        StatusInfo,
+        StatusRemove,
+        StatusRefreshCache,
+        StatusDownload,
+        StatusInstall,
+        StatusUpdate,
+        StatusCleanup,
+        StatusObsolete,
+        StatusDepResolve,
+        StatusSigCheck,
+        StatusRollback,
+        StatusTestCommit,
+        StatusCommit,
+        StatusRequest,
+        StatusFinished,
+        StatusCancel,
+        StatusDownloadRepository,
+        StatusDownloadPackagelist,
+        StatusDownloadFilelist,
+        StatusDownloadChangelog,
+        StatusDownloadGroup,
+        StatusDownloadUpdateinfo,
+        StatusRepackaging,
+        StatusLoadingCache,
+        StatusScanApplications,
+        StatusGeneratePackageList,
+        StatusWaitingForLock,
+        StatusWaitingForAuth,
+        StatusScanProcessList,
+        StatusCheckExecutableFiles,
+        StatusCheckLibraries,
+        StatusCopyFiles,
+        /* this always has to be at the end of the list */
+        LastStatus
+    } Status;
 
-	/**
-	 * Describes how the transaction finished
-	 * \sa Transaction::finished()
-	 */
-	typedef enum {
-		UnknownExit,
-		ExitSuccess,
-		ExitFailed,
-		ExitCancelled,
-		ExitKeyRequired,
-		ExitEulaRequired,
-		ExitKilled, /* when we forced the cancel, but had to sigkill */
-		ExitMediaChangeRequired,
-		ExitNeedUntrusted,
-		/* this always has to be at the end of the list */
-		LastExit
-	} Exit;
+    /**
+    * Describes how the transaction finished
+    * \sa Transaction::finished()
+    */
+    typedef enum {
+        UnknownExit,
+        ExitSuccess,
+        ExitFailed,
+        ExitCancelled,
+        ExitKeyRequired,
+        ExitEulaRequired,
+        ExitKilled, /* when we forced the cancel, but had to sigkill */
+        ExitMediaChangeRequired,
+        ExitNeedUntrusted,
+        /* this always has to be at the end of the list */
+        LastExit
+    } Exit;
 
-	/**
-	 * Describes the current network state
-	 */
-	typedef enum {
-		UnknownNetwork,
-		NetworkOffline,
-		NetworkOnline,
-		NetworkWired,
-		NetworkWifi,
-		NetworkMobile,
-		/* this always has to be at the end of the list */
-		LastNetwork
-	} Network;
+    /**
+    * Describes the current network state
+    */
+    typedef enum {
+        UnknownNetwork,
+        NetworkOffline,
+        NetworkOnline,
+        NetworkWired,
+        NetworkWifi,
+        NetworkMobile,
+        /* this always has to be at the end of the list */
+        LastNetwork
+    } Network;
 
-		/**
-	 * Describes the different filters
-	 */
-	typedef enum {
-		UnknownFilter		 = 0x0000001,
-		NoFilter		 = 0x0000002,
-		FilterInstalled		 = 0x0000004,
-		FilterNotInstalled	 = 0x0000008,
-		FilterDevelopment	 = 0x0000010,
-		FilterNotDevelopment	 = 0x0000020,
-		FilterGui		 = 0x0000040,
-		FilterNotGui		 = 0x0000080,
-		FilterFree		 = 0x0000100,
-		FilterNotFree		 = 0x0000200,
-		FilterVisible		 = 0x0000400,
-		FilterNotVisible	 = 0x0000800,
-		FilterSupported		 = 0x0001000,
-		FilterNotSupported	 = 0x0002000,
-		FilterBasename		 = 0x0004000,
-		FilterNotBasename	 = 0x0008000,
-		FilterNewest		 = 0x0010000,
-		FilterNotNewest		 = 0x0020000,
-		FilterArch		 = 0x0040000,
-		FilterNotArch		 = 0x0080000,
-		FilterSource		 = 0x0100000,
-		FilterNotSource		 = 0x0200000,
-		FilterCollections	 = 0x0400000,
-		FilterNotCollections	 = 0x0800000,
-		FilterApplication	 = 0x1000000,
-		FilterNotApplication	 = 0x2000000,
-		/* this always has to be at the end of the list */
-		FilterLast		 = 0x4000000
-	} Filter;
-	Q_DECLARE_FLAGS(Filters, Filter)
+        /**
+    * Describes the different filters
+    */
+    typedef enum {
+        UnknownFilter        = 0x0000001,
+        NoFilter             = 0x0000002,
+        FilterInstalled      = 0x0000004,
+        FilterNotInstalled   = 0x0000008,
+        FilterDevelopment    = 0x0000010,
+        FilterNotDevelopment = 0x0000020,
+        FilterGui            = 0x0000040,
+        FilterNotGui         = 0x0000080,
+        FilterFree           = 0x0000100,
+        FilterNotFree        = 0x0000200,
+        FilterVisible        = 0x0000400,
+        FilterNotVisible     = 0x0000800,
+        FilterSupported      = 0x0001000,
+        FilterNotSupported   = 0x0002000,
+        FilterBasename       = 0x0004000,
+        FilterNotBasename    = 0x0008000,
+        FilterNewest         = 0x0010000,
+        FilterNotNewest      = 0x0020000,
+        FilterArch           = 0x0040000,
+        FilterNotArch        = 0x0080000,
+        FilterSource         = 0x0100000,
+        FilterNotSource      = 0x0200000,
+        FilterCollections    = 0x0400000,
+        FilterNotCollections = 0x0800000,
+        FilterApplication    = 0x1000000,
+        FilterNotApplication = 0x2000000,
+        /* this always has to be at the end of the list */
+        FilterLast           = 0x4000000
+    } Filter;
+    Q_DECLARE_FLAGS(Filters, Filter)
 
-	/**
-	 * Describes a restart type
-	 */
-	typedef enum {
-		UnknownRestart,
-		RestartNone,
-		RestartApplication,
-		RestartSession,
-		RestartSystem,
-		RestartSecuritySession,
-		RestartSecuritySystem,
-		/* this always has to be at the end of the list */
-		LastRestart
-	} Restart;
+    /**
+    * Describes a restart type
+    */
+    typedef enum {
+        UnknownRestart,
+        RestartNone,
+        RestartApplication,
+        RestartSession,
+        RestartSystem,
+        RestartSecuritySession,
+        RestartSecuritySystem,
+        /* this always has to be at the end of the list */
+        LastRestart
+    } Restart;
 
-	/**
-	 * Describes a message's type
-	 */
-	typedef enum {
-		UnknownMessage,
-		MessageBrokenMirror,
-		MessageConnectionRefused,
-		MessageParameterInvalid,
-		MessagePriorityInvalid,
-		MessageBackendError,
-		MessageDaemonError,
-		MessageCacheBeingRebuilt,
-		MessageUntrustedPackage,
-		MessageNewerPackageExists,
-		MessageCouldNotFindPackage,
-		MessageConfigFilesChanged,
-		MessagePackageAlreadyInstalled,
-		MessageAutoremoveIgnored,
-		MessageRepoMetadataDownloadFailed,
-		MessageRepoForDevelopersOnly,
-		/* this always has to be at the end of the list */
-		LastMessage
-	} Message;
+    /**
+    * Describes a message's type
+    */
+    typedef enum {
+        UnknownMessage,
+        MessageBrokenMirror,
+        MessageConnectionRefused,
+        MessageParameterInvalid,
+        MessagePriorityInvalid,
+        MessageBackendError,
+        MessageDaemonError,
+        MessageCacheBeingRebuilt,
+        MessageUntrustedPackage,
+        MessageNewerPackageExists,
+        MessageCouldNotFindPackage,
+        MessageConfigFilesChanged,
+        MessagePackageAlreadyInstalled,
+        MessageAutoremoveIgnored,
+        MessageRepoMetadataDownloadFailed,
+        MessageRepoForDevelopersOnly,
+        MessageOtherUpdatesHeldBack,
+        /* this always has to be at the end of the list */
+        LastMessage
+    } Message;
 
-	/**
-	 * Lists the different types of error
-	 */
-	typedef enum {
-		UnknownError,
-		ErrorOom,
-		ErrorNoNetwork,
-		ErrorNotSupported,
-		ErrorInternalError,
-		ErrorGpgFailure,
-		ErrorPackageIdInvalid,
-		ErrorPackageNotInstalled,
-		ErrorPackageNotFound,
-		ErrorPackageAlreadyInstalled,
-		ErrorPackageDownloadFailed,
-		ErrorGroupNotFound,
-		ErrorGroupListInvalid,
-		ErrorDepResolutionFailed,
-		ErrorFilterInvalid,
-		ErrorCreateThreadFailed,
-		ErrorTransactionError,
-		ErrorTransactionCancelled,
-		ErrorNoCache,
-		ErrorRepoNotFound,
-		ErrorCannotRemoveSystemPackage,
-		ErrorProcessKill,
-		ErrorFailedInitialization,
-		ErrorFailedFinalise,
-		ErrorFailedConfigParsing,
-		ErrorCannotCancel,
-		ErrorCannotGetLock,
-		ErrorNoPackagesToUpdate,
-		ErrorCannotWriteRepoConfig,
-		ErrorLocalInstallFailed,
-		ErrorBadGpgSignature,
-		ErrorMissingGpgSignature,
-		ErrorCannotInstallSourcePackage,
-		ErrorRepoConfigurationError,
-		ErrorNoLicenseAgreement,
-		ErrorFileConflicts,
-		ErrorPackageConflicts,
-		ErrorRepoNotAvailable,
-		ErrorInvalidPackageFile,
-		ErrorPackageInstallBlocked,
-		ErrorPackageCorrupt,
-		ErrorAllPackagesAlreadyInstalled,
-		ErrorFileNotFound,
-		ErrorNoMoreMirrorsToTry,
-		ErrorNoDistroUpgradeData,
-		ErrorIncompatibleArchitecture,
-		ErrorNoSpaceOnDevice,
-		ErrorMediaChangeRequired,
-		ErrorNotAuthorized,
-		ErrorUpdateNotFound,
-		ErrorCannotInstallRepoUnsigned,
-		ErrorCannotUpdateRepoUnsigned,
-		ErrorCannotGetFilelist,
-		ErrorCannotGetRequires,
-		ErrorCannotDisableRepository,
-		ErrorRestrictedDownload,
-		ErrorPackageFailedToConfigure,
-		ErrorPackageFailedToBuild,
-		ErrorPackageFailedToInstall,
-		ErrorPackageFailedToRemove,
-		ErrorUpdateFailedDueToRunningProcess,
-		ErrorPackageDatabaseChanged,
-		/* this always has to be at the end of the list */
-		LastError
-	} Error;
+    /**
+    * Lists the different types of error
+    */
+    typedef enum {
+        UnknownError,
+        ErrorOom,
+        ErrorNoNetwork,
+        ErrorNotSupported,
+        ErrorInternalError,
+        ErrorGpgFailure,
+        ErrorPackageIdInvalid,
+        ErrorPackageNotInstalled,
+        ErrorPackageNotFound,
+        ErrorPackageAlreadyInstalled,
+        ErrorPackageDownloadFailed,
+        ErrorGroupNotFound,
+        ErrorGroupListInvalid,
+        ErrorDepResolutionFailed,
+        ErrorFilterInvalid,
+        ErrorCreateThreadFailed,
+        ErrorTransactionError,
+        ErrorTransactionCancelled,
+        ErrorNoCache,
+        ErrorRepoNotFound,
+        ErrorCannotRemoveSystemPackage,
+        ErrorProcessKill,
+        ErrorFailedInitialization,
+        ErrorFailedFinalise,
+        ErrorFailedConfigParsing,
+        ErrorCannotCancel,
+        ErrorCannotGetLock,
+        ErrorNoPackagesToUpdate,
+        ErrorCannotWriteRepoConfig,
+        ErrorLocalInstallFailed,
+        ErrorBadGpgSignature,
+        ErrorMissingGpgSignature,
+        ErrorCannotInstallSourcePackage,
+        ErrorRepoConfigurationError,
+        ErrorNoLicenseAgreement,
+        ErrorFileConflicts,
+        ErrorPackageConflicts,
+        ErrorRepoNotAvailable,
+        ErrorInvalidPackageFile,
+        ErrorPackageInstallBlocked,
+        ErrorPackageCorrupt,
+        ErrorAllPackagesAlreadyInstalled,
+        ErrorFileNotFound,
+        ErrorNoMoreMirrorsToTry,
+        ErrorNoDistroUpgradeData,
+        ErrorIncompatibleArchitecture,
+        ErrorNoSpaceOnDevice,
+        ErrorMediaChangeRequired,
+        ErrorNotAuthorized,
+        ErrorUpdateNotFound,
+        ErrorCannotInstallRepoUnsigned,
+        ErrorCannotUpdateRepoUnsigned,
+        ErrorCannotGetFilelist,
+        ErrorCannotGetRequires,
+        ErrorCannotDisableRepository,
+        ErrorRestrictedDownload,
+        ErrorPackageFailedToConfigure,
+        ErrorPackageFailedToBuild,
+        ErrorPackageFailedToInstall,
+        ErrorPackageFailedToRemove,
+        ErrorUpdateFailedDueToRunningProcess,
+        ErrorPackageDatabaseChanged,
+        ErrorProvideTypeNotSupported,
+        ErrorInstallRootInvalid,
+        /* this always has to be at the end of the list */
+        LastError
+    } Error;
 
-	/**
-	 * Describes the different groups
-	 */
-	typedef enum {
-		UnknownGroup,
-		GroupAccessibility,
-		GroupAccessories,
-		GroupAdminTools,
-		GroupCommunication,
-		GroupDesktopGnome,
-		GroupDesktopKde,
-		GroupDesktopOther,
-		GroupDesktopXfce,
-		GroupEducation,
-		GroupFonts,
-		GroupGames,
-		GroupGraphics,
-		GroupInternet,
-		GroupLegacy,
-		GroupLocalization,
-		GroupMaps,
-		GroupMultimedia,
-		GroupNetwork,
-		GroupOffice,
-		GroupOther,
-		GroupPowerManagement,
-		GroupProgramming,
-		GroupPublishing,
-		GroupRepos,
-		GroupSecurity,
-		GroupServers,
-		GroupSystem,
-		GroupVirtualization,
-		GroupScience,
-		GroupDocumentation,
-		GroupElectronics,
-		GroupCollections,
-		GroupVendor,
-		GroupNewest,
-		/* this always has to be at the end of the list */
-		LastGroup
-	} Group;
-	typedef QSet<Group> Groups;
+    /**
+    * Describes the different groups
+    */
+    typedef enum {
+        UnknownGroup,
+        GroupAccessibility,
+        GroupAccessories,
+        GroupAdminTools,
+        GroupCommunication,
+        GroupDesktopGnome,
+        GroupDesktopKde,
+        GroupDesktopOther,
+        GroupDesktopXfce,
+        GroupEducation,
+        GroupFonts,
+        GroupGames,
+        GroupGraphics,
+        GroupInternet,
+        GroupLegacy,
+        GroupLocalization,
+        GroupMaps,
+        GroupMultimedia,
+        GroupNetwork,
+        GroupOffice,
+        GroupOther,
+        GroupPowerManagement,
+        GroupProgramming,
+        GroupPublishing,
+        GroupRepos,
+        GroupSecurity,
+        GroupServers,
+        GroupSystem,
+        GroupVirtualization,
+        GroupScience,
+        GroupDocumentation,
+        GroupElectronics,
+        GroupCollections,
+        GroupVendor,
+        GroupNewest,
+        /* this always has to be at the end of the list */
+        LastGroup
+    } Group;
+    typedef QSet<Group> Groups;
 
-	/**
-	 * Describes an update's state
-	 */
-	typedef enum {
-		UnknownUpdateState,
-		UpdateStateStable,
-		UpdateStateUnstable,
-		UpdateStateTesting,
-		/* this always has to be at the end of the list */
-		LastUpdateState
-	} UpdateState;
+    /**
+    * Describes an update's state
+    */
+    typedef enum {
+        UnknownUpdateState,
+        UpdateStateStable,
+        UpdateStateUnstable,
+        UpdateStateTesting,
+        /* this always has to be at the end of the list */
+        LastUpdateState
+    } UpdateState;
 
-	/**
-	 * Describes the state of a package
-	 */
-	typedef enum {
-		UnknownInfo,
-		InfoInstalled,
-		InfoAvailable,
-		InfoLow,
-		InfoEnhancement,
-		InfoNormal,
-		InfoBugfix,
-		InfoImportant,
-		InfoSecurity,
-		InfoBlocked,
-		InfoDownloading,
-		InfoUpdating,
-		InfoInstalling,
-		InfoRemoving,
-		InfoCleanup,
-		InfoObsoleting,
-		InfoCollectionInstalled,
-		InfoCollectionAvailable,
-		InfoFinished,
-		InfoReinstalling,
-		InfoDowngrading,
-		InfoPreparing,
-		InfoDecompressing,
-		/* this always has to be at the end of the list */
-		LastInfo
-	} Info;
+    /**
+    * Describes the state of a package
+    */
+    typedef enum {
+        UnknownInfo,
+        InfoInstalled,
+        InfoAvailable,
+        InfoLow,
+        InfoEnhancement,
+        InfoNormal,
+        InfoBugfix,
+        InfoImportant,
+        InfoSecurity,
+        InfoBlocked,
+        InfoDownloading,
+        InfoUpdating,
+        InfoInstalling,
+        InfoRemoving,
+        InfoCleanup,
+        InfoObsoleting,
+        InfoCollectionInstalled,
+        InfoCollectionAvailable,
+        InfoFinished,
+        InfoReinstalling,
+        InfoDowngrading,
+        InfoPreparing,
+        InfoDecompressing,
+        /* this always has to be at the end of the list */
+        LastInfo
+    } Info;
 
-	/**
-	 * Describes an distro upgrade state
-	 */
-	typedef enum {
-		UnknownDistroUpgrade,
-		DistroUpgradeStable,
-		DistroUpgradeUnstable,
-		/* this always has to be at the end of the list */
-		LastDistroUpgrade
-	} DistroUpgrade;
+    /**
+    * Describes an distro upgrade state
+    */
+    typedef enum {
+        UnknownDistroUpgrade,
+        DistroUpgradeStable,
+        DistroUpgradeUnstable,
+        /* this always has to be at the end of the list */
+        LastDistroUpgrade
+    } DistroUpgrade;
 
-	/**
-	 * Describes a signature type
-	 */
-	typedef enum {
-		UnknownSigType,
-		SigTypeGpg,
-		/* this always has to be at the end of the list */
-		LastSigType
-	} SigType;
+    /**
+    * Describes a signature type
+    */
+    typedef enum {
+        UnknownSigType,
+        SigTypeGpg,
+        /* this always has to be at the end of the list */
+        LastSigType
+    } SigType;
 
 
-	/**
-	 * Enum used to describe a "provides" request
-	 * \sa whatProvides
-	 */
-	typedef enum {
-		UnknownProvides,
-		ProvidesAny,
-		ProvidesModalias,
-		ProvidesCodec,
-		ProvidesMimetype,
-		ProvidesFont,
-		ProvidesHardwareDriver,
-		ProvidesPostscriptDriver,
-		/* this always has to be at the end of the list */
-		LastProvides
-	} Provides;
+    /**
+    * Enum used to describe a "provides" request
+    * \sa whatProvides
+    */
+    typedef enum {
+        UnknownProvides,
+        ProvidesAny,
+        ProvidesModalias,
+        ProvidesCodec,
+        ProvidesMimetype,
+        ProvidesFont,
+        ProvidesHardwareDriver,
+        ProvidesPostscriptDriver,
+        /* this always has to be at the end of the list */
+        LastProvides
+    } Provides;
 
-	/**
-	 * Describes a package's license
-	 */
-	typedef enum {
-		UnknownLicense,
-		LicenseGlide,
-		LicenseAfl,
-		LicenseAmpasBsd,
-		LicenseAmazonDsl,
-		LicenseAdobe,
-		LicenseAgplv1,
-		LicenseAgplv3,
-		LicenseAsl1Dot0,
-		LicenseAsl1Dot1,
-		LicenseAsl2Dot0,
-		LicenseApsl2Dot0,
-		LicenseArtisticClarified,
-		LicenseArtistic2Dot0,
-		LicenseArl,
-		LicenseBittorrent,
-		LicenseBoost,
-		LicenseBsdWithAdvertising,
-		LicenseBsd,
-		LicenseCecill,
-		LicenseCddl,
-		LicenseCpl,
-		LicenseCondor,
-		LicenseCopyrightOnly,
-		LicenseCryptix,
-		LicenseCrystalStacker,
-		LicenseDoc,
-		LicenseWtfpl,
-		LicenseEpl,
-		LicenseEcos,
-		LicenseEfl2Dot0,
-		LicenseEu_datagrid,
-		LicenseLgplv2WithExceptions,
-		LicenseFtl,
-		LicenseGiftware,
-		LicenseGplv2,
-		LicenseGplv2WithExceptions,
-		LicenseGplv2PlusWithExceptions,
-		LicenseGplv3,
-		LicenseGplv3WithExceptions,
-		LicenseGplv3PlusWithExceptions,
-		LicenseLgplv2,
-		LicenseLgplv3,
-		LicenseGnuplot,
-		LicenseIbm,
-		LicenseImatix,
-		LicenseImagemagick,
-		LicenseImlib2,
-		LicenseIjg,
-		LicenseIntel_acpi,
-		LicenseInterbase,
-		LicenseIsc,
-		LicenseJabber,
-		LicenseJasper,
-		LicenseLppl,
-		LicenseLibtiff,
-		LicenseLpl,
-		LicenseMecabIpadic,
-		LicenseMit,
-		LicenseMitWithAdvertising,
-		LicenseMplv1Dot0,
-		LicenseMplv1Dot1,
-		LicenseNcsa,
-		LicenseNgpl,
-		LicenseNosl,
-		LicenseNetcdf,
-		LicenseNetscape,
-		LicenseNokia,
-		LicenseOpenldap,
-		LicenseOpenpbs,
-		LicenseOsl1Dot0,
-		LicenseOsl1Dot1,
-		LicenseOsl2Dot0,
-		LicenseOsl3Dot0,
-		LicenseOpenssl,
-		LicenseOreilly,
-		LicensePhorum,
-		LicensePhp,
-		LicensePublicDomain,
-		LicensePython,
-		LicenseQpl,
-		LicenseRpsl,
-		LicenseRuby,
-		LicenseSendmail,
-		LicenseSleepycat,
-		LicenseSlib,
-		LicenseSissl,
-		LicenseSpl,
-		LicenseTcl,
-		LicenseUcd,
-		LicenseVim,
-		LicenseVnlsl,
-		LicenseVsl,
-		LicenseW3c,
-		LicenseWxwidgets,
-		LicenseXinetd,
-		LicenseZend,
-		LicenseZplv1Dot0,
-		LicenseZplv2Dot0,
-		LicenseZplv2Dot1,
-		LicenseZlib,
-		LicenseZlibWithAck,
-		LicenseCdl,
-		LicenseFbsddl,
-		LicenseGfdl,
-		LicenseIeee,
-		LicenseOfsfdl,
-		LicenseOpenPublication,
-		LicenseCcBy,
-		LicenseCcBySa,
-		LicenseCcByNd,
-		LicenseDsl,
-		LicenseFreeArt,
-		LicenseOfl,
-		LicenseUtopia,
-		LicenseArphic,
-		LicenseBaekmuk,
-		LicenseBitstreamVera,
-		LicenseLucida,
-		LicenseMplus,
-		LicenseStix,
-		LicenseXano,
-		LicenseVostrom,
-		LicenseXerox,
-		LicenseRicebsd,
-		LicenseQhull,
-		/* this always has to be at the end of the list */
-		LastLicense
-	} License;
+    /**
+    * Describes a package's license
+    */
+    typedef enum {
+        UnknownLicense,
+        LicenseGlide,
+        LicenseAfl,
+        LicenseAmpasBsd,
+        LicenseAmazonDsl,
+        LicenseAdobe,
+        LicenseAgplv1,
+        LicenseAgplv3,
+        LicenseAsl1Dot0,
+        LicenseAsl1Dot1,
+        LicenseAsl2Dot0,
+        LicenseApsl2Dot0,
+        LicenseArtisticClarified,
+        LicenseArtistic2Dot0,
+        LicenseArl,
+        LicenseBittorrent,
+        LicenseBoost,
+        LicenseBsdWithAdvertising,
+        LicenseBsd,
+        LicenseCecill,
+        LicenseCddl,
+        LicenseCpl,
+        LicenseCondor,
+        LicenseCopyrightOnly,
+        LicenseCryptix,
+        LicenseCrystalStacker,
+        LicenseDoc,
+        LicenseWtfpl,
+        LicenseEpl,
+        LicenseEcos,
+        LicenseEfl2Dot0,
+        LicenseEu_datagrid,
+        LicenseLgplv2WithExceptions,
+        LicenseFtl,
+        LicenseGiftware,
+        LicenseGplv2,
+        LicenseGplv2WithExceptions,
+        LicenseGplv2PlusWithExceptions,
+        LicenseGplv3,
+        LicenseGplv3WithExceptions,
+        LicenseGplv3PlusWithExceptions,
+        LicenseLgplv2,
+        LicenseLgplv3,
+        LicenseGnuplot,
+        LicenseIbm,
+        LicenseImatix,
+        LicenseImagemagick,
+        LicenseImlib2,
+        LicenseIjg,
+        LicenseIntel_acpi,
+        LicenseInterbase,
+        LicenseIsc,
+        LicenseJabber,
+        LicenseJasper,
+        LicenseLppl,
+        LicenseLibtiff,
+        LicenseLpl,
+        LicenseMecabIpadic,
+        LicenseMit,
+        LicenseMitWithAdvertising,
+        LicenseMplv1Dot0,
+        LicenseMplv1Dot1,
+        LicenseNcsa,
+        LicenseNgpl,
+        LicenseNosl,
+        LicenseNetcdf,
+        LicenseNetscape,
+        LicenseNokia,
+        LicenseOpenldap,
+        LicenseOpenpbs,
+        LicenseOsl1Dot0,
+        LicenseOsl1Dot1,
+        LicenseOsl2Dot0,
+        LicenseOsl3Dot0,
+        LicenseOpenssl,
+        LicenseOreilly,
+        LicensePhorum,
+        LicensePhp,
+        LicensePublicDomain,
+        LicensePython,
+        LicenseQpl,
+        LicenseRpsl,
+        LicenseRuby,
+        LicenseSendmail,
+        LicenseSleepycat,
+        LicenseSlib,
+        LicenseSissl,
+        LicenseSpl,
+        LicenseTcl,
+        LicenseUcd,
+        LicenseVim,
+        LicenseVnlsl,
+        LicenseVsl,
+        LicenseW3c,
+        LicenseWxwidgets,
+        LicenseXinetd,
+        LicenseZend,
+        LicenseZplv1Dot0,
+        LicenseZplv2Dot0,
+        LicenseZplv2Dot1,
+        LicenseZlib,
+        LicenseZlibWithAck,
+        LicenseCdl,
+        LicenseFbsddl,
+        LicenseGfdl,
+        LicenseIeee,
+        LicenseOfsfdl,
+        LicenseOpenPublication,
+        LicenseCcBy,
+        LicenseCcBySa,
+        LicenseCcByNd,
+        LicenseDsl,
+        LicenseFreeArt,
+        LicenseOfl,
+        LicenseUtopia,
+        LicenseArphic,
+        LicenseBaekmuk,
+        LicenseBitstreamVera,
+        LicenseLucida,
+        LicenseMplus,
+        LicenseStix,
+        LicenseXano,
+        LicenseVostrom,
+        LicenseXerox,
+        LicenseRicebsd,
+        LicenseQhull,
+        /* this always has to be at the end of the list */
+        LastLicense
+    } License;
 
-	/**
-	 * Describes what kind of media is required
-	 */
-	typedef enum {
-		UnknownMediaType,
-		MediaTypeCd,
-		MediaTypeDvd,
-		MediaTypeDisc,
-		/* this always has to be at the end of the list */
-		LastMediaType
-	} MediaType;
+    /**
+    * Describes what kind of media is required
+    */
+    typedef enum {
+        UnknownMediaType,
+        MediaTypeCd,
+        MediaTypeDvd,
+        MediaTypeDisc,
+        /* this always has to be at the end of the list */
+        LastMediaType
+    } MediaType;
 
-	/**
-	 * Describes the authorization result
-	 */
-	typedef enum {
-		UnknownAuthorize,
-		AuthorizeYes,
-		AuthorizeNo,
-		AuthorizeInteractive,
-		/* this always has to be at the end of the list */
-		LastAuthorize
-	} Authorize;
+    /**
+    * Describes the authorization result
+    */
+    typedef enum {
+        UnknownAuthorize,
+        AuthorizeYes,
+        AuthorizeNo,
+        AuthorizeInteractive,
+        /* this always has to be at the end of the list */
+        LastAuthorize
+    } Authorize;
 };
 Q_DECLARE_OPERATORS_FOR_FLAGS(Enum::Filters)
 
commit 18e7d80d5299be17c8baaf23f210332f9aa30180
Author: Zhang Qiang <qiang.z.zhang at intel.com>
Date:   Thu Dec 2 17:48:14 2010 +0800

    zypp:fix a logic error in refresh cache
    
    without this patch, zypp backend only refresh one repo. This patch fix
    this issue, and continue refresh other repo if one repo refresh fail.

diff --git a/backends/zypp/zypp-utils.cpp b/backends/zypp/zypp-utils.cpp
index a5ce2d3..6c9e3ab 100644
--- a/backends/zypp/zypp-utils.cpp
+++ b/backends/zypp/zypp-utils.cpp
@@ -1162,8 +1162,7 @@ zypp_refresh_cache (PkBackend *backend, gboolean force)
 			// Refreshing metadata
 			g_free (_repoName);
 			_repoName = g_strdup (repo.alias ().c_str ());
-			if (zypp_refresh_meta_and_cache (manager, repo, force))
-				break;
+			zypp_refresh_meta_and_cache (manager, repo, force);
 		} catch (const zypp::Exception &ex) {
 			if (repo_messages == NULL) {
 				repo_messages = g_strdup_printf ("%s: %s%s", repo.alias ().c_str (), ex.asUserString ().c_str (), "\n");
commit 49a16fce832687d0ff61eb26b20b819ba72dd3cc
Author: Richard Hughes <richard at hughsie.com>
Date:   Wed Dec 1 17:00:05 2010 +0000

    yum: allow a cache refresh when offline to deal with networkless setups

diff --git a/backends/yum/pk-backend-yum.c b/backends/yum/pk-backend-yum.c
index 2abfa32..9a5e044 100644
--- a/backends/yum/pk-backend-yum.c
+++ b/backends/yum/pk-backend-yum.c
@@ -612,13 +612,6 @@ pk_backend_install_signature (PkBackend *backend, PkSigTypeEnum type,
 void
 pk_backend_refresh_cache (PkBackend *backend, gboolean force)
 {
-	/* check network state */
-	if (!pk_backend_is_online (backend)) {
-		pk_backend_error_code (backend, PK_ERROR_ENUM_NO_NETWORK, "Cannot refresh cache whilst offline");
-		pk_backend_finished (backend);
-		return;
-	}
-
 	pk_backend_spawn_helper (priv->spawn, "yumBackend.py", "refresh-cache", pk_backend_bool_to_string (force), NULL);
 }
 
commit 029fe0ae43b15de4f59b98d45218733feeddc458
Author: Richard Hughes <richard at hughsie.com>
Date:   Wed Dec 1 09:58:10 2010 +0000

    zif: don't emit a ZifState warning if an update does not have update details

diff --git a/backends/zif/pk-backend-zif.c b/backends/zif/pk-backend-zif.c
index f2d1756..d7c718d 100644
--- a/backends/zif/pk-backend-zif.c
+++ b/backends/zif/pk-backend-zif.c
@@ -3091,6 +3091,18 @@ pk_backend_get_update_detail_thread (PkBackend *backend)
 						  "No description available",
 						  PK_UPDATE_STATE_ENUM_UNKNOWN,
 						  NULL, NULL);
+
+			/* ensure we manually clear the state, as we're
+			 * carrying on */
+			ret = zif_state_finished (state_tmp, &error);
+			if (!ret) {
+				pk_backend_error_code (backend,
+						       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+						       "cancelled: %s",
+						       error->message);
+				g_error_free (error);
+				goto out;
+			}
 		} else {
 			gchar *changelog_text = NULL;
 			GPtrArray *array;
commit 012f0920f633bf96e33e2ca310c263772db17fc9
Author: Richard Hughes <richard at hughsie.com>
Date:   Tue Nov 30 21:30:47 2010 +0000

    zif: get the update vendor string and send to the daemon

diff --git a/backends/zif/pk-backend-zif.c b/backends/zif/pk-backend-zif.c
index da56d1a..f2d1756 100644
--- a/backends/zif/pk-backend-zif.c
+++ b/backends/zif/pk-backend-zif.c
@@ -3097,20 +3097,27 @@ pk_backend_get_update_detail_thread (PkBackend *backend)
 			GPtrArray *changesets;
 			GString *string_cve;
 			GString *string_bugzilla;
+			GString *string_vendor;
 			ZifUpdateInfo *info;
 			array = zif_update_get_update_infos (update);
 			string_cve = g_string_new (NULL);
 			string_bugzilla = g_string_new (NULL);
+			string_vendor = g_string_new (NULL);
 			for (j=0; j<array->len; j++) {
 				info = g_ptr_array_index (array, j);
 				switch (zif_update_info_get_kind (info)) {
 				case ZIF_UPDATE_INFO_KIND_CVE:
-					g_string_append_printf (string_cve, "%s\t%s\t",
+					g_string_append_printf (string_cve, "%s;%s;",
 								zif_update_info_get_title (info),
 								zif_update_info_get_url (info));
 					break;
 				case ZIF_UPDATE_INFO_KIND_BUGZILLA:
-					g_string_append_printf (string_bugzilla, "%s\t%s\t",
+					g_string_append_printf (string_bugzilla, "%s;%s;",
+								zif_update_info_get_title (info),
+								zif_update_info_get_url (info));
+					break;
+				case ZIF_UPDATE_INFO_KIND_VENDOR:
+					g_string_append_printf (string_vendor, "%s;%s;",
 								zif_update_info_get_title (info),
 								zif_update_info_get_url (info));
 					break;
@@ -3119,6 +3126,14 @@ pk_backend_get_update_detail_thread (PkBackend *backend)
 				}
 			}
 
+			/* remove trailing ';' */
+			if (string_cve->len > 0)
+				g_string_set_size (string_cve, string_cve->len - 1);
+			if (string_bugzilla->len > 0)
+				g_string_set_size (string_bugzilla, string_bugzilla->len - 1);
+			if (string_vendor->len > 0)
+				g_string_set_size (string_vendor, string_vendor->len - 1);
+
 			/* format changelog */
 			changesets = zif_update_get_changelog (update);
 			if (changesets != NULL)
@@ -3126,7 +3141,7 @@ pk_backend_get_update_detail_thread (PkBackend *backend)
 			pk_backend_update_detail (backend, package_ids[i],
 						  NULL, //updates,
 						  NULL, //obsoletes,
-						  NULL, //vendor_url,
+						  string_vendor->str,
 						  string_bugzilla->str,
 						  string_cve->str,
 						  PK_RESTART_ENUM_NONE,
commit 46a0483236916a77c7ea47e21c24c2898e2b806e
Author: Richard Hughes <richard at hughsie.com>
Date:   Tue Nov 30 20:25:25 2010 +0000

    zif: for updates without updateinfo, do not put '<none>' in the translated display

diff --git a/backends/zif/pk-backend-zif.c b/backends/zif/pk-backend-zif.c
index 93f9f53..da56d1a 100644
--- a/backends/zif/pk-backend-zif.c
+++ b/backends/zif/pk-backend-zif.c
@@ -3087,7 +3087,7 @@ pk_backend_get_update_detail_thread (PkBackend *backend)
 			pk_backend_update_detail (backend, package_ids[i],
 						  NULL, NULL, NULL, NULL, NULL,
 						  PK_RESTART_ENUM_NONE,
-						  "<none>",
+						  "",
 						  "No description available",
 						  PK_UPDATE_STATE_ENUM_UNKNOWN,
 						  NULL, NULL);
commit 0bd3a00a16c42cba319abf8705c69e31b607252f
Author: Richard Hughes <richard at hughsie.com>
Date:   Tue Nov 30 20:24:35 2010 +0000

    zif: fix changelog generation when there is no changeset version available

diff --git a/backends/zif/pk-backend-zif.c b/backends/zif/pk-backend-zif.c
index e804c93..93f9f53 100644
--- a/backends/zif/pk-backend-zif.c
+++ b/backends/zif/pk-backend-zif.c
@@ -2947,11 +2947,12 @@ out:
 static gchar *
 pk_backend_get_changelog_text (GPtrArray *changesets)
 {
-	guint i;
-	ZifChangeset *changeset;
-	GString *text;
+	const gchar *version;
 	gchar date_str[128];
 	GDate *date;
+	GString *text;
+	guint i;
+	ZifChangeset *changeset;
 
 	/* create output string */
 	text = g_string_new ("");
@@ -2964,11 +2965,19 @@ pk_backend_get_changelog_text (GPtrArray *changesets)
 		/* format the indervidual changeset */
 		g_date_set_time_t (date, zif_changeset_get_date (changeset));
 		g_date_strftime (date_str, 128, "%F", date);
-		g_string_append_printf (text, "**%s** %s - %s\n%s\n\n",
-					date_str,
-					zif_changeset_get_author (changeset),
-					zif_changeset_get_version (changeset),
-					zif_changeset_get_description (changeset));
+		version = zif_changeset_get_version (changeset);
+		if (version != NULL) {
+			g_string_append_printf (text, "**%s** %s - %s\n%s\n\n",
+						date_str,
+						zif_changeset_get_author (changeset),
+						version,
+						zif_changeset_get_description (changeset));
+		} else {
+			g_string_append_printf (text, "**%s** %s\n%s\n\n",
+						date_str,
+						zif_changeset_get_author (changeset),
+						zif_changeset_get_description (changeset));
+		}
 	}
 	g_date_free (date);
 	return g_string_free (text, FALSE);
commit 20e96291969c2f759d863a2ae3b95bc352952ce0
Author: Richard Hughes <richard at hughsie.com>
Date:   Tue Nov 30 20:16:56 2010 +0000

    zif: If we are running in background mode, depsolve the update lists
    
    This ensures the filelists are retrieved and the deps checked before the user clicks
    on the interactive dialog. It feels a lot snappier this way too.

diff --git a/backends/zif/pk-backend-zif.c b/backends/zif/pk-backend-zif.c
index 071f29e..e804c93 100644
--- a/backends/zif/pk-backend-zif.c
+++ b/backends/zif/pk-backend-zif.c
@@ -1381,7 +1381,7 @@ pk_backend_initialize (PkBackend *backend)
 			  backend);
 
 	/* we don't want to enable this for normal runtime */
-	zif_state_set_enable_profile (priv->state, TRUE);
+	//zif_state_set_enable_profile (priv->state, TRUE);
 
 	/* ZifConfig */
 	priv->config = zif_config_new ();
@@ -2642,6 +2642,7 @@ static gboolean
 pk_backend_get_updates_thread (PkBackend *backend)
 {
 	PkBitfield filters = (PkBitfield) pk_backend_get_uint (backend, "filters");
+	gboolean background;
 	gboolean ret;
 	gchar **search = NULL;
 	GError *error = NULL;
@@ -2663,14 +2664,27 @@ pk_backend_get_updates_thread (PkBackend *backend)
 	pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
 
 	/* set steps */
-	ret = zif_state_set_steps (priv->state,
-				   NULL,
-				   1, /* get remote stores */
-				   1, /* get installed packages */
-				   3, /* filter newest */
-				   45, /* look in remote stores */
-				   50, /* get updateinfo */
-				   -1);
+	background = zif_config_get_boolean (priv->config, "background", NULL);
+	if (!background) {
+		ret = zif_state_set_steps (priv->state,
+					   NULL,
+					   1, /* get remote stores */
+					   1, /* get installed packages */
+					   3, /* filter newest */
+					   45, /* look in remote stores */
+					   50, /* get updateinfo */
+					   -1);
+	} else {
+		ret = zif_state_set_steps (priv->state,
+					   NULL,
+					   1, /* get remote stores */
+					   1, /* get installed packages */
+					   3, /* filter newest */
+					   25, /* look in remote stores */
+					   20, /* get updateinfo */
+					   50, /* depsolve */
+					   -1);
+	}
 	g_assert (ret);
 
 	/* get a store_array of remote stores */
@@ -2855,6 +2869,53 @@ pk_backend_get_updates_thread (PkBackend *backend)
 		goto out;
 	}
 
+	/* if the transaction is done in the background, then depsolve
+	 * the updates transaction so we have all the file lists up to
+	 * date, and the depends data calculated so the UI is snappy */
+	if (background) {
+		/* use these stores for the transaction */
+		zif_transaction_set_stores_remote (priv->transaction, store_array);
+
+		for (i=0; i<updates_available->len; i++) {
+			package = g_ptr_array_index (updates_available, i);
+			ret = zif_transaction_add_install_as_update (priv->transaction,
+								     package,
+								     &error);
+			if (!ret) {
+				pk_backend_error_code (backend,
+						       PK_ERROR_ENUM_PACKAGE_NOT_FOUND,
+						       "cannot add update: %s",
+						       error->message);
+				g_error_free (error);
+				goto out;
+			}
+		}
+
+		/* resolve this, which will take some time, as it's a
+		 * background action and thus throttled */
+		state_local = zif_state_get_child (priv->state);
+		ret = zif_transaction_resolve (priv->transaction, state_local, &error);
+		if (!ret) {
+			pk_backend_error_code (backend,
+					       PK_ERROR_ENUM_DEP_RESOLUTION_FAILED,
+					       "cannot resolve transaction: %s",
+					       error->message);
+			g_error_free (error);
+			goto out;
+		}
+
+		/* this section done */
+		ret = zif_state_done (priv->state, &error);
+		if (!ret) {
+			pk_backend_error_code (backend,
+					       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+					       "cancelled: %s",
+					       error->message);
+			g_error_free (error);
+			goto out;
+		}
+	}
+
 	/* filter */
 	result = pk_backend_filter_package_array (updates_available, filters);
 
commit 050341d7000375a09d5fe9b8ea20c2d003403bb3
Author: Richard Hughes <richard at hughsie.com>
Date:   Tue Nov 30 20:15:47 2010 +0000

    Do not disable background mode if we are marked as interactive, as the two are orthognal to one another

diff --git a/src/pk-backend.c b/src/pk-backend.c
index 3a5e449..151689d 100644
--- a/src/pk-backend.c
+++ b/src/pk-backend.c
@@ -2413,10 +2413,6 @@ pk_backend_use_background (PkBackend *backend)
 {
 	gboolean ret;
 
-	/* we're watching the GUI, do as fast as possible */
-	if (backend->priv->interactive == PK_HINT_ENUM_TRUE)
-		return FALSE;
-
 	/* check we are allowed */
 	ret = pk_conf_get_bool (backend->priv->conf, "UseIdleBandwidth");
 	if (!ret)
commit baf39274cb4295289439cdb55ec249fdc7c57a31
Author: Richard Hughes <richard at hughsie.com>
Date:   Mon Nov 29 15:50:04 2010 +0000

    Ensure we emit PK_STATUS_ENUM_WAIT when a transaction is in the 'ready' state

diff --git a/src/pk-transaction-list.c b/src/pk-transaction-list.c
index 116c2cf..8db34ce 100644
--- a/src/pk-transaction-list.c
+++ b/src/pk-transaction-list.c
@@ -584,7 +584,8 @@ pk_transaction_list_commit (PkTransactionList *tlist, const gchar *tid)
 	}
 
 	g_debug ("marking transaction %s as committed", item->tid);
-	ret = pk_transaction_set_state (item->transaction, PK_TRANSACTION_STATE_COMMITTED);
+	ret = pk_transaction_set_state (item->transaction,
+					PK_TRANSACTION_STATE_COMMITTED);
 	if (!ret) {
 		g_warning ("could not mark as committed");
 		return FALSE;
diff --git a/src/pk-transaction.c b/src/pk-transaction.c
index 2fc5921..ac77e84 100644
--- a/src/pk-transaction.c
+++ b/src/pk-transaction.c
@@ -791,6 +791,8 @@ pk_transaction_state_to_string (PkTransactionState state)
 {
 	if (state == PK_TRANSACTION_STATE_NEW)
 		return "new";
+	if (state == PK_TRANSACTION_STATE_WAITING_FOR_AUTH)
+		return "waiting-for-auth";
 	if (state == PK_TRANSACTION_STATE_COMMITTED)
 		return "committed";
 	if (state == PK_TRANSACTION_STATE_READY)
@@ -809,10 +811,11 @@ pk_transaction_state_to_string (PkTransactionState state)
  * Typically, these states will be:
  *
  * 1. 'new'
- * 2. 'committed'  <--- when the client sets the role
- * 3. 'ready'      <--- when the transaction is ready to be run
- * 4. 'running'    <--- where PkBackend gets used
- * 5. 'finished'
+ * 2. 'waiting for auth'  <--- waiting for PolicyKit (optional)
+ * 3. 'committed'         <--- when the client sets the role
+ * 4. 'ready'             <--- when the transaction is ready to be run
+ * 5. 'running'           <--- where PkBackend gets used
+ * 6. 'finished'
  *
  **/
 gboolean
@@ -833,6 +836,24 @@ pk_transaction_set_state (PkTransaction *transaction, PkTransactionState state)
 	g_debug ("transaction now %s", pk_transaction_state_to_string (state));
 	transaction->priv->state = state;
 
+	/* update GUI */
+	if (state == PK_TRANSACTION_STATE_WAITING_FOR_AUTH) {
+		pk_transaction_status_changed_emit (transaction,
+						    PK_STATUS_ENUM_WAITING_FOR_AUTH);
+		pk_transaction_progress_changed_emit (transaction,
+						      PK_BACKEND_PERCENTAGE_INVALID,
+						      PK_BACKEND_PERCENTAGE_INVALID,
+						      0, 0);
+
+	} else if (state == PK_TRANSACTION_STATE_READY) {
+		pk_transaction_status_changed_emit (transaction,
+						    PK_STATUS_ENUM_WAIT);
+		pk_transaction_progress_changed_emit (transaction,
+						      PK_BACKEND_PERCENTAGE_INVALID,
+						      PK_BACKEND_PERCENTAGE_INVALID,
+						      0, 0);
+	}
+
 	/* we have no actions to perform here, so go straight to running */
 	if (state == PK_TRANSACTION_STATE_COMMITTED) {
 		/* TODO: do some things before we change states */
@@ -2537,9 +2558,9 @@ pk_transaction_obtain_authorization (PkTransaction *transaction, gboolean only_t
 	/* log */
 	pk_syslog_add (priv->syslog, PK_SYSLOG_TYPE_AUTH, "uid %i is trying to obtain %s auth (only_trusted:%i)", priv->uid, action_id, only_trusted);
 
-	/* emit status for GUIs */
-	pk_transaction_status_changed_emit (transaction, PK_STATUS_ENUM_WAITING_FOR_AUTH);
-	pk_transaction_progress_changed_emit (transaction, PK_BACKEND_PERCENTAGE_INVALID, PK_BACKEND_PERCENTAGE_INVALID, 0, 0);
+	/* set transaction state */
+	pk_transaction_set_state (transaction,
+				  PK_TRANSACTION_STATE_WAITING_FOR_AUTH);
 
 	/* check subject */
 	priv->waiting_for_auth = TRUE;
diff --git a/src/pk-transaction.h b/src/pk-transaction.h
index 99b271f..07a21c4 100644
--- a/src/pk-transaction.h
+++ b/src/pk-transaction.h
@@ -80,6 +80,7 @@ typedef enum
 /* these have to be kept in order */
 typedef enum {
 	PK_TRANSACTION_STATE_NEW,
+	PK_TRANSACTION_STATE_WAITING_FOR_AUTH,
 	PK_TRANSACTION_STATE_COMMITTED,
 	PK_TRANSACTION_STATE_READY,
 	PK_TRANSACTION_STATE_RUNNING,
commit bf7bd5fca467c043d10f48002895df9119d9f90c
Merge: 75c99ee... e16913c...
Author: Daniel Nicoletti <dantti85-pk at yahoo.com.br>
Date:   Mon Nov 29 12:05:55 2010 -0200

    Merge branch 'master' of gitorious.org:packagekit/packagekit

commit 75c99ee525bcf8c3d3c7ffbc12216db64d32d280
Author: Daniel Nicoletti <dantti85-pk at yahoo.com.br>
Date:   Mon Nov 29 12:04:18 2010 -0200

    packagekit-qt: use QDBusServiceWatcher instead of watching for serviceOwnerChanged()

diff --git a/lib/packagekit-qt/src/client.cpp b/lib/packagekit-qt/src/client.cpp
index 2dffc82..c0c15ef 100644
--- a/lib/packagekit-qt/src/client.cpp
+++ b/lib/packagekit-qt/src/client.cpp
@@ -83,9 +83,6 @@ Client::Client(QObject* parent) : QObject(parent), d_ptr(new ClientPrivate(this)
 	if (!db.open()) {
 		qDebug() << "Failed to initialize the desktop files database";
 	}
-
-	// Set up a watch on DBus so that we know if the daemon disappears
-	connect (QDBusConnection::systemBus ().interface (), SIGNAL(serviceOwnerChanged (const QString&, const QString&, const QString&)), d, SLOT (serviceOwnerChanged (const QString&, const QString&, const QString&)));
 }
 
 Client::~Client()
diff --git a/lib/packagekit-qt/src/clientprivate.cpp b/lib/packagekit-qt/src/clientprivate.cpp
index 5c18863..ed1fce8 100644
--- a/lib/packagekit-qt/src/clientprivate.cpp
+++ b/lib/packagekit-qt/src/clientprivate.cpp
@@ -23,12 +23,20 @@
 #include "transactionprivate.h"
 #include "common.h"
 
+#include <QDBusConnection>
+
 using namespace PackageKit;
 
 ClientPrivate::ClientPrivate(Client* parent)
  : QObject(parent),
    c(parent)
 {
+    m_watcher = new QDBusServiceWatcher(PK_NAME,
+                                        QDBusConnection::systemBus(),
+                                        QDBusServiceWatcher::WatchForUnregistration,
+                                        this);
+    connect(m_watcher, SIGNAL(serviceUnregistered(const QString &)),
+            this, SLOT(serviceUnregistered()));
 }
 
 ClientPrivate::~ClientPrivate()
@@ -58,21 +66,8 @@ void ClientPrivate::transactionListChanged(const QStringList& tids)
 	c->transactionListChanged(transactions(tids, Client::instance()));
 }
 
-void ClientPrivate::serviceOwnerChanged (const QString& name, const QString& oldOnwer, const QString& newOwner)
+void ClientPrivate::serviceUnregistered()
 {
-    if (name != PK_NAME){
-        return;
-    }
-
-    // next time a transaction need to be created
-    // we start the Daemon, we have to find a way
-    // to avoid DBus error that sericeHasNoOwner
-    startDaemon = newOwner.isEmpty();
-
-    if (!newOwner.isEmpty()){
-        return;
-    }
-
     error = Client::ErrorDaemonUnreachable;
     c->error(error);
 
diff --git a/lib/packagekit-qt/src/clientprivate.h b/lib/packagekit-qt/src/clientprivate.h
index f71b9e9..c867dc8 100644
--- a/lib/packagekit-qt/src/clientprivate.h
+++ b/lib/packagekit-qt/src/clientprivate.h
@@ -1,6 +1,7 @@
 /*
  * This file is part of the QPackageKit project
  * Copyright (C) 2008 Adrien Bustany <madcat at mymadcat.com>
+ * Copyright (C) 2010 Daniel Nicoletti <dantti85-pk at yahoo.com.br>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Library General Public
@@ -22,6 +23,7 @@
 #define CLIENTPRIVATE_H
 
 #include <QtCore>
+#include <QDBusServiceWatcher>
 #include "client.h"
 
 class DaemonProxy;
@@ -32,28 +34,29 @@ class Transaction;
 
 class ClientPrivate : public QObject
 {
-	Q_OBJECT
+    Q_OBJECT
 
 public:
-	~ClientPrivate();
+    ~ClientPrivate();
 
-	::DaemonProxy* daemon;
-	Client* c;
-	QStringList hints;
-	QHash<QString, Transaction*> runningTransactions;
-	Client::DaemonError error;
+    ::DaemonProxy* daemon;
+    Client* c;
+    QStringList hints;
+    QHash<QString, Transaction*> runningTransactions;
+    Client::DaemonError error;
 
-    QList<Transaction*> transactions(const QStringList& tids, QObject *parent);
-	void destroyTransaction(const QString &tid);
+    QList<Transaction*> transactions(const QStringList &tids, QObject *parent);
+    void destroyTransaction(const QString &tid);
 
 public Q_SLOTS:
-	void transactionListChanged(const QStringList& tids);
-	void serviceOwnerChanged(const QString&, const QString&, const QString&);
+    void transactionListChanged(const QStringList &tids);
+    void serviceUnregistered();
 
 private:
     friend class Client;
-    bool startDaemon;
     ClientPrivate(Client* parent);
+
+    QDBusServiceWatcher *m_watcher;
 };
 
 } // End namespace PackageKit
commit e16913c86183551a2404ed689b0c1d748733f449
Author: Richard Hughes <richard at hughsie.com>
Date:   Mon Nov 29 12:58:30 2010 +0000

    trivial: update the fedora reference spec file

diff --git a/contrib/PackageKit.spec.in b/contrib/PackageKit.spec.in
index 619fc64..88cd55f 100644
--- a/contrib/PackageKit.spec.in
+++ b/contrib/PackageKit.spec.in
@@ -68,6 +68,15 @@ Requires: %{name} = %{version}-%{release}
 %description yum
 A backend for PackageKit to enable yum functionality.
 
+%package zif
+Summary: PackageKit Zif backend
+Group: System Environment/Libraries
+Requires: zif >= 0.1.3
+Requires: %{name} = %{version}-%{release}
+
+%description zif
+A backend for PackageKit to enable Zif functionality.
+
 %if 0%{?rhel} == 0
 %package smart
 Summary: PackageKit SMART backend
@@ -360,6 +369,12 @@ update-mime-database %{_datadir}/mime &> /dev/null || :
 %dir %{_datadir}/PackageKit/helpers/yum
 %{_datadir}/PackageKit/helpers/yum/*
 
+%files zif
+%defattr(-,root,root,-)
+%{_libdir}/packagekit-backend/libpk_backend_zif.so
+%dir %{_datadir}/PackageKit/helpers/zif
+%{_datadir}/PackageKit/helpers/zif/*
+
 %files yum-plugin
 %defattr(-, root, root)
 %config(noreplace) %{_sysconfdir}/yum/pluginconf.d/refresh-packagekit.conf
commit f1e14657d354f9ebb9304fb3b0de53007f43c17f
Merge: 24c06f4... 763b500...
Author: Daniel Nicoletti <dantti85-pk at yahoo.com.br>
Date:   Mon Nov 29 10:38:06 2010 -0200

    Merge branch 'master' of gitorious.org:packagekit/packagekit

commit 24c06f49760cf56b97a7e844e356cb8c2fe8342a
Author: Daniel Nicoletti <dantti85-pk at yahoo.com.br>
Date:   Mon Nov 29 10:36:59 2010 -0200

    packagekit-qt: fix order of initialization

diff --git a/lib/packagekit-qt/src/transactionprivate.cpp b/lib/packagekit-qt/src/transactionprivate.cpp
index 9432cb2..1adcd88 100644
--- a/lib/packagekit-qt/src/transactionprivate.cpp
+++ b/lib/packagekit-qt/src/transactionprivate.cpp
@@ -27,8 +27,8 @@ using namespace PackageKit;
 
 TransactionPrivate::TransactionPrivate(Transaction* parent)
  : QObject(parent),
-   t(parent),
    p(0),
+   t(parent),
    destroyed(false)
 {
 }
commit 763b500a2a5fc10e8cc91c9d421af5f304ff97ef
Author: Richard Hughes <richard at hughsie.com>
Date:   Mon Nov 29 12:23:17 2010 +0000

    zif: fix a few trivial bugs spotted by clang

diff --git a/backends/zif/pk-backend-zif.c b/backends/zif/pk-backend-zif.c
index dfd6f95..071f29e 100644
--- a/backends/zif/pk-backend-zif.c
+++ b/backends/zif/pk-backend-zif.c
@@ -141,7 +141,7 @@ pk_backend_transaction_start (PkBackend *backend)
 	guint i;
 	guint lock_delay;
 	guint lock_retries;
-	guint pid;
+	guint pid = 0;
 
 	/* only try a finite number of times */
 	lock_retries = zif_config_get_uint (priv->config, "lock_retries", NULL);
@@ -637,7 +637,6 @@ pk_backend_search_collections (GPtrArray *store_array,
 			       GError **error)
 {
 	gboolean ret;
-	gchar *package_id;
 	GError *error_local = NULL;
 	GPtrArray *array = NULL;
 	GPtrArray *array_tmp;
@@ -691,7 +690,7 @@ pk_backend_search_collections (GPtrArray *store_array,
 			g_ptr_array_add (array, g_object_ref (package));
 		} else {
 			g_warning ("failed to add id %s: %s",
-				   package_id,
+				   zif_category_get_id (cat),
 				   error_local->message);
 			g_clear_error (&error_local);
 		}
@@ -828,6 +827,8 @@ pk_backend_resolve_groups (GPtrArray *store_array,
 					   error_local->message);
 				g_clear_error (&error_local);
 				ret = zif_state_finished (state_loop, error);
+				if (!ret)
+					goto out;
 			}
 		}
 
@@ -904,7 +905,6 @@ pk_backend_what_provides_helper (GPtrArray *store_array,
 					       depend_array,
 					       state_local,
 					       error);
-	g_object_unref (depend);
 	if (array == NULL)
 		goto out;
 
@@ -1577,13 +1577,11 @@ pk_backend_download_packages_thread (PkBackend *backend)
 	GPtrArray *packages = NULL;
 	GPtrArray *store_array = NULL;
 	guint i;
-	guint len;
 	ZifPackage *package;
 	ZifState *state_local;
 	ZifState *state_loop;
 	ZifState *state_tmp;
 
-	len = g_strv_length (package_ids);
 	ret = zif_state_set_steps (priv->state,
 				   NULL,
 				   2, /* get default stores */
@@ -1790,24 +1788,21 @@ out:
 static gboolean
 pk_backend_get_depends_thread (PkBackend *backend)
 {
+	const gchar *id;
 	gboolean ret;
 	gchar **package_ids = pk_backend_get_strv (backend, "package_ids");
-	PkBitfield filters = (PkBitfield) pk_backend_get_uint (backend, "filters");
+	GError *error = NULL;
+	GPtrArray *array = NULL;
+	GPtrArray *provides;
+	GPtrArray *requires;
+	GPtrArray *result;
 	GPtrArray *store_array = NULL;
+	guint i, j;
+	PkBitfield filters = (PkBitfield) pk_backend_get_uint (backend, "filters");
 	ZifPackage *package;
 	ZifPackage *package_provide;
 	ZifState *state_local;
 	ZifState *state_loop;
-	const gchar *id;
-	guint i, j;
-	guint len;
-	GError *error = NULL;
-	GPtrArray *array = NULL;
-	GPtrArray *result;
-	GPtrArray *requires;
-	GPtrArray *provides;
-
-	len = g_strv_length (package_ids);
 
 	/* set steps */
 	ret = zif_state_set_steps (priv->state,
@@ -1918,7 +1913,7 @@ pk_backend_get_depends_thread (PkBackend *backend)
 			pk_backend_error_code (backend,
 					       PK_ERROR_ENUM_PACKAGE_NOT_FOUND,
 						       "failed to find provide for %s: %s",
-						       zif_depend_get_name (g_ptr_array_index (provides, 0)),
+						       zif_depend_get_name (g_ptr_array_index (requires, 0)),
 						       error->message);
 			g_error_free (error);
 			goto out;
@@ -2003,24 +1998,21 @@ out:
 static gboolean
 pk_backend_get_requires_thread (PkBackend *backend)
 {
+	const gchar *id;
 	gboolean ret;
 	gchar **package_ids = pk_backend_get_strv (backend, "package_ids");
-	PkBitfield filters = (PkBitfield) pk_backend_get_uint (backend, "filters");
+	GError *error = NULL;
+	GPtrArray *array = NULL;
+	GPtrArray *provides;
+	GPtrArray *requires;
+	GPtrArray *result;
 	GPtrArray *store_array = NULL;
+	guint i, j;
+	PkBitfield filters = (PkBitfield) pk_backend_get_uint (backend, "filters");
 	ZifPackage *package;
 	ZifPackage *package_provide;
 	ZifState *state_local;
 	ZifState *state_loop;
-	const gchar *id;
-	guint i, j;
-	guint len;
-	GError *error = NULL;
-	GPtrArray *array = NULL;
-	GPtrArray *result;
-	GPtrArray *requires;
-	GPtrArray *provides;
-
-	len = g_strv_length (package_ids);
 
 	/* set steps */
 	ret = zif_state_set_steps (priv->state,
@@ -2134,7 +2126,7 @@ pk_backend_get_requires_thread (PkBackend *backend)
 			pk_backend_error_code (backend,
 					       PK_ERROR_ENUM_PACKAGE_NOT_FOUND,
 					       "failed to find provide for %s: %s",
-					       zif_depend_get_name (g_ptr_array_index (provides, 0)),
+					       zif_depend_get_name (g_ptr_array_index (requires, 0)),
 					       error->message);
 			g_error_free (error);
 			goto out;
@@ -2230,7 +2222,6 @@ pk_backend_get_details_thread (PkBackend *backend)
 	GPtrArray *store_array = NULL;
 	guint64 size;
 	guint i;
-	guint len;
 	PkBitfield filters = PK_FILTER_ENUM_UNKNOWN;
 	PkGroupEnum group;
 	ZifPackage *package;
@@ -2238,8 +2229,6 @@ pk_backend_get_details_thread (PkBackend *backend)
 	ZifState *state_loop;
 	ZifState *state_tmp;
 
-	len = g_strv_length (package_ids);
-
 	/* set steps */
 	ret = zif_state_set_steps (priv->state,
 				   NULL,
@@ -2523,15 +2512,12 @@ pk_backend_get_files_thread (PkBackend *backend)
 	GPtrArray *store_array = NULL;
 	GString *files_str;
 	guint i, j;
-	guint len;
 	PkBitfield filters = PK_FILTER_ENUM_UNKNOWN;
 	ZifPackage *package;
 	ZifState *state_local;
 	ZifState *state_loop;
 	ZifState *state_tmp;
 
-	len = g_strv_length (package_ids);
-
 	/* set steps */
 	ret = zif_state_set_steps (priv->state,
 				   NULL,
@@ -2824,6 +2810,14 @@ pk_backend_get_updates_thread (PkBackend *backend)
 			g_debug ("failed to get updateinfo for %s", zif_package_get_id (package));
 			g_clear_error (&error);
 			ret = zif_state_finished (state_loop, NULL);
+			if (!ret) {
+				pk_backend_error_code (backend,
+						       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+						       "cancelled: %s",
+						       error->message);
+				g_error_free (error);
+				goto out;
+			}
 		} else {
 			update_kind = zif_update_get_kind (update);
 			if (update_kind == ZIF_UPDATE_KIND_BUGFIX)
@@ -2842,9 +2836,9 @@ pk_backend_get_updates_thread (PkBackend *backend)
 		ret = zif_state_done (state_local, &error);
 		if (!ret) {
 			pk_backend_error_code (backend,
-				       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
-				       "cancelled: %s",
-				       error->message);
+					       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+					       "cancelled: %s",
+					       error->message);
 			g_error_free (error);
 			goto out;
 		}
commit 6e4e816753c987d40be6ac1068aa3483e7d5624a
Author: Richard Hughes <richard at hughsie.com>
Date:   Mon Nov 29 12:17:52 2010 +0000

    dummy: fix a potential NULL dereference spotted by clang

diff --git a/backends/dummy/pk-backend-dummy.c b/backends/dummy/pk-backend-dummy.c
index 89d898f..a9f4135 100644
--- a/backends/dummy/pk-backend-dummy.c
+++ b/backends/dummy/pk-backend-dummy.c
@@ -1046,7 +1046,7 @@ pk_backend_socket_has_data_cb (GSocket *socket, GIOCondition condition, PkBacken
 	/* the helper process exited */
 	if ((condition & G_IO_HUP) > 0) {
 		pk_backend_error_code (backend, PK_ERROR_ENUM_INTERNAL_ERROR,
-				       "socket was disconnected: %s", error->message);
+				       "socket was disconnected");
 		pk_backend_finished (backend);
 		ret = FALSE;
 		goto out;
commit 537f4b2305bea757f35bf34d1463f3d502a2a994
Author: Richard Hughes <richard at hughsie.com>
Date:   Mon Nov 29 12:05:56 2010 +0000

    zif: Use zif_package_get_printable() to get easier to understand error messages

diff --git a/backends/zif/pk-backend-zif.c b/backends/zif/pk-backend-zif.c
index 311cab6..dfd6f95 100644
--- a/backends/zif/pk-backend-zif.c
+++ b/backends/zif/pk-backend-zif.c
@@ -274,10 +274,7 @@ out:
 static gboolean
 pk_backend_filter_package_array_newest (GPtrArray *array)
 {
-	const gchar *package_id;
-	gboolean installed;
 	gchar *key;
-	gchar **split;
 	GHashTable *hash;
 	gint retval;
 	guint i;
@@ -292,18 +289,12 @@ pk_backend_filter_package_array_newest (GPtrArray *array)
 
 	for (i=0; i<array->len; i++) {
 
-		/* get the current package */
-		package = g_ptr_array_index (array, i);
-		package_id = zif_package_get_id (package);
-		installed = zif_package_is_installed (package);
-
 		/* generate enough data to be specific */
-		split = pk_package_id_split (package_id);
+		package = g_ptr_array_index (array, i);
 		key = g_strdup_printf ("%s-%s-%i",
-				       split[PK_PACKAGE_ID_NAME],
-				       split[PK_PACKAGE_ID_ARCH],
-				       installed);
-		g_strfreev (split);
+				       zif_package_get_name (package),
+				       zif_package_get_arch (package),
+				       zif_package_is_installed (package));
 
 		/* we've not already come across this package */
 		found = g_hash_table_lookup (hash, key);
@@ -1700,7 +1691,7 @@ pk_backend_download_packages_thread (PkBackend *backend)
 			pk_backend_error_code (backend,
 					       PK_ERROR_ENUM_PACKAGE_DOWNLOAD_FAILED,
 					       "failed to get filename for %s: %s",
-					       zif_package_get_id (package),
+					       zif_package_get_printable (package),
 					       error->message);
 			g_error_free (error);
 			goto out;
@@ -3004,7 +2995,7 @@ pk_backend_get_update_detail_thread (PkBackend *backend)
 			pk_backend_error_code (backend,
 					       PK_ERROR_ENUM_PACKAGE_NOT_FOUND,
 					       "failed to find package %s: %s",
-					       zif_package_get_id (package),
+					       zif_package_get_printable (package),
 					       error->message);
 			g_error_free (error);
 			goto out;
@@ -3283,7 +3274,7 @@ pk_backend_run_transaction (PkBackend *backend, ZifState *state)
 				pk_backend_error_code (backend,
 						       PK_ERROR_ENUM_NOT_AUTHORIZED,
 						       "package %s is untrusted",
-						       zif_package_get_id (package));
+						       zif_package_get_printable (package));
 				g_error_free (error);
 				goto out;
 			}
@@ -3388,7 +3379,7 @@ pk_backend_remove_packages_thread (PkBackend *backend)
 			pk_backend_error_code (backend,
 					       PK_ERROR_ENUM_PACKAGE_NOT_FOUND,
 					       "failed to add package %s: %s",
-					       zif_package_get_id (package),
+					       zif_package_get_printable (package),
 					       error->message);
 			g_error_free (error);
 			goto out;
@@ -3525,7 +3516,7 @@ pk_backend_update_packages_thread (PkBackend *backend)
 			pk_backend_error_code (backend,
 					       PK_ERROR_ENUM_PACKAGE_NOT_FOUND,
 					       "failed to add package %s: %s",
-					       zif_package_get_id (package),
+					       zif_package_get_printable (package),
 					       error->message);
 			g_error_free (error);
 			goto out;
@@ -3662,7 +3653,7 @@ pk_backend_install_packages_thread (PkBackend *backend)
 			pk_backend_error_code (backend,
 					       PK_ERROR_ENUM_PACKAGE_NOT_FOUND,
 					       "failed to add package %s: %s",
-					       zif_package_get_id (package),
+					       zif_package_get_printable (package),
 					       error->message);
 			g_error_free (error);
 			goto out;
@@ -3797,7 +3788,7 @@ pk_backend_install_files_thread (PkBackend *backend)
 			pk_backend_error_code (backend,
 					       PK_ERROR_ENUM_PACKAGE_NOT_FOUND,
 					       "failed to add package %s: %s",
-					       zif_package_get_id (package),
+					       zif_package_get_printable (package),
 					       error->message);
 			g_error_free (error);
 			goto out;
commit 2cb08f0c9aa3127a11b8985049f813ea01e4745b
Author: Richard Hughes <richard at hughsie.com>
Date:   Mon Nov 29 11:35:43 2010 +0000

    zif: Add a new backend, which uses Zif to interface with the rpmdb and the Fedora metadata
    
    This new backend should be considered experimental, and should not be used
    in production environments. It is often an order of magnitude quicker then
    the 'yum' backend as there is no need to spawn a process in python and
    certainly no need to check the metadata on every access.
    
    There will be bugs, so please test carefully. More information is at
    https://github.com/hughsie/zif/raw/master/README.PackageKit for how
    to switch to the new backend from yum.

diff --git a/backends/.gitignore b/backends/.gitignore
index 9c5d2d0..8b13789 100644
--- a/backends/.gitignore
+++ b/backends/.gitignore
@@ -1,2 +1 @@
-zif
 
diff --git a/backends/Makefile.am b/backends/Makefile.am
index 37d7059..3d53950 100644
--- a/backends/Makefile.am
+++ b/backends/Makefile.am
@@ -64,6 +64,10 @@ if BACKEND_TYPE_ZYPP
 SUBDIRS += zypp
 endif
 
+if BACKEND_TYPE_ZIF
+SUBDIRS += zif
+endif
+
 if BACKEND_TYPE_POLDEK
 SUBDIRS += poldek
 endif
diff --git a/backends/yum/Makefile.am b/backends/yum/Makefile.am
index aae70f7..21883b6 100644
--- a/backends/yum/Makefile.am
+++ b/backends/yum/Makefile.am
@@ -10,7 +10,6 @@ INCLUDES = \
 	-DI_KNOW_THE_PACKAGEKIT_GLIB2_API_IS_SUBJECT_TO_CHANGE	\
 	-DG_LOG_DOMAIN=\"PackageKit-Yum\"			\
 	-DPK_COMPILATION					\
-	$(ZIF_CFLAGS)						\
 	-DSYSCONFDIR=\""$(sysconfdir)"\"
 
 plugindir = $(PK_PLUGIN_DIR)
@@ -20,10 +19,6 @@ libpk_backend_yum_la_LIBADD = $(PK_PLUGIN_LIBS)
 libpk_backend_yum_la_LDFLAGS = -module -avoid-version
 libpk_backend_yum_la_CFLAGS = $(PK_PLUGIN_CFLAGS) $(WARNINGFLAGS_C)
 
-libpk_backend_yum_la_LIBADD +=					\
-	$(ZIF_LIBS)						\
-	$(NULL)
-
 confdir = $(PK_CONF_DIR)
 conf_DATA = Yum.conf
 
diff --git a/backends/yum/Yum.conf b/backends/yum/Yum.conf
index 258979e..9281631 100644
--- a/backends/yum/Yum.conf
+++ b/backends/yum/Yum.conf
@@ -36,20 +36,3 @@ SystemPackages=yum;rpm;glibc;PackageKit
 #
 # default=PackageKit;yum;rpm;gnome-packagekit;kpackagekit;selinux-policy
 InfrastructurePackages=PackageKit;yum;rpm;gnome-packagekit;kpackagekit
-
-# Yum is slow, and we can use Zif to accelerate some simple transactions
-#
-# Yum is written in python, and we have to execute a new process and
-# communicate with it. This is much slower than just acessing the repo files
-# and rpmdb in a thread. Zif is a pretty new project, and is not well tested
-# at this time. It is however up to an order of magnitude faster in some
-# benchmark tests.
-#
-# Zif probably still has bugs. This key provides a way for the admin
-# to still use the awesomeness of Zif for some operations, but not others.
-#
-# For a nice speed boost, try:
-# UseZif=get-repo-list;repo-enable;resolve;search-file;search-name;search-details;search-group;get-categories;get-details;get-distro-upgrades
-#
-# default=repo-list;repo-enable
-UseZif=get-repo-list;repo-enable
diff --git a/backends/yum/pk-backend-yum.c b/backends/yum/pk-backend-yum.c
index 3d87b33..2abfa32 100644
--- a/backends/yum/pk-backend-yum.c
+++ b/backends/yum/pk-backend-yum.c
@@ -26,10 +26,6 @@
 #include <string.h>
 #include <packagekit-glib2/pk-debug.h>
 
-#ifdef HAVE_ZIF
-#include <zif.h>
-#endif
-
 #define PREUPGRADE_BINARY			"/usr/bin/preupgrade"
 #define YUM_REPOS_DIRECTORY			"/etc/yum.repos.d"
 #define YUM_BACKEND_LOCKING_RETRIES		10
@@ -40,18 +36,8 @@ typedef struct {
 	PkBackendSpawn	*spawn;
 	GFileMonitor	*monitor;
 	GCancellable	*cancellable;
-	PkBitfield	 use_zif;
 	guint		 signal_finished;
 	guint		 signal_status;
-#ifdef HAVE_ZIF
-	ZifConfig	*config;
-	ZifStore	*store_local;
-	ZifRepos	*repos;
-	ZifGroups	*groups;
-	ZifState	*state;
-	ZifLock		*lock;
-	ZifRelease	*release;
-#endif
 	GTimer		*timer;
 	GVolumeMonitor	*volume_monitor;
 } PkBackendYumPrivate;
@@ -64,7 +50,7 @@ static PkBackendYumPrivate *priv;
 gchar *
 pk_backend_get_description (PkBackend *backend)
 {
-	return g_strdup ("YUM (and optionally ZIF)");
+	return g_strdup ("YUM");
 }
 
 /**
@@ -121,926 +107,12 @@ out:
 	g_free (filename);
 }
 
-#ifdef HAVE_ZIF
-
-static void
-pk_backend_state_percentage_changed_cb (ZifState *state, guint percentage, PkBackend *backend)
-{
-	pk_backend_set_percentage (backend, percentage);
-}
-
-static void
-pk_backend_state_subpercentage_changed_cb (ZifState *state, guint subpercentage, PkBackend *backend)
-{
-	pk_backend_set_sub_percentage (backend, subpercentage);
-}
-
-/**
- * pk_backend_profile:
- */
-static void
-pk_backend_profile (const gchar *title)
-{
-	gdouble elapsed;
-
-	/* just reset?  */
-	if (title == NULL)
-		goto out;
-	elapsed = g_timer_elapsed (priv->timer, NULL);
-	g_debug ("PROFILE: %ims\t%s", (guint) (elapsed * 1000.0f), title);
-out:
-	g_timer_reset (priv->timer);
-}
-
-/**
- * pk_backend_is_all_installed:
- */
-static gboolean
-pk_backend_is_all_installed (gchar **package_ids)
-{
-	guint i;
-	gboolean ret = TRUE;
-
-	/* check if we can use zif */
-	for (i=0; package_ids[i] != NULL; i++) {
-		if (!g_str_has_suffix (package_ids[i], ";installed")) {
-			ret = FALSE;
-			break;
-		}
-	}
-	return ret;
-}
-#endif
-
-/**
- * pk_backend_transaction_start:
- */
-void
-pk_backend_transaction_start (PkBackend *backend)
-{
-#ifdef HAVE_ZIF
-	gboolean ret = FALSE;
-	GError *error = NULL;
-	const gchar *root;
-	guint i;
-	guint pid;
-	guint cache_age;
-	gchar *http_proxy = NULL;
-
-	/* quit the spawned backend rather than waiting for it to time out */
-	pk_backend_spawn_exit (priv->spawn);
-
-	/* only try a finite number of times */
-	for (i=0; i<YUM_BACKEND_LOCKING_RETRIES; i++) {
-
-		/* try to lock */
-		ret = zif_lock_set_locked (priv->lock, &pid, &error);
-		if (ret)
-			break;
-
-		/* we're now waiting */
-		pk_backend_set_status (backend, PK_STATUS_ENUM_WAITING_FOR_LOCK);
-
-		/* now wait */
-		g_debug ("Failed to lock on try %i of %i, already locked by PID %i (sleeping for %i seconds): %s\n",
-			   i+1, YUM_BACKEND_LOCKING_RETRIES, pid, YUM_BACKEND_LOCKING_DELAY, error->message);
-		g_clear_error (&error);
-		g_usleep (YUM_BACKEND_LOCKING_DELAY * G_USEC_PER_SEC);
-	}
-
-	/* we failed to lock */
-	if (!ret) {
-		pk_backend_error_code (backend, PK_ERROR_ENUM_CANNOT_GET_LOCK, "failed to get lock, held by PID: %i", pid);
-		goto out;
-	}
-
-	/* this backend does not support a relocatable root... yet */
-	root = pk_backend_get_root (backend);
-	if (g_strcmp0 (root, "/") != 0) {
-		pk_backend_error_code (backend, PK_ERROR_ENUM_INSTALL_ROOT_INVALID, "backend does not support this root: '%s'", root);
-		goto out;
-	}
-
-	/* try to set, or re-set install root */
-	ret = zif_store_local_set_prefix (ZIF_STORE_LOCAL (priv->store_local), root, &error);
-	if (!ret) {
-		pk_backend_error_code (backend, PK_ERROR_ENUM_INTERNAL_ERROR, "failed to set prefix: %s", error->message);
-		g_error_free (error);
-		goto out;
-	}
-
-	/* get network state */
-	ret = pk_backend_is_online (backend);
-	if (!ret) {
-		zif_config_set_boolean (priv->config, "network", FALSE, NULL);
-		goto out;
-	}
-
-	/* tell ZifConfig it's okay to contact the network */
-	zif_config_set_boolean (priv->config, "network", TRUE, NULL);
-
-	/* set cache age */
-	cache_age = pk_backend_get_cache_age (backend);
-	if (cache_age > 0)
-		zif_config_set_uint (priv->config, "max-age", cache_age, NULL);
-
-	/* set the proxy */
-	http_proxy = pk_backend_get_proxy_http (backend);
-	zif_config_set_string (priv->config, "http_proxy", http_proxy, NULL);
-
-	/* setup state */
-	zif_state_reset (priv->state);
-out:
-	g_free (http_proxy);
-#endif
-	return;
-}
-
-/**
- * pk_backend_transaction_stop:
- */
-void
-pk_backend_transaction_stop (PkBackend *backend)
-{
-#ifdef HAVE_ZIF
-	gboolean ret;
-	GError *error = NULL;
-
-	/* try to unlock */
-	ret = zif_lock_set_unlocked (priv->lock, &error);
-	if (!ret) {
-		g_warning ("failed to unlock: %s", error->message);
-		g_error_free (error);
-		goto out;
-	}
-out:
-#endif
-	return;
-}
-
-#ifdef HAVE_ZIF
-/**
- * pk_backend_filter_package_array_newest:
- *
- * This function needs to scale well, and be fast to process 50,000 packages in
- * less than one second. If it looks overcomplicated, it's because it needs to
- * be O(n) not O(n*n).
- **/
-static gboolean
-pk_backend_filter_package_array_newest (GPtrArray *array)
-{
-	gchar **split;
-	const gchar *package_id;
-	gboolean installed;
-	gchar *key;
-	GHashTable *hash;
-	gint retval;
-	guint i;
-	ZifPackage *found;
-	ZifPackage *package;
-
-	/* as an indexed hash table for speed */
-	hash = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref);
-
-	for (i=0; i<array->len; i++) {
-
-		/* get the current package */
-		package = g_ptr_array_index (array, i);
-		package_id = zif_package_get_id (package);
-		installed = zif_package_is_installed (package);
-
-		/* generate enough data to be specific */
-		split = pk_package_id_split (package_id);
-		key = g_strdup_printf ("%s-%s-%i", split[PK_PACKAGE_ID_NAME], split[PK_PACKAGE_ID_ARCH], installed);
-		g_strfreev (split);
-
-		/* we've not already come across this package */
-		found = g_hash_table_lookup (hash, key);
-		if (found == NULL) {
-			g_hash_table_insert (hash, key, g_object_ref (package));
-			continue;
-		}
-
-		/* compare one package vs the other package */
-		retval = zif_package_compare (package, found);
-
-		/* the package is older than the one we have stored */
-		if (retval <= 0) {
-			g_free (key);
-			g_ptr_array_remove (array, package);
-			continue;
-		}
-
-		/* the package is newer than what we have stored, delete the old store, and add this one */
-		g_hash_table_remove (hash, found);
-		g_hash_table_insert (hash, key, g_object_ref (package));
-	}
-
-	g_hash_table_unref (hash);
-	return TRUE;
-}
-
-/**
- * pk_backend_filter_package_array:
- **/
-static GPtrArray *
-pk_backend_filter_package_array (GPtrArray *array, PkBitfield filters)
-{
-	guint i;
-	ZifPackage *package;
-	GPtrArray *result = NULL;
-
-	result = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
-
-	/* pre-result */
-	for (i=0;i<array->len;i++) {
-		package = g_ptr_array_index (array, i);
-
-		/* installed */
-		if (pk_bitfield_contain (filters, PK_FILTER_ENUM_INSTALLED)) {
-			if (!zif_package_is_installed (package))
-				continue;
-		} else if (pk_bitfield_contain (filters, PK_FILTER_ENUM_NOT_INSTALLED)) {
-			if (zif_package_is_installed (package))
-				continue;
-		}
-
-		/* development */
-		if (pk_bitfield_contain (filters, PK_FILTER_ENUM_DEVELOPMENT)) {
-			if (!zif_package_is_devel (package))
-				continue;
-		} else if (pk_bitfield_contain (filters, PK_FILTER_ENUM_NOT_DEVELOPMENT)) {
-			if (zif_package_is_devel (package))
-				continue;
-		}
-
-		/* gui */
-		if (pk_bitfield_contain (filters, PK_FILTER_ENUM_GUI)) {
-			if (!zif_package_is_gui (package))
-				continue;
-		} else if (pk_bitfield_contain (filters, PK_FILTER_ENUM_NOT_GUI)) {
-			if (zif_package_is_gui (package))
-				continue;
-		}
-
-		/* free */
-		if (pk_bitfield_contain (filters, PK_FILTER_ENUM_FREE)) {
-			if (!zif_package_is_free (package))
-				continue;
-		} else if (pk_bitfield_contain (filters, PK_FILTER_ENUM_NOT_FREE)) {
-			if (zif_package_is_free (package))
-				continue;
-		}
-
-		/* arch */
-		if (pk_bitfield_contain (filters, PK_FILTER_ENUM_ARCH)) {
-			if (!zif_package_is_native (package))
-				continue;
-		} else if (pk_bitfield_contain (filters, PK_FILTER_ENUM_NOT_ARCH)) {
-			if (zif_package_is_native (package))
-				continue;
-		}
-
-		/* add to array so we can post process */
-		g_ptr_array_add (result, g_object_ref (package));
-	}
-
-	/* do newest filtering */
-	if (pk_bitfield_contain (filters, PK_FILTER_ENUM_NEWEST))
-		pk_backend_filter_package_array_newest (result);
-
-	return result;
-}
-
-/**
- * pk_backend_emit_package_array:
- **/
-static gboolean
-pk_backend_emit_package_array (PkBackend *backend, GPtrArray *array, ZifState *state)
-{
-	guint i;
-	gboolean installed;
-	PkInfoEnum info;
-	const gchar *info_hint;
-	const gchar *package_id;
-	const gchar *summary;
-	ZifPackage *package;
-
-	g_return_val_if_fail (array != NULL, FALSE);
-
-	for (i=0; i<array->len; i++) {
-		package = g_ptr_array_index (array, i);
-		installed = zif_package_is_installed (package);
-		package_id = zif_package_get_package_id (package);
-
-		/* FIXME: should be okay as shouldn't be doing any action */
-		zif_state_reset (state);
-		summary = zif_package_get_summary (package, state, NULL);
-
-		/* if we set a hint, use that, otherwise just get the installed status correct */
-		info_hint = (const gchar *)g_object_get_data (G_OBJECT(package), "kind");
-		if (info_hint == NULL) {
-			info = installed ? PK_INFO_ENUM_INSTALLED : PK_INFO_ENUM_AVAILABLE;
-		} else {
-			info = pk_info_enum_from_string (info_hint);
-		}
-
-		pk_backend_package (backend, info, package_id, summary);
-	}
-	return TRUE;
-}
-
-/**
- * pk_backend_error_handler_cb:
- */
-static gboolean
-pk_backend_error_handler_cb (const GError *error, PkBackend *backend)
-{
-	/* if we try to do a comps search on a local store */
-	if (error->domain == ZIF_STORE_ERROR &&
-	    error->code == ZIF_STORE_ERROR_NO_SUPPORT) {
-		g_debug ("ignoring operation on PkStoreLocal: %s", error->message);
-		return TRUE;
-	}
-	/* emit a warning, this isn't fatal */
-	pk_backend_message (backend, PK_MESSAGE_ENUM_BROKEN_MIRROR, "%s", error->message);
-	return TRUE;
-}
-
-/**
- * pk_backend_get_default_store_array_for_filter:
- */
-static GPtrArray *
-pk_backend_get_default_store_array_for_filter (PkBackend *backend, PkBitfield filters, ZifState *state, GError **error)
-{
-	GPtrArray *store_array;
-	ZifStore *store;
-	GPtrArray *array;
-	GError *error_local = NULL;
-
-	store_array = zif_store_array_new ();
-
-	/* add local packages to the store_array */
-	if (!pk_bitfield_contain (filters, PK_FILTER_ENUM_NOT_INSTALLED)) {
-		store = zif_store_local_new ();
-		zif_store_array_add_store (store_array, store);
-		g_object_unref (store);
-	}
-
-	/* add remote packages to the store_array */
-	if (!pk_bitfield_contain (filters, PK_FILTER_ENUM_INSTALLED)) {
-		array = zif_repos_get_stores_enabled (priv->repos, state, &error_local);
-		if (array == NULL) {
-			g_set_error (error, 1, 0, "failed to get enabled stores: %s", error_local->message);
-			g_error_free (error_local);
-			g_ptr_array_unref (store_array);
-			store_array = NULL;
-			goto out;
-		}
-		zif_store_array_add_stores (store_array, array);
-		g_ptr_array_unref (array);
-	}
-out:
-	return store_array;
-}
-
-/**
- * pk_backend_search_newest:
- */
-static GPtrArray *
-pk_backend_search_newest (GPtrArray *store_array, ZifState *state, guint recent, GError **error)
-{
-	GPtrArray *array = NULL;
-	GPtrArray *array_tmp;
-	GTimeVal timeval_now;
-	guint diff_secs = recent * 24 * 60 * 60;
-	guint i;
-	ZifPackage *package;
-
-	/* get all the packages */
-	array_tmp = zif_store_array_get_packages (store_array, state, error);
-	if (array_tmp == NULL)
-		goto out;
-
-	/* only add elements to the array that are new enough */
-	g_get_current_time (&timeval_now);
-	array = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
-	for (i=0; i<array_tmp->len; i++) {
-		package = g_ptr_array_index (array_tmp, i);
-		if (timeval_now.tv_sec - zif_package_get_time_file (package) < diff_secs)
-			g_ptr_array_add (array, g_object_ref (package));
-	}
-	g_debug ("added %i newest packages", array->len);
-out:
-	if (array_tmp != NULL)
-		g_ptr_array_unref (array_tmp);
-	return array;
-}
-
-/**
- * pk_backend_create_meta_package_for_category:
- */
-static ZifPackage *
-pk_backend_create_meta_package_for_category (GPtrArray *store_array, ZifCategory *cat, ZifState *state, GError **error)
-{
-	ZifPackage *package = NULL;
-	ZifPackage *package_tmp;
-	GPtrArray *array_packages;
-	gchar *package_id = NULL;
-	gboolean ret;
-	ZifString *string;
-	guint j;
-	const gchar *to_array[] = { NULL, NULL };
-	PkInfoEnum info = PK_INFO_ENUM_COLLECTION_INSTALLED;
-
-	/* are all the packages in this group installed? */
-	to_array[0] = zif_category_get_id (cat);
-	array_packages = zif_store_array_search_category (store_array, (gchar**)to_array, state, error);
-	if (array_packages == NULL)
-		goto out;
-
-	/* if any are not installed, then this is not installed */
-	for (j=0; j<array_packages->len; j++) {
-		package_tmp = g_ptr_array_index (array_packages, j);
-		if (!zif_package_is_installed (package_tmp)) {
-			info = PK_INFO_ENUM_COLLECTION_AVAILABLE;
-			g_debug ("%s is not installed, so marking as not installed %s collection",
-				 zif_package_get_id (package_tmp),
-				 zif_category_get_id (cat));
-			break;
-		}
-	}
-
-	/* fake something */
-	package_id = g_strdup_printf ("%s;;;meta",
-				      zif_category_get_id (cat));
-	package = zif_package_new ();
-	ret = zif_package_set_id (package, package_id, NULL);
-	if (!ret) {
-		g_object_unref (package);
-		package = NULL;
-		goto out;
-	}
-
-	/* set summary */
-	string = zif_string_new (zif_category_get_name (cat));
-	zif_package_set_summary (package, string);
-	zif_string_unref (string);
-
-	/* map to simple binary installed value */
-	zif_package_set_installed (package, (info == PK_INFO_ENUM_COLLECTION_INSTALLED));
-
-	/* add to results */
-	/* TODO: make a proper property */
-	g_object_set_data (G_OBJECT(package), "kind", (gpointer)pk_info_enum_to_string (info));
-out:
-	if (array_packages != NULL)
-		g_ptr_array_unref (array_packages);
-	g_free (package_id);
-	return package;
-}
-
-/**
- * pk_backend_search_collections:
- */
-static GPtrArray *
-pk_backend_search_collections (GPtrArray *store_array, ZifState *state, GError **error)
-{
-	gboolean ret;
-	gchar *package_id;
-	GPtrArray *array = NULL;
-	GPtrArray *array_tmp;
-	GError *error_local = NULL;
-	ZifCategory *cat;
-	guint i;
-	ZifPackage *package;
-	ZifState *state_local;
-	ZifState *state_loop;
-
-	/* set steps */
-	zif_state_set_number_steps (state, 2);
-
-	/* get sorted list of unique categories */
-	state_local = zif_state_get_child (state);
-	array_tmp = zif_store_array_get_categories (store_array, state_local, error);
-	if (array_tmp == NULL)
-		goto out;
-
-	/* done */
-	ret = zif_state_done (state, error);
-	if (!ret)
-		goto out;
-
-	/* set steps */
-	state_local = zif_state_get_child (state);
-	zif_state_set_number_steps (state_local, array_tmp->len);
-
-	/* generate fake packages */
-	array = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
-	for (i=0; i<array_tmp->len; i++) {
-		cat = g_ptr_array_index (array_tmp, i);
-
-		/* ignore top level categories */
-		if (zif_category_get_parent_id (cat) == NULL)
-			continue;
-
-		/* fake something here */
-		state_loop = zif_state_get_child (state_local);
-		package = pk_backend_create_meta_package_for_category (store_array, cat, state_loop, &error_local);
-		if (package != NULL) {
-			g_ptr_array_add (array, g_object_ref (package));
-		} else {
-			g_warning ("failed to add id %s: %s", package_id, error_local->message);
-			g_clear_error (&error_local);
-		}
-
-		/* done */
-		ret = zif_state_done (state_local, error);
-		if (!ret)
-			goto out;
-
-		g_object_unref (package);
-	}
-
-	/* done */
-	ret = zif_state_done (state, error);
-	if (!ret)
-		goto out;
-out:
-	if (array_tmp != NULL)
-		g_ptr_array_unref (array_tmp);
-	return array;
-}
-
-/**
- * pk_backend_get_cat_for_id:
- */
-static ZifCategory *
-pk_backend_get_cat_for_id (GPtrArray *store_array, const gchar *id, ZifState *state, GError **error)
-{
-	GPtrArray *array = NULL;
-	ZifCategory *cat = NULL;
-	ZifCategory *cat_tmp;
-	guint i;
-
-	/* get all cats */
-	array = zif_store_array_get_categories (store_array, state, error);
-	if (array == NULL)
-		goto out;
-
-	/* find one that matches */
-	for (i=0; i<array->len; i++) {
-		cat_tmp = g_ptr_array_index (array, i);
-		if (g_strcmp0 (zif_category_get_id (cat_tmp), id) == 0) {
-			cat = g_object_ref (cat_tmp);
-			break;
-		}
-	}
-
-	/* nothing found, so set error */
-	if (cat == NULL)
-		g_set_error (error, 1, 0, "no category %s found", id);
-out:
-	if (array != NULL)
-		g_ptr_array_unref (array);
-	return cat;
-}
-
-/**
- * pk_backend_resolve_groups:
- */
-static GPtrArray *
-pk_backend_resolve_groups (GPtrArray *store_array, gchar **search, ZifState *state, GError **error)
-{
-	gboolean ret;
-	GError *error_local = NULL;
-	GPtrArray *array = NULL;
-	GPtrArray *array_retval = NULL;
-	guint i;
-	ZifCategory *cat;
-	ZifPackage *package;
-	ZifState *state_local;
-	ZifState *state_loop;
-
-	/* set steps */
-	zif_state_set_number_steps (state, g_strv_length (search));
-
-	/* resolve all the groups */
-	array = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
-	for (i=0; search[i] != NULL; i++) {
-		state_local = zif_state_get_child (state);
-
-		/* set steps */
-		zif_state_set_number_steps (state_local, 2);
-
-		/* get the category */
-		state_loop = zif_state_get_child (state_local);
-		cat = pk_backend_get_cat_for_id (store_array, search[i]+1, state_loop, &error_local);
-		if (cat == NULL) {
-			g_debug ("group %s not found: %s", search[i], error_local->message);
-			g_clear_error (&error_local);
-
-			/* this part done */
-			ret = zif_state_finished (state_loop, error);
-			if (!ret)
-				goto out;
-			ret = zif_state_done (state_local, error);
-			if (!ret)
-				goto out;
-		} else {
-			ret = zif_state_done (state_local, error);
-			if (!ret)
-				goto out;
-
-			/* fake something here */
-			state_loop = zif_state_get_child (state_local);
-			package = pk_backend_create_meta_package_for_category (store_array, cat, state_loop, &error_local);
-			if (package != NULL) {
-				g_ptr_array_add (array, package);
-			} else {
-				g_warning ("failed to add id %s: %s",
-					   zif_category_get_id (cat),
-					   error_local->message);
-				g_clear_error (&error_local);
-				ret = zif_state_finished (state_loop, error);
-			}
-		}
-
-		/* this part done */
-		ret = zif_state_done (state_local, error);
-		if (!ret)
-			goto out;
-		ret = zif_state_done (state, error);
-		if (!ret)
-			goto out;
-	}
-
-	/* success */
-	array_retval = g_ptr_array_ref (array);
-out:
-	if (array != NULL)
-		g_ptr_array_unref (array);
-	return array_retval;
-}
-
-/**
- * pk_backend_what_provides_helper:
- */
-static GPtrArray *
-pk_backend_what_provides_helper (GPtrArray *store_array, gchar **search, ZifState *state, GError **error)
-{
-	gboolean ret;
-	GPtrArray *array = NULL;
-	GPtrArray *array_retval = NULL;
-	GPtrArray *array_tmp;
-	guint i, j;
-	ZifDepend *depend;
-	ZifPackage *package;
-	ZifState *state_local;
-
-	/* set steps */
-	zif_state_set_number_steps (state, g_strv_length (search));
-
-	/* resolve all the groups */
-	array = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
-	for (i=0; search[i] != NULL; i++) {
-		state_local = zif_state_get_child (state);
-
-		/* parse this depend */
-		depend = zif_depend_new ();
-		ret = zif_depend_parse_description (depend, search[i], error);
-		if (!ret)
-			goto out;
-
-		/* find what provides this depend */
-		array_tmp = zif_store_array_what_provides (store_array, depend, state_local, error);
-		g_object_unref (depend);
-		if (array_tmp == NULL)
-			goto out;
-
-		/* add each result */
-		for (j=0; j<array_tmp->len; j++) {
-			package = g_ptr_array_index (array_tmp, i);
-			g_ptr_array_add (array, g_object_ref (package));
-		}
-		g_ptr_array_unref (array_tmp);
-
-		/* set steps */
-		zif_state_set_number_steps (state_local, 2);
-
-		/* this part done */
-		ret = zif_state_done (state, error);
-		if (!ret)
-			goto out;
-	}
-
-	/* success */
-	array_retval = g_ptr_array_ref (array);
-out:
-	if (array != NULL)
-		g_ptr_array_unref (array);
-	return array_retval;
-}
-#endif
-
-/**
- * pk_backend_search_thread:
- */
-static gboolean
-pk_backend_search_thread (PkBackend *backend)
-{
-#ifdef HAVE_ZIF
-	gboolean ret;
-	GPtrArray *store_array = NULL;
-	GPtrArray *array = NULL;
-	GPtrArray *result;
-	PkBitfield filters;
-	PkRoleEnum role;
-	ZifState *state_local;
-	GError *error = NULL;
-	gchar **search;
-	guint recent;
-	guint i;
-
-	filters = (PkBitfield) pk_backend_get_uint (backend, "filters");
-	role = pk_backend_get_role (backend);
-
-	pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
-	pk_backend_set_percentage (backend, 0);
-
-	zif_state_set_number_steps (priv->state, 4);
-
-	/* get default store_array */
-	state_local = zif_state_get_child (priv->state);
-	store_array = pk_backend_get_default_store_array_for_filter (backend, filters, state_local, &error);
-	if (store_array == NULL) {
-		pk_backend_error_code (backend, PK_ERROR_ENUM_INTERNAL_ERROR, "failed to get stores: %s", error->message);
-		g_error_free (error);
-		goto out;
-	}
-
-	/* this section done */
-	ret = zif_state_done (priv->state, &error);
-	if (!ret) {
-		pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_CANCELLED, "cancelled: %s", error->message);
-		g_error_free (error);
-		goto out;
-	}
-	zif_state_set_error_handler (priv->state, (ZifStateErrorHandlerCb) pk_backend_error_handler_cb, backend);
-
-	/* do get action */
-	if (role == PK_ROLE_ENUM_GET_PACKAGES) {
-		state_local = zif_state_get_child (priv->state);
-		array = zif_store_array_get_packages (store_array, state_local, &error);
-		if (array == NULL) {
-			pk_backend_error_code (backend, PK_ERROR_ENUM_INTERNAL_ERROR, "failed to get packages: %s", error->message);
-			g_error_free (error);
-			goto out;
-		}
-	} else {
-		/* treat these all the same */
-		search = pk_backend_get_strv (backend, "search");
-		if (search == NULL) {
-			pk_backend_error_code (backend, PK_ERROR_ENUM_INTERNAL_ERROR,
-					       "failed to get 'search' for %s", pk_role_enum_to_string (role));
-			goto out;
-		}
-		array = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
-
-		/* do OR search */
-		state_local = zif_state_get_child (priv->state);
-		if (role == PK_ROLE_ENUM_SEARCH_NAME) {
-			array = zif_store_array_search_name (store_array, search, state_local, &error);
-		} else if (role == PK_ROLE_ENUM_SEARCH_DETAILS) {
-			array = zif_store_array_search_details (store_array, search, state_local, &error);
-		} else if (role == PK_ROLE_ENUM_SEARCH_GROUP) {
-			gchar **search_stripped;
-			guint search_entries;
-
-			/* if the search temp is prefixed with '@' then it is a
-			 * category search, and we have to strip it */
-			if (search[0][0] == '@') {
-				search_entries = g_strv_length (search);
-				search_stripped = g_new0 (gchar *, search_entries + 1);
-				for (i=0; i < search_entries; i++)
-					search_stripped[i] = g_strdup (&search[i][1]);
-				array = zif_store_array_search_category (store_array, search_stripped, state_local, &error);
-				g_strfreev (search_stripped);
-			} else if (g_strcmp0 (search[0], "newest") == 0) {
-				recent = zif_config_get_uint (priv->config, "recent", &error);
-				array = pk_backend_search_newest (store_array, state_local, recent, &error);
-				if (array == NULL) {
-					pk_backend_error_code (backend, PK_ERROR_ENUM_INTERNAL_ERROR, "failed to get packages: %s", error->message);
-					g_error_free (error);
-					goto out;
-				}
-			} else if (g_strcmp0 (search[0], "collections") == 0) {
-				array = pk_backend_search_collections (store_array, state_local, &error);
-				if (array == NULL) {
-					pk_backend_error_code (backend, PK_ERROR_ENUM_INTERNAL_ERROR, "failed to get packages: %s", error->message);
-					g_error_free (error);
-					goto out;
-				}
-			} else {
-				array = zif_store_array_search_group (store_array, search, state_local, &error);
-			}
-		} else if (role == PK_ROLE_ENUM_SEARCH_FILE) {
-			array = zif_store_array_search_file (store_array, search, state_local, &error);
-		} else if (role == PK_ROLE_ENUM_RESOLVE) {
-			if (search[0][0] == '@') {
-				/* this is a group */
-				array = pk_backend_resolve_groups (store_array, search, state_local, &error);
-			} else {
-				array = zif_store_array_resolve (store_array, search, state_local, &error);
-			}
-		} else if (role == PK_ROLE_ENUM_WHAT_PROVIDES) {
-			array = pk_backend_what_provides_helper (store_array, search, state_local, &error);
-		}
-		if (array == NULL) {
-			pk_backend_error_code (backend, PK_ERROR_ENUM_INTERNAL_ERROR, "failed to search: %s", error->message);
-			g_error_free (error);
-			goto out;
-		}
-	}
-
-	/* this section done */
-	ret = zif_state_done (priv->state, &error);
-	if (!ret) {
-		pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_CANCELLED, "cancelled: %s", error->message);
-		g_error_free (error);
-		goto out;
-	}
-
-	/* filter */
-	result = pk_backend_filter_package_array (array, filters);
-
-	/* this section done */
-	ret = zif_state_done (priv->state, &error);
-	if (!ret) {
-		pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_CANCELLED, "cancelled: %s", error->message);
-		g_error_free (error);
-		goto out;
-	}
-
-	/* done */
-	pk_backend_set_percentage (backend, 100);
-
-	/* emit */
-	state_local = zif_state_get_child (priv->state);
-	pk_backend_emit_package_array (backend, result, state_local);
-
-	/* this section done */
-	ret = zif_state_done (priv->state, &error);
-	if (!ret) {
-		pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_CANCELLED, "cancelled: %s", error->message);
-		g_error_free (error);
-		goto out;
-	}
-out:
-	if (store_array != NULL)
-		g_ptr_array_unref (store_array);
-	if (array != NULL)
-		g_ptr_array_unref (array);
-	pk_backend_finished (backend);
-#endif
-	return TRUE;
-}
-
 /**
  * pk_backend_enable_media_repo:
  */
 static void
 pk_backend_enable_media_repo (gboolean enabled)
 {
-#ifdef HAVE_ZIF
-	ZifStoreRemote *repo = NULL;
-	gboolean ret;
-	GError *error = NULL;
-	ZifState *state;
-
-	/* find the right repo */
-	state = zif_state_new ();
-	zif_state_set_cancellable (state, zif_state_get_cancellable (priv->state));
-	repo = zif_repos_get_store (priv->repos, "InstallMedia", state, &error);
-	if (repo == NULL) {
-		g_debug ("failed to find install-media repo: %s", error->message);
-		g_error_free (error);
-		goto out;
-	}
-
-	/* set the state */
-	ret = zif_store_remote_set_enabled (repo, enabled, &error);
-	if (!ret) {
-		g_debug ("failed to set enable: %s", error->message);
-		g_error_free (error);
-		goto out;
-	}
-	g_debug ("%s InstallMedia", enabled ? "enabled" : "disabled");
-out:
-	g_object_unref (state);
-	if (repo != NULL)
-		g_object_unref (repo);
-#else
 	GKeyFile *keyfile;
 	gboolean ret;
 	gchar *data = NULL;
@@ -1078,7 +150,6 @@ out:
 out:
 	g_free (data);
 	g_key_file_free (keyfile);
-#endif
 }
 
 /**
@@ -1145,49 +216,6 @@ pk_backend_status_changed_cb (PkBackend *backend, PkStatusEnum status, gpointer
 	pk_backend_enable_media_repo (TRUE);
 }
 
-#ifdef HAVE_ZIF
-/**
- * pk_backend_state_action_changed_cb:
- **/
-static void
-pk_backend_state_action_changed_cb (ZifState *state, ZifStateAction action, const gchar *action_hint, PkBackend *backend)
-{
-	PkStatusEnum status = PK_STATUS_ENUM_UNKNOWN;
-
-	/* ignore this */
-	if (action == ZIF_STATE_ACTION_UNKNOWN)
-		goto out;
-
-	/* try to map the ZifStateAction to a PkStatusEnum */
-	if (action == ZIF_STATE_ACTION_DOWNLOADING) {
-		if (g_strrstr (action_hint, "repomd") != NULL)
-			status = PK_STATUS_ENUM_DOWNLOAD_REPOSITORY;
-		else if (g_strrstr (action_hint, "primary") != NULL)
-			status = PK_STATUS_ENUM_DOWNLOAD_PACKAGELIST;
-		else if (g_strrstr (action_hint, "filelist") != NULL)
-			status = PK_STATUS_ENUM_DOWNLOAD_FILELIST;
-		else if (g_strrstr (action_hint, "changelog") != NULL)
-			status = PK_STATUS_ENUM_DOWNLOAD_CHANGELOG;
-		else if (g_strrstr (action_hint, "comps") != NULL)
-			status = PK_STATUS_ENUM_DOWNLOAD_GROUP;
-		else if (g_strrstr (action_hint, "updatinfo") != NULL)
-			status = PK_STATUS_ENUM_DOWNLOAD_UPDATEINFO;
-		goto out;
-	}
-
-	/* general cache loading */
-	if (action == ZIF_STATE_ACTION_CHECKING ||
-	    action == ZIF_STATE_ACTION_LOADING_REPOS ||
-	    action == ZIF_STATE_ACTION_DECOMPRESSING) {
-		status = PK_STATUS_ENUM_LOADING_CACHE;
-		goto out;
-	}
-out:
-	if (status != PK_STATUS_ENUM_UNKNOWN)
-		pk_backend_set_status (backend, status);
-}
-#endif
-
 /**
  * pk_backend_initialize:
  * This should only be run once per backend load, i.e. not every transaction
@@ -1201,11 +229,10 @@ pk_backend_initialize (PkBackend *backend)
 	GKeyFile *key_file = NULL;
 	gchar *config_file = NULL;
 	GList *mounts;
-	gchar *use_zif = NULL;
 
 	/* use logging */
 	pk_debug_add_log_domain (G_LOG_DOMAIN);
-	pk_debug_add_log_domain ("Zif");
+	pk_debug_add_log_domain ("Yum");
 
 	/* create private area */
 	priv = g_new0 (PkBackendYumPrivate, 1);
@@ -1252,91 +279,7 @@ pk_backend_initialize (PkBackend *backend)
 		g_error_free (error);
 		goto out;
 	}
-
-	#ifdef HAVE_ZIF
-	/* it seems some people are not ready for the awesomeness */
-	use_zif = g_key_file_get_string (key_file, "Backend", "UseZif", NULL);
-	if (use_zif != NULL) {
-		priv->use_zif = pk_role_bitfield_from_string (use_zif);
-		if (priv->use_zif == 0)
-			g_warning ("failed to parse UseZif '%s'", use_zif);
-	}
-	g_debug ("UseZif=%s (%i)", use_zif, (gint)priv->use_zif);
-
-	/* use a timer for profiling */
-	priv->timer = g_timer_new ();
-
-	/* init rpm */
-	zif_init ();
-
-	/* profile */
-	pk_backend_profile ("zif init");
-
-	/* TODO: hook up errors */
-	priv->cancellable = g_cancellable_new ();
-
-	/* ZifState */
-	priv->state = zif_state_new ();
-	g_signal_connect (priv->state, "percentage-changed", G_CALLBACK (pk_backend_state_percentage_changed_cb), backend);
-	g_signal_connect (priv->state, "subpercentage-changed", G_CALLBACK (pk_backend_state_subpercentage_changed_cb), backend);
-	g_signal_connect (priv->state, "action-changed", G_CALLBACK (pk_backend_state_action_changed_cb), backend);
-
-	/* ZifConfig */
-	priv->config = zif_config_new ();
-	ret = zif_config_set_filename (priv->config, "/etc/yum.conf", &error);
-	if (!ret) {
-		pk_backend_error_code (backend, PK_ERROR_ENUM_FAILED_CONFIG_PARSING, "failed to set config: %s", error->message);
-		g_error_free (error);
-		goto out;
-	}
-
-	/* profile */
-	pk_backend_profile ("read config_file");
-
-	/* ZifLock */
-	priv->lock = zif_lock_new ();
-
-	/* ZifRelease */
-	priv->release = zif_release_new ();
-	zif_release_set_boot_dir (priv->release, "/boot/upgrade");
-	zif_release_set_cache_dir (priv->release, "/var/cache/PackageKit");
-	zif_release_set_repo_dir (priv->release, "/var/cache/yum/preupgrade");
-	zif_release_set_uri (priv->release, "http://mirrors.fedoraproject.org/releases.txt");
-
-	/* ZifStoreLocal */
-	priv->store_local = zif_store_local_new ();
-
-	/* profile */
-	pk_backend_profile ("read local store");
-
-	/* ZifRepos */
-	priv->repos = zif_repos_new ();
-	ret = zif_repos_set_repos_dir (priv->repos, "/etc/yum.repos.d", &error);
-	if (!ret) {
-		pk_backend_error_code (backend, PK_ERROR_ENUM_REPO_CONFIGURATION_ERROR, "failed to set repos dir: %s", error->message);
-		g_error_free (error);
-		goto out;
-	}
-
-	/* profile */
-	pk_backend_profile ("read repos");
-
-	/* ZifGroups */
-	priv->groups = zif_groups_new ();
-	ret = zif_groups_set_mapping_file (priv->groups, "/usr/share/PackageKit/helpers/yum/yum-comps-groups.conf", &error);
-	if (!ret) {
-		pk_backend_error_code (backend, PK_ERROR_ENUM_GROUP_LIST_INVALID, "failed to set mapping file: %s", error->message);
-		g_error_free (error);
-		goto out;
-	}
-
-	/* profile */
-	pk_backend_profile ("read groups");
-#else
-	priv->use_zif = FALSE;
-#endif
 out:
-	g_free (use_zif);
 	g_free (config_file);
 	if (key_file != NULL)
 		g_key_file_free (key_file);
@@ -1357,24 +300,6 @@ pk_backend_destroy (PkBackend *backend)
 		g_object_unref (priv->monitor);
 	g_signal_handler_disconnect (backend, priv->signal_finished);
 	g_signal_handler_disconnect (backend, priv->signal_status);
-#ifdef HAVE_ZIF
-	if (priv->config != NULL)
-		g_object_unref (priv->config);
-	if (priv->release != NULL)
-		g_object_unref (priv->release);
-	if (priv->state != NULL)
-		g_object_unref (priv->state);
-	if (priv->repos != NULL)
-		g_object_unref (priv->repos);
-	if (priv->groups != NULL)
-		g_object_unref (priv->groups);
-	if (priv->store_local != NULL)
-		g_object_unref (priv->store_local);
-	if (priv->lock != NULL)
-		g_object_unref (priv->lock);
-	if (priv->timer != NULL)
-		g_timer_destroy (priv->timer);
-#endif
 	if (priv->volume_monitor != NULL)
 		g_object_unref (priv->volume_monitor);
 	g_free (priv);
@@ -1386,17 +311,7 @@ pk_backend_destroy (PkBackend *backend)
 PkBitfield
 pk_backend_get_groups (PkBackend *backend)
 {
-#ifdef HAVE_ZIF
-	GError *error = NULL;
-	GPtrArray *array = NULL;
-	guint i;
-	const gchar *group_str;
-#endif
-	PkBitfield groups = 0;
-
-	/* it seems some people are not ready for the awesomeness */
-	if (!pk_bitfield_contain (priv->use_zif, PK_ROLE_ENUM_GET_CATEGORIES)) {
-		groups = pk_bitfield_from_enums (
+	return pk_bitfield_from_enums (
 			PK_GROUP_ENUM_COLLECTIONS,
 			PK_GROUP_ENUM_NEWEST,
 			PK_GROUP_ENUM_ADMIN_TOOLS,
@@ -1420,30 +335,6 @@ pk_backend_get_groups (PkBackend *backend)
 			PK_GROUP_ENUM_SYSTEM,
 			PK_GROUP_ENUM_VIRTUALIZATION,
 			-1);
-		goto out;
-	}
-
-#ifdef HAVE_ZIF
-	/* get the dynamic group list */
-	array = zif_groups_get_groups (priv->groups, &error);
-	if (array == NULL) {
-		pk_backend_error_code (backend, PK_ERROR_ENUM_GROUP_LIST_INVALID, "failed to get the list of groups: %s", error->message);
-		g_error_free (error);
-		goto out;
-	}
-
-	/* convert to a bitfield */
-	for (i=0; i<array->len; i++) {
-		group_str = g_ptr_array_index (array, i);
-		pk_bitfield_add (groups, pk_group_enum_from_string (group_str));
-	}
-#endif
-
-	/* add the virtual groups */
-	pk_bitfield_add (groups, PK_GROUP_ENUM_COLLECTIONS);
-	pk_bitfield_add (groups, PK_GROUP_ENUM_NEWEST);
-out:
-	return groups;
 }
 
 /**
@@ -1502,14 +393,9 @@ pk_backend_get_roles (PkBackend *backend)
 		PK_ROLE_ENUM_SIMULATE_REMOVE_PACKAGES,
 		-1);
 
-#ifdef HAVE_ZIF
-	pk_bitfield_add (roles, PK_ROLE_ENUM_GET_DISTRO_UPGRADES);
-	pk_bitfield_add (roles, PK_ROLE_ENUM_UPGRADE_SYSTEM);
-#else
 	/* only add GetDistroUpgrades if the binary is present */
 	if (g_file_test (PREUPGRADE_BINARY, G_FILE_TEST_EXISTS))
 		pk_bitfield_add (roles, PK_ROLE_ENUM_GET_DISTRO_UPGRADES);
-#endif
 
 	return roles;
 }
@@ -1529,329 +415,22 @@ pk_backend_get_mime_types (PkBackend *backend)
 void
 pk_backend_cancel (PkBackend *backend)
 {
-#ifdef HAVE_ZIF
-	/* try to cancel the thread first */
-	g_cancellable_cancel (priv->cancellable);
-#endif
 	/* this feels bad... */
 	pk_backend_spawn_kill (priv->spawn);
 }
 
 /**
- * pk_backend_download_packages_thread:
- */
-static gboolean
-pk_backend_download_packages_thread (PkBackend *backend)
-{
-#ifdef HAVE_ZIF
-	gchar **package_ids = pk_backend_get_strv (backend, "package_ids");
-	const gchar *directory = pk_backend_get_string (backend, "directory");
-	GPtrArray *store_array = NULL;
-	ZifPackage *package;
-	ZifState *state_local;
-	GPtrArray *packages = NULL;
-	const gchar *id;
-	guint i;
-	guint len;
-	gboolean ret;
-	GError *error = NULL;
-	const gchar *filename;
-	gchar *basename;
-	gchar *path;
-
-	len = g_strv_length (package_ids);
-	zif_state_set_number_steps (priv->state, (len * 4) + 1);
-
-	/* find all the packages */
-	packages = g_ptr_array_new ();
-	state_local = zif_state_get_child (priv->state);
-	store_array = pk_backend_get_default_store_array_for_filter (backend, pk_bitfield_value (PK_FILTER_ENUM_NOT_INSTALLED), state_local, &error);
-	if (store_array == NULL) {
-		pk_backend_error_code (backend, PK_ERROR_ENUM_INTERNAL_ERROR, "failed to get stores: %s", error->message);
-		g_error_free (error);
-		goto out;
-	}
-
-	/* this section done */
-	ret = zif_state_done (priv->state, &error);
-	if (!ret) {
-		pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_CANCELLED, "cancelled: %s", error->message);
-		g_error_free (error);
-		goto out;
-	}
-
-	pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
-	for (i=0; package_ids[i] != NULL; i++) {
-		id = package_ids[i];
-		state_local = zif_state_get_child (priv->state);
-		package = zif_store_array_find_package (store_array, id, state_local, &error);
-		if (package == NULL) {
-			pk_backend_error_code (backend, PK_ERROR_ENUM_PACKAGE_NOT_FOUND, "failed to find %s: %s", package_ids[i], error->message);
-			g_error_free (error);
-			goto out;
-		}
-
-		/* this section done */
-		ret = zif_state_done (priv->state, &error);
-		if (!ret) {
-			pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_CANCELLED, "cancelled: %s", error->message);
-			g_error_free (error);
-			goto out;
-		}
-
-		g_ptr_array_add (packages, g_object_ref (package));
-		g_object_unref (package);
-	}
-
-	/* this section done */
-	ret = zif_state_done (priv->state, &error);
-	if (!ret) {
-		pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_CANCELLED, "cancelled: %s", error->message);
-		g_error_free (error);
-		goto out;
-	}
-
-	/* download list */
-	pk_backend_set_status (backend, PK_STATUS_ENUM_DOWNLOAD);
-	for (i=0; i<packages->len; i++) {
-		package = g_ptr_array_index (packages, i);
-
-		/* get filename */
-		state_local = zif_state_get_child (priv->state);
-		filename = zif_package_get_filename (package, state_local, &error);
-		if (filename == NULL) {
-			pk_backend_error_code (backend, PK_ERROR_ENUM_PACKAGE_DOWNLOAD_FAILED,
-					       "failed to get filename for %s: %s", zif_package_get_id (package), error->message);
-			g_error_free (error);
-			goto out;
-		}
-
-		/* this section done */
-		ret = zif_state_done (priv->state, &error);
-		if (!ret) {
-			pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_CANCELLED, "cancelled: %s", error->message);
-			g_error_free (error);
-			goto out;
-		}
-
-		/* download */
-		state_local = zif_state_get_child (priv->state);
-		ret = zif_package_remote_download (ZIF_PACKAGE_REMOTE (package), directory, state_local, &error);
-		if (!ret) {
-			pk_backend_error_code (backend, PK_ERROR_ENUM_PACKAGE_DOWNLOAD_FAILED,
-					       "failed to download %s: %s", filename, error->message);
-			g_error_free (error);
-			goto out;
-		}
-
-		/* send a signal for the daemon so the file is copied */
-		basename = g_path_get_basename (filename);
-		path = g_build_filename (directory, basename, NULL);
-		pk_backend_files (backend, zif_package_get_id (package), path);
-		g_free (basename);
-		g_free (path);
-
-		/* this section done */
-		ret = zif_state_done (priv->state, &error);
-		if (!ret) {
-			pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_CANCELLED, "cancelled: %s", error->message);
-			g_error_free (error);
-			goto out;
-		}
-	}
-out:
-	pk_backend_finished (backend);
-	if (packages != NULL)
-		g_ptr_array_unref (packages);
-	if (store_array != NULL)
-		g_ptr_array_unref (store_array);
-#endif
-	return TRUE;
-}
-
-/**
  * pk_backend_download_packages:
  */
 void
 pk_backend_download_packages (PkBackend *backend, gchar **package_ids, const gchar *directory)
 {
-	/* it seems some people are not ready for the awesomeness */
-	if (!pk_bitfield_contain (priv->use_zif, pk_backend_get_role (backend))) {
-		gchar *package_ids_temp;
-
-		/* send the complete list as stdin */
-		package_ids_temp = pk_package_ids_to_string (package_ids);
-		pk_backend_spawn_helper (priv->spawn, "yumBackend.py", "download-packages", directory, package_ids_temp, NULL);
-		g_free (package_ids_temp);
-		return;
-	}
-	pk_backend_thread_create (backend, pk_backend_download_packages_thread);
-}
-
-/**
- * pk_backend_get_depends_thread:
- */
-static gboolean
-pk_backend_get_depends_thread (PkBackend *backend)
-{
-#ifdef HAVE_ZIF
-	gboolean ret;
-	gchar **package_ids = pk_backend_get_strv (backend, "package_ids");
-	PkBitfield filters = (PkBitfield) pk_backend_get_uint (backend, "filters");
-	GPtrArray *store_array = NULL;
-	ZifPackage *package;
-	ZifPackage *package_provide;
-	ZifState *state_local;
-	ZifState *state_loop;
-	ZifState *state_loop_inner;
-	ZifDepend *require;
-	const gchar *id;
-	guint i, j, k;
-	guint len;
-	GError *error = NULL;
-	GPtrArray *array = NULL;
-	GPtrArray *result;
-	GPtrArray *requires;
-	GPtrArray *provides;
-
-	len = g_strv_length (package_ids);
-
-	zif_state_set_number_steps (priv->state, len + 3);
-
-	/* find all the packages */
-	state_local = zif_state_get_child (priv->state);
-	store_array = pk_backend_get_default_store_array_for_filter (backend, 0, state_local, &error);
-	if (store_array == NULL) {
-		pk_backend_error_code (backend, PK_ERROR_ENUM_INTERNAL_ERROR, "failed to get stores: %s", error->message);
-		g_error_free (error);
-		goto out;
-	}
-
-	/* this section done */
-	ret = zif_state_done (priv->state, &error);
-	if (!ret) {
-		pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_CANCELLED, "cancelled: %s", error->message);
-		g_error_free (error);
-		goto out;
-	}
-
-	/* new output array */
-	array = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
-
-	pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
-	for (i=0; package_ids[i] != NULL; i++) {
-		id = package_ids[i];
-
-		/* set up state */
-		state_local = zif_state_get_child (priv->state);
-		zif_state_set_number_steps (state_local, 2);
-
-		/* find package */
-		state_loop = zif_state_get_child (state_local);
-		package = zif_store_array_find_package (store_array, id, state_loop, &error);
-		if (package == NULL) {
-			pk_backend_error_code (backend, PK_ERROR_ENUM_PACKAGE_NOT_FOUND, "failed to find %s: %s", package_ids[i], error->message);
-			g_error_free (error);
-			goto out;
-		}
-
-		/* this section done */
-		ret = zif_state_done (state_local, &error);
-		if (!ret) {
-			pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_CANCELLED, "cancelled: %s", error->message);
-			g_error_free (error);
-			goto out;
-		}
-
-		/* get requires */
-		state_loop = zif_state_get_child (state_local);
-		requires = zif_package_get_requires (package, state_loop, &error);
-		if (requires == NULL) {
-			pk_backend_error_code (backend, PK_ERROR_ENUM_PACKAGE_NOT_FOUND,
-					       "failed to get requires for %s: %s",
-					       package_ids[i], error->message);
-			g_error_free (error);
-			goto out;
-		}
-
-		/* this section done */
-		ret = zif_state_done (state_local, &error);
-		if (!ret) {
-			pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_CANCELLED, "cancelled: %s", error->message);
-			g_error_free (error);
-			goto out;
-		}
-
-		/* match a package to each require */
-		state_loop = zif_state_get_child (state_local);
-		zif_state_set_number_steps (state_loop, requires->len);
-		for (k=0; k<requires->len; k++) {
-
-			/* setup deeper state */
-			state_loop_inner = zif_state_get_child (state_loop);
-
-			require = g_ptr_array_index (requires, k);
-
-			/* find the package providing the depend */
-			provides = zif_store_array_what_provides (store_array, require, state_loop_inner, &error);
-			if (provides == NULL) {
-				pk_backend_error_code (backend, PK_ERROR_ENUM_PACKAGE_NOT_FOUND,
-						       "failed to find provide for %s: %s",
-						       zif_depend_get_name (require), error->message);
-				g_error_free (error);
-				goto out;
-			}
-
-			/* print all of them */
-			for (j=0;j<provides->len;j++) {
-				package_provide = g_ptr_array_index (provides, j);
-				g_ptr_array_add (array, g_object_ref (package_provide));
-			}
-			g_ptr_array_unref (provides);
-
-			/* this section done */
-			ret = zif_state_done (state_loop, &error);
-			if (!ret)
-				goto out;
-		}
-
-		/* free */
-		g_object_unref (package);
-	}
-
-	/* filter */
-	result = pk_backend_filter_package_array (array, filters);
-
-	/* this section done */
-	ret = zif_state_done (priv->state, &error);
-	if (!ret) {
-		pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_CANCELLED, "cancelled: %s", error->message);
-		g_error_free (error);
-		goto out;
-	}
-
-	/* done */
-	pk_backend_set_percentage (backend, 100);
-
-	/* emit */
-	state_local = zif_state_get_child (priv->state);
-	pk_backend_emit_package_array (backend, result, state_local);
+	gchar *package_ids_temp;
 
-	/* this section done */
-	ret = zif_state_done (priv->state, &error);
-	if (!ret) {
-		pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_CANCELLED, "cancelled: %s", error->message);
-		g_error_free (error);
-		goto out;
-	}
-out:
-	if (array != NULL)
-		g_ptr_array_unref (array);
-	pk_backend_finished (backend);
-	if (store_array != NULL)
-		g_ptr_array_unref (store_array);
-#endif
-	return TRUE;
+	/* send the complete list as stdin */
+	package_ids_temp = pk_package_ids_to_string (package_ids);
+	pk_backend_spawn_helper (priv->spawn, "yumBackend.py", "download-packages", directory, package_ids_temp, NULL);
+	g_free (package_ids_temp);
 }
 
 /**
@@ -1860,186 +439,13 @@ out:
 void
 pk_backend_get_depends (PkBackend *backend, PkBitfield filters, gchar **package_ids, gboolean recursive)
 {
-	/* it seems some people are not ready for the awesomeness */
-	if (!pk_bitfield_contain (priv->use_zif, pk_backend_get_role (backend))) {
-		gchar *filters_text;
-		gchar *package_ids_temp;
-		package_ids_temp = pk_package_ids_to_string (package_ids);
-		filters_text = pk_filter_bitfield_to_string (filters);
-		pk_backend_spawn_helper (priv->spawn, "yumBackend.py", "get-depends", filters_text, package_ids_temp, pk_backend_bool_to_string (recursive), NULL);
-		g_free (filters_text);
-		g_free (package_ids_temp);
-		return;
-	}
-	pk_backend_thread_create (backend, pk_backend_get_depends_thread);
-}
-
-/**
- * pk_backend_get_details_thread:
- */
-static gboolean
-pk_backend_get_details_thread (PkBackend *backend)
-{
-#ifdef HAVE_ZIF
-	gboolean ret;
-	gchar **package_ids = pk_backend_get_strv (backend, "package_ids");
-	GPtrArray *store_array = NULL;
-	ZifPackage *package;
-	ZifState *state_local;
-	ZifState *state_loop;
-	const gchar *id;
-	guint i;
-	guint len;
-	GError *error = NULL;
-	const gchar *license;
-	const gchar *description;
-	const gchar *url;
-	const gchar *group_str;
-	PkGroupEnum group;
-	guint64 size;
-	PkBitfield filters = PK_FILTER_ENUM_UNKNOWN;
-
-	len = g_strv_length (package_ids);
-
-	zif_state_set_number_steps (priv->state, len + 1);
-
-	/* find all the packages */
-	state_local = zif_state_get_child (priv->state);
-	if (pk_backend_is_all_installed (package_ids))
-		pk_bitfield_add (filters, PK_FILTER_ENUM_INSTALLED);
-	store_array = pk_backend_get_default_store_array_for_filter (backend, filters, state_local, &error);
-	if (store_array == NULL) {
-		pk_backend_error_code (backend, PK_ERROR_ENUM_INTERNAL_ERROR, "failed to get stores: %s", error->message);
-		g_error_free (error);
-		goto out;
-	}
-
-	/* this section done */
-	ret = zif_state_done (priv->state, &error);
-	if (!ret) {
-		pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_CANCELLED, "cancelled: %s", error->message);
-		g_error_free (error);
-		goto out;
-	}
-
-	pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
-	for (i=0; package_ids[i] != NULL; i++) {
-		id = package_ids[i];
-
-		/* set up state */
-		state_local = zif_state_get_child (priv->state);
-		zif_state_set_number_steps (state_local, 6);
-
-		/* find package */
-		state_loop = zif_state_get_child (state_local);
-		package = zif_store_array_find_package (store_array, id, state_loop, &error);
-		if (package == NULL) {
-			pk_backend_error_code (backend, PK_ERROR_ENUM_PACKAGE_NOT_FOUND, "failed to find %s: %s", package_ids[i], error->message);
-			g_error_free (error);
-			goto out;
-		}
-
-		/* this section done */
-		ret = zif_state_done (state_local, &error);
-		if (!ret) {
-			pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_CANCELLED, "cancelled: %s", error->message);
-			g_error_free (error);
-			goto out;
-		}
-
-		/* get license */
-		state_loop = zif_state_get_child (state_local);
-		license = zif_package_get_license (package, state_loop, NULL);
-
-		/* this section done */
-		ret = zif_state_done (state_local, &error);
-		if (!ret) {
-			pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_CANCELLED, "cancelled: %s", error->message);
-			g_error_free (error);
-			goto out;
-		}
-
-		/* get group */
-		state_loop = zif_state_get_child (state_local);
-		group_str = zif_package_get_group (package, state_loop, &error);
-
-		/* not being in a group is non-fatal */
-		if (group_str == NULL) {
-			g_warning ("failed to get group: %s", error->message);
-			g_clear_error (&error);
-		}
-		group = pk_group_enum_from_text (group_str);
-
-		/* this section done */
-		ret = zif_state_done (state_local, &error);
-		if (!ret) {
-			pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_CANCELLED, "cancelled: %s", error->message);
-			g_error_free (error);
-			goto out;
-		}
-
-		/* get description */
-		state_loop = zif_state_get_child (state_local);
-		description = zif_package_get_description (package, state_loop, NULL);
-
-		/* this section done */
-		ret = zif_state_done (state_local, &error);
-		if (!ret) {
-			pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_CANCELLED, "cancelled: %s", error->message);
-			g_error_free (error);
-			goto out;
-		}
-
-		/* get url */
-		state_loop = zif_state_get_child (state_local);
-		url = zif_package_get_url (package, state_loop, NULL);
-
-		/* this section done */
-		ret = zif_state_done (state_local, &error);
-		if (!ret) {
-			pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_CANCELLED, "cancelled: %s", error->message);
-			g_error_free (error);
-			goto out;
-		}
-
-		/* get size */
-		state_loop = zif_state_get_child (state_local);
-		size = zif_package_get_size (package, state_loop, NULL);
-
-		/* this section done */
-		ret = zif_state_done (state_local, &error);
-		if (!ret) {
-			pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_CANCELLED, "cancelled: %s", error->message);
-			g_error_free (error);
-			goto out;
-		}
-
-		/* emit */
-		pk_backend_details (backend,
-				    package_ids[i],
-				    license,
-				    group,
-				    description,
-				    url,
-				    (gulong) size);
-
-		/* this section done */
-		ret = zif_state_done (priv->state, &error);
-		if (!ret) {
-			pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_CANCELLED, "cancelled: %s", error->message);
-			g_error_free (error);
-			goto out;
-		}
-
-		/* free */
-		g_object_unref (package);
-	}
-out:
-	pk_backend_finished (backend);
-	if (store_array != NULL)
-		g_ptr_array_unref (store_array);
-#endif
-	return TRUE;
+	gchar *filters_text;
+	gchar *package_ids_temp;
+	package_ids_temp = pk_package_ids_to_string (package_ids);
+	filters_text = pk_filter_bitfield_to_string (filters);
+	pk_backend_spawn_helper (priv->spawn, "yumBackend.py", "get-depends", filters_text, package_ids_temp, pk_backend_bool_to_string (recursive), NULL);
+	g_free (filters_text);
+	g_free (package_ids_temp);
 }
 
 /**
@@ -2048,70 +454,10 @@ out:
 void
 pk_backend_get_details (PkBackend *backend, gchar **package_ids)
 {
-	/* check if we can use zif */
-	if (!pk_bitfield_contain (priv->use_zif, pk_backend_get_role (backend))) {
-		gchar *package_ids_temp;
-		package_ids_temp = pk_package_ids_to_string (package_ids);
-		pk_backend_spawn_helper (priv->spawn, "yumBackend.py", "get-details", package_ids_temp, NULL);
-		g_free (package_ids_temp);
-		return;
-	}
-	pk_backend_thread_create (backend, pk_backend_get_details_thread);
-}
-
-/**
-  * pk_backend_get_distro_upgrades_thread:
-  */
-static gboolean
-pk_backend_get_distro_upgrades_thread (PkBackend *backend)
-{
-#ifdef HAVE_ZIF
-	gchar *distro_id;
-	GError *error = NULL;
-	GPtrArray *array = NULL;
-	guint i;
-	guint version;
-	ZifUpgrade *upgrade;
-
-	/* one shot */
-	zif_state_reset (priv->state);
-
-	/* get the current version */
-	version = zif_config_get_uint (priv->config, "releasever", NULL);
-	if (version == G_MAXUINT) {
-		pk_backend_error_code (backend, PK_ERROR_ENUM_FAILED_CONFIG_PARSING,
-				       "could not get distro present version");
-		goto out;
-	}
-
-	/* get the upgrades */
-	array = zif_release_get_upgrades_new (priv->release, version, priv->state, &error);
-	if (array == NULL) {
-		pk_backend_error_code (backend, PK_ERROR_ENUM_FAILED_CONFIG_PARSING,
-				       "could not get latest distro data : %s", error->message);
-		g_error_free (error);
-		goto out;
-	}
-
-	/* emit the results */
-	for (i=0; i<array->len; i++) {
-		upgrade = g_ptr_array_index (array, i);
-		if (!zif_upgrade_get_enabled (upgrade))
-			continue;
-		distro_id = g_strdup_printf ("fedora-%i", zif_upgrade_get_version (upgrade));
-		pk_backend_distro_upgrade (backend,
-					   zif_upgrade_get_stable (upgrade) ? PK_DISTRO_UPGRADE_ENUM_STABLE :
-									      PK_DISTRO_UPGRADE_ENUM_UNSTABLE,
-					   distro_id,
-					   zif_upgrade_get_id (upgrade));
-		g_free (distro_id);
-	}
-out:
-	pk_backend_finished (backend);
-	if (array != NULL)
-		g_ptr_array_unref (array);
-#endif
-	return TRUE;
+	gchar *package_ids_temp;
+	package_ids_temp = pk_package_ids_to_string (package_ids);
+	pk_backend_spawn_helper (priv->spawn, "yumBackend.py", "get-details", package_ids_temp, NULL);
+	g_free (package_ids_temp);
 }
 
 /**
@@ -2120,126 +466,7 @@ out:
 void
 pk_backend_get_distro_upgrades (PkBackend *backend)
 {
-	/* it seems some people are not ready for the awesomeness */
-	if (!pk_bitfield_contain (priv->use_zif, pk_backend_get_role (backend))) {
-		pk_backend_spawn_helper (priv->spawn, "yumBackend.py", "get-distro-upgrades", NULL);
-		return;
-	}
-
-	pk_backend_thread_create (backend, pk_backend_get_distro_upgrades_thread);
-}
-
-/**
- * pk_backend_get_files_thread:
- */
-static gboolean
-pk_backend_get_files_thread (PkBackend *backend)
-{
-#ifdef HAVE_ZIF
-	gboolean ret;
-	gchar **package_ids = pk_backend_get_strv (backend, "package_ids");
-	GPtrArray *store_array = NULL;
-	ZifPackage *package;
-	GPtrArray *files;
-	ZifState *state_local;
-	const gchar *id;
-	guint i, j;
-	guint len;
-	GError *error = NULL;
-	const gchar *file;
-	GString *files_str;
-	PkBitfield filters = PK_FILTER_ENUM_UNKNOWN;
-
-	/* reset */
-	pk_backend_profile (NULL);
-
-	len = g_strv_length (package_ids);
-
-	zif_state_set_number_steps (priv->state, (len * 2) + 1);
-
-	/* find all the packages */
-	state_local = zif_state_get_child (priv->state);
-	if (pk_backend_is_all_installed (package_ids))
-		pk_bitfield_add (filters, PK_FILTER_ENUM_INSTALLED);
-	store_array = pk_backend_get_default_store_array_for_filter (backend, filters, state_local, &error);
-	if (store_array == NULL) {
-		pk_backend_error_code (backend, PK_ERROR_ENUM_INTERNAL_ERROR, "failed to get stores: %s", error->message);
-		g_error_free (error);
-		goto out;
-	}
-
-	/* profile */
-	pk_backend_profile ("add local");
-
-	/* this section done */
-	ret = zif_state_done (priv->state, &error);
-	if (!ret) {
-		pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_CANCELLED, "cancelled: %s", error->message);
-		g_error_free (error);
-		goto out;
-	}
-
-	pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
-	for (i=0; package_ids[i] != NULL; i++) {
-		id = package_ids[i];
-		state_local = zif_state_get_child (priv->state);
-		package = zif_store_array_find_package (store_array, id, state_local, &error);
-		if (package == NULL) {
-			pk_backend_error_code (backend, PK_ERROR_ENUM_PACKAGE_NOT_FOUND, "failed to find %s: %s", package_ids[i], error->message);
-			g_error_free (error);
-			goto out;
-		}
-
-		/* profile */
-		pk_backend_profile ("find package");
-
-		/* this section done */
-		ret = zif_state_done (priv->state, &error);
-		if (!ret) {
-			pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_CANCELLED, "cancelled: %s", error->message);
-			g_error_free (error);
-			goto out;
-		}
-
-		/* get files */
-		state_local = zif_state_get_child (priv->state);
-		files = zif_package_get_files (package, state_local, &error);
-		if (files == NULL) {
-			pk_backend_error_code (backend, PK_ERROR_ENUM_INTERNAL_ERROR, "no files for %s: %s", package_ids[i], error->message);
-			g_error_free (error);
-			goto out;
-		}
-
-		/* profile */
-		pk_backend_profile ("get files");
-
-		files_str = g_string_new ("");
-		for (j=0; j<files->len; j++) {
-			file = g_ptr_array_index (files, j);
-			g_string_append_printf (files_str, "%s\n", file);
-		}
-		pk_backend_files (backend, package_ids[i], files_str->str);
-
-		/* profile */
-		pk_backend_profile ("emit files");
-
-		/* this section done */
-		ret = zif_state_done (priv->state, &error);
-		if (!ret) {
-			pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_CANCELLED, "cancelled: %s", error->message);
-			g_error_free (error);
-			goto out;
-		}
-
-		g_string_free (files_str, TRUE);
-		g_object_unref (package);
-	}
-out:
-	pk_backend_finished (backend);
-	if (store_array != NULL)
-		g_ptr_array_unref (store_array);
-#endif
-	return TRUE;
+	pk_backend_spawn_helper (priv->spawn, "yumBackend.py", "get-distro-upgrades", NULL);
 }
 
 /**
@@ -2249,15 +476,9 @@ void
 pk_backend_get_files (PkBackend *backend, gchar **package_ids)
 {
 	gchar *package_ids_temp;
-
-	/* it seems some people are not ready for the awesomeness */
-	if (!pk_bitfield_contain (priv->use_zif, pk_backend_get_role (backend))) {
-		package_ids_temp = pk_package_ids_to_string (package_ids);
-		pk_backend_spawn_helper (priv->spawn,  "yumBackend.py", "get-files", package_ids_temp, NULL);
-		g_free (package_ids_temp);
-		return;
-	}
-	pk_backend_thread_create (backend, pk_backend_get_files_thread);
+	package_ids_temp = pk_package_ids_to_string (package_ids);
+	pk_backend_spawn_helper (priv->spawn,  "yumBackend.py", "get-files", package_ids_temp, NULL);
+	g_free (package_ids_temp);
 }
 
 /**
@@ -2276,206 +497,15 @@ pk_backend_get_requires (PkBackend *backend, PkBitfield filters, gchar **package
 }
 
 /**
- * pk_backend_get_updates_thread:
- */
-static gboolean
-pk_backend_get_updates_thread (PkBackend *backend)
-{
-#ifdef HAVE_ZIF
-#if 0
-	PkBitfield filters = (PkBitfield) pk_backend_get_uint (backend, "filters");
-	GPtrArray *store_array = NULL;
-	ZifState *state_local;
-	ZifState *state_loop;
-	GPtrArray *array = NULL;
-	GPtrArray *result = NULL;
-	GPtrArray *packages = NULL;
-	gboolean ret;
-	GError *error = NULL;
-	ZifUpdate *update;
-	ZifPackage *package;
-	PkInfoEnum info;
-	ZifUpdateKind update_kind;
-	guint i;
-	pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
-
-	/* reset */
-	pk_backend_profile (NULL);
-
-	zif_state_set_number_steps (priv->state, 5);
-
-	/* get a store_array of remote stores */
-	store_array = zif_store_array_new ();
-	state_local = zif_state_get_child (priv->state);
-	ret = zif_store_array_add_remote_enabled (store_array, state_local, &error);
-	if (!ret) {
-		pk_backend_error_code (backend, PK_ERROR_ENUM_INTERNAL_ERROR, "failed to add enabled stores: %s\n", error->message);
-		g_error_free (error);
-		goto out;
-	}
-
-	/* this section done */
-	ret = zif_state_done (priv->state, &error);
-	if (!ret) {
-		pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_CANCELLED, "cancelled: %s", error->message);
-		g_error_free (error);
-		goto out;
-	}
-
-	/* profile */
-	pk_backend_profile ("get remote stores");
-
-	/* get all the installed packages */
-	state_local = zif_state_get_child (priv->state);
-	packages = zif_store_get_packages (priv->store_local, state_local, &error);
-	if (packages == NULL) {
-		g_print ("failed to get local store: %s", error->message);
-		g_error_free (error);
-		goto out;
-	}
-	g_debug ("searching for updates with %i packages", packages->len);
-
-	/* this section done */
-	ret = zif_state_done (priv->state, &error);
-	if (!ret) {
-		pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_CANCELLED, "cancelled: %s", error->message);
-		g_error_free (error);
-		goto out;
-	}
-
-	/* profile */
-	pk_backend_profile ("get installed packages");
-
-	/* remove any packages that are not newest (think kernel) */
-	zif_package_array_filter_newest (packages);
-
-	/* this section done */
-	ret = zif_state_done (priv->state, &error);
-	if (!ret) {
-		pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_CANCELLED, "cancelled: %s", error->message);
-		g_error_free (error);
-		goto out;
-	}
-
-	/* profile */
-	pk_backend_profile ("filter installed newest");
-
-	/* get updates */
-	state_local = zif_state_get_child (priv->state);
-	zif_state_set_error_handler (priv->state, (ZifStateErrorHandlerCb) pk_backend_error_handler_cb, backend);
-	array = zif_store_array_get_updates (store_array, packages, state_local, &error);
-	if (array == NULL) {
-		pk_backend_error_code (backend, PK_ERROR_ENUM_INTERNAL_ERROR, "failed to get updates: %s\n", error->message);
-		g_error_free (error);
-		goto out;
-	}
-
-	/* this section done */
-	ret = zif_state_done (priv->state, &error);
-	if (!ret) {
-		pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_CANCELLED, "cancelled: %s", error->message);
-		g_error_free (error);
-		goto out;
-	}
-
-	/* profile */
-	pk_backend_profile ("get updates of packages");
-
-	/* setup steps on updatinfo state */
-	state_local = zif_state_get_child (priv->state);
-	if (array->len > 0)
-		zif_state_set_number_steps (state_local, array->len);
-
-	/* get update info */
-	for (i=0; i<array->len; i++) {
-		package = g_ptr_array_index (array, i);
-		state_loop = zif_state_get_child (state_local);
-
-		/* updates without updatinfo */
-		info = PK_INFO_ENUM_NORMAL;
-
-		update = zif_package_remote_get_update_detail (ZIF_PACKAGE_REMOTE (package), state_loop, &error);
-		if (update == NULL) {
-			g_debug ("failed to get updateinfo for %s", zif_package_get_id (package));
-			g_clear_error (&error);
-			ret = zif_state_finished (state_loop, NULL);
-		} else {
-			update_kind = zif_update_get_kind (update);
-			if (update_kind == ZIF_UPDATE_KIND_BUGFIX)
-				info = PK_INFO_ENUM_BUGFIX;
-			else if (update_kind == ZIF_UPDATE_KIND_SECURITY)
-				info = PK_INFO_ENUM_SECURITY;
-			else if (update_kind == ZIF_UPDATE_KIND_ENHANCEMENT)
-				info = PK_INFO_ENUM_ENHANCEMENT;
-			g_object_unref (update);
-		}
-
-		/* set new severity */
-		g_object_set_data (G_OBJECT(package), "kind", (gpointer)pk_info_enum_to_string (info));
-
-		/* this section done */
-		ret = zif_state_done (state_local, &error);
-		if (!ret) {
-			pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_CANCELLED, "cancelled: %s", error->message);
-			g_error_free (error);
-			goto out;
-		}
-	}
-
-	/* this section done */
-	ret = zif_state_done (priv->state, &error);
-	if (!ret) {
-		pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_CANCELLED, "cancelled: %s", error->message);
-		g_error_free (error);
-		goto out;
-	}
-
-	/* profile */
-	pk_backend_profile ("get updateinfo");
-
-	/* filter */
-	result = pk_backend_filter_package_array (array, filters);
-
-	/* done */
-	pk_backend_set_percentage (backend, 100);
-
-	/* emit */
-	state_local = zif_state_get_child (priv->state);
-	pk_backend_emit_package_array (backend, result, state_local);
-
-	/* profile */
-	pk_backend_profile ("filter and emit");
-
-out:
-	pk_backend_finished (backend);
-	if (packages != NULL)
-		g_ptr_array_unref (packages);
-	if (array != NULL)
-		g_ptr_array_unref (array);
-	if (result != NULL)
-		g_ptr_array_unref (result);
-	if (store_array != NULL)
-		g_ptr_array_unref (store_array);
-#endif
-#endif
-	return TRUE;
-}
-
-/**
  * pk_backend_get_updates:
  */
 void
 pk_backend_get_updates (PkBackend *backend, PkBitfield filters)
 {
-	/* it seems some people are not ready for the awesomeness */
-	if (!pk_bitfield_contain (priv->use_zif, pk_backend_get_role (backend))) {
-		gchar *filters_text;
-		filters_text = pk_filter_bitfield_to_string (filters);
-		pk_backend_spawn_helper (priv->spawn,  "yumBackend.py", "get-updates", filters_text, NULL);
-		g_free (filters_text);
-		return;
-	}
-	pk_backend_thread_create (backend, pk_backend_get_updates_thread);
+	gchar *filters_text;
+	filters_text = pk_filter_bitfield_to_string (filters);
+	pk_backend_spawn_helper (priv->spawn,  "yumBackend.py", "get-updates", filters_text, NULL);
+	g_free (filters_text);
 }
 
 /**
@@ -2484,158 +514,10 @@ pk_backend_get_updates (PkBackend *backend, PkBitfield filters)
 void
 pk_backend_get_packages (PkBackend *backend, PkBitfield filters)
 {
-	/* it seems some people are not ready for the awesomeness */
-	if (!pk_bitfield_contain (priv->use_zif, pk_backend_get_role (backend))) {
-		gchar *filters_text;
-		filters_text = pk_filter_bitfield_to_string (filters);
-		pk_backend_spawn_helper (priv->spawn, "yumBackend.py", "get-packages", filters_text, NULL);
-		g_free (filters_text);
-		return;
-	}
-	pk_backend_thread_create (backend, pk_backend_search_thread);
-}
-
-#ifdef HAVE_ZIF
-/**
- * pk_backend_get_changelog_text:
- */
-static gchar *
-pk_backend_get_changelog_text (GPtrArray *changesets)
-{
-	guint i;
-	ZifChangeset *changeset;
-	GString *text;
-	gchar date_str[128];
-	GDate *date;
-
-	/* create output string */
-	text = g_string_new ("");
-	date = g_date_new ();
-
-	/* go through each one */
-	for (i=0; i<changesets->len; i++) {
-		changeset = g_ptr_array_index (changesets, i);
-
-		/* format the indervidual changeset */
-		g_date_set_time_t (date, zif_changeset_get_date (changeset));
-		g_date_strftime (date_str, 128, "%F", date);
-		g_string_append_printf (text, "**%s** %s - %s\n%s\n\n",
-					date_str,
-					zif_changeset_get_author (changeset),
-					zif_changeset_get_version (changeset),
-					zif_changeset_get_description (changeset));
-	}
-	g_date_free (date);
-	return g_string_free (text, FALSE);
-}
-#endif
-
-/**
- * pk_backend_get_update_detail_thread:
- */
-static gboolean
-pk_backend_get_update_detail_thread (PkBackend *backend)
-{
-#ifdef HAVE_ZIF
-	gchar **package_ids;
-	guint i;
-	guint j;
-	gboolean ret;
-	ZifUpdate *update;
-	ZifState *state_local;
-	ZifPackage *package;
-	GError *error = NULL;
-
-	/* reset */
-	pk_backend_profile (NULL);
-
-	/* get the data */
-	package_ids = pk_backend_get_strv (backend, "package_ids");
-	zif_state_set_number_steps (priv->state, g_strv_length (package_ids));
-
-	/* get the update info */
-	for (i=0; package_ids[i] != NULL; i++) {
-
-		package = zif_package_new ();
-		ret = zif_package_set_id (package, package_ids[i], &error);
-		if (!ret) {
-			pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_ERROR,
-					       "failed to set id: %s", error->message);
-			g_error_free (error);
-			goto out;
-		}
-
-		state_local = zif_state_get_child (priv->state);
-		update = zif_package_remote_get_update_detail (ZIF_PACKAGE_REMOTE (package), state_local, &error);
-		if (update == NULL) {
-			g_debug ("failed to get updateinfo for %s", zif_package_get_id (package));
-			g_clear_error (&error);
-		} else {
-			gchar *changelog_text = NULL;
-			GPtrArray *array;
-			GPtrArray *changesets;
-			GString *string_cve;
-			GString *string_bugzilla;
-			ZifUpdateInfo *info;
-			array = zif_update_get_update_infos (update);
-			string_cve = g_string_new (NULL);
-			string_bugzilla = g_string_new (NULL);
-			for (j=0; j<array->len; j++) {
-				info = g_ptr_array_index (array, j);
-				switch (zif_update_info_get_kind (info)) {
-				case ZIF_UPDATE_INFO_KIND_CVE:
-					g_string_append_printf (string_cve, "%s\t%s\t",
-								zif_update_info_get_title (info),
-								zif_update_info_get_url (info));
-					break;
-				case ZIF_UPDATE_INFO_KIND_BUGZILLA:
-					g_string_append_printf (string_bugzilla, "%s\t%s\t",
-								zif_update_info_get_title (info),
-								zif_update_info_get_url (info));
-					break;
-				default:
-					break;
-				}
-			}
-
-			/* format changelog */
-			changesets = zif_update_get_changelog (update);
-			if (changesets != NULL)
-				changelog_text = pk_backend_get_changelog_text (changesets);
-			pk_backend_update_detail (backend, package_ids[i],
-						  NULL, //updates,
-						  NULL, //obsoletes,
-						  NULL, //vendor_url,
-						  string_bugzilla->str,
-						  string_cve->str,
-						  PK_RESTART_ENUM_NONE,
-						  zif_update_get_description (update),
-						  changelog_text,
-						  zif_update_get_state (update),
-						  zif_update_get_issued (update),
-						  NULL);
-			if (changesets != NULL)
-				g_ptr_array_unref (changesets);
-			g_ptr_array_unref (array);
-			g_string_free (string_cve, TRUE);
-			g_string_free (string_bugzilla, TRUE);
-			g_free (changelog_text);
-		}
-
-		g_object_unref (package);
-
-		/* this section done */
-		ret = zif_state_done (priv->state, &error);
-		if (!ret) {
-			pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_CANCELLED, "cancelled: %s", error->message);
-			g_error_free (error);
-			goto out;
-		}
-	}
-out:
-	pk_backend_finished (backend);
-#endif
-	return TRUE;
+	gchar *filters_text;
+	filters_text = pk_filter_bitfield_to_string (filters);
+	pk_backend_spawn_helper (priv->spawn, "yumBackend.py", "get-packages", filters_text, NULL);
+	g_free (filters_text);
 }
 
 /**
@@ -2644,17 +526,13 @@ out:
 void
 pk_backend_get_update_detail (PkBackend *backend, gchar **package_ids)
 {
-	/* it seems some people are not ready for the awesomeness */
-	if (!pk_bitfield_contain (priv->use_zif, pk_backend_get_role (backend))) {
-		gchar *package_ids_temp;
-		package_ids_temp = pk_package_ids_to_string (package_ids);
-		pk_backend_spawn_helper (priv->spawn, "yumBackend.py", "get-update-detail", package_ids_temp, NULL);
-		g_free (package_ids_temp);
-		return;
-	}
-	pk_backend_thread_create (backend, pk_backend_get_update_detail_thread);
+	gchar *package_ids_temp;
+	package_ids_temp = pk_package_ids_to_string (package_ids);
+	pk_backend_spawn_helper (priv->spawn, "yumBackend.py", "get-update-detail", package_ids_temp, NULL);
+	g_free (package_ids_temp);
 }
 
+
 /**
  * pk_backend_install_packages:
  */
@@ -2662,8 +540,6 @@ void
 pk_backend_install_packages (PkBackend *backend, gboolean only_trusted, gchar **package_ids)
 {
 	gchar *package_ids_temp;
-
-	/* send the complete list as stdin */
 	package_ids_temp = pk_package_ids_to_string (package_ids);
 	pk_backend_spawn_helper (priv->spawn, "yumBackend.py", "install-packages", pk_backend_bool_to_string (only_trusted), package_ids_temp, NULL);
 	g_free (package_ids_temp);
@@ -2676,8 +552,6 @@ void
 pk_backend_simulate_remove_packages (PkBackend *backend, gchar **package_ids, gboolean autoremove)
 {
 	gchar *package_ids_temp;
-
-	/* send the complete list as stdin */
 	package_ids_temp = pk_package_ids_to_string (package_ids);
 	pk_backend_spawn_helper (priv->spawn, "yumBackend.py", "simulate-remove-packages", package_ids_temp, NULL);
 	g_free (package_ids_temp);
@@ -2690,8 +564,6 @@ void
 pk_backend_simulate_update_packages (PkBackend *backend, gchar **package_ids)
 {
 	gchar *package_ids_temp;
-
-	/* send the complete list as stdin */
 	package_ids_temp = pk_package_ids_to_string (package_ids);
 	pk_backend_spawn_helper (priv->spawn, "yumBackend.py", "simulate-update-packages", package_ids_temp, NULL);
 	g_free (package_ids_temp);
@@ -2704,8 +576,6 @@ void
 pk_backend_simulate_install_packages (PkBackend *backend, gchar **package_ids)
 {
 	gchar *package_ids_temp;
-
-	/* send the complete list as stdin */
 	package_ids_temp = pk_package_ids_to_string (package_ids);
 	pk_backend_spawn_helper (priv->spawn, "yumBackend.py", "simulate-install-packages", package_ids_temp, NULL);
 	g_free (package_ids_temp);
@@ -2718,8 +588,6 @@ void
 pk_backend_install_files (PkBackend *backend, gboolean only_trusted, gchar **full_paths)
 {
 	gchar *package_ids_temp;
-
-	/* send the complete list as stdin */
 	package_ids_temp = g_strjoinv (PK_BACKEND_SPAWN_FILENAME_DELIM, full_paths);
 	pk_backend_spawn_helper (priv->spawn, "yumBackend.py", "install-files", pk_backend_bool_to_string (only_trusted), package_ids_temp, NULL);
 	g_free (package_ids_temp);
@@ -2739,65 +607,6 @@ pk_backend_install_signature (PkBackend *backend, PkSigTypeEnum type,
 }
 
 /**
- * pk_backend_refresh_cache_thread:
- */
-static gboolean
-pk_backend_refresh_cache_thread (PkBackend *backend)
-{
-#ifdef HAVE_ZIF
-	GPtrArray *store_array = NULL;
-	gboolean ret;
-	GError *error = NULL;
-	ZifState *state_local;
-	gboolean force = pk_backend_get_bool (backend, "force");
-
-	zif_state_set_number_steps (priv->state, 2);
-
-	pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
-	pk_backend_set_percentage (backend, 0);
-
-	/* don't nuke the metadata */
-	if (!force) {
-		g_debug ("not supported yet");
-		goto out;
-	}
-
-	/* get a store_array of remote stores */
-	store_array = zif_store_array_new ();
-	state_local = zif_state_get_child (priv->state);
-	ret = zif_store_array_add_remote_enabled (store_array, state_local, &error);
-	if (!ret) {
-		pk_backend_error_code (backend, PK_ERROR_ENUM_INTERNAL_ERROR, "failed to add enabled stores: %s\n", error->message);
-		g_error_free (error);
-		goto out;
-	}
-
-	/* this section done */
-	ret = zif_state_done (priv->state, &error);
-	if (!ret) {
-		pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_CANCELLED, "cancelled: %s", error->message);
-		g_error_free (error);
-		goto out;
-	}
-
-	/* clean all the repos */
-	state_local = zif_state_get_child (priv->state);
-	zif_state_set_error_handler (priv->state, (ZifStateErrorHandlerCb) pk_backend_error_handler_cb, backend);
-	ret = zif_store_array_clean (store_array, state_local, &error);
-	if (!ret) {
-		pk_backend_error_code (backend, PK_ERROR_ENUM_INTERNAL_ERROR, "failed to clean: %s\n", error->message);
-		g_error_free (error);
-		goto out;
-	}
-out:
-	pk_backend_finished (backend);
-	if (store_array != NULL)
-		g_ptr_array_unref (store_array);
-#endif
-	return TRUE;
-}
-
-/**
  * pk_backend_refresh_cache:
  */
 void
@@ -2810,12 +619,7 @@ pk_backend_refresh_cache (PkBackend *backend, gboolean force)
 		return;
 	}
 
-	/* it seems some people are not ready for the awesomeness */
-	if (!pk_bitfield_contain (priv->use_zif, pk_backend_get_role (backend))) {
-		pk_backend_spawn_helper (priv->spawn, "yumBackend.py", "refresh-cache", pk_backend_bool_to_string (force), NULL);
-		return;
-	}
-	pk_backend_thread_create (backend, pk_backend_refresh_cache_thread);
+	pk_backend_spawn_helper (priv->spawn, "yumBackend.py", "refresh-cache", pk_backend_bool_to_string (force), NULL);
 }
 
 /**
@@ -2825,8 +629,6 @@ void
 pk_backend_remove_packages (PkBackend *backend, gchar **package_ids, gboolean allow_deps, gboolean autoremove)
 {
 	gchar *package_ids_temp;
-
-	/* send the complete list as stdin */
 	package_ids_temp = pk_package_ids_to_string (package_ids);
 	pk_backend_spawn_helper (priv->spawn, "yumBackend.py", "remove-packages", pk_backend_bool_to_string (allow_deps), pk_backend_bool_to_string (autoremove), package_ids_temp, NULL);
 	g_free (package_ids_temp);
@@ -2838,18 +640,13 @@ pk_backend_remove_packages (PkBackend *backend, gchar **package_ids, gboolean al
 void
 pk_backend_search_details (PkBackend *backend, PkBitfield filters, gchar **values)
 {
-	/* it seems some people are not ready for the awesomeness */
-	if (!pk_bitfield_contain (priv->use_zif, pk_backend_get_role (backend))) {
-		gchar *filters_text;
-		gchar *search;
-		filters_text = pk_filter_bitfield_to_string (filters);
-		search = g_strjoinv ("&", values);
-		pk_backend_spawn_helper (priv->spawn, "yumBackend.py", "search-details", filters_text, search, NULL);
-		g_free (filters_text);
-		g_free (search);
-		return;
-	}
-	pk_backend_thread_create (backend, pk_backend_search_thread);
+	gchar *filters_text;
+	gchar *search;
+	filters_text = pk_filter_bitfield_to_string (filters);
+	search = g_strjoinv ("&", values);
+	pk_backend_spawn_helper (priv->spawn, "yumBackend.py", "search-details", filters_text, search, NULL);
+	g_free (filters_text);
+	g_free (search);
 }
 
 /**
@@ -2858,18 +655,13 @@ pk_backend_search_details (PkBackend *backend, PkBitfield filters, gchar **value
 void
 pk_backend_search_files (PkBackend *backend, PkBitfield filters, gchar **values)
 {
-	/* it seems some people are not ready for the awesomeness */
-	if (!pk_bitfield_contain (priv->use_zif, pk_backend_get_role (backend))) {
-		gchar *filters_text;
-		gchar *search;
-		filters_text = pk_filter_bitfield_to_string (filters);
-		search = g_strjoinv ("&", values);
-		pk_backend_spawn_helper (priv->spawn, "yumBackend.py", "search-file", filters_text, search, NULL);
-		g_free (filters_text);
-		g_free (search);
-		return;
-	}
-	pk_backend_thread_create (backend, pk_backend_search_thread);
+	gchar *filters_text;
+	gchar *search;
+	filters_text = pk_filter_bitfield_to_string (filters);
+	search = g_strjoinv ("&", values);
+	pk_backend_spawn_helper (priv->spawn, "yumBackend.py", "search-file", filters_text, search, NULL);
+	g_free (filters_text);
+	g_free (search);
 }
 
 /**
@@ -2878,18 +670,13 @@ pk_backend_search_files (PkBackend *backend, PkBitfield filters, gchar **values)
 void
 pk_backend_search_groups (PkBackend *backend, PkBitfield filters, gchar **values)
 {
-	/* it seems some people are not ready for the awesomeness */
-	if (!pk_bitfield_contain (priv->use_zif, pk_backend_get_role (backend))) {
-		gchar *filters_text;
-		gchar *search;
-		filters_text = pk_filter_bitfield_to_string (filters);
-		search = g_strjoinv ("&", values);
-		pk_backend_spawn_helper (priv->spawn, "yumBackend.py", "search-group", filters_text, search, NULL);
-		g_free (filters_text);
-		g_free (search);
-		return;
-	}
-	pk_backend_thread_create (backend, pk_backend_search_thread);
+	gchar *filters_text;
+	gchar *search;
+	filters_text = pk_filter_bitfield_to_string (filters);
+	search = g_strjoinv ("&", values);
+	pk_backend_spawn_helper (priv->spawn, "yumBackend.py", "search-group", filters_text, search, NULL);
+	g_free (filters_text);
+	g_free (search);
 }
 
 /**
@@ -2898,18 +685,13 @@ pk_backend_search_groups (PkBackend *backend, PkBitfield filters, gchar **values
 void
 pk_backend_search_names (PkBackend *backend, PkBitfield filters, gchar **values)
 {
-	/* it seems some people are not ready for the awesomeness */
-	if (!pk_bitfield_contain (priv->use_zif, pk_backend_get_role (backend))) {
-		gchar *filters_text;
-		gchar *search;
-		filters_text = pk_filter_bitfield_to_string (filters);
-		search = g_strjoinv ("&", values);
-		pk_backend_spawn_helper (priv->spawn, "yumBackend.py", "search-name", filters_text, search, NULL);
-		g_free (filters_text);
-		g_free (search);
-		return;
-	}
-	pk_backend_thread_create (backend, pk_backend_search_thread);
+	gchar *filters_text;
+	gchar *search;
+	filters_text = pk_filter_bitfield_to_string (filters);
+	search = g_strjoinv ("&", values);
+	pk_backend_spawn_helper (priv->spawn, "yumBackend.py", "search-name", filters_text, search, NULL);
+	g_free (filters_text);
+	g_free (search);
 }
 
 /**
@@ -2919,8 +701,6 @@ void
 pk_backend_update_packages (PkBackend *backend, gboolean only_trusted, gchar **package_ids)
 {
 	gchar *package_ids_temp;
-
-	/* send the complete list as stdin */
 	package_ids_temp = pk_package_ids_to_string (package_ids);
 	pk_backend_spawn_helper (priv->spawn, "yumBackend.py", "update-packages", pk_backend_bool_to_string (only_trusted), package_ids_temp, NULL);
 	g_free (package_ids_temp);
@@ -2941,150 +721,13 @@ pk_backend_update_system (PkBackend *backend, gboolean only_trusted)
 void
 pk_backend_resolve (PkBackend *backend, PkBitfield filters, gchar **packages)
 {
-	/* it seems some people are not ready for the awesomeness */
-	if (!pk_bitfield_contain (priv->use_zif, pk_backend_get_role (backend))) {
-		gchar *filters_text;
-		gchar *package_ids_temp;
-		filters_text = pk_filter_bitfield_to_string (filters);
-		package_ids_temp = pk_package_ids_to_string (packages);
-		pk_backend_spawn_helper (priv->spawn, "yumBackend.py", "resolve", filters_text, package_ids_temp, NULL);
-		g_free (filters_text);
-		g_free (package_ids_temp);
-		return;
-	}
-	pk_backend_set_strv (backend, "search", packages);
-	pk_backend_thread_create (backend, pk_backend_search_thread);
-}
-
-/**
- * pk_backend_get_repo_list_thread:
- */
-static gboolean
-pk_backend_get_repo_list_thread (PkBackend *backend)
-{
-#ifdef HAVE_ZIF
-	gboolean ret;
-	PkBitfield filters = (PkBitfield) pk_backend_get_uint (backend, "filters");
-	guint i;
-	GPtrArray *array = NULL;
-	ZifStoreRemote *store;
-	ZifState *state_local;
-	ZifState *state_loop;
-	ZifState *state_tmp;
-	const gchar *repo_id;
-	const gchar *name;
-	gboolean enabled;
-	gboolean devel;
-	GError *error = NULL;
-
-	pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
-	pk_backend_set_percentage (backend, 0);
-
-	zif_state_set_number_steps (priv->state, 2);
-
-	state_local = zif_state_get_child (priv->state);
-	array = zif_repos_get_stores (priv->repos, state_local, &error);
-	if (array == NULL) {
-		pk_backend_error_code (backend, PK_ERROR_ENUM_REPO_NOT_FOUND, "failed to find repos: %s", error->message);
-		g_error_free (error);
-		goto out;
-	}
-
-	/* none? */
-	if (array->len == 0) {
-		pk_backend_error_code (backend, PK_ERROR_ENUM_REPO_NOT_FOUND, "failed to find any repos");
-		goto out;
-	}
-
-	/* this section done */
-	ret = zif_state_done (priv->state, &error);
-	if (!ret) {
-		pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_CANCELLED, "cancelled: %s", error->message);
-		g_error_free (error);
-		goto out;
-	}
-
-	/* setup state */
-	state_local = zif_state_get_child (priv->state);
-	zif_state_set_number_steps (state_local, array->len);
-
-	/* looks at each store */
-	for (i=0; i<array->len; i++) {
-		store = g_ptr_array_index (array, i);
-
-		/* allow filtering on devel */
-		state_loop = zif_state_get_child (state_local);
-		if (pk_bitfield_contain (filters, PK_FILTER_ENUM_NOT_DEVELOPMENT)) {
-
-			/* devel, name, enabled */
-			zif_state_set_number_steps (state_loop, 3);
-
-			state_tmp = zif_state_get_child (state_loop);
-			devel = zif_store_remote_is_devel (store, state_tmp, NULL);
-			if (devel)
-				goto skip;
-
-			/* this section done */
-			ret = zif_state_done (state_loop, &error);
-			if (!ret) {
-				pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_CANCELLED, "cancelled: %s", error->message);
-				g_error_free (error);
-				goto out;
-			}
-		} else {
-			/* name, enabled */
-			zif_state_set_number_steps (state_loop, 2);
-		}
-
-		/* get name */
-		state_tmp = zif_state_get_child (state_loop);
-		name = zif_store_remote_get_name (store, state_tmp, NULL);
-
-		/* this section done */
-		ret = zif_state_done (state_loop, &error);
-		if (!ret) {
-			pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_CANCELLED, "cancelled: %s", error->message);
-			g_error_free (error);
-			goto out;
-		}
-
-		/* get state */
-		state_tmp = zif_state_get_child (state_loop);
-		enabled = zif_store_remote_get_enabled (store, state_tmp, NULL);
-
-		/* this section done */
-		ret = zif_state_done (state_loop, &error);
-		if (!ret) {
-			pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_CANCELLED, "cancelled: %s", error->message);
-			g_error_free (error);
-			goto out;
-		}
-
-		repo_id = zif_store_get_id (ZIF_STORE (store));
-		pk_backend_repo_detail (backend, repo_id, name, enabled);
-skip:
-		/* this section done */
-		ret = zif_state_done (state_local, &error);
-		if (!ret) {
-			pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_CANCELLED, "cancelled: %s", error->message);
-			g_error_free (error);
-			goto out;
-		}
-	}
-
-	/* this section done */
-	ret = zif_state_done (priv->state, &error);
-	if (!ret) {
-		pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_CANCELLED, "cancelled: %s", error->message);
-		g_error_free (error);
-		goto out;
-	}
-out:
-	pk_backend_finished (backend);
-	if (array != NULL)
-		g_ptr_array_unref (array);
-#endif
-	return TRUE;
+	gchar *filters_text;
+	gchar *package_ids_temp;
+	filters_text = pk_filter_bitfield_to_string (filters);
+	package_ids_temp = pk_package_ids_to_string (packages);
+	pk_backend_spawn_helper (priv->spawn, "yumBackend.py", "resolve", filters_text, package_ids_temp, NULL);
+	g_free (filters_text);
+	g_free (package_ids_temp);
 }
 
 /**
@@ -3093,70 +736,10 @@ out:
 void
 pk_backend_get_repo_list (PkBackend *backend, PkBitfield filters)
 {
-	/* it seems some people are not ready for the awesomeness */
-	if (!pk_bitfield_contain (priv->use_zif, pk_backend_get_role (backend))) {
-		gchar *filters_text;
-		filters_text = pk_filter_bitfield_to_string (filters);
-		pk_backend_spawn_helper (priv->spawn, "yumBackend.py", "get-repo-list", filters_text, NULL);
-		g_free (filters_text);
-		return;
-	}
-
-	pk_backend_thread_create (backend, pk_backend_get_repo_list_thread);
-}
-
-/**
- * pk_backend_repo_enable_thread:
- */
-static gboolean
-pk_backend_repo_enable_thread (PkBackend *backend)
-{
-#ifdef HAVE_ZIF
-	ZifStoreRemote *repo = NULL;
-	gboolean ret;
-	GError *error = NULL;
-	gchar *warning = NULL;
-	gboolean enabled = pk_backend_get_bool (backend, "enabled");
-	const gchar *repo_id = pk_backend_get_string (backend, "repo_id");
-
-	pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
-	pk_backend_set_percentage (backend, 0);
-
-	/* find the right repo */
-	repo = zif_repos_get_store (priv->repos, repo_id, priv->state, &error);
-	if (repo == NULL) {
-		pk_backend_error_code (backend, PK_ERROR_ENUM_REPO_NOT_FOUND, "failed to find repo: %s", error->message);
-		g_error_free (error);
-		goto out;
-	}
-
-	/* set the state */
-	ret = zif_store_remote_set_enabled (repo, enabled, &error);
-	if (!ret) {
-		pk_backend_error_code (backend, PK_ERROR_ENUM_CANNOT_DISABLE_REPOSITORY, "failed to set enable: %s", error->message);
-		g_error_free (error);
-		goto out;
-	}
-
-	/* warn if rawhide */
-	if (g_strstr_len (repo_id, -1, "rawhide") != NULL) {
-		warning = g_strdup_printf ("These packages are untested and still under development."
-					   "This repository is used for development of new releases.\n\n"
-					   "This repository can see significant daily turnover and major "
-					   "functionality changes which cause unexpected problems with "
-					   "other development packages.\n"
-					   "Please use these packages if you want to work with the "
-					   "Fedora developers by testing these new development packages.\n\n"
-					   "If this is not correct, please disable the %s software source.", repo_id);
-		pk_backend_message (backend, PK_MESSAGE_ENUM_REPO_FOR_DEVELOPERS_ONLY, warning);
-	}
-out:
-	pk_backend_finished (backend);
-	g_free (warning);
-	if (repo != NULL)
-		g_object_unref (repo);
-#endif
-	return TRUE;
+	gchar *filters_text;
+	filters_text = pk_filter_bitfield_to_string (filters);
+	pk_backend_spawn_helper (priv->spawn, "yumBackend.py", "get-repo-list", filters_text, NULL);
+	g_free (filters_text);
 }
 
 /**
@@ -3165,16 +748,11 @@ out:
 void
 pk_backend_repo_enable (PkBackend *backend, const gchar *repo_id, gboolean enabled)
 {
-	/* it seems some people are not ready for the awesomeness */
-	if (!pk_bitfield_contain (priv->use_zif, pk_backend_get_role (backend))) {
-		if (enabled == TRUE) {
-			pk_backend_spawn_helper (priv->spawn, "yumBackend.py", "repo-enable", repo_id, "true", NULL);
-		} else {
-			pk_backend_spawn_helper (priv->spawn, "yumBackend.py", "repo-enable", repo_id, "false", NULL);
-		}
-		return;
+	if (enabled == TRUE) {
+		pk_backend_spawn_helper (priv->spawn, "yumBackend.py", "repo-enable", repo_id, "true", NULL);
+	} else {
+		pk_backend_spawn_helper (priv->spawn, "yumBackend.py", "repo-enable", repo_id, "false", NULL);
 	}
-	pk_backend_thread_create (backend, pk_backend_repo_enable_thread);
 }
 
 /**
@@ -3183,148 +761,16 @@ pk_backend_repo_enable (PkBackend *backend, const gchar *repo_id, gboolean enabl
 void
 pk_backend_what_provides (PkBackend *backend, PkBitfield filters, PkProvidesEnum provides, gchar **values)
 {
-	guint i;
-	guint len;
-	gchar **search = NULL;
-	GPtrArray *array = NULL;
 	gchar *search_tmp;
+	gchar *filters_text;
+	const gchar *provides_text;
 
-	/* it seems some people are not ready for the awesomeness */
-	if (!pk_bitfield_contain (priv->use_zif, pk_backend_get_role (backend))) {
-		gchar *filters_text;
-		const gchar *provides_text;
-		provides_text = pk_provides_enum_to_string (provides);
-		filters_text = pk_filter_bitfield_to_string (filters);
-		search_tmp = g_strjoinv ("&", values);
-		pk_backend_spawn_helper (priv->spawn, "yumBackend.py", "what-provides", filters_text, provides_text, search_tmp, NULL);
-		g_free (filters_text);
-		g_free (search_tmp);
-		return;
-	}
-
-	/* iter on each provide string, and wrap it with the fedora prefix */
-	len = g_strv_length (values);
-	array = g_ptr_array_new_with_free_func (g_free);
-	for (i=0; i<len; i++) {
-		/* compatibility with previous versions of GPK */
-		if (g_str_has_prefix (values[i], "gstreamer0.10(")) {
-			g_ptr_array_add (array, g_strdup (values[i]));
-		} else if (provides == PK_PROVIDES_ENUM_CODEC) {
-			g_ptr_array_add (array, g_strdup_printf ("gstreamer0.10(%s)", values[i]));
-		} else if (provides == PK_PROVIDES_ENUM_FONT) {
-			g_ptr_array_add (array, g_strdup_printf ("font(%s)", values[i]));
-		} else if (provides == PK_PROVIDES_ENUM_MIMETYPE) {
-			g_ptr_array_add (array, g_strdup_printf ("mimehandler(%s)", values[i]));
-		} else if (provides == PK_PROVIDES_ENUM_POSTSCRIPT_DRIVER) {
-			g_ptr_array_add (array, g_strdup_printf ("postscriptdriver(%s)", values[i]));
-		} else if (provides == PK_PROVIDES_ENUM_ANY) {
-			g_ptr_array_add (array, g_strdup_printf ("gstreamer0.10(%s)", values[i]));
-			g_ptr_array_add (array, g_strdup_printf ("font(%s)", values[i]));
-			g_ptr_array_add (array, g_strdup_printf ("mimehandler(%s)", values[i]));
-			g_ptr_array_add (array, g_strdup_printf ("postscriptdriver(%s)", values[i]));
-		} else {
-			pk_backend_error_code (backend, PK_ERROR_ENUM_PROVIDE_TYPE_NOT_SUPPORTED,
-					       "provide type %s not supported", pk_provides_enum_to_string (provides));
-		}
-	}
-
-	/* set the search terms and run */
-	search = pk_ptr_array_to_strv (array);
-	pk_backend_set_strv (backend, "search", search);
-	pk_backend_thread_create (backend, pk_backend_search_thread);
-	g_strfreev (search);
-	g_ptr_array_unref (array);
-}
-
-/**
- * pk_backend_get_categories_thread:
- */
-static gboolean
-pk_backend_get_categories_thread (PkBackend *backend)
-{
-#ifdef HAVE_ZIF
-	gboolean ret;
-	guint i;
-	GPtrArray *array = NULL;
-	GPtrArray *stores = NULL;
-	ZifCategory *cat;
-	gchar *cat_id;
-
-	ZifState *state_local;
-	GError *error = NULL;
-
-	zif_state_set_number_steps (priv->state, 3);
-
-	pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
-	pk_backend_set_percentage (backend, 0);
-
-	/* get enabled repos */
-	state_local = zif_state_get_child (priv->state);
-	stores = zif_repos_get_stores_enabled (priv->repos, state_local, &error);
-	if (stores == NULL) {
-		pk_backend_error_code (backend, PK_ERROR_ENUM_REPO_CONFIGURATION_ERROR, "failed to add remote stores: %s", error->message);
-		g_error_free (error);
-		goto out;
-	}
-
-	/* this section done */
-	ret = zif_state_done (priv->state, &error);
-	if (!ret) {
-		pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_CANCELLED, "cancelled: %s", error->message);
-		g_error_free (error);
-		goto out;
-	}
-
-	/* get sorted list of unique categories */
-	state_local = zif_state_get_child (priv->state);
-	zif_state_set_error_handler (priv->state, (ZifStateErrorHandlerCb) pk_backend_error_handler_cb, backend);
-	array = zif_store_array_get_categories (stores, state_local, &error);
-	if (array == NULL) {
-		pk_backend_error_code (backend, PK_ERROR_ENUM_GROUP_LIST_INVALID, "failed to add get categories: %s", error->message);
-		g_error_free (error);
-		goto out;
-	}
-
-	/* this section done */
-	ret = zif_state_done (priv->state, &error);
-	if (!ret) {
-		pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_CANCELLED, "cancelled: %s", error->message);
-		g_error_free (error);
-		goto out;
-	}
-
-	/* emit each cat obj */
-	for (i=0; i<array->len; i++) {
-		cat = g_ptr_array_index (array, i);
-		/* FIXME: in the yum backend, we signify a group with a '@' prefix */
-		if (zif_category_get_parent_id (cat) != NULL)
-			cat_id = g_strdup_printf ("@%s", zif_category_get_id (cat));
-		else
-			cat_id = g_strdup (zif_category_get_id (cat));
-		pk_backend_category (backend,
-				     zif_category_get_parent_id (cat),
-				     cat_id,
-				     zif_category_get_name (cat),
-				     zif_category_get_summary (cat),
-				     zif_category_get_icon (cat));
-		g_free (cat_id);
-	}
-
-	/* this section done */
-	ret = zif_state_done (priv->state, &error);
-	if (!ret) {
-		pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_CANCELLED, "cancelled: %s", error->message);
-		g_error_free (error);
-		goto out;
-	}
-out:
-	pk_backend_finished (backend);
-	if (array != NULL)
-		g_ptr_array_unref (array);
-	if (stores != NULL)
-		g_ptr_array_unref (stores);
-#endif
-	return TRUE;
+	provides_text = pk_provides_enum_to_string (provides);
+	filters_text = pk_filter_bitfield_to_string (filters);
+	search_tmp = g_strjoinv ("&", values);
+	pk_backend_spawn_helper (priv->spawn, "yumBackend.py", "what-provides", filters_text, provides_text, search_tmp, NULL);
+	g_free (filters_text);
+	g_free (search_tmp);
 }
 
 /**
@@ -3333,12 +779,7 @@ out:
 void
 pk_backend_get_categories (PkBackend *backend)
 {
-	/* it seems some people are not ready for the awesomeness */
-	if (!pk_bitfield_contain (priv->use_zif, pk_backend_get_role (backend))) {
-		pk_backend_spawn_helper (priv->spawn, "yumBackend.py", "get-categories", NULL);
-		return;
-	}
-	pk_backend_thread_create (backend, pk_backend_get_categories_thread);
+	pk_backend_spawn_helper (priv->spawn, "yumBackend.py", "get-categories", NULL);
 }
 
 /**
@@ -3356,93 +797,10 @@ pk_backend_simulate_install_files (PkBackend *backend, gchar **full_paths)
 }
 
 /**
-  * pk_backend_upgrade_system_thread:
-  */
-static gboolean
-pk_backend_upgrade_system_thread (PkBackend *backend)
-{
-#ifdef HAVE_ZIF
-	gchar **distro_id_split = NULL;
-	guint version;
-	gboolean ret;
-	PkErrorEnum error_code;
-	GError *error = NULL;
-	ZifReleaseUpgradeKind upgrade_kind_zif = ZIF_RELEASE_UPGRADE_KIND_DEFAULT;
-	PkUpgradeKindEnum upgrade_kind = pk_backend_get_uint (backend, "upgrade_kind");
-	const gchar *distro_id = pk_backend_get_string (backend, "distro_id");
-
-	/* check valid */
-	distro_id_split = g_strsplit (distro_id, "-", -1);
-	if (g_strv_length (distro_id_split) != 2) {
-		pk_backend_error_code (backend, PK_ERROR_ENUM_FAILED_CONFIG_PARSING,
-				       "distribution id %s invalid", distro_id);
-		goto out;
-	}
-
-	/* check fedora */
-	if (g_strcmp0 (distro_id_split[0], "fedora") != 0) {
-		pk_backend_error_code (backend, PK_ERROR_ENUM_FAILED_CONFIG_PARSING,
-				       "only 'fedora' is supported");
-		goto out;
-	}
-
-	/* map PK enum to Zif enumerated types */
-	if (upgrade_kind == PK_UPGRADE_KIND_ENUM_MINIMAL)
-		upgrade_kind_zif = ZIF_RELEASE_UPGRADE_KIND_MINIMAL;
-	else if (upgrade_kind == PK_UPGRADE_KIND_ENUM_COMPLETE)
-		upgrade_kind_zif = ZIF_RELEASE_UPGRADE_KIND_COMPLETE;
-
-	/* do the upgrade */
-	version = atoi (distro_id_split[1]);
-	ret = zif_release_upgrade_version (priv->release,
-					   version,
-					   upgrade_kind_zif,
-					   priv->state,
-					   &error);
-	if (!ret) {
-		/* convert the ZifRelease error code into a PK error enum */
-		switch (error->code) {
-		case ZIF_RELEASE_ERROR_DOWNLOAD_FAILED:
-			error_code = PK_ERROR_ENUM_PACKAGE_DOWNLOAD_FAILED;
-			break;
-		case ZIF_RELEASE_ERROR_FILE_INVALID:
-			error_code = PK_ERROR_ENUM_FAILED_CONFIG_PARSING;
-			break;
-		case ZIF_RELEASE_ERROR_LOW_DISKSPACE:
-			error_code = PK_ERROR_ENUM_NO_SPACE_ON_DEVICE;
-			break;
-		case ZIF_RELEASE_ERROR_NOT_FOUND:
-			error_code = PK_ERROR_ENUM_PACKAGE_NOT_FOUND;
-			break;
-		case ZIF_RELEASE_ERROR_NOT_SUPPORTED:
-			error_code = PK_ERROR_ENUM_NOT_SUPPORTED;
-			break;
-		case ZIF_RELEASE_ERROR_NO_UUID_FOR_ROOT:
-		case ZIF_RELEASE_ERROR_SETUP_INVALID:
-		case ZIF_RELEASE_ERROR_SPAWN_FAILED:
-		case ZIF_RELEASE_ERROR_WRITE_FAILED:
-			error_code = PK_ERROR_ENUM_INTERNAL_ERROR;
-			break;
-		default:
-			error_code = PK_ERROR_ENUM_INTERNAL_ERROR;
-		}
-		pk_backend_error_code (backend, error_code,
-				       "failed to upgrade: %s", error->message);
-		g_error_free (error);
-		goto out;
-	}
-out:
-	pk_backend_finished (backend);
-	g_strfreev (distro_id_split);
-#endif
-	return TRUE;
-}
-
-/**
  * pk_backend_upgrade_system:
  */
 void
 pk_backend_upgrade_system (PkBackend *backend, const gchar *distro_id, PkUpgradeKindEnum upgrade_kind)
 {
-	pk_backend_thread_create (backend, pk_backend_upgrade_system_thread);
+	pk_backend_spawn_helper (priv->spawn, "yumBackend.py", "update-system", NULL);
 }
diff --git a/backends/zif/.gitignore b/backends/zif/.gitignore
new file mode 100644
index 0000000..9c0e66e
--- /dev/null
+++ b/backends/zif/.gitignore
@@ -0,0 +1 @@
+.libs
diff --git a/backends/zif/Makefile.am b/backends/zif/Makefile.am
new file mode 100644
index 0000000..a19855f
--- /dev/null
+++ b/backends/zif/Makefile.am
@@ -0,0 +1,27 @@
+helperdir = $(datadir)/PackageKit/helpers/zif
+dist_helper_DATA = 			\
+	zif-comps-groups.conf		\
+	licenses.txt
+
+INCLUDES = \
+	-DI_KNOW_THE_PACKAGEKIT_GLIB2_API_IS_SUBJECT_TO_CHANGE	\
+	-DG_LOG_DOMAIN=\"PackageKit-Zif\"			\
+	-DPK_COMPILATION					\
+	$(ZIF_CFLAGS)						\
+	-DDATADIR=\"$(datadir)\"				\
+	-DSYSCONFDIR=\""$(sysconfdir)"\"
+
+plugindir = $(PK_PLUGIN_DIR)
+plugin_LTLIBRARIES = libpk_backend_zif.la
+libpk_backend_zif_la_SOURCES = pk-backend-zif.c
+libpk_backend_zif_la_LIBADD = $(PK_PLUGIN_LIBS)
+libpk_backend_zif_la_LDFLAGS = -module -avoid-version
+libpk_backend_zif_la_CFLAGS = $(PK_PLUGIN_CFLAGS) $(WARNINGFLAGS_C)
+libpk_backend_zif_la_LIBADD += $(ZIF_LIBS)
+
+EXTRA_DIST =							\
+	$(conf_DATA)
+
+clean-local:
+	rm -f *~
+
diff --git a/backends/zif/licenses.txt b/backends/zif/licenses.txt
new file mode 120000
index 0000000..7289e7e
--- /dev/null
+++ b/backends/zif/licenses.txt
@@ -0,0 +1 @@
+../yum/licenses.txt
\ No newline at end of file
diff --git a/backends/zif/pk-backend-zif.c b/backends/zif/pk-backend-zif.c
new file mode 100644
index 0000000..311cab6
--- /dev/null
+++ b/backends/zif/pk-backend-zif.c
@@ -0,0 +1,4662 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2007-2010 Richard Hughes <richard at hughsie.com>
+ *
+ * Licensed under the GNU General Public License Version 2
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#include <config.h>
+#include <gio/gio.h>
+#include <pk-backend.h>
+#include <string.h>
+#include <packagekit-glib2/pk-debug.h>
+#include <zif.h>
+
+#define PACKAGE_MEDIA_REPO_FILENAME		"/etc/yum.repos.d/packagekit-media.repo"
+
+typedef struct {
+	GCancellable	*cancellable;
+	GFileMonitor	*monitor;
+	guint		 signal_finished;
+	guint		 signal_status;
+	GVolumeMonitor	*volume_monitor;
+	ZifConfig	*config;
+	ZifGroups	*groups;
+	ZifLock		*lock;
+	ZifRelease	*release;
+	ZifRepos	*repos;
+	ZifState	*state;
+	ZifStore	*store_local;
+	ZifTransaction	*transaction;
+} PkBackendYumPrivate;
+
+static PkBackendYumPrivate *priv;
+
+/**
+ * pk_backend_get_description:
+ */
+gchar *
+pk_backend_get_description (PkBackend *backend)
+{
+	return g_strdup ("Zif");
+}
+
+/**
+ * pk_backend_get_author:
+ */
+gchar *
+pk_backend_get_author (PkBackend *backend)
+{
+	return g_strdup ("Richard Hughes <richard at hughsie.com>");
+}
+
+/**
+ * pk_backend_yum_repos_changed_cb:
+ **/
+static void
+pk_backend_yum_repos_changed_cb (GFileMonitor *monitor_,
+				 GFile *file, GFile *other_file,
+				 GFileMonitorEvent event_type,
+				 PkBackend *backend)
+{
+	gchar *filename;
+
+	/* ignore the packagekit-media.repo file */
+	filename = g_file_get_path (file);
+	if (g_str_has_prefix (filename, PACKAGE_MEDIA_REPO_FILENAME))
+		goto out;
+
+	/* emit signal */
+	pk_backend_repo_list_changed (backend);
+out:
+	g_free (filename);
+}
+
+/**
+ * pk_backend_state_percentage_changed_cb:
+ */
+static void
+pk_backend_state_percentage_changed_cb (ZifState *state,
+					guint percentage,
+					PkBackend *backend)
+{
+	pk_backend_set_percentage (backend, percentage);
+}
+
+/**
+ * pk_backend_state_subpercentage_changed_cb:
+ */
+static void
+pk_backend_state_subpercentage_changed_cb (ZifState *state,
+					   guint subpercentage,
+					   PkBackend *backend)
+{
+	pk_backend_set_sub_percentage (backend, subpercentage);
+}
+
+/**
+ * pk_backend_is_all_installed:
+ */
+static gboolean
+pk_backend_is_all_installed (gchar **package_ids)
+{
+	guint i;
+	gboolean ret = TRUE;
+
+	/* check if we can use zif */
+	for (i=0; package_ids[i] != NULL; i++) {
+		if (!g_str_has_suffix (package_ids[i], ";installed")) {
+			ret = FALSE;
+			break;
+		}
+	}
+	return ret;
+}
+
+/**
+ * pk_backend_transaction_start:
+ */
+void
+pk_backend_transaction_start (PkBackend *backend)
+{
+	const gchar *root;
+	gboolean ret = FALSE;
+	gchar *http_proxy = NULL;
+	GError *error = NULL;
+	guint cache_age;
+	guint i;
+	guint lock_delay;
+	guint lock_retries;
+	guint pid;
+
+	/* only try a finite number of times */
+	lock_retries = zif_config_get_uint (priv->config, "lock_retries", NULL);
+	lock_delay = zif_config_get_uint (priv->config, "lock_delay", NULL);
+	for (i=0; i<lock_retries; i++) {
+
+		/* try to lock */
+		ret = zif_lock_set_locked (priv->lock, &pid, &error);
+		if (ret)
+			break;
+
+		/* we're now waiting */
+		pk_backend_set_status (backend, PK_STATUS_ENUM_WAITING_FOR_LOCK);
+
+		/* now wait */
+		g_debug ("Failed to lock on try %i of %i, already locked by PID %i "
+			 "(sleeping for %ims): %s\n",
+			   i+1, lock_retries,
+			   pid,
+			   lock_delay,
+			   error->message);
+		g_clear_error (&error);
+		g_usleep (lock_delay * 1000);
+	}
+
+	/* we failed to lock */
+	if (!ret) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_CANNOT_GET_LOCK,
+				       "failed to get lock, held by PID: %i",
+				       pid);
+		goto out;
+	}
+
+	/* this backend does not support a relocatable root... yet */
+	root = pk_backend_get_root (backend);
+	if (g_strcmp0 (root, "/") != 0) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_INSTALL_ROOT_INVALID,
+				       "backend does not support this root: '%s'",
+				       root);
+		goto out;
+	}
+
+	/* try to set, or re-set install root */
+	ret = zif_store_local_set_prefix (ZIF_STORE_LOCAL (priv->store_local),
+					  root,
+					  &error);
+	if (!ret) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_INTERNAL_ERROR,
+				       "failed to set prefix: %s",
+				       error->message);
+		g_error_free (error);
+		goto out;
+	}
+
+	/* get network state */
+	ret = pk_backend_is_online (backend);
+	if (!ret) {
+		zif_config_set_boolean (priv->config, "network",
+					FALSE, NULL);
+		goto out;
+	}
+
+	/* tell ZifConfig it's okay to contact the network */
+	zif_config_set_boolean (priv->config, "network",
+				TRUE, NULL);
+
+	/* set cache age */
+	cache_age = pk_backend_get_cache_age (backend);
+	if (cache_age > 0)
+		zif_config_set_uint (priv->config, "max-age",
+				     cache_age, NULL);
+
+	/* set the proxy */
+	http_proxy = pk_backend_get_proxy_http (backend);
+	zif_config_set_string (priv->config, "http_proxy",
+			       http_proxy, NULL);
+
+	/* packages we can't remove */
+	zif_config_set_string (priv->config, "protected_packages",
+			       "PackageKit,zif,rpm,glibc", NULL);
+
+	/* always skip broken transactions */
+	zif_config_set_boolean (priv->config, "skip_broken",
+				TRUE, NULL);
+
+	/* set background mode */
+	zif_config_set_boolean (priv->config, "background",
+				pk_backend_use_background (backend), NULL);
+
+	/* setup state */
+	zif_state_reset (priv->state);
+
+	/* start with a new transaction */
+	zif_transaction_reset (priv->transaction);
+out:
+	g_free (http_proxy);
+	return;
+}
+
+/**
+ * pk_backend_transaction_stop:
+ */
+void
+pk_backend_transaction_stop (PkBackend *backend)
+{
+	gboolean ret;
+	GError *error = NULL;
+
+	/* try to unlock */
+	ret = zif_lock_set_unlocked (priv->lock, &error);
+	if (!ret) {
+		g_warning ("failed to unlock: %s", error->message);
+		g_error_free (error);
+		goto out;
+	}
+out:
+	return;
+}
+
+/**
+ * pk_backend_filter_package_array_newest:
+ *
+ * This function needs to scale well, and be fast to process 50,000
+ * packages in less than one second. If it looks overcomplicated, it's
+ * because it needs to be O(n) not O(n*n).
+ **/
+static gboolean
+pk_backend_filter_package_array_newest (GPtrArray *array)
+{
+	const gchar *package_id;
+	gboolean installed;
+	gchar *key;
+	gchar **split;
+	GHashTable *hash;
+	gint retval;
+	guint i;
+	ZifPackage *found;
+	ZifPackage *package;
+
+	/* as an indexed hash table for speed */
+	hash = g_hash_table_new_full (g_str_hash,
+				      g_str_equal,
+				      g_free,
+				      g_object_unref);
+
+	for (i=0; i<array->len; i++) {
+
+		/* get the current package */
+		package = g_ptr_array_index (array, i);
+		package_id = zif_package_get_id (package);
+		installed = zif_package_is_installed (package);
+
+		/* generate enough data to be specific */
+		split = pk_package_id_split (package_id);
+		key = g_strdup_printf ("%s-%s-%i",
+				       split[PK_PACKAGE_ID_NAME],
+				       split[PK_PACKAGE_ID_ARCH],
+				       installed);
+		g_strfreev (split);
+
+		/* we've not already come across this package */
+		found = g_hash_table_lookup (hash, key);
+		if (found == NULL) {
+			g_hash_table_insert (hash, key, g_object_ref (package));
+			continue;
+		}
+
+		/* compare one package vs the other package */
+		retval = zif_package_compare (package, found);
+
+		/* the package is older than the one we have stored */
+		if (retval <= 0) {
+			g_free (key);
+			g_ptr_array_remove (array, package);
+			continue;
+		}
+
+		/* the package is newer than what we have stored,
+		 * delete the old store, and add this one */
+		g_hash_table_remove (hash, found);
+		g_hash_table_insert (hash, key, g_object_ref (package));
+	}
+
+	g_hash_table_unref (hash);
+	return TRUE;
+}
+
+/**
+ * pk_backend_filter_package_array:
+ **/
+static GPtrArray *
+pk_backend_filter_package_array (GPtrArray *array, PkBitfield filters)
+{
+	GPtrArray *result = NULL;
+	guint i;
+	ZifPackage *package;
+
+	result = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
+
+	/* pre-result */
+	for (i=0;i<array->len;i++) {
+		package = g_ptr_array_index (array, i);
+
+		/* installed */
+		if (pk_bitfield_contain (filters,
+					 PK_FILTER_ENUM_INSTALLED)) {
+			if (!zif_package_is_installed (package))
+				continue;
+		} else if (pk_bitfield_contain (filters,
+						PK_FILTER_ENUM_NOT_INSTALLED)) {
+			if (zif_package_is_installed (package))
+				continue;
+		}
+
+		/* development */
+		if (pk_bitfield_contain (filters,
+					 PK_FILTER_ENUM_DEVELOPMENT)) {
+			if (!zif_package_is_devel (package))
+				continue;
+		} else if (pk_bitfield_contain (filters,
+						PK_FILTER_ENUM_NOT_DEVELOPMENT)) {
+			if (zif_package_is_devel (package))
+				continue;
+		}
+
+		/* gui */
+		if (pk_bitfield_contain (filters,
+					 PK_FILTER_ENUM_GUI)) {
+			if (!zif_package_is_gui (package))
+				continue;
+		} else if (pk_bitfield_contain (filters,
+						PK_FILTER_ENUM_NOT_GUI)) {
+			if (zif_package_is_gui (package))
+				continue;
+		}
+
+		/* free */
+		if (pk_bitfield_contain (filters,
+					 PK_FILTER_ENUM_FREE)) {
+			if (!zif_package_is_free (package))
+				continue;
+		} else if (pk_bitfield_contain (filters,
+						PK_FILTER_ENUM_NOT_FREE)) {
+			if (zif_package_is_free (package))
+				continue;
+		}
+
+		/* arch */
+		if (pk_bitfield_contain (filters,
+					 PK_FILTER_ENUM_ARCH)) {
+			if (!zif_package_is_native (package))
+				continue;
+		} else if (pk_bitfield_contain (filters,
+						PK_FILTER_ENUM_NOT_ARCH)) {
+			if (zif_package_is_native (package))
+				continue;
+		}
+
+		/* add to array so we can post process */
+		g_ptr_array_add (result, g_object_ref (package));
+	}
+
+	/* do newest filtering */
+	if (pk_bitfield_contain (filters, PK_FILTER_ENUM_NEWEST))
+		pk_backend_filter_package_array_newest (result);
+
+	return result;
+}
+
+/**
+ * pk_backend_emit_package_array:
+ **/
+static gboolean
+pk_backend_emit_package_array (PkBackend *backend,
+			       GPtrArray *array,
+			       ZifState *state)
+{
+	const gchar *info_hint;
+	const gchar *package_id;
+	const gchar *summary;
+	gboolean installed;
+	gboolean ret = TRUE;
+	guint i;
+	PkInfoEnum info;
+	ZifPackage *package;
+	ZifState *state_local;
+	ZifState *state_loop;
+
+	g_return_val_if_fail (array != NULL, FALSE);
+
+	state_local = zif_state_get_child (state);
+	if (array->len > 0)
+		zif_state_set_number_steps (state_local, array->len);
+	for (i=0; i<array->len; i++) {
+		package = g_ptr_array_index (array, i);
+		installed = zif_package_is_installed (package);
+		package_id = zif_package_get_package_id (package);
+
+		/* should be quick as shouldn't be doing any action */
+		state_loop = zif_state_get_child (state_local);
+		summary = zif_package_get_summary (package, state_loop, NULL);
+
+		/* if we set a hint, use that, otherwise just get the installed status correct */
+		info_hint = (const gchar *)g_object_get_data (G_OBJECT(package), "kind");
+		if (info_hint == NULL) {
+			info = installed ? PK_INFO_ENUM_INSTALLED : PK_INFO_ENUM_AVAILABLE;
+		} else {
+			info = pk_info_enum_from_string (info_hint);
+		}
+
+		pk_backend_package (backend, info, package_id, summary);
+
+		/* done */
+		ret = zif_state_done (state_local, NULL);
+		if (!ret)
+			goto out;
+	}
+out:
+	return ret;
+}
+
+/**
+ * pk_backend_error_handler_cb:
+ */
+static gboolean
+pk_backend_error_handler_cb (const GError *error, PkBackend *backend)
+{
+	/* if we try to do a comps search on a local store */
+	if (error->domain == ZIF_STORE_ERROR &&
+	    error->code == ZIF_STORE_ERROR_NO_SUPPORT) {
+		g_debug ("ignoring operation on PkStoreLocal: %s",
+			 error->message);
+		return TRUE;
+	}
+
+	/* emit a warning, this isn't fatal */
+	pk_backend_message (backend,
+			    PK_MESSAGE_ENUM_BROKEN_MIRROR,
+			    "%s",
+			    error->message);
+	return TRUE;
+}
+
+/**
+ * pk_backend_get_store_array_for_filter:
+ */
+static GPtrArray *
+pk_backend_get_store_array_for_filter (PkBackend *backend,
+				       PkBitfield filters,
+				       ZifState *state,
+				       GError **error)
+{
+	GPtrArray *store_array;
+	ZifStore *store;
+	GPtrArray *array;
+	GError *error_local = NULL;
+
+	store_array = zif_store_array_new ();
+
+	/* add local packages to the store_array */
+	if (!pk_bitfield_contain (filters, PK_FILTER_ENUM_NOT_INSTALLED)) {
+		store = zif_store_local_new ();
+		zif_store_array_add_store (store_array, store);
+		g_object_unref (store);
+	}
+
+	/* add remote packages to the store_array */
+	if (!pk_bitfield_contain (filters, PK_FILTER_ENUM_INSTALLED)) {
+		array = zif_repos_get_stores_enabled (priv->repos,
+						      state,
+						      &error_local);
+		if (array == NULL) {
+			g_set_error (error, 1, 0,
+				     "failed to get enabled stores: %s",
+				     error_local->message);
+			g_error_free (error_local);
+			g_ptr_array_unref (store_array);
+			store_array = NULL;
+			goto out;
+		}
+		zif_store_array_add_stores (store_array, array);
+		g_ptr_array_unref (array);
+	}
+out:
+	return store_array;
+}
+
+/**
+ * pk_backend_search_newest:
+ */
+static GPtrArray *
+pk_backend_search_newest (GPtrArray *store_array,
+			  ZifState *state,
+			  guint recent,
+			  GError **error)
+{
+	GPtrArray *array = NULL;
+	GPtrArray *array_tmp;
+	GTimeVal timeval_now;
+	guint diff_secs = recent * 24 * 60 * 60;
+	guint i;
+	ZifPackage *package;
+
+	/* get all the packages */
+	array_tmp = zif_store_array_get_packages (store_array, state, error);
+	if (array_tmp == NULL)
+		goto out;
+
+	/* only add elements to the array that are new enough */
+	g_get_current_time (&timeval_now);
+	array = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
+	for (i=0; i<array_tmp->len; i++) {
+		package = g_ptr_array_index (array_tmp, i);
+		if (timeval_now.tv_sec - zif_package_get_time_file (package) < diff_secs)
+			g_ptr_array_add (array, g_object_ref (package));
+	}
+	g_debug ("added %i newest packages", array->len);
+out:
+	if (array_tmp != NULL)
+		g_ptr_array_unref (array_tmp);
+	return array;
+}
+
+/**
+ * pk_backend_create_meta_package_for_category:
+ */
+static ZifPackage *
+pk_backend_create_meta_package_for_category (GPtrArray *store_array,
+					     ZifCategory *cat,
+					     ZifState *state,
+					     GError **error)
+{
+	const gchar *to_array[] = { NULL, NULL };
+	gboolean ret;
+	gchar *package_id = NULL;
+	GPtrArray *array_packages;
+	guint j;
+	PkInfoEnum info = PK_INFO_ENUM_COLLECTION_INSTALLED;
+	ZifPackage *package = NULL;
+	ZifPackage *package_tmp;
+	ZifString *string;
+
+	/* are all the packages in this group installed? */
+	to_array[0] = zif_category_get_id (cat);
+	array_packages = zif_store_array_search_category (store_array,
+							  (gchar**)to_array,
+							  state,
+							  error);
+	if (array_packages == NULL)
+		goto out;
+
+	/* if any are not installed, then this is not installed */
+	for (j=0; j<array_packages->len; j++) {
+		package_tmp = g_ptr_array_index (array_packages, j);
+		if (!zif_package_is_installed (package_tmp)) {
+			info = PK_INFO_ENUM_COLLECTION_AVAILABLE;
+			g_debug ("%s is not installed, so marking as not installed %s collection",
+				 zif_package_get_id (package_tmp),
+				 zif_category_get_id (cat));
+			break;
+		}
+	}
+
+	/* fake something */
+	package_id = g_strdup_printf ("%s;;;meta",
+				      zif_category_get_id (cat));
+	package = zif_package_new ();
+	ret = zif_package_set_id (package, package_id, NULL);
+	if (!ret) {
+		g_object_unref (package);
+		package = NULL;
+		goto out;
+	}
+
+	/* set summary */
+	string = zif_string_new (zif_category_get_name (cat));
+	zif_package_set_summary (package, string);
+	zif_string_unref (string);
+
+	/* map to simple binary installed value */
+	zif_package_set_installed (package, (info == PK_INFO_ENUM_COLLECTION_INSTALLED));
+
+	/* add to results */
+	/* TODO: make a proper property */
+	g_object_set_data (G_OBJECT(package), "kind", (gpointer)pk_info_enum_to_string (info));
+out:
+	if (array_packages != NULL)
+		g_ptr_array_unref (array_packages);
+	g_free (package_id);
+	return package;
+}
+
+/**
+ * pk_backend_search_collections:
+ */
+static GPtrArray *
+pk_backend_search_collections (GPtrArray *store_array,
+			       ZifState *state,
+			       GError **error)
+{
+	gboolean ret;
+	gchar *package_id;
+	GError *error_local = NULL;
+	GPtrArray *array = NULL;
+	GPtrArray *array_tmp;
+	guint i;
+	ZifCategory *cat;
+	ZifPackage *package;
+	ZifState *state_local;
+	ZifState *state_loop;
+
+	/* set steps */
+	ret = zif_state_set_steps (state,
+				   NULL,
+				   50, /* get categories */
+				   50, /* generate fake packages */
+				   -1);
+	g_assert (ret);
+
+	/* get sorted list of unique categories */
+	state_local = zif_state_get_child (state);
+	array_tmp = zif_store_array_get_categories (store_array,
+						    state_local,
+						    error);
+	if (array_tmp == NULL)
+		goto out;
+
+	/* done */
+	ret = zif_state_done (state, error);
+	if (!ret)
+		goto out;
+
+	/* set steps */
+	state_local = zif_state_get_child (state);
+	zif_state_set_number_steps (state_local, array_tmp->len);
+
+	/* generate fake packages */
+	array = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
+	for (i=0; i<array_tmp->len; i++) {
+		cat = g_ptr_array_index (array_tmp, i);
+
+		/* ignore top level categories */
+		if (zif_category_get_parent_id (cat) == NULL)
+			continue;
+
+		/* fake something here */
+		state_loop = zif_state_get_child (state_local);
+		package = pk_backend_create_meta_package_for_category (store_array,
+								       cat,
+								       state_loop,
+								       &error_local);
+		if (package != NULL) {
+			g_ptr_array_add (array, g_object_ref (package));
+		} else {
+			g_warning ("failed to add id %s: %s",
+				   package_id,
+				   error_local->message);
+			g_clear_error (&error_local);
+		}
+
+		/* done */
+		ret = zif_state_done (state_local, error);
+		if (!ret)
+			goto out;
+
+		g_object_unref (package);
+	}
+
+	/* done */
+	ret = zif_state_done (state, error);
+	if (!ret)
+		goto out;
+out:
+	if (array_tmp != NULL)
+		g_ptr_array_unref (array_tmp);
+	return array;
+}
+
+/**
+ * pk_backend_get_cat_for_id:
+ */
+static ZifCategory *
+pk_backend_get_cat_for_id (GPtrArray *store_array,
+			   const gchar *id,
+			   ZifState *state,
+			   GError **error)
+{
+	GPtrArray *array = NULL;
+	ZifCategory *cat = NULL;
+	ZifCategory *cat_tmp;
+	guint i;
+
+	/* get all cats */
+	array = zif_store_array_get_categories (store_array,
+						state,
+						error);
+	if (array == NULL)
+		goto out;
+
+	/* find one that matches */
+	for (i=0; i<array->len; i++) {
+		cat_tmp = g_ptr_array_index (array, i);
+		if (g_strcmp0 (zif_category_get_id (cat_tmp), id) == 0) {
+			cat = g_object_ref (cat_tmp);
+			break;
+		}
+	}
+
+	/* nothing found, so set error */
+	if (cat == NULL)
+		g_set_error (error, 1, 0,
+			     "no category %s found",
+			     id);
+out:
+	if (array != NULL)
+		g_ptr_array_unref (array);
+	return cat;
+}
+
+/**
+ * pk_backend_resolve_groups:
+ */
+static GPtrArray *
+pk_backend_resolve_groups (GPtrArray *store_array,
+			   gchar **search,
+			   ZifState *state,
+			   GError **error)
+{
+	gboolean ret;
+	GError *error_local = NULL;
+	GPtrArray *array = NULL;
+	GPtrArray *array_retval = NULL;
+	guint i;
+	ZifCategory *cat;
+	ZifPackage *package;
+	ZifState *state_local;
+	ZifState *state_loop;
+
+	/* set steps */
+	zif_state_set_number_steps (state, g_strv_length (search));
+
+	/* resolve all the groups */
+	array = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
+	for (i=0; search[i] != NULL; i++) {
+		state_local = zif_state_get_child (state);
+
+		/* set steps */
+		ret = zif_state_set_steps (state,
+					   NULL,
+					   50, /* get category */
+					   50, /* create metapackage */
+					   -1);
+		g_assert (ret);
+
+		/* get the category */
+		state_loop = zif_state_get_child (state_local);
+		cat = pk_backend_get_cat_for_id (store_array,
+						 search[i]+1,
+						 state_loop,
+						 &error_local);
+		if (cat == NULL) {
+			g_debug ("group %s not found: %s",
+				 search[i],
+				 error_local->message);
+			g_clear_error (&error_local);
+
+			/* this part done */
+			ret = zif_state_finished (state_loop, error);
+			if (!ret)
+				goto out;
+			ret = zif_state_done (state_local, error);
+			if (!ret)
+				goto out;
+		} else {
+			ret = zif_state_done (state_local, error);
+			if (!ret)
+				goto out;
+
+			/* fake something here */
+			state_loop = zif_state_get_child (state_local);
+			package = pk_backend_create_meta_package_for_category (store_array,
+									       cat,
+									       state_loop,
+									       &error_local);
+			if (package != NULL) {
+				g_ptr_array_add (array, package);
+			} else {
+				g_warning ("failed to add id %s: %s",
+					   zif_category_get_id (cat),
+					   error_local->message);
+				g_clear_error (&error_local);
+				ret = zif_state_finished (state_loop, error);
+			}
+		}
+
+		/* this part done */
+		ret = zif_state_done (state_local, error);
+		if (!ret)
+			goto out;
+		ret = zif_state_done (state, error);
+		if (!ret)
+			goto out;
+	}
+
+	/* success */
+	array_retval = g_ptr_array_ref (array);
+out:
+	if (array != NULL)
+		g_ptr_array_unref (array);
+	return array_retval;
+}
+
+/**
+ * pk_backend_what_provides_helper:
+ */
+static GPtrArray *
+pk_backend_what_provides_helper (GPtrArray *store_array,
+				 gchar **search,
+				 ZifState *state,
+				 GError **error)
+{
+	gboolean ret;
+	GPtrArray *array = NULL;
+	GPtrArray *array_retval = NULL;
+	GPtrArray *depend_array = NULL;
+	guint i;
+	ZifDepend *depend;
+	ZifState *state_local;
+
+	/* set steps */
+	ret = zif_state_set_steps (state,
+				   NULL,
+				   50, /* parse depends */
+				   50, /* do the query */
+				   -1);
+	g_assert (ret);
+
+	/* resolve all the depends */
+	state_local = zif_state_get_child (state);
+	zif_state_set_number_steps (state_local, g_strv_length (search));
+	depend_array = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
+	for (i=0; search[i] != NULL; i++) {
+		state_local = zif_state_get_child (state);
+
+		/* parse this depend */
+		depend = zif_depend_new ();
+		g_ptr_array_add (depend_array, depend);
+		ret = zif_depend_parse_description (depend, search[i], error);
+		if (!ret)
+			goto out;
+
+		/* this part done */
+		ret = zif_state_done (state_local, error);
+		if (!ret)
+			goto out;
+	}
+
+	/* this part done */
+	ret = zif_state_done (state, error);
+	if (!ret)
+		goto out;
+
+	/* find what provides this depend */
+	state_local = zif_state_get_child (state);
+	array = zif_store_array_what_provides (store_array,
+					       depend_array,
+					       state_local,
+					       error);
+	g_object_unref (depend);
+	if (array == NULL)
+		goto out;
+
+	/* this part done */
+	ret = zif_state_done (state, error);
+	if (!ret)
+		goto out;
+
+	/* success */
+	array_retval = g_ptr_array_ref (array);
+out:
+	if (array != NULL)
+		g_ptr_array_unref (array);
+	if (depend_array != NULL)
+		g_ptr_array_unref (depend_array);
+	return array_retval;
+}
+
+/**
+ * pk_backend_search_thread:
+ */
+static gboolean
+pk_backend_search_thread (PkBackend *backend)
+{
+	gboolean ret;
+	gchar **search;
+	GError *error = NULL;
+	GPtrArray *array = NULL;
+	GPtrArray *result;
+	GPtrArray *store_array = NULL;
+	guint i;
+	guint recent;
+	PkBitfield filters;
+	PkRoleEnum role;
+	ZifState *state_local;
+
+	filters = (PkBitfield) pk_backend_get_uint (backend, "filters");
+	role = pk_backend_get_role (backend);
+
+	pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
+	pk_backend_set_percentage (backend, 0);
+
+	/* set steps */
+	ret = zif_state_set_steps (priv->state,
+				   NULL,
+				   2, /* get default stores */
+				   90, /* do the search */
+				   6, /* filter */
+				   2, /* emit */
+				   -1);
+	g_assert (ret);
+
+	/* get default store_array */
+	state_local = zif_state_get_child (priv->state);
+	store_array = pk_backend_get_store_array_for_filter (backend,
+							     filters,
+							     state_local,
+							     &error);
+	if (store_array == NULL) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_INTERNAL_ERROR,
+				       "failed to get stores: %s",
+				       error->message);
+		g_error_free (error);
+		goto out;
+	}
+
+	/* this section done */
+	ret = zif_state_done (priv->state, &error);
+	if (!ret) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+				       "cancelled: %s",
+				       error->message);
+		g_error_free (error);
+		goto out;
+	}
+	zif_state_set_error_handler (priv->state, (ZifStateErrorHandlerCb) pk_backend_error_handler_cb, backend);
+
+	/* do get action */
+	if (role == PK_ROLE_ENUM_GET_PACKAGES) {
+		state_local = zif_state_get_child (priv->state);
+		array = zif_store_array_get_packages (store_array, state_local, &error);
+		if (array == NULL) {
+			pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_INTERNAL_ERROR,
+				       "failed to get packages: %s", error->message);
+			g_error_free (error);
+			goto out;
+		}
+	} else {
+		/* treat these all the same */
+		search = pk_backend_get_strv (backend, "search");
+		if (search == NULL) {
+			pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_INTERNAL_ERROR,
+					       "failed to get 'search' for %s", pk_role_enum_to_string (role));
+			goto out;
+		}
+		array = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
+
+		/* do OR search */
+		state_local = zif_state_get_child (priv->state);
+		if (role == PK_ROLE_ENUM_SEARCH_NAME) {
+			array = zif_store_array_search_name (store_array, search, state_local, &error);
+		} else if (role == PK_ROLE_ENUM_SEARCH_DETAILS) {
+			array = zif_store_array_search_details (store_array, search, state_local, &error);
+		} else if (role == PK_ROLE_ENUM_SEARCH_GROUP) {
+			gchar **search_stripped;
+			guint search_entries;
+
+			/* if the search temp is prefixed with '@' then it is a
+			 * category search, and we have to strip it */
+			if (search[0][0] == '@') {
+				search_entries = g_strv_length (search);
+				search_stripped = g_new0 (gchar *, search_entries + 1);
+				for (i=0; i < search_entries; i++)
+					search_stripped[i] = g_strdup (&search[i][1]);
+				array = zif_store_array_search_category (store_array, search_stripped, state_local, &error);
+				g_strfreev (search_stripped);
+			} else if (g_strcmp0 (search[0], "newest") == 0) {
+				recent = zif_config_get_uint (priv->config, "recent", &error);
+				array = pk_backend_search_newest (store_array, state_local, recent, &error);
+				if (array == NULL) {
+					pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_INTERNAL_ERROR,
+				       "failed to get packages: %s", error->message);
+					g_error_free (error);
+					goto out;
+				}
+			} else if (g_strcmp0 (search[0], "collections") == 0) {
+				array = pk_backend_search_collections (store_array, state_local, &error);
+				if (array == NULL) {
+					pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_INTERNAL_ERROR,
+				       "failed to get packages: %s", error->message);
+					g_error_free (error);
+					goto out;
+				}
+			} else {
+				array = zif_store_array_search_group (store_array, search, state_local, &error);
+			}
+		} else if (role == PK_ROLE_ENUM_SEARCH_FILE) {
+			array = zif_store_array_search_file (store_array, search, state_local, &error);
+		} else if (role == PK_ROLE_ENUM_RESOLVE) {
+			if (search[0][0] == '@') {
+				/* this is a group */
+				array = pk_backend_resolve_groups (store_array, search, state_local, &error);
+			} else {
+				array = zif_store_array_resolve (store_array, search, state_local, &error);
+			}
+		} else if (role == PK_ROLE_ENUM_WHAT_PROVIDES) {
+			array = pk_backend_what_provides_helper (store_array, search, state_local, &error);
+		}
+		if (array == NULL) {
+			pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_INTERNAL_ERROR,
+				       "failed to search: %s", error->message);
+			g_error_free (error);
+			goto out;
+		}
+	}
+
+	/* this section done */
+	ret = zif_state_done (priv->state, &error);
+	if (!ret) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+				       "cancelled: %s",
+				       error->message);
+		g_error_free (error);
+		goto out;
+	}
+
+	/* filter */
+	result = pk_backend_filter_package_array (array, filters);
+
+	/* this section done */
+	ret = zif_state_done (priv->state, &error);
+	if (!ret) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+				       "cancelled: %s",
+				       error->message);
+		g_error_free (error);
+		goto out;
+	}
+
+	/* done */
+	pk_backend_set_percentage (backend, 100);
+
+	/* emit */
+	state_local = zif_state_get_child (priv->state);
+	pk_backend_emit_package_array (backend, result, state_local);
+
+	/* this section done */
+	ret = zif_state_done (priv->state, &error);
+	if (!ret) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+				       "cancelled: %s",
+				       error->message);
+		g_error_free (error);
+		goto out;
+	}
+out:
+	if (store_array != NULL)
+		g_ptr_array_unref (store_array);
+	if (array != NULL)
+		g_ptr_array_unref (array);
+	pk_backend_finished (backend);
+	return TRUE;
+}
+
+/**
+ * pk_backend_enable_media_repo:
+ */
+static void
+pk_backend_enable_media_repo (gboolean enabled)
+{
+	gboolean ret;
+	GError *error = NULL;
+	ZifState *state;
+	ZifStoreRemote *repo = NULL;
+
+	/* find the right repo */
+	state = zif_state_new ();
+	zif_state_set_cancellable (state, zif_state_get_cancellable (priv->state));
+	repo = zif_repos_get_store (priv->repos,
+				    "InstallMedia",
+				    state,
+				    &error);
+	if (repo == NULL) {
+		g_debug ("failed to find install-media repo: %s", error->message);
+		g_error_free (error);
+		goto out;
+	}
+
+	/* set the state */
+	ret = zif_store_remote_set_enabled (repo, enabled, &error);
+	if (!ret) {
+		g_debug ("failed to set enable: %s", error->message);
+		g_error_free (error);
+		goto out;
+	}
+	g_debug ("%s InstallMedia", enabled ? "enabled" : "disabled");
+out:
+	g_object_unref (state);
+	if (repo != NULL)
+		g_object_unref (repo);
+}
+
+/**
+ * pk_backend_mount_add:
+ */
+static void
+pk_backend_mount_add (GMount *mount, gpointer user_data)
+{
+	GFile *root;
+	GFile *repo;
+	GFile *dest;
+	gchar *root_path;
+	gchar *repo_path;
+	gboolean ret;
+	GError *error = NULL;
+
+	/* check if any installed media is an install disk */
+	root = g_mount_get_root (mount);
+	root_path = g_file_get_path (root);
+	repo_path = g_build_filename (root_path, "media.repo", NULL);
+	repo = g_file_new_for_path (repo_path);
+	dest = g_file_new_for_path (PACKAGE_MEDIA_REPO_FILENAME);
+
+	/* media.repo exists */
+	ret = g_file_query_exists (repo, NULL);
+	g_debug ("checking for %s: %s", repo_path, ret ? "yes" : "no");
+	if (!ret)
+		goto out;
+
+	/* copy to the system repo dir */
+	ret = g_file_copy (repo, dest, G_FILE_COPY_OVERWRITE, NULL, NULL, NULL, &error);
+	if (!ret) {
+		g_warning ("failed to copy: %s", error->message);
+		g_error_free (error);
+	}
+out:
+	g_free (root_path);
+	g_free (repo_path);
+	g_object_unref (dest);
+	g_object_unref (root);
+	g_object_unref (repo);
+}
+
+/**
+ * pk_backend_finished_cb:
+ **/
+static void
+pk_backend_finished_cb (PkBackend *backend, PkExitEnum exit_enum, gpointer user_data)
+{
+	/* disable media repo */
+	pk_backend_enable_media_repo (FALSE);
+}
+
+/**
+ * pk_backend_status_changed_cb:
+ **/
+static void
+pk_backend_status_changed_cb (PkBackend *backend, PkStatusEnum status, gpointer user_data)
+{
+	if (status != PK_STATUS_ENUM_WAIT)
+		return;
+
+	/* enable media repo */
+	pk_backend_enable_media_repo (TRUE);
+}
+
+/**
+ * pk_backend_state_action_changed_cb:
+ **/
+static void
+pk_backend_state_action_changed_cb (ZifState *state, ZifStateAction action, const gchar *action_hint, PkBackend *backend)
+{
+	PkStatusEnum status = PK_STATUS_ENUM_UNKNOWN;
+
+	/* ignore this */
+	if (action == ZIF_STATE_ACTION_UNKNOWN)
+		goto out;
+
+	/* try to map the ZifStateAction to a PkStatusEnum */
+	if (action == ZIF_STATE_ACTION_DOWNLOADING) {
+		if (zif_package_id_check (action_hint)) {
+			status = PK_STATUS_ENUM_DOWNLOAD;
+			pk_backend_package (backend,
+					    PK_INFO_ENUM_DOWNLOADING,
+					    action_hint,
+					    "");
+			goto out;
+		}
+		if (g_strrstr (action_hint, "repomd") != NULL)
+			status = PK_STATUS_ENUM_DOWNLOAD_REPOSITORY;
+		else if (g_strrstr (action_hint, "primary") != NULL)
+			status = PK_STATUS_ENUM_DOWNLOAD_PACKAGELIST;
+		else if (g_strrstr (action_hint, "filelist") != NULL)
+			status = PK_STATUS_ENUM_DOWNLOAD_FILELIST;
+		else if (g_strrstr (action_hint, "changelog") != NULL)
+			status = PK_STATUS_ENUM_DOWNLOAD_CHANGELOG;
+		else if (g_strrstr (action_hint, "comps") != NULL)
+			status = PK_STATUS_ENUM_DOWNLOAD_GROUP;
+		else if (g_strrstr (action_hint, "updatinfo") != NULL)
+			status = PK_STATUS_ENUM_DOWNLOAD_UPDATEINFO;
+		goto out;
+	}
+
+	/* general cache loading */
+	if (action == ZIF_STATE_ACTION_CHECKING ||
+	    action == ZIF_STATE_ACTION_LOADING_REPOS ||
+	    action == ZIF_STATE_ACTION_DECOMPRESSING) {
+		status = PK_STATUS_ENUM_LOADING_CACHE;
+		goto out;
+	}
+
+	/* package install */
+	if (action == ZIF_STATE_ACTION_INSTALLING) {
+		status = PK_STATUS_ENUM_INSTALL;
+		pk_backend_package (backend,
+				    PK_INFO_ENUM_INSTALLING,
+				    action_hint,
+				    "");
+		goto out;
+	}
+
+	/* package remove */
+	if (action == ZIF_STATE_ACTION_REMOVING) {
+		status = PK_STATUS_ENUM_REMOVE;
+		pk_backend_package (backend,
+				    PK_INFO_ENUM_REMOVING,
+				    action_hint,
+				    "");
+		goto out;
+	}
+
+	/* package update */
+	if (action == ZIF_STATE_ACTION_UPDATING) {
+		status = PK_STATUS_ENUM_UPDATE;
+		pk_backend_package (backend,
+				    PK_INFO_ENUM_UPDATING,
+				    action_hint,
+				    "");
+		goto out;
+	}
+
+	/* package update */
+	if (action == ZIF_STATE_ACTION_CLEANING) {
+		status = PK_STATUS_ENUM_CLEANUP;
+		pk_backend_package (backend,
+				    PK_INFO_ENUM_CLEANUP,
+				    action_hint,
+				    "");
+		goto out;
+	}
+
+	/* rpm test commit */
+	if (action == ZIF_STATE_ACTION_TEST_COMMIT) {
+		status = PK_STATUS_ENUM_TEST_COMMIT;
+		goto out;
+	}
+
+	/* depsolving */
+	if (action == ZIF_STATE_ACTION_DEPSOLVING_CONFLICTS ||
+	    action == ZIF_STATE_ACTION_DEPSOLVING_INSTALL ||
+	    action == ZIF_STATE_ACTION_DEPSOLVING_REMOVE ||
+	    action == ZIF_STATE_ACTION_DEPSOLVING_UPDATE) {
+		status = PK_STATUS_ENUM_DEP_RESOLVE;
+		goto out;
+	}
+
+out:
+	if (status != PK_STATUS_ENUM_UNKNOWN)
+		pk_backend_set_status (backend, status);
+}
+
+/**
+ * pk_backend_initialize:
+ * This should only be run once per backend load, i.e. not every transaction
+ */
+void
+pk_backend_initialize (PkBackend *backend)
+{
+	gboolean ret;
+	gchar *config_file = NULL;
+	gchar *reposdir = NULL;
+	GError *error = NULL;
+	GFile *file = NULL;
+	GList *mounts;
+
+	/* use logging */
+	pk_debug_add_log_domain (G_LOG_DOMAIN);
+	pk_debug_add_log_domain ("Zif");
+
+	/* create private area */
+	priv = g_new0 (PkBackendYumPrivate, 1);
+
+	/* connect to finished, so we can clean up */
+	priv->signal_finished =
+		g_signal_connect (backend, "finished",
+				  G_CALLBACK (pk_backend_finished_cb), NULL);
+	priv->signal_status =
+		g_signal_connect (backend, "status-changed",
+				  G_CALLBACK (pk_backend_status_changed_cb), NULL);
+
+	/* coldplug the mounts */
+	priv->volume_monitor = g_volume_monitor_get ();
+	mounts = g_volume_monitor_get_mounts (priv->volume_monitor);
+	g_list_foreach (mounts, (GFunc) pk_backend_mount_add, NULL);
+	g_list_foreach (mounts, (GFunc) g_object_unref, NULL);
+	g_list_free (mounts);
+
+	/* init rpm */
+	zif_init ();
+
+	/* TODO: hook up errors */
+	priv->cancellable = g_cancellable_new ();
+
+	/* ZifState */
+	priv->state = zif_state_new ();
+	g_signal_connect (priv->state, "percentage-changed",
+			  G_CALLBACK (pk_backend_state_percentage_changed_cb),
+			  backend);
+	g_signal_connect (priv->state, "subpercentage-changed",
+			  G_CALLBACK (pk_backend_state_subpercentage_changed_cb),
+			  backend);
+	g_signal_connect (priv->state, "action-changed",
+			  G_CALLBACK (pk_backend_state_action_changed_cb),
+			  backend);
+
+	/* we don't want to enable this for normal runtime */
+	zif_state_set_enable_profile (priv->state, TRUE);
+
+	/* ZifConfig */
+	priv->config = zif_config_new ();
+	ret = zif_config_set_filename (priv->config, NULL, &error);
+	if (!ret) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_FAILED_CONFIG_PARSING,
+				       "failed to set config: %s",
+				       error->message);
+		g_error_free (error);
+		goto out;
+	}
+
+	/* setup a file monitor on the repos directory */
+	reposdir = zif_config_get_string (priv->config, "reposdir", NULL);
+	file = g_file_new_for_path (reposdir);
+	priv->monitor = g_file_monitor_directory (file,
+						  G_FILE_MONITOR_NONE,
+						  NULL,
+						  &error);
+	if (priv->monitor != NULL) {
+		g_signal_connect (priv->monitor, "changed",
+				  G_CALLBACK (pk_backend_yum_repos_changed_cb), backend);
+	} else {
+		g_warning ("failed to setup monitor: %s",
+			   error->message);
+		g_error_free (error);
+	}
+
+	/* ZifLock */
+	priv->lock = zif_lock_new ();
+
+	/* ZifRelease */
+	priv->release = zif_release_new ();
+
+	/* ZifStoreLocal */
+	priv->store_local = zif_store_local_new ();
+
+	/* ZifTransaction */
+	priv->transaction = zif_transaction_new ();
+	zif_transaction_set_store_local (priv->transaction, priv->store_local);
+
+	/* ZifRepos */
+	priv->repos = zif_repos_new ();
+	ret = zif_repos_set_repos_dir (priv->repos, NULL, &error);
+	if (!ret) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_REPO_CONFIGURATION_ERROR,
+				       "failed to set repos dir: %s",
+				       error->message);
+		g_error_free (error);
+		goto out;
+	}
+
+	/* ZifGroups: FIXME: add this to config */
+	priv->groups = zif_groups_new ();
+	ret = zif_groups_set_mapping_file (priv->groups,
+					   DATADIR "/PackageKit/helpers/zif/zif-comps-groups.conf",
+					   &error);
+	if (!ret) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_GROUP_LIST_INVALID,
+				       "failed to set mapping file: %s",
+				       error->message);
+		g_error_free (error);
+		goto out;
+	}
+out:
+	g_free (reposdir);
+	g_free (config_file);
+	if (file != NULL)
+		g_object_unref (file);
+}
+
+/**
+ * pk_backend_destroy:
+ * This should only be run once per backend load, i.e. not every transaction
+ */
+void
+pk_backend_destroy (PkBackend *backend)
+{
+	if (priv->monitor != NULL)
+		g_object_unref (priv->monitor);
+	g_signal_handler_disconnect (backend, priv->signal_finished);
+	g_signal_handler_disconnect (backend, priv->signal_status);
+	if (priv->config != NULL)
+		g_object_unref (priv->config);
+	if (priv->release != NULL)
+		g_object_unref (priv->release);
+	if (priv->transaction != NULL)
+		g_object_unref (priv->transaction);
+	if (priv->state != NULL)
+		g_object_unref (priv->state);
+	if (priv->repos != NULL)
+		g_object_unref (priv->repos);
+	if (priv->groups != NULL)
+		g_object_unref (priv->groups);
+	if (priv->store_local != NULL)
+		g_object_unref (priv->store_local);
+	if (priv->lock != NULL)
+		g_object_unref (priv->lock);
+	if (priv->volume_monitor != NULL)
+		g_object_unref (priv->volume_monitor);
+	g_free (priv);
+}
+
+/**
+ * pk_backend_get_groups:
+ */
+PkBitfield
+pk_backend_get_groups (PkBackend *backend)
+{
+	const gchar *group_str;
+	GError *error = NULL;
+	GPtrArray *array = NULL;
+	guint i;
+	PkBitfield groups = 0;
+
+	/* get the dynamic group list */
+	array = zif_groups_get_groups (priv->groups, &error);
+	if (array == NULL) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_GROUP_LIST_INVALID,
+				       "failed to get the list of groups: %s",
+				       error->message);
+		g_error_free (error);
+		goto out;
+	}
+
+	/* convert to a bitfield */
+	for (i=0; i<array->len; i++) {
+		group_str = g_ptr_array_index (array, i);
+		pk_bitfield_add (groups,
+				 pk_group_enum_from_string (group_str));
+	}
+
+	/* add the virtual groups */
+	pk_bitfield_add (groups, PK_GROUP_ENUM_COLLECTIONS);
+	pk_bitfield_add (groups, PK_GROUP_ENUM_NEWEST);
+out:
+	return groups;
+}
+
+/**
+ * pk_backend_get_filters:
+ */
+PkBitfield
+pk_backend_get_filters (PkBackend *backend)
+{
+	return pk_bitfield_from_enums (
+		PK_FILTER_ENUM_GUI,
+		PK_FILTER_ENUM_INSTALLED,
+		PK_FILTER_ENUM_DEVELOPMENT,
+		PK_FILTER_ENUM_BASENAME,
+		PK_FILTER_ENUM_FREE,
+		PK_FILTER_ENUM_NEWEST,
+		PK_FILTER_ENUM_ARCH,
+		-1);
+}
+
+/**
+ * pk_backend_get_mime_types:
+ */
+gchar *
+pk_backend_get_mime_types (PkBackend *backend)
+{
+	return g_strdup ("application/x-rpm;application/x-servicepack");
+}
+
+/**
+ * pk_backend_cancel:
+ */
+void
+pk_backend_cancel (PkBackend *backend)
+{
+	/* try to cancel the thread */
+	g_cancellable_cancel (priv->cancellable);
+}
+
+/**
+ * pk_backend_download_packages_thread:
+ */
+static gboolean
+pk_backend_download_packages_thread (PkBackend *backend)
+{
+	const gchar *directory = pk_backend_get_string (backend, "directory");
+	const gchar *filename;
+	gboolean ret;
+	gchar *basename;
+	gchar **package_ids = pk_backend_get_strv (backend, "package_ids");
+	gchar *path;
+	GError *error = NULL;
+	GPtrArray *packages = NULL;
+	GPtrArray *store_array = NULL;
+	guint i;
+	guint len;
+	ZifPackage *package;
+	ZifState *state_local;
+	ZifState *state_loop;
+	ZifState *state_tmp;
+
+	len = g_strv_length (package_ids);
+	ret = zif_state_set_steps (priv->state,
+				   NULL,
+				   2, /* get default stores */
+				   8, /* find packages */
+				   90, /* download */
+				   -1);
+	g_assert (ret);
+
+	/* find all the packages */
+	packages = zif_object_array_new ();
+	state_local = zif_state_get_child (priv->state);
+	store_array = zif_store_array_new ();
+	ret = zif_store_array_add_remote_enabled (store_array,
+						  state_local,
+						  &error);
+	if (!ret) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_INTERNAL_ERROR,
+				       "failed to add enabled stores: %s",
+				       error->message);
+		g_error_free (error);
+		goto out;
+	}
+
+	/* this section done */
+	ret = zif_state_done (priv->state, &error);
+	if (!ret) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+				       "cancelled: %s",
+				       error->message);
+		g_error_free (error);
+		goto out;
+	}
+
+	/* find */
+	pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
+	state_local = zif_state_get_child (priv->state);
+	zif_state_set_number_steps (state_local, g_strv_length (package_ids));
+	for (i=0; package_ids[i] != NULL; i++) {
+
+		/* find packages */
+		state_loop = zif_state_get_child (state_local);
+		package = zif_store_array_find_package (store_array,
+							package_ids[i],
+							state_loop,
+							&error);
+		if (package == NULL) {
+			pk_backend_error_code (backend,
+					       PK_ERROR_ENUM_PACKAGE_NOT_FOUND,
+					       "failed to find %s: %s",
+					       package_ids[i],
+					       error->message);
+			g_error_free (error);
+			goto out;
+		}
+
+		/* this section done */
+		ret = zif_state_done (state_local, &error);
+		if (!ret) {
+			pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+				       "cancelled: %s",
+				       error->message);
+			g_error_free (error);
+			goto out;
+		}
+
+		zif_object_array_add (packages, package);
+		g_object_unref (package);
+	}
+
+	/* this section done */
+	ret = zif_state_done (priv->state, &error);
+	if (!ret) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+				       "cancelled: %s",
+				       error->message);
+		g_error_free (error);
+		goto out;
+	}
+
+	/* download list */
+	pk_backend_set_status (backend, PK_STATUS_ENUM_DOWNLOAD);
+	state_local = zif_state_get_child (priv->state);
+	zif_state_set_number_steps (state_local, packages->len);
+	for (i=0; i<packages->len; i++) {
+		package = g_ptr_array_index (packages, i);
+
+		/* set steps */
+		state_loop = zif_state_get_child (state_local);
+		ret = zif_state_set_steps (state_loop,
+					   NULL,
+					   2, /* get filename */
+					   96, /* download */
+					   2, /* emit */
+					   -1);
+		g_assert (ret);
+
+		/* get filename */
+		state_tmp = zif_state_get_child (state_loop);
+		filename = zif_package_get_filename (package, state_tmp, &error);
+		if (filename == NULL) {
+			pk_backend_error_code (backend,
+					       PK_ERROR_ENUM_PACKAGE_DOWNLOAD_FAILED,
+					       "failed to get filename for %s: %s",
+					       zif_package_get_id (package),
+					       error->message);
+			g_error_free (error);
+			goto out;
+		}
+
+		/* this section done */
+		ret = zif_state_done (state_loop, &error);
+		if (!ret) {
+			pk_backend_error_code (backend,
+					       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+					       "cancelled: %s",
+					       error->message);
+			g_error_free (error);
+			goto out;
+		}
+
+		/* download */
+		state_tmp = zif_state_get_child (state_loop);
+		ret = zif_package_remote_download (ZIF_PACKAGE_REMOTE (package),
+						   directory,
+						   state_tmp,
+						   &error);
+		if (!ret) {
+			pk_backend_error_code (backend,
+					       PK_ERROR_ENUM_PACKAGE_DOWNLOAD_FAILED,
+					       "failed to download %s: %s",
+					       filename,
+					       error->message);
+			g_error_free (error);
+			goto out;
+		}
+
+		/* this section done */
+		ret = zif_state_done (state_loop, &error);
+		if (!ret) {
+			pk_backend_error_code (backend,
+					       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+					       "cancelled: %s",
+					       error->message);
+			g_error_free (error);
+			goto out;
+		}
+
+		/* send a signal for the daemon so the file is copied */
+		basename = g_path_get_basename (filename);
+		path = g_build_filename (directory, basename, NULL);
+		pk_backend_files (backend, zif_package_get_id (package), path);
+		g_free (basename);
+		g_free (path);
+
+		/* this section done */
+		ret = zif_state_done (state_loop, &error);
+		if (!ret) {
+			pk_backend_error_code (backend,
+					       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+					       "cancelled: %s",
+					       error->message);
+			g_error_free (error);
+			goto out;
+		}
+
+		/* this section done */
+		ret = zif_state_done (state_local, &error);
+		if (!ret) {
+			pk_backend_error_code (backend,
+					       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+					       "cancelled: %s",
+					       error->message);
+			g_error_free (error);
+			goto out;
+		}
+	}
+
+	/* this section done */
+	ret = zif_state_done (priv->state, &error);
+	if (!ret) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+				       "cancelled: %s",
+				       error->message);
+		g_error_free (error);
+		goto out;
+	}
+out:
+	pk_backend_finished (backend);
+	if (packages != NULL)
+		g_ptr_array_unref (packages);
+	if (store_array != NULL)
+		g_ptr_array_unref (store_array);
+	return TRUE;
+}
+
+/**
+ * pk_backend_get_depends_thread:
+ */
+static gboolean
+pk_backend_get_depends_thread (PkBackend *backend)
+{
+	gboolean ret;
+	gchar **package_ids = pk_backend_get_strv (backend, "package_ids");
+	PkBitfield filters = (PkBitfield) pk_backend_get_uint (backend, "filters");
+	GPtrArray *store_array = NULL;
+	ZifPackage *package;
+	ZifPackage *package_provide;
+	ZifState *state_local;
+	ZifState *state_loop;
+	const gchar *id;
+	guint i, j;
+	guint len;
+	GError *error = NULL;
+	GPtrArray *array = NULL;
+	GPtrArray *result;
+	GPtrArray *requires;
+	GPtrArray *provides;
+
+	len = g_strv_length (package_ids);
+
+	/* set steps */
+	ret = zif_state_set_steps (priv->state,
+				   NULL,
+				   2, /* get stores */
+				   94, /* what requires + provides */
+				   2, /* filter */
+				   2, /* emit */
+				   -1);
+	g_assert (ret);
+
+	/* find all the packages */
+	state_local = zif_state_get_child (priv->state);
+	store_array = pk_backend_get_store_array_for_filter (backend,
+							     0,
+							     state_local,
+							     &error);
+	if (store_array == NULL) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_INTERNAL_ERROR,
+				       "failed to get stores: %s", error->message);
+		g_error_free (error);
+		goto out;
+	}
+
+	/* this section done */
+	ret = zif_state_done (priv->state, &error);
+	if (!ret) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+				       "cancelled: %s",
+				       error->message);
+		g_error_free (error);
+		goto out;
+	}
+
+	/* new output array */
+	array = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
+
+	pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
+	for (i=0; package_ids[i] != NULL; i++) {
+		id = package_ids[i];
+
+		/* set up state */
+		state_local = zif_state_get_child (priv->state);
+		ret = zif_state_set_steps (state_local,
+					   NULL,
+					   50, /* find package */
+					   25, /* get requires */
+					   25, /* what provides */
+					   -1);
+		g_assert (ret);
+
+		/* find package */
+		state_loop = zif_state_get_child (state_local);
+		package = zif_store_array_find_package (store_array,
+							id,
+							state_loop,
+							&error);
+		if (package == NULL) {
+			pk_backend_error_code (backend,
+					       PK_ERROR_ENUM_PACKAGE_NOT_FOUND,
+					       "failed to find %s: %s",
+					       package_ids[i],
+					       error->message);
+			g_error_free (error);
+			goto out;
+		}
+
+		/* this section done */
+		ret = zif_state_done (state_local, &error);
+		if (!ret) {
+			pk_backend_error_code (backend,
+					       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+					       "cancelled: %s",
+					       error->message);
+			g_error_free (error);
+			goto out;
+		}
+
+		/* get requires */
+		state_loop = zif_state_get_child (state_local);
+		requires = zif_package_get_requires (package, state_loop, &error);
+		if (requires == NULL) {
+			pk_backend_error_code (backend,
+					       PK_ERROR_ENUM_PACKAGE_NOT_FOUND,
+						       "failed to get requires for %s: %s",
+						       package_ids[i], error->message);
+			g_error_free (error);
+			goto out;
+		}
+
+		/* this section done */
+		ret = zif_state_done (state_local, &error);
+		if (!ret) {
+			pk_backend_error_code (backend,
+					       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+					       "cancelled: %s",
+					       error->message);
+			g_error_free (error);
+			goto out;
+		}
+
+		/* match a package to each require */
+		state_loop = zif_state_get_child (state_local);
+		provides = zif_store_array_what_provides (store_array, requires, state_loop, &error);
+		if (provides == NULL) {
+			pk_backend_error_code (backend,
+					       PK_ERROR_ENUM_PACKAGE_NOT_FOUND,
+						       "failed to find provide for %s: %s",
+						       zif_depend_get_name (g_ptr_array_index (provides, 0)),
+						       error->message);
+			g_error_free (error);
+			goto out;
+		}
+
+		/* print all of them */
+		for (j=0;j<provides->len;j++) {
+			package_provide = g_ptr_array_index (provides, j);
+			g_ptr_array_add (array, g_object_ref (package_provide));
+		}
+		g_ptr_array_unref (provides);
+
+		/* this section done */
+		ret = zif_state_done (state_local, &error);
+		if (!ret) {
+			pk_backend_error_code (backend,
+					       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+					       "cancelled: %s",
+					       error->message);
+			g_error_free (error);
+			goto out;
+		}
+
+		/* free */
+		g_object_unref (package);
+	}
+
+	/* this section done */
+	ret = zif_state_done (priv->state, &error);
+	if (!ret) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+				       "cancelled: %s",
+				       error->message);
+		g_error_free (error);
+		goto out;
+	}
+
+	/* filter */
+	result = pk_backend_filter_package_array (array, filters);
+
+	/* this section done */
+	ret = zif_state_done (priv->state, &error);
+	if (!ret) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+				       "cancelled: %s",
+				       error->message);
+		g_error_free (error);
+		goto out;
+	}
+
+	/* done */
+	pk_backend_set_percentage (backend, 100);
+
+	/* emit */
+	state_local = zif_state_get_child (priv->state);
+	pk_backend_emit_package_array (backend, result, state_local);
+
+	/* this section done */
+	ret = zif_state_done (priv->state, &error);
+	if (!ret) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+				       "cancelled: %s",
+				       error->message);
+		g_error_free (error);
+		goto out;
+	}
+out:
+	if (array != NULL)
+		g_ptr_array_unref (array);
+	pk_backend_finished (backend);
+	if (store_array != NULL)
+		g_ptr_array_unref (store_array);
+	return TRUE;
+}
+
+/**
+ * pk_backend_get_requires_thread:
+ */
+static gboolean
+pk_backend_get_requires_thread (PkBackend *backend)
+{
+	gboolean ret;
+	gchar **package_ids = pk_backend_get_strv (backend, "package_ids");
+	PkBitfield filters = (PkBitfield) pk_backend_get_uint (backend, "filters");
+	GPtrArray *store_array = NULL;
+	ZifPackage *package;
+	ZifPackage *package_provide;
+	ZifState *state_local;
+	ZifState *state_loop;
+	const gchar *id;
+	guint i, j;
+	guint len;
+	GError *error = NULL;
+	GPtrArray *array = NULL;
+	GPtrArray *result;
+	GPtrArray *requires;
+	GPtrArray *provides;
+
+	len = g_strv_length (package_ids);
+
+	/* set steps */
+	ret = zif_state_set_steps (priv->state,
+				   NULL,
+				   2, /* get stores */
+				   94, /* what depends + provides */
+				   2, /* filter */
+				   2, /* emit */
+				   -1);
+	g_assert (ret);
+
+	/* find all the packages */
+	state_local = zif_state_get_child (priv->state);
+	store_array = pk_backend_get_store_array_for_filter (backend,
+							     0,
+							     state_local,
+							     &error);
+	if (store_array == NULL) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_INTERNAL_ERROR,
+				       "failed to get stores: %s", error->message);
+		g_error_free (error);
+		goto out;
+	}
+
+	/* this section done */
+	ret = zif_state_done (priv->state, &error);
+	if (!ret) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+				       "cancelled: %s",
+				       error->message);
+		g_error_free (error);
+		goto out;
+	}
+
+	/* new output array */
+	array = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
+
+	pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
+	for (i=0; package_ids[i] != NULL; i++) {
+		id = package_ids[i];
+
+		/* set up state */
+		state_local = zif_state_get_child (priv->state);
+		ret = zif_state_set_steps (state_local,
+					   NULL,
+					   50, /* find package */
+					   25, /* get requires */
+					   25, /* what provides */
+					   -1);
+		g_assert (ret);
+
+		/* find package */
+		state_loop = zif_state_get_child (state_local);
+		package = zif_store_array_find_package (store_array,
+							id,
+							state_loop,
+							&error);
+		if (package == NULL) {
+			pk_backend_error_code (backend,
+					       PK_ERROR_ENUM_PACKAGE_NOT_FOUND,
+					       "failed to find %s: %s",
+					       package_ids[i],
+					       error->message);
+			g_error_free (error);
+			goto out;
+		}
+
+		/* this section done */
+		ret = zif_state_done (state_local, &error);
+		if (!ret) {
+			pk_backend_error_code (backend,
+					       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+					       "cancelled: %s",
+					       error->message);
+			g_error_free (error);
+			goto out;
+		}
+
+		/* get requires */
+		state_loop = zif_state_get_child (state_local);
+		requires = zif_package_get_provides (package, state_loop, &error);
+		if (requires == NULL) {
+			pk_backend_error_code (backend,
+					       PK_ERROR_ENUM_PACKAGE_NOT_FOUND,
+						       "failed to get requires for %s: %s",
+						       package_ids[i], error->message);
+			g_error_free (error);
+			goto out;
+		}
+
+		/* this section done */
+		ret = zif_state_done (state_local, &error);
+		if (!ret) {
+			pk_backend_error_code (backend,
+					       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+					       "cancelled: %s",
+					       error->message);
+			g_error_free (error);
+			goto out;
+		}
+
+		/* match a package to each require */
+		state_loop = zif_state_get_child (state_local);
+		provides = zif_store_array_what_requires (store_array,
+							  requires,
+							  state_loop,
+							  &error);
+		if (provides == NULL) {
+			pk_backend_error_code (backend,
+					       PK_ERROR_ENUM_PACKAGE_NOT_FOUND,
+					       "failed to find provide for %s: %s",
+					       zif_depend_get_name (g_ptr_array_index (provides, 0)),
+					       error->message);
+			g_error_free (error);
+			goto out;
+		}
+
+		/* print all of them */
+		for (j=0;j<provides->len;j++) {
+			package_provide = g_ptr_array_index (provides, j);
+			g_ptr_array_add (array, g_object_ref (package_provide));
+		}
+		g_ptr_array_unref (provides);
+
+		/* this section done */
+		ret = zif_state_done (state_local, &error);
+		if (!ret) {
+			pk_backend_error_code (backend,
+					       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+					       "cancelled: %s",
+					       error->message);
+			g_error_free (error);
+			goto out;
+		}
+
+		/* free */
+		g_object_unref (package);
+	}
+
+	/* this section done */
+	ret = zif_state_done (priv->state, &error);
+	if (!ret) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+				       "cancelled: %s",
+				       error->message);
+		g_error_free (error);
+		goto out;
+	}
+
+	/* filter */
+	result = pk_backend_filter_package_array (array, filters);
+
+	/* this section done */
+	ret = zif_state_done (priv->state, &error);
+	if (!ret) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+				       "cancelled: %s",
+				       error->message);
+		g_error_free (error);
+		goto out;
+	}
+
+	/* done */
+	pk_backend_set_percentage (backend, 100);
+
+	/* emit */
+	state_local = zif_state_get_child (priv->state);
+	pk_backend_emit_package_array (backend, result, state_local);
+
+	/* this section done */
+	ret = zif_state_done (priv->state, &error);
+	if (!ret) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+				       "cancelled: %s",
+				       error->message);
+		g_error_free (error);
+		goto out;
+	}
+out:
+	if (array != NULL)
+		g_ptr_array_unref (array);
+	pk_backend_finished (backend);
+	if (store_array != NULL)
+		g_ptr_array_unref (store_array);
+	return TRUE;
+}
+
+/**
+ * pk_backend_get_details_thread:
+ */
+static gboolean
+pk_backend_get_details_thread (PkBackend *backend)
+{
+	const gchar *description;
+	const gchar *group_str;
+	const gchar *id;
+	const gchar *license;
+	const gchar *url;
+	gboolean ret;
+	gchar **package_ids = pk_backend_get_strv (backend, "package_ids");
+	GError *error = NULL;
+	GPtrArray *store_array = NULL;
+	guint64 size;
+	guint i;
+	guint len;
+	PkBitfield filters = PK_FILTER_ENUM_UNKNOWN;
+	PkGroupEnum group;
+	ZifPackage *package;
+	ZifState *state_local;
+	ZifState *state_loop;
+	ZifState *state_tmp;
+
+	len = g_strv_length (package_ids);
+
+	/* set steps */
+	ret = zif_state_set_steps (priv->state,
+				   NULL,
+				   4, /* get stores */
+				   96, /* get details */
+				   -1);
+	g_assert (ret);
+
+	/* find all the packages */
+	state_local = zif_state_get_child (priv->state);
+	if (pk_backend_is_all_installed (package_ids))
+		pk_bitfield_add (filters, PK_FILTER_ENUM_INSTALLED);
+	store_array = pk_backend_get_store_array_for_filter (backend,
+							     filters,
+							     state_local,
+							     &error);
+	if (store_array == NULL) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_INTERNAL_ERROR,
+				       "failed to get stores: %s",
+				       error->message);
+		g_error_free (error);
+		goto out;
+	}
+
+	/* this section done */
+	ret = zif_state_done (priv->state, &error);
+	if (!ret) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+				       "cancelled: %s",
+				       error->message);
+		g_error_free (error);
+		goto out;
+	}
+
+	state_local = zif_state_get_child (priv->state);
+	zif_state_set_number_steps (state_local,
+				    g_strv_length (package_ids));
+	pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
+	for (i=0; package_ids[i] != NULL; i++) {
+		id = package_ids[i];
+
+		/* set up state */
+		state_loop = zif_state_get_child (state_local);
+		ret = zif_state_set_steps (state_loop,
+					   NULL,
+					   80, /* find package */
+					   10, /* get licence */
+					   5, /* get group */
+					   1, /* get description */
+					   1, /* get url */
+					   1, /* get size */
+					   2, /* emit */
+					   -1);
+		g_assert (ret);
+
+		/* find package */
+		state_tmp = zif_state_get_child (state_loop);
+		package = zif_store_array_find_package (store_array,
+							id,
+							state_tmp,
+							&error);
+		if (package == NULL) {
+			pk_backend_error_code (backend,
+					       PK_ERROR_ENUM_PACKAGE_NOT_FOUND,
+					       "failed to find %s: %s",
+					       package_ids[i],
+					       error->message);
+			g_error_free (error);
+			goto out;
+		}
+
+		/* this section done */
+		ret = zif_state_done (state_loop, &error);
+		if (!ret) {
+			pk_backend_error_code (backend,
+					       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+					       "cancelled: %s",
+					       error->message);
+			g_error_free (error);
+			goto out;
+		}
+
+		/* get license */
+		state_tmp = zif_state_get_child (state_loop);
+		license = zif_package_get_license (package,
+						   state_tmp,
+						   NULL);
+
+		/* this section done */
+		ret = zif_state_done (state_loop, &error);
+		if (!ret) {
+			pk_backend_error_code (backend,
+					       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+					       "cancelled: %s",
+					       error->message);
+			g_error_free (error);
+			goto out;
+		}
+
+		/* get group */
+		state_tmp = zif_state_get_child (state_local);
+		group_str = zif_package_get_group (package, state_tmp, &error);
+
+		/* not being in a group is non-fatal */
+		if (group_str == NULL) {
+			g_warning ("failed to get group: %s",
+				   error->message);
+			g_clear_error (&error);
+		}
+		group = pk_group_enum_from_text (group_str);
+
+		/* this section done */
+		ret = zif_state_done (state_loop, &error);
+		if (!ret) {
+			pk_backend_error_code (backend,
+					       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+					       "cancelled: %s",
+					       error->message);
+			g_error_free (error);
+			goto out;
+		}
+
+		/* get description */
+		state_tmp = zif_state_get_child (state_loop);
+		description = zif_package_get_description (package,
+							   state_tmp,
+							   NULL);
+
+		/* this section done */
+		ret = zif_state_done (state_loop, &error);
+		if (!ret) {
+			pk_backend_error_code (backend,
+					       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+					       "cancelled: %s",
+					       error->message);
+			g_error_free (error);
+			goto out;
+		}
+
+		/* get url */
+		state_tmp = zif_state_get_child (state_local);
+		url = zif_package_get_url (package, state_tmp, NULL);
+
+		/* this section done */
+		ret = zif_state_done (state_loop, &error);
+		if (!ret) {
+			pk_backend_error_code (backend,
+					       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+					       "cancelled: %s",
+					       error->message);
+			g_error_free (error);
+			goto out;
+		}
+
+		/* get size */
+		state_tmp = zif_state_get_child (state_local);
+		size = zif_package_get_size (package, state_tmp, NULL);
+
+		/* this section done */
+		ret = zif_state_done (state_loop, &error);
+		if (!ret) {
+			pk_backend_error_code (backend,
+					       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+					       "cancelled: %s",
+					       error->message);
+			g_error_free (error);
+			goto out;
+		}
+
+		/* emit */
+		pk_backend_details (backend,
+				    package_ids[i],
+				    license,
+				    group,
+				    description,
+				    url,
+				    (gulong) size);
+
+		/* this section done */
+		ret = zif_state_done (state_loop, &error);
+		if (!ret) {
+			pk_backend_error_code (backend,
+					       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+					       "cancelled: %s",
+					       error->message);
+			g_error_free (error);
+			goto out;
+		}
+
+		/* this section done */
+		ret = zif_state_done (state_local, &error);
+		if (!ret) {
+			pk_backend_error_code (backend,
+					       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+					       "cancelled: %s",
+					       error->message);
+			g_error_free (error);
+			goto out;
+		}
+
+		/* free */
+		g_object_unref (package);
+	}
+
+	/* this section done */
+	ret = zif_state_done (priv->state, &error);
+	if (!ret) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+				       "cancelled: %s",
+				       error->message);
+		g_error_free (error);
+		goto out;
+	}
+out:
+	pk_backend_finished (backend);
+	if (store_array != NULL)
+		g_ptr_array_unref (store_array);
+	return TRUE;
+}
+
+/**
+  * pk_backend_get_distro_upgrades_thread:
+  */
+static gboolean
+pk_backend_get_distro_upgrades_thread (PkBackend *backend)
+{
+	gchar *distro_id;
+	GError *error = NULL;
+	GPtrArray *array = NULL;
+	guint i;
+	ZifUpgrade *upgrade;
+
+	/* one shot */
+	zif_state_reset (priv->state);
+
+	/* get the upgrades */
+	array = zif_release_get_upgrades_new (priv->release, priv->state, &error);
+	if (array == NULL) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_FAILED_CONFIG_PARSING,
+				       "could not get latest distro data : %s", error->message);
+		g_error_free (error);
+		goto out;
+	}
+
+	/* emit the results */
+	for (i=0; i<array->len; i++) {
+		upgrade = g_ptr_array_index (array, i);
+		if (!zif_upgrade_get_enabled (upgrade))
+			continue;
+		distro_id = g_strdup_printf ("fedora-%i", zif_upgrade_get_version (upgrade));
+		pk_backend_distro_upgrade (backend,
+					   zif_upgrade_get_stable (upgrade) ? PK_DISTRO_UPGRADE_ENUM_STABLE :
+									      PK_DISTRO_UPGRADE_ENUM_UNSTABLE,
+					   distro_id,
+					   zif_upgrade_get_id (upgrade));
+		g_free (distro_id);
+	}
+out:
+	pk_backend_finished (backend);
+	if (array != NULL)
+		g_ptr_array_unref (array);
+	return TRUE;
+}
+
+/**
+ * pk_backend_get_files_thread:
+ */
+static gboolean
+pk_backend_get_files_thread (PkBackend *backend)
+{
+	const gchar *file;
+	const gchar *id;
+	gboolean ret;
+	gchar **package_ids = pk_backend_get_strv (backend, "package_ids");
+	GError *error = NULL;
+	GPtrArray *files;
+	GPtrArray *store_array = NULL;
+	GString *files_str;
+	guint i, j;
+	guint len;
+	PkBitfield filters = PK_FILTER_ENUM_UNKNOWN;
+	ZifPackage *package;
+	ZifState *state_local;
+	ZifState *state_loop;
+	ZifState *state_tmp;
+
+	len = g_strv_length (package_ids);
+
+	/* set steps */
+	ret = zif_state_set_steps (priv->state,
+				   NULL,
+				   2, /* get stores */
+				   98, /* get files */
+				   -1);
+	g_assert (ret);
+
+	/* find all the packages */
+	state_local = zif_state_get_child (priv->state);
+	if (pk_backend_is_all_installed (package_ids))
+		pk_bitfield_add (filters, PK_FILTER_ENUM_INSTALLED);
+	store_array = pk_backend_get_store_array_for_filter (backend,
+							     filters,
+							     state_local,
+							     &error);
+	if (store_array == NULL) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_INTERNAL_ERROR,
+				       "failed to get stores: %s", error->message);
+		g_error_free (error);
+		goto out;
+	}
+
+	/* this section done */
+	ret = zif_state_done (priv->state, &error);
+	if (!ret) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+				       "cancelled: %s",
+				       error->message);
+		g_error_free (error);
+		goto out;
+	}
+
+	state_local = zif_state_get_child (priv->state);
+	zif_state_set_number_steps (state_local, g_strv_length (package_ids));
+	pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
+	for (i=0; package_ids[i] != NULL; i++) {
+		id = package_ids[i];
+		state_loop = zif_state_get_child (state_local);
+
+		/* set steps */
+		ret = zif_state_set_steps (state_loop,
+					   NULL,
+					   10, /* find package */
+					   90, /* get files & emit */
+					   -1);
+		g_assert (ret);
+
+		state_tmp = zif_state_get_child (state_loop);
+		package = zif_store_array_find_package (store_array,
+							id,
+							state_tmp,
+							&error);
+		if (package == NULL) {
+			pk_backend_error_code (backend,
+					       PK_ERROR_ENUM_PACKAGE_NOT_FOUND,
+					       "failed to find %s: %s",
+					       package_ids[i],
+					       error->message);
+			g_error_free (error);
+			goto out;
+		}
+
+		/* this section done */
+		ret = zif_state_done (state_loop, &error);
+		if (!ret) {
+			pk_backend_error_code (backend,
+					       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+					       "cancelled: %s",
+					       error->message);
+			g_error_free (error);
+			goto out;
+		}
+
+		/* get files */
+		state_tmp = zif_state_get_child (state_loop);
+		files = zif_package_get_files (package, state_tmp, &error);
+		if (files == NULL) {
+			pk_backend_error_code (backend,
+					       PK_ERROR_ENUM_INTERNAL_ERROR,
+					       "no files for %s: %s",
+					       package_ids[i],
+					       error->message);
+			g_error_free (error);
+			goto out;
+		}
+
+		files_str = g_string_new ("");
+		for (j=0; j<files->len; j++) {
+			file = g_ptr_array_index (files, j);
+			g_string_append_printf (files_str, "%s\n", file);
+		}
+		pk_backend_files (backend, package_ids[i], files_str->str);
+
+		/* this section done */
+		ret = zif_state_done (state_loop, &error);
+		if (!ret) {
+			pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+				       "cancelled: %s",
+				       error->message);
+			g_error_free (error);
+			goto out;
+		}
+
+		g_string_free (files_str, TRUE);
+		g_object_unref (package);
+	}
+out:
+	pk_backend_finished (backend);
+	if (store_array != NULL)
+		g_ptr_array_unref (store_array);
+	return TRUE;
+}
+
+/**
+ * pk_backend_get_updates_thread:
+ */
+static gboolean
+pk_backend_get_updates_thread (PkBackend *backend)
+{
+	PkBitfield filters = (PkBitfield) pk_backend_get_uint (backend, "filters");
+	gboolean ret;
+	gchar **search = NULL;
+	GError *error = NULL;
+	gint val;
+	GPtrArray *array = NULL;
+	GPtrArray *result = NULL;
+	GPtrArray *store_array = NULL;
+	GPtrArray *updates_available = NULL;
+	GPtrArray *updates = NULL;
+	guint i, j;
+	PkInfoEnum info;
+	ZifPackage *package;
+	ZifPackage *package_update;
+	ZifState *state_local;
+	ZifState *state_loop;
+	ZifUpdateKind update_kind;
+	ZifUpdate *update;
+
+	pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
+
+	/* set steps */
+	ret = zif_state_set_steps (priv->state,
+				   NULL,
+				   1, /* get remote stores */
+				   1, /* get installed packages */
+				   3, /* filter newest */
+				   45, /* look in remote stores */
+				   50, /* get updateinfo */
+				   -1);
+	g_assert (ret);
+
+	/* get a store_array of remote stores */
+	store_array = zif_store_array_new ();
+	state_local = zif_state_get_child (priv->state);
+	ret = zif_store_array_add_remote_enabled (store_array,
+						  state_local,
+						  &error);
+	if (!ret) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_INTERNAL_ERROR,
+				       "failed to add enabled stores: %s",
+				       error->message);
+		g_error_free (error);
+		goto out;
+	}
+
+	/* this section done */
+	ret = zif_state_done (priv->state, &error);
+	if (!ret) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+				       "cancelled: %s",
+				       error->message);
+		g_error_free (error);
+		goto out;
+	}
+
+	/* get all the installed packages */
+	state_local = zif_state_get_child (priv->state);
+	array = zif_store_get_packages (priv->store_local, state_local, &error);
+	if (array == NULL) {
+		g_debug ("failed to get local store: %s",
+			 error->message);
+		g_error_free (error);
+		goto out;
+	}
+	g_debug ("searching for updates with %i packages", array->len);
+
+	/* this section done */
+	ret = zif_state_done (priv->state, &error);
+	if (!ret) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+				       "cancelled: %s",
+				       error->message);
+		g_error_free (error);
+		goto out;
+	}
+
+	/* remove any packages that are not newest (think kernel) */
+	zif_package_array_filter_newest (array);
+
+	/* this section done */
+	ret = zif_state_done (priv->state, &error);
+	if (!ret) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+				       "cancelled: %s",
+				       error->message);
+		g_error_free (error);
+		goto out;
+	}
+
+	/* get updates */
+	search = g_new0 (gchar *, array->len + 1);
+	for (i=0; i<array->len; i++) {
+		package = g_ptr_array_index (array, i);
+		search[i] = g_strdup (zif_package_get_name (package));
+	}
+	state_local = zif_state_get_child (priv->state);
+	zif_state_set_error_handler (priv->state,
+				     (ZifStateErrorHandlerCb) pk_backend_error_handler_cb,
+				     backend);
+	updates = zif_store_array_resolve (store_array, search, state_local, &error);
+	if (updates == NULL) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_INTERNAL_ERROR,
+				       "failed to get updates: %s", error->message);
+		g_error_free (error);
+		goto out;
+	}
+
+	/* some repos contain lots of versions of one package */
+	zif_package_array_filter_newest (updates);
+
+	/* find each one in a remote repo */
+	updates_available = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
+	for (i=0; i<array->len; i++) {
+		package = ZIF_PACKAGE (g_ptr_array_index (array, i));
+
+		/* find updates */
+		for (j=0; j<updates->len; j++) {
+			package_update = ZIF_PACKAGE (g_ptr_array_index (updates, j));
+
+			/* newer? */
+			val = zif_package_compare (package_update, package);
+			if (val == G_MAXINT)
+				continue;
+			if (val > 0) {
+				g_debug ("*** update %s from %s to %s",
+					 zif_package_get_name (package),
+					 zif_package_get_version (package),
+					 zif_package_get_version (package_update));
+				g_ptr_array_add (updates_available, g_object_ref (package_update));
+				break;
+			}
+		}
+	}
+
+	/* this section done */
+	ret = zif_state_done (priv->state, &error);
+	if (!ret) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+				       "cancelled: %s",
+				       error->message);
+		g_error_free (error);
+		goto out;
+	}
+
+	/* setup steps on updatinfo state */
+	state_local = zif_state_get_child (priv->state);
+	if (updates_available->len > 0)
+		zif_state_set_number_steps (state_local, updates_available->len);
+
+	/* get update info */
+	for (i=0; i<updates_available->len; i++) {
+		package = g_ptr_array_index (updates_available, i);
+		state_loop = zif_state_get_child (state_local);
+
+		/* updates without updatinfo */
+		info = PK_INFO_ENUM_NORMAL;
+
+		update = zif_package_remote_get_update_detail (ZIF_PACKAGE_REMOTE (package), state_loop, &error);
+		if (update == NULL) {
+			g_debug ("failed to get updateinfo for %s", zif_package_get_id (package));
+			g_clear_error (&error);
+			ret = zif_state_finished (state_loop, NULL);
+		} else {
+			update_kind = zif_update_get_kind (update);
+			if (update_kind == ZIF_UPDATE_KIND_BUGFIX)
+				info = PK_INFO_ENUM_BUGFIX;
+			else if (update_kind == ZIF_UPDATE_KIND_SECURITY)
+				info = PK_INFO_ENUM_SECURITY;
+			else if (update_kind == ZIF_UPDATE_KIND_ENHANCEMENT)
+				info = PK_INFO_ENUM_ENHANCEMENT;
+			g_object_unref (update);
+		}
+
+		/* set new severity */
+		g_object_set_data (G_OBJECT(package), "kind", (gpointer)pk_info_enum_to_string (info));
+
+		/* this section done */
+		ret = zif_state_done (state_local, &error);
+		if (!ret) {
+			pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+				       "cancelled: %s",
+				       error->message);
+			g_error_free (error);
+			goto out;
+		}
+	}
+
+	/* this section done */
+	ret = zif_state_done (priv->state, &error);
+	if (!ret) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+				       "cancelled: %s",
+				       error->message);
+		g_error_free (error);
+		goto out;
+	}
+
+	/* filter */
+	result = pk_backend_filter_package_array (updates_available, filters);
+
+	/* done */
+	pk_backend_set_percentage (backend, 100);
+
+	/* emit */
+	state_local = zif_state_get_child (priv->state);
+	pk_backend_emit_package_array (backend, result, state_local);
+out:
+	pk_backend_finished (backend);
+	if (updates != NULL)
+		g_ptr_array_unref (updates);
+	if (updates_available != NULL)
+		g_ptr_array_unref (updates_available);
+	if (array != NULL)
+		g_ptr_array_unref (array);
+	if (result != NULL)
+		g_ptr_array_unref (result);
+	if (store_array != NULL)
+		g_ptr_array_unref (store_array);
+	g_strfreev (search);
+	return TRUE;
+}
+
+/**
+ * pk_backend_get_changelog_text:
+ */
+static gchar *
+pk_backend_get_changelog_text (GPtrArray *changesets)
+{
+	guint i;
+	ZifChangeset *changeset;
+	GString *text;
+	gchar date_str[128];
+	GDate *date;
+
+	/* create output string */
+	text = g_string_new ("");
+	date = g_date_new ();
+
+	/* go through each one */
+	for (i=0; i<changesets->len; i++) {
+		changeset = g_ptr_array_index (changesets, i);
+
+		/* format the indervidual changeset */
+		g_date_set_time_t (date, zif_changeset_get_date (changeset));
+		g_date_strftime (date_str, 128, "%F", date);
+		g_string_append_printf (text, "**%s** %s - %s\n%s\n\n",
+					date_str,
+					zif_changeset_get_author (changeset),
+					zif_changeset_get_version (changeset),
+					zif_changeset_get_description (changeset));
+	}
+	g_date_free (date);
+	return g_string_free (text, FALSE);
+}
+
+/**
+ * pk_backend_get_update_detail_thread:
+ */
+static gboolean
+pk_backend_get_update_detail_thread (PkBackend *backend)
+{
+	gboolean ret;
+	gchar **package_ids;
+	GError *error = NULL;
+	GPtrArray *store_array = NULL;
+	guint i;
+	guint j;
+	ZifPackage *package;
+	ZifState *state_local;
+	ZifState *state_loop;
+	ZifState *state_tmp;
+	ZifUpdate *update;
+
+	/* get the data */
+	package_ids = pk_backend_get_strv (backend, "package_ids");
+	ret = zif_state_set_steps (priv->state,
+				   NULL,
+				   2, /* get stores */
+				   98, /* get update detail */
+				   -1);
+	g_assert (ret);
+
+	/* get a store_array of remote stores */
+	store_array = zif_store_array_new ();
+	state_local = zif_state_get_child (priv->state);
+	ret = zif_store_array_add_remote_enabled (store_array,
+						  state_local,
+						  &error);
+	if (!ret) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_INTERNAL_ERROR,
+				       "failed to add enabled stores: %s",
+				       error->message);
+		g_error_free (error);
+		goto out;
+	}
+
+	/* this section done */
+	ret = zif_state_done (priv->state, &error);
+	if (!ret) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+				       "cancelled: %s",
+				       error->message);
+		g_error_free (error);
+		goto out;
+	}
+
+	/* get the update info */
+	state_local = zif_state_get_child (priv->state);
+	zif_state_set_number_steps (state_local, g_strv_length (package_ids));
+	for (i=0; package_ids[i] != NULL; i++) {
+
+		state_loop = zif_state_get_child (state_local);
+		ret = zif_state_set_steps (state_loop,
+					   NULL,
+					   12, /* find package */
+					   88, /* get update detail */
+					   -1);
+		g_assert (ret);
+
+		/* need to get the packages from the find_id */
+		state_tmp = zif_state_get_child (state_loop);
+		package = zif_store_array_find_package (store_array,
+							package_ids[i],
+							state_tmp,
+							&error);
+		if (package == NULL) {
+			pk_backend_error_code (backend,
+					       PK_ERROR_ENUM_PACKAGE_NOT_FOUND,
+					       "failed to find package %s: %s",
+					       zif_package_get_id (package),
+					       error->message);
+			g_error_free (error);
+			goto out;
+		}
+
+		/* this section done */
+		ret = zif_state_done (state_loop, &error);
+		if (!ret) {
+			pk_backend_error_code (backend,
+					       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+					       "cancelled: %s",
+					       error->message);
+			g_error_free (error);
+			goto out;
+		}
+
+		state_tmp = zif_state_get_child (state_loop);
+		update = zif_package_remote_get_update_detail (ZIF_PACKAGE_REMOTE (package),
+							       state_tmp,
+							       &error);
+		if (update == NULL) {
+			g_debug ("failed to get updateinfo for %s",
+				 zif_package_get_id (package));
+			g_clear_error (&error);
+			pk_backend_update_detail (backend, package_ids[i],
+						  NULL, NULL, NULL, NULL, NULL,
+						  PK_RESTART_ENUM_NONE,
+						  "<none>",
+						  "No description available",
+						  PK_UPDATE_STATE_ENUM_UNKNOWN,
+						  NULL, NULL);
+		} else {
+			gchar *changelog_text = NULL;
+			GPtrArray *array;
+			GPtrArray *changesets;
+			GString *string_cve;
+			GString *string_bugzilla;
+			ZifUpdateInfo *info;
+			array = zif_update_get_update_infos (update);
+			string_cve = g_string_new (NULL);
+			string_bugzilla = g_string_new (NULL);
+			for (j=0; j<array->len; j++) {
+				info = g_ptr_array_index (array, j);
+				switch (zif_update_info_get_kind (info)) {
+				case ZIF_UPDATE_INFO_KIND_CVE:
+					g_string_append_printf (string_cve, "%s\t%s\t",
+								zif_update_info_get_title (info),
+								zif_update_info_get_url (info));
+					break;
+				case ZIF_UPDATE_INFO_KIND_BUGZILLA:
+					g_string_append_printf (string_bugzilla, "%s\t%s\t",
+								zif_update_info_get_title (info),
+								zif_update_info_get_url (info));
+					break;
+				default:
+					break;
+				}
+			}
+
+			/* format changelog */
+			changesets = zif_update_get_changelog (update);
+			if (changesets != NULL)
+				changelog_text = pk_backend_get_changelog_text (changesets);
+			pk_backend_update_detail (backend, package_ids[i],
+						  NULL, //updates,
+						  NULL, //obsoletes,
+						  NULL, //vendor_url,
+						  string_bugzilla->str,
+						  string_cve->str,
+						  PK_RESTART_ENUM_NONE,
+						  zif_update_get_description (update),
+						  changelog_text,
+						  zif_update_get_state (update),
+						  zif_update_get_issued (update),
+						  NULL);
+			if (changesets != NULL)
+				g_ptr_array_unref (changesets);
+			g_ptr_array_unref (array);
+			g_string_free (string_cve, TRUE);
+			g_string_free (string_bugzilla, TRUE);
+			g_free (changelog_text);
+		}
+
+		g_object_unref (package);
+
+		/* this section done */
+		ret = zif_state_done (state_loop, &error);
+		if (!ret) {
+			pk_backend_error_code (backend,
+					       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+					       "cancelled: %s",
+					       error->message);
+			g_error_free (error);
+			goto out;
+		}
+
+		/* this section done */
+		ret = zif_state_done (state_local, &error);
+		if (!ret) {
+			pk_backend_error_code (backend,
+					       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+					       "cancelled: %s",
+					       error->message);
+			g_error_free (error);
+			goto out;
+		}
+	}
+
+	/* this section done */
+	ret = zif_state_done (priv->state, &error);
+	if (!ret) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+				       "cancelled: %s",
+				       error->message);
+		g_error_free (error);
+		goto out;
+	}
+out:
+	pk_backend_finished (backend);
+	if (store_array != NULL)
+		g_ptr_array_unref (store_array);
+	return TRUE;
+}
+
+/**
+ * pk_backend_convert_transaction_reason_to_info_enum:
+ */
+static PkInfoEnum
+pk_backend_convert_transaction_reason_to_info_enum (ZifTransactionReason reason)
+{
+	switch (reason) {
+	case ZIF_TRANSACTION_REASON_INSTALL_DEPEND:
+	case ZIF_TRANSACTION_REASON_INSTALL_FOR_UPDATE:
+	case ZIF_TRANSACTION_REASON_INSTALL_USER_ACTION:
+		return PK_INFO_ENUM_INSTALLING;
+	case ZIF_TRANSACTION_REASON_REMOVE_AS_ONLYN:
+	case ZIF_TRANSACTION_REASON_REMOVE_FOR_DEP:
+	case ZIF_TRANSACTION_REASON_REMOVE_FOR_UPDATE:
+	case ZIF_TRANSACTION_REASON_REMOVE_OBSOLETE:
+	case ZIF_TRANSACTION_REASON_REMOVE_USER_ACTION:
+		return PK_INFO_ENUM_REMOVING;
+	case ZIF_TRANSACTION_REASON_UPDATE_DEPEND:
+	case ZIF_TRANSACTION_REASON_UPDATE_FOR_CONFLICT:
+	case ZIF_TRANSACTION_REASON_UPDATE_USER_ACTION:
+		return PK_INFO_ENUM_UPDATING;
+	default:
+		return PK_INFO_ENUM_AVAILABLE;
+	}
+}
+
+/**
+ * pk_backend_run_transaction:
+ */
+static gboolean
+pk_backend_run_transaction (PkBackend *backend, ZifState *state)
+{
+	gboolean only_trusted;
+	gboolean ret;
+	gboolean simulate;
+	GError *error = NULL;
+	GPtrArray *array_tmp;
+	GPtrArray *install = NULL;
+	GPtrArray *simulate_array = NULL;
+	guint i, j;
+	PkInfoEnum info_enum;
+	ZifPackage *package;
+	ZifPackageTrustKind trust_kind;
+	ZifState *state_local;
+
+	/* set steps */
+	simulate = pk_backend_get_bool (backend, "hint:simulate");
+	if (simulate) {
+		ret = zif_state_set_steps (state,
+					   NULL,
+					   95, /* resolve */
+					   5, /* print packages */
+					   -1);
+	} else {
+		ret = zif_state_set_steps (state,
+					   NULL,
+					   30, /* resolve */
+					   30, /* prepare */
+					   40, /* commit */
+					   -1);
+	}
+	g_assert (ret);
+
+	/* resolve the transaction */
+	state_local = zif_state_get_child (state);
+	ret = zif_transaction_resolve (priv->transaction,
+				       state_local,
+				       &error);
+	if (!ret) {
+		if (error->domain == ZIF_TRANSACTION_ERROR &&
+		    error->code == ZIF_TRANSACTION_ERROR_NOTHING_TO_DO) {
+			pk_backend_error_code (backend,
+					       PK_ERROR_ENUM_ALL_PACKAGES_ALREADY_INSTALLED,
+					       error->message);
+		} else {
+			pk_backend_error_code (backend,
+					       PK_ERROR_ENUM_DEP_RESOLUTION_FAILED,
+					       "failed to resolve transaction: %s",
+					       error->message);
+		}
+		g_error_free (error);
+		goto out;
+	}
+
+	/* this section done */
+	ret = zif_state_done (state, &error);
+	if (!ret) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+				       "cancelled: %s",
+				       error->message);
+		g_error_free (error);
+		goto out;
+	}
+
+	/* list the packages in the transaction */
+	if (simulate) {
+		simulate_array = zif_object_array_new ();
+		for (i=0; i<ZIF_TRANSACTION_REASON_LAST; i++) {
+			if (i == ZIF_TRANSACTION_REASON_REMOVE_FOR_UPDATE)
+				continue;
+			info_enum = pk_backend_convert_transaction_reason_to_info_enum (i);
+			array_tmp = zif_transaction_get_array_for_reason (priv->transaction, i);
+			for (j=0; j<array_tmp->len; j++) {
+				package = g_ptr_array_index (array_tmp, j);
+				g_object_set_data (G_OBJECT(package),
+						   "kind",
+						   (gpointer)pk_info_enum_to_string (info_enum));
+				zif_object_array_add (simulate_array, package);
+			}
+			g_ptr_array_unref (array_tmp);
+		}
+		state_local = zif_state_get_child (state);
+		pk_backend_emit_package_array (backend, simulate_array, state_local);
+
+		/* this section done */
+		ret = zif_state_done (state, &error);
+		if (!ret) {
+			pk_backend_error_code (backend,
+					       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+					       "cancelled: %s",
+					       error->message);
+			g_error_free (error);
+			goto out;
+		}
+		goto out;
+	}
+
+	/* prepare the transaction */
+	state_local = zif_state_get_child (state);
+	ret = zif_transaction_prepare (priv->transaction,
+				       state_local,
+				       &error);
+	if (!ret) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_DEP_RESOLUTION_FAILED,
+				       "failed to prepare transaction: %s",
+				       error->message);
+		g_error_free (error);
+		goto out;
+	}
+
+	/* check if any are not trusted */
+	only_trusted = pk_backend_get_bool (backend, "only_trusted");
+	if (only_trusted) {
+		install = zif_transaction_get_install (priv->transaction);
+		for (i=0; i<install->len; i++) {
+			package = g_ptr_array_index (install, i);
+			trust_kind = zif_package_get_trust_kind (package);
+			if (trust_kind != ZIF_PACKAGE_TRUST_KIND_PUBKEY) {
+				pk_backend_error_code (backend,
+						       PK_ERROR_ENUM_NOT_AUTHORIZED,
+						       "package %s is untrusted",
+						       zif_package_get_id (package));
+				g_error_free (error);
+				goto out;
+			}
+		}
+	}
+
+	/* this section done */
+	ret = zif_state_done (state, &error);
+	if (!ret) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+				       "cancelled: %s",
+				       error->message);
+		g_error_free (error);
+		goto out;
+	}
+
+	/* commit the transaction */
+	state_local = zif_state_get_child (state);
+	ret = zif_transaction_commit (priv->transaction,
+				      state_local,
+				      &error);
+	if (!ret) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_INTERNAL_ERROR,
+				       "failed to commit transaction: %s",
+				       error->message);
+		g_error_free (error);
+		goto out;
+	}
+
+	/* this section done */
+	ret = zif_state_done (state, &error);
+	if (!ret) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+				       "cancelled: %s",
+				       error->message);
+		g_error_free (error);
+		goto out;
+	}
+out:
+	if (simulate_array != NULL)
+		g_ptr_array_unref (simulate_array);
+	if (install != NULL)
+		g_ptr_array_unref (install);
+	return ret;
+}
+
+/**
+ * pk_backend_remove_packages_thread:
+ */
+static gboolean
+pk_backend_remove_packages_thread (PkBackend *backend)
+{
+	gboolean ret;
+	gchar **package_ids;
+	GError *error = NULL;
+	GPtrArray *store_array = NULL;
+	guint i;
+	ZifPackage *package;
+	ZifState *state_local;
+	ZifState *state_loop;
+
+	pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
+	pk_backend_set_percentage (backend, 0);
+
+	/* setup steps */
+	ret = zif_state_set_steps (priv->state,
+				   NULL,
+				   10, /* find packages */
+				   90, /* run transaction */
+				   -1);
+	g_assert (ret);
+
+	state_local = zif_state_get_child (priv->state);
+	package_ids = pk_backend_get_strv (backend, "package_ids");
+	zif_state_set_number_steps (state_local, g_strv_length (package_ids));
+	for (i=0; package_ids[i] != NULL; i++) {
+
+		/* find package */
+		state_loop = zif_state_get_child (state_local);
+		package = zif_store_find_package (priv->store_local,
+						  package_ids[i],
+						  state_loop,
+						  &error);
+		if (package == NULL) {
+			pk_backend_error_code (backend,
+					       PK_ERROR_ENUM_PACKAGE_NOT_FOUND,
+					       "failed to find package: %s",
+					       error->message);
+			g_error_free (error);
+			goto out;
+		}
+
+		/* add it as a remove to the transaction */
+		ret = zif_transaction_add_remove (priv->transaction,
+						   package,
+						   &error);
+		g_object_unref (package);
+		if (!ret) {
+			pk_backend_error_code (backend,
+					       PK_ERROR_ENUM_PACKAGE_NOT_FOUND,
+					       "failed to add package %s: %s",
+					       zif_package_get_id (package),
+					       error->message);
+			g_error_free (error);
+			goto out;
+		}
+
+		/* this section done */
+		ret = zif_state_done (state_local, &error);
+		if (!ret) {
+			pk_backend_error_code (backend,
+					       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+					       "cancelled: %s",
+					       error->message);
+			g_error_free (error);
+			goto out;
+		}
+	}
+
+	/* this section done */
+	ret = zif_state_done (priv->state, &error);
+	if (!ret) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+				       "cancelled: %s",
+				       error->message);
+		g_error_free (error);
+		goto out;
+	}
+
+	/* run transaction */
+	state_local = zif_state_get_child (priv->state);
+	ret = pk_backend_run_transaction (backend, state_local);
+	if (!ret)
+		goto out;
+
+	/* this section done */
+	ret = zif_state_done (priv->state, &error);
+	if (!ret) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+				       "cancelled: %s",
+				       error->message);
+		g_error_free (error);
+		goto out;
+	}
+out:
+	pk_backend_finished (backend);
+	if (store_array != NULL)
+		g_ptr_array_unref (store_array);
+	return TRUE;
+}
+
+/**
+ * pk_backend_update_packages_thread:
+ */
+static gboolean
+pk_backend_update_packages_thread (PkBackend *backend)
+{
+	gboolean ret;
+	gchar **package_ids;
+	GError *error = NULL;
+	GPtrArray *store_array = NULL;
+	guint i;
+	ZifPackage *package;
+	ZifState *state_local;
+	ZifState *state_loop;
+
+	pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
+	pk_backend_set_percentage (backend, 0);
+
+	/* setup steps */
+	ret = zif_state_set_steps (priv->state,
+				   NULL,
+				   10, /* add remote */
+				   10, /* find packages */
+				   80, /* run transaction */
+				   -1);
+	g_assert (ret);
+
+	/* get a store_array of remote stores */
+	store_array = zif_store_array_new ();
+	state_local = zif_state_get_child (priv->state);
+	ret = zif_store_array_add_remote_enabled (store_array,
+						  state_local,
+						  &error);
+	if (!ret) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_INTERNAL_ERROR,
+				       "failed to add enabled stores: %s",
+				       error->message);
+		g_error_free (error);
+		goto out;
+	}
+
+	/* use these stores for the transaction */
+	zif_transaction_set_stores_remote (priv->transaction, store_array);
+
+	/* this section done */
+	ret = zif_state_done (priv->state, &error);
+	if (!ret) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+				       "cancelled: %s",
+				       error->message);
+		g_error_free (error);
+		goto out;
+	}
+
+	state_local = zif_state_get_child (priv->state);
+	package_ids = pk_backend_get_strv (backend, "package_ids");
+	zif_state_set_number_steps (state_local, g_strv_length (package_ids));
+	for (i=0; package_ids[i] != NULL; i++) {
+
+		/* find package */
+		state_loop = zif_state_get_child (state_local);
+		package = zif_store_array_find_package (store_array,
+							package_ids[i],
+							state_loop,
+							&error);
+		if (package == NULL) {
+			pk_backend_error_code (backend,
+					       PK_ERROR_ENUM_PACKAGE_NOT_FOUND,
+					       "failed to find package: %s",
+					       error->message);
+			g_error_free (error);
+			goto out;
+		}
+
+		/* add it as an update to the transaction */
+		ret = zif_transaction_add_install_as_update (priv->transaction,
+							     package,
+							     &error);
+		g_object_unref (package);
+		if (!ret) {
+			pk_backend_error_code (backend,
+					       PK_ERROR_ENUM_PACKAGE_NOT_FOUND,
+					       "failed to add package %s: %s",
+					       zif_package_get_id (package),
+					       error->message);
+			g_error_free (error);
+			goto out;
+		}
+
+		/* this section done */
+		ret = zif_state_done (state_local, &error);
+		if (!ret) {
+			pk_backend_error_code (backend,
+					       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+					       "cancelled: %s",
+					       error->message);
+			g_error_free (error);
+			goto out;
+		}
+	}
+
+	/* this section done */
+	ret = zif_state_done (priv->state, &error);
+	if (!ret) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+				       "cancelled: %s",
+				       error->message);
+		g_error_free (error);
+		goto out;
+	}
+
+	/* run transaction */
+	state_local = zif_state_get_child (priv->state);
+	ret = pk_backend_run_transaction (backend, state_local);
+	if (!ret)
+		goto out;
+
+	/* this section done */
+	ret = zif_state_done (priv->state, &error);
+	if (!ret) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+				       "cancelled: %s",
+				       error->message);
+		g_error_free (error);
+		goto out;
+	}
+out:
+	pk_backend_finished (backend);
+	if (store_array != NULL)
+		g_ptr_array_unref (store_array);
+	return TRUE;
+}
+
+/**
+ * pk_backend_install_packages_thread:
+ */
+static gboolean
+pk_backend_install_packages_thread (PkBackend *backend)
+{
+	gboolean ret;
+	gchar **package_ids;
+	GError *error = NULL;
+	GPtrArray *store_array = NULL;
+	guint i;
+	ZifPackage *package;
+	ZifState *state_local;
+	ZifState *state_loop;
+
+	pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
+	pk_backend_set_percentage (backend, 0);
+
+	/* setup steps */
+	ret = zif_state_set_steps (priv->state,
+				   NULL,
+				   10, /* add remote */
+				   10, /* find packages */
+				   80, /* run transaction */
+				   -1);
+	g_assert (ret);
+
+	/* get a store_array of remote stores */
+	store_array = zif_store_array_new ();
+	state_local = zif_state_get_child (priv->state);
+	ret = zif_store_array_add_remote_enabled (store_array,
+						  state_local,
+						  &error);
+	if (!ret) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_INTERNAL_ERROR,
+				       "failed to add enabled stores: %s",
+				       error->message);
+		g_error_free (error);
+		goto out;
+	}
+
+	/* use these stores for the transaction */
+	zif_transaction_set_stores_remote (priv->transaction, store_array);
+
+	/* this section done */
+	ret = zif_state_done (priv->state, &error);
+	if (!ret) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+				       "cancelled: %s",
+				       error->message);
+		g_error_free (error);
+		goto out;
+	}
+
+	state_local = zif_state_get_child (priv->state);
+	package_ids = pk_backend_get_strv (backend, "package_ids");
+	zif_state_set_number_steps (state_local, g_strv_length (package_ids));
+	for (i=0; package_ids[i] != NULL; i++) {
+
+		/* find package */
+		state_loop = zif_state_get_child (state_local);
+		package = zif_store_array_find_package (store_array,
+							package_ids[i],
+							state_loop,
+							&error);
+		if (package == NULL) {
+			pk_backend_error_code (backend,
+					       PK_ERROR_ENUM_PACKAGE_NOT_FOUND,
+					       "failed to find package: %s",
+					       error->message);
+			g_error_free (error);
+			goto out;
+		}
+
+		/* add it as an install to the transaction */
+		ret = zif_transaction_add_install (priv->transaction,
+						   package,
+						   &error);
+		g_object_unref (package);
+		if (!ret) {
+			pk_backend_error_code (backend,
+					       PK_ERROR_ENUM_PACKAGE_NOT_FOUND,
+					       "failed to add package %s: %s",
+					       zif_package_get_id (package),
+					       error->message);
+			g_error_free (error);
+			goto out;
+		}
+
+		/* this section done */
+		ret = zif_state_done (state_local, &error);
+		if (!ret) {
+			pk_backend_error_code (backend,
+					       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+					       "cancelled: %s",
+					       error->message);
+			g_error_free (error);
+			goto out;
+		}
+	}
+
+	/* this section done */
+	ret = zif_state_done (priv->state, &error);
+	if (!ret) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+				       "cancelled: %s",
+				       error->message);
+		g_error_free (error);
+		goto out;
+	}
+
+	/* run transaction */
+	state_local = zif_state_get_child (priv->state);
+	ret = pk_backend_run_transaction (backend, state_local);
+	if (!ret)
+		goto out;
+
+	/* this section done */
+	ret = zif_state_done (priv->state, &error);
+	if (!ret) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+				       "cancelled: %s",
+				       error->message);
+		g_error_free (error);
+		goto out;
+	}
+out:
+	pk_backend_finished (backend);
+	if (store_array != NULL)
+		g_ptr_array_unref (store_array);
+	return TRUE;
+}
+
+/**
+ * pk_backend_install_files_thread:
+ */
+static gboolean
+pk_backend_install_files_thread (PkBackend *backend)
+{
+	gboolean ret;
+	gchar **full_paths;
+	GError *error = NULL;
+	GPtrArray *store_array = NULL;
+	guint i;
+	ZifPackage *package;
+	ZifState *state_local;
+
+	pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
+	pk_backend_set_percentage (backend, 0);
+
+	/* setup steps */
+	ret = zif_state_set_steps (priv->state,
+				   NULL,
+				   10, /* add remote */
+				   10, /* find packages */
+				   80, /* run transaction */
+				   -1);
+	g_assert (ret);
+
+	/* get a store_array of remote stores */
+	store_array = zif_store_array_new ();
+	state_local = zif_state_get_child (priv->state);
+	ret = zif_store_array_add_remote_enabled (store_array,
+						  state_local,
+						  &error);
+	if (!ret) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_INTERNAL_ERROR,
+				       "failed to add enabled stores: %s",
+				       error->message);
+		g_error_free (error);
+		goto out;
+	}
+
+	/* use these stores for the transaction */
+	zif_transaction_set_stores_remote (priv->transaction, store_array);
+
+	/* this section done */
+	ret = zif_state_done (priv->state, &error);
+	if (!ret) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+				       "cancelled: %s",
+				       error->message);
+		g_error_free (error);
+		goto out;
+	}
+
+	state_local = zif_state_get_child (priv->state);
+	full_paths = pk_backend_get_strv (backend, "full_paths");
+	zif_state_set_number_steps (state_local, g_strv_length (full_paths));
+	for (i=0; full_paths[i] != NULL; i++) {
+
+		/* find package */
+		package = zif_package_local_new ();
+		ret = zif_package_local_set_from_filename (ZIF_PACKAGE_LOCAL (package),
+							   full_paths[i],
+							   &error);
+		if (!ret) {
+			pk_backend_error_code (backend,
+					       PK_ERROR_ENUM_PACKAGE_NOT_FOUND,
+					       "failed to create package for %s: %s",
+					       full_paths[i], error->message);
+			g_error_free (error);
+			goto out;
+		}
+
+		/* add it as an install to the transaction */
+		ret = zif_transaction_add_install (priv->transaction,
+						   package,
+						   &error);
+		g_object_unref (package);
+		if (!ret) {
+			pk_backend_error_code (backend,
+					       PK_ERROR_ENUM_PACKAGE_NOT_FOUND,
+					       "failed to add package %s: %s",
+					       zif_package_get_id (package),
+					       error->message);
+			g_error_free (error);
+			goto out;
+		}
+
+		/* this section done */
+		ret = zif_state_done (state_local, &error);
+		if (!ret) {
+			pk_backend_error_code (backend,
+					       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+					       "cancelled: %s",
+					       error->message);
+			g_error_free (error);
+			goto out;
+		}
+	}
+
+	/* this section done */
+	ret = zif_state_done (priv->state, &error);
+	if (!ret) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+				       "cancelled: %s",
+				       error->message);
+		g_error_free (error);
+		goto out;
+	}
+
+	/* run transaction */
+	state_local = zif_state_get_child (priv->state);
+	ret = pk_backend_run_transaction (backend, state_local);
+	if (!ret)
+		goto out;
+
+	/* this section done */
+	ret = zif_state_done (priv->state, &error);
+	if (!ret) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+				       "cancelled: %s",
+				       error->message);
+		g_error_free (error);
+		goto out;
+	}
+out:
+	pk_backend_finished (backend);
+	if (store_array != NULL)
+		g_ptr_array_unref (store_array);
+	return TRUE;
+}
+
+/**
+ * pk_backend_refresh_cache_thread:
+ */
+static gboolean
+pk_backend_refresh_cache_thread (PkBackend *backend)
+{
+	gboolean force = pk_backend_get_bool (backend, "force");
+	gboolean ret;
+	GError *error = NULL;
+	GPtrArray *store_array = NULL;
+	ZifState *state_local;
+
+	/* set steps */
+	ret = zif_state_set_steps (priv->state,
+				   NULL,
+				   50, /* get stores */
+				   50, /* refresh them */
+				   -1);
+	g_assert (ret);
+
+	pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
+	pk_backend_set_percentage (backend, 0);
+
+	/* don't nuke the metadata */
+	if (!force) {
+		g_debug ("not supported yet");
+		goto out;
+	}
+
+	/* get a store_array of remote stores */
+	store_array = zif_store_array_new ();
+	state_local = zif_state_get_child (priv->state);
+	ret = zif_store_array_add_remote_enabled (store_array,
+						  state_local,
+						  &error);
+	if (!ret) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_INTERNAL_ERROR,
+				       "failed to add enabled stores: %s",
+				       error->message);
+		g_error_free (error);
+		goto out;
+	}
+
+	/* this section done */
+	ret = zif_state_done (priv->state, &error);
+	if (!ret) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+				       "cancelled: %s",
+				       error->message);
+		g_error_free (error);
+		goto out;
+	}
+
+	/* clean all the repos */
+	state_local = zif_state_get_child (priv->state);
+	zif_state_set_error_handler (priv->state, (ZifStateErrorHandlerCb) pk_backend_error_handler_cb, backend);
+	ret = zif_store_array_clean (store_array, state_local, &error);
+	if (!ret) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_INTERNAL_ERROR,
+				       "failed to clean: %s", error->message);
+		g_error_free (error);
+		goto out;
+	}
+out:
+	pk_backend_finished (backend);
+	if (store_array != NULL)
+		g_ptr_array_unref (store_array);
+	return TRUE;
+}
+
+/**
+ * pk_backend_get_repo_list_thread:
+ */
+static gboolean
+pk_backend_get_repo_list_thread (PkBackend *backend)
+{
+	gboolean ret;
+	PkBitfield filters = (PkBitfield) pk_backend_get_uint (backend, "filters");
+	guint i;
+	GPtrArray *array = NULL;
+	ZifStoreRemote *store;
+	ZifState *state_local;
+	ZifState *state_loop;
+	ZifState *state_tmp;
+	const gchar *repo_id;
+	const gchar *name;
+	gboolean enabled;
+	gboolean devel;
+	GError *error = NULL;
+
+	pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
+	pk_backend_set_percentage (backend, 0);
+
+	/* set steps */
+	ret = zif_state_set_steps (priv->state,
+				   NULL,
+				   50, /* get stores */
+				   50, /* process and emit */
+				   -1);
+	g_assert (ret);
+
+	state_local = zif_state_get_child (priv->state);
+	array = zif_repos_get_stores (priv->repos, state_local, &error);
+	if (array == NULL) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_REPO_NOT_FOUND,
+				       "failed to find repos: %s",
+				       error->message);
+		g_error_free (error);
+		goto out;
+	}
+
+	/* none? */
+	if (array->len == 0) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_REPO_NOT_FOUND,
+				       "failed to find any repos");
+		goto out;
+	}
+
+	/* this section done */
+	ret = zif_state_done (priv->state, &error);
+	if (!ret) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+				       "cancelled: %s",
+				       error->message);
+		g_error_free (error);
+		goto out;
+	}
+
+	/* looks at each store */
+	state_local = zif_state_get_child (priv->state);
+	zif_state_set_number_steps (state_local, array->len);
+	for (i=0; i<array->len; i++) {
+		store = g_ptr_array_index (array, i);
+
+		/* allow filtering on devel */
+		state_loop = zif_state_get_child (state_local);
+		if (pk_bitfield_contain (filters, PK_FILTER_ENUM_NOT_DEVELOPMENT)) {
+
+			/* devel, name, enabled */
+			ret = zif_state_set_steps (state_loop,
+						   NULL,
+						   50, /* is store devel? */
+						   50, /* get name */
+						   50, /* get enabled */
+						   -1);
+			g_assert (ret);
+
+			state_tmp = zif_state_get_child (state_loop);
+			devel = zif_store_remote_is_devel (store, state_tmp, NULL);
+			if (devel)
+				goto skip;
+
+			/* this section done */
+			ret = zif_state_done (state_loop, &error);
+			if (!ret) {
+				pk_backend_error_code (backend,
+						       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+						       "cancelled: %s",
+						       error->message);
+				g_error_free (error);
+				goto out;
+			}
+		} else {
+			/* name, enabled */
+			ret = zif_state_set_steps (state_loop,
+						   NULL,
+						   50, /* get name */
+						   50, /* get enabled */
+						   -1);
+			g_assert (ret);
+		}
+
+		/* get name */
+		state_tmp = zif_state_get_child (state_loop);
+		name = zif_store_remote_get_name (store, state_tmp, NULL);
+
+		/* this section done */
+		ret = zif_state_done (state_loop, &error);
+		if (!ret) {
+			pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+				       "cancelled: %s",
+				       error->message);
+			g_error_free (error);
+			goto out;
+		}
+
+		/* get state */
+		state_tmp = zif_state_get_child (state_loop);
+		enabled = zif_store_remote_get_enabled (store, state_tmp, NULL);
+
+		/* this section done */
+		ret = zif_state_done (state_loop, &error);
+		if (!ret) {
+			pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+				       "cancelled: %s",
+				       error->message);
+			g_error_free (error);
+			goto out;
+		}
+
+		repo_id = zif_store_get_id (ZIF_STORE (store));
+		pk_backend_repo_detail (backend, repo_id, name, enabled);
+skip:
+		/* this section done */
+		ret = zif_state_done (state_local, &error);
+		if (!ret) {
+			pk_backend_error_code (backend,
+					       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+					       "cancelled: %s",
+					       error->message);
+			g_error_free (error);
+			goto out;
+		}
+	}
+
+	/* this section done */
+	ret = zif_state_done (priv->state, &error);
+	if (!ret) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+				       "cancelled: %s",
+				       error->message);
+		g_error_free (error);
+		goto out;
+	}
+out:
+	pk_backend_finished (backend);
+	if (array != NULL)
+		g_ptr_array_unref (array);
+	return TRUE;
+}
+
+/**
+ * pk_backend_repo_enable_thread:
+ */
+static gboolean
+pk_backend_repo_enable_thread (PkBackend *backend)
+{
+	ZifStoreRemote *repo = NULL;
+	gboolean ret;
+	GError *error = NULL;
+	gchar *warning = NULL;
+	gboolean enabled = pk_backend_get_bool (backend, "enabled");
+	const gchar *repo_id = pk_backend_get_string (backend, "repo_id");
+
+	pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
+	pk_backend_set_percentage (backend, 0);
+
+	/* find the right repo */
+	repo = zif_repos_get_store (priv->repos,
+				    repo_id, priv->state,
+				    &error);
+	if (repo == NULL) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_REPO_NOT_FOUND,
+				       "failed to find repo: %s",
+				       error->message);
+		g_error_free (error);
+		goto out;
+	}
+
+	/* set the state */
+	ret = zif_store_remote_set_enabled (repo, enabled, &error);
+	if (!ret) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_CANNOT_DISABLE_REPOSITORY,
+				       "failed to set enable: %s",
+				       error->message);
+		g_error_free (error);
+		goto out;
+	}
+
+	/* warn if rawhide */
+	if (g_strstr_len (repo_id, -1, "rawhide") != NULL) {
+		warning = g_strdup_printf ("These packages are untested and still under development."
+					   "This repository is used for development of new releases.\n\n"
+					   "This repository can see significant daily turnover and major "
+					   "functionality changes which cause unexpected problems with "
+					   "other development packages.\n"
+					   "Please use these packages if you want to work with the "
+					   "Fedora developers by testing these new development packages.\n\n"
+					   "If this is not correct, please disable the %s software source.",
+					   repo_id);
+		pk_backend_message (backend,
+				    PK_MESSAGE_ENUM_REPO_FOR_DEVELOPERS_ONLY,
+				    warning);
+	}
+out:
+	pk_backend_finished (backend);
+	g_free (warning);
+	if (repo != NULL)
+		g_object_unref (repo);
+	return TRUE;
+}
+
+/**
+ * pk_backend_get_categories_thread:
+ */
+static gboolean
+pk_backend_get_categories_thread (PkBackend *backend)
+{
+	gboolean ret;
+	gchar *cat_id;
+	GPtrArray *array = NULL;
+	GPtrArray *stores = NULL;
+	guint i;
+	ZifCategory *cat;
+
+	ZifState *state_local;
+	GError *error = NULL;
+
+	/* set steps */
+	ret = zif_state_set_steps (priv->state,
+				   NULL,
+				   25, /* get stores */
+				   60, /* get cats */
+				   15, /* emit */
+				   -1);
+	g_assert (ret);
+
+	pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
+	pk_backend_set_percentage (backend, 0);
+
+	/* get enabled repos */
+	state_local = zif_state_get_child (priv->state);
+	stores = zif_repos_get_stores_enabled (priv->repos,
+					       state_local,
+					       &error);
+	if (stores == NULL) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_REPO_CONFIGURATION_ERROR,
+				       "failed to add remote stores: %s",
+				       error->message);
+		g_error_free (error);
+		goto out;
+	}
+
+	/* this section done */
+	ret = zif_state_done (priv->state, &error);
+	if (!ret) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+				       "cancelled: %s",
+				       error->message);
+		g_error_free (error);
+		goto out;
+	}
+
+	/* get sorted list of unique categories */
+	state_local = zif_state_get_child (priv->state);
+	zif_state_set_error_handler (priv->state,
+				     (ZifStateErrorHandlerCb) pk_backend_error_handler_cb,
+				     backend);
+	array = zif_store_array_get_categories (stores, state_local, &error);
+	if (array == NULL) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_GROUP_LIST_INVALID,
+				       "failed to add get categories: %s",
+				       error->message);
+		g_error_free (error);
+		goto out;
+	}
+
+	/* this section done */
+	ret = zif_state_done (priv->state, &error);
+	if (!ret) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+				       "cancelled: %s",
+				       error->message);
+		g_error_free (error);
+		goto out;
+	}
+
+	/* emit each cat obj */
+	for (i=0; i<array->len; i++) {
+		cat = g_ptr_array_index (array, i);
+		/* in the yum backend, we signify a group with a '@' prefix */
+		if (zif_category_get_parent_id (cat) != NULL)
+			cat_id = g_strdup_printf ("@%s", zif_category_get_id (cat));
+		else
+			cat_id = g_strdup (zif_category_get_id (cat));
+		pk_backend_category (backend,
+				     zif_category_get_parent_id (cat),
+				     cat_id,
+				     zif_category_get_name (cat),
+				     zif_category_get_summary (cat),
+				     zif_category_get_icon (cat));
+		g_free (cat_id);
+	}
+
+	/* this section done */
+	ret = zif_state_done (priv->state, &error);
+	if (!ret) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+				       "cancelled: %s",
+				       error->message);
+		g_error_free (error);
+		goto out;
+	}
+out:
+	pk_backend_finished (backend);
+	if (array != NULL)
+		g_ptr_array_unref (array);
+	if (stores != NULL)
+		g_ptr_array_unref (stores);
+	return TRUE;
+}
+
+/**
+  * pk_backend_upgrade_system_thread:
+  */
+static gboolean
+pk_backend_upgrade_system_thread (PkBackend *backend)
+{
+	gchar **distro_id_split = NULL;
+	guint version;
+	gboolean ret;
+	PkErrorEnum error_code;
+	GError *error = NULL;
+	ZifReleaseUpgradeKind upgrade_kind_zif = ZIF_RELEASE_UPGRADE_KIND_DEFAULT;
+	PkUpgradeKindEnum upgrade_kind = pk_backend_get_uint (backend, "upgrade_kind");
+	const gchar *distro_id = pk_backend_get_string (backend, "distro_id");
+
+	/* check valid */
+	distro_id_split = g_strsplit (distro_id, "-", -1);
+	if (g_strv_length (distro_id_split) != 2) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_FAILED_CONFIG_PARSING,
+				       "distribution id %s invalid",
+				       distro_id);
+		goto out;
+	}
+
+	/* check fedora */
+	if (g_strcmp0 (distro_id_split[0], "fedora") != 0) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_FAILED_CONFIG_PARSING,
+				       "only 'fedora' is supported");
+		goto out;
+	}
+
+	/* map PK enum to Zif enumerated types */
+	if (upgrade_kind == PK_UPGRADE_KIND_ENUM_MINIMAL)
+		upgrade_kind_zif = ZIF_RELEASE_UPGRADE_KIND_MINIMAL;
+	else if (upgrade_kind == PK_UPGRADE_KIND_ENUM_COMPLETE)
+		upgrade_kind_zif = ZIF_RELEASE_UPGRADE_KIND_COMPLETE;
+
+	/* do the upgrade */
+	version = atoi (distro_id_split[1]);
+	ret = zif_release_upgrade_version (priv->release,
+					   version,
+					   upgrade_kind_zif,
+					   priv->state,
+					   &error);
+	if (!ret) {
+		/* convert the ZifRelease error code into a PK error enum */
+		switch (error->code) {
+		case ZIF_RELEASE_ERROR_DOWNLOAD_FAILED:
+			error_code = PK_ERROR_ENUM_PACKAGE_DOWNLOAD_FAILED;
+			break;
+		case ZIF_RELEASE_ERROR_FILE_INVALID:
+			error_code = PK_ERROR_ENUM_FAILED_CONFIG_PARSING;
+			break;
+		case ZIF_RELEASE_ERROR_LOW_DISKSPACE:
+			error_code = PK_ERROR_ENUM_NO_SPACE_ON_DEVICE;
+			break;
+		case ZIF_RELEASE_ERROR_NOT_FOUND:
+			error_code = PK_ERROR_ENUM_PACKAGE_NOT_FOUND;
+			break;
+		case ZIF_RELEASE_ERROR_NOT_SUPPORTED:
+			error_code = PK_ERROR_ENUM_NOT_SUPPORTED;
+			break;
+		case ZIF_RELEASE_ERROR_NO_UUID_FOR_ROOT:
+		case ZIF_RELEASE_ERROR_SETUP_INVALID:
+		case ZIF_RELEASE_ERROR_SPAWN_FAILED:
+		case ZIF_RELEASE_ERROR_WRITE_FAILED:
+			error_code = PK_ERROR_ENUM_INTERNAL_ERROR;
+			break;
+		default:
+			error_code = PK_ERROR_ENUM_INTERNAL_ERROR;
+		}
+		pk_backend_error_code (backend,
+				       error_code,
+				       "failed to upgrade: %s",
+				       error->message);
+		g_error_free (error);
+		goto out;
+	}
+out:
+	pk_backend_finished (backend);
+	g_strfreev (distro_id_split);
+	return TRUE;
+}
+
+/**
+ * pk_backend_download_packages:
+ */
+void
+pk_backend_download_packages (PkBackend *backend, gchar **package_ids,
+			      const gchar *directory)
+{
+	pk_backend_thread_create (backend, pk_backend_download_packages_thread);
+}
+
+/**
+ * pk_backend_get_categories:
+ */
+void
+pk_backend_get_categories (PkBackend *backend)
+{
+	pk_backend_thread_create (backend, pk_backend_get_categories_thread);
+}
+
+/**
+ * pk_backend_get_depends:
+ */
+void
+pk_backend_get_depends (PkBackend *backend, PkBitfield filters,
+			gchar **package_ids, gboolean recursive)
+{
+	pk_backend_thread_create (backend, pk_backend_get_depends_thread);
+}
+
+/**
+ * pk_backend_get_details:
+ */
+void
+pk_backend_get_details (PkBackend *backend, gchar **package_ids)
+{
+	pk_backend_thread_create (backend, pk_backend_get_details_thread);
+}
+
+/**
+ * pk_backend_get_distro_upgrades:
+ */
+void
+pk_backend_get_distro_upgrades (PkBackend *backend)
+{
+	pk_backend_thread_create (backend, pk_backend_get_distro_upgrades_thread);
+}
+
+/**
+ * pk_backend_get_files:
+ */
+void
+pk_backend_get_files (PkBackend *backend, gchar **package_ids)
+{
+	pk_backend_thread_create (backend, pk_backend_get_files_thread);
+}
+
+/**
+ * pk_backend_get_packages:
+ */
+void
+pk_backend_get_packages (PkBackend *backend, PkBitfield filters)
+{
+	pk_backend_thread_create (backend, pk_backend_search_thread);
+}
+
+/**
+ * pk_backend_get_repo_list:
+ */
+void
+pk_backend_get_repo_list (PkBackend *backend, PkBitfield filters)
+{
+	pk_backend_thread_create (backend, pk_backend_get_repo_list_thread);
+}
+
+/**
+ * pk_backend_get_requires:
+ */
+void
+pk_backend_get_requires (PkBackend *backend, PkBitfield filters,
+			 gchar **package_ids, gboolean recursive)
+{
+	pk_backend_thread_create (backend, pk_backend_get_requires_thread);
+}
+
+/**
+ * pk_backend_get_update_detail:
+ */
+void
+pk_backend_get_update_detail (PkBackend *backend, gchar **package_ids)
+{
+	pk_backend_thread_create (backend, pk_backend_get_update_detail_thread);
+}
+
+/**
+ * pk_backend_get_updates:
+ */
+void
+pk_backend_get_updates (PkBackend *backend, PkBitfield filters)
+{
+	pk_backend_thread_create (backend, pk_backend_get_updates_thread);
+}
+
+/**
+ * pk_backend_install_files:
+ */
+void
+pk_backend_install_files (PkBackend *backend, gboolean only_trusted,
+			  gchar **full_paths)
+{
+	pk_backend_thread_create (backend, pk_backend_install_files_thread);
+}
+
+/**
+ * pk_backend_install_packages:
+ */
+void
+pk_backend_install_packages (PkBackend *backend, gboolean only_trusted,
+			     gchar **package_ids)
+{
+	pk_backend_thread_create (backend, pk_backend_install_packages_thread);
+}
+
+/**
+ * pk_backend_refresh_cache:
+ */
+void
+pk_backend_refresh_cache (PkBackend *backend, gboolean force)
+{
+	/* check network state */
+	if (!pk_backend_is_online (backend)) {
+		pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_NO_NETWORK,
+				       "Cannot refresh cache whilst offline");
+		pk_backend_finished (backend);
+		return;
+	}
+	pk_backend_thread_create (backend, pk_backend_refresh_cache_thread);
+}
+
+/**
+ * pk_backend_remove_packages:
+ */
+void
+pk_backend_remove_packages (PkBackend *backend, gchar **package_ids,
+			    gboolean allow_deps, gboolean autoremove)
+{
+	pk_backend_thread_create (backend, pk_backend_remove_packages_thread);
+}
+
+/**
+ * pk_backend_repo_enable:
+ */
+void
+pk_backend_repo_enable (PkBackend *backend, const gchar *repo_id, gboolean enabled)
+{
+	pk_backend_thread_create (backend, pk_backend_repo_enable_thread);
+}
+
+/**
+ * pk_backend_resolve:
+ */
+void
+pk_backend_resolve (PkBackend *backend, PkBitfield filters, gchar **packages)
+{
+	pk_backend_set_strv (backend, "search", packages);
+	pk_backend_thread_create (backend, pk_backend_search_thread);
+}
+
+/**
+ * pk_backend_search_details:
+ */
+void
+pk_backend_search_details (PkBackend *backend, PkBitfield filters, gchar **values)
+{
+	pk_backend_thread_create (backend, pk_backend_search_thread);
+}
+
+/**
+ * pk_backend_search_files:
+ */
+void
+pk_backend_search_files (PkBackend *backend, PkBitfield filters, gchar **values)
+{
+	pk_backend_thread_create (backend, pk_backend_search_thread);
+}
+
+/**
+ * pk_backend_search_groups:
+ */
+void
+pk_backend_search_groups (PkBackend *backend, PkBitfield filters, gchar **values)
+{
+	pk_backend_thread_create (backend, pk_backend_search_thread);
+}
+
+/**
+ * pk_backend_search_names:
+ */
+void
+pk_backend_search_names (PkBackend *backend, PkBitfield filters, gchar **values)
+{
+	pk_backend_thread_create (backend, pk_backend_search_thread);
+}
+
+/**
+ * pk_backend_simulate_install_files:
+ */
+void
+pk_backend_simulate_install_files (PkBackend *backend, gchar **full_paths)
+{
+	pk_backend_thread_create (backend, pk_backend_install_files_thread);
+}
+
+/**
+ * pk_backend_simulate_install_packages:
+ */
+void
+pk_backend_simulate_install_packages (PkBackend *backend, gchar **package_ids)
+{
+	pk_backend_thread_create (backend, pk_backend_install_packages_thread);
+}
+
+/**
+ * pk_backend_simulate_remove_packages:
+ */
+void
+pk_backend_simulate_remove_packages (PkBackend *backend, gchar **package_ids,
+				     gboolean autoremove)
+{
+	pk_backend_thread_create (backend, pk_backend_remove_packages_thread);
+}
+
+/**
+ * pk_backend_simulate_update_packages:
+ */
+void
+pk_backend_simulate_update_packages (PkBackend *backend, gchar **package_ids)
+{
+	pk_backend_thread_create (backend, pk_backend_update_packages_thread);
+}
+
+/**
+ * pk_backend_update_packages:
+ */
+void
+pk_backend_update_packages (PkBackend *backend, gboolean only_trusted, gchar **package_ids)
+{
+	pk_backend_thread_create (backend, pk_backend_update_packages_thread);
+}
+
+/**
+ * pk_backend_upgrade_system:
+ */
+void
+pk_backend_upgrade_system (PkBackend *backend,
+			   const gchar *distro_id,
+			   PkUpgradeKindEnum upgrade_kind)
+{
+	pk_backend_thread_create (backend, pk_backend_upgrade_system_thread);
+}
+
+/**
+ * pk_backend_what_provides:
+ */
+void
+pk_backend_what_provides (PkBackend *backend, PkBitfield filters,
+			  PkProvidesEnum provides, gchar **values)
+{
+	guint i;
+	guint len;
+	gchar **search = NULL;
+	GPtrArray *array = NULL;
+
+	/* iter on each provide string, and wrap it with the fedora prefix */
+	len = g_strv_length (values);
+	array = g_ptr_array_new_with_free_func (g_free);
+	for (i=0; i<len; i++) {
+		/* compatibility with previous versions of GPK */
+		if (g_str_has_prefix (values[i], "gstreamer0.10(")) {
+			g_ptr_array_add (array, g_strdup (values[i]));
+		} else if (provides == PK_PROVIDES_ENUM_CODEC) {
+			g_ptr_array_add (array, g_strdup_printf ("gstreamer0.10(%s)", values[i]));
+		} else if (provides == PK_PROVIDES_ENUM_FONT) {
+			g_ptr_array_add (array, g_strdup_printf ("font(%s)", values[i]));
+		} else if (provides == PK_PROVIDES_ENUM_MIMETYPE) {
+			g_ptr_array_add (array, g_strdup_printf ("mimehandler(%s)", values[i]));
+		} else if (provides == PK_PROVIDES_ENUM_POSTSCRIPT_DRIVER) {
+			g_ptr_array_add (array, g_strdup_printf ("postscriptdriver(%s)", values[i]));
+		} else if (provides == PK_PROVIDES_ENUM_ANY) {
+			g_ptr_array_add (array, g_strdup_printf ("gstreamer0.10(%s)", values[i]));
+			g_ptr_array_add (array, g_strdup_printf ("font(%s)", values[i]));
+			g_ptr_array_add (array, g_strdup_printf ("mimehandler(%s)", values[i]));
+			g_ptr_array_add (array, g_strdup_printf ("postscriptdriver(%s)", values[i]));
+		} else {
+			pk_backend_error_code (backend,
+				       PK_ERROR_ENUM_PROVIDE_TYPE_NOT_SUPPORTED,
+					       "provide type %s not supported", pk_provides_enum_to_string (provides));
+		}
+	}
+
+	/* set the search terms and run */
+	search = pk_ptr_array_to_strv (array);
+	pk_backend_set_strv (backend, "search", search);
+	pk_backend_thread_create (backend, pk_backend_search_thread);
+	g_strfreev (search);
+	g_ptr_array_unref (array);
+}
diff --git a/backends/zif/zif-comps-groups.conf b/backends/zif/zif-comps-groups.conf
new file mode 120000
index 0000000..815b263
--- /dev/null
+++ b/backends/zif/zif-comps-groups.conf
@@ -0,0 +1 @@
+../yum/yum-comps-groups.conf
\ No newline at end of file
diff --git a/configure.ac b/configure.ac
index d044d05..bb4b1c7 100644
--- a/configure.ac
+++ b/configure.ac
@@ -497,6 +497,7 @@ AC_ARG_ENABLE(slapt, AS_HELP_STRING([--enable-slapt],[use the slapt backend]),en
 AC_ARG_ENABLE(smart, AS_HELP_STRING([--enable-smart],[use the SMART backend]),enable_smart=$enableval,enable_smart=no)
 AC_ARG_ENABLE(urpmi, AS_HELP_STRING([--enable-urpmi],[use the URPMI backend]),enable_urpmi=$enableval,enable_urpmi=no)
 AC_ARG_ENABLE(yum, AS_HELP_STRING([--enable-yum],[use the YUM backend]),enable_yum=$enableval,enable_yum=no)
+AC_ARG_ENABLE(zif, AS_HELP_STRING([--enable-zif],[use the Zif backend]),enable_zif=$enableval,enable_zif=no)
 AC_ARG_ENABLE(zypp, AS_HELP_STRING([--enable-zypp],[use the Zypp backend]),enable_zypp=$enableval,enable_zypp=no)
 
 # export to Makefile.am's
@@ -518,6 +519,7 @@ AM_CONDITIONAL(BACKEND_TYPE_SLAPT, [test x$enable_slapt = xyes])
 AM_CONDITIONAL(BACKEND_TYPE_SMART, [test x$enable_smart = xyes])
 AM_CONDITIONAL(BACKEND_TYPE_URPMI, [test x$enable_urpmi = xyes])
 AM_CONDITIONAL(BACKEND_TYPE_YUM, [test x$enable_yum = xyes])
+AM_CONDITIONAL(BACKEND_TYPE_ZIF, [test x$enable_zif = xyes])
 AM_CONDITIONAL(BACKEND_TYPE_ZYPP, [test x$enable_zypp = xyes])
 
 dnl ---------------------------------------------------------------------------
@@ -589,11 +591,13 @@ dnl ---------------------------------------------------------------------------
 AC_ARG_WITH([default_backend],
 	    AS_HELP_STRING([--with-default-backend=<option>],
 			   [Default backend to use
-                           alpm,apt,aptcc,box,conary,dummy,entropy,opkg,pisi,portage,ports,razor,slapt,smart,urpmi,yum,zypp (dummy)]))
+                           alpm,apt,aptcc,box,conary,dummy,entropy,opkg,pisi,portage,ports,razor,slapt,smart,urpmi,yum,zif,zypp (dummy)]))
 # default to a sane option for the installed tool
 if test x$with_default_backend = x; then
 	if test -f /usr/bin/yum ; then
 		with_default_backend=yum
+	elif test -f /usr/bin/zif; then
+		with_default_backend=zif
 	elif test -f /usr/lib/libalpm.so; then
 		with_default_backend=alpm
 	elif test -f /usr/bin/apt-get ; then
@@ -633,7 +637,7 @@ AC_DEFINE_UNQUOTED(DEFAULT_BACKEND, "$with_default_backend", [default backend pr
 AC_SUBST(DEFAULT_BACKEND, "$with_default_backend")
 
 build_zif=no
-if test x$enable_yum = xyes; then
+if test x$enable_zif = xyes; then
 	dnl ---------------------------------------------------------------------------
 	dnl - Zif is an experimental library for direct metadata access
 	dnl ---------------------------------------------------------------------------
@@ -801,6 +805,7 @@ backends/urpmi/helpers/perl_packagekit/Makefile
 backends/urpmi/helpers/urpmi_backend/Makefile
 backends/razor/Makefile
 backends/yum/Makefile
+backends/zif/Makefile
 backends/pisi/Makefile
 backends/poldek/Makefile
 backends/portage/Makefile
@@ -874,7 +879,7 @@ echo "
         SMART backend:             ${enable_smart}
         URPMI backend:             ${enable_urpmi}
         YUM backend:               ${enable_yum}
-          (with zif):              ${build_zif}
+        Zif backend:               ${enable_zif}
         Zypp backend:              ${enable_zypp}
         Default backend:           ${with_default_backend}
 "
diff --git a/contrib/PackageKit.spec.in b/contrib/PackageKit.spec.in
index 28bb44b..619fc64 100644
--- a/contrib/PackageKit.spec.in
+++ b/contrib/PackageKit.spec.in
@@ -48,6 +48,7 @@ BuildRequires: pango-devel
 BuildRequires: pm-utils-devel
 BuildRequires: fontconfig-devel
 BuildRequires: gobject-introspection-devel
+BuildRequires: zif-devel >= 0.1.3
 
 # functionality moved to udev itself
 Obsoletes: PackageKit-udev-helper < %{version}-%{release}
@@ -238,6 +239,7 @@ user to restart the computer or remove and re-insert the device.
 %configure \
         --disable-static \
         --enable-yum \
+        --enable-zif \
 %if 0%{?rhel} == 0
         --enable-smart \
         --enable-introspection \
commit f55217c77383c3eaf1aa4bbf5cbae529dca2c32c
Author: Matthias Klumpp <matthias at nlinux.org>
Date:   Sun Nov 28 19:12:50 2010 +0100

    trivial: Point to Gitorious repo on download page
    
    Set the new Gitorious repos as place for PackageKit
    daemon development.

diff --git a/docs/html/pk-download.html b/docs/html/pk-download.html
index aae23a9..e6547f4 100644
--- a/docs/html/pk-download.html
+++ b/docs/html/pk-download.html
@@ -178,11 +178,11 @@ Just make sure you install PackageKit before gnome-packagekit!
 <h2>Compiling the latest code</h2>
 <p>
 You can get the latest PackageKit daemon and GNOME frontend from the
-<a href="http://cgit.freedesktop.org/packagekit/">public git repositories</a>
-on <a href="http://www.freedesktop.org">freedesktop.org</a>:
+<a href="http://gitorious.org/packagekit/packagekit">public git repositories</a>
+on <a href="http://gitorious.org/">gitorious.org</a>:
 </p>
 <pre>
-git clone git://anongit.freedesktop.org/git/packagekit/PackageKit
+git clone git://gitorious.org/packagekit/packagekit.git
 git clone git://git.gnome.org/gnome-packagekit
 </pre>
 <p>
commit 3edf4f46e219372f8a73d572977565c443193c3e
Author: Jonathan Conder <jonno.conder at gmail.com>
Date:   Sat Nov 27 22:58:53 2010 +1300

    pacman: actually fix recursive logging

diff --git a/backends/pacman/backend-pacman.c b/backends/pacman/backend-pacman.c
index 6ed13a0..d22333e 100644
--- a/backends/pacman/backend-pacman.c
+++ b/backends/pacman/backend-pacman.c
@@ -42,23 +42,26 @@ pacman_message_cb (const gchar *domain, GLogLevelFlags level, const gchar *messa
 	g_return_if_fail (message != NULL);
 	g_return_if_fail (user_data != NULL);
 
+/* disable due to recursive logging, will fix via improving alpm backend */
+#if 0
 	/* report important output to PackageKit */
 	switch (level) {
 		case G_LOG_LEVEL_WARNING:
 		case G_LOG_LEVEL_MESSAGE:
-			/*g_warning ("pacman: %s", message);*/
+			g_warning ("pacman: %s", message);
 			backend_message ((PkBackend *) user_data, message);
 			break;
 
 		case G_LOG_LEVEL_INFO:
 		case G_LOG_LEVEL_DEBUG:
-			/*g_debug ("pacman: %s", message);*/
+			g_debug ("pacman: %s", message);
 			break;
 
 		default:
-			/*g_warning ("pacman: %s", message);*/
+			g_warning ("pacman: %s", message);
 			break;
 	}
+#endif
 }
 
 /**
commit f99d2b4dfe0e51b0eb9c3579e8ed7b54a49ddbcb
Author: Yuri Chornoivan <yurchor at ukr.net>
Date:   Fri Nov 26 13:51:07 2010 +0000

    l10n: Updated Ukrainian (uk) translation to 100%
    
    New status: 375 messages complete with 0 fuzzies and 0 untranslated.
    
    Transmitted-via: Transifex (www.transifex.net).

diff --git a/po/uk.po b/po/uk.po
index fdc263c..ee68575 100644
--- a/po/uk.po
+++ b/po/uk.po
@@ -7,128 +7,131 @@ msgid ""
 msgstr ""
 "Project-Id-Version: packagekit.master\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-07-01 12:08+0000\n"
-"PO-Revision-Date: 2010-07-01 21:13+0300\n"
+"POT-Creation-Date: 2010-11-26 08:16+0000\n"
+"PO-Revision-Date: 2010-11-26 15:48+0200\n"
 "Last-Translator: Yuri Chornoivan <yurchor at ukr.net>\n"
 "Language-Team: Ukrainian <translation at linux.org.ua>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms:  nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
-"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
 "X-Generator: Lokalize 1.1\n"
 
 #. TRANSLATORS: this is an atomic transaction
 #. TRANSLATORS: the role is the point of the transaction, e.g. update-system
-#: ../client/pk-console.c:176 ../client/pk-console.c:598
+#: ../client/pk-console.c:174
+#: ../client/pk-console.c:596
 msgid "Transaction"
 msgstr "Операція"
 
 #. TRANSLATORS: this is the time the transaction was started in system timezone
-#: ../client/pk-console.c:178
+#: ../client/pk-console.c:176
 msgid "System time"
 msgstr "Системний час"
 
 #. TRANSLATORS: this is if the transaction succeeded or not
-#: ../client/pk-console.c:180
+#: ../client/pk-console.c:178
 msgid "Succeeded"
 msgstr "Успішне"
 
-#: ../client/pk-console.c:180
+#: ../client/pk-console.c:178
 msgid "True"
 msgstr "Так"
 
-#: ../client/pk-console.c:180
+#: ../client/pk-console.c:178
 msgid "False"
 msgstr "Ні"
 
 #. TRANSLATORS: this is the transactions role, e.g. "update-system"
 #. TRANSLATORS: the trasaction role, e.g. update-system
-#: ../client/pk-console.c:182 ../src/pk-polkit-action-lookup.c:332
+#: ../client/pk-console.c:180
+#: ../src/pk-polkit-action-lookup.c:332
 msgid "Role"
 msgstr "Роль"
 
 #. TRANSLATORS: this is The duration of the transaction
-#: ../client/pk-console.c:187
+#: ../client/pk-console.c:185
 msgid "Duration"
 msgstr "Тривалість"
 
-#: ../client/pk-console.c:187
+#: ../client/pk-console.c:185
 msgid "(seconds)"
 msgstr "(секунд)"
 
 #. TRANSLATORS: this is The command line used to do the action
 #. TRANSLATORS: the command line of the thing that wants the authentication
-#: ../client/pk-console.c:191 ../src/pk-polkit-action-lookup.c:346
+#: ../client/pk-console.c:189
+#: ../src/pk-polkit-action-lookup.c:346
 msgid "Command line"
 msgstr "Командний рядок"
 
 #. TRANSLATORS: this is the user ID of the user that started the action
-#: ../client/pk-console.c:193
+#: ../client/pk-console.c:191
 msgid "User ID"
 msgstr "ІД користувача"
 
 #. TRANSLATORS: this is the username, e.g. hughsie
-#: ../client/pk-console.c:200
+#: ../client/pk-console.c:198
 msgid "Username"
 msgstr "Користувач"
 
 #. TRANSLATORS: this is the users real name, e.g. "Richard Hughes"
-#: ../client/pk-console.c:204
+#: ../client/pk-console.c:202
 msgid "Real name"
 msgstr "Справжнє ім’я"
 
-#: ../client/pk-console.c:212
+#: ../client/pk-console.c:210
 msgid "Affected packages:"
 msgstr "Задіяні пакунки:"
 
-#: ../client/pk-console.c:214
+#: ../client/pk-console.c:212
 msgid "Affected packages: None"
 msgstr "Задіяні пакунки: Немає"
 
 #. TRANSLATORS: this is the distro, e.g. Fedora 10
-#: ../client/pk-console.c:249
+#: ../client/pk-console.c:247
 msgid "Distribution"
 msgstr "Дистрибутив"
 
 #. TRANSLATORS: this is type of update, stable or testing
-#: ../client/pk-console.c:251
+#: ../client/pk-console.c:249
 msgid "Type"
 msgstr "Тип"
 
 #. TRANSLATORS: this is any summary text describing the upgrade
 #. TRANSLATORS: this is the summary of the group
-#: ../client/pk-console.c:253 ../client/pk-console.c:292
+#: ../client/pk-console.c:251
+#: ../client/pk-console.c:290
 msgid "Summary"
 msgstr "Резюме"
 
 #. TRANSLATORS: this is the group category name
-#: ../client/pk-console.c:281
+#: ../client/pk-console.c:279
 msgid "Category"
 msgstr "Категорія"
 
 #. TRANSLATORS: this is group identifier
-#: ../client/pk-console.c:283
+#: ../client/pk-console.c:281
 msgid "ID"
 msgstr "ІД"
 
 #. TRANSLATORS: this is the parent group
-#: ../client/pk-console.c:286
+#: ../client/pk-console.c:284
 msgid "Parent"
 msgstr "Батьківська"
 
 #. TRANSLATORS: this is the name of the parent group
-#: ../client/pk-console.c:289
+#: ../client/pk-console.c:287
 msgid "Name"
 msgstr "Назва"
 
 #. TRANSLATORS: this is preferred icon for the group
-#: ../client/pk-console.c:295
+#: ../client/pk-console.c:293
 msgid "Icon"
 msgstr "Значок"
 
 #. TRANSLATORS: this is a header for the package that can be updated
-#: ../client/pk-console.c:341
+#: ../client/pk-console.c:339
 msgid "Details about the update:"
 msgstr "Подробиці щодо оновлення:"
 
@@ -137,9 +140,10 @@ msgstr "Подробиці щодо оновлення:"
 #. TRANSLATORS: the package that is not signed by a known key
 #. TRANSLATORS: the package name that was trying to be installed
 #. TRANSLATORS: title, the names of the packages that the method is processing
-#: ../client/pk-console.c:347 ../client/pk-console.c:617
-#: ../lib/packagekit-glib2/pk-task-text.c:126
-#: ../lib/packagekit-glib2/pk-task-text.c:208
+#: ../client/pk-console.c:345
+#: ../client/pk-console.c:615
+#: ../lib/packagekit-glib2/pk-task-text.c:124
+#: ../lib/packagekit-glib2/pk-task-text.c:206
 #: ../src/pk-polkit-action-lookup.c:357
 msgid "Package"
 msgid_plural "Packages"
@@ -148,204 +152,200 @@ msgstr[1] "Пакунки"
 msgstr[2] "Пакунки"
 
 #. TRANSLATORS: details about the update, any packages that this update updates
-#: ../client/pk-console.c:350
+#: ../client/pk-console.c:348
 msgid "Updates"
 msgstr "Оновлює"
 
 #. TRANSLATORS: details about the update, any packages that this update obsoletes
-#: ../client/pk-console.c:354
+#: ../client/pk-console.c:352
 msgid "Obsoletes"
 msgstr "Робить застарілим"
 
 #. TRANSLATORS: details about the update, the vendor URLs
 #. TRANSLATORS: the vendor (e.g. vmware) that is providing the EULA
-#: ../client/pk-console.c:358 ../lib/packagekit-glib2/pk-task-text.c:211
+#: ../client/pk-console.c:356
+#: ../lib/packagekit-glib2/pk-task-text.c:209
 msgid "Vendor"
 msgstr "Постачальник"
 
 #. TRANSLATORS: details about the update, the bugzilla URLs
-#: ../client/pk-console.c:362
+#: ../client/pk-console.c:360
 msgid "Bugzilla"
 msgstr "Bugzilla"
 
 #. TRANSLATORS: details about the update, the CVE URLs
-#: ../client/pk-console.c:366
+#: ../client/pk-console.c:364
 msgid "CVE"
 msgstr "CVE"
 
 #. TRANSLATORS: details about the update, if the package requires a restart
-#: ../client/pk-console.c:370
+#: ../client/pk-console.c:368
 msgid "Restart"
 msgstr "Перезапуск"
 
 #. TRANSLATORS: details about the update, any description of the update
-#: ../client/pk-console.c:374
+#: ../client/pk-console.c:372
 msgid "Update text"
 msgstr "Текст оновлення"
 
 #. TRANSLATORS: details about the update, the changelog for the package
-#: ../client/pk-console.c:378
+#: ../client/pk-console.c:376
 msgid "Changes"
 msgstr "Зміни"
 
 #. TRANSLATORS: details about the update, the ongoing state of the update
-#: ../client/pk-console.c:382
+#: ../client/pk-console.c:380
 msgid "State"
 msgstr "Стан"
 
 #. TRANSLATORS: details about the update, date the update was issued
-#: ../client/pk-console.c:386
+#: ../client/pk-console.c:384
 msgid "Issued"
 msgstr "Випущено"
 
 #. TRANSLATORS: details about the update, date the update was updated
 #. TRANSLATORS: The action of the package, in past tense
-#: ../client/pk-console.c:390 ../lib/packagekit-glib2/pk-console-shared.c:517
+#: ../client/pk-console.c:388
+#: ../lib/packagekit-glib2/pk-console-shared.c:515
 msgid "Updated"
 msgstr "Оновлено"
 
 #. TRANSLATORS: if the repo is enabled
-#: ../client/pk-console.c:426
+#: ../client/pk-console.c:424
 msgid "Enabled"
 msgstr "Увімкнено"
 
 #. TRANSLATORS: if the repo is disabled
-#: ../client/pk-console.c:429
+#: ../client/pk-console.c:427
 msgid "Disabled"
 msgstr "Вимкнено"
 
 #. TRANSLATORS: a package requires the system to be restarted
-#: ../client/pk-console.c:461
+#: ../client/pk-console.c:459
 msgid "System restart required by:"
 msgstr "Перезавантаження системи потрібне для:"
 
 #. TRANSLATORS: a package requires the session to be restarted
-#: ../client/pk-console.c:464
+#: ../client/pk-console.c:462
 msgid "Session restart required:"
 msgstr "Перезапуск сеансу потрібен:"
 
 #. TRANSLATORS: a package requires the system to be restarted due to a security update
-#: ../client/pk-console.c:467
+#: ../client/pk-console.c:465
 msgid "System restart (security) required by:"
 msgstr "Потрібне перезавантаження системи (безпека) для:"
 
 #. TRANSLATORS: a package requires the session to be restarted due to a security update
-#: ../client/pk-console.c:470
+#: ../client/pk-console.c:468
 msgid "Session restart (security) required:"
 msgstr "Потрібен перезапуск сеансу (безпека):"
 
 #. TRANSLATORS: a package requires the application to be restarted
-#: ../client/pk-console.c:473
+#: ../client/pk-console.c:471
 msgid "Application restart required by:"
 msgstr "Потрібен перезапуск програми для:"
 
 #. TRANSLATORS: This a list of details about the package
-#: ../client/pk-console.c:508
+#: ../client/pk-console.c:506
 msgid "Package description"
 msgstr "Опис пакунка"
 
 #. TRANSLATORS: This a message (like a little note that may be of interest) from the transaction
-#: ../client/pk-console.c:539
+#: ../client/pk-console.c:537
 msgid "Message:"
 msgstr "Повідомлення:"
 
 #. TRANSLATORS: This where the package has no files
-#: ../client/pk-console.c:560
+#: ../client/pk-console.c:558
 msgid "No files"
 msgstr "Без файлів"
 
 #. TRANSLATORS: This a list files contained in the package
-#: ../client/pk-console.c:565
+#: ../client/pk-console.c:563
 msgid "Package files"
 msgstr "Файли пакунка"
 
 #. TRANSLATORS: the percentage complete of the transaction
-#: ../client/pk-console.c:633
+#: ../client/pk-console.c:631
 msgid "Percentage"
 msgstr "Відсотки"
 
 #. TRANSLATORS: the status of the transaction (e.g. downloading)
-#: ../client/pk-console.c:651
+#: ../client/pk-console.c:649
 msgid "Status"
 msgstr "Стан"
 
 #. TRANSLATORS: the results from the transaction
-#: ../client/pk-console.c:680
+#: ../client/pk-console.c:678
 msgid "Results:"
 msgstr "Результат:"
 
 #. TRANSLATORS: we failed to get any results, which is pretty fatal in my book
-#: ../client/pk-console.c:687
+#: ../client/pk-console.c:685
 msgid "Fatal error"
 msgstr "Критична помилка"
 
+#. TRANSLATORS: the user asked to update everything, but there is nothing that can be updated
+#: ../client/pk-console.c:701
+msgid "There are no packages to update."
+msgstr "Пакунків для оновлення не виявлено."
+
 #. TRANSLATORS: the transaction failed in a way we could not expect
-#: ../client/pk-console.c:696
-#: ../contrib/command-not-found/pk-command-not-found.c:454
-#: ../contrib/command-not-found/pk-command-not-found.c:634
+#: ../client/pk-console.c:704
+#: ../contrib/command-not-found/pk-command-not-found.c:639
 msgid "The transaction failed"
 msgstr "Спроба виконання операції зазнала невдачі"
 
 #. TRANSLATORS: print a message when there are no updates
-#: ../client/pk-console.c:727
+#: ../client/pk-console.c:733
 msgid "There are no updates available at this time."
 msgstr "На поточний момент оновлень не виявлено."
 
-#: ../client/pk-console.c:750
+#: ../client/pk-console.c:756
 msgid "There are no upgrades available at this time."
 msgstr "На поточний момент оновлень не виявлено."
 
 #. TRANSLATORS: a package needs to restart their system
-#: ../client/pk-console.c:817
+#: ../client/pk-console.c:823
 msgid "Please restart the computer to complete the update."
 msgstr "Щоб завершити оновлення, перезавантажте систему."
 
 #. TRANSLATORS: a package needs to restart the session
-#: ../client/pk-console.c:820
+#: ../client/pk-console.c:826
 msgid "Please logout and login to complete the update."
 msgstr "Щоб завершити оновлення, вийдіть з облікового запису і увійдіть знову."
 
 #. TRANSLATORS: a package needs to restart their system (due to security)
-#: ../client/pk-console.c:823
-msgid ""
-"Please restart the computer to complete the update as important security "
-"updates have been installed."
-msgstr ""
-"перезавантажте систему, щоб завершити встановлення важливих оновлень безпеки."
+#: ../client/pk-console.c:829
+msgid "Please restart the computer to complete the update as important security updates have been installed."
+msgstr "перезавантажте систему, щоб завершити встановлення важливих оновлень безпеки."
 
 #. TRANSLATORS: a package needs to restart the session (due to security)
-#: ../client/pk-console.c:826
-msgid ""
-"Please logout and login to complete the update as important security updates "
-"have been installed."
-msgstr ""
-"Щоб завершити встановлення важливих оновлень безпеки вийдіть з облікового "
-"запису і увійдіть до нього знову."
+#: ../client/pk-console.c:832
+msgid "Please logout and login to complete the update as important security updates have been installed."
+msgstr "Щоб завершити встановлення важливих оновлень безпеки вийдіть з облікового запису і увійдіть до нього знову."
 
 #. TRANSLATORS: The user used 'pkcon install dave.rpm' rather than 'pkcon install-local dave.rpm'
-#: ../client/pk-console.c:852
+#: ../client/pk-console.c:858
 #, c-format
-msgid ""
-"Expected package name, actually got file. Try using 'pkcon install-local %s' "
-"instead."
-msgstr ""
-"Мало бути передано назву пакунка, передано файл. Спробуйте скористатися "
-"командою «pkcon install-local %s»."
+msgid "Expected package name, actually got file. Try using 'pkcon install-local %s' instead."
+msgstr "Мало бути передано назву пакунка, передано файл. Спробуйте скористатися командою «pkcon install-local %s»."
 
 #. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console.c:860
+#: ../client/pk-console.c:866
 #, c-format
 msgid "This tool could not find any available package: %s"
 msgstr "Програмі не вдалося знайти жодного доступного пакунка: %s"
 
 #. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console.c:888
+#: ../client/pk-console.c:894
 #, c-format
 msgid "This tool could not find the installed package: %s"
 msgstr "Програмі не вдалося знайти встановлений пакунок: %s"
 
 #. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console.c:916 ../client/pk-console.c:944
+#: ../client/pk-console.c:922
+#: ../client/pk-console.c:950
 #, c-format
 msgid "This tool could not find the package: %s"
 msgstr "Програмі не вдалося знайти пакунок: %s"
@@ -354,663 +354,680 @@ msgstr "Програмі не вдалося знайти пакунок: %s"
 #. TRANSLATORS: There was an error getting the dependencies for the package. The detailed error follows
 #. TRANSLATORS: There was an error getting the details about the package. The detailed error follows
 #. TRANSLATORS: The package name was not found in any software sources. The detailed error follows
-#: ../client/pk-console.c:972 ../client/pk-console.c:1000
-#: ../client/pk-console.c:1028 ../client/pk-console.c:1056
-#: ../client/pk-console.c:1084
+#: ../client/pk-console.c:978
+#: ../client/pk-console.c:1006
+#: ../client/pk-console.c:1034
+#: ../client/pk-console.c:1062
+#: ../client/pk-console.c:1090
 #, c-format
 msgid "This tool could not find all the packages: %s"
 msgstr "Програмі не вдалося знайти всі пакунки: %s"
 
 #. TRANSLATORS: This is when the daemon crashed, and we are up shit creek without a paddle
-#: ../client/pk-console.c:1113
+#: ../client/pk-console.c:1119
 msgid "The daemon crashed mid-transaction!"
 msgstr "Аварійне завершення фонової служби під час операції!"
 
 #. TRANSLATORS: This is the header to the --help menu
-#: ../client/pk-console.c:1147
+#: ../client/pk-console.c:1153
 msgid "PackageKit Console Interface"
 msgstr "Консольний інтерфейс PackageKit"
 
 #. these are commands we can use with pkcon
-#: ../client/pk-console.c:1149
+#: ../client/pk-console.c:1155
 msgid "Subcommands:"
 msgstr "Підкоманди:"
 
 #. TRANSLATORS: we keep a database updated with the time that an action was last executed
-#: ../client/pk-console.c:1228
+#: ../client/pk-console.c:1234
 msgid "Failed to get the time since this action was last completed"
 msgstr "Не вдалося визначити час, коли цю дію було виконано востаннє"
 
 #. TRANSLATORS: command line argument, just show the version string
-#: ../client/pk-console.c:1268 ../client/pk-monitor.c:373
+#: ../client/pk-console.c:1275
+#: ../client/pk-monitor.c:371
 msgid "Show the program version and exit"
 msgstr "Показати версію програми і завершити роботу"
 
 #. TRANSLATORS: command line argument, use a filter to narrow down results
-#: ../client/pk-console.c:1271
+#: ../client/pk-console.c:1278
 msgid "Set the filter, e.g. installed"
 msgstr "Встановити фільтр, наприклад, встановлені"
 
 #. TRANSLATORS: command line argument, use a non-standard install prefix
-#: ../client/pk-console.c:1274
+#: ../client/pk-console.c:1281
 msgid "Set the install root, e.g. '/' or '/mnt/ltsp'"
-msgstr ""
-"Встановити кореневий каталог встановлення, наприклад, '/' або '/mnt/ltsp'"
+msgstr "Встановити кореневий каталог встановлення, наприклад, '/' або '/mnt/ltsp'"
 
 #. TRANSLATORS: command line argument, work asynchronously
-#: ../client/pk-console.c:1277
+#: ../client/pk-console.c:1284
 msgid "Exit without waiting for actions to complete"
 msgstr "Завершити роботу, не чекаючи на завершення дії"
 
 #. command line argument, do we ask questions
-#: ../client/pk-console.c:1280
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:527
+#: ../client/pk-console.c:1287
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:525
 msgid "Install the packages without asking for confirmation"
 msgstr "Встановити пакунки без запиту щодо підтвердження"
 
 #. TRANSLATORS: command line argument, this command is not a priority
-#: ../client/pk-console.c:1283
+#: ../client/pk-console.c:1290
 msgid "Run the command using idle network bandwidth and also using less power"
-msgstr ""
-"Виконати команду з мінімальним використанням мережевого каналу і меншою "
-"витратою ресурсів системи"
+msgstr "Виконати команду з мінімальним використанням мережевого каналу і меншою витратою ресурсів системи"
 
 #. TRANSLATORS: command line argument, just output without fancy formatting
-#: ../client/pk-console.c:1286
-msgid ""
-"Print to screen a machine readable output, rather than using animated widgets"
-msgstr ""
-"Вивести дані про поступ у простому текстовому форматі, без використання "
-"анімованих віджетів"
+#: ../client/pk-console.c:1293
+msgid "Print to screen a machine readable output, rather than using animated widgets"
+msgstr "Вивести дані про поступ у простому текстовому форматі, без використання анімованих віджетів"
+
+#. TRANSLATORS: command line argument, just output without fancy formatting
+#: ../client/pk-console.c:1296
+msgid "The maximum metadata cache age. Use -1 for 'never'."
+msgstr "Максимальна тривалість зберігання кешу метаданих. Значення -1 відповідає зняттю обмежень на тривалість."
 
 #. TRANSLATORS: we failed to contact the daemon
-#: ../client/pk-console.c:1308
+#: ../client/pk-console.c:1333
 msgid "Failed to contact PackageKit"
 msgstr "Не вдалося зв’язатися з PackageKit"
 
 #. TRANSLATORS: The user specified an incorrect filter
-#: ../client/pk-console.c:1369
+#: ../client/pk-console.c:1381
 msgid "The proxy could not be set"
 msgstr "Не вдалося встановити параметри проксі-сервера"
 
 #. TRANSLATORS: The user specified an incorrect filter
-#: ../client/pk-console.c:1381
+#: ../client/pk-console.c:1393
 msgid "The install root could not be set"
 msgstr "Не вдалося призначити кореневий каталог встановлення"
 
 #. TRANSLATORS: The user specified an incorrect filter
-#: ../client/pk-console.c:1393
+#: ../client/pk-console.c:1405
 msgid "The filter specified was invalid"
 msgstr "Вказано некоректний фільтр"
 
 #. TRANSLATORS: a search type can be name, details, file, etc
-#: ../client/pk-console.c:1412
+#: ../client/pk-console.c:1424
 msgid "A search type is required, e.g. name"
 msgstr "Тип пошуку, якщо такий потрібен, наприклад, назва"
 
 #. TRANSLATORS: the user needs to provide a search term
-#: ../client/pk-console.c:1419 ../client/pk-console.c:1431
-#: ../client/pk-console.c:1443 ../client/pk-console.c:1455
+#: ../client/pk-console.c:1431
+#: ../client/pk-console.c:1443
+#: ../client/pk-console.c:1455
+#: ../client/pk-console.c:1467
 msgid "A search term is required"
 msgstr "Потрібен ключ пошуку"
 
 #. TRANSLATORS: the search type was provided, but invalid
-#: ../client/pk-console.c:1465
+#: ../client/pk-console.c:1477
 msgid "Invalid search type"
 msgstr "Некоректний тип пошуку"
 
 #. TRANSLATORS: the user did not specify what they wanted to install
-#: ../client/pk-console.c:1471
+#: ../client/pk-console.c:1483
 msgid "A package name to install is required"
 msgstr "Слід вказати назву пакунка, який слід встановити"
 
 #. TRANSLATORS: the user did not specify what they wanted to install
-#: ../client/pk-console.c:1480
+#: ../client/pk-console.c:1492
 msgid "A filename to install is required"
 msgstr "Слід вказати назву файла, який слід встановити"
 
 #. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:1492
+#: ../client/pk-console.c:1503
 msgid "A type, key_id and package_id are required"
 msgstr "Слід вказати тип, ідентифікатор ключа і ідентифікатор пакунка"
 
 #. TRANSLATORS: the user did not specify what they wanted to remove
-#: ../client/pk-console.c:1503
+#: ../client/pk-console.c:1514
 msgid "A package name to remove is required"
 msgstr "Слід вказати назву пакунка, який потрібно вилучити"
 
 #. TRANSLATORS: the user did not specify anything about what to download or where
-#: ../client/pk-console.c:1512
+#: ../client/pk-console.c:1523
 msgid "A destination directory and the package names to download are required"
-msgstr ""
-"Слід вказати каталог призначення і назви пакунків, які потрібно звантажити"
+msgstr "Слід вказати каталог призначення і назви пакунків, які потрібно звантажити"
 
 #. TRANSLATORS: the directory does not exist, so we can't continue
-#: ../client/pk-console.c:1519
+#: ../client/pk-console.c:1530
 msgid "Directory not found"
 msgstr "Каталог не знайдено"
 
 #. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:1528
+#: ../client/pk-console.c:1539
 msgid "A licence identifier (eula-id) is required"
 msgstr "Слід вказати ідентифікатор ліцензії (eula-id)"
 
 #. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:1539
+#: ../client/pk-console.c:1550
 msgid "A transaction identifier (tid) is required"
 msgstr "Слід вказати ідентифікатор операції (tid)"
 
 #. TRANSLATORS: The user did not specify a package name
-#: ../client/pk-console.c:1560
+#: ../client/pk-console.c:1571
 msgid "A package name to resolve is required"
 msgstr "Слід вказати назву пакунка для розв’язання конфлікту"
 
 #. TRANSLATORS: The user did not specify a repository (software source) name
-#: ../client/pk-console.c:1571 ../client/pk-console.c:1582
+#: ../client/pk-console.c:1582
+#: ../client/pk-console.c:1593
 msgid "A repository name is required"
 msgstr "Слід вказати назву сховища"
 
 #. TRANSLATORS: The user didn't provide any data
-#: ../client/pk-console.c:1593
+#: ../client/pk-console.c:1604
 msgid "A repo name, parameter and value are required"
 msgstr "Слід вказати назву сховища, параметр і значення"
 
 #. TRANSLATORS: The user didn't specify what action to use
-#: ../client/pk-console.c:1610
+#: ../client/pk-console.c:1621
 msgid "An action, e.g. 'update-system' is required"
 msgstr "Слід вказати дію, наприклад «update-system»"
 
 #. TRANSLATORS: The user specified an invalid action
-#: ../client/pk-console.c:1617
+#: ../client/pk-console.c:1628
 msgid "A correct role is required"
 msgstr "Слід вказати належну роль"
 
 #. TRANSLATORS: The user did not provide a package name
 #. TRANSLATORS: This is when the user fails to supply the package name
-#: ../client/pk-console.c:1627 ../client/pk-console.c:1642
-#: ../client/pk-console.c:1651 ../client/pk-console.c:1671
-#: ../client/pk-console.c:1680 ../client/pk-generate-pack.c:316
+#: ../client/pk-console.c:1638
+#: ../client/pk-console.c:1652
+#: ../client/pk-console.c:1661
+#: ../client/pk-console.c:1681
+#: ../client/pk-console.c:1690
+#: ../client/pk-generate-pack.c:314
 msgid "A package name is required"
 msgstr "Слід вказати назву пакунка"
 
 #. TRANSLATORS: each package "provides" certain things, e.g. mime(gstreamer-decoder-mp3), the user didn't specify it
-#: ../client/pk-console.c:1660
+#: ../client/pk-console.c:1670
 msgid "A package provide string is required"
 msgstr "Слід вказати рядок вмісту"
 
+#. TRANSLATORS: The user did not provide a distro name
+#: ../client/pk-console.c:1714
+msgid "A distribution name is required"
+msgstr "Слід вказати назву дистрибутива"
+
+#. TRANSLATORS: The user did not provide an upgrade type
+#: ../client/pk-console.c:1720
+msgid "An upgrade type is required, e.g. 'minimal', 'default' or 'complete'"
+msgstr "Слід вказати тип оновлення, наприклад, «minimal», «default» або «complete»"
+
 #. TRANSLATORS: The user tried to use an unsupported option on the command line
-#: ../client/pk-console.c:1741
+#: ../client/pk-console.c:1770
 #, c-format
 msgid "Option '%s' is not supported"
 msgstr "Підтримки параметра «%s» не передбачено"
 
 #. TRANSLATORS: Generic failure of what they asked to do
-#: ../client/pk-console.c:1751
+#: ../client/pk-console.c:1780
 msgid "Command failed"
 msgstr "Спроба виконання команди зазнала невдачі"
 
 #. TRANSLATORS: we can exclude certain packages (glibc) when we know they'll exist on the target
-#: ../client/pk-generate-pack.c:255
+#: ../client/pk-generate-pack.c:253
 msgid "Set the file name of dependencies to be excluded"
 msgstr "Вкажіть назви файлів залежностей, які слід виключити"
 
 #. TRANSLATORS: the output location
-#: ../client/pk-generate-pack.c:258
+#: ../client/pk-generate-pack.c:256
 msgid "The output file or directory (the current directory is used if omitted)"
-msgstr ""
-"Файл або каталог виведення даних (якщо пропустити, буде використано поточний "
-"каталог)"
+msgstr "Файл або каталог виведення даних (якщо пропустити, буде використано поточний каталог)"
 
 #. TRANSLATORS: put a list of packages in the pack
-#: ../client/pk-generate-pack.c:261
+#: ../client/pk-generate-pack.c:259
 msgid "The package to be put into the service pack"
 msgstr "Пакунок, призначений для створення пакунка обслуговування"
 
 #. TRANSLATORS: put all pending updates in the pack
-#: ../client/pk-generate-pack.c:264
+#: ../client/pk-generate-pack.c:262
 msgid "Put all updates available in the service pack"
 msgstr "Додати всі можливі оновлення до пакунка з обслуговування"
 
 #. TRANSLATORS: This is when the user fails to supply the correct arguments
-#: ../client/pk-generate-pack.c:300
+#: ../client/pk-generate-pack.c:298
 msgid "Neither --package or --updates option selected."
 msgstr "Не обрано ні параметра --package, ні параметра --updates."
 
 #. TRANSLATORS: This is when the user fails to supply just one argument
-#: ../client/pk-generate-pack.c:308
+#: ../client/pk-generate-pack.c:306
 msgid "Both options selected."
 msgstr "Обрано обидва параметра."
 
 #. TRANSLATORS: This is when the user fails to supply the output
-#: ../client/pk-generate-pack.c:324
+#: ../client/pk-generate-pack.c:322
 msgid "A output directory or file name is required"
 msgstr "Слід вказати каталог або файл для виведення даних"
 
 #. TRANSLATORS: This is when the daemon is not-installed/broken and fails to startup
-#: ../client/pk-generate-pack.c:342
+#: ../client/pk-generate-pack.c:340
 msgid "The daemon failed to startup"
 msgstr "Не вдалося запустити фонову службу"
 
 #. TRANSLATORS: This is when the backend doesn't have the capability to get-depends
 #. TRANSLATORS: This is when the backend doesn't have the capability to download
-#: ../client/pk-generate-pack.c:353 ../client/pk-generate-pack.c:359
+#: ../client/pk-generate-pack.c:351
+#: ../client/pk-generate-pack.c:357
 msgid "The package manager cannot perform this type of operation."
 msgstr "Керування пакунками не може виконувати дії цього типу."
 
 #. TRANSLATORS: This is when the distro didn't include libarchive support into PK
-#: ../client/pk-generate-pack.c:366
-msgid ""
-"Service packs cannot be created as PackageKit was not built with libarchive "
-"support."
-msgstr ""
-"Створення пакунків з обслуговування неможливе, оскільки PackageKit було "
-"зібрано без підтримки libarchive."
+#: ../client/pk-generate-pack.c:364
+msgid "Service packs cannot be created as PackageKit was not built with libarchive support."
+msgstr "Створення пакунків з обслуговування неможливе, оскільки PackageKit було зібрано без підтримки libarchive."
 
 #. TRANSLATORS: the user specified an absolute path, but didn't get the extension correct
-#: ../client/pk-generate-pack.c:377
+#: ../client/pk-generate-pack.c:375
 msgid "If specifying a file, the service pack name must end with"
 msgstr "Якщо вказано файл, назва пакунка з обслуговування має завершуватися на"
 
 #. TRANSLATORS: This is when file already exists
-#: ../client/pk-generate-pack.c:393
+#: ../client/pk-generate-pack.c:391
 msgid "A pack with the same name already exists, do you want to overwrite it?"
 msgstr "Вже існує пакунок з тією самою назвою, бажаєте перезаписати його?"
 
 #. TRANSLATORS: This is when the pack was not overwritten
-#: ../client/pk-generate-pack.c:396
+#: ../client/pk-generate-pack.c:394
 msgid "The pack was not overwritten."
 msgstr "Пакунок не було перезаписано."
 
 #. TRANSLATORS: This is when the temporary directory cannot be created, the directory name follows
-#: ../client/pk-generate-pack.c:409
+#: ../client/pk-generate-pack.c:407
 msgid "Failed to create directory:"
 msgstr "Спроба створення каталогу завершилася невдало:"
 
 #. TRANSLATORS: This is when the list of packages from the remote computer cannot be opened
-#: ../client/pk-generate-pack.c:421
+#: ../client/pk-generate-pack.c:419
 msgid "Failed to open package list."
 msgstr "Не вдалося відкрити список пакунків."
 
 #. TRANSLATORS: The package name is being matched up to available packages
-#: ../client/pk-generate-pack.c:430
+#: ../client/pk-generate-pack.c:428
 msgid "Finding package name."
 msgstr "Пошук назви пакунка."
 
 #. TRANSLATORS: This is when the package cannot be found in any software source. The detailed error follows
-#: ../client/pk-generate-pack.c:434
+#: ../client/pk-generate-pack.c:432
 #, c-format
 msgid "Failed to find package '%s': %s"
 msgstr "Не вдалося знайти пакунок «%s»: %s"
 
 #. TRANSLATORS: This is telling the user we are in the process of making the pack
-#: ../client/pk-generate-pack.c:442
+#: ../client/pk-generate-pack.c:440
 msgid "Creating service pack..."
 msgstr "Створення пакунка з обслуговування..."
 
 #. TRANSLATORS: we succeeded in making the file
-#: ../client/pk-generate-pack.c:457
+#: ../client/pk-generate-pack.c:455
 #, c-format
 msgid "Service pack created '%s'"
 msgstr "Створено пакунок з обслуговування «%s»"
 
 #. TRANSLATORS: we failed to make te file
-#: ../client/pk-generate-pack.c:462
+#: ../client/pk-generate-pack.c:460
 #, c-format
 msgid "Failed to create '%s': %s"
 msgstr "Не вдалося створити «%s»: %s"
 
-#: ../client/pk-monitor.c:286
+#: ../client/pk-monitor.c:284
 msgid "Failed to get daemon state"
 msgstr "Спроба визначення стану фонової служби завершилася невдало"
 
-#: ../client/pk-monitor.c:351
+#: ../client/pk-monitor.c:349
 msgid "Failed to get properties"
 msgstr "Не вдалося звантажити дані щодо властивостей"
 
 #. TRANSLATORS: this is a program that monitors PackageKit
-#: ../client/pk-monitor.c:389
+#: ../client/pk-monitor.c:387
 msgid "PackageKit Monitor"
 msgstr "Монітор PackageKit"
 
 #. TRANSLATORS: when we are getting data from the daemon
-#: ../contrib/browser-plugin/pk-plugin-install.c:497
+#: ../contrib/browser-plugin/pk-plugin-install.c:499
 msgid "Getting package information..."
 msgstr "Отримання даних щодо пакунка..."
 
 #. TRANSLATORS: run an applicaiton
-#: ../contrib/browser-plugin/pk-plugin-install.c:503
+#: ../contrib/browser-plugin/pk-plugin-install.c:505
 #, c-format
 msgid "Run %s"
 msgstr "Виконати %s"
 
 #. TRANSLATORS: show the installed version of a package
-#: ../contrib/browser-plugin/pk-plugin-install.c:509
+#: ../contrib/browser-plugin/pk-plugin-install.c:511
 msgid "Installed version"
 msgstr "Встановлена версія"
 
 #. TRANSLATORS: run the application now
-#: ../contrib/browser-plugin/pk-plugin-install.c:517
+#: ../contrib/browser-plugin/pk-plugin-install.c:519
 #, c-format
 msgid "Run version %s now"
 msgstr "Виконати версію %s"
 
 #. TRANSLATORS: run the application now
-#: ../contrib/browser-plugin/pk-plugin-install.c:523
+#: ../contrib/browser-plugin/pk-plugin-install.c:525
 msgid "Run now"
 msgstr "Виконати зараз"
 
 #. TRANSLATORS: update to a new version of the package
-#: ../contrib/browser-plugin/pk-plugin-install.c:529
+#: ../contrib/browser-plugin/pk-plugin-install.c:531
 #, c-format
 msgid "Update to version %s"
 msgstr "Оновити до версії %s"
 
 #. TRANSLATORS: To install a package
-#: ../contrib/browser-plugin/pk-plugin-install.c:535
+#: ../contrib/browser-plugin/pk-plugin-install.c:537
 #, c-format
 msgid "Install %s now"
 msgstr "Встановити %s"
 
 #. TRANSLATORS: the version of the package
-#: ../contrib/browser-plugin/pk-plugin-install.c:538
+#: ../contrib/browser-plugin/pk-plugin-install.c:540
 msgid "Version"
 msgstr "Версія"
 
 #. TRANSLATORS: noting found, so can't install
-#: ../contrib/browser-plugin/pk-plugin-install.c:543
+#: ../contrib/browser-plugin/pk-plugin-install.c:545
 msgid "No packages found for your system"
 msgstr "Для вашої системи пакунків не знайдено"
 
 #. TRANSLATORS: package is being installed
-#: ../contrib/browser-plugin/pk-plugin-install.c:548
+#: ../contrib/browser-plugin/pk-plugin-install.c:550
 msgid "Installing..."
 msgstr "Встановлення..."
 
 #. TRANSLATORS: downloading repo data so we can search
-#: ../contrib/command-not-found/pk-command-not-found.c:367
+#: ../contrib/command-not-found/pk-command-not-found.c:366
 msgid "Downloading details about the software sources."
 msgstr "Звантаження даних щодо джерел програмного забезпечення."
 
 #. TRANSLATORS: downloading file lists so we can search
-#: ../contrib/command-not-found/pk-command-not-found.c:371
+#: ../contrib/command-not-found/pk-command-not-found.c:370
 msgid "Downloading filelists (this may take some time to complete)."
-msgstr ""
-"Звантаження списків файлів (виконання цієї дії може бути досить тривалим)."
+msgstr "Звантаження списків файлів (виконання цієї дії може бути досить тривалим)."
 
 #. TRANSLATORS: waiting for native lock
-#: ../contrib/command-not-found/pk-command-not-found.c:375
+#: ../contrib/command-not-found/pk-command-not-found.c:374
 msgid "Waiting for package manager lock."
 msgstr "Очікування на зняття блокування керування пакунками."
 
 #. TRANSLATORS: loading package cache so we can search
-#: ../contrib/command-not-found/pk-command-not-found.c:379
+#: ../contrib/command-not-found/pk-command-not-found.c:378
 msgid "Loading list of packages."
 msgstr "Завантаження списку пакунків."
 
 #. TRANSLATORS: we failed to find the package, this shouldn't happen
-#: ../contrib/command-not-found/pk-command-not-found.c:445
+#: ../contrib/command-not-found/pk-command-not-found.c:444
 msgid "Failed to search for file"
 msgstr "Не вдалося виконати пошук файла"
 
+#. TRANSLATORS: the transaction failed in a way we could not expect
+#: ../contrib/command-not-found/pk-command-not-found.c:456
+msgid "Getting the list of files failed"
+msgstr "Спроба отримання списку файлів зазнала невдачі"
+
 #. TRANSLATORS: we failed to launch the executable, the error follows
-#: ../contrib/command-not-found/pk-command-not-found.c:597
+#: ../contrib/command-not-found/pk-command-not-found.c:602
 msgid "Failed to launch:"
 msgstr "Не вдалося запустити:"
 
 #. TRANSLATORS: we failed to install the package
-#: ../contrib/command-not-found/pk-command-not-found.c:625
+#: ../contrib/command-not-found/pk-command-not-found.c:630
 msgid "Failed to install packages"
 msgstr "Не вдалося встановити пакунки"
 
 #. TRANSLATORS: tool that gets called when the command is not found
-#: ../contrib/command-not-found/pk-command-not-found.c:701
+#: ../contrib/command-not-found/pk-command-not-found.c:706
 msgid "PackageKit Command Not Found"
 msgstr "Команди PackageKit не знайдено"
 
-#. TRANSLATORS: the prefix of all the output telling the user why it's not executing
-#: ../contrib/command-not-found/pk-command-not-found.c:727
-msgid "Command not found."
-msgstr "Команду не знайдено."
+#. TRANSLATORS: the prefix of all the output telling the user
+#. * why it's not executing. NOTE: this is lowercase to mimic
+#. * the style of bash itself -- apologies
+#: ../contrib/command-not-found/pk-command-not-found.c:739
+msgid "command not found"
+msgstr "команду не знайдено"
 
 #. TRANSLATORS: tell the user what we think the command is
-#: ../contrib/command-not-found/pk-command-not-found.c:745
+#: ../contrib/command-not-found/pk-command-not-found.c:757
 msgid "Similar command is:"
 msgstr "Подібною командою є:"
 
 #. TRANSLATORS: Ask the user if we should run the similar command
-#: ../contrib/command-not-found/pk-command-not-found.c:755
+#: ../contrib/command-not-found/pk-command-not-found.c:771
 msgid "Run similar command:"
 msgstr "Виконати подібну команду:"
 
 #. TRANSLATORS: show the user a list of commands that they could have meant
 #. TRANSLATORS: show the user a list of commands we could run
-#: ../contrib/command-not-found/pk-command-not-found.c:769
-#: ../contrib/command-not-found/pk-command-not-found.c:778
+#: ../contrib/command-not-found/pk-command-not-found.c:785
+#: ../contrib/command-not-found/pk-command-not-found.c:794
 msgid "Similar commands are:"
 msgstr "Подібними командами є:"
 
 #. TRANSLATORS: ask the user to choose a file to run
-#: ../contrib/command-not-found/pk-command-not-found.c:785
+#: ../contrib/command-not-found/pk-command-not-found.c:801
 msgid "Please choose a command to run"
 msgstr "Будь ласка, оберіть команду, яку слід виконати"
 
 #. TRANSLATORS: tell the user what package provides the command
-#: ../contrib/command-not-found/pk-command-not-found.c:803
+#: ../contrib/command-not-found/pk-command-not-found.c:819
 msgid "The package providing this file is:"
 msgstr "Пакунком, що містити цей файл є:"
 
 #. TRANSLATORS: as the user if we want to install a package to provide the command
-#: ../contrib/command-not-found/pk-command-not-found.c:808
+#: ../contrib/command-not-found/pk-command-not-found.c:826
 #, c-format
 msgid "Install package '%s' to provide command '%s'?"
 msgstr "Встановити пакунок «%s», щоб забезпечити виконання команди «%s»?"
 
 #. TRANSLATORS: Show the user a list of packages that provide this command
-#: ../contrib/command-not-found/pk-command-not-found.c:832
+#: ../contrib/command-not-found/pk-command-not-found.c:853
 msgid "Packages providing this file are:"
 msgstr "Серед пакунків, що містять цей файл:"
 
 #. TRANSLATORS: Show the user a list of packages that they can install to provide this command
-#: ../contrib/command-not-found/pk-command-not-found.c:842
+#: ../contrib/command-not-found/pk-command-not-found.c:863
 msgid "Suitable packages are:"
 msgstr "Відповідними пакунками є:"
 
 #. get selection
 #. TRANSLATORS: ask the user to choose a file to install
-#: ../contrib/command-not-found/pk-command-not-found.c:851
+#: ../contrib/command-not-found/pk-command-not-found.c:872
 msgid "Please choose a package to install"
 msgstr "Будь ласка, оберіть пакунок, який слід встановити"
 
 #. TRANSLATORS: we are starting to install the packages
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:197
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:195
 msgid "Starting install"
 msgstr "Розпочинаємо встановлення"
 
 #. TRANSLATORS: we couldn't find the package name, non-fatal
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:409
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:407
 #, c-format
 msgid "Failed to find the package %s, or already installed: %s"
 msgstr "Не вдалося знайти пакунок %s або пакунок вже встановлено: %s"
 
 #. command line argument, simulate what would be done, but don't actually do it
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:518
-msgid ""
-"Don't actually install any packages, only simulate what would be installed"
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:516
+msgid "Don't actually install any packages, only simulate what would be installed"
 msgstr "Не встановлювати пакунків, лише імітувати їх встановлення"
 
 #. command line argument, do we skip packages that depend on the ones specified
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:521
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:519
 msgid "Do not install dependencies of the core packages"
 msgstr "Не встановлювати залежностей основних пакунків"
 
 #. command line argument, do we operate quietly
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:524
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:522
 msgid "Do not display information or progress"
 msgstr "Не показувати повідомлень та даних про поступ"
 
 #. TRANSLATORS: tool that gets called when the command is not found
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:542
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:540
 msgid "PackageKit Debuginfo Installer"
 msgstr "Встановлення даних для зневаджування PackageKit"
 
 #. TRANSLATORS: the use needs to specify a list of package names on the command line
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:556
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:554
 #, c-format
 msgid "ERROR: Specify package names to install."
 msgstr "ПОМИЛКА: вкажіть назви пакунків, які слід встановити."
 
 #. TRANSLATORS: we are getting the list of repositories
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:592
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:590
 #, c-format
 msgid "Getting sources list"
 msgstr "Отримання списку джерел"
 
 #. TRANSLATORS: operation was not successful
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:602
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:677
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:761
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:805
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:872
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:916
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:600
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:675
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:759
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:803
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:870
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:914
 msgid "FAILED."
 msgstr "НЕВДАЛО."
 
 #. TRANSLATORS: all completed 100%
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:617
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:657
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:692
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:776
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:820
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:887
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:931
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:615
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:655
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:690
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:774
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:818
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:885
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:929
 #, c-format
 msgid "OK."
 msgstr "Гаразд."
 
 #. TRANSLATORS: tell the user what we found
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:620
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:618
 #, c-format
 msgid "Found %i enabled and %i disabled sources."
 msgstr "Знайдено %i увімкнених і %i вимкнених джерела."
 
 #. TRANSLATORS: we're finding repositories that match out pattern
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:627
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:625
 #, c-format
 msgid "Finding debugging sources"
 msgstr "Пошук джерел даних для усування вад"
 
 #. TRANSLATORS: tell the user what we found
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:660
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:658
 #, c-format
 msgid "Found %i disabled debuginfo repos."
 msgstr "Знайдено %i вимкнених сховища даних для усування вад."
 
 #. TRANSLATORS: we're now enabling all the debug sources we found
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:667
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:665
 #, c-format
 msgid "Enabling debugging sources"
 msgstr "Вмикання джерел даних для усування вад"
 
 #. TRANSLATORS: tell the user how many we enabled
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:695
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:693
 #, c-format
 msgid "Enabled %i debugging sources."
 msgstr "Увімкнено %i джерел даних для усування вад."
 
 #. TRANSLATORS: we're now finding packages that match in all the repos
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:702
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:700
 #, c-format
 msgid "Finding debugging packages"
 msgstr "Пошук пакунків для усування вад"
 
 #. TRANSLATORS: we couldn't find the package name, non-fatal
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:714
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:712
 #, c-format
 msgid "Failed to find the package %s: %s"
 msgstr "Не вдалося знайти пакунок %s: %s"
 
 #. TRANSLATORS: we couldn't find the debuginfo package name, non-fatal
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:737
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:735
 #, c-format
 msgid "Failed to find the debuginfo package %s: %s"
 msgstr "Не вдалося знайти пакунок з даними для усування вад %s: %s"
 
 #. TRANSLATORS: no debuginfo packages could be found to be installed
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:765
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:763
 #, c-format
 msgid "Found no packages to install."
 msgstr "Не знайдено жодного пакунка для встановлення."
 
 #. TRANSLATORS: tell the user we found some packages, and then list them
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:779
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:777
 #, c-format
 msgid "Found %i packages:"
 msgstr "Знайдено %i пакунків:"
 
 #. TRANSLATORS: tell the user we are searching for deps
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:795
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:793
 #, c-format
 msgid "Finding packages that depend on these packages"
 msgstr "Пошук пакунків, які залежать від цих пакунків"
 
 #. TRANSLATORS: could not install, detailed error follows
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:808
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:806
 #, c-format
 msgid "Could not find dependant packages: %s"
 msgstr "Не вдалося знайти залежних пакунків: %s"
 
 #. TRANSLATORS: tell the user we found some more packages
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:824
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:822
 #, c-format
 msgid "Found %i extra packages."
 msgstr "Знайдено %i додаткових пакунків."
 
 #. TRANSLATORS: tell the user we found some more packages
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:828
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:826
 #, c-format
 msgid "No extra packages required."
 msgstr "Потреби у додаткових пакунках немає."
 
 #. TRANSLATORS: tell the user we found some packages (and deps), and then list them
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:837
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:835
 #, c-format
 msgid "Found %i packages to install:"
 msgstr "Знайдено %i пакунків для встановлення:"
 
 #. TRANSLATORS: simulate mode is a testing mode where we quit before the action
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:850
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:848
 #, c-format
 msgid "Not installing packages in simulate mode"
 msgstr "Не встановлювати пакунки у режимі імітації"
 
 #. TRANSLATORS: we are now installing the debuginfo packages we found earlier
 #. TRANSLATORS: transaction state, installing packages
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:862
-#: ../lib/packagekit-glib2/pk-console-shared.c:289
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:860
+#: ../lib/packagekit-glib2/pk-console-shared.c:287
 #, c-format
 msgid "Installing packages"
 msgstr "Встановлення пакунків"
 
 #. TRANSLATORS: could not install, detailed error follows
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:875
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:873
 #, c-format
 msgid "Could not install packages: %s"
 msgstr "Не вдалося встановити пакунки: %s"
 
 #. TRANSLATORS: we are now disabling all debuginfo repos we previously enabled
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:907
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:905
 #, c-format
 msgid "Disabling sources previously enabled"
 msgstr "Вимикання раніше увімкнених джерел"
 
 #. TRANSLATORS: no debuginfo packages could be found to be installed, detailed error follows
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:919
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:917
 #, c-format
 msgid "Could not disable the debugging sources: %s"
 msgstr "Не вдалося вимкнути джерела для усування вад: %s"
 
 #. TRANSLATORS: we disabled all the debugging repos that we enabled before
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:934
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:932
 #, c-format
 msgid "Disabled %i debugging sources."
 msgstr "Вимкнено %i джерел для усування вад."
@@ -1117,605 +1134,617 @@ msgstr "Список пакунків PackageKit"
 msgid "PackageKit Service Pack"
 msgstr "Пакунок з обслуговування PackageKit"
 
-#: ../lib/packagekit-glib2/pk-console-shared.c:65
+#: ../lib/packagekit-glib2/pk-console-shared.c:63
 #, c-format
 msgid "Please enter a number from 1 to %i: "
 msgstr "Будь ласка, введіть число від 1 до %i: "
 
 #. TRANSLATORS: more than one package could be found that matched, to follow is a list of possible packages
-#: ../lib/packagekit-glib2/pk-console-shared.c:191
+#: ../lib/packagekit-glib2/pk-console-shared.c:189
 msgid "More than one package matches:"
 msgstr "З ключем пошуку збігається декілька пакунків:"
 
 #. TRANSLATORS: This finds out which package in the list to use
-#: ../lib/packagekit-glib2/pk-console-shared.c:202
+#: ../lib/packagekit-glib2/pk-console-shared.c:200
 msgid "Please choose the correct package: "
 msgstr "Будь ласка, оберіть належний пакунок:"
 
 #. TRANSLATORS: This is when the transaction status is not known
-#: ../lib/packagekit-glib2/pk-console-shared.c:257
+#: ../lib/packagekit-glib2/pk-console-shared.c:255
 msgid "Unknown state"
 msgstr "Невідомий стан"
 
 #. TRANSLATORS: transaction state, the daemon is in the process of starting
-#: ../lib/packagekit-glib2/pk-console-shared.c:261
+#: ../lib/packagekit-glib2/pk-console-shared.c:259
 msgid "Starting"
 msgstr "Запуск"
 
 #. TRANSLATORS: transaction state, the transaction is waiting for another to complete
-#: ../lib/packagekit-glib2/pk-console-shared.c:265
+#: ../lib/packagekit-glib2/pk-console-shared.c:263
 msgid "Waiting in queue"
 msgstr "Очікування у черзі"
 
 #. TRANSLATORS: transaction state, just started
-#: ../lib/packagekit-glib2/pk-console-shared.c:269
+#: ../lib/packagekit-glib2/pk-console-shared.c:267
 msgid "Running"
 msgstr "Виконання"
 
 #. TRANSLATORS: transaction state, is querying data
-#: ../lib/packagekit-glib2/pk-console-shared.c:273
+#: ../lib/packagekit-glib2/pk-console-shared.c:271
 msgid "Querying"
 msgstr "Виконання запиту"
 
 #. TRANSLATORS: transaction state, getting data from a server
-#: ../lib/packagekit-glib2/pk-console-shared.c:277
+#: ../lib/packagekit-glib2/pk-console-shared.c:275
 msgid "Getting information"
 msgstr "Отримання інформації"
 
 #. TRANSLATORS: transaction state, removing packages
-#: ../lib/packagekit-glib2/pk-console-shared.c:281
+#: ../lib/packagekit-glib2/pk-console-shared.c:279
 msgid "Removing packages"
 msgstr "Вилучення пакунків"
 
 #. TRANSLATORS: transaction state, downloading package files
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:285
-#: ../lib/packagekit-glib2/pk-console-shared.c:663
+#: ../lib/packagekit-glib2/pk-console-shared.c:283
+#: ../lib/packagekit-glib2/pk-console-shared.c:661
 msgid "Downloading packages"
 msgstr "Звантаження пакунків"
 
 #. TRANSLATORS: transaction state, refreshing internal lists
-#: ../lib/packagekit-glib2/pk-console-shared.c:293
+#: ../lib/packagekit-glib2/pk-console-shared.c:291
 msgid "Refreshing software list"
 msgstr "Освіження списку програм"
 
 #. TRANSLATORS: transaction state, installing updates
-#: ../lib/packagekit-glib2/pk-console-shared.c:297
+#: ../lib/packagekit-glib2/pk-console-shared.c:295
 msgid "Installing updates"
 msgstr "Встановлення оновлень"
 
 #. TRANSLATORS: transaction state, removing old packages, and cleaning config files
-#: ../lib/packagekit-glib2/pk-console-shared.c:301
+#: ../lib/packagekit-glib2/pk-console-shared.c:299
 msgid "Cleaning up packages"
 msgstr "Вилучення зайвих пакунків"
 
 #. TRANSLATORS: transaction state, obsoleting old packages
-#: ../lib/packagekit-glib2/pk-console-shared.c:305
+#: ../lib/packagekit-glib2/pk-console-shared.c:303
 msgid "Obsoleting packages"
 msgstr "Вилучення застарілих пакунків"
 
 #. TRANSLATORS: transaction state, checking the transaction before we do it
-#: ../lib/packagekit-glib2/pk-console-shared.c:309
+#: ../lib/packagekit-glib2/pk-console-shared.c:307
 msgid "Resolving dependencies"
 msgstr "Розв’язання залежностей"
 
 #. TRANSLATORS: transaction state, checking if we have all the security keys for the operation
-#: ../lib/packagekit-glib2/pk-console-shared.c:313
+#: ../lib/packagekit-glib2/pk-console-shared.c:311
 msgid "Checking signatures"
 msgstr "Перевірка підписів"
 
 #. TRANSLATORS: transaction state, when we return to a previous system state
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:317
-#: ../lib/packagekit-glib2/pk-console-shared.c:623
+#: ../lib/packagekit-glib2/pk-console-shared.c:315
+#: ../lib/packagekit-glib2/pk-console-shared.c:621
 msgid "Rolling back"
 msgstr "Повернення до попереднього"
 
 #. TRANSLATORS: transaction state, when we're doing a test transaction
-#: ../lib/packagekit-glib2/pk-console-shared.c:321
+#: ../lib/packagekit-glib2/pk-console-shared.c:319
 msgid "Testing changes"
 msgstr "Випробування змін"
 
 #. TRANSLATORS: transaction state, when we're writing to the system package database
-#: ../lib/packagekit-glib2/pk-console-shared.c:325
+#: ../lib/packagekit-glib2/pk-console-shared.c:323
 msgid "Committing changes"
 msgstr "Застосування змін"
 
 #. TRANSLATORS: transaction state, requesting data from a server
-#: ../lib/packagekit-glib2/pk-console-shared.c:329
+#: ../lib/packagekit-glib2/pk-console-shared.c:327
 msgid "Requesting data"
 msgstr "Запит щодо даних"
 
 #. TRANSLATORS: transaction state, all done!
-#: ../lib/packagekit-glib2/pk-console-shared.c:333
+#: ../lib/packagekit-glib2/pk-console-shared.c:331
 msgid "Finished"
 msgstr "Завершено"
 
 #. TRANSLATORS: transaction state, in the process of cancelling
-#: ../lib/packagekit-glib2/pk-console-shared.c:337
+#: ../lib/packagekit-glib2/pk-console-shared.c:335
 msgid "Cancelling"
 msgstr "Скасування"
 
 #. TRANSLATORS: transaction state, downloading metadata
-#: ../lib/packagekit-glib2/pk-console-shared.c:341
+#: ../lib/packagekit-glib2/pk-console-shared.c:339
 msgid "Downloading repository information"
 msgstr "Звантаження інформації про сховище"
 
 #. TRANSLATORS: transaction state, downloading metadata
-#: ../lib/packagekit-glib2/pk-console-shared.c:345
+#: ../lib/packagekit-glib2/pk-console-shared.c:343
 msgid "Downloading list of packages"
 msgstr "Звантаження списку пакунків"
 
 #. TRANSLATORS: transaction state, downloading metadata
-#: ../lib/packagekit-glib2/pk-console-shared.c:349
+#: ../lib/packagekit-glib2/pk-console-shared.c:347
 msgid "Downloading file lists"
 msgstr "Звантаження списків файлів"
 
 #. TRANSLATORS: transaction state, downloading metadata
-#: ../lib/packagekit-glib2/pk-console-shared.c:353
+#: ../lib/packagekit-glib2/pk-console-shared.c:351
 msgid "Downloading lists of changes"
 msgstr "Звантаження списків змін"
 
 #. TRANSLATORS: transaction state, downloading metadata
-#: ../lib/packagekit-glib2/pk-console-shared.c:357
+#: ../lib/packagekit-glib2/pk-console-shared.c:355
 msgid "Downloading groups"
 msgstr "Звантаження груп"
 
 #. TRANSLATORS: transaction state, downloading metadata
-#: ../lib/packagekit-glib2/pk-console-shared.c:361
+#: ../lib/packagekit-glib2/pk-console-shared.c:359
 msgid "Downloading update information"
 msgstr "Звантаження інформації про оновлення"
 
 #. TRANSLATORS: transaction state, repackaging delta files
-#: ../lib/packagekit-glib2/pk-console-shared.c:365
+#: ../lib/packagekit-glib2/pk-console-shared.c:363
 msgid "Repackaging files"
 msgstr "Перепакування файлів"
 
 #. TRANSLATORS: transaction state, loading databases
-#: ../lib/packagekit-glib2/pk-console-shared.c:369
+#: ../lib/packagekit-glib2/pk-console-shared.c:367
 msgid "Loading cache"
 msgstr "Завантаження кешу"
 
 #. TRANSLATORS: transaction state, scanning for running processes
-#: ../lib/packagekit-glib2/pk-console-shared.c:373
+#: ../lib/packagekit-glib2/pk-console-shared.c:371
 msgid "Scanning applications"
 msgstr "Пошук програм"
 
 #. TRANSLATORS: transaction state, generating a list of packages installed on the system
-#: ../lib/packagekit-glib2/pk-console-shared.c:377
+#: ../lib/packagekit-glib2/pk-console-shared.c:375
 msgid "Generating package lists"
 msgstr "Створення списків пакунків"
 
 #. TRANSLATORS: transaction state, when we're waiting for the native tools to exit
-#: ../lib/packagekit-glib2/pk-console-shared.c:381
+#: ../lib/packagekit-glib2/pk-console-shared.c:379
 msgid "Waiting for package manager lock"
 msgstr "Очікування на зняття блокування керування пакунками"
 
 #. TRANSLATORS: transaction state, waiting for user to type in a password
-#: ../lib/packagekit-glib2/pk-console-shared.c:385
+#: ../lib/packagekit-glib2/pk-console-shared.c:383
 msgid "Waiting for authentication"
 msgstr "Очікування на завершення розпізнавання"
 
 #. TRANSLATORS: transaction state, we are updating the list of processes
-#: ../lib/packagekit-glib2/pk-console-shared.c:389
+#: ../lib/packagekit-glib2/pk-console-shared.c:387
 msgid "Updating running applications"
 msgstr "Оновлення списку запущенний програм"
 
 #. TRANSLATORS: transaction state, we are checking executable files currently in use
-#: ../lib/packagekit-glib2/pk-console-shared.c:393
+#: ../lib/packagekit-glib2/pk-console-shared.c:391
 msgid "Checking applications in use"
 msgstr "Виявлення програм, що використовуються"
 
 #. TRANSLATORS: transaction state, we are checking for libraries currently in use
-#: ../lib/packagekit-glib2/pk-console-shared.c:397
+#: ../lib/packagekit-glib2/pk-console-shared.c:395
 msgid "Checking libraries in use"
 msgstr "Виявлення бібліотек, що використовуються"
 
 #. TRANSLATORS: transaction state, we are copying package files before or after the transaction
-#: ../lib/packagekit-glib2/pk-console-shared.c:401
+#: ../lib/packagekit-glib2/pk-console-shared.c:399
 msgid "Copying files"
 msgstr "Копіювання файлів"
 
 #. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:419
+#: ../lib/packagekit-glib2/pk-console-shared.c:417
 msgid "Trivial"
 msgstr "Незначне"
 
 #. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:423
+#: ../lib/packagekit-glib2/pk-console-shared.c:421
 msgid "Normal"
 msgstr "Звичайне"
 
 #. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:427
+#: ../lib/packagekit-glib2/pk-console-shared.c:425
 msgid "Important"
 msgstr "Важливе"
 
 #. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:431
+#: ../lib/packagekit-glib2/pk-console-shared.c:429
 msgid "Security"
 msgstr "Безпека"
 
 #. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:435
+#: ../lib/packagekit-glib2/pk-console-shared.c:433
 msgid "Bug fix "
 msgstr "Виправлення вад"
 
 #. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:439
+#: ../lib/packagekit-glib2/pk-console-shared.c:437
 msgid "Enhancement"
 msgstr "Покращення"
 
 #. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:443
+#: ../lib/packagekit-glib2/pk-console-shared.c:441
 msgid "Blocked"
 msgstr "Заблоковане"
 
 #. TRANSLATORS: The state of a package
 #. TRANSLATORS: The action of the package, in past tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:448
-#: ../lib/packagekit-glib2/pk-console-shared.c:521
+#: ../lib/packagekit-glib2/pk-console-shared.c:446
+#: ../lib/packagekit-glib2/pk-console-shared.c:519
 msgid "Installed"
 msgstr "Встановлене"
 
 #. TRANSLATORS: The state of a package, i.e. not installed
-#: ../lib/packagekit-glib2/pk-console-shared.c:453
+#: ../lib/packagekit-glib2/pk-console-shared.c:451
 msgid "Available"
 msgstr "Доступний"
 
 #. TRANSLATORS: The action of the package, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:471
+#: ../lib/packagekit-glib2/pk-console-shared.c:469
 msgid "Downloading"
 msgstr "Звантаження"
 
 #. TRANSLATORS: The action of the package, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:475
+#: ../lib/packagekit-glib2/pk-console-shared.c:473
 msgid "Updating"
 msgstr "Оновлення"
 
 #. TRANSLATORS: The action of the package, in present tense
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:479
-#: ../lib/packagekit-glib2/pk-console-shared.c:599
+#: ../lib/packagekit-glib2/pk-console-shared.c:477
+#: ../lib/packagekit-glib2/pk-console-shared.c:597
 msgid "Installing"
 msgstr "Встановлення"
 
 #. TRANSLATORS: The action of the package, in present tense
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:483
-#: ../lib/packagekit-glib2/pk-console-shared.c:595
+#: ../lib/packagekit-glib2/pk-console-shared.c:481
+#: ../lib/packagekit-glib2/pk-console-shared.c:593
 msgid "Removing"
 msgstr "Вилучення"
 
 #. TRANSLATORS: The action of the package, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:487
+#: ../lib/packagekit-glib2/pk-console-shared.c:485
 msgid "Cleaning up"
 msgstr "Очищення"
 
 #. TRANSLATORS: The action of the package, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:491
+#: ../lib/packagekit-glib2/pk-console-shared.c:489
 msgid "Obsoleting"
 msgstr "Робить застарілим"
 
 #. TRANSLATORS: The action of the package, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:495
+#: ../lib/packagekit-glib2/pk-console-shared.c:493
 msgid "Reinstalling"
 msgstr "Перевстановлення"
 
 #. TRANSLATORS: The action of the package, in past tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:513
+#: ../lib/packagekit-glib2/pk-console-shared.c:511
 msgid "Downloaded"
 msgstr "Звантажено"
 
 #. TRANSLATORS: The action of the package, in past tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:525
+#: ../lib/packagekit-glib2/pk-console-shared.c:523
 msgid "Removed"
 msgstr "Вилучено"
 
 #. TRANSLATORS: The action of the package, in past tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:529
+#: ../lib/packagekit-glib2/pk-console-shared.c:527
 msgid "Cleaned up"
 msgstr "Очищено"
 
 #. TRANSLATORS: The action of the package, in past tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:533
+#: ../lib/packagekit-glib2/pk-console-shared.c:531
 msgid "Obsoleted"
 msgstr "Став застарілим"
 
 #. TRANSLATORS: The action of the package, in past tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:537
+#: ../lib/packagekit-glib2/pk-console-shared.c:535
 msgid "Reinstalled"
 msgstr "Перевстановлено"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:555
+#: ../lib/packagekit-glib2/pk-console-shared.c:553
 msgid "Unknown role type"
 msgstr "Невідомий тип"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:559
+#: ../lib/packagekit-glib2/pk-console-shared.c:557
 msgid "Getting dependencies"
 msgstr "Отримання залежностей"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:563
+#: ../lib/packagekit-glib2/pk-console-shared.c:561
 msgid "Getting update details"
 msgstr "Отримання подробиць оновлення"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:567
+#: ../lib/packagekit-glib2/pk-console-shared.c:565
 msgid "Getting details"
 msgstr "Отримання подробиць"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:571
+#: ../lib/packagekit-glib2/pk-console-shared.c:569
 msgid "Getting requires"
 msgstr "Отримання даних про вимоги"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:575
+#: ../lib/packagekit-glib2/pk-console-shared.c:573
 msgid "Getting updates"
 msgstr "Отримання оновлень"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:579
+#: ../lib/packagekit-glib2/pk-console-shared.c:577
 msgid "Searching by details"
 msgstr "Пошук за подробицями"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:583
+#: ../lib/packagekit-glib2/pk-console-shared.c:581
 msgid "Searching by file"
 msgstr "Пошук за файлом"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:587
+#: ../lib/packagekit-glib2/pk-console-shared.c:585
 msgid "Searching groups"
 msgstr "Пошук груп"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:591
+#: ../lib/packagekit-glib2/pk-console-shared.c:589
 msgid "Searching by name"
 msgstr "Пошук за назвою"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:603
+#: ../lib/packagekit-glib2/pk-console-shared.c:601
 msgid "Installing files"
 msgstr "Встановлення файлів"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:607
+#: ../lib/packagekit-glib2/pk-console-shared.c:605
 msgid "Refreshing cache"
 msgstr "Освіження кешу"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:611
+#: ../lib/packagekit-glib2/pk-console-shared.c:609
 msgid "Updating packages"
 msgstr "Оновлення пакунків"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:615
+#: ../lib/packagekit-glib2/pk-console-shared.c:613
 msgid "Updating system"
 msgstr "Оновлення системи"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:619
+#: ../lib/packagekit-glib2/pk-console-shared.c:617
 msgid "Canceling"
 msgstr "Скасування"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:627
+#: ../lib/packagekit-glib2/pk-console-shared.c:625
 msgid "Getting repositories"
 msgstr "Отримання списку сховищ"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:631
+#: ../lib/packagekit-glib2/pk-console-shared.c:629
 msgid "Enabling repository"
 msgstr "Увімкнення сховища"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:635
+#: ../lib/packagekit-glib2/pk-console-shared.c:633
 msgid "Setting data"
 msgstr "Встановлення даних"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:639
+#: ../lib/packagekit-glib2/pk-console-shared.c:637
 msgid "Resolving"
 msgstr "Розв’язання"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:643
+#: ../lib/packagekit-glib2/pk-console-shared.c:641
 msgid "Getting file list"
 msgstr "Отримання списку файлів"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:647
+#: ../lib/packagekit-glib2/pk-console-shared.c:645
 msgid "Getting provides"
 msgstr "Отримання даних про вміст"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:651
+#: ../lib/packagekit-glib2/pk-console-shared.c:649
 msgid "Installing signature"
 msgstr "Встановлення підпису"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:655
+#: ../lib/packagekit-glib2/pk-console-shared.c:653
 msgid "Getting packages"
 msgstr "Отримання списку пакунків"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:659
+#: ../lib/packagekit-glib2/pk-console-shared.c:657
 msgid "Accepting EULA"
 msgstr "Згода з EULA"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:667
+#: ../lib/packagekit-glib2/pk-console-shared.c:665
 msgid "Getting upgrades"
 msgstr "Отримання оновлень"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:671
+#: ../lib/packagekit-glib2/pk-console-shared.c:669
 msgid "Getting categories"
 msgstr "Отримання категорій"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:675
+#: ../lib/packagekit-glib2/pk-console-shared.c:673
 msgid "Getting transactions"
 msgstr "Отримання списку дій"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:679
-#: ../lib/packagekit-glib2/pk-console-shared.c:683
+#: ../lib/packagekit-glib2/pk-console-shared.c:677
+#: ../lib/packagekit-glib2/pk-console-shared.c:681
 msgid "Simulating install"
 msgstr "Імітація встановлення"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:687
+#: ../lib/packagekit-glib2/pk-console-shared.c:685
 msgid "Simulating remove"
 msgstr "Імітація вилучення"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:691
+#: ../lib/packagekit-glib2/pk-console-shared.c:689
 msgid "Simulating update"
 msgstr "Імітація оновлення"
 
+#. TRANSLATORS: turn on all debugging
+#: ../lib/packagekit-glib2/pk-debug.c:133
+msgid "Show debugging information for all files"
+msgstr "Показувати діагностичні дані для всіх файлів"
+
+#: ../lib/packagekit-glib2/pk-debug.c:201
+msgid "Debugging Options"
+msgstr "Параметри діагностики"
+
+#: ../lib/packagekit-glib2/pk-debug.c:201
+msgid "Show debugging options"
+msgstr "Показувати параметри діагностики"
+
 #. TRANSLATORS: ask the user if they are comfortable installing insecure packages
-#: ../lib/packagekit-glib2/pk-task-text.c:69
+#: ../lib/packagekit-glib2/pk-task-text.c:67
 msgid "Do you want to allow installing of unsigned software?"
 msgstr "Бажаєте дозволити встановлення непідписаного програмного забезпечення?"
 
 #. TRANSLATORS: tell the user we've not done anything
-#: ../lib/packagekit-glib2/pk-task-text.c:74
+#: ../lib/packagekit-glib2/pk-task-text.c:72
 msgid "The unsigned software will not be installed."
 msgstr "Непідписане програмне забезпечення встановлено не буде."
 
 #. TRANSLATORS: the package repository is signed by a key that is not recognised
-#: ../lib/packagekit-glib2/pk-task-text.c:123
+#: ../lib/packagekit-glib2/pk-task-text.c:121
 msgid "Software source signature required"
 msgstr "Потрібен підпис джерела програмного забезпечення"
 
 #. TRANSLATORS: the package repository name
-#: ../lib/packagekit-glib2/pk-task-text.c:129
+#: ../lib/packagekit-glib2/pk-task-text.c:127
 msgid "Software source name"
 msgstr "Назва джерела програмного забезпечення"
 
 #. TRANSLATORS: the key URL
-#: ../lib/packagekit-glib2/pk-task-text.c:132
+#: ../lib/packagekit-glib2/pk-task-text.c:130
 msgid "Key URL"
 msgstr "Адреса URL ключа"
 
 #. TRANSLATORS: the username of the key
-#: ../lib/packagekit-glib2/pk-task-text.c:135
+#: ../lib/packagekit-glib2/pk-task-text.c:133
 msgid "Key user"
 msgstr "Користувач ключа"
 
 #. TRANSLATORS: the key ID, usually a few hex digits
-#: ../lib/packagekit-glib2/pk-task-text.c:138
+#: ../lib/packagekit-glib2/pk-task-text.c:136
 msgid "Key ID"
 msgstr "Ідентифікатор ключа"
 
 #. TRANSLATORS: the key fingerprint, again, yet more hex
-#: ../lib/packagekit-glib2/pk-task-text.c:141
+#: ../lib/packagekit-glib2/pk-task-text.c:139
 msgid "Key fingerprint"
 msgstr "Відбиток ключа"
 
 #. TRANSLATORS: the timestamp (a bit like a machine readable time)
-#: ../lib/packagekit-glib2/pk-task-text.c:144
+#: ../lib/packagekit-glib2/pk-task-text.c:142
 msgid "Key Timestamp"
 msgstr "Часова позначка ключа"
 
 #. TRANSLATORS: ask the user if they want to import
-#: ../lib/packagekit-glib2/pk-task-text.c:157
+#: ../lib/packagekit-glib2/pk-task-text.c:155
 msgid "Do you accept this signature?"
 msgstr "Чи підтверджуєте ви цей підпис?"
 
 #. TRANSLATORS: tell the user we've not done anything
-#: ../lib/packagekit-glib2/pk-task-text.c:162
+#: ../lib/packagekit-glib2/pk-task-text.c:160
 msgid "The signature was not accepted."
 msgstr "Підпис не було підтверджено."
 
 #. TRANSLATORS: this is another name for a software licence that has to be read before installing
-#: ../lib/packagekit-glib2/pk-task-text.c:205
+#: ../lib/packagekit-glib2/pk-task-text.c:203
 msgid "End user licence agreement required"
-msgstr ""
-"Потрібне підтвердження ліцензійної угоди з кінцевим користувачем (EULA)"
+msgstr "Потрібне підтвердження ліцензійної угоди з кінцевим користувачем (EULA)"
 
 #. TRANSLATORS: the EULA text itself (long and boring)
-#: ../lib/packagekit-glib2/pk-task-text.c:214
+#: ../lib/packagekit-glib2/pk-task-text.c:212
 msgid "Agreement"
 msgstr "Угода"
 
 #. TRANSLATORS: ask the user if they've read and accepted the EULA
-#: ../lib/packagekit-glib2/pk-task-text.c:223
+#: ../lib/packagekit-glib2/pk-task-text.c:221
 msgid "Do you accept this agreement?"
 msgstr "Чи згодвні ви дотримуватися цієї угоди?"
 
 #. TRANSLATORS: tell the user we've not done anything
-#: ../lib/packagekit-glib2/pk-task-text.c:228
+#: ../lib/packagekit-glib2/pk-task-text.c:226
 msgid "The agreement was not accepted."
 msgstr "Угоду не було підтверджено."
 
 #. TRANSLATORS: the user needs to change media inserted into the computer
-#: ../lib/packagekit-glib2/pk-task-text.c:267
+#: ../lib/packagekit-glib2/pk-task-text.c:265
 msgid "Media change required"
 msgstr "Потрібна зміна носія"
 
 #. TRANSLATORS: the type, e.g. DVD, CD, etc
-#: ../lib/packagekit-glib2/pk-task-text.c:270
+#: ../lib/packagekit-glib2/pk-task-text.c:268
 msgid "Media type"
 msgstr "Тип носія"
 
 #. TRANSLATORS: the media label, usually like 'disk-1of3'
-#: ../lib/packagekit-glib2/pk-task-text.c:273
+#: ../lib/packagekit-glib2/pk-task-text.c:271
 msgid "Media label"
 msgstr "Мітка носія"
 
 #. TRANSLATORS: the media description, usually like 'Fedora 12 disk 5'
-#: ../lib/packagekit-glib2/pk-task-text.c:276
+#: ../lib/packagekit-glib2/pk-task-text.c:274
 msgid "Text"
 msgstr "Текст"
 
 #. TRANSLATORS: ask the user to insert the media
-#: ../lib/packagekit-glib2/pk-task-text.c:282
+#: ../lib/packagekit-glib2/pk-task-text.c:280
 msgid "Please insert the correct media"
 msgstr "Будь ласка, вставте відповідний носій"
 
 #. TRANSLATORS: tell the user we've not done anything as they are lazy
-#: ../lib/packagekit-glib2/pk-task-text.c:287
+#: ../lib/packagekit-glib2/pk-task-text.c:285
 msgid "The correct media was not inserted."
 msgstr "Не було вставлено відповідного носія."
 
 #. TRANSLATORS: When processing, we might have to remove other dependencies
-#: ../lib/packagekit-glib2/pk-task-text.c:302
+#: ../lib/packagekit-glib2/pk-task-text.c:300
 msgid "The following packages have to be removed:"
 msgstr "Наведені нижче пакунки буде вилучено:"
 
 #. TRANSLATORS: When processing, we might have to install other dependencies
-#: ../lib/packagekit-glib2/pk-task-text.c:307
+#: ../lib/packagekit-glib2/pk-task-text.c:305
 msgid "The following packages have to be installed:"
 msgstr "Слід встановити такі пакунки:"
 
 #. TRANSLATORS: When processing, we might have to update other dependencies
-#: ../lib/packagekit-glib2/pk-task-text.c:312
+#: ../lib/packagekit-glib2/pk-task-text.c:310
 msgid "The following packages have to be updated:"
 msgstr "Слід оновити такі пакунки:"
 
 #. TRANSLATORS: When processing, we might have to reinstall other dependencies
-#: ../lib/packagekit-glib2/pk-task-text.c:317
+#: ../lib/packagekit-glib2/pk-task-text.c:315
 msgid "The following packages have to be reinstalled:"
 msgstr "Слід перевстановити такі пакунки:"
 
 #. TRANSLATORS: When processing, we might have to downgrade other dependencies
-#: ../lib/packagekit-glib2/pk-task-text.c:322
+#: ../lib/packagekit-glib2/pk-task-text.c:320
 msgid "The following packages have to be downgraded:"
 msgstr "Слід встановити старіші версії таких пакунків:"
 
 #. TRANSLATORS: ask the user if the proposed changes are okay
-#: ../lib/packagekit-glib2/pk-task-text.c:382
+#: ../lib/packagekit-glib2/pk-task-text.c:380
 msgid "Proceed with changes?"
 msgstr "Внести зміни:"
 
 #. TRANSLATORS: tell the user we didn't do anything
-#: ../lib/packagekit-glib2/pk-task-text.c:387
+#: ../lib/packagekit-glib2/pk-task-text.c:385
 msgid "The transaction did not proceed."
 msgstr "Операцію не було продовжено."
 
@@ -1734,30 +1763,20 @@ msgid "Authentication is required to accept a EULA"
 msgstr "Для підтвердження EULA слід виконати розпізнавання"
 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:9
-msgid ""
-"Authentication is required to cancel a task that was not started by yourself"
+msgid "Authentication is required to cancel a task that was not started by yourself"
 msgstr "Для скасування дії, започаткованої не вами, слід пройти розпізнавання"
 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:10
 msgid "Authentication is required to change software source parameters"
-msgstr ""
-"Для зміни параметрів джерел програмного забезпечення слід пройти "
-"розпізнавання"
+msgstr "Для зміни параметрів джерел програмного забезпечення слід пройти розпізнавання"
 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:11
-msgid ""
-"Authentication is required to change the location used to decompress packages"
-msgstr ""
-"Для визначення адреси каталогу, куди буде видобуто вміст пакунків, слід "
-"пройти розпізнавання"
+msgid "Authentication is required to change the location used to decompress packages"
+msgstr "Для визначення адреси каталогу, куди буде видобуто вміст пакунків, слід пройти розпізнавання"
 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:12
-msgid ""
-"Authentication is required to consider a key used for signing packages as "
-"trusted"
-msgstr ""
-"Для визнання ключа, використаного для підписування пакунків, як надійного "
-"слід пройти розпізнавання"
+msgid "Authentication is required to consider a key used for signing packages as trusted"
+msgstr "Для визнання ключа, використаного для підписування пакунків, як надійного слід пройти розпізнавання"
 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:13
 msgid "Authentication is required to install a signed package"
@@ -1773,8 +1792,7 @@ msgstr "Для оновлення списку джерел системи сл
 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:16
 msgid "Authentication is required to reload the device with a new driver"
-msgstr ""
-"Для перезавантаження пристрою з новим драйвером слід пройти розпізнавання"
+msgstr "Для перезавантаження пристрою з новим драйвером слід пройти розпізнавання"
 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:17
 msgid "Authentication is required to remove packages"
@@ -1785,23 +1803,23 @@ msgid "Authentication is required to rollback a transaction"
 msgstr "Для скасування дії слід пройти розпізнавання"
 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:19
-msgid ""
-"Authentication is required to set the network proxy used for downloading "
-"packages"
-msgstr ""
-"Для визначення проксі-сервера, який буде використано для звантаження "
-"пакунків, слід пройти розпізнавання"
+msgid "Authentication is required to set the network proxy used for downloading packages"
+msgstr "Для визначення проксі-сервера, який буде використано для звантаження пакунків, слід пройти розпізнавання"
 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:20
 msgid "Authentication is required to update packages"
 msgstr "Для оновлення пакунків слід пройти розпізнавання"
 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:21
+msgid "Authentication is required to upgrade the operating system"
+msgstr "Для оновлення версії операційної системи слід пройти розпізнавання"
+
 #. SECURITY:
 #. - Normal users are allowed to cancel their own task without
 #. authentication, but a different user id needs the admin password
 #. to cancel another users task.
 #.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:26
+#: ../policy/org.freedesktop.packagekit.policy.in.h:27
 msgid "Cancel foreign task"
 msgstr "Скасування сторонніх завдань"
 
@@ -1811,7 +1829,7 @@ msgstr "Скасування сторонніх завдань"
 #. - This could be used to overwrite files not owned by the user using
 #. a carefully created package file.
 #.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:33
+#: ../policy/org.freedesktop.packagekit.policy.in.h:34
 msgid "Change location that packages are installed"
 msgstr "Змінити каталог, куди встановлюватимуться пакунки"
 
@@ -1820,7 +1838,7 @@ msgstr "Змінити каталог, куди встановлюватимут
 #. software sources as this can be used to enable new updates or
 #. install different versions of software.
 #.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:39
+#: ../policy/org.freedesktop.packagekit.policy.in.h:40
 msgid "Change software source parameters"
 msgstr "Зміна параметрів джерела програм"
 
@@ -1830,7 +1848,7 @@ msgstr "Зміна параметрів джерела програм"
 #. - Paranoid users (or parents!) can change this to 'auth_admin' or
 #. 'auth_admin_keep'.
 #.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:46
+#: ../policy/org.freedesktop.packagekit.policy.in.h:47
 msgid "Install signed package"
 msgstr "Встановлення підписаного пакунка"
 
@@ -1840,7 +1858,7 @@ msgstr "Встановлення підписаного пакунка"
 #. password would be a massive security hole.
 #. - This is not retained as each package should be authenticated.
 #.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:53
+#: ../policy/org.freedesktop.packagekit.policy.in.h:54
 msgid "Install untrusted local file"
 msgstr "Встановлення ненадійного локального файла"
 
@@ -1848,7 +1866,7 @@ msgstr "Встановлення ненадійного локального ф
 #. - Normal users do not require admin authentication to refresh the
 #. cache, as this doesn't actually install or remove software.
 #.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:58
+#: ../policy/org.freedesktop.packagekit.policy.in.h:59
 msgid "Refresh system sources"
 msgstr "Оновлення списків джерел системи"
 
@@ -1859,7 +1877,7 @@ msgstr "Оновлення списків джерел системи"
 #. try to rebind drivers in use, for instance security authentication
 #. devices.
 #.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:66
+#: ../policy/org.freedesktop.packagekit.policy.in.h:67
 msgid "Reload a device"
 msgstr "Перезавантаження пристрою"
 
@@ -1872,7 +1890,7 @@ msgstr "Перезавантаження пристрою"
 #. be removed. If this is not possible, change this authentication to
 #. 'auth_admin'.
 #.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:76
+#: ../policy/org.freedesktop.packagekit.policy.in.h:77
 msgid "Remove package"
 msgstr "Вилучення пакунка"
 
@@ -1881,7 +1899,7 @@ msgstr "Вилучення пакунка"
 #. as this will change a large number of packages, and could expose the
 #. system to previously patched security vulnerabilities.
 #.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:82
+#: ../policy/org.freedesktop.packagekit.policy.in.h:83
 msgid "Rollback to a previous transaction"
 msgstr "Повернення до попередньої операції"
 
@@ -1889,7 +1907,7 @@ msgstr "Повернення до попередньої операції"
 #. - Normal users do not require admin authentication to set the proxy
 #. used for downloading packages.
 #.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:87
+#: ../policy/org.freedesktop.packagekit.policy.in.h:88
 msgid "Set network proxy"
 msgstr "Встановлення проксі-сервер"
 
@@ -1899,7 +1917,7 @@ msgstr "Встановлення проксі-сервер"
 #. without a secure authentication.
 #. - This is not kept as each package should be authenticated.
 #.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:94
+#: ../policy/org.freedesktop.packagekit.policy.in.h:95
 msgid "Trust a key used for signing packages"
 msgstr "Визначення надійності ключа, яким підписано пакунки"
 
@@ -1910,15 +1928,23 @@ msgstr "Визначення надійності ключа, яким підп
 #. - Changing this to anything other than 'yes' will break unattended
 #. updates.
 #.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:102
+#: ../policy/org.freedesktop.packagekit.policy.in.h:103
 msgid "Update packages"
 msgstr "Оновлення пакунків"
 
+#. SECURITY:
+#. - Normal users require admin authentication to upgrade the disto as
+#. this can make the system unbootable or stop other applications from
+#. working.
+#.
+#: ../policy/org.freedesktop.packagekit.policy.in.h:109
+msgid "Upgrade System"
+msgstr "Оновлення системи"
+
 #. TRANSLATORS: failed due to DBus security
 #: ../src/pk-main.c:87
 msgid "Startup failed due to security policies on this machine."
-msgstr ""
-"Спроба запуску зазнала невдачі через обмеження безпеки на цьому комп’ютері."
+msgstr "Спроба запуску зазнала невдачі через обмеження безпеки на цьому комп’ютері."
 
 #. TRANSLATORS: only two ways this can fail...
 #: ../src/pk-main.c:89
@@ -1928,16 +1954,12 @@ msgstr "Таке може трапитися з двох причин:"
 #. TRANSLATORS: only allowed to be owned by root
 #: ../src/pk-main.c:91
 msgid "The correct user is not launching the executable (usually root)"
-msgstr ""
-"Виконуваний файл було запущено не тим користувачем (його мав запустити root)"
+msgstr "Виконуваний файл було запущено не тим користувачем (його мав запустити root)"
 
 #. TRANSLATORS: or we are installed in a prefix
 #: ../src/pk-main.c:93
-msgid ""
-"The org.freedesktop.PackageKit.conf file is not installed in the system "
-"directory:"
-msgstr ""
-"У системному каталозі файл org.freedesktop.PackageKit.conf не встановлено:"
+msgid "The org.freedesktop.PackageKit.conf file is not installed in the system directory:"
+msgstr "У системному каталозі файл org.freedesktop.PackageKit.conf не встановлено:"
 
 #. TRANSLATORS: a backend is the system package tool, e.g. yum, apt
 #: ../src/pk-main.c:200
@@ -1980,25 +2002,23 @@ msgid "Cannot connect to the system bus"
 msgstr "Не вдалося з’єднатися з системною шиною"
 
 #. TRANSLATORS: cannot register on system bus, unknown reason -- geeky error follows
-#: ../src/pk-main.c:318
+#: ../src/pk-main.c:316
 msgid "Error trying to start:"
 msgstr "Помилка під час спроби запуску:"
 
 #: ../src/pk-polkit-action-lookup.c:150
 msgid "To install debugging packages, extra sources need to be enabled"
-msgstr ""
-"Для встановлення пакунків для усування вад слід увімкнути додаткові джерела "
-"програмного забезпечення"
+msgstr "Для встановлення пакунків для усування вад слід увімкнути додаткові джерела програмного забезпечення"
 
 #. TRANSLATORS: is not GPG signed
-#: ../src/pk-polkit-action-lookup.c:171 ../src/pk-polkit-action-lookup.c:190
+#: ../src/pk-polkit-action-lookup.c:171
+#: ../src/pk-polkit-action-lookup.c:190
 msgid "The software is not from a trusted source."
 msgstr "Програмне забезпечення надійшло з ненадійного джерела."
 
 #: ../src/pk-polkit-action-lookup.c:176
 msgid "Do not update this package unless you are sure it is safe to do so."
-msgstr ""
-"Не оновлюйте цей пакунок, якщо не певні, що таке оновлення є безпечним."
+msgstr "Не оновлюйте цей пакунок, якщо не певні, що таке оновлення є безпечним."
 
 #: ../src/pk-polkit-action-lookup.c:177
 msgid "Do not update these packages unless you are sure it is safe to do so."
@@ -2006,13 +2026,11 @@ msgstr "Не оновлюйте ці пакунки, якщо не певні, 
 
 #: ../src/pk-polkit-action-lookup.c:195
 msgid "Do not install this package unless you are sure it is safe to do so."
-msgstr ""
-"Не встановлюйте цей пакунок, якщо не певні, що таке встановлення є безпечним."
+msgstr "Не встановлюйте цей пакунок, якщо не певні, що таке встановлення є безпечним."
 
 #: ../src/pk-polkit-action-lookup.c:196
 msgid "Do not install these packages unless you are sure it is safe to do so."
-msgstr ""
-"Не встановлюйте ці пакунки, якщо не певні, що таке встановлення є безпечним."
+msgstr "Не встановлюйте ці пакунки, якщо не певні, що таке встановлення є безпечним."
 
 #. TRANSLATORS: too many packages to list each one
 #: ../src/pk-polkit-action-lookup.c:273
@@ -2024,173 +2042,107 @@ msgstr "Багато пакунків"
 msgid "Only trusted"
 msgstr "Лише надійні"
 
-#. TRANSLATORS: turn on all debugging
-#: ../src/egg-debug.c:388
-msgid "Show debugging information for all files"
-msgstr "Показувати діагностичні дані для всіх файлів"
-
-#. TRANSLATORS: a list of modules to debug
-#: ../src/egg-debug.c:458
-msgid "Debug these specific modules"
-msgstr "Діагностика вказаних модулів"
-
-#. TRANSLATORS: a list of functions to debug
-#: ../src/egg-debug.c:461
-msgid "Debug these specific functions"
-msgstr "Діагностика вказаних функцій"
-
-#. TRANSLATORS: save to a log
-#: ../src/egg-debug.c:464
-msgid "Log debugging data to a file"
-msgstr "Записати дані діагностики до файла"
-
-#: ../src/egg-debug.c:468
-msgid "Debugging Options"
-msgstr "Параметри діагностики"
-
-#: ../src/egg-debug.c:468
-msgid "Show debugging options"
-msgstr "Показувати параметри діагностики"
-
+#~ msgid "Debug these specific modules"
+#~ msgstr "Діагностика вказаних модулів"
+#~ msgid "Debug these specific functions"
+#~ msgstr "Діагностика вказаних функцій"
+#~ msgid "Log debugging data to a file"
+#~ msgstr "Записати дані діагностики до файла"
 #~ msgid "Malicious software can damage your computer or cause other harm."
 #~ msgstr ""
 #~ "Зловмисне програмне забезпечення може пошкодити ваш комп’ютер або завдати "
 #~ "інших неприємностей."
-
 #~ msgid "Transaction failed with no error"
 #~ msgstr "Спроба виконання операції зазнала невдачі, але помилок не було"
-
 #~ msgid "Failed to get transaction list"
 #~ msgstr "Спроба отримання списку операцій завершилася невдало"
-
 #~ msgid "Please restart the application as it is being used."
 #~ msgstr "Перезапустіть програму, оскільки вона зараз використовується."
-
 #~ msgid "The package %s is already installed"
 #~ msgstr "Пакунок %s вже встановлено"
-
 #~ msgid "The package %s could not be installed: %s"
 #~ msgstr "Не вдалося встановити пакунок %s: %s"
-
 #~ msgid "The package install was canceled!"
 #~ msgstr "Встановлення пакунка скасовано!"
-
 #~ msgid "This tool could not install the packages: %s"
 #~ msgstr "Програмі не вдалося встановити пакунки: %s"
-
 #~ msgid "This tool could not install the files: %s"
 #~ msgstr "Програмі не вдалося встановити файли: %s"
-
 #~ msgid "This tool could not remove %s: %s"
 #~ msgstr "Програмі не вдалося вилучити %s: %s"
-
 #~ msgid "This tool could not remove the packages: %s"
 #~ msgstr "Програмі не вдалося вилучити пакунки: %s"
-
 #~ msgid "Proceed with additional packages?"
 #~ msgstr "Вилучити додаткові пакунки?"
-
 #~ msgid "The package removal was canceled!"
 #~ msgstr "Вилучення пакунка скасовано!"
-
 #~ msgid "This tool could not download the package %s as it could not be found"
 #~ msgstr ""
 #~ "Програмі не вдалося звантажити пакунок %s, оскільки відповідний пакунок "
 #~ "не було знайдено"
-
 #~ msgid "This tool could not download the packages: %s"
 #~ msgstr "Програмі не вдалося звантажити пакунки: %s"
-
 #~ msgid "This tool could not update %s: %s"
 #~ msgstr "Програмі не вдалося оновити %s: %s"
-
 #~ msgid "The package update was canceled!"
 #~ msgstr "Оновлення пакунка скасовано!"
-
 #~ msgid "This tool could not get the requirements for %s: %s"
 #~ msgstr "Програмі не вдалося отримати список файлів для %s: %s"
-
 #~ msgid "This tool could not get the dependencies for %s: %s"
 #~ msgstr "Програмі не вдалося отримати залежності для %s: %s"
-
 #~ msgid "This tool could not get package details for %s: %s"
 #~ msgstr "Програмі не вдалося отримати параметри пакунка %s: %s"
-
 #~ msgid "This tool could not find the files for %s: %s"
 #~ msgstr "Програмі не вдалося знайти файли %s: %s"
-
 #~ msgid "This tool could not get the file list for %s: %s"
 #~ msgstr "Програмі не вдалося отримати список файлів %s: %s"
-
 #~ msgid "File already exists: %s"
 #~ msgstr "Файл вже існує: %s"
-
 #~ msgid "This tool could not get package list: %s"
 #~ msgstr "Програмі не вдалося отримати список пакунків: %s"
-
 #~ msgid "Failed to save to disk"
 #~ msgstr "Не вдалося зберегти на диск"
-
 #~ msgid "File does not exist: %s"
 #~ msgstr "Файла не існує: %s"
-
 #~ msgid "Packages to add"
 #~ msgstr "Пакунки, які буде додано"
-
 #~ msgid "Packages to remove"
 #~ msgstr "Пакунки, які буде вилучено"
-
 #~ msgid "No new packages need to be installed"
 #~ msgstr "У встановленні нових пакунків немає потреби"
-
 #~ msgid "not found."
 #~ msgstr "не знайдено."
-
 #~ msgid "No packages can be found to install"
 #~ msgstr "Пакунків для встановлення не знайдено"
-
 #~ msgid "This tool could not find the update details for %s: %s"
 #~ msgstr "Програмі не вдалося знайти параметри оновлення %s: %s"
-
 #~ msgid "This tool could not get the update details for %s: %s"
 #~ msgstr "Програмі не вдалося отримати параметри оновлення %s: %s"
-
 #~ msgid "Error:"
 #~ msgstr "Помилка:"
-
 #~ msgid "Repository signature required"
 #~ msgstr "Потрібен підпис сховища"
-
 #~ msgid "End user license agreement required"
 #~ msgstr ""
 #~ "Потрібне підтвердження ліцензійної угоди з кінцевим користувачем (EULA)"
-
 #~ msgid "Do you agree to this license?"
 #~ msgstr "Чи погоджуєтеся ви з цими умовами ліцензування?"
-
 #~ msgid "The license was refused."
 #~ msgstr "Умови ліцензування було відкинуто."
-
 #~ msgid "This tool could not connect to system DBUS."
 #~ msgstr "Цьому інструменту не вдалося з’єднатися з DBUS системи."
-
 #~ msgid "A package name or filename to install is required"
 #~ msgstr "Слід вказати назву пакунка або назву файла, який слід встановити"
-
 #~ msgid "A list file name to create is required"
 #~ msgstr "Слід вказати список назв файлів, які слід створити"
-
 #~ msgid "A list file to open is required"
 #~ msgstr "Слід вказати список файлів, які слід відкрити"
-
 #~ msgid "Incorrect privileges for this operation"
 #~ msgstr "Для цієї операції вказано неправильні права доступу"
-
 #~ msgid "Cannot show the list of transactions"
 #~ msgstr "Показ списку операції неможливий"
-
 #~ msgid "EULA ID"
 #~ msgstr "Ідентифікатор EULA"
-
 #~ msgid "Media ID"
 #~ msgstr "Ідентифікатор носія"
+
commit 3bbdfd61998e515672c7d27867708d859265e774
Author: assar <asiersar at yahoo.com>
Date:   Fri Nov 26 12:12:00 2010 +0000

    l10n: Updated Basque (eu) translation to 100%
    
    New status: 375 messages complete with 0 fuzzies and 0 untranslated.
    
    Transmitted-via: Transifex (www.transifex.net).

diff --git a/po/eu.po b/po/eu.po
index a5bf3da..9326aa0 100644
--- a/po/eu.po
+++ b/po/eu.po
@@ -1,11 +1,12 @@
 # Basque translation of PackageKit.
 # This file is distributed under the same license as the PackageKit package.
 # Asier Sarasua Garmendia <asiersar at yahoo.com>, 2010.
-#
+# 
 msgid ""
-msgstr "Project-Id-Version: packagekit\n"
+msgstr ""
+"Project-Id-Version: packagekit\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-11-07 07:14+0000\n"
+"POT-Creation-Date: 2010-11-26 08:16+0000\n"
 "PO-Revision-Date: 2010-08-12 01:19+0100\n"
 "Last-Translator: Asier Sarasua Garmendia <asiersar at yahoo.com>\n"
 "Language-Team: Librezale <librezale at librezale.org>\n"
@@ -20,7 +21,8 @@ msgstr "Project-Id-Version: packagekit\n"
 msgid "Transaction"
 msgstr "Transakzioa"
 
-#. TRANSLATORS: this is the time the transaction was started in system timezone
+#. TRANSLATORS: this is the time the transaction was started in system
+#. timezone
 #: ../client/pk-console.c:176
 msgid "System time"
 msgstr "Sistemaren ordua"
@@ -142,12 +144,14 @@ msgid_plural "Packages"
 msgstr[0] "Paketea"
 msgstr[1] "Paketeak"
 
-#. TRANSLATORS: details about the update, any packages that this update updates
+#. TRANSLATORS: details about the update, any packages that this update
+#. updates
 #: ../client/pk-console.c:348
 msgid "Updates"
 msgstr "Eguneraketak"
 
-#. TRANSLATORS: details about the update, any packages that this update obsoletes
+#. TRANSLATORS: details about the update, any packages that this update
+#. obsoletes
 #: ../client/pk-console.c:352
 msgid "Obsoletes"
 msgstr "Zaharkituak"
@@ -219,12 +223,14 @@ msgstr "Sistema berrabiaraztea eskatu du honek:"
 msgid "Session restart required:"
 msgstr "Sistema berrabiaraztea eskatua:"
 
-#. TRANSLATORS: a package requires the system to be restarted due to a security update
+#. TRANSLATORS: a package requires the system to be restarted due to a
+#. security update
 #: ../client/pk-console.c:465
 msgid "System restart (security) required by:"
 msgstr "Sistema berrabiaraztea (segurtasunagatik) eskatu du honek:"
 
-#. TRANSLATORS: a package requires the session to be restarted due to a security update
+#. TRANSLATORS: a package requires the session to be restarted due to a
+#. security update
 #: ../client/pk-console.c:468
 msgid "Session restart (security) required:"
 msgstr "Sistema berrabiaraztea (seguratasunagatik) eskatua:"
@@ -239,7 +245,8 @@ msgstr "Aplikazioa berrabiaraztea eskatu du honek:"
 msgid "Package description"
 msgstr "Paketearen deskribapena"
 
-#. TRANSLATORS: This a message (like a little note that may be of interest) from the transaction
+#. TRANSLATORS: This a message (like a little note that may be of interest)
+#. from the transaction
 #: ../client/pk-console.c:537
 msgid "Message:"
 msgstr "Mezua:"
@@ -274,7 +281,8 @@ msgstr "Emaitzak:"
 msgid "Fatal error"
 msgstr "Errore larria"
 
-#. TRANSLATORS: the user asked to update everything, but there is nothing that can be updated
+#. TRANSLATORS: the user asked to update everything, but there is nothing that
+#. can be updated
 #: ../client/pk-console.c:701
 msgid "There are no packages to update."
 msgstr "Ez da paketerik eguneratu behar."
@@ -306,48 +314,50 @@ msgstr "Amaitu saioa eta hasi saioa eguneraketa osatzeko."
 
 #. TRANSLATORS: a package needs to restart their system (due to security)
 #: ../client/pk-console.c:829
-msgid ""
-"Please restart the computer to complete the update as important security "
-"updates have been installed."
+msgid "Please restart the computer to complete the update as important security updates have been installed."
 msgstr "Berrabiarazi ordenagailua eguneraketa osatzeko, segurtasun-eguneraketa garrantzitsuak instalatu baitira."
 
 #. TRANSLATORS: a package needs to restart the session (due to security)
 #: ../client/pk-console.c:832
-msgid ""
-"Please logout and login to complete the update as important security updates "
-"have been installed."
+msgid "Please logout and login to complete the update as important security updates have been installed."
 msgstr "Amaitu saioa eta hasi berriro saioa eguneraketa osatzeko, segurtasun-eguneraketa garrantzitsuak instalatu baitira."
 
-#. TRANSLATORS: The user used 'pkcon install dave.rpm' rather than 'pkcon install-local dave.rpm'
+#. TRANSLATORS: The user used 'pkcon install dave.rpm' rather than 'pkcon
+#. install-local dave.rpm'
 #: ../client/pk-console.c:858
 #, c-format
-msgid ""
-"Expected package name, actually got file. Try using 'pkcon install-local %s' "
-"instead."
+msgid "Expected package name, actually got file. Try using 'pkcon install-local %s' instead."
 msgstr "Pakete-izena espero zen, fitxategia eskuratu da. Saiatu  'pkcon install-local %s' erabiltzen."
 
-#. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
+#. TRANSLATORS: There was an error getting the list of files for the package.
+#. The detailed error follows
 #: ../client/pk-console.c:866
 #, c-format
 msgid "This tool could not find any available package: %s"
 msgstr "Tresna honek ez du aurkitu paketerik eskuragarri: %s"
 
-#. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
+#. TRANSLATORS: There was an error getting the list of files for the package.
+#. The detailed error follows
 #: ../client/pk-console.c:894
 #, c-format
 msgid "This tool could not find the installed package: %s"
 msgstr "Tresna honek ez du aurkitu instalatutako paketea: %s"
 
-#. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
+#. TRANSLATORS: There was an error getting the list of files for the package.
+#. The detailed error follows
 #: ../client/pk-console.c:922 ../client/pk-console.c:950
 #, c-format
 msgid "This tool could not find the package: %s"
 msgstr "Tresna honek ez du aurkitu paketea: %s"
 
-#. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#. TRANSLATORS: There was an error getting the dependencies for the package. The detailed error follows
-#. TRANSLATORS: There was an error getting the details about the package. The detailed error follows
-#. TRANSLATORS: The package name was not found in any software sources. The detailed error follows
+#. TRANSLATORS: There was an error getting the list of files for the package.
+#. The detailed error follows
+#. TRANSLATORS: There was an error getting the dependencies for the package.
+#. The detailed error follows
+#. TRANSLATORS: There was an error getting the details about the package. The
+#. detailed error follows
+#. TRANSLATORS: The package name was not found in any software sources. The
+#. detailed error follows
 #: ../client/pk-console.c:978 ../client/pk-console.c:1006
 #: ../client/pk-console.c:1034 ../client/pk-console.c:1062
 #: ../client/pk-console.c:1090
@@ -355,7 +365,8 @@ msgstr "Tresna honek ez du aurkitu paketea: %s"
 msgid "This tool could not find all the packages: %s"
 msgstr "Tresna honek ez du aurkitu pakete guztiak: %s"
 
-#. TRANSLATORS: This is when the daemon crashed, and we are up shit creek without a paddle
+#. TRANSLATORS: This is when the daemon crashed, and we are up shit creek
+#. without a paddle
 #: ../client/pk-console.c:1119
 msgid "The daemon crashed mid-transaction!"
 msgstr "Deabruak huts egin du transakzioaren erdian!"
@@ -370,7 +381,8 @@ msgstr "PackageKit-en kontsola-interfazea"
 msgid "Subcommands:"
 msgstr "Azpikomandoak:"
 
-#. TRANSLATORS: we keep a database updated with the time that an action was last executed
+#. TRANSLATORS: we keep a database updated with the time that an action was
+#. last executed
 #: ../client/pk-console.c:1234
 msgid "Failed to get the time since this action was last completed"
 msgstr "Ezin izan da jakin ekintza hau azken aldiz egin zenetik igaro den denbora"
@@ -408,8 +420,7 @@ msgstr "Exekutatu komandoa banda-zabalera inaktiboa eta energia gutxiago erabili
 
 #. TRANSLATORS: command line argument, just output without fancy formatting
 #: ../client/pk-console.c:1293
-msgid ""
-"Print to screen a machine readable output, rather than using animated widgets"
+msgid "Print to screen a machine readable output, rather than using animated widgets"
 msgstr "Idatzi pantailan makinak irakur dezakeen irteera, widget animatuak erabili ordez"
 
 #. TRANSLATORS: command line argument, just output without fancy formatting
@@ -473,7 +484,8 @@ msgstr "Mota bat, key_id bat eta package_id bat behar dira"
 msgid "A package name to remove is required"
 msgstr "Pakete-izen bat behar da kendua izateko"
 
-#. TRANSLATORS: the user did not specify anything about what to download or where
+#. TRANSLATORS: the user did not specify anything about what to download or
+#. where
 #: ../client/pk-console.c:1523
 msgid "A destination directory and the package names to download are required"
 msgstr "Helburu-direktorio bat eta pakete-izenak behar dira deskargarako"
@@ -526,7 +538,8 @@ msgstr "Eginkizun zuzena behar da"
 msgid "A package name is required"
 msgstr "Pakete-izen bat behar da"
 
-#. TRANSLATORS: each package "provides" certain things, e.g. mime(gstreamer-decoder-mp3), the user didn't specify it
+#. TRANSLATORS: each package "provides" certain things, e.g. mime(gstreamer-
+#. decoder-mp3), the user didn't specify it
 #: ../client/pk-console.c:1670
 msgid "A package provide string is required"
 msgstr "Pakete-eskaintzaren kate bat behar da"
@@ -541,7 +554,8 @@ msgstr "Banaketa-izen bat behar da"
 msgid "An upgrade type is required, e.g. 'minimal', 'default' or 'complete'"
 msgstr "Bertsio-berritze mota bat behar da, adib. 'minimal', 'default' edo 'complete'"
 
-#. TRANSLATORS: The user tried to use an unsupported option on the command line
+#. TRANSLATORS: The user tried to use an unsupported option on the command
+#. line
 #: ../client/pk-console.c:1770
 #, c-format
 msgid "Option '%s' is not supported"
@@ -552,7 +566,8 @@ msgstr "'%s' aukera ez dago onartuta"
 msgid "Command failed"
 msgstr "Komandoak huts egin du"
 
-#. TRANSLATORS: we can exclude certain packages (glibc) when we know they'll exist on the target
+#. TRANSLATORS: we can exclude certain packages (glibc) when we know they'll
+#. exist on the target
 #: ../client/pk-generate-pack.c:253
 msgid "Set the file name of dependencies to be excluded"
 msgstr "Ezarri baztertuko diren mendekotasunen fitxategi-izena"
@@ -587,25 +602,28 @@ msgstr "Bi aukerak hautatu dira."
 msgid "A output directory or file name is required"
 msgstr "Irteerako direktorio edo fitxategi-izen bat behar da"
 
-#. TRANSLATORS: This is when the daemon is not-installed/broken and fails to startup
+#. TRANSLATORS: This is when the daemon is not-installed/broken and fails to
+#. startup
 #: ../client/pk-generate-pack.c:340
 msgid "The daemon failed to startup"
 msgstr "Ezin izan da deabrua abiarazi"
 
-#. TRANSLATORS: This is when the backend doesn't have the capability to get-depends
-#. TRANSLATORS: This is when the backend doesn't have the capability to download
+#. TRANSLATORS: This is when the backend doesn't have the capability to get-
+#. depends
+#. TRANSLATORS: This is when the backend doesn't have the capability to
+#. download
 #: ../client/pk-generate-pack.c:351 ../client/pk-generate-pack.c:357
 msgid "The package manager cannot perform this type of operation."
 msgstr "Pakete-kudeatzaileak ezin du mota honetako eragiketarik egin."
 
-#. TRANSLATORS: This is when the distro didn't include libarchive support into PK
+#. TRANSLATORS: This is when the distro didn't include libarchive support into
+#. PK
 #: ../client/pk-generate-pack.c:364
-msgid ""
-"Service packs cannot be created as PackageKit was not built with libarchive "
-"support."
+msgid "Service packs cannot be created as PackageKit was not built with libarchive support."
 msgstr "Zerbitzu-paketeak ezin dira sortu, PackageKit ez baita eraiki libarchive-ren euskarriarekin."
 
-#. TRANSLATORS: the user specified an absolute path, but didn't get the extension correct
+#. TRANSLATORS: the user specified an absolute path, but didn't get the
+#. extension correct
 #: ../client/pk-generate-pack.c:375
 msgid "If specifying a file, the service pack name must end with"
 msgstr "Fitxategi bat adierazten bada, zerbitzu-paketearen izenaren amaiera honek izan behar du:"
@@ -620,12 +638,14 @@ msgstr "Jadanik existitzen da izen bera duen pakete bat, gainidatzi nahi al duzu
 msgid "The pack was not overwritten."
 msgstr "Paketea ez da gainidatzi."
 
-#. TRANSLATORS: This is when the temporary directory cannot be created, the directory name follows
+#. TRANSLATORS: This is when the temporary directory cannot be created, the
+#. directory name follows
 #: ../client/pk-generate-pack.c:407
 msgid "Failed to create directory:"
 msgstr "Direktorioaren sorrerak huts egin du:"
 
-#. TRANSLATORS: This is when the list of packages from the remote computer cannot be opened
+#. TRANSLATORS: This is when the list of packages from the remote computer
+#. cannot be opened
 #: ../client/pk-generate-pack.c:419
 msgid "Failed to open package list."
 msgstr "Ezin iza da pakete-zerrenda ireki."
@@ -635,13 +655,15 @@ msgstr "Ezin iza da pakete-zerrenda ireki."
 msgid "Finding package name."
 msgstr "Pakete-izena bilatzen."
 
-#. TRANSLATORS: This is when the package cannot be found in any software source. The detailed error follows
+#. TRANSLATORS: This is when the package cannot be found in any software
+#. source. The detailed error follows
 #: ../client/pk-generate-pack.c:432
 #, c-format
 msgid "Failed to find package '%s': %s"
 msgstr "Ezin izan da  '%s' paketea aurkitu: %s"
 
-#. TRANSLATORS: This is telling the user we are in the process of making the pack
+#. TRANSLATORS: This is telling the user we are in the process of making the
+#. pack
 #: ../client/pk-generate-pack.c:440
 msgid "Creating service pack..."
 msgstr "Zerbitzu-paketea sortzen..."
@@ -804,7 +826,8 @@ msgstr "Hautatu exekutatuko den komandoa"
 msgid "The package providing this file is:"
 msgstr "Fitxategi honetaz hornitzen duen paketea hau da:"
 
-#. TRANSLATORS: as the user if we want to install a package to provide the command
+#. TRANSLATORS: as the user if we want to install a package to provide the
+#. command
 #: ../contrib/command-not-found/pk-command-not-found.c:826
 #, c-format
 msgid "Install package '%s' to provide command '%s'?"
@@ -815,7 +838,8 @@ msgstr "Instalatu  '%s' paketea  '%s' komandoaz hornitzeko?"
 msgid "Packages providing this file are:"
 msgstr "Fitxategi honetaz hornitzen duten paketeak hauek dira:"
 
-#. TRANSLATORS: Show the user a list of packages that they can install to provide this command
+#. TRANSLATORS: Show the user a list of packages that they can install to
+#. provide this command
 #: ../contrib/command-not-found/pk-command-not-found.c:863
 msgid "Suitable packages are:"
 msgstr "Pakete egokiak hauek dira:"
@@ -837,13 +861,14 @@ msgstr "Instalazioa abiarazten"
 msgid "Failed to find the package %s, or already installed: %s"
 msgstr "Ez da %s paketea aurkitu, edo jadanik instalatuta dago: %s"
 
-#. command line argument, simulate what would be done, but don't actually do it
+#. command line argument, simulate what would be done, but don't actually do
+#. it
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:516
-msgid ""
-"Don't actually install any packages, only simulate what would be installed"
+msgid "Don't actually install any packages, only simulate what would be installed"
 msgstr "Ez instalatu paketerik, instalatuko dela simulatu soilik"
 
-#. command line argument, do we skip packages that depend on the ones specified
+#. command line argument, do we skip packages that depend on the ones
+#. specified
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:519
 msgid "Do not install dependencies of the core packages"
 msgstr "Ez instalatu oinarrizko paketeen mendekotasunak"
@@ -858,7 +883,8 @@ msgstr "Ez erakutsi ez informaziorik ez aurrerapenik"
 msgid "PackageKit Debuginfo Installer"
 msgstr "PackageKit-en arazketa-informazioko instalatzailea"
 
-#. TRANSLATORS: the use needs to specify a list of package names on the command line
+#. TRANSLATORS: the use needs to specify a list of package names on the
+#. command line
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:554
 #, c-format
 msgid "ERROR: Specify package names to install."
@@ -976,13 +1002,15 @@ msgstr "%i pakete gehigarri aurkitu dira."
 msgid "No extra packages required."
 msgstr "Ez da pakete gehigarririk behar."
 
-#. TRANSLATORS: tell the user we found some packages (and deps), and then list them
+#. TRANSLATORS: tell the user we found some packages (and deps), and then list
+#. them
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:835
 #, c-format
 msgid "Found %i packages to install:"
 msgstr "Instalatzeko %i pakete aurkitu dira:"
 
-#. TRANSLATORS: simulate mode is a testing mode where we quit before the action
+#. TRANSLATORS: simulate mode is a testing mode where we quit before the
+#. action
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:848
 #, c-format
 msgid "Not installing packages in simulate mode"
@@ -1008,7 +1036,8 @@ msgstr "Ezin dira paketeak instalatu: %s"
 msgid "Disabling sources previously enabled"
 msgstr "Aurretiaz gaitutako jatorriak desgaitzen"
 
-#. TRANSLATORS: no debuginfo packages could be found to be installed, detailed error follows
+#. TRANSLATORS: no debuginfo packages could be found to be installed, detailed
+#. error follows
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:917
 #, c-format
 msgid "Could not disable the debugging sources: %s"
@@ -1065,7 +1094,8 @@ msgstr "Gailuaren bide-izena ez da zuzena"
 msgid "Show extra debugging information"
 msgstr "Erakutsi arazketa-informazio gehigarria"
 
-#. command line argument, simulate what would be done, but don't actually do it
+#. command line argument, simulate what would be done, but don't actually do
+#. it
 #: ../contrib/device-rebind/pk-device-rebind.c:297
 msgid "Don't actually touch the hardware, only simulate what would be done"
 msgstr "Ez ukitu hardwarea, soilik simulatu zer egingo litzatekeen"
@@ -1075,7 +1105,8 @@ msgstr "Ez ukitu hardwarea, soilik simulatu zer egingo litzatekeen"
 msgid "Device paths"
 msgstr "Gailuen bide-izenak"
 
-#. TRANSLATORS: tool that gets called when the device needs reloading after installing firmware
+#. TRANSLATORS: tool that gets called when the device needs reloading after
+#. installing firmware
 #: ../contrib/device-rebind/pk-device-rebind.c:315
 msgid "PackageKit Device Reloader"
 msgstr "PackageKit-en gailu-birkargatzailea"
@@ -1127,7 +1158,8 @@ msgstr "PackageKit zerbitzu-paketea"
 msgid "Please enter a number from 1 to %i: "
 msgstr "Sartu 1etik %i-(e)ra arteko zenbaki bat: "
 
-#. TRANSLATORS: more than one package could be found that matched, to follow is a list of possible packages
+#. TRANSLATORS: more than one package could be found that matched, to follow
+#. is a list of possible packages
 #: ../lib/packagekit-glib2/pk-console-shared.c:189
 msgid "More than one package matches:"
 msgstr "Pakete bat baino gehiago dator bat:"
@@ -1147,7 +1179,8 @@ msgstr "Egoera ezezaguna"
 msgid "Starting"
 msgstr "Abiarazten"
 
-#. TRANSLATORS: transaction state, the transaction is waiting for another to complete
+#. TRANSLATORS: transaction state, the transaction is waiting for another to
+#. complete
 #: ../lib/packagekit-glib2/pk-console-shared.c:263
 msgid "Waiting in queue"
 msgstr "Ilaran itxaroten"
@@ -1189,7 +1222,8 @@ msgstr "Software-zerrenda freskatzen"
 msgid "Installing updates"
 msgstr "Eguneraketak instalatzen"
 
-#. TRANSLATORS: transaction state, removing old packages, and cleaning config files
+#. TRANSLATORS: transaction state, removing old packages, and cleaning config
+#. files
 #: ../lib/packagekit-glib2/pk-console-shared.c:299
 msgid "Cleaning up packages"
 msgstr "Paketeak garbitzen"
@@ -1204,7 +1238,8 @@ msgstr "Paketeak zaharkitzen"
 msgid "Resolving dependencies"
 msgstr "Mendekotasunak ebazten"
 
-#. TRANSLATORS: transaction state, checking if we have all the security keys for the operation
+#. TRANSLATORS: transaction state, checking if we have all the security keys
+#. for the operation
 #: ../lib/packagekit-glib2/pk-console-shared.c:311
 msgid "Checking signatures"
 msgstr "Sinadurak egiaztatzen"
@@ -1221,7 +1256,8 @@ msgstr "Aurreko transakzio batera itzultzen"
 msgid "Testing changes"
 msgstr "Aldaketak probatzen"
 
-#. TRANSLATORS: transaction state, when we're writing to the system package database
+#. TRANSLATORS: transaction state, when we're writing to the system package
+#. database
 #: ../lib/packagekit-glib2/pk-console-shared.c:323
 msgid "Committing changes"
 msgstr "Aldaketak aplikatzen"
@@ -1286,12 +1322,14 @@ msgstr "Katxea kargatzen"
 msgid "Scanning applications"
 msgstr "Aplikazioak eskaneatzen"
 
-#. TRANSLATORS: transaction state, generating a list of packages installed on the system
+#. TRANSLATORS: transaction state, generating a list of packages installed on
+#. the system
 #: ../lib/packagekit-glib2/pk-console-shared.c:375
 msgid "Generating package lists"
 msgstr "Pakete-zerrenda sortzen"
 
-#. TRANSLATORS: transaction state, when we're waiting for the native tools to exit
+#. TRANSLATORS: transaction state, when we're waiting for the native tools to
+#. exit
 #: ../lib/packagekit-glib2/pk-console-shared.c:379
 msgid "Waiting for package manager lock"
 msgstr "Pakete-kudeatzailearen blokeoa itxaroten"
@@ -1306,17 +1344,20 @@ msgstr "Autentifikaziorako itxaroten"
 msgid "Updating running applications"
 msgstr "Abioan dauden aplikazioak eguneratzen"
 
-#. TRANSLATORS: transaction state, we are checking executable files currently in use
+#. TRANSLATORS: transaction state, we are checking executable files currently
+#. in use
 #: ../lib/packagekit-glib2/pk-console-shared.c:391
 msgid "Checking applications in use"
 msgstr "Abioan dauden aplikazioak egiaztatzen"
 
-#. TRANSLATORS: transaction state, we are checking for libraries currently in use
+#. TRANSLATORS: transaction state, we are checking for libraries currently in
+#. use
 #: ../lib/packagekit-glib2/pk-console-shared.c:395
 msgid "Checking libraries in use"
 msgstr "Erabiltzen ari diren liburutegiak egiaztatzen"
 
-#. TRANSLATORS: transaction state, we are copying package files before or after the transaction
+#. TRANSLATORS: transaction state, we are copying package files before or
+#. after the transaction
 #: ../lib/packagekit-glib2/pk-console-shared.c:399
 msgid "Copying files"
 msgstr "Fitxategiak kopiatzen"
@@ -1596,7 +1637,8 @@ msgstr "Arazketa-aukerak"
 msgid "Show debugging options"
 msgstr "Erakutsi arazketa-aukerak"
 
-#. TRANSLATORS: ask the user if they are comfortable installing insecure packages
+#. TRANSLATORS: ask the user if they are comfortable installing insecure
+#. packages
 #: ../lib/packagekit-glib2/pk-task-text.c:67
 msgid "Do you want to allow installing of unsigned software?"
 msgstr "Sinatu gabeko softwarea instala dadin baimendu nahi duzu?"
@@ -1606,7 +1648,8 @@ msgstr "Sinatu gabeko softwarea instala dadin baimendu nahi duzu?"
 msgid "The unsigned software will not be installed."
 msgstr "Sinatu gabeko softwarea ez da instalatuko."
 
-#. TRANSLATORS: the package repository is signed by a key that is not recognised
+#. TRANSLATORS: the package repository is signed by a key that is not
+#. recognised
 #: ../lib/packagekit-glib2/pk-task-text.c:121
 msgid "Software source signature required"
 msgstr "Software-jatorriaren sinadura behar da"
@@ -1651,7 +1694,8 @@ msgstr "Onartzen al duzu sinadura hau?"
 msgid "The signature was not accepted."
 msgstr "Sinadura ez da onartu."
 
-#. TRANSLATORS: this is another name for a software licence that has to be read before installing
+#. TRANSLATORS: this is another name for a software licence that has to be
+#. read before installing
 #: ../lib/packagekit-glib2/pk-task-text.c:203
 msgid "End user licence agreement required"
 msgstr "Azken erabiltzailearen lizentzia-kontratua behar da"
@@ -1741,7 +1785,7 @@ msgstr "Transakzioa ez da burutu."
 #. licence agreements.
 #. - Change this to 'auth_admin' for environments where users should not
 #. be given the option to make legal decisions.
-#.
+#. 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:7
 msgid "Accept EULA"
 msgstr "Onartu EULA"
@@ -1751,8 +1795,7 @@ msgid "Authentication is required to accept a EULA"
 msgstr "Autentifikazioa behar da EULA bat onartzeko"
 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:9
-msgid ""
-"Authentication is required to cancel a task that was not started by yourself"
+msgid "Authentication is required to cancel a task that was not started by yourself"
 msgstr "Autentifikazioa behar da zerorrek abiarazi ez duzun zeregin bat bertan behera uzteko"
 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:10
@@ -1760,14 +1803,11 @@ msgid "Authentication is required to change software source parameters"
 msgstr "Autentifikazioa behar da software-jatorrien parametroak aldatzeko"
 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:11
-msgid ""
-"Authentication is required to change the location used to decompress packages"
+msgid "Authentication is required to change the location used to decompress packages"
 msgstr "Autentifikazioa behar da paketeak destrinkotzeko erabiltzen den kokapena aldatzeko"
 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:12
-msgid ""
-"Authentication is required to consider a key used for signing packages as "
-"trusted"
+msgid "Authentication is required to consider a key used for signing packages as trusted"
 msgstr "Autentifikazioa behar da paketeak sinatzeko erabilitako gakoa fidagarrizat hartzeko"
 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:13
@@ -1795,9 +1835,7 @@ msgid "Authentication is required to rollback a transaction"
 msgstr "Autentifikazioa behar da transakzio bat atzera botatzeko"
 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:19
-msgid ""
-"Authentication is required to set the network proxy used for downloading "
-"packages"
+msgid "Authentication is required to set the network proxy used for downloading packages"
 msgstr "Autentifikazioa behar da paketeak deskargatzeko erabiliko den sareko proxy-a ezartzeko"
 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:20
@@ -1812,7 +1850,7 @@ msgstr "Autentifikazioa behar da sistema eragilea bertsioz berritzeko"
 #. - Normal users are allowed to cancel their own task without
 #. authentication, but a different user id needs the admin password
 #. to cancel another users task.
-#.
+#. 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:27
 msgid "Cancel foreign task"
 msgstr "Utzi zeregin arrotza"
@@ -1822,7 +1860,7 @@ msgstr "Utzi zeregin arrotza"
 #. instance to a LTSP image or a virtual machine.
 #. - This could be used to overwrite files not owned by the user using
 #. a carefully created package file.
-#.
+#. 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:34
 msgid "Change location that packages are installed"
 msgstr "Aldatu paketeak instalatuko diren kokapena"
@@ -1831,7 +1869,7 @@ msgstr "Aldatu paketeak instalatuko diren kokapena"
 #. - Normal users require admin authentication to enable or disable
 #. software sources as this can be used to enable new updates or
 #. install different versions of software.
-#.
+#. 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:40
 msgid "Change software source parameters"
 msgstr "Aldatu software-jatorrien parametroak"
@@ -1841,7 +1879,7 @@ msgstr "Aldatu software-jatorrien parametroak"
 #. from signed repositories, as this cannot exploit a system.
 #. - Paranoid users (or parents!) can change this to 'auth_admin' or
 #. 'auth_admin_keep'.
-#.
+#. 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:47
 msgid "Install signed package"
 msgstr "Instalatu sinatutako paketea"
@@ -1851,7 +1889,7 @@ msgstr "Instalatu sinatutako paketea"
 #. unrecognised packages, as allowing users to do this without a
 #. password would be a massive security hole.
 #. - This is not retained as each package should be authenticated.
-#.
+#. 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:54
 msgid "Install untrusted local file"
 msgstr "Instalatu fidagarria ez den fitxategi lokala"
@@ -1859,7 +1897,7 @@ msgstr "Instalatu fidagarria ez den fitxategi lokala"
 #. SECURITY:
 #. - Normal users do not require admin authentication to refresh the
 #. cache, as this doesn't actually install or remove software.
-#.
+#. 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:59
 msgid "Refresh system sources"
 msgstr "Freskatu sistemaren jatorriak"
@@ -1870,17 +1908,21 @@ msgstr "Freskatu sistemaren jatorriak"
 #. - This should not be set to 'yes' as unprivileged users could then
 #. try to rebind drivers in use, for instance security authentication
 #. devices.
-#.
+#. 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:67
 msgid "Reload a device"
 msgstr "Birkargatu gailu bat"
 
 #. SECURITY:
-#. - Normal users require admin authentication to upgrade the disto as
+#. - Normal users require admin authentication to remove packages as
 #. this can make the system unbootable or stop other applications from
 #. working.
-#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:73
+#. - Be sure to close the tool used to remove the packages after the
+#. admin authentication has been obtained, otherwise packages can still
+#. be removed. If this is not possible, change this authentication to
+#. 'auth_admin'.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:77
 msgid "Remove package"
 msgstr "Kendu paketea"
 
@@ -1888,16 +1930,16 @@ msgstr "Kendu paketea"
 #. - Normal users require admin authentication to rollback system state
 #. as this will change a large number of packages, and could expose the
 #. system to previously patched security vulnerabilities.
-#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:79
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:83
 msgid "Rollback to a previous transaction"
 msgstr "Itzuli aurreko transakzio batera"
 
 #. SECURITY:
 #. - Normal users do not require admin authentication to set the proxy
 #. used for downloading packages.
-#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:84
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:88
 msgid "Set network proxy"
 msgstr "Ezarri sarearen proxy-a"
 
@@ -1906,8 +1948,8 @@ msgstr "Ezarri sarearen proxy-a"
 #. - This implies adding an explicit trust, and should not be granted
 #. without a secure authentication.
 #. - This is not kept as each package should be authenticated.
-#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:91
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:95
 msgid "Trust a key used for signing packages"
 msgstr "Fidatu paketeak sinatzeko erabili den gako batetaz"
 
@@ -1917,11 +1959,20 @@ msgstr "Fidatu paketeak sinatzeko erabili den gako batetaz"
 #. to update the system when unattended.
 #. - Changing this to anything other than 'yes' will break unattended
 #. updates.
-#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:99
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:103
 msgid "Update packages"
 msgstr "Eguneratu paketeak"
 
+#. SECURITY:
+#. - Normal users require admin authentication to upgrade the disto as
+#. this can make the system unbootable or stop other applications from
+#. working.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:109
+msgid "Upgrade System"
+msgstr "Eguneratu sistema"
+
 #. TRANSLATORS: failed due to DBus security
 #: ../src/pk-main.c:87
 msgid "Startup failed due to security policies on this machine."
@@ -1939,9 +1990,7 @@ msgstr "Exekutagarria ez du erabiltzaile egokiak (normalean root) abiarazi"
 
 #. TRANSLATORS: or we are installed in a prefix
 #: ../src/pk-main.c:93
-msgid ""
-"The org.freedesktop.PackageKit.conf file is not installed in the system "
-"directory:"
+msgid "The org.freedesktop.PackageKit.conf file is not installed in the system directory:"
 msgstr "org.freedesktop.PackageKit.conf fitxategia ez dago instalatuta sistemaren direktorioan:"
 
 #. TRANSLATORS: a backend is the system package tool, e.g. yum, apt
@@ -1984,7 +2033,8 @@ msgstr "PackageKit zerbitzua"
 msgid "Cannot connect to the system bus"
 msgstr "Ezin izan da sistemaren busera konektatu"
 
-#. TRANSLATORS: cannot register on system bus, unknown reason -- geeky error follows
+#. TRANSLATORS: cannot register on system bus, unknown reason -- geeky error
+#. follows
 #: ../src/pk-main.c:316
 msgid "Error trying to start:"
 msgstr "Errorea abiaraztean:"
commit 277acffc2e5adca25a31365cf73f8243b91651a5
Author: Daniel Nicoletti <dantti85-pk at yahoo.com.br>
Date:   Thu Nov 25 16:51:15 2010 -0200

    aptcc: Make sure the package is valid before some operations

diff --git a/backends/aptcc/pk-backend-aptcc.cpp b/backends/aptcc/pk-backend-aptcc.cpp
index 118c5df..a7e5d6d 100644
--- a/backends/aptcc/pk-backend-aptcc.cpp
+++ b/backends/aptcc/pk-backend-aptcc.cpp
@@ -552,6 +552,9 @@ backend_what_provides_thread (PkBackend *backend)
 			    break;
 			}
 			pkgCache::PkgIterator pkg = m_apt->packageCache->FindPkg(i->c_str());
+            if (pkg.end() == true) {
+                continue;
+            }
 			pkgCache::VerIterator ver = m_apt->find_ver(pkg);
 			if (ver.end() == true) {
 				continue;
@@ -559,7 +562,7 @@ backend_what_provides_thread (PkBackend *backend)
 			output.push_back(pair<pkgCache::PkgIterator, pkgCache::VerIterator>(pkg, ver));
 		}
 
-		if (error) {
+		if (error && provides == PK_PROVIDES_ENUM_MIMETYPE) {
 			// check if app-install-data is installed
 			pkgCache::PkgIterator pkg;
 			pkg = m_apt->packageCache->FindPkg("app-install-data");
@@ -909,6 +912,9 @@ pk_backend_search_files_thread (PkBackend *backend)
 			    break;
 			}
 			pkgCache::PkgIterator pkg = m_apt->packageCache->FindPkg(i->c_str());
+            if (pkg.end() == true) {
+                continue;
+            }
 			pkgCache::VerIterator ver = m_apt->find_ver(pkg);
 			if (ver.end() == true)
 			{
commit 2690c25e6a0ba51c7bd809a421f87ff98995d6b5
Author: assar <asiersar at yahoo.com>
Date:   Thu Nov 25 16:08:07 2010 +0000

    l10n: Updated Basque (eu) translation to 100%
    
    New status: 374 messages complete with 0 fuzzies and 0 untranslated.
    
    Transmitted-via: Transifex (www.transifex.net).

diff --git a/po/eu.po b/po/eu.po
index 25ca0ad..a5bf3da 100644
--- a/po/eu.po
+++ b/po/eu.po
@@ -3,8 +3,7 @@
 # Asier Sarasua Garmendia <asiersar at yahoo.com>, 2010.
 #
 msgid ""
-msgstr ""
-"Project-Id-Version: packagekit\n"
+msgstr "Project-Id-Version: packagekit\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2010-11-07 07:14+0000\n"
 "PO-Revision-Date: 2010-08-12 01:19+0100\n"
@@ -384,7 +383,7 @@ msgstr "Erakutsi programaren bertsioa eta irten"
 #. TRANSLATORS: command line argument, use a filter to narrow down results
 #: ../client/pk-console.c:1278
 msgid "Set the filter, e.g. installed"
-msgstr "Ezarri iragazkia, adib. instalatua"
+msgstr "Ezarri iragazkia, adib. 'instalatua'"
 
 #. TRANSLATORS: command line argument, use a non-standard install prefix
 #: ../client/pk-console.c:1281
@@ -405,7 +404,7 @@ msgstr "Instalatu paketeak baieztapena eskatu gabe"
 #. TRANSLATORS: command line argument, this command is not a priority
 #: ../client/pk-console.c:1290
 msgid "Run the command using idle network bandwidth and also using less power"
-msgstr "Exekutatu komandoa banda-zabalera inaktiboa eta argindar gutxiago erabilita"
+msgstr "Exekutatu komandoa banda-zabalera inaktiboa eta energia gutxiago erabilita"
 
 #. TRANSLATORS: command line argument, just output without fancy formatting
 #: ../client/pk-console.c:1293
@@ -1203,7 +1202,7 @@ msgstr "Paketeak zaharkitzen"
 #. TRANSLATORS: transaction state, checking the transaction before we do it
 #: ../lib/packagekit-glib2/pk-console-shared.c:307
 msgid "Resolving dependencies"
-msgstr "Mendekotasunak konpontzen"
+msgstr "Mendekotasunak ebazten"
 
 #. TRANSLATORS: transaction state, checking if we have all the security keys for the operation
 #: ../lib/packagekit-glib2/pk-console-shared.c:311
commit 200dd20cf1d90699f8180be60babc1d2329902c5
Author: assar <asiersar at yahoo.com>
Date:   Thu Nov 25 15:44:15 2010 +0000

    l10n: Basque translation added to PackageKit
    
    New status: 374 messages complete with 0 fuzzies and 0 untranslated.
    
    Transmitted-via: Transifex (www.transifex.net).

diff --git a/po/eu.po b/po/eu.po
new file mode 100644
index 0000000..25ca0ad
--- /dev/null
+++ b/po/eu.po
@@ -0,0 +1,2026 @@
+# Basque translation of PackageKit.
+# This file is distributed under the same license as the PackageKit package.
+# Asier Sarasua Garmendia <asiersar at yahoo.com>, 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: packagekit\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-07 07:14+0000\n"
+"PO-Revision-Date: 2010-08-12 01:19+0100\n"
+"Last-Translator: Asier Sarasua Garmendia <asiersar at yahoo.com>\n"
+"Language-Team: Librezale <librezale at librezale.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. TRANSLATORS: this is an atomic transaction
+#. TRANSLATORS: the role is the point of the transaction, e.g. update-system
+#: ../client/pk-console.c:174 ../client/pk-console.c:596
+msgid "Transaction"
+msgstr "Transakzioa"
+
+#. TRANSLATORS: this is the time the transaction was started in system timezone
+#: ../client/pk-console.c:176
+msgid "System time"
+msgstr "Sistemaren ordua"
+
+#. TRANSLATORS: this is if the transaction succeeded or not
+#: ../client/pk-console.c:178
+msgid "Succeeded"
+msgstr "Arrakasta"
+
+#: ../client/pk-console.c:178
+msgid "True"
+msgstr "Egia"
+
+#: ../client/pk-console.c:178
+msgid "False"
+msgstr "Gezurra"
+
+#. TRANSLATORS: this is the transactions role, e.g. "update-system"
+#. TRANSLATORS: the trasaction role, e.g. update-system
+#: ../client/pk-console.c:180 ../src/pk-polkit-action-lookup.c:332
+msgid "Role"
+msgstr "Eginkizuna"
+
+#. TRANSLATORS: this is The duration of the transaction
+#: ../client/pk-console.c:185
+msgid "Duration"
+msgstr "Iraupena"
+
+#: ../client/pk-console.c:185
+msgid "(seconds)"
+msgstr "(segundo)"
+
+#. TRANSLATORS: this is The command line used to do the action
+#. TRANSLATORS: the command line of the thing that wants the authentication
+#: ../client/pk-console.c:189 ../src/pk-polkit-action-lookup.c:346
+msgid "Command line"
+msgstr "Komando-lerroa"
+
+#. TRANSLATORS: this is the user ID of the user that started the action
+#: ../client/pk-console.c:191
+msgid "User ID"
+msgstr "Erabiltzaile-IDa"
+
+#. TRANSLATORS: this is the username, e.g. hughsie
+#: ../client/pk-console.c:198
+msgid "Username"
+msgstr "Erabiltzaile-izena"
+
+#. TRANSLATORS: this is the users real name, e.g. "Richard Hughes"
+#: ../client/pk-console.c:202
+msgid "Real name"
+msgstr "Benetako izena"
+
+#: ../client/pk-console.c:210
+msgid "Affected packages:"
+msgstr "Aldatuko diren paketeak:"
+
+#: ../client/pk-console.c:212
+msgid "Affected packages: None"
+msgstr "Aldatuko diren paketeak: Bat ere ez"
+
+#. TRANSLATORS: this is the distro, e.g. Fedora 10
+#: ../client/pk-console.c:247
+msgid "Distribution"
+msgstr "Banaketa"
+
+#. TRANSLATORS: this is type of update, stable or testing
+#: ../client/pk-console.c:249
+msgid "Type"
+msgstr "Mota"
+
+#. TRANSLATORS: this is any summary text describing the upgrade
+#. TRANSLATORS: this is the summary of the group
+#: ../client/pk-console.c:251 ../client/pk-console.c:290
+msgid "Summary"
+msgstr "Laburpena"
+
+#. TRANSLATORS: this is the group category name
+#: ../client/pk-console.c:279
+msgid "Category"
+msgstr "Kategoria"
+
+#. TRANSLATORS: this is group identifier
+#: ../client/pk-console.c:281
+msgid "ID"
+msgstr "IDa"
+
+#. TRANSLATORS: this is the parent group
+#: ../client/pk-console.c:284
+msgid "Parent"
+msgstr "Gurasoa"
+
+#. TRANSLATORS: this is the name of the parent group
+#: ../client/pk-console.c:287
+msgid "Name"
+msgstr "Izena"
+
+#. TRANSLATORS: this is preferred icon for the group
+#: ../client/pk-console.c:293
+msgid "Icon"
+msgstr "Ikonoa"
+
+#. TRANSLATORS: this is a header for the package that can be updated
+#: ../client/pk-console.c:339
+msgid "Details about the update:"
+msgstr "Eguneraketari buruzko xehetasunak:"
+
+#. TRANSLATORS: details about the update, package name and version
+#. TRANSLATORS: the package that is being processed
+#. TRANSLATORS: the package that is not signed by a known key
+#. TRANSLATORS: the package name that was trying to be installed
+#. TRANSLATORS: title, the names of the packages that the method is processing
+#: ../client/pk-console.c:345 ../client/pk-console.c:615
+#: ../lib/packagekit-glib2/pk-task-text.c:124
+#: ../lib/packagekit-glib2/pk-task-text.c:206
+#: ../src/pk-polkit-action-lookup.c:357
+msgid "Package"
+msgid_plural "Packages"
+msgstr[0] "Paketea"
+msgstr[1] "Paketeak"
+
+#. TRANSLATORS: details about the update, any packages that this update updates
+#: ../client/pk-console.c:348
+msgid "Updates"
+msgstr "Eguneraketak"
+
+#. TRANSLATORS: details about the update, any packages that this update obsoletes
+#: ../client/pk-console.c:352
+msgid "Obsoletes"
+msgstr "Zaharkituak"
+
+#. TRANSLATORS: details about the update, the vendor URLs
+#. TRANSLATORS: the vendor (e.g. vmware) that is providing the EULA
+#: ../client/pk-console.c:356 ../lib/packagekit-glib2/pk-task-text.c:209
+msgid "Vendor"
+msgstr "Hornitzailea"
+
+#. TRANSLATORS: details about the update, the bugzilla URLs
+#: ../client/pk-console.c:360
+msgid "Bugzilla"
+msgstr "Bugzilla"
+
+#. TRANSLATORS: details about the update, the CVE URLs
+#: ../client/pk-console.c:364
+msgid "CVE"
+msgstr "CVE"
+
+#. TRANSLATORS: details about the update, if the package requires a restart
+#: ../client/pk-console.c:368
+msgid "Restart"
+msgstr "Berrabiarazi"
+
+#. TRANSLATORS: details about the update, any description of the update
+#: ../client/pk-console.c:372
+msgid "Update text"
+msgstr "Eguneraketa-testua"
+
+#. TRANSLATORS: details about the update, the changelog for the package
+#: ../client/pk-console.c:376
+msgid "Changes"
+msgstr "Aldaketak"
+
+#. TRANSLATORS: details about the update, the ongoing state of the update
+#: ../client/pk-console.c:380
+msgid "State"
+msgstr "Egoera"
+
+#. TRANSLATORS: details about the update, date the update was issued
+#: ../client/pk-console.c:384
+msgid "Issued"
+msgstr "Igorria"
+
+#. TRANSLATORS: details about the update, date the update was updated
+#. TRANSLATORS: The action of the package, in past tense
+#: ../client/pk-console.c:388 ../lib/packagekit-glib2/pk-console-shared.c:515
+msgid "Updated"
+msgstr "Eguneratua"
+
+#. TRANSLATORS: if the repo is enabled
+#: ../client/pk-console.c:424
+msgid "Enabled"
+msgstr "Gaitua"
+
+#. TRANSLATORS: if the repo is disabled
+#: ../client/pk-console.c:427
+msgid "Disabled"
+msgstr "Desgaitua"
+
+#. TRANSLATORS: a package requires the system to be restarted
+#: ../client/pk-console.c:459
+msgid "System restart required by:"
+msgstr "Sistema berrabiaraztea eskatu du honek:"
+
+#. TRANSLATORS: a package requires the session to be restarted
+#: ../client/pk-console.c:462
+msgid "Session restart required:"
+msgstr "Sistema berrabiaraztea eskatua:"
+
+#. TRANSLATORS: a package requires the system to be restarted due to a security update
+#: ../client/pk-console.c:465
+msgid "System restart (security) required by:"
+msgstr "Sistema berrabiaraztea (segurtasunagatik) eskatu du honek:"
+
+#. TRANSLATORS: a package requires the session to be restarted due to a security update
+#: ../client/pk-console.c:468
+msgid "Session restart (security) required:"
+msgstr "Sistema berrabiaraztea (seguratasunagatik) eskatua:"
+
+#. TRANSLATORS: a package requires the application to be restarted
+#: ../client/pk-console.c:471
+msgid "Application restart required by:"
+msgstr "Aplikazioa berrabiaraztea eskatu du honek:"
+
+#. TRANSLATORS: This a list of details about the package
+#: ../client/pk-console.c:506
+msgid "Package description"
+msgstr "Paketearen deskribapena"
+
+#. TRANSLATORS: This a message (like a little note that may be of interest) from the transaction
+#: ../client/pk-console.c:537
+msgid "Message:"
+msgstr "Mezua:"
+
+#. TRANSLATORS: This where the package has no files
+#: ../client/pk-console.c:558
+msgid "No files"
+msgstr "Fitxategirik ez"
+
+#. TRANSLATORS: This a list files contained in the package
+#: ../client/pk-console.c:563
+msgid "Package files"
+msgstr "Pakete-fitxategiak"
+
+#. TRANSLATORS: the percentage complete of the transaction
+#: ../client/pk-console.c:631
+msgid "Percentage"
+msgstr "Ehunekoa"
+
+#. TRANSLATORS: the status of the transaction (e.g. downloading)
+#: ../client/pk-console.c:649
+msgid "Status"
+msgstr "Egoera"
+
+#. TRANSLATORS: the results from the transaction
+#: ../client/pk-console.c:678
+msgid "Results:"
+msgstr "Emaitzak:"
+
+#. TRANSLATORS: we failed to get any results, which is pretty fatal in my book
+#: ../client/pk-console.c:685
+msgid "Fatal error"
+msgstr "Errore larria"
+
+#. TRANSLATORS: the user asked to update everything, but there is nothing that can be updated
+#: ../client/pk-console.c:701
+msgid "There are no packages to update."
+msgstr "Ez da paketerik eguneratu behar."
+
+#. TRANSLATORS: the transaction failed in a way we could not expect
+#: ../client/pk-console.c:704
+#: ../contrib/command-not-found/pk-command-not-found.c:639
+msgid "The transaction failed"
+msgstr "Transakzioak huts egin du"
+
+#. TRANSLATORS: print a message when there are no updates
+#: ../client/pk-console.c:733
+msgid "There are no updates available at this time."
+msgstr "Ez dago eguneraketarik uneotan."
+
+#: ../client/pk-console.c:756
+msgid "There are no upgrades available at this time."
+msgstr "Ez dago bertsio-berritzerik uneotan."
+
+#. TRANSLATORS: a package needs to restart their system
+#: ../client/pk-console.c:823
+msgid "Please restart the computer to complete the update."
+msgstr "Berrabiarazi ordenagailua eguneraketa osatzeko."
+
+#. TRANSLATORS: a package needs to restart the session
+#: ../client/pk-console.c:826
+msgid "Please logout and login to complete the update."
+msgstr "Amaitu saioa eta hasi saioa eguneraketa osatzeko."
+
+#. TRANSLATORS: a package needs to restart their system (due to security)
+#: ../client/pk-console.c:829
+msgid ""
+"Please restart the computer to complete the update as important security "
+"updates have been installed."
+msgstr "Berrabiarazi ordenagailua eguneraketa osatzeko, segurtasun-eguneraketa garrantzitsuak instalatu baitira."
+
+#. TRANSLATORS: a package needs to restart the session (due to security)
+#: ../client/pk-console.c:832
+msgid ""
+"Please logout and login to complete the update as important security updates "
+"have been installed."
+msgstr "Amaitu saioa eta hasi berriro saioa eguneraketa osatzeko, segurtasun-eguneraketa garrantzitsuak instalatu baitira."
+
+#. TRANSLATORS: The user used 'pkcon install dave.rpm' rather than 'pkcon install-local dave.rpm'
+#: ../client/pk-console.c:858
+#, c-format
+msgid ""
+"Expected package name, actually got file. Try using 'pkcon install-local %s' "
+"instead."
+msgstr "Pakete-izena espero zen, fitxategia eskuratu da. Saiatu  'pkcon install-local %s' erabiltzen."
+
+#. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
+#: ../client/pk-console.c:866
+#, c-format
+msgid "This tool could not find any available package: %s"
+msgstr "Tresna honek ez du aurkitu paketerik eskuragarri: %s"
+
+#. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
+#: ../client/pk-console.c:894
+#, c-format
+msgid "This tool could not find the installed package: %s"
+msgstr "Tresna honek ez du aurkitu instalatutako paketea: %s"
+
+#. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
+#: ../client/pk-console.c:922 ../client/pk-console.c:950
+#, c-format
+msgid "This tool could not find the package: %s"
+msgstr "Tresna honek ez du aurkitu paketea: %s"
+
+#. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
+#. TRANSLATORS: There was an error getting the dependencies for the package. The detailed error follows
+#. TRANSLATORS: There was an error getting the details about the package. The detailed error follows
+#. TRANSLATORS: The package name was not found in any software sources. The detailed error follows
+#: ../client/pk-console.c:978 ../client/pk-console.c:1006
+#: ../client/pk-console.c:1034 ../client/pk-console.c:1062
+#: ../client/pk-console.c:1090
+#, c-format
+msgid "This tool could not find all the packages: %s"
+msgstr "Tresna honek ez du aurkitu pakete guztiak: %s"
+
+#. TRANSLATORS: This is when the daemon crashed, and we are up shit creek without a paddle
+#: ../client/pk-console.c:1119
+msgid "The daemon crashed mid-transaction!"
+msgstr "Deabruak huts egin du transakzioaren erdian!"
+
+#. TRANSLATORS: This is the header to the --help menu
+#: ../client/pk-console.c:1153
+msgid "PackageKit Console Interface"
+msgstr "PackageKit-en kontsola-interfazea"
+
+#. these are commands we can use with pkcon
+#: ../client/pk-console.c:1155
+msgid "Subcommands:"
+msgstr "Azpikomandoak:"
+
+#. TRANSLATORS: we keep a database updated with the time that an action was last executed
+#: ../client/pk-console.c:1234
+msgid "Failed to get the time since this action was last completed"
+msgstr "Ezin izan da jakin ekintza hau azken aldiz egin zenetik igaro den denbora"
+
+#. TRANSLATORS: command line argument, just show the version string
+#: ../client/pk-console.c:1275 ../client/pk-monitor.c:371
+msgid "Show the program version and exit"
+msgstr "Erakutsi programaren bertsioa eta irten"
+
+#. TRANSLATORS: command line argument, use a filter to narrow down results
+#: ../client/pk-console.c:1278
+msgid "Set the filter, e.g. installed"
+msgstr "Ezarri iragazkia, adib. instalatua"
+
+#. TRANSLATORS: command line argument, use a non-standard install prefix
+#: ../client/pk-console.c:1281
+msgid "Set the install root, e.g. '/' or '/mnt/ltsp'"
+msgstr "Ezarri instalazio-erroa, adib. '/' edo '/mnt/ltsp'"
+
+#. TRANSLATORS: command line argument, work asynchronously
+#: ../client/pk-console.c:1284
+msgid "Exit without waiting for actions to complete"
+msgstr "Irten ekintzak osatu daitezen itxaron gabe"
+
+#. command line argument, do we ask questions
+#: ../client/pk-console.c:1287
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:525
+msgid "Install the packages without asking for confirmation"
+msgstr "Instalatu paketeak baieztapena eskatu gabe"
+
+#. TRANSLATORS: command line argument, this command is not a priority
+#: ../client/pk-console.c:1290
+msgid "Run the command using idle network bandwidth and also using less power"
+msgstr "Exekutatu komandoa banda-zabalera inaktiboa eta argindar gutxiago erabilita"
+
+#. TRANSLATORS: command line argument, just output without fancy formatting
+#: ../client/pk-console.c:1293
+msgid ""
+"Print to screen a machine readable output, rather than using animated widgets"
+msgstr "Idatzi pantailan makinak irakur dezakeen irteera, widget animatuak erabili ordez"
+
+#. TRANSLATORS: command line argument, just output without fancy formatting
+#: ../client/pk-console.c:1296
+msgid "The maximum metadata cache age. Use -1 for 'never'."
+msgstr "Metadata-katxearen adin maximoa. Erabili -1 'inoiz ez' adierazteko."
+
+#. TRANSLATORS: we failed to contact the daemon
+#: ../client/pk-console.c:1333
+msgid "Failed to contact PackageKit"
+msgstr "Ezin izan da PackageKit-ekin kontaktatau"
+
+#. TRANSLATORS: The user specified an incorrect filter
+#: ../client/pk-console.c:1381
+msgid "The proxy could not be set"
+msgstr "Ezin izan da proxy-a ezarri"
+
+#. TRANSLATORS: The user specified an incorrect filter
+#: ../client/pk-console.c:1393
+msgid "The install root could not be set"
+msgstr "Ezin izan da instalazio-erroa ezarri"
+
+#. TRANSLATORS: The user specified an incorrect filter
+#: ../client/pk-console.c:1405
+msgid "The filter specified was invalid"
+msgstr "Adierazitako iragazkia baliogabea da"
+
+#. TRANSLATORS: a search type can be name, details, file, etc
+#: ../client/pk-console.c:1424
+msgid "A search type is required, e.g. name"
+msgstr "Bilaketa-mota behar da, adib. izena"
+
+#. TRANSLATORS: the user needs to provide a search term
+#: ../client/pk-console.c:1431 ../client/pk-console.c:1443
+#: ../client/pk-console.c:1455 ../client/pk-console.c:1467
+msgid "A search term is required"
+msgstr "Bilaketa-hitza behar da"
+
+#. TRANSLATORS: the search type was provided, but invalid
+#: ../client/pk-console.c:1477
+msgid "Invalid search type"
+msgstr "Bilaketa-mota baliogabea"
+
+#. TRANSLATORS: the user did not specify what they wanted to install
+#: ../client/pk-console.c:1483
+msgid "A package name to install is required"
+msgstr "Pakete-izen bat behar da instalaziorako"
+
+#. TRANSLATORS: the user did not specify what they wanted to install
+#: ../client/pk-console.c:1492
+msgid "A filename to install is required"
+msgstr "Fitxategi-izen bat behar da instalaziorako"
+
+#. TRANSLATORS: geeky error, 99.9999% of users won't see this
+#: ../client/pk-console.c:1503
+msgid "A type, key_id and package_id are required"
+msgstr "Mota bat, key_id bat eta package_id bat behar dira"
+
+#. TRANSLATORS: the user did not specify what they wanted to remove
+#: ../client/pk-console.c:1514
+msgid "A package name to remove is required"
+msgstr "Pakete-izen bat behar da kendua izateko"
+
+#. TRANSLATORS: the user did not specify anything about what to download or where
+#: ../client/pk-console.c:1523
+msgid "A destination directory and the package names to download are required"
+msgstr "Helburu-direktorio bat eta pakete-izenak behar dira deskargarako"
+
+#. TRANSLATORS: the directory does not exist, so we can't continue
+#: ../client/pk-console.c:1530
+msgid "Directory not found"
+msgstr "Ez da direktorioa aurkitu"
+
+#. TRANSLATORS: geeky error, 99.9999% of users won't see this
+#: ../client/pk-console.c:1539
+msgid "A licence identifier (eula-id) is required"
+msgstr "Lizentzia-identifikatzaile bat (eula-id) behar da"
+
+#. TRANSLATORS: geeky error, 99.9999% of users won't see this
+#: ../client/pk-console.c:1550
+msgid "A transaction identifier (tid) is required"
+msgstr "Transakzio-identifikatzaile bat (tid) behar da"
+
+#. TRANSLATORS: The user did not specify a package name
+#: ../client/pk-console.c:1571
+msgid "A package name to resolve is required"
+msgstr "Pakete-izen bat behar da ebatzia izateko"
+
+#. TRANSLATORS: The user did not specify a repository (software source) name
+#: ../client/pk-console.c:1582 ../client/pk-console.c:1593
+msgid "A repository name is required"
+msgstr "Biltegi-izen bat behar da"
+
+#. TRANSLATORS: The user didn't provide any data
+#: ../client/pk-console.c:1604
+msgid "A repo name, parameter and value are required"
+msgstr "Biltegi-izen bat, parametro bat eta balio bat behar dira"
+
+#. TRANSLATORS: The user didn't specify what action to use
+#: ../client/pk-console.c:1621
+msgid "An action, e.g. 'update-system' is required"
+msgstr "Ekintza bat, adib. 'update-system', behar da"
+
+#. TRANSLATORS: The user specified an invalid action
+#: ../client/pk-console.c:1628
+msgid "A correct role is required"
+msgstr "Eginkizun zuzena behar da"
+
+#. TRANSLATORS: The user did not provide a package name
+#. TRANSLATORS: This is when the user fails to supply the package name
+#: ../client/pk-console.c:1638 ../client/pk-console.c:1652
+#: ../client/pk-console.c:1661 ../client/pk-console.c:1681
+#: ../client/pk-console.c:1690 ../client/pk-generate-pack.c:314
+msgid "A package name is required"
+msgstr "Pakete-izen bat behar da"
+
+#. TRANSLATORS: each package "provides" certain things, e.g. mime(gstreamer-decoder-mp3), the user didn't specify it
+#: ../client/pk-console.c:1670
+msgid "A package provide string is required"
+msgstr "Pakete-eskaintzaren kate bat behar da"
+
+#. TRANSLATORS: The user did not provide a distro name
+#: ../client/pk-console.c:1714
+msgid "A distribution name is required"
+msgstr "Banaketa-izen bat behar da"
+
+#. TRANSLATORS: The user did not provide an upgrade type
+#: ../client/pk-console.c:1720
+msgid "An upgrade type is required, e.g. 'minimal', 'default' or 'complete'"
+msgstr "Bertsio-berritze mota bat behar da, adib. 'minimal', 'default' edo 'complete'"
+
+#. TRANSLATORS: The user tried to use an unsupported option on the command line
+#: ../client/pk-console.c:1770
+#, c-format
+msgid "Option '%s' is not supported"
+msgstr "'%s' aukera ez dago onartuta"
+
+#. TRANSLATORS: Generic failure of what they asked to do
+#: ../client/pk-console.c:1780
+msgid "Command failed"
+msgstr "Komandoak huts egin du"
+
+#. TRANSLATORS: we can exclude certain packages (glibc) when we know they'll exist on the target
+#: ../client/pk-generate-pack.c:253
+msgid "Set the file name of dependencies to be excluded"
+msgstr "Ezarri baztertuko diren mendekotasunen fitxategi-izena"
+
+#. TRANSLATORS: the output location
+#: ../client/pk-generate-pack.c:256
+msgid "The output file or directory (the current directory is used if omitted)"
+msgstr "Irteera-fitxategia edo -direktorioa (uneko direktorioa erabiliko da ez bada ezer jartzen)"
+
+#. TRANSLATORS: put a list of packages in the pack
+#: ../client/pk-generate-pack.c:259
+msgid "The package to be put into the service pack"
+msgstr "Zerbitzu-paketean jarriko den paketea"
+
+#. TRANSLATORS: put all pending updates in the pack
+#: ../client/pk-generate-pack.c:262
+msgid "Put all updates available in the service pack"
+msgstr "Jarri eguneraketa guztiak eskuragarri zerbitzu-paketean"
+
+#. TRANSLATORS: This is when the user fails to supply the correct arguments
+#: ../client/pk-generate-pack.c:298
+msgid "Neither --package or --updates option selected."
+msgstr "Ez da ez --package ez --updates aukera hautatu."
+
+#. TRANSLATORS: This is when the user fails to supply just one argument
+#: ../client/pk-generate-pack.c:306
+msgid "Both options selected."
+msgstr "Bi aukerak hautatu dira."
+
+#. TRANSLATORS: This is when the user fails to supply the output
+#: ../client/pk-generate-pack.c:322
+msgid "A output directory or file name is required"
+msgstr "Irteerako direktorio edo fitxategi-izen bat behar da"
+
+#. TRANSLATORS: This is when the daemon is not-installed/broken and fails to startup
+#: ../client/pk-generate-pack.c:340
+msgid "The daemon failed to startup"
+msgstr "Ezin izan da deabrua abiarazi"
+
+#. TRANSLATORS: This is when the backend doesn't have the capability to get-depends
+#. TRANSLATORS: This is when the backend doesn't have the capability to download
+#: ../client/pk-generate-pack.c:351 ../client/pk-generate-pack.c:357
+msgid "The package manager cannot perform this type of operation."
+msgstr "Pakete-kudeatzaileak ezin du mota honetako eragiketarik egin."
+
+#. TRANSLATORS: This is when the distro didn't include libarchive support into PK
+#: ../client/pk-generate-pack.c:364
+msgid ""
+"Service packs cannot be created as PackageKit was not built with libarchive "
+"support."
+msgstr "Zerbitzu-paketeak ezin dira sortu, PackageKit ez baita eraiki libarchive-ren euskarriarekin."
+
+#. TRANSLATORS: the user specified an absolute path, but didn't get the extension correct
+#: ../client/pk-generate-pack.c:375
+msgid "If specifying a file, the service pack name must end with"
+msgstr "Fitxategi bat adierazten bada, zerbitzu-paketearen izenaren amaiera honek izan behar du:"
+
+#. TRANSLATORS: This is when file already exists
+#: ../client/pk-generate-pack.c:391
+msgid "A pack with the same name already exists, do you want to overwrite it?"
+msgstr "Jadanik existitzen da izen bera duen pakete bat, gainidatzi nahi al duzu?"
+
+#. TRANSLATORS: This is when the pack was not overwritten
+#: ../client/pk-generate-pack.c:394
+msgid "The pack was not overwritten."
+msgstr "Paketea ez da gainidatzi."
+
+#. TRANSLATORS: This is when the temporary directory cannot be created, the directory name follows
+#: ../client/pk-generate-pack.c:407
+msgid "Failed to create directory:"
+msgstr "Direktorioaren sorrerak huts egin du:"
+
+#. TRANSLATORS: This is when the list of packages from the remote computer cannot be opened
+#: ../client/pk-generate-pack.c:419
+msgid "Failed to open package list."
+msgstr "Ezin iza da pakete-zerrenda ireki."
+
+#. TRANSLATORS: The package name is being matched up to available packages
+#: ../client/pk-generate-pack.c:428
+msgid "Finding package name."
+msgstr "Pakete-izena bilatzen."
+
+#. TRANSLATORS: This is when the package cannot be found in any software source. The detailed error follows
+#: ../client/pk-generate-pack.c:432
+#, c-format
+msgid "Failed to find package '%s': %s"
+msgstr "Ezin izan da  '%s' paketea aurkitu: %s"
+
+#. TRANSLATORS: This is telling the user we are in the process of making the pack
+#: ../client/pk-generate-pack.c:440
+msgid "Creating service pack..."
+msgstr "Zerbitzu-paketea sortzen..."
+
+#. TRANSLATORS: we succeeded in making the file
+#: ../client/pk-generate-pack.c:455
+#, c-format
+msgid "Service pack created '%s'"
+msgstr "'%s' zerbitzu-paketea sortu da"
+
+#. TRANSLATORS: we failed to make te file
+#: ../client/pk-generate-pack.c:460
+#, c-format
+msgid "Failed to create '%s': %s"
+msgstr "Ezin izan da  '%s' sortu: %s"
+
+#: ../client/pk-monitor.c:284
+msgid "Failed to get daemon state"
+msgstr "Ezin izan da deabruaren egoera ezagutu"
+
+#: ../client/pk-monitor.c:349
+msgid "Failed to get properties"
+msgstr "Ezin izan da propietateak eskuratu"
+
+#. TRANSLATORS: this is a program that monitors PackageKit
+#: ../client/pk-monitor.c:387
+msgid "PackageKit Monitor"
+msgstr "PackageKit monitorea"
+
+#. TRANSLATORS: when we are getting data from the daemon
+#: ../contrib/browser-plugin/pk-plugin-install.c:499
+msgid "Getting package information..."
+msgstr "Pakete-informazioa eskuratzen..."
+
+#. TRANSLATORS: run an applicaiton
+#: ../contrib/browser-plugin/pk-plugin-install.c:505
+#, c-format
+msgid "Run %s"
+msgstr "Exekutatu %s"
+
+#. TRANSLATORS: show the installed version of a package
+#: ../contrib/browser-plugin/pk-plugin-install.c:511
+msgid "Installed version"
+msgstr "Instalatutako bertsioa"
+
+#. TRANSLATORS: run the application now
+#: ../contrib/browser-plugin/pk-plugin-install.c:519
+#, c-format
+msgid "Run version %s now"
+msgstr "Exekutatu %s bertsioa orain"
+
+#. TRANSLATORS: run the application now
+#: ../contrib/browser-plugin/pk-plugin-install.c:525
+msgid "Run now"
+msgstr "Exekutatu orain"
+
+#. TRANSLATORS: update to a new version of the package
+#: ../contrib/browser-plugin/pk-plugin-install.c:531
+#, c-format
+msgid "Update to version %s"
+msgstr "Eguneratu %s bertsiora"
+
+#. TRANSLATORS: To install a package
+#: ../contrib/browser-plugin/pk-plugin-install.c:537
+#, c-format
+msgid "Install %s now"
+msgstr "Instalatu %s orain"
+
+#. TRANSLATORS: the version of the package
+#: ../contrib/browser-plugin/pk-plugin-install.c:540
+msgid "Version"
+msgstr "Bertsioa"
+
+#. TRANSLATORS: noting found, so can't install
+#: ../contrib/browser-plugin/pk-plugin-install.c:545
+msgid "No packages found for your system"
+msgstr "Ez da paketerik aurkitu zure sisteman"
+
+#. TRANSLATORS: package is being installed
+#: ../contrib/browser-plugin/pk-plugin-install.c:550
+msgid "Installing..."
+msgstr "Instalatzen..."
+
+#. TRANSLATORS: downloading repo data so we can search
+#: ../contrib/command-not-found/pk-command-not-found.c:366
+msgid "Downloading details about the software sources."
+msgstr "Software-jatorriei buruzko xehetasunak deskargatzen."
+
+#. TRANSLATORS: downloading file lists so we can search
+#: ../contrib/command-not-found/pk-command-not-found.c:370
+msgid "Downloading filelists (this may take some time to complete)."
+msgstr "Fitxategi-zerrendak deskargatzen (honek denbora pixka bat behar izan dezake)."
+
+#. TRANSLATORS: waiting for native lock
+#: ../contrib/command-not-found/pk-command-not-found.c:374
+msgid "Waiting for package manager lock."
+msgstr "Itxaroten pakete-kudeatzailearen blokeoa."
+
+#. TRANSLATORS: loading package cache so we can search
+#: ../contrib/command-not-found/pk-command-not-found.c:378
+msgid "Loading list of packages."
+msgstr "Paketeen zerrenda kargatzen."
+
+#. TRANSLATORS: we failed to find the package, this shouldn't happen
+#: ../contrib/command-not-found/pk-command-not-found.c:444
+msgid "Failed to search for file"
+msgstr "Fitxategiaren bilaketak huts egin du"
+
+#. TRANSLATORS: the transaction failed in a way we could not expect
+#: ../contrib/command-not-found/pk-command-not-found.c:456
+msgid "Getting the list of files failed"
+msgstr "Huts egin duten fitxategien zerrenda eskuratzen"
+
+#. TRANSLATORS: we failed to launch the executable, the error follows
+#: ../contrib/command-not-found/pk-command-not-found.c:602
+msgid "Failed to launch:"
+msgstr "Abioak huts egin du:"
+
+#. TRANSLATORS: we failed to install the package
+#: ../contrib/command-not-found/pk-command-not-found.c:630
+msgid "Failed to install packages"
+msgstr "Paketeen instalazioak huts egin du"
+
+#. TRANSLATORS: tool that gets called when the command is not found
+#: ../contrib/command-not-found/pk-command-not-found.c:706
+msgid "PackageKit Command Not Found"
+msgstr "Ez da aurkitu PackageKit komandoa"
+
+#. TRANSLATORS: the prefix of all the output telling the user
+#. * why it's not executing. NOTE: this is lowercase to mimic
+#. * the style of bash itself -- apologies
+#: ../contrib/command-not-found/pk-command-not-found.c:739
+msgid "command not found"
+msgstr "ez da komandoa aurkitu"
+
+#. TRANSLATORS: tell the user what we think the command is
+#: ../contrib/command-not-found/pk-command-not-found.c:757
+msgid "Similar command is:"
+msgstr "Antzeko komandoa:"
+
+#. TRANSLATORS: Ask the user if we should run the similar command
+#: ../contrib/command-not-found/pk-command-not-found.c:771
+msgid "Run similar command:"
+msgstr "Exekutatu antzeko komandoa:"
+
+#. TRANSLATORS: show the user a list of commands that they could have meant
+#. TRANSLATORS: show the user a list of commands we could run
+#: ../contrib/command-not-found/pk-command-not-found.c:785
+#: ../contrib/command-not-found/pk-command-not-found.c:794
+msgid "Similar commands are:"
+msgstr "Antzeko komandoak:"
+
+#. TRANSLATORS: ask the user to choose a file to run
+#: ../contrib/command-not-found/pk-command-not-found.c:801
+msgid "Please choose a command to run"
+msgstr "Hautatu exekutatuko den komandoa"
+
+#. TRANSLATORS: tell the user what package provides the command
+#: ../contrib/command-not-found/pk-command-not-found.c:819
+msgid "The package providing this file is:"
+msgstr "Fitxategi honetaz hornitzen duen paketea hau da:"
+
+#. TRANSLATORS: as the user if we want to install a package to provide the command
+#: ../contrib/command-not-found/pk-command-not-found.c:826
+#, c-format
+msgid "Install package '%s' to provide command '%s'?"
+msgstr "Instalatu  '%s' paketea  '%s' komandoaz hornitzeko?"
+
+#. TRANSLATORS: Show the user a list of packages that provide this command
+#: ../contrib/command-not-found/pk-command-not-found.c:853
+msgid "Packages providing this file are:"
+msgstr "Fitxategi honetaz hornitzen duten paketeak hauek dira:"
+
+#. TRANSLATORS: Show the user a list of packages that they can install to provide this command
+#: ../contrib/command-not-found/pk-command-not-found.c:863
+msgid "Suitable packages are:"
+msgstr "Pakete egokiak hauek dira:"
+
+#. get selection
+#. TRANSLATORS: ask the user to choose a file to install
+#: ../contrib/command-not-found/pk-command-not-found.c:872
+msgid "Please choose a package to install"
+msgstr "Hautatu instalatuko den paketea"
+
+#. TRANSLATORS: we are starting to install the packages
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:195
+msgid "Starting install"
+msgstr "Instalazioa abiarazten"
+
+#. TRANSLATORS: we couldn't find the package name, non-fatal
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:407
+#, c-format
+msgid "Failed to find the package %s, or already installed: %s"
+msgstr "Ez da %s paketea aurkitu, edo jadanik instalatuta dago: %s"
+
+#. command line argument, simulate what would be done, but don't actually do it
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:516
+msgid ""
+"Don't actually install any packages, only simulate what would be installed"
+msgstr "Ez instalatu paketerik, instalatuko dela simulatu soilik"
+
+#. command line argument, do we skip packages that depend on the ones specified
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:519
+msgid "Do not install dependencies of the core packages"
+msgstr "Ez instalatu oinarrizko paketeen mendekotasunak"
+
+#. command line argument, do we operate quietly
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:522
+msgid "Do not display information or progress"
+msgstr "Ez erakutsi ez informaziorik ez aurrerapenik"
+
+#. TRANSLATORS: tool that gets called when the command is not found
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:540
+msgid "PackageKit Debuginfo Installer"
+msgstr "PackageKit-en arazketa-informazioko instalatzailea"
+
+#. TRANSLATORS: the use needs to specify a list of package names on the command line
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:554
+#, c-format
+msgid "ERROR: Specify package names to install."
+msgstr "ERROREA: Adierazi instalatuko diren paketeen izenak."
+
+#. TRANSLATORS: we are getting the list of repositories
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:590
+#, c-format
+msgid "Getting sources list"
+msgstr "Jatorri-zerrendak eskuratzen"
+
+#. TRANSLATORS: operation was not successful
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:600
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:675
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:759
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:803
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:870
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:914
+msgid "FAILED."
+msgstr "HUTS EGIN DU."
+
+#. TRANSLATORS: all completed 100%
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:615
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:655
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:690
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:774
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:818
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:885
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:929
+#, c-format
+msgid "OK."
+msgstr "OK."
+
+#. TRANSLATORS: tell the user what we found
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:618
+#, c-format
+msgid "Found %i enabled and %i disabled sources."
+msgstr "Gaitutako %i eta desgaitutako %i jatorri aurkitu dira."
+
+#. TRANSLATORS: we're finding repositories that match out pattern
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:625
+#, c-format
+msgid "Finding debugging sources"
+msgstr "Arazketa-jatorriak bilatzen"
+
+#. TRANSLATORS: tell the user what we found
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:658
+#, c-format
+msgid "Found %i disabled debuginfo repos."
+msgstr "Desgaitutako %i arazketa-biltegi aurkitu dira."
+
+#. TRANSLATORS: we're now enabling all the debug sources we found
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:665
+#, c-format
+msgid "Enabling debugging sources"
+msgstr "Arazketa-jatorriak gaitzen"
+
+#. TRANSLATORS: tell the user how many we enabled
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:693
+#, c-format
+msgid "Enabled %i debugging sources."
+msgstr "%i arazketa-jatorri gaitu da."
+
+#. TRANSLATORS: we're now finding packages that match in all the repos
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:700
+#, c-format
+msgid "Finding debugging packages"
+msgstr "Arazketa-paketeak bilatzen"
+
+#. TRANSLATORS: we couldn't find the package name, non-fatal
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:712
+#, c-format
+msgid "Failed to find the package %s: %s"
+msgstr "Ez da %s paketea aurkitu: %s"
+
+#. TRANSLATORS: we couldn't find the debuginfo package name, non-fatal
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:735
+#, c-format
+msgid "Failed to find the debuginfo package %s: %s"
+msgstr "Ez da %s arazketa-paketea aurkitu: %s"
+
+#. TRANSLATORS: no debuginfo packages could be found to be installed
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:763
+#, c-format
+msgid "Found no packages to install."
+msgstr "Ez da instalatzeko paketerik aurkitu."
+
+#. TRANSLATORS: tell the user we found some packages, and then list them
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:777
+#, c-format
+msgid "Found %i packages:"
+msgstr "%i pakete aurkitu dira:"
+
+#. TRANSLATORS: tell the user we are searching for deps
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:793
+#, c-format
+msgid "Finding packages that depend on these packages"
+msgstr "Pakete hauen mendekoak diren paketeak bilatzen"
+
+#. TRANSLATORS: could not install, detailed error follows
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:806
+#, c-format
+msgid "Could not find dependant packages: %s"
+msgstr "Ez da mendeko paketerik aurkitu: %s"
+
+#. TRANSLATORS: tell the user we found some more packages
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:822
+#, c-format
+msgid "Found %i extra packages."
+msgstr "%i pakete gehigarri aurkitu dira."
+
+#. TRANSLATORS: tell the user we found some more packages
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:826
+#, c-format
+msgid "No extra packages required."
+msgstr "Ez da pakete gehigarririk behar."
+
+#. TRANSLATORS: tell the user we found some packages (and deps), and then list them
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:835
+#, c-format
+msgid "Found %i packages to install:"
+msgstr "Instalatzeko %i pakete aurkitu dira:"
+
+#. TRANSLATORS: simulate mode is a testing mode where we quit before the action
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:848
+#, c-format
+msgid "Not installing packages in simulate mode"
+msgstr "Paketeak ez instalatzen simulazio-moduan"
+
+#. TRANSLATORS: we are now installing the debuginfo packages we found earlier
+#. TRANSLATORS: transaction state, installing packages
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:860
+#: ../lib/packagekit-glib2/pk-console-shared.c:287
+#, c-format
+msgid "Installing packages"
+msgstr "Paketeak instalatzen"
+
+#. TRANSLATORS: could not install, detailed error follows
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:873
+#, c-format
+msgid "Could not install packages: %s"
+msgstr "Ezin dira paketeak instalatu: %s"
+
+#. TRANSLATORS: we are now disabling all debuginfo repos we previously enabled
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:905
+#, c-format
+msgid "Disabling sources previously enabled"
+msgstr "Aurretiaz gaitutako jatorriak desgaitzen"
+
+#. TRANSLATORS: no debuginfo packages could be found to be installed, detailed error follows
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:917
+#, c-format
+msgid "Could not disable the debugging sources: %s"
+msgstr "Ezin dira arazketa-jatorriak desgaitu: %s"
+
+#. TRANSLATORS: we disabled all the debugging repos that we enabled before
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:932
+#, c-format
+msgid "Disabled %i debugging sources."
+msgstr "%i arazketa-jatorri desgaitu dira."
+
+#. TRANSLATORS: couldn't open device to write
+#: ../contrib/device-rebind/pk-device-rebind.c:62
+msgid "Failed to open file"
+msgstr "Ezin da fitxategia ireki"
+
+#. TRANSLATORS: could not write to the device
+#: ../contrib/device-rebind/pk-device-rebind.c:71
+msgid "Failed to write to the file"
+msgstr "Ezin da fitxategia idatzi"
+
+#. TRANSLATORS: we failed to release the current driver
+#: ../contrib/device-rebind/pk-device-rebind.c:111
+#: ../contrib/device-rebind/pk-device-rebind.c:148
+msgid "Failed to write to device"
+msgstr "Ezin da gailuan idatzi"
+
+#. TRANSLATORS: the device could not be found in sysfs
+#: ../contrib/device-rebind/pk-device-rebind.c:176
+msgid "Device could not be found"
+msgstr "Ezin da gailua aurkitu"
+
+#. TRANSLATORS: we failed to release the current driver
+#: ../contrib/device-rebind/pk-device-rebind.c:203
+msgid "Failed to unregister driver"
+msgstr "Ezin da kontrolagailuaren erregistroa ezabatu"
+
+#. TRANSLATORS: we failed to bind the old driver
+#: ../contrib/device-rebind/pk-device-rebind.c:212
+msgid "Failed to register driver"
+msgstr "Kontrolagailuaren erregistroak huts egin du"
+
+#. TRANSLATORS: user did not specify a device sysfs path that exists
+#: ../contrib/device-rebind/pk-device-rebind.c:261
+msgid "Device path not found"
+msgstr "Ez da aurkitu gailuaren bide-izena"
+
+#. TRANSLATORS: user did not specify a valid device sysfs path
+#: ../contrib/device-rebind/pk-device-rebind.c:269
+msgid "Incorrect device path specified"
+msgstr "Gailuaren bide-izena ez da zuzena"
+
+#: ../contrib/device-rebind/pk-device-rebind.c:294
+msgid "Show extra debugging information"
+msgstr "Erakutsi arazketa-informazio gehigarria"
+
+#. command line argument, simulate what would be done, but don't actually do it
+#: ../contrib/device-rebind/pk-device-rebind.c:297
+msgid "Don't actually touch the hardware, only simulate what would be done"
+msgstr "Ez ukitu hardwarea, soilik simulatu zer egingo litzatekeen"
+
+#. TRANSLATORS: command line option: a list of files to install
+#: ../contrib/device-rebind/pk-device-rebind.c:300
+msgid "Device paths"
+msgstr "Gailuen bide-izenak"
+
+#. TRANSLATORS: tool that gets called when the device needs reloading after installing firmware
+#: ../contrib/device-rebind/pk-device-rebind.c:315
+msgid "PackageKit Device Reloader"
+msgstr "PackageKit-en gailu-birkargatzailea"
+
+#. TRANSLATORS: user did not specify a valid device sysfs path
+#: ../contrib/device-rebind/pk-device-rebind.c:323
+msgid "You need to specify at least one valid device path"
+msgstr "Gutxienez gailu baten baliozko bide-izen bat adierazi behar duzu"
+
+#. TRANSLATORS: user did not specify a valid device sysfs path
+#: ../contrib/device-rebind/pk-device-rebind.c:333
+msgid "This script can only be used by the root user"
+msgstr "Script hau erro-erabiltzaileak soilik erabil dezake"
+
+#. TRANSLATORS: we're going to verify the path first
+#: ../contrib/device-rebind/pk-device-rebind.c:342
+msgid "Verifying device path"
+msgstr "Gailuaren bide-izena egiaztatzen"
+
+#. TRANSLATORS: user did not specify a device sysfs path that exists
+#: ../contrib/device-rebind/pk-device-rebind.c:347
+msgid "Failed to verify device path"
+msgstr "Ezin izan da gailuaren bide-izena egiaztatu"
+
+#. TRANSLATORS: we're going to try
+#: ../contrib/device-rebind/pk-device-rebind.c:361
+msgid "Attempting to rebind device"
+msgstr "Gailua berrezartzen saiatzen"
+
+#. TRANSLATORS: we failed to release the current driver
+#: ../contrib/device-rebind/pk-device-rebind.c:366
+msgid "Failed to rebind device"
+msgstr "Gailuaren berrezarpenak huts egin du"
+
+#: ../data/packagekit-catalog.xml.in.h:1
+msgid "PackageKit Catalog"
+msgstr "PackageKit katalogoa"
+
+#: ../data/packagekit-package-list.xml.in.h:1
+msgid "PackageKit Package List"
+msgstr "PackageKit pakete-zerrenda"
+
+#: ../data/packagekit-servicepack.xml.in.h:1
+msgid "PackageKit Service Pack"
+msgstr "PackageKit zerbitzu-paketea"
+
+#: ../lib/packagekit-glib2/pk-console-shared.c:63
+#, c-format
+msgid "Please enter a number from 1 to %i: "
+msgstr "Sartu 1etik %i-(e)ra arteko zenbaki bat: "
+
+#. TRANSLATORS: more than one package could be found that matched, to follow is a list of possible packages
+#: ../lib/packagekit-glib2/pk-console-shared.c:189
+msgid "More than one package matches:"
+msgstr "Pakete bat baino gehiago dator bat:"
+
+#. TRANSLATORS: This finds out which package in the list to use
+#: ../lib/packagekit-glib2/pk-console-shared.c:200
+msgid "Please choose the correct package: "
+msgstr "Hautatu pakete zuzena: "
+
+#. TRANSLATORS: This is when the transaction status is not known
+#: ../lib/packagekit-glib2/pk-console-shared.c:255
+msgid "Unknown state"
+msgstr "Egoera ezezaguna"
+
+#. TRANSLATORS: transaction state, the daemon is in the process of starting
+#: ../lib/packagekit-glib2/pk-console-shared.c:259
+msgid "Starting"
+msgstr "Abiarazten"
+
+#. TRANSLATORS: transaction state, the transaction is waiting for another to complete
+#: ../lib/packagekit-glib2/pk-console-shared.c:263
+msgid "Waiting in queue"
+msgstr "Ilaran itxaroten"
+
+#. TRANSLATORS: transaction state, just started
+#: ../lib/packagekit-glib2/pk-console-shared.c:267
+msgid "Running"
+msgstr "Exekutatzen"
+
+#. TRANSLATORS: transaction state, is querying data
+#: ../lib/packagekit-glib2/pk-console-shared.c:271
+msgid "Querying"
+msgstr "Kontsultatzen"
+
+#. TRANSLATORS: transaction state, getting data from a server
+#: ../lib/packagekit-glib2/pk-console-shared.c:275
+msgid "Getting information"
+msgstr "Informazioa eskuratzen"
+
+#. TRANSLATORS: transaction state, removing packages
+#: ../lib/packagekit-glib2/pk-console-shared.c:279
+msgid "Removing packages"
+msgstr "Paketeak kentzen"
+
+#. TRANSLATORS: transaction state, downloading package files
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:283
+#: ../lib/packagekit-glib2/pk-console-shared.c:661
+msgid "Downloading packages"
+msgstr "Paketeak deskargatzen"
+
+#. TRANSLATORS: transaction state, refreshing internal lists
+#: ../lib/packagekit-glib2/pk-console-shared.c:291
+msgid "Refreshing software list"
+msgstr "Software-zerrenda freskatzen"
+
+#. TRANSLATORS: transaction state, installing updates
+#: ../lib/packagekit-glib2/pk-console-shared.c:295
+msgid "Installing updates"
+msgstr "Eguneraketak instalatzen"
+
+#. TRANSLATORS: transaction state, removing old packages, and cleaning config files
+#: ../lib/packagekit-glib2/pk-console-shared.c:299
+msgid "Cleaning up packages"
+msgstr "Paketeak garbitzen"
+
+#. TRANSLATORS: transaction state, obsoleting old packages
+#: ../lib/packagekit-glib2/pk-console-shared.c:303
+msgid "Obsoleting packages"
+msgstr "Paketeak zaharkitzen"
+
+#. TRANSLATORS: transaction state, checking the transaction before we do it
+#: ../lib/packagekit-glib2/pk-console-shared.c:307
+msgid "Resolving dependencies"
+msgstr "Mendekotasunak konpontzen"
+
+#. TRANSLATORS: transaction state, checking if we have all the security keys for the operation
+#: ../lib/packagekit-glib2/pk-console-shared.c:311
+msgid "Checking signatures"
+msgstr "Sinadurak egiaztatzen"
+
+#. TRANSLATORS: transaction state, when we return to a previous system state
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:315
+#: ../lib/packagekit-glib2/pk-console-shared.c:621
+msgid "Rolling back"
+msgstr "Aurreko transakzio batera itzultzen"
+
+#. TRANSLATORS: transaction state, when we're doing a test transaction
+#: ../lib/packagekit-glib2/pk-console-shared.c:319
+msgid "Testing changes"
+msgstr "Aldaketak probatzen"
+
+#. TRANSLATORS: transaction state, when we're writing to the system package database
+#: ../lib/packagekit-glib2/pk-console-shared.c:323
+msgid "Committing changes"
+msgstr "Aldaketak aplikatzen"
+
+#. TRANSLATORS: transaction state, requesting data from a server
+#: ../lib/packagekit-glib2/pk-console-shared.c:327
+msgid "Requesting data"
+msgstr "Datuak eskatzen"
+
+#. TRANSLATORS: transaction state, all done!
+#: ../lib/packagekit-glib2/pk-console-shared.c:331
+msgid "Finished"
+msgstr "Amaitua"
+
+#. TRANSLATORS: transaction state, in the process of cancelling
+#: ../lib/packagekit-glib2/pk-console-shared.c:335
+msgid "Cancelling"
+msgstr "Uzten"
+
+#. TRANSLATORS: transaction state, downloading metadata
+#: ../lib/packagekit-glib2/pk-console-shared.c:339
+msgid "Downloading repository information"
+msgstr "Biltegi-informazioa deskargatzen"
+
+#. TRANSLATORS: transaction state, downloading metadata
+#: ../lib/packagekit-glib2/pk-console-shared.c:343
+msgid "Downloading list of packages"
+msgstr "Pakete-zerrenda deskargatzen"
+
+#. TRANSLATORS: transaction state, downloading metadata
+#: ../lib/packagekit-glib2/pk-console-shared.c:347
+msgid "Downloading file lists"
+msgstr "Fitxategi-zerrendak deskargatzen"
+
+#. TRANSLATORS: transaction state, downloading metadata
+#: ../lib/packagekit-glib2/pk-console-shared.c:351
+msgid "Downloading lists of changes"
+msgstr "Aldaketa-zerrenda deskargatzen"
+
+#. TRANSLATORS: transaction state, downloading metadata
+#: ../lib/packagekit-glib2/pk-console-shared.c:355
+msgid "Downloading groups"
+msgstr "Taldeak deskargatzen"
+
+#. TRANSLATORS: transaction state, downloading metadata
+#: ../lib/packagekit-glib2/pk-console-shared.c:359
+msgid "Downloading update information"
+msgstr "Eguneraketa-informazioa deskargatzen"
+
+#. TRANSLATORS: transaction state, repackaging delta files
+#: ../lib/packagekit-glib2/pk-console-shared.c:363
+msgid "Repackaging files"
+msgstr "Fitxategiak berriro paketatzen"
+
+#. TRANSLATORS: transaction state, loading databases
+#: ../lib/packagekit-glib2/pk-console-shared.c:367
+msgid "Loading cache"
+msgstr "Katxea kargatzen"
+
+#. TRANSLATORS: transaction state, scanning for running processes
+#: ../lib/packagekit-glib2/pk-console-shared.c:371
+msgid "Scanning applications"
+msgstr "Aplikazioak eskaneatzen"
+
+#. TRANSLATORS: transaction state, generating a list of packages installed on the system
+#: ../lib/packagekit-glib2/pk-console-shared.c:375
+msgid "Generating package lists"
+msgstr "Pakete-zerrenda sortzen"
+
+#. TRANSLATORS: transaction state, when we're waiting for the native tools to exit
+#: ../lib/packagekit-glib2/pk-console-shared.c:379
+msgid "Waiting for package manager lock"
+msgstr "Pakete-kudeatzailearen blokeoa itxaroten"
+
+#. TRANSLATORS: transaction state, waiting for user to type in a password
+#: ../lib/packagekit-glib2/pk-console-shared.c:383
+msgid "Waiting for authentication"
+msgstr "Autentifikaziorako itxaroten"
+
+#. TRANSLATORS: transaction state, we are updating the list of processes
+#: ../lib/packagekit-glib2/pk-console-shared.c:387
+msgid "Updating running applications"
+msgstr "Abioan dauden aplikazioak eguneratzen"
+
+#. TRANSLATORS: transaction state, we are checking executable files currently in use
+#: ../lib/packagekit-glib2/pk-console-shared.c:391
+msgid "Checking applications in use"
+msgstr "Abioan dauden aplikazioak egiaztatzen"
+
+#. TRANSLATORS: transaction state, we are checking for libraries currently in use
+#: ../lib/packagekit-glib2/pk-console-shared.c:395
+msgid "Checking libraries in use"
+msgstr "Erabiltzen ari diren liburutegiak egiaztatzen"
+
+#. TRANSLATORS: transaction state, we are copying package files before or after the transaction
+#: ../lib/packagekit-glib2/pk-console-shared.c:399
+msgid "Copying files"
+msgstr "Fitxategiak kopiatzen"
+
+#. TRANSLATORS: The type of update
+#: ../lib/packagekit-glib2/pk-console-shared.c:417
+msgid "Trivial"
+msgstr "Arina"
+
+#. TRANSLATORS: The type of update
+#: ../lib/packagekit-glib2/pk-console-shared.c:421
+msgid "Normal"
+msgstr "Normala"
+
+#. TRANSLATORS: The type of update
+#: ../lib/packagekit-glib2/pk-console-shared.c:425
+msgid "Important"
+msgstr "Garrantzitsua"
+
+#. TRANSLATORS: The type of update
+#: ../lib/packagekit-glib2/pk-console-shared.c:429
+msgid "Security"
+msgstr "Segurtasuna"
+
+#. TRANSLATORS: The type of update
+#: ../lib/packagekit-glib2/pk-console-shared.c:433
+msgid "Bug fix "
+msgstr "Akats-konponketa "
+
+#. TRANSLATORS: The type of update
+#: ../lib/packagekit-glib2/pk-console-shared.c:437
+msgid "Enhancement"
+msgstr "Hobekuntza"
+
+#. TRANSLATORS: The type of update
+#: ../lib/packagekit-glib2/pk-console-shared.c:441
+msgid "Blocked"
+msgstr "Blokeatua"
+
+#. TRANSLATORS: The state of a package
+#. TRANSLATORS: The action of the package, in past tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:446
+#: ../lib/packagekit-glib2/pk-console-shared.c:519
+msgid "Installed"
+msgstr "Instalatua"
+
+#. TRANSLATORS: The state of a package, i.e. not installed
+#: ../lib/packagekit-glib2/pk-console-shared.c:451
+msgid "Available"
+msgstr "Eskuragarri"
+
+#. TRANSLATORS: The action of the package, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:469
+msgid "Downloading"
+msgstr "Deskargatzen"
+
+#. TRANSLATORS: The action of the package, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:473
+msgid "Updating"
+msgstr "Eguneratzen"
+
+#. TRANSLATORS: The action of the package, in present tense
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:477
+#: ../lib/packagekit-glib2/pk-console-shared.c:597
+msgid "Installing"
+msgstr "Instalatzen"
+
+#. TRANSLATORS: The action of the package, in present tense
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:481
+#: ../lib/packagekit-glib2/pk-console-shared.c:593
+msgid "Removing"
+msgstr "Kentzen"
+
+#. TRANSLATORS: The action of the package, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:485
+msgid "Cleaning up"
+msgstr "Garbitzen"
+
+#. TRANSLATORS: The action of the package, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:489
+msgid "Obsoleting"
+msgstr "Zaharkitutzat hartzen"
+
+#. TRANSLATORS: The action of the package, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:493
+msgid "Reinstalling"
+msgstr "Berriro instalatzen"
+
+#. TRANSLATORS: The action of the package, in past tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:511
+msgid "Downloaded"
+msgstr "Deskargatua"
+
+#. TRANSLATORS: The action of the package, in past tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:523
+msgid "Removed"
+msgstr "Kendua"
+
+#. TRANSLATORS: The action of the package, in past tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:527
+msgid "Cleaned up"
+msgstr "Garbitua"
+
+#. TRANSLATORS: The action of the package, in past tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:531
+msgid "Obsoleted"
+msgstr "Zaharkitua"
+
+#. TRANSLATORS: The action of the package, in past tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:535
+msgid "Reinstalled"
+msgstr "Berrinstalatua"
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:553
+msgid "Unknown role type"
+msgstr "Eginkizun-mota ezezaguna"
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:557
+msgid "Getting dependencies"
+msgstr "Mendekotasunak eskuratzen"
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:561
+msgid "Getting update details"
+msgstr "Eguneraketa-xehetasunak eskuratzen"
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:565
+msgid "Getting details"
+msgstr "Xehetasunak eskuratzen"
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:569
+msgid "Getting requires"
+msgstr "Betebeharrak eskuratzen"
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:573
+msgid "Getting updates"
+msgstr "Eguneraketak eskuratzen"
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:577
+msgid "Searching by details"
+msgstr "Xehetasunen arabera bilatzen"
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:581
+msgid "Searching by file"
+msgstr "Fitxategien arabera bilatzen"
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:585
+msgid "Searching groups"
+msgstr "Taldeetan bilaketak egiten"
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:589
+msgid "Searching by name"
+msgstr "Izenaren arabera bilatzen"
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:601
+msgid "Installing files"
+msgstr "Fitxategiak instalatzen"
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:605
+msgid "Refreshing cache"
+msgstr "Katxea freskatzen"
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:609
+msgid "Updating packages"
+msgstr "Paketeak eguneratzen"
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:613
+msgid "Updating system"
+msgstr "Sistema eguneratzen"
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:617
+msgid "Canceling"
+msgstr "Uzten"
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:625
+msgid "Getting repositories"
+msgstr "Biltegiak eskuratzen"
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:629
+msgid "Enabling repository"
+msgstr "Biltegia gaitzen"
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:633
+msgid "Setting data"
+msgstr "Data ezartzen"
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:637
+msgid "Resolving"
+msgstr "Ebazten"
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:641
+msgid "Getting file list"
+msgstr "Fitxategi-zerrenda eskuratzen"
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:645
+msgid "Getting provides"
+msgstr "Hornitzaileak eskuratzen"
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:649
+msgid "Installing signature"
+msgstr "Sinadura instalatzen"
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:653
+msgid "Getting packages"
+msgstr "Paketeak eskuratzen"
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:657
+msgid "Accepting EULA"
+msgstr "EULA onartzen"
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:665
+msgid "Getting upgrades"
+msgstr "Bertsio-berritzeak eskuratzen"
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:669
+msgid "Getting categories"
+msgstr "Kategoriak eskuratzen"
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:673
+msgid "Getting transactions"
+msgstr "Transakzioak eskuratzen"
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:677
+#: ../lib/packagekit-glib2/pk-console-shared.c:681
+msgid "Simulating install"
+msgstr "Instalazioa simulatzen"
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:685
+msgid "Simulating remove"
+msgstr "Kentzea simulatzen"
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:689
+msgid "Simulating update"
+msgstr "Eguneraketa simulatzen"
+
+#. TRANSLATORS: turn on all debugging
+#: ../lib/packagekit-glib2/pk-debug.c:133
+msgid "Show debugging information for all files"
+msgstr "Erakutsi fitxategi guztien arazketa-informazioa"
+
+#: ../lib/packagekit-glib2/pk-debug.c:201
+msgid "Debugging Options"
+msgstr "Arazketa-aukerak"
+
+#: ../lib/packagekit-glib2/pk-debug.c:201
+msgid "Show debugging options"
+msgstr "Erakutsi arazketa-aukerak"
+
+#. TRANSLATORS: ask the user if they are comfortable installing insecure packages
+#: ../lib/packagekit-glib2/pk-task-text.c:67
+msgid "Do you want to allow installing of unsigned software?"
+msgstr "Sinatu gabeko softwarea instala dadin baimendu nahi duzu?"
+
+#. TRANSLATORS: tell the user we've not done anything
+#: ../lib/packagekit-glib2/pk-task-text.c:72
+msgid "The unsigned software will not be installed."
+msgstr "Sinatu gabeko softwarea ez da instalatuko."
+
+#. TRANSLATORS: the package repository is signed by a key that is not recognised
+#: ../lib/packagekit-glib2/pk-task-text.c:121
+msgid "Software source signature required"
+msgstr "Software-jatorriaren sinadura behar da"
+
+#. TRANSLATORS: the package repository name
+#: ../lib/packagekit-glib2/pk-task-text.c:127
+msgid "Software source name"
+msgstr "Software-jatorriaren izena"
+
+#. TRANSLATORS: the key URL
+#: ../lib/packagekit-glib2/pk-task-text.c:130
+msgid "Key URL"
+msgstr "Gako URLa"
+
+#. TRANSLATORS: the username of the key
+#: ../lib/packagekit-glib2/pk-task-text.c:133
+msgid "Key user"
+msgstr "Gako erabiltzailea"
+
+#. TRANSLATORS: the key ID, usually a few hex digits
+#: ../lib/packagekit-glib2/pk-task-text.c:136
+msgid "Key ID"
+msgstr "Gako IDa"
+
+#. TRANSLATORS: the key fingerprint, again, yet more hex
+#: ../lib/packagekit-glib2/pk-task-text.c:139
+msgid "Key fingerprint"
+msgstr "Gako hatz-marka"
+
+#. TRANSLATORS: the timestamp (a bit like a machine readable time)
+#: ../lib/packagekit-glib2/pk-task-text.c:142
+msgid "Key Timestamp"
+msgstr "Gako data-zigilua"
+
+#. TRANSLATORS: ask the user if they want to import
+#: ../lib/packagekit-glib2/pk-task-text.c:155
+msgid "Do you accept this signature?"
+msgstr "Onartzen al duzu sinadura hau?"
+
+#. TRANSLATORS: tell the user we've not done anything
+#: ../lib/packagekit-glib2/pk-task-text.c:160
+msgid "The signature was not accepted."
+msgstr "Sinadura ez da onartu."
+
+#. TRANSLATORS: this is another name for a software licence that has to be read before installing
+#: ../lib/packagekit-glib2/pk-task-text.c:203
+msgid "End user licence agreement required"
+msgstr "Azken erabiltzailearen lizentzia-kontratua behar da"
+
+#. TRANSLATORS: the EULA text itself (long and boring)
+#: ../lib/packagekit-glib2/pk-task-text.c:212
+msgid "Agreement"
+msgstr "Lizentzia-kontratua"
+
+#. TRANSLATORS: ask the user if they've read and accepted the EULA
+#: ../lib/packagekit-glib2/pk-task-text.c:221
+msgid "Do you accept this agreement?"
+msgstr "Onartzen al duzu kontratu hau?"
+
+#. TRANSLATORS: tell the user we've not done anything
+#: ../lib/packagekit-glib2/pk-task-text.c:226
+msgid "The agreement was not accepted."
+msgstr "Kontratua ez da onartu."
+
+#. TRANSLATORS: the user needs to change media inserted into the computer
+#: ../lib/packagekit-glib2/pk-task-text.c:265
+msgid "Media change required"
+msgstr "Euskarria aldatu behar da"
+
+#. TRANSLATORS: the type, e.g. DVD, CD, etc
+#: ../lib/packagekit-glib2/pk-task-text.c:268
+msgid "Media type"
+msgstr "Euskarri-mota"
+
+#. TRANSLATORS: the media label, usually like 'disk-1of3'
+#: ../lib/packagekit-glib2/pk-task-text.c:271
+msgid "Media label"
+msgstr "Euskarri-etiketa"
+
+#. TRANSLATORS: the media description, usually like 'Fedora 12 disk 5'
+#: ../lib/packagekit-glib2/pk-task-text.c:274
+msgid "Text"
+msgstr "Testua"
+
+#. TRANSLATORS: ask the user to insert the media
+#: ../lib/packagekit-glib2/pk-task-text.c:280
+msgid "Please insert the correct media"
+msgstr "Sartu euskarri zuzena"
+
+#. TRANSLATORS: tell the user we've not done anything as they are lazy
+#: ../lib/packagekit-glib2/pk-task-text.c:285
+msgid "The correct media was not inserted."
+msgstr "Ez da euskarri zuzena sartu."
+
+#. TRANSLATORS: When processing, we might have to remove other dependencies
+#: ../lib/packagekit-glib2/pk-task-text.c:300
+msgid "The following packages have to be removed:"
+msgstr "Hurrengo paketeak kendu behar dira:"
+
+#. TRANSLATORS: When processing, we might have to install other dependencies
+#: ../lib/packagekit-glib2/pk-task-text.c:305
+msgid "The following packages have to be installed:"
+msgstr "Hurrengo paketeak instalatu behar dira:"
+
+#. TRANSLATORS: When processing, we might have to update other dependencies
+#: ../lib/packagekit-glib2/pk-task-text.c:310
+msgid "The following packages have to be updated:"
+msgstr "Hurrengo paketeak eguneratu behar dira:"
+
+#. TRANSLATORS: When processing, we might have to reinstall other dependencies
+#: ../lib/packagekit-glib2/pk-task-text.c:315
+msgid "The following packages have to be reinstalled:"
+msgstr "Hurrengo paketeak berriro instalatu behar dira:"
+
+#. TRANSLATORS: When processing, we might have to downgrade other dependencies
+#: ../lib/packagekit-glib2/pk-task-text.c:320
+msgid "The following packages have to be downgraded:"
+msgstr "Hurrengo paketeen bertsio zaharragoa instalatu behar da:"
+
+#. TRANSLATORS: ask the user if the proposed changes are okay
+#: ../lib/packagekit-glib2/pk-task-text.c:380
+msgid "Proceed with changes?"
+msgstr "Aldaketekin jarraitu?"
+
+#. TRANSLATORS: tell the user we didn't do anything
+#: ../lib/packagekit-glib2/pk-task-text.c:385
+msgid "The transaction did not proceed."
+msgstr "Transakzioa ez da burutu."
+
+#. SECURITY:
+#. - Normal users do not require admin authentication to accept new
+#. licence agreements.
+#. - Change this to 'auth_admin' for environments where users should not
+#. be given the option to make legal decisions.
+#.
+#: ../policy/org.freedesktop.packagekit.policy.in.h:7
+msgid "Accept EULA"
+msgstr "Onartu EULA"
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:8
+msgid "Authentication is required to accept a EULA"
+msgstr "Autentifikazioa behar da EULA bat onartzeko"
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:9
+msgid ""
+"Authentication is required to cancel a task that was not started by yourself"
+msgstr "Autentifikazioa behar da zerorrek abiarazi ez duzun zeregin bat bertan behera uzteko"
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:10
+msgid "Authentication is required to change software source parameters"
+msgstr "Autentifikazioa behar da software-jatorrien parametroak aldatzeko"
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:11
+msgid ""
+"Authentication is required to change the location used to decompress packages"
+msgstr "Autentifikazioa behar da paketeak destrinkotzeko erabiltzen den kokapena aldatzeko"
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:12
+msgid ""
+"Authentication is required to consider a key used for signing packages as "
+"trusted"
+msgstr "Autentifikazioa behar da paketeak sinatzeko erabilitako gakoa fidagarrizat hartzeko"
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:13
+msgid "Authentication is required to install a signed package"
+msgstr "Autentifikazioa behar da sinatutako pakete bat instalatzeko"
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:14
+msgid "Authentication is required to install an untrusted package"
+msgstr "Autentifikazioa behar da fidagarria ez den pakete bat instalatzeko"
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:15
+msgid "Authentication is required to refresh the system sources"
+msgstr "Autentifikazioa behar da sistemaren jatorriak freskatzeko"
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:16
+msgid "Authentication is required to reload the device with a new driver"
+msgstr "Autentifikazioa behar da gailua kontrolagailu berri batekin birkargatzeko"
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:17
+msgid "Authentication is required to remove packages"
+msgstr "Autentifikazioa behar da paketeak kentzeko"
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:18
+msgid "Authentication is required to rollback a transaction"
+msgstr "Autentifikazioa behar da transakzio bat atzera botatzeko"
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:19
+msgid ""
+"Authentication is required to set the network proxy used for downloading "
+"packages"
+msgstr "Autentifikazioa behar da paketeak deskargatzeko erabiliko den sareko proxy-a ezartzeko"
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:20
+msgid "Authentication is required to update packages"
+msgstr "Autentifikazioa behar da paketeak eguneratzeko"
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:21
+msgid "Authentication is required to upgrade the operating system"
+msgstr "Autentifikazioa behar da sistema eragilea bertsioz berritzeko"
+
+#. SECURITY:
+#. - Normal users are allowed to cancel their own task without
+#. authentication, but a different user id needs the admin password
+#. to cancel another users task.
+#.
+#: ../policy/org.freedesktop.packagekit.policy.in.h:27
+msgid "Cancel foreign task"
+msgstr "Utzi zeregin arrotza"
+
+#. SECURITY:
+#. - This is used when users want to install to a different prefix, for
+#. instance to a LTSP image or a virtual machine.
+#. - This could be used to overwrite files not owned by the user using
+#. a carefully created package file.
+#.
+#: ../policy/org.freedesktop.packagekit.policy.in.h:34
+msgid "Change location that packages are installed"
+msgstr "Aldatu paketeak instalatuko diren kokapena"
+
+#. SECURITY:
+#. - Normal users require admin authentication to enable or disable
+#. software sources as this can be used to enable new updates or
+#. install different versions of software.
+#.
+#: ../policy/org.freedesktop.packagekit.policy.in.h:40
+msgid "Change software source parameters"
+msgstr "Aldatu software-jatorrien parametroak"
+
+#. SECURITY:
+#. - Normal users do not need authentication to install signed packages
+#. from signed repositories, as this cannot exploit a system.
+#. - Paranoid users (or parents!) can change this to 'auth_admin' or
+#. 'auth_admin_keep'.
+#.
+#: ../policy/org.freedesktop.packagekit.policy.in.h:47
+msgid "Install signed package"
+msgstr "Instalatu sinatutako paketea"
+
+#. SECURITY:
+#. - Normal users require admin authentication to install untrusted or
+#. unrecognised packages, as allowing users to do this without a
+#. password would be a massive security hole.
+#. - This is not retained as each package should be authenticated.
+#.
+#: ../policy/org.freedesktop.packagekit.policy.in.h:54
+msgid "Install untrusted local file"
+msgstr "Instalatu fidagarria ez den fitxategi lokala"
+
+#. SECURITY:
+#. - Normal users do not require admin authentication to refresh the
+#. cache, as this doesn't actually install or remove software.
+#.
+#: ../policy/org.freedesktop.packagekit.policy.in.h:59
+msgid "Refresh system sources"
+msgstr "Freskatu sistemaren jatorriak"
+
+#. SECURITY:
+#. - Normal users require admin authentication to rebind a driver
+#. so that it works after we install firmware.
+#. - This should not be set to 'yes' as unprivileged users could then
+#. try to rebind drivers in use, for instance security authentication
+#. devices.
+#.
+#: ../policy/org.freedesktop.packagekit.policy.in.h:67
+msgid "Reload a device"
+msgstr "Birkargatu gailu bat"
+
+#. SECURITY:
+#. - Normal users require admin authentication to upgrade the disto as
+#. this can make the system unbootable or stop other applications from
+#. working.
+#.
+#: ../policy/org.freedesktop.packagekit.policy.in.h:73
+msgid "Remove package"
+msgstr "Kendu paketea"
+
+#. SECURITY:
+#. - Normal users require admin authentication to rollback system state
+#. as this will change a large number of packages, and could expose the
+#. system to previously patched security vulnerabilities.
+#.
+#: ../policy/org.freedesktop.packagekit.policy.in.h:79
+msgid "Rollback to a previous transaction"
+msgstr "Itzuli aurreko transakzio batera"
+
+#. SECURITY:
+#. - Normal users do not require admin authentication to set the proxy
+#. used for downloading packages.
+#.
+#: ../policy/org.freedesktop.packagekit.policy.in.h:84
+msgid "Set network proxy"
+msgstr "Ezarri sarearen proxy-a"
+
+#. SECURITY:
+#. - Normal users require admin authentication to add signing keys.
+#. - This implies adding an explicit trust, and should not be granted
+#. without a secure authentication.
+#. - This is not kept as each package should be authenticated.
+#.
+#: ../policy/org.freedesktop.packagekit.policy.in.h:91
+msgid "Trust a key used for signing packages"
+msgstr "Fidatu paketeak sinatzeko erabili den gako batetaz"
+
+#. SECURITY:
+#. - Normal users do not require admin authentication to update the
+#. system as the packages will be signed, and the action is required
+#. to update the system when unattended.
+#. - Changing this to anything other than 'yes' will break unattended
+#. updates.
+#.
+#: ../policy/org.freedesktop.packagekit.policy.in.h:99
+msgid "Update packages"
+msgstr "Eguneratu paketeak"
+
+#. TRANSLATORS: failed due to DBus security
+#: ../src/pk-main.c:87
+msgid "Startup failed due to security policies on this machine."
+msgstr "Abioak huts egin du makina honetako segurtasun-politiken ondorioz"
+
+#. TRANSLATORS: only two ways this can fail...
+#: ../src/pk-main.c:89
+msgid "This can happen for two reasons:"
+msgstr "Bi arrazoi daude horretarako:"
+
+#. TRANSLATORS: only allowed to be owned by root
+#: ../src/pk-main.c:91
+msgid "The correct user is not launching the executable (usually root)"
+msgstr "Exekutagarria ez du erabiltzaile egokiak (normalean root) abiarazi"
+
+#. TRANSLATORS: or we are installed in a prefix
+#: ../src/pk-main.c:93
+msgid ""
+"The org.freedesktop.PackageKit.conf file is not installed in the system "
+"directory:"
+msgstr "org.freedesktop.PackageKit.conf fitxategia ez dago instalatuta sistemaren direktorioan:"
+
+#. TRANSLATORS: a backend is the system package tool, e.g. yum, apt
+#: ../src/pk-main.c:200
+msgid "Packaging backend to use, e.g. dummy"
+msgstr "Erabiliko den paketatze-motorra, adib. dummy"
+
+#. TRANSLATORS: if we should run in the background
+#: ../src/pk-main.c:203
+msgid "Daemonize and detach from the terminal"
+msgstr "Deabrutu eta askatu terminaletik"
+
+#. TRANSLATORS: if we should not monitor how long we are inactive for
+#: ../src/pk-main.c:206
+msgid "Disable the idle timer"
+msgstr "Desgaitu inaktibitate-kronometroa"
+
+#. TRANSLATORS: show version
+#: ../src/pk-main.c:209
+msgid "Show version and exit"
+msgstr "Erakutsi bertsioa eta irten"
+
+#. TRANSLATORS: exit after we've started up, used for user profiling
+#: ../src/pk-main.c:212
+msgid "Exit after a small delay"
+msgstr "Irten atzerapen txiki baten ondoren"
+
+#. TRANSLATORS: exit straight away, used for automatic profiling
+#: ../src/pk-main.c:215
+msgid "Exit after the engine has loaded"
+msgstr "Irten motorra kargatu ondoren"
+
+#. TRANSLATORS: describing the service that is running
+#: ../src/pk-main.c:230
+msgid "PackageKit service"
+msgstr "PackageKit zerbitzua"
+
+#. TRANSLATORS: fatal error, dbus is not running
+#: ../src/pk-main.c:267
+msgid "Cannot connect to the system bus"
+msgstr "Ezin izan da sistemaren busera konektatu"
+
+#. TRANSLATORS: cannot register on system bus, unknown reason -- geeky error follows
+#: ../src/pk-main.c:316
+msgid "Error trying to start:"
+msgstr "Errorea abiaraztean:"
+
+#: ../src/pk-polkit-action-lookup.c:150
+msgid "To install debugging packages, extra sources need to be enabled"
+msgstr "Arazketa-paketeak instalatzeko beste jatorri batzuk gaitu behar dira"
+
+#. TRANSLATORS: is not GPG signed
+#: ../src/pk-polkit-action-lookup.c:171 ../src/pk-polkit-action-lookup.c:190
+msgid "The software is not from a trusted source."
+msgstr "Softwarea ez da jatorri fidagarri batekoa."
+
+#: ../src/pk-polkit-action-lookup.c:176
+msgid "Do not update this package unless you are sure it is safe to do so."
+msgstr "Ez eguneratu pakete hau hori egitea segurua dela egiaztatu arte."
+
+#: ../src/pk-polkit-action-lookup.c:177
+msgid "Do not update these packages unless you are sure it is safe to do so."
+msgstr "Ez eguneratu pakete hauek hori egitea segurua dela egiaztatu arte."
+
+#: ../src/pk-polkit-action-lookup.c:195
+msgid "Do not install this package unless you are sure it is safe to do so."
+msgstr "Ez instalatu pakete hau hori egitea segurua dela egiaztatu arte."
+
+#: ../src/pk-polkit-action-lookup.c:196
+msgid "Do not install these packages unless you are sure it is safe to do so."
+msgstr "Ez instalatu pakete hauek hori egitea segurua dela egiaztatu arte."
+
+#. TRANSLATORS: too many packages to list each one
+#: ../src/pk-polkit-action-lookup.c:273
+msgid "Many packages"
+msgstr "Pakete asko"
+
+#. TRANSLATORS: if the transaction is forced to install only trusted packages
+#: ../src/pk-polkit-action-lookup.c:339
+msgid "Only trusted"
+msgstr "Soilik fidagarriak"
commit 9c90bac97926fb184bd8ecca5bf5ad5777746100
Author: Daniel Nicoletti <dantti85-pk at yahoo.com.br>
Date:   Wed Nov 24 21:09:57 2010 -0200

    aptcc: Fix regex not to match "()(64bit)" as we don't support multiarch anyway

diff --git a/backends/aptcc/gstMatcher.cpp b/backends/aptcc/gstMatcher.cpp
index 2b27bf9..9f60581 100644
--- a/backends/aptcc/gstMatcher.cpp
+++ b/backends/aptcc/gstMatcher.cpp
@@ -20,6 +20,7 @@
 
 #include <regex.h>
 #include <gst/gst.h>
+#include <iostream>
 
 GstMatcher::GstMatcher(gchar **values)
 {
@@ -30,7 +31,7 @@ GstMatcher::GstMatcher(gchar **values)
     // gstreamer0.10(decoder-audio/x-wma)(wmaversion=3)
     const char *pkreg = "^gstreamer\\([0-9\\.]\\+\\)"
                 "(\\(encoder\\|decoder\\|urisource\\|urisink\\|element\\)-\\([^)]\\+\\))"
-                "\\((.*)\\)\\?";
+                "\\(([^\\(^\\)]*)\\)\\?";
 
     regex_t pkre;
     if(regcomp(&pkre, pkreg, 0) != 0) {
@@ -60,9 +61,6 @@ GstMatcher::GstMatcher(gchar **values)
             if (matches[4].rm_so != -1) {
                 // remove the '(' ')' that the regex matched
                 opt = string(value, matches[4].rm_so + 1, matches[4].rm_eo - matches[4].rm_so - 2);
-            } else {
-                // if the 4th element did not match match everything
-                opt = ".*";
             }
 
             if (type.compare("encoder") == 0) {
@@ -82,16 +80,25 @@ GstMatcher::GstMatcher(gchar **values)
 //             cout << opt << endl;
 
             gchar *capsString;
-            capsString = g_strdup_printf("%s, %s", data.c_str(), opt.c_str());
+            if (opt.empty()) {
+                capsString = g_strdup_printf("%s", data.c_str());
+            } else {
+                capsString = g_strdup_printf("%s, %s", data.c_str(), opt.c_str());
+            }
+            GstCaps *caps = gst_caps_from_string(capsString);
+            g_free(capsString);
+
+            if (caps == NULL) {
+                continue;
+            }
 
             values.version = version;
             values.type    = type;
             values.data    = data;
             values.opt     = opt;
-            values.caps    = gst_caps_from_string(capsString);
+            values.caps    = caps;
 
             m_matches.push_back(values);
-            g_free(capsString);
         } else {
             g_debug("Did not match: %s", value);
         }
@@ -123,6 +130,9 @@ bool GstMatcher::matches(string record)
 
                     GstCaps *caps;
                     caps = gst_caps_from_string(record.substr(found, endOfLine - found).c_str());
+                    if (caps == NULL) {
+                        continue;
+                    }
 
                     // if the record is capable of intersect them we found the package
                     bool provides = gst_caps_can_intersect(static_cast<GstCaps*>(i->caps), caps);
commit 9dd6ad17f476c4e5f5248db1e84e34b3cf46cb6c
Merge: 16170df... 79153b6...
Author: Daniel Nicoletti <dantti85-pk at yahoo.com.br>
Date:   Wed Nov 24 17:18:25 2010 -0200

    Merge branch 'master' of gitorious.org:packagekit/packagekit

commit 16170df05a733e665896128d1f7fc520a60b2e45
Author: Daniel Nicoletti <dantti85-pk at yahoo.com.br>
Date:   Wed Nov 24 17:17:01 2010 -0200

    aptcc: Gstreamer search coded support finished

diff --git a/backends/aptcc/apt.cpp b/backends/aptcc/apt.cpp
index 89cbc63..082d093 100644
--- a/backends/aptcc/apt.cpp
+++ b/backends/aptcc/apt.cpp
@@ -22,6 +22,7 @@
 #include "apt.h"
 #include "apt-utils.h"
 #include "matcher.h"
+#include "gstMatcher.h"
 #include "aptcc_show_broken.h"
 #include "acqprogress.h"
 #include "pkg_acqfile.h"
@@ -369,8 +370,6 @@ void aptcc::emit_packages(vector<pair<pkgCache::PkgIterator, pkgCache::VerIterat
 	}
 }
 
-
-
 void aptcc::emitUpdates(vector<pair<pkgCache::PkgIterator, pkgCache::VerIterator> > &output,
 			 PkBitfield filters)
 {
@@ -417,132 +416,46 @@ void aptcc::emitUpdates(vector<pair<pkgCache::PkgIterator, pkgCache::VerIterator
 	}
 }
 
-
 void aptcc::povidesCodec(vector<pair<pkgCache::PkgIterator, pkgCache::VerIterator> > &output,
-			 gchar **values)
+                         gchar **values)
 {
-	// The search term from PackageKit daemon:
-	// gstreamer0.10(urisource-foobar)
-	// gstreamer0.10(decoder-audio/x-wma)(wmaversion=3)
-
-	// The optional field is more complicated, it can have
-	// types, like int, float...
-	// TODO use some GST helper :/
- 	regex_t pkre;
-
-	const char *pkreg = "^gstreamer\\([0-9\\.]\\+\\)"
-			    "(\\(encoder\\|decoder\\|urisource\\|urisink\\|element\\)-\\([^)]\\+\\))"
-			    "\\((.*)\\)\\?";
-
-	if(regcomp(&pkre, pkreg, 0) != 0) {
-		g_debug("Regex compilation error: ", pkreg);
-		return;
-	}
-
-	gchar *value;
-	vector<pair<string, regex_t> > search;
-	for (uint i = 0; i < g_strv_length(values); i++) {
-		value = values[i];
-		regmatch_t matches[5];
-		if (regexec(&pkre, value, 5, matches, 0) == 0) {
-			string version, type, data, opt;
-			version = "\nGstreamer-Version: ";
-			version.append(string(value, matches[1].rm_so, matches[1].rm_eo - matches[1].rm_so));
-			type = string(value, matches[2].rm_so, matches[2].rm_eo - matches[2].rm_so);
-			data = string(value, matches[3].rm_so, matches[3].rm_eo - matches[3].rm_so);
-			if (matches[4].rm_so != -1) {
-				// remove the '(' ')' that the regex matched
-				opt = string(value, matches[4].rm_so + 1, matches[4].rm_eo - matches[4].rm_so - 2);
-			} else {
-				// if the 4th element did not match match everything
-				opt = ".*";
-			}
-
-			if (type.compare("encoder") == 0) {
-				type = "Gstreamer-Encoders";
-			} else if (type.compare("decoder") == 0) {
-				type = "Gstreamer-Decoders";
-			} else if (type.compare("urisource") == 0) {
-				type = "Gstreamer-Uri-Sources";
-			} else if (type.compare("urisink") == 0) {
-				type = "Gstreamer-Uri-Sinks";
-			} else if (type.compare("element") == 0) {
-				type = "Gstreamer-Elements";
-			}
-			cout << version << endl;
-			cout << type << endl;
-			cout << data << endl;
-			cout << opt << endl;
-			regex_t sre;
-			gchar *itemreg;
-			itemreg = g_strdup_printf("^%s:.* %s\\(, %s\\(,.*\\|;.*\\|$\\)\\|;\\|$\\)",
-						  type.c_str(),
-						  data.c_str(),
-						  opt.c_str());
-			if(regcomp(&sre, itemreg, REG_NEWLINE | REG_NOSUB) == 0) {
-				search.push_back(pair<string, regex_t>(version, sre));
-			} else {
-				g_debug("Search regex compilation error: ", itemreg);
-			}
-			g_free(itemreg);
-		} else {
-			g_debug("Did not match: %s", value);
-		}
-	}
-	regfree(&pkre);
-
-	// If nothing matched just return
-	if (search.size() == 0) {
-		return;
-	}
+    GstMatcher *matcher = new GstMatcher(values);
+    if (!matcher->hasMatches()) {
+        return;
+    }
 
-	for (pkgCache::PkgIterator pkg = packageCache->PkgBegin(); !pkg.end(); ++pkg)
-	{
-		if (_cancel) {
-			break;
-		}
-		// Ignore packages that exist only due to dependencies.
-		if (pkg.VersionList().end() && pkg.ProvidesList().end()) {
-			continue;
-		}
+    for (pkgCache::PkgIterator pkg = packageCache->PkgBegin(); !pkg.end(); ++pkg)
+    {
+        if (_cancel) {
+            delete matcher;
+            break;
+        }
+        // Ignore packages that exist only due to dependencies.
+        if (pkg.VersionList().end() && pkg.ProvidesList().end()) {
+            continue;
+        }
 
-		// TODO search in updates packages
-		// Ignore virtual packages
-		pkgCache::VerIterator ver = find_ver(pkg);
-		if (ver.end() == true) {
-			ver = find_candidate_ver(pkg);
-			if (ver.end() == true) {
-				continue;
-			}
-		}
-		pkgCache::VerFileIterator vf = ver.FileList();
-		pkgRecords::Parser &rec = packageRecords->Lookup(vf);
-		const char *start, *stop;
-		rec.GetRec(start, stop);
-		string record(start, stop - start);
-		for (vector<pair<string, regex_t> >::iterator i=search.begin();
-		     i != search.end();
-		++i) {
-			if (_cancel) {
-				break;
-			}
+        // TODO search in updates packages
+        // Ignore virtual packages
+        pkgCache::VerIterator ver = find_ver(pkg);
+        if (ver.end() == true) {
+            ver = find_candidate_ver(pkg);
+            if (ver.end() == true) {
+                continue;
+            }
+        }
 
-			// if Gstreamer-version: xxx is found try to match the regex
-			if (record.find(i->first) != string::npos) {
-				if (regexec(&i->second, record.c_str(), 0, NULL, 0) == 0) {
-					cout << record << endl;
-					output.push_back(pair<pkgCache::PkgIterator, pkgCache::VerIterator>(pkg, ver));
-				}
-			}
-		}
-	}
+        pkgCache::VerFileIterator vf = ver.FileList();
+        pkgRecords::Parser &rec = packageRecords->Lookup(vf);
+        const char *start, *stop;
+        rec.GetRec(start, stop);
+        string record(start, stop - start);
+        if (matcher->matches(record)) {
+            output.push_back(pair<pkgCache::PkgIterator, pkgCache::VerIterator>(pkg, ver));
+        }
+    }
 
-	// frees ours regexs
-	for (vector<pair<string, regex_t> >::iterator i=search.begin();
-		     i != search.end();
-		++i) {
-		regfree(&i->second);
-	}
+    delete matcher;
 }
 
 // used to emit packages it collects all the needed info
@@ -1014,71 +927,6 @@ vector<string> searchMimeType (PkBackend *backend, gchar **values, bool &error,
 	return packageList;
 }
 
-// TODO this was replaced with data in the cache
-// used to return files it reads, using the info from the files in /var/lib/dpkg/info/
-// vector<string> searchCodec (PkBackend *backend, gchar **values, bool &error, bool &_cancel)
-// {
-// 	vector<string> packageList;
-// 	regex_t re;
-// 	gchar *value;
-// 	gchar *values_str;
-//
-// 	values_str = g_strjoinv("|", values);
-// 	value = g_strdup_printf("^X-AppInstall-Codecs=\\(.*;\\)\\?\\(%s\\)\\(;.*\\)\\?$",
-// 				values_str);
-// 	g_free(values_str);
-//
-// 	if(regcomp(&re, value, REG_NOSUB) != 0) {
-// 		g_debug("Regex compilation error");
-// 		g_free(value);
-// 		return vector<string>();
-// 	}
-// 	g_free(value);
-//
-// 	DIR *dp;
-// 	struct dirent *dirp;
-// 	if (!(dp = opendir("/usr/share/app-install/desktop/"))) {
-// 		g_debug ("Error opening /usr/share/app-install/desktop/\n");
-// 		regfree(&re);
-// 		error = true;
-// 		return vector<string>();
-// 	}
-//
-// 	string line;
-// 	while ((dirp = readdir(dp)) != NULL) {
-// 		if (_cancel) {
-// 			break;
-// 		}
-// 		if (ends_with(dirp->d_name, ".desktop")) {
-// 			string f = "/usr/share/app-install/desktop/" + string(dirp->d_name);
-// 			ifstream in(f.c_str());
-// 			if (!in != 0) {
-// 				continue;
-// 			}
-// 			bool getName = false;
-// 			while (!in.eof()) {
-// 				getline(in, line);
-// 				if (getName) {
-// 					if (starts_with(line, "X-AppInstall-Package=")) {
-// 						// Remove the X-AppInstall-Package=
-// 						packageList.push_back(line.substr(21));
-// 						break;
-// 					}
-// 				} else {
-// 				    if (regexec(&re, line.c_str(), (size_t)0, NULL, 0) == 0) {
-// 						in.seekg(ios_base::beg);
-// 						getName = true;
-// 					}
-// 				}
-// 			}
-// 		}
-// 	}
-//
-// 	closedir(dp);
-// 	regfree(&re);
-// 	return packageList;
-// }
-
 // used to emit files it reads the info directly from the files
 void emit_files (PkBackend *backend, const gchar *pi)
 {
diff --git a/backends/aptcc/gstMatcher.cpp b/backends/aptcc/gstMatcher.cpp
index eb0f77d..2b27bf9 100644
--- a/backends/aptcc/gstMatcher.cpp
+++ b/backends/aptcc/gstMatcher.cpp
@@ -1,7 +1,5 @@
-// apt.cc
 //
-//  Copyright 1999-2008 Daniel Burrows
-//  Copyright (C) 2009 Daniel Nicoletti <dantti85-pk at yahoo.com.br>
+//  Copyright (C) 2010 Daniel Nicoletti <dantti85-pk at yahoo.com.br>
 //
 //  This program is free software; you can redistribute it and/or modify
 //  it under the terms of the GNU General Public License as published by
@@ -19,42 +17,46 @@
 //  Boston, MA 02111-1307, USA.
 
 #include "gstMatcher.h"
-#include <stdio.h>
-#include <iostream>
 
+#include <regex.h>
 #include <gst/gst.h>
 
-gstMatcher::gstMatcher(gchar **values)
+GstMatcher::GstMatcher(gchar **values)
 {
+    gst_init(NULL, NULL);
+
     // The search term from PackageKit daemon:
     // gstreamer0.10(urisource-foobar)
     // gstreamer0.10(decoder-audio/x-wma)(wmaversion=3)
-
-    // The optional field is more complicated, it can have
-    // types, like int, float...
-    // TODO use some GST helper :/
-    regex_t pkre;
-
     const char *pkreg = "^gstreamer\\([0-9\\.]\\+\\)"
                 "(\\(encoder\\|decoder\\|urisource\\|urisink\\|element\\)-\\([^)]\\+\\))"
                 "\\((.*)\\)\\?";
 
+    regex_t pkre;
     if(regcomp(&pkre, pkreg, 0) != 0) {
         g_debug("Regex compilation error: ", pkreg);
         return;
     }
 
     gchar *value;
-    vector<pair<string, regex_t> > search;
     for (uint i = 0; i < g_strv_length(values); i++) {
         value = values[i];
         regmatch_t matches[5];
         if (regexec(&pkre, value, 5, matches, 0) == 0) {
+            Match values;
             string version, type, data, opt;
+
+            // Appends the version "0.10"
             version = "\nGstreamer-Version: ";
             version.append(string(value, matches[1].rm_so, matches[1].rm_eo - matches[1].rm_so));
+
+            // type (encode|decoder...)
             type = string(value, matches[2].rm_so, matches[2].rm_eo - matches[2].rm_so);
+
+            // data "audio/x-wma"
             data = string(value, matches[3].rm_so, matches[3].rm_eo - matches[3].rm_so);
+
+            // opt "wmaversion=3"
             if (matches[4].rm_so != -1) {
                 // remove the '(' ')' that the regex matched
                 opt = string(value, matches[4].rm_so + 1, matches[4].rm_eo - matches[4].rm_so - 2);
@@ -64,46 +66,79 @@ gstMatcher::gstMatcher(gchar **values)
             }
 
             if (type.compare("encoder") == 0) {
-                type = "Gstreamer-Encoders";
+                type = "Gstreamer-Encoders: ";
             } else if (type.compare("decoder") == 0) {
-                type = "Gstreamer-Decoders";
+                type = "Gstreamer-Decoders: ";
             } else if (type.compare("urisource") == 0) {
-                type = "Gstreamer-Uri-Sources";
+                type = "Gstreamer-Uri-Sources: ";
             } else if (type.compare("urisink") == 0) {
-                type = "Gstreamer-Uri-Sinks";
+                type = "Gstreamer-Uri-Sinks: ";
             } else if (type.compare("element") == 0) {
-                type = "Gstreamer-Elements";
-            }
-            cout << version << endl;
-            cout << type << endl;
-            cout << data << endl;
-            cout << opt << endl;
-            regex_t sre;
-            gchar *itemreg;
-            GstCaps *caps;
-            caps = gst_caps_new_simple(data.c_str(), opt.c_str());
-            itemreg = g_strdup_printf("^%s:.* %s\\(, %s\\(,.*\\|;.*\\|$\\)\\|;\\|$\\)",
-                          type.c_str(),
-                          data.c_str(),
-                          opt.c_str());
-            if(regcomp(&sre, itemreg, REG_NEWLINE | REG_NOSUB) == 0) {
-                search.push_back(pair<string, regex_t>(version, sre));
-            } else {
-                g_debug("Search regex compilation error: ", itemreg);
+                type = "Gstreamer-Elements: ";
             }
-            g_free(itemreg);
+//             cout << version << endl;
+//             cout << type << endl;
+//             cout << data << endl;
+//             cout << opt << endl;
+
+            gchar *capsString;
+            capsString = g_strdup_printf("%s, %s", data.c_str(), opt.c_str());
+
+            values.version = version;
+            values.type    = type;
+            values.data    = data;
+            values.opt     = opt;
+            values.caps    = gst_caps_from_string(capsString);
+
+            m_matches.push_back(values);
+            g_free(capsString);
         } else {
             g_debug("Did not match: %s", value);
         }
     }
     regfree(&pkre);
+}
 
-    // If nothing matched just return
-    if (search.size() == 0) {
-        return;
+GstMatcher::~GstMatcher()
+{
+    gst_deinit();
+
+    for (vector<Match>::iterator i = m_matches.begin(); i != m_matches.end(); ++i) {
+        gst_caps_unref(static_cast<GstCaps*>(i->caps));
     }
 }
 
-gstMatcher::~gstMatcher()
+bool GstMatcher::matches(string record)
 {
+    for (vector<Match>::iterator i = m_matches.begin(); i != m_matches.end(); ++i) {
+            // Tries to find "Gstreamer-version: xxx"
+            if (record.find(i->version) != string::npos) {
+                size_t found;
+                found = record.find(i->type);
+                // Tries to find the type "Gstreamer-Uri-Sinks: "
+                if (found != string::npos) {
+                    found += i->type.size(); // skips the "Gstreamer-Uri-Sinks: " string
+                    size_t endOfLine;
+                    endOfLine = record.find('\n', found);
+
+                    GstCaps *caps;
+                    caps = gst_caps_from_string(record.substr(found, endOfLine - found).c_str());
+
+                    // if the record is capable of intersect them we found the package
+                    bool provides = gst_caps_can_intersect(static_cast<GstCaps*>(i->caps), caps);
+                    gst_caps_unref(caps);
+
+                    if (provides) {
+                        return true;
+                    }
+                }
+            }
+        }
+        return false;
+}
+
+bool GstMatcher::hasMatches() const
+{
+    return !m_matches.empty();
 }
+
diff --git a/backends/aptcc/gstMatcher.h b/backends/aptcc/gstMatcher.h
index 2645702..7f8ca7b 100644
--- a/backends/aptcc/gstMatcher.h
+++ b/backends/aptcc/gstMatcher.h
@@ -1,7 +1,5 @@
-// apt.h  -*-c++-*-
 //
-//  Copyright 1999-2002, 2004-2005, 2007-2008 Daniel Burrows
-//  Copyright (C) 2009 Daniel Nicoletti <dantti85-pk at yahoo.com.br>
+//  Copyright (C) 2010 Daniel Nicoletti <dantti85-pk at yahoo.com.br>
 //
 //  This program is free software; you can redistribute it and/or modify
 //  it under the terms of the GNU General Public License as published by
@@ -22,22 +20,32 @@
 #ifndef GST_MATCHER_H
 #define GST_MATCHER_H
 
-#include <regex.h>
-
 #include <glib.h>
 
 #include <vector>
-#include <map>
 #include <string>
 
 using namespace std;
 
-class gstMatcher
+typedef struct {
+    string   version;
+    string   type;
+    string   data;
+    string   opt;
+    void    *caps;
+} Match;
+
+class GstMatcher
 {
 public:
-	gstMatcher(gchar **values);
-	~gstMatcher();
+    GstMatcher(gchar **values);
+    ~GstMatcher();
+
+    bool matches(string record);
+    bool hasMatches() const;
 
+private:
+    vector<Match> m_matches;
 };
 
 #endif
diff --git a/backends/aptcc/pk-backend-aptcc.cpp b/backends/aptcc/pk-backend-aptcc.cpp
index 5ad5b00..118c5df 100644
--- a/backends/aptcc/pk-backend-aptcc.cpp
+++ b/backends/aptcc/pk-backend-aptcc.cpp
@@ -508,15 +508,13 @@ backend_what_provides_thread (PkBackend *backend)
 {
 	PkProvidesEnum provides;
 	PkBitfield filters;
-	const gchar *search;
 	const gchar *provides_text;
 	gchar **values;
 	bool error = false;
 
 	filters  = (PkBitfield)     pk_backend_get_uint (backend, "filters");
 	provides = (PkProvidesEnum) pk_backend_get_uint (backend, "provides");
-	search   = pk_backend_get_string (backend, "search");
-	values   = g_strsplit (search, "&", 0);
+	values   = pk_backend_get_strv (backend, "search");
 
 	pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
 
@@ -587,7 +585,6 @@ backend_what_provides_thread (PkBackend *backend)
 				       provides_text);
 	}
 
-	g_strfreev (values);
 	pk_backend_finished (backend);
 	return true;
 }
commit 79153b6865ff806b58b7c5079fec2c2e7fbd5106
Author: Piotr DrÄ…g <piotrdrag at gmail.com>
Date:   Wed Nov 24 14:24:18 2010 +0000

    l10n: Updated Polish (pl) translation to 100%
    
    New status: 375 messages complete with 0 fuzzies and 0 untranslated.
    
    Transmitted-via: Transifex (www.transifex.net).

diff --git a/po/pl.po b/po/pl.po
index 1a06d8f..c61efc9 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -5,10 +5,11 @@ msgid ""
 msgstr ""
 "Project-Id-Version: pl\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-07-02 14:59+0000\n"
-"PO-Revision-Date: 2010-07-02 21:54+0200\n"
+"POT-Creation-Date: 2010-11-24 12:48+0000\n"
+"PO-Revision-Date: 2010-11-24 15:17+0100\n"
 "Last-Translator: Piotr DrÄ…g <piotrdrag at gmail.com>\n"
 "Language-Team: Polish <trans-pl at lists.fedoraproject.org>\n"
+"Language: pl\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
@@ -17,115 +18,115 @@ msgstr ""
 
 #. TRANSLATORS: this is an atomic transaction
 #. TRANSLATORS: the role is the point of the transaction, e.g. update-system
-#: ../client/pk-console.c:176 ../client/pk-console.c:598
+#: ../client/pk-console.c:174 ../client/pk-console.c:596
 msgid "Transaction"
 msgstr "Transakcja"
 
 #. TRANSLATORS: this is the time the transaction was started in system timezone
-#: ../client/pk-console.c:178
+#: ../client/pk-console.c:176
 msgid "System time"
 msgstr "Czas systemowy"
 
 #. TRANSLATORS: this is if the transaction succeeded or not
-#: ../client/pk-console.c:180
+#: ../client/pk-console.c:178
 msgid "Succeeded"
 msgstr "Powodzenie"
 
-#: ../client/pk-console.c:180
+#: ../client/pk-console.c:178
 msgid "True"
 msgstr "Prawda"
 
-#: ../client/pk-console.c:180
+#: ../client/pk-console.c:178
 msgid "False"
 msgstr "Fałsz"
 
 #. TRANSLATORS: this is the transactions role, e.g. "update-system"
 #. TRANSLATORS: the trasaction role, e.g. update-system
-#: ../client/pk-console.c:182 ../src/pk-polkit-action-lookup.c:332
+#: ../client/pk-console.c:180 ../src/pk-polkit-action-lookup.c:332
 msgid "Role"
 msgstr "Rola"
 
 #. TRANSLATORS: this is The duration of the transaction
-#: ../client/pk-console.c:187
+#: ../client/pk-console.c:185
 msgid "Duration"
 msgstr "Czas trwania"
 
-#: ../client/pk-console.c:187
+#: ../client/pk-console.c:185
 msgid "(seconds)"
 msgstr "(sekundy)"
 
 #. TRANSLATORS: this is The command line used to do the action
 #. TRANSLATORS: the command line of the thing that wants the authentication
-#: ../client/pk-console.c:191 ../src/pk-polkit-action-lookup.c:346
+#: ../client/pk-console.c:189 ../src/pk-polkit-action-lookup.c:346
 msgid "Command line"
 msgstr "Wiersz poleceń"
 
 #. TRANSLATORS: this is the user ID of the user that started the action
-#: ../client/pk-console.c:193
+#: ../client/pk-console.c:191
 msgid "User ID"
 msgstr "Identyfikator użytkownika"
 
 #. TRANSLATORS: this is the username, e.g. hughsie
-#: ../client/pk-console.c:200
+#: ../client/pk-console.c:198
 msgid "Username"
 msgstr "Nazwa użytkownika"
 
 #. TRANSLATORS: this is the users real name, e.g. "Richard Hughes"
-#: ../client/pk-console.c:204
+#: ../client/pk-console.c:202
 msgid "Real name"
 msgstr "ImiÄ™ i nazwisko"
 
-#: ../client/pk-console.c:212
+#: ../client/pk-console.c:210
 msgid "Affected packages:"
 msgstr "Dotyczy pakietów:"
 
-#: ../client/pk-console.c:214
+#: ../client/pk-console.c:212
 msgid "Affected packages: None"
 msgstr "Dotyczy pakietów: żadnych"
 
 #. TRANSLATORS: this is the distro, e.g. Fedora 10
-#: ../client/pk-console.c:249
+#: ../client/pk-console.c:247
 msgid "Distribution"
 msgstr "Dystrybucja"
 
 #. TRANSLATORS: this is type of update, stable or testing
-#: ../client/pk-console.c:251
+#: ../client/pk-console.c:249
 msgid "Type"
 msgstr "Typ"
 
 #. TRANSLATORS: this is any summary text describing the upgrade
 #. TRANSLATORS: this is the summary of the group
-#: ../client/pk-console.c:253 ../client/pk-console.c:292
+#: ../client/pk-console.c:251 ../client/pk-console.c:290
 msgid "Summary"
 msgstr "Podsumowanie"
 
 #. TRANSLATORS: this is the group category name
-#: ../client/pk-console.c:281
+#: ../client/pk-console.c:279
 msgid "Category"
 msgstr "Kategoria"
 
 #. TRANSLATORS: this is group identifier
-#: ../client/pk-console.c:283
+#: ../client/pk-console.c:281
 msgid "ID"
 msgstr "Identyfikator"
 
 #. TRANSLATORS: this is the parent group
-#: ../client/pk-console.c:286
+#: ../client/pk-console.c:284
 msgid "Parent"
 msgstr "Nadrzędna"
 
 #. TRANSLATORS: this is the name of the parent group
-#: ../client/pk-console.c:289
+#: ../client/pk-console.c:287
 msgid "Name"
 msgstr "Nazwa"
 
 #. TRANSLATORS: this is preferred icon for the group
-#: ../client/pk-console.c:295
+#: ../client/pk-console.c:293
 msgid "Icon"
 msgstr "Ikona"
 
 #. TRANSLATORS: this is a header for the package that can be updated
-#: ../client/pk-console.c:341
+#: ../client/pk-console.c:339
 msgid "Details about the update:"
 msgstr "Szczegóły aktualizacji:"
 
@@ -134,9 +135,9 @@ msgstr "Szczegóły aktualizacji:"
 #. TRANSLATORS: the package that is not signed by a known key
 #. TRANSLATORS: the package name that was trying to be installed
 #. TRANSLATORS: title, the names of the packages that the method is processing
-#: ../client/pk-console.c:347 ../client/pk-console.c:617
-#: ../lib/packagekit-glib2/pk-task-text.c:126
-#: ../lib/packagekit-glib2/pk-task-text.c:208
+#: ../client/pk-console.c:345 ../client/pk-console.c:615
+#: ../lib/packagekit-glib2/pk-task-text.c:124
+#: ../lib/packagekit-glib2/pk-task-text.c:206
 #: ../src/pk-polkit-action-lookup.c:357
 msgid "Package"
 msgid_plural "Packages"
@@ -145,165 +146,169 @@ msgstr[1] "Pakiety"
 msgstr[2] "Pakietów"
 
 #. TRANSLATORS: details about the update, any packages that this update updates
-#: ../client/pk-console.c:350
+#: ../client/pk-console.c:348
 msgid "Updates"
 msgstr "Aktualizuje"
 
 #. TRANSLATORS: details about the update, any packages that this update obsoletes
-#: ../client/pk-console.c:354
+#: ../client/pk-console.c:352
 msgid "Obsoletes"
 msgstr "Zastępuje"
 
 #. TRANSLATORS: details about the update, the vendor URLs
 #. TRANSLATORS: the vendor (e.g. vmware) that is providing the EULA
-#: ../client/pk-console.c:358 ../lib/packagekit-glib2/pk-task-text.c:211
+#: ../client/pk-console.c:356 ../lib/packagekit-glib2/pk-task-text.c:209
 msgid "Vendor"
 msgstr "Producent"
 
 #. TRANSLATORS: details about the update, the bugzilla URLs
-#: ../client/pk-console.c:362
+#: ../client/pk-console.c:360
 msgid "Bugzilla"
 msgstr "Bugzilla"
 
 #. TRANSLATORS: details about the update, the CVE URLs
-#: ../client/pk-console.c:366
+#: ../client/pk-console.c:364
 msgid "CVE"
 msgstr "CVE"
 
 #. TRANSLATORS: details about the update, if the package requires a restart
-#: ../client/pk-console.c:370
+#: ../client/pk-console.c:368
 msgid "Restart"
 msgstr "Uruchom ponownie"
 
 #. TRANSLATORS: details about the update, any description of the update
-#: ../client/pk-console.c:374
+#: ../client/pk-console.c:372
 msgid "Update text"
 msgstr "Tekst aktualizacji"
 
 #. TRANSLATORS: details about the update, the changelog for the package
-#: ../client/pk-console.c:378
+#: ../client/pk-console.c:376
 msgid "Changes"
 msgstr "Zmiany"
 
 #. TRANSLATORS: details about the update, the ongoing state of the update
-#: ../client/pk-console.c:382
+#: ../client/pk-console.c:380
 msgid "State"
 msgstr "Stan"
 
 #. TRANSLATORS: details about the update, date the update was issued
-#: ../client/pk-console.c:386
+#: ../client/pk-console.c:384
 msgid "Issued"
 msgstr "Wydano"
 
 #. TRANSLATORS: details about the update, date the update was updated
 #. TRANSLATORS: The action of the package, in past tense
-#: ../client/pk-console.c:390 ../lib/packagekit-glib2/pk-console-shared.c:517
+#: ../client/pk-console.c:388 ../lib/packagekit-glib2/pk-console-shared.c:515
 msgid "Updated"
 msgstr "Zaktualizowano"
 
 #. TRANSLATORS: if the repo is enabled
-#: ../client/pk-console.c:426
+#: ../client/pk-console.c:424
 msgid "Enabled"
 msgstr "WÅ‚Ä…czone"
 
 #. TRANSLATORS: if the repo is disabled
-#: ../client/pk-console.c:429
+#: ../client/pk-console.c:427
 msgid "Disabled"
 msgstr "Wyłączone"
 
 #. TRANSLATORS: a package requires the system to be restarted
-#: ../client/pk-console.c:461
+#: ../client/pk-console.c:459
 msgid "System restart required by:"
 msgstr "Ponowne uruchomienie systemu jest wymagane przez:"
 
 #. TRANSLATORS: a package requires the session to be restarted
-#: ../client/pk-console.c:464
+#: ../client/pk-console.c:462
 msgid "Session restart required:"
 msgstr "Wymagane jest ponowne uruchomienie sesji:"
 
 #. TRANSLATORS: a package requires the system to be restarted due to a security update
-#: ../client/pk-console.c:467
+#: ../client/pk-console.c:465
 msgid "System restart (security) required by:"
 msgstr "Ponowne uruchomienie systemu jest wymagane przez:"
 
 #. TRANSLATORS: a package requires the session to be restarted due to a security update
-#: ../client/pk-console.c:470
+#: ../client/pk-console.c:468
 msgid "Session restart (security) required:"
 msgstr "Wymagane jest ponowne uruchomienie sesji (z powodu bezpieczeństwa):"
 
 #. TRANSLATORS: a package requires the application to be restarted
-#: ../client/pk-console.c:473
+#: ../client/pk-console.c:471
 msgid "Application restart required by:"
 msgstr "Ponowne uruchomienie programu jest wymagane przez:"
 
 #. TRANSLATORS: This a list of details about the package
-#: ../client/pk-console.c:508
+#: ../client/pk-console.c:506
 msgid "Package description"
 msgstr "Opis pakietu"
 
 #. TRANSLATORS: This a message (like a little note that may be of interest) from the transaction
-#: ../client/pk-console.c:539
+#: ../client/pk-console.c:537
 msgid "Message:"
 msgstr "Komunikat:"
 
 #. TRANSLATORS: This where the package has no files
-#: ../client/pk-console.c:560
+#: ../client/pk-console.c:558
 msgid "No files"
 msgstr "Brak plików"
 
 #. TRANSLATORS: This a list files contained in the package
-#: ../client/pk-console.c:565
+#: ../client/pk-console.c:563
 msgid "Package files"
 msgstr "Pliki pakietu"
 
 #. TRANSLATORS: the percentage complete of the transaction
-#: ../client/pk-console.c:633
+#: ../client/pk-console.c:631
 msgid "Percentage"
 msgstr "Procentowo"
 
 #. TRANSLATORS: the status of the transaction (e.g. downloading)
-#: ../client/pk-console.c:651
+#: ../client/pk-console.c:649
 msgid "Status"
 msgstr "Stan"
 
 #. TRANSLATORS: the results from the transaction
-#: ../client/pk-console.c:680
+#: ../client/pk-console.c:678
 msgid "Results:"
 msgstr "Wyniki:"
 
 #. TRANSLATORS: we failed to get any results, which is pretty fatal in my book
-#: ../client/pk-console.c:687
+#: ../client/pk-console.c:685
 msgid "Fatal error"
 msgstr "Krytyczny błąd"
 
+#. TRANSLATORS: the user asked to update everything, but there is nothing that can be updated
+#: ../client/pk-console.c:701
+msgid "There are no packages to update."
+msgstr "Brak pakietów do zaktualizowania."
+
 #. TRANSLATORS: the transaction failed in a way we could not expect
-#: ../client/pk-console.c:696
-#: ../contrib/command-not-found/pk-command-not-found.c:454
-#: ../contrib/command-not-found/pk-command-not-found.c:634
+#: ../client/pk-console.c:704
+#: ../contrib/command-not-found/pk-command-not-found.c:639
 msgid "The transaction failed"
 msgstr "Transakcja nie powiodła się"
 
 #. TRANSLATORS: print a message when there are no updates
-#: ../client/pk-console.c:727
+#: ../client/pk-console.c:733
 msgid "There are no updates available at this time."
 msgstr "Brak dostępnych aktualizacji w tej chwili."
 
-#: ../client/pk-console.c:750
+#: ../client/pk-console.c:756
 msgid "There are no upgrades available at this time."
 msgstr "Brak dostępnych aktualizacji w tej chwili."
 
 #. TRANSLATORS: a package needs to restart their system
-#: ../client/pk-console.c:817
+#: ../client/pk-console.c:823
 msgid "Please restart the computer to complete the update."
 msgstr "Proszę uruchomić ponownie komputer, aby zakończyć aktualizację."
 
 #. TRANSLATORS: a package needs to restart the session
-#: ../client/pk-console.c:820
+#: ../client/pk-console.c:826
 msgid "Please logout and login to complete the update."
 msgstr "Proszę wylogować się i zalogować, aby zakończyć aktualizację."
 
 #. TRANSLATORS: a package needs to restart their system (due to security)
-#: ../client/pk-console.c:823
+#: ../client/pk-console.c:829
 msgid ""
 "Please restart the computer to complete the update as important security "
 "updates have been installed."
@@ -312,7 +317,7 @@ msgstr ""
 "zainstalowano aktualizacje bezpieczeństwa."
 
 #. TRANSLATORS: a package needs to restart the session (due to security)
-#: ../client/pk-console.c:826
+#: ../client/pk-console.c:832
 msgid ""
 "Please logout and login to complete the update as important security updates "
 "have been installed."
@@ -321,7 +326,7 @@ msgstr ""
 "zainstalowano aktualizacje bezpieczeństwa."
 
 #. TRANSLATORS: The user used 'pkcon install dave.rpm' rather than 'pkcon install-local dave.rpm'
-#: ../client/pk-console.c:852
+#: ../client/pk-console.c:858
 #, c-format
 msgid ""
 "Expected package name, actually got file. Try using 'pkcon install-local %s' "
@@ -331,19 +336,19 @@ msgstr ""
 "wykonać polecenie \"pkcon install-local %s\"."
 
 #. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console.c:860
+#: ../client/pk-console.c:866
 #, c-format
 msgid "This tool could not find any available package: %s"
 msgstr "Te narzędzie nie może odnaleźć dostępnych pakietów: %s"
 
 #. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console.c:888
+#: ../client/pk-console.c:894
 #, c-format
 msgid "This tool could not find the installed package: %s"
 msgstr "Te narzędzie nie może odnaleźć zainstalowanego pakietu: %s"
 
 #. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console.c:916 ../client/pk-console.c:944
+#: ../client/pk-console.c:922 ../client/pk-console.c:950
 #, c-format
 msgid "This tool could not find the package: %s"
 msgstr "Te narzędzie nie może odnaleźć pakietu: %s"
@@ -352,250 +357,269 @@ msgstr "Te narzędzie nie może odnaleźć pakietu: %s"
 #. TRANSLATORS: There was an error getting the dependencies for the package. The detailed error follows
 #. TRANSLATORS: There was an error getting the details about the package. The detailed error follows
 #. TRANSLATORS: The package name was not found in any software sources. The detailed error follows
-#: ../client/pk-console.c:972 ../client/pk-console.c:1000
-#: ../client/pk-console.c:1028 ../client/pk-console.c:1056
-#: ../client/pk-console.c:1084
+#: ../client/pk-console.c:978 ../client/pk-console.c:1006
+#: ../client/pk-console.c:1034 ../client/pk-console.c:1062
+#: ../client/pk-console.c:1090
 #, c-format
 msgid "This tool could not find all the packages: %s"
 msgstr "Te narzędzie nie może odnaleźć wszystkich pakietów: %s"
 
 #. TRANSLATORS: This is when the daemon crashed, and we are up shit creek without a paddle
-#: ../client/pk-console.c:1113
+#: ../client/pk-console.c:1119
 msgid "The daemon crashed mid-transaction!"
 msgstr "Demon zawiesił się w połowie transakcji!"
 
 #. TRANSLATORS: This is the header to the --help menu
-#: ../client/pk-console.c:1147
+#: ../client/pk-console.c:1153
 msgid "PackageKit Console Interface"
 msgstr "Interfejs konsoli PackageKit"
 
 #. these are commands we can use with pkcon
-#: ../client/pk-console.c:1149
+#: ../client/pk-console.c:1155
 msgid "Subcommands:"
 msgstr "Podpolecenia:"
 
 #. TRANSLATORS: we keep a database updated with the time that an action was last executed
-#: ../client/pk-console.c:1228
+#: ../client/pk-console.c:1234
 msgid "Failed to get the time since this action was last completed"
 msgstr ""
 "Uzyskanie czasu od ostatniego zakończenia tego działania nie powiodło się"
 
 #. TRANSLATORS: command line argument, just show the version string
-#: ../client/pk-console.c:1268 ../client/pk-monitor.c:373
+#: ../client/pk-console.c:1275 ../client/pk-monitor.c:371
 msgid "Show the program version and exit"
 msgstr "Wyświetla wersję programu i wyłącza"
 
 #. TRANSLATORS: command line argument, use a filter to narrow down results
-#: ../client/pk-console.c:1271
+#: ../client/pk-console.c:1278
 msgid "Set the filter, e.g. installed"
 msgstr "Ustawia filtr, np. zainstalowane"
 
 #. TRANSLATORS: command line argument, use a non-standard install prefix
-#: ../client/pk-console.c:1274
+#: ../client/pk-console.c:1281
 msgid "Set the install root, e.g. '/' or '/mnt/ltsp'"
 msgstr "Ustawia główny katalog instalacji, np. \"/\" lub \"/mnt/ltsp\""
 
 #. TRANSLATORS: command line argument, work asynchronously
-#: ../client/pk-console.c:1277
+#: ../client/pk-console.c:1284
 msgid "Exit without waiting for actions to complete"
 msgstr "Wyłącza bez oczekiwania na zakończenie działań"
 
 #. command line argument, do we ask questions
-#: ../client/pk-console.c:1280
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:527
+#: ../client/pk-console.c:1287
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:525
 msgid "Install the packages without asking for confirmation"
 msgstr "Instaluje pakiety bez prośby o potwierdzenie"
 
 #. TRANSLATORS: command line argument, this command is not a priority
-#: ../client/pk-console.c:1283
+#: ../client/pk-console.c:1290
 msgid "Run the command using idle network bandwidth and also using less power"
 msgstr ""
 "Wykonuje polecenie używając bezczynnego połączenia sieciowego, a także "
 "zużywając mniej energii"
 
 #. TRANSLATORS: command line argument, just output without fancy formatting
-#: ../client/pk-console.c:1286
+#: ../client/pk-console.c:1293
 msgid ""
 "Print to screen a machine readable output, rather than using animated widgets"
 msgstr ""
 "Wyświetla wyjście czytelne dla komputera, zamiast używania animowanych "
-"widgetów"
+"widżetów"
+
+#. TRANSLATORS: command line argument, just output without fancy formatting
+#: ../client/pk-console.c:1296
+msgid "The maximum metadata cache age. Use -1 for 'never'."
+msgstr ""
+"Maksymalny czas przechowywania metadanych w pamięci podręcznej. Wartość -1 "
+"oznacza \"never\" (nigdy)."
 
 #. TRANSLATORS: we failed to contact the daemon
-#: ../client/pk-console.c:1308
+#: ../client/pk-console.c:1333
 msgid "Failed to contact PackageKit"
 msgstr "Skontaktowanie się z usługą PackageKit nie powiodło się"
 
 #. TRANSLATORS: The user specified an incorrect filter
-#: ../client/pk-console.c:1369
+#: ../client/pk-console.c:1381
 msgid "The proxy could not be set"
 msgstr "Nie można ustawić pośrednika"
 
 #. TRANSLATORS: The user specified an incorrect filter
-#: ../client/pk-console.c:1381
+#: ../client/pk-console.c:1393
 msgid "The install root could not be set"
 msgstr "Nie można ustawić głównego katalogu instalacji"
 
 #. TRANSLATORS: The user specified an incorrect filter
-#: ../client/pk-console.c:1393
+#: ../client/pk-console.c:1405
 msgid "The filter specified was invalid"
 msgstr "Podany filtr jest nieprawidłowy"
 
 #. TRANSLATORS: a search type can be name, details, file, etc
-#: ../client/pk-console.c:1412
+#: ../client/pk-console.c:1424
 msgid "A search type is required, e.g. name"
 msgstr "Wymagany jest typ wyszukiwania, np. nazwa"
 
 #. TRANSLATORS: the user needs to provide a search term
-#: ../client/pk-console.c:1419 ../client/pk-console.c:1431
-#: ../client/pk-console.c:1443 ../client/pk-console.c:1455
+#: ../client/pk-console.c:1431 ../client/pk-console.c:1443
+#: ../client/pk-console.c:1455 ../client/pk-console.c:1467
 msgid "A search term is required"
 msgstr "Wymagany jest wyszukiwany termin"
 
 #. TRANSLATORS: the search type was provided, but invalid
-#: ../client/pk-console.c:1465
+#: ../client/pk-console.c:1477
 msgid "Invalid search type"
 msgstr "Nieprawidłowy typ wyszukiwania"
 
 #. TRANSLATORS: the user did not specify what they wanted to install
-#: ../client/pk-console.c:1471
+#: ../client/pk-console.c:1483
 msgid "A package name to install is required"
 msgstr "Wymagana jest nazwa pakietu do zainstalowania"
 
 #. TRANSLATORS: the user did not specify what they wanted to install
-#: ../client/pk-console.c:1480
+#: ../client/pk-console.c:1492
 msgid "A filename to install is required"
 msgstr "Wymagana jest nazwa pliku do zainstalowania"
 
 #. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:1492
+#: ../client/pk-console.c:1503
 msgid "A type, key_id and package_id are required"
 msgstr "Wymagany jest typ, key_id i package_id"
 
 #. TRANSLATORS: the user did not specify what they wanted to remove
-#: ../client/pk-console.c:1503
+#: ../client/pk-console.c:1514
 msgid "A package name to remove is required"
 msgstr "Wymagana jest nazwa pakietu do usunięcia"
 
 #. TRANSLATORS: the user did not specify anything about what to download or where
-#: ../client/pk-console.c:1512
+#: ../client/pk-console.c:1523
 msgid "A destination directory and the package names to download are required"
 msgstr "Wymagany jest katalog docelowy i nazwy pakietów do pobrania"
 
 #. TRANSLATORS: the directory does not exist, so we can't continue
-#: ../client/pk-console.c:1519
+#: ../client/pk-console.c:1530
 msgid "Directory not found"
 msgstr "Nie odnaleziono katalogu"
 
 #. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:1528
+#: ../client/pk-console.c:1539
 msgid "A licence identifier (eula-id) is required"
 msgstr "Wymagany jest identyfikator licencji (eula-id)"
 
 #. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:1539
+#: ../client/pk-console.c:1550
 msgid "A transaction identifier (tid) is required"
 msgstr "Wymagany jest identyfikator transakcji (tid)"
 
 #. TRANSLATORS: The user did not specify a package name
-#: ../client/pk-console.c:1560
+#: ../client/pk-console.c:1571
 msgid "A package name to resolve is required"
 msgstr "Wymagana jest nazwa pakietu do rozwiÄ…zania"
 
 #. TRANSLATORS: The user did not specify a repository (software source) name
-#: ../client/pk-console.c:1571 ../client/pk-console.c:1582
+#: ../client/pk-console.c:1582 ../client/pk-console.c:1593
 msgid "A repository name is required"
 msgstr "Wymagana jest nazwa repozytorium"
 
 #. TRANSLATORS: The user didn't provide any data
-#: ../client/pk-console.c:1593
+#: ../client/pk-console.c:1604
 msgid "A repo name, parameter and value are required"
 msgstr "Wymagana jest nazwa, parametr i wartość repozytorium"
 
 #. TRANSLATORS: The user didn't specify what action to use
-#: ../client/pk-console.c:1610
+#: ../client/pk-console.c:1621
 msgid "An action, e.g. 'update-system' is required"
 msgstr "Wymagane jest działanie, np. \"update-system\""
 
 #. TRANSLATORS: The user specified an invalid action
-#: ../client/pk-console.c:1617
+#: ../client/pk-console.c:1628
 msgid "A correct role is required"
 msgstr "Wymagana jest bieżąca rola"
 
 #. TRANSLATORS: The user did not provide a package name
 #. TRANSLATORS: This is when the user fails to supply the package name
-#: ../client/pk-console.c:1627 ../client/pk-console.c:1642
-#: ../client/pk-console.c:1651 ../client/pk-console.c:1671
-#: ../client/pk-console.c:1680 ../client/pk-generate-pack.c:316
+#: ../client/pk-console.c:1638 ../client/pk-console.c:1652
+#: ../client/pk-console.c:1661 ../client/pk-console.c:1681
+#: ../client/pk-console.c:1690 ../client/pk-generate-pack.c:314
 msgid "A package name is required"
 msgstr "Wymagana jest nazwa pakietu"
 
 #. TRANSLATORS: each package "provides" certain things, e.g. mime(gstreamer-decoder-mp3), the user didn't specify it
-#: ../client/pk-console.c:1660
+#: ../client/pk-console.c:1670
 msgid "A package provide string is required"
 msgstr "Wymagany jest łańcuch dostarczania pakietu"
 
+#. TRANSLATORS: The user did not provide a distro name
+#: ../client/pk-console.c:1714
+msgid "A distribution name is required"
+msgstr "Wymagana jest nazwa dystrybucji"
+
+#. TRANSLATORS: The user did not provide an upgrade type
+#: ../client/pk-console.c:1720
+msgid "An upgrade type is required, e.g. 'minimal', 'default' or 'complete'"
+msgstr ""
+"Wymagany jest typ aktualizacji, np. \"minimal\" (minimalna), \"default\" "
+"(domyślna) lub \"complete\" (pełna)"
+
 #. TRANSLATORS: The user tried to use an unsupported option on the command line
-#: ../client/pk-console.c:1741
+#: ../client/pk-console.c:1770
 #, c-format
 msgid "Option '%s' is not supported"
 msgstr "Opcja \"%s\" nie jest obsługiwana"
 
 #. TRANSLATORS: Generic failure of what they asked to do
-#: ../client/pk-console.c:1751
+#: ../client/pk-console.c:1780
 msgid "Command failed"
 msgstr "Polecenie nie powiodło się"
 
 #. TRANSLATORS: we can exclude certain packages (glibc) when we know they'll exist on the target
-#: ../client/pk-generate-pack.c:255
+#: ../client/pk-generate-pack.c:253
 msgid "Set the file name of dependencies to be excluded"
 msgstr "Proszę ustawić nazwy plików zależności do wykluczenia"
 
 #. TRANSLATORS: the output location
-#: ../client/pk-generate-pack.c:258
+#: ../client/pk-generate-pack.c:256
 msgid "The output file or directory (the current directory is used if omitted)"
 msgstr ""
 "Plik lub katalog wyjściowy (użyty zostanie bieżący katalog, jeśli zostanie "
 "pominięte)"
 
 #. TRANSLATORS: put a list of packages in the pack
-#: ../client/pk-generate-pack.c:261
+#: ../client/pk-generate-pack.c:259
 msgid "The package to be put into the service pack"
 msgstr "Pakiet do umieszczenia w pakiecie serwisowym"
 
 #. TRANSLATORS: put all pending updates in the pack
-#: ../client/pk-generate-pack.c:264
+#: ../client/pk-generate-pack.c:262
 msgid "Put all updates available in the service pack"
 msgstr "Wszystkie dostępne aktualizacje w pakiecie serwisowym"
 
 #. TRANSLATORS: This is when the user fails to supply the correct arguments
-#: ../client/pk-generate-pack.c:300
+#: ../client/pk-generate-pack.c:298
 msgid "Neither --package or --updates option selected."
 msgstr "Nie wybrano żadnej z opcji --package lub --updates."
 
 #. TRANSLATORS: This is when the user fails to supply just one argument
-#: ../client/pk-generate-pack.c:308
+#: ../client/pk-generate-pack.c:306
 msgid "Both options selected."
 msgstr "Wybrano obie opcje."
 
 #. TRANSLATORS: This is when the user fails to supply the output
-#: ../client/pk-generate-pack.c:324
+#: ../client/pk-generate-pack.c:322
 msgid "A output directory or file name is required"
 msgstr "Wymagany jest katalog lub nazwa pliku wyjściowego"
 
 #. TRANSLATORS: This is when the daemon is not-installed/broken and fails to startup
-#: ../client/pk-generate-pack.c:342
+#: ../client/pk-generate-pack.c:340
 msgid "The daemon failed to startup"
 msgstr "Uruchomienie demona nie powiodło się"
 
 #. TRANSLATORS: This is when the backend doesn't have the capability to get-depends
 #. TRANSLATORS: This is when the backend doesn't have the capability to download
-#: ../client/pk-generate-pack.c:353 ../client/pk-generate-pack.c:359
+#: ../client/pk-generate-pack.c:351 ../client/pk-generate-pack.c:357
 msgid "The package manager cannot perform this type of operation."
 msgstr "Menedżer pakietów nie może wykonać tego typu działania."
 
 #. TRANSLATORS: This is when the distro didn't include libarchive support into PK
-#: ../client/pk-generate-pack.c:366
+#: ../client/pk-generate-pack.c:364
 msgid ""
 "Service packs cannot be created as PackageKit was not built with libarchive "
 "support."
@@ -604,410 +628,417 @@ msgstr ""
 "zbudowano bez obsługi biblioteki libarchive."
 
 #. TRANSLATORS: the user specified an absolute path, but didn't get the extension correct
-#: ../client/pk-generate-pack.c:377
+#: ../client/pk-generate-pack.c:375
 msgid "If specifying a file, the service pack name must end with"
 msgstr "Jeśli podano plik, nazwa pakietu serwisowego musi kończyć się"
 
 #. TRANSLATORS: This is when file already exists
-#: ../client/pk-generate-pack.c:393
+#: ../client/pk-generate-pack.c:391
 msgid "A pack with the same name already exists, do you want to overwrite it?"
 msgstr "Pakiet serwisowy o tej samej nazwie już istnieje, zastąpić go?"
 
 #. TRANSLATORS: This is when the pack was not overwritten
-#: ../client/pk-generate-pack.c:396
+#: ../client/pk-generate-pack.c:394
 msgid "The pack was not overwritten."
 msgstr "Pakiet nie został zastąpiony."
 
 #. TRANSLATORS: This is when the temporary directory cannot be created, the directory name follows
-#: ../client/pk-generate-pack.c:409
+#: ../client/pk-generate-pack.c:407
 msgid "Failed to create directory:"
 msgstr "Utworzenie katalogu nie powiodło się:"
 
 #. TRANSLATORS: This is when the list of packages from the remote computer cannot be opened
-#: ../client/pk-generate-pack.c:421
+#: ../client/pk-generate-pack.c:419
 msgid "Failed to open package list."
 msgstr "Otwarcie listy pakietów nie powiodło się."
 
 #. TRANSLATORS: The package name is being matched up to available packages
-#: ../client/pk-generate-pack.c:430
+#: ../client/pk-generate-pack.c:428
 msgid "Finding package name."
 msgstr "Wyszukiwanie nazwy pakietu."
 
 #. TRANSLATORS: This is when the package cannot be found in any software source. The detailed error follows
-#: ../client/pk-generate-pack.c:434
+#: ../client/pk-generate-pack.c:432
 #, c-format
 msgid "Failed to find package '%s': %s"
 msgstr "Odnalezienie pakietu \"%s\" nie powiodło się: %s"
 
 #. TRANSLATORS: This is telling the user we are in the process of making the pack
-#: ../client/pk-generate-pack.c:442
+#: ../client/pk-generate-pack.c:440
 msgid "Creating service pack..."
 msgstr "Tworzenie pakietu serwisowego..."
 
 #. TRANSLATORS: we succeeded in making the file
-#: ../client/pk-generate-pack.c:457
+#: ../client/pk-generate-pack.c:455
 #, c-format
 msgid "Service pack created '%s'"
 msgstr "Utworzono pakiet serwisowy \"%s\""
 
 #. TRANSLATORS: we failed to make te file
-#: ../client/pk-generate-pack.c:462
+#: ../client/pk-generate-pack.c:460
 #, c-format
 msgid "Failed to create '%s': %s"
 msgstr "Utworzenie \"%s\" nie powiodło się: %s"
 
-#: ../client/pk-monitor.c:286
+#: ../client/pk-monitor.c:284
 msgid "Failed to get daemon state"
 msgstr "Uzyskanie stanu demona nie powiodło się"
 
-#: ../client/pk-monitor.c:351
+#: ../client/pk-monitor.c:349
 msgid "Failed to get properties"
 msgstr "Uzyskanie właściwości nie powiodło się"
 
 #. TRANSLATORS: this is a program that monitors PackageKit
-#: ../client/pk-monitor.c:389
+#: ../client/pk-monitor.c:387
 msgid "PackageKit Monitor"
 msgstr "Monitor PackageKit"
 
 #. TRANSLATORS: when we are getting data from the daemon
-#: ../contrib/browser-plugin/pk-plugin-install.c:497
+#: ../contrib/browser-plugin/pk-plugin-install.c:499
 msgid "Getting package information..."
 msgstr "Pobieranie informacji o pakiecie..."
 
 #. TRANSLATORS: run an applicaiton
-#: ../contrib/browser-plugin/pk-plugin-install.c:503
+#: ../contrib/browser-plugin/pk-plugin-install.c:505
 #, c-format
 msgid "Run %s"
 msgstr "Uruchom %s"
 
 #. TRANSLATORS: show the installed version of a package
-#: ../contrib/browser-plugin/pk-plugin-install.c:509
+#: ../contrib/browser-plugin/pk-plugin-install.c:511
 msgid "Installed version"
 msgstr "Zainstalowana wersja"
 
 #. TRANSLATORS: run the application now
-#: ../contrib/browser-plugin/pk-plugin-install.c:517
+#: ../contrib/browser-plugin/pk-plugin-install.c:519
 #, c-format
 msgid "Run version %s now"
 msgstr "Uruchom wersjÄ™ %s"
 
 #. TRANSLATORS: run the application now
-#: ../contrib/browser-plugin/pk-plugin-install.c:523
+#: ../contrib/browser-plugin/pk-plugin-install.c:525
 msgid "Run now"
 msgstr "Uruchom teraz"
 
 #. TRANSLATORS: update to a new version of the package
-#: ../contrib/browser-plugin/pk-plugin-install.c:529
+#: ../contrib/browser-plugin/pk-plugin-install.c:531
 #, c-format
 msgid "Update to version %s"
 msgstr "Zaktualizuj do wersji %s"
 
 #. TRANSLATORS: To install a package
-#: ../contrib/browser-plugin/pk-plugin-install.c:535
+#: ../contrib/browser-plugin/pk-plugin-install.c:537
 #, c-format
 msgid "Install %s now"
 msgstr "Zainstaluj %s"
 
 #. TRANSLATORS: the version of the package
-#: ../contrib/browser-plugin/pk-plugin-install.c:538
+#: ../contrib/browser-plugin/pk-plugin-install.c:540
 msgid "Version"
 msgstr "Wersja"
 
 #. TRANSLATORS: noting found, so can't install
-#: ../contrib/browser-plugin/pk-plugin-install.c:543
+#: ../contrib/browser-plugin/pk-plugin-install.c:545
 msgid "No packages found for your system"
 msgstr "Nie odnaleziono pakietów dla systemu"
 
 #. TRANSLATORS: package is being installed
-#: ../contrib/browser-plugin/pk-plugin-install.c:548
+#: ../contrib/browser-plugin/pk-plugin-install.c:550
 msgid "Installing..."
 msgstr "Instalowanie..."
 
 #. TRANSLATORS: downloading repo data so we can search
-#: ../contrib/command-not-found/pk-command-not-found.c:367
+#: ../contrib/command-not-found/pk-command-not-found.c:366
 msgid "Downloading details about the software sources."
 msgstr "Pobieranie szczegółów o źródłach oprogramowania."
 
 #. TRANSLATORS: downloading file lists so we can search
-#: ../contrib/command-not-found/pk-command-not-found.c:371
+#: ../contrib/command-not-found/pk-command-not-found.c:370
 msgid "Downloading filelists (this may take some time to complete)."
 msgstr "Pobieranie list plików (może to zająć trochę czasu)."
 
 #. TRANSLATORS: waiting for native lock
-#: ../contrib/command-not-found/pk-command-not-found.c:375
+#: ../contrib/command-not-found/pk-command-not-found.c:374
 msgid "Waiting for package manager lock."
 msgstr "Oczekiwanie na blokadę menedżera pakietów."
 
 #. TRANSLATORS: loading package cache so we can search
-#: ../contrib/command-not-found/pk-command-not-found.c:379
+#: ../contrib/command-not-found/pk-command-not-found.c:378
 msgid "Loading list of packages."
 msgstr "Wczytywanie listy pakietów."
 
 #. TRANSLATORS: we failed to find the package, this shouldn't happen
-#: ../contrib/command-not-found/pk-command-not-found.c:445
+#: ../contrib/command-not-found/pk-command-not-found.c:444
 msgid "Failed to search for file"
 msgstr "Odnalezienie pliku nie powiodło się"
 
+#. TRANSLATORS: the transaction failed in a way we could not expect
+#: ../contrib/command-not-found/pk-command-not-found.c:456
+msgid "Getting the list of files failed"
+msgstr "Pobranie listy plików nie powiodło się"
+
 #. TRANSLATORS: we failed to launch the executable, the error follows
-#: ../contrib/command-not-found/pk-command-not-found.c:597
+#: ../contrib/command-not-found/pk-command-not-found.c:602
 msgid "Failed to launch:"
 msgstr "Uruchomienie nie powiodło się:"
 
 #. TRANSLATORS: we failed to install the package
-#: ../contrib/command-not-found/pk-command-not-found.c:625
+#: ../contrib/command-not-found/pk-command-not-found.c:630
 msgid "Failed to install packages"
 msgstr "Zainstalowanie pakietów nie powiodło się"
 
 #. TRANSLATORS: tool that gets called when the command is not found
-#: ../contrib/command-not-found/pk-command-not-found.c:701
+#: ../contrib/command-not-found/pk-command-not-found.c:706
 msgid "PackageKit Command Not Found"
 msgstr "Nie odnaleziono polecenia PackageKit"
 
-#. TRANSLATORS: the prefix of all the output telling the user why it's not executing
-#: ../contrib/command-not-found/pk-command-not-found.c:727
-msgid "Command not found."
-msgstr "Nie odnaleziono polecenia."
+#. TRANSLATORS: the prefix of all the output telling the user
+#. * why it's not executing. NOTE: this is lowercase to mimic
+#. * the style of bash itself -- apologies
+#: ../contrib/command-not-found/pk-command-not-found.c:739
+msgid "command not found"
+msgstr "nie odnaleziono polecenia"
 
 #. TRANSLATORS: tell the user what we think the command is
-#: ../contrib/command-not-found/pk-command-not-found.c:745
+#: ../contrib/command-not-found/pk-command-not-found.c:757
 msgid "Similar command is:"
 msgstr "Podobne polecenie:"
 
 #. TRANSLATORS: Ask the user if we should run the similar command
-#: ../contrib/command-not-found/pk-command-not-found.c:755
+#: ../contrib/command-not-found/pk-command-not-found.c:771
 msgid "Run similar command:"
 msgstr "Wykonaj podobne polecenie:"
 
 #. TRANSLATORS: show the user a list of commands that they could have meant
 #. TRANSLATORS: show the user a list of commands we could run
-#: ../contrib/command-not-found/pk-command-not-found.c:769
-#: ../contrib/command-not-found/pk-command-not-found.c:778
+#: ../contrib/command-not-found/pk-command-not-found.c:785
+#: ../contrib/command-not-found/pk-command-not-found.c:794
 msgid "Similar commands are:"
 msgstr "Podobne polecenia:"
 
 #. TRANSLATORS: ask the user to choose a file to run
-#: ../contrib/command-not-found/pk-command-not-found.c:785
+#: ../contrib/command-not-found/pk-command-not-found.c:801
 msgid "Please choose a command to run"
 msgstr "Proszę wybrać polecenie do wykonania"
 
 #. TRANSLATORS: tell the user what package provides the command
-#: ../contrib/command-not-found/pk-command-not-found.c:803
+#: ../contrib/command-not-found/pk-command-not-found.c:819
 msgid "The package providing this file is:"
 msgstr "Pakiet dostarczajÄ…cy ten plik:"
 
 #. TRANSLATORS: as the user if we want to install a package to provide the command
-#: ../contrib/command-not-found/pk-command-not-found.c:808
+#: ../contrib/command-not-found/pk-command-not-found.c:826
 #, c-format
 msgid "Install package '%s' to provide command '%s'?"
 msgstr "Zainstalować pakiet \"%s\", aby dostarczyć polecenie \"%s\"?"
 
 #. TRANSLATORS: Show the user a list of packages that provide this command
-#: ../contrib/command-not-found/pk-command-not-found.c:832
+#: ../contrib/command-not-found/pk-command-not-found.c:853
 msgid "Packages providing this file are:"
 msgstr "Pakiety dostarczajÄ…ce ten plik:"
 
 #. TRANSLATORS: Show the user a list of packages that they can install to provide this command
-#: ../contrib/command-not-found/pk-command-not-found.c:842
+#: ../contrib/command-not-found/pk-command-not-found.c:863
 msgid "Suitable packages are:"
 msgstr "Odpowiednie pakiety:"
 
 #. get selection
 #. TRANSLATORS: ask the user to choose a file to install
-#: ../contrib/command-not-found/pk-command-not-found.c:851
+#: ../contrib/command-not-found/pk-command-not-found.c:872
 msgid "Please choose a package to install"
 msgstr "Proszę wybrać pakiet do zainstalowania"
 
 #. TRANSLATORS: we are starting to install the packages
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:197
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:195
 msgid "Starting install"
 msgstr "Rozpoczynanie instalacji"
 
 #. TRANSLATORS: we couldn't find the package name, non-fatal
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:409
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:407
 #, c-format
 msgid "Failed to find the package %s, or already installed: %s"
 msgstr ""
 "Odnalezienie pakietu %s nie powiodło się lub jest już zainstalowany: %s"
 
 #. command line argument, simulate what would be done, but don't actually do it
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:518
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:516
 msgid ""
 "Don't actually install any packages, only simulate what would be installed"
 msgstr "Nie instaluje żadnych pakietów, tylko symuluje instalację"
 
 #. command line argument, do we skip packages that depend on the ones specified
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:521
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:519
 msgid "Do not install dependencies of the core packages"
 msgstr "Nie instaluje zależności podstawowych pakietów"
 
 #. command line argument, do we operate quietly
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:524
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:522
 msgid "Do not display information or progress"
 msgstr "Nie wyświetla informacji lub postępu"
 
 #. TRANSLATORS: tool that gets called when the command is not found
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:542
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:540
 msgid "PackageKit Debuginfo Installer"
 msgstr "Instalator pakietów debugowania PackageKit"
 
 #. TRANSLATORS: the use needs to specify a list of package names on the command line
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:556
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:554
 #, c-format
 msgid "ERROR: Specify package names to install."
 msgstr "BŁĄD: proszę podać nazwy pakietów do zainstalowania."
 
 #. TRANSLATORS: we are getting the list of repositories
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:592
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:590
 #, c-format
 msgid "Getting sources list"
 msgstr "Pobieranie listy źródeł"
 
 #. TRANSLATORS: operation was not successful
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:602
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:677
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:761
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:805
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:872
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:916
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:600
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:675
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:759
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:803
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:870
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:914
 msgid "FAILED."
 msgstr "NIEUDANE."
 
 #. TRANSLATORS: all completed 100%
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:617
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:657
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:692
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:776
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:820
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:887
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:931
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:615
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:655
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:690
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:774
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:818
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:885
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:929
 #, c-format
 msgid "OK."
 msgstr "OK."
 
 #. TRANSLATORS: tell the user what we found
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:620
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:618
 #, c-format
 msgid "Found %i enabled and %i disabled sources."
 msgstr "Odnaleziono %i włączone i %i wyłączone źródła."
 
 #. TRANSLATORS: we're finding repositories that match out pattern
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:627
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:625
 #, c-format
 msgid "Finding debugging sources"
 msgstr "Wyszukiwanie źródeł pakietów debugowania"
 
 #. TRANSLATORS: tell the user what we found
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:660
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:658
 #, c-format
 msgid "Found %i disabled debuginfo repos."
 msgstr "Odnaleziono %i wyłączone repozytoria pakietów debugowania."
 
 #. TRANSLATORS: we're now enabling all the debug sources we found
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:667
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:665
 #, c-format
 msgid "Enabling debugging sources"
 msgstr "Włączanie źródeł pakietów debugowania"
 
 #. TRANSLATORS: tell the user how many we enabled
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:695
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:693
 #, c-format
 msgid "Enabled %i debugging sources."
 msgstr "Włączono %i źródła pakietów debugowania."
 
 #. TRANSLATORS: we're now finding packages that match in all the repos
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:702
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:700
 #, c-format
 msgid "Finding debugging packages"
 msgstr "Wyszukiwanie źródeł pakietów debugowania"
 
 #. TRANSLATORS: we couldn't find the package name, non-fatal
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:714
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:712
 #, c-format
 msgid "Failed to find the package %s: %s"
 msgstr "Odnalezienie pakietu %s nie powiodło się: %s"
 
 #. TRANSLATORS: we couldn't find the debuginfo package name, non-fatal
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:737
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:735
 #, c-format
 msgid "Failed to find the debuginfo package %s: %s"
 msgstr "Odnalezienie pakietu debugowania %s nie powiodło się: %s"
 
 #. TRANSLATORS: no debuginfo packages could be found to be installed
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:765
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:763
 #, c-format
 msgid "Found no packages to install."
 msgstr "Nie odnaleziono pakietów do zainstalowania."
 
 #. TRANSLATORS: tell the user we found some packages, and then list them
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:779
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:777
 #, c-format
 msgid "Found %i packages:"
 msgstr "Odnaleziono %i pakiety:"
 
 #. TRANSLATORS: tell the user we are searching for deps
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:795
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:793
 #, c-format
 msgid "Finding packages that depend on these packages"
 msgstr "Wyszukiwanie pakietów zależnych od tych pakietów"
 
 #. TRANSLATORS: could not install, detailed error follows
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:808
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:806
 #, c-format
 msgid "Could not find dependant packages: %s"
 msgstr "Nie można odnaleźć zależnych pakietów: %s"
 
 #. TRANSLATORS: tell the user we found some more packages
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:824
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:822
 #, c-format
 msgid "Found %i extra packages."
 msgstr "Odnaleziono %i dodatkowe pakiety."
 
 #. TRANSLATORS: tell the user we found some more packages
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:828
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:826
 #, c-format
 msgid "No extra packages required."
 msgstr "Dodatkowe pakiety nie sÄ… wymagane."
 
 #. TRANSLATORS: tell the user we found some packages (and deps), and then list them
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:837
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:835
 #, c-format
 msgid "Found %i packages to install:"
 msgstr "Odnaleziono %i pakiety do zainstalowania:"
 
 #. TRANSLATORS: simulate mode is a testing mode where we quit before the action
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:850
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:848
 #, c-format
 msgid "Not installing packages in simulate mode"
 msgstr "Pakiety nie zostanÄ… zainstalowane w trybie symulacji"
 
 #. TRANSLATORS: we are now installing the debuginfo packages we found earlier
 #. TRANSLATORS: transaction state, installing packages
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:862
-#: ../lib/packagekit-glib2/pk-console-shared.c:289
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:860
+#: ../lib/packagekit-glib2/pk-console-shared.c:287
 #, c-format
 msgid "Installing packages"
 msgstr "Instalowanie pakietów"
 
 #. TRANSLATORS: could not install, detailed error follows
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:875
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:873
 #, c-format
 msgid "Could not install packages: %s"
 msgstr "Nie można zainstalować pakietów: %s"
 
 #. TRANSLATORS: we are now disabling all debuginfo repos we previously enabled
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:907
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:905
 #, c-format
 msgid "Disabling sources previously enabled"
 msgstr "Wyłączanie źródeł poprzednio włączonych"
 
 #. TRANSLATORS: no debuginfo packages could be found to be installed, detailed error follows
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:919
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:917
 #, c-format
 msgid "Could not disable the debugging sources: %s"
 msgstr "Nie można wyłączyć źródeł pakietów debugowania: %s"
 
 #. TRANSLATORS: we disabled all the debugging repos that we enabled before
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:934
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:932
 #, c-format
 msgid "Disabled %i debugging sources."
 msgstr "Wyłączono %i źródła pakietów debugowania."
@@ -1114,604 +1145,617 @@ msgstr "Lista pakietów PackageKit"
 msgid "PackageKit Service Pack"
 msgstr "Pakiet serwisowy PackageKit"
 
-#: ../lib/packagekit-glib2/pk-console-shared.c:65
+#: ../lib/packagekit-glib2/pk-console-shared.c:63
 #, c-format
 msgid "Please enter a number from 1 to %i: "
 msgstr "Proszę podać numer od 1 do %i: "
 
 #. TRANSLATORS: more than one package could be found that matched, to follow is a list of possible packages
-#: ../lib/packagekit-glib2/pk-console-shared.c:191
+#: ../lib/packagekit-glib2/pk-console-shared.c:189
 msgid "More than one package matches:"
 msgstr "Pasuje więcej niż jeden pakiet:"
 
 #. TRANSLATORS: This finds out which package in the list to use
-#: ../lib/packagekit-glib2/pk-console-shared.c:202
+#: ../lib/packagekit-glib2/pk-console-shared.c:200
 msgid "Please choose the correct package: "
 msgstr "Proszę wybrać poprawny pakiet: "
 
 #. TRANSLATORS: This is when the transaction status is not known
-#: ../lib/packagekit-glib2/pk-console-shared.c:257
+#: ../lib/packagekit-glib2/pk-console-shared.c:255
 msgid "Unknown state"
 msgstr "Nieznany stan"
 
 #. TRANSLATORS: transaction state, the daemon is in the process of starting
-#: ../lib/packagekit-glib2/pk-console-shared.c:261
+#: ../lib/packagekit-glib2/pk-console-shared.c:259
 msgid "Starting"
 msgstr "Rozpoczynanie"
 
 #. TRANSLATORS: transaction state, the transaction is waiting for another to complete
-#: ../lib/packagekit-glib2/pk-console-shared.c:265
+#: ../lib/packagekit-glib2/pk-console-shared.c:263
 msgid "Waiting in queue"
 msgstr "Oczekiwanie w kolejce"
 
 #. TRANSLATORS: transaction state, just started
-#: ../lib/packagekit-glib2/pk-console-shared.c:269
+#: ../lib/packagekit-glib2/pk-console-shared.c:267
 msgid "Running"
 msgstr "Wykonywanie"
 
 #. TRANSLATORS: transaction state, is querying data
-#: ../lib/packagekit-glib2/pk-console-shared.c:273
+#: ../lib/packagekit-glib2/pk-console-shared.c:271
 msgid "Querying"
 msgstr "Odpytywanie"
 
 #. TRANSLATORS: transaction state, getting data from a server
-#: ../lib/packagekit-glib2/pk-console-shared.c:277
+#: ../lib/packagekit-glib2/pk-console-shared.c:275
 msgid "Getting information"
 msgstr "Pobieranie informacji"
 
 #. TRANSLATORS: transaction state, removing packages
-#: ../lib/packagekit-glib2/pk-console-shared.c:281
+#: ../lib/packagekit-glib2/pk-console-shared.c:279
 msgid "Removing packages"
 msgstr "Usuwanie pakietu"
 
 #. TRANSLATORS: transaction state, downloading package files
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:285
-#: ../lib/packagekit-glib2/pk-console-shared.c:663
+#: ../lib/packagekit-glib2/pk-console-shared.c:283
+#: ../lib/packagekit-glib2/pk-console-shared.c:661
 msgid "Downloading packages"
 msgstr "Pobieranie pakietów"
 
 #. TRANSLATORS: transaction state, refreshing internal lists
-#: ../lib/packagekit-glib2/pk-console-shared.c:293
+#: ../lib/packagekit-glib2/pk-console-shared.c:291
 msgid "Refreshing software list"
 msgstr "Odświeżanie listy oprogramowania"
 
 #. TRANSLATORS: transaction state, installing updates
-#: ../lib/packagekit-glib2/pk-console-shared.c:297
+#: ../lib/packagekit-glib2/pk-console-shared.c:295
 msgid "Installing updates"
 msgstr "Instalowanie aktualizacji"
 
 #. TRANSLATORS: transaction state, removing old packages, and cleaning config files
-#: ../lib/packagekit-glib2/pk-console-shared.c:301
+#: ../lib/packagekit-glib2/pk-console-shared.c:299
 msgid "Cleaning up packages"
 msgstr "Czyszczenie pakietów"
 
 #. TRANSLATORS: transaction state, obsoleting old packages
-#: ../lib/packagekit-glib2/pk-console-shared.c:305
+#: ../lib/packagekit-glib2/pk-console-shared.c:303
 msgid "Obsoleting packages"
 msgstr "Zastępowanie pakietów"
 
 #. TRANSLATORS: transaction state, checking the transaction before we do it
-#: ../lib/packagekit-glib2/pk-console-shared.c:309
+#: ../lib/packagekit-glib2/pk-console-shared.c:307
 msgid "Resolving dependencies"
 msgstr "Rozwiązywanie zależności"
 
 #. TRANSLATORS: transaction state, checking if we have all the security keys for the operation
-#: ../lib/packagekit-glib2/pk-console-shared.c:313
+#: ../lib/packagekit-glib2/pk-console-shared.c:311
 msgid "Checking signatures"
 msgstr "Sprawdzanie podpisów"
 
 #. TRANSLATORS: transaction state, when we return to a previous system state
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:317
-#: ../lib/packagekit-glib2/pk-console-shared.c:623
+#: ../lib/packagekit-glib2/pk-console-shared.c:315
+#: ../lib/packagekit-glib2/pk-console-shared.c:621
 msgid "Rolling back"
 msgstr "Przywracanie"
 
 #. TRANSLATORS: transaction state, when we're doing a test transaction
-#: ../lib/packagekit-glib2/pk-console-shared.c:321
+#: ../lib/packagekit-glib2/pk-console-shared.c:319
 msgid "Testing changes"
 msgstr "Testowanie zmian"
 
 #. TRANSLATORS: transaction state, when we're writing to the system package database
-#: ../lib/packagekit-glib2/pk-console-shared.c:325
+#: ../lib/packagekit-glib2/pk-console-shared.c:323
 msgid "Committing changes"
 msgstr "Wprowadzanie zmian"
 
 #. TRANSLATORS: transaction state, requesting data from a server
-#: ../lib/packagekit-glib2/pk-console-shared.c:329
+#: ../lib/packagekit-glib2/pk-console-shared.c:327
 msgid "Requesting data"
 msgstr "Żądanie danych"
 
 #. TRANSLATORS: transaction state, all done!
-#: ../lib/packagekit-glib2/pk-console-shared.c:333
+#: ../lib/packagekit-glib2/pk-console-shared.c:331
 msgid "Finished"
 msgstr "Ukończono"
 
 #. TRANSLATORS: transaction state, in the process of cancelling
-#: ../lib/packagekit-glib2/pk-console-shared.c:337
+#: ../lib/packagekit-glib2/pk-console-shared.c:335
 msgid "Cancelling"
 msgstr "Anulowanie"
 
 #. TRANSLATORS: transaction state, downloading metadata
-#: ../lib/packagekit-glib2/pk-console-shared.c:341
+#: ../lib/packagekit-glib2/pk-console-shared.c:339
 msgid "Downloading repository information"
 msgstr "Pobieranie informacji o repozytorium"
 
 #. TRANSLATORS: transaction state, downloading metadata
-#: ../lib/packagekit-glib2/pk-console-shared.c:345
+#: ../lib/packagekit-glib2/pk-console-shared.c:343
 msgid "Downloading list of packages"
 msgstr "Pobieranie listy pakietów"
 
 #. TRANSLATORS: transaction state, downloading metadata
-#: ../lib/packagekit-glib2/pk-console-shared.c:349
+#: ../lib/packagekit-glib2/pk-console-shared.c:347
 msgid "Downloading file lists"
 msgstr "Pobieranie list plików"
 
 #. TRANSLATORS: transaction state, downloading metadata
-#: ../lib/packagekit-glib2/pk-console-shared.c:353
+#: ../lib/packagekit-glib2/pk-console-shared.c:351
 msgid "Downloading lists of changes"
 msgstr "Pobieranie listy zmian"
 
 #. TRANSLATORS: transaction state, downloading metadata
-#: ../lib/packagekit-glib2/pk-console-shared.c:357
+#: ../lib/packagekit-glib2/pk-console-shared.c:355
 msgid "Downloading groups"
 msgstr "Pobieranie grup"
 
 #. TRANSLATORS: transaction state, downloading metadata
-#: ../lib/packagekit-glib2/pk-console-shared.c:361
+#: ../lib/packagekit-glib2/pk-console-shared.c:359
 msgid "Downloading update information"
 msgstr "Pobieranie informacji o aktualizacji"
 
 #. TRANSLATORS: transaction state, repackaging delta files
-#: ../lib/packagekit-glib2/pk-console-shared.c:365
+#: ../lib/packagekit-glib2/pk-console-shared.c:363
 msgid "Repackaging files"
 msgstr "Ponowne umieszczanie plików w pakietach"
 
 #. TRANSLATORS: transaction state, loading databases
-#: ../lib/packagekit-glib2/pk-console-shared.c:369
+#: ../lib/packagekit-glib2/pk-console-shared.c:367
 msgid "Loading cache"
 msgstr "Wczytywanie pamięci podręcznej"
 
 #. TRANSLATORS: transaction state, scanning for running processes
-#: ../lib/packagekit-glib2/pk-console-shared.c:373
+#: ../lib/packagekit-glib2/pk-console-shared.c:371
 msgid "Scanning applications"
 msgstr "Skanowanie programów"
 
 #. TRANSLATORS: transaction state, generating a list of packages installed on the system
-#: ../lib/packagekit-glib2/pk-console-shared.c:377
+#: ../lib/packagekit-glib2/pk-console-shared.c:375
 msgid "Generating package lists"
 msgstr "Tworzenie list pakietów"
 
 #. TRANSLATORS: transaction state, when we're waiting for the native tools to exit
-#: ../lib/packagekit-glib2/pk-console-shared.c:381
+#: ../lib/packagekit-glib2/pk-console-shared.c:379
 msgid "Waiting for package manager lock"
 msgstr "Oczekiwanie na blokadę menedżera pakietów"
 
 #. TRANSLATORS: transaction state, waiting for user to type in a password
-#: ../lib/packagekit-glib2/pk-console-shared.c:385
+#: ../lib/packagekit-glib2/pk-console-shared.c:383
 msgid "Waiting for authentication"
 msgstr "Oczekiwanie na uwierzytelnienie"
 
 #. TRANSLATORS: transaction state, we are updating the list of processes
-#: ../lib/packagekit-glib2/pk-console-shared.c:389
+#: ../lib/packagekit-glib2/pk-console-shared.c:387
 msgid "Updating running applications"
 msgstr "Aktualizowanie uruchomionych programów"
 
 #. TRANSLATORS: transaction state, we are checking executable files currently in use
-#: ../lib/packagekit-glib2/pk-console-shared.c:393
+#: ../lib/packagekit-glib2/pk-console-shared.c:391
 msgid "Checking applications in use"
 msgstr "Sprawdzanie używanych programów"
 
 #. TRANSLATORS: transaction state, we are checking for libraries currently in use
-#: ../lib/packagekit-glib2/pk-console-shared.c:397
+#: ../lib/packagekit-glib2/pk-console-shared.c:395
 msgid "Checking libraries in use"
 msgstr "Sprawdzanie używanych bibliotek"
 
 #. TRANSLATORS: transaction state, we are copying package files before or after the transaction
-#: ../lib/packagekit-glib2/pk-console-shared.c:401
+#: ../lib/packagekit-glib2/pk-console-shared.c:399
 msgid "Copying files"
 msgstr "Kopiowanie plików"
 
 #. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:419
+#: ../lib/packagekit-glib2/pk-console-shared.c:417
 msgid "Trivial"
 msgstr "Drobna"
 
 #. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:423
+#: ../lib/packagekit-glib2/pk-console-shared.c:421
 msgid "Normal"
 msgstr "Normalna"
 
 #. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:427
+#: ../lib/packagekit-glib2/pk-console-shared.c:425
 msgid "Important"
 msgstr "Ważna"
 
 #. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:431
+#: ../lib/packagekit-glib2/pk-console-shared.c:429
 msgid "Security"
 msgstr "Bezpieczeństwa"
 
 #. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:435
+#: ../lib/packagekit-glib2/pk-console-shared.c:433
 msgid "Bug fix "
 msgstr "Naprawiająca błędy"
 
 #. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:439
+#: ../lib/packagekit-glib2/pk-console-shared.c:437
 msgid "Enhancement"
 msgstr "Ulepszenie"
 
 #. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:443
+#: ../lib/packagekit-glib2/pk-console-shared.c:441
 msgid "Blocked"
 msgstr "Zablokowana"
 
 #. TRANSLATORS: The state of a package
 #. TRANSLATORS: The action of the package, in past tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:448
-#: ../lib/packagekit-glib2/pk-console-shared.c:521
+#: ../lib/packagekit-glib2/pk-console-shared.c:446
+#: ../lib/packagekit-glib2/pk-console-shared.c:519
 msgid "Installed"
 msgstr "Zainstalowana"
 
 #. TRANSLATORS: The state of a package, i.e. not installed
-#: ../lib/packagekit-glib2/pk-console-shared.c:453
+#: ../lib/packagekit-glib2/pk-console-shared.c:451
 msgid "Available"
 msgstr "Dostępna"
 
 #. TRANSLATORS: The action of the package, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:471
+#: ../lib/packagekit-glib2/pk-console-shared.c:469
 msgid "Downloading"
 msgstr "Pobieranie"
 
 #. TRANSLATORS: The action of the package, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:475
+#: ../lib/packagekit-glib2/pk-console-shared.c:473
 msgid "Updating"
 msgstr "Aktualizowanie"
 
 #. TRANSLATORS: The action of the package, in present tense
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:479
-#: ../lib/packagekit-glib2/pk-console-shared.c:599
+#: ../lib/packagekit-glib2/pk-console-shared.c:477
+#: ../lib/packagekit-glib2/pk-console-shared.c:597
 msgid "Installing"
 msgstr "Instalowanie"
 
 #. TRANSLATORS: The action of the package, in present tense
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:483
-#: ../lib/packagekit-glib2/pk-console-shared.c:595
+#: ../lib/packagekit-glib2/pk-console-shared.c:481
+#: ../lib/packagekit-glib2/pk-console-shared.c:593
 msgid "Removing"
 msgstr "Usuwanie"
 
 #. TRANSLATORS: The action of the package, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:487
+#: ../lib/packagekit-glib2/pk-console-shared.c:485
 msgid "Cleaning up"
 msgstr "Czyszczenie"
 
 #. TRANSLATORS: The action of the package, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:491
+#: ../lib/packagekit-glib2/pk-console-shared.c:489
 msgid "Obsoleting"
 msgstr "Zastępowanie"
 
 #. TRANSLATORS: The action of the package, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:495
+#: ../lib/packagekit-glib2/pk-console-shared.c:493
 msgid "Reinstalling"
 msgstr "Ponowne instalowanie"
 
 #. TRANSLATORS: The action of the package, in past tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:513
+#: ../lib/packagekit-glib2/pk-console-shared.c:511
 msgid "Downloaded"
 msgstr "Pobierano"
 
 #. TRANSLATORS: The action of the package, in past tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:525
+#: ../lib/packagekit-glib2/pk-console-shared.c:523
 msgid "Removed"
 msgstr "Usunięto"
 
 #. TRANSLATORS: The action of the package, in past tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:529
+#: ../lib/packagekit-glib2/pk-console-shared.c:527
 msgid "Cleaned up"
 msgstr "Wyczyszczono"
 
 #. TRANSLATORS: The action of the package, in past tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:533
+#: ../lib/packagekit-glib2/pk-console-shared.c:531
 msgid "Obsoleted"
 msgstr "ZastÄ…piono"
 
 #. TRANSLATORS: The action of the package, in past tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:537
+#: ../lib/packagekit-glib2/pk-console-shared.c:535
 msgid "Reinstalled"
 msgstr "Zainstalowano ponownie"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:555
+#: ../lib/packagekit-glib2/pk-console-shared.c:553
 msgid "Unknown role type"
 msgstr "Nieznany typ roli"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:559
+#: ../lib/packagekit-glib2/pk-console-shared.c:557
 msgid "Getting dependencies"
 msgstr "Pobieranie zależności"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:563
+#: ../lib/packagekit-glib2/pk-console-shared.c:561
 msgid "Getting update details"
 msgstr "Pobieranie szczegółów aktualizacji"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:567
+#: ../lib/packagekit-glib2/pk-console-shared.c:565
 msgid "Getting details"
 msgstr "Pobieranie szczegółów"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:571
+#: ../lib/packagekit-glib2/pk-console-shared.c:569
 msgid "Getting requires"
 msgstr "Pobieranie wymagań"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:575
+#: ../lib/packagekit-glib2/pk-console-shared.c:573
 msgid "Getting updates"
 msgstr "Pobieranie aktualizacji"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:579
+#: ../lib/packagekit-glib2/pk-console-shared.c:577
 msgid "Searching by details"
 msgstr "Wyszukiwanie według szczegółów"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:583
+#: ../lib/packagekit-glib2/pk-console-shared.c:581
 msgid "Searching by file"
 msgstr "Wyszukiwanie według plików"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:587
+#: ../lib/packagekit-glib2/pk-console-shared.c:585
 msgid "Searching groups"
 msgstr "Wyszukiwanie grup"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:591
+#: ../lib/packagekit-glib2/pk-console-shared.c:589
 msgid "Searching by name"
 msgstr "Wyszukiwanie według nazw"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:603
+#: ../lib/packagekit-glib2/pk-console-shared.c:601
 msgid "Installing files"
 msgstr "Instalowanie plików"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:607
+#: ../lib/packagekit-glib2/pk-console-shared.c:605
 msgid "Refreshing cache"
 msgstr "Odświeżanie pamięci podręcznej"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:611
+#: ../lib/packagekit-glib2/pk-console-shared.c:609
 msgid "Updating packages"
 msgstr "Aktualizowanie pakietów"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:615
+#: ../lib/packagekit-glib2/pk-console-shared.c:613
 msgid "Updating system"
 msgstr "Aktualizowanie systemu"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:619
+#: ../lib/packagekit-glib2/pk-console-shared.c:617
 msgid "Canceling"
 msgstr "Anulowanie"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:627
+#: ../lib/packagekit-glib2/pk-console-shared.c:625
 msgid "Getting repositories"
 msgstr "Pobieranie repozytoriów"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:631
+#: ../lib/packagekit-glib2/pk-console-shared.c:629
 msgid "Enabling repository"
 msgstr "WÅ‚Ä…czanie repozytorium"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:635
+#: ../lib/packagekit-glib2/pk-console-shared.c:633
 msgid "Setting data"
 msgstr "Ustawianie danych"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:639
+#: ../lib/packagekit-glib2/pk-console-shared.c:637
 msgid "Resolving"
 msgstr "RozwiÄ…zywanie"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:643
+#: ../lib/packagekit-glib2/pk-console-shared.c:641
 msgid "Getting file list"
 msgstr "Pobieranie listy plików"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:647
+#: ../lib/packagekit-glib2/pk-console-shared.c:645
 msgid "Getting provides"
 msgstr "Pobieranie dostarczanych"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:651
+#: ../lib/packagekit-glib2/pk-console-shared.c:649
 msgid "Installing signature"
 msgstr "Instalowanie podpisu"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:655
+#: ../lib/packagekit-glib2/pk-console-shared.c:653
 msgid "Getting packages"
 msgstr "Pobieranie pakietów"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:659
+#: ../lib/packagekit-glib2/pk-console-shared.c:657
 msgid "Accepting EULA"
 msgstr "Akceptowanie licencji"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:667
+#: ../lib/packagekit-glib2/pk-console-shared.c:665
 msgid "Getting upgrades"
 msgstr "Pobieranie aktualizacji"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:671
+#: ../lib/packagekit-glib2/pk-console-shared.c:669
 msgid "Getting categories"
 msgstr "Pobieranie kategorii"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:675
+#: ../lib/packagekit-glib2/pk-console-shared.c:673
 msgid "Getting transactions"
 msgstr "Pobieranie transakcji"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:679
-#: ../lib/packagekit-glib2/pk-console-shared.c:683
+#: ../lib/packagekit-glib2/pk-console-shared.c:677
+#: ../lib/packagekit-glib2/pk-console-shared.c:681
 msgid "Simulating install"
 msgstr "Symulowanie instalacji"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:687
+#: ../lib/packagekit-glib2/pk-console-shared.c:685
 msgid "Simulating remove"
 msgstr "Symulowanie usunięcia"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:691
+#: ../lib/packagekit-glib2/pk-console-shared.c:689
 msgid "Simulating update"
 msgstr "Symulowanie aktualizacji"
 
+#. TRANSLATORS: turn on all debugging
+#: ../lib/packagekit-glib2/pk-debug.c:133
+msgid "Show debugging information for all files"
+msgstr "Wyświetla informacje o debugowaniu dla wszystkich plików"
+
+#: ../lib/packagekit-glib2/pk-debug.c:201
+msgid "Debugging Options"
+msgstr "Opcje debugowania"
+
+#: ../lib/packagekit-glib2/pk-debug.c:201
+msgid "Show debugging options"
+msgstr "Wyświetla opcje debugowania"
+
 #. TRANSLATORS: ask the user if they are comfortable installing insecure packages
-#: ../lib/packagekit-glib2/pk-task-text.c:69
+#: ../lib/packagekit-glib2/pk-task-text.c:67
 msgid "Do you want to allow installing of unsigned software?"
 msgstr "Pozwolić na instalowanie niepodpisanego oprogramowania?"
 
 #. TRANSLATORS: tell the user we've not done anything
-#: ../lib/packagekit-glib2/pk-task-text.c:74
+#: ../lib/packagekit-glib2/pk-task-text.c:72
 msgid "The unsigned software will not be installed."
 msgstr "Niepodpisane oprogramowanie nie zostanie zainstalowane."
 
 #. TRANSLATORS: the package repository is signed by a key that is not recognised
-#: ../lib/packagekit-glib2/pk-task-text.c:123
+#: ../lib/packagekit-glib2/pk-task-text.c:121
 msgid "Software source signature required"
 msgstr "Wymagany jest podpis źródła oprogramowania"
 
 #. TRANSLATORS: the package repository name
-#: ../lib/packagekit-glib2/pk-task-text.c:129
+#: ../lib/packagekit-glib2/pk-task-text.c:127
 msgid "Software source name"
 msgstr "Nazwa źródła oprogramowania"
 
 #. TRANSLATORS: the key URL
-#: ../lib/packagekit-glib2/pk-task-text.c:132
+#: ../lib/packagekit-glib2/pk-task-text.c:130
 msgid "Key URL"
 msgstr "Adres URL klucza"
 
 #. TRANSLATORS: the username of the key
-#: ../lib/packagekit-glib2/pk-task-text.c:135
+#: ../lib/packagekit-glib2/pk-task-text.c:133
 msgid "Key user"
 msgstr "Użytkownika klucza"
 
 #. TRANSLATORS: the key ID, usually a few hex digits
-#: ../lib/packagekit-glib2/pk-task-text.c:138
+#: ../lib/packagekit-glib2/pk-task-text.c:136
 msgid "Key ID"
 msgstr "Identyfikator klucza"
 
 #. TRANSLATORS: the key fingerprint, again, yet more hex
-#: ../lib/packagekit-glib2/pk-task-text.c:141
+#: ../lib/packagekit-glib2/pk-task-text.c:139
 msgid "Key fingerprint"
 msgstr "Odcisk klucza"
 
 #. TRANSLATORS: the timestamp (a bit like a machine readable time)
-#: ../lib/packagekit-glib2/pk-task-text.c:144
+#: ../lib/packagekit-glib2/pk-task-text.c:142
 msgid "Key Timestamp"
 msgstr "Czas klucza"
 
 #. TRANSLATORS: ask the user if they want to import
-#: ../lib/packagekit-glib2/pk-task-text.c:157
+#: ../lib/packagekit-glib2/pk-task-text.c:155
 msgid "Do you accept this signature?"
 msgstr "Zaakceptować ten podpis?"
 
 #. TRANSLATORS: tell the user we've not done anything
-#: ../lib/packagekit-glib2/pk-task-text.c:162
+#: ../lib/packagekit-glib2/pk-task-text.c:160
 msgid "The signature was not accepted."
 msgstr "Podpis nie został zaakceptowany."
 
 #. TRANSLATORS: this is another name for a software licence that has to be read before installing
-#: ../lib/packagekit-glib2/pk-task-text.c:205
+#: ../lib/packagekit-glib2/pk-task-text.c:203
 msgid "End user licence agreement required"
 msgstr "Wymagana jest umowa licencyjna użytkownika końcowego"
 
 #. TRANSLATORS: the EULA text itself (long and boring)
-#: ../lib/packagekit-glib2/pk-task-text.c:214
+#: ../lib/packagekit-glib2/pk-task-text.c:212
 msgid "Agreement"
 msgstr "Umowa"
 
 #. TRANSLATORS: ask the user if they've read and accepted the EULA
-#: ../lib/packagekit-glib2/pk-task-text.c:223
+#: ../lib/packagekit-glib2/pk-task-text.c:221
 msgid "Do you accept this agreement?"
 msgstr "Zaakceptować tę umowę?"
 
 #. TRANSLATORS: tell the user we've not done anything
-#: ../lib/packagekit-glib2/pk-task-text.c:228
+#: ../lib/packagekit-glib2/pk-task-text.c:226
 msgid "The agreement was not accepted."
 msgstr "Umowa nie została zaakceptowana."
 
 #. TRANSLATORS: the user needs to change media inserted into the computer
-#: ../lib/packagekit-glib2/pk-task-text.c:267
+#: ../lib/packagekit-glib2/pk-task-text.c:265
 msgid "Media change required"
 msgstr "Wymagana jest zmiana nośnika"
 
 #. TRANSLATORS: the type, e.g. DVD, CD, etc
-#: ../lib/packagekit-glib2/pk-task-text.c:270
+#: ../lib/packagekit-glib2/pk-task-text.c:268
 msgid "Media type"
 msgstr "Typ nośnika"
 
 #. TRANSLATORS: the media label, usually like 'disk-1of3'
-#: ../lib/packagekit-glib2/pk-task-text.c:273
+#: ../lib/packagekit-glib2/pk-task-text.c:271
 msgid "Media label"
 msgstr "Etykieta nośnika"
 
 #. TRANSLATORS: the media description, usually like 'Fedora 12 disk 5'
-#: ../lib/packagekit-glib2/pk-task-text.c:276
+#: ../lib/packagekit-glib2/pk-task-text.c:274
 msgid "Text"
 msgstr "Tekst"
 
 #. TRANSLATORS: ask the user to insert the media
-#: ../lib/packagekit-glib2/pk-task-text.c:282
+#: ../lib/packagekit-glib2/pk-task-text.c:280
 msgid "Please insert the correct media"
 msgstr "Proszę włożyć poprawny nośnik"
 
 #. TRANSLATORS: tell the user we've not done anything as they are lazy
-#: ../lib/packagekit-glib2/pk-task-text.c:287
+#: ../lib/packagekit-glib2/pk-task-text.c:285
 msgid "The correct media was not inserted."
 msgstr "Nie włożono poprawnego nośnika."
 
 #. TRANSLATORS: When processing, we might have to remove other dependencies
-#: ../lib/packagekit-glib2/pk-task-text.c:302
+#: ../lib/packagekit-glib2/pk-task-text.c:300
 msgid "The following packages have to be removed:"
 msgstr "Następujące pakiety muszą zostać usunięte:"
 
 #. TRANSLATORS: When processing, we might have to install other dependencies
-#: ../lib/packagekit-glib2/pk-task-text.c:307
+#: ../lib/packagekit-glib2/pk-task-text.c:305
 msgid "The following packages have to be installed:"
 msgstr "Następujące pakiety muszą zostać zainstalowane:"
 
 #. TRANSLATORS: When processing, we might have to update other dependencies
-#: ../lib/packagekit-glib2/pk-task-text.c:312
+#: ../lib/packagekit-glib2/pk-task-text.c:310
 msgid "The following packages have to be updated:"
 msgstr "Następujące pakiety muszą zostać zaktualizowane:"
 
 #. TRANSLATORS: When processing, we might have to reinstall other dependencies
-#: ../lib/packagekit-glib2/pk-task-text.c:317
+#: ../lib/packagekit-glib2/pk-task-text.c:315
 msgid "The following packages have to be reinstalled:"
 msgstr "Następujące pakiety muszą zostać ponownie zainstalowane:"
 
 #. TRANSLATORS: When processing, we might have to downgrade other dependencies
-#: ../lib/packagekit-glib2/pk-task-text.c:322
+#: ../lib/packagekit-glib2/pk-task-text.c:320
 msgid "The following packages have to be downgraded:"
 msgstr "Następujące pakiety muszą zostać zainstalowane w starszych wersjach:"
 
 #. TRANSLATORS: ask the user if the proposed changes are okay
-#: ../lib/packagekit-glib2/pk-task-text.c:382
+#: ../lib/packagekit-glib2/pk-task-text.c:380
 msgid "Proceed with changes?"
 msgstr "Kontynuować wprowadzanie zmian?"
 
 #. TRANSLATORS: tell the user we didn't do anything
-#: ../lib/packagekit-glib2/pk-task-text.c:387
+#: ../lib/packagekit-glib2/pk-task-text.c:385
 msgid "The transaction did not proceed."
 msgstr "Transakcja nie będzie kontynuowana."
 
@@ -1794,12 +1838,16 @@ msgstr ""
 msgid "Authentication is required to update packages"
 msgstr "Wymagane jest uwierzytelnienie, aby zaktualizować pakiety"
 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:21
+msgid "Authentication is required to upgrade the operating system"
+msgstr "Wymagane jest uwierzytelnienie, aby zaktualizować system operacyjny"
+
 #. SECURITY:
 #. - Normal users are allowed to cancel their own task without
 #. authentication, but a different user id needs the admin password
 #. to cancel another users task.
 #.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:26
+#: ../policy/org.freedesktop.packagekit.policy.in.h:27
 msgid "Cancel foreign task"
 msgstr "Anulowanie obcego zadania"
 
@@ -1809,7 +1857,7 @@ msgstr "Anulowanie obcego zadania"
 #. - This could be used to overwrite files not owned by the user using
 #. a carefully created package file.
 #.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:33
+#: ../policy/org.freedesktop.packagekit.policy.in.h:34
 msgid "Change location that packages are installed"
 msgstr "Zmiana położenia, w którym są instalowane pakiety"
 
@@ -1818,7 +1866,7 @@ msgstr "Zmiana położenia, w którym są instalowane pakiety"
 #. software sources as this can be used to enable new updates or
 #. install different versions of software.
 #.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:39
+#: ../policy/org.freedesktop.packagekit.policy.in.h:40
 msgid "Change software source parameters"
 msgstr "Zmiana parametrów źródła oprogramowania"
 
@@ -1828,7 +1876,7 @@ msgstr "Zmiana parametrów źródła oprogramowania"
 #. - Paranoid users (or parents!) can change this to 'auth_admin' or
 #. 'auth_admin_keep'.
 #.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:46
+#: ../policy/org.freedesktop.packagekit.policy.in.h:47
 msgid "Install signed package"
 msgstr "Instalacja podpisanego pakietu"
 
@@ -1838,7 +1886,7 @@ msgstr "Instalacja podpisanego pakietu"
 #. password would be a massive security hole.
 #. - This is not retained as each package should be authenticated.
 #.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:53
+#: ../policy/org.freedesktop.packagekit.policy.in.h:54
 msgid "Install untrusted local file"
 msgstr "Instalacja niezaufanego lokalnego pliku"
 
@@ -1846,7 +1894,7 @@ msgstr "Instalacja niezaufanego lokalnego pliku"
 #. - Normal users do not require admin authentication to refresh the
 #. cache, as this doesn't actually install or remove software.
 #.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:58
+#: ../policy/org.freedesktop.packagekit.policy.in.h:59
 msgid "Refresh system sources"
 msgstr "Odświeżenie źródeł systemu"
 
@@ -1857,7 +1905,7 @@ msgstr "Odświeżenie źródeł systemu"
 #. try to rebind drivers in use, for instance security authentication
 #. devices.
 #.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:66
+#: ../policy/org.freedesktop.packagekit.policy.in.h:67
 msgid "Reload a device"
 msgstr "Ponowne wczytanie urzÄ…dzenia"
 
@@ -1870,7 +1918,7 @@ msgstr "Ponowne wczytanie urzÄ…dzenia"
 #. be removed. If this is not possible, change this authentication to
 #. 'auth_admin'.
 #.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:76
+#: ../policy/org.freedesktop.packagekit.policy.in.h:77
 msgid "Remove package"
 msgstr "Usunięcie pakietu"
 
@@ -1879,7 +1927,7 @@ msgstr "Usunięcie pakietu"
 #. as this will change a large number of packages, and could expose the
 #. system to previously patched security vulnerabilities.
 #.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:82
+#: ../policy/org.freedesktop.packagekit.policy.in.h:83
 msgid "Rollback to a previous transaction"
 msgstr "Przywrócenie poprzedniej transakcji"
 
@@ -1887,7 +1935,7 @@ msgstr "Przywrócenie poprzedniej transakcji"
 #. - Normal users do not require admin authentication to set the proxy
 #. used for downloading packages.
 #.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:87
+#: ../policy/org.freedesktop.packagekit.policy.in.h:88
 msgid "Set network proxy"
 msgstr "Ustawienie pośrednika sieciowego"
 
@@ -1897,7 +1945,7 @@ msgstr "Ustawienie pośrednika sieciowego"
 #. without a secure authentication.
 #. - This is not kept as each package should be authenticated.
 #.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:94
+#: ../policy/org.freedesktop.packagekit.policy.in.h:95
 msgid "Trust a key used for signing packages"
 msgstr "Oznaczenie klucza używanego do podpisywania pakietów jako zaufanego"
 
@@ -1908,10 +1956,19 @@ msgstr "Oznaczenie klucza używanego do podpisywania pakietów jako zaufanego"
 #. - Changing this to anything other than 'yes' will break unattended
 #. updates.
 #.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:102
+#: ../policy/org.freedesktop.packagekit.policy.in.h:103
 msgid "Update packages"
 msgstr "Aktualizacja pakietów"
 
+#. SECURITY:
+#. - Normal users require admin authentication to upgrade the disto as
+#. this can make the system unbootable or stop other applications from
+#. working.
+#.
+#: ../policy/org.freedesktop.packagekit.policy.in.h:109
+msgid "Upgrade System"
+msgstr "Aktualizacja systemu"
+
 #. TRANSLATORS: failed due to DBus security
 #: ../src/pk-main.c:87
 msgid "Startup failed due to security policies on this machine."
@@ -1979,7 +2036,7 @@ msgid "Cannot connect to the system bus"
 msgstr "Nie można połączyć się z magistralą systemową"
 
 #. TRANSLATORS: cannot register on system bus, unknown reason -- geeky error follows
-#: ../src/pk-main.c:318
+#: ../src/pk-main.c:316
 msgid "Error trying to start:"
 msgstr "Błąd podczas próbowania uruchomienia:"
 
@@ -2025,31 +2082,3 @@ msgstr "Wiele pakietów"
 #: ../src/pk-polkit-action-lookup.c:339
 msgid "Only trusted"
 msgstr "Tylko zaufane"
-
-#. TRANSLATORS: turn on all debugging
-#: ../src/egg-debug.c:388
-msgid "Show debugging information for all files"
-msgstr "Wyświetla informacje o debugowaniu dla wszystkich plików"
-
-#. TRANSLATORS: a list of modules to debug
-#: ../src/egg-debug.c:458
-msgid "Debug these specific modules"
-msgstr "Debuguje podane moduły"
-
-#. TRANSLATORS: a list of functions to debug
-#: ../src/egg-debug.c:461
-msgid "Debug these specific functions"
-msgstr "Debuguje podane funkcje"
-
-#. TRANSLATORS: save to a log
-#: ../src/egg-debug.c:464
-msgid "Log debugging data to a file"
-msgstr "Zapisuje dane debugowania do pliku"
-
-#: ../src/egg-debug.c:468
-msgid "Debugging Options"
-msgstr "Opcje debugowania"
-
-#: ../src/egg-debug.c:468
-msgid "Show debugging options"
-msgstr "Wyświetla opcje debugowania"
commit 56349d1e761f31f826cb6929cad1914c00f56a64
Merge: c510a4d... b5d0494...
Author: Daniel Nicoletti <dantti85-pk at yahoo.com.br>
Date:   Wed Nov 24 11:19:47 2010 -0200

    Merge branch 'master' of gitorious.org:packagekit/packagekit

commit b5d0494de6f77f14966420e71de8e30700d9b536
Author: Richard Hughes <richard at hughsie.com>
Date:   Wed Nov 24 12:30:50 2010 +0000

    trivial: add the transifex auth token

diff --git a/README.transifex b/README.transifex
new file mode 100644
index 0000000..56471ba
--- /dev/null
+++ b/README.transifex
@@ -0,0 +1,11 @@
+Transifex.net Token Verification 
+=================================
+
+The list of tokens bellow guarantee the respective users to be able to enable 
+submission on components using the following repository url:
+
+git at gitorious.org:packagekit/packagekit.git
+
+Tokens:
+
+sLv8aEbptmMyFt2R2Rd37myY2Vg2zN43 / hughsie
commit 7cab600964210064268950273bbeb4551052126f
Author: Richard Hughes <richard at hughsie.com>
Date:   Tue Nov 16 14:00:45 2010 +0000

    yum: disable the Zif get-updates until depsolving is faster

diff --git a/backends/yum/pk-backend-yum.c b/backends/yum/pk-backend-yum.c
index 3c9bdd7..3d87b33 100644
--- a/backends/yum/pk-backend-yum.c
+++ b/backends/yum/pk-backend-yum.c
@@ -2282,6 +2282,7 @@ static gboolean
 pk_backend_get_updates_thread (PkBackend *backend)
 {
 #ifdef HAVE_ZIF
+#if 0
 	PkBitfield filters = (PkBitfield) pk_backend_get_uint (backend, "filters");
 	GPtrArray *store_array = NULL;
 	ZifState *state_local;
@@ -2456,6 +2457,7 @@ out:
 	if (store_array != NULL)
 		g_ptr_array_unref (store_array);
 #endif
+#endif
 	return TRUE;
 }
 
commit 8a322097936458e4d90e6d6891a85641d4f9ee20
Author: Zhang Qiang <qiang.z.zhang at intel.com>
Date:   Wed Nov 24 16:31:48 2010 +0800

    zypp: Fix a typo in get_zypp

diff --git a/backends/zypp/zypp-utils.cpp b/backends/zypp/zypp-utils.cpp
index c13975d..a5ce2d3 100644
--- a/backends/zypp/zypp-utils.cpp
+++ b/backends/zypp/zypp-utils.cpp
@@ -104,7 +104,7 @@ get_zypp (PkBackend *backend)
 		return NULL;
         } catch (const zypp::Exception &ex) {
 		pk_backend_error_code (backend, PK_ERROR_ENUM_INTERNAL_ERROR, ex.asUserString().c_str() );
-		return NULL
+		return NULL;
         }
 
 	return zypp;
commit 9507d582fc62aad74a5835b09f27cee2a2b68ea6
Author: Zhang Qiang <qiang.z.zhang at intel.com>
Date:   Wed Nov 24 16:21:29 2010 +0800

    zypp:Catch ZYppFactoryException in get_zypp
    
    This patch cache ZYppFactoryException in get_zypp, and sent init error
    to client, but not exit. Also add some check code to prevent some daemon
    crash issue, which occures zypper is running and you also just want to
    run packagekit at the same time.

diff --git a/backends/zypp/pk-backend-zypp.cpp b/backends/zypp/pk-backend-zypp.cpp
index ed30c43..29b171a 100644
--- a/backends/zypp/pk-backend-zypp.cpp
+++ b/backends/zypp/pk-backend-zypp.cpp
@@ -139,6 +139,13 @@ backend_get_requires_thread (PkBackend *backend)
 {
 	gchar **package_ids;
 	PkBitfield _filters = (PkBitfield) pk_backend_get_uint (backend, "filters");
+	zypp::ZYpp::Ptr zypp;
+
+	zypp = get_zypp (backend);
+	if (zypp == NULL){
+		pk_backend_finished (backend);
+		return FALSE;
+	}
 
 	package_ids = pk_backend_get_strv (backend, "package_ids");
 	if (!pk_package_ids_check (package_ids)) {
@@ -307,6 +314,10 @@ backend_get_depends_thread (PkBackend *backend)
 
 	zypp::ZYpp::Ptr zypp;
 	zypp = get_zypp (backend);
+	if (zypp == NULL){
+		pk_backend_finished (backend);
+		return FALSE;
+	}
 
 	g_debug ("get_depends with filter '%s'", pk_filter_bitfield_to_string (_filters));
 
@@ -463,6 +474,13 @@ static gboolean
 backend_get_details_thread (PkBackend *backend)
 {
 	gchar **package_ids;
+	zypp::ZYpp::Ptr zypp;
+
+	zypp = get_zypp (backend);
+	if (zypp == NULL){
+		pk_backend_finished (backend);
+		return FALSE;
+	}
 
 	package_ids = pk_backend_get_strv (backend, "package_ids");
 	if (!pk_package_ids_check (package_ids)) {
@@ -564,6 +582,13 @@ pk_backend_get_details (PkBackend *backend, gchar **package_ids)
 static gboolean
 backend_get_distro_upgrades_thread(PkBackend *backend)
 {
+	zypp::ZYpp::Ptr zypp;
+
+	zypp = get_zypp (backend);
+	if (zypp == NULL){
+		pk_backend_finished (backend);
+		return FALSE;
+	}
 	pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
 
 	// refresh the repos before checking for updates
@@ -657,6 +682,13 @@ static gboolean
 backend_get_updates_thread (PkBackend *backend)
 {
 	PkBitfield _filters = (PkBitfield) pk_backend_get_uint (backend, "filters");
+	zypp::ZYpp::Ptr zypp;
+
+	zypp = get_zypp (backend);
+	if (zypp == NULL){
+		pk_backend_finished (backend);
+		return FALSE;
+	}
 
 	typedef std::set<zypp::PoolItem>::iterator pi_it_t;
 
@@ -729,6 +761,13 @@ static gboolean
 backend_install_files_thread (PkBackend *backend)
 {
 	gchar **full_paths;
+	zypp::ZYpp::Ptr zypp;
+
+	zypp = get_zypp (backend);
+	if (zypp == NULL){
+		pk_backend_finished (backend);
+		return FALSE;
+	}
 
 	full_paths = pk_backend_get_strv (backend, "full_paths");
 
@@ -861,6 +900,13 @@ static gboolean
 backend_get_update_detail_thread (PkBackend *backend)
 {
 	gchar **package_ids;
+	zypp::ZYpp::Ptr zypp;
+
+	zypp = get_zypp (backend);
+	if (zypp == NULL){
+		pk_backend_finished (backend);
+		return FALSE;
+	}
 
 	package_ids = pk_backend_get_strv (backend, "package_ids");
 	if (package_ids == NULL) {
@@ -951,6 +997,13 @@ pk_backend_get_update_detail (PkBackend *backend, gchar **package_ids)
 static gboolean
 backend_update_system_thread (PkBackend *backend)
 {
+	zypp::ZYpp::Ptr zypp;
+
+	zypp = get_zypp (backend);
+	if (zypp == NULL){
+		pk_backend_finished (backend);
+		return FALSE;
+	}
 	pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
 	pk_backend_set_percentage (backend, 0);
 
@@ -1015,6 +1068,10 @@ backend_install_packages_thread (PkBackend *backend)
 
 	zypp::ZYpp::Ptr zypp;
 	zypp = get_zypp (backend);
+	if (zypp == NULL){
+		pk_backend_finished (backend);
+		return FALSE;
+	}
 
 	package_ids = pk_backend_get_strv (backend, "package_ids");
 	if (!pk_package_ids_check (package_ids)) {
@@ -1167,6 +1224,10 @@ backend_remove_packages_thread (PkBackend *backend)
 	zypp::Target_Ptr target;
 	zypp::ZYpp::Ptr zypp;
 	zypp = get_zypp (backend);
+	if (zypp == NULL){
+		pk_backend_finished (backend);
+		return FALSE;
+	}
 
 	target = zypp->target ();
 
@@ -1245,6 +1306,13 @@ backend_resolve_thread (PkBackend *backend)
 {
 	gchar **package_ids = pk_backend_get_strv (backend, "package_ids");
 	PkBitfield _filters = (PkBitfield) pk_backend_get_uint (backend, "filters");
+	zypp::ZYpp::Ptr zypp;
+
+	zypp = get_zypp (backend);
+	if (zypp == NULL){
+		pk_backend_finished (backend);
+		return FALSE;
+	}
 
 	pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
 
@@ -1323,7 +1391,13 @@ backend_find_packages_thread (PkBackend *backend)
 	gchar **values;
 	const gchar *search;
 	guint mode;
-	//GList *list = NULL;
+	zypp::ZYpp::Ptr zypp;
+
+	zypp = get_zypp (backend);
+	if (zypp == NULL){
+		pk_backend_finished (backend);
+		return FALSE;
+	}
 
 	values = pk_backend_get_strv (backend, "search");
 	search = values[0];  //Fixme - support the possible multiple values (logical OR search)
@@ -1405,6 +1479,13 @@ backend_search_group_thread (PkBackend *backend)
 {
 	gchar **values;
 	const gchar *group;
+	zypp::ZYpp::Ptr zypp;
+
+	zypp = get_zypp (backend);
+	if (zypp == NULL){
+		pk_backend_finished (backend);
+		return FALSE;
+	}
 
 	values = pk_backend_get_strv (backend, "search");
 	group = values[0];  //Fixme - add support for possible multiple values.
@@ -1466,7 +1547,13 @@ pk_backend_search_files (PkBackend *backend, PkBitfield filters, gchar **values)
 void
 pk_backend_get_repo_list (PkBackend *backend, PkBitfield filters)
 {
-	//FIXME - use the new param - filter
+	zypp::ZYpp::Ptr zypp;
+
+	zypp = get_zypp (backend);
+	if (zypp == NULL){
+		pk_backend_finished (backend);
+		return;
+	}
 
 	pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
 
@@ -1506,6 +1593,13 @@ pk_backend_get_repo_list (PkBackend *backend, PkBitfield filters)
 void
 pk_backend_repo_enable (PkBackend *backend, const gchar *rid, gboolean enabled)
 {
+	zypp::ZYpp::Ptr zypp;
+
+	zypp = get_zypp (backend);
+	if (zypp == NULL){
+		pk_backend_finished (backend);
+		return;
+	}
 	pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
 
 	zypp::RepoManager manager;
@@ -1537,6 +1631,13 @@ static gboolean
 backend_get_files_thread (PkBackend *backend)
 {
 	gchar **package_ids;
+	zypp::ZYpp::Ptr zypp;
+
+	zypp = get_zypp (backend);
+	if (zypp == NULL){
+		pk_backend_finished (backend);
+		return FALSE;
+	}
 
 	package_ids = pk_backend_get_strv (backend, "package_ids");
 	if (!pk_package_ids_check (package_ids)) {
@@ -1616,6 +1717,13 @@ pk_backend_get_files(PkBackend *backend, gchar **package_ids)
 static gboolean
 backend_get_packages_thread (PkBackend *backend)
 {
+	zypp::ZYpp::Ptr zypp;
+
+	zypp = get_zypp (backend);
+	if (zypp == NULL){
+		pk_backend_finished (backend);
+		return FALSE;
+	}
 	pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
 
 	std::vector<zypp::sat::Solvable> v;
@@ -1645,6 +1753,13 @@ backend_update_packages_thread (PkBackend *backend)
 {
 	gboolean retval;
 	gchar **package_ids;
+	zypp::ZYpp::Ptr zypp;
+
+	zypp = get_zypp (backend);
+	if (zypp == NULL){
+		pk_backend_finished (backend);
+		return FALSE;
+	}
 	zypp::ResPool pool = zypp_build_pool (backend, TRUE);
 	/* FIXME: support only_trusted */
 	package_ids = pk_backend_get_strv (backend, "package_ids");
@@ -1709,6 +1824,13 @@ backend_repo_set_data_thread (PkBackend *backend)
 	const gchar *repo_id;
 	const gchar *parameter;
 	const gchar *value;
+	zypp::ZYpp::Ptr zypp;
+
+	zypp = get_zypp (backend);
+	if (zypp == NULL){
+		pk_backend_finished (backend);
+		return FALSE;
+	}
 
 	repo_id = pk_backend_get_string (backend, "repo_id");
 	parameter = pk_backend_get_string (backend, "parameter");
@@ -1840,6 +1962,13 @@ pk_backend_repo_set_data (PkBackend *backend, const gchar *repo_id, const gchar
 static gboolean
 backend_what_provides_thread (PkBackend *backend)
 {
+	zypp::ZYpp::Ptr zypp;
+
+	zypp = get_zypp (backend);
+	if (zypp == NULL){
+		pk_backend_finished (backend);
+		return FALSE;
+	}
 	pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
 	gchar **values = pk_backend_get_strv (backend, "search");
 	const gchar *search = values[0]; //Fixme - support possible multiple search values (logical OR)
diff --git a/backends/zypp/zypp-utils.cpp b/backends/zypp/zypp-utils.cpp
index e23d529..c13975d 100644
--- a/backends/zypp/zypp-utils.cpp
+++ b/backends/zypp/zypp-utils.cpp
@@ -99,8 +99,12 @@ get_zypp (PkBackend *backend)
 
 		        initialized = TRUE;
 	        }
+	} catch (const zypp::ZYppFactoryException &ex) {
+		pk_backend_error_code (backend, PK_ERROR_ENUM_FAILED_INITIALIZATION, ex.asUserString().c_str() );
+		return NULL;
         } catch (const zypp::Exception &ex) {
-		g_error ("%s", ex.asUserString ().c_str ());
+		pk_backend_error_code (backend, PK_ERROR_ENUM_INTERNAL_ERROR, ex.asUserString().c_str() );
+		return NULL
         }
 
 	return zypp;
@@ -1107,6 +1111,8 @@ zypp_refresh_cache (PkBackend *backend, gboolean force)
 {
 	// This call is needed as it calls initializeTarget which appears to properly setup the keyring
 	zypp::ZYpp::Ptr zypp = get_zypp (backend);
+        if (zypp == NULL)
+		return  FALSE;
 	zypp::filesystem::Pathname pathname(pk_backend_get_root (backend));
 	// This call is needed to refresh system rpmdb status while refresh cache
 	zypp->finishTarget ();
commit 31ece5e07076383534ea2e2e10800e5f7038fdf4
Author: Daniel Nicoletti <dantti85-pk at yahoo.com.br>
Date:   Wed Nov 24 01:27:40 2010 -0200

    aptcc: first bits to a working gstreamer matcher

diff --git a/backends/aptcc/Makefile.am b/backends/aptcc/Makefile.am
index e78676f..04e5b6f 100644
--- a/backends/aptcc/Makefile.am
+++ b/backends/aptcc/Makefile.am
@@ -9,6 +9,7 @@ libpk_backend_aptcc_la_SOURCES = pkg_acqfile.cpp \
 				 apt-utils.cpp \
 				 acqprogress.cpp \
 				 matcher.cpp \
+				 gstMatcher.cpp \
 				 rsources.cpp \
 				 apt.cpp \
 				 pk-backend-aptcc.cpp
@@ -23,6 +24,7 @@ aptconf_DATA = 20packagekit
 EXTRA_DIST = 20packagekit \
 	     apt.h \
 	     apt-utils.h \
+	     gstMatcher.h \
 	     matcher.h \
 	     aptcc_show_broken.h \
 	     acqprogress.h \
diff --git a/backends/aptcc/apt.cpp b/backends/aptcc/apt.cpp
index 559496a..89cbc63 100644
--- a/backends/aptcc/apt.cpp
+++ b/backends/aptcc/apt.cpp
@@ -46,9 +46,6 @@
 #include <dirent.h>
 #include <assert.h>
 
-// Gstreamer stuff
-// #include <gst/gst.h>
-
 aptcc::aptcc(PkBackend *backend, bool &cancel)
 	:
 	packageRecords(0),
@@ -478,8 +475,6 @@ void aptcc::povidesCodec(vector<pair<pkgCache::PkgIterator, pkgCache::VerIterato
 			cout << opt << endl;
 			regex_t sre;
 			gchar *itemreg;
-// 			GstCaps *caps;
-// 			caps = gst_caps_new_simple(data.c_str(), opt.c_str());
 			itemreg = g_strdup_printf("^%s:.* %s\\(, %s\\(,.*\\|;.*\\|$\\)\\|;\\|$\\)",
 						  type.c_str(),
 						  data.c_str(),
diff --git a/backends/aptcc/gstMatcher.cpp b/backends/aptcc/gstMatcher.cpp
new file mode 100644
index 0000000..eb0f77d
--- /dev/null
+++ b/backends/aptcc/gstMatcher.cpp
@@ -0,0 +1,109 @@
+// apt.cc
+//
+//  Copyright 1999-2008 Daniel Burrows
+//  Copyright (C) 2009 Daniel Nicoletti <dantti85-pk at yahoo.com.br>
+//
+//  This program is free software; you can redistribute it and/or modify
+//  it under the terms of the GNU General Public License as published by
+//  the Free Software Foundation; either version 2 of the License, or
+//  (at your option) any later version.
+//
+//  This program is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+//  GNU General Public License for more details.
+//
+//  You should have received a copy of the GNU General Public License
+//  along with this program; see the file COPYING.  If not, write to
+//  the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+//  Boston, MA 02111-1307, USA.
+
+#include "gstMatcher.h"
+#include <stdio.h>
+#include <iostream>
+
+#include <gst/gst.h>
+
+gstMatcher::gstMatcher(gchar **values)
+{
+    // The search term from PackageKit daemon:
+    // gstreamer0.10(urisource-foobar)
+    // gstreamer0.10(decoder-audio/x-wma)(wmaversion=3)
+
+    // The optional field is more complicated, it can have
+    // types, like int, float...
+    // TODO use some GST helper :/
+    regex_t pkre;
+
+    const char *pkreg = "^gstreamer\\([0-9\\.]\\+\\)"
+                "(\\(encoder\\|decoder\\|urisource\\|urisink\\|element\\)-\\([^)]\\+\\))"
+                "\\((.*)\\)\\?";
+
+    if(regcomp(&pkre, pkreg, 0) != 0) {
+        g_debug("Regex compilation error: ", pkreg);
+        return;
+    }
+
+    gchar *value;
+    vector<pair<string, regex_t> > search;
+    for (uint i = 0; i < g_strv_length(values); i++) {
+        value = values[i];
+        regmatch_t matches[5];
+        if (regexec(&pkre, value, 5, matches, 0) == 0) {
+            string version, type, data, opt;
+            version = "\nGstreamer-Version: ";
+            version.append(string(value, matches[1].rm_so, matches[1].rm_eo - matches[1].rm_so));
+            type = string(value, matches[2].rm_so, matches[2].rm_eo - matches[2].rm_so);
+            data = string(value, matches[3].rm_so, matches[3].rm_eo - matches[3].rm_so);
+            if (matches[4].rm_so != -1) {
+                // remove the '(' ')' that the regex matched
+                opt = string(value, matches[4].rm_so + 1, matches[4].rm_eo - matches[4].rm_so - 2);
+            } else {
+                // if the 4th element did not match match everything
+                opt = ".*";
+            }
+
+            if (type.compare("encoder") == 0) {
+                type = "Gstreamer-Encoders";
+            } else if (type.compare("decoder") == 0) {
+                type = "Gstreamer-Decoders";
+            } else if (type.compare("urisource") == 0) {
+                type = "Gstreamer-Uri-Sources";
+            } else if (type.compare("urisink") == 0) {
+                type = "Gstreamer-Uri-Sinks";
+            } else if (type.compare("element") == 0) {
+                type = "Gstreamer-Elements";
+            }
+            cout << version << endl;
+            cout << type << endl;
+            cout << data << endl;
+            cout << opt << endl;
+            regex_t sre;
+            gchar *itemreg;
+            GstCaps *caps;
+            caps = gst_caps_new_simple(data.c_str(), opt.c_str());
+            itemreg = g_strdup_printf("^%s:.* %s\\(, %s\\(,.*\\|;.*\\|$\\)\\|;\\|$\\)",
+                          type.c_str(),
+                          data.c_str(),
+                          opt.c_str());
+            if(regcomp(&sre, itemreg, REG_NEWLINE | REG_NOSUB) == 0) {
+                search.push_back(pair<string, regex_t>(version, sre));
+            } else {
+                g_debug("Search regex compilation error: ", itemreg);
+            }
+            g_free(itemreg);
+        } else {
+            g_debug("Did not match: %s", value);
+        }
+    }
+    regfree(&pkre);
+
+    // If nothing matched just return
+    if (search.size() == 0) {
+        return;
+    }
+}
+
+gstMatcher::~gstMatcher()
+{
+}
diff --git a/backends/aptcc/gstMatcher.h b/backends/aptcc/gstMatcher.h
new file mode 100644
index 0000000..2645702
--- /dev/null
+++ b/backends/aptcc/gstMatcher.h
@@ -0,0 +1,43 @@
+// apt.h  -*-c++-*-
+//
+//  Copyright 1999-2002, 2004-2005, 2007-2008 Daniel Burrows
+//  Copyright (C) 2009 Daniel Nicoletti <dantti85-pk at yahoo.com.br>
+//
+//  This program is free software; you can redistribute it and/or modify
+//  it under the terms of the GNU General Public License as published by
+//  the Free Software Foundation; either version 2 of the License, or
+//  (at your option) any later version.
+//
+//  This program is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+//  GNU General Public License for more details.
+//
+//  You should have received a copy of the GNU General Public License
+//  along with this program; see the file COPYING.  If not, write to
+//  the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+//  Boston, MA 02111-1307, USA.
+//
+
+#ifndef GST_MATCHER_H
+#define GST_MATCHER_H
+
+#include <regex.h>
+
+#include <glib.h>
+
+#include <vector>
+#include <map>
+#include <string>
+
+using namespace std;
+
+class gstMatcher
+{
+public:
+	gstMatcher(gchar **values);
+	~gstMatcher();
+
+};
+
+#endif
diff --git a/backends/aptcc/pk-backend-aptcc.cpp b/backends/aptcc/pk-backend-aptcc.cpp
index c46e1c8..3659b01 100644
--- a/backends/aptcc/pk-backend-aptcc.cpp
+++ b/backends/aptcc/pk-backend-aptcc.cpp
@@ -1058,9 +1058,9 @@ backend_search_package_thread (PkBackend *backend)
 				continue;
 			}
 
+			pkgCache::VerIterator ver = m_apt->find_ver(pkg);
 			if (m_matcher->matches(pkg.Name())) {
 				// Don't insert virtual packages instead add what it provides
-				pkgCache::VerIterator ver = m_apt->find_ver(pkg);
 				if (ver.end() == false) {
 					output.push_back(pair<pkgCache::PkgIterator, pkgCache::VerIterator>(pkg, ver));
 				} else {
@@ -1079,12 +1079,9 @@ backend_search_package_thread (PkBackend *backend)
 				}
 			} else {
 				// Don't insert virtual packages instead add what it provides
-				pkgCache::VerIterator ver = m_apt->find_ver(pkg);
 				if (ver.end() == false) {
-					if (m_matcher->matches(get_default_short_description(ver, m_apt->packageRecords))
-					    || m_matcher->matches(get_default_long_description(ver, m_apt->packageRecords))
-					    || m_matcher->matches(get_short_description(ver, m_apt->packageRecords))
-					    || m_matcher->matches(get_long_description(ver, m_apt->packageRecords)))
+					if (m_matcher->matches(get_short_description(ver, m_apt->packageRecords))
+					 || m_matcher->matches(get_long_description(ver, m_apt->packageRecords)))
 					{
 						output.push_back(pair<pkgCache::PkgIterator, pkgCache::VerIterator>(pkg, ver));
 					}
@@ -1098,11 +1095,8 @@ backend_search_package_thread (PkBackend *backend)
 						{
 							// we add the package now because we will need to
 							// remove duplicates later anyway
-							if (m_matcher->matches(Prv.OwnerPkg().Name())
-							    || m_matcher->matches(get_default_short_description(ver, m_apt->packageRecords))
-							    || m_matcher->matches(get_default_long_description(ver, m_apt->packageRecords))
-							    || m_matcher->matches(get_short_description(ver, m_apt->packageRecords))
-							    || m_matcher->matches(get_long_description(ver, m_apt->packageRecords)))
+							if (m_matcher->matches(get_short_description(ver, m_apt->packageRecords))
+							 || m_matcher->matches(get_long_description(ver, m_apt->packageRecords)))
 							{
 								output.push_back(pair<pkgCache::PkgIterator, pkgCache::VerIterator>(Prv.OwnerPkg(), ver));
 							}
commit 1abc688aed199cf91061ff614fd6d8bdbabffbb6
Author: Daniel Nicoletti <dantti85-pk at yahoo.com.br>
Date:   Tue Nov 23 23:57:13 2010 -0200

    aptcc: link aptcc to gstreamer

diff --git a/backends/aptcc/Makefile.am b/backends/aptcc/Makefile.am
index 087175b..e78676f 100644
--- a/backends/aptcc/Makefile.am
+++ b/backends/aptcc/Makefile.am
@@ -13,9 +13,9 @@ libpk_backend_aptcc_la_SOURCES = pkg_acqfile.cpp \
 				 apt.cpp \
 				 pk-backend-aptcc.cpp
 libpk_backend_aptcc_la_LIBADD = -lcrypt $(PK_PLUGIN_LIBS)
-libpk_backend_aptcc_la_LDFLAGS = -module -avoid-version $(APTCC_LIBS) $(GST_LIBS)
+libpk_backend_aptcc_la_LDFLAGS = -module -avoid-version $(APTCC_LIBS) $(GSTREAMER_LIBS)
 libpk_backend_aptcc_la_CFLAGS = $(PK_PLUGIN_CFLAGS)
-libpk_backend_aptcc_la_CPPFLAGS = $(PK_PLUGIN_CFLAGS) $(APTCC_CFLAGS)
+libpk_backend_aptcc_la_CPPFLAGS = $(PK_PLUGIN_CFLAGS) $(APTCC_CFLAGS) $(GSTREAMER_CFLAGS)
 
 aptconfdir = ${SYSCONFDIR}/apt/apt.conf.d
 aptconf_DATA = 20packagekit
diff --git a/configure.ac b/configure.ac
index f499542..d044d05 100644
--- a/configure.ac
+++ b/configure.ac
@@ -671,7 +671,10 @@ if test x$enable_aptcc = xyes; then
 	AC_SUBST(APTCC_CFLAGS)
 	AC_SUBST(APTCC_LIBS)
 
-	AC_CHECK_LIB([gstreamer-0.10], [gst_init], AC_SUBST([GST_LIBS], [`pkg-config –libs gstreamer-0.10`]), AC_MSG_ERROR([Gstreamer-0.10 not found], [2]))
+	PKG_CHECK_MODULES(GSTREAMER, gstreamer-0.10 gstreamer-base-0.10 gstreamer-plugins-base-0.10,,
+					[AC_MSG_ERROR([Can't find the gstreamer libraries -- please install libgstreamermm-0.10-dev])])
+	AC_SUBST(GSTREAMER_CFLAGS)
+	AC_SUBST(GSTREAMER_LIBS)
 
 	AC_MSG_CHECKING([whether apt includes the automatic dependency removal patch (required)])
 
commit 493962f8a4e3fa368500b38574ea7f74bb107fa2
Author: fri <pavelfric at seznam.cz>
Date:   Tue Nov 23 17:46:00 2010 +0000

    l10n: Updated Czech (cs) translation to 100%
    
    New status: 375 messages complete with 0 fuzzies and 0 untranslated.
    
    Transmitted-via: Transifex (www.transifex.net).

diff --git a/po/cs.po b/po/cs.po
index af4b089..0658394 100644
--- a/po/cs.po
+++ b/po/cs.po
@@ -4,14 +4,14 @@
 #
 # Vojtech Smejkal <smejkalv at gmail.com>, 2008.
 # Adam Pribyl <pribyl at lowlevel.cz>, 2008.
-# Pavel Frix <fripohled.blogspot.com>, 2010.
+# Pavel Fric <fripohled.blogspot.com>, 2010.
 msgid ""
 msgstr ""
 "Project-Id-Version: packagekit.master.cs\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2010-11-21 07:25+0000\n"
-"PO-Revision-Date: 2010-11-21 18:00+0100\n"
-"Last-Translator: Pavel Frix <fripohled.blogspot.com>\n"
+"PO-Revision-Date: 2010-11-21 20:28+0100\n"
+"Last-Translator: Pavel Fric <fripohled.blogspot.com>\n"
 "Language-Team: Czech <fedora-cs-list at redhat.com>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
commit 1202584b683b58b8c37bcdc74ad4f80103bfb9cd
Author: Cheng-Chia Tseng <pswo10680 at gmail.com>
Date:   Tue Nov 23 06:25:06 2010 +0000

    l10n: Updated Chinese (Taiwan) (zh_TW) translation to 100%
    
    New status: 375 messages complete with 0 fuzzies and 0 untranslated.
    
    Transmitted-via: Transifex (www.transifex.net).

diff --git a/po/zh_TW.po b/po/zh_TW.po
index 01be68b..f75178b 100644
--- a/po/zh_TW.po
+++ b/po/zh_TW.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: packagekit.master\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-08-12 01:24+0000\n"
-"PO-Revision-Date: 2010-08-17 13:10+0800\n"
+"POT-Creation-Date: 2010-11-22 07:19+0000\n"
+"PO-Revision-Date: 2010-11-23 14:24+0800\n"
 "Last-Translator: Cheng-Chia Tseng <pswo10680 at gmail.com>\n"
 "Language-Team: chinese-l10n <chinese-l10n at googlegroups.com>\n"
 "MIME-Version: 1.0\n"
@@ -19,115 +19,119 @@ msgstr ""
 
 #. TRANSLATORS: this is an atomic transaction
 #. TRANSLATORS: the role is the point of the transaction, e.g. update-system
-#: ../client/pk-console.c:176 ../client/pk-console.c:598
+#: ../client/pk-console.c:174
+#: ../client/pk-console.c:596
 msgid "Transaction"
 msgstr "處理事項"
 
 #. TRANSLATORS: this is the time the transaction was started in system timezone
-#: ../client/pk-console.c:178
+#: ../client/pk-console.c:176
 msgid "System time"
 msgstr "系統時間"
 
 #. TRANSLATORS: this is if the transaction succeeded or not
-#: ../client/pk-console.c:180
+#: ../client/pk-console.c:178
 msgid "Succeeded"
 msgstr "成功"
 
-#: ../client/pk-console.c:180
+#: ../client/pk-console.c:178
 msgid "True"
 msgstr "True"
 
-#: ../client/pk-console.c:180
+#: ../client/pk-console.c:178
 msgid "False"
 msgstr "False"
 
 #. TRANSLATORS: this is the transactions role, e.g. "update-system"
 #. TRANSLATORS: the trasaction role, e.g. update-system
-#: ../client/pk-console.c:182 ../src/pk-polkit-action-lookup.c:332
+#: ../client/pk-console.c:180
+#: ../src/pk-polkit-action-lookup.c:332
 msgid "Role"
 msgstr "任務"
 
 #. TRANSLATORS: this is The duration of the transaction
-#: ../client/pk-console.c:187
+#: ../client/pk-console.c:185
 msgid "Duration"
-msgstr "持續時間"
+msgstr "時間"
 
-#: ../client/pk-console.c:187
+#: ../client/pk-console.c:185
 msgid "(seconds)"
 msgstr "(秒)"
 
 #. TRANSLATORS: this is The command line used to do the action
 #. TRANSLATORS: the command line of the thing that wants the authentication
-#: ../client/pk-console.c:191 ../src/pk-polkit-action-lookup.c:346
+#: ../client/pk-console.c:189
+#: ../src/pk-polkit-action-lookup.c:346
 msgid "Command line"
 msgstr "指令列"
 
 #. TRANSLATORS: this is the user ID of the user that started the action
-#: ../client/pk-console.c:193
+#: ../client/pk-console.c:191
 msgid "User ID"
 msgstr "使用者 ID"
 
 #. TRANSLATORS: this is the username, e.g. hughsie
-#: ../client/pk-console.c:200
+#: ../client/pk-console.c:198
 msgid "Username"
 msgstr "使用者名稱"
 
 #. TRANSLATORS: this is the users real name, e.g. "Richard Hughes"
-#: ../client/pk-console.c:204
+#: ../client/pk-console.c:202
 msgid "Real name"
 msgstr "真實名稱"
 
-#: ../client/pk-console.c:212
+#: ../client/pk-console.c:210
 msgid "Affected packages:"
 msgstr "受影響的套件:"
 
-#: ../client/pk-console.c:214
+#: ../client/pk-console.c:212
 msgid "Affected packages: None"
 msgstr "受影響的套件:無"
 
 #. TRANSLATORS: this is the distro, e.g. Fedora 10
-#: ../client/pk-console.c:249
+#: ../client/pk-console.c:247
 msgid "Distribution"
 msgstr "發行版"
 
 #. TRANSLATORS: this is type of update, stable or testing
-#: ../client/pk-console.c:251
+#: ../client/pk-console.c:249
 msgid "Type"
 msgstr "é¡žåž‹"
 
 #. TRANSLATORS: this is any summary text describing the upgrade
 #. TRANSLATORS: this is the summary of the group
-#: ../client/pk-console.c:253 ../client/pk-console.c:292
+#: ../client/pk-console.c:251
+#: ../client/pk-console.c:290
 msgid "Summary"
 msgstr "摘要"
 
 #. TRANSLATORS: this is the group category name
-#: ../client/pk-console.c:281
+#: ../client/pk-console.c:279
 msgid "Category"
 msgstr "分類"
 
 #. TRANSLATORS: this is group identifier
-#: ../client/pk-console.c:283
+#: ../client/pk-console.c:281
 msgid "ID"
 msgstr "ID"
 
 #. TRANSLATORS: this is the parent group
-#: ../client/pk-console.c:286
+#: ../client/pk-console.c:284
 msgid "Parent"
 msgstr "親代"
 
 #. TRANSLATORS: this is the name of the parent group
-#: ../client/pk-console.c:289
+#: ../client/pk-console.c:287
 msgid "Name"
 msgstr "名稱"
 
 #. TRANSLATORS: this is preferred icon for the group
-#: ../client/pk-console.c:295
+#: ../client/pk-console.c:293
 msgid "Icon"
 msgstr "圖示"
 
 #. TRANSLATORS: this is a header for the package that can be updated
-#: ../client/pk-console.c:341
+#: ../client/pk-console.c:339
 msgid "Details about the update:"
 msgstr "關於更新的詳細資料:"
 
@@ -136,9 +140,10 @@ msgstr "關於更新的詳細資料:"
 #. TRANSLATORS: the package that is not signed by a known key
 #. TRANSLATORS: the package name that was trying to be installed
 #. TRANSLATORS: title, the names of the packages that the method is processing
-#: ../client/pk-console.c:347 ../client/pk-console.c:617
-#: ../lib/packagekit-glib2/pk-task-text.c:126
-#: ../lib/packagekit-glib2/pk-task-text.c:208
+#: ../client/pk-console.c:345
+#: ../client/pk-console.c:615
+#: ../lib/packagekit-glib2/pk-task-text.c:124
+#: ../lib/packagekit-glib2/pk-task-text.c:206
 #: ../src/pk-polkit-action-lookup.c:357
 msgid "Package"
 msgid_plural "Packages"
@@ -146,200 +151,200 @@ msgstr[0] "套件"
 msgstr[1] "套件"
 
 #. TRANSLATORS: details about the update, any packages that this update updates
-#: ../client/pk-console.c:350
+#: ../client/pk-console.c:348
 msgid "Updates"
 msgstr "æ›´æ–°"
 
 #. TRANSLATORS: details about the update, any packages that this update obsoletes
-#: ../client/pk-console.c:354
+#: ../client/pk-console.c:352
 msgid "Obsoletes"
 msgstr "廢棄"
 
 #. TRANSLATORS: details about the update, the vendor URLs
 #. TRANSLATORS: the vendor (e.g. vmware) that is providing the EULA
-#: ../client/pk-console.c:358 ../lib/packagekit-glib2/pk-task-text.c:211
+#: ../client/pk-console.c:356
+#: ../lib/packagekit-glib2/pk-task-text.c:209
 msgid "Vendor"
 msgstr "廠商"
 
 #. TRANSLATORS: details about the update, the bugzilla URLs
-#: ../client/pk-console.c:362
+#: ../client/pk-console.c:360
 msgid "Bugzilla"
 msgstr "Bugzilla"
 
 #. TRANSLATORS: details about the update, the CVE URLs
-#: ../client/pk-console.c:366
+#: ../client/pk-console.c:364
 msgid "CVE"
 msgstr "CVE"
 
 #. TRANSLATORS: details about the update, if the package requires a restart
-#: ../client/pk-console.c:370
+#: ../client/pk-console.c:368
 msgid "Restart"
 msgstr "重新啟動"
 
 #. TRANSLATORS: details about the update, any description of the update
-#: ../client/pk-console.c:374
+#: ../client/pk-console.c:372
 msgid "Update text"
 msgstr "更新文字"
 
 #. TRANSLATORS: details about the update, the changelog for the package
-#: ../client/pk-console.c:378
+#: ../client/pk-console.c:376
 msgid "Changes"
 msgstr "變更"
 
 #. TRANSLATORS: details about the update, the ongoing state of the update
-#: ../client/pk-console.c:382
+#: ../client/pk-console.c:380
 msgid "State"
 msgstr "狀態"
 
 #. TRANSLATORS: details about the update, date the update was issued
-#: ../client/pk-console.c:386
+#: ../client/pk-console.c:384
 msgid "Issued"
 msgstr "已發佈"
 
 #. TRANSLATORS: details about the update, date the update was updated
 #. TRANSLATORS: The action of the package, in past tense
-#: ../client/pk-console.c:390 ../lib/packagekit-glib2/pk-console-shared.c:517
+#: ../client/pk-console.c:388
+#: ../lib/packagekit-glib2/pk-console-shared.c:515
 msgid "Updated"
 msgstr "已更新"
 
 #. TRANSLATORS: if the repo is enabled
-#: ../client/pk-console.c:426
+#: ../client/pk-console.c:424
 msgid "Enabled"
 msgstr "已啟用"
 
 #. TRANSLATORS: if the repo is disabled
-#: ../client/pk-console.c:429
+#: ../client/pk-console.c:427
 msgid "Disabled"
 msgstr "已停用"
 
 #. TRANSLATORS: a package requires the system to be restarted
-#: ../client/pk-console.c:461
+#: ../client/pk-console.c:459
 msgid "System restart required by:"
 msgstr "系統重新啟動被此需求:"
 
 #. TRANSLATORS: a package requires the session to be restarted
-#: ../client/pk-console.c:464
+#: ../client/pk-console.c:462
 msgid "Session restart required:"
 msgstr "需要重新啟動作業階段:"
 
 #. TRANSLATORS: a package requires the system to be restarted due to a security update
-#: ../client/pk-console.c:467
+#: ../client/pk-console.c:465
 msgid "System restart (security) required by:"
 msgstr "系統重新啟動 (安全性) 被此需求:"
 
 #. TRANSLATORS: a package requires the session to be restarted due to a security update
-#: ../client/pk-console.c:470
+#: ../client/pk-console.c:468
 msgid "Session restart (security) required:"
 msgstr "需要重新啟動 (安全性) 作業階段:"
 
 #. TRANSLATORS: a package requires the application to be restarted
-#: ../client/pk-console.c:473
+#: ../client/pk-console.c:471
 msgid "Application restart required by:"
 msgstr "應用程式重新啟動被此需求:"
 
 #. TRANSLATORS: This a list of details about the package
-#: ../client/pk-console.c:508
+#: ../client/pk-console.c:506
 msgid "Package description"
 msgstr "套件描述"
 
 #. TRANSLATORS: This a message (like a little note that may be of interest) from the transaction
-#: ../client/pk-console.c:539
+#: ../client/pk-console.c:537
 msgid "Message:"
 msgstr "訊息:"
 
 #. TRANSLATORS: This where the package has no files
-#: ../client/pk-console.c:560
+#: ../client/pk-console.c:558
 msgid "No files"
 msgstr "無檔案"
 
 #. TRANSLATORS: This a list files contained in the package
-#: ../client/pk-console.c:565
+#: ../client/pk-console.c:563
 msgid "Package files"
 msgstr "套件檔案"
 
 #. TRANSLATORS: the percentage complete of the transaction
-#: ../client/pk-console.c:633
+#: ../client/pk-console.c:631
 msgid "Percentage"
 msgstr "百分比"
 
 #. TRANSLATORS: the status of the transaction (e.g. downloading)
-#: ../client/pk-console.c:651
+#: ../client/pk-console.c:649
 msgid "Status"
 msgstr "狀態"
 
 #. TRANSLATORS: the results from the transaction
-#: ../client/pk-console.c:680
+#: ../client/pk-console.c:678
 msgid "Results:"
 msgstr "結果:"
 
 #. TRANSLATORS: we failed to get any results, which is pretty fatal in my book
-#: ../client/pk-console.c:687
+#: ../client/pk-console.c:685
 msgid "Fatal error"
 msgstr "嚴重錯誤"
 
+#. TRANSLATORS: the user asked to update everything, but there is nothing that can be updated
+#: ../client/pk-console.c:701
+msgid "There are no packages to update."
+msgstr "沒有套件需要更新。"
+
 #. TRANSLATORS: the transaction failed in a way we could not expect
-#: ../client/pk-console.c:696
-#: ../contrib/command-not-found/pk-command-not-found.c:454
-#: ../contrib/command-not-found/pk-command-not-found.c:634
+#: ../client/pk-console.c:704
+#: ../contrib/command-not-found/pk-command-not-found.c:639
 msgid "The transaction failed"
 msgstr "處理事項失敗"
 
 #. TRANSLATORS: print a message when there are no updates
-#: ../client/pk-console.c:727
+#: ../client/pk-console.c:733
 msgid "There are no updates available at this time."
 msgstr "此刻尚無更新可用。"
 
-#: ../client/pk-console.c:750
+#: ../client/pk-console.c:756
 msgid "There are no upgrades available at this time."
 msgstr "此刻尚無升級可用。"
 
 #. TRANSLATORS: a package needs to restart their system
-#: ../client/pk-console.c:817
+#: ../client/pk-console.c:823
 msgid "Please restart the computer to complete the update."
 msgstr "請重新啟動電腦來完成更新。"
 
 #. TRANSLATORS: a package needs to restart the session
-#: ../client/pk-console.c:820
+#: ../client/pk-console.c:826
 msgid "Please logout and login to complete the update."
 msgstr "請登出並再次登入來完成更新。"
 
 #. TRANSLATORS: a package needs to restart their system (due to security)
-#: ../client/pk-console.c:823
-msgid ""
-"Please restart the computer to complete the update as important security "
-"updates have been installed."
+#: ../client/pk-console.c:829
+msgid "Please restart the computer to complete the update as important security updates have been installed."
 msgstr "因為重大安全性更新已安裝,請重新啟動電腦來完成更新動作。"
 
 #. TRANSLATORS: a package needs to restart the session (due to security)
-#: ../client/pk-console.c:826
-msgid ""
-"Please logout and login to complete the update as important security updates "
-"have been installed."
+#: ../client/pk-console.c:832
+msgid "Please logout and login to complete the update as important security updates have been installed."
 msgstr "因為重大安全性更新已安裝,請登出並再次登入來完成更新動作。"
 
 #. TRANSLATORS: The user used 'pkcon install dave.rpm' rather than 'pkcon install-local dave.rpm'
-#: ../client/pk-console.c:852
+#: ../client/pk-console.c:858
 #, c-format
-msgid ""
-"Expected package name, actually got file. Try using 'pkcon install-local %s' "
-"instead."
-msgstr ""
-"預期的套件名稱,已實際取得檔案。嘗試使用 'pkcon install-local %s' 來替代。"
+msgid "Expected package name, actually got file. Try using 'pkcon install-local %s' instead."
+msgstr "預期的套件名稱,已實際取得檔案。嘗試使用 'pkcon install-local %s' 來替代。"
 
 #. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console.c:860
+#: ../client/pk-console.c:866
 #, c-format
 msgid "This tool could not find any available package: %s"
 msgstr "此工具無法找到任何可用的套件:%s"
 
 #. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console.c:888
+#: ../client/pk-console.c:894
 #, c-format
 msgid "This tool could not find the installed package: %s"
 msgstr "此工具無法找到已安裝的套件:%s"
 
 #. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console.c:916 ../client/pk-console.c:944
+#: ../client/pk-console.c:922
+#: ../client/pk-console.c:950
 #, c-format
 msgid "This tool could not find the package: %s"
 msgstr "此工具無法找到這個套件:%s"
@@ -348,652 +353,680 @@ msgstr "此工具無法找到這個套件:%s"
 #. TRANSLATORS: There was an error getting the dependencies for the package. The detailed error follows
 #. TRANSLATORS: There was an error getting the details about the package. The detailed error follows
 #. TRANSLATORS: The package name was not found in any software sources. The detailed error follows
-#: ../client/pk-console.c:972 ../client/pk-console.c:1000
-#: ../client/pk-console.c:1028 ../client/pk-console.c:1056
-#: ../client/pk-console.c:1084
+#: ../client/pk-console.c:978
+#: ../client/pk-console.c:1006
+#: ../client/pk-console.c:1034
+#: ../client/pk-console.c:1062
+#: ../client/pk-console.c:1090
 #, c-format
 msgid "This tool could not find all the packages: %s"
 msgstr "此工具無法找到所有套件:%s"
 
 #. TRANSLATORS: This is when the daemon crashed, and we are up shit creek without a paddle
-#: ../client/pk-console.c:1113
+#: ../client/pk-console.c:1119
 msgid "The daemon crashed mid-transaction!"
 msgstr "幕後程式損壞了 mid-transaction!"
 
 #. TRANSLATORS: This is the header to the --help menu
-#: ../client/pk-console.c:1147
+#: ../client/pk-console.c:1153
 msgid "PackageKit Console Interface"
 msgstr "PackageKit 主控台介面"
 
 #. these are commands we can use with pkcon
-#: ../client/pk-console.c:1149
+#: ../client/pk-console.c:1155
 msgid "Subcommands:"
 msgstr "次指令:"
 
 #. TRANSLATORS: we keep a database updated with the time that an action was last executed
-#: ../client/pk-console.c:1228
+#: ../client/pk-console.c:1234
 msgid "Failed to get the time since this action was last completed"
 msgstr "無法取得此動作最後完成後的時間"
 
 #. TRANSLATORS: command line argument, just show the version string
-#: ../client/pk-console.c:1268 ../client/pk-monitor.c:373
+#: ../client/pk-console.c:1275
+#: ../client/pk-monitor.c:371
 msgid "Show the program version and exit"
 msgstr "顯示程式版本然後離開"
 
 #. TRANSLATORS: command line argument, use a filter to narrow down results
-#: ../client/pk-console.c:1271
+#: ../client/pk-console.c:1278
 msgid "Set the filter, e.g. installed"
 msgstr "設定過濾條件,例如:installed"
 
 #. TRANSLATORS: command line argument, use a non-standard install prefix
-#: ../client/pk-console.c:1274
+#: ../client/pk-console.c:1281
 msgid "Set the install root, e.g. '/' or '/mnt/ltsp'"
 msgstr "設定安裝的根目錄,例:'/' 或 '/mnt/ltsp'"
 
 #. TRANSLATORS: command line argument, work asynchronously
-#: ../client/pk-console.c:1277
+#: ../client/pk-console.c:1284
 msgid "Exit without waiting for actions to complete"
 msgstr "不等待動作完成便離開"
 
 #. command line argument, do we ask questions
-#: ../client/pk-console.c:1280
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:527
+#: ../client/pk-console.c:1287
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:525
 msgid "Install the packages without asking for confirmation"
 msgstr "安裝套件而不要詢問是否確認"
 
 #. TRANSLATORS: command line argument, this command is not a priority
-#: ../client/pk-console.c:1283
+#: ../client/pk-console.c:1290
 msgid "Run the command using idle network bandwidth and also using less power"
 msgstr "使用閒置的網路頻寬與較少的能源來執行指令"
 
 #. TRANSLATORS: command line argument, just output without fancy formatting
-#: ../client/pk-console.c:1286
-msgid ""
-"Print to screen a machine readable output, rather than using animated widgets"
+#: ../client/pk-console.c:1293
+msgid "Print to screen a machine readable output, rather than using animated widgets"
 msgstr "將機器可讀的輸出列印到畫面,而不是使用動畫化的小工具"
 
+#. TRANSLATORS: command line argument, just output without fancy formatting
+#: ../client/pk-console.c:1296
+msgid "The maximum metadata cache age. Use -1 for 'never'."
+msgstr "最大的中介資料快取時限。使用 -1 代表「永遠」。"
+
 #. TRANSLATORS: we failed to contact the daemon
-#: ../client/pk-console.c:1308
+#: ../client/pk-console.c:1333
 msgid "Failed to contact PackageKit"
 msgstr "聯絡 PackageKit 失敗"
 
 #. TRANSLATORS: The user specified an incorrect filter
-#: ../client/pk-console.c:1370
+#: ../client/pk-console.c:1381
 msgid "The proxy could not be set"
 msgstr "無法設定 proxy"
 
 #. TRANSLATORS: The user specified an incorrect filter
-#: ../client/pk-console.c:1382
+#: ../client/pk-console.c:1393
 msgid "The install root could not be set"
 msgstr "無法設定安裝的根目錄"
 
 #. TRANSLATORS: The user specified an incorrect filter
-#: ../client/pk-console.c:1394
+#: ../client/pk-console.c:1405
 msgid "The filter specified was invalid"
 msgstr "指定的過濾條件無效"
 
 #. TRANSLATORS: a search type can be name, details, file, etc
-#: ../client/pk-console.c:1413
+#: ../client/pk-console.c:1424
 msgid "A search type is required, e.g. name"
 msgstr "需要選取搜尋類型,例如:名稱"
 
 #. TRANSLATORS: the user needs to provide a search term
-#: ../client/pk-console.c:1420 ../client/pk-console.c:1432
-#: ../client/pk-console.c:1444 ../client/pk-console.c:1456
+#: ../client/pk-console.c:1431
+#: ../client/pk-console.c:1443
+#: ../client/pk-console.c:1455
+#: ../client/pk-console.c:1467
 msgid "A search term is required"
 msgstr "需要輸入搜尋用的關鍵詞"
 
 #. TRANSLATORS: the search type was provided, but invalid
-#: ../client/pk-console.c:1466
+#: ../client/pk-console.c:1477
 msgid "Invalid search type"
 msgstr "無效的搜尋類型"
 
 #. TRANSLATORS: the user did not specify what they wanted to install
-#: ../client/pk-console.c:1472
+#: ../client/pk-console.c:1483
 msgid "A package name to install is required"
 msgstr "需要有要安裝的套件名稱"
 
 #. TRANSLATORS: the user did not specify what they wanted to install
-#: ../client/pk-console.c:1481
+#: ../client/pk-console.c:1492
 msgid "A filename to install is required"
 msgstr "需要有要安裝的檔案名稱"
 
 #. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:1493
+#: ../client/pk-console.c:1503
 msgid "A type, key_id and package_id are required"
 msgstr "需要指定一個類型、key_id 以及 package_id"
 
 #. TRANSLATORS: the user did not specify what they wanted to remove
-#: ../client/pk-console.c:1504
+#: ../client/pk-console.c:1514
 msgid "A package name to remove is required"
 msgstr "需要有要移除的套件名稱"
 
 #. TRANSLATORS: the user did not specify anything about what to download or where
-#: ../client/pk-console.c:1513
+#: ../client/pk-console.c:1523
 msgid "A destination directory and the package names to download are required"
 msgstr "需要有目標資料夾與要下載的套件名稱"
 
 #. TRANSLATORS: the directory does not exist, so we can't continue
-#: ../client/pk-console.c:1520
+#: ../client/pk-console.c:1530
 msgid "Directory not found"
 msgstr "找不到目錄"
 
 #. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:1529
+#: ../client/pk-console.c:1539
 msgid "A licence identifier (eula-id) is required"
 msgstr "需要指定一個授權合約的辨識符號 (eula-id)"
 
 #. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:1540
+#: ../client/pk-console.c:1550
 msgid "A transaction identifier (tid) is required"
 msgstr "需要處理事項識別符 (tid)"
 
 #. TRANSLATORS: The user did not specify a package name
-#: ../client/pk-console.c:1561
+#: ../client/pk-console.c:1571
 msgid "A package name to resolve is required"
 msgstr "需要指定想解析套件的名稱"
 
 #. TRANSLATORS: The user did not specify a repository (software source) name
-#: ../client/pk-console.c:1572 ../client/pk-console.c:1583
+#: ../client/pk-console.c:1582
+#: ../client/pk-console.c:1593
 msgid "A repository name is required"
 msgstr "需要指定套件庫名稱"
 
 #. TRANSLATORS: The user didn't provide any data
-#: ../client/pk-console.c:1594
+#: ../client/pk-console.c:1604
 msgid "A repo name, parameter and value are required"
 msgstr "需要指定一個套件庫名稱、參數和值"
 
 #. TRANSLATORS: The user didn't specify what action to use
-#: ../client/pk-console.c:1611
+#: ../client/pk-console.c:1621
 msgid "An action, e.g. 'update-system' is required"
 msgstr "需要指定一項動作,例如:「update-system」"
 
 #. TRANSLATORS: The user specified an invalid action
-#: ../client/pk-console.c:1618
+#: ../client/pk-console.c:1628
 msgid "A correct role is required"
 msgstr "需要指定正確的任務"
 
 #. TRANSLATORS: The user did not provide a package name
 #. TRANSLATORS: This is when the user fails to supply the package name
-#: ../client/pk-console.c:1628 ../client/pk-console.c:1643
-#: ../client/pk-console.c:1652 ../client/pk-console.c:1672
-#: ../client/pk-console.c:1681 ../client/pk-generate-pack.c:316
+#: ../client/pk-console.c:1638
+#: ../client/pk-console.c:1652
+#: ../client/pk-console.c:1661
+#: ../client/pk-console.c:1681
+#: ../client/pk-console.c:1690
+#: ../client/pk-generate-pack.c:314
 msgid "A package name is required"
 msgstr "需要提供套件名稱"
 
 #. TRANSLATORS: each package "provides" certain things, e.g. mime(gstreamer-decoder-mp3), the user didn't specify it
-#: ../client/pk-console.c:1661
+#: ../client/pk-console.c:1670
 msgid "A package provide string is required"
 msgstr "需要指定套件提供字串"
 
+#. TRANSLATORS: The user did not provide a distro name
+#: ../client/pk-console.c:1714
+msgid "A distribution name is required"
+msgstr "需要有發行版名稱"
+
+#. TRANSLATORS: The user did not provide an upgrade type
+#: ../client/pk-console.c:1720
+msgid "An upgrade type is required, e.g. 'minimal', 'default' or 'complete'"
+msgstr "需要有升級類型,例如:「minimal」(最小)、「default」(預設)、「complete」(完整)"
+
 #. TRANSLATORS: The user tried to use an unsupported option on the command line
-#: ../client/pk-console.c:1742
+#: ../client/pk-console.c:1770
 #, c-format
 msgid "Option '%s' is not supported"
 msgstr "不支援 '%s' 選項"
 
 #. TRANSLATORS: Generic failure of what they asked to do
-#: ../client/pk-console.c:1752
+#: ../client/pk-console.c:1780
 msgid "Command failed"
 msgstr "指令失敗"
 
 #. TRANSLATORS: we can exclude certain packages (glibc) when we know they'll exist on the target
-#: ../client/pk-generate-pack.c:255
+#: ../client/pk-generate-pack.c:253
 msgid "Set the file name of dependencies to be excluded"
 msgstr "設定要排除的相依檔名"
 
 #. TRANSLATORS: the output location
-#: ../client/pk-generate-pack.c:258
+#: ../client/pk-generate-pack.c:256
 msgid "The output file or directory (the current directory is used if omitted)"
 msgstr "輸出檔或目錄 (若省略的話會使用目前的目錄)"
 
 #. TRANSLATORS: put a list of packages in the pack
-#: ../client/pk-generate-pack.c:261
+#: ../client/pk-generate-pack.c:259
 msgid "The package to be put into the service pack"
 msgstr "將放入服務包中的套件"
 
 #. TRANSLATORS: put all pending updates in the pack
-#: ../client/pk-generate-pack.c:264
+#: ../client/pk-generate-pack.c:262
 msgid "Put all updates available in the service pack"
 msgstr "將所有可用的套件放入服務包中"
 
 #. TRANSLATORS: This is when the user fails to supply the correct arguments
-#: ../client/pk-generate-pack.c:300
+#: ../client/pk-generate-pack.c:298
 msgid "Neither --package or --updates option selected."
 msgstr "--package 與 --updates 選項皆未選取。"
 
 #. TRANSLATORS: This is when the user fails to supply just one argument
-#: ../client/pk-generate-pack.c:308
+#: ../client/pk-generate-pack.c:306
 msgid "Both options selected."
 msgstr "兩個選項皆被選取。"
 
 #. TRANSLATORS: This is when the user fails to supply the output
-#: ../client/pk-generate-pack.c:324
+#: ../client/pk-generate-pack.c:322
 msgid "A output directory or file name is required"
 msgstr "需要輸出目錄或檔案名稱"
 
 #. TRANSLATORS: This is when the daemon is not-installed/broken and fails to startup
-#: ../client/pk-generate-pack.c:342
+#: ../client/pk-generate-pack.c:340
 msgid "The daemon failed to startup"
 msgstr "幕後程式啟動失敗"
 
 #. TRANSLATORS: This is when the backend doesn't have the capability to get-depends
 #. TRANSLATORS: This is when the backend doesn't have the capability to download
-#: ../client/pk-generate-pack.c:353 ../client/pk-generate-pack.c:359
+#: ../client/pk-generate-pack.c:351
+#: ../client/pk-generate-pack.c:357
 msgid "The package manager cannot perform this type of operation."
 msgstr "套件管理員無法執行這種類型的操作。"
 
 #. TRANSLATORS: This is when the distro didn't include libarchive support into PK
-#: ../client/pk-generate-pack.c:366
-msgid ""
-"Service packs cannot be created as PackageKit was not built with libarchive "
-"support."
+#: ../client/pk-generate-pack.c:364
+msgid "Service packs cannot be created as PackageKit was not built with libarchive support."
 msgstr "服務包無法建立,因為建構 PackageKit 時沒有啟用 libarchive 支援。"
 
 #. TRANSLATORS: the user specified an absolute path, but didn't get the extension correct
-#: ../client/pk-generate-pack.c:377
+#: ../client/pk-generate-pack.c:375
 msgid "If specifying a file, the service pack name must end with"
 msgstr "若要指定檔案的話,服務包名稱必須以此為結尾"
 
 #. TRANSLATORS: This is when file already exists
-#: ../client/pk-generate-pack.c:393
+#: ../client/pk-generate-pack.c:391
 msgid "A pack with the same name already exists, do you want to overwrite it?"
 msgstr "擁有相同名稱的服務包已經存在,您要覆寫這個檔案嗎?"
 
 #. TRANSLATORS: This is when the pack was not overwritten
-#: ../client/pk-generate-pack.c:396
+#: ../client/pk-generate-pack.c:394
 msgid "The pack was not overwritten."
 msgstr "服務包未被覆寫。"
 
 #. TRANSLATORS: This is when the temporary directory cannot be created, the directory name follows
-#: ../client/pk-generate-pack.c:409
+#: ../client/pk-generate-pack.c:407
 msgid "Failed to create directory:"
 msgstr "建立目錄失敗:"
 
 #. TRANSLATORS: This is when the list of packages from the remote computer cannot be opened
-#: ../client/pk-generate-pack.c:421
+#: ../client/pk-generate-pack.c:419
 msgid "Failed to open package list."
 msgstr "開啟套件清單失敗。"
 
 #. TRANSLATORS: The package name is being matched up to available packages
-#: ../client/pk-generate-pack.c:430
+#: ../client/pk-generate-pack.c:428
 msgid "Finding package name."
 msgstr "正在尋找套件名稱。"
 
 #. TRANSLATORS: This is when the package cannot be found in any software source. The detailed error follows
-#: ../client/pk-generate-pack.c:434
+#: ../client/pk-generate-pack.c:432
 #, c-format
 msgid "Failed to find package '%s': %s"
 msgstr "找不到套件「%s」:%s"
 
 #. TRANSLATORS: This is telling the user we are in the process of making the pack
-#: ../client/pk-generate-pack.c:442
+#: ../client/pk-generate-pack.c:440
 msgid "Creating service pack..."
 msgstr "正在建立服務包..."
 
 #. TRANSLATORS: we succeeded in making the file
-#: ../client/pk-generate-pack.c:457
+#: ../client/pk-generate-pack.c:455
 #, c-format
 msgid "Service pack created '%s'"
 msgstr "服務包建立了「%s」"
 
 #. TRANSLATORS: we failed to make te file
-#: ../client/pk-generate-pack.c:462
+#: ../client/pk-generate-pack.c:460
 #, c-format
 msgid "Failed to create '%s': %s"
 msgstr "無法建立「%s」:%s"
 
-#: ../client/pk-monitor.c:286
+#: ../client/pk-monitor.c:284
 msgid "Failed to get daemon state"
 msgstr "未能取得幕後程式狀態"
 
-#: ../client/pk-monitor.c:351
+#: ../client/pk-monitor.c:349
 msgid "Failed to get properties"
 msgstr "未能取得屬性"
 
 #. TRANSLATORS: this is a program that monitors PackageKit
-#: ../client/pk-monitor.c:389
+#: ../client/pk-monitor.c:387
 msgid "PackageKit Monitor"
 msgstr "PackageKit 監控程式"
 
 #. TRANSLATORS: when we are getting data from the daemon
-#: ../contrib/browser-plugin/pk-plugin-install.c:497
+#: ../contrib/browser-plugin/pk-plugin-install.c:499
 msgid "Getting package information..."
 msgstr "正在取得套件資訊..."
 
 #. TRANSLATORS: run an applicaiton
-#: ../contrib/browser-plugin/pk-plugin-install.c:503
+#: ../contrib/browser-plugin/pk-plugin-install.c:505
 #, c-format
 msgid "Run %s"
 msgstr "執行 %s"
 
 #. TRANSLATORS: show the installed version of a package
-#: ../contrib/browser-plugin/pk-plugin-install.c:509
+#: ../contrib/browser-plugin/pk-plugin-install.c:511
 msgid "Installed version"
 msgstr "已安裝的版本"
 
 #. TRANSLATORS: run the application now
-#: ../contrib/browser-plugin/pk-plugin-install.c:517
+#: ../contrib/browser-plugin/pk-plugin-install.c:519
 #, c-format
 msgid "Run version %s now"
 msgstr "立刻執行版本 %s"
 
 #. TRANSLATORS: run the application now
-#: ../contrib/browser-plugin/pk-plugin-install.c:523
+#: ../contrib/browser-plugin/pk-plugin-install.c:525
 msgid "Run now"
 msgstr "立刻執行"
 
 #. TRANSLATORS: update to a new version of the package
-#: ../contrib/browser-plugin/pk-plugin-install.c:529
+#: ../contrib/browser-plugin/pk-plugin-install.c:531
 #, c-format
 msgid "Update to version %s"
 msgstr "更新至版本 %s"
 
 #. TRANSLATORS: To install a package
-#: ../contrib/browser-plugin/pk-plugin-install.c:535
+#: ../contrib/browser-plugin/pk-plugin-install.c:537
 #, c-format
 msgid "Install %s now"
 msgstr "立刻安裝 %s"
 
 #. TRANSLATORS: the version of the package
-#: ../contrib/browser-plugin/pk-plugin-install.c:538
+#: ../contrib/browser-plugin/pk-plugin-install.c:540
 msgid "Version"
 msgstr "版本"
 
 #. TRANSLATORS: noting found, so can't install
-#: ../contrib/browser-plugin/pk-plugin-install.c:543
+#: ../contrib/browser-plugin/pk-plugin-install.c:545
 msgid "No packages found for your system"
 msgstr "找不到適合您系統的套件"
 
 #. TRANSLATORS: package is being installed
-#: ../contrib/browser-plugin/pk-plugin-install.c:548
+#: ../contrib/browser-plugin/pk-plugin-install.c:550
 msgid "Installing..."
 msgstr "正在安裝..."
 
 #. TRANSLATORS: downloading repo data so we can search
-#: ../contrib/command-not-found/pk-command-not-found.c:367
+#: ../contrib/command-not-found/pk-command-not-found.c:366
 msgid "Downloading details about the software sources."
 msgstr "正在下載關於軟體來源的詳細資料。"
 
 #. TRANSLATORS: downloading file lists so we can search
-#: ../contrib/command-not-found/pk-command-not-found.c:371
+#: ../contrib/command-not-found/pk-command-not-found.c:370
 msgid "Downloading filelists (this may take some time to complete)."
 msgstr "正在下載檔案清單 (這會花上一段時間才能完成)。"
 
 #. TRANSLATORS: waiting for native lock
-#: ../contrib/command-not-found/pk-command-not-found.c:375
+#: ../contrib/command-not-found/pk-command-not-found.c:374
 msgid "Waiting for package manager lock."
 msgstr "正在等待套件管理程式解鎖。"
 
 #. TRANSLATORS: loading package cache so we can search
-#: ../contrib/command-not-found/pk-command-not-found.c:379
+#: ../contrib/command-not-found/pk-command-not-found.c:378
 msgid "Loading list of packages."
 msgstr "正在載入套件清單。"
 
 #. TRANSLATORS: we failed to find the package, this shouldn't happen
-#: ../contrib/command-not-found/pk-command-not-found.c:445
+#: ../contrib/command-not-found/pk-command-not-found.c:444
 msgid "Failed to search for file"
 msgstr "搜尋檔案失敗"
 
+#. TRANSLATORS: the transaction failed in a way we could not expect
+#: ../contrib/command-not-found/pk-command-not-found.c:456
+msgid "Getting the list of files failed"
+msgstr "取得檔案清單失敗"
+
 #. TRANSLATORS: we failed to launch the executable, the error follows
-#: ../contrib/command-not-found/pk-command-not-found.c:597
+#: ../contrib/command-not-found/pk-command-not-found.c:602
 msgid "Failed to launch:"
 msgstr "啟動失敗:"
 
 #. TRANSLATORS: we failed to install the package
-#: ../contrib/command-not-found/pk-command-not-found.c:625
+#: ../contrib/command-not-found/pk-command-not-found.c:630
 msgid "Failed to install packages"
 msgstr "安裝套件失敗"
 
 #. TRANSLATORS: tool that gets called when the command is not found
-#: ../contrib/command-not-found/pk-command-not-found.c:701
+#: ../contrib/command-not-found/pk-command-not-found.c:706
 msgid "PackageKit Command Not Found"
 msgstr "找不到 PackageKit 指令"
 
-#. TRANSLATORS: the prefix of all the output telling the user why it's not executing
-#: ../contrib/command-not-found/pk-command-not-found.c:727
-msgid "Command not found."
-msgstr "找不到指令。"
+#. TRANSLATORS: the prefix of all the output telling the user
+#. * why it's not executing. NOTE: this is lowercase to mimic
+#. * the style of bash itself -- apologies
+#: ../contrib/command-not-found/pk-command-not-found.c:739
+msgid "command not found"
+msgstr "找不到指令"
 
 #. TRANSLATORS: tell the user what we think the command is
-#: ../contrib/command-not-found/pk-command-not-found.c:745
+#: ../contrib/command-not-found/pk-command-not-found.c:757
 msgid "Similar command is:"
 msgstr "相似指令為:"
 
 #. TRANSLATORS: Ask the user if we should run the similar command
-#: ../contrib/command-not-found/pk-command-not-found.c:755
+#: ../contrib/command-not-found/pk-command-not-found.c:771
 msgid "Run similar command:"
 msgstr "執行相似指令:"
 
 #. TRANSLATORS: show the user a list of commands that they could have meant
 #. TRANSLATORS: show the user a list of commands we could run
-#: ../contrib/command-not-found/pk-command-not-found.c:769
-#: ../contrib/command-not-found/pk-command-not-found.c:778
+#: ../contrib/command-not-found/pk-command-not-found.c:785
+#: ../contrib/command-not-found/pk-command-not-found.c:794
 msgid "Similar commands are:"
 msgstr "相似指令有:"
 
 #. TRANSLATORS: ask the user to choose a file to run
-#: ../contrib/command-not-found/pk-command-not-found.c:785
+#: ../contrib/command-not-found/pk-command-not-found.c:801
 msgid "Please choose a command to run"
 msgstr "請選擇一項指令來執行"
 
 #. TRANSLATORS: tell the user what package provides the command
-#: ../contrib/command-not-found/pk-command-not-found.c:803
+#: ../contrib/command-not-found/pk-command-not-found.c:819
 msgid "The package providing this file is:"
 msgstr "提供此檔案的套件為:"
 
 #. TRANSLATORS: as the user if we want to install a package to provide the command
-#: ../contrib/command-not-found/pk-command-not-found.c:808
+#: ../contrib/command-not-found/pk-command-not-found.c:826
 #, c-format
 msgid "Install package '%s' to provide command '%s'?"
 msgstr "是否要安裝「%s」套件以提供「%s」指令?"
 
 #. TRANSLATORS: Show the user a list of packages that provide this command
-#: ../contrib/command-not-found/pk-command-not-found.c:832
+#: ../contrib/command-not-found/pk-command-not-found.c:853
 msgid "Packages providing this file are:"
 msgstr "提供此檔案的套件有:"
 
 #. TRANSLATORS: Show the user a list of packages that they can install to provide this command
-#: ../contrib/command-not-found/pk-command-not-found.c:842
+#: ../contrib/command-not-found/pk-command-not-found.c:863
 msgid "Suitable packages are:"
 msgstr "合適的套件有:"
 
 #. get selection
 #. TRANSLATORS: ask the user to choose a file to install
-#: ../contrib/command-not-found/pk-command-not-found.c:851
+#: ../contrib/command-not-found/pk-command-not-found.c:872
 msgid "Please choose a package to install"
 msgstr "請選擇欲安裝的套件"
 
 #. TRANSLATORS: we are starting to install the packages
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:197
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:195
 msgid "Starting install"
 msgstr "正在開始安裝"
 
 #. TRANSLATORS: we couldn't find the package name, non-fatal
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:409
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:407
 #, c-format
 msgid "Failed to find the package %s, or already installed: %s"
 msgstr "找不到套件 %s,或是已經安裝了:%s"
 
 #. command line argument, simulate what would be done, but don't actually do it
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:518
-msgid ""
-"Don't actually install any packages, only simulate what would be installed"
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:516
+msgid "Don't actually install any packages, only simulate what would be installed"
 msgstr "不要真的安裝任何套件,只要模擬要安裝什麼就好"
 
 #. command line argument, do we skip packages that depend on the ones specified
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:521
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:519
 msgid "Do not install dependencies of the core packages"
 msgstr "不要安裝核心套件的相依關係"
 
 #. command line argument, do we operate quietly
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:524
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:522
 msgid "Do not display information or progress"
 msgstr "不要顯示資訊或進度"
 
 #. TRANSLATORS: tool that gets called when the command is not found
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:542
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:540
 msgid "PackageKit Debuginfo Installer"
 msgstr "PackageKit 除錯資訊安裝程式"
 
 #. TRANSLATORS: the use needs to specify a list of package names on the command line
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:556
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:554
 #, c-format
 msgid "ERROR: Specify package names to install."
 msgstr "錯誤:指定要安裝的套件名稱。"
 
 #. TRANSLATORS: we are getting the list of repositories
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:592
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:590
 #, c-format
 msgid "Getting sources list"
 msgstr "正在取得來源清單"
 
 #. TRANSLATORS: operation was not successful
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:602
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:677
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:761
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:805
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:872
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:916
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:600
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:675
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:759
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:803
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:870
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:914
 msgid "FAILED."
 msgstr "失敗。"
 
 #. TRANSLATORS: all completed 100%
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:617
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:657
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:692
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:776
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:820
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:887
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:931
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:615
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:655
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:690
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:774
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:818
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:885
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:929
 #, c-format
 msgid "OK."
 msgstr "確定。"
 
 #. TRANSLATORS: tell the user what we found
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:620
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:618
 #, c-format
 msgid "Found %i enabled and %i disabled sources."
 msgstr "找到 %i 個啟用的與 %i 個停用的來源。"
 
 #. TRANSLATORS: we're finding repositories that match out pattern
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:627
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:625
 #, c-format
 msgid "Finding debugging sources"
 msgstr "正在尋找除錯來源"
 
 #. TRANSLATORS: tell the user what we found
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:660
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:658
 #, c-format
 msgid "Found %i disabled debuginfo repos."
 msgstr "找到 %i 個停用的除錯資訊套件庫。"
 
 #. TRANSLATORS: we're now enabling all the debug sources we found
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:667
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:665
 #, c-format
 msgid "Enabling debugging sources"
 msgstr "正在啟用除錯來源"
 
 #. TRANSLATORS: tell the user how many we enabled
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:695
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:693
 #, c-format
 msgid "Enabled %i debugging sources."
 msgstr "已啟用 %i 個除錯來源。"
 
 #. TRANSLATORS: we're now finding packages that match in all the repos
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:702
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:700
 #, c-format
 msgid "Finding debugging packages"
 msgstr "正在尋找除錯套件"
 
 #. TRANSLATORS: we couldn't find the package name, non-fatal
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:714
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:712
 #, c-format
 msgid "Failed to find the package %s: %s"
 msgstr "找不到套件 %s:%s"
 
 #. TRANSLATORS: we couldn't find the debuginfo package name, non-fatal
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:737
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:735
 #, c-format
 msgid "Failed to find the debuginfo package %s: %s"
 msgstr "找不到除錯資訊套件 %s:%s"
 
 #. TRANSLATORS: no debuginfo packages could be found to be installed
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:765
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:763
 #, c-format
 msgid "Found no packages to install."
 msgstr "找不到要安裝的套件。"
 
 #. TRANSLATORS: tell the user we found some packages, and then list them
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:779
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:777
 #, c-format
 msgid "Found %i packages:"
 msgstr "找到 %i 個套件:"
 
 #. TRANSLATORS: tell the user we are searching for deps
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:795
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:793
 #, c-format
 msgid "Finding packages that depend on these packages"
 msgstr "正在尋找依賴於這些套件的套件"
 
 #. TRANSLATORS: could not install, detailed error follows
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:808
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:806
 #, c-format
 msgid "Could not find dependant packages: %s"
 msgstr "找不到依賴的套件:%s"
 
 #. TRANSLATORS: tell the user we found some more packages
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:824
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:822
 #, c-format
 msgid "Found %i extra packages."
 msgstr "找到 %i 個額外套件。"
 
 #. TRANSLATORS: tell the user we found some more packages
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:828
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:826
 #, c-format
 msgid "No extra packages required."
 msgstr "不需要額外的套件。"
 
 #. TRANSLATORS: tell the user we found some packages (and deps), and then list them
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:837
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:835
 #, c-format
 msgid "Found %i packages to install:"
 msgstr "找到 %i 個套件要安裝:"
 
 #. TRANSLATORS: simulate mode is a testing mode where we quit before the action
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:850
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:848
 #, c-format
 msgid "Not installing packages in simulate mode"
 msgstr "在模擬模式內不會安裝套件"
 
 #. TRANSLATORS: we are now installing the debuginfo packages we found earlier
 #. TRANSLATORS: transaction state, installing packages
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:862
-#: ../lib/packagekit-glib2/pk-console-shared.c:289
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:860
+#: ../lib/packagekit-glib2/pk-console-shared.c:287
 #, c-format
 msgid "Installing packages"
 msgstr "正在安裝套件"
 
 #. TRANSLATORS: could not install, detailed error follows
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:875
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:873
 #, c-format
 msgid "Could not install packages: %s"
 msgstr "無法安裝套件:%s"
 
 #. TRANSLATORS: we are now disabling all debuginfo repos we previously enabled
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:907
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:905
 #, c-format
 msgid "Disabling sources previously enabled"
 msgstr "正在停用先前啟用的來源"
 
 #. TRANSLATORS: no debuginfo packages could be found to be installed, detailed error follows
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:919
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:917
 #, c-format
 msgid "Could not disable the debugging sources: %s"
 msgstr "無法停用除錯來源:%s"
 
 #. TRANSLATORS: we disabled all the debugging repos that we enabled before
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:934
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:932
 #, c-format
 msgid "Disabled %i debugging sources."
 msgstr "已停用 %i 個除錯來源。"
@@ -1100,604 +1133,617 @@ msgstr "PackageKit 套件清單"
 msgid "PackageKit Service Pack"
 msgstr "PackageKit 服務包"
 
-#: ../lib/packagekit-glib2/pk-console-shared.c:65
+#: ../lib/packagekit-glib2/pk-console-shared.c:63
 #, c-format
 msgid "Please enter a number from 1 to %i: "
 msgstr "請輸入一個 1 到 %i 之間的數字:"
 
 #. TRANSLATORS: more than one package could be found that matched, to follow is a list of possible packages
-#: ../lib/packagekit-glib2/pk-console-shared.c:191
+#: ../lib/packagekit-glib2/pk-console-shared.c:189
 msgid "More than one package matches:"
 msgstr "超過一個符合的套件:"
 
 #. TRANSLATORS: This finds out which package in the list to use
-#: ../lib/packagekit-glib2/pk-console-shared.c:202
+#: ../lib/packagekit-glib2/pk-console-shared.c:200
 msgid "Please choose the correct package: "
 msgstr "請選擇正確的套件:"
 
 #. TRANSLATORS: This is when the transaction status is not known
-#: ../lib/packagekit-glib2/pk-console-shared.c:257
+#: ../lib/packagekit-glib2/pk-console-shared.c:255
 msgid "Unknown state"
 msgstr "不明的狀態"
 
 #. TRANSLATORS: transaction state, the daemon is in the process of starting
-#: ../lib/packagekit-glib2/pk-console-shared.c:261
+#: ../lib/packagekit-glib2/pk-console-shared.c:259
 msgid "Starting"
 msgstr "正在開始"
 
 #. TRANSLATORS: transaction state, the transaction is waiting for another to complete
-#: ../lib/packagekit-glib2/pk-console-shared.c:265
+#: ../lib/packagekit-glib2/pk-console-shared.c:263
 msgid "Waiting in queue"
 msgstr "正在依佇列等待"
 
 #. TRANSLATORS: transaction state, just started
-#: ../lib/packagekit-glib2/pk-console-shared.c:269
+#: ../lib/packagekit-glib2/pk-console-shared.c:267
 msgid "Running"
 msgstr "正在執行"
 
 #. TRANSLATORS: transaction state, is querying data
-#: ../lib/packagekit-glib2/pk-console-shared.c:273
+#: ../lib/packagekit-glib2/pk-console-shared.c:271
 msgid "Querying"
 msgstr "正在查詢"
 
 #. TRANSLATORS: transaction state, getting data from a server
-#: ../lib/packagekit-glib2/pk-console-shared.c:277
+#: ../lib/packagekit-glib2/pk-console-shared.c:275
 msgid "Getting information"
 msgstr "正在取得資訊"
 
 #. TRANSLATORS: transaction state, removing packages
-#: ../lib/packagekit-glib2/pk-console-shared.c:281
+#: ../lib/packagekit-glib2/pk-console-shared.c:279
 msgid "Removing packages"
 msgstr "正在移除套件"
 
 #. TRANSLATORS: transaction state, downloading package files
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:285
-#: ../lib/packagekit-glib2/pk-console-shared.c:663
+#: ../lib/packagekit-glib2/pk-console-shared.c:283
+#: ../lib/packagekit-glib2/pk-console-shared.c:661
 msgid "Downloading packages"
 msgstr "正在下載套件"
 
 #. TRANSLATORS: transaction state, refreshing internal lists
-#: ../lib/packagekit-glib2/pk-console-shared.c:293
+#: ../lib/packagekit-glib2/pk-console-shared.c:291
 msgid "Refreshing software list"
 msgstr "正在重新整理軟體清單"
 
 #. TRANSLATORS: transaction state, installing updates
-#: ../lib/packagekit-glib2/pk-console-shared.c:297
+#: ../lib/packagekit-glib2/pk-console-shared.c:295
 msgid "Installing updates"
 msgstr "正在安裝更新"
 
 #. TRANSLATORS: transaction state, removing old packages, and cleaning config files
-#: ../lib/packagekit-glib2/pk-console-shared.c:301
+#: ../lib/packagekit-glib2/pk-console-shared.c:299
 msgid "Cleaning up packages"
 msgstr "正在清理套件"
 
 #. TRANSLATORS: transaction state, obsoleting old packages
-#: ../lib/packagekit-glib2/pk-console-shared.c:305
+#: ../lib/packagekit-glib2/pk-console-shared.c:303
 msgid "Obsoleting packages"
 msgstr "正在廢棄套件"
 
 #. TRANSLATORS: transaction state, checking the transaction before we do it
-#: ../lib/packagekit-glib2/pk-console-shared.c:309
+#: ../lib/packagekit-glib2/pk-console-shared.c:307
 msgid "Resolving dependencies"
 msgstr "正在解析相依性"
 
 #. TRANSLATORS: transaction state, checking if we have all the security keys for the operation
-#: ../lib/packagekit-glib2/pk-console-shared.c:313
+#: ../lib/packagekit-glib2/pk-console-shared.c:311
 msgid "Checking signatures"
 msgstr "正在檢查簽章"
 
 #. TRANSLATORS: transaction state, when we return to a previous system state
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:317
-#: ../lib/packagekit-glib2/pk-console-shared.c:623
+#: ../lib/packagekit-glib2/pk-console-shared.c:315
+#: ../lib/packagekit-glib2/pk-console-shared.c:621
 msgid "Rolling back"
 msgstr "正在回復"
 
 #. TRANSLATORS: transaction state, when we're doing a test transaction
-#: ../lib/packagekit-glib2/pk-console-shared.c:321
+#: ../lib/packagekit-glib2/pk-console-shared.c:319
 msgid "Testing changes"
 msgstr "正在測試變更"
 
 #. TRANSLATORS: transaction state, when we're writing to the system package database
-#: ../lib/packagekit-glib2/pk-console-shared.c:325
+#: ../lib/packagekit-glib2/pk-console-shared.c:323
 msgid "Committing changes"
 msgstr "正在遞交變更"
 
 #. TRANSLATORS: transaction state, requesting data from a server
-#: ../lib/packagekit-glib2/pk-console-shared.c:329
+#: ../lib/packagekit-glib2/pk-console-shared.c:327
 msgid "Requesting data"
 msgstr "正在請求資料"
 
 #. TRANSLATORS: transaction state, all done!
-#: ../lib/packagekit-glib2/pk-console-shared.c:333
+#: ../lib/packagekit-glib2/pk-console-shared.c:331
 msgid "Finished"
 msgstr "已完成"
 
 #. TRANSLATORS: transaction state, in the process of cancelling
-#: ../lib/packagekit-glib2/pk-console-shared.c:337
+#: ../lib/packagekit-glib2/pk-console-shared.c:335
 msgid "Cancelling"
 msgstr "正在取消"
 
 #. TRANSLATORS: transaction state, downloading metadata
-#: ../lib/packagekit-glib2/pk-console-shared.c:341
+#: ../lib/packagekit-glib2/pk-console-shared.c:339
 msgid "Downloading repository information"
 msgstr "正在下載套件庫資訊"
 
 #. TRANSLATORS: transaction state, downloading metadata
-#: ../lib/packagekit-glib2/pk-console-shared.c:345
+#: ../lib/packagekit-glib2/pk-console-shared.c:343
 msgid "Downloading list of packages"
 msgstr "正在下載套件清單"
 
 #. TRANSLATORS: transaction state, downloading metadata
-#: ../lib/packagekit-glib2/pk-console-shared.c:349
+#: ../lib/packagekit-glib2/pk-console-shared.c:347
 msgid "Downloading file lists"
 msgstr "正在下載檔案清單"
 
 #. TRANSLATORS: transaction state, downloading metadata
-#: ../lib/packagekit-glib2/pk-console-shared.c:353
+#: ../lib/packagekit-glib2/pk-console-shared.c:351
 msgid "Downloading lists of changes"
 msgstr "正在下載變更的清單"
 
 #. TRANSLATORS: transaction state, downloading metadata
-#: ../lib/packagekit-glib2/pk-console-shared.c:357
+#: ../lib/packagekit-glib2/pk-console-shared.c:355
 msgid "Downloading groups"
 msgstr "正在下載群組"
 
 #. TRANSLATORS: transaction state, downloading metadata
-#: ../lib/packagekit-glib2/pk-console-shared.c:361
+#: ../lib/packagekit-glib2/pk-console-shared.c:359
 msgid "Downloading update information"
 msgstr "正在下載更新資訊"
 
 #. TRANSLATORS: transaction state, repackaging delta files
-#: ../lib/packagekit-glib2/pk-console-shared.c:365
+#: ../lib/packagekit-glib2/pk-console-shared.c:363
 msgid "Repackaging files"
 msgstr "正在重新包裝檔案"
 
 #. TRANSLATORS: transaction state, loading databases
-#: ../lib/packagekit-glib2/pk-console-shared.c:369
+#: ../lib/packagekit-glib2/pk-console-shared.c:367
 msgid "Loading cache"
 msgstr "正在載入快取"
 
 #. TRANSLATORS: transaction state, scanning for running processes
-#: ../lib/packagekit-glib2/pk-console-shared.c:373
+#: ../lib/packagekit-glib2/pk-console-shared.c:371
 msgid "Scanning applications"
 msgstr "正在掃描應用程式"
 
 #. TRANSLATORS: transaction state, generating a list of packages installed on the system
-#: ../lib/packagekit-glib2/pk-console-shared.c:377
+#: ../lib/packagekit-glib2/pk-console-shared.c:375
 msgid "Generating package lists"
 msgstr "正在產生套件清單"
 
 #. TRANSLATORS: transaction state, when we're waiting for the native tools to exit
-#: ../lib/packagekit-glib2/pk-console-shared.c:381
+#: ../lib/packagekit-glib2/pk-console-shared.c:379
 msgid "Waiting for package manager lock"
 msgstr "正在等候套件管程式解鎖"
 
 #. TRANSLATORS: transaction state, waiting for user to type in a password
-#: ../lib/packagekit-glib2/pk-console-shared.c:385
+#: ../lib/packagekit-glib2/pk-console-shared.c:383
 msgid "Waiting for authentication"
 msgstr "正在等候認證"
 
 #. TRANSLATORS: transaction state, we are updating the list of processes
-#: ../lib/packagekit-glib2/pk-console-shared.c:389
+#: ../lib/packagekit-glib2/pk-console-shared.c:387
 msgid "Updating running applications"
 msgstr "正在更新正在執行中的應用程式"
 
 #. TRANSLATORS: transaction state, we are checking executable files currently in use
-#: ../lib/packagekit-glib2/pk-console-shared.c:393
+#: ../lib/packagekit-glib2/pk-console-shared.c:391
 msgid "Checking applications in use"
 msgstr "正在檢查使用中的應用程式"
 
 #. TRANSLATORS: transaction state, we are checking for libraries currently in use
-#: ../lib/packagekit-glib2/pk-console-shared.c:397
+#: ../lib/packagekit-glib2/pk-console-shared.c:395
 msgid "Checking libraries in use"
 msgstr "正在檢查使用中的函式庫"
 
 #. TRANSLATORS: transaction state, we are copying package files before or after the transaction
-#: ../lib/packagekit-glib2/pk-console-shared.c:401
+#: ../lib/packagekit-glib2/pk-console-shared.c:399
 msgid "Copying files"
 msgstr "正在複製檔案"
 
 #. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:419
+#: ../lib/packagekit-glib2/pk-console-shared.c:417
 msgid "Trivial"
 msgstr "小"
 
 #. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:423
+#: ../lib/packagekit-glib2/pk-console-shared.c:421
 msgid "Normal"
 msgstr "一般"
 
 #. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:427
+#: ../lib/packagekit-glib2/pk-console-shared.c:425
 msgid "Important"
 msgstr "重要"
 
 #. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:431
+#: ../lib/packagekit-glib2/pk-console-shared.c:429
 msgid "Security"
 msgstr "安全性"
 
 #. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:435
+#: ../lib/packagekit-glib2/pk-console-shared.c:433
 msgid "Bug fix "
 msgstr "錯誤修正"
 
 #. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:439
+#: ../lib/packagekit-glib2/pk-console-shared.c:437
 msgid "Enhancement"
 msgstr "增強"
 
 #. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:443
+#: ../lib/packagekit-glib2/pk-console-shared.c:441
 msgid "Blocked"
 msgstr "已阻擋"
 
 #. TRANSLATORS: The state of a package
 #. TRANSLATORS: The action of the package, in past tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:448
-#: ../lib/packagekit-glib2/pk-console-shared.c:521
+#: ../lib/packagekit-glib2/pk-console-shared.c:446
+#: ../lib/packagekit-glib2/pk-console-shared.c:519
 msgid "Installed"
 msgstr "已安裝"
 
 #. TRANSLATORS: The state of a package, i.e. not installed
-#: ../lib/packagekit-glib2/pk-console-shared.c:453
+#: ../lib/packagekit-glib2/pk-console-shared.c:451
 msgid "Available"
 msgstr "可用"
 
 #. TRANSLATORS: The action of the package, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:471
+#: ../lib/packagekit-glib2/pk-console-shared.c:469
 msgid "Downloading"
 msgstr "正在下載"
 
 #. TRANSLATORS: The action of the package, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:475
+#: ../lib/packagekit-glib2/pk-console-shared.c:473
 msgid "Updating"
 msgstr "正在更新"
 
 #. TRANSLATORS: The action of the package, in present tense
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:479
-#: ../lib/packagekit-glib2/pk-console-shared.c:599
+#: ../lib/packagekit-glib2/pk-console-shared.c:477
+#: ../lib/packagekit-glib2/pk-console-shared.c:597
 msgid "Installing"
 msgstr "正在安裝"
 
 #. TRANSLATORS: The action of the package, in present tense
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:483
-#: ../lib/packagekit-glib2/pk-console-shared.c:595
+#: ../lib/packagekit-glib2/pk-console-shared.c:481
+#: ../lib/packagekit-glib2/pk-console-shared.c:593
 msgid "Removing"
 msgstr "正在移除"
 
 #. TRANSLATORS: The action of the package, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:487
+#: ../lib/packagekit-glib2/pk-console-shared.c:485
 msgid "Cleaning up"
 msgstr "正在清除"
 
 #. TRANSLATORS: The action of the package, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:491
+#: ../lib/packagekit-glib2/pk-console-shared.c:489
 msgid "Obsoleting"
 msgstr "正在廢棄"
 
 #. TRANSLATORS: The action of the package, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:495
+#: ../lib/packagekit-glib2/pk-console-shared.c:493
 msgid "Reinstalling"
 msgstr "正在重新安裝"
 
 #. TRANSLATORS: The action of the package, in past tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:513
+#: ../lib/packagekit-glib2/pk-console-shared.c:511
 msgid "Downloaded"
 msgstr "已下載"
 
 #. TRANSLATORS: The action of the package, in past tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:525
+#: ../lib/packagekit-glib2/pk-console-shared.c:523
 msgid "Removed"
 msgstr "已移除"
 
 #. TRANSLATORS: The action of the package, in past tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:529
+#: ../lib/packagekit-glib2/pk-console-shared.c:527
 msgid "Cleaned up"
 msgstr "已清除"
 
 #. TRANSLATORS: The action of the package, in past tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:533
+#: ../lib/packagekit-glib2/pk-console-shared.c:531
 msgid "Obsoleted"
 msgstr "已廢棄"
 
 #. TRANSLATORS: The action of the package, in past tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:537
+#: ../lib/packagekit-glib2/pk-console-shared.c:535
 msgid "Reinstalled"
 msgstr "已重新安裝"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:555
+#: ../lib/packagekit-glib2/pk-console-shared.c:553
 msgid "Unknown role type"
 msgstr "未知的任務類型"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:559
+#: ../lib/packagekit-glib2/pk-console-shared.c:557
 msgid "Getting dependencies"
 msgstr "正在取得相容性"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:563
+#: ../lib/packagekit-glib2/pk-console-shared.c:561
 msgid "Getting update details"
 msgstr "正在取得更新詳細資料"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:567
+#: ../lib/packagekit-glib2/pk-console-shared.c:565
 msgid "Getting details"
 msgstr "正在取得詳細資料"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:571
+#: ../lib/packagekit-glib2/pk-console-shared.c:569
 msgid "Getting requires"
 msgstr "正在取得需求"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:575
+#: ../lib/packagekit-glib2/pk-console-shared.c:573
 msgid "Getting updates"
 msgstr "正在取得更新"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:579
+#: ../lib/packagekit-glib2/pk-console-shared.c:577
 msgid "Searching by details"
 msgstr "正在依詳細資料搜尋"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:583
+#: ../lib/packagekit-glib2/pk-console-shared.c:581
 msgid "Searching by file"
 msgstr "正在依檔案搜尋"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:587
+#: ../lib/packagekit-glib2/pk-console-shared.c:585
 msgid "Searching groups"
 msgstr "正在搜尋群組"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:591
+#: ../lib/packagekit-glib2/pk-console-shared.c:589
 msgid "Searching by name"
 msgstr "正在依名稱搜尋"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:603
+#: ../lib/packagekit-glib2/pk-console-shared.c:601
 msgid "Installing files"
 msgstr "正在安裝檔案"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:607
+#: ../lib/packagekit-glib2/pk-console-shared.c:605
 msgid "Refreshing cache"
 msgstr "正在重新整理快取"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:611
+#: ../lib/packagekit-glib2/pk-console-shared.c:609
 msgid "Updating packages"
 msgstr "正在更新套件"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:615
+#: ../lib/packagekit-glib2/pk-console-shared.c:613
 msgid "Updating system"
 msgstr "正在更新系統"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:619
+#: ../lib/packagekit-glib2/pk-console-shared.c:617
 msgid "Canceling"
 msgstr "正在取消"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:627
+#: ../lib/packagekit-glib2/pk-console-shared.c:625
 msgid "Getting repositories"
 msgstr "正在取得套件庫"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:631
+#: ../lib/packagekit-glib2/pk-console-shared.c:629
 msgid "Enabling repository"
 msgstr "正在啟用套件庫"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:635
+#: ../lib/packagekit-glib2/pk-console-shared.c:633
 msgid "Setting data"
 msgstr "正在設定資料"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:639
+#: ../lib/packagekit-glib2/pk-console-shared.c:637
 msgid "Resolving"
 msgstr "正在解析"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:643
+#: ../lib/packagekit-glib2/pk-console-shared.c:641
 msgid "Getting file list"
 msgstr "正在取得檔案清單"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:647
+#: ../lib/packagekit-glib2/pk-console-shared.c:645
 msgid "Getting provides"
 msgstr "正在取得提供什麼"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:651
+#: ../lib/packagekit-glib2/pk-console-shared.c:649
 msgid "Installing signature"
 msgstr "正在安裝簽章"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:655
+#: ../lib/packagekit-glib2/pk-console-shared.c:653
 msgid "Getting packages"
 msgstr "正在取得套件"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:659
+#: ../lib/packagekit-glib2/pk-console-shared.c:657
 msgid "Accepting EULA"
 msgstr "正在接受終端使用者授權同意書"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:667
+#: ../lib/packagekit-glib2/pk-console-shared.c:665
 msgid "Getting upgrades"
 msgstr "正在取得升級"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:671
+#: ../lib/packagekit-glib2/pk-console-shared.c:669
 msgid "Getting categories"
 msgstr "正在取得分類"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:675
+#: ../lib/packagekit-glib2/pk-console-shared.c:673
 msgid "Getting transactions"
 msgstr "正在取得處理事項"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:679
-#: ../lib/packagekit-glib2/pk-console-shared.c:683
+#: ../lib/packagekit-glib2/pk-console-shared.c:677
+#: ../lib/packagekit-glib2/pk-console-shared.c:681
 msgid "Simulating install"
 msgstr "正在模擬安裝"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:687
+#: ../lib/packagekit-glib2/pk-console-shared.c:685
 msgid "Simulating remove"
 msgstr "正在模擬移除"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:691
+#: ../lib/packagekit-glib2/pk-console-shared.c:689
 msgid "Simulating update"
 msgstr "正在模擬更新"
 
+#. TRANSLATORS: turn on all debugging
+#: ../lib/packagekit-glib2/pk-debug.c:133
+msgid "Show debugging information for all files"
+msgstr "顯示供所有檔案用的額外除錯資訊"
+
+#: ../lib/packagekit-glib2/pk-debug.c:201
+msgid "Debugging Options"
+msgstr "除錯選項"
+
+#: ../lib/packagekit-glib2/pk-debug.c:201
+msgid "Show debugging options"
+msgstr "顯示除錯選項"
+
 #. TRANSLATORS: ask the user if they are comfortable installing insecure packages
-#: ../lib/packagekit-glib2/pk-task-text.c:69
+#: ../lib/packagekit-glib2/pk-task-text.c:67
 msgid "Do you want to allow installing of unsigned software?"
 msgstr "您想要允許未簽署軟體的安裝嗎?"
 
 #. TRANSLATORS: tell the user we've not done anything
-#: ../lib/packagekit-glib2/pk-task-text.c:74
+#: ../lib/packagekit-glib2/pk-task-text.c:72
 msgid "The unsigned software will not be installed."
 msgstr "未簽署的軟體不會被安裝。"
 
 #. TRANSLATORS: the package repository is signed by a key that is not recognised
-#: ../lib/packagekit-glib2/pk-task-text.c:123
+#: ../lib/packagekit-glib2/pk-task-text.c:121
 msgid "Software source signature required"
 msgstr "需要軟體來源簽章"
 
 #. TRANSLATORS: the package repository name
-#: ../lib/packagekit-glib2/pk-task-text.c:129
+#: ../lib/packagekit-glib2/pk-task-text.c:127
 msgid "Software source name"
 msgstr "軟體來源名稱"
 
 #. TRANSLATORS: the key URL
-#: ../lib/packagekit-glib2/pk-task-text.c:132
+#: ../lib/packagekit-glib2/pk-task-text.c:130
 msgid "Key URL"
 msgstr "金鑰 URL"
 
 #. TRANSLATORS: the username of the key
-#: ../lib/packagekit-glib2/pk-task-text.c:135
+#: ../lib/packagekit-glib2/pk-task-text.c:133
 msgid "Key user"
 msgstr "金鑰使用者"
 
 #. TRANSLATORS: the key ID, usually a few hex digits
-#: ../lib/packagekit-glib2/pk-task-text.c:138
+#: ../lib/packagekit-glib2/pk-task-text.c:136
 msgid "Key ID"
 msgstr "金鑰 ID"
 
 #. TRANSLATORS: the key fingerprint, again, yet more hex
-#: ../lib/packagekit-glib2/pk-task-text.c:141
+#: ../lib/packagekit-glib2/pk-task-text.c:139
 msgid "Key fingerprint"
 msgstr "金鑰指紋"
 
 #. TRANSLATORS: the timestamp (a bit like a machine readable time)
-#: ../lib/packagekit-glib2/pk-task-text.c:144
+#: ../lib/packagekit-glib2/pk-task-text.c:142
 msgid "Key Timestamp"
 msgstr "金鑰時間戳記"
 
 #. TRANSLATORS: ask the user if they want to import
-#: ../lib/packagekit-glib2/pk-task-text.c:157
+#: ../lib/packagekit-glib2/pk-task-text.c:155
 msgid "Do you accept this signature?"
 msgstr "您是否接受此簽章?"
 
 #. TRANSLATORS: tell the user we've not done anything
-#: ../lib/packagekit-glib2/pk-task-text.c:162
+#: ../lib/packagekit-glib2/pk-task-text.c:160
 msgid "The signature was not accepted."
 msgstr "簽章未被接受。"
 
 #. TRANSLATORS: this is another name for a software licence that has to be read before installing
-#: ../lib/packagekit-glib2/pk-task-text.c:205
+#: ../lib/packagekit-glib2/pk-task-text.c:203
 msgid "End user licence agreement required"
 msgstr "需要接受終端使用者授權同意書"
 
 #. TRANSLATORS: the EULA text itself (long and boring)
-#: ../lib/packagekit-glib2/pk-task-text.c:214
+#: ../lib/packagekit-glib2/pk-task-text.c:212
 msgid "Agreement"
 msgstr "同意書"
 
 #. TRANSLATORS: ask the user if they've read and accepted the EULA
-#: ../lib/packagekit-glib2/pk-task-text.c:223
+#: ../lib/packagekit-glib2/pk-task-text.c:221
 msgid "Do you accept this agreement?"
 msgstr "您是否接受此同意書?"
 
 #. TRANSLATORS: tell the user we've not done anything
-#: ../lib/packagekit-glib2/pk-task-text.c:228
+#: ../lib/packagekit-glib2/pk-task-text.c:226
 msgid "The agreement was not accepted."
 msgstr "同意書未被接受。"
 
 #. TRANSLATORS: the user needs to change media inserted into the computer
-#: ../lib/packagekit-glib2/pk-task-text.c:267
+#: ../lib/packagekit-glib2/pk-task-text.c:265
 msgid "Media change required"
 msgstr "需要變更媒體"
 
 #. TRANSLATORS: the type, e.g. DVD, CD, etc
-#: ../lib/packagekit-glib2/pk-task-text.c:270
+#: ../lib/packagekit-glib2/pk-task-text.c:268
 msgid "Media type"
 msgstr "媒體類型"
 
 #. TRANSLATORS: the media label, usually like 'disk-1of3'
-#: ../lib/packagekit-glib2/pk-task-text.c:273
+#: ../lib/packagekit-glib2/pk-task-text.c:271
 msgid "Media label"
 msgstr "媒體標籤"
 
 #. TRANSLATORS: the media description, usually like 'Fedora 12 disk 5'
-#: ../lib/packagekit-glib2/pk-task-text.c:276
+#: ../lib/packagekit-glib2/pk-task-text.c:274
 msgid "Text"
 msgstr "文字"
 
 #. TRANSLATORS: ask the user to insert the media
-#: ../lib/packagekit-glib2/pk-task-text.c:282
+#: ../lib/packagekit-glib2/pk-task-text.c:280
 msgid "Please insert the correct media"
 msgstr "請插入正確媒體"
 
 #. TRANSLATORS: tell the user we've not done anything as they are lazy
-#: ../lib/packagekit-glib2/pk-task-text.c:287
+#: ../lib/packagekit-glib2/pk-task-text.c:285
 msgid "The correct media was not inserted."
 msgstr "沒有插入正確媒體。"
 
 #. TRANSLATORS: When processing, we might have to remove other dependencies
-#: ../lib/packagekit-glib2/pk-task-text.c:302
+#: ../lib/packagekit-glib2/pk-task-text.c:300
 msgid "The following packages have to be removed:"
 msgstr "下列套件必須被移除掉:"
 
 #. TRANSLATORS: When processing, we might have to install other dependencies
-#: ../lib/packagekit-glib2/pk-task-text.c:307
+#: ../lib/packagekit-glib2/pk-task-text.c:305
 msgid "The following packages have to be installed:"
 msgstr "下列套件要被安裝:"
 
 #. TRANSLATORS: When processing, we might have to update other dependencies
-#: ../lib/packagekit-glib2/pk-task-text.c:312
+#: ../lib/packagekit-glib2/pk-task-text.c:310
 msgid "The following packages have to be updated:"
 msgstr "下列套件要被更新:"
 
 #. TRANSLATORS: When processing, we might have to reinstall other dependencies
-#: ../lib/packagekit-glib2/pk-task-text.c:317
+#: ../lib/packagekit-glib2/pk-task-text.c:315
 msgid "The following packages have to be reinstalled:"
 msgstr "下列套件要被重新安裝:"
 
 #. TRANSLATORS: When processing, we might have to downgrade other dependencies
-#: ../lib/packagekit-glib2/pk-task-text.c:322
+#: ../lib/packagekit-glib2/pk-task-text.c:320
 msgid "The following packages have to be downgraded:"
 msgstr "下列套件要被降級:"
 
 #. TRANSLATORS: ask the user if the proposed changes are okay
-#: ../lib/packagekit-glib2/pk-task-text.c:382
+#: ../lib/packagekit-glib2/pk-task-text.c:380
 msgid "Proceed with changes?"
 msgstr "要處理變更嗎?"
 
 #. TRANSLATORS: tell the user we didn't do anything
-#: ../lib/packagekit-glib2/pk-task-text.c:387
+#: ../lib/packagekit-glib2/pk-task-text.c:385
 msgid "The transaction did not proceed."
 msgstr "該處理事項沒有執行。"
 
@@ -1716,8 +1762,7 @@ msgid "Authentication is required to accept a EULA"
 msgstr "要接受終端使用者授權條款協議需先經過身份認證"
 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:9
-msgid ""
-"Authentication is required to cancel a task that was not started by yourself"
+msgid "Authentication is required to cancel a task that was not started by yourself"
 msgstr "若要取消一項並非由您啟動的工作,您必須先經過身份認證"
 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:10
@@ -1725,14 +1770,11 @@ msgid "Authentication is required to change software source parameters"
 msgstr "要更改軟體來源參數需先經過身份認證"
 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:11
-msgid ""
-"Authentication is required to change the location used to decompress packages"
+msgid "Authentication is required to change the location used to decompress packages"
 msgstr "要變更用來解壓縮套件的位置需先通過身份認證"
 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:12
-msgid ""
-"Authentication is required to consider a key used for signing packages as "
-"trusted"
+msgid "Authentication is required to consider a key used for signing packages as trusted"
 msgstr "要將一個用來簽署套件的金鑰列為已信任的金鑰需先經過身份認證"
 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:13
@@ -1760,21 +1802,23 @@ msgid "Authentication is required to rollback a transaction"
 msgstr "要回復處理事項需要先經過身份認證"
 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:19
-msgid ""
-"Authentication is required to set the network proxy used for downloading "
-"packages"
+msgid "Authentication is required to set the network proxy used for downloading packages"
 msgstr "要設定用來下載套件的網路代理伺服器 需先經過身份認證"
 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:20
 msgid "Authentication is required to update packages"
 msgstr "要更新套件需先經過身份認證"
 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:21
+msgid "Authentication is required to upgrade the operating system"
+msgstr "要升級作業系統需先通過身份認證"
+
 #. SECURITY:
 #. - Normal users are allowed to cancel their own task without
 #. authentication, but a different user id needs the admin password
 #. to cancel another users task.
 #.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:26
+#: ../policy/org.freedesktop.packagekit.policy.in.h:27
 msgid "Cancel foreign task"
 msgstr "取消外來工作"
 
@@ -1784,7 +1828,7 @@ msgstr "取消外來工作"
 #. - This could be used to overwrite files not owned by the user using
 #. a carefully created package file.
 #.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:33
+#: ../policy/org.freedesktop.packagekit.policy.in.h:34
 msgid "Change location that packages are installed"
 msgstr "變更套件要安裝的位置"
 
@@ -1793,7 +1837,7 @@ msgstr "變更套件要安裝的位置"
 #. software sources as this can be used to enable new updates or
 #. install different versions of software.
 #.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:39
+#: ../policy/org.freedesktop.packagekit.policy.in.h:40
 msgid "Change software source parameters"
 msgstr "更改軟體來源參數"
 
@@ -1803,7 +1847,7 @@ msgstr "更改軟體來源參數"
 #. - Paranoid users (or parents!) can change this to 'auth_admin' or
 #. 'auth_admin_keep'.
 #.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:46
+#: ../policy/org.freedesktop.packagekit.policy.in.h:47
 msgid "Install signed package"
 msgstr "安裝已簽署的套件"
 
@@ -1813,7 +1857,7 @@ msgstr "安裝已簽署的套件"
 #. password would be a massive security hole.
 #. - This is not retained as each package should be authenticated.
 #.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:53
+#: ../policy/org.freedesktop.packagekit.policy.in.h:54
 msgid "Install untrusted local file"
 msgstr "安裝未信任的本地檔案"
 
@@ -1821,7 +1865,7 @@ msgstr "安裝未信任的本地檔案"
 #. - Normal users do not require admin authentication to refresh the
 #. cache, as this doesn't actually install or remove software.
 #.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:58
+#: ../policy/org.freedesktop.packagekit.policy.in.h:59
 msgid "Refresh system sources"
 msgstr "重新整理系統來源"
 
@@ -1832,7 +1876,7 @@ msgstr "重新整理系統來源"
 #. try to rebind drivers in use, for instance security authentication
 #. devices.
 #.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:66
+#: ../policy/org.freedesktop.packagekit.policy.in.h:67
 msgid "Reload a device"
 msgstr "重新載入裝置"
 
@@ -1845,7 +1889,7 @@ msgstr "重新載入裝置"
 #. be removed. If this is not possible, change this authentication to
 #. 'auth_admin'.
 #.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:76
+#: ../policy/org.freedesktop.packagekit.policy.in.h:77
 msgid "Remove package"
 msgstr "移除套件"
 
@@ -1854,7 +1898,7 @@ msgstr "移除套件"
 #. as this will change a large number of packages, and could expose the
 #. system to previously patched security vulnerabilities.
 #.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:82
+#: ../policy/org.freedesktop.packagekit.policy.in.h:83
 msgid "Rollback to a previous transaction"
 msgstr "回復至上一個處理事項"
 
@@ -1862,7 +1906,7 @@ msgstr "回復至上一個處理事項"
 #. - Normal users do not require admin authentication to set the proxy
 #. used for downloading packages.
 #.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:87
+#: ../policy/org.freedesktop.packagekit.policy.in.h:88
 msgid "Set network proxy"
 msgstr "設定網路代理伺服器"
 
@@ -1872,7 +1916,7 @@ msgstr "設定網路代理伺服器"
 #. without a secure authentication.
 #. - This is not kept as each package should be authenticated.
 #.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:94
+#: ../policy/org.freedesktop.packagekit.policy.in.h:95
 msgid "Trust a key used for signing packages"
 msgstr "信任一個用來簽署套件的金鑰"
 
@@ -1883,10 +1927,19 @@ msgstr "信任一個用來簽署套件的金鑰"
 #. - Changing this to anything other than 'yes' will break unattended
 #. updates.
 #.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:102
+#: ../policy/org.freedesktop.packagekit.policy.in.h:103
 msgid "Update packages"
 msgstr "更新套件"
 
+#. SECURITY:
+#. - Normal users require admin authentication to upgrade the disto as
+#. this can make the system unbootable or stop other applications from
+#. working.
+#.
+#: ../policy/org.freedesktop.packagekit.policy.in.h:109
+msgid "Upgrade System"
+msgstr "升級系統"
+
 #. TRANSLATORS: failed due to DBus security
 #: ../src/pk-main.c:87
 msgid "Startup failed due to security policies on this machine."
@@ -1904,9 +1957,7 @@ msgstr "正確的使用者 (一般為 root) 沒有啟動可執行檔"
 
 #. TRANSLATORS: or we are installed in a prefix
 #: ../src/pk-main.c:93
-msgid ""
-"The org.freedesktop.PackageKit.conf file is not installed in the system "
-"directory:"
+msgid "The org.freedesktop.PackageKit.conf file is not installed in the system directory:"
 msgstr "org.freedesktop.PackageKit.conf 檔案尚未安裝在系統目錄中:"
 
 #. TRANSLATORS: a backend is the system package tool, e.g. yum, apt
@@ -1947,10 +1998,10 @@ msgstr "PackageKit 服務"
 #. TRANSLATORS: fatal error, dbus is not running
 #: ../src/pk-main.c:267
 msgid "Cannot connect to the system bus"
-msgstr "無法連接至系統 bus"
+msgstr "無法連接至系統匯流"
 
 #. TRANSLATORS: cannot register on system bus, unknown reason -- geeky error follows
-#: ../src/pk-main.c:318
+#: ../src/pk-main.c:316
 msgid "Error trying to start:"
 msgstr "嘗試啟動時發生錯誤:"
 
@@ -1959,7 +2010,8 @@ msgid "To install debugging packages, extra sources need to be enabled"
 msgstr "要安裝除錯套件,需要啟用額外的來源"
 
 #. TRANSLATORS: is not GPG signed
-#: ../src/pk-polkit-action-lookup.c:171 ../src/pk-polkit-action-lookup.c:190
+#: ../src/pk-polkit-action-lookup.c:171
+#: ../src/pk-polkit-action-lookup.c:190
 msgid "The software is not from a trusted source."
 msgstr "這個軟體並非來自信任的來源。"
 
@@ -1989,123 +2041,72 @@ msgstr "許多套件"
 msgid "Only trusted"
 msgstr "只有信任的"
 
-#. TRANSLATORS: turn on all debugging
-#: ../src/egg-debug.c:388
-msgid "Show debugging information for all files"
-msgstr "顯示供所有檔案用的額外除錯資訊"
-
-#. TRANSLATORS: a list of modules to debug
-#: ../src/egg-debug.c:458
-msgid "Debug these specific modules"
-msgstr "針對這些指定的模組除錯"
-
-#. TRANSLATORS: a list of functions to debug
-#: ../src/egg-debug.c:461
-msgid "Debug these specific functions"
-msgstr "針對這些指定的功能除錯"
-
-#. TRANSLATORS: save to a log
-#: ../src/egg-debug.c:464
-msgid "Log debugging data to a file"
-msgstr "將除錯資料紀錄到檔案"
-
-#: ../src/egg-debug.c:468
-msgid "Debugging Options"
-msgstr "除錯選項"
-
-#: ../src/egg-debug.c:468
-msgid "Show debugging options"
-msgstr "顯示除錯選項"
-
+#~ msgid "Debug these specific modules"
+#~ msgstr "針對這些指定的模組除錯"
+#~ msgid "Debug these specific functions"
+#~ msgstr "針對這些指定的功能除錯"
+#~ msgid "Log debugging data to a file"
+#~ msgstr "將除錯資料紀錄到檔案"
 #~ msgid "Cannot install when offline"
 #~ msgstr "當離線時無法安裝"
-
 #~ msgid "Cannot refresh cache whilst offline"
 #~ msgstr "當離線時無法重新整理快取"
-
 #~ msgid "Please restart the application as it is being used."
 #~ msgstr "請重新啟動應用程式因為該應用程式正被使用中。"
-
 #~ msgid "This tool could not install the files: %s"
 #~ msgstr "此工具無法安裝檔案:%s"
-
 #~ msgid "This tool could not remove the packages: %s"
 #~ msgstr "此工具無法移除套件:%s"
-
 #~ msgid "Proceed removing additional packages?"
 #~ msgstr "是否要進行移除額外套件?"
-
 #~ msgid "The package removal was canceled!"
 #~ msgstr "套件移除已取消!"
-
 #~ msgid "This tool could not download the package %s as it could not be found"
 #~ msgstr "此工具無法下載 %s 套件因為找不到該套件"
-
 #~ msgid "This tool could not download the packages: %s"
 #~ msgstr "此工具無法下載套件:%s"
-
 #~ msgid "This tool could not update %s: %s"
 #~ msgstr "此工具無法更新 %s:%s"
-
 #~ msgid "This tool could not get the requirements for %s: %s"
 #~ msgstr "此工具無法取得 %s 的需求:%s"
-
 #~ msgid "This tool could not get the dependencies for %s: %s"
 #~ msgstr "此工具無法取得 %s 的相依性:%s"
-
 #~ msgid "This tool could not get package details for %s: %s"
 #~ msgstr "此工具無法取得 %s 的套件詳細資料:%s"
-
 #~ msgid "This tool could not find the files for %s: %s"
 #~ msgstr "此工具找不到 %s 的檔案:%s"
-
 #~ msgid "This tool could not get the file list for %s: %s"
 #~ msgstr "此工具無法取得 %s 的檔案清單:%s"
-
 #~ msgid "File already exists: %s"
 #~ msgstr "檔案已經存在:%s"
-
 #~ msgid "This tool could not get package list: %s"
 #~ msgstr "此工具無法取得套件清單:%s"
-
 #~ msgid "File does not exis