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

Richard Hughes hughsient at kemper.freedesktop.org
Thu Jul 1 03:23:11 PDT 2010


 NEWS                                               |   39 
 RELEASE                                            |   12 
 backends/apt/aptBackend.py                         |   47 
 backends/apt/pk-backend-apt.c                      |   20 
 backends/aptcc/apt.cpp                             |   32 
 backends/aptcc/get-distro-upgrade.py               |   44 
 backends/aptcc/pk-backend-aptcc.cpp                |   48 
 backends/entropy/entropyBackend.py                 |   10 
 backends/pacman/backend-install.c                  |  136 -
 backends/pacman/backend-install.h                  |    2 
 backends/pacman/backend-packages.c                 |    3 
 backends/pacman/backend-pacman.c                   |    2 
 backends/pacman/backend-remove.c                   |   13 
 backends/pacman/backend-transaction.c              |   49 
 backends/pacman/backend-transaction.h              |    3 
 backends/ports/portsBackend.rb                     |   19 
 backends/urpmi/helpers/perl_packagekit/enums.pm    |    2 
 backends/urpmi/helpers/perl_packagekit/prints.pm   |    2 
 backends/urpmi/helpers/urpmi-dispatched-backend.pl |    6 
 backends/urpmi/helpers/urpmi_backend/actions.pm    |    2 
 backends/urpmi/helpers/urpmi_backend/filters.pm    |    2 
 backends/urpmi/helpers/urpmi_backend/groups.pm     |    2 
 backends/urpmi/helpers/urpmi_backend/open_db.pm    |    2 
 backends/urpmi/helpers/urpmi_backend/tools.pm      |    2 
 backends/urpmi/pk-backend-urpmi.c                  |    2 
 backends/yum/yumBackend.py                         |   14 
 backends/zypp/pk-backend-zypp.cpp                  |    3 
 backends/zypp/zypp-utils.cpp                       |    6 
 client/Makefile.am                                 |   32 
 client/egg-test.c                                  |    1 
 client/egg-test.h                                  |    1 
 client/pk-console.c                                |   64 
 client/pk-monitor.c                                |   23 
 client/pk-self-test.c                              |   47 
 configure.ac                                       |   23 
 contrib/PackageKit.spec.in                         |   15 
 contrib/browser-plugin/pk-plugin-install.c         |    3 
 contrib/command-not-found/CommandNotFound.conf     |   11 
 contrib/command-not-found/pk-command-not-found.c   |   32 
 contrib/gtk-module/Makefile.am                     |   28 
 contrib/gtk-module/gtk-2.0/Makefile.am             |   10 
 contrib/gtk-module/gtk-3.0/Makefile.am             |   16 
 contrib/gtk-module/pk-gtk-module.c                 |    6 
 data/Makefile.am                                   |    2 
 data/tests/Makefile.am                             |    1 
 data/tests/pk-spawn-dispatcher.py                  |    2 
 data/tests/pk-spawn-test-sigquit.py                |   30 
 docs/html/pk-download.html                         |    1 
 docs/html/pk-matrix.html                           |    2 
 lib/packagekit-glib2/COPYING                       |  502 +++++
 lib/packagekit-glib2/Makefile.am                   |   12 
 lib/packagekit-glib2/egg-test.c                    |    1 
 lib/packagekit-glib2/egg-test.h                    |    1 
 lib/packagekit-glib2/pk-bitfield.c                 |  249 --
 lib/packagekit-glib2/pk-bitfield.h                 |   22 
 lib/packagekit-glib2/pk-catalog.c                  |  110 -
 lib/packagekit-glib2/pk-catalog.h                  |   22 
 lib/packagekit-glib2/pk-category.c                 |   22 
 lib/packagekit-glib2/pk-category.h                 |   22 
 lib/packagekit-glib2/pk-client-sync.c              |   22 
 lib/packagekit-glib2/pk-client-sync.h              |   22 
 lib/packagekit-glib2/pk-client.c                   |  512 -----
 lib/packagekit-glib2/pk-client.h                   |   22 
 lib/packagekit-glib2/pk-common.c                   |   78 
 lib/packagekit-glib2/pk-common.h                   |   22 
 lib/packagekit-glib2/pk-console-shared.c           |   62 
 lib/packagekit-glib2/pk-console-shared.h           |   22 
 lib/packagekit-glib2/pk-control-sync.c             |   22 
 lib/packagekit-glib2/pk-control-sync.h             |   22 
 lib/packagekit-glib2/pk-control.c                  |  308 ---
 lib/packagekit-glib2/pk-control.h                  |   22 
 lib/packagekit-glib2/pk-desktop.c                  |  110 -
 lib/packagekit-glib2/pk-desktop.h                  |   22 
 lib/packagekit-glib2/pk-details.c                  |   22 
 lib/packagekit-glib2/pk-details.h                  |   22 
 lib/packagekit-glib2/pk-distro-upgrade.c           |   22 
 lib/packagekit-glib2/pk-distro-upgrade.h           |   22 
 lib/packagekit-glib2/pk-enum.c                     |  208 --
 lib/packagekit-glib2/pk-enum.h                     |   22 
 lib/packagekit-glib2/pk-error.c                    |   22 
 lib/packagekit-glib2/pk-error.h                    |   22 
 lib/packagekit-glib2/pk-eula-required.c            |   22 
 lib/packagekit-glib2/pk-eula-required.h            |   22 
 lib/packagekit-glib2/pk-files.c                    |   22 
 lib/packagekit-glib2/pk-files.h                    |   22 
 lib/packagekit-glib2/pk-media-change-required.c    |   22 
 lib/packagekit-glib2/pk-media-change-required.h    |   22 
 lib/packagekit-glib2/pk-message.c                  |   22 
 lib/packagekit-glib2/pk-message.h                  |   22 
 lib/packagekit-glib2/pk-package-id.c               |  149 -
 lib/packagekit-glib2/pk-package-id.h               |   22 
 lib/packagekit-glib2/pk-package-ids.c              |   68 
 lib/packagekit-glib2/pk-package-ids.h              |   22 
 lib/packagekit-glib2/pk-package-sack-sync.c        |   22 
 lib/packagekit-glib2/pk-package-sack-sync.h        |   22 
 lib/packagekit-glib2/pk-package-sack.c             |  245 --
 lib/packagekit-glib2/pk-package-sack.h             |   22 
 lib/packagekit-glib2/pk-package.c                  |   93 -
 lib/packagekit-glib2/pk-package.h                  |   22 
 lib/packagekit-glib2/pk-progress-bar.c             |   57 
 lib/packagekit-glib2/pk-progress-bar.h             |   22 
 lib/packagekit-glib2/pk-progress.c                 |   49 
 lib/packagekit-glib2/pk-progress.h                 |   22 
 lib/packagekit-glib2/pk-repo-detail.c              |   22 
 lib/packagekit-glib2/pk-repo-detail.h              |   22 
 lib/packagekit-glib2/pk-repo-signature-required.c  |   22 
 lib/packagekit-glib2/pk-repo-signature-required.h  |   22 
 lib/packagekit-glib2/pk-require-restart.c          |   22 
 lib/packagekit-glib2/pk-require-restart.h          |   22 
 lib/packagekit-glib2/pk-results.c                  |  123 -
 lib/packagekit-glib2/pk-results.h                  |   22 
 lib/packagekit-glib2/pk-self-test.c                | 1916 ++++++++++++++++++++-
 lib/packagekit-glib2/pk-service-pack.c             |   95 -
 lib/packagekit-glib2/pk-service-pack.h             |   22 
 lib/packagekit-glib2/pk-source.c                   |   22 
 lib/packagekit-glib2/pk-source.h                   |   22 
 lib/packagekit-glib2/pk-task-sync.c                |   22 
 lib/packagekit-glib2/pk-task-sync.h                |   22 
 lib/packagekit-glib2/pk-task-text.c                |  116 -
 lib/packagekit-glib2/pk-task-text.h                |   22 
 lib/packagekit-glib2/pk-task-wrapper.c             |  109 -
 lib/packagekit-glib2/pk-task-wrapper.h             |   22 
 lib/packagekit-glib2/pk-task.c                     |  111 -
 lib/packagekit-glib2/pk-task.h                     |   22 
 lib/packagekit-glib2/pk-transaction-list.c         |  140 -
 lib/packagekit-glib2/pk-transaction-list.h         |   22 
 lib/packagekit-glib2/pk-transaction-past.c         |   22 
 lib/packagekit-glib2/pk-transaction-past.h         |   22 
 lib/packagekit-glib2/pk-update-detail.c            |   22 
 lib/packagekit-glib2/pk-update-detail.h            |   22 
 lib/python/packagekit/backend.py                   |   16 
 po/ja.po                                           |  665 +++----
 po/zh_CN.po                                        | 1386 ++++++++-------
 po/zh_TW.po                                        |   44 
 src/Makefile.am                                    |    5 
 src/egg-string.c                                   |  221 --
 src/egg-test.c                                     |  357 ---
 src/egg-test.h                                     |   48 
 src/pk-backend-internal.h                          |    1 
 src/pk-backend-spawn.c                             |  365 ----
 src/pk-backend-spawn.h                             |    5 
 src/pk-backend.c                                   |  454 ----
 src/pk-cache.c                                     |   28 
 src/pk-conf.c                                      |   61 
 src/pk-dbus.c                                      |   25 
 src/pk-engine.c                                    |  267 --
 src/pk-file-monitor.c                              |   24 
 src/pk-inhibit.c                                   |  108 -
 src/pk-lsof.c                                      |   39 
 src/pk-main.c                                      |   12 
 src/pk-notify.c                                    |   28 
 src/pk-proc.c                                      |   32 
 src/pk-self-test.c                                 | 1882 ++++++++++++++++++++
 src/pk-spawn.c                                     |  413 ----
 src/pk-spawn.h                                     |    3 
 src/pk-store.c                                     |  110 -
 src/pk-syslog.c                                    |   28 
 src/pk-time.c                                      |  229 --
 src/pk-time.h                                      |   14 
 src/pk-transaction-db.c                            |  197 --
 src/pk-transaction-db.h                            |    6 
 src/pk-transaction-extra.c                         |   25 
 src/pk-transaction-list.c                          |  623 ------
 src/pk-transaction-list.h                          |    7 
 src/pk-transaction.c                               |  233 --
 src/pk-transaction.h                               |    4 
 166 files changed, 7125 insertions(+), 8370 deletions(-)

New commits:
commit 80bf759941d910eed15aa4dbe047a3e51391f462
Author: Richard Hughes <richard at hughsie.com>
Date:   Thu Jul 1 11:22:45 2010 +0100

    Release version 0.6.6

diff --git a/NEWS b/NEWS
index de58c8c..15f1381 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,42 @@
+Version 0.6.6
+~~~~~~~~~~~~~
+Released: 2010-07-01
+
+Translations:
+ - Updates to Chinese translation (chenh)
+ - Updates to Japanese translation (khasida)
+ - Updates to Chinese (Taiwan) translation (zerng07)
+
+Libraries:
+ - glib: Explicitly mark the library as LGPLv2 by using the correct boilerplate code (Richard Hughes)
+
+Backends:
+ - apt: Adapt to split arguments from the Python backend (Sebastian Heinlein)
+ - apt: Adapt to an API change to allow OR searches (Sebastian Heinlein)
+ - apt: Fix group searching (Sebastian Heinlein)
+ - aptcc: Added distro upgrade support (Daniel Nicoletti)
+ - entropy: Implement forward compatibility support (Fabio Erculiani)
+ - pacman: Update for pacman-glib 3.4.0 (Jonathan Conder)
+ - ports: Use distfiles size, for uninstalled packages (Anders F Bjorklund)
+ - urpmi: Fix update-system command and only_trusted parameter (Aurelien Lefebvre)
+ - yum: Don't crash with an internal error if the .discinfo is malformed (Richard Hughes)
+ - zypp: Disable get_zypp in intialize (Michael Meeks)
+ - zypp: Fix FPE when there are no repos (Michael Meeks)
+ - zypp: Don't crash checking status of non-patches (Michael Meeks)
+
+New Features:
+ - Add a MaxSearchTime entry in CommandNotFound.conf and default to 2000ms (Richard Hughes)
+ - Assign names to our idle sources when using new versions of glib2 (Richard Hughes)
+ - Build the gtk-module for gtk-3.0 as well as gtk-2.0 if available (Richard Hughes)
+ - Port 'make check' to GTest rather than using our homegrown EggTest functionality (Richard Hughes)
+ - Get the control properties async when the user starts the pkmon tool (Richard Hughes)
+
+Bugfixes:
+ - Only set a cancelled error after we've given the backend a fighting chance to process the request (Richard Hughes)
+ - Move the packagekitd binary to libexec (Richard Hughes)
+ - Ensure we clear the cancel timer when we finish a PkBackend transaction (Richard Hughes)
+ - Ensure filters are properly split for spawned backends (Richard Hughes)
+
 Version 0.6.5
 ~~~~~~~~~~~~~
 Released: 2010-06-02
diff --git a/docs/html/pk-download.html b/docs/html/pk-download.html
index b7d6aae..be146bc 100644
--- a/docs/html/pk-download.html
+++ b/docs/html/pk-download.html
@@ -68,6 +68,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.6</td><td></td><td>2010-07-01</td></tr>
 <tr><td>0.6.5</td><td></td><td>2010-06-02</td></tr>
 <tr><td>0.6.4</td><td></td><td>2010-05-06</td></tr>
 <tr><td>0.6.3</td><td></td><td>2010-03-29</td></tr>
commit e38582033a527ffc32983bb8b0151a52dff7ac66
Author: Richard Hughes <richard at hughsie.com>
Date:   Thu Jul 1 10:31:35 2010 +0100

    Get the control properties async when the user starts the pkmon tool

diff --git a/client/pk-monitor.c b/client/pk-monitor.c
index c8f5b21..6763eef 100644
--- a/client/pk-monitor.c
+++ b/client/pk-monitor.c
@@ -79,7 +79,7 @@ static void
 pk_monitor_notify_network_status_cb (PkControl *control, GParamSpec *pspec, gpointer data)
 {
 	PkNetworkEnum state;
-	g_object_get (control, "network-status", &state, NULL);
+	g_object_get (control, "network-state", &state, NULL);
 	g_print ("network status=%s\n", pk_network_enum_to_string (state));
 }
 
@@ -337,6 +337,23 @@ pk_monitor_transaction_list_removed_cb (PkTransactionList *tlist, const gchar *t
 }
 
 /**
+ * pk_control_properties_cb:
+ **/
+static void
+pk_control_properties_cb (PkControl *control, GAsyncResult *res, gpointer user_data)
+{
+	gboolean ret;
+	GError *error = NULL;
+
+	/* get result */
+	ret = pk_control_get_properties_finish (control, res, &error);
+	if (!ret) {
+		g_print ("%s: %s", _("Failed to get properties"), error->message);
+		g_error_free (error);
+	}
+}
+
+/**
  * main:
  **/
 int
@@ -393,8 +410,10 @@ main (int argc, char *argv[])
 			  G_CALLBACK (pk_monitor_notify_locked_cb), NULL);
 	g_signal_connect (control, "notify::connected",
 			  G_CALLBACK (pk_monitor_notify_connected_cb), NULL);
-	g_signal_connect (control, "notify::network-status",
+	g_signal_connect (control, "notify::network-state",
 			  G_CALLBACK (pk_monitor_notify_network_status_cb), NULL);
+	pk_control_get_properties_async (control, NULL,
+					 (GAsyncReadyCallback) pk_control_properties_cb, NULL);
 
 	tlist = pk_transaction_list_new ();
 	g_signal_connect (tlist, "added",
commit 07965ec5d41e0e0eb368e0c04c7d59c217b80281
Author: Richard Hughes <richard at hughsie.com>
Date:   Tue Jun 29 12:05:27 2010 +0100

    Ensure filters are properly split for spawned backends

diff --git a/lib/python/packagekit/backend.py b/lib/python/packagekit/backend.py
index 4e5c341..50e1e25 100644
--- a/lib/python/packagekit/backend.py
+++ b/lib/python/packagekit/backend.py
@@ -652,24 +652,24 @@ class PackageKitBaseBackend:
             self.resolve(filters, package_ids)
             self.finished()
         elif cmd == 'search-details':
-            options = args[0]
+            filters = args[0].split(';')
             values = _to_unicode(args[1]).split(PACKAGE_IDS_DELIM)
-            self.search_details(options, values)
+            self.search_details(filters, values)
             self.finished()
         elif cmd == 'search-file':
-            options = args[0]
+            filters = args[0].split(';')
             values = args[1].split(PACKAGE_IDS_DELIM)
-            self.search_file(options, values)
+            self.search_file(filters, values)
             self.finished()
         elif cmd == 'search-group':
-            options = args[0]
+            filters = args[0].split(';')
             values = args[1].split(PACKAGE_IDS_DELIM)
-            self.search_group(options, values)
+            self.search_group(filters, values)
             self.finished()
         elif cmd == 'search-name':
-            options = args[0]
+            filters = args[0].split(';')
             values = _to_unicode(args[1]).split(PACKAGE_IDS_DELIM)
-            self.search_name(options, values)
+            self.search_name(filters, values)
             self.finished()
         elif cmd == 'signature-install':
             package = args[0]
commit 7dd8db95bcaad1f86ff2c494b3111d363d3e8c98
Author: Richard Hughes <richard at hughsie.com>
Date:   Tue Jun 29 11:36:47 2010 +0100

    trivial: fix 'make distcheck'

diff --git a/client/Makefile.am b/client/Makefile.am
index 4f2be44..f3de665 100644
--- a/client/Makefile.am
+++ b/client/Makefile.am
@@ -57,6 +57,8 @@ PK_GLIB2_LIBS =						\
 	$(NULL)
 
 pkcon_SOURCES =						\
+	egg-debug.c					\
+	egg-debug.h					\
 	pk-console.c					\
 	$(NULL)
 
@@ -72,6 +74,8 @@ pkcon_CFLAGS =						\
 	$(NULL)
 
 pkmon_SOURCES =						\
+	egg-debug.c					\
+	egg-debug.h					\
 	pk-monitor.c					\
 	$(NULL)
 
commit 6d365a61981e398a184eb1ba4cf0a1dd852c6e95
Author: Richard Hughes <richard at hughsie.com>
Date:   Tue Jun 29 11:27:27 2010 +0100

    Port 'make check' to GTest rather than using our homegrown EggTest functionality

diff --git a/client/Makefile.am b/client/Makefile.am
index 2fb64a1..4f2be44 100644
--- a/client/Makefile.am
+++ b/client/Makefile.am
@@ -102,34 +102,6 @@ pkgenpack_CFLAGS =					\
 	$(WARNINGFLAGS_C)				\
 	$(NULL)
 
-if EGG_BUILD_TESTS
-
-check_PROGRAMS =					\
-	pk-self-test
-
-pk_self_test_SOURCES =					\
-	egg-debug.c					\
-	egg-debug.h					\
-	egg-string.c					\
-	egg-string.h					\
-	egg-test.c					\
-	egg-test.h					\
-	pk-self-test.c					\
-	$(NULL)
-
-pk_self_test_LDADD =					\
-	$(GLIB_LIBS)					\
-	$(DBUS_LIBS)					\
-	$(SELFTEST_LIBS)				\
-	$(ARCHIVE_LIBS)					\
-	$(PK_GLIB2_LIBS)				\
-	$(NULL)
-
-pk_self_test_CFLAGS = -DEGG_TEST $(AM_CFLAGS)
-
-TESTS = pk-self-test
-endif
-
 clean-local:
 	rm -f *~
 	rm -f *.1
diff --git a/client/egg-test.c b/client/egg-test.c
deleted file mode 120000
index bdc6509..0000000
--- a/client/egg-test.c
+++ /dev/null
@@ -1 +0,0 @@
-../src/egg-test.c
\ No newline at end of file
diff --git a/client/egg-test.h b/client/egg-test.h
deleted file mode 120000
index 89f8622..0000000
--- a/client/egg-test.h
+++ /dev/null
@@ -1 +0,0 @@
-../src/egg-test.h
\ No newline at end of file
diff --git a/client/pk-console.c b/client/pk-console.c
index 077ccaf..9fea6bb 100644
--- a/client/pk-console.c
+++ b/client/pk-console.c
@@ -1765,67 +1765,3 @@ out_last:
 	return retval;
 }
 
-/***************************************************************************
- ***                          MAKE CHECK TESTS                           ***
- ***************************************************************************/
-#ifdef EGG_TEST
-#include "egg-test.h"
-
-void
-egg_test_console (EggTest *test)
-{
-	gchar *text_safe;
-
-	if (!egg_test_start (test, "PkConsole"))
-		return;
-
-	/************************************************************
-	 ****************         Padding          ******************
-	 ************************************************************/
-	egg_test_title (test, "pad smaller");
-	text_safe = pk_strpad ("richard", 10);
-	if (g_strcmp0 (text_safe, "richard   ") == 0)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "failed the padd '%s'", text_safe);
-	g_free (text_safe);
-
-	/************************************************************/
-	egg_test_title (test, "pad NULL");
-	text_safe = pk_strpad (NULL, 10);
-	if (g_strcmp0 (text_safe, "          ") == 0)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "failed the padd '%s'", text_safe);
-	g_free (text_safe);
-
-	/************************************************************/
-	egg_test_title (test, "pad nothing");
-	text_safe = pk_strpad ("", 10);
-	if (g_strcmp0 (text_safe, "          ") == 0)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "failed the padd '%s'", text_safe);
-	g_free (text_safe);
-
-	/************************************************************/
-	egg_test_title (test, "pad over");
-	text_safe = pk_strpad ("richardhughes", 10);
-	if (g_strcmp0 (text_safe, "richardhughes") == 0)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "failed the padd '%s'", text_safe);
-	g_free (text_safe);
-
-	/************************************************************/
-	egg_test_title (test, "pad zero");
-	text_safe = pk_strpad ("rich", 0);
-	if (g_strcmp0 (text_safe, "rich") == 0)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "failed the padd '%s'", text_safe);
-	g_free (text_safe);
-	egg_test_end (test);
-}
-#endif
-
diff --git a/client/pk-self-test.c b/client/pk-self-test.c
deleted file mode 100644
index 8ace1a5..0000000
--- a/client/pk-self-test.c
+++ /dev/null
@@ -1,47 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2008 Richard Hughes <richard at hughsie.com>
- * Copyright (C) 2008 Shishir Goel <crazyontheedge at gmail.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 <glib.h>
-#include <glib-object.h>
-#include "egg-test.h"
-#include "egg-debug.h"
-
-/* prototypes */
-void pk_genpack_test (EggTest *test);
-
-int
-main (int argc, char **argv)
-{
-	EggTest *test;
-
-	g_type_init ();
-	test = egg_test_init ();
-	egg_debug_init (&argc, &argv);
-
-	/* tests go here */
-	//pk_genpack_test (test);
-	
-	return (egg_test_finish (test));
-}
-
diff --git a/data/tests/Makefile.am b/data/tests/Makefile.am
index 58bcf89..aa719e2 100644
--- a/data/tests/Makefile.am
+++ b/data/tests/Makefile.am
@@ -8,6 +8,7 @@ TEST_FILES =						\
 	pk-spawn-test.sh				\
 	pk-spawn-proxy.sh				\
 	pk-spawn-test-sigquit.sh			\
+	pk-spawn-test-sigquit.py			\
 	pk-spawn-test-profiling.sh			\
 	pk-spawn-dispatcher.py				\
 	$(NULL)
diff --git a/data/tests/pk-spawn-dispatcher.py b/data/tests/pk-spawn-dispatcher.py
index c7cd2ac..0cd6885 100755
--- a/data/tests/pk-spawn-dispatcher.py
+++ b/data/tests/pk-spawn-dispatcher.py
@@ -32,7 +32,7 @@ class PackageKitYumBackend(PackageKitBaseBackend):
 
     def search_name(self,filters,key):
         # check we escape spaces properly
-        if key == 'power manager':
+        if key == ['power manager']:
             self.package("polkit;0.0.1;i386;data",INFO_AVAILABLE,"PolicyKit daemon")
 
 def main():
diff --git a/data/tests/pk-spawn-test-sigquit.py b/data/tests/pk-spawn-test-sigquit.py
new file mode 100644
index 0000000..badc36f
--- /dev/null
+++ b/data/tests/pk-spawn-test-sigquit.py
@@ -0,0 +1,30 @@
+#!/usr/bin/python
+#
+# 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.
+
+# Copyright (C) 2010 Richard Hughes <richard at hughsie.com>
+
+from signal import *
+from time import sleep
+from sys import stdout
+
+def process_quit(signum, frame):
+    exit()
+
+def main():
+    signal(SIGQUIT, process_quit)
+
+    for i in [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]:
+        stdout.write("percentage\t%i\n" % (i * 10))
+        stdout.flush()
+        sleep(0.3)
+
+if __name__ == "__main__":
+    main()
diff --git a/lib/packagekit-glib2/Makefile.am b/lib/packagekit-glib2/Makefile.am
index 0cbe0a6..8fdce5e 100644
--- a/lib/packagekit-glib2/Makefile.am
+++ b/lib/packagekit-glib2/Makefile.am
@@ -16,6 +16,7 @@ INCLUDES = \
 	-DPK_COMPILATION					\
 	-DPK_DB_DIR=\""$(PK_DB_DIR)"\" 				\
 	-DLOCALSTATEDIR=\""$(localstatedir)"\" 			\
+	-DTESTDATADIR=\""$(top_srcdir)/data/tests"\"		\
 	-DPACKAGE_DATA_DIR=\""$(datadir)"\"			\
 	-DPACKAGE_LOCALE_DIR=\""$(prefix)/$(DATADIRNAME)/locale"\"
 
@@ -192,19 +193,12 @@ check_PROGRAMS =						\
 	pk-self-test
 
 pk_self_test_SOURCES =						\
-	$(libpackagekit_glib2_la_SOURCES)			\
-	egg-test.h						\
-	egg-test.c						\
-	pk-task-wrapper.c					\
-	pk-task-wrapper.h					\
-	pk-task-text.c						\
-	pk-task-text.h						\
-	pk-console-shared.c					\
-	pk-console-shared.h					\
 	pk-self-test.c						\
 	$(NULL)
 
 pk_self_test_LDADD =						\
+	libpackagekit-glib2.la					\
+	libpackagekitprivate.a					\
 	$(GLIB_LIBS)						\
 	$(DBUS_LIBS)						\
 	$(SELFTEST_LIBS)					\
diff --git a/lib/packagekit-glib2/egg-test.c b/lib/packagekit-glib2/egg-test.c
deleted file mode 120000
index ad24c4f..0000000
--- a/lib/packagekit-glib2/egg-test.c
+++ /dev/null
@@ -1 +0,0 @@
-../../src/egg-test.c
\ No newline at end of file
diff --git a/lib/packagekit-glib2/egg-test.h b/lib/packagekit-glib2/egg-test.h
deleted file mode 120000
index 5a65e4a..0000000
--- a/lib/packagekit-glib2/egg-test.h
+++ /dev/null
@@ -1 +0,0 @@
-../../src/egg-test.h
\ No newline at end of file
diff --git a/lib/packagekit-glib2/pk-bitfield.c b/lib/packagekit-glib2/pk-bitfield.c
index 2cdeb6a..b769de1 100644
--- a/lib/packagekit-glib2/pk-bitfield.c
+++ b/lib/packagekit-glib2/pk-bitfield.c
@@ -326,230 +326,3 @@ out:
 	g_strfreev (split);
 	return filters_enum;
 }
-
-/***************************************************************************
- ***                          MAKE CHECK TESTS                           ***
- ***************************************************************************/
-#ifdef EGG_TEST
-#include "egg-test.h"
-
-void
-pk_bitfield_test (gpointer user_data)
-{
-	EggTest *test = (EggTest *) user_data;
-	gchar *text;
-	PkBitfield filter;
-	gint value;
-	PkBitfield values;
-
-	if (!egg_test_start (test, "PkBitfield"))
-		return;
-
-	/************************************************************/
-	egg_test_title (test, "check we can convert filter bitfield to text (none)");
-	text = pk_filter_bitfield_to_string (pk_bitfield_value (PK_FILTER_ENUM_NONE));
-	if (g_strcmp0 (text, "none") == 0)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "text was %s", text);
-	g_free (text);
-
-	/************************************************************/
-	egg_test_title (test, "check we can invert a bit 1 -> 0");
-	values = pk_bitfield_value (PK_FILTER_ENUM_NOT_DEVELOPMENT) | pk_bitfield_value (PK_FILTER_ENUM_NOT_NEWEST);
-	pk_bitfield_invert (values, PK_FILTER_ENUM_NOT_DEVELOPMENT);
-	if (values == pk_bitfield_value (PK_FILTER_ENUM_NOT_NEWEST))
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "values were %" PK_BITFIELD_FORMAT, values);
-
-	/************************************************************/
-	egg_test_title (test, "check we can invert a bit 0 -> 1");
-	values = 0;
-	pk_bitfield_invert (values, PK_FILTER_ENUM_NOT_DEVELOPMENT);
-	if (values == pk_bitfield_value (PK_FILTER_ENUM_NOT_DEVELOPMENT))
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "values were %" PK_BITFIELD_FORMAT, values);
-
-	/************************************************************/
-	egg_test_title (test, "check we can convert filter bitfield to text (single)");
-	text = pk_filter_bitfield_to_string (pk_bitfield_value (PK_FILTER_ENUM_NOT_DEVELOPMENT));
-	if (g_strcmp0 (text, "~devel") == 0)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "text was %s", text);
-	g_free (text);
-
-	/************************************************************/
-	egg_test_title (test, "check we can convert filter bitfield to text (plural)");
-	text = pk_filter_bitfield_to_string (pk_bitfield_value (PK_FILTER_ENUM_NOT_DEVELOPMENT) |
-					   pk_bitfield_value (PK_FILTER_ENUM_GUI) |
-					   pk_bitfield_value (PK_FILTER_ENUM_NEWEST));
-	if (g_strcmp0 (text, "~devel;gui;newest") == 0)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "text was %s", text);
-	g_free (text);
-
-	/************************************************************/
-	egg_test_title (test, "check we can convert filter text to bitfield (none)");
-	filter = pk_filter_bitfield_from_string ("none");
-	if (filter == pk_bitfield_value (PK_FILTER_ENUM_NONE))
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "filter was %" PK_BITFIELD_FORMAT, filter);
-
-	/************************************************************/
-	egg_test_title (test, "check we can convert filter text to bitfield (single)");
-	filter = pk_filter_bitfield_from_string ("~devel");
-	if (filter == pk_bitfield_value (PK_FILTER_ENUM_NOT_DEVELOPMENT))
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "filter was %" PK_BITFIELD_FORMAT, filter);
-
-	/************************************************************/
-	egg_test_title (test, "check we can convert filter text to bitfield (plural)");
-	filter = pk_filter_bitfield_from_string ("~devel;gui;newest");
-	if (filter == (pk_bitfield_value (PK_FILTER_ENUM_NOT_DEVELOPMENT) |
-		       pk_bitfield_value (PK_FILTER_ENUM_GUI) |
-		       pk_bitfield_value (PK_FILTER_ENUM_NEWEST)))
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "filter was %" PK_BITFIELD_FORMAT, filter);
-
-	/************************************************************/
-	egg_test_title (test, "check we can add / remove bitfield");
-	filter = pk_bitfield_value (PK_FILTER_ENUM_NOT_DEVELOPMENT) |
-		 pk_bitfield_value (PK_FILTER_ENUM_GUI) |
-		 pk_bitfield_value (PK_FILTER_ENUM_NEWEST);
-	pk_bitfield_add (filter, PK_FILTER_ENUM_NOT_FREE);
-	pk_bitfield_remove (filter, PK_FILTER_ENUM_NOT_DEVELOPMENT);
-	text = pk_filter_bitfield_to_string (filter);
-	if (g_strcmp0 (text, "gui;~free;newest") == 0)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "text was %s", text);
-	g_free (text);
-
-	/************************************************************/
-	egg_test_title (test, "check we can test enum presence");
-	filter = pk_bitfield_value (PK_FILTER_ENUM_NOT_DEVELOPMENT) |
-		 pk_bitfield_value (PK_FILTER_ENUM_GUI) |
-		 pk_bitfield_value (PK_FILTER_ENUM_NEWEST);
-	if (pk_bitfield_contain (filter, PK_FILTER_ENUM_NOT_DEVELOPMENT))
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "wrong boolean");
-
-	/************************************************************/
-	egg_test_title (test, "check we can test enum false-presence");
-	if (!pk_bitfield_contain (filter, PK_FILTER_ENUM_FREE))
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "wrong boolean");
-
-	/************************************************************/
-	egg_test_title (test, "check we can add / remove bitfield to nothing");
-	filter = pk_bitfield_value (PK_FILTER_ENUM_NOT_DEVELOPMENT);
-	pk_bitfield_remove (filter, PK_FILTER_ENUM_NOT_DEVELOPMENT);
-	text = pk_filter_bitfield_to_string (filter);
-	if (g_strcmp0 (text, "none") == 0)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "text was %s", text);
-	g_free (text);
-
-	/************************************************************/
-	egg_test_title (test, "role bitfield from enums (unknown)");
-	values = pk_bitfield_from_enums (PK_ROLE_ENUM_UNKNOWN, -1);
-	if (values == pk_bitfield_value (PK_ROLE_ENUM_UNKNOWN))
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "returned bitfield %" PK_BITFIELD_FORMAT, values);
-
-	/************************************************************/
-	egg_test_title (test, "role bitfield from enums (random)");
-	values = pk_bitfield_from_enums (PK_ROLE_ENUM_SEARCH_GROUP, PK_ROLE_ENUM_SEARCH_DETAILS, -1);
-	if (values == (pk_bitfield_value (PK_ROLE_ENUM_SEARCH_DETAILS) |
-		       pk_bitfield_value (PK_ROLE_ENUM_SEARCH_GROUP)))
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "returned bitfield %" PK_BITFIELD_FORMAT, values);
-
-	/************************************************************/
-	egg_test_title (test, "group bitfield from enums (unknown)");
-	values = pk_bitfield_from_enums (PK_GROUP_ENUM_UNKNOWN, -1);
-	if (values == pk_bitfield_value (PK_GROUP_ENUM_UNKNOWN))
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "returned bitfield %" PK_BITFIELD_FORMAT, values);
-
-	/************************************************************/
-	egg_test_title (test, "group bitfield from enums (random)");
-	values = pk_bitfield_from_enums (PK_GROUP_ENUM_ACCESSIBILITY, -1);
-	if (values == (pk_bitfield_value (PK_GROUP_ENUM_ACCESSIBILITY)))
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "returned bitfield %" PK_BITFIELD_FORMAT, values);
-
-	/************************************************************/
-	egg_test_title (test, "group bitfield to text (unknown)");
-	values = pk_bitfield_from_enums (PK_GROUP_ENUM_UNKNOWN, -1);
-	text = pk_group_bitfield_to_string (values);
-	if (g_strcmp0 (text, "unknown") == 0)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "returned bitfield text %s (%" PK_BITFIELD_FORMAT ")", text, values);
-	g_free (text);
-
-	/************************************************************/
-	egg_test_title (test, "group bitfield to text (first and last)");
-	values = pk_bitfield_from_enums (PK_GROUP_ENUM_ACCESSIBILITY, PK_GROUP_ENUM_UNKNOWN, -1);
-	text = pk_group_bitfield_to_string (values);
-	if (g_strcmp0 (text, "unknown;accessibility") == 0)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "returned bitfield text %s (%" PK_BITFIELD_FORMAT ")", text, values);
-	g_free (text);
-
-	/************************************************************/
-	egg_test_title (test, "group bitfield to text (random)");
-	values = pk_bitfield_from_enums (PK_GROUP_ENUM_UNKNOWN, PK_GROUP_ENUM_REPOS, -1);
-	text = pk_group_bitfield_to_string (values);
-	if (g_strcmp0 (text, "unknown;repos") == 0)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "returned bitfield text %s (%" PK_BITFIELD_FORMAT ")", text, values);
-	g_free (text);
-
-	/************************************************************/
-	egg_test_title (test, "priority check missing");
-	values = pk_bitfield_value (PK_ROLE_ENUM_SEARCH_DETAILS) |
-		 pk_bitfield_value (PK_ROLE_ENUM_SEARCH_GROUP);
-	value = pk_bitfield_contain_priority (values, PK_ROLE_ENUM_SEARCH_FILE, -1);
-	if (value == -1)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "returned priority %i when should be missing", value);
-
-	/************************************************************/
-	egg_test_title (test, "priority check first");
-	value = pk_bitfield_contain_priority (values, PK_ROLE_ENUM_SEARCH_GROUP, -1);
-	if (value == PK_ROLE_ENUM_SEARCH_GROUP)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "returned wrong value; %i", value);
-
-	/************************************************************/
-	egg_test_title (test, "priority check second, correct");
-	value = pk_bitfield_contain_priority (values, PK_ROLE_ENUM_SEARCH_FILE, PK_ROLE_ENUM_SEARCH_GROUP, -1);
-	if (value == PK_ROLE_ENUM_SEARCH_GROUP)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "returned wrong value; %i", value);
-
-	egg_test_end (test);
-}
-#endif
-
diff --git a/lib/packagekit-glib2/pk-catalog.c b/lib/packagekit-glib2/pk-catalog.c
index 40dbbd9..64a311b 100644
--- a/lib/packagekit-glib2/pk-catalog.c
+++ b/lib/packagekit-glib2/pk-catalog.c
@@ -648,91 +648,3 @@ pk_catalog_new (void)
 	catalog = g_object_new (PK_TYPE_CATALOG, NULL);
 	return PK_CATALOG (catalog);
 }
-
-/***************************************************************************
- ***                          MAKE CHECK TESTS                           ***
- ***************************************************************************/
-#ifdef EGG_TEST
-#include "egg-test.h"
-
-static void
-pk_catalog_test_lookup_cb (GObject *object, GAsyncResult *res, EggTest *test)
-{
-	PkCatalog *catalog = PK_CATALOG (object);
-	GError *error = NULL;
-	GPtrArray *array;
-	guint i;
-	PkPackage *package;
-
-	/* get the results */
-	array = pk_catalog_lookup_finish (catalog, res, &error);
-	if (array == NULL) {
-		egg_test_failed (test, "failed to lookup catalog: %s", error->message);
-		g_error_free (error);
-		goto out;
-	}
-
-	/* check size */
-	if (array->len != 3) {
-		egg_test_failed (test, "incorrect size, expecting 3 got %i", array->len);
-		goto out;
-	}
-
-	/* list for shits and giggles */
-	for (i=0; i<array->len; i++) {
-		package = g_ptr_array_index (array, i);
-		egg_debug ("%i\t%s", i, pk_package_get_id (package));
-	}
-out:
-	if (array != NULL)
-		g_ptr_array_unref (array);
-	egg_test_loop_quit (test);
-}
-
-static void
-pk_catalog_test_progress_cb (PkProgress *progress, PkProgressType type, EggTest *test)
-{
-	PkStatusEnum status;
-	if (type == PK_PROGRESS_TYPE_STATUS) {
-		g_object_get (progress,
-			      "status", &status,
-			      NULL);
-		egg_debug ("now %s", pk_status_enum_to_string (status));
-	}
-}
-
-void
-pk_catalog_test (gpointer user_data)
-{
-	EggTest *test = (EggTest *) user_data;
-	PkCatalog *catalog;
-	gchar *path;
-
-	if (!egg_test_start (test, "PkCatalog"))
-		return;
-
-	/************************************************************/
-	egg_test_title (test, "get an instance");
-	catalog = pk_catalog_new ();
-	egg_test_assert (test, catalog != NULL);
-
-	/************************************************************/
-	egg_test_title (test, "get test file");
-	path = egg_test_get_data_file ("test.catalog");
-	egg_test_assert (test, path != NULL);
-
-	/************************************************************/
-	egg_test_title (test, "lookup catalog");
-	pk_catalog_lookup_async (catalog, path, NULL,
-			 	 (PkProgressCallback) pk_catalog_test_progress_cb, test,
-				 (GAsyncReadyCallback) pk_catalog_test_lookup_cb, test);
-	egg_test_loop_wait (test, 150000);
-	egg_test_success (test, "resolvd, searched, etc. in %i", egg_test_elapsed (test));
-
-	g_object_unref (catalog);
-	g_free (path);
-
-	egg_test_end (test);
-}
-#endif
-
diff --git a/lib/packagekit-glib2/pk-client.c b/lib/packagekit-glib2/pk-client.c
index 60d8d10..25cb19d 100644
--- a/lib/packagekit-glib2/pk-client.c
+++ b/lib/packagekit-glib2/pk-client.c
@@ -4170,493 +4170,3 @@ pk_client_new (void)
 	client = g_object_new (PK_TYPE_CLIENT, NULL);
 	return PK_CLIENT (client);
 }
-
-/***************************************************************************
- ***                          MAKE CHECK TESTS                           ***
- ***************************************************************************/
-#ifdef EGG_TEST
-#include "egg-test.h"
-#include "pk-control-sync.h"
-#include "pk-client-sync.h"
-
-static void
-pk_client_test_resolve_cb (GObject *object, GAsyncResult *res, EggTest *test)
-{
-	PkClient *client = PK_CLIENT (object);
-	GError *error = NULL;
-	PkResults *results = NULL;
-	PkExitEnum exit_enum;
-	GPtrArray *packages;
-	gboolean idle;
-
-	/* get the results */
-	results = pk_client_generic_finish (client, res, &error);
-	if (results == NULL) {
-		egg_test_failed (test, "failed to resolve: %s", error->message);
-		g_error_free (error);
-		goto out;
-	}
-
-	exit_enum = pk_results_get_exit_code (results);
-	if (exit_enum != PK_EXIT_ENUM_SUCCESS)
-		egg_test_failed (test, "failed to resolve success: %s", pk_exit_enum_to_string (exit_enum));
-
-	packages = pk_results_get_package_array (results);
-	if (packages == NULL)
-		egg_test_failed (test, "no packages!");
-
-	/* check idle */
-	g_object_get (client, "idle", &idle, NULL);
-	if (!idle)
-		egg_test_failed (test, "not idle in finished handler");
-
-	if (packages->len != 2)
-		egg_test_failed (test, "invalid number of packages: %i", packages->len);
-
-	g_ptr_array_unref (packages);
-
-	egg_debug ("results exit enum = %s", pk_exit_enum_to_string (exit_enum));
-out:
-	if (results != NULL)
-		g_object_unref (results);
-	egg_test_loop_quit (test);
-}
-
-static void
-pk_client_test_get_details_cb (GObject *object, GAsyncResult *res, EggTest *test)
-{
-	PkClient *client = PK_CLIENT (object);
-	GError *error = NULL;
-	PkResults *results = NULL;
-	PkExitEnum exit_enum;
-	GPtrArray *details;
-
-	/* get the results */
-	results = pk_client_generic_finish (client, res, &error);
-	if (results == NULL) {
-		egg_test_failed (test, "failed to resolve: %s", error->message);
-		g_error_free (error);
-		goto out;
-	}
-
-	exit_enum = pk_results_get_exit_code (results);
-	if (exit_enum != PK_EXIT_ENUM_SUCCESS)
-		egg_test_failed (test, "failed to get details: %s", pk_exit_enum_to_string (exit_enum));
-
-	details = pk_results_get_details_array (results);
-	if (details == NULL)
-		egg_test_failed (test, "no details!");
-
-	if (details->len != 1)
-		egg_test_failed (test, "invalid number of details: %i", details->len);
-
-	g_ptr_array_unref (details);
-
-	egg_debug ("results exit enum = %s", pk_exit_enum_to_string (exit_enum));
-out:
-	if (results != NULL)
-		g_object_unref (results);
-	egg_test_loop_quit (test);
-}
-
-static void
-pk_client_test_get_updates_cb (GObject *object, GAsyncResult *res, EggTest *test)
-{
-	PkClient *client = PK_CLIENT (object);
-	GError *error = NULL;
-	PkResults *results = NULL;
-	PkExitEnum exit_enum;
-	PkPackageSack *sack;
-	guint size;
-
-	/* get the results */
-	results = pk_client_generic_finish (client, res, &error);
-	if (results == NULL) {
-		egg_test_failed (test, "failed to resolve: %s", error->message);
-		g_error_free (error);
-		goto out;
-	}
-
-	exit_enum = pk_results_get_exit_code (results);
-	if (exit_enum != PK_EXIT_ENUM_SUCCESS)
-		egg_test_failed (test, "failed to get updates: %s", pk_exit_enum_to_string (exit_enum));
-
-	sack = pk_results_get_package_sack (results);
-	if (sack == NULL)
-		egg_test_failed (test, "no details!");
-
-	/* check size */
-	size = pk_package_sack_get_size (sack);
-	if (size != 3)
-		egg_test_failed (test, "invalid number of updates: %i", size);
-
-	g_object_unref (sack);
-
-	egg_debug ("results exit enum = %s", pk_exit_enum_to_string (exit_enum));
-out:
-	if (results != NULL)
-		g_object_unref (results);
-	egg_test_loop_quit (test);
-}
-
-static void
-pk_client_test_search_name_cb (GObject *object, GAsyncResult *res, EggTest *test)
-{
-	PkClient *client = PK_CLIENT (object);
-	GError *error = NULL;
-	PkResults *results = NULL;
-	PkExitEnum exit_enum;
-	PkError *error_code = NULL;
-
-	/* get the results */
-	results = pk_client_generic_finish (client, res, &error);
-	if (results == NULL) {
-		egg_test_failed (test, "failed to resolve: %s", error->message);
-		g_error_free (error);
-		goto out;
-	}
-
-	exit_enum = pk_results_get_exit_code (results);
-	if (exit_enum != PK_EXIT_ENUM_CANCELLED)
-		egg_test_failed (test, "failed to cancel search: %s", pk_exit_enum_to_string (exit_enum));
-
-	/* check error code */
-	error_code = pk_results_get_error_code (results);
-	if (pk_error_get_code (error_code) != PK_ERROR_ENUM_TRANSACTION_CANCELLED)
-		egg_test_failed (test, "failed to get error code: %i", pk_error_get_code (error_code));
-	if (g_strcmp0 (pk_error_get_details (error_code), "The task was stopped successfully") != 0 &&
-	    g_strcmp0 (pk_error_get_details (error_code), "transaction was cancelled") != 0)
-		egg_test_failed (test, "failed to get error message: %s", pk_error_get_details (error_code));
-out:
-	if (error_code != NULL)
-		g_object_unref (error_code);
-	if (results != NULL)
-		g_object_unref (results);
-	egg_test_loop_quit (test);
-}
-
-static guint _progress_cb = 0;
-static guint _status_cb = 0;
-static guint _package_cb = 0;
-static guint _allow_cancel_cb = 0;
-gchar *_tid = NULL;
-
-static void
-pk_client_test_progress_cb (PkProgress *progress, PkProgressType type, EggTest *test)
-{
-	gchar *tid;
-	if (type == PK_PROGRESS_TYPE_PACKAGE_ID)
-		_package_cb++;
-	if (type == PK_PROGRESS_TYPE_PERCENTAGE)
-		_progress_cb++;
-	if (type == PK_PROGRESS_TYPE_SUBPERCENTAGE)
-		_progress_cb++;
-	if (type == PK_PROGRESS_TYPE_ALLOW_CANCEL)
-		_allow_cancel_cb++;
-	if (type == PK_PROGRESS_TYPE_STATUS)
-		_status_cb++;
-
-	/* get the running transaction id if we've not set it before */
-	g_object_get (progress, "transaction-id", &tid, NULL);
-	if (tid != NULL && _tid == NULL)
-		_tid = g_strdup (tid);
-	g_free (tid);
-}
-
-static gboolean
-pk_client_test_cancel_cb (GCancellable *cancellable)
-{
-	egg_warning ("cancelling method");
-	g_cancellable_cancel (cancellable);
-	return FALSE;
-}
-
-static void
-pk_client_test_download_cb (GObject *object, GAsyncResult *res, EggTest *test)
-{
-	PkClient *client = PK_CLIENT (object);
-	GError *error = NULL;
-	PkResults *results = NULL;
-	PkExitEnum exit_enum;
-	PkFiles *item;
-	GPtrArray *array = NULL;
-	guint len;
-	gchar *package_id = NULL;
-	gchar **files = NULL;
-
-	/* get the results */
-	results = pk_client_generic_finish (client, res, &error);
-	if (results == NULL) {
-		egg_test_failed (test, "failed to download: %s", error->message);
-		g_error_free (error);
-		goto out;
-	}
-
-	exit_enum = pk_results_get_exit_code (results);
-	if (exit_enum != PK_EXIT_ENUM_SUCCESS)
-		egg_test_failed (test, "failed to download: %s", pk_exit_enum_to_string (exit_enum));
-
-	/* check number */
-	array = pk_results_get_files_array (results);
-	if (array->len != 2)
-		egg_test_failed (test, "invalid number of files: %i", array->len);
-
-	/* check a result */
-	item = g_ptr_array_index (array, 0);
-	g_object_get (item,
-		      "package-id", &package_id,
-		      "files", &files,
-		      NULL);
-	if (g_strcmp0 (package_id, "powertop-common;1.8-1.fc8;i386;fedora") != 0)
-		egg_test_failed (test, "invalid package_id: %s", package_id);
-	len = g_strv_length (files);
-	if (len != 1)
-		egg_test_failed (test, "invalid number of files: %i", len);
-	if (g_strcmp0 (files[0], "/tmp/powertop-common-1.8-1.fc8.rpm") != 0)
-		egg_test_failed (test, "invalid filename: %s, maybe not rewritten", files[0]);
-out:
-	g_strfreev (files);
-	g_free (package_id);
-	g_ptr_array_unref (array);
-	if (results != NULL)
-		g_object_unref (results);
-	egg_test_loop_quit (test);
-}
-
-static void
-pk_client_test_recursive_signal_cb (PkControl *control, EggTest *test)
-{
-	gboolean ret;
-	ret = pk_control_get_properties (control, NULL, NULL);
-	if (!ret)
-		egg_test_failed (test, "could not get properties sync");
-}
-
-/**
- * pk_client_test_notify_idle_cb:
- **/
-static void
-pk_client_test_notify_idle_cb (PkClient *client, GParamSpec *pspec, EggTest *test)
-{
-	gboolean idle;
-	g_object_get (client, "idle", &idle, NULL);
-	egg_debug ("idle=%i", idle);
-}
-
-void
-pk_client_test (gpointer user_data)
-{
-	EggTest *test = (EggTest *) user_data;
-	PkClient *client;
-	gchar **package_ids;
-	gchar *file;
-	GCancellable *cancellable;
-	gboolean ret;
-	gchar **values;
-	GError *error = NULL;
-	PkProgress *progress;
-	gchar *tid;
-	PkRoleEnum role;
-	PkStatusEnum status;
-	PkResults *results;
-
-	if (!egg_test_start (test, "PkClient"))
-		return;
-
-	/************************************************************/
-	egg_test_title (test, "test user temp");
-	file = pk_client_get_user_temp ("self-test", NULL);
-	if (g_str_has_suffix (file, "/.PackageKit/self-test") && g_str_has_prefix (file, "/home/"))
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "temp was %s", file);
-	g_free (file);
-
-	/************************************************************/
-	egg_test_title (test, "test native TRUE");
-	ret = pk_client_is_file_native ("/tmp");
-	egg_test_assert (test, ret);
-
-	/************************************************************/
-	egg_test_title (test, "test native FALSE");
-	ret = pk_client_is_file_native ("/tmp/.gvfs/moo");
-	egg_test_assert (test, !ret);
-
-	/************************************************************/
-	egg_test_title (test, "test resolve NULL");
-	file = pk_client_real_path (NULL);
-	if (file == NULL)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, NULL);
-
-	/************************************************************/
-	egg_test_title (test, "test resolve /etc/hosts");
-	file = pk_client_real_path ("/etc/hosts");
-	if (file != NULL && g_strcmp0 (file, "/etc/hosts") == 0)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "got: %s", file);
-	g_free (file);
-
-	/************************************************************/
-	egg_test_title (test, "test resolve /etc/../etc/hosts");
-	file = pk_client_real_path ("/etc/../etc/hosts");
-	if (file != NULL && g_strcmp0 (file, "/etc/hosts") == 0)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "got: %s", file);
-	g_free (file);
-
-	/************************************************************/
-	egg_test_title (test, "get client");
-	client = pk_client_new ();
-	g_signal_connect (client, "notify::idle",
-			  G_CALLBACK (pk_client_test_notify_idle_cb), test);
-	egg_test_assert (test, client != NULL);
-
-	/************************************************************/
-	egg_test_title (test, "check idle");
-	g_object_get (client, "idle", &ret, NULL);
-	egg_test_assert (test, ret);
-
-	/************************************************************/
-	egg_test_title (test, "resolve package");
-	package_ids = pk_package_ids_from_string ("glib2;2.14.0;i386;fedora&powertop");
-	pk_client_resolve_async (client, pk_bitfield_value (PK_FILTER_ENUM_INSTALLED), package_ids, NULL,
-				 (PkProgressCallback) pk_client_test_progress_cb, test,
-				 (GAsyncReadyCallback) pk_client_test_resolve_cb, test);
-	g_strfreev (package_ids);
-	egg_test_loop_wait (test, 15000);
-	egg_test_success (test, "resolved in %i", egg_test_elapsed (test));
-
-	/************************************************************/
-	egg_test_title (test, "check idle");
-	g_object_get (client, "idle", &ret, NULL);
-	egg_test_assert (test, ret);
-
-	/************************************************************/
-	egg_test_title (test, "get progress of past transaction");
-	progress = pk_client_get_progress (client, _tid, NULL, &error);
-	g_object_get (progress,
-		      "transaction-id", &tid,
-		      "role", &role,
-		      "status", &status,
-		      NULL);
-	if (g_strcmp0 (tid, _tid) != 0)
-		egg_test_failed (test, "incorrect transaction-id, got %s, expected %s", tid, _tid);
-	if (role != PK_ROLE_ENUM_RESOLVE)
-		egg_test_failed (test, "incorrect role, got %s", pk_role_enum_to_string (role));
-	if (status != PK_STATUS_ENUM_FINISHED)
-		egg_test_failed (test, "incorrect status, got %s", pk_status_enum_to_string (status));
-	egg_test_success (test, "got progress in %i", egg_test_elapsed (test));
-	g_object_unref (progress);
-	g_free (tid);
-	g_free (_tid);
-
-	/************************************************************/
-	egg_test_title (test, "got progress updates");
-	if (_progress_cb > 0)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "got %i updates", _progress_cb);
-
-	/************************************************************/
-	egg_test_title (test, "got status updates");
-	if (_status_cb > 0)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "got %i updates", _status_cb);
-
-	/* reset */
-	_progress_cb = 0;
-	_status_cb = 0;
-//	_package_cb = 0;
-
-	/************************************************************/
-	egg_test_title (test, "get details about package");
-	package_ids = pk_package_ids_from_id ("powertop;1.8-1.fc8;i386;fedora");
-	pk_client_get_details_async (client, package_ids, NULL,
-				     (PkProgressCallback) pk_client_test_progress_cb, test,
-				     (GAsyncReadyCallback) pk_client_test_get_details_cb, test);
-	g_strfreev (package_ids);
-	egg_test_loop_wait (test, 15000);
-	egg_test_success (test, "resolved in %i", egg_test_elapsed (test));
-
-	/************************************************************/
-	egg_test_title (test, "got progress updates");
-	if (_progress_cb > 0)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "got %i updates", _progress_cb);
-
-	/************************************************************/
-	egg_test_title (test, "got status updates");
-	if (_status_cb > 0)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "got %i updates", _status_cb);
-
-	/* reset */
-	_progress_cb = 0;
-	_status_cb = 0;
-//	_package_cb = 0;
-
-	/************************************************************/
-	egg_test_title (test, "get updates");
-	pk_client_get_updates_async (client, pk_bitfield_value (PK_FILTER_ENUM_NONE), NULL,
-				     (PkProgressCallback) pk_client_test_progress_cb, test,
-				     (GAsyncReadyCallback) pk_client_test_get_updates_cb, test);
-	egg_test_loop_wait (test, 15000);
-	egg_test_success (test, "got updates in %i", egg_test_elapsed (test));
-
-	/* it takes more than 50ms to get the progress of the transaction, and if
-	 * getting updates from internal cache, then it'll take a shed load less
-	 * than this to complete */
-	if (egg_test_elapsed (test) > 100) {
-		/************************************************************/
-		egg_test_title (test, "got status updates");
-		if (_status_cb > 0)
-			egg_test_success (test, NULL);
-		else
-			egg_test_failed (test, "got %i updates", _status_cb);
-	}
-
-	/************************************************************/
-	egg_test_title (test, "search by name");
-	cancellable = g_cancellable_new ();
-	values = g_strsplit ("power", "&", -1);
-	pk_client_search_names_async (client, pk_bitfield_value (PK_FILTER_ENUM_NONE), values, cancellable,
-				     (PkProgressCallback) pk_client_test_progress_cb, test,
-				     (GAsyncReadyCallback) pk_client_test_search_name_cb, test);
-	g_timeout_add (1000, (GSourceFunc) pk_client_test_cancel_cb, cancellable);
-	egg_test_loop_wait (test, 15000);
-	egg_test_success (test, "cancelled in %i", egg_test_elapsed (test));
-
-	g_strfreev (values);
-	g_cancellable_reset (cancellable);
-
-	/************************************************************/
-	egg_test_title (test, "do downloads");
-	package_ids = pk_package_ids_from_id ("powertop;1.8-1.fc8;i386;fedora");
-	pk_client_download_packages_async (client, package_ids, "/tmp", cancellable,
-					   (PkProgressCallback) pk_client_test_progress_cb, test,
-					   (GAsyncReadyCallback) pk_client_test_download_cb, test);
-	g_strfreev (package_ids);
-	egg_test_loop_wait (test, 15000);
-	egg_test_success (test, "downloaded and copied in %i", egg_test_elapsed (test));
-
-	/************************************************************/
-	egg_test_title (test, "test recursive signal handling");
-	g_signal_connect (client->priv->control, "repo-list-changed", G_CALLBACK (pk_client_test_recursive_signal_cb), test);
-	results = pk_client_repo_set_data (client, "dave", "moo", "data", NULL, NULL, NULL, NULL);
-	egg_test_assert (test, (results != NULL));
-
-	g_object_unref (results);
-	g_object_unref (cancellable);
-	g_object_unref (client);
-
-	egg_test_end (test);
-}
-#endif
-
diff --git a/lib/packagekit-glib2/pk-common.c b/lib/packagekit-glib2/pk-common.c
index a21c6a1..0a4ea00 100644
--- a/lib/packagekit-glib2/pk-common.c
+++ b/lib/packagekit-glib2/pk-common.c
@@ -163,59 +163,3 @@ pk_ptr_array_to_strv (GPtrArray *array)
 
 	return value;
 }
-
-/***************************************************************************
- ***                          MAKE CHECK TESTS                           ***
- ***************************************************************************/
-#ifdef EGG_TEST
-#include "egg-test.h"
-
-void
-pk_common_test (gpointer user_data)
-{
-	EggTest *test = (EggTest *) user_data;
-	gchar *present;
-	GDate *date;
-
-	if (!egg_test_start (test, "PkCommon"))
-		return;
-
-	/************************************************************
-	 **************            iso8601           ****************
-	 ************************************************************/
-	egg_test_title (test, "get present iso8601");
-	present = pk_iso8601_present ();
-	if (present != NULL)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "present is NULL");
-	g_free (present);
-
-	/************************************************************
-	 **************        Date handling         ****************
-	 ************************************************************/
-	egg_test_title (test, "zero length date");
-	date = pk_iso8601_to_date ("");
-	egg_test_assert (test, (date == NULL));
-
-	/************************************************************/
-	egg_test_title (test, "no day specified");
-	date = pk_iso8601_to_date ("2004-01");
-	egg_test_assert (test, (date == NULL));
-
-	/************************************************************/
-	egg_test_title (test, "date _and_ time specified");
-	date = pk_iso8601_to_date ("2009-05-08 13:11:12");
-	egg_test_assert (test, (date->day == 8 && date->month == 5 && date->year == 2009));
-	g_date_free (date);
-
-	/************************************************************/
-	egg_test_title (test, "correct date format");
-	date = pk_iso8601_to_date ("2004-02-01");
-	egg_test_assert (test, (date->day == 1 && date->month == 2 && date->year == 2004));
-	g_date_free (date);
-
-	egg_test_end (test);
-}
-#endif
-
diff --git a/lib/packagekit-glib2/pk-console-shared.c b/lib/packagekit-glib2/pk-console-shared.c
index c345d21..7bc2e43 100644
--- a/lib/packagekit-glib2/pk-console-shared.c
+++ b/lib/packagekit-glib2/pk-console-shared.c
@@ -695,43 +695,3 @@ pk_role_enum_to_localised_present (PkRoleEnum role)
 	}
 	return text;
 }
-
-/***************************************************************************
- ***                          MAKE CHECK TESTS                           ***
- ***************************************************************************/
-#ifdef EGG_TEST
-#include "egg-test.h"
-
-void
-pk_console_test (gpointer user_data)
-{
-	EggTest *test = (EggTest *) user_data;
-	gboolean ret;
-
-	if (!egg_test_start (test, "PkConsole"))
-		return;
-
-	/************************************************************/
-	egg_test_title (test, "get prompt 1");
-	ret = pk_console_get_prompt ("press enter", TRUE);
-	egg_test_assert (test, ret);
-
-	/************************************************************/
-	egg_test_title (test, "get prompt 2");
-	ret = pk_console_get_prompt ("press enter", TRUE);
-	egg_test_assert (test, ret);
-
-	/************************************************************/
-	egg_test_title (test, "get prompt 3");
-	ret = pk_console_get_prompt ("press Y", TRUE);
-	egg_test_assert (test, ret);
-
-	/************************************************************/
-	egg_test_title (test, "get prompt 3");
-	ret = pk_console_get_prompt ("press N", TRUE);
-	egg_test_assert (test, !ret);
-
-	egg_test_end (test);
-}
-#endif
-
diff --git a/lib/packagekit-glib2/pk-control.c b/lib/packagekit-glib2/pk-control.c
index db2de52..170c967 100644
--- a/lib/packagekit-glib2/pk-control.c
+++ b/lib/packagekit-glib2/pk-control.c
@@ -2554,261 +2554,3 @@ pk_control_new (void)
 	}
 	return PK_CONTROL (pk_control_object);
 }
-
-/***************************************************************************
- ***                          MAKE CHECK TESTS                           ***
- ***************************************************************************/
-#ifdef EGG_TEST
-#include "egg-test.h"
-#include "pk-control-sync.h"
-
-static guint _refcount = 0;
-
-static void
-pk_control_test_get_tid_cb (GObject *object, GAsyncResult *res, EggTest *test)
-{
-	PkControl *control = PK_CONTROL (object);
-	GError *error = NULL;
-	gchar *tid;
-
-	/* get the result */
-	tid = pk_control_get_tid_finish (control, res, &error);
-	if (tid == NULL) {
-		egg_test_failed (test, "failed to get transaction: %s", error->message);
-		g_error_free (error);
-		return;
-	}
-
-	egg_debug ("tid = %s", tid);
-	g_free (tid);
-	if (--_refcount == 0)
-		egg_test_loop_quit (test);
-}
-
-static void
-pk_control_test_get_properties_cb (GObject *object, GAsyncResult *res, EggTest *test)
-{
-	PkControl *control = PK_CONTROL (object);
-	GError *error = NULL;
-	gboolean ret;
-	PkBitfield roles;
-	PkBitfield filters;
-	PkBitfield groups;
-	gchar *text;
-
-	/* get the result */
-	ret = pk_control_get_properties_finish (control, res, &error);
-	if (!ret) {
-		egg_test_failed (test, "failed to get properties: %s", error->message);
-		g_error_free (error);
-		return;
-	}
-
-	/* get values */
-	g_object_get (control,
-		      "mime-types", &text,
-		      "roles", &roles,
-		      "filters", &filters,
-		      "groups", &groups,
-		      NULL);
-
-	/* check mime_types */
-	if (g_strcmp0 (text, "application/x-rpm;application/x-deb") != 0) {
-		egg_test_failed (test, "data incorrect: %s", text);
-		return;
-	}
-	g_free (text);
-
-	/* check roles */
-	text = pk_role_bitfield_to_string (roles);
-	if (g_strcmp0 (text, "cancel;get-depends;get-details;get-files;get-packages;get-repo-list;"
-			     "get-requires;get-update-detail;get-updates;install-files;install-packages;install-signature;"
-			     "refresh-cache;remove-packages;repo-enable;repo-set-data;resolve;rollback;"
-			     "search-details;search-file;search-group;search-name;update-packages;update-system;"
-			     "what-provides;download-packages;get-distro-upgrades;simulate-install-packages;"
-			     "simulate-remove-packages;simulate-update-packages") != 0) {
-		egg_test_failed (test, "data incorrect: %s", text);
-		return;
-	}
-	g_free (text);
-
-	/* check filters */
-	text = pk_filter_bitfield_to_string (filters);
-	if (g_strcmp0 (text, "installed;devel;gui") != 0) {
-		egg_test_failed (test, "data incorrect: %s", text);
-		return;
-	}
-	g_free (text);
-
-	/* check groups */
-	text = pk_group_bitfield_to_string (groups);
-	if (g_strcmp0 (text, "accessibility;games;system") != 0) {
-		egg_test_failed (test, "data incorrect: %s", text);
-		return;
-	}
-	egg_debug ("groups = %s", text);
-
-	g_free (text);
-
-	if (--_refcount == 0)
-		egg_test_loop_quit (test);
-}
-
-static void
-pk_control_test_get_time_since_action_cb (GObject *object, GAsyncResult *res, EggTest *test)
-{
-	PkControl *control = PK_CONTROL (object);
-	GError *error = NULL;
-	guint seconds;
-
-	/* get the result */
-	seconds = pk_control_get_time_since_action_finish (control, res, &error);
-	if (seconds == 0) {
-		egg_test_failed (test, "failed to get time: %s", error->message);
-		g_error_free (error);
-		return;
-	}
-
-	egg_test_loop_quit (test);
-}
-
-static void
-pk_control_test_can_authorize_cb (GObject *object, GAsyncResult *res, EggTest *test)
-{
-	PkControl *control = PK_CONTROL (object);
-	GError *error = NULL;
-	PkAuthorizeEnum auth;
-
-	/* get the result */
-	auth = pk_control_can_authorize_finish (control, res, &error);
-	if (auth == PK_AUTHORIZE_ENUM_UNKNOWN) {
-		egg_test_failed (test, "failed to get auth: %s", error->message);
-		g_error_free (error);
-		return;
-	}
-
-	egg_test_loop_quit (test);
-}
-
-void
-pk_control_test (gpointer user_data)
-{
-	EggTest *test = (EggTest *) user_data;
-	PkControl *control;
-	guint version;
-	GError *error = NULL;
-	gboolean ret;
-	gchar *text;
-	PkBitfield roles;
-	guint i;
-	const guint LOOP_SIZE = 5;
-
-	if (!egg_test_start (test, "PkControl"))
-		return;
-
-	/************************************************************/
-	egg_test_title (test, "get control");
-	control = pk_control_new ();
-	egg_test_assert (test, control != NULL);
-
-	/************************************************************/
-	egg_test_title (test, "get TID async");
-	_refcount = 1;
-	pk_control_get_tid_async (control, NULL, (GAsyncReadyCallback) pk_control_test_get_tid_cb, test);
-	egg_test_loop_wait (test, 5000);
-	egg_test_success (test, "got tid in %i", egg_test_elapsed (test));
-
-	/************************************************************/
-	egg_test_title (test, "get multiple TIDs async");
-	_refcount = LOOP_SIZE;
-	for (i=0; i<_refcount; i++) {
-		egg_debug ("getting #%i", i+1);
-		pk_control_get_tid_async (control, NULL, (GAsyncReadyCallback) pk_control_test_get_tid_cb, test);
-	}
-	egg_test_loop_wait (test, 5000);
-	egg_test_success (test, "got %i tids in %i", LOOP_SIZE, egg_test_elapsed (test));
-
-	/************************************************************/
-	egg_test_title (test, "get properties async");
-	_refcount = 1;
-	pk_control_get_properties_async (control, NULL, (GAsyncReadyCallback) pk_control_test_get_properties_cb, test);
-	egg_test_loop_wait (test, 5000);
-	egg_test_success (test, "got properties types in %i", egg_test_elapsed (test));
-
-	/************************************************************/
-	egg_test_title (test, "get properties async (again, to test caching)");
-	_refcount = 1;
-	pk_control_get_properties_async (control, NULL, (GAsyncReadyCallback) pk_control_test_get_properties_cb, test);
-	egg_test_loop_wait (test, 5000);
-	egg_test_success (test, "got properties in %i", egg_test_elapsed (test));
-
-	/************************************************************/
-	egg_test_title (test, "do multiple requests async");
-	_refcount = LOOP_SIZE * 4;
-	for (i=0; i<_refcount; i++) {
-		egg_debug ("getting #%i", i+1);
-		pk_control_get_tid_async (control, NULL, (GAsyncReadyCallback) pk_control_test_get_tid_cb, test);
-		pk_control_get_properties_async (control, NULL, (GAsyncReadyCallback) pk_control_test_get_properties_cb, test);
-		pk_control_get_tid_async (control, NULL, (GAsyncReadyCallback) pk_control_test_get_tid_cb, test);
-		pk_control_get_properties_async (control, NULL, (GAsyncReadyCallback) pk_control_test_get_properties_cb, test);
-	}
-	egg_test_loop_wait (test, 5000);
-	egg_test_success (test, "got %i 2*properties and 2*tids in %i", LOOP_SIZE, egg_test_elapsed (test));
-
-	/************************************************************/
-	egg_test_title (test, "get time since async");
-	pk_control_get_time_since_action_async (control, PK_ROLE_ENUM_GET_UPDATES, NULL, (GAsyncReadyCallback) pk_control_test_get_time_since_action_cb, test);
-	egg_test_loop_wait (test, 5000);
-	egg_test_success (test, "got get time since in %i", egg_test_elapsed (test));
-
-	/************************************************************/
-	egg_test_title (test, "get auth state async");
-	pk_control_can_authorize_async (control, "org.freedesktop.packagekit.system-update", NULL,
-					(GAsyncReadyCallback) pk_control_test_can_authorize_cb, test);
-	egg_test_loop_wait (test, 5000);
-	egg_test_success (test, "get auth state in %i", egg_test_elapsed (test));
-
-	/************************************************************/
-	egg_test_title (test, "version major");
-	g_object_get (control, "version-major", &version, NULL);
-	egg_test_assert (test, (version == PK_MAJOR_VERSION));
-
-	/************************************************************/
-	egg_test_title (test, "version minor");
-	g_object_get (control, "version-minor", &version, NULL);
-	egg_test_assert (test, (version == PK_MINOR_VERSION));
-
-	/************************************************************/
-	egg_test_title (test, "version micro");
-	g_object_get (control, "version-micro", &version, NULL);
-	egg_test_assert (test, (version == PK_MICRO_VERSION));
-
-	/************************************************************/
-	egg_test_title (test, "get properties sync");
-	ret = pk_control_get_properties (control, NULL, &error);
-	if (!ret)
-		egg_test_failed (test, "failed to get properties: %s", error->message);
-
-	/* get data */
-	g_object_get (control,
-		      "roles", &roles,
-		      NULL);
-
-	/* check data */
-	text = pk_role_bitfield_to_string (roles);
-	if (g_strcmp0 (text, "cancel;get-depends;get-details;get-files;get-packages;get-repo-list;"
-			     "get-requires;get-update-detail;get-updates;install-files;install-packages;install-signature;"
-			     "refresh-cache;remove-packages;repo-enable;repo-set-data;resolve;rollback;"
-			     "search-details;search-file;search-group;search-name;update-packages;update-system;"
-			     "what-provides;download-packages;get-distro-upgrades;simulate-install-packages;"
-			     "simulate-remove-packages;simulate-update-packages") != 0) {
-		egg_test_failed (test, "data incorrect: %s", text);
-	}
-	egg_test_success (test, "got correct roles");
-	g_free (text);
-
-	g_object_unref (control);
-	egg_test_end (test);
-}
-#endif
-
diff --git a/lib/packagekit-glib2/pk-desktop.c b/lib/packagekit-glib2/pk-desktop.c
index ced2b74..ad61550 100644
--- a/lib/packagekit-glib2/pk-desktop.c
+++ b/lib/packagekit-glib2/pk-desktop.c
@@ -322,91 +322,3 @@ pk_desktop_new (void)
 	}
 	return PK_DESKTOP (pk_desktop_object);
 }
-
-/***************************************************************************
- ***                          MAKE CHECK TESTS                           ***
- ***************************************************************************/
-#ifdef EGG_TEST
-#include "egg-test.h"
-
-void
-pk_desktop_test (gpointer user_data)
-{
-	EggTest *test = (EggTest *) user_data;
-	PkDesktop *desktop;
-	gboolean ret;
-	gchar *package;
-	GPtrArray *array;
-	GError *error = NULL;
-
-	if (!egg_test_start (test, "PkDesktop"))
-		return;
-
-	/************************************************************/
-	egg_test_title (test, "get desktop");
-	desktop = pk_desktop_new ();
-	egg_test_assert (test, desktop != NULL);
-
-	/************************************************************/
-	egg_test_title (test, "get package when not valid");
-	package = pk_desktop_get_package_for_file (desktop, "/usr/share/applications/gpk-update-viewer.desktop", NULL);
-	egg_test_assert (test, package == NULL);
-
-	/* file does not exist */
-	ret = g_file_test (PK_DESKTOP_DEFAULT_DATABASE, G_FILE_TEST_EXISTS);
-	if (!ret) {
-		egg_warning ("skipping checks as database does not exist");
-		goto out;
-	}
-
-	/************************************************************/
-	egg_test_title (test, "open database");
-	ret = pk_desktop_open_database (desktop, &error);
-	if (ret)
-		egg_test_success (test, "%ims", egg_test_elapsed (test));
-	else
-		egg_test_failed (test, "failed to open: %s", error->message);
-
-	/************************************************************/
-	egg_test_title (test, "get package");
-	package = pk_desktop_get_package_for_file (desktop, "/usr/share/applications/gpk-update-viewer.desktop", NULL);
-
-	/* dummy, not yum */
-	if (g_strcmp0 (package, "vips-doc") == 0) {
-		egg_test_success (test, "created db with dummy, skipping remaining tests");
-		goto out;
-	}
-	if (g_strcmp0 (package, "gnome-packagekit") == 0)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "package was: %s", package);
-	g_free (package);
-
-	/************************************************************/
-	egg_test_title (test, "get files");
-	array = pk_desktop_get_files_for_package (desktop, "gnome-packagekit", NULL);
-	if (array == NULL)
-		egg_test_failed (test, "array NULL");
-	else if (array->len >= 5)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "length=%i", array->len);
-	g_ptr_array_unref (array);
-
-	/************************************************************/
-	egg_test_title (test, "get shown files");
-	array = pk_desktop_get_shown_for_package (desktop, "gnome-packagekit", NULL);
-	if (array == NULL)
-		egg_test_failed (test, "array NULL");
-	else if (array->len > 3)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "length=%i", array->len);
-	g_ptr_array_unref (array);
-out:
-	g_object_unref (desktop);
-
-	egg_test_end (test);
-}
-#endif
-
diff --git a/lib/packagekit-glib2/pk-enum.c b/lib/packagekit-glib2/pk-enum.c
index 3daee63..ac0fdcf 100644
--- a/lib/packagekit-glib2/pk-enum.c
+++ b/lib/packagekit-glib2/pk-enum.c
@@ -1172,189 +1172,3 @@ pk_authorize_type_enum_to_string (PkAuthorizeEnum authorize_type)
 {
 	return pk_enum_find_string (enum_authorize_type, authorize_type);
 }
-
-/***************************************************************************
- ***                          MAKE CHECK TESTS                           ***
- ***************************************************************************/
-#ifdef EGG_TEST
-#include "egg-test.h"
-
-void
-pk_enum_test (gpointer user_data)
-{
-	EggTest *test = (EggTest *) user_data;
-	const gchar *string;
-	PkRoleEnum role_value;
-	guint i;
-
-	if (!egg_test_start (test, "PkEnum"))
-		return;
-
-	/************************************************************/
-	egg_test_title (test, "find role_value");
-	role_value = pk_enum_find_value (enum_role, "search-file");
-	if (role_value == PK_ROLE_ENUM_SEARCH_FILE)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, NULL);
-
-	/************************************************************/
-	egg_test_title (test, "find string");
-	string = pk_enum_find_string (enum_role, PK_ROLE_ENUM_SEARCH_FILE);
-	if (g_strcmp0 (string, "search-file") == 0)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, NULL);
-
-	/************************************************************/
-	egg_test_title (test, "find value");
-	role_value = pk_role_enum_from_string ("search-file");
-	if (role_value == PK_ROLE_ENUM_SEARCH_FILE)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, NULL);
-
-	/************************************************************/
-	egg_test_title (test, "find string");
-	string = pk_role_enum_to_string (PK_ROLE_ENUM_SEARCH_FILE);
-	if (g_strcmp0 (string, "search-file") == 0)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, NULL);
-
-	/************************************************************/
-	egg_test_title (test, "check we convert all the role bitfield");
-	for (i=1; i<PK_ROLE_ENUM_LAST; i++) {
-		string = pk_role_enum_to_string (i);
-		if (string == NULL) {
-			egg_test_failed (test, "failed to get %i", i);
-			break;
-		}
-	}
-	egg_test_success (test, NULL);
-
-	/************************************************************/
-	egg_test_title (test, "check we convert all the status bitfield");
-	for (i=1; i<PK_STATUS_ENUM_LAST; i++) {
-		string = pk_status_enum_to_string (i);
-		if (string == NULL) {
-			egg_test_failed (test, "failed to get %i", i);
-			break;
-		}
-	}
-	egg_test_success (test, NULL);
-
-	/************************************************************/
-	egg_test_title (test, "check we convert all the exit bitfield");
-	for (i=0; i<PK_EXIT_ENUM_LAST; i++) {
-		string = pk_exit_enum_to_string (i);
-		if (string == NULL) {
-			egg_test_failed (test, "failed to get %i", i);
-			break;
-		}
-	}
-	egg_test_success (test, NULL);
-
-	/************************************************************/
-	egg_test_title (test, "check we convert all the filter bitfield");
-	for (i=0; i<PK_FILTER_ENUM_LAST; i++) {
-		string = pk_filter_enum_to_string (i);
-		if (string == NULL) {
-			egg_test_failed (test, "failed to get %i", i);
-			break;
-		}
-	}
-	egg_test_success (test, NULL);
-
-	/************************************************************/
-	egg_test_title (test, "check we convert all the restart bitfield");
-	for (i=0; i<PK_RESTART_ENUM_LAST; i++) {
-		string = pk_restart_enum_to_string (i);
-		if (string == NULL) {
-			egg_test_failed (test, "failed to get %i", i);
-			break;
-		}
-	}
-	egg_test_success (test, NULL);
-
-	/************************************************************/
-	egg_test_title (test, "check we convert all the error_code bitfield");
-	for (i=0; i<PK_ERROR_ENUM_LAST; i++) {
-		string = pk_error_enum_to_string (i);
-		if (string == NULL) {
-			egg_test_failed (test, "failed to get %i", i);
-			break;
-		}
-	}
-	egg_test_success (test, NULL);
-
-	/************************************************************/
-	egg_test_title (test, "check we convert all the group bitfield");
-	for (i=1; i<PK_GROUP_ENUM_LAST; i++) {
-		string = pk_group_enum_to_string (i);
-		if (string == NULL) {
-			egg_test_failed (test, "failed to get %i", i);
-			break;
-		}
-	}
-	egg_test_success (test, NULL);
-
-	/************************************************************/
-	egg_test_title (test, "check we convert all the info bitfield");
-	for (i=1; i<PK_INFO_ENUM_LAST; i++) {
-		string = pk_info_enum_to_string (i);
-		if (string == NULL) {
-			egg_test_failed (test, "failed to get %i", i);
-			break;
-		}
-	}
-	egg_test_success (test, NULL);
-
-	/************************************************************/
-	egg_test_title (test, "check we convert all the sig_type bitfield");
-	for (i=0; i<PK_SIGTYPE_ENUM_LAST; i++) {
-		string = pk_sig_type_enum_to_string (i);
-		if (string == NULL) {
-			egg_test_failed (test, "failed to get %i", i);
-			break;
-		}
-	}
-	egg_test_success (test, NULL);
-
-	/************************************************************/
-	egg_test_title (test, "check we convert all the upgrade bitfield");
-	for (i=0; i<PK_DISTRO_UPGRADE_ENUM_LAST; i++) {
-		string = pk_distro_upgrade_enum_to_string (i);
-		if (string == NULL) {
-			egg_test_failed (test, "failed to get %i", i);
-			break;
-		}
-	}
-	egg_test_success (test, NULL);
-
-	/************************************************************/
-	egg_test_title (test, "check we convert all the license bitfield");
-	for (i=0; i<PK_LICENSE_ENUM_LAST; i++) {
-		string = pk_license_enum_to_string (i);
-		if (string == NULL) {
-			egg_test_failed (test, "failed to get %i", i);
-			break;
-		}
-	}
-	egg_test_success (test, NULL);
-
-	/************************************************************/
-	egg_test_title (test, "check we convert all the media type bitfield");
-	for (i=0; i<PK_MEDIA_TYPE_ENUM_LAST; i++) {
-		string = pk_media_type_enum_to_string (i);
-		if (string == NULL) {
-			egg_test_failed (test, "failed to get %i", i);
-			break;
-		}
-	}
-	egg_test_success (test, NULL);
-
-	egg_test_end (test);
-}
-#endif
-
diff --git a/lib/packagekit-glib2/pk-package-id.c b/lib/packagekit-glib2/pk-package-id.c
index 6c671f2..fb2afc1 100644
--- a/lib/packagekit-glib2/pk-package-id.c
+++ b/lib/packagekit-glib2/pk-package-id.c
@@ -221,130 +221,3 @@ out:
 	g_strfreev (parts);
 	return value;
 }
-
-/***************************************************************************
- ***                          MAKE CHECK TESTS                           ***
- ***************************************************************************/
-#ifdef EGG_TEST
-#include "egg-test.h"
-
-void
-pk_package_id_test (gpointer user_data)
-{
-	EggTest *test = (EggTest *) user_data;
-	gboolean ret;
-	gchar *text;
-	gchar **sections;
-
-	if (!egg_test_start (test, "PkPackageId"))
-		return;
-
-	/************************************************************/
-	egg_test_title (test, "check not valid - NULL");
-	ret = pk_package_id_check (NULL);
-	egg_test_assert (test, !ret);
-
-	/************************************************************/
-	egg_test_title (test, "check not valid - no name");
-	ret = pk_package_id_check (";0.0.1;i386;fedora");
-	egg_test_assert (test, !ret);
-
-	/************************************************************/
-	egg_test_title (test, "check not valid - invalid");
-	ret = pk_package_id_check ("moo;0.0.1;i386");
-	egg_test_assert (test, !ret);
-
-	/************************************************************/
-	egg_test_title (test, "check valid");
-	ret = pk_package_id_check ("moo;0.0.1;i386;fedora");
-	egg_test_assert (test, ret);
-
-	/************************************************************/
-	egg_test_title (test, "id build");
-	text = pk_package_id_build ("moo", "0.0.1", "i386", "fedora");
-	if (g_strcmp0 (text, "moo;0.0.1;i386;fedora") == 0)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, NULL);
-	g_free (text);
-
-	egg_test_title (test, "id build partial");
-	text = pk_package_id_build ("moo", NULL, NULL, NULL);
-	if (g_strcmp0 (text, "moo;;;") == 0)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "got '%s', expected '%s'", text, "moo;;;");
-	g_free (text);
-
-	/************************************************************/
-	egg_test_title (test, "test printable");
-	text = pk_package_id_to_printable ("moo;0.0.1;i386;fedora");
-	if (g_strcmp0 (text, "moo-0.0.1.i386") == 0)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "printable is '%s'", text);
-	g_free (text);
-
-	/************************************************************/
-	egg_test_title (test, "test printable no arch");
-	text = pk_package_id_to_printable ("moo;0.0.1;;");
-	if (g_strcmp0 (text, "moo-0.0.1") == 0)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "printable is '%s'", text);
-	g_free (text);
-
-	/************************************************************/
-	egg_test_title (test, "test printable just name");
-	text = pk_package_id_to_printable ("moo;;;");
-	if (g_strcmp0 (text, "moo") == 0)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "printable is '%s'", text);
-	g_free (text);
-
-	/************************************************************/
-	egg_test_title (test, "test on real packageid");
-	sections = pk_package_id_split ("kde-i18n-csb;4:3.5.8~pre20071001-0ubuntu1;all;");
-	if (sections != NULL &&
-	    g_strcmp0 (sections[0], "kde-i18n-csb") == 0 &&
-	    g_strcmp0 (sections[1], "4:3.5.8~pre20071001-0ubuntu1") == 0 &&
-	    g_strcmp0 (sections[2], "all") == 0 &&
-	    g_strcmp0 (sections[3], "") == 0)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "got %s, %s, %s, %s", sections[0], sections[1], sections[2], sections[3]);
-	g_strfreev (sections);
-
-	/************************************************************/
-	egg_test_title (test, "test on short packageid");
-	sections = pk_package_id_split ("kde-i18n-csb;4:3.5.8~pre20071001-0ubuntu1;;");
-	if (sections != NULL &&
-	    g_strcmp0 (sections[0], "kde-i18n-csb") == 0 &&
-	    g_strcmp0 (sections[1], "4:3.5.8~pre20071001-0ubuntu1") == 0 &&
-	    g_strcmp0 (sections[2], "") == 0 &&
-	    g_strcmp0 (sections[3], "") == 0)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "got %s, %s, %s, %s", sections[0], sections[1], sections[2], sections[3]);
-	g_strfreev (sections);
-
-	/************************************************************/
-	egg_test_title (test, "test fail under");
-	sections = pk_package_id_split ("foo;moo");
-	egg_test_assert (test, sections == NULL);
-
-	/************************************************************/
-	egg_test_title (test, "test fail over");
-	sections = pk_package_id_split ("foo;moo;dave;clive;dan");
-	egg_test_assert (test, sections == NULL);
-
-	/************************************************************/
-	egg_test_title (test, "test fail missing first");
-	sections = pk_package_id_split (";0.1.2;i386;data");
-	egg_test_assert (test, sections == NULL);
-
-	egg_test_end (test);
-}
-#endif
-
diff --git a/lib/packagekit-glib2/pk-package-ids.c b/lib/packagekit-glib2/pk-package-ids.c
index a8a1809..d0c7b68 100644
--- a/lib/packagekit-glib2/pk-package-ids.c
+++ b/lib/packagekit-glib2/pk-package-ids.c
@@ -245,49 +245,3 @@ pk_package_ids_remove_id (gchar **package_ids, const gchar *package_id)
 	}
 	return result;
 }
-
-/***************************************************************************
- ***                          MAKE CHECK TESTS                           ***
- ***************************************************************************/
-#ifdef EGG_TEST
-#include "egg-test.h"
-
-void
-pk_package_ids_test (gpointer user_data)
-{
-	EggTest *test = (EggTest *) user_data;
-	gboolean ret;
-	gchar *package_ids_blank[] = {};
-	gchar **package_ids;
-
-	if (!egg_test_start (test, "PkPackageIds"))
-		return;
-
-	/************************************************************
-	 ****************          IDENTS          ******************
-	 ************************************************************/
-
-	egg_test_title (test, "parse va_list");
-	package_ids = pk_package_ids_from_string ("foo;0.0.1;i386;fedora&bar;0.1.1;noarch;livna");
-	egg_test_assert (test, package_ids != NULL);
-
-	/************************************************************/
-	egg_test_title (test, "verify size");
-	egg_test_assert (test, (g_strv_length (package_ids) == 2));
-
-	/************************************************************/
-	egg_test_title (test, "verify blank");
-	ret = pk_package_ids_check (package_ids_blank);
-	egg_test_assert (test, !ret);
-
-	/************************************************************/
-	egg_test_title (test, "verify");
-	ret = pk_package_ids_check (package_ids);
-	egg_test_assert (test, ret);
-
-	g_strfreev (package_ids);
-
-	egg_test_end (test);
-}
-#endif
-
diff --git a/lib/packagekit-glib2/pk-package-sack.c b/lib/packagekit-glib2/pk-package-sack.c
index 2f02286..a6dfaa8 100644
--- a/lib/packagekit-glib2/pk-package-sack.c
+++ b/lib/packagekit-glib2/pk-package-sack.c
@@ -1100,226 +1100,3 @@ pk_package_sack_new (void)
 	sack = g_object_new (PK_TYPE_PACKAGE_SACK, NULL);
 	return PK_PACKAGE_SACK (sack);
 }
-
-/***************************************************************************
- ***                          MAKE CHECK TESTS                           ***
- ***************************************************************************/
-#ifdef EGG_TEST
-#include "egg-test.h"
-
-static void
-pk_package_sack_test_resolve_cb (GObject *object, GAsyncResult *res, EggTest *test)
-{
-	PkPackageSack *sack = PK_PACKAGE_SACK (object);
-	GError *error = NULL;
-	gboolean ret;
-
-	/* get the result */
-	ret = pk_package_sack_merge_generic_finish (sack, res, &error);
-	if (!ret) {
-		egg_test_failed (test, "failed to merge resolve: %s", error->message);
-		g_error_free (error);
-		return;
-	}
-
-	egg_test_loop_quit (test);
-}
-
-static void
-pk_package_sack_test_details_cb (GObject *object, GAsyncResult *res, EggTest *test)
-{
-	PkPackageSack *sack = PK_PACKAGE_SACK (object);
-	GError *error = NULL;
-	gboolean ret;
-
-	/* get the result */
-	ret = pk_package_sack_merge_generic_finish (sack, res, &error);
-	if (!ret) {
-		egg_test_failed (test, "failed to merge details: %s", error->message);
-		g_error_free (error);
-		return;
-	}
-
-	egg_test_loop_quit (test);
-}
-
-static void
-pk_package_sack_test_update_detail_cb (GObject *object, GAsyncResult *res, EggTest *test)
-{
-	PkPackageSack *sack = PK_PACKAGE_SACK (object);
-	GError *error = NULL;
-	gboolean ret;
-
-	/* get the result */
-	ret = pk_package_sack_merge_generic_finish (sack, res, &error);
-	if (!ret) {
-		egg_test_failed (test, "failed to merge update detail: %s", error->message);
-		g_error_free (error);
-		return;
-	}
-
-	egg_test_loop_quit (test);
-}
-
-/**
- * pk_package_sack_test_filter_cb:
- **/
-static gboolean
-pk_package_sack_test_filter_cb (PkPackage *package, gpointer user_data)
-{
-	PkInfoEnum info;
-	info = pk_package_get_info (package);
-	if (info == PK_INFO_ENUM_UNKNOWN)
-		return FALSE;
-	return TRUE;
-}
-
-void
-pk_package_sack_test (gpointer user_data)
-{
-	EggTest *test = (EggTest *) user_data;
-	gboolean ret;
-	PkPackageSack *sack;
-	PkPackage *package;
-	gchar *text;
-	guint size;
-	PkInfoEnum info = PK_INFO_ENUM_UNKNOWN;
-	guint64 bytes;
-
-	if (!egg_test_start (test, "PkPackageSack"))
-		return;
-
-	/************************************************************/
-	egg_test_title (test, "get package_sack");
-	sack = pk_package_sack_new ();
-	egg_test_assert (test, sack != NULL);
-
-	/************************************************************/
-	egg_test_title (test, "get size of unused package sack");
-	size = pk_package_sack_get_size (sack);
-	egg_test_assert (test, (size == 0));
-
-	/************************************************************/
-	egg_test_title (test, "remove package not present");
-	ret = pk_package_sack_remove_package_by_id (sack, "powertop;1.8-1.fc8;i386;fedora");
-	egg_test_assert (test, !ret);
-
-	/************************************************************/
-	egg_test_title (test, "find package not present");
-	package = pk_package_sack_find_by_id (sack, "powertop;1.8-1.fc8;i386;fedora");
-	egg_test_assert (test, (package == NULL));
-
-	/************************************************************/
-	egg_test_title (test, "add package");
-	ret = pk_package_sack_add_package_by_id (sack, "powertop;1.8-1.fc8;i386;fedora", NULL);
-	egg_test_assert (test, ret);
-
-	/************************************************************/
-	egg_test_title (test, "get size of package sack");
-	size = pk_package_sack_get_size (sack);
-	egg_test_assert (test, (size == 1));
-
-	/************************************************************/
-	egg_test_title (test, "merge resolve results");
-	pk_package_sack_resolve_async (sack, NULL, NULL, NULL, (GAsyncReadyCallback) pk_package_sack_test_resolve_cb, test);
-	egg_test_loop_wait (test, 5000);
-	egg_test_success (test, "resolved in %i", egg_test_elapsed (test));
-
-	/************************************************************/
-	egg_test_title (test, "find package which is present");
-	package = pk_package_sack_find_by_id (sack, "powertop;1.8-1.fc8;i386;fedora");
-	egg_test_assert (test, (package != NULL));
-
-	/************************************************************/
-	egg_test_title (test, "check new summary");
-	g_object_get (package,
-		      "info", &info,
-		      "summary", &text,
-		      NULL);
-	egg_test_assert (test, (g_strcmp0 (text, "Power consumption monitor") == 0));
-
-	/************************************************************/
-	egg_test_title (test, "check new info");
-	egg_test_assert (test, (info == PK_INFO_ENUM_INSTALLED));
-
-	g_free (text);
-	g_object_unref (package);
-
-	/************************************************************/
-	egg_test_title (test, "merge details results");
-	pk_package_sack_get_details_async (sack, NULL, NULL, NULL, (GAsyncReadyCallback) pk_package_sack_test_details_cb, test);
-	egg_test_loop_wait (test, 5000);
-	egg_test_success (test, "got details in %i", egg_test_elapsed (test));
-
-	/************************************************************/
-	egg_test_title (test, "find package which is present");
-	package = pk_package_sack_find_by_id (sack, "powertop;1.8-1.fc8;i386;fedora");
-	egg_test_assert (test, (package != NULL));
-
-	/************************************************************/
-	egg_test_title (test, "check new url");
-	g_object_get (package,
-		      "url", &text,
-		      NULL);
-	egg_test_assert (test, (g_strcmp0 (text, "http://live.gnome.org/powertop") == 0));
-	g_object_unref (package);
-	g_free (text);
-
-	/************************************************************/
-	egg_test_title (test, "merge update detail results");
-	pk_package_sack_get_update_detail_async (sack, NULL, NULL, NULL, (GAsyncReadyCallback) pk_package_sack_test_update_detail_cb, test);
-	egg_test_loop_wait (test, 5000);
-	egg_test_success (test, "got update detail in %i", egg_test_elapsed (test));
-
-	/************************************************************/
-	egg_test_title (test, "find package which is present");
-	package = pk_package_sack_find_by_id (sack, "powertop;1.8-1.fc8;i386;fedora");
-	egg_test_assert (test, (package != NULL));
-
-	/************************************************************/
-	egg_test_title (test, "check new vendor url");
-	g_object_get (package,
-		      "update-vendor-url", &text,
-		      NULL);
-	egg_test_assert (test, (g_strcmp0 (text, "http://www.distro-update.org/page?moo;Bugfix release for powertop") == 0));
-
-	g_free (text);
-	g_object_unref (package);
-
-	/************************************************************/
-	egg_test_title (test, "chck size in bytes");
-	bytes = pk_package_sack_get_total_bytes (sack);
-	egg_test_assert (test, (bytes == 103424));
-
-	/************************************************************/
-	egg_test_title (test, "remove package");
-	ret = pk_package_sack_remove_package_by_id (sack, "powertop;1.8-1.fc8;i386;fedora");
-	egg_test_assert (test, ret);
-
-	/************************************************************/
-	egg_test_title (test, "get size of package sack");
-	size = pk_package_sack_get_size (sack);
-	egg_test_assert (test, (size == 0));
-
-	/************************************************************/
-	egg_test_title (test, "remove already removed package");
-	ret = pk_package_sack_remove_package_by_id (sack, "powertop;1.8-1.fc8;i386;fedora");
-	egg_test_assert (test, !ret);
-
-	/************************************************************/
-	egg_test_title (test, "remove by filter");
-	pk_package_sack_add_package_by_id (sack, "powertop;1.8-1.fc8;i386;fedora", NULL);
-	pk_package_sack_add_package_by_id (sack, "powertop-debuginfo;1.8-1.fc8;i386;fedora", NULL);
-	ret = pk_package_sack_remove_by_filter (sack, pk_package_sack_test_filter_cb, test);
-	egg_test_assert (test, ret);
-
-	/************************************************************/
-	egg_test_title (test, "check all removed");
-	size = pk_package_sack_get_size (sack);
-	egg_test_assert (test, (size == 0));
-
-	g_object_unref (sack);
-	egg_test_end (test);
-}
-#endif
-
diff --git a/lib/packagekit-glib2/pk-package.c b/lib/packagekit-glib2/pk-package.c
index 5235689..d2d9341 100644
--- a/lib/packagekit-glib2/pk-package.c
+++ b/lib/packagekit-glib2/pk-package.c
@@ -790,74 +790,3 @@ pk_package_new (void)
 	package = g_object_new (PK_TYPE_PACKAGE, NULL);
 	return PK_PACKAGE (package);
 }
-
-/***************************************************************************
- ***                          MAKE CHECK TESTS                           ***
- ***************************************************************************/
-#ifdef EGG_TEST
-#include "egg-test.h"
-
-void
-pk_package_test (gpointer user_data)
-{
-	EggTest *test = (EggTest *) user_data;
-	gboolean ret;
-	PkPackage *package;
-	const gchar *id;
-	gchar *text;
-
-	if (!egg_test_start (test, "PkPackage"))
-		return;
-
-	/************************************************************/
-	egg_test_title (test, "get package");
-	package = pk_package_new ();
-	egg_test_assert (test, package != NULL);
-
-	/************************************************************/
-	egg_test_title (test, "get id of unset package");
-	id = pk_package_get_id (package);
-	egg_test_assert (test, (id == NULL));
-
-	/************************************************************/
-	egg_test_title (test, "get id of unset package");
-	g_object_get (package, "package-id", &text, NULL);
-	egg_test_assert (test, (text == NULL));
-	g_free (text);
-
-	/************************************************************/
-	egg_test_title (test, "set invalid id");
-	ret = pk_package_set_id (package, "gnome-power-manager", NULL);
-	egg_test_assert (test, !ret);
-
-	/************************************************************/
-	egg_test_title (test, "set invalid id (sections)");
-	ret = pk_package_set_id (package, "gnome-power-manager;0.1.2;i386", NULL);
-	egg_test_assert (test, !ret);
-
-	/************************************************************/
-	egg_test_title (test, "set invalid name");
-	ret = pk_package_set_id (package, ";0.1.2;i386;fedora", NULL);
-	egg_test_assert (test, !ret);
-
-	/************************************************************/
-	egg_test_title (test, "set valid name");
-	ret = pk_package_set_id (package, "gnome-power-manager;0.1.2;i386;fedora", NULL);
-	egg_test_assert (test, ret);
-
-	/************************************************************/
-	egg_test_title (test, "get id of set package");
-	id = pk_package_get_id (package);
-	egg_test_assert (test, (g_strcmp0 (id, "gnome-power-manager;0.1.2;i386;fedora") == 0));
-
-	/************************************************************/
-	egg_test_title (test, "get name of set package");
-	g_object_get (package, "package-id", &text, NULL);
-	egg_test_assert (test, (g_strcmp0 (text, "gnome-power-manager;0.1.2;i386;fedora") == 0));
-	g_free (text);
-
-	g_object_unref (package);
-	egg_test_end (test);
-}
-#endif
-
diff --git a/lib/packagekit-glib2/pk-progress-bar.c b/lib/packagekit-glib2/pk-progress-bar.c
index e93d7cf..2124fcc 100644
--- a/lib/packagekit-glib2/pk-progress-bar.c
+++ b/lib/packagekit-glib2/pk-progress-bar.c
@@ -335,32 +335,3 @@ pk_progress_bar_new (void)
 	self = g_object_new (PK_TYPE_PROGRESS_BAR, NULL);
 	return PK_PROGRESS_BAR (self);
 }
-
-/***************************************************************************
- ***                          MAKE CHECK TESTS                           ***
- ***************************************************************************/
-#ifdef EGG_TEST
-#include "egg-test.h"
-
-void
-egg_test_progress_bar (EggTest *test)
-{
-	PkProgressBar *self;
-
-	if (!egg_test_start (test, "PkProgressBar"))
-		return;
-
-	/************************************************************/
-	egg_test_title (test, "get an instance");
-	self = pk_progress_bar_new ();
-	if (self != NULL)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, NULL);
-
-	g_object_unref (self);
-
-	egg_test_end (test);
-}
-#endif
-
diff --git a/lib/packagekit-glib2/pk-progress.c b/lib/packagekit-glib2/pk-progress.c
index 0be34a8..532c94b 100644
--- a/lib/packagekit-glib2/pk-progress.c
+++ b/lib/packagekit-glib2/pk-progress.c
@@ -674,30 +674,3 @@ pk_progress_new (void)
 	progress = g_object_new (PK_TYPE_PROGRESS, NULL);
 	return PK_PROGRESS (progress);
 }
-
-/***************************************************************************
- ***                          MAKE CHECK TESTS                           ***
- ***************************************************************************/
-#ifdef EGG_TEST
-#include "egg-test.h"
-
-void
-pk_progress_test (gpointer user_data)
-{
-	EggTest *test = (EggTest *) user_data;
-	PkProgress *progress;
-
-	if (!egg_test_start (test, "PkProgress"))
-		return;
-
-	/************************************************************/
-	egg_test_title (test, "get progress");
-	progress = pk_progress_new ();
-	egg_test_assert (test, progress != NULL);
-
-	g_object_unref (progress);
-
-	egg_test_end (test);
-}
-#endif
-
diff --git a/lib/packagekit-glib2/pk-results.c b/lib/packagekit-glib2/pk-results.c
index a627dff..294008b 100644
--- a/lib/packagekit-glib2/pk-results.c
+++ b/lib/packagekit-glib2/pk-results.c
@@ -929,104 +929,3 @@ pk_results_new (void)
 	results = g_object_new (PK_TYPE_RESULTS, NULL);
 	return PK_RESULTS (results);
 }
-
-/***************************************************************************
- ***                          MAKE CHECK TESTS                           ***
- ***************************************************************************/
-#ifdef EGG_TEST
-#include "egg-test.h"
-
-void
-pk_results_test (gpointer user_data)
-{
-	EggTest *test = (EggTest *) user_data;
-	gboolean ret;
-	PkResults *results;
-	PkExitEnum exit_enum;
-	GPtrArray *packages;
-	PkPackage *item;
-	PkInfoEnum info;
-	gchar *package_id;
-	gchar *summary;
-
-	if (!egg_test_start (test, "PkResults"))
-		return;
-
-	/************************************************************/
-	egg_test_title (test, "get results");
-	results = pk_results_new ();
-	egg_test_assert (test, results != NULL);
-
-	/************************************************************/
-	egg_test_title (test, "get exit code of unset results");
-	exit_enum = pk_results_get_exit_code (results);
-	egg_test_assert (test, (exit_enum == PK_EXIT_ENUM_UNKNOWN));
-
-	/************************************************************/
-	egg_test_title (test, "get package list of unset results");
-	packages = pk_results_get_package_array (results);
-	egg_test_assert (test, (packages->len == 0));
-	g_ptr_array_unref (packages);
-
-	/************************************************************/
-	egg_test_title (test, "set valid exit code");
-	ret = pk_results_set_exit_code (results, PK_EXIT_ENUM_CANCELLED);
-	egg_test_assert (test, ret);
-
-	/************************************************************/
-	egg_test_title (test, "get exit code of set results");
-	exit_enum = pk_results_get_exit_code (results);
-	egg_test_assert (test, (exit_enum == PK_EXIT_ENUM_CANCELLED));
-
-	/************************************************************/
-	egg_test_title (test, "add package");
-	item = pk_package_new ();
-	g_object_set (item,
-		      "info", PK_INFO_ENUM_AVAILABLE,
-		      "package-id", "gnome-power-manager;0.1.2;i386;fedora",
-		      "summary", "Power manager for GNOME",
-		      NULL);
-	ret = pk_results_add_package (results, item);
-	g_object_unref (item);
-	egg_test_assert (test, ret);
-
-	/************************************************************/
-	egg_test_title (test, "get package list of set results");
-	packages = pk_results_get_package_array (results);
-	egg_test_assert (test, (packages->len == 1));
-
-	/************************************************************/
-	egg_test_title (test, "check data");
-	item = g_ptr_array_index (packages, 0);
-	g_object_get (item,
-		      "info", &info,
-		      "package-id", &package_id,
-		      "summary", &summary,
-		      NULL);
-	egg_test_assert (test, (info == PK_INFO_ENUM_AVAILABLE &&
-				g_strcmp0 ("gnome-power-manager;0.1.2;i386;fedora", package_id) == 0 &&
-				g_strcmp0 ("Power manager for GNOME", summary) == 0));
-	g_object_ref (item);
-	g_ptr_array_unref (packages);
-	g_free (package_id);
-	g_free (summary);
-
-	/************************************************************/
-	egg_test_title (test, "check ref");
-	g_object_get (item,
-		      "info", &info,
-		      "package-id", &package_id,
-		      "summary", &summary,
-		      NULL);
-	egg_test_assert (test, (info == PK_INFO_ENUM_AVAILABLE &&
-				g_strcmp0 ("gnome-power-manager;0.1.2;i386;fedora", package_id) == 0 &&
-				g_strcmp0 ("Power manager for GNOME", summary) == 0));
-	g_object_unref (item);
-	g_free (package_id);
-	g_free (summary);
-
-	g_object_unref (results);
-	egg_test_end (test);
-}
-#endif
-
diff --git a/lib/packagekit-glib2/pk-self-test.c b/lib/packagekit-glib2/pk-self-test.c
index 2b5fa56..07c31c4 100644
--- a/lib/packagekit-glib2/pk-self-test.c
+++ b/lib/packagekit-glib2/pk-self-test.c
@@ -1,6 +1,6 @@
 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
  *
- * Copyright (C) 2007-2009 Richard Hughes <richard at hughsie.com>
+ * Copyright (C) 2007-2010 Richard Hughes <richard at hughsie.com>
  *
  * Licensed under the GNU Lesser General Public License Version 2.1
  *
@@ -22,7 +22,7 @@
 #include "config.h"
 
 #include <glib-object.h>
-#include "egg-test.h"
+
 #include "egg-debug.h"
 #include "egg-string.h"
 
@@ -43,37 +43,1879 @@
 #include "pk-task-wrapper.h"
 #include "pk-transaction-list.h"
 #include "pk-version.h"
+#include "pk-control-sync.h"
+#include "pk-client-sync.h"
+#include "pk-progress-bar.h"
+#include "pk-service-pack.h"
+
+/** ver:1.0 ***********************************************************/
+static GMainLoop *_test_loop = NULL;
+static guint _test_loop_timeout_id = 0;
+
+static gboolean
+_g_test_hang_check_cb (gpointer user_data)
+{
+	guint timeout_ms = *((guint*) user_data);
+	g_main_loop_quit (_test_loop);
+	g_warning ("loop not completed in %ims", timeout_ms);
+	g_assert_not_reached ();
+	return FALSE;
+}
+
+/**
+ * _g_test_loop_run_with_timeout:
+ **/
+static void
+_g_test_loop_run_with_timeout (guint timeout_ms)
+{
+	g_assert (_test_loop_timeout_id == 0);
+	_test_loop = g_main_loop_new (NULL, FALSE);
+	_test_loop_timeout_id = g_timeout_add (timeout_ms, _g_test_hang_check_cb, &timeout_ms);
+	g_main_loop_run (_test_loop);
+}
+
+#if 0
+static gboolean
+_g_test_hang_wait_cb (gpointer user_data)
+{
+	g_main_loop_quit (_test_loop);
+	_test_loop_timeout_id = 0;
+	return FALSE;
+}
+
+/**
+ * _g_test_loop_wait:
+ **/
+static void
+_g_test_loop_wait (guint timeout_ms)
+{
+	g_assert (_test_loop_timeout_id == 0);
+	_test_loop = g_main_loop_new (NULL, FALSE);
+	_test_loop_timeout_id = g_timeout_add (timeout_ms, _g_test_hang_wait_cb, &timeout_ms);
+	g_main_loop_run (_test_loop);
+}
+#endif
+
+/**
+ * _g_test_loop_quit:
+ **/
+static void
+_g_test_loop_quit (void)
+{
+	if (_test_loop_timeout_id > 0) {
+		g_source_remove (_test_loop_timeout_id);
+		_test_loop_timeout_id = 0;
+	}
+	if (_test_loop != NULL) {
+		g_main_loop_quit (_test_loop);
+		g_main_loop_unref (_test_loop);
+		_test_loop = NULL;
+	}
+}
+
+/**********************************************************************/
+
+static void
+pk_test_bitfield_func (void)
+{
+	gchar *text;
+	PkBitfield filter;
+	gint value;
+	PkBitfield values;
+
+	/* check we can convert filter bitfield to text (none) */
+	text = pk_filter_bitfield_to_string (pk_bitfield_value (PK_FILTER_ENUM_NONE));
+	g_assert_cmpstr (text, ==, "none");
+	g_free (text);
+
+	/* check we can invert a bit 1 -> 0 */
+	values = pk_bitfield_value (PK_FILTER_ENUM_NOT_DEVELOPMENT) | pk_bitfield_value (PK_FILTER_ENUM_NOT_NEWEST);
+	pk_bitfield_invert (values, PK_FILTER_ENUM_NOT_DEVELOPMENT);
+	g_assert_cmpint (values, ==, pk_bitfield_value (PK_FILTER_ENUM_NOT_NEWEST));
+
+	/* check we can invert a bit 0 -> 1 */
+	values = 0;
+	pk_bitfield_invert (values, PK_FILTER_ENUM_NOT_DEVELOPMENT);
+	g_assert_cmpint (values, ==, pk_bitfield_value (PK_FILTER_ENUM_NOT_DEVELOPMENT));
+
+	/* check we can convert filter bitfield to text (single) */
+	text = pk_filter_bitfield_to_string (pk_bitfield_value (PK_FILTER_ENUM_NOT_DEVELOPMENT));
+	g_assert_cmpstr (text, ==, "~devel");
+	g_free (text);
+
+	/* check we can convert filter bitfield to text (plural) */
+	text = pk_filter_bitfield_to_string (pk_bitfield_value (PK_FILTER_ENUM_NOT_DEVELOPMENT) |
+		   pk_bitfield_value (PK_FILTER_ENUM_GUI) |
+		   pk_bitfield_value (PK_FILTER_ENUM_NEWEST));
+	g_assert_cmpstr (text, ==, "~devel;gui;newest");
+	g_free (text);
+
+	/* check we can convert filter text to bitfield (none) */
+	filter = pk_filter_bitfield_from_string ("none");
+	g_assert_cmpint (filter, ==, pk_bitfield_value (PK_FILTER_ENUM_NONE));
+
+	/* check we can convert filter text to bitfield (single) */
+	filter = pk_filter_bitfield_from_string ("~devel");
+	g_assert_cmpint (filter, ==, pk_bitfield_value (PK_FILTER_ENUM_NOT_DEVELOPMENT));
+
+	/* check we can convert filter text to bitfield (plural) */
+	filter = pk_filter_bitfield_from_string ("~devel;gui;newest");
+	g_assert_cmpint (filter, ==, (pk_bitfield_value (PK_FILTER_ENUM_NOT_DEVELOPMENT) |
+		       pk_bitfield_value (PK_FILTER_ENUM_GUI) |
+		       pk_bitfield_value (PK_FILTER_ENUM_NEWEST)));
+
+	/* check we can add / remove bitfield */
+	filter = pk_bitfield_value (PK_FILTER_ENUM_NOT_DEVELOPMENT) |
+		 pk_bitfield_value (PK_FILTER_ENUM_GUI) |
+		 pk_bitfield_value (PK_FILTER_ENUM_NEWEST);
+	pk_bitfield_add (filter, PK_FILTER_ENUM_NOT_FREE);
+	pk_bitfield_remove (filter, PK_FILTER_ENUM_NOT_DEVELOPMENT);
+	text = pk_filter_bitfield_to_string (filter);
+	g_assert_cmpstr (text, ==, "gui;~free;newest");
+	g_free (text);
+
+	/* check we can test enum presence */
+	filter = pk_bitfield_value (PK_FILTER_ENUM_NOT_DEVELOPMENT) |
+		 pk_bitfield_value (PK_FILTER_ENUM_GUI) |
+		 pk_bitfield_value (PK_FILTER_ENUM_NEWEST);
+	g_assert (pk_bitfield_contain (filter, PK_FILTER_ENUM_NOT_DEVELOPMENT));
+
+	/* check we can test enum false-presence */
+	g_assert (!pk_bitfield_contain (filter, PK_FILTER_ENUM_FREE));
+
+	/* check we can add / remove bitfield to nothing */
+	filter = pk_bitfield_value (PK_FILTER_ENUM_NOT_DEVELOPMENT);
+	pk_bitfield_remove (filter, PK_FILTER_ENUM_NOT_DEVELOPMENT);
+	text = pk_filter_bitfield_to_string (filter);
+	g_assert_cmpstr (text, ==, "none");
+	g_free (text);
+
+	/* role bitfield from enums (unknown) */
+	values = pk_bitfield_from_enums (PK_ROLE_ENUM_UNKNOWN, -1);
+	g_assert_cmpint (values, ==, pk_bitfield_value (PK_ROLE_ENUM_UNKNOWN));
+
+	/* role bitfield from enums (random) */
+	values = pk_bitfield_from_enums (PK_ROLE_ENUM_SEARCH_GROUP, PK_ROLE_ENUM_SEARCH_DETAILS, -1);
+	g_assert_cmpint (values, ==, (pk_bitfield_value (PK_ROLE_ENUM_SEARCH_DETAILS) |
+		       pk_bitfield_value (PK_ROLE_ENUM_SEARCH_GROUP)));
+
+	/* group bitfield from enums (unknown) */
+	values = pk_bitfield_from_enums (PK_GROUP_ENUM_UNKNOWN, -1);
+	g_assert_cmpint (values, ==, pk_bitfield_value (PK_GROUP_ENUM_UNKNOWN));
+
+	/* group bitfield from enums (random) */
+	values = pk_bitfield_from_enums (PK_GROUP_ENUM_ACCESSIBILITY, -1);
+	g_assert_cmpint (values, ==, (pk_bitfield_value (PK_GROUP_ENUM_ACCESSIBILITY)));
+
+	/* group bitfield to text (unknown) */
+	values = pk_bitfield_from_enums (PK_GROUP_ENUM_UNKNOWN, -1);
+	text = pk_group_bitfield_to_string (values);
+	g_assert_cmpstr (text, ==, "unknown");
+	g_free (text);
+
+	/* group bitfield to text (first and last) */
+	values = pk_bitfield_from_enums (PK_GROUP_ENUM_ACCESSIBILITY, PK_GROUP_ENUM_UNKNOWN, -1);
+	text = pk_group_bitfield_to_string (values);
+	g_assert_cmpstr (text, ==, "unknown;accessibility");
+	g_free (text);
+
+	/* group bitfield to text (random) */
+	values = pk_bitfield_from_enums (PK_GROUP_ENUM_UNKNOWN, PK_GROUP_ENUM_REPOS, -1);
+	text = pk_group_bitfield_to_string (values);
+	g_assert_cmpstr (text, ==, "unknown;repos");
+	g_free (text);
+
+	/* priority check missing */
+	values = pk_bitfield_value (PK_ROLE_ENUM_SEARCH_DETAILS) |
+		 pk_bitfield_value (PK_ROLE_ENUM_SEARCH_GROUP);
+	value = pk_bitfield_contain_priority (values, PK_ROLE_ENUM_SEARCH_FILE, -1);
+	g_assert_cmpint (value, ==, -1);
+
+	/* priority check first */
+	value = pk_bitfield_contain_priority (values, PK_ROLE_ENUM_SEARCH_GROUP, -1);
+	g_assert_cmpint (value, ==, PK_ROLE_ENUM_SEARCH_GROUP);
+
+	/* priority check second, correct */
+	value = pk_bitfield_contain_priority (values, PK_ROLE_ENUM_SEARCH_FILE, PK_ROLE_ENUM_SEARCH_GROUP, -1);
+	g_assert_cmpint (value, ==, PK_ROLE_ENUM_SEARCH_GROUP);
+}
+
+static void
+pk_test_catalog_lookup_cb (GObject *object, GAsyncResult *res, gpointer user_data)
+{
+	PkCatalog *catalog = PK_CATALOG (object);
+	GError *error = NULL;
+	GPtrArray *array;
+	guint i;
+	PkPackage *package;
+
+	/* get the results */
+	array = pk_catalog_lookup_finish (catalog, res, &error);
+	g_assert_no_error (error);
+	g_assert (array != NULL);
+	g_assert_cmpint (array->len, ==, 3);
+
+	/* list for shits and giggles */
+	for (i=0; i<array->len; i++) {
+		package = g_ptr_array_index (array, i);
+		egg_debug ("%i\t%s", i, pk_package_get_id (package));
+	}
+	g_ptr_array_unref (array);
+	_g_test_loop_quit ();
+}
+
+static void
+pk_test_catalog_progress_cb (PkProgress *progress, PkProgressType type, gpointer user_data)
+{
+	PkStatusEnum status;
+	if (type == PK_PROGRESS_TYPE_STATUS) {
+		g_object_get (progress,
+		      "status", &status,
+		      NULL);
+		egg_debug ("now %s", pk_status_enum_to_string (status));
+	}
+}
+
+static void
+pk_test_catalog_func (void)
+{
+	PkCatalog *catalog;
+
+	catalog = pk_catalog_new ();
+	g_assert (catalog != NULL);
+
+	/* lookup catalog */
+	pk_catalog_lookup_async (catalog, TESTDATADIR "/test.catalog", NULL,
+				 (PkProgressCallback) pk_test_catalog_progress_cb, NULL,
+				 (GAsyncReadyCallback) pk_test_catalog_lookup_cb, NULL);
+	_g_test_loop_run_with_timeout (150000);
+	egg_debug ("resolvd, searched, etc. in %f", g_test_timer_elapsed ());
+
+	g_object_unref (catalog);
+}
+
+static void
+pk_test_client_resolve_cb (GObject *object, GAsyncResult *res, gpointer user_data)
+{
+	PkClient *client = PK_CLIENT (object);
+	GError *error = NULL;
+	PkResults *results = NULL;
+	PkExitEnum exit_enum;
+	GPtrArray *packages;
+	gboolean idle;
+
+	/* get the results */
+	results = pk_client_generic_finish (client, res, &error);
+	g_assert_no_error (error);
+	g_assert (results != NULL);
+
+	exit_enum = pk_results_get_exit_code (results);
+	g_assert_cmpint (exit_enum, ==, PK_EXIT_ENUM_SUCCESS);
+
+	packages = pk_results_get_package_array (results);
+	g_assert (packages != NULL);
+
+	/* check idle */
+	g_object_get (client, "idle", &idle, NULL);
+	g_assert (idle);
+	g_assert_cmpint (packages->len, ==, 2);
+
+	g_ptr_array_unref (packages);
+
+	egg_debug ("results exit enum = %s", pk_exit_enum_to_string (exit_enum));
+
+	g_object_unref (results);
+	_g_test_loop_quit ();
+}
+
+static void
+pk_test_client_get_details_cb (GObject *object, GAsyncResult *res, gpointer user_data)
+{
+	PkClient *client = PK_CLIENT (object);
+	GError *error = NULL;
+	PkResults *results = NULL;
+	PkExitEnum exit_enum;
+	GPtrArray *details;
+
+	/* get the results */
+	results = pk_client_generic_finish (client, res, &error);
+	g_assert_no_error (error);
+	g_assert (results != NULL);
+
+	exit_enum = pk_results_get_exit_code (results);
+	g_assert_cmpint (exit_enum, ==, PK_EXIT_ENUM_SUCCESS);
+
+	details = pk_results_get_details_array (results);
+	g_assert (details != NULL);
+	g_assert_cmpint (details->len, ==, 1);
+
+	g_ptr_array_unref (details);
+
+	egg_debug ("results exit enum = %s", pk_exit_enum_to_string (exit_enum));
+
+	g_object_unref (results);
+	_g_test_loop_quit ();
+}
+
+static void
+pk_test_client_get_updates_cb (GObject *object, GAsyncResult *res, gpointer user_data)
+{
+	PkClient *client = PK_CLIENT (object);
+	GError *error = NULL;
+	PkResults *results = NULL;
+	PkExitEnum exit_enum;
+	PkPackageSack *sack;
+	guint size;
+
+	/* get the results */
+	results = pk_client_generic_finish (client, res, &error);
+	g_assert_no_error (error);
+	g_assert (results != NULL);
+
+	exit_enum = pk_results_get_exit_code (results);
+	g_assert_cmpint (exit_enum, ==, PK_EXIT_ENUM_SUCCESS);
+
+	sack = pk_results_get_package_sack (results);
+	g_assert (sack != NULL);
+
+	/* check size */
+	size = pk_package_sack_get_size (sack);
+	g_assert_cmpint (size, ==, 3);
+
+	g_object_unref (sack);
+
+	egg_debug ("results exit enum = %s", pk_exit_enum_to_string (exit_enum));
+
+	g_object_unref (results);
+	_g_test_loop_quit ();
+}
+
+static void
+pk_test_client_search_name_cb (GObject *object, GAsyncResult *res, gpointer user_data)
+{
+	PkClient *client = PK_CLIENT (object);
+	GError *error = NULL;
+	PkResults *results = NULL;
+	PkExitEnum exit_enum;
+	PkError *error_code = NULL;
+
+	/* get the results */
+	results = pk_client_generic_finish (client, res, &error);
+	g_assert_no_error (error);
+	g_assert (results != NULL);
+
+	exit_enum = pk_results_get_exit_code (results);
+	g_assert_cmpint (exit_enum, ==, PK_EXIT_ENUM_CANCELLED);
+
+	/* check error code */
+	error_code = pk_results_get_error_code (results);
+	g_assert_cmpint (pk_error_get_code (error_code), ==, PK_ERROR_ENUM_TRANSACTION_CANCELLED);
+	g_assert_cmpstr (pk_error_get_details (error_code), ==, "The task was stopped successfully");
+//	g_assert_cmpstr (pk_error_get_details (error_code), ==, "transaction was cancelled");
+
+	if (error_code != NULL)
+		g_object_unref (error_code);
+	if (results != NULL)
+		g_object_unref (results);
+	_g_test_loop_quit ();
+}
+
+static guint _progress_cb = 0;
+static guint _status_cb = 0;
+static guint _package_cb = 0;
+static guint _allow_cancel_cb = 0;
+gchar *_tid = NULL;
+
+static void
+pk_test_client_progress_cb (PkProgress *progress, PkProgressType type, gpointer user_data)
+{
+	gchar *tid;
+	if (type == PK_PROGRESS_TYPE_PACKAGE_ID)
+		_package_cb++;
+	if (type == PK_PROGRESS_TYPE_PERCENTAGE)
+		_progress_cb++;
+	if (type == PK_PROGRESS_TYPE_SUBPERCENTAGE)
+		_progress_cb++;
+	if (type == PK_PROGRESS_TYPE_ALLOW_CANCEL)
+		_allow_cancel_cb++;
+	if (type == PK_PROGRESS_TYPE_STATUS)
+		_status_cb++;
+
+	/* get the running transaction id if we've not set it before */
+	g_object_get (progress, "transaction-id", &tid, NULL);
+	if (tid != NULL && _tid == NULL)
+		_tid = g_strdup (tid);
+	g_free (tid);
+}
+
+static gboolean
+pk_test_client_cancel_cb (GCancellable *cancellable)
+{
+	egg_warning ("cancelling method");
+	g_cancellable_cancel (cancellable);
+	return FALSE;
+}
+
+static void
+pk_test_client_download_cb (GObject *object, GAsyncResult *res, gpointer user_data)
+{
+	PkClient *client = PK_CLIENT (object);
+	GError *error = NULL;
+	PkResults *results = NULL;
+	PkExitEnum exit_enum;
+	PkFiles *item;
+	GPtrArray *array = NULL;
+	gchar *package_id = NULL;
+	gchar **files = NULL;
+
+	/* get the results */
+	results = pk_client_generic_finish (client, res, &error);
+	g_assert_no_error (error);
+	g_assert (results != NULL);
+
+	exit_enum = pk_results_get_exit_code (results);
+	g_assert_cmpint (exit_enum, ==, PK_EXIT_ENUM_SUCCESS);
+
+	/* check number */
+	array = pk_results_get_files_array (results);
+	g_assert_cmpint (array->len, ==, 2);
+
+	/* check a result */
+	item = g_ptr_array_index (array, 0);
+	g_object_get (item,
+		      "package-id", &package_id,
+		      "files", &files,
+		      NULL);
+	g_assert_cmpstr (package_id, ==, "powertop-common;1.8-1.fc8;i386;fedora");
+	g_assert_cmpint (g_strv_length (files), ==, 1);
+	g_assert_cmpstr (files[0], ==, "/tmp/powertop-common-1.8-1.fc8.rpm");
+
+	g_strfreev (files);
+	g_free (package_id);
+	g_ptr_array_unref (array);
+	if (results != NULL)
+		g_object_unref (results);
+	_g_test_loop_quit ();
+}
+
+#if 0
+static void
+pk_test_client_recursive_signal_cb (PkControl *control, gpointer user_data)
+{
+	gboolean ret;
+	ret = pk_control_get_properties (control, NULL, NULL);
+	g_assert (ret);
+}
+#endif
+
+static void
+pk_test_client_notify_idle_cb (PkClient *client, GParamSpec *pspec, gpointer user_data)
+{
+	gboolean idle;
+	g_object_get (client, "idle", &idle, NULL);
+	egg_debug ("idle=%i", idle);
+}
+
+static void
+pk_test_client_func (void)
+{
+	PkClient *client;
+	gchar **package_ids;
+//	gchar *file;
+	GCancellable *cancellable;
+	gboolean ret;
+	gchar **values;
+	GError *error = NULL;
+	PkProgress *progress;
+	gchar *tid;
+	PkRoleEnum role;
+	PkStatusEnum status;
+//	PkResults *results;
+
+#if 0
+	/* test user temp */
+	file = pk_client_get_user_temp ("self-test", NULL);
+	g_assert (g_str_has_suffix (file, "/.PackageKit/self-test"));
+	g_assert (g_str_has_prefix (file, "/home/"));
+	g_free (file);
+
+	/* test native TRUE */
+	ret = pk_client_is_file_native ("/tmp");
+	g_assert (ret);
+
+	/* test native FALSE */
+	ret = pk_client_is_file_native ("/tmp/.gvfs/moo");
+	g_assert (!ret);
+
+	/* test resolve NULL */
+	file = pk_client_real_path (NULL);
+	g_assert (file == NULL);
+
+	/* test resolve /etc/hosts */
+	file = pk_client_real_path ("/etc/hosts");
+	g_assert_cmpstr (file, ==, "/etc/hosts");
+	g_free (file);
+
+	/* test resolve /etc/../etc/hosts */
+	file = pk_client_real_path ("/etc/../etc/hosts");
+	g_assert_cmpstr (file, ==, "/etc/hosts");
+	g_free (file);
+#endif
+
+	/* get client */
+	client = pk_client_new ();
+	g_signal_connect (client, "notify::idle",
+		  G_CALLBACK (pk_test_client_notify_idle_cb), NULL);
+	g_assert (client != NULL);
+
+	/* check idle */
+	g_object_get (client, "idle", &ret, NULL);
+	g_assert (ret);
+
+	/* resolve package */
+	package_ids = pk_package_ids_from_string ("glib2;2.14.0;i386;fedora&powertop");
+	pk_client_resolve_async (client, pk_bitfield_value (PK_FILTER_ENUM_INSTALLED), package_ids, NULL,
+		 (PkProgressCallback) pk_test_client_progress_cb, NULL,
+		 (GAsyncReadyCallback) pk_test_client_resolve_cb, NULL);
+	g_strfreev (package_ids);
+	_g_test_loop_run_with_timeout (15000);
+	egg_debug ("resolved in %f", g_test_timer_elapsed ());
+
+	/* check idle */
+	g_object_get (client, "idle", &ret, NULL);
+	g_assert (ret);
+
+	/* get progress of past transaction */
+	progress = pk_client_get_progress (client, _tid, NULL, &error);
+	g_object_get (progress,
+		      "transaction-id", &tid,
+		      "role", &role,
+		      "status", &status,
+		      NULL);
+	g_assert_cmpstr (tid, ==, _tid);
+	g_assert_cmpint (role, ==, PK_ROLE_ENUM_RESOLVE);
+	g_assert_cmpint (status, ==, PK_STATUS_ENUM_FINISHED);
+	egg_debug ("got progress in %f", g_test_timer_elapsed ());
+	g_object_unref (progress);
+	g_free (tid);
+	g_free (_tid);
+
+	/* got updates */
+	g_assert_cmpint (_progress_cb, >, 0);
+	g_assert_cmpint (_status_cb, >, 0);
+
+	/* reset */
+	_progress_cb = 0;
+	_status_cb = 0;
+//	_package_cb = 0;
+
+	/* get details about package */
+	package_ids = pk_package_ids_from_id ("powertop;1.8-1.fc8;i386;fedora");
+	pk_client_get_details_async (client, package_ids, NULL,
+		     (PkProgressCallback) pk_test_client_progress_cb, NULL,
+		     (GAsyncReadyCallback) pk_test_client_get_details_cb, NULL);
+	g_strfreev (package_ids);
+	_g_test_loop_run_with_timeout (15000);
+	egg_debug ("resolved in %f", g_test_timer_elapsed ());
+
+	/* got updates */
+	g_assert_cmpint (_progress_cb, >, 0);
+	g_assert_cmpint (_status_cb, >, 0);
+
+	/* reset */
+	_progress_cb = 0;
+	_status_cb = 0;
+//	_package_cb = 0;
+
+	/* get updates */
+	pk_client_get_updates_async (client, pk_bitfield_value (PK_FILTER_ENUM_NONE), NULL,
+		     (PkProgressCallback) pk_test_client_progress_cb, NULL,
+		     (GAsyncReadyCallback) pk_test_client_get_updates_cb, NULL);
+	_g_test_loop_run_with_timeout (15000);
+	egg_debug ("got updates in %f", g_test_timer_elapsed ());
+
+	/* it takes more than 50ms to get the progress of the transaction, and if
+	 * getting updates from internal cache, then it'll take a shed load less
+	 * than this to complete */
+	if (g_test_timer_elapsed () > 100) {
+		/* got status updates */
+		g_assert_cmpint (_status_cb, >, 0);
+	}
+
+	/* search by name */
+	cancellable = g_cancellable_new ();
+	values = g_strsplit ("power", "&", -1);
+	pk_client_search_names_async (client, pk_bitfield_value (PK_FILTER_ENUM_NONE), values, cancellable,
+		     (PkProgressCallback) pk_test_client_progress_cb, NULL,
+		     (GAsyncReadyCallback) pk_test_client_search_name_cb, NULL);
+	g_timeout_add (1000, (GSourceFunc) pk_test_client_cancel_cb, cancellable);
+	_g_test_loop_run_with_timeout (15000);
+	egg_debug ("cancelled in %f", g_test_timer_elapsed ());
+
+	g_strfreev (values);
+	g_cancellable_reset (cancellable);
+
+	/* do downloads */
+	package_ids = pk_package_ids_from_id ("powertop;1.8-1.fc8;i386;fedora");
+	pk_client_download_packages_async (client, package_ids, "/tmp", cancellable,
+		   (PkProgressCallback) pk_test_client_progress_cb, NULL,
+		   (GAsyncReadyCallback) pk_test_client_download_cb, NULL);
+	g_strfreev (package_ids);
+	_g_test_loop_run_with_timeout (15000);
+	egg_debug ("downloaded and copied in %f", g_test_timer_elapsed ());
+
+	/* test recursive signal handling */
+#if 0
+	g_signal_connect (client->priv->control, "repo-list-changed", G_CALLBACK (pk_test_client_recursive_signal_cb), NULL);
+	results = pk_client_repo_set_data (client, "dave", "moo", "data", NULL, NULL, NULL, NULL);
+	g_assert (results != NULL);
+	g_object_unref (results);
+#endif
+
+	g_object_unref (cancellable);
+	g_object_unref (client);
+}
+
+static void
+pk_test_common_func (void)
+{
+	gchar *present;
+	GDate *date;
+
+	/************************************************************
+	 **************            iso8601           ****************
+	 ************************************************************/
+	/* get present iso8601 */
+	present = pk_iso8601_present ();
+	g_assert (present != NULL);
+	g_free (present);
+
+	/************************************************************
+	 **************        Date handling         ****************
+	 ************************************************************/
+	/* zero length date */
+	date = pk_iso8601_to_date ("");
+	g_assert (date == NULL);
+
+	/* no day specified */
+	date = pk_iso8601_to_date ("2004-01");
+	g_assert (date == NULL);
+
+	/* date _and_ time specified */
+	date = pk_iso8601_to_date ("2009-05-08 13:11:12");
+	g_assert_cmpint (date->day, ==, 8);
+	g_assert_cmpint (date->month, ==, 5);
+	g_assert_cmpint (date->year, ==, 2009);
+	g_date_free (date);
+
+	/* correct date format */
+	date = pk_iso8601_to_date ("2004-02-01");
+	g_assert_cmpint (date->day, ==, 1);
+	g_assert_cmpint (date->month, ==, 2);
+	g_assert_cmpint (date->year, ==, 2004);
+	g_date_free (date);
+}
+
+static void
+pk_test_console_func (void)
+{
+	gboolean ret;
+
+	/* get prompt 1 */
+	ret = pk_console_get_prompt ("press enter", TRUE);
+	g_assert (ret);
+
+	/* get prompt 2 */
+	ret = pk_console_get_prompt ("press enter", TRUE);
+	g_assert (ret);
+
+	/* get prompt 3 */
+	ret = pk_console_get_prompt ("press Y", TRUE);
+	g_assert (ret);
+
+	/* get prompt 3 */
+	ret = pk_console_get_prompt ("press N", TRUE);
+	g_assert (!ret);
+}
+
+static guint _refcount = 0;
+
+static void
+pk_test_control_get_tid_cb (GObject *object, GAsyncResult *res, gpointer user_data)
+{
+	PkControl *control = PK_CONTROL (object);
+	GError *error = NULL;
+	gchar *tid;
+
+	/* get the result */
+	tid = pk_control_get_tid_finish (control, res, &error);
+	g_assert_no_error (error);
+	g_assert (tid != NULL);
+
+	egg_debug ("tid = %s", tid);
+	g_free (tid);
+	if (--_refcount == 0)
+		_g_test_loop_quit ();
+}
+
+static void
+pk_test_control_get_properties_cb (GObject *object, GAsyncResult *res, gpointer user_data)
+{
+	PkControl *control = PK_CONTROL (object);
+	GError *error = NULL;
+	gboolean ret;
+	PkBitfield roles;
+	PkBitfield filters;
+	PkBitfield groups;
+	gchar *text;
+
+	/* get the result */
+	ret = pk_control_get_properties_finish (control, res, &error);
+	g_assert_no_error (error);
+	g_assert (ret);
+
+	/* get values */
+	g_object_get (control,
+		      "mime-types", &text,
+		      "roles", &roles,
+		      "filters", &filters,
+		      "groups", &groups,
+		      NULL);
+
+	/* check mime_types */
+	g_assert_cmpstr (text, ==, "application/x-rpm;application/x-deb");
+	g_free (text);
+
+	/* check roles */
+	text = pk_role_bitfield_to_string (roles);
+	g_assert_cmpstr (text, ==, "cancel;get-depends;get-details;get-files;get-packages;get-repo-list;"
+		     "get-requires;get-update-detail;get-updates;install-files;install-packages;install-signature;"
+		     "refresh-cache;remove-packages;repo-enable;repo-set-data;resolve;rollback;"
+		     "search-details;search-file;search-group;search-name;update-packages;update-system;"
+		     "what-provides;download-packages;get-distro-upgrades;simulate-install-packages;"
+		     "simulate-remove-packages;simulate-update-packages");
+	g_free (text);
+
+	/* check filters */
+	text = pk_filter_bitfield_to_string (filters);
+	g_assert_cmpstr (text, ==, "installed;devel;gui");
+	g_free (text);
+
+	/* check groups */
+	text = pk_group_bitfield_to_string (groups);
+	g_assert_cmpstr (text, ==, "accessibility;games;system");
+	egg_debug ("groups = %s", text);
+
+	g_free (text);
+
+	if (--_refcount == 0)
+		_g_test_loop_quit ();
+}
+
+static void
+pk_test_control_get_time_since_action_cb (GObject *object, GAsyncResult *res, gpointer user_data)
+{
+	PkControl *control = PK_CONTROL (object);
+	GError *error = NULL;
+	guint seconds;
+
+	/* get the result */
+	seconds = pk_control_get_time_since_action_finish (control, res, &error);
+	g_assert_no_error (error);
+	g_assert_cmpint (seconds, !=, 0);
+
+	_g_test_loop_quit ();
+}
+
+static void
+pk_test_control_can_authorize_cb (GObject *object, GAsyncResult *res, gpointer user_data)
+{
+	PkControl *control = PK_CONTROL (object);
+	GError *error = NULL;
+	PkAuthorizeEnum auth;
+
+	/* get the result */
+	auth = pk_control_can_authorize_finish (control, res, &error);
+	g_assert_no_error (error);
+	g_assert_cmpint (auth, !=, PK_AUTHORIZE_ENUM_UNKNOWN);
+
+	_g_test_loop_quit ();
+}
+
+static void
+pk_test_control_func (void)
+{
+	PkControl *control;
+	guint version;
+	GError *error = NULL;
+	gboolean ret;
+	gchar *text;
+	PkBitfield roles;
+	guint i;
+	const guint LOOP_SIZE = 5;
+
+	/* get control */
+	control = pk_control_new ();
+	g_assert (control != NULL);
+
+	/* get TID async */
+	_refcount = 1;
+	pk_control_get_tid_async (control, NULL, (GAsyncReadyCallback) pk_test_control_get_tid_cb, NULL);
+	_g_test_loop_run_with_timeout (5000);
+	egg_debug ("got tid in %f", g_test_timer_elapsed ());
+
+	/* get multiple TIDs async */
+	_refcount = LOOP_SIZE;
+	for (i=0; i<_refcount; i++) {
+		egg_debug ("getting #%i", i+1);
+		pk_control_get_tid_async (control, NULL, (GAsyncReadyCallback) pk_test_control_get_tid_cb, NULL);
+	}
+	_g_test_loop_run_with_timeout (5000);
+	egg_debug ("got %i tids in %f", LOOP_SIZE, g_test_timer_elapsed ());
+
+	/* get properties async */
+	_refcount = 1;
+	pk_control_get_properties_async (control, NULL, (GAsyncReadyCallback) pk_test_control_get_properties_cb, NULL);
+	_g_test_loop_run_with_timeout (5000);
+	egg_debug ("got properties types in %f", g_test_timer_elapsed ());
+
+	/* get properties async (again, to test caching) */
+	_refcount = 1;
+	pk_control_get_properties_async (control, NULL, (GAsyncReadyCallback) pk_test_control_get_properties_cb, NULL);
+	_g_test_loop_run_with_timeout (5000);
+	egg_debug ("got properties in %f", g_test_timer_elapsed ());
+
+	/* do multiple requests async */
+	_refcount = LOOP_SIZE * 4;
+	for (i=0; i<_refcount; i++) {
+		egg_debug ("getting #%i", i+1);
+		pk_control_get_tid_async (control, NULL, (GAsyncReadyCallback) pk_test_control_get_tid_cb, NULL);
+		pk_control_get_properties_async (control, NULL, (GAsyncReadyCallback) pk_test_control_get_properties_cb, NULL);
+		pk_control_get_tid_async (control, NULL, (GAsyncReadyCallback) pk_test_control_get_tid_cb, NULL);
+		pk_control_get_properties_async (control, NULL, (GAsyncReadyCallback) pk_test_control_get_properties_cb, NULL);
+	}
+	_g_test_loop_run_with_timeout (5000);
+	egg_debug ("got %i 2*properties and 2*tids in %f", LOOP_SIZE, g_test_timer_elapsed ());
+
+	/* get time since async */
+	pk_control_get_time_since_action_async (control, PK_ROLE_ENUM_GET_UPDATES, NULL, (GAsyncReadyCallback) pk_test_control_get_time_since_action_cb, NULL);
+	_g_test_loop_run_with_timeout (5000);
+	egg_debug ("got get time since in %f", g_test_timer_elapsed ());
+
+	/* get auth state async */
+	pk_control_can_authorize_async (control, "org.freedesktop.packagekit.system-update", NULL,
+		(GAsyncReadyCallback) pk_test_control_can_authorize_cb, NULL);
+	_g_test_loop_run_with_timeout (5000);
+	egg_debug ("get auth state in %f", g_test_timer_elapsed ());
+
+	/* version major */
+	g_object_get (control, "version-major", &version, NULL);
+	g_assert_cmpint (version, ==, PK_MAJOR_VERSION);
+
+	/* version minor */
+	g_object_get (control, "version-minor", &version, NULL);
+	g_assert_cmpint (version, ==, PK_MINOR_VERSION);
+
+	/* version micro */
+	g_object_get (control, "version-micro", &version, NULL);
+	g_assert_cmpint (version, ==, PK_MICRO_VERSION);
+
+	/* get properties sync */
+	ret = pk_control_get_properties (control, NULL, &error);
+	g_assert_no_error (error);
+	g_assert (ret);
+
+	/* get data */
+	g_object_get (control,
+		      "roles", &roles,
+		      NULL);
+
+	/* check data */
+	text = pk_role_bitfield_to_string (roles);
+	g_assert_cmpstr (text, ==, "cancel;get-depends;get-details;get-files;get-packages;get-repo-list;"
+		     "get-requires;get-update-detail;get-updates;install-files;install-packages;install-signature;"
+		     "refresh-cache;remove-packages;repo-enable;repo-set-data;resolve;rollback;"
+		     "search-details;search-file;search-group;search-name;update-packages;update-system;"
+		     "what-provides;download-packages;get-distro-upgrades;simulate-install-packages;"
+		     "simulate-remove-packages;simulate-update-packages");
+	g_free (text);
+
+	g_object_unref (control);
+}
+
+static void
+pk_test_desktop_func (void)
+{
+	PkDesktop *desktop;
+	gboolean ret;
+	gchar *package;
+	GPtrArray *array;
+	GError *error = NULL;
+
+	desktop = pk_desktop_new ();
+	g_assert (desktop != NULL);
+
+	/* get package when not valid */
+	package = pk_desktop_get_package_for_file (desktop, "/usr/share/applications/gpk-update-viewer.desktop", NULL);
+	g_assert (package == NULL);
+
+	/* file does not exist */
+	ret = g_file_test (PK_DESKTOP_DEFAULT_DATABASE, G_FILE_TEST_EXISTS);
+	if (!ret) {
+		egg_warning ("skipping checks as database does not exist");
+		goto out;
+	}
+
+	/* open database */
+	ret = pk_desktop_open_database (desktop, &error);
+	g_assert_no_error (error);
+	g_assert (ret);
+
+	/* get package */
+	package = pk_desktop_get_package_for_file (desktop, "/usr/share/applications/gpk-update-viewer.desktop", NULL);
+
+	/* dummy, not yum */
+	if (g_strcmp0 (package, "vips-doc") == 0); {
+		egg_debug ("created db with dummy, skipping remaining tests");
+		goto out;
+	}
+	g_assert_cmpstr (package, ==, "gnome-packagekit");
+	g_free (package);
+
+	/* get files */
+	array = pk_desktop_get_files_for_package (desktop, "gnome-packagekit", NULL);
+	g_assert (array != NULL);
+	g_assert_cmpint (array->len, >=, 5);
+	g_ptr_array_unref (array);
+
+	/* get shown files */
+	array = pk_desktop_get_shown_for_package (desktop, "gnome-packagekit", NULL);
+	g_assert (array != NULL);
+	g_assert_cmpint (array->len, >=, 3);
+	g_ptr_array_unref (array);
+out:
+	g_object_unref (desktop);
+}
+
+static void
+pk_test_enum_func (void)
+{
+	const gchar *string;
+	PkRoleEnum role_value;
+	guint i;
+
+	/* find value */
+	role_value = pk_role_enum_from_string ("search-file");
+	g_assert_cmpint (role_value, ==, PK_ROLE_ENUM_SEARCH_FILE);
+
+	/* find string */
+	string = pk_role_enum_to_string (PK_ROLE_ENUM_SEARCH_FILE);
+	g_assert_cmpstr (string, ==, "search-file");
+
+	/* check we convert all the role bitfield */
+	for (i=1; i<PK_ROLE_ENUM_LAST; i++) {
+		string = pk_role_enum_to_string (i);
+		if (string == NULL) {
+			/* so we get the value of i in the assert text */
+			g_assert_cmpint (0, ==, i);
+			break;
+		}
+	}
+
+	/* check we convert all the status bitfield */
+	for (i=1; i<PK_STATUS_ENUM_LAST; i++) {
+		string = pk_status_enum_to_string (i);
+		if (string == NULL) {
+			/* so we get the value of i in the assert text */
+			g_assert_cmpint (0, ==, i);
+			break;
+		}
+	}
+
+	/* check we convert all the exit bitfield */
+	for (i=0; i<PK_EXIT_ENUM_LAST; i++) {
+		string = pk_exit_enum_to_string (i);
+		if (string == NULL) {
+			/* so we get the value of i in the assert text */
+			g_assert_cmpint (0, ==, i);
+			break;
+		}
+	}
+
+	/* check we convert all the filter bitfield */
+	for (i=0; i<PK_FILTER_ENUM_LAST; i++) {
+		string = pk_filter_enum_to_string (i);
+		if (string == NULL) {
+			/* so we get the value of i in the assert text */
+			g_assert_cmpint (0, ==, i);
+			break;
+		}
+	}
+
+	/* check we convert all the restart bitfield */
+	for (i=0; i<PK_RESTART_ENUM_LAST; i++) {
+		string = pk_restart_enum_to_string (i);
+		if (string == NULL) {
+			/* so we get the value of i in the assert text */
+			g_assert_cmpint (0, ==, i);
+			break;
+		}
+	}
+
+	/* check we convert all the error_code bitfield */
+	for (i=0; i<PK_ERROR_ENUM_LAST; i++) {
+		string = pk_error_enum_to_string (i);
+		if (string == NULL) {
+			/* so we get the value of i in the assert text */
+			g_assert_cmpint (0, ==, i);
+			break;
+		}
+	}
+
+	/* check we convert all the group bitfield */
+	for (i=1; i<PK_GROUP_ENUM_LAST; i++) {
+		string = pk_group_enum_to_string (i);
+		if (string == NULL) {
+			/* so we get the value of i in the assert text */
+			g_assert_cmpint (0, ==, i);
+			break;
+		}
+	}
+
+	/* check we convert all the info bitfield */
+	for (i=1; i<PK_INFO_ENUM_LAST; i++) {
+		string = pk_info_enum_to_string (i);
+		if (string == NULL) {
+			/* so we get the value of i in the assert text */
+			g_assert_cmpint (0, ==, i);
+			break;
+		}
+	}
+
+	/* check we convert all the sig_type bitfield */
+	for (i=0; i<PK_SIGTYPE_ENUM_LAST; i++) {
+		string = pk_sig_type_enum_to_string (i);
+		if (string == NULL) {
+			/* so we get the value of i in the assert text */
+			g_assert_cmpint (0, ==, i);
+			break;
+		}
+	}
+
+	/* check we convert all the upgrade bitfield */
+	for (i=0; i<PK_DISTRO_UPGRADE_ENUM_LAST; i++) {
+		string = pk_distro_upgrade_enum_to_string (i);
+		if (string == NULL) {
+			/* so we get the value of i in the assert text */
+			g_assert_cmpint (0, ==, i);
+			break;
+		}
+	}
+
+	/* check we convert all the license bitfield */
+	for (i=0; i<PK_LICENSE_ENUM_LAST; i++) {
+		string = pk_license_enum_to_string (i);
+		if (string == NULL) {
+			/* so we get the value of i in the assert text */
+			g_assert_cmpint (0, ==, i);
+			break;
+		}
+	}
+
+	/* check we convert all the media type bitfield */
+	for (i=0; i<PK_MEDIA_TYPE_ENUM_LAST; i++) {
+		string = pk_media_type_enum_to_string (i);
+		if (string == NULL) {
+			/* so we get the value of i in the assert text */
+			g_assert_cmpint (0, ==, i);
+			break;
+		}
+	}
+}
+
+static void
+pk_test_package_id_func (void)
+{
+	gboolean ret;
+	gchar *text;
+	gchar **sections;
+
+	/* check not valid - NULL */
+	ret = pk_package_id_check (NULL);
+	g_assert (!ret);
+
+	/* check not valid - no name */
+	ret = pk_package_id_check (";0.0.1;i386;fedora");
+	g_assert (!ret);
+
+	/* check not valid - invalid */
+	ret = pk_package_id_check ("moo;0.0.1;i386");
+	g_assert (!ret);
+
+	/* check valid */
+	ret = pk_package_id_check ("moo;0.0.1;i386;fedora");
+	g_assert (ret);
+
+	/* id build */
+	text = pk_package_id_build ("moo", "0.0.1", "i386", "fedora");
+	g_assert_cmpstr (text, ==, "moo;0.0.1;i386;fedora");
+	g_free (text);
+
+	/* id build partial */
+	text = pk_package_id_build ("moo", NULL, NULL, NULL);
+	g_assert_cmpstr (text, ==, "moo;;;");
+	g_free (text);
+
+	/* test printable */
+	text = pk_package_id_to_printable ("moo;0.0.1;i386;fedora");
+	g_assert_cmpstr (text, ==, "moo-0.0.1.i386");
+	g_free (text);
+
+	/* test printable no arch */
+	text = pk_package_id_to_printable ("moo;0.0.1;;");
+	g_assert_cmpstr (text, ==, "moo-0.0.1");
+	g_free (text);
+
+	/* test printable just name */
+	text = pk_package_id_to_printable ("moo;;;");
+	g_assert_cmpstr (text, ==, "moo");
+	g_free (text);
+
+	/* test on real packageid */
+	sections = pk_package_id_split ("kde-i18n-csb;4:3.5.8~pre20071001-0ubuntu1;all;");
+	g_assert (sections != NULL);
+	g_assert_cmpstr (sections[0], ==, "kde-i18n-csb");
+	g_assert_cmpstr (sections[1], ==, "4:3.5.8~pre20071001-0ubuntu1");
+	g_assert_cmpstr (sections[2], ==, "all");
+	g_assert_cmpstr (sections[3], ==, "");
+	g_strfreev (sections);
+
+	/* test on short packageid */
+	sections = pk_package_id_split ("kde-i18n-csb;4:3.5.8~pre20071001-0ubuntu1;;");
+	g_assert (sections != NULL);
+	g_assert_cmpstr (sections[0], ==, "kde-i18n-csb");
+	g_assert_cmpstr (sections[1], ==, "4:3.5.8~pre20071001-0ubuntu1");
+	g_assert_cmpstr (sections[2], ==, "");
+	g_assert_cmpstr (sections[3], ==, "");
+	g_strfreev (sections);
+
+	/* test fail under */
+	sections = pk_package_id_split ("foo;moo");
+	g_assert (sections == NULL);
+
+	/* test fail over */
+	sections = pk_package_id_split ("foo;moo;dave;clive;dan");
+	g_assert (sections == NULL);
+
+	/* test fail missing first */
+	sections = pk_package_id_split (";0.1.2;i386;data");
+	g_assert (sections == NULL);
+}
+
+static void
+pk_test_package_ids_func (void)
+{
+	gboolean ret;
+	gchar *package_ids_blank[] = {};
+	gchar **package_ids;
+
+	/* parse va_list */
+	package_ids = pk_package_ids_from_string ("foo;0.0.1;i386;fedora&bar;0.1.1;noarch;livna");
+	g_assert (package_ids != NULL);
+
+	/* verify size */
+	g_assert_cmpint (g_strv_length (package_ids), ==, 2);
+
+	/* verify blank */
+	ret = pk_package_ids_check (package_ids_blank);
+	g_assert (!ret);
+
+	/* verify */
+	ret = pk_package_ids_check (package_ids);
+	g_assert (ret);
+
+	g_strfreev (package_ids);
+}
+
+static void
+pk_test_package_sack_resolve_cb (GObject *object, GAsyncResult *res, gpointer user_data)
+{
+	PkPackageSack *sack = PK_PACKAGE_SACK (object);
+	GError *error = NULL;
+	gboolean ret;
+
+	/* get the result */
+	ret = pk_package_sack_merge_generic_finish (sack, res, &error);
+	g_assert_no_error (error);
+	g_assert (ret);
+
+	_g_test_loop_quit ();
+}
+
+static void
+pk_test_package_sack_details_cb (GObject *object, GAsyncResult *res, gpointer user_data)
+{
+	PkPackageSack *sack = PK_PACKAGE_SACK (object);
+	GError *error = NULL;
+	gboolean ret;
+
+	/* get the result */
+	ret = pk_package_sack_merge_generic_finish (sack, res, &error);
+	g_assert_no_error (error);
+	g_assert (ret);
+
+	_g_test_loop_quit ();
+}
+
+static void
+pk_test_package_sack_update_detail_cb (GObject *object, GAsyncResult *res, gpointer user_data)
+{
+	PkPackageSack *sack = PK_PACKAGE_SACK (object);
+	GError *error = NULL;
+	gboolean ret;
+
+	/* get the result */
+	ret = pk_package_sack_merge_generic_finish (sack, res, &error);
+	g_assert_no_error (error);
+	g_assert (ret);
+
+	_g_test_loop_quit ();
+}
+
+/**
+ * pk_test_package_sack_filter_cb:
+ **/
+static gboolean
+pk_test_package_sack_filter_cb (PkPackage *package, gpointer user_data)
+{
+	if (pk_package_get_info (package) == PK_INFO_ENUM_UNKNOWN)
+		return FALSE;
+	return TRUE;
+}
+
+static void
+pk_test_package_sack_func (void)
+{
+	gboolean ret;
+	PkPackageSack *sack;
+	PkPackage *package;
+	gchar *text;
+	guint size;
+	PkInfoEnum info = PK_INFO_ENUM_UNKNOWN;
+	guint64 bytes;
+
+	sack = pk_package_sack_new ();
+	g_assert (sack != NULL);
+
+	/* get size of unused package sack */
+	size = pk_package_sack_get_size (sack);
+	g_assert (size == 0);
+
+	/* remove package not present */
+	ret = pk_package_sack_remove_package_by_id (sack, "powertop;1.8-1.fc8;i386;fedora");
+	g_assert (!ret);
+
+	/* find package not present */
+	package = pk_package_sack_find_by_id (sack, "powertop;1.8-1.fc8;i386;fedora");
+	g_assert (package == NULL);
+
+	/* add package */
+	ret = pk_package_sack_add_package_by_id (sack, "powertop;1.8-1.fc8;i386;fedora", NULL);
+	g_assert (ret);
+
+	/* get size of package sack */
+	size = pk_package_sack_get_size (sack);
+	g_assert (size == 1);
+
+	/* merge resolve results */
+	pk_package_sack_resolve_async (sack, NULL, NULL, NULL, (GAsyncReadyCallback) pk_test_package_sack_resolve_cb, NULL);
+	_g_test_loop_run_with_timeout (5000);
+	egg_debug ("resolved in %f", g_test_timer_elapsed ());
+
+	/* find package which is present */
+	package = pk_package_sack_find_by_id (sack, "powertop;1.8-1.fc8;i386;fedora");
+	g_assert (package != NULL);
+
+	/* check new summary */
+	g_object_get (package,
+		      "info", &info,
+		      "summary", &text,
+		      NULL);
+	g_assert_cmpstr (text, ==, "Power consumption monitor");
+
+	/* check new info */
+	g_assert_cmpint (info, ==, PK_INFO_ENUM_INSTALLED);
+
+	g_free (text);
+	g_object_unref (package);
+
+	/* merge details results */
+	pk_package_sack_get_details_async (sack, NULL, NULL, NULL, (GAsyncReadyCallback) pk_test_package_sack_details_cb, NULL);
+	_g_test_loop_run_with_timeout (5000);
+	egg_debug ("got details in %f", g_test_timer_elapsed ());
+
+	/* find package which is present */
+	package = pk_package_sack_find_by_id (sack, "powertop;1.8-1.fc8;i386;fedora");
+	g_assert (package != NULL);
+
+	/* check new url */
+	g_object_get (package,
+		      "url", &text,
+		      NULL);
+	g_assert_cmpstr (text, ==, "http://live.gnome.org/powertop");
+	g_object_unref (package);
+	g_free (text);
+
+	/* merge update detail results */
+	pk_package_sack_get_update_detail_async (sack, NULL, NULL, NULL, (GAsyncReadyCallback) pk_test_package_sack_update_detail_cb, NULL);
+	_g_test_loop_run_with_timeout (5000);
+	egg_debug ("got update detail in %f", g_test_timer_elapsed ());
+
+	/* find package which is present */
+	package = pk_package_sack_find_by_id (sack, "powertop;1.8-1.fc8;i386;fedora");
+	g_assert (package != NULL);
+
+	/* check new vendor url */
+	g_object_get (package,
+		      "update-vendor-url", &text,
+		      NULL);
+	g_assert_cmpstr (text, ==, "http://www.distro-update.org/page?moo;Bugfix release for powertop");
+
+	g_free (text);
+	g_object_unref (package);
+
+	/* chck size in bytes */
+	bytes = pk_package_sack_get_total_bytes (sack);
+	g_assert_cmpint (bytes, ==, 103424);
+
+	/* remove package */
+	ret = pk_package_sack_remove_package_by_id (sack, "powertop;1.8-1.fc8;i386;fedora");
+	g_assert (ret);
+
+	/* get size of package sack */
+	size = pk_package_sack_get_size (sack);
+	g_assert_cmpint (size, ==, 0);
+
+	/* remove already removed package */
+	ret = pk_package_sack_remove_package_by_id (sack, "powertop;1.8-1.fc8;i386;fedora");
+	g_assert (!ret);
+
+	/* remove by filter */
+	pk_package_sack_add_package_by_id (sack, "powertop;1.8-1.fc8;i386;fedora", NULL);
+	pk_package_sack_add_package_by_id (sack, "powertop-debuginfo;1.8-1.fc8;i386;fedora", NULL);
+	ret = pk_package_sack_remove_by_filter (sack, pk_test_package_sack_filter_cb, NULL);
+	g_assert (ret);
+
+	/* check all removed */
+	size = pk_package_sack_get_size (sack);
+	g_assert_cmpint (size, ==, 0);
+
+	g_object_unref (sack);
+}
+
+static void
+pk_test_progress_func (void)
+{
+	PkProgress *progress;
+
+	progress = pk_progress_new ();
+	g_assert (progress != NULL);
+
+	g_object_unref (progress);
+}
+
+static void
+pk_test_progress_bar (void)
+{
+	PkProgressBar *progress_bar;
+
+	progress_bar = pk_progress_bar_new ();
+	g_assert (progress_bar != NULL);
+
+	g_object_unref (progress_bar);
+}
+
+static void
+pk_test_results_func (void)
+{
+	gboolean ret;
+	PkResults *results;
+	PkExitEnum exit_enum;
+	GPtrArray *packages;
+	PkPackage *item;
+	PkInfoEnum info;
+	gchar *package_id;
+	gchar *summary;
+
+	/* get results */
+	results = pk_results_new ();
+	g_assert (results != NULL);
+
+	/* get exit code of unset results */
+	exit_enum = pk_results_get_exit_code (results);
+	g_assert_cmpint (exit_enum, ==, PK_EXIT_ENUM_UNKNOWN);
+
+	/* get package list of unset results */
+	packages = pk_results_get_package_array (results);
+	g_assert_cmpint (packages->len, ==, 0);
+	g_ptr_array_unref (packages);
+
+	/* set valid exit code */
+	ret = pk_results_set_exit_code (results, PK_EXIT_ENUM_CANCELLED);
+	g_assert (ret);
+
+	/* get exit code of set results */
+	exit_enum = pk_results_get_exit_code (results);
+	g_assert_cmpint (exit_enum, ==, PK_EXIT_ENUM_CANCELLED);
+
+	/* add package */
+	item = pk_package_new ();
+	g_object_set (item,
+		      "info", PK_INFO_ENUM_AVAILABLE,
+		      "package-id", "gnome-power-manager;0.1.2;i386;fedora",
+		      "summary", "Power manager for GNOME",
+		      NULL);
+	ret = pk_results_add_package (results, item);
+	g_object_unref (item);
+	g_assert (ret);
+
+	/* get package list of set results */
+	packages = pk_results_get_package_array (results);
+	g_assert_cmpint (packages->len, ==, 1);
+
+	/* check data */
+	item = g_ptr_array_index (packages, 0);
+	g_object_get (item,
+		      "info", &info,
+		      "package-id", &package_id,
+		      "summary", &summary,
+		      NULL);
+	g_assert_cmpint (info, ==, PK_INFO_ENUM_AVAILABLE);
+	g_assert_cmpstr ("gnome-power-manager;0.1.2;i386;fedora", ==, package_id);
+	g_assert_cmpstr ("Power manager for GNOME", ==, summary);
+	g_object_ref (item);
+	g_ptr_array_unref (packages);
+	g_free (package_id);
+	g_free (summary);
+
+	/* check ref */
+	g_object_get (item,
+		      "info", &info,
+		      "package-id", &package_id,
+		      "summary", &summary,
+		      NULL);
+	g_assert_cmpint (info, ==, PK_INFO_ENUM_AVAILABLE);
+	g_assert_cmpstr ("gnome-power-manager;0.1.2;i386;fedora", ==, package_id);
+	g_assert_cmpstr ("Power manager for GNOME", ==, summary);
+	g_object_unref (item);
+	g_free (package_id);
+	g_free (summary);
+
+	g_object_unref (results);
+}
+
+static void
+pk_test_service_pack_create_cb (GObject *object, GAsyncResult *res, gpointer user_data)
+{
+	PkServicePack *pack = PK_SERVICE_PACK (object);
+	GError *error = NULL;
+	gboolean ret;
+
+	/* get the results */
+	ret = pk_service_pack_generic_finish (pack, res, &error);
+	g_assert_no_error (error);
+	g_assert (ret);
+
+	_g_test_loop_quit ();
+}
+
+static void
+pk_test_service_pack_progress_cb (PkProgress *progress, PkProgressType type, gpointer user_data)
+{
+	PkStatusEnum status;
+	if (type == PK_PROGRESS_TYPE_STATUS) {
+		g_object_get (progress,
+		      "status", &status,
+		      NULL);
+		egg_debug ("now %s", pk_status_enum_to_string (status));
+	}
+}
+
+static void
+pk_test_service_pack_func (void)
+{
+	PkServicePack *pack;
+	gchar **package_ids;
+
+	pack = pk_service_pack_new ();
+	g_assert (pack != NULL);
+
+	/* install package */
+	package_ids = pk_package_ids_from_id ("glib2;2.14.0;i386;fedora");
+	pk_service_pack_create_for_package_ids_async (pack, "dave.servicepack", package_ids, NULL, NULL,
+		        (PkProgressCallback) pk_test_service_pack_progress_cb, NULL,
+		        (GAsyncReadyCallback) pk_test_service_pack_create_cb, NULL);
+	g_strfreev (package_ids);
+	_g_test_loop_run_with_timeout (150000);
+	egg_debug ("installed in %f", g_test_timer_elapsed ());
+
+	g_object_unref (pack);
+}
+
+static void
+pk_test_task_install_packages_cb (GObject *object, GAsyncResult *res, gpointer user_data)
+{
+	PkTask *task = PK_TASK (object);
+	GError *error = NULL;
+	PkResults *results;
+
+	/* get the results */
+	results = pk_task_generic_finish (task, res, &error);
+	g_assert (results == NULL);
+	g_assert_cmpstr (error->message, ==, "could not do untrusted question as no klass support");
+
+	g_error_free (error);
+	if (results != NULL)
+		g_object_unref (results);
+	_g_test_loop_quit ();
+}
+
+static void
+pk_test_task_progress_cb (PkProgress *progress, PkProgressType type, gpointer user_data)
+{
+	PkStatusEnum status;
+	if (type == PK_PROGRESS_TYPE_STATUS) {
+		g_object_get (progress,
+		      "status", &status,
+		      NULL);
+		egg_debug ("now %s", pk_status_enum_to_string (status));
+	}
+}
+
+static void
+pk_test_task_func (void)
+{
+	PkTask *task;
+	gchar **package_ids;
+
+	task = pk_task_new ();
+	g_assert (task != NULL);
+
+	/* install package */
+	package_ids = pk_package_ids_from_id ("glib2;2.14.0;i386;fedora");
+	pk_task_install_packages_async (task, package_ids, NULL,
+		        (PkProgressCallback) pk_test_task_progress_cb, NULL,
+		        (GAsyncReadyCallback) pk_test_task_install_packages_cb, NULL);
+	g_strfreev (package_ids);
+	_g_test_loop_run_with_timeout (150000);
+	egg_debug ("installed in %f", g_test_timer_elapsed ());
+
+	g_object_unref (task);
+}
+
+static void
+pk_test_task_text_install_packages_cb (GObject *object, GAsyncResult *res, gpointer user_data)
+{
+	PkTaskText *task = PK_TASK_TEXT (object);
+	GError *error = NULL;
+	PkResults *results;
+	PkExitEnum exit_enum;
+	GPtrArray *packages;
+
+	/* get the results */
+	results = pk_task_generic_finish (PK_TASK (task), res, &error);
+	g_assert_no_error (error);
+	g_assert (results != NULL);
+
+	exit_enum = pk_results_get_exit_code (results);
+	g_assert_cmpint (exit_enum, ==, PK_EXIT_ENUM_SUCCESS);
+
+	packages = pk_results_get_package_array (results);
+	g_assert (packages != NULL);
+	g_assert_cmpint (packages->len, ==, 4);
+
+	g_ptr_array_unref (packages);
+
+	egg_debug ("results exit enum = %s", pk_exit_enum_to_string (exit_enum));
+
+	if (results != NULL)
+		g_object_unref (results);
+	_g_test_loop_quit ();
+}
+
+static void
+pk_test_task_text_progress_cb (PkProgress *progress, PkProgressType type, gpointer user_data)
+{
+	PkStatusEnum status;
+	if (type == PK_PROGRESS_TYPE_STATUS) {
+		g_object_get (progress,
+		      "status", &status,
+		      NULL);
+		egg_debug ("now %s", pk_status_enum_to_string (status));
+	}
+}
+
+static void
+pk_test_task_text_func (void)
+{
+	PkTaskText *task;
+	gchar **package_ids;
+
+	task = pk_task_text_new ();
+	g_assert (task != NULL);
+
+	/* For testing, you will need to manually do:
+	pkcon repo-set-data dummy use-gpg 1
+	pkcon repo-set-data dummy use-eula 1
+	pkcon repo-set-data dummy use-media 1
+	*/
+
+	/* install package */
+	package_ids = pk_package_ids_from_id ("vips-doc;7.12.4-2.fc8;noarch;linva");
+	pk_task_install_packages_async (PK_TASK (task), package_ids, NULL,
+		        (PkProgressCallback) pk_test_task_text_progress_cb, NULL,
+		        (GAsyncReadyCallback) pk_test_task_text_install_packages_cb, NULL);
+	g_strfreev (package_ids);
+	_g_test_loop_run_with_timeout (150000);
+	egg_debug ("installed in %f", g_test_timer_elapsed ());
+
+	g_object_unref (task);
+}
+
+static void
+pk_test_task_wrapper_install_packages_cb (GObject *object, GAsyncResult *res, gpointer user_data)
+{
+	PkTaskWrapper *task = PK_TASK_WRAPPER (object);
+	GError *error = NULL;
+	PkResults *results;
+	PkExitEnum exit_enum;
+	GPtrArray *packages;
+
+	/* get the results */
+	results = pk_task_generic_finish (PK_TASK (task), res, &error);
+	g_assert_no_error (error);
+	g_assert (results != NULL);
+
+	exit_enum = pk_results_get_exit_code (results);
+	g_assert_cmpint (exit_enum, ==, PK_EXIT_ENUM_SUCCESS);
+
+	packages = pk_results_get_package_array (results);
+	g_assert (packages != NULL);
+	g_assert_cmpint (packages->len, ==, 4);
+
+	g_ptr_array_unref (packages);
+
+	egg_debug ("results exit enum = %s", pk_exit_enum_to_string (exit_enum));
+
+	if (results != NULL)
+		g_object_unref (results);
+	_g_test_loop_quit ();
+}
+
+static void
+pk_test_task_wrapper_progress_cb (PkProgress *progress, PkProgressType type, gpointer user_data)
+{
+	PkStatusEnum status;
+	if (type == PK_PROGRESS_TYPE_STATUS) {
+		g_object_get (progress,
+		      "status", &status,
+		      NULL);
+		egg_debug ("now %s", pk_status_enum_to_string (status));
+	}
+}
+
+static void
+pk_test_task_wrapper_func (void)
+{
+	PkTaskWrapper *task;
+	gchar **package_ids;
+
+	task = pk_task_wrapper_new ();
+	g_assert (task != NULL);
+
+	/* install package */
+	package_ids = pk_package_ids_from_id ("vips-doc;7.12.4-2.fc8;noarch;linva");
+	pk_task_install_packages_async (PK_TASK (task), package_ids, NULL,
+		        (PkProgressCallback) pk_test_task_wrapper_progress_cb, NULL,
+		        (GAsyncReadyCallback) pk_test_task_wrapper_install_packages_cb, NULL);
+	g_strfreev (package_ids);
+	_g_test_loop_run_with_timeout (150000);
+	egg_debug ("installed in %f", g_test_timer_elapsed ());
+
+	g_object_unref (task);
+}
+
+guint _added = 0;
+guint _removed = 0;
+//guint _refcount = 0;
+
+static void
+pk_test_transaction_list_resolve_cb (GObject *object, GAsyncResult *res, gpointer user_data)
+{
+	PkClient *client = PK_CLIENT (object);
+	GError *error = NULL;
+	PkResults *results = NULL;
+	PkExitEnum exit_enum;
+
+	/* get the results */
+	results = pk_client_generic_finish (client, res, &error);
+	g_assert_no_error (error);
+	g_assert (results != NULL);
+
+	exit_enum = pk_results_get_exit_code (results);
+	g_assert_cmpint (exit_enum, ==, PK_EXIT_ENUM_SUCCESS);
+
+	if (results != NULL)
+		g_object_unref (results);
+	if (--_refcount == 0)
+		_g_test_loop_quit ();
+}
+
+static void
+pk_test_transaction_list_added_cb (PkTransactionList *tlist, const gchar *tid, gpointer user_data)
+{
+	egg_debug ("added %s", tid);
+	_added++;
+}
+
+static void
+pk_test_transaction_list_removed_cb (PkTransactionList *tlist, const gchar *tid, gpointer user_data)
+{
+	egg_debug ("removed %s", tid);
+	_removed++;
+}
+
+static gboolean
+pk_transaction_list_delay_cb (gpointer user_data)
+{
+	_g_test_loop_quit ();
+	return FALSE;
+}
+
+static void
+pk_test_transaction_list_func (void)
+{
+	PkTransactionList *tlist;
+	PkClient *client;
+	gchar **package_ids;
+
+	/* get transaction_list object */
+	tlist = pk_transaction_list_new ();
+	g_assert (tlist != NULL);
+	g_signal_connect (tlist, "added",
+		  G_CALLBACK (pk_test_transaction_list_added_cb), NULL);
+	g_signal_connect (tlist, "removed",
+		  G_CALLBACK (pk_test_transaction_list_removed_cb), NULL);
+
+	/* get client */
+	client = pk_client_new ();
+	g_assert (client != NULL);
+
+	/* resolve package */
+	package_ids = pk_package_ids_from_string ("glib2;2.14.0;i386;fedora&powertop");
+	_refcount = 2;
+	pk_client_resolve_async (client, pk_bitfield_value (PK_FILTER_ENUM_INSTALLED), package_ids, NULL, NULL, NULL,
+		 (GAsyncReadyCallback) pk_test_transaction_list_resolve_cb, NULL);
+	pk_client_resolve_async (client, pk_bitfield_value (PK_FILTER_ENUM_NOT_INSTALLED), package_ids, NULL, NULL, NULL,
+		 (GAsyncReadyCallback) pk_test_transaction_list_resolve_cb, NULL);
+	g_strfreev (package_ids);
+	_g_test_loop_run_with_timeout (15000);
+	egg_debug ("resolved in %f", g_test_timer_elapsed ());
+
+	/* wait for remove */
+	g_timeout_add (100, (GSourceFunc) pk_transaction_list_delay_cb, NULL);
+	_g_test_loop_run_with_timeout (15000);
+	egg_debug ("resolved in %f", g_test_timer_elapsed ());
+
+	/* correct number of added signals */
+	g_assert_cmpint (_added, ==, 2);
+
+	/* correct number of removed signals */
+	g_assert_cmpint (_removed, ==, 2);
+
+	g_object_unref (tlist);
+	g_object_unref (client);
+}
+
+static void
+pk_test_package_func (void)
+{
+	gboolean ret;
+	PkPackage *package;
+	const gchar *id;
+	gchar *text;
+
+	/* get package */
+	package = pk_package_new ();
+	g_assert (package != NULL);
+
+	/* get id of unset package */
+	id = pk_package_get_id (package);
+	g_assert_cmpstr (id, ==, NULL);
+
+	/* get id of unset package */
+	g_object_get (package, "package-id", &text, NULL);
+	g_assert_cmpstr (text, ==, NULL);
+	g_free (text);
+
+	/* set invalid id */
+	ret = pk_package_set_id (package, "gnome-power-manager", NULL);
+	g_assert (!ret);
+
+	/* set invalid id (sections) */
+	ret = pk_package_set_id (package, "gnome-power-manager;0.1.2;i386", NULL);
+	g_assert (!ret);
+
+	/* set invalid name */
+	ret = pk_package_set_id (package, ";0.1.2;i386;fedora", NULL);
+	g_assert (!ret);
+
+	/* set valid name */
+	ret = pk_package_set_id (package, "gnome-power-manager;0.1.2;i386;fedora", NULL);
+	g_assert (ret);
+
+	/* get id of set package */
+	id = pk_package_get_id (package);
+	g_assert_cmpstr (id, ==, "gnome-power-manager;0.1.2;i386;fedora");
+
+	/* get name of set package */
+	g_object_get (package, "package-id", &text, NULL);
+	g_assert_cmpstr (text, ==, "gnome-power-manager;0.1.2;i386;fedora");
+	g_free (text);
+
+	g_object_unref (package);
+}
 
 int
 main (int argc, char **argv)
 {
-	EggTest *test;
-
 	g_type_init ();
-	test = egg_test_init ();
+
 	egg_debug_init (&argc, &argv);
+	g_test_init (&argc, &argv, NULL);
 
 	/* tests go here */
-	egg_string_test (test);
-	pk_common_test (test);
-	pk_enum_test (test);
-	pk_desktop_test (test);
-	pk_bitfield_test (test);
-	pk_package_id_test (test);
-	pk_package_ids_test (test);
-	pk_progress_test (test);
-	pk_results_test (test);
-	pk_package_test (test);
-	pk_control_test (test);
-	pk_transaction_list_test (test);
-	pk_client_test (test);
-	pk_catalog_test (test);
-	pk_package_sack_test (test);
-	pk_task_test (test);
-	pk_task_wrapper_test (test);
-	pk_task_text_test (test);
-	pk_console_test (test);
-
-	return (egg_test_finish (test));
+	g_test_add_func ("/packagekit-glib2/common", pk_test_common_func);
+	g_test_add_func ("/packagekit-glib2/enum", pk_test_enum_func);
+	g_test_add_func ("/packagekit-glib2/desktop", pk_test_desktop_func);
+	g_test_add_func ("/packagekit-glib2/bitfield", pk_test_bitfield_func);
+	g_test_add_func ("/packagekit-glib2/package-id", pk_test_package_id_func);
+	g_test_add_func ("/packagekit-glib2/package-ids", pk_test_package_ids_func);
+	g_test_add_func ("/packagekit-glib2/progress", pk_test_progress_func);
+	g_test_add_func ("/packagekit-glib2/results", pk_test_results_func);
+	g_test_add_func ("/packagekit-glib2/package", pk_test_package_func);
+	g_test_add_func ("/packagekit-glib2/control", pk_test_control_func);
+	g_test_add_func ("/packagekit-glib2/transaction-list", pk_test_transaction_list_func);
+	g_test_add_func ("/packagekit-glib2/client", pk_test_client_func);
+	g_test_add_func ("/packagekit-glib2/catalog", pk_test_catalog_func);
+	g_test_add_func ("/packagekit-glib2/package-sack", pk_test_package_sack_func);
+	g_test_add_func ("/packagekit-glib2/task", pk_test_task_func);
+	g_test_add_func ("/packagekit-glib2/task-wrapper", pk_test_task_wrapper_func);
+	g_test_add_func ("/packagekit-glib2/task-text", pk_test_task_text_func);
+	g_test_add_func ("/packagekit-glib2/console", pk_test_console_func);
+	g_test_add_func ("/packagekit-glib2/progress-bar", pk_test_progress_bar);
+	g_test_add_func ("/packagekit-glib2/service-pack", pk_test_service_pack_func);
+
+	return g_test_run ();
 }
 
diff --git a/lib/packagekit-glib2/pk-service-pack.c b/lib/packagekit-glib2/pk-service-pack.c
index 110e603..b2ee394 100644
--- a/lib/packagekit-glib2/pk-service-pack.c
+++ b/lib/packagekit-glib2/pk-service-pack.c
@@ -1098,76 +1098,3 @@ pk_service_pack_new (void)
 	pack = g_object_new (PK_TYPE_SERVICE_PACK, NULL);
 	return PK_SERVICE_PACK (pack);
 }
-
-/***************************************************************************
- ***                          MAKE CHECK TESTS                           ***
- ***************************************************************************/
-#ifdef EGG_TEST
-#include "egg-test.h"
-
-static void
-pk_service_pack_test_create_cb (GObject *object, GAsyncResult *res, EggTest *test)
-{
-	PkServicePack *pack = PK_SERVICE_PACK (object);
-	GError *error = NULL;
-	gboolean ret;
-
-	/* get the results */
-	ret = pk_service_pack_generic_finish (pack, res, &error);
-	if (!ret) {
-		egg_test_failed (test, "failed to create pack: %s", error->message);
-		g_error_free (error);
-		goto out;
-	}
-out:
-	egg_test_loop_quit (test);
-}
-
-static void
-pk_service_pack_test_progress_cb (PkProgress *progress, PkProgressType type, EggTest *test)
-{
-	PkStatusEnum status;
-	if (type == PK_PROGRESS_TYPE_STATUS) {
-		g_object_get (progress,
-			      "status", &status,
-			      NULL);
-		egg_debug ("now %s", pk_status_enum_to_string (status));
-	}
-}
-
-void
-pk_service_pack_test (gpointer user_data)
-{
-	EggTest *test = (EggTest *) user_data;
-	PkServicePack *pack;
-	gchar **package_ids;
-
-	if (!egg_test_start (test, "PkServicePack"))
-		return;
-
-	/************************************************************/
-	egg_test_title (test, "get an instance");
-	pack = pk_service_pack_new ();
-	egg_test_assert (test, pack != NULL);
-
-	/************************************************************/
-	egg_test_title (test, "get service_pack");
-	pack = pk_service_pack_new ();
-	egg_test_assert (test, pack != NULL);
-
-	/************************************************************/
-	egg_test_title (test, "install package");
-	package_ids = pk_package_ids_from_id ("glib2;2.14.0;i386;fedora");
-	pk_service_pack_create_for_package_ids_async (pack, "dave.servicepack", package_ids, NULL, NULL,
-				        (PkProgressCallback) pk_service_pack_test_progress_cb, test,
-				        (GAsyncReadyCallback) pk_service_pack_test_create_cb, test);
-	g_strfreev (package_ids);
-	egg_test_loop_wait (test, 150000);
-	egg_test_success (test, "installed in %i", egg_test_elapsed (test));
-
-	g_object_unref (pack);
-
-	egg_test_end (test);
-}
-#endif
-
diff --git a/lib/packagekit-glib2/pk-task-text.c b/lib/packagekit-glib2/pk-task-text.c
index b576d5e..4fbec23 100644
--- a/lib/packagekit-glib2/pk-task-text.c
+++ b/lib/packagekit-glib2/pk-task-text.c
@@ -445,97 +445,3 @@ pk_task_text_new (void)
 	task = g_object_new (PK_TYPE_TASK_TEXT, NULL);
 	return PK_TASK_TEXT (task);
 }
-
-/***************************************************************************
- ***                          MAKE CHECK TESTS                           ***
- ***************************************************************************/
-#ifdef EGG_TEST
-#include "egg-test.h"
-
-#include <packagekit-glib2/pk-package-ids.h>
-
-static void
-pk_task_text_test_install_packages_cb (GObject *object, GAsyncResult *res, EggTest *test)
-{
-	PkTaskText *task = PK_TASK_TEXT (object);
-	GError *error = NULL;
-	PkResults *results;
-	PkExitEnum exit_enum;
-	GPtrArray *packages;
-
-	/* get the results */
-	results = pk_task_generic_finish (PK_TASK (task), res, &error);
-	if (results == NULL) {
-		egg_test_failed (test, "failed to resolve: %s", error->message);
-		g_error_free (error);
-		goto out;
-	}
-
-	exit_enum = pk_results_get_exit_code (results);
-	if (exit_enum != PK_EXIT_ENUM_SUCCESS)
-		egg_test_failed (test, "failed to resolve success: %s", pk_exit_enum_to_string (exit_enum));
-
-	packages = pk_results_get_package_array (results);
-	if (packages == NULL)
-		egg_test_failed (test, "no packages!");
-
-	if (packages->len != 4)
-		egg_test_failed (test, "invalid number of packages: %i", packages->len);
-
-	g_ptr_array_unref (packages);
-
-	egg_debug ("results exit enum = %s", pk_exit_enum_to_string (exit_enum));
-out:
-	if (results != NULL)
-		g_object_unref (results);
-	egg_test_loop_quit (test);
-}
-
-static void
-pk_task_text_test_progress_cb (PkProgress *progress, PkProgressType type, EggTest *test)
-{
-	PkStatusEnum status;
-	if (type == PK_PROGRESS_TYPE_STATUS) {
-		g_object_get (progress,
-			      "status", &status,
-			      NULL);
-		egg_debug ("now %s", pk_status_enum_to_string (status));
-	}
-}
-
-void
-pk_task_text_test (gpointer user_data)
-{
-	EggTest *test = (EggTest *) user_data;
-	PkTaskText *task;
-	gchar **package_ids;
-
-	if (!egg_test_start (test, "PkTaskText"))
-		return;
-
-	/************************************************************/
-	egg_test_title (test, "get task_text");
-	task = pk_task_text_new ();
-	egg_test_assert (test, task != NULL);
-
-	/* For testing, you will need to manually do:
-	pkcon repo-set-data dummy use-gpg 1
-	pkcon repo-set-data dummy use-eula 1
-	pkcon repo-set-data dummy use-media 1
-	*/
-
-	/************************************************************/
-	egg_test_title (test, "install package");
-	package_ids = pk_package_ids_from_id ("vips-doc;7.12.4-2.fc8;noarch;linva");
-	pk_task_install_packages_async (PK_TASK (task), package_ids, NULL,
-				        (PkProgressCallback) pk_task_text_test_progress_cb, test,
-				        (GAsyncReadyCallback) pk_task_text_test_install_packages_cb, test);
-	g_strfreev (package_ids);
-	egg_test_loop_wait (test, 150000);
-	egg_test_success (test, "installed in %i", egg_test_elapsed (test));
-
-	g_object_unref (task);
-	egg_test_end (test);
-}
-#endif
-
diff --git a/lib/packagekit-glib2/pk-task-wrapper.c b/lib/packagekit-glib2/pk-task-wrapper.c
index 4bfbcb2..91bbb60 100644
--- a/lib/packagekit-glib2/pk-task-wrapper.c
+++ b/lib/packagekit-glib2/pk-task-wrapper.c
@@ -206,90 +206,3 @@ pk_task_wrapper_new (void)
 	task = g_object_new (PK_TYPE_TASK_WRAPPER, NULL);
 	return PK_TASK_WRAPPER (task);
 }
-
-/***************************************************************************
- ***                          MAKE CHECK TESTS                           ***
- ***************************************************************************/
-#ifdef EGG_TEST
-#include <packagekit-glib2/pk-package-ids.h>
-#include "egg-test.h"
-
-static void
-pk_task_wrapper_test_install_packages_cb (GObject *object, GAsyncResult *res, EggTest *test)
-{
-	PkTaskWrapper *task = PK_TASK_WRAPPER (object);
-	GError *error = NULL;
-	PkResults *results;
-	PkExitEnum exit_enum;
-	GPtrArray *packages;
-
-	/* get the results */
-	results = pk_task_generic_finish (PK_TASK (task), res, &error);
-	if (results == NULL) {
-		egg_test_failed (test, "failed to install: %s", error->message);
-		g_error_free (error);
-		goto out;
-	}
-
-	exit_enum = pk_results_get_exit_code (results);
-	if (exit_enum != PK_EXIT_ENUM_SUCCESS)
-		egg_test_failed (test, "failed to install packages: %s", pk_exit_enum_to_string (exit_enum));
-
-	packages = pk_results_get_package_array (results);
-	if (packages == NULL)
-		egg_test_failed (test, "no packages!");
-
-	if (packages->len != 4)
-		egg_test_failed (test, "invalid number of packages: %i", packages->len);
-
-	g_ptr_array_unref (packages);
-
-	egg_debug ("results exit enum = %s", pk_exit_enum_to_string (exit_enum));
-out:
-	if (results != NULL)
-		g_object_unref (results);
-	egg_test_loop_quit (test);
-}
-
-static void
-pk_task_wrapper_test_progress_cb (PkProgress *progress, PkProgressType type, EggTest *test)
-{
-	PkStatusEnum status;
-	if (type == PK_PROGRESS_TYPE_STATUS) {
-		g_object_get (progress,
-			      "status", &status,
-			      NULL);
-		egg_debug ("now %s", pk_status_enum_to_string (status));
-	}
-}
-
-void
-pk_task_wrapper_test (gpointer user_data)
-{
-	EggTest *test = (EggTest *) user_data;
-	PkTaskWrapper *task;
-	gchar **package_ids;
-
-	if (!egg_test_start (test, "PkTaskWrapper"))
-		return;
-
-	/************************************************************/
-	egg_test_title (test, "get task_wrapper");
-	task = pk_task_wrapper_new ();
-	egg_test_assert (test, task != NULL);
-
-	/************************************************************/
-	egg_test_title (test, "install package");
-	package_ids = pk_package_ids_from_id ("vips-doc;7.12.4-2.fc8;noarch;linva");
-	pk_task_install_packages_async (PK_TASK (task), package_ids, NULL,
-				        (PkProgressCallback) pk_task_wrapper_test_progress_cb, test,
-				        (GAsyncReadyCallback) pk_task_wrapper_test_install_packages_cb, test);
-	g_strfreev (package_ids);
-	egg_test_loop_wait (test, 150000);
-	egg_test_success (test, "installed in %i", egg_test_elapsed (test));
-
-	g_object_unref (task);
-	egg_test_end (test);
-}
-#endif
-
diff --git a/lib/packagekit-glib2/pk-task.c b/lib/packagekit-glib2/pk-task.c
index 2b60e43..e4e8c6a 100644
--- a/lib/packagekit-glib2/pk-task.c
+++ b/lib/packagekit-glib2/pk-task.c
@@ -2257,80 +2257,3 @@ pk_task_new (void)
 	task = g_object_new (PK_TYPE_TASK, NULL);
 	return PK_TASK (task);
 }
-
-/***************************************************************************
- ***                          MAKE CHECK TESTS                           ***
- ***************************************************************************/
-#ifdef EGG_TEST
-#include <packagekit-glib2/pk-package-ids.h>
-#include "egg-test.h"
-
-static void
-pk_task_test_install_packages_cb (GObject *object, GAsyncResult *res, EggTest *test)
-{
-	PkTask *task = PK_TASK (object);
-	GError *error = NULL;
-	PkResults *results;
-
-	/* get the results */
-	results = pk_task_generic_finish (task, res, &error);
-	if (results != NULL) {
-		egg_test_failed (test, "finish should fail!");
-		goto out;
-	}
-
-	/* check error */
-	if (g_strcmp0 (error->message, "could not do untrusted question as no klass support") != 0) {
-		egg_test_failed (test, "wrong message: %s", error->message);
-		g_error_free (error);
-		goto out;
-	}
-out:
-	g_error_free (error);
-	if (results != NULL)
-		g_object_unref (results);
-	egg_test_loop_quit (test);
-}
-
-static void
-pk_task_test_progress_cb (PkProgress *progress, PkProgressType type, EggTest *test)
-{
-	PkStatusEnum status;
-	if (type == PK_PROGRESS_TYPE_STATUS) {
-		g_object_get (progress,
-			      "status", &status,
-			      NULL);
-		egg_debug ("now %s", pk_status_enum_to_string (status));
-	}
-}
-
-void
-pk_task_test (gpointer user_data)
-{
-	EggTest *test = (EggTest *) user_data;
-	PkTask *task;
-	gchar **package_ids;
-
-	if (!egg_test_start (test, "PkTask"))
-		return;
-
-	/************************************************************/
-	egg_test_title (test, "get task");
-	task = pk_task_new ();
-	egg_test_assert (test, task != NULL);
-
-	/************************************************************/
-	egg_test_title (test, "install package");
-	package_ids = pk_package_ids_from_id ("glib2;2.14.0;i386;fedora");
-	pk_task_install_packages_async (task, package_ids, NULL,
-				        (PkProgressCallback) pk_task_test_progress_cb, test,
-				        (GAsyncReadyCallback) pk_task_test_install_packages_cb, test);
-	g_strfreev (package_ids);
-	egg_test_loop_wait (test, 150000);
-	egg_test_success (test, "installed in %i", egg_test_elapsed (test));
-
-	g_object_unref (task);
-	egg_test_end (test);
-}
-#endif
-
diff --git a/lib/packagekit-glib2/pk-transaction-list.c b/lib/packagekit-glib2/pk-transaction-list.c
index f6b14d7..0f8eec7 100644
--- a/lib/packagekit-glib2/pk-transaction-list.c
+++ b/lib/packagekit-glib2/pk-transaction-list.c
@@ -302,121 +302,3 @@ pk_transaction_list_new (void)
 	tlist = g_object_new (PK_TYPE_TRANSACTION_LIST, NULL);
 	return PK_TRANSACTION_LIST (tlist);
 }
-
-/***************************************************************************
- ***                          MAKE CHECK TESTS                           ***
- ***************************************************************************/
-#ifdef EGG_TEST
-#include "egg-test.h"
-
-#include <packagekit-glib2/pk-client.h>
-#include <packagekit-glib2/pk-package-ids.h>
-
-guint _added = 0;
-guint _removed = 0;
-guint _refcount = 0;
-
-static void
-pk_transaction_list_test_resolve_cb (GObject *object, GAsyncResult *res, EggTest *test)
-{
-	PkClient *client = PK_CLIENT (object);
-	GError *error = NULL;
-	PkResults *results = NULL;
-	PkExitEnum exit_enum;
-
-	/* get the results */
-	results = pk_client_generic_finish (client, res, &error);
-	if (results == NULL) {
-		egg_test_failed (test, "failed to resolve: %s", error->message);
-		g_error_free (error);
-		goto out;
-	}
-
-	exit_enum = pk_results_get_exit_code (results);
-	if (exit_enum != PK_EXIT_ENUM_SUCCESS)
-		egg_test_failed (test, "failed to resolve success: %s", pk_exit_enum_to_string (exit_enum));
-out:
-	if (results != NULL)
-		g_object_unref (results);
-	if (--_refcount == 0)
-		egg_test_loop_quit (test);
-}
-
-static void
-pk_transaction_list_test_added_cb (PkTransactionList *tlist, const gchar *tid, EggTest *test)
-{
-	egg_debug ("added %s", tid);
-	_added++;
-}
-
-static void
-pk_transaction_list_test_removed_cb (PkTransactionList *tlist, const gchar *tid, EggTest *test)
-{
-	egg_debug ("removed %s", tid);
-	_removed++;
-}
-
-static gboolean
-pk_transaction_list_delay_cb (EggTest *test)
-{
-	egg_test_loop_quit (test);
-	return FALSE;
-}
-
-void
-pk_transaction_list_test (gpointer user_data)
-{
-	EggTest *test = (EggTest *) user_data;
-	PkTransactionList *tlist;
-	PkClient *client;
-	gchar **package_ids;
-
-	if (!egg_test_start (test, "PkTransactionList"))
-		return;
-
-	/************************************************************/
-	egg_test_title (test, "get transaction_list object");
-	tlist = pk_transaction_list_new ();
-	egg_test_assert (test, tlist != NULL);
-	g_signal_connect (tlist, "added",
-			  G_CALLBACK (pk_transaction_list_test_added_cb), test);
-	g_signal_connect (tlist, "removed",
-			  G_CALLBACK (pk_transaction_list_test_removed_cb), test);
-
-	/************************************************************/
-	egg_test_title (test, "get client");
-	client = pk_client_new ();
-	egg_test_assert (test, client != NULL);
-
-	/************************************************************/
-	egg_test_title (test, "resolve package");
-	package_ids = pk_package_ids_from_string ("glib2;2.14.0;i386;fedora&powertop");
-	_refcount = 2;
-	pk_client_resolve_async (client, pk_bitfield_value (PK_FILTER_ENUM_INSTALLED), package_ids, NULL, NULL, NULL,
-				 (GAsyncReadyCallback) pk_transaction_list_test_resolve_cb, test);
-	pk_client_resolve_async (client, pk_bitfield_value (PK_FILTER_ENUM_NOT_INSTALLED), package_ids, NULL, NULL, NULL,
-				 (GAsyncReadyCallback) pk_transaction_list_test_resolve_cb, test);
-	g_strfreev (package_ids);
-	egg_test_loop_wait (test, 15000);
-	egg_test_success (test, "resolved in %i", egg_test_elapsed (test));
-
-	/************************************************************/
-	egg_test_title (test, "wait for remove");
-	g_timeout_add (100, (GSourceFunc) pk_transaction_list_delay_cb, test);
-	egg_test_loop_wait (test, 15000);
-	egg_test_success (test, "resolved in %i", egg_test_elapsed (test));
-
-	/************************************************************/
-	egg_test_title (test, "correct number of added signals");
-	egg_test_assert (test, (_added == 2));
-
-	/************************************************************/
-	egg_test_title (test, "correct number of removed signals");
-	egg_test_assert (test, (_removed == 2));
-
-	g_object_unref (tlist);
-	g_object_unref (client);
-	egg_test_end (test);
-}
-#endif
-
diff --git a/src/Makefile.am b/src/Makefile.am
index 50215ae..501a3a0 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -28,6 +28,7 @@ INCLUDES =						\
 	-DPK_DATA=\"$(pkgdatadir)\"			\
 	-DLOCALSTATEDIR=\""$(localstatedir)"\"		\
 	-DPK_DB_DIR=\""$(PK_DB_DIR)"\"			\
+	-DTESTDATADIR=\""$(top_srcdir)/data/tests"\"	\
 	-DPK_COMPILATION				\
 	-DPOLKIT_LOCAL_I_KNOW_API_IS_SUBJECT_TO_CHANGE	\
 	-I$(top_srcdir)/lib				\
@@ -209,8 +210,6 @@ check_PROGRAMS =					\
 
 pk_self_test_SOURCES =					\
 	pk-self-test.c					\
-	egg-test.h					\
-	egg-test.c					\
 	$(shared_SOURCES)				\
 	$(NULL)
 
diff --git a/src/egg-string.c b/src/egg-string.c
index f04f94c..73eb1f8 100644
--- a/src/egg-string.c
+++ b/src/egg-string.c
@@ -231,224 +231,3 @@ egg_strreplace (const gchar *text, const gchar *find, const gchar *replace)
 	return retval;
 }
 
-/***************************************************************************
- ***                          MAKE CHECK TESTS                           ***
- ***************************************************************************/
-#ifdef EGG_TEST
-#include "egg-test.h"
-
-void
-egg_string_test (gpointer user_data)
-{
-	EggTest *test = (EggTest *) user_data;
-	gboolean ret;
-	gchar *text_safe;
-	const gchar *temp;
-	guint length;
-	gint value;
-	guint uvalue;
-	gchar **id1;
-	gchar **id2;
-
-	if (!egg_test_start (test, "EggString"))
-		return;
-
-	/************************************************************
-	 ****************    String array equal    ******************
-	 ************************************************************/
-	egg_test_title (test, "egg_strvequal same argument");
-	id1 = g_strsplit ("the quick brown fox", " ", 0);
-	if (egg_strvequal (id1, id1))
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "incorrect ret when both same");
-	g_strfreev (id1);
-
-	/************************************************************/
-	egg_test_title (test, "egg_strvequal same");
-	id1 = g_strsplit ("the quick brown fox", " ", 0);
-	id2 = g_strsplit ("the quick brown fox", " ", 0);
-	if (egg_strvequal (id1, id2))
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "incorrect ret when both same");
-	g_strfreev (id1);
-	g_strfreev (id2);
-
-	/************************************************************/
-	egg_test_title (test, "egg_strvequal different lengths");
-	id1 = g_strsplit ("the quick brown", " ", 0);
-	id2 = g_strsplit ("the quick brown fox", " ", 0);
-	if (!egg_strvequal (id1, id2))
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "incorrect ret when both same");
-	g_strfreev (id1);
-	g_strfreev (id2);
-
-	/************************************************************/
-	egg_test_title (test, "egg_strvequal different");
-	id1 = g_strsplit ("the quick brown fox", " ", 0);
-	id2 = g_strsplit ("richard hughes maintainer dude", " ", 0);
-	if (!egg_strvequal (id1, id2))
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "same when different");
-	g_strfreev (id1);
-	g_strfreev (id2);
-
-	/************************************************************
-	 ****************          Zero            ******************
-	 ************************************************************/
-	temp = NULL;
-	egg_test_title (test, "test strzero (null)");
-	ret = egg_strzero (NULL);
-	if (ret)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "failed null");
-
-	/************************************************************/
-	egg_test_title (test, "test strzero (null first char)");
-	ret = egg_strzero ("");
-	if (ret)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "failed null");
-
-	/************************************************************/
-	egg_test_title (test, "test strzero (long string)");
-	ret = egg_strzero ("Richard");
-	if (!ret)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "zero length word!");
-
-	/************************************************************/
-	egg_test_title (test, "id strcmp pass");
-	ret = (g_strcmp0 ("moo;0.0.1;i386;fedora", "moo;0.0.1;i386;fedora") == 0);
-	egg_test_assert (test, ret);
-
-	/************************************************************/
-	egg_test_title (test, "id strcmp fail");
-	ret = (g_strcmp0 ("moo;0.0.1;i386;fedora", "moo;0.0.2;i386;fedora") == 0);
-	egg_test_assert (test, !ret);
-
-	/************************************************************
-	 ****************          strlen          ******************
-	 ************************************************************/
-	egg_test_title (test, "strlen bigger");
-	length = egg_strlen ("123456789", 20);
-	if (length == 9)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "failed the strlen %i", length);
-
-	/************************************************************/
-	egg_test_title (test, "strlen smaller");
-	length = egg_strlen ("123456789", 5);
-	if (length == 5)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "failed the strlen %i", length);
-
-	/************************************************************/
-	egg_test_title (test, "strlen correct");
-	length = egg_strlen ("123456789", 9);
-	if (length == 9)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "failed the strlen %i", length);
-
-	/************************************************************
-	 ****************         Replace          ******************
-	 ************************************************************/
-	egg_test_title (test, "replace start");
-	text_safe = egg_strreplace ("richard\nhughes", "r", "e");
-	if (g_strcmp0 (text_safe, "eichaed\nhughes") == 0)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "failed the replace '%s'", text_safe);
-	g_free (text_safe);
-
-	/************************************************************/
-	egg_test_title (test, "replace none");
-	text_safe = egg_strreplace ("richard\nhughes", "dave", "e");
-	if (g_strcmp0 (text_safe, "richard\nhughes") == 0)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "failed the replace '%s'", text_safe);
-	g_free (text_safe);
-
-	/************************************************************/
-	egg_test_title (test, "replace end");
-	text_safe = egg_strreplace ("richard\nhughes", "s", "e");
-	if (g_strcmp0 (text_safe, "richard\nhughee") == 0)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "failed the replace '%s'", text_safe);
-	g_free (text_safe);
-
-	/************************************************************/
-	egg_test_title (test, "replace unicode");
-	text_safe = egg_strreplace ("richard\n- hughes", "\n- ", "\n• ");
-	if (g_strcmp0 (text_safe, "richard\n• hughes") == 0)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "failed the replace '%s'", text_safe);
-	g_free (text_safe);
-
-	/************************************************************
-	 **************        Convert numbers       ****************
-	 ************************************************************/
-	egg_test_title (test, "convert valid number");
-	ret = egg_strtoint ("234", &value);
-	if (ret && value == 234)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "value is %i", value);
-
-	/************************************************************/
-	egg_test_title (test, "convert negative valid number");
-	ret = egg_strtoint ("-234", &value);
-	if (ret && value == -234)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "value is %i", value);
-
-	/************************************************************/
-	egg_test_title (test, "don't convert invalid number");
-	ret = egg_strtoint ("dave", &value);
-	if (!ret)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "value is %i", value);
-
-	/************************************************************/
-	egg_test_title (test, "convert NULL to a number");
-	ret = egg_strtouint (NULL, &uvalue);
-	if (!ret)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "value is %i", uvalue);
-
-	/************************************************************/
-	egg_test_title (test, "convert valid uint number");
-	ret = egg_strtouint ("234", &uvalue);
-	if (ret && uvalue == 234)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "value is %i", uvalue);
-
-	/************************************************************/
-	egg_test_title (test, "convert invalid uint number");
-	ret = egg_strtouint ("-234", &uvalue);
-	if (ret == FALSE)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "value is %i", uvalue);
-
-	egg_test_end (test);
-}
-#endif
-
diff --git a/src/egg-test.c b/src/egg-test.c
deleted file mode 100644
index 99c0fe8..0000000
--- a/src/egg-test.c
+++ /dev/null
@@ -1,360 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2007-2008 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 <stdlib.h>
-#include <glib.h>
-#include <string.h>
-#include <glib/gprintf.h>
-
-#include "egg-test.h"
-
-struct EggTest {
-	guint		 total;
-	guint		 succeeded;
-	gboolean	 started;
-	gboolean	 titled;
-	gchar		*type;
-	GTimer		*timer;
-	GMainLoop	*loop;
-	guint		 hang_loop_id;
-	gpointer	 user_data;
-};
-
-/**
- * egg_test_init:
- **/
-EggTest *
-egg_test_init ()
-{
-	EggTest *test;
-	test = g_new (EggTest, 1);
-	test->total = 0;
-	test->succeeded = 0;
-	test->type = NULL;
-	test->started = FALSE;
-	test->titled = FALSE;
-	test->timer = g_timer_new ();
-	test->loop = g_main_loop_new (NULL, FALSE);
-	test->hang_loop_id = 0;
-	return test;
-}
-
-/**
- * egg_test_loop_quit:
- **/
-void
-egg_test_loop_quit (EggTest *test)
-{
-	/* disable the loop watch */
-	if (test->hang_loop_id != 0) {
-		g_source_remove (test->hang_loop_id);
-		test->hang_loop_id = 0;
-	}
-	g_main_loop_quit (test->loop);
-}
-
-/**
- * egg_test_hang_check:
- **/
-static gboolean
-egg_test_hang_check (gpointer data)
-{
-	EggTest *test = (EggTest *) data;
-	g_main_loop_quit (test->loop);
-	return FALSE;
-}
-
-/**
- * egg_test_loop_wait:
- **/
-void
-egg_test_loop_wait (EggTest *test, guint timeout)
-{
-	test->hang_loop_id = g_timeout_add (timeout, egg_test_hang_check, test);
-#if GLIB_CHECK_VERSION(2,25,8)
-	g_source_set_name_by_id (test->hang_loop_id, "[EggTest] egg-test-hang");
-#endif
-	g_main_loop_run (test->loop);
-}
-
-/**
- * egg_test_loop_check:
- **/
-void
-egg_test_loop_check (EggTest *test)
-{
-	guint elapsed = egg_test_elapsed (test);
-	egg_test_title (test, "did we timeout out of the loop");
-	if (test->hang_loop_id == 0) {
-		egg_test_success (test, "loop blocked for %ims", elapsed);
-	} else {
-		egg_test_failed (test, "hangcheck saved us after %ims", elapsed);
-	}
-}
-
-/**
- * egg_test_set_user_data:
- **/
-void
-egg_test_set_user_data (EggTest *test, gpointer user_data)
-{
-	test->user_data = user_data;
-}
-
-/**
- * egg_test_get_user_data:
- **/
-gpointer
-egg_test_get_user_data (EggTest *test)
-{
-	return test->user_data;
-}
-
-/**
- * egg_test_finish:
- **/
-gint
-egg_test_finish (EggTest *test)
-{
-	gint retval;
-	g_print ("test passes (%u/%u) : ", test->succeeded, test->total);
-	if (test->succeeded == test->total) {
-		g_print ("ALL OKAY\n");
-		retval = 0;
-	} else {
-		g_print ("%u FAILURE(S)\n", test->total - test->succeeded);
-		retval = 1;
-	}
-
-	g_timer_destroy (test->timer);
-	g_main_loop_unref (test->loop);
-	g_free (test);
-
-	return retval;
-}
-
-/**
- * egg_test_elapsed:
- *
- * Returns: time in ms
- **/
-guint
-egg_test_elapsed (EggTest *test)
-{
-	gdouble time_s;
-	time_s = g_timer_elapsed (test->timer, NULL);
-	return (guint) (time_s * 1000.0f);
-}
-
-/**
- * egg_test_start:
- **/
-gboolean
-egg_test_start (EggTest *test, const gchar *name)
-{
-	if (test->started) {
-		g_print ("Not ended test! Cannot start!\n");
-		exit (1);
-	}
-	test->type = g_strdup (name);
-	test->started = TRUE;
-	return TRUE;
-}
-
-/**
- * egg_test_end:
- **/
-void
-egg_test_end (EggTest *test)
-{
-	if (test->started == FALSE) {
-		g_print ("Not started test! Cannot finish!\n");
-		exit (1);
-	}
-
-	/* disable hang check */
-	if (test->hang_loop_id != 0) {
-		g_source_remove (test->hang_loop_id);
-		test->hang_loop_id = 0;
-	}
-
-	/* remove all the test callbacks */
-	while (g_source_remove_by_user_data (test))
-		g_print ("WARNING: removed callback for test module");
-
-	/* check we don't have any pending iterations */
-	if (g_main_context_pending (NULL)) {
-		g_print ("WARNING: Pending event in context! Running to completion... ");
-		while (g_main_context_pending (NULL))
-			g_main_context_iteration (NULL, TRUE);
-		g_print ("Done!\n");
-	}
-
-	test->started = FALSE;
-	g_free (test->type);
-}
-
-/**
- * egg_test_title:
- **/
-void
-egg_test_title (EggTest *test, const gchar *format, ...)
-{
-	va_list args;
-	gchar *va_args_buffer = NULL;
-
-	/* already titled? */
-	if (test->titled) {
-		g_print ("Already titled!\n");
-		exit (1);
-	}
-
-	/* reset the value egg_test_elapsed replies with */
-	g_timer_reset (test->timer);
-
-	va_start (args, format);
-	g_vasprintf (&va_args_buffer, format, args);
-	va_end (args);
-	g_print ("> check #%u\t%s: \t%s...", test->total+1, test->type, va_args_buffer);
-	g_free (va_args_buffer);
-
-	test->titled = TRUE;
-	test->total++;
-}
-
-/**
- * egg_test_success:
- **/
-void
-egg_test_success (EggTest *test, const gchar *format, ...)
-{
-	va_list args;
-	gchar *va_args_buffer = NULL;
-
-	/* not titled? */
-	if (!test->titled) {
-		g_print ("Not titled!\n");
-		exit (1);
-	}
-	if (format == NULL) {
-		g_print ("...OK\n");
-		goto finish;
-	}
-	va_start (args, format);
-	g_vasprintf (&va_args_buffer, format, args);
-	va_end (args);
-	g_print ("...OK [%s]\n", va_args_buffer);
-	g_free (va_args_buffer);
-finish:
-	test->titled = FALSE;
-	test->succeeded++;
-}
-
-/**
- * egg_test_failed:
- **/
-void
-egg_test_failed (EggTest *test, const gchar *format, ...)
-{
-	va_list args;
-	gchar *va_args_buffer = NULL;
-
-	/* not titled? */
-	if (!test->titled) {
-		g_print ("Not titled!\n");
-		exit (1);
-	}
-	if (format == NULL) {
-		g_print ("FAILED\n");
-		goto failed;
-	}
-	va_start (args, format);
-	g_vasprintf (&va_args_buffer, format, args);
-	va_end (args);
-	g_print ("FAILED [%s]\n", va_args_buffer);
-	g_free (va_args_buffer);
-failed:
-	exit (1);
-}
-
-/**
- * egg_test_assert:
- **/
-void
-egg_test_assert (EggTest *test, gboolean value)
-{
-	if (value)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, NULL);
-}
-
-/**
- * egg_test_title_assert:
- **/
-void
-egg_test_title_assert (EggTest *test, const gchar *text, gboolean value)
-{
-	egg_test_title (test, "%s", text);
-	if (value)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, NULL);
-}
-
-/**
- * egg_test_get_data_file:
- **/
-gchar *
-egg_test_get_data_file (const gchar *filename)
-{
-	gboolean ret;
-	gchar *full;
-
-	/* check to see if we are being run in the build root */
-	full = g_build_filename ("..", "data", "tests", filename, NULL);
-	ret = g_file_test (full, G_FILE_TEST_EXISTS);
-	if (ret)
-		return full;
-	g_free (full);
-
-	/* check to see if we are being run in the build root */
-	full = g_build_filename ("..", "..", "data", "tests", filename, NULL);
-	ret = g_file_test (full, G_FILE_TEST_EXISTS);
-	if (ret)
-		return full;
-	g_free (full);
-
-	/* check to see if we are being run in make check */
-	full = g_build_filename ("..", "..", "data", "tests", filename, NULL);
-	ret = g_file_test (full, G_FILE_TEST_EXISTS);
-	if (ret)
-		return full;
-	g_free (full);
-	full = g_build_filename ("..", "..", "..", "data", "tests", filename, NULL);
-	ret = g_file_test (full, G_FILE_TEST_EXISTS);
-	if (ret)
-		return full;
-	g_print ("[WARN] failed to find '%s'\n", full);
-	g_free (full);
-	return NULL;
-}
-
diff --git a/src/egg-test.h b/src/egg-test.h
deleted file mode 100644
index 1b05092..0000000
--- a/src/egg-test.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2007-2008 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.
- */
-
-#ifndef __EGG_TEST_H
-#define __EGG_TEST_H
-
-#include <glib.h>
-#include <string.h>
-
-typedef struct EggTest EggTest;
-
-gboolean	 egg_test_start			(EggTest *test, const gchar *name);
-void		 egg_test_end			(EggTest *test);
-void		 egg_test_title			(EggTest *test, const gchar *format, ...);
-void		 egg_test_title_assert		(EggTest *test, const gchar *text, gboolean value);
-void		 egg_test_assert		(EggTest *test, gboolean value);
-void		 egg_test_success		(EggTest *test, const gchar *format, ...);
-void		 egg_test_failed		(EggTest *test, const gchar *format, ...) G_GNUC_NORETURN;
-EggTest		*egg_test_init			(void);
-gint		 egg_test_finish		(EggTest *test);
-guint		 egg_test_elapsed		(EggTest *test);
-void		 egg_test_loop_quit		(EggTest *test);
-void		 egg_test_loop_wait		(EggTest *test, guint timeout);
-void		 egg_test_loop_check		(EggTest *test);
-void		 egg_test_set_user_data		(EggTest *test, gpointer user_data);
-gpointer	 egg_test_get_user_data		(EggTest *test);
-gchar		*egg_test_get_data_file		(const gchar *filename);
-
-#endif	/* __EGG_TEST_H */
-
diff --git a/src/pk-backend-internal.h b/src/pk-backend-internal.h
index 0628f71..bb7df4e 100644
--- a/src/pk-backend-internal.h
+++ b/src/pk-backend-internal.h
@@ -68,6 +68,7 @@ gboolean	 pk_backend_set_root			(PkBackend	*backend,
 							 const gchar	*root);
 gchar		*pk_backend_get_name			(PkBackend	*backend)
 							 G_GNUC_WARN_UNUSED_RESULT;
+gboolean	 pk_backend_get_is_finished		(PkBackend	*backend);
 gchar		*pk_backend_get_description		(PkBackend	*backend)
 							 G_GNUC_WARN_UNUSED_RESULT;
 gchar		*pk_backend_get_author			(PkBackend	*backend)
diff --git a/src/pk-backend-spawn.c b/src/pk-backend-spawn.c
index 220f036..f43e489 100644
--- a/src/pk-backend-spawn.c
+++ b/src/pk-backend-spawn.c
@@ -73,6 +73,16 @@ struct PkBackendSpawnPrivate
 G_DEFINE_TYPE (PkBackendSpawn, pk_backend_spawn, G_TYPE_OBJECT)
 
 /**
+ * pk_backend_spawn_get_backend:
+ **/
+PkBackend *
+pk_backend_spawn_get_backend (PkBackendSpawn *backend_spawn)
+{
+	g_return_val_if_fail (PK_IS_BACKEND_SPAWN (backend_spawn), NULL);
+	return backend_spawn->priv->backend;
+}
+
+/**
  * pk_backend_spawn_set_filter_stdout:
  **/
 gboolean
@@ -145,9 +155,6 @@ pk_backend_spawn_start_kill_timer (PkBackendSpawn *backend_spawn)
 
 /**
  * pk_backend_spawn_parse_stdout:
- *
- * If you are editing this function creating a new backend,
- * then you are probably doing something wrong.
  **/
 static gboolean
 pk_backend_spawn_parse_stdout (PkBackendSpawn *backend_spawn, const gchar *line)
@@ -594,24 +601,34 @@ pk_backend_spawn_exit_cb (PkSpawn *spawn, PkSpawnExitType exit_enum, PkBackendSp
 }
 
 /**
- * pk_backend_spawn_stdout_cb:
+ * pk_backend_spawn_inject_data:
  **/
-static void
-pk_backend_spawn_stdout_cb (PkBackendSpawn *spawn, const gchar *line, PkBackendSpawn *backend_spawn)
+gboolean
+pk_backend_spawn_inject_data (PkBackendSpawn *backend_spawn, const gchar *line)
 {
 	gboolean ret;
-	g_return_if_fail (PK_IS_BACKEND_SPAWN (backend_spawn));
+	g_return_val_if_fail (PK_IS_BACKEND_SPAWN (backend_spawn), FALSE);
 
 	/* do we ignore with a filter func ? */
 	if (backend_spawn->priv->stdout_func != NULL) {
 		ret = backend_spawn->priv->stdout_func (backend_spawn->priv->backend, line);
 		if (!ret)
-			return;
+			return TRUE;
 	}
 
-	ret = pk_backend_spawn_parse_stdout (backend_spawn, line);
+	return pk_backend_spawn_parse_stdout (backend_spawn, line);
+}
+
+/**
+ * pk_backend_spawn_stdout_cb:
+ **/
+static void
+pk_backend_spawn_stdout_cb (PkBackendSpawn *spawn, const gchar *line, PkBackendSpawn *backend_spawn)
+{
+	gboolean ret;
+	ret = pk_backend_spawn_inject_data (backend_spawn, line);
 	if (!ret)
-		egg_debug ("failed to parse '%s'", line);
+		egg_debug ("failed to parse: %s", line);
 }
 
 /**
@@ -641,7 +658,7 @@ pk_backend_spawn_stderr_cb (PkBackendSpawn *spawn, const gchar *line, PkBackendS
  * Our proxy variable is typically 'username:password at server:port'
  * but http_proxy expects 'http://username:password@server:port/'
  **/
-static gchar *
+gchar *
 pk_backend_spawn_convert_uri (const gchar *proxy)
 {
 	GString *string;
@@ -823,6 +840,7 @@ pk_backend_spawn_helper_va_list (PkBackendSpawn *backend_spawn, const gchar *exe
 	gchar **argv;
 	gchar **envp;
 	PkHintEnum background;
+	GError *error = NULL;
 	PkBackendSpawnPrivate *priv = backend_spawn->priv;
 #if PK_BUILD_LOCAL
 	const gchar *directory;
@@ -873,10 +891,11 @@ pk_backend_spawn_helper_va_list (PkBackendSpawn *backend_spawn, const gchar *exe
 
 	priv->finished = FALSE;
 	envp = pk_backend_spawn_get_envp (backend_spawn);
-	ret = pk_spawn_argv (priv->spawn, argv, envp);
+	ret = pk_spawn_argv (priv->spawn, argv, envp, &error);
 	if (!ret) {
 		pk_backend_error_code (priv->backend, PK_ERROR_ENUM_INTERNAL_ERROR,
-				       "Spawn of helper '%s' failed", argv[0]);
+				       "Spawn of helper '%s' failed", argv[0], error->message);
+		g_error_free (error);
 		pk_backend_finished (priv->backend);
 	}
 	g_free (filename);
@@ -1061,320 +1080,3 @@ pk_backend_spawn_new (void)
 	return PK_BACKEND_SPAWN (backend_spawn);
 }
 
-/***************************************************************************
- ***                          MAKE CHECK TESTS                           ***
- ***************************************************************************/
-#ifdef EGG_TEST
-#include "egg-test.h"
-
-static GMainLoop *loop;
-static guint number_packages = 0;
-
-/**
- * pk_backend_spawn_test_finished_cb:
- **/
-static void
-pk_backend_spawn_test_finished_cb (PkBackend *backend, PkExitEnum exit, PkBackendSpawn *backend_spawn)
-{
-	g_main_loop_quit (loop);
-}
-
-/**
- * pk_backend_spawn_test_package_cb:
- **/
-static void
-pk_backend_spawn_test_package_cb (PkBackend *backend, PkInfoEnum info,
-				  const gchar *package_id, const gchar *summary,
-				  PkBackendSpawn *backend_spawn)
-{
-	number_packages++;
-}
-
-static gchar **
-pk_backend_spawn_va_list_to_argv_test (const gchar *first_element, ...)
-{
-	va_list args;
-	gchar **array;
-
-	/* get the argument list */
-	va_start (args, first_element);
-	array = pk_backend_spawn_va_list_to_argv (first_element, &args);
-	va_end (args);
-
-	return array;
-}
-
-void
-pk_backend_test_spawn (EggTest *test)
-{
-	PkBackendSpawn *backend_spawn;
-	PkBackend *backend;
-	const gchar *text;
-	guint refcount;
-	gboolean ret;
-	gchar *uri;
-	gchar **array;
-
-	loop = g_main_loop_new (NULL, FALSE);
-
-	if (!egg_test_start (test, "PkBackendSpawn"))
-		return;
-
-	/************************************************************
-	 ****************      splitting va_list       **************
-	 ************************************************************/
-	egg_test_title (test, "va_list_to_argv single");
-	array = pk_backend_spawn_va_list_to_argv_test ("richard", NULL);
-	if (g_strcmp0 (array[0], "richard") == 0 &&
-	    array[1] == NULL)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "incorrect array '%s'", array[0]);
-	g_strfreev (array);
-
-	/************************************************************/
-	egg_test_title (test, "va_list_to_argv triple");
-	array = pk_backend_spawn_va_list_to_argv_test ("richard", "phillip", "hughes", NULL);
-	if (g_strcmp0 (array[0], "richard") == 0 &&
-	    g_strcmp0 (array[1], "phillip") == 0 &&
-	    g_strcmp0 (array[2], "hughes") == 0 &&
-	    array[3] == NULL)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "incorrect array '%s','%s','%s'", array[0], array[1], array[2]);
-	g_strfreev (array);
-
-	/************************************************************/
-	egg_test_title (test, "get an backend_spawn");
-	backend_spawn = pk_backend_spawn_new ();
-	egg_test_assert (test, backend_spawn != NULL);
-
-	/* private copy for unref testing */
-	backend = backend_spawn->priv->backend;
-	/* incr ref count so we don't kill the object */
-	g_object_ref (backend);
-
-	/************************************************************/
-	egg_test_title (test, "get backend name");
-	text = pk_backend_spawn_get_name (backend_spawn);
-	if (text == NULL)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "invalid name %s", text);
-
-	/************************************************************/
-	egg_test_title (test, "set backend name");
-	ret = pk_backend_spawn_set_name (backend_spawn, "test_spawn");
-	if (ret)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "invalid set name");
-
-	/************************************************************/
-	egg_test_title (test, "get backend name");
-	text = pk_backend_spawn_get_name (backend_spawn);
-	if (g_strcmp0 (text, "test_spawn") == 0)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "invalid name %s", text);
-
-	/* needed to avoid an error */
-	ret = pk_backend_set_name (backend_spawn->priv->backend, "test_spawn");
-	ret = pk_backend_lock (backend_spawn->priv->backend);
-
-	/************************************************************
-	 **********       Check parsing common error      ***********
-	 ************************************************************/
-	egg_test_title (test, "test pk_backend_spawn_parse_stdout Percentage1");
-	ret = pk_backend_spawn_parse_stdout (backend_spawn, "percentage\t0");
-	egg_test_assert (test, ret);
-
-	/************************************************************/
-	egg_test_title (test, "test pk_backend_spawn_parse_stdout Percentage2");
-	ret = pk_backend_spawn_parse_stdout (backend_spawn, "percentage\tbrian");
-	egg_test_assert (test, !ret);
-
-	/************************************************************/
-	egg_test_title (test, "test pk_backend_spawn_parse_stdout Percentage3");
-	ret = pk_backend_spawn_parse_stdout (backend_spawn, "percentage\t12345");
-	egg_test_assert (test, !ret);
-
-	/************************************************************/
-	egg_test_title (test, "test pk_backend_spawn_parse_stdout Percentage4");
-	ret = pk_backend_spawn_parse_stdout (backend_spawn, "percentage\t");
-	egg_test_assert (test, !ret);
-
-	/************************************************************/
-	egg_test_title (test, "test pk_backend_spawn_parse_stdout Percentage5");
-	ret = pk_backend_spawn_parse_stdout (backend_spawn, "percentage");
-	egg_test_assert (test, !ret);
-
-	/************************************************************/
-	egg_test_title (test, "test pk_backend_spawn_parse_stdout Subpercentage");
-	ret = pk_backend_spawn_parse_stdout (backend_spawn, "subpercentage\t17");
-	egg_test_assert (test, ret);
-
-	/************************************************************/
-	egg_test_title (test, "test pk_backend_spawn_parse_stdout NoPercentageUpdates");
-	ret = pk_backend_spawn_parse_stdout (backend_spawn, "no-percentage-updates");
-	egg_test_assert (test, ret);
-
-	/************************************************************/
-	egg_test_title (test, "test pk_backend_spawn_parse_stdout failure");
-	ret = pk_backend_spawn_parse_stdout (backend_spawn, "error\tnot-present-woohoo\tdescription text");
-	if (!ret)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "did not detect incorrect enum");
-
-	/************************************************************/
-	egg_test_title (test, "test pk_backend_spawn_parse_stdout Status");
-	ret = pk_backend_spawn_parse_stdout (backend_spawn, "status\tquery");
-	egg_test_assert (test, ret);
-
-	/************************************************************/
-	egg_test_title (test, "test pk_backend_spawn_parse_stdout RequireRestart");
-	ret = pk_backend_spawn_parse_stdout (backend_spawn, "requirerestart\tsystem\tgnome-power-manager;0.0.1;i386;data");
-	egg_test_assert (test, ret);
-
-	/************************************************************/
-	egg_test_title (test, "test pk_backend_spawn_parse_stdout RequireRestart invalid enum");
-	ret = pk_backend_spawn_parse_stdout (backend_spawn, "requirerestart\tmooville\tgnome-power-manager;0.0.1;i386;data");
-	if (!ret)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "did not detect incorrect enum");
-
-	/************************************************************/
-	egg_test_title (test, "test pk_backend_spawn_parse_stdout RequireRestart invalid PackageId");
-	ret = pk_backend_spawn_parse_stdout (backend_spawn, "requirerestart\tsystem\tdetails about the restart");
-	if (!ret)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "did not detect incorrect package id");
-
-	/************************************************************/
-	egg_test_title (test, "test pk_backend_spawn_parse_stdout AllowUpdate1");
-	ret = pk_backend_spawn_parse_stdout (backend_spawn, "allow-cancel\ttrue");
-	egg_test_assert (test, ret);
-
-	/************************************************************/
-	egg_test_title (test, "test pk_backend_spawn_parse_stdout AllowUpdate2");
-	ret = pk_backend_spawn_parse_stdout (backend_spawn, "allow-cancel\tbrian");
-	egg_test_assert (test, !ret);
-
-	/************************************************************
-	 **********         Check uri conversion          ***********
-	 ************************************************************/
-	egg_test_title (test, "convert proxy uri (bare)");
-	uri = pk_backend_spawn_convert_uri ("username:password at server:port");
-	egg_test_assert (test, (g_strcmp0 (uri, "http://username:password@server:port/") == 0));
-	g_free (uri);
-
-	/************************************************************/
-	egg_test_title (test, "convert proxy uri (full)");
-	uri = pk_backend_spawn_convert_uri ("http://username:password@server:port/");
-	egg_test_assert (test, (g_strcmp0 (uri, "http://username:password@server:port/") == 0));
-	g_free (uri);
-
-	/************************************************************/
-	egg_test_title (test, "convert proxy uri (partial)");
-	uri = pk_backend_spawn_convert_uri ("ftp://username:password@server:port");
-	egg_test_assert (test, (g_strcmp0 (uri, "ftp://username:password@server:port/") == 0));
-	g_free (uri);
-
-	/************************************************************
-	 **********        Check parsing common out       ***********
-	 ************************************************************/
-	egg_test_title (test, "test pk_backend_spawn_parse_common_out Package");
-	ret = pk_backend_spawn_parse_stdout (backend_spawn,
-		"package\tinstalled\tgnome-power-manager;0.0.1;i386;data\tMore useless software");
-	egg_test_assert (test, ret);
-
-	/************************************************************/
-	egg_test_title (test, "manually unlock as we have no engine");
-	ret = pk_backend_unlock (backend_spawn->priv->backend);
-	if (ret)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "did not unlock");
-
-	/* reset */
-	g_object_unref (backend_spawn);
-
-	/************************************************************/
-	egg_test_title (test, "test we unref'd all but one of the PkBackend instances");
-	refcount = G_OBJECT(backend)->ref_count;
-	if (refcount == 1)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "refcount invalid %i", refcount);
-
-	/* new */
-	backend_spawn = pk_backend_spawn_new ();
-
-	/************************************************************/
-	egg_test_title (test, "set backend name");
-	ret = pk_backend_spawn_set_name (backend_spawn, "test_spawn");
-	if (ret)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "invalid set name");
-
-	/* so we can spin until we finish */
-	g_signal_connect (backend_spawn->priv->backend, "finished",
-			  G_CALLBACK (pk_backend_spawn_test_finished_cb), backend_spawn);
-	/* so we can count the returned packages */
-	g_signal_connect (backend_spawn->priv->backend, "package",
-			  G_CALLBACK (pk_backend_spawn_test_package_cb), backend_spawn);
-
-	/* needed to avoid an error */
-	ret = pk_backend_lock (backend_spawn->priv->backend);
-
-	/************************************************************
-	 **********          Use a spawned helper         ***********
-	 ************************************************************/
-	egg_test_title (test, "test search-name.sh running");
-	ret = pk_backend_spawn_helper (backend_spawn, "search-name.sh", "none", "bar", NULL);
-	if (ret)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "cannot spawn search-name.sh");
-
-	/* wait for finished */
-	g_main_loop_run (loop);
-
-	/************************************************************/
-	egg_test_title (test, "test number of packages");
-	if (number_packages == 2)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "wrong number of packages %i", number_packages);
-
-	/************************************************************/
-	egg_test_title (test, "manually unlock as we have no engine");
-	ret = pk_backend_unlock (backend_spawn->priv->backend);
-	if (ret)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "did not unlock");
-
-	/* done */
-	g_object_unref (backend_spawn);
-
-	/************************************************************/
-	egg_test_title (test, "test we unref'd all but one of the PkBackend instances");
-	refcount = G_OBJECT(backend)->ref_count;
-	if (refcount == 1)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "refcount invalid %i", refcount);
-
-	/* we ref'd it manually for checking, so we need to unref it */
-	g_object_unref (backend);
-	g_main_loop_unref (loop);
-
-	egg_test_end (test);
-}
-#endif
-
diff --git a/src/pk-backend-spawn.h b/src/pk-backend-spawn.h
index 627161e..570a480 100644
--- a/src/pk-backend-spawn.h
+++ b/src/pk-backend-spawn.h
@@ -62,6 +62,11 @@ gboolean	 pk_backend_spawn_set_name		(PkBackendSpawn	*backend_spawn,
 gboolean	 pk_backend_spawn_set_allow_sigkill	(PkBackendSpawn	*backend_spawn,
 							 gboolean	 allow_sigkill);
 
+PkBackend	*pk_backend_spawn_get_backend		(PkBackendSpawn	*backend_spawn);
+gchar		*pk_backend_spawn_convert_uri		(const gchar	*proxy);
+gboolean	 pk_backend_spawn_inject_data		(PkBackendSpawn *backend_spawn,
+							 const gchar	*line);
+
 /* filtering */
 typedef gboolean (*PkBackendSpawnFilterFunc)		(PkBackend	*backend,
 							 const gchar	*data);
diff --git a/src/pk-backend.c b/src/pk-backend.c
index 4fb17af..7d6d44d 100644
--- a/src/pk-backend.c
+++ b/src/pk-backend.c
@@ -1792,6 +1792,15 @@ pk_backend_repo_list_changed (PkBackend *backend)
 }
 
 /**
+ * pk_backend_get_is_finished:
+ **/
+gboolean
+pk_backend_get_is_finished (PkBackend *backend)
+{
+	return backend->priv->finished;
+}
+
+/**
  * pk_backend_error_timeout_delay_cb:
  *
  * We have to call Finished() within PK_BACKEND_FINISHED_ERROR_TIMEOUT of ErrorCode(), enforce this.
@@ -3235,384 +3244,3 @@ pk_backend_new (void)
 	return PK_BACKEND (pk_backend_object);
 }
 
-/***************************************************************************
- ***                          MAKE CHECK TESTS                           ***
- ***************************************************************************/
-#ifdef EGG_TEST
-#include "egg-test.h"
-#include <glib/gstdio.h>
-
-static guint number_messages = 0;
-static guint number_packages = 0;
-
-/**
- * pk_backend_test_message_cb:
- **/
-static void
-pk_backend_test_message_cb (PkBackend *backend, PkMessageEnum message, const gchar *details, gpointer data)
-{
-	egg_debug ("details=%s", details);
-	number_messages++;
-}
-
-/**
- * pk_backend_test_finished_cb:
- **/
-static void
-pk_backend_test_finished_cb (PkBackend *backend, PkExitEnum exit, EggTest *test)
-{
-	egg_test_loop_quit (test);
-}
-
-/**
- * pk_backend_test_watch_file_cb:
- **/
-static void
-pk_backend_test_watch_file_cb (PkBackend *backend, gpointer data)
-{
-	EggTest *test = (EggTest *) data;
-	egg_test_loop_quit (test);
-}
-
-static gboolean
-pk_backend_test_func_true (PkBackend *backend)
-{
-	g_usleep (1000*1000);
-	/* trigger duplicate test */
-	pk_backend_package (backend, PK_INFO_ENUM_AVAILABLE, "vips-doc;7.12.4-2.fc8;noarch;linva", "The vips documentation package.");
-	pk_backend_package (backend, PK_INFO_ENUM_AVAILABLE, "vips-doc;7.12.4-2.fc8;noarch;linva", "The vips documentation package.");
-	pk_backend_finished (backend);
-	return TRUE;
-}
-
-static gboolean
-pk_backend_test_func_immediate_false (PkBackend *backend)
-{
-	pk_backend_finished (backend);
-	return FALSE;
-}
-
-/**
- * pk_backend_test_package_cb:
- **/
-static void
-pk_backend_test_package_cb (PkBackend *backend, PkPackage *item, EggTest *test)
-{
-	egg_debug ("package:%s", pk_package_get_id (item));
-	number_packages++;
-}
-
-void
-pk_backend_test (EggTest *test)
-{
-	PkBackend *backend;
-	PkConf *conf;
-	gchar *text;
-	gchar *text_safe;
-	gboolean ret;
-	const gchar *filename;
-	gboolean developer_mode;
-
-	if (!egg_test_start (test, "PkBackend"))
-		return;
-
-	/************************************************************
-	 ****************       REPLACE CHARS      ******************
-	 ************************************************************/
-	egg_test_title (test, "test replace unsafe (okay)");
-	text_safe = pk_backend_strsafe ("Richard Hughes");
-	if (g_strcmp0 (text_safe, "Richard Hughes") == 0)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "failed the replace unsafe '%s'", text_safe);
-	g_free (text_safe);
-
-	/************************************************************/
-	egg_test_title (test, "test replace UTF8 unsafe (okay)");
-	text_safe = pk_backend_strsafe ("Gölas");
-	if (g_strcmp0 (text_safe, "Gölas") == 0)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "failed the replace unsafe '%s'", text_safe);
-	g_free (text_safe);
-
-	/************************************************************/
-	egg_test_title (test, "test replace unsafe (one invalid)");
-	text_safe = pk_backend_strsafe ("Richard\rHughes");
-	if (g_strcmp0 (text_safe, "Richard Hughes") == 0)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "failed the replace unsafe '%s'", text_safe);
-	g_free (text_safe);
-
-	/************************************************************/
-	egg_test_title (test, "test replace unsafe (multiple invalid)");
-	text_safe = pk_backend_strsafe (" Richard\rHughes\f");
-	if (g_strcmp0 (text_safe, " Richard Hughes ") == 0)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "failed the replace unsafe '%s'", text_safe);
-	g_free (text_safe);
-
-	/************************************************************/
-	egg_test_title (test, "get an backend");
-	backend = pk_backend_new ();
-	if (backend != NULL)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, NULL);
-
-	/* connect */
-	g_signal_connect (backend, "package",
-			  G_CALLBACK (pk_backend_test_package_cb), test);
-
-	/************************************************************/
-	egg_test_title (test, "create a config file");
-	filename = "/tmp/dave";
-	ret = g_file_set_contents (filename, "foo", -1, NULL);
-	if (ret) {
-		egg_test_success (test, "set contents");
-	} else
-		egg_test_failed (test, NULL);
-
-	/************************************************************/
-	egg_test_title (test, "set up a watch file on a config file");
-	ret = pk_backend_watch_file (backend, filename, pk_backend_test_watch_file_cb, test);
-	if (ret)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "eula valid");
-
-	/************************************************************/
-	egg_test_title (test, "change the config file");
-	ret = g_file_set_contents (filename, "bar", -1, NULL);
-	if (ret) {
-		egg_test_success (test, "set contents");
-	} else
-		egg_test_failed (test, NULL);
-
-	/* wait for config file change */
-	egg_test_loop_wait (test, 2000);
-	egg_test_loop_check (test);
-
-	/************************************************************/
-	egg_test_title (test, "delete the config file");
-	ret = g_unlink (filename);
-	egg_test_assert (test, !ret);
-
-	g_signal_connect (backend, "message", G_CALLBACK (pk_backend_test_message_cb), NULL);
-	g_signal_connect (backend, "finished", G_CALLBACK (pk_backend_test_finished_cb), test);
-
-	/************************************************************/
-	egg_test_title (test, "get eula that does not exist");
-	ret = pk_backend_is_eula_valid (backend, "license_foo");
-	if (!ret)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "eula valid");
-
-	/************************************************************/
-	egg_test_title (test, "accept eula");
-	ret = pk_backend_accept_eula (backend, "license_foo");
-	if (ret)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "eula was not accepted");
-
-	/************************************************************/
-	egg_test_title (test, "get eula that does exist");
-	ret = pk_backend_is_eula_valid (backend, "license_foo");
-	if (ret)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "eula valid");
-
-	/************************************************************/
-	egg_test_title (test, "accept eula (again)");
-	ret = pk_backend_accept_eula (backend, "license_foo");
-	if (!ret)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "eula was accepted twice");
-
-	/************************************************************/
-	egg_test_title (test, "load an invalid backend");
-	ret = pk_backend_set_name (backend, "invalid");
-	if (ret == FALSE)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, NULL);
-
-	/************************************************************/
-	egg_test_title (test, "try to load a valid backend");
-	ret = pk_backend_set_name (backend, "dummy");
-	egg_test_assert (test, ret);
-
-	/************************************************************/
-	egg_test_title (test, "load an valid backend again");
-	ret = pk_backend_set_name (backend, "dummy");
-	if (ret == FALSE)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "loaded twice");
-
-	/************************************************************/
-	egg_test_title (test, "lock an valid backend");
-	ret = pk_backend_lock (backend);
-	if (ret)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "failed to lock");
-
-	/************************************************************/
-	egg_test_title (test, "lock a backend again");
-	ret = pk_backend_lock (backend);
-	if (ret)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "locked twice should succeed");
-
-	/************************************************************/
-	egg_test_title (test, "check we are out of init");
-	if (backend->priv->during_initialize == FALSE)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "not out of init");
-
-	/************************************************************/
-	egg_test_title (test, "get backend name");
-	text = pk_backend_get_name (backend);
-	if (g_strcmp0 (text, "dummy") == 0)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "invalid name %s", text);
-	g_free (text);
-
-	/************************************************************/
-	egg_test_title (test, "unlock an valid backend");
-	ret = pk_backend_unlock (backend);
-	if (ret)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "failed to unlock");
-
-	/************************************************************/
-	egg_test_title (test, "unlock an valid backend again");
-	ret = pk_backend_unlock (backend);
-	if (ret)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "unlocked twice, should succeed");
-
-	/************************************************************/
-	egg_test_title (test, "check we are not finished");
-	if (backend->priv->finished == FALSE)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "we did not clear finish!");
-
-	/************************************************************/
-	egg_test_title (test, "check we have no error");
-	if (backend->priv->set_error == FALSE)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "an error has already been set");
-
-	/************************************************************/
-	egg_test_title (test, "lock again");
-	ret = pk_backend_lock (backend);
-	if (ret)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "failed to unlock");
-
-	/************************************************************/
-	egg_test_title (test, "wait for a thread to return true");
-	ret = pk_backend_thread_create (backend, pk_backend_test_func_true);
-	if (ret)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "wait for a thread failed");
-
-	/* wait for Finished */
-	egg_test_loop_wait (test, 2000);
-	egg_test_loop_check (test);
-
-	/************************************************************/
-	egg_test_title (test, "check duplicate filter");
-	if (number_packages == 1)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "wrong number of packages: %i", number_packages);
-
-	/* reset */
-	pk_backend_reset (backend);
-
-	/************************************************************/
-	egg_test_title (test, "wait for a thread to return false (straight away)");
-	ret = pk_backend_thread_create (backend, pk_backend_test_func_immediate_false);
-	if (ret)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "returned false!");
-
-	/* wait for Finished */
-	egg_test_loop_wait (test, PK_BACKEND_FINISHED_TIMEOUT_GRACE + 100);
-	egg_test_loop_check (test);
-
-	/************************************************************/
-	pk_backend_reset (backend);
-	pk_backend_error_code (backend, PK_ERROR_ENUM_GPG_FAILURE, "test error");
-
-	/* wait for finished */
-	egg_test_loop_wait (test, PK_BACKEND_FINISHED_ERROR_TIMEOUT + 400);
-	egg_test_loop_check (test);
-
-	/************************************************************
-	 ****************     CANCEL TRISTATE      ******************
-	 ************************************************************/
-	egg_test_title (test, "get allow cancel after reset");
-	pk_backend_reset (backend);
-	ret = pk_backend_get_allow_cancel (backend);
-	egg_test_assert (test, !ret);
-
-	/************************************************************/
-	egg_test_title (test, "set allow cancel TRUE");
-	ret = pk_backend_set_allow_cancel (backend, TRUE);
-	egg_test_assert (test, ret);
-
-	/************************************************************/
-	egg_test_title (test, "set allow cancel TRUE (repeat)");
-	ret = pk_backend_set_allow_cancel (backend, TRUE);
-	egg_test_assert (test, !ret);
-
-	/************************************************************/
-	egg_test_title (test, "set allow cancel FALSE");
-	ret = pk_backend_set_allow_cancel (backend, FALSE);
-	egg_test_assert (test, ret);
-
-	/************************************************************/
-	egg_test_title (test, "set allow cancel FALSE (after reset)");
-	pk_backend_reset (backend);
-	ret = pk_backend_set_allow_cancel (backend, FALSE);
-	egg_test_assert (test, ret);
-
-	/* if running in developer mode, then expect a Message */
-	conf = pk_conf_new ();
-	developer_mode = pk_conf_get_bool (conf, "DeveloperMode");
-	g_object_unref (conf);
-	if (developer_mode) {
-		/************************************************************/
-		egg_test_title (test, "check we enforce finished after error_code");
-		if (number_messages == 1)
-			egg_test_success (test, NULL);
-		else
-			egg_test_failed (test, "we messaged %i times!", number_messages);
-	}
-
-	g_object_unref (backend);
-
-	egg_test_end (test);
-}
-#endif
-
diff --git a/src/pk-cache.c b/src/pk-cache.c
index 8272b32..18c694c 100644
--- a/src/pk-cache.c
+++ b/src/pk-cache.c
@@ -174,31 +174,3 @@ pk_cache_new (void)
 	return PK_CACHE (pk_cache_object);
 }
 
-/***************************************************************************
- ***                          MAKE CHECK TESTS                           ***
- ***************************************************************************/
-#ifdef EGG_TEST
-#include "egg-test.h"
-
-void
-egg_test_cache (EggTest *test)
-{
-	PkCache *cache;
-
-	if (!egg_test_start (test, "PkCache"))
-		return;
-
-	/************************************************************/
-	egg_test_title (test, "get an instance");
-	cache = pk_cache_new ();
-	if (cache != NULL)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, NULL);
-
-	g_object_unref (cache);
-
-	egg_test_end (test);
-}
-#endif
-
diff --git a/src/pk-conf.c b/src/pk-conf.c
index 3441e25..bfed952 100644
--- a/src/pk-conf.c
+++ b/src/pk-conf.c
@@ -230,64 +230,3 @@ pk_conf_new (void)
 	return PK_CONF (pk_conf_object);
 }
 
-/***************************************************************************
- ***                          MAKE CHECK TESTS                           ***
- ***************************************************************************/
-#ifdef EGG_TEST
-#include "egg-test.h"
-
-void
-pk_conf_test (EggTest *test)
-{
-	PkConf *conf;
-	gchar *text;
-	gint value;
-
-	if (!egg_test_start (test, "PkConf"))
-		return;
-
-	/************************************************************/
-	egg_test_title (test, "get an instance");
-	conf = pk_conf_new ();
-	egg_test_assert (test, conf != NULL);
-
-	/************************************************************/
-	egg_test_title (test, "get the default backend");
-	text = pk_conf_get_string (conf, "DefaultBackend");
-	if (text != PK_CONF_VALUE_STRING_MISSING)
-		egg_test_success (test, "got default backend '%s'", text);
-	else
-		egg_test_failed (test, "got NULL!");
-	g_free (text);
-
-	/************************************************************/
-	egg_test_title (test, "get a string that doesn't exist");
-	text = pk_conf_get_string (conf, "FooBarBaz");
-	if (text == PK_CONF_VALUE_STRING_MISSING)
-		egg_test_success (test, "got NULL", text);
-	else
-		egg_test_failed (test, "got return value '%s'", text);
-	g_free (text);
-
-	/************************************************************/
-	egg_test_title (test, "get the shutdown timeout");
-	value = pk_conf_get_int (conf, "ShutdownTimeout");
-	if (value != PK_CONF_VALUE_INT_MISSING)
-		egg_test_success (test, "got ShutdownTimeout '%i'", value);
-	else
-		egg_test_failed (test, "got %i", value);
-
-	/************************************************************/
-	egg_test_title (test, "get an int that doesn't exist");
-	value = pk_conf_get_int (conf, "FooBarBaz");
-	if (value == PK_CONF_VALUE_INT_MISSING)
-		egg_test_success (test, "got %i", value);
-	else
-		egg_test_failed (test, "got return value '%i'", value);
-
-	g_object_unref (conf);
-
-	egg_test_end (test);
-}
-#endif
-
diff --git a/src/pk-dbus.c b/src/pk-dbus.c
index 758298b..9ec83a3 100644
--- a/src/pk-dbus.c
+++ b/src/pk-dbus.c
@@ -290,28 +290,3 @@ pk_dbus_new (void)
 	return PK_DBUS (pk_dbus_object);
 }
 
-/***************************************************************************
- ***                          MAKE CHECK TESTS                           ***
- ***************************************************************************/
-#ifdef EGG_TEST
-#include "egg-test.h"
-
-void
-egg_test_dbus (EggTest *test)
-{
-	PkDbus *dbus;
-
-	if (!egg_test_start (test, "PkDbus"))
-		return;
-
-	/************************************************************/
-	egg_test_title (test, "get an instance");
-	dbus = pk_dbus_new ();
-	egg_test_assert (test, dbus != NULL);
-
-	g_object_unref (dbus);
-
-	egg_test_end (test);
-}
-#endif
-
diff --git a/src/pk-engine.c b/src/pk-engine.c
index 2db8d44..4cf94bc 100644
--- a/src/pk-engine.c
+++ b/src/pk-engine.c
@@ -1784,259 +1784,3 @@ pk_engine_new (void)
 	return PK_ENGINE (engine);
 }
 
-/***************************************************************************
- ***                          MAKE CHECK TESTS                           ***
- ***************************************************************************/
-#ifdef EGG_TEST
-#include "egg-test.h"
-
-static PkNotify *notify = NULL;
-static gboolean _quit = FALSE;
-static gboolean _locked = FALSE;
-static gboolean _restart_schedule = FALSE;
-
-/**
- * pk_test_quit_cb:
- **/
-static void
-pk_test_quit_cb (PkEngine *engine, EggTest *test)
-{
-	_quit = TRUE;
-}
-
-/**
- * pk_test_changed_cb:
- **/
-static void
-pk_test_changed_cb (PkEngine *engine, EggTest *test)
-{
-	g_object_get (engine,
-		      "locked", &_locked,
-		      NULL);
-}
-
-/**
- * pk_test_updates_changed_cb:
- **/
-static void
-pk_test_updates_changed_cb (PkEngine *engine, EggTest *test)
-{
-	egg_test_loop_quit (test);
-}
-
-/**
- * pk_test_repo_list_changed_cb:
- **/
-static void
-pk_test_repo_list_changed_cb (PkEngine *engine, EggTest *test)
-{
-	egg_test_loop_quit (test);
-}
-
-/**
- * pk_test_restart_schedule_cb:
- **/
-static void
-pk_test_restart_schedule_cb (PkEngine *engine, EggTest *test)
-{
-	_restart_schedule = TRUE;
-	egg_test_loop_quit (test);
-}
-
-/**
- * pk_test_emit_updates_changed_cb:
- **/
-static gboolean
-pk_test_emit_updates_changed_cb (EggTest *test)
-{
-	PkNotify *notify2;
-	notify2 = pk_notify_new ();
-	pk_notify_updates_changed (notify2);
-	g_object_unref (notify2);
-	return FALSE;
-}
-
-/**
- * pk_test_emit_repo_list_changed_cb:
- **/
-static gboolean
-pk_test_emit_repo_list_changed_cb (EggTest *test)
-{
-	PkNotify *notify2;
-	notify2 = pk_notify_new ();
-	pk_notify_repo_list_changed (notify2);
-	g_object_unref (notify2);
-	return FALSE;
-}
-
-void
-pk_engine_test (EggTest *test)
-{
-	gboolean ret;
-	PkEngine *engine;
-	PkBackend *backend;
-	PkInhibit *inhibit;
-	guint idle;
-	gchar *state;
-	guint elapsed;
-
-	if (!egg_test_start (test, "PkEngine"))
-		return;
-
-	/************************************************************/
-	egg_test_title (test, "get a backend instance");
-	backend = pk_backend_new ();
-	egg_test_assert (test, backend != NULL);
-
-	/************************************************************/
-	egg_test_title (test, "get a notify instance");
-	notify = pk_notify_new ();
-	egg_test_assert (test, notify != NULL);
-
-	/* set the type, as we have no pk-main doing this for us */
-	/************************************************************/
-	egg_test_title (test, "set the backend name");
-	ret = pk_backend_set_name (backend, "dummy");
-	egg_test_assert (test, ret);
-
-	/************************************************************/
-	egg_test_title (test, "get an engine instance");
-	engine = pk_engine_new ();
-	egg_test_assert (test, engine != NULL);
-
-	/* connect up signals */
-	g_signal_connect (engine, "quit",
-			  G_CALLBACK (pk_test_quit_cb), test);
-	g_signal_connect (engine, "changed",
-			  G_CALLBACK (pk_test_changed_cb), test);
-	g_signal_connect (engine, "updates-changed",
-			  G_CALLBACK (pk_test_updates_changed_cb), test);
-	g_signal_connect (engine, "repo-list-changed",
-			  G_CALLBACK (pk_test_repo_list_changed_cb), test);
-	g_signal_connect (engine, "restart-schedule",
-			  G_CALLBACK (pk_test_restart_schedule_cb), test);
-
-	/************************************************************
-	 **********           GET IDLE TIMES              ***********
-	 ************************************************************/
-	egg_test_title (test, "get idle at startup");
-	idle = pk_engine_get_seconds_idle (engine);
-	if (idle < 1)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "idle = %i", idle);
-
-	/* wait 5 seconds */
-	egg_test_loop_wait (test, 5000);
-
-	/************************************************************/
-	egg_test_title (test, "get idle at idle");
-	idle = pk_engine_get_seconds_idle (engine);
-	if (idle < 6 && idle > 4)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "idle = %i", idle);
-
-	/************************************************************/
-	egg_test_title (test, "get idle after method");
-	pk_engine_get_daemon_state (engine, &state, NULL);
-	g_free (state);
-	idle = pk_engine_get_seconds_idle (engine);
-	if (idle < 1)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "idle = %i", idle);
-
-	/************************************************************
-	 **********        TEST PROXY NOTIFY              ***********
-	 ************************************************************/
-	egg_test_title (test, "force test notify updates-changed");
-	g_timeout_add (25, (GSourceFunc) pk_test_emit_updates_changed_cb, test);
-	egg_test_success (test, NULL);
-	egg_test_loop_wait (test, 50);
-	egg_test_loop_check (test);
-
-	/************************************************************/
-	egg_test_title (test, "force test notify repo-list-changed");
-	g_timeout_add (25, (GSourceFunc) pk_test_emit_repo_list_changed_cb, test);
-	egg_test_success (test, NULL);
-	egg_test_loop_wait (test, 50);
-	egg_test_loop_check (test);
-
-	/************************************************************/
-	egg_test_title (test, "force test notify wait updates-changed");
-	pk_notify_wait_updates_changed (notify, 500);
-	egg_test_loop_wait (test, 1000);
-	elapsed = egg_test_elapsed (test);
-	if (elapsed > 400 && elapsed < 600)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "failed to quit (%i)", elapsed);
-
-	/************************************************************
-	 **********               LOCKING                 ***********
-	 ************************************************************/
-	egg_test_title (test, "test locked");
-	inhibit = pk_inhibit_new ();
-	pk_inhibit_add (inhibit, GUINT_TO_POINTER (999));
-	if (_locked)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "not locked");
-
-	/************************************************************/
-	egg_test_title (test, "test locked");
-	pk_inhibit_remove (inhibit, GUINT_TO_POINTER (999));
-	if (!_locked)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "not locked");
-	g_object_unref (inhibit);
-
-	/************************************************************/
-	egg_test_title (test, "test not locked");
-	if (!_locked)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "still locked");
-
-	/************************************************************
-	 **********          BINARY UPGRADE TEST          ***********
-	 ************************************************************/
-	egg_test_title_assert (test, "restart_schedule not set", !_restart_schedule);
-	ret = g_file_set_contents (SBINDIR "/packagekitd", "overwrite", -1, NULL);
-
-	/************************************************************/
-	egg_test_title_assert (test, "touched binary file", ret);
-	egg_test_loop_wait (test, 5000);
-
-	/************************************************************/
-	egg_test_title (test, "get idle after we touched the binary");
-	idle = pk_engine_get_seconds_idle (engine);
-	if (idle == G_MAXUINT)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "idle = %i", idle);
-
-	/************************************************************/
-	egg_test_title_assert (test, "restart_schedule set", _restart_schedule);
-
-	/************************************************************
-	 **********             DAEMON QUIT               ***********
-	 ************************************************************/
-	egg_test_title_assert (test, "not already quit", !_quit);
-	egg_test_title (test, "suggest quit with no transactions (should get quit signal)");
-	pk_engine_suggest_daemon_quit (engine, NULL);
-	if (_quit)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "did not quit");
-
-	g_object_unref (backend);
-	g_object_unref (notify);
-	g_object_unref (engine);
-
-	egg_test_end (test);
-}
-#endif
-
diff --git a/src/pk-file-monitor.c b/src/pk-file-monitor.c
index 8036657..7c78c28 100644
--- a/src/pk-file-monitor.c
+++ b/src/pk-file-monitor.c
@@ -176,27 +176,3 @@ pk_file_monitor_new (void)
 	return PK_FILE_MONITOR (file_monitor);
 }
 
-/***************************************************************************
- ***                          MAKE CHECK TESTS                           ***
- ***************************************************************************/
-#ifdef EGG_TEST
-#include "egg-test.h"
-
-void
-pk_file_monitor_test (EggTest *test)
-{
-	PkFileMonitor *file_monitor;
-
-	if (!egg_test_start (test, "PkFileMonitor"))
-		return;
-
-	/************************************************************/
-	egg_test_title (test, "get a file_monitor");
-	file_monitor = pk_file_monitor_new ();
-	egg_test_assert (test, file_monitor != NULL);
-	g_object_unref (file_monitor);
-
-	egg_test_end (test);
-}
-#endif
-
diff --git a/src/pk-inhibit.c b/src/pk-inhibit.c
index 8aa7286..5f0b034 100644
--- a/src/pk-inhibit.c
+++ b/src/pk-inhibit.c
@@ -288,111 +288,3 @@ pk_inhibit_new (void)
 	return PK_INHIBIT (pk_inhibit_object);
 }
 
-/***************************************************************************
- ***                          MAKE CHECK TESTS                           ***
- ***************************************************************************/
-#ifdef EGG_TEST
-#include "egg-test.h"
-
-void
-pk_inhibit_test (EggTest *test)
-{
-	PkInhibit *inhibit;
-	gboolean ret;
-
-	if (!egg_test_start (test, "PkInhibit"))
-		return;
-
-	/************************************************************/
-	egg_test_title (test, "get an instance");
-	inhibit = pk_inhibit_new ();
-	if (inhibit != NULL)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, NULL);
-
-	/************************************************************/
-	egg_test_title (test, "check we have a connection");
-	if (inhibit->priv->proxy != NULL)
-		egg_test_success (test, "got proxy");
-	else
-		egg_test_failed (test, "could not get proxy");
-
-	/************************************************************/
-	egg_test_title (test, "check we are not inhibited");
-	ret = pk_inhibit_locked (inhibit);
-	if (ret == FALSE)
-		egg_test_success (test, "marked correctly");
-	else
-		egg_test_failed (test, "not marked correctly");
-
-	/************************************************************/
-	egg_test_title (test, "add 123");
-	ret = pk_inhibit_add (inhibit, GUINT_TO_POINTER (123));
-	if (ret)
-		egg_test_success (test, "inhibited");
-	else
-		egg_test_failed (test, "could not inhibit");
-
-	/************************************************************/
-	egg_test_title (test, "check we are inhibited");
-	ret = pk_inhibit_locked (inhibit);
-	if (ret)
-		egg_test_success (test, "marked correctly");
-	else
-		egg_test_failed (test, "not marked correctly");
-
-	/************************************************************/
-	egg_test_title (test, "add 123 (again)");
-	ret = pk_inhibit_add (inhibit, GUINT_TO_POINTER (123));
-	if (ret == FALSE)
-		egg_test_success (test, "correctly ignored second");
-	else
-		egg_test_failed (test, "added the same number twice");
-
-	/************************************************************/
-	egg_test_title (test, "add 456");
-	ret = pk_inhibit_add (inhibit, GUINT_TO_POINTER (456));
-	if (ret)
-		egg_test_success (test, "inhibited");
-	else
-		egg_test_failed (test, "could not inhibit");
-
-	/************************************************************/
-	egg_test_title (test, "remove 123");
-	ret = pk_inhibit_remove (inhibit, GUINT_TO_POINTER (123));
-	if (ret)
-		egg_test_success (test, "removed first inhibit");
-	else
-		egg_test_failed (test, "could not remove inhibit");
-
-	/************************************************************/
-	egg_test_title (test, "check we are still inhibited");
-	ret = pk_inhibit_locked (inhibit);
-	if (ret)
-		egg_test_success (test, "marked correctly");
-	else
-		egg_test_failed (test, "not marked correctly");
-
-	/************************************************************/
-	egg_test_title (test, "remove 456");
-	ret = pk_inhibit_remove (inhibit, GUINT_TO_POINTER (456));
-	if (ret)
-		egg_test_success (test, "removed second inhibit");
-	else
-		egg_test_failed (test, "could not remove inhibit");
-
-	/************************************************************/
-	egg_test_title (test, "check we are not inhibited");
-	ret = pk_inhibit_locked (inhibit);
-	if (ret == FALSE)
-		egg_test_success (test, "marked correctly");
-	else
-		egg_test_failed (test, "not marked correctly");
-
-	g_object_unref (inhibit);
-
-	egg_test_end (test);
-}
-#endif
-
diff --git a/src/pk-lsof.c b/src/pk-lsof.c
index e9945fd..79b7136 100644
--- a/src/pk-lsof.c
+++ b/src/pk-lsof.c
@@ -315,42 +315,3 @@ pk_lsof_new (void)
 	return PK_LSOF (lsof);
 }
 
-/***************************************************************************
- ***                          MAKE CHECK TESTS                           ***
- ***************************************************************************/
-#ifdef EGG_TEST
-#include "egg-test.h"
-
-void
-pk_lsof_test (EggTest *test)
-{
-	gboolean ret;
-	PkLsof *lsof;
-	GPtrArray *pids;
-	gchar *files[] = { "/usr/lib/libssl3.so", NULL };
-
-	if (!egg_test_start (test, "PkLsof"))
-		return;
-
-	/************************************************************/
-	egg_test_title (test, "get an instance");
-	lsof = pk_lsof_new ();
-	egg_test_assert (test, lsof != NULL);
-
-	/************************************************************/
-	egg_test_title (test, "refresh lsof data");
-	ret = pk_lsof_refresh (lsof);
-	egg_test_assert (test, ret);
-
-	/************************************************************/
-	egg_test_title (test, "get pids for files");
-	pids = pk_lsof_get_pids_for_filenames (lsof, files);
-	egg_test_assert (test, pids->len > 0);
-	g_ptr_array_unref (pids);
-
-	g_object_unref (lsof);
-
-	egg_test_end (test);
-}
-#endif
-
diff --git a/src/pk-notify.c b/src/pk-notify.c
index cddc9dc..d533224 100644
--- a/src/pk-notify.c
+++ b/src/pk-notify.c
@@ -190,28 +190,3 @@ pk_notify_new (void)
 	return PK_NOTIFY (pk_notify_object);
 }
 
-/***************************************************************************
- ***                          MAKE CHECK TESTS                           ***
- ***************************************************************************/
-#ifdef EGG_TEST
-#include "egg-test.h"
-
-void
-egg_test_notify (EggTest *test)
-{
-	PkNotify *notify;
-
-	if (!egg_test_start (test, "PkNotify"))
-		return;
-
-	/************************************************************/
-	egg_test_title (test, "get an instance");
-	notify = pk_notify_new ();
-	egg_test_assert (test, notify != NULL);
-
-	g_object_unref (notify);
-
-	egg_test_end (test);
-}
-#endif
-
diff --git a/src/pk-proc.c b/src/pk-proc.c
index ba4aa69..7967d19 100644
--- a/src/pk-proc.c
+++ b/src/pk-proc.c
@@ -341,35 +341,3 @@ pk_proc_new (void)
 	return PK_PROC (proc);
 }
 
-/***************************************************************************
- ***                          MAKE CHECK TESTS                           ***
- ***************************************************************************/
-#ifdef EGG_TEST
-#include "egg-test.h"
-
-void
-pk_proc_test (EggTest *test)
-{
-	gboolean ret;
-	PkProc *proc;
-//	gchar *files[] = { "/sbin/udevd", NULL };
-
-	if (!egg_test_start (test, "PkProc"))
-		return;
-
-	/************************************************************/
-	egg_test_title (test, "get an instance");
-	proc = pk_proc_new ();
-	egg_test_assert (test, proc != NULL);
-
-	/************************************************************/
-	egg_test_title (test, "refresh proc data");
-	ret = pk_proc_refresh (proc);
-	egg_test_assert (test, ret);
-
-	g_object_unref (proc);
-
-	egg_test_end (test);
-}
-#endif
-
diff --git a/src/pk-self-test.c b/src/pk-self-test.c
index 7035ee8..c6c29c4 100644
--- a/src/pk-self-test.c
+++ b/src/pk-self-test.c
@@ -1,6 +1,6 @@
 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
  *
- * Copyright (C) 2007 Richard Hughes <richard at hughsie.com>
+ * Copyright (C) 2007-2010 Richard Hughes <richard at hughsie.com>
  *
  * Licensed under the GNU General Public License Version 2
  *
@@ -19,60 +19,1864 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  */
 
+#include <config.h>
+
 #include <glib.h>
 #include <glib-object.h>
-#include "egg-test.h"
-#include <egg-debug.h>
-
-/* prototypes */
-void egg_string_test (EggTest *test);
-void pk_lsof_test (EggTest *test);
-void pk_proc_test (EggTest *test);
-void pk_conf_test (EggTest *test);
-void pk_store_test (EggTest *test);
-void pk_inhibit_test (EggTest *test);
-void pk_spawn_test (EggTest *test);
-void pk_transaction_list_test (EggTest *test);
-void pk_transaction_db_test (EggTest *test);
-void pk_time_test (EggTest *test);
-void pk_backend_test (EggTest *test);
-void pk_backend_test_spawn (EggTest *test);
-void pk_file_monitor_test (EggTest *test);
-void pk_engine_test (EggTest *test);
+#include <glib/gstdio.h>
+
+#include "pk-backend.h"
+#include "pk-backend-internal.h"
+#include "pk-backend-spawn.h"
+#include "pk-cache.h"
+#include "pk-conf.h"
+#include "pk-dbus.h"
+#include "pk-engine.h"
+#include "pk-file-monitor.h"
+#include "pk-inhibit.h"
+#include "pk-lsof.h"
+#include "pk-notify.h"
+#include "pk-proc.h"
+#include "pk-syslog.h"
+#include "pk-spawn.h"
+#include "pk-time.h"
+#include "pk-transaction-db.h"
+#include "pk-transaction-db.h"
+#include "pk-transaction-extra.h"
+#include "pk-transaction.h"
+#include "pk-transaction-list.h"
+
+/** ver:1.0 ***********************************************************/
+static GMainLoop *_test_loop = NULL;
+static guint _test_loop_timeout_id = 0;
+
+static gboolean
+_g_test_hang_check_cb (gpointer user_data)
+{
+	guint timeout_ms = *((guint*) user_data);
+	g_main_loop_quit (_test_loop);
+	g_warning ("loop not completed in %ims", timeout_ms);
+	g_assert_not_reached ();
+	return FALSE;
+}
+
+/**
+ * _g_test_loop_run_with_timeout:
+ **/
+static void
+_g_test_loop_run_with_timeout (guint timeout_ms)
+{
+	g_assert (_test_loop_timeout_id == 0);
+	_test_loop = g_main_loop_new (NULL, FALSE);
+	_test_loop_timeout_id = g_timeout_add (timeout_ms, _g_test_hang_check_cb, &timeout_ms);
+	g_main_loop_run (_test_loop);
+}
+
+static gboolean
+_g_test_hang_wait_cb (gpointer user_data)
+{
+	g_main_loop_quit (_test_loop);
+	_test_loop_timeout_id = 0;
+	return FALSE;
+}
+
+/**
+ * _g_test_loop_wait:
+ **/
+static void
+_g_test_loop_wait (guint timeout_ms)
+{
+	g_assert (_test_loop_timeout_id == 0);
+	_test_loop = g_main_loop_new (NULL, FALSE);
+	_test_loop_timeout_id = g_timeout_add (timeout_ms, _g_test_hang_wait_cb, &timeout_ms);
+	g_main_loop_run (_test_loop);
+}
+
+/**
+ * _g_test_loop_quit:
+ **/
+static void
+_g_test_loop_quit (void)
+{
+	if (_test_loop_timeout_id > 0) {
+		g_source_remove (_test_loop_timeout_id);
+		_test_loop_timeout_id = 0;
+	}
+	if (_test_loop != NULL) {
+		g_main_loop_quit (_test_loop);
+		g_main_loop_unref (_test_loop);
+		_test_loop = NULL;
+	}
+}
+
+/**********************************************************************/
+
+static guint number_messages = 0;
+static guint number_packages = 0;
+
+/**
+ * pk_test_backend_message_cb:
+ **/
+static void
+pk_test_backend_message_cb (PkBackend *backend, PkMessageEnum message, const gchar *details, gpointer data)
+{
+	egg_debug ("details=%s", details);
+	number_messages++;
+}
+
+/**
+ * pk_test_backend_finished_cb:
+ **/
+static void
+pk_test_backend_finished_cb (PkBackend *backend, PkExitEnum exit, gpointer user_data)
+{
+	_g_test_loop_quit ();
+}
+
+/**
+ * pk_test_backend_watch_file_cb:
+ **/
+static void
+pk_test_backend_watch_file_cb (PkBackend *backend, gpointer user_data)
+{
+	_g_test_loop_quit ();
+}
+
+static gboolean
+pk_test_backend_func_true (PkBackend *backend)
+{
+	g_usleep (1000*1000);
+	/* trigger duplicate test */
+	pk_backend_package (backend, PK_INFO_ENUM_AVAILABLE, "vips-doc;7.12.4-2.fc8;noarch;linva", "The vips documentation package.");
+	pk_backend_package (backend, PK_INFO_ENUM_AVAILABLE, "vips-doc;7.12.4-2.fc8;noarch;linva", "The vips documentation package.");
+	pk_backend_finished (backend);
+	return TRUE;
+}
+
+static gboolean
+pk_test_backend_func_immediate_false (PkBackend *backend)
+{
+	pk_backend_finished (backend);
+	return FALSE;
+}
+
+/**
+ * pk_test_backend_package_cb:
+ **/
+static void
+pk_test_backend_package_cb (PkBackend *backend, PkPackage *package, gpointer user_data)
+{
+	egg_debug ("package:%s", pk_package_get_id (package));
+	number_packages++;
+}
+
+static void
+pk_test_backend_func (void)
+{
+	PkBackend *backend;
+	PkConf *conf;
+	gchar *text;
+	gchar *text_safe;
+	gboolean ret;
+	const gchar *filename;
+	gboolean developer_mode;
+
+	/* get an backend */
+	backend = pk_backend_new ();
+	g_assert (backend != NULL);
+
+	/* connect */
+	g_signal_connect (backend, "package",
+			  G_CALLBACK (pk_test_backend_package_cb), NULL);
+
+	/* create a config file */
+	filename = "/tmp/dave";
+	ret = g_file_set_contents (filename, "foo", -1, NULL);
+	g_assert (ret);
+
+	/* set up a watch file on a config file */
+	ret = pk_backend_watch_file (backend, filename, (PkBackendFileChanged) pk_test_backend_watch_file_cb, NULL);
+	g_assert (ret);
+
+	/* change the config file */
+	ret = g_file_set_contents (filename, "bar", -1, NULL);
+	g_assert (ret);
+
+	/* wait for config file change */
+	_g_test_loop_run_with_timeout (5000);
+
+	/* delete the config file */
+	ret = g_unlink (filename);
+	g_assert (!ret);
+
+	g_signal_connect (backend, "message", G_CALLBACK (pk_test_backend_message_cb), NULL);
+	g_signal_connect (backend, "finished", G_CALLBACK (pk_test_backend_finished_cb), NULL);
+
+	/* get eula that does not exist */
+	ret = pk_backend_is_eula_valid (backend, "license_foo");
+	g_assert (!ret);
+
+	/* accept eula */
+	ret = pk_backend_accept_eula (backend, "license_foo");
+	g_assert (ret);
+
+	/* get eula that does exist */
+	ret = pk_backend_is_eula_valid (backend, "license_foo");
+	g_assert (ret);
+
+	/* accept eula (again) */
+	ret = pk_backend_accept_eula (backend, "license_foo");
+	g_assert (!ret);
+
+	/* load an invalid backend */
+	ret = pk_backend_set_name (backend, "invalid");
+	g_assert (!ret);
+
+	/* try to load a valid backend */
+	ret = pk_backend_set_name (backend, "dummy");
+	g_assert (ret);
+
+	/* load an valid backend again */
+	ret = pk_backend_set_name (backend, "dummy");
+	g_assert (!ret);
+
+	/* lock an valid backend */
+	ret = pk_backend_lock (backend);
+	g_assert (ret);
+
+	/* lock a backend again */
+	ret = pk_backend_lock (backend);
+	g_assert (ret);
+
+	/* get backend name */
+	text = pk_backend_get_name (backend);
+	g_assert_cmpstr (text, ==, "dummy");
+	g_free (text);
+
+	/* unlock an valid backend */
+	ret = pk_backend_unlock (backend);
+	g_assert (ret);
+
+	/* unlock an valid backend again */
+	ret = pk_backend_unlock (backend);
+	g_assert (ret);
+
+	/* check we are not finished */
+	ret = pk_backend_get_is_finished (backend);
+	g_assert (!ret);
+
+	/* check we have no error */
+	ret = pk_backend_has_set_error_code (backend);
+	g_assert (!ret);
+
+	/* lock again */
+	ret = pk_backend_lock (backend);
+	g_assert (ret);
+
+	/* wait for a thread to return true */
+	ret = pk_backend_thread_create (backend, pk_test_backend_func_true);
+	g_assert (ret);
+
+	/* wait for Finished */
+	_g_test_loop_wait (2000);
+
+	/* check duplicate filter */
+	g_assert_cmpint (number_packages, ==, 1);
+
+	/* reset */
+	pk_backend_reset (backend);
+
+	/* wait for a thread to return false (straight away) */
+	ret = pk_backend_thread_create (backend, pk_test_backend_func_immediate_false);
+	g_assert (ret);
+
+	/* wait for Finished */
+	_g_test_loop_wait (10);
+
+	pk_backend_reset (backend);
+	pk_backend_error_code (backend, PK_ERROR_ENUM_GPG_FAILURE, "test error");
+
+	/* wait for finished */
+//	_g_test_loop_run_with_timeout (PK_BACKEND_FINISHED_ERROR_TIMEOUT + 400);
+
+	/* get allow cancel after reset */
+	pk_backend_reset (backend);
+	ret = pk_backend_get_allow_cancel (backend);
+	g_assert (!ret);
+
+	/* set allow cancel TRUE */
+	ret = pk_backend_set_allow_cancel (backend, TRUE);
+	g_assert (ret);
+
+	/* set allow cancel TRUE (repeat) */
+	ret = pk_backend_set_allow_cancel (backend, TRUE);
+	g_assert (!ret);
+
+	/* set allow cancel FALSE */
+	ret = pk_backend_set_allow_cancel (backend, FALSE);
+	g_assert (ret);
+
+	/* set allow cancel FALSE (after reset) */
+	pk_backend_reset (backend);
+	ret = pk_backend_set_allow_cancel (backend, FALSE);
+	g_assert (ret);
+
+	/* if running in developer mode, then expect a Message */
+	conf = pk_conf_new ();
+	developer_mode = pk_conf_get_bool (conf, "DeveloperMode");
+	g_object_unref (conf);
+	if (developer_mode) {
+		/* check we enforce finished after error_code */
+		g_assert_cmpint (number_messages, ==, 1);
+	}
+
+	g_object_unref (backend);
+}
+
+static guint _backend_spawn_number_packages = 0;
+
+/**
+ * pk_test_backend_spawn_finished_cb:
+ **/
+static void
+pk_test_backend_spawn_finished_cb (PkBackend *backend, PkExitEnum exit, PkBackendSpawn *backend_spawn)
+{
+	_g_test_loop_quit ();
+}
+
+/**
+ * pk_test_backend_spawn_package_cb:
+ **/
+static void
+pk_test_backend_spawn_package_cb (PkBackend *backend, PkInfoEnum info,
+				  const gchar *package_id, const gchar *summary,
+				  PkBackendSpawn *backend_spawn)
+{
+	_backend_spawn_number_packages++;
+}
+
+static void
+pk_test_backend_spawn_func (void)
+{
+	PkBackendSpawn *backend_spawn;
+	PkBackend *backend;
+	const gchar *text;
+	guint refcount;
+	gboolean ret;
+	gchar *uri;
+	gchar **array;
+
+	/* get an backend_spawn */
+	backend_spawn = pk_backend_spawn_new ();
+	g_assert (backend_spawn != NULL);
+
+	/* private copy for unref testing */
+	backend = pk_backend_spawn_get_backend (backend_spawn);
+	/* incr ref count so we don't kill the object */
+	g_object_ref (backend);
+
+	/* get backend name */
+	text = pk_backend_spawn_get_name (backend_spawn);
+	g_assert_cmpstr (text, ==, NULL);
+
+	/* set backend name */
+	ret = pk_backend_spawn_set_name (backend_spawn, "test_spawn");
+	g_assert (ret);
+
+	/* get backend name */
+	text = pk_backend_spawn_get_name (backend_spawn);
+	g_assert_cmpstr (text, ==, "test_spawn");
+
+	/* needed to avoid an error */
+	ret = pk_backend_set_name (backend, "test_spawn");
+	g_assert (ret);
+	ret = pk_backend_lock (backend);
+	g_assert (ret);
+
+	/* test pk_backend_spawn_inject_data Percentage1 */
+	ret = pk_backend_spawn_inject_data (backend_spawn, "percentage\t0");
+	g_assert (ret);
+
+	/* test pk_backend_spawn_inject_data Percentage2 */
+	ret = pk_backend_spawn_inject_data (backend_spawn, "percentage\tbrian");
+	g_assert (!ret);
+
+	/* test pk_backend_spawn_inject_data Percentage3 */
+	ret = pk_backend_spawn_inject_data (backend_spawn, "percentage\t12345");
+	g_assert (!ret);
+
+	/* test pk_backend_spawn_inject_data Percentage4 */
+	ret = pk_backend_spawn_inject_data (backend_spawn, "percentage\t");
+	g_assert (!ret);
+
+	/* test pk_backend_spawn_inject_data Percentage5 */
+	ret = pk_backend_spawn_inject_data (backend_spawn, "percentage");
+	g_assert (!ret);
+
+	/* test pk_backend_spawn_inject_data Subpercentage */
+	ret = pk_backend_spawn_inject_data (backend_spawn, "subpercentage\t17");
+	g_assert (ret);
+
+	/* test pk_backend_spawn_inject_data NoPercentageUpdates");
+	ret = pk_backend_spawn_inject_data (backend_spawn, "no-percentage-updates");
+	g_assert (ret);
+
+	/* test pk_backend_spawn_inject_data failure */
+	ret = pk_backend_spawn_inject_data (backend_spawn, "error\tnot-present-woohoo\tdescription text");
+	g_assert (!ret);
+
+	/* test pk_backend_spawn_inject_data Status */
+	ret = pk_backend_spawn_inject_data (backend_spawn, "status\tquery");
+	g_assert (ret);
+
+	/* test pk_backend_spawn_inject_data RequireRestart */
+	ret = pk_backend_spawn_inject_data (backend_spawn, "requirerestart\tsystem\tgnome-power-manager;0.0.1;i386;data");
+	g_assert (ret);
+
+	/* test pk_backend_spawn_inject_data RequireRestart invalid enum */
+	ret = pk_backend_spawn_inject_data (backend_spawn, "requirerestart\tmooville\tgnome-power-manager;0.0.1;i386;data");
+	g_assert (!ret);
+
+	/* test pk_backend_spawn_inject_data RequireRestart invalid PackageId */
+	ret = pk_backend_spawn_inject_data (backend_spawn, "requirerestart\tsystem\tdetails about the restart");
+	g_assert (!ret);
+
+	/* test pk_backend_spawn_inject_data AllowUpdate1 */
+	ret = pk_backend_spawn_inject_data (backend_spawn, "allow-cancel\ttrue");
+	g_assert (ret);
+
+	/* test pk_backend_spawn_inject_data AllowUpdate2 */
+	ret = pk_backend_spawn_inject_data (backend_spawn, "allow-cancel\tbrian");
+	g_assert (!ret);
+
+	/* convert proxy uri (bare) */
+	uri = pk_backend_spawn_convert_uri ("username:password at server:port");
+	g_assert_cmpstr (uri, ==, "http://username:password@server:port/");
+	g_free (uri);
+
+	/* convert proxy uri (full) */
+	uri = pk_backend_spawn_convert_uri ("http://username:password@server:port/");
+	g_assert_cmpstr (uri, ==, "http://username:password@server:port/");
+	g_free (uri);
+
+	/* convert proxy uri (partial) */
+	uri = pk_backend_spawn_convert_uri ("ftp://username:password@server:port");
+	g_assert_cmpstr (uri, ==, "ftp://username:password@server:port/");
+	g_free (uri);
+
+	/* test pk_backend_spawn_parse_common_out Package */
+	ret = pk_backend_spawn_inject_data (backend_spawn,
+		"package\tinstalled\tgnome-power-manager;0.0.1;i386;data\tMore useless software");
+	g_assert (ret);
+
+	/* manually unlock as we have no engine */
+	ret = pk_backend_unlock (backend);
+	g_assert (ret);
+
+	/* reset */
+	g_object_unref (backend_spawn);
+
+	/* test we unref'd all but one of the PkBackend instances */
+	refcount = G_OBJECT(backend)->ref_count;
+	g_assert_cmpint (refcount, ==, 1);
+
+	/* new */
+	backend_spawn = pk_backend_spawn_new ();
+
+	/* set backend name */
+	ret = pk_backend_spawn_set_name (backend_spawn, "test_spawn");
+	g_assert (ret);
+
+	/* so we can spin until we finish */
+	g_signal_connect (backend, "finished",
+			  G_CALLBACK (pk_test_backend_spawn_finished_cb), backend_spawn);
+	/* so we can count the returned packages */
+	g_signal_connect (backend, "package",
+			  G_CALLBACK (pk_test_backend_spawn_package_cb), backend_spawn);
+
+	/* needed to avoid an error */
+	ret = pk_backend_lock (backend);
+
+	/* test search-name.sh running */
+	ret = pk_backend_spawn_helper (backend_spawn, "search-name.sh", "none", "bar", NULL);
+	g_assert (ret);
+
+	/* wait for finished */
+	_g_test_loop_run_with_timeout (10000);
+
+	/* test number of packages */
+	g_assert_cmpint (_backend_spawn_number_packages, ==, 2);
+
+	/* manually unlock as we have no engine */
+	ret = pk_backend_unlock (backend);
+	g_assert (ret);
+
+	/* done */
+	g_object_unref (backend_spawn);
+
+	/* test we unref'd all but one of the PkBackend instances */
+	refcount = G_OBJECT(backend)->ref_count;
+	g_assert_cmpint (refcount, ==, 1);
+
+	/* we ref'd it manually for checking, so we need to unref it */
+	g_object_unref (backend);
+}
+
+static void
+pk_test_cache_func (void)
+{
+	PkCache *cache;
+
+	cache = pk_cache_new ();
+	g_assert (cache != NULL);
+
+	g_object_unref (cache);
+}
+
+static void
+pk_test_conf_func (void)
+{
+	PkConf *conf;
+	gchar *text;
+	gint value;
+
+	conf = pk_conf_new ();
+	g_assert (conf != NULL);
+
+	/* get the default backend */
+	text = pk_conf_get_string (conf, "DefaultBackend");
+	g_assert (text != PK_CONF_VALUE_STRING_MISSING);
+	g_free (text);
+
+	/* get a string that doesn't exist */
+	text = pk_conf_get_string (conf, "FooBarBaz");
+	g_assert (text == PK_CONF_VALUE_STRING_MISSING);
+	g_free (text);
+
+	/* get the shutdown timeout */
+	value = pk_conf_get_int (conf, "ShutdownTimeout");
+	g_assert (value != PK_CONF_VALUE_INT_MISSING);
+
+	/* get an int that doesn't exist */
+	value = pk_conf_get_int (conf, "FooBarBaz");
+	g_assert_cmpint (value, ==, PK_CONF_VALUE_INT_MISSING);
+
+	g_object_unref (conf);
+}
+
+static void
+pk_test_dbus_func (void)
+{
+	PkDbus *dbus;
+
+	dbus = pk_dbus_new ();
+	g_assert (dbus != NULL);
+
+	g_object_unref (dbus);
+}
+
+static PkNotify *notify = NULL;
+static gboolean _quit = FALSE;
+static gboolean _locked = FALSE;
+static gboolean _restart_schedule = FALSE;
+
+/**
+ * pk_test_engine_quit_cb:
+ **/
+static void
+pk_test_engine_quit_cb (PkEngine *engine, gpointer user_data)
+{
+	_quit = TRUE;
+}
+
+/**
+ * pk_test_engine_changed_cb:
+ **/
+static void
+pk_test_engine_changed_cb (PkEngine *engine, gpointer user_data)
+{
+	g_object_get (engine,
+		      "locked", &_locked,
+		      NULL);
+}
+
+/**
+ * pk_test_engine_updates_changed_cb:
+ **/
+static void
+pk_test_engine_updates_changed_cb (PkEngine *engine, gpointer user_data)
+{
+	_g_test_loop_quit ();
+}
+
+/**
+ * pk_test_engine_repo_list_changed_cb:
+ **/
+static void
+pk_test_engine_repo_list_changed_cb (PkEngine *engine, gpointer user_data)
+{
+	_g_test_loop_quit ();
+}
+
+/**
+ * pk_test_engine_restart_schedule_cb:
+ **/
+static void
+pk_test_engine_restart_schedule_cb (PkEngine *engine, gpointer user_data)
+{
+	_restart_schedule = TRUE;
+	_g_test_loop_quit ();
+}
+
+/**
+ * pk_test_engine_emit_updates_changed_cb:
+ **/
+static gboolean
+pk_test_engine_emit_updates_changed_cb (void)
+{
+	PkNotify *notify2;
+	notify2 = pk_notify_new ();
+	pk_notify_updates_changed (notify2);
+	g_object_unref (notify2);
+	return FALSE;
+}
+
+/**
+ * pk_test_engine_emit_repo_list_changed_cb:
+ **/
+static gboolean
+pk_test_engine_emit_repo_list_changed_cb (void)
+{
+	PkNotify *notify2;
+	notify2 = pk_notify_new ();
+	pk_notify_repo_list_changed (notify2);
+	g_object_unref (notify2);
+	return FALSE;
+}
+
+static void
+pk_test_engine_func (void)
+{
+	gboolean ret;
+	PkEngine *engine;
+	PkBackend *backend;
+	PkInhibit *inhibit;
+	guint idle;
+	gchar *state;
+	gdouble elapsed;
+
+	backend = pk_backend_new ();
+	g_assert (backend != NULL);
+
+	notify = pk_notify_new ();
+	g_assert (notify != NULL);
+
+	/* set the type, as we have no pk-main doing this for us */
+	/* set the backend name */
+	ret = pk_backend_set_name (backend, "dummy");
+	g_assert (ret);
+
+	/* get an engine instance */
+	engine = pk_engine_new ();
+	g_assert (engine != NULL);
+
+	/* connect up signals */
+	g_signal_connect (engine, "quit",
+			  G_CALLBACK (pk_test_engine_quit_cb), NULL);
+	g_signal_connect (engine, "changed",
+			  G_CALLBACK (pk_test_engine_changed_cb), NULL);
+	g_signal_connect (engine, "updates-changed",
+			  G_CALLBACK (pk_test_engine_updates_changed_cb), NULL);
+	g_signal_connect (engine, "repo-list-changed",
+			  G_CALLBACK (pk_test_engine_repo_list_changed_cb), NULL);
+	g_signal_connect (engine, "restart-schedule",
+			  G_CALLBACK (pk_test_engine_restart_schedule_cb), NULL);
+
+	/* get idle at startup */
+	idle = pk_engine_get_seconds_idle (engine);
+	g_assert_cmpint (idle, <, 1);
+
+	/* wait 5 seconds */
+	_g_test_loop_wait (5000);
+
+	/* get idle at idle */
+	idle = pk_engine_get_seconds_idle (engine);
+	g_assert_cmpint (idle, <, 6);
+	g_assert_cmpint (idle, >, 4);
+
+	/* get idle after method */
+	pk_engine_get_daemon_state (engine, &state, NULL);
+	g_free (state);
+	idle = pk_engine_get_seconds_idle (engine);
+	g_assert_cmpint (idle, <, 1);
+
+	/* force test notify updates-changed */
+	g_timeout_add (25, (GSourceFunc) pk_test_engine_emit_updates_changed_cb, NULL);
+	_g_test_loop_wait (50);
+
+	/* force test notify repo-list-changed */
+	g_timeout_add (25, (GSourceFunc) pk_test_engine_emit_repo_list_changed_cb, NULL);
+	_g_test_loop_wait (50);
+
+	/* force test notify wait updates-changed */
+	g_test_timer_start ();
+	pk_notify_wait_updates_changed (notify, 500);
+	_g_test_loop_run_with_timeout (1000);
+	elapsed = g_test_timer_elapsed ();
+	g_assert_cmpfloat (elapsed, >, 0.4);
+	g_assert_cmpfloat (elapsed, <, 0.6);
+
+	/* test locked */
+	inhibit = pk_inhibit_new ();
+	pk_inhibit_add (inhibit, GUINT_TO_POINTER (999));
+	g_assert (_locked);
+
+	/* test locked */
+	pk_inhibit_remove (inhibit, GUINT_TO_POINTER (999));
+	g_assert (!_locked);
+	g_object_unref (inhibit);
+
+	/* test not locked */
+	g_assert (!_locked);
+	g_assert (!_restart_schedule);
+
+	ret = g_file_set_contents (SBINDIR "/packagekitd", "overwrite", -1, NULL);
+	g_assert (ret);
+	_g_test_loop_wait (5000);
+
+	/* get idle after we touched the binary */
+	idle = pk_engine_get_seconds_idle (engine);
+	g_assert_cmpint (idle, ==, G_MAXUINT);
+	g_assert (_restart_schedule);
+	g_assert (!_quit);
+
+	/* suggest quit with no transactions (should get quit signal) */
+	pk_engine_suggest_daemon_quit (engine, NULL);
+	g_assert (_quit);
+
+	g_object_unref (backend);
+	g_object_unref (notify);
+	g_object_unref (engine);
+}
+
+static void
+pk_test_file_monitor_func (void)
+{
+	PkFileMonitor *file_monitor;
+
+	/* get a file_monitor */
+	file_monitor = pk_file_monitor_new ();
+	g_assert (file_monitor != NULL);
+	g_object_unref (file_monitor);
+}
+
+static void
+pk_test_inhibit_func (void)
+{
+	PkInhibit *inhibit;
+	gboolean ret;
+
+	inhibit = pk_inhibit_new ();
+	g_assert (inhibit != NULL);
+
+	/* check we are not inhibited */
+	ret = pk_inhibit_locked (inhibit);
+	g_assert (!ret);
+
+	/* add 123 */
+	ret = pk_inhibit_add (inhibit, GUINT_TO_POINTER (123));
+	g_assert (ret);
+
+	/* check we are inhibited */
+	ret = pk_inhibit_locked (inhibit);
+	g_assert (ret);
+
+	/* add 123 (again) */
+	ret = pk_inhibit_add (inhibit, GUINT_TO_POINTER (123));
+	g_assert (!ret);
+
+	/* add 456 */
+	ret = pk_inhibit_add (inhibit, GUINT_TO_POINTER (456));
+	g_assert (ret);
+
+	/* remove 123" */
+	ret = pk_inhibit_remove (inhibit, GUINT_TO_POINTER (123));
+	g_assert (ret);
+
+	/* check we are still inhibited */
+	ret = pk_inhibit_locked (inhibit);
+	g_assert (ret);
+
+	/* remove 456 */
+	ret = pk_inhibit_remove (inhibit, GUINT_TO_POINTER (456));
+	g_assert (ret);
+
+	/* check we are not inhibited */
+	ret = pk_inhibit_locked (inhibit);
+	g_assert (!ret);
+
+	g_object_unref (inhibit);
+}
+
+static void
+pk_test_lsof_func (void)
+{
+	gboolean ret;
+	PkLsof *lsof;
+	GPtrArray *pids;
+	gchar *files[] = { "/usr/lib/libssl3.so", NULL };
+
+	lsof = pk_lsof_new ();
+	g_assert (lsof != NULL);
+
+	/* refresh lsof data */
+	ret = pk_lsof_refresh (lsof);
+	g_assert (ret);
+
+	/* get pids for files */
+	pids = pk_lsof_get_pids_for_filenames (lsof, files);
+	g_assert_cmpint (pids->len, >, 0);
+	g_ptr_array_unref (pids);
+
+	g_object_unref (lsof);
+}
+
+static void
+pk_test_notify_func (void)
+{
+	PkNotify *notify;
+
+	notify = pk_notify_new ();
+	g_assert (notify != NULL);
+
+	g_object_unref (notify);
+}
+
+static void
+pk_test_proc_func (void)
+{
+	gboolean ret;
+	PkProc *proc;
+//	gchar *files[] = { "/sbin/udevd", NULL };
+
+	proc = pk_proc_new ();
+	g_assert (proc != NULL);
+
+	/* refresh proc data */
+	ret = pk_proc_refresh (proc);
+	g_assert (ret);
+
+	g_object_unref (proc);
+}
+
+PkSpawnExitType mexit = PK_SPAWN_EXIT_TYPE_UNKNOWN;
+guint stdout_count = 0;
+guint finished_count = 0;
+
+/**
+ * pk_test_exit_cb:
+ **/
+static void
+pk_test_exit_cb (PkSpawn *spawn, PkSpawnExitType exit, gpointer user_data)
+{
+	egg_debug ("spawn exit=%i", exit);
+	mexit = exit;
+	finished_count++;
+	_g_test_loop_quit ();
+}
+
+/**
+ * pk_test_stdout_cb:
+ **/
+static void
+pk_test_stdout_cb (PkSpawn *spawn, const gchar *line, gpointer user_data)
+{
+	egg_debug ("stdout '%s'", line);
+	stdout_count++;
+}
+
+static gboolean
+cancel_cb (gpointer data)
+{
+	PkSpawn *spawn = PK_SPAWN(data);
+	pk_spawn_kill (spawn);
+	return FALSE;
+}
+
+static void
+new_spawn_object (PkSpawn **pspawn)
+{
+	if (*pspawn != NULL)
+		g_object_unref (*pspawn);
+	*pspawn = pk_spawn_new ();
+	g_signal_connect (*pspawn, "exit",
+			  G_CALLBACK (pk_test_exit_cb), NULL);
+	g_signal_connect (*pspawn, "stdout",
+			  G_CALLBACK (pk_test_stdout_cb), NULL);
+	stdout_count = 0;
+}
+
+static gboolean
+idle_cb (gpointer user_data)
+{
+	/* make sure dispatcher has closed when run idle add */
+	g_assert_cmpint (mexit, ==, PK_SPAWN_EXIT_TYPE_DISPATCHER_EXIT);
+	return FALSE;
+}
+
+static void
+pk_test_spawn_func (void)
+{
+	PkSpawn *spawn = NULL;
+	GError *error = NULL;
+	gboolean ret;
+	gchar *file;
+	gchar **argv;
+	gchar **envp;
+	guint elapsed;
+
+	new_spawn_object (&spawn);
+
+	/* make sure return error for missing file */
+	mexit = PK_SPAWN_EXIT_TYPE_UNKNOWN;
+	argv = g_strsplit ("pk-spawn-test-xxx.sh", " ", 0);
+	ret = pk_spawn_argv (spawn, argv, NULL, &error);
+	g_assert_error (error, 1, 0);
+	g_strfreev (argv);
+	g_assert (!ret);
+	g_clear_error (&error);
+
+	/* make sure finished wasn't called */
+	g_assert_cmpint (mexit, ==, PK_SPAWN_EXIT_TYPE_UNKNOWN);
+
+	/* make sure run correct helper */
+	mexit = -1;
+	argv = g_strsplit (TESTDATADIR "/pk-spawn-test.sh", " ", 0);
+	ret = pk_spawn_argv (spawn, argv, NULL, &error);
+	g_assert_no_error (error);
+	g_assert (ret);
+	g_strfreev (argv);
+
+	/* wait for finished */
+	_g_test_loop_run_with_timeout (10000);
+
+	/* make sure finished okay */
+	g_assert_cmpint (mexit, ==, PK_SPAWN_EXIT_TYPE_SUCCESS);
+
+	/* make sure finished was called only once */
+	g_assert_cmpint (finished_count, ==, 1);
+
+	/* make sure we got the right stdout data */
+	g_assert_cmpint (stdout_count, ==, 4+11);
+
+	/* get new object */
+	new_spawn_object (&spawn);
+
+	/* make sure we set the proxy */
+	mexit = -1;
+	argv = g_strsplit (TESTDATADIR "/pk-spawn-proxy.sh", " ", 0);
+	envp = g_strsplit ("http_proxy=username:password at server:port "
+			   "ftp_proxy=username:password at server:port", " ", 0);
+	ret = pk_spawn_argv (spawn, argv, envp, &error);
+	g_assert_no_error (error);
+	g_assert (ret);
+	g_strfreev (argv);
+	g_strfreev (envp);
+
+	/* wait for finished */
+	_g_test_loop_run_with_timeout (10000);
+
+	/* get new object */
+	new_spawn_object (&spawn);
+
+	/* make sure run correct helper, and cancel it using SIGKILL */
+	mexit = PK_SPAWN_EXIT_TYPE_UNKNOWN;
+	argv = g_strsplit (TESTDATADIR "/pk-spawn-test.sh", " ", 0);
+	ret = pk_spawn_argv (spawn, argv, NULL, &error);
+	g_assert_no_error (error);
+	g_assert (ret);
+	g_strfreev (argv);
+
+	g_timeout_add_seconds (1, cancel_cb, spawn);
+	/* wait for finished */
+	_g_test_loop_run_with_timeout (5000);
+
+	/* make sure finished in SIGKILL */
+	g_assert_cmpint (mexit, ==, PK_SPAWN_EXIT_TYPE_SIGKILL);
+
+	/* get new object */
+	new_spawn_object (&spawn);
+
+	/* make sure dumb helper ignores SIGQUIT */
+	mexit = PK_SPAWN_EXIT_TYPE_UNKNOWN;
+	argv = g_strsplit (TESTDATADIR "/pk-spawn-test.sh", " ", 0);
+	g_object_set (spawn,
+		      "allow-sigkill", FALSE,
+		      NULL);
+	ret = pk_spawn_argv (spawn, argv, NULL, &error);
+	g_assert_no_error (error);
+	g_assert (ret);
+	g_strfreev (argv);
+
+	g_timeout_add_seconds (1, cancel_cb, spawn);
+	/* wait for finished */
+	_g_test_loop_run_with_timeout (10000);
+
+	/* make sure finished in SIGQUIT */
+	g_assert_cmpint (mexit, ==, PK_SPAWN_EXIT_TYPE_SIGQUIT);
+
+	/* get new object */
+	new_spawn_object (&spawn);
+
+	/* make sure run correct helper, and SIGQUIT it */
+	mexit = PK_SPAWN_EXIT_TYPE_UNKNOWN;
+	argv = g_strsplit (TESTDATADIR "/pk-spawn-test-sigquit.py", " ", 0);
+	ret = pk_spawn_argv (spawn, argv, NULL, &error);
+	g_assert_no_error (error);
+	g_assert (ret);
+	g_strfreev (argv);
+
+	g_timeout_add (1000, cancel_cb, spawn);
+	/* wait for finished */
+	_g_test_loop_run_with_timeout (2000);
+
+	/* make sure finished in SIGQUIT */
+	g_assert_cmpint (mexit, ==, PK_SPAWN_EXIT_TYPE_SIGQUIT);
+
+	/* run lots of data for profiling */
+	argv = g_strsplit (TESTDATADIR "/pk-spawn-test-profiling.sh", " ", 0);
+	ret = pk_spawn_argv (spawn, argv, NULL, &error);
+	g_assert_no_error (error);
+	g_assert (ret);
+	g_strfreev (argv);
+
+	/* get new object */
+	new_spawn_object (&spawn);
+
+	/* run the dispatcher */
+	mexit = PK_SPAWN_EXIT_TYPE_UNKNOWN;
+	argv = g_strsplit (TESTDATADIR "/pk-spawn-dispatcher.py\tsearch-name\tnone\tpower manager", "\t", 0);
+	envp = g_strsplit ("NETWORK=TRUE LANG=C BACKGROUND=TRUE INTERACTIVE=TRUE", " ", 0);
+	ret = pk_spawn_argv (spawn, argv, envp, &error);
+	g_assert_no_error (error);
+	g_assert (ret);
+
+	/* wait 2+2 seconds for the dispatcher */
+	_g_test_loop_wait (4000);
+
+	/* we got a package (+finished)? */
+	g_assert_cmpint (stdout_count, ==, 2);
+
+	/* dispatcher still alive? */
+	g_assert (pk_spawn_is_running (spawn));
+
+	/* run the dispatcher with new input */
+	ret = pk_spawn_argv (spawn, argv, envp, &error);
+	g_assert_no_error (error);
+	g_assert (ret);
+
+	/* this may take a while */
+	_g_test_loop_wait (100);
+
+	/* we got another package (and finished) */
+	g_assert_cmpint (stdout_count, ==, 4);
+
+	/* see if pk_spawn_exit blocks (required) */
+	g_idle_add (idle_cb, NULL);
+
+	/* ask dispatcher to close */
+	ret = pk_spawn_exit (spawn);
+	g_assert (ret);
+
+	/* ask dispatcher to close (again, should be closing) */
+	ret = pk_spawn_exit (spawn);
+	g_assert (!ret);
+
+	/* this may take a while */
+	_g_test_loop_wait (100);
+
+	/* did dispatcher close? */
+	g_assert (!pk_spawn_is_running (spawn));
+
+	/* did we get the right exit code */
+	g_assert_cmpint (mexit, ==, PK_SPAWN_EXIT_TYPE_DISPATCHER_EXIT);
+
+	/* ask dispatcher to close (again) */
+	ret = pk_spawn_exit (spawn);
+	g_assert (!ret);
+
+	g_strfreev (argv);
+	g_strfreev (envp);
+	g_object_unref (spawn);
+}
+
+static void
+pk_test_store_func (void)
+{
+	PkStore *store;
+	gboolean ret;
+	const gchar *data_string;
+	guint data_uint;
+	gboolean data_bool;
+
+	store = pk_store_new ();
+	g_assert (store != NULL);
+
+	/* set a blank string */
+	ret = pk_store_set_string (store, "dave2", "");
+	g_assert (ret);
+
+	/* set a ~bool */
+	ret = pk_store_set_bool (store, "roger2", FALSE);
+	g_assert (ret);
+
+	/* set a zero uint */
+	ret = pk_store_set_uint (store, "linda2", 0);
+	g_assert (ret);
+
+	/* get a blank string */
+	data_string = pk_store_get_string (store, "dave2");
+	g_assert_cmpstr (data_string, ==, "");
+
+	/* get a ~bool */
+	data_bool = pk_store_get_bool (store, "roger2");
+	g_assert (!data_bool);
+
+	/* get a zero uint */
+	data_uint = pk_store_get_uint (store, "linda2");
+	g_assert_cmpint (data_uint, ==, 0);
+
+	/* set a string */
+	ret = pk_store_set_string (store, "dave", "ania");
+	g_assert (ret);
+
+	/* set a bool */
+	ret = pk_store_set_bool (store, "roger", TRUE);
+	g_assert (ret);
+
+	/* set a uint */
+	ret = pk_store_set_uint (store, "linda", 999);
+	g_assert (ret);
+
+	/* get a string */
+	data_string = pk_store_get_string (store, "dave");
+	g_assert_cmpstr (data_string, ==, "ania");
+
+	/* get a bool */
+	data_bool = pk_store_get_bool (store, "roger");
+	g_assert (data_bool);
+
+	/* get a uint */
+	data_uint = pk_store_get_uint (store, "linda");
+	g_assert_cmpint (data_uint, ==, 999);
+
+	g_object_unref (store);
+}
+
+static void
+pk_test_syslog_func (void)
+{
+	PkSyslog *syslog;
+
+	syslog = pk_syslog_new ();
+	g_assert (syslog != NULL);
+
+	g_object_unref (syslog);
+}
+
+static void
+pk_test_time_func (void)
+{
+	PkTime *pktime = NULL;
+	gboolean ret;
+	guint value;
+
+	pktime = pk_time_new ();
+	g_assert (pktime != NULL);
+
+	/* get elapsed correctly at startup */
+	value = pk_time_get_elapsed (pktime);
+	g_assert_cmpint (value, <, 10);
+
+	/* ignore remaining correctly */
+	value = pk_time_get_remaining (pktime);
+	g_assert_cmpint (value, ==, 0);
+
+	g_usleep (1000*1000);
+
+	/* get elapsed correctly */
+	value = pk_time_get_elapsed (pktime);
+	g_assert_cmpint (value, >, 900);
+	g_assert_cmpint (value, <, 1100);
+
+	/* ignore remaining correctly when not enough entries */
+	value = pk_time_get_remaining (pktime);
+	g_assert_cmpint (value, ==, 0);
+
+	/* make sure we can add data */
+	ret = pk_time_add_data (pktime, 10);
+	g_assert (ret);
+
+	/* make sure we can get remaining correctly */
+	value = 20;
+	while (value < 60) {
+		pk_time_advance_clock (pktime, 2000);
+		pk_time_add_data (pktime, value);
+		value += 10;
+	}
+	value = pk_time_get_remaining (pktime);
+	g_assert_cmpint (value, >, 9);
+	g_assert_cmpint (value, <, 11);
+
+	/* reset */
+	g_object_unref (pktime);
+	pktime = pk_time_new ();
+
+	/* make sure we can do long times */
+	value = 10;
+	pk_time_add_data (pktime, 0);
+	while (value < 60) {
+		pk_time_advance_clock (pktime, 4*60*1000);
+		pk_time_add_data (pktime, value);
+		value += 10;
+	}
+	value = pk_time_get_remaining (pktime);
+	g_assert_cmpint (value, >=, 1199);
+	g_assert_cmpint (value, <=, 1201);
+
+	g_object_unref (pktime);
+}
+
+static void
+pk_test_transaction_func (void)
+{
+	PkTransaction *transaction = NULL;
+	gboolean ret;
+	GError *error = NULL;
+
+	/* get PkTransaction object */
+	transaction = pk_transaction_new ();
+	g_assert (transaction != NULL);
+
+	/* test a fail filter (null) */
+	ret = pk_transaction_filter_check (NULL, &error);
+	g_assert_error (error, PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_INPUT_INVALID);
+	g_assert (!ret);
+	g_clear_error (&error);
+
+	/* test a fail filter () */
+	ret = pk_transaction_filter_check ("", &error);
+	g_assert_error (error, PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_INPUT_INVALID);
+	g_assert (!ret);
+	g_clear_error (&error);
+
+	/* test a fail filter (;) */
+	ret = pk_transaction_filter_check (";", &error);
+	g_assert_error (error, PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_INPUT_INVALID);
+	g_assert (!ret);
+	g_clear_error (&error);
+
+	/* test a fail filter (invalid) */
+	ret = pk_transaction_filter_check ("moo", &error);
+	g_assert_error (error, PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_INPUT_INVALID);
+	g_assert (!ret);
+
+	g_clear_error (&error);
+
+	/* test a fail filter (invalid, multiple) */
+	ret = pk_transaction_filter_check ("moo;foo", &error);
+	g_assert_error (error, PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_INPUT_INVALID);
+	g_assert (!ret);
+	g_clear_error (&error);
+
+	/* test a fail filter (valid then zero length) */
+	ret = pk_transaction_filter_check ("gui;;", &error);
+	g_assert_error (error, PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_INPUT_INVALID);
+	g_assert (!ret);
+	g_clear_error (&error);
+
+	/* test a pass filter (none) */
+	ret = pk_transaction_filter_check ("none", &error);
+	g_assert_no_error (error);
+	g_assert (ret);
+	g_clear_error (&error);
+
+	/* test a pass filter (single) */
+	ret = pk_transaction_filter_check ("gui", &error);
+	g_assert_no_error (error);
+	g_assert (ret);
+	g_clear_error (&error);
+
+	/* test a pass filter (multiple) */
+	ret = pk_transaction_filter_check ("devel;~gui", &error);
+	g_assert_no_error (error);
+	g_assert (ret);
+	g_clear_error (&error);
+
+	/* test a pass filter (multiple2) */
+	ret = pk_transaction_filter_check ("~gui;~installed", &error);
+	g_assert_no_error (error);
+	g_assert (ret);
+	g_clear_error (&error);
+
+	/* validate incorrect text */
+	ret = pk_transaction_strvalidate ("richard$hughes", &error);
+	g_assert_error (error, PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_INPUT_INVALID);
+	g_assert (!ret);
+	g_clear_error (&error);
+
+	/* validate correct text */
+	ret = pk_transaction_strvalidate ("richardhughes", &error);
+	g_assert_no_error (error);
+	g_assert (ret);
+	g_clear_error (&error);
+
+	g_object_unref (transaction);
+}
+
+static void
+pk_test_transaction_db_func (void)
+{
+	PkTransactionDb *db;
+	guint value;
+	gchar *tid;
+	gboolean ret;
+	gdouble ms;
+	gchar *proxy_http = NULL;
+	gchar *proxy_ftp = NULL;
+	gchar *root = NULL;
+	guint seconds;
+
+	/* remove the self check file */
+#if PK_BUILD_LOCAL
+	ret = g_file_test (PK_TRANSACTION_DB_FILE, G_FILE_TEST_EXISTS);
+	if (ret) {
+		/* remove old local database */
+		egg_warning ("Removing %s", PK_TRANSACTION_DB_FILE);
+		value = g_unlink (PK_TRANSACTION_DB_FILE);
+		g_assert (value == 0);
+	}
+#endif
+
+	/* check we created quickly */
+	g_test_timer_start ();
+	db = pk_transaction_db_new ();
+	ms = g_test_timer_elapsed ();
+	g_assert_cmpfloat (ms, <, 1.5);
+	g_object_unref (db);
+
+	/* check we opened quickly */
+	g_test_timer_start ();
+	db = pk_transaction_db_new ();
+	ms = g_test_timer_elapsed ();
+	g_assert_cmpfloat (ms, <, 0.1);
+
+	/* do we get the correct time on a blank database */
+	value = pk_transaction_db_action_time_since (db, PK_ROLE_ENUM_REFRESH_CACHE);
+	g_assert_cmpint (value, ==, G_MAXUINT);
+
+	/* get an tid object */
+	g_test_timer_start ();
+	tid = pk_transaction_db_generate_id (db);
+	ms = g_test_timer_elapsed ();
+	g_assert_cmpfloat (ms, <, 0.001);
+	g_free (tid);
+
+	/* get an tid object (no wait) */
+	g_test_timer_start ();
+	tid = pk_transaction_db_generate_id (db);
+	ms = g_test_timer_elapsed ();
+	g_assert_cmpfloat (ms, <, 0.005);
+	g_free (tid);
+
+	/* set the correct time */
+	ret = pk_transaction_db_action_time_reset (db, PK_ROLE_ENUM_REFRESH_CACHE);
+	g_assert (ret);
+
+	/* do the deferred write */
+	g_test_timer_start ();
+	while (g_main_context_pending (NULL))
+		g_main_context_iteration (NULL, TRUE);
+	ms = g_test_timer_elapsed ();
+	g_assert_cmpfloat (ms, >, 0.001);
+
+	g_usleep (2*1000*1000);
+
+	/* do we get the correct time */
+	value = pk_transaction_db_action_time_since (db, PK_ROLE_ENUM_REFRESH_CACHE);
+	g_assert_cmpint (value, >, 1);
+	g_assert_cmpint (value, <=, 4);
+
+	/* can we set the proxies */
+	ret = pk_transaction_db_set_proxy (db, 500, "session1", "127.0.0.1:80", "127.0.0.1:21");
+	g_assert (ret);
+
+	/* can we set the proxies (overwrite) */
+	ret = pk_transaction_db_set_proxy (db, 500, "session1", "127.0.0.1:8000", "127.0.0.1:21");
+	g_assert (ret);
+
+	/* can we get the proxies (non-existant user) */
+	ret = pk_transaction_db_get_proxy (db, 501, "session1", &proxy_http, &proxy_ftp);
+	g_assert (!ret);
+	g_assert_cmpstr (proxy_http, ==, NULL);
+	g_assert_cmpstr (proxy_ftp, ==, NULL);
+
+	/* can we get the proxies (non-existant session) */
+	ret = pk_transaction_db_get_proxy (db, 500, "session2", &proxy_http, &proxy_ftp);
+	g_assert (!ret);
+	g_assert_cmpstr (proxy_http, ==, NULL);
+	g_assert_cmpstr (proxy_ftp, ==, NULL);
+
+	/* can we get the proxies (match) */
+	ret = pk_transaction_db_get_proxy (db, 500, "session1", &proxy_http, &proxy_ftp);
+	g_assert (ret);
+	g_assert_cmpstr (proxy_http, ==, "127.0.0.1:8000");
+	g_assert_cmpstr (proxy_ftp, ==, "127.0.0.1:21");
+
+	/* can we set the root */
+	ret = pk_transaction_db_set_root (db, 500, "session1", "/mnt/chroot");
+	g_assert (ret);
+
+	/* can we set the root (overwrite) */
+	ret = pk_transaction_db_set_root (db, 500, "session1", "/mnt/chroot2");
+	g_assert (ret);
+
+	/* can we get the root (non-existant user) */
+	ret = pk_transaction_db_get_root (db, 501, "session1", &root);
+	g_assert (!ret);
+	g_assert_cmpstr (root, ==, NULL);
+
+	/* can we get the root (match) */
+	ret = pk_transaction_db_get_root (db, 500, "session1", &root);
+	g_assert_cmpstr (root, ==, "/mnt/chroot2");
+
+	g_free (root);
+	g_free (proxy_http);
+	g_free (proxy_ftp);
+	g_object_unref (db);
+}
+
+static void
+pk_test_transaction_extra_func (void)
+{
+	PkTransactionExtra *extra;
+
+	extra = pk_transaction_extra_new ();
+	g_assert (extra != NULL);
+
+	g_object_unref (extra);
+}
+
+static PkTransactionDb *db = NULL;
+
+/**
+ * pk_test_transaction_list_finished_cb:
+ **/
+static void
+pk_test_transaction_list_finished_cb (PkTransaction *transaction, const gchar *exit_text, guint time, gpointer user_data)
+{
+	_g_test_loop_quit ();
+}
+
+/**
+ * pk_test_transaction_list_create_transaction:
+ **/
+static gchar *
+pk_test_transaction_list_create_transaction (PkTransactionList *tlist)
+{
+	gchar *tid;
+
+	/* get tid */
+	tid = pk_transaction_db_generate_id (db);
+
+	/* create PkTransaction instance */
+	pk_transaction_list_create (tlist, tid, ":0", NULL);
+
+	return tid;
+}
+
+static void
+pk_test_transaction_list_func (void)
+{
+	PkTransactionList *tlist;
+	PkCache *cache;
+	gboolean ret;
+	gchar *tid;
+	guint size;
+	gchar **array;
+	PkTransaction *transaction;
+	gchar *tid_item1;
+	gchar *tid_item2;
+	gchar *tid_item3;
+	gboolean running, committed, finished;
+
+	/* remove the self check file */
+#if PK_BUILD_LOCAL
+	ret = g_file_test ("./transactions.db", G_FILE_TEST_EXISTS);
+	if (ret) {
+		/* remove old local database */
+		egg_warning ("Removing %s", "./transactions.db");
+		size = g_unlink ("./transactions.db");
+		g_assert (size == 0);
+	}
+#endif
+
+	/* we get a cache object to reproduce the engine having it ref'd */
+	cache = pk_cache_new ();
+	db = pk_transaction_db_new ();
+
+	/* get a transaction list object */
+	tlist = pk_transaction_list_new ();
+	g_assert (tlist != NULL);
+
+	/* make sure we get a valid tid */
+	tid = pk_transaction_db_generate_id (db);
+	g_assert (tid != NULL);
+
+	/* create a transaction object */
+	ret = pk_transaction_list_create (tlist, tid, ":0", NULL);
+	g_assert (ret);
+
+	/* make sure we get the right object back */
+	transaction = pk_transaction_list_get_transaction (tlist, tid, &running, &committed, &finished);
+	g_assert (transaction != NULL);
+	g_assert (!running);
+	g_assert (!committed);
+	g_assert (!finished);
+
+	/* get size one we have in queue */
+	size = pk_transaction_list_get_size (tlist);
+	g_assert_cmpint (size, ==, 1);
+
+	/* get transactions (committed, not finished) in progress */
+	array = pk_transaction_list_get_array (tlist);
+	size = g_strv_length (array);
+	g_assert_cmpint (size, ==, 0);
+	g_strfreev (array);
+
+	/* add again the same tid (should fail) */
+	ret = pk_transaction_list_create (tlist, tid, ":0", NULL);
+	g_assert (!ret);
+
+	/* remove without ever committing */
+	ret = pk_transaction_list_remove (tlist, tid);
+	g_assert (ret);
+
+	/* get size none we have in queue */
+	size = pk_transaction_list_get_size (tlist);
+	g_assert_cmpint (size, ==, 0);
+
+	/* get a new tid */
+	g_free (tid);
+	tid = pk_transaction_db_generate_id (db);
+
+	/* create another transaction */
+	ret = pk_transaction_list_create (tlist, tid, ":0", NULL);
+	g_assert (ret);
+
+	PkBackend *backend;
+	backend = pk_backend_new ();
+	/* try to load a valid backend */
+	ret = pk_backend_set_name (backend, "dummy");
+	g_assert (ret);
+
+	/* lock an valid backend */
+	ret = pk_backend_lock (backend);
+	g_assert (ret);
+
+	/* get from db */
+	transaction = pk_transaction_list_get_transaction (tlist, tid, NULL, NULL, NULL);
+	g_assert (transaction != NULL);
+	g_signal_connect (transaction, "finished",
+			  G_CALLBACK (pk_test_transaction_list_finished_cb), NULL);
+
+	/* this tests the run-on-commit action */
+	pk_transaction_get_updates (transaction, "none", NULL);
+
+	/* make sure transaction has correct flags */
+	pk_transaction_list_get_transaction (tlist, tid, &running, &committed, &finished);
+	g_assert (running);
+	g_assert (committed);
+	g_assert (!finished);
+
+	/* get present role */
+	ret = pk_transaction_list_role_present (tlist, PK_ROLE_ENUM_GET_UPDATES);
+	g_assert (ret);
+
+	/* get non-present role */
+	ret = pk_transaction_list_role_present (tlist, PK_ROLE_ENUM_SEARCH_NAME);
+	g_assert (!ret);
+
+	/* get size we have in queue */
+	size = pk_transaction_list_get_size (tlist);
+	g_assert_cmpint (size, ==, 1);
+
+	/* get transactions (committed, not finished) in progress */
+	array = pk_transaction_list_get_array (tlist);
+	size = g_strv_length (array);
+	g_assert_cmpint (size, ==, 1);
+	g_strfreev (array);
+
+	/* wait for Finished */
+	_g_test_loop_run_with_timeout (2000);
+
+	/* get size one we have in queue */
+	size = pk_transaction_list_get_size (tlist);
+	g_assert_cmpint (size, ==, 1);
+
+	/* get transactions (committed, not finished) in progress (none) */
+	array = pk_transaction_list_get_array (tlist);
+	size = g_strv_length (array);
+	g_assert_cmpint (size, ==, 0);
+	g_strfreev (array);
+
+	/* remove already removed */
+	ret = pk_transaction_list_remove (tlist, tid);
+	g_assert (!ret);
+
+	/* wait for Cleanup */
+	_g_test_loop_wait (10000);
+
+	/* make sure queue empty */
+	size = pk_transaction_list_get_size (tlist);
+	g_assert_cmpint (size, ==, 0);
+
+	g_free (tid);
+
+	tid = pk_test_transaction_list_create_transaction (tlist);
+	transaction = pk_transaction_list_get_transaction (tlist, tid, NULL, NULL, NULL);
+	g_signal_connect (transaction, "finished",
+			  G_CALLBACK (pk_test_transaction_list_finished_cb), NULL);
+
+	pk_transaction_get_updates (transaction, "none", NULL);
+
+	/* wait for cached results*/
+	_g_test_loop_run_with_timeout (1000);
+
+	/* make sure transaction has correct flags */
+	pk_transaction_list_get_transaction (tlist, tid, &running, &committed, &finished);
+	g_assert (!running);
+	g_assert (committed);
+	g_assert (finished);
+
+	/* get transactions (committed, not finished) in progress (none, as cached) */
+	array = pk_transaction_list_get_array (tlist);
+	size = g_strv_length (array);
+	g_assert_cmpint (size, ==, 0);
+	g_strfreev (array);
+
+	/* get size we have in queue */
+	size = pk_transaction_list_get_size (tlist);
+	g_assert_cmpint (size, ==, 1);
+
+	/* wait for Cleanup */
+	_g_test_loop_wait (10000);
+
+	/* get transactions (committed, not finished) in progress (none, as cached) */
+	array = pk_transaction_list_get_array (tlist);
+	size = g_strv_length (array);
+	g_assert_cmpint (size, ==, 0);
+	g_strfreev (array);
+
+	/* get size we have in queue */
+	size = pk_transaction_list_get_size (tlist);
+	g_assert_cmpint (size, ==, 0);
+
+	/* create three instances in list */
+	tid_item1 = pk_test_transaction_list_create_transaction (tlist);
+	tid_item2 = pk_test_transaction_list_create_transaction (tlist);
+	tid_item3 = pk_test_transaction_list_create_transaction (tlist);
+
+	/* get all transactions in queue */
+	size = pk_transaction_list_get_size (tlist);
+	g_assert_cmpint (size, ==, 3);
+
+	/* get transactions (committed, not finished) committed */
+	array = pk_transaction_list_get_array (tlist);
+	size = g_strv_length (array);
+	g_assert_cmpint (size, ==, 0);
+	g_strfreev (array);
+
+	transaction = pk_transaction_list_get_transaction (tlist, tid_item1, NULL, NULL, NULL);
+	g_signal_connect (transaction, "finished",
+			  G_CALLBACK (pk_test_transaction_list_finished_cb), NULL);
+	transaction = pk_transaction_list_get_transaction (tlist, tid_item2, NULL, NULL, NULL);
+	g_signal_connect (transaction, "finished",
+			  G_CALLBACK (pk_test_transaction_list_finished_cb), NULL);
+	transaction = pk_transaction_list_get_transaction (tlist, tid_item3, NULL, NULL, NULL);
+	g_signal_connect (transaction, "finished",
+			  G_CALLBACK (pk_test_transaction_list_finished_cb), NULL);
+
+	/* this starts one action */
+	array = g_strsplit ("dave", " ", -1);
+	transaction = pk_transaction_list_get_transaction (tlist, tid_item1, NULL, NULL, NULL);
+	pk_transaction_search_details (transaction, "none", array, NULL);
+	g_strfreev (array);
+
+	/* this should be chained after the first action completes */
+	array = g_strsplit ("power", " ", -1);
+	transaction = pk_transaction_list_get_transaction (tlist, tid_item2, NULL, NULL, NULL);
+	pk_transaction_search_names (transaction, "none", array, NULL);
+	g_strfreev (array);
+
+	/* this starts be chained after the second action completes */
+	array = g_strsplit ("paul", " ", -1);
+	transaction = pk_transaction_list_get_transaction (tlist, tid_item3, NULL, NULL, NULL);
+	pk_transaction_search_details (transaction, "none", array, NULL);
+	g_strfreev (array);
+
+	/* get transactions (committed, not finished) in progress (all) */
+	array = pk_transaction_list_get_array (tlist);
+	size = g_strv_length (array);
+	g_assert_cmpint (size, ==, 3);
+	g_strfreev (array);
+
+	/* wait for first action */
+	_g_test_loop_run_with_timeout (10000);
+
+	/* get all transactions in queue */
+	size = pk_transaction_list_get_size (tlist);
+	g_assert_cmpint (size, ==, 3);
+
+	/* get transactions (committed, not finished) (two, first one finished) */
+	array = pk_transaction_list_get_array (tlist);
+	size = g_strv_length (array);
+	g_assert_cmpint (size, ==, 2);
+	g_strfreev (array);
+
+	/* make sure transaction1 has correct flags */
+	pk_transaction_list_get_transaction (tlist, tid_item1, &running, &committed, &finished);
+	g_assert (!running);
+	g_assert (committed);
+	g_assert (finished);
+
+	/* make sure transaction2 has correct flags */
+	pk_transaction_list_get_transaction (tlist, tid_item2, &running, &committed, &finished);
+	g_assert (running);
+	g_assert (committed);
+	g_assert (!finished);
+
+	/* make sure transaction3 has correct flags */
+	pk_transaction_list_get_transaction (tlist, tid_item3, &running, &committed, &finished);
+	g_assert (!running);
+	g_assert (committed);
+	g_assert (!finished);
+
+	/* wait for second action */
+	_g_test_loop_run_with_timeout (10000);
+
+	/* get all transactions in queue */
+	size = pk_transaction_list_get_size (tlist);
+	g_assert_cmpint (size, ==, 3);
+
+	/* get transactions (committed, not finished) in progress (one) */
+	array = pk_transaction_list_get_array (tlist);
+	size = g_strv_length (array);
+	g_assert_cmpint (size, ==, 1);
+	g_strfreev (array);
+
+	/* make sure transaction1 has correct flags */
+	pk_transaction_list_get_transaction (tlist, tid_item1, &running, &committed, &finished);
+	g_assert (!running);
+	g_assert (committed);
+	g_assert (finished);
+
+	/* make sure transaction2 has correct flags */
+	pk_transaction_list_get_transaction (tlist, tid_item2, &running, &committed, &finished);
+	g_assert (!running);
+	g_assert (committed);
+	g_assert (finished);
+
+	/* make sure transaction3 has correct flags */
+	pk_transaction_list_get_transaction (tlist, tid_item3, &running, &committed, &finished);
+	g_assert (running);
+	g_assert (committed);
+	g_assert (!finished);
+
+	/* wait for third action */
+	_g_test_loop_run_with_timeout (10000);
+
+	/* get all transactions in queue */
+	size = pk_transaction_list_get_size (tlist);
+	g_assert_cmpint (size, ==, 3);
+
+	/* get transactions (committed, not finished) in progress (none) */
+	array = pk_transaction_list_get_array (tlist);
+	size = g_strv_length (array);
+	g_assert_cmpint (size, ==, 0);
+	g_strfreev (array);
+
+	/* make sure transaction1 has correct flags */
+	pk_transaction_list_get_transaction (tlist, tid_item1, &running, &committed, &finished);
+	g_assert (!running);
+	g_assert (committed);
+	g_assert (finished);
+
+	/* make sure transaction2 has correct flags */
+	pk_transaction_list_get_transaction (tlist, tid_item2, &running, &committed, &finished);
+	g_assert (!running);
+	g_assert (committed);
+	g_assert (finished);
+
+	/* make sure transaction3 has correct flags */
+	pk_transaction_list_get_transaction (tlist, tid_item3, &running, &committed, &finished);
+	g_assert (!running);
+	g_assert (committed);
+	g_assert (finished);
+
+	/* wait for Cleanup */
+	_g_test_loop_wait (5000);
+
+	/* get both transactions in queue */
+	size = pk_transaction_list_get_size (tlist);
+	g_assert_cmpint (size, ==, 0);
+
+	/* get transactions (committed, not finished) in progress (neither - again) */
+	array = pk_transaction_list_get_array (tlist);
+	size = g_strv_length (array);
+	g_assert_cmpint (size, ==, 0);
+	g_strfreev (array);
+
+	g_object_unref (tlist);
+	g_object_unref (backend);
+	g_object_unref (cache);
+	g_object_unref (db);
+}
 
 int
 main (int argc, char **argv)
 {
-	EggTest *test;
-
 	if (! g_thread_supported ())
 		g_thread_init (NULL);
 	g_type_init ();
-	test = egg_test_init ();
 	egg_debug_init (&argc, &argv);
-
-	/* egg */
-	egg_string_test (test);
+	g_test_init (&argc, &argv, NULL);
 
 	/* components */
-	pk_proc_test (test);
-	pk_lsof_test (test);
-	pk_file_monitor_test (test);
-	pk_time_test (test);
-	pk_conf_test (test);
-	pk_store_test (test);
-	pk_inhibit_test (test);
-	pk_spawn_test (test);
-	pk_transaction_list_test (test);
-	pk_transaction_db_test (test);
+	g_test_add_func ("/packagekit/notify", pk_test_proc_func);
+	g_test_add_func ("/packagekit/proc", pk_test_proc_func);
+	g_test_add_func ("/packagekit/lsof", pk_test_lsof_func);
+	g_test_add_func ("/packagekit/file-monitor", pk_test_file_monitor_func);
+	g_test_add_func ("/packagekit/time", pk_test_time_func);
+	g_test_add_func ("/packagekit/dbus", pk_test_dbus_func);
+	g_test_add_func ("/packagekit/syslog", pk_test_dbus_func);
+	g_test_add_func ("/packagekit/conf", pk_test_conf_func);
+	g_test_add_func ("/packagekit/cache", pk_test_conf_func);
+	g_test_add_func ("/packagekit/store", pk_test_store_func);
+	g_test_add_func ("/packagekit/inhibit", pk_test_inhibit_func);
+	g_test_add_func ("/packagekit/spawn", pk_test_spawn_func);
+	g_test_add_func ("/packagekit/transaction", pk_test_transaction_func);
+	g_test_add_func ("/packagekit/transaction-list", pk_test_transaction_list_func);
+	g_test_add_func ("/packagekit/transaction-db", pk_test_transaction_db_func);
+	g_test_add_func ("/packagekit/transaction-extra", pk_test_transaction_extra_func);
 
 	/* backend stuff */
-	pk_backend_test (test);
-	pk_backend_test_spawn (test);
+	g_test_add_func ("/packagekit/backend", pk_test_backend_func);
+	g_test_add_func ("/packagekit/backend_spawn", pk_test_backend_spawn_func);
 
 	/* system */
-	pk_engine_test (test);
+	g_test_add_func ("/packagekit/engine", pk_test_engine_func);
 
-	return (egg_test_finish (test));
+	return g_test_run ();
 }
 
diff --git a/src/pk-spawn.c b/src/pk-spawn.c
index 38a1549..2e04a09 100644
--- a/src/pk-spawn.c
+++ b/src/pk-spawn.c
@@ -491,9 +491,10 @@ out:
  *
  **/
 gboolean
-pk_spawn_argv (PkSpawn *spawn, gchar **argv, gchar **envp)
+pk_spawn_argv (PkSpawn *spawn, gchar **argv, gchar **envp, GError **error)
 {
 	gboolean ret;
+	GError *error_local = NULL;
 	gboolean idleio;
 	guint i;
 	guint len;
@@ -502,6 +503,7 @@ pk_spawn_argv (PkSpawn *spawn, gchar **argv, gchar **envp)
 	const gchar *key;
 
 	g_return_val_if_fail (PK_IS_SPAWN (spawn), FALSE);
+	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
 	g_return_val_if_fail (argv != NULL, FALSE);
 
 	len = g_strv_length (argv);
@@ -515,7 +517,7 @@ pk_spawn_argv (PkSpawn *spawn, gchar **argv, gchar **envp)
 
 	/* check we are not using a closing instance */
 	if (spawn->priv->is_sending_exit) {
-		egg_warning ("trying to use instance that is in the process of exiting");
+		g_set_error_literal (error, 1, 0, "trying to use instance that is in the process of exiting");
 		return FALSE;
 	}
 
@@ -567,7 +569,13 @@ pk_spawn_argv (PkSpawn *spawn, gchar **argv, gchar **envp)
 				 &spawn->priv->stdin_fd,
 				 &spawn->priv->stdout_fd,
 				 &spawn->priv->stderr_fd,
-				 NULL);
+				 &error_local);
+	/* we failed to invoke the helper */
+	if (!ret) {
+		g_set_error (error, 1, 0, "failed to spawn %s: %s", argv[0], error_local->message);
+		g_error_free (error_local);
+		return FALSE;
+	}
 
 	/* get the nice value and ensure we are in the valid range */
 	key = "BackendSpawnNiceValue";
@@ -594,12 +602,6 @@ pk_spawn_argv (PkSpawn *spawn, gchar **argv, gchar **envp)
 		pk_ioprio_set_idle (spawn->priv->child_pid);
 	}
 
-	/* we failed to invoke the helper */
-	if (!ret) {
-		egg_warning ("failed to spawn '%s'", argv[0]);
-		return FALSE;
-	}
-
 	/* save this so we can check the dispatcher name */
 	g_free (spawn->priv->last_argv0);
 	spawn->priv->last_argv0 = g_strdup (argv[0]);
@@ -812,386 +814,3 @@ pk_spawn_new (void)
 	return PK_SPAWN (spawn);
 }
 
-/***************************************************************************
- ***                          MAKE CHECK TESTS                           ***
- ***************************************************************************/
-#ifdef EGG_TEST
-#include "egg-test.h"
-
-PkSpawnExitType mexit = PK_SPAWN_EXIT_TYPE_UNKNOWN;
-guint stdout_count = 0;
-guint finished_count = 0;
-
-/**
- * pk_test_exit_cb:
- **/
-static void
-pk_test_exit_cb (PkSpawn *spawn, PkSpawnExitType exit, EggTest *test)
-{
-	egg_debug ("spawn exit=%i", exit);
-	mexit = exit;
-	finished_count++;
-	egg_test_loop_quit (test);
-}
-
-/**
- * pk_test_stdout_cb:
- **/
-static void
-pk_test_stdout_cb (PkSpawn *spawn, const gchar *line, EggTest *test)
-{
-	egg_debug ("stdout '%s'", line);
-	stdout_count++;
-}
-
-static gboolean
-cancel_cb (gpointer data)
-{
-	PkSpawn *spawn = PK_SPAWN(data);
-	pk_spawn_kill (spawn);
-	return FALSE;
-}
-
-static void
-new_spawn_object (EggTest *test, PkSpawn **pspawn)
-{
-	if (*pspawn != NULL)
-		g_object_unref (*pspawn);
-	*pspawn = pk_spawn_new ();
-	g_signal_connect (*pspawn, "exit",
-			  G_CALLBACK (pk_test_exit_cb), test);
-	g_signal_connect (*pspawn, "stdout",
-			  G_CALLBACK (pk_test_stdout_cb), test);
-	stdout_count = 0;
-}
-
-static gboolean
-idle_cb (gpointer data)
-{
-	EggTest *test = (EggTest*) data;
-
-	egg_test_title (test, "make sure dispatcher has closed when run idle add");
-	if (mexit == PK_SPAWN_EXIT_TYPE_DISPATCHER_EXIT)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "mexit was %i", mexit);
-
-	/* never repeat */
-	return FALSE;
-}
-
-void
-pk_spawn_test (EggTest *test)
-{
-	PkSpawn *spawn = NULL;
-	gboolean ret;
-	gchar *file;
-	gchar *path;
-	gchar **argv;
-	gchar **envp;
-	guint elapsed;
-
-	if (!egg_test_start (test, "PkSpawn"))
-		return;
-
-	/* get new object */
-	new_spawn_object (test, &spawn);
-
-	/************************************************************
-	 **********           Generic tests               ***********
-	 ************************************************************/
-	egg_test_title (test, "make sure return error for missing file");
-	mexit = PK_SPAWN_EXIT_TYPE_UNKNOWN;
-	argv = g_strsplit ("pk-spawn-test-xxx.sh", " ", 0);
-	ret = pk_spawn_argv (spawn, argv, NULL);
-	g_strfreev (argv);
-	if (!ret)
-		egg_test_success (test, "failed to run invalid file");
-	else
-		egg_test_failed (test, "ran incorrect file");
-
-	/************************************************************/
-	egg_test_title (test, "make sure finished wasn't called");
-	if (mexit == PK_SPAWN_EXIT_TYPE_UNKNOWN)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "Called finish for bad file!");
-
-	/************************************************************/
-	egg_test_title (test, "make sure run correct helper");
-	mexit = -1;
-	path = egg_test_get_data_file ("pk-spawn-test.sh");
-	argv = g_strsplit (path, " ", 0);
-	ret = pk_spawn_argv (spawn, argv, NULL);
-	g_free (path);
-	g_strfreev (argv);
-	if (ret)
-		egg_test_success (test, "ran correct file");
-	else
-		egg_test_failed (test, "did not run helper");
-
-	/* wait for finished */
-	egg_test_loop_wait (test, 10000);
-	egg_test_loop_check (test);
-
-	/************************************************************/
-	egg_test_title (test, "make sure finished okay");
-	if (mexit == PK_SPAWN_EXIT_TYPE_SUCCESS)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "finish was okay!");
-
-	/************************************************************/
-	egg_test_title (test, "make sure finished was called only once");
-	if (finished_count == 1)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "finish was called %i times!", finished_count);
-
-	/************************************************************/
-	egg_test_title (test, "make sure we got the right stdout data");
-	if (stdout_count == 4+11)
-		egg_test_success (test, "correct stdout count");
-	else
-		egg_test_failed (test, "wrong stdout count %i", stdout_count);
-
-	/* get new object */
-	new_spawn_object (test, &spawn);
-
-	/************************************************************
-	 **********            envp tests                 ***********
-	 ************************************************************/
-	egg_test_title (test, "make sure we set the proxy");
-	mexit = -1;
-	path = egg_test_get_data_file ("pk-spawn-proxy.sh");
-	argv = g_strsplit (path, " ", 0);
-	envp = g_strsplit ("http_proxy=username:password at server:port "
-			   "ftp_proxy=username:password at server:port", " ", 0);
-	ret = pk_spawn_argv (spawn, argv, envp);
-	g_free (path);
-	g_strfreev (argv);
-	g_strfreev (envp);
-	if (ret)
-		egg_test_success (test, "ran correct file");
-	else
-		egg_test_failed (test, "did not run helper");
-
-	/* wait for finished */
-	egg_test_loop_wait (test, 10000);
-	egg_test_loop_check (test);
-
-	/* get new object */
-	new_spawn_object (test, &spawn);
-
-	/************************************************************
-	 **********           Killing tests               ***********
-	 ************************************************************/
-	egg_test_title (test, "make sure run correct helper, and cancel it using SIGKILL");
-	mexit = PK_SPAWN_EXIT_TYPE_UNKNOWN;
-	path = egg_test_get_data_file ("pk-spawn-test.sh");
-	argv = g_strsplit (path, " ", 0);
-	ret = pk_spawn_argv (spawn, argv, NULL);
-	g_free (path);
-	g_strfreev (argv);
-	if (ret)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "did not run helper");
-
-	g_timeout_add_seconds (1, cancel_cb, spawn);
-	/* wait for finished */
-	egg_test_loop_wait (test, 5000);
-	egg_test_loop_check (test);
-
-	/************************************************************/
-	egg_test_title (test, "make sure finished in SIGKILL");
-	if (mexit == PK_SPAWN_EXIT_TYPE_SIGKILL)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "finish %i!", mexit);
-
-	/* get new object */
-	new_spawn_object (test, &spawn);
-
-	/************************************************************/
-	egg_test_title (test, "make sure dumb helper ignores SIGQUIT");
-	mexit = PK_SPAWN_EXIT_TYPE_UNKNOWN;
-	path = egg_test_get_data_file ("pk-spawn-test.sh");
-	argv = g_strsplit (path, " ", 0);
-	g_object_set (spawn,
-		      "allow-sigkill", FALSE,
-		      NULL);
-	ret = pk_spawn_argv (spawn, argv, NULL);
-	g_free (path);
-	g_strfreev (argv);
-	if (ret)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "did not run helper");
-
-	g_timeout_add_seconds (1, cancel_cb, spawn);
-	/* wait for finished */
-	egg_test_loop_wait (test, 10000);
-	egg_test_loop_check (test);
-
-	/************************************************************/
-	egg_test_title (test, "make sure finished in SIGQUIT");
-	if (mexit == PK_SPAWN_EXIT_TYPE_SIGQUIT)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "finish %i!", mexit);
-
-	/* get new object */
-	new_spawn_object (test, &spawn);
-
-	/************************************************************/
-	egg_test_title (test, "make sure run correct helper, and SIGQUIT it");
-	mexit = PK_SPAWN_EXIT_TYPE_UNKNOWN;
-	path = egg_test_get_data_file ("pk-spawn-test-sigquit.sh");
-	argv = g_strsplit (path, " ", 0);
-	ret = pk_spawn_argv (spawn, argv, NULL);
-	g_free (path);
-	g_strfreev (argv);
-	if (ret)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "did not run helper");
-
-	g_timeout_add_seconds (1, cancel_cb, spawn);
-	/* wait for finished */
-	egg_test_loop_wait (test, 2000);
-	egg_test_loop_check (test);
-
-	/************************************************************/
-	egg_test_title (test, "make sure finished in SIGQUIT");
-	if (mexit == PK_SPAWN_EXIT_TYPE_SIGQUIT)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "finish %i!", mexit);
-
-	/************************************************************/
-	egg_test_title (test, "run lots of data for profiling");
-	path = egg_test_get_data_file ("pk-spawn-test-profiling.sh");
-	argv = g_strsplit (path, " ", 0);
-	ret = pk_spawn_argv (spawn, argv, NULL);
-	g_free (path);
-	g_strfreev (argv);
-	if (ret)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "did not run profiling helper");
-
-	/* get new object */
-	new_spawn_object (test, &spawn);
-
-	/************************************************************
-	 **********  Can we send commands to a dispatcher ***********
-	 ************************************************************/
-	egg_test_title (test, "run the dispatcher");
-	mexit = PK_SPAWN_EXIT_TYPE_UNKNOWN;
-	file = egg_test_get_data_file ("pk-spawn-dispatcher.py");
-	path = g_strdup_printf ("%s\tsearch-name\tnone\tpower manager", file);
-	argv = g_strsplit (path, "\t", 0);
-	envp = g_strsplit ("NETWORK=TRUE LANG=C BACKGROUND=TRUE", " ", 0);
-	ret = pk_spawn_argv (spawn, argv, envp);
-	g_free (file);
-	g_free (path);
-	if (ret)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "did not run dispatcher");
-
-	/************************************************************/
-	egg_test_title (test, "wait 2+2 seconds for the dispatcher");
-	/* wait 2 seconds, and make sure we are still running */
-	egg_test_loop_wait (test, 4000);
-	elapsed = egg_test_elapsed (test);
-	if (elapsed > 3900 && elapsed < 4100)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "dispatcher exited");
-
-	/************************************************************/
-	egg_test_title (test, "we got a package (+finished)?");
-	if (stdout_count == 2)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "did not get a package");
-
-	/************************************************************/
-	egg_test_title (test, "dispatcher still alive?");
-	if (spawn->priv->stdin_fd != -1)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "dispatcher no longer alive");
-
-	/************************************************************/
-	egg_test_title (test, "run the dispatcher with new input");
-	ret = pk_spawn_argv (spawn, argv, envp);
-	if (ret)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "did not run dispatcher with new input");
-
-	/* this may take a while */
-	egg_test_loop_wait (test, 100);
-
-	/************************************************************/
-	egg_test_title (test, "we got another package (not finished after bugfix)?");
-	if (stdout_count == 3)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "did not get a package: count was %i", stdout_count);
-
-	/* see if pk_spawn_exit blocks (required) */
-	g_idle_add (idle_cb, test);
-
-	/************************************************************/
-	egg_test_title (test, "ask dispatcher to close");
-	ret = pk_spawn_exit (spawn);
-	if (ret)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "failed to close dispatcher");
-
-	/************************************************************/
-	egg_test_title (test, "ask dispatcher to close (again, should be closing)");
-	ret = pk_spawn_exit (spawn);
-	if (!ret)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "attempted to close twice");
-
-	/* this may take a while */
-	egg_test_loop_wait (test, 100);
-
-	/************************************************************/
-	egg_test_title (test, "did dispatcher close?");
-	if (spawn->priv->stdin_fd == -1)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "dispatcher still running");
-
-	/************************************************************/
-	egg_test_title (test, "did we get the right exit code");
-	if (mexit == PK_SPAWN_EXIT_TYPE_DISPATCHER_EXIT)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "finish %i!", mexit);
-
-	/************************************************************/
-	egg_test_title (test, "ask dispatcher to close (again)");
-	ret = pk_spawn_exit (spawn);
-	if (!ret)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "dispatcher closed twice");
-
-	g_strfreev (argv);
-	g_strfreev (envp);
-	g_object_unref (spawn);
-
-	egg_test_end (test);
-}
-#endif
-
diff --git a/src/pk-spawn.h b/src/pk-spawn.h
index 308f2e8..c81b6d1 100644
--- a/src/pk-spawn.h
+++ b/src/pk-spawn.h
@@ -68,7 +68,8 @@ PkSpawn		*pk_spawn_new				(void);
 
 gboolean	 pk_spawn_argv				(PkSpawn	*spawn,
 							 gchar		**argv,
-							 gchar		**envp)
+							 gchar		**envp,
+							 GError		**error)
 							 G_GNUC_WARN_UNUSED_RESULT;
 gboolean	 pk_spawn_is_running			(PkSpawn	*spawn);
 gboolean	 pk_spawn_kill				(PkSpawn	*spawn);
diff --git a/src/pk-store.c b/src/pk-store.c
index 9b39c1f..85ccb5c 100644
--- a/src/pk-store.c
+++ b/src/pk-store.c
@@ -374,113 +374,3 @@ pk_store_new (void)
 	return PK_STORE (store);
 }
 
-/***************************************************************************
- ***                          MAKE CHECK TESTS                           ***
- ***************************************************************************/
-#ifdef EGG_TEST
-#include "egg-test.h"
-
-void
-pk_store_test (EggTest *test)
-{
-	PkStore *store;
-	gboolean ret;
-	const gchar *data_string;
-	guint data_uint;
-	gboolean data_bool;
-
-	if (!egg_test_start (test, "PkStore"))
-		return;
-
-	/************************************************************/
-	egg_test_title (test, "get an store");
-	store = pk_store_new ();
-	if (store != NULL)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, NULL);
-
-	/************************************************************/
-	egg_test_title (test, "set a blank string");
-	ret = pk_store_set_string (store, "dave2", "");
-	egg_test_assert (test, ret);
-
-	/************************************************************/
-	egg_test_title (test, "set a ~bool");
-	ret = pk_store_set_bool (store, "roger2", FALSE);
-	egg_test_assert (test, ret);
-
-	/************************************************************/
-	egg_test_title (test, "set a zero uint");
-	ret = pk_store_set_uint (store, "linda2", 0);
-	egg_test_assert (test, ret);
-
-	/************************************************************/
-	egg_test_title (test, "get a blank string");
-	data_string = pk_store_get_string (store, "dave2");
-	if (g_strcmp0 (data_string, "") == 0)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "data was %s", data_string);
-
-	/************************************************************/
-	egg_test_title (test, "get a ~bool");
-	data_bool = pk_store_get_bool (store, "roger2");
-	if (!data_bool)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "data was %i", data_bool);
-
-	/************************************************************/
-	egg_test_title (test, "get a zero uint");
-	data_uint = pk_store_get_uint (store, "linda2");
-	if (data_uint == 0)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "data was %i", data_uint);
-
-	/************************************************************/
-	egg_test_title (test, "set a string");
-	ret = pk_store_set_string (store, "dave", "ania");
-	egg_test_assert (test, ret);
-
-	/************************************************************/
-	egg_test_title (test, "set a bool");
-	ret = pk_store_set_bool (store, "roger", TRUE);
-	egg_test_assert (test, ret);
-
-	/************************************************************/
-	egg_test_title (test, "set a uint");
-	ret = pk_store_set_uint (store, "linda", 999);
-	egg_test_assert (test, ret);
-
-	/************************************************************/
-	egg_test_title (test, "get a string");
-	data_string = pk_store_get_string (store, "dave");
-	if (g_strcmp0 (data_string, "ania") == 0)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "data was %s", data_string);
-
-	/************************************************************/
-	egg_test_title (test, "get a bool");
-	data_bool = pk_store_get_bool (store, "roger");
-	if (data_bool)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "data was %i", data_bool);
-
-	/************************************************************/
-	egg_test_title (test, "get a uint");
-	data_uint = pk_store_get_uint (store, "linda");
-	if (data_uint == 999)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "data was %i", data_uint);
-
-	g_object_unref (store);
-
-	egg_test_end (test);
-}
-#endif
-
diff --git a/src/pk-syslog.c b/src/pk-syslog.c
index 1a322f5..69d21c8 100644
--- a/src/pk-syslog.c
+++ b/src/pk-syslog.c
@@ -127,31 +127,3 @@ pk_syslog_new (void)
 	return PK_SYSLOG (pk_syslog_object);
 }
 
-/***************************************************************************
- ***                          MAKE CHECK TESTS                           ***
- ***************************************************************************/
-#ifdef EGG_TEST
-#include "egg-test.h"
-
-void
-egg_test_syslog (EggTest *test)
-{
-	PkSyslog *self;
-
-	if (!egg_test_start (test, "PkSyslog"))
-		return;
-
-	/************************************************************/
-	egg_test_title (test, "get an instance");
-	self = pk_syslog_new ();
-	if (self != NULL)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, NULL);
-
-	g_object_unref (self);
-
-	egg_test_end (test);
-}
-#endif
-
diff --git a/src/pk-time.c b/src/pk-time.c
index 40a0061..41791b4 100644
--- a/src/pk-time.c
+++ b/src/pk-time.c
@@ -79,28 +79,28 @@ G_DEFINE_TYPE (PkTime, pk_time, G_TYPE_OBJECT)
  * Return value: if we set the average limits correctly
  **/
 gboolean
-pk_time_set_average_limits (PkTime *self, guint average_min, guint average_max)
+pk_time_set_average_limits (PkTime *pktime, guint average_min, guint average_max)
 {
-	g_return_val_if_fail (PK_IS_TIME (self), FALSE);
-	self->priv->average_min = average_min;
-	self->priv->average_max = average_max;
+	g_return_val_if_fail (PK_IS_TIME (pktime), FALSE);
+	pktime->priv->average_min = average_min;
+	pktime->priv->average_max = average_max;
 	return TRUE;
 }
 
 /**
  * pk_time_set_value_limits:
- * @self: This class instance
+ * @pktime: This class instance
  * @average_min: the smallest value that is acceptable for time (in seconds)
  * @average_max: the largest value that is acceptable for time (in seconds)
  *
  * Return value: if we set the value limits correctly
  **/
 gboolean
-pk_time_set_value_limits (PkTime *self, guint value_min, guint value_max)
+pk_time_set_value_limits (PkTime *pktime, guint value_min, guint value_max)
 {
-	g_return_val_if_fail (PK_IS_TIME (self), FALSE);
-	self->priv->value_min = value_min;
-	self->priv->value_max = value_max;
+	g_return_val_if_fail (PK_IS_TIME (pktime), FALSE);
+	pktime->priv->value_min = value_min;
+	pktime->priv->value_max = value_max;
 	return TRUE;
 }
 
@@ -110,15 +110,15 @@ pk_time_set_value_limits (PkTime *self, guint value_min, guint value_max)
  * Returns time running in ms
  **/
 guint
-pk_time_get_elapsed (PkTime *self)
+pk_time_get_elapsed (PkTime *pktime)
 {
 	gdouble elapsed;
 
-	g_return_val_if_fail (PK_IS_TIME (self), 0);
+	g_return_val_if_fail (PK_IS_TIME (pktime), 0);
 
-	elapsed = g_timer_elapsed (self->priv->timer, NULL);
+	elapsed = g_timer_elapsed (pktime->priv->timer, NULL);
 	elapsed *= 1000;
-	elapsed += self->priv->time_offset;
+	elapsed += pktime->priv->time_offset;
 
 	return (guint) elapsed;
 }
@@ -142,7 +142,7 @@ pk_time_get_gradient (PkTimeItem *item1, PkTimeItem *item2)
  * Returns time in seconds
  **/
 guint
-pk_time_get_remaining (PkTime *self)
+pk_time_get_remaining (PkTime *pktime)
 {
 	guint i;
 	guint averaged = 0;
@@ -155,9 +155,9 @@ pk_time_get_remaining (PkTime *self)
 	PkTimeItem *item;
 	PkTimeItem *item_prev;
 
-	g_return_val_if_fail (PK_IS_TIME (self), 0);
+	g_return_val_if_fail (PK_IS_TIME (pktime), 0);
 
-	length = self->priv->array->len;
+	length = pktime->priv->array->len;
 	if (length < 2) {
 		egg_debug ("array too small");
 		return 0;
@@ -165,8 +165,8 @@ pk_time_get_remaining (PkTime *self)
 
 	/* get as many as we can */
 	for (i=length-1; i>0; i--) {
-		item_prev = g_ptr_array_index (self->priv->array, i-1);
-		item = g_ptr_array_index (self->priv->array, i);
+		item_prev = g_ptr_array_index (pktime->priv->array, i-1);
+		item = g_ptr_array_index (pktime->priv->array, i);
 		grad = pk_time_get_gradient (item, item_prev);
 //		egg_debug ("gradient between %i/%i=%f", i-1, i, grad);
 		if (grad < 0.00001 || grad > 100) {
@@ -174,14 +174,14 @@ pk_time_get_remaining (PkTime *self)
 		} else {
 			grad_ave += grad;
 			averaged++;
-			if (averaged > self->priv->average_max) {
+			if (averaged > pktime->priv->average_max) {
 				break;
 			}
 		}
 	}
 
 	egg_debug ("averaged %i points", averaged);
-	if (averaged < self->priv->average_min) {
+	if (averaged < pktime->priv->average_min) {
 		egg_debug ("not enough samples for accurate time: %i", averaged);
 		return 0;
 	}
@@ -191,11 +191,11 @@ pk_time_get_remaining (PkTime *self)
 	egg_debug ("grad_ave=%f", grad_ave);
 
 	/* just for debugging */
-	elapsed = pk_time_get_elapsed (self);
+	elapsed = pk_time_get_elapsed (pktime);
 	egg_debug ("elapsed=%i", elapsed);
 
 	/* 100 percent to be complete */
-	item = g_ptr_array_index (self->priv->array, length - 1);
+	item = g_ptr_array_index (pktime->priv->array, length - 1);
 	percentage_left = 100 - item->percentage;
 	egg_debug ("percentage_left=%i", percentage_left);
 	estimated = (gfloat) percentage_left / grad_ave;
@@ -204,9 +204,9 @@ pk_time_get_remaining (PkTime *self)
 	estimated /= 1000;
 	egg_debug ("estimated=%f seconds", estimated);
 
-	if (estimated < self->priv->value_min) {
+	if (estimated < pktime->priv->value_min) {
 		estimated = 0;
-	} else if (estimated > self->priv->value_max) {
+	} else if (estimated > pktime->priv->value_max) {
 		estimated = 0;
 	}
 	return (guint) estimated;
@@ -216,22 +216,22 @@ pk_time_get_remaining (PkTime *self)
  * pk_time_add_data:
  **/
 gboolean
-pk_time_add_data (PkTime *self, guint percentage)
+pk_time_add_data (PkTime *pktime, guint percentage)
 {
 	PkTimeItem *item;
 	guint elapsed;
 
-	g_return_val_if_fail (PK_IS_TIME (self), FALSE);
+	g_return_val_if_fail (PK_IS_TIME (pktime), FALSE);
 
 	/* check we are going up */
-	if (percentage < self->priv->last_percentage) {
+	if (percentage < pktime->priv->last_percentage) {
 		egg_warning ("percentage cannot go down!");
 		return FALSE;
 	}
-	self->priv->last_percentage = percentage;
+	pktime->priv->last_percentage = percentage;
 
 	/* get runtime in ms */
-	elapsed = pk_time_get_elapsed (self);
+	elapsed = pk_time_get_elapsed (pktime);
 
 	egg_debug ("adding %i at %i (ms)", percentage, elapsed);
 
@@ -239,27 +239,38 @@ pk_time_add_data (PkTime *self, guint percentage)
 	item = g_new0 (PkTimeItem, 1);
 	item->time = elapsed;
 	item->percentage = percentage;
-	g_ptr_array_add (self->priv->array, item);
+	g_ptr_array_add (pktime->priv->array, item);
 
 	return TRUE;
 }
 
 /**
+ * pk_time_advance_clock:
+ *
+ * This function is only really useful for testing the PkTime functionality.
+ **/
+void
+pk_time_advance_clock (PkTime *pktime, guint offset)
+{
+	pktime->priv->time_offset += offset;
+}
+
+/**
  * pk_time_free_data:
  **/
 static gboolean
-pk_time_free_data (PkTime *self)
+pk_time_free_data (PkTime *pktime)
 {
 	guint i;
 	guint length;
 	gpointer mem;
 
-	g_return_val_if_fail (PK_IS_TIME (self), FALSE);
+	g_return_val_if_fail (PK_IS_TIME (pktime), FALSE);
 
-	length = self->priv->array->len;
+	length = pktime->priv->array->len;
 	for (i=0; i<length; i++) {
-		mem = g_ptr_array_index (self->priv->array, 0);
-		g_ptr_array_remove_index (self->priv->array, 0);
+		mem = g_ptr_array_index (pktime->priv->array, 0);
+		g_ptr_array_remove_index (pktime->priv->array, 0);
 		g_free (mem);
 	}
 	return TRUE;
@@ -269,18 +280,18 @@ pk_time_free_data (PkTime *self)
  * pk_time_reset:
  **/
 gboolean
-pk_time_reset (PkTime *self)
+pk_time_reset (PkTime *pktime)
 {
-	g_return_val_if_fail (PK_IS_TIME (self), FALSE);
+	g_return_val_if_fail (PK_IS_TIME (pktime), FALSE);
 
-	self->priv->time_offset = 0;
-	self->priv->last_percentage = 0;
-	self->priv->average_min = PK_TIME_AVERAGE_DEFAULT_MIN;
-	self->priv->average_max = PK_TIME_AVERAGE_DEFAULT_MAX;
-	self->priv->value_min = PK_TIME_VALUE_DEFAULT_MIN;
-	self->priv->value_max = PK_TIME_VALUE_DEFAULT_MAX;
-	g_timer_reset (self->priv->timer);
-	pk_time_free_data (self);
+	pktime->priv->time_offset = 0;
+	pktime->priv->last_percentage = 0;
+	pktime->priv->average_min = PK_TIME_AVERAGE_DEFAULT_MIN;
+	pktime->priv->average_max = PK_TIME_AVERAGE_DEFAULT_MAX;
+	pktime->priv->value_min = PK_TIME_VALUE_DEFAULT_MIN;
+	pktime->priv->value_max = PK_TIME_VALUE_DEFAULT_MAX;
+	g_timer_reset (pktime->priv->timer);
+	pk_time_free_data (pktime);
 
 	return TRUE;
 }
@@ -302,12 +313,12 @@ pk_time_class_init (PkTimeClass *klass)
  * @time: This class instance
  **/
 static void
-pk_time_init (PkTime *self)
+pk_time_init (PkTime *pktime)
 {
-	self->priv = PK_TIME_GET_PRIVATE (self);
-	self->priv->array = g_ptr_array_new ();
-	self->priv->timer = g_timer_new ();
-	pk_time_reset (self);
+	pktime->priv = PK_TIME_GET_PRIVATE (pktime);
+	pktime->priv->array = g_ptr_array_new ();
+	pktime->priv->timer = g_timer_new ();
+	pk_time_reset (pktime);
 }
 
 /**
@@ -317,15 +328,15 @@ pk_time_init (PkTime *self)
 static void
 pk_time_finalize (GObject *object)
 {
-	PkTime *self;
+	PkTime *pktime;
 
 	g_return_if_fail (PK_IS_TIME (object));
 
-	self = PK_TIME (object);
-	g_return_if_fail (self->priv != NULL);
-	g_ptr_array_foreach (self->priv->array, (GFunc) g_free, NULL);
-	g_ptr_array_free (self->priv->array, TRUE);
-	g_timer_destroy (self->priv->timer);
+	pktime = PK_TIME (object);
+	g_return_if_fail (pktime->priv != NULL);
+	g_ptr_array_foreach (pktime->priv->array, (GFunc) g_free, NULL);
+	g_ptr_array_free (pktime->priv->array, TRUE);
+	g_timer_destroy (pktime->priv->timer);
 
 	G_OBJECT_CLASS (pk_time_parent_class)->finalize (object);
 }
@@ -338,108 +349,8 @@ pk_time_finalize (GObject *object)
 PkTime *
 pk_time_new (void)
 {
-	PkTime *self;
-	self = g_object_new (PK_TYPE_TIME, NULL);
-	return PK_TIME (self);
-}
-
-/***************************************************************************
- ***                          MAKE CHECK TESTS                           ***
- ***************************************************************************/
-#ifdef EGG_TEST
-#include "egg-test.h"
-
-void
-pk_time_test (EggTest *test)
-{
-	PkTime *self = NULL;
-	gboolean ret;
-	guint value;
-
-	if (!egg_test_start (test, "PkTime"))
-		return;
-
-	/************************************************************/
-	egg_test_title (test, "get PkTime object");
-	self = pk_time_new ();
-	egg_test_assert (test, self != NULL);
-
-	/************************************************************/
-	egg_test_title (test, "get elapsed correctly at startup");
-	value = pk_time_get_elapsed (self);
-	if (value < 10)
-		egg_test_success (test, "elapsed at startup %i", value);
-	else
-		egg_test_failed (test, "elapsed at startup %i", value);
-
-	/************************************************************/
-	egg_test_title (test, "ignore remaining correctly");
-	value = pk_time_get_remaining (self);
-	if (value == 0)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "got %i, not zero!", value);
-
-	/************************************************************/
-	g_usleep (1000*1000);
-
-	/************************************************************/
-	egg_test_title (test, "get elapsed correctly");
-	value = pk_time_get_elapsed (self);
-	if (value > 900 && value < 1100)
-		egg_test_success (test, "elapsed ~1000ms: %i", value);
-	else
-		egg_test_failed (test, "elapsed not ~1000ms: %i", value);
-
-	/************************************************************/
-	egg_test_title (test, "ignore remaining correctly when not enough entries");
-	value = pk_time_get_remaining (self);
-	if (value == 0)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "got %i, not zero!", value);
-
-	/************************************************************/
-	egg_test_title (test, "make sure we can add data");
-	ret = pk_time_add_data (self, 10);
-	egg_test_assert (test, ret);
-
-	/************************************************************/
-	egg_test_title (test, "make sure we can get remaining correctly");
-	value = 20;
-	while (value < 60) {
-		self->priv->time_offset += 2000;
-		pk_time_add_data (self, value);
-		value += 10;
-	}
-	value = pk_time_get_remaining (self);
-	if (value > 9 && value < 11)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "got %i", value);
-
-	/* reset */
-	g_object_unref (self);
-	self = pk_time_new ();
-
-	/************************************************************/
-	egg_test_title (test, "make sure we can do long times");
-	value = 10;
-	pk_time_add_data (self, 0);
-	while (value < 60) {
-		self->priv->time_offset += 4*60*1000;
-		pk_time_add_data (self, value);
-		value += 10;
-	}
-	value = pk_time_get_remaining (self);
-	if (value >= 1199 && value <= 1201)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "got %i", value);
-
-	g_object_unref (self);
-
-	egg_test_end (test);
+	PkTime *pktime;
+	pktime = g_object_new (PK_TYPE_TIME, NULL);
+	return PK_TIME (pktime);
 }
-#endif
 
diff --git a/src/pk-time.h b/src/pk-time.h
index 76085ef..e2ea1a5 100644
--- a/src/pk-time.h
+++ b/src/pk-time.h
@@ -51,15 +51,17 @@ typedef struct
 GType		 pk_time_get_type		  	(void);
 PkTime		*pk_time_new				(void);
 
-gboolean	 pk_time_add_data			(PkTime		*time,
+gboolean	 pk_time_add_data			(PkTime		*pktime,
 							 guint		 percentage);
-gboolean	 pk_time_reset				(PkTime		*time);
-guint		 pk_time_get_elapsed			(PkTime		*time);
-guint		 pk_time_get_remaining			(PkTime		*time);
-gboolean	 pk_time_set_average_limits		(PkTime		*time,
+void		 pk_time_advance_clock			(PkTime		*pktime,
+							 guint		 offset);
+gboolean	 pk_time_reset				(PkTime		*pktime);
+guint		 pk_time_get_elapsed			(PkTime		*pktime);
+guint		 pk_time_get_remaining			(PkTime		*pktime);
+gboolean	 pk_time_set_average_limits		(PkTime		*pktime,
 							 guint		 average_min,
 							 guint		 average_max);
-gboolean	 pk_time_set_value_limits		(PkTime		*time,
+gboolean	 pk_time_set_value_limits		(PkTime		*pktime,
 							 guint		 value_min,
 							 guint		 value_max);
 
diff --git a/src/pk-transaction-db.c b/src/pk-transaction-db.c
index e06ce1e..71ca3cf 100644
--- a/src/pk-transaction-db.c
+++ b/src/pk-transaction-db.c
@@ -50,12 +50,6 @@ static void     pk_transaction_db_finalize	(GObject        *object);
 
 #define PK_TRANSACTION_DB_ID_FILE_OBSOLETE	LOCALSTATEDIR "/lib/PackageKit/job_count.dat"
 
-#if PK_BUILD_LOCAL
-#define PK_TRANSACTION_DB_FILE			"./transactions.db"
-#else
-#define PK_TRANSACTION_DB_FILE			PK_DB_DIR "/transactions.db"
-#endif
-
 struct PkTransactionDbPrivate
 {
 	sqlite3			*db;
@@ -1087,187 +1081,3 @@ pk_transaction_db_new (void)
 	return PK_TRANSACTION_DB (tdb);
 }
 
-/***************************************************************************
- ***                          MAKE CHECK TESTS                           ***
- ***************************************************************************/
-#ifdef EGG_TEST
-#include <glib/gstdio.h>
-#include "egg-test.h"
-
-void
-pk_transaction_db_test (EggTest *test)
-{
-	PkTransactionDb *db;
-	guint value;
-	gchar *tid;
-	gboolean ret;
-	guint ms;
-	gchar *proxy_http = NULL;
-	gchar *proxy_ftp = NULL;
-	gchar *root = NULL;
-	guint seconds;
-
-	if (!egg_test_start (test, "PkTransactionDb"))
-		return;
-
-	/* remove the self check file */
-#if PK_BUILD_LOCAL
-	ret = g_file_test (PK_TRANSACTION_DB_FILE, G_FILE_TEST_EXISTS);
-	if (ret) {
-		egg_test_title (test, "remove old local database");
-		egg_warning ("Removing %s", PK_TRANSACTION_DB_FILE);
-		value = g_unlink (PK_TRANSACTION_DB_FILE);
-		egg_test_assert (test, (value == 0));
-	}
-#endif
-
-	/************************************************************/
-	egg_test_title (test, "check we created quickly");
-	db = pk_transaction_db_new ();
-	ms = egg_test_elapsed (test);
-	if (ms < 1500)
-		egg_test_success (test, "acceptable time %ims", ms);
-	else
-		egg_test_failed (test, "took a long time: %ims", ms);
-	g_object_unref (db);
-
-	/************************************************************/
-	egg_test_title (test, "check we opened quickly");
-	db = pk_transaction_db_new ();
-	ms = egg_test_elapsed (test);
-	if (ms < 100)
-		egg_test_success (test, "acceptable time %ims", ms);
-	else
-		egg_test_failed (test, "took a long time: %ims", ms);
-
-	/************************************************************/
-	egg_test_title (test, "do we get the correct time on a blank database");
-	value = pk_transaction_db_action_time_since (db, PK_ROLE_ENUM_REFRESH_CACHE);
-	if (value == G_MAXUINT)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "failed to get correct time, got %i", value);
-
-	/************************************************************
-	 ****************          IDENT           ******************
-	 ************************************************************/
-	egg_test_title (test, "get an tid object");
-	tid = pk_transaction_db_generate_id (db);
-	ms = egg_test_elapsed (test);
-	if (ms < 10)
-		egg_test_success (test, "acceptable time %ims", ms);
-	else
-		egg_test_failed (test, "took a long time: %ims", ms);
-	g_free (tid);
-
-	/************************************************************/
-	egg_test_title (test, "get an tid object (no wait)");
-	tid = pk_transaction_db_generate_id (db);
-	ms = egg_test_elapsed (test);
-	if (ms < 5)
-		egg_test_success (test, "acceptable time %ims", ms);
-	else
-		egg_test_failed (test, "took a long time: %ims", ms);
-	g_free (tid);
-
-	/************************************************************/
-	egg_test_title (test, "set the correct time");
-	ret = pk_transaction_db_action_time_reset (db, PK_ROLE_ENUM_REFRESH_CACHE);
-	if (ret)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "failed to reset value");
-
-	/************************************************************/
-	egg_test_title (test, "do the deferred write");
-	while (g_main_context_pending (NULL))
-		g_main_context_iteration (NULL, TRUE);
-	ms = egg_test_elapsed (test);
-	if (ms > 1)
-		egg_test_success (test, "acceptable time %ims", ms);
-	else
-		egg_test_failed (test, "took too short time: %ims", ms);
-
-	g_usleep (2*1000*1000);
-
-	/************************************************************/
-	egg_test_title (test, "do we get the correct time");
-	value = pk_transaction_db_action_time_since (db, PK_ROLE_ENUM_REFRESH_CACHE);
-	if (value > 1 && value <= 4)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "failed to get correct time, %u", value);
-
-	/************************************************************
-	 ****************          PROXIES         ******************
-	 ************************************************************/
-	egg_test_title (test, "can we set the proxies");
-	ret = pk_transaction_db_set_proxy (db, 500, "session1", "127.0.0.1:80", "127.0.0.1:21");
-	egg_test_assert (test, ret);
-
-	/************************************************************/
-	egg_test_title (test, "can we set the proxies (overwrite)");
-	ret = pk_transaction_db_set_proxy (db, 500, "session1", "127.0.0.1:8000", "127.0.0.1:21");
-	egg_test_assert (test, ret);
-
-	/************************************************************/
-	egg_test_title (test, "can we get the proxies (non-existant user)");
-	ret = pk_transaction_db_get_proxy (db, 501, "session1", &proxy_http, &proxy_ftp);
-	if (proxy_http == NULL && proxy_ftp == NULL)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "failed to get correct proxies, %s and %s", proxy_http, proxy_ftp);
-
-	/************************************************************/
-	egg_test_title (test, "can we get the proxies (non-existant session)");
-	ret = pk_transaction_db_get_proxy (db, 500, "session2", &proxy_http, &proxy_ftp);
-	if (proxy_http == NULL && proxy_ftp == NULL)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "failed to get correct proxies, %s and %s", proxy_http, proxy_ftp);
-
-	/************************************************************/
-	egg_test_title (test, "can we get the proxies (match)");
-	ret = pk_transaction_db_get_proxy (db, 500, "session1", &proxy_http, &proxy_ftp);
-	if (g_strcmp0 (proxy_http, "127.0.0.1:8000") == 0 &&
-	    g_strcmp0 (proxy_ftp, "127.0.0.1:21") == 0)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "failed to get correct proxies, %s and %s", proxy_http, proxy_ftp);
-
-	/************************************************************
-	 ****************            ROOT          ******************
-	 ************************************************************/
-	egg_test_title (test, "can we set the root");
-	ret = pk_transaction_db_set_root (db, 500, "session1", "/mnt/chroot");
-	egg_test_assert (test, ret);
-
-	/************************************************************/
-	egg_test_title (test, "can we set the root (overwrite)");
-	ret = pk_transaction_db_set_root (db, 500, "session1", "/mnt/chroot2");
-	egg_test_assert (test, ret);
-
-	/************************************************************/
-	egg_test_title (test, "can we get the root (non-existant user)");
-	ret = pk_transaction_db_get_root (db, 501, "session1", &root);
-	if (root == NULL)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "failed to get correct root: %s", root);
-
-	/************************************************************/
-	egg_test_title (test, "can we get the root (match)");
-	ret = pk_transaction_db_get_root (db, 500, "session1", &root);
-	if (g_strcmp0 (root, "/mnt/chroot2") == 0)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "failed to get correct root: %s", root);
-
-	g_free (root);
-	g_free (proxy_http);
-	g_free (proxy_ftp);
-	g_object_unref (db);
-	egg_test_end (test);
-}
-#endif
-
diff --git a/src/pk-transaction-db.h b/src/pk-transaction-db.h
index 05eef5a..e38ec8a 100644
--- a/src/pk-transaction-db.h
+++ b/src/pk-transaction-db.h
@@ -34,6 +34,12 @@ G_BEGIN_DECLS
 #define PK_IS_TRANSACTION_DB_CLASS(k)	(G_TYPE_CHECK_CLASS_TYPE ((k), PK_TYPE_TRANSACTION_DB))
 #define PK_TRANSACTION_DB_GET_CLASS(o)	(G_TYPE_INSTANCE_GET_CLASS ((o), PK_TYPE_TRANSACTION_DB, PkTransactionDbClass))
 
+#if PK_BUILD_LOCAL
+#define PK_TRANSACTION_DB_FILE			"./transactions.db"
+#else
+#define PK_TRANSACTION_DB_FILE			PK_DB_DIR "/transactions.db"
+#endif
+
 typedef struct PkTransactionDbPrivate PkTransactionDbPrivate;
 
 typedef struct
diff --git a/src/pk-transaction-extra.c b/src/pk-transaction-extra.c
index 5f8f772..c18f5be 100644
--- a/src/pk-transaction-extra.c
+++ b/src/pk-transaction-extra.c
@@ -1254,28 +1254,3 @@ pk_transaction_extra_new (void)
 	return PK_POST_TRANS (extra);
 }
 
-/***************************************************************************
- ***                          MAKE CHECK TESTS                           ***
- ***************************************************************************/
-#ifdef EGG_TEST
-#include "egg-test.h"
-
-void
-egg_test_extra_trans (EggTest *test)
-{
-	PkTransactionExtra *extra;
-
-	if (!egg_test_start (test, "PkTransactionExtra"))
-		return;
-
-	/************************************************************/
-	egg_test_title (test, "get an instance");
-	extra = pk_transaction_extra_new ();
-	egg_test_assert (test, extra != NULL);
-
-	g_object_unref (extra);
-
-	egg_test_end (test);
-}
-#endif
-
diff --git a/src/pk-transaction-list.c b/src/pk-transaction-list.c
index 569adf1..37c41ba 100644
--- a/src/pk-transaction-list.c
+++ b/src/pk-transaction-list.c
@@ -112,6 +112,26 @@ pk_transaction_list_get_from_tid (PkTransactionList *tlist, const gchar *tid)
 }
 
 /**
+ * pk_transaction_list_get_transaction:
+ **/
+PkTransaction *
+pk_transaction_list_get_transaction (PkTransactionList *tlist, const gchar *tid,
+				     gboolean *running, gboolean *committed, gboolean *finished)
+{
+	PkTransactionItem *item;
+	item = pk_transaction_list_get_from_tid (tlist, tid);
+	if (item == NULL)
+		return NULL;
+	if (running != NULL)
+		*running = item->running;
+	if (committed != NULL)
+		*committed = item->committed;
+	if (finished != NULL)
+		*finished = item->finished;
+	return item->transaction;
+}
+
+/**
  * pk_transaction_list_role_present:
  *
  * if there is a queued transaction with this role, useful to avoid having
@@ -917,588 +937,3 @@ pk_transaction_list_new (void)
 	return PK_TRANSACTION_LIST (pk_transaction_list_object);
 }
 
-/***************************************************************************
- ***                          MAKE CHECK TESTS                           ***
- ***************************************************************************/
-#ifdef EGG_TEST
-#include "egg-test.h"
-#include "pk-backend-internal.h"
-#include "pk-cache.h"
-#include "pk-transaction-db.h"
-
-static PkTransactionDb *db = NULL;
-
-/**
- * pk_transaction_list_test_finished_cb:
- **/
-static void
-pk_transaction_list_test_finished_cb (PkTransaction *transaction, const gchar *exit_text, guint time, EggTest *test)
-{
-	egg_test_loop_quit (test);
-}
-
-/**
- * pk_transaction_list_test_delay_cb:
- **/
-static void
-pk_transaction_list_test_delay_cb (EggTest *test)
-{
-	egg_debug ("quitting loop");
-	egg_test_loop_quit (test);
-}
-
-/**
- * pk_transaction_list_test_get_item:
- **/
-static PkTransactionItem *
-pk_transaction_list_test_get_item (PkTransactionList *tlist)
-{
-	PkTransactionItem *item;
-	gchar *tid;
-
-	/* get tid */
-	tid = pk_transaction_db_generate_id (db);
-
-	/* create PkTransaction instance */
-	pk_transaction_list_create (tlist, tid, ":0", NULL);
-	item = pk_transaction_list_get_from_tid (tlist, tid);
-	g_free (tid);
-
-	/* return object */
-	return item;
-}
-
-void
-pk_transaction_list_test (EggTest *test)
-{
-	PkTransactionList *tlist;
-	PkCache *cache;
-	gboolean ret;
-	gchar *tid;
-	guint size;
-	gchar **array;
-	PkTransactionItem *item;
-	PkTransactionItem *item1;
-	PkTransactionItem *item2;
-	PkTransactionItem *item3;
-
-	if (!egg_test_start (test, "PkTransactionList"))
-		return;
-
-	/* remove the self check file */
-#if PK_BUILD_LOCAL
-	ret = g_file_test ("./transactions.db", G_FILE_TEST_EXISTS);
-	if (ret) {
-		egg_test_title (test, "remove old local database");
-		egg_warning ("Removing %s", "./transactions.db");
-		size = g_unlink ("./transactions.db");
-		egg_test_assert (test, (size == 0));
-	}
-#endif
-
-	/* we get a cache object to reproduce the engine having it ref'd */
-	cache = pk_cache_new ();
-	db = pk_transaction_db_new ();
-
-	/************************************************************/
-	egg_test_title (test, "get a transaction list object");
-	tlist = pk_transaction_list_new ();
-	egg_test_assert (test, tlist != NULL);
-
-	/************************************************************/
-	egg_test_title (test, "make sure we get a valid tid");
-	tid = pk_transaction_db_generate_id (db);
-	if (tid != NULL)
-		egg_test_success (test, "got tid %s", tid);
-	else
-		egg_test_failed (test, "failed to get tid");
-
-	/************************************************************/
-	egg_test_title (test, "create a transaction object");
-	ret = pk_transaction_list_create (tlist, tid, ":0", NULL);
-	if (ret)
-		egg_test_success (test, "created transaction %s", tid);
-	else
-		egg_test_failed (test, "failed to create transaction");
-
-	/************************************************************/
-	egg_test_title (test, "make sure we get the right object back");
-	item = pk_transaction_list_get_from_tid (tlist, tid);
-	if (item != NULL &&
-	    (g_strcmp0 (item->tid, tid) == 0) &&
-	    item->transaction != NULL)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "could not find in db");
-
-	/************************************************************/
-	egg_test_title (test, "make sure item has correct flags");
-	if (item->running == FALSE && item->committed == FALSE && item->finished == FALSE)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "wrong flags: running[%i] committed[%i] finished[%i]",
-				 item->running, item->committed, item->finished);
-
-	/************************************************************/
-	egg_test_title (test, "get size one we have in queue");
-	size = pk_transaction_list_get_size (tlist);
-	if (size == 1)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "size %i", size);
-
-	/************************************************************/
-	egg_test_title (test, "get transactions (committed, not finished) in progress");
-	array = pk_transaction_list_get_array (tlist);
-	size = g_strv_length (array);
-	if (size == 0)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "size %i", size);
-	g_strfreev (array);
-
-	/************************************************************/
-	egg_test_title (test, "add again the same tid (should fail)");
-	ret = pk_transaction_list_create (tlist, tid, ":0", NULL);
-	if (!ret)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "added the same tid twice");
-
-	/************************************************************/
-	egg_test_title (test, "remove without ever committing");
-	ret = pk_transaction_list_remove (tlist, tid);
-	if (ret)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "failed to remove");
-
-	/************************************************************/
-	egg_test_title (test, "get size none we have in queue");
-	size = pk_transaction_list_get_size (tlist);
-	if (size == 0)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "size %i", size);
-
-	/* get a new tid */
-	g_free (tid);
-	tid = pk_transaction_db_generate_id (db);
-
-	/************************************************************/
-	egg_test_title (test, "create another item");
-	ret = pk_transaction_list_create (tlist, tid, ":0", NULL);
-	if (ret)
-		egg_test_success (test, "created transaction %s", tid);
-	else
-		egg_test_failed (test, "failed to create transaction");
-
-	/************************************************************/
-	PkBackend *backend;
-	backend = pk_backend_new ();
-	egg_test_title (test, "try to load a valid backend");
-	ret = pk_backend_set_name (backend, "dummy");
-	egg_test_assert (test, ret);
-
-	/************************************************************/
-	egg_test_title (test, "lock an valid backend");
-	ret = pk_backend_lock (backend);
-	if (ret)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "failed to lock");
-
-	/************************************************************/
-	egg_test_title (test, "get from db");
-	item = pk_transaction_list_get_from_tid (tlist, tid);
-	if (item != NULL &&
-	    (g_strcmp0 (item->tid, tid) == 0) &&
-	    item->transaction != NULL)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "could not find in db");
-
-	g_signal_connect (item->transaction, "finished",
-			  G_CALLBACK (pk_transaction_list_test_finished_cb), test);
-
-	/* this tests the run-on-commit action */
-	pk_transaction_get_updates (item->transaction, "none", NULL);
-
-	/************************************************************/
-	egg_test_title (test, "make sure item has correct flags");
-	if (item->running == TRUE && item->committed == TRUE && item->finished == FALSE)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "wrong flags: running[%i] committed[%i] finished[%i]",
-				 item->running, item->committed, item->finished);
-
-	/************************************************************/
-	egg_test_title (test, "get present role");
-	ret = pk_transaction_list_role_present (tlist, PK_ROLE_ENUM_GET_UPDATES);
-	if (ret)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "did not get role");
-
-	/************************************************************/
-	egg_test_title (test, "get non-present role");
-	ret = pk_transaction_list_role_present (tlist, PK_ROLE_ENUM_SEARCH_NAME);
-	if (!ret)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "got missing role");
-
-	/************************************************************/
-	egg_test_title (test, "get size we have in queue");
-	size = pk_transaction_list_get_size (tlist);
-	if (size == 1)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "size %i", size);
-
-	/************************************************************/
-	egg_test_title (test, "get transactions (committed, not finished) in progress");
-	array = pk_transaction_list_get_array (tlist);
-	size = g_strv_length (array);
-	if (size == 1)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "size %i", size);
-	g_strfreev (array);
-
-	/* wait for Finished */
-	egg_test_loop_wait (test, 2000);
-	egg_test_loop_check (test);
-
-	/************************************************************/
-	egg_test_title (test, "get size one we have in queue");
-	size = pk_transaction_list_get_size (tlist);
-	if (size == 1)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "size %i", size);
-
-	/************************************************************/
-	egg_test_title (test, "get transactions (committed, not finished) in progress (none)");
-	array = pk_transaction_list_get_array (tlist);
-	size = g_strv_length (array);
-	if (size == 0)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "size %i", size);
-	g_strfreev (array);
-
-	/************************************************************/
-	egg_test_title (test, "remove already removed");
-	ret = pk_transaction_list_remove (tlist, tid);
-	if (!ret)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "tried to remove");
-
-	/* wait for Cleanup */
-	g_timeout_add_seconds (5, (GSourceFunc) pk_transaction_list_test_delay_cb, test);
-	egg_test_loop_wait (test, 10000);
-	egg_test_loop_check (test);
-
-	/************************************************************/
-	egg_test_title (test, "make sure queue empty");
-	size = pk_transaction_list_get_size (tlist);
-	if (size == 0)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "size %i", size);
-
-	g_free (tid);
-
-	/************************************************************
-	 ***************  Get updates from cache    *****************
-	 ************************************************************/
-	item = pk_transaction_list_test_get_item (tlist);
-	g_signal_connect (item->transaction, "finished",
-			  G_CALLBACK (pk_transaction_list_test_finished_cb), test);
-
-	pk_transaction_get_updates (item->transaction, "none", NULL);
-
-	/* wait for cached results*/
-	egg_test_loop_wait (test, 1000);
-	egg_test_loop_check (test);
-
-	/************************************************************/
-	egg_test_title (test, "make sure item has correct flags");
-	if (item->running == FALSE && item->committed == TRUE && item->finished == TRUE)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "wrong flags: running[%i] committed[%i] finished[%i]",
-				 item->running, item->committed, item->finished);
-
-	/************************************************************/
-	egg_test_title (test, "get transactions (committed, not finished) in progress (none, as cached)");
-	array = pk_transaction_list_get_array (tlist);
-	size = g_strv_length (array);
-	if (size == 0)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "size %i", size);
-	g_strfreev (array);
-
-	/************************************************************/
-	egg_test_title (test, "get size we have in queue");
-	size = pk_transaction_list_get_size (tlist);
-	if (size == 1)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "size %i", size);
-
-	/* wait for Cleanup */
-	g_timeout_add_seconds (5, (GSourceFunc) pk_transaction_list_test_delay_cb, test);
-	egg_test_loop_wait (test, 10000);
-	egg_test_loop_check (test);
-
-	/************************************************************/
-	egg_test_title (test, "get transactions (committed, not finished) in progress (none, as cached)");
-	array = pk_transaction_list_get_array (tlist);
-	size = g_strv_length (array);
-	if (size == 0)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "size %i", size);
-	g_strfreev (array);
-
-	/************************************************************/
-	egg_test_title (test, "get size we have in queue");
-	size = pk_transaction_list_get_size (tlist);
-	if (size == 0)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "size %i", size);
-
-	/************************************************************
-	 ****************  Chained transactions    ******************
-	 ************************************************************/
-
-	/* create three instances in list */
-	item1 = pk_transaction_list_test_get_item (tlist);
-	item2 = pk_transaction_list_test_get_item (tlist);
-	item3 = pk_transaction_list_test_get_item (tlist);
-
-	/************************************************************/
-	egg_test_title (test, "get all items in queue");
-	size = pk_transaction_list_get_size (tlist);
-	if (size == 3)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "size %i", size);
-
-	/************************************************************/
-	egg_test_title (test, "get transactions (committed, not finished) committed");
-	array = pk_transaction_list_get_array (tlist);
-	size = g_strv_length (array);
-	if (size == 0)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "size %i", size);
-	g_strfreev (array);
-
-	g_signal_connect (item1->transaction, "finished",
-			  G_CALLBACK (pk_transaction_list_test_finished_cb), test);
-	g_signal_connect (item2->transaction, "finished",
-			  G_CALLBACK (pk_transaction_list_test_finished_cb), test);
-	g_signal_connect (item3->transaction, "finished",
-			  G_CALLBACK (pk_transaction_list_test_finished_cb), test);
-
-	/* this starts one action */
-	array = g_strsplit ("dave", " ", -1);
-	pk_transaction_search_details (item1->transaction, "none", array, NULL);
-	g_strfreev (array);
-
-	/* this should be chained after the first action completes */
-	array = g_strsplit ("power", " ", -1);
-	pk_transaction_search_names (item2->transaction, "none", array, NULL);
-	g_strfreev (array);
-
-	/* this starts be chained after the second action completes */
-	array = g_strsplit ("paul", " ", -1);
-	pk_transaction_search_details (item3->transaction, "none", array, NULL);
-	g_strfreev (array);
-
-	/************************************************************/
-	egg_test_title (test, "get transactions (committed, not finished) in progress (all)");
-	array = pk_transaction_list_get_array (tlist);
-	size = g_strv_length (array);
-	if (size == 3)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "size %i", size);
-	g_strfreev (array);
-
-	/* wait for first action */
-	egg_test_loop_wait (test, 10000);
-	egg_test_loop_check (test);
-
-	/************************************************************/
-	egg_test_title (test, "get all items in queue");
-	size = pk_transaction_list_get_size (tlist);
-	if (size == 3)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "size %i", size);
-
-	/************************************************************/
-	egg_test_title (test, "get transactions (committed, not finished) (two, first one finished)");
-	array = pk_transaction_list_get_array (tlist);
-	size = g_strv_length (array);
-	if (size == 2)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "size %i", size);
-	g_strfreev (array);
-
-	/************************************************************/
-	egg_test_title (test, "make sure item1 has correct flags");
-	if (item1->running == FALSE && item1->committed == TRUE && item1->finished == TRUE)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "wrong flags: running[%i] committed[%i] finished[%i]",
-				 item1->running, item1->committed, item1->finished);
-
-	/************************************************************/
-	egg_test_title (test, "make sure item2 has correct flags");
-	if (item2->running == TRUE && item2->committed == TRUE && item2->finished == FALSE)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "wrong flags: running[%i] committed[%i] finished[%i]",
-				 item2->running, item2->committed, item2->finished);
-
-	/************************************************************/
-	egg_test_title (test, "make sure item3 has correct flags");
-	if (item3->running == FALSE && item3->committed == TRUE && item3->finished == FALSE)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "wrong flags: running[%i] committed[%i] finished[%i]",
-				 item3->running, item3->committed, item3->finished);
-
-	/* wait for second action */
-	egg_test_loop_wait (test, 10000);
-	egg_test_loop_check (test);
-
-	/************************************************************/
-	egg_test_title (test, "get all items in queue");
-	size = pk_transaction_list_get_size (tlist);
-	if (size == 3)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "size %i", size);
-
-	/************************************************************/
-	egg_test_title (test, "get transactions (committed, not finished) in progress (one)");
-	array = pk_transaction_list_get_array (tlist);
-	size = g_strv_length (array);
-	if (size == 1)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "size %i", size);
-	g_strfreev (array);
-
-	/************************************************************/
-	egg_test_title (test, "make sure item1 has correct flags");
-	if (item1->running == FALSE && item1->committed == TRUE && item1->finished == TRUE)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "wrong flags: running[%i] committed[%i] finished[%i]",
-				 item1->running, item1->committed, item1->finished);
-
-	/************************************************************/
-	egg_test_title (test, "make sure item2 has correct flags");
-	if (item2->running == FALSE && item2->committed == TRUE && item2->finished == TRUE)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "wrong flags: running[%i] committed[%i] finished[%i]",
-				 item2->running, item2->committed, item2->finished);
-
-	/************************************************************/
-	egg_test_title (test, "make sure item3 has correct flags");
-	if (item3->running == TRUE && item3->committed == TRUE && item3->finished == FALSE)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "wrong flags: running[%i] committed[%i] finished[%i]",
-				 item3->running, item3->committed, item3->finished);
-
-	/* wait for third action */
-	egg_test_loop_wait (test, 10000);
-	egg_test_loop_check (test);
-
-	/************************************************************/
-	egg_test_title (test, "get all items in queue");
-	size = pk_transaction_list_get_size (tlist);
-	if (size == 3)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "size %i", size);
-
-	/************************************************************/
-	egg_test_title (test, "get transactions (committed, not finished) in progress (none)");
-	array = pk_transaction_list_get_array (tlist);
-	size = g_strv_length (array);
-	if (size == 0)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "size %i", size);
-	g_strfreev (array);
-
-	/************************************************************/
-	egg_test_title (test, "make sure item1 has correct flags");
-	if (item1->running == FALSE && item1->committed == TRUE && item1->finished == TRUE)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "wrong flags: running[%i] committed[%i] finished[%i]",
-				 item1->running, item1->committed, item1->finished);
-
-	/************************************************************/
-	egg_test_title (test, "make sure item2 has correct flags");
-	if (item2->running == FALSE && item2->committed == TRUE && item2->finished == TRUE)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "wrong flags: running[%i] committed[%i] finished[%i]",
-				 item2->running, item2->committed, item2->finished);
-
-	/************************************************************/
-	egg_test_title (test, "make sure item3 has correct flags");
-	if (item3->running == FALSE && item3->committed == TRUE && item3->finished == TRUE)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "wrong flags: running[%i] committed[%i] finished[%i]",
-				 item3->running, item3->committed, item3->finished);
-
-	/* wait for Cleanup */
-	g_timeout_add_seconds (5, (GSourceFunc) pk_transaction_list_test_delay_cb, test);
-	egg_test_loop_wait (test, 10000);
-	egg_test_loop_check (test);
-
-	/************************************************************/
-	egg_test_title (test, "get both items in queue");
-	size = pk_transaction_list_get_size (tlist);
-	if (size == 0)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "size %i", size);
-
-	/************************************************************/
-	egg_test_title (test, "get transactions (committed, not finished) in progress (neither - again)");
-	array = pk_transaction_list_get_array (tlist);
-	size = g_strv_length (array);
-	if (size == 0)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "size %i", size);
-	g_strfreev (array);
-
-	g_object_unref (tlist);
-	g_object_unref (backend);
-	g_object_unref (cache);
-	g_object_unref (db);
-
-	egg_test_end (test);
-}
-#endif
-
diff --git a/src/pk-transaction-list.h b/src/pk-transaction-list.h
index 25bd62b..2f75cab 100644
--- a/src/pk-transaction-list.h
+++ b/src/pk-transaction-list.h
@@ -60,7 +60,7 @@ gboolean	 pk_transaction_list_create		(PkTransactionList	*tlist,
 							 GError			**error);
 gboolean	 pk_transaction_list_remove		(PkTransactionList	*tlist,
 							 const gchar		*tid);
-gboolean	 pk_transaction_list_set_background		(PkTransactionList	*tlist,
+gboolean	 pk_transaction_list_set_background	(PkTransactionList	*tlist,
 							 const gchar		*tid,
 							 gboolean		 background);
 gboolean	 pk_transaction_list_commit		(PkTransactionList	*tlist,
@@ -73,6 +73,11 @@ gchar		**pk_transaction_list_get_array		(PkTransactionList	*tlist)
 gchar		*pk_transaction_list_get_state		(PkTransactionList	*tlist)
 							 G_GNUC_WARN_UNUSED_RESULT;
 guint		 pk_transaction_list_get_size		(PkTransactionList	*tlist);
+PkTransaction	*pk_transaction_list_get_transaction	(PkTransactionList	*tlist,
+							 const gchar		*tid,
+							 gboolean		*running,
+							 gboolean		*committed,
+							 gboolean		*finished);
 
 G_END_DECLS
 
diff --git a/src/pk-transaction.c b/src/pk-transaction.c
index 055a641..356b33d 100644
--- a/src/pk-transaction.c
+++ b/src/pk-transaction.c
@@ -2036,8 +2036,8 @@ pk_transaction_strvalidate_char (gchar item)
  *
  * Return value: %TRUE if the string is valid
  **/
-static gboolean
-pk_transaction_strvalidate (const gchar *text)
+gboolean
+pk_transaction_strvalidate (const gchar *text, GError **error)
 {
 	guint i;
 	guint length;
@@ -2045,13 +2045,15 @@ pk_transaction_strvalidate (const gchar *text)
 	/* maximum size is 1024 */
 	length = egg_strlen (text, 1024);
 	if (length > 1024) {
-		egg_warning ("input too long: %u", length);
+		g_set_error (error, PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_INPUT_INVALID,
+			     "Invalid input passed to daemon: input too long: %u", length);
 		return FALSE;
 	}
 
 	for (i=0; i<length; i++) {
 		if (pk_transaction_strvalidate_char (text[i]) == FALSE) {
-			egg_warning ("invalid char '%c' in text!", text[i]);
+			g_set_error (error, PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_INPUT_INVALID,
+				     "Invalid input passed to daemon: char '%c' in text!", text[i]);
 			return FALSE;
 		}
 	}
@@ -2095,12 +2097,9 @@ pk_transaction_search_check_item (const gchar *values, GError **error)
 				     "The search string length is too large");
 		return FALSE;
 	}
-	ret = pk_transaction_strvalidate (values);
-	if (!ret) {
-		g_set_error_literal (error, PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_INPUT_INVALID,
-				     "Invalid search term");
+	ret = pk_transaction_strvalidate (values, error);
+	if (!ret)
 		return FALSE;
-	}
 	return TRUE;
 }
 
@@ -2126,10 +2125,10 @@ out:
 /**
  * pk_transaction_filter_check:
  **/
-static gboolean
+gboolean
 pk_transaction_filter_check (const gchar *filter, GError **error)
 {
-	gchar **sections;
+	gchar **sections = NULL;
 	guint i;
 	guint length;
 	gboolean ret = FALSE;
@@ -2140,16 +2139,13 @@ pk_transaction_filter_check (const gchar *filter, GError **error)
 	if (egg_strzero (filter)) {
 		g_set_error_literal (error, PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_INPUT_INVALID,
 				     "filter zero length");
-		return FALSE;
+		goto out;
 	}
 
 	/* check for invalid input */
-	ret = pk_transaction_strvalidate (filter);
-	if (!ret) {
-		g_set_error (error, PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_INPUT_INVALID,
-			     "Invalid filter term: %s", filter);
-		return FALSE;
-	}
+	ret = pk_transaction_strvalidate (filter, error);
+	if (!ret)
+		goto out;
 
 	/* split by delimeter ';' */
 	sections = g_strsplit (filter, ";", 0);
@@ -2157,17 +2153,18 @@ pk_transaction_filter_check (const gchar *filter, GError **error)
 	for (i=0; i<length; i++) {
 		/* only one wrong part is enough to fail the filter */
 		if (egg_strzero (sections[i])) {
+			ret = FALSE;
 			g_set_error (error, PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_INPUT_INVALID,
-					     "Single empty section of filter: %s", filter);
+				     "Single empty section of filter: %s", filter);
 			goto out;
 		}
 		if (pk_filter_enum_from_string (sections[i]) == PK_FILTER_ENUM_UNKNOWN) {
+			ret = FALSE;
 			g_set_error (error, PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_INPUT_INVALID,
-					     "Unknown filter part: %s", sections[i]);
+				     "Unknown filter part: %s", sections[i]);
 			goto out;
 		}
 	}
-	ret = TRUE;
 out:
 	g_strfreev (sections);
 	return ret;
@@ -2509,10 +2506,8 @@ pk_transaction_accept_eula (PkTransaction *transaction, const gchar *eula_id, DB
 	}
 
 	/* check for sanity */
-	ret = pk_transaction_strvalidate (eula_id);
+	ret = pk_transaction_strvalidate (eula_id, &error);
 	if (!ret) {
-		error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_INPUT_INVALID,
-				     "Invalid input passed to daemon");
 		pk_transaction_release_tid (transaction);
 		pk_transaction_dbus_return_error (context, error);
 		return;
@@ -3815,10 +3810,8 @@ pk_transaction_install_signature (PkTransaction *transaction, const gchar *sig_t
 	}
 
 	/* check for sanity */
-	ret = pk_transaction_strvalidate (key_id);
+	ret = pk_transaction_strvalidate (key_id, &error);
 	if (!ret) {
-		error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_INPUT_INVALID,
-				     "Invalid input passed to daemon");
 		pk_transaction_release_tid (transaction);
 		pk_transaction_dbus_return_error (context, error);
 		return;
@@ -4013,10 +4006,8 @@ pk_transaction_repo_enable (PkTransaction *transaction, const gchar *repo_id, gb
 	}
 
 	/* check for sanity */
-	ret = pk_transaction_strvalidate (repo_id);
+	ret = pk_transaction_strvalidate (repo_id, &error);
 	if (!ret) {
-		error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_INPUT_INVALID,
-				     "Invalid input passed to daemon");
 		pk_transaction_release_tid (transaction);
 		pk_transaction_dbus_return_error (context, error);
 		return;
@@ -4073,10 +4064,8 @@ pk_transaction_repo_set_data (PkTransaction *transaction, const gchar *repo_id,
 	}
 
 	/* check for sanity */
-	ret = pk_transaction_strvalidate (repo_id);
+	ret = pk_transaction_strvalidate (repo_id, &error);
 	if (!ret) {
-		error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_INPUT_INVALID,
-				     "Invalid input passed to daemon");
 		pk_transaction_release_tid (transaction);
 		pk_transaction_dbus_return_error (context, error);
 		return;
@@ -4159,10 +4148,8 @@ pk_transaction_resolve (PkTransaction *transaction, const gchar *filter,
 
 	/* check each package for sanity */
 	for (i=0; i<length; i++) {
-		ret = pk_transaction_strvalidate (packages[i]);
+		ret = pk_transaction_strvalidate (packages[i], &error);
 		if (!ret) {
-			error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_INPUT_INVALID,
-					     "Invalid input passed to daemon");
 			pk_transaction_release_tid (transaction);
 			pk_transaction_dbus_return_error (context, error);
 			return;
@@ -4221,10 +4208,8 @@ pk_transaction_rollback (PkTransaction *transaction, const gchar *transaction_id
 	}
 
 	/* check for sanity */
-	ret = pk_transaction_strvalidate (transaction_id);
+	ret = pk_transaction_strvalidate (transaction_id, &error);
 	if (!ret) {
-		error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_INPUT_INVALID,
-				     "Invalid input passed to daemon");
 		pk_transaction_release_tid (transaction);
 		pk_transaction_dbus_return_error (context, error);
 		return;
@@ -5664,154 +5649,3 @@ pk_transaction_new (void)
 	return PK_TRANSACTION (transaction);
 }
 
-/***************************************************************************
- ***                          MAKE CHECK TESTS                           ***
- ***************************************************************************/
-#ifdef EGG_TEST
-#include "egg-test.h"
-
-void
-egg_test_transaction (EggTest *test)
-{
-	PkTransaction *transaction = NULL;
-	gboolean ret;
-	const gchar *temp;
-	GError *error = NULL;
-#ifdef USE_SECURITY_POLKIT
-	const gchar *action;
-#endif
-
-	if (!egg_test_start (test, "PkTransaction"))
-		return;
-
-	/************************************************************/
-	egg_test_title (test, "get PkTransaction object");
-	transaction = pk_transaction_new ();
-	egg_test_assert (test, transaction != NULL);
-
-	/************************************************************
-	 ****************         MAP ROLES        ******************
-	 ************************************************************/
-#ifdef USE_SECURITY_POLKIT
-	egg_test_title (test, "map valid role to action");
-	action = pk_transaction_role_to_action_only_trusted (PK_ROLE_ENUM_UPDATE_PACKAGES);
-	if (g_strcmp0 (action, "org.freedesktop.packagekit.system-update") == 0)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "did not get correct action '%s'", action);
-
-	/************************************************************/
-	egg_test_title (test, "map invalid role to action");
-	action = pk_transaction_role_to_action_only_trusted (PK_ROLE_ENUM_SEARCH_NAME);
-	if (action == NULL)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "did not get correct action '%s'", action);
-#endif
-
-	/************************************************************
-	 ****************          FILTERS         ******************
-	 ************************************************************/
-	temp = NULL;
-	egg_test_title (test, "test a fail filter (null)");
-	ret = pk_transaction_filter_check (temp, &error);
-	egg_test_assert (test, !ret);
-	g_clear_error (&error);
-
-	/************************************************************/
-	temp = "";
-	egg_test_title (test, "test a fail filter ()");
-	ret = pk_transaction_filter_check (temp, &error);
-	egg_test_assert (test, !ret);
-	g_clear_error (&error);
-
-	/************************************************************/
-	temp = ";";
-	egg_test_title (test, "test a fail filter (;)");
-	ret = pk_transaction_filter_check (temp, &error);
-	egg_test_assert (test, !ret);
-	g_clear_error (&error);
-
-	/************************************************************/
-	temp = "moo";
-	egg_test_title (test, "test a fail filter (invalid)");
-	ret = pk_transaction_filter_check (temp, &error);
-	egg_test_assert (test, !ret);
-
-	g_clear_error (&error);
-
-	/************************************************************/
-	temp = "moo;foo";
-	egg_test_title (test, "test a fail filter (invalid, multiple)");
-	ret = pk_transaction_filter_check (temp, &error);
-	egg_test_assert (test, !ret);
-	g_clear_error (&error);
-
-	/************************************************************/
-	temp = "gui;;";
-	egg_test_title (test, "test a fail filter (valid then zero length)");
-	ret = pk_transaction_filter_check (temp, &error);
-	egg_test_assert (test, !ret);
-	g_clear_error (&error);
-
-	/************************************************************/
-	temp = "none";
-	egg_test_title (test, "test a pass filter (none)");
-	ret = pk_transaction_filter_check (temp, &error);
-	egg_test_assert (test, ret);
-	g_clear_error (&error);
-
-	/************************************************************/
-	temp = "gui";
-	egg_test_title (test, "test a pass filter (single)");
-	ret = pk_transaction_filter_check (temp, &error);
-	egg_test_assert (test, ret);
-	g_clear_error (&error);
-
-	/************************************************************/
-	temp = "devel;~gui";
-	egg_test_title (test, "test a pass filter (multiple)");
-	ret = pk_transaction_filter_check (temp, &error);
-	egg_test_assert (test, ret);
-	g_clear_error (&error);
-
-	/************************************************************/
-	temp = "~gui;~installed";
-	egg_test_title (test, "test a pass filter (multiple2)");
-	ret = pk_transaction_filter_check (temp, &error);
-	egg_test_assert (test, ret);
-	g_clear_error (&error);
-
-	/************************************************************
-	 ****************        validate text         **************
-	 ************************************************************/
-	egg_test_title (test, "validate correct char 1");
-	ret = pk_transaction_strvalidate_char ('a');
-	egg_test_assert (test, ret);
-
-	/************************************************************/
-	egg_test_title (test, "validate correct char 2");
-	ret = pk_transaction_strvalidate_char ('~');
-	egg_test_assert (test, ret);
-
-	/************************************************************/
-	egg_test_title (test, "validate incorrect char");
-	ret = pk_transaction_strvalidate_char ('$');
-	egg_test_assert (test, !ret);
-
-	/************************************************************/
-	egg_test_title (test, "validate incorrect text");
-	ret = pk_transaction_strvalidate ("richard$hughes");
-	egg_test_assert (test, !ret);
-
-	/************************************************************/
-	egg_test_title (test, "validate correct text");
-	ret = pk_transaction_strvalidate ("richardhughes");
-	egg_test_assert (test, ret);
-
-	g_object_unref (transaction);
-
-	egg_test_end (test);
-}
-#endif
-
diff --git a/src/pk-transaction.h b/src/pk-transaction.h
index db758f2..5de3eab 100644
--- a/src/pk-transaction.h
+++ b/src/pk-transaction.h
@@ -222,6 +222,10 @@ void		 pk_transaction_what_provides			(PkTransaction	*transaction,
 								 const gchar	*type,
 								 gchar		**values,
 								 DBusGMethodInvocation *context);
+gboolean	 pk_transaction_filter_check			(const gchar	*filter,
+								 GError		**error);
+gboolean	 pk_transaction_strvalidate			(const gchar	*textr,
+								 GError		**error);
 
 G_END_DECLS
 
commit bef88a9e2e2f4e533fba40ca008fd486d11ec8ba
Author: Richard Hughes <richard at hughsie.com>
Date:   Tue Jun 29 11:23:52 2010 +0100

    Ensure we clear the cancel timer when we finish a PkBackend transaction to avoid the next transaction getting cancelled automatically

diff --git a/src/pk-backend.c b/src/pk-backend.c
index 5c8173f..4fb17af 100644
--- a/src/pk-backend.c
+++ b/src/pk-backend.c
@@ -2074,6 +2074,12 @@ 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);
 	egg_debug ("finished role %s", role_text);
commit 80a2ead6e470b82ddba9d52b3fb852056ee6b554
Author: Richard Hughes <richard at hughsie.com>
Date:   Tue Jun 29 11:23:01 2010 +0100

    trivial: print the overwriting role in pk_backend_set_role_internal()

diff --git a/src/pk-backend.c b/src/pk-backend.c
index f17ffd7..5c8173f 100644
--- a/src/pk-backend.c
+++ b/src/pk-backend.c
@@ -1980,8 +1980,9 @@ pk_backend_set_role_internal (PkBackend *backend, PkRoleEnum role)
 {
 	/* Should only be called once... */
 	if (backend->priv->role != PK_ROLE_ENUM_UNKNOWN) {
-		egg_warning ("cannot set role more than once, already %s",
-			    pk_role_enum_to_string (backend->priv->role));
+		egg_warning ("cannot set role to %s, already %s",
+			     pk_role_enum_to_string (role),
+			     pk_role_enum_to_string (backend->priv->role));
 		return FALSE;
 	}
 
commit a24e9e1263ad53a5fd0e6eadef23fdd42121c168
Merge: 406d453... d122718...
Author: Daniel Nicoletti <dantti85-pk at yahoo.com.br>
Date:   Mon Jun 28 13:18:26 2010 -0300

    Merge branch 'master' of git+ssh://git.packagekit.org/srv/git/PackageKit

commit 406d45300f7c6484e427c889e799261aadc87087
Author: Daniel Nicoletti <dantti85-pk at yahoo.com.br>
Date:   Mon Jun 28 13:17:10 2010 -0300

    aptcc: Added distro upgrade support
           Added debconf support

diff --git a/backends/aptcc/apt.cpp b/backends/aptcc/apt.cpp
index f7505af..2ba57d5 100644
--- a/backends/aptcc/apt.cpp
+++ b/backends/aptcc/apt.cpp
@@ -816,19 +816,19 @@ vector<string> searchMimeType (PkBackend *backend, gchar **values, bool &error,
 // 	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) {
 // 		egg_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/"))) {
@@ -837,7 +837,7 @@ vector<string> searchMimeType (PkBackend *backend, gchar **values, bool &error,
 // 		error = true;
 // 		return vector<string>();
 // 	}
-// 
+//
 // 	string line;
 // 	while ((dirp = readdir(dp)) != NULL) {
 // 		if (_cancel) {
@@ -867,7 +867,7 @@ vector<string> searchMimeType (PkBackend *backend, gchar **values, bool &error,
 // 			}
 // 		}
 // 	}
-// 
+//
 // 	closedir(dp);
 // 	regfree(&re);
 // 	return packageList;
@@ -1079,7 +1079,7 @@ bool aptcc::removingEssentialPackages(pkgCacheFile &Cache)
 						      List.c_str()));
 		return true;
 	}
-	
+
 	return false;
 }
 
@@ -1220,24 +1220,24 @@ void aptcc::updateInterface(int fd, int writeFd)
 				string orig_file, new_file;
 
 				// go to first ' and read until the end
-				for(;str[i] != '\'' || str[i] == 0; i++) 
+				for(;str[i] != '\'' || str[i] == 0; i++)
 					/*nothing*/
 					;
 				i++;
-				for(;str[i] != '\'' || str[i] == 0; i++) 
+				for(;str[i] != '\'' || str[i] == 0; i++)
 					orig_file.append(1, str[i]);
 				i++;
 
 				// same for second ' and read until the end
-				for(;str[i] != '\'' || str[i] == 0; i++) 
+				for(;str[i] != '\'' || str[i] == 0; i++)
 					/*nothing*/
 				;
 				i++;
-				for(;str[i] != '\'' || str[i] == 0; i++) 
+				for(;str[i] != '\'' || str[i] == 0; i++)
 					new_file.append(1, str[i]);
 				i++;
 
-				gchar *confmsg; 
+				gchar *confmsg;
 				confmsg = g_strdup_printf("The configuration file '%s' "
 							  "(modified by you or a script) "
 							  "has a newer version '%s'.\n"
@@ -1681,7 +1681,15 @@ cout << "How odd.. The sizes didn't match, email apt at packages.debian.org";
 		setlocale(LC_ALL, "C");
 
 		// Debconf handlying
-		setenv("DEBIAN_FRONTEND", "dbus", 1);
+		gchar *socket;
+		if (socket = pk_backend_get_frontend_socket(m_backend)) {
+			setenv("DEBIAN_FRONTEND", "passthrough", 1);
+			setenv("DEBCONF_PIPE", socket, 1);
+		} else {
+			// we don't have a socket set, let's fallback to noninteractive
+			setenv("DEBIAN_FRONTEND", "noninteractive", 1);
+		}
+
 		gchar *locale;
 		// Set the LANGUAGE so debconf messages get localization
 		if (locale = pk_backend_get_locale(m_backend)) {
diff --git a/backends/aptcc/get-distro-upgrade.py b/backends/aptcc/get-distro-upgrade.py
new file mode 100755
index 0000000..1cda1a9
--- /dev/null
+++ b/backends/aptcc/get-distro-upgrade.py
@@ -0,0 +1,44 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+"""
+Provides an apt backend to PackageKit
+
+Copyright (C) 2007 Ali Sabil <ali.sabil at gmail.com>
+Copyright (C) 2007 Tom Parker <palfrey at tevp.net>
+Copyright (C) 2008-2009 Sebastian Heinlein <glatzor at ubuntu.com>
+Copyright (C) 2010 Daniel Nicoletti <dantti85-pk at yahoo.com.br>
+
+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.
+"""
+
+# TODO get rid of this python file
+import sys;
+import time;
+
+try:
+    from UpdateManager.Core.MetaRelease import MetaReleaseCore
+except ImportError:
+    META_RELEASE_SUPPORT = False
+else:
+    META_RELEASE_SUPPORT = True
+
+# Could not load the UpdateManager
+if META_RELEASE_SUPPORT == False:
+    sys.exit(1);
+
+#FIXME Evil to start the download during init
+meta_release = MetaReleaseCore(False, False)
+
+#FIXME: should use a lock
+while meta_release.downloading:
+    time.sleep(1)
+
+#FIXME: Add support for description
+if meta_release.new_dist != None:
+    print meta_release.new_dist.name;
+    print meta_release.new_dist.version;
diff --git a/backends/aptcc/pk-backend-aptcc.cpp b/backends/aptcc/pk-backend-aptcc.cpp
index 4566b95..5bf9ac5 100644
--- a/backends/aptcc/pk-backend-aptcc.cpp
+++ b/backends/aptcc/pk-backend-aptcc.cpp
@@ -20,6 +20,7 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  */
 
+#include <stdio.h>
 #include <apt-pkg/init.h>
 #include <apt-pkg/algorithms.h>
 
@@ -220,6 +221,51 @@ backend_get_requires (PkBackend *backend, PkBitfield filters, gchar **package_id
 	pk_backend_thread_create (backend, backend_get_depends_or_requires_thread);
 }
 
+
+static gboolean
+backend_get_distro_upgrades_thread (PkBackend *backend)
+{
+	FILE *fpipe;
+	char releaseName[256];
+	char releaseVersion[256];
+
+	pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
+
+	if (!(fpipe = (FILE*)popen("./get-distro-upgrade.py", "r"))) {
+	    goto out;
+	}
+
+	if (fgets(releaseName, sizeof releaseName, fpipe)) {
+	    goto out;
+	}
+
+	if (fgets(releaseVersion, sizeof releaseVersion, fpipe)) {
+	    goto out;
+	}
+	pclose(fpipe);
+
+	pk_backend_distro_upgrade (backend,
+				   PK_DISTRO_UPGRADE_ENUM_STABLE,
+				   g_strdup_printf("%s %s", releaseName, releaseVersion),
+				   "The latest stable release");
+
+	pk_backend_finished (backend);
+	return true;
+
+out:
+	pk_backend_finished (backend);
+	return false;
+}
+
+/**
+ * backend_get_distro_upgrades:
+ */
+static void
+backend_get_distro_upgrades (PkBackend *backend)
+{
+	pk_backend_thread_create (backend, backend_get_distro_upgrades_thread);
+}
+
 static gboolean
 backend_get_files_thread (PkBackend *backend)
 {
@@ -1463,7 +1509,7 @@ extern "C" PK_BACKEND_OPTIONS (
 	NULL,						/* get_categories */
 	backend_get_depends,				/* get_depends */
 	backend_get_details,				/* get_details */
-	NULL,						/* get_distro_upgrades */
+	backend_get_distro_upgrades,			/* get_distro_upgrades */
 	backend_get_files,				/* get_files */
 	backend_get_packages,				/* get_packages */
 	backend_get_repo_list,				/* get_repo_list */
diff --git a/docs/html/pk-matrix.html b/docs/html/pk-matrix.html
index b923dab..ec8d93b 100644
--- a/docs/html/pk-matrix.html
+++ b/docs/html/pk-matrix.html
@@ -117,7 +117,7 @@
 <tr>
 <td><b>GetDistroUpgrades</b></td>
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- apt -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- aptcc -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- aptcc -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- alpm -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- box -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- conary -->
commit d122718318f588735c53189437422b55c1c4fb14
Author: Anders F Bjorklund <afb at users.sourceforge.net>
Date:   Mon Jun 28 11:45:47 2010 +0200

    ports: use distfiles size, for uninstalled packages

diff --git a/backends/ports/portsBackend.rb b/backends/ports/portsBackend.rb
index 7e92026..7e0e545 100755
--- a/backends/ports/portsBackend.rb
+++ b/backends/ports/portsBackend.rb
@@ -480,6 +480,23 @@ GROUPS = {
     end
   end
 
+  def _distsize(origin)
+    portdir = $portsdb.portdir(origin)
+    file = $portsdb.make_var('MD5_FILE', portdir) # 'distinfo'
+    dist_dir = $portsdb.make_var('DISTDIR', $portsdb.my_portdir)
+    distsize = 0
+    open(file) do |f|
+      f.each do |line|
+        if /^SIZE \((.*)\) = ([0-9]+)/ =~ line
+          if not File.exist?(File.join(dist_dir, $1))
+            distsize += $2.to_i
+          end
+        end
+      end
+    end
+    return distsize
+  end
+
   def get_details(package_ids)
     status(STATUS_INFO)
     package_ids.each do |package|
@@ -506,7 +523,7 @@ GROUPS = {
             desc = desc.gsub(/\n/, ';')
             desc = desc.gsub(/\t/, ' ')
         end
-        size = pkg.totalsize || 0
+        size = pkg.totalsize || _distsize(port.origin)
         details(package, license, group, desc, www, size)
       end
       else
commit 2b79865440d4ff89bb7daca617ebed296fe83f76
Author: Sebastian Heinlein <devel at glatzor.de>
Date:   Fri Jun 25 12:43:52 2010 +0200

    APT: Fix group searching. Missed an API change.

diff --git a/backends/apt/aptBackend.py b/backends/apt/aptBackend.py
index b2539bb..1d91c6a 100755
--- a/backends/apt/aptBackend.py
+++ b/backends/apt/aptBackend.py
@@ -607,11 +607,11 @@ class PackageKitAptBackend(PackageKitBaseBackend):
                     self._emit_visible_package(filters, pkg)
                     break
 
-    def search_group(self, filters_str, group):
+    def search_group(self, filters_str, groups):
         """
         Implement the apt2-search-group functionality
         """
-        pklog.info("Searching for group: %s" % group)
+        pklog.info("Searching for groups: %s" % groups)
         self.status(STATUS_QUERY)
         self.percentage(None)
         self._check_init(progress=False)
@@ -621,7 +621,7 @@ class PackageKitAptBackend(PackageKitBaseBackend):
         filters = filters_str.split(";")
 
         for pkg in self._cache:
-            if self._get_package_group(pkg) == group:
+            if self._get_package_group(pkg) in groups:
                 self._emit_visible_package(filters, pkg)
 
     def search_name(self, filters_str, values):
commit cb52a7ef6bcc6cc73849593f5b75b435638e5376
Author: Sebastian Heinlein <devel at glatzor.de>
Date:   Fri Jun 25 10:13:57 2010 +0200

    APT: Adapt to an API change to allow OR searches (from last December)

diff --git a/backends/apt/pk-backend-apt.c b/backends/apt/pk-backend-apt.c
index 7c8e5c5..79ec435 100644
--- a/backends/apt/pk-backend-apt.c
+++ b/backends/apt/pk-backend-apt.c
@@ -331,48 +331,60 @@ backend_remove_packages (PkBackend *backend, gchar **package_ids, gboolean allow
  * pk_backend_search_details:
  */
 static void
-backend_search_details (PkBackend *backend, PkBitfield filters, const gchar *search)
+backend_search_details (PkBackend *backend, PkBitfield filters, gchar **values)
 {
 	gchar *filters_text;
+	gchar *search;
 	filters_text = pk_filter_bitfield_to_string (filters);
+	search = g_strjoinv ("&", values);
 	pk_backend_spawn_helper (spawn, "aptBackend.py", "search-details", filters_text, search, NULL);
 	g_free (filters_text);
+	g_free (search);
 }
 
 /**
  * pk_backend_search_file:
  */
 static void
-backend_search_file (PkBackend *backend, PkBitfield filters, const gchar *search)
+backend_search_file (PkBackend *backend, PkBitfield filters, gchar **values)
 {
 	gchar *filters_text;
+	gchar *search;
 	filters_text = pk_filter_bitfield_to_string (filters);
+	search = g_strjoinv ("&", values);
 	pk_backend_spawn_helper (spawn, "aptBackend.py", "search-file", filters_text, search, NULL);
 	g_free (filters_text);
+	g_free (search);
 }
 
 /**
  * pk_backend_search_group:
  */
 static void
-backend_search_group (PkBackend *backend, PkBitfield filters, const gchar *search)
+backend_search_group (PkBackend *backend, PkBitfield filters, gchar **values)
 {
 	gchar *filters_text;
+	gchar *search;
 	filters_text = pk_filter_bitfield_to_string (filters);
+	search = g_strjoinv ("&", values);
 	pk_backend_spawn_helper (spawn, "aptBackend.py", "search-group", filters_text, search, NULL);
 	g_free (filters_text);
+	g_free (search);
 }
 
 /**
  * pk_backend_search_name:
  */
 static void
-backend_search_name (PkBackend *backend, PkBitfield filters, const gchar *search)
+backend_search_name (PkBackend *backend, PkBitfield filters, gchar **values)
 {
 	gchar *filters_text;
+	gchar *search;
 	filters_text = pk_filter_bitfield_to_string (filters);
+	search = g_strjoinv ("&", values);
 	pk_backend_spawn_helper (spawn, "aptBackend.py", "search-name", filters_text, search, NULL);
 	g_free (filters_text);
+	g_free (search);
 }
 
 /**
commit 2e48cf3c1d23d8c6c3d5811d893882c1616bdd5a
Author: Sebastian Heinlein <devel at glatzor.de>
Date:   Fri Jun 25 09:33:10 2010 +0200

    APT: Trivial. Fix an oversight from the last commit

diff --git a/backends/apt/aptBackend.py b/backends/apt/aptBackend.py
index eec7500..b2539bb 100755
--- a/backends/apt/aptBackend.py
+++ b/backends/apt/aptBackend.py
@@ -548,7 +548,7 @@ class PackageKitAptBackend(PackageKitBaseBackend):
 
         Works only for installed file if apt-file isn't installed.
         """
-        pklog.info("Searching for file: %s" % filenames_string)
+        pklog.info("Searching for file: %s" % filenames)
         self.status(STATUS_QUERY)
         self.percentage(None)
         self._check_init(progress=False)
commit 0a7e2306c0e9190a06cafcd82e6e4683808412bf
Author: Sebastian Heinlein <devel at glatzor.de>
Date:   Fri Jun 25 09:26:52 2010 +0200

    APT: Adapt to splitted arguments from the Python backend

diff --git a/backends/apt/aptBackend.py b/backends/apt/aptBackend.py
index 474ac85..eec7500 100755
--- a/backends/apt/aptBackend.py
+++ b/backends/apt/aptBackend.py
@@ -543,7 +543,7 @@ class PackageKitAptBackend(PackageKitBaseBackend):
 
     # Methods ( client -> engine -> backend )
 
-    def search_file(self, filters, filenames_string):
+    def search_file(self, filters_str, filenames):
         """Search for files in packages.
 
         Works only for installed file if apt-file isn't installed.
@@ -554,13 +554,15 @@ class PackageKitAptBackend(PackageKitBaseBackend):
         self._check_init(progress=False)
         self.allow_cancel(True)
 
-        filenames = filenames_string.split("&")
+        #FIXME: Should be done by the backend class
+        filters = filters_str.split(";")
+
         result_names = set()
         # Optionally make use of apt-file's Contents cache to search for not
         # installed files. But still search for installed files additionally
         # to make sure that we provide up-to-date results
         if os.path.exists("/usr/bin/apt-file") and \
-           FILTER_INSTALLED not in filters.split(";"):
+           FILTER_INSTALLED not in filters:
             #FIXME: Make use of rapt-file on Debian if the network is available
             #FIXME: Show a warning to the user if the apt-file cache is several
             #       weeks old
@@ -605,7 +607,7 @@ class PackageKitAptBackend(PackageKitBaseBackend):
                     self._emit_visible_package(filters, pkg)
                     break
 
-    def search_group(self, filters, group):
+    def search_group(self, filters_str, group):
         """
         Implement the apt2-search-group functionality
         """
@@ -615,11 +617,14 @@ class PackageKitAptBackend(PackageKitBaseBackend):
         self._check_init(progress=False)
         self.allow_cancel(True)
 
+        #FIXME: Should be done by the backend class
+        filters = filters_str.split(";")
+
         for pkg in self._cache:
             if self._get_package_group(pkg) == group:
                 self._emit_visible_package(filters, pkg)
 
-    def search_name(self, filters, values):
+    def search_name(self, filters_str, values):
         """
         Implement the apt2-search-name functionality
         """
@@ -634,12 +639,15 @@ class PackageKitAptBackend(PackageKitBaseBackend):
         self._check_init(progress=False)
         self.allow_cancel(True)
 
+        #FIXME: Should be done by the backend class
+        filters = filters_str.split(";")
+
         for pkg_name in self._cache.keys():
             if matches(values, pkg_name):
                 self._emit_all_visible_pkg_versions(filters,
                                                     self._cache[pkg_name])
 
-    def search_details(self, filters, values):
+    def search_details(self, filters_str, values):
         """
         Implement the apt2-search-details functionality
         """
@@ -650,6 +658,9 @@ class PackageKitAptBackend(PackageKitBaseBackend):
         self.allow_cancel(True)
         results = []
 
+        #FIXME: Should be done by the backend class
+        filters = filters_str.split(";")
+
         if XAPIAN_SUPPORT == True:
             search_flags = (xapian.QueryParser.FLAG_BOOLEAN |
                             xapian.QueryParser.FLAG_PHRASE |
@@ -1088,7 +1099,6 @@ class PackageKitAptBackend(PackageKitBaseBackend):
                 self.error(ERROR_INTERNAL_ERROR,
                            "Please make sure that python-software-properties is"
                            "correctly installed.")
-        filter_list = filters.split(";")
         repos = PackageKitSoftwareProperties()
         # Emit distro components as virtual repositories
         for comp in repos.distro.source_template.components:
@@ -1099,7 +1109,7 @@ class PackageKitAptBackend(PackageKitBaseBackend):
                                                comp.name)
             #FIXME: There is no inconsitent state in PackageKit
             enabled = repos.get_comp_download_state(comp)[0]
-            if not FILTER_DEVELOPMENT in filter_list:
+            if not FILTER_DEVELOPMENT in filters:
                 self.repo_detail(repo_id,
                                  description.decode(DEFAULT_ENCODING),
                                  enabled)
@@ -1112,13 +1122,13 @@ class PackageKitAptBackend(PackageKitBaseBackend):
                                                template.name)
             #FIXME: There is no inconsitent state in PackageKit
             enabled = repos.get_comp_child_state(template)[0]
-            if not FILTER_DEVELOPMENT in filter_list:
+            if not FILTER_DEVELOPMENT in filters:
                 self.repo_detail(repo_id,
                                  description.decode(DEFAULT_ENCODING),
                                  enabled)
         # Emit distro's cdrom sources
         for source in repos.get_cdrom_sources():
-            if FILTER_NOT_DEVELOPMENT in filter_list and \
+            if FILTER_NOT_DEVELOPMENT in filters and \
                source.type in ("deb-src", "rpm-src"):
                 continue
             enabled = not source.disabled
@@ -1129,7 +1139,7 @@ class PackageKitAptBackend(PackageKitBaseBackend):
             self.repo_detail(repo_id, description.decode(DEFAULT_ENCODING),
                              enabled)
         # Emit distro's virtual source code repositoriy
-        if not FILTER_NOT_DEVELOPMENT in filter_list:
+        if not FILTER_NOT_DEVELOPMENT in filters:
             repo_id = "%s_source" % repos.distro.id
             enabled = repos.get_source_code_state() or False
             #FIXME: no translation :(
@@ -1139,7 +1149,7 @@ class PackageKitAptBackend(PackageKitBaseBackend):
                              enabled)
         # Emit third party repositories
         for source in repos.get_isv_sources():
-            if FILTER_NOT_DEVELOPMENT in filter_list and \
+            if FILTER_NOT_DEVELOPMENT in filters and \
                source.type in ("deb-src", "rpm-src"):
                 continue
             enabled = not source.disabled
@@ -1570,8 +1580,7 @@ class PackageKitAptBackend(PackageKitBaseBackend):
             """Send a blocked package signal for the given
             apt.package.BaseDependency.
             """
-            filters_lst = filters.split(";")
-            if FILTER_INSTALLED in filters_lst:
+            if FILTER_INSTALLED in filters:
                 return
             if pkg:
                 summary = pkg.summary
@@ -2021,9 +2030,9 @@ class PackageKitAptBackend(PackageKitBaseBackend):
         """
         Return True if the package should be shown in the user interface
         """
-        if filters == FILTER_NONE:
+        if filters == [FILTER_NONE]:
             return True
-        for filter in filters.split(";"):
+        for filter in filters:
             if (filter == FILTER_INSTALLED and not pkg.isInstalled) or \
                (filter == FILTER_NOT_INSTALLED and pkg.isInstalled) or \
                (filter == FILTER_SUPPORTED and not \
commit bb540392bcc9be20c75d5d2059d59b74ab028df3
Author: Michael Meeks <michael.meeks at novell.com>
Date:   Wed Jun 23 12:44:58 2010 +0100

    Don't crash checking status of non-patches.

diff --git a/backends/zypp/zypp-utils.cpp b/backends/zypp/zypp-utils.cpp
index 86ea3fd..7fb3aca 100644
--- a/backends/zypp/zypp-utils.cpp
+++ b/backends/zypp/zypp-utils.cpp
@@ -777,6 +777,9 @@ zypp_get_updates (PkBackend *backend)
 gboolean
 zypp_get_restart (PkRestartEnum &restart, zypp::Patch::constPtr patch)
 {
+	if (patch == NULL)
+		return false;
+
 	// set the restart flag if a restart is needed
 	if (restart != PK_RESTART_ENUM_SYSTEM && (patch->reloginSuggested () ||
 						  patch->restartSuggested () ||
commit b9460af7429630144b01fab9dd08aa2c2534b700
Author: Michael Meeks <michael.meeks at novell.com>
Date:   Wed Jun 23 10:44:54 2010 +0100

    fix FPE when there are no repos.

diff --git a/backends/zypp/zypp-utils.cpp b/backends/zypp/zypp-utils.cpp
index 0c2272c..86ea3fd 100644
--- a/backends/zypp/zypp-utils.cpp
+++ b/backends/zypp/zypp-utils.cpp
@@ -1028,7 +1028,6 @@ zypp_refresh_cache (PkBackend *backend, gboolean force)
 
 	int i = 1;
 	int num_of_repos = repos.size ();
-	int percentage_increment = 100 / num_of_repos;
 	gchar *repo_messages = NULL;
 
 	for (std::list <zypp::RepoInfo>::iterator it = repos.begin(); it != repos.end(); it++, i++) {
@@ -1065,7 +1064,7 @@ zypp_refresh_cache (PkBackend *backend, gboolean force)
 		}
 
 		// Update the percentage completed
-		pk_backend_set_percentage (backend, i == num_of_repos ? 100 : i * percentage_increment);
+		pk_backend_set_percentage (backend, i >= num_of_repos ? 100 : (100 * i) / num_of_repos);
 	}
 	if (repo_messages != NULL)
 		pk_backend_message (backend, PK_MESSAGE_ENUM_CONNECTION_REFUSED, repo_messages);
commit 8fa210808d58d3c6cc45fdfd1acb7a7d73015acd
Author: Michael Meeks <michael.meeks at novell.com>
Date:   Fri May 21 17:22:49 2010 +0100

    Disable get_zypp in intialize - initialize has to be fairly fast otherwise
    we get dbus method timeouts killing eg. gpk-application on first start as
    it calls GetAll properties.

diff --git a/backends/zypp/pk-backend-zypp.cpp b/backends/zypp/pk-backend-zypp.cpp
index 378bcdc..b371424 100644
--- a/backends/zypp/pk-backend-zypp.cpp
+++ b/backends/zypp/pk-backend-zypp.cpp
@@ -83,7 +83,7 @@ static void
 backend_initialize (PkBackend *backend)
 {
 	zypp_logging ();
-	get_zypp (backend);
+//	disabled get_zypp() - too slow for a dbus timeout after zypper clean -a
 	egg_debug ("zypp_backend_initialize");
 	EventDirector *eventDirector = new EventDirector (backend);
 	_eventDirectors [backend] = eventDirector;
@@ -1092,6 +1092,7 @@ backend_install_signature_thread (PkBackend *backend)
 {
 	pk_backend_set_status (backend, PK_STATUS_ENUM_SIG_CHECK);
 	const gchar *key_id = pk_backend_get_string (backend, "key_id");
+	const gchar *package_id = pk_backend_get_string (backend, "package_id");
 	_signatures[backend]->push_back ((std::string)(key_id));
 
 	pk_backend_finished (backend);
commit 0db859bf598b4fab7f296631e384a3fc67658061
Author: Aurelien Lefebvre <alkh at mandriva.org>
Date:   Mon Jun 21 20:44:54 2010 +0200

    Updated my email address in source code

diff --git a/backends/urpmi/helpers/perl_packagekit/enums.pm b/backends/urpmi/helpers/perl_packagekit/enums.pm
index 4a2df62..a4eb92a 100644
--- a/backends/urpmi/helpers/perl_packagekit/enums.pm
+++ b/backends/urpmi/helpers/perl_packagekit/enums.pm
@@ -1,5 +1,5 @@
 #
-# Copyright (C) 2008 Aurelien Lefebvre <alefebvre at mandriva.com>
+# Copyright (C) 2008 Aurelien Lefebvre <alkh at mandriva.org>
 #
 # Licensed under the GNU General Public License Version 2
 #
diff --git a/backends/urpmi/helpers/perl_packagekit/prints.pm b/backends/urpmi/helpers/perl_packagekit/prints.pm
index af1a9ee..db3fdbc 100644
--- a/backends/urpmi/helpers/perl_packagekit/prints.pm
+++ b/backends/urpmi/helpers/perl_packagekit/prints.pm
@@ -1,5 +1,5 @@
 #
-# Copyright (C) 2008 Aurelien Lefebvre <alefebvre at mandriva.com>
+# Copyright (C) 2008 Aurelien Lefebvre <alkh at mandriva.org>
 #
 # Licensed under the GNU General Public License Version 2
 #
diff --git a/backends/urpmi/helpers/urpmi-dispatched-backend.pl b/backends/urpmi/helpers/urpmi-dispatched-backend.pl
index de1012f..8b709e6 100755
--- a/backends/urpmi/helpers/urpmi-dispatched-backend.pl
+++ b/backends/urpmi/helpers/urpmi-dispatched-backend.pl
@@ -1,6 +1,6 @@
 #!/usr/bin/perl
 #
-# Copyright (C) 2008 Aurelien Lefebvre <alefebvre at mandriva.com>
+# Copyright (C) 2008 Aurelien Lefebvre <alkh at mandriva.org>
 #
 # Licensed under the GNU General Public License Version 2
 #
diff --git a/backends/urpmi/helpers/urpmi_backend/actions.pm b/backends/urpmi/helpers/urpmi_backend/actions.pm
index af3dcb1..7b65b4c 100644
--- a/backends/urpmi/helpers/urpmi_backend/actions.pm
+++ b/backends/urpmi/helpers/urpmi_backend/actions.pm
@@ -1,5 +1,5 @@
 #
-# Copyright (C) 2008 Aurelien Lefebvre <alefebvre at mandriva.com>
+# Copyright (C) 2008 Aurelien Lefebvre <alkh at mandriva.org>
 #
 # Licensed under the GNU General Public License Version 2
 #
diff --git a/backends/urpmi/helpers/urpmi_backend/filters.pm b/backends/urpmi/helpers/urpmi_backend/filters.pm
index b8d2a7d..7cb064b 100644
--- a/backends/urpmi/helpers/urpmi_backend/filters.pm
+++ b/backends/urpmi/helpers/urpmi_backend/filters.pm
@@ -1,5 +1,5 @@
 #
-# Copyright (C) 2008 Aurelien Lefebvre <alefebvre at mandriva.com>
+# Copyright (C) 2008 Aurelien Lefebvre <alkh at mandriva.org>
 #
 # Licensed under the GNU General Public License Version 2
 #
diff --git a/backends/urpmi/helpers/urpmi_backend/groups.pm b/backends/urpmi/helpers/urpmi_backend/groups.pm
index 9c92600..92b0360 100644
--- a/backends/urpmi/helpers/urpmi_backend/groups.pm
+++ b/backends/urpmi/helpers/urpmi_backend/groups.pm
@@ -1,5 +1,5 @@
 #
-# Copyright (C) 2008 Aurelien Lefebvre <alefebvre at mandriva.com>
+# Copyright (C) 2008 Aurelien Lefebvre <alkh at mandriva.org>
 #
 # Licensed under the GNU General Public License Version 2
 #
diff --git a/backends/urpmi/helpers/urpmi_backend/open_db.pm b/backends/urpmi/helpers/urpmi_backend/open_db.pm
index aeec0a4..f765146 100644
--- a/backends/urpmi/helpers/urpmi_backend/open_db.pm
+++ b/backends/urpmi/helpers/urpmi_backend/open_db.pm
@@ -1,5 +1,5 @@
 #
-# Copyright (C) 2008 Aurelien Lefebvre <alefebvre at mandriva.com>
+# Copyright (C) 2008 Aurelien Lefebvre <alkh at mandriva.org>
 #
 # Licensed under the GNU General Public License Version 2
 #
diff --git a/backends/urpmi/helpers/urpmi_backend/tools.pm b/backends/urpmi/helpers/urpmi_backend/tools.pm
index 4869b98..bb6d0d1 100644
--- a/backends/urpmi/helpers/urpmi_backend/tools.pm
+++ b/backends/urpmi/helpers/urpmi_backend/tools.pm
@@ -1,5 +1,5 @@
 #
-# Copyright (C) 2008 Aurelien Lefebvre <alefebvre at mandriva.com>
+# Copyright (C) 2008 Aurelien Lefebvre <alkh at mandriva.org>
 #
 # Licensed under the GNU General Public License Version 2
 #
diff --git a/backends/urpmi/pk-backend-urpmi.c b/backends/urpmi/pk-backend-urpmi.c
index 3d1a468..0a1cfa3 100644
--- a/backends/urpmi/pk-backend-urpmi.c
+++ b/backends/urpmi/pk-backend-urpmi.c
@@ -362,7 +362,7 @@ backend_get_distro_upgrades (PkBackend *backend)
 
 PK_BACKEND_OPTIONS (
 	"URPMI",					/* description */
-	"Aurelien Lefebvre <alefebvre at mandriva.com>",	/* author */
+	"Aurelien Lefebvre <alkh at mandriva.org>",	/* author */
 	backend_initialize,			/* initalize */
 	backend_destroy,			/* destroy */
 	backend_get_groups,			/* get_groups */
commit fe8dc5a1f15561f54baf28545e23098115d56350
Author: Aurelien Lefebvre <alkh at mandriva.org>
Date:   Mon Jun 21 20:41:27 2010 +0200

    urpmi: fix update-system command and only_trusted parameter
    
    incorrectly modified two calls to perform_installation to pass options hash as a reference,
    causing the parameters to not be interpreted correctly by
    perform_installation, breaking update-system command and causing
    only_trusted to be ignored in these cases.
    
    Fix that by passing the options as key/value pairs as expected by
    perform_installation.

diff --git a/backends/urpmi/helpers/urpmi-dispatched-backend.pl b/backends/urpmi/helpers/urpmi-dispatched-backend.pl
index 9a0cf72..de1012f 100755
--- a/backends/urpmi/helpers/urpmi-dispatched-backend.pl
+++ b/backends/urpmi/helpers/urpmi-dispatched-backend.pl
@@ -383,7 +383,7 @@ sub install_packages {
     caseinsensitive => 0,
     all => 0);
   eval {
-    perform_installation($urpm, \%requested, { only_trusted => $only_trusted });
+    perform_installation($urpm, \%requested, only_trusted => $only_trusted);
   };
   _finished();
 }
@@ -716,7 +716,7 @@ sub update_system {
 
   my $only_trusted = @{$args}[0];
   eval {
-    perform_installation($urpm, {}, { auto_select => 1, only_trusted => $only_trusted});
+    perform_installation($urpm, {}, auto_select => 1, only_trusted => $only_trusted);
   };
   _finished();
 }
commit df8ccae7032823ce516675b23dc0ce21c60ea94e
Author: chenh <chenh at fedoraproject.org>
Date:   Mon Jun 21 12:07:55 2010 +0000

    l10n: Updates to Chinese (China) (zh_CN) translation
    
    Transmitted-via: Transifex (translate.fedoraproject.org)

diff --git a/po/zh_CN.po b/po/zh_CN.po
index 938c4ac..310598f 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -5,19 +5,21 @@
 # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 # This file is distributed under the same license as the PACKAGE package.
 # Huan Chen <chenhuan.gt at gmail.com>, 2010.
+# Huan Chen <chenhuan dot gt at gmail dot com>, 2010.
 msgid ""
 msgstr ""
 "Project-Id-Version: pavucontrol.master-tx\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2010-06-14 19:32+0000\n"
-"PO-Revision-Date: 2010-06-15 14:02+0800\n"
-"Last-Translator: Huan Chen <chenhuan.gt at gmail.com>\n"
-"Language-Team: trans-zh_cn at lists.fedoraproject.com\n"
+"PO-Revision-Date: 2010-06-21 20:02+0800\n"
+"Last-Translator: Huan Chen <chenhuan dot gt at gmail dot com>\n"
+"Language-Team: trans hyphen zh underline cn at lists dot fedoraproject dot "
+"com\n"
 "Language: zh\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Virtaal 0.5.2\n"
+"X-Generator: Virtaal 0.6.1\n"
 
 #. TRANSLATORS: this is an atomic transaction
 #. TRANSLATORS: the role is the point of the transaction, e.g. update-system
@@ -67,7 +69,7 @@ msgstr "命令行"
 #. TRANSLATORS: this is the user ID of the user that started the action
 #: ../client/pk-console.c:193
 msgid "User ID"
-msgstr "用户编号"
+msgstr "用户标识符"
 
 #. TRANSLATORS: this is the username, e.g. hughsie
 #: ../client/pk-console.c:200
@@ -77,7 +79,7 @@ msgstr "用户名"
 #. TRANSLATORS: this is the users real name, e.g. "Richard Hughes"
 #: ../client/pk-console.c:204
 msgid "Real name"
-msgstr "真实姓名"
+msgstr "真名"
 
 #: ../client/pk-console.c:212
 msgid "Affected packages:"
@@ -85,12 +87,12 @@ msgstr "受影响包:"
 
 #: ../client/pk-console.c:214
 msgid "Affected packages: None"
-msgstr "受影响包:无"
+msgstr "受影响的包:无"
 
 #. TRANSLATORS: this is the distro, e.g. Fedora 10
 #: ../client/pk-console.c:249
 msgid "Distribution"
-msgstr "发行版"
+msgstr "分发包"
 
 #. TRANSLATORS: this is type of update, stable or testing
 #: ../client/pk-console.c:251
@@ -111,12 +113,12 @@ msgstr "类别"
 #. TRANSLATORS: this is group identifier
 #: ../client/pk-console.c:283
 msgid "ID"
-msgstr "编号"
+msgstr "标识符"
 
 #. TRANSLATORS: this is the parent group
 #: ../client/pk-console.c:286
 msgid "Parent"
-msgstr "上级组"
+msgstr "上级"
 
 #. TRANSLATORS: this is the name of the parent group
 #: ../client/pk-console.c:289
@@ -131,7 +133,7 @@ msgstr "图标"
 #. TRANSLATORS: this is a header for the package that can be updated
 #: ../client/pk-console.c:341
 msgid "Details about the update:"
-msgstr "更新细节:"
+msgstr "关于更新的细节:"
 
 #. TRANSLATORS: details about the update, package name and version
 #. TRANSLATORS: the package that is being processed
@@ -162,12 +164,12 @@ msgstr "废弃"
 #. TRANSLATORS: the vendor (e.g. vmware) that is providing the EULA
 #: ../client/pk-console.c:358 ../lib/packagekit-glib2/pk-task-text.c:211
 msgid "Vendor"
-msgstr "供应商"
+msgstr "厂商"
 
 #. TRANSLATORS: details about the update, the bugzilla URLs
 #: ../client/pk-console.c:362
 msgid "Bugzilla"
-msgstr "缺陷终结者(Bugzilla)地址"
+msgstr "缺陷终结器(Bugzilla)"
 
 #. TRANSLATORS: details about the update, the CVE URLs
 #: ../client/pk-console.c:366
@@ -177,17 +179,17 @@ msgstr "公共漏洞和暴露(CVE)地址"
 #. TRANSLATORS: details about the update, if the package requires a restart
 #: ../client/pk-console.c:370
 msgid "Restart"
-msgstr "重启"
+msgstr "重新启动"
 
 #. TRANSLATORS: details about the update, any description of the update
 #: ../client/pk-console.c:374
 msgid "Update text"
-msgstr "升级描述"
+msgstr "升级文本"
 
 #. TRANSLATORS: details about the update, the changelog for the package
 #: ../client/pk-console.c:378
 msgid "Changes"
-msgstr "更改日志"
+msgstr "更改"
 
 #. TRANSLATORS: details about the update, the ongoing state of the update
 #: ../client/pk-console.c:382
@@ -197,7 +199,7 @@ msgstr "状态"
 #. TRANSLATORS: details about the update, date the update was issued
 #: ../client/pk-console.c:386
 msgid "Issued"
-msgstr "签发"
+msgstr "出现"
 
 #. TRANSLATORS: details about the update, date the update was updated
 #. TRANSLATORS: The action of the package, in past tense
@@ -218,27 +220,27 @@ msgstr "已禁用"
 #. TRANSLATORS: a package requires the system to be restarted
 #: ../client/pk-console.c:461
 msgid "System restart required by:"
-msgstr "需要系统重启的包:"
+msgstr "要求系统重新启动:"
 
 #. TRANSLATORS: a package requires the session to be restarted
 #: ../client/pk-console.c:464
 msgid "Session restart required:"
-msgstr "需要重启会话的包:"
+msgstr "要求重新启动会话:"
 
 #. TRANSLATORS: a package requires the system to be restarted due to a security update
 #: ../client/pk-console.c:467
 msgid "System restart (security) required by:"
-msgstr "需要系统重启的安全更新包:"
+msgstr "要求系统重新启动(安全):"
 
 #. TRANSLATORS: a package requires the session to be restarted due to a security update
 #: ../client/pk-console.c:470
 msgid "Session restart (security) required:"
-msgstr "需要会话重启的安全更新包:"
+msgstr "要求会话重新启动(安全):"
 
 #. TRANSLATORS: a package requires the application to be restarted
 #: ../client/pk-console.c:473
 msgid "Application restart required by:"
-msgstr "需要应用程序重启的包:"
+msgstr "要求应用程序重新启动:"
 
 #. TRANSLATORS: This a list of details about the package
 #: ../client/pk-console.c:508
@@ -258,7 +260,7 @@ msgstr "无文件"
 #. TRANSLATORS: This a list files contained in the package
 #: ../client/pk-console.c:565
 msgid "Package files"
-msgstr "包文件清单"
+msgstr "包的文件"
 
 #. TRANSLATORS: the percentage complete of the transaction
 #: ../client/pk-console.c:633
@@ -285,21 +287,21 @@ msgstr "严重错误"
 #: ../contrib/command-not-found/pk-command-not-found.c:454
 #: ../contrib/command-not-found/pk-command-not-found.c:634
 msgid "The transaction failed"
-msgstr "该事务失败"
+msgstr "此事务失败"
 
 #. TRANSLATORS: print a message when there are no updates
 #: ../client/pk-console.c:727
 msgid "There are no updates available at this time."
-msgstr "当前没有可装的更新。"
+msgstr "当前没有可用的更新。"
 
 #: ../client/pk-console.c:750
 msgid "There are no upgrades available at this time."
-msgstr "当前没有可装的更新。"
+msgstr "当前没有可用的升级。"
 
 #. TRANSLATORS: a package needs to restart their system
 #: ../client/pk-console.c:817
 msgid "Please restart the computer to complete the update."
-msgstr "请重启电脑以完成更新。"
+msgstr "请重新启动电脑以完成更新。"
 
 #. TRANSLATORS: a package needs to restart the session
 #: ../client/pk-console.c:820
@@ -311,7 +313,7 @@ msgstr "请注销并登录以完成更新。"
 msgid ""
 "Please restart the computer to complete the update as important security "
 "updates have been installed."
-msgstr "因为系统已安装了重要的安全更新,请重启系统以完成更新。"
+msgstr "因为系统已安装了重要的安全更新,请重新启动系统以完成更新。"
 
 #. TRANSLATORS: a package needs to restart the session (due to security)
 #: ../client/pk-console.c:826
@@ -326,25 +328,25 @@ msgstr "因为系统已安装了重要的安全更新,请注销并登录以完
 msgid ""
 "Expected package name, actually got file. Try using 'pkcon install-local %s' "
 "instead."
-msgstr ""
+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
 #, c-format
 msgid "This tool could not find any available package: %s"
-msgstr "本工具没能找到任何可装包:%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
 #, c-format
 msgid "This tool could not find the installed package: %s"
-msgstr "本工具没能找到已装包:%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
 #, c-format
 msgid "This tool could not find the package: %s"
-msgstr "本工具没能找到该包:%s"
+msgstr "本工具未能找到此包:%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
@@ -365,7 +367,7 @@ msgstr "守护进程在事务中途(mid-transaction)崩溃"
 #. TRANSLATORS: This is the header to the --help menu
 #: ../client/pk-console.c:1147
 msgid "PackageKit Console Interface"
-msgstr "包工具箱(PackageKit)控制接口"
+msgstr "包工具箱(PackageKit)控制台接口"
 
 #. these are commands we can use with pkcon
 #: ../client/pk-console.c:1149
@@ -375,145 +377,146 @@ msgstr "子命令:"
 #. TRANSLATORS: we keep a database updated with the time that an action was last executed
 #: ../client/pk-console.c:1228
 msgid "Failed to get the time since this action was last completed"
-msgstr ""
+msgstr "自从此动作最后一次完成开始获取时间失败"
 
 #. TRANSLATORS: command line argument, just show the version string
 #: ../client/pk-console.c:1268 ../client/pk-monitor.c:356
 msgid "Show the program version and exit"
-msgstr ""
+msgstr "显示程序版本并退出"
 
 #. TRANSLATORS: command line argument, use a filter to narrow down results
 #: ../client/pk-console.c:1271
 msgid "Set the filter, e.g. installed"
-msgstr "设置过滤器,如:已装"
+msgstr "设置过滤器,如:已安装"
 
 #. TRANSLATORS: command line argument, use a non-standard install prefix
 #: ../client/pk-console.c:1274
 msgid "Set the install root, e.g. '/' or '/mnt/ltsp'"
-msgstr ""
+msgstr "设置安装根,如:“/”或“/mnt/ltsp”"
 
 #. TRANSLATORS: command line argument, work asynchronously
 #: ../client/pk-console.c:1277
 msgid "Exit without waiting for actions to complete"
-msgstr ""
+msgstr "不等待动作完成即退出"
 
 #. command line argument, do we ask questions
 #: ../client/pk-console.c:1280
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:527
 msgid "Install the packages without asking for confirmation"
-msgstr ""
+msgstr "无需确认即安装包"
 
 #. TRANSLATORS: command line argument, this command is not a priority
 #: ../client/pk-console.c:1283
 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 ""
+msgstr "在屏幕上显示机器可读的输出,而不用生动的小工具"
 
 #. TRANSLATORS: we failed to contact the daemon
 #: ../client/pk-console.c:1308
 msgid "Failed to contact PackageKit"
-msgstr ""
+msgstr "包工具箱(PackageKit)联系失败"
 
 #. TRANSLATORS: The user specified an incorrect filter
 #: ../client/pk-console.c:1369
 msgid "The proxy could not be set"
-msgstr ""
+msgstr "代理设置失败"
 
 #. TRANSLATORS: The user specified an incorrect filter
 #: ../client/pk-console.c:1381
 msgid "The install root could not be set"
-msgstr ""
+msgstr "安装根设置失败"
 
 #. TRANSLATORS: The user specified an incorrect filter
 #: ../client/pk-console.c:1393
 msgid "The filter specified was invalid"
-msgstr ""
+msgstr "指定过滤器无效"
 
 #. TRANSLATORS: a search type can be name, details, file, etc
 #: ../client/pk-console.c:1412
 msgid "A search type is required, e.g. name"
-msgstr ""
+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
 msgid "A search term is required"
-msgstr ""
+msgstr "需要搜索名词"
 
 #. TRANSLATORS: the search type was provided, but invalid
 #: ../client/pk-console.c:1465
 msgid "Invalid search type"
-msgstr ""
+msgstr "无效搜索类型"
 
 #. TRANSLATORS: the user did not specify what they wanted to install
 #: ../client/pk-console.c:1471
 msgid "A package name to install is required"
-msgstr ""
+msgstr "需要待安装的包名"
 
 #. TRANSLATORS: the user did not specify what they wanted to install
 #: ../client/pk-console.c:1480
 msgid "A filename to install is required"
-msgstr ""
+msgstr "需要待安装的文件名"
 
 #. TRANSLATORS: geeky error, 99.9999% of users won't see this
 #: ../client/pk-console.c:1492
+#, fuzzy
 msgid "A type, key_id and package_id are required"
-msgstr ""
+msgstr "需要类型、密钥标识符和包标识符"
 
 #. TRANSLATORS: the user did not specify what they wanted to remove
 #: ../client/pk-console.c:1503
 msgid "A package name to remove is required"
-msgstr ""
+msgstr "需要待删除的包名"
 
 #. TRANSLATORS: the user did not specify anything about what to download or where
 #: ../client/pk-console.c:1512
 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
 msgid "Directory not found"
-msgstr "目录没找到"
+msgstr "目录未找到"
 
 #. TRANSLATORS: geeky error, 99.9999% of users won't see this
 #: ../client/pk-console.c:1528
 msgid "A licence identifier (eula-id) is required"
-msgstr ""
+msgstr "需要许可标识符(最终用户许可协议标识符)"
 
 #. TRANSLATORS: geeky error, 99.9999% of users won't see this
 #: ../client/pk-console.c:1539
 msgid "A transaction identifier (tid) is required"
-msgstr ""
+msgstr "需要事务标识符"
 
 #. TRANSLATORS: The user did not specify a package name
 #: ../client/pk-console.c:1560
 msgid "A package name to resolve is required"
-msgstr ""
+msgstr "需要待解析的包名"
 
 #. TRANSLATORS: The user did not specify a repository (software source) name
 #: ../client/pk-console.c:1571 ../client/pk-console.c:1582
 msgid "A repository name is required"
-msgstr ""
+msgstr "需要软件库名"
 
 #. TRANSLATORS: The user didn't provide any data
 #: ../client/pk-console.c:1593
 msgid "A repo name, parameter and value are required"
-msgstr ""
+msgstr "需要软件库名、参数和值"
 
 #. TRANSLATORS: The user didn't specify what action to use
 #: ../client/pk-console.c:1610
 msgid "An action, e.g. 'update-system' is required"
-msgstr ""
+msgstr "需要动作,如:“更新系统”"
 
 #. TRANSLATORS: The user specified an invalid action
 #: ../client/pk-console.c:1617
 msgid "A correct role is required"
-msgstr ""
+msgstr "需要正确的角色"
 
 #. TRANSLATORS: The user did not provide a package name
 #. TRANSLATORS: This is when the user fails to supply the package name
@@ -521,18 +524,18 @@ msgstr ""
 #: ../client/pk-console.c:1651 ../client/pk-console.c:1671
 #: ../client/pk-console.c:1680 ../client/pk-generate-pack.c:316
 msgid "A package name is required"
-msgstr ""
+msgstr "需要包名"
 
 #. TRANSLATORS: each package "provides" certain things, e.g. mime(gstreamer-decoder-mp3), the user didn't specify it
 #: ../client/pk-console.c:1660
 msgid "A package provide string is required"
-msgstr ""
+msgstr "需要包提供字符串"
 
 #. TRANSLATORS: The user tried to use an unsupported option on the command line
 #: ../client/pk-console.c:1741
 #, c-format
 msgid "Option '%s' is not supported"
-msgstr ""
+msgstr "选项“%s”不被支持"
 
 #. TRANSLATORS: Generic failure of what they asked to do
 #: ../client/pk-console.c:1751
@@ -542,109 +545,109 @@ msgstr "命令失败"
 #. TRANSLATORS: we can exclude certain packages (glibc) when we know they'll exist on the target
 #: ../client/pk-generate-pack.c:255
 msgid "Set the file name of dependencies to be excluded"
-msgstr ""
+msgstr "设置待排除依赖的文件名"
 
 #. TRANSLATORS: the output location
 #: ../client/pk-generate-pack.c:258
 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
 msgid "The package to be put into the service pack"
-msgstr ""
+msgstr "待放入服务包的包"
 
 #. TRANSLATORS: put all pending updates in the pack
 #: ../client/pk-generate-pack.c:264
 msgid "Put all updates available in the service pack"
-msgstr ""
+msgstr "放入所有可用更新到服务包中"
 
 #. TRANSLATORS: This is when the user fails to supply the correct arguments
 #: ../client/pk-generate-pack.c:300
 msgid "Neither --package or --updates option selected."
-msgstr ""
+msgstr "--package 和  --updates 选项都不选。"
 
 #. TRANSLATORS: This is when the user fails to supply just one argument
 #: ../client/pk-generate-pack.c:308
 msgid "Both options selected."
-msgstr ""
+msgstr "两个选项都选。"
 
 #. TRANSLATORS: This is when the user fails to supply the output
 #: ../client/pk-generate-pack.c:324
 msgid "A output directory or file name is required"
-msgstr ""
+msgstr "需要输出目录或文件名。"
 
 #. TRANSLATORS: This is when the daemon is not-installed/broken and fails to startup
 #: ../client/pk-generate-pack.c:342
-#, fuzzy
 msgid "The daemon failed to startup"
-msgstr "守护程序在启动时崩溃"
+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
 msgid "The package manager cannot perform this type of operation."
-msgstr ""
+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 ""
+msgstr "因为包工具箱(PackageKit)未编译成支持libarchive,服务包不能被创建。"
 
 #. TRANSLATORS: the user specified an absolute path, but didn't get the extension correct
 #: ../client/pk-generate-pack.c:377
+#, fuzzy
 msgid "If specifying a file, the service pack name must end with"
-msgstr ""
+msgstr "若指定文件,服务包名必须以其终止"
 
 #. TRANSLATORS: This is when file already exists
 #: ../client/pk-generate-pack.c:393
 msgid "A pack with the same name already exists, do you want to overwrite it?"
-msgstr ""
+msgstr "同名服务包已存在,您要覆盖它?"
 
 #. TRANSLATORS: This is when the pack was not overwritten
 #: ../client/pk-generate-pack.c:396
 msgid "The pack was not overwritten."
-msgstr ""
+msgstr "服务包未被覆盖。"
 
 #. TRANSLATORS: This is when the temporary directory cannot be created, the directory name follows
 #: ../client/pk-generate-pack.c:409
 msgid "Failed to create directory:"
-msgstr "该目录创建失败:"
+msgstr "创建目录失败:"
 
 #. TRANSLATORS: This is when the list of packages from the remote computer cannot be opened
 #: ../client/pk-generate-pack.c:421
 msgid "Failed to open package list."
-msgstr ""
+msgstr "打开包清单失败。"
 
 #. TRANSLATORS: The package name is being matched up to available packages
 #: ../client/pk-generate-pack.c:430
 msgid "Finding package name."
-msgstr ""
+msgstr "查找包名。"
 
 #. TRANSLATORS: This is when the package cannot be found in any software source. The detailed error follows
 #: ../client/pk-generate-pack.c:434
 #, c-format
 msgid "Failed to find package '%s': %s"
-msgstr ""
+msgstr "查找“%s”包失败:%s"
 
 #. TRANSLATORS: This is telling the user we are in the process of making the pack
 #: ../client/pk-generate-pack.c:442
 msgid "Creating service pack..."
-msgstr ""
+msgstr "正在创建服务包……"
 
 #. TRANSLATORS: we succeeded in making the file
 #: ../client/pk-generate-pack.c:457
 #, c-format
 msgid "Service pack created '%s'"
-msgstr ""
+msgstr "服务包创建完成“%s”"
 
 #. TRANSLATORS: we failed to make te file
 #: ../client/pk-generate-pack.c:462
 #, c-format
 msgid "Failed to create '%s': %s"
-msgstr "“%s”文件创建失败:%s"
+msgstr "创建“”%s”文件失败:%s"
 
 #: ../client/pk-monitor.c:286
 msgid "Failed to get daemon state"
@@ -653,29 +656,29 @@ msgstr "守护进程状态获取失败"
 #. TRANSLATORS: this is a program that monitors PackageKit
 #: ../client/pk-monitor.c:372
 msgid "PackageKit Monitor"
-msgstr ""
+msgstr "包工具箱(PackageKit)监视器"
 
 #. TRANSLATORS: when we are getting data from the daemon
 #: ../contrib/browser-plugin/pk-plugin-install.c:497
 msgid "Getting package information..."
-msgstr ""
+msgstr "正在获取包信息……"
 
 #. TRANSLATORS: run an applicaiton
 #: ../contrib/browser-plugin/pk-plugin-install.c:503
 #, c-format
 msgid "Run %s"
-msgstr ""
+msgstr "运行 %s"
 
 #. TRANSLATORS: show the installed version of a package
 #: ../contrib/browser-plugin/pk-plugin-install.c:509
 msgid "Installed version"
-msgstr ""
+msgstr "已安装版本"
 
 #. TRANSLATORS: run the application now
 #: ../contrib/browser-plugin/pk-plugin-install.c:517
 #, c-format
 msgid "Run version %s now"
-msgstr ""
+msgstr "现在运行 %s 版"
 
 #. TRANSLATORS: run the application now
 #: ../contrib/browser-plugin/pk-plugin-install.c:523
@@ -702,32 +705,32 @@ msgstr "版本"
 #. TRANSLATORS: noting found, so can't install
 #: ../contrib/browser-plugin/pk-plugin-install.c:543
 msgid "No packages found for your system"
-msgstr ""
+msgstr "未找到适用于您系统的包"
 
 #. TRANSLATORS: package is being installed
 #: ../contrib/browser-plugin/pk-plugin-install.c:548
 msgid "Installing..."
-msgstr "安装中……"
+msgstr "正在安装……"
 
 #. TRANSLATORS: downloading repo data so we can search
 #: ../contrib/command-not-found/pk-command-not-found.c:367
 msgid "Downloading details about the software sources."
-msgstr ""
+msgstr "正在下载关于软件源的细节。"
 
 #. TRANSLATORS: downloading file lists so we can search
 #: ../contrib/command-not-found/pk-command-not-found.c:371
 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
 msgid "Waiting for package manager lock."
-msgstr ""
+msgstr "正在等待包管理器锁。"
 
 #. TRANSLATORS: loading package cache so we can search
 #: ../contrib/command-not-found/pk-command-not-found.c:379
 msgid "Loading list of packages."
-msgstr ""
+msgstr "载入包清单"
 
 #. TRANSLATORS: we failed to find the package, this shouldn't happen
 #: ../contrib/command-not-found/pk-command-not-found.c:445
@@ -742,110 +745,110 @@ msgstr "启动失败:"
 #. TRANSLATORS: we failed to install the package
 #: ../contrib/command-not-found/pk-command-not-found.c:625
 msgid "Failed to install packages"
-msgstr ""
+msgstr "安装包失败"
 
 #. TRANSLATORS: tool that gets called when the command is not found
 #: ../contrib/command-not-found/pk-command-not-found.c:701
 msgid "PackageKit Command Not Found"
-msgstr ""
+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 "命令没找到。"
+msgstr "命令未找到。"
 
 #. TRANSLATORS: tell the user what we think the command is
 #: ../contrib/command-not-found/pk-command-not-found.c:745
 msgid "Similar command is:"
-msgstr ""
+msgstr "相似命令是:"
 
 #. TRANSLATORS: Ask the user if we should run the similar command
 #: ../contrib/command-not-found/pk-command-not-found.c:755
 msgid "Run similar command:"
-msgstr ""
+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
 msgid "Similar commands are:"
-msgstr ""
+msgstr "相似命令是:"
 
 #. TRANSLATORS: ask the user to choose a file to run
 #: ../contrib/command-not-found/pk-command-not-found.c:785
 msgid "Please choose a command to run"
-msgstr ""
+msgstr "请选择欲运行的命令"
 
 #. TRANSLATORS: tell the user what package provides the command
 #: ../contrib/command-not-found/pk-command-not-found.c:803
 msgid "The package providing this file is:"
-msgstr ""
+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
 #, c-format
 msgid "Install package '%s' to provide command '%s'?"
-msgstr ""
+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
 msgid "Packages providing this file are:"
-msgstr ""
+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
 msgid "Suitable packages are:"
-msgstr ""
+msgstr "合适的包是:"
 
 #. get selection
 #. TRANSLATORS: ask the user to choose a file to install
 #: ../contrib/command-not-found/pk-command-not-found.c:851
 msgid "Please choose a package to install"
-msgstr ""
+msgstr "请选择欲安装的包"
 
 #. TRANSLATORS: we are starting to install the packages
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:197
 msgid "Starting install"
-msgstr ""
+msgstr "正在启动安装"
 
 #. TRANSLATORS: we couldn't find the package name, non-fatal
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:409
 #, c-format
 msgid "Failed to find the package %s, or already installed: %s"
-msgstr ""
+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"
-msgstr ""
+msgstr "实际不安装任何包,只是模拟将被安装的内容"
 
 #. command line argument, do we skip packages that depend on the ones specified
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:521
 msgid "Do not install dependencies of the core packages"
-msgstr ""
+msgstr "不安装核心包的依赖包"
 
 #. command line argument, do we operate quietly
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:524
 msgid "Do not display information or progress"
-msgstr ""
+msgstr "不显示信息或进度"
 
 #. TRANSLATORS: tool that gets called when the command is not found
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:542
 msgid "PackageKit Debuginfo Installer"
-msgstr ""
+msgstr "包工具箱调试信息安装器"
 
 #. TRANSLATORS: the use needs to specify a list of package names on the command line
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:556
 #, c-format
 msgid "ERROR: Specify package names to install."
-msgstr ""
+msgstr "错误:指定欲安装的包名。"
 
 #. TRANSLATORS: we are getting the list of repositories
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:592
 #, c-format
 msgid "Getting sources list"
-msgstr "获取软件源清单"
+msgstr "正在获取源清单"
 
 #. TRANSLATORS: operation was not successful
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:602
@@ -873,97 +876,97 @@ msgstr "完成。"
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:620
 #, c-format
 msgid "Found %i enabled and %i disabled sources."
-msgstr ""
+msgstr "找到 %i 个启用的和 %i 个禁用的源。"
 
 #. TRANSLATORS: we're finding repositories that match out pattern
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:627
 #, c-format
 msgid "Finding debugging sources"
-msgstr ""
+msgstr "正在查找调试源"
 
 #. TRANSLATORS: tell the user what we found
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:660
 #, c-format
 msgid "Found %i disabled debuginfo repos."
-msgstr ""
+msgstr "找到 %i 个禁用的调试信息软件仓库。"
 
 #. TRANSLATORS: we're now enabling all the debug sources we found
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:667
 #, c-format
 msgid "Enabling debugging sources"
-msgstr ""
+msgstr "正在启用调试源"
 
 #. TRANSLATORS: tell the user how many we enabled
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:695
 #, c-format
 msgid "Enabled %i debugging sources."
-msgstr ""
+msgstr "启用的 %i 个调试源。"
 
 #. TRANSLATORS: we're now finding packages that match in all the repos
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:702
 #, c-format
 msgid "Finding debugging packages"
-msgstr ""
+msgstr "正在查找调试包"
 
 #. TRANSLATORS: we couldn't find the package name, non-fatal
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:714
 #, c-format
 msgid "Failed to find the package %s: %s"
-msgstr ""
+msgstr "查找 %s 包失败:%s"
 
 #. TRANSLATORS: we couldn't find the debuginfo package name, non-fatal
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:737
 #, c-format
 msgid "Failed to find the debuginfo package %s: %s"
-msgstr ""
+msgstr "查找调试信息包 %s 失败:%s"
 
 #. TRANSLATORS: no debuginfo packages could be found to be installed
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:765
 #, c-format
 msgid "Found no packages to install."
-msgstr ""
+msgstr "未找到欲安装的包。"
 
 #. TRANSLATORS: tell the user we found some packages, and then list them
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:779
 #, c-format
 msgid "Found %i packages:"
-msgstr ""
+msgstr "找到%i 个包:"
 
 #. TRANSLATORS: tell the user we are searching for deps
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:795
 #, c-format
 msgid "Finding packages that depend on these packages"
-msgstr ""
+msgstr "正在查找依赖于这些包的包"
 
 #. TRANSLATORS: could not install, detailed error follows
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:808
 #, c-format
 msgid "Could not find dependant packages: %s"
-msgstr ""
+msgstr "未能找到被依赖包:%s"
 
 #. TRANSLATORS: tell the user we found some more packages
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:824
 #, c-format
 msgid "Found %i extra packages."
-msgstr ""
+msgstr "找到 %i 个额外的包。"
 
 #. TRANSLATORS: tell the user we found some more packages
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:828
 #, c-format
 msgid "No extra packages required."
-msgstr ""
+msgstr "不要求有额外的包。"
 
 #. TRANSLATORS: tell the user we found some packages (and deps), and then list them
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:837
 #, c-format
 msgid "Found %i packages to install:"
-msgstr ""
+msgstr "找到 %i 个包以供安装:"
 
 #. TRANSLATORS: simulate mode is a testing mode where we quit before the action
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:850
 #, c-format
 msgid "Not installing packages in simulate mode"
-msgstr ""
+msgstr "在模拟模式中不会安装包"
 
 #. TRANSLATORS: we are now installing the debuginfo packages we found earlier
 #. TRANSLATORS: transaction state, installing packages
@@ -971,31 +974,31 @@ msgstr ""
 #: ../lib/packagekit-glib2/pk-console-shared.c:289
 #, c-format
 msgid "Installing packages"
-msgstr ""
+msgstr "正在安装包"
 
 #. TRANSLATORS: could not install, detailed error follows
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:875
 #, c-format
 msgid "Could not install packages: %s"
-msgstr ""
+msgstr "未能安装包:%s"
 
 #. TRANSLATORS: we are now disabling all debuginfo repos we previously enabled
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:907
 #, c-format
 msgid "Disabling sources previously enabled"
-msgstr ""
+msgstr "禁用之前启用的源"
 
 #. TRANSLATORS: no debuginfo packages could be found to be installed, detailed error follows
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:919
 #, c-format
 msgid "Could not disable the debugging sources: %s"
-msgstr ""
+msgstr "未能禁用调试源:%s"
 
 #. TRANSLATORS: we disabled all the debugging repos that we enabled before
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:934
 #, c-format
 msgid "Disabled %i debugging sources."
-msgstr ""
+msgstr "禁用了 %i 个调试源。"
 
 #. TRANSLATORS: couldn't open device to write
 #: ../contrib/device-rebind/pk-device-rebind.c:62
@@ -1016,36 +1019,36 @@ msgstr "设备写入失败"
 #. TRANSLATORS: the device could not be found in sysfs
 #: ../contrib/device-rebind/pk-device-rebind.c:176
 msgid "Device could not be found"
-msgstr ""
+msgstr "设备未被找到"
 
 #. TRANSLATORS: we failed to release the current driver
 #: ../contrib/device-rebind/pk-device-rebind.c:203
 msgid "Failed to unregister driver"
-msgstr ""
+msgstr "注销驱动失败"
 
 #. TRANSLATORS: we failed to bind the old driver
 #: ../contrib/device-rebind/pk-device-rebind.c:212
 msgid "Failed to register driver"
-msgstr "驱动程序注册失败"
+msgstr "注册驱动失败"
 
 #. 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 ""
+msgstr "设备路径未找到"
 
 #. TRANSLATORS: user did not specify a valid device sysfs path
 #: ../contrib/device-rebind/pk-device-rebind.c:269
 msgid "Incorrect device path specified"
-msgstr ""
+msgstr "指定了不正确的设备路径"
 
 #: ../contrib/device-rebind/pk-device-rebind.c:294
 msgid "Show extra debugging information"
-msgstr ""
+msgstr "显示额外调试信息"
 
 #. 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 ""
+msgstr "实际上不触及硬件,只是模拟将要完成的操作"
 
 #. TRANSLATORS: command line option: a list of files to install
 #: ../contrib/device-rebind/pk-device-rebind.c:300
@@ -1055,64 +1058,64 @@ msgstr "设备路径"
 #. 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 ""
+msgstr "包工具箱(PackageKit)设备重新载入器"
 
 #. 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 ""
+msgstr "您必须指定至少一个有效设备路径"
 
 #. 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 ""
+msgstr "此脚本只能由 root 用户使用"
 
 #. TRANSLATORS: we're going to verify the path first
 #: ../contrib/device-rebind/pk-device-rebind.c:342
 msgid "Verifying device path"
-msgstr ""
+msgstr "正在验证设备路径"
 
 #. 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 ""
+msgstr "验证路径失败"
 
 #. TRANSLATORS: we're going to try
 #: ../contrib/device-rebind/pk-device-rebind.c:361
 msgid "Attempting to rebind device"
-msgstr ""
+msgstr "尝试重新绑定设备"
 
 #. TRANSLATORS: we failed to release the current driver
 #: ../contrib/device-rebind/pk-device-rebind.c:366
 msgid "Failed to rebind device"
-msgstr ""
+msgstr "重新绑定设备失败"
 
 #: ../data/packagekit-catalog.xml.in.h:1
 msgid "PackageKit Catalog"
-msgstr ""
+msgstr "包工具箱(PackageKit)类别"
 
 #: ../data/packagekit-package-list.xml.in.h:1
 msgid "PackageKit Package List"
-msgstr ""
+msgstr "包工具箱(PackageKit)包清单"
 
 #: ../data/packagekit-servicepack.xml.in.h:1
 msgid "PackageKit Service Pack"
-msgstr ""
+msgstr "包工具箱(PackageKit)服务包"
 
 #: ../lib/packagekit-glib2/pk-console-shared.c:65
 #, c-format
 msgid "Please enter a number from 1 to %i: "
-msgstr ""
+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
 msgid "More than one package matches:"
-msgstr ""
+msgstr "超过一个包匹配:"
 
 #. TRANSLATORS: This finds out which package in the list to use
 #: ../lib/packagekit-glib2/pk-console-shared.c:202
 msgid "Please choose the correct package: "
-msgstr ""
+msgstr "请选择正确的包:"
 
 #. TRANSLATORS: This is when the transaction status is not known
 #: ../lib/packagekit-glib2/pk-console-shared.c:257
@@ -1122,176 +1125,176 @@ msgstr "未知状态"
 #. TRANSLATORS: transaction state, the daemon is in the process of starting
 #: ../lib/packagekit-glib2/pk-console-shared.c:261
 msgid "Starting"
-msgstr "启动中"
+msgstr "正在启动"
 
 #. TRANSLATORS: transaction state, the transaction is waiting for another to complete
 #: ../lib/packagekit-glib2/pk-console-shared.c:265
 msgid "Waiting in queue"
-msgstr "在队列中等待中"
+msgstr "正在队列中等待"
 
 #. TRANSLATORS: transaction state, just started
 #: ../lib/packagekit-glib2/pk-console-shared.c:269
 msgid "Running"
-msgstr "运行中"
+msgstr "正在运行"
 
 #. TRANSLATORS: transaction state, is querying data
 #: ../lib/packagekit-glib2/pk-console-shared.c:273
 msgid "Querying"
-msgstr "查询中"
+msgstr "正在查询"
 
 #. TRANSLATORS: transaction state, getting data from a server
 #: ../lib/packagekit-glib2/pk-console-shared.c:277
 msgid "Getting information"
-msgstr ""
+msgstr "正在获取信息"
 
 #. TRANSLATORS: transaction state, removing packages
 #: ../lib/packagekit-glib2/pk-console-shared.c:281
 msgid "Removing packages"
-msgstr ""
+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
 msgid "Downloading packages"
-msgstr ""
+msgstr "正在下载包"
 
 #. TRANSLATORS: transaction state, refreshing internal lists
 #: ../lib/packagekit-glib2/pk-console-shared.c:293
 msgid "Refreshing software list"
-msgstr ""
+msgstr "正在刷新软件清单"
 
 #. TRANSLATORS: transaction state, installing updates
 #: ../lib/packagekit-glib2/pk-console-shared.c:297
 msgid "Installing updates"
-msgstr "更新安装中"
+msgstr "正在安装更新"
 
 #. TRANSLATORS: transaction state, removing old packages, and cleaning config files
 #: ../lib/packagekit-glib2/pk-console-shared.c:301
 msgid "Cleaning up packages"
-msgstr ""
+msgstr "正在清理包"
 
 #. TRANSLATORS: transaction state, obsoleting old packages
 #: ../lib/packagekit-glib2/pk-console-shared.c:305
 msgid "Obsoleting packages"
-msgstr ""
+msgstr "正在废弃包"
 
 #. TRANSLATORS: transaction state, checking the transaction before we do it
 #: ../lib/packagekit-glib2/pk-console-shared.c:309
 msgid "Resolving dependencies"
-msgstr ""
+msgstr "正在解析依赖关系"
 
 #. TRANSLATORS: transaction state, checking if we have all the security keys for the operation
 #: ../lib/packagekit-glib2/pk-console-shared.c:313
 msgid "Checking signatures"
-msgstr ""
+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
 msgid "Rolling back"
-msgstr "回滚中"
+msgstr "正在回滚"
 
 #. TRANSLATORS: transaction state, when we're doing a test transaction
 #: ../lib/packagekit-glib2/pk-console-shared.c:321
 msgid "Testing changes"
-msgstr ""
+msgstr "正在测试更改"
 
 #. TRANSLATORS: transaction state, when we're writing to the system package database
 #: ../lib/packagekit-glib2/pk-console-shared.c:325
 msgid "Committing changes"
-msgstr ""
+msgstr "正在提交更改"
 
 #. TRANSLATORS: transaction state, requesting data from a server
 #: ../lib/packagekit-glib2/pk-console-shared.c:329
 msgid "Requesting data"
-msgstr ""
+msgstr "正在请求数据"
 
 #. TRANSLATORS: transaction state, all done!
 #: ../lib/packagekit-glib2/pk-console-shared.c:333
 msgid "Finished"
-msgstr "已结束"
+msgstr "完成了"
 
 #. TRANSLATORS: transaction state, in the process of cancelling
 #: ../lib/packagekit-glib2/pk-console-shared.c:337
 msgid "Cancelling"
-msgstr ""
+msgstr "正在取消"
 
 #. TRANSLATORS: transaction state, downloading metadata
 #: ../lib/packagekit-glib2/pk-console-shared.c:341
 msgid "Downloading repository information"
-msgstr ""
+msgstr "正在下载软件仓库信息"
 
 #. TRANSLATORS: transaction state, downloading metadata
 #: ../lib/packagekit-glib2/pk-console-shared.c:345
 msgid "Downloading list of packages"
-msgstr ""
+msgstr "正在下载包清单"
 
 #. TRANSLATORS: transaction state, downloading metadata
 #: ../lib/packagekit-glib2/pk-console-shared.c:349
 msgid "Downloading file lists"
-msgstr ""
+msgstr "正在下载文件清单"
 
 #. TRANSLATORS: transaction state, downloading metadata
 #: ../lib/packagekit-glib2/pk-console-shared.c:353
 msgid "Downloading lists of changes"
-msgstr ""
+msgstr "正在下载更改清单"
 
 #. TRANSLATORS: transaction state, downloading metadata
 #: ../lib/packagekit-glib2/pk-console-shared.c:357
 msgid "Downloading groups"
-msgstr ""
+msgstr "正在下载组"
 
 #. TRANSLATORS: transaction state, downloading metadata
 #: ../lib/packagekit-glib2/pk-console-shared.c:361
 msgid "Downloading update information"
-msgstr ""
+msgstr "正在下载更新信息"
 
 #. TRANSLATORS: transaction state, repackaging delta files
 #: ../lib/packagekit-glib2/pk-console-shared.c:365
 msgid "Repackaging files"
-msgstr ""
+msgstr "正在重新打包文件"
 
 #. TRANSLATORS: transaction state, loading databases
 #: ../lib/packagekit-glib2/pk-console-shared.c:369
 msgid "Loading cache"
-msgstr ""
+msgstr "正在载入缓存"
 
 #. TRANSLATORS: transaction state, scanning for running processes
 #: ../lib/packagekit-glib2/pk-console-shared.c:373
 msgid "Scanning applications"
-msgstr ""
+msgstr "正在扫描应用程序"
 
 #. TRANSLATORS: transaction state, generating a list of packages installed on the system
 #: ../lib/packagekit-glib2/pk-console-shared.c:377
 msgid "Generating package lists"
-msgstr ""
+msgstr "正在生成包清单"
 
 #. TRANSLATORS: transaction state, when we're waiting for the native tools to exit
 #: ../lib/packagekit-glib2/pk-console-shared.c:381
 msgid "Waiting for package manager lock"
-msgstr ""
+msgstr "正在等待包管理器锁"
 
 #. TRANSLATORS: transaction state, waiting for user to type in a password
 #: ../lib/packagekit-glib2/pk-console-shared.c:385
 msgid "Waiting for authentication"
-msgstr ""
+msgstr "正在等待身份验证"
 
 #. TRANSLATORS: transaction state, we are updating the list of processes
 #: ../lib/packagekit-glib2/pk-console-shared.c:389
 msgid "Updating running applications"
-msgstr ""
+msgstr "正在更新运行中的应用程序"
 
 #. TRANSLATORS: transaction state, we are checking executable files currently in use
 #: ../lib/packagekit-glib2/pk-console-shared.c:393
 msgid "Checking applications in use"
-msgstr ""
+msgstr "正在检查使用中的应用程序"
 
 #. TRANSLATORS: transaction state, we are checking for libraries currently in use
 #: ../lib/packagekit-glib2/pk-console-shared.c:397
 msgid "Checking libraries in use"
-msgstr ""
+msgstr "正在检查使用中的库文件"
 
 #. TRANSLATORS: transaction state, we are copying package files before or after the transaction
 #: ../lib/packagekit-glib2/pk-console-shared.c:401
@@ -1338,12 +1341,12 @@ msgstr "屏蔽"
 #: ../lib/packagekit-glib2/pk-console-shared.c:448
 #: ../lib/packagekit-glib2/pk-console-shared.c:521
 msgid "Installed"
-msgstr "已安装"
+msgstr "已安装了"
 
 #. TRANSLATORS: The state of a package, i.e. not installed
 #: ../lib/packagekit-glib2/pk-console-shared.c:453
 msgid "Available"
-msgstr "可装"
+msgstr "可用了"
 
 #. TRANSLATORS: The action of the package, in present tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:471
@@ -1353,61 +1356,61 @@ msgstr "正在下载"
 #. TRANSLATORS: The action of the package, in present tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:475
 msgid "Updating"
-msgstr "更新中"
+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
 msgid "Installing"
-msgstr "安装中"
+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
 msgid "Removing"
-msgstr "删除中"
+msgstr "正在删除"
 
 #. TRANSLATORS: The action of the package, in present tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:487
 msgid "Cleaning up"
-msgstr ""
+msgstr "正在清理"
 
 #. TRANSLATORS: The action of the package, in present tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:491
 msgid "Obsoleting"
-msgstr "废弃中"
+msgstr "正在废弃"
 
 #. TRANSLATORS: The action of the package, in present tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:495
 msgid "Reinstalling"
-msgstr "重装中"
+msgstr "正在重新安装"
 
 #. TRANSLATORS: The action of the package, in past tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:513
 msgid "Downloaded"
-msgstr "下载"
+msgstr "下载了"
 
 #. TRANSLATORS: The action of the package, in past tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:525
 msgid "Removed"
-msgstr "移除"
+msgstr "移除了"
 
 #. TRANSLATORS: The action of the package, in past tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:529
 msgid "Cleaned up"
-msgstr "清理"
+msgstr "清理了"
 
 #. TRANSLATORS: The action of the package, in past tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:533
 msgid "Obsoleted"
-msgstr "废弃"
+msgstr "废弃了"
 
 #. TRANSLATORS: The action of the package, in past tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:537
 msgid "Reinstalled"
-msgstr ""
+msgstr "重新安装了"
 
 #. TRANSLATORS: The role of the transaction, in present tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:555
@@ -1417,173 +1420,173 @@ msgstr "未知角色类型"
 #. TRANSLATORS: The role of the transaction, in present tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:559
 msgid "Getting dependencies"
-msgstr ""
+msgstr "正在获取依赖关系"
 
 #. TRANSLATORS: The role of the transaction, in present tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:563
 msgid "Getting update details"
-msgstr ""
+msgstr "正在获取更新细节"
 
 #. TRANSLATORS: The role of the transaction, in present tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:567
 msgid "Getting details"
-msgstr ""
+msgstr "正在获取细节"
 
 #. TRANSLATORS: The role of the transaction, in present tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:571
 msgid "Getting requires"
-msgstr ""
+msgstr "正在获取要求"
 
 #. TRANSLATORS: The role of the transaction, in present tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:575
 msgid "Getting updates"
-msgstr ""
+msgstr "正在获取更新"
 
 #. TRANSLATORS: The role of the transaction, in present tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:579
 msgid "Searching by details"
-msgstr ""
+msgstr "正在按细节搜索"
 
 #. TRANSLATORS: The role of the transaction, in present tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:583
 msgid "Searching by file"
-msgstr ""
+msgstr "正在按文件搜索"
 
 #. TRANSLATORS: The role of the transaction, in present tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:587
 msgid "Searching groups"
-msgstr ""
+msgstr "正在搜索组"
 
 #. TRANSLATORS: The role of the transaction, in present tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:591
 msgid "Searching by name"
-msgstr ""
+msgstr "正在按名称搜索"
 
 #. TRANSLATORS: The role of the transaction, in present tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:603
 msgid "Installing files"
-msgstr "文件安装中"
+msgstr "正在安装文件"
 
 #. TRANSLATORS: The role of the transaction, in present tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:607
 msgid "Refreshing cache"
-msgstr ""
+msgstr "正在刷新缓存"
 
 #. TRANSLATORS: The role of the transaction, in present tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:611
 msgid "Updating packages"
-msgstr "包更新中"
+msgstr "正在更新包"
 
 #. TRANSLATORS: The role of the transaction, in present tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:615
 msgid "Updating system"
-msgstr "系统更新中"
+msgstr "正在更新系统"
 
 #. TRANSLATORS: The role of the transaction, in present tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:619
 msgid "Canceling"
-msgstr "取消中"
+msgstr "正在取消"
 
 #. TRANSLATORS: The role of the transaction, in present tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:627
 msgid "Getting repositories"
-msgstr ""
+msgstr "正在获取软件仓库"
 
 #. TRANSLATORS: The role of the transaction, in present tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:631
 msgid "Enabling repository"
-msgstr ""
+msgstr "正在启用软件仓库"
 
 #. TRANSLATORS: The role of the transaction, in present tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:635
 msgid "Setting data"
-msgstr "数据设置中"
+msgstr "正在设置数据"
 
 #. TRANSLATORS: The role of the transaction, in present tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:639
 msgid "Resolving"
-msgstr "解析中"
+msgstr "正在解析"
 
 #. TRANSLATORS: The role of the transaction, in present tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:643
 msgid "Getting file list"
-msgstr "文件清单获取中"
+msgstr "正在获取文件清单"
 
 #. TRANSLATORS: The role of the transaction, in present tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:647
 msgid "Getting provides"
-msgstr "提供信息(provides)获取中"
+msgstr "正在获取提供"
 
 #. TRANSLATORS: The role of the transaction, in present tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:651
 msgid "Installing signature"
-msgstr ""
+msgstr "正在安装签名"
 
 #. TRANSLATORS: The role of the transaction, in present tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:655
 msgid "Getting packages"
-msgstr "包获取中"
+msgstr "正在获取包"
 
 #. TRANSLATORS: The role of the transaction, in present tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:659
 msgid "Accepting EULA"
-msgstr ""
+msgstr "正在接受最终用户许可协议(EULA)"
 
 #. TRANSLATORS: The role of the transaction, in present tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:667
 msgid "Getting upgrades"
-msgstr "升级包获取中"
+msgstr "正在获取升级"
 
 #. TRANSLATORS: The role of the transaction, in present tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:671
 msgid "Getting categories"
-msgstr ""
+msgstr "正在获取类别"
 
 #. TRANSLATORS: The role of the transaction, in present tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:675
 msgid "Getting transactions"
-msgstr ""
+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
 msgid "Simulating install"
-msgstr ""
+msgstr "正在模拟安装"
 
 #. TRANSLATORS: The role of the transaction, in present tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:687
 msgid "Simulating remove"
-msgstr ""
+msgstr "正在模拟删除"
 
 #. TRANSLATORS: The role of the transaction, in present tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:691
 msgid "Simulating update"
-msgstr ""
+msgstr "正在模拟更新"
 
 #. TRANSLATORS: ask the user if they are comfortable installing insecure packages
 #: ../lib/packagekit-glib2/pk-task-text.c:69
 msgid "Do you want to allow installing of unsigned software?"
-msgstr ""
+msgstr "您是否要同意未签名软件的安装?"
 
 #. TRANSLATORS: tell the user we've not done anything
 #: ../lib/packagekit-glib2/pk-task-text.c:74
 msgid "The unsigned software will not be installed."
-msgstr ""
+msgstr "未签名软件将不被安装。"
 
 #. TRANSLATORS: the package repository is signed by a key that is not recognised
 #: ../lib/packagekit-glib2/pk-task-text.c:123
 msgid "Software source signature required"
-msgstr ""
+msgstr "需要软件源签名"
 
 #. TRANSLATORS: the package repository name
 #: ../lib/packagekit-glib2/pk-task-text.c:129
 msgid "Software source name"
-msgstr ""
+msgstr "软件源名"
 
 #. TRANSLATORS: the key URL
 #: ../lib/packagekit-glib2/pk-task-text.c:132
 msgid "Key URL"
-msgstr "密钥地址(URL)"
+msgstr "密钥统一资源定位符(URL)"
 
 #. TRANSLATORS: the username of the key
 #: ../lib/packagekit-glib2/pk-task-text.c:135
@@ -1593,32 +1596,32 @@ msgstr "密钥用户"
 #. TRANSLATORS: the key ID, usually a few hex digits
 #: ../lib/packagekit-glib2/pk-task-text.c:138
 msgid "Key ID"
-msgstr "密钥编号"
+msgstr "密钥标识符"
 
 #. TRANSLATORS: the key fingerprint, again, yet more hex
 #: ../lib/packagekit-glib2/pk-task-text.c:141
 msgid "Key fingerprint"
-msgstr ""
+msgstr "密钥指纹"
 
 #. TRANSLATORS: the timestamp (a bit like a machine readable time)
 #: ../lib/packagekit-glib2/pk-task-text.c:144
 msgid "Key Timestamp"
-msgstr ""
+msgstr "密钥时戳"
 
 #. TRANSLATORS: ask the user if they want to import
 #: ../lib/packagekit-glib2/pk-task-text.c:157
 msgid "Do you accept this signature?"
-msgstr ""
+msgstr "您是否接受此签名?"
 
 #. TRANSLATORS: tell the user we've not done anything
 #: ../lib/packagekit-glib2/pk-task-text.c:162
 msgid "The signature was not accepted."
-msgstr "\t\t\t"
+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
 msgid "End user licence agreement required"
-msgstr ""
+msgstr "需要最终用户许可协议"
 
 #. TRANSLATORS: the EULA text itself (long and boring)
 #: ../lib/packagekit-glib2/pk-task-text.c:214
@@ -1628,17 +1631,17 @@ msgstr "协议"
 #. TRANSLATORS: ask the user if they've read and accepted the EULA
 #: ../lib/packagekit-glib2/pk-task-text.c:223
 msgid "Do you accept this agreement?"
-msgstr ""
+msgstr "您是否接受此协议?"
 
 #. TRANSLATORS: tell the user we've not done anything
 #: ../lib/packagekit-glib2/pk-task-text.c:228
 msgid "The agreement was not accepted."
-msgstr ""
+msgstr "协议未被接受。"
 
 #. TRANSLATORS: the user needs to change media inserted into the computer
 #: ../lib/packagekit-glib2/pk-task-text.c:267
 msgid "Media change required"
-msgstr ""
+msgstr "要求介质更改"
 
 #. TRANSLATORS: the type, e.g. DVD, CD, etc
 #: ../lib/packagekit-glib2/pk-task-text.c:270
@@ -1653,52 +1656,52 @@ msgstr "介质标签"
 #. TRANSLATORS: the media description, usually like 'Fedora 12 disk 5'
 #: ../lib/packagekit-glib2/pk-task-text.c:276
 msgid "Text"
-msgstr "描述"
+msgstr "文本"
 
 #. TRANSLATORS: ask the user to insert the media
 #: ../lib/packagekit-glib2/pk-task-text.c:282
 msgid "Please insert the correct media"
-msgstr ""
+msgstr "请插入正确的介质"
 
 #. TRANSLATORS: tell the user we've not done anything as they are lazy
 #: ../lib/packagekit-glib2/pk-task-text.c:287
 msgid "The correct media was not inserted."
-msgstr ""
+msgstr "正确的介质未被插入。"
 
 #. TRANSLATORS: When processing, we might have to remove other dependencies
 #: ../lib/packagekit-glib2/pk-task-text.c:302
 msgid "The following packages have to be removed:"
-msgstr ""
+msgstr "下列包必须被删除:"
 
 #. TRANSLATORS: When processing, we might have to install other dependencies
 #: ../lib/packagekit-glib2/pk-task-text.c:307
 msgid "The following packages have to be installed:"
-msgstr ""
+msgstr "下列包必须被安装:"
 
 #. TRANSLATORS: When processing, we might have to update other dependencies
 #: ../lib/packagekit-glib2/pk-task-text.c:312
 msgid "The following packages have to be updated:"
-msgstr ""
+msgstr "下列包必须被更新:"
 
 #. TRANSLATORS: When processing, we might have to reinstall other dependencies
 #: ../lib/packagekit-glib2/pk-task-text.c:317
 msgid "The following packages have to be reinstalled:"
-msgstr ""
+msgstr "下列包必须被重新安装:"
 
 #. TRANSLATORS: When processing, we might have to downgrade other dependencies
 #: ../lib/packagekit-glib2/pk-task-text.c:322
 msgid "The following packages have to be downgraded:"
-msgstr ""
+msgstr "下列包必须被降级:"
 
 #. TRANSLATORS: ask the user if the proposed changes are okay
 #: ../lib/packagekit-glib2/pk-task-text.c:382
 msgid "Proceed with changes?"
-msgstr ""
+msgstr "伴随更改继续?"
 
 #. TRANSLATORS: tell the user we didn't do anything
 #: ../lib/packagekit-glib2/pk-task-text.c:387
 msgid "The transaction did not proceed."
-msgstr ""
+msgstr "事务未继续。"
 
 #. SECURITY:
 #. - Normal users do not require admin authentication to accept new
@@ -1708,65 +1711,65 @@ msgstr ""
 #.
 #: ../policy/org.freedesktop.packagekit.policy.in.h:7
 msgid "Accept EULA"
-msgstr ""
+msgstr "接受最终用户许可协议(EULA)"
 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:8
 msgid "Authentication is required to accept a EULA"
-msgstr ""
+msgstr "接受最终用户许可协议需经身份验证"
 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:9
 msgid ""
 "Authentication is required to cancel a task that was not started by yourself"
-msgstr ""
+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 ""
+msgstr "更改解压包所用位置需经身份验证"
 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:12
 msgid ""
 "Authentication is required to consider a key used for signing packages as "
 "trusted"
-msgstr ""
+msgstr "考虑签名包为已信任所用密钥需经身份验证"
 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:13
 msgid "Authentication is required to install a signed package"
-msgstr ""
+msgstr "安装已签名包需经身份验证"
 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:14
 msgid "Authentication is required to install an untrusted package"
-msgstr ""
+msgstr "安装未信任包需经身份验证"
 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:15
 msgid "Authentication is required to refresh the system sources"
-msgstr ""
+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"
-msgstr ""
+msgstr "删除包需经身份验证"
 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:18
 msgid "Authentication is required to rollback a transaction"
-msgstr ""
+msgstr "回滚事务需经身份验证"
 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:19
 msgid ""
 "Authentication is required to set the network proxy used for downloading "
 "packages"
-msgstr ""
+msgstr "设置下载包所用网络代理需经身份验证"
 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:20
 msgid "Authentication is required to update packages"
-msgstr ""
+msgstr "更新包需经身份验证"
 
 #. SECURITY:
 #. - Normal users are allowed to cancel their own task without
@@ -1775,7 +1778,7 @@ msgstr ""
 #.
 #: ../policy/org.freedesktop.packagekit.policy.in.h:26
 msgid "Cancel foreign task"
-msgstr ""
+msgstr "取消外来任务"
 
 #. SECURITY:
 #. - This is used when users want to install to a different prefix, for
@@ -1785,7 +1788,7 @@ msgstr ""
 #.
 #: ../policy/org.freedesktop.packagekit.policy.in.h:33
 msgid "Change location that packages are installed"
-msgstr ""
+msgstr "更改包安装位置"
 
 #. SECURITY:
 #. - Normal users require admin authentication to enable or disable
@@ -1794,7 +1797,7 @@ msgstr ""
 #.
 #: ../policy/org.freedesktop.packagekit.policy.in.h:39
 msgid "Change software source parameters"
-msgstr ""
+msgstr "更改软件源参数"
 
 #. SECURITY:
 #. - Normal users do not need authentication to install signed packages
@@ -1814,7 +1817,7 @@ msgstr "安装已签名包"
 #.
 #: ../policy/org.freedesktop.packagekit.policy.in.h:53
 msgid "Install untrusted local file"
-msgstr ""
+msgstr "安装未信任本地文件"
 
 #. SECURITY:
 #. - Normal users do not require admin authentication to refresh the
@@ -1833,7 +1836,7 @@ msgstr "刷新系统源缓存"
 #.
 #: ../policy/org.freedesktop.packagekit.policy.in.h:66
 msgid "Reload a device"
-msgstr "重新加载设备"
+msgstr "重新载入设备"
 
 #. SECURITY:
 #. - Normal users require admin authentication to remove packages as
@@ -1846,7 +1849,7 @@ msgstr "重新加载设备"
 #.
 #: ../policy/org.freedesktop.packagekit.policy.in.h:76
 msgid "Remove package"
-msgstr "移除包"
+msgstr "删除包"
 
 #. SECURITY:
 #. - Normal users require admin authentication to rollback system state
@@ -1855,7 +1858,7 @@ msgstr "移除包"
 #.
 #: ../policy/org.freedesktop.packagekit.policy.in.h:82
 msgid "Rollback to a previous transaction"
-msgstr ""
+msgstr "回滚到前一个事务"
 
 #. SECURITY:
 #. - Normal users do not require admin authentication to set the proxy
@@ -1873,7 +1876,7 @@ msgstr "设置网络代理"
 #.
 #: ../policy/org.freedesktop.packagekit.policy.in.h:94
 msgid "Trust a key used for signing packages"
-msgstr ""
+msgstr "信任签名包所用密钥"
 
 #. SECURITY:
 #. - Normal users do not require admin authentication to update the
@@ -1889,17 +1892,18 @@ 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
 msgid "This can happen for two reasons:"
-msgstr ""
+msgstr "此事出现可有两个原因:"
 
 #. TRANSLATORS: only allowed to be owned by root
 #: ../src/pk-main.c:91
+#, fuzzy
 msgid "The correct user is not launching the executable (usually root)"
-msgstr ""
+msgstr "正确的用户没有启动此可执行文件(通常是 root)"
 
 #. TRANSLATORS: or we are installed in a prefix
 #: ../src/pk-main.c:93
@@ -1946,8 +1950,9 @@ msgstr "包工具箱(PackageKit)服务"
 
 #. TRANSLATORS: fatal error, dbus is not running
 #: ../src/pk-main.c:267
+#, fuzzy
 msgid "Cannot connect to the system bus"
-msgstr "不能连接到系统总线"
+msgstr "不能连接到系统 dbus"
 
 #. TRANSLATORS: cannot register on system bus, unknown reason -- geeky error follows
 #: ../src/pk-main.c:318
@@ -1961,7 +1966,7 @@ msgstr "要安装调试包,需要启用额外源。"
 #. 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 "该软件不是来自受信任源。"
+msgstr "此软件不是来自信任源。"
 
 #: ../src/pk-polkit-action-lookup.c:176
 msgid "Do not update this package unless you are sure it is safe to do so."
@@ -1987,7 +1992,7 @@ msgstr "太多包"
 #. TRANSLATORS: if the transaction is forced to install only trusted packages
 #: ../src/pk-polkit-action-lookup.c:339
 msgid "Only trusted"
-msgstr "仅受信任包"
+msgstr "仅已信任包"
 
 #. TRANSLATORS: turn on all debugging
 #: ../src/egg-debug.c:388
commit 720e4631dc6b86cc06637ae966de3f7a538c0a0a
Author: Jonathan Conder <j at skurvy.no-ip.org>
Date:   Sun Jun 20 01:34:24 2010 +1200

    pacman: update for pacman-glib 3.4.0

diff --git a/backends/pacman/backend-install.c b/backends/pacman/backend-install.c
index 53dfe8d..5c188cc 100644
--- a/backends/pacman/backend-install.c
+++ b/backends/pacman/backend-install.c
@@ -51,46 +51,6 @@ backend_transaction_list_targets (PkBackend *backend)
 	return list;
 }
 
-static void
-backend_transaction_packages (PkBackend *backend, PacmanTransaction *transaction)
-{
-	const PacmanList *removes, *packages;
-
-	g_return_if_fail (backend != NULL);
-	g_return_if_fail (transaction != NULL);
-
-	/* emit packages that would have been installed */
-	for (packages = pacman_transaction_get_packages (transaction); packages != NULL; packages = pacman_list_next (packages)) {
-		PacmanPackage *package = (PacmanPackage *) pacman_list_get (packages);
-
-		for (removes = pacman_package_get_removes (package); removes != NULL; removes = pacman_list_next (removes)) {
-			PacmanPackage *remove = (PacmanPackage *) pacman_list_get (removes);
-
-			if (backend_cancelled (backend)) {
-				break;
-			} else {
-				PkRoleEnum role = pk_backend_get_role (backend);
-				if (role == PK_ROLE_ENUM_SIMULATE_UPDATE_PACKAGES) {
-					backend_package (backend, remove, PK_INFO_ENUM_OBSOLETING);
-				} else {
-					backend_package (backend, remove, PK_INFO_ENUM_REMOVING);
-				}
-			}
-		}
-
-		if (backend_cancelled (backend)) {
-			break;
-		} else {
-			const gchar *name = pacman_package_get_name (package);
-			if (pacman_database_find_package (local_database, name) != NULL) {
-				backend_package (backend, package, PK_INFO_ENUM_UPDATING);
-			} else {
-				backend_package (backend, package, PK_INFO_ENUM_INSTALLING);
-			}
-		}
-	}
-}
-
 static gboolean
 backend_download_packages_thread (PkBackend *backend)
 {
@@ -174,7 +134,7 @@ backend_install_files_thread (PkBackend *backend)
  * backend_install_files:
  **/
 void
-backend_install_files (PkBackend *backend, gboolean only_trusted, gchar	**full_paths)
+backend_install_files (PkBackend *backend, gboolean only_trusted, gchar **full_paths)
 {
 	g_return_if_fail (backend != NULL);
 	g_return_if_fail (full_paths != NULL);
@@ -183,6 +143,52 @@ backend_install_files (PkBackend *backend, gboolean only_trusted, gchar	**full_p
 }
 
 static gboolean
+backend_simulate_install_files_thread (PkBackend *backend)
+{
+	guint iterator;
+	PacmanList *list = NULL;
+
+	gchar **full_paths;
+
+	PacmanTransaction *transaction = NULL;
+	PacmanTransactionFlags flags = PACMAN_TRANSACTION_FLAGS_NONE;
+
+	g_return_val_if_fail (backend != NULL, FALSE);
+
+	full_paths = pk_backend_get_strv (backend, "full_paths");
+
+	g_return_val_if_fail (full_paths != NULL, FALSE);
+
+	/* prepare the transaction */
+	for (iterator = 0; full_paths[iterator] != NULL; ++iterator) {
+		list = pacman_list_add (list, full_paths[iterator]);
+	}
+	if (list != NULL) {
+		transaction = backend_transaction_simulate (backend, PACMAN_TRANSACTION_INSTALL, flags, list);
+		pacman_list_free (list);
+
+		if (transaction != NULL) {
+			/* emit packages that would have been installed or removed */
+			backend_transaction_packages (backend, transaction);
+		}
+	}
+
+	return backend_transaction_finished (backend, transaction);
+}
+
+/**
+ * backend_install_files:
+ **/
+void
+backend_simulate_install_files (PkBackend *backend, gchar **full_paths)
+{
+	g_return_if_fail (backend != NULL);
+	g_return_if_fail (full_paths != NULL);
+
+	backend_run (backend, PK_STATUS_ENUM_SETUP, backend_simulate_install_files_thread);
+}
+
+static gboolean
 backend_install_packages_thread (PkBackend *backend)
 {
 	PacmanList *list;
@@ -257,46 +263,46 @@ backend_update_packages_thread (PkBackend *backend)
 	PacmanList *list, *asdeps = NULL;
 	/* FS#5331: use only_trusted */
 	PacmanTransaction *transaction = NULL;
-	PacmanTransactionFlags flags = PACMAN_TRANSACTION_FLAGS_NONE, dflags = PACMAN_TRANSACTION_FLAGS_INSTALL_IMPLICIT;
+	PacmanTransactionFlags sflags = PACMAN_TRANSACTION_FLAGS_NONE, mflags = PACMAN_TRANSACTION_FLAGS_INSTALL_IMPLICIT;
 
+	g_return_val_if_fail (local_database != NULL, FALSE);
 	g_return_val_if_fail (backend != NULL, FALSE);
 
 	/* prepare the transaction */
 	list = backend_transaction_list_targets (backend);
 	if (list != NULL) {
-		transaction = backend_transaction_simulate (backend, PACMAN_TRANSACTION_SYNC, flags, list);
+		transaction = backend_transaction_simulate (backend, PACMAN_TRANSACTION_SYNC, sflags, list);
 		pacman_list_free_full (list, g_free);
 
 		if (transaction != NULL) {
-			const PacmanList *packages;
+			const PacmanList *installs, *removes;
 
-			/* check for packages that should be installed as deps */
-			for (packages = pacman_transaction_get_packages (transaction); packages != NULL; packages = pacman_list_next (packages)) {
-				PacmanPackage *package = (PacmanPackage *) pacman_list_get (packages);
-				const PacmanList *removes = pacman_package_get_removes (package);
+			/* change the install reason of for packages that replace only dependencies of other packages */
+			for (installs = pacman_transaction_get_installs (transaction); installs != NULL; installs = pacman_list_next (installs)) {
+				PacmanPackage *install = (PacmanPackage *) pacman_list_get (installs);
+				const gchar *name = pacman_package_get_name (install);
 
 				if (backend_cancelled (backend)) {
 					break;
-				} else if (removes != NULL) {
-					for (; removes != NULL; removes = pacman_list_next (removes)) {
+				} else if (pacman_database_find_package (local_database, name) == NULL) {
+					const PacmanList *replaces = pacman_package_get_replaces (install);
+
+					for (removes = pacman_transaction_get_removes (transaction); removes != NULL; removes = pacman_list_next (removes)) {
 						PacmanPackage *remove = (PacmanPackage *) pacman_list_get (removes);
+						const gchar *replace = pacman_package_get_name (remove);
 
 						if (backend_cancelled (backend)) {
 							break;
-						} else if (pacman_package_was_explicitly_installed (remove)) {
-							break;
+						} else if (pacman_list_find_string (replaces, replace)) {
+							if (pacman_package_was_explicitly_installed (remove)) {
+								break;
+							}
 						}
 					}
 
-					/* if all removes were installed as dependencies, do the same for this package */
+					/* none of the replaced packages were installed explicitly */
 					if (removes == NULL) {
-						const gchar *name, *repo;
-						PacmanDatabase *database = pacman_package_get_database (package);
-
-						name = pacman_package_get_name (package);
-						repo = pacman_database_get_name (database);
-
-						asdeps = pacman_list_add (asdeps, g_strdup_printf ("%s/%s", repo, name));
+						asdeps = pacman_list_add (asdeps, g_strdup (name));
 					}
 				}
 			}
@@ -306,11 +312,11 @@ backend_update_packages_thread (PkBackend *backend)
 	}
 
 	/* mark replacements as deps if required */
-	if (transaction != NULL && asdeps != NULL) {
-		g_object_unref (transaction);
-		transaction = backend_transaction_run (backend, PACMAN_TRANSACTION_SYNC, dflags, asdeps);
-		pacman_list_free_full (asdeps, g_free);
-	} else if (asdeps != NULL) {
+	if (asdeps != NULL) {
+		if (transaction != NULL) {
+			g_object_unref (transaction);
+			transaction = backend_transaction_run (backend, PACMAN_TRANSACTION_MODIFY, mflags, asdeps);
+		}
 		pacman_list_free_full (asdeps, g_free);
 	}
 
diff --git a/backends/pacman/backend-install.h b/backends/pacman/backend-install.h
index 5b45b20..0685a48 100644
--- a/backends/pacman/backend-install.h
+++ b/backends/pacman/backend-install.h
@@ -29,6 +29,8 @@ void	 backend_download_packages		(PkBackend	*backend,
 void	 backend_install_files			(PkBackend	*backend,
 						 gboolean	 only_trusted,
 						 gchar		**full_paths);
+void	 backend_simulate_install_files		(PkBackend	*backend,
+						 gchar		**full_paths);
 
 void	 backend_install_packages		(PkBackend	*backend,
 						 gboolean	 only_trusted,
diff --git a/backends/pacman/backend-packages.c b/backends/pacman/backend-packages.c
index af35f69..a00f107 100644
--- a/backends/pacman/backend-packages.c
+++ b/backends/pacman/backend-packages.c
@@ -254,8 +254,7 @@ backend_get_details_thread (PkBackend *backend)
 		if (pacman_package_get_database (package) == local_database) {
 			size = pacman_package_get_installed_size (package);
 		} else {
-			/* FS#18769: change to get_download_size */
-			size = pacman_package_get_size (package);
+			size = pacman_package_get_download_size (package);
 		}
 
 		licenses = g_string_free (string, FALSE);
diff --git a/backends/pacman/backend-pacman.c b/backends/pacman/backend-pacman.c
index a032403..8586790 100644
--- a/backends/pacman/backend-pacman.c
+++ b/backends/pacman/backend-pacman.c
@@ -246,7 +246,7 @@ PK_BACKEND_OPTIONS (
 	backend_update_packages,		/* update_packages */
 	NULL,					/* update_system */
 	backend_what_provides,			/* what_provides */
-	NULL,					/* simulate_install_files */
+	backend_simulate_install_files,		/* simulate_install_files */
 	backend_simulate_install_packages,	/* simulate_install_packages */
 	backend_simulate_remove_packages,	/* simulate_remove_packages */
 	backend_simulate_update_packages	/* simulate_update_packages */
diff --git a/backends/pacman/backend-remove.c b/backends/pacman/backend-remove.c
index 3ff47e1..b31218b 100644
--- a/backends/pacman/backend-remove.c
+++ b/backends/pacman/backend-remove.c
@@ -121,17 +121,8 @@ backend_simulate_remove_packages_thread (PkBackend *backend)
 		pacman_list_free_full (list, g_free);
 
 		if (transaction != NULL) {
-			const PacmanList *packages;
-
-			/* emit packages that would have been removed */
-			for (packages = pacman_transaction_get_packages (transaction); packages != NULL; packages = pacman_list_next (packages)) {
-				PacmanPackage *package = (PacmanPackage *) pacman_list_get (packages);
-				if (backend_cancelled (backend)) {
-					break;
-				} else {
-					backend_package (backend, package, PK_INFO_ENUM_REMOVING);
-				}
-			}
+			/* emit packages that would have been installed or removed */
+			backend_transaction_packages (backend, transaction);
 		}
 	}
 
diff --git a/backends/pacman/backend-transaction.c b/backends/pacman/backend-transaction.c
index 99e629a..b16458d 100644
--- a/backends/pacman/backend-transaction.c
+++ b/backends/pacman/backend-transaction.c
@@ -123,7 +123,7 @@ transaction_download_start (PacmanTransaction *transaction, BackendDownloadData
 	}
 
 	/* find a new package for the current file */
-	for (packages = pacman_transaction_get_packages (transaction); packages != NULL; packages = pacman_list_next (packages)) {
+	for (packages = pacman_transaction_get_installs (transaction); packages != NULL; packages = pacman_list_next (packages)) {
 		PacmanPackage *package = (PacmanPackage *) pacman_list_get (packages);
 		if (pacman_package_has_filename (package, filename)) {
 			download->package = package;
@@ -402,6 +402,9 @@ backend_transaction_simulate (PkBackend *backend, PacmanTransactionType type, gu
 		case PACMAN_TRANSACTION_INSTALL:
 			transaction = pacman_manager_install (pacman, flags, &error);
 			break;
+		case PACMAN_TRANSACTION_MODIFY:
+			transaction = pacman_manager_modify (pacman, flags, &error);
+			break;
 		case PACMAN_TRANSACTION_REMOVE:
 			transaction = pacman_manager_remove (pacman, flags, &error);
 			break;
@@ -450,6 +453,50 @@ backend_transaction_run (PkBackend *backend, PacmanTransactionType type, guint32
 	return backend_transaction_commit (backend, transaction);
 }
 
+void
+backend_transaction_packages (PkBackend *backend, PacmanTransaction *transaction)
+{
+	const PacmanList *installs, *removes;
+	PkInfoEnum info;
+
+	g_return_if_fail (local_database != NULL);
+	g_return_if_fail (backend != NULL);
+	g_return_if_fail (transaction != NULL);
+
+	/* emit packages that would have been installed */
+	for (installs = pacman_transaction_get_installs (transaction); installs != NULL; installs = pacman_list_next (installs)) {
+		PacmanPackage *install = (PacmanPackage *) pacman_list_get (installs);
+
+		if (backend_cancelled (backend)) {
+			break;
+		} else {
+			const gchar *name = pacman_package_get_name (install);
+			if (pacman_database_find_package (local_database, name) != NULL) {
+				backend_package (backend, install, PK_INFO_ENUM_UPDATING);
+			} else {
+				backend_package (backend, install, PK_INFO_ENUM_INSTALLING);
+			}
+		}
+	}
+
+	if (pk_backend_get_role (backend) == PK_ROLE_ENUM_SIMULATE_UPDATE_PACKAGES) {
+		info = PK_INFO_ENUM_OBSOLETING;
+	} else {
+		info = PK_INFO_ENUM_REMOVING;
+	}
+
+	/* emit packages that would have been removed */
+	for (removes = pacman_transaction_get_removes (transaction); removes != NULL; removes = pacman_list_next (removes)) {
+		PacmanPackage *remove = (PacmanPackage *) pacman_list_get (removes);
+
+		if (backend_cancelled (backend)) {
+			break;
+		} else {
+			backend_package (backend, remove, info);
+		}
+	}
+}
+
 PacmanTransaction *
 backend_transaction_commit (PkBackend *backend, PacmanTransaction *transaction)
 {
diff --git a/backends/pacman/backend-transaction.h b/backends/pacman/backend-transaction.h
index 29dde88..a7db49a 100644
--- a/backends/pacman/backend-transaction.h
+++ b/backends/pacman/backend-transaction.h
@@ -26,6 +26,7 @@
 
 typedef enum {
 	PACMAN_TRANSACTION_INSTALL,
+	PACMAN_TRANSACTION_MODIFY,
 	PACMAN_TRANSACTION_REMOVE,
 	PACMAN_TRANSACTION_SYNC,
 	PACMAN_TRANSACTION_UPDATE,
@@ -45,6 +46,8 @@ PacmanTransaction	*backend_transaction_run	(PkBackend		*backend,
 							 guint32		 flags,
 							 const PacmanList	*targets);
 
+void			 backend_transaction_packages	(PkBackend		*backend,
+							 PacmanTransaction	*transaction);
 PacmanTransaction	*backend_transaction_commit	(PkBackend		*backend,
 							 PacmanTransaction	*transaction);
 gboolean		 backend_transaction_finished	(PkBackend		*backend,
commit fedeb7b53eceb00759d5c5aa765cf66bb2f1bc7d
Author: Richard Hughes <richard at hughsie.com>
Date:   Wed Jun 16 17:52:08 2010 +0100

    Move the packagekitd binary to libexec
    
    According to the FHS, packagekitd is system activated, and not designed
    to be run by the end user. So move it where it belongs.

diff --git a/contrib/PackageKit.spec.in b/contrib/PackageKit.spec.in
index b600ac0..215e3f5 100644
--- a/contrib/PackageKit.spec.in
+++ b/contrib/PackageKit.spec.in
@@ -306,7 +306,7 @@ update-mime-database %{_datadir}/mime &> /dev/null || :
 %{_datadir}/polkit-1/actions/*.policy
 %{_datadir}/mime/packages/packagekit-*.xml
 %{_datadir}/PackageKit/pk-upgrade-distro.sh
-%{_sbindir}/packagekitd
+%{_libexecdir}/packagekitd
 %{_bindir}/pkmon
 %{_bindir}/pkcon
 %{_bindir}/pkgenpack
diff --git a/data/Makefile.am b/data/Makefile.am
index 391fb90..7bd5c4c 100644
--- a/data/Makefile.am
+++ b/data/Makefile.am
@@ -28,7 +28,7 @@ servicemaindir       = $(DBUS_SERVICES_DIR)
 servicemain_in_files = org.freedesktop.PackageKit.service.in
 servicemain_DATA     = $(servicemain_in_files:.service.in=.service)
 $(servicemain_DATA): $(servicemain_in_files) Makefile
-	@sed -e "s|\@servicedir\@|$(sbindir)|" -e "s|\@PACKAGEKIT_USER\@|$(PACKAGEKIT_USER)|" $< > $@
+	@sed -e "s|\@servicedir\@|$(libexecdir)|" -e "s|\@PACKAGEKIT_USER\@|$(PACKAGEKIT_USER)|" $< > $@
 
 databasedir = $(PK_DB_DIR)
 database_DATA =						\
diff --git a/src/Makefile.am b/src/Makefile.am
index 250b0e2..50215ae 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -112,7 +112,7 @@ shared_SOURCES +=					\
 	pk-network-stack-connman.c
 endif
 
-sbin_PROGRAMS =						\
+libexec_PROGRAMS =					\
 	packagekitd					\
 	$(NULL)
 
commit aab7a985eb903c1404d0890614af926f61863de4
Author: chenh <chenh at fedoraproject.org>
Date:   Tue Jun 15 06:10:24 2010 +0000

    l10n: Updates to Chinese (China) (zh_CN) translation
    
    Transmitted-via: Transifex (translate.fedoraproject.org)

diff --git a/po/zh_CN.po b/po/zh_CN.po
index a4307b3..938c4ac 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -4,782 +4,802 @@
 # Simplified Chinese Version of pavucontrol.
 # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 # This file is distributed under the same license as the PACKAGE package.
+# Huan Chen <chenhuan.gt at gmail.com>, 2010.
 msgid ""
 msgstr ""
 "Project-Id-Version: pavucontrol.master-tx\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-30 10:34+0000\n"
-"PO-Revision-Date: 2010-01-09 19:54+0800\n"
-"Last-Translator: 官明霖 <guanminglin at gmail.com>\n"
-"Language-Team: Simplified Chinese <zh at li.org>\n"
+"POT-Creation-Date: 2010-06-14 19:32+0000\n"
+"PO-Revision-Date: 2010-06-15 14:02+0800\n"
+"Last-Translator: Huan Chen <chenhuan.gt at gmail.com>\n"
+"Language-Team: trans-zh_cn at lists.fedoraproject.com\n"
+"Language: zh\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: KBabel 1.11.4\n"
+"X-Generator: Virtaal 0.5.2\n"
 
 #. TRANSLATORS: this is an atomic transaction
 #. TRANSLATORS: the role is the point of the transaction, e.g. update-system
-#: ../client/pk-console.c:175
-#: ../client/pk-console.c:597
+#: ../client/pk-console.c:176 ../client/pk-console.c:598
 msgid "Transaction"
-msgstr "处理"
+msgstr "事务"
 
 #. TRANSLATORS: this is the time the transaction was started in system timezone
-#: ../client/pk-console.c:177
+#: ../client/pk-console.c:178
 msgid "System time"
 msgstr "系统时间"
 
 #. TRANSLATORS: this is if the transaction succeeded or not
-#: ../client/pk-console.c:179
+#: ../client/pk-console.c:180
 msgid "Succeeded"
 msgstr "成功"
 
-#: ../client/pk-console.c:179
+#: ../client/pk-console.c:180
 msgid "True"
 msgstr "正确"
 
-#: ../client/pk-console.c:179
+#: ../client/pk-console.c:180
 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:181
-#: ../src/pk-polkit-action-lookup.c:332
+#: ../client/pk-console.c:182 ../src/pk-polkit-action-lookup.c:332
 msgid "Role"
-msgstr "任务"
+msgstr "角色"
 
 #. TRANSLATORS: this is The duration of the transaction
-#: ../client/pk-console.c:186
+#: ../client/pk-console.c:187
 msgid "Duration"
 msgstr "持续时间"
 
-#: ../client/pk-console.c:186
+#: ../client/pk-console.c:187
 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:190
-#: ../src/pk-polkit-action-lookup.c:346
+#: ../client/pk-console.c:191 ../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:192
+#: ../client/pk-console.c:193
 msgid "User ID"
-msgstr "用户ID"
+msgstr "用户编号"
 
 #. TRANSLATORS: this is the username, e.g. hughsie
-#: ../client/pk-console.c:199
+#: ../client/pk-console.c:200
 msgid "Username"
 msgstr "用户名"
 
 #. TRANSLATORS: this is the users real name, e.g. "Richard Hughes"
-#: ../client/pk-console.c:203
+#: ../client/pk-console.c:204
 msgid "Real name"
 msgstr "真实姓名"
 
-#: ../client/pk-console.c:211
+#: ../client/pk-console.c:212
 msgid "Affected packages:"
-msgstr "受影响的包"
+msgstr "受影响包:"
 
-#: ../client/pk-console.c:213
+#: ../client/pk-console.c:214
 msgid "Affected packages: None"
-msgstr "受影响的包:无"
+msgstr "受影响包:无"
 
 #. TRANSLATORS: this is the distro, e.g. Fedora 10
-#: ../client/pk-console.c:248
+#: ../client/pk-console.c:249
 msgid "Distribution"
-msgstr "分配"
+msgstr "发行版"
 
 #. TRANSLATORS: this is type of update, stable or testing
-#: ../client/pk-console.c:250
+#: ../client/pk-console.c:251
 msgid "Type"
 msgstr "类型"
 
 #. TRANSLATORS: this is any summary text describing the upgrade
 #. TRANSLATORS: this is the summary of the group
-#: ../client/pk-console.c:252
-#: ../client/pk-console.c:291
+#: ../client/pk-console.c:253 ../client/pk-console.c:292
 msgid "Summary"
 msgstr "摘要"
 
 #. TRANSLATORS: this is the group category name
-#: ../client/pk-console.c:280
+#: ../client/pk-console.c:281
 msgid "Category"
 msgstr "类别"
 
 #. TRANSLATORS: this is group identifier
-#: ../client/pk-console.c:282
+#: ../client/pk-console.c:283
 msgid "ID"
-msgstr "ID"
+msgstr "编号"
 
 #. TRANSLATORS: this is the parent group
-#: ../client/pk-console.c:285
+#: ../client/pk-console.c:286
 msgid "Parent"
-msgstr "相对的"
+msgstr "上级组"
 
 #. TRANSLATORS: this is the name of the parent group
-#: ../client/pk-console.c:288
+#: ../client/pk-console.c:289
 msgid "Name"
 msgstr "名称"
 
 #. TRANSLATORS: this is preferred icon for the group
-#: ../client/pk-console.c:294
+#: ../client/pk-console.c:295
 msgid "Icon"
 msgstr "图标"
 
 #. TRANSLATORS: this is a header for the package that can be updated
-#: ../client/pk-console.c:340
+#: ../client/pk-console.c:341
 msgid "Details about the update:"
-msgstr "关于 更新的详细信息"
+msgstr "更新细节:"
 
 #. 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:346
-#: ../client/pk-console.c:616
+#: ../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
 #: ../src/pk-polkit-action-lookup.c:357
+#, fuzzy
 msgid "Package"
 msgid_plural "Packages"
 msgstr[0] ""
 msgstr[1] ""
 
 #. TRANSLATORS: details about the update, any packages that this update updates
-#: ../client/pk-console.c:349
+#: ../client/pk-console.c:350
 msgid "Updates"
 msgstr "æ›´æ–°"
 
 #. TRANSLATORS: details about the update, any packages that this update obsoletes
-#: ../client/pk-console.c:353
+#: ../client/pk-console.c:354
 msgid "Obsoletes"
-msgstr "陈旧的"
+msgstr "废弃"
 
 #. TRANSLATORS: details about the update, the vendor URLs
 #. TRANSLATORS: the vendor (e.g. vmware) that is providing the EULA
-#: ../client/pk-console.c:357
-#: ../lib/packagekit-glib2/pk-task-text.c:211
+#: ../client/pk-console.c:358 ../lib/packagekit-glib2/pk-task-text.c:211
 msgid "Vendor"
-msgstr "Vendor"
+msgstr "供应商"
 
 #. TRANSLATORS: details about the update, the bugzilla URLs
-#: ../client/pk-console.c:361
+#: ../client/pk-console.c:362
 msgid "Bugzilla"
-msgstr "Bugzilla"
+msgstr "缺陷终结者(Bugzilla)地址"
 
 #. TRANSLATORS: details about the update, the CVE URLs
-#: ../client/pk-console.c:365
+#: ../client/pk-console.c:366
 msgid "CVE"
-msgstr "CVE"
+msgstr "公共漏洞和暴露(CVE)地址"
 
 #. TRANSLATORS: details about the update, if the package requires a restart
-#: ../client/pk-console.c:369
+#: ../client/pk-console.c:370
 msgid "Restart"
 msgstr "重启"
 
 #. TRANSLATORS: details about the update, any description of the update
-#: ../client/pk-console.c:373
+#: ../client/pk-console.c:374
 msgid "Update text"
 msgstr "升级描述"
 
 #. TRANSLATORS: details about the update, the changelog for the package
-#: ../client/pk-console.c:377
+#: ../client/pk-console.c:378
 msgid "Changes"
-msgstr "更改"
+msgstr "更改日志"
 
 #. TRANSLATORS: details about the update, the ongoing state of the update
-#: ../client/pk-console.c:381
+#: ../client/pk-console.c:382
 msgid "State"
 msgstr "状态"
 
 #. TRANSLATORS: details about the update, date the update was issued
-#: ../client/pk-console.c:385
+#: ../client/pk-console.c:386
 msgid "Issued"
-msgstr "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:389
-#: ../lib/packagekit-glib2/pk-console-shared.c:510
+#: ../client/pk-console.c:390 ../lib/packagekit-glib2/pk-console-shared.c:517
 msgid "Updated"
-msgstr "æ›´æ–°çš„"
+msgstr "æ›´æ–°"
 
 #. TRANSLATORS: if the repo is enabled
-#: ../client/pk-console.c:425
+#: ../client/pk-console.c:426
 msgid "Enabled"
-msgstr "可用的"
+msgstr "已启用"
 
 #. TRANSLATORS: if the repo is disabled
-#: ../client/pk-console.c:428
+#: ../client/pk-console.c:429
 msgid "Disabled"
-msgstr "禁用的"
+msgstr "已禁用"
 
 #. TRANSLATORS: a package requires the system to be restarted
-#: ../client/pk-console.c:460
+#: ../client/pk-console.c:461
 msgid "System restart required by:"
-msgstr "要求系统重启:"
+msgstr "需要系统重启的包:"
 
 #. TRANSLATORS: a package requires the session to be restarted
-#: ../client/pk-console.c:463
+#: ../client/pk-console.c:464
 msgid "Session restart required:"
-msgstr "要求会话重启:"
+msgstr "需要重启会话的包:"
 
 #. TRANSLATORS: a package requires the system to be restarted due to a security update
-#: ../client/pk-console.c:466
+#: ../client/pk-console.c:467
 msgid "System restart (security) required by:"
-msgstr "要求(安全)的重启系统:"
+msgstr "需要系统重启的安全更新包:"
 
 #. TRANSLATORS: a package requires the session to be restarted due to a security update
-#: ../client/pk-console.c:469
+#: ../client/pk-console.c:470
 msgid "Session restart (security) required:"
-msgstr "要求会话(安全)的重启"
+msgstr "需要会话重启的安全更新包:"
 
 #. TRANSLATORS: a package requires the application to be restarted
-#: ../client/pk-console.c:472
+#: ../client/pk-console.c:473
 msgid "Application restart required by:"
-msgstr "要求应用程序重新启动:"
+msgstr "需要应用程序重启的包:"
 
 #. TRANSLATORS: This a list of details about the package
-#: ../client/pk-console.c:507
+#: ../client/pk-console.c:508
 msgid "Package description"
 msgstr "包描述"
 
 #. TRANSLATORS: This a message (like a little note that may be of interest) from the transaction
-#: ../client/pk-console.c:538
+#: ../client/pk-console.c:539
 msgid "Message:"
 msgstr "消息:"
 
 #. TRANSLATORS: This where the package has no files
-#: ../client/pk-console.c:559
+#: ../client/pk-console.c:560
 msgid "No files"
-msgstr "没有文件"
+msgstr "无文件"
 
 #. TRANSLATORS: This a list files contained in the package
-#: ../client/pk-console.c:564
+#: ../client/pk-console.c:565
 msgid "Package files"
-msgstr "包文件"
+msgstr "包文件清单"
 
 #. TRANSLATORS: the percentage complete of the transaction
-#: ../client/pk-console.c:632
+#: ../client/pk-console.c:633
 msgid "Percentage"
 msgstr "百分比"
 
 #. TRANSLATORS: the status of the transaction (e.g. downloading)
-#: ../client/pk-console.c:650
+#: ../client/pk-console.c:651
 msgid "Status"
 msgstr "状态"
 
 #. TRANSLATORS: the results from the transaction
-#: ../client/pk-console.c:678
+#: ../client/pk-console.c:680
 msgid "Results:"
 msgstr "结果:"
 
 #. TRANSLATORS: we failed to get any results, which is pretty fatal in my book
-#: ../client/pk-console.c:685
+#: ../client/pk-console.c:687
 msgid "Fatal error"
-msgstr "致命的错误"
+msgstr "严重错误"
 
 #. TRANSLATORS: the transaction failed in a way we could not expect
-#: ../client/pk-console.c:694
-#: ../contrib/command-not-found/pk-command-not-found.c:432
-#: ../contrib/command-not-found/pk-command-not-found.c:603
+#: ../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
 msgid "The transaction failed"
-msgstr "处理失败"
+msgstr "该事务失败"
 
 #. TRANSLATORS: print a message when there are no updates
-#: ../client/pk-console.c:721
+#: ../client/pk-console.c:727
 msgid "There are no updates available at this time."
-msgstr "当前没有可用的更新"
+msgstr "当前没有可装的更新。"
+
+#: ../client/pk-console.c:750
+msgid "There are no upgrades available at this time."
+msgstr "当前没有可装的更新。"
 
 #. TRANSLATORS: a package needs to restart their system
-#: ../client/pk-console.c:808
+#: ../client/pk-console.c:817
 msgid "Please restart the computer to complete the update."
-msgstr "请重启系统以完成更新"
+msgstr "请重启电脑以完成更新。"
 
 #. TRANSLATORS: a package needs to restart the session
-#: ../client/pk-console.c:811
+#: ../client/pk-console.c:820
 msgid "Please logout and login to complete the update."
-msgstr "请重新登录以完成更新"
+msgstr "请注销并登录以完成更新。"
 
 #. TRANSLATORS: a package needs to restart their system (due to security)
-#: ../client/pk-console.c:814
-msgid "Please restart the computer to complete the update as important security updates have been installed."
-msgstr "请重启系统一完成系统重要的安全更新"
+#: ../client/pk-console.c:823
+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:817
-msgid "Please logout and login to complete the update as important security updates have been installed."
-msgstr "请重新登录以完成重要的安全更新"
+#: ../client/pk-console.c:826
+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
+#, c-format
+msgid ""
+"Expected package name, actually got file. Try using 'pkcon install-local %s' "
+"instead."
+msgstr ""
 
 #. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console.c:840
+#: ../client/pk-console.c:860
 #, c-format
 msgid "This tool could not find any available package: %s"
-msgstr "未能找到可用的的软件包: %s"
+msgstr "本工具没能找到任何可装包:%s"
 
 #. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console.c:868
+#: ../client/pk-console.c:888
 #, c-format
 msgid "This tool could not find the installed package: %s"
-msgstr "未能找到已安装的软件包:%s"
+msgstr "本工具没能找到已装包:%s"
 
 #. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console.c:896
-#: ../client/pk-console.c:924
+#: ../client/pk-console.c:916 ../client/pk-console.c:944
 #, c-format
 msgid "This tool could not find the package: %s"
-msgstr "未能找到软件包: %s"
+msgstr "本工具没能找到该包:%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:952
-#: ../client/pk-console.c:980
-#: ../client/pk-console.c:1008
-#: ../client/pk-console.c:1036
-#: ../client/pk-console.c:1064
+#: ../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
 #, c-format
 msgid "This tool could not find all the packages: %s"
-msgstr "未能找到所有的软件包:%s"
+msgstr "本工具没能找到所有包:%s"
 
 #. TRANSLATORS: This is when the daemon crashed, and we are up shit creek without a paddle
-#: ../client/pk-console.c:1093
+#: ../client/pk-console.c:1113
 msgid "The daemon crashed mid-transaction!"
-msgstr "守护程序再处理的过程中崩溃"
+msgstr "守护进程在事务中途(mid-transaction)崩溃"
 
 #. TRANSLATORS: This is the header to the --help menu
-#: ../client/pk-console.c:1127
+#: ../client/pk-console.c:1147
 msgid "PackageKit Console Interface"
-msgstr "PackageKit 控制接口"
+msgstr "包工具箱(PackageKit)控制接口"
 
 #. these are commands we can use with pkcon
-#: ../client/pk-console.c:1129
+#: ../client/pk-console.c:1149
 msgid "Subcommands:"
 msgstr "子命令:"
 
 #. TRANSLATORS: we keep a database updated with the time that an action was last executed
-#: ../client/pk-console.c:1208
+#: ../client/pk-console.c:1228
 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:1244
-#: ../client/pk-monitor.c:280
+#: ../client/pk-console.c:1268 ../client/pk-monitor.c:356
 msgid "Show the program version and exit"
 msgstr ""
 
 #. TRANSLATORS: command line argument, use a filter to narrow down results
-#: ../client/pk-console.c:1247
+#: ../client/pk-console.c:1271
 msgid "Set the filter, e.g. installed"
-msgstr "设置过滤器 已安装过的"
+msgstr "设置过滤器,如:已装"
+
+#. TRANSLATORS: command line argument, use a non-standard install prefix
+#: ../client/pk-console.c:1274
+msgid "Set the install root, e.g. '/' or '/mnt/ltsp'"
+msgstr ""
 
 #. TRANSLATORS: command line argument, work asynchronously
-#: ../client/pk-console.c:1250
+#: ../client/pk-console.c:1277
 msgid "Exit without waiting for actions to complete"
 msgstr ""
 
 #. command line argument, do we ask questions
-#: ../client/pk-console.c:1253
+#: ../client/pk-console.c:1280
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:527
 msgid "Install the packages without asking for confirmation"
 msgstr ""
 
 #. TRANSLATORS: command line argument, this command is not a priority
-#: ../client/pk-console.c:1256
+#: ../client/pk-console.c:1283
 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:1259
-msgid "Print to screen a machine readable output, rather than using animated widgets"
+#: ../client/pk-console.c:1286
+msgid ""
+"Print to screen a machine readable output, rather than using animated widgets"
 msgstr ""
 
 #. TRANSLATORS: we failed to contact the daemon
-#: ../client/pk-console.c:1281
+#: ../client/pk-console.c:1308
 msgid "Failed to contact PackageKit"
 msgstr ""
 
 #. TRANSLATORS: The user specified an incorrect filter
-#: ../client/pk-console.c:1339
+#: ../client/pk-console.c:1369
+msgid "The proxy could not be set"
+msgstr ""
+
+#. TRANSLATORS: The user specified an incorrect filter
+#: ../client/pk-console.c:1381
+msgid "The install root could not be set"
+msgstr ""
+
+#. TRANSLATORS: The user specified an incorrect filter
+#: ../client/pk-console.c:1393
 msgid "The filter specified was invalid"
 msgstr ""
 
 #. TRANSLATORS: a search type can be name, details, file, etc
-#: ../client/pk-console.c:1358
+#: ../client/pk-console.c:1412
 msgid "A search type is required, e.g. name"
 msgstr ""
 
 #. TRANSLATORS: the user needs to provide a search term
-#: ../client/pk-console.c:1365
-#: ../client/pk-console.c:1377
-#: ../client/pk-console.c:1389
-#: ../client/pk-console.c:1401
+#: ../client/pk-console.c:1419 ../client/pk-console.c:1431
+#: ../client/pk-console.c:1443 ../client/pk-console.c:1455
 msgid "A search term is required"
 msgstr ""
 
 #. TRANSLATORS: the search type was provided, but invalid
-#: ../client/pk-console.c:1411
+#: ../client/pk-console.c:1465
 msgid "Invalid search type"
 msgstr ""
 
 #. TRANSLATORS: the user did not specify what they wanted to install
-#: ../client/pk-console.c:1417
+#: ../client/pk-console.c:1471
 msgid "A package name to install is required"
 msgstr ""
 
 #. TRANSLATORS: the user did not specify what they wanted to install
-#: ../client/pk-console.c:1426
+#: ../client/pk-console.c:1480
 msgid "A filename to install is required"
 msgstr ""
 
 #. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:1438
+#: ../client/pk-console.c:1492
 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:1449
+#: ../client/pk-console.c:1503
 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:1458
+#: ../client/pk-console.c:1512
 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:1465
+#: ../client/pk-console.c:1519
 msgid "Directory not found"
-msgstr "目录未能找到"
+msgstr "目录没找到"
 
 #. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:1474
+#: ../client/pk-console.c:1528
 msgid "A licence identifier (eula-id) is required"
 msgstr ""
 
 #. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:1485
+#: ../client/pk-console.c:1539
 msgid "A transaction identifier (tid) is required"
 msgstr ""
 
 #. TRANSLATORS: The user did not specify a package name
-#: ../client/pk-console.c:1506
+#: ../client/pk-console.c:1560
 msgid "A package name to resolve is required"
 msgstr ""
 
 #. TRANSLATORS: The user did not specify a repository (software source) name
-#: ../client/pk-console.c:1517
-#: ../client/pk-console.c:1528
+#: ../client/pk-console.c:1571 ../client/pk-console.c:1582
 msgid "A repository name is required"
 msgstr ""
 
 #. TRANSLATORS: The user didn't provide any data
-#: ../client/pk-console.c:1539
+#: ../client/pk-console.c:1593
 msgid "A repo name, parameter and value are required"
 msgstr ""
 
 #. TRANSLATORS: The user didn't specify what action to use
-#: ../client/pk-console.c:1556
+#: ../client/pk-console.c:1610
 msgid "An action, e.g. 'update-system' is required"
 msgstr ""
 
 #. TRANSLATORS: The user specified an invalid action
-#: ../client/pk-console.c:1563
+#: ../client/pk-console.c:1617
 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:1573
-#: ../client/pk-console.c:1588
-#: ../client/pk-console.c:1597
-#: ../client/pk-console.c:1617
-#: ../client/pk-console.c:1626
-#: ../client/pk-generate-pack.c:298
+#: ../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
 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:1606
+#: ../client/pk-console.c:1660
 msgid "A package provide string is required"
 msgstr ""
 
 #. TRANSLATORS: The user tried to use an unsupported option on the command line
-#: ../client/pk-console.c:1686
+#: ../client/pk-console.c:1741
 #, c-format
 msgid "Option '%s' is not supported"
 msgstr ""
 
 #. TRANSLATORS: Generic failure of what they asked to do
-#: ../client/pk-console.c:1696
+#: ../client/pk-console.c:1751
 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:237
+#: ../client/pk-generate-pack.c:255
 msgid "Set the file name of dependencies to be excluded"
 msgstr ""
 
 #. TRANSLATORS: the output location
-#: ../client/pk-generate-pack.c:240
-msgid "The output file or directory (the current directory is used if ommitted)"
+#: ../client/pk-generate-pack.c:258
+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:243
+#: ../client/pk-generate-pack.c:261
 msgid "The package to be put into the service pack"
 msgstr ""
 
 #. TRANSLATORS: put all pending updates in the pack
-#: ../client/pk-generate-pack.c:246
+#: ../client/pk-generate-pack.c:264
 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:282
+#: ../client/pk-generate-pack.c:300
 msgid "Neither --package or --updates option selected."
 msgstr ""
 
 #. TRANSLATORS: This is when the user fails to supply just one argument
-#: ../client/pk-generate-pack.c:290
+#: ../client/pk-generate-pack.c:308
 msgid "Both options selected."
 msgstr ""
 
 #. TRANSLATORS: This is when the user fails to supply the output
-#: ../client/pk-generate-pack.c:306
+#: ../client/pk-generate-pack.c:324
 msgid "A output directory or file name is required"
 msgstr ""
 
-#. TRANSLATORS: This is when the dameon is not-installed/broken and fails to startup
-#: ../client/pk-generate-pack.c:324
-msgid "The dameon failed to startup"
-msgstr ""
+#. TRANSLATORS: This is when the daemon is not-installed/broken and fails to startup
+#: ../client/pk-generate-pack.c:342
+#, fuzzy
+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:335
-#: ../client/pk-generate-pack.c:341
+#: ../client/pk-generate-pack.c:353 ../client/pk-generate-pack.c:359
 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:348
-msgid "Service packs cannot be created as PackageKit was not built with libarchive support."
+#: ../client/pk-generate-pack.c:366
+msgid ""
+"Service packs cannot be created as PackageKit was not built with libarchive "
+"support."
 msgstr ""
 
 #. TRANSLATORS: the user specified an absolute path, but didn't get the extension correct
-#: ../client/pk-generate-pack.c:359
+#: ../client/pk-generate-pack.c:377
 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:375
+#: ../client/pk-generate-pack.c:393
 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:378
+#: ../client/pk-generate-pack.c:396
 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:391
+#: ../client/pk-generate-pack.c:409
 msgid "Failed to create directory:"
-msgstr "创建文件夹失败"
+msgstr "该目录创建失败:"
 
 #. TRANSLATORS: This is when the list of packages from the remote computer cannot be opened
-#: ../client/pk-generate-pack.c:403
+#: ../client/pk-generate-pack.c:421
 msgid "Failed to open package list."
 msgstr ""
 
 #. TRANSLATORS: The package name is being matched up to available packages
-#: ../client/pk-generate-pack.c:412
+#: ../client/pk-generate-pack.c:430
 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:416
+#: ../client/pk-generate-pack.c:434
 #, c-format
 msgid "Failed to find package '%s': %s"
 msgstr ""
 
 #. TRANSLATORS: This is telling the user we are in the process of making the pack
-#: ../client/pk-generate-pack.c:424
+#: ../client/pk-generate-pack.c:442
 msgid "Creating service pack..."
 msgstr ""
 
 #. TRANSLATORS: we succeeded in making the file
-#: ../client/pk-generate-pack.c:439
+#: ../client/pk-generate-pack.c:457
 #, c-format
 msgid "Service pack created '%s'"
 msgstr ""
 
 #. TRANSLATORS: we failed to make te file
-#: ../client/pk-generate-pack.c:444
+#: ../client/pk-generate-pack.c:462
 #, c-format
 msgid "Failed to create '%s': %s"
-msgstr "创建 '%s': %s 失败"
+msgstr "“%s”文件创建失败:%s"
 
-#: ../client/pk-monitor.c:210
+#: ../client/pk-monitor.c:286
 msgid "Failed to get daemon state"
-msgstr "获取守程序护状态失败"
+msgstr "守护进程状态获取失败"
 
 #. TRANSLATORS: this is a program that monitors PackageKit
-#: ../client/pk-monitor.c:296
+#: ../client/pk-monitor.c:372
 msgid "PackageKit Monitor"
 msgstr ""
 
 #. TRANSLATORS: when we are getting data from the daemon
-#: ../contrib/browser-plugin/pk-plugin-install.c:495
+#: ../contrib/browser-plugin/pk-plugin-install.c:497
 msgid "Getting package information..."
 msgstr ""
 
 #. TRANSLATORS: run an applicaiton
-#: ../contrib/browser-plugin/pk-plugin-install.c:501
+#: ../contrib/browser-plugin/pk-plugin-install.c:503
 #, c-format
 msgid "Run %s"
 msgstr ""
 
 #. TRANSLATORS: show the installed version of a package
-#: ../contrib/browser-plugin/pk-plugin-install.c:507
+#: ../contrib/browser-plugin/pk-plugin-install.c:509
 msgid "Installed version"
 msgstr ""
 
 #. TRANSLATORS: run the application now
-#: ../contrib/browser-plugin/pk-plugin-install.c:515
+#: ../contrib/browser-plugin/pk-plugin-install.c:517
 #, c-format
 msgid "Run version %s now"
 msgstr ""
 
 #. TRANSLATORS: run the application now
-#: ../contrib/browser-plugin/pk-plugin-install.c:521
+#: ../contrib/browser-plugin/pk-plugin-install.c:523
 msgid "Run now"
-msgstr "马上运行"
+msgstr "现在运行"
 
 #. TRANSLATORS: update to a new version of the package
-#: ../contrib/browser-plugin/pk-plugin-install.c:527
+#: ../contrib/browser-plugin/pk-plugin-install.c:529
 #, c-format
 msgid "Update to version %s"
-msgstr "更新到 %s"
+msgstr "更新到版本 %s"
 
 #. TRANSLATORS: To install a package
-#: ../contrib/browser-plugin/pk-plugin-install.c:533
+#: ../contrib/browser-plugin/pk-plugin-install.c:535
 #, c-format
 msgid "Install %s now"
-msgstr "现在已安装 %s"
+msgstr "现在安装 %s"
 
 #. TRANSLATORS: the version of the package
-#: ../contrib/browser-plugin/pk-plugin-install.c:536
+#: ../contrib/browser-plugin/pk-plugin-install.c:538
 msgid "Version"
 msgstr "版本"
 
 #. TRANSLATORS: noting found, so can't install
-#: ../contrib/browser-plugin/pk-plugin-install.c:541
+#: ../contrib/browser-plugin/pk-plugin-install.c:543
 msgid "No packages found for your system"
 msgstr ""
 
 #. TRANSLATORS: package is being installed
-#: ../contrib/browser-plugin/pk-plugin-install.c:546
+#: ../contrib/browser-plugin/pk-plugin-install.c:548
 msgid "Installing..."
-msgstr "正在安装……"
+msgstr "安装中……"
 
 #. TRANSLATORS: downloading repo data so we can search
-#: ../contrib/command-not-found/pk-command-not-found.c:365
+#: ../contrib/command-not-found/pk-command-not-found.c:367
 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:369
+#: ../contrib/command-not-found/pk-command-not-found.c:371
 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:373
+#: ../contrib/command-not-found/pk-command-not-found.c:375
 msgid "Waiting for package manager lock."
 msgstr ""
 
 #. TRANSLATORS: loading package cache so we can search
-#: ../contrib/command-not-found/pk-command-not-found.c:377
+#: ../contrib/command-not-found/pk-command-not-found.c:379
 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:423
+#: ../contrib/command-not-found/pk-command-not-found.c:445
 msgid "Failed to search for file"
-msgstr "搜索文件失败"
+msgstr "文件搜索失败"
 
 #. TRANSLATORS: we failed to launch the executable, the error follows
-#: ../contrib/command-not-found/pk-command-not-found.c:566
+#: ../contrib/command-not-found/pk-command-not-found.c:597
 msgid "Failed to launch:"
 msgstr "启动失败:"
 
 #. TRANSLATORS: we failed to install the package
-#: ../contrib/command-not-found/pk-command-not-found.c:594
+#: ../contrib/command-not-found/pk-command-not-found.c:625
 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:670
+#: ../contrib/command-not-found/pk-command-not-found.c:701
 msgid "PackageKit Command Not Found"
 msgstr ""
 
 #. TRANSLATORS: the prefix of all the output telling the user why it's not executing
-#: ../contrib/command-not-found/pk-command-not-found.c:699
+#: ../contrib/command-not-found/pk-command-not-found.c:727
 msgid "Command not found."
-msgstr "命令没有找到"
+msgstr "命令没找到。"
 
 #. TRANSLATORS: tell the user what we think the command is
-#: ../contrib/command-not-found/pk-command-not-found.c:706
+#: ../contrib/command-not-found/pk-command-not-found.c:745
 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:716
+#: ../contrib/command-not-found/pk-command-not-found.c:755
 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:730
-#: ../contrib/command-not-found/pk-command-not-found.c:739
+#: ../contrib/command-not-found/pk-command-not-found.c:769
+#: ../contrib/command-not-found/pk-command-not-found.c:778
 msgid "Similar commands are:"
 msgstr ""
 
 #. TRANSLATORS: ask the user to choose a file to run
-#: ../contrib/command-not-found/pk-command-not-found.c:746
+#: ../contrib/command-not-found/pk-command-not-found.c:785
 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:764
+#: ../contrib/command-not-found/pk-command-not-found.c:803
 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:769
+#: ../contrib/command-not-found/pk-command-not-found.c:808
 #, c-format
 msgid "Install package '%s' to provide command '%s'?"
 msgstr ""
 
 #. TRANSLATORS: Show the user a list of packages that provide this command
-#: ../contrib/command-not-found/pk-command-not-found.c:793
+#: ../contrib/command-not-found/pk-command-not-found.c:832
 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:803
+#: ../contrib/command-not-found/pk-command-not-found.c:842
 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:812
+#: ../contrib/command-not-found/pk-command-not-found.c:851
 msgid "Please choose a package to install"
 msgstr ""
 
@@ -796,7 +816,8 @@ msgstr ""
 
 #. 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"
+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
@@ -824,7 +845,7 @@ msgstr ""
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:592
 #, c-format
 msgid "Getting sources list"
-msgstr "获取资源列表"
+msgstr "获取软件源清单"
 
 #. TRANSLATORS: operation was not successful
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:602
@@ -834,7 +855,7 @@ msgstr "获取资源列表"
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:872
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:916
 msgid "FAILED."
-msgstr "失败"
+msgstr "失败。"
 
 #. TRANSLATORS: all completed 100%
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:617
@@ -846,7 +867,7 @@ msgstr "失败"
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:931
 #, c-format
 msgid "OK."
-msgstr "完成"
+msgstr "完成。"
 
 #. TRANSLATORS: tell the user what we found
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:620
@@ -947,7 +968,7 @@ 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:282
+#: ../lib/packagekit-glib2/pk-console-shared.c:289
 #, c-format
 msgid "Installing packages"
 msgstr ""
@@ -979,18 +1000,18 @@ msgstr ""
 #. TRANSLATORS: couldn't open device to write
 #: ../contrib/device-rebind/pk-device-rebind.c:62
 msgid "Failed to open file"
-msgstr "打开文件失败"
+msgstr "文件打开失败"
 
 #. TRANSLATORS: could not write to the device
 #: ../contrib/device-rebind/pk-device-rebind.c:71
 msgid "Failed to write to the file"
-msgstr "写入文件失败"
+msgstr "文件写入失败"
 
 #. 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 "写入设备失败"
+msgstr "设备写入失败"
 
 #. TRANSLATORS: the device could not be found in sysfs
 #: ../contrib/device-rebind/pk-device-rebind.c:176
@@ -1005,7 +1026,7 @@ msgstr ""
 #. TRANSLATORS: we failed to bind the old driver
 #: ../contrib/device-rebind/pk-device-rebind.c:212
 msgid "Failed to register driver"
-msgstr "注册驱动失败"
+msgstr "驱动程序注册失败"
 
 #. TRANSLATORS: user did not specify a device sysfs path that exists
 #: ../contrib/device-rebind/pk-device-rebind.c:261
@@ -1078,464 +1099,464 @@ msgstr ""
 msgid "PackageKit Service Pack"
 msgstr ""
 
-#: ../lib/packagekit-glib2/pk-console-shared.c:59
+#: ../lib/packagekit-glib2/pk-console-shared.c:65
 #, c-format
 msgid "Please enter a number from 1 to %i: "
 msgstr ""
 
 #. 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:183
+#: ../lib/packagekit-glib2/pk-console-shared.c:191
 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:196
+#: ../lib/packagekit-glib2/pk-console-shared.c:202
 msgid "Please choose the correct package: "
 msgstr ""
 
 #. TRANSLATORS: This is when the transaction status is not known
-#: ../lib/packagekit-glib2/pk-console-shared.c:250
+#: ../lib/packagekit-glib2/pk-console-shared.c:257
 msgid "Unknown state"
 msgstr "未知状态"
 
 #. TRANSLATORS: transaction state, the daemon is in the process of starting
-#: ../lib/packagekit-glib2/pk-console-shared.c:254
+#: ../lib/packagekit-glib2/pk-console-shared.c:261
 msgid "Starting"
-msgstr "正在开始"
+msgstr "启动中"
 
 #. TRANSLATORS: transaction state, the transaction is waiting for another to complete
-#: ../lib/packagekit-glib2/pk-console-shared.c:258
+#: ../lib/packagekit-glib2/pk-console-shared.c:265
 msgid "Waiting in queue"
-msgstr "队列等待"
+msgstr "在队列中等待中"
 
 #. TRANSLATORS: transaction state, just started
-#: ../lib/packagekit-glib2/pk-console-shared.c:262
+#: ../lib/packagekit-glib2/pk-console-shared.c:269
 msgid "Running"
-msgstr "正在运行"
+msgstr "运行中"
 
 #. TRANSLATORS: transaction state, is querying data
-#: ../lib/packagekit-glib2/pk-console-shared.c:266
+#: ../lib/packagekit-glib2/pk-console-shared.c:273
 msgid "Querying"
-msgstr "查询"
+msgstr "查询中"
 
 #. TRANSLATORS: transaction state, getting data from a server
-#: ../lib/packagekit-glib2/pk-console-shared.c:270
+#: ../lib/packagekit-glib2/pk-console-shared.c:277
 msgid "Getting information"
 msgstr ""
 
 #. TRANSLATORS: transaction state, removing packages
-#: ../lib/packagekit-glib2/pk-console-shared.c:274
+#: ../lib/packagekit-glib2/pk-console-shared.c:281
 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:278
-#: ../lib/packagekit-glib2/pk-console-shared.c:656
+#: ../lib/packagekit-glib2/pk-console-shared.c:285
+#: ../lib/packagekit-glib2/pk-console-shared.c:663
 msgid "Downloading packages"
 msgstr ""
 
 #. TRANSLATORS: transaction state, refreshing internal lists
-#: ../lib/packagekit-glib2/pk-console-shared.c:286
+#: ../lib/packagekit-glib2/pk-console-shared.c:293
 msgid "Refreshing software list"
 msgstr ""
 
 #. TRANSLATORS: transaction state, installing updates
-#: ../lib/packagekit-glib2/pk-console-shared.c:290
+#: ../lib/packagekit-glib2/pk-console-shared.c:297
 msgid "Installing updates"
-msgstr "正在安装更新"
+msgstr "更新安装中"
 
 #. TRANSLATORS: transaction state, removing old packages, and cleaning config files
-#: ../lib/packagekit-glib2/pk-console-shared.c:294
+#: ../lib/packagekit-glib2/pk-console-shared.c:301
 msgid "Cleaning up packages"
 msgstr ""
 
 #. TRANSLATORS: transaction state, obsoleting old packages
-#: ../lib/packagekit-glib2/pk-console-shared.c:298
+#: ../lib/packagekit-glib2/pk-console-shared.c:305
 msgid "Obsoleting packages"
 msgstr ""
 
 #. TRANSLATORS: transaction state, checking the transaction before we do it
-#: ../lib/packagekit-glib2/pk-console-shared.c:302
+#: ../lib/packagekit-glib2/pk-console-shared.c:309
 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:306
+#: ../lib/packagekit-glib2/pk-console-shared.c:313
 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:310
-#: ../lib/packagekit-glib2/pk-console-shared.c:616
+#: ../lib/packagekit-glib2/pk-console-shared.c:317
+#: ../lib/packagekit-glib2/pk-console-shared.c:623
 msgid "Rolling back"
-msgstr "回滚"
+msgstr "回滚中"
 
 #. TRANSLATORS: transaction state, when we're doing a test transaction
-#: ../lib/packagekit-glib2/pk-console-shared.c:314
+#: ../lib/packagekit-glib2/pk-console-shared.c:321
 msgid "Testing changes"
 msgstr ""
 
 #. TRANSLATORS: transaction state, when we're writing to the system package database
-#: ../lib/packagekit-glib2/pk-console-shared.c:318
+#: ../lib/packagekit-glib2/pk-console-shared.c:325
 msgid "Committing changes"
 msgstr ""
 
 #. TRANSLATORS: transaction state, requesting data from a server
-#: ../lib/packagekit-glib2/pk-console-shared.c:322
+#: ../lib/packagekit-glib2/pk-console-shared.c:329
 msgid "Requesting data"
 msgstr ""
 
 #. TRANSLATORS: transaction state, all done!
-#: ../lib/packagekit-glib2/pk-console-shared.c:326
+#: ../lib/packagekit-glib2/pk-console-shared.c:333
 msgid "Finished"
-msgstr "结束"
+msgstr "已结束"
 
 #. TRANSLATORS: transaction state, in the process of cancelling
-#: ../lib/packagekit-glib2/pk-console-shared.c:330
+#: ../lib/packagekit-glib2/pk-console-shared.c:337
 msgid "Cancelling"
 msgstr ""
 
 #. TRANSLATORS: transaction state, downloading metadata
-#: ../lib/packagekit-glib2/pk-console-shared.c:334
+#: ../lib/packagekit-glib2/pk-console-shared.c:341
 msgid "Downloading repository information"
 msgstr ""
 
 #. TRANSLATORS: transaction state, downloading metadata
-#: ../lib/packagekit-glib2/pk-console-shared.c:338
+#: ../lib/packagekit-glib2/pk-console-shared.c:345
 msgid "Downloading list of packages"
 msgstr ""
 
 #. TRANSLATORS: transaction state, downloading metadata
-#: ../lib/packagekit-glib2/pk-console-shared.c:342
+#: ../lib/packagekit-glib2/pk-console-shared.c:349
 msgid "Downloading file lists"
 msgstr ""
 
 #. TRANSLATORS: transaction state, downloading metadata
-#: ../lib/packagekit-glib2/pk-console-shared.c:346
+#: ../lib/packagekit-glib2/pk-console-shared.c:353
 msgid "Downloading lists of changes"
 msgstr ""
 
 #. TRANSLATORS: transaction state, downloading metadata
-#: ../lib/packagekit-glib2/pk-console-shared.c:350
+#: ../lib/packagekit-glib2/pk-console-shared.c:357
 msgid "Downloading groups"
 msgstr ""
 
 #. TRANSLATORS: transaction state, downloading metadata
-#: ../lib/packagekit-glib2/pk-console-shared.c:354
+#: ../lib/packagekit-glib2/pk-console-shared.c:361
 msgid "Downloading update information"
 msgstr ""
 
 #. TRANSLATORS: transaction state, repackaging delta files
-#: ../lib/packagekit-glib2/pk-console-shared.c:358
+#: ../lib/packagekit-glib2/pk-console-shared.c:365
 msgid "Repackaging files"
 msgstr ""
 
 #. TRANSLATORS: transaction state, loading databases
-#: ../lib/packagekit-glib2/pk-console-shared.c:362
+#: ../lib/packagekit-glib2/pk-console-shared.c:369
 msgid "Loading cache"
 msgstr ""
 
 #. TRANSLATORS: transaction state, scanning for running processes
-#: ../lib/packagekit-glib2/pk-console-shared.c:366
+#: ../lib/packagekit-glib2/pk-console-shared.c:373
 msgid "Scanning applications"
 msgstr ""
 
 #. TRANSLATORS: transaction state, generating a list of packages installed on the system
-#: ../lib/packagekit-glib2/pk-console-shared.c:370
+#: ../lib/packagekit-glib2/pk-console-shared.c:377
 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:374
+#: ../lib/packagekit-glib2/pk-console-shared.c:381
 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:378
+#: ../lib/packagekit-glib2/pk-console-shared.c:385
 msgid "Waiting for authentication"
 msgstr ""
 
 #. TRANSLATORS: transaction state, we are updating the list of processes
-#: ../lib/packagekit-glib2/pk-console-shared.c:382
+#: ../lib/packagekit-glib2/pk-console-shared.c:389
 msgid "Updating running applications"
 msgstr ""
 
 #. TRANSLATORS: transaction state, we are checking executable files currently in use
-#: ../lib/packagekit-glib2/pk-console-shared.c:386
+#: ../lib/packagekit-glib2/pk-console-shared.c:393
 msgid "Checking applications in use"
 msgstr ""
 
 #. TRANSLATORS: transaction state, we are checking for libraries currently in use
-#: ../lib/packagekit-glib2/pk-console-shared.c:390
+#: ../lib/packagekit-glib2/pk-console-shared.c:397
 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:394
+#: ../lib/packagekit-glib2/pk-console-shared.c:401
 msgid "Copying files"
-msgstr "拷贝文件"
+msgstr "文件复制中"
 
 #. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:412
+#: ../lib/packagekit-glib2/pk-console-shared.c:419
 msgid "Trivial"
 msgstr ""
 
 #. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:416
+#: ../lib/packagekit-glib2/pk-console-shared.c:423
 msgid "Normal"
 msgstr "普通"
 
 #. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:420
+#: ../lib/packagekit-glib2/pk-console-shared.c:427
 msgid "Important"
-msgstr "重要的"
+msgstr "重要"
 
 #. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:424
+#: ../lib/packagekit-glib2/pk-console-shared.c:431
 msgid "Security"
 msgstr "安全"
 
 #. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:428
+#: ../lib/packagekit-glib2/pk-console-shared.c:435
 msgid "Bug fix "
-msgstr "Bug 修复"
+msgstr "缺陷修复"
 
 #. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:432
+#: ../lib/packagekit-glib2/pk-console-shared.c:439
 msgid "Enhancement"
 msgstr "增强"
 
 #. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:436
+#: ../lib/packagekit-glib2/pk-console-shared.c:443
 msgid "Blocked"
-msgstr ""
+msgstr "屏蔽"
 
 #. TRANSLATORS: The state of a package
 #. TRANSLATORS: The action of the package, in past tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:441
-#: ../lib/packagekit-glib2/pk-console-shared.c:514
+#: ../lib/packagekit-glib2/pk-console-shared.c:448
+#: ../lib/packagekit-glib2/pk-console-shared.c:521
 msgid "Installed"
 msgstr "已安装"
 
 #. TRANSLATORS: The state of a package, i.e. not installed
-#: ../lib/packagekit-glib2/pk-console-shared.c:446
+#: ../lib/packagekit-glib2/pk-console-shared.c:453
 msgid "Available"
-msgstr ""
+msgstr "可装"
 
 #. TRANSLATORS: The action of the package, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:464
+#: ../lib/packagekit-glib2/pk-console-shared.c:471
 msgid "Downloading"
 msgstr "正在下载"
 
 #. TRANSLATORS: The action of the package, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:468
+#: ../lib/packagekit-glib2/pk-console-shared.c:475
 msgid "Updating"
-msgstr ""
+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:472
-#: ../lib/packagekit-glib2/pk-console-shared.c:592
+#: ../lib/packagekit-glib2/pk-console-shared.c:479
+#: ../lib/packagekit-glib2/pk-console-shared.c:599
 msgid "Installing"
-msgstr ""
+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:476
-#: ../lib/packagekit-glib2/pk-console-shared.c:588
+#: ../lib/packagekit-glib2/pk-console-shared.c:483
+#: ../lib/packagekit-glib2/pk-console-shared.c:595
 msgid "Removing"
-msgstr "移除"
+msgstr "删除中"
 
 #. TRANSLATORS: The action of the package, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:480
+#: ../lib/packagekit-glib2/pk-console-shared.c:487
 msgid "Cleaning up"
 msgstr ""
 
 #. TRANSLATORS: The action of the package, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:484
+#: ../lib/packagekit-glib2/pk-console-shared.c:491
 msgid "Obsoleting"
-msgstr ""
+msgstr "废弃中"
 
 #. TRANSLATORS: The action of the package, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:488
+#: ../lib/packagekit-glib2/pk-console-shared.c:495
 msgid "Reinstalling"
-msgstr ""
+msgstr "重装中"
 
 #. TRANSLATORS: The action of the package, in past tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:506
+#: ../lib/packagekit-glib2/pk-console-shared.c:513
 msgid "Downloaded"
-msgstr "已下载"
+msgstr "下载"
 
 #. TRANSLATORS: The action of the package, in past tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:518
+#: ../lib/packagekit-glib2/pk-console-shared.c:525
 msgid "Removed"
-msgstr "已经移除"
+msgstr "移除"
 
 #. TRANSLATORS: The action of the package, in past tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:522
+#: ../lib/packagekit-glib2/pk-console-shared.c:529
 msgid "Cleaned up"
 msgstr "清理"
 
 #. TRANSLATORS: The action of the package, in past tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:526
+#: ../lib/packagekit-glib2/pk-console-shared.c:533
 msgid "Obsoleted"
-msgstr ""
+msgstr "废弃"
 
 #. TRANSLATORS: The action of the package, in past tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:530
+#: ../lib/packagekit-glib2/pk-console-shared.c:537
 msgid "Reinstalled"
 msgstr ""
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:548
+#: ../lib/packagekit-glib2/pk-console-shared.c:555
 msgid "Unknown role type"
-msgstr "未知任务类型"
+msgstr "未知角色类型"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:552
+#: ../lib/packagekit-glib2/pk-console-shared.c:559
 msgid "Getting dependencies"
 msgstr ""
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:556
+#: ../lib/packagekit-glib2/pk-console-shared.c:563
 msgid "Getting update details"
 msgstr ""
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:560
+#: ../lib/packagekit-glib2/pk-console-shared.c:567
 msgid "Getting details"
 msgstr ""
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:564
+#: ../lib/packagekit-glib2/pk-console-shared.c:571
 msgid "Getting requires"
 msgstr ""
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:568
+#: ../lib/packagekit-glib2/pk-console-shared.c:575
 msgid "Getting updates"
 msgstr ""
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:572
+#: ../lib/packagekit-glib2/pk-console-shared.c:579
 msgid "Searching by details"
 msgstr ""
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:576
+#: ../lib/packagekit-glib2/pk-console-shared.c:583
 msgid "Searching by file"
 msgstr ""
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:580
+#: ../lib/packagekit-glib2/pk-console-shared.c:587
 msgid "Searching groups"
 msgstr ""
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:584
+#: ../lib/packagekit-glib2/pk-console-shared.c:591
 msgid "Searching by name"
 msgstr ""
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:596
+#: ../lib/packagekit-glib2/pk-console-shared.c:603
 msgid "Installing files"
-msgstr "正在安装文件"
+msgstr "文件安装中"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:600
+#: ../lib/packagekit-glib2/pk-console-shared.c:607
 msgid "Refreshing cache"
 msgstr ""
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:604
+#: ../lib/packagekit-glib2/pk-console-shared.c:611
 msgid "Updating packages"
-msgstr ""
+msgstr "包更新中"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:608
+#: ../lib/packagekit-glib2/pk-console-shared.c:615
 msgid "Updating system"
-msgstr "更新系统"
+msgstr "系统更新中"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:612
+#: ../lib/packagekit-glib2/pk-console-shared.c:619
 msgid "Canceling"
-msgstr "正在取消"
+msgstr "取消中"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:620
+#: ../lib/packagekit-glib2/pk-console-shared.c:627
 msgid "Getting repositories"
 msgstr ""
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:624
+#: ../lib/packagekit-glib2/pk-console-shared.c:631
 msgid "Enabling repository"
 msgstr ""
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:628
+#: ../lib/packagekit-glib2/pk-console-shared.c:635
 msgid "Setting data"
-msgstr "配置数据"
+msgstr "数据设置中"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:632
+#: ../lib/packagekit-glib2/pk-console-shared.c:639
 msgid "Resolving"
-msgstr "解决"
+msgstr "解析中"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:636
+#: ../lib/packagekit-glib2/pk-console-shared.c:643
 msgid "Getting file list"
-msgstr "获得文件列表"
+msgstr "文件清单获取中"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:640
+#: ../lib/packagekit-glib2/pk-console-shared.c:647
 msgid "Getting provides"
-msgstr "获得提供者"
+msgstr "提供信息(provides)获取中"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:644
+#: ../lib/packagekit-glib2/pk-console-shared.c:651
 msgid "Installing signature"
 msgstr ""
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:648
+#: ../lib/packagekit-glib2/pk-console-shared.c:655
 msgid "Getting packages"
-msgstr "获取包"
+msgstr "包获取中"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:652
+#: ../lib/packagekit-glib2/pk-console-shared.c:659
 msgid "Accepting EULA"
 msgstr ""
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:660
+#: ../lib/packagekit-glib2/pk-console-shared.c:667
 msgid "Getting upgrades"
-msgstr "开始升级"
+msgstr "升级包获取中"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:664
+#: ../lib/packagekit-glib2/pk-console-shared.c:671
 msgid "Getting categories"
 msgstr ""
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:668
+#: ../lib/packagekit-glib2/pk-console-shared.c:675
 msgid "Getting transactions"
 msgstr ""
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:672
-#: ../lib/packagekit-glib2/pk-console-shared.c:676
+#: ../lib/packagekit-glib2/pk-console-shared.c:679
+#: ../lib/packagekit-glib2/pk-console-shared.c:683
 msgid "Simulating install"
 msgstr ""
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:680
+#: ../lib/packagekit-glib2/pk-console-shared.c:687
 msgid "Simulating remove"
 msgstr ""
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:684
+#: ../lib/packagekit-glib2/pk-console-shared.c:691
 msgid "Simulating update"
 msgstr ""
 
@@ -1562,17 +1583,17 @@ msgstr ""
 #. TRANSLATORS: the key URL
 #: ../lib/packagekit-glib2/pk-task-text.c:132
 msgid "Key URL"
-msgstr ""
+msgstr "密钥地址(URL)"
 
 #. TRANSLATORS: the username of the key
 #: ../lib/packagekit-glib2/pk-task-text.c:135
 msgid "Key user"
-msgstr ""
+msgstr "密钥用户"
 
 #. TRANSLATORS: the key ID, usually a few hex digits
 #: ../lib/packagekit-glib2/pk-task-text.c:138
 msgid "Key ID"
-msgstr ""
+msgstr "密钥编号"
 
 #. TRANSLATORS: the key fingerprint, again, yet more hex
 #: ../lib/packagekit-glib2/pk-task-text.c:141
@@ -1592,7 +1613,7 @@ msgstr ""
 #. TRANSLATORS: tell the user we've not done anything
 #: ../lib/packagekit-glib2/pk-task-text.c:162
 msgid "The signature was not accepted."
-msgstr ""
+msgstr "\t\t\t"
 
 #. TRANSLATORS: this is another name for a software licence that has to be read before installing
 #: ../lib/packagekit-glib2/pk-task-text.c:205
@@ -1602,7 +1623,7 @@ msgstr ""
 #. TRANSLATORS: the EULA text itself (long and boring)
 #: ../lib/packagekit-glib2/pk-task-text.c:214
 msgid "Agreement"
-msgstr "同意"
+msgstr "协议"
 
 #. TRANSLATORS: ask the user if they've read and accepted the EULA
 #: ../lib/packagekit-glib2/pk-task-text.c:223
@@ -1622,17 +1643,17 @@ msgstr ""
 #. TRANSLATORS: the type, e.g. DVD, CD, etc
 #: ../lib/packagekit-glib2/pk-task-text.c:270
 msgid "Media type"
-msgstr "媒体类型"
+msgstr "介质类型"
 
 #. TRANSLATORS: the media label, usually like 'disk-1of3'
 #: ../lib/packagekit-glib2/pk-task-text.c:273
 msgid "Media label"
-msgstr "媒体标签"
+msgstr "介质标签"
 
 #. TRANSLATORS: the media description, usually like 'Fedora 12 disk 5'
 #: ../lib/packagekit-glib2/pk-task-text.c:276
 msgid "Text"
-msgstr ""
+msgstr "描述"
 
 #. TRANSLATORS: ask the user to insert the media
 #: ../lib/packagekit-glib2/pk-task-text.c:282
@@ -1694,7 +1715,8 @@ 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
@@ -1702,38 +1724,47 @@ msgid "Authentication is required to change software source parameters"
 msgstr ""
 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:11
-msgid "Authentication is required to consider a key used for signing packages as trusted"
+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 install a signed package"
+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 an untrusted package"
+msgid "Authentication is required to install a signed package"
 msgstr ""
 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:14
-msgid "Authentication is required to refresh the system sources"
+msgid "Authentication is required to install an untrusted package"
 msgstr ""
 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:15
-msgid "Authentication is required to reload the device with a new driver"
+msgid "Authentication is required to refresh the system sources"
 msgstr ""
 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:16
-msgid "Authentication is required to remove packages"
+msgid "Authentication is required to reload the device with a new driver"
 msgstr ""
 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:17
-msgid "Authentication is required to rollback a transaction"
+msgid "Authentication is required to remove packages"
 msgstr ""
 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:18
-msgid "Authentication is required to set the network proxy used for downloading packages"
+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 ""
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:20
 msgid "Authentication is required to update packages"
 msgstr ""
 
@@ -1742,16 +1773,26 @@ msgstr ""
 #. authentication, but a different user id needs the admin password
 #. to cancel another users task.
 #.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:25
+#: ../policy/org.freedesktop.packagekit.policy.in.h:26
 msgid "Cancel foreign task"
 msgstr ""
 
 #. 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:33
+msgid "Change location that packages are installed"
+msgstr ""
+
+#. 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:31
+#: ../policy/org.freedesktop.packagekit.policy.in.h:39
 msgid "Change software source parameters"
 msgstr ""
 
@@ -1761,9 +1802,9 @@ msgstr ""
 #. - Paranoid users (or parents!) can change this to 'auth_admin' or
 #. 'auth_admin_keep'.
 #.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:38
+#: ../policy/org.freedesktop.packagekit.policy.in.h:46
 msgid "Install signed package"
-msgstr "安装已标记的软件包"
+msgstr "安装已签名包"
 
 #. SECURITY:
 #. - Normal users require admin authentication to install untrusted or
@@ -1771,7 +1812,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:45
+#: ../policy/org.freedesktop.packagekit.policy.in.h:53
 msgid "Install untrusted local file"
 msgstr ""
 
@@ -1779,9 +1820,9 @@ 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:50
+#: ../policy/org.freedesktop.packagekit.policy.in.h:58
 msgid "Refresh system sources"
-msgstr "刷新系统源"
+msgstr "刷新系统源缓存"
 
 #. SECURITY:
 #. - Normal users require admin authentication to rebind a driver
@@ -1790,9 +1831,9 @@ msgstr "刷新系统源"
 #. try to rebind drivers in use, for instance security authentication
 #. devices.
 #.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:58
+#: ../policy/org.freedesktop.packagekit.policy.in.h:66
 msgid "Reload a device"
-msgstr "重新载入设备"
+msgstr "重新加载设备"
 
 #. SECURITY:
 #. - Normal users require admin authentication to remove packages as
@@ -1803,16 +1844,16 @@ msgstr "重新载入设备"
 #. be removed. If this is not possible, change this authentication to
 #. 'auth_admin'.
 #.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:68
+#: ../policy/org.freedesktop.packagekit.policy.in.h:76
 msgid "Remove package"
-msgstr "移除软件包"
+msgstr "移除包"
 
 #. 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:74
+#: ../policy/org.freedesktop.packagekit.policy.in.h:82
 msgid "Rollback to a previous transaction"
 msgstr ""
 
@@ -1820,9 +1861,9 @@ msgstr ""
 #. - Normal users do not require admin authentication to set the proxy
 #. used for downloading packages.
 #.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:79
+#: ../policy/org.freedesktop.packagekit.policy.in.h:87
 msgid "Set network proxy"
-msgstr "设置新的网络代理"
+msgstr "设置网络代理"
 
 #. SECURITY:
 #. - Normal users require admin authentication to add signing keys.
@@ -1830,7 +1871,7 @@ msgstr "设置新的网络代理"
 #. without a secure authentication.
 #. - This is not kept as each package should be authenticated.
 #.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:86
+#: ../policy/org.freedesktop.packagekit.policy.in.h:94
 msgid "Trust a key used for signing packages"
 msgstr ""
 
@@ -1841,9 +1882,9 @@ msgstr ""
 #. - Changing this to anything other than 'yes' will break unattended
 #. updates.
 #.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:94
+#: ../policy/org.freedesktop.packagekit.policy.in.h:102
 msgid "Update packages"
-msgstr "更新软件包"
+msgstr "更新包"
 
 #. TRANSLATORS: failed due to DBus security
 #: ../src/pk-main.c:87
@@ -1862,89 +1903,91 @@ msgstr ""
 
 #. 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:199
+#: ../src/pk-main.c:200
 msgid "Packaging backend to use, e.g. dummy"
-msgstr "包装后端使用,例如:dummy"
+msgstr "使用的打包后端,如:dummy"
 
 #. TRANSLATORS: if we should run in the background
-#: ../src/pk-main.c:202
+#: ../src/pk-main.c:203
+#, fuzzy
 msgid "Daemonize and detach from the terminal"
-msgstr "无交互后台程序 从终端分离"
+msgstr "守护进程化并脱离终端"
 
 #. TRANSLATORS: if we should not monitor how long we are inactive for
-#: ../src/pk-main.c:205
+#: ../src/pk-main.c:206
 msgid "Disable the idle timer"
-msgstr "禁用 无用的 计时器"
+msgstr "禁用空闲计时器"
 
 #. TRANSLATORS: show version
-#: ../src/pk-main.c:208
+#: ../src/pk-main.c:209
 msgid "Show version and exit"
 msgstr "显示版本并退出"
 
 #. TRANSLATORS: exit after we've started up, used for user profiling
-#: ../src/pk-main.c:211
+#: ../src/pk-main.c:212
 msgid "Exit after a small delay"
 msgstr "稍后退出"
 
 #. TRANSLATORS: exit straight away, used for automatic profiling
-#: ../src/pk-main.c:214
+#: ../src/pk-main.c:215
 msgid "Exit after the engine has loaded"
-msgstr "引擎载入后退出"
+msgstr "引擎加载后退出"
 
 #. TRANSLATORS: describing the service that is running
-#: ../src/pk-main.c:229
+#: ../src/pk-main.c:230
 msgid "PackageKit service"
-msgstr "PackageKit 服务"
+msgstr "包工具箱(PackageKit)服务"
 
 #. TRANSLATORS: fatal error, dbus is not running
-#: ../src/pk-main.c:266
+#: ../src/pk-main.c:267
 msgid "Cannot connect to the system bus"
-msgstr "不能链接到系统总线"
+msgstr "不能连接到系统总线"
 
 #. TRANSLATORS: cannot register on system bus, unknown reason -- geeky error follows
-#: ../src/pk-main.c:317
+#: ../src/pk-main.c:318
 msgid "Error trying to start:"
-msgstr "启动失败:"
+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 "该软件不是从信任的源中得到的"
+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."
-msgstr "不升级这些包,除非你能够确定这些操作是安全的"
+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
 msgid "Many packages"
-msgstr "许多包"
+msgstr "太多包"
 
 #. TRANSLATORS: if the transaction is forced to install only trusted packages
 #: ../src/pk-polkit-action-lookup.c:339
 msgid "Only trusted"
-msgstr "被信任的"
+msgstr "仅受信任包"
 
 #. TRANSLATORS: turn on all debugging
 #: ../src/egg-debug.c:388
@@ -1952,58 +1995,73 @@ msgid "Show debugging information for all files"
 msgstr "显示所有文件的调试信息"
 
 #. TRANSLATORS: a list of modules to debug
-#: ../src/egg-debug.c:459
+#: ../src/egg-debug.c:458
 msgid "Debug these specific modules"
-msgstr "调试这些特定的模块"
+msgstr "调试这些指定模块"
 
 #. TRANSLATORS: a list of functions to debug
-#: ../src/egg-debug.c:462
+#: ../src/egg-debug.c:461
 msgid "Debug these specific functions"
-msgstr "调试这些特定的函数"
+msgstr "调试这些指定函数"
 
 #. TRANSLATORS: save to a log
-#: ../src/egg-debug.c:465
+#: ../src/egg-debug.c:464
 msgid "Log debugging data to a file"
-msgstr "调试日志信息写入文件"
+msgstr "将调试信息记入文件"
 
-#: ../src/egg-debug.c:469
+#: ../src/egg-debug.c:468
 msgid "Debugging Options"
 msgstr "调试选项"
 
-#: ../src/egg-debug.c:469
+#: ../src/egg-debug.c:468
 msgid "Show debugging options"
 msgstr "显示调试选项"
 
 #~ msgid "Adjust the volume level"
 #~ msgstr "调节音量水平"
+
 #~ msgid "PulseAudio Volume Control"
 #~ msgstr "PulseAudio 音量控制"
+
 #~ msgid "Volume Control"
 #~ msgstr "音量控制"
+
 #~ msgid "50%"
 #~ msgstr "50%"
+
 #~ msgid "<b>Port:</b>"
 #~ msgstr "<b>端口:</b>"
+
 #~ msgid "<b>Profile:</b>"
 #~ msgstr "<b>侧写:</b>"
+
 #~ msgid "<b>S_how:</b>"
 #~ msgstr "<b>显示(_h):</b>"
+
 #~ msgid "<b>Sho_w:</b>"
 #~ msgstr "<b>显示(_w):</b>"
+
 #~ msgid "<b>_Show:</b>"
 #~ msgstr "<b>显示(_S):</b>"
+
 #~ msgid "<b>left-front</b>"
 #~ msgstr "<b>左-前</b>"
+
 #~ msgid "<i>No application is currently playing audio.</i>"
 #~ msgstr "<i>没有程序正在播放音频。</i>"
+
 #~ msgid "<i>No application is currently recording audio.</i>"
 #~ msgstr "<i>没有程序正在录音。</i>"
+
 #~ msgid "<i>No cards available for configuration</i>"
 #~ msgstr "<i>没有可用来配置的声卡</i>"
+
 #~ msgid "<i>No input devices available</i>"
 #~ msgstr "<i>没有可用的输入设备</i>"
+
 #~ msgid "<i>No output devices available</i>"
 #~ msgstr "<i>没有可用的输出设备</i>"
+
 #~ msgid ""
 #~ "All Input Devices\n"
 #~ "All Except Monitors\n"
@@ -2016,6 +2074,7 @@ msgstr "显示调试选项"
 #~ "硬件输入设备\n"
 #~ "虚拟输入设备\n"
 #~ "监视器"
+
 #~ msgid ""
 #~ "All Output Devices\n"
 #~ "Hardware Output Devices\n"
@@ -2024,6 +2083,7 @@ msgstr "显示调试选项"
 #~ "全部输出设备\n"
 #~ "硬件输出设备\n"
 #~ "虚拟输出设备"
+
 #~ msgid ""
 #~ "All Streams\n"
 #~ "Applications\n"
@@ -2032,122 +2092,179 @@ msgstr "显示调试选项"
 #~ "所有流媒体\n"
 #~ "程序\n"
 #~ "虚拟流媒体"
+
 #~ msgid "Lock channels together"
 #~ msgstr "锁定声道"
+
 #~ msgid "Mute audio"
 #~ msgstr "音频静音"
+
 #~ msgid "Set as fallback"
 #~ msgstr "设定为回放"
+
 #~ msgid "_Input Devices"
 #~ msgstr "输入设备(_I)"
+
 #~ msgid "_Output Devices"
 #~ msgstr "输出设备(_O)"
+
 #~ msgid "_Playback"
 #~ msgstr "回放(_P)"
+
 #~ msgid "Card callback failure"
 #~ msgstr "声卡回叫失败"
+
 #~ msgid "Sink callback failure"
 #~ msgstr "Sink 回叫失败"
+
 #~ msgid "Source callback failure"
 #~ msgstr "源回叫失败"
+
 #~ msgid "Sink input callback failure"
 #~ msgstr "Sink 输入回叫失败"
+
 #~ msgid "Source output callback failure"
 #~ msgstr "源输出回叫失败"
+
 #~ msgid "Client callback failure"
 #~ msgstr "客户端回叫失败"
+
 #~ msgid "Server info callback failure"
 #~ msgstr "服务器信息回叫失败"
+
 #~ msgid "Failed to initialize stream_restore extension: %s"
 #~ msgstr "初始化 stream_restore 扩展失败:%s"
+
 #~ msgid "pa_ext_stream_restore_read() failed"
 #~ msgstr "pa_ext_stream_restore_read() 失败"
+
 #~ msgid "pa_context_get_sink_info_by_index() failed"
 #~ msgstr "pa_context_get_sink_info_by_index() 失败"
+
 #~ msgid "pa_context_get_source_info_by_index() failed"
 #~ msgstr "pa_context_get_source_info_by_index() 失败"
+
 #~ msgid "pa_context_get_sink_input_info() failed"
 #~ msgstr "pa_context_get_sink_input_info() 失败"
+
 #~ msgid "pa_context_get_client_info() failed"
 #~ msgstr "pa_context_get_client_info() 失败"
+
 #~ msgid "pa_context_get_server_info() failed"
 #~ msgstr "pa_context_get_server_info() 失败"
+
 #~ msgid "pa_context_get_card_info_by_index() failed"
 #~ msgstr "pa_context_get_card_info_by_index() 失败"
+
 #~ msgid "pa_context_subscribe() failed"
 #~ msgstr "pa_context_subscribe() 失败"
+
 #~ msgid "pa_context_client_info_list() failed"
 #~ msgstr "pa_context_client_info_list() 失败"
+
 #~ msgid "pa_context_get_card_info_list() failed"
 #~ msgstr "pa_context_get_card_info_list() 失败"
+
 #~ msgid "pa_context_get_sink_info_list() failed"
 #~ msgstr "pa_context_get_sink_info_list() 失败"
+
 #~ msgid "pa_context_get_source_info_list() failed"
 #~ msgstr "pa_context_get_source_info_list() 失败"
+
 #~ msgid "pa_context_get_sink_input_info_list() failed"
 #~ msgstr "pa_context_get_sink_input_info_list() 失败"
+
 #~ msgid "pa_context_get_source_output_info_list() failed"
 #~ msgstr "pa_context_get_source_output_info_list() 失败"
+
 #~ msgid "pa_context_set_card_profile_by_index() failed"
 #~ msgstr "pa_context_set_card_profile_by_index() failed"
+
 #~ msgid "<small>Silence</small>"
 #~ msgstr "<small>静音</small>"
+
 #~ msgid "<small>Min</small>"
 #~ msgstr "<small>最小</small>"
+
 #~ msgid "<small>Max</small>"
 #~ msgstr "<small>最大</small>"
+
 #~ msgid "<small><i>Base</i></small>"
 #~ msgstr "<small><i>低音</i></small>"
+
 #~ msgid "Peak detect"
 #~ msgstr "尖峰探测"
+
 #~ msgid "Failed to connect monitoring stream"
 #~ msgstr "无法连接到监视流媒体"
+
 #~ msgid ""
 #~ "Ignoring sink-input due to it being designated as an event and thus "
 #~ "handled by the Event widget"
 #~ msgstr "忽略漏输入,因为已将其指定为一个事件,所以由事件程序处理。"
+
 #~ msgid "System Sounds"
 #~ msgstr "系统声音"
+
 #~ msgid "pa_ext_stream_restore_write() failed"
 #~ msgstr "pa_ext_stream_restore_write() 失败"
+
 #~ msgid "Terminate Playback"
 #~ msgstr "终止回放"
+
 #~ msgid "pa_context_set_sink_input_volume() failed"
 #~ msgstr "pa_context_set_sink_input_volume() 失败"
+
 #~ msgid "pa_context_set_sink_input_mute() failed"
 #~ msgstr "pa_context_set_sink_input_mute() 失败"
+
 #~ msgid "pa_context_kill_sink_input() failed"
 #~ msgstr "pa_context_kill_sink_input() 失败"
+
 #~ msgid "pa_context_move_sink_input_by_index() failed"
 #~ msgstr "pa_context_move_sink_input_by_index() 失败"
+
 #~ msgid "pa_context_set_sink_volume_by_index() failed"
 #~ msgstr "pa_context_set_sink_volume_by_index() 失败"
+
 #~ msgid "Volume Control Feedback Sound"
 #~ msgstr "音量控制反馈声音"
+
 #~ msgid "pa_context_set_sink_mute_by_index() failed"
 #~ msgstr "pa_context_set_sink_mute_by_index() 失败"
+
 #~ msgid "pa_context_set_default_sink() failed"
 #~ msgstr "pa_context_set_default_sink() 失败"
+
 #~ msgid "pa_context_set_sink_port_by_index() failed"
 #~ msgstr "pa_context_set_sink_port_by_index() 失败"
+
 #~ msgid "from"
 #~ msgstr "来自"
+
 #~ msgid "Terminate Recording"
 #~ msgstr "终止录制"
+
 #~ msgid "Unknown input"
 #~ msgstr "未知输入"
+
 #~ msgid "pa_context_kill_source_output() failed"
 #~ msgstr "pa_context_kill_source_output() 失败"
+
 #~ msgid "pa_context_move_source_output_by_index() failed"
 #~ msgstr "pa_context_move_source_output_by_index() 失败"
+
 #~ msgid "pa_context_set_source_volume_by_index() failed"
 #~ msgstr "pa_context_set_source_volume_by_index() 失败"
+
 #~ msgid "pa_context_set_source_mute_by_index() failed"
 #~ msgstr "pa_context_set_source_mute_by_index() 失败"
+
 #~ msgid "pa_context_set_default_source() failed"
 #~ msgstr "pa_context_set_default_source() 失败"
+
 #~ msgid "pa_context_set_source_port_by_index() failed"
 #~ msgstr "pa_context_set_source_port_by_index() 失败"
+
 #~ msgid "Terminate"
 #~ msgstr "终止"
-
commit fe1f036f3376b36800cef03673e9c694d6ee9dfd
Author: Fabio Erculiani <lxnay at sabayon.org>
Date:   Mon Jun 14 19:10:02 2010 +0200

    entropy: implement forward compatibility support

diff --git a/backends/entropy/entropyBackend.py b/backends/entropy/entropyBackend.py
index cd3516b..6e18650 100755
--- a/backends/entropy/entropyBackend.py
+++ b/backends/entropy/entropyBackend.py
@@ -1026,7 +1026,10 @@ class PackageKitEntropyBackend(PackageKitBaseBackend, PackageKitEntropyMixin):
             self._log_message(__name__, "get_packages: done %s/100" % (percent,))
 
             self.percentage(percent)
-            pkg_ids = repo_db.listAllIdpackages()
+            try:
+                pkg_ids = repo_db.listAllIdpackages()
+            except AttributeError:
+                pkg_ids = repo_db.listAllPackageIds()
             pkgs.update((repo, x, repo_db,) for x in pkg_ids)
 
         # now filter
@@ -1585,7 +1588,10 @@ class PackageKitEntropyBackend(PackageKitBaseBackend, PackageKitEntropyMixin):
                      repo_all_cats if cat_name not in all_matched_categories])
 
             for cat_id in etp_cat_ids:
-                pkg_ids = repo_db.listIdPackagesInIdcategory(cat_id)
+                try:
+                    pkg_ids = repo_db.listIdPackagesInIdcategory(cat_id)
+                except AttributeError:
+                    pkg_ids = repo_db.listPackageIdsInCategoryId(cat_id)
                 pkgs.update((repo, x, repo_db,) for x in pkg_ids)
 
         # now filter
commit 91062c028cdadefe2af5aa2adcbe3c9dde90bde1
Author: Richard Hughes <richard at hughsie.com>
Date:   Tue Jun 8 15:45:14 2010 +0100

    Build the gtk-module for gtk-3.0 as well as gtk-2.0 if available

diff --git a/configure.ac b/configure.ac
index 321444e..3c679f2 100644
--- a/configure.ac
+++ b/configure.ac
@@ -438,12 +438,24 @@ dnl ---------------------------------------------------------------------------
 AC_ARG_ENABLE(gtk_module, AS_HELP_STRING([--enable-gtk-module],[Build GTK module functionality]),
 	      enable_gtk_module=$enableval,enable_gtk_module=yes)
 if test x$enable_gtk_module = xyes; then
-	PKG_CHECK_MODULES(PK_GTK_MODULE, gtk+-2.0 >= 2.14.0 pangoft2 fontconfig dbus-glib-1,
-	                  build_gtk_module=yes, build_gtk_module=no)
+	PKG_CHECK_MODULES(PK_GTK_MODULE_GTK2, gtk+-2.0 >= 2.14.0 pangoft2 fontconfig dbus-glib-1,
+	                  build_gtk_module_gtk2=yes, build_gtk_module_gtk2=no)
+	PKG_CHECK_MODULES(PK_GTK_MODULE_GTK3, gtk+-3.0 pangoft2 fontconfig dbus-glib-1,
+	                  build_gtk_module_gtk3=yes, build_gtk_module_gtk3=no)
+	# if either are true, visit the gtk-module directory
+	if test $build_gtk_module_gtk2 = "yes" -o $build_gtk_module_gtk3 = "yes"; then
+		build_gtk_module=yes
+	else
+		build_gtk_module=no
+	fi
 else
 	build_gtk_module=no
+	build_gtk_module_gtk2=no
+	build_gtk_module_gtk3=no
 fi
 AM_CONDITIONAL(PK_BUILD_GTK_MODULE, test $build_gtk_module = "yes")
+AM_CONDITIONAL(PK_BUILD_GTK_MODULE_GTK2, test $build_gtk_module_gtk2 = "yes")
+AM_CONDITIONAL(PK_BUILD_GTK_MODULE_GTK3, test $build_gtk_module_gtk3 = "yes")
 
 dnl ---------------------------------------------------------------------------
 dnl - Able to build BASH command-not-found functionality
@@ -774,6 +786,8 @@ contrib/Makefile
 contrib/browser-plugin/Makefile
 contrib/gstreamer-plugin/Makefile
 contrib/gtk-module/Makefile
+contrib/gtk-module/gtk-2.0/Makefile
+contrib/gtk-module/gtk-3.0/Makefile
 contrib/yum-packagekit/Makefile
 contrib/command-not-found/Makefile
 contrib/cron/Makefile
@@ -846,7 +860,8 @@ echo "
         Networking stacks:         ${networking_apis}
         Browser plugin:            ${build_browser_plugin}
         GStreamer plugin:          ${build_gstreamer_plugin}
-        Pango module:              ${build_gtk_module}
+        Pango module (GTK2):       ${build_gtk_module_gtk2}
+        Pango module (GTK3):       ${build_gtk_module_gtk3}
         BASH Command not found:    ${build_command_not_found}
         Cron scripts:              ${build_cron}
         debuginfo-install:         ${build_debuginfo_install}
diff --git a/contrib/PackageKit.spec.in b/contrib/PackageKit.spec.in
index 8e0f9b4..b600ac0 100644
--- a/contrib/PackageKit.spec.in
+++ b/contrib/PackageKit.spec.in
@@ -31,6 +31,7 @@ BuildRequires: sqlite-devel
 BuildRequires: NetworkManager-devel
 BuildRequires: polkit-devel >= 0.92
 BuildRequires: libtool
+BuildRequires: gtk3
 BuildRequires: docbook-utils
 BuildRequires: gnome-doc-utils
 BuildRequires: python-devel
@@ -246,7 +247,7 @@ make install DESTDIR=$RPM_BUILD_ROOT
 rm -f $RPM_BUILD_ROOT%{_libdir}/libpackagekit*.la
 rm -f $RPM_BUILD_ROOT%{_libdir}/packagekit-backend/*.la
 rm -f $RPM_BUILD_ROOT%{_libdir}/mozilla/plugins/packagekit-plugin.la
-rm -f $RPM_BUILD_ROOT%{_libdir}/gtk-2.0/modules/*.la
+rm -f $RPM_BUILD_ROOT%{_libdir}/gtk-?.0/modules/*.la
 rm -f $RPM_BUILD_ROOT%{_libdir}/polkit-1/extensions/libpackagekit-action-lookup.la
 
 touch $RPM_BUILD_ROOT%{_localstatedir}/cache/PackageKit/groups.sqlite
@@ -391,7 +392,7 @@ update-mime-database %{_datadir}/mime &> /dev/null || :
 %files gtk-module
 %defattr(-,root,root,-)
 %doc README AUTHORS NEWS COPYING
-%{_libdir}/gtk-2.0/modules/*.so
+%{_libdir}/gtk-?.0/modules/*.so
 
 %files command-not-found
 %defattr(-,root,root,-)
diff --git a/contrib/gtk-module/Makefile.am b/contrib/gtk-module/Makefile.am
index e18a935..861b761 100644
--- a/contrib/gtk-module/Makefile.am
+++ b/contrib/gtk-module/Makefile.am
@@ -1,26 +1,14 @@
-NULL =
-APP = gedit --new-window GLASS.txt
+SUBDIRS =
 
-moduledir = $(LIBDIR)/gtk-2.0/modules
-module_LTLIBRARIES = libpk-gtk-module.la
-libpk_gtk_module_la_SOURCES = pk-gtk-module.c
-libpk_gtk_module_la_LIBADD = $(PK_GTK_MODULE_LIBS)
-libpk_gtk_module_la_LDFLAGS = -module -avoid-version
-libpk_gtk_module_la_CFLAGS = $(PK_GTK_MODULE_CFLAGS) $(WARNINGFLAGS_C)
+if PK_BUILD_GTK_MODULE_GTK2
+SUBDIRS += gtk-2.0
+endif
 
-clean-local:
-	rm -f *~
-
-local: all
-	GTK_MODULES="$$GTK_MODULES:$$PWD/.libs/libpk-gtk-module.so" $(APP)
+if PK_BUILD_GTK_MODULE_GTK3
+SUBDIRS += gtk-3.0
+endif
 
 EXTRA_DIST =						\
 	README						\
-	GLASS.txt					\
-	$(NULL)
-
-MAINTAINERCLEANFILES =					\
-	*~			      			\
-	Makefile.in					\
-	$(NULL)
+	GLASS.txt
 
diff --git a/contrib/gtk-module/gtk-2.0/Makefile.am b/contrib/gtk-module/gtk-2.0/Makefile.am
new file mode 100644
index 0000000..5397a08
--- /dev/null
+++ b/contrib/gtk-module/gtk-2.0/Makefile.am
@@ -0,0 +1,10 @@
+moduledir = $(LIBDIR)/gtk-2.0/modules
+module_LTLIBRARIES = libpk-gtk-module.la
+libpk_gtk_module_la_SOURCES = ../pk-gtk-module.c
+libpk_gtk_module_la_LIBADD = $(PK_GTK_MODULE_GTK2_LIBS)
+libpk_gtk_module_la_LDFLAGS = -module -avoid-version
+libpk_gtk_module_la_CFLAGS = $(PK_GTK_MODULE_GTK2_CFLAGS) $(WARNINGFLAGS_C)
+
+clean-local:
+	rm -f *~
+
diff --git a/contrib/gtk-module/gtk-3.0/Makefile.am b/contrib/gtk-module/gtk-3.0/Makefile.am
new file mode 100644
index 0000000..a5e1f4e
--- /dev/null
+++ b/contrib/gtk-module/gtk-3.0/Makefile.am
@@ -0,0 +1,16 @@
+NULL =
+APP = gedit --new-window GLASS.txt
+
+moduledir = $(LIBDIR)/gtk-3.0/modules
+module_LTLIBRARIES = libpk-gtk-module.la
+libpk_gtk_module_la_SOURCES = ../pk-gtk-module.c
+libpk_gtk_module_la_LIBADD = $(PK_GTK_MODULE_GTK3_LIBS)
+libpk_gtk_module_la_LDFLAGS = -module -avoid-version
+libpk_gtk_module_la_CFLAGS = $(PK_GTK_MODULE_GTK3_CFLAGS) $(WARNINGFLAGS_C)
+
+clean-local:
+	rm -f *~
+
+local: all
+	GTK_MODULES="$$GTK_MODULES:$$PWD/.libs/libpk-gtk-module.so" $(APP)
+
commit e7fd639093a641257f8ec1dae38fa0c7073e35b5
Author: Richard Hughes <richard at hughsie.com>
Date:   Sat Jun 5 22:33:18 2010 +0100

    yum: don't crash with an internal error if the .discinfo is malformed

diff --git a/backends/yum/yumBackend.py b/backends/yum/yumBackend.py
index e2878b9..f7bd2e4 100755
--- a/backends/yum/yumBackend.py
+++ b/backends/yum/yumBackend.py
@@ -3297,12 +3297,22 @@ class PackageKitYumBase(yum.YumBase):
             f = open(discinfo, "r")
             lines = f.readlines()
             f.close()
-            media_id_tmp = lines[0].strip()
-            disc_number_tmp = int(lines[3].strip())
+
+            # not enough lines to be a valid .discinfo
+            if len(lines) < 4:
+                continue
 
             # check this is the right disk
+            media_id_tmp = lines[0].strip()
             if cmp(media_id_tmp, media_id) != 0:
                 continue
+
+            # disc number can be random things like 'ALL'
+            disc_number_tmp = 1
+            try:
+                disc_number_tmp = int(lines[3].strip())
+            except ValueError, e:
+                pass
             if disc_number_tmp != disc_number:
                 continue
             return root
commit a1cd508feceb9edccd6db7db30ef627d8fc4b179
Author: Richard Hughes <richard at hughsie.com>
Date:   Sat Jun 5 15:27:32 2010 +0100

    Assign names to our idle sources when using new versions of glib2
    
    This makes it possible to profile more accurately using systemtap

diff --git a/contrib/browser-plugin/pk-plugin-install.c b/contrib/browser-plugin/pk-plugin-install.c
index 5abdde8..aeb9c2d 100644
--- a/contrib/browser-plugin/pk-plugin-install.c
+++ b/contrib/browser-plugin/pk-plugin-install.c
@@ -123,6 +123,9 @@ pk_plugin_install_set_status (PkPluginInstall *self, PkPluginInstallPackageStatu
 
 		if (status == INSTALLING) {
 			self->priv->timeout = g_timeout_add (80, spinner_timeout, self);
+#if GLIB_CHECK_VERSION(2,25,8)
+			g_source_set_name_by_id (self->priv->timeout, "[PkPluginInstall] spinner");
+#endif
 		}
 		else if (self->priv->timeout) {
 			g_source_remove (self->priv->timeout);
diff --git a/contrib/command-not-found/pk-command-not-found.c b/contrib/command-not-found/pk-command-not-found.c
index 3e13886..92305dd 100644
--- a/contrib/command-not-found/pk-command-not-found.c
+++ b/contrib/command-not-found/pk-command-not-found.c
@@ -430,6 +430,9 @@ pk_cnf_find_available (const gchar *cmd, guint max_search_time)
 	cancel_id = g_timeout_add (max_search_time,
 				   (GSourceFunc) pk_cnf_cancel_cb,
 				   cancellable);
+#if GLIB_CHECK_VERSION(2,25,8)
+	g_source_set_name_by_id (cancel_id, "[PkCommandNotFount] cancel");
+#endif
 
 	/* do search */
 	filters = pk_bitfield_from_enums (PK_FILTER_ENUM_NOT_INSTALLED,
diff --git a/contrib/gtk-module/pk-gtk-module.c b/contrib/gtk-module/pk-gtk-module.c
index 78fa350..b615972 100644
--- a/contrib/gtk-module/pk-gtk-module.c
+++ b/contrib/gtk-module/pk-gtk-module.c
@@ -153,9 +153,13 @@ out:
 static void
 queue_install_fonts_tag (const char *tag)
 {
+	guint idle_id;
 	if (tags == NULL) {
 		tags = g_ptr_array_new ();
-		g_idle_add (pk_install_fonts_idle_cb, NULL);
+		idle_id = g_idle_add (pk_install_fonts_idle_cb, NULL);
+#if GLIB_CHECK_VERSION(2,25,8)
+		g_source_set_name_by_id (idle_id, "[PkGtkModule] install fonts");
+#endif
 	}
 
 	g_ptr_array_add (tags, (gpointer) g_strdup (tag));
diff --git a/lib/packagekit-glib2/pk-control.c b/lib/packagekit-glib2/pk-control.c
index cf4d65b..db2de52 100644
--- a/lib/packagekit-glib2/pk-control.c
+++ b/lib/packagekit-glib2/pk-control.c
@@ -1854,7 +1854,12 @@ pk_control_transaction_list_changed_cb (DBusGProxy *proxy, gchar **transaction_i
 
 	/* we have to do this idle as the transaction list will change when not yet finished */
 	egg_debug ("emit transaction-list-changed (when idle)");
-	control->priv->transaction_list_changed_id = g_idle_add ((GSourceFunc) pk_control_transaction_list_changed_idle_cb, store);
+	control->priv->transaction_list_changed_id =
+		g_idle_add ((GSourceFunc) pk_control_transaction_list_changed_idle_cb, store);
+#if GLIB_CHECK_VERSION(2,25,8)
+	g_source_set_name_by_id (control->priv->transaction_list_changed_id,
+				 "[PkControl] transaction-list-changed");
+#endif
 }
 
 /**
@@ -1892,7 +1897,12 @@ pk_control_restart_schedule_cb (DBusGProxy *proxy, PkControl *control)
 
 	/* we have to do this idle as the transaction list will change when not yet finished */
 	egg_debug ("emit restart-schedule (when idle)");
-	store->control->priv->restart_schedule_id = g_idle_add ((GSourceFunc) pk_control_restart_schedule_idle_cb, store);
+	store->control->priv->restart_schedule_id =
+		g_idle_add ((GSourceFunc) pk_control_restart_schedule_idle_cb, store);
+#if GLIB_CHECK_VERSION(2,25,8)
+	g_source_set_name_by_id (store->control->priv->restart_schedule_id,
+				 "[PkControl] restart-schedule");
+#endif
 }
 
 /**
@@ -1930,7 +1940,12 @@ pk_control_updates_changed_cb (DBusGProxy *proxy, PkControl *control)
 
 	/* we have to do this idle as the transaction list will change when not yet finished */
 	egg_debug ("emit updates-changed (when idle)");
-	control->priv->updates_changed_id = g_idle_add ((GSourceFunc) pk_control_updates_changed_idle_cb, store);
+	control->priv->updates_changed_id =
+		g_idle_add ((GSourceFunc) pk_control_updates_changed_idle_cb, store);
+#if GLIB_CHECK_VERSION(2,25,8)
+	g_source_set_name_by_id (control->priv->updates_changed_id,
+				 "[PkControl] updates-changed");
+#endif
 }
 
 /**
@@ -1968,7 +1983,12 @@ pk_control_repo_list_changed_cb (DBusGProxy *proxy, PkControl *control)
 
 	/* we have to do this idle as the transaction list will change when not yet finished */
 	egg_debug ("emit repo-list-changed (when idle)");
-	control->priv->repo_list_changed_id = g_idle_add ((GSourceFunc) pk_control_repo_list_changed_idle_cb, store);
+	control->priv->repo_list_changed_id =
+		g_idle_add ((GSourceFunc) pk_control_repo_list_changed_idle_cb, store);
+#if GLIB_CHECK_VERSION(2,25,8)
+	g_source_set_name_by_id (control->priv->repo_list_changed_id,
+				 "[PkControl] repo-list-changed");
+#endif
 }
 
 /**
diff --git a/lib/packagekit-glib2/pk-progress-bar.c b/lib/packagekit-glib2/pk-progress-bar.c
index 113824d..e93d7cf 100644
--- a/lib/packagekit-glib2/pk-progress-bar.c
+++ b/lib/packagekit-glib2/pk-progress-bar.c
@@ -151,7 +151,11 @@ pk_progress_bar_draw_pulse_bar (PkProgressBar *self)
 	if (TRUE) {
 		self->priv->pulse_state.position = 1;
 		self->priv->pulse_state.move_forward = TRUE;
-		self->priv->timer_id = g_timeout_add (PK_PROGRESS_BAR_PULSE_TIMEOUT, (GSourceFunc) pk_progress_bar_pulse_bar, self);
+		self->priv->timer_id = g_timeout_add (PK_PROGRESS_BAR_PULSE_TIMEOUT,
+						      (GSourceFunc) pk_progress_bar_pulse_bar, self);
+#if GLIB_CHECK_VERSION(2,25,8)
+		g_source_set_name_by_id (self->priv->timer_id, "[PkProgressBar] pulse");
+#endif
 	}
 }
 
diff --git a/lib/packagekit-glib2/pk-task.c b/lib/packagekit-glib2/pk-task.c
index bd4755a..2b60e43 100644
--- a/lib/packagekit-glib2/pk-task.c
+++ b/lib/packagekit-glib2/pk-task.c
@@ -708,6 +708,7 @@ out:
 gboolean
 pk_task_user_accepted (PkTask *task, guint request)
 {
+	guint idle_id;
 	PkTaskState *state;
 
 	/* get the not-yet-completed request */
@@ -717,7 +718,10 @@ pk_task_user_accepted (PkTask *task, guint request)
 		return FALSE;
 	}
 
-	g_idle_add ((GSourceFunc) pk_task_user_accepted_idle_cb, state);
+	idle_id = g_idle_add ((GSourceFunc) pk_task_user_accepted_idle_cb, state);
+#if GLIB_CHECK_VERSION(2,25,8)
+	g_source_set_name_by_id (idle_id, "[PkTask] user-accept");
+#endif
 	return TRUE;
 }
 
@@ -756,6 +760,7 @@ out:
 gboolean
 pk_task_user_declined (PkTask *task, guint request)
 {
+	guint idle_id;
 	PkTaskState *state;
 
 	/* get the not-yet-completed request */
@@ -765,7 +770,10 @@ pk_task_user_declined (PkTask *task, guint request)
 		return FALSE;
 	}
 
-	g_idle_add ((GSourceFunc) pk_task_user_declined_idle_cb, state);
+	idle_id = g_idle_add ((GSourceFunc) pk_task_user_declined_idle_cb, state);
+#if GLIB_CHECK_VERSION(2,25,8)
+	g_source_set_name_by_id (idle_id, "[PkTask] user-declined");
+#endif
 	return TRUE;
 }
 
diff --git a/src/egg-test.c b/src/egg-test.c
index 1f62d64..99c0fe8 100644
--- a/src/egg-test.c
+++ b/src/egg-test.c
@@ -89,6 +89,9 @@ void
 egg_test_loop_wait (EggTest *test, guint timeout)
 {
 	test->hang_loop_id = g_timeout_add (timeout, egg_test_hang_check, test);
+#if GLIB_CHECK_VERSION(2,25,8)
+	g_source_set_name_by_id (test->hang_loop_id, "[EggTest] egg-test-hang");
+#endif
 	g_main_loop_run (test->loop);
 }
 
diff --git a/src/pk-backend-spawn.c b/src/pk-backend-spawn.c
index 6856337..220f036 100644
--- a/src/pk-backend-spawn.c
+++ b/src/pk-backend-spawn.c
@@ -138,6 +138,9 @@ pk_backend_spawn_start_kill_timer (PkBackendSpawn *backend_spawn)
 
 	/* close down the dispatcher if it is still open after this much time */
 	priv->kill_id = g_timeout_add_seconds (timeout, (GSourceFunc) pk_backend_spawn_exit_timeout_cb, backend_spawn);
+#if GLIB_CHECK_VERSION(2,25,8)
+	g_source_set_name_by_id (priv->kill_id, "[PkBackendSpawn] exit");
+#endif
 }
 
 /**
diff --git a/src/pk-backend.c b/src/pk-backend.c
index dbc8b4e..f17ffd7 100644
--- a/src/pk-backend.c
+++ b/src/pk-backend.c
@@ -1886,6 +1886,9 @@ pk_backend_error_code (PkBackend *backend, PkErrorEnum error_code, const gchar *
 	/* we only allow a short time to send finished after error_code */
 	backend->priv->signal_error_timeout = g_timeout_add (PK_BACKEND_FINISHED_ERROR_TIMEOUT,
 							     pk_backend_error_timeout_delay_cb, backend);
+#if GLIB_CHECK_VERSION(2,25,8)
+	g_source_set_name_by_id (backend->priv->signal_error_timeout, "[PkBackend] error-code");
+#endif
 
 	/* some error codes have a different exit code */
 	need_untrusted = pk_backend_error_code_is_need_untrusted (error_code);
@@ -2134,7 +2137,11 @@ pk_backend_finished (PkBackend *backend)
 	/* we have to run this idle as the command may finish before the transaction
 	 * has been sent to the client. I love async... */
 	egg_debug ("adding finished %p to timeout loop", backend);
-	backend->priv->signal_finished = g_timeout_add (PK_BACKEND_FINISHED_TIMEOUT_GRACE, pk_backend_finished_delay, backend);
+	backend->priv->signal_finished = g_timeout_add (PK_BACKEND_FINISHED_TIMEOUT_GRACE,
+							pk_backend_finished_delay, backend);
+#if GLIB_CHECK_VERSION(2,25,8)
+	g_source_set_name_by_id (backend->priv->signal_finished, "[PkBackend] finished");
+#endif
 	return TRUE;
 }
 
@@ -2154,7 +2161,11 @@ pk_backend_thread_finished_cb (PkBackend *backend)
 void
 pk_backend_thread_finished (PkBackend *backend)
 {
-	g_idle_add ((GSourceFunc) pk_backend_thread_finished_cb, backend);
+	guint idle_id;
+	idle_id = g_idle_add ((GSourceFunc) pk_backend_thread_finished_cb, backend);
+#if GLIB_CHECK_VERSION(2,25,8)
+	g_source_set_name_by_id (idle_id, "[PkBackend] finished");
+#endif
 }
 
 /**
@@ -2745,6 +2756,9 @@ pk_backend_cancel (PkBackend *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
 }
 
 /**
diff --git a/src/pk-engine.c b/src/pk-engine.c
index fa0ae7d..2db8d44 100644
--- a/src/pk-engine.c
+++ b/src/pk-engine.c
@@ -603,12 +603,19 @@ pk_engine_state_has_changed (PkEngine *engine, const gchar *reason, GError **err
 		engine->priv->timeout_normal_id = 0;	}
 
 	/* wait a little delay in case we get multiple requests */
-	if (is_priority)
+	if (is_priority) {
 		engine->priv->timeout_priority_id = g_timeout_add_seconds (engine->priv->timeout_priority,
 									   pk_engine_state_changed_cb, engine);
-	else
+#if GLIB_CHECK_VERSION(2,25,8)
+		g_source_set_name_by_id (engine->priv->timeout_priority_id, "[PkEngine] priority");
+#endif
+	} else {
 		engine->priv->timeout_normal_id = g_timeout_add_seconds (engine->priv->timeout_normal,
 									 pk_engine_state_changed_cb, engine);
+#if GLIB_CHECK_VERSION(2,25,8)
+		g_source_set_name_by_id (engine->priv->timeout_normal_id, "[PkEngine] normal");
+#endif
+	}
 
 	/* reset the timer */
 	pk_engine_reset_timer (engine);
diff --git a/src/pk-main.c b/src/pk-main.c
index c1494c7..55f1ca6 100644
--- a/src/pk-main.c
+++ b/src/pk-main.c
@@ -192,6 +192,7 @@ main (int argc, char *argv[])
 	PkSyslog *syslog = NULL;
 	GError *error = NULL;
 	GOptionContext *context;
+	guint timer_id = 0;
 
 	const GOptionEntry options[] = {
 		{ "backend", '\0', 0, G_OPTION_ARG_STRING, &backend_name,
@@ -325,8 +326,12 @@ main (int argc, char *argv[])
 		g_timeout_add_seconds (20, (GSourceFunc) timed_exit_cb, loop);
 
 	/* only poll every 10 seconds when we are alive */
-	if (exit_idle_time != 0 && !disable_timer)
-		g_timeout_add_seconds (5, (GSourceFunc) pk_main_timeout_check_cb, engine);
+	if (exit_idle_time != 0 && !disable_timer) {
+		timer_id = g_timeout_add_seconds (5, (GSourceFunc) pk_main_timeout_check_cb, engine);
+#if GLIB_CHECK_VERSION(2,25,8)
+		g_source_set_name_by_id (timer_id, "[PkMain] main poll");
+#endif
+	}
 
 	/* immediatly exit */
 	if (immediate_exit)
@@ -339,6 +344,9 @@ out:
 	/* log the shutdown */
 	pk_syslog_add (syslog, PK_SYSLOG_TYPE_INFO, "daemon quit");
 
+	if (timer_id > 0)
+		g_source_remove (timer_id);
+
 	g_main_loop_unref (loop);
 	g_object_unref (syslog);
 	g_object_unref (conf);
diff --git a/src/pk-notify.c b/src/pk-notify.c
index 76f302f..cddc9dc 100644
--- a/src/pk-notify.c
+++ b/src/pk-notify.c
@@ -111,6 +111,9 @@ pk_notify_wait_updates_changed (PkNotify *notify, guint timeout)
 
 	/* schedule */
 	notify->priv->timeout_id = g_timeout_add (timeout, pk_notify_finished_updates_changed_cb, notify);
+#if GLIB_CHECK_VERSION(2,25,8)
+	g_source_set_name_by_id (notify->priv->timeout_id, "[PkNotify] updates-changed");
+#endif
 	return TRUE;
 }
 
diff --git a/src/pk-spawn.c b/src/pk-spawn.c
index 7091b60..38a1549 100644
--- a/src/pk-spawn.c
+++ b/src/pk-spawn.c
@@ -378,9 +378,12 @@ pk_spawn_kill (PkSpawn *spawn)
 	}
 
 	/* the program might not be able to handle SIGQUIT, give it a few seconds and then SIGKILL it */
-	if (spawn->priv->allow_sigkill)
+	if (spawn->priv->allow_sigkill) {
 		spawn->priv->kill_id = g_timeout_add (PK_SPAWN_SIGKILL_DELAY, (GSourceFunc) pk_spawn_sigkill_cb, spawn);
-
+#if GLIB_CHECK_VERSION(2,25,8)
+		g_source_set_name_by_id (spawn->priv->kill_id, "[PkSpawn] sigkill");
+#endif
+	}
 	return TRUE;
 }
 
@@ -617,6 +620,9 @@ pk_spawn_argv (PkSpawn *spawn, gchar **argv, gchar **envp)
 
 	/* poll quickly */
 	spawn->priv->poll_id = g_timeout_add (PK_SPAWN_POLL_DELAY, (GSourceFunc) pk_spawn_check_child, spawn);
+#if GLIB_CHECK_VERSION(2,25,8)
+	g_source_set_name_by_id (spawn->priv->poll_id, "[PkSpawn] main poll");
+#endif
 
 	return TRUE;
 }
diff --git a/src/pk-transaction-db.c b/src/pk-transaction-db.c
index ede1d5c..e06ce1e 100644
--- a/src/pk-transaction-db.c
+++ b/src/pk-transaction-db.c
@@ -561,7 +561,12 @@ pk_transaction_db_generate_id (PkTransactionDb *tdb)
 	 * next time we are idle (but ensure we do this on shutdown) */
 	if (tdb->priv->database_save_id == 0) {
 		egg_debug ("deferring low priority write until idle");
-		tdb->priv->database_save_id = g_idle_add_full (G_PRIORITY_LOW, (GSourceFunc) pk_transaction_db_defer_write_job_count_cb, tdb, NULL);
+		tdb->priv->database_save_id =
+			g_idle_add_full (G_PRIORITY_LOW, (GSourceFunc)
+					 pk_transaction_db_defer_write_job_count_cb, tdb, NULL);
+#if GLIB_CHECK_VERSION(2,25,8)
+		g_source_set_name_by_id (tdb->priv->database_save_id, "[PkTransactionDb] save");
+#endif
 	}
 
 	/* make the tid */
diff --git a/src/pk-transaction-list.c b/src/pk-transaction-list.c
index 70cebdb..569adf1 100644
--- a/src/pk-transaction-list.c
+++ b/src/pk-transaction-list.c
@@ -297,6 +297,9 @@ pk_transaction_list_run_item (PkTransactionList *tlist, PkTransactionItem *item)
 
 	/* add this idle, so that we don't have a deep out-of-order callchain */
 	item->idle_id = g_idle_add ((GSourceFunc) pk_transaction_list_run_idle_cb, item);
+#if GLIB_CHECK_VERSION(2,25,8)
+	g_source_set_name_by_id (item->idle_id, "[PkTransactionList] run");
+#endif
 }
 
 /**
@@ -379,6 +382,9 @@ pk_transaction_list_transaction_finished_cb (PkTransaction *transaction, const g
 	/* give the client a few seconds to still query the runner */
 	timeout = pk_conf_get_int (tlist->priv->conf, "TransactionKeepFinishedTimeout");
 	item->remove_id = g_timeout_add_seconds (timeout, (GSourceFunc) pk_transaction_list_remove_item_cb, item);
+#if GLIB_CHECK_VERSION(2,25,8)
+	g_source_set_name_by_id (item->remove_id, "[PkTransactionList] remove");
+#endif
 
 	/* do the next transaction now if we have another queued */
 	item = pk_transaction_list_get_next_item (tlist);
@@ -515,6 +521,9 @@ pk_transaction_list_create (PkTransactionList *tlist, const gchar *tid, const gc
 	/* the client only has a finite amount of time to use the object, else it's destroyed */
 	timeout = pk_conf_get_int (tlist->priv->conf, "TransactionCreateCommitTimeout");
 	item->commit_id = g_timeout_add_seconds (timeout, (GSourceFunc) pk_transaction_list_no_commit_cb, item);
+#if GLIB_CHECK_VERSION(2,25,8)
+	g_source_set_name_by_id (item->commit_id, "[PkTransactionList] commit");
+#endif
 
 	egg_debug ("adding transaction %p, item %p", item->transaction, item);
 	g_ptr_array_add (tlist->priv->array, item);
@@ -817,6 +826,9 @@ pk_transaction_list_wedge_check1 (PkTransactionList *tlist)
 		/* we have to do this twice, as we might idle add inbetween a transition */
 		egg_warning ("list is consistent, scheduling another check");
 		tlist->priv->unwedge2_id = g_timeout_add (500, (GSourceFunc) pk_transaction_list_wedge_check2, tlist);
+#if GLIB_CHECK_VERSION(2,25,8)
+		g_source_set_name_by_id (tlist->priv->unwedge2_id, "[PkTransactionList] wedge-check");
+#endif
 	}
 
 	/* always repeat */
@@ -854,7 +866,11 @@ pk_transaction_list_init (PkTransactionList *tlist)
 	tlist->priv->conf = pk_conf_new ();
 	tlist->priv->array = g_ptr_array_new ();
 	tlist->priv->unwedge2_id = 0;
-	tlist->priv->unwedge1_id = g_timeout_add_seconds (PK_TRANSACTION_WEDGE_CHECK, (GSourceFunc) pk_transaction_list_wedge_check1, tlist);
+	tlist->priv->unwedge1_id = g_timeout_add_seconds (PK_TRANSACTION_WEDGE_CHECK,
+							  (GSourceFunc) pk_transaction_list_wedge_check1, tlist);
+#if GLIB_CHECK_VERSION(2,25,8)
+	g_source_set_name_by_id (tlist->priv->unwedge1_id, "[PkTransactionList] wedge-check (main)");
+#endif
 }
 
 /**
diff --git a/src/pk-transaction.c b/src/pk-transaction.c
index a6e5adb..055a641 100644
--- a/src/pk-transaction.c
+++ b/src/pk-transaction.c
@@ -2495,6 +2495,7 @@ pk_transaction_accept_eula (PkTransaction *transaction, const gchar *eula_id, DB
 {
 	gboolean ret;
 	GError *error = NULL;
+	guint idle_id;
 
 	g_return_if_fail (PK_IS_TRANSACTION (transaction));
 	g_return_if_fail (transaction->priv->tid != NULL);
@@ -2536,7 +2537,10 @@ pk_transaction_accept_eula (PkTransaction *transaction, const gchar *eula_id, DB
 	}
 
 	/* we are done */
-	g_idle_add ((GSourceFunc) pk_transaction_finished_idle_cb, transaction);
+	idle_id = g_idle_add ((GSourceFunc) pk_transaction_finished_idle_cb, transaction);
+#if GLIB_CHECK_VERSION(2,25,8)
+	g_source_set_name_by_id (idle_id, "[PkTransaction] finished from accept");
+#endif
 
 	/* return from async with success */
 	pk_transaction_dbus_return (context);
@@ -3159,6 +3163,8 @@ pk_transaction_get_packages (PkTransaction *transaction, const gchar *filter, DB
 gboolean
 pk_transaction_get_old_transactions (PkTransaction *transaction, guint number, GError **error)
 {
+	guint idle_id;
+
 	g_return_val_if_fail (PK_IS_TRANSACTION (transaction), FALSE);
 	g_return_val_if_fail (transaction->priv->tid != NULL, FALSE);
 
@@ -3166,7 +3172,10 @@ pk_transaction_get_old_transactions (PkTransaction *transaction, guint number, G
 
 	pk_transaction_set_role (transaction, PK_ROLE_ENUM_GET_OLD_TRANSACTIONS);
 	pk_transaction_db_get_list (transaction->priv->transaction_db, number);
-	g_idle_add ((GSourceFunc) pk_transaction_finished_idle_cb, transaction);
+	idle_id = g_idle_add ((GSourceFunc) pk_transaction_finished_idle_cb, transaction);
+#if GLIB_CHECK_VERSION(2,25,8)
+	g_source_set_name_by_id (idle_id, "[PkTransaction] finished from get-old-transactions");
+#endif
 
 	return TRUE;
 }
@@ -3408,6 +3417,7 @@ pk_transaction_try_emit_cache (PkTransaction *transaction)
 	PkMessage *message;
 	PkExitEnum exit_enum;
 	guint i;
+	guint idle_id;
 
 	/* get results */
 	results = pk_cache_get_results (transaction->priv->cache, transaction->priv->role);
@@ -3449,7 +3459,10 @@ pk_transaction_try_emit_cache (PkTransaction *transaction)
 	pk_transaction_status_changed_emit (transaction, PK_STATUS_ENUM_FINISHED);
 
 	/* we are done */
-	g_idle_add ((GSourceFunc) pk_transaction_finished_idle_cb, transaction);
+	idle_id = g_idle_add ((GSourceFunc) pk_transaction_finished_idle_cb, transaction);
+#if GLIB_CHECK_VERSION(2,25,8)
+	g_source_set_name_by_id (idle_id, "[PkTransaction] try-emit-cache");
+#endif
 
 out:
 	if (package_array != NULL)
commit 886787fdb119c4e974ef44cc1ffcb31bc0b42407
Author: Richard Hughes <richard at hughsie.com>
Date:   Fri Jun 4 12:52:58 2010 +0100

    cnf: Add a MaxSearchTime entry in CommandNotFound.conf and default to 2000ms

diff --git a/contrib/command-not-found/CommandNotFound.conf b/contrib/command-not-found/CommandNotFound.conf
index b43831e..b71b8f3 100644
--- a/contrib/command-not-found/CommandNotFound.conf
+++ b/contrib/command-not-found/CommandNotFound.conf
@@ -60,3 +60,14 @@ SingleInstall=ask
 # default=warn
 MultipleInstall=warn
 
+# Controls how long we should allow the user to wait when searching for
+# additional packages.
+# This can be set to very small numbers to avoid distracting the user, although
+# some entries may not be found if the caches need refreshing or metadata
+# downloading.
+#
+# Value is the number of milliseconds to allow.
+#
+# default=2000
+MaxSearchTime=2000
+
diff --git a/contrib/command-not-found/pk-command-not-found.c b/contrib/command-not-found/pk-command-not-found.c
index a07da45..3e13886 100644
--- a/contrib/command-not-found/pk-command-not-found.c
+++ b/contrib/command-not-found/pk-command-not-found.c
@@ -53,6 +53,7 @@ typedef struct {
 	gboolean	 software_source_search;
 	gboolean	 similar_name_search;
 	gchar		**locations;
+	guint		 max_search_time;
 } PkCnfPolicyConfig;
 
 static PkTask *task = NULL;
@@ -388,12 +389,23 @@ pk_cnf_progress_cb (PkProgress *progress, PkProgressType type, gpointer data)
 }
 
 /**
+ * pk_cnf_cancel_cb:
+ */
+static gboolean
+pk_cnf_cancel_cb (GCancellable *_cancellable)
+{
+	egg_warning ("Cancelling request");
+	g_cancellable_cancel (cancellable);
+	return FALSE;
+}
+
+/**
  * pk_cnf_find_available:
  *
  * Find software we could install
  **/
 static gchar **
-pk_cnf_find_available (const gchar *cmd)
+pk_cnf_find_available (const gchar *cmd, guint max_search_time)
 {
 	PkPackage *item;
 	gchar **package_ids = NULL;
@@ -406,6 +418,7 @@ pk_cnf_find_available (const gchar *cmd)
 	PkBitfield filters;
 	PkResults *results = NULL;
 	PkError *error_code = NULL;
+	guint cancel_id;
 
 	/* create new array of full paths */
 	len = g_strv_length ((gchar **)prefixes);
@@ -413,6 +426,11 @@ pk_cnf_find_available (const gchar *cmd)
 	for (i=0; prefixes[i] != NULL; i++)
 		values[i] = g_build_filename (prefixes[i], cmd, NULL);
 
+	/* only allow searching for a limited amount of time */
+	cancel_id = g_timeout_add (max_search_time,
+				   (GSourceFunc) pk_cnf_cancel_cb,
+				   cancellable);
+
 	/* do search */
 	filters = pk_bitfield_from_enums (PK_FILTER_ENUM_NOT_INSTALLED,
 					  PK_FILTER_ENUM_NEWEST,
@@ -442,6 +460,8 @@ pk_cnf_find_available (const gchar *cmd)
 		package_ids[i] = g_strdup (pk_package_get_id (item));
 	}
 out:
+	if (cancel_id > 0)
+		g_source_remove (cancel_id);
 	if (error_code != NULL)
 		g_object_unref (error_code);
 	if (results != NULL)
@@ -534,12 +554,17 @@ pk_cnf_get_config (void)
 	config->software_source_search = g_key_file_get_boolean (file, "CommandNotFound", "SoftwareSourceSearch", NULL);
 	config->similar_name_search = g_key_file_get_boolean (file, "CommandNotFound", "SimilarNameSearch", NULL);
 	config->locations = g_key_file_get_string_list (file, "CommandNotFound", "SearchLocations", NULL, NULL);
+	config->max_search_time = g_key_file_get_integer (file, "CommandNotFound", "MaxSearchTime", NULL);
 
 	/* fallback */
 	if (config->locations == NULL) {
 		egg_warning ("not found SearchLocations, using fallback");
 		config->locations = g_strsplit ("/usr/bin;/usr/sbin", ";", -1);
 	}
+	if (config->max_search_time == 0) {
+		egg_warning ("not found MaxSearchTime, using fallback");
+		config->max_search_time = 2000;
+	}
 out:
 	g_free (path);
 	g_key_file_free (file);
@@ -764,7 +789,7 @@ main (int argc, char *argv[])
 
 	/* only search using PackageKit if configured to do so */
 	} else if (config->software_source_search) {
-		package_ids = pk_cnf_find_available (argv[1]);
+		package_ids = pk_cnf_find_available (argv[1], config->max_search_time);
 		if (package_ids == NULL)
 			goto out;
 		len = g_strv_length (package_ids);
commit a48a24afc49dc5ffb9bbd6d813f1ae182f152d89
Author: Richard Hughes <richard at hughsie.com>
Date:   Fri Jun 4 12:25:39 2010 +0100

    Only set a cancelled error after we've given the backend a fighting chance to process the request

diff --git a/src/pk-backend.c b/src/pk-backend.c
index 759e730..dbc8b4e 100644
--- a/src/pk-backend.c
+++ b/src/pk-backend.c
@@ -79,6 +79,16 @@
  */
 #define PK_BACKEND_FINISHED_TIMEOUT_GRACE	10 /* ms */
 
+
+/**
+ * PK_BACKEND_CANCEL_ACTION_TIMEOUT:
+ *
+ * The time in ms we cancel the transaction ourselves if the backend is ignoring
+ * us. This means the backend will still be running, but results will not be
+ * sent over the dbus interface.
+ */
+#define PK_BACKEND_CANCEL_ACTION_TIMEOUT	2000 /* ms */
+
 struct _PkBackendPrivate
 {
 	gboolean		 during_initialize;
@@ -106,6 +116,7 @@ struct _PkBackendPrivate
 	guint			 signal_error_timeout;
 	guint			 signal_finished;
 	guint			 speed;
+	guint			 cancel_id;
 	GHashTable		*eulas;
 	GModule			*handle;
 	GThread			*thread;
@@ -2489,6 +2500,9 @@ 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);
 	egg_debug ("parent_class->finalize");
@@ -2702,6 +2716,22 @@ 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) {
+		egg_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
@@ -2713,8 +2743,8 @@ pk_backend_cancel (PkBackend *backend)
 	backend->priv->desc->cancel (backend);
 
 	/* set an error if the backend didn't do it for us */
-	if (!backend->priv->set_error)
-		pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_CANCELLED, "transaction was cancelled");
+	backend->priv->cancel_id = g_timeout_add (PK_BACKEND_CANCEL_ACTION_TIMEOUT,
+						  (GSourceFunc) pk_backend_cancel_cb, backend);
 }
 
 /**
@@ -3141,6 +3171,7 @@ 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;
commit e340880c24ba0b121494b26f09bf586c96823c6c
Author: Richard Hughes <richard at hughsie.com>
Date:   Fri Jun 4 11:19:20 2010 +0100

    glib: Explicitly mark the library as LGPLv2 by using the correct boilerplate code

diff --git a/contrib/PackageKit.spec.in b/contrib/PackageKit.spec.in
index 8939599..8e0f9b4 100644
--- a/contrib/PackageKit.spec.in
+++ b/contrib/PackageKit.spec.in
@@ -7,7 +7,7 @@ Summary:   Package management service
 Name:      PackageKit
 Version:   #VERSION#
 Release:   0.#BUILD#%{?alphatag}%{?dist}
-License:   GPLv2+
+License:   GPLv2+ and LGPLv2+
 URL:       http://www.packagekit.org
 Source0:   http://www.packagekit.org/releases/%{name}-%{version}.tar.gz
 
diff --git a/lib/packagekit-glib2/COPYING b/lib/packagekit-glib2/COPYING
new file mode 100644
index 0000000..4362b49
--- /dev/null
+++ b/lib/packagekit-glib2/COPYING
@@ -0,0 +1,502 @@
+                  GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+                  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+                            NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+
+           How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the library's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library 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
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+  <signature of Ty Coon>, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
diff --git a/lib/packagekit-glib2/pk-bitfield.c b/lib/packagekit-glib2/pk-bitfield.c
index 38f8b70..2cdeb6a 100644
--- a/lib/packagekit-glib2/pk-bitfield.c
+++ b/lib/packagekit-glib2/pk-bitfield.c
@@ -2,21 +2,21 @@
  *
  * Copyright (C) 2007-2008 Richard Hughes <richard at hughsie.com>
  *
- * Licensed under the GNU General Public License Version 2
+ * Licensed under the GNU Lesser General Public License Version 2.1
  *
- * 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 library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library 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.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
 /**
diff --git a/lib/packagekit-glib2/pk-bitfield.h b/lib/packagekit-glib2/pk-bitfield.h
index 195c9a1..3c5a8e0 100644
--- a/lib/packagekit-glib2/pk-bitfield.h
+++ b/lib/packagekit-glib2/pk-bitfield.h
@@ -2,21 +2,21 @@
  *
  * Copyright (C) 2007-2008 Richard Hughes <richard at hughsie.com>
  *
- * Licensed under the GNU General Public License Version 2
+ * Licensed under the GNU Lesser General Public License Version 2.1
  *
- * 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 library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library 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.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
 #if !defined (__PACKAGEKIT_H_INSIDE__) && !defined (PK_COMPILATION)
diff --git a/lib/packagekit-glib2/pk-catalog.c b/lib/packagekit-glib2/pk-catalog.c
index 0bc2c4a..40dbbd9 100644
--- a/lib/packagekit-glib2/pk-catalog.c
+++ b/lib/packagekit-glib2/pk-catalog.c
@@ -2,21 +2,21 @@
  *
  * Copyright (C) 2008-2009 Richard Hughes <richard at hughsie.com>
  *
- * Licensed under the GNU General Public License Version 2
+ * Licensed under the GNU Lesser General Public License Version 2.1
  *
- * 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 library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library 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.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
 /**
diff --git a/lib/packagekit-glib2/pk-catalog.h b/lib/packagekit-glib2/pk-catalog.h
index 3501112..2e7c360 100644
--- a/lib/packagekit-glib2/pk-catalog.h
+++ b/lib/packagekit-glib2/pk-catalog.h
@@ -2,21 +2,21 @@
  *
  * Copyright (C) 2008-2009 Richard Hughes <richard at hughsie.com>
  *
- * Licensed under the GNU General Public License Version 2
+ * Licensed under the GNU Lesser General Public License Version 2.1
  *
- * 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 library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library 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.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
 #if !defined (__PACKAGEKIT_H_INSIDE__) && !defined (PK_COMPILATION)
diff --git a/lib/packagekit-glib2/pk-category.c b/lib/packagekit-glib2/pk-category.c
index 82cd79f..e71c4c4 100644
--- a/lib/packagekit-glib2/pk-category.c
+++ b/lib/packagekit-glib2/pk-category.c
@@ -2,21 +2,21 @@
  *
  * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
  *
- * Licensed under the GNU General Public License Version 2
+ * Licensed under the GNU Lesser General Public License Version 2.1
  *
- * 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 library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library 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.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
 /**
diff --git a/lib/packagekit-glib2/pk-category.h b/lib/packagekit-glib2/pk-category.h
index 3f90eb6..b1d8bbc 100644
--- a/lib/packagekit-glib2/pk-category.h
+++ b/lib/packagekit-glib2/pk-category.h
@@ -2,21 +2,21 @@
  *
  * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
  *
- * Licensed under the GNU General Public License Version 2
+ * Licensed under the GNU Lesser General Public License Version 2.1
  *
- * 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 library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library 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.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
 #if !defined (__PACKAGEKIT_H_INSIDE__) && !defined (PK_COMPILATION)
diff --git a/lib/packagekit-glib2/pk-client-sync.c b/lib/packagekit-glib2/pk-client-sync.c
index 9e9e5ad..3947683 100644
--- a/lib/packagekit-glib2/pk-client-sync.c
+++ b/lib/packagekit-glib2/pk-client-sync.c
@@ -2,21 +2,21 @@
  *
  * Copyright (C) 2008-2009 Richard Hughes <richard at hughsie.com>
  *
- * Licensed under the GNU General Public License Version 2
+ * Licensed under the GNU Lesser General Public License Version 2.1
  *
- * 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 library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library 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.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
 #include "config.h"
diff --git a/lib/packagekit-glib2/pk-client-sync.h b/lib/packagekit-glib2/pk-client-sync.h
index abfb2a2..f2068a9 100644
--- a/lib/packagekit-glib2/pk-client-sync.h
+++ b/lib/packagekit-glib2/pk-client-sync.h
@@ -2,21 +2,21 @@
  *
  * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
  *
- * Licensed under the GNU General Public License Version 2
+ * Licensed under the GNU Lesser General Public License Version 2.1
  *
- * 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 library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library 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.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
 #ifndef __PK_CLIENT_SYNC_H
diff --git a/lib/packagekit-glib2/pk-client.c b/lib/packagekit-glib2/pk-client.c
index f10972f..60d8d10 100644
--- a/lib/packagekit-glib2/pk-client.c
+++ b/lib/packagekit-glib2/pk-client.c
@@ -2,21 +2,21 @@
  *
  * Copyright (C) 2008 Richard Hughes <richard at hughsie.com>
  *
- * Licensed under the GNU General Public License Version 2
+ * Licensed under the GNU Lesser General Public License Version 2.1
  *
- * 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 library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library 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.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
 /**
diff --git a/lib/packagekit-glib2/pk-client.h b/lib/packagekit-glib2/pk-client.h
index d4e93a6..2643237 100644
--- a/lib/packagekit-glib2/pk-client.h
+++ b/lib/packagekit-glib2/pk-client.h
@@ -2,21 +2,21 @@
  *
  * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
  *
- * Licensed under the GNU General Public License Version 2
+ * Licensed under the GNU Lesser General Public License Version 2.1
  *
- * 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 library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library 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.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
 #if !defined (__PACKAGEKIT_H_INSIDE__) && !defined (PK_COMPILATION)
diff --git a/lib/packagekit-glib2/pk-common.c b/lib/packagekit-glib2/pk-common.c
index d07b103..a21c6a1 100644
--- a/lib/packagekit-glib2/pk-common.c
+++ b/lib/packagekit-glib2/pk-common.c
@@ -2,21 +2,21 @@
  *
  * Copyright (C) 2007-2008 Richard Hughes <richard at hughsie.com>
  *
- * Licensed under the GNU General Public License Version 2
+ * Licensed under the GNU Lesser General Public License Version 2.1
  *
- * 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 library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library 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.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
 /**
diff --git a/lib/packagekit-glib2/pk-common.h b/lib/packagekit-glib2/pk-common.h
index b93188e..2a9668d 100644
--- a/lib/packagekit-glib2/pk-common.h
+++ b/lib/packagekit-glib2/pk-common.h
@@ -2,21 +2,21 @@
  *
  * Copyright (C) 2007-2008 Richard Hughes <richard at hughsie.com>
  *
- * Licensed under the GNU General Public License Version 2
+ * Licensed under the GNU Lesser General Public License Version 2.1
  *
- * 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 library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library 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.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
 #if !defined (__PACKAGEKIT_H_INSIDE__) && !defined (PK_COMPILATION)
diff --git a/lib/packagekit-glib2/pk-console-shared.c b/lib/packagekit-glib2/pk-console-shared.c
index 7cfa6b7..c345d21 100644
--- a/lib/packagekit-glib2/pk-console-shared.c
+++ b/lib/packagekit-glib2/pk-console-shared.c
@@ -2,21 +2,21 @@
  *
  * Copyright (C) 2008-2009 Richard Hughes <richard at hughsie.com>
  *
- * Licensed under the GNU General Public License Version 2
+ * Licensed under the GNU Lesser General Public License Version 2.1
  *
- * 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 library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library 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.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
 #include "config.h"
diff --git a/lib/packagekit-glib2/pk-console-shared.h b/lib/packagekit-glib2/pk-console-shared.h
index a027741..12de4dc 100644
--- a/lib/packagekit-glib2/pk-console-shared.h
+++ b/lib/packagekit-glib2/pk-console-shared.h
@@ -2,21 +2,21 @@
  *
  * Copyright (C) 2008-2009 Richard Hughes <richard at hughsie.com>
  *
- * Licensed under the GNU General Public License Version 2
+ * Licensed under the GNU Lesser General Public License Version 2.1
  *
- * 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 library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library 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.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
 #ifndef __PK_CONSOLE_SHARED_H
diff --git a/lib/packagekit-glib2/pk-control-sync.c b/lib/packagekit-glib2/pk-control-sync.c
index 8da2ec0..3950f28 100644
--- a/lib/packagekit-glib2/pk-control-sync.c
+++ b/lib/packagekit-glib2/pk-control-sync.c
@@ -2,21 +2,21 @@
  *
  * Copyright (C) 2008-2009 Richard Hughes <richard at hughsie.com>
  *
- * Licensed under the GNU General Public License Version 2
+ * Licensed under the GNU Lesser General Public License Version 2.1
  *
- * 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 library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library 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.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
 #include "config.h"
diff --git a/lib/packagekit-glib2/pk-control-sync.h b/lib/packagekit-glib2/pk-control-sync.h
index c25f536..ed33006 100644
--- a/lib/packagekit-glib2/pk-control-sync.h
+++ b/lib/packagekit-glib2/pk-control-sync.h
@@ -2,21 +2,21 @@
  *
  * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
  *
- * Licensed under the GNU General Public License Version 2
+ * Licensed under the GNU Lesser General Public License Version 2.1
  *
- * 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 library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library 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.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
 #ifndef __PK_CONTROL_SYNC_H
diff --git a/lib/packagekit-glib2/pk-control.c b/lib/packagekit-glib2/pk-control.c
index 4982036..cf4d65b 100644
--- a/lib/packagekit-glib2/pk-control.c
+++ b/lib/packagekit-glib2/pk-control.c
@@ -2,21 +2,21 @@
  *
  * Copyright (C) 2008 Richard Hughes <richard at hughsie.com>
  *
- * Licensed under the GNU General Public License Version 2
+ * Licensed under the GNU Lesser General Public License Version 2.1
  *
- * 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 library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library 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.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
 /**
diff --git a/lib/packagekit-glib2/pk-control.h b/lib/packagekit-glib2/pk-control.h
index 7292cda..920629e 100644
--- a/lib/packagekit-glib2/pk-control.h
+++ b/lib/packagekit-glib2/pk-control.h
@@ -2,21 +2,21 @@
  *
  * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
  *
- * Licensed under the GNU General Public License Version 2
+ * Licensed under the GNU Lesser General Public License Version 2.1
  *
- * 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 library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library 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.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
 #if !defined (__PACKAGEKIT_H_INSIDE__) && !defined (PK_COMPILATION)
diff --git a/lib/packagekit-glib2/pk-desktop.c b/lib/packagekit-glib2/pk-desktop.c
index 80af9dd..ced2b74 100644
--- a/lib/packagekit-glib2/pk-desktop.c
+++ b/lib/packagekit-glib2/pk-desktop.c
@@ -2,21 +2,21 @@
  *
  * Copyright (C) 2008 Richard Hughes <richard at hughsie.com>
  *
- * Licensed under the GNU General Public License Version 2
+ * Licensed under the GNU Lesser General Public License Version 2.1
  *
- * 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 library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library 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.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
 /**
diff --git a/lib/packagekit-glib2/pk-desktop.h b/lib/packagekit-glib2/pk-desktop.h
index d3292a1..92ff8ed 100644
--- a/lib/packagekit-glib2/pk-desktop.h
+++ b/lib/packagekit-glib2/pk-desktop.h
@@ -2,21 +2,21 @@
  *
  * Copyright (C) 2008 Richard Hughes <richard at hughsie.com>
  *
- * Licensed under the GNU General Public License Version 2
+ * Licensed under the GNU Lesser General Public License Version 2.1
  *
- * 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 library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library 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.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
 #if !defined (__PACKAGEKIT_H_INSIDE__) && !defined (PK_COMPILATION)
diff --git a/lib/packagekit-glib2/pk-details.c b/lib/packagekit-glib2/pk-details.c
index 2f1f3b3..2a38db5 100644
--- a/lib/packagekit-glib2/pk-details.c
+++ b/lib/packagekit-glib2/pk-details.c
@@ -2,21 +2,21 @@
  *
  * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
  *
- * Licensed under the GNU General Public License Version 2
+ * Licensed under the GNU Lesser General Public License Version 2.1
  *
- * 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 library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library 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.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
 /**
diff --git a/lib/packagekit-glib2/pk-details.h b/lib/packagekit-glib2/pk-details.h
index 423754d..eb4982b 100644
--- a/lib/packagekit-glib2/pk-details.h
+++ b/lib/packagekit-glib2/pk-details.h
@@ -2,21 +2,21 @@
  *
  * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
  *
- * Licensed under the GNU General Public License Version 2
+ * Licensed under the GNU Lesser General Public License Version 2.1
  *
- * 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 library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library 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.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
 #if !defined (__PACKAGEKIT_H_INSIDE__) && !defined (PK_COMPILATION)
diff --git a/lib/packagekit-glib2/pk-distro-upgrade.c b/lib/packagekit-glib2/pk-distro-upgrade.c
index 7728b32..4aff032 100644
--- a/lib/packagekit-glib2/pk-distro-upgrade.c
+++ b/lib/packagekit-glib2/pk-distro-upgrade.c
@@ -2,21 +2,21 @@
  *
  * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
  *
- * Licensed under the GNU General Public License Version 2
+ * Licensed under the GNU Lesser General Public License Version 2.1
  *
- * 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 library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library 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.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
 /**
diff --git a/lib/packagekit-glib2/pk-distro-upgrade.h b/lib/packagekit-glib2/pk-distro-upgrade.h
index 5d6cd33..a9ba9d1 100644
--- a/lib/packagekit-glib2/pk-distro-upgrade.h
+++ b/lib/packagekit-glib2/pk-distro-upgrade.h
@@ -2,21 +2,21 @@
  *
  * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
  *
- * Licensed under the GNU General Public License Version 2
+ * Licensed under the GNU Lesser General Public License Version 2.1
  *
- * 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 library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library 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.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
 #if !defined (__PACKAGEKIT_H_INSIDE__) && !defined (PK_COMPILATION)
diff --git a/lib/packagekit-glib2/pk-enum.c b/lib/packagekit-glib2/pk-enum.c
index a8de42f..3daee63 100644
--- a/lib/packagekit-glib2/pk-enum.c
+++ b/lib/packagekit-glib2/pk-enum.c
@@ -2,21 +2,21 @@
  *
  * Copyright (C) 2007-2008 Richard Hughes <richard at hughsie.com>
  *
- * Licensed under the GNU General Public License Version 2
+ * Licensed under the GNU Lesser General Public License Version 2.1
  *
- * 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 library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library 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.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
 /**
diff --git a/lib/packagekit-glib2/pk-enum.h b/lib/packagekit-glib2/pk-enum.h
index 2b121b7..984d1fe 100644
--- a/lib/packagekit-glib2/pk-enum.h
+++ b/lib/packagekit-glib2/pk-enum.h
@@ -2,21 +2,21 @@
  *
  * Copyright (C) 2007-2008 Richard Hughes <richard at hughsie.com>
  *
- * Licensed under the GNU General Public License Version 2
+ * Licensed under the GNU Lesser General Public License Version 2.1
  *
- * 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 library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library 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.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
 #if !defined (__PACKAGEKIT_H_INSIDE__) && !defined (PK_COMPILATION)
diff --git a/lib/packagekit-glib2/pk-error.c b/lib/packagekit-glib2/pk-error.c
index 4d2b86b..284a7e9 100644
--- a/lib/packagekit-glib2/pk-error.c
+++ b/lib/packagekit-glib2/pk-error.c
@@ -2,21 +2,21 @@
  *
  * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
  *
- * Licensed under the GNU General Public License Version 2
+ * Licensed under the GNU Lesser General Public License Version 2.1
  *
- * 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 library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library 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.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
 /**
diff --git a/lib/packagekit-glib2/pk-error.h b/lib/packagekit-glib2/pk-error.h
index 44f5472..933df47 100644
--- a/lib/packagekit-glib2/pk-error.h
+++ b/lib/packagekit-glib2/pk-error.h
@@ -2,21 +2,21 @@
  *
  * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
  *
- * Licensed under the GNU General Public License Version 2
+ * Licensed under the GNU Lesser General Public License Version 2.1
  *
- * 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 library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library 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.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
 #if !defined (__PACKAGEKIT_H_INSIDE__) && !defined (PK_COMPILATION)
diff --git a/lib/packagekit-glib2/pk-eula-required.c b/lib/packagekit-glib2/pk-eula-required.c
index 0525af4..8adb764 100644
--- a/lib/packagekit-glib2/pk-eula-required.c
+++ b/lib/packagekit-glib2/pk-eula-required.c
@@ -2,21 +2,21 @@
  *
  * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
  *
- * Licensed under the GNU General Public License Version 2
+ * Licensed under the GNU Lesser General Public License Version 2.1
  *
- * 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 library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library 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.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
 /**
diff --git a/lib/packagekit-glib2/pk-eula-required.h b/lib/packagekit-glib2/pk-eula-required.h
index bba8877..7ebafc0 100644
--- a/lib/packagekit-glib2/pk-eula-required.h
+++ b/lib/packagekit-glib2/pk-eula-required.h
@@ -2,21 +2,21 @@
  *
  * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
  *
- * Licensed under the GNU General Public License Version 2
+ * Licensed under the GNU Lesser General Public License Version 2.1
  *
- * 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 library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library 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.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
 #if !defined (__PACKAGEKIT_H_INSIDE__) && !defined (PK_COMPILATION)
diff --git a/lib/packagekit-glib2/pk-files.c b/lib/packagekit-glib2/pk-files.c
index 6243a14..3061990 100644
--- a/lib/packagekit-glib2/pk-files.c
+++ b/lib/packagekit-glib2/pk-files.c
@@ -2,21 +2,21 @@
  *
  * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
  *
- * Licensed under the GNU General Public License Version 2
+ * Licensed under the GNU Lesser General Public License Version 2.1
  *
- * 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 library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library 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.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
 /**
diff --git a/lib/packagekit-glib2/pk-files.h b/lib/packagekit-glib2/pk-files.h
index a2a9d07..2b42930 100644
--- a/lib/packagekit-glib2/pk-files.h
+++ b/lib/packagekit-glib2/pk-files.h
@@ -2,21 +2,21 @@
  *
  * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
  *
- * Licensed under the GNU General Public License Version 2
+ * Licensed under the GNU Lesser General Public License Version 2.1
  *
- * 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 library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library 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.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
 #if !defined (__PACKAGEKIT_H_INSIDE__) && !defined (PK_COMPILATION)
diff --git a/lib/packagekit-glib2/pk-media-change-required.c b/lib/packagekit-glib2/pk-media-change-required.c
index be69131..8a694f7 100644
--- a/lib/packagekit-glib2/pk-media-change-required.c
+++ b/lib/packagekit-glib2/pk-media-change-required.c
@@ -2,21 +2,21 @@
  *
  * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
  *
- * Licensed under the GNU General Public License Version 2
+ * Licensed under the GNU Lesser General Public License Version 2.1
  *
- * 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 library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library 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.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
 /**
diff --git a/lib/packagekit-glib2/pk-media-change-required.h b/lib/packagekit-glib2/pk-media-change-required.h
index b7b4b01..026b6a0 100644
--- a/lib/packagekit-glib2/pk-media-change-required.h
+++ b/lib/packagekit-glib2/pk-media-change-required.h
@@ -2,21 +2,21 @@
  *
  * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
  *
- * Licensed under the GNU General Public License Version 2
+ * Licensed under the GNU Lesser General Public License Version 2.1
  *
- * 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 library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library 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.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
 #if !defined (__PACKAGEKIT_H_INSIDE__) && !defined (PK_COMPILATION)
diff --git a/lib/packagekit-glib2/pk-message.c b/lib/packagekit-glib2/pk-message.c
index 96beb0e..e3286f1 100644
--- a/lib/packagekit-glib2/pk-message.c
+++ b/lib/packagekit-glib2/pk-message.c
@@ -2,21 +2,21 @@
  *
  * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
  *
- * Licensed under the GNU General Public License Version 2
+ * Licensed under the GNU Lesser General Public License Version 2.1
  *
- * 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 library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library 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.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
 /**
diff --git a/lib/packagekit-glib2/pk-message.h b/lib/packagekit-glib2/pk-message.h
index c329bf0..4214476 100644
--- a/lib/packagekit-glib2/pk-message.h
+++ b/lib/packagekit-glib2/pk-message.h
@@ -2,21 +2,21 @@
  *
  * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
  *
- * Licensed under the GNU General Public License Version 2
+ * Licensed under the GNU Lesser General Public License Version 2.1
  *
- * 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 library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library 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.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
 #if !defined (__PACKAGEKIT_H_INSIDE__) && !defined (PK_COMPILATION)
diff --git a/lib/packagekit-glib2/pk-package-id.c b/lib/packagekit-glib2/pk-package-id.c
index 425e722..6c671f2 100644
--- a/lib/packagekit-glib2/pk-package-id.c
+++ b/lib/packagekit-glib2/pk-package-id.c
@@ -2,21 +2,21 @@
  *
  * Copyright (C) 2007-2009 Richard Hughes <richard at hughsie.com>
  *
- * Licensed under the GNU General Public License Version 2
+ * Licensed under the GNU Lesser General Public License Version 2.1
  *
- * 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 library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library 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.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
 /**
diff --git a/lib/packagekit-glib2/pk-package-id.h b/lib/packagekit-glib2/pk-package-id.h
index 63b6402..38c9ce5 100644
--- a/lib/packagekit-glib2/pk-package-id.h
+++ b/lib/packagekit-glib2/pk-package-id.h
@@ -2,21 +2,21 @@
  *
  * Copyright (C) 2007-2008 Richard Hughes <richard at hughsie.com>
  *
- * Licensed under the GNU General Public License Version 2
+ * Licensed under the GNU Lesser General Public License Version 2.1
  *
- * 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 library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library 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.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
 #if !defined (__PACKAGEKIT_H_INSIDE__) && !defined (PK_COMPILATION)
diff --git a/lib/packagekit-glib2/pk-package-ids.c b/lib/packagekit-glib2/pk-package-ids.c
index b9c05dc..a8a1809 100644
--- a/lib/packagekit-glib2/pk-package-ids.c
+++ b/lib/packagekit-glib2/pk-package-ids.c
@@ -2,21 +2,21 @@
  *
  * Copyright (C) 2008-2009 Richard Hughes <richard at hughsie.com>
  *
- * Licensed under the GNU General Public License Version 2
+ * Licensed under the GNU Lesser General Public License Version 2.1
  *
- * 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 library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library 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.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
 /**
diff --git a/lib/packagekit-glib2/pk-package-ids.h b/lib/packagekit-glib2/pk-package-ids.h
index dd8816e..35d639d 100644
--- a/lib/packagekit-glib2/pk-package-ids.h
+++ b/lib/packagekit-glib2/pk-package-ids.h
@@ -2,21 +2,21 @@
  *
  * Copyright (C) 2008-2009 Richard Hughes <richard at hughsie.com>
  *
- * Licensed under the GNU General Public License Version 2
+ * Licensed under the GNU Lesser General Public License Version 2.1
  *
- * 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 library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library 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.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
 #if !defined (__PACKAGEKIT_H_INSIDE__) && !defined (PK_COMPILATION)
diff --git a/lib/packagekit-glib2/pk-package-sack-sync.c b/lib/packagekit-glib2/pk-package-sack-sync.c
index 6ba6102..5e42876 100644
--- a/lib/packagekit-glib2/pk-package-sack-sync.c
+++ b/lib/packagekit-glib2/pk-package-sack-sync.c
@@ -2,21 +2,21 @@
  *
  * Copyright (C) 2008-2009 Richard Hughes <richard at hughsie.com>
  *
- * Licensed under the GNU General Public License Version 2
+ * Licensed under the GNU Lesser General Public License Version 2.1
  *
- * 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 library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library 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.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
 #include "config.h"
diff --git a/lib/packagekit-glib2/pk-package-sack-sync.h b/lib/packagekit-glib2/pk-package-sack-sync.h
index 778bacc..c17d897 100644
--- a/lib/packagekit-glib2/pk-package-sack-sync.h
+++ b/lib/packagekit-glib2/pk-package-sack-sync.h
@@ -2,21 +2,21 @@
  *
  * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
  *
- * Licensed under the GNU General Public License Version 2
+ * Licensed under the GNU Lesser General Public License Version 2.1
  *
- * 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 library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library 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.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
 #ifndef __PK_PACKAGE_SACK_SYNC_H
diff --git a/lib/packagekit-glib2/pk-package-sack.c b/lib/packagekit-glib2/pk-package-sack.c
index 29e895b..2f02286 100644
--- a/lib/packagekit-glib2/pk-package-sack.c
+++ b/lib/packagekit-glib2/pk-package-sack.c
@@ -2,21 +2,21 @@
  *
  * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
  *
- * Licensed under the GNU General Public License Version 2
+ * Licensed under the GNU Lesser General Public License Version 2.1
  *
- * 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 library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library 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.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
 /**
diff --git a/lib/packagekit-glib2/pk-package-sack.h b/lib/packagekit-glib2/pk-package-sack.h
index a05665c..56f00e2 100644
--- a/lib/packagekit-glib2/pk-package-sack.h
+++ b/lib/packagekit-glib2/pk-package-sack.h
@@ -2,21 +2,21 @@
  *
  * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
  *
- * Licensed under the GNU General Public License Version 2
+ * Licensed under the GNU Lesser General Public License Version 2.1
  *
- * 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 library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library 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.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
 #if !defined (__PACKAGEKIT_H_INSIDE__) && !defined (PK_COMPILATION)
diff --git a/lib/packagekit-glib2/pk-package.c b/lib/packagekit-glib2/pk-package.c
index 8fe7dad..5235689 100644
--- a/lib/packagekit-glib2/pk-package.c
+++ b/lib/packagekit-glib2/pk-package.c
@@ -2,21 +2,21 @@
  *
  * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
  *
- * Licensed under the GNU General Public License Version 2
+ * Licensed under the GNU Lesser General Public License Version 2.1
  *
- * 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 library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library 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.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
 /**
diff --git a/lib/packagekit-glib2/pk-package.h b/lib/packagekit-glib2/pk-package.h
index 96a7a40..60d0a10 100644
--- a/lib/packagekit-glib2/pk-package.h
+++ b/lib/packagekit-glib2/pk-package.h
@@ -2,21 +2,21 @@
  *
  * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
  *
- * Licensed under the GNU General Public License Version 2
+ * Licensed under the GNU Lesser General Public License Version 2.1
  *
- * 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 library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library 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.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
 #if !defined (__PACKAGEKIT_H_INSIDE__) && !defined (PK_COMPILATION)
diff --git a/lib/packagekit-glib2/pk-progress-bar.c b/lib/packagekit-glib2/pk-progress-bar.c
index e14389c..113824d 100644
--- a/lib/packagekit-glib2/pk-progress-bar.c
+++ b/lib/packagekit-glib2/pk-progress-bar.c
@@ -2,21 +2,21 @@
  *
  * Copyright (C) 2008-2009 Richard Hughes <richard at hughsie.com>
  *
- * Licensed under the GNU General Public License Version 2
+ * Licensed under the GNU Lesser General Public License Version 2.1
  *
- * 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 library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library 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.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
 #include <glib.h>
diff --git a/lib/packagekit-glib2/pk-progress-bar.h b/lib/packagekit-glib2/pk-progress-bar.h
index 7b534e1..b31ed52 100644
--- a/lib/packagekit-glib2/pk-progress-bar.h
+++ b/lib/packagekit-glib2/pk-progress-bar.h
@@ -2,21 +2,21 @@
  *
  * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
  *
- * Licensed under the GNU General Public License Version 2
+ * Licensed under the GNU Lesser General Public License Version 2.1
  *
- * 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 library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library 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.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
 #ifndef __PK_PROGRESS_BAR_H
diff --git a/lib/packagekit-glib2/pk-progress.c b/lib/packagekit-glib2/pk-progress.c
index 19a0693..0be34a8 100644
--- a/lib/packagekit-glib2/pk-progress.c
+++ b/lib/packagekit-glib2/pk-progress.c
@@ -2,21 +2,21 @@
  *
  * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
  *
- * Licensed under the GNU General Public License Version 2
+ * Licensed under the GNU Lesser General Public License Version 2.1
  *
- * 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 library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library 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.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
 /**
diff --git a/lib/packagekit-glib2/pk-progress.h b/lib/packagekit-glib2/pk-progress.h
index 3aada72..ff961cb 100644
--- a/lib/packagekit-glib2/pk-progress.h
+++ b/lib/packagekit-glib2/pk-progress.h
@@ -2,21 +2,21 @@
  *
  * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
  *
- * Licensed under the GNU General Public License Version 2
+ * Licensed under the GNU Lesser General Public License Version 2.1
  *
- * 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 library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library 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.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
 #if !defined (__PACKAGEKIT_H_INSIDE__) && !defined (PK_COMPILATION)
diff --git a/lib/packagekit-glib2/pk-repo-detail.c b/lib/packagekit-glib2/pk-repo-detail.c
index a729b66..af22127 100644
--- a/lib/packagekit-glib2/pk-repo-detail.c
+++ b/lib/packagekit-glib2/pk-repo-detail.c
@@ -2,21 +2,21 @@
  *
  * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
  *
- * Licensed under the GNU General Public License Version 2
+ * Licensed under the GNU Lesser General Public License Version 2.1
  *
- * 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 library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library 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.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
 /**
diff --git a/lib/packagekit-glib2/pk-repo-detail.h b/lib/packagekit-glib2/pk-repo-detail.h
index 4d8aebb..a6bcda9 100644
--- a/lib/packagekit-glib2/pk-repo-detail.h
+++ b/lib/packagekit-glib2/pk-repo-detail.h
@@ -2,21 +2,21 @@
  *
  * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
  *
- * Licensed under the GNU General Public License Version 2
+ * Licensed under the GNU Lesser General Public License Version 2.1
  *
- * 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 library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library 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.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
 #if !defined (__PACKAGEKIT_H_INSIDE__) && !defined (PK_COMPILATION)
diff --git a/lib/packagekit-glib2/pk-repo-signature-required.c b/lib/packagekit-glib2/pk-repo-signature-required.c
index 24a81e4..2518923 100644
--- a/lib/packagekit-glib2/pk-repo-signature-required.c
+++ b/lib/packagekit-glib2/pk-repo-signature-required.c
@@ -2,21 +2,21 @@
  *
  * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
  *
- * Licensed under the GNU General Public License Version 2
+ * Licensed under the GNU Lesser General Public License Version 2.1
  *
- * 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 library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library 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.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
 /**
diff --git a/lib/packagekit-glib2/pk-repo-signature-required.h b/lib/packagekit-glib2/pk-repo-signature-required.h
index 78752e5..10a0c8d 100644
--- a/lib/packagekit-glib2/pk-repo-signature-required.h
+++ b/lib/packagekit-glib2/pk-repo-signature-required.h
@@ -2,21 +2,21 @@
  *
  * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
  *
- * Licensed under the GNU General Public License Version 2
+ * Licensed under the GNU Lesser General Public License Version 2.1
  *
- * 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 library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library 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.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
 #if !defined (__PACKAGEKIT_H_INSIDE__) && !defined (PK_COMPILATION)
diff --git a/lib/packagekit-glib2/pk-require-restart.c b/lib/packagekit-glib2/pk-require-restart.c
index 2fb9eb6..8acbd23 100644
--- a/lib/packagekit-glib2/pk-require-restart.c
+++ b/lib/packagekit-glib2/pk-require-restart.c
@@ -2,21 +2,21 @@
  *
  * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
  *
- * Licensed under the GNU General Public License Version 2
+ * Licensed under the GNU Lesser General Public License Version 2.1
  *
- * 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 library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library 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.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
 /**
diff --git a/lib/packagekit-glib2/pk-require-restart.h b/lib/packagekit-glib2/pk-require-restart.h
index daed242..2f13879 100644
--- a/lib/packagekit-glib2/pk-require-restart.h
+++ b/lib/packagekit-glib2/pk-require-restart.h
@@ -2,21 +2,21 @@
  *
  * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
  *
- * Licensed under the GNU General Public License Version 2
+ * Licensed under the GNU Lesser General Public License Version 2.1
  *
- * 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 library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library 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.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
 #if !defined (__PACKAGEKIT_H_INSIDE__) && !defined (PK_COMPILATION)
diff --git a/lib/packagekit-glib2/pk-results.c b/lib/packagekit-glib2/pk-results.c
index 30c25c3..a627dff 100644
--- a/lib/packagekit-glib2/pk-results.c
+++ b/lib/packagekit-glib2/pk-results.c
@@ -2,21 +2,21 @@
  *
  * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
  *
- * Licensed under the GNU General Public License Version 2
+ * Licensed under the GNU Lesser General Public License Version 2.1
  *
- * 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 library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library 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.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
 /**
diff --git a/lib/packagekit-glib2/pk-results.h b/lib/packagekit-glib2/pk-results.h
index aa82e38..2c26fe1 100644
--- a/lib/packagekit-glib2/pk-results.h
+++ b/lib/packagekit-glib2/pk-results.h
@@ -2,21 +2,21 @@
  *
  * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
  *
- * Licensed under the GNU General Public License Version 2
+ * Licensed under the GNU Lesser General Public License Version 2.1
  *
- * 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 library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library 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.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
 #if !defined (__PACKAGEKIT_H_INSIDE__) && !defined (PK_COMPILATION)
diff --git a/lib/packagekit-glib2/pk-self-test.c b/lib/packagekit-glib2/pk-self-test.c
index 97e1240..2b5fa56 100644
--- a/lib/packagekit-glib2/pk-self-test.c
+++ b/lib/packagekit-glib2/pk-self-test.c
@@ -2,21 +2,21 @@
  *
  * Copyright (C) 2007-2009 Richard Hughes <richard at hughsie.com>
  *
- * Licensed under the GNU General Public License Version 2
+ * Licensed under the GNU Lesser General Public License Version 2.1
  *
- * 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 library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library 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.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
 #include "config.h"
diff --git a/lib/packagekit-glib2/pk-service-pack.c b/lib/packagekit-glib2/pk-service-pack.c
index 3a70105..110e603 100644
--- a/lib/packagekit-glib2/pk-service-pack.c
+++ b/lib/packagekit-glib2/pk-service-pack.c
@@ -3,21 +3,21 @@
  * Copyright (C) 2008-2009 Richard Hughes <richard at hughsie.com>
  * Copyright (C) 2008 Shishir Goel <crazyontheedge at gmail.com>
  *
- * Licensed under the GNU General Public License Version 2
+ * Licensed under the GNU Lesser General Public License Version 2.1
  *
- * 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 library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library 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.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
 /**
diff --git a/lib/packagekit-glib2/pk-service-pack.h b/lib/packagekit-glib2/pk-service-pack.h
index e52726a..3a7cbeb 100644
--- a/lib/packagekit-glib2/pk-service-pack.h
+++ b/lib/packagekit-glib2/pk-service-pack.h
@@ -2,21 +2,21 @@
  *
  * Copyright (C) 2008-2009 Richard Hughes <richard at hughsie.com>
  *
- * Licensed under the GNU General Public License Version 2
+ * Licensed under the GNU Lesser General Public License Version 2.1
  *
- * 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 library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library 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.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
 #if !defined (__PACKAGEKIT_H_INSIDE__) && !defined (PK_COMPILATION)
diff --git a/lib/packagekit-glib2/pk-source.c b/lib/packagekit-glib2/pk-source.c
index 7bc2f9b..603500d 100644
--- a/lib/packagekit-glib2/pk-source.c
+++ b/lib/packagekit-glib2/pk-source.c
@@ -2,21 +2,21 @@
  *
  * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
  *
- * Licensed under the GNU General Public License Version 2
+ * Licensed under the GNU Lesser General Public License Version 2.1
  *
- * 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 library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library 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.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
 /**
diff --git a/lib/packagekit-glib2/pk-source.h b/lib/packagekit-glib2/pk-source.h
index 5230af9..25a7bb9 100644
--- a/lib/packagekit-glib2/pk-source.h
+++ b/lib/packagekit-glib2/pk-source.h
@@ -2,21 +2,21 @@
  *
  * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
  *
- * Licensed under the GNU General Public License Version 2
+ * Licensed under the GNU Lesser General Public License Version 2.1
  *
- * 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 library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library 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.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
 #if !defined (__PACKAGEKIT_H_INSIDE__) && !defined (PK_COMPILATION)
diff --git a/lib/packagekit-glib2/pk-task-sync.c b/lib/packagekit-glib2/pk-task-sync.c
index a6b9b9c..331b975 100644
--- a/lib/packagekit-glib2/pk-task-sync.c
+++ b/lib/packagekit-glib2/pk-task-sync.c
@@ -2,21 +2,21 @@
  *
  * Copyright (C) 2008-2009 Richard Hughes <richard at hughsie.com>
  *
- * Licensed under the GNU General Public License Version 2
+ * Licensed under the GNU Lesser General Public License Version 2.1
  *
- * 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 library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library 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.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
 #include "config.h"
diff --git a/lib/packagekit-glib2/pk-task-sync.h b/lib/packagekit-glib2/pk-task-sync.h
index 666f83b..fb9fc35 100644
--- a/lib/packagekit-glib2/pk-task-sync.h
+++ b/lib/packagekit-glib2/pk-task-sync.h
@@ -2,21 +2,21 @@
  *
  * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
  *
- * Licensed under the GNU General Public License Version 2
+ * Licensed under the GNU Lesser General Public License Version 2.1
  *
- * 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 library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library 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.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
 #ifndef __PK_TASK_SYNC_H
diff --git a/lib/packagekit-glib2/pk-task-text.c b/lib/packagekit-glib2/pk-task-text.c
index bd37c85..b576d5e 100644
--- a/lib/packagekit-glib2/pk-task-text.c
+++ b/lib/packagekit-glib2/pk-task-text.c
@@ -2,21 +2,21 @@
  *
  * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
  *
- * Licensed under the GNU General Public License Version 2
+ * Licensed under the GNU Lesser General Public License Version 2.1
  *
- * 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 library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library 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.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
 #include "config.h"
diff --git a/lib/packagekit-glib2/pk-task-text.h b/lib/packagekit-glib2/pk-task-text.h
index 697ccc9..5885aa2 100644
--- a/lib/packagekit-glib2/pk-task-text.h
+++ b/lib/packagekit-glib2/pk-task-text.h
@@ -2,21 +2,21 @@
  *
  * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
  *
- * Licensed under the GNU General Public License Version 2
+ * Licensed under the GNU Lesser General Public License Version 2.1
  *
- * 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 library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library 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.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
 #ifndef __PK_TASK_TEXT_H
diff --git a/lib/packagekit-glib2/pk-task-wrapper.c b/lib/packagekit-glib2/pk-task-wrapper.c
index 732e621..4bfbcb2 100644
--- a/lib/packagekit-glib2/pk-task-wrapper.c
+++ b/lib/packagekit-glib2/pk-task-wrapper.c
@@ -2,21 +2,21 @@
  *
  * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
  *
- * Licensed under the GNU General Public License Version 2
+ * Licensed under the GNU Lesser General Public License Version 2.1
  *
- * 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 library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library 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.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
 #include "config.h"
diff --git a/lib/packagekit-glib2/pk-task-wrapper.h b/lib/packagekit-glib2/pk-task-wrapper.h
index 13d1356..2e50851 100644
--- a/lib/packagekit-glib2/pk-task-wrapper.h
+++ b/lib/packagekit-glib2/pk-task-wrapper.h
@@ -2,21 +2,21 @@
  *
  * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
  *
- * Licensed under the GNU General Public License Version 2
+ * Licensed under the GNU Lesser General Public License Version 2.1
  *
- * 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 library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library 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.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
 #ifndef __PK_TASK_WRAPPER_H
diff --git a/lib/packagekit-glib2/pk-task.c b/lib/packagekit-glib2/pk-task.c
index c2fa44d..bd4755a 100644
--- a/lib/packagekit-glib2/pk-task.c
+++ b/lib/packagekit-glib2/pk-task.c
@@ -2,21 +2,21 @@
  *
  * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
  *
- * Licensed under the GNU General Public License Version 2
+ * Licensed under the GNU Lesser General Public License Version 2.1
  *
- * 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 library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library 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.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
 /**
diff --git a/lib/packagekit-glib2/pk-task.h b/lib/packagekit-glib2/pk-task.h
index 16f36df..14371e3 100644
--- a/lib/packagekit-glib2/pk-task.h
+++ b/lib/packagekit-glib2/pk-task.h
@@ -2,21 +2,21 @@
  *
  * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
  *
- * Licensed under the GNU General Public License Version 2
+ * Licensed under the GNU Lesser General Public License Version 2.1
  *
- * 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 library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library 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.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
 #if !defined (__PACKAGEKIT_H_INSIDE__) && !defined (PK_COMPILATION)
diff --git a/lib/packagekit-glib2/pk-transaction-list.c b/lib/packagekit-glib2/pk-transaction-list.c
index 47b8edb..f6b14d7 100644
--- a/lib/packagekit-glib2/pk-transaction-list.c
+++ b/lib/packagekit-glib2/pk-transaction-list.c
@@ -2,21 +2,21 @@
  *
  * Copyright (C) 2007-2009 Richard Hughes <richard at hughsie.com>
  *
- * Licensed under the GNU General Public License Version 2
+ * Licensed under the GNU Lesser General Public License Version 2.1
  *
- * 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 library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library 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.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
 /**
diff --git a/lib/packagekit-glib2/pk-transaction-list.h b/lib/packagekit-glib2/pk-transaction-list.h
index b1990f0..4e2a78d 100644
--- a/lib/packagekit-glib2/pk-transaction-list.h
+++ b/lib/packagekit-glib2/pk-transaction-list.h
@@ -2,21 +2,21 @@
  *
  * Copyright (C) 2007-2009 Richard Hughes <richard at hughsie.com>
  *
- * Licensed under the GNU General Public License Version 2
+ * Licensed under the GNU Lesser General Public License Version 2.1
  *
- * 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 library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library 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.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
 #if !defined (__PACKAGEKIT_H_INSIDE__) && !defined (PK_COMPILATION)
diff --git a/lib/packagekit-glib2/pk-transaction-past.c b/lib/packagekit-glib2/pk-transaction-past.c
index a680e25..9b19eef 100644
--- a/lib/packagekit-glib2/pk-transaction-past.c
+++ b/lib/packagekit-glib2/pk-transaction-past.c
@@ -2,21 +2,21 @@
  *
  * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
  *
- * Licensed under the GNU General Public License Version 2
+ * Licensed under the GNU Lesser General Public License Version 2.1
  *
- * 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 library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library 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.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
 /**
diff --git a/lib/packagekit-glib2/pk-transaction-past.h b/lib/packagekit-glib2/pk-transaction-past.h
index a9a9518..fcec8a5 100644
--- a/lib/packagekit-glib2/pk-transaction-past.h
+++ b/lib/packagekit-glib2/pk-transaction-past.h
@@ -2,21 +2,21 @@
  *
  * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
  *
- * Licensed under the GNU General Public License Version 2
+ * Licensed under the GNU Lesser General Public License Version 2.1
  *
- * 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 library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library 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.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
 #if !defined (__PACKAGEKIT_H_INSIDE__) && !defined (PK_COMPILATION)
diff --git a/lib/packagekit-glib2/pk-update-detail.c b/lib/packagekit-glib2/pk-update-detail.c
index ab80a69..9fa66fd 100644
--- a/lib/packagekit-glib2/pk-update-detail.c
+++ b/lib/packagekit-glib2/pk-update-detail.c
@@ -2,21 +2,21 @@
  *
  * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
  *
- * Licensed under the GNU General Public License Version 2
+ * Licensed under the GNU Lesser General Public License Version 2.1
  *
- * 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 library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library 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.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
 /**
diff --git a/lib/packagekit-glib2/pk-update-detail.h b/lib/packagekit-glib2/pk-update-detail.h
index d1f01b9..025090f 100644
--- a/lib/packagekit-glib2/pk-update-detail.h
+++ b/lib/packagekit-glib2/pk-update-detail.h
@@ -2,21 +2,21 @@
  *
  * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
  *
- * Licensed under the GNU General Public License Version 2
+ * Licensed under the GNU Lesser General Public License Version 2.1
  *
- * 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 library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library 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.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
 #if !defined (__PACKAGEKIT_H_INSIDE__) && !defined (PK_COMPILATION)
commit 0e8e984dff58fcb8ee073fc9f9e7d3b997123590
Author: zerng07 <zerng07 at fedoraproject.org>
Date:   Thu Jun 3 14:47:30 2010 +0000

    l10n: Updates to Chinese (Taiwan) (zh_TW) translation
    
    Transmitted-via: Transifex (translate.fedoraproject.org)

diff --git a/po/zh_TW.po b/po/zh_TW.po
index b7d3a2c..f47283f 100644
--- a/po/zh_TW.po
+++ b/po/zh_TW.po
@@ -9,7 +9,7 @@ msgstr ""
 "Project-Id-Version: packagekit.master\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2010-05-04 11:16+0000\n"
-"PO-Revision-Date: 2010-05-05 18:03+0800\n"
+"PO-Revision-Date: 2010-06-03 22:44+0800\n"
 "Last-Translator: Cheng-Chia Tseng <pswo10680 at gmail.com>\n"
 "Language-Team: chinese-l10n at googlegroups.com\n"
 "MIME-Version: 1.0\n"
@@ -201,7 +201,7 @@ msgstr "狀態"
 #. TRANSLATORS: details about the update, date the update was issued
 #: ../client/pk-console.c:386
 msgid "Issued"
-msgstr "已發佈的"
+msgstr "已發佈"
 
 #. TRANSLATORS: details about the update, date the update was updated
 #. TRANSLATORS: The action of the package, in past tense
@@ -233,12 +233,12 @@ msgstr "需要重新啟動作業階段:"
 #. TRANSLATORS: a package requires the system to be restarted due to a security update
 #: ../client/pk-console.c:467
 msgid "System restart (security) required by:"
-msgstr "系統重新啟動(安全性)被此需求:"
+msgstr "系統重新啟動 (安全性) 被此需求:"
 
 #. TRANSLATORS: a package requires the session to be restarted due to a security update
 #: ../client/pk-console.c:470
 msgid "Session restart (security) required:"
-msgstr "需要重新啟動(安全性)作業階段:"
+msgstr "需要重新啟動 (安全性) 作業階段:"
 
 #. TRANSLATORS: a package requires the application to be restarted
 #: ../client/pk-console.c:473
@@ -414,7 +414,7 @@ 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 "將機器可讀的輸出列印到畫面,而不是使用動畫的小工具"
+msgstr "將機器可讀的輸出列印到畫面,而不是使用動畫化的小工具"
 
 #. TRANSLATORS: we failed to contact the daemon
 #: ../client/pk-console.c:1308
@@ -472,7 +472,7 @@ msgstr "需要指定一個類型、key_id 以及 package_id"
 #. TRANSLATORS: the user did not specify what they wanted to remove
 #: ../client/pk-console.c:1503
 msgid "A package name to remove is required"
-msgstr "需要想移除的套件名稱"
+msgstr "需要有要移除的套件名稱"
 
 #. TRANSLATORS: the user did not specify anything about what to download or where
 #: ../client/pk-console.c:1512
@@ -487,7 +487,7 @@ msgstr "找不到目錄"
 #. TRANSLATORS: geeky error, 99.9999% of users won't see this
 #: ../client/pk-console.c:1528
 msgid "A licence identifier (eula-id) is required"
-msgstr "需要指定一個授權合約的標示符號(eula-id)"
+msgstr "需要指定一個授權合約的辨識符號 (eula-id)"
 
 #. TRANSLATORS: geeky error, 99.9999% of users won't see this
 #: ../client/pk-console.c:1539
@@ -497,13 +497,13 @@ msgstr "需要處理事項識別符 (tid)"
 #. TRANSLATORS: The user did not specify a package name
 #: ../client/pk-console.c:1560
 msgid "A package name to resolve is required"
-msgstr "需要欲解析的套件之名稱"
+msgstr "需要指定想解析套件的名稱"
 
 #. TRANSLATORS: The user did not specify a repository (software source) name
 #: ../client/pk-console.c:1571
 #: ../client/pk-console.c:1582
 msgid "A repository name is required"
-msgstr "需要套件庫的名稱"
+msgstr "需要指定套件庫名稱"
 
 #. TRANSLATORS: The user didn't provide any data
 #: ../client/pk-console.c:1593
@@ -518,7 +518,7 @@ msgstr "需要指定一項動作,例如:「update-system」"
 #. TRANSLATORS: The user specified an invalid action
 #: ../client/pk-console.c:1617
 msgid "A correct role is required"
-msgstr "需要正確的任務"
+msgstr "需要指定正確的任務"
 
 #. TRANSLATORS: The user did not provide a package name
 #. TRANSLATORS: This is when the user fails to supply the package name
@@ -529,18 +529,18 @@ msgstr "需要正確的任務"
 #: ../client/pk-console.c:1680
 #: ../client/pk-generate-pack.c:316
 msgid "A package name is required"
-msgstr "需要套件名稱"
+msgstr "需要提供套件名稱"
 
 #. TRANSLATORS: each package "provides" certain things, e.g. mime(gstreamer-decoder-mp3), the user didn't specify it
 #: ../client/pk-console.c:1660
 msgid "A package provide string is required"
-msgstr "需要套件的提供字串"
+msgstr "需要指定套件提供字串"
 
 #. TRANSLATORS: The user tried to use an unsupported option on the command line
 #: ../client/pk-console.c:1740
 #, c-format
 msgid "Option '%s' is not supported"
-msgstr "「%s」選項不被支援"
+msgstr "不支援 '%s' 選項"
 
 #. TRANSLATORS: Generic failure of what they asked to do
 #: ../client/pk-console.c:1750
@@ -555,7 +555,7 @@ msgstr "設定要排除的相依檔名"
 #. TRANSLATORS: the output location
 #: ../client/pk-generate-pack.c:258
 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
@@ -723,7 +723,7 @@ msgstr "正在下載關於軟體來源的詳細資料。"
 #. 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 "正在下載檔案清單(這會花上一段時間才能完成)。"
+msgstr "正在下載檔案清單 (這會花上一段時間才能完成)。"
 
 #. TRANSLATORS: waiting for native lock
 #: ../contrib/command-not-found/pk-command-not-found.c:374
@@ -1316,7 +1316,7 @@ msgstr "一般"
 #. TRANSLATORS: The type of update
 #: ../lib/packagekit-glib2/pk-console-shared.c:421
 msgid "Important"
-msgstr "重大"
+msgstr "重要"
 
 #. TRANSLATORS: The type of update
 #: ../lib/packagekit-glib2/pk-console-shared.c:425
@@ -1343,7 +1343,7 @@ msgstr "已阻擋"
 #: ../lib/packagekit-glib2/pk-console-shared.c:442
 #: ../lib/packagekit-glib2/pk-console-shared.c:515
 msgid "Installed"
-msgstr "已安裝的"
+msgstr "已安裝"
 
 #. TRANSLATORS: The state of a package, i.e. not installed
 #: ../lib/packagekit-glib2/pk-console-shared.c:447
@@ -1663,12 +1663,12 @@ msgstr "文字"
 #. TRANSLATORS: ask the user to insert the media
 #: ../lib/packagekit-glib2/pk-task-text.c:282
 msgid "Please insert the correct media"
-msgstr "請插入正確的媒體"
+msgstr "請插入正確媒體"
 
 #. TRANSLATORS: tell the user we've not done anything as they are lazy
 #: ../lib/packagekit-glib2/pk-task-text.c:287
 msgid "The correct media was not inserted."
-msgstr "沒有插入正確的媒體。"
+msgstr "沒有插入正確媒體。"
 
 #. TRANSLATORS: When processing, we might have to remove other dependencies
 #: ../lib/packagekit-glib2/pk-task-text.c:302
@@ -1703,7 +1703,7 @@ msgstr "要處理變更嗎?"
 #. TRANSLATORS: tell the user we didn't do anything
 #: ../lib/packagekit-glib2/pk-task-text.c:387
 msgid "The transaction did not proceed."
-msgstr "這個處理事項沒有進行。"
+msgstr "該處理事項沒有執行。"
 
 #. SECURITY:
 #. - Normal users do not require admin authentication to accept new
@@ -1774,7 +1774,7 @@ msgstr "要更新套件需先經過身份認證"
 #.
 #: ../policy/org.freedesktop.packagekit.policy.in.h:26
 msgid "Cancel foreign task"
-msgstr "取消外來的工作"
+msgstr "取消外來工作"
 
 #. SECURITY:
 #. - This is used when users want to install to a different prefix, for
@@ -1898,7 +1898,7 @@ 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
commit de478bc3df00b3dd09cd1047a078f1227bf1008f
Author: khasida <khasida at fedoraproject.org>
Date:   Thu Jun 3 03:16:41 2010 +0000

    l10n: Updates to Japanese (ja) translation
    
    Transmitted-via: Transifex (translate.fedoraproject.org)

diff --git a/po/ja.po b/po/ja.po
index 0829490..e99bb9d 100644
--- a/po/ja.po
+++ b/po/ja.po
@@ -4,132 +4,133 @@
 # This file is distributed under the same license as the PACKAGE package.
 #
 # Hyu_gabaru Ryu_ichi <hyu_gabaru at yahoo.co.jp>, 2009.
-# Kiyoto Hashida <khashida at redhat.com>, 2009.
+# Kiyoto Hashida <khashida at redhat.com>, 2009, 2010.
 msgid ""
 msgstr ""
 "Project-Id-Version: ja\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-10 02:27+0000\n"
-"PO-Revision-Date: 2009-12-10 17:05+0900\n"
+"POT-Creation-Date: 2010-06-02 22:36+0000\n"
+"PO-Revision-Date: 2010-06-03 11:32+0900\n"
 "Last-Translator: Kiyoto Hashida <khashida at redhat.com>\n"
 "Language-Team: Japanese <jp at li.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: Plural-Forms: nplurals=1; plural=0;\n\n"
+"Plural-Forms: nplurals=2; plural=(n!=1);\n"
+"\n"
 "X-Generator: KBabel 1.11.4\n"
 
 #. TRANSLATORS: this is an atomic transaction
 #. TRANSLATORS: the role is the point of the transaction, e.g. update-system
-#: ../client/pk-console.c:175 ../client/pk-console.c:597
+#: ../client/pk-console.c:176 ../client/pk-console.c:598
 msgid "Transaction"
 msgstr "トランザクション"
 
 #. TRANSLATORS: this is the time the transaction was started in system timezone
-#: ../client/pk-console.c:177
+#: ../client/pk-console.c:178
 msgid "System time"
 msgstr "システム時刻"
 
 #. TRANSLATORS: this is if the transaction succeeded or not
-#: ../client/pk-console.c:179
+#: ../client/pk-console.c:180
 msgid "Succeeded"
 msgstr "成功"
 
-#: ../client/pk-console.c:179
+#: ../client/pk-console.c:180
 msgid "True"
 msgstr "真"
 
-#: ../client/pk-console.c:179
+#: ../client/pk-console.c:180
 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:181 ../src/pk-polkit-action-lookup.c:332
+#: ../client/pk-console.c:182 ../src/pk-polkit-action-lookup.c:332
 msgid "Role"
 msgstr "ロール"
 
 #. TRANSLATORS: this is The duration of the transaction
-#: ../client/pk-console.c:186
+#: ../client/pk-console.c:187
 msgid "Duration"
 msgstr "期間"
 
-#: ../client/pk-console.c:186
+#: ../client/pk-console.c:187
 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:190 ../src/pk-polkit-action-lookup.c:346
+#: ../client/pk-console.c:191 ../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:192
+#: ../client/pk-console.c:193
 msgid "User ID"
 msgstr "利用者 ID"
 
 #. TRANSLATORS: this is the username, e.g. hughsie
-#: ../client/pk-console.c:199
+#: ../client/pk-console.c:200
 msgid "Username"
 msgstr "利用者名"
 
 #. TRANSLATORS: this is the users real name, e.g. "Richard Hughes"
-#: ../client/pk-console.c:203
+#: ../client/pk-console.c:204
 msgid "Real name"
 msgstr "実名"
 
-#: ../client/pk-console.c:211
+#: ../client/pk-console.c:212
 msgid "Affected packages:"
 msgstr "影響されたパッケージ:"
 
-#: ../client/pk-console.c:213
+#: ../client/pk-console.c:214
 msgid "Affected packages: None"
 msgstr "影響されたパッケージ: なし"
 
 #. TRANSLATORS: this is the distro, e.g. Fedora 10
-#: ../client/pk-console.c:248
+#: ../client/pk-console.c:249
 msgid "Distribution"
 msgstr "配布物"
 
 #. TRANSLATORS: this is type of update, stable or testing
-#: ../client/pk-console.c:250
+#: ../client/pk-console.c:251
 msgid "Type"
 msgstr "タイプ"
 
 #. TRANSLATORS: this is any summary text describing the upgrade
 #. TRANSLATORS: this is the summary of the group
-#: ../client/pk-console.c:252 ../client/pk-console.c:291
+#: ../client/pk-console.c:253 ../client/pk-console.c:292
 msgid "Summary"
 msgstr "概要"
 
 #. TRANSLATORS: this is the group category name
-#: ../client/pk-console.c:280
+#: ../client/pk-console.c:281
 msgid "Category"
 msgstr "区分"
 
 #. TRANSLATORS: this is group identifier
-#: ../client/pk-console.c:282
+#: ../client/pk-console.c:283
 msgid "ID"
 msgstr "ID"
 
 #. TRANSLATORS: this is the parent group
-#: ../client/pk-console.c:285
+#: ../client/pk-console.c:286
 msgid "Parent"
 msgstr "親"
 
 #. TRANSLATORS: this is the name of the parent group
-#: ../client/pk-console.c:288
+#: ../client/pk-console.c:289
 msgid "Name"
 msgstr "名前"
 
 #. TRANSLATORS: this is preferred icon for the group
-#: ../client/pk-console.c:294
+#: ../client/pk-console.c:295
 msgid "Icon"
 msgstr "アイコン"
 
 #. TRANSLATORS: this is a header for the package that can be updated
-#: ../client/pk-console.c:340
+#: ../client/pk-console.c:341
 msgid "Details about the update:"
 msgstr "更新の詳細:"
 
@@ -138,170 +139,175 @@ 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:346 ../client/pk-console.c:616
+#: ../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
 #: ../src/pk-polkit-action-lookup.c:357
 msgid "Package"
 msgid_plural "Packages"
-msgstr[0] "パッケージ"
+msgstr[0] "パッケージ "
+msgstr[1] "パッケージ集 "
 
 #. TRANSLATORS: details about the update, any packages that this update updates
-#: ../client/pk-console.c:349
+#: ../client/pk-console.c:350
 msgid "Updates"
 msgstr "æ›´æ–°"
 
 #. TRANSLATORS: details about the update, any packages that this update obsoletes
-#: ../client/pk-console.c:353
+#: ../client/pk-console.c:354
 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:357 ../lib/packagekit-glib2/pk-task-text.c:211
+#: ../client/pk-console.c:358 ../lib/packagekit-glib2/pk-task-text.c:211
 msgid "Vendor"
 msgstr "供給元"
 
 #. TRANSLATORS: details about the update, the bugzilla URLs
-#: ../client/pk-console.c:361
+#: ../client/pk-console.c:362
 msgid "Bugzilla"
 msgstr "Bugzilla"
 
 #. TRANSLATORS: details about the update, the CVE URLs
-#: ../client/pk-console.c:365
+#: ../client/pk-console.c:366
 msgid "CVE"
 msgstr "CVE"
 
 #. TRANSLATORS: details about the update, if the package requires a restart
-#: ../client/pk-console.c:369
+#: ../client/pk-console.c:370
 msgid "Restart"
 msgstr "再スタート"
 
 #. TRANSLATORS: details about the update, any description of the update
-#: ../client/pk-console.c:373
+#: ../client/pk-console.c:374
 msgid "Update text"
 msgstr "更新テキスト"
 
 #. TRANSLATORS: details about the update, the changelog for the package
-#: ../client/pk-console.c:377
+#: ../client/pk-console.c:378
 msgid "Changes"
 msgstr "変更"
 
 #. TRANSLATORS: details about the update, the ongoing state of the update
-#: ../client/pk-console.c:381
+#: ../client/pk-console.c:382
 msgid "State"
 msgstr "状態"
 
 #. TRANSLATORS: details about the update, date the update was issued
-#: ../client/pk-console.c:385
+#: ../client/pk-console.c:386
 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:389 ../lib/packagekit-glib2/pk-console-shared.c:510
+#: ../client/pk-console.c:390 ../lib/packagekit-glib2/pk-console-shared.c:517
 msgid "Updated"
 msgstr "更新済"
 
 #. TRANSLATORS: if the repo is enabled
-#: ../client/pk-console.c:425
+#: ../client/pk-console.c:426
 msgid "Enabled"
 msgstr "有効"
 
 #. TRANSLATORS: if the repo is disabled
-#: ../client/pk-console.c:428
+#: ../client/pk-console.c:429
 msgid "Disabled"
 msgstr "無効"
 
 #. TRANSLATORS: a package requires the system to be restarted
-#: ../client/pk-console.c:460
+#: ../client/pk-console.c:461
 msgid "System restart required by:"
 msgstr "以下によりシステムの再起動が必要です:"
 
 #. TRANSLATORS: a package requires the session to be restarted
-#: ../client/pk-console.c:463
+#: ../client/pk-console.c:464
 msgid "Session restart required:"
 msgstr "セッションの再起動が必要です:"
 
 #. TRANSLATORS: a package requires the system to be restarted due to a security update
-#: ../client/pk-console.c:466
+#: ../client/pk-console.c:467
 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:469
+#: ../client/pk-console.c:470
 msgid "Session restart (security) required:"
 msgstr "セッション再起動 (セキュリティー) が必要:"
 
 #. TRANSLATORS: a package requires the application to be restarted
-#: ../client/pk-console.c:472
+#: ../client/pk-console.c:473
 msgid "Application restart required by:"
 msgstr "以下によりアプリケーションの再起動が必要:"
 
 #. TRANSLATORS: This a list of details about the package
-#: ../client/pk-console.c:507
+#: ../client/pk-console.c:508
 msgid "Package description"
 msgstr "パッケージの説明"
 
 #. TRANSLATORS: This a message (like a little note that may be of interest) from the transaction
-#: ../client/pk-console.c:538
+#: ../client/pk-console.c:539
 msgid "Message:"
 msgstr "メッセージ:"
 
 #. TRANSLATORS: This where the package has no files
-#: ../client/pk-console.c:559
+#: ../client/pk-console.c:560
 msgid "No files"
 msgstr "ファイルなし"
 
 #. TRANSLATORS: This a list files contained in the package
-#: ../client/pk-console.c:564
+#: ../client/pk-console.c:565
 msgid "Package files"
 msgstr "パッケージファイル"
 
 #. TRANSLATORS: the percentage complete of the transaction
-#: ../client/pk-console.c:632
+#: ../client/pk-console.c:633
 msgid "Percentage"
 msgstr "パーセンテージ"
 
 #. TRANSLATORS: the status of the transaction (e.g. downloading)
-#: ../client/pk-console.c:650
+#: ../client/pk-console.c:651
 msgid "Status"
 msgstr "状態"
 
 #. TRANSLATORS: the results from the transaction
-#: ../client/pk-console.c:678
+#: ../client/pk-console.c:680
 msgid "Results:"
 msgstr "結果:"
 
 #. TRANSLATORS: we failed to get any results, which is pretty fatal in my book
-#: ../client/pk-console.c:685
+#: ../client/pk-console.c:687
 msgid "Fatal error"
 msgstr "重大なエラー"
 
 #. TRANSLATORS: the transaction failed in a way we could not expect
-#: ../client/pk-console.c:694
-#: ../contrib/command-not-found/pk-command-not-found.c:432
-#: ../contrib/command-not-found/pk-command-not-found.c:603
+#: ../client/pk-console.c:696
+#: ../contrib/command-not-found/pk-command-not-found.c:433
+#: ../contrib/command-not-found/pk-command-not-found.c:606
 msgid "The transaction failed"
 msgstr "トランザクションが失敗"
 
 #. TRANSLATORS: print a message when there are no updates
-#: ../client/pk-console.c:721
+#: ../client/pk-console.c:727
 msgid "There are no updates available at this time."
 msgstr "現時点では利用可能な更新はありません。"
 
+#: ../client/pk-console.c:750
+msgid "There are no upgrades available at this time."
+msgstr "現時点では利用可能なアップグレードはありません。"
+
 #. TRANSLATORS: a package needs to restart their system
-#: ../client/pk-console.c:808
+#: ../client/pk-console.c:817
 msgid "Please restart the computer to complete the update."
 msgstr "更新を完了するためにコンピューターを再起動してください。"
 
 #. TRANSLATORS: a package needs to restart the session
-#: ../client/pk-console.c:811
+#: ../client/pk-console.c:820
 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:814
+#: ../client/pk-console.c:823
 msgid ""
 "Please restart the computer to complete the update as important security "
 "updates have been installed."
@@ -310,7 +316,7 @@ msgstr ""
 "ピューターを再起動してください。"
 
 #. TRANSLATORS: a package needs to restart the session (due to security)
-#: ../client/pk-console.c:817
+#: ../client/pk-console.c:826
 msgid ""
 "Please logout and login to complete the update as important security updates "
 "have been installed."
@@ -318,20 +324,30 @@ msgstr ""
 "重大なセキュリティー更新がインストールされたので、更新を完了するためにログア"
 "ウトとログインを行って下さい。"
 
+#. TRANSLATORS: The user used 'pkcon install dave.rpm' rather than 'pkcon install-local dave.rpm'
+#: ../client/pk-console.c:852
+#, c-format
+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:840
+#: ../client/pk-console.c:860
 #, 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:868
+#: ../client/pk-console.c:888
 #, 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:896 ../client/pk-console.c:924
+#: ../client/pk-console.c:916 ../client/pk-console.c:944
 #, c-format
 msgid "This tool could not find the package: %s"
 msgstr "このツールではパッケージを見つけられません: %s"
@@ -340,227 +356,242 @@ 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:952 ../client/pk-console.c:980
-#: ../client/pk-console.c:1008 ../client/pk-console.c:1036
-#: ../client/pk-console.c:1064
+#: ../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
 #, 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:1093
+#: ../client/pk-console.c:1113
 msgid "The daemon crashed mid-transaction!"
 msgstr "トランザクション中にデーモンがクラッシュしました!"
 
 #. TRANSLATORS: This is the header to the --help menu
-#: ../client/pk-console.c:1127
+#: ../client/pk-console.c:1147
 msgid "PackageKit Console Interface"
 msgstr "PackageKit コンソールインターフェース"
 
 #. these are commands we can use with pkcon
-#: ../client/pk-console.c:1129
+#: ../client/pk-console.c:1149
 msgid "Subcommands:"
 msgstr "サブコマンド:"
 
 #. TRANSLATORS: we keep a database updated with the time that an action was last executed
-#: ../client/pk-console.c:1208
+#: ../client/pk-console.c:1228
 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:1244 ../client/pk-monitor.c:280
+#: ../client/pk-console.c:1268 ../client/pk-monitor.c:356
 msgid "Show the program version and exit"
 msgstr "プログラムのバージョンを表示して終了"
 
 #. TRANSLATORS: command line argument, use a filter to narrow down results
-#: ../client/pk-console.c:1247
+#: ../client/pk-console.c:1271
 msgid "Set the filter, e.g. installed"
 msgstr "インストール済などのフィルターを設定"
 
+#. TRANSLATORS: command line argument, use a non-standard install prefix
+#: ../client/pk-console.c:1274
+msgid "Set the install root, e.g. '/' or '/mnt/ltsp'"
+msgstr "インストール root をセットします。例、'/' 又は '/mnt/ltsp'"
+
 #. TRANSLATORS: command line argument, work asynchronously
-#: ../client/pk-console.c:1250
+#: ../client/pk-console.c:1277
 msgid "Exit without waiting for actions to complete"
 msgstr "アクションが完了するのを待たずに終了"
 
 #. command line argument, do we ask questions
-#: ../client/pk-console.c:1253
+#: ../client/pk-console.c:1280
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:527
 msgid "Install the packages without asking for confirmation"
 msgstr "確認を要求せずにパッケージをインストール"
 
 #. TRANSLATORS: command line argument, this command is not a priority
-#: ../client/pk-console.c:1256
+#: ../client/pk-console.c:1283
 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:1259
+#: ../client/pk-console.c:1286
 msgid "Print to screen a machine readable output, rather than using animated widgets"
 msgstr "動画のウィジェットの使用ではなく、マシン可読の出力を画面に表示"
 
 #. TRANSLATORS: we failed to contact the daemon
-#: ../client/pk-console.c:1281
+#: ../client/pk-console.c:1308
 msgid "Failed to contact PackageKit"
 msgstr "PackageKit への接触に失敗"
 
 #. TRANSLATORS: The user specified an incorrect filter
-#: ../client/pk-console.c:1339
+#: ../client/pk-console.c:1369
+msgid "The proxy could not be set"
+msgstr "プロキシをセット出来ませんでした"
+
+#. TRANSLATORS: The user specified an incorrect filter
+#: ../client/pk-console.c:1381
+msgid "The install root could not be set"
+msgstr "インストール root をセット出来ませんでした"
+
+#. TRANSLATORS: The user specified an incorrect filter
+#: ../client/pk-console.c:1393
 msgid "The filter specified was invalid"
 msgstr "指定されたフィルターは無効です"
 
 #. TRANSLATORS: a search type can be name, details, file, etc
-#: ../client/pk-console.c:1358
+#: ../client/pk-console.c:1412
 msgid "A search type is required, e.g. name"
 msgstr "名前のような、検索タイプが必要です"
 
 #. TRANSLATORS: the user needs to provide a search term
-#: ../client/pk-console.c:1365 ../client/pk-console.c:1377
-#: ../client/pk-console.c:1389 ../client/pk-console.c:1401
+#: ../client/pk-console.c:1419 ../client/pk-console.c:1431
+#: ../client/pk-console.c:1443 ../client/pk-console.c:1455
 msgid "A search term is required"
 msgstr "検索語が必要です"
 
 #. TRANSLATORS: the search type was provided, but invalid
-#: ../client/pk-console.c:1411
+#: ../client/pk-console.c:1465
 msgid "Invalid search type"
 msgstr "不当な検索タイプ"
 
 #. TRANSLATORS: the user did not specify what they wanted to install
-#: ../client/pk-console.c:1417
+#: ../client/pk-console.c:1471
 msgid "A package name to install is required"
 msgstr "インストールするパッケージ名が必要です"
 
 #. TRANSLATORS: the user did not specify what they wanted to install
-#: ../client/pk-console.c:1426
+#: ../client/pk-console.c:1480
 msgid "A filename to install is required"
 msgstr "インストールするファイル名が必要です"
 
 #. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:1438
+#: ../client/pk-console.c:1492
 msgid "A type, key_id and package_id are required"
 msgstr "タイプと、キー id、パッケージ id が必要です"
 
 #. TRANSLATORS: the user did not specify what they wanted to remove
-#: ../client/pk-console.c:1449
+#: ../client/pk-console.c:1503
 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:1458
+#: ../client/pk-console.c:1512
 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:1465
+#: ../client/pk-console.c:1519
 msgid "Directory not found"
 msgstr "ディレクトリーが見つかりません"
 
 #. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:1474
+#: ../client/pk-console.c:1528
 msgid "A licence identifier (eula-id) is required"
 msgstr "ライセンス ID (eula-id) が必要です"
 
 #. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:1485
+#: ../client/pk-console.c:1539
 msgid "A transaction identifier (tid) is required"
 msgstr "トランザクション ID (tid) が必要です "
 
 #. TRANSLATORS: The user did not specify a package name
-#: ../client/pk-console.c:1506
+#: ../client/pk-console.c:1560
 msgid "A package name to resolve is required"
 msgstr "削除するパッケージ名が必要です"
 
 #. TRANSLATORS: The user did not specify a repository (software source) name
-#: ../client/pk-console.c:1517 ../client/pk-console.c:1528
+#: ../client/pk-console.c:1571 ../client/pk-console.c:1582
 msgid "A repository name is required"
 msgstr "リポジトリー名が必要です"
 
 #. TRANSLATORS: The user didn't provide any data
-#: ../client/pk-console.c:1539
+#: ../client/pk-console.c:1593
 msgid "A repo name, parameter and value are required"
 msgstr "リポジトリー名と、パラメーター、値が必要です"
 
 #. TRANSLATORS: The user didn't specify what action to use
-#: ../client/pk-console.c:1556
+#: ../client/pk-console.c:1610
 msgid "An action, e.g. 'update-system' is required"
 msgstr "'update-system' のようなアクションが必要です"
 
 #. TRANSLATORS: The user specified an invalid action
-#: ../client/pk-console.c:1563
+#: ../client/pk-console.c:1617
 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:1573 ../client/pk-console.c:1588
-#: ../client/pk-console.c:1597 ../client/pk-console.c:1617
-#: ../client/pk-console.c:1626 ../client/pk-generate-pack.c:298
+#: ../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
 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:1606
+#: ../client/pk-console.c:1660
 msgid "A package provide string is required"
 msgstr "パッケージの提供する文字列が必要です"
 
 #. TRANSLATORS: The user tried to use an unsupported option on the command line
-#: ../client/pk-console.c:1686
+#: ../client/pk-console.c:1741
 #, c-format
 msgid "Option '%s' is not supported"
 msgstr "オプション '%s' はサポートされていません"
 
 #. TRANSLATORS: Generic failure of what they asked to do
-#: ../client/pk-console.c:1696
+#: ../client/pk-console.c:1751
 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:237
+#: ../client/pk-generate-pack.c:255
 msgid "Set the file name of dependencies to be excluded"
 msgstr "依存のあるファイル名は除かれるように設定する"
 
 #. TRANSLATORS: the output location
-#: ../client/pk-generate-pack.c:240
-msgid "The output file or directory (the current directory is used if ommitted)"
-msgstr "出力ファイルか、ディレクトリー (省略すると現在のディレクトリー)"
+#: ../client/pk-generate-pack.c:258
+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:243
+#: ../client/pk-generate-pack.c:261
 msgid "The package to be put into the service pack"
 msgstr "サービスパックに入れられるパッケージ"
 
 #. TRANSLATORS: put all pending updates in the pack
-#: ../client/pk-generate-pack.c:246
+#: ../client/pk-generate-pack.c:264
 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:282
+#: ../client/pk-generate-pack.c:300
 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:290
+#: ../client/pk-generate-pack.c:308
 msgid "Both options selected."
 msgstr "両方のオプションが選択されました。"
 
 #. TRANSLATORS: This is when the user fails to supply the output
-#: ../client/pk-generate-pack.c:306
+#: ../client/pk-generate-pack.c:324
 msgid "A output directory or file name is required"
 msgstr "出力ディレクトリーかファイル名が必要です"
 
-#. TRANSLATORS: This is when the dameon is not-installed/broken and fails to startup
-#: ../client/pk-generate-pack.c:324
-msgid "The dameon failed to startup"
+#. TRANSLATORS: This is when the daemon is not-installed/broken and fails to startup
+#: ../client/pk-generate-pack.c:342
+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:335 ../client/pk-generate-pack.c:341
+#: ../client/pk-generate-pack.c:353 ../client/pk-generate-pack.c:359
 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:348
+#: ../client/pk-generate-pack.c:366
 msgid ""
 "Service packs cannot be created as PackageKit was not built with libarchive "
 "support."
@@ -569,158 +600,158 @@ msgstr ""
 "ません。"
 
 #. TRANSLATORS: the user specified an absolute path, but didn't get the extension correct
-#: ../client/pk-generate-pack.c:359
+#: ../client/pk-generate-pack.c:377
 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:375
+#: ../client/pk-generate-pack.c:393
 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:378
+#: ../client/pk-generate-pack.c:396
 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:391
+#: ../client/pk-generate-pack.c:409
 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:403
+#: ../client/pk-generate-pack.c:421
 msgid "Failed to open package list."
 msgstr "パッケージ一覧を開くのに失敗しました。"
 
 #. TRANSLATORS: The package name is being matched up to available packages
-#: ../client/pk-generate-pack.c:412
+#: ../client/pk-generate-pack.c:430
 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:416
+#: ../client/pk-generate-pack.c:434
 #, 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:424
+#: ../client/pk-generate-pack.c:442
 msgid "Creating service pack..."
 msgstr "サービスパックを作成中..."
 
 #. TRANSLATORS: we succeeded in making the file
-#: ../client/pk-generate-pack.c:439
+#: ../client/pk-generate-pack.c:457
 #, c-format
 msgid "Service pack created '%s'"
 msgstr "サービスパック '%s' が作成されました。"
 
 #. TRANSLATORS: we failed to make te file
-#: ../client/pk-generate-pack.c:444
+#: ../client/pk-generate-pack.c:462
 #, c-format
 msgid "Failed to create '%s': %s"
 msgstr "'%s' の作成に失敗しました: %s"
 
-#: ../client/pk-monitor.c:210
+#: ../client/pk-monitor.c:286
 msgid "Failed to get daemon state"
 msgstr "デーモンの状態を得るのに失敗しました"
 
 #. TRANSLATORS: this is a program that monitors PackageKit
-#: ../client/pk-monitor.c:296
+#: ../client/pk-monitor.c:372
 msgid "PackageKit Monitor"
 msgstr "PackageKit モニター"
 
 #. TRANSLATORS: when we are getting data from the daemon
-#: ../contrib/browser-plugin/pk-plugin-install.c:495
+#: ../contrib/browser-plugin/pk-plugin-install.c:494
 msgid "Getting package information..."
 msgstr "パッケージの情報を獲得中..."
 
 #. TRANSLATORS: run an applicaiton
-#: ../contrib/browser-plugin/pk-plugin-install.c:501
+#: ../contrib/browser-plugin/pk-plugin-install.c:500
 #, c-format
 msgid "Run %s"
 msgstr "%s 実行"
 
 #. TRANSLATORS: show the installed version of a package
-#: ../contrib/browser-plugin/pk-plugin-install.c:507
+#: ../contrib/browser-plugin/pk-plugin-install.c:506
 msgid "Installed version"
 msgstr "インストールされたバージョン"
 
 #. TRANSLATORS: run the application now
-#: ../contrib/browser-plugin/pk-plugin-install.c:515
+#: ../contrib/browser-plugin/pk-plugin-install.c:514
 #, c-format
 msgid "Run version %s now"
 msgstr "バージョン %s をすぐに実行"
 
 #. TRANSLATORS: run the application now
-#: ../contrib/browser-plugin/pk-plugin-install.c:521
+#: ../contrib/browser-plugin/pk-plugin-install.c:520
 msgid "Run now"
 msgstr "すぐに実行"
 
 #. TRANSLATORS: update to a new version of the package
-#: ../contrib/browser-plugin/pk-plugin-install.c:527
+#: ../contrib/browser-plugin/pk-plugin-install.c:526
 #, c-format
 msgid "Update to version %s"
 msgstr "バージョン %s に更新"
 
 #. TRANSLATORS: To install a package
-#: ../contrib/browser-plugin/pk-plugin-install.c:533
+#: ../contrib/browser-plugin/pk-plugin-install.c:532
 #, c-format
 msgid "Install %s now"
 msgstr "%s をすぐにインストール"
 
 #. TRANSLATORS: the version of the package
-#: ../contrib/browser-plugin/pk-plugin-install.c:536
+#: ../contrib/browser-plugin/pk-plugin-install.c:535
 msgid "Version"
 msgstr "バージョン"
 
 #. TRANSLATORS: noting found, so can't install
-#: ../contrib/browser-plugin/pk-plugin-install.c:541
+#: ../contrib/browser-plugin/pk-plugin-install.c:540
 msgid "No packages found for your system"
 msgstr "ユーザーのシステム用のパッケージが見つかりません"
 
 #. TRANSLATORS: package is being installed
-#: ../contrib/browser-plugin/pk-plugin-install.c:546
+#: ../contrib/browser-plugin/pk-plugin-install.c:545
 msgid "Installing..."
 msgstr "インストール中..."
 
 #. TRANSLATORS: downloading repo data so we can search
-#: ../contrib/command-not-found/pk-command-not-found.c:365
+#: ../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:369
+#: ../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:373
+#: ../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:377
+#: ../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:423
+#: ../contrib/command-not-found/pk-command-not-found.c:424
 msgid "Failed to search for file"
 msgstr "ファイルの探索に失敗しました"
 
 #. TRANSLATORS: we failed to launch the executable, the error follows
-#: ../contrib/command-not-found/pk-command-not-found.c:566
+#: ../contrib/command-not-found/pk-command-not-found.c:569
 msgid "Failed to launch:"
 msgstr "起動に失敗:"
 
 #. TRANSLATORS: we failed to install the package
-#: ../contrib/command-not-found/pk-command-not-found.c:594
+#: ../contrib/command-not-found/pk-command-not-found.c:597
 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:670
+#: ../contrib/command-not-found/pk-command-not-found.c:673
 msgid "PackageKit Command Not Found"
 msgstr "PackageKit コマンドが見つかりません"
 
@@ -730,51 +761,51 @@ msgid "Command not found."
 msgstr "コマンドが見つかりません。"
 
 #. TRANSLATORS: tell the user what we think the command is
-#: ../contrib/command-not-found/pk-command-not-found.c:706
+#: ../contrib/command-not-found/pk-command-not-found.c:717
 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:716
+#: ../contrib/command-not-found/pk-command-not-found.c:727
 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:730
-#: ../contrib/command-not-found/pk-command-not-found.c:739
+#: ../contrib/command-not-found/pk-command-not-found.c:741
+#: ../contrib/command-not-found/pk-command-not-found.c:750
 msgid "Similar commands are:"
 msgstr "よく似たコマンドは:"
 
 #. TRANSLATORS: ask the user to choose a file to run
-#: ../contrib/command-not-found/pk-command-not-found.c:746
+#: ../contrib/command-not-found/pk-command-not-found.c:757
 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:764
+#: ../contrib/command-not-found/pk-command-not-found.c:775
 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:769
+#: ../contrib/command-not-found/pk-command-not-found.c:780
 #, c-format
 msgid "Install package '%s' to provide command '%s'?"
 msgstr "コマンド %2$s' を提供するためにパッケージ '%1$s' をインストールしますか?"
 
 #. TRANSLATORS: Show the user a list of packages that provide this command
-#: ../contrib/command-not-found/pk-command-not-found.c:793
+#: ../contrib/command-not-found/pk-command-not-found.c:804
 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:803
+#: ../contrib/command-not-found/pk-command-not-found.c:814
 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:812
+#: ../contrib/command-not-found/pk-command-not-found.c:823
 msgid "Please choose a package to install"
 msgstr "インストールするパッケージを選んでください"
 
@@ -944,7 +975,7 @@ 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:282
+#: ../lib/packagekit-glib2/pk-console-shared.c:289
 #, c-format
 msgid "Installing packages"
 msgstr "パッケージのインストール中"
@@ -974,92 +1005,92 @@ msgid "Disabled %i debugging sources."
 msgstr "%i 個のデバッグソースを無効化しました"
 
 #. TRANSLATORS: couldn't open device to write
-#: ../contrib/device-rebind/pk-device-rebind.c:61
+#: ../contrib/device-rebind/pk-device-rebind.c:62
 msgid "Failed to open file"
 msgstr "ファイルを開くのに失敗しました"
 
 #. TRANSLATORS: could not write to the device
-#: ../contrib/device-rebind/pk-device-rebind.c:70
+#: ../contrib/device-rebind/pk-device-rebind.c:71
 msgid "Failed to write to the file"
 msgstr "ファイルへ書き込むのに失敗しました"
 
 #. TRANSLATORS: we failed to release the current driver
-#: ../contrib/device-rebind/pk-device-rebind.c:110
-#: ../contrib/device-rebind/pk-device-rebind.c:147
+#: ../contrib/device-rebind/pk-device-rebind.c:111
+#: ../contrib/device-rebind/pk-device-rebind.c:148
 msgid "Failed to write to device"
 msgstr "装置へ書き込むのに失敗しました"
 
 #. TRANSLATORS: the device could not be found in sysfs
-#: ../contrib/device-rebind/pk-device-rebind.c:175
+#: ../contrib/device-rebind/pk-device-rebind.c:176
 msgid "Device could not be found"
 msgstr "装置を見つけられません"
 
 #. TRANSLATORS: we failed to release the current driver
-#: ../contrib/device-rebind/pk-device-rebind.c:202
+#: ../contrib/device-rebind/pk-device-rebind.c:203
 msgid "Failed to unregister driver"
 msgstr "ドライバーを登録解除できませんでした"
 
 #. TRANSLATORS: we failed to bind the old driver
-#: ../contrib/device-rebind/pk-device-rebind.c:211
+#: ../contrib/device-rebind/pk-device-rebind.c:212
 msgid "Failed to register driver"
 msgstr "ドライバーを登録できませんでした"
 
 #. TRANSLATORS: user did not specify a device sysfs path that exists
-#: ../contrib/device-rebind/pk-device-rebind.c:260
+#: ../contrib/device-rebind/pk-device-rebind.c:261
 msgid "Device path not found"
 msgstr "装置へのパスが見つかりません"
 
 #. TRANSLATORS: user did not specify a valid device sysfs path
-#: ../contrib/device-rebind/pk-device-rebind.c:268
+#: ../contrib/device-rebind/pk-device-rebind.c:269
 msgid "Incorrect device path specified"
 msgstr "指定された装置へのパスが正しくありません"
 
-#: ../contrib/device-rebind/pk-device-rebind.c:293
+#: ../contrib/device-rebind/pk-device-rebind.c:294
 msgid "Show extra debugging information"
 msgstr "追加のデバッグ情報を表示"
 
 #. command line argument, simulate what would be done, but don't actually do it
-#: ../contrib/device-rebind/pk-device-rebind.c:296
+#: ../contrib/device-rebind/pk-device-rebind.c:297
 msgid "Don't actually touch the hardware, only simulate what would be done"
 msgstr "ハードウェアに実際に触らないで、実行されることを模倣して下さい"
 
 #. TRANSLATORS: command line option: a list of files to install
-#: ../contrib/device-rebind/pk-device-rebind.c:299
+#: ../contrib/device-rebind/pk-device-rebind.c:300
 msgid "Device paths"
 msgstr "デバイスパス"
 
 #. TRANSLATORS: tool that gets called when the device needs reloading after installing firmware
-#: ../contrib/device-rebind/pk-device-rebind.c:314
+#: ../contrib/device-rebind/pk-device-rebind.c:315
 msgid "PackageKit Device Reloader"
 msgstr "PackageKit デバイスリローダー"
 
 #. TRANSLATORS: user did not specify a valid device sysfs path
-#: ../contrib/device-rebind/pk-device-rebind.c:322
+#: ../contrib/device-rebind/pk-device-rebind.c:323
 msgid "You need to specify at least one valid device path"
 msgstr "有効なデバイスを少なくとも1つ指定する必要があります"
 
 #. TRANSLATORS: user did not specify a valid device sysfs path
-#: ../contrib/device-rebind/pk-device-rebind.c:332
+#: ../contrib/device-rebind/pk-device-rebind.c:333
 msgid "This script can only be used by the root user"
 msgstr "このスクリプトは root ユーザーでのみ使用可能です"
 
 #. TRANSLATORS: we're going to verify the path first
-#: ../contrib/device-rebind/pk-device-rebind.c:341
+#: ../contrib/device-rebind/pk-device-rebind.c:342
 msgid "Verifying device path"
 msgstr "デバイスパスを確証します"
 
 #. TRANSLATORS: user did not specify a device sysfs path that exists
-#: ../contrib/device-rebind/pk-device-rebind.c:346
+#: ../contrib/device-rebind/pk-device-rebind.c:347
 msgid "Failed to verify device path"
 msgstr "デバイスパスの確証に失敗しました"
 
 #. TRANSLATORS: we're going to try
-#: ../contrib/device-rebind/pk-device-rebind.c:360
+#: ../contrib/device-rebind/pk-device-rebind.c:361
 msgid "Attempting to rebind device"
 msgstr "デバイスの再バインドを試みます"
 
 #. TRANSLATORS: we failed to release the current driver
-#: ../contrib/device-rebind/pk-device-rebind.c:365
+#: ../contrib/device-rebind/pk-device-rebind.c:366
 msgid "Failed to rebind device"
 msgstr "デバイスの再バインドに失敗"
 
@@ -1075,464 +1106,464 @@ msgstr "PackageKit パッケージリスト"
 msgid "PackageKit Service Pack"
 msgstr "PackageKit サービスパック"
 
-#: ../lib/packagekit-glib2/pk-console-shared.c:59
+#: ../lib/packagekit-glib2/pk-console-shared.c:65
 #, c-format
 msgid "Please enter a number from 1 to %i: "
 msgstr "1 から %i までの数字を1つ入力して下さい: "
 
 #. 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:183
+#: ../lib/packagekit-glib2/pk-console-shared.c:191
 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:196
+#: ../lib/packagekit-glib2/pk-console-shared.c:202
 msgid "Please choose the correct package: "
 msgstr "現在のパッケージを選択して下さい: "
 
 #. TRANSLATORS: This is when the transaction status is not known
-#: ../lib/packagekit-glib2/pk-console-shared.c:250
+#: ../lib/packagekit-glib2/pk-console-shared.c:257
 msgid "Unknown state"
 msgstr "不明な状態"
 
 #. TRANSLATORS: transaction state, the daemon is in the process of starting
-#: ../lib/packagekit-glib2/pk-console-shared.c:254
+#: ../lib/packagekit-glib2/pk-console-shared.c:261
 msgid "Starting"
 msgstr "開始中"
 
 #. TRANSLATORS: transaction state, the transaction is waiting for another to complete
-#: ../lib/packagekit-glib2/pk-console-shared.c:258
+#: ../lib/packagekit-glib2/pk-console-shared.c:265
 msgid "Waiting in queue"
 msgstr "キューで待機中"
 
 #. TRANSLATORS: transaction state, just started
-#: ../lib/packagekit-glib2/pk-console-shared.c:262
+#: ../lib/packagekit-glib2/pk-console-shared.c:269
 msgid "Running"
 msgstr "実行中"
 
 #. TRANSLATORS: transaction state, is querying data
-#: ../lib/packagekit-glib2/pk-console-shared.c:266
+#: ../lib/packagekit-glib2/pk-console-shared.c:273
 msgid "Querying"
 msgstr "クエリ中"
 
 #. TRANSLATORS: transaction state, getting data from a server
-#: ../lib/packagekit-glib2/pk-console-shared.c:270
+#: ../lib/packagekit-glib2/pk-console-shared.c:277
 msgid "Getting information"
 msgstr "情報を取得中"
 
 #. TRANSLATORS: transaction state, removing packages
-#: ../lib/packagekit-glib2/pk-console-shared.c:274
+#: ../lib/packagekit-glib2/pk-console-shared.c:281
 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:278
-#: ../lib/packagekit-glib2/pk-console-shared.c:656
+#: ../lib/packagekit-glib2/pk-console-shared.c:285
+#: ../lib/packagekit-glib2/pk-console-shared.c:663
 msgid "Downloading packages"
 msgstr "パッケージをダウンロード中"
 
 #. TRANSLATORS: transaction state, refreshing internal lists
-#: ../lib/packagekit-glib2/pk-console-shared.c:286
+#: ../lib/packagekit-glib2/pk-console-shared.c:293
 msgid "Refreshing software list"
 msgstr "ソフトウェアリストをリフレッシュ中"
 
 #. TRANSLATORS: transaction state, installing updates
-#: ../lib/packagekit-glib2/pk-console-shared.c:290
+#: ../lib/packagekit-glib2/pk-console-shared.c:297
 msgid "Installing updates"
 msgstr "更新をインストール中"
 
 #. TRANSLATORS: transaction state, removing old packages, and cleaning config files
-#: ../lib/packagekit-glib2/pk-console-shared.c:294
+#: ../lib/packagekit-glib2/pk-console-shared.c:301
 msgid "Cleaning up packages"
 msgstr "パッケージをクリーンアップ中"
 
 #. TRANSLATORS: transaction state, obsoleting old packages
-#: ../lib/packagekit-glib2/pk-console-shared.c:298
+#: ../lib/packagekit-glib2/pk-console-shared.c:305
 msgid "Obsoleting packages"
 msgstr "旧パッケージを区分中"
 
 #. TRANSLATORS: transaction state, checking the transaction before we do it
-#: ../lib/packagekit-glib2/pk-console-shared.c:302
+#: ../lib/packagekit-glib2/pk-console-shared.c:309
 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:306
+#: ../lib/packagekit-glib2/pk-console-shared.c:313
 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:310
-#: ../lib/packagekit-glib2/pk-console-shared.c:616
+#: ../lib/packagekit-glib2/pk-console-shared.c:317
+#: ../lib/packagekit-glib2/pk-console-shared.c:623
 msgid "Rolling back"
 msgstr "元に戻り中"
 
 #. TRANSLATORS: transaction state, when we're doing a test transaction
-#: ../lib/packagekit-glib2/pk-console-shared.c:314
+#: ../lib/packagekit-glib2/pk-console-shared.c:321
 msgid "Testing changes"
 msgstr "変更をテスト中"
 
 #. TRANSLATORS: transaction state, when we're writing to the system package database
-#: ../lib/packagekit-glib2/pk-console-shared.c:318
+#: ../lib/packagekit-glib2/pk-console-shared.c:325
 msgid "Committing changes"
 msgstr "変更をコミット中"
 
 #. TRANSLATORS: transaction state, requesting data from a server
-#: ../lib/packagekit-glib2/pk-console-shared.c:322
+#: ../lib/packagekit-glib2/pk-console-shared.c:329
 msgid "Requesting data"
 msgstr "データを要求中"
 
 #. TRANSLATORS: transaction state, all done!
-#: ../lib/packagekit-glib2/pk-console-shared.c:326
+#: ../lib/packagekit-glib2/pk-console-shared.c:333
 msgid "Finished"
 msgstr "終了"
 
 #. TRANSLATORS: transaction state, in the process of cancelling
-#: ../lib/packagekit-glib2/pk-console-shared.c:330
+#: ../lib/packagekit-glib2/pk-console-shared.c:337
 msgid "Cancelling"
 msgstr "キャンセル中"
 
 #. TRANSLATORS: transaction state, downloading metadata
-#: ../lib/packagekit-glib2/pk-console-shared.c:334
+#: ../lib/packagekit-glib2/pk-console-shared.c:341
 msgid "Downloading repository information"
 msgstr "レポジトリ情報をダウンロード中"
 
 #. TRANSLATORS: transaction state, downloading metadata
-#: ../lib/packagekit-glib2/pk-console-shared.c:338
+#: ../lib/packagekit-glib2/pk-console-shared.c:345
 msgid "Downloading list of packages"
 msgstr "パッケージリストをダウンロード中"
 
 #. TRANSLATORS: transaction state, downloading metadata
-#: ../lib/packagekit-glib2/pk-console-shared.c:342
+#: ../lib/packagekit-glib2/pk-console-shared.c:349
 msgid "Downloading file lists"
 msgstr "ファイルリストをダウンロード中"
 
 #. TRANSLATORS: transaction state, downloading metadata
-#: ../lib/packagekit-glib2/pk-console-shared.c:346
+#: ../lib/packagekit-glib2/pk-console-shared.c:353
 msgid "Downloading lists of changes"
 msgstr "変更のリストをダウンロード中"
 
 #. TRANSLATORS: transaction state, downloading metadata
-#: ../lib/packagekit-glib2/pk-console-shared.c:350
+#: ../lib/packagekit-glib2/pk-console-shared.c:357
 msgid "Downloading groups"
 msgstr "グループをダウンロード中"
 
 #. TRANSLATORS: transaction state, downloading metadata
-#: ../lib/packagekit-glib2/pk-console-shared.c:354
+#: ../lib/packagekit-glib2/pk-console-shared.c:361
 msgid "Downloading update information"
 msgstr "更新情報をダウンロード中"
 
 #. TRANSLATORS: transaction state, repackaging delta files
-#: ../lib/packagekit-glib2/pk-console-shared.c:358
+#: ../lib/packagekit-glib2/pk-console-shared.c:365
 msgid "Repackaging files"
 msgstr "ファイルを再パッケージ中"
 
 #. TRANSLATORS: transaction state, loading databases
-#: ../lib/packagekit-glib2/pk-console-shared.c:362
+#: ../lib/packagekit-glib2/pk-console-shared.c:369
 msgid "Loading cache"
 msgstr "キャッシュをロード中"
 
 #. TRANSLATORS: transaction state, scanning for running processes
-#: ../lib/packagekit-glib2/pk-console-shared.c:366
+#: ../lib/packagekit-glib2/pk-console-shared.c:373
 msgid "Scanning applications"
 msgstr "アプリケーションをスキャン中"
 
 #. TRANSLATORS: transaction state, generating a list of packages installed on the system
-#: ../lib/packagekit-glib2/pk-console-shared.c:370
+#: ../lib/packagekit-glib2/pk-console-shared.c:377
 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:374
+#: ../lib/packagekit-glib2/pk-console-shared.c:381
 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:378
+#: ../lib/packagekit-glib2/pk-console-shared.c:385
 msgid "Waiting for authentication"
 msgstr "認証を待ち受け中"
 
 #. TRANSLATORS: transaction state, we are updating the list of processes
-#: ../lib/packagekit-glib2/pk-console-shared.c:382
+#: ../lib/packagekit-glib2/pk-console-shared.c:389
 msgid "Updating running applications"
 msgstr "実行アプリケーションの更新中"
 
 #. TRANSLATORS: transaction state, we are checking executable files currently in use
-#: ../lib/packagekit-glib2/pk-console-shared.c:386
+#: ../lib/packagekit-glib2/pk-console-shared.c:393
 msgid "Checking applications in use"
 msgstr "使用中アプリケーションをチェック中"
 
 #. TRANSLATORS: transaction state, we are checking for libraries currently in use
-#: ../lib/packagekit-glib2/pk-console-shared.c:390
+#: ../lib/packagekit-glib2/pk-console-shared.c:397
 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:394
+#: ../lib/packagekit-glib2/pk-console-shared.c:401
 msgid "Copying files"
 msgstr "ファイル複写中"
 
 #. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:412
+#: ../lib/packagekit-glib2/pk-console-shared.c:419
 msgid "Trivial"
 msgstr "些細な"
 
 #. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:416
+#: ../lib/packagekit-glib2/pk-console-shared.c:423
 msgid "Normal"
 msgstr "通常"
 
 #. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:420
+#: ../lib/packagekit-glib2/pk-console-shared.c:427
 msgid "Important"
 msgstr "重要"
 
 #. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:424
+#: ../lib/packagekit-glib2/pk-console-shared.c:431
 msgid "Security"
 msgstr "セキュリティー"
 
 #. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:428
+#: ../lib/packagekit-glib2/pk-console-shared.c:435
 msgid "Bug fix "
 msgstr "バグ修正"
 
 #. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:432
+#: ../lib/packagekit-glib2/pk-console-shared.c:439
 msgid "Enhancement"
 msgstr "機能追加"
 
 #. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:436
+#: ../lib/packagekit-glib2/pk-console-shared.c:443
 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:441
-#: ../lib/packagekit-glib2/pk-console-shared.c:514
+#: ../lib/packagekit-glib2/pk-console-shared.c:448
+#: ../lib/packagekit-glib2/pk-console-shared.c:521
 msgid "Installed"
 msgstr "インストール済み"
 
 #. TRANSLATORS: The state of a package, i.e. not installed
-#: ../lib/packagekit-glib2/pk-console-shared.c:446
+#: ../lib/packagekit-glib2/pk-console-shared.c:453
 msgid "Available"
 msgstr "利用可能"
 
 #. TRANSLATORS: The action of the package, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:464
+#: ../lib/packagekit-glib2/pk-console-shared.c:471
 msgid "Downloading"
 msgstr "ダウンロード中"
 
 #. TRANSLATORS: The action of the package, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:468
+#: ../lib/packagekit-glib2/pk-console-shared.c:475
 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:472
-#: ../lib/packagekit-glib2/pk-console-shared.c:592
+#: ../lib/packagekit-glib2/pk-console-shared.c:479
+#: ../lib/packagekit-glib2/pk-console-shared.c:599
 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:476
-#: ../lib/packagekit-glib2/pk-console-shared.c:588
+#: ../lib/packagekit-glib2/pk-console-shared.c:483
+#: ../lib/packagekit-glib2/pk-console-shared.c:595
 msgid "Removing"
 msgstr "削除中"
 
 #. TRANSLATORS: The action of the package, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:480
+#: ../lib/packagekit-glib2/pk-console-shared.c:487
 msgid "Cleaning up"
 msgstr "クリーンアップ中"
 
 #. TRANSLATORS: The action of the package, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:484
+#: ../lib/packagekit-glib2/pk-console-shared.c:491
 msgid "Obsoleting"
 msgstr "旧ファイル区分中"
 
 #. TRANSLATORS: The action of the package, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:488
+#: ../lib/packagekit-glib2/pk-console-shared.c:495
 msgid "Reinstalling"
 msgstr "再インストール中"
 
 #. TRANSLATORS: The action of the package, in past tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:506
+#: ../lib/packagekit-glib2/pk-console-shared.c:513
 msgid "Downloaded"
 msgstr "ダウンロード済み"
 
 #. TRANSLATORS: The action of the package, in past tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:518
+#: ../lib/packagekit-glib2/pk-console-shared.c:525
 msgid "Removed"
 msgstr "削除済み"
 
 #. TRANSLATORS: The action of the package, in past tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:522
+#: ../lib/packagekit-glib2/pk-console-shared.c:529
 msgid "Cleaned up"
 msgstr "クリーンアップ済み"
 
 #. TRANSLATORS: The action of the package, in past tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:526
+#: ../lib/packagekit-glib2/pk-console-shared.c:533
 msgid "Obsoleted"
 msgstr "旧ファイル分類済み"
 
 #. TRANSLATORS: The action of the package, in past tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:530
+#: ../lib/packagekit-glib2/pk-console-shared.c:537
 msgid "Reinstalled"
 msgstr "再インストール済み"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:548
+#: ../lib/packagekit-glib2/pk-console-shared.c:555
 msgid "Unknown role type"
 msgstr "不明なロールタイプ"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:552
+#: ../lib/packagekit-glib2/pk-console-shared.c:559
 msgid "Getting dependencies"
 msgstr "依存関係を取得中"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:556
+#: ../lib/packagekit-glib2/pk-console-shared.c:563
 msgid "Getting update details"
 msgstr "更新の詳細を取得中"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:560
+#: ../lib/packagekit-glib2/pk-console-shared.c:567
 msgid "Getting details"
 msgstr "詳細を取得中"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:564
+#: ../lib/packagekit-glib2/pk-console-shared.c:571
 msgid "Getting requires"
 msgstr "要求を取得中"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:568
+#: ../lib/packagekit-glib2/pk-console-shared.c:575
 msgid "Getting updates"
 msgstr "更新を取得中"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:572
+#: ../lib/packagekit-glib2/pk-console-shared.c:579
 msgid "Searching by details"
 msgstr "詳細で検索中"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:576
+#: ../lib/packagekit-glib2/pk-console-shared.c:583
 msgid "Searching by file"
 msgstr "ファイルで検索中"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:580
+#: ../lib/packagekit-glib2/pk-console-shared.c:587
 msgid "Searching groups"
 msgstr "グループ検索中"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:584
+#: ../lib/packagekit-glib2/pk-console-shared.c:591
 msgid "Searching by name"
 msgstr "名前で検索中"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:596
+#: ../lib/packagekit-glib2/pk-console-shared.c:603
 msgid "Installing files"
 msgstr "ファイルをインストール中"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:600
+#: ../lib/packagekit-glib2/pk-console-shared.c:607
 msgid "Refreshing cache"
 msgstr "キャッシュをリフレッシュ中"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:604
+#: ../lib/packagekit-glib2/pk-console-shared.c:611
 msgid "Updating packages"
 msgstr "パッケージを更新中"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:608
+#: ../lib/packagekit-glib2/pk-console-shared.c:615
 msgid "Updating system"
 msgstr "システムを更新中"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:612
+#: ../lib/packagekit-glib2/pk-console-shared.c:619
 msgid "Canceling"
 msgstr "キャンセル中"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:620
+#: ../lib/packagekit-glib2/pk-console-shared.c:627
 msgid "Getting repositories"
 msgstr "レポジトリを取得中"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:624
+#: ../lib/packagekit-glib2/pk-console-shared.c:631
 msgid "Enabling repository"
 msgstr "レポジトリを有効化中"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:628
+#: ../lib/packagekit-glib2/pk-console-shared.c:635
 msgid "Setting data"
 msgstr "データを設定中"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:632
+#: ../lib/packagekit-glib2/pk-console-shared.c:639
 msgid "Resolving"
 msgstr "解除中"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:636
+#: ../lib/packagekit-glib2/pk-console-shared.c:643
 msgid "Getting file list"
 msgstr "ファイルリストを取得中"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:640
+#: ../lib/packagekit-glib2/pk-console-shared.c:647
 msgid "Getting provides"
 msgstr "provide を取得中"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:644
+#: ../lib/packagekit-glib2/pk-console-shared.c:651
 msgid "Installing signature"
 msgstr "署名をインストール中"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:648
+#: ../lib/packagekit-glib2/pk-console-shared.c:655
 msgid "Getting packages"
 msgstr "パッケージを獲得中"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:652
+#: ../lib/packagekit-glib2/pk-console-shared.c:659
 msgid "Accepting EULA"
 msgstr "EULA を受入れ中"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:660
+#: ../lib/packagekit-glib2/pk-console-shared.c:667
 msgid "Getting upgrades"
 msgstr "更新を獲得中"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:664
+#: ../lib/packagekit-glib2/pk-console-shared.c:671
 msgid "Getting categories"
 msgstr "区分を獲得中"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:668
+#: ../lib/packagekit-glib2/pk-console-shared.c:675
 msgid "Getting transactions"
 msgstr "トランザクションを獲得中"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:672
-#: ../lib/packagekit-glib2/pk-console-shared.c:676
+#: ../lib/packagekit-glib2/pk-console-shared.c:679
+#: ../lib/packagekit-glib2/pk-console-shared.c:683
 msgid "Simulating install"
 msgstr "インストールをシミュレート中"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:680
+#: ../lib/packagekit-glib2/pk-console-shared.c:687
 msgid "Simulating remove"
 msgstr "削除をシミュレート中"
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:684
+#: ../lib/packagekit-glib2/pk-console-shared.c:691
 msgid "Simulating update"
 msgstr "更新をシミュレート中"
 
@@ -1699,44 +1730,48 @@ 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"
+msgstr "パッケージの展開に使用される場所を変更するには 認証が必要です"
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:12
 msgid ""
 "Authentication is required to consider a key used for signing packages as "
 "trusted"
 msgstr "パッケージ署名に使用されたキーを信頼できると判定するには認証が必要です"
 
-#: ../policy/org.freedesktop.packagekit.policy.in.h:12
+#: ../policy/org.freedesktop.packagekit.policy.in.h:13
 msgid "Authentication is required to install a signed package"
 msgstr "署名付きのパッケージをインストールするには認証が必要です"
 
-#: ../policy/org.freedesktop.packagekit.policy.in.h:13
+#: ../policy/org.freedesktop.packagekit.policy.in.h:14
 msgid "Authentication is required to install an untrusted package"
 msgstr "信頼できないパッケージをインストールするには認証が必要です"
 
-#: ../policy/org.freedesktop.packagekit.policy.in.h:14
+#: ../policy/org.freedesktop.packagekit.policy.in.h:15
 msgid "Authentication is required to refresh the system sources"
 msgstr "システムソースをリフレッシュするには認証が必要です"
 
-#: ../policy/org.freedesktop.packagekit.policy.in.h:15
+#: ../policy/org.freedesktop.packagekit.policy.in.h:16
 msgid "Authentication is required to reload the device with a new driver"
 msgstr "新規ドライバーでデバイスを再ロードするには認証が必要です"
 
-#: ../policy/org.freedesktop.packagekit.policy.in.h:16
+#: ../policy/org.freedesktop.packagekit.policy.in.h:17
 msgid "Authentication is required to remove packages"
 msgstr "パッケージを削除するには認証が必要です"
 
-#: ../policy/org.freedesktop.packagekit.policy.in.h:17
+#: ../policy/org.freedesktop.packagekit.policy.in.h:18
 msgid "Authentication is required to rollback a transaction"
 msgstr "トランザクションを元に戻すには認証が必要です"
 
-#: ../policy/org.freedesktop.packagekit.policy.in.h:18
+#: ../policy/org.freedesktop.packagekit.policy.in.h:19
 msgid ""
 "Authentication is required to set the network proxy used for downloading "
 "packages"
 msgstr ""
-"パッケージのダウンロードに使用されるネットワークプロキシをセットするには "
-"認証が必要です"
+"パッケージのダウンロードに使用されるネットワークプロキシをセットするには 認証"
+"が必要です"
 
-#: ../policy/org.freedesktop.packagekit.policy.in.h:19
+#: ../policy/org.freedesktop.packagekit.policy.in.h:20
 msgid "Authentication is required to update packages"
 msgstr "パッケージを更新するには認証が必要です"
 
@@ -1745,16 +1780,26 @@ msgstr "パッケージを更新するには認証が必要です"
 #. authentication, but a different user id needs the admin password
 #. to cancel another users task.
 #.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:25
+#: ../policy/org.freedesktop.packagekit.policy.in.h:26
 msgid "Cancel foreign task"
 msgstr "他人のタスクをキャンセル"
 
 #. 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:33
+msgid "Change location that packages are installed"
+msgstr "パッケージがインストールされる場所を変更する"
+
+#. 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:31
+#: ../policy/org.freedesktop.packagekit.policy.in.h:39
 msgid "Change software source parameters"
 msgstr "ソフトウェアのソースパラメータを変更"
 
@@ -1764,7 +1809,7 @@ msgstr "ソフトウェアのソースパラメータを変更"
 #. - Paranoid users (or parents!) can change this to 'auth_admin' or
 #. 'auth_admin_keep'.
 #.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:38
+#: ../policy/org.freedesktop.packagekit.policy.in.h:46
 msgid "Install signed package"
 msgstr "署名付きのパッケージをインストール"
 
@@ -1774,7 +1819,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:45
+#: ../policy/org.freedesktop.packagekit.policy.in.h:53
 msgid "Install untrusted local file"
 msgstr "信頼できないローカルファイルをインストール"
 
@@ -1782,7 +1827,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:50
+#: ../policy/org.freedesktop.packagekit.policy.in.h:58
 msgid "Refresh system sources"
 msgstr "システムソースをリフレッシュ"
 
@@ -1793,7 +1838,7 @@ msgstr "システムソースをリフレッシュ"
 #. try to rebind drivers in use, for instance security authentication
 #. devices.
 #.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:58
+#: ../policy/org.freedesktop.packagekit.policy.in.h:66
 msgid "Reload a device"
 msgstr "デバイスを再ロード"
 
@@ -1806,7 +1851,7 @@ msgstr "デバイスを再ロード"
 #. be removed. If this is not possible, change this authentication to
 #. 'auth_admin'.
 #.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:68
+#: ../policy/org.freedesktop.packagekit.policy.in.h:76
 msgid "Remove package"
 msgstr "パッケージを削除"
 
@@ -1815,7 +1860,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:74
+#: ../policy/org.freedesktop.packagekit.policy.in.h:82
 msgid "Rollback to a previous transaction"
 msgstr "以前のトランザクションに戻る"
 
@@ -1823,7 +1868,7 @@ msgstr "以前のトランザクションに戻る"
 #. - Normal users do not require admin authentication to set the proxy
 #. used for downloading packages.
 #.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:79
+#: ../policy/org.freedesktop.packagekit.policy.in.h:87
 msgid "Set network proxy"
 msgstr "ネットワークプロキシをセット"
 
@@ -1833,7 +1878,7 @@ msgstr "ネットワークプロキシをセット"
 #. without a secure authentication.
 #. - This is not kept as each package should be authenticated.
 #.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:86
+#: ../policy/org.freedesktop.packagekit.policy.in.h:94
 msgid "Trust a key used for signing packages"
 msgstr "パッケージの署名に使用されたキーを信頼"
 
@@ -1844,7 +1889,7 @@ msgstr "パッケージの署名に使用されたキーを信頼"
 #. - Changing this to anything other than 'yes' will break unattended
 #. updates.
 #.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:94
+#: ../policy/org.freedesktop.packagekit.policy.in.h:102
 msgid "Update packages"
 msgstr "パッケージを更新"
 
@@ -1868,7 +1913,9 @@ msgstr "正しいユーザーが実行可能ファイルを開始していない
 msgid ""
 "The org.freedesktop.PackageKit.conf file is not installed in the system "
 "directory:"
-msgstr "org.freedesktop.PackageKit.conf ファイルがシステムディレクトリにインストールされていない:"
+msgstr ""
+"org.freedesktop.PackageKit.conf ファイルがシステムディレクトリにインストール"
+"されていない:"
 
 #. TRANSLATORS: a backend is the system package tool, e.g. yum, apt
 #: ../src/pk-main.c:199
@@ -1918,8 +1965,8 @@ msgstr "スタートの試行でエラー:"
 #: ../src/pk-polkit-action-lookup.c:150
 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
@@ -1932,15 +1979,21 @@ msgstr "実行が安全なことを確信できない限りはこのパッケー
 
 #: ../src/pk-polkit-action-lookup.c:177
 msgid "Do not update these packages unless you are sure it is safe to do so."
-msgstr "実行が安全なことを確信できない限りはこれらのパッケージ群を更新しないで下さい。"
+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
@@ -1958,25 +2011,25 @@ msgid "Show debugging information for all files"
 msgstr "全てのファイル用にデバッグ情報を表示"
 
 #. TRANSLATORS: a list of modules to debug
-#: ../src/egg-debug.c:459
+#: ../src/egg-debug.c:458
 msgid "Debug these specific modules"
 msgstr "これらの特定のモジュールをデバグ"
 
 #. TRANSLATORS: a list of functions to debug
-#: ../src/egg-debug.c:462
+#: ../src/egg-debug.c:461
 msgid "Debug these specific functions"
 msgstr "これらの特定の機能をデバグ"
 
 #. TRANSLATORS: save to a log
-#: ../src/egg-debug.c:465
+#: ../src/egg-debug.c:464
 msgid "Log debugging data to a file"
 msgstr "デバッギングデータをファイルにログ"
 
-#: ../src/egg-debug.c:469
+#: ../src/egg-debug.c:468
 msgid "Debugging Options"
 msgstr "デバッギングオプション"
 
-#: ../src/egg-debug.c:469
+#: ../src/egg-debug.c:468
 msgid "Show debugging options"
 msgstr "デバッグオプションを表示"
 
commit 3ab408f760040a8e3913ce55544ba261169b7f3b
Author: Richard Hughes <richard at hughsie.com>
Date:   Wed Jun 2 21:45:19 2010 +0100

    trivial: sync the fedora spec file with upstream

diff --git a/contrib/PackageKit.spec.in b/contrib/PackageKit.spec.in
index fe39b91..8939599 100644
--- a/contrib/PackageKit.spec.in
+++ b/contrib/PackageKit.spec.in
@@ -49,12 +49,6 @@ BuildRequires: pm-utils-devel
 BuildRequires: fontconfig-devel
 BuildRequires: gobject-introspection-devel
 
-# for the fancy new yum accelerator
-BuildRequires: rpm-devel
-BuildRequires: libsoup-devel
-BuildRequires: bzip2-devel
-BuildRequires: zlib-devel
-
 # functionality moved to udev itself
 Obsoletes: PackageKit-udev-helper < %{version}-%{release}
 Obsoletes: udev-packagekit < %{version}-%{release}
commit 60f0dbeece8dc8f2b089d843705a80382856c237
Author: Richard Hughes <richard at hughsie.com>
Date:   Wed Jun 2 11:11:47 2010 +0100

    trivial: post release version bump

diff --git a/RELEASE b/RELEASE
index 5b5ca6c..4bfad3e 100644
--- a/RELEASE
+++ b/RELEASE
@@ -2,10 +2,10 @@ PackageKit Release Notes
 
 1. Write NEWS entries for PackageKit in the same format as usual.
 
-git shortlog PACKAGEKIT_0_6_4.. | grep -i -v trivial | grep -v Merge > NEWS.new
+git shortlog PACKAGEKIT_0_6_5.. | grep -i -v trivial | grep -v Merge > NEWS.new
 
 --------------------------------------------------------------------------------
-Version 0.6.5
+Version 0.6.6
 ~~~~~~~~~~~~~
 Released: 2010-xx-xx
 
@@ -28,8 +28,8 @@ Bugfixes:
 
 4. Commit changes in PackageKit git:
 
-git commit -a -m "Release version 0.6.5"
-git tag -s -f -m "Release 0.6.5" PACKAGEKIT_0_6_5
+git commit -a -m "Release version 0.6.6"
+git tag -s -f -m "Release 0.6.6" PACKAGEKIT_0_6_6
 <gpg password>
 git push --tags
 git push
@@ -54,9 +54,9 @@ git push
 10. Send an email to packagekit at lists.freedesktop.org
 
 =================================================
-Subject: PackageKit 0.6.5 released!
+Subject: PackageKit 0.6.6 released!
 
-Today I released PackageKit 0.6.5.
+Today I released PackageKit 0.6.6.
 
 PackageKit release notes: http://cgit.freedesktop.org/packagekit/tree/NEWS
 
diff --git a/configure.ac b/configure.ac
index ae0dfc6..321444e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -3,7 +3,7 @@ AC_PREREQ(2.63)
 
 m4_define([pk_major_version], [0])
 m4_define([pk_minor_version], [6])
-m4_define([pk_micro_version], [5])
+m4_define([pk_micro_version], [6])
 m4_define([pk_version],
           [pk_major_version.pk_minor_version.pk_micro_version])
 


More information about the PackageKit-commit mailing list