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

Richard Hughes hughsient at kemper.freedesktop.org
Wed May 4 02:51:33 PDT 2011


 Makefile.am                                        |    2 
 NEWS                                               |   99 
 RELEASE                                            |   10 
 backends/Makefile.am                               |    4 
 backends/alpm/Makefile.am                          |   56 
 backends/alpm/TODO                                 |    4 
 backends/alpm/groups.list                          |   65 
 backends/alpm/pacman.conf                          |   12 
 backends/alpm/pk-backend-alpm.c                    | 1766 ++---------------
 backends/alpm/pk-backend-alpm.h                    |   47 
 backends/alpm/pk-backend-config.c                  |  775 +++++++
 backends/alpm/pk-backend-config.h                  |   26 
 backends/alpm/pk-backend-databases.c               |  346 +++
 backends/alpm/pk-backend-databases.h               |   30 
 backends/alpm/pk-backend-depends.c                 |  269 ++
 backends/alpm/pk-backend-depends.h                 |   22 
 backends/alpm/pk-backend-error.c                   |  203 +
 backends/alpm/pk-backend-error.h                   |   37 
 backends/alpm/pk-backend-groups.c                  |  153 +
 backends/alpm/pk-backend-groups.h                  |   32 
 backends/alpm/pk-backend-install.c                 |  124 +
 backends/alpm/pk-backend-install.h                 |   22 
 backends/alpm/pk-backend-packages.c                |  363 +++
 backends/alpm/pk-backend-packages.h                |   33 
 backends/alpm/pk-backend-remove.c                  |  167 +
 backends/alpm/pk-backend-remove.h                  |   22 
 backends/alpm/pk-backend-search.c                  |  450 ++++
 backends/alpm/pk-backend-search.h                  |   22 
 backends/alpm/pk-backend-sync.c                    |  286 ++
 backends/alpm/pk-backend-sync.h                    |   22 
 backends/alpm/pk-backend-transaction.c             |  916 ++++++++
 backends/alpm/pk-backend-transaction.h             |   43 
 backends/alpm/pk-backend-update.c                  |  443 ++++
 backends/alpm/pk-backend-update.h                  |   22 
 backends/aptcc/Makefile.am                         |    2 
 backends/conary/Makefile.am                        |    9 
 backends/conary/TODO                               |   19 
 backends/conary/XMLCache.py                        |   62 
 backends/conary/conaryBackend.py                   |  968 ++-------
 backends/conary/conaryCallback.py                  |   37 
 backends/conary/conaryEnums.py                     |   22 
 backends/conary/conaryFilter.py                    |    5 
 backends/conary/conarypk.py                        |  417 +++-
 backends/conary/generateXML.py                     |    9 
 backends/conary/pk-backend-conary.c                |  291 --
 backends/entropy/entropyBackend.py                 |   91 
 backends/pacman/Makefile.am                        |   53 
 backends/pacman/backend-depends.c                  |  298 --
 backends/pacman/backend-depends.h                  |   33 
 backends/pacman/backend-error.c                    |  185 -
 backends/pacman/backend-error.h                    |   29 
 backends/pacman/backend-groups.c                   |  150 -
 backends/pacman/backend-groups.h                   |   32 
 backends/pacman/backend-install.c                  |  348 ---
 backends/pacman/backend-install.h                  |   45 
 backends/pacman/backend-packages.c                 |  345 ---
 backends/pacman/backend-packages.h                 |   41 
 backends/pacman/backend-pacman.c                   |  260 --
 backends/pacman/backend-pacman.h                   |   35 
 backends/pacman/backend-remove.c                   |  142 -
 backends/pacman/backend-remove.h                   |   32 
 backends/pacman/backend-repos.c                    |  298 --
 backends/pacman/backend-repos.h                    |   37 
 backends/pacman/backend-search.c                   |  479 ----
 backends/pacman/backend-search.h                   |   43 
 backends/pacman/backend-transaction.c              |  532 -----
 backends/pacman/backend-transaction.h              |   54 
 backends/pacman/backend-update.c                   |  394 ---
 backends/pacman/backend-update.h                   |   31 
 backends/pacman/groups.list                        |   65 
 backends/pacman/pacman.conf                        |   12 
 backends/poldek/pk-backend-poldek.c                |  362 +--
 backends/yum/yumBackend.py                         |   46 
 backends/yum/yumFilter.py                          |   17 
 backends/zypp/pk-backend-zypp.cpp                  |  607 +++--
 backends/zypp/zypp-events.h                        |   12 
 backends/zypp/zypp-utils.cpp                       |  541 ++---
 backends/zypp/zypp-utils.h                         |   19 
 client/pk-console.c                                |    3 
 configure.ac                                       |   39 
 contrib/PackageKit.spec.in                         |    9 
 contrib/browser-plugin/Makefile.am                 |    1 
 contrib/browser-plugin/pk-main.c                   |    2 
 contrib/debuginfo-install/pk-debuginfo-install.c   |    4 
 docs/html/img/author-dantti.png                    |binary
 docs/html/pk-authors.html                          |   16 
 docs/html/pk-bugs.html                             |    4 
 docs/html/pk-download.html                         |    9 
 docs/html/pk-matrix.html                           |   66 
 etc/PackageKit.conf.in                             |   20 
 lib/Makefile.am                                    |    4 
 lib/packagekit-glib2/Makefile.am                   |    7 
 lib/packagekit-glib2/pk-catalog.c                  |    2 
 lib/packagekit-glib2/pk-client-sync.c              |   12 
 lib/packagekit-glib2/pk-client.c                   |   31 
 lib/packagekit-glib2/pk-common.c                   |    2 
 lib/packagekit-glib2/pk-control-sync.c             |   63 
 lib/packagekit-glib2/pk-control-sync.h             |    9 
 lib/packagekit-glib2/pk-control.c                  |   66 
 lib/packagekit-glib2/pk-control.h                  |   10 
 lib/packagekit-glib2/pk-debug.c                    |    2 
 lib/packagekit-glib2/pk-enum.c                     |    2 
 lib/packagekit-glib2/pk-enum.h                     |    2 
 lib/packagekit-glib2/pk-task-sync.c                |   28 
 lib/packagekit-glib2/pk-task.c                     |   34 
 lib/packagekit-qt/src/client.cpp                   |   23 
 lib/packagekit-qt/src/client.h                     |   18 
 lib/packagekit-qt/src/transaction.cpp              |   10 
 lib/packagekit-qt/src/transaction.h                |    7 
 lib/packagekit-qt2/.gitignore                      |   10 
 lib/packagekit-qt2/Daemon                          |    1 
 lib/packagekit-qt2/Doxyfile                        | 1251 ++++++++++++
 lib/packagekit-qt2/Eula                            |    1 
 lib/packagekit-qt2/Makefile.am                     |  129 +
 lib/packagekit-qt2/Package                         |    1 
 lib/packagekit-qt2/Signature                       |    1 
 lib/packagekit-qt2/Transaction                     |    1 
 lib/packagekit-qt2/bitfield.cpp                    |   70 
 lib/packagekit-qt2/bitfield.h                      |   33 
 lib/packagekit-qt2/common.h                        |   36 
 lib/packagekit-qt2/daemon.cpp                      |  234 ++
 lib/packagekit-qt2/daemon.h                        |  296 ++
 lib/packagekit-qt2/daemonprivate.cpp               |   59 
 lib/packagekit-qt2/daemonprivate.h                 |   76 
 lib/packagekit-qt2/eula.cpp                        |   22 
 lib/packagekit-qt2/eula.h                          |   56 
 lib/packagekit-qt2/modules/FindPackageKitQt2.cmake |   40 
 lib/packagekit-qt2/modules/Makefile.am             |    7 
 lib/packagekit-qt2/package.cpp                     |  560 +++++
 lib/packagekit-qt2/package.h                       |  430 ++++
 lib/packagekit-qt2/packagekit-qt2.pc.in            |   11 
 lib/packagekit-qt2/signature.cpp                   |   24 
 lib/packagekit-qt2/signature.h                     |   86 
 lib/packagekit-qt2/transaction.cpp                 |  635 ++++++
 lib/packagekit-qt2/transaction.h                   | 1120 ++++++++++
 lib/packagekit-qt2/transactionprivate.cpp          |  227 ++
 lib/packagekit-qt2/transactionprivate.h            |   84 
 lib/packagekit-qt2/util.cpp                        |   71 
 lib/packagekit-qt2/util.h                          |  129 +
 lib/python/packagekit/filter.py                    |   87 
 po/LINGUAS                                         |   12 
 po/PackageKit.pot                                  |  374 +--
 po/ar.po                                           | 2102 ++++++++++++++++++++
 po/as.po                                           |    2 
 po/bg.po                                           |    4 
 po/bg_BG.po                                        | 2098 ++++++++++++++++++++
 po/bn_IN.po                                        |    4 
 po/ca.po                                           |    4 
 po/ca at valencia.po                                  | 2098 ++++++++++++++++++++
 po/cs.po                                           |    4 
 po/da.po                                           |   24 
 po/el.po                                           |    4 
 po/en_GB.po                                        |    2 
 po/es.po                                           |    4 
 po/eu.po                                           |    4 
 po/fa_IR.po                                        | 2097 ++++++++++++++++++++
 po/fi.po                                           |    4 
 po/fr.po                                           |  109 -
 po/ga.po                                           | 2101 ++++++++++++++++++++
 po/gl.po                                           | 2139 +++++++++++++++++++++
 po/gu.po                                           |    2 
 po/he.po                                           |    2 
 po/hi.po                                           |    4 
 po/hu.po                                           |    4 
 po/id.po                                           |    4 
 po/it.po                                           |    4 
 po/it_IT.po                                        | 2105 ++++++++++++++++++++
 po/ja.po                                           |    2 
 po/kk.po                                           | 2097 ++++++++++++++++++++
 po/kn.po                                           |    2 
 po/ko.po                                           |    4 
 po/lt.po                                           |    2 
 po/ml.po                                           |    2 
 po/mr.po                                           |    2 
 po/ms.po                                           |    2 
 po/nb.po                                           |    2 
 po/nl.po                                           |    2 
 po/or.po                                           |    2 
 po/pa.po                                           |    4 
 po/pl.po                                           |    4 
 po/pt.po                                           |    2 
 po/pt_BR.po                                        |    4 
 po/ro.po                                           |    4 
 po/ru.po                                           |   47 
 po/sk.po                                           |  475 ++--
 po/sl.po                                           | 2100 ++++++++++++++++++++
 po/sr.po                                           |    4 
 po/sr at latin.po                                     |    4 
 po/sv.po                                           |    4 
 po/ta.po                                           |    2 
 po/te.po                                           |    2 
 po/th.po                                           |    2 
 po/tr.po                                           |    4 
 po/uk.po                                           |    4 
 po/wa.po                                           | 2098 ++++++++++++++++++++
 po/zh_CN.po                                        |    4 
 po/zh_TW.po                                        |    4 
 src/org.freedesktop.PackageKit.Transaction.xml     |   16 
 src/org.freedesktop.PackageKit.xml                 |   39 
 src/pk-backend-spawn.c                             |   44 
 src/pk-backend.c                                   |   78 
 src/pk-backend.h                                   |   11 
 src/pk-engine.c                                    |  170 +
 src/pk-engine.h                                    |    4 
 src/pk-main.c                                      |   29 
 src/pk-self-test.c                                 |   44 
 src/pk-transaction-db.c                            |  128 +
 src/pk-transaction-db.h                            |   12 
 src/pk-transaction-list.c                          |   81 
 src/pk-transaction-list.h                          |    1 
 src/pk-transaction.c                               |   99 
 src/pk-transaction.h                               |    2 
 212 files changed, 35422 insertions(+), 8237 deletions(-)

New commits:
commit 9d7f3263cf3ac9c4ad3fbf1017e2f2d950266f60
Author: Richard Hughes <richard at hughsie.com>
Date:   Wed May 4 10:50:53 2011 +0100

    Release version 0.6.14

diff --git a/NEWS b/NEWS
index 4b23ae4..4682a13 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,102 @@
+Version 0.6.14
+~~~~~~~~~~~~~~
+Released: 2011-05-04
+
+Notes:
+ - Lots of nice bugfixes in this release, along with slight changes to
+   the SetProxy() and DownloadPackages() D-Bus API.
+   If you're using either packagekit-glib or packagekit-qt then there's
+   no change required as the libraries have symbol fallbacks.
+ - The packageKit-qt2 library has been committed by Daniel Nicoletti,
+   which is eventually aiming to replace packagekit-qt.
+
+Libraries:
+ - glib: Add GIR annotations to make PK GIR usable (Matthias Klumpp)
+ - glib: Add header name to GIR and set export package (Matthias Klumpp)
+ - qt2: A crash was apparently a caching error on apper build dir (Daniel Nicoletti)
+ - qt2: Add Eula class to avoid API breaks in case pk changes (Daniel Nicoletti)
+ - qt2: Add Signature header and install Daemon header (Daniel Nicoletti)
+ - qt2: Change the Transaction constructor to be more convinient (Daniel Nicoletti)
+ - qt2: Fix Package class to not delete d, which fixes crashes weirdly (Daniel Nicoletti)
+ - qt2: Include QSet in package.h so that Groups get defined (Daniel Nicoletti)
+ - qt2: Updating enums and adding UpgradeSystem() method (Daniel Nicoletti)
+ - qt: Add storeInCache parameter to downloadPackages to cover new API (Daniel Nicoletti)
+ - qt: Fix typo in SearchGroups (Dimitar Popov)
+
+Backends:
+ - alpm: download packages to the system cache if no directory is specified (Jonathan Conder)
+ - alpm: Port features from the pacman backend (Jonathan Conder)
+ - alpm: update for libalpm 6 (Jonathan Conder)
+ - aptcc: Fix configure.ac to avoid pk-qt linking against apt-pkg (Daniel Nicoletti)
+ - conary: add a method to reset callback (Jesse Zhang)
+ - conary: add exception handling around get_updateall_job (Jesse Zhang)
+ - conary: bring back exception handling around build_update_job (Jesse Zhang)
+ - conary: clear job cache at the right place (Jesse Zhang)
+ - conary: clear the job cache when updating through non-sysmodel pathway. (Og B. Maciel)
+ - conary: don't support UpdatePackages (Jesse Zhang)
+ - conary: fix call of deleted method in conaryCallback (Jesse Zhang)
+ - conary: fix exception processing of applyUpdateJob (Jesse Zhang)
+ - conary: fix generating XMLCache for custom labels (Jesse Zhang)
+ - conary: fix get-updates (Jesse Zhang)
+ - conary: handle stale jobs for updateall (Og B. Maciel)
+ - conary: implement get-updates for system model (Jesse Zhang)
+ - conary: implement install/remove for system model (Jesse Zhang)
+ - conary: make pylint happier (Jesse Zhang)
+ - conary: move build_update_job to where it belongs (Jesse Zhang)
+ - conary: move job caching methods to UpdateJobCache (Jesse Zhang)
+ - conary: move more code to conarypk (Jesse Zhang)
+ - conary: port away from PK_BACKEND_OPTIONS (Jesse Zhang)
+ - conary: process packages update/erase in a single job (Jesse Zhang)
+ - conary: really implement simulate* and don't rely on conary --test (Jesse Zhang)
+ - conary: reduce code duplication between get_updates and update_system (Jesse Zhang)
+ - conary: remove abundant imports (Jesse Zhang)
+ - conary: remove broken GetDepends implementation (Jesse Zhang)
+ - conary: remove class scope variable (Jesse Zhang)
+ - conary: rename variables to better reflect the return type (Jesse Zhang)
+ - conary: show update jobs correctly (Jesse Zhang)
+ - entropy: drop entropy.tools deprecated functions usage (Fabio Erculiani)
+ - entropy: make use of the new Entropy Web Services interfaces (Fabio Erculiani)
+ - entropy: restore compatibility with newer releases (Fabio Erculiani)
+ - poldek: port away from PK_BACKEND_OPTIONS (Marcin Banasiak)
+ - yum: fix DownloadPackages to save to the system cache if there is no directory passed to it (Richard Hughes)
+ - yum: implement _pkg_compare() and use get_package_list() (Richard Hughes)
+ - zypp: check repo file before using it (Zhang Qiang)
+ - zypp:consider only_trusted option while installing packages (Zhang Qiang)
+ - zypp:fix memory leak in pk_backend_transaction_start (Zhang Qiang)
+ - zypp: Patch::Content is returned by value. Fixes crash on get-updates (bnc#685831) (Duncan Mac-Vicar P)
+ - zypp:reload RpmDB before removing packages (Zhang Qiang)
+ - zypp: Report download speed (bnc#663069) (Duncan Mac-Vicar P)
+ - zypp: reset packages status in repo while removing packages (Zhang Qiang)
+ - zypp:Set locale info at the begin of transaction (Zhang Qiang)
+ - zypp: support proxy_https,proxy_socks,no_proxy (Zhang Qiang)
+ - zypp: use namespace once to remove the namespace noise. (Duncan Mac-Vicar P)
+ - zypp: Use output parameters (references) for containers (Duncan Mac-Vicar P)
+
+New Features:
+ - Add a 'store_in_cache' attribute to the DownloadPackages method (Richard Hughes)
+ - Automatically cancel running background transactions if a foreground transaction is committed (Richard Hughes)
+ - Cancel any background transactions when we get SuggestDaemonQuit (Richard Hughes)
+ - Introduce other attributes in the SetProxy() method (Richard Hughes)
+
+Bugfixes:
+ - docs: Set zypp backend can downloadPackages (Zhang Qiang)
+ - browser-plugin: Remove deprecated symbols (Matthias Klumpp)
+ - Fix precedence when assigning strings to a *GStrv (Jonny Lamb)
+ - Create transaction db properly if it's not exist (Zhang Qiang)
+ - docs: Fix path of packagekitd (Jesse Zhang)
+ - docs: Update Feature Matrix for conary (Jesse Zhang)
+ - docs: Updating the kpackagekit info and adding myself to authors (Daniel Nicoletti)
+ - Do not abort in pk_catalog_init() if PackageKit is not available. Fixes rh#688280 (Richard Hughes)
+ - Do not allow backends to output duplicate older packages when searching with newest (Richard Hughes)
+ - Fix a crash where the error code was pointing to freed memory. Fixes rh#684464 (Richard Hughes)
+ - Fix a typo in pk_transaction_db_get_proxy (Zhang Qiang)
+ - Get more proxy info after the new proxy parameters was introduced (Zhang Qiang)
+ - Honour ACLOCAL_FLAGS in Makefile.am. Fixes fd#35237 (Richard Hughes)
+ - pkcon: add missing {} around if (Jesse Zhang)
+ - pk-debuginfo-install: fix typo of using PK_FILTER (Zhang Qiang)
+ - Remove pacman backend (Jonathan Conder)
+ - Use the new threadsafe signal handling support in GLib (Richard Hughes)
+
 Version 0.6.13
 ~~~~~~~~~~~~~~
 Released: 2011-03-07
diff --git a/configure.ac b/configure.ac
index 327750e..3f80f51 100644
--- a/configure.ac
+++ b/configure.ac
@@ -37,7 +37,7 @@ AC_SUBST(PK_VERSION)
 # AGE		If libpackagekit can be linked into executables which can be
 # 		built with previous versions of this library. Don't use.
 LT_CURRENT=14
-LT_REVISION=6
+LT_REVISION=7
 LT_AGE=0
 AC_SUBST(LT_CURRENT)
 AC_SUBST(LT_REVISION)
diff --git a/docs/html/pk-download.html b/docs/html/pk-download.html
index bba5da2..aa73bd8 100644
--- a/docs/html/pk-download.html
+++ b/docs/html/pk-download.html
@@ -72,6 +72,7 @@ Releases are normally on the first working Monday of each month.
 </p>
 <table>
 <tr><td><b>Version</b></td><td>&nbsp;&nbsp;</td><td><b>Date</b></td></tr>
+<tr><td>0.6.14</td><td></td><td>2011-05-04</td></tr>
 <tr><td>0.6.13</td><td></td><td>2011-03-07</td></tr>
 <tr><td>0.6.12</td><td></td><td>2011-02-01</td></tr>
 <tr><td>0.6.11</td><td></td><td>2010-12-13</td></tr>
diff --git a/po/LINGUAS b/po/LINGUAS
index dfda8bf..aca4c92 100644
--- a/po/LINGUAS
+++ b/po/LINGUAS
@@ -1,7 +1,10 @@
+ar
 as
+bg_BG
 bg
 bn_IN
 ca
+ca at valencia
 cs
 da
 de
@@ -9,8 +12,10 @@ el
 en_GB
 es
 eu
+fa_IR
 fi
 fr
+ga
 gl
 gu
 he
@@ -20,6 +25,7 @@ id
 it_IT
 it
 ja
+kk
 kn
 ko
 lt
@@ -36,6 +42,7 @@ pt
 ro
 ru
 sk
+sl
 sr at latin
 sr
 sv
@@ -44,5 +51,6 @@ te
 th
 tr
 uk
+wa
 zh_CN
 zh_TW
diff --git a/po/PackageKit.pot b/po/PackageKit.pot
index a160f6b..cedb1fd 100644
--- a/po/PackageKit.pot
+++ b/po/PackageKit.pot
@@ -3,11 +3,12 @@
 # This file is distributed under the same license as the PACKAGE package.
 # FIRST AUTHOR <EMAIL at ADDRESS>, YEAR.
 #
+#, fuzzy
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-12-13 12:23+0000\n"
+"POT-Creation-Date: 2011-05-04 10:50+0100\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
 "Language-Team: LANGUAGE <LL at li.org>\n"
@@ -15,7 +16,6 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=CHARSET\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
 #. TRANSLATORS: this is an atomic transaction
 #. TRANSLATORS: the role is the point of the transaction, e.g. update-system
@@ -42,8 +42,7 @@ 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:180 ../src/pk-polkit-action-lookup.c:332
+#: ../client/pk-console.c:180
 msgid "Role"
 msgstr ""
 
@@ -57,8 +56,7 @@ 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:189 ../src/pk-polkit-action-lookup.c:346
+#: ../client/pk-console.c:189
 msgid "Command line"
 msgstr ""
 
@@ -135,15 +133,11 @@ msgstr ""
 #. TRANSLATORS: the package that is being processed
 #. TRANSLATORS: the package that is not signed by a known key
 #. TRANSLATORS: the package name that was trying to be installed
-#. TRANSLATORS: title, the names of the packages that the method is processing
 #: ../client/pk-console.c:345 ../client/pk-console.c:615
 #: ../lib/packagekit-glib2/pk-task-text.c:124
 #: ../lib/packagekit-glib2/pk-task-text.c:206
-#: ../src/pk-polkit-action-lookup.c:357
 msgid "Package"
-msgid_plural "Packages"
-msgstr[0] ""
-msgstr[1] ""
+msgstr ""
 
 #. TRANSLATORS: details about the update, any packages that this update updates
 #: ../client/pk-console.c:348
@@ -198,7 +192,7 @@ msgstr ""
 
 #. TRANSLATORS: details about the update, date the update was updated
 #. TRANSLATORS: The action of the package, in past tense
-#: ../client/pk-console.c:388 ../lib/packagekit-glib2/pk-console-shared.c:515
+#: ../client/pk-console.c:388 ../lib/packagekit-glib2/pk-console-shared.c:524
 msgid "Updated"
 msgstr ""
 
@@ -374,184 +368,194 @@ msgid "Subcommands:"
 msgstr ""
 
 #. TRANSLATORS: we keep a database updated with the time that an action was last executed
-#: ../client/pk-console.c:1234
+#: ../client/pk-console.c:1235
 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:1275 ../client/pk-monitor.c:371
+#: ../client/pk-console.c:1277 ../client/pk-monitor.c:371
 msgid "Show the program version and exit"
 msgstr ""
 
 #. TRANSLATORS: command line argument, use a filter to narrow down results
-#: ../client/pk-console.c:1278
+#: ../client/pk-console.c:1280
 msgid "Set the filter, e.g. installed"
 msgstr ""
 
 #. TRANSLATORS: command line argument, use a non-standard install prefix
-#: ../client/pk-console.c:1281
+#: ../client/pk-console.c:1283
 msgid "Set the install root, e.g. '/' or '/mnt/ltsp'"
 msgstr ""
 
 #. TRANSLATORS: command line argument, work asynchronously
-#: ../client/pk-console.c:1284
+#: ../client/pk-console.c:1286
 msgid "Exit without waiting for actions to complete"
 msgstr ""
 
 #. command line argument, do we ask questions
-#: ../client/pk-console.c:1287
+#: ../client/pk-console.c:1289
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:525
 msgid "Install the packages without asking for confirmation"
 msgstr ""
 
 #. TRANSLATORS: command line argument, this command is not a priority
-#: ../client/pk-console.c:1290
+#: ../client/pk-console.c:1292
 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:1293
+#: ../client/pk-console.c:1295
 msgid ""
 "Print to screen a machine readable output, rather than using animated widgets"
 msgstr ""
 
 #. TRANSLATORS: command line argument, just output without fancy formatting
-#: ../client/pk-console.c:1296
+#: ../client/pk-console.c:1298
 msgid "The maximum metadata cache age. Use -1 for 'never'."
 msgstr ""
 
+#. TRANSLATORS: command line argument, --help
+#: ../client/pk-console.c:1301
+msgid "Show help options."
+msgstr ""
+
+#. TRANSLATORS: we failed to contact the daemon
+#: ../client/pk-console.c:1331
+msgid "Failed to parse command line"
+msgstr ""
+
 #. TRANSLATORS: we failed to contact the daemon
-#: ../client/pk-console.c:1333
+#: ../client/pk-console.c:1341
 msgid "Failed to contact PackageKit"
 msgstr ""
 
 #. TRANSLATORS: The user specified an incorrect filter
-#: ../client/pk-console.c:1381
+#: ../client/pk-console.c:1394
 msgid "The proxy could not be set"
 msgstr ""
 
 #. TRANSLATORS: The user specified an incorrect filter
-#: ../client/pk-console.c:1393
+#: ../client/pk-console.c:1406
 msgid "The install root could not be set"
 msgstr ""
 
 #. TRANSLATORS: The user specified an incorrect filter
-#: ../client/pk-console.c:1405
+#: ../client/pk-console.c:1418
 msgid "The filter specified was invalid"
 msgstr ""
 
 #. TRANSLATORS: a search type can be name, details, file, etc
-#: ../client/pk-console.c:1424
+#: ../client/pk-console.c:1437
 msgid "A search type is required, e.g. name"
 msgstr ""
 
 #. TRANSLATORS: the user needs to provide a search term
-#: ../client/pk-console.c:1431 ../client/pk-console.c:1443
-#: ../client/pk-console.c:1455 ../client/pk-console.c:1467
+#: ../client/pk-console.c:1444 ../client/pk-console.c:1456
+#: ../client/pk-console.c:1468 ../client/pk-console.c:1480
 msgid "A search term is required"
 msgstr ""
 
 #. TRANSLATORS: the search type was provided, but invalid
-#: ../client/pk-console.c:1477
+#: ../client/pk-console.c:1490
 msgid "Invalid search type"
 msgstr ""
 
 #. TRANSLATORS: the user did not specify what they wanted to install
-#: ../client/pk-console.c:1483
+#: ../client/pk-console.c:1496
 msgid "A package name to install is required"
 msgstr ""
 
 #. TRANSLATORS: the user did not specify what they wanted to install
-#: ../client/pk-console.c:1492
+#: ../client/pk-console.c:1505
 msgid "A filename to install is required"
 msgstr ""
 
 #. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:1503
+#: ../client/pk-console.c:1516
 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:1514
+#: ../client/pk-console.c:1527
 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:1523
+#: ../client/pk-console.c:1536
 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:1530
+#: ../client/pk-console.c:1543
 msgid "Directory not found"
 msgstr ""
 
 #. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:1539
+#: ../client/pk-console.c:1552
 msgid "A licence identifier (eula-id) is required"
 msgstr ""
 
 #. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:1550
+#: ../client/pk-console.c:1563
 msgid "A transaction identifier (tid) is required"
 msgstr ""
 
 #. TRANSLATORS: The user did not specify a package name
-#: ../client/pk-console.c:1571
+#: ../client/pk-console.c:1584
 msgid "A package name to resolve is required"
 msgstr ""
 
 #. TRANSLATORS: The user did not specify a repository (software source) name
-#: ../client/pk-console.c:1582 ../client/pk-console.c:1593
+#: ../client/pk-console.c:1595 ../client/pk-console.c:1606
 msgid "A repository name is required"
 msgstr ""
 
 #. TRANSLATORS: The user didn't provide any data
-#: ../client/pk-console.c:1604
+#: ../client/pk-console.c:1617
 msgid "A repo name, parameter and value are required"
 msgstr ""
 
 #. TRANSLATORS: The user didn't specify what action to use
-#: ../client/pk-console.c:1621
+#: ../client/pk-console.c:1634
 msgid "An action, e.g. 'update-system' is required"
 msgstr ""
 
 #. TRANSLATORS: The user specified an invalid action
-#: ../client/pk-console.c:1628
+#: ../client/pk-console.c:1641
 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:1638 ../client/pk-console.c:1652
-#: ../client/pk-console.c:1661 ../client/pk-console.c:1681
-#: ../client/pk-console.c:1690 ../client/pk-generate-pack.c:314
+#: ../client/pk-console.c:1651 ../client/pk-console.c:1665
+#: ../client/pk-console.c:1674 ../client/pk-console.c:1694
+#: ../client/pk-console.c:1703 ../client/pk-generate-pack.c:314
 msgid "A package name is required"
 msgstr ""
 
 #. TRANSLATORS: each package "provides" certain things, e.g. mime(gstreamer-decoder-mp3), the user didn't specify it
-#: ../client/pk-console.c:1670
+#: ../client/pk-console.c:1683
 msgid "A package provide string is required"
 msgstr ""
 
 #. TRANSLATORS: The user did not provide a distro name
-#: ../client/pk-console.c:1714
+#: ../client/pk-console.c:1727
 msgid "A distribution name is required"
 msgstr ""
 
 #. TRANSLATORS: The user did not provide an upgrade type
-#: ../client/pk-console.c:1720
+#: ../client/pk-console.c:1733
 msgid "An upgrade type is required, e.g. 'minimal', 'default' or 'complete'"
 msgstr ""
 
 #. TRANSLATORS: The user tried to use an unsupported option on the command line
-#: ../client/pk-console.c:1770
+#: ../client/pk-console.c:1783
 #, c-format
 msgid "Option '%s' is not supported"
 msgstr ""
 
 #. TRANSLATORS: Generic failure of what they asked to do
-#: ../client/pk-console.c:1780
+#: ../client/pk-console.c:1793
 msgid "Command failed"
 msgstr ""
 
@@ -776,56 +780,56 @@ msgstr ""
 #. TRANSLATORS: the prefix of all the output telling the user
 #. * why it's not executing. NOTE: this is lowercase to mimic
 #. * the style of bash itself -- apologies
-#: ../contrib/command-not-found/pk-command-not-found.c:739
+#: ../contrib/command-not-found/pk-command-not-found.c:741
 msgid "command not found"
 msgstr ""
 
 #. TRANSLATORS: tell the user what we think the command is
-#: ../contrib/command-not-found/pk-command-not-found.c:757
+#: ../contrib/command-not-found/pk-command-not-found.c:759
 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:771
+#: ../contrib/command-not-found/pk-command-not-found.c:773
 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:785
-#: ../contrib/command-not-found/pk-command-not-found.c:794
+#: ../contrib/command-not-found/pk-command-not-found.c:787
+#: ../contrib/command-not-found/pk-command-not-found.c:796
 msgid "Similar commands are:"
 msgstr ""
 
 #. TRANSLATORS: ask the user to choose a file to run
-#: ../contrib/command-not-found/pk-command-not-found.c:801
+#: ../contrib/command-not-found/pk-command-not-found.c:803
 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:819
+#: ../contrib/command-not-found/pk-command-not-found.c:821
 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:826
+#: ../contrib/command-not-found/pk-command-not-found.c:828
 #, 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:853
+#: ../contrib/command-not-found/pk-command-not-found.c:855
 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:863
+#: ../contrib/command-not-found/pk-command-not-found.c:865
 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:872
+#: ../contrib/command-not-found/pk-command-not-found.c:874
 msgid "Please choose a package to install"
 msgstr ""
 
@@ -994,7 +998,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:860
-#: ../lib/packagekit-glib2/pk-console-shared.c:287
+#: ../lib/packagekit-glib2/pk-console-shared.c:296
 #, c-format
 msgid "Installing packages"
 msgstr ""
@@ -1125,464 +1129,464 @@ msgstr ""
 msgid "PackageKit Service Pack"
 msgstr ""
 
-#: ../lib/packagekit-glib2/pk-console-shared.c:63
+#: ../lib/packagekit-glib2/pk-console-shared.c:64
 #, 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:189
+#: ../lib/packagekit-glib2/pk-console-shared.c:198
 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:200
+#: ../lib/packagekit-glib2/pk-console-shared.c:209
 msgid "Please choose the correct package: "
 msgstr ""
 
 #. TRANSLATORS: This is when the transaction status is not known
-#: ../lib/packagekit-glib2/pk-console-shared.c:255
+#: ../lib/packagekit-glib2/pk-console-shared.c:264
 msgid "Unknown state"
 msgstr ""
 
 #. TRANSLATORS: transaction state, the daemon is in the process of starting
-#: ../lib/packagekit-glib2/pk-console-shared.c:259
+#: ../lib/packagekit-glib2/pk-console-shared.c:268
 msgid "Starting"
 msgstr ""
 
 #. TRANSLATORS: transaction state, the transaction is waiting for another to complete
-#: ../lib/packagekit-glib2/pk-console-shared.c:263
+#: ../lib/packagekit-glib2/pk-console-shared.c:272
 msgid "Waiting in queue"
 msgstr ""
 
 #. TRANSLATORS: transaction state, just started
-#: ../lib/packagekit-glib2/pk-console-shared.c:267
+#: ../lib/packagekit-glib2/pk-console-shared.c:276
 msgid "Running"
 msgstr ""
 
 #. TRANSLATORS: transaction state, is querying data
-#: ../lib/packagekit-glib2/pk-console-shared.c:271
+#: ../lib/packagekit-glib2/pk-console-shared.c:280
 msgid "Querying"
 msgstr ""
 
 #. TRANSLATORS: transaction state, getting data from a server
-#: ../lib/packagekit-glib2/pk-console-shared.c:275
+#: ../lib/packagekit-glib2/pk-console-shared.c:284
 msgid "Getting information"
 msgstr ""
 
 #. TRANSLATORS: transaction state, removing packages
-#: ../lib/packagekit-glib2/pk-console-shared.c:279
+#: ../lib/packagekit-glib2/pk-console-shared.c:288
 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:283
-#: ../lib/packagekit-glib2/pk-console-shared.c:661
+#: ../lib/packagekit-glib2/pk-console-shared.c:292
+#: ../lib/packagekit-glib2/pk-console-shared.c:670
 msgid "Downloading packages"
 msgstr ""
 
 #. TRANSLATORS: transaction state, refreshing internal lists
-#: ../lib/packagekit-glib2/pk-console-shared.c:291
+#: ../lib/packagekit-glib2/pk-console-shared.c:300
 msgid "Refreshing software list"
 msgstr ""
 
 #. TRANSLATORS: transaction state, installing updates
-#: ../lib/packagekit-glib2/pk-console-shared.c:295
+#: ../lib/packagekit-glib2/pk-console-shared.c:304
 msgid "Installing updates"
 msgstr ""
 
 #. TRANSLATORS: transaction state, removing old packages, and cleaning config files
-#: ../lib/packagekit-glib2/pk-console-shared.c:299
+#: ../lib/packagekit-glib2/pk-console-shared.c:308
 msgid "Cleaning up packages"
 msgstr ""
 
 #. TRANSLATORS: transaction state, obsoleting old packages
-#: ../lib/packagekit-glib2/pk-console-shared.c:303
+#: ../lib/packagekit-glib2/pk-console-shared.c:312
 msgid "Obsoleting packages"
 msgstr ""
 
 #. TRANSLATORS: transaction state, checking the transaction before we do it
-#: ../lib/packagekit-glib2/pk-console-shared.c:307
+#: ../lib/packagekit-glib2/pk-console-shared.c:316
 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:311
+#: ../lib/packagekit-glib2/pk-console-shared.c:320
 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:315
-#: ../lib/packagekit-glib2/pk-console-shared.c:621
+#: ../lib/packagekit-glib2/pk-console-shared.c:324
+#: ../lib/packagekit-glib2/pk-console-shared.c:630
 msgid "Rolling back"
 msgstr ""
 
 #. TRANSLATORS: transaction state, when we're doing a test transaction
-#: ../lib/packagekit-glib2/pk-console-shared.c:319
+#: ../lib/packagekit-glib2/pk-console-shared.c:328
 msgid "Testing changes"
 msgstr ""
 
 #. TRANSLATORS: transaction state, when we're writing to the system package database
-#: ../lib/packagekit-glib2/pk-console-shared.c:323
+#: ../lib/packagekit-glib2/pk-console-shared.c:332
 msgid "Committing changes"
 msgstr ""
 
 #. TRANSLATORS: transaction state, requesting data from a server
-#: ../lib/packagekit-glib2/pk-console-shared.c:327
+#: ../lib/packagekit-glib2/pk-console-shared.c:336
 msgid "Requesting data"
 msgstr ""
 
 #. TRANSLATORS: transaction state, all done!
-#: ../lib/packagekit-glib2/pk-console-shared.c:331
+#: ../lib/packagekit-glib2/pk-console-shared.c:340
 msgid "Finished"
 msgstr ""
 
 #. TRANSLATORS: transaction state, in the process of cancelling
-#: ../lib/packagekit-glib2/pk-console-shared.c:335
+#: ../lib/packagekit-glib2/pk-console-shared.c:344
 msgid "Cancelling"
 msgstr ""
 
 #. TRANSLATORS: transaction state, downloading metadata
-#: ../lib/packagekit-glib2/pk-console-shared.c:339
+#: ../lib/packagekit-glib2/pk-console-shared.c:348
 msgid "Downloading repository information"
 msgstr ""
 
 #. TRANSLATORS: transaction state, downloading metadata
-#: ../lib/packagekit-glib2/pk-console-shared.c:343
+#: ../lib/packagekit-glib2/pk-console-shared.c:352
 msgid "Downloading list of packages"
 msgstr ""
 
 #. TRANSLATORS: transaction state, downloading metadata
-#: ../lib/packagekit-glib2/pk-console-shared.c:347
+#: ../lib/packagekit-glib2/pk-console-shared.c:356
 msgid "Downloading file lists"
 msgstr ""
 
 #. TRANSLATORS: transaction state, downloading metadata
-#: ../lib/packagekit-glib2/pk-console-shared.c:351
+#: ../lib/packagekit-glib2/pk-console-shared.c:360
 msgid "Downloading lists of changes"
 msgstr ""
 
 #. TRANSLATORS: transaction state, downloading metadata
-#: ../lib/packagekit-glib2/pk-console-shared.c:355
+#: ../lib/packagekit-glib2/pk-console-shared.c:364
 msgid "Downloading groups"
 msgstr ""
 
 #. TRANSLATORS: transaction state, downloading metadata
-#: ../lib/packagekit-glib2/pk-console-shared.c:359
+#: ../lib/packagekit-glib2/pk-console-shared.c:368
 msgid "Downloading update information"
 msgstr ""
 
 #. TRANSLATORS: transaction state, repackaging delta files
-#: ../lib/packagekit-glib2/pk-console-shared.c:363
+#: ../lib/packagekit-glib2/pk-console-shared.c:372
 msgid "Repackaging files"
 msgstr ""
 
 #. TRANSLATORS: transaction state, loading databases
-#: ../lib/packagekit-glib2/pk-console-shared.c:367
+#: ../lib/packagekit-glib2/pk-console-shared.c:376
 msgid "Loading cache"
 msgstr ""
 
 #. TRANSLATORS: transaction state, scanning for running processes
-#: ../lib/packagekit-glib2/pk-console-shared.c:371
+#: ../lib/packagekit-glib2/pk-console-shared.c:380
 msgid "Scanning applications"
 msgstr ""
 
 #. TRANSLATORS: transaction state, generating a list of packages installed on the system
-#: ../lib/packagekit-glib2/pk-console-shared.c:375
+#: ../lib/packagekit-glib2/pk-console-shared.c:384
 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:379
+#: ../lib/packagekit-glib2/pk-console-shared.c:388
 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:383
+#: ../lib/packagekit-glib2/pk-console-shared.c:392
 msgid "Waiting for authentication"
 msgstr ""
 
 #. TRANSLATORS: transaction state, we are updating the list of processes
-#: ../lib/packagekit-glib2/pk-console-shared.c:387
+#: ../lib/packagekit-glib2/pk-console-shared.c:396
 msgid "Updating running applications"
 msgstr ""
 
 #. TRANSLATORS: transaction state, we are checking executable files currently in use
-#: ../lib/packagekit-glib2/pk-console-shared.c:391
+#: ../lib/packagekit-glib2/pk-console-shared.c:400
 msgid "Checking applications in use"
 msgstr ""
 
 #. TRANSLATORS: transaction state, we are checking for libraries currently in use
-#: ../lib/packagekit-glib2/pk-console-shared.c:395
+#: ../lib/packagekit-glib2/pk-console-shared.c:404
 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:399
+#: ../lib/packagekit-glib2/pk-console-shared.c:408
 msgid "Copying files"
 msgstr ""
 
 #. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:417
+#: ../lib/packagekit-glib2/pk-console-shared.c:426
 msgid "Trivial"
 msgstr ""
 
 #. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:421
+#: ../lib/packagekit-glib2/pk-console-shared.c:430
 msgid "Normal"
 msgstr ""
 
 #. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:425
+#: ../lib/packagekit-glib2/pk-console-shared.c:434
 msgid "Important"
 msgstr ""
 
 #. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:429
+#: ../lib/packagekit-glib2/pk-console-shared.c:438
 msgid "Security"
 msgstr ""
 
 #. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:433
+#: ../lib/packagekit-glib2/pk-console-shared.c:442
 msgid "Bug fix "
 msgstr ""
 
 #. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:437
+#: ../lib/packagekit-glib2/pk-console-shared.c:446
 msgid "Enhancement"
 msgstr ""
 
 #. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:441
+#: ../lib/packagekit-glib2/pk-console-shared.c:450
 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:446
-#: ../lib/packagekit-glib2/pk-console-shared.c:519
+#: ../lib/packagekit-glib2/pk-console-shared.c:455
+#: ../lib/packagekit-glib2/pk-console-shared.c:528
 msgid "Installed"
 msgstr ""
 
 #. TRANSLATORS: The state of a package, i.e. not installed
-#: ../lib/packagekit-glib2/pk-console-shared.c:451
+#: ../lib/packagekit-glib2/pk-console-shared.c:460
 msgid "Available"
 msgstr ""
 
 #. TRANSLATORS: The action of the package, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:469
+#: ../lib/packagekit-glib2/pk-console-shared.c:478
 msgid "Downloading"
 msgstr ""
 
 #. TRANSLATORS: The action of the package, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:473
+#: ../lib/packagekit-glib2/pk-console-shared.c:482
 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:477
-#: ../lib/packagekit-glib2/pk-console-shared.c:597
+#: ../lib/packagekit-glib2/pk-console-shared.c:486
+#: ../lib/packagekit-glib2/pk-console-shared.c:606
 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:481
-#: ../lib/packagekit-glib2/pk-console-shared.c:593
+#: ../lib/packagekit-glib2/pk-console-shared.c:490
+#: ../lib/packagekit-glib2/pk-console-shared.c:602
 msgid "Removing"
 msgstr ""
 
 #. TRANSLATORS: The action of the package, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:485
+#: ../lib/packagekit-glib2/pk-console-shared.c:494
 msgid "Cleaning up"
 msgstr ""
 
 #. TRANSLATORS: The action of the package, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:489
+#: ../lib/packagekit-glib2/pk-console-shared.c:498
 msgid "Obsoleting"
 msgstr ""
 
 #. TRANSLATORS: The action of the package, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:493
+#: ../lib/packagekit-glib2/pk-console-shared.c:502
 msgid "Reinstalling"
 msgstr ""
 
 #. TRANSLATORS: The action of the package, in past tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:511
+#: ../lib/packagekit-glib2/pk-console-shared.c:520
 msgid "Downloaded"
 msgstr ""
 
 #. TRANSLATORS: The action of the package, in past tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:523
+#: ../lib/packagekit-glib2/pk-console-shared.c:532
 msgid "Removed"
 msgstr ""
 
 #. TRANSLATORS: The action of the package, in past tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:527
+#: ../lib/packagekit-glib2/pk-console-shared.c:536
 msgid "Cleaned up"
 msgstr ""
 
 #. TRANSLATORS: The action of the package, in past tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:531
+#: ../lib/packagekit-glib2/pk-console-shared.c:540
 msgid "Obsoleted"
 msgstr ""
 
 #. TRANSLATORS: The action of the package, in past tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:535
+#: ../lib/packagekit-glib2/pk-console-shared.c:544
 msgid "Reinstalled"
 msgstr ""
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:553
+#: ../lib/packagekit-glib2/pk-console-shared.c:562
 msgid "Unknown role type"
 msgstr ""
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:557
+#: ../lib/packagekit-glib2/pk-console-shared.c:566
 msgid "Getting dependencies"
 msgstr ""
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:561
+#: ../lib/packagekit-glib2/pk-console-shared.c:570
 msgid "Getting update details"
 msgstr ""
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:565
+#: ../lib/packagekit-glib2/pk-console-shared.c:574
 msgid "Getting details"
 msgstr ""
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:569
+#: ../lib/packagekit-glib2/pk-console-shared.c:578
 msgid "Getting requires"
 msgstr ""
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:573
+#: ../lib/packagekit-glib2/pk-console-shared.c:582
 msgid "Getting updates"
 msgstr ""
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:577
+#: ../lib/packagekit-glib2/pk-console-shared.c:586
 msgid "Searching by details"
 msgstr ""
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:581
+#: ../lib/packagekit-glib2/pk-console-shared.c:590
 msgid "Searching by file"
 msgstr ""
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:585
+#: ../lib/packagekit-glib2/pk-console-shared.c:594
 msgid "Searching groups"
 msgstr ""
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:589
+#: ../lib/packagekit-glib2/pk-console-shared.c:598
 msgid "Searching by name"
 msgstr ""
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:601
+#: ../lib/packagekit-glib2/pk-console-shared.c:610
 msgid "Installing files"
 msgstr ""
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:605
+#: ../lib/packagekit-glib2/pk-console-shared.c:614
 msgid "Refreshing cache"
 msgstr ""
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:609
+#: ../lib/packagekit-glib2/pk-console-shared.c:618
 msgid "Updating packages"
 msgstr ""
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:613
+#: ../lib/packagekit-glib2/pk-console-shared.c:622
 msgid "Updating system"
 msgstr ""
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:617
+#: ../lib/packagekit-glib2/pk-console-shared.c:626
 msgid "Canceling"
 msgstr ""
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:625
+#: ../lib/packagekit-glib2/pk-console-shared.c:634
 msgid "Getting repositories"
 msgstr ""
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:629
+#: ../lib/packagekit-glib2/pk-console-shared.c:638
 msgid "Enabling repository"
 msgstr ""
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:633
+#: ../lib/packagekit-glib2/pk-console-shared.c:642
 msgid "Setting data"
 msgstr ""
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:637
+#: ../lib/packagekit-glib2/pk-console-shared.c:646
 msgid "Resolving"
 msgstr ""
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:641
+#: ../lib/packagekit-glib2/pk-console-shared.c:650
 msgid "Getting file list"
 msgstr ""
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:645
+#: ../lib/packagekit-glib2/pk-console-shared.c:654
 msgid "Getting provides"
 msgstr ""
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:649
+#: ../lib/packagekit-glib2/pk-console-shared.c:658
 msgid "Installing signature"
 msgstr ""
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:653
+#: ../lib/packagekit-glib2/pk-console-shared.c:662
 msgid "Getting packages"
 msgstr ""
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:657
+#: ../lib/packagekit-glib2/pk-console-shared.c:666
 msgid "Accepting EULA"
 msgstr ""
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:665
+#: ../lib/packagekit-glib2/pk-console-shared.c:674
 msgid "Getting upgrades"
 msgstr ""
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:669
+#: ../lib/packagekit-glib2/pk-console-shared.c:678
 msgid "Getting categories"
 msgstr ""
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:673
+#: ../lib/packagekit-glib2/pk-console-shared.c:682
 msgid "Getting transactions"
 msgstr ""
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:677
-#: ../lib/packagekit-glib2/pk-console-shared.c:681
+#: ../lib/packagekit-glib2/pk-console-shared.c:686
+#: ../lib/packagekit-glib2/pk-console-shared.c:690
 msgid "Simulating install"
 msgstr ""
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:685
+#: ../lib/packagekit-glib2/pk-console-shared.c:694
 msgid "Simulating remove"
 msgstr ""
 
 #. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:689
+#: ../lib/packagekit-glib2/pk-console-shared.c:698
 msgid "Simulating update"
 msgstr ""
 
@@ -1939,103 +1943,93 @@ msgid "Upgrade System"
 msgstr ""
 
 #. TRANSLATORS: failed due to DBus security
-#: ../src/pk-main.c:87
+#: ../src/pk-main.c:91
 msgid "Startup failed due to security policies on this machine."
 msgstr ""
 
 #. TRANSLATORS: only two ways this can fail...
-#: ../src/pk-main.c:89
+#: ../src/pk-main.c:93
 msgid "This can happen for two reasons:"
 msgstr ""
 
 #. TRANSLATORS: only allowed to be owned by root
-#: ../src/pk-main.c:91
+#: ../src/pk-main.c:95
 msgid "The correct user is not launching the executable (usually root)"
 msgstr ""
 
 #. TRANSLATORS: or we are installed in a prefix
-#: ../src/pk-main.c:93
+#: ../src/pk-main.c:97
 msgid ""
 "The org.freedesktop.PackageKit.conf file is not installed in the system "
 "directory:"
 msgstr ""
 
 #. TRANSLATORS: a backend is the system package tool, e.g. yum, apt
-#: ../src/pk-main.c:200
+#: ../src/pk-main.c:223
 msgid "Packaging backend to use, e.g. dummy"
 msgstr ""
 
 #. TRANSLATORS: if we should run in the background
-#: ../src/pk-main.c:203
+#: ../src/pk-main.c:226
 msgid "Daemonize and detach from the terminal"
 msgstr ""
 
 #. TRANSLATORS: if we should not monitor how long we are inactive for
-#: ../src/pk-main.c:206
+#: ../src/pk-main.c:229
 msgid "Disable the idle timer"
 msgstr ""
 
 #. TRANSLATORS: show version
-#: ../src/pk-main.c:209
+#: ../src/pk-main.c:232
 msgid "Show version and exit"
 msgstr ""
 
 #. TRANSLATORS: exit after we've started up, used for user profiling
-#: ../src/pk-main.c:212
+#: ../src/pk-main.c:235
 msgid "Exit after a small delay"
 msgstr ""
 
 #. TRANSLATORS: exit straight away, used for automatic profiling
-#: ../src/pk-main.c:215
+#: ../src/pk-main.c:238
 msgid "Exit after the engine has loaded"
 msgstr ""
 
 #. TRANSLATORS: describing the service that is running
-#: ../src/pk-main.c:230
+#: ../src/pk-main.c:253
 msgid "PackageKit service"
 msgstr ""
 
 #. TRANSLATORS: fatal error, dbus is not running
-#: ../src/pk-main.c:267
+#: ../src/pk-main.c:298
 msgid "Cannot connect to the system bus"
 msgstr ""
 
-#. TRANSLATORS: cannot register on system bus, unknown reason -- geeky error follows
-#: ../src/pk-main.c:316
-msgid "Error trying to start:"
+#: ../src/pk-main.c:344
+msgid "Failed to load any of the specified backends:"
 msgstr ""
 
-#: ../src/pk-polkit-action-lookup.c:150
-msgid "To install debugging packages, extra sources need to be enabled"
+#. TRANSLATORS: cannot register on system bus, unknown reason -- geeky error follows
+#: ../src/pk-main.c:358
+msgid "Error trying to start:"
 msgstr ""
 
 #. TRANSLATORS: is not GPG signed
-#: ../src/pk-polkit-action-lookup.c:171 ../src/pk-polkit-action-lookup.c:190
+#: ../src/pk-transaction.c:2611 ../src/pk-transaction.c:2618
 msgid "The software is not from a trusted source."
 msgstr ""
 
-#: ../src/pk-polkit-action-lookup.c:176
+#: ../src/pk-transaction.c:2623
 msgid "Do not update this package unless you are sure it is safe to do so."
 msgstr ""
 
-#: ../src/pk-polkit-action-lookup.c:177
+#: ../src/pk-transaction.c:2624
 msgid "Do not update these packages unless you are sure it is safe to do so."
 msgstr ""
 
-#: ../src/pk-polkit-action-lookup.c:195
+#: ../src/pk-transaction.c:2634
 msgid "Do not install this package unless you are sure it is safe to do so."
 msgstr ""
 
-#: ../src/pk-polkit-action-lookup.c:196
+#: ../src/pk-transaction.c:2635
 msgid "Do not install these packages unless you are sure it is safe to do so."
 msgstr ""
-
-#. TRANSLATORS: too many packages to list each one
-#: ../src/pk-polkit-action-lookup.c:273
-msgid "Many packages"
-msgstr ""
-
-#. TRANSLATORS: if the transaction is forced to install only trusted packages
-#: ../src/pk-polkit-action-lookup.c:339
-msgid "Only trusted"
-msgstr ""
diff --git a/po/ar.po b/po/ar.po
new file mode 100644
index 0000000..5a550ca
--- /dev/null
+++ b/po/ar.po
@@ -0,0 +1,2102 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL at ADDRESS>, YEAR.
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: PackageKit\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-12-13 12:23+0000\n"
+"PO-Revision-Date: 2011-05-04 09:48+0000\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Language-Team: Arabic (http://www.transifex.net/projects/p/freedesktop/team/ar/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ar\n"
+"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5\n"
+
+#. TRANSLATORS: this is an atomic transaction
+#. TRANSLATORS: the role is the point of the transaction, e.g. update-system
+#: ../client/pk-console.c:174 ../client/pk-console.c:596
+msgid "Transaction"
+msgstr ""
+
+#. TRANSLATORS: this is the time the transaction was started in system
+#. timezone
+#: ../client/pk-console.c:176
+msgid "System time"
+msgstr ""
+
+#. TRANSLATORS: this is if the transaction succeeded or not
+#: ../client/pk-console.c:178
+msgid "Succeeded"
+msgstr ""
+
+#: ../client/pk-console.c:178
+msgid "True"
+msgstr ""
+
+#: ../client/pk-console.c:178
+msgid "False"
+msgstr ""
+
+#. TRANSLATORS: this is the transactions role, e.g. "update-system"
+#. TRANSLATORS: the trasaction role, e.g. update-system
+#: ../client/pk-console.c:180 ../src/pk-polkit-action-lookup.c:332
+msgid "Role"
+msgstr ""
+
+#. TRANSLATORS: this is The duration of the transaction
+#: ../client/pk-console.c:185
+msgid "Duration"
+msgstr ""
+
+#: ../client/pk-console.c:185
+msgid "(seconds)"
+msgstr ""
+
+#. TRANSLATORS: this is The command line used to do the action
+#. TRANSLATORS: the command line of the thing that wants the authentication
+#: ../client/pk-console.c:189 ../src/pk-polkit-action-lookup.c:346
+msgid "Command line"
+msgstr ""
+
+#. TRANSLATORS: this is the user ID of the user that started the action
+#: ../client/pk-console.c:191
+msgid "User ID"
+msgstr ""
+
+#. TRANSLATORS: this is the username, e.g. hughsie
+#: ../client/pk-console.c:198
+msgid "Username"
+msgstr ""
+
+#. TRANSLATORS: this is the users real name, e.g. "Richard Hughes"
+#: ../client/pk-console.c:202
+msgid "Real name"
+msgstr ""
+
+#: ../client/pk-console.c:210
+msgid "Affected packages:"
+msgstr ""
+
+#: ../client/pk-console.c:212
+msgid "Affected packages: None"
+msgstr ""
+
+#. TRANSLATORS: this is the distro, e.g. Fedora 10
+#: ../client/pk-console.c:247
+msgid "Distribution"
+msgstr ""
+
+#. TRANSLATORS: this is type of update, stable or testing
+#: ../client/pk-console.c:249
+msgid "Type"
+msgstr ""
+
+#. TRANSLATORS: this is any summary text describing the upgrade
+#. TRANSLATORS: this is the summary of the group
+#: ../client/pk-console.c:251 ../client/pk-console.c:290
+msgid "Summary"
+msgstr ""
+
+#. TRANSLATORS: this is the group category name
+#: ../client/pk-console.c:279
+msgid "Category"
+msgstr ""
+
+#. TRANSLATORS: this is group identifier
+#: ../client/pk-console.c:281
+msgid "ID"
+msgstr ""
+
+#. TRANSLATORS: this is the parent group
+#: ../client/pk-console.c:284
+msgid "Parent"
+msgstr ""
+
+#. TRANSLATORS: this is the name of the parent group
+#: ../client/pk-console.c:287
+msgid "Name"
+msgstr ""
+
+#. TRANSLATORS: this is preferred icon for the group
+#: ../client/pk-console.c:293
+msgid "Icon"
+msgstr ""
+
+#. TRANSLATORS: this is a header for the package that can be updated
+#: ../client/pk-console.c:339
+msgid "Details about the update:"
+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:345 ../client/pk-console.c:615
+#: ../lib/packagekit-glib2/pk-task-text.c:124
+#: ../lib/packagekit-glib2/pk-task-text.c:206
+#: ../src/pk-polkit-action-lookup.c:357
+msgid "Package"
+msgid_plural "Packages"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+#. TRANSLATORS: details about the update, any packages that this update
+#. updates
+#: ../client/pk-console.c:348
+msgid "Updates"
+msgstr ""
+
+#. TRANSLATORS: details about the update, any packages that this update
+#. obsoletes
+#: ../client/pk-console.c:352
+msgid "Obsoletes"
+msgstr ""
+
+#. TRANSLATORS: details about the update, the vendor URLs
+#. TRANSLATORS: the vendor (e.g. vmware) that is providing the EULA
+#: ../client/pk-console.c:356 ../lib/packagekit-glib2/pk-task-text.c:209
+msgid "Vendor"
+msgstr ""
+
+#. TRANSLATORS: details about the update, the bugzilla URLs
+#: ../client/pk-console.c:360
+msgid "Bugzilla"
+msgstr ""
+
+#. TRANSLATORS: details about the update, the CVE URLs
+#: ../client/pk-console.c:364
+msgid "CVE"
+msgstr ""
+
+#. TRANSLATORS: details about the update, if the package requires a restart
+#: ../client/pk-console.c:368
+msgid "Restart"
+msgstr ""
+
+#. TRANSLATORS: details about the update, any description of the update
+#: ../client/pk-console.c:372
+msgid "Update text"
+msgstr ""
+
+#. TRANSLATORS: details about the update, the changelog for the package
+#: ../client/pk-console.c:376
+msgid "Changes"
+msgstr ""
+
+#. TRANSLATORS: details about the update, the ongoing state of the update
+#: ../client/pk-console.c:380
+msgid "State"
+msgstr ""
+
+#. TRANSLATORS: details about the update, date the update was issued
+#: ../client/pk-console.c:384
+msgid "Issued"
+msgstr ""
+
+#. TRANSLATORS: details about the update, date the update was updated
+#. TRANSLATORS: The action of the package, in past tense
+#: ../client/pk-console.c:388 ../lib/packagekit-glib2/pk-console-shared.c:515
+msgid "Updated"
+msgstr ""
+
+#. TRANSLATORS: if the repo is enabled
+#: ../client/pk-console.c:424
+msgid "Enabled"
+msgstr ""
+
+#. TRANSLATORS: if the repo is disabled
+#: ../client/pk-console.c:427
+msgid "Disabled"
+msgstr ""
+
+#. TRANSLATORS: a package requires the system to be restarted
+#: ../client/pk-console.c:459
+msgid "System restart required by:"
+msgstr ""
+
+#. TRANSLATORS: a package requires the session to be restarted
+#: ../client/pk-console.c:462
+msgid "Session restart required:"
+msgstr ""
+
+#. TRANSLATORS: a package requires the system to be restarted due to a
+#. security update
+#: ../client/pk-console.c:465
+msgid "System restart (security) required by:"
+msgstr ""
+
+#. TRANSLATORS: a package requires the session to be restarted due to a
+#. security update
+#: ../client/pk-console.c:468
+msgid "Session restart (security) required:"
+msgstr ""
+
+#. TRANSLATORS: a package requires the application to be restarted
+#: ../client/pk-console.c:471
+msgid "Application restart required by:"
+msgstr ""
+
+#. TRANSLATORS: This a list of details about the package
+#: ../client/pk-console.c:506
+msgid "Package description"
+msgstr ""
+
+#. TRANSLATORS: This a message (like a little note that may be of interest)
+#. from the transaction
+#: ../client/pk-console.c:537
+msgid "Message:"
+msgstr ""
+
+#. TRANSLATORS: This where the package has no files
+#: ../client/pk-console.c:558
+msgid "No files"
+msgstr ""
+
+#. TRANSLATORS: This a list files contained in the package
+#: ../client/pk-console.c:563
+msgid "Package files"
+msgstr ""
+
+#. TRANSLATORS: the percentage complete of the transaction
+#: ../client/pk-console.c:631
+msgid "Percentage"
+msgstr ""
+
+#. TRANSLATORS: the status of the transaction (e.g. downloading)
+#: ../client/pk-console.c:649
+msgid "Status"
+msgstr ""
+
+#. TRANSLATORS: the results from the transaction
+#: ../client/pk-console.c:678
+msgid "Results:"
+msgstr ""
+
+#. TRANSLATORS: we failed to get any results, which is pretty fatal in my book
+#: ../client/pk-console.c:685
+msgid "Fatal error"
+msgstr ""
+
+#. TRANSLATORS: the user asked to update everything, but there is nothing that
+#. can be updated
+#: ../client/pk-console.c:701
+msgid "There are no packages to update."
+msgstr ""
+
+#. TRANSLATORS: the transaction failed in a way we could not expect
+#: ../client/pk-console.c:704
+#: ../contrib/command-not-found/pk-command-not-found.c:639
+msgid "The transaction failed"
+msgstr ""
+
+#. TRANSLATORS: print a message when there are no updates
+#: ../client/pk-console.c:733
+msgid "There are no updates available at this time."
+msgstr ""
+
+#: ../client/pk-console.c:756
+msgid "There are no upgrades available at this time."
+msgstr ""
+
+#. TRANSLATORS: a package needs to restart their system
+#: ../client/pk-console.c:823
+msgid "Please restart the computer to complete the update."
+msgstr ""
+
+#. TRANSLATORS: a package needs to restart the session
+#: ../client/pk-console.c:826
+msgid "Please logout and login to complete the update."
+msgstr ""
+
+#. TRANSLATORS: a package needs to restart their system (due to security)
+#: ../client/pk-console.c:829
+msgid ""
+"Please restart the computer to complete the update as important security "
+"updates have been installed."
+msgstr ""
+
+#. TRANSLATORS: a package needs to restart the session (due to security)
+#: ../client/pk-console.c:832
+msgid ""
+"Please logout and login to complete the update as important security updates"
+" have been installed."
+msgstr ""
+
+#. TRANSLATORS: The user used 'pkcon install dave.rpm' rather than 'pkcon
+#. install-local dave.rpm'
+#: ../client/pk-console.c:858
+#, 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:866
+#, c-format
+msgid "This tool could not find any available package: %s"
+msgstr ""
+
+#. TRANSLATORS: There was an error getting the list of files for the package.
+#. The detailed error follows
+#: ../client/pk-console.c:894
+#, c-format
+msgid "This tool could not find the installed package: %s"
+msgstr ""
+
+#. TRANSLATORS: There was an error getting the list of files for the package.
+#. The detailed error follows
+#: ../client/pk-console.c:922 ../client/pk-console.c:950
+#, c-format
+msgid "This tool could not find the package: %s"
+msgstr ""
+
+#. TRANSLATORS: There was an error getting the list of files for the package.
+#. The detailed error follows
+#. TRANSLATORS: There was an error getting the dependencies for the package.
+#. The detailed error follows
+#. TRANSLATORS: There was an error getting the details about the package. The
+#. detailed error follows
+#. TRANSLATORS: The package name was not found in any software sources. The
+#. detailed error follows
+#: ../client/pk-console.c:978 ../client/pk-console.c:1006
+#: ../client/pk-console.c:1034 ../client/pk-console.c:1062
+#: ../client/pk-console.c:1090
+#, c-format
+msgid "This tool could not find all the packages: %s"
+msgstr ""
+
+#. TRANSLATORS: This is when the daemon crashed, and we are up shit creek
+#. without a paddle
+#: ../client/pk-console.c:1119
+msgid "The daemon crashed mid-transaction!"
+msgstr ""
+
+#. TRANSLATORS: This is the header to the --help menu
+#: ../client/pk-console.c:1153
+msgid "PackageKit Console Interface"
+msgstr ""
+
+#. these are commands we can use with pkcon
+#: ../client/pk-console.c:1155
+msgid "Subcommands:"
+msgstr ""
+
+#. TRANSLATORS: we keep a database updated with the time that an action was
+#. last executed
+#: ../client/pk-console.c:1234
+msgid "Failed to get the time since this action was last completed"
+msgstr ""
+
+#. TRANSLATORS: command line argument, just show the version string
+#: ../client/pk-console.c:1275 ../client/pk-monitor.c:371
+msgid "Show the program version and exit"
+msgstr ""
+
+#. TRANSLATORS: command line argument, use a filter to narrow down results
+#: ../client/pk-console.c:1278
+msgid "Set the filter, e.g. installed"
+msgstr ""
+
+#. TRANSLATORS: command line argument, use a non-standard install prefix
+#: ../client/pk-console.c:1281
+msgid "Set the install root, e.g. '/' or '/mnt/ltsp'"
+msgstr ""
+
+#. TRANSLATORS: command line argument, work asynchronously
+#: ../client/pk-console.c:1284
+msgid "Exit without waiting for actions to complete"
+msgstr ""
+
+#. command line argument, do we ask questions
+#: ../client/pk-console.c:1287
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:525
+msgid "Install the packages without asking for confirmation"
+msgstr ""
+
+#. TRANSLATORS: command line argument, this command is not a priority
+#: ../client/pk-console.c:1290
+msgid "Run the command using idle network bandwidth and also using less power"
+msgstr ""
+
+#. TRANSLATORS: command line argument, just output without fancy formatting
+#: ../client/pk-console.c:1293
+msgid ""
+"Print to screen a machine readable output, rather than using animated "
+"widgets"
+msgstr ""
+
+#. TRANSLATORS: command line argument, just output without fancy formatting
+#: ../client/pk-console.c:1296
+msgid "The maximum metadata cache age. Use -1 for 'never'."
+msgstr ""
+
+#. TRANSLATORS: we failed to contact the daemon
+#: ../client/pk-console.c:1333
+msgid "Failed to contact PackageKit"
+msgstr ""
+
+#. TRANSLATORS: The user specified an incorrect filter
+#: ../client/pk-console.c:1381
+msgid "The proxy could not be set"
+msgstr ""
+
+#. TRANSLATORS: The user specified an incorrect filter
+#: ../client/pk-console.c:1393
+msgid "The install root could not be set"
+msgstr ""
+
+#. TRANSLATORS: The user specified an incorrect filter
+#: ../client/pk-console.c:1405
+msgid "The filter specified was invalid"
+msgstr ""
+
+#. TRANSLATORS: a search type can be name, details, file, etc
+#: ../client/pk-console.c:1424
+msgid "A search type is required, e.g. name"
+msgstr ""
+
+#. TRANSLATORS: the user needs to provide a search term
+#: ../client/pk-console.c:1431 ../client/pk-console.c:1443
+#: ../client/pk-console.c:1455 ../client/pk-console.c:1467
+msgid "A search term is required"
+msgstr ""
+
+#. TRANSLATORS: the search type was provided, but invalid
+#: ../client/pk-console.c:1477
+msgid "Invalid search type"
+msgstr ""
+
+#. TRANSLATORS: the user did not specify what they wanted to install
+#: ../client/pk-console.c:1483
+msgid "A package name to install is required"
+msgstr ""
+
+#. TRANSLATORS: the user did not specify what they wanted to install
+#: ../client/pk-console.c:1492
+msgid "A filename to install is required"
+msgstr ""
+
+#. TRANSLATORS: geeky error, 99.9999% of users won't see this
+#: ../client/pk-console.c:1503
+msgid "A type, key_id and package_id are required"
+msgstr ""
+
+#. TRANSLATORS: the user did not specify what they wanted to remove
+#: ../client/pk-console.c:1514
+msgid "A package name to remove is required"
+msgstr ""
+
+#. TRANSLATORS: the user did not specify anything about what to download or
+#. where
+#: ../client/pk-console.c:1523
+msgid "A destination directory and the package names to download are required"
+msgstr ""
+
+#. TRANSLATORS: the directory does not exist, so we can't continue
+#: ../client/pk-console.c:1530
+msgid "Directory not found"
+msgstr ""
+
+#. TRANSLATORS: geeky error, 99.9999% of users won't see this
+#: ../client/pk-console.c:1539
+msgid "A licence identifier (eula-id) is required"
+msgstr ""
+
+#. TRANSLATORS: geeky error, 99.9999% of users won't see this
+#: ../client/pk-console.c:1550
+msgid "A transaction identifier (tid) is required"
+msgstr ""
+
+#. TRANSLATORS: The user did not specify a package name
+#: ../client/pk-console.c:1571
+msgid "A package name to resolve is required"
+msgstr ""
+
+#. TRANSLATORS: The user did not specify a repository (software source) name
+#: ../client/pk-console.c:1582 ../client/pk-console.c:1593
+msgid "A repository name is required"
+msgstr ""
+
+#. TRANSLATORS: The user didn't provide any data
+#: ../client/pk-console.c:1604
+msgid "A repo name, parameter and value are required"
+msgstr ""
+
+#. TRANSLATORS: The user didn't specify what action to use
+#: ../client/pk-console.c:1621
+msgid "An action, e.g. 'update-system' is required"
+msgstr ""
+
+#. TRANSLATORS: The user specified an invalid action
+#: ../client/pk-console.c:1628
+msgid "A correct role is required"
+msgstr ""
+
+#. TRANSLATORS: The user did not provide a package name
+#. TRANSLATORS: This is when the user fails to supply the package name
+#: ../client/pk-console.c:1638 ../client/pk-console.c:1652
+#: ../client/pk-console.c:1661 ../client/pk-console.c:1681
+#: ../client/pk-console.c:1690 ../client/pk-generate-pack.c:314
+msgid "A package name is required"
+msgstr ""
+
+#. TRANSLATORS: each package "provides" certain things, e.g. mime(gstreamer-
+#. decoder-mp3), the user didn't specify it
+#: ../client/pk-console.c:1670
+msgid "A package provide string is required"
+msgstr ""
+
+#. TRANSLATORS: The user did not provide a distro name
+#: ../client/pk-console.c:1714
+msgid "A distribution name is required"
+msgstr ""
+
+#. TRANSLATORS: The user did not provide an upgrade type
+#: ../client/pk-console.c:1720
+msgid "An upgrade type is required, e.g. 'minimal', 'default' or 'complete'"
+msgstr ""
+
+#. TRANSLATORS: The user tried to use an unsupported option on the command
+#. line
+#: ../client/pk-console.c:1770
+#, c-format
+msgid "Option '%s' is not supported"
+msgstr ""
+
+#. TRANSLATORS: Generic failure of what they asked to do
+#: ../client/pk-console.c:1780
+msgid "Command failed"
+msgstr ""
+
+#. TRANSLATORS: we can exclude certain packages (glibc) when we know they'll
+#. exist on the target
+#: ../client/pk-generate-pack.c:253
+msgid "Set the file name of dependencies to be excluded"
+msgstr ""
+
+#. TRANSLATORS: the output location
+#: ../client/pk-generate-pack.c:256
+msgid ""
+"The output file or directory (the current directory is used if omitted)"
+msgstr ""
+
+#. TRANSLATORS: put a list of packages in the pack
+#: ../client/pk-generate-pack.c:259
+msgid "The package to be put into the service pack"
+msgstr ""
+
+#. TRANSLATORS: put all pending updates in the pack
+#: ../client/pk-generate-pack.c:262
+msgid "Put all updates available in the service pack"
+msgstr ""
+
+#. TRANSLATORS: This is when the user fails to supply the correct arguments
+#: ../client/pk-generate-pack.c:298
+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:306
+msgid "Both options selected."
+msgstr ""
+
+#. TRANSLATORS: This is when the user fails to supply the output
+#: ../client/pk-generate-pack.c:322
+msgid "A output directory or file name is required"
+msgstr ""
+
+#. TRANSLATORS: This is when the daemon is not-installed/broken and fails to
+#. startup
+#: ../client/pk-generate-pack.c:340
+msgid "The daemon failed to startup"
+msgstr ""
+
+#. TRANSLATORS: This is when the backend doesn't have the capability to get-
+#. depends
+#. TRANSLATORS: This is when the backend doesn't have the capability to
+#. download
+#: ../client/pk-generate-pack.c:351 ../client/pk-generate-pack.c:357
+msgid "The package manager cannot perform this type of operation."
+msgstr ""
+
+#. TRANSLATORS: This is when the distro didn't include libarchive support into
+#. PK
+#: ../client/pk-generate-pack.c:364
+msgid ""
+"Service packs cannot be created as PackageKit was not built with libarchive "
+"support."
+msgstr ""
+
+#. TRANSLATORS: the user specified an absolute path, but didn't get the
+#. extension correct
+#: ../client/pk-generate-pack.c:375
+msgid "If specifying a file, the service pack name must end with"
+msgstr ""
+
+#. TRANSLATORS: This is when file already exists
+#: ../client/pk-generate-pack.c:391
+msgid "A pack with the same name already exists, do you want to overwrite it?"
+msgstr ""
+
+#. TRANSLATORS: This is when the pack was not overwritten
+#: ../client/pk-generate-pack.c:394
+msgid "The pack was not overwritten."
+msgstr ""
+
+#. TRANSLATORS: This is when the temporary directory cannot be created, the
+#. directory name follows
+#: ../client/pk-generate-pack.c:407
+msgid "Failed to create directory:"
+msgstr ""
+
+#. TRANSLATORS: This is when the list of packages from the remote computer
+#. cannot be opened
+#: ../client/pk-generate-pack.c:419
+msgid "Failed to open package list."
+msgstr ""
+
+#. TRANSLATORS: The package name is being matched up to available packages
+#: ../client/pk-generate-pack.c:428
+msgid "Finding package name."
+msgstr ""
+
+#. TRANSLATORS: This is when the package cannot be found in any software
+#. source. The detailed error follows
+#: ../client/pk-generate-pack.c:432
+#, 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:440
+msgid "Creating service pack..."
+msgstr ""
+
+#. TRANSLATORS: we succeeded in making the file
+#: ../client/pk-generate-pack.c:455
+#, c-format
+msgid "Service pack created '%s'"
+msgstr ""
+
+#. TRANSLATORS: we failed to make te file
+#: ../client/pk-generate-pack.c:460
+#, c-format
+msgid "Failed to create '%s': %s"
+msgstr ""
+
+#: ../client/pk-monitor.c:284
+msgid "Failed to get daemon state"
+msgstr ""
+
+#: ../client/pk-monitor.c:349
+msgid "Failed to get properties"
+msgstr ""
+
+#. TRANSLATORS: this is a program that monitors PackageKit
+#: ../client/pk-monitor.c:387
+msgid "PackageKit Monitor"
+msgstr ""
+
+#. TRANSLATORS: when we are getting data from the daemon
+#: ../contrib/browser-plugin/pk-plugin-install.c:499
+msgid "Getting package information..."
+msgstr ""
+
+#. TRANSLATORS: run an applicaiton
+#: ../contrib/browser-plugin/pk-plugin-install.c:505
+#, c-format
+msgid "Run %s"
+msgstr ""
+
+#. TRANSLATORS: show the installed version of a package
+#: ../contrib/browser-plugin/pk-plugin-install.c:511
+msgid "Installed version"
+msgstr ""
+
+#. TRANSLATORS: run the application now
+#: ../contrib/browser-plugin/pk-plugin-install.c:519
+#, c-format
+msgid "Run version %s now"
+msgstr ""
+
+#. TRANSLATORS: run the application now
+#: ../contrib/browser-plugin/pk-plugin-install.c:525
+msgid "Run now"
+msgstr ""
+
+#. TRANSLATORS: update to a new version of the package
+#: ../contrib/browser-plugin/pk-plugin-install.c:531
+#, c-format
+msgid "Update to version %s"
+msgstr ""
+
+#. TRANSLATORS: To install a package
+#: ../contrib/browser-plugin/pk-plugin-install.c:537
+#, c-format
+msgid "Install %s now"
+msgstr ""
+
+#. TRANSLATORS: the version of the package
+#: ../contrib/browser-plugin/pk-plugin-install.c:540
+msgid "Version"
+msgstr ""
+
+#. TRANSLATORS: noting found, so can't install
+#: ../contrib/browser-plugin/pk-plugin-install.c:545
+msgid "No packages found for your system"
+msgstr ""
+
+#. TRANSLATORS: package is being installed
+#: ../contrib/browser-plugin/pk-plugin-install.c:550
+msgid "Installing..."
+msgstr ""
+
+#. TRANSLATORS: downloading repo data so we can search
+#: ../contrib/command-not-found/pk-command-not-found.c: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: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: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: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:444
+msgid "Failed to search for file"
+msgstr ""
+
+#. TRANSLATORS: the transaction failed in a way we could not expect
+#: ../contrib/command-not-found/pk-command-not-found.c:456
+msgid "Getting the list of files failed"
+msgstr ""
+
+#. TRANSLATORS: we failed to launch the executable, the error follows
+#: ../contrib/command-not-found/pk-command-not-found.c:602
+msgid "Failed to launch:"
+msgstr ""
+
+#. TRANSLATORS: we failed to install the package
+#: ../contrib/command-not-found/pk-command-not-found.c:630
+msgid "Failed to install packages"
+msgstr ""
+
+#. TRANSLATORS: tool that gets called when the command is not found
+#: ../contrib/command-not-found/pk-command-not-found.c:706
+msgid "PackageKit Command Not Found"
+msgstr ""
+
+#. TRANSLATORS: the prefix of all the output telling the user
+#. * why it's not executing. NOTE: this is lowercase to mimic
+#. * the style of bash itself -- apologies
+#: ../contrib/command-not-found/pk-command-not-found.c:739
+msgid "command not found"
+msgstr ""
+
+#. TRANSLATORS: tell the user what we think the command is
+#: ../contrib/command-not-found/pk-command-not-found.c:757
+msgid "Similar command is:"
+msgstr ""
+
+#. TRANSLATORS: Ask the user if we should run the similar command
+#: ../contrib/command-not-found/pk-command-not-found.c:771
+msgid "Run similar command:"
+msgstr ""
+
+#. TRANSLATORS: show the user a list of commands that they could have meant
+#. TRANSLATORS: show the user a list of commands we could run
+#: ../contrib/command-not-found/pk-command-not-found.c:785
+#: ../contrib/command-not-found/pk-command-not-found.c:794
+msgid "Similar commands are:"
+msgstr ""
+
+#. TRANSLATORS: ask the user to choose a file to run
+#: ../contrib/command-not-found/pk-command-not-found.c:801
+msgid "Please choose a command to run"
+msgstr ""
+
+#. TRANSLATORS: tell the user what package provides the command
+#: ../contrib/command-not-found/pk-command-not-found.c:819
+msgid "The package providing this file is:"
+msgstr ""
+
+#. TRANSLATORS: as the user if we want to install a package to provide the
+#. command
+#: ../contrib/command-not-found/pk-command-not-found.c:826
+#, 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:853
+msgid "Packages providing this file are:"
+msgstr ""
+
+#. TRANSLATORS: Show the user a list of packages that they can install to
+#. provide this command
+#: ../contrib/command-not-found/pk-command-not-found.c:863
+msgid "Suitable packages are:"
+msgstr ""
+
+#. get selection
+#. TRANSLATORS: ask the user to choose a file to install
+#: ../contrib/command-not-found/pk-command-not-found.c:872
+msgid "Please choose a package to install"
+msgstr ""
+
+#. TRANSLATORS: we are starting to install the packages
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:195
+msgid "Starting install"
+msgstr ""
+
+#. TRANSLATORS: we couldn't find the package name, non-fatal
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:407
+#, c-format
+msgid "Failed to find the package %s, or already installed: %s"
+msgstr ""
+
+#. command line argument, simulate what would be done, but don't actually do
+#. it
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:516
+msgid ""
+"Don't actually install any packages, only simulate what would be installed"
+msgstr ""
+
+#. command line argument, do we skip packages that depend on the ones
+#. specified
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:519
+msgid "Do not install dependencies of the core packages"
+msgstr ""
+
+#. command line argument, do we operate quietly
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:522
+msgid "Do not display information or progress"
+msgstr ""
+
+#. TRANSLATORS: tool that gets called when the command is not found
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:540
+msgid "PackageKit Debuginfo Installer"
+msgstr ""
+
+#. TRANSLATORS: the use needs to specify a list of package names on the
+#. command line
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:554
+#, c-format
+msgid "ERROR: Specify package names to install."
+msgstr ""
+
+#. TRANSLATORS: we are getting the list of repositories
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:590
+#, c-format
+msgid "Getting sources list"
+msgstr ""
+
+#. TRANSLATORS: operation was not successful
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:600
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:675
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:759
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:803
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:870
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:914
+msgid "FAILED."
+msgstr ""
+
+#. TRANSLATORS: all completed 100%
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:615
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:655
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:690
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:774
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:818
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:885
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:929
+#, c-format
+msgid "OK."
+msgstr ""
+
+#. TRANSLATORS: tell the user what we found
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:618
+#, c-format
+msgid "Found %i enabled and %i disabled sources."
+msgstr ""
+
+#. TRANSLATORS: we're finding repositories that match out pattern
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:625
+#, c-format
+msgid "Finding debugging sources"
+msgstr ""
+
+#. TRANSLATORS: tell the user what we found
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:658
+#, c-format
+msgid "Found %i disabled debuginfo repos."
+msgstr ""
+
+#. TRANSLATORS: we're now enabling all the debug sources we found
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:665
+#, c-format
+msgid "Enabling debugging sources"
+msgstr ""
+
+#. TRANSLATORS: tell the user how many we enabled
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:693
+#, c-format
+msgid "Enabled %i debugging sources."
+msgstr ""
+
+#. TRANSLATORS: we're now finding packages that match in all the repos
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:700
+#, c-format
+msgid "Finding debugging packages"
+msgstr ""
+
+#. TRANSLATORS: we couldn't find the package name, non-fatal
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:712
+#, c-format
+msgid "Failed to find the package %s: %s"
+msgstr ""
+
+#. TRANSLATORS: we couldn't find the debuginfo package name, non-fatal
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:735
+#, c-format
+msgid "Failed to find the debuginfo package %s: %s"
+msgstr ""
+
+#. TRANSLATORS: no debuginfo packages could be found to be installed
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:763
+#, c-format
+msgid "Found no packages to install."
+msgstr ""
+
+#. TRANSLATORS: tell the user we found some packages, and then list them
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:777
+#, c-format
+msgid "Found %i packages:"
+msgstr ""
+
+#. TRANSLATORS: tell the user we are searching for deps
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:793
+#, c-format
+msgid "Finding packages that depend on these packages"
+msgstr ""
+
+#. TRANSLATORS: could not install, detailed error follows
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:806
+#, c-format
+msgid "Could not find dependant packages: %s"
+msgstr ""
+
+#. TRANSLATORS: tell the user we found some more packages
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:822
+#, c-format
+msgid "Found %i extra packages."
+msgstr ""
+
+#. TRANSLATORS: tell the user we found some more packages
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:826
+#, c-format
+msgid "No extra packages required."
+msgstr ""
+
+#. TRANSLATORS: tell the user we found some packages (and deps), and then list
+#. them
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:835
+#, c-format
+msgid "Found %i packages to install:"
+msgstr ""
+
+#. TRANSLATORS: simulate mode is a testing mode where we quit before the
+#. action
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:848
+#, c-format
+msgid "Not installing packages in simulate mode"
+msgstr ""
+
+#. TRANSLATORS: we are now installing the debuginfo packages we found earlier
+#. TRANSLATORS: transaction state, installing packages
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:860
+#: ../lib/packagekit-glib2/pk-console-shared.c:287
+#, c-format
+msgid "Installing packages"
+msgstr ""
+
+#. TRANSLATORS: could not install, detailed error follows
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:873
+#, c-format
+msgid "Could not install packages: %s"
+msgstr ""
+
+#. TRANSLATORS: we are now disabling all debuginfo repos we previously enabled
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:905
+#, c-format
+msgid "Disabling sources previously enabled"
+msgstr ""
+
+#. TRANSLATORS: no debuginfo packages could be found to be installed, detailed
+#. error follows
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:917
+#, c-format
+msgid "Could not disable the debugging sources: %s"
+msgstr ""
+
+#. TRANSLATORS: we disabled all the debugging repos that we enabled before
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:932
+#, c-format
+msgid "Disabled %i debugging sources."
+msgstr ""
+
+#. TRANSLATORS: couldn't open device to write
+#: ../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:71
+msgid "Failed to write to the file"
+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 ""
+
+#. TRANSLATORS: the device could not be found in sysfs
+#: ../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:203
+msgid "Failed to unregister driver"
+msgstr ""
+
+#. TRANSLATORS: we failed to bind the old driver
+#: ../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:261
+msgid "Device path not found"
+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 ""
+
+#: ../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: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: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:315
+msgid "PackageKit Device Reloader"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. TRANSLATORS: we're going to verify the path first
+#: ../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:347
+msgid "Failed to verify device path"
+msgstr ""
+
+#. TRANSLATORS: we're going to try
+#: ../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:366
+msgid "Failed to rebind device"
+msgstr ""
+
+#: ../data/packagekit-catalog.xml.in.h:1
+msgid "PackageKit Catalog"
+msgstr ""
+
+#: ../data/packagekit-package-list.xml.in.h:1
+msgid "PackageKit Package List"
+msgstr ""
+
+#: ../data/packagekit-servicepack.xml.in.h:1
+msgid "PackageKit Service Pack"
+msgstr ""
+
+#: ../lib/packagekit-glib2/pk-console-shared.c:63
+#, 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:189
+msgid "More than one package matches:"
+msgstr ""
+
+#. TRANSLATORS: This finds out which package in the list to use
+#: ../lib/packagekit-glib2/pk-console-shared.c:200
+msgid "Please choose the correct package: "
+msgstr ""
+
+#. TRANSLATORS: This is when the transaction status is not known
+#: ../lib/packagekit-glib2/pk-console-shared.c:255
+msgid "Unknown state"
+msgstr ""
+
+#. TRANSLATORS: transaction state, the daemon is in the process of starting
+#: ../lib/packagekit-glib2/pk-console-shared.c:259
+msgid "Starting"
+msgstr ""
+
+#. TRANSLATORS: transaction state, the transaction is waiting for another to
+#. complete
+#: ../lib/packagekit-glib2/pk-console-shared.c:263
+msgid "Waiting in queue"
+msgstr ""
+
+#. TRANSLATORS: transaction state, just started
+#: ../lib/packagekit-glib2/pk-console-shared.c:267
+msgid "Running"
+msgstr ""
+
+#. TRANSLATORS: transaction state, is querying data
+#: ../lib/packagekit-glib2/pk-console-shared.c:271
+msgid "Querying"
+msgstr ""
+
+#. TRANSLATORS: transaction state, getting data from a server
+#: ../lib/packagekit-glib2/pk-console-shared.c:275
+msgid "Getting information"
+msgstr ""
+
+#. TRANSLATORS: transaction state, removing packages
+#: ../lib/packagekit-glib2/pk-console-shared.c:279
+msgid "Removing packages"
+msgstr ""
+
+#. TRANSLATORS: transaction state, downloading package files
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:283
+#: ../lib/packagekit-glib2/pk-console-shared.c:661
+msgid "Downloading packages"
+msgstr ""
+
+#. TRANSLATORS: transaction state, refreshing internal lists
+#: ../lib/packagekit-glib2/pk-console-shared.c:291
+msgid "Refreshing software list"
+msgstr ""
+
+#. TRANSLATORS: transaction state, installing updates
+#: ../lib/packagekit-glib2/pk-console-shared.c:295
+msgid "Installing updates"
+msgstr ""
+
+#. TRANSLATORS: transaction state, removing old packages, and cleaning config
+#. files
+#: ../lib/packagekit-glib2/pk-console-shared.c:299
+msgid "Cleaning up packages"
+msgstr ""
+
+#. TRANSLATORS: transaction state, obsoleting old packages
+#: ../lib/packagekit-glib2/pk-console-shared.c:303
+msgid "Obsoleting packages"
+msgstr ""
+
+#. TRANSLATORS: transaction state, checking the transaction before we do it
+#: ../lib/packagekit-glib2/pk-console-shared.c:307
+msgid "Resolving dependencies"
+msgstr ""
+
+#. TRANSLATORS: transaction state, checking if we have all the security keys
+#. for the operation
+#: ../lib/packagekit-glib2/pk-console-shared.c:311
+msgid "Checking signatures"
+msgstr ""
+
+#. TRANSLATORS: transaction state, when we return to a previous system state
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:315
+#: ../lib/packagekit-glib2/pk-console-shared.c:621
+msgid "Rolling back"
+msgstr ""
+
+#. TRANSLATORS: transaction state, when we're doing a test transaction
+#: ../lib/packagekit-glib2/pk-console-shared.c:319
+msgid "Testing changes"
+msgstr ""
+
+#. TRANSLATORS: transaction state, when we're writing to the system package
+#. database
+#: ../lib/packagekit-glib2/pk-console-shared.c:323
+msgid "Committing changes"
+msgstr ""
+
+#. TRANSLATORS: transaction state, requesting data from a server
+#: ../lib/packagekit-glib2/pk-console-shared.c:327
+msgid "Requesting data"
+msgstr ""
+
+#. TRANSLATORS: transaction state, all done!
+#: ../lib/packagekit-glib2/pk-console-shared.c:331
+msgid "Finished"
+msgstr ""
+
+#. TRANSLATORS: transaction state, in the process of cancelling
+#: ../lib/packagekit-glib2/pk-console-shared.c:335
+msgid "Cancelling"
+msgstr ""
+
+#. TRANSLATORS: transaction state, downloading metadata
+#: ../lib/packagekit-glib2/pk-console-shared.c:339
+msgid "Downloading repository information"
+msgstr ""
+
+#. TRANSLATORS: transaction state, downloading metadata
+#: ../lib/packagekit-glib2/pk-console-shared.c:343
+msgid "Downloading list of packages"
+msgstr ""
+
+#. TRANSLATORS: transaction state, downloading metadata
+#: ../lib/packagekit-glib2/pk-console-shared.c:347
+msgid "Downloading file lists"
+msgstr ""
+
+#. TRANSLATORS: transaction state, downloading metadata
+#: ../lib/packagekit-glib2/pk-console-shared.c:351
+msgid "Downloading lists of changes"
+msgstr ""
+
+#. TRANSLATORS: transaction state, downloading metadata
+#: ../lib/packagekit-glib2/pk-console-shared.c:355
+msgid "Downloading groups"
+msgstr ""
+
+#. TRANSLATORS: transaction state, downloading metadata
+#: ../lib/packagekit-glib2/pk-console-shared.c:359
+msgid "Downloading update information"
+msgstr ""
+
+#. TRANSLATORS: transaction state, repackaging delta files
+#: ../lib/packagekit-glib2/pk-console-shared.c:363
+msgid "Repackaging files"
+msgstr ""
+
+#. TRANSLATORS: transaction state, loading databases
+#: ../lib/packagekit-glib2/pk-console-shared.c:367
+msgid "Loading cache"
+msgstr ""
+
+#. TRANSLATORS: transaction state, scanning for running processes
+#: ../lib/packagekit-glib2/pk-console-shared.c:371
+msgid "Scanning applications"
+msgstr ""
+
+#. TRANSLATORS: transaction state, generating a list of packages installed on
+#. the system
+#: ../lib/packagekit-glib2/pk-console-shared.c:375
+msgid "Generating package lists"
+msgstr ""
+
+#. TRANSLATORS: transaction state, when we're waiting for the native tools to
+#. exit
+#: ../lib/packagekit-glib2/pk-console-shared.c:379
+msgid "Waiting for package manager lock"
+msgstr ""
+
+#. TRANSLATORS: transaction state, waiting for user to type in a password
+#: ../lib/packagekit-glib2/pk-console-shared.c:383
+msgid "Waiting for authentication"
+msgstr ""
+
+#. TRANSLATORS: transaction state, we are updating the list of processes
+#: ../lib/packagekit-glib2/pk-console-shared.c:387
+msgid "Updating running applications"
+msgstr ""
+
+#. TRANSLATORS: transaction state, we are checking executable files currently
+#. in use
+#: ../lib/packagekit-glib2/pk-console-shared.c:391
+msgid "Checking applications in use"
+msgstr ""
+
+#. TRANSLATORS: transaction state, we are checking for libraries currently in
+#. use
+#: ../lib/packagekit-glib2/pk-console-shared.c:395
+msgid "Checking libraries in use"
+msgstr ""
+
+#. TRANSLATORS: transaction state, we are copying package files before or
+#. after the transaction
+#: ../lib/packagekit-glib2/pk-console-shared.c:399
+msgid "Copying files"
+msgstr ""
+
+#. TRANSLATORS: The type of update
+#: ../lib/packagekit-glib2/pk-console-shared.c:417
+msgid "Trivial"
+msgstr ""
+
+#. TRANSLATORS: The type of update
+#: ../lib/packagekit-glib2/pk-console-shared.c:421
+msgid "Normal"
+msgstr ""
+
+#. TRANSLATORS: The type of update
+#: ../lib/packagekit-glib2/pk-console-shared.c:425
+msgid "Important"
+msgstr ""
+
+#. TRANSLATORS: The type of update
+#: ../lib/packagekit-glib2/pk-console-shared.c:429
+msgid "Security"
+msgstr ""
+
+#. TRANSLATORS: The type of update
+#: ../lib/packagekit-glib2/pk-console-shared.c:433
+msgid "Bug fix "
+msgstr ""
+
+#. TRANSLATORS: The type of update
+#: ../lib/packagekit-glib2/pk-console-shared.c:437
+msgid "Enhancement"
+msgstr ""
+
+#. TRANSLATORS: The type of update
+#: ../lib/packagekit-glib2/pk-console-shared.c:441
+msgid "Blocked"
+msgstr ""
+
+#. TRANSLATORS: The state of a package
+#. TRANSLATORS: The action of the package, in past tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:446
+#: ../lib/packagekit-glib2/pk-console-shared.c:519
+msgid "Installed"
+msgstr ""
+
+#. TRANSLATORS: The state of a package, i.e. not installed
+#: ../lib/packagekit-glib2/pk-console-shared.c:451
+msgid "Available"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:469
+msgid "Downloading"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:473
+msgid "Updating"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in present tense
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:477
+#: ../lib/packagekit-glib2/pk-console-shared.c:597
+msgid "Installing"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in present tense
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:481
+#: ../lib/packagekit-glib2/pk-console-shared.c:593
+msgid "Removing"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:485
+msgid "Cleaning up"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:489
+msgid "Obsoleting"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:493
+msgid "Reinstalling"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in past tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:511
+msgid "Downloaded"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in past tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:523
+msgid "Removed"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in past tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:527
+msgid "Cleaned up"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in past tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:531
+msgid "Obsoleted"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in past tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:535
+msgid "Reinstalled"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:553
+msgid "Unknown role type"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:557
+msgid "Getting dependencies"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:561
+msgid "Getting update details"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:565
+msgid "Getting details"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:569
+msgid "Getting requires"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:573
+msgid "Getting updates"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:577
+msgid "Searching by details"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:581
+msgid "Searching by file"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:585
+msgid "Searching groups"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:589
+msgid "Searching by name"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:601
+msgid "Installing files"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:605
+msgid "Refreshing cache"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:609
+msgid "Updating packages"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:613
+msgid "Updating system"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:617
+msgid "Canceling"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:625
+msgid "Getting repositories"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:629
+msgid "Enabling repository"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:633
+msgid "Setting data"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:637
+msgid "Resolving"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:641
+msgid "Getting file list"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:645
+msgid "Getting provides"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:649
+msgid "Installing signature"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:653
+msgid "Getting packages"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:657
+msgid "Accepting EULA"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:665
+msgid "Getting upgrades"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:669
+msgid "Getting categories"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:673
+msgid "Getting transactions"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:677
+#: ../lib/packagekit-glib2/pk-console-shared.c:681
+msgid "Simulating install"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:685
+msgid "Simulating remove"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:689
+msgid "Simulating update"
+msgstr ""
+
+#. TRANSLATORS: turn on all debugging
+#: ../lib/packagekit-glib2/pk-debug.c:133
+msgid "Show debugging information for all files"
+msgstr ""
+
+#: ../lib/packagekit-glib2/pk-debug.c:201
+msgid "Debugging Options"
+msgstr ""
+
+#: ../lib/packagekit-glib2/pk-debug.c:201
+msgid "Show debugging options"
+msgstr ""
+
+#. TRANSLATORS: ask the user if they are comfortable installing insecure
+#. packages
+#: ../lib/packagekit-glib2/pk-task-text.c:67
+msgid "Do you want to allow installing of unsigned software?"
+msgstr ""
+
+#. TRANSLATORS: tell the user we've not done anything
+#: ../lib/packagekit-glib2/pk-task-text.c:72
+msgid "The unsigned software will not be installed."
+msgstr ""
+
+#. TRANSLATORS: the package repository is signed by a key that is not
+#. recognised
+#: ../lib/packagekit-glib2/pk-task-text.c:121
+msgid "Software source signature required"
+msgstr ""
+
+#. TRANSLATORS: the package repository name
+#: ../lib/packagekit-glib2/pk-task-text.c:127
+msgid "Software source name"
+msgstr ""
+
+#. TRANSLATORS: the key URL
+#: ../lib/packagekit-glib2/pk-task-text.c:130
+msgid "Key URL"
+msgstr ""
+
+#. TRANSLATORS: the username of the key
+#: ../lib/packagekit-glib2/pk-task-text.c:133
+msgid "Key user"
+msgstr ""
+
+#. TRANSLATORS: the key ID, usually a few hex digits
+#: ../lib/packagekit-glib2/pk-task-text.c:136
+msgid "Key ID"
+msgstr ""
+
+#. TRANSLATORS: the key fingerprint, again, yet more hex
+#: ../lib/packagekit-glib2/pk-task-text.c:139
+msgid "Key fingerprint"
+msgstr ""
+
+#. TRANSLATORS: the timestamp (a bit like a machine readable time)
+#: ../lib/packagekit-glib2/pk-task-text.c:142
+msgid "Key Timestamp"
+msgstr ""
+
+#. TRANSLATORS: ask the user if they want to import
+#: ../lib/packagekit-glib2/pk-task-text.c:155
+msgid "Do you accept this signature?"
+msgstr ""
+
+#. TRANSLATORS: tell the user we've not done anything
+#: ../lib/packagekit-glib2/pk-task-text.c:160
+msgid "The signature was not accepted."
+msgstr ""
+
+#. TRANSLATORS: this is another name for a software licence that has to be
+#. read before installing
+#: ../lib/packagekit-glib2/pk-task-text.c:203
+msgid "End user licence agreement required"
+msgstr ""
+
+#. TRANSLATORS: the EULA text itself (long and boring)
+#: ../lib/packagekit-glib2/pk-task-text.c:212
+msgid "Agreement"
+msgstr ""
+
+#. TRANSLATORS: ask the user if they've read and accepted the EULA
+#: ../lib/packagekit-glib2/pk-task-text.c:221
+msgid "Do you accept this agreement?"
+msgstr ""
+
+#. TRANSLATORS: tell the user we've not done anything
+#: ../lib/packagekit-glib2/pk-task-text.c:226
+msgid "The agreement was not accepted."
+msgstr ""
+
+#. TRANSLATORS: the user needs to change media inserted into the computer
+#: ../lib/packagekit-glib2/pk-task-text.c:265
+msgid "Media change required"
+msgstr ""
+
+#. TRANSLATORS: the type, e.g. DVD, CD, etc
+#: ../lib/packagekit-glib2/pk-task-text.c:268
+msgid "Media type"
+msgstr ""
+
+#. TRANSLATORS: the media label, usually like 'disk-1of3'
+#: ../lib/packagekit-glib2/pk-task-text.c:271
+msgid "Media label"
+msgstr ""
+
+#. TRANSLATORS: the media description, usually like 'Fedora 12 disk 5'
+#: ../lib/packagekit-glib2/pk-task-text.c:274
+msgid "Text"
+msgstr ""
+
+#. TRANSLATORS: ask the user to insert the media
+#: ../lib/packagekit-glib2/pk-task-text.c:280
+msgid "Please insert the correct media"
+msgstr ""
+
+#. TRANSLATORS: tell the user we've not done anything as they are lazy
+#: ../lib/packagekit-glib2/pk-task-text.c:285
+msgid "The correct media was not inserted."
+msgstr ""
+
+#. TRANSLATORS: When processing, we might have to remove other dependencies
+#: ../lib/packagekit-glib2/pk-task-text.c:300
+msgid "The following packages have to be removed:"
+msgstr ""
+
+#. TRANSLATORS: When processing, we might have to install other dependencies
+#: ../lib/packagekit-glib2/pk-task-text.c:305
+msgid "The following packages have to be installed:"
+msgstr ""
+
+#. TRANSLATORS: When processing, we might have to update other dependencies
+#: ../lib/packagekit-glib2/pk-task-text.c:310
+msgid "The following packages have to be updated:"
+msgstr ""
+
+#. TRANSLATORS: When processing, we might have to reinstall other dependencies
+#: ../lib/packagekit-glib2/pk-task-text.c:315
+msgid "The following packages have to be reinstalled:"
+msgstr ""
+
+#. TRANSLATORS: When processing, we might have to downgrade other dependencies
+#: ../lib/packagekit-glib2/pk-task-text.c:320
+msgid "The following packages have to be downgraded:"
+msgstr ""
+
+#. TRANSLATORS: ask the user if the proposed changes are okay
+#: ../lib/packagekit-glib2/pk-task-text.c:380
+msgid "Proceed with changes?"
+msgstr ""
+
+#. TRANSLATORS: tell the user we didn't do anything
+#: ../lib/packagekit-glib2/pk-task-text.c:385
+msgid "The transaction did not proceed."
+msgstr ""
+
+#. SECURITY:
+#. - Normal users do not require admin authentication to accept new
+#. licence agreements.
+#. - Change this to 'auth_admin' for environments where users should not
+#. be given the option to make legal decisions.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:7
+msgid "Accept EULA"
+msgstr ""
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h: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"
+msgstr ""
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:10
+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:13
+msgid "Authentication is required to install a signed package"
+msgstr ""
+
+#: ../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:15
+msgid "Authentication is required to refresh the system sources"
+msgstr ""
+
+#: ../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:17
+msgid "Authentication is required to remove packages"
+msgstr ""
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:18
+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 ""
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:21
+msgid "Authentication is required to upgrade the operating system"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users are allowed to cancel their own task without
+#. authentication, but a different user id needs the admin password
+#. to cancel another users task.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:27
+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:34
+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:40
+msgid "Change software source parameters"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users do not need authentication to install signed packages
+#. from signed repositories, as this cannot exploit a system.
+#. - Paranoid users (or parents!) can change this to 'auth_admin' or
+#. 'auth_admin_keep'.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:47
+msgid "Install signed package"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users require admin authentication to install untrusted or
+#. unrecognised packages, as allowing users to do this without a
+#. password would be a massive security hole.
+#. - This is not retained as each package should be authenticated.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:54
+msgid "Install untrusted local file"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users do not require admin authentication to refresh the
+#. cache, as this doesn't actually install or remove software.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:59
+msgid "Refresh system sources"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users require admin authentication to rebind a driver
+#. so that it works after we install firmware.
+#. - This should not be set to 'yes' as unprivileged users could then
+#. try to rebind drivers in use, for instance security authentication
+#. devices.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:67
+msgid "Reload a device"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users require admin authentication to remove packages as
+#. this can make the system unbootable or stop other applications from
+#. working.
+#. - Be sure to close the tool used to remove the packages after the
+#. admin authentication has been obtained, otherwise packages can still
+#. be removed. If this is not possible, change this authentication to
+#. 'auth_admin'.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:77
+msgid "Remove package"
+msgstr ""
+
+#. 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:83
+msgid "Rollback to a previous transaction"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users do not require admin authentication to set the proxy
+#. used for downloading packages.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:88
+msgid "Set network proxy"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users require admin authentication to add signing keys.
+#. - This implies adding an explicit trust, and should not be granted
+#. without a secure authentication.
+#. - This is not kept as each package should be authenticated.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:95
+msgid "Trust a key used for signing packages"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users do not require admin authentication to update the
+#. system as the packages will be signed, and the action is required
+#. to update the system when unattended.
+#. - Changing this to anything other than 'yes' will break unattended
+#. updates.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:103
+msgid "Update packages"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users require admin authentication to upgrade the disto as
+#. this can make the system unbootable or stop other applications from
+#. working.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:109
+msgid "Upgrade System"
+msgstr ""
+
+#. TRANSLATORS: failed due to DBus security
+#: ../src/pk-main.c:87
+msgid "Startup failed due to security policies on this machine."
+msgstr ""
+
+#. TRANSLATORS: only two ways this can fail...
+#: ../src/pk-main.c:89
+msgid "This can happen for two reasons:"
+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 ""
+
+#. 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 ""
+
+#. TRANSLATORS: a backend is the system package tool, e.g. yum, apt
+#: ../src/pk-main.c:200
+msgid "Packaging backend to use, e.g. dummy"
+msgstr ""
+
+#. TRANSLATORS: if we should run in the background
+#: ../src/pk-main.c:203
+msgid "Daemonize and detach from the terminal"
+msgstr ""
+
+#. TRANSLATORS: if we should not monitor how long we are inactive for
+#: ../src/pk-main.c:206
+msgid "Disable the idle timer"
+msgstr ""
+
+#. TRANSLATORS: show version
+#: ../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:212
+msgid "Exit after a small delay"
+msgstr ""
+
+#. TRANSLATORS: exit straight away, used for automatic profiling
+#: ../src/pk-main.c:215
+msgid "Exit after the engine has loaded"
+msgstr ""
+
+#. TRANSLATORS: describing the service that is running
+#: ../src/pk-main.c:230
+msgid "PackageKit service"
+msgstr ""
+
+#. TRANSLATORS: fatal error, dbus is not running
+#: ../src/pk-main.c:267
+msgid "Cannot connect to the system bus"
+msgstr ""
+
+#. TRANSLATORS: cannot register on system bus, unknown reason -- geeky error
+#. follows
+#: ../src/pk-main.c:316
+msgid "Error trying to start:"
+msgstr ""
+
+#: ../src/pk-polkit-action-lookup.c:150
+msgid "To install debugging packages, extra sources need to be enabled"
+msgstr ""
+
+#. 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 ""
+
+#: ../src/pk-polkit-action-lookup.c:176
+msgid "Do not update this package unless you are sure it is safe to do so."
+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 ""
+
+#: ../src/pk-polkit-action-lookup.c:195
+msgid "Do not install this package unless you are sure it is safe to do so."
+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 ""
+
+#. TRANSLATORS: too many packages to list each one
+#: ../src/pk-polkit-action-lookup.c:273
+msgid "Many packages"
+msgstr ""
+
+#. TRANSLATORS: if the transaction is forced to install only trusted packages
+#: ../src/pk-polkit-action-lookup.c:339
+msgid "Only trusted"
+msgstr ""
diff --git a/po/as.po b/po/as.po
index 2dce172..2ca5db6 100644
--- a/po/as.po
+++ b/po/as.po
@@ -8,7 +8,7 @@ msgstr ""
 "Project-Id-Version: PackageKit\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2010-12-13 12:23+0000\n"
-"PO-Revision-Date: 2011-03-04 18:34+0000\n"
+"PO-Revision-Date: 2011-03-22 15:37+0000\n"
 "Last-Translator: hughsie <richard at hughsie.com>\n"
 "Language-Team: LANGUAGE <LL at li.org>\n"
 "MIME-Version: 1.0\n"
diff --git a/po/bg.po b/po/bg.po
index ea85b6f..1518868 100644
--- a/po/bg.po
+++ b/po/bg.po
@@ -8,9 +8,9 @@ msgstr ""
 "Project-Id-Version: PackageKit\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2010-12-13 12:23+0000\n"
-"PO-Revision-Date: 2011-03-04 18:34+0000\n"
+"PO-Revision-Date: 2011-03-22 15:37+0000\n"
 "Last-Translator: al_shopov <ash at kambanaria.org>\n"
-"Language-Team: Bulgarian <dict at fsa-bg.org>\n"
+"Language-Team: LANGUAGE <LL at li.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
diff --git a/po/bg_BG.po b/po/bg_BG.po
new file mode 100644
index 0000000..de99dad
--- /dev/null
+++ b/po/bg_BG.po
@@ -0,0 +1,2098 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL at ADDRESS>, YEAR.
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: PackageKit\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-12-13 12:23+0000\n"
+"PO-Revision-Date: 2011-05-04 09:48+0000\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Language-Team: Bulgarian (Bulgaria) (http://www.transifex.net/projects/p/freedesktop/team/bg_BG/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: bg_BG\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#. TRANSLATORS: this is an atomic transaction
+#. TRANSLATORS: the role is the point of the transaction, e.g. update-system
+#: ../client/pk-console.c:174 ../client/pk-console.c:596
+msgid "Transaction"
+msgstr ""
+
+#. TRANSLATORS: this is the time the transaction was started in system
+#. timezone
+#: ../client/pk-console.c:176
+msgid "System time"
+msgstr ""
+
+#. TRANSLATORS: this is if the transaction succeeded or not
+#: ../client/pk-console.c:178
+msgid "Succeeded"
+msgstr ""
+
+#: ../client/pk-console.c:178
+msgid "True"
+msgstr ""
+
+#: ../client/pk-console.c:178
+msgid "False"
+msgstr ""
+
+#. TRANSLATORS: this is the transactions role, e.g. "update-system"
+#. TRANSLATORS: the trasaction role, e.g. update-system
+#: ../client/pk-console.c:180 ../src/pk-polkit-action-lookup.c:332
+msgid "Role"
+msgstr ""
+
+#. TRANSLATORS: this is The duration of the transaction
+#: ../client/pk-console.c:185
+msgid "Duration"
+msgstr ""
+
+#: ../client/pk-console.c:185
+msgid "(seconds)"
+msgstr ""
+
+#. TRANSLATORS: this is The command line used to do the action
+#. TRANSLATORS: the command line of the thing that wants the authentication
+#: ../client/pk-console.c:189 ../src/pk-polkit-action-lookup.c:346
+msgid "Command line"
+msgstr ""
+
+#. TRANSLATORS: this is the user ID of the user that started the action
+#: ../client/pk-console.c:191
+msgid "User ID"
+msgstr ""
+
+#. TRANSLATORS: this is the username, e.g. hughsie
+#: ../client/pk-console.c:198
+msgid "Username"
+msgstr ""
+
+#. TRANSLATORS: this is the users real name, e.g. "Richard Hughes"
+#: ../client/pk-console.c:202
+msgid "Real name"
+msgstr ""
+
+#: ../client/pk-console.c:210
+msgid "Affected packages:"
+msgstr ""
+
+#: ../client/pk-console.c:212
+msgid "Affected packages: None"
+msgstr ""
+
+#. TRANSLATORS: this is the distro, e.g. Fedora 10
+#: ../client/pk-console.c:247
+msgid "Distribution"
+msgstr ""
+
+#. TRANSLATORS: this is type of update, stable or testing
+#: ../client/pk-console.c:249
+msgid "Type"
+msgstr ""
+
+#. TRANSLATORS: this is any summary text describing the upgrade
+#. TRANSLATORS: this is the summary of the group
+#: ../client/pk-console.c:251 ../client/pk-console.c:290
+msgid "Summary"
+msgstr ""
+
+#. TRANSLATORS: this is the group category name
+#: ../client/pk-console.c:279
+msgid "Category"
+msgstr ""
+
+#. TRANSLATORS: this is group identifier
+#: ../client/pk-console.c:281
+msgid "ID"
+msgstr ""
+
+#. TRANSLATORS: this is the parent group
+#: ../client/pk-console.c:284
+msgid "Parent"
+msgstr ""
+
+#. TRANSLATORS: this is the name of the parent group
+#: ../client/pk-console.c:287
+msgid "Name"
+msgstr ""
+
+#. TRANSLATORS: this is preferred icon for the group
+#: ../client/pk-console.c:293
+msgid "Icon"
+msgstr ""
+
+#. TRANSLATORS: this is a header for the package that can be updated
+#: ../client/pk-console.c:339
+msgid "Details about the update:"
+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:345 ../client/pk-console.c:615
+#: ../lib/packagekit-glib2/pk-task-text.c:124
+#: ../lib/packagekit-glib2/pk-task-text.c:206
+#: ../src/pk-polkit-action-lookup.c:357
+msgid "Package"
+msgid_plural "Packages"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: details about the update, any packages that this update
+#. updates
+#: ../client/pk-console.c:348
+msgid "Updates"
+msgstr ""
+
+#. TRANSLATORS: details about the update, any packages that this update
+#. obsoletes
+#: ../client/pk-console.c:352
+msgid "Obsoletes"
+msgstr ""
+
+#. TRANSLATORS: details about the update, the vendor URLs
+#. TRANSLATORS: the vendor (e.g. vmware) that is providing the EULA
+#: ../client/pk-console.c:356 ../lib/packagekit-glib2/pk-task-text.c:209
+msgid "Vendor"
+msgstr ""
+
+#. TRANSLATORS: details about the update, the bugzilla URLs
+#: ../client/pk-console.c:360
+msgid "Bugzilla"
+msgstr ""
+
+#. TRANSLATORS: details about the update, the CVE URLs
+#: ../client/pk-console.c:364
+msgid "CVE"
+msgstr ""
+
+#. TRANSLATORS: details about the update, if the package requires a restart
+#: ../client/pk-console.c:368
+msgid "Restart"
+msgstr ""
+
+#. TRANSLATORS: details about the update, any description of the update
+#: ../client/pk-console.c:372
+msgid "Update text"
+msgstr ""
+
+#. TRANSLATORS: details about the update, the changelog for the package
+#: ../client/pk-console.c:376
+msgid "Changes"
+msgstr ""
+
+#. TRANSLATORS: details about the update, the ongoing state of the update
+#: ../client/pk-console.c:380
+msgid "State"
+msgstr ""
+
+#. TRANSLATORS: details about the update, date the update was issued
+#: ../client/pk-console.c:384
+msgid "Issued"
+msgstr ""
+
+#. TRANSLATORS: details about the update, date the update was updated
+#. TRANSLATORS: The action of the package, in past tense
+#: ../client/pk-console.c:388 ../lib/packagekit-glib2/pk-console-shared.c:515
+msgid "Updated"
+msgstr ""
+
+#. TRANSLATORS: if the repo is enabled
+#: ../client/pk-console.c:424
+msgid "Enabled"
+msgstr ""
+
+#. TRANSLATORS: if the repo is disabled
+#: ../client/pk-console.c:427
+msgid "Disabled"
+msgstr ""
+
+#. TRANSLATORS: a package requires the system to be restarted
+#: ../client/pk-console.c:459
+msgid "System restart required by:"
+msgstr ""
+
+#. TRANSLATORS: a package requires the session to be restarted
+#: ../client/pk-console.c:462
+msgid "Session restart required:"
+msgstr ""
+
+#. TRANSLATORS: a package requires the system to be restarted due to a
+#. security update
+#: ../client/pk-console.c:465
+msgid "System restart (security) required by:"
+msgstr ""
+
+#. TRANSLATORS: a package requires the session to be restarted due to a
+#. security update
+#: ../client/pk-console.c:468
+msgid "Session restart (security) required:"
+msgstr ""
+
+#. TRANSLATORS: a package requires the application to be restarted
+#: ../client/pk-console.c:471
+msgid "Application restart required by:"
+msgstr ""
+
+#. TRANSLATORS: This a list of details about the package
+#: ../client/pk-console.c:506
+msgid "Package description"
+msgstr ""
+
+#. TRANSLATORS: This a message (like a little note that may be of interest)
+#. from the transaction
+#: ../client/pk-console.c:537
+msgid "Message:"
+msgstr ""
+
+#. TRANSLATORS: This where the package has no files
+#: ../client/pk-console.c:558
+msgid "No files"
+msgstr ""
+
+#. TRANSLATORS: This a list files contained in the package
+#: ../client/pk-console.c:563
+msgid "Package files"
+msgstr ""
+
+#. TRANSLATORS: the percentage complete of the transaction
+#: ../client/pk-console.c:631
+msgid "Percentage"
+msgstr ""
+
+#. TRANSLATORS: the status of the transaction (e.g. downloading)
+#: ../client/pk-console.c:649
+msgid "Status"
+msgstr ""
+
+#. TRANSLATORS: the results from the transaction
+#: ../client/pk-console.c:678
+msgid "Results:"
+msgstr ""
+
+#. TRANSLATORS: we failed to get any results, which is pretty fatal in my book
+#: ../client/pk-console.c:685
+msgid "Fatal error"
+msgstr ""
+
+#. TRANSLATORS: the user asked to update everything, but there is nothing that
+#. can be updated
+#: ../client/pk-console.c:701
+msgid "There are no packages to update."
+msgstr ""
+
+#. TRANSLATORS: the transaction failed in a way we could not expect
+#: ../client/pk-console.c:704
+#: ../contrib/command-not-found/pk-command-not-found.c:639
+msgid "The transaction failed"
+msgstr ""
+
+#. TRANSLATORS: print a message when there are no updates
+#: ../client/pk-console.c:733
+msgid "There are no updates available at this time."
+msgstr ""
+
+#: ../client/pk-console.c:756
+msgid "There are no upgrades available at this time."
+msgstr ""
+
+#. TRANSLATORS: a package needs to restart their system
+#: ../client/pk-console.c:823
+msgid "Please restart the computer to complete the update."
+msgstr ""
+
+#. TRANSLATORS: a package needs to restart the session
+#: ../client/pk-console.c:826
+msgid "Please logout and login to complete the update."
+msgstr ""
+
+#. TRANSLATORS: a package needs to restart their system (due to security)
+#: ../client/pk-console.c:829
+msgid ""
+"Please restart the computer to complete the update as important security "
+"updates have been installed."
+msgstr ""
+
+#. TRANSLATORS: a package needs to restart the session (due to security)
+#: ../client/pk-console.c:832
+msgid ""
+"Please logout and login to complete the update as important security updates"
+" have been installed."
+msgstr ""
+
+#. TRANSLATORS: The user used 'pkcon install dave.rpm' rather than 'pkcon
+#. install-local dave.rpm'
+#: ../client/pk-console.c:858
+#, 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:866
+#, c-format
+msgid "This tool could not find any available package: %s"
+msgstr ""
+
+#. TRANSLATORS: There was an error getting the list of files for the package.
+#. The detailed error follows
+#: ../client/pk-console.c:894
+#, c-format
+msgid "This tool could not find the installed package: %s"
+msgstr ""
+
+#. TRANSLATORS: There was an error getting the list of files for the package.
+#. The detailed error follows
+#: ../client/pk-console.c:922 ../client/pk-console.c:950
+#, c-format
+msgid "This tool could not find the package: %s"
+msgstr ""
+
+#. TRANSLATORS: There was an error getting the list of files for the package.
+#. The detailed error follows
+#. TRANSLATORS: There was an error getting the dependencies for the package.
+#. The detailed error follows
+#. TRANSLATORS: There was an error getting the details about the package. The
+#. detailed error follows
+#. TRANSLATORS: The package name was not found in any software sources. The
+#. detailed error follows
+#: ../client/pk-console.c:978 ../client/pk-console.c:1006
+#: ../client/pk-console.c:1034 ../client/pk-console.c:1062
+#: ../client/pk-console.c:1090
+#, c-format
+msgid "This tool could not find all the packages: %s"
+msgstr ""
+
+#. TRANSLATORS: This is when the daemon crashed, and we are up shit creek
+#. without a paddle
+#: ../client/pk-console.c:1119
+msgid "The daemon crashed mid-transaction!"
+msgstr ""
+
+#. TRANSLATORS: This is the header to the --help menu
+#: ../client/pk-console.c:1153
+msgid "PackageKit Console Interface"
+msgstr ""
+
+#. these are commands we can use with pkcon
+#: ../client/pk-console.c:1155
+msgid "Subcommands:"
+msgstr ""
+
+#. TRANSLATORS: we keep a database updated with the time that an action was
+#. last executed
+#: ../client/pk-console.c:1234
+msgid "Failed to get the time since this action was last completed"
+msgstr ""
+
+#. TRANSLATORS: command line argument, just show the version string
+#: ../client/pk-console.c:1275 ../client/pk-monitor.c:371
+msgid "Show the program version and exit"
+msgstr ""
+
+#. TRANSLATORS: command line argument, use a filter to narrow down results
+#: ../client/pk-console.c:1278
+msgid "Set the filter, e.g. installed"
+msgstr ""
+
+#. TRANSLATORS: command line argument, use a non-standard install prefix
+#: ../client/pk-console.c:1281
+msgid "Set the install root, e.g. '/' or '/mnt/ltsp'"
+msgstr ""
+
+#. TRANSLATORS: command line argument, work asynchronously
+#: ../client/pk-console.c:1284
+msgid "Exit without waiting for actions to complete"
+msgstr ""
+
+#. command line argument, do we ask questions
+#: ../client/pk-console.c:1287
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:525
+msgid "Install the packages without asking for confirmation"
+msgstr ""
+
+#. TRANSLATORS: command line argument, this command is not a priority
+#: ../client/pk-console.c:1290
+msgid "Run the command using idle network bandwidth and also using less power"
+msgstr ""
+
+#. TRANSLATORS: command line argument, just output without fancy formatting
+#: ../client/pk-console.c:1293
+msgid ""
+"Print to screen a machine readable output, rather than using animated "
+"widgets"
+msgstr ""
+
+#. TRANSLATORS: command line argument, just output without fancy formatting
+#: ../client/pk-console.c:1296
+msgid "The maximum metadata cache age. Use -1 for 'never'."
+msgstr ""
+
+#. TRANSLATORS: we failed to contact the daemon
+#: ../client/pk-console.c:1333
+msgid "Failed to contact PackageKit"
+msgstr ""
+
+#. TRANSLATORS: The user specified an incorrect filter
+#: ../client/pk-console.c:1381
+msgid "The proxy could not be set"
+msgstr ""
+
+#. TRANSLATORS: The user specified an incorrect filter
+#: ../client/pk-console.c:1393
+msgid "The install root could not be set"
+msgstr ""
+
+#. TRANSLATORS: The user specified an incorrect filter
+#: ../client/pk-console.c:1405
+msgid "The filter specified was invalid"
+msgstr ""
+
+#. TRANSLATORS: a search type can be name, details, file, etc
+#: ../client/pk-console.c:1424
+msgid "A search type is required, e.g. name"
+msgstr ""
+
+#. TRANSLATORS: the user needs to provide a search term
+#: ../client/pk-console.c:1431 ../client/pk-console.c:1443
+#: ../client/pk-console.c:1455 ../client/pk-console.c:1467
+msgid "A search term is required"
+msgstr ""
+
+#. TRANSLATORS: the search type was provided, but invalid
+#: ../client/pk-console.c:1477
+msgid "Invalid search type"
+msgstr ""
+
+#. TRANSLATORS: the user did not specify what they wanted to install
+#: ../client/pk-console.c:1483
+msgid "A package name to install is required"
+msgstr ""
+
+#. TRANSLATORS: the user did not specify what they wanted to install
+#: ../client/pk-console.c:1492
+msgid "A filename to install is required"
+msgstr ""
+
+#. TRANSLATORS: geeky error, 99.9999% of users won't see this
+#: ../client/pk-console.c:1503
+msgid "A type, key_id and package_id are required"
+msgstr ""
+
+#. TRANSLATORS: the user did not specify what they wanted to remove
+#: ../client/pk-console.c:1514
+msgid "A package name to remove is required"
+msgstr ""
+
+#. TRANSLATORS: the user did not specify anything about what to download or
+#. where
+#: ../client/pk-console.c:1523
+msgid "A destination directory and the package names to download are required"
+msgstr ""
+
+#. TRANSLATORS: the directory does not exist, so we can't continue
+#: ../client/pk-console.c:1530
+msgid "Directory not found"
+msgstr ""
+
+#. TRANSLATORS: geeky error, 99.9999% of users won't see this
+#: ../client/pk-console.c:1539
+msgid "A licence identifier (eula-id) is required"
+msgstr ""
+
+#. TRANSLATORS: geeky error, 99.9999% of users won't see this
+#: ../client/pk-console.c:1550
+msgid "A transaction identifier (tid) is required"
+msgstr ""
+
+#. TRANSLATORS: The user did not specify a package name
+#: ../client/pk-console.c:1571
+msgid "A package name to resolve is required"
+msgstr ""
+
+#. TRANSLATORS: The user did not specify a repository (software source) name
+#: ../client/pk-console.c:1582 ../client/pk-console.c:1593
+msgid "A repository name is required"
+msgstr ""
+
+#. TRANSLATORS: The user didn't provide any data
+#: ../client/pk-console.c:1604
+msgid "A repo name, parameter and value are required"
+msgstr ""
+
+#. TRANSLATORS: The user didn't specify what action to use
+#: ../client/pk-console.c:1621
+msgid "An action, e.g. 'update-system' is required"
+msgstr ""
+
+#. TRANSLATORS: The user specified an invalid action
+#: ../client/pk-console.c:1628
+msgid "A correct role is required"
+msgstr ""
+
+#. TRANSLATORS: The user did not provide a package name
+#. TRANSLATORS: This is when the user fails to supply the package name
+#: ../client/pk-console.c:1638 ../client/pk-console.c:1652
+#: ../client/pk-console.c:1661 ../client/pk-console.c:1681
+#: ../client/pk-console.c:1690 ../client/pk-generate-pack.c:314
+msgid "A package name is required"
+msgstr ""
+
+#. TRANSLATORS: each package "provides" certain things, e.g. mime(gstreamer-
+#. decoder-mp3), the user didn't specify it
+#: ../client/pk-console.c:1670
+msgid "A package provide string is required"
+msgstr ""
+
+#. TRANSLATORS: The user did not provide a distro name
+#: ../client/pk-console.c:1714
+msgid "A distribution name is required"
+msgstr ""
+
+#. TRANSLATORS: The user did not provide an upgrade type
+#: ../client/pk-console.c:1720
+msgid "An upgrade type is required, e.g. 'minimal', 'default' or 'complete'"
+msgstr ""
+
+#. TRANSLATORS: The user tried to use an unsupported option on the command
+#. line
+#: ../client/pk-console.c:1770
+#, c-format
+msgid "Option '%s' is not supported"
+msgstr ""
+
+#. TRANSLATORS: Generic failure of what they asked to do
+#: ../client/pk-console.c:1780
+msgid "Command failed"
+msgstr ""
+
+#. TRANSLATORS: we can exclude certain packages (glibc) when we know they'll
+#. exist on the target
+#: ../client/pk-generate-pack.c:253
+msgid "Set the file name of dependencies to be excluded"
+msgstr ""
+
+#. TRANSLATORS: the output location
+#: ../client/pk-generate-pack.c:256
+msgid ""
+"The output file or directory (the current directory is used if omitted)"
+msgstr ""
+
+#. TRANSLATORS: put a list of packages in the pack
+#: ../client/pk-generate-pack.c:259
+msgid "The package to be put into the service pack"
+msgstr ""
+
+#. TRANSLATORS: put all pending updates in the pack
+#: ../client/pk-generate-pack.c:262
+msgid "Put all updates available in the service pack"
+msgstr ""
+
+#. TRANSLATORS: This is when the user fails to supply the correct arguments
+#: ../client/pk-generate-pack.c:298
+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:306
+msgid "Both options selected."
+msgstr ""
+
+#. TRANSLATORS: This is when the user fails to supply the output
+#: ../client/pk-generate-pack.c:322
+msgid "A output directory or file name is required"
+msgstr ""
+
+#. TRANSLATORS: This is when the daemon is not-installed/broken and fails to
+#. startup
+#: ../client/pk-generate-pack.c:340
+msgid "The daemon failed to startup"
+msgstr ""
+
+#. TRANSLATORS: This is when the backend doesn't have the capability to get-
+#. depends
+#. TRANSLATORS: This is when the backend doesn't have the capability to
+#. download
+#: ../client/pk-generate-pack.c:351 ../client/pk-generate-pack.c:357
+msgid "The package manager cannot perform this type of operation."
+msgstr ""
+
+#. TRANSLATORS: This is when the distro didn't include libarchive support into
+#. PK
+#: ../client/pk-generate-pack.c:364
+msgid ""
+"Service packs cannot be created as PackageKit was not built with libarchive "
+"support."
+msgstr ""
+
+#. TRANSLATORS: the user specified an absolute path, but didn't get the
+#. extension correct
+#: ../client/pk-generate-pack.c:375
+msgid "If specifying a file, the service pack name must end with"
+msgstr ""
+
+#. TRANSLATORS: This is when file already exists
+#: ../client/pk-generate-pack.c:391
+msgid "A pack with the same name already exists, do you want to overwrite it?"
+msgstr ""
+
+#. TRANSLATORS: This is when the pack was not overwritten
+#: ../client/pk-generate-pack.c:394
+msgid "The pack was not overwritten."
+msgstr ""
+
+#. TRANSLATORS: This is when the temporary directory cannot be created, the
+#. directory name follows
+#: ../client/pk-generate-pack.c:407
+msgid "Failed to create directory:"
+msgstr ""
+
+#. TRANSLATORS: This is when the list of packages from the remote computer
+#. cannot be opened
+#: ../client/pk-generate-pack.c:419
+msgid "Failed to open package list."
+msgstr ""
+
+#. TRANSLATORS: The package name is being matched up to available packages
+#: ../client/pk-generate-pack.c:428
+msgid "Finding package name."
+msgstr ""
+
+#. TRANSLATORS: This is when the package cannot be found in any software
+#. source. The detailed error follows
+#: ../client/pk-generate-pack.c:432
+#, 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:440
+msgid "Creating service pack..."
+msgstr ""
+
+#. TRANSLATORS: we succeeded in making the file
+#: ../client/pk-generate-pack.c:455
+#, c-format
+msgid "Service pack created '%s'"
+msgstr ""
+
+#. TRANSLATORS: we failed to make te file
+#: ../client/pk-generate-pack.c:460
+#, c-format
+msgid "Failed to create '%s': %s"
+msgstr ""
+
+#: ../client/pk-monitor.c:284
+msgid "Failed to get daemon state"
+msgstr ""
+
+#: ../client/pk-monitor.c:349
+msgid "Failed to get properties"
+msgstr ""
+
+#. TRANSLATORS: this is a program that monitors PackageKit
+#: ../client/pk-monitor.c:387
+msgid "PackageKit Monitor"
+msgstr ""
+
+#. TRANSLATORS: when we are getting data from the daemon
+#: ../contrib/browser-plugin/pk-plugin-install.c:499
+msgid "Getting package information..."
+msgstr ""
+
+#. TRANSLATORS: run an applicaiton
+#: ../contrib/browser-plugin/pk-plugin-install.c:505
+#, c-format
+msgid "Run %s"
+msgstr ""
+
+#. TRANSLATORS: show the installed version of a package
+#: ../contrib/browser-plugin/pk-plugin-install.c:511
+msgid "Installed version"
+msgstr ""
+
+#. TRANSLATORS: run the application now
+#: ../contrib/browser-plugin/pk-plugin-install.c:519
+#, c-format
+msgid "Run version %s now"
+msgstr ""
+
+#. TRANSLATORS: run the application now
+#: ../contrib/browser-plugin/pk-plugin-install.c:525
+msgid "Run now"
+msgstr ""
+
+#. TRANSLATORS: update to a new version of the package
+#: ../contrib/browser-plugin/pk-plugin-install.c:531
+#, c-format
+msgid "Update to version %s"
+msgstr ""
+
+#. TRANSLATORS: To install a package
+#: ../contrib/browser-plugin/pk-plugin-install.c:537
+#, c-format
+msgid "Install %s now"
+msgstr ""
+
+#. TRANSLATORS: the version of the package
+#: ../contrib/browser-plugin/pk-plugin-install.c:540
+msgid "Version"
+msgstr ""
+
+#. TRANSLATORS: noting found, so can't install
+#: ../contrib/browser-plugin/pk-plugin-install.c:545
+msgid "No packages found for your system"
+msgstr ""
+
+#. TRANSLATORS: package is being installed
+#: ../contrib/browser-plugin/pk-plugin-install.c:550
+msgid "Installing..."
+msgstr ""
+
+#. TRANSLATORS: downloading repo data so we can search
+#: ../contrib/command-not-found/pk-command-not-found.c: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: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: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: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:444
+msgid "Failed to search for file"
+msgstr ""
+
+#. TRANSLATORS: the transaction failed in a way we could not expect
+#: ../contrib/command-not-found/pk-command-not-found.c:456
+msgid "Getting the list of files failed"
+msgstr ""
+
+#. TRANSLATORS: we failed to launch the executable, the error follows
+#: ../contrib/command-not-found/pk-command-not-found.c:602
+msgid "Failed to launch:"
+msgstr ""
+
+#. TRANSLATORS: we failed to install the package
+#: ../contrib/command-not-found/pk-command-not-found.c:630
+msgid "Failed to install packages"
+msgstr ""
+
+#. TRANSLATORS: tool that gets called when the command is not found
+#: ../contrib/command-not-found/pk-command-not-found.c:706
+msgid "PackageKit Command Not Found"
+msgstr ""
+
+#. TRANSLATORS: the prefix of all the output telling the user
+#. * why it's not executing. NOTE: this is lowercase to mimic
+#. * the style of bash itself -- apologies
+#: ../contrib/command-not-found/pk-command-not-found.c:739
+msgid "command not found"
+msgstr ""
+
+#. TRANSLATORS: tell the user what we think the command is
+#: ../contrib/command-not-found/pk-command-not-found.c:757
+msgid "Similar command is:"
+msgstr ""
+
+#. TRANSLATORS: Ask the user if we should run the similar command
+#: ../contrib/command-not-found/pk-command-not-found.c:771
+msgid "Run similar command:"
+msgstr ""
+
+#. TRANSLATORS: show the user a list of commands that they could have meant
+#. TRANSLATORS: show the user a list of commands we could run
+#: ../contrib/command-not-found/pk-command-not-found.c:785
+#: ../contrib/command-not-found/pk-command-not-found.c:794
+msgid "Similar commands are:"
+msgstr ""
+
+#. TRANSLATORS: ask the user to choose a file to run
+#: ../contrib/command-not-found/pk-command-not-found.c:801
+msgid "Please choose a command to run"
+msgstr ""
+
+#. TRANSLATORS: tell the user what package provides the command
+#: ../contrib/command-not-found/pk-command-not-found.c:819
+msgid "The package providing this file is:"
+msgstr ""
+
+#. TRANSLATORS: as the user if we want to install a package to provide the
+#. command
+#: ../contrib/command-not-found/pk-command-not-found.c:826
+#, 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:853
+msgid "Packages providing this file are:"
+msgstr ""
+
+#. TRANSLATORS: Show the user a list of packages that they can install to
+#. provide this command
+#: ../contrib/command-not-found/pk-command-not-found.c:863
+msgid "Suitable packages are:"
+msgstr ""
+
+#. get selection
+#. TRANSLATORS: ask the user to choose a file to install
+#: ../contrib/command-not-found/pk-command-not-found.c:872
+msgid "Please choose a package to install"
+msgstr ""
+
+#. TRANSLATORS: we are starting to install the packages
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:195
+msgid "Starting install"
+msgstr ""
+
+#. TRANSLATORS: we couldn't find the package name, non-fatal
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:407
+#, c-format
+msgid "Failed to find the package %s, or already installed: %s"
+msgstr ""
+
+#. command line argument, simulate what would be done, but don't actually do
+#. it
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:516
+msgid ""
+"Don't actually install any packages, only simulate what would be installed"
+msgstr ""
+
+#. command line argument, do we skip packages that depend on the ones
+#. specified
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:519
+msgid "Do not install dependencies of the core packages"
+msgstr ""
+
+#. command line argument, do we operate quietly
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:522
+msgid "Do not display information or progress"
+msgstr ""
+
+#. TRANSLATORS: tool that gets called when the command is not found
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:540
+msgid "PackageKit Debuginfo Installer"
+msgstr ""
+
+#. TRANSLATORS: the use needs to specify a list of package names on the
+#. command line
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:554
+#, c-format
+msgid "ERROR: Specify package names to install."
+msgstr ""
+
+#. TRANSLATORS: we are getting the list of repositories
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:590
+#, c-format
+msgid "Getting sources list"
+msgstr ""
+
+#. TRANSLATORS: operation was not successful
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:600
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:675
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:759
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:803
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:870
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:914
+msgid "FAILED."
+msgstr ""
+
+#. TRANSLATORS: all completed 100%
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:615
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:655
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:690
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:774
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:818
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:885
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:929
+#, c-format
+msgid "OK."
+msgstr ""
+
+#. TRANSLATORS: tell the user what we found
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:618
+#, c-format
+msgid "Found %i enabled and %i disabled sources."
+msgstr ""
+
+#. TRANSLATORS: we're finding repositories that match out pattern
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:625
+#, c-format
+msgid "Finding debugging sources"
+msgstr ""
+
+#. TRANSLATORS: tell the user what we found
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:658
+#, c-format
+msgid "Found %i disabled debuginfo repos."
+msgstr ""
+
+#. TRANSLATORS: we're now enabling all the debug sources we found
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:665
+#, c-format
+msgid "Enabling debugging sources"
+msgstr ""
+
+#. TRANSLATORS: tell the user how many we enabled
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:693
+#, c-format
+msgid "Enabled %i debugging sources."
+msgstr ""
+
+#. TRANSLATORS: we're now finding packages that match in all the repos
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:700
+#, c-format
+msgid "Finding debugging packages"
+msgstr ""
+
+#. TRANSLATORS: we couldn't find the package name, non-fatal
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:712
+#, c-format
+msgid "Failed to find the package %s: %s"
+msgstr ""
+
+#. TRANSLATORS: we couldn't find the debuginfo package name, non-fatal
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:735
+#, c-format
+msgid "Failed to find the debuginfo package %s: %s"
+msgstr ""
+
+#. TRANSLATORS: no debuginfo packages could be found to be installed
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:763
+#, c-format
+msgid "Found no packages to install."
+msgstr ""
+
+#. TRANSLATORS: tell the user we found some packages, and then list them
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:777
+#, c-format
+msgid "Found %i packages:"
+msgstr ""
+
+#. TRANSLATORS: tell the user we are searching for deps
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:793
+#, c-format
+msgid "Finding packages that depend on these packages"
+msgstr ""
+
+#. TRANSLATORS: could not install, detailed error follows
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:806
+#, c-format
+msgid "Could not find dependant packages: %s"
+msgstr ""
+
+#. TRANSLATORS: tell the user we found some more packages
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:822
+#, c-format
+msgid "Found %i extra packages."
+msgstr ""
+
+#. TRANSLATORS: tell the user we found some more packages
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:826
+#, c-format
+msgid "No extra packages required."
+msgstr ""
+
+#. TRANSLATORS: tell the user we found some packages (and deps), and then list
+#. them
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:835
+#, c-format
+msgid "Found %i packages to install:"
+msgstr ""
+
+#. TRANSLATORS: simulate mode is a testing mode where we quit before the
+#. action
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:848
+#, c-format
+msgid "Not installing packages in simulate mode"
+msgstr ""
+
+#. TRANSLATORS: we are now installing the debuginfo packages we found earlier
+#. TRANSLATORS: transaction state, installing packages
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:860
+#: ../lib/packagekit-glib2/pk-console-shared.c:287
+#, c-format
+msgid "Installing packages"
+msgstr ""
+
+#. TRANSLATORS: could not install, detailed error follows
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:873
+#, c-format
+msgid "Could not install packages: %s"
+msgstr ""
+
+#. TRANSLATORS: we are now disabling all debuginfo repos we previously enabled
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:905
+#, c-format
+msgid "Disabling sources previously enabled"
+msgstr ""
+
+#. TRANSLATORS: no debuginfo packages could be found to be installed, detailed
+#. error follows
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:917
+#, c-format
+msgid "Could not disable the debugging sources: %s"
+msgstr ""
+
+#. TRANSLATORS: we disabled all the debugging repos that we enabled before
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:932
+#, c-format
+msgid "Disabled %i debugging sources."
+msgstr ""
+
+#. TRANSLATORS: couldn't open device to write
+#: ../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:71
+msgid "Failed to write to the file"
+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 ""
+
+#. TRANSLATORS: the device could not be found in sysfs
+#: ../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:203
+msgid "Failed to unregister driver"
+msgstr ""
+
+#. TRANSLATORS: we failed to bind the old driver
+#: ../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:261
+msgid "Device path not found"
+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 ""
+
+#: ../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: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: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:315
+msgid "PackageKit Device Reloader"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. TRANSLATORS: we're going to verify the path first
+#: ../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:347
+msgid "Failed to verify device path"
+msgstr ""
+
+#. TRANSLATORS: we're going to try
+#: ../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:366
+msgid "Failed to rebind device"
+msgstr ""
+
+#: ../data/packagekit-catalog.xml.in.h:1
+msgid "PackageKit Catalog"
+msgstr ""
+
+#: ../data/packagekit-package-list.xml.in.h:1
+msgid "PackageKit Package List"
+msgstr ""
+
+#: ../data/packagekit-servicepack.xml.in.h:1
+msgid "PackageKit Service Pack"
+msgstr ""
+
+#: ../lib/packagekit-glib2/pk-console-shared.c:63
+#, 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:189
+msgid "More than one package matches:"
+msgstr ""
+
+#. TRANSLATORS: This finds out which package in the list to use
+#: ../lib/packagekit-glib2/pk-console-shared.c:200
+msgid "Please choose the correct package: "
+msgstr ""
+
+#. TRANSLATORS: This is when the transaction status is not known
+#: ../lib/packagekit-glib2/pk-console-shared.c:255
+msgid "Unknown state"
+msgstr ""
+
+#. TRANSLATORS: transaction state, the daemon is in the process of starting
+#: ../lib/packagekit-glib2/pk-console-shared.c:259
+msgid "Starting"
+msgstr ""
+
+#. TRANSLATORS: transaction state, the transaction is waiting for another to
+#. complete
+#: ../lib/packagekit-glib2/pk-console-shared.c:263
+msgid "Waiting in queue"
+msgstr ""
+
+#. TRANSLATORS: transaction state, just started
+#: ../lib/packagekit-glib2/pk-console-shared.c:267
+msgid "Running"
+msgstr ""
+
+#. TRANSLATORS: transaction state, is querying data
+#: ../lib/packagekit-glib2/pk-console-shared.c:271
+msgid "Querying"
+msgstr ""
+
+#. TRANSLATORS: transaction state, getting data from a server
+#: ../lib/packagekit-glib2/pk-console-shared.c:275
+msgid "Getting information"
+msgstr ""
+
+#. TRANSLATORS: transaction state, removing packages
+#: ../lib/packagekit-glib2/pk-console-shared.c:279
+msgid "Removing packages"
+msgstr ""
+
+#. TRANSLATORS: transaction state, downloading package files
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:283
+#: ../lib/packagekit-glib2/pk-console-shared.c:661
+msgid "Downloading packages"
+msgstr ""
+
+#. TRANSLATORS: transaction state, refreshing internal lists
+#: ../lib/packagekit-glib2/pk-console-shared.c:291
+msgid "Refreshing software list"
+msgstr ""
+
+#. TRANSLATORS: transaction state, installing updates
+#: ../lib/packagekit-glib2/pk-console-shared.c:295
+msgid "Installing updates"
+msgstr ""
+
+#. TRANSLATORS: transaction state, removing old packages, and cleaning config
+#. files
+#: ../lib/packagekit-glib2/pk-console-shared.c:299
+msgid "Cleaning up packages"
+msgstr ""
+
+#. TRANSLATORS: transaction state, obsoleting old packages
+#: ../lib/packagekit-glib2/pk-console-shared.c:303
+msgid "Obsoleting packages"
+msgstr ""
+
+#. TRANSLATORS: transaction state, checking the transaction before we do it
+#: ../lib/packagekit-glib2/pk-console-shared.c:307
+msgid "Resolving dependencies"
+msgstr ""
+
+#. TRANSLATORS: transaction state, checking if we have all the security keys
+#. for the operation
+#: ../lib/packagekit-glib2/pk-console-shared.c:311
+msgid "Checking signatures"
+msgstr ""
+
+#. TRANSLATORS: transaction state, when we return to a previous system state
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:315
+#: ../lib/packagekit-glib2/pk-console-shared.c:621
+msgid "Rolling back"
+msgstr ""
+
+#. TRANSLATORS: transaction state, when we're doing a test transaction
+#: ../lib/packagekit-glib2/pk-console-shared.c:319
+msgid "Testing changes"
+msgstr ""
+
+#. TRANSLATORS: transaction state, when we're writing to the system package
+#. database
+#: ../lib/packagekit-glib2/pk-console-shared.c:323
+msgid "Committing changes"
+msgstr ""
+
+#. TRANSLATORS: transaction state, requesting data from a server
+#: ../lib/packagekit-glib2/pk-console-shared.c:327
+msgid "Requesting data"
+msgstr ""
+
+#. TRANSLATORS: transaction state, all done!
+#: ../lib/packagekit-glib2/pk-console-shared.c:331
+msgid "Finished"
+msgstr ""
+
+#. TRANSLATORS: transaction state, in the process of cancelling
+#: ../lib/packagekit-glib2/pk-console-shared.c:335
+msgid "Cancelling"
+msgstr ""
+
+#. TRANSLATORS: transaction state, downloading metadata
+#: ../lib/packagekit-glib2/pk-console-shared.c:339
+msgid "Downloading repository information"
+msgstr ""
+
+#. TRANSLATORS: transaction state, downloading metadata
+#: ../lib/packagekit-glib2/pk-console-shared.c:343
+msgid "Downloading list of packages"
+msgstr ""
+
+#. TRANSLATORS: transaction state, downloading metadata
+#: ../lib/packagekit-glib2/pk-console-shared.c:347
+msgid "Downloading file lists"
+msgstr ""
+
+#. TRANSLATORS: transaction state, downloading metadata
+#: ../lib/packagekit-glib2/pk-console-shared.c:351
+msgid "Downloading lists of changes"
+msgstr ""
+
+#. TRANSLATORS: transaction state, downloading metadata
+#: ../lib/packagekit-glib2/pk-console-shared.c:355
+msgid "Downloading groups"
+msgstr ""
+
+#. TRANSLATORS: transaction state, downloading metadata
+#: ../lib/packagekit-glib2/pk-console-shared.c:359
+msgid "Downloading update information"
+msgstr ""
+
+#. TRANSLATORS: transaction state, repackaging delta files
+#: ../lib/packagekit-glib2/pk-console-shared.c:363
+msgid "Repackaging files"
+msgstr ""
+
+#. TRANSLATORS: transaction state, loading databases
+#: ../lib/packagekit-glib2/pk-console-shared.c:367
+msgid "Loading cache"
+msgstr ""
+
+#. TRANSLATORS: transaction state, scanning for running processes
+#: ../lib/packagekit-glib2/pk-console-shared.c:371
+msgid "Scanning applications"
+msgstr ""
+
+#. TRANSLATORS: transaction state, generating a list of packages installed on
+#. the system
+#: ../lib/packagekit-glib2/pk-console-shared.c:375
+msgid "Generating package lists"
+msgstr ""
+
+#. TRANSLATORS: transaction state, when we're waiting for the native tools to
+#. exit
+#: ../lib/packagekit-glib2/pk-console-shared.c:379
+msgid "Waiting for package manager lock"
+msgstr ""
+
+#. TRANSLATORS: transaction state, waiting for user to type in a password
+#: ../lib/packagekit-glib2/pk-console-shared.c:383
+msgid "Waiting for authentication"
+msgstr ""
+
+#. TRANSLATORS: transaction state, we are updating the list of processes
+#: ../lib/packagekit-glib2/pk-console-shared.c:387
+msgid "Updating running applications"
+msgstr ""
+
+#. TRANSLATORS: transaction state, we are checking executable files currently
+#. in use
+#: ../lib/packagekit-glib2/pk-console-shared.c:391
+msgid "Checking applications in use"
+msgstr ""
+
+#. TRANSLATORS: transaction state, we are checking for libraries currently in
+#. use
+#: ../lib/packagekit-glib2/pk-console-shared.c:395
+msgid "Checking libraries in use"
+msgstr ""
+
+#. TRANSLATORS: transaction state, we are copying package files before or
+#. after the transaction
+#: ../lib/packagekit-glib2/pk-console-shared.c:399
+msgid "Copying files"
+msgstr ""
+
+#. TRANSLATORS: The type of update
+#: ../lib/packagekit-glib2/pk-console-shared.c:417
+msgid "Trivial"
+msgstr ""
+
+#. TRANSLATORS: The type of update
+#: ../lib/packagekit-glib2/pk-console-shared.c:421
+msgid "Normal"
+msgstr ""
+
+#. TRANSLATORS: The type of update
+#: ../lib/packagekit-glib2/pk-console-shared.c:425
+msgid "Important"
+msgstr ""
+
+#. TRANSLATORS: The type of update
+#: ../lib/packagekit-glib2/pk-console-shared.c:429
+msgid "Security"
+msgstr ""
+
+#. TRANSLATORS: The type of update
+#: ../lib/packagekit-glib2/pk-console-shared.c:433
+msgid "Bug fix "
+msgstr ""
+
+#. TRANSLATORS: The type of update
+#: ../lib/packagekit-glib2/pk-console-shared.c:437
+msgid "Enhancement"
+msgstr ""
+
+#. TRANSLATORS: The type of update
+#: ../lib/packagekit-glib2/pk-console-shared.c:441
+msgid "Blocked"
+msgstr ""
+
+#. TRANSLATORS: The state of a package
+#. TRANSLATORS: The action of the package, in past tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:446
+#: ../lib/packagekit-glib2/pk-console-shared.c:519
+msgid "Installed"
+msgstr ""
+
+#. TRANSLATORS: The state of a package, i.e. not installed
+#: ../lib/packagekit-glib2/pk-console-shared.c:451
+msgid "Available"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:469
+msgid "Downloading"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:473
+msgid "Updating"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in present tense
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:477
+#: ../lib/packagekit-glib2/pk-console-shared.c:597
+msgid "Installing"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in present tense
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:481
+#: ../lib/packagekit-glib2/pk-console-shared.c:593
+msgid "Removing"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:485
+msgid "Cleaning up"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:489
+msgid "Obsoleting"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:493
+msgid "Reinstalling"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in past tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:511
+msgid "Downloaded"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in past tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:523
+msgid "Removed"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in past tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:527
+msgid "Cleaned up"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in past tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:531
+msgid "Obsoleted"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in past tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:535
+msgid "Reinstalled"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:553
+msgid "Unknown role type"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:557
+msgid "Getting dependencies"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:561
+msgid "Getting update details"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:565
+msgid "Getting details"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:569
+msgid "Getting requires"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:573
+msgid "Getting updates"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:577
+msgid "Searching by details"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:581
+msgid "Searching by file"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:585
+msgid "Searching groups"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:589
+msgid "Searching by name"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:601
+msgid "Installing files"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:605
+msgid "Refreshing cache"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:609
+msgid "Updating packages"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:613
+msgid "Updating system"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:617
+msgid "Canceling"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:625
+msgid "Getting repositories"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:629
+msgid "Enabling repository"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:633
+msgid "Setting data"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:637
+msgid "Resolving"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:641
+msgid "Getting file list"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:645
+msgid "Getting provides"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:649
+msgid "Installing signature"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:653
+msgid "Getting packages"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:657
+msgid "Accepting EULA"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:665
+msgid "Getting upgrades"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:669
+msgid "Getting categories"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:673
+msgid "Getting transactions"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:677
+#: ../lib/packagekit-glib2/pk-console-shared.c:681
+msgid "Simulating install"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:685
+msgid "Simulating remove"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:689
+msgid "Simulating update"
+msgstr ""
+
+#. TRANSLATORS: turn on all debugging
+#: ../lib/packagekit-glib2/pk-debug.c:133
+msgid "Show debugging information for all files"
+msgstr ""
+
+#: ../lib/packagekit-glib2/pk-debug.c:201
+msgid "Debugging Options"
+msgstr ""
+
+#: ../lib/packagekit-glib2/pk-debug.c:201
+msgid "Show debugging options"
+msgstr ""
+
+#. TRANSLATORS: ask the user if they are comfortable installing insecure
+#. packages
+#: ../lib/packagekit-glib2/pk-task-text.c:67
+msgid "Do you want to allow installing of unsigned software?"
+msgstr ""
+
+#. TRANSLATORS: tell the user we've not done anything
+#: ../lib/packagekit-glib2/pk-task-text.c:72
+msgid "The unsigned software will not be installed."
+msgstr ""
+
+#. TRANSLATORS: the package repository is signed by a key that is not
+#. recognised
+#: ../lib/packagekit-glib2/pk-task-text.c:121
+msgid "Software source signature required"
+msgstr ""
+
+#. TRANSLATORS: the package repository name
+#: ../lib/packagekit-glib2/pk-task-text.c:127
+msgid "Software source name"
+msgstr ""
+
+#. TRANSLATORS: the key URL
+#: ../lib/packagekit-glib2/pk-task-text.c:130
+msgid "Key URL"
+msgstr ""
+
+#. TRANSLATORS: the username of the key
+#: ../lib/packagekit-glib2/pk-task-text.c:133
+msgid "Key user"
+msgstr ""
+
+#. TRANSLATORS: the key ID, usually a few hex digits
+#: ../lib/packagekit-glib2/pk-task-text.c:136
+msgid "Key ID"
+msgstr ""
+
+#. TRANSLATORS: the key fingerprint, again, yet more hex
+#: ../lib/packagekit-glib2/pk-task-text.c:139
+msgid "Key fingerprint"
+msgstr ""
+
+#. TRANSLATORS: the timestamp (a bit like a machine readable time)
+#: ../lib/packagekit-glib2/pk-task-text.c:142
+msgid "Key Timestamp"
+msgstr ""
+
+#. TRANSLATORS: ask the user if they want to import
+#: ../lib/packagekit-glib2/pk-task-text.c:155
+msgid "Do you accept this signature?"
+msgstr ""
+
+#. TRANSLATORS: tell the user we've not done anything
+#: ../lib/packagekit-glib2/pk-task-text.c:160
+msgid "The signature was not accepted."
+msgstr ""
+
+#. TRANSLATORS: this is another name for a software licence that has to be
+#. read before installing
+#: ../lib/packagekit-glib2/pk-task-text.c:203
+msgid "End user licence agreement required"
+msgstr ""
+
+#. TRANSLATORS: the EULA text itself (long and boring)
+#: ../lib/packagekit-glib2/pk-task-text.c:212
+msgid "Agreement"
+msgstr ""
+
+#. TRANSLATORS: ask the user if they've read and accepted the EULA
+#: ../lib/packagekit-glib2/pk-task-text.c:221
+msgid "Do you accept this agreement?"
+msgstr ""
+
+#. TRANSLATORS: tell the user we've not done anything
+#: ../lib/packagekit-glib2/pk-task-text.c:226
+msgid "The agreement was not accepted."
+msgstr ""
+
+#. TRANSLATORS: the user needs to change media inserted into the computer
+#: ../lib/packagekit-glib2/pk-task-text.c:265
+msgid "Media change required"
+msgstr ""
+
+#. TRANSLATORS: the type, e.g. DVD, CD, etc
+#: ../lib/packagekit-glib2/pk-task-text.c:268
+msgid "Media type"
+msgstr ""
+
+#. TRANSLATORS: the media label, usually like 'disk-1of3'
+#: ../lib/packagekit-glib2/pk-task-text.c:271
+msgid "Media label"
+msgstr ""
+
+#. TRANSLATORS: the media description, usually like 'Fedora 12 disk 5'
+#: ../lib/packagekit-glib2/pk-task-text.c:274
+msgid "Text"
+msgstr ""
+
+#. TRANSLATORS: ask the user to insert the media
+#: ../lib/packagekit-glib2/pk-task-text.c:280
+msgid "Please insert the correct media"
+msgstr ""
+
+#. TRANSLATORS: tell the user we've not done anything as they are lazy
+#: ../lib/packagekit-glib2/pk-task-text.c:285
+msgid "The correct media was not inserted."
+msgstr ""
+
+#. TRANSLATORS: When processing, we might have to remove other dependencies
+#: ../lib/packagekit-glib2/pk-task-text.c:300
+msgid "The following packages have to be removed:"
+msgstr ""
+
+#. TRANSLATORS: When processing, we might have to install other dependencies
+#: ../lib/packagekit-glib2/pk-task-text.c:305
+msgid "The following packages have to be installed:"
+msgstr ""
+
+#. TRANSLATORS: When processing, we might have to update other dependencies
+#: ../lib/packagekit-glib2/pk-task-text.c:310
+msgid "The following packages have to be updated:"
+msgstr ""
+
+#. TRANSLATORS: When processing, we might have to reinstall other dependencies
+#: ../lib/packagekit-glib2/pk-task-text.c:315
+msgid "The following packages have to be reinstalled:"
+msgstr ""
+
+#. TRANSLATORS: When processing, we might have to downgrade other dependencies
+#: ../lib/packagekit-glib2/pk-task-text.c:320
+msgid "The following packages have to be downgraded:"
+msgstr ""
+
+#. TRANSLATORS: ask the user if the proposed changes are okay
+#: ../lib/packagekit-glib2/pk-task-text.c:380
+msgid "Proceed with changes?"
+msgstr ""
+
+#. TRANSLATORS: tell the user we didn't do anything
+#: ../lib/packagekit-glib2/pk-task-text.c:385
+msgid "The transaction did not proceed."
+msgstr ""
+
+#. SECURITY:
+#. - Normal users do not require admin authentication to accept new
+#. licence agreements.
+#. - Change this to 'auth_admin' for environments where users should not
+#. be given the option to make legal decisions.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:7
+msgid "Accept EULA"
+msgstr ""
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h: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"
+msgstr ""
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:10
+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:13
+msgid "Authentication is required to install a signed package"
+msgstr ""
+
+#: ../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:15
+msgid "Authentication is required to refresh the system sources"
+msgstr ""
+
+#: ../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:17
+msgid "Authentication is required to remove packages"
+msgstr ""
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:18
+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 ""
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:21
+msgid "Authentication is required to upgrade the operating system"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users are allowed to cancel their own task without
+#. authentication, but a different user id needs the admin password
+#. to cancel another users task.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:27
+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:34
+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:40
+msgid "Change software source parameters"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users do not need authentication to install signed packages
+#. from signed repositories, as this cannot exploit a system.
+#. - Paranoid users (or parents!) can change this to 'auth_admin' or
+#. 'auth_admin_keep'.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:47
+msgid "Install signed package"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users require admin authentication to install untrusted or
+#. unrecognised packages, as allowing users to do this without a
+#. password would be a massive security hole.
+#. - This is not retained as each package should be authenticated.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:54
+msgid "Install untrusted local file"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users do not require admin authentication to refresh the
+#. cache, as this doesn't actually install or remove software.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:59
+msgid "Refresh system sources"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users require admin authentication to rebind a driver
+#. so that it works after we install firmware.
+#. - This should not be set to 'yes' as unprivileged users could then
+#. try to rebind drivers in use, for instance security authentication
+#. devices.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:67
+msgid "Reload a device"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users require admin authentication to remove packages as
+#. this can make the system unbootable or stop other applications from
+#. working.
+#. - Be sure to close the tool used to remove the packages after the
+#. admin authentication has been obtained, otherwise packages can still
+#. be removed. If this is not possible, change this authentication to
+#. 'auth_admin'.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:77
+msgid "Remove package"
+msgstr ""
+
+#. 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:83
+msgid "Rollback to a previous transaction"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users do not require admin authentication to set the proxy
+#. used for downloading packages.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:88
+msgid "Set network proxy"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users require admin authentication to add signing keys.
+#. - This implies adding an explicit trust, and should not be granted
+#. without a secure authentication.
+#. - This is not kept as each package should be authenticated.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:95
+msgid "Trust a key used for signing packages"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users do not require admin authentication to update the
+#. system as the packages will be signed, and the action is required
+#. to update the system when unattended.
+#. - Changing this to anything other than 'yes' will break unattended
+#. updates.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:103
+msgid "Update packages"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users require admin authentication to upgrade the disto as
+#. this can make the system unbootable or stop other applications from
+#. working.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:109
+msgid "Upgrade System"
+msgstr ""
+
+#. TRANSLATORS: failed due to DBus security
+#: ../src/pk-main.c:87
+msgid "Startup failed due to security policies on this machine."
+msgstr ""
+
+#. TRANSLATORS: only two ways this can fail...
+#: ../src/pk-main.c:89
+msgid "This can happen for two reasons:"
+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 ""
+
+#. 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 ""
+
+#. TRANSLATORS: a backend is the system package tool, e.g. yum, apt
+#: ../src/pk-main.c:200
+msgid "Packaging backend to use, e.g. dummy"
+msgstr ""
+
+#. TRANSLATORS: if we should run in the background
+#: ../src/pk-main.c:203
+msgid "Daemonize and detach from the terminal"
+msgstr ""
+
+#. TRANSLATORS: if we should not monitor how long we are inactive for
+#: ../src/pk-main.c:206
+msgid "Disable the idle timer"
+msgstr ""
+
+#. TRANSLATORS: show version
+#: ../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:212
+msgid "Exit after a small delay"
+msgstr ""
+
+#. TRANSLATORS: exit straight away, used for automatic profiling
+#: ../src/pk-main.c:215
+msgid "Exit after the engine has loaded"
+msgstr ""
+
+#. TRANSLATORS: describing the service that is running
+#: ../src/pk-main.c:230
+msgid "PackageKit service"
+msgstr ""
+
+#. TRANSLATORS: fatal error, dbus is not running
+#: ../src/pk-main.c:267
+msgid "Cannot connect to the system bus"
+msgstr ""
+
+#. TRANSLATORS: cannot register on system bus, unknown reason -- geeky error
+#. follows
+#: ../src/pk-main.c:316
+msgid "Error trying to start:"
+msgstr ""
+
+#: ../src/pk-polkit-action-lookup.c:150
+msgid "To install debugging packages, extra sources need to be enabled"
+msgstr ""
+
+#. 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 ""
+
+#: ../src/pk-polkit-action-lookup.c:176
+msgid "Do not update this package unless you are sure it is safe to do so."
+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 ""
+
+#: ../src/pk-polkit-action-lookup.c:195
+msgid "Do not install this package unless you are sure it is safe to do so."
+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 ""
+
+#. TRANSLATORS: too many packages to list each one
+#: ../src/pk-polkit-action-lookup.c:273
+msgid "Many packages"
+msgstr ""
+
+#. TRANSLATORS: if the transaction is forced to install only trusted packages
+#: ../src/pk-polkit-action-lookup.c:339
+msgid "Only trusted"
+msgstr ""
diff --git a/po/bn_IN.po b/po/bn_IN.po
index d28ee8f..aad1da6 100644
--- a/po/bn_IN.po
+++ b/po/bn_IN.po
@@ -8,9 +8,9 @@ msgstr ""
 "Project-Id-Version: PackageKit\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2010-12-13 12:23+0000\n"
-"PO-Revision-Date: 2011-03-04 18:34+0000\n"
+"PO-Revision-Date: 2011-03-22 15:37+0000\n"
 "Last-Translator: hughsie <richard at hughsie.com>\n"
-"Language-Team: LANGUAGE <LL at li.org>\n"
+"Language-Team: Bengali (India) (http://www.transifex.net/projects/p/freedesktop/team/bn_IN/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
diff --git a/po/ca.po b/po/ca.po
index d0d1ec1..7ca1cab 100644
--- a/po/ca.po
+++ b/po/ca.po
@@ -8,9 +8,9 @@ msgstr ""
 "Project-Id-Version: PackageKit\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2010-12-13 12:23+0000\n"
-"PO-Revision-Date: 2011-03-04 18:34+0000\n"
+"PO-Revision-Date: 2011-03-22 15:37+0000\n"
 "Last-Translator: hughsie <richard at hughsie.com>\n"
-"Language-Team: LANGUAGE <LL at li.org>\n"
+"Language-Team: Catalan (http://www.transifex.net/projects/p/freedesktop/team/ca/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
diff --git a/po/ca at valencia.po b/po/ca at valencia.po
new file mode 100644
index 0000000..5484dc9
--- /dev/null
+++ b/po/ca at valencia.po
@@ -0,0 +1,2098 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL at ADDRESS>, YEAR.
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: PackageKit\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-12-13 12:23+0000\n"
+"PO-Revision-Date: 2011-05-04 09:48+0000\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Language-Team: Catalan (Valencian) (http://www.transifex.net/projects/p/freedesktop/team/ca@valencia/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ca at valencia\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#. TRANSLATORS: this is an atomic transaction
+#. TRANSLATORS: the role is the point of the transaction, e.g. update-system
+#: ../client/pk-console.c:174 ../client/pk-console.c:596
+msgid "Transaction"
+msgstr ""
+
+#. TRANSLATORS: this is the time the transaction was started in system
+#. timezone
+#: ../client/pk-console.c:176
+msgid "System time"
+msgstr ""
+
+#. TRANSLATORS: this is if the transaction succeeded or not
+#: ../client/pk-console.c:178
+msgid "Succeeded"
+msgstr ""
+
+#: ../client/pk-console.c:178
+msgid "True"
+msgstr ""
+
+#: ../client/pk-console.c:178
+msgid "False"
+msgstr ""
+
+#. TRANSLATORS: this is the transactions role, e.g. "update-system"
+#. TRANSLATORS: the trasaction role, e.g. update-system
+#: ../client/pk-console.c:180 ../src/pk-polkit-action-lookup.c:332
+msgid "Role"
+msgstr ""
+
+#. TRANSLATORS: this is The duration of the transaction
+#: ../client/pk-console.c:185
+msgid "Duration"
+msgstr ""
+
+#: ../client/pk-console.c:185
+msgid "(seconds)"
+msgstr ""
+
+#. TRANSLATORS: this is The command line used to do the action
+#. TRANSLATORS: the command line of the thing that wants the authentication
+#: ../client/pk-console.c:189 ../src/pk-polkit-action-lookup.c:346
+msgid "Command line"
+msgstr ""
+
+#. TRANSLATORS: this is the user ID of the user that started the action
+#: ../client/pk-console.c:191
+msgid "User ID"
+msgstr ""
+
+#. TRANSLATORS: this is the username, e.g. hughsie
+#: ../client/pk-console.c:198
+msgid "Username"
+msgstr ""
+
+#. TRANSLATORS: this is the users real name, e.g. "Richard Hughes"
+#: ../client/pk-console.c:202
+msgid "Real name"
+msgstr ""
+
+#: ../client/pk-console.c:210
+msgid "Affected packages:"
+msgstr ""
+
+#: ../client/pk-console.c:212
+msgid "Affected packages: None"
+msgstr ""
+
+#. TRANSLATORS: this is the distro, e.g. Fedora 10
+#: ../client/pk-console.c:247
+msgid "Distribution"
+msgstr ""
+
+#. TRANSLATORS: this is type of update, stable or testing
+#: ../client/pk-console.c:249
+msgid "Type"
+msgstr ""
+
+#. TRANSLATORS: this is any summary text describing the upgrade
+#. TRANSLATORS: this is the summary of the group
+#: ../client/pk-console.c:251 ../client/pk-console.c:290
+msgid "Summary"
+msgstr ""
+
+#. TRANSLATORS: this is the group category name
+#: ../client/pk-console.c:279
+msgid "Category"
+msgstr ""
+
+#. TRANSLATORS: this is group identifier
+#: ../client/pk-console.c:281
+msgid "ID"
+msgstr ""
+
+#. TRANSLATORS: this is the parent group
+#: ../client/pk-console.c:284
+msgid "Parent"
+msgstr ""
+
+#. TRANSLATORS: this is the name of the parent group
+#: ../client/pk-console.c:287
+msgid "Name"
+msgstr ""
+
+#. TRANSLATORS: this is preferred icon for the group
+#: ../client/pk-console.c:293
+msgid "Icon"
+msgstr ""
+
+#. TRANSLATORS: this is a header for the package that can be updated
+#: ../client/pk-console.c:339
+msgid "Details about the update:"
+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:345 ../client/pk-console.c:615
+#: ../lib/packagekit-glib2/pk-task-text.c:124
+#: ../lib/packagekit-glib2/pk-task-text.c:206
+#: ../src/pk-polkit-action-lookup.c:357
+msgid "Package"
+msgid_plural "Packages"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: details about the update, any packages that this update
+#. updates
+#: ../client/pk-console.c:348
+msgid "Updates"
+msgstr ""
+
+#. TRANSLATORS: details about the update, any packages that this update
+#. obsoletes
+#: ../client/pk-console.c:352
+msgid "Obsoletes"
+msgstr ""
+
+#. TRANSLATORS: details about the update, the vendor URLs
+#. TRANSLATORS: the vendor (e.g. vmware) that is providing the EULA
+#: ../client/pk-console.c:356 ../lib/packagekit-glib2/pk-task-text.c:209
+msgid "Vendor"
+msgstr ""
+
+#. TRANSLATORS: details about the update, the bugzilla URLs
+#: ../client/pk-console.c:360
+msgid "Bugzilla"
+msgstr ""
+
+#. TRANSLATORS: details about the update, the CVE URLs
+#: ../client/pk-console.c:364
+msgid "CVE"
+msgstr ""
+
+#. TRANSLATORS: details about the update, if the package requires a restart
+#: ../client/pk-console.c:368
+msgid "Restart"
+msgstr ""
+
+#. TRANSLATORS: details about the update, any description of the update
+#: ../client/pk-console.c:372
+msgid "Update text"
+msgstr ""
+
+#. TRANSLATORS: details about the update, the changelog for the package
+#: ../client/pk-console.c:376
+msgid "Changes"
+msgstr ""
+
+#. TRANSLATORS: details about the update, the ongoing state of the update
+#: ../client/pk-console.c:380
+msgid "State"
+msgstr ""
+
+#. TRANSLATORS: details about the update, date the update was issued
+#: ../client/pk-console.c:384
+msgid "Issued"
+msgstr ""
+
+#. TRANSLATORS: details about the update, date the update was updated
+#. TRANSLATORS: The action of the package, in past tense
+#: ../client/pk-console.c:388 ../lib/packagekit-glib2/pk-console-shared.c:515
+msgid "Updated"
+msgstr ""
+
+#. TRANSLATORS: if the repo is enabled
+#: ../client/pk-console.c:424
+msgid "Enabled"
+msgstr ""
+
+#. TRANSLATORS: if the repo is disabled
+#: ../client/pk-console.c:427
+msgid "Disabled"
+msgstr ""
+
+#. TRANSLATORS: a package requires the system to be restarted
+#: ../client/pk-console.c:459
+msgid "System restart required by:"
+msgstr ""
+
+#. TRANSLATORS: a package requires the session to be restarted
+#: ../client/pk-console.c:462
+msgid "Session restart required:"
+msgstr ""
+
+#. TRANSLATORS: a package requires the system to be restarted due to a
+#. security update
+#: ../client/pk-console.c:465
+msgid "System restart (security) required by:"
+msgstr ""
+
+#. TRANSLATORS: a package requires the session to be restarted due to a
+#. security update
+#: ../client/pk-console.c:468
+msgid "Session restart (security) required:"
+msgstr ""
+
+#. TRANSLATORS: a package requires the application to be restarted
+#: ../client/pk-console.c:471
+msgid "Application restart required by:"
+msgstr ""
+
+#. TRANSLATORS: This a list of details about the package
+#: ../client/pk-console.c:506
+msgid "Package description"
+msgstr ""
+
+#. TRANSLATORS: This a message (like a little note that may be of interest)
+#. from the transaction
+#: ../client/pk-console.c:537
+msgid "Message:"
+msgstr ""
+
+#. TRANSLATORS: This where the package has no files
+#: ../client/pk-console.c:558
+msgid "No files"
+msgstr ""
+
+#. TRANSLATORS: This a list files contained in the package
+#: ../client/pk-console.c:563
+msgid "Package files"
+msgstr ""
+
+#. TRANSLATORS: the percentage complete of the transaction
+#: ../client/pk-console.c:631
+msgid "Percentage"
+msgstr ""
+
+#. TRANSLATORS: the status of the transaction (e.g. downloading)
+#: ../client/pk-console.c:649
+msgid "Status"
+msgstr ""
+
+#. TRANSLATORS: the results from the transaction
+#: ../client/pk-console.c:678
+msgid "Results:"
+msgstr ""
+
+#. TRANSLATORS: we failed to get any results, which is pretty fatal in my book
+#: ../client/pk-console.c:685
+msgid "Fatal error"
+msgstr ""
+
+#. TRANSLATORS: the user asked to update everything, but there is nothing that
+#. can be updated
+#: ../client/pk-console.c:701
+msgid "There are no packages to update."
+msgstr ""
+
+#. TRANSLATORS: the transaction failed in a way we could not expect
+#: ../client/pk-console.c:704
+#: ../contrib/command-not-found/pk-command-not-found.c:639
+msgid "The transaction failed"
+msgstr ""
+
+#. TRANSLATORS: print a message when there are no updates
+#: ../client/pk-console.c:733
+msgid "There are no updates available at this time."
+msgstr ""
+
+#: ../client/pk-console.c:756
+msgid "There are no upgrades available at this time."
+msgstr ""
+
+#. TRANSLATORS: a package needs to restart their system
+#: ../client/pk-console.c:823
+msgid "Please restart the computer to complete the update."
+msgstr ""
+
+#. TRANSLATORS: a package needs to restart the session
+#: ../client/pk-console.c:826
+msgid "Please logout and login to complete the update."
+msgstr ""
+
+#. TRANSLATORS: a package needs to restart their system (due to security)
+#: ../client/pk-console.c:829
+msgid ""
+"Please restart the computer to complete the update as important security "
+"updates have been installed."
+msgstr ""
+
+#. TRANSLATORS: a package needs to restart the session (due to security)
+#: ../client/pk-console.c:832
+msgid ""
+"Please logout and login to complete the update as important security updates"
+" have been installed."
+msgstr ""
+
+#. TRANSLATORS: The user used 'pkcon install dave.rpm' rather than 'pkcon
+#. install-local dave.rpm'
+#: ../client/pk-console.c:858
+#, 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:866
+#, c-format
+msgid "This tool could not find any available package: %s"
+msgstr ""
+
+#. TRANSLATORS: There was an error getting the list of files for the package.
+#. The detailed error follows
+#: ../client/pk-console.c:894
+#, c-format
+msgid "This tool could not find the installed package: %s"
+msgstr ""
+
+#. TRANSLATORS: There was an error getting the list of files for the package.
+#. The detailed error follows
+#: ../client/pk-console.c:922 ../client/pk-console.c:950
+#, c-format
+msgid "This tool could not find the package: %s"
+msgstr ""
+
+#. TRANSLATORS: There was an error getting the list of files for the package.
+#. The detailed error follows
+#. TRANSLATORS: There was an error getting the dependencies for the package.
+#. The detailed error follows
+#. TRANSLATORS: There was an error getting the details about the package. The
+#. detailed error follows
+#. TRANSLATORS: The package name was not found in any software sources. The
+#. detailed error follows
+#: ../client/pk-console.c:978 ../client/pk-console.c:1006
+#: ../client/pk-console.c:1034 ../client/pk-console.c:1062
+#: ../client/pk-console.c:1090
+#, c-format
+msgid "This tool could not find all the packages: %s"
+msgstr ""
+
+#. TRANSLATORS: This is when the daemon crashed, and we are up shit creek
+#. without a paddle
+#: ../client/pk-console.c:1119
+msgid "The daemon crashed mid-transaction!"
+msgstr ""
+
+#. TRANSLATORS: This is the header to the --help menu
+#: ../client/pk-console.c:1153
+msgid "PackageKit Console Interface"
+msgstr ""
+
+#. these are commands we can use with pkcon
+#: ../client/pk-console.c:1155
+msgid "Subcommands:"
+msgstr ""
+
+#. TRANSLATORS: we keep a database updated with the time that an action was
+#. last executed
+#: ../client/pk-console.c:1234
+msgid "Failed to get the time since this action was last completed"
+msgstr ""
+
+#. TRANSLATORS: command line argument, just show the version string
+#: ../client/pk-console.c:1275 ../client/pk-monitor.c:371
+msgid "Show the program version and exit"
+msgstr ""
+
+#. TRANSLATORS: command line argument, use a filter to narrow down results
+#: ../client/pk-console.c:1278
+msgid "Set the filter, e.g. installed"
+msgstr ""
+
+#. TRANSLATORS: command line argument, use a non-standard install prefix
+#: ../client/pk-console.c:1281
+msgid "Set the install root, e.g. '/' or '/mnt/ltsp'"
+msgstr ""
+
+#. TRANSLATORS: command line argument, work asynchronously
+#: ../client/pk-console.c:1284
+msgid "Exit without waiting for actions to complete"
+msgstr ""
+
+#. command line argument, do we ask questions
+#: ../client/pk-console.c:1287
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:525
+msgid "Install the packages without asking for confirmation"
+msgstr ""
+
+#. TRANSLATORS: command line argument, this command is not a priority
+#: ../client/pk-console.c:1290
+msgid "Run the command using idle network bandwidth and also using less power"
+msgstr ""
+
+#. TRANSLATORS: command line argument, just output without fancy formatting
+#: ../client/pk-console.c:1293
+msgid ""
+"Print to screen a machine readable output, rather than using animated "
+"widgets"
+msgstr ""
+
+#. TRANSLATORS: command line argument, just output without fancy formatting
+#: ../client/pk-console.c:1296
+msgid "The maximum metadata cache age. Use -1 for 'never'."
+msgstr ""
+
+#. TRANSLATORS: we failed to contact the daemon
+#: ../client/pk-console.c:1333
+msgid "Failed to contact PackageKit"
+msgstr ""
+
+#. TRANSLATORS: The user specified an incorrect filter
+#: ../client/pk-console.c:1381
+msgid "The proxy could not be set"
+msgstr ""
+
+#. TRANSLATORS: The user specified an incorrect filter
+#: ../client/pk-console.c:1393
+msgid "The install root could not be set"
+msgstr ""
+
+#. TRANSLATORS: The user specified an incorrect filter
+#: ../client/pk-console.c:1405
+msgid "The filter specified was invalid"
+msgstr ""
+
+#. TRANSLATORS: a search type can be name, details, file, etc
+#: ../client/pk-console.c:1424
+msgid "A search type is required, e.g. name"
+msgstr ""
+
+#. TRANSLATORS: the user needs to provide a search term
+#: ../client/pk-console.c:1431 ../client/pk-console.c:1443
+#: ../client/pk-console.c:1455 ../client/pk-console.c:1467
+msgid "A search term is required"
+msgstr ""
+
+#. TRANSLATORS: the search type was provided, but invalid
+#: ../client/pk-console.c:1477
+msgid "Invalid search type"
+msgstr ""
+
+#. TRANSLATORS: the user did not specify what they wanted to install
+#: ../client/pk-console.c:1483
+msgid "A package name to install is required"
+msgstr ""
+
+#. TRANSLATORS: the user did not specify what they wanted to install
+#: ../client/pk-console.c:1492
+msgid "A filename to install is required"
+msgstr ""
+
+#. TRANSLATORS: geeky error, 99.9999% of users won't see this
+#: ../client/pk-console.c:1503
+msgid "A type, key_id and package_id are required"
+msgstr ""
+
+#. TRANSLATORS: the user did not specify what they wanted to remove
+#: ../client/pk-console.c:1514
+msgid "A package name to remove is required"
+msgstr ""
+
+#. TRANSLATORS: the user did not specify anything about what to download or
+#. where
+#: ../client/pk-console.c:1523
+msgid "A destination directory and the package names to download are required"
+msgstr ""
+
+#. TRANSLATORS: the directory does not exist, so we can't continue
+#: ../client/pk-console.c:1530
+msgid "Directory not found"
+msgstr ""
+
+#. TRANSLATORS: geeky error, 99.9999% of users won't see this
+#: ../client/pk-console.c:1539
+msgid "A licence identifier (eula-id) is required"
+msgstr ""
+
+#. TRANSLATORS: geeky error, 99.9999% of users won't see this
+#: ../client/pk-console.c:1550
+msgid "A transaction identifier (tid) is required"
+msgstr ""
+
+#. TRANSLATORS: The user did not specify a package name
+#: ../client/pk-console.c:1571
+msgid "A package name to resolve is required"
+msgstr ""
+
+#. TRANSLATORS: The user did not specify a repository (software source) name
+#: ../client/pk-console.c:1582 ../client/pk-console.c:1593
+msgid "A repository name is required"
+msgstr ""
+
+#. TRANSLATORS: The user didn't provide any data
+#: ../client/pk-console.c:1604
+msgid "A repo name, parameter and value are required"
+msgstr ""
+
+#. TRANSLATORS: The user didn't specify what action to use
+#: ../client/pk-console.c:1621
+msgid "An action, e.g. 'update-system' is required"
+msgstr ""
+
+#. TRANSLATORS: The user specified an invalid action
+#: ../client/pk-console.c:1628
+msgid "A correct role is required"
+msgstr ""
+
+#. TRANSLATORS: The user did not provide a package name
+#. TRANSLATORS: This is when the user fails to supply the package name
+#: ../client/pk-console.c:1638 ../client/pk-console.c:1652
+#: ../client/pk-console.c:1661 ../client/pk-console.c:1681
+#: ../client/pk-console.c:1690 ../client/pk-generate-pack.c:314
+msgid "A package name is required"
+msgstr ""
+
+#. TRANSLATORS: each package "provides" certain things, e.g. mime(gstreamer-
+#. decoder-mp3), the user didn't specify it
+#: ../client/pk-console.c:1670
+msgid "A package provide string is required"
+msgstr ""
+
+#. TRANSLATORS: The user did not provide a distro name
+#: ../client/pk-console.c:1714
+msgid "A distribution name is required"
+msgstr ""
+
+#. TRANSLATORS: The user did not provide an upgrade type
+#: ../client/pk-console.c:1720
+msgid "An upgrade type is required, e.g. 'minimal', 'default' or 'complete'"
+msgstr ""
+
+#. TRANSLATORS: The user tried to use an unsupported option on the command
+#. line
+#: ../client/pk-console.c:1770
+#, c-format
+msgid "Option '%s' is not supported"
+msgstr ""
+
+#. TRANSLATORS: Generic failure of what they asked to do
+#: ../client/pk-console.c:1780
+msgid "Command failed"
+msgstr ""
+
+#. TRANSLATORS: we can exclude certain packages (glibc) when we know they'll
+#. exist on the target
+#: ../client/pk-generate-pack.c:253
+msgid "Set the file name of dependencies to be excluded"
+msgstr ""
+
+#. TRANSLATORS: the output location
+#: ../client/pk-generate-pack.c:256
+msgid ""
+"The output file or directory (the current directory is used if omitted)"
+msgstr ""
+
+#. TRANSLATORS: put a list of packages in the pack
+#: ../client/pk-generate-pack.c:259
+msgid "The package to be put into the service pack"
+msgstr ""
+
+#. TRANSLATORS: put all pending updates in the pack
+#: ../client/pk-generate-pack.c:262
+msgid "Put all updates available in the service pack"
+msgstr ""
+
+#. TRANSLATORS: This is when the user fails to supply the correct arguments
+#: ../client/pk-generate-pack.c:298
+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:306
+msgid "Both options selected."
+msgstr ""
+
+#. TRANSLATORS: This is when the user fails to supply the output
+#: ../client/pk-generate-pack.c:322
+msgid "A output directory or file name is required"
+msgstr ""
+
+#. TRANSLATORS: This is when the daemon is not-installed/broken and fails to
+#. startup
+#: ../client/pk-generate-pack.c:340
+msgid "The daemon failed to startup"
+msgstr ""
+
+#. TRANSLATORS: This is when the backend doesn't have the capability to get-
+#. depends
+#. TRANSLATORS: This is when the backend doesn't have the capability to
+#. download
+#: ../client/pk-generate-pack.c:351 ../client/pk-generate-pack.c:357
+msgid "The package manager cannot perform this type of operation."
+msgstr ""
+
+#. TRANSLATORS: This is when the distro didn't include libarchive support into
+#. PK
+#: ../client/pk-generate-pack.c:364
+msgid ""
+"Service packs cannot be created as PackageKit was not built with libarchive "
+"support."
+msgstr ""
+
+#. TRANSLATORS: the user specified an absolute path, but didn't get the
+#. extension correct
+#: ../client/pk-generate-pack.c:375
+msgid "If specifying a file, the service pack name must end with"
+msgstr ""
+
+#. TRANSLATORS: This is when file already exists
+#: ../client/pk-generate-pack.c:391
+msgid "A pack with the same name already exists, do you want to overwrite it?"
+msgstr ""
+
+#. TRANSLATORS: This is when the pack was not overwritten
+#: ../client/pk-generate-pack.c:394
+msgid "The pack was not overwritten."
+msgstr ""
+
+#. TRANSLATORS: This is when the temporary directory cannot be created, the
+#. directory name follows
+#: ../client/pk-generate-pack.c:407
+msgid "Failed to create directory:"
+msgstr ""
+
+#. TRANSLATORS: This is when the list of packages from the remote computer
+#. cannot be opened
+#: ../client/pk-generate-pack.c:419
+msgid "Failed to open package list."
+msgstr ""
+
+#. TRANSLATORS: The package name is being matched up to available packages
+#: ../client/pk-generate-pack.c:428
+msgid "Finding package name."
+msgstr ""
+
+#. TRANSLATORS: This is when the package cannot be found in any software
+#. source. The detailed error follows
+#: ../client/pk-generate-pack.c:432
+#, 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:440
+msgid "Creating service pack..."
+msgstr ""
+
+#. TRANSLATORS: we succeeded in making the file
+#: ../client/pk-generate-pack.c:455
+#, c-format
+msgid "Service pack created '%s'"
+msgstr ""
+
+#. TRANSLATORS: we failed to make te file
+#: ../client/pk-generate-pack.c:460
+#, c-format
+msgid "Failed to create '%s': %s"
+msgstr ""
+
+#: ../client/pk-monitor.c:284
+msgid "Failed to get daemon state"
+msgstr ""
+
+#: ../client/pk-monitor.c:349
+msgid "Failed to get properties"
+msgstr ""
+
+#. TRANSLATORS: this is a program that monitors PackageKit
+#: ../client/pk-monitor.c:387
+msgid "PackageKit Monitor"
+msgstr ""
+
+#. TRANSLATORS: when we are getting data from the daemon
+#: ../contrib/browser-plugin/pk-plugin-install.c:499
+msgid "Getting package information..."
+msgstr ""
+
+#. TRANSLATORS: run an applicaiton
+#: ../contrib/browser-plugin/pk-plugin-install.c:505
+#, c-format
+msgid "Run %s"
+msgstr ""
+
+#. TRANSLATORS: show the installed version of a package
+#: ../contrib/browser-plugin/pk-plugin-install.c:511
+msgid "Installed version"
+msgstr ""
+
+#. TRANSLATORS: run the application now
+#: ../contrib/browser-plugin/pk-plugin-install.c:519
+#, c-format
+msgid "Run version %s now"
+msgstr ""
+
+#. TRANSLATORS: run the application now
+#: ../contrib/browser-plugin/pk-plugin-install.c:525
+msgid "Run now"
+msgstr ""
+
+#. TRANSLATORS: update to a new version of the package
+#: ../contrib/browser-plugin/pk-plugin-install.c:531
+#, c-format
+msgid "Update to version %s"
+msgstr ""
+
+#. TRANSLATORS: To install a package
+#: ../contrib/browser-plugin/pk-plugin-install.c:537
+#, c-format
+msgid "Install %s now"
+msgstr ""
+
+#. TRANSLATORS: the version of the package
+#: ../contrib/browser-plugin/pk-plugin-install.c:540
+msgid "Version"
+msgstr ""
+
+#. TRANSLATORS: noting found, so can't install
+#: ../contrib/browser-plugin/pk-plugin-install.c:545
+msgid "No packages found for your system"
+msgstr ""
+
+#. TRANSLATORS: package is being installed
+#: ../contrib/browser-plugin/pk-plugin-install.c:550
+msgid "Installing..."
+msgstr ""
+
+#. TRANSLATORS: downloading repo data so we can search
+#: ../contrib/command-not-found/pk-command-not-found.c: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: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: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: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:444
+msgid "Failed to search for file"
+msgstr ""
+
+#. TRANSLATORS: the transaction failed in a way we could not expect
+#: ../contrib/command-not-found/pk-command-not-found.c:456
+msgid "Getting the list of files failed"
+msgstr ""
+
+#. TRANSLATORS: we failed to launch the executable, the error follows
+#: ../contrib/command-not-found/pk-command-not-found.c:602
+msgid "Failed to launch:"
+msgstr ""
+
+#. TRANSLATORS: we failed to install the package
+#: ../contrib/command-not-found/pk-command-not-found.c:630
+msgid "Failed to install packages"
+msgstr ""
+
+#. TRANSLATORS: tool that gets called when the command is not found
+#: ../contrib/command-not-found/pk-command-not-found.c:706
+msgid "PackageKit Command Not Found"
+msgstr ""
+
+#. TRANSLATORS: the prefix of all the output telling the user
+#. * why it's not executing. NOTE: this is lowercase to mimic
+#. * the style of bash itself -- apologies
+#: ../contrib/command-not-found/pk-command-not-found.c:739
+msgid "command not found"
+msgstr ""
+
+#. TRANSLATORS: tell the user what we think the command is
+#: ../contrib/command-not-found/pk-command-not-found.c:757
+msgid "Similar command is:"
+msgstr ""
+
+#. TRANSLATORS: Ask the user if we should run the similar command
+#: ../contrib/command-not-found/pk-command-not-found.c:771
+msgid "Run similar command:"
+msgstr ""
+
+#. TRANSLATORS: show the user a list of commands that they could have meant
+#. TRANSLATORS: show the user a list of commands we could run
+#: ../contrib/command-not-found/pk-command-not-found.c:785
+#: ../contrib/command-not-found/pk-command-not-found.c:794
+msgid "Similar commands are:"
+msgstr ""
+
+#. TRANSLATORS: ask the user to choose a file to run
+#: ../contrib/command-not-found/pk-command-not-found.c:801
+msgid "Please choose a command to run"
+msgstr ""
+
+#. TRANSLATORS: tell the user what package provides the command
+#: ../contrib/command-not-found/pk-command-not-found.c:819
+msgid "The package providing this file is:"
+msgstr ""
+
+#. TRANSLATORS: as the user if we want to install a package to provide the
+#. command
+#: ../contrib/command-not-found/pk-command-not-found.c:826
+#, 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:853
+msgid "Packages providing this file are:"
+msgstr ""
+
+#. TRANSLATORS: Show the user a list of packages that they can install to
+#. provide this command
+#: ../contrib/command-not-found/pk-command-not-found.c:863
+msgid "Suitable packages are:"
+msgstr ""
+
+#. get selection
+#. TRANSLATORS: ask the user to choose a file to install
+#: ../contrib/command-not-found/pk-command-not-found.c:872
+msgid "Please choose a package to install"
+msgstr ""
+
+#. TRANSLATORS: we are starting to install the packages
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:195
+msgid "Starting install"
+msgstr ""
+
+#. TRANSLATORS: we couldn't find the package name, non-fatal
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:407
+#, c-format
+msgid "Failed to find the package %s, or already installed: %s"
+msgstr ""
+
+#. command line argument, simulate what would be done, but don't actually do
+#. it
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:516
+msgid ""
+"Don't actually install any packages, only simulate what would be installed"
+msgstr ""
+
+#. command line argument, do we skip packages that depend on the ones
+#. specified
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:519
+msgid "Do not install dependencies of the core packages"
+msgstr ""
+
+#. command line argument, do we operate quietly
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:522
+msgid "Do not display information or progress"
+msgstr ""
+
+#. TRANSLATORS: tool that gets called when the command is not found
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:540
+msgid "PackageKit Debuginfo Installer"
+msgstr ""
+
+#. TRANSLATORS: the use needs to specify a list of package names on the
+#. command line
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:554
+#, c-format
+msgid "ERROR: Specify package names to install."
+msgstr ""
+
+#. TRANSLATORS: we are getting the list of repositories
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:590
+#, c-format
+msgid "Getting sources list"
+msgstr ""
+
+#. TRANSLATORS: operation was not successful
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:600
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:675
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:759
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:803
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:870
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:914
+msgid "FAILED."
+msgstr ""
+
+#. TRANSLATORS: all completed 100%
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:615
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:655
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:690
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:774
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:818
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:885
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:929
+#, c-format
+msgid "OK."
+msgstr ""
+
+#. TRANSLATORS: tell the user what we found
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:618
+#, c-format
+msgid "Found %i enabled and %i disabled sources."
+msgstr ""
+
+#. TRANSLATORS: we're finding repositories that match out pattern
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:625
+#, c-format
+msgid "Finding debugging sources"
+msgstr ""
+
+#. TRANSLATORS: tell the user what we found
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:658
+#, c-format
+msgid "Found %i disabled debuginfo repos."
+msgstr ""
+
+#. TRANSLATORS: we're now enabling all the debug sources we found
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:665
+#, c-format
+msgid "Enabling debugging sources"
+msgstr ""
+
+#. TRANSLATORS: tell the user how many we enabled
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:693
+#, c-format
+msgid "Enabled %i debugging sources."
+msgstr ""
+
+#. TRANSLATORS: we're now finding packages that match in all the repos
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:700
+#, c-format
+msgid "Finding debugging packages"
+msgstr ""
+
+#. TRANSLATORS: we couldn't find the package name, non-fatal
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:712
+#, c-format
+msgid "Failed to find the package %s: %s"
+msgstr ""
+
+#. TRANSLATORS: we couldn't find the debuginfo package name, non-fatal
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:735
+#, c-format
+msgid "Failed to find the debuginfo package %s: %s"
+msgstr ""
+
+#. TRANSLATORS: no debuginfo packages could be found to be installed
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:763
+#, c-format
+msgid "Found no packages to install."
+msgstr ""
+
+#. TRANSLATORS: tell the user we found some packages, and then list them
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:777
+#, c-format
+msgid "Found %i packages:"
+msgstr ""
+
+#. TRANSLATORS: tell the user we are searching for deps
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:793
+#, c-format
+msgid "Finding packages that depend on these packages"
+msgstr ""
+
+#. TRANSLATORS: could not install, detailed error follows
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:806
+#, c-format
+msgid "Could not find dependant packages: %s"
+msgstr ""
+
+#. TRANSLATORS: tell the user we found some more packages
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:822
+#, c-format
+msgid "Found %i extra packages."
+msgstr ""
+
+#. TRANSLATORS: tell the user we found some more packages
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:826
+#, c-format
+msgid "No extra packages required."
+msgstr ""
+
+#. TRANSLATORS: tell the user we found some packages (and deps), and then list
+#. them
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:835
+#, c-format
+msgid "Found %i packages to install:"
+msgstr ""
+
+#. TRANSLATORS: simulate mode is a testing mode where we quit before the
+#. action
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:848
+#, c-format
+msgid "Not installing packages in simulate mode"
+msgstr ""
+
+#. TRANSLATORS: we are now installing the debuginfo packages we found earlier
+#. TRANSLATORS: transaction state, installing packages
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:860
+#: ../lib/packagekit-glib2/pk-console-shared.c:287
+#, c-format
+msgid "Installing packages"
+msgstr ""
+
+#. TRANSLATORS: could not install, detailed error follows
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:873
+#, c-format
+msgid "Could not install packages: %s"
+msgstr ""
+
+#. TRANSLATORS: we are now disabling all debuginfo repos we previously enabled
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:905
+#, c-format
+msgid "Disabling sources previously enabled"
+msgstr ""
+
+#. TRANSLATORS: no debuginfo packages could be found to be installed, detailed
+#. error follows
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:917
+#, c-format
+msgid "Could not disable the debugging sources: %s"
+msgstr ""
+
+#. TRANSLATORS: we disabled all the debugging repos that we enabled before
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:932
+#, c-format
+msgid "Disabled %i debugging sources."
+msgstr ""
+
+#. TRANSLATORS: couldn't open device to write
+#: ../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:71
+msgid "Failed to write to the file"
+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 ""
+
+#. TRANSLATORS: the device could not be found in sysfs
+#: ../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:203
+msgid "Failed to unregister driver"
+msgstr ""
+
+#. TRANSLATORS: we failed to bind the old driver
+#: ../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:261
+msgid "Device path not found"
+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 ""
+
+#: ../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: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: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:315
+msgid "PackageKit Device Reloader"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. TRANSLATORS: we're going to verify the path first
+#: ../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:347
+msgid "Failed to verify device path"
+msgstr ""
+
+#. TRANSLATORS: we're going to try
+#: ../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:366
+msgid "Failed to rebind device"
+msgstr ""
+
+#: ../data/packagekit-catalog.xml.in.h:1
+msgid "PackageKit Catalog"
+msgstr ""
+
+#: ../data/packagekit-package-list.xml.in.h:1
+msgid "PackageKit Package List"
+msgstr ""
+
+#: ../data/packagekit-servicepack.xml.in.h:1
+msgid "PackageKit Service Pack"
+msgstr ""
+
+#: ../lib/packagekit-glib2/pk-console-shared.c:63
+#, 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:189
+msgid "More than one package matches:"
+msgstr ""
+
+#. TRANSLATORS: This finds out which package in the list to use
+#: ../lib/packagekit-glib2/pk-console-shared.c:200
+msgid "Please choose the correct package: "
+msgstr ""
+
+#. TRANSLATORS: This is when the transaction status is not known
+#: ../lib/packagekit-glib2/pk-console-shared.c:255
+msgid "Unknown state"
+msgstr ""
+
+#. TRANSLATORS: transaction state, the daemon is in the process of starting
+#: ../lib/packagekit-glib2/pk-console-shared.c:259
+msgid "Starting"
+msgstr ""
+
+#. TRANSLATORS: transaction state, the transaction is waiting for another to
+#. complete
+#: ../lib/packagekit-glib2/pk-console-shared.c:263
+msgid "Waiting in queue"
+msgstr ""
+
+#. TRANSLATORS: transaction state, just started
+#: ../lib/packagekit-glib2/pk-console-shared.c:267
+msgid "Running"
+msgstr ""
+
+#. TRANSLATORS: transaction state, is querying data
+#: ../lib/packagekit-glib2/pk-console-shared.c:271
+msgid "Querying"
+msgstr ""
+
+#. TRANSLATORS: transaction state, getting data from a server
+#: ../lib/packagekit-glib2/pk-console-shared.c:275
+msgid "Getting information"
+msgstr ""
+
+#. TRANSLATORS: transaction state, removing packages
+#: ../lib/packagekit-glib2/pk-console-shared.c:279
+msgid "Removing packages"
+msgstr ""
+
+#. TRANSLATORS: transaction state, downloading package files
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:283
+#: ../lib/packagekit-glib2/pk-console-shared.c:661
+msgid "Downloading packages"
+msgstr ""
+
+#. TRANSLATORS: transaction state, refreshing internal lists
+#: ../lib/packagekit-glib2/pk-console-shared.c:291
+msgid "Refreshing software list"
+msgstr ""
+
+#. TRANSLATORS: transaction state, installing updates
+#: ../lib/packagekit-glib2/pk-console-shared.c:295
+msgid "Installing updates"
+msgstr ""
+
+#. TRANSLATORS: transaction state, removing old packages, and cleaning config
+#. files
+#: ../lib/packagekit-glib2/pk-console-shared.c:299
+msgid "Cleaning up packages"
+msgstr ""
+
+#. TRANSLATORS: transaction state, obsoleting old packages
+#: ../lib/packagekit-glib2/pk-console-shared.c:303
+msgid "Obsoleting packages"
+msgstr ""
+
+#. TRANSLATORS: transaction state, checking the transaction before we do it
+#: ../lib/packagekit-glib2/pk-console-shared.c:307
+msgid "Resolving dependencies"
+msgstr ""
+
+#. TRANSLATORS: transaction state, checking if we have all the security keys
+#. for the operation
+#: ../lib/packagekit-glib2/pk-console-shared.c:311
+msgid "Checking signatures"
+msgstr ""
+
+#. TRANSLATORS: transaction state, when we return to a previous system state
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:315
+#: ../lib/packagekit-glib2/pk-console-shared.c:621
+msgid "Rolling back"
+msgstr ""
+
+#. TRANSLATORS: transaction state, when we're doing a test transaction
+#: ../lib/packagekit-glib2/pk-console-shared.c:319
+msgid "Testing changes"
+msgstr ""
+
+#. TRANSLATORS: transaction state, when we're writing to the system package
+#. database
+#: ../lib/packagekit-glib2/pk-console-shared.c:323
+msgid "Committing changes"
+msgstr ""
+
+#. TRANSLATORS: transaction state, requesting data from a server
+#: ../lib/packagekit-glib2/pk-console-shared.c:327
+msgid "Requesting data"
+msgstr ""
+
+#. TRANSLATORS: transaction state, all done!
+#: ../lib/packagekit-glib2/pk-console-shared.c:331
+msgid "Finished"
+msgstr ""
+
+#. TRANSLATORS: transaction state, in the process of cancelling
+#: ../lib/packagekit-glib2/pk-console-shared.c:335
+msgid "Cancelling"
+msgstr ""
+
+#. TRANSLATORS: transaction state, downloading metadata
+#: ../lib/packagekit-glib2/pk-console-shared.c:339
+msgid "Downloading repository information"
+msgstr ""
+
+#. TRANSLATORS: transaction state, downloading metadata
+#: ../lib/packagekit-glib2/pk-console-shared.c:343
+msgid "Downloading list of packages"
+msgstr ""
+
+#. TRANSLATORS: transaction state, downloading metadata
+#: ../lib/packagekit-glib2/pk-console-shared.c:347
+msgid "Downloading file lists"
+msgstr ""
+
+#. TRANSLATORS: transaction state, downloading metadata
+#: ../lib/packagekit-glib2/pk-console-shared.c:351
+msgid "Downloading lists of changes"
+msgstr ""
+
+#. TRANSLATORS: transaction state, downloading metadata
+#: ../lib/packagekit-glib2/pk-console-shared.c:355
+msgid "Downloading groups"
+msgstr ""
+
+#. TRANSLATORS: transaction state, downloading metadata
+#: ../lib/packagekit-glib2/pk-console-shared.c:359
+msgid "Downloading update information"
+msgstr ""
+
+#. TRANSLATORS: transaction state, repackaging delta files
+#: ../lib/packagekit-glib2/pk-console-shared.c:363
+msgid "Repackaging files"
+msgstr ""
+
+#. TRANSLATORS: transaction state, loading databases
+#: ../lib/packagekit-glib2/pk-console-shared.c:367
+msgid "Loading cache"
+msgstr ""
+
+#. TRANSLATORS: transaction state, scanning for running processes
+#: ../lib/packagekit-glib2/pk-console-shared.c:371
+msgid "Scanning applications"
+msgstr ""
+
+#. TRANSLATORS: transaction state, generating a list of packages installed on
+#. the system
+#: ../lib/packagekit-glib2/pk-console-shared.c:375
+msgid "Generating package lists"
+msgstr ""
+
+#. TRANSLATORS: transaction state, when we're waiting for the native tools to
+#. exit
+#: ../lib/packagekit-glib2/pk-console-shared.c:379
+msgid "Waiting for package manager lock"
+msgstr ""
+
+#. TRANSLATORS: transaction state, waiting for user to type in a password
+#: ../lib/packagekit-glib2/pk-console-shared.c:383
+msgid "Waiting for authentication"
+msgstr ""
+
+#. TRANSLATORS: transaction state, we are updating the list of processes
+#: ../lib/packagekit-glib2/pk-console-shared.c:387
+msgid "Updating running applications"
+msgstr ""
+
+#. TRANSLATORS: transaction state, we are checking executable files currently
+#. in use
+#: ../lib/packagekit-glib2/pk-console-shared.c:391
+msgid "Checking applications in use"
+msgstr ""
+
+#. TRANSLATORS: transaction state, we are checking for libraries currently in
+#. use
+#: ../lib/packagekit-glib2/pk-console-shared.c:395
+msgid "Checking libraries in use"
+msgstr ""
+
+#. TRANSLATORS: transaction state, we are copying package files before or
+#. after the transaction
+#: ../lib/packagekit-glib2/pk-console-shared.c:399
+msgid "Copying files"
+msgstr ""
+
+#. TRANSLATORS: The type of update
+#: ../lib/packagekit-glib2/pk-console-shared.c:417
+msgid "Trivial"
+msgstr ""
+
+#. TRANSLATORS: The type of update
+#: ../lib/packagekit-glib2/pk-console-shared.c:421
+msgid "Normal"
+msgstr ""
+
+#. TRANSLATORS: The type of update
+#: ../lib/packagekit-glib2/pk-console-shared.c:425
+msgid "Important"
+msgstr ""
+
+#. TRANSLATORS: The type of update
+#: ../lib/packagekit-glib2/pk-console-shared.c:429
+msgid "Security"
+msgstr ""
+
+#. TRANSLATORS: The type of update
+#: ../lib/packagekit-glib2/pk-console-shared.c:433
+msgid "Bug fix "
+msgstr ""
+
+#. TRANSLATORS: The type of update
+#: ../lib/packagekit-glib2/pk-console-shared.c:437
+msgid "Enhancement"
+msgstr ""
+
+#. TRANSLATORS: The type of update
+#: ../lib/packagekit-glib2/pk-console-shared.c:441
+msgid "Blocked"
+msgstr ""
+
+#. TRANSLATORS: The state of a package
+#. TRANSLATORS: The action of the package, in past tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:446
+#: ../lib/packagekit-glib2/pk-console-shared.c:519
+msgid "Installed"
+msgstr ""
+
+#. TRANSLATORS: The state of a package, i.e. not installed
+#: ../lib/packagekit-glib2/pk-console-shared.c:451
+msgid "Available"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:469
+msgid "Downloading"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:473
+msgid "Updating"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in present tense
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:477
+#: ../lib/packagekit-glib2/pk-console-shared.c:597
+msgid "Installing"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in present tense
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:481
+#: ../lib/packagekit-glib2/pk-console-shared.c:593
+msgid "Removing"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:485
+msgid "Cleaning up"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:489
+msgid "Obsoleting"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:493
+msgid "Reinstalling"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in past tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:511
+msgid "Downloaded"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in past tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:523
+msgid "Removed"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in past tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:527
+msgid "Cleaned up"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in past tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:531
+msgid "Obsoleted"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in past tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:535
+msgid "Reinstalled"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:553
+msgid "Unknown role type"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:557
+msgid "Getting dependencies"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:561
+msgid "Getting update details"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:565
+msgid "Getting details"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:569
+msgid "Getting requires"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:573
+msgid "Getting updates"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:577
+msgid "Searching by details"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:581
+msgid "Searching by file"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:585
+msgid "Searching groups"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:589
+msgid "Searching by name"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:601
+msgid "Installing files"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:605
+msgid "Refreshing cache"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:609
+msgid "Updating packages"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:613
+msgid "Updating system"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:617
+msgid "Canceling"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:625
+msgid "Getting repositories"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:629
+msgid "Enabling repository"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:633
+msgid "Setting data"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:637
+msgid "Resolving"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:641
+msgid "Getting file list"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:645
+msgid "Getting provides"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:649
+msgid "Installing signature"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:653
+msgid "Getting packages"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:657
+msgid "Accepting EULA"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:665
+msgid "Getting upgrades"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:669
+msgid "Getting categories"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:673
+msgid "Getting transactions"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:677
+#: ../lib/packagekit-glib2/pk-console-shared.c:681
+msgid "Simulating install"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:685
+msgid "Simulating remove"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:689
+msgid "Simulating update"
+msgstr ""
+
+#. TRANSLATORS: turn on all debugging
+#: ../lib/packagekit-glib2/pk-debug.c:133
+msgid "Show debugging information for all files"
+msgstr ""
+
+#: ../lib/packagekit-glib2/pk-debug.c:201
+msgid "Debugging Options"
+msgstr ""
+
+#: ../lib/packagekit-glib2/pk-debug.c:201
+msgid "Show debugging options"
+msgstr ""
+
+#. TRANSLATORS: ask the user if they are comfortable installing insecure
+#. packages
+#: ../lib/packagekit-glib2/pk-task-text.c:67
+msgid "Do you want to allow installing of unsigned software?"
+msgstr ""
+
+#. TRANSLATORS: tell the user we've not done anything
+#: ../lib/packagekit-glib2/pk-task-text.c:72
+msgid "The unsigned software will not be installed."
+msgstr ""
+
+#. TRANSLATORS: the package repository is signed by a key that is not
+#. recognised
+#: ../lib/packagekit-glib2/pk-task-text.c:121
+msgid "Software source signature required"
+msgstr ""
+
+#. TRANSLATORS: the package repository name
+#: ../lib/packagekit-glib2/pk-task-text.c:127
+msgid "Software source name"
+msgstr ""
+
+#. TRANSLATORS: the key URL
+#: ../lib/packagekit-glib2/pk-task-text.c:130
+msgid "Key URL"
+msgstr ""
+
+#. TRANSLATORS: the username of the key
+#: ../lib/packagekit-glib2/pk-task-text.c:133
+msgid "Key user"
+msgstr ""
+
+#. TRANSLATORS: the key ID, usually a few hex digits
+#: ../lib/packagekit-glib2/pk-task-text.c:136
+msgid "Key ID"
+msgstr ""
+
+#. TRANSLATORS: the key fingerprint, again, yet more hex
+#: ../lib/packagekit-glib2/pk-task-text.c:139
+msgid "Key fingerprint"
+msgstr ""
+
+#. TRANSLATORS: the timestamp (a bit like a machine readable time)
+#: ../lib/packagekit-glib2/pk-task-text.c:142
+msgid "Key Timestamp"
+msgstr ""
+
+#. TRANSLATORS: ask the user if they want to import
+#: ../lib/packagekit-glib2/pk-task-text.c:155
+msgid "Do you accept this signature?"
+msgstr ""
+
+#. TRANSLATORS: tell the user we've not done anything
+#: ../lib/packagekit-glib2/pk-task-text.c:160
+msgid "The signature was not accepted."
+msgstr ""
+
+#. TRANSLATORS: this is another name for a software licence that has to be
+#. read before installing
+#: ../lib/packagekit-glib2/pk-task-text.c:203
+msgid "End user licence agreement required"
+msgstr ""
+
+#. TRANSLATORS: the EULA text itself (long and boring)
+#: ../lib/packagekit-glib2/pk-task-text.c:212
+msgid "Agreement"
+msgstr ""
+
+#. TRANSLATORS: ask the user if they've read and accepted the EULA
+#: ../lib/packagekit-glib2/pk-task-text.c:221
+msgid "Do you accept this agreement?"
+msgstr ""
+
+#. TRANSLATORS: tell the user we've not done anything
+#: ../lib/packagekit-glib2/pk-task-text.c:226
+msgid "The agreement was not accepted."
+msgstr ""
+
+#. TRANSLATORS: the user needs to change media inserted into the computer
+#: ../lib/packagekit-glib2/pk-task-text.c:265
+msgid "Media change required"
+msgstr ""
+
+#. TRANSLATORS: the type, e.g. DVD, CD, etc
+#: ../lib/packagekit-glib2/pk-task-text.c:268
+msgid "Media type"
+msgstr ""
+
+#. TRANSLATORS: the media label, usually like 'disk-1of3'
+#: ../lib/packagekit-glib2/pk-task-text.c:271
+msgid "Media label"
+msgstr ""
+
+#. TRANSLATORS: the media description, usually like 'Fedora 12 disk 5'
+#: ../lib/packagekit-glib2/pk-task-text.c:274
+msgid "Text"
+msgstr ""
+
+#. TRANSLATORS: ask the user to insert the media
+#: ../lib/packagekit-glib2/pk-task-text.c:280
+msgid "Please insert the correct media"
+msgstr ""
+
+#. TRANSLATORS: tell the user we've not done anything as they are lazy
+#: ../lib/packagekit-glib2/pk-task-text.c:285
+msgid "The correct media was not inserted."
+msgstr ""
+
+#. TRANSLATORS: When processing, we might have to remove other dependencies
+#: ../lib/packagekit-glib2/pk-task-text.c:300
+msgid "The following packages have to be removed:"
+msgstr ""
+
+#. TRANSLATORS: When processing, we might have to install other dependencies
+#: ../lib/packagekit-glib2/pk-task-text.c:305
+msgid "The following packages have to be installed:"
+msgstr ""
+
+#. TRANSLATORS: When processing, we might have to update other dependencies
+#: ../lib/packagekit-glib2/pk-task-text.c:310
+msgid "The following packages have to be updated:"
+msgstr ""
+
+#. TRANSLATORS: When processing, we might have to reinstall other dependencies
+#: ../lib/packagekit-glib2/pk-task-text.c:315
+msgid "The following packages have to be reinstalled:"
+msgstr ""
+
+#. TRANSLATORS: When processing, we might have to downgrade other dependencies
+#: ../lib/packagekit-glib2/pk-task-text.c:320
+msgid "The following packages have to be downgraded:"
+msgstr ""
+
+#. TRANSLATORS: ask the user if the proposed changes are okay
+#: ../lib/packagekit-glib2/pk-task-text.c:380
+msgid "Proceed with changes?"
+msgstr ""
+
+#. TRANSLATORS: tell the user we didn't do anything
+#: ../lib/packagekit-glib2/pk-task-text.c:385
+msgid "The transaction did not proceed."
+msgstr ""
+
+#. SECURITY:
+#. - Normal users do not require admin authentication to accept new
+#. licence agreements.
+#. - Change this to 'auth_admin' for environments where users should not
+#. be given the option to make legal decisions.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:7
+msgid "Accept EULA"
+msgstr ""
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h: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"
+msgstr ""
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:10
+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:13
+msgid "Authentication is required to install a signed package"
+msgstr ""
+
+#: ../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:15
+msgid "Authentication is required to refresh the system sources"
+msgstr ""
+
+#: ../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:17
+msgid "Authentication is required to remove packages"
+msgstr ""
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:18
+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 ""
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:21
+msgid "Authentication is required to upgrade the operating system"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users are allowed to cancel their own task without
+#. authentication, but a different user id needs the admin password
+#. to cancel another users task.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:27
+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:34
+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:40
+msgid "Change software source parameters"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users do not need authentication to install signed packages
+#. from signed repositories, as this cannot exploit a system.
+#. - Paranoid users (or parents!) can change this to 'auth_admin' or
+#. 'auth_admin_keep'.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:47
+msgid "Install signed package"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users require admin authentication to install untrusted or
+#. unrecognised packages, as allowing users to do this without a
+#. password would be a massive security hole.
+#. - This is not retained as each package should be authenticated.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:54
+msgid "Install untrusted local file"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users do not require admin authentication to refresh the
+#. cache, as this doesn't actually install or remove software.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:59
+msgid "Refresh system sources"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users require admin authentication to rebind a driver
+#. so that it works after we install firmware.
+#. - This should not be set to 'yes' as unprivileged users could then
+#. try to rebind drivers in use, for instance security authentication
+#. devices.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:67
+msgid "Reload a device"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users require admin authentication to remove packages as
+#. this can make the system unbootable or stop other applications from
+#. working.
+#. - Be sure to close the tool used to remove the packages after the
+#. admin authentication has been obtained, otherwise packages can still
+#. be removed. If this is not possible, change this authentication to
+#. 'auth_admin'.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:77
+msgid "Remove package"
+msgstr ""
+
+#. 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:83
+msgid "Rollback to a previous transaction"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users do not require admin authentication to set the proxy
+#. used for downloading packages.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:88
+msgid "Set network proxy"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users require admin authentication to add signing keys.
+#. - This implies adding an explicit trust, and should not be granted
+#. without a secure authentication.
+#. - This is not kept as each package should be authenticated.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:95
+msgid "Trust a key used for signing packages"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users do not require admin authentication to update the
+#. system as the packages will be signed, and the action is required
+#. to update the system when unattended.
+#. - Changing this to anything other than 'yes' will break unattended
+#. updates.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:103
+msgid "Update packages"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users require admin authentication to upgrade the disto as
+#. this can make the system unbootable or stop other applications from
+#. working.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:109
+msgid "Upgrade System"
+msgstr ""
+
+#. TRANSLATORS: failed due to DBus security
+#: ../src/pk-main.c:87
+msgid "Startup failed due to security policies on this machine."
+msgstr ""
+
+#. TRANSLATORS: only two ways this can fail...
+#: ../src/pk-main.c:89
+msgid "This can happen for two reasons:"
+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 ""
+
+#. 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 ""
+
+#. TRANSLATORS: a backend is the system package tool, e.g. yum, apt
+#: ../src/pk-main.c:200
+msgid "Packaging backend to use, e.g. dummy"
+msgstr ""
+
+#. TRANSLATORS: if we should run in the background
+#: ../src/pk-main.c:203
+msgid "Daemonize and detach from the terminal"
+msgstr ""
+
+#. TRANSLATORS: if we should not monitor how long we are inactive for
+#: ../src/pk-main.c:206
+msgid "Disable the idle timer"
+msgstr ""
+
+#. TRANSLATORS: show version
+#: ../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:212
+msgid "Exit after a small delay"
+msgstr ""
+
+#. TRANSLATORS: exit straight away, used for automatic profiling
+#: ../src/pk-main.c:215
+msgid "Exit after the engine has loaded"
+msgstr ""
+
+#. TRANSLATORS: describing the service that is running
+#: ../src/pk-main.c:230
+msgid "PackageKit service"
+msgstr ""
+
+#. TRANSLATORS: fatal error, dbus is not running
+#: ../src/pk-main.c:267
+msgid "Cannot connect to the system bus"
+msgstr ""
+
+#. TRANSLATORS: cannot register on system bus, unknown reason -- geeky error
+#. follows
+#: ../src/pk-main.c:316
+msgid "Error trying to start:"
+msgstr ""
+
+#: ../src/pk-polkit-action-lookup.c:150
+msgid "To install debugging packages, extra sources need to be enabled"
+msgstr ""
+
+#. 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 ""
+
+#: ../src/pk-polkit-action-lookup.c:176
+msgid "Do not update this package unless you are sure it is safe to do so."
+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 ""
+
+#: ../src/pk-polkit-action-lookup.c:195
+msgid "Do not install this package unless you are sure it is safe to do so."
+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 ""
+
+#. TRANSLATORS: too many packages to list each one
+#: ../src/pk-polkit-action-lookup.c:273
+msgid "Many packages"
+msgstr ""
+
+#. TRANSLATORS: if the transaction is forced to install only trusted packages
+#: ../src/pk-polkit-action-lookup.c:339
+msgid "Only trusted"
+msgstr ""
diff --git a/po/cs.po b/po/cs.po
index 221555d..e841f1e 100644
--- a/po/cs.po
+++ b/po/cs.po
@@ -8,9 +8,9 @@ msgstr ""
 "Project-Id-Version: PackageKit\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2010-12-13 12:23+0000\n"
-"PO-Revision-Date: 2011-03-04 18:34+0000\n"
+"PO-Revision-Date: 2011-03-22 15:37+0000\n"
 "Last-Translator: fri <pavelfric at seznam.cz>\n"
-"Language-Team: Czech <None>\n"
+"Language-Team: Czech (http://www.transifex.net/projects/p/freedesktop/team/cs/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
diff --git a/po/da.po b/po/da.po
index 2f9b41a..c1d8f8c 100644
--- a/po/da.po
+++ b/po/da.po
@@ -8,9 +8,9 @@ msgstr ""
 "Project-Id-Version: PackageKit\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2010-12-13 12:23+0000\n"
-"PO-Revision-Date: 2011-03-04 18:34+0000\n"
-"Last-Translator: hughsie <richard at hughsie.com>\n"
-"Language-Team: LANGUAGE <LL at li.org>\n"
+"PO-Revision-Date: 2011-03-31 15:01+0000\n"
+"Last-Translator: kristho <lakristho at gmail.com>\n"
+"Language-Team: Danish (http://www.transifex.net/projects/p/freedesktop/team/da/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
@@ -287,7 +287,7 @@ msgstr "Fatal fejl"
 #. can be updated
 #: ../client/pk-console.c:701
 msgid "There are no packages to update."
-msgstr ""
+msgstr "Der er ingen pakker at opdatere."
 
 #. TRANSLATORS: the transaction failed in a way we could not expect
 #: ../client/pk-console.c:704
@@ -446,7 +446,7 @@ msgstr ""
 #. TRANSLATORS: command line argument, just output without fancy formatting
 #: ../client/pk-console.c:1296
 msgid "The maximum metadata cache age. Use -1 for 'never'."
-msgstr ""
+msgstr "Maksimumalderen for metadatamellemlager. Brug -1 for \"aldrig\"."
 
 #. TRANSLATORS: we failed to contact the daemon
 #: ../client/pk-console.c:1333
@@ -567,12 +567,14 @@ msgstr "En pakke udbydningsstreng kræves"
 #. TRANSLATORS: The user did not provide a distro name
 #: ../client/pk-console.c:1714
 msgid "A distribution name is required"
-msgstr ""
+msgstr "Et distributionsnavn er påkrævet"
 
 #. TRANSLATORS: The user did not provide an upgrade type
 #: ../client/pk-console.c:1720
 msgid "An upgrade type is required, e.g. 'minimal', 'default' or 'complete'"
 msgstr ""
+"En opgraderingstype er påkrævet, f.eks. \"minimal\", \"default\" eller "
+"\"complete\""
 
 #. TRANSLATORS: The user tried to use an unsupported option on the command
 #. line
@@ -712,7 +714,7 @@ msgstr "Kunne ikke hente status for dæmon"
 
 #: ../client/pk-monitor.c:349
 msgid "Failed to get properties"
-msgstr ""
+msgstr "Kunne ikke hente indstillinger"
 
 #. TRANSLATORS: this is a program that monitors PackageKit
 #: ../client/pk-monitor.c:387
@@ -801,7 +803,7 @@ msgstr "Kunne ikke søge efter fil"
 #. TRANSLATORS: the transaction failed in a way we could not expect
 #: ../contrib/command-not-found/pk-command-not-found.c:456
 msgid "Getting the list of files failed"
-msgstr ""
+msgstr "Hentning af liste over filer mislykkedes"
 
 #. TRANSLATORS: we failed to launch the executable, the error follows
 #: ../contrib/command-not-found/pk-command-not-found.c:602
@@ -823,7 +825,7 @@ msgstr "PackageKit-kommando ikke fundet"
 #. * the style of bash itself -- apologies
 #: ../contrib/command-not-found/pk-command-not-found.c:739
 msgid "command not found"
-msgstr ""
+msgstr "kommando ikke fundet"
 
 #. TRANSLATORS: tell the user what we think the command is
 #: ../contrib/command-not-found/pk-command-not-found.c:757
@@ -1886,7 +1888,7 @@ msgstr "Godkendelse kræves for at opdatere pakker"
 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:21
 msgid "Authentication is required to upgrade the operating system"
-msgstr ""
+msgstr "Godkendelse er påkrævet for at opgradere operativ systemet"
 
 #. SECURITY:
 #. - Normal users are allowed to cancel their own task without
@@ -2013,7 +2015,7 @@ msgstr "Opdatér pakker"
 #. 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:109
 msgid "Upgrade System"
-msgstr ""
+msgstr "Opgradér system"
 
 #. TRANSLATORS: failed due to DBus security
 #: ../src/pk-main.c:87
diff --git a/po/el.po b/po/el.po
index c92b53f..b488a1e 100644
--- a/po/el.po
+++ b/po/el.po
@@ -8,9 +8,9 @@ msgstr ""
 "Project-Id-Version: PackageKit\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2010-12-13 12:23+0000\n"
-"PO-Revision-Date: 2011-03-04 18:34+0000\n"
+"PO-Revision-Date: 2011-03-22 15:37+0000\n"
 "Last-Translator: hughsie <richard at hughsie.com>\n"
-"Language-Team: LANGUAGE <LL at li.org>\n"
+"Language-Team: Greek (http://www.transifex.net/projects/p/freedesktop/team/el/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
diff --git a/po/en_GB.po b/po/en_GB.po
index 85d91b5..ae4b179 100644
--- a/po/en_GB.po
+++ b/po/en_GB.po
@@ -8,7 +8,7 @@ msgstr ""
 "Project-Id-Version: PackageKit\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2010-12-13 12:23+0000\n"
-"PO-Revision-Date: 2011-03-04 18:34+0000\n"
+"PO-Revision-Date: 2011-03-22 15:37+0000\n"
 "Last-Translator: hughsie <richard at hughsie.com>\n"
 "Language-Team: LANGUAGE <LL at li.org>\n"
 "MIME-Version: 1.0\n"
diff --git a/po/es.po b/po/es.po
index cb59f5b..f7de2f6 100644
--- a/po/es.po
+++ b/po/es.po
@@ -8,9 +8,9 @@ msgstr ""
 "Project-Id-Version: PackageKit\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2010-12-13 12:23+0000\n"
-"PO-Revision-Date: 2011-03-04 18:34+0000\n"
+"PO-Revision-Date: 2011-03-22 15:37+0000\n"
 "Last-Translator: leo <daniel.mustieles at gmail.com>\n"
-"Language-Team: Spanish (Castilian) <None>\n"
+"Language-Team: LANGUAGE <LL at li.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
diff --git a/po/eu.po b/po/eu.po
index 0a70d86..ef6edc3 100644
--- a/po/eu.po
+++ b/po/eu.po
@@ -8,9 +8,9 @@ msgstr ""
 "Project-Id-Version: PackageKit\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2010-12-13 12:23+0000\n"
-"PO-Revision-Date: 2011-03-04 18:34+0000\n"
+"PO-Revision-Date: 2011-03-22 15:37+0000\n"
 "Last-Translator: hughsie <richard at hughsie.com>\n"
-"Language-Team: Basque <None>\n"
+"Language-Team: LANGUAGE <LL at li.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
diff --git a/po/fa_IR.po b/po/fa_IR.po
new file mode 100644
index 0000000..a0ff98c
--- /dev/null
+++ b/po/fa_IR.po
@@ -0,0 +1,2097 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL at ADDRESS>, YEAR.
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: PackageKit\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-12-13 12:23+0000\n"
+"PO-Revision-Date: 2011-05-04 09:48+0000\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Language-Team: Persian (Iran) (http://www.transifex.net/projects/p/freedesktop/team/fa_IR/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fa_IR\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+
+#. TRANSLATORS: this is an atomic transaction
+#. TRANSLATORS: the role is the point of the transaction, e.g. update-system
+#: ../client/pk-console.c:174 ../client/pk-console.c:596
+msgid "Transaction"
+msgstr ""
+
+#. TRANSLATORS: this is the time the transaction was started in system
+#. timezone
+#: ../client/pk-console.c:176
+msgid "System time"
+msgstr ""
+
+#. TRANSLATORS: this is if the transaction succeeded or not
+#: ../client/pk-console.c:178
+msgid "Succeeded"
+msgstr ""
+
+#: ../client/pk-console.c:178
+msgid "True"
+msgstr ""
+
+#: ../client/pk-console.c:178
+msgid "False"
+msgstr ""
+
+#. TRANSLATORS: this is the transactions role, e.g. "update-system"
+#. TRANSLATORS: the trasaction role, e.g. update-system
+#: ../client/pk-console.c:180 ../src/pk-polkit-action-lookup.c:332
+msgid "Role"
+msgstr ""
+
+#. TRANSLATORS: this is The duration of the transaction
+#: ../client/pk-console.c:185
+msgid "Duration"
+msgstr ""
+
+#: ../client/pk-console.c:185
+msgid "(seconds)"
+msgstr ""
+
+#. TRANSLATORS: this is The command line used to do the action
+#. TRANSLATORS: the command line of the thing that wants the authentication
+#: ../client/pk-console.c:189 ../src/pk-polkit-action-lookup.c:346
+msgid "Command line"
+msgstr ""
+
+#. TRANSLATORS: this is the user ID of the user that started the action
+#: ../client/pk-console.c:191
+msgid "User ID"
+msgstr ""
+
+#. TRANSLATORS: this is the username, e.g. hughsie
+#: ../client/pk-console.c:198
+msgid "Username"
+msgstr ""
+
+#. TRANSLATORS: this is the users real name, e.g. "Richard Hughes"
+#: ../client/pk-console.c:202
+msgid "Real name"
+msgstr ""
+
+#: ../client/pk-console.c:210
+msgid "Affected packages:"
+msgstr ""
+
+#: ../client/pk-console.c:212
+msgid "Affected packages: None"
+msgstr ""
+
+#. TRANSLATORS: this is the distro, e.g. Fedora 10
+#: ../client/pk-console.c:247
+msgid "Distribution"
+msgstr ""
+
+#. TRANSLATORS: this is type of update, stable or testing
+#: ../client/pk-console.c:249
+msgid "Type"
+msgstr ""
+
+#. TRANSLATORS: this is any summary text describing the upgrade
+#. TRANSLATORS: this is the summary of the group
+#: ../client/pk-console.c:251 ../client/pk-console.c:290
+msgid "Summary"
+msgstr ""
+
+#. TRANSLATORS: this is the group category name
+#: ../client/pk-console.c:279
+msgid "Category"
+msgstr ""
+
+#. TRANSLATORS: this is group identifier
+#: ../client/pk-console.c:281
+msgid "ID"
+msgstr ""
+
+#. TRANSLATORS: this is the parent group
+#: ../client/pk-console.c:284
+msgid "Parent"
+msgstr ""
+
+#. TRANSLATORS: this is the name of the parent group
+#: ../client/pk-console.c:287
+msgid "Name"
+msgstr ""
+
+#. TRANSLATORS: this is preferred icon for the group
+#: ../client/pk-console.c:293
+msgid "Icon"
+msgstr ""
+
+#. TRANSLATORS: this is a header for the package that can be updated
+#: ../client/pk-console.c:339
+msgid "Details about the update:"
+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:345 ../client/pk-console.c:615
+#: ../lib/packagekit-glib2/pk-task-text.c:124
+#: ../lib/packagekit-glib2/pk-task-text.c:206
+#: ../src/pk-polkit-action-lookup.c:357
+msgid "Package"
+msgid_plural "Packages"
+msgstr[0] ""
+
+#. TRANSLATORS: details about the update, any packages that this update
+#. updates
+#: ../client/pk-console.c:348
+msgid "Updates"
+msgstr ""
+
+#. TRANSLATORS: details about the update, any packages that this update
+#. obsoletes
+#: ../client/pk-console.c:352
+msgid "Obsoletes"
+msgstr ""
+
+#. TRANSLATORS: details about the update, the vendor URLs
+#. TRANSLATORS: the vendor (e.g. vmware) that is providing the EULA
+#: ../client/pk-console.c:356 ../lib/packagekit-glib2/pk-task-text.c:209
+msgid "Vendor"
+msgstr ""
+
+#. TRANSLATORS: details about the update, the bugzilla URLs
+#: ../client/pk-console.c:360
+msgid "Bugzilla"
+msgstr ""
+
+#. TRANSLATORS: details about the update, the CVE URLs
+#: ../client/pk-console.c:364
+msgid "CVE"
+msgstr ""
+
+#. TRANSLATORS: details about the update, if the package requires a restart
+#: ../client/pk-console.c:368
+msgid "Restart"
+msgstr ""
+
+#. TRANSLATORS: details about the update, any description of the update
+#: ../client/pk-console.c:372
+msgid "Update text"
+msgstr ""
+
+#. TRANSLATORS: details about the update, the changelog for the package
+#: ../client/pk-console.c:376
+msgid "Changes"
+msgstr ""
+
+#. TRANSLATORS: details about the update, the ongoing state of the update
+#: ../client/pk-console.c:380
+msgid "State"
+msgstr ""
+
+#. TRANSLATORS: details about the update, date the update was issued
+#: ../client/pk-console.c:384
+msgid "Issued"
+msgstr ""
+
+#. TRANSLATORS: details about the update, date the update was updated
+#. TRANSLATORS: The action of the package, in past tense
+#: ../client/pk-console.c:388 ../lib/packagekit-glib2/pk-console-shared.c:515
+msgid "Updated"
+msgstr ""
+
+#. TRANSLATORS: if the repo is enabled
+#: ../client/pk-console.c:424
+msgid "Enabled"
+msgstr ""
+
+#. TRANSLATORS: if the repo is disabled
+#: ../client/pk-console.c:427
+msgid "Disabled"
+msgstr ""
+
+#. TRANSLATORS: a package requires the system to be restarted
+#: ../client/pk-console.c:459
+msgid "System restart required by:"
+msgstr ""
+
+#. TRANSLATORS: a package requires the session to be restarted
+#: ../client/pk-console.c:462
+msgid "Session restart required:"
+msgstr ""
+
+#. TRANSLATORS: a package requires the system to be restarted due to a
+#. security update
+#: ../client/pk-console.c:465
+msgid "System restart (security) required by:"
+msgstr ""
+
+#. TRANSLATORS: a package requires the session to be restarted due to a
+#. security update
+#: ../client/pk-console.c:468
+msgid "Session restart (security) required:"
+msgstr ""
+
+#. TRANSLATORS: a package requires the application to be restarted
+#: ../client/pk-console.c:471
+msgid "Application restart required by:"
+msgstr ""
+
+#. TRANSLATORS: This a list of details about the package
+#: ../client/pk-console.c:506
+msgid "Package description"
+msgstr ""
+
+#. TRANSLATORS: This a message (like a little note that may be of interest)
+#. from the transaction
+#: ../client/pk-console.c:537
+msgid "Message:"
+msgstr ""
+
+#. TRANSLATORS: This where the package has no files
+#: ../client/pk-console.c:558
+msgid "No files"
+msgstr ""
+
+#. TRANSLATORS: This a list files contained in the package
+#: ../client/pk-console.c:563
+msgid "Package files"
+msgstr ""
+
+#. TRANSLATORS: the percentage complete of the transaction
+#: ../client/pk-console.c:631
+msgid "Percentage"
+msgstr ""
+
+#. TRANSLATORS: the status of the transaction (e.g. downloading)
+#: ../client/pk-console.c:649
+msgid "Status"
+msgstr ""
+
+#. TRANSLATORS: the results from the transaction
+#: ../client/pk-console.c:678
+msgid "Results:"
+msgstr ""
+
+#. TRANSLATORS: we failed to get any results, which is pretty fatal in my book
+#: ../client/pk-console.c:685
+msgid "Fatal error"
+msgstr ""
+
+#. TRANSLATORS: the user asked to update everything, but there is nothing that
+#. can be updated
+#: ../client/pk-console.c:701
+msgid "There are no packages to update."
+msgstr ""
+
+#. TRANSLATORS: the transaction failed in a way we could not expect
+#: ../client/pk-console.c:704
+#: ../contrib/command-not-found/pk-command-not-found.c:639
+msgid "The transaction failed"
+msgstr ""
+
+#. TRANSLATORS: print a message when there are no updates
+#: ../client/pk-console.c:733
+msgid "There are no updates available at this time."
+msgstr ""
+
+#: ../client/pk-console.c:756
+msgid "There are no upgrades available at this time."
+msgstr ""
+
+#. TRANSLATORS: a package needs to restart their system
+#: ../client/pk-console.c:823
+msgid "Please restart the computer to complete the update."
+msgstr ""
+
+#. TRANSLATORS: a package needs to restart the session
+#: ../client/pk-console.c:826
+msgid "Please logout and login to complete the update."
+msgstr ""
+
+#. TRANSLATORS: a package needs to restart their system (due to security)
+#: ../client/pk-console.c:829
+msgid ""
+"Please restart the computer to complete the update as important security "
+"updates have been installed."
+msgstr ""
+
+#. TRANSLATORS: a package needs to restart the session (due to security)
+#: ../client/pk-console.c:832
+msgid ""
+"Please logout and login to complete the update as important security updates"
+" have been installed."
+msgstr ""
+
+#. TRANSLATORS: The user used 'pkcon install dave.rpm' rather than 'pkcon
+#. install-local dave.rpm'
+#: ../client/pk-console.c:858
+#, 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:866
+#, c-format
+msgid "This tool could not find any available package: %s"
+msgstr ""
+
+#. TRANSLATORS: There was an error getting the list of files for the package.
+#. The detailed error follows
+#: ../client/pk-console.c:894
+#, c-format
+msgid "This tool could not find the installed package: %s"
+msgstr ""
+
+#. TRANSLATORS: There was an error getting the list of files for the package.
+#. The detailed error follows
+#: ../client/pk-console.c:922 ../client/pk-console.c:950
+#, c-format
+msgid "This tool could not find the package: %s"
+msgstr ""
+
+#. TRANSLATORS: There was an error getting the list of files for the package.
+#. The detailed error follows
+#. TRANSLATORS: There was an error getting the dependencies for the package.
+#. The detailed error follows
+#. TRANSLATORS: There was an error getting the details about the package. The
+#. detailed error follows
+#. TRANSLATORS: The package name was not found in any software sources. The
+#. detailed error follows
+#: ../client/pk-console.c:978 ../client/pk-console.c:1006
+#: ../client/pk-console.c:1034 ../client/pk-console.c:1062
+#: ../client/pk-console.c:1090
+#, c-format
+msgid "This tool could not find all the packages: %s"
+msgstr ""
+
+#. TRANSLATORS: This is when the daemon crashed, and we are up shit creek
+#. without a paddle
+#: ../client/pk-console.c:1119
+msgid "The daemon crashed mid-transaction!"
+msgstr ""
+
+#. TRANSLATORS: This is the header to the --help menu
+#: ../client/pk-console.c:1153
+msgid "PackageKit Console Interface"
+msgstr ""
+
+#. these are commands we can use with pkcon
+#: ../client/pk-console.c:1155
+msgid "Subcommands:"
+msgstr ""
+
+#. TRANSLATORS: we keep a database updated with the time that an action was
+#. last executed
+#: ../client/pk-console.c:1234
+msgid "Failed to get the time since this action was last completed"
+msgstr ""
+
+#. TRANSLATORS: command line argument, just show the version string
+#: ../client/pk-console.c:1275 ../client/pk-monitor.c:371
+msgid "Show the program version and exit"
+msgstr ""
+
+#. TRANSLATORS: command line argument, use a filter to narrow down results
+#: ../client/pk-console.c:1278
+msgid "Set the filter, e.g. installed"
+msgstr ""
+
+#. TRANSLATORS: command line argument, use a non-standard install prefix
+#: ../client/pk-console.c:1281
+msgid "Set the install root, e.g. '/' or '/mnt/ltsp'"
+msgstr ""
+
+#. TRANSLATORS: command line argument, work asynchronously
+#: ../client/pk-console.c:1284
+msgid "Exit without waiting for actions to complete"
+msgstr ""
+
+#. command line argument, do we ask questions
+#: ../client/pk-console.c:1287
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:525
+msgid "Install the packages without asking for confirmation"
+msgstr ""
+
+#. TRANSLATORS: command line argument, this command is not a priority
+#: ../client/pk-console.c:1290
+msgid "Run the command using idle network bandwidth and also using less power"
+msgstr ""
+
+#. TRANSLATORS: command line argument, just output without fancy formatting
+#: ../client/pk-console.c:1293
+msgid ""
+"Print to screen a machine readable output, rather than using animated "
+"widgets"
+msgstr ""
+
+#. TRANSLATORS: command line argument, just output without fancy formatting
+#: ../client/pk-console.c:1296
+msgid "The maximum metadata cache age. Use -1 for 'never'."
+msgstr ""
+
+#. TRANSLATORS: we failed to contact the daemon
+#: ../client/pk-console.c:1333
+msgid "Failed to contact PackageKit"
+msgstr ""
+
+#. TRANSLATORS: The user specified an incorrect filter
+#: ../client/pk-console.c:1381
+msgid "The proxy could not be set"
+msgstr ""
+
+#. TRANSLATORS: The user specified an incorrect filter
+#: ../client/pk-console.c:1393
+msgid "The install root could not be set"
+msgstr ""
+
+#. TRANSLATORS: The user specified an incorrect filter
+#: ../client/pk-console.c:1405
+msgid "The filter specified was invalid"
+msgstr ""
+
+#. TRANSLATORS: a search type can be name, details, file, etc
+#: ../client/pk-console.c:1424
+msgid "A search type is required, e.g. name"
+msgstr ""
+
+#. TRANSLATORS: the user needs to provide a search term
+#: ../client/pk-console.c:1431 ../client/pk-console.c:1443
+#: ../client/pk-console.c:1455 ../client/pk-console.c:1467
+msgid "A search term is required"
+msgstr ""
+
+#. TRANSLATORS: the search type was provided, but invalid
+#: ../client/pk-console.c:1477
+msgid "Invalid search type"
+msgstr ""
+
+#. TRANSLATORS: the user did not specify what they wanted to install
+#: ../client/pk-console.c:1483
+msgid "A package name to install is required"
+msgstr ""
+
+#. TRANSLATORS: the user did not specify what they wanted to install
+#: ../client/pk-console.c:1492
+msgid "A filename to install is required"
+msgstr ""
+
+#. TRANSLATORS: geeky error, 99.9999% of users won't see this
+#: ../client/pk-console.c:1503
+msgid "A type, key_id and package_id are required"
+msgstr ""
+
+#. TRANSLATORS: the user did not specify what they wanted to remove
+#: ../client/pk-console.c:1514
+msgid "A package name to remove is required"
+msgstr ""
+
+#. TRANSLATORS: the user did not specify anything about what to download or
+#. where
+#: ../client/pk-console.c:1523
+msgid "A destination directory and the package names to download are required"
+msgstr ""
+
+#. TRANSLATORS: the directory does not exist, so we can't continue
+#: ../client/pk-console.c:1530
+msgid "Directory not found"
+msgstr ""
+
+#. TRANSLATORS: geeky error, 99.9999% of users won't see this
+#: ../client/pk-console.c:1539
+msgid "A licence identifier (eula-id) is required"
+msgstr ""
+
+#. TRANSLATORS: geeky error, 99.9999% of users won't see this
+#: ../client/pk-console.c:1550
+msgid "A transaction identifier (tid) is required"
+msgstr ""
+
+#. TRANSLATORS: The user did not specify a package name
+#: ../client/pk-console.c:1571
+msgid "A package name to resolve is required"
+msgstr ""
+
+#. TRANSLATORS: The user did not specify a repository (software source) name
+#: ../client/pk-console.c:1582 ../client/pk-console.c:1593
+msgid "A repository name is required"
+msgstr ""
+
+#. TRANSLATORS: The user didn't provide any data
+#: ../client/pk-console.c:1604
+msgid "A repo name, parameter and value are required"
+msgstr ""
+
+#. TRANSLATORS: The user didn't specify what action to use
+#: ../client/pk-console.c:1621
+msgid "An action, e.g. 'update-system' is required"
+msgstr ""
+
+#. TRANSLATORS: The user specified an invalid action
+#: ../client/pk-console.c:1628
+msgid "A correct role is required"
+msgstr ""
+
+#. TRANSLATORS: The user did not provide a package name
+#. TRANSLATORS: This is when the user fails to supply the package name
+#: ../client/pk-console.c:1638 ../client/pk-console.c:1652
+#: ../client/pk-console.c:1661 ../client/pk-console.c:1681
+#: ../client/pk-console.c:1690 ../client/pk-generate-pack.c:314
+msgid "A package name is required"
+msgstr ""
+
+#. TRANSLATORS: each package "provides" certain things, e.g. mime(gstreamer-
+#. decoder-mp3), the user didn't specify it
+#: ../client/pk-console.c:1670
+msgid "A package provide string is required"
+msgstr ""
+
+#. TRANSLATORS: The user did not provide a distro name
+#: ../client/pk-console.c:1714
+msgid "A distribution name is required"
+msgstr ""
+
+#. TRANSLATORS: The user did not provide an upgrade type
+#: ../client/pk-console.c:1720
+msgid "An upgrade type is required, e.g. 'minimal', 'default' or 'complete'"
+msgstr ""
+
+#. TRANSLATORS: The user tried to use an unsupported option on the command
+#. line
+#: ../client/pk-console.c:1770
+#, c-format
+msgid "Option '%s' is not supported"
+msgstr ""
+
+#. TRANSLATORS: Generic failure of what they asked to do
+#: ../client/pk-console.c:1780
+msgid "Command failed"
+msgstr ""
+
+#. TRANSLATORS: we can exclude certain packages (glibc) when we know they'll
+#. exist on the target
+#: ../client/pk-generate-pack.c:253
+msgid "Set the file name of dependencies to be excluded"
+msgstr ""
+
+#. TRANSLATORS: the output location
+#: ../client/pk-generate-pack.c:256
+msgid ""
+"The output file or directory (the current directory is used if omitted)"
+msgstr ""
+
+#. TRANSLATORS: put a list of packages in the pack
+#: ../client/pk-generate-pack.c:259
+msgid "The package to be put into the service pack"
+msgstr ""
+
+#. TRANSLATORS: put all pending updates in the pack
+#: ../client/pk-generate-pack.c:262
+msgid "Put all updates available in the service pack"
+msgstr ""
+
+#. TRANSLATORS: This is when the user fails to supply the correct arguments
+#: ../client/pk-generate-pack.c:298
+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:306
+msgid "Both options selected."
+msgstr ""
+
+#. TRANSLATORS: This is when the user fails to supply the output
+#: ../client/pk-generate-pack.c:322
+msgid "A output directory or file name is required"
+msgstr ""
+
+#. TRANSLATORS: This is when the daemon is not-installed/broken and fails to
+#. startup
+#: ../client/pk-generate-pack.c:340
+msgid "The daemon failed to startup"
+msgstr ""
+
+#. TRANSLATORS: This is when the backend doesn't have the capability to get-
+#. depends
+#. TRANSLATORS: This is when the backend doesn't have the capability to
+#. download
+#: ../client/pk-generate-pack.c:351 ../client/pk-generate-pack.c:357
+msgid "The package manager cannot perform this type of operation."
+msgstr ""
+
+#. TRANSLATORS: This is when the distro didn't include libarchive support into
+#. PK
+#: ../client/pk-generate-pack.c:364
+msgid ""
+"Service packs cannot be created as PackageKit was not built with libarchive "
+"support."
+msgstr ""
+
+#. TRANSLATORS: the user specified an absolute path, but didn't get the
+#. extension correct
+#: ../client/pk-generate-pack.c:375
+msgid "If specifying a file, the service pack name must end with"
+msgstr ""
+
+#. TRANSLATORS: This is when file already exists
+#: ../client/pk-generate-pack.c:391
+msgid "A pack with the same name already exists, do you want to overwrite it?"
+msgstr ""
+
+#. TRANSLATORS: This is when the pack was not overwritten
+#: ../client/pk-generate-pack.c:394
+msgid "The pack was not overwritten."
+msgstr ""
+
+#. TRANSLATORS: This is when the temporary directory cannot be created, the
+#. directory name follows
+#: ../client/pk-generate-pack.c:407
+msgid "Failed to create directory:"
+msgstr ""
+
+#. TRANSLATORS: This is when the list of packages from the remote computer
+#. cannot be opened
+#: ../client/pk-generate-pack.c:419
+msgid "Failed to open package list."
+msgstr ""
+
+#. TRANSLATORS: The package name is being matched up to available packages
+#: ../client/pk-generate-pack.c:428
+msgid "Finding package name."
+msgstr ""
+
+#. TRANSLATORS: This is when the package cannot be found in any software
+#. source. The detailed error follows
+#: ../client/pk-generate-pack.c:432
+#, 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:440
+msgid "Creating service pack..."
+msgstr ""
+
+#. TRANSLATORS: we succeeded in making the file
+#: ../client/pk-generate-pack.c:455
+#, c-format
+msgid "Service pack created '%s'"
+msgstr ""
+
+#. TRANSLATORS: we failed to make te file
+#: ../client/pk-generate-pack.c:460
+#, c-format
+msgid "Failed to create '%s': %s"
+msgstr ""
+
+#: ../client/pk-monitor.c:284
+msgid "Failed to get daemon state"
+msgstr ""
+
+#: ../client/pk-monitor.c:349
+msgid "Failed to get properties"
+msgstr ""
+
+#. TRANSLATORS: this is a program that monitors PackageKit
+#: ../client/pk-monitor.c:387
+msgid "PackageKit Monitor"
+msgstr ""
+
+#. TRANSLATORS: when we are getting data from the daemon
+#: ../contrib/browser-plugin/pk-plugin-install.c:499
+msgid "Getting package information..."
+msgstr ""
+
+#. TRANSLATORS: run an applicaiton
+#: ../contrib/browser-plugin/pk-plugin-install.c:505
+#, c-format
+msgid "Run %s"
+msgstr ""
+
+#. TRANSLATORS: show the installed version of a package
+#: ../contrib/browser-plugin/pk-plugin-install.c:511
+msgid "Installed version"
+msgstr ""
+
+#. TRANSLATORS: run the application now
+#: ../contrib/browser-plugin/pk-plugin-install.c:519
+#, c-format
+msgid "Run version %s now"
+msgstr ""
+
+#. TRANSLATORS: run the application now
+#: ../contrib/browser-plugin/pk-plugin-install.c:525
+msgid "Run now"
+msgstr ""
+
+#. TRANSLATORS: update to a new version of the package
+#: ../contrib/browser-plugin/pk-plugin-install.c:531
+#, c-format
+msgid "Update to version %s"
+msgstr ""
+
+#. TRANSLATORS: To install a package
+#: ../contrib/browser-plugin/pk-plugin-install.c:537
+#, c-format
+msgid "Install %s now"
+msgstr ""
+
+#. TRANSLATORS: the version of the package
+#: ../contrib/browser-plugin/pk-plugin-install.c:540
+msgid "Version"
+msgstr ""
+
+#. TRANSLATORS: noting found, so can't install
+#: ../contrib/browser-plugin/pk-plugin-install.c:545
+msgid "No packages found for your system"
+msgstr ""
+
+#. TRANSLATORS: package is being installed
+#: ../contrib/browser-plugin/pk-plugin-install.c:550
+msgid "Installing..."
+msgstr ""
+
+#. TRANSLATORS: downloading repo data so we can search
+#: ../contrib/command-not-found/pk-command-not-found.c: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: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: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: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:444
+msgid "Failed to search for file"
+msgstr ""
+
+#. TRANSLATORS: the transaction failed in a way we could not expect
+#: ../contrib/command-not-found/pk-command-not-found.c:456
+msgid "Getting the list of files failed"
+msgstr ""
+
+#. TRANSLATORS: we failed to launch the executable, the error follows
+#: ../contrib/command-not-found/pk-command-not-found.c:602
+msgid "Failed to launch:"
+msgstr ""
+
+#. TRANSLATORS: we failed to install the package
+#: ../contrib/command-not-found/pk-command-not-found.c:630
+msgid "Failed to install packages"
+msgstr ""
+
+#. TRANSLATORS: tool that gets called when the command is not found
+#: ../contrib/command-not-found/pk-command-not-found.c:706
+msgid "PackageKit Command Not Found"
+msgstr ""
+
+#. TRANSLATORS: the prefix of all the output telling the user
+#. * why it's not executing. NOTE: this is lowercase to mimic
+#. * the style of bash itself -- apologies
+#: ../contrib/command-not-found/pk-command-not-found.c:739
+msgid "command not found"
+msgstr ""
+
+#. TRANSLATORS: tell the user what we think the command is
+#: ../contrib/command-not-found/pk-command-not-found.c:757
+msgid "Similar command is:"
+msgstr ""
+
+#. TRANSLATORS: Ask the user if we should run the similar command
+#: ../contrib/command-not-found/pk-command-not-found.c:771
+msgid "Run similar command:"
+msgstr ""
+
+#. TRANSLATORS: show the user a list of commands that they could have meant
+#. TRANSLATORS: show the user a list of commands we could run
+#: ../contrib/command-not-found/pk-command-not-found.c:785
+#: ../contrib/command-not-found/pk-command-not-found.c:794
+msgid "Similar commands are:"
+msgstr ""
+
+#. TRANSLATORS: ask the user to choose a file to run
+#: ../contrib/command-not-found/pk-command-not-found.c:801
+msgid "Please choose a command to run"
+msgstr ""
+
+#. TRANSLATORS: tell the user what package provides the command
+#: ../contrib/command-not-found/pk-command-not-found.c:819
+msgid "The package providing this file is:"
+msgstr ""
+
+#. TRANSLATORS: as the user if we want to install a package to provide the
+#. command
+#: ../contrib/command-not-found/pk-command-not-found.c:826
+#, 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:853
+msgid "Packages providing this file are:"
+msgstr ""
+
+#. TRANSLATORS: Show the user a list of packages that they can install to
+#. provide this command
+#: ../contrib/command-not-found/pk-command-not-found.c:863
+msgid "Suitable packages are:"
+msgstr ""
+
+#. get selection
+#. TRANSLATORS: ask the user to choose a file to install
+#: ../contrib/command-not-found/pk-command-not-found.c:872
+msgid "Please choose a package to install"
+msgstr ""
+
+#. TRANSLATORS: we are starting to install the packages
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:195
+msgid "Starting install"
+msgstr ""
+
+#. TRANSLATORS: we couldn't find the package name, non-fatal
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:407
+#, c-format
+msgid "Failed to find the package %s, or already installed: %s"
+msgstr ""
+
+#. command line argument, simulate what would be done, but don't actually do
+#. it
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:516
+msgid ""
+"Don't actually install any packages, only simulate what would be installed"
+msgstr ""
+
+#. command line argument, do we skip packages that depend on the ones
+#. specified
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:519
+msgid "Do not install dependencies of the core packages"
+msgstr ""
+
+#. command line argument, do we operate quietly
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:522
+msgid "Do not display information or progress"
+msgstr ""
+
+#. TRANSLATORS: tool that gets called when the command is not found
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:540
+msgid "PackageKit Debuginfo Installer"
+msgstr ""
+
+#. TRANSLATORS: the use needs to specify a list of package names on the
+#. command line
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:554
+#, c-format
+msgid "ERROR: Specify package names to install."
+msgstr ""
+
+#. TRANSLATORS: we are getting the list of repositories
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:590
+#, c-format
+msgid "Getting sources list"
+msgstr ""
+
+#. TRANSLATORS: operation was not successful
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:600
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:675
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:759
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:803
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:870
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:914
+msgid "FAILED."
+msgstr ""
+
+#. TRANSLATORS: all completed 100%
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:615
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:655
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:690
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:774
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:818
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:885
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:929
+#, c-format
+msgid "OK."
+msgstr ""
+
+#. TRANSLATORS: tell the user what we found
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:618
+#, c-format
+msgid "Found %i enabled and %i disabled sources."
+msgstr ""
+
+#. TRANSLATORS: we're finding repositories that match out pattern
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:625
+#, c-format
+msgid "Finding debugging sources"
+msgstr ""
+
+#. TRANSLATORS: tell the user what we found
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:658
+#, c-format
+msgid "Found %i disabled debuginfo repos."
+msgstr ""
+
+#. TRANSLATORS: we're now enabling all the debug sources we found
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:665
+#, c-format
+msgid "Enabling debugging sources"
+msgstr ""
+
+#. TRANSLATORS: tell the user how many we enabled
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:693
+#, c-format
+msgid "Enabled %i debugging sources."
+msgstr ""
+
+#. TRANSLATORS: we're now finding packages that match in all the repos
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:700
+#, c-format
+msgid "Finding debugging packages"
+msgstr ""
+
+#. TRANSLATORS: we couldn't find the package name, non-fatal
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:712
+#, c-format
+msgid "Failed to find the package %s: %s"
+msgstr ""
+
+#. TRANSLATORS: we couldn't find the debuginfo package name, non-fatal
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:735
+#, c-format
+msgid "Failed to find the debuginfo package %s: %s"
+msgstr ""
+
+#. TRANSLATORS: no debuginfo packages could be found to be installed
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:763
+#, c-format
+msgid "Found no packages to install."
+msgstr ""
+
+#. TRANSLATORS: tell the user we found some packages, and then list them
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:777
+#, c-format
+msgid "Found %i packages:"
+msgstr ""
+
+#. TRANSLATORS: tell the user we are searching for deps
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:793
+#, c-format
+msgid "Finding packages that depend on these packages"
+msgstr ""
+
+#. TRANSLATORS: could not install, detailed error follows
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:806
+#, c-format
+msgid "Could not find dependant packages: %s"
+msgstr ""
+
+#. TRANSLATORS: tell the user we found some more packages
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:822
+#, c-format
+msgid "Found %i extra packages."
+msgstr ""
+
+#. TRANSLATORS: tell the user we found some more packages
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:826
+#, c-format
+msgid "No extra packages required."
+msgstr ""
+
+#. TRANSLATORS: tell the user we found some packages (and deps), and then list
+#. them
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:835
+#, c-format
+msgid "Found %i packages to install:"
+msgstr ""
+
+#. TRANSLATORS: simulate mode is a testing mode where we quit before the
+#. action
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:848
+#, c-format
+msgid "Not installing packages in simulate mode"
+msgstr ""
+
+#. TRANSLATORS: we are now installing the debuginfo packages we found earlier
+#. TRANSLATORS: transaction state, installing packages
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:860
+#: ../lib/packagekit-glib2/pk-console-shared.c:287
+#, c-format
+msgid "Installing packages"
+msgstr ""
+
+#. TRANSLATORS: could not install, detailed error follows
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:873
+#, c-format
+msgid "Could not install packages: %s"
+msgstr ""
+
+#. TRANSLATORS: we are now disabling all debuginfo repos we previously enabled
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:905
+#, c-format
+msgid "Disabling sources previously enabled"
+msgstr ""
+
+#. TRANSLATORS: no debuginfo packages could be found to be installed, detailed
+#. error follows
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:917
+#, c-format
+msgid "Could not disable the debugging sources: %s"
+msgstr ""
+
+#. TRANSLATORS: we disabled all the debugging repos that we enabled before
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:932
+#, c-format
+msgid "Disabled %i debugging sources."
+msgstr ""
+
+#. TRANSLATORS: couldn't open device to write
+#: ../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:71
+msgid "Failed to write to the file"
+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 ""
+
+#. TRANSLATORS: the device could not be found in sysfs
+#: ../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:203
+msgid "Failed to unregister driver"
+msgstr ""
+
+#. TRANSLATORS: we failed to bind the old driver
+#: ../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:261
+msgid "Device path not found"
+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 ""
+
+#: ../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: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: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:315
+msgid "PackageKit Device Reloader"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. TRANSLATORS: we're going to verify the path first
+#: ../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:347
+msgid "Failed to verify device path"
+msgstr ""
+
+#. TRANSLATORS: we're going to try
+#: ../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:366
+msgid "Failed to rebind device"
+msgstr ""
+
+#: ../data/packagekit-catalog.xml.in.h:1
+msgid "PackageKit Catalog"
+msgstr ""
+
+#: ../data/packagekit-package-list.xml.in.h:1
+msgid "PackageKit Package List"
+msgstr ""
+
+#: ../data/packagekit-servicepack.xml.in.h:1
+msgid "PackageKit Service Pack"
+msgstr ""
+
+#: ../lib/packagekit-glib2/pk-console-shared.c:63
+#, 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:189
+msgid "More than one package matches:"
+msgstr ""
+
+#. TRANSLATORS: This finds out which package in the list to use
+#: ../lib/packagekit-glib2/pk-console-shared.c:200
+msgid "Please choose the correct package: "
+msgstr ""
+
+#. TRANSLATORS: This is when the transaction status is not known
+#: ../lib/packagekit-glib2/pk-console-shared.c:255
+msgid "Unknown state"
+msgstr ""
+
+#. TRANSLATORS: transaction state, the daemon is in the process of starting
+#: ../lib/packagekit-glib2/pk-console-shared.c:259
+msgid "Starting"
+msgstr ""
+
+#. TRANSLATORS: transaction state, the transaction is waiting for another to
+#. complete
+#: ../lib/packagekit-glib2/pk-console-shared.c:263
+msgid "Waiting in queue"
+msgstr ""
+
+#. TRANSLATORS: transaction state, just started
+#: ../lib/packagekit-glib2/pk-console-shared.c:267
+msgid "Running"
+msgstr ""
+
+#. TRANSLATORS: transaction state, is querying data
+#: ../lib/packagekit-glib2/pk-console-shared.c:271
+msgid "Querying"
+msgstr ""
+
+#. TRANSLATORS: transaction state, getting data from a server
+#: ../lib/packagekit-glib2/pk-console-shared.c:275
+msgid "Getting information"
+msgstr ""
+
+#. TRANSLATORS: transaction state, removing packages
+#: ../lib/packagekit-glib2/pk-console-shared.c:279
+msgid "Removing packages"
+msgstr ""
+
+#. TRANSLATORS: transaction state, downloading package files
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:283
+#: ../lib/packagekit-glib2/pk-console-shared.c:661
+msgid "Downloading packages"
+msgstr ""
+
+#. TRANSLATORS: transaction state, refreshing internal lists
+#: ../lib/packagekit-glib2/pk-console-shared.c:291
+msgid "Refreshing software list"
+msgstr ""
+
+#. TRANSLATORS: transaction state, installing updates
+#: ../lib/packagekit-glib2/pk-console-shared.c:295
+msgid "Installing updates"
+msgstr ""
+
+#. TRANSLATORS: transaction state, removing old packages, and cleaning config
+#. files
+#: ../lib/packagekit-glib2/pk-console-shared.c:299
+msgid "Cleaning up packages"
+msgstr ""
+
+#. TRANSLATORS: transaction state, obsoleting old packages
+#: ../lib/packagekit-glib2/pk-console-shared.c:303
+msgid "Obsoleting packages"
+msgstr ""
+
+#. TRANSLATORS: transaction state, checking the transaction before we do it
+#: ../lib/packagekit-glib2/pk-console-shared.c:307
+msgid "Resolving dependencies"
+msgstr ""
+
+#. TRANSLATORS: transaction state, checking if we have all the security keys
+#. for the operation
+#: ../lib/packagekit-glib2/pk-console-shared.c:311
+msgid "Checking signatures"
+msgstr ""
+
+#. TRANSLATORS: transaction state, when we return to a previous system state
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:315
+#: ../lib/packagekit-glib2/pk-console-shared.c:621
+msgid "Rolling back"
+msgstr ""
+
+#. TRANSLATORS: transaction state, when we're doing a test transaction
+#: ../lib/packagekit-glib2/pk-console-shared.c:319
+msgid "Testing changes"
+msgstr ""
+
+#. TRANSLATORS: transaction state, when we're writing to the system package
+#. database
+#: ../lib/packagekit-glib2/pk-console-shared.c:323
+msgid "Committing changes"
+msgstr ""
+
+#. TRANSLATORS: transaction state, requesting data from a server
+#: ../lib/packagekit-glib2/pk-console-shared.c:327
+msgid "Requesting data"
+msgstr ""
+
+#. TRANSLATORS: transaction state, all done!
+#: ../lib/packagekit-glib2/pk-console-shared.c:331
+msgid "Finished"
+msgstr ""
+
+#. TRANSLATORS: transaction state, in the process of cancelling
+#: ../lib/packagekit-glib2/pk-console-shared.c:335
+msgid "Cancelling"
+msgstr ""
+
+#. TRANSLATORS: transaction state, downloading metadata
+#: ../lib/packagekit-glib2/pk-console-shared.c:339
+msgid "Downloading repository information"
+msgstr ""
+
+#. TRANSLATORS: transaction state, downloading metadata
+#: ../lib/packagekit-glib2/pk-console-shared.c:343
+msgid "Downloading list of packages"
+msgstr ""
+
+#. TRANSLATORS: transaction state, downloading metadata
+#: ../lib/packagekit-glib2/pk-console-shared.c:347
+msgid "Downloading file lists"
+msgstr ""
+
+#. TRANSLATORS: transaction state, downloading metadata
+#: ../lib/packagekit-glib2/pk-console-shared.c:351
+msgid "Downloading lists of changes"
+msgstr ""
+
+#. TRANSLATORS: transaction state, downloading metadata
+#: ../lib/packagekit-glib2/pk-console-shared.c:355
+msgid "Downloading groups"
+msgstr ""
+
+#. TRANSLATORS: transaction state, downloading metadata
+#: ../lib/packagekit-glib2/pk-console-shared.c:359
+msgid "Downloading update information"
+msgstr ""
+
+#. TRANSLATORS: transaction state, repackaging delta files
+#: ../lib/packagekit-glib2/pk-console-shared.c:363
+msgid "Repackaging files"
+msgstr ""
+
+#. TRANSLATORS: transaction state, loading databases
+#: ../lib/packagekit-glib2/pk-console-shared.c:367
+msgid "Loading cache"
+msgstr ""
+
+#. TRANSLATORS: transaction state, scanning for running processes
+#: ../lib/packagekit-glib2/pk-console-shared.c:371
+msgid "Scanning applications"
+msgstr ""
+
+#. TRANSLATORS: transaction state, generating a list of packages installed on
+#. the system
+#: ../lib/packagekit-glib2/pk-console-shared.c:375
+msgid "Generating package lists"
+msgstr ""
+
+#. TRANSLATORS: transaction state, when we're waiting for the native tools to
+#. exit
+#: ../lib/packagekit-glib2/pk-console-shared.c:379
+msgid "Waiting for package manager lock"
+msgstr ""
+
+#. TRANSLATORS: transaction state, waiting for user to type in a password
+#: ../lib/packagekit-glib2/pk-console-shared.c:383
+msgid "Waiting for authentication"
+msgstr ""
+
+#. TRANSLATORS: transaction state, we are updating the list of processes
+#: ../lib/packagekit-glib2/pk-console-shared.c:387
+msgid "Updating running applications"
+msgstr ""
+
+#. TRANSLATORS: transaction state, we are checking executable files currently
+#. in use
+#: ../lib/packagekit-glib2/pk-console-shared.c:391
+msgid "Checking applications in use"
+msgstr ""
+
+#. TRANSLATORS: transaction state, we are checking for libraries currently in
+#. use
+#: ../lib/packagekit-glib2/pk-console-shared.c:395
+msgid "Checking libraries in use"
+msgstr ""
+
+#. TRANSLATORS: transaction state, we are copying package files before or
+#. after the transaction
+#: ../lib/packagekit-glib2/pk-console-shared.c:399
+msgid "Copying files"
+msgstr ""
+
+#. TRANSLATORS: The type of update
+#: ../lib/packagekit-glib2/pk-console-shared.c:417
+msgid "Trivial"
+msgstr ""
+
+#. TRANSLATORS: The type of update
+#: ../lib/packagekit-glib2/pk-console-shared.c:421
+msgid "Normal"
+msgstr ""
+
+#. TRANSLATORS: The type of update
+#: ../lib/packagekit-glib2/pk-console-shared.c:425
+msgid "Important"
+msgstr ""
+
+#. TRANSLATORS: The type of update
+#: ../lib/packagekit-glib2/pk-console-shared.c:429
+msgid "Security"
+msgstr ""
+
+#. TRANSLATORS: The type of update
+#: ../lib/packagekit-glib2/pk-console-shared.c:433
+msgid "Bug fix "
+msgstr ""
+
+#. TRANSLATORS: The type of update
+#: ../lib/packagekit-glib2/pk-console-shared.c:437
+msgid "Enhancement"
+msgstr ""
+
+#. TRANSLATORS: The type of update
+#: ../lib/packagekit-glib2/pk-console-shared.c:441
+msgid "Blocked"
+msgstr ""
+
+#. TRANSLATORS: The state of a package
+#. TRANSLATORS: The action of the package, in past tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:446
+#: ../lib/packagekit-glib2/pk-console-shared.c:519
+msgid "Installed"
+msgstr ""
+
+#. TRANSLATORS: The state of a package, i.e. not installed
+#: ../lib/packagekit-glib2/pk-console-shared.c:451
+msgid "Available"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:469
+msgid "Downloading"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:473
+msgid "Updating"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in present tense
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:477
+#: ../lib/packagekit-glib2/pk-console-shared.c:597
+msgid "Installing"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in present tense
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:481
+#: ../lib/packagekit-glib2/pk-console-shared.c:593
+msgid "Removing"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:485
+msgid "Cleaning up"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:489
+msgid "Obsoleting"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:493
+msgid "Reinstalling"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in past tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:511
+msgid "Downloaded"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in past tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:523
+msgid "Removed"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in past tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:527
+msgid "Cleaned up"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in past tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:531
+msgid "Obsoleted"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in past tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:535
+msgid "Reinstalled"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:553
+msgid "Unknown role type"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:557
+msgid "Getting dependencies"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:561
+msgid "Getting update details"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:565
+msgid "Getting details"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:569
+msgid "Getting requires"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:573
+msgid "Getting updates"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:577
+msgid "Searching by details"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:581
+msgid "Searching by file"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:585
+msgid "Searching groups"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:589
+msgid "Searching by name"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:601
+msgid "Installing files"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:605
+msgid "Refreshing cache"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:609
+msgid "Updating packages"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:613
+msgid "Updating system"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:617
+msgid "Canceling"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:625
+msgid "Getting repositories"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:629
+msgid "Enabling repository"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:633
+msgid "Setting data"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:637
+msgid "Resolving"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:641
+msgid "Getting file list"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:645
+msgid "Getting provides"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:649
+msgid "Installing signature"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:653
+msgid "Getting packages"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:657
+msgid "Accepting EULA"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:665
+msgid "Getting upgrades"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:669
+msgid "Getting categories"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:673
+msgid "Getting transactions"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:677
+#: ../lib/packagekit-glib2/pk-console-shared.c:681
+msgid "Simulating install"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:685
+msgid "Simulating remove"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:689
+msgid "Simulating update"
+msgstr ""
+
+#. TRANSLATORS: turn on all debugging
+#: ../lib/packagekit-glib2/pk-debug.c:133
+msgid "Show debugging information for all files"
+msgstr ""
+
+#: ../lib/packagekit-glib2/pk-debug.c:201
+msgid "Debugging Options"
+msgstr ""
+
+#: ../lib/packagekit-glib2/pk-debug.c:201
+msgid "Show debugging options"
+msgstr ""
+
+#. TRANSLATORS: ask the user if they are comfortable installing insecure
+#. packages
+#: ../lib/packagekit-glib2/pk-task-text.c:67
+msgid "Do you want to allow installing of unsigned software?"
+msgstr ""
+
+#. TRANSLATORS: tell the user we've not done anything
+#: ../lib/packagekit-glib2/pk-task-text.c:72
+msgid "The unsigned software will not be installed."
+msgstr ""
+
+#. TRANSLATORS: the package repository is signed by a key that is not
+#. recognised
+#: ../lib/packagekit-glib2/pk-task-text.c:121
+msgid "Software source signature required"
+msgstr ""
+
+#. TRANSLATORS: the package repository name
+#: ../lib/packagekit-glib2/pk-task-text.c:127
+msgid "Software source name"
+msgstr ""
+
+#. TRANSLATORS: the key URL
+#: ../lib/packagekit-glib2/pk-task-text.c:130
+msgid "Key URL"
+msgstr ""
+
+#. TRANSLATORS: the username of the key
+#: ../lib/packagekit-glib2/pk-task-text.c:133
+msgid "Key user"
+msgstr ""
+
+#. TRANSLATORS: the key ID, usually a few hex digits
+#: ../lib/packagekit-glib2/pk-task-text.c:136
+msgid "Key ID"
+msgstr ""
+
+#. TRANSLATORS: the key fingerprint, again, yet more hex
+#: ../lib/packagekit-glib2/pk-task-text.c:139
+msgid "Key fingerprint"
+msgstr ""
+
+#. TRANSLATORS: the timestamp (a bit like a machine readable time)
+#: ../lib/packagekit-glib2/pk-task-text.c:142
+msgid "Key Timestamp"
+msgstr ""
+
+#. TRANSLATORS: ask the user if they want to import
+#: ../lib/packagekit-glib2/pk-task-text.c:155
+msgid "Do you accept this signature?"
+msgstr ""
+
+#. TRANSLATORS: tell the user we've not done anything
+#: ../lib/packagekit-glib2/pk-task-text.c:160
+msgid "The signature was not accepted."
+msgstr ""
+
+#. TRANSLATORS: this is another name for a software licence that has to be
+#. read before installing
+#: ../lib/packagekit-glib2/pk-task-text.c:203
+msgid "End user licence agreement required"
+msgstr ""
+
+#. TRANSLATORS: the EULA text itself (long and boring)
+#: ../lib/packagekit-glib2/pk-task-text.c:212
+msgid "Agreement"
+msgstr ""
+
+#. TRANSLATORS: ask the user if they've read and accepted the EULA
+#: ../lib/packagekit-glib2/pk-task-text.c:221
+msgid "Do you accept this agreement?"
+msgstr ""
+
+#. TRANSLATORS: tell the user we've not done anything
+#: ../lib/packagekit-glib2/pk-task-text.c:226
+msgid "The agreement was not accepted."
+msgstr ""
+
+#. TRANSLATORS: the user needs to change media inserted into the computer
+#: ../lib/packagekit-glib2/pk-task-text.c:265
+msgid "Media change required"
+msgstr ""
+
+#. TRANSLATORS: the type, e.g. DVD, CD, etc
+#: ../lib/packagekit-glib2/pk-task-text.c:268
+msgid "Media type"
+msgstr ""
+
+#. TRANSLATORS: the media label, usually like 'disk-1of3'
+#: ../lib/packagekit-glib2/pk-task-text.c:271
+msgid "Media label"
+msgstr ""
+
+#. TRANSLATORS: the media description, usually like 'Fedora 12 disk 5'
+#: ../lib/packagekit-glib2/pk-task-text.c:274
+msgid "Text"
+msgstr ""
+
+#. TRANSLATORS: ask the user to insert the media
+#: ../lib/packagekit-glib2/pk-task-text.c:280
+msgid "Please insert the correct media"
+msgstr ""
+
+#. TRANSLATORS: tell the user we've not done anything as they are lazy
+#: ../lib/packagekit-glib2/pk-task-text.c:285
+msgid "The correct media was not inserted."
+msgstr ""
+
+#. TRANSLATORS: When processing, we might have to remove other dependencies
+#: ../lib/packagekit-glib2/pk-task-text.c:300
+msgid "The following packages have to be removed:"
+msgstr ""
+
+#. TRANSLATORS: When processing, we might have to install other dependencies
+#: ../lib/packagekit-glib2/pk-task-text.c:305
+msgid "The following packages have to be installed:"
+msgstr ""
+
+#. TRANSLATORS: When processing, we might have to update other dependencies
+#: ../lib/packagekit-glib2/pk-task-text.c:310
+msgid "The following packages have to be updated:"
+msgstr ""
+
+#. TRANSLATORS: When processing, we might have to reinstall other dependencies
+#: ../lib/packagekit-glib2/pk-task-text.c:315
+msgid "The following packages have to be reinstalled:"
+msgstr ""
+
+#. TRANSLATORS: When processing, we might have to downgrade other dependencies
+#: ../lib/packagekit-glib2/pk-task-text.c:320
+msgid "The following packages have to be downgraded:"
+msgstr ""
+
+#. TRANSLATORS: ask the user if the proposed changes are okay
+#: ../lib/packagekit-glib2/pk-task-text.c:380
+msgid "Proceed with changes?"
+msgstr ""
+
+#. TRANSLATORS: tell the user we didn't do anything
+#: ../lib/packagekit-glib2/pk-task-text.c:385
+msgid "The transaction did not proceed."
+msgstr ""
+
+#. SECURITY:
+#. - Normal users do not require admin authentication to accept new
+#. licence agreements.
+#. - Change this to 'auth_admin' for environments where users should not
+#. be given the option to make legal decisions.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:7
+msgid "Accept EULA"
+msgstr ""
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h: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"
+msgstr ""
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:10
+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:13
+msgid "Authentication is required to install a signed package"
+msgstr ""
+
+#: ../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:15
+msgid "Authentication is required to refresh the system sources"
+msgstr ""
+
+#: ../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:17
+msgid "Authentication is required to remove packages"
+msgstr ""
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:18
+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 ""
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:21
+msgid "Authentication is required to upgrade the operating system"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users are allowed to cancel their own task without
+#. authentication, but a different user id needs the admin password
+#. to cancel another users task.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:27
+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:34
+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:40
+msgid "Change software source parameters"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users do not need authentication to install signed packages
+#. from signed repositories, as this cannot exploit a system.
+#. - Paranoid users (or parents!) can change this to 'auth_admin' or
+#. 'auth_admin_keep'.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:47
+msgid "Install signed package"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users require admin authentication to install untrusted or
+#. unrecognised packages, as allowing users to do this without a
+#. password would be a massive security hole.
+#. - This is not retained as each package should be authenticated.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:54
+msgid "Install untrusted local file"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users do not require admin authentication to refresh the
+#. cache, as this doesn't actually install or remove software.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:59
+msgid "Refresh system sources"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users require admin authentication to rebind a driver
+#. so that it works after we install firmware.
+#. - This should not be set to 'yes' as unprivileged users could then
+#. try to rebind drivers in use, for instance security authentication
+#. devices.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:67
+msgid "Reload a device"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users require admin authentication to remove packages as
+#. this can make the system unbootable or stop other applications from
+#. working.
+#. - Be sure to close the tool used to remove the packages after the
+#. admin authentication has been obtained, otherwise packages can still
+#. be removed. If this is not possible, change this authentication to
+#. 'auth_admin'.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:77
+msgid "Remove package"
+msgstr ""
+
+#. 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:83
+msgid "Rollback to a previous transaction"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users do not require admin authentication to set the proxy
+#. used for downloading packages.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:88
+msgid "Set network proxy"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users require admin authentication to add signing keys.
+#. - This implies adding an explicit trust, and should not be granted
+#. without a secure authentication.
+#. - This is not kept as each package should be authenticated.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:95
+msgid "Trust a key used for signing packages"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users do not require admin authentication to update the
+#. system as the packages will be signed, and the action is required
+#. to update the system when unattended.
+#. - Changing this to anything other than 'yes' will break unattended
+#. updates.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:103
+msgid "Update packages"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users require admin authentication to upgrade the disto as
+#. this can make the system unbootable or stop other applications from
+#. working.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:109
+msgid "Upgrade System"
+msgstr ""
+
+#. TRANSLATORS: failed due to DBus security
+#: ../src/pk-main.c:87
+msgid "Startup failed due to security policies on this machine."
+msgstr ""
+
+#. TRANSLATORS: only two ways this can fail...
+#: ../src/pk-main.c:89
+msgid "This can happen for two reasons:"
+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 ""
+
+#. 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 ""
+
+#. TRANSLATORS: a backend is the system package tool, e.g. yum, apt
+#: ../src/pk-main.c:200
+msgid "Packaging backend to use, e.g. dummy"
+msgstr ""
+
+#. TRANSLATORS: if we should run in the background
+#: ../src/pk-main.c:203
+msgid "Daemonize and detach from the terminal"
+msgstr ""
+
+#. TRANSLATORS: if we should not monitor how long we are inactive for
+#: ../src/pk-main.c:206
+msgid "Disable the idle timer"
+msgstr ""
+
+#. TRANSLATORS: show version
+#: ../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:212
+msgid "Exit after a small delay"
+msgstr ""
+
+#. TRANSLATORS: exit straight away, used for automatic profiling
+#: ../src/pk-main.c:215
+msgid "Exit after the engine has loaded"
+msgstr ""
+
+#. TRANSLATORS: describing the service that is running
+#: ../src/pk-main.c:230
+msgid "PackageKit service"
+msgstr ""
+
+#. TRANSLATORS: fatal error, dbus is not running
+#: ../src/pk-main.c:267
+msgid "Cannot connect to the system bus"
+msgstr ""
+
+#. TRANSLATORS: cannot register on system bus, unknown reason -- geeky error
+#. follows
+#: ../src/pk-main.c:316
+msgid "Error trying to start:"
+msgstr ""
+
+#: ../src/pk-polkit-action-lookup.c:150
+msgid "To install debugging packages, extra sources need to be enabled"
+msgstr ""
+
+#. 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 ""
+
+#: ../src/pk-polkit-action-lookup.c:176
+msgid "Do not update this package unless you are sure it is safe to do so."
+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 ""
+
+#: ../src/pk-polkit-action-lookup.c:195
+msgid "Do not install this package unless you are sure it is safe to do so."
+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 ""
+
+#. TRANSLATORS: too many packages to list each one
+#: ../src/pk-polkit-action-lookup.c:273
+msgid "Many packages"
+msgstr ""
+
+#. TRANSLATORS: if the transaction is forced to install only trusted packages
+#: ../src/pk-polkit-action-lookup.c:339
+msgid "Only trusted"
+msgstr ""
diff --git a/po/fi.po b/po/fi.po
index 784ec14..2ef066a 100644
--- a/po/fi.po
+++ b/po/fi.po
@@ -8,9 +8,9 @@ msgstr ""
 "Project-Id-Version: PackageKit\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2010-12-13 12:23+0000\n"
-"PO-Revision-Date: 2011-03-04 18:34+0000\n"
+"PO-Revision-Date: 2011-03-22 15:37+0000\n"
 "Last-Translator: vpv <vpivaini at cs.helsinki.fi>\n"
-"Language-Team: Finnish <None>\n"
+"Language-Team: LANGUAGE <LL at li.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
diff --git a/po/fr.po b/po/fr.po
index 0c470ae..2e99a22 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -8,9 +8,9 @@ msgstr ""
 "Project-Id-Version: PackageKit\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2010-12-13 12:23+0000\n"
-"PO-Revision-Date: 2011-03-04 18:34+0000\n"
-"Last-Translator: hughsie <richard at hughsie.com>\n"
-"Language-Team: LANGUAGE <LL at li.org>\n"
+"PO-Revision-Date: 2011-03-22 15:37+0000\n"
+"Last-Translator: claudep <claude at 2xlibre.net>\n"
+"Language-Team: French <traduc at traduc.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
@@ -80,7 +80,7 @@ msgstr "Nom réel"
 
 #: ../client/pk-console.c:210
 msgid "Affected packages:"
-msgstr "Paquets concernés :"
+msgstr "Paquets concernés :"
 
 #: ../client/pk-console.c:212
 msgid "Affected packages: None"
@@ -130,7 +130,7 @@ msgstr "Icône"
 #. TRANSLATORS: this is a header for the package that can be updated
 #: ../client/pk-console.c:339
 msgid "Details about the update:"
-msgstr "Informations complémentaires à propos de la mise à jour :"
+msgstr "Informations complémentaires à propos de la mise à jour :"
 
 #. TRANSLATORS: details about the update, package name and version
 #. TRANSLATORS: the package that is being processed
@@ -197,7 +197,7 @@ msgstr "État"
 #. TRANSLATORS: details about the update, date the update was issued
 #: ../client/pk-console.c:384
 msgid "Issued"
-msgstr "Distribué"
+msgstr "Publié"
 
 #. TRANSLATORS: details about the update, date the update was updated
 #. TRANSLATORS: The action of the package, in past tense
@@ -218,12 +218,12 @@ msgstr "Désactivé"
 #. TRANSLATORS: a package requires the system to be restarted
 #: ../client/pk-console.c:459
 msgid "System restart required by:"
-msgstr "Redémarrage du système requis par :"
+msgstr "Redémarrage du système requis par :"
 
 #. TRANSLATORS: a package requires the session to be restarted
 #: ../client/pk-console.c:462
 msgid "Session restart required:"
-msgstr "Redémarrage de la session requis par :"
+msgstr "Redémarrage de la session requis par :"
 
 #. TRANSLATORS: a package requires the system to be restarted due to a
 #. security update
@@ -240,7 +240,7 @@ msgstr "Redémarrage de la session (sécurité) requis :"
 #. TRANSLATORS: a package requires the application to be restarted
 #: ../client/pk-console.c:471
 msgid "Application restart required by:"
-msgstr "Redémarrage de l'application requis par :"
+msgstr "Redémarrage de l'application requis par :"
 
 #. TRANSLATORS: This a list of details about the package
 #: ../client/pk-console.c:506
@@ -276,7 +276,7 @@ msgstr "État"
 #. TRANSLATORS: the results from the transaction
 #: ../client/pk-console.c:678
 msgid "Results:"
-msgstr "Résultats :"
+msgstr "Résultats :"
 
 #. TRANSLATORS: we failed to get any results, which is pretty fatal in my book
 #: ../client/pk-console.c:685
@@ -287,7 +287,7 @@ msgstr "Erreur fatale"
 #. can be updated
 #: ../client/pk-console.c:701
 msgid "There are no packages to update."
-msgstr ""
+msgstr "Aucun paquet ne doit être mis à jour."
 
 #. TRANSLATORS: the transaction failed in a way we could not expect
 #: ../client/pk-console.c:704
@@ -302,7 +302,7 @@ msgstr "Il n'y a pas de mise à jour disponible pour le moment."
 
 #: ../client/pk-console.c:756
 msgid "There are no upgrades available at this time."
-msgstr ""
+msgstr "Il n'y a pas de mise à niveau disponible pour le moment."
 
 #. TRANSLATORS: a package needs to restart their system
 #: ../client/pk-console.c:823
@@ -340,6 +340,8 @@ msgid ""
 "Expected package name, actually got file. Try using 'pkcon install-local %s'"
 " instead."
 msgstr ""
+"Nom de paquet attendu, mais un fichier a été obtenu. Essayez d'utiliser « "
+"pkcon install-local %s » à la place."
 
 #. TRANSLATORS: There was an error getting the list of files for the package.
 #. The detailed error follows
@@ -381,7 +383,7 @@ msgstr "Cet outil n'a pas pu trouver tous les paquets : %s"
 #. without a paddle
 #: ../client/pk-console.c:1119
 msgid "The daemon crashed mid-transaction!"
-msgstr "Le démon a échoué en cours de transaction."
+msgstr "Le service a échoué en cours de transaction."
 
 #. TRANSLATORS: This is the header to the --help menu
 #: ../client/pk-console.c:1153
@@ -414,7 +416,7 @@ msgstr "Sélectionne le filtre, par ex. : installé"
 #. TRANSLATORS: command line argument, use a non-standard install prefix
 #: ../client/pk-console.c:1281
 msgid "Set the install root, e.g. '/' or '/mnt/ltsp'"
-msgstr ""
+msgstr "Définit la racine d'installation, par ex. « / » ou « /mnt/ltsp »"
 
 #. TRANSLATORS: command line argument, work asynchronously
 #: ../client/pk-console.c:1284
@@ -446,7 +448,7 @@ msgstr ""
 #. TRANSLATORS: command line argument, just output without fancy formatting
 #: ../client/pk-console.c:1296
 msgid "The maximum metadata cache age. Use -1 for 'never'."
-msgstr ""
+msgstr "L'âge maximal du cache des métadonnées. Utilisez -1 pour « jamais »."
 
 #. TRANSLATORS: we failed to contact the daemon
 #: ../client/pk-console.c:1333
@@ -456,12 +458,12 @@ msgstr "Impossible de contacter PackageKit"
 #. TRANSLATORS: The user specified an incorrect filter
 #: ../client/pk-console.c:1381
 msgid "The proxy could not be set"
-msgstr ""
+msgstr "Impossible de définir le serveur mandataire"
 
 #. TRANSLATORS: The user specified an incorrect filter
 #: ../client/pk-console.c:1393
 msgid "The install root could not be set"
-msgstr ""
+msgstr "Impossible de définir la racine d'installation"
 
 #. TRANSLATORS: The user specified an incorrect filter
 #: ../client/pk-console.c:1405
@@ -545,7 +547,7 @@ msgstr "Vous devez indiquer un nom de dépôt, un paramètre et une valeur"
 #. TRANSLATORS: The user didn't specify what action to use
 #: ../client/pk-console.c:1621
 msgid "An action, e.g. 'update-system' is required"
-msgstr "Vous devez indiquer une action, par exemple « update-system »"
+msgstr "Vous devez indiquer une action, par exemple « update-system »"
 
 #. TRANSLATORS: The user specified an invalid action
 #: ../client/pk-console.c:1628
@@ -569,12 +571,14 @@ msgstr "Vous devez indiquer une chaîne de fourniture de paquet"
 #. TRANSLATORS: The user did not provide a distro name
 #: ../client/pk-console.c:1714
 msgid "A distribution name is required"
-msgstr ""
+msgstr "Vous devez indiquer un nom de distribution"
 
 #. TRANSLATORS: The user did not provide an upgrade type
 #: ../client/pk-console.c:1720
 msgid "An upgrade type is required, e.g. 'minimal', 'default' or 'complete'"
 msgstr ""
+"Vous devez indiquer un type de mise à niveau, par ex. « minimal », « default"
+" » ou « complete »"
 
 #. TRANSLATORS: The user tried to use an unsupported option on the command
 #. line
@@ -599,11 +603,13 @@ msgstr "Définisez le nom du fichier de dépendances à exclure"
 msgid ""
 "The output file or directory (the current directory is used if omitted)"
 msgstr ""
+"Le fichier ou répertoire de sortie (si omis, le répertoire actif est "
+"utilisé)"
 
 #. TRANSLATORS: put a list of packages in the pack
 #: ../client/pk-generate-pack.c:259
 msgid "The package to be put into the service pack"
-msgstr "Le paquet à intégrer au le service pack"
+msgstr "Le paquet à intégrer au service pack"
 
 #. TRANSLATORS: put all pending updates in the pack
 #: ../client/pk-generate-pack.c:262
@@ -629,7 +635,7 @@ msgstr "Vous devez indiquer un répertoire ou un nom de fichier de sortie"
 #. startup
 #: ../client/pk-generate-pack.c:340
 msgid "The daemon failed to startup"
-msgstr ""
+msgstr "Le service n'a pas pu démarrer"
 
 #. TRANSLATORS: This is when the backend doesn't have the capability to get-
 #. depends
@@ -660,7 +666,7 @@ msgstr ""
 #. TRANSLATORS: This is when file already exists
 #: ../client/pk-generate-pack.c:391
 msgid "A pack with the same name already exists, do you want to overwrite it?"
-msgstr "Un pack avec un nom identique existe déjà, voulez-vous le remplacer ?"
+msgstr "Un pack avec un nom identique existe déjà, voulez-vous le remplacer ?"
 
 #. TRANSLATORS: This is when the pack was not overwritten
 #: ../client/pk-generate-pack.c:394
@@ -671,7 +677,7 @@ msgstr "Le pack n'a pas été remplacé."
 #. directory name follows
 #: ../client/pk-generate-pack.c:407
 msgid "Failed to create directory:"
-msgstr "Impossible de créer un répertoire :"
+msgstr "Impossible de créer un répertoire :"
 
 #. TRANSLATORS: This is when the list of packages from the remote computer
 #. cannot be opened
@@ -689,7 +695,7 @@ msgstr "Recherche du nom du paquet."
 #: ../client/pk-generate-pack.c:432
 #, c-format
 msgid "Failed to find package '%s': %s"
-msgstr "Impossible de trouver le paquet « %s » : %s"
+msgstr "Impossible de trouver le paquet « %s » : %s"
 
 #. TRANSLATORS: This is telling the user we are in the process of making the
 #. pack
@@ -701,13 +707,13 @@ msgstr "Création du service pack..."
 #: ../client/pk-generate-pack.c:455
 #, c-format
 msgid "Service pack created '%s'"
-msgstr "Service pack crée « %s »"
+msgstr "Service pack « %s » créé"
 
 #. TRANSLATORS: we failed to make te file
 #: ../client/pk-generate-pack.c:460
 #, c-format
 msgid "Failed to create '%s': %s"
-msgstr "Impossible de créer « %s » : %s"
+msgstr "Impossible de créer « %s » : %s"
 
 #: ../client/pk-monitor.c:284
 msgid "Failed to get daemon state"
@@ -715,7 +721,7 @@ msgstr "Impossible d'obtenir l'état du service"
 
 #: ../client/pk-monitor.c:349
 msgid "Failed to get properties"
-msgstr ""
+msgstr "Impossible d'obtenir les propriétés"
 
 #. TRANSLATORS: this is a program that monitors PackageKit
 #: ../client/pk-monitor.c:387
@@ -769,7 +775,7 @@ msgstr "Version"
 #. TRANSLATORS: noting found, so can't install
 #: ../contrib/browser-plugin/pk-plugin-install.c:545
 msgid "No packages found for your system"
-msgstr "Aucun paquet trouvé pour système"
+msgstr "Aucun paquet trouvé pour votre système"
 
 #. TRANSLATORS: package is being installed
 #: ../contrib/browser-plugin/pk-plugin-install.c:550
@@ -785,7 +791,7 @@ msgstr "Téléchargement des détails à propos des sources de logiciels."
 #: ../contrib/command-not-found/pk-command-not-found.c:370
 msgid "Downloading filelists (this may take some time to complete)."
 msgstr ""
-"Téléchargement des listes de fichiers (Cela peut prendre un certain temps)."
+"Téléchargement des listes de fichiers (cela peut prendre un certain temps)."
 
 #. TRANSLATORS: waiting for native lock
 #: ../contrib/command-not-found/pk-command-not-found.c:374
@@ -805,7 +811,7 @@ msgstr "Impossible de rechercher des fichiers"
 #. TRANSLATORS: the transaction failed in a way we could not expect
 #: ../contrib/command-not-found/pk-command-not-found.c:456
 msgid "Getting the list of files failed"
-msgstr ""
+msgstr "Échec d'obtention de la liste des fichiers"
 
 #. TRANSLATORS: we failed to launch the executable, the error follows
 #: ../contrib/command-not-found/pk-command-not-found.c:602
@@ -827,7 +833,7 @@ msgstr "Commande inconnue de PackageKit"
 #. * the style of bash itself -- apologies
 #: ../contrib/command-not-found/pk-command-not-found.c:739
 msgid "command not found"
-msgstr ""
+msgstr "commande inconnue"
 
 #. TRANSLATORS: tell the user what we think the command is
 #: ../contrib/command-not-found/pk-command-not-found.c:757
@@ -862,7 +868,7 @@ msgstr "Le paquet fournissant ce fichier est :"
 #, c-format
 msgid "Install package '%s' to provide command '%s'?"
 msgstr ""
-"Voulez-vous installer le paquet « %s » qui fournit la commande « %s » ?"
+"Voulez-vous installer le paquet « %s » qui fournit la commande « %s » ?"
 
 #. TRANSLATORS: Show the user a list of packages that provide this command
 #: ../contrib/command-not-found/pk-command-not-found.c:853
@@ -906,7 +912,7 @@ msgstr ""
 #. specified
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:519
 msgid "Do not install dependencies of the core packages"
-msgstr "Ne pas installer les dépendances des paquets indiqués"
+msgstr "Ne pas installer les dépendances des paquets de base"
 
 #. command line argument, do we operate quietly
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:522
@@ -923,7 +929,7 @@ msgstr "Installateur d'information de débogage PackageKit"
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:554
 #, c-format
 msgid "ERROR: Specify package names to install."
-msgstr "ERREUR : Veuillez indiquer les noms des paquets à installer."
+msgstr "ERREUR : veuillez indiquer les noms des paquets à installer."
 
 #. TRANSLATORS: we are getting the list of repositories
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:590
@@ -939,7 +945,7 @@ msgstr "Récupération de la liste des sources"
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:870
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:914
 msgid "FAILED."
-msgstr "ÉCHOUÉ."
+msgstr "ÉCHEC."
 
 #. TRANSLATORS: all completed 100%
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:615
@@ -1170,7 +1176,7 @@ msgstr "Impossible de vérifier le chemin du périphérique"
 #. TRANSLATORS: we're going to try
 #: ../contrib/device-rebind/pk-device-rebind.c:361
 msgid "Attempting to rebind device"
-msgstr "Essai de reconnection du périphérique"
+msgstr "Essai de reconnexion du périphérique"
 
 #. TRANSLATORS: we failed to release the current driver
 #: ../contrib/device-rebind/pk-device-rebind.c:366
@@ -1187,7 +1193,7 @@ msgstr "Liste des paquets de PackageKit"
 
 #: ../data/packagekit-servicepack.xml.in.h:1
 msgid "PackageKit Service Pack"
-msgstr "Service Pack PackageKit"
+msgstr "Service pack PackageKit"
 
 #: ../lib/packagekit-glib2/pk-console-shared.c:63
 #, c-format
@@ -1198,12 +1204,12 @@ msgstr "Veuillez saisir un nombre entre 1 et %i : "
 #. is a list of possible packages
 #: ../lib/packagekit-glib2/pk-console-shared.c:189
 msgid "More than one package matches:"
-msgstr "Il y a plusieurs paquets correspondants :"
+msgstr "Il y a plusieurs paquets correspondants :"
 
 #. TRANSLATORS: This finds out which package in the list to use
 #: ../lib/packagekit-glib2/pk-console-shared.c:200
 msgid "Please choose the correct package: "
-msgstr "Veuillez choisir le paquet correct : "
+msgstr "Veuillez choisir le paquet correct : "
 
 #. TRANSLATORS: This is when the transaction status is not known
 #: ../lib/packagekit-glib2/pk-console-shared.c:255
@@ -1296,7 +1302,7 @@ msgstr "Test des changements"
 #. database
 #: ../lib/packagekit-glib2/pk-console-shared.c:323
 msgid "Committing changes"
-msgstr "Inscription des changements"
+msgstr "Validation des changements"
 
 #. TRANSLATORS: transaction state, requesting data from a server
 #: ../lib/packagekit-glib2/pk-console-shared.c:327
@@ -1356,7 +1362,7 @@ msgstr "Chargement du cache"
 #. TRANSLATORS: transaction state, scanning for running processes
 #: ../lib/packagekit-glib2/pk-console-shared.c:371
 msgid "Scanning applications"
-msgstr "Scan des applications"
+msgstr "Analyse des applications"
 
 #. TRANSLATORS: transaction state, generating a list of packages installed on
 #. the system
@@ -1567,7 +1573,7 @@ msgstr "Installation des fichiers"
 #. TRANSLATORS: The role of the transaction, in present tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:605
 msgid "Refreshing cache"
-msgstr "Rafraichissement du cache"
+msgstr "Rafraîchissement du cache"
 
 #. TRANSLATORS: The role of the transaction, in present tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:609
@@ -1723,7 +1729,7 @@ msgstr "Empreinte horaire de la clé"
 #. TRANSLATORS: ask the user if they want to import
 #: ../lib/packagekit-glib2/pk-task-text.c:155
 msgid "Do you accept this signature?"
-msgstr "Acceptez-vous cette signature ?"
+msgstr "Acceptez-vous cette signature ?"
 
 #. TRANSLATORS: tell the user we've not done anything
 #: ../lib/packagekit-glib2/pk-task-text.c:160
@@ -1846,6 +1852,8 @@ msgid ""
 "Authentication is required to change the location used to decompress "
 "packages"
 msgstr ""
+"Authentification requise pour modifier l'emplacement de décompression des "
+"paquets"
 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:12
 msgid ""
@@ -1896,6 +1904,7 @@ msgstr "Authentification requise pour mettre à jour des paquets"
 #: ../policy/org.freedesktop.packagekit.policy.in.h:21
 msgid "Authentication is required to upgrade the operating system"
 msgstr ""
+"Authentification requise pour mettre à niveau le système d'exploitation"
 
 #. SECURITY:
 #. - Normal users are allowed to cancel their own task without
@@ -1914,7 +1923,7 @@ msgstr "Annulation de la tâche externe"
 #. 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:34
 msgid "Change location that packages are installed"
-msgstr ""
+msgstr "Modifier l'endroit où les paquets sont installés"
 
 #. SECURITY:
 #. - Normal users require admin authentication to enable or disable
@@ -1923,7 +1932,7 @@ msgstr ""
 #. 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:40
 msgid "Change software source parameters"
-msgstr "Modifier les paramètres des dépôts"
+msgstr "Modifier les paramètres des dépôts logiciels"
 
 #. SECURITY:
 #. - Normal users do not need authentication to install signed packages
@@ -1951,7 +1960,7 @@ msgstr "Installer un fichier local non signé"
 #. 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:59
 msgid "Refresh system sources"
-msgstr "Rafraîchir la liste des paquets"
+msgstr "Actualiser la liste des paquets"
 
 #. SECURITY:
 #. - Normal users require admin authentication to rebind a driver
@@ -1984,7 +1993,7 @@ msgstr "Supprimer un paquet"
 #. 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:83
 msgid "Rollback to a previous transaction"
-msgstr "Restauration"
+msgstr "Restauration à une transaction précédente"
 
 #. SECURITY:
 #. - Normal users do not require admin authentication to set the proxy
@@ -2022,7 +2031,7 @@ msgstr "Mettre à jour les paquets"
 #. 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:109
 msgid "Upgrade System"
-msgstr ""
+msgstr "Mettre à niveau le système"
 
 #. TRANSLATORS: failed due to DBus security
 #: ../src/pk-main.c:87
@@ -2048,7 +2057,7 @@ msgid ""
 "directory:"
 msgstr ""
 "Le fichier « org.freedesktop.PackageKit.conf » n'est pas installé dans le "
-"répertoire système :"
+"répertoire système :"
 
 #. TRANSLATORS: a backend is the system package tool, e.g. yum, apt
 #: ../src/pk-main.c:200
@@ -2058,7 +2067,7 @@ msgstr "Moteur du gestionnaire de paquets, par ex. : dummy"
 #. TRANSLATORS: if we should run in the background
 #: ../src/pk-main.c:203
 msgid "Daemonize and detach from the terminal"
-msgstr "Crée un démon et se sépare du terminal"
+msgstr "Crée un service et se sépare du terminal"
 
 #. TRANSLATORS: if we should not monitor how long we are inactive for
 #: ../src/pk-main.c:206
diff --git a/po/ga.po b/po/ga.po
new file mode 100644
index 0000000..541352e
--- /dev/null
+++ b/po/ga.po
@@ -0,0 +1,2101 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL at ADDRESS>, YEAR.
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: PackageKit\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-12-13 12:23+0000\n"
+"PO-Revision-Date: 2011-05-04 09:48+0000\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Language-Team: Irish (http://www.transifex.net/projects/p/freedesktop/team/ga/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ga\n"
+"Plural-Forms: nplurals=5; plural=(n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n<11 ? 3 : 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:174 ../client/pk-console.c:596
+msgid "Transaction"
+msgstr ""
+
+#. TRANSLATORS: this is the time the transaction was started in system
+#. timezone
+#: ../client/pk-console.c:176
+msgid "System time"
+msgstr ""
+
+#. TRANSLATORS: this is if the transaction succeeded or not
+#: ../client/pk-console.c:178
+msgid "Succeeded"
+msgstr ""
+
+#: ../client/pk-console.c:178
+msgid "True"
+msgstr ""
+
+#: ../client/pk-console.c:178
+msgid "False"
+msgstr ""
+
+#. TRANSLATORS: this is the transactions role, e.g. "update-system"
+#. TRANSLATORS: the trasaction role, e.g. update-system
+#: ../client/pk-console.c:180 ../src/pk-polkit-action-lookup.c:332
+msgid "Role"
+msgstr ""
+
+#. TRANSLATORS: this is The duration of the transaction
+#: ../client/pk-console.c:185
+msgid "Duration"
+msgstr ""
+
+#: ../client/pk-console.c:185
+msgid "(seconds)"
+msgstr ""
+
+#. TRANSLATORS: this is The command line used to do the action
+#. TRANSLATORS: the command line of the thing that wants the authentication
+#: ../client/pk-console.c:189 ../src/pk-polkit-action-lookup.c:346
+msgid "Command line"
+msgstr ""
+
+#. TRANSLATORS: this is the user ID of the user that started the action
+#: ../client/pk-console.c:191
+msgid "User ID"
+msgstr ""
+
+#. TRANSLATORS: this is the username, e.g. hughsie
+#: ../client/pk-console.c:198
+msgid "Username"
+msgstr ""
+
+#. TRANSLATORS: this is the users real name, e.g. "Richard Hughes"
+#: ../client/pk-console.c:202
+msgid "Real name"
+msgstr ""
+
+#: ../client/pk-console.c:210
+msgid "Affected packages:"
+msgstr ""
+
+#: ../client/pk-console.c:212
+msgid "Affected packages: None"
+msgstr ""
+
+#. TRANSLATORS: this is the distro, e.g. Fedora 10
+#: ../client/pk-console.c:247
+msgid "Distribution"
+msgstr ""
+
+#. TRANSLATORS: this is type of update, stable or testing
+#: ../client/pk-console.c:249
+msgid "Type"
+msgstr ""
+
+#. TRANSLATORS: this is any summary text describing the upgrade
+#. TRANSLATORS: this is the summary of the group
+#: ../client/pk-console.c:251 ../client/pk-console.c:290
+msgid "Summary"
+msgstr ""
+
+#. TRANSLATORS: this is the group category name
+#: ../client/pk-console.c:279
+msgid "Category"
+msgstr ""
+
+#. TRANSLATORS: this is group identifier
+#: ../client/pk-console.c:281
+msgid "ID"
+msgstr ""
+
+#. TRANSLATORS: this is the parent group
+#: ../client/pk-console.c:284
+msgid "Parent"
+msgstr ""
+
+#. TRANSLATORS: this is the name of the parent group
+#: ../client/pk-console.c:287
+msgid "Name"
+msgstr ""
+
+#. TRANSLATORS: this is preferred icon for the group
+#: ../client/pk-console.c:293
+msgid "Icon"
+msgstr ""
+
+#. TRANSLATORS: this is a header for the package that can be updated
+#: ../client/pk-console.c:339
+msgid "Details about the update:"
+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:345 ../client/pk-console.c:615
+#: ../lib/packagekit-glib2/pk-task-text.c:124
+#: ../lib/packagekit-glib2/pk-task-text.c:206
+#: ../src/pk-polkit-action-lookup.c:357
+msgid "Package"
+msgid_plural "Packages"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+
+#. TRANSLATORS: details about the update, any packages that this update
+#. updates
+#: ../client/pk-console.c:348
+msgid "Updates"
+msgstr ""
+
+#. TRANSLATORS: details about the update, any packages that this update
+#. obsoletes
+#: ../client/pk-console.c:352
+msgid "Obsoletes"
+msgstr ""
+
+#. TRANSLATORS: details about the update, the vendor URLs
+#. TRANSLATORS: the vendor (e.g. vmware) that is providing the EULA
+#: ../client/pk-console.c:356 ../lib/packagekit-glib2/pk-task-text.c:209
+msgid "Vendor"
+msgstr ""
+
+#. TRANSLATORS: details about the update, the bugzilla URLs
+#: ../client/pk-console.c:360
+msgid "Bugzilla"
+msgstr ""
+
+#. TRANSLATORS: details about the update, the CVE URLs
+#: ../client/pk-console.c:364
+msgid "CVE"
+msgstr ""
+
+#. TRANSLATORS: details about the update, if the package requires a restart
+#: ../client/pk-console.c:368
+msgid "Restart"
+msgstr ""
+
+#. TRANSLATORS: details about the update, any description of the update
+#: ../client/pk-console.c:372
+msgid "Update text"
+msgstr ""
+
+#. TRANSLATORS: details about the update, the changelog for the package
+#: ../client/pk-console.c:376
+msgid "Changes"
+msgstr ""
+
+#. TRANSLATORS: details about the update, the ongoing state of the update
+#: ../client/pk-console.c:380
+msgid "State"
+msgstr ""
+
+#. TRANSLATORS: details about the update, date the update was issued
+#: ../client/pk-console.c:384
+msgid "Issued"
+msgstr ""
+
+#. TRANSLATORS: details about the update, date the update was updated
+#. TRANSLATORS: The action of the package, in past tense
+#: ../client/pk-console.c:388 ../lib/packagekit-glib2/pk-console-shared.c:515
+msgid "Updated"
+msgstr ""
+
+#. TRANSLATORS: if the repo is enabled
+#: ../client/pk-console.c:424
+msgid "Enabled"
+msgstr ""
+
+#. TRANSLATORS: if the repo is disabled
+#: ../client/pk-console.c:427
+msgid "Disabled"
+msgstr ""
+
+#. TRANSLATORS: a package requires the system to be restarted
+#: ../client/pk-console.c:459
+msgid "System restart required by:"
+msgstr ""
+
+#. TRANSLATORS: a package requires the session to be restarted
+#: ../client/pk-console.c:462
+msgid "Session restart required:"
+msgstr ""
+
+#. TRANSLATORS: a package requires the system to be restarted due to a
+#. security update
+#: ../client/pk-console.c:465
+msgid "System restart (security) required by:"
+msgstr ""
+
+#. TRANSLATORS: a package requires the session to be restarted due to a
+#. security update
+#: ../client/pk-console.c:468
+msgid "Session restart (security) required:"
+msgstr ""
+
+#. TRANSLATORS: a package requires the application to be restarted
+#: ../client/pk-console.c:471
+msgid "Application restart required by:"
+msgstr ""
+
+#. TRANSLATORS: This a list of details about the package
+#: ../client/pk-console.c:506
+msgid "Package description"
+msgstr ""
+
+#. TRANSLATORS: This a message (like a little note that may be of interest)
+#. from the transaction
+#: ../client/pk-console.c:537
+msgid "Message:"
+msgstr ""
+
+#. TRANSLATORS: This where the package has no files
+#: ../client/pk-console.c:558
+msgid "No files"
+msgstr ""
+
+#. TRANSLATORS: This a list files contained in the package
+#: ../client/pk-console.c:563
+msgid "Package files"
+msgstr ""
+
+#. TRANSLATORS: the percentage complete of the transaction
+#: ../client/pk-console.c:631
+msgid "Percentage"
+msgstr ""
+
+#. TRANSLATORS: the status of the transaction (e.g. downloading)
+#: ../client/pk-console.c:649
+msgid "Status"
+msgstr ""
+
+#. TRANSLATORS: the results from the transaction
+#: ../client/pk-console.c:678
+msgid "Results:"
+msgstr ""
+
+#. TRANSLATORS: we failed to get any results, which is pretty fatal in my book
+#: ../client/pk-console.c:685
+msgid "Fatal error"
+msgstr ""
+
+#. TRANSLATORS: the user asked to update everything, but there is nothing that
+#. can be updated
+#: ../client/pk-console.c:701
+msgid "There are no packages to update."
+msgstr ""
+
+#. TRANSLATORS: the transaction failed in a way we could not expect
+#: ../client/pk-console.c:704
+#: ../contrib/command-not-found/pk-command-not-found.c:639
+msgid "The transaction failed"
+msgstr ""
+
+#. TRANSLATORS: print a message when there are no updates
+#: ../client/pk-console.c:733
+msgid "There are no updates available at this time."
+msgstr ""
+
+#: ../client/pk-console.c:756
+msgid "There are no upgrades available at this time."
+msgstr ""
+
+#. TRANSLATORS: a package needs to restart their system
+#: ../client/pk-console.c:823
+msgid "Please restart the computer to complete the update."
+msgstr ""
+
+#. TRANSLATORS: a package needs to restart the session
+#: ../client/pk-console.c:826
+msgid "Please logout and login to complete the update."
+msgstr ""
+
+#. TRANSLATORS: a package needs to restart their system (due to security)
+#: ../client/pk-console.c:829
+msgid ""
+"Please restart the computer to complete the update as important security "
+"updates have been installed."
+msgstr ""
+
+#. TRANSLATORS: a package needs to restart the session (due to security)
+#: ../client/pk-console.c:832
+msgid ""
+"Please logout and login to complete the update as important security updates"
+" have been installed."
+msgstr ""
+
+#. TRANSLATORS: The user used 'pkcon install dave.rpm' rather than 'pkcon
+#. install-local dave.rpm'
+#: ../client/pk-console.c:858
+#, 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:866
+#, c-format
+msgid "This tool could not find any available package: %s"
+msgstr ""
+
+#. TRANSLATORS: There was an error getting the list of files for the package.
+#. The detailed error follows
+#: ../client/pk-console.c:894
+#, c-format
+msgid "This tool could not find the installed package: %s"
+msgstr ""
+
+#. TRANSLATORS: There was an error getting the list of files for the package.
+#. The detailed error follows
+#: ../client/pk-console.c:922 ../client/pk-console.c:950
+#, c-format
+msgid "This tool could not find the package: %s"
+msgstr ""
+
+#. TRANSLATORS: There was an error getting the list of files for the package.
+#. The detailed error follows
+#. TRANSLATORS: There was an error getting the dependencies for the package.
+#. The detailed error follows
+#. TRANSLATORS: There was an error getting the details about the package. The
+#. detailed error follows
+#. TRANSLATORS: The package name was not found in any software sources. The
+#. detailed error follows
+#: ../client/pk-console.c:978 ../client/pk-console.c:1006
+#: ../client/pk-console.c:1034 ../client/pk-console.c:1062
+#: ../client/pk-console.c:1090
+#, c-format
+msgid "This tool could not find all the packages: %s"
+msgstr ""
+
+#. TRANSLATORS: This is when the daemon crashed, and we are up shit creek
+#. without a paddle
+#: ../client/pk-console.c:1119
+msgid "The daemon crashed mid-transaction!"
+msgstr ""
+
+#. TRANSLATORS: This is the header to the --help menu
+#: ../client/pk-console.c:1153
+msgid "PackageKit Console Interface"
+msgstr ""
+
+#. these are commands we can use with pkcon
+#: ../client/pk-console.c:1155
+msgid "Subcommands:"
+msgstr ""
+
+#. TRANSLATORS: we keep a database updated with the time that an action was
+#. last executed
+#: ../client/pk-console.c:1234
+msgid "Failed to get the time since this action was last completed"
+msgstr ""
+
+#. TRANSLATORS: command line argument, just show the version string
+#: ../client/pk-console.c:1275 ../client/pk-monitor.c:371
+msgid "Show the program version and exit"
+msgstr ""
+
+#. TRANSLATORS: command line argument, use a filter to narrow down results
+#: ../client/pk-console.c:1278
+msgid "Set the filter, e.g. installed"
+msgstr ""
+
+#. TRANSLATORS: command line argument, use a non-standard install prefix
+#: ../client/pk-console.c:1281
+msgid "Set the install root, e.g. '/' or '/mnt/ltsp'"
+msgstr ""
+
+#. TRANSLATORS: command line argument, work asynchronously
+#: ../client/pk-console.c:1284
+msgid "Exit without waiting for actions to complete"
+msgstr ""
+
+#. command line argument, do we ask questions
+#: ../client/pk-console.c:1287
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:525
+msgid "Install the packages without asking for confirmation"
+msgstr ""
+
+#. TRANSLATORS: command line argument, this command is not a priority
+#: ../client/pk-console.c:1290
+msgid "Run the command using idle network bandwidth and also using less power"
+msgstr ""
+
+#. TRANSLATORS: command line argument, just output without fancy formatting
+#: ../client/pk-console.c:1293
+msgid ""
+"Print to screen a machine readable output, rather than using animated "
+"widgets"
+msgstr ""
+
+#. TRANSLATORS: command line argument, just output without fancy formatting
+#: ../client/pk-console.c:1296
+msgid "The maximum metadata cache age. Use -1 for 'never'."
+msgstr ""
+
+#. TRANSLATORS: we failed to contact the daemon
+#: ../client/pk-console.c:1333
+msgid "Failed to contact PackageKit"
+msgstr ""
+
+#. TRANSLATORS: The user specified an incorrect filter
+#: ../client/pk-console.c:1381
+msgid "The proxy could not be set"
+msgstr ""
+
+#. TRANSLATORS: The user specified an incorrect filter
+#: ../client/pk-console.c:1393
+msgid "The install root could not be set"
+msgstr ""
+
+#. TRANSLATORS: The user specified an incorrect filter
+#: ../client/pk-console.c:1405
+msgid "The filter specified was invalid"
+msgstr ""
+
+#. TRANSLATORS: a search type can be name, details, file, etc
+#: ../client/pk-console.c:1424
+msgid "A search type is required, e.g. name"
+msgstr ""
+
+#. TRANSLATORS: the user needs to provide a search term
+#: ../client/pk-console.c:1431 ../client/pk-console.c:1443
+#: ../client/pk-console.c:1455 ../client/pk-console.c:1467
+msgid "A search term is required"
+msgstr ""
+
+#. TRANSLATORS: the search type was provided, but invalid
+#: ../client/pk-console.c:1477
+msgid "Invalid search type"
+msgstr ""
+
+#. TRANSLATORS: the user did not specify what they wanted to install
+#: ../client/pk-console.c:1483
+msgid "A package name to install is required"
+msgstr ""
+
+#. TRANSLATORS: the user did not specify what they wanted to install
+#: ../client/pk-console.c:1492
+msgid "A filename to install is required"
+msgstr ""
+
+#. TRANSLATORS: geeky error, 99.9999% of users won't see this
+#: ../client/pk-console.c:1503
+msgid "A type, key_id and package_id are required"
+msgstr ""
+
+#. TRANSLATORS: the user did not specify what they wanted to remove
+#: ../client/pk-console.c:1514
+msgid "A package name to remove is required"
+msgstr ""
+
+#. TRANSLATORS: the user did not specify anything about what to download or
+#. where
+#: ../client/pk-console.c:1523
+msgid "A destination directory and the package names to download are required"
+msgstr ""
+
+#. TRANSLATORS: the directory does not exist, so we can't continue
+#: ../client/pk-console.c:1530
+msgid "Directory not found"
+msgstr ""
+
+#. TRANSLATORS: geeky error, 99.9999% of users won't see this
+#: ../client/pk-console.c:1539
+msgid "A licence identifier (eula-id) is required"
+msgstr ""
+
+#. TRANSLATORS: geeky error, 99.9999% of users won't see this
+#: ../client/pk-console.c:1550
+msgid "A transaction identifier (tid) is required"
+msgstr ""
+
+#. TRANSLATORS: The user did not specify a package name
+#: ../client/pk-console.c:1571
+msgid "A package name to resolve is required"
+msgstr ""
+
+#. TRANSLATORS: The user did not specify a repository (software source) name
+#: ../client/pk-console.c:1582 ../client/pk-console.c:1593
+msgid "A repository name is required"
+msgstr ""
+
+#. TRANSLATORS: The user didn't provide any data
+#: ../client/pk-console.c:1604
+msgid "A repo name, parameter and value are required"
+msgstr ""
+
+#. TRANSLATORS: The user didn't specify what action to use
+#: ../client/pk-console.c:1621
+msgid "An action, e.g. 'update-system' is required"
+msgstr ""
+
+#. TRANSLATORS: The user specified an invalid action
+#: ../client/pk-console.c:1628
+msgid "A correct role is required"
+msgstr ""
+
+#. TRANSLATORS: The user did not provide a package name
+#. TRANSLATORS: This is when the user fails to supply the package name
+#: ../client/pk-console.c:1638 ../client/pk-console.c:1652
+#: ../client/pk-console.c:1661 ../client/pk-console.c:1681
+#: ../client/pk-console.c:1690 ../client/pk-generate-pack.c:314
+msgid "A package name is required"
+msgstr ""
+
+#. TRANSLATORS: each package "provides" certain things, e.g. mime(gstreamer-
+#. decoder-mp3), the user didn't specify it
+#: ../client/pk-console.c:1670
+msgid "A package provide string is required"
+msgstr ""
+
+#. TRANSLATORS: The user did not provide a distro name
+#: ../client/pk-console.c:1714
+msgid "A distribution name is required"
+msgstr ""
+
+#. TRANSLATORS: The user did not provide an upgrade type
+#: ../client/pk-console.c:1720
+msgid "An upgrade type is required, e.g. 'minimal', 'default' or 'complete'"
+msgstr ""
+
+#. TRANSLATORS: The user tried to use an unsupported option on the command
+#. line
+#: ../client/pk-console.c:1770
+#, c-format
+msgid "Option '%s' is not supported"
+msgstr ""
+
+#. TRANSLATORS: Generic failure of what they asked to do
+#: ../client/pk-console.c:1780
+msgid "Command failed"
+msgstr ""
+
+#. TRANSLATORS: we can exclude certain packages (glibc) when we know they'll
+#. exist on the target
+#: ../client/pk-generate-pack.c:253
+msgid "Set the file name of dependencies to be excluded"
+msgstr ""
+
+#. TRANSLATORS: the output location
+#: ../client/pk-generate-pack.c:256
+msgid ""
+"The output file or directory (the current directory is used if omitted)"
+msgstr ""
+
+#. TRANSLATORS: put a list of packages in the pack
+#: ../client/pk-generate-pack.c:259
+msgid "The package to be put into the service pack"
+msgstr ""
+
+#. TRANSLATORS: put all pending updates in the pack
+#: ../client/pk-generate-pack.c:262
+msgid "Put all updates available in the service pack"
+msgstr ""
+
+#. TRANSLATORS: This is when the user fails to supply the correct arguments
+#: ../client/pk-generate-pack.c:298
+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:306
+msgid "Both options selected."
+msgstr ""
+
+#. TRANSLATORS: This is when the user fails to supply the output
+#: ../client/pk-generate-pack.c:322
+msgid "A output directory or file name is required"
+msgstr ""
+
+#. TRANSLATORS: This is when the daemon is not-installed/broken and fails to
+#. startup
+#: ../client/pk-generate-pack.c:340
+msgid "The daemon failed to startup"
+msgstr ""
+
+#. TRANSLATORS: This is when the backend doesn't have the capability to get-
+#. depends
+#. TRANSLATORS: This is when the backend doesn't have the capability to
+#. download
+#: ../client/pk-generate-pack.c:351 ../client/pk-generate-pack.c:357
+msgid "The package manager cannot perform this type of operation."
+msgstr ""
+
+#. TRANSLATORS: This is when the distro didn't include libarchive support into
+#. PK
+#: ../client/pk-generate-pack.c:364
+msgid ""
+"Service packs cannot be created as PackageKit was not built with libarchive "
+"support."
+msgstr ""
+
+#. TRANSLATORS: the user specified an absolute path, but didn't get the
+#. extension correct
+#: ../client/pk-generate-pack.c:375
+msgid "If specifying a file, the service pack name must end with"
+msgstr ""
+
+#. TRANSLATORS: This is when file already exists
+#: ../client/pk-generate-pack.c:391
+msgid "A pack with the same name already exists, do you want to overwrite it?"
+msgstr ""
+
+#. TRANSLATORS: This is when the pack was not overwritten
+#: ../client/pk-generate-pack.c:394
+msgid "The pack was not overwritten."
+msgstr ""
+
+#. TRANSLATORS: This is when the temporary directory cannot be created, the
+#. directory name follows
+#: ../client/pk-generate-pack.c:407
+msgid "Failed to create directory:"
+msgstr ""
+
+#. TRANSLATORS: This is when the list of packages from the remote computer
+#. cannot be opened
+#: ../client/pk-generate-pack.c:419
+msgid "Failed to open package list."
+msgstr ""
+
+#. TRANSLATORS: The package name is being matched up to available packages
+#: ../client/pk-generate-pack.c:428
+msgid "Finding package name."
+msgstr ""
+
+#. TRANSLATORS: This is when the package cannot be found in any software
+#. source. The detailed error follows
+#: ../client/pk-generate-pack.c:432
+#, 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:440
+msgid "Creating service pack..."
+msgstr ""
+
+#. TRANSLATORS: we succeeded in making the file
+#: ../client/pk-generate-pack.c:455
+#, c-format
+msgid "Service pack created '%s'"
+msgstr ""
+
+#. TRANSLATORS: we failed to make te file
+#: ../client/pk-generate-pack.c:460
+#, c-format
+msgid "Failed to create '%s': %s"
+msgstr ""
+
+#: ../client/pk-monitor.c:284
+msgid "Failed to get daemon state"
+msgstr ""
+
+#: ../client/pk-monitor.c:349
+msgid "Failed to get properties"
+msgstr ""
+
+#. TRANSLATORS: this is a program that monitors PackageKit
+#: ../client/pk-monitor.c:387
+msgid "PackageKit Monitor"
+msgstr ""
+
+#. TRANSLATORS: when we are getting data from the daemon
+#: ../contrib/browser-plugin/pk-plugin-install.c:499
+msgid "Getting package information..."
+msgstr ""
+
+#. TRANSLATORS: run an applicaiton
+#: ../contrib/browser-plugin/pk-plugin-install.c:505
+#, c-format
+msgid "Run %s"
+msgstr ""
+
+#. TRANSLATORS: show the installed version of a package
+#: ../contrib/browser-plugin/pk-plugin-install.c:511
+msgid "Installed version"
+msgstr ""
+
+#. TRANSLATORS: run the application now
+#: ../contrib/browser-plugin/pk-plugin-install.c:519
+#, c-format
+msgid "Run version %s now"
+msgstr ""
+
+#. TRANSLATORS: run the application now
+#: ../contrib/browser-plugin/pk-plugin-install.c:525
+msgid "Run now"
+msgstr ""
+
+#. TRANSLATORS: update to a new version of the package
+#: ../contrib/browser-plugin/pk-plugin-install.c:531
+#, c-format
+msgid "Update to version %s"
+msgstr ""
+
+#. TRANSLATORS: To install a package
+#: ../contrib/browser-plugin/pk-plugin-install.c:537
+#, c-format
+msgid "Install %s now"
+msgstr ""
+
+#. TRANSLATORS: the version of the package
+#: ../contrib/browser-plugin/pk-plugin-install.c:540
+msgid "Version"
+msgstr ""
+
+#. TRANSLATORS: noting found, so can't install
+#: ../contrib/browser-plugin/pk-plugin-install.c:545
+msgid "No packages found for your system"
+msgstr ""
+
+#. TRANSLATORS: package is being installed
+#: ../contrib/browser-plugin/pk-plugin-install.c:550
+msgid "Installing..."
+msgstr ""
+
+#. TRANSLATORS: downloading repo data so we can search
+#: ../contrib/command-not-found/pk-command-not-found.c: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: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: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: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:444
+msgid "Failed to search for file"
+msgstr ""
+
+#. TRANSLATORS: the transaction failed in a way we could not expect
+#: ../contrib/command-not-found/pk-command-not-found.c:456
+msgid "Getting the list of files failed"
+msgstr ""
+
+#. TRANSLATORS: we failed to launch the executable, the error follows
+#: ../contrib/command-not-found/pk-command-not-found.c:602
+msgid "Failed to launch:"
+msgstr ""
+
+#. TRANSLATORS: we failed to install the package
+#: ../contrib/command-not-found/pk-command-not-found.c:630
+msgid "Failed to install packages"
+msgstr ""
+
+#. TRANSLATORS: tool that gets called when the command is not found
+#: ../contrib/command-not-found/pk-command-not-found.c:706
+msgid "PackageKit Command Not Found"
+msgstr ""
+
+#. TRANSLATORS: the prefix of all the output telling the user
+#. * why it's not executing. NOTE: this is lowercase to mimic
+#. * the style of bash itself -- apologies
+#: ../contrib/command-not-found/pk-command-not-found.c:739
+msgid "command not found"
+msgstr ""
+
+#. TRANSLATORS: tell the user what we think the command is
+#: ../contrib/command-not-found/pk-command-not-found.c:757
+msgid "Similar command is:"
+msgstr ""
+
+#. TRANSLATORS: Ask the user if we should run the similar command
+#: ../contrib/command-not-found/pk-command-not-found.c:771
+msgid "Run similar command:"
+msgstr ""
+
+#. TRANSLATORS: show the user a list of commands that they could have meant
+#. TRANSLATORS: show the user a list of commands we could run
+#: ../contrib/command-not-found/pk-command-not-found.c:785
+#: ../contrib/command-not-found/pk-command-not-found.c:794
+msgid "Similar commands are:"
+msgstr ""
+
+#. TRANSLATORS: ask the user to choose a file to run
+#: ../contrib/command-not-found/pk-command-not-found.c:801
+msgid "Please choose a command to run"
+msgstr ""
+
+#. TRANSLATORS: tell the user what package provides the command
+#: ../contrib/command-not-found/pk-command-not-found.c:819
+msgid "The package providing this file is:"
+msgstr ""
+
+#. TRANSLATORS: as the user if we want to install a package to provide the
+#. command
+#: ../contrib/command-not-found/pk-command-not-found.c:826
+#, 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:853
+msgid "Packages providing this file are:"
+msgstr ""
+
+#. TRANSLATORS: Show the user a list of packages that they can install to
+#. provide this command
+#: ../contrib/command-not-found/pk-command-not-found.c:863
+msgid "Suitable packages are:"
+msgstr ""
+
+#. get selection
+#. TRANSLATORS: ask the user to choose a file to install
+#: ../contrib/command-not-found/pk-command-not-found.c:872
+msgid "Please choose a package to install"
+msgstr ""
+
+#. TRANSLATORS: we are starting to install the packages
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:195
+msgid "Starting install"
+msgstr ""
+
+#. TRANSLATORS: we couldn't find the package name, non-fatal
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:407
+#, c-format
+msgid "Failed to find the package %s, or already installed: %s"
+msgstr ""
+
+#. command line argument, simulate what would be done, but don't actually do
+#. it
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:516
+msgid ""
+"Don't actually install any packages, only simulate what would be installed"
+msgstr ""
+
+#. command line argument, do we skip packages that depend on the ones
+#. specified
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:519
+msgid "Do not install dependencies of the core packages"
+msgstr ""
+
+#. command line argument, do we operate quietly
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:522
+msgid "Do not display information or progress"
+msgstr ""
+
+#. TRANSLATORS: tool that gets called when the command is not found
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:540
+msgid "PackageKit Debuginfo Installer"
+msgstr ""
+
+#. TRANSLATORS: the use needs to specify a list of package names on the
+#. command line
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:554
+#, c-format
+msgid "ERROR: Specify package names to install."
+msgstr ""
+
+#. TRANSLATORS: we are getting the list of repositories
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:590
+#, c-format
+msgid "Getting sources list"
+msgstr ""
+
+#. TRANSLATORS: operation was not successful
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:600
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:675
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:759
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:803
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:870
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:914
+msgid "FAILED."
+msgstr ""
+
+#. TRANSLATORS: all completed 100%
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:615
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:655
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:690
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:774
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:818
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:885
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:929
+#, c-format
+msgid "OK."
+msgstr ""
+
+#. TRANSLATORS: tell the user what we found
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:618
+#, c-format
+msgid "Found %i enabled and %i disabled sources."
+msgstr ""
+
+#. TRANSLATORS: we're finding repositories that match out pattern
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:625
+#, c-format
+msgid "Finding debugging sources"
+msgstr ""
+
+#. TRANSLATORS: tell the user what we found
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:658
+#, c-format
+msgid "Found %i disabled debuginfo repos."
+msgstr ""
+
+#. TRANSLATORS: we're now enabling all the debug sources we found
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:665
+#, c-format
+msgid "Enabling debugging sources"
+msgstr ""
+
+#. TRANSLATORS: tell the user how many we enabled
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:693
+#, c-format
+msgid "Enabled %i debugging sources."
+msgstr ""
+
+#. TRANSLATORS: we're now finding packages that match in all the repos
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:700
+#, c-format
+msgid "Finding debugging packages"
+msgstr ""
+
+#. TRANSLATORS: we couldn't find the package name, non-fatal
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:712
+#, c-format
+msgid "Failed to find the package %s: %s"
+msgstr ""
+
+#. TRANSLATORS: we couldn't find the debuginfo package name, non-fatal
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:735
+#, c-format
+msgid "Failed to find the debuginfo package %s: %s"
+msgstr ""
+
+#. TRANSLATORS: no debuginfo packages could be found to be installed
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:763
+#, c-format
+msgid "Found no packages to install."
+msgstr ""
+
+#. TRANSLATORS: tell the user we found some packages, and then list them
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:777
+#, c-format
+msgid "Found %i packages:"
+msgstr ""
+
+#. TRANSLATORS: tell the user we are searching for deps
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:793
+#, c-format
+msgid "Finding packages that depend on these packages"
+msgstr ""
+
+#. TRANSLATORS: could not install, detailed error follows
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:806
+#, c-format
+msgid "Could not find dependant packages: %s"
+msgstr ""
+
+#. TRANSLATORS: tell the user we found some more packages
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:822
+#, c-format
+msgid "Found %i extra packages."
+msgstr ""
+
+#. TRANSLATORS: tell the user we found some more packages
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:826
+#, c-format
+msgid "No extra packages required."
+msgstr ""
+
+#. TRANSLATORS: tell the user we found some packages (and deps), and then list
+#. them
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:835
+#, c-format
+msgid "Found %i packages to install:"
+msgstr ""
+
+#. TRANSLATORS: simulate mode is a testing mode where we quit before the
+#. action
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:848
+#, c-format
+msgid "Not installing packages in simulate mode"
+msgstr ""
+
+#. TRANSLATORS: we are now installing the debuginfo packages we found earlier
+#. TRANSLATORS: transaction state, installing packages
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:860
+#: ../lib/packagekit-glib2/pk-console-shared.c:287
+#, c-format
+msgid "Installing packages"
+msgstr ""
+
+#. TRANSLATORS: could not install, detailed error follows
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:873
+#, c-format
+msgid "Could not install packages: %s"
+msgstr ""
+
+#. TRANSLATORS: we are now disabling all debuginfo repos we previously enabled
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:905
+#, c-format
+msgid "Disabling sources previously enabled"
+msgstr ""
+
+#. TRANSLATORS: no debuginfo packages could be found to be installed, detailed
+#. error follows
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:917
+#, c-format
+msgid "Could not disable the debugging sources: %s"
+msgstr ""
+
+#. TRANSLATORS: we disabled all the debugging repos that we enabled before
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:932
+#, c-format
+msgid "Disabled %i debugging sources."
+msgstr ""
+
+#. TRANSLATORS: couldn't open device to write
+#: ../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:71
+msgid "Failed to write to the file"
+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 ""
+
+#. TRANSLATORS: the device could not be found in sysfs
+#: ../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:203
+msgid "Failed to unregister driver"
+msgstr ""
+
+#. TRANSLATORS: we failed to bind the old driver
+#: ../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:261
+msgid "Device path not found"
+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 ""
+
+#: ../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: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: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:315
+msgid "PackageKit Device Reloader"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. TRANSLATORS: we're going to verify the path first
+#: ../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:347
+msgid "Failed to verify device path"
+msgstr ""
+
+#. TRANSLATORS: we're going to try
+#: ../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:366
+msgid "Failed to rebind device"
+msgstr ""
+
+#: ../data/packagekit-catalog.xml.in.h:1
+msgid "PackageKit Catalog"
+msgstr ""
+
+#: ../data/packagekit-package-list.xml.in.h:1
+msgid "PackageKit Package List"
+msgstr ""
+
+#: ../data/packagekit-servicepack.xml.in.h:1
+msgid "PackageKit Service Pack"
+msgstr ""
+
+#: ../lib/packagekit-glib2/pk-console-shared.c:63
+#, 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:189
+msgid "More than one package matches:"
+msgstr ""
+
+#. TRANSLATORS: This finds out which package in the list to use
+#: ../lib/packagekit-glib2/pk-console-shared.c:200
+msgid "Please choose the correct package: "
+msgstr ""
+
+#. TRANSLATORS: This is when the transaction status is not known
+#: ../lib/packagekit-glib2/pk-console-shared.c:255
+msgid "Unknown state"
+msgstr ""
+
+#. TRANSLATORS: transaction state, the daemon is in the process of starting
+#: ../lib/packagekit-glib2/pk-console-shared.c:259
+msgid "Starting"
+msgstr ""
+
+#. TRANSLATORS: transaction state, the transaction is waiting for another to
+#. complete
+#: ../lib/packagekit-glib2/pk-console-shared.c:263
+msgid "Waiting in queue"
+msgstr ""
+
+#. TRANSLATORS: transaction state, just started
+#: ../lib/packagekit-glib2/pk-console-shared.c:267
+msgid "Running"
+msgstr ""
+
+#. TRANSLATORS: transaction state, is querying data
+#: ../lib/packagekit-glib2/pk-console-shared.c:271
+msgid "Querying"
+msgstr ""
+
+#. TRANSLATORS: transaction state, getting data from a server
+#: ../lib/packagekit-glib2/pk-console-shared.c:275
+msgid "Getting information"
+msgstr ""
+
+#. TRANSLATORS: transaction state, removing packages
+#: ../lib/packagekit-glib2/pk-console-shared.c:279
+msgid "Removing packages"
+msgstr ""
+
+#. TRANSLATORS: transaction state, downloading package files
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:283
+#: ../lib/packagekit-glib2/pk-console-shared.c:661
+msgid "Downloading packages"
+msgstr ""
+
+#. TRANSLATORS: transaction state, refreshing internal lists
+#: ../lib/packagekit-glib2/pk-console-shared.c:291
+msgid "Refreshing software list"
+msgstr ""
+
+#. TRANSLATORS: transaction state, installing updates
+#: ../lib/packagekit-glib2/pk-console-shared.c:295
+msgid "Installing updates"
+msgstr ""
+
+#. TRANSLATORS: transaction state, removing old packages, and cleaning config
+#. files
+#: ../lib/packagekit-glib2/pk-console-shared.c:299
+msgid "Cleaning up packages"
+msgstr ""
+
+#. TRANSLATORS: transaction state, obsoleting old packages
+#: ../lib/packagekit-glib2/pk-console-shared.c:303
+msgid "Obsoleting packages"
+msgstr ""
+
+#. TRANSLATORS: transaction state, checking the transaction before we do it
+#: ../lib/packagekit-glib2/pk-console-shared.c:307
+msgid "Resolving dependencies"
+msgstr ""
+
+#. TRANSLATORS: transaction state, checking if we have all the security keys
+#. for the operation
+#: ../lib/packagekit-glib2/pk-console-shared.c:311
+msgid "Checking signatures"
+msgstr ""
+
+#. TRANSLATORS: transaction state, when we return to a previous system state
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:315
+#: ../lib/packagekit-glib2/pk-console-shared.c:621
+msgid "Rolling back"
+msgstr ""
+
+#. TRANSLATORS: transaction state, when we're doing a test transaction
+#: ../lib/packagekit-glib2/pk-console-shared.c:319
+msgid "Testing changes"
+msgstr ""
+
+#. TRANSLATORS: transaction state, when we're writing to the system package
+#. database
+#: ../lib/packagekit-glib2/pk-console-shared.c:323
+msgid "Committing changes"
+msgstr ""
+
+#. TRANSLATORS: transaction state, requesting data from a server
+#: ../lib/packagekit-glib2/pk-console-shared.c:327
+msgid "Requesting data"
+msgstr ""
+
+#. TRANSLATORS: transaction state, all done!
+#: ../lib/packagekit-glib2/pk-console-shared.c:331
+msgid "Finished"
+msgstr ""
+
+#. TRANSLATORS: transaction state, in the process of cancelling
+#: ../lib/packagekit-glib2/pk-console-shared.c:335
+msgid "Cancelling"
+msgstr ""
+
+#. TRANSLATORS: transaction state, downloading metadata
+#: ../lib/packagekit-glib2/pk-console-shared.c:339
+msgid "Downloading repository information"
+msgstr ""
+
+#. TRANSLATORS: transaction state, downloading metadata
+#: ../lib/packagekit-glib2/pk-console-shared.c:343
+msgid "Downloading list of packages"
+msgstr ""
+
+#. TRANSLATORS: transaction state, downloading metadata
+#: ../lib/packagekit-glib2/pk-console-shared.c:347
+msgid "Downloading file lists"
+msgstr ""
+
+#. TRANSLATORS: transaction state, downloading metadata
+#: ../lib/packagekit-glib2/pk-console-shared.c:351
+msgid "Downloading lists of changes"
+msgstr ""
+
+#. TRANSLATORS: transaction state, downloading metadata
+#: ../lib/packagekit-glib2/pk-console-shared.c:355
+msgid "Downloading groups"
+msgstr ""
+
+#. TRANSLATORS: transaction state, downloading metadata
+#: ../lib/packagekit-glib2/pk-console-shared.c:359
+msgid "Downloading update information"
+msgstr ""
+
+#. TRANSLATORS: transaction state, repackaging delta files
+#: ../lib/packagekit-glib2/pk-console-shared.c:363
+msgid "Repackaging files"
+msgstr ""
+
+#. TRANSLATORS: transaction state, loading databases
+#: ../lib/packagekit-glib2/pk-console-shared.c:367
+msgid "Loading cache"
+msgstr ""
+
+#. TRANSLATORS: transaction state, scanning for running processes
+#: ../lib/packagekit-glib2/pk-console-shared.c:371
+msgid "Scanning applications"
+msgstr ""
+
+#. TRANSLATORS: transaction state, generating a list of packages installed on
+#. the system
+#: ../lib/packagekit-glib2/pk-console-shared.c:375
+msgid "Generating package lists"
+msgstr ""
+
+#. TRANSLATORS: transaction state, when we're waiting for the native tools to
+#. exit
+#: ../lib/packagekit-glib2/pk-console-shared.c:379
+msgid "Waiting for package manager lock"
+msgstr ""
+
+#. TRANSLATORS: transaction state, waiting for user to type in a password
+#: ../lib/packagekit-glib2/pk-console-shared.c:383
+msgid "Waiting for authentication"
+msgstr ""
+
+#. TRANSLATORS: transaction state, we are updating the list of processes
+#: ../lib/packagekit-glib2/pk-console-shared.c:387
+msgid "Updating running applications"
+msgstr ""
+
+#. TRANSLATORS: transaction state, we are checking executable files currently
+#. in use
+#: ../lib/packagekit-glib2/pk-console-shared.c:391
+msgid "Checking applications in use"
+msgstr ""
+
+#. TRANSLATORS: transaction state, we are checking for libraries currently in
+#. use
+#: ../lib/packagekit-glib2/pk-console-shared.c:395
+msgid "Checking libraries in use"
+msgstr ""
+
+#. TRANSLATORS: transaction state, we are copying package files before or
+#. after the transaction
+#: ../lib/packagekit-glib2/pk-console-shared.c:399
+msgid "Copying files"
+msgstr ""
+
+#. TRANSLATORS: The type of update
+#: ../lib/packagekit-glib2/pk-console-shared.c:417
+msgid "Trivial"
+msgstr ""
+
+#. TRANSLATORS: The type of update
+#: ../lib/packagekit-glib2/pk-console-shared.c:421
+msgid "Normal"
+msgstr ""
+
+#. TRANSLATORS: The type of update
+#: ../lib/packagekit-glib2/pk-console-shared.c:425
+msgid "Important"
+msgstr ""
+
+#. TRANSLATORS: The type of update
+#: ../lib/packagekit-glib2/pk-console-shared.c:429
+msgid "Security"
+msgstr ""
+
+#. TRANSLATORS: The type of update
+#: ../lib/packagekit-glib2/pk-console-shared.c:433
+msgid "Bug fix "
+msgstr ""
+
+#. TRANSLATORS: The type of update
+#: ../lib/packagekit-glib2/pk-console-shared.c:437
+msgid "Enhancement"
+msgstr ""
+
+#. TRANSLATORS: The type of update
+#: ../lib/packagekit-glib2/pk-console-shared.c:441
+msgid "Blocked"
+msgstr ""
+
+#. TRANSLATORS: The state of a package
+#. TRANSLATORS: The action of the package, in past tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:446
+#: ../lib/packagekit-glib2/pk-console-shared.c:519
+msgid "Installed"
+msgstr ""
+
+#. TRANSLATORS: The state of a package, i.e. not installed
+#: ../lib/packagekit-glib2/pk-console-shared.c:451
+msgid "Available"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:469
+msgid "Downloading"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:473
+msgid "Updating"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in present tense
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:477
+#: ../lib/packagekit-glib2/pk-console-shared.c:597
+msgid "Installing"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in present tense
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:481
+#: ../lib/packagekit-glib2/pk-console-shared.c:593
+msgid "Removing"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:485
+msgid "Cleaning up"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:489
+msgid "Obsoleting"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:493
+msgid "Reinstalling"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in past tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:511
+msgid "Downloaded"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in past tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:523
+msgid "Removed"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in past tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:527
+msgid "Cleaned up"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in past tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:531
+msgid "Obsoleted"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in past tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:535
+msgid "Reinstalled"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:553
+msgid "Unknown role type"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:557
+msgid "Getting dependencies"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:561
+msgid "Getting update details"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:565
+msgid "Getting details"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:569
+msgid "Getting requires"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:573
+msgid "Getting updates"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:577
+msgid "Searching by details"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:581
+msgid "Searching by file"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:585
+msgid "Searching groups"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:589
+msgid "Searching by name"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:601
+msgid "Installing files"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:605
+msgid "Refreshing cache"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:609
+msgid "Updating packages"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:613
+msgid "Updating system"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:617
+msgid "Canceling"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:625
+msgid "Getting repositories"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:629
+msgid "Enabling repository"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:633
+msgid "Setting data"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:637
+msgid "Resolving"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:641
+msgid "Getting file list"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:645
+msgid "Getting provides"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:649
+msgid "Installing signature"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:653
+msgid "Getting packages"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:657
+msgid "Accepting EULA"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:665
+msgid "Getting upgrades"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:669
+msgid "Getting categories"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:673
+msgid "Getting transactions"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:677
+#: ../lib/packagekit-glib2/pk-console-shared.c:681
+msgid "Simulating install"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:685
+msgid "Simulating remove"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:689
+msgid "Simulating update"
+msgstr ""
+
+#. TRANSLATORS: turn on all debugging
+#: ../lib/packagekit-glib2/pk-debug.c:133
+msgid "Show debugging information for all files"
+msgstr ""
+
+#: ../lib/packagekit-glib2/pk-debug.c:201
+msgid "Debugging Options"
+msgstr ""
+
+#: ../lib/packagekit-glib2/pk-debug.c:201
+msgid "Show debugging options"
+msgstr ""
+
+#. TRANSLATORS: ask the user if they are comfortable installing insecure
+#. packages
+#: ../lib/packagekit-glib2/pk-task-text.c:67
+msgid "Do you want to allow installing of unsigned software?"
+msgstr ""
+
+#. TRANSLATORS: tell the user we've not done anything
+#: ../lib/packagekit-glib2/pk-task-text.c:72
+msgid "The unsigned software will not be installed."
+msgstr ""
+
+#. TRANSLATORS: the package repository is signed by a key that is not
+#. recognised
+#: ../lib/packagekit-glib2/pk-task-text.c:121
+msgid "Software source signature required"
+msgstr ""
+
+#. TRANSLATORS: the package repository name
+#: ../lib/packagekit-glib2/pk-task-text.c:127
+msgid "Software source name"
+msgstr ""
+
+#. TRANSLATORS: the key URL
+#: ../lib/packagekit-glib2/pk-task-text.c:130
+msgid "Key URL"
+msgstr ""
+
+#. TRANSLATORS: the username of the key
+#: ../lib/packagekit-glib2/pk-task-text.c:133
+msgid "Key user"
+msgstr ""
+
+#. TRANSLATORS: the key ID, usually a few hex digits
+#: ../lib/packagekit-glib2/pk-task-text.c:136
+msgid "Key ID"
+msgstr ""
+
+#. TRANSLATORS: the key fingerprint, again, yet more hex
+#: ../lib/packagekit-glib2/pk-task-text.c:139
+msgid "Key fingerprint"
+msgstr ""
+
+#. TRANSLATORS: the timestamp (a bit like a machine readable time)
+#: ../lib/packagekit-glib2/pk-task-text.c:142
+msgid "Key Timestamp"
+msgstr ""
+
+#. TRANSLATORS: ask the user if they want to import
+#: ../lib/packagekit-glib2/pk-task-text.c:155
+msgid "Do you accept this signature?"
+msgstr ""
+
+#. TRANSLATORS: tell the user we've not done anything
+#: ../lib/packagekit-glib2/pk-task-text.c:160
+msgid "The signature was not accepted."
+msgstr ""
+
+#. TRANSLATORS: this is another name for a software licence that has to be
+#. read before installing
+#: ../lib/packagekit-glib2/pk-task-text.c:203
+msgid "End user licence agreement required"
+msgstr ""
+
+#. TRANSLATORS: the EULA text itself (long and boring)
+#: ../lib/packagekit-glib2/pk-task-text.c:212
+msgid "Agreement"
+msgstr ""
+
+#. TRANSLATORS: ask the user if they've read and accepted the EULA
+#: ../lib/packagekit-glib2/pk-task-text.c:221
+msgid "Do you accept this agreement?"
+msgstr ""
+
+#. TRANSLATORS: tell the user we've not done anything
+#: ../lib/packagekit-glib2/pk-task-text.c:226
+msgid "The agreement was not accepted."
+msgstr ""
+
+#. TRANSLATORS: the user needs to change media inserted into the computer
+#: ../lib/packagekit-glib2/pk-task-text.c:265
+msgid "Media change required"
+msgstr ""
+
+#. TRANSLATORS: the type, e.g. DVD, CD, etc
+#: ../lib/packagekit-glib2/pk-task-text.c:268
+msgid "Media type"
+msgstr ""
+
+#. TRANSLATORS: the media label, usually like 'disk-1of3'
+#: ../lib/packagekit-glib2/pk-task-text.c:271
+msgid "Media label"
+msgstr ""
+
+#. TRANSLATORS: the media description, usually like 'Fedora 12 disk 5'
+#: ../lib/packagekit-glib2/pk-task-text.c:274
+msgid "Text"
+msgstr ""
+
+#. TRANSLATORS: ask the user to insert the media
+#: ../lib/packagekit-glib2/pk-task-text.c:280
+msgid "Please insert the correct media"
+msgstr ""
+
+#. TRANSLATORS: tell the user we've not done anything as they are lazy
+#: ../lib/packagekit-glib2/pk-task-text.c:285
+msgid "The correct media was not inserted."
+msgstr ""
+
+#. TRANSLATORS: When processing, we might have to remove other dependencies
+#: ../lib/packagekit-glib2/pk-task-text.c:300
+msgid "The following packages have to be removed:"
+msgstr ""
+
+#. TRANSLATORS: When processing, we might have to install other dependencies
+#: ../lib/packagekit-glib2/pk-task-text.c:305
+msgid "The following packages have to be installed:"
+msgstr ""
+
+#. TRANSLATORS: When processing, we might have to update other dependencies
+#: ../lib/packagekit-glib2/pk-task-text.c:310
+msgid "The following packages have to be updated:"
+msgstr ""
+
+#. TRANSLATORS: When processing, we might have to reinstall other dependencies
+#: ../lib/packagekit-glib2/pk-task-text.c:315
+msgid "The following packages have to be reinstalled:"
+msgstr ""
+
+#. TRANSLATORS: When processing, we might have to downgrade other dependencies
+#: ../lib/packagekit-glib2/pk-task-text.c:320
+msgid "The following packages have to be downgraded:"
+msgstr ""
+
+#. TRANSLATORS: ask the user if the proposed changes are okay
+#: ../lib/packagekit-glib2/pk-task-text.c:380
+msgid "Proceed with changes?"
+msgstr ""
+
+#. TRANSLATORS: tell the user we didn't do anything
+#: ../lib/packagekit-glib2/pk-task-text.c:385
+msgid "The transaction did not proceed."
+msgstr ""
+
+#. SECURITY:
+#. - Normal users do not require admin authentication to accept new
+#. licence agreements.
+#. - Change this to 'auth_admin' for environments where users should not
+#. be given the option to make legal decisions.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:7
+msgid "Accept EULA"
+msgstr ""
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h: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"
+msgstr ""
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:10
+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:13
+msgid "Authentication is required to install a signed package"
+msgstr ""
+
+#: ../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:15
+msgid "Authentication is required to refresh the system sources"
+msgstr ""
+
+#: ../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:17
+msgid "Authentication is required to remove packages"
+msgstr ""
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:18
+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 ""
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:21
+msgid "Authentication is required to upgrade the operating system"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users are allowed to cancel their own task without
+#. authentication, but a different user id needs the admin password
+#. to cancel another users task.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:27
+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:34
+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:40
+msgid "Change software source parameters"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users do not need authentication to install signed packages
+#. from signed repositories, as this cannot exploit a system.
+#. - Paranoid users (or parents!) can change this to 'auth_admin' or
+#. 'auth_admin_keep'.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:47
+msgid "Install signed package"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users require admin authentication to install untrusted or
+#. unrecognised packages, as allowing users to do this without a
+#. password would be a massive security hole.
+#. - This is not retained as each package should be authenticated.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:54
+msgid "Install untrusted local file"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users do not require admin authentication to refresh the
+#. cache, as this doesn't actually install or remove software.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:59
+msgid "Refresh system sources"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users require admin authentication to rebind a driver
+#. so that it works after we install firmware.
+#. - This should not be set to 'yes' as unprivileged users could then
+#. try to rebind drivers in use, for instance security authentication
+#. devices.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:67
+msgid "Reload a device"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users require admin authentication to remove packages as
+#. this can make the system unbootable or stop other applications from
+#. working.
+#. - Be sure to close the tool used to remove the packages after the
+#. admin authentication has been obtained, otherwise packages can still
+#. be removed. If this is not possible, change this authentication to
+#. 'auth_admin'.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:77
+msgid "Remove package"
+msgstr ""
+
+#. 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:83
+msgid "Rollback to a previous transaction"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users do not require admin authentication to set the proxy
+#. used for downloading packages.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:88
+msgid "Set network proxy"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users require admin authentication to add signing keys.
+#. - This implies adding an explicit trust, and should not be granted
+#. without a secure authentication.
+#. - This is not kept as each package should be authenticated.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:95
+msgid "Trust a key used for signing packages"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users do not require admin authentication to update the
+#. system as the packages will be signed, and the action is required
+#. to update the system when unattended.
+#. - Changing this to anything other than 'yes' will break unattended
+#. updates.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:103
+msgid "Update packages"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users require admin authentication to upgrade the disto as
+#. this can make the system unbootable or stop other applications from
+#. working.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:109
+msgid "Upgrade System"
+msgstr ""
+
+#. TRANSLATORS: failed due to DBus security
+#: ../src/pk-main.c:87
+msgid "Startup failed due to security policies on this machine."
+msgstr ""
+
+#. TRANSLATORS: only two ways this can fail...
+#: ../src/pk-main.c:89
+msgid "This can happen for two reasons:"
+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 ""
+
+#. 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 ""
+
+#. TRANSLATORS: a backend is the system package tool, e.g. yum, apt
+#: ../src/pk-main.c:200
+msgid "Packaging backend to use, e.g. dummy"
+msgstr ""
+
+#. TRANSLATORS: if we should run in the background
+#: ../src/pk-main.c:203
+msgid "Daemonize and detach from the terminal"
+msgstr ""
+
+#. TRANSLATORS: if we should not monitor how long we are inactive for
+#: ../src/pk-main.c:206
+msgid "Disable the idle timer"
+msgstr ""
+
+#. TRANSLATORS: show version
+#: ../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:212
+msgid "Exit after a small delay"
+msgstr ""
+
+#. TRANSLATORS: exit straight away, used for automatic profiling
+#: ../src/pk-main.c:215
+msgid "Exit after the engine has loaded"
+msgstr ""
+
+#. TRANSLATORS: describing the service that is running
+#: ../src/pk-main.c:230
+msgid "PackageKit service"
+msgstr ""
+
+#. TRANSLATORS: fatal error, dbus is not running
+#: ../src/pk-main.c:267
+msgid "Cannot connect to the system bus"
+msgstr ""
+
+#. TRANSLATORS: cannot register on system bus, unknown reason -- geeky error
+#. follows
+#: ../src/pk-main.c:316
+msgid "Error trying to start:"
+msgstr ""
+
+#: ../src/pk-polkit-action-lookup.c:150
+msgid "To install debugging packages, extra sources need to be enabled"
+msgstr ""
+
+#. 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 ""
+
+#: ../src/pk-polkit-action-lookup.c:176
+msgid "Do not update this package unless you are sure it is safe to do so."
+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 ""
+
+#: ../src/pk-polkit-action-lookup.c:195
+msgid "Do not install this package unless you are sure it is safe to do so."
+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 ""
+
+#. TRANSLATORS: too many packages to list each one
+#: ../src/pk-polkit-action-lookup.c:273
+msgid "Many packages"
+msgstr ""
+
+#. TRANSLATORS: if the transaction is forced to install only trusted packages
+#: ../src/pk-polkit-action-lookup.c:339
+msgid "Only trusted"
+msgstr ""
diff --git a/po/gl.po b/po/gl.po
index ff1bffa..a5e3dbb 100644
--- a/po/gl.po
+++ b/po/gl.po
@@ -8,9 +8,9 @@ msgstr ""
 "Project-Id-Version: PackageKit\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2010-12-13 12:23+0000\n"
-"PO-Revision-Date: 2011-03-04 18:34+0000\n"
+"PO-Revision-Date: 2011-03-22 15:37+0000\n"
 "Last-Translator: mbouzada <mbouzada at gmail.com>\n"
-"Language-Team: Galician <None>\n"
+"Language-Team: LANGUAGE <LL at li.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
diff --git a/po/gu.po b/po/gu.po
index c5e69a4..5fba5af 100644
--- a/po/gu.po
+++ b/po/gu.po
@@ -8,7 +8,7 @@ msgstr ""
 "Project-Id-Version: PackageKit\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2010-12-13 12:23+0000\n"
-"PO-Revision-Date: 2011-03-04 18:34+0000\n"
+"PO-Revision-Date: 2011-03-22 15:37+0000\n"
 "Last-Translator: hughsie <richard at hughsie.com>\n"
 "Language-Team: LANGUAGE <LL at li.org>\n"
 "MIME-Version: 1.0\n"
diff --git a/po/he.po b/po/he.po
index 3541353..3c06719 100644
--- a/po/he.po
+++ b/po/he.po
@@ -8,7 +8,7 @@ msgstr ""
 "Project-Id-Version: PackageKit\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2010-12-13 12:23+0000\n"
-"PO-Revision-Date: 2011-03-04 18:34+0000\n"
+"PO-Revision-Date: 2011-03-22 15:37+0000\n"
 "Last-Translator: hughsie <richard at hughsie.com>\n"
 "Language-Team: LANGUAGE <LL at li.org>\n"
 "MIME-Version: 1.0\n"
diff --git a/po/hi.po b/po/hi.po
index aa9ded0..db67d06 100644
--- a/po/hi.po
+++ b/po/hi.po
@@ -8,9 +8,9 @@ msgstr ""
 "Project-Id-Version: PackageKit\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2010-12-13 12:23+0000\n"
-"PO-Revision-Date: 2011-03-04 18:34+0000\n"
+"PO-Revision-Date: 2011-03-22 15:37+0000\n"
 "Last-Translator: hughsie <richard at hughsie.com>\n"
-"Language-Team: Hindi <None>\n"
+"Language-Team: Hindi (http://www.transifex.net/projects/p/freedesktop/team/hi/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
diff --git a/po/hu.po b/po/hu.po
index 5f365bd..e5b925e 100644
--- a/po/hu.po
+++ b/po/hu.po
@@ -8,9 +8,9 @@ msgstr ""
 "Project-Id-Version: PackageKit\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2010-12-13 12:23+0000\n"
-"PO-Revision-Date: 2011-03-04 18:34+0000\n"
+"PO-Revision-Date: 2011-03-22 15:37+0000\n"
 "Last-Translator: hughsie <richard at hughsie.com>\n"
-"Language-Team: LANGUAGE <LL at li.org>\n"
+"Language-Team: Hungarian <openscope at googlegroups.com>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
diff --git a/po/id.po b/po/id.po
index 4e4750a..ef6b4de 100644
--- a/po/id.po
+++ b/po/id.po
@@ -8,9 +8,9 @@ msgstr ""
 "Project-Id-Version: PackageKit\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2010-12-13 12:23+0000\n"
-"PO-Revision-Date: 2011-03-04 18:34+0000\n"
+"PO-Revision-Date: 2011-03-22 15:37+0000\n"
 "Last-Translator: hughsie <richard at hughsie.com>\n"
-"Language-Team: LANGUAGE <LL at li.org>\n"
+"Language-Team: Indonesian (http://www.transifex.net/projects/p/freedesktop/team/id/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
diff --git a/po/it.po b/po/it.po
index 3e26807..720df80 100644
--- a/po/it.po
+++ b/po/it.po
@@ -8,9 +8,9 @@ msgstr ""
 "Project-Id-Version: PackageKit\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2010-12-13 12:23+0000\n"
-"PO-Revision-Date: 2011-03-04 18:34+0000\n"
+"PO-Revision-Date: 2011-03-22 15:37+0000\n"
 "Last-Translator: hughsie <richard at hughsie.com>\n"
-"Language-Team: Italian <>\n"
+"Language-Team: Italian (http://www.transifex.net/projects/p/freedesktop/team/it/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
diff --git a/po/it_IT.po b/po/it_IT.po
index 7a936ad..4fd7cb6 100644
--- a/po/it_IT.po
+++ b/po/it_IT.po
@@ -8,7 +8,7 @@ msgstr ""
 "Project-Id-Version: PackageKit\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2010-12-13 12:23+0000\n"
-"PO-Revision-Date: 2011-03-04 18:34+0000\n"
+"PO-Revision-Date: 2011-03-22 15:37+0000\n"
 "Last-Translator: ElleUca <elle.uca at libero.it>\n"
 "Language-Team: LANGUAGE <LL at li.org>\n"
 "MIME-Version: 1.0\n"
diff --git a/po/ja.po b/po/ja.po
index 1399758..64ec96e 100644
--- a/po/ja.po
+++ b/po/ja.po
@@ -8,7 +8,7 @@ msgstr ""
 "Project-Id-Version: PackageKit\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2010-12-13 12:23+0000\n"
-"PO-Revision-Date: 2011-03-04 18:34+0000\n"
+"PO-Revision-Date: 2011-03-22 15:37+0000\n"
 "Last-Translator: hughsie <richard at hughsie.com>\n"
 "Language-Team: LANGUAGE <LL at li.org>\n"
 "MIME-Version: 1.0\n"
diff --git a/po/kk.po b/po/kk.po
new file mode 100644
index 0000000..6c1e3ba
--- /dev/null
+++ b/po/kk.po
@@ -0,0 +1,2097 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL at ADDRESS>, YEAR.
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: PackageKit\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-12-13 12:23+0000\n"
+"PO-Revision-Date: 2011-05-04 09:48+0000\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Language-Team: Kazakh (http://www.transifex.net/projects/p/freedesktop/team/kk/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: kk\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+
+#. TRANSLATORS: this is an atomic transaction
+#. TRANSLATORS: the role is the point of the transaction, e.g. update-system
+#: ../client/pk-console.c:174 ../client/pk-console.c:596
+msgid "Transaction"
+msgstr ""
+
+#. TRANSLATORS: this is the time the transaction was started in system
+#. timezone
+#: ../client/pk-console.c:176
+msgid "System time"
+msgstr ""
+
+#. TRANSLATORS: this is if the transaction succeeded or not
+#: ../client/pk-console.c:178
+msgid "Succeeded"
+msgstr ""
+
+#: ../client/pk-console.c:178
+msgid "True"
+msgstr ""
+
+#: ../client/pk-console.c:178
+msgid "False"
+msgstr ""
+
+#. TRANSLATORS: this is the transactions role, e.g. "update-system"
+#. TRANSLATORS: the trasaction role, e.g. update-system
+#: ../client/pk-console.c:180 ../src/pk-polkit-action-lookup.c:332
+msgid "Role"
+msgstr ""
+
+#. TRANSLATORS: this is The duration of the transaction
+#: ../client/pk-console.c:185
+msgid "Duration"
+msgstr ""
+
+#: ../client/pk-console.c:185
+msgid "(seconds)"
+msgstr ""
+
+#. TRANSLATORS: this is The command line used to do the action
+#. TRANSLATORS: the command line of the thing that wants the authentication
+#: ../client/pk-console.c:189 ../src/pk-polkit-action-lookup.c:346
+msgid "Command line"
+msgstr ""
+
+#. TRANSLATORS: this is the user ID of the user that started the action
+#: ../client/pk-console.c:191
+msgid "User ID"
+msgstr ""
+
+#. TRANSLATORS: this is the username, e.g. hughsie
+#: ../client/pk-console.c:198
+msgid "Username"
+msgstr ""
+
+#. TRANSLATORS: this is the users real name, e.g. "Richard Hughes"
+#: ../client/pk-console.c:202
+msgid "Real name"
+msgstr ""
+
+#: ../client/pk-console.c:210
+msgid "Affected packages:"
+msgstr ""
+
+#: ../client/pk-console.c:212
+msgid "Affected packages: None"
+msgstr ""
+
+#. TRANSLATORS: this is the distro, e.g. Fedora 10
+#: ../client/pk-console.c:247
+msgid "Distribution"
+msgstr ""
+
+#. TRANSLATORS: this is type of update, stable or testing
+#: ../client/pk-console.c:249
+msgid "Type"
+msgstr ""
+
+#. TRANSLATORS: this is any summary text describing the upgrade
+#. TRANSLATORS: this is the summary of the group
+#: ../client/pk-console.c:251 ../client/pk-console.c:290
+msgid "Summary"
+msgstr ""
+
+#. TRANSLATORS: this is the group category name
+#: ../client/pk-console.c:279
+msgid "Category"
+msgstr ""
+
+#. TRANSLATORS: this is group identifier
+#: ../client/pk-console.c:281
+msgid "ID"
+msgstr ""
+
+#. TRANSLATORS: this is the parent group
+#: ../client/pk-console.c:284
+msgid "Parent"
+msgstr ""
+
+#. TRANSLATORS: this is the name of the parent group
+#: ../client/pk-console.c:287
+msgid "Name"
+msgstr ""
+
+#. TRANSLATORS: this is preferred icon for the group
+#: ../client/pk-console.c:293
+msgid "Icon"
+msgstr ""
+
+#. TRANSLATORS: this is a header for the package that can be updated
+#: ../client/pk-console.c:339
+msgid "Details about the update:"
+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:345 ../client/pk-console.c:615
+#: ../lib/packagekit-glib2/pk-task-text.c:124
+#: ../lib/packagekit-glib2/pk-task-text.c:206
+#: ../src/pk-polkit-action-lookup.c:357
+msgid "Package"
+msgid_plural "Packages"
+msgstr[0] ""
+
+#. TRANSLATORS: details about the update, any packages that this update
+#. updates
+#: ../client/pk-console.c:348
+msgid "Updates"
+msgstr ""
+
+#. TRANSLATORS: details about the update, any packages that this update
+#. obsoletes
+#: ../client/pk-console.c:352
+msgid "Obsoletes"
+msgstr ""
+
+#. TRANSLATORS: details about the update, the vendor URLs
+#. TRANSLATORS: the vendor (e.g. vmware) that is providing the EULA
+#: ../client/pk-console.c:356 ../lib/packagekit-glib2/pk-task-text.c:209
+msgid "Vendor"
+msgstr ""
+
+#. TRANSLATORS: details about the update, the bugzilla URLs
+#: ../client/pk-console.c:360
+msgid "Bugzilla"
+msgstr ""
+
+#. TRANSLATORS: details about the update, the CVE URLs
+#: ../client/pk-console.c:364
+msgid "CVE"
+msgstr ""
+
+#. TRANSLATORS: details about the update, if the package requires a restart
+#: ../client/pk-console.c:368
+msgid "Restart"
+msgstr ""
+
+#. TRANSLATORS: details about the update, any description of the update
+#: ../client/pk-console.c:372
+msgid "Update text"
+msgstr ""
+
+#. TRANSLATORS: details about the update, the changelog for the package
+#: ../client/pk-console.c:376
+msgid "Changes"
+msgstr ""
+
+#. TRANSLATORS: details about the update, the ongoing state of the update
+#: ../client/pk-console.c:380
+msgid "State"
+msgstr ""
+
+#. TRANSLATORS: details about the update, date the update was issued
+#: ../client/pk-console.c:384
+msgid "Issued"
+msgstr ""
+
+#. TRANSLATORS: details about the update, date the update was updated
+#. TRANSLATORS: The action of the package, in past tense
+#: ../client/pk-console.c:388 ../lib/packagekit-glib2/pk-console-shared.c:515
+msgid "Updated"
+msgstr ""
+
+#. TRANSLATORS: if the repo is enabled
+#: ../client/pk-console.c:424
+msgid "Enabled"
+msgstr ""
+
+#. TRANSLATORS: if the repo is disabled
+#: ../client/pk-console.c:427
+msgid "Disabled"
+msgstr ""
+
+#. TRANSLATORS: a package requires the system to be restarted
+#: ../client/pk-console.c:459
+msgid "System restart required by:"
+msgstr ""
+
+#. TRANSLATORS: a package requires the session to be restarted
+#: ../client/pk-console.c:462
+msgid "Session restart required:"
+msgstr ""
+
+#. TRANSLATORS: a package requires the system to be restarted due to a
+#. security update
+#: ../client/pk-console.c:465
+msgid "System restart (security) required by:"
+msgstr ""
+
+#. TRANSLATORS: a package requires the session to be restarted due to a
+#. security update
+#: ../client/pk-console.c:468
+msgid "Session restart (security) required:"
+msgstr ""
+
+#. TRANSLATORS: a package requires the application to be restarted
+#: ../client/pk-console.c:471
+msgid "Application restart required by:"
+msgstr ""
+
+#. TRANSLATORS: This a list of details about the package
+#: ../client/pk-console.c:506
+msgid "Package description"
+msgstr ""
+
+#. TRANSLATORS: This a message (like a little note that may be of interest)
+#. from the transaction
+#: ../client/pk-console.c:537
+msgid "Message:"
+msgstr ""
+
+#. TRANSLATORS: This where the package has no files
+#: ../client/pk-console.c:558
+msgid "No files"
+msgstr ""
+
+#. TRANSLATORS: This a list files contained in the package
+#: ../client/pk-console.c:563
+msgid "Package files"
+msgstr ""
+
+#. TRANSLATORS: the percentage complete of the transaction
+#: ../client/pk-console.c:631
+msgid "Percentage"
+msgstr ""
+
+#. TRANSLATORS: the status of the transaction (e.g. downloading)
+#: ../client/pk-console.c:649
+msgid "Status"
+msgstr ""
+
+#. TRANSLATORS: the results from the transaction
+#: ../client/pk-console.c:678
+msgid "Results:"
+msgstr ""
+
+#. TRANSLATORS: we failed to get any results, which is pretty fatal in my book
+#: ../client/pk-console.c:685
+msgid "Fatal error"
+msgstr ""
+
+#. TRANSLATORS: the user asked to update everything, but there is nothing that
+#. can be updated
+#: ../client/pk-console.c:701
+msgid "There are no packages to update."
+msgstr ""
+
+#. TRANSLATORS: the transaction failed in a way we could not expect
+#: ../client/pk-console.c:704
+#: ../contrib/command-not-found/pk-command-not-found.c:639
+msgid "The transaction failed"
+msgstr ""
+
+#. TRANSLATORS: print a message when there are no updates
+#: ../client/pk-console.c:733
+msgid "There are no updates available at this time."
+msgstr ""
+
+#: ../client/pk-console.c:756
+msgid "There are no upgrades available at this time."
+msgstr ""
+
+#. TRANSLATORS: a package needs to restart their system
+#: ../client/pk-console.c:823
+msgid "Please restart the computer to complete the update."
+msgstr ""
+
+#. TRANSLATORS: a package needs to restart the session
+#: ../client/pk-console.c:826
+msgid "Please logout and login to complete the update."
+msgstr ""
+
+#. TRANSLATORS: a package needs to restart their system (due to security)
+#: ../client/pk-console.c:829
+msgid ""
+"Please restart the computer to complete the update as important security "
+"updates have been installed."
+msgstr ""
+
+#. TRANSLATORS: a package needs to restart the session (due to security)
+#: ../client/pk-console.c:832
+msgid ""
+"Please logout and login to complete the update as important security updates"
+" have been installed."
+msgstr ""
+
+#. TRANSLATORS: The user used 'pkcon install dave.rpm' rather than 'pkcon
+#. install-local dave.rpm'
+#: ../client/pk-console.c:858
+#, 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:866
+#, c-format
+msgid "This tool could not find any available package: %s"
+msgstr ""
+
+#. TRANSLATORS: There was an error getting the list of files for the package.
+#. The detailed error follows
+#: ../client/pk-console.c:894
+#, c-format
+msgid "This tool could not find the installed package: %s"
+msgstr ""
+
+#. TRANSLATORS: There was an error getting the list of files for the package.
+#. The detailed error follows
+#: ../client/pk-console.c:922 ../client/pk-console.c:950
+#, c-format
+msgid "This tool could not find the package: %s"
+msgstr ""
+
+#. TRANSLATORS: There was an error getting the list of files for the package.
+#. The detailed error follows
+#. TRANSLATORS: There was an error getting the dependencies for the package.
+#. The detailed error follows
+#. TRANSLATORS: There was an error getting the details about the package. The
+#. detailed error follows
+#. TRANSLATORS: The package name was not found in any software sources. The
+#. detailed error follows
+#: ../client/pk-console.c:978 ../client/pk-console.c:1006
+#: ../client/pk-console.c:1034 ../client/pk-console.c:1062
+#: ../client/pk-console.c:1090
+#, c-format
+msgid "This tool could not find all the packages: %s"
+msgstr ""
+
+#. TRANSLATORS: This is when the daemon crashed, and we are up shit creek
+#. without a paddle
+#: ../client/pk-console.c:1119
+msgid "The daemon crashed mid-transaction!"
+msgstr ""
+
+#. TRANSLATORS: This is the header to the --help menu
+#: ../client/pk-console.c:1153
+msgid "PackageKit Console Interface"
+msgstr ""
+
+#. these are commands we can use with pkcon
+#: ../client/pk-console.c:1155
+msgid "Subcommands:"
+msgstr ""
+
+#. TRANSLATORS: we keep a database updated with the time that an action was
+#. last executed
+#: ../client/pk-console.c:1234
+msgid "Failed to get the time since this action was last completed"
+msgstr ""
+
+#. TRANSLATORS: command line argument, just show the version string
+#: ../client/pk-console.c:1275 ../client/pk-monitor.c:371
+msgid "Show the program version and exit"
+msgstr ""
+
+#. TRANSLATORS: command line argument, use a filter to narrow down results
+#: ../client/pk-console.c:1278
+msgid "Set the filter, e.g. installed"
+msgstr ""
+
+#. TRANSLATORS: command line argument, use a non-standard install prefix
+#: ../client/pk-console.c:1281
+msgid "Set the install root, e.g. '/' or '/mnt/ltsp'"
+msgstr ""
+
+#. TRANSLATORS: command line argument, work asynchronously
+#: ../client/pk-console.c:1284
+msgid "Exit without waiting for actions to complete"
+msgstr ""
+
+#. command line argument, do we ask questions
+#: ../client/pk-console.c:1287
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:525
+msgid "Install the packages without asking for confirmation"
+msgstr ""
+
+#. TRANSLATORS: command line argument, this command is not a priority
+#: ../client/pk-console.c:1290
+msgid "Run the command using idle network bandwidth and also using less power"
+msgstr ""
+
+#. TRANSLATORS: command line argument, just output without fancy formatting
+#: ../client/pk-console.c:1293
+msgid ""
+"Print to screen a machine readable output, rather than using animated "
+"widgets"
+msgstr ""
+
+#. TRANSLATORS: command line argument, just output without fancy formatting
+#: ../client/pk-console.c:1296
+msgid "The maximum metadata cache age. Use -1 for 'never'."
+msgstr ""
+
+#. TRANSLATORS: we failed to contact the daemon
+#: ../client/pk-console.c:1333
+msgid "Failed to contact PackageKit"
+msgstr ""
+
+#. TRANSLATORS: The user specified an incorrect filter
+#: ../client/pk-console.c:1381
+msgid "The proxy could not be set"
+msgstr ""
+
+#. TRANSLATORS: The user specified an incorrect filter
+#: ../client/pk-console.c:1393
+msgid "The install root could not be set"
+msgstr ""
+
+#. TRANSLATORS: The user specified an incorrect filter
+#: ../client/pk-console.c:1405
+msgid "The filter specified was invalid"
+msgstr ""
+
+#. TRANSLATORS: a search type can be name, details, file, etc
+#: ../client/pk-console.c:1424
+msgid "A search type is required, e.g. name"
+msgstr ""
+
+#. TRANSLATORS: the user needs to provide a search term
+#: ../client/pk-console.c:1431 ../client/pk-console.c:1443
+#: ../client/pk-console.c:1455 ../client/pk-console.c:1467
+msgid "A search term is required"
+msgstr ""
+
+#. TRANSLATORS: the search type was provided, but invalid
+#: ../client/pk-console.c:1477
+msgid "Invalid search type"
+msgstr ""
+
+#. TRANSLATORS: the user did not specify what they wanted to install
+#: ../client/pk-console.c:1483
+msgid "A package name to install is required"
+msgstr ""
+
+#. TRANSLATORS: the user did not specify what they wanted to install
+#: ../client/pk-console.c:1492
+msgid "A filename to install is required"
+msgstr ""
+
+#. TRANSLATORS: geeky error, 99.9999% of users won't see this
+#: ../client/pk-console.c:1503
+msgid "A type, key_id and package_id are required"
+msgstr ""
+
+#. TRANSLATORS: the user did not specify what they wanted to remove
+#: ../client/pk-console.c:1514
+msgid "A package name to remove is required"
+msgstr ""
+
+#. TRANSLATORS: the user did not specify anything about what to download or
+#. where
+#: ../client/pk-console.c:1523
+msgid "A destination directory and the package names to download are required"
+msgstr ""
+
+#. TRANSLATORS: the directory does not exist, so we can't continue
+#: ../client/pk-console.c:1530
+msgid "Directory not found"
+msgstr ""
+
+#. TRANSLATORS: geeky error, 99.9999% of users won't see this
+#: ../client/pk-console.c:1539
+msgid "A licence identifier (eula-id) is required"
+msgstr ""
+
+#. TRANSLATORS: geeky error, 99.9999% of users won't see this
+#: ../client/pk-console.c:1550
+msgid "A transaction identifier (tid) is required"
+msgstr ""
+
+#. TRANSLATORS: The user did not specify a package name
+#: ../client/pk-console.c:1571
+msgid "A package name to resolve is required"
+msgstr ""
+
+#. TRANSLATORS: The user did not specify a repository (software source) name
+#: ../client/pk-console.c:1582 ../client/pk-console.c:1593
+msgid "A repository name is required"
+msgstr ""
+
+#. TRANSLATORS: The user didn't provide any data
+#: ../client/pk-console.c:1604
+msgid "A repo name, parameter and value are required"
+msgstr ""
+
+#. TRANSLATORS: The user didn't specify what action to use
+#: ../client/pk-console.c:1621
+msgid "An action, e.g. 'update-system' is required"
+msgstr ""
+
+#. TRANSLATORS: The user specified an invalid action
+#: ../client/pk-console.c:1628
+msgid "A correct role is required"
+msgstr ""
+
+#. TRANSLATORS: The user did not provide a package name
+#. TRANSLATORS: This is when the user fails to supply the package name
+#: ../client/pk-console.c:1638 ../client/pk-console.c:1652
+#: ../client/pk-console.c:1661 ../client/pk-console.c:1681
+#: ../client/pk-console.c:1690 ../client/pk-generate-pack.c:314
+msgid "A package name is required"
+msgstr ""
+
+#. TRANSLATORS: each package "provides" certain things, e.g. mime(gstreamer-
+#. decoder-mp3), the user didn't specify it
+#: ../client/pk-console.c:1670
+msgid "A package provide string is required"
+msgstr ""
+
+#. TRANSLATORS: The user did not provide a distro name
+#: ../client/pk-console.c:1714
+msgid "A distribution name is required"
+msgstr ""
+
+#. TRANSLATORS: The user did not provide an upgrade type
+#: ../client/pk-console.c:1720
+msgid "An upgrade type is required, e.g. 'minimal', 'default' or 'complete'"
+msgstr ""
+
+#. TRANSLATORS: The user tried to use an unsupported option on the command
+#. line
+#: ../client/pk-console.c:1770
+#, c-format
+msgid "Option '%s' is not supported"
+msgstr ""
+
+#. TRANSLATORS: Generic failure of what they asked to do
+#: ../client/pk-console.c:1780
+msgid "Command failed"
+msgstr ""
+
+#. TRANSLATORS: we can exclude certain packages (glibc) when we know they'll
+#. exist on the target
+#: ../client/pk-generate-pack.c:253
+msgid "Set the file name of dependencies to be excluded"
+msgstr ""
+
+#. TRANSLATORS: the output location
+#: ../client/pk-generate-pack.c:256
+msgid ""
+"The output file or directory (the current directory is used if omitted)"
+msgstr ""
+
+#. TRANSLATORS: put a list of packages in the pack
+#: ../client/pk-generate-pack.c:259
+msgid "The package to be put into the service pack"
+msgstr ""
+
+#. TRANSLATORS: put all pending updates in the pack
+#: ../client/pk-generate-pack.c:262
+msgid "Put all updates available in the service pack"
+msgstr ""
+
+#. TRANSLATORS: This is when the user fails to supply the correct arguments
+#: ../client/pk-generate-pack.c:298
+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:306
+msgid "Both options selected."
+msgstr ""
+
+#. TRANSLATORS: This is when the user fails to supply the output
+#: ../client/pk-generate-pack.c:322
+msgid "A output directory or file name is required"
+msgstr ""
+
+#. TRANSLATORS: This is when the daemon is not-installed/broken and fails to
+#. startup
+#: ../client/pk-generate-pack.c:340
+msgid "The daemon failed to startup"
+msgstr ""
+
+#. TRANSLATORS: This is when the backend doesn't have the capability to get-
+#. depends
+#. TRANSLATORS: This is when the backend doesn't have the capability to
+#. download
+#: ../client/pk-generate-pack.c:351 ../client/pk-generate-pack.c:357
+msgid "The package manager cannot perform this type of operation."
+msgstr ""
+
+#. TRANSLATORS: This is when the distro didn't include libarchive support into
+#. PK
+#: ../client/pk-generate-pack.c:364
+msgid ""
+"Service packs cannot be created as PackageKit was not built with libarchive "
+"support."
+msgstr ""
+
+#. TRANSLATORS: the user specified an absolute path, but didn't get the
+#. extension correct
+#: ../client/pk-generate-pack.c:375
+msgid "If specifying a file, the service pack name must end with"
+msgstr ""
+
+#. TRANSLATORS: This is when file already exists
+#: ../client/pk-generate-pack.c:391
+msgid "A pack with the same name already exists, do you want to overwrite it?"
+msgstr ""
+
+#. TRANSLATORS: This is when the pack was not overwritten
+#: ../client/pk-generate-pack.c:394
+msgid "The pack was not overwritten."
+msgstr ""
+
+#. TRANSLATORS: This is when the temporary directory cannot be created, the
+#. directory name follows
+#: ../client/pk-generate-pack.c:407
+msgid "Failed to create directory:"
+msgstr ""
+
+#. TRANSLATORS: This is when the list of packages from the remote computer
+#. cannot be opened
+#: ../client/pk-generate-pack.c:419
+msgid "Failed to open package list."
+msgstr ""
+
+#. TRANSLATORS: The package name is being matched up to available packages
+#: ../client/pk-generate-pack.c:428
+msgid "Finding package name."
+msgstr ""
+
+#. TRANSLATORS: This is when the package cannot be found in any software
+#. source. The detailed error follows
+#: ../client/pk-generate-pack.c:432
+#, 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:440
+msgid "Creating service pack..."
+msgstr ""
+
+#. TRANSLATORS: we succeeded in making the file
+#: ../client/pk-generate-pack.c:455
+#, c-format
+msgid "Service pack created '%s'"
+msgstr ""
+
+#. TRANSLATORS: we failed to make te file
+#: ../client/pk-generate-pack.c:460
+#, c-format
+msgid "Failed to create '%s': %s"
+msgstr ""
+
+#: ../client/pk-monitor.c:284
+msgid "Failed to get daemon state"
+msgstr ""
+
+#: ../client/pk-monitor.c:349
+msgid "Failed to get properties"
+msgstr ""
+
+#. TRANSLATORS: this is a program that monitors PackageKit
+#: ../client/pk-monitor.c:387
+msgid "PackageKit Monitor"
+msgstr ""
+
+#. TRANSLATORS: when we are getting data from the daemon
+#: ../contrib/browser-plugin/pk-plugin-install.c:499
+msgid "Getting package information..."
+msgstr ""
+
+#. TRANSLATORS: run an applicaiton
+#: ../contrib/browser-plugin/pk-plugin-install.c:505
+#, c-format
+msgid "Run %s"
+msgstr ""
+
+#. TRANSLATORS: show the installed version of a package
+#: ../contrib/browser-plugin/pk-plugin-install.c:511
+msgid "Installed version"
+msgstr ""
+
+#. TRANSLATORS: run the application now
+#: ../contrib/browser-plugin/pk-plugin-install.c:519
+#, c-format
+msgid "Run version %s now"
+msgstr ""
+
+#. TRANSLATORS: run the application now
+#: ../contrib/browser-plugin/pk-plugin-install.c:525
+msgid "Run now"
+msgstr ""
+
+#. TRANSLATORS: update to a new version of the package
+#: ../contrib/browser-plugin/pk-plugin-install.c:531
+#, c-format
+msgid "Update to version %s"
+msgstr ""
+
+#. TRANSLATORS: To install a package
+#: ../contrib/browser-plugin/pk-plugin-install.c:537
+#, c-format
+msgid "Install %s now"
+msgstr ""
+
+#. TRANSLATORS: the version of the package
+#: ../contrib/browser-plugin/pk-plugin-install.c:540
+msgid "Version"
+msgstr ""
+
+#. TRANSLATORS: noting found, so can't install
+#: ../contrib/browser-plugin/pk-plugin-install.c:545
+msgid "No packages found for your system"
+msgstr ""
+
+#. TRANSLATORS: package is being installed
+#: ../contrib/browser-plugin/pk-plugin-install.c:550
+msgid "Installing..."
+msgstr ""
+
+#. TRANSLATORS: downloading repo data so we can search
+#: ../contrib/command-not-found/pk-command-not-found.c: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: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: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: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:444
+msgid "Failed to search for file"
+msgstr ""
+
+#. TRANSLATORS: the transaction failed in a way we could not expect
+#: ../contrib/command-not-found/pk-command-not-found.c:456
+msgid "Getting the list of files failed"
+msgstr ""
+
+#. TRANSLATORS: we failed to launch the executable, the error follows
+#: ../contrib/command-not-found/pk-command-not-found.c:602
+msgid "Failed to launch:"
+msgstr ""
+
+#. TRANSLATORS: we failed to install the package
+#: ../contrib/command-not-found/pk-command-not-found.c:630
+msgid "Failed to install packages"
+msgstr ""
+
+#. TRANSLATORS: tool that gets called when the command is not found
+#: ../contrib/command-not-found/pk-command-not-found.c:706
+msgid "PackageKit Command Not Found"
+msgstr ""
+
+#. TRANSLATORS: the prefix of all the output telling the user
+#. * why it's not executing. NOTE: this is lowercase to mimic
+#. * the style of bash itself -- apologies
+#: ../contrib/command-not-found/pk-command-not-found.c:739
+msgid "command not found"
+msgstr ""
+
+#. TRANSLATORS: tell the user what we think the command is
+#: ../contrib/command-not-found/pk-command-not-found.c:757
+msgid "Similar command is:"
+msgstr ""
+
+#. TRANSLATORS: Ask the user if we should run the similar command
+#: ../contrib/command-not-found/pk-command-not-found.c:771
+msgid "Run similar command:"
+msgstr ""
+
+#. TRANSLATORS: show the user a list of commands that they could have meant
+#. TRANSLATORS: show the user a list of commands we could run
+#: ../contrib/command-not-found/pk-command-not-found.c:785
+#: ../contrib/command-not-found/pk-command-not-found.c:794
+msgid "Similar commands are:"
+msgstr ""
+
+#. TRANSLATORS: ask the user to choose a file to run
+#: ../contrib/command-not-found/pk-command-not-found.c:801
+msgid "Please choose a command to run"
+msgstr ""
+
+#. TRANSLATORS: tell the user what package provides the command
+#: ../contrib/command-not-found/pk-command-not-found.c:819
+msgid "The package providing this file is:"
+msgstr ""
+
+#. TRANSLATORS: as the user if we want to install a package to provide the
+#. command
+#: ../contrib/command-not-found/pk-command-not-found.c:826
+#, 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:853
+msgid "Packages providing this file are:"
+msgstr ""
+
+#. TRANSLATORS: Show the user a list of packages that they can install to
+#. provide this command
+#: ../contrib/command-not-found/pk-command-not-found.c:863
+msgid "Suitable packages are:"
+msgstr ""
+
+#. get selection
+#. TRANSLATORS: ask the user to choose a file to install
+#: ../contrib/command-not-found/pk-command-not-found.c:872
+msgid "Please choose a package to install"
+msgstr ""
+
+#. TRANSLATORS: we are starting to install the packages
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:195
+msgid "Starting install"
+msgstr ""
+
+#. TRANSLATORS: we couldn't find the package name, non-fatal
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:407
+#, c-format
+msgid "Failed to find the package %s, or already installed: %s"
+msgstr ""
+
+#. command line argument, simulate what would be done, but don't actually do
+#. it
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:516
+msgid ""
+"Don't actually install any packages, only simulate what would be installed"
+msgstr ""
+
+#. command line argument, do we skip packages that depend on the ones
+#. specified
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:519
+msgid "Do not install dependencies of the core packages"
+msgstr ""
+
+#. command line argument, do we operate quietly
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:522
+msgid "Do not display information or progress"
+msgstr ""
+
+#. TRANSLATORS: tool that gets called when the command is not found
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:540
+msgid "PackageKit Debuginfo Installer"
+msgstr ""
+
+#. TRANSLATORS: the use needs to specify a list of package names on the
+#. command line
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:554
+#, c-format
+msgid "ERROR: Specify package names to install."
+msgstr ""
+
+#. TRANSLATORS: we are getting the list of repositories
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:590
+#, c-format
+msgid "Getting sources list"
+msgstr ""
+
+#. TRANSLATORS: operation was not successful
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:600
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:675
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:759
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:803
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:870
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:914
+msgid "FAILED."
+msgstr ""
+
+#. TRANSLATORS: all completed 100%
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:615
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:655
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:690
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:774
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:818
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:885
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:929
+#, c-format
+msgid "OK."
+msgstr ""
+
+#. TRANSLATORS: tell the user what we found
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:618
+#, c-format
+msgid "Found %i enabled and %i disabled sources."
+msgstr ""
+
+#. TRANSLATORS: we're finding repositories that match out pattern
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:625
+#, c-format
+msgid "Finding debugging sources"
+msgstr ""
+
+#. TRANSLATORS: tell the user what we found
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:658
+#, c-format
+msgid "Found %i disabled debuginfo repos."
+msgstr ""
+
+#. TRANSLATORS: we're now enabling all the debug sources we found
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:665
+#, c-format
+msgid "Enabling debugging sources"
+msgstr ""
+
+#. TRANSLATORS: tell the user how many we enabled
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:693
+#, c-format
+msgid "Enabled %i debugging sources."
+msgstr ""
+
+#. TRANSLATORS: we're now finding packages that match in all the repos
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:700
+#, c-format
+msgid "Finding debugging packages"
+msgstr ""
+
+#. TRANSLATORS: we couldn't find the package name, non-fatal
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:712
+#, c-format
+msgid "Failed to find the package %s: %s"
+msgstr ""
+
+#. TRANSLATORS: we couldn't find the debuginfo package name, non-fatal
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:735
+#, c-format
+msgid "Failed to find the debuginfo package %s: %s"
+msgstr ""
+
+#. TRANSLATORS: no debuginfo packages could be found to be installed
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:763
+#, c-format
+msgid "Found no packages to install."
+msgstr ""
+
+#. TRANSLATORS: tell the user we found some packages, and then list them
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:777
+#, c-format
+msgid "Found %i packages:"
+msgstr ""
+
+#. TRANSLATORS: tell the user we are searching for deps
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:793
+#, c-format
+msgid "Finding packages that depend on these packages"
+msgstr ""
+
+#. TRANSLATORS: could not install, detailed error follows
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:806
+#, c-format
+msgid "Could not find dependant packages: %s"
+msgstr ""
+
+#. TRANSLATORS: tell the user we found some more packages
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:822
+#, c-format
+msgid "Found %i extra packages."
+msgstr ""
+
+#. TRANSLATORS: tell the user we found some more packages
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:826
+#, c-format
+msgid "No extra packages required."
+msgstr ""
+
+#. TRANSLATORS: tell the user we found some packages (and deps), and then list
+#. them
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:835
+#, c-format
+msgid "Found %i packages to install:"
+msgstr ""
+
+#. TRANSLATORS: simulate mode is a testing mode where we quit before the
+#. action
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:848
+#, c-format
+msgid "Not installing packages in simulate mode"
+msgstr ""
+
+#. TRANSLATORS: we are now installing the debuginfo packages we found earlier
+#. TRANSLATORS: transaction state, installing packages
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:860
+#: ../lib/packagekit-glib2/pk-console-shared.c:287
+#, c-format
+msgid "Installing packages"
+msgstr ""
+
+#. TRANSLATORS: could not install, detailed error follows
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:873
+#, c-format
+msgid "Could not install packages: %s"
+msgstr ""
+
+#. TRANSLATORS: we are now disabling all debuginfo repos we previously enabled
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:905
+#, c-format
+msgid "Disabling sources previously enabled"
+msgstr ""
+
+#. TRANSLATORS: no debuginfo packages could be found to be installed, detailed
+#. error follows
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:917
+#, c-format
+msgid "Could not disable the debugging sources: %s"
+msgstr ""
+
+#. TRANSLATORS: we disabled all the debugging repos that we enabled before
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:932
+#, c-format
+msgid "Disabled %i debugging sources."
+msgstr ""
+
+#. TRANSLATORS: couldn't open device to write
+#: ../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:71
+msgid "Failed to write to the file"
+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 ""
+
+#. TRANSLATORS: the device could not be found in sysfs
+#: ../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:203
+msgid "Failed to unregister driver"
+msgstr ""
+
+#. TRANSLATORS: we failed to bind the old driver
+#: ../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:261
+msgid "Device path not found"
+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 ""
+
+#: ../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: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: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:315
+msgid "PackageKit Device Reloader"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. TRANSLATORS: we're going to verify the path first
+#: ../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:347
+msgid "Failed to verify device path"
+msgstr ""
+
+#. TRANSLATORS: we're going to try
+#: ../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:366
+msgid "Failed to rebind device"
+msgstr ""
+
+#: ../data/packagekit-catalog.xml.in.h:1
+msgid "PackageKit Catalog"
+msgstr ""
+
+#: ../data/packagekit-package-list.xml.in.h:1
+msgid "PackageKit Package List"
+msgstr ""
+
+#: ../data/packagekit-servicepack.xml.in.h:1
+msgid "PackageKit Service Pack"
+msgstr ""
+
+#: ../lib/packagekit-glib2/pk-console-shared.c:63
+#, 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:189
+msgid "More than one package matches:"
+msgstr ""
+
+#. TRANSLATORS: This finds out which package in the list to use
+#: ../lib/packagekit-glib2/pk-console-shared.c:200
+msgid "Please choose the correct package: "
+msgstr ""
+
+#. TRANSLATORS: This is when the transaction status is not known
+#: ../lib/packagekit-glib2/pk-console-shared.c:255
+msgid "Unknown state"
+msgstr ""
+
+#. TRANSLATORS: transaction state, the daemon is in the process of starting
+#: ../lib/packagekit-glib2/pk-console-shared.c:259
+msgid "Starting"
+msgstr ""
+
+#. TRANSLATORS: transaction state, the transaction is waiting for another to
+#. complete
+#: ../lib/packagekit-glib2/pk-console-shared.c:263
+msgid "Waiting in queue"
+msgstr ""
+
+#. TRANSLATORS: transaction state, just started
+#: ../lib/packagekit-glib2/pk-console-shared.c:267
+msgid "Running"
+msgstr ""
+
+#. TRANSLATORS: transaction state, is querying data
+#: ../lib/packagekit-glib2/pk-console-shared.c:271
+msgid "Querying"
+msgstr ""
+
+#. TRANSLATORS: transaction state, getting data from a server
+#: ../lib/packagekit-glib2/pk-console-shared.c:275
+msgid "Getting information"
+msgstr ""
+
+#. TRANSLATORS: transaction state, removing packages
+#: ../lib/packagekit-glib2/pk-console-shared.c:279
+msgid "Removing packages"
+msgstr ""
+
+#. TRANSLATORS: transaction state, downloading package files
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:283
+#: ../lib/packagekit-glib2/pk-console-shared.c:661
+msgid "Downloading packages"
+msgstr ""
+
+#. TRANSLATORS: transaction state, refreshing internal lists
+#: ../lib/packagekit-glib2/pk-console-shared.c:291
+msgid "Refreshing software list"
+msgstr ""
+
+#. TRANSLATORS: transaction state, installing updates
+#: ../lib/packagekit-glib2/pk-console-shared.c:295
+msgid "Installing updates"
+msgstr ""
+
+#. TRANSLATORS: transaction state, removing old packages, and cleaning config
+#. files
+#: ../lib/packagekit-glib2/pk-console-shared.c:299
+msgid "Cleaning up packages"
+msgstr ""
+
+#. TRANSLATORS: transaction state, obsoleting old packages
+#: ../lib/packagekit-glib2/pk-console-shared.c:303
+msgid "Obsoleting packages"
+msgstr ""
+
+#. TRANSLATORS: transaction state, checking the transaction before we do it
+#: ../lib/packagekit-glib2/pk-console-shared.c:307
+msgid "Resolving dependencies"
+msgstr ""
+
+#. TRANSLATORS: transaction state, checking if we have all the security keys
+#. for the operation
+#: ../lib/packagekit-glib2/pk-console-shared.c:311
+msgid "Checking signatures"
+msgstr ""
+
+#. TRANSLATORS: transaction state, when we return to a previous system state
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:315
+#: ../lib/packagekit-glib2/pk-console-shared.c:621
+msgid "Rolling back"
+msgstr ""
+
+#. TRANSLATORS: transaction state, when we're doing a test transaction
+#: ../lib/packagekit-glib2/pk-console-shared.c:319
+msgid "Testing changes"
+msgstr ""
+
+#. TRANSLATORS: transaction state, when we're writing to the system package
+#. database
+#: ../lib/packagekit-glib2/pk-console-shared.c:323
+msgid "Committing changes"
+msgstr ""
+
+#. TRANSLATORS: transaction state, requesting data from a server
+#: ../lib/packagekit-glib2/pk-console-shared.c:327
+msgid "Requesting data"
+msgstr ""
+
+#. TRANSLATORS: transaction state, all done!
+#: ../lib/packagekit-glib2/pk-console-shared.c:331
+msgid "Finished"
+msgstr ""
+
+#. TRANSLATORS: transaction state, in the process of cancelling
+#: ../lib/packagekit-glib2/pk-console-shared.c:335
+msgid "Cancelling"
+msgstr ""
+
+#. TRANSLATORS: transaction state, downloading metadata
+#: ../lib/packagekit-glib2/pk-console-shared.c:339
+msgid "Downloading repository information"
+msgstr ""
+
+#. TRANSLATORS: transaction state, downloading metadata
+#: ../lib/packagekit-glib2/pk-console-shared.c:343
+msgid "Downloading list of packages"
+msgstr ""
+
+#. TRANSLATORS: transaction state, downloading metadata
+#: ../lib/packagekit-glib2/pk-console-shared.c:347
+msgid "Downloading file lists"
+msgstr ""
+
+#. TRANSLATORS: transaction state, downloading metadata
+#: ../lib/packagekit-glib2/pk-console-shared.c:351
+msgid "Downloading lists of changes"
+msgstr ""
+
+#. TRANSLATORS: transaction state, downloading metadata
+#: ../lib/packagekit-glib2/pk-console-shared.c:355
+msgid "Downloading groups"
+msgstr ""
+
+#. TRANSLATORS: transaction state, downloading metadata
+#: ../lib/packagekit-glib2/pk-console-shared.c:359
+msgid "Downloading update information"
+msgstr ""
+
+#. TRANSLATORS: transaction state, repackaging delta files
+#: ../lib/packagekit-glib2/pk-console-shared.c:363
+msgid "Repackaging files"
+msgstr ""
+
+#. TRANSLATORS: transaction state, loading databases
+#: ../lib/packagekit-glib2/pk-console-shared.c:367
+msgid "Loading cache"
+msgstr ""
+
+#. TRANSLATORS: transaction state, scanning for running processes
+#: ../lib/packagekit-glib2/pk-console-shared.c:371
+msgid "Scanning applications"
+msgstr ""
+
+#. TRANSLATORS: transaction state, generating a list of packages installed on
+#. the system
+#: ../lib/packagekit-glib2/pk-console-shared.c:375
+msgid "Generating package lists"
+msgstr ""
+
+#. TRANSLATORS: transaction state, when we're waiting for the native tools to
+#. exit
+#: ../lib/packagekit-glib2/pk-console-shared.c:379
+msgid "Waiting for package manager lock"
+msgstr ""
+
+#. TRANSLATORS: transaction state, waiting for user to type in a password
+#: ../lib/packagekit-glib2/pk-console-shared.c:383
+msgid "Waiting for authentication"
+msgstr ""
+
+#. TRANSLATORS: transaction state, we are updating the list of processes
+#: ../lib/packagekit-glib2/pk-console-shared.c:387
+msgid "Updating running applications"
+msgstr ""
+
+#. TRANSLATORS: transaction state, we are checking executable files currently
+#. in use
+#: ../lib/packagekit-glib2/pk-console-shared.c:391
+msgid "Checking applications in use"
+msgstr ""
+
+#. TRANSLATORS: transaction state, we are checking for libraries currently in
+#. use
+#: ../lib/packagekit-glib2/pk-console-shared.c:395
+msgid "Checking libraries in use"
+msgstr ""
+
+#. TRANSLATORS: transaction state, we are copying package files before or
+#. after the transaction
+#: ../lib/packagekit-glib2/pk-console-shared.c:399
+msgid "Copying files"
+msgstr ""
+
+#. TRANSLATORS: The type of update
+#: ../lib/packagekit-glib2/pk-console-shared.c:417
+msgid "Trivial"
+msgstr ""
+
+#. TRANSLATORS: The type of update
+#: ../lib/packagekit-glib2/pk-console-shared.c:421
+msgid "Normal"
+msgstr ""
+
+#. TRANSLATORS: The type of update
+#: ../lib/packagekit-glib2/pk-console-shared.c:425
+msgid "Important"
+msgstr ""
+
+#. TRANSLATORS: The type of update
+#: ../lib/packagekit-glib2/pk-console-shared.c:429
+msgid "Security"
+msgstr ""
+
+#. TRANSLATORS: The type of update
+#: ../lib/packagekit-glib2/pk-console-shared.c:433
+msgid "Bug fix "
+msgstr ""
+
+#. TRANSLATORS: The type of update
+#: ../lib/packagekit-glib2/pk-console-shared.c:437
+msgid "Enhancement"
+msgstr ""
+
+#. TRANSLATORS: The type of update
+#: ../lib/packagekit-glib2/pk-console-shared.c:441
+msgid "Blocked"
+msgstr ""
+
+#. TRANSLATORS: The state of a package
+#. TRANSLATORS: The action of the package, in past tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:446
+#: ../lib/packagekit-glib2/pk-console-shared.c:519
+msgid "Installed"
+msgstr ""
+
+#. TRANSLATORS: The state of a package, i.e. not installed
+#: ../lib/packagekit-glib2/pk-console-shared.c:451
+msgid "Available"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:469
+msgid "Downloading"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:473
+msgid "Updating"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in present tense
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:477
+#: ../lib/packagekit-glib2/pk-console-shared.c:597
+msgid "Installing"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in present tense
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:481
+#: ../lib/packagekit-glib2/pk-console-shared.c:593
+msgid "Removing"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:485
+msgid "Cleaning up"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:489
+msgid "Obsoleting"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:493
+msgid "Reinstalling"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in past tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:511
+msgid "Downloaded"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in past tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:523
+msgid "Removed"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in past tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:527
+msgid "Cleaned up"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in past tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:531
+msgid "Obsoleted"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in past tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:535
+msgid "Reinstalled"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:553
+msgid "Unknown role type"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:557
+msgid "Getting dependencies"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:561
+msgid "Getting update details"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:565
+msgid "Getting details"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:569
+msgid "Getting requires"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:573
+msgid "Getting updates"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:577
+msgid "Searching by details"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:581
+msgid "Searching by file"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:585
+msgid "Searching groups"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:589
+msgid "Searching by name"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:601
+msgid "Installing files"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:605
+msgid "Refreshing cache"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:609
+msgid "Updating packages"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:613
+msgid "Updating system"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:617
+msgid "Canceling"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:625
+msgid "Getting repositories"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:629
+msgid "Enabling repository"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:633
+msgid "Setting data"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:637
+msgid "Resolving"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:641
+msgid "Getting file list"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:645
+msgid "Getting provides"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:649
+msgid "Installing signature"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:653
+msgid "Getting packages"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:657
+msgid "Accepting EULA"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:665
+msgid "Getting upgrades"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:669
+msgid "Getting categories"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:673
+msgid "Getting transactions"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:677
+#: ../lib/packagekit-glib2/pk-console-shared.c:681
+msgid "Simulating install"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:685
+msgid "Simulating remove"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:689
+msgid "Simulating update"
+msgstr ""
+
+#. TRANSLATORS: turn on all debugging
+#: ../lib/packagekit-glib2/pk-debug.c:133
+msgid "Show debugging information for all files"
+msgstr ""
+
+#: ../lib/packagekit-glib2/pk-debug.c:201
+msgid "Debugging Options"
+msgstr ""
+
+#: ../lib/packagekit-glib2/pk-debug.c:201
+msgid "Show debugging options"
+msgstr ""
+
+#. TRANSLATORS: ask the user if they are comfortable installing insecure
+#. packages
+#: ../lib/packagekit-glib2/pk-task-text.c:67
+msgid "Do you want to allow installing of unsigned software?"
+msgstr ""
+
+#. TRANSLATORS: tell the user we've not done anything
+#: ../lib/packagekit-glib2/pk-task-text.c:72
+msgid "The unsigned software will not be installed."
+msgstr ""
+
+#. TRANSLATORS: the package repository is signed by a key that is not
+#. recognised
+#: ../lib/packagekit-glib2/pk-task-text.c:121
+msgid "Software source signature required"
+msgstr ""
+
+#. TRANSLATORS: the package repository name
+#: ../lib/packagekit-glib2/pk-task-text.c:127
+msgid "Software source name"
+msgstr ""
+
+#. TRANSLATORS: the key URL
+#: ../lib/packagekit-glib2/pk-task-text.c:130
+msgid "Key URL"
+msgstr ""
+
+#. TRANSLATORS: the username of the key
+#: ../lib/packagekit-glib2/pk-task-text.c:133
+msgid "Key user"
+msgstr ""
+
+#. TRANSLATORS: the key ID, usually a few hex digits
+#: ../lib/packagekit-glib2/pk-task-text.c:136
+msgid "Key ID"
+msgstr ""
+
+#. TRANSLATORS: the key fingerprint, again, yet more hex
+#: ../lib/packagekit-glib2/pk-task-text.c:139
+msgid "Key fingerprint"
+msgstr ""
+
+#. TRANSLATORS: the timestamp (a bit like a machine readable time)
+#: ../lib/packagekit-glib2/pk-task-text.c:142
+msgid "Key Timestamp"
+msgstr ""
+
+#. TRANSLATORS: ask the user if they want to import
+#: ../lib/packagekit-glib2/pk-task-text.c:155
+msgid "Do you accept this signature?"
+msgstr ""
+
+#. TRANSLATORS: tell the user we've not done anything
+#: ../lib/packagekit-glib2/pk-task-text.c:160
+msgid "The signature was not accepted."
+msgstr ""
+
+#. TRANSLATORS: this is another name for a software licence that has to be
+#. read before installing
+#: ../lib/packagekit-glib2/pk-task-text.c:203
+msgid "End user licence agreement required"
+msgstr ""
+
+#. TRANSLATORS: the EULA text itself (long and boring)
+#: ../lib/packagekit-glib2/pk-task-text.c:212
+msgid "Agreement"
+msgstr ""
+
+#. TRANSLATORS: ask the user if they've read and accepted the EULA
+#: ../lib/packagekit-glib2/pk-task-text.c:221
+msgid "Do you accept this agreement?"
+msgstr ""
+
+#. TRANSLATORS: tell the user we've not done anything
+#: ../lib/packagekit-glib2/pk-task-text.c:226
+msgid "The agreement was not accepted."
+msgstr ""
+
+#. TRANSLATORS: the user needs to change media inserted into the computer
+#: ../lib/packagekit-glib2/pk-task-text.c:265
+msgid "Media change required"
+msgstr ""
+
+#. TRANSLATORS: the type, e.g. DVD, CD, etc
+#: ../lib/packagekit-glib2/pk-task-text.c:268
+msgid "Media type"
+msgstr ""
+
+#. TRANSLATORS: the media label, usually like 'disk-1of3'
+#: ../lib/packagekit-glib2/pk-task-text.c:271
+msgid "Media label"
+msgstr ""
+
+#. TRANSLATORS: the media description, usually like 'Fedora 12 disk 5'
+#: ../lib/packagekit-glib2/pk-task-text.c:274
+msgid "Text"
+msgstr ""
+
+#. TRANSLATORS: ask the user to insert the media
+#: ../lib/packagekit-glib2/pk-task-text.c:280
+msgid "Please insert the correct media"
+msgstr ""
+
+#. TRANSLATORS: tell the user we've not done anything as they are lazy
+#: ../lib/packagekit-glib2/pk-task-text.c:285
+msgid "The correct media was not inserted."
+msgstr ""
+
+#. TRANSLATORS: When processing, we might have to remove other dependencies
+#: ../lib/packagekit-glib2/pk-task-text.c:300
+msgid "The following packages have to be removed:"
+msgstr ""
+
+#. TRANSLATORS: When processing, we might have to install other dependencies
+#: ../lib/packagekit-glib2/pk-task-text.c:305
+msgid "The following packages have to be installed:"
+msgstr ""
+
+#. TRANSLATORS: When processing, we might have to update other dependencies
+#: ../lib/packagekit-glib2/pk-task-text.c:310
+msgid "The following packages have to be updated:"
+msgstr ""
+
+#. TRANSLATORS: When processing, we might have to reinstall other dependencies
+#: ../lib/packagekit-glib2/pk-task-text.c:315
+msgid "The following packages have to be reinstalled:"
+msgstr ""
+
+#. TRANSLATORS: When processing, we might have to downgrade other dependencies
+#: ../lib/packagekit-glib2/pk-task-text.c:320
+msgid "The following packages have to be downgraded:"
+msgstr ""
+
+#. TRANSLATORS: ask the user if the proposed changes are okay
+#: ../lib/packagekit-glib2/pk-task-text.c:380
+msgid "Proceed with changes?"
+msgstr ""
+
+#. TRANSLATORS: tell the user we didn't do anything
+#: ../lib/packagekit-glib2/pk-task-text.c:385
+msgid "The transaction did not proceed."
+msgstr ""
+
+#. SECURITY:
+#. - Normal users do not require admin authentication to accept new
+#. licence agreements.
+#. - Change this to 'auth_admin' for environments where users should not
+#. be given the option to make legal decisions.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:7
+msgid "Accept EULA"
+msgstr ""
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h: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"
+msgstr ""
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:10
+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:13
+msgid "Authentication is required to install a signed package"
+msgstr ""
+
+#: ../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:15
+msgid "Authentication is required to refresh the system sources"
+msgstr ""
+
+#: ../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:17
+msgid "Authentication is required to remove packages"
+msgstr ""
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:18
+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 ""
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:21
+msgid "Authentication is required to upgrade the operating system"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users are allowed to cancel their own task without
+#. authentication, but a different user id needs the admin password
+#. to cancel another users task.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:27
+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:34
+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:40
+msgid "Change software source parameters"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users do not need authentication to install signed packages
+#. from signed repositories, as this cannot exploit a system.
+#. - Paranoid users (or parents!) can change this to 'auth_admin' or
+#. 'auth_admin_keep'.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:47
+msgid "Install signed package"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users require admin authentication to install untrusted or
+#. unrecognised packages, as allowing users to do this without a
+#. password would be a massive security hole.
+#. - This is not retained as each package should be authenticated.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:54
+msgid "Install untrusted local file"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users do not require admin authentication to refresh the
+#. cache, as this doesn't actually install or remove software.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:59
+msgid "Refresh system sources"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users require admin authentication to rebind a driver
+#. so that it works after we install firmware.
+#. - This should not be set to 'yes' as unprivileged users could then
+#. try to rebind drivers in use, for instance security authentication
+#. devices.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:67
+msgid "Reload a device"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users require admin authentication to remove packages as
+#. this can make the system unbootable or stop other applications from
+#. working.
+#. - Be sure to close the tool used to remove the packages after the
+#. admin authentication has been obtained, otherwise packages can still
+#. be removed. If this is not possible, change this authentication to
+#. 'auth_admin'.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:77
+msgid "Remove package"
+msgstr ""
+
+#. 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:83
+msgid "Rollback to a previous transaction"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users do not require admin authentication to set the proxy
+#. used for downloading packages.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:88
+msgid "Set network proxy"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users require admin authentication to add signing keys.
+#. - This implies adding an explicit trust, and should not be granted
+#. without a secure authentication.
+#. - This is not kept as each package should be authenticated.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:95
+msgid "Trust a key used for signing packages"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users do not require admin authentication to update the
+#. system as the packages will be signed, and the action is required
+#. to update the system when unattended.
+#. - Changing this to anything other than 'yes' will break unattended
+#. updates.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:103
+msgid "Update packages"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users require admin authentication to upgrade the disto as
+#. this can make the system unbootable or stop other applications from
+#. working.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:109
+msgid "Upgrade System"
+msgstr ""
+
+#. TRANSLATORS: failed due to DBus security
+#: ../src/pk-main.c:87
+msgid "Startup failed due to security policies on this machine."
+msgstr ""
+
+#. TRANSLATORS: only two ways this can fail...
+#: ../src/pk-main.c:89
+msgid "This can happen for two reasons:"
+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 ""
+
+#. 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 ""
+
+#. TRANSLATORS: a backend is the system package tool, e.g. yum, apt
+#: ../src/pk-main.c:200
+msgid "Packaging backend to use, e.g. dummy"
+msgstr ""
+
+#. TRANSLATORS: if we should run in the background
+#: ../src/pk-main.c:203
+msgid "Daemonize and detach from the terminal"
+msgstr ""
+
+#. TRANSLATORS: if we should not monitor how long we are inactive for
+#: ../src/pk-main.c:206
+msgid "Disable the idle timer"
+msgstr ""
+
+#. TRANSLATORS: show version
+#: ../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:212
+msgid "Exit after a small delay"
+msgstr ""
+
+#. TRANSLATORS: exit straight away, used for automatic profiling
+#: ../src/pk-main.c:215
+msgid "Exit after the engine has loaded"
+msgstr ""
+
+#. TRANSLATORS: describing the service that is running
+#: ../src/pk-main.c:230
+msgid "PackageKit service"
+msgstr ""
+
+#. TRANSLATORS: fatal error, dbus is not running
+#: ../src/pk-main.c:267
+msgid "Cannot connect to the system bus"
+msgstr ""
+
+#. TRANSLATORS: cannot register on system bus, unknown reason -- geeky error
+#. follows
+#: ../src/pk-main.c:316
+msgid "Error trying to start:"
+msgstr ""
+
+#: ../src/pk-polkit-action-lookup.c:150
+msgid "To install debugging packages, extra sources need to be enabled"
+msgstr ""
+
+#. 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 ""
+
+#: ../src/pk-polkit-action-lookup.c:176
+msgid "Do not update this package unless you are sure it is safe to do so."
+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 ""
+
+#: ../src/pk-polkit-action-lookup.c:195
+msgid "Do not install this package unless you are sure it is safe to do so."
+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 ""
+
+#. TRANSLATORS: too many packages to list each one
+#: ../src/pk-polkit-action-lookup.c:273
+msgid "Many packages"
+msgstr ""
+
+#. TRANSLATORS: if the transaction is forced to install only trusted packages
+#: ../src/pk-polkit-action-lookup.c:339
+msgid "Only trusted"
+msgstr ""
diff --git a/po/kn.po b/po/kn.po
index 0b40c4b..2609fde 100644
--- a/po/kn.po
+++ b/po/kn.po
@@ -8,7 +8,7 @@ msgstr ""
 "Project-Id-Version: PackageKit\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2010-12-13 12:23+0000\n"
-"PO-Revision-Date: 2011-03-04 18:34+0000\n"
+"PO-Revision-Date: 2011-03-22 15:37+0000\n"
 "Last-Translator: hughsie <richard at hughsie.com>\n"
 "Language-Team: LANGUAGE <LL at li.org>\n"
 "MIME-Version: 1.0\n"
diff --git a/po/ko.po b/po/ko.po
index cd04451..c3315f4 100644
--- a/po/ko.po
+++ b/po/ko.po
@@ -8,9 +8,9 @@ msgstr ""
 "Project-Id-Version: PackageKit\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2010-12-13 12:23+0000\n"
-"PO-Revision-Date: 2011-03-07 16:23+0000\n"
+"PO-Revision-Date: 2011-05-04 09:47+0000\n"
 "Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
-"Language-Team: LANGUAGE <LL at li.org>\n"
+"Language-Team: Korean (http://www.transifex.net/projects/p/freedesktop/team/ko/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
diff --git a/po/lt.po b/po/lt.po
index 54ffb6c..78f62fc 100644
--- a/po/lt.po
+++ b/po/lt.po
@@ -8,7 +8,7 @@ msgstr ""
 "Project-Id-Version: PackageKit\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2010-12-13 12:23+0000\n"
-"PO-Revision-Date: 2011-03-04 18:34+0000\n"
+"PO-Revision-Date: 2011-03-22 15:37+0000\n"
 "Last-Translator: hughsie <richard at hughsie.com>\n"
 "Language-Team: LANGUAGE <LL at li.org>\n"
 "MIME-Version: 1.0\n"
diff --git a/po/ml.po b/po/ml.po
index 9c8599d..ca4fb30 100644
--- a/po/ml.po
+++ b/po/ml.po
@@ -8,7 +8,7 @@ msgstr ""
 "Project-Id-Version: PackageKit\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2010-12-13 12:23+0000\n"
-"PO-Revision-Date: 2011-03-04 18:34+0000\n"
+"PO-Revision-Date: 2011-03-22 15:37+0000\n"
 "Last-Translator: hughsie <richard at hughsie.com>\n"
 "Language-Team: LANGUAGE <LL at li.org>\n"
 "MIME-Version: 1.0\n"
diff --git a/po/mr.po b/po/mr.po
index a872fae..0e75df9 100644
--- a/po/mr.po
+++ b/po/mr.po
@@ -8,7 +8,7 @@ msgstr ""
 "Project-Id-Version: PackageKit\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2010-12-13 12:23+0000\n"
-"PO-Revision-Date: 2011-03-04 18:34+0000\n"
+"PO-Revision-Date: 2011-03-22 15:37+0000\n"
 "Last-Translator: hughsie <richard at hughsie.com>\n"
 "Language-Team: LANGUAGE <LL at li.org>\n"
 "MIME-Version: 1.0\n"
diff --git a/po/ms.po b/po/ms.po
index 754d869..bff4122 100644
--- a/po/ms.po
+++ b/po/ms.po
@@ -8,7 +8,7 @@ msgstr ""
 "Project-Id-Version: PackageKit\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2010-12-13 12:23+0000\n"
-"PO-Revision-Date: 2011-03-04 18:34+0000\n"
+"PO-Revision-Date: 2011-03-22 15:37+0000\n"
 "Last-Translator: hughsie <richard at hughsie.com>\n"
 "Language-Team: LANGUAGE <LL at li.org>\n"
 "MIME-Version: 1.0\n"
diff --git a/po/nb.po b/po/nb.po
index 60bcddb..4a06bde 100644
--- a/po/nb.po
+++ b/po/nb.po
@@ -8,7 +8,7 @@ msgstr ""
 "Project-Id-Version: PackageKit\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2010-12-13 12:23+0000\n"
-"PO-Revision-Date: 2011-03-04 18:34+0000\n"
+"PO-Revision-Date: 2011-03-22 15:37+0000\n"
 "Last-Translator: hughsie <richard at hughsie.com>\n"
 "Language-Team: LANGUAGE <LL at li.org>\n"
 "MIME-Version: 1.0\n"
diff --git a/po/nl.po b/po/nl.po
index f41550f..cfb0d0d 100644
--- a/po/nl.po
+++ b/po/nl.po
@@ -8,7 +8,7 @@ msgstr ""
 "Project-Id-Version: PackageKit\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2010-12-13 12:23+0000\n"
-"PO-Revision-Date: 2011-03-04 18:34+0000\n"
+"PO-Revision-Date: 2011-03-22 15:37+0000\n"
 "Last-Translator: hughsie <richard at hughsie.com>\n"
 "Language-Team: LANGUAGE <LL at li.org>\n"
 "MIME-Version: 1.0\n"
diff --git a/po/or.po b/po/or.po
index 3d3a214..88ea57f 100644
--- a/po/or.po
+++ b/po/or.po
@@ -8,7 +8,7 @@ msgstr ""
 "Project-Id-Version: PackageKit\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2010-12-13 12:23+0000\n"
-"PO-Revision-Date: 2011-03-04 18:34+0000\n"
+"PO-Revision-Date: 2011-03-22 15:37+0000\n"
 "Last-Translator: hughsie <richard at hughsie.com>\n"
 "Language-Team: LANGUAGE <LL at li.org>\n"
 "MIME-Version: 1.0\n"
diff --git a/po/pa.po b/po/pa.po
index 78301bf..30ebd1f 100644
--- a/po/pa.po
+++ b/po/pa.po
@@ -8,9 +8,9 @@ msgstr ""
 "Project-Id-Version: PackageKit\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2010-12-13 12:23+0000\n"
-"PO-Revision-Date: 2011-03-04 18:34+0000\n"
+"PO-Revision-Date: 2011-03-22 15:37+0000\n"
 "Last-Translator: aalam <apreet.alam at gmail.com>\n"
-"Language-Team: Panjabi (Punjabi) <None>\n"
+"Language-Team: Panjabi (Punjabi) (http://www.transifex.net/projects/p/freedesktop/team/pa/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
diff --git a/po/pl.po b/po/pl.po
index 2bcfe94..4c10d15 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -8,9 +8,9 @@ msgstr ""
 "Project-Id-Version: PackageKit\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2010-12-13 12:23+0000\n"
-"PO-Revision-Date: 2011-03-04 18:34+0000\n"
+"PO-Revision-Date: 2011-03-22 15:37+0000\n"
 "Last-Translator: hughsie <richard at hughsie.com>\n"
-"Language-Team: Polish <None>\n"
+"Language-Team: Polish (http://www.transifex.net/projects/p/freedesktop/team/pl/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
diff --git a/po/pt.po b/po/pt.po
index 0cd1147..e349672 100644
--- a/po/pt.po
+++ b/po/pt.po
@@ -8,7 +8,7 @@ msgstr ""
 "Project-Id-Version: PackageKit\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2010-12-13 12:23+0000\n"
-"PO-Revision-Date: 2011-03-04 18:34+0000\n"
+"PO-Revision-Date: 2011-03-22 15:37+0000\n"
 "Last-Translator: hughsie <richard at hughsie.com>\n"
 "Language-Team: LANGUAGE <LL at li.org>\n"
 "MIME-Version: 1.0\n"
diff --git a/po/pt_BR.po b/po/pt_BR.po
index d613c90..1bd4937 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -8,9 +8,9 @@ msgstr ""
 "Project-Id-Version: PackageKit\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2010-12-13 12:23+0000\n"
-"PO-Revision-Date: 2011-03-04 18:34+0000\n"
+"PO-Revision-Date: 2011-03-22 15:37+0000\n"
 "Last-Translator: hughsie <richard at hughsie.com>\n"
-"Language-Team: Portuguese (Brazilian) <None>\n"
+"Language-Team: LANGUAGE <LL at li.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
diff --git a/po/ro.po b/po/ro.po
index 0eebdd5..a2fd0c1 100644
--- a/po/ro.po
+++ b/po/ro.po
@@ -8,9 +8,9 @@ msgstr ""
 "Project-Id-Version: PackageKit\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2010-12-13 12:23+0000\n"
-"PO-Revision-Date: 2011-03-04 18:34+0000\n"
+"PO-Revision-Date: 2011-03-22 15:37+0000\n"
 "Last-Translator: hughsie <richard at hughsie.com>\n"
-"Language-Team: Romanian <None>\n"
+"Language-Team: LANGUAGE <LL at li.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
diff --git a/po/ru.po b/po/ru.po
index d376dd5..3a561b7 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -8,14 +8,14 @@ msgstr ""
 "Project-Id-Version: PackageKit\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2010-12-13 12:23+0000\n"
-"PO-Revision-Date: 2011-03-04 18:34+0000\n"
-"Last-Translator: hughsie <richard at hughsie.com>\n"
-"Language-Team: Russian <None>\n"
+"PO-Revision-Date: 2011-03-22 15:37+0000\n"
+"Last-Translator: igorbounov <igor.gorbounov at gmail.com>\n"
+"Language-Team: Russian (http://www.transifex.net/projects/p/freedesktop/team/ru/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Language: ru\n"
-"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
 
 #. TRANSLATORS: this is an atomic transaction
 #. TRANSLATORS: the role is the point of the transaction, e.g. update-system
@@ -143,10 +143,9 @@ msgstr "Подробности об обновлении:"
 #: ../src/pk-polkit-action-lookup.c:357
 msgid "Package"
 msgid_plural "Packages"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-msgstr[3] ""
+msgstr[0] "Пакет"
+msgstr[1] "Пакет"
+msgstr[2] "Пакеты"
 
 #. TRANSLATORS: details about the update, any packages that this update
 #. updates
@@ -289,7 +288,7 @@ msgstr "Серьезная ошибка"
 #. can be updated
 #: ../client/pk-console.c:701
 msgid "There are no packages to update."
-msgstr ""
+msgstr "Нет пакетов для обновления."
 
 #. TRANSLATORS: the transaction failed in a way we could not expect
 #: ../client/pk-console.c:704
@@ -342,6 +341,8 @@ 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
@@ -414,7 +415,7 @@ msgstr "Задать фильтр, к примеру, на установлен
 #. TRANSLATORS: command line argument, use a non-standard install prefix
 #: ../client/pk-console.c:1281
 msgid "Set the install root, e.g. '/' or '/mnt/ltsp'"
-msgstr ""
+msgstr "Укажите корневой каталог установки, например, «/». or «/mnt/ltsp»."
 
 #. TRANSLATORS: command line argument, work asynchronously
 #: ../client/pk-console.c:1284
@@ -444,6 +445,7 @@ msgstr "Вывести на экран в простом формате без 
 #: ../client/pk-console.c:1296
 msgid "The maximum metadata cache age. Use -1 for 'never'."
 msgstr ""
+"Максимальное время хранения данных в кэше. Используйте -1 для «никогда»."
 
 #. TRANSLATORS: we failed to contact the daemon
 #: ../client/pk-console.c:1333
@@ -453,12 +455,12 @@ msgstr "Не удалось соединиться с PackageKit"
 #. TRANSLATORS: The user specified an incorrect filter
 #: ../client/pk-console.c:1381
 msgid "The proxy could not be set"
-msgstr ""
+msgstr "Не удалось установить параметры прокси-сервера"
 
 #. TRANSLATORS: The user specified an incorrect filter
 #: ../client/pk-console.c:1393
 msgid "The install root could not be set"
-msgstr ""
+msgstr "Не удалось задать корневой каталог для установки"
 
 #. TRANSLATORS: The user specified an incorrect filter
 #: ../client/pk-console.c:1405
@@ -564,12 +566,14 @@ msgstr "Необходима строка, указывающая на паке
 #. TRANSLATORS: The user did not provide a distro name
 #: ../client/pk-console.c:1714
 msgid "A distribution name is required"
-msgstr ""
+msgstr "Требуется название дистрибутива"
 
 #. TRANSLATORS: The user did not provide an upgrade type
 #: ../client/pk-console.c:1720
 msgid "An upgrade type is required, e.g. 'minimal', 'default' or 'complete'"
 msgstr ""
+"Требуется тип обновления, то есть, «минимальное», «по умолчанию» или "
+"«полное»"
 
 #. TRANSLATORS: The user tried to use an unsupported option on the command
 #. line
@@ -594,6 +598,7 @@ msgstr "Укажите имена файлов зависимостей, кот
 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:259
@@ -624,7 +629,7 @@ msgstr "Требуется выходной каталог или имя фай
 #. startup
 #: ../client/pk-generate-pack.c:340
 msgid "The daemon failed to startup"
-msgstr ""
+msgstr "Не удалось запустить службу"
 
 #. TRANSLATORS: This is when the backend doesn't have the capability to get-
 #. depends
@@ -708,7 +713,7 @@ msgstr "Не удалось получить состояние службы"
 
 #: ../client/pk-monitor.c:349
 msgid "Failed to get properties"
-msgstr ""
+msgstr "Не удалось получить свойства"
 
 #. TRANSLATORS: this is a program that monitors PackageKit
 #: ../client/pk-monitor.c:387
@@ -797,7 +802,7 @@ msgstr "Ошибка при поиске файлов"
 #. TRANSLATORS: the transaction failed in a way we could not expect
 #: ../contrib/command-not-found/pk-command-not-found.c:456
 msgid "Getting the list of files failed"
-msgstr ""
+msgstr "Не удалось получить список файлов"
 
 #. TRANSLATORS: we failed to launch the executable, the error follows
 #: ../contrib/command-not-found/pk-command-not-found.c:602
@@ -819,7 +824,7 @@ msgstr "Команда PackageKit не найдена"
 #. * the style of bash itself -- apologies
 #: ../contrib/command-not-found/pk-command-not-found.c:739
 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:757
@@ -1832,6 +1837,8 @@ msgid ""
 "Authentication is required to change the location used to decompress "
 "packages"
 msgstr ""
+"Требуется проверка подлинности для изменения места, используемого для "
+"распаковки пакетов"
 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:12
 msgid ""
@@ -1876,7 +1883,7 @@ msgstr "Для обновления пакетов нужно авторизов
 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:21
 msgid "Authentication is required to upgrade the operating system"
-msgstr ""
+msgstr "Требуется проверка подлинности для обновления операционной системы"
 
 #. SECURITY:
 #. - Normal users are allowed to cancel their own task without
@@ -1895,7 +1902,7 @@ msgstr "Остановить внешнюю задачу"
 #. 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:34
 msgid "Change location that packages are installed"
-msgstr ""
+msgstr "Измените место установки пакетов"
 
 #. SECURITY:
 #. - Normal users require admin authentication to enable or disable
@@ -2003,7 +2010,7 @@ msgstr "Обновить пакеты"
 #. 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:109
 msgid "Upgrade System"
-msgstr ""
+msgstr "Обновление системы"
 
 #. TRANSLATORS: failed due to DBus security
 #: ../src/pk-main.c:87
diff --git a/po/sk.po b/po/sk.po
index be8dbf9..40a5f59 100644
--- a/po/sk.po
+++ b/po/sk.po
@@ -8,9 +8,9 @@ msgstr ""
 "Project-Id-Version: PackageKit\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2010-12-13 12:23+0000\n"
-"PO-Revision-Date: 2011-03-04 18:34+0000\n"
-"Last-Translator: hughsie <richard at hughsie.com>\n"
-"Language-Team: LANGUAGE <LL at li.org>\n"
+"PO-Revision-Date: 2011-03-23 11:22+0000\n"
+"Last-Translator: helix84 <helix84 at centrum.sk>\n"
+"Language-Team: Slovak (http://www.transifex.net/projects/p/freedesktop/team/sk/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
@@ -80,11 +80,11 @@ msgstr "Plné meno"
 
 #: ../client/pk-console.c:210
 msgid "Affected packages:"
-msgstr "Ovplyvnené balíčky:"
+msgstr "Ovplyvnené balíky:"
 
 #: ../client/pk-console.c:212
 msgid "Affected packages: None"
-msgstr "Ovplyvnené balíčky: Žiadne"
+msgstr "Ovplyvnené balíky: Žiadne"
 
 #. TRANSLATORS: this is the distro, e.g. Fedora 10
 #: ../client/pk-console.c:247
@@ -143,9 +143,9 @@ msgstr "Podrobnosti o aktualizácii:"
 #: ../src/pk-polkit-action-lookup.c:357
 msgid "Package"
 msgid_plural "Packages"
-msgstr[0] "Balíčky"
-msgstr[1] "Balíček"
-msgstr[2] "Balíčky"
+msgstr[0] "Balíky"
+msgstr[1] "Balík"
+msgstr[2] "Balíky"
 
 #. TRANSLATORS: details about the update, any packages that this update
 #. updates
@@ -246,7 +246,7 @@ msgstr "Reštart aplikácie vyžaduje:"
 #. TRANSLATORS: This a list of details about the package
 #: ../client/pk-console.c:506
 msgid "Package description"
-msgstr "Popis balíčka"
+msgstr "Popis balíka"
 
 #. TRANSLATORS: This a message (like a little note that may be of interest)
 #. from the transaction
@@ -262,7 +262,7 @@ msgstr "Žiadne súbory"
 #. TRANSLATORS: This a list files contained in the package
 #: ../client/pk-console.c:563
 msgid "Package files"
-msgstr "Zonam súborov v balíčku"
+msgstr "Zonam súborov v balíku"
 
 #. TRANSLATORS: the percentage complete of the transaction
 #: ../client/pk-console.c:631
@@ -272,48 +272,48 @@ msgstr "Počet percent"
 #. TRANSLATORS: the status of the transaction (e.g. downloading)
 #: ../client/pk-console.c:649
 msgid "Status"
-msgstr ""
+msgstr "Stav"
 
 #. TRANSLATORS: the results from the transaction
 #: ../client/pk-console.c:678
 msgid "Results:"
-msgstr ""
+msgstr "Výsledky:"
 
 #. TRANSLATORS: we failed to get any results, which is pretty fatal in my book
 #: ../client/pk-console.c:685
 msgid "Fatal error"
-msgstr ""
+msgstr "Kritická chyba"
 
 #. TRANSLATORS: the user asked to update everything, but there is nothing that
 #. can be updated
 #: ../client/pk-console.c:701
 msgid "There are no packages to update."
-msgstr ""
+msgstr "Nie sú dostupné aktualizácie žiadnych balíkov."
 
 #. TRANSLATORS: the transaction failed in a way we could not expect
 #: ../client/pk-console.c:704
 #: ../contrib/command-not-found/pk-command-not-found.c:639
 msgid "The transaction failed"
-msgstr ""
+msgstr "Transakcia zlyhala"
 
 #. TRANSLATORS: print a message when there are no updates
 #: ../client/pk-console.c:733
 msgid "There are no updates available at this time."
-msgstr ""
+msgstr "Momentálne nie sú dostupné žiadne aktualizácie."
 
 #: ../client/pk-console.c:756
 msgid "There are no upgrades available at this time."
-msgstr ""
+msgstr "Momentálne nie sú dostupné žiadne aktualizácie systému."
 
 #. TRANSLATORS: a package needs to restart their system
 #: ../client/pk-console.c:823
 msgid "Please restart the computer to complete the update."
-msgstr "Pre dokončenie aktualizácie reštartujte počítač."
+msgstr "Aktualizáciu dokončíte reštartovaním počítača."
 
 #. TRANSLATORS: a package needs to restart the session
 #: ../client/pk-console.c:826
 msgid "Please logout and login to complete the update."
-msgstr "Pre dokončenie aktualizácie sa odhláste a znovu prihláste."
+msgstr "Aktualizáciu dokončíte odhlásením a opätovným prihlásením sa."
 
 #. TRANSLATORS: a package needs to restart their system (due to security)
 #: ../client/pk-console.c:829
@@ -321,7 +321,7 @@ msgid ""
 "Please restart the computer to complete the update as important security "
 "updates have been installed."
 msgstr ""
-"Na dokončenie aktualizácie prosím reštartujte počítač, pretože boli "
+"Prosím, reštartujte počítač aby sa dokončila aktualizácia, pretože boli "
 "nainštalované dôležité bezpečnostné aktualizácie."
 
 #. TRANSLATORS: a package needs to restart the session (due to security)
@@ -330,8 +330,8 @@ msgid ""
 "Please logout and login to complete the update as important security updates"
 " have been installed."
 msgstr ""
-"Na dokončenie aktualizácie sa prosím odhláste a znovu prihláste, pretože "
-"boli nainštalované dôležité bezpečnostné aktualizácie."
+"Prosím odhláste sa a znovu sa prihláste, aby sa dokončila aktualizácia, "
+"pretože boli nainštalované dôležité bezpečnostné aktualizácie."
 
 #. TRANSLATORS: The user used 'pkcon install dave.rpm' rather than 'pkcon
 #. install-local dave.rpm'
@@ -341,27 +341,29 @@ msgid ""
 "Expected package name, actually got file. Try using 'pkcon install-local %s'"
 " instead."
 msgstr ""
+"Očakával sa názov balíka, dostali sme súbor. Skúste namiesto toho použiť "
+"„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:866
 #, c-format
 msgid "This tool could not find any available package: %s"
-msgstr ""
+msgstr "Tomuto nástroju sa nepodarilo násjť žiadne dostupné balíky: %s"
 
 #. TRANSLATORS: There was an error getting the list of files for the package.
 #. The detailed error follows
 #: ../client/pk-console.c:894
 #, c-format
 msgid "This tool could not find the installed package: %s"
-msgstr "Nepodarilo sa nájsť nainštalovaný balíček: %s"
+msgstr "Nepodarilo sa nájsť nainštalovaný balík: %s"
 
 #. TRANSLATORS: There was an error getting the list of files for the package.
 #. The detailed error follows
 #: ../client/pk-console.c:922 ../client/pk-console.c:950
 #, c-format
 msgid "This tool could not find the package: %s"
-msgstr "Nepodarilo sa nájsť balíček: %s"
+msgstr "Nepodarilo sa nájsť balík: %s"
 
 #. TRANSLATORS: There was an error getting the list of files for the package.
 #. The detailed error follows
@@ -376,7 +378,7 @@ msgstr "Nepodarilo sa nájsť balíček: %s"
 #: ../client/pk-console.c:1090
 #, c-format
 msgid "This tool could not find all the packages: %s"
-msgstr "Nepodarilo sa nájsť všetky balíčky: %s"
+msgstr "Nepodarilo sa nájsť všetky balíky: %s"
 
 #. TRANSLATORS: This is when the daemon crashed, and we are up shit creek
 #. without a paddle
@@ -398,7 +400,7 @@ msgstr "Podpríkazy:"
 #. last executed
 #: ../client/pk-console.c:1234
 msgid "Failed to get the time since this action was last completed"
-msgstr "Získanie času od ukončenia tejto akcie zlyhalo"
+msgstr "Nepodarilo sa zistiť čas od posledného dokončenia tejto operácie"
 
 #. TRANSLATORS: command line argument, just show the version string
 #: ../client/pk-console.c:1275 ../client/pk-monitor.c:371
@@ -408,12 +410,12 @@ msgstr "Zobraziť verziu programu a skončiť"
 #. TRANSLATORS: command line argument, use a filter to narrow down results
 #: ../client/pk-console.c:1278
 msgid "Set the filter, e.g. installed"
-msgstr "Nastaviť filter, napríklad \"nainštalované\""
+msgstr "Nastaviť filter, napríklad „nainštalované“"
 
 #. TRANSLATORS: command line argument, use a non-standard install prefix
 #: ../client/pk-console.c:1281
 msgid "Set the install root, e.g. '/' or '/mnt/ltsp'"
-msgstr ""
+msgstr "Nastavte koreň inštalácie, napr. „/“ alebo „/mnt/ltsp“"
 
 #. TRANSLATORS: command line argument, work asynchronously
 #: ../client/pk-console.c:1284
@@ -424,12 +426,14 @@ msgstr "Nečakať na dokončenie úloh a skončiť"
 #: ../client/pk-console.c:1287
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:525
 msgid "Install the packages without asking for confirmation"
-msgstr ""
+msgstr "Inštalovať balíky bez potvrdenia"
 
 #. TRANSLATORS: command line argument, this command is not a priority
 #: ../client/pk-console.c:1290
 msgid "Run the command using idle network bandwidth and also using less power"
 msgstr ""
+"Spustiť príkaz tak, aby využíval len nevuyžitú šírku pásma a tiež menej "
+"napájania"
 
 #. TRANSLATORS: command line argument, just output without fancy formatting
 #: ../client/pk-console.c:1293
@@ -437,26 +441,30 @@ msgid ""
 "Print to screen a machine readable output, rather than using animated "
 "widgets"
 msgstr ""
+"Vypísať na obrazovku strojovo čitateľný výstup namiesto animovaných "
+"ovládacích prvkov"
 
 #. TRANSLATORS: command line argument, just output without fancy formatting
 #: ../client/pk-console.c:1296
 msgid "The maximum metadata cache age. Use -1 for 'never'."
 msgstr ""
+"Maximálny vek metadát vo vyrovnávacej pamäti. -1 znamená nepoužívať "
+"vyrovnávaciu pamäť."
 
 #. TRANSLATORS: we failed to contact the daemon
 #: ../client/pk-console.c:1333
 msgid "Failed to contact PackageKit"
-msgstr ""
+msgstr "Nepodarilo sa kontaktovať PackageKit"
 
 #. TRANSLATORS: The user specified an incorrect filter
 #: ../client/pk-console.c:1381
 msgid "The proxy could not be set"
-msgstr ""
+msgstr "Proxy server nebolo možné nastaviť"
 
 #. TRANSLATORS: The user specified an incorrect filter
 #: ../client/pk-console.c:1393
 msgid "The install root could not be set"
-msgstr ""
+msgstr "Koreň inštalácie nebolo možné nastaviť"
 
 #. TRANSLATORS: The user specified an incorrect filter
 #: ../client/pk-console.c:1405
@@ -482,12 +490,12 @@ msgstr "Neplatný typ vyhľadávania"
 #. TRANSLATORS: the user did not specify what they wanted to install
 #: ../client/pk-console.c:1483
 msgid "A package name to install is required"
-msgstr "Je potrebný názov balíčka na inštalovanie"
+msgstr "Je potrebný názov balíka, ktorý sa má inštalovať"
 
 #. TRANSLATORS: the user did not specify what they wanted to install
 #: ../client/pk-console.c:1492
 msgid "A filename to install is required"
-msgstr "Je potrebný názov súboru na inštalovanie"
+msgstr "Je potrebný názov súboru, ktorý sa má inštalovať"
 
 #. TRANSLATORS: geeky error, 99.9999% of users won't see this
 #: ../client/pk-console.c:1503
@@ -497,13 +505,14 @@ msgstr "Je potrebné určiť typ, key_id a package_id"
 #. TRANSLATORS: the user did not specify what they wanted to remove
 #: ../client/pk-console.c:1514
 msgid "A package name to remove is required"
-msgstr "Je potrebný názov balíčka na odstránenie"
+msgstr "Je potrebný názov balíka, ktorý sa má odstrániť"
 
 #. TRANSLATORS: the user did not specify anything about what to download or
 #. where
 #: ../client/pk-console.c:1523
 msgid "A destination directory and the package names to download are required"
-msgstr "Je potrebné určiť cieľový priečinok a názvy balíčkov na stiahnutie"
+msgstr ""
+"Je potrebné určiť cieľový priečinok a názvy balíkov, ktoré sa majú stiahnuť"
 
 #. TRANSLATORS: the directory does not exist, so we can't continue
 #: ../client/pk-console.c:1530
@@ -523,12 +532,12 @@ msgstr "Je potrebný identifikátor transakcie (tid)"
 #. TRANSLATORS: The user did not specify a package name
 #: ../client/pk-console.c:1571
 msgid "A package name to resolve is required"
-msgstr "Je potrebný názov balíčka na rozvinutie"
+msgstr "Je potrebný názov balíka, ktorý sa má vyriešiť"
 
 #. TRANSLATORS: The user did not specify a repository (software source) name
 #: ../client/pk-console.c:1582 ../client/pk-console.c:1593
 msgid "A repository name is required"
-msgstr "Je potrebný názov repozitára"
+msgstr "Je potrebný názov zdroja softvéru"
 
 #. TRANSLATORS: The user didn't provide any data
 #: ../client/pk-console.c:1604
@@ -538,7 +547,7 @@ msgstr "Je potrebné určiť názov repozitára, parameter a hodnotu"
 #. TRANSLATORS: The user didn't specify what action to use
 #: ../client/pk-console.c:1621
 msgid "An action, e.g. 'update-system' is required"
-msgstr "Je potrebná akcia, napr. 'update-system'"
+msgstr "Musíte zadať operáciu, napr. „update-system“"
 
 #. TRANSLATORS: The user specified an invalid action
 #: ../client/pk-console.c:1628
@@ -551,7 +560,7 @@ msgstr "Je potrebná správna rola"
 #: ../client/pk-console.c:1661 ../client/pk-console.c:1681
 #: ../client/pk-console.c:1690 ../client/pk-generate-pack.c:314
 msgid "A package name is required"
-msgstr "Je potrebný názov balíčka"
+msgstr "Je potrebný názov balíka"
 
 #. TRANSLATORS: each package "provides" certain things, e.g. mime(gstreamer-
 #. decoder-mp3), the user didn't specify it
@@ -562,19 +571,20 @@ msgstr "Je potrebný reťazec poskytovania"
 #. TRANSLATORS: The user did not provide a distro name
 #: ../client/pk-console.c:1714
 msgid "A distribution name is required"
-msgstr ""
+msgstr "Vyžaduje sa názov distribúcie"
 
 #. TRANSLATORS: The user did not provide an upgrade type
 #: ../client/pk-console.c:1720
 msgid "An upgrade type is required, e.g. 'minimal', 'default' or 'complete'"
 msgstr ""
+"Vyžaduje sa typ aktualizácie, napr. „minimal“, „default“ alebo „complete“"
 
 #. TRANSLATORS: The user tried to use an unsupported option on the command
 #. line
 #: ../client/pk-console.c:1770
 #, c-format
 msgid "Option '%s' is not supported"
-msgstr "Voľba '%s' nie je podporovaná"
+msgstr "Voľba „%s“ nie je podporovaná"
 
 #. TRANSLATORS: Generic failure of what they asked to do
 #: ../client/pk-console.c:1780
@@ -592,11 +602,13 @@ msgstr "Nastavte názov súboru so závislosťami, ktoré sa majú vynechať"
 msgid ""
 "The output file or directory (the current directory is used if omitted)"
 msgstr ""
+"Výstupný súbor alebo adresár (ak voľbu vynecháte, použije sa aktuálny "
+"adresár)"
 
 #. TRANSLATORS: put a list of packages in the pack
 #: ../client/pk-generate-pack.c:259
 msgid "The package to be put into the service pack"
-msgstr "Balíček ktorý sa má uložiť do servisného archívu"
+msgstr "Balík, ktorý sa má uložiť do servisného archívu"
 
 #. TRANSLATORS: put all pending updates in the pack
 #: ../client/pk-generate-pack.c:262
@@ -622,7 +634,7 @@ msgstr "Je potrebný názov výstupného priečinka alebo súboru"
 #. startup
 #: ../client/pk-generate-pack.c:340
 msgid "The daemon failed to startup"
-msgstr ""
+msgstr "Štart démona zlyhal"
 
 #. TRANSLATORS: This is when the backend doesn't have the capability to get-
 #. depends
@@ -630,7 +642,7 @@ msgstr ""
 #. download
 #: ../client/pk-generate-pack.c:351 ../client/pk-generate-pack.c:357
 msgid "The package manager cannot perform this type of operation."
-msgstr "Správca balíčkov nemôže vykonať tento druh operácie."
+msgstr "Správca balíkov nemôže vykonať tento druh operácie."
 
 #. TRANSLATORS: This is when the distro didn't include libarchive support into
 #. PK
@@ -668,37 +680,37 @@ msgstr "Nepodarilo sa vytvoriť priečinok:"
 #. cannot be opened
 #: ../client/pk-generate-pack.c:419
 msgid "Failed to open package list."
-msgstr "Nepodarilo sa otvoriť zoznam balíčkov."
+msgstr "Nepodarilo sa otvoriť zoznam balíkov."
 
 #. TRANSLATORS: The package name is being matched up to available packages
 #: ../client/pk-generate-pack.c:428
 msgid "Finding package name."
-msgstr "Hľadanie názvu balíčka."
+msgstr "Hľadá sa názov balíka."
 
 #. TRANSLATORS: This is when the package cannot be found in any software
 #. source. The detailed error follows
 #: ../client/pk-generate-pack.c:432
 #, c-format
 msgid "Failed to find package '%s': %s"
-msgstr "Nepodarilo sa nájsť balíček '%s': %s"
+msgstr "Nepodarilo sa nájsť balík „%s“: %s"
 
 #. TRANSLATORS: This is telling the user we are in the process of making the
 #. pack
 #: ../client/pk-generate-pack.c:440
 msgid "Creating service pack..."
-msgstr "Vytváranie servisného archívu..."
+msgstr "Vytvára sa servisný archív..."
 
 #. TRANSLATORS: we succeeded in making the file
 #: ../client/pk-generate-pack.c:455
 #, c-format
 msgid "Service pack created '%s'"
-msgstr "Vytvorený servisný archív '%s'"
+msgstr "Vytvorený servisný archív „%s“"
 
 #. TRANSLATORS: we failed to make te file
 #: ../client/pk-generate-pack.c:460
 #, c-format
 msgid "Failed to create '%s': %s"
-msgstr "Nepodarilo sa vytvoriť '%s': %s"
+msgstr "Nepodarilo sa vytvoriť „%s“: %s"
 
 #: ../client/pk-monitor.c:284
 msgid "Failed to get daemon state"
@@ -706,7 +718,7 @@ msgstr "Nepodarilo sa zistiť stav démona"
 
 #: ../client/pk-monitor.c:349
 msgid "Failed to get properties"
-msgstr ""
+msgstr "Nepodarilo sa získať vlastnosti"
 
 #. TRANSLATORS: this is a program that monitors PackageKit
 #: ../client/pk-monitor.c:387
@@ -716,7 +728,7 @@ msgstr "Monitor PackageKit"
 #. TRANSLATORS: when we are getting data from the daemon
 #: ../contrib/browser-plugin/pk-plugin-install.c:499
 msgid "Getting package information..."
-msgstr "Získavanie informácií o balíčku..."
+msgstr "Získavajú sa informácie o balíku..."
 
 #. TRANSLATORS: run an applicaiton
 #: ../contrib/browser-plugin/pk-plugin-install.c:505
@@ -760,32 +772,32 @@ msgstr "Verzia"
 #. TRANSLATORS: noting found, so can't install
 #: ../contrib/browser-plugin/pk-plugin-install.c:545
 msgid "No packages found for your system"
-msgstr "Pre váš systém neboli nájdené žiadne balíčky"
+msgstr "Pre váš systém neboli nájdené žiadne balíky"
 
 #. TRANSLATORS: package is being installed
 #: ../contrib/browser-plugin/pk-plugin-install.c:550
 msgid "Installing..."
-msgstr "Inštalovanie..."
+msgstr "Inštaluje sa..."
 
 #. TRANSLATORS: downloading repo data so we can search
 #: ../contrib/command-not-found/pk-command-not-found.c:366
 msgid "Downloading details about the software sources."
-msgstr "Získavanie detailov o zdrojoch softvéru."
+msgstr "Sťahujú sa podrobnosti o zdrojoch softvéru."
 
 #. 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 "Získavanie zoznamov súborov (dokončenie môže chvíľu trvať)."
+msgstr "Sťahujú sa zoznamy súborov (dokončenie môže chvíľu trvať)."
 
 #. TRANSLATORS: waiting for native lock
 #: ../contrib/command-not-found/pk-command-not-found.c:374
 msgid "Waiting for package manager lock."
-msgstr "Čakanie na zámok správcu balíčkov."
+msgstr "Čaká sa na zámok správcu balíkov."
 
 #. TRANSLATORS: loading package cache so we can search
 #: ../contrib/command-not-found/pk-command-not-found.c:378
 msgid "Loading list of packages."
-msgstr "Načítavanie zoznamu balíčkov."
+msgstr "Načítava sa zoznam balíkov."
 
 #. TRANSLATORS: we failed to find the package, this shouldn't happen
 #: ../contrib/command-not-found/pk-command-not-found.c:444
@@ -795,7 +807,7 @@ msgstr "Vyhľadanie súboru zlyhalo"
 #. TRANSLATORS: the transaction failed in a way we could not expect
 #: ../contrib/command-not-found/pk-command-not-found.c:456
 msgid "Getting the list of files failed"
-msgstr ""
+msgstr "Nepodarilo sa získať zoznam súborov"
 
 #. TRANSLATORS: we failed to launch the executable, the error follows
 #: ../contrib/command-not-found/pk-command-not-found.c:602
@@ -805,7 +817,7 @@ msgstr "Spustenie zlyhalo:"
 #. TRANSLATORS: we failed to install the package
 #: ../contrib/command-not-found/pk-command-not-found.c:630
 msgid "Failed to install packages"
-msgstr ""
+msgstr "Nepodarilo sa nainštalovať balíky"
 
 #. TRANSLATORS: tool that gets called when the command is not found
 #: ../contrib/command-not-found/pk-command-not-found.c:706
@@ -817,7 +829,7 @@ msgstr "PackageKit príkaz nenájdený"
 #. * the style of bash itself -- apologies
 #: ../contrib/command-not-found/pk-command-not-found.c:739
 msgid "command not found"
-msgstr ""
+msgstr "príkaz nenájdený"
 
 #. TRANSLATORS: tell the user what we think the command is
 #: ../contrib/command-not-found/pk-command-not-found.c:757
@@ -839,47 +851,47 @@ msgstr "Podobné príkazy sú:"
 #. TRANSLATORS: ask the user to choose a file to run
 #: ../contrib/command-not-found/pk-command-not-found.c:801
 msgid "Please choose a command to run"
-msgstr "Zvoľte, prosí, príkaz na spustenie"
+msgstr "Prosím, zvoľte príkaz, ktorý chcete spustiť"
 
 #. TRANSLATORS: tell the user what package provides the command
 #: ../contrib/command-not-found/pk-command-not-found.c:819
 msgid "The package providing this file is:"
-msgstr "Balíček poskytujúci tento súbor je:"
+msgstr "Balík poskytujúci tento súbor je:"
 
 #. TRANSLATORS: as the user if we want to install a package to provide the
 #. command
 #: ../contrib/command-not-found/pk-command-not-found.c:826
 #, c-format
 msgid "Install package '%s' to provide command '%s'?"
-msgstr "Nainštalovať balíček '%s' pre zaobstaranie príkazu '%s'?"
+msgstr "Nainštalovať balík „%s“ poskytujúci príkaz „%s“?"
 
 #. TRANSLATORS: Show the user a list of packages that provide this command
 #: ../contrib/command-not-found/pk-command-not-found.c:853
 msgid "Packages providing this file are:"
-msgstr "Balíčky poskytujúce tento súbor sú:"
+msgstr "Balíky poskytujúce tento súbor sú:"
 
 #. TRANSLATORS: Show the user a list of packages that they can install to
 #. provide this command
 #: ../contrib/command-not-found/pk-command-not-found.c:863
 msgid "Suitable packages are:"
-msgstr "Vhodné balíčky sú:"
+msgstr "Vhodné balíky sú:"
 
 #. get selection
 #. TRANSLATORS: ask the user to choose a file to install
 #: ../contrib/command-not-found/pk-command-not-found.c:872
 msgid "Please choose a package to install"
-msgstr "Zvoľte, prosím, balíček na inštalovanie"
+msgstr "Prosím, zvoľte balík, ktorý sa má inštalovať"
 
 #. TRANSLATORS: we are starting to install the packages
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:195
 msgid "Starting install"
-msgstr "Spúšťanie inštalácie"
+msgstr "Spúšťa sa inštalácia"
 
 #. TRANSLATORS: we couldn't find the package name, non-fatal
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:407
 #, c-format
 msgid "Failed to find the package %s, or already installed: %s"
-msgstr "Balíček %s sa nenašiel, alebo už je nainštalovaný: %s"
+msgstr "Balík %s sa nenašiel alebo už je nainštalovaný: %s"
 
 #. command line argument, simulate what would be done, but don't actually do
 #. it
@@ -887,14 +899,14 @@ msgstr "Balíček %s sa nenašiel, alebo už je nainštalovaný: %s"
 msgid ""
 "Don't actually install any packages, only simulate what would be installed"
 msgstr ""
-"V skutočnosti neinštalovať žiadne balíčky, len simulovať, čo by mohlo byť "
-"nainštalované"
+"V skutočnosti neinštalovať žiadne balíky, len simulovať, čo by sa "
+"nainštalovalo"
 
 #. command line argument, do we skip packages that depend on the ones
 #. specified
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:519
 msgid "Do not install dependencies of the core packages"
-msgstr "Neinštalovať závislosti hlavných balíčkov"
+msgstr "Neinštalovať závislosti základných balíkov"
 
 #. command line argument, do we operate quietly
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:522
@@ -904,20 +916,20 @@ msgstr "Nezobrazovať informácie ani priebeh"
 #. TRANSLATORS: tool that gets called when the command is not found
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:540
 msgid "PackageKit Debuginfo Installer"
-msgstr "PackageKit inštalátor pre debuginfo"
+msgstr "Inštalátor PackageKit pre debuginfo"
 
 #. TRANSLATORS: the use needs to specify a list of package names on the
 #. command line
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:554
 #, c-format
 msgid "ERROR: Specify package names to install."
-msgstr "CHYBA: Je potrebné určiť názvy balíčkov na inštaláciu."
+msgstr "CHYBA: Zajdajte názvy balíčkov, ktoré sa majú inštalovať."
 
 #. TRANSLATORS: we are getting the list of repositories
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:590
 #, c-format
 msgid "Getting sources list"
-msgstr "Získavanie zoznamu zdrojov"
+msgstr "Získava sa zoznam zdrojov"
 
 #. TRANSLATORS: operation was not successful
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:600
@@ -951,7 +963,7 @@ msgstr "Nájdených %i povolených a %i zakázaných zdrojov."
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:625
 #, c-format
 msgid "Finding debugging sources"
-msgstr "Vyhľadanie ladiacich zdrojov"
+msgstr "Hľadajú sa ladiace zdroje"
 
 #. TRANSLATORS: tell the user what we found
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:658
@@ -963,7 +975,7 @@ msgstr "Nájdených %i zakázaných debuginfo zdrojov."
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:665
 #, c-format
 msgid "Enabling debugging sources"
-msgstr "Povoľovanie ladiacich zdrojov"
+msgstr "Povoľujú sa ladiace zdroje"
 
 #. TRANSLATORS: tell the user how many we enabled
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:693
@@ -975,69 +987,69 @@ msgstr "Povolených %i ladiacich zdrojov."
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:700
 #, c-format
 msgid "Finding debugging packages"
-msgstr "Hľadanie ladiacich balíčkov"
+msgstr "Hľadajú sa ladiace balíky"
 
 #. TRANSLATORS: we couldn't find the package name, non-fatal
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:712
 #, c-format
 msgid "Failed to find the package %s: %s"
-msgstr "Nepodarilo sa nájsť balíček '%s': %s"
+msgstr "Nepodarilo sa nájsť balík „%s“: %s"
 
 #. TRANSLATORS: we couldn't find the debuginfo package name, non-fatal
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:735
 #, c-format
 msgid "Failed to find the debuginfo package %s: %s"
-msgstr "Nepodarilo sa nájsť ladiaci balíček '%s': %s"
+msgstr "Nepodarilo sa nájsť ladiaci balík '%s': %s"
 
 #. TRANSLATORS: no debuginfo packages could be found to be installed
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:763
 #, c-format
 msgid "Found no packages to install."
-msgstr "Žiadne balíčky na inštalovanie."
+msgstr "Žiadne balíky na inštalovanie."
 
 #. TRANSLATORS: tell the user we found some packages, and then list them
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:777
 #, c-format
 msgid "Found %i packages:"
-msgstr "Nájdených %i balíčkov:"
+msgstr "Nájdených %i balíkov:"
 
 #. TRANSLATORS: tell the user we are searching for deps
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:793
 #, c-format
 msgid "Finding packages that depend on these packages"
-msgstr "Hľadanie balíčkov závisiacich na týchto balíčkoch"
+msgstr "Hľadajú sa balíky závisiace na týchto balíkoch"
 
 #. TRANSLATORS: could not install, detailed error follows
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:806
 #, c-format
 msgid "Could not find dependant packages: %s"
-msgstr "Nebolo možné nájsť závislé balíčky: %s"
+msgstr "Nebolo možné nájsť závisiace balíky: %s"
 
 #. TRANSLATORS: tell the user we found some more packages
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:822
 #, c-format
 msgid "Found %i extra packages."
-msgstr "Nájdených %i extra balíčkov."
+msgstr "Nájdených %i extra balíkov."
 
 #. TRANSLATORS: tell the user we found some more packages
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:826
 #, c-format
 msgid "No extra packages required."
-msgstr "Nie sú potrebné žiadne extra balíčky."
+msgstr "Nie sú potrebné žiadne extra balíky."
 
 #. TRANSLATORS: tell the user we found some packages (and deps), and then list
 #. them
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:835
 #, c-format
 msgid "Found %i packages to install:"
-msgstr "Nájdených %i balíčkov na inštalovanie:"
+msgstr "Nájdených %i balíkov na inštalovanie:"
 
 #. TRANSLATORS: simulate mode is a testing mode where we quit before the
 #. action
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:848
 #, c-format
 msgid "Not installing packages in simulate mode"
-msgstr "V režime simulácie sa balíčky nebudú inštalovať"
+msgstr "V režime simulácie sa balíky nebudú inštalovať"
 
 #. TRANSLATORS: we are now installing the debuginfo packages we found earlier
 #. TRANSLATORS: transaction state, installing packages
@@ -1045,19 +1057,19 @@ msgstr "V režime simulácie sa balíčky nebudú inštalovať"
 #: ../lib/packagekit-glib2/pk-console-shared.c:287
 #, c-format
 msgid "Installing packages"
-msgstr "Inštalovanie balíčkov"
+msgstr "Inštalujú sa balíky"
 
 #. TRANSLATORS: could not install, detailed error follows
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:873
 #, c-format
 msgid "Could not install packages: %s"
-msgstr "Nepodarilo sa nainštalovať balíčky: %s"
+msgstr "Nepodarilo sa nainštalovať balíky: %s"
 
 #. TRANSLATORS: we are now disabling all debuginfo repos we previously enabled
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:905
 #, c-format
 msgid "Disabling sources previously enabled"
-msgstr "Zakázanie predtým povolených zdrojov"
+msgstr "Zakazujú sa predtým povolené zdroje"
 
 #. TRANSLATORS: no debuginfo packages could be found to be installed, detailed
 #. error follows
@@ -1132,7 +1144,7 @@ msgstr "Cesty k zariadeniu"
 #. installing firmware
 #: ../contrib/device-rebind/pk-device-rebind.c:315
 msgid "PackageKit Device Reloader"
-msgstr "PackageKit obnovenie zariadenia"
+msgstr "PackageKit - obnovenie zariadenia"
 
 #. TRANSLATORS: user did not specify a valid device sysfs path
 #: ../contrib/device-rebind/pk-device-rebind.c:323
@@ -1147,17 +1159,17 @@ msgstr "Tento skript môže používať len používateľ root"
 #. TRANSLATORS: we're going to verify the path first
 #: ../contrib/device-rebind/pk-device-rebind.c:342
 msgid "Verifying device path"
-msgstr "Overovanie cesty k zariadeniu"
+msgstr "Overuje sa cesta k zariadeniu"
 
 #. 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 "Overovanie cesty k zariadeniu zlyhalo"
+msgstr "Overenie cesty k zariadeniu zlyhalo"
 
 #. TRANSLATORS: we're going to try
 #: ../contrib/device-rebind/pk-device-rebind.c:361
 msgid "Attempting to rebind device"
-msgstr "Pokus o obnovenie spojenia k zariadeniu"
+msgstr "Prebieha pokus o obnovenie spojenia so zariadením"
 
 #. TRANSLATORS: we failed to release the current driver
 #: ../contrib/device-rebind/pk-device-rebind.c:366
@@ -1170,7 +1182,7 @@ msgstr "Katalóg PackageKit"
 
 #: ../data/packagekit-package-list.xml.in.h:1
 msgid "PackageKit Package List"
-msgstr "Zoznam balíčkov PackageKit"
+msgstr "Zoznam balíkov PackageKit"
 
 #: ../data/packagekit-servicepack.xml.in.h:1
 msgid "PackageKit Service Pack"
@@ -1179,486 +1191,486 @@ msgstr "Servisný archív PackageKit"
 #: ../lib/packagekit-glib2/pk-console-shared.c:63
 #, c-format
 msgid "Please enter a number from 1 to %i: "
-msgstr "Zadajte prosím číslo od 1 do %i: "
+msgstr "Prosím, zadajte číslo od 1 do %i: "
 
 #. TRANSLATORS: more than one package could be found that matched, to follow
 #. is a list of possible packages
 #: ../lib/packagekit-glib2/pk-console-shared.c:189
 msgid "More than one package matches:"
-msgstr "Zadaniu vyhovuje viac balíčkov:"
+msgstr "Vyhovuje viac ako jeden balík:"
 
 #. TRANSLATORS: This finds out which package in the list to use
 #: ../lib/packagekit-glib2/pk-console-shared.c:200
 msgid "Please choose the correct package: "
-msgstr "Zadajte prosím správny balíček: "
+msgstr "Prosím, zadajte správny balík: "
 
 #. TRANSLATORS: This is when the transaction status is not known
 #: ../lib/packagekit-glib2/pk-console-shared.c:255
 msgid "Unknown state"
-msgstr ""
+msgstr "Neznámy stav"
 
 #. TRANSLATORS: transaction state, the daemon is in the process of starting
 #: ../lib/packagekit-glib2/pk-console-shared.c:259
 msgid "Starting"
-msgstr ""
+msgstr "Spúšťa sa"
 
 #. TRANSLATORS: transaction state, the transaction is waiting for another to
 #. complete
 #: ../lib/packagekit-glib2/pk-console-shared.c:263
 msgid "Waiting in queue"
-msgstr ""
+msgstr "Čaká vo fronte"
 
 #. TRANSLATORS: transaction state, just started
 #: ../lib/packagekit-glib2/pk-console-shared.c:267
 msgid "Running"
-msgstr ""
+msgstr "Beží"
 
 #. TRANSLATORS: transaction state, is querying data
 #: ../lib/packagekit-glib2/pk-console-shared.c:271
 msgid "Querying"
-msgstr ""
+msgstr "Zisťuje sa"
 
 #. TRANSLATORS: transaction state, getting data from a server
 #: ../lib/packagekit-glib2/pk-console-shared.c:275
 msgid "Getting information"
-msgstr ""
+msgstr "Získavajú sa informácie"
 
 #. TRANSLATORS: transaction state, removing packages
 #: ../lib/packagekit-glib2/pk-console-shared.c:279
 msgid "Removing packages"
-msgstr ""
+msgstr "Odstraňujú sa balíky"
 
 #. TRANSLATORS: transaction state, downloading package files
 #. TRANSLATORS: The role of the transaction, in present tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:283
 #: ../lib/packagekit-glib2/pk-console-shared.c:661
 msgid "Downloading packages"
-msgstr "Získavanie balíčkov"
+msgstr "Sťahujú sa balíky"
 
 #. TRANSLATORS: transaction state, refreshing internal lists
 #: ../lib/packagekit-glib2/pk-console-shared.c:291
 msgid "Refreshing software list"
-msgstr ""
+msgstr "Obnovuje sa zoznam softvéru"
 
 #. TRANSLATORS: transaction state, installing updates
 #: ../lib/packagekit-glib2/pk-console-shared.c:295
 msgid "Installing updates"
-msgstr ""
+msgstr "Inštalujú sa aktualizácie"
 
 #. TRANSLATORS: transaction state, removing old packages, and cleaning config
 #. files
 #: ../lib/packagekit-glib2/pk-console-shared.c:299
 msgid "Cleaning up packages"
-msgstr ""
+msgstr "Čistia sa balíky"
 
 #. TRANSLATORS: transaction state, obsoleting old packages
 #: ../lib/packagekit-glib2/pk-console-shared.c:303
 msgid "Obsoleting packages"
-msgstr ""
+msgstr "Označujú sa zastaralé balíky"
 
 #. TRANSLATORS: transaction state, checking the transaction before we do it
 #: ../lib/packagekit-glib2/pk-console-shared.c:307
 msgid "Resolving dependencies"
-msgstr ""
+msgstr "Riešia sa závislosti"
 
 #. TRANSLATORS: transaction state, checking if we have all the security keys
 #. for the operation
 #: ../lib/packagekit-glib2/pk-console-shared.c:311
 msgid "Checking signatures"
-msgstr ""
+msgstr "Kontrolujú sa podpisy"
 
 #. TRANSLATORS: transaction state, when we return to a previous system state
 #. TRANSLATORS: The role of the transaction, in present tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:315
 #: ../lib/packagekit-glib2/pk-console-shared.c:621
 msgid "Rolling back"
-msgstr ""
+msgstr "Vracajú sa zmeny"
 
 #. TRANSLATORS: transaction state, when we're doing a test transaction
 #: ../lib/packagekit-glib2/pk-console-shared.c:319
 msgid "Testing changes"
-msgstr ""
+msgstr "Testujú sa zmeny"
 
 #. TRANSLATORS: transaction state, when we're writing to the system package
 #. database
 #: ../lib/packagekit-glib2/pk-console-shared.c:323
 msgid "Committing changes"
-msgstr ""
+msgstr "Vykonávajú sa zmeny"
 
 #. TRANSLATORS: transaction state, requesting data from a server
 #: ../lib/packagekit-glib2/pk-console-shared.c:327
 msgid "Requesting data"
-msgstr ""
+msgstr "Žiada sa o dáta"
 
 #. TRANSLATORS: transaction state, all done!
 #: ../lib/packagekit-glib2/pk-console-shared.c:331
 msgid "Finished"
-msgstr ""
+msgstr "Hotovo"
 
 #. TRANSLATORS: transaction state, in the process of cancelling
 #: ../lib/packagekit-glib2/pk-console-shared.c:335
 msgid "Cancelling"
-msgstr ""
+msgstr "Prerušuje sa"
 
 #. TRANSLATORS: transaction state, downloading metadata
 #: ../lib/packagekit-glib2/pk-console-shared.c:339
 msgid "Downloading repository information"
-msgstr ""
+msgstr "Sťahujú sa informácie o zdroji softvéru"
 
 #. TRANSLATORS: transaction state, downloading metadata
 #: ../lib/packagekit-glib2/pk-console-shared.c:343
 msgid "Downloading list of packages"
-msgstr ""
+msgstr "Sťahuje sa zoznam balíkov"
 
 #. TRANSLATORS: transaction state, downloading metadata
 #: ../lib/packagekit-glib2/pk-console-shared.c:347
 msgid "Downloading file lists"
-msgstr ""
+msgstr "Sťahujú sa zoznamy súborov"
 
 #. TRANSLATORS: transaction state, downloading metadata
 #: ../lib/packagekit-glib2/pk-console-shared.c:351
 msgid "Downloading lists of changes"
-msgstr ""
+msgstr "Sťahujú sa záznamy zmien"
 
 #. TRANSLATORS: transaction state, downloading metadata
 #: ../lib/packagekit-glib2/pk-console-shared.c:355
 msgid "Downloading groups"
-msgstr ""
+msgstr "Sťahujú sa skupiny"
 
 #. TRANSLATORS: transaction state, downloading metadata
 #: ../lib/packagekit-glib2/pk-console-shared.c:359
 msgid "Downloading update information"
-msgstr ""
+msgstr "Sťahujú sa aktualizačné informácie"
 
 #. TRANSLATORS: transaction state, repackaging delta files
 #: ../lib/packagekit-glib2/pk-console-shared.c:363
 msgid "Repackaging files"
-msgstr ""
+msgstr "Prebaľujú sa súbory"
 
 #. TRANSLATORS: transaction state, loading databases
 #: ../lib/packagekit-glib2/pk-console-shared.c:367
 msgid "Loading cache"
-msgstr ""
+msgstr "Načítava sa vyrovnávacia pamäť"
 
 #. TRANSLATORS: transaction state, scanning for running processes
 #: ../lib/packagekit-glib2/pk-console-shared.c:371
 msgid "Scanning applications"
-msgstr ""
+msgstr "Hľadajú sa aplikácie"
 
 #. TRANSLATORS: transaction state, generating a list of packages installed on
 #. the system
 #: ../lib/packagekit-glib2/pk-console-shared.c:375
 msgid "Generating package lists"
-msgstr ""
+msgstr "Vytvárajú sa zoznamy balíkov"
 
 #. TRANSLATORS: transaction state, when we're waiting for the native tools to
 #. exit
 #: ../lib/packagekit-glib2/pk-console-shared.c:379
 msgid "Waiting for package manager lock"
-msgstr ""
+msgstr "Čaká sa na zámok správcu balíkov"
 
 #. TRANSLATORS: transaction state, waiting for user to type in a password
 #: ../lib/packagekit-glib2/pk-console-shared.c:383
 msgid "Waiting for authentication"
-msgstr ""
+msgstr "Čaká sa na overenie totožnosti"
 
 #. TRANSLATORS: transaction state, we are updating the list of processes
 #: ../lib/packagekit-glib2/pk-console-shared.c:387
 msgid "Updating running applications"
-msgstr ""
+msgstr "Aktualizujú sa bežiace aplikácie"
 
 #. TRANSLATORS: transaction state, we are checking executable files currently
 #. in use
 #: ../lib/packagekit-glib2/pk-console-shared.c:391
 msgid "Checking applications in use"
-msgstr ""
+msgstr "Kontrolujú sa používané aplikácie"
 
 #. TRANSLATORS: transaction state, we are checking for libraries currently in
 #. use
 #: ../lib/packagekit-glib2/pk-console-shared.c:395
 msgid "Checking libraries in use"
-msgstr ""
+msgstr "Kontrolujú sa používané knižnice"
 
 #. TRANSLATORS: transaction state, we are copying package files before or
 #. after the transaction
 #: ../lib/packagekit-glib2/pk-console-shared.c:399
 msgid "Copying files"
-msgstr ""
+msgstr "Kopírujú sa súbory"
 
 #. TRANSLATORS: The type of update
 #: ../lib/packagekit-glib2/pk-console-shared.c:417
 msgid "Trivial"
-msgstr ""
+msgstr "Triviálna"
 
 #. TRANSLATORS: The type of update
 #: ../lib/packagekit-glib2/pk-console-shared.c:421
 msgid "Normal"
-msgstr ""
+msgstr "Bežná"
 
 #. TRANSLATORS: The type of update
 #: ../lib/packagekit-glib2/pk-console-shared.c:425
 msgid "Important"
-msgstr ""
+msgstr "Dôležité"
 
 #. TRANSLATORS: The type of update
 #: ../lib/packagekit-glib2/pk-console-shared.c:429
 msgid "Security"
-msgstr ""
+msgstr "Bezpečnostné"
 
 #. TRANSLATORS: The type of update
 #: ../lib/packagekit-glib2/pk-console-shared.c:433
 msgid "Bug fix "
-msgstr ""
+msgstr "Opravy chýb"
 
 #. TRANSLATORS: The type of update
 #: ../lib/packagekit-glib2/pk-console-shared.c:437
 msgid "Enhancement"
-msgstr ""
+msgstr "Vylepšenia"
 
 #. TRANSLATORS: The type of update
 #: ../lib/packagekit-glib2/pk-console-shared.c:441
 msgid "Blocked"
-msgstr ""
+msgstr "Zablokované"
 
 #. TRANSLATORS: The state of a package
 #. TRANSLATORS: The action of the package, in past tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:446
 #: ../lib/packagekit-glib2/pk-console-shared.c:519
 msgid "Installed"
-msgstr ""
+msgstr "Nainštalované"
 
 #. TRANSLATORS: The state of a package, i.e. not installed
 #: ../lib/packagekit-glib2/pk-console-shared.c:451
 msgid "Available"
-msgstr ""
+msgstr "Dostupné"
 
 #. TRANSLATORS: The action of the package, in present tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:469
 msgid "Downloading"
-msgstr "Získavanie"
+msgstr "SÅ¥ahuje sa"
 
 #. TRANSLATORS: The action of the package, in present tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:473
 msgid "Updating"
-msgstr ""
+msgstr "Aktualizuje sa"
 
 #. TRANSLATORS: The action of the package, in present tense
 #. TRANSLATORS: The role of the transaction, in present tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:477
 #: ../lib/packagekit-glib2/pk-console-shared.c:597
 msgid "Installing"
-msgstr ""
+msgstr "Inštaluje sa"
 
 #. TRANSLATORS: The action of the package, in present tense
 #. TRANSLATORS: The role of the transaction, in present tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:481
 #: ../lib/packagekit-glib2/pk-console-shared.c:593
 msgid "Removing"
-msgstr ""
+msgstr "Odstraňuje sa"
 
 #. TRANSLATORS: The action of the package, in present tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:485
 msgid "Cleaning up"
-msgstr ""
+msgstr "Čistí sa"
 
 #. TRANSLATORS: The action of the package, in present tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:489
 msgid "Obsoleting"
-msgstr ""
+msgstr "Označuje sa ako zastaralé"
 
 #. TRANSLATORS: The action of the package, in present tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:493
 msgid "Reinstalling"
-msgstr ""
+msgstr "Znovu sa inštaluje"
 
 #. TRANSLATORS: The action of the package, in past tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:511
 msgid "Downloaded"
-msgstr ""
+msgstr "Stiahnuté"
 
 #. TRANSLATORS: The action of the package, in past tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:523
 msgid "Removed"
-msgstr ""
+msgstr "Odstránené"
 
 #. TRANSLATORS: The action of the package, in past tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:527
 msgid "Cleaned up"
-msgstr ""
+msgstr "Vyčistené"
 
 #. TRANSLATORS: The action of the package, in past tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:531
 msgid "Obsoleted"
-msgstr ""
+msgstr "OZnačené ako zastaralé"
 
 #. TRANSLATORS: The action of the package, in past tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:535
 msgid "Reinstalled"
-msgstr ""
+msgstr "Znovu nainštalované"
 
 #. TRANSLATORS: The role of the transaction, in present tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:553
 msgid "Unknown role type"
-msgstr ""
+msgstr "Neznámy typ role"
 
 #. TRANSLATORS: The role of the transaction, in present tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:557
 msgid "Getting dependencies"
-msgstr ""
+msgstr "Zisťujú sa závislosti"
 
 #. TRANSLATORS: The role of the transaction, in present tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:561
 msgid "Getting update details"
-msgstr ""
+msgstr "Zisťujú sa podrobnosti aktualizácie"
 
 #. TRANSLATORS: The role of the transaction, in present tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:565
 msgid "Getting details"
-msgstr ""
+msgstr "Zisťujú sa podrobnosti"
 
 #. TRANSLATORS: The role of the transaction, in present tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:569
 msgid "Getting requires"
-msgstr ""
+msgstr "Zisťujú sa závislosti"
 
 #. TRANSLATORS: The role of the transaction, in present tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:573
 msgid "Getting updates"
-msgstr ""
+msgstr "Získavajú sa aktualizácie"
 
 #. TRANSLATORS: The role of the transaction, in present tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:577
 msgid "Searching by details"
-msgstr ""
+msgstr "Hľadá sa podľa podrobností"
 
 #. TRANSLATORS: The role of the transaction, in present tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:581
 msgid "Searching by file"
-msgstr ""
+msgstr "Hľadá sa podľa súboru"
 
 #. TRANSLATORS: The role of the transaction, in present tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:585
 msgid "Searching groups"
-msgstr ""
+msgstr "Hľadá sa podľa skupín"
 
 #. TRANSLATORS: The role of the transaction, in present tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:589
 msgid "Searching by name"
-msgstr ""
+msgstr "Hľadá sa podľa názvu"
 
 #. TRANSLATORS: The role of the transaction, in present tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:601
 msgid "Installing files"
-msgstr ""
+msgstr "Inštalujú sa súbory"
 
 #. TRANSLATORS: The role of the transaction, in present tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:605
 msgid "Refreshing cache"
-msgstr ""
+msgstr "Obnovuje sa vyrovnávacia pamäť"
 
 #. TRANSLATORS: The role of the transaction, in present tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:609
 msgid "Updating packages"
-msgstr ""
+msgstr "Aktualizujú sa balíky"
 
 #. TRANSLATORS: The role of the transaction, in present tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:613
 msgid "Updating system"
-msgstr ""
+msgstr "Aktualizuje sa systém"
 
 #. TRANSLATORS: The role of the transaction, in present tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:617
 msgid "Canceling"
-msgstr ""
+msgstr "Prerušuje sa"
 
 #. TRANSLATORS: The role of the transaction, in present tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:625
 msgid "Getting repositories"
-msgstr ""
+msgstr "Získavajú sa zdroje softvéru"
 
 #. TRANSLATORS: The role of the transaction, in present tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:629
 msgid "Enabling repository"
-msgstr ""
+msgstr "Povoľuje sa zdroj softvéru"
 
 #. TRANSLATORS: The role of the transaction, in present tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:633
 msgid "Setting data"
-msgstr ""
+msgstr "Nastavujú sa údaje"
 
 #. TRANSLATORS: The role of the transaction, in present tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:637
 msgid "Resolving"
-msgstr ""
+msgstr "Rieši sa"
 
 #. TRANSLATORS: The role of the transaction, in present tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:641
 msgid "Getting file list"
-msgstr ""
+msgstr "Získava sa zoznam súborov"
 
 #. TRANSLATORS: The role of the transaction, in present tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:645
 msgid "Getting provides"
-msgstr ""
+msgstr "Získava sa zoznam poskytovaných"
 
 #. TRANSLATORS: The role of the transaction, in present tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:649
 msgid "Installing signature"
-msgstr ""
+msgstr "Inštaluje sa podpis"
 
 #. TRANSLATORS: The role of the transaction, in present tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:653
 msgid "Getting packages"
-msgstr ""
+msgstr "Získavajú sa balíky"
 
 #. TRANSLATORS: The role of the transaction, in present tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:657
 msgid "Accepting EULA"
-msgstr ""
+msgstr "Prijíma sa EULA"
 
 #. TRANSLATORS: The role of the transaction, in present tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:665
 msgid "Getting upgrades"
-msgstr ""
+msgstr "Získavajú sa aktualizácie"
 
 #. TRANSLATORS: The role of the transaction, in present tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:669
 msgid "Getting categories"
-msgstr ""
+msgstr "Získavajú sa kategórie"
 
 #. TRANSLATORS: The role of the transaction, in present tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:673
 msgid "Getting transactions"
-msgstr ""
+msgstr "Získavajú sa transakcie"
 
 #. TRANSLATORS: The role of the transaction, in present tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:677
 #: ../lib/packagekit-glib2/pk-console-shared.c:681
 msgid "Simulating install"
-msgstr ""
+msgstr "Simuluje sa inštalácia"
 
 #. TRANSLATORS: The role of the transaction, in present tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:685
 msgid "Simulating remove"
-msgstr ""
+msgstr "Simuluje sa odstránenie"
 
 #. TRANSLATORS: The role of the transaction, in present tense
 #: ../lib/packagekit-glib2/pk-console-shared.c:689
 msgid "Simulating update"
-msgstr ""
+msgstr "Simuluje sa aktualizácia"
 
 #. TRANSLATORS: turn on all debugging
 #: ../lib/packagekit-glib2/pk-debug.c:133
 msgid "Show debugging information for all files"
-msgstr ""
+msgstr "Zobraziť ladiace informácie všetkých súborov"
 
 #: ../lib/packagekit-glib2/pk-debug.c:201
 msgid "Debugging Options"
-msgstr ""
+msgstr "Možnosti ladenia"
 
 #: ../lib/packagekit-glib2/pk-debug.c:201
 msgid "Show debugging options"
-msgstr ""
+msgstr "Zobraziť možnosti ladenia"
 
 #. TRANSLATORS: ask the user if they are comfortable installing insecure
 #. packages
@@ -1690,7 +1702,7 @@ msgstr "URL kľúča"
 #. TRANSLATORS: the username of the key
 #: ../lib/packagekit-glib2/pk-task-text.c:133
 msgid "Key user"
-msgstr "Užívateľ kľúča"
+msgstr "Používateľ kľúča"
 
 #. TRANSLATORS: the key ID, usually a few hex digits
 #: ../lib/packagekit-glib2/pk-task-text.c:136
@@ -1710,7 +1722,7 @@ msgstr "Časová značka kľúča"
 #. TRANSLATORS: ask the user if they want to import
 #: ../lib/packagekit-glib2/pk-task-text.c:155
 msgid "Do you accept this signature?"
-msgstr "Akceptujete tento podpis?"
+msgstr "Prijímate tento podpis?"
 
 #. TRANSLATORS: tell the user we've not done anything
 #: ../lib/packagekit-glib2/pk-task-text.c:160
@@ -1721,7 +1733,7 @@ msgstr "Podpis nebol prijatý."
 #. read before installing
 #: ../lib/packagekit-glib2/pk-task-text.c:203
 msgid "End user licence agreement required"
-msgstr "Požadovaný je súhlas s licenciou koncového používateľa"
+msgstr "Požaduje sa súhlas s licenciou koncového používateľa"
 
 #. TRANSLATORS: the EULA text itself (long and boring)
 #: ../lib/packagekit-glib2/pk-task-text.c:212
@@ -1741,7 +1753,7 @@ msgstr "Dohoda nebola prijatá."
 #. TRANSLATORS: the user needs to change media inserted into the computer
 #: ../lib/packagekit-glib2/pk-task-text.c:265
 msgid "Media change required"
-msgstr "Je potrebná zmena média"
+msgstr "Je potrebná výmena média"
 
 #. TRANSLATORS: the type, e.g. DVD, CD, etc
 #: ../lib/packagekit-glib2/pk-task-text.c:268
@@ -1751,7 +1763,7 @@ msgstr "Typ média"
 #. TRANSLATORS: the media label, usually like 'disk-1of3'
 #: ../lib/packagekit-glib2/pk-task-text.c:271
 msgid "Media label"
-msgstr ""
+msgstr "Označenie média"
 
 #. TRANSLATORS: the media description, usually like 'Fedora 12 disk 5'
 #: ../lib/packagekit-glib2/pk-task-text.c:274
@@ -1761,7 +1773,7 @@ msgstr "Text"
 #. TRANSLATORS: ask the user to insert the media
 #: ../lib/packagekit-glib2/pk-task-text.c:280
 msgid "Please insert the correct media"
-msgstr "Vložte prosím správne médium"
+msgstr "Prosím, vložte správne médium"
 
 #. TRANSLATORS: tell the user we've not done anything as they are lazy
 #: ../lib/packagekit-glib2/pk-task-text.c:285
@@ -1771,27 +1783,27 @@ msgstr "Nebolo vložené správne médium."
 #. TRANSLATORS: When processing, we might have to remove other dependencies
 #: ../lib/packagekit-glib2/pk-task-text.c:300
 msgid "The following packages have to be removed:"
-msgstr "Nasledujúce balíčky budú musieť byť odstránené:"
+msgstr "Nasledujúce balíky budú musieť byť odstránené:"
 
 #. TRANSLATORS: When processing, we might have to install other dependencies
 #: ../lib/packagekit-glib2/pk-task-text.c:305
 msgid "The following packages have to be installed:"
-msgstr "Nasledujúce balíčky budú musieť byť nainštalované:"
+msgstr "Nasledujúce balíky budú musieť byť nainštalované:"
 
 #. TRANSLATORS: When processing, we might have to update other dependencies
 #: ../lib/packagekit-glib2/pk-task-text.c:310
 msgid "The following packages have to be updated:"
-msgstr "Nasledujúce balíčky budú musieť byť aktualizované:"
+msgstr "Nasledujúce balíky budú musieť byť aktualizované:"
 
 #. TRANSLATORS: When processing, we might have to reinstall other dependencies
 #: ../lib/packagekit-glib2/pk-task-text.c:315
 msgid "The following packages have to be reinstalled:"
-msgstr "Nasledujúce balíčky budú musieť byť preinštalované:"
+msgstr "Nasledujúce balíky budú musieť byť preinštalované:"
 
 #. TRANSLATORS: When processing, we might have to downgrade other dependencies
 #: ../lib/packagekit-glib2/pk-task-text.c:320
 msgid "The following packages have to be downgraded:"
-msgstr "Nasledujúcim balíčkom bude musieť byť znížené číslo verzie:"
+msgstr "Bude potrebné nainštalovať staršiu verziu nasledovných balíkov:"
 
 #. TRANSLATORS: ask the user if the proposed changes are okay
 #: ../lib/packagekit-glib2/pk-task-text.c:380
@@ -1801,7 +1813,7 @@ msgstr "Vykonať zmeny?"
 #. TRANSLATORS: tell the user we didn't do anything
 #: ../lib/packagekit-glib2/pk-task-text.c:385
 msgid "The transaction did not proceed."
-msgstr "Transakcia neprešla."
+msgstr "Transakcia neprebehla."
 
 #. SECURITY:
 #. - Normal users do not require admin authentication to accept new
@@ -1821,7 +1833,7 @@ msgstr "Na prijatie licenčných podmienok je potrebné overenie totožnosti"
 msgid ""
 "Authentication is required to cancel a task that was not started by yourself"
 msgstr ""
-"Na zrušenie úlohy, ktorá nebola naštartovaná vami, je potrebné overenie "
+"Na zrušenie úlohy, ktorú ste sami nespustili, je potrebné overenie "
 "totožnosti"
 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:10
@@ -1834,55 +1846,56 @@ msgid ""
 "Authentication is required to change the location used to decompress "
 "packages"
 msgstr ""
+"Na zmenu adresára, kde sa rozbaľujú balíky je potrebné overenie totožnosti"
 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:12
 msgid ""
 "Authentication is required to consider a key used for signing packages as "
 "trusted"
 msgstr ""
-"Na vyjadrenie dôvery kľúču používaného na podpisovanie balíčkov je potrebné "
+"Na vyjadrenie dôvery kľúču používaného na podpisovanie balíkov je potrebné "
 "overenie totožnosti"
 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:13
 msgid "Authentication is required to install a signed package"
-msgstr "Na inštalovanie podpísaného balíčka je potrebné overenie totožnosti"
+msgstr "Na inštalovanie podpísaného balíka je potrebné overenie totožnosti"
 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:14
 msgid "Authentication is required to install an untrusted package"
-msgstr "Na inštaláciu nedôveryhodného balíčka je potrebné overenie totožnosti"
+msgstr "Na inštaláciu nedôveryhodného balíka je potrebné overenie totožnosti"
 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:15
 msgid "Authentication is required to refresh the system sources"
-msgstr "Na obnovenie zdrojov pre systém je potrebné overenie totožnosti"
+msgstr "Na obnovenie zdrojov systému je potrebné overenie totožnosti"
 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:16
 msgid "Authentication is required to reload the device with a new driver"
 msgstr ""
-"Na obnovenie zariadenia s novým ovládačom je potrebné overenie totožnosti"
+"Na načítanie nového ovládača zariadenia je potrebné overenie totožnosti"
 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:17
 msgid "Authentication is required to remove packages"
-msgstr "Na odstránenie balíčkov je potrebné overenie totožnosti"
+msgstr "Na odstránenie balíkov je potrebné overenie totožnosti"
 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:18
 msgid "Authentication is required to rollback a transaction"
-msgstr "Na navrátenie transakcie je potrebné overenie totožnosti"
+msgstr "Na vrátenie transakcie je potrebné overenie totožnosti"
 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:19
 msgid ""
 "Authentication is required to set the network proxy used for downloading "
 "packages"
 msgstr ""
-"Na nastavenie sieťového proxy pre získavanie balíčkov je potrebné overenie "
+"Na nastavenie proxy servera na získavanie balíkov je potrebné overenie "
 "totožnosti"
 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:20
 msgid "Authentication is required to update packages"
-msgstr "Na aktualizáciu balíčkov je potrebné overenie totožnosti"
+msgstr "Na aktualizáciu balíkov je potrebné overenie totožnosti"
 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:21
 msgid "Authentication is required to upgrade the operating system"
-msgstr ""
+msgstr "Na aktualizáciu operačného systému je potrebné overenie totožnosti"
 
 #. SECURITY:
 #. - Normal users are allowed to cancel their own task without
@@ -1901,7 +1914,7 @@ msgstr "Zrušiť cudziu úlohu"
 #. 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:34
 msgid "Change location that packages are installed"
-msgstr ""
+msgstr "Zmeniť miesto, kam sa inštalujú balíky"
 
 #. SECURITY:
 #. - Normal users require admin authentication to enable or disable
@@ -1920,7 +1933,7 @@ msgstr "Zmeniť parametre zdrojov softvéru"
 #. 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:47
 msgid "Install signed package"
-msgstr "Inštalovať podpísaný balíček"
+msgstr "Inštalovať podpísaný balík"
 
 #. SECURITY:
 #. - Normal users require admin authentication to install untrusted or
@@ -1962,7 +1975,7 @@ msgstr "Obnoviť zariadenie"
 #. 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:77
 msgid "Remove package"
-msgstr "Odstrániť balíček"
+msgstr "Odstrániť balík"
 
 #. SECURITY:
 #. - Normal users require admin authentication to rollback system state
@@ -1979,7 +1992,7 @@ msgstr "Navrátiť sa k stavu pred transakciou"
 #. 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:88
 msgid "Set network proxy"
-msgstr "Nastaviť sieťové proxy"
+msgstr "Nastaviť proxy server"
 
 #. SECURITY:
 #. - Normal users require admin authentication to add signing keys.
@@ -1989,7 +2002,7 @@ msgstr "Nastaviť sieťové proxy"
 #. 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:95
 msgid "Trust a key used for signing packages"
-msgstr "Dôverovať kľúču pre podpisovanie balíčkov"
+msgstr "Dôverovať kľúču na podpisovanie balíkov"
 
 #. SECURITY:
 #. - Normal users do not require admin authentication to update the
@@ -2000,7 +2013,7 @@ msgstr "Dôverovať kľúču pre podpisovanie balíčkov"
 #. 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:103
 msgid "Update packages"
-msgstr "Aktualizovať balíčky"
+msgstr "Aktualizovať balíky"
 
 #. SECURITY:
 #. - Normal users require admin authentication to upgrade the disto as
@@ -2009,7 +2022,7 @@ msgstr "Aktualizovať balíčky"
 #. 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:109
 msgid "Upgrade System"
-msgstr ""
+msgstr "Aktualizovať systém"
 
 #. TRANSLATORS: failed due to DBus security
 #: ../src/pk-main.c:87
@@ -2038,7 +2051,7 @@ msgstr ""
 #. TRANSLATORS: a backend is the system package tool, e.g. yum, apt
 #: ../src/pk-main.c:200
 msgid "Packaging backend to use, e.g. dummy"
-msgstr "Rozhranie balíčkoveho systému ktoré sa má použiť, napríklad \"dummy\""
+msgstr "Rozhranie balíkového systému, ktoré sa má použiť, napríklad „dummy“"
 
 #. TRANSLATORS: if we should run in the background
 #: ../src/pk-main.c:203
@@ -2063,7 +2076,7 @@ msgstr "Skončiť po krátkej prestávke"
 #. TRANSLATORS: exit straight away, used for automatic profiling
 #: ../src/pk-main.c:215
 msgid "Exit after the engine has loaded"
-msgstr "Skončiť po načítaní enginu"
+msgstr "Skončiť po načítaní jadra"
 
 #. TRANSLATORS: describing the service that is running
 #: ../src/pk-main.c:230
@@ -2083,7 +2096,9 @@ msgstr "Chyba pri pokuse o spustenie:"
 
 #: ../src/pk-polkit-action-lookup.c:150
 msgid "To install debugging packages, extra sources need to be enabled"
-msgstr "Na inštalovanie ladiacich balíčkov je potrebné povoliť extra zdroje"
+msgstr ""
+"Aby ste mohli inštalovať ladiace balíky, je potrebné povoliť extra zdroje "
+"softvéru"
 
 #. TRANSLATORS: is not GPG signed
 #: ../src/pk-polkit-action-lookup.c:171 ../src/pk-polkit-action-lookup.c:190
@@ -2093,27 +2108,25 @@ msgstr "Tento softvér nepochádza z dôveryhodného zdroja."
 #: ../src/pk-polkit-action-lookup.c:176
 msgid "Do not update this package unless you are sure it is safe to do so."
 msgstr ""
-"Neaktualizujte tento balíček, pokiaľ nie ste si istý, že to je bezpečné."
+"Neaktualizujte tento balík, pokiaľ si nie ste istý, že to je bezpečné."
 
 #: ../src/pk-polkit-action-lookup.c:177
 msgid "Do not update these packages unless you are sure it is safe to do so."
 msgstr ""
-"Neaktualizujte tieto balíčky, pokiaľ nie ste si istý, že to je bezpečné."
+"Neaktualizujte tieto balíky, pokiaľ si nie ste istý, že to je bezpečné."
 
 #: ../src/pk-polkit-action-lookup.c:195
 msgid "Do not install this package unless you are sure it is safe to do so."
-msgstr ""
-"Neinštalujte tento balíček, pokiaľ nie ste si istý, že to je bezpečné."
+msgstr "Neinštalujte tento balík, pokiaľ si nie ste istý, že to je bezpečné."
 
 #: ../src/pk-polkit-action-lookup.c:196
 msgid "Do not install these packages unless you are sure it is safe to do so."
-msgstr ""
-"Neinštalujte tieto balíčky, pokiaľ nie ste si istý, že to je bezpečné."
+msgstr "Neinštalujte tieto balíky, pokiaľ si nie ste istý, že to je bezpečné."
 
 #. TRANSLATORS: too many packages to list each one
 #: ../src/pk-polkit-action-lookup.c:273
 msgid "Many packages"
-msgstr "Priveľa balíčkov"
+msgstr "Priveľa balíkov"
 
 #. TRANSLATORS: if the transaction is forced to install only trusted packages
 #: ../src/pk-polkit-action-lookup.c:339
diff --git a/po/sl.po b/po/sl.po
new file mode 100644
index 0000000..ecb3833
--- /dev/null
+++ b/po/sl.po
@@ -0,0 +1,2100 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL at ADDRESS>, YEAR.
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: PackageKit\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-12-13 12:23+0000\n"
+"PO-Revision-Date: 2011-05-04 09:48+0000\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Language-Team: Slovenian <lugos-slo at lugos.si>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sl\n"
+"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3)\n"
+
+#. TRANSLATORS: this is an atomic transaction
+#. TRANSLATORS: the role is the point of the transaction, e.g. update-system
+#: ../client/pk-console.c:174 ../client/pk-console.c:596
+msgid "Transaction"
+msgstr ""
+
+#. TRANSLATORS: this is the time the transaction was started in system
+#. timezone
+#: ../client/pk-console.c:176
+msgid "System time"
+msgstr ""
+
+#. TRANSLATORS: this is if the transaction succeeded or not
+#: ../client/pk-console.c:178
+msgid "Succeeded"
+msgstr ""
+
+#: ../client/pk-console.c:178
+msgid "True"
+msgstr ""
+
+#: ../client/pk-console.c:178
+msgid "False"
+msgstr ""
+
+#. TRANSLATORS: this is the transactions role, e.g. "update-system"
+#. TRANSLATORS: the trasaction role, e.g. update-system
+#: ../client/pk-console.c:180 ../src/pk-polkit-action-lookup.c:332
+msgid "Role"
+msgstr ""
+
+#. TRANSLATORS: this is The duration of the transaction
+#: ../client/pk-console.c:185
+msgid "Duration"
+msgstr ""
+
+#: ../client/pk-console.c:185
+msgid "(seconds)"
+msgstr ""
+
+#. TRANSLATORS: this is The command line used to do the action
+#. TRANSLATORS: the command line of the thing that wants the authentication
+#: ../client/pk-console.c:189 ../src/pk-polkit-action-lookup.c:346
+msgid "Command line"
+msgstr ""
+
+#. TRANSLATORS: this is the user ID of the user that started the action
+#: ../client/pk-console.c:191
+msgid "User ID"
+msgstr ""
+
+#. TRANSLATORS: this is the username, e.g. hughsie
+#: ../client/pk-console.c:198
+msgid "Username"
+msgstr ""
+
+#. TRANSLATORS: this is the users real name, e.g. "Richard Hughes"
+#: ../client/pk-console.c:202
+msgid "Real name"
+msgstr ""
+
+#: ../client/pk-console.c:210
+msgid "Affected packages:"
+msgstr ""
+
+#: ../client/pk-console.c:212
+msgid "Affected packages: None"
+msgstr ""
+
+#. TRANSLATORS: this is the distro, e.g. Fedora 10
+#: ../client/pk-console.c:247
+msgid "Distribution"
+msgstr ""
+
+#. TRANSLATORS: this is type of update, stable or testing
+#: ../client/pk-console.c:249
+msgid "Type"
+msgstr ""
+
+#. TRANSLATORS: this is any summary text describing the upgrade
+#. TRANSLATORS: this is the summary of the group
+#: ../client/pk-console.c:251 ../client/pk-console.c:290
+msgid "Summary"
+msgstr ""
+
+#. TRANSLATORS: this is the group category name
+#: ../client/pk-console.c:279
+msgid "Category"
+msgstr ""
+
+#. TRANSLATORS: this is group identifier
+#: ../client/pk-console.c:281
+msgid "ID"
+msgstr ""
+
+#. TRANSLATORS: this is the parent group
+#: ../client/pk-console.c:284
+msgid "Parent"
+msgstr ""
+
+#. TRANSLATORS: this is the name of the parent group
+#: ../client/pk-console.c:287
+msgid "Name"
+msgstr ""
+
+#. TRANSLATORS: this is preferred icon for the group
+#: ../client/pk-console.c:293
+msgid "Icon"
+msgstr ""
+
+#. TRANSLATORS: this is a header for the package that can be updated
+#: ../client/pk-console.c:339
+msgid "Details about the update:"
+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:345 ../client/pk-console.c:615
+#: ../lib/packagekit-glib2/pk-task-text.c:124
+#: ../lib/packagekit-glib2/pk-task-text.c:206
+#: ../src/pk-polkit-action-lookup.c:357
+msgid "Package"
+msgid_plural "Packages"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+#. TRANSLATORS: details about the update, any packages that this update
+#. updates
+#: ../client/pk-console.c:348
+msgid "Updates"
+msgstr ""
+
+#. TRANSLATORS: details about the update, any packages that this update
+#. obsoletes
+#: ../client/pk-console.c:352
+msgid "Obsoletes"
+msgstr ""
+
+#. TRANSLATORS: details about the update, the vendor URLs
+#. TRANSLATORS: the vendor (e.g. vmware) that is providing the EULA
+#: ../client/pk-console.c:356 ../lib/packagekit-glib2/pk-task-text.c:209
+msgid "Vendor"
+msgstr ""
+
+#. TRANSLATORS: details about the update, the bugzilla URLs
+#: ../client/pk-console.c:360
+msgid "Bugzilla"
+msgstr ""
+
+#. TRANSLATORS: details about the update, the CVE URLs
+#: ../client/pk-console.c:364
+msgid "CVE"
+msgstr ""
+
+#. TRANSLATORS: details about the update, if the package requires a restart
+#: ../client/pk-console.c:368
+msgid "Restart"
+msgstr ""
+
+#. TRANSLATORS: details about the update, any description of the update
+#: ../client/pk-console.c:372
+msgid "Update text"
+msgstr ""
+
+#. TRANSLATORS: details about the update, the changelog for the package
+#: ../client/pk-console.c:376
+msgid "Changes"
+msgstr ""
+
+#. TRANSLATORS: details about the update, the ongoing state of the update
+#: ../client/pk-console.c:380
+msgid "State"
+msgstr ""
+
+#. TRANSLATORS: details about the update, date the update was issued
+#: ../client/pk-console.c:384
+msgid "Issued"
+msgstr ""
+
+#. TRANSLATORS: details about the update, date the update was updated
+#. TRANSLATORS: The action of the package, in past tense
+#: ../client/pk-console.c:388 ../lib/packagekit-glib2/pk-console-shared.c:515
+msgid "Updated"
+msgstr ""
+
+#. TRANSLATORS: if the repo is enabled
+#: ../client/pk-console.c:424
+msgid "Enabled"
+msgstr ""
+
+#. TRANSLATORS: if the repo is disabled
+#: ../client/pk-console.c:427
+msgid "Disabled"
+msgstr ""
+
+#. TRANSLATORS: a package requires the system to be restarted
+#: ../client/pk-console.c:459
+msgid "System restart required by:"
+msgstr ""
+
+#. TRANSLATORS: a package requires the session to be restarted
+#: ../client/pk-console.c:462
+msgid "Session restart required:"
+msgstr ""
+
+#. TRANSLATORS: a package requires the system to be restarted due to a
+#. security update
+#: ../client/pk-console.c:465
+msgid "System restart (security) required by:"
+msgstr ""
+
+#. TRANSLATORS: a package requires the session to be restarted due to a
+#. security update
+#: ../client/pk-console.c:468
+msgid "Session restart (security) required:"
+msgstr ""
+
+#. TRANSLATORS: a package requires the application to be restarted
+#: ../client/pk-console.c:471
+msgid "Application restart required by:"
+msgstr ""
+
+#. TRANSLATORS: This a list of details about the package
+#: ../client/pk-console.c:506
+msgid "Package description"
+msgstr ""
+
+#. TRANSLATORS: This a message (like a little note that may be of interest)
+#. from the transaction
+#: ../client/pk-console.c:537
+msgid "Message:"
+msgstr ""
+
+#. TRANSLATORS: This where the package has no files
+#: ../client/pk-console.c:558
+msgid "No files"
+msgstr ""
+
+#. TRANSLATORS: This a list files contained in the package
+#: ../client/pk-console.c:563
+msgid "Package files"
+msgstr ""
+
+#. TRANSLATORS: the percentage complete of the transaction
+#: ../client/pk-console.c:631
+msgid "Percentage"
+msgstr ""
+
+#. TRANSLATORS: the status of the transaction (e.g. downloading)
+#: ../client/pk-console.c:649
+msgid "Status"
+msgstr ""
+
+#. TRANSLATORS: the results from the transaction
+#: ../client/pk-console.c:678
+msgid "Results:"
+msgstr ""
+
+#. TRANSLATORS: we failed to get any results, which is pretty fatal in my book
+#: ../client/pk-console.c:685
+msgid "Fatal error"
+msgstr ""
+
+#. TRANSLATORS: the user asked to update everything, but there is nothing that
+#. can be updated
+#: ../client/pk-console.c:701
+msgid "There are no packages to update."
+msgstr ""
+
+#. TRANSLATORS: the transaction failed in a way we could not expect
+#: ../client/pk-console.c:704
+#: ../contrib/command-not-found/pk-command-not-found.c:639
+msgid "The transaction failed"
+msgstr ""
+
+#. TRANSLATORS: print a message when there are no updates
+#: ../client/pk-console.c:733
+msgid "There are no updates available at this time."
+msgstr ""
+
+#: ../client/pk-console.c:756
+msgid "There are no upgrades available at this time."
+msgstr ""
+
+#. TRANSLATORS: a package needs to restart their system
+#: ../client/pk-console.c:823
+msgid "Please restart the computer to complete the update."
+msgstr ""
+
+#. TRANSLATORS: a package needs to restart the session
+#: ../client/pk-console.c:826
+msgid "Please logout and login to complete the update."
+msgstr ""
+
+#. TRANSLATORS: a package needs to restart their system (due to security)
+#: ../client/pk-console.c:829
+msgid ""
+"Please restart the computer to complete the update as important security "
+"updates have been installed."
+msgstr ""
+
+#. TRANSLATORS: a package needs to restart the session (due to security)
+#: ../client/pk-console.c:832
+msgid ""
+"Please logout and login to complete the update as important security updates"
+" have been installed."
+msgstr ""
+
+#. TRANSLATORS: The user used 'pkcon install dave.rpm' rather than 'pkcon
+#. install-local dave.rpm'
+#: ../client/pk-console.c:858
+#, 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:866
+#, c-format
+msgid "This tool could not find any available package: %s"
+msgstr ""
+
+#. TRANSLATORS: There was an error getting the list of files for the package.
+#. The detailed error follows
+#: ../client/pk-console.c:894
+#, c-format
+msgid "This tool could not find the installed package: %s"
+msgstr ""
+
+#. TRANSLATORS: There was an error getting the list of files for the package.
+#. The detailed error follows
+#: ../client/pk-console.c:922 ../client/pk-console.c:950
+#, c-format
+msgid "This tool could not find the package: %s"
+msgstr ""
+
+#. TRANSLATORS: There was an error getting the list of files for the package.
+#. The detailed error follows
+#. TRANSLATORS: There was an error getting the dependencies for the package.
+#. The detailed error follows
+#. TRANSLATORS: There was an error getting the details about the package. The
+#. detailed error follows
+#. TRANSLATORS: The package name was not found in any software sources. The
+#. detailed error follows
+#: ../client/pk-console.c:978 ../client/pk-console.c:1006
+#: ../client/pk-console.c:1034 ../client/pk-console.c:1062
+#: ../client/pk-console.c:1090
+#, c-format
+msgid "This tool could not find all the packages: %s"
+msgstr ""
+
+#. TRANSLATORS: This is when the daemon crashed, and we are up shit creek
+#. without a paddle
+#: ../client/pk-console.c:1119
+msgid "The daemon crashed mid-transaction!"
+msgstr ""
+
+#. TRANSLATORS: This is the header to the --help menu
+#: ../client/pk-console.c:1153
+msgid "PackageKit Console Interface"
+msgstr ""
+
+#. these are commands we can use with pkcon
+#: ../client/pk-console.c:1155
+msgid "Subcommands:"
+msgstr ""
+
+#. TRANSLATORS: we keep a database updated with the time that an action was
+#. last executed
+#: ../client/pk-console.c:1234
+msgid "Failed to get the time since this action was last completed"
+msgstr ""
+
+#. TRANSLATORS: command line argument, just show the version string
+#: ../client/pk-console.c:1275 ../client/pk-monitor.c:371
+msgid "Show the program version and exit"
+msgstr ""
+
+#. TRANSLATORS: command line argument, use a filter to narrow down results
+#: ../client/pk-console.c:1278
+msgid "Set the filter, e.g. installed"
+msgstr ""
+
+#. TRANSLATORS: command line argument, use a non-standard install prefix
+#: ../client/pk-console.c:1281
+msgid "Set the install root, e.g. '/' or '/mnt/ltsp'"
+msgstr ""
+
+#. TRANSLATORS: command line argument, work asynchronously
+#: ../client/pk-console.c:1284
+msgid "Exit without waiting for actions to complete"
+msgstr ""
+
+#. command line argument, do we ask questions
+#: ../client/pk-console.c:1287
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:525
+msgid "Install the packages without asking for confirmation"
+msgstr ""
+
+#. TRANSLATORS: command line argument, this command is not a priority
+#: ../client/pk-console.c:1290
+msgid "Run the command using idle network bandwidth and also using less power"
+msgstr ""
+
+#. TRANSLATORS: command line argument, just output without fancy formatting
+#: ../client/pk-console.c:1293
+msgid ""
+"Print to screen a machine readable output, rather than using animated "
+"widgets"
+msgstr ""
+
+#. TRANSLATORS: command line argument, just output without fancy formatting
+#: ../client/pk-console.c:1296
+msgid "The maximum metadata cache age. Use -1 for 'never'."
+msgstr ""
+
+#. TRANSLATORS: we failed to contact the daemon
+#: ../client/pk-console.c:1333
+msgid "Failed to contact PackageKit"
+msgstr ""
+
+#. TRANSLATORS: The user specified an incorrect filter
+#: ../client/pk-console.c:1381
+msgid "The proxy could not be set"
+msgstr ""
+
+#. TRANSLATORS: The user specified an incorrect filter
+#: ../client/pk-console.c:1393
+msgid "The install root could not be set"
+msgstr ""
+
+#. TRANSLATORS: The user specified an incorrect filter
+#: ../client/pk-console.c:1405
+msgid "The filter specified was invalid"
+msgstr ""
+
+#. TRANSLATORS: a search type can be name, details, file, etc
+#: ../client/pk-console.c:1424
+msgid "A search type is required, e.g. name"
+msgstr ""
+
+#. TRANSLATORS: the user needs to provide a search term
+#: ../client/pk-console.c:1431 ../client/pk-console.c:1443
+#: ../client/pk-console.c:1455 ../client/pk-console.c:1467
+msgid "A search term is required"
+msgstr ""
+
+#. TRANSLATORS: the search type was provided, but invalid
+#: ../client/pk-console.c:1477
+msgid "Invalid search type"
+msgstr ""
+
+#. TRANSLATORS: the user did not specify what they wanted to install
+#: ../client/pk-console.c:1483
+msgid "A package name to install is required"
+msgstr ""
+
+#. TRANSLATORS: the user did not specify what they wanted to install
+#: ../client/pk-console.c:1492
+msgid "A filename to install is required"
+msgstr ""
+
+#. TRANSLATORS: geeky error, 99.9999% of users won't see this
+#: ../client/pk-console.c:1503
+msgid "A type, key_id and package_id are required"
+msgstr ""
+
+#. TRANSLATORS: the user did not specify what they wanted to remove
+#: ../client/pk-console.c:1514
+msgid "A package name to remove is required"
+msgstr ""
+
+#. TRANSLATORS: the user did not specify anything about what to download or
+#. where
+#: ../client/pk-console.c:1523
+msgid "A destination directory and the package names to download are required"
+msgstr ""
+
+#. TRANSLATORS: the directory does not exist, so we can't continue
+#: ../client/pk-console.c:1530
+msgid "Directory not found"
+msgstr ""
+
+#. TRANSLATORS: geeky error, 99.9999% of users won't see this
+#: ../client/pk-console.c:1539
+msgid "A licence identifier (eula-id) is required"
+msgstr ""
+
+#. TRANSLATORS: geeky error, 99.9999% of users won't see this
+#: ../client/pk-console.c:1550
+msgid "A transaction identifier (tid) is required"
+msgstr ""
+
+#. TRANSLATORS: The user did not specify a package name
+#: ../client/pk-console.c:1571
+msgid "A package name to resolve is required"
+msgstr ""
+
+#. TRANSLATORS: The user did not specify a repository (software source) name
+#: ../client/pk-console.c:1582 ../client/pk-console.c:1593
+msgid "A repository name is required"
+msgstr ""
+
+#. TRANSLATORS: The user didn't provide any data
+#: ../client/pk-console.c:1604
+msgid "A repo name, parameter and value are required"
+msgstr ""
+
+#. TRANSLATORS: The user didn't specify what action to use
+#: ../client/pk-console.c:1621
+msgid "An action, e.g. 'update-system' is required"
+msgstr ""
+
+#. TRANSLATORS: The user specified an invalid action
+#: ../client/pk-console.c:1628
+msgid "A correct role is required"
+msgstr ""
+
+#. TRANSLATORS: The user did not provide a package name
+#. TRANSLATORS: This is when the user fails to supply the package name
+#: ../client/pk-console.c:1638 ../client/pk-console.c:1652
+#: ../client/pk-console.c:1661 ../client/pk-console.c:1681
+#: ../client/pk-console.c:1690 ../client/pk-generate-pack.c:314
+msgid "A package name is required"
+msgstr ""
+
+#. TRANSLATORS: each package "provides" certain things, e.g. mime(gstreamer-
+#. decoder-mp3), the user didn't specify it
+#: ../client/pk-console.c:1670
+msgid "A package provide string is required"
+msgstr ""
+
+#. TRANSLATORS: The user did not provide a distro name
+#: ../client/pk-console.c:1714
+msgid "A distribution name is required"
+msgstr ""
+
+#. TRANSLATORS: The user did not provide an upgrade type
+#: ../client/pk-console.c:1720
+msgid "An upgrade type is required, e.g. 'minimal', 'default' or 'complete'"
+msgstr ""
+
+#. TRANSLATORS: The user tried to use an unsupported option on the command
+#. line
+#: ../client/pk-console.c:1770
+#, c-format
+msgid "Option '%s' is not supported"
+msgstr ""
+
+#. TRANSLATORS: Generic failure of what they asked to do
+#: ../client/pk-console.c:1780
+msgid "Command failed"
+msgstr ""
+
+#. TRANSLATORS: we can exclude certain packages (glibc) when we know they'll
+#. exist on the target
+#: ../client/pk-generate-pack.c:253
+msgid "Set the file name of dependencies to be excluded"
+msgstr ""
+
+#. TRANSLATORS: the output location
+#: ../client/pk-generate-pack.c:256
+msgid ""
+"The output file or directory (the current directory is used if omitted)"
+msgstr ""
+
+#. TRANSLATORS: put a list of packages in the pack
+#: ../client/pk-generate-pack.c:259
+msgid "The package to be put into the service pack"
+msgstr ""
+
+#. TRANSLATORS: put all pending updates in the pack
+#: ../client/pk-generate-pack.c:262
+msgid "Put all updates available in the service pack"
+msgstr ""
+
+#. TRANSLATORS: This is when the user fails to supply the correct arguments
+#: ../client/pk-generate-pack.c:298
+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:306
+msgid "Both options selected."
+msgstr ""
+
+#. TRANSLATORS: This is when the user fails to supply the output
+#: ../client/pk-generate-pack.c:322
+msgid "A output directory or file name is required"
+msgstr ""
+
+#. TRANSLATORS: This is when the daemon is not-installed/broken and fails to
+#. startup
+#: ../client/pk-generate-pack.c:340
+msgid "The daemon failed to startup"
+msgstr ""
+
+#. TRANSLATORS: This is when the backend doesn't have the capability to get-
+#. depends
+#. TRANSLATORS: This is when the backend doesn't have the capability to
+#. download
+#: ../client/pk-generate-pack.c:351 ../client/pk-generate-pack.c:357
+msgid "The package manager cannot perform this type of operation."
+msgstr ""
+
+#. TRANSLATORS: This is when the distro didn't include libarchive support into
+#. PK
+#: ../client/pk-generate-pack.c:364
+msgid ""
+"Service packs cannot be created as PackageKit was not built with libarchive "
+"support."
+msgstr ""
+
+#. TRANSLATORS: the user specified an absolute path, but didn't get the
+#. extension correct
+#: ../client/pk-generate-pack.c:375
+msgid "If specifying a file, the service pack name must end with"
+msgstr ""
+
+#. TRANSLATORS: This is when file already exists
+#: ../client/pk-generate-pack.c:391
+msgid "A pack with the same name already exists, do you want to overwrite it?"
+msgstr ""
+
+#. TRANSLATORS: This is when the pack was not overwritten
+#: ../client/pk-generate-pack.c:394
+msgid "The pack was not overwritten."
+msgstr ""
+
+#. TRANSLATORS: This is when the temporary directory cannot be created, the
+#. directory name follows
+#: ../client/pk-generate-pack.c:407
+msgid "Failed to create directory:"
+msgstr ""
+
+#. TRANSLATORS: This is when the list of packages from the remote computer
+#. cannot be opened
+#: ../client/pk-generate-pack.c:419
+msgid "Failed to open package list."
+msgstr ""
+
+#. TRANSLATORS: The package name is being matched up to available packages
+#: ../client/pk-generate-pack.c:428
+msgid "Finding package name."
+msgstr ""
+
+#. TRANSLATORS: This is when the package cannot be found in any software
+#. source. The detailed error follows
+#: ../client/pk-generate-pack.c:432
+#, 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:440
+msgid "Creating service pack..."
+msgstr ""
+
+#. TRANSLATORS: we succeeded in making the file
+#: ../client/pk-generate-pack.c:455
+#, c-format
+msgid "Service pack created '%s'"
+msgstr ""
+
+#. TRANSLATORS: we failed to make te file
+#: ../client/pk-generate-pack.c:460
+#, c-format
+msgid "Failed to create '%s': %s"
+msgstr ""
+
+#: ../client/pk-monitor.c:284
+msgid "Failed to get daemon state"
+msgstr ""
+
+#: ../client/pk-monitor.c:349
+msgid "Failed to get properties"
+msgstr ""
+
+#. TRANSLATORS: this is a program that monitors PackageKit
+#: ../client/pk-monitor.c:387
+msgid "PackageKit Monitor"
+msgstr ""
+
+#. TRANSLATORS: when we are getting data from the daemon
+#: ../contrib/browser-plugin/pk-plugin-install.c:499
+msgid "Getting package information..."
+msgstr ""
+
+#. TRANSLATORS: run an applicaiton
+#: ../contrib/browser-plugin/pk-plugin-install.c:505
+#, c-format
+msgid "Run %s"
+msgstr ""
+
+#. TRANSLATORS: show the installed version of a package
+#: ../contrib/browser-plugin/pk-plugin-install.c:511
+msgid "Installed version"
+msgstr ""
+
+#. TRANSLATORS: run the application now
+#: ../contrib/browser-plugin/pk-plugin-install.c:519
+#, c-format
+msgid "Run version %s now"
+msgstr ""
+
+#. TRANSLATORS: run the application now
+#: ../contrib/browser-plugin/pk-plugin-install.c:525
+msgid "Run now"
+msgstr ""
+
+#. TRANSLATORS: update to a new version of the package
+#: ../contrib/browser-plugin/pk-plugin-install.c:531
+#, c-format
+msgid "Update to version %s"
+msgstr ""
+
+#. TRANSLATORS: To install a package
+#: ../contrib/browser-plugin/pk-plugin-install.c:537
+#, c-format
+msgid "Install %s now"
+msgstr ""
+
+#. TRANSLATORS: the version of the package
+#: ../contrib/browser-plugin/pk-plugin-install.c:540
+msgid "Version"
+msgstr ""
+
+#. TRANSLATORS: noting found, so can't install
+#: ../contrib/browser-plugin/pk-plugin-install.c:545
+msgid "No packages found for your system"
+msgstr ""
+
+#. TRANSLATORS: package is being installed
+#: ../contrib/browser-plugin/pk-plugin-install.c:550
+msgid "Installing..."
+msgstr ""
+
+#. TRANSLATORS: downloading repo data so we can search
+#: ../contrib/command-not-found/pk-command-not-found.c: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: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: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: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:444
+msgid "Failed to search for file"
+msgstr ""
+
+#. TRANSLATORS: the transaction failed in a way we could not expect
+#: ../contrib/command-not-found/pk-command-not-found.c:456
+msgid "Getting the list of files failed"
+msgstr ""
+
+#. TRANSLATORS: we failed to launch the executable, the error follows
+#: ../contrib/command-not-found/pk-command-not-found.c:602
+msgid "Failed to launch:"
+msgstr ""
+
+#. TRANSLATORS: we failed to install the package
+#: ../contrib/command-not-found/pk-command-not-found.c:630
+msgid "Failed to install packages"
+msgstr ""
+
+#. TRANSLATORS: tool that gets called when the command is not found
+#: ../contrib/command-not-found/pk-command-not-found.c:706
+msgid "PackageKit Command Not Found"
+msgstr ""
+
+#. TRANSLATORS: the prefix of all the output telling the user
+#. * why it's not executing. NOTE: this is lowercase to mimic
+#. * the style of bash itself -- apologies
+#: ../contrib/command-not-found/pk-command-not-found.c:739
+msgid "command not found"
+msgstr ""
+
+#. TRANSLATORS: tell the user what we think the command is
+#: ../contrib/command-not-found/pk-command-not-found.c:757
+msgid "Similar command is:"
+msgstr ""
+
+#. TRANSLATORS: Ask the user if we should run the similar command
+#: ../contrib/command-not-found/pk-command-not-found.c:771
+msgid "Run similar command:"
+msgstr ""
+
+#. TRANSLATORS: show the user a list of commands that they could have meant
+#. TRANSLATORS: show the user a list of commands we could run
+#: ../contrib/command-not-found/pk-command-not-found.c:785
+#: ../contrib/command-not-found/pk-command-not-found.c:794
+msgid "Similar commands are:"
+msgstr ""
+
+#. TRANSLATORS: ask the user to choose a file to run
+#: ../contrib/command-not-found/pk-command-not-found.c:801
+msgid "Please choose a command to run"
+msgstr ""
+
+#. TRANSLATORS: tell the user what package provides the command
+#: ../contrib/command-not-found/pk-command-not-found.c:819
+msgid "The package providing this file is:"
+msgstr ""
+
+#. TRANSLATORS: as the user if we want to install a package to provide the
+#. command
+#: ../contrib/command-not-found/pk-command-not-found.c:826
+#, 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:853
+msgid "Packages providing this file are:"
+msgstr ""
+
+#. TRANSLATORS: Show the user a list of packages that they can install to
+#. provide this command
+#: ../contrib/command-not-found/pk-command-not-found.c:863
+msgid "Suitable packages are:"
+msgstr ""
+
+#. get selection
+#. TRANSLATORS: ask the user to choose a file to install
+#: ../contrib/command-not-found/pk-command-not-found.c:872
+msgid "Please choose a package to install"
+msgstr ""
+
+#. TRANSLATORS: we are starting to install the packages
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:195
+msgid "Starting install"
+msgstr ""
+
+#. TRANSLATORS: we couldn't find the package name, non-fatal
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:407
+#, c-format
+msgid "Failed to find the package %s, or already installed: %s"
+msgstr ""
+
+#. command line argument, simulate what would be done, but don't actually do
+#. it
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:516
+msgid ""
+"Don't actually install any packages, only simulate what would be installed"
+msgstr ""
+
+#. command line argument, do we skip packages that depend on the ones
+#. specified
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:519
+msgid "Do not install dependencies of the core packages"
+msgstr ""
+
+#. command line argument, do we operate quietly
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:522
+msgid "Do not display information or progress"
+msgstr ""
+
+#. TRANSLATORS: tool that gets called when the command is not found
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:540
+msgid "PackageKit Debuginfo Installer"
+msgstr ""
+
+#. TRANSLATORS: the use needs to specify a list of package names on the
+#. command line
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:554
+#, c-format
+msgid "ERROR: Specify package names to install."
+msgstr ""
+
+#. TRANSLATORS: we are getting the list of repositories
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:590
+#, c-format
+msgid "Getting sources list"
+msgstr ""
+
+#. TRANSLATORS: operation was not successful
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:600
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:675
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:759
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:803
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:870
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:914
+msgid "FAILED."
+msgstr ""
+
+#. TRANSLATORS: all completed 100%
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:615
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:655
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:690
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:774
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:818
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:885
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:929
+#, c-format
+msgid "OK."
+msgstr ""
+
+#. TRANSLATORS: tell the user what we found
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:618
+#, c-format
+msgid "Found %i enabled and %i disabled sources."
+msgstr ""
+
+#. TRANSLATORS: we're finding repositories that match out pattern
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:625
+#, c-format
+msgid "Finding debugging sources"
+msgstr ""
+
+#. TRANSLATORS: tell the user what we found
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:658
+#, c-format
+msgid "Found %i disabled debuginfo repos."
+msgstr ""
+
+#. TRANSLATORS: we're now enabling all the debug sources we found
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:665
+#, c-format
+msgid "Enabling debugging sources"
+msgstr ""
+
+#. TRANSLATORS: tell the user how many we enabled
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:693
+#, c-format
+msgid "Enabled %i debugging sources."
+msgstr ""
+
+#. TRANSLATORS: we're now finding packages that match in all the repos
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:700
+#, c-format
+msgid "Finding debugging packages"
+msgstr ""
+
+#. TRANSLATORS: we couldn't find the package name, non-fatal
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:712
+#, c-format
+msgid "Failed to find the package %s: %s"
+msgstr ""
+
+#. TRANSLATORS: we couldn't find the debuginfo package name, non-fatal
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:735
+#, c-format
+msgid "Failed to find the debuginfo package %s: %s"
+msgstr ""
+
+#. TRANSLATORS: no debuginfo packages could be found to be installed
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:763
+#, c-format
+msgid "Found no packages to install."
+msgstr ""
+
+#. TRANSLATORS: tell the user we found some packages, and then list them
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:777
+#, c-format
+msgid "Found %i packages:"
+msgstr ""
+
+#. TRANSLATORS: tell the user we are searching for deps
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:793
+#, c-format
+msgid "Finding packages that depend on these packages"
+msgstr ""
+
+#. TRANSLATORS: could not install, detailed error follows
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:806
+#, c-format
+msgid "Could not find dependant packages: %s"
+msgstr ""
+
+#. TRANSLATORS: tell the user we found some more packages
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:822
+#, c-format
+msgid "Found %i extra packages."
+msgstr ""
+
+#. TRANSLATORS: tell the user we found some more packages
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:826
+#, c-format
+msgid "No extra packages required."
+msgstr ""
+
+#. TRANSLATORS: tell the user we found some packages (and deps), and then list
+#. them
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:835
+#, c-format
+msgid "Found %i packages to install:"
+msgstr ""
+
+#. TRANSLATORS: simulate mode is a testing mode where we quit before the
+#. action
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:848
+#, c-format
+msgid "Not installing packages in simulate mode"
+msgstr ""
+
+#. TRANSLATORS: we are now installing the debuginfo packages we found earlier
+#. TRANSLATORS: transaction state, installing packages
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:860
+#: ../lib/packagekit-glib2/pk-console-shared.c:287
+#, c-format
+msgid "Installing packages"
+msgstr ""
+
+#. TRANSLATORS: could not install, detailed error follows
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:873
+#, c-format
+msgid "Could not install packages: %s"
+msgstr ""
+
+#. TRANSLATORS: we are now disabling all debuginfo repos we previously enabled
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:905
+#, c-format
+msgid "Disabling sources previously enabled"
+msgstr ""
+
+#. TRANSLATORS: no debuginfo packages could be found to be installed, detailed
+#. error follows
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:917
+#, c-format
+msgid "Could not disable the debugging sources: %s"
+msgstr ""
+
+#. TRANSLATORS: we disabled all the debugging repos that we enabled before
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:932
+#, c-format
+msgid "Disabled %i debugging sources."
+msgstr ""
+
+#. TRANSLATORS: couldn't open device to write
+#: ../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:71
+msgid "Failed to write to the file"
+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 ""
+
+#. TRANSLATORS: the device could not be found in sysfs
+#: ../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:203
+msgid "Failed to unregister driver"
+msgstr ""
+
+#. TRANSLATORS: we failed to bind the old driver
+#: ../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:261
+msgid "Device path not found"
+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 ""
+
+#: ../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: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: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:315
+msgid "PackageKit Device Reloader"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. TRANSLATORS: we're going to verify the path first
+#: ../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:347
+msgid "Failed to verify device path"
+msgstr ""
+
+#. TRANSLATORS: we're going to try
+#: ../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:366
+msgid "Failed to rebind device"
+msgstr ""
+
+#: ../data/packagekit-catalog.xml.in.h:1
+msgid "PackageKit Catalog"
+msgstr ""
+
+#: ../data/packagekit-package-list.xml.in.h:1
+msgid "PackageKit Package List"
+msgstr ""
+
+#: ../data/packagekit-servicepack.xml.in.h:1
+msgid "PackageKit Service Pack"
+msgstr ""
+
+#: ../lib/packagekit-glib2/pk-console-shared.c:63
+#, 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:189
+msgid "More than one package matches:"
+msgstr ""
+
+#. TRANSLATORS: This finds out which package in the list to use
+#: ../lib/packagekit-glib2/pk-console-shared.c:200
+msgid "Please choose the correct package: "
+msgstr ""
+
+#. TRANSLATORS: This is when the transaction status is not known
+#: ../lib/packagekit-glib2/pk-console-shared.c:255
+msgid "Unknown state"
+msgstr ""
+
+#. TRANSLATORS: transaction state, the daemon is in the process of starting
+#: ../lib/packagekit-glib2/pk-console-shared.c:259
+msgid "Starting"
+msgstr ""
+
+#. TRANSLATORS: transaction state, the transaction is waiting for another to
+#. complete
+#: ../lib/packagekit-glib2/pk-console-shared.c:263
+msgid "Waiting in queue"
+msgstr ""
+
+#. TRANSLATORS: transaction state, just started
+#: ../lib/packagekit-glib2/pk-console-shared.c:267
+msgid "Running"
+msgstr ""
+
+#. TRANSLATORS: transaction state, is querying data
+#: ../lib/packagekit-glib2/pk-console-shared.c:271
+msgid "Querying"
+msgstr ""
+
+#. TRANSLATORS: transaction state, getting data from a server
+#: ../lib/packagekit-glib2/pk-console-shared.c:275
+msgid "Getting information"
+msgstr ""
+
+#. TRANSLATORS: transaction state, removing packages
+#: ../lib/packagekit-glib2/pk-console-shared.c:279
+msgid "Removing packages"
+msgstr ""
+
+#. TRANSLATORS: transaction state, downloading package files
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:283
+#: ../lib/packagekit-glib2/pk-console-shared.c:661
+msgid "Downloading packages"
+msgstr ""
+
+#. TRANSLATORS: transaction state, refreshing internal lists
+#: ../lib/packagekit-glib2/pk-console-shared.c:291
+msgid "Refreshing software list"
+msgstr ""
+
+#. TRANSLATORS: transaction state, installing updates
+#: ../lib/packagekit-glib2/pk-console-shared.c:295
+msgid "Installing updates"
+msgstr ""
+
+#. TRANSLATORS: transaction state, removing old packages, and cleaning config
+#. files
+#: ../lib/packagekit-glib2/pk-console-shared.c:299
+msgid "Cleaning up packages"
+msgstr ""
+
+#. TRANSLATORS: transaction state, obsoleting old packages
+#: ../lib/packagekit-glib2/pk-console-shared.c:303
+msgid "Obsoleting packages"
+msgstr ""
+
+#. TRANSLATORS: transaction state, checking the transaction before we do it
+#: ../lib/packagekit-glib2/pk-console-shared.c:307
+msgid "Resolving dependencies"
+msgstr ""
+
+#. TRANSLATORS: transaction state, checking if we have all the security keys
+#. for the operation
+#: ../lib/packagekit-glib2/pk-console-shared.c:311
+msgid "Checking signatures"
+msgstr ""
+
+#. TRANSLATORS: transaction state, when we return to a previous system state
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:315
+#: ../lib/packagekit-glib2/pk-console-shared.c:621
+msgid "Rolling back"
+msgstr ""
+
+#. TRANSLATORS: transaction state, when we're doing a test transaction
+#: ../lib/packagekit-glib2/pk-console-shared.c:319
+msgid "Testing changes"
+msgstr ""
+
+#. TRANSLATORS: transaction state, when we're writing to the system package
+#. database
+#: ../lib/packagekit-glib2/pk-console-shared.c:323
+msgid "Committing changes"
+msgstr ""
+
+#. TRANSLATORS: transaction state, requesting data from a server
+#: ../lib/packagekit-glib2/pk-console-shared.c:327
+msgid "Requesting data"
+msgstr ""
+
+#. TRANSLATORS: transaction state, all done!
+#: ../lib/packagekit-glib2/pk-console-shared.c:331
+msgid "Finished"
+msgstr ""
+
+#. TRANSLATORS: transaction state, in the process of cancelling
+#: ../lib/packagekit-glib2/pk-console-shared.c:335
+msgid "Cancelling"
+msgstr ""
+
+#. TRANSLATORS: transaction state, downloading metadata
+#: ../lib/packagekit-glib2/pk-console-shared.c:339
+msgid "Downloading repository information"
+msgstr ""
+
+#. TRANSLATORS: transaction state, downloading metadata
+#: ../lib/packagekit-glib2/pk-console-shared.c:343
+msgid "Downloading list of packages"
+msgstr ""
+
+#. TRANSLATORS: transaction state, downloading metadata
+#: ../lib/packagekit-glib2/pk-console-shared.c:347
+msgid "Downloading file lists"
+msgstr ""
+
+#. TRANSLATORS: transaction state, downloading metadata
+#: ../lib/packagekit-glib2/pk-console-shared.c:351
+msgid "Downloading lists of changes"
+msgstr ""
+
+#. TRANSLATORS: transaction state, downloading metadata
+#: ../lib/packagekit-glib2/pk-console-shared.c:355
+msgid "Downloading groups"
+msgstr ""
+
+#. TRANSLATORS: transaction state, downloading metadata
+#: ../lib/packagekit-glib2/pk-console-shared.c:359
+msgid "Downloading update information"
+msgstr ""
+
+#. TRANSLATORS: transaction state, repackaging delta files
+#: ../lib/packagekit-glib2/pk-console-shared.c:363
+msgid "Repackaging files"
+msgstr ""
+
+#. TRANSLATORS: transaction state, loading databases
+#: ../lib/packagekit-glib2/pk-console-shared.c:367
+msgid "Loading cache"
+msgstr ""
+
+#. TRANSLATORS: transaction state, scanning for running processes
+#: ../lib/packagekit-glib2/pk-console-shared.c:371
+msgid "Scanning applications"
+msgstr ""
+
+#. TRANSLATORS: transaction state, generating a list of packages installed on
+#. the system
+#: ../lib/packagekit-glib2/pk-console-shared.c:375
+msgid "Generating package lists"
+msgstr ""
+
+#. TRANSLATORS: transaction state, when we're waiting for the native tools to
+#. exit
+#: ../lib/packagekit-glib2/pk-console-shared.c:379
+msgid "Waiting for package manager lock"
+msgstr ""
+
+#. TRANSLATORS: transaction state, waiting for user to type in a password
+#: ../lib/packagekit-glib2/pk-console-shared.c:383
+msgid "Waiting for authentication"
+msgstr ""
+
+#. TRANSLATORS: transaction state, we are updating the list of processes
+#: ../lib/packagekit-glib2/pk-console-shared.c:387
+msgid "Updating running applications"
+msgstr ""
+
+#. TRANSLATORS: transaction state, we are checking executable files currently
+#. in use
+#: ../lib/packagekit-glib2/pk-console-shared.c:391
+msgid "Checking applications in use"
+msgstr ""
+
+#. TRANSLATORS: transaction state, we are checking for libraries currently in
+#. use
+#: ../lib/packagekit-glib2/pk-console-shared.c:395
+msgid "Checking libraries in use"
+msgstr ""
+
+#. TRANSLATORS: transaction state, we are copying package files before or
+#. after the transaction
+#: ../lib/packagekit-glib2/pk-console-shared.c:399
+msgid "Copying files"
+msgstr ""
+
+#. TRANSLATORS: The type of update
+#: ../lib/packagekit-glib2/pk-console-shared.c:417
+msgid "Trivial"
+msgstr ""
+
+#. TRANSLATORS: The type of update
+#: ../lib/packagekit-glib2/pk-console-shared.c:421
+msgid "Normal"
+msgstr ""
+
+#. TRANSLATORS: The type of update
+#: ../lib/packagekit-glib2/pk-console-shared.c:425
+msgid "Important"
+msgstr ""
+
+#. TRANSLATORS: The type of update
+#: ../lib/packagekit-glib2/pk-console-shared.c:429
+msgid "Security"
+msgstr ""
+
+#. TRANSLATORS: The type of update
+#: ../lib/packagekit-glib2/pk-console-shared.c:433
+msgid "Bug fix "
+msgstr ""
+
+#. TRANSLATORS: The type of update
+#: ../lib/packagekit-glib2/pk-console-shared.c:437
+msgid "Enhancement"
+msgstr ""
+
+#. TRANSLATORS: The type of update
+#: ../lib/packagekit-glib2/pk-console-shared.c:441
+msgid "Blocked"
+msgstr ""
+
+#. TRANSLATORS: The state of a package
+#. TRANSLATORS: The action of the package, in past tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:446
+#: ../lib/packagekit-glib2/pk-console-shared.c:519
+msgid "Installed"
+msgstr ""
+
+#. TRANSLATORS: The state of a package, i.e. not installed
+#: ../lib/packagekit-glib2/pk-console-shared.c:451
+msgid "Available"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:469
+msgid "Downloading"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:473
+msgid "Updating"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in present tense
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:477
+#: ../lib/packagekit-glib2/pk-console-shared.c:597
+msgid "Installing"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in present tense
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:481
+#: ../lib/packagekit-glib2/pk-console-shared.c:593
+msgid "Removing"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:485
+msgid "Cleaning up"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:489
+msgid "Obsoleting"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:493
+msgid "Reinstalling"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in past tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:511
+msgid "Downloaded"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in past tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:523
+msgid "Removed"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in past tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:527
+msgid "Cleaned up"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in past tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:531
+msgid "Obsoleted"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in past tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:535
+msgid "Reinstalled"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:553
+msgid "Unknown role type"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:557
+msgid "Getting dependencies"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:561
+msgid "Getting update details"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:565
+msgid "Getting details"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:569
+msgid "Getting requires"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:573
+msgid "Getting updates"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:577
+msgid "Searching by details"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:581
+msgid "Searching by file"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:585
+msgid "Searching groups"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:589
+msgid "Searching by name"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:601
+msgid "Installing files"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:605
+msgid "Refreshing cache"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:609
+msgid "Updating packages"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:613
+msgid "Updating system"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:617
+msgid "Canceling"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:625
+msgid "Getting repositories"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:629
+msgid "Enabling repository"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:633
+msgid "Setting data"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:637
+msgid "Resolving"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:641
+msgid "Getting file list"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:645
+msgid "Getting provides"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:649
+msgid "Installing signature"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:653
+msgid "Getting packages"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:657
+msgid "Accepting EULA"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:665
+msgid "Getting upgrades"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:669
+msgid "Getting categories"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:673
+msgid "Getting transactions"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:677
+#: ../lib/packagekit-glib2/pk-console-shared.c:681
+msgid "Simulating install"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:685
+msgid "Simulating remove"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:689
+msgid "Simulating update"
+msgstr ""
+
+#. TRANSLATORS: turn on all debugging
+#: ../lib/packagekit-glib2/pk-debug.c:133
+msgid "Show debugging information for all files"
+msgstr ""
+
+#: ../lib/packagekit-glib2/pk-debug.c:201
+msgid "Debugging Options"
+msgstr ""
+
+#: ../lib/packagekit-glib2/pk-debug.c:201
+msgid "Show debugging options"
+msgstr ""
+
+#. TRANSLATORS: ask the user if they are comfortable installing insecure
+#. packages
+#: ../lib/packagekit-glib2/pk-task-text.c:67
+msgid "Do you want to allow installing of unsigned software?"
+msgstr ""
+
+#. TRANSLATORS: tell the user we've not done anything
+#: ../lib/packagekit-glib2/pk-task-text.c:72
+msgid "The unsigned software will not be installed."
+msgstr ""
+
+#. TRANSLATORS: the package repository is signed by a key that is not
+#. recognised
+#: ../lib/packagekit-glib2/pk-task-text.c:121
+msgid "Software source signature required"
+msgstr ""
+
+#. TRANSLATORS: the package repository name
+#: ../lib/packagekit-glib2/pk-task-text.c:127
+msgid "Software source name"
+msgstr ""
+
+#. TRANSLATORS: the key URL
+#: ../lib/packagekit-glib2/pk-task-text.c:130
+msgid "Key URL"
+msgstr ""
+
+#. TRANSLATORS: the username of the key
+#: ../lib/packagekit-glib2/pk-task-text.c:133
+msgid "Key user"
+msgstr ""
+
+#. TRANSLATORS: the key ID, usually a few hex digits
+#: ../lib/packagekit-glib2/pk-task-text.c:136
+msgid "Key ID"
+msgstr ""
+
+#. TRANSLATORS: the key fingerprint, again, yet more hex
+#: ../lib/packagekit-glib2/pk-task-text.c:139
+msgid "Key fingerprint"
+msgstr ""
+
+#. TRANSLATORS: the timestamp (a bit like a machine readable time)
+#: ../lib/packagekit-glib2/pk-task-text.c:142
+msgid "Key Timestamp"
+msgstr ""
+
+#. TRANSLATORS: ask the user if they want to import
+#: ../lib/packagekit-glib2/pk-task-text.c:155
+msgid "Do you accept this signature?"
+msgstr ""
+
+#. TRANSLATORS: tell the user we've not done anything
+#: ../lib/packagekit-glib2/pk-task-text.c:160
+msgid "The signature was not accepted."
+msgstr ""
+
+#. TRANSLATORS: this is another name for a software licence that has to be
+#. read before installing
+#: ../lib/packagekit-glib2/pk-task-text.c:203
+msgid "End user licence agreement required"
+msgstr ""
+
+#. TRANSLATORS: the EULA text itself (long and boring)
+#: ../lib/packagekit-glib2/pk-task-text.c:212
+msgid "Agreement"
+msgstr ""
+
+#. TRANSLATORS: ask the user if they've read and accepted the EULA
+#: ../lib/packagekit-glib2/pk-task-text.c:221
+msgid "Do you accept this agreement?"
+msgstr ""
+
+#. TRANSLATORS: tell the user we've not done anything
+#: ../lib/packagekit-glib2/pk-task-text.c:226
+msgid "The agreement was not accepted."
+msgstr ""
+
+#. TRANSLATORS: the user needs to change media inserted into the computer
+#: ../lib/packagekit-glib2/pk-task-text.c:265
+msgid "Media change required"
+msgstr ""
+
+#. TRANSLATORS: the type, e.g. DVD, CD, etc
+#: ../lib/packagekit-glib2/pk-task-text.c:268
+msgid "Media type"
+msgstr ""
+
+#. TRANSLATORS: the media label, usually like 'disk-1of3'
+#: ../lib/packagekit-glib2/pk-task-text.c:271
+msgid "Media label"
+msgstr ""
+
+#. TRANSLATORS: the media description, usually like 'Fedora 12 disk 5'
+#: ../lib/packagekit-glib2/pk-task-text.c:274
+msgid "Text"
+msgstr ""
+
+#. TRANSLATORS: ask the user to insert the media
+#: ../lib/packagekit-glib2/pk-task-text.c:280
+msgid "Please insert the correct media"
+msgstr ""
+
+#. TRANSLATORS: tell the user we've not done anything as they are lazy
+#: ../lib/packagekit-glib2/pk-task-text.c:285
+msgid "The correct media was not inserted."
+msgstr ""
+
+#. TRANSLATORS: When processing, we might have to remove other dependencies
+#: ../lib/packagekit-glib2/pk-task-text.c:300
+msgid "The following packages have to be removed:"
+msgstr ""
+
+#. TRANSLATORS: When processing, we might have to install other dependencies
+#: ../lib/packagekit-glib2/pk-task-text.c:305
+msgid "The following packages have to be installed:"
+msgstr ""
+
+#. TRANSLATORS: When processing, we might have to update other dependencies
+#: ../lib/packagekit-glib2/pk-task-text.c:310
+msgid "The following packages have to be updated:"
+msgstr ""
+
+#. TRANSLATORS: When processing, we might have to reinstall other dependencies
+#: ../lib/packagekit-glib2/pk-task-text.c:315
+msgid "The following packages have to be reinstalled:"
+msgstr ""
+
+#. TRANSLATORS: When processing, we might have to downgrade other dependencies
+#: ../lib/packagekit-glib2/pk-task-text.c:320
+msgid "The following packages have to be downgraded:"
+msgstr ""
+
+#. TRANSLATORS: ask the user if the proposed changes are okay
+#: ../lib/packagekit-glib2/pk-task-text.c:380
+msgid "Proceed with changes?"
+msgstr ""
+
+#. TRANSLATORS: tell the user we didn't do anything
+#: ../lib/packagekit-glib2/pk-task-text.c:385
+msgid "The transaction did not proceed."
+msgstr ""
+
+#. SECURITY:
+#. - Normal users do not require admin authentication to accept new
+#. licence agreements.
+#. - Change this to 'auth_admin' for environments where users should not
+#. be given the option to make legal decisions.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:7
+msgid "Accept EULA"
+msgstr ""
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h: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"
+msgstr ""
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:10
+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:13
+msgid "Authentication is required to install a signed package"
+msgstr ""
+
+#: ../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:15
+msgid "Authentication is required to refresh the system sources"
+msgstr ""
+
+#: ../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:17
+msgid "Authentication is required to remove packages"
+msgstr ""
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:18
+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 ""
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:21
+msgid "Authentication is required to upgrade the operating system"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users are allowed to cancel their own task without
+#. authentication, but a different user id needs the admin password
+#. to cancel another users task.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:27
+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:34
+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:40
+msgid "Change software source parameters"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users do not need authentication to install signed packages
+#. from signed repositories, as this cannot exploit a system.
+#. - Paranoid users (or parents!) can change this to 'auth_admin' or
+#. 'auth_admin_keep'.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:47
+msgid "Install signed package"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users require admin authentication to install untrusted or
+#. unrecognised packages, as allowing users to do this without a
+#. password would be a massive security hole.
+#. - This is not retained as each package should be authenticated.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:54
+msgid "Install untrusted local file"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users do not require admin authentication to refresh the
+#. cache, as this doesn't actually install or remove software.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:59
+msgid "Refresh system sources"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users require admin authentication to rebind a driver
+#. so that it works after we install firmware.
+#. - This should not be set to 'yes' as unprivileged users could then
+#. try to rebind drivers in use, for instance security authentication
+#. devices.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:67
+msgid "Reload a device"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users require admin authentication to remove packages as
+#. this can make the system unbootable or stop other applications from
+#. working.
+#. - Be sure to close the tool used to remove the packages after the
+#. admin authentication has been obtained, otherwise packages can still
+#. be removed. If this is not possible, change this authentication to
+#. 'auth_admin'.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:77
+msgid "Remove package"
+msgstr ""
+
+#. 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:83
+msgid "Rollback to a previous transaction"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users do not require admin authentication to set the proxy
+#. used for downloading packages.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:88
+msgid "Set network proxy"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users require admin authentication to add signing keys.
+#. - This implies adding an explicit trust, and should not be granted
+#. without a secure authentication.
+#. - This is not kept as each package should be authenticated.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:95
+msgid "Trust a key used for signing packages"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users do not require admin authentication to update the
+#. system as the packages will be signed, and the action is required
+#. to update the system when unattended.
+#. - Changing this to anything other than 'yes' will break unattended
+#. updates.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:103
+msgid "Update packages"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users require admin authentication to upgrade the disto as
+#. this can make the system unbootable or stop other applications from
+#. working.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:109
+msgid "Upgrade System"
+msgstr ""
+
+#. TRANSLATORS: failed due to DBus security
+#: ../src/pk-main.c:87
+msgid "Startup failed due to security policies on this machine."
+msgstr ""
+
+#. TRANSLATORS: only two ways this can fail...
+#: ../src/pk-main.c:89
+msgid "This can happen for two reasons:"
+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 ""
+
+#. 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 ""
+
+#. TRANSLATORS: a backend is the system package tool, e.g. yum, apt
+#: ../src/pk-main.c:200
+msgid "Packaging backend to use, e.g. dummy"
+msgstr ""
+
+#. TRANSLATORS: if we should run in the background
+#: ../src/pk-main.c:203
+msgid "Daemonize and detach from the terminal"
+msgstr ""
+
+#. TRANSLATORS: if we should not monitor how long we are inactive for
+#: ../src/pk-main.c:206
+msgid "Disable the idle timer"
+msgstr ""
+
+#. TRANSLATORS: show version
+#: ../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:212
+msgid "Exit after a small delay"
+msgstr ""
+
+#. TRANSLATORS: exit straight away, used for automatic profiling
+#: ../src/pk-main.c:215
+msgid "Exit after the engine has loaded"
+msgstr ""
+
+#. TRANSLATORS: describing the service that is running
+#: ../src/pk-main.c:230
+msgid "PackageKit service"
+msgstr ""
+
+#. TRANSLATORS: fatal error, dbus is not running
+#: ../src/pk-main.c:267
+msgid "Cannot connect to the system bus"
+msgstr ""
+
+#. TRANSLATORS: cannot register on system bus, unknown reason -- geeky error
+#. follows
+#: ../src/pk-main.c:316
+msgid "Error trying to start:"
+msgstr ""
+
+#: ../src/pk-polkit-action-lookup.c:150
+msgid "To install debugging packages, extra sources need to be enabled"
+msgstr ""
+
+#. 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 ""
+
+#: ../src/pk-polkit-action-lookup.c:176
+msgid "Do not update this package unless you are sure it is safe to do so."
+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 ""
+
+#: ../src/pk-polkit-action-lookup.c:195
+msgid "Do not install this package unless you are sure it is safe to do so."
+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 ""
+
+#. TRANSLATORS: too many packages to list each one
+#: ../src/pk-polkit-action-lookup.c:273
+msgid "Many packages"
+msgstr ""
+
+#. TRANSLATORS: if the transaction is forced to install only trusted packages
+#: ../src/pk-polkit-action-lookup.c:339
+msgid "Only trusted"
+msgstr ""
diff --git a/po/sr.po b/po/sr.po
index 59592bc..7153e51 100644
--- a/po/sr.po
+++ b/po/sr.po
@@ -8,9 +8,9 @@ msgstr ""
 "Project-Id-Version: PackageKit\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2010-12-13 12:23+0000\n"
-"PO-Revision-Date: 2011-03-04 18:34+0000\n"
+"PO-Revision-Date: 2011-03-22 15:37+0000\n"
 "Last-Translator: hughsie <richard at hughsie.com>\n"
-"Language-Team: LANGUAGE <LL at li.org>\n"
+"Language-Team: Serbian (http://www.transifex.net/projects/p/freedesktop/team/sr/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
diff --git a/po/sr at latin.po b/po/sr at latin.po
index c7eaee4..c436cb0 100644
--- a/po/sr at latin.po
+++ b/po/sr at latin.po
@@ -8,9 +8,9 @@ msgstr ""
 "Project-Id-Version: PackageKit\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2010-12-13 12:23+0000\n"
-"PO-Revision-Date: 2011-03-04 18:34+0000\n"
+"PO-Revision-Date: 2011-03-22 15:37+0000\n"
 "Last-Translator: hughsie <richard at hughsie.com>\n"
-"Language-Team: LANGUAGE <LL at li.org>\n"
+"Language-Team: Serbian (Latin) (http://www.transifex.net/projects/p/freedesktop/team/sr@latin/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
diff --git a/po/sv.po b/po/sv.po
index a2e6371..8222ee5 100644
--- a/po/sv.po
+++ b/po/sv.po
@@ -8,9 +8,9 @@ msgstr ""
 "Project-Id-Version: PackageKit\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2010-12-13 12:23+0000\n"
-"PO-Revision-Date: 2011-03-04 18:34+0000\n"
+"PO-Revision-Date: 2011-03-22 15:37+0000\n"
 "Last-Translator: yeager <po at danielnylander.se>\n"
-"Language-Team: Swedish <None>\n"
+"Language-Team: Swedish (http://www.transifex.net/projects/p/freedesktop/team/sv/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
diff --git a/po/ta.po b/po/ta.po
index 0a57b75..019a091 100644
--- a/po/ta.po
+++ b/po/ta.po
@@ -8,7 +8,7 @@ msgstr ""
 "Project-Id-Version: PackageKit\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2010-12-13 12:23+0000\n"
-"PO-Revision-Date: 2011-03-04 18:34+0000\n"
+"PO-Revision-Date: 2011-03-22 15:37+0000\n"
 "Last-Translator: hughsie <richard at hughsie.com>\n"
 "Language-Team: LANGUAGE <LL at li.org>\n"
 "MIME-Version: 1.0\n"
diff --git a/po/te.po b/po/te.po
index 81209f8..7165394 100644
--- a/po/te.po
+++ b/po/te.po
@@ -8,7 +8,7 @@ msgstr ""
 "Project-Id-Version: PackageKit\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2010-12-13 12:23+0000\n"
-"PO-Revision-Date: 2011-03-04 18:34+0000\n"
+"PO-Revision-Date: 2011-03-22 15:37+0000\n"
 "Last-Translator: hughsie <richard at hughsie.com>\n"
 "Language-Team: LANGUAGE <LL at li.org>\n"
 "MIME-Version: 1.0\n"
diff --git a/po/th.po b/po/th.po
index 1c576d8..7a956ee 100644
--- a/po/th.po
+++ b/po/th.po
@@ -8,7 +8,7 @@ msgstr ""
 "Project-Id-Version: PackageKit\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2010-12-13 12:23+0000\n"
-"PO-Revision-Date: 2011-03-04 18:34+0000\n"
+"PO-Revision-Date: 2011-03-22 15:37+0000\n"
 "Last-Translator: hughsie <richard at hughsie.com>\n"
 "Language-Team: LANGUAGE <LL at li.org>\n"
 "MIME-Version: 1.0\n"
diff --git a/po/tr.po b/po/tr.po
index 3dae1da..840adc8 100644
--- a/po/tr.po
+++ b/po/tr.po
@@ -8,9 +8,9 @@ msgstr ""
 "Project-Id-Version: PackageKit\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2010-12-13 12:23+0000\n"
-"PO-Revision-Date: 2011-03-04 18:34+0000\n"
+"PO-Revision-Date: 2011-03-22 15:37+0000\n"
 "Last-Translator: hughsie <richard at hughsie.com>\n"
-"Language-Team: LANGUAGE <LL at li.org>\n"
+"Language-Team: Turkish (http://www.transifex.net/projects/p/freedesktop/team/tr/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
diff --git a/po/uk.po b/po/uk.po
index 0755202..c920736 100644
--- a/po/uk.po
+++ b/po/uk.po
@@ -8,9 +8,9 @@ msgstr ""
 "Project-Id-Version: PackageKit\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2010-12-13 12:23+0000\n"
-"PO-Revision-Date: 2011-03-04 18:34+0000\n"
+"PO-Revision-Date: 2011-03-22 15:37+0000\n"
 "Last-Translator: yurchor <yurchor at ukr.net>\n"
-"Language-Team: Ukrainian <kde-l10n-uk at lists.kde.org>\n"
+"Language-Team: Ukrainian <trans-uk at lists.fedoraproject.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
diff --git a/po/wa.po b/po/wa.po
new file mode 100644
index 0000000..116afd2
--- /dev/null
+++ b/po/wa.po
@@ -0,0 +1,2098 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL at ADDRESS>, YEAR.
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: PackageKit\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-12-13 12:23+0000\n"
+"PO-Revision-Date: 2011-05-04 09:48+0000\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Language-Team: Walloon (http://www.transifex.net/projects/p/freedesktop/team/wa/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: wa\n"
+"Plural-Forms: nplurals=2; plural=(n > 1)\n"
+
+#. TRANSLATORS: this is an atomic transaction
+#. TRANSLATORS: the role is the point of the transaction, e.g. update-system
+#: ../client/pk-console.c:174 ../client/pk-console.c:596
+msgid "Transaction"
+msgstr ""
+
+#. TRANSLATORS: this is the time the transaction was started in system
+#. timezone
+#: ../client/pk-console.c:176
+msgid "System time"
+msgstr ""
+
+#. TRANSLATORS: this is if the transaction succeeded or not
+#: ../client/pk-console.c:178
+msgid "Succeeded"
+msgstr ""
+
+#: ../client/pk-console.c:178
+msgid "True"
+msgstr ""
+
+#: ../client/pk-console.c:178
+msgid "False"
+msgstr ""
+
+#. TRANSLATORS: this is the transactions role, e.g. "update-system"
+#. TRANSLATORS: the trasaction role, e.g. update-system
+#: ../client/pk-console.c:180 ../src/pk-polkit-action-lookup.c:332
+msgid "Role"
+msgstr ""
+
+#. TRANSLATORS: this is The duration of the transaction
+#: ../client/pk-console.c:185
+msgid "Duration"
+msgstr ""
+
+#: ../client/pk-console.c:185
+msgid "(seconds)"
+msgstr ""
+
+#. TRANSLATORS: this is The command line used to do the action
+#. TRANSLATORS: the command line of the thing that wants the authentication
+#: ../client/pk-console.c:189 ../src/pk-polkit-action-lookup.c:346
+msgid "Command line"
+msgstr ""
+
+#. TRANSLATORS: this is the user ID of the user that started the action
+#: ../client/pk-console.c:191
+msgid "User ID"
+msgstr ""
+
+#. TRANSLATORS: this is the username, e.g. hughsie
+#: ../client/pk-console.c:198
+msgid "Username"
+msgstr ""
+
+#. TRANSLATORS: this is the users real name, e.g. "Richard Hughes"
+#: ../client/pk-console.c:202
+msgid "Real name"
+msgstr ""
+
+#: ../client/pk-console.c:210
+msgid "Affected packages:"
+msgstr ""
+
+#: ../client/pk-console.c:212
+msgid "Affected packages: None"
+msgstr ""
+
+#. TRANSLATORS: this is the distro, e.g. Fedora 10
+#: ../client/pk-console.c:247
+msgid "Distribution"
+msgstr ""
+
+#. TRANSLATORS: this is type of update, stable or testing
+#: ../client/pk-console.c:249
+msgid "Type"
+msgstr ""
+
+#. TRANSLATORS: this is any summary text describing the upgrade
+#. TRANSLATORS: this is the summary of the group
+#: ../client/pk-console.c:251 ../client/pk-console.c:290
+msgid "Summary"
+msgstr ""
+
+#. TRANSLATORS: this is the group category name
+#: ../client/pk-console.c:279
+msgid "Category"
+msgstr ""
+
+#. TRANSLATORS: this is group identifier
+#: ../client/pk-console.c:281
+msgid "ID"
+msgstr ""
+
+#. TRANSLATORS: this is the parent group
+#: ../client/pk-console.c:284
+msgid "Parent"
+msgstr ""
+
+#. TRANSLATORS: this is the name of the parent group
+#: ../client/pk-console.c:287
+msgid "Name"
+msgstr ""
+
+#. TRANSLATORS: this is preferred icon for the group
+#: ../client/pk-console.c:293
+msgid "Icon"
+msgstr ""
+
+#. TRANSLATORS: this is a header for the package that can be updated
+#: ../client/pk-console.c:339
+msgid "Details about the update:"
+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:345 ../client/pk-console.c:615
+#: ../lib/packagekit-glib2/pk-task-text.c:124
+#: ../lib/packagekit-glib2/pk-task-text.c:206
+#: ../src/pk-polkit-action-lookup.c:357
+msgid "Package"
+msgid_plural "Packages"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: details about the update, any packages that this update
+#. updates
+#: ../client/pk-console.c:348
+msgid "Updates"
+msgstr ""
+
+#. TRANSLATORS: details about the update, any packages that this update
+#. obsoletes
+#: ../client/pk-console.c:352
+msgid "Obsoletes"
+msgstr ""
+
+#. TRANSLATORS: details about the update, the vendor URLs
+#. TRANSLATORS: the vendor (e.g. vmware) that is providing the EULA
+#: ../client/pk-console.c:356 ../lib/packagekit-glib2/pk-task-text.c:209
+msgid "Vendor"
+msgstr ""
+
+#. TRANSLATORS: details about the update, the bugzilla URLs
+#: ../client/pk-console.c:360
+msgid "Bugzilla"
+msgstr ""
+
+#. TRANSLATORS: details about the update, the CVE URLs
+#: ../client/pk-console.c:364
+msgid "CVE"
+msgstr ""
+
+#. TRANSLATORS: details about the update, if the package requires a restart
+#: ../client/pk-console.c:368
+msgid "Restart"
+msgstr ""
+
+#. TRANSLATORS: details about the update, any description of the update
+#: ../client/pk-console.c:372
+msgid "Update text"
+msgstr ""
+
+#. TRANSLATORS: details about the update, the changelog for the package
+#: ../client/pk-console.c:376
+msgid "Changes"
+msgstr ""
+
+#. TRANSLATORS: details about the update, the ongoing state of the update
+#: ../client/pk-console.c:380
+msgid "State"
+msgstr ""
+
+#. TRANSLATORS: details about the update, date the update was issued
+#: ../client/pk-console.c:384
+msgid "Issued"
+msgstr ""
+
+#. TRANSLATORS: details about the update, date the update was updated
+#. TRANSLATORS: The action of the package, in past tense
+#: ../client/pk-console.c:388 ../lib/packagekit-glib2/pk-console-shared.c:515
+msgid "Updated"
+msgstr ""
+
+#. TRANSLATORS: if the repo is enabled
+#: ../client/pk-console.c:424
+msgid "Enabled"
+msgstr ""
+
+#. TRANSLATORS: if the repo is disabled
+#: ../client/pk-console.c:427
+msgid "Disabled"
+msgstr ""
+
+#. TRANSLATORS: a package requires the system to be restarted
+#: ../client/pk-console.c:459
+msgid "System restart required by:"
+msgstr ""
+
+#. TRANSLATORS: a package requires the session to be restarted
+#: ../client/pk-console.c:462
+msgid "Session restart required:"
+msgstr ""
+
+#. TRANSLATORS: a package requires the system to be restarted due to a
+#. security update
+#: ../client/pk-console.c:465
+msgid "System restart (security) required by:"
+msgstr ""
+
+#. TRANSLATORS: a package requires the session to be restarted due to a
+#. security update
+#: ../client/pk-console.c:468
+msgid "Session restart (security) required:"
+msgstr ""
+
+#. TRANSLATORS: a package requires the application to be restarted
+#: ../client/pk-console.c:471
+msgid "Application restart required by:"
+msgstr ""
+
+#. TRANSLATORS: This a list of details about the package
+#: ../client/pk-console.c:506
+msgid "Package description"
+msgstr ""
+
+#. TRANSLATORS: This a message (like a little note that may be of interest)
+#. from the transaction
+#: ../client/pk-console.c:537
+msgid "Message:"
+msgstr ""
+
+#. TRANSLATORS: This where the package has no files
+#: ../client/pk-console.c:558
+msgid "No files"
+msgstr ""
+
+#. TRANSLATORS: This a list files contained in the package
+#: ../client/pk-console.c:563
+msgid "Package files"
+msgstr ""
+
+#. TRANSLATORS: the percentage complete of the transaction
+#: ../client/pk-console.c:631
+msgid "Percentage"
+msgstr ""
+
+#. TRANSLATORS: the status of the transaction (e.g. downloading)
+#: ../client/pk-console.c:649
+msgid "Status"
+msgstr ""
+
+#. TRANSLATORS: the results from the transaction
+#: ../client/pk-console.c:678
+msgid "Results:"
+msgstr ""
+
+#. TRANSLATORS: we failed to get any results, which is pretty fatal in my book
+#: ../client/pk-console.c:685
+msgid "Fatal error"
+msgstr ""
+
+#. TRANSLATORS: the user asked to update everything, but there is nothing that
+#. can be updated
+#: ../client/pk-console.c:701
+msgid "There are no packages to update."
+msgstr ""
+
+#. TRANSLATORS: the transaction failed in a way we could not expect
+#: ../client/pk-console.c:704
+#: ../contrib/command-not-found/pk-command-not-found.c:639
+msgid "The transaction failed"
+msgstr ""
+
+#. TRANSLATORS: print a message when there are no updates
+#: ../client/pk-console.c:733
+msgid "There are no updates available at this time."
+msgstr ""
+
+#: ../client/pk-console.c:756
+msgid "There are no upgrades available at this time."
+msgstr ""
+
+#. TRANSLATORS: a package needs to restart their system
+#: ../client/pk-console.c:823
+msgid "Please restart the computer to complete the update."
+msgstr ""
+
+#. TRANSLATORS: a package needs to restart the session
+#: ../client/pk-console.c:826
+msgid "Please logout and login to complete the update."
+msgstr ""
+
+#. TRANSLATORS: a package needs to restart their system (due to security)
+#: ../client/pk-console.c:829
+msgid ""
+"Please restart the computer to complete the update as important security "
+"updates have been installed."
+msgstr ""
+
+#. TRANSLATORS: a package needs to restart the session (due to security)
+#: ../client/pk-console.c:832
+msgid ""
+"Please logout and login to complete the update as important security updates"
+" have been installed."
+msgstr ""
+
+#. TRANSLATORS: The user used 'pkcon install dave.rpm' rather than 'pkcon
+#. install-local dave.rpm'
+#: ../client/pk-console.c:858
+#, 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:866
+#, c-format
+msgid "This tool could not find any available package: %s"
+msgstr ""
+
+#. TRANSLATORS: There was an error getting the list of files for the package.
+#. The detailed error follows
+#: ../client/pk-console.c:894
+#, c-format
+msgid "This tool could not find the installed package: %s"
+msgstr ""
+
+#. TRANSLATORS: There was an error getting the list of files for the package.
+#. The detailed error follows
+#: ../client/pk-console.c:922 ../client/pk-console.c:950
+#, c-format
+msgid "This tool could not find the package: %s"
+msgstr ""
+
+#. TRANSLATORS: There was an error getting the list of files for the package.
+#. The detailed error follows
+#. TRANSLATORS: There was an error getting the dependencies for the package.
+#. The detailed error follows
+#. TRANSLATORS: There was an error getting the details about the package. The
+#. detailed error follows
+#. TRANSLATORS: The package name was not found in any software sources. The
+#. detailed error follows
+#: ../client/pk-console.c:978 ../client/pk-console.c:1006
+#: ../client/pk-console.c:1034 ../client/pk-console.c:1062
+#: ../client/pk-console.c:1090
+#, c-format
+msgid "This tool could not find all the packages: %s"
+msgstr ""
+
+#. TRANSLATORS: This is when the daemon crashed, and we are up shit creek
+#. without a paddle
+#: ../client/pk-console.c:1119
+msgid "The daemon crashed mid-transaction!"
+msgstr ""
+
+#. TRANSLATORS: This is the header to the --help menu
+#: ../client/pk-console.c:1153
+msgid "PackageKit Console Interface"
+msgstr ""
+
+#. these are commands we can use with pkcon
+#: ../client/pk-console.c:1155
+msgid "Subcommands:"
+msgstr ""
+
+#. TRANSLATORS: we keep a database updated with the time that an action was
+#. last executed
+#: ../client/pk-console.c:1234
+msgid "Failed to get the time since this action was last completed"
+msgstr ""
+
+#. TRANSLATORS: command line argument, just show the version string
+#: ../client/pk-console.c:1275 ../client/pk-monitor.c:371
+msgid "Show the program version and exit"
+msgstr ""
+
+#. TRANSLATORS: command line argument, use a filter to narrow down results
+#: ../client/pk-console.c:1278
+msgid "Set the filter, e.g. installed"
+msgstr ""
+
+#. TRANSLATORS: command line argument, use a non-standard install prefix
+#: ../client/pk-console.c:1281
+msgid "Set the install root, e.g. '/' or '/mnt/ltsp'"
+msgstr ""
+
+#. TRANSLATORS: command line argument, work asynchronously
+#: ../client/pk-console.c:1284
+msgid "Exit without waiting for actions to complete"
+msgstr ""
+
+#. command line argument, do we ask questions
+#: ../client/pk-console.c:1287
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:525
+msgid "Install the packages without asking for confirmation"
+msgstr ""
+
+#. TRANSLATORS: command line argument, this command is not a priority
+#: ../client/pk-console.c:1290
+msgid "Run the command using idle network bandwidth and also using less power"
+msgstr ""
+
+#. TRANSLATORS: command line argument, just output without fancy formatting
+#: ../client/pk-console.c:1293
+msgid ""
+"Print to screen a machine readable output, rather than using animated "
+"widgets"
+msgstr ""
+
+#. TRANSLATORS: command line argument, just output without fancy formatting
+#: ../client/pk-console.c:1296
+msgid "The maximum metadata cache age. Use -1 for 'never'."
+msgstr ""
+
+#. TRANSLATORS: we failed to contact the daemon
+#: ../client/pk-console.c:1333
+msgid "Failed to contact PackageKit"
+msgstr ""
+
+#. TRANSLATORS: The user specified an incorrect filter
+#: ../client/pk-console.c:1381
+msgid "The proxy could not be set"
+msgstr ""
+
+#. TRANSLATORS: The user specified an incorrect filter
+#: ../client/pk-console.c:1393
+msgid "The install root could not be set"
+msgstr ""
+
+#. TRANSLATORS: The user specified an incorrect filter
+#: ../client/pk-console.c:1405
+msgid "The filter specified was invalid"
+msgstr ""
+
+#. TRANSLATORS: a search type can be name, details, file, etc
+#: ../client/pk-console.c:1424
+msgid "A search type is required, e.g. name"
+msgstr ""
+
+#. TRANSLATORS: the user needs to provide a search term
+#: ../client/pk-console.c:1431 ../client/pk-console.c:1443
+#: ../client/pk-console.c:1455 ../client/pk-console.c:1467
+msgid "A search term is required"
+msgstr ""
+
+#. TRANSLATORS: the search type was provided, but invalid
+#: ../client/pk-console.c:1477
+msgid "Invalid search type"
+msgstr ""
+
+#. TRANSLATORS: the user did not specify what they wanted to install
+#: ../client/pk-console.c:1483
+msgid "A package name to install is required"
+msgstr ""
+
+#. TRANSLATORS: the user did not specify what they wanted to install
+#: ../client/pk-console.c:1492
+msgid "A filename to install is required"
+msgstr ""
+
+#. TRANSLATORS: geeky error, 99.9999% of users won't see this
+#: ../client/pk-console.c:1503
+msgid "A type, key_id and package_id are required"
+msgstr ""
+
+#. TRANSLATORS: the user did not specify what they wanted to remove
+#: ../client/pk-console.c:1514
+msgid "A package name to remove is required"
+msgstr ""
+
+#. TRANSLATORS: the user did not specify anything about what to download or
+#. where
+#: ../client/pk-console.c:1523
+msgid "A destination directory and the package names to download are required"
+msgstr ""
+
+#. TRANSLATORS: the directory does not exist, so we can't continue
+#: ../client/pk-console.c:1530
+msgid "Directory not found"
+msgstr ""
+
+#. TRANSLATORS: geeky error, 99.9999% of users won't see this
+#: ../client/pk-console.c:1539
+msgid "A licence identifier (eula-id) is required"
+msgstr ""
+
+#. TRANSLATORS: geeky error, 99.9999% of users won't see this
+#: ../client/pk-console.c:1550
+msgid "A transaction identifier (tid) is required"
+msgstr ""
+
+#. TRANSLATORS: The user did not specify a package name
+#: ../client/pk-console.c:1571
+msgid "A package name to resolve is required"
+msgstr ""
+
+#. TRANSLATORS: The user did not specify a repository (software source) name
+#: ../client/pk-console.c:1582 ../client/pk-console.c:1593
+msgid "A repository name is required"
+msgstr ""
+
+#. TRANSLATORS: The user didn't provide any data
+#: ../client/pk-console.c:1604
+msgid "A repo name, parameter and value are required"
+msgstr ""
+
+#. TRANSLATORS: The user didn't specify what action to use
+#: ../client/pk-console.c:1621
+msgid "An action, e.g. 'update-system' is required"
+msgstr ""
+
+#. TRANSLATORS: The user specified an invalid action
+#: ../client/pk-console.c:1628
+msgid "A correct role is required"
+msgstr ""
+
+#. TRANSLATORS: The user did not provide a package name
+#. TRANSLATORS: This is when the user fails to supply the package name
+#: ../client/pk-console.c:1638 ../client/pk-console.c:1652
+#: ../client/pk-console.c:1661 ../client/pk-console.c:1681
+#: ../client/pk-console.c:1690 ../client/pk-generate-pack.c:314
+msgid "A package name is required"
+msgstr ""
+
+#. TRANSLATORS: each package "provides" certain things, e.g. mime(gstreamer-
+#. decoder-mp3), the user didn't specify it
+#: ../client/pk-console.c:1670
+msgid "A package provide string is required"
+msgstr ""
+
+#. TRANSLATORS: The user did not provide a distro name
+#: ../client/pk-console.c:1714
+msgid "A distribution name is required"
+msgstr ""
+
+#. TRANSLATORS: The user did not provide an upgrade type
+#: ../client/pk-console.c:1720
+msgid "An upgrade type is required, e.g. 'minimal', 'default' or 'complete'"
+msgstr ""
+
+#. TRANSLATORS: The user tried to use an unsupported option on the command
+#. line
+#: ../client/pk-console.c:1770
+#, c-format
+msgid "Option '%s' is not supported"
+msgstr ""
+
+#. TRANSLATORS: Generic failure of what they asked to do
+#: ../client/pk-console.c:1780
+msgid "Command failed"
+msgstr ""
+
+#. TRANSLATORS: we can exclude certain packages (glibc) when we know they'll
+#. exist on the target
+#: ../client/pk-generate-pack.c:253
+msgid "Set the file name of dependencies to be excluded"
+msgstr ""
+
+#. TRANSLATORS: the output location
+#: ../client/pk-generate-pack.c:256
+msgid ""
+"The output file or directory (the current directory is used if omitted)"
+msgstr ""
+
+#. TRANSLATORS: put a list of packages in the pack
+#: ../client/pk-generate-pack.c:259
+msgid "The package to be put into the service pack"
+msgstr ""
+
+#. TRANSLATORS: put all pending updates in the pack
+#: ../client/pk-generate-pack.c:262
+msgid "Put all updates available in the service pack"
+msgstr ""
+
+#. TRANSLATORS: This is when the user fails to supply the correct arguments
+#: ../client/pk-generate-pack.c:298
+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:306
+msgid "Both options selected."
+msgstr ""
+
+#. TRANSLATORS: This is when the user fails to supply the output
+#: ../client/pk-generate-pack.c:322
+msgid "A output directory or file name is required"
+msgstr ""
+
+#. TRANSLATORS: This is when the daemon is not-installed/broken and fails to
+#. startup
+#: ../client/pk-generate-pack.c:340
+msgid "The daemon failed to startup"
+msgstr ""
+
+#. TRANSLATORS: This is when the backend doesn't have the capability to get-
+#. depends
+#. TRANSLATORS: This is when the backend doesn't have the capability to
+#. download
+#: ../client/pk-generate-pack.c:351 ../client/pk-generate-pack.c:357
+msgid "The package manager cannot perform this type of operation."
+msgstr ""
+
+#. TRANSLATORS: This is when the distro didn't include libarchive support into
+#. PK
+#: ../client/pk-generate-pack.c:364
+msgid ""
+"Service packs cannot be created as PackageKit was not built with libarchive "
+"support."
+msgstr ""
+
+#. TRANSLATORS: the user specified an absolute path, but didn't get the
+#. extension correct
+#: ../client/pk-generate-pack.c:375
+msgid "If specifying a file, the service pack name must end with"
+msgstr ""
+
+#. TRANSLATORS: This is when file already exists
+#: ../client/pk-generate-pack.c:391
+msgid "A pack with the same name already exists, do you want to overwrite it?"
+msgstr ""
+
+#. TRANSLATORS: This is when the pack was not overwritten
+#: ../client/pk-generate-pack.c:394
+msgid "The pack was not overwritten."
+msgstr ""
+
+#. TRANSLATORS: This is when the temporary directory cannot be created, the
+#. directory name follows
+#: ../client/pk-generate-pack.c:407
+msgid "Failed to create directory:"
+msgstr ""
+
+#. TRANSLATORS: This is when the list of packages from the remote computer
+#. cannot be opened
+#: ../client/pk-generate-pack.c:419
+msgid "Failed to open package list."
+msgstr ""
+
+#. TRANSLATORS: The package name is being matched up to available packages
+#: ../client/pk-generate-pack.c:428
+msgid "Finding package name."
+msgstr ""
+
+#. TRANSLATORS: This is when the package cannot be found in any software
+#. source. The detailed error follows
+#: ../client/pk-generate-pack.c:432
+#, 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:440
+msgid "Creating service pack..."
+msgstr ""
+
+#. TRANSLATORS: we succeeded in making the file
+#: ../client/pk-generate-pack.c:455
+#, c-format
+msgid "Service pack created '%s'"
+msgstr ""
+
+#. TRANSLATORS: we failed to make te file
+#: ../client/pk-generate-pack.c:460
+#, c-format
+msgid "Failed to create '%s': %s"
+msgstr ""
+
+#: ../client/pk-monitor.c:284
+msgid "Failed to get daemon state"
+msgstr ""
+
+#: ../client/pk-monitor.c:349
+msgid "Failed to get properties"
+msgstr ""
+
+#. TRANSLATORS: this is a program that monitors PackageKit
+#: ../client/pk-monitor.c:387
+msgid "PackageKit Monitor"
+msgstr ""
+
+#. TRANSLATORS: when we are getting data from the daemon
+#: ../contrib/browser-plugin/pk-plugin-install.c:499
+msgid "Getting package information..."
+msgstr ""
+
+#. TRANSLATORS: run an applicaiton
+#: ../contrib/browser-plugin/pk-plugin-install.c:505
+#, c-format
+msgid "Run %s"
+msgstr ""
+
+#. TRANSLATORS: show the installed version of a package
+#: ../contrib/browser-plugin/pk-plugin-install.c:511
+msgid "Installed version"
+msgstr ""
+
+#. TRANSLATORS: run the application now
+#: ../contrib/browser-plugin/pk-plugin-install.c:519
+#, c-format
+msgid "Run version %s now"
+msgstr ""
+
+#. TRANSLATORS: run the application now
+#: ../contrib/browser-plugin/pk-plugin-install.c:525
+msgid "Run now"
+msgstr ""
+
+#. TRANSLATORS: update to a new version of the package
+#: ../contrib/browser-plugin/pk-plugin-install.c:531
+#, c-format
+msgid "Update to version %s"
+msgstr ""
+
+#. TRANSLATORS: To install a package
+#: ../contrib/browser-plugin/pk-plugin-install.c:537
+#, c-format
+msgid "Install %s now"
+msgstr ""
+
+#. TRANSLATORS: the version of the package
+#: ../contrib/browser-plugin/pk-plugin-install.c:540
+msgid "Version"
+msgstr ""
+
+#. TRANSLATORS: noting found, so can't install
+#: ../contrib/browser-plugin/pk-plugin-install.c:545
+msgid "No packages found for your system"
+msgstr ""
+
+#. TRANSLATORS: package is being installed
+#: ../contrib/browser-plugin/pk-plugin-install.c:550
+msgid "Installing..."
+msgstr ""
+
+#. TRANSLATORS: downloading repo data so we can search
+#: ../contrib/command-not-found/pk-command-not-found.c: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: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: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: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:444
+msgid "Failed to search for file"
+msgstr ""
+
+#. TRANSLATORS: the transaction failed in a way we could not expect
+#: ../contrib/command-not-found/pk-command-not-found.c:456
+msgid "Getting the list of files failed"
+msgstr ""
+
+#. TRANSLATORS: we failed to launch the executable, the error follows
+#: ../contrib/command-not-found/pk-command-not-found.c:602
+msgid "Failed to launch:"
+msgstr ""
+
+#. TRANSLATORS: we failed to install the package
+#: ../contrib/command-not-found/pk-command-not-found.c:630
+msgid "Failed to install packages"
+msgstr ""
+
+#. TRANSLATORS: tool that gets called when the command is not found
+#: ../contrib/command-not-found/pk-command-not-found.c:706
+msgid "PackageKit Command Not Found"
+msgstr ""
+
+#. TRANSLATORS: the prefix of all the output telling the user
+#. * why it's not executing. NOTE: this is lowercase to mimic
+#. * the style of bash itself -- apologies
+#: ../contrib/command-not-found/pk-command-not-found.c:739
+msgid "command not found"
+msgstr ""
+
+#. TRANSLATORS: tell the user what we think the command is
+#: ../contrib/command-not-found/pk-command-not-found.c:757
+msgid "Similar command is:"
+msgstr ""
+
+#. TRANSLATORS: Ask the user if we should run the similar command
+#: ../contrib/command-not-found/pk-command-not-found.c:771
+msgid "Run similar command:"
+msgstr ""
+
+#. TRANSLATORS: show the user a list of commands that they could have meant
+#. TRANSLATORS: show the user a list of commands we could run
+#: ../contrib/command-not-found/pk-command-not-found.c:785
+#: ../contrib/command-not-found/pk-command-not-found.c:794
+msgid "Similar commands are:"
+msgstr ""
+
+#. TRANSLATORS: ask the user to choose a file to run
+#: ../contrib/command-not-found/pk-command-not-found.c:801
+msgid "Please choose a command to run"
+msgstr ""
+
+#. TRANSLATORS: tell the user what package provides the command
+#: ../contrib/command-not-found/pk-command-not-found.c:819
+msgid "The package providing this file is:"
+msgstr ""
+
+#. TRANSLATORS: as the user if we want to install a package to provide the
+#. command
+#: ../contrib/command-not-found/pk-command-not-found.c:826
+#, 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:853
+msgid "Packages providing this file are:"
+msgstr ""
+
+#. TRANSLATORS: Show the user a list of packages that they can install to
+#. provide this command
+#: ../contrib/command-not-found/pk-command-not-found.c:863
+msgid "Suitable packages are:"
+msgstr ""
+
+#. get selection
+#. TRANSLATORS: ask the user to choose a file to install
+#: ../contrib/command-not-found/pk-command-not-found.c:872
+msgid "Please choose a package to install"
+msgstr ""
+
+#. TRANSLATORS: we are starting to install the packages
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:195
+msgid "Starting install"
+msgstr ""
+
+#. TRANSLATORS: we couldn't find the package name, non-fatal
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:407
+#, c-format
+msgid "Failed to find the package %s, or already installed: %s"
+msgstr ""
+
+#. command line argument, simulate what would be done, but don't actually do
+#. it
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:516
+msgid ""
+"Don't actually install any packages, only simulate what would be installed"
+msgstr ""
+
+#. command line argument, do we skip packages that depend on the ones
+#. specified
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:519
+msgid "Do not install dependencies of the core packages"
+msgstr ""
+
+#. command line argument, do we operate quietly
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:522
+msgid "Do not display information or progress"
+msgstr ""
+
+#. TRANSLATORS: tool that gets called when the command is not found
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:540
+msgid "PackageKit Debuginfo Installer"
+msgstr ""
+
+#. TRANSLATORS: the use needs to specify a list of package names on the
+#. command line
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:554
+#, c-format
+msgid "ERROR: Specify package names to install."
+msgstr ""
+
+#. TRANSLATORS: we are getting the list of repositories
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:590
+#, c-format
+msgid "Getting sources list"
+msgstr ""
+
+#. TRANSLATORS: operation was not successful
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:600
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:675
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:759
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:803
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:870
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:914
+msgid "FAILED."
+msgstr ""
+
+#. TRANSLATORS: all completed 100%
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:615
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:655
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:690
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:774
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:818
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:885
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:929
+#, c-format
+msgid "OK."
+msgstr ""
+
+#. TRANSLATORS: tell the user what we found
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:618
+#, c-format
+msgid "Found %i enabled and %i disabled sources."
+msgstr ""
+
+#. TRANSLATORS: we're finding repositories that match out pattern
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:625
+#, c-format
+msgid "Finding debugging sources"
+msgstr ""
+
+#. TRANSLATORS: tell the user what we found
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:658
+#, c-format
+msgid "Found %i disabled debuginfo repos."
+msgstr ""
+
+#. TRANSLATORS: we're now enabling all the debug sources we found
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:665
+#, c-format
+msgid "Enabling debugging sources"
+msgstr ""
+
+#. TRANSLATORS: tell the user how many we enabled
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:693
+#, c-format
+msgid "Enabled %i debugging sources."
+msgstr ""
+
+#. TRANSLATORS: we're now finding packages that match in all the repos
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:700
+#, c-format
+msgid "Finding debugging packages"
+msgstr ""
+
+#. TRANSLATORS: we couldn't find the package name, non-fatal
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:712
+#, c-format
+msgid "Failed to find the package %s: %s"
+msgstr ""
+
+#. TRANSLATORS: we couldn't find the debuginfo package name, non-fatal
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:735
+#, c-format
+msgid "Failed to find the debuginfo package %s: %s"
+msgstr ""
+
+#. TRANSLATORS: no debuginfo packages could be found to be installed
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:763
+#, c-format
+msgid "Found no packages to install."
+msgstr ""
+
+#. TRANSLATORS: tell the user we found some packages, and then list them
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:777
+#, c-format
+msgid "Found %i packages:"
+msgstr ""
+
+#. TRANSLATORS: tell the user we are searching for deps
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:793
+#, c-format
+msgid "Finding packages that depend on these packages"
+msgstr ""
+
+#. TRANSLATORS: could not install, detailed error follows
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:806
+#, c-format
+msgid "Could not find dependant packages: %s"
+msgstr ""
+
+#. TRANSLATORS: tell the user we found some more packages
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:822
+#, c-format
+msgid "Found %i extra packages."
+msgstr ""
+
+#. TRANSLATORS: tell the user we found some more packages
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:826
+#, c-format
+msgid "No extra packages required."
+msgstr ""
+
+#. TRANSLATORS: tell the user we found some packages (and deps), and then list
+#. them
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:835
+#, c-format
+msgid "Found %i packages to install:"
+msgstr ""
+
+#. TRANSLATORS: simulate mode is a testing mode where we quit before the
+#. action
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:848
+#, c-format
+msgid "Not installing packages in simulate mode"
+msgstr ""
+
+#. TRANSLATORS: we are now installing the debuginfo packages we found earlier
+#. TRANSLATORS: transaction state, installing packages
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:860
+#: ../lib/packagekit-glib2/pk-console-shared.c:287
+#, c-format
+msgid "Installing packages"
+msgstr ""
+
+#. TRANSLATORS: could not install, detailed error follows
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:873
+#, c-format
+msgid "Could not install packages: %s"
+msgstr ""
+
+#. TRANSLATORS: we are now disabling all debuginfo repos we previously enabled
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:905
+#, c-format
+msgid "Disabling sources previously enabled"
+msgstr ""
+
+#. TRANSLATORS: no debuginfo packages could be found to be installed, detailed
+#. error follows
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:917
+#, c-format
+msgid "Could not disable the debugging sources: %s"
+msgstr ""
+
+#. TRANSLATORS: we disabled all the debugging repos that we enabled before
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:932
+#, c-format
+msgid "Disabled %i debugging sources."
+msgstr ""
+
+#. TRANSLATORS: couldn't open device to write
+#: ../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:71
+msgid "Failed to write to the file"
+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 ""
+
+#. TRANSLATORS: the device could not be found in sysfs
+#: ../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:203
+msgid "Failed to unregister driver"
+msgstr ""
+
+#. TRANSLATORS: we failed to bind the old driver
+#: ../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:261
+msgid "Device path not found"
+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 ""
+
+#: ../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: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: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:315
+msgid "PackageKit Device Reloader"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. TRANSLATORS: we're going to verify the path first
+#: ../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:347
+msgid "Failed to verify device path"
+msgstr ""
+
+#. TRANSLATORS: we're going to try
+#: ../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:366
+msgid "Failed to rebind device"
+msgstr ""
+
+#: ../data/packagekit-catalog.xml.in.h:1
+msgid "PackageKit Catalog"
+msgstr ""
+
+#: ../data/packagekit-package-list.xml.in.h:1
+msgid "PackageKit Package List"
+msgstr ""
+
+#: ../data/packagekit-servicepack.xml.in.h:1
+msgid "PackageKit Service Pack"
+msgstr ""
+
+#: ../lib/packagekit-glib2/pk-console-shared.c:63
+#, 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:189
+msgid "More than one package matches:"
+msgstr ""
+
+#. TRANSLATORS: This finds out which package in the list to use
+#: ../lib/packagekit-glib2/pk-console-shared.c:200
+msgid "Please choose the correct package: "
+msgstr ""
+
+#. TRANSLATORS: This is when the transaction status is not known
+#: ../lib/packagekit-glib2/pk-console-shared.c:255
+msgid "Unknown state"
+msgstr ""
+
+#. TRANSLATORS: transaction state, the daemon is in the process of starting
+#: ../lib/packagekit-glib2/pk-console-shared.c:259
+msgid "Starting"
+msgstr ""
+
+#. TRANSLATORS: transaction state, the transaction is waiting for another to
+#. complete
+#: ../lib/packagekit-glib2/pk-console-shared.c:263
+msgid "Waiting in queue"
+msgstr ""
+
+#. TRANSLATORS: transaction state, just started
+#: ../lib/packagekit-glib2/pk-console-shared.c:267
+msgid "Running"
+msgstr ""
+
+#. TRANSLATORS: transaction state, is querying data
+#: ../lib/packagekit-glib2/pk-console-shared.c:271
+msgid "Querying"
+msgstr ""
+
+#. TRANSLATORS: transaction state, getting data from a server
+#: ../lib/packagekit-glib2/pk-console-shared.c:275
+msgid "Getting information"
+msgstr ""
+
+#. TRANSLATORS: transaction state, removing packages
+#: ../lib/packagekit-glib2/pk-console-shared.c:279
+msgid "Removing packages"
+msgstr ""
+
+#. TRANSLATORS: transaction state, downloading package files
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:283
+#: ../lib/packagekit-glib2/pk-console-shared.c:661
+msgid "Downloading packages"
+msgstr ""
+
+#. TRANSLATORS: transaction state, refreshing internal lists
+#: ../lib/packagekit-glib2/pk-console-shared.c:291
+msgid "Refreshing software list"
+msgstr ""
+
+#. TRANSLATORS: transaction state, installing updates
+#: ../lib/packagekit-glib2/pk-console-shared.c:295
+msgid "Installing updates"
+msgstr ""
+
+#. TRANSLATORS: transaction state, removing old packages, and cleaning config
+#. files
+#: ../lib/packagekit-glib2/pk-console-shared.c:299
+msgid "Cleaning up packages"
+msgstr ""
+
+#. TRANSLATORS: transaction state, obsoleting old packages
+#: ../lib/packagekit-glib2/pk-console-shared.c:303
+msgid "Obsoleting packages"
+msgstr ""
+
+#. TRANSLATORS: transaction state, checking the transaction before we do it
+#: ../lib/packagekit-glib2/pk-console-shared.c:307
+msgid "Resolving dependencies"
+msgstr ""
+
+#. TRANSLATORS: transaction state, checking if we have all the security keys
+#. for the operation
+#: ../lib/packagekit-glib2/pk-console-shared.c:311
+msgid "Checking signatures"
+msgstr ""
+
+#. TRANSLATORS: transaction state, when we return to a previous system state
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:315
+#: ../lib/packagekit-glib2/pk-console-shared.c:621
+msgid "Rolling back"
+msgstr ""
+
+#. TRANSLATORS: transaction state, when we're doing a test transaction
+#: ../lib/packagekit-glib2/pk-console-shared.c:319
+msgid "Testing changes"
+msgstr ""
+
+#. TRANSLATORS: transaction state, when we're writing to the system package
+#. database
+#: ../lib/packagekit-glib2/pk-console-shared.c:323
+msgid "Committing changes"
+msgstr ""
+
+#. TRANSLATORS: transaction state, requesting data from a server
+#: ../lib/packagekit-glib2/pk-console-shared.c:327
+msgid "Requesting data"
+msgstr ""
+
+#. TRANSLATORS: transaction state, all done!
+#: ../lib/packagekit-glib2/pk-console-shared.c:331
+msgid "Finished"
+msgstr ""
+
+#. TRANSLATORS: transaction state, in the process of cancelling
+#: ../lib/packagekit-glib2/pk-console-shared.c:335
+msgid "Cancelling"
+msgstr ""
+
+#. TRANSLATORS: transaction state, downloading metadata
+#: ../lib/packagekit-glib2/pk-console-shared.c:339
+msgid "Downloading repository information"
+msgstr ""
+
+#. TRANSLATORS: transaction state, downloading metadata
+#: ../lib/packagekit-glib2/pk-console-shared.c:343
+msgid "Downloading list of packages"
+msgstr ""
+
+#. TRANSLATORS: transaction state, downloading metadata
+#: ../lib/packagekit-glib2/pk-console-shared.c:347
+msgid "Downloading file lists"
+msgstr ""
+
+#. TRANSLATORS: transaction state, downloading metadata
+#: ../lib/packagekit-glib2/pk-console-shared.c:351
+msgid "Downloading lists of changes"
+msgstr ""
+
+#. TRANSLATORS: transaction state, downloading metadata
+#: ../lib/packagekit-glib2/pk-console-shared.c:355
+msgid "Downloading groups"
+msgstr ""
+
+#. TRANSLATORS: transaction state, downloading metadata
+#: ../lib/packagekit-glib2/pk-console-shared.c:359
+msgid "Downloading update information"
+msgstr ""
+
+#. TRANSLATORS: transaction state, repackaging delta files
+#: ../lib/packagekit-glib2/pk-console-shared.c:363
+msgid "Repackaging files"
+msgstr ""
+
+#. TRANSLATORS: transaction state, loading databases
+#: ../lib/packagekit-glib2/pk-console-shared.c:367
+msgid "Loading cache"
+msgstr ""
+
+#. TRANSLATORS: transaction state, scanning for running processes
+#: ../lib/packagekit-glib2/pk-console-shared.c:371
+msgid "Scanning applications"
+msgstr ""
+
+#. TRANSLATORS: transaction state, generating a list of packages installed on
+#. the system
+#: ../lib/packagekit-glib2/pk-console-shared.c:375
+msgid "Generating package lists"
+msgstr ""
+
+#. TRANSLATORS: transaction state, when we're waiting for the native tools to
+#. exit
+#: ../lib/packagekit-glib2/pk-console-shared.c:379
+msgid "Waiting for package manager lock"
+msgstr ""
+
+#. TRANSLATORS: transaction state, waiting for user to type in a password
+#: ../lib/packagekit-glib2/pk-console-shared.c:383
+msgid "Waiting for authentication"
+msgstr ""
+
+#. TRANSLATORS: transaction state, we are updating the list of processes
+#: ../lib/packagekit-glib2/pk-console-shared.c:387
+msgid "Updating running applications"
+msgstr ""
+
+#. TRANSLATORS: transaction state, we are checking executable files currently
+#. in use
+#: ../lib/packagekit-glib2/pk-console-shared.c:391
+msgid "Checking applications in use"
+msgstr ""
+
+#. TRANSLATORS: transaction state, we are checking for libraries currently in
+#. use
+#: ../lib/packagekit-glib2/pk-console-shared.c:395
+msgid "Checking libraries in use"
+msgstr ""
+
+#. TRANSLATORS: transaction state, we are copying package files before or
+#. after the transaction
+#: ../lib/packagekit-glib2/pk-console-shared.c:399
+msgid "Copying files"
+msgstr ""
+
+#. TRANSLATORS: The type of update
+#: ../lib/packagekit-glib2/pk-console-shared.c:417
+msgid "Trivial"
+msgstr ""
+
+#. TRANSLATORS: The type of update
+#: ../lib/packagekit-glib2/pk-console-shared.c:421
+msgid "Normal"
+msgstr ""
+
+#. TRANSLATORS: The type of update
+#: ../lib/packagekit-glib2/pk-console-shared.c:425
+msgid "Important"
+msgstr ""
+
+#. TRANSLATORS: The type of update
+#: ../lib/packagekit-glib2/pk-console-shared.c:429
+msgid "Security"
+msgstr ""
+
+#. TRANSLATORS: The type of update
+#: ../lib/packagekit-glib2/pk-console-shared.c:433
+msgid "Bug fix "
+msgstr ""
+
+#. TRANSLATORS: The type of update
+#: ../lib/packagekit-glib2/pk-console-shared.c:437
+msgid "Enhancement"
+msgstr ""
+
+#. TRANSLATORS: The type of update
+#: ../lib/packagekit-glib2/pk-console-shared.c:441
+msgid "Blocked"
+msgstr ""
+
+#. TRANSLATORS: The state of a package
+#. TRANSLATORS: The action of the package, in past tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:446
+#: ../lib/packagekit-glib2/pk-console-shared.c:519
+msgid "Installed"
+msgstr ""
+
+#. TRANSLATORS: The state of a package, i.e. not installed
+#: ../lib/packagekit-glib2/pk-console-shared.c:451
+msgid "Available"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:469
+msgid "Downloading"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:473
+msgid "Updating"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in present tense
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:477
+#: ../lib/packagekit-glib2/pk-console-shared.c:597
+msgid "Installing"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in present tense
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:481
+#: ../lib/packagekit-glib2/pk-console-shared.c:593
+msgid "Removing"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:485
+msgid "Cleaning up"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:489
+msgid "Obsoleting"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:493
+msgid "Reinstalling"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in past tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:511
+msgid "Downloaded"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in past tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:523
+msgid "Removed"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in past tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:527
+msgid "Cleaned up"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in past tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:531
+msgid "Obsoleted"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in past tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:535
+msgid "Reinstalled"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:553
+msgid "Unknown role type"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:557
+msgid "Getting dependencies"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:561
+msgid "Getting update details"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:565
+msgid "Getting details"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:569
+msgid "Getting requires"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:573
+msgid "Getting updates"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:577
+msgid "Searching by details"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:581
+msgid "Searching by file"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:585
+msgid "Searching groups"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:589
+msgid "Searching by name"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:601
+msgid "Installing files"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:605
+msgid "Refreshing cache"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:609
+msgid "Updating packages"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:613
+msgid "Updating system"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:617
+msgid "Canceling"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:625
+msgid "Getting repositories"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:629
+msgid "Enabling repository"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:633
+msgid "Setting data"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:637
+msgid "Resolving"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:641
+msgid "Getting file list"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:645
+msgid "Getting provides"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:649
+msgid "Installing signature"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:653
+msgid "Getting packages"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:657
+msgid "Accepting EULA"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:665
+msgid "Getting upgrades"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:669
+msgid "Getting categories"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:673
+msgid "Getting transactions"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:677
+#: ../lib/packagekit-glib2/pk-console-shared.c:681
+msgid "Simulating install"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:685
+msgid "Simulating remove"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:689
+msgid "Simulating update"
+msgstr ""
+
+#. TRANSLATORS: turn on all debugging
+#: ../lib/packagekit-glib2/pk-debug.c:133
+msgid "Show debugging information for all files"
+msgstr ""
+
+#: ../lib/packagekit-glib2/pk-debug.c:201
+msgid "Debugging Options"
+msgstr ""
+
+#: ../lib/packagekit-glib2/pk-debug.c:201
+msgid "Show debugging options"
+msgstr ""
+
+#. TRANSLATORS: ask the user if they are comfortable installing insecure
+#. packages
+#: ../lib/packagekit-glib2/pk-task-text.c:67
+msgid "Do you want to allow installing of unsigned software?"
+msgstr ""
+
+#. TRANSLATORS: tell the user we've not done anything
+#: ../lib/packagekit-glib2/pk-task-text.c:72
+msgid "The unsigned software will not be installed."
+msgstr ""
+
+#. TRANSLATORS: the package repository is signed by a key that is not
+#. recognised
+#: ../lib/packagekit-glib2/pk-task-text.c:121
+msgid "Software source signature required"
+msgstr ""
+
+#. TRANSLATORS: the package repository name
+#: ../lib/packagekit-glib2/pk-task-text.c:127
+msgid "Software source name"
+msgstr ""
+
+#. TRANSLATORS: the key URL
+#: ../lib/packagekit-glib2/pk-task-text.c:130
+msgid "Key URL"
+msgstr ""
+
+#. TRANSLATORS: the username of the key
+#: ../lib/packagekit-glib2/pk-task-text.c:133
+msgid "Key user"
+msgstr ""
+
+#. TRANSLATORS: the key ID, usually a few hex digits
+#: ../lib/packagekit-glib2/pk-task-text.c:136
+msgid "Key ID"
+msgstr ""
+
+#. TRANSLATORS: the key fingerprint, again, yet more hex
+#: ../lib/packagekit-glib2/pk-task-text.c:139
+msgid "Key fingerprint"
+msgstr ""
+
+#. TRANSLATORS: the timestamp (a bit like a machine readable time)
+#: ../lib/packagekit-glib2/pk-task-text.c:142
+msgid "Key Timestamp"
+msgstr ""
+
+#. TRANSLATORS: ask the user if they want to import
+#: ../lib/packagekit-glib2/pk-task-text.c:155
+msgid "Do you accept this signature?"
+msgstr ""
+
+#. TRANSLATORS: tell the user we've not done anything
+#: ../lib/packagekit-glib2/pk-task-text.c:160
+msgid "The signature was not accepted."
+msgstr ""
+
+#. TRANSLATORS: this is another name for a software licence that has to be
+#. read before installing
+#: ../lib/packagekit-glib2/pk-task-text.c:203
+msgid "End user licence agreement required"
+msgstr ""
+
+#. TRANSLATORS: the EULA text itself (long and boring)
+#: ../lib/packagekit-glib2/pk-task-text.c:212
+msgid "Agreement"
+msgstr ""
+
+#. TRANSLATORS: ask the user if they've read and accepted the EULA
+#: ../lib/packagekit-glib2/pk-task-text.c:221
+msgid "Do you accept this agreement?"
+msgstr ""
+
+#. TRANSLATORS: tell the user we've not done anything
+#: ../lib/packagekit-glib2/pk-task-text.c:226
+msgid "The agreement was not accepted."
+msgstr ""
+
+#. TRANSLATORS: the user needs to change media inserted into the computer
+#: ../lib/packagekit-glib2/pk-task-text.c:265
+msgid "Media change required"
+msgstr ""
+
+#. TRANSLATORS: the type, e.g. DVD, CD, etc
+#: ../lib/packagekit-glib2/pk-task-text.c:268
+msgid "Media type"
+msgstr ""
+
+#. TRANSLATORS: the media label, usually like 'disk-1of3'
+#: ../lib/packagekit-glib2/pk-task-text.c:271
+msgid "Media label"
+msgstr ""
+
+#. TRANSLATORS: the media description, usually like 'Fedora 12 disk 5'
+#: ../lib/packagekit-glib2/pk-task-text.c:274
+msgid "Text"
+msgstr ""
+
+#. TRANSLATORS: ask the user to insert the media
+#: ../lib/packagekit-glib2/pk-task-text.c:280
+msgid "Please insert the correct media"
+msgstr ""
+
+#. TRANSLATORS: tell the user we've not done anything as they are lazy
+#: ../lib/packagekit-glib2/pk-task-text.c:285
+msgid "The correct media was not inserted."
+msgstr ""
+
+#. TRANSLATORS: When processing, we might have to remove other dependencies
+#: ../lib/packagekit-glib2/pk-task-text.c:300
+msgid "The following packages have to be removed:"
+msgstr ""
+
+#. TRANSLATORS: When processing, we might have to install other dependencies
+#: ../lib/packagekit-glib2/pk-task-text.c:305
+msgid "The following packages have to be installed:"
+msgstr ""
+
+#. TRANSLATORS: When processing, we might have to update other dependencies
+#: ../lib/packagekit-glib2/pk-task-text.c:310
+msgid "The following packages have to be updated:"
+msgstr ""
+
+#. TRANSLATORS: When processing, we might have to reinstall other dependencies
+#: ../lib/packagekit-glib2/pk-task-text.c:315
+msgid "The following packages have to be reinstalled:"
+msgstr ""
+
+#. TRANSLATORS: When processing, we might have to downgrade other dependencies
+#: ../lib/packagekit-glib2/pk-task-text.c:320
+msgid "The following packages have to be downgraded:"
+msgstr ""
+
+#. TRANSLATORS: ask the user if the proposed changes are okay
+#: ../lib/packagekit-glib2/pk-task-text.c:380
+msgid "Proceed with changes?"
+msgstr ""
+
+#. TRANSLATORS: tell the user we didn't do anything
+#: ../lib/packagekit-glib2/pk-task-text.c:385
+msgid "The transaction did not proceed."
+msgstr ""
+
+#. SECURITY:
+#. - Normal users do not require admin authentication to accept new
+#. licence agreements.
+#. - Change this to 'auth_admin' for environments where users should not
+#. be given the option to make legal decisions.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:7
+msgid "Accept EULA"
+msgstr ""
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h: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"
+msgstr ""
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:10
+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:13
+msgid "Authentication is required to install a signed package"
+msgstr ""
+
+#: ../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:15
+msgid "Authentication is required to refresh the system sources"
+msgstr ""
+
+#: ../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:17
+msgid "Authentication is required to remove packages"
+msgstr ""
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:18
+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 ""
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:21
+msgid "Authentication is required to upgrade the operating system"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users are allowed to cancel their own task without
+#. authentication, but a different user id needs the admin password
+#. to cancel another users task.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:27
+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:34
+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:40
+msgid "Change software source parameters"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users do not need authentication to install signed packages
+#. from signed repositories, as this cannot exploit a system.
+#. - Paranoid users (or parents!) can change this to 'auth_admin' or
+#. 'auth_admin_keep'.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:47
+msgid "Install signed package"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users require admin authentication to install untrusted or
+#. unrecognised packages, as allowing users to do this without a
+#. password would be a massive security hole.
+#. - This is not retained as each package should be authenticated.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:54
+msgid "Install untrusted local file"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users do not require admin authentication to refresh the
+#. cache, as this doesn't actually install or remove software.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:59
+msgid "Refresh system sources"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users require admin authentication to rebind a driver
+#. so that it works after we install firmware.
+#. - This should not be set to 'yes' as unprivileged users could then
+#. try to rebind drivers in use, for instance security authentication
+#. devices.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:67
+msgid "Reload a device"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users require admin authentication to remove packages as
+#. this can make the system unbootable or stop other applications from
+#. working.
+#. - Be sure to close the tool used to remove the packages after the
+#. admin authentication has been obtained, otherwise packages can still
+#. be removed. If this is not possible, change this authentication to
+#. 'auth_admin'.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:77
+msgid "Remove package"
+msgstr ""
+
+#. 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:83
+msgid "Rollback to a previous transaction"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users do not require admin authentication to set the proxy
+#. used for downloading packages.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:88
+msgid "Set network proxy"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users require admin authentication to add signing keys.
+#. - This implies adding an explicit trust, and should not be granted
+#. without a secure authentication.
+#. - This is not kept as each package should be authenticated.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:95
+msgid "Trust a key used for signing packages"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users do not require admin authentication to update the
+#. system as the packages will be signed, and the action is required
+#. to update the system when unattended.
+#. - Changing this to anything other than 'yes' will break unattended
+#. updates.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:103
+msgid "Update packages"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users require admin authentication to upgrade the disto as
+#. this can make the system unbootable or stop other applications from
+#. working.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:109
+msgid "Upgrade System"
+msgstr ""
+
+#. TRANSLATORS: failed due to DBus security
+#: ../src/pk-main.c:87
+msgid "Startup failed due to security policies on this machine."
+msgstr ""
+
+#. TRANSLATORS: only two ways this can fail...
+#: ../src/pk-main.c:89
+msgid "This can happen for two reasons:"
+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 ""
+
+#. 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 ""
+
+#. TRANSLATORS: a backend is the system package tool, e.g. yum, apt
+#: ../src/pk-main.c:200
+msgid "Packaging backend to use, e.g. dummy"
+msgstr ""
+
+#. TRANSLATORS: if we should run in the background
+#: ../src/pk-main.c:203
+msgid "Daemonize and detach from the terminal"
+msgstr ""
+
+#. TRANSLATORS: if we should not monitor how long we are inactive for
+#: ../src/pk-main.c:206
+msgid "Disable the idle timer"
+msgstr ""
+
+#. TRANSLATORS: show version
+#: ../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:212
+msgid "Exit after a small delay"
+msgstr ""
+
+#. TRANSLATORS: exit straight away, used for automatic profiling
+#: ../src/pk-main.c:215
+msgid "Exit after the engine has loaded"
+msgstr ""
+
+#. TRANSLATORS: describing the service that is running
+#: ../src/pk-main.c:230
+msgid "PackageKit service"
+msgstr ""
+
+#. TRANSLATORS: fatal error, dbus is not running
+#: ../src/pk-main.c:267
+msgid "Cannot connect to the system bus"
+msgstr ""
+
+#. TRANSLATORS: cannot register on system bus, unknown reason -- geeky error
+#. follows
+#: ../src/pk-main.c:316
+msgid "Error trying to start:"
+msgstr ""
+
+#: ../src/pk-polkit-action-lookup.c:150
+msgid "To install debugging packages, extra sources need to be enabled"
+msgstr ""
+
+#. 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 ""
+
+#: ../src/pk-polkit-action-lookup.c:176
+msgid "Do not update this package unless you are sure it is safe to do so."
+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 ""
+
+#: ../src/pk-polkit-action-lookup.c:195
+msgid "Do not install this package unless you are sure it is safe to do so."
+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 ""
+
+#. TRANSLATORS: too many packages to list each one
+#: ../src/pk-polkit-action-lookup.c:273
+msgid "Many packages"
+msgstr ""
+
+#. TRANSLATORS: if the transaction is forced to install only trusted packages
+#: ../src/pk-polkit-action-lookup.c:339
+msgid "Only trusted"
+msgstr ""
diff --git a/po/zh_CN.po b/po/zh_CN.po
index ff0a8c6..ce56092 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -8,9 +8,9 @@ msgstr ""
 "Project-Id-Version: PackageKit\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2010-12-13 12:23+0000\n"
-"PO-Revision-Date: 2011-03-04 18:34+0000\n"
+"PO-Revision-Date: 2011-03-22 15:37+0000\n"
 "Last-Translator: hughsie <richard at hughsie.com>\n"
-"Language-Team: LANGUAGE <LL at li.org>\n"
+"Language-Team: Chinese (China) <i18n-zh at googlegroups.com>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
diff --git a/po/zh_TW.po b/po/zh_TW.po
index 6504d1e..7d2813f 100644
--- a/po/zh_TW.po
+++ b/po/zh_TW.po
@@ -8,9 +8,9 @@ msgstr ""
 "Project-Id-Version: PackageKit\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2010-12-13 12:23+0000\n"
-"PO-Revision-Date: 2011-03-04 18:34+0000\n"
+"PO-Revision-Date: 2011-03-22 15:37+0000\n"
 "Last-Translator: zerng07 <pswo10680 at gmail.com>\n"
-"Language-Team: Chinese (Taiwan) <None>\n"
+"Language-Team: Chinese (Taiwan) (http://www.transifex.net/projects/p/freedesktop/team/zh_TW/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
commit c04d6924db938527a88b451b07b853c307def159
Author: Daniel Nicoletti <dantti85-pk at yahoo.com.br>
Date:   Tue May 3 15:13:00 2011 -0300

    HTML: updating the kpackagekit info and adding myself to authors

diff --git a/docs/html/img/author-dantti.png b/docs/html/img/author-dantti.png
new file mode 100644
index 0000000..2549530
Binary files /dev/null and b/docs/html/img/author-dantti.png differ
diff --git a/docs/html/pk-authors.html b/docs/html/pk-authors.html
index 2b1ab7b..725ca39 100644
--- a/docs/html/pk-authors.html
+++ b/docs/html/pk-authors.html
@@ -346,6 +346,22 @@
  </td>
 </tr>
 
+<tr>
+ <td>
+  <img src="img/author-dantti.png" alt=""/><!-- image should be 120px wide -->
+ </td>
+ <td>
+  <h2>Daniel Nicoletti</h2>
+  <p>
+    Daniel is another geeky developer who aims to make computing easier. Graduated at the <a href="http://www.unasp-sp.edu.br">UNASP - Adventist University of Sao Paulo</a> (Brazil) with a degree in Computer Science.
+    Started contributing with PackageKit writting KPackageKit (now renamed to Apper) and later created the aptcc backend.
+  </p>
+  <p>
+   <b>Responsible for: aptcc backend, Apper, packagekit-qt library</b>
+  </p>
+ </td>
+</tr>
+
 </table>
 
 <p>Back to the <a href="index.html">main page</a></p>
diff --git a/docs/html/pk-download.html b/docs/html/pk-download.html
index 715a855..bba5da2 100644
--- a/docs/html/pk-download.html
+++ b/docs/html/pk-download.html
@@ -189,11 +189,11 @@ git clone git://gitorious.org/packagekit/packagekit.git
 git clone git://git.gnome.org/gnome-packagekit
 </pre>
 <p>
-<a href="http://www.kde-apps.org/content/show.php/KPackageKit?content=84745">KPackageKit</a>
-is available from svn in the KDE playground:
+<a href="http://www.kde-apps.org/content/show.php/KPackageKit?content=84745">Apper (was KPackageKit)</a>
+is available from git in the KDE playground:
 </p>
 <pre>
-svn co svn://anonsvn.kde.org/home/kde/trunk/playground/sysadmin/kpackagekit
+git clone git://anongit.kde.org/apper
 </pre>
 <p>
 There are detailed build instructions for different distros available:
commit d1f1916678c4e5e1393366d54968d872ddbd0814
Author: Daniel Nicoletti <dantti85-pk at yahoo.com.br>
Date:   Tue May 3 14:15:06 2011 -0300

    packagekit-qt2: Updating enums and adding UpgradeSystem() method

diff --git a/lib/packagekit-qt2/package.h b/lib/packagekit-qt2/package.h
index 4adc07a..d7424aa 100644
--- a/lib/packagekit-qt2/package.h
+++ b/lib/packagekit-qt2/package.h
@@ -115,7 +115,7 @@ public:
         GroupElectronics,
         GroupCollections,
         GroupVendor,
-        GroupNewest,
+        GroupNewest
     } Group;
     typedef QSet<Group> Groups;
 
@@ -138,8 +138,8 @@ public:
         RestartApplication,
         RestartSession,
         RestartSystem,
-        RestartSecuritySession,
-        RestartSecuritySystem,
+        RestartSecuritySession, /* a library that is being used by this package has been updated for security */
+        RestartSecuritySystem
     } Restart;
 
     /**
diff --git a/lib/packagekit-qt2/signature.h b/lib/packagekit-qt2/signature.h
index be22033..39f787a 100644
--- a/lib/packagekit-qt2/signature.h
+++ b/lib/packagekit-qt2/signature.h
@@ -37,7 +37,7 @@ public:
      */
     typedef enum {
         UnknownType,
-        TypeGpg,
+        TypeGpg
     } Type;
 
     /**
diff --git a/lib/packagekit-qt2/transaction.cpp b/lib/packagekit-qt2/transaction.cpp
index a41a6b4..b87bf7d 100644
--- a/lib/packagekit-qt2/transaction.cpp
+++ b/lib/packagekit-qt2/transaction.cpp
@@ -617,6 +617,11 @@ void Transaction::updateSystem(bool onlyTrusted)
     RUN_TRANSACTION(UpdateSystem(onlyTrusted))
 }
 
+void Transaction::upgradeSystem(const QString &distroId, UpgradeKind kind)
+{
+    RUN_TRANSACTION(UpgradeSystem(distroId, Util::enumToString<Transaction>(kind, "UpgradeKind", "UpgradeKind")))
+}
+
 void Transaction::whatProvides(Transaction::Provides type, const QStringList &search, Transaction::Filters filters)
 {
     RUN_TRANSACTION(WhatProvides(TransactionPrivate::filtersToString(filters), Util::enumToString<Transaction>(type, "Provides", "Provides"), search))
diff --git a/lib/packagekit-qt2/transaction.h b/lib/packagekit-qt2/transaction.h
index 292310b..915851e 100644
--- a/lib/packagekit-qt2/transaction.h
+++ b/lib/packagekit-qt2/transaction.h
@@ -193,7 +193,8 @@ public:
         ErrorPackageDatabaseChanged,
         ErrorProvideTypeNotSupported,
         ErrorInstallRootInvalid,
-        ErrorCannotFetchSources
+        ErrorCannotFetchSources,
+        ErrorCancelledPriority
     } Error;
 
     /**
@@ -209,7 +210,8 @@ public:
         ExitEulaRequired,
         ExitKilled, /* when we forced the cancel, but had to sigkill */
         ExitMediaChangeRequired,
-        ExitNeedUntrusted
+        ExitNeedUntrusted,
+        ExitCancelledPriority
     } Exit;
 
     /**
@@ -348,6 +350,17 @@ public:
     } DistroUpgrade;
 
     /**
+     * Describes the type of distribution upgrade to perform
+     * \sa upgradeSystem()
+     */
+    typedef enum {
+        UnknownUpgradeKind,
+        UpgradeKindMinimal,
+        upgradeKindDefault,
+        upgradeKindComplete
+    } UpgradeKind;
+
+    /**
      * Create a transaction object with a new transaction id
      *
      * The transaction object \b cannot be reused
@@ -924,12 +937,33 @@ public:
      *
      * \p onlyTrusted indicates if this transaction is only allowed to install trusted packages
      *
-     * \note This method emits \sa package()
-     * and \sa changed()
+     * \note This method typically emits
+     * \li package()
+     * \li changed()
      */
     void updateSystem(bool onlyTrusted = true);
 
     /**
+     * Updates the whole system
+     *
+     * This method perfoms a distribution upgrade to the
+     * specified version.
+     *
+     * The \p type of upgrade, e.g. minimal, default or complete.
+     * Minimal upgrades will download the smallest amount of data
+     * before launching a installer.
+     * The default is to download enough data to launch a full
+     * graphical installer, but a complete upgrade will be
+     * required if there is no internet access during install time.
+     *
+     * \note This method typically emits
+     * \li changed()
+     * \li error()
+     * \li package()
+     */
+    void upgradeSystem(const QString &distroId, UpgradeKind kind);
+
+    /**
      * Searchs for a package providing a file/a mimetype
      *
      * \note This method emits \sa package()
commit ea04885f13b91d1dbcf762f2db2b595e38b4e1f6
Merge: 5eb0ee7... b032a9e...
Author: Daniel Nicoletti <dantti85-pk at yahoo.com.br>
Date:   Tue May 3 13:30:49 2011 -0300

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

commit 5eb0ee7357b9ccc3adbfa5de9501c5a220d9d405
Author: Daniel Nicoletti <dantti85-pk at yahoo.com.br>
Date:   Tue May 3 13:27:55 2011 -0300

    packagekit-qt2: The Package crash was apparently a caching error on apper build dir, including docs.

diff --git a/lib/packagekit-qt2/Doxyfile b/lib/packagekit-qt2/Doxyfile
index ae16ab6..78c3337 100644
--- a/lib/packagekit-qt2/Doxyfile
+++ b/lib/packagekit-qt2/Doxyfile
@@ -146,13 +146,6 @@ JAVADOC_AUTOBRIEF      = YES
 
 MULTILINE_CPP_IS_BRIEF = NO
 
-# If the DETAILS_AT_TOP tag is set to YES then Doxygen 
-# will output the detailed description near the top, like JavaDoc.
-# If set to NO, the detailed description appears after the member 
-# documentation.
-
-DETAILS_AT_TOP         = NO
-
 # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented 
 # member inherits the documentation from any documented member that it 
 # re-implements.
diff --git a/lib/packagekit-qt2/daemon.h b/lib/packagekit-qt2/daemon.h
index 46d3bc3..fea58a2 100644
--- a/lib/packagekit-qt2/daemon.h
+++ b/lib/packagekit-qt2/daemon.h
@@ -30,7 +30,7 @@
 namespace PackageKit {
 
 /**
- * \class Daemon client.h Daemon
+ * \class Daemon daemon.h Daemon
  * \author Adrien Bustany \e <madcat at mymadcat.com>
  * \author Daniel Nicoletti \e <dantti85-pk at yahoo.com.br>
  *
@@ -38,10 +38,11 @@ namespace PackageKit {
  *
  * This class holds all the functions enabling the user to interact with the PackageKit daemon.
  *
+ * Most methods are static so that you can just call Daemon::backendName() to get the name of the backend.
+ * 
  * This class is a singleton, its constructor is private. Call Daemon::global() to get
- * an instance of the Daemon object, you only need Daemon::global() when connection to the signals
- * of this class as most methods are static so that you can just call Daemon::backendName() for
- * example.
+ * an instance of the Daemon object, you only need Daemon::global() when connecting to the signals
+ * of this class.
  */
 class DaemonPrivate;
 class Daemon : public QObject
@@ -64,6 +65,7 @@ public:
 
     /**
      * Describes the authorization result
+     * \sa canAuthorize()
      */
     typedef enum {
         UnknownAuthorize,
@@ -77,6 +79,7 @@ public:
      *
      * The Daemon class is a singleton, you can call this method several times,
      * a single Daemon object will exist.
+     * Use this only when connecting to this class signals
      */
     static Daemon* global();
 
@@ -106,12 +109,12 @@ public:
     static QString backendAuthor();
 
     /**
-     * Returns the filters supported by the current backend
+     * Returns the package filters supported by the current backend
      */
     static Transaction::Filters filters();
 
     /**
-     * Returns the groups supported by the current backend
+     * Returns the package groups supported by the current backend
      */
     static Package::Groups groups();
 
@@ -152,12 +155,13 @@ public:
 
     /**
      * \brief creates a new transaction path
+     * 
      * This function register a new DBus path on PackageKit
-     * allowing a \c Transaction object to be created,
-     * unless you want to know the transaction id
-     * before creating the \c Transaction this function
-     * is not useful since passing a NULL string (QString())
-     * when contructing the \c Transaction object will
+     * allowing a \c Transaction object to be created.
+     * 
+     * \note Unless you want to know the transaction id
+     * before creating the \c Transaction object this function
+     * is not useful as simply creating a \c Transaction object will
      * automatically create this path.
      */
     static QString getTid();
@@ -169,7 +173,7 @@ public:
 
     /**
      * Convenience function
-     * Returns the list of current transactions objects
+     * Returns the list of current transactions as \c Transaction objects
      *
      * You must delete these yourself or pass a
      * \p parent for these comming transactions
@@ -194,15 +198,27 @@ public:
      *
      * \sa Transaction::setHints
      */
-    static void setHints(const QString &hints);
     static void setHints(const QStringList &hints);
 
+    /**
+     * Convenience function to set global hints
+     * \sa setHints(const QStringList &hints)
+     */
+    static void setHints(const QString &hints);
+
+    /**
+     * This method returns the current hints
+     */
     static QStringList hints();
 
     /**
      * Sets a proxy to be used for all the network operations
      */
     static Transaction::InternalError setProxy(const QString &http_proxy, const QString &ftp_proxy);
+
+    /**
+     * Sets a proxy to be used for all the network operations
+     */
     static Transaction::InternalError setProxy(const QString &http_proxy, const QString &https_proxy, const QString &ftp_proxy, const QString &socks_proxy, const QString &no_proxy, const QString &pac);
 
     /**
diff --git a/lib/packagekit-qt2/package.cpp b/lib/packagekit-qt2/package.cpp
index 80830bd..a61edfd 100644
--- a/lib/packagekit-qt2/package.cpp
+++ b/lib/packagekit-qt2/package.cpp
@@ -122,6 +122,7 @@ Package::~Package()
     if (d->updateDetails) {
         delete d->updateDetails;
     }
+    delete d;
 }
 
 QString Package::id() const
diff --git a/lib/packagekit-qt2/package.h b/lib/packagekit-qt2/package.h
index 6a9ee94..4adc07a 100644
--- a/lib/packagekit-qt2/package.h
+++ b/lib/packagekit-qt2/package.h
@@ -142,6 +142,9 @@ public:
         RestartSecuritySystem,
     } Restart;
 
+    /**
+     * Constructs package
+     */
     Package(const QString &packageId, Info info = UnknownInfo, const QString &summary = QString());
 
     /**
@@ -150,7 +153,7 @@ public:
     Package(const Package &other);
 
     /**
-     * Constructs a copy of other.
+     * Constructs an invalid package.
      */
     Package();
 
@@ -198,68 +201,67 @@ public:
 
     /**
      * Checks weither the package has details or not
-     * \sa Transaction::getDetails
-     * \sa Package::details
+     * \sa Transaction::getDetails()
     */
     bool hasDetails() const;
 
     /**
      * Returns the package's license
-     * \note this will only return a valid value if \sa hasDetails() is true
+     * \note this will only return a valid value if hasDetails() returns true
      */
     QString license() const;
 
     /**
      * Define the package's license
-     * \note this will make \sa hasDetails() return true
+     * \note this will make hasDetails() return true
      */
     void setLicense(const QString &license);
 
     /**
      * Returns the package's group (for example Multimedia, Editors...)
-     * \note this will only return a valid value if \sa hasDetails() is true
+     * \note this will only return a valid value if hasDetails() returns true
      */
     Group group() const;
 
     /**
      * Define the package's group
-     * \note this will make \sa hasDetails() return true
+     * \note this will make hasDetails() return true
      */
     void setGroup(Group group);
 
     /**
      * Returns the package's long description
-     * \note this will only return a valid value if \sa hasDetails() is true
+     * \note this will only return a valid value if hasDetails() returns true
      */
     QString description() const;
 
     /**
      * Define the package's long description
-     * \note this will make \sa hasDetails() return true
+     * \note this will make hasDetails() return true
      */
     void setDescription(const QString &description);
 
     /**
      * Returns the software's homepage url
-     * \note this will only return a valid value if \sa hasDetails() is true
+     * \note this will only return a valid value if hasDetails() returns true
      */
     QString url() const;
 
     /**
      * Define the package's url
-     * \note this will make \sa hasDetails() return true
+     * \note this will make hasDetails() return true
      */
     void setUrl(const QString &url);
 
     /**
      * Returns the package's size
-     * \note this will only return a valid value if \sa hasDetails() is true
+     * \note this will only return a valid value if hasDetails() returns true
      */
     qulonglong size() const;
 
     /**
      * Define the package's size
-     * \note this will make \sa hasDetails() return true
+     * \note this will make hasDetails() return true
      */
     void setSize(qulonglong size);
 
@@ -270,133 +272,133 @@ public:
 
     /**
      * Returns the package list of packages that will be updated by updating this package
-     * \note this will only return a valid value if \sa hasUpdateDetails() is true
+     * \note this will only return a valid value if hasUpdateDetails() returns true
      */
     QList<Package> updates() const;
 
     /**
      * Define the list of packages that will be updated by updating this package
-     * \note this will make \sa hasUpdateDetails() return true
+     * \note this will make hasUpdateDetails() return true
      */
     void setUpdates(const QList<Package> &updates);
 
     /**
      * Returns the package list of packages that will be obsoleted by this update
-     * \note this will only return a valid value if \sa hasUpdateDetails() is true
+     * \note this will only return a valid value if hasUpdateDetails() returns true
      */
     QList<Package> obsoletes() const;
 
     /**
      * Define the list of packages that will be obsoleted by updating this package
-     * \note this will make \sa hasUpdateDetails() return true
+     * \note this will make hasUpdateDetails() return true
      */
     void setObsoletes(const QList<Package> &obsoletes);
 
     /**
      * Returns the verdor URL of this update
-     * \note this will only return a valid value if \sa hasUpdateDetails() is true
+     * \note this will only return a valid value if hasUpdateDetails() returns true
      */
     QString vendorUrl() const;
 
     /**
      * Define the vendor URL
-     * \note this will make \sa hasUpdateDetails() return true
+     * \note this will make hasUpdateDetails() return true
      */
     void setVendorUrl(const QString &vendorUrl);
 
     /**
      * Returns the bugzilla URL of this update
-     * \note this will only return a valid value if \sa hasUpdateDetails() is true
+     * \note this will only return a valid value if hasUpdateDetails() returns true
      */
     QString bugzillaUrl() const;
 
     /**
      * Define the bugzilla URL
-     * \note this will make \sa hasUpdateDetails() return true
+     * \note this will make hasUpdateDetails() return true
      */
     void setBugzillaUrl(const QString &bugzillaUrl);
 
     /**
      * Returns the CVE (Common Vulnerabilities and Exposures) URL of this update
-     * \note this will only return a valid value if \sa hasUpdateDetails() is true
+     * \note this will only return a valid value if hasUpdateDetails() returns true
      */
     QString cveUrl() const;
 
     /**
      * Define the CVE (Common Vulnerabilities and Exposures) URL
-     * \note this will make \sa hasUpdateDetails() return true
+     * \note this will make hasUpdateDetails() return true
      */
     void setCveUrl(const QString &cveUrl);
 
     /**
      * Returns the what kind of restart will be required after this update
-     * \note this will only return a valid value if \sa hasUpdateDetails() is true
+     * \note this will only return a valid value if hasUpdateDetails() returns true
      */
     Package::Restart restart() const;
 
     /**
      * Define the restart type
-     * \note this will make \sa hasUpdateDetails() return true
+     * \note this will make hasUpdateDetails() return true
      */
     void setRestart(Package::Restart restart);
 
     /**
      * Returns the update description's
-     * \note this will only return a valid value if \sa hasUpdateDetails() is true
+     * \note this will only return a valid value if hasUpdateDetails() returns true
      */
     QString updateText() const;
 
     /**
      * Define the update description's
-     * \note this will make \sa hasUpdateDetails() return true
+     * \note this will make hasUpdateDetails() return true
      */
     void setUpdateText(const QString &updateText);
 
     /**
      * Returns the update changelog's
-     * \note this will only return a valid value if \sa hasUpdateDetails() is true
+     * \note this will only return a valid value if hasUpdateDetails() returns true
      */
     QString changelog() const;
 
     /**
      * Define the update changelog's
-     * \note this will make \sa hasUpdateDetails() return true
+     * \note this will make hasUpdateDetails() return true
      */
     void setChangelog(const QString &changelog);
 
     /**
      * Returns the category of the update, eg. stable or testing
-     * \note this will only return a valid value if \sa hasUpdateDetails() is true
+     * \note this will only return a valid value if hasUpdateDetails() returns true
      */
     UpdateState state() const;
 
     /**
      * Define the update changelog's
-     * \note this will make \sa hasUpdateDetails() return true
+     * \note this will make hasUpdateDetails() return true
      */
     void setState(UpdateState state);
 
     /**
      * Returns the date and time when this update was first issued
-     * \note this will only return a valid value if \sa hasUpdateDetails() is true
+     * \note this will only return a valid value if hasUpdateDetails() returns true
      */
     QDateTime issued() const;
 
     /**
      * Define the date and time when this update was first issued
-     * \note this will make \sa hasUpdateDetails() return true
+     * \note this will make hasUpdateDetails() return true
      */
     void setIssued(const QDateTime &issued);
 
     /**
      * Returns the date and time when this updated was updated
-     * \note this will only return a valid value if \sa hasUpdateDetails() is true
+     * \note this will only return a valid value if hasUpdateDetails() returns true
      */
     QDateTime updated() const;
 
     /**
      * Define the date and time when this updated was updated
-     * \note this will make \sa hasUpdateDetails() return true
+     * \note this will make hasUpdateDetails() return true
      */
     void setUpdated(const QDateTime &updated);
 
diff --git a/lib/packagekit-qt2/transaction.cpp b/lib/packagekit-qt2/transaction.cpp
index 803d4c1..a41a6b4 100644
--- a/lib/packagekit-qt2/transaction.cpp
+++ b/lib/packagekit-qt2/transaction.cpp
@@ -352,7 +352,7 @@ void Transaction::downloadPackages(const QList<Package> &packages, bool storeInC
     RUN_TRANSACTION(DownloadPackages(storeInCache, Util::packageListToPids(packages)))
 }
 
-void Transaction::downloadPackages(const Package &package, bool storeInCache)
+void Transaction::downloadPackage(const Package &package, bool storeInCache)
 {
     downloadPackages(QList<Package>() << package, storeInCache);
 }
@@ -425,14 +425,14 @@ void Transaction::getRequires(const Package &package, Transaction::Filters filte
     getRequires(QList<Package>() << package, filters, recursive);
 }
 
-void Transaction::getUpdateDetail(const QList<Package> &packages)
+void Transaction::getUpdatesDetails(const QList<Package> &packages)
 {
     RUN_TRANSACTION(GetUpdateDetail(Util::packageListToPids(packages)))
 }
 
 void Transaction::getUpdateDetail(const Package &package)
 {
-    getUpdateDetail(QList<Package>() << package);
+    getUpdatesDetails(QList<Package>() << package);
 }
 
 void Transaction::getUpdates(Transaction::Filters filters)
@@ -450,7 +450,7 @@ void Transaction::installFiles(const QStringList &files, bool onlyTrusted)
     RUN_TRANSACTION(InstallFiles(onlyTrusted, files))
 }
 
-void Transaction::installFiles(const QString &file, bool onlyTrusted)
+void Transaction::installFile(const QString &file, bool onlyTrusted)
 {
     installFiles(QStringList() << file, onlyTrusted);
 }
@@ -460,7 +460,7 @@ void Transaction::installPackages(const QList<Package> &packages, bool onlyTrust
     RUN_TRANSACTION(InstallPackages(onlyTrusted, Util::packageListToPids(packages)))
 }
 
-void Transaction::installPackages(const Package &package, bool onlyTrusted)
+void Transaction::installPackage(const Package &package, bool onlyTrusted)
 {
     installPackages(QList<Package>() << package, onlyTrusted);
 }
@@ -482,7 +482,7 @@ void Transaction::removePackages(const QList<Package> &packages, bool allowDeps,
     RUN_TRANSACTION(RemovePackages(Util::packageListToPids(packages), allowDeps, autoremove))
 }
 
-void Transaction::removePackages(const Package &package, bool allowDeps, bool autoremove)
+void Transaction::removePackage(const Package &package, bool allowDeps, bool autoremove)
 {
     removePackages(QList<Package>() << package, allowDeps, autoremove);
 }
@@ -532,7 +532,7 @@ void Transaction::searchGroups(const QStringList &groups, Transaction::Filters f
     RUN_TRANSACTION(SearchGroups(TransactionPrivate::filtersToString(filters), groups))
 }
 
-void Transaction::searchGroups(const QString &group, Transaction::Filters filters)
+void Transaction::searchGroup(const QString &group, Transaction::Filters filters)
 {
     searchGroups(QStringList() << group, filters);
 }
@@ -547,7 +547,7 @@ void Transaction::searchGroups(Package::Groups groups, Transaction::Filters filt
     searchGroups(groupsSL, filters);
 }
 
-void Transaction::searchGroups(Package::Group group, Transaction::Filters filters)
+void Transaction::searchGroup(Package::Group group, Transaction::Filters filters)
 {
     searchGroups(Package::Groups() << group, filters);
 }
@@ -567,7 +567,7 @@ void Transaction::simulateInstallFiles(const QStringList &files)
     RUN_TRANSACTION(SimulateInstallFiles(files))
 }
 
-void Transaction::simulateInstallFiles(const QString &file)
+void Transaction::simulateInstallFile(const QString &file)
 {
     simulateInstallFiles(QStringList() << file);
 }
@@ -577,7 +577,7 @@ void Transaction::simulateInstallPackages(const QList<Package> &packages)
     RUN_TRANSACTION(SimulateInstallPackages(Util::packageListToPids(packages)))
 }
 
-void Transaction::simulateInstallPackages(const Package &package)
+void Transaction::simulateInstallPackage(const Package &package)
 {
     simulateInstallPackages(QList<Package>() << package);
 }
@@ -587,7 +587,7 @@ void Transaction::simulateRemovePackages(const QList<Package> &packages, bool au
     RUN_TRANSACTION(SimulateRemovePackages(Util::packageListToPids(packages), autoremove))
 }
 
-void Transaction::simulateRemovePackages(const Package &package, bool autoremove)
+void Transaction::simulateRemovePackage(const Package &package, bool autoremove)
 {
     simulateRemovePackages(QList<Package>() << package, autoremove);
 }
@@ -597,7 +597,7 @@ void Transaction::simulateUpdatePackages(const QList<Package> &packages)
     RUN_TRANSACTION(SimulateUpdatePackages(Util::packageListToPids(packages)))
 }
 
-void Transaction::simulateUpdatePackages(const Package &package)
+void Transaction::simulateUpdatePackage(const Package &package)
 {
     simulateUpdatePackages(QList<Package>() << package);
 }
@@ -607,7 +607,7 @@ void Transaction::updatePackages(const QList<Package> &packages, bool onlyTruste
     RUN_TRANSACTION(UpdatePackages(onlyTrusted, Util::packageListToPids(packages)))
 }
 
-void Transaction::updatePackages(const Package &package, bool onlyTrusted)
+void Transaction::updatePackage(const Package &package, bool onlyTrusted)
 {
     updatePackages(QList<Package>() << package, onlyTrusted);
 }
diff --git a/lib/packagekit-qt2/transaction.h b/lib/packagekit-qt2/transaction.h
index a6bd5e2..292310b 100644
--- a/lib/packagekit-qt2/transaction.h
+++ b/lib/packagekit-qt2/transaction.h
@@ -82,6 +82,9 @@ public:
         InternalErrorDaemonUnreachable
     } InternalError;
 
+    /**
+     * Describes the role of the transaction
+     */
     typedef enum {
         UnknownRole,
         RoleCancel,
@@ -123,7 +126,7 @@ public:
     typedef Bitfield Roles;
 
     /**
-     * Lists the different types of error
+     * Describes the different types of error
      */
     typedef enum {
         UnknownError,
@@ -210,7 +213,7 @@ public:
     } Exit;
 
     /**
-     * Describes the different filters
+     * Describes the different package filters
      */
     typedef enum {
         UnknownFilter        = 0x0000001,
@@ -351,7 +354,7 @@ public:
      * (i.e. simulateInstallPackages then installPackages)
      *
      * \warning after creating the transaction object be sure
-     * to verify if it doesn't have any \sa error()
+     * to verify if it doesn't have any error()
      */
     Transaction(QObject *parent = 0);
 
@@ -364,7 +367,7 @@ public:
      * (i.e. simulateInstallPackages then installPackages)
      *
      * \warning after creating the transaction object be sure
-     * to verify if it doesn't have any \sa error()
+     * to verify if it doesn't have any error()
      */
     Transaction(const QString &tid, QObject *parent = 0);
 
@@ -391,7 +394,7 @@ public:
     Transaction::InternalError error() const;
 
     /**
-     * Indicates weither you can cancel the transaction or not
+     * Indicates whether you can cancel the transaction or not
      * i.e. the backend forbids cancelling the transaction while
      * it's installing packages
      *
@@ -415,8 +418,6 @@ public:
      * display a more complete summary of the transaction.
      *
      * \return the last package processed by the transaction
-     * \sa transactionListChanged
-     * \sa getTransactionList
      */
     Package lastPackage() const;
 
@@ -475,10 +476,15 @@ public:
      *
      * \sa Daemon::setHints
      */
-    void setHints(const QString &hints);
     void setHints(const QStringList &hints);
 
     /**
+     * Convenience function to set this transaction \p hints
+     * \sa getDetails(const QStringList &hints)
+     */
+    void setHints(const QString &hints);
+
+    /**
      * Returns the current state of the transaction
      * \return a Transaction::Status value describing the status of the transaction
      */
@@ -531,9 +537,8 @@ public:
      *
      * The EULA is identified by the \sa Eula structure \p info
      *
-     * \note You need to restart the transaction which triggered the EULA manually
-     *
-     * \sa eulaRequired
+     * \note You need to manually restart the transaction which triggered the EULA.
+     * \sa eulaRequired()
      */
     void acceptEula(const QString &eulaId);
 
@@ -544,9 +549,10 @@ public:
     void downloadPackages(const QList<Package> &packages, bool storeInCache = false);
 
     /**
-     * This is a convenience function
+     * This is a convenience function to download this \p package
+     * \sa downloadPackages(const QList<Package> &packages, bool storeInCache = false)
      */
-    void downloadPackages(const Package &package, bool storeInCache = false);
+    void downloadPackage(const Package &package, bool storeInCache = false);
 
     /**
      * Returns the collection categories
@@ -565,6 +571,11 @@ public:
      * \note This method emits \sa package()
      */
     void getDepends(const QList<Package> &packages, Filters filters, bool recursive = false);
+
+    /**
+     * Convenience function to get the dependencies of this \p package
+     * \sa getDetails(const QList<Package> &packages, Filters filters, bool recursive = false)
+     */
     void getDepends(const Package &package, Filters filters , bool recursive = false);
 
     /**
@@ -575,6 +586,11 @@ public:
      * with details set
      */
     void getDetails(const QList<Package> &packages);
+
+    /**
+     * Convenience function to get the details about this \p package
+     * \sa getDetails(const QList<Package> &packages)
+     */
     void getDetails(const Package &package);
 
     /**
@@ -583,6 +599,11 @@ public:
      * \note This method emits \sa files()
      */
     void getFiles(const QList<Package> &packages);
+
+    /**
+     * Convenience function to get the files contained in this \p package
+     * \sa getRequires(const QList<Package> &packages)
+     */
     void getFiles(const Package &packages);
 
     /**
@@ -617,6 +638,11 @@ public:
      * \note This method emits \sa package()
      */
     void getRequires(const QList<Package> &packages, Filters filters, bool recursive = false);
+
+    /**
+     * Convenience function to get packages requiring this package
+     * \sa getRequires(const QList<Package> &packages, Filters filters, bool recursive = false)
+     */
     void getRequires(const Package &package, Filters filters, bool recursive = false);
 
     /**
@@ -624,7 +650,12 @@ public:
      *
      * \note This method emits \sa updateDetail()
      */
-    void getUpdateDetail(const QList<Package> &packages);
+    void getUpdatesDetails(const QList<Package> &packages);
+
+    /**
+     * Convenience function to get update details
+     * \sa getUpdateDetail(const QList<Package> &packages)
+     */
     void getUpdateDetail(const Package &package);
 
     /**
@@ -652,7 +683,12 @@ public:
      * and \sa changed()
      */
     void installFiles(const QStringList &files, bool onlyTrusted = true);
-    void installFiles(const QString &file, bool onlyTrusted = true);
+
+    /**
+     * Convenience function to install a file
+     * \sa installFiles(const QStringList &files, bool onlyTrusted = true)
+     */
+    void installFile(const QString &file, bool onlyTrusted = true);
 
     /**
      * Install the given \p packages
@@ -663,7 +699,12 @@ public:
      * and \sa changed()
      */
     void installPackages(const QList<Package> &packages, bool onlyTrusted = true);
-    void installPackages(const Package &package, bool onlyTrusted = true);
+
+    /**
+     * Convenience function to install a package
+     * \sa installPackages(const QList<Package> &packages, bool onlyTrusted = true)
+     */
+    void installPackage(const Package &package, bool onlyTrusted = true);
 
     /**
      * \brief Installs a signature
@@ -690,7 +731,12 @@ public:
      * and \sa changed()
      */
     void removePackages(const QList<Package>  &packages, bool allowDeps = false, bool autoRemove = false);
-    void removePackages(const Package &package, bool allowDeps = false, bool autoRemove = false);
+
+    /**
+     * Convenience function to remove a package
+     * \sa removePackages(const QList<Package>  &packages, bool allowDeps = false, bool autoRemove = false)
+     */
+    void removePackage(const Package &package, bool allowDeps = false, bool autoRemove = false);
 
     /**
      * Activates or disables a repository
@@ -710,6 +756,11 @@ public:
      * \note This method emits \sa package()
      */
     void resolve(const QStringList &packageNames, Filters filters = FilterNone);
+
+    /**
+     * Convenience function to remove a package name
+     * \sa resolve(const QStringList &packageNames, Filters filters = FilterNone)
+     */
     void resolve(const QString &packageName, Filters filters = FilterNone);
 
     /**
@@ -720,6 +771,11 @@ public:
      * \note This method emits \sa package()
      */
     void searchFiles(const QStringList &search, Filters filters = FilterNone);
+
+    /**
+     * Convenience function to search for a file
+     * \sa searchFiles(const QStringList &search, Filters filters = FilterNone)
+     */
     void searchFiles(const QString &search, Filters filters = FilterNone);
 
     /**
@@ -730,6 +786,11 @@ public:
      * \note This method emits \sa package()
      */
     void searchDetails(const QStringList &search, Filters filters = FilterNone);
+
+    /**
+     * Convenience function to search by details
+     * \sa searchDetails(const QStringList &search, Filters filters = FilterNone)
+     */
     void searchDetails(const QString &search, Filters filters = FilterNone);
 
     /**
@@ -742,7 +803,12 @@ public:
      * \note This method emits \sa package()
      */
     void searchGroups(const QStringList &groups, Filters filters = FilterNone);
-    void searchGroups(const QString &group, Filters filters = FilterNone);
+
+    /**
+     * Convenience function to search by group string
+     * \sa searchGroups(const QStringList &groups, Filters filters = FilterNone)
+     */
+    void searchGroup(const QString &group, Filters filters = FilterNone);
 
     /**
      * \brief Lists all the packages in the given \p group
@@ -752,7 +818,12 @@ public:
      * \note This method emits \sa package()
      */
     void searchGroups(Package::Groups group, Filters filters = FilterNone);
-    void searchGroups(Package::Group group, Filters filters = FilterNone);
+
+    /**
+     * Convenience function to search by group
+     * \sa searchGroups(Package::Groups group, Filters filters = FilterNone)
+     */
+    void searchGroup(Package::Group group, Filters filters = FilterNone);
 
     /**
      * \brief Search in the packages names
@@ -762,6 +833,11 @@ public:
      * \note This method emits \sa package()
      */
     void searchNames(const QStringList &search, Filters filters = FilterNone);
+
+    /**
+     * Convenience function to search by names
+     * \sa searchNames(const QStringList &search, Filters filters = FilterNone)
+     */
     void searchNames(const QString &search, Filters filters = FilterNone);
 
     /**
@@ -773,7 +849,12 @@ public:
      *        REINSTALLING or OBSOLETING status.
      */
     void simulateInstallFiles(const QStringList &files);
-    void simulateInstallFiles(const QString &file);
+
+    /**
+     * Convenience function to simulate the install of a file
+     * \sa simulateInstallFiles(const QStringList &files)
+     */
+    void simulateInstallFile(const QString &file);
 
     /**
      * \brief Simulates an installation of \p packages.
@@ -784,7 +865,12 @@ public:
      *        REINSTALLING or OBSOLETING status.
      */
     void simulateInstallPackages(const QList<Package> &packages);
-    void simulateInstallPackages(const Package &package);
+
+    /**
+     * Convenience function to simulate the install of a package
+     * \sa simulateInstallPackages(const QList<Package> &packages)
+     */
+    void simulateInstallPackage(const Package &package);
 
     /**
      * \brief Simulates a removal of \p packages.
@@ -795,7 +881,12 @@ public:
      *        REINSTALLING or OBSOLETING status.
      */
     void simulateRemovePackages(const QList<Package> &packages, bool autoRemove = false);
-    void simulateRemovePackages(const Package &package, bool autoRemove = false);
+
+    /**
+     * Convenience function to simulate the removal of a package
+     * \sa simulateRemovePackages(const QList<Package> &packages, bool autoRemove = false)
+     */
+    void simulateRemovePackage(const Package &package, bool autoRemove = false);
 
     /**
      * \brief Simulates an update of \p packages.
@@ -806,7 +897,12 @@ public:
      *        REINSTALLING or OBSOLETING status.
      */
     void simulateUpdatePackages(const QList<Package> &packages);
-    void simulateUpdatePackages(const Package &package);
+
+    /**
+     * Convenience function to simulate the update of a package
+     * \sa simulateUpdatePackages(const QList<Package> &packages)
+     */
+    void simulateUpdatePackage(const Package &package);
 
     /**
      * Update the given \p packages
@@ -816,7 +912,12 @@ public:
      * and \sa changed()
      */
     void updatePackages(const QList<Package> &packages, bool onlyTrusted = true);
-    void updatePackages(const Package &package, bool onlyTrusted = true);
+
+    /**
+     * Convenience function to update a package
+     * \sa updatePackages(const QList<Package> &packages, bool onlyTrusted = true)
+     */
+    void updatePackage(const Package &package, bool onlyTrusted = true);
 
     /**
      * Updates the whole system
@@ -834,6 +935,11 @@ public:
      * \note This method emits \sa package()
      */
     void whatProvides(Provides type, const QStringList &search, Filters filters = FilterNone);
+
+    /**
+     * Convenience function to search for what provides
+     * \sa whatProvides(Provides type, const QStringList &search, Filters filters = FilterNone)
+     */
     void whatProvides(Provides type, const QString &search, Filters filters = FilterNone);
 
 public Q_SLOTS:
@@ -856,6 +962,8 @@ Q_SIGNALS:
      * \li \p name is the category's name. This name is localized.
      * \li \p summary is the category's summary. It is localized.
      * \li \p icon is the icon identifier eg. server-cfg. If unknown, it is set to icon-missing.
+     *
+     * \sa getCategories()
      */
     void category(const QString &parentId, const QString &categoryId, const QString &name, const QString &summary, const QString &icon);
 
@@ -892,7 +1000,7 @@ Q_SIGNALS:
 
     /**
      * Sends the \p filenames contained in package \p package
-     * \sa Daemon::getFiles
+     * \sa getFiles()
      */
     void files(const PackageKit::Package &package, const QStringList &filenames);
 
@@ -923,6 +1031,7 @@ Q_SIGNALS:
 
     /**
      * Emitted when the user has to validate a repository's signature
+     * \sa installSignature()
      */
     void repoSignatureRequired(const PackageKit::Signature &info);
 
@@ -934,7 +1043,7 @@ Q_SIGNALS:
 
     /**
      * Sends an old transaction
-     * \sa Daemon::getOldTransactions
+     * \sa getOldTransactions()
      */
     void transaction(PackageKit::Transaction *transaction);
 
commit b032a9e71966d30cf31e4c6ad2d2042ce04c546a
Author: Richard Hughes <richard at hughsie.com>
Date:   Tue May 3 15:03:05 2011 +0100

    trivial: include the PackageKitQt2 header files in the Fedora spec file

diff --git a/contrib/PackageKit.spec.in b/contrib/PackageKit.spec.in
index f034c6a..7167869 100644
--- a/contrib/PackageKit.spec.in
+++ b/contrib/PackageKit.spec.in
@@ -449,6 +449,11 @@ update-mime-database %{_datadir}/mime &> /dev/null || :
 %{_includedir}/PackageKit/packagekit-qt/*.h
 %{_datadir}/cmake/Modules/FindQPackageKit.cmake
 
+# qt2 new library
+%{_includedir}/PackageKit/packagekit-qt2/*
+%{_libdir}/pkgconfig/packagekit-qt2.pc
+%{_datadir}/cmake/Modules/FindPackageKitQt2.cmake
+
 %files backend-devel
 %defattr(-,root,root,-)
 %dir %{_includedir}/PackageKit
commit 251152b162d437365ab50c4e21b96963327f0c5d
Author: Matthias Klumpp <matthias at nlinux.org>
Date:   Tue May 3 12:32:59 2011 +0200

    Add GIR annotations to make PK GIR usable
    
    I only fixed the most obvious issues with GIR,
    there might be other modifications needed until
    the GIR is fully functional.

diff --git a/lib/packagekit-glib2/pk-client-sync.c b/lib/packagekit-glib2/pk-client-sync.c
index 2349f1d..5e7341a 100644
--- a/lib/packagekit-glib2/pk-client-sync.c
+++ b/lib/packagekit-glib2/pk-client-sync.c
@@ -56,7 +56,7 @@ pk_client_generic_finish_sync (PkClient *client, GAsyncResult *res, PkClientHelp
  * pk_client_resolve:
  * @client: a valid #PkClient instance
  * @filters: a %PkBitfield such as %PK_FILTER_ENUM_GUI | %PK_FILTER_ENUM_FREE or %PK_FILTER_ENUM_NONE
- * @packages: an array of package names to resolve, e.g. "gnome-system-tools"
+ * @packages: (array zero-terminated=1): an array of package names to resolve, e.g. "gnome-system-tools"
  * @cancellable: a #GCancellable or %NULL
  * @progress_callback: (scope call): the function to run when the progress changes
  * @progress_user_data: data to pass to @progress_callback
@@ -107,7 +107,7 @@ pk_client_resolve (PkClient *client, PkBitfield filters, gchar **packages, GCanc
  * pk_client_search_names:
  * @client: a valid #PkClient instance
  * @filters: a %PkBitfield such as %PK_FILTER_ENUM_GUI | %PK_FILTER_ENUM_FREE or %PK_FILTER_ENUM_NONE
- * @values: free text to search for, for instance, "power"
+ * @values: (array zero-terminated=1): free text to search for, for instance, "power"
  * @cancellable: a #GCancellable or %NULL
  * @progress_callback: (scope call): the function to run when the progress changes
  * @progress_user_data: data to pass to @progress_callback
@@ -157,7 +157,7 @@ pk_client_search_names (PkClient *client, PkBitfield filters, gchar **values, GC
  * pk_client_search_details:
  * @client: a valid #PkClient instance
  * @filters: a %PkBitfield such as %PK_FILTER_ENUM_GUI | %PK_FILTER_ENUM_FREE or %PK_FILTER_ENUM_NONE
- * @values: free text to search for, for instance, "power"
+ * @values: (array zero-terminated=1): free text to search for, for instance, "power"
  * @cancellable: a #GCancellable or %NULL
  * @progress_callback: (scope call): the function to run when the progress changes
  * @progress_user_data: data to pass to @progress_callback
@@ -208,7 +208,7 @@ pk_client_search_details (PkClient *client, PkBitfield filters, gchar **values,
  * pk_client_search_groups:
  * @client: a valid #PkClient instance
  * @filters: a %PkBitfield such as %PK_FILTER_ENUM_GUI | %PK_FILTER_ENUM_FREE or %PK_FILTER_ENUM_NONE
- * @values: a group enum to search for, for instance, "system-tools"
+ * @values: (array zero-terminated=1): a group enum to search for, for instance, "system-tools"
  * @cancellable: a #GCancellable or %NULL
  * @progress_callback: (scope call): the function to run when the progress changes
  * @progress_user_data: data to pass to @progress_callback
@@ -257,7 +257,7 @@ pk_client_search_groups (PkClient *client, PkBitfield filters, gchar **values, G
  * pk_client_search_files:
  * @client: a valid #PkClient instance
  * @filters: a %PkBitfield such as %PK_FILTER_ENUM_GUI | %PK_FILTER_ENUM_FREE or %PK_FILTER_ENUM_NONE
- * @values: file to search for, for instance, "/sbin/service"
+ * @values: (array zero-terminated=1): file to search for, for instance, "/sbin/service"
  * @cancellable: a #GCancellable or %NULL
  * @progress_callback: (scope call): the function to run when the progress changes
  * @progress_user_data: data to pass to @progress_callback
@@ -751,7 +751,7 @@ pk_client_get_requires (PkClient *client, PkBitfield filters, gchar **package_id
  * @client: a valid #PkClient instance
  * @filters: a %PkBitfield such as %PK_FILTER_ENUM_GUI | %PK_FILTER_ENUM_FREE or %PK_FILTER_ENUM_NONE
  * @provides: a #PkProvidesEnum value such as PK_PROVIDES_ENUM_CODEC
- * @values: a search term such as "sound/mp3"
+ * @values: (array zero-terminated=1): a search term such as "sound/mp3"
  * @cancellable: a #GCancellable or %NULL
  * @progress_callback: (scope call): the function to run when the progress changes
  * @progress_user_data: data to pass to @progress_callback
diff --git a/lib/packagekit-glib2/pk-client.c b/lib/packagekit-glib2/pk-client.c
index 028e0db..0c5c1fe 100644
--- a/lib/packagekit-glib2/pk-client.c
+++ b/lib/packagekit-glib2/pk-client.c
@@ -2072,7 +2072,7 @@ pk_client_generic_finish (PkClient *client, GAsyncResult *res, GError **error)
  * pk_client_resolve_async:
  * @client: a valid #PkClient instance
  * @filters: a %PkBitfield such as %PK_FILTER_ENUM_GUI | %PK_FILTER_ENUM_FREE or %PK_FILTER_ENUM_NONE
- * @packages: an array of package names to resolve, e.g. "gnome-system-tools"
+ * @packages: (array zero-terminated=1): an array of package names to resolve, e.g. "gnome-system-tools"
  * @cancellable: a #GCancellable or %NULL
  * @progress_callback: (scope call): the function to run when the progress changes
  * @progress_user_data: data to pass to @progress_callback
@@ -2135,7 +2135,7 @@ out:
  * pk_client_search_names_async:
  * @client: a valid #PkClient instance
  * @filters: a %PkBitfield such as %PK_FILTER_ENUM_GUI | %PK_FILTER_ENUM_FREE or %PK_FILTER_ENUM_NONE
- * @values: free text to search for, for instance, "power"
+ * @values: (array zero-terminated=1): free text to search for, for instance, "power"
  * @cancellable: a #GCancellable or %NULL
  * @progress_callback: (scope call): the function to run when the progress changes
  * @progress_user_data: data to pass to @progress_callback
@@ -2197,7 +2197,7 @@ out:
  * pk_client_search_details_async:
  * @client: a valid #PkClient instance
  * @filters: a %PkBitfield such as %PK_FILTER_ENUM_GUI | %PK_FILTER_ENUM_FREE or %PK_FILTER_ENUM_NONE
- * @values: free text to search for, for instance, "power"
+ * @values: (array zero-terminated=1): free text to search for, for instance, "power"
  * @cancellable: a #GCancellable or %NULL
  * @progress_callback: (scope call): the function to run when the progress changes
  * @progress_user_data: data to pass to @progress_callback
@@ -2260,7 +2260,7 @@ out:
  * pk_client_search_groups_async:
  * @client: a valid #PkClient instance
  * @filters: a %PkBitfield such as %PK_FILTER_ENUM_GUI | %PK_FILTER_ENUM_FREE or %PK_FILTER_ENUM_NONE
- * @values: a group enum to search for, for instance, "system-tools"
+ * @values: (array zero-terminated=1): a group enum to search for, for instance, "system-tools"
  * @cancellable: a #GCancellable or %NULL
  * @progress_callback: (scope call): the function to run when the progress changes
  * @progress_user_data: data to pass to @progress_callback
@@ -2321,7 +2321,7 @@ out:
  * pk_client_search_files_async:
  * @client: a valid #PkClient instance
  * @filters: a %PkBitfield such as %PK_FILTER_ENUM_GUI | %PK_FILTER_ENUM_FREE or %PK_FILTER_ENUM_NONE
- * @values: file to search for, for instance, "/sbin/service"
+ * @values: (array zero-terminated=1): file to search for, for instance, "/sbin/service"
  * @cancellable: a #GCancellable or %NULL
  * @progress_callback: (scope call): the function to run when the progress changes
  * @progress_user_data: data to pass to @progress_callback
@@ -2936,7 +2936,7 @@ out:
  * @client: a valid #PkClient instance
  * @filters: a %PkBitfield such as %PK_FILTER_ENUM_GUI | %PK_FILTER_ENUM_FREE or %PK_FILTER_ENUM_NONE
  * @provides: a #PkProvidesEnum value such as PK_PROVIDES_ENUM_CODEC
- * @values: a search term such as "sound/mp3"
+ * @values: (array zero-terminated=1): a search term such as "sound/mp3"
  * @cancellable: a #GCancellable or %NULL
  * @progress_callback: (scope call): the function to run when the progress changes
  * @progress_user_data: data to pass to @progress_callback
diff --git a/lib/packagekit-glib2/pk-common.c b/lib/packagekit-glib2/pk-common.c
index 043397e..a9ef87f 100644
--- a/lib/packagekit-glib2/pk-common.c
+++ b/lib/packagekit-glib2/pk-common.c
@@ -81,7 +81,7 @@ pk_iso8601_from_date (const GDate *date)
 }
 
 /**
- * pk_iso8601_to_date:
+ * pk_iso8601_to_date: (skip)
  * @iso_date: The ISO8601 date to convert
  *
  * Return value: If valid then a new %GDate, else NULL
diff --git a/lib/packagekit-glib2/pk-control.c b/lib/packagekit-glib2/pk-control.c
index a455056..5c3a04c 100644
--- a/lib/packagekit-glib2/pk-control.c
+++ b/lib/packagekit-glib2/pk-control.c
@@ -1921,6 +1921,8 @@ pk_control_transaction_list_changed_idle_cb (PkIdleSignalStore *store)
 
 /**
  * pk_control_transaction_list_changed_cb:
+ *
+ * @transaction_ids: (array zero-terminated=1)
  */
 static void
 pk_control_transaction_list_changed_cb (DBusGProxy *proxy, gchar **transaction_ids, PkControl *control)
diff --git a/lib/packagekit-glib2/pk-debug.c b/lib/packagekit-glib2/pk-debug.c
index 72570d7..a6e557d 100644
--- a/lib/packagekit-glib2/pk-debug.c
+++ b/lib/packagekit-glib2/pk-debug.c
@@ -185,7 +185,7 @@ pk_debug_post_parse_hook (GOptionContext *context, GOptionGroup *group, gpointer
 }
 
 /**
- * pk_debug_get_option_group:
+ * pk_debug_get_option_group: (skip)
  *
  * Returns a #GOptionGroup for the commandline arguments recognized
  * by debugging. You should add this group to your #GOptionContext
diff --git a/lib/packagekit-glib2/pk-task-sync.c b/lib/packagekit-glib2/pk-task-sync.c
index d235164..e82451c 100644
--- a/lib/packagekit-glib2/pk-task-sync.c
+++ b/lib/packagekit-glib2/pk-task-sync.c
@@ -108,7 +108,7 @@ pk_task_update_system_sync (PkTask *task, GCancellable *cancellable,
 /**
  * pk_task_remove_packages_sync:
  * @task: a valid #PkTask instance
- * @package_ids: a null terminated array of package_id structures such as "hal;0.0.1;i386;fedora"
+ * @package_ids: (array zero-terminated=1): a null terminated array of package_id structures such as "hal;0.0.1;i386;fedora"
  * @allow_deps: if other dependant packages are allowed to be removed from the computer
  * @autoremove: if other packages installed at the same time should be tried to remove
  * @cancellable: a #GCancellable or %NULL
@@ -160,7 +160,7 @@ pk_task_remove_packages_sync (PkTask *task, gchar **package_ids, gboolean allow_
 /**
  * pk_task_install_packages_sync:
  * @task: a valid #PkTask instance
- * @package_ids: a null terminated array of package_id structures such as "hal;0.0.1;i386;fedora"
+ * @package_ids: (array zero-terminated=1): a null terminated array of package_id structures such as "hal;0.0.1;i386;fedora"
  * @cancellable: a #GCancellable or %NULL
  * @progress_callback: the function to run when the progress changes
  * @progress_user_data: data to pass to @progress_callback
@@ -208,7 +208,7 @@ pk_task_install_packages_sync (PkTask *task, gchar **package_ids, GCancellable *
 /**
  * pk_task_update_packages_sync:
  * @task: a valid #PkTask instance
- * @package_ids: a null terminated array of package_id structures such as "hal;0.0.1;i386;fedora"
+ * @package_ids: (array zero-terminated=1): a null terminated array of package_id structures such as "hal;0.0.1;i386;fedora"
  * @cancellable: a #GCancellable or %NULL
  * @progress_callback: the function to run when the progress changes
  * @progress_user_data: data to pass to @progress_callback
@@ -351,7 +351,7 @@ pk_task_resolve_sync (PkTask *task, PkBitfield filters, gchar **packages, GCance
  * pk_task_search_names_sync:
  * @task: a valid #PkTask instance
  * @filters: a bitfield of filters that can be used to limit the results
- * @values: search values
+ * @values: (array zero-terminated=1): search values
  * @cancellable: a #GCancellable or %NULL
  * @progress_callback: the function to run when the progress changes
  * @progress_user_data: data to pass to @progress_callback
@@ -396,7 +396,7 @@ pk_task_search_names_sync (PkTask *task, PkBitfield filters, gchar **values, GCa
  * pk_task_search_details_sync:
  * @task: a valid #PkTask instance
  * @filters: a bitfield of filters that can be used to limit the results
- * @values: search values
+ * @values: (array zero-terminated=1): search values
  * @cancellable: a #GCancellable or %NULL
  * @progress_callback: the function to run when the progress changes
  * @progress_user_data: data to pass to @progress_callback
@@ -441,7 +441,7 @@ pk_task_search_details_sync (PkTask *task, PkBitfield filters, gchar **values, G
  * pk_task_search_groups_sync:
  * @task: a valid #PkTask instance
  * @filters: a bitfield of filters that can be used to limit the results
- * @values: search values
+ * @values: (array zero-terminated=1): search values
  * @cancellable: a #GCancellable or %NULL
  * @progress_callback: the function to run when the progress changes
  * @progress_user_data: data to pass to @progress_callback
@@ -486,7 +486,7 @@ pk_task_search_groups_sync (PkTask *task, PkBitfield filters, gchar **values, GC
  * pk_task_search_files_sync:
  * @task: a valid #PkTask instance
  * @filters: a bitfield of filters that can be used to limit the results
- * @values: search values
+ * @values: (array zero-terminated=1): search values
  * @cancellable: a #GCancellable or %NULL
  * @progress_callback: the function to run when the progress changes
  * @progress_user_data: data to pass to @progress_callback
@@ -530,7 +530,7 @@ pk_task_search_files_sync (PkTask *task, PkBitfield filters, gchar **values, GCa
 /**
  * pk_task_get_details_sync:
  * @task: a valid #PkTask instance
- * @package_ids: a null terminated array of package_id structures such as "hal;0.0.1;i386;fedora"
+ * @package_ids: (array zero-terminated=1): a null terminated array of package_id structures such as "hal;0.0.1;i386;fedora"
  * @cancellable: a #GCancellable or %NULL
  * @progress_callback: the function to run when the progress changes
  * @progress_user_data: data to pass to @progress_callback
@@ -574,7 +574,7 @@ pk_task_get_details_sync (PkTask *task, gchar **package_ids, GCancellable *cance
 /**
  * pk_task_get_update_detail_sync:
  * @task: a valid #PkTask instance
- * @package_ids: a null terminated array of package_id structures such as "hal;0.0.1;i386;fedora"
+ * @package_ids: (array zero-terminated=1): a null terminated array of package_id structures such as "hal;0.0.1;i386;fedora"
  * @cancellable: a #GCancellable or %NULL
  * @progress_callback: the function to run when the progress changes
  * @progress_user_data: data to pass to @progress_callback
@@ -618,7 +618,7 @@ pk_task_get_update_detail_sync (PkTask *task, gchar **package_ids, GCancellable
 /**
  * pk_task_download_packages_sync:
  * @task: a valid #PkTask instance
- * @package_ids: a null terminated array of package_id structures such as "hal;0.0.1;i386;fedora"
+ * @package_ids: (array zero-terminated=1): a null terminated array of package_id structures such as "hal;0.0.1;i386;fedora"
  * @directory: the destination directory
  * @cancellable: a #GCancellable or %NULL
  * @progress_callback: the function to run when the progress changes
@@ -708,7 +708,7 @@ pk_task_get_updates_sync (PkTask *task, PkBitfield filters, GCancellable *cancel
  * pk_task_get_depends_sync:
  * @task: a valid #PkTask instance
  * @filters: a bitfield of filters that can be used to limit the results
- * @package_ids: a null terminated array of package_id structures such as "hal;0.0.1;i386;fedora"
+ * @package_ids: (array zero-terminated=1): a null terminated array of package_id structures such as "hal;0.0.1;i386;fedora"
  * @recursive: if we should recurse to packages that depend on other packages
  * @cancellable: a #GCancellable or %NULL
  * @progress_callback: the function to run when the progress changes
@@ -798,7 +798,7 @@ pk_task_get_packages_sync (PkTask *task, PkBitfield filters, GCancellable *cance
  * pk_task_get_requires_sync:
  * @task: a valid #PkTask instance
  * @filters: a bitfield of filters that can be used to limit the results
- * @package_ids: a null terminated array of package_id structures such as "hal;0.0.1;i386;fedora"
+ * @package_ids: (array zero-terminated=1): a null terminated array of package_id structures such as "hal;0.0.1;i386;fedora"
  * @recursive: if we should return packages that depend on the ones we do
  * @cancellable: a #GCancellable or %NULL
  * @progress_callback: the function to run when the progress changes
@@ -845,7 +845,7 @@ pk_task_get_requires_sync (PkTask *task, PkBitfield filters, gchar **package_ids
  * @task: a valid #PkTask instance
  * @filters: a bitfield of filters that can be used to limit the results
  * @provides: a #PkProvidesEnum type
- * @values: values to search for
+ * @values: (array zero-terminated=1): values to search for
  * @cancellable: a #GCancellable or %NULL
  * @progress_callback: the function to run when the progress changes
  * @progress_user_data: data to pass to @progress_callback
@@ -889,7 +889,7 @@ pk_task_what_provides_sync (PkTask *task, PkBitfield filters, PkProvidesEnum pro
 /**
  * pk_task_get_files_sync:
  * @task: a valid #PkTask instance
- * @package_ids: a null terminated array of package_id structures such as "hal;0.0.1;i386;fedora"
+ * @package_ids: (array zero-terminated=1): a null terminated array of package_id structures such as "hal;0.0.1;i386;fedora"
  * @cancellable: a #GCancellable or %NULL
  * @progress_callback: the function to run when the progress changes
  * @progress_user_data: data to pass to @progress_callback
diff --git a/lib/packagekit-glib2/pk-task.c b/lib/packagekit-glib2/pk-task.c
index 5d10a98..89564a8 100644
--- a/lib/packagekit-glib2/pk-task.c
+++ b/lib/packagekit-glib2/pk-task.c
@@ -920,7 +920,7 @@ out:
 /**
  * pk_task_install_packages_async:
  * @task: a valid #PkTask instance
- * @package_ids: a null terminated array of package_id structures such as "hal;0.0.1;i386;fedora"
+ * @package_ids: (array zero-terminated=1): a null terminated array of package_id structures such as "hal;0.0.1;i386;fedora"
  * @cancellable: a #GCancellable or %NULL
  * @progress_callback: (scope call): the function to run when the progress changes
  * @progress_user_data: data to pass to @progress_callback
@@ -975,7 +975,7 @@ pk_task_install_packages_async (PkTask *task, gchar **package_ids, GCancellable
 /**
  * pk_task_update_packages_async:
  * @task: a valid #PkTask instance
- * @package_ids: a null terminated array of package_id structures such as "hal;0.0.1;i386;fedora"
+ * @package_ids: (array zero-terminated=1): a null terminated array of package_id structures such as "hal;0.0.1;i386;fedora"
  * @cancellable: a #GCancellable or %NULL
  * @progress_callback: (scope call): the function to run when the progress changes
  * @progress_user_data: data to pass to @progress_callback
@@ -1029,7 +1029,7 @@ pk_task_update_packages_async (PkTask *task, gchar **package_ids, GCancellable *
 /**
  * pk_task_remove_packages_async:
  * @task: a valid #PkTask instance
- * @package_ids: a null terminated array of package_id structures such as "hal;0.0.1;i386;fedora"
+ * @package_ids: (array zero-terminated=1): a null terminated array of package_id structures such as "hal;0.0.1;i386;fedora"
  * @allow_deps: if other dependant packages are allowed to be removed from the computer
  * @autoremove: if other packages installed at the same time should be tried to remove
  * @cancellable: a #GCancellable or %NULL
@@ -1250,7 +1250,7 @@ pk_task_resolve_async (PkTask *task, PkBitfield filters, gchar **packages, GCanc
  * pk_task_search_names_async:
  * @task: a valid #PkTask instance
  * @filters: a bitfield of filters that can be used to limit the results
- * @values: search values
+ * @values: (array zero-terminated=1): search values
  * @cancellable: a #GCancellable or %NULL
  * @progress_callback: (scope call): the function to run when the progress changes
  * @progress_user_data: data to pass to @progress_callback
@@ -1303,7 +1303,7 @@ pk_task_search_names_async (PkTask *task, PkBitfield filters, gchar **values, GC
  * pk_task_search_details_async:
  * @task: a valid #PkTask instance
  * @filters: a bitfield of filters that can be used to limit the results
- * @values: search values
+ * @values: (array zero-terminated=1): search values
  * @cancellable: a #GCancellable or %NULL
  * @progress_callback: (scope call): the function to run when the progress changes
  * @progress_user_data: data to pass to @progress_callback
@@ -1356,7 +1356,7 @@ pk_task_search_details_async (PkTask *task, PkBitfield filters, gchar **values,
  * pk_task_search_groups_async:
  * @task: a valid #PkTask instance
  * @filters: a bitfield of filters that can be used to limit the results
- * @values: search values
+ * @values: (array zero-terminated=1): search values
  * @cancellable: a #GCancellable or %NULL
  * @progress_callback: (scope call): the function to run when the progress changes
  * @progress_user_data: data to pass to @progress_callback
@@ -1409,7 +1409,7 @@ pk_task_search_groups_async (PkTask *task, PkBitfield filters, gchar **values, G
  * pk_task_search_files_async:
  * @task: a valid #PkTask instance
  * @filters: a bitfield of filters that can be used to limit the results
- * @values: search values
+ * @values: (array zero-terminated=1): search values
  * @cancellable: a #GCancellable or %NULL
  * @progress_callback: (scope call): the function to run when the progress changes
  * @progress_user_data: data to pass to @progress_callback
@@ -1461,7 +1461,7 @@ pk_task_search_files_async (PkTask *task, PkBitfield filters, gchar **values, GC
 /**
  * pk_task_get_details_async:
  * @task: a valid #PkTask instance
- * @package_ids: a null terminated array of package_id structures such as "hal;0.0.1;i386;fedora"
+ * @package_ids: (array zero-terminated=1): a null terminated array of package_id structures such as "hal;0.0.1;i386;fedora"
  * @cancellable: a #GCancellable or %NULL
  * @progress_callback: (scope call): the function to run when the progress changes
  * @progress_user_data: data to pass to @progress_callback
@@ -1512,7 +1512,7 @@ pk_task_get_details_async (PkTask *task, gchar **package_ids, GCancellable *canc
 /**
  * pk_task_get_update_detail_async:
  * @task: a valid #PkTask instance
- * @package_ids: a null terminated array of package_id structures such as "hal;0.0.1;i386;fedora"
+ * @package_ids: (array zero-terminated=1): a null terminated array of package_id structures such as "hal;0.0.1;i386;fedora"
  * @cancellable: a #GCancellable or %NULL
  * @progress_callback: (scope call): the function to run when the progress changes
  * @progress_user_data: data to pass to @progress_callback
@@ -1563,7 +1563,7 @@ pk_task_get_update_detail_async (PkTask *task, gchar **package_ids, GCancellable
 /**
  * pk_task_download_packages_async:
  * @task: a valid #PkTask instance
- * @package_ids: a null terminated array of package_id structures such as "hal;0.0.1;i386;fedora"
+ * @package_ids: (array zero-terminated=1): a null terminated array of package_id structures such as "hal;0.0.1;i386;fedora"
  * @directory: the destination directory
  * @cancellable: a #GCancellable or %NULL
  * @progress_callback: (scope call): the function to run when the progress changes
@@ -1668,7 +1668,7 @@ pk_task_get_updates_async (PkTask *task, PkBitfield filters, GCancellable *cance
  * pk_task_get_depends_async:
  * @task: a valid #PkTask instance
  * @filters: a bitfield of filters that can be used to limit the results
- * @package_ids: a null terminated array of package_id structures such as "hal;0.0.1;i386;fedora"
+ * @package_ids: (array zero-terminated=1): a null terminated array of package_id structures such as "hal;0.0.1;i386;fedora"
  * @recursive: if we should recurse to packages that depend on other packages
  * @cancellable: a #GCancellable or %NULL
  * @progress_callback: (scope call): the function to run when the progress changes
@@ -1774,7 +1774,7 @@ pk_task_get_packages_async (PkTask *task, PkBitfield filters, GCancellable *canc
  * pk_task_get_requires_async:
  * @task: a valid #PkTask instance
  * @filters: a bitfield of filters that can be used to limit the results
- * @package_ids: a null terminated array of package_id structures such as "hal;0.0.1;i386;fedora"
+ * @package_ids: (array zero-terminated=1): a null terminated array of package_id structures such as "hal;0.0.1;i386;fedora"
  * @recursive: if we should return packages that depend on the ones we do
  * @cancellable: a #GCancellable or %NULL
  * @progress_callback: (scope call): the function to run when the progress changes
@@ -1830,7 +1830,7 @@ pk_task_get_requires_async (PkTask *task, PkBitfield filters, gchar **package_id
  * @task: a valid #PkTask instance
  * @filters: a bitfield of filters that can be used to limit the results
  * @provides: a #PkProvidesEnum type
- * @values: values to search for
+ * @values: (array zero-terminated=1): values to search for
  * @cancellable: a #GCancellable or %NULL
  * @progress_callback: (scope call): the function to run when the progress changes
  * @progress_user_data: data to pass to @progress_callback
@@ -1883,7 +1883,7 @@ pk_task_what_provides_async (PkTask *task, PkBitfield filters, PkProvidesEnum pr
 /**
  * pk_task_get_files_async:
  * @task: a valid #PkTask instance
- * @package_ids: a null terminated array of package_id structures such as "hal;0.0.1;i386;fedora"
+ * @package_ids: (array zero-terminated=1): a null terminated array of package_id structures such as "hal;0.0.1;i386;fedora"
  * @cancellable: a #GCancellable or %NULL
  * @progress_callback: (scope call): the function to run when the progress changes
  * @progress_user_data: data to pass to @progress_callback
commit bc68754995d440b9567e9cf11394b88e6ab029b5
Author: Daniel Nicoletti <dantti85-pk at yahoo.com.br>
Date:   Tue May 3 00:33:00 2011 -0300

    packagekit-qt2: Fix Package class to not delete d, which fixes crashes weirdly

diff --git a/lib/packagekit-qt2/Doxyfile b/lib/packagekit-qt2/Doxyfile
index 7a2125b..ae16ab6 100644
--- a/lib/packagekit-qt2/Doxyfile
+++ b/lib/packagekit-qt2/Doxyfile
@@ -38,7 +38,7 @@ PROJECT_NUMBER         = 2.0
 # If a relative path is entered, it will be relative to the location 
 # where doxygen was started. If left blank the current directory will be used.
 
-OUTPUT_DIRECTORY       = ../../docs/packagekit-qt
+OUTPUT_DIRECTORY       = ../../docs/packagekit-qt2
 
 # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 
 # 4096 sub-directories (in 2 levels) under the output directory of each output 
@@ -462,7 +462,7 @@ WARN_LOGFILE           =
 # directories like "/usr/src/myproject". Separate the files or directories 
 # with spaces.
 
-INPUT                  =  ../../lib/packagekit-qt/src
+INPUT                  = daemon.h transaction.h package.h signature.h eula.h
 # This tag can be used to specify the character encoding of the source files that 
 # doxygen parses. Internally doxygen uses the UTF-8 encoding, which is also the default 
 # input encoding. Doxygen uses libiconv (or the iconv built into libc) for the transcoding. 
diff --git a/lib/packagekit-qt2/Makefile.am b/lib/packagekit-qt2/Makefile.am
index dca1f5b..1bb0afa 100644
--- a/lib/packagekit-qt2/Makefile.am
+++ b/lib/packagekit-qt2/Makefile.am
@@ -49,14 +49,14 @@ libpackagekit_qt2_la_SOURCES =					\
 	signature.cpp						\
 	eula.h							\
 	eula.cpp						\
+	package.h						\
+	package.cpp						\
 	transactionproxy.h					\
 	transactionproxy.cpp					\
 	transactionprivate.h					\
 	transactionprivate.cpp					\
 	transaction.h						\
 	transaction.cpp						\
-	package.h						\
-	package.cpp						\
 	daemonprivate.h						\
 	daemonprivate.cpp					\
 	daemonproxy.h						\
diff --git a/lib/packagekit-qt2/daemon.cpp b/lib/packagekit-qt2/daemon.cpp
index 566e01e..e724948 100644
--- a/lib/packagekit-qt2/daemon.cpp
+++ b/lib/packagekit-qt2/daemon.cpp
@@ -23,12 +23,9 @@
 
 #include "daemon.h"
 #include "daemonprivate.h"
+#include "daemonproxy.h"
 
 #include "common.h"
-#include "daemonproxy.h"
-#include "transaction.h"
-#include "transactionprivate.h"
-#include "package.h"
 #include "util.h"
 
 #define PK_DESKTOP_DEFAULT_DATABASE		LOCALSTATEDIR "/lib/PackageKit/desktop-files.db"
diff --git a/lib/packagekit-qt2/daemon.h b/lib/packagekit-qt2/daemon.h
index bdd800c..46d3bc3 100644
--- a/lib/packagekit-qt2/daemon.h
+++ b/lib/packagekit-qt2/daemon.h
@@ -59,9 +59,7 @@ public:
         NetworkOnline,
         NetworkWired,
         NetworkWifi,
-        NetworkMobile,
-        /* this always has to be at the end of the list */
-        LastNetwork
+        NetworkMobile
     } Network;
 
     /**
@@ -71,9 +69,7 @@ public:
         UnknownAuthorize,
         AuthorizeYes,
         AuthorizeNo,
-        AuthorizeInteractive,
-        /* this always has to be at the end of the list */
-        LastAuthorize
+        AuthorizeInteractive
     } Authorize;
 
     /**
diff --git a/lib/packagekit-qt2/daemonprivate.h b/lib/packagekit-qt2/daemonprivate.h
index 5ed5225..99f30bc 100644
--- a/lib/packagekit-qt2/daemonprivate.h
+++ b/lib/packagekit-qt2/daemonprivate.h
@@ -31,7 +31,6 @@ class DaemonProxy;
 
 namespace PackageKit {
 
-class Transaction;
 class DaemonPrivate
 {
     Q_DECLARE_PUBLIC(Daemon)
diff --git a/lib/packagekit-qt2/package.cpp b/lib/packagekit-qt2/package.cpp
index 433176b..80830bd 100644
--- a/lib/packagekit-qt2/package.cpp
+++ b/lib/packagekit-qt2/package.cpp
@@ -83,6 +83,7 @@ Package::Package(const QString &packageId, Info info, const QString &summary)
     d_ptr->info = info;
     d_ptr->summary = summary;
     d_ptr->details = 0;
+    d_ptr->updateDetails = 0;
 
     // Break down the packageId
     QStringList tokens = packageId.split(";");
@@ -98,6 +99,18 @@ Package::Package()
     : d_ptr(new PackagePrivate)
 {
     d_ptr->details = 0;
+    d_ptr->updateDetails = 0;
+    d_ptr->info = UnknownInfo;
+}
+
+Package::Package(const Package &other)
+    : d_ptr(new PackagePrivate)
+{
+    d_ptr->details = 0;
+    d_ptr->updateDetails = 0;
+    d_ptr->info = UnknownInfo;
+
+    *this = other;
 }
 
 Package::~Package()
@@ -106,7 +119,9 @@ Package::~Package()
     if (d->details) {
         delete d->details;
     }
-    delete d;
+    if (d->updateDetails) {
+        delete d->updateDetails;
+    }
 }
 
 QString Package::id() const
@@ -157,42 +172,41 @@ bool Package::hasDetails() const
     return d->details;
 }
 
-QString Package::iconPath ()
+QString Package::iconPath() const
 {
-    Q_D(Package);
-    if (d->iconPath.isNull ()) {
-        d->iconPath = QString("");
-        QSqlDatabase db = QSqlDatabase::database();
-        if (!db.isOpen()) {
-            qDebug() << "Desktop files database is not open";
-            return d->iconPath;
-        }
+    Q_D(const Package);
 
-        QSqlQuery q(db);
-        q.prepare("SELECT filename FROM cache WHERE package = :name");
-        q.bindValue(":name", d->name);
-        if(q.exec()) {
-            if (q.next()) {
-                QFile desktopFile (q.value(0).toString());
-                if (desktopFile.open (QIODevice::ReadOnly | QIODevice::Text)) {
-                    while (!desktopFile.atEnd ()) {
-                        QByteArray line = desktopFile.readLine ().trimmed ();
-                        if (line.startsWith ("Icon=")) {
-                            d->iconPath = line.mid (5);
-                            break;
-                        }
+    QString path;
+    QSqlDatabase db = QSqlDatabase::database();
+    if (!db.isOpen()) {
+        qDebug() << "Desktop files database is not open";
+        return path;
+    }
+
+    QSqlQuery q(db);
+    q.prepare("SELECT filename FROM cache WHERE package = :name");
+    q.bindValue(":name", d->name);
+    if (q.exec()) {
+        if (q.next()) {
+            QFile desktopFile (q.value(0).toString());
+            if (desktopFile.open (QIODevice::ReadOnly | QIODevice::Text)) {
+                while (!desktopFile.atEnd ()) {
+                    QByteArray line = desktopFile.readLine().trimmed();
+                    if (line.startsWith("Icon=")) {
+                        path = line.mid(5);
+                        break;
                     }
-                    desktopFile.close ();
-                } else {
-                    qDebug() << "Cannot open desktop file " << q.value(0).toString ();
                 }
+                desktopFile.close();
+            } else {
+                qDebug() << "Cannot open desktop file " << q.value(0).toString();
             }
-        } else {
-            qDebug() << "Error while running query " << q.executedQuery();
         }
+    } else {
+        qDebug() << "Error while running query " << q.executedQuery();
     }
 
-    return d->iconPath;
+    return path;
 }
 
 QString Package::license() const
@@ -498,7 +512,7 @@ bool Package::operator==(const Package &package) const
 Package& Package::operator=(const Package &package)
 {
     Q_D(Package);
-    // TODO
+
     if (this != &package) // protect against invalid self-assignment
     {
         d->id = package.id();
@@ -538,8 +552,6 @@ Package& Package::operator=(const Package &package)
             d->updateDetails->issued = package.issued();
             d->updateDetails->updated = package.updated();
         }
-
-        return *this;
     }
     return *this;
 }
diff --git a/lib/packagekit-qt2/package.h b/lib/packagekit-qt2/package.h
index f48df55..6a9ee94 100644
--- a/lib/packagekit-qt2/package.h
+++ b/lib/packagekit-qt2/package.h
@@ -74,9 +74,7 @@ public:
         InfoReinstalling,
         InfoDowngrading,
         InfoPreparing,
-        InfoDecompressing,
-        /* this always has to be at the end of the list */
-        LastInfo
+        InfoDecompressing
     } Info;
 
     /**
@@ -118,8 +116,6 @@ public:
         GroupCollections,
         GroupVendor,
         GroupNewest,
-        /* this always has to be at the end of the list */
-        LastGroup
     } Group;
     typedef QSet<Group> Groups;
 
@@ -131,8 +127,6 @@ public:
         UpdateStateStable,
         UpdateStateUnstable,
         UpdateStateTesting,
-        /* this always has to be at the end of the list */
-        LastUpdateState
     } UpdateState;
 
     /**
@@ -146,12 +140,20 @@ public:
         RestartSystem,
         RestartSecuritySession,
         RestartSecuritySystem,
-        /* this always has to be at the end of the list */
-        LastRestart
     } Restart;
 
-    Package(const QString& packageId, Info info = UnknownInfo, const QString &summary = QString());
+    Package(const QString &packageId, Info info = UnknownInfo, const QString &summary = QString());
+
+    /**
+     * Constructs a copy of other.
+     */
+    Package(const Package &other);
+
+    /**
+     * Constructs a copy of other.
+     */
     Package();
+
     /**
      * Destructor
      */
@@ -402,7 +404,7 @@ public:
      * Returns the path to the package icon, if known
      * \return A QString holding the path to the package icon if known, an empty QString else
      */
-    QString iconPath();
+    QString iconPath() const;
 
     /**
      * Compares two packages by it's ids
diff --git a/lib/packagekit-qt2/signature.h b/lib/packagekit-qt2/signature.h
index 91dd626..be22033 100644
--- a/lib/packagekit-qt2/signature.h
+++ b/lib/packagekit-qt2/signature.h
@@ -38,8 +38,6 @@ public:
     typedef enum {
         UnknownType,
         TypeGpg,
-        /* this always has to be at the end of the list */
-        LastType
     } Type;
 
     /**
diff --git a/lib/packagekit-qt2/transaction.cpp b/lib/packagekit-qt2/transaction.cpp
index 6f9f801..803d4c1 100644
--- a/lib/packagekit-qt2/transaction.cpp
+++ b/lib/packagekit-qt2/transaction.cpp
@@ -23,10 +23,11 @@
 #include "transactionprivate.h"
 #include "transactionproxy.h"
 
-#include "daemonprivate.h"
+#include "daemon.h"
 #include "common.h"
-#include "package.h"
 #include "util.h"
+#include "signature.h"
+#include "package.h"
 
 #define CHECK_TRANSACTION                           \
         if (r.isError()) {                          \
@@ -166,7 +167,7 @@ Transaction::Transaction(const QString &tid,
 Transaction::~Transaction()
 {
     Q_D(Transaction);
-    qDebug() << "Destroying transaction with tid" << d->tid;
+//     qDebug() << "Destroying transaction with tid" << d->tid;
     delete d;
 }
 
@@ -464,9 +465,11 @@ void Transaction::installPackages(const Package &package, bool onlyTrusted)
     installPackages(QList<Package>() << package, onlyTrusted);
 }
 
-void Transaction::installSignature(Signature::Type type, const QString &keyId, const Package &package)
+void Transaction::installSignature(const Signature &sig)
 {
-    RUN_TRANSACTION(InstallSignature(Util::enumToString<Signature>(type, "Type", "Signature"), keyId, package.id()))
+    RUN_TRANSACTION(InstallSignature(Util::enumToString<Signature>(sig.type, "Type", "Signature"),
+                                     sig.keyId,
+                                     sig.package.id()))
 }
 
 void Transaction::refreshCache(bool force)
diff --git a/lib/packagekit-qt2/transaction.h b/lib/packagekit-qt2/transaction.h
index 66b8578..a6bd5e2 100644
--- a/lib/packagekit-qt2/transaction.h
+++ b/lib/packagekit-qt2/transaction.h
@@ -24,15 +24,13 @@
 
 #include <QtCore/QObject>
 
-#include "signature.h"
 #include "bitfield.h"
 #include "package.h"
-#include "eula.h"
 
 namespace PackageKit {
 
-class DaemonPrivate;
-
+class Signature;
+class Eula;
 /**
 * \class Transaction transaction.h Transaction
 * \author Adrien Bustany \e <madcat at mymadcat.com>
@@ -53,9 +51,8 @@ class TransactionPrivate;
 class Transaction : public QObject
 {
     Q_OBJECT
-    Q_ENUMS(Package::Group)
-    Q_ENUMS(InternalError)
-    Q_ENUMS(Roles)
+    Q_ENUMS(InternalsError)
+    Q_ENUMS(Role)
     Q_ENUMS(Error)
     Q_ENUMS(Exit)
     Q_ENUMS(Filter)
@@ -65,10 +62,9 @@ class Transaction : public QObject
     Q_ENUMS(Provides)
     Q_ENUMS(DistroUpgrade)
 public:
-        /**
+    /**
      * Describes an error at the daemon level (for example, PackageKit crashes or is unreachable)
      *
-     * \sa Client::error
      * \sa Transaction::error
      */
     typedef enum {
@@ -83,9 +79,7 @@ public:
         InternalErrorInvalidInput,
         InternalErrorInvalidFile,
         InternalErrorFunctionNotSupported,
-        InternalErrorDaemonUnreachable,
-        /* this always has to be at the end of the list */
-        LastInternalError
+        InternalErrorDaemonUnreachable
     } InternalError;
 
     typedef enum {
@@ -124,15 +118,13 @@ public:
         RoleSimulateInstallPackages,
         RoleSimulateRemovePackages,
         RoleSimulateUpdatePackages,
-        RoleUpgradeSystem, // Since 0.6.11
-        /* this always has to be at the end of the list */
-        LastRole
+        RoleUpgradeSystem // Since 0.6.11
     } Role;
     typedef Bitfield Roles;
 
     /**
-    * Lists the different types of error
-    */
+     * Lists the different types of error
+     */
     typedef enum {
         UnknownError,
         ErrorOom,
@@ -198,9 +190,7 @@ public:
         ErrorPackageDatabaseChanged,
         ErrorProvideTypeNotSupported,
         ErrorInstallRootInvalid,
-        ErrorCannotFetchSources,
-        /* this always has to be at the end of the list */
-        LastError
+        ErrorCannotFetchSources
     } Error;
 
     /**
@@ -216,9 +206,7 @@ public:
         ExitEulaRequired,
         ExitKilled, /* when we forced the cancel, but had to sigkill */
         ExitMediaChangeRequired,
-        ExitNeedUntrusted,
-        /* this always has to be at the end of the list */
-        LastExit
+        ExitNeedUntrusted
     } Exit;
 
     /**
@@ -276,9 +264,7 @@ public:
         MessageAutoremoveIgnored,
         MessageRepoMetadataDownloadFailed,
         MessageRepoForDevelopersOnly,
-        MessageOtherUpdatesHeldBack,
-        /* this always has to be at the end of the list */
-        LastMessage
+        MessageOtherUpdatesHeldBack
     } Message;
 
     /**
@@ -321,9 +307,7 @@ public:
         StatusScanProcessList,
         StatusCheckExecutableFiles,
         StatusCheckLibraries,
-        StatusCopyFiles,
-        /* this always has to be at the end of the list */
-        LastStatus
+        StatusCopyFiles
     } Status;
 
     /**
@@ -333,9 +317,7 @@ public:
         UnknownMediaType,
         MediaTypeCd,
         MediaTypeDvd,
-        MediaTypeDisc,
-        /* this always has to be at the end of the list */
-        LastMediaType
+        MediaTypeDisc
     } MediaType;
 
     /**
@@ -350,9 +332,7 @@ public:
         ProvidesMimetype,
         ProvidesFont,
         ProvidesHardwareDriver,
-        ProvidesPostscriptDriver,
-        /* this always has to be at the end of the list */
-        LastProvides
+        ProvidesPostscriptDriver
     } Provides;
 
     /**
@@ -361,9 +341,7 @@ public:
     typedef enum {
         UnknownDistroUpgrade,
         DistroUpgradeStable,
-        DistroUpgradeUnstable,
-        /* this always has to be at the end of the list */
-        LastDistroUpgrade
+        DistroUpgradeUnstable
     } DistroUpgrade;
 
     /**
@@ -551,7 +529,7 @@ public:
     /**
      * \brief Accepts an EULA
      *
-     * The EULA is identified by the EulaInfo structure \p info
+     * The EULA is identified by the \sa Eula structure \p info
      *
      * \note You need to restart the transaction which triggered the EULA manually
      *
@@ -692,7 +670,7 @@ public:
      *
      * \p type, \p keyId and \p package generally come from the Transaction::repoSignatureRequired
      */
-    void installSignature(Signature::Type type, const QString &keyId, const Package &package);
+    void installSignature(const Signature &signature);
 
     /**
      * Refreshes the package manager's cache
@@ -902,7 +880,7 @@ Q_SIGNALS:
      * \note You will need to relaunch the transaction after accepting the EULA
      * \sa acceptEula()
      */
-    void eulaRequired(const Eula &eula);
+    void eulaRequired(const PackageKit::Eula &eula);
 
     /**
      * Emitted when a different media is required in order to fetch packages
diff --git a/lib/packagekit-qt2/transactionprivate.cpp b/lib/packagekit-qt2/transactionprivate.cpp
index bde10d0..d8145ed 100644
--- a/lib/packagekit-qt2/transactionprivate.cpp
+++ b/lib/packagekit-qt2/transactionprivate.cpp
@@ -22,9 +22,10 @@
 #include <QtCore/QStringList>
 
 #include "transactionprivate.h"
-#include "transaction.h"
+
 #include "package.h"
 #include "signature.h"
+#include "eula.h"
 #include "util.h"
 
 using namespace PackageKit;
@@ -137,7 +138,7 @@ void TransactionPrivate::message(const QString &type, const QString &message)
 void TransactionPrivate::package(const QString &info, const QString &pid, const QString &summary)
 {
     Q_Q(Transaction);
-    q->package(Package(pid, static_cast<Package::Info>(Util::enumFromString<Transaction>(info, "Info", "Info")), summary));
+    q->package(Package(pid, static_cast<Package::Info>(Util::enumFromString<Package>(info, "Info", "Info")), summary));
 }
 
 void TransactionPrivate::repoSignatureRequired(const QString &pid,
diff --git a/lib/packagekit-qt2/transactionprivate.h b/lib/packagekit-qt2/transactionprivate.h
index 04729a2..9d1d2a8 100644
--- a/lib/packagekit-qt2/transactionprivate.h
+++ b/lib/packagekit-qt2/transactionprivate.h
@@ -19,20 +19,18 @@
  * Boston, MA 02110-1301, USA.
  */
 
-#ifndef TRANSACTION_PRIVATE_H
-#define TRANSACTION_PRIVATE_H
+#ifndef PACKAGEKIT_TRANSACTION_PRIVATE_H
+#define PACKAGEKIT_TRANSACTION_PRIVATE_H
 
 #include <QtCore/QString>
 #include <QtCore/QHash>
 
-#include "daemon.h"
+#include "transaction.h"
 
 class TransactionProxy;
 
 namespace PackageKit {
 
-class Package;
-class Transaction;
 class TransactionPrivate
 {
     Q_DECLARE_PUBLIC(Transaction)
diff --git a/lib/packagekit-qt2/util.h b/lib/packagekit-qt2/util.h
index 72f86c3..d8b0723 100644
--- a/lib/packagekit-qt2/util.h
+++ b/lib/packagekit-qt2/util.h
@@ -63,13 +63,9 @@ public:
             }
         };
 
-        if(!prefix.isNull())
+        if (!prefix.isNull()) {
             realName = prefix + realName;
-
-        // Action quirk
-        if(enumName == QLatin1String("Action") && realName == QLatin1String("ActionUpdatePackage"))
-            realName = "ActionUpdatePackages";
-
+        }
 
         int id = T::staticMetaObject.indexOfEnumerator(enumName);
         QMetaEnum e = T::staticMetaObject.enumerator(id);
@@ -78,7 +74,7 @@ public:
         if (enumValue == -1) {
             enumValue = e.keyToValue(QString("Unknown").append(enumName).toAscii().data());
             if (!QString(enumName).isEmpty()) {
-                qDebug() << "enumFromString (" << enumName << ") : converted" << str << "to" << QString("Unknown").append(enumName) << ", enum value" << enumValue;
+                qDebug() << "enumFromString (" << enumName << ") : converted" << str << "to" << QString("Unknown").append(enumName) << ", enum id" << id;
             }
         }
         return enumValue;
@@ -114,15 +110,9 @@ public:
             if(pkName.indexOf("Not-") == 0) {
                 pkName = pkName.replace(0, 4, "~");
             }
-            if (pkName == QLatin1String("No-Filter")) {
-                pkName = "none";
-            }
-            if (pkName == QLatin1String("Development")) {
-                pkName = "devel";
-            }
-            if (pkName == QLatin1String("~Development")) {
-                pkName = "~devel";
-            }
+//             if (pkName == QLatin1String("No-Filter")) {
+//                 pkName = "none";
+//             }
         }
 
         return pkName.toLower();
commit 7606be5004d8bee99c3fd16f3c559f0643f030e4
Author: Daniel Nicoletti <dantti85-pk at yahoo.com.br>
Date:   Mon May 2 14:05:11 2011 -0300

    packagekit-qt2: change the Transaction constructor to be more convinient

diff --git a/lib/packagekit-qt2/daemonprivate.cpp b/lib/packagekit-qt2/daemonprivate.cpp
index efaf1cb..f9c6631 100644
--- a/lib/packagekit-qt2/daemonprivate.cpp
+++ b/lib/packagekit-qt2/daemonprivate.cpp
@@ -42,7 +42,7 @@ QList<Transaction*> DaemonPrivate::transactions(const QStringList& tids, QObject
 {
     QList<Transaction*> transactionList;
     foreach (const QString &tid, tids) {
-        Transaction *transaction = new Transaction(parent, tid);
+        Transaction *transaction = new Transaction(tid, parent);
         transactionList << transaction;
     }
     return transactionList;
diff --git a/lib/packagekit-qt2/transaction.cpp b/lib/packagekit-qt2/transaction.cpp
index 4dfa94b..6f9f801 100644
--- a/lib/packagekit-qt2/transaction.cpp
+++ b/lib/packagekit-qt2/transaction.cpp
@@ -41,10 +41,22 @@
 
 using namespace PackageKit;
 
-Transaction::Transaction(QObject *parent, const QString &tid) :
+Transaction::Transaction(QObject *parent) :
     QObject(parent),
     d_ptr(new TransactionPrivate(this))
 {
+    init();
+}
+
+Transaction::Transaction(const QString &tid, QObject *parent) :
+    QObject(parent),
+    d_ptr(new TransactionPrivate(this))
+{
+    init(tid);
+}
+
+void Transaction::init(const QString &tid)
+{
     Q_D(Transaction);
 
     d->tid = tid;
diff --git a/lib/packagekit-qt2/transaction.h b/lib/packagekit-qt2/transaction.h
index b74b8cf..66b8578 100644
--- a/lib/packagekit-qt2/transaction.h
+++ b/lib/packagekit-qt2/transaction.h
@@ -367,6 +367,17 @@ public:
     } DistroUpgrade;
 
     /**
+     * Create a transaction object with a new transaction id
+     *
+     * The transaction object \b cannot be reused
+     * (i.e. simulateInstallPackages then installPackages)
+     *
+     * \warning after creating the transaction object be sure
+     * to verify if it doesn't have any \sa error()
+     */
+    Transaction(QObject *parent = 0);
+
+    /**
      * Create a transaction object with transaction id \p tid
      * \note The if \p tid is a NULL string then it will automatically
      * asks PackageKit for a tid
@@ -377,7 +388,7 @@ public:
      * \warning after creating the transaction object be sure
      * to verify if it doesn't have any \sa error()
      */
-    Transaction(QObject *parent = 0, const QString &tid = QString());
+    Transaction(const QString &tid, QObject *parent = 0);
 
     /**
      * Destructor
@@ -503,7 +514,7 @@ public:
     QDateTime timespec() const;
 
     /**
-     * Returns weither the trasaction succeded or not
+     * Returns weither the transaction succeded or not
      * \return true if the transaction succeeded, false else
      * \note This function only returns a real value for old transactions returned by getOldTransactions
      */
@@ -953,6 +964,7 @@ protected:
     TransactionPrivate * const d_ptr;
 
 private:
+    void init(const QString &tid = QString());
     Transaction(const QString &tid,
                 const QString &timespec,
                 bool succeeded,
commit b36d71a4bf61d07ad4433cda3f4b8952dee4ab4f
Merge: d17fcd6... a275155...
Author: Daniel Nicoletti <dantti85-pk at yahoo.com.br>
Date:   Mon May 2 13:46:09 2011 -0300

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

commit d17fcd659f7d41c80ac0d452ce998497379a2a11
Author: Daniel Nicoletti <dantti85-pk at yahoo.com.br>
Date:   Mon May 2 13:43:45 2011 -0300

    packagekit-qt2: Include QSet in package.h so that Groups get defined

diff --git a/lib/packagekit-qt2/package.h b/lib/packagekit-qt2/package.h
index 74e60a2..f48df55 100644
--- a/lib/packagekit-qt2/package.h
+++ b/lib/packagekit-qt2/package.h
@@ -24,6 +24,7 @@
 
 #include <QtCore/QString>
 #include <QtCore/QDateTime>
+#include <QtCore/QSet>
 
 namespace PackageKit {
 
commit a275155b4d2dff3d49dc27d89ea287dd278500f2
Author: Matthias Klumpp <matthias at nlinux.org>
Date:   Mon May 2 17:26:19 2011 +0200

    trivial: Add gitigore file to qt-2 binding dir
    
    Ignore some auto-generated files.

diff --git a/lib/packagekit-qt2/.gitignore b/lib/packagekit-qt2/.gitignore
new file mode 100644
index 0000000..70c2c32
--- /dev/null
+++ b/lib/packagekit-qt2/.gitignore
@@ -0,0 +1,10 @@
+*.moc
+*.stamp
+*.so*
+*.la
+*.o
+*.lo
+daemonproxy.cpp
+daemonproxy.h
+transactionproxy.cpp
+transactionproxy.h
commit fd9a46eff894d3e45228d0b90ca0b11373d75cf8
Author: Matthias Klumpp <matthias at nlinux.org>
Date:   Mon May 2 17:24:15 2011 +0200

    Add header name to GIR and set export package
    
    Without these changes, the GIR is not usable.

diff --git a/lib/packagekit-glib2/Makefile.am b/lib/packagekit-glib2/Makefile.am
index ea16664..35ad6b5 100644
--- a/lib/packagekit-glib2/Makefile.am
+++ b/lib/packagekit-glib2/Makefile.am
@@ -243,7 +243,12 @@ introspection_sources = $(libpackagekit_glib2_la_SOURCES)
 PackageKitGlib-1.0.gir: libpackagekit-glib2.la
 PackageKitGlib_1_0_gir_INCLUDES = GObject-2.0 Gio-2.0
 PackageKitGlib_1_0_gir_CFLAGS = $(INCLUDES) -DI_KNOW_THE_PACKAGEKIT_GLIB2_API_IS_SUBJECT_TO_CHANGE
-PackageKitGlib_1_0_gir_SCANNERFLAGS = --identifier-prefix=Pk --symbol-prefix=pk_ --warn-all --add-include-path=$(srcdir)
+PackageKitGlib_1_0_gir_SCANNERFLAGS = --identifier-prefix=Pk \
+					--symbol-prefix=pk_ \
+					--warn-all \
+					--add-include-path=$(srcdir) \
+					--c-include="packagekit-glib2/packagekit.h"
+PackageKitGlib_1_0_gir_EXPORT_PACKAGES = packagekit-glib2
 PackageKitGlib_1_0_gir_LIBS = libpackagekit-glib2.la
 PackageKitGlib_1_0_gir_FILES = $(introspection_sources)
 INTROSPECTION_GIRS += PackageKitGlib-1.0.gir
commit 5819a3a9544c10835f5a4edca555ef93a7d304c4
Author: Daniel Nicoletti <dantti85-pk at yahoo.com.br>
Date:   Mon May 2 12:07:44 2011 -0300

    packagekit-qt2: As always adding Signature missing file

diff --git a/lib/packagekit-qt2/Signature b/lib/packagekit-qt2/Signature
new file mode 100644
index 0000000..975ba5a
--- /dev/null
+++ b/lib/packagekit-qt2/Signature
@@ -0,0 +1 @@
+#include "signature.h"
commit 8783a6bd29c4f8dab297def9b024b5a10d10aed6
Author: Daniel Nicoletti <dantti85-pk at yahoo.com.br>
Date:   Mon May 2 12:04:57 2011 -0300

    packagekit-qt2: Add Eula class to avoid API breaks in case pk changes

diff --git a/lib/packagekit-qt2/Eula b/lib/packagekit-qt2/Eula
new file mode 100644
index 0000000..48fe042
--- /dev/null
+++ b/lib/packagekit-qt2/Eula
@@ -0,0 +1 @@
+#include "eula.h"
diff --git a/lib/packagekit-qt2/Makefile.am b/lib/packagekit-qt2/Makefile.am
index 66ca7d5..dca1f5b 100644
--- a/lib/packagekit-qt2/Makefile.am
+++ b/lib/packagekit-qt2/Makefile.am
@@ -33,6 +33,8 @@ libpackagekit_qt2_includedir = $(includedir)/PackageKit/packagekit-qt2
 libpackagekit_qt2_include_HEADERS =				\
 	Signature						\
 	signature.h						\
+	Eula							\
+	eula.h							\
 	Package							\
 	Transaction						\
 	Daemon							\
@@ -45,6 +47,8 @@ libpackagekit_qt2_include_HEADERS =				\
 libpackagekit_qt2_la_SOURCES =					\
 	signature.h						\
 	signature.cpp						\
+	eula.h							\
+	eula.cpp						\
 	transactionproxy.h					\
 	transactionproxy.cpp					\
 	transactionprivate.h					\
diff --git a/lib/packagekit-qt2/eula.cpp b/lib/packagekit-qt2/eula.cpp
new file mode 100644
index 0000000..b7b379a
--- /dev/null
+++ b/lib/packagekit-qt2/eula.cpp
@@ -0,0 +1,22 @@
+/*
+ * This file is part of the QPackageKit project
+ * Copyright (C) 2008 Adrien Bustany <madcat at mymadcat.com>
+ * Copyright (C) 2010-2011 Daniel Nicoletti <dantti85-pk at yahoo.com.br>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "eula.h"
diff --git a/lib/packagekit-qt2/eula.h b/lib/packagekit-qt2/eula.h
new file mode 100644
index 0000000..d752aa6
--- /dev/null
+++ b/lib/packagekit-qt2/eula.h
@@ -0,0 +1,56 @@
+/*
+ * This file is part of the QPackageKit project
+ * Copyright (C) 2010-2011 Daniel Nicoletti <dantti85-pk at yahoo.com.br>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef PACKAGEKIT_EULA_H
+#define PACKAGEKIT_EULA_H
+
+#include <QtCore/QObject>
+
+#include "package.h"
+
+namespace PackageKit {
+
+class Eula
+{
+public:
+    /**
+     * \c repoId is the id of the software repository containing the package
+     */
+    QString id;
+
+    /**
+     * \c package is the package for which an EULA is required
+     */
+    Package package;
+
+    /**
+     * Describes the name of the EULA's vendor
+     */
+    QString vendor;
+
+    /**
+     * Describes the EULA text
+     */
+    QString licenseAgreement;
+};
+
+} // End namespace PackageKit
+
+#endif
diff --git a/lib/packagekit-qt2/transaction.h b/lib/packagekit-qt2/transaction.h
index ef9633b..b74b8cf 100644
--- a/lib/packagekit-qt2/transaction.h
+++ b/lib/packagekit-qt2/transaction.h
@@ -27,6 +27,7 @@
 #include "signature.h"
 #include "bitfield.h"
 #include "package.h"
+#include "eula.h"
 
 namespace PackageKit {
 
@@ -890,7 +891,7 @@ Q_SIGNALS:
      * \note You will need to relaunch the transaction after accepting the EULA
      * \sa acceptEula()
      */
-    void eulaRequired(const QString &eulaId, const Package &package, const QString &vendor, const QString &licenseAgreement);
+    void eulaRequired(const Eula &eula);
 
     /**
      * Emitted when a different media is required in order to fetch packages
diff --git a/lib/packagekit-qt2/transactionprivate.cpp b/lib/packagekit-qt2/transactionprivate.cpp
index a723235..bde10d0 100644
--- a/lib/packagekit-qt2/transactionprivate.cpp
+++ b/lib/packagekit-qt2/transactionprivate.cpp
@@ -84,7 +84,13 @@ void TransactionPrivate::errorCode(const QString &error, const QString &details)
 void TransactionPrivate::eulaRequired(const QString &eulaId, const QString &pid, const QString &vendor, const QString &licenseAgreement)
 {
     Q_Q(Transaction);
-    q->eulaRequired(eulaId, Package(pid), vendor, licenseAgreement);
+    Eula eula;
+    eula.id = eulaId;
+    eula.package = Package(pid);
+    eula.vendor = vendor;
+    eula.licenseAgreement = licenseAgreement;
+
+    q->eulaRequired(eula);
 }
 
 void TransactionPrivate::mediaChangeRequired(const QString &mediaType, const QString &mediaId, const QString &mediaText)
commit 73ca225fba7d6781f96e1994c83d7c96892a73ef
Author: Daniel Nicoletti <dantti85-pk at yahoo.com.br>
Date:   Mon May 2 10:07:18 2011 -0300

    packagekit-qt2: Add Signature header and install Daemon header

diff --git a/lib/packagekit-qt2/Makefile.am b/lib/packagekit-qt2/Makefile.am
index 9579839..66ca7d5 100644
--- a/lib/packagekit-qt2/Makefile.am
+++ b/lib/packagekit-qt2/Makefile.am
@@ -31,9 +31,11 @@ lib_LTLIBRARIES =						\
 libpackagekit_qt2_includedir = $(includedir)/PackageKit/packagekit-qt2
 
 libpackagekit_qt2_include_HEADERS =				\
+	Signature						\
 	signature.h						\
 	Package							\
 	Transaction						\
+	Daemon							\
 	daemon.h						\
 	transaction.h						\
 	package.h						\
@@ -62,8 +64,6 @@ libpackagekit_qt2_la_SOURCES =					\
 	bitfield.h						\
 	bitfield.cpp						\
 	common.h						\
-	Package							\
-	Transaction						\
 	dbus_proxies.stamp					\
 	$(MOCFILES)						\
 	$(NULL)
commit 9ba55e479e1d1b251aaa443b9304fef2b1374e74
Merge: 03d8d9c... 1213790...
Author: Daniel Nicoletti <dantti85-pk at yahoo.com.br>
Date:   Sun May 1 23:49:37 2011 -0300

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

commit 03d8d9c3fcc619ddf4950111990b69069a12c074
Author: Daniel Nicoletti <dantti85-pk at yahoo.com.br>
Date:   Sun May 1 23:47:50 2011 -0300

    aptcc: Fix configure.ac to avoid pk-qt linking against apt-pkg

diff --git a/backends/aptcc/Makefile.am b/backends/aptcc/Makefile.am
index 04e5b6f..b3f075c 100644
--- a/backends/aptcc/Makefile.am
+++ b/backends/aptcc/Makefile.am
@@ -13,7 +13,7 @@ libpk_backend_aptcc_la_SOURCES = pkg_acqfile.cpp \
 				 rsources.cpp \
 				 apt.cpp \
 				 pk-backend-aptcc.cpp
-libpk_backend_aptcc_la_LIBADD = -lcrypt $(PK_PLUGIN_LIBS)
+libpk_backend_aptcc_la_LIBADD = -lcrypt -lapt-pkg $(PK_PLUGIN_LIBS)
 libpk_backend_aptcc_la_LDFLAGS = -module -avoid-version $(APTCC_LIBS) $(GSTREAMER_LIBS)
 libpk_backend_aptcc_la_CFLAGS = $(PK_PLUGIN_CFLAGS)
 libpk_backend_aptcc_la_CPPFLAGS = $(PK_PLUGIN_CFLAGS) $(APTCC_CFLAGS) $(GSTREAMER_CFLAGS)
diff --git a/configure.ac b/configure.ac
index 64c33ab..d6520f1 100644
--- a/configure.ac
+++ b/configure.ac
@@ -686,6 +686,12 @@ if test x$enable_aptcc = xyes; then
 	dnl Use C++
 	AC_LANG([C++])
 
+	# check we have apt and gstreamer headers
+	save_CPPFLAGS="$CPPFLAGS"
+	save_LDFLAGS="$LDFLAGS"
+	save_CFLAGS="$CFLAGS"
+	save_LIBS="$LIBS"
+
 	AC_CHECK_LIB(apt-pkg, main, , [AC_MSG_ERROR([Can't find the APT libraries -- please install libapt-pkg-dev])])
 	AC_CHECK_HEADER(apt-pkg/init.h, , [AC_MSG_ERROR([Can't find the APT header files -- please install libapt-pkg-dev])])
 
@@ -711,6 +717,11 @@ if test x$enable_aptcc = xyes; then
 			  AC_MSG_RESULT([yes])
 			  AC_DEFINE([HAVE_DDTP], [], [Set to true if apt is DDTP-enabled]),
 			  AC_MSG_RESULT([no]))
+
+	CPPFLAGS="$save_CPPFLAGS"
+	LDFLAGS="$save_LDFLAGS"
+	CFLAGS="$save_CFLAGS"
+	LIBS="$save_LIBS"
 fi
 
 if test x$enable_box = xyes; then
commit de25cb865003dac7d9b233cd94b1da256f051785
Author: Daniel Nicoletti <dantti85-pk at yahoo.com.br>
Date:   Sun May 1 23:16:43 2011 -0300

    packagekit-qt2: Initial commit, brand new API, hardest of my life

diff --git a/configure.ac b/configure.ac
index e3d25ce..64c33ab 100644
--- a/configure.ac
+++ b/configure.ac
@@ -43,6 +43,15 @@ AC_SUBST(LT_CURRENT)
 AC_SUBST(LT_REVISION)
 AC_SUBST(LT_AGE)
 
+# libtool versioning - this applies to libpackagekit-qt2
+#
+LT_QT_CURRENT=2
+LT_QT_REVISION=0
+LT_QT_AGE=0
+AC_SUBST(LT_QT_CURRENT)
+AC_SUBST(LT_QT_REVISION)
+AC_SUBST(LT_QT_AGE)
+
 AC_PROG_CC
 AC_PROG_CXX
 AC_PROG_INSTALL
@@ -832,6 +841,9 @@ lib/packagekit-qt/modules/Makefile
 lib/packagekit-qt/src/Makefile
 lib/packagekit-qt/test/Makefile
 lib/packagekit-qt/packagekit-qt.pc
+lib/packagekit-qt2/Makefile
+lib/packagekit-qt2/modules/Makefile
+lib/packagekit-qt2/packagekit-qt2.pc
 lib/python/Makefile
 lib/python/packagekit/Makefile
 policy/Makefile
diff --git a/lib/Makefile.am b/lib/Makefile.am
index fab4805..abdd724 100644
--- a/lib/Makefile.am
+++ b/lib/Makefile.am
@@ -3,3 +3,7 @@ SUBDIRS = python packagekit-glib2
 if PK_BUILD_QT
 SUBDIRS += packagekit-qt
 endif
+
+if PK_BUILD_QT
+SUBDIRS += packagekit-qt2
+endif
diff --git a/lib/packagekit-qt2/Daemon b/lib/packagekit-qt2/Daemon
new file mode 100644
index 0000000..05d4d36
--- /dev/null
+++ b/lib/packagekit-qt2/Daemon
@@ -0,0 +1 @@
+#include "daemon.h"
diff --git a/lib/packagekit-qt2/Doxyfile b/lib/packagekit-qt2/Doxyfile
new file mode 100644
index 0000000..7a2125b
--- /dev/null
+++ b/lib/packagekit-qt2/Doxyfile
@@ -0,0 +1,1258 @@
+# Doxyfile 1.5.2
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project
+#
+# All text after a hash (#) is considered a comment and will be ignored
+# The format is:
+#       TAG = value [value, ...]
+# For lists items can also be appended using:
+#       TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ")
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# This tag specifies the encoding used for all characters in the config file that 
+# follow. The default is UTF-8 which is also the encoding used for all text before 
+# the first occurrence of this tag. Doxygen uses libiconv (or the iconv built into 
+# libc) for the transcoding. See http://www.gnu.org/software/libiconv for the list of 
+# possible encodings.
+
+DOXYFILE_ENCODING      = UTF-8
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded 
+# by quotes) that should identify the project.
+
+PROJECT_NAME           = QPackageKit2
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. 
+# This could be handy for archiving the generated documentation or 
+# if some version control system is used.
+
+PROJECT_NUMBER         = 2.0
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) 
+# base path where the generated documentation will be put. 
+# If a relative path is entered, it will be relative to the location 
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY       = ../../docs/packagekit-qt
+
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 
+# 4096 sub-directories (in 2 levels) under the output directory of each output 
+# format and will distribute the generated files over these directories. 
+# Enabling this option can be useful when feeding doxygen a huge amount of 
+# source files, where putting all generated files in the same directory would 
+# otherwise cause performance problems for the file system.
+
+CREATE_SUBDIRS         = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all 
+# documentation generated by doxygen is written. Doxygen will use this 
+# information to generate all constant output in the proper language. 
+# The default language is English, other supported languages are: 
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, 
+# Croatian, Czech, Danish, Dutch, Finnish, French, German, Greek, Hungarian, 
+# Italian, Japanese, Japanese-en (Japanese with English messages), Korean, 
+# Korean-en, Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian, 
+# Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian.
+
+OUTPUT_LANGUAGE        = English
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will 
+# include brief member descriptions after the members that are listed in 
+# the file and class documentation (similar to JavaDoc). 
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC      = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend 
+# the brief description of a member or function before the detailed description. 
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the 
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF           = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator 
+# that is used to form the text in various listings. Each string 
+# in this list, if found as the leading text of the brief description, will be 
+# stripped from the text and the result after processing the whole list, is 
+# used as the annotated text. Otherwise, the brief description is used as-is. 
+# If left blank, the following values are used ("$name" is automatically 
+# replaced with the name of the entity): "The $name class" "The $name widget" 
+# "The $name file" "is" "provides" "specifies" "contains" 
+# "represents" "a" "an" "the"
+
+ABBREVIATE_BRIEF       = 
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then 
+# Doxygen will generate a detailed section even if there is only a brief 
+# description.
+
+ALWAYS_DETAILED_SEC    = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all 
+# inherited members of a class in the documentation of that class as if those 
+# members were ordinary class members. Constructors, destructors and assignment 
+# operators of the base classes will not be shown.
+
+INLINE_INHERITED_MEMB  = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full 
+# path before files name in the file list and in the header files. If set 
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES        = YES
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag 
+# can be used to strip a user-defined part of the path. Stripping is 
+# only done if one of the specified strings matches the left-hand part of 
+# the path. The tag can be used to show relative paths in the file list. 
+# If left blank the directory from which doxygen is run is used as the 
+# path to strip.
+
+STRIP_FROM_PATH        = 
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of 
+# the path mentioned in the documentation of a class, which tells 
+# the reader which header file to include in order to use a class. 
+# If left blank only the name of the header file containing the class 
+# definition is used. Otherwise one should specify the include paths that 
+# are normally passed to the compiler using the -I flag.
+
+STRIP_FROM_INC_PATH    = 
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter 
+# (but less readable) file names. This can be useful is your file systems 
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES            = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen 
+# will interpret the first line (until the first dot) of a JavaDoc-style 
+# comment as the brief description. If set to NO, the JavaDoc 
+# comments will behave just like the Qt-style comments (thus requiring an 
+# explicit @brief command for a brief description.
+
+JAVADOC_AUTOBRIEF      = YES
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen 
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// 
+# comments) as a brief description. This used to be the default behaviour. 
+# The new default is to treat a multi-line C++ comment block as a detailed 
+# description. Set this tag to YES if you prefer the old behaviour instead.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the DETAILS_AT_TOP tag is set to YES then Doxygen 
+# will output the detailed description near the top, like JavaDoc.
+# If set to NO, the detailed description appears after the member 
+# documentation.
+
+DETAILS_AT_TOP         = NO
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented 
+# member inherits the documentation from any documented member that it 
+# re-implements.
+
+INHERIT_DOCS           = YES
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce 
+# a new page for each member. If set to NO, the documentation of a member will 
+# be part of the file/class/namespace that contains it.
+
+SEPARATE_MEMBER_PAGES  = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. 
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE               = 4
+
+# This tag can be used to specify a number of aliases that acts 
+# as commands in the documentation. An alias has the form "name=value". 
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to 
+# put the command \sideeffect (or @sideeffect) in the documentation, which 
+# will result in a user-defined paragraph with heading "Side Effects:". 
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES                = 
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C 
+# sources only. Doxygen will then generate output that is more tailored for C. 
+# For instance, some of the names that are used will be different. The list 
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C  = NO
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java 
+# sources only. Doxygen will then generate output that is more tailored for Java. 
+# For instance, namespaces will be presented as packages, qualified scopes 
+# will look different, etc.
+
+OPTIMIZE_OUTPUT_JAVA   = NO
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want to 
+# include (a tag file for) the STL sources as input, then you should 
+# set this tag to YES in order to let doxygen match functions declarations and 
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. 
+# func(std::string) {}). This also make the inheritance and collaboration 
+# diagrams that involve STL classes more complete and accurate.
+
+BUILTIN_STL_SUPPORT    = NO
+
+# If you use Microsoft's C++/CLI language, you should set this option to YES to
+# enable parsing support.
+
+CPP_CLI_SUPPORT        = NO
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC 
+# tag is set to YES, then doxygen will reuse the documentation of the first 
+# member in the group (if any) for the other members of the group. By default 
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC   = NO
+
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of 
+# the same type (for instance a group of public functions) to be put as a 
+# subgroup of that type (e.g. under the Public Functions section). Set it to 
+# NO to prevent subgrouping. Alternatively, this can be done per class using 
+# the \nosubgrouping command.
+
+SUBGROUPING            = YES
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in 
+# documentation are documented, even if no documentation was available. 
+# Private class members and static file members will be hidden unless 
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL            = YES
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class 
+# will be included in the documentation.
+
+EXTRACT_PRIVATE        = NO
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file 
+# will be included in the documentation.
+
+EXTRACT_STATIC         = YES
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) 
+# defined locally in source files will be included in the documentation. 
+# If set to NO only classes defined in header files are included.
+
+EXTRACT_LOCAL_CLASSES  = NO
+
+# This flag is only useful for Objective-C code. When set to YES local 
+# methods, which are defined in the implementation section but not in 
+# the interface are included in the documentation. 
+# If set to NO (the default) only methods in the interface are included.
+
+EXTRACT_LOCAL_METHODS  = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all 
+# undocumented members of documented classes, files or namespaces. 
+# If set to NO (the default) these members will be included in the 
+# various overviews, but no documentation section is generated. 
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS     = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all 
+# undocumented classes that are normally visible in the class hierarchy. 
+# If set to NO (the default) these classes will be included in the various 
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES     = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all 
+# friend (class|struct|union) declarations. 
+# If set to NO (the default) these declarations will be included in the 
+# documentation.
+
+HIDE_FRIEND_COMPOUNDS  = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any 
+# documentation blocks found inside the body of a function. 
+# If set to NO (the default) these blocks will be appended to the 
+# function's detailed documentation block.
+
+HIDE_IN_BODY_DOCS      = NO
+
+# The INTERNAL_DOCS tag determines if documentation 
+# that is typed after a \internal command is included. If the tag is set 
+# to NO (the default) then the documentation will be excluded. 
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS          = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate 
+# file names in lower-case letters. If set to YES upper-case letters are also 
+# allowed. This is useful if you have classes or files whose names only differ 
+# in case and if your file system supports case sensitive file names. Windows 
+# and Mac users are advised to set this option to NO.
+
+CASE_SENSE_NAMES       = YES
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen 
+# will show members with their full class and namespace scopes in the 
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES       = NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen 
+# will put a list of the files that are included by a file in the documentation 
+# of that file.
+
+SHOW_INCLUDE_FILES     = YES
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] 
+# is inserted in the documentation for inline members.
+
+INLINE_INFO            = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen 
+# will sort the (detailed) documentation of file and class members 
+# alphabetically by member name. If set to NO the members will appear in 
+# declaration order.
+
+SORT_MEMBER_DOCS       = YES
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the 
+# brief documentation of file, namespace and class members alphabetically 
+# by member name. If set to NO (the default) the members will appear in 
+# declaration order.
+
+SORT_BRIEF_DOCS        = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be 
+# sorted by fully-qualified names, including namespaces. If set to 
+# NO (the default), the class list will be sorted only by class name, 
+# not including the namespace part. 
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the 
+# alphabetical list.
+
+SORT_BY_SCOPE_NAME     = NO
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or 
+# disable (NO) the todo list. This list is created by putting \todo 
+# commands in the documentation.
+
+GENERATE_TODOLIST      = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or 
+# disable (NO) the test list. This list is created by putting \test 
+# commands in the documentation.
+
+GENERATE_TESTLIST      = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or 
+# disable (NO) the bug list. This list is created by putting \bug 
+# commands in the documentation.
+
+GENERATE_BUGLIST       = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or 
+# disable (NO) the deprecated list. This list is created by putting 
+# \deprecated commands in the documentation.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional 
+# documentation sections, marked by \if sectionname ... \endif.
+
+ENABLED_SECTIONS       = 
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines 
+# the initial value of a variable or define consists of for it to appear in 
+# the documentation. If the initializer consists of more lines than specified 
+# here it will be hidden. Use a value of 0 to hide initializers completely. 
+# The appearance of the initializer of individual variables and defines in the 
+# documentation can be controlled using \showinitializer or \hideinitializer 
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES  = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated 
+# at the bottom of the documentation of classes and structs. If set to YES the 
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES        = YES
+
+# If the sources in your project are distributed over multiple directories 
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy 
+# in the documentation. The default is NO.
+
+SHOW_DIRECTORIES       = NO
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that 
+# doxygen should invoke to get the current version for each file (typically from the 
+# version control system). Doxygen will invoke the program by executing (via 
+# popen()) the command <command> <input-file>, where <command> is the value of 
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file 
+# provided by doxygen. Whatever the program writes to standard output 
+# is used as the file version. See the manual for examples.
+
+FILE_VERSION_FILTER    = 
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated 
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET                  = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are 
+# generated by doxygen. Possible values are YES and NO. If left blank 
+# NO is used.
+
+WARNINGS               = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings 
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will 
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED   = YES
+
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for 
+# potential errors in the documentation, such as not documenting some 
+# parameters in a documented function, or documenting parameters that 
+# don't exist or using markup commands wrongly.
+
+WARN_IF_DOC_ERROR      = YES
+
+# This WARN_NO_PARAMDOC option can be abled to get warnings for 
+# functions that are documented, but have no documentation for their parameters 
+# or return value. If set to NO (the default) doxygen will only warn about 
+# wrong or incomplete parameter documentation, but not about the absence of 
+# documentation.
+
+WARN_NO_PARAMDOC       = NO
+
+# The WARN_FORMAT tag determines the format of the warning messages that 
+# doxygen can produce. The string should contain the $file, $line, and $text 
+# tags, which will be replaced by the file and line number from which the 
+# warning originated and the warning text. Optionally the format may contain 
+# $version, which will be replaced by the version of the file (if it could 
+# be obtained via FILE_VERSION_FILTER)
+
+WARN_FORMAT            = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning 
+# and error messages should be written. If left blank the output is written 
+# to stderr.
+
+WARN_LOGFILE           = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain 
+# documented source files. You may enter file names like "myfile.cpp" or 
+# directories like "/usr/src/myproject". Separate the files or directories 
+# with spaces.
+
+INPUT                  =  ../../lib/packagekit-qt/src
+# This tag can be used to specify the character encoding of the source files that 
+# doxygen parses. Internally doxygen uses the UTF-8 encoding, which is also the default 
+# input encoding. Doxygen uses libiconv (or the iconv built into libc) for the transcoding. 
+# See http://www.gnu.org/software/libiconv for the list of possible encodings.
+
+INPUT_ENCODING         = UTF-8
+
+# If the value of the INPUT tag contains directories, you can use the 
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
+# and *.h) to filter out the source-files in the directories. If left 
+# blank the following patterns are tested: 
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx 
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py
+
+FILE_PATTERNS          = 
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories 
+# should be searched for input files as well. Possible values are YES and NO. 
+# If left blank NO is used.
+
+RECURSIVE              = NO
+
+# The EXCLUDE tag can be used to specify files and/or directories that should 
+# excluded from the INPUT source files. This way you can easily exclude a 
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+
+EXCLUDE                = 
+
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or 
+# directories that are symbolic links (a Unix filesystem feature) are excluded 
+# from the input.
+
+EXCLUDE_SYMLINKS       = NO
+
+# If the value of the INPUT tag contains directories, you can use the 
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude 
+# certain files from those directories. Note that the wildcards are matched 
+# against the file with absolute path, so to exclude all test directories 
+# for example use the pattern */test/*
+
+EXCLUDE_PATTERNS       = *private* *proxy* polkitclient* util.*
+
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names 
+# (namespaces, classes, functions, etc.) that should be excluded from the output. 
+# The symbol name can be a fully qualified name, a word, or if the wildcard * is used, 
+# a substring. Examples: ANamespace, AClass, AClass::ANamespace, ANamespace::*Test
+
+# Exlude signal wrappers
+EXCLUDE_SYMBOLS        = 
+EXCLUDE_SYMBOLS       += __emit*
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or 
+# directories that contain example code fragments that are included (see 
+# the \include command).
+
+EXAMPLE_PATH           = 
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the 
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
+# and *.h) to filter out the source-files in the directories. If left 
+# blank all files are included.
+
+EXAMPLE_PATTERNS       = 
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be 
+# searched for input files to be used with the \include or \dontinclude 
+# commands irrespective of the value of the RECURSIVE tag. 
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE      = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or 
+# directories that contain image that are included in the documentation (see 
+# the \image command).
+
+IMAGE_PATH             = 
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should 
+# invoke to filter for each input file. Doxygen will invoke the filter program 
+# by executing (via popen()) the command <filter> <input-file>, where <filter> 
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an 
+# input file. Doxygen will then use the output that the filter program writes 
+# to standard output.  If FILTER_PATTERNS is specified, this tag will be 
+# ignored.
+
+INPUT_FILTER           = 
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern 
+# basis.  Doxygen will compare the file name with each pattern and apply the 
+# filter if there is a match.  The filters are a list of the form: 
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further 
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER 
+# is applied to all files.
+
+FILTER_PATTERNS        = 
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using 
+# INPUT_FILTER) will be used to filter the input files when producing source 
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).
+
+FILTER_SOURCE_FILES    = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will 
+# be generated. Documented entities will be cross-referenced with these sources. 
+# Note: To get rid of all source code in the generated output, make sure also 
+# VERBATIM_HEADERS is set to NO.
+
+SOURCE_BROWSER         = NO
+
+# Setting the INLINE_SOURCES tag to YES will include the body 
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES         = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct 
+# doxygen to hide any special comment blocks from generated source code 
+# fragments. Normal C and C++ comments will always remain visible.
+
+STRIP_CODE_COMMENTS    = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES (the default) 
+# then for each documented function all documented 
+# functions referencing it will be listed.
+
+REFERENCED_BY_RELATION = NO
+
+# If the REFERENCES_RELATION tag is set to YES (the default) 
+# then for each documented function all documented entities 
+# called/used by that function will be listed.
+
+REFERENCES_RELATION    = NO
+
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
+# link to the source code.  Otherwise they will link to the documentstion.
+
+REFERENCES_LINK_SOURCE = NO
+
+# If the USE_HTAGS tag is set to YES then the references to source code 
+# will point to the HTML generated by the htags(1) tool instead of doxygen 
+# built-in source browser. The htags tool is part of GNU's global source 
+# tagging system (see http://www.gnu.org/software/global/global.html). You 
+# will need version 4.8.6 or higher.
+
+USE_HTAGS              = NO
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen 
+# will generate a verbatim copy of the header file for each class for 
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS       = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index 
+# of all compounds will be generated. Enable this if the project 
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX     = NO
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then 
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns 
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX    = 5
+
+# In case all classes in a project start with a common prefix, all 
+# classes will be put under the same header in the alphabetical index. 
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that 
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX          = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will 
+# generate HTML output.
+
+GENERATE_HTML          = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT            = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for 
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank 
+# doxygen will generate files with .html extension.
+
+HTML_FILE_EXTENSION    = .html
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for 
+# each generated HTML page. If it is left blank doxygen will generate a 
+# standard header.
+
+HTML_HEADER            = 
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for 
+# each generated HTML page. If it is left blank doxygen will generate a 
+# standard footer.
+
+HTML_FOOTER            = 
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading 
+# style sheet that is used by each HTML page. It can be used to 
+# fine-tune the look of the HTML output. If the tag is left blank doxygen 
+# will generate a default style sheet. Note that doxygen will try to copy 
+# the style sheet file to the HTML output directory, so don't put your own 
+# stylesheet in the HTML output directory as well, or it will be erased!
+
+HTML_STYLESHEET        = 
+
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, 
+# files or namespaces will be aligned in HTML using tables. If set to 
+# NO a bullet list will be used.
+
+HTML_ALIGN_MEMBERS     = YES
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files 
+# will be generated that can be used as input for tools like the 
+# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) 
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP      = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can 
+# be used to specify the file name of the resulting .chm file. You 
+# can add a path in front of the file if the result should not be 
+# written to the html output directory.
+
+CHM_FILE               = 
+
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can 
+# be used to specify the location (absolute path including file name) of 
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run 
+# the HTML help compiler on the generated index.hhp.
+
+HHC_LOCATION           = 
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag 
+# controls if a separate .chi index file is generated (YES) or that 
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI           = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag 
+# controls whether a binary table of contents is generated (YES) or a 
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC             = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members 
+# to the contents of the HTML help documentation and to the tree view.
+
+TOC_EXPAND             = NO
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at 
+# top of each HTML page. The value NO (the default) enables the index and 
+# the value YES disables it.
+
+DISABLE_INDEX          = NO
+
+# This tag can be used to set the number of enum values (range [1..20]) 
+# that doxygen will group on one line in the generated HTML documentation.
+
+ENUM_VALUES_PER_LINE   = 4
+
+# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be
+# generated containing a tree-like index structure (just like the one that 
+# is generated for HTML Help). For this to work a browser that supports 
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, 
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are 
+# probably better off using the HTML help feature.
+
+GENERATE_TREEVIEW      = NO
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be 
+# used to set the initial width (in pixels) of the frame in which the tree 
+# is shown.
+
+TREEVIEW_WIDTH         = 250
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will 
+# generate Latex output.
+
+GENERATE_LATEX         = YES
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT           = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be 
+# invoked. If left blank `latex' will be used as the default command name.
+
+LATEX_CMD_NAME         = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to 
+# generate index for LaTeX. If left blank `makeindex' will be used as the 
+# default command name.
+
+MAKEINDEX_CMD_NAME     = makeindex
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact 
+# LaTeX documents. This may be useful for small projects and may help to 
+# save some trees in general.
+
+COMPACT_LATEX          = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used 
+# by the printer. Possible values are: a4, a4wide, letter, legal and 
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE             = a4wide
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX 
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES         = 
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for 
+# the generated latex document. The header should contain everything until 
+# the first chapter. If it is left blank doxygen will generate a 
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER           = 
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated 
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will 
+# contain links (just like the HTML output) instead of page references 
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS         = NO
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of 
+# plain latex in the generated Makefile. Set this option to YES to get a 
+# higher quality PDF documentation.
+
+USE_PDFLATEX           = NO
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. 
+# command to the generated LaTeX files. This will instruct LaTeX to keep 
+# running if errors occur, instead of asking the user for help. 
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE        = NO
+
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not 
+# include the index chapters (such as File Index, Compound Index, etc.) 
+# in the output.
+
+LATEX_HIDE_INDICES     = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output 
+# The RTF output is optimized for Word 97 and may not look very pretty with 
+# other RTF readers or editors.
+
+GENERATE_RTF           = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT             = rtf
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact 
+# RTF documents. This may be useful for small projects and may help to 
+# save some trees in general.
+
+COMPACT_RTF            = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated 
+# will contain hyperlink fields. The RTF file will 
+# contain links (just like the HTML output) instead of page references. 
+# This makes the output suitable for online browsing using WORD or other 
+# programs which support those fields. 
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS         = NO
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's 
+# config file, i.e. a series of assignments. You only have to provide 
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE    = 
+
+# Set optional variables used in the generation of an rtf document. 
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE    = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will 
+# generate man pages
+
+GENERATE_MAN           = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT             = man
+
+# The MAN_EXTENSION tag determines the extension that is added to 
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION          = .3
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, 
+# then it will generate one additional man file for each entity 
+# documented in the real man page(s). These additional files 
+# only source the real man page, but without them the man command 
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS              = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will 
+# generate an XML file that captures the structure of 
+# the code including all documentation.
+
+GENERATE_XML           = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `xml' will be used as the default path.
+
+XML_OUTPUT             = xml
+
+# The XML_SCHEMA tag can be used to specify an XML schema, 
+# which can be used by a validating XML parser to check the 
+# syntax of the XML files.
+
+XML_SCHEMA             = 
+
+# The XML_DTD tag can be used to specify an XML DTD, 
+# which can be used by a validating XML parser to check the 
+# syntax of the XML files.
+
+XML_DTD                = 
+
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will 
+# dump the program listings (including syntax highlighting 
+# and cross-referencing information) to the XML output. Note that 
+# enabling this will significantly increase the size of the XML output.
+
+XML_PROGRAMLISTING     = YES
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will 
+# generate an AutoGen Definitions (see autogen.sf.net) file 
+# that captures the structure of the code including all 
+# documentation. Note that this feature is still experimental 
+# and incomplete at the moment.
+
+GENERATE_AUTOGEN_DEF   = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will 
+# generate a Perl module file that captures the structure of 
+# the code including all documentation. Note that this 
+# feature is still experimental and incomplete at the 
+# moment.
+
+GENERATE_PERLMOD       = NO
+
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate 
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able 
+# to generate PDF and DVI output from the Perl module output.
+
+PERLMOD_LATEX          = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be 
+# nicely formatted so it can be parsed by a human reader.  This is useful 
+# if you want to understand what is going on.  On the other hand, if this 
+# tag is set to NO the size of the Perl module output will be much smaller 
+# and Perl will parse it just the same.
+
+PERLMOD_PRETTY         = YES
+
+# The names of the make variables in the generated doxyrules.make file 
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. 
+# This is useful so different doxyrules.make files included by the same 
+# Makefile don't overwrite each other's variables.
+
+PERLMOD_MAKEVAR_PREFIX = 
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor   
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will 
+# evaluate all C-preprocessor directives found in the sources and include 
+# files.
+
+ENABLE_PREPROCESSING   = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro 
+# names in the source code. If set to NO (the default) only conditional 
+# compilation will be performed. Macro expansion can be done in a controlled 
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION        = NO
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES 
+# then the macro expansion is limited to the macros specified with the 
+# PREDEFINED and EXPAND_AS_DEFINED tags.
+
+EXPAND_ONLY_PREDEF     = NO
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files 
+# in the INCLUDE_PATH (see below) will be search if a #include is found.
+
+SEARCH_INCLUDES        = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that 
+# contain include files that are not input files but should be processed by 
+# the preprocessor.
+
+INCLUDE_PATH           = 
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard 
+# patterns (like *.h and *.hpp) to filter out the header-files in the 
+# directories. If left blank, the patterns specified with FILE_PATTERNS will 
+# be used.
+
+INCLUDE_FILE_PATTERNS  = 
+
+# The PREDEFINED tag can be used to specify one or more macro names that 
+# are defined before the preprocessor is started (similar to the -D option of 
+# gcc). The argument of the tag is a list of macros of the form: name 
+# or name=definition (no spaces). If the definition and the = are 
+# omitted =1 is assumed. To prevent a macro definition from being 
+# undefined via #undef or recursively expanded use the := operator 
+# instead of the = operator.
+
+PREDEFINED             = 
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then 
+# this tag can be used to specify a list of macro names that should be expanded. 
+# The macro definition that is found in the sources will be used. 
+# Use the PREDEFINED tag if you want to use a different macro definition.
+
+EXPAND_AS_DEFINED      = 
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then 
+# doxygen's preprocessor will remove all function-like macros that are alone 
+# on a line, have an all uppercase name, and do not end with a semicolon. Such 
+# function macros are typically used for boiler-plate code, and will confuse 
+# the parser if not removed.
+
+SKIP_FUNCTION_MACROS   = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references   
+#---------------------------------------------------------------------------
+
+# The TAGFILES option can be used to specify one or more tagfiles. 
+# Optionally an initial location of the external documentation 
+# can be added for each tagfile. The format of a tag file without 
+# this location is as follows: 
+#   TAGFILES = file1 file2 ... 
+# Adding location for the tag files is done as follows: 
+#   TAGFILES = file1=loc1 "file2 = loc2" ... 
+# where "loc1" and "loc2" can be relative or absolute paths or 
+# URLs. If a location is present for each tag, the installdox tool 
+# does not have to be run to correct the links.
+# Note that each tag file must have a unique name
+# (where the name does NOT include the path)
+# If a tag file is not located in the directory in which doxygen 
+# is run, you must also specify the path to the tagfile here.
+
+TAGFILES               = 
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create 
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE       = 
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed 
+# in the class index. If set to NO only the inherited external classes 
+# will be listed.
+
+ALLEXTERNALS           = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed 
+# in the modules index. If set to NO, only the current project's groups will 
+# be listed.
+
+EXTERNAL_GROUPS        = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script 
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH              = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool   
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will 
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base 
+# or super classes. Setting the tag to NO turns the diagrams off. Note that 
+# this option is superseded by the HAVE_DOT option below. This is only a 
+# fallback. It is recommended to install and use dot, since it yields more 
+# powerful graphs.
+
+CLASS_DIAGRAMS         = YES
+
+# You can define message sequence charts within doxygen comments using the \msc 
+# command. Doxygen will then run the mscgen tool (see http://www.mcternan.me.uk/mscgen/) to 
+# produce the chart and insert it in the documentation. The MSCGEN_PATH tag allows you to 
+# specify the directory where the mscgen tool resides. If left empty the tool is assumed to 
+# be found in the default search path.
+
+MSCGEN_PATH            = 
+
+# If set to YES, the inheritance and collaboration graphs will hide 
+# inheritance and usage relations if the target is undocumented 
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS   = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is 
+# available from the path. This tool is part of Graphviz, a graph visualization 
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section 
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT               = NO
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for each documented class showing the direct and 
+# indirect inheritance relations. Setting this tag to YES will force the 
+# the CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH            = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for each documented class showing the direct and 
+# indirect implementation dependencies (inheritance, containment, and 
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH    = YES
+
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for groups, showing the direct groups dependencies
+
+GROUP_GRAPHS           = YES
+
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and 
+# collaboration diagrams in a style similar to the OMG's Unified Modeling 
+# Language.
+
+UML_LOOK               = NO
+
+# If set to YES, the inheritance and collaboration graphs will show the 
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS     = NO
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT 
+# tags are set to YES then doxygen will generate a graph for each documented 
+# file showing the direct and indirect include dependencies of the file with 
+# other documented files.
+
+INCLUDE_GRAPH          = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and 
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each 
+# documented header file showing the documented files that directly or 
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH      = YES
+
+# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will 
+# generate a call dependency graph for every global function or class method. 
+# Note that enabling this option will significantly increase the time of a run. 
+# So in most cases it will be better to enable call graphs for selected 
+# functions only using the \callgraph command.
+
+CALL_GRAPH             = NO
+
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then doxygen will 
+# generate a caller dependency graph for every global function or class method. 
+# Note that enabling this option will significantly increase the time of a run. 
+# So in most cases it will be better to enable caller graphs for selected 
+# functions only using the \callergraph command.
+
+CALLER_GRAPH           = NO
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen 
+# will graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY    = YES
+
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES 
+# then doxygen will show the dependencies a directory has on other directories 
+# in a graphical way. The dependency relations are determined by the #include
+# relations between the files in the directories.
+
+DIRECTORY_GRAPH        = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images 
+# generated by dot. Possible values are png, jpg, or gif
+# If left blank png will be used.
+
+DOT_IMAGE_FORMAT       = png
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be 
+# found. If left blank, it is assumed the dot tool can be found in the path.
+
+DOT_PATH               = 
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that 
+# contain dot files that are included in the documentation (see the 
+# \dotfile command).
+
+DOTFILE_DIRS           = 
+
+# The MAX_DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of 
+# nodes that will be shown in the graph. If the number of nodes in a graph 
+# becomes larger than this value, doxygen will truncate the graph, which is 
+# visualized by representing a node as a red box. Note that doxygen will always 
+# show the root nodes and its direct children regardless of this setting.
+
+DOT_GRAPH_MAX_NODES    = 50
+
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent 
+# background. This is disabled by default, which results in a white background. 
+# Warning: Depending on the platform used, enabling this option may lead to 
+# badly anti-aliased labels on the edges of a graph (i.e. they become hard to 
+# read).
+
+DOT_TRANSPARENT        = NO
+
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output 
+# files in one run (i.e. multiple -o and -T options on the command line). This 
+# makes dot run faster, but since only newer versions of dot (>1.8.10) 
+# support this, this feature is disabled by default.
+
+DOT_MULTI_TARGETS      = NO
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will 
+# generate a legend page explaining the meaning of the various boxes and 
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND        = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will 
+# remove the intermediate dot files that are used to generate 
+# the various graphs.
+
+DOT_CLEANUP            = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to the search engine   
+#---------------------------------------------------------------------------
+
+# The SEARCHENGINE tag specifies whether or not a search engine should be 
+# used. If set to NO the values of all tags below this one will be ignored.
+
+SEARCHENGINE           = NO
diff --git a/lib/packagekit-qt2/Makefile.am b/lib/packagekit-qt2/Makefile.am
new file mode 100644
index 0000000..9579839
--- /dev/null
+++ b/lib/packagekit-qt2/Makefile.am
@@ -0,0 +1,125 @@
+include ${top_srcdir}/moc.mk
+
+SUBDIRS = modules
+
+.NOTPARALLEL:
+
+NULL =
+
+INCLUDES = \
+	$(QTCORE_CFLAGS)					\
+	$(QTDBUS_CFLAGS)					\
+	$(QTSQL_CFLAGS)						\
+	-DLOCALSTATEDIR=\""$(localstatedir)"\" 			\
+	-DPACKAGE_LOCALE_DIR=\""$(prefix)/$(DATADIRNAME)/locale"\"
+
+METASOURCES = AUTO
+
+MOCFILES =							\
+	package.moc						\
+	signature.moc						\
+	daemon.moc						\
+	daemonproxy.moc						\
+	transactionproxy.moc					\
+	transaction.moc						\
+	$(NULL)
+
+lib_LTLIBRARIES =						\
+	libpackagekit-qt2.la					\
+	$(NULL)
+
+libpackagekit_qt2_includedir = $(includedir)/PackageKit/packagekit-qt2
+
+libpackagekit_qt2_include_HEADERS =				\
+	signature.h						\
+	Package							\
+	Transaction						\
+	daemon.h						\
+	transaction.h						\
+	package.h						\
+	bitfield.h						\
+	$(NULL)
+
+libpackagekit_qt2_la_SOURCES =					\
+	signature.h						\
+	signature.cpp						\
+	transactionproxy.h					\
+	transactionproxy.cpp					\
+	transactionprivate.h					\
+	transactionprivate.cpp					\
+	transaction.h						\
+	transaction.cpp						\
+	package.h						\
+	package.cpp						\
+	daemonprivate.h						\
+	daemonprivate.cpp					\
+	daemonproxy.h						\
+	daemonproxy.cpp						\
+	daemon.h						\
+	daemon.cpp						\
+	util.h							\
+	util.cpp						\
+	bitfield.h						\
+	bitfield.cpp						\
+	common.h						\
+	Package							\
+	Transaction						\
+	dbus_proxies.stamp					\
+	$(MOCFILES)						\
+	$(NULL)
+
+libpackagekit_qt2_la_LIBADD =					\
+	$(QTCORE_LIBS)						\
+	$(QTDBUS_LIBS)						\
+	$(QTSQL_LIBS)						\
+	$(NULL)
+
+libpackagekit_qt2_la_CFLAGS =					\
+	$(WARNINGFLAGS_CPP)					\
+	$(NULL)
+
+libpackagekit_qt2_la_LDFLAGS =					\
+	-version-info $(LT_QT_CURRENT):$(LT_QT_REVISION):$(LT_QT_AGE)	\
+	-export-dynamic						\
+	-no-undefined						\
+	$(NULL)
+
+CLEANFILES = $(BUILT_SOURCES)
+
+clean-local:
+	rm -f *~
+	rm -f $(CLEANFILES)
+
+EXTRA_DIST =							\
+	$(MOCFILES)						\
+	dbus_proxies.stamp					\
+	daemonproxy.h						\
+	daemonproxy.cpp						\
+	transactionproxy.h					\
+	transactionproxy.cpp					\
+	packagekit-qt2.pc.in					\
+	Doxyfile
+	$(NULL)
+
+MAINTAINERCLEANFILES =						\
+	dbus_proxies.stamp					\
+	transactionproxy.h					\
+	transactionproxy.cpp					\
+	daemonproxy.h						\
+	daemonproxy.cpp						\
+	$(NULL)
+
+BUILT_SOURCES=							\
+	dbus_proxies.stamp					\
+	$(MOCFILES)						\
+	$(NULL)
+
+dbus_proxies.stamp: ${top_srcdir}/src/org.freedesktop.PackageKit.xml ${top_srcdir}/src/org.freedesktop.PackageKit.Transaction.xml
+	qdbusxml2cpp -c DaemonProxy -p daemonproxy -m -N ${top_srcdir}/src/org.freedesktop.PackageKit.xml
+	qdbusxml2cpp -c TransactionProxy -p transactionproxy -m -N ${top_srcdir}/src/org.freedesktop.PackageKit.Transaction.xml
+	touch $@
+
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = 					\
+	packagekit-qt2.pc				\
+	$(NULL)
diff --git a/lib/packagekit-qt2/Package b/lib/packagekit-qt2/Package
new file mode 100644
index 0000000..b2b5c1f
--- /dev/null
+++ b/lib/packagekit-qt2/Package
@@ -0,0 +1 @@
+#include "package.h"
diff --git a/lib/packagekit-qt2/Transaction b/lib/packagekit-qt2/Transaction
new file mode 100644
index 0000000..1fadece
--- /dev/null
+++ b/lib/packagekit-qt2/Transaction
@@ -0,0 +1 @@
+#include "transaction.h"
diff --git a/lib/packagekit-qt2/bitfield.cpp b/lib/packagekit-qt2/bitfield.cpp
new file mode 100644
index 0000000..cc1c54e
--- /dev/null
+++ b/lib/packagekit-qt2/bitfield.cpp
@@ -0,0 +1,70 @@
+#include "bitfield.h"
+
+using namespace PackageKit;
+
+Bitfield::Bitfield () : m_val (0)
+{
+}
+
+Bitfield::Bitfield (qint64 val) : m_val (val)
+{
+}
+
+Bitfield::~Bitfield ()
+{
+}
+
+qint64 Bitfield::operator& (qint64 mask) const
+{
+	return m_val & (1 << mask);
+}
+
+qint64 Bitfield::operator&= (qint64 mask)
+{
+	m_val &= (1 << mask);
+	return m_val;
+}
+
+qint64 Bitfield::operator| (qint64 mask) const
+{
+	return m_val | (1 << mask);
+}
+
+qint64 Bitfield::operator|= (qint64 mask)
+{
+	m_val |= (1 << mask);
+	return m_val;
+}
+
+Bitfield Bitfield::operator& (Bitfield mask) const
+{
+	return m_val & mask.m_val;
+}
+
+Bitfield Bitfield::operator&= (Bitfield mask)
+{
+	m_val &= mask.m_val;
+	return m_val;
+}
+
+Bitfield Bitfield::operator| (Bitfield mask) const
+{
+	return m_val | mask.m_val;
+}
+
+Bitfield Bitfield::operator|= (Bitfield mask)
+{
+	m_val |= mask.m_val;
+	return m_val;
+}
+
+
+Bitfield& Bitfield::operator= (const Bitfield& other)
+{
+	if (this == &other)
+		return *this;
+
+	m_val = other.m_val;
+
+	return *this;
+}
diff --git a/lib/packagekit-qt2/bitfield.h b/lib/packagekit-qt2/bitfield.h
new file mode 100644
index 0000000..e39eacc
--- /dev/null
+++ b/lib/packagekit-qt2/bitfield.h
@@ -0,0 +1,33 @@
+#ifndef PACKAGEKIT_BITFIELD_H
+#define PACKAGEKIT_BITFIELD_H
+
+#include <QtGlobal>
+
+namespace PackageKit {
+
+class Bitfield
+{
+public:
+    Bitfield ();
+    Bitfield (qint64 val);
+    ~Bitfield ();
+
+    qint64 operator& (qint64 mask) const;
+    qint64 operator&= (qint64 mask);
+    qint64 operator| (qint64 mask) const;
+    qint64 operator|= (qint64 mask);
+
+    Bitfield operator& (Bitfield mask) const;
+    Bitfield operator&= (Bitfield mask);
+    Bitfield operator| (Bitfield mask) const;
+    Bitfield operator|= (Bitfield mask);
+
+    Bitfield& operator= (const Bitfield& other);
+
+private:
+    qint64 m_val;
+};
+
+} // End namespace PackageKit
+
+#endif
diff --git a/lib/packagekit-qt2/common.h b/lib/packagekit-qt2/common.h
new file mode 100644
index 0000000..eb5e57b
--- /dev/null
+++ b/lib/packagekit-qt2/common.h
@@ -0,0 +1,36 @@
+/*
+ * This file is part of the QPackageKit project
+ * Copyright (C) 2008 Adrien Bustany <madcat at mymadcat.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library 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 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#define PK_TRANSACTION_INTERFACE "org.freedesktop.PackageKit.Transaction"
+#define PK_NAME					"org.freedesktop.PackageKit"
+#define PK_PATH					"/org/freedesktop/PackageKit"
+
+#define AUTH_PACKAGE_INSTALL			"org.freedesktop.packagekit.package-install"
+#define AUTH_PACKAGE_INSTALL_UNTRUSTED		"org.freedesktop.packagekit.package-install-untrusted"
+#define AUTH_SYSTEM_TRUST_SIGNING_KEY		"org.freedesktop.packagekit.system-trust-signing-key"
+#define AUTH_PACKAGE_EULA_ACCEPT		"org.freedesktop.packagekit.package-eula-accept"
+#define AUTH_PACKAGE_REMOVE			"org.freedesktop.packagekit.package-remove"
+#define AUTH_SYSTEM_UPDATE			"org.freedesktop.packagekit.system-update"
+#define AUTH_SYSTEM_ROLLBACK			"org.freedesktop.packagekit.system-rollback"
+#define AUTH_SYSTEM_SOURCES_CONFIGURE		"org.freedesktop.packagekit.system-sources-configure"
+#define AUTH_SYSTEM_SOURCES_REFRESH		"org.freedesktop.packagekit.system-sources-refresh"
+#define AUTH_SYSTEM_NETWORK_PROXY_CONFIGURE	"org.freedesktop.packagekit.system-network-proxy-configure"
+#define AUTH_CANCEL_FOREIGN 			"org.freedesktop.packagekit.cancel-foreign"
+
diff --git a/lib/packagekit-qt2/daemon.cpp b/lib/packagekit-qt2/daemon.cpp
new file mode 100644
index 0000000..566e01e
--- /dev/null
+++ b/lib/packagekit-qt2/daemon.cpp
@@ -0,0 +1,237 @@
+/*
+* This file is part of the QPackageKit project
+* Copyright (C) 2008 Adrien Bustany <madcat at mymadcat.com>
+* Copyright (C) 2010-2011 Daniel Nicoletti <dantti85-pk at yahoo.com.br>
+*
+* This library is free software; you can redistribute it and/or
+* modify it under the terms of the GNU Library General Public
+* License as published by the Free Software Foundation; either
+* version 2 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
+* Library General Public License for more details.
+*
+* You should have received a copy of the GNU Library General Public License
+* along with this library; see the file COPYING.LIB. If not, write to
+* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+* Boston, MA 02110-1301, USA.
+*/
+
+#include <QtSql>
+
+#include "daemon.h"
+#include "daemonprivate.h"
+
+#include "common.h"
+#include "daemonproxy.h"
+#include "transaction.h"
+#include "transactionprivate.h"
+#include "package.h"
+#include "util.h"
+
+#define PK_DESKTOP_DEFAULT_DATABASE		LOCALSTATEDIR "/lib/PackageKit/desktop-files.db"
+
+using namespace PackageKit;
+
+Daemon* Daemon::m_global = 0;
+
+Daemon* Daemon::global()
+{
+    if(!m_global) {
+        m_global = new Daemon(qApp);
+    }
+
+    return m_global;
+}
+
+Daemon::Daemon(QObject *parent) :
+    QObject(parent),
+    d_ptr(new DaemonPrivate(this))
+{
+    Q_D(Daemon);
+    d->daemon = new ::DaemonProxy(PK_NAME, PK_PATH, QDBusConnection::systemBus(), this);
+
+    connect(d->daemon, SIGNAL(Changed()),
+            this, SIGNAL(changed()));
+    connect(d->daemon, SIGNAL(RepoListChanged()),
+            this, SIGNAL(repoListChanged()));
+    connect(d->daemon, SIGNAL(RestartSchedule()),
+            this, SIGNAL(restartScheduled()));
+    connect(d->daemon, SIGNAL(TransactionListChanged(const QStringList&)),
+            this, SIGNAL(transactionListChanged(const QStringList&)));
+    connect(d->daemon, SIGNAL(UpdatesChanged()),
+            this, SIGNAL(updatesChanged()));
+
+    // Set up database for desktop files
+    QSqlDatabase db;
+    db = QSqlDatabase::addDatabase("QSQLITE");
+    db.setDatabaseName (PK_DESKTOP_DEFAULT_DATABASE);
+    if (!db.open()) {
+        qDebug() << "Failed to initialize the desktop files database";
+    }
+}
+
+Daemon::~Daemon()
+{
+}
+
+Transaction::Roles Daemon::actions()
+{
+    QStringList roles = global()->d_ptr->daemon->roles().split(";");
+
+    Transaction::Roles flags;
+    foreach (const QString &role, roles) {
+        flags |= static_cast<Transaction::Role>(Util::enumFromString<Transaction>(role, "Role", "Role"));
+    }
+    return flags;
+}
+
+QString Daemon::backendName()
+{
+    return global()->d_ptr->daemon->backendName();
+}
+
+QString Daemon::backendDescription()
+{
+    return global()->d_ptr->daemon->backendDescription();
+}
+
+QString Daemon::backendAuthor()
+{
+    return global()->d_ptr->daemon->backendAuthor();
+}
+
+Transaction::Filters Daemon::filters()
+{
+    QStringList filters = global()->d_ptr->daemon->filters().split(";");
+
+    // Adapt a slight difference in the enum
+    if(filters.contains("none")) {
+        filters[filters.indexOf("none")] = "no-filter";
+    }
+
+    Transaction::Filters flags;
+    foreach (const QString &filter, filters) {
+        flags |= static_cast<Transaction::Filter>(Util::enumFromString<Transaction>(filter, "Filter", "Filter"));
+    }
+    return flags;
+}
+
+Package::Groups Daemon::groups()
+{
+    QStringList groups = global()->d_ptr->daemon->groups().split(";");
+
+    Package::Groups flags;
+    foreach (const QString &group, groups) {
+        flags.insert(static_cast<Package::Group>(Util::enumFromString<Package>(group, "Group", "Group")));
+    }
+    return flags;
+}
+
+bool Daemon::locked()
+{
+    return global()->d_ptr->daemon->locked();
+}
+
+QStringList Daemon::mimeTypes()
+{
+    return global()->d_ptr->daemon->mimeTypes().split(";");
+}
+
+Daemon::Network Daemon::networkState()
+{
+    QString state = global()->d_ptr->daemon->networkState();
+    return static_cast<Daemon::Network>(Util::enumFromString<Daemon>(state, "Network", "Network"));
+}
+
+QString Daemon::distroId()
+{
+    return global()->d_ptr->daemon->distroId();
+}
+
+Daemon::Authorize Daemon::canAuthorize(const QString &actionId)
+{
+    QString result = global()->d_ptr->daemon->CanAuthorize(actionId);
+    return static_cast<Daemon::Authorize>(Util::enumFromString<Daemon>(result, "Authorize", "Authorize"));
+}
+
+QString Daemon::getTid()
+{
+    return global()->d_ptr->daemon->GetTid();
+}
+
+uint Daemon::getTimeSinceAction(Transaction::Role role)
+{
+    QString roleName = Util::enumToString<Transaction>(role, "Role", "Role");
+    return global()->d_ptr->daemon->GetTimeSinceAction(roleName);
+}
+
+QStringList Daemon::getTransactions()
+{
+    return global()->d_ptr->daemon->GetTransactionList();
+}
+
+QList<Transaction*> Daemon::getTransactionsObj(QObject *parent)
+{
+    return global()->d_ptr->transactions(getTransactions(), parent);
+}
+
+void Daemon::setHints(const QStringList& hints)
+{
+    global()->d_ptr->hints = hints;
+}
+
+void Daemon::setHints(const QString& hints)
+{
+    global()->d_ptr->hints = QStringList() << hints;
+}
+
+QStringList Daemon::hints()
+{
+    return global()->d_ptr->hints;
+}
+
+Transaction::InternalError Daemon::setProxy(const QString& http_proxy, const QString& ftp_proxy)
+{
+    return Daemon::setProxy(http_proxy, QString(), ftp_proxy, QString(), QString(), QString());
+}
+
+Transaction::InternalError Daemon::setProxy(const QString& http_proxy, const QString& https_proxy, const QString& ftp_proxy, const QString& socks_proxy, const QString& no_proxy, const QString& pac)
+{
+    QDBusPendingReply<> r = global()->d_ptr->daemon->SetProxy(http_proxy, https_proxy, ftp_proxy, socks_proxy, no_proxy, pac);
+    r.waitForFinished();
+    if (r.isError ()) {
+        return Util::errorFromString(r.error().name());
+    } else {
+        return Transaction::NoInternalError;
+    }
+}
+
+void Daemon::stateHasChanged(const QString& reason)
+{
+    global()->d_ptr->daemon->StateHasChanged(reason);
+}
+
+void Daemon::suggestDaemonQuit()
+{
+    global()->d_ptr->daemon->SuggestDaemonQuit();
+}
+
+uint Daemon::versionMajor()
+{
+    return global()->d_ptr->daemon->versionMajor();
+}
+
+uint Daemon::versionMinor()
+{
+    return global()->d_ptr->daemon->versionMinor();
+}
+
+uint Daemon::versionMicro()
+{
+    return global()->d_ptr->daemon->versionMicro();
+}
+
+#include "daemon.moc"
diff --git a/lib/packagekit-qt2/daemon.h b/lib/packagekit-qt2/daemon.h
new file mode 100644
index 0000000..bdd800c
--- /dev/null
+++ b/lib/packagekit-qt2/daemon.h
@@ -0,0 +1,284 @@
+/*
+ * This file is part of the QPackageKit project
+ * Copyright (C) 2008 Adrien Bustany <madcat at mymadcat.com>
+ * Copyright (C) 2010-2011 Daniel Nicoletti <dantti85-pk at yahoo.com.br>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef PACKAGEKIT_DAEMON_H
+#define PACKAGEKIT_DAEMON_H
+
+#include <QtCore/QObject>
+
+#include "package.h"
+#include "transaction.h"
+
+namespace PackageKit {
+
+/**
+ * \class Daemon client.h Daemon
+ * \author Adrien Bustany \e <madcat at mymadcat.com>
+ * \author Daniel Nicoletti \e <dantti85-pk at yahoo.com.br>
+ *
+ * \brief Base class used to interact with the PackageKit daemon
+ *
+ * This class holds all the functions enabling the user to interact with the PackageKit daemon.
+ *
+ * This class is a singleton, its constructor is private. Call Daemon::global() to get
+ * an instance of the Daemon object, you only need Daemon::global() when connection to the signals
+ * of this class as most methods are static so that you can just call Daemon::backendName() for
+ * example.
+ */
+class DaemonPrivate;
+class Daemon : public QObject
+{
+    Q_OBJECT
+    Q_ENUMS(Network)
+    Q_ENUMS(Authorize)
+public:
+    /**
+     * Describes the current network state
+     */
+    typedef enum {
+        UnknownNetwork,
+        NetworkOffline,
+        NetworkOnline,
+        NetworkWired,
+        NetworkWifi,
+        NetworkMobile,
+        /* this always has to be at the end of the list */
+        LastNetwork
+    } Network;
+
+    /**
+     * Describes the authorization result
+     */
+    typedef enum {
+        UnknownAuthorize,
+        AuthorizeYes,
+        AuthorizeNo,
+        AuthorizeInteractive,
+        /* this always has to be at the end of the list */
+        LastAuthorize
+    } Authorize;
+
+    /**
+     * \brief Returns an instance of the Daemon
+     *
+     * The Daemon class is a singleton, you can call this method several times,
+     * a single Daemon object will exist.
+     */
+    static Daemon* global();
+
+    /**
+     * Destructor
+     */
+    ~Daemon();
+
+    /**
+     * Returns all the actions supported by the current backend
+     */
+    static Transaction::Roles actions();
+
+    /**
+     * The backend name, e.g. "yum".
+     */
+    static QString backendName();
+
+    /**
+     * The backend description, e.g. "Yellow Dog Update Modifier".
+     */
+    static QString backendDescription();
+
+    /**
+     * The backend author, e.g. "Joe Bloggs <joe at blogs.com>"
+     */
+    static QString backendAuthor();
+
+    /**
+     * Returns the filters supported by the current backend
+     */
+    static Transaction::Filters filters();
+
+    /**
+     * Returns the groups supported by the current backend
+     */
+    static Package::Groups groups();
+
+    /**
+     * Set when the backend is locked and native tools would fail.
+     */
+    static bool locked();
+
+    /**
+     * Returns a list containing the MIME types supported by the current backend
+     */
+    static QStringList mimeTypes();
+
+    /**
+     * Returns the current network state
+     */
+    static Daemon::Network networkState();
+
+    /**
+     * The distribution identifier in the
+     * distro;version;arch form,
+     * e.g. "debian;squeeze/sid;x86_64".
+     */
+    static QString distroId();
+
+    /**
+     * Allows a client to find out if it would be allowed to authorize an action.
+     * The action ID, e.g. org.freedesktop.packagekit.system-network-proxy-configure
+     * specified in \p actionId
+     * Returm might be either yes, no or interactive \sa Authorize.
+     */
+    static Daemon::Authorize canAuthorize(const QString &actionId);
+
+    /**
+     * Returns the time (in seconds) since the specified \p action
+     */
+    static uint getTimeSinceAction(Transaction::Role action);
+
+    /**
+     * \brief creates a new transaction path
+     * This function register a new DBus path on PackageKit
+     * allowing a \c Transaction object to be created,
+     * unless you want to know the transaction id
+     * before creating the \c Transaction this function
+     * is not useful since passing a NULL string (QString())
+     * when contructing the \c Transaction object will
+     * automatically create this path.
+     */
+    static QString getTid();
+
+    /**
+     * Returns the list of current transactions
+     */
+    static QStringList getTransactions();
+
+    /**
+     * Convenience function
+     * Returns the list of current transactions objects
+     *
+     * You must delete these yourself or pass a
+     * \p parent for these comming transactions
+     */
+    static QList<Transaction*> getTransactionsObj(QObject *parent = 0);
+
+    /**
+     * \brief Sets a global hints for all the transactions to be created
+     *
+     * This method allows the calling session to set transaction \p hints for
+     * the package manager which can change as the transaction runs.
+     *
+     * This method can be sent before the transaction has been run
+     * (by using Daemon::setHints) or whilst it is running
+     * (by using Transaction::setHints).
+     * There is no limit to the number of times this
+     * method can be sent, although some backends may only use the values
+     * that were set before the transaction was started.
+     *
+     * The \p hints can be filled with entries like these
+     * ('locale=en_GB.utf8','idle=true','interactive=false').
+     *
+     * \sa Transaction::setHints
+     */
+    static void setHints(const QString &hints);
+    static void setHints(const QStringList &hints);
+
+    static QStringList hints();
+
+    /**
+     * Sets a proxy to be used for all the network operations
+     */
+    static Transaction::InternalError setProxy(const QString &http_proxy, const QString &ftp_proxy);
+    static Transaction::InternalError setProxy(const QString &http_proxy, const QString &https_proxy, const QString &ftp_proxy, const QString &socks_proxy, const QString &no_proxy, const QString &pac);
+
+    /**
+     * \brief Tells the daemon that the system state has changed, to make it reload its cache
+     *
+     * \p reason can be resume or posttrans
+     */
+    static void stateHasChanged(const QString &reason);
+
+    /**
+     * Asks PackageKit to quit, for example to let a native package manager operate
+     */
+    static void suggestDaemonQuit();
+
+    /**
+     * Returns the major version number.
+     */
+    static uint versionMajor();
+
+    /**
+     * The minor version number.
+     */
+    static uint versionMinor();
+
+    /**
+     * The micro version number.
+     */
+    static uint versionMicro();
+
+Q_SIGNALS:
+    /**
+     * This signal is emitted when a property on the interface changes.
+     */
+    void changed();
+
+    /**
+     * Emitted when the list of repositories changes
+     */
+    void repoListChanged();
+
+    /**
+     * Emmitted when a restart is scheduled
+     */
+    void restartScheduled();
+
+    /**
+     * \brief Emitted when the current transactions list changes.
+     *
+     * \note This is mostly useful for monitoring the daemon's state.
+     */
+    void transactionListChanged(const QStringList &tids);
+
+    /**
+     * Emitted when new updates are available
+     */
+    void updatesChanged();
+
+    /**
+     * Emitted when the daemon quits
+     */
+    void daemonQuit();
+
+protected:
+    DaemonPrivate * const d_ptr;
+
+private:
+    Q_DECLARE_PRIVATE(Daemon);
+    Q_PRIVATE_SLOT(d_ptr, void serviceUnregistered());
+    Daemon(QObject *parent = 0);
+    static Daemon *m_global;
+};
+
+} // End namespace PackageKit
+
+#endif
diff --git a/lib/packagekit-qt2/daemonprivate.cpp b/lib/packagekit-qt2/daemonprivate.cpp
new file mode 100644
index 0000000..efaf1cb
--- /dev/null
+++ b/lib/packagekit-qt2/daemonprivate.cpp
@@ -0,0 +1,59 @@
+/*
+ * This file is part of the QPackageKit project
+ * Copyright (C) 2008 Adrien Bustany <madcat at mymadcat.com>
+ * Copyright (C) 2010-2011 Daniel Nicoletti <dantti85-pk at yahoo.com.br>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "daemonprivate.h"
+#include "transaction.h"
+#include "common.h"
+
+#include <QDBusConnection>
+
+using namespace PackageKit;
+
+DaemonPrivate::DaemonPrivate(Daemon* parent) :
+    q_ptr(parent)
+{
+    m_watcher = new QDBusServiceWatcher(PK_NAME,
+                                        QDBusConnection::systemBus(),
+                                        QDBusServiceWatcher::WatchForUnregistration,
+                                        q_ptr);
+    q_ptr->connect(m_watcher, SIGNAL(serviceUnregistered(const QString &)),
+                   SLOT(serviceUnregistered()));
+}
+
+QList<Transaction*> DaemonPrivate::transactions(const QStringList& tids, QObject *parent)
+{
+    QList<Transaction*> transactionList;
+    foreach (const QString &tid, tids) {
+        Transaction *transaction = new Transaction(parent, tid);
+        transactionList << transaction;
+    }
+    return transactionList;
+}
+
+void DaemonPrivate::serviceUnregistered()
+{
+    Q_Q(Daemon);
+
+    q->daemonQuit();
+
+    // We don't have more transactions running
+    q->transactionListChanged(QStringList());
+}
diff --git a/lib/packagekit-qt2/daemonprivate.h b/lib/packagekit-qt2/daemonprivate.h
new file mode 100644
index 0000000..5ed5225
--- /dev/null
+++ b/lib/packagekit-qt2/daemonprivate.h
@@ -0,0 +1,77 @@
+/*
+ * This file is part of the QPackageKit project
+ * Copyright (C) 2008 Adrien Bustany <madcat at mymadcat.com>
+ * Copyright (C) 2010-2011 Daniel Nicoletti <dantti85-pk at yahoo.com.br>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef DAEMON_PRIVATE_H
+#define DAEMON_PRIVATE_H
+
+#include <QtCore/QStringList>
+#include <QtDBus/QDBusServiceWatcher>
+
+#include "daemon.h"
+
+class DaemonProxy;
+
+namespace PackageKit {
+
+class Transaction;
+class DaemonPrivate
+{
+    Q_DECLARE_PUBLIC(Daemon)
+protected:
+    DaemonPrivate(Daemon *parent);
+    virtual ~DaemonPrivate() {};
+
+    Daemon *q_ptr;
+    ::DaemonProxy *daemon;
+
+    QStringList hints;
+
+    QList<Transaction*> transactions(const QStringList &tids, QObject *parent);
+
+    /*
+     * Describes the different errors that might happen on the bus
+     *
+     * \sa Daemon::error
+     * \sa Transaction::error
+     */
+    typedef enum {
+        NoError = 0,
+        ErrorFailed,
+        ErrorFailedAuth,
+        ErrorNoTid,
+        ErrorAlreadyTid,
+        ErrorRoleUnkown,
+        ErrorCannotStartDaemon,
+        ErrorInvalidInput,
+        ErrorInvalidFile,
+        ErrorNotSupported
+    } TransactionError;
+
+protected Q_SLOTS:
+    void serviceUnregistered();
+
+private:
+    QDBusServiceWatcher *m_watcher;
+};
+
+} // End namespace PackageKit
+
+#endif
diff --git a/lib/packagekit-qt2/modules/FindPackageKitQt2.cmake b/lib/packagekit-qt2/modules/FindPackageKitQt2.cmake
new file mode 100644
index 0000000..b918f47
--- /dev/null
+++ b/lib/packagekit-qt2/modules/FindPackageKitQt2.cmake
@@ -0,0 +1,40 @@
+# - Try to find PackageKitQt2
+# Once done this will define
+#
+#  PACKAGEKIT_QT2_FOUND - system has PackageKitQt2
+#  PACKAGEKIT_QT2_INCLUDE_DIR - the PackageKitQt2 include directory
+#  PACKAGEKIT_QT2_LIB - Link these to use PackageKitQt2
+#  PACKAGEKIT_QT2_DEFINITIONS - Compiler switches required for using PackageKitQt2
+
+# Copyright (c) 2008, Adrien Bustany, <madcat at mymadcat.com>
+#
+# Redistribution and use is allowed according to the terms of the GPLv2+ license.
+
+IF (PACKAGEKIT_QT2_INCLUDE_DIR AND PACKAGEKIT_QT2_LIB)
+    SET(PACKAGEKIT_QT2_FIND_QUIETLY TRUE)
+ENDIF (PACKAGEKIT_QT2_INCLUDE_DIR AND PACKAGEKIT_QT2_LIB)
+
+FIND_PATH( PACKAGEKIT_QT2_INCLUDE_DIR PackageKit/packagekit-qt2 )
+
+FIND_LIBRARY( PACKAGEKIT_QT2_LIB NAMES packagekit-qt2 )
+
+IF (PACKAGEKIT_QT2_INCLUDE_DIR AND PACKAGEKIT_QT2_LIB)
+   SET(PACKAGEKIT_QT2_FOUND TRUE)
+ELSE (PACKAGEKIT_QT2_INCLUDE_DIR AND PACKAGEKIT_QT2_LIB)
+   SET(PACKAGEKIT_QT2_FOUND FALSE)
+ENDIF (PACKAGEKIT_QT2_INCLUDE_DIR AND PACKAGEKIT_QT2_LIB)
+
+SET(PACKAGEKIT_QT2_INCLUDE_DIR ${PACKAGEKIT_QT2_INCLUDE_DIR}/PackageKit/packagekit-qt2)
+
+IF (PACKAGEKIT_QT2_FOUND)
+  IF (NOT PACKAGEKIT_QT2_FIND_QUIETLY)
+    MESSAGE(STATUS "Found PackageKitQt2: ${PACKAGEKIT_QT2_LIB}")
+  ENDIF (NOT PACKAGEKIT_QT2_FIND_QUIETLY)
+ELSE (PACKAGEKIT_QT2_FOUND)
+  IF (PACKAGEKIT_QT2_FIND_REQUIRED)
+    MESSAGE(FATAL_ERROR "Could NOT find PackageKitQt2")
+  ENDIF (PACKAGEKIT_QT2_FIND_REQUIRED)
+ENDIF (PACKAGEKIT_QT2_FOUND)
+
+MARK_AS_ADVANCED(PACKAGEKIT_QT2_INCLUDE_DIR PACKAGEKIT_QT2_LIB)
+
diff --git a/lib/packagekit-qt2/modules/Makefile.am b/lib/packagekit-qt2/modules/Makefile.am
new file mode 100644
index 0000000..2ba65d7
--- /dev/null
+++ b/lib/packagekit-qt2/modules/Makefile.am
@@ -0,0 +1,7 @@
+cmakemoduledir = $(datadir)/cmake/Modules
+cmakemodule_DATA =					\
+	FindPackageKitQt2.cmake				\
+	$(NULL)
+
+EXTRA_DIST =						\
+	$(cmakemodule_DATA)
diff --git a/lib/packagekit-qt2/package.cpp b/lib/packagekit-qt2/package.cpp
new file mode 100644
index 0000000..433176b
--- /dev/null
+++ b/lib/packagekit-qt2/package.cpp
@@ -0,0 +1,547 @@
+/*
+ * This file is part of the QPackageKit project
+ * Copyright (C) 2008 Adrien Bustany <madcat at mymadcat.com>
+ * Copyright (C) 2010-2011 Daniel Nicoletti <dantti85-pk at yahoo.com.br>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include <QtSql/QSqlQuery>
+#include <QtCore/QDebug>
+#include <QtCore/QFile>
+#include <QtCore/QVariant>
+#include <QtCore/QStringList>
+#include <QtCore/QMetaEnum>
+
+#include "package.h"
+#include "transaction.h"
+#include "util.h"
+
+namespace PackageKit {
+
+class DetailsPrivate
+{
+public:
+    QString license;
+    Package::Group group;
+    QString description;
+    QString url;
+    uint size;
+};
+
+class UpdateDetailsPrivate {
+public:
+    QList<Package> updates;
+    QList<Package> obsoletes;
+    QString vendorUrl;
+    QString bugzillaUrl;
+    QString cveUrl;
+    Package::Restart restart;
+    QString updateText;
+    QString changelog;
+    Package::UpdateState state;
+    QDateTime issued;
+    QDateTime updated;
+};
+
+class PackagePrivate
+{
+public:
+    QString id;
+    QString name;
+    QString version;
+    QString arch;
+    QString data;
+    QString summary;
+    Package::Info info;
+    DetailsPrivate *details;
+    UpdateDetailsPrivate *updateDetails;
+    QString iconPath;
+};
+
+}
+
+using namespace PackageKit;
+
+Package::Package(const QString &packageId, Info info, const QString &summary)
+    : d_ptr(new PackagePrivate)
+{
+    d_ptr->id = packageId;
+    d_ptr->info = info;
+    d_ptr->summary = summary;
+    d_ptr->details = 0;
+
+    // Break down the packageId
+    QStringList tokens = packageId.split(";");
+    if(tokens.size() == 4) {
+        d_ptr->name = tokens.at(0);
+        d_ptr->version = tokens.at(1);
+        d_ptr->arch = tokens.at(2);
+        d_ptr->data = tokens.at(3);
+    }
+}
+
+Package::Package()
+    : d_ptr(new PackagePrivate)
+{
+    d_ptr->details = 0;
+}
+
+Package::~Package()
+{
+    Q_D(Package);
+    if (d->details) {
+        delete d->details;
+    }
+    delete d;
+}
+
+QString Package::id() const
+{
+    Q_D(const Package);
+    return d->id;
+}
+
+QString Package::name() const
+{
+    Q_D(const Package);
+    return d->name;
+}
+
+QString Package::version() const
+{
+    Q_D(const Package);
+    return d->version;
+}
+
+QString Package::arch() const
+{
+    Q_D(const Package);
+    return d->arch;
+}
+
+QString Package::data() const
+{
+    Q_D(const Package);
+    return d->data;
+}
+
+QString Package::summary() const
+{
+    Q_D(const Package);
+    return d->summary;
+}
+
+Package::Info Package::info() const
+{
+    Q_D(const Package);
+    return d->info;
+}
+
+bool Package::hasDetails() const
+{
+    Q_D(const Package);
+    return d->details;
+}
+
+QString Package::iconPath ()
+{
+    Q_D(Package);
+    if (d->iconPath.isNull ()) {
+        d->iconPath = QString("");
+        QSqlDatabase db = QSqlDatabase::database();
+        if (!db.isOpen()) {
+            qDebug() << "Desktop files database is not open";
+            return d->iconPath;
+        }
+
+        QSqlQuery q(db);
+        q.prepare("SELECT filename FROM cache WHERE package = :name");
+        q.bindValue(":name", d->name);
+        if(q.exec()) {
+            if (q.next()) {
+                QFile desktopFile (q.value(0).toString());
+                if (desktopFile.open (QIODevice::ReadOnly | QIODevice::Text)) {
+                    while (!desktopFile.atEnd ()) {
+                        QByteArray line = desktopFile.readLine ().trimmed ();
+                        if (line.startsWith ("Icon=")) {
+                            d->iconPath = line.mid (5);
+                            break;
+                        }
+                    }
+                    desktopFile.close ();
+                } else {
+                    qDebug() << "Cannot open desktop file " << q.value(0).toString ();
+                }
+            }
+        } else {
+            qDebug() << "Error while running query " << q.executedQuery();
+        }
+    }
+
+    return d->iconPath;
+}
+
+QString Package::license() const
+{
+    Q_D(const Package);
+    if (d->details) {
+        return d->details->license;
+    }
+    return QString();
+}
+
+void Package::setLicense(const QString &license)
+{
+    Q_D(Package);
+    if (!d->details) {
+        d->details = new DetailsPrivate;
+    }
+    d->details->license = license;
+}
+
+Package::Group Package::group() const
+{
+    Q_D(const Package);
+    if (d->details) {
+        return d->details->group;
+    }
+    return UnknownGroup;
+}
+
+void Package::setGroup(Group group)
+{
+    Q_D(Package);
+    if (!d->details) {
+        d->details = new DetailsPrivate;
+    }
+    d->details->group = group;
+}
+
+QString Package::description() const
+{
+    Q_D(const Package);
+    if (d->details) {
+        return d->details->description;
+    }
+    return QString();
+}
+
+void Package::setDescription(const QString &description)
+{
+    Q_D(Package);
+    if (!d->details) {
+        d->details = new DetailsPrivate;
+    }
+    d->details->description = description;
+}
+
+QString Package::url() const
+{
+    Q_D(const Package);
+    if (d->details) {
+        return d->details->url;
+    }
+    return QString();
+}
+
+void Package::setUrl(const QString &url)
+{
+    Q_D(Package);
+    if (!d->details) {
+        d->details = new DetailsPrivate;
+    }
+    d->details->url = url;
+}
+
+qulonglong Package::size() const
+{
+    Q_D(const Package);
+    if (d->details) {
+        return d->details->size;
+    }
+    return 0;
+}
+
+void Package::setSize(qulonglong size)
+{
+    Q_D(Package);
+    if (!d->details) {
+        d->details = new DetailsPrivate;
+    }
+    d->details->size = size;
+}
+
+bool Package::hasUpdateDetails() const
+{
+    Q_D(const Package);
+    return d->updateDetails;
+}
+
+QList<Package> Package::updates() const
+{
+    Q_D(const Package);
+    if (d->updateDetails) {
+        return d->updateDetails->updates;
+    }
+    return QList<Package>();
+}
+
+void Package::setUpdates(const QList<Package> &updates)
+{
+    Q_D(Package);
+    if (!d->updateDetails) {
+        d->updateDetails = new UpdateDetailsPrivate;
+    }
+    d->updateDetails->updates = updates;
+}
+
+QList<Package> Package::obsoletes() const
+{
+    Q_D(const Package);
+    if (d->updateDetails) {
+        return d->updateDetails->obsoletes;
+    }
+    return QList<Package>();
+}
+
+void Package::setObsoletes(const QList<Package> &obsoletes)
+{
+    Q_D(Package);
+    if (!d->updateDetails) {
+        d->updateDetails = new UpdateDetailsPrivate;
+    }
+    d->updateDetails->obsoletes = obsoletes;
+}
+
+QString Package::vendorUrl() const
+{
+    Q_D(const Package);
+    if (d->updateDetails) {
+        return d->updateDetails->vendorUrl;
+    }
+    return QString();
+}
+
+void Package::setVendorUrl(const QString &vendorUrl)
+{
+    Q_D(Package);
+    if (!d->updateDetails) {
+        d->updateDetails = new UpdateDetailsPrivate;
+    }
+    d->updateDetails->vendorUrl = vendorUrl;
+}
+
+QString Package::bugzillaUrl() const
+{
+    Q_D(const Package);
+    if (d->updateDetails) {
+        return d->updateDetails->bugzillaUrl;
+    }
+    return QString();
+}
+
+void Package::setBugzillaUrl(const QString &bugzillaUrl)
+{
+    Q_D(Package);
+    if (!d->updateDetails) {
+        d->updateDetails = new UpdateDetailsPrivate;
+    }
+    d->updateDetails->bugzillaUrl = bugzillaUrl;
+}
+
+QString Package::cveUrl() const
+{
+    Q_D(const Package);
+    if (d->updateDetails) {
+        return d->updateDetails->cveUrl;
+    }
+    return QString();
+}
+
+void Package::setCveUrl(const QString &cveUrl)
+{
+    Q_D(Package);
+    if (!d->updateDetails) {
+        d->updateDetails = new UpdateDetailsPrivate;
+    }
+    d->updateDetails->cveUrl = cveUrl;
+}
+
+Package::Restart Package::restart() const
+{
+    Q_D(const Package);
+    if (d->updateDetails) {
+        return d->updateDetails->restart;
+    }
+    return Package::UnknownRestart;
+}
+
+void Package::setRestart(Package::Restart restart)
+{
+    Q_D(Package);
+    if (!d->updateDetails) {
+        d->updateDetails = new UpdateDetailsPrivate;
+    }
+    d->updateDetails->restart = restart;
+}
+
+QString Package::updateText() const
+{
+    Q_D(const Package);
+    if (d->updateDetails) {
+        return d->updateDetails->updateText;
+    }
+    return QString();
+}
+
+void Package::setUpdateText(const QString &updateText)
+{
+    Q_D(Package);
+    if (!d->updateDetails) {
+        d->updateDetails = new UpdateDetailsPrivate;
+    }
+    d->updateDetails->updateText = updateText;
+}
+
+QString Package::changelog() const
+{
+    Q_D(const Package);
+    if (d->updateDetails) {
+        return d->updateDetails->changelog;
+    }
+    return QString();
+}
+
+void Package::setChangelog(const QString &changelog)
+{
+    Q_D(Package);
+    if (!d->updateDetails) {
+        d->updateDetails = new UpdateDetailsPrivate;
+    }
+    d->updateDetails->changelog = changelog;
+}
+
+Package::UpdateState Package::state() const
+{
+    Q_D(const Package);
+    if (d->updateDetails) {
+        return d->updateDetails->state;
+    }
+    return UnknownUpdateState;
+}
+
+void Package::setState(UpdateState state)
+{
+    Q_D(Package);
+    if (!d->updateDetails) {
+        d->updateDetails = new UpdateDetailsPrivate;
+    }
+    d->updateDetails->state = state;
+}
+
+QDateTime Package::issued() const
+{
+    Q_D(const Package);
+    if (d->updateDetails) {
+        return d->updateDetails->issued;
+    }
+    return QDateTime();
+}
+
+void Package::setIssued(const QDateTime &issued)
+{
+    Q_D(Package);
+    if (!d->updateDetails) {
+        d->updateDetails = new UpdateDetailsPrivate;
+    }
+    d->updateDetails->issued = issued;
+}
+
+QDateTime Package::updated() const
+{
+    Q_D(const Package);
+    if (d->updateDetails) {
+        return d->updateDetails->updated;
+    }
+    return QDateTime();
+}
+
+void Package::setUpdated(const QDateTime &updated)
+{
+    Q_D(Package);
+    if (!d->updateDetails) {
+        d->updateDetails = new UpdateDetailsPrivate;
+    }
+    d->updateDetails->updated = updated;
+}
+
+bool Package::operator==(const Package &package) const
+{
+    Q_D(const Package);
+    return d->id == package.id();
+}
+
+Package& Package::operator=(const Package &package)
+{
+    Q_D(Package);
+    // TODO
+    if (this != &package) // protect against invalid self-assignment
+    {
+        d->id = package.id();
+        d->name = package.name();
+        d->version = package.version();
+        d->arch = package.arch();
+        d->data = package.data();
+
+        d->summary = package.summary();
+        d->info = package.info();
+
+        if (package.hasDetails()) {
+            if (!d->details) {
+                d->details = new DetailsPrivate;
+            }
+            d->details->license = package.license();
+            d->details->group = package.group();
+            d->details->description = package.description();
+            d->details->url = package.url();
+            d->details->size = package.size();
+        }
+
+        if (package.hasUpdateDetails()) {
+            if (!d->updateDetails) {
+                d->updateDetails = new UpdateDetailsPrivate;
+            }
+            d->updateDetails->updates = package.updates();
+            d->updateDetails->obsoletes = package.obsoletes();
+            d->updateDetails->vendorUrl = package.vendorUrl();
+            d->updateDetails->bugzillaUrl = package.bugzillaUrl();
+            d->updateDetails->cveUrl = package.cveUrl();
+            d->updateDetails->restart = package.restart();
+            d->updateDetails->state = package.state();
+            d->updateDetails->updateText = package.updateText();
+            d->updateDetails->changelog = package.changelog();
+            d->updateDetails->state = package.state();
+            d->updateDetails->issued = package.issued();
+            d->updateDetails->updated = package.updated();
+        }
+
+        return *this;
+    }
+    return *this;
+}
+
+#include "package.moc"
diff --git a/lib/packagekit-qt2/package.h b/lib/packagekit-qt2/package.h
new file mode 100644
index 0000000..74e60a2
--- /dev/null
+++ b/lib/packagekit-qt2/package.h
@@ -0,0 +1,425 @@
+/*
+ * This file is part of the QPackageKit project
+ * Copyright (C) 2008 Adrien Bustany <madcat at mymadcat.com>
+ * Copyright (C) 2010-2011 Daniel Nicoletti <dantti85-pk at yahoo.com.br>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef PACKAGEKIT_PACKAGE_H
+#define PACKAGEKIT_PACKAGE_H
+
+#include <QtCore/QString>
+#include <QtCore/QDateTime>
+
+namespace PackageKit {
+
+/**
+ * \class Package package.h Package
+ * \author Adrien Bustany \e <madcat at mymadcat.com>
+ * \author Daniel Nicoletti \e <dantti85-pk at yahoo.com.br>
+ *
+ * \brief Represents a software package
+ *
+ * This class represents a software package.
+ *
+ * \note All Package objects should be deleted by the user.
+ */
+class PackagePrivate;
+class Package
+{
+    Q_GADGET
+    Q_ENUMS(Info)
+    Q_ENUMS(Group)
+    Q_ENUMS(UpdateState)
+    Q_ENUMS(Restart)
+public:
+    /**
+     * Describes the state of a package
+     */
+    typedef enum {
+        UnknownInfo,
+        InfoInstalled,
+        InfoAvailable,
+        InfoLow,
+        InfoEnhancement,
+        InfoNormal,
+        InfoBugfix,
+        InfoImportant,
+        InfoSecurity,
+        InfoBlocked,
+        InfoDownloading,
+        InfoUpdating,
+        InfoInstalling,
+        InfoRemoving,
+        InfoCleanup,
+        InfoObsoleting,
+        InfoCollectionInstalled,
+        InfoCollectionAvailable,
+        InfoFinished,
+        InfoReinstalling,
+        InfoDowngrading,
+        InfoPreparing,
+        InfoDecompressing,
+        /* this always has to be at the end of the list */
+        LastInfo
+    } Info;
+
+    /**
+     * Describes the different package groups
+     */
+    typedef enum {
+        UnknownGroup,
+        GroupAccessibility,
+        GroupAccessories,
+        GroupAdminTools,
+        GroupCommunication,
+        GroupDesktopGnome,
+        GroupDesktopKde,
+        GroupDesktopOther,
+        GroupDesktopXfce,
+        GroupEducation,
+        GroupFonts,
+        GroupGames,
+        GroupGraphics,
+        GroupInternet,
+        GroupLegacy,
+        GroupLocalization,
+        GroupMaps,
+        GroupMultimedia,
+        GroupNetwork,
+        GroupOffice,
+        GroupOther,
+        GroupPowerManagement,
+        GroupProgramming,
+        GroupPublishing,
+        GroupRepos,
+        GroupSecurity,
+        GroupServers,
+        GroupSystem,
+        GroupVirtualization,
+        GroupScience,
+        GroupDocumentation,
+        GroupElectronics,
+        GroupCollections,
+        GroupVendor,
+        GroupNewest,
+        /* this always has to be at the end of the list */
+        LastGroup
+    } Group;
+    typedef QSet<Group> Groups;
+
+    /**
+     * Describes an update's state
+     */
+    typedef enum {
+        UnknownUpdateState,
+        UpdateStateStable,
+        UpdateStateUnstable,
+        UpdateStateTesting,
+        /* this always has to be at the end of the list */
+        LastUpdateState
+    } UpdateState;
+
+    /**
+     * Describes a restart type
+     */
+    typedef enum {
+        UnknownRestart,
+        RestartNone,
+        RestartApplication,
+        RestartSession,
+        RestartSystem,
+        RestartSecuritySession,
+        RestartSecuritySystem,
+        /* this always has to be at the end of the list */
+        LastRestart
+    } Restart;
+
+    Package(const QString& packageId, Info info = UnknownInfo, const QString &summary = QString());
+    Package();
+    /**
+     * Destructor
+     */
+    ~Package();
+
+    /**
+     * \brief Returns the package ID
+     *
+     * A PID (package ID) uniquely identifies a package among all software repositories
+     */
+    QString id() const;
+
+    /**
+     * Returns the package name, for example vim
+     */
+    QString name() const;
+
+    /**
+     * Returns the package version, for example 7.0
+     */
+    QString version() const;
+
+    /**
+     * Returns the package's architecture, for example x86_64
+     */
+    QString arch() const;
+
+    /**
+     * Holds additionnal data about the package set by the backend
+     */
+    QString data() const;
+
+    /**
+     * Returns the package's summary. You can get more details by using Client::getDetails
+     */
+    QString summary() const;
+
+    /**
+     * Returns the package's info
+     */
+    Info info() const;
+
+    /**
+     * Checks weither the package has details or not
+     * \sa Transaction::getDetails
+     * \sa Package::details
+    */
+    bool hasDetails() const;
+
+    /**
+     * Returns the package's license
+     * \note this will only return a valid value if \sa hasDetails() is true
+     */
+    QString license() const;
+
+    /**
+     * Define the package's license
+     * \note this will make \sa hasDetails() return true
+     */
+    void setLicense(const QString &license);
+
+    /**
+     * Returns the package's group (for example Multimedia, Editors...)
+     * \note this will only return a valid value if \sa hasDetails() is true
+     */
+    Group group() const;
+
+    /**
+     * Define the package's group
+     * \note this will make \sa hasDetails() return true
+     */
+    void setGroup(Group group);
+
+    /**
+     * Returns the package's long description
+     * \note this will only return a valid value if \sa hasDetails() is true
+     */
+    QString description() const;
+
+    /**
+     * Define the package's long description
+     * \note this will make \sa hasDetails() return true
+     */
+    void setDescription(const QString &description);
+
+    /**
+     * Returns the software's homepage url
+     * \note this will only return a valid value if \sa hasDetails() is true
+     */
+    QString url() const;
+
+    /**
+     * Define the package's url
+     * \note this will make \sa hasDetails() return true
+     */
+    void setUrl(const QString &url);
+
+    /**
+     * Returns the package's size
+     * \note this will only return a valid value if \sa hasDetails() is true
+     */
+    qulonglong size() const;
+
+    /**
+     * Define the package's size
+     * \note this will make \sa hasDetails() return true
+     */
+    void setSize(qulonglong size);
+
+    /**
+     * Returns if the package has update details
+     */
+    bool hasUpdateDetails() const;
+
+    /**
+     * Returns the package list of packages that will be updated by updating this package
+     * \note this will only return a valid value if \sa hasUpdateDetails() is true
+     */
+    QList<Package> updates() const;
+
+    /**
+     * Define the list of packages that will be updated by updating this package
+     * \note this will make \sa hasUpdateDetails() return true
+     */
+    void setUpdates(const QList<Package> &updates);
+
+    /**
+     * Returns the package list of packages that will be obsoleted by this update
+     * \note this will only return a valid value if \sa hasUpdateDetails() is true
+     */
+    QList<Package> obsoletes() const;
+
+    /**
+     * Define the list of packages that will be obsoleted by updating this package
+     * \note this will make \sa hasUpdateDetails() return true
+     */
+    void setObsoletes(const QList<Package> &obsoletes);
+
+    /**
+     * Returns the verdor URL of this update
+     * \note this will only return a valid value if \sa hasUpdateDetails() is true
+     */
+    QString vendorUrl() const;
+
+    /**
+     * Define the vendor URL
+     * \note this will make \sa hasUpdateDetails() return true
+     */
+    void setVendorUrl(const QString &vendorUrl);
+
+    /**
+     * Returns the bugzilla URL of this update
+     * \note this will only return a valid value if \sa hasUpdateDetails() is true
+     */
+    QString bugzillaUrl() const;
+
+    /**
+     * Define the bugzilla URL
+     * \note this will make \sa hasUpdateDetails() return true
+     */
+    void setBugzillaUrl(const QString &bugzillaUrl);
+
+    /**
+     * Returns the CVE (Common Vulnerabilities and Exposures) URL of this update
+     * \note this will only return a valid value if \sa hasUpdateDetails() is true
+     */
+    QString cveUrl() const;
+
+    /**
+     * Define the CVE (Common Vulnerabilities and Exposures) URL
+     * \note this will make \sa hasUpdateDetails() return true
+     */
+    void setCveUrl(const QString &cveUrl);
+
+    /**
+     * Returns the what kind of restart will be required after this update
+     * \note this will only return a valid value if \sa hasUpdateDetails() is true
+     */
+    Package::Restart restart() const;
+
+    /**
+     * Define the restart type
+     * \note this will make \sa hasUpdateDetails() return true
+     */
+    void setRestart(Package::Restart restart);
+
+    /**
+     * Returns the update description's
+     * \note this will only return a valid value if \sa hasUpdateDetails() is true
+     */
+    QString updateText() const;
+
+    /**
+     * Define the update description's
+     * \note this will make \sa hasUpdateDetails() return true
+     */
+    void setUpdateText(const QString &updateText);
+
+    /**
+     * Returns the update changelog's
+     * \note this will only return a valid value if \sa hasUpdateDetails() is true
+     */
+    QString changelog() const;
+
+    /**
+     * Define the update changelog's
+     * \note this will make \sa hasUpdateDetails() return true
+     */
+    void setChangelog(const QString &changelog);
+
+    /**
+     * Returns the category of the update, eg. stable or testing
+     * \note this will only return a valid value if \sa hasUpdateDetails() is true
+     */
+    UpdateState state() const;
+
+    /**
+     * Define the update changelog's
+     * \note this will make \sa hasUpdateDetails() return true
+     */
+    void setState(UpdateState state);
+
+    /**
+     * Returns the date and time when this update was first issued
+     * \note this will only return a valid value if \sa hasUpdateDetails() is true
+     */
+    QDateTime issued() const;
+
+    /**
+     * Define the date and time when this update was first issued
+     * \note this will make \sa hasUpdateDetails() return true
+     */
+    void setIssued(const QDateTime &issued);
+
+    /**
+     * Returns the date and time when this updated was updated
+     * \note this will only return a valid value if \sa hasUpdateDetails() is true
+     */
+    QDateTime updated() const;
+
+    /**
+     * Define the date and time when this updated was updated
+     * \note this will make \sa hasUpdateDetails() return true
+     */
+    void setUpdated(const QDateTime &updated);
+
+    /**
+     * Returns the path to the package icon, if known
+     * \return A QString holding the path to the package icon if known, an empty QString else
+     */
+    QString iconPath();
+
+    /**
+     * Compares two packages by it's ids
+     */
+    bool operator==(const Package &package) const;
+
+    /**
+     * Copy the other package data
+     */
+    Package& operator=(const Package &package);
+
+private:
+    PackagePrivate * const d_ptr;
+
+private:
+    Q_DECLARE_PRIVATE(Package);
+};
+
+} // End namespace PackageKit
+
+#endif
diff --git a/lib/packagekit-qt2/packagekit-qt2.pc.in b/lib/packagekit-qt2/packagekit-qt2.pc.in
new file mode 100644
index 0000000..585a1dc
--- /dev/null
+++ b/lib/packagekit-qt2/packagekit-qt2.pc.in
@@ -0,0 +1,11 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: packagekit-qt2
+Description: PackageKit is a system daemon for installing stuff.
+Version: @VERSION@
+Requires: QtCore, QtDBus, QtSql, QtXml
+Libs: -L${libdir} -lpackagekit-qt2
+Cflags: -I${includedir}/PackageKit/packagekit-qt2
diff --git a/lib/packagekit-qt2/signature.cpp b/lib/packagekit-qt2/signature.cpp
new file mode 100644
index 0000000..8370ada
--- /dev/null
+++ b/lib/packagekit-qt2/signature.cpp
@@ -0,0 +1,24 @@
+/*
+ * This file is part of the QPackageKit project
+ * Copyright (C) 2008 Adrien Bustany <madcat at mymadcat.com>
+ * Copyright (C) 2010-2011 Daniel Nicoletti <dantti85-pk at yahoo.com.br>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "signature.h"
+
+#include "signature.moc"
diff --git a/lib/packagekit-qt2/signature.h b/lib/packagekit-qt2/signature.h
new file mode 100644
index 0000000..91dd626
--- /dev/null
+++ b/lib/packagekit-qt2/signature.h
@@ -0,0 +1,88 @@
+/*
+ * This file is part of the QPackageKit project
+ * Copyright (C) 2010-2011 Daniel Nicoletti <dantti85-pk at yahoo.com.br>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef PACKAGEKIT_SIGNATURE_H
+#define PACKAGEKIT_SIGNATURE_H
+
+#include <QtCore/QObject>
+
+#include "package.h"
+
+namespace PackageKit {
+
+class Signature
+{
+    Q_GADGET
+    Q_ENUMS(Type)
+public:
+    /**
+     * Describes a signature type
+     */
+    typedef enum {
+        UnknownType,
+        TypeGpg,
+        /* this always has to be at the end of the list */
+        LastType
+    } Type;
+
+    /**
+     * \c package is the package that needs to be signed
+     */
+    Package package;
+
+    /**
+     * \c repoId is the id of the software repository containing the package
+     */
+    QString repoId;
+
+    /**
+     * Describes a signature url
+     */
+    QString keyUrl;
+
+    /**
+     * Describes the user id
+     */
+    QString keyUserid;
+
+    /**
+     * Describes the key id
+     */
+    QString keyId;
+
+    /**
+     * Describes the fingerprint
+     */
+    QString keyFingerprint;
+
+    /**
+     * Describes the signature time stamp
+     */
+    QString keyTimestamp;
+
+    /**
+     * The signature type
+     */
+    Signature::Type type;
+};
+
+} // End namespace PackageKit
+
+#endif
diff --git a/lib/packagekit-qt2/transaction.cpp b/lib/packagekit-qt2/transaction.cpp
new file mode 100644
index 0000000..4dfa94b
--- /dev/null
+++ b/lib/packagekit-qt2/transaction.cpp
@@ -0,0 +1,615 @@
+/*
+ * This file is part of the QPackageKit project
+ * Copyright (C) 2008 Adrien Bustany <madcat at mymadcat.com>
+ * Copyright (C) 2010-2011 Daniel Nicoletti <dantti85-pk at yahoo.com.br>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "transaction.h"
+#include "transactionprivate.h"
+#include "transactionproxy.h"
+
+#include "daemonprivate.h"
+#include "common.h"
+#include "package.h"
+#include "util.h"
+
+#define CHECK_TRANSACTION                           \
+        if (r.isError()) {                          \
+            d->error = Util::errorFromString(r.error().name()); \
+        }                                           \
+
+#define RUN_TRANSACTION(blurb)                      \
+        Q_D(Transaction);                           \
+        QDBusPendingReply<> r = d->p->blurb;        \
+        r.waitForFinished();                        \
+        CHECK_TRANSACTION                           \
+
+using namespace PackageKit;
+
+Transaction::Transaction(QObject *parent, const QString &tid) :
+    QObject(parent),
+    d_ptr(new TransactionPrivate(this))
+{
+    Q_D(Transaction);
+
+    d->tid = tid;
+    d->oldtrans = false;
+    d->p = 0;
+
+    // If the user used a null tid
+    // he want us to get it
+    if (tid.isNull()) {
+        d->tid = Daemon::global()->getTid();
+    }
+
+    int retry = 0;
+    do {
+        delete d->p;
+        d->p = new TransactionProxy(PK_NAME, d->tid, QDBusConnection::systemBus(), this);
+        if (d->p->lastError().isValid()) {
+            qDebug() << "Error, cannot create transaction proxy";
+            qDebug() << d->p->lastError();
+            QDBusMessage message;
+            message = QDBusMessage::createMethodCall("org.freedesktop.DBus",
+                                                     "/",
+                                                     "org.freedesktop.DBus",
+                                                     QLatin1String("StartServiceByName"));
+            message << qVariantFromValue(QString("org.freedesktop.PackageKit"));
+            message << qVariantFromValue((uint) 0);
+            QDBusConnection::sessionBus().call(message, QDBus::BlockWithGui);
+            retry++;
+        } else {
+            retry = 0;
+        }
+    } while (retry == 1);
+
+    if (d->tid.isEmpty()) {
+        d->error = Transaction::InternalErrorDaemonUnreachable;
+        return;
+    } else {
+        d->error = Transaction::NoInternalError;
+        setHints(Daemon::hints());
+    }
+
+    connect(Daemon::global(), SIGNAL(daemonQuit()), SLOT(daemonQuit()));
+
+    connect(d->p, SIGNAL(Changed()),
+            this, SIGNAL(changed()));
+    connect(d->p, SIGNAL(Category(const QString&, const QString&, const QString&, const QString&, const QString&)),
+            this, SIGNAL(category(const QString&, const QString&, const QString&, const QString&, const QString&)));
+    connect(d->p, SIGNAL(Destroy()),
+            SLOT(destroy()));
+    connect(d->p, SIGNAL(Details(const QString&, const QString&, const QString&, const QString&, const QString&, qulonglong)),
+            SLOT(details(const QString&, const QString&, const QString&, const QString&, const QString&, qulonglong)));
+    connect(d->p, SIGNAL(DistroUpgrade(const QString&, const QString&, const QString&)),
+            SLOT(distroUpgrade(const QString&, const QString&, const QString&)));
+    connect(d->p, SIGNAL(ErrorCode(const QString&, const QString&)),
+            SLOT(errorCode(const QString&, const QString&)));
+    connect(d->p, SIGNAL(Files(const QString&, const QString&)),
+            SLOT(files(const QString&, const QString&)));
+    connect(d->p, SIGNAL(Finished(const QString&, uint)),
+            SLOT(finished(const QString&, uint)));
+    connect(d->p, SIGNAL(Message(const QString&, const QString&)),
+            SLOT(message(const QString&, const QString&)));
+    connect(d->p, SIGNAL(Package(const QString&, const QString&, const QString&)),
+            SLOT(package(const QString&, const QString&, const QString&)));
+    connect(d->p, SIGNAL(RepoDetail(const QString&, const QString&, bool)),
+            this, SIGNAL(repoDetail(const QString&, const QString&, bool)));
+    connect(d->p, SIGNAL(RepoSignatureRequired(const QString&, const QString&, const QString&, const QString&, const QString&, const QString&, const QString&, const QString&)),
+            SLOT(repoSignatureRequired(const QString&, const QString&, const QString&, const QString&, const QString&, const QString&, const QString&, const QString&)));
+    connect(d->p, SIGNAL(EulaRequired(const QString&, const QString&, const QString&, const QString&)),
+            SLOT(eulaRequired(const QString&, const QString&, const QString&, const QString&)));
+    connect(d->p, SIGNAL(MediaChangeRequired(const QString&, const QString&, const QString&)),
+            SLOT(mediaChangeRequired(const QString&, const QString&, const QString&)));
+    connect(d->p, SIGNAL(RequireRestart(const QString&, const QString&)),
+            SLOT(requireRestart(const QString&, const QString&)));
+    connect(d->p, SIGNAL(Transaction(const QString&, const QString&, bool, const QString&, uint, const QString&, uint, const QString&)),
+            SLOT(transaction(const QString&, const QString&, bool, const QString&, uint, const QString&, uint, const QString&)));
+    connect(d->p, SIGNAL(UpdateDetail(const QString&, const QString&, const QString&, const QString&, const QString&, const QString&, const QString&, const QString&, const QString&, const QString&, const QString&, const QString&)),
+            SLOT(updateDetail(const QString&, const QString&, const QString&, const QString&, const QString&, const QString&, const QString&, const QString&, const QString&, const QString&, const QString&, const QString&)));
+
+}
+
+Transaction::Transaction(const QString &tid,
+                         const QString &timespec,
+                         bool succeeded,
+                         const QString &role,
+                         uint duration,
+                         const QString &data,
+                         uint uid,
+                         const QString &cmdline,
+                         QObject *parent)
+ : QObject(parent),
+   d_ptr(new TransactionPrivate(this))
+{
+    Q_D(Transaction);
+    d->oldtrans = TRUE;
+    d->tid = tid;
+    d->timespec = QDateTime::fromString(timespec, Qt::ISODate);
+    d->succeeded = succeeded;
+    d->role = static_cast<Transaction::Role>(Util::enumFromString<Transaction>(role, "Role", "Role"));
+    d->duration = duration;
+    d->data = data;
+    d->uid = uid;
+    d->cmdline = cmdline;
+    d->error = NoInternalError;
+    d->destroyed = true;
+}
+
+Transaction::~Transaction()
+{
+    Q_D(Transaction);
+    qDebug() << "Destroying transaction with tid" << d->tid;
+    delete d;
+}
+
+QString Transaction::tid() const
+{
+    Q_D(const Transaction);
+    return d->tid;
+}
+
+Transaction::InternalError Transaction::error() const
+{
+    Q_D(const Transaction);
+    return d->error;
+}
+
+bool Transaction::allowCancel() const
+{
+    Q_D(const Transaction);
+    if (d->destroyed) {
+        return false;
+    }
+    return d->p->allowCancel();
+}
+
+bool Transaction::isCallerActive() const
+{
+    Q_D(const Transaction);
+    if (d->destroyed) {
+        return false;
+    }
+    return d->p->callerActive();
+}
+
+void Transaction::cancel()
+{
+    Q_D(Transaction);
+    if (d->destroyed) {
+        return;
+    }
+
+    QDBusReply<void> r = d->p->Cancel();
+    if (!r.isValid()) {
+        d->error = Util::errorFromString(r.error().message());
+    }
+}
+
+Package Transaction::lastPackage() const
+{
+    Q_D(const Transaction);
+    if (d->destroyed) {
+        return Package();
+    }
+    return Package(d->p->lastPackage());
+}
+
+uint Transaction::percentage() const
+{
+    Q_D(const Transaction);
+    if (d->destroyed) {
+        return 0;
+    }
+    return d->p->percentage();
+}
+
+uint Transaction::subpercentage() const
+{
+    Q_D(const Transaction);
+    if (d->destroyed) {
+        return 0;
+    }
+    return d->p->subpercentage();
+}
+
+uint Transaction::elapsedTime() const
+{
+    Q_D(const Transaction);
+    if (d->destroyed) {
+        return 0;
+    }
+    return d->p->elapsedTime();
+}
+
+uint Transaction::remainingTime() const
+{
+    Q_D(const Transaction);
+    if (d->destroyed) {
+        return 0;
+    }
+    return d->p->remainingTime();
+}
+
+uint Transaction::speed() const
+{
+    Q_D(const Transaction);
+    if (d->destroyed) {
+        return 0;
+    }
+    return d->p->speed();
+}
+
+Transaction::Role Transaction::role() const
+{
+    Q_D(const Transaction);
+    if(d->oldtrans) {
+        return d->role;
+    }
+
+    if (d->destroyed) {
+        return Transaction::UnknownRole;
+    }
+    return static_cast<Transaction::Role>(Util::enumFromString<Transaction>(d->p->role(), "Role", "Role"));
+}
+
+void Transaction::setHints(const QStringList &hints)
+{
+    Q_D(Transaction);
+    if (!d->destroyed) {
+        d->p->SetHints(hints);
+    }
+}
+
+void Transaction::setHints(const QString &hints)
+{
+    setHints(QStringList() << hints);
+}
+
+Transaction::Status Transaction::status() const
+{
+    Q_D(const Transaction);
+    if (d->destroyed) {
+        return Transaction::UnknownStatus;
+    }
+    return static_cast<Transaction::Status>(Util::enumFromString<Transaction>(d->p->status(), "Status", "Status"));
+}
+
+QDateTime Transaction::timespec() const
+{
+    Q_D(const Transaction);
+    return d->timespec;
+}
+
+bool Transaction::succeeded() const
+{
+    Q_D(const Transaction);
+    return d->succeeded;
+}
+
+uint Transaction::duration() const
+{
+    Q_D(const Transaction);
+    return d->duration;
+}
+
+QString Transaction::data() const
+{
+    Q_D(const Transaction);
+    return d->data;
+}
+
+uint Transaction::uid() const
+{
+    Q_D(const Transaction);
+    if(d->destroyed) {
+        return d->uid;
+    }
+    return d->p->uid();
+}
+
+QString Transaction::cmdline() const
+{
+    Q_D(const Transaction);
+    return d->cmdline;
+}
+
+void Transaction::acceptEula(const QString &eulaId)
+{
+    RUN_TRANSACTION(AcceptEula(eulaId))
+}
+
+void Transaction::downloadPackages(const QList<Package> &packages, bool storeInCache)
+{
+    RUN_TRANSACTION(DownloadPackages(storeInCache, Util::packageListToPids(packages)))
+}
+
+void Transaction::downloadPackages(const Package &package, bool storeInCache)
+{
+    downloadPackages(QList<Package>() << package, storeInCache);
+}
+
+void Transaction::getCategories()
+{
+    RUN_TRANSACTION(GetCategories())
+}
+
+void Transaction::getDepends(const QList<Package> &packages, Transaction::Filters filters, bool recursive)
+{
+    RUN_TRANSACTION(GetDepends(TransactionPrivate::filtersToString(filters), Util::packageListToPids(packages), recursive))
+}
+
+void Transaction::getDepends(const Package &package, Transaction::Filters filters, bool recursive)
+{
+    getDepends(QList<Package>() << package, filters, recursive);
+}
+
+void Transaction::getDetails(const QList<Package> &packages)
+{
+    Q_D(Transaction);
+    foreach (const Package &package, packages) {
+        d->packageMap.insert(package.id(), package);
+    }
+
+    QDBusPendingReply<> r = d->p->GetDetails(Util::packageListToPids(packages));
+    r.waitForFinished();
+
+    CHECK_TRANSACTION
+}
+
+void Transaction::getDetails(const Package &package)
+{
+    getDetails(QList<Package>() << package);
+}
+
+void Transaction::getFiles(const QList<Package> &packages)
+{
+    RUN_TRANSACTION(GetFiles(Util::packageListToPids(packages)))
+}
+
+void Transaction::getFiles(const Package &package)
+{
+    getFiles(QList<Package>() << package);
+}
+
+void Transaction::getOldTransactions(uint number)
+{
+    RUN_TRANSACTION(GetOldTransactions(number))
+}
+
+void Transaction::getPackages(Transaction::Filters filters)
+{
+    RUN_TRANSACTION(GetPackages(TransactionPrivate::filtersToString(filters)))
+}
+
+void Transaction::getRepoList(Transaction::Filters filters)
+{
+    RUN_TRANSACTION(GetRepoList(TransactionPrivate::filtersToString(filters)))
+}
+
+void Transaction::getRequires(const QList<Package> &packages, Transaction::Filters filters, bool recursive)
+{
+    RUN_TRANSACTION(GetRequires(TransactionPrivate::filtersToString(filters), Util::packageListToPids(packages), recursive))
+}
+
+void Transaction::getRequires(const Package &package, Transaction::Filters filters, bool recursive)
+{
+    getRequires(QList<Package>() << package, filters, recursive);
+}
+
+void Transaction::getUpdateDetail(const QList<Package> &packages)
+{
+    RUN_TRANSACTION(GetUpdateDetail(Util::packageListToPids(packages)))
+}
+
+void Transaction::getUpdateDetail(const Package &package)
+{
+    getUpdateDetail(QList<Package>() << package);
+}
+
+void Transaction::getUpdates(Transaction::Filters filters)
+{
+    RUN_TRANSACTION(GetUpdates(TransactionPrivate::filtersToString(filters)))
+}
+
+void Transaction::getDistroUpgrades()
+{
+    RUN_TRANSACTION(GetDistroUpgrades())
+}
+
+void Transaction::installFiles(const QStringList &files, bool onlyTrusted)
+{
+    RUN_TRANSACTION(InstallFiles(onlyTrusted, files))
+}
+
+void Transaction::installFiles(const QString &file, bool onlyTrusted)
+{
+    installFiles(QStringList() << file, onlyTrusted);
+}
+
+void Transaction::installPackages(const QList<Package> &packages, bool onlyTrusted)
+{
+    RUN_TRANSACTION(InstallPackages(onlyTrusted, Util::packageListToPids(packages)))
+}
+
+void Transaction::installPackages(const Package &package, bool onlyTrusted)
+{
+    installPackages(QList<Package>() << package, onlyTrusted);
+}
+
+void Transaction::installSignature(Signature::Type type, const QString &keyId, const Package &package)
+{
+    RUN_TRANSACTION(InstallSignature(Util::enumToString<Signature>(type, "Type", "Signature"), keyId, package.id()))
+}
+
+void Transaction::refreshCache(bool force)
+{
+    RUN_TRANSACTION(RefreshCache(force))
+}
+
+void Transaction::removePackages(const QList<Package> &packages, bool allowDeps, bool autoremove)
+{
+    RUN_TRANSACTION(RemovePackages(Util::packageListToPids(packages), allowDeps, autoremove))
+}
+
+void Transaction::removePackages(const Package &package, bool allowDeps, bool autoremove)
+{
+    removePackages(QList<Package>() << package, allowDeps, autoremove);
+}
+
+void Transaction::repoEnable(const QString &repoId, bool enable)
+{
+    RUN_TRANSACTION(RepoEnable(repoId, enable))
+}
+
+void Transaction::repoSetData(const QString &repoId, const QString &parameter, const QString &value)
+{
+    RUN_TRANSACTION(RepoSetData(repoId, parameter, value))
+}
+
+void Transaction::resolve(const QStringList &packageNames, Transaction::Filters filters)
+{
+    RUN_TRANSACTION(Resolve(TransactionPrivate::filtersToString(filters), packageNames))
+}
+
+void Transaction::resolve(const QString &packageName, Transaction::Filters filters)
+{
+    resolve(QStringList() << packageName, filters);
+}
+
+void Transaction::searchFiles(const QStringList &search, Transaction::Filters filters)
+{
+    RUN_TRANSACTION(SearchFiles(TransactionPrivate::filtersToString(filters), search))
+}
+
+void Transaction::searchFiles(const QString &search, Transaction::Filters filters)
+{
+    searchFiles(QStringList() << search, filters);
+}
+
+void Transaction::searchDetails(const QStringList &search, Transaction::Filters filters)
+{
+    RUN_TRANSACTION(SearchDetails(TransactionPrivate::filtersToString(filters), search))
+}
+
+void Transaction::searchDetails(const QString &search, Transaction::Filters filters)
+{
+    searchDetails(QStringList() << search, filters);
+}
+
+void Transaction::searchGroups(const QStringList &groups, Transaction::Filters filters)
+{
+    RUN_TRANSACTION(SearchGroups(TransactionPrivate::filtersToString(filters), groups))
+}
+
+void Transaction::searchGroups(const QString &group, Transaction::Filters filters)
+{
+    searchGroups(QStringList() << group, filters);
+}
+
+void Transaction::searchGroups(Package::Groups groups, Transaction::Filters filters)
+{
+    QStringList groupsSL;
+    foreach (const Package::Group &group, groups) {
+        groupsSL << Util::enumToString<Package>(group, "Group", "Group");
+    }
+
+    searchGroups(groupsSL, filters);
+}
+
+void Transaction::searchGroups(Package::Group group, Transaction::Filters filters)
+{
+    searchGroups(Package::Groups() << group, filters);
+}
+
+void Transaction::searchNames(const QStringList &search, Transaction::Filters filters)
+{
+    RUN_TRANSACTION(SearchNames(TransactionPrivate::filtersToString(filters), search))
+}
+
+void Transaction::searchNames(const QString &search, Transaction::Filters filters)
+{
+    searchNames(QStringList() << search, filters);
+}
+
+void Transaction::simulateInstallFiles(const QStringList &files)
+{
+    RUN_TRANSACTION(SimulateInstallFiles(files))
+}
+
+void Transaction::simulateInstallFiles(const QString &file)
+{
+    simulateInstallFiles(QStringList() << file);
+}
+
+void Transaction::simulateInstallPackages(const QList<Package> &packages)
+{
+    RUN_TRANSACTION(SimulateInstallPackages(Util::packageListToPids(packages)))
+}
+
+void Transaction::simulateInstallPackages(const Package &package)
+{
+    simulateInstallPackages(QList<Package>() << package);
+}
+
+void Transaction::simulateRemovePackages(const QList<Package> &packages, bool autoremove)
+{
+    RUN_TRANSACTION(SimulateRemovePackages(Util::packageListToPids(packages), autoremove))
+}
+
+void Transaction::simulateRemovePackages(const Package &package, bool autoremove)
+{
+    simulateRemovePackages(QList<Package>() << package, autoremove);
+}
+
+void Transaction::simulateUpdatePackages(const QList<Package> &packages)
+{
+    RUN_TRANSACTION(SimulateUpdatePackages(Util::packageListToPids(packages)))
+}
+
+void Transaction::simulateUpdatePackages(const Package &package)
+{
+    simulateUpdatePackages(QList<Package>() << package);
+}
+
+void Transaction::updatePackages(const QList<Package> &packages, bool onlyTrusted)
+{
+    RUN_TRANSACTION(UpdatePackages(onlyTrusted, Util::packageListToPids(packages)))
+}
+
+void Transaction::updatePackages(const Package &package, bool onlyTrusted)
+{
+    updatePackages(QList<Package>() << package, onlyTrusted);
+}
+
+void Transaction::updateSystem(bool onlyTrusted)
+{
+    RUN_TRANSACTION(UpdateSystem(onlyTrusted))
+}
+
+void Transaction::whatProvides(Transaction::Provides type, const QStringList &search, Transaction::Filters filters)
+{
+    RUN_TRANSACTION(WhatProvides(TransactionPrivate::filtersToString(filters), Util::enumToString<Transaction>(type, "Provides", "Provides"), search))
+}
+
+void Transaction::whatProvides(Transaction::Provides type, const QString &search, Transaction::Filters filters)
+{
+    whatProvides(type, QStringList() << search, filters);
+}
+
+#include "transaction.moc"
diff --git a/lib/packagekit-qt2/transaction.h b/lib/packagekit-qt2/transaction.h
new file mode 100644
index 0000000..ef9633b
--- /dev/null
+++ b/lib/packagekit-qt2/transaction.h
@@ -0,0 +1,986 @@
+/*
+ * This file is part of the QPackageKit project
+ * Copyright (C) 2008 Adrien Bustany <madcat at mymadcat.com>
+ * Copyright (C) 2010-2011 Daniel Nicoletti <dantti85-pk at yahoo.com.br>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef PACKAGEKIT_TRANSACTION_H
+#define PACKAGEKIT_TRANSACTION_H
+
+#include <QtCore/QObject>
+
+#include "signature.h"
+#include "bitfield.h"
+#include "package.h"
+
+namespace PackageKit {
+
+class DaemonPrivate;
+
+/**
+* \class Transaction transaction.h Transaction
+* \author Adrien Bustany \e <madcat at mymadcat.com>
+* \author Daniel Nicoletti \e <dantti85-pk at yahoo.com.br>
+*
+* \brief A transaction represents an occurring action in PackageKit
+*
+* A Transaction is created whenever you do an asynchronous action (for example a Search, Install...).
+* This class allows you to monitor and control the flow of the action.
+*
+* The Transaction will be automatically deleted as soon as it emits the finished() signal.
+*
+* You cannot create a Transaction directly, use the functions in the Daemon class instead.
+*
+* \sa Daemon
+*/
+class TransactionPrivate;
+class Transaction : public QObject
+{
+    Q_OBJECT
+    Q_ENUMS(Package::Group)
+    Q_ENUMS(InternalError)
+    Q_ENUMS(Roles)
+    Q_ENUMS(Error)
+    Q_ENUMS(Exit)
+    Q_ENUMS(Filter)
+    Q_ENUMS(Message)
+    Q_ENUMS(Status)
+    Q_ENUMS(MediaType)
+    Q_ENUMS(Provides)
+    Q_ENUMS(DistroUpgrade)
+public:
+        /**
+     * Describes an error at the daemon level (for example, PackageKit crashes or is unreachable)
+     *
+     * \sa Client::error
+     * \sa Transaction::error
+     */
+    typedef enum {
+        NoInternalError = 0,
+        UnkownInternalError,
+        InternalErrorFailed,
+        InternalErrorFailedAuth,
+        InternalErrorNoTid,
+        InternalErrorAlreadyTid,
+        InternalErrorRoleUnkown,
+        InternalErrorCannotStartDaemon,
+        InternalErrorInvalidInput,
+        InternalErrorInvalidFile,
+        InternalErrorFunctionNotSupported,
+        InternalErrorDaemonUnreachable,
+        /* this always has to be at the end of the list */
+        LastInternalError
+    } InternalError;
+
+    typedef enum {
+        UnknownRole,
+        RoleCancel,
+        RoleGetDepends,
+        RoleGetDetails,
+        RoleGetFiles,
+        RoleGetPackages,
+        RoleGetRepoList,
+        RoleGetRequires,
+        RoleGetUpdateDetail,
+        RoleGetUpdates,
+        RoleInstallFiles,
+        RoleInstallPackages,
+        RoleInstallSignature,
+        RoleRefreshCache,
+        RoleRemovePackages,
+        RoleRepoEnable,
+        RoleRepoSetData,
+        RoleResolve,
+        RoleRollback,
+        RoleSearchDetails,
+        RoleSearchFile,
+        RoleSearchGroup,
+        RoleSearchName,
+        RoleUpdatePackages,
+        RoleUpdateSystem,
+        RoleWhatProvides,
+        RoleAcceptEula,
+        RoleDownloadPackages,
+        RoleGetDistroUpgrades,
+        RoleGetCategories,
+        RoleGetOldTransactions,
+        RoleSimulateInstallFiles,
+        RoleSimulateInstallPackages,
+        RoleSimulateRemovePackages,
+        RoleSimulateUpdatePackages,
+        RoleUpgradeSystem, // Since 0.6.11
+        /* this always has to be at the end of the list */
+        LastRole
+    } Role;
+    typedef Bitfield Roles;
+
+    /**
+    * Lists the different types of error
+    */
+    typedef enum {
+        UnknownError,
+        ErrorOom,
+        ErrorNoNetwork,
+        ErrorNotSupported,
+        ErrorInternalError,
+        ErrorGpgFailure,
+        ErrorPackageIdInvalid,
+        ErrorPackageNotInstalled,
+        ErrorPackageNotFound,
+        ErrorPackageAlreadyInstalled,
+        ErrorPackageDownloadFailed,
+        ErrorGroupNotFound,
+        ErrorGroupListInvalid,
+        ErrorDepResolutionFailed,
+        ErrorFilterInvalid,
+        ErrorCreateThreadFailed,
+        ErrorTransactionError,
+        ErrorTransactionCancelled,
+        ErrorNoCache,
+        ErrorRepoNotFound,
+        ErrorCannotRemoveSystemPackage,
+        ErrorProcessKill,
+        ErrorFailedInitialization,
+        ErrorFailedFinalise,
+        ErrorFailedConfigParsing,
+        ErrorCannotCancel,
+        ErrorCannotGetLock,
+        ErrorNoPackagesToUpdate,
+        ErrorCannotWriteRepoConfig,
+        ErrorLocalInstallFailed,
+        ErrorBadGpgSignature,
+        ErrorMissingGpgSignature,
+        ErrorCannotInstallSourcePackage,
+        ErrorRepoConfigurationError,
+        ErrorNoLicenseAgreement,
+        ErrorFileConflicts,
+        ErrorPackageConflicts,
+        ErrorRepoNotAvailable,
+        ErrorInvalidPackageFile,
+        ErrorPackageInstallBlocked,
+        ErrorPackageCorrupt,
+        ErrorAllPackagesAlreadyInstalled,
+        ErrorFileNotFound,
+        ErrorNoMoreMirrorsToTry,
+        ErrorNoDistroUpgradeData,
+        ErrorIncompatibleArchitecture,
+        ErrorNoSpaceOnDevice,
+        ErrorMediaChangeRequired,
+        ErrorNotAuthorized,
+        ErrorUpdateNotFound,
+        ErrorCannotInstallRepoUnsigned,
+        ErrorCannotUpdateRepoUnsigned,
+        ErrorCannotGetFilelist,
+        ErrorCannotGetRequires,
+        ErrorCannotDisableRepository,
+        ErrorRestrictedDownload,
+        ErrorPackageFailedToConfigure,
+        ErrorPackageFailedToBuild,
+        ErrorPackageFailedToInstall,
+        ErrorPackageFailedToRemove,
+        ErrorUpdateFailedDueToRunningProcess,
+        ErrorPackageDatabaseChanged,
+        ErrorProvideTypeNotSupported,
+        ErrorInstallRootInvalid,
+        ErrorCannotFetchSources,
+        /* this always has to be at the end of the list */
+        LastError
+    } Error;
+
+    /**
+     * Describes how the transaction finished
+     * \sa Transaction::finished()
+     */
+    typedef enum {
+        UnknownExit,
+        ExitSuccess,
+        ExitFailed,
+        ExitCancelled,
+        ExitKeyRequired,
+        ExitEulaRequired,
+        ExitKilled, /* when we forced the cancel, but had to sigkill */
+        ExitMediaChangeRequired,
+        ExitNeedUntrusted,
+        /* this always has to be at the end of the list */
+        LastExit
+    } Exit;
+
+    /**
+     * Describes the different filters
+     */
+    typedef enum {
+        UnknownFilter        = 0x0000001,
+        FilterNone           = 0x0000002,
+        FilterInstalled      = 0x0000004,
+        FilterNotInstalled   = 0x0000008,
+        FilterDevel          = 0x0000010,
+        FilterNotDevel       = 0x0000020,
+        FilterGui            = 0x0000040,
+        FilterNotGui         = 0x0000080,
+        FilterFree           = 0x0000100,
+        FilterNotFree        = 0x0000200,
+        FilterVisible        = 0x0000400,
+        FilterNotVisible     = 0x0000800,
+        FilterSupported      = 0x0001000,
+        FilterNotSupported   = 0x0002000,
+        FilterBasename       = 0x0004000,
+        FilterNotBasename    = 0x0008000,
+        FilterNewest         = 0x0010000,
+        FilterNotNewest      = 0x0020000,
+        FilterArch           = 0x0040000,
+        FilterNotArch        = 0x0080000,
+        FilterSource         = 0x0100000,
+        FilterNotSource      = 0x0200000,
+        FilterCollections    = 0x0400000,
+        FilterNotCollections = 0x0800000,
+        FilterApplication    = 0x1000000,
+        FilterNotApplication = 0x2000000,
+        /* this always has to be at the end of the list */
+        FilterLast           = 0x4000000
+    } Filter;
+    Q_DECLARE_FLAGS(Filters, Filter)
+
+    /**
+     * Describes a message's type
+     */
+    typedef enum {
+        UnknownMessage,
+        MessageBrokenMirror,
+        MessageConnectionRefused,
+        MessageParameterInvalid,
+        MessagePriorityInvalid,
+        MessageBackendError,
+        MessageDaemonError,
+        MessageCacheBeingRebuilt,
+        MessageUntrustedPackage,
+        MessageNewerPackageExists,
+        MessageCouldNotFindPackage,
+        MessageConfigFilesChanged,
+        MessagePackageAlreadyInstalled,
+        MessageAutoremoveIgnored,
+        MessageRepoMetadataDownloadFailed,
+        MessageRepoForDevelopersOnly,
+        MessageOtherUpdatesHeldBack,
+        /* this always has to be at the end of the list */
+        LastMessage
+    } Message;
+
+    /**
+     * Describes the current state of the transaction
+     */
+    typedef enum {
+        UnknownStatus,
+        StatusWait,
+        StatusSetup,
+        StatusRunning,
+        StatusQuery,
+        StatusInfo,
+        StatusRemove,
+        StatusRefreshCache,
+        StatusDownload,
+        StatusInstall,
+        StatusUpdate,
+        StatusCleanup,
+        StatusObsolete,
+        StatusDepResolve,
+        StatusSigCheck,
+        StatusRollback,
+        StatusTestCommit,
+        StatusCommit,
+        StatusRequest,
+        StatusFinished,
+        StatusCancel,
+        StatusDownloadRepository,
+        StatusDownloadPackagelist,
+        StatusDownloadFilelist,
+        StatusDownloadChangelog,
+        StatusDownloadGroup,
+        StatusDownloadUpdateinfo,
+        StatusRepackaging,
+        StatusLoadingCache,
+        StatusScanApplications,
+        StatusGeneratePackageList,
+        StatusWaitingForLock,
+        StatusWaitingForAuth,
+        StatusScanProcessList,
+        StatusCheckExecutableFiles,
+        StatusCheckLibraries,
+        StatusCopyFiles,
+        /* this always has to be at the end of the list */
+        LastStatus
+    } Status;
+
+    /**
+     * Describes what kind of media is required
+     */
+    typedef enum {
+        UnknownMediaType,
+        MediaTypeCd,
+        MediaTypeDvd,
+        MediaTypeDisc,
+        /* this always has to be at the end of the list */
+        LastMediaType
+    } MediaType;
+
+    /**
+     * Enum used to describe a "provides" request
+     * \sa whatProvides
+     */
+    typedef enum {
+        UnknownProvides,
+        ProvidesAny,
+        ProvidesModalias,
+        ProvidesCodec,
+        ProvidesMimetype,
+        ProvidesFont,
+        ProvidesHardwareDriver,
+        ProvidesPostscriptDriver,
+        /* this always has to be at the end of the list */
+        LastProvides
+    } Provides;
+
+    /**
+     * Describes an distro upgrade state
+     */
+    typedef enum {
+        UnknownDistroUpgrade,
+        DistroUpgradeStable,
+        DistroUpgradeUnstable,
+        /* this always has to be at the end of the list */
+        LastDistroUpgrade
+    } DistroUpgrade;
+
+    /**
+     * Create a transaction object with transaction id \p tid
+     * \note The if \p tid is a NULL string then it will automatically
+     * asks PackageKit for a tid
+     *
+     * The transaction object \b cannot be reused
+     * (i.e. simulateInstallPackages then installPackages)
+     *
+     * \warning after creating the transaction object be sure
+     * to verify if it doesn't have any \sa error()
+     */
+    Transaction(QObject *parent = 0, const QString &tid = QString());
+
+    /**
+     * Destructor
+     */
+    ~Transaction();
+
+    /**
+     * \brief Returns the TID of the Transaction
+     *
+     * The TID (Transaction ID) uniquely identifies the transaction.
+     *
+     * \return the TID of the current transaction
+     */
+    QString tid() const;
+
+    /**
+     * \brief Returns the error status of the Transaction
+     *
+     * \return A value from TransactionError describing the state of the transaction
+     * or 0 in case of not having an error
+     */
+    Transaction::InternalError error() const;
+
+    /**
+     * Indicates weither you can cancel the transaction or not
+     * i.e. the backend forbids cancelling the transaction while
+     * it's installing packages
+     *
+     * \return true if you are able cancel the transaction, false else
+     */
+    bool allowCancel() const;
+
+    /**
+     * Indicates weither the transaction caller is active or not
+     *
+     * The caller can be inactive if it has quitted before the transaction finished.
+     *
+     * \return true if the caller is active, false else
+     */
+    bool isCallerActive() const;
+
+    /**
+     * Returns the last package processed by the transaction
+     *
+     * This is mostly used when getting an already existing Transaction, to
+     * display a more complete summary of the transaction.
+     *
+     * \return the last package processed by the transaction
+     * \sa transactionListChanged
+     * \sa getTransactionList
+     */
+    Package lastPackage() const;
+
+    /**
+     * The percentage complete of the whole transaction.
+     * \return percentage, or 101 if not known.
+     */
+    uint percentage() const;
+
+    /**
+     * The percentage complete of the individual task, for example, downloading.
+     * \return percentage, or 101 if not known.
+     */
+    uint subpercentage() const;
+
+    /**
+     * The amount of time elapsed during the transaction in seconds.
+     * \return time in seconds.
+     */
+    uint elapsedTime() const;
+
+    /**
+     * The estimated time remaining of the transaction in seconds, or 0 if not known.
+     * \return time in seconds, or 0 if not known.
+     */
+    uint remainingTime() const;
+
+    /**
+     * Returns the estimated speed of the transaction (copying, downloading, etc.)
+     * \return speed bits per second, or 0 if not known.
+     */
+    uint speed() const;
+
+    /**
+     * Returns information describing the transaction
+     * like InstallPackages, SearchName or GetUpdates
+     * \return the current role of the transaction
+     */
+    Transaction::Role role() const;
+
+    /**
+     * \brief Tells the underlying package manager to use the given \p hints
+     *
+     * This method allows the calling session to set transaction \p hints for
+     * the package manager which can change as the transaction runs.
+     *
+     * This method can be sent before the transaction has been run
+     * (by using Daemon::setHints) or whilst it is running
+     * (by using Transaction::setHints).
+     * There is no limit to the number of times this
+     * method can be sent, although some backends may only use the values
+     * that were set before the transaction was started.
+     *
+     * The \p hints can be filled with entries like these
+     * ('locale=en_GB.utf8','idle=true','interactive=false').
+     *
+     * \sa Daemon::setHints
+     */
+    void setHints(const QString &hints);
+    void setHints(const QStringList &hints);
+
+    /**
+     * Returns the current state of the transaction
+     * \return a Transaction::Status value describing the status of the transaction
+     */
+    Status status() const;
+
+    /**
+     * Returns the date at which the transaction was created
+     * \return a QDateTime object containing the date at which the transaction was created
+     * \note This function only returns a real value for old transactions returned by getOldTransactions
+     */
+    QDateTime timespec() const;
+
+    /**
+     * Returns weither the trasaction succeded or not
+     * \return true if the transaction succeeded, false else
+     * \note This function only returns a real value for old transactions returned by getOldTransactions
+     */
+    bool succeeded() const;
+
+    /**
+     * Returns the time the transaction took to finish
+     * \return the number of milliseconds the transaction took to finish
+     * \note This function only returns a real value for old transactions returned by getOldTransactions
+     */
+    uint duration() const;
+
+    /**
+     * Returns some data set by the backend to pass additionnal information
+     * \return a string set by the backend
+     * \note This function only returns a real value for old transactions returned by getOldTransactions
+     */
+    QString data() const;
+
+    /**
+     * Returns the UID of the calling process
+     * \return the uid of the calling process
+     * \note This function only returns a real value for old transactions returned by getOldTransactions
+     */
+    uint uid() const;
+
+    /**
+     * Returns the command line for the calling process
+     * \return a string of the command line for the calling process
+     * \note This function only returns a real value for old transactions returned by getOldTransactions
+     */
+    QString cmdline() const;
+
+    /**
+     * \brief Accepts an EULA
+     *
+     * The EULA is identified by the EulaInfo structure \p info
+     *
+     * \note You need to restart the transaction which triggered the EULA manually
+     *
+     * \sa eulaRequired
+     */
+    void acceptEula(const QString &eulaId);
+
+    /**
+     * Download the given \p packages to a temp dir, if \p storeInCache is true
+     * the download will be stored in the package manager cache
+     */
+    void downloadPackages(const QList<Package> &packages, bool storeInCache = false);
+
+    /**
+     * This is a convenience function
+     */
+    void downloadPackages(const Package &package, bool storeInCache = false);
+
+    /**
+     * Returns the collection categories
+     *
+     * \sa category
+     */
+    void getCategories();
+
+    /**
+     * \brief Gets the list of dependencies for the given \p packages
+     *
+     * You can use the \p filters to limit the results to certain packages.
+     * The \p recursive flag indicates if the package manager should also
+     * fetch the dependencies's dependencies.
+     *
+     * \note This method emits \sa package()
+     */
+    void getDepends(const QList<Package> &packages, Filters filters, bool recursive = false);
+    void getDepends(const Package &package, Filters filters , bool recursive = false);
+
+    /**
+     * Gets more details about the given \p packages
+     *
+     * \sa Transaction::details
+     * \note This method emits \sa package()
+     * with details set
+     */
+    void getDetails(const QList<Package> &packages);
+    void getDetails(const Package &package);
+
+    /**
+     * Gets the files contained in the given \p packages
+     *
+     * \note This method emits \sa files()
+     */
+    void getFiles(const QList<Package> &packages);
+    void getFiles(const Package &packages);
+
+    /**
+     * \brief Gets the last \p number finished transactions
+     *
+     * \note You must delete these transactions yourself
+     * \note This method emits \sa transaction()
+     */
+    void getOldTransactions(uint number);
+
+    /**
+     * Gets all the packages matching the given \p filters
+     *
+     * \note This method emits \sa package()
+     */
+    void getPackages(Filters filters = FilterNone);
+
+    /**
+     * Gets the list of software repositories matching the given \p filters
+     *
+     * \note This method emits \sa repository()
+     */
+    void getRepoList(Filters filter = FilterNone);
+
+    /**
+     * \brief Searches for the packages requiring the given \p packages
+     *
+     * The search can be limited using the \p filters parameter.
+     * The \p recursive flag is used to tell if the package manager should
+     * also search for the package requiring the resulting packages.
+     *
+     * \note This method emits \sa package()
+     */
+    void getRequires(const QList<Package> &packages, Filters filters, bool recursive = false);
+    void getRequires(const Package &package, Filters filters, bool recursive = false);
+
+    /**
+     * Retrieves more details about the update for the given \p packages
+     *
+     * \note This method emits \sa updateDetail()
+     */
+    void getUpdateDetail(const QList<Package> &packages);
+    void getUpdateDetail(const Package &package);
+
+    /**
+     * \p Gets the available updates
+     *
+     * The \p filters parameters can be used to restrict the updates returned
+     *
+     * \note This method emits \sa package()
+     */
+    void getUpdates(Filters filters = FilterNone);
+
+    /**
+     * Retrieves the available distribution upgrades
+     *
+     * \note This method emits \sa distroUpgrade()
+     */
+    void getDistroUpgrades();
+
+    /**
+     * \brief Installs the local packages \p files
+     *
+     * \p onlyTrusted indicate if the packages are signed by a trusted authority
+     *
+     * \note This method emits \sa package()
+     * and \sa changed()
+     */
+    void installFiles(const QStringList &files, bool onlyTrusted = true);
+    void installFiles(const QString &file, bool onlyTrusted = true);
+
+    /**
+     * Install the given \p packages
+     *
+     * \p only_trusted indicates if we should allow installation of untrusted packages (requires a different authorization)
+     *
+     * \note This method emits \sa package()
+     * and \sa changed()
+     */
+    void installPackages(const QList<Package> &packages, bool onlyTrusted = true);
+    void installPackages(const Package &package, bool onlyTrusted = true);
+
+    /**
+     * \brief Installs a signature
+     *
+     * \p type, \p keyId and \p package generally come from the Transaction::repoSignatureRequired
+     */
+    void installSignature(Signature::Type type, const QString &keyId, const Package &package);
+
+    /**
+     * Refreshes the package manager's cache
+     *
+     * \note This method emits \sa changed()
+     */
+    void refreshCache(bool force);
+
+    /**
+     * \brief Removes the given \p packages
+     *
+     * \p allowDeps if the package manager has the right to remove other packages which depend on the
+     * packages to be removed. \p autoRemove tells the package manager to remove all the package which
+     * won't be needed anymore after the packages are uninstalled.
+     *
+     * \note This method emits \sa package()
+     * and \sa changed()
+     */
+    void removePackages(const QList<Package>  &packages, bool allowDeps = false, bool autoRemove = false);
+    void removePackages(const Package &package, bool allowDeps = false, bool autoRemove = false);
+
+    /**
+     * Activates or disables a repository
+     */
+    void repoEnable(const QString &repoId, bool enable = true);
+
+    /**
+     * Sets a repository's parameter
+     */
+    void repoSetData(const QString &repoId, const QString &parameter, const QString &value);
+
+    /**
+     * \brief Tries to create a Package object from the package's name
+     *
+     * The \p filters can be used to restrict the search
+     *
+     * \note This method emits \sa package()
+     */
+    void resolve(const QStringList &packageNames, Filters filters = FilterNone);
+    void resolve(const QString &packageName, Filters filters = FilterNone);
+
+    /**
+     * \brief Search in the packages files
+     *
+     * \p filters can be used to restrict the returned packages
+     *
+     * \note This method emits \sa package()
+     */
+    void searchFiles(const QStringList &search, Filters filters = FilterNone);
+    void searchFiles(const QString &search, Filters filters = FilterNone);
+
+    /**
+     * \brief Search in the packages details
+     *
+     * \p filters can be used to restrict the returned packages
+     *
+     * \note This method emits \sa package()
+     */
+    void searchDetails(const QStringList &search, Filters filters = FilterNone);
+    void searchDetails(const QString &search, Filters filters = FilterNone);
+
+    /**
+     * \brief Lists all the packages in the given \p group
+     *
+     * \p groups is the name of the group that you want, when searching for
+     * categories prefix it with '@'
+     * \p filters can be used to restrict the returned packages
+     *
+     * \note This method emits \sa package()
+     */
+    void searchGroups(const QStringList &groups, Filters filters = FilterNone);
+    void searchGroups(const QString &group, Filters filters = FilterNone);
+
+    /**
+     * \brief Lists all the packages in the given \p group
+     *
+     * \p filters can be used to restrict the returned packages
+     *
+     * \note This method emits \sa package()
+     */
+    void searchGroups(Package::Groups group, Filters filters = FilterNone);
+    void searchGroups(Package::Group group, Filters filters = FilterNone);
+
+    /**
+     * \brief Search in the packages names
+     *
+     * \p filters can be used to restrict the returned packages
+     *
+     * \note This method emits \sa package()
+     */
+    void searchNames(const QStringList &search, Filters filters = FilterNone);
+    void searchNames(const QString &search, Filters filters = FilterNone);
+
+    /**
+     * \brief Simulates an installation of \p files.
+     *
+     * You should call this method before installing \p files
+     * \note: This method might emit \sa package()
+     *   with INSTALLING, REMOVING, UPDATING,
+     *        REINSTALLING or OBSOLETING status.
+     */
+    void simulateInstallFiles(const QStringList &files);
+    void simulateInstallFiles(const QString &file);
+
+    /**
+     * \brief Simulates an installation of \p packages.
+     *
+     * You should call this method before installing \p packages
+     * \note: This method might emit \sa package()
+     *   with INSTALLING, REMOVING, UPDATING,
+     *        REINSTALLING or OBSOLETING status.
+     */
+    void simulateInstallPackages(const QList<Package> &packages);
+    void simulateInstallPackages(const Package &package);
+
+    /**
+     * \brief Simulates a removal of \p packages.
+     *
+     * You should call this method before removing \p packages
+     * \note: This method might emit \sa package()
+     *   with INSTALLING, REMOVING, UPDATING,
+     *        REINSTALLING or OBSOLETING status.
+     */
+    void simulateRemovePackages(const QList<Package> &packages, bool autoRemove = false);
+    void simulateRemovePackages(const Package &package, bool autoRemove = false);
+
+    /**
+     * \brief Simulates an update of \p packages.
+     *
+     * You should call this method before updating \p packages
+     * \note: This method might emit \sa package()
+     *   with INSTALLING, REMOVING, UPDATING,
+     *        REINSTALLING or OBSOLETING status.
+     */
+    void simulateUpdatePackages(const QList<Package> &packages);
+    void simulateUpdatePackages(const Package &package);
+
+    /**
+     * Update the given \p packages
+     *
+     * \p onlyTrusted indicates if this transaction is only allowed to install trusted packages
+     * \note This method emits \sa package()
+     * and \sa changed()
+     */
+    void updatePackages(const QList<Package> &packages, bool onlyTrusted = true);
+    void updatePackages(const Package &package, bool onlyTrusted = true);
+
+    /**
+     * Updates the whole system
+     *
+     * \p onlyTrusted indicates if this transaction is only allowed to install trusted packages
+     *
+     * \note This method emits \sa package()
+     * and \sa changed()
+     */
+    void updateSystem(bool onlyTrusted = true);
+
+    /**
+     * Searchs for a package providing a file/a mimetype
+     *
+     * \note This method emits \sa package()
+     */
+    void whatProvides(Provides type, const QStringList &search, Filters filters = FilterNone);
+    void whatProvides(Provides type, const QString &search, Filters filters = FilterNone);
+
+public Q_SLOTS:
+    /**
+     * Cancels the transaction
+     */
+    void cancel();
+
+Q_SIGNALS:
+    /**
+     * The transaction has changed one of it's properties
+     */
+    void changed();
+
+    /**
+     * \brief Sends a category
+     *
+     * \li \p parentId is the id of the parent category. A blank parent means a root category
+     * \li \p categoryId is the id of the category
+     * \li \p name is the category's name. This name is localized.
+     * \li \p summary is the category's summary. It is localized.
+     * \li \p icon is the icon identifier eg. server-cfg. If unknown, it is set to icon-missing.
+     */
+    void category(const QString &parentId, const QString &categoryId, const QString &name, const QString &summary, const QString &icon);
+
+    /**
+     * Emitted when a distribution upgrade is available
+     * \sa getDistroUpgrades()
+     */
+    void distroUpgrade(PackageKit::Transaction::DistroUpgrade type, const QString &name, const QString &description);
+
+    /**
+     * Emitted when an error occurs
+     */
+    void errorCode(PackageKit::Transaction::Error error, const QString &details);
+
+    /**
+     * Emitted when an EULA agreement prevents the transaction from running
+     * \li \c eulaId is the EULA identifier
+     * \li \c package is the package for which an EULA is required
+     * \li \c vendorName is the vendor name
+     * \li \c licenseAgreement is the EULA text
+     *
+     * \note You will need to relaunch the transaction after accepting the EULA
+     * \sa acceptEula()
+     */
+    void eulaRequired(const QString &eulaId, const Package &package, const QString &vendor, const QString &licenseAgreement);
+
+    /**
+     * Emitted when a different media is required in order to fetch packages
+     * which prevents the transaction from running
+     * \note You will need to relaunch the transaction after changing the media
+     * \sa Transaction::MediaType
+     */
+    void mediaChangeRequired(PackageKit::Transaction::MediaType type, const QString &id, const QString &text);
+
+    /**
+     * Sends the \p filenames contained in package \p package
+     * \sa Daemon::getFiles
+     */
+    void files(const PackageKit::Package &package, const QStringList &filenames);
+
+    /**
+     * Emitted when the transaction finishes
+     *
+     * \p status describes the exit status, \p runtime is the number of seconds it took to complete the transaction
+     */
+    void finished(PackageKit::Transaction::Exit status, uint runtime);
+
+    /**
+     * Conveys a message sent from the backend
+     *
+     * \p type is the type of the \p message
+     */
+    void message(PackageKit::Transaction::Message type, const QString &message);
+
+    /**
+     * Emitted when the transaction sends a new package
+     */
+    void package(const PackageKit::Package &package);
+
+    /**
+      * Sends some additional details about a software repository
+      * \sa getRepoList()
+      */
+    void repoDetail(const QString& repoId, const QString& description, bool enabled);
+
+    /**
+     * Emitted when the user has to validate a repository's signature
+     */
+    void repoSignatureRequired(const PackageKit::Signature &info);
+
+    /**
+     * Indicates that a restart is required
+     * \p package is the package who triggered the restart signal
+     */
+    void requireRestart(PackageKit::Package::Restart type, const PackageKit::Package &package);
+
+    /**
+     * Sends an old transaction
+     * \sa Daemon::getOldTransactions
+     */
+    void transaction(PackageKit::Transaction *transaction);
+
+protected:
+    TransactionPrivate * const d_ptr;
+
+private:
+    Transaction(const QString &tid,
+                const QString &timespec,
+                bool succeeded,
+                const QString &role,
+                uint duration,
+                const QString &data,
+                uint uid,
+                const QString &cmdline,
+                QObject *parent);
+    Q_DECLARE_PRIVATE(Transaction);
+    Q_DISABLE_COPY(Transaction)
+    Q_PRIVATE_SLOT(d_ptr, void details(const QString& pid, const QString& license, const QString& group, const QString& detail, const QString& url, qulonglong size));
+    Q_PRIVATE_SLOT(d_ptr, void distroUpgrade(const QString& type, const QString& name, const QString& description));
+    Q_PRIVATE_SLOT(d_ptr, void errorCode(const QString& error, const QString& details));
+    Q_PRIVATE_SLOT(d_ptr, void eulaRequired(const QString& eulaId, const QString& pid, const QString& vendor, const QString& licenseAgreement));
+    Q_PRIVATE_SLOT(d_ptr, void mediaChangeRequired(const QString& mediaType, const QString& mediaId, const QString& mediaText));
+    Q_PRIVATE_SLOT(d_ptr, void files(const QString& pid, const QString& filenames));
+    Q_PRIVATE_SLOT(d_ptr, void finished(const QString& exitCode, uint runtime));
+    Q_PRIVATE_SLOT(d_ptr, void message(const QString& type, const QString& message));
+    Q_PRIVATE_SLOT(d_ptr, void package(const QString& info, const QString& pid, const QString& summary));
+    Q_PRIVATE_SLOT(d_ptr, void repoSignatureRequired(const QString& pid, const QString& repoName, const QString& keyUrl, const QString &keyUserid, const QString& keyId, const QString& keyFingerprint, const QString& keyTimestamp, const QString& type));
+    Q_PRIVATE_SLOT(d_ptr, void requireRestart(const QString& type, const QString& pid));
+    Q_PRIVATE_SLOT(d_ptr, void transaction(const QString& oldTid, const QString& timespec, bool succeeded, const QString& role, uint duration, const QString& data, uint uid, const QString& cmdline));
+    Q_PRIVATE_SLOT(d_ptr, void updateDetail(const QString& pid, const QString& updates, const QString& obsoletes, const QString& vendorUrl, const QString& bugzillaUrl, const QString& cveUrl, const QString& restart, const QString& updateText, const QString& changelog, const QString& state, const QString& issued, const QString& updated));
+    Q_PRIVATE_SLOT(d_ptr, void destroy());
+    Q_PRIVATE_SLOT(d_ptr, void daemonQuit());
+};
+Q_DECLARE_OPERATORS_FOR_FLAGS(Transaction::Filters)
+
+} // End namespace PackageKit
+
+#endif
diff --git a/lib/packagekit-qt2/transactionprivate.cpp b/lib/packagekit-qt2/transactionprivate.cpp
new file mode 100644
index 0000000..a723235
--- /dev/null
+++ b/lib/packagekit-qt2/transactionprivate.cpp
@@ -0,0 +1,220 @@
+/*
+ * This file is part of the QPackageKit project
+ * Copyright (C) 2008 Adrien Bustany <madcat at mymadcat.com>
+ * Copyright (C) 2010-2011 Daniel Nicoletti <dantti85-pk at yahoo.com.br>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include <QtCore/QStringList>
+
+#include "transactionprivate.h"
+#include "transaction.h"
+#include "package.h"
+#include "signature.h"
+#include "util.h"
+
+using namespace PackageKit;
+
+TransactionPrivate::TransactionPrivate(Transaction* parent) :
+    q_ptr(parent),
+    p(0),
+    destroyed(false)
+{
+}
+
+void TransactionPrivate::details(const QString &pid,
+                                 const QString &license,
+                                 const QString &group,
+                                 const QString &detail,
+                                 const QString &url,
+                                 qulonglong size)
+{
+    Q_Q(Transaction);
+    Package package(pid);
+    package.setLicense(license);
+    package.setGroup(static_cast<Package::Group>(Util::enumFromString<Package>(group, "Group", "Group")));
+    package.setDescription(detail);
+    package.setUrl(url);
+    package.setSize(size);
+
+    q->package(package);
+}
+
+QString TransactionPrivate::filtersToString(const QFlags<PackageKit::Transaction::Filter> &flags)
+{
+    QStringList flagStrings;
+    for (int i = Transaction::UnknownFilter; i < Transaction::FilterLast; i *= 2) {
+        if (static_cast<Transaction::Filter>(i) & flags) {
+            flagStrings.append(Util::enumToString<Transaction>(static_cast<Transaction::Filter>(i), "Filter", "Filter"));
+        }
+    }
+
+    return flagStrings.join(";");
+}
+
+void TransactionPrivate::distroUpgrade(const QString &type, const QString &name, const QString &description)
+{
+    Q_Q(Transaction);
+    int distroUpgradeType = Util::enumFromString<Transaction>(type, "DistroUpgrade", "DistroUpgrade");
+    q->distroUpgrade(static_cast<Transaction::DistroUpgrade>(distroUpgradeType),
+                     name,
+                     description);
+}
+
+void TransactionPrivate::errorCode(const QString &error, const QString &details)
+{
+    Q_Q(Transaction);
+    q->errorCode(static_cast<Transaction::Error>(Util::enumFromString<Transaction>(error, "Error", "Error")), details);
+}
+
+void TransactionPrivate::eulaRequired(const QString &eulaId, const QString &pid, const QString &vendor, const QString &licenseAgreement)
+{
+    Q_Q(Transaction);
+    q->eulaRequired(eulaId, Package(pid), vendor, licenseAgreement);
+}
+
+void TransactionPrivate::mediaChangeRequired(const QString &mediaType, const QString &mediaId, const QString &mediaText)
+{
+    Q_Q(Transaction);
+    int mediaTypeEnum = Util::enumFromString<Transaction>(mediaType, "MediaType", "Media");
+    q->mediaChangeRequired(static_cast<Transaction::MediaType>(mediaTypeEnum),
+                           mediaId,
+                           mediaText);
+}
+
+void TransactionPrivate::files(const QString &pid, const QString &filenames)
+{
+    Q_Q(Transaction);
+    q->files(Package(pid), filenames.split(";"));
+}
+
+void TransactionPrivate::finished(const QString &exitCode, uint runtime)
+{
+    Q_Q(Transaction);
+    int exitValue = Util::enumFromString<Transaction>(exitCode, "Exit", "Exit");
+    q->finished(static_cast<Transaction::Exit>(exitValue), runtime);
+}
+
+void TransactionPrivate::destroy()
+{
+    Q_Q(Transaction);
+    q->deleteLater();
+}
+
+void TransactionPrivate::daemonQuit()
+{
+    Q_Q(Transaction);
+    q->finished(Transaction::ExitFailed, 0);
+    destroy();
+}
+
+void TransactionPrivate::message(const QString &type, const QString &message)
+{
+    Q_Q(Transaction);
+    q->message(static_cast<Transaction::Message>(Util::enumFromString<Transaction>(type, "Message", "Message")), message);
+}
+
+void TransactionPrivate::package(const QString &info, const QString &pid, const QString &summary)
+{
+    Q_Q(Transaction);
+    q->package(Package(pid, static_cast<Package::Info>(Util::enumFromString<Transaction>(info, "Info", "Info")), summary));
+}
+
+void TransactionPrivate::repoSignatureRequired(const QString &pid,
+                                               const QString &repoName,
+                                               const QString &keyUrl,
+                                               const QString &keyUserid,
+                                               const QString &keyId,
+                                               const QString &keyFingerprint,
+                                               const QString &keyTimestamp,
+                                               const QString &type)
+{
+    Q_Q(Transaction);
+    Signature i;
+    i.package = Package(pid);
+    i.repoId = repoName;
+    i.keyUrl = keyUrl;
+    i.keyUserid = keyUserid;
+    i.keyId = keyId;
+    i.keyFingerprint = keyFingerprint;
+    i.keyTimestamp = keyTimestamp;
+    i.type = static_cast<Signature::Type>(Util::enumFromString<Signature>(type, "Type", "Signature"));
+
+    q->repoSignatureRequired(i);
+}
+
+void TransactionPrivate::requireRestart(const QString &type, const QString &pid)
+{
+    Q_Q(Transaction);
+    q->requireRestart(static_cast<Package::Restart>(Util::enumFromString<Package>(type, "Restart", "Restart")), Package(pid));
+}
+
+void TransactionPrivate::transaction(const QString &oldTid,
+                                     const QString &timespec,
+                                     bool succeeded,
+                                     const QString &role,
+                                     uint duration,
+                                     const QString &data,
+                                     uint uid,
+                                     const QString &cmdline)
+{
+    Q_Q(Transaction);
+    q->transaction(new Transaction(oldTid, timespec, succeeded, role, duration, data, uid, cmdline, q->parent()));
+}
+
+void TransactionPrivate::updateDetail(const QString &pid,
+                                      const QString &updates,
+                                      const QString &obsoletes,
+                                      const QString &vendorUrl,
+                                      const QString &bugzillaUrl,
+                                      const QString &cveUrl,
+                                      const QString &restart,
+                                      const QString &updateText,
+                                      const QString &changelog,
+                                      const QString &state,
+                                      const QString &issued,
+                                      const QString &updated)
+{
+    Q_Q(Transaction);
+
+    Package package(pid);
+    if (!updates.isEmpty()) {
+        QList<Package> updatesList;
+        foreach (const QString &pid, updates.split("&")) {
+            updatesList << Package(pid);
+        }
+        package.setUpdates(updatesList);
+    }
+    if( !obsoletes.isEmpty() ) {
+        QList<Package> obsoletesList;
+        foreach (const QString &pid, obsoletes.split("&")) {
+            obsoletesList << Package(pid);
+        }
+        package.setObsoletes(obsoletesList);
+    }
+    package.setVendorUrl(vendorUrl);
+    package.setBugzillaUrl(bugzillaUrl);
+    package.setCveUrl(cveUrl);
+    package.setRestart(static_cast<Package::Restart>(Util::enumFromString<Package>(restart, "Restart", "Restart")));
+    package.setUpdateText(updateText);
+    package.setChangelog(changelog);
+    package.setState(static_cast<Package::UpdateState>(Util::enumFromString<Package>(state, "UpdateState", "UpdateState")));
+    package.setIssued(QDateTime::fromString(issued, Qt::ISODate));
+    package.setUpdated(QDateTime::fromString(updated, Qt::ISODate));
+
+    q->package(package);
+}
diff --git a/lib/packagekit-qt2/transactionprivate.h b/lib/packagekit-qt2/transactionprivate.h
new file mode 100644
index 0000000..04729a2
--- /dev/null
+++ b/lib/packagekit-qt2/transactionprivate.h
@@ -0,0 +1,86 @@
+/*
+ * This file is part of the QPackageKit project
+ * Copyright (C) 2008 Adrien Bustany <madcat at mymadcat.com>
+ * Copyright (C) 2010-2011 Daniel Nicoletti <dantti85-pk at yahoo.com.br>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef TRANSACTION_PRIVATE_H
+#define TRANSACTION_PRIVATE_H
+
+#include <QtCore/QString>
+#include <QtCore/QHash>
+
+#include "daemon.h"
+
+class TransactionProxy;
+
+namespace PackageKit {
+
+class Package;
+class Transaction;
+class TransactionPrivate
+{
+    Q_DECLARE_PUBLIC(Transaction)
+protected:
+    TransactionPrivate(Transaction *parent);
+    virtual ~TransactionPrivate() {};
+
+    static QString filtersToString(const QFlags<PackageKit::Transaction::Filter> &flags);
+
+    QString tid;
+    ::TransactionProxy* p;
+    Transaction *q_ptr;
+
+    // Only used for old transactions
+    bool oldtrans;
+    QDateTime timespec;
+    Transaction::Role role;
+    bool succeeded;
+    uint duration;
+    QString data;
+    uint uid;
+    QString cmdline;
+    // used for both old and destroyed transactions
+    bool destroyed;
+
+    // Used for getDetails
+    QHash<QString, Package> packageMap;
+
+    Transaction::InternalError error;
+
+protected Q_SLOTS:
+    void details(const QString &pid, const QString &license, const QString &group, const QString &detail, const QString &url, qulonglong size);
+    void distroUpgrade(const QString &type, const QString &name, const QString &description);
+    void errorCode(const QString &error, const QString &details);
+    void eulaRequired(const QString &eulaId, const QString &pid, const QString& vendor, const QString& licenseAgreement);
+    void mediaChangeRequired(const QString& mediaType, const QString& mediaId, const QString& mediaText);
+    void files(const QString& pid, const QString& filenames);
+    void finished(const QString& exitCode, uint runtime);
+    void message(const QString& type, const QString& message);
+    void package(const QString& info, const QString& pid, const QString& summary);
+    void repoSignatureRequired(const QString& pid, const QString& repoName, const QString& keyUrl, const QString& keyUserid, const QString& keyId, const QString& keyFingerprint, const QString& keyTimestamp, const QString& type);
+    void requireRestart(const QString& type, const QString& pid);
+    void transaction(const QString& oldTid, const QString& timespec, bool succeeded, const QString& role, uint duration, const QString& data, uint uid, const QString& cmdline);
+    void updateDetail(const QString& pid, const QString& updates, const QString& obsoletes, const QString& vendorUrl, const QString& bugzillaUrl, const QString& cveUrl, const QString& restart, const QString& updateText, const QString& changelog, const QString& state, const QString& issued, const QString& updated);
+    void destroy();
+    void daemonQuit();
+};
+
+} // End namespace PackageKit
+
+#endif
diff --git a/lib/packagekit-qt2/util.cpp b/lib/packagekit-qt2/util.cpp
new file mode 100644
index 0000000..9a97d6e
--- /dev/null
+++ b/lib/packagekit-qt2/util.cpp
@@ -0,0 +1,71 @@
+/*
+ * This file is part of the QPackageKit project
+ * Copyright (C) 2008 Adrien Bustany <madcat at mymadcat.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library 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 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "util.h"
+#include "package.h"
+
+#include <QtCore/QStringList>
+
+using namespace PackageKit;
+
+QStringList Util::packageListToPids(const QList<Package> &packages)
+{
+    QStringList pids;
+    foreach (const Package &package, packages) {
+        pids << package.id();
+    }
+
+    return pids;
+}
+
+Transaction::InternalError Util::errorFromString(const QString &errorName)
+{
+    QString error = errorName;
+    if (error.startsWith(QLatin1String("org.freedesktop.packagekit."))) {
+        return Transaction::InternalErrorFailedAuth;
+    }
+
+    error.remove("org.freedesktop.PackageKit.Transaction.");
+
+    if (error.startsWith(QLatin1String("PermissionDenied")) ||
+        error.startsWith(QLatin1String("RefusedByPolicy"))) {
+        return Transaction::InternalErrorFailedAuth;
+    }
+
+    if (error.startsWith(QLatin1String("PackageIdInvalid")) ||
+        error.startsWith(QLatin1String("SearchInvalid")) ||
+        error.startsWith(QLatin1String("FilterInvalid")) ||
+        error.startsWith(QLatin1String("InvalidProvide")) ||
+        error.startsWith(QLatin1String("InputInvalid"))) {
+        return Transaction::InternalErrorInvalidInput;
+    }
+
+    if (error.startsWith(QLatin1String("PackInvalid")) ||
+        error.startsWith(QLatin1String("NoSuchFile")) ||
+        error.startsWith(QLatin1String("NoSuchDirectory"))) {
+        return Transaction::InternalErrorInvalidFile;
+    }
+
+    if (error.startsWith(QLatin1String("NotSupported"))) {
+        return Transaction::InternalErrorFunctionNotSupported;
+    }
+
+    return Transaction::InternalErrorFailed;
+}
diff --git a/lib/packagekit-qt2/util.h b/lib/packagekit-qt2/util.h
new file mode 100644
index 0000000..72f86c3
--- /dev/null
+++ b/lib/packagekit-qt2/util.h
@@ -0,0 +1,139 @@
+/*
+ * This file is part of the QPackageKit project
+ * Copyright (C) 2008 Adrien Bustany <madcat at mymadcat.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library 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 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef PACKAGEKIT_UTIL_H
+#define PACKAGEKIT_UTIL_H
+
+#include <QtCore/QLatin1String>
+#include <QtCore/QMetaEnum>
+#include <QtCore/QDebug>
+
+#include "transaction.h"
+
+namespace PackageKit {
+
+class Package;
+
+class Util
+{
+public:
+    /**
+     * Converts \p str from the PK naming scheme to the QPackageKit enum naming
+     * scheme, prepending \p prefix to the result, and returns the value for enum \p enum
+     * For example, enumFromString("get_requires", "Action") == "ActionGetRequires"
+     * \return the enum value
+     */
+    template<class T> static int enumFromString(const QString &str, const char *enumName, const QString &prefix = QString())
+    {
+        QString realName;
+        bool lastWasDash = false;
+        QChar buf;
+
+        for(int i = 0 ; i < str.length() ; ++i) {
+            buf = str[i].toLower();
+            if(i == 0 || lastWasDash) {
+                buf = buf.toUpper();
+            }
+
+            lastWasDash = false;
+            if(buf.toAscii() == '-') {
+                lastWasDash = true;
+            } else if(buf.toAscii() == '~') {
+                lastWasDash = true;
+                realName += "Not";
+            } else {
+                realName += buf;
+            }
+        };
+
+        if(!prefix.isNull())
+            realName = prefix + realName;
+
+        // Action quirk
+        if(enumName == QLatin1String("Action") && realName == QLatin1String("ActionUpdatePackage"))
+            realName = "ActionUpdatePackages";
+
+
+        int id = T::staticMetaObject.indexOfEnumerator(enumName);
+        QMetaEnum e = T::staticMetaObject.enumerator(id);
+        int enumValue = e.keyToValue(realName.toAscii().data());
+
+        if (enumValue == -1) {
+            enumValue = e.keyToValue(QString("Unknown").append(enumName).toAscii().data());
+            if (!QString(enumName).isEmpty()) {
+                qDebug() << "enumFromString (" << enumName << ") : converted" << str << "to" << QString("Unknown").append(enumName) << ", enum value" << enumValue;
+            }
+        }
+        return enumValue;
+    }
+
+    template<class T> static QString enumToString(int value, const char *enumName, const QString &prefix = QString())
+    {
+        int id = T::staticMetaObject.indexOfEnumerator(enumName);
+        QMetaEnum e = T::staticMetaObject.enumerator(id);
+        if (!e.isValid ()) {
+            qDebug () << "Invalid enum " << enumName;
+            return QString();
+        }
+        QString enumString = e.valueToKey(value);
+        if (enumString.isNull()) {
+            qDebug() << "Enum key not found while searching for value" << value << "in enum" << enumName;
+            return QString();
+        }
+
+        // Remove the prefix
+        if(!prefix.isNull() && enumString.indexOf(prefix) == 0)
+            enumString.remove(0, prefix.length());
+
+        QString pkName;
+        for(int i = 0 ; i < enumString.length() - 1 ; ++i) {
+            pkName += enumString[i];
+            if(enumString[i+1].isUpper())
+                pkName += QChar('-');
+        }
+        pkName += enumString[enumString.length() - 1];
+
+        if(enumName == QLatin1String("Filter")) {
+            if(pkName.indexOf("Not-") == 0) {
+                pkName = pkName.replace(0, 4, "~");
+            }
+            if (pkName == QLatin1String("No-Filter")) {
+                pkName = "none";
+            }
+            if (pkName == QLatin1String("Development")) {
+                pkName = "devel";
+            }
+            if (pkName == QLatin1String("~Development")) {
+                pkName = "~devel";
+            }
+        }
+
+        return pkName.toLower();
+    };
+
+    static QStringList packageListToPids(const QList<Package> &packages);
+
+    static Transaction::InternalError errorFromString(const QString &errorName);
+
+};
+
+} // End namespace PackageKit
+
+#endif
commit 12137903a3b088c0b4dca6860393eef22686986e
Author: Marcin Banasiak <marcin.banasiak at gmail.com>
Date:   Fri Apr 29 13:52:20 2011 +0200

    poldek: port away from PK_BACKEND_OPTIONS

diff --git a/backends/poldek/pk-backend-poldek.c b/backends/poldek/pk-backend-poldek.c
index bfd472d..34baf89 100644
--- a/backends/poldek/pk-backend-poldek.c
+++ b/backends/poldek/pk-backend-poldek.c
@@ -1,6 +1,6 @@
 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
  *
- * Copyright (C) 2008-2010 Marcin Banasiak <megabajt at pld-linux.org>
+ * Copyright (C) 2008-2011 Marcin Banasiak <megabajt at pld-linux.org>
  *
  * Licensed under the GNU General Public License Version 2
  *
@@ -1685,16 +1685,12 @@ search_package_thread (PkBackend *backend)
 		g_free (search);
 	/* Resolve */
 	} else if (mode == SEARCH_ENUM_RESOLVE) {
-		gchar **package_ids;
-		gchar *packages_str;
+		search = g_strjoinv(" ", values);
 
-		package_ids = pk_backend_get_strv (backend, "package_ids");
-		packages_str = g_strjoinv(" ", package_ids);
-
-		search_cmd_installed = g_strdup_printf ("ls -q %s", packages_str);
+		search_cmd_installed = g_strdup_printf ("ls -q %s", search);
 		search_cmd_available = g_strdup (search_cmd_installed);
 
-		g_free (packages_str);
+		g_free (search);
 	}
 
 	if ((search_cmd_installed != NULL && search_cmd_available != NULL) || mode == SEARCH_ENUM_DETAILS) {
@@ -2219,10 +2215,28 @@ poldek_reload (PkBackend *backend, gboolean load_packages) {
 }
 
 /**
- * backend_initalize:
+ * pk_backend_get_description:
  */
-static void
-backend_initalize (PkBackend *backend)
+gchar *
+pk_backend_get_description (PkBackend *backend)
+{
+	return g_strdup ("Poldek");
+}
+
+/**
+ * pk_backend_get_author:
+ */
+gchar *
+pk_backend_get_author (PkBackend *backend)
+{
+	return g_strdup ("Marcin Banasiak <megabajt at pld-linux.org>");
+}
+
+/**
+ * pk_backend_initialize:
+ */
+void
+pk_backend_initialize (PkBackend *backend)
 {
 	g_debug ("backend initalize start");
 
@@ -2236,10 +2250,10 @@ backend_initalize (PkBackend *backend)
 	g_debug ("backend initalize end");
 }
 /**
- * backend_destroy:
+ * pk_backend_destroy:
  */
-static void
-backend_destroy (PkBackend *backend)
+void
+pk_backend_destroy (PkBackend *backend)
 {
 	do_poldek_destroy (backend);
 
@@ -2253,7 +2267,68 @@ backend_destroy (PkBackend *backend)
 }
 
 /**
- * backend_download_packages:
+ * pk_backend_get_groups:
+ */
+PkBitfield
+pk_backend_get_groups (PkBackend *backend)
+{
+	return pk_bitfield_from_enums (
+		PK_GROUP_ENUM_ACCESSORIES,
+		PK_GROUP_ENUM_ADMIN_TOOLS,
+		PK_GROUP_ENUM_COMMUNICATION,
+		PK_GROUP_ENUM_DOCUMENTATION,
+		PK_GROUP_ENUM_EDUCATION,
+		PK_GROUP_ENUM_FONTS,
+		PK_GROUP_ENUM_GAMES,
+		PK_GROUP_ENUM_GRAPHICS,
+		PK_GROUP_ENUM_LOCALIZATION,
+		PK_GROUP_ENUM_MULTIMEDIA,
+		PK_GROUP_ENUM_NETWORK,
+		PK_GROUP_ENUM_OFFICE,
+		PK_GROUP_ENUM_OTHER,
+		PK_GROUP_ENUM_PROGRAMMING,
+		PK_GROUP_ENUM_PUBLISHING,
+		PK_GROUP_ENUM_SERVERS,
+		PK_GROUP_ENUM_SYSTEM,
+		-1);
+}
+
+/**
+ * pk_backend_get_filters:
+ */
+PkBitfield
+pk_backend_get_filters (PkBackend *backend)
+{
+	return pk_bitfield_from_enums (
+		PK_FILTER_ENUM_NEWEST,
+		PK_FILTER_ENUM_GUI,
+		PK_FILTER_ENUM_INSTALLED,
+		PK_FILTER_ENUM_DEVELOPMENT,
+		-1);
+}
+
+/**
+ * pk_backend_get_mime_types:
+ */
+gchar *
+pk_backend_get_mime_types (PkBackend *backend)
+{
+	return g_strdup ("application/x-rpm");
+}
+
+/**
+ * pk_backend_cancel:
+ */
+void
+pk_backend_cancel (PkBackend *backend)
+{
+	pk_backend_set_status (backend, PK_STATUS_ENUM_CANCEL);
+
+	sigint_emit ();
+}
+
+/**
+ * pk_backend_download_packages:
  */
 static gboolean
 backend_download_packages_thread (PkBackend *backend)
@@ -2322,9 +2397,9 @@ backend_download_packages_thread (PkBackend *backend)
 	return TRUE;
 }
 
-static void
-backend_download_packages (PkBackend *backend, gchar **package_ids,
-			   const gchar *directory)
+void
+pk_backend_download_packages (PkBackend *backend, gchar **package_ids,
+			      const gchar *directory)
 {
 	pk_backend_set_status (backend, PK_STATUS_ENUM_DOWNLOAD);
 	poldek_backend_set_allow_cancel (backend, FALSE, TRUE);
@@ -2335,68 +2410,7 @@ backend_download_packages (PkBackend *backend, gchar **package_ids,
 }
 
 /**
- * backend_get_groups:
- **/
-static PkBitfield
-backend_get_groups (PkBackend *backend)
-{
-	return pk_bitfield_from_enums (
-		PK_GROUP_ENUM_ACCESSORIES,
-		PK_GROUP_ENUM_ADMIN_TOOLS,
-		PK_GROUP_ENUM_COMMUNICATION,
-		PK_GROUP_ENUM_DOCUMENTATION,
-		PK_GROUP_ENUM_EDUCATION,
-		PK_GROUP_ENUM_FONTS,
-		PK_GROUP_ENUM_GAMES,
-		PK_GROUP_ENUM_GRAPHICS,
-		PK_GROUP_ENUM_LOCALIZATION,
-		PK_GROUP_ENUM_MULTIMEDIA,
-		PK_GROUP_ENUM_NETWORK,
-		PK_GROUP_ENUM_OFFICE,
-		PK_GROUP_ENUM_OTHER,
-		PK_GROUP_ENUM_PROGRAMMING,
-		PK_GROUP_ENUM_PUBLISHING,
-		PK_GROUP_ENUM_SERVERS,
-		PK_GROUP_ENUM_SYSTEM,
-		-1);
-}
-
-/**
- * backend_get_filters:
- */
-static PkBitfield
-backend_get_filters (PkBackend *backend)
-{
-	return pk_bitfield_from_enums (
-		PK_FILTER_ENUM_NEWEST,
-		PK_FILTER_ENUM_GUI,
-		PK_FILTER_ENUM_INSTALLED,
-		PK_FILTER_ENUM_DEVELOPMENT,
-		-1);
-}
-
-/**
- * backend_get_mime_types:
- */
-static gchar *
-backend_get_mime_types (PkBackend *backend)
-{
-	return g_strdup ("application/x-rpm");
-}
-
-/**
- * backend_get_cancel:
- **/
-static void
-backend_get_cancel (PkBackend *backend)
-{
-	pk_backend_set_status (backend, PK_STATUS_ENUM_CANCEL);
-
-	sigint_emit ();
-}
-
-/**
- * backend_get_depends:
+ * pk_backend_get_depends:
  */
 static gboolean
 backend_get_depends_thread (PkBackend *backend)
@@ -2436,8 +2450,8 @@ backend_get_depends_thread (PkBackend *backend)
 	return TRUE;
 }
 
-static void
-backend_get_depends (PkBackend *backend, PkBitfield filters, gchar **package_ids, gboolean recursive)
+void
+pk_backend_get_depends (PkBackend *backend, PkBitfield filters, gchar **package_ids, gboolean recursive)
 {
 	pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
 	poldek_backend_set_allow_cancel (backend, FALSE, TRUE);
@@ -2447,7 +2461,7 @@ backend_get_depends (PkBackend *backend, PkBitfield filters, gchar **package_ids
 }
 
 /**
- * backend_get_details:
+ * pk_backend_get_details:
  */
 static gboolean
 backend_get_details_thread (PkBackend *backend)
@@ -2495,8 +2509,8 @@ backend_get_details_thread (PkBackend *backend)
 	return TRUE;
 }
 
-static void
-backend_get_details (PkBackend *backend, gchar **package_ids)
+void
+pk_backend_get_details (PkBackend *backend, gchar **package_ids)
 {
 	pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
 	poldek_backend_set_allow_cancel (backend, FALSE, TRUE);
@@ -2506,7 +2520,7 @@ backend_get_details (PkBackend *backend, gchar **package_ids)
 }
 
 /**
- * backend_get_files:
+ * pk_backend_get_files:
  */
 static gboolean
 backend_get_files_thread (PkBackend *backend)
@@ -2572,8 +2586,8 @@ backend_get_files_thread (PkBackend *backend)
 	return TRUE;
 }
 
-static void
-backend_get_files (PkBackend *backend, gchar **package_ids)
+void
+pk_backend_get_files (PkBackend *backend, gchar **package_ids)
 {
 	pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
 	poldek_backend_set_allow_cancel (backend, FALSE, TRUE);
@@ -2583,8 +2597,8 @@ backend_get_files (PkBackend *backend, gchar **package_ids)
 }
 
 /**
- * backend_get_packages:
- **/
+ * pk_backend_get_packages:
+ */
 static gboolean
 backend_get_packages_thread (PkBackend *backend)
 {
@@ -2640,8 +2654,8 @@ backend_get_packages_thread (PkBackend *backend)
 	return TRUE;
 }
 
-static void
-backend_get_packages (PkBackend *backend, PkBitfield filters)
+void
+pk_backend_get_packages (PkBackend *backend, PkBitfield filters)
 {
 	pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
 	poldek_backend_set_allow_cancel (backend, TRUE, TRUE);
@@ -2651,7 +2665,7 @@ backend_get_packages (PkBackend *backend, PkBitfield filters)
 }
 
 /**
- * backend_get_requires:
+ * pk_backend_get_requires:
  */
 static gboolean
 backend_get_requires_thread (PkBackend *backend)
@@ -2689,8 +2703,8 @@ backend_get_requires_thread (PkBackend *backend)
 	return TRUE;
 }
 
-static void
-backend_get_requires (PkBackend	*backend, PkBitfield filters, gchar **package_ids, gboolean recursive)
+void
+pk_backend_get_requires (PkBackend *backend, PkBitfield filters, gchar **package_ids, gboolean recursive)
 {
 	pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
 	poldek_backend_set_allow_cancel (backend, FALSE, TRUE);
@@ -2700,7 +2714,7 @@ backend_get_requires (PkBackend	*backend, PkBitfield filters, gchar **package_id
 }
 
 /**
- * backend_get_update_detail:
+ * pk_backend_get_update_detail:
  */
 static gchar*
 get_obsoletedby_pkg (struct pkg *pkg)
@@ -2838,8 +2852,8 @@ backend_get_update_detail_thread (PkBackend *backend)
 	return TRUE;
 }
 
-static void
-backend_get_update_detail (PkBackend *backend, gchar **package_ids)
+void
+pk_backend_get_update_detail (PkBackend *backend, gchar **package_ids)
 {
 	pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
 	poldek_backend_set_allow_cancel (backend, FALSE, TRUE);
@@ -2849,7 +2863,7 @@ backend_get_update_detail (PkBackend *backend, gchar **package_ids)
 }
 
 /**
- * backend_get_updates:
+ * pk_backend_get_updates:
  */
 static gboolean
 backend_get_updates_thread (PkBackend *backend)
@@ -2893,8 +2907,8 @@ backend_get_updates_thread (PkBackend *backend)
 	return TRUE;
 }
 
-static void
-backend_get_updates (PkBackend *backend, PkBitfield filters)
+void
+pk_backend_get_updates (PkBackend *backend, PkBitfield filters)
 {
 	pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
 	poldek_backend_set_allow_cancel (backend, TRUE, TRUE);
@@ -2904,7 +2918,7 @@ backend_get_updates (PkBackend *backend, PkBitfield filters)
 }
 
 /**
- * backend_install_packages:
+ * pk_backend_install_packages:
  */
 static gboolean
 backend_install_packages_thread (PkBackend *backend)
@@ -2953,8 +2967,8 @@ backend_install_packages_thread (PkBackend *backend)
 	return TRUE;
 }
 
-static void
-backend_install_packages (PkBackend *backend, gboolean only_trusted, gchar **package_ids)
+void
+pk_backend_install_packages (PkBackend *backend, gboolean only_trusted, gchar **package_ids)
 {
 	if (!pk_backend_is_online (backend)) {
 		pk_backend_error_code (backend, PK_ERROR_ENUM_NO_NETWORK, "Cannot install package when offline!");
@@ -2971,7 +2985,7 @@ backend_install_packages (PkBackend *backend, gboolean only_trusted, gchar **pac
 
 /**
  * FIXME: force currently omited
- * backend_refresh_cache:
+ * pk_backend_refresh_cache:
  */
 static gboolean
 backend_refresh_cache_thread (PkBackend *backend)
@@ -3027,8 +3041,8 @@ backend_refresh_cache_thread (PkBackend *backend)
 	return TRUE;
 }
 
-static void
-backend_refresh_cache (PkBackend *backend, gboolean force)
+void
+pk_backend_refresh_cache (PkBackend *backend, gboolean force)
 {
 	if (!pk_backend_is_online (backend)) {
 		pk_backend_error_code (backend, PK_ERROR_ENUM_NO_NETWORK, "Cannot refresh cache when offline!");
@@ -3045,7 +3059,7 @@ backend_refresh_cache (PkBackend *backend, gboolean force)
 }
 
 /**
- * backend_remove_packages:
+ * pk_backend_remove_packages:
  */
 static gboolean
 backend_remove_packages_thread (PkBackend *backend)
@@ -3083,8 +3097,8 @@ backend_remove_packages_thread (PkBackend *backend)
 	return TRUE;
 }
 
-static void
-backend_remove_packages (PkBackend *backend, gchar **package_ids, gboolean allow_deps, gboolean autoremove)
+void
+pk_backend_remove_packages (PkBackend *backend, gchar **package_ids, gboolean allow_deps, gboolean autoremove)
 {
 	poldek_backend_set_allow_cancel (backend, FALSE, TRUE);
 	pb_error_clean ();
@@ -3092,23 +3106,24 @@ backend_remove_packages (PkBackend *backend, gchar **package_ids, gboolean allow
 }
 
 /**
- * backend_resolve:
+ * pk_backend_resolve:
  */
-static void
-backend_resolve (PkBackend *backend, PkBitfield filters, gchar **packages)
+void
+pk_backend_resolve (PkBackend *backend, PkBitfield filters, gchar **packages)
 {
 	pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
 	poldek_backend_set_allow_cancel (backend, TRUE, TRUE);
 
 	pk_backend_set_uint (backend, "mode", SEARCH_ENUM_RESOLVE);
+	pk_backend_set_strv (backend, "search", packages);
 	pk_backend_thread_create (backend, search_package_thread);
 }
 
 /**
- * backend_search_details:
+ * pk_backend_search_details:
  */
-static void
-backend_search_details (PkBackend *backend, PkBitfield filters, gchar **values)
+void
+pk_backend_search_details (PkBackend *backend, PkBitfield filters, gchar **search)
 {
 	pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
 	poldek_backend_set_allow_cancel (backend, TRUE, TRUE);
@@ -3118,10 +3133,10 @@ backend_search_details (PkBackend *backend, PkBitfield filters, gchar **values)
 }
 
 /**
- * backend_search_files:
+ * pk_backend_search_files:
  */
-static void
-backend_search_files (PkBackend *backend, PkBitfield filters, gchar **values)
+void
+pk_backend_search_files (PkBackend *backend, PkBitfield filters, gchar **search)
 {
 	pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
 	poldek_backend_set_allow_cancel (backend, TRUE, TRUE);
@@ -3131,10 +3146,10 @@ backend_search_files (PkBackend *backend, PkBitfield filters, gchar **values)
 }
 
 /**
- * backend_search_groups:
+ * pk_backend_search_groups:
  */
-static void
-backend_search_groups (PkBackend *backend, PkBitfield filters, gchar **values)
+void
+pk_backend_search_groups (PkBackend *backend, PkBitfield filters, gchar **search)
 {
 	pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
 	poldek_backend_set_allow_cancel (backend, TRUE, TRUE);
@@ -3144,10 +3159,10 @@ backend_search_groups (PkBackend *backend, PkBitfield filters, gchar **values)
 }
 
 /**
- * backend_search_names:
+ * pk_backend_search_names:
  */
-static void
-backend_search_names (PkBackend *backend, PkBitfield filters, gchar **values)
+void
+pk_backend_search_names (PkBackend *backend, PkBitfield filters, gchar **search)
 {
 	pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
 	poldek_backend_set_allow_cancel (backend, TRUE, TRUE);
@@ -3157,10 +3172,10 @@ backend_search_names (PkBackend *backend, PkBitfield filters, gchar **values)
 }
 
 /**
- * backend_update_packages:
+ * pk_backend_update_packages:
  */
-static void
-backend_update_packages (PkBackend *backend, gboolean only_trusted, gchar **package_ids)
+void
+pk_backend_update_packages (PkBackend *backend, gboolean only_trusted, gchar **package_ids)
 {
 	if (!pk_backend_is_online (backend)) {
 		pk_backend_error_code (backend, PK_ERROR_ENUM_NO_NETWORK, "Cannot update packages when offline!");
@@ -3177,10 +3192,10 @@ backend_update_packages (PkBackend *backend, gboolean only_trusted, gchar **pack
 }
 
 /**
- * backend_update_system:
+ * pk_backend_update_system:
  **/
-static void
-backend_update_system (PkBackend *backend, gboolean only_trusted)
+void
+pk_backend_update_system (PkBackend *backend, gboolean only_trusted)
 {
 	if (!pk_backend_is_online (backend)) {
 		pk_backend_error_code (backend, PK_ERROR_ENUM_NO_NETWORK, "Cannot update system when offline!");
@@ -3198,10 +3213,10 @@ backend_update_system (PkBackend *backend, gboolean only_trusted)
 }
 
 /**
- * backend_get_repo_list:
+ * pk_backend_get_repo_list:
  */
-static void
-backend_get_repo_list (PkBackend *backend, PkBitfield filters)
+void
+pk_backend_get_repo_list (PkBackend *backend, PkBitfield filters)
 {
 	tn_array *sources = NULL;
 
@@ -3231,10 +3246,10 @@ backend_get_repo_list (PkBackend *backend, PkBitfield filters)
 }
 
 /**
- * backend_what_provides:
- **/
-static void
-backend_what_provides (PkBackend *backend, PkBitfield filters, PkProvidesEnum provides, gchar **values)
+ * pk_backend_what_provides:
+ */
+void
+pk_backend_what_provides (PkBackend *backend, PkBitfield filters, PkProvidesEnum provides, gchar **values)
 {
 	GPtrArray *array = NULL;
 	gchar **search = NULL;
@@ -3359,10 +3374,10 @@ static gboolean do_simulate_packages (PkBackend *backend)
 }
 
 /**
- * backend_simulate_install_packages:
- **/
-static void
-backend_simulate_install_packages (PkBackend *backend, gchar **package_ids)
+ * pk_backend_simulate_install_packages:
+ */
+void
+pk_backend_simulate_install_packages (PkBackend *backend, gchar **package_ids)
 {
 	poldek_backend_set_allow_cancel (backend, TRUE, TRUE);
 	pb_error_clean ();
@@ -3372,10 +3387,10 @@ backend_simulate_install_packages (PkBackend *backend, gchar **package_ids)
 }
 
 /**
- * backend_simulate_remove_packages:
- **/
-static void
-backend_simulate_remove_packages (PkBackend *backend, gchar **package_ids, gboolean autoremove)
+ * pk_backend_simulate_remove_packages:
+ */
+void
+pk_backend_simulate_remove_packages (PkBackend *backend, gchar **package_ids, gboolean autoremove)
 {
 	poldek_backend_set_allow_cancel (backend, TRUE, TRUE);
 	pb_error_clean ();
@@ -3385,10 +3400,10 @@ backend_simulate_remove_packages (PkBackend *backend, gchar **package_ids, gbool
 }
 
 /**
- * backend_simulate_update_packages:
- **/
-static void
-backend_simulate_update_packages (PkBackend *backend, gchar **package_ids)
+ * pk_backend_simulate_update_packages:
+ */
+void
+pk_backend_simulate_update_packages (PkBackend *backend, gchar **package_ids)
 {
 	poldek_backend_set_allow_cancel (backend, TRUE, TRUE);
 	pb_error_clean ();
@@ -3397,50 +3412,3 @@ backend_simulate_update_packages (PkBackend *backend, gchar **package_ids)
 	pk_backend_thread_create (backend, do_simulate_packages);
 }
 
-/* FIXME: port this away from PK_BACKEND_OPTIONS */
-PK_BACKEND_OPTIONS (
-	"poldek",					/* description */
-	"Marcin Banasiak <megabajt at pld-linux.org>",	/* author */
-	backend_initalize,				/* initalize */
-	backend_destroy,				/* destroy */
-	backend_get_groups,				/* get_groups */
-	backend_get_filters,				/* get_filters */
-	NULL,						/* get_roles */
-	backend_get_mime_types,				/* get_mime_types */
-	backend_get_cancel,				/* cancel */
-	backend_download_packages,			/* download_packages */
-	NULL,						/* get_categories */
-	backend_get_depends,				/* get_depends */
-	backend_get_details,				/* get_details */
-	NULL,						/* get_distro_upgrades */
-	backend_get_files,				/* get_files */
-	backend_get_packages,				/* get_packages */
-	backend_get_repo_list,				/* get_repo_list */
-	backend_get_requires,				/* get_requires */
-	backend_get_update_detail,			/* get_update_detail */
-	backend_get_updates,				/* get_updates */
-	NULL,						/* install_files */
-	backend_install_packages,			/* install_packages */
-	NULL,						/* install_signature */
-	backend_refresh_cache,				/* refresh_cache */
-	backend_remove_packages,			/* remove_packages */
-	NULL,						/* repo_enable */
-	NULL,						/* repo_set_data */
-	backend_resolve,				/* resolve */
-	NULL,						/* rollback */
-	backend_search_details,				/* search_details */
-	backend_search_files,				/* search_file */
-	backend_search_groups,				/* search_group */
-	backend_search_names,				/* search_name */
-	backend_update_packages,			/* update_packages */
-	backend_update_system,				/* update_system */
-	backend_what_provides,				/* what_provides */
-	NULL,						/* simulate_install_files */
-	backend_simulate_install_packages,		/* simulate_install_packages */
-	backend_simulate_remove_packages,		/* simulate_remove_packages */
-	backend_simulate_update_packages,		/* simulate_update_packages */
-	NULL,						/* upgrade_system */
-	NULL,						/* transaction_start */
-	NULL						/* transaction_stop */
-);
-
commit fc6710a4f9e0f78877e4c4131b3b1191a68e5b4b
Author: Zhang Qiang <qiang.z.zhang at intel.com>
Date:   Fri Apr 29 15:28:37 2011 +0800

    zypp: reset packages status in repo while removing packages
    
    without this patch packages can't be removed success, which occurs you
    execute remove operations immediatly after you install it.

diff --git a/backends/zypp/pk-backend-zypp.cpp b/backends/zypp/pk-backend-zypp.cpp
index 8f74ddd..3968f01 100644
--- a/backends/zypp/pk-backend-zypp.cpp
+++ b/backends/zypp/pk-backend-zypp.cpp
@@ -1258,6 +1258,8 @@ backend_remove_packages_thread (PkBackend *backend)
 				it->status ().setToBeUninstalled (ResStatus::USER);
 				items->push_back (*it);
 				break;
+			} else {
+				it->status ().resetTransact (ResStatus::USER);
 			}
 		}
 		g_strfreev (id_parts);
commit 3a5ccee5360162d12925c329af22c2a9c15a2e41
Author: Jesse Zhang <zh.jesse at gmail.com>
Date:   Fri Apr 29 08:26:31 2011 +0800

    conary: clear job cache at the right place
    
    Only clear the cache when it's not a dry-run.

diff --git a/backends/conary/conarypk.py b/backends/conary/conarypk.py
index ceb0443..2d9eb61 100644
--- a/backends/conary/conarypk.py
+++ b/backends/conary/conarypk.py
@@ -373,6 +373,7 @@ class ConaryPk:
         ret = self._classic_build_update_job(applyList)
         if not dry_run:
             self.cli.applyUpdateJob(ret[0])
+            self.clear_job_cache()
         return ret
 
     def install(self, pkglist, callback, dry_run=False):
@@ -414,7 +415,6 @@ class ConaryPk:
             ret = _model_do_conary_updateall(self.cfg, callback, dry_run)
         else:
             ret = self._classic_get_updateall_job(callback, dry_run)
-            self.clear_job_cache()
         return ret
 
 if __name__ == "__main__":
commit e2cba833dff3ca59193f68416b2301024eaf2d5f
Author: Og B. Maciel <ogmaciel at gnome.org>
Date:   Thu Apr 28 10:04:43 2011 -0400

    conary: clear the job cache when updating through classical, non-sysmodel pathway.

diff --git a/backends/conary/conarypk.py b/backends/conary/conarypk.py
index eb5a21d..ceb0443 100644
--- a/backends/conary/conarypk.py
+++ b/backends/conary/conarypk.py
@@ -414,6 +414,7 @@ class ConaryPk:
             ret = _model_do_conary_updateall(self.cfg, callback, dry_run)
         else:
             ret = self._classic_get_updateall_job(callback, dry_run)
+            self.clear_job_cache()
         return ret
 
 if __name__ == "__main__":
commit 979535f16b6d82ac25c9ac6909f3dbbb1cc84638
Author: Jonathan Conder <jonno.conder at gmail.com>
Date:   Thu Apr 28 23:53:47 2011 +1200

    alpm: trivial: fix compile warning

diff --git a/backends/alpm/pk-backend-sync.c b/backends/alpm/pk-backend-sync.c
index ccf9e3d..9e1e02b 100644
--- a/backends/alpm/pk-backend-sync.c
+++ b/backends/alpm/pk-backend-sync.c
@@ -102,9 +102,9 @@ pk_backend_download_packages_thread (PkBackend *self)
 
 	if (directory != NULL) {
 		/* download files to a PackageKit directory */
+		gchar *cachedir = strdup (directory);
 		cachedirs = alpm_list_strdup (alpm_option_get_cachedirs ());
-		directory = strdup (directory);
-		alpm_option_set_cachedirs (alpm_list_add (NULL, directory));
+		alpm_option_set_cachedirs (alpm_list_add (NULL, cachedir));
 	}
 
 	flags |= PM_TRANS_FLAG_NODEPS;
commit 4585036373f4f72fda92ab7ff172d779ea6853cd
Merge: 4f40759... b11231a...
Author: Jonathan Conder <jonno.conder at gmail.com>
Date:   Thu Apr 28 23:36:22 2011 +1200

    Merge remote-tracking branch 'origin/master'

diff --cc docs/html/pk-matrix.html
index 91dc2d4,d170ab4..9226b41
--- a/docs/html/pk-matrix.html
+++ b/docs/html/pk-matrix.html
@@@ -517,11 -543,12 +517,11 @@@
  <td><b>SimulateInstallPackages</b></td>
  <td><img src="img/status-good.png" alt="[yes]"/></td><!-- apt -->
  <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-good.png" alt="[yes]"/></td><!-- alpm -->
  <td><img src="img/status-bad.png" alt="[no]"/></td><!-- box -->
- <td><img src="img/status-bad.png" alt="[no]"/></td><!-- conary -->
+ <td><img src="img/status-good.png" alt="[no]"/></td><!-- conary -->
  <td><img src="img/status-good.png" alt="[yes]"/></td><!-- entropy -->
  <td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
 -<td><img src="img/status-good.png" alt="[yes]"/></td><!-- pacman -->
  <td><img src="img/status-bad.png" alt="[no]"/></td><!-- pisi -->
  <td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
  <td><img src="img/status-bad.png" alt="[no]"/></td><!-- portage -->
@@@ -536,11 -563,12 +536,11 @@@
  <td><b>SimulateRemovePackages</b></td>
  <td><img src="img/status-good.png" alt="[yes]"/></td><!-- apt -->
  <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-good.png" alt="[yes]"/></td><!-- alpm -->
  <td><img src="img/status-bad.png" alt="[no]"/></td><!-- box -->
- <td><img src="img/status-bad.png" alt="[no]"/></td><!-- conary -->
+ <td><img src="img/status-good.png" alt="[no]"/></td><!-- conary -->
  <td><img src="img/status-good.png" alt="[yes]"/></td><!-- entropy -->
  <td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
 -<td><img src="img/status-good.png" alt="[yes]"/></td><!-- pacman -->
  <td><img src="img/status-bad.png" alt="[no]"/></td><!-- pisi -->
  <td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
  <td><img src="img/status-bad.png" alt="[no]"/></td><!-- portage -->
@@@ -576,9 -605,10 +576,9 @@@
  <td><img src="img/status-good.png" alt="[yes]"/></td><!-- aptcc -->
  <td><img src="img/status-good.png" alt="[yes]"/></td><!-- alpm -->
  <td><img src="img/status-good.png" alt="[yes]"/></td><!-- box -->
- <td><img src="img/status-good.png" alt="[yes]"/></td><!-- conary -->
+ <td><img src="img/status-bad.png" alt="[yes]"/></td><!-- conary -->
  <td><img src="img/status-good.png" alt="[yes]"/></td><!-- entropy -->
  <td><img src="img/status-good.png" alt="[yes]"/></td><!-- opkg -->
 -<td><img src="img/status-good.png" alt="[yes]"/></td><!-- pacman -->
  <td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
  <td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
  <td><img src="img/status-good.png" alt="[yes]"/></td><!-- portage -->
commit b11231a9f084385ad3d715e399bb245306a2b87c
Author: Richard Hughes <richard at hughsie.com>
Date:   Thu Apr 28 09:47:16 2011 +0100

    Use the new threadsafe signal handling support in GLib
    
    If the version of Glib is too old, we continue to use the old non-threadsafe version.

diff --git a/src/pk-main.c b/src/pk-main.c
index 7c9824a..f15f64b 100644
--- a/src/pk-main.c
+++ b/src/pk-main.c
@@ -33,6 +33,10 @@
 #include <dbus/dbus-glib-lowlevel.h>
 #include <packagekit-glib2/pk-debug.h>
 
+#if GLIB_CHECK_VERSION(2,28,7)
+ #include <glib-unix.h>
+#endif
+
 #include "egg-dbus-monitor.h"
 
 #include "pk-conf.h"
@@ -155,6 +159,21 @@ pk_main_quit_cb (PkEngine *engine, GMainLoop *mainloop)
 	g_main_loop_quit (mainloop);
 }
 
+#if GLIB_CHECK_VERSION(2,28,7)
+
+/**
+ * pk_main_sigint_cb:
+ **/
+static gboolean
+pk_main_sigint_cb (gpointer user_data)
+{
+	g_debug ("Handling SIGINT");
+	g_main_loop_quit (loop);
+	return FALSE;
+}
+
+#else
+
 /**
  * pk_main_sigint_handler:
  **/
@@ -170,6 +189,8 @@ pk_main_sigint_handler (int sig)
 	g_main_loop_quit (loop);
 }
 
+#endif
+
 /**
  * main:
  **/
@@ -250,8 +271,16 @@ main (int argc, char *argv[])
 		goto exit_program;
 	}
 
+#if GLIB_CHECK_VERSION(2,28,7)
 	/* do stuff on ctrl-c */
+	g_unix_signal_add_watch_full (SIGINT,
+				      G_PRIORITY_DEFAULT,
+				      pk_main_sigint_cb,
+				      loop,
+				      NULL);
+#else
 	signal (SIGINT, pk_main_sigint_handler);
+#endif
 
 	/* we need to daemonize before we get a system connection */
 	if (use_daemon && daemon (0, 0)) {
commit 57bedddc2d0eec1c6efd7ff6305431b5b9000e6b
Author: Duncan Mac-Vicar P <dmacvicar at suse.de>
Date:   Wed Apr 27 15:03:39 2011 +0200

    Report download speed (bnc#663069)

diff --git a/backends/zypp/zypp-events.h b/backends/zypp/zypp-events.h
index cd8f4f3..5877f8d 100644
--- a/backends/zypp/zypp-events.h
+++ b/backends/zypp/zypp-events.h
@@ -30,7 +30,7 @@
 #include <pk-backend.h>
 #include <zypp/ZYppCallbacks.h>
 #include <zypp/Digest.h>
-#include <zypp/KeyRing.h> 
+#include <zypp/KeyRing.h>
 
 #include "zypp-utils.h"
 
@@ -163,6 +163,12 @@ struct ZyppBackendReceiver
 		pk_backend_set_sub_percentage (_backend, _sub_percentage);
 	}
 
+	inline void
+	update_speed (guint speed)
+	{
+		pk_backend_set_speed (_backend, speed);
+	}
+
 	void
 	reset_sub_percentage ()
 	{
@@ -310,8 +316,10 @@ struct DownloadProgressReportReceiver : public zypp::callback::ReceiveReport<zyp
 	virtual bool progress (int value, const zypp::Url &file, double dbps_avg, double dbps_current)
 	{
 		//fprintf (stderr, "\n\n----> DownloadProgressReportReceiver::progress(), %s:%d\n\n", _package_id == NULL ? "unknown" : _package_id, value);
-		if (_package_id != NULL)
+		if (_package_id != NULL) {
 			update_sub_percentage (value);
+			update_speed (static_cast<guint>(dbps_current));
+		}
 		return true;
 	}
 
commit f21741b6c5567affcbd234fc6dc792c227815edc
Author: Duncan Mac-Vicar P <dmacvicar at suse.de>
Date:   Wed Apr 27 13:18:09 2011 +0200

    remove unused function

diff --git a/backends/zypp/zypp-utils.cpp b/backends/zypp/zypp-utils.cpp
index ac09a29..68d59da 100644
--- a/backends/zypp/zypp-utils.cpp
+++ b/backends/zypp/zypp-utils.cpp
@@ -1013,22 +1013,6 @@ zypp_perform_execution (PkBackend *backend, PerformType type, gboolean force)
         return ret;
 }
 
-gchar **
-zypp_convert_set_char (set<sat::Solvable> &solvables)
-{
-        gchar **array = new gchar* [solvables.size ()];
-        guint i = 0;
-
-        for (set<sat::Solvable>::iterator it = solvables.begin (); it != solvables.end (); it++){
-                gchar *package_id = zypp_build_package_id_from_resolvable (*it);
-                array[i] = g_strdup(package_id);
-                i++;
-                g_free (package_id);
-        }
-
-        return array;
-}
-
 gchar *
 zypp_build_package_id_capabilities (Capabilities caps)
 {
diff --git a/backends/zypp/zypp-utils.h b/backends/zypp/zypp-utils.h
index 1f891c7..cc803f5 100644
--- a/backends/zypp/zypp-utils.h
+++ b/backends/zypp/zypp-utils.h
@@ -191,11 +191,6 @@ gboolean zypp_filter_solvable (PkBitfield filters, const zypp::sat::Solvable &it
 void     zypp_emit_filtered_packages_in_list (PkBackend *backend, const std::vector<zypp::sat::Solvable> &list);
 
 /**
-  * convert a std::set<zypp::sat::Solvable to gchar ** array
-  */
-gchar ** zypp_convert_set_char (std::set<zypp::sat::Solvable> *set);
-
-/**
   * build string of package_id's seperated by blanks out of the capabilities of a solvable
   */
 gchar * zypp_build_package_id_capabilities (zypp::Capabilities caps);
commit a144d513553fa9f011a354d6e1362370b96bc249
Author: Duncan Mac-Vicar P <dmacvicar at suse.de>
Date:   Wed Apr 27 13:17:52 2011 +0200

    typo

diff --git a/backends/zypp/zypp-utils.cpp b/backends/zypp/zypp-utils.cpp
index 0d0a158..ac09a29 100644
--- a/backends/zypp/zypp-utils.cpp
+++ b/backends/zypp/zypp-utils.cpp
@@ -264,7 +264,7 @@ warn_outdated_repos(PkBackend *backend, const ResPool & pool)
 }
 
 target::rpm::RpmHeader::constPtr
-zypp_get_rpmHeader (const string &nname, Edition edition)
+zypp_get_rpmHeader (const string &name, Edition edition)
 {
 	target::rpm::librpmDb::db_const_iterator it;
 	target::rpm::RpmHeader::constPtr result = new target::rpm::RpmHeader ();
commit 2352d5c46f7c5c9d98b8b7033139e97f8ffc121f
Author: Duncan Mac-Vicar P <dmacvicar at suse.de>
Date:   Wed Apr 27 13:15:14 2011 +0200

    Use const string &

diff --git a/backends/zypp/zypp-utils.cpp b/backends/zypp/zypp-utils.cpp
index f0e102d..0d0a158 100644
--- a/backends/zypp/zypp-utils.cpp
+++ b/backends/zypp/zypp-utils.cpp
@@ -264,7 +264,7 @@ warn_outdated_repos(PkBackend *backend, const ResPool & pool)
 }
 
 target::rpm::RpmHeader::constPtr
-zypp_get_rpmHeader (string name, Edition edition)
+zypp_get_rpmHeader (const string &nname, Edition edition)
 {
 	target::rpm::librpmDb::db_const_iterator it;
 	target::rpm::RpmHeader::constPtr result = new target::rpm::RpmHeader ();
@@ -294,10 +294,8 @@ zypp_get_group (sat::Solvable item)
 }
 
 PkGroupEnum
-get_enum_group (string group_)
+get_enum_group (const string &group_)
 {
-
-        // TODO Look for a faster and nice way to do this conversion
 	string group(str::toLower(group_));
 
         if (group.find ("amusements") != string::npos) {
diff --git a/backends/zypp/zypp-utils.h b/backends/zypp/zypp-utils.h
index bb5a846..1f891c7 100644
--- a/backends/zypp/zypp-utils.h
+++ b/backends/zypp/zypp-utils.h
@@ -102,7 +102,7 @@ void warn_outdated_repos(PkBackend *backend, const zypp::ResPool & pool);
 /**
   * Return the rpmHeader of a package
   */
-zypp::target::rpm::RpmHeader::constPtr zypp_get_rpmHeader (std::string name, zypp::Edition edition);
+zypp::target::rpm::RpmHeader::constPtr zypp_get_rpmHeader (const std::string &name, zypp::Edition edition);
 
 /**
   * Return the group of the given PoolItem.
@@ -112,7 +112,7 @@ std::string zypp_get_group (zypp::sat::Solvable item);
 /**
   * Return the PkEnumGroup of the given PoolItem.
   */
-PkGroupEnum get_enum_group (std::string group);
+PkGroupEnum get_enum_group (const std::string &group);
 
 /**
  * Returns a list of packages that match the specified package_name.
commit e0d33905cfe7bd130f5d37a2cbfeefe421684dc9
Author: Duncan Mac-Vicar P <dmacvicar at suse.de>
Date:   Wed Apr 27 13:11:43 2011 +0200

    use std:: and zypp:: namespace once to remove the hundred ocurrences of
    namespace noise.

diff --git a/backends/zypp/pk-backend-zypp.cpp b/backends/zypp/pk-backend-zypp.cpp
index aea7731..8f74ddd 100644
--- a/backends/zypp/pk-backend-zypp.cpp
+++ b/backends/zypp/pk-backend-zypp.cpp
@@ -72,13 +72,16 @@ enum PkgSearchType {
 	SEARCH_TYPE_RESOLVE = 3
 };
 
+using namespace std;
+using namespace zypp;
+
 /**
  * A map to keep track of the EventDirector objects for
  * each zypp backend that is created.
  */
-static std::map<PkBackend *, EventDirector *> _eventDirectors;
+static map<PkBackend *, EventDirector *> _eventDirectors;
 
-std::map<PkBackend *, std::vector<std::string> *> _signatures;
+map<PkBackend *, vector<string> *> _signatures;
 
 /**
  * pk_backend_get_description:
@@ -113,7 +116,7 @@ pk_backend_initialize (PkBackend *backend)
 	g_debug ("zypp_backend_initialize");
 	EventDirector *eventDirector = new EventDirector (backend);
 	_eventDirectors [backend] = eventDirector;
-	std::vector<std::string> *signature = new std::vector<std::string> ();
+	vector<string> *signature = new vector<string> ();
 	_signatures [backend] = signature;
 	_updating_self = FALSE;
 }
@@ -144,7 +147,7 @@ backend_get_requires_thread (PkBackend *backend)
 {
 	gchar **package_ids;
 	PkBitfield _filters = (PkBitfield) pk_backend_get_uint (backend, "filters");
-	zypp::ZYpp::Ptr zypp;
+	ZYpp::Ptr zypp;
 
 	zypp = get_zypp (backend);
 	if (zypp == NULL){
@@ -164,17 +167,17 @@ backend_get_requires_thread (PkBackend *backend)
 	//pk_backend_set_percentage (backend, 0);
 
 	for (uint i = 0; package_ids[i]; i++) {
-		zypp::sat::Solvable solvable = zypp_get_package_by_id (backend, package_ids[i]);
-		zypp::PoolItem package;
+		sat::Solvable solvable = zypp_get_package_by_id (backend, package_ids[i]);
+		PoolItem package;
 
 		if (solvable.isSystem ()) {
-			zypp::ResPool pool = zypp_build_pool (backend, true);
+			ResPool pool = zypp_build_pool (backend, true);
 
 			gboolean found = FALSE;
 			gchar **id_parts = pk_package_id_split (package_ids[i]);
 
-			for (zypp::ResPool::byIdent_iterator it = pool.byIdentBegin (zypp::ResKind::package, id_parts[PK_PACKAGE_ID_NAME]);
-					it != pool.byIdentEnd (zypp::ResKind::package, id_parts[PK_PACKAGE_ID_NAME]); it++) {
+			for (ResPool::byIdent_iterator it = pool.byIdentBegin (ResKind::package, id_parts[PK_PACKAGE_ID_NAME]);
+					it != pool.byIdentEnd (ResKind::package, id_parts[PK_PACKAGE_ID_NAME]); it++) {
 				if (it->status ().isInstalled ()) {
 					package = (*it);
 					found = TRUE;
@@ -189,29 +192,29 @@ backend_get_requires_thread (PkBackend *backend)
 			}
 
 			// set Package as to be uninstalled
-			package.status ().setToBeUninstalled (zypp::ResStatus::USER);
+			package.status ().setToBeUninstalled (ResStatus::USER);
 		} else {
-			if (solvable == zypp::sat::Solvable::noSolvable) {
+			if (solvable == sat::Solvable::noSolvable) {
 				return zypp_backend_finished_error (
 					backend, PK_ERROR_ENUM_PACKAGE_NOT_FOUND,
 					"Package couldn't be found");
 			}
 
-			zypp::ResPool pool = zypp::ResPool::instance ();
+			ResPool pool = ResPool::instance ();
 			package = pool.find (solvable);
 			//set Package as to be installed
-			package.status ().setToBeInstalled (zypp::ResStatus::USER);
+			package.status ().setToBeInstalled (ResStatus::USER);
 		}
 
 		// solver run
-		zypp::ResPool pool = zypp::ResPool::instance ();
-		zypp::Resolver solver(pool);
+		ResPool pool = ResPool::instance ();
+		Resolver solver(pool);
 
 		solver.setForceResolve (true);
 
 		if (!solver.resolvePool ()) {
-			std::list<zypp::ResolverProblem_Ptr> problems = solver.problems ();
-			for (std::list<zypp::ResolverProblem_Ptr>::iterator it = problems.begin (); it != problems.end (); it++){
+			list<ResolverProblem_Ptr> problems = solver.problems ();
+			for (list<ResolverProblem_Ptr>::iterator it = problems.begin (); it != problems.end (); it++){
 				g_warning("Solver problem (This should never happen): '%s'", (*it)->description ().c_str ());
 			}
 			return zypp_backend_finished_error (
@@ -221,8 +224,8 @@ backend_get_requires_thread (PkBackend *backend)
 
 		// look for packages which would be uninstalled
 		bool error = false;
-		for (zypp::ResPool::byKind_iterator it = pool.byKindBegin (zypp::ResKind::package);
-				it != pool.byKindEnd (zypp::ResKind::package); it++) {
+		for (ResPool::byKind_iterator it = pool.byKindBegin (ResKind::package);
+				it != pool.byKindEnd (ResKind::package); it++) {
 
 			if (!error && !zypp_filter_solvable (_filters, it->resolvable()->satSolvable()))
 				error = !zypp_backend_pool_item_notify (backend, *it);
@@ -290,9 +293,9 @@ pk_backend_get_filters (PkBackend *backend)
 }
 
 static bool
-zypp_is_no_solvable (const zypp::sat::Solvable &solv)
+zypp_is_no_solvable (const sat::Solvable &solv)
 {
-	return solv.id() == zypp::sat::detail::noSolvableId;
+	return solv.id() == sat::detail::noSolvableId;
 }
 
 /*
@@ -317,7 +320,7 @@ backend_get_depends_thread (PkBackend *backend)
 			"invalid package id");
 	}
 
-	zypp::ZYpp::Ptr zypp;
+	ZYpp::Ptr zypp;
 	zypp = get_zypp (backend);
 	if (zypp == NULL){
 		pk_backend_finished (backend);
@@ -331,14 +334,14 @@ backend_get_depends_thread (PkBackend *backend)
 		gchar **id_parts = pk_package_id_split (package_ids[0]);
 		pk_backend_set_percentage (backend, 20);
 		// Load resolvables from all the enabled repositories
-		zypp::ResPool pool = zypp_build_pool (backend, true);
+		ResPool pool = zypp_build_pool (backend, true);
 
-		zypp::PoolItem pool_item;
+		PoolItem pool_item;
 		gboolean pool_item_found = FALSE;
 		// Iterate over the resolvables and mark the one we want to check its dependencies
-		for (zypp::ResPool::byIdent_iterator it = pool.byIdentBegin (zypp::ResKind::package, id_parts[PK_PACKAGE_ID_NAME]);
-				it != pool.byIdentEnd (zypp::ResKind::package, id_parts[PK_PACKAGE_ID_NAME]); it++) {
-			zypp::PoolItem selectable = *it;
+		for (ResPool::byIdent_iterator it = pool.byIdentBegin (ResKind::package, id_parts[PK_PACKAGE_ID_NAME]);
+				it != pool.byIdentEnd (ResKind::package, id_parts[PK_PACKAGE_ID_NAME]); it++) {
+			PoolItem selectable = *it;
 			if (strcmp (selectable->name().c_str(), id_parts[PK_PACKAGE_ID_NAME]) == 0) {
 				// This package matches the name we're looking
 				char *edition_str = g_strdup (selectable->edition ().asString ().c_str());
@@ -370,15 +373,15 @@ backend_get_depends_thread (PkBackend *backend)
 
 		// get dependencies
 
-		zypp::sat::Solvable solvable = pool_item.satSolvable ();
-		zypp::Capabilities req = solvable[zypp::Dep::REQUIRES];
+		sat::Solvable solvable = pool_item.satSolvable ();
+		Capabilities req = solvable[Dep::REQUIRES];
 
 		// which package each capability
-		std::map<std::string, zypp::sat::Solvable> caps;
+		map<string, sat::Solvable> caps;
 		// packages already providing a capability
-		std::vector<std::string> pkg_names;
+		vector<string> pkg_names;
 
-		for (zypp::Capabilities::const_iterator cap = req.begin (); cap != req.end (); ++cap) {
+		for (Capabilities::const_iterator cap = req.begin (); cap != req.end (); ++cap) {
 			g_debug ("get_depends - capability '%s'", cap->asString().c_str());
 
 			if (caps.find (cap->asString ()) != caps.end()) {
@@ -388,10 +391,10 @@ backend_get_depends_thread (PkBackend *backend)
 
 			// Look for packages providing each capability
 			bool have_preference = false;
-			zypp::sat::Solvable preferred;
+			sat::Solvable preferred;
 
-			zypp::sat::WhatProvides prov_list (*cap);
-			for (zypp::sat::WhatProvides::const_iterator provider = prov_list.begin ();
+			sat::WhatProvides prov_list (*cap);
+			for (sat::WhatProvides::const_iterator provider = prov_list.begin ();
 			     provider != prov_list.end (); provider++) {
 
 				g_debug ("provider: '%s'", provider->asString().c_str());
@@ -401,7 +404,7 @@ backend_get_depends_thread (PkBackend *backend)
 					continue;
 
 				// Is this capability provided by a package we already have listed ?
-				if (std::find (pkg_names.begin (), pkg_names.end(),
+				if (find (pkg_names.begin (), pkg_names.end(),
 					       provider->name ()) != pkg_names.end()) {
 					preferred = *provider;
 					have_preference = true;
@@ -422,7 +425,7 @@ backend_get_depends_thread (PkBackend *backend)
 			}
 
 			if (have_preference &&
-			    std::find (pkg_names.begin (), pkg_names.end(),
+			    find (pkg_names.begin (), pkg_names.end(),
 				       preferred.name ()) == pkg_names.end()) {
 				caps[cap->asString()] = preferred;
 				pkg_names.push_back (preferred.name ());
@@ -430,7 +433,7 @@ backend_get_depends_thread (PkBackend *backend)
 		}
 
 		// print dependencies
-		for (std::map<std::string, zypp::sat::Solvable>::iterator it = caps.begin ();
+		for (map<string, sat::Solvable>::iterator it = caps.begin ();
 				it != caps.end();
 				it++) {
 
@@ -439,7 +442,7 @@ backend_get_depends_thread (PkBackend *backend)
 			    it->second.name ().c_str()[0] == '\0')
 				continue;
 
-			zypp::PoolItem item = zypp::ResPool::instance ().find (it->second);
+			PoolItem item = ResPool::instance ().find (it->second);
 			PkInfoEnum info = it->second.isSystem () ? PK_INFO_ENUM_INSTALLED : PK_INFO_ENUM_AVAILABLE;
 
 			g_debug ("add dep - '%s' '%s' %d [%s]", it->second.name().c_str(),
@@ -454,10 +457,10 @@ backend_get_depends_thread (PkBackend *backend)
 		}
 
 		pk_backend_set_percentage (backend, 100);
-	} catch (const zypp::repo::RepoNotFoundException &ex) {
+	} catch (const repo::RepoNotFoundException &ex) {
 		return zypp_backend_finished_error (
 			backend, PK_ERROR_ENUM_REPO_NOT_FOUND, ex.asUserString().c_str());
-	} catch (const zypp::Exception &ex) {
+	} catch (const Exception &ex) {
 		return zypp_backend_finished_error (
 			backend, PK_ERROR_ENUM_INTERNAL_ERROR, ex.asUserString().c_str());
 	}
@@ -479,7 +482,7 @@ static gboolean
 backend_get_details_thread (PkBackend *backend)
 {
 	gchar **package_ids;
-	zypp::ZYpp::Ptr zypp;
+	ZYpp::Ptr zypp;
 
 	zypp = get_zypp (backend);
 	if (zypp == NULL){
@@ -497,18 +500,18 @@ backend_get_details_thread (PkBackend *backend)
 	for (uint i = 0; package_ids[i]; i++) {
 		gchar **id_parts = pk_package_id_split (package_ids[i]);
 
-		std::vector<zypp::sat::Solvable> v;
-		std::vector<zypp::sat::Solvable> v2;
-		std::vector<zypp::sat::Solvable> v3;
-		zypp_get_packages_by_name (backend, (const gchar *)id_parts[PK_PACKAGE_ID_NAME], zypp::ResKind::package, v);
-		zypp_get_packages_by_name (backend, (const gchar *)id_parts[PK_PACKAGE_ID_NAME], zypp::ResKind::patch, v2);
-		zypp_get_packages_by_name (backend, (const gchar *)id_parts[PK_PACKAGE_ID_NAME], zypp::ResKind::srcpackage, v3);
+		vector<sat::Solvable> v;
+		vector<sat::Solvable> v2;
+		vector<sat::Solvable> v3;
+		zypp_get_packages_by_name (backend, (const gchar *)id_parts[PK_PACKAGE_ID_NAME], ResKind::package, v);
+		zypp_get_packages_by_name (backend, (const gchar *)id_parts[PK_PACKAGE_ID_NAME], ResKind::patch, v2);
+		zypp_get_packages_by_name (backend, (const gchar *)id_parts[PK_PACKAGE_ID_NAME], ResKind::srcpackage, v3);
 
 		v.insert (v.end (), v2.begin (), v2.end ());
 		v.insert (v.end (), v3.begin (), v3.end ());
 
-		zypp::sat::Solvable package;
-		for (std::vector<zypp::sat::Solvable>::iterator it = v.begin ();
+		sat::Solvable package;
+		for (vector<sat::Solvable>::iterator it = v.begin ();
 				it != v.end (); it++) {
 			if (zypp_ver_and_arch_equal (*it, id_parts[PK_PACKAGE_ID_VERSION],
 						     id_parts[PK_PACKAGE_ID_ARCH])) {
@@ -527,42 +530,42 @@ backend_get_details_thread (PkBackend *backend)
 			PkGroupEnum group = get_enum_group (zypp_get_group (package));
 
 			if (package.isSystem ()){
-				zypp::target::rpm::RpmHeader::constPtr rpmHeader = zypp_get_rpmHeader (package.name (), package.edition ());
+				target::rpm::RpmHeader::constPtr rpmHeader = zypp_get_rpmHeader (package.name (), package.edition ());
 
 				pk_backend_details (backend,
 					package_ids[i],			  // package_id
 					rpmHeader->tag_license ().c_str (),     // const gchar *license
 					group,				  // PkGroupEnum group
-					package.lookupStrAttribute (zypp::sat::SolvAttr::description).c_str (), //pkg->description ().c_str (),
+					package.lookupStrAttribute (sat::SolvAttr::description).c_str (), //pkg->description ().c_str (),
 					rpmHeader->tag_url (). c_str (),	// const gchar *url
 					(gulong)rpmHeader->tag_archivesize ());	// gulong size
 
 			} else {
 				gulong size = 0;
 
-				if (zypp::isKind<zypp::Patch>(package)) {
-					zypp::PoolItem item = zypp::ResPool::instance ().find (package);
-					zypp::Patch::constPtr patch = zypp::asKind<zypp::Patch>(item);
+				if (isKind<Patch>(package)) {
+					PoolItem item = ResPool::instance ().find (package);
+					Patch::constPtr patch = asKind<Patch>(item);
 
-					zypp::sat::SolvableSet content = patch->contents ();
-					for (zypp::sat::SolvableSet::const_iterator it = content.begin (); it != content.end (); it++)
-						size += it->lookupNumAttribute (zypp::sat::SolvAttr::downloadsize);
+					sat::SolvableSet content = patch->contents ();
+					for (sat::SolvableSet::const_iterator it = content.begin (); it != content.end (); it++)
+						size += it->lookupNumAttribute (sat::SolvAttr::downloadsize);
 				} else
-					size = package.lookupNumAttribute (zypp::sat::SolvAttr::downloadsize);
+					size = package.lookupNumAttribute (sat::SolvAttr::downloadsize);
 
 				pk_backend_details (backend,
 						    package_ids[i],
-						    package.lookupStrAttribute (zypp::sat::SolvAttr::license).c_str (),
+						    package.lookupStrAttribute (sat::SolvAttr::license).c_str (),
 						    group,
-						    package.lookupStrAttribute (zypp::sat::SolvAttr::description).c_str (),
+						    package.lookupStrAttribute (sat::SolvAttr::description).c_str (),
 						    "TODO", // pkg->url ().c_str (),
 						    size * 1024);
 			}
 
-		} catch (const zypp::target::rpm::RpmException &ex) {
+		} catch (const target::rpm::RpmException &ex) {
 			return zypp_backend_finished_error (
 				backend, PK_ERROR_ENUM_REPO_NOT_FOUND, "Couldn't open rpm-database");
-		} catch (const zypp::Exception &ex) {
+		} catch (const Exception &ex) {
 			return zypp_backend_finished_error (
 				backend, PK_ERROR_ENUM_INTERNAL_ERROR, ex.asUserString ().c_str ());
 		}
@@ -584,7 +587,7 @@ pk_backend_get_details (PkBackend *backend, gchar **package_ids)
 static gboolean
 backend_get_distro_upgrades_thread(PkBackend *backend)
 {
-	zypp::ZYpp::Ptr zypp;
+	ZYpp::Ptr zypp;
 
 	zypp = get_zypp (backend);
 	if (zypp == NULL){
@@ -599,15 +602,15 @@ backend_get_distro_upgrades_thread(PkBackend *backend)
 		return FALSE;
 	}
 
-	std::vector<zypp::parser::ProductFileData> result;
-	if (!zypp::parser::ProductFileReader::scanDir (zypp::functor::getAll (std::back_inserter (result)), "/etc/products.d")) {
+	vector<parser::ProductFileData> result;
+	if (!parser::ProductFileReader::scanDir (functor::getAll (back_inserter (result)), "/etc/products.d")) {
 		return zypp_backend_finished_error (
 			backend, PK_ERROR_ENUM_INTERNAL_ERROR, "Could not parse /etc/products.d");
 	}
 
-	for (std::vector<zypp::parser::ProductFileData>::iterator it = result.begin (); it != result.end (); it++) {
-		std::vector<zypp::parser::ProductFileData::Upgrade> upgrades = it->upgrades();
-		for (std::vector<zypp::parser::ProductFileData::Upgrade>::iterator it2 = upgrades.begin (); it2 != upgrades.end (); it2++) {
+	for (vector<parser::ProductFileData>::iterator it = result.begin (); it != result.end (); it++) {
+		vector<parser::ProductFileData::Upgrade> upgrades = it->upgrades();
+		for (vector<parser::ProductFileData::Upgrade>::iterator it2 = upgrades.begin (); it2 != upgrades.end (); it2++) {
 			if (it2->notify ()){
 				PkDistroUpgradeEnum status = PK_DISTRO_UPGRADE_ENUM_UNKNOWN;
 				if (it2->status () == "stable") {
@@ -659,13 +662,13 @@ pk_backend_refresh_cache (PkBackend *backend, gboolean force)
  2. The patch contains the package "PackageKit" or "gnome-packagekit
 */
 /*static gboolean
-check_for_self_update (PkBackend *backend, std::set<zypp::PoolItem> *candidates)
+check_for_self_update (PkBackend *backend, set<PoolItem> *candidates)
 {
-	std::set<zypp::PoolItem>::iterator cb = candidates->begin (), ce = candidates->end (), ci;
+	set<PoolItem>::iterator cb = candidates->begin (), ce = candidates->end (), ci;
 	for (ci = cb; ci != ce; ++ci) {
-		zypp::ResObject::constPtr res = ci->resolvable();
-		if (zypp::isKind<zypp::Patch>(res)) {
-			zypp::Patch::constPtr patch = zypp::asKind<zypp::Patch>(res);
+		ResObject::constPtr res = ci->resolvable();
+		if (isKind<Patch>(res)) {
+			Patch::constPtr patch = asKind<Patch>(res);
 			//g_debug ("restart_suggested is %d",(int)patch->restartSuggested());
 			if (patch->restartSuggested ()) {
 				if (!strcmp (PACKAGEKIT_RPM_NAME, res->satSolvable ().name ().c_str ()) ||
@@ -684,7 +687,7 @@ static gboolean
 backend_get_updates_thread (PkBackend *backend)
 {
 	PkBitfield _filters = (PkBitfield) pk_backend_get_uint (backend, "filters");
-	zypp::ZYpp::Ptr zypp;
+	ZYpp::Ptr zypp;
 
 	zypp = get_zypp (backend);
 	if (zypp == NULL){
@@ -692,7 +695,7 @@ backend_get_updates_thread (PkBackend *backend)
 		return FALSE;
 	}
 
-	typedef std::set<zypp::PoolItem>::iterator pi_it_t;
+	typedef set<PoolItem>::iterator pi_it_t;
 
 	pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
 	pk_backend_set_percentage (backend, 0);
@@ -703,25 +706,25 @@ backend_get_updates_thread (PkBackend *backend)
 		return FALSE;
 	}
 
-	zypp::ResPool pool = zypp_build_pool (backend, TRUE);
+	ResPool pool = zypp_build_pool (backend, TRUE);
 	pk_backend_set_percentage (backend, 40);
 
 	// check if the repositories may be dead (feature #301904)
 	warn_outdated_repos (backend, pool);
 
-	std::set<zypp::PoolItem> candidates;
+	set<PoolItem> candidates;
 	zypp_get_updates (backend, candidates);
 
 	pk_backend_set_percentage (backend, 80);
 
 	pi_it_t cb = candidates.begin (), ce = candidates.end (), ci;
 	for (ci = cb; ci != ce; ++ci) {
-		zypp::ResObject::constPtr res = ci->resolvable();
+		ResObject::constPtr res = ci->resolvable();
 
 		// Emit the package
 		PkInfoEnum infoEnum = PK_INFO_ENUM_ENHANCEMENT;
-		if (zypp::isKind<zypp::Patch>(res)) {
-			zypp::Patch::constPtr patch = zypp::asKind<zypp::Patch>(res);
+		if (isKind<Patch>(res)) {
+			Patch::constPtr patch = asKind<Patch>(res);
 			if (patch->category () == "recommended") {
 				infoEnum = PK_INFO_ENUM_IMPORTANT;
 			} else if (patch->category () == "optional") {
@@ -763,7 +766,7 @@ static gboolean
 backend_install_files_thread (PkBackend *backend)
 {
 	gchar **full_paths;
-	zypp::ZYpp::Ptr zypp;
+	ZYpp::Ptr zypp;
 
 	zypp = get_zypp (backend);
 	if (zypp == NULL){
@@ -774,7 +777,7 @@ backend_install_files_thread (PkBackend *backend)
 	full_paths = pk_backend_get_strv (backend, "full_paths");
 
 	// create a temporary directory
-	zypp::filesystem::TmpDir tmpDir;
+	filesystem::TmpDir tmpDir;
 	if (tmpDir == NULL) {
 		return zypp_backend_finished_error (
 			backend, PK_ERROR_ENUM_LOCAL_INSTALL_FAILED,
@@ -784,8 +787,8 @@ backend_install_files_thread (PkBackend *backend)
 	for (guint i = 0; full_paths[i]; i++) {
 
 		// check if file is really a rpm
-		zypp::Pathname rpmPath (full_paths[i]);
-		zypp::target::rpm::RpmHeader::constPtr rpmHeader = zypp::target::rpm::RpmHeader::readPackage (rpmPath, zypp::target::rpm::RpmHeader::NOSIGNATURE);
+		Pathname rpmPath (full_paths[i]);
+		target::rpm::RpmHeader::constPtr rpmHeader = target::rpm::RpmHeader::readPackage (rpmPath, target::rpm::RpmHeader::NOSIGNATURE);
 
 		if (rpmHeader == NULL) {
 			return zypp_backend_finished_error (
@@ -794,8 +797,8 @@ backend_install_files_thread (PkBackend *backend)
 		}
 
 		// copy the rpm into tmpdir
-		std::string tempDest = tmpDir.path ().asString () + "/" + rpmHeader->tag_name () + ".rpm";
-		if (zypp::filesystem::copy (full_paths[i], tempDest) != 0) {
+		string tempDest = tmpDir.path ().asString () + "/" + rpmHeader->tag_name () + ".rpm";
+		if (filesystem::copy (full_paths[i], tempDest) != 0) {
 			return zypp_backend_finished_error (
 				backend, PK_ERROR_ENUM_LOCAL_INSTALL_FAILED,
 				"Could not copy the rpm-file into the temp-dir");
@@ -803,12 +806,12 @@ backend_install_files_thread (PkBackend *backend)
 	}
 
 	// create a plaindir-repo and cache it
-	zypp::RepoInfo tmpRepo;
+	RepoInfo tmpRepo;
 
 	try {
-		tmpRepo.setType(zypp::repo::RepoType::RPMPLAINDIR);
-		std::string url = "dir://" + tmpDir.path ().asString ();
-		tmpRepo.addBaseUrl(zypp::Url::parseUrl(url));
+		tmpRepo.setType(repo::RepoType::RPMPLAINDIR);
+		string url = "dir://" + tmpDir.path ().asString ();
+		tmpRepo.addBaseUrl(Url::parseUrl(url));
 		tmpRepo.setEnabled (true);
 		tmpRepo.setAutorefresh (true);
 		tmpRepo.setAlias ("PK_TMP_DIR");
@@ -817,16 +820,16 @@ backend_install_files_thread (PkBackend *backend)
 
 		// add Repo to pool
 
-		zypp::RepoManager manager;
+		RepoManager manager;
 		manager.addRepository (tmpRepo);
 
 		if (!zypp_refresh_meta_and_cache (manager, tmpRepo))
 			return FALSE;
 
-	} catch (const zypp::url::UrlException &ex) {
+	} catch (const url::UrlException &ex) {
 		return zypp_backend_finished_error (
 			backend, PK_ERROR_ENUM_INTERNAL_ERROR, ex.asUserString ().c_str ());
-	} catch (const zypp::Exception &ex) {
+	} catch (const Exception &ex) {
 		return zypp_backend_finished_error (
 			backend, PK_ERROR_ENUM_INTERNAL_ERROR, ex.asUserString ().c_str ());
 	}
@@ -834,19 +837,19 @@ backend_install_files_thread (PkBackend *backend)
 	bool error = false;
 	for (guint i = 0; full_paths[i]; i++) {
 
-		zypp::Pathname rpmPath (full_paths[i]);
-		zypp::target::rpm::RpmHeader::constPtr rpmHeader = zypp::target::rpm::RpmHeader::readPackage (rpmPath, zypp::target::rpm::RpmHeader::NOSIGNATURE);
+		Pathname rpmPath (full_paths[i]);
+		target::rpm::RpmHeader::constPtr rpmHeader = target::rpm::RpmHeader::readPackage (rpmPath, target::rpm::RpmHeader::NOSIGNATURE);
 
 		// look for the packages and set them to toBeInstalled
-		std::vector<zypp::sat::Solvable> solvables;
-		zypp_get_packages_by_name (backend, rpmHeader->tag_name ().c_str (), zypp::ResKind::package, solvables, TRUE);
-		zypp::PoolItem *item = NULL;
+		vector<sat::Solvable> solvables;
+		zypp_get_packages_by_name (backend, rpmHeader->tag_name ().c_str (), ResKind::package, solvables, TRUE);
+		PoolItem *item = NULL;
 
 		gboolean found = FALSE;
 
-		for (std::vector<zypp::sat::Solvable>::iterator it = solvables.begin (); it != solvables.end (); it ++) {
+		for (vector<sat::Solvable>::iterator it = solvables.begin (); it != solvables.end (); it ++) {
 		       if (it->repository ().alias () == "PK_TMP_DIR") {
-			       item = new zypp::PoolItem(*it);
+			       item = new PoolItem(*it);
 			       found = TRUE;
 			       break;
 		       }
@@ -856,7 +859,7 @@ backend_install_files_thread (PkBackend *backend)
 			error = true;
 			pk_backend_error_code (backend, PK_ERROR_ENUM_INTERNAL_ERROR, "Could not find the rpm-Package in Pool");
 		} else if (!error) {
-			zypp::ResStatus status = item->status ().setToBeInstalled (zypp::ResStatus::USER);
+			ResStatus status = item->status ().setToBeInstalled (ResStatus::USER);
 		}
 		if (!error && !zypp_perform_execution (backend, INSTALL, FALSE)) {
 			error = true;
@@ -869,9 +872,9 @@ backend_install_files_thread (PkBackend *backend)
 
 	// remove tmp-dir and the tmp-repo
 	try {
-		zypp::RepoManager manager;
+		RepoManager manager;
 		manager.removeRepository (tmpRepo);
-	} catch (const zypp::repo::RepoNotFoundException &ex) {
+	} catch (const repo::RepoNotFoundException &ex) {
 		pk_backend_error_code (backend, PK_ERROR_ENUM_REPO_NOT_FOUND, ex.asUserString().c_str() );
 	}
 
@@ -901,7 +904,7 @@ static gboolean
 backend_get_update_detail_thread (PkBackend *backend)
 {
 	gchar **package_ids;
-	zypp::ZYpp::Ptr zypp;
+	ZYpp::Ptr zypp;
 
 	zypp = get_zypp (backend);
 	if (zypp == NULL){
@@ -917,25 +920,25 @@ backend_get_update_detail_thread (PkBackend *backend)
 	pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
 
 	for (uint i = 0; package_ids[i]; i++) {
-		zypp::sat::Solvable solvable = zypp_get_package_by_id (backend, package_ids[i]);
+		sat::Solvable solvable = zypp_get_package_by_id (backend, package_ids[i]);
 
-		zypp::Capabilities obs = solvable.obsoletes ();
+		Capabilities obs = solvable.obsoletes ();
 
 		gchar *obsoletes = zypp_build_package_id_capabilities (obs);
 
 		PkRestartEnum restart = PK_RESTART_ENUM_NONE;
 
-		zypp::PoolItem item = zypp::ResPool::instance ().find (solvable);
+		PoolItem item = ResPool::instance ().find (solvable);
 
 		gchar *bugzilla = new gchar ();
 		gchar *cve = new gchar ();
 
-		if (zypp::isKind<zypp::Patch>(solvable)) {
-			zypp::Patch::constPtr patch = zypp::asKind<zypp::Patch>(item);
+		if (isKind<Patch>(solvable)) {
+			Patch::constPtr patch = asKind<Patch>(item);
 			zypp_check_restart (&restart, patch);
 
 			// Building links like "http://www.distro-update.org/page?moo;Bugfix release for kernel;http://www.test.de/bgz;test domain"
-			for (zypp::Patch::ReferenceIterator it = patch->referencesBegin (); it != patch->referencesEnd (); it ++) {
+			for (Patch::ReferenceIterator it = patch->referencesBegin (); it != patch->referencesEnd (); it ++) {
 				if (it.type () == "bugzilla") {
 					if (strlen (bugzilla) == 0) {
 						bugzilla = g_strconcat (it.href ().c_str (), ";", it.title ().c_str (), (gchar *)NULL);
@@ -951,9 +954,9 @@ backend_get_update_detail_thread (PkBackend *backend)
 				}
 			}
 
-			zypp::sat::SolvableSet content = patch->contents ();
+			sat::SolvableSet content = patch->contents ();
 
-			for (zypp::sat::SolvableSet::const_iterator it = content.begin (); it != content.end (); it++) {
+			for (sat::SolvableSet::const_iterator it = content.begin (); it != content.end (); it++) {
 				//obsoletes = g_strconcat (obsoletes, zypp_build_package_id_capabilities (it->obsoletes ()), PK_PACKAGE_IDS_DELIM, (gchar *)NULL);
 				if (strlen(obsoletes) == 0) {
 					obsoletes = zypp_build_package_id_capabilities (it->obsoletes ());
@@ -971,7 +974,7 @@ backend_get_update_detail_thread (PkBackend *backend)
 					  bugzilla,	// bugzilla
 					  cve,		// cve
 					  restart,	// restart -flag
-					  solvable.lookupStrAttribute (zypp::sat::SolvAttr::description).c_str (),	// update-text
+					  solvable.lookupStrAttribute (sat::SolvAttr::description).c_str (),	// update-text
 					  NULL,		// ChangeLog text
 					  PK_UPDATE_STATE_ENUM_UNKNOWN,		// state of the update
 					  NULL, // date that the update was issued
@@ -998,7 +1001,7 @@ pk_backend_get_update_detail (PkBackend *backend, gchar **package_ids)
 static gboolean
 backend_update_system_thread (PkBackend *backend)
 {
-	zypp::ZYpp::Ptr zypp;
+	ZYpp::Ptr zypp;
 
 	zypp = get_zypp (backend);
 	if (zypp == NULL){
@@ -1009,24 +1012,24 @@ backend_update_system_thread (PkBackend *backend)
 	pk_backend_set_percentage (backend, 0);
 
 	/* FIXME: support only_trusted */
-	zypp::ResPool pool = zypp_build_pool (backend, TRUE);
+	ResPool pool = zypp_build_pool (backend, TRUE);
 	pk_backend_set_percentage (backend, 40);
 	PkRestartEnum restart = PK_RESTART_ENUM_NONE;
 
-	std::set<zypp::PoolItem> candidates;
+	set<PoolItem> candidates;
 	zypp_get_updates (backend, candidates);
 
 	if (_updating_self)
 		_updating_self = FALSE;
 
 	pk_backend_set_percentage (backend, 80);
-	std::set<zypp::PoolItem>::iterator cb = candidates.begin (), ce = candidates.end (), ci;
+	set<PoolItem>::iterator cb = candidates.begin (), ce = candidates.end (), ci;
 	for (ci = cb; ci != ce; ++ci) {
 		// set the status of the update to ToBeInstalled
-		zypp::ResStatus &status = ci->status ();
-		status.setToBeInstalled (zypp::ResStatus::USER);
-		if (zypp::isKind<zypp::Patch>(ci->resolvable ())) {
-			zypp_check_restart (&restart, zypp::asKind<zypp::Patch>(ci->resolvable ()));
+		ResStatus &status = ci->status ();
+		status.setToBeInstalled (ResStatus::USER);
+		if (isKind<Patch>(ci->resolvable ())) {
+			zypp_check_restart (&restart, asKind<Patch>(ci->resolvable ()));
 		}
 	}
 
@@ -1067,7 +1070,7 @@ backend_install_packages_thread (PkBackend *backend)
 	pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
 	pk_backend_set_percentage (backend, 0);
 
-	zypp::ZYpp::Ptr zypp;
+	ZYpp::Ptr zypp;
 	zypp = get_zypp (backend);
 	if (zypp == NULL){
 		pk_backend_finished (backend);
@@ -1083,21 +1086,21 @@ backend_install_packages_thread (PkBackend *backend)
 
 	try
 	{
-		zypp::ResPool pool = zypp_build_pool (backend, TRUE);
+		ResPool pool = zypp_build_pool (backend, TRUE);
 		pk_backend_set_percentage (backend, 10);
-		std::vector<zypp::PoolItem> *items = new std::vector<zypp::PoolItem> ();
+		vector<PoolItem> *items = new vector<PoolItem> ();
 
 		guint to_install = 0;
 		for (guint i = 0; package_ids[i]; i++) {
 			gchar **id_parts = pk_package_id_split (package_ids[i]);
 
 			// Iterate over the selectables and mark the one with the right name
-			zypp::ui::Selectable::constPtr selectable;
-			std::string name = id_parts[PK_PACKAGE_ID_NAME];
+			ui::Selectable::constPtr selectable;
+			string name = id_parts[PK_PACKAGE_ID_NAME];
 
 			// Do we have this installed ?
 			gboolean system = false;
-			for (zypp::ResPool::byName_iterator it = pool.byNameBegin (name);
+			for (ResPool::byName_iterator it = pool.byNameBegin (name);
 			     it != pool.byNameEnd (name); it++) {
 
 				g_debug ("PoolItem '%s'", it->satSolvable().asString().c_str());
@@ -1116,7 +1119,7 @@ backend_install_packages_thread (PkBackend *backend)
 				gboolean hit = false;
 
 				// Choose the PoolItem with the right architecture and version
-				for (zypp::ResPool::byName_iterator it = pool.byNameBegin (name);
+				for (ResPool::byName_iterator it = pool.byNameBegin (name);
 				     it != pool.byNameEnd (name); it++) {
 
 					if (zypp_ver_and_arch_equal (it->satSolvable(), id_parts[PK_PACKAGE_ID_VERSION],
@@ -1124,7 +1127,7 @@ backend_install_packages_thread (PkBackend *backend)
 						hit = true;
 						to_install++;
 						// set status to ToBeInstalled
-						it->status ().setToBeInstalled (zypp::ResStatus::USER);
+						it->status ().setToBeInstalled (ResStatus::USER);
 						items->push_back (*it);
 						break;
 					}
@@ -1152,7 +1155,7 @@ backend_install_packages_thread (PkBackend *backend)
 		// PK_INFO_ENUM_DOWNLOADING | INSTALLING) for each package.
 		if (!zypp_perform_execution (backend, INSTALL, FALSE)) {
 			// reset the status of the marked packages
-			for (std::vector<zypp::PoolItem>::iterator it = items->begin (); it != items->end (); it++) {
+			for (vector<PoolItem>::iterator it = items->begin (); it != items->end (); it++) {
 				it->statusReset ();
 			}
 			delete (items);
@@ -1163,7 +1166,7 @@ backend_install_packages_thread (PkBackend *backend)
 
 		pk_backend_set_percentage (backend, 100);
 
-	} catch (const zypp::Exception &ex) {
+	} catch (const Exception &ex) {
 		return zypp_backend_finished_error (
 			backend, PK_ERROR_ENUM_INTERNAL_ERROR, ex.asUserString().c_str());
 	}
@@ -1198,7 +1201,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));
+	_signatures[backend]->push_back ((string)(key_id));
 
 	pk_backend_finished (backend);
 	return TRUE;
@@ -1218,13 +1221,13 @@ backend_remove_packages_thread (PkBackend *backend)
 {
 	gboolean autoremove;
 	gchar **package_ids;
-	std::vector<zypp::PoolItem> *items = new std::vector<zypp::PoolItem> ();
+	vector<PoolItem> *items = new vector<PoolItem> ();
 
 	pk_backend_set_status (backend, PK_STATUS_ENUM_REMOVE);
 	pk_backend_set_percentage (backend, 0);
 
-	zypp::Target_Ptr target;
-	zypp::ZYpp::Ptr zypp;
+	Target_Ptr target;
+	ZYpp::Ptr zypp;
 	zypp = get_zypp (backend);
 	if (zypp == NULL){
 		pk_backend_finished (backend);
@@ -1248,11 +1251,11 @@ backend_remove_packages_thread (PkBackend *backend)
 		gchar **id_parts = pk_package_id_split (package_ids[i]);
 
 		// Iterate over the resolvables and mark the ones we want to remove
-		zypp::ResPool pool = zypp::ResPool::instance ();
-		for (zypp::ResPool::byIdent_iterator it = pool.byIdentBegin (zypp::ResKind::package, id_parts[PK_PACKAGE_ID_NAME]);
-				it != pool.byIdentEnd (zypp::ResKind::package, id_parts[PK_PACKAGE_ID_NAME]); it++) {
+		ResPool pool = ResPool::instance ();
+		for (ResPool::byIdent_iterator it = pool.byIdentBegin (ResKind::package, id_parts[PK_PACKAGE_ID_NAME]);
+				it != pool.byIdentEnd (ResKind::package, id_parts[PK_PACKAGE_ID_NAME]); it++) {
 			if ((*it)->isSystem ()) {
-				it->status ().setToBeUninstalled (zypp::ResStatus::USER);
+				it->status ().setToBeUninstalled (ResStatus::USER);
 				items->push_back (*it);
 				break;
 			}
@@ -1266,7 +1269,7 @@ backend_remove_packages_thread (PkBackend *backend)
 	{
 		if (!zypp_perform_execution (backend, REMOVE, TRUE)) {
 			//reset the status of the marked packages
-			for (std::vector<zypp::PoolItem>::iterator it = items->begin (); it != items->end (); it++) {
+			for (vector<PoolItem>::iterator it = items->begin (); it != items->end (); it++) {
 				it->statusReset();
 			}
 			delete (items);
@@ -1278,10 +1281,10 @@ backend_remove_packages_thread (PkBackend *backend)
 		delete (items);
 		pk_backend_set_percentage (backend, 100);
 
-	} catch (const zypp::repo::RepoNotFoundException &ex) {
+	} catch (const repo::RepoNotFoundException &ex) {
 		return zypp_backend_finished_error (
 			backend, PK_ERROR_ENUM_REPO_NOT_FOUND, ex.asUserString().c_str());
-	} catch (const zypp::Exception &ex) {
+	} catch (const Exception &ex) {
 		return zypp_backend_finished_error (
 			backend, PK_ERROR_ENUM_INTERNAL_ERROR, ex.asUserString().c_str());
 	}
@@ -1310,7 +1313,7 @@ backend_resolve_thread (PkBackend *backend)
 {
 	gchar **package_ids = pk_backend_get_strv (backend, "package_ids");
 	PkBitfield _filters = (PkBitfield) pk_backend_get_uint (backend, "filters");
-	zypp::ZYpp::Ptr zypp;
+	ZYpp::Ptr zypp;
 
 	zypp = get_zypp (backend);
 	if (zypp == NULL){
@@ -1323,34 +1326,34 @@ backend_resolve_thread (PkBackend *backend)
 	pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
 
 	for (uint i = 0; package_ids[i]; i++) {
-		std::vector<zypp::sat::Solvable> v;
+		vector<sat::Solvable> v;
 
 		/* build a list of packages with this name */
-		zypp_get_packages_by_name (backend, package_ids[i], zypp::ResKind::package, v);
+		zypp_get_packages_by_name (backend, package_ids[i], ResKind::package, v);
 
 		/* add source packages */
 		if (!pk_bitfield_contain (_filters, PK_FILTER_ENUM_NOT_SOURCE)) {
-			std::vector<zypp::sat::Solvable> src;
-			zypp_get_packages_by_name (backend, package_ids[i], zypp::ResKind::srcpackage, src);
+			vector<sat::Solvable> src;
+			zypp_get_packages_by_name (backend, package_ids[i], ResKind::srcpackage, src);
 			v.insert (v.end (), src.begin (), src.end ());
 		}
 
 		/* include patches too */
-		std::vector<zypp::sat::Solvable> v2;
-		zypp_get_packages_by_name (backend, package_ids[i], zypp::ResKind::patch, v2);
+		vector<sat::Solvable> v2;
+		zypp_get_packages_by_name (backend, package_ids[i], ResKind::patch, v2);
 		v.insert (v.end (), v2.begin (), v2.end ());
 
-		zypp::sat::Solvable newest;
-		std::vector<zypp::sat::Solvable> pkgs;
+		sat::Solvable newest;
+		vector<sat::Solvable> pkgs;
 
 		/* Filter the list of packages with this name to 'pkgs' */
-		for (std::vector<zypp::sat::Solvable>::iterator it = v.begin (); it != v.end (); it++) {
+		for (vector<sat::Solvable>::iterator it = v.begin (); it != v.end (); it++) {
 
 			if (zypp_filter_solvable (_filters, *it) ||
-			    *it == zypp::sat::Solvable::noSolvable)
+			    *it == sat::Solvable::noSolvable)
 				continue;
 
-			if (newest == zypp::sat::Solvable::noSolvable) {
+			if (newest == sat::Solvable::noSolvable) {
 				newest = *it;
 			} else if (it->edition().match (newest.edition()) > 0) {
 				newest = *it;
@@ -1363,7 +1366,7 @@ backend_resolve_thread (PkBackend *backend)
 			pkgs.clear();
 			pkgs.push_back (newest);
 		} else if (pk_bitfield_contain (_filters, PK_FILTER_ENUM_NOT_NEWEST)) {
-			pkgs.erase (std::find (pkgs.begin (), pkgs.end(), newest));
+			pkgs.erase (find (pkgs.begin (), pkgs.end(), newest));
 		}
 
 		zypp_emit_filtered_packages_in_list (backend, pkgs);
@@ -1394,7 +1397,7 @@ backend_find_packages_thread (PkBackend *backend)
 	gchar **values;
 	const gchar *search;
 	guint mode;
-	zypp::ZYpp::Ptr zypp;
+	ZYpp::Ptr zypp;
 
 	zypp = get_zypp (backend);
 	if (zypp == NULL){
@@ -1415,9 +1418,9 @@ backend_find_packages_thread (PkBackend *backend)
 	pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
 	pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID);
 
-	std::vector<zypp::sat::Solvable> v;
+	vector<sat::Solvable> v;
 
-	zypp::PoolQuery q;
+	PoolQuery q;
 	q.addString( search ); // may be called multiple times (OR'ed)
 	q.setCaseSensitive( true );
 	q.setMatchSubstring();
@@ -1425,28 +1428,28 @@ backend_find_packages_thread (PkBackend *backend)
 	switch (mode) {
 	case SEARCH_TYPE_NAME:
 		zypp_build_pool (backend, TRUE); // seems to be necessary?
-		q.addKind( zypp::ResKind::package );
-		q.addKind( zypp::ResKind::srcpackage );
-		q.addAttribute( zypp::sat::SolvAttr::name );
+		q.addKind( ResKind::package );
+		q.addKind( ResKind::srcpackage );
+		q.addAttribute( sat::SolvAttr::name );
 		// Note: The query result is NOT sorted packages first, then srcpackage.
 		// If that's necessary you need to sort the vector accordongly or use
 		// two separate queries.
 		break;
 	case SEARCH_TYPE_DETAILS:
 		zypp_build_pool (backend, TRUE); // seems to be necessary?
-		q.addKind( zypp::ResKind::package );
-		//q.addKind( zypp::ResKind::srcpackage );
-		q.addAttribute( zypp::sat::SolvAttr::name );
-		q.addAttribute( zypp::sat::SolvAttr::description );
+		q.addKind( ResKind::package );
+		//q.addKind( ResKind::srcpackage );
+		q.addAttribute( sat::SolvAttr::name );
+		q.addAttribute( sat::SolvAttr::description );
 		// Note: Don't know if zypp_get_packages_by_details intentionally
 		// did not search in srcpackages.
 		break;
 	case SEARCH_TYPE_FILE: {
 		zypp_build_pool (backend, TRUE);
-		q.addKind( zypp::ResKind::package );
-		q.addAttribute( zypp::sat::SolvAttr::name );
-		q.addAttribute( zypp::sat::SolvAttr::description );
-		q.addAttribute( zypp::sat::SolvAttr::filelist );
+		q.addKind( ResKind::package );
+		q.addAttribute( sat::SolvAttr::name );
+		q.addAttribute( sat::SolvAttr::description );
+		q.addAttribute( sat::SolvAttr::filelist );
 		q.setFilesMatchFullPath(true);
 		q.setMatchExact();
 		break;
@@ -1454,7 +1457,7 @@ backend_find_packages_thread (PkBackend *backend)
 	};
 
 	if ( ! q.empty() ) {
-		std::copy( q.begin(), q.end(), std::back_inserter( v ) );
+		copy( q.begin(), q.end(), back_inserter( v ) );
 	}
 	zypp_emit_filtered_packages_in_list (backend, v);
 
@@ -1487,7 +1490,7 @@ backend_search_group_thread (PkBackend *backend)
 {
 	gchar **values;
 	const gchar *group;
-	zypp::ZYpp::Ptr zypp;
+	ZYpp::Ptr zypp;
 
 	zypp = get_zypp (backend);
 	if (zypp == NULL){
@@ -1506,16 +1509,16 @@ backend_search_group_thread (PkBackend *backend)
 	pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
 	pk_backend_set_percentage (backend, 0);
 
-	zypp::ResPool pool = zypp_build_pool (backend, true);
+	ResPool pool = zypp_build_pool (backend, true);
 
 	pk_backend_set_percentage (backend, 30);
 
-	std::vector<zypp::sat::Solvable> v;
+	vector<sat::Solvable> v;
 	PkGroupEnum pkGroup = pk_group_enum_from_string (group);
 
-	zypp::sat::LookupAttr look (zypp::sat::SolvAttr::group);
+	sat::LookupAttr look (sat::SolvAttr::group);
 
-	for (zypp::sat::LookupAttr::iterator it = look.begin (); it != look.end (); it++) {
+	for (sat::LookupAttr::iterator it = look.begin (); it != look.end (); it++) {
 		PkGroupEnum rpmGroup = get_enum_group (it.asString ());
 		if (pkGroup == rpmGroup)
 			v.push_back (it.inSolvable ());
@@ -1555,7 +1558,7 @@ pk_backend_search_files (PkBackend *backend, PkBitfield filters, gchar **values)
 void
 pk_backend_get_repo_list (PkBackend *backend, PkBitfield filters)
 {
-	zypp::ZYpp::Ptr zypp;
+	ZYpp::Ptr zypp;
 
 	zypp = get_zypp (backend);
 	if (zypp == NULL){
@@ -1565,22 +1568,22 @@ pk_backend_get_repo_list (PkBackend *backend, PkBitfield filters)
 
 	pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
 
-	zypp::RepoManager manager;
-	std::list <zypp::RepoInfo> repos;
+	RepoManager manager;
+	list <RepoInfo> repos;
 	try
 	{
-		repos = std::list<zypp::RepoInfo>(manager.repoBegin(),manager.repoEnd());
-	} catch (const zypp::repo::RepoNotFoundException &ex) {
+		repos = list<RepoInfo>(manager.repoBegin(),manager.repoEnd());
+	} catch (const repo::RepoNotFoundException &ex) {
 		zypp_backend_finished_error (
 			backend, PK_ERROR_ENUM_REPO_NOT_FOUND, ex.asUserString().c_str());
 		return;
-	} catch (const zypp::Exception &ex) {
+	} catch (const Exception &ex) {
 		zypp_backend_finished_error (
 			backend, PK_ERROR_ENUM_INTERNAL_ERROR, ex.asUserString().c_str());
 		return;
 	}
 
-	for (std::list <zypp::RepoInfo>::iterator it = repos.begin(); it != repos.end(); it++) {
+	for (list <RepoInfo>::iterator it = repos.begin(); it != repos.end(); it++) {
 		if (pk_bitfield_contain (filters, PK_FILTER_ENUM_NOT_DEVELOPMENT) && zypp_is_development_repo (backend, *it))
 			continue;
 		// RepoInfo::alias - Unique identifier for this source.
@@ -1601,7 +1604,7 @@ pk_backend_get_repo_list (PkBackend *backend, PkBitfield filters)
 void
 pk_backend_repo_enable (PkBackend *backend, const gchar *rid, gboolean enabled)
 {
-	zypp::ZYpp::Ptr zypp;
+	ZYpp::Ptr zypp;
 
 	zypp = get_zypp (backend);
 	if (zypp == NULL){
@@ -1610,8 +1613,8 @@ pk_backend_repo_enable (PkBackend *backend, const gchar *rid, gboolean enabled)
 	}
 	pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
 
-	zypp::RepoManager manager;
-	zypp::RepoInfo repo;
+	RepoManager manager;
+	RepoInfo repo;
 
 	try {
 		repo = manager.getRepositoryInfo (rid);
@@ -1622,15 +1625,15 @@ pk_backend_repo_enable (PkBackend *backend, const gchar *rid, gboolean enabled)
 		repo.setEnabled (enabled);
 		manager.modifyRepository (rid, repo);
 		if (!enabled) {
-			zypp::Repository repository = zypp::sat::Pool::instance ().reposFind (repo.alias ());
+			Repository repository = sat::Pool::instance ().reposFind (repo.alias ());
 			repository.eraseFromPool ();
 		}
 
-	} catch (const zypp::repo::RepoNotFoundException &ex) {
+	} catch (const repo::RepoNotFoundException &ex) {
 		zypp_backend_finished_error (
 			backend, PK_ERROR_ENUM_REPO_NOT_FOUND, ex.asUserString().c_str());
 		return;
-	} catch (const zypp::Exception &ex) {
+	} catch (const Exception &ex) {
 		zypp_backend_finished_error (
 			backend, PK_ERROR_ENUM_INTERNAL_ERROR, ex.asUserString().c_str());
 		return;
@@ -1643,7 +1646,7 @@ static gboolean
 backend_get_files_thread (PkBackend *backend)
 {
 	gchar **package_ids;
-	zypp::ZYpp::Ptr zypp;
+	ZYpp::Ptr zypp;
 
 	zypp = get_zypp (backend);
 	if (zypp == NULL){
@@ -1661,15 +1664,15 @@ backend_get_files_thread (PkBackend *backend)
 		gchar **id_parts = pk_package_id_split (package_ids[i]);
 		pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
 
-		std::vector<zypp::sat::Solvable> v;
-		std::vector<zypp::sat::Solvable> v2;
-		zypp_get_packages_by_name (backend, (const gchar *)id_parts[PK_PACKAGE_ID_NAME], zypp::ResKind::package, v);
-		zypp_get_packages_by_name (backend, (const gchar *)id_parts[PK_PACKAGE_ID_NAME], zypp::ResKind::srcpackage, v2);
+		vector<sat::Solvable> v;
+		vector<sat::Solvable> v2;
+		zypp_get_packages_by_name (backend, (const gchar *)id_parts[PK_PACKAGE_ID_NAME], ResKind::package, v);
+		zypp_get_packages_by_name (backend, (const gchar *)id_parts[PK_PACKAGE_ID_NAME], ResKind::srcpackage, v2);
 
 		v.insert (v.end (), v2.begin (), v2.end ());
 
-		zypp::sat::Solvable package;
-		for (std::vector<zypp::sat::Solvable>::iterator it = v.begin ();
+		sat::Solvable package;
+		for (vector<sat::Solvable>::iterator it = v.begin ();
 				it != v.end (); it++) {
 			char *version = g_strdup (it->edition ().asString ().c_str ());
 			if (strcmp (id_parts[PK_PACKAGE_ID_VERSION], version) == 0) {
@@ -1687,18 +1690,18 @@ backend_get_files_thread (PkBackend *backend)
 				"couldn't find package");
 		}
 
-		std::string temp;
+		string temp;
 		if (package.isSystem ()){
 			try {
-				zypp::target::rpm::RpmHeader::constPtr rpmHeader = zypp_get_rpmHeader (package.name (), package.edition ());
-				std::list<std::string> files = rpmHeader->tag_filenames ();
+				target::rpm::RpmHeader::constPtr rpmHeader = zypp_get_rpmHeader (package.name (), package.edition ());
+				list<string> files = rpmHeader->tag_filenames ();
 
-				for (std::list<std::string>::iterator it = files.begin (); it != files.end (); it++) {
+				for (list<string>::iterator it = files.begin (); it != files.end (); it++) {
 					temp.append (*it);
 					temp.append (";");
 				}
 
-			} catch (const zypp::target::rpm::RpmException &ex) {
+			} catch (const target::rpm::RpmException &ex) {
 				return zypp_backend_finished_error (
 					backend, PK_ERROR_ENUM_REPO_NOT_FOUND,
 					 "Couldn't open rpm-database");
@@ -1726,7 +1729,7 @@ pk_backend_get_files(PkBackend *backend, gchar **package_ids)
 static gboolean
 backend_get_packages_thread (PkBackend *backend)
 {
-	zypp::ZYpp::Ptr zypp;
+	ZYpp::Ptr zypp;
 
 	zypp = get_zypp (backend);
 	if (zypp == NULL){
@@ -1735,11 +1738,11 @@ backend_get_packages_thread (PkBackend *backend)
 	}
 	pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
 
-	std::vector<zypp::sat::Solvable> v;
+	vector<sat::Solvable> v;
 
 	zypp_build_pool (backend, TRUE);
-	zypp::ResPool pool = zypp::ResPool::instance ();
-	for (zypp::ResPool::byKind_iterator it = pool.byKindBegin (zypp::ResKind::package); it != pool.byKindEnd (zypp::ResKind::package); it++) {
+	ResPool pool = ResPool::instance ();
+	for (ResPool::byKind_iterator it = pool.byKindBegin (ResKind::package); it != pool.byKindEnd (ResKind::package); it++) {
 		v.push_back (it->satSolvable ());
 	}
 
@@ -1762,25 +1765,25 @@ backend_update_packages_thread (PkBackend *backend)
 {
 	gboolean retval;
 	gchar **package_ids;
-	zypp::ZYpp::Ptr zypp;
+	ZYpp::Ptr zypp;
 
 	zypp = get_zypp (backend);
 	if (zypp == NULL){
 		pk_backend_finished (backend);
 		return FALSE;
 	}
-	zypp::ResPool pool = zypp_build_pool (backend, TRUE);
+	ResPool pool = zypp_build_pool (backend, TRUE);
 	/* FIXME: support only_trusted */
 	package_ids = pk_backend_get_strv (backend, "package_ids");
 	PkRestartEnum restart = PK_RESTART_ENUM_NONE;
 
 	for (guint i = 0; package_ids[i]; i++) {
 		gchar **id_parts = pk_package_id_split (package_ids[i]);
-		std::string name = id_parts[PK_PACKAGE_ID_NAME];
+		string name = id_parts[PK_PACKAGE_ID_NAME];
 
 		// Do we have already the latest version.
 		gboolean system = false;
-		for (zypp::ResPool::byName_iterator it = pool.byNameBegin (name);
+		for (ResPool::byName_iterator it = pool.byNameBegin (name);
 				it != pool.byNameEnd (name); it++) {
 			if (!it->satSolvable().isSystem())
 				continue;
@@ -1792,10 +1795,10 @@ backend_update_packages_thread (PkBackend *backend)
 		}
 		if (system == true)
 			continue;
-		zypp::sat::Solvable solvable = zypp_get_package_by_id (backend, package_ids[i]);
-		zypp::PoolItem item = zypp::ResPool::instance ().find (solvable);
-		item.status ().setToBeInstalled (zypp::ResStatus::USER);
-		zypp::Patch::constPtr patch = zypp::asKind<zypp::Patch>(item.resolvable ());
+		sat::Solvable solvable = zypp_get_package_by_id (backend, package_ids[i]);
+		PoolItem item = ResPool::instance ().find (solvable);
+		item.status ().setToBeInstalled (ResStatus::USER);
+		Patch::constPtr patch = asKind<Patch>(item.resolvable ());
 		zypp_check_restart (&restart, patch);
 		if (restart != PK_RESTART_ENUM_NONE){
 			pk_backend_require_restart (backend, restart, package_ids[i]);
@@ -1833,7 +1836,7 @@ backend_repo_set_data_thread (PkBackend *backend)
 	const gchar *repo_id;
 	const gchar *parameter;
 	const gchar *value;
-	zypp::ZYpp::Ptr zypp;
+	ZYpp::Ptr zypp;
 
 	zypp = get_zypp (backend);
 	if (zypp == NULL){
@@ -1846,8 +1849,8 @@ backend_repo_set_data_thread (PkBackend *backend)
 	value = pk_backend_get_string (backend, "value");
 	pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
 
-	zypp::RepoManager manager;
-	zypp::RepoInfo repo;
+	RepoManager manager;
+	RepoInfo repo;
 
 	gboolean bReturn = TRUE;
 
@@ -1863,7 +1866,7 @@ backend_repo_set_data_thread (PkBackend *backend)
 		// add a new repo
 		if (g_ascii_strcasecmp (parameter, "add") == 0) {
 			repo.setAlias (repo_id);
-			repo.setBaseUrl (zypp::Url(value));
+			repo.setBaseUrl (Url(value));
 			repo.setAutorefresh (TRUE);
 			repo.setEnabled (TRUE);
 
@@ -1898,7 +1901,7 @@ backend_repo_set_data_thread (PkBackend *backend)
 
 			manager.modifyRepository (repo_id, repo);
 		} else if (g_ascii_strcasecmp (parameter, "url") == 0) {
-			repo.setBaseUrl (zypp::Url(value));
+			repo.setBaseUrl (Url(value));
 			manager.modifyRepository (repo_id, repo);
 		} else if (g_ascii_strcasecmp (parameter, "name") == 0) {
 			repo.setName(value);
@@ -1939,19 +1942,19 @@ backend_repo_set_data_thread (PkBackend *backend)
 			bReturn = FALSE;
 		}
 
-	} catch (const zypp::repo::RepoNotFoundException &ex) {
+	} catch (const repo::RepoNotFoundException &ex) {
 		pk_backend_error_code (backend, PK_ERROR_ENUM_REPO_NOT_FOUND, "Couldn't find the specified repository");
 		bReturn = FALSE;
-	} catch (const zypp::repo::RepoAlreadyExistsException &ex) {
+	} catch (const repo::RepoAlreadyExistsException &ex) {
 		pk_backend_error_code (backend, PK_ERROR_ENUM_INTERNAL_ERROR, "This repo already exists");
 		bReturn = FALSE;
-	} catch (const zypp::repo::RepoUnknownTypeException &ex) {
+	} catch (const repo::RepoUnknownTypeException &ex) {
 		pk_backend_error_code (backend, PK_ERROR_ENUM_INTERNAL_ERROR, "Type of the repo can't be determined");
 		bReturn = FALSE;
-	} catch (const zypp::repo::RepoException &ex) {
+	} catch (const repo::RepoException &ex) {
 		pk_backend_error_code (backend, PK_ERROR_ENUM_INTERNAL_ERROR, "Can't access the given URL");
 		bReturn = FALSE;
-	} catch (const zypp::Exception &ex) {
+	} catch (const Exception &ex) {
 		pk_backend_error_code (backend, PK_ERROR_ENUM_INTERNAL_ERROR, ex.asString ().c_str ());
 		bReturn = FALSE;
 	}
@@ -1972,7 +1975,7 @@ pk_backend_repo_set_data (PkBackend *backend, const gchar *repo_id, const gchar
 static gboolean
 backend_what_provides_thread (PkBackend *backend)
 {
-	zypp::ZYpp::Ptr zypp;
+	ZYpp::Ptr zypp;
 
 	zypp = get_zypp (backend);
 	if (zypp == NULL){
@@ -1984,16 +1987,16 @@ backend_what_provides_thread (PkBackend *backend)
 	const gchar *search = values[0]; //Fixme - support possible multiple search values (logical OR)
 	PkProvidesEnum provides = (PkProvidesEnum) pk_backend_get_uint (backend, "provides");
 	PkBitfield _filters = (PkBitfield) pk_backend_get_uint (backend, "filters");
-	zypp::ResPool pool = zypp_build_pool (backend, true);
+	ResPool pool = zypp_build_pool (backend, true);
 
 	if((provides == PK_PROVIDES_ENUM_HARDWARE_DRIVER) || g_ascii_strcasecmp("drivers_for_attached_hardware", search) == 0) {
 		// solver run
-		zypp::Resolver solver(pool);
+		Resolver solver(pool);
 		solver.setIgnoreAlreadyRecommended (TRUE);
 
 		if (!solver.resolvePool ()) {
-			std::list<zypp::ResolverProblem_Ptr> problems = solver.problems ();
-			for (std::list<zypp::ResolverProblem_Ptr>::iterator it = problems.begin (); it != problems.end (); it++){
+			list<ResolverProblem_Ptr> problems = solver.problems ();
+			for (list<ResolverProblem_Ptr>::iterator it = problems.begin (); it != problems.end (); it++){
 				g_warning("Solver problem (This should never happen): '%s'", (*it)->description ().c_str ());
 			}
 			solver.setIgnoreAlreadyRecommended (FALSE);
@@ -2002,8 +2005,8 @@ backend_what_provides_thread (PkBackend *backend)
 		}
 
 		// look for packages which would be installed
-		for (zypp::ResPool::byKind_iterator it = pool.byKindBegin (zypp::ResKind::package);
-				it != pool.byKindEnd (zypp::ResKind::package); it++) {
+		for (ResPool::byKind_iterator it = pool.byKindBegin (ResKind::package);
+				it != pool.byKindEnd (ResKind::package); it++) {
 			PkInfoEnum status = PK_INFO_ENUM_UNKNOWN;
 
 			gboolean hit = FALSE;
@@ -2021,15 +2024,15 @@ backend_what_provides_thread (PkBackend *backend)
 		}
 		solver.setIgnoreAlreadyRecommended (FALSE);
 	} else {
-		zypp::Capability cap (search);
-		zypp::sat::WhatProvides prov (cap);
+		Capability cap (search);
+		sat::WhatProvides prov (cap);
 
-		for (zypp::sat::WhatProvides::const_iterator it = prov.begin (); it != prov.end (); it++) {
+		for (sat::WhatProvides::const_iterator it = prov.begin (); it != prov.end (); it++) {
 			if (zypp_filter_solvable (_filters, *it))
 				continue;
 
 			PkInfoEnum info = it->isSystem () ? PK_INFO_ENUM_INSTALLED : PK_INFO_ENUM_AVAILABLE;
-			zypp_backend_package (backend, info, *it, it->lookupStrAttribute (zypp::sat::SolvAttr::summary).c_str ());
+			zypp_backend_package (backend, info, *it, it->lookupStrAttribute (sat::SolvAttr::summary).c_str ());
 		}
 	}
 
@@ -2063,7 +2066,7 @@ backend_download_packages_thread (PkBackend *backend)
 		return FALSE;
 	}
 
-	zypp::ZYpp::Ptr zypp;
+	ZYpp::Ptr zypp;
 	zypp = get_zypp (backend);
 	if (zypp == NULL){
 		pk_backend_finished (backend);
@@ -2078,18 +2081,18 @@ backend_download_packages_thread (PkBackend *backend)
 
 	try
 	{
-		zypp::ResPool pool = zypp_build_pool (backend, FALSE);
-		zypp::PoolItem item;
+		ResPool pool = zypp_build_pool (backend, FALSE);
+		PoolItem item;
 
 		pk_backend_set_status (backend, PK_STATUS_ENUM_DOWNLOAD);
 		for (guint i = 0; package_ids[i]; i++) {
 			gchar **id_parts = pk_package_id_split (package_ids[i]);
-			std::string name = id_parts[PK_PACKAGE_ID_NAME];
+			string name = id_parts[PK_PACKAGE_ID_NAME];
 
-			for (zypp::ResPool::byName_iterator it = pool.byNameBegin (name); it != pool.byNameEnd (name); it++) {
+			for (ResPool::byName_iterator it = pool.byNameBegin (name); it != pool.byNameEnd (name); it++) {
 				if (zypp_ver_and_arch_equal (it->satSolvable(), id_parts[PK_PACKAGE_ID_VERSION],
 							     id_parts[PK_PACKAGE_ID_ARCH])) {
-					size += 2 * it->satSolvable().lookupNumAttribute (zypp::sat::SolvAttr::downloadsize);
+					size += 2 * it->satSolvable().lookupNumAttribute (sat::SolvAttr::downloadsize);
 					item = *it;
 					break;
 				}
@@ -2105,19 +2108,19 @@ backend_download_packages_thread (PkBackend *backend)
 				return FALSE;
 			}
 
-			zypp::sat::Solvable solvable = item.resolvable()->satSolvable();
-			zypp::filesystem::Pathname tmp_file;
-			zypp::repo::RepoMediaAccess access;
-			zypp::repo::DeltaCandidates deltas;
+			sat::Solvable solvable = item.resolvable()->satSolvable();
+			filesystem::Pathname tmp_file;
+			repo::RepoMediaAccess access;
+			repo::DeltaCandidates deltas;
 			if (strcmp (id_parts[PK_PACKAGE_ID_ARCH], "source") == 0) {
-				zypp::SrcPackage::constPtr package = zypp::asKind<zypp::SrcPackage>(item.resolvable());
-				zypp::repo::SrcPackageProvider pkgProvider(access);
+				SrcPackage::constPtr package = asKind<SrcPackage>(item.resolvable());
+				repo::SrcPackageProvider pkgProvider(access);
 				pkgProvider.provideSrcPackage(package);
 				tmp_file = solvable.repository().info().packagesPath()+ package->location().filename();
 
 			} else {
-				zypp::Package::constPtr package = zypp::asKind<zypp::Package>(item.resolvable());
-				zypp::repo::PackageProvider pkgProvider(access, package, deltas);
+				Package::constPtr package = asKind<Package>(item.resolvable());
+				repo::PackageProvider pkgProvider(access, package, deltas);
 				pkgProvider.providePackage();
 				tmp_file = solvable.repository().info().packagesPath()+ package->location().filename();
 			}
@@ -2126,7 +2129,7 @@ backend_download_packages_thread (PkBackend *backend)
 
 			g_strfreev (id_parts);
 		}
-	} catch (const zypp::Exception &ex) {
+	} catch (const Exception &ex) {
 		return zypp_backend_finished_error (
 			backend, PK_ERROR_ENUM_PACKAGE_DOWNLOAD_FAILED, ex.asUserString().c_str());
 	}
diff --git a/backends/zypp/zypp-utils.cpp b/backends/zypp/zypp-utils.cpp
index 4662898..f0e102d 100644
--- a/backends/zypp/zypp-utils.cpp
+++ b/backends/zypp/zypp-utils.cpp
@@ -64,33 +64,34 @@
 gchar * _repoName;
 gboolean _updating_self = FALSE;
 
+using namespace std;
+using namespace zypp;
 using zypp::filesystem::PathInfo;
-using zypp::InputStream;
 
 /**
  * Initialize Zypp (Factory method)
  */
-zypp::ZYpp::Ptr
+ZYpp::Ptr
 get_zypp (PkBackend *backend)
 {
 	static gboolean initialized = FALSE;
-        zypp::ZYpp::Ptr zypp = NULL;
+        ZYpp::Ptr zypp = NULL;
 
         try {
-	        zypp = zypp::ZYppFactory::instance ().getZYpp ();
+	        zypp = ZYppFactory::instance ().getZYpp ();
 
 		/* TODO: we need to lifecycle manage this, detect changes
 		   in the requested 'root' etc. */
 	        if (!initialized) {
-			zypp::filesystem::Pathname pathname(pk_backend_get_root (backend));
+			filesystem::Pathname pathname(pk_backend_get_root (backend));
 		        zypp->initializeTarget (pathname);
 
 		        initialized = TRUE;
 	        }
-	} catch (const zypp::ZYppFactoryException &ex) {
+	} catch (const ZYppFactoryException &ex) {
 		pk_backend_error_code (backend, PK_ERROR_ENUM_FAILED_INITIALIZATION, ex.asUserString().c_str() );
 		return NULL;
-        } catch (const zypp::Exception &ex) {
+        } catch (const Exception &ex) {
 		pk_backend_error_code (backend, PK_ERROR_ENUM_INTERNAL_ERROR, ex.asUserString().c_str() );
 		return NULL;
         }
@@ -118,7 +119,7 @@ zypp_logging ()
 		}
 	}
 
-	zypp::base::LogControl::instance ().logfile(file);
+	base::LogControl::instance ().logfile(file);
 
 	g_free (file);
 	g_free (file_old);
@@ -127,15 +128,15 @@ zypp_logging ()
 }
 
 gboolean
-zypp_is_changeable_media (PkBackend *backend, const zypp::Url &url)
+zypp_is_changeable_media (PkBackend *backend, const Url &url)
 {
 	gboolean is_cd = false;
 	try {
-		zypp::media::MediaManager mm;
-		zypp::media::MediaAccessId id = mm.open (url);
+		media::MediaManager mm;
+		media::MediaAccessId id = mm.open (url);
 		is_cd = mm.isChangeable (id);
 		mm.close (id);
-	} catch (const zypp::media::MediaException &e) {
+	} catch (const media::MediaException &e) {
 		// TODO: Do anything about this?
 	}
 
@@ -143,14 +144,14 @@ zypp_is_changeable_media (PkBackend *backend, const zypp::Url &url)
 }
 
 gboolean
-zypp_is_development_repo (PkBackend *backend, zypp::RepoInfo repo)
+zypp_is_development_repo (PkBackend *backend, RepoInfo repo)
 {
-	std::string repo_debuginfo("-debuginfo");
-	std::string repo_debug("-debug");
-	std::string repo_development("-development");
-	std::string repo_source ("-source");
+	string repo_debuginfo("-debuginfo");
+	string repo_debug("-debug");
+	string repo_development("-development");
+	string repo_source ("-source");
 
-	std::string repo_name(repo.name());
+	string repo_name(repo.name());
 
 	if (repo_name.length() > repo_debuginfo.length() &&
 	    repo_name.compare(repo_name.length() - repo_debuginfo.length(), repo_debuginfo.length(), repo_debuginfo) == 0)
@@ -172,7 +173,7 @@ zypp_is_development_repo (PkBackend *backend, zypp::RepoInfo repo)
 }
 
 gboolean
-zypp_is_valid_repo (PkBackend *backend, zypp::RepoInfo repo)
+zypp_is_valid_repo (PkBackend *backend, RepoInfo repo)
 {
 
 	if (repo.alias().empty()){
@@ -188,35 +189,35 @@ zypp_is_valid_repo (PkBackend *backend, zypp::RepoInfo repo)
 	return TRUE;
 }
 
-zypp::ResPool
+ResPool
 zypp_build_pool (PkBackend *backend, gboolean include_local)
 {
-	zypp::ZYpp::Ptr zypp = get_zypp (backend);
+	ZYpp::Ptr zypp = get_zypp (backend);
 
 	if (include_local) {
 		// FIXME have to wait for fix in zypp (repeated loading of target)
-		if (zypp::sat::Pool::instance().reposFind( zypp::sat::Pool::systemRepoAlias() ).solvablesEmpty ())
+		if (sat::Pool::instance().reposFind( sat::Pool::systemRepoAlias() ).solvablesEmpty ())
 		{
 			// Add local resolvables
-			zypp::Target_Ptr target = zypp->target ();
+			Target_Ptr target = zypp->target ();
 			target->load ();
 		}
 	} else {
-		if (!zypp::sat::Pool::instance().reposFind( zypp::sat::Pool::systemRepoAlias() ).solvablesEmpty ())
+		if (!sat::Pool::instance().reposFind( sat::Pool::systemRepoAlias() ).solvablesEmpty ())
 		{
 			// Remove local resolvables
-			zypp::Repository repository = zypp::sat::Pool::instance ().reposFind (zypp::sat::Pool::systemRepoAlias());
+			Repository repository = sat::Pool::instance ().reposFind (sat::Pool::systemRepoAlias());
 			repository.eraseFromPool ();
 		}
 	}
 
 	// Add resolvables from enabled repos
-	zypp::RepoManager manager;
-	std::list<zypp::RepoInfo> repos;
+	RepoManager manager;
+	list<RepoInfo> repos;
 	try {
-		repos = std::list<zypp::RepoInfo>(manager.repoBegin(),manager.repoEnd());
-		for (std::list<zypp::RepoInfo>::iterator it = repos.begin(); it != repos.end (); it++) {
-			zypp::RepoInfo repo (*it);
+		repos = list<RepoInfo>(manager.repoBegin(),manager.repoEnd());
+		for (list<RepoInfo>::iterator it = repos.begin(); it != repos.end (); it++) {
+			RepoInfo repo (*it);
 
 			// skip disabled repos
 			if (repo.enabled () == false)
@@ -227,14 +228,14 @@ zypp_build_pool (PkBackend *backend, gboolean include_local)
                                 continue;
                         }
                         //FIXME see above, skip already cached repos
-                        if (zypp::sat::Pool::instance().reposFind( repo.alias ()) == zypp::Repository::noRepository)
+                        if (sat::Pool::instance().reposFind( repo.alias ()) == Repository::noRepository)
                                 manager.loadFromCache (repo);
 		}
-	} catch (const zypp::repo::RepoNoAliasException &ex) {
+	} catch (const repo::RepoNoAliasException &ex) {
                 g_error ("Can't figure an alias to look in cache");
-        } catch (const zypp::repo::RepoNotCachedException &ex) {
+        } catch (const repo::RepoNotCachedException &ex) {
                 g_error ("The repo has to be cached at first: %s", ex.asUserString ().c_str ());
-	} catch (const zypp::Exception &ex) {
+	} catch (const Exception &ex) {
                 g_error ("TODO: Handle exceptions: %s", ex.asUserString ().c_str ());
 	}
 
@@ -242,31 +243,31 @@ zypp_build_pool (PkBackend *backend, gboolean include_local)
 }
 
 void
-warn_outdated_repos(PkBackend *backend, const zypp::ResPool & pool)
+warn_outdated_repos(PkBackend *backend, const ResPool & pool)
 {
-	zypp::Repository repoobj;
-	zypp::ResPool::repository_iterator it;
+	Repository repoobj;
+	ResPool::repository_iterator it;
 	for ( it = pool.knownRepositoriesBegin();
 		it != pool.knownRepositoriesEnd();
 		++it )
 	{
-		zypp::Repository repo(*it);
+		Repository repo(*it);
 		if ( repo.maybeOutdated() )
 		{
 			// warn the user
 			pk_backend_message (backend,
 					PK_MESSAGE_ENUM_BROKEN_MIRROR,
-					zypp::str::form("The repository %s seems to be outdated. You may want to try another mirror.",
+					str::form("The repository %s seems to be outdated. You may want to try another mirror.",
 					repo.alias().c_str()).c_str() );
 		}
 	}
 }
 
-zypp::target::rpm::RpmHeader::constPtr
-zypp_get_rpmHeader (std::string name, zypp::Edition edition)
+target::rpm::RpmHeader::constPtr
+zypp_get_rpmHeader (string name, Edition edition)
 {
-	zypp::target::rpm::librpmDb::db_const_iterator it;
-	zypp::target::rpm::RpmHeader::constPtr result = new zypp::target::rpm::RpmHeader ();
+	target::rpm::librpmDb::db_const_iterator it;
+	target::rpm::RpmHeader::constPtr result = new target::rpm::RpmHeader ();
 
 	for (it.findPackage (name, edition); *it; ++it) {
 		result = *it;
@@ -276,71 +277,70 @@ zypp_get_rpmHeader (std::string name, zypp::Edition edition)
 }
 
 
-std::string
-zypp_get_group (zypp::sat::Solvable item)
+string
+zypp_get_group (sat::Solvable item)
 {
-        std::string group;
+        string group;
 
         if (item.isSystem ()) {
 
-                zypp::target::rpm::RpmHeader::constPtr rpmHeader = zypp_get_rpmHeader (item.name (), item.edition ());
+                target::rpm::RpmHeader::constPtr rpmHeader = zypp_get_rpmHeader (item.name (), item.edition ());
                 group = rpmHeader->tag_group ();
 
         } else {
-                group = item.lookupStrAttribute (zypp::sat::SolvAttr::group);
+                group = item.lookupStrAttribute (sat::SolvAttr::group);
         }
-        std::transform(group.begin(), group.end(), group.begin(), tolower);
-        return group;
+        return str::toLower(group);
 }
 
 PkGroupEnum
-get_enum_group (std::string group)
+get_enum_group (string group_)
 {
 
         // TODO Look for a faster and nice way to do this conversion
-        std::transform(group.begin(), group.end(), group.begin(), tolower);
+	string group(str::toLower(group_));
 
-        if (group.find ("amusements") != std::string::npos) {
+        if (group.find ("amusements") != string::npos) {
                 return PK_GROUP_ENUM_GAMES;
-        } else if (group.find ("development") != std::string::npos) {
+        } else if (group.find ("development") != string::npos) {
                 return PK_GROUP_ENUM_PROGRAMMING;
-        } else if (group.find ("hardware") != std::string::npos) {
+        } else if (group.find ("hardware") != string::npos) {
                 return PK_GROUP_ENUM_SYSTEM;
-        } else if (group.find ("archiving") != std::string::npos
-                  || group.find("clustering") != std::string::npos
-                  || group.find("system/monitoring") != std::string::npos
-                  || group.find("databases") != std::string::npos
-                  || group.find("system/management") != std::string::npos) {
+        } else if (group.find ("archiving") != string::npos
+                  || group.find("clustering") != string::npos
+                  || group.find("system/monitoring") != string::npos
+                  || group.find("databases") != string::npos
+                  || group.find("system/management") != string::npos) {
                 return PK_GROUP_ENUM_ADMIN_TOOLS;
-        } else if (group.find ("graphics") != std::string::npos) {
+        } else if (group.find ("graphics") != string::npos) {
                 return PK_GROUP_ENUM_GRAPHICS;
-        } else if (group.find ("multimedia") != std::string::npos) {
+        } else if (group.find ("multimedia") != string::npos) {
                 return PK_GROUP_ENUM_MULTIMEDIA;
-        } else if (group.find ("network") != std::string::npos) {
+        } else if (group.find ("network") != string::npos) {
                 return PK_GROUP_ENUM_NETWORK;
-        } else if (group.find ("office") != std::string::npos
-                  || group.find("text") != std::string::npos
-                  || group.find("editors") != std::string::npos) {
+        } else if (group.find ("office") != string::npos
+                  || group.find("text") != string::npos
+                  || group.find("editors") != string::npos) {
                 return PK_GROUP_ENUM_OFFICE;
-        } else if (group.find ("publishing") != std::string::npos) {
+        } else if (group.find ("publishing") != string::npos) {
                 return PK_GROUP_ENUM_PUBLISHING;
-        } else if (group.find ("security") != std::string::npos) {
+        } else if (group.find ("security") != string::npos) {
                 return PK_GROUP_ENUM_SECURITY;
-        } else if (group.find ("telephony") != std::string::npos) {
+        } else if (group.find ("telephony") != string::npos) {
                 return PK_GROUP_ENUM_COMMUNICATION;
-        } else if (group.find ("gnome") != std::string::npos) {
+        } else if (group.find ("gnome") != string::npos) {
                 return PK_GROUP_ENUM_DESKTOP_GNOME;
-        } else if (group.find ("kde") != std::string::npos) {
+        } else if (group.find ("kde") != string::npos) {
                 return PK_GROUP_ENUM_DESKTOP_KDE;
-        } else if (group.find ("xfce") != std::string::npos) {
+        } else if (group.find ("xfce") != string::npos) {
                 return PK_GROUP_ENUM_DESKTOP_XFCE;
-        } else if (group.find ("gui/other") != std::string::npos) {
+        } else if (group.find ("gui/other") != string::npos) {
                 return PK_GROUP_ENUM_DESKTOP_OTHER;
-        } else if (group.find ("localization") != std::string::npos) {
+        } else if (group.find ("localization") != string::npos) {
                 return PK_GROUP_ENUM_LOCALIZATION;
-        } else if (group.find ("system") != std::string::npos) {
+        } else if (group.find ("system") != string::npos) {
                 return PK_GROUP_ENUM_SYSTEM;
-        } else if (group.find ("scientific") != std::string::npos) {
+        } else if (group.find ("scientific") != string::npos) {
                 return PK_GROUP_ENUM_EDUCATION;
         }
 
@@ -350,13 +350,13 @@ get_enum_group (std::string group)
 void
 zypp_get_packages_by_name (PkBackend *backend,
 			   const gchar *package_name,
-			   const zypp::ResKind kind,
-			   std::vector<zypp::sat::Solvable> &result,
+			   const ResKind kind,
+			   vector<sat::Solvable> &result,
 			   gboolean include_local)
 {
-	zypp::ResPool pool = zypp_build_pool (backend, include_local);
+	ResPool pool = zypp_build_pool (backend, include_local);
 
-        for (zypp::ResPool::byIdent_iterator it = pool.byIdentBegin (kind, package_name);
+        for (ResPool::byIdent_iterator it = pool.byIdentBegin (kind, package_name);
                         it != pool.byIdentEnd (kind, package_name); it++) {
                 result.push_back (it->satSolvable ());
         }
@@ -365,55 +365,55 @@ zypp_get_packages_by_name (PkBackend *backend,
 void
 zypp_get_packages_by_file (PkBackend *backend,
 			   const gchar *search_file,
-			   std::vector<zypp::sat::Solvable> &ret)
+			   vector<sat::Solvable> &ret)
 {
-        zypp::ResPool pool = zypp_build_pool (backend, TRUE);
+        ResPool pool = zypp_build_pool (backend, TRUE);
 
-        std::string file (search_file);
+        string file (search_file);
 
-	zypp::target::rpm::librpmDb::db_const_iterator it;
-	zypp::target::rpm::RpmHeader::constPtr result = new zypp::target::rpm::RpmHeader ();
+	target::rpm::librpmDb::db_const_iterator it;
+	target::rpm::RpmHeader::constPtr result = new target::rpm::RpmHeader ();
 
 	for (it.findByFile (search_file); *it; ++it) {
-		for (zypp::ResPool::byName_iterator it2 = pool.byNameBegin (it->tag_name ()); it2 != pool.byNameEnd (it->tag_name ()); it2++) {
+		for (ResPool::byName_iterator it2 = pool.byNameBegin (it->tag_name ()); it2 != pool.byNameEnd (it->tag_name ()); it2++) {
 			if ((*it2)->isSystem ())
 				ret.push_back ((*it2)->satSolvable ());
 		}
 	}
 
 	if (ret.empty ()) {
-		zypp::Capability cap (search_file);
-		zypp::sat::WhatProvides prov (cap);
+		Capability cap (search_file);
+		sat::WhatProvides prov (cap);
 
-		for(zypp::sat::WhatProvides::const_iterator it = prov.begin (); it != prov.end (); it++) {
+		for(sat::WhatProvides::const_iterator it = prov.begin (); it != prov.end (); it++) {
 			ret.push_back (*it);
 		}
 	}
 }
 
-zypp::sat::Solvable
+sat::Solvable
 zypp_get_package_by_id (PkBackend *backend, const gchar *package_id)
 {
 	if (!pk_package_id_check(package_id)) {
 		// TODO: Do we need to do something more for this error?
-		return zypp::sat::Solvable::noSolvable;
+		return sat::Solvable::noSolvable;
 	}
 
 	gchar **id_parts = pk_package_id_split(package_id);
-	std::vector<zypp::sat::Solvable> v;
-	std::vector<zypp::sat::Solvable> v2;
+	vector<sat::Solvable> v;
+	vector<sat::Solvable> v2;
 
-	zypp_get_packages_by_name (backend, id_parts[PK_PACKAGE_ID_NAME], zypp::ResKind::package, v);
-	zypp_get_packages_by_name (backend, id_parts[PK_PACKAGE_ID_NAME], zypp::ResKind::patch, v2);
+	zypp_get_packages_by_name (backend, id_parts[PK_PACKAGE_ID_NAME], ResKind::package, v);
+	zypp_get_packages_by_name (backend, id_parts[PK_PACKAGE_ID_NAME], ResKind::patch, v2);
 
 	v.insert (v.end (), v2.begin (), v2.end ());
 
 	if (v.empty())
-		return zypp::sat::Solvable::noSolvable;
+		return sat::Solvable::noSolvable;
 
-	zypp::sat::Solvable package;
+	sat::Solvable package;
 
-	for (std::vector<zypp::sat::Solvable>::iterator it = v.begin ();
+	for (vector<sat::Solvable>::iterator it = v.begin ();
 			it != v.end (); it++) {
 		if (zypp_ver_and_arch_equal (*it, id_parts[PK_PACKAGE_ID_VERSION],
 					     id_parts[PK_PACKAGE_ID_ARCH])) {
@@ -426,17 +426,17 @@ zypp_get_package_by_id (PkBackend *backend, const gchar *package_id)
 	return package;
 }
 
-zypp::RepoInfo
+RepoInfo
 zypp_get_Repository (PkBackend *backend, const gchar *alias)
 {
-	zypp::RepoInfo info;
+	RepoInfo info;
 
 	try {
-		zypp::RepoManager manager;
+		RepoManager manager;
 		info = manager.getRepositoryInfo (alias);
-	} catch (const zypp::repo::RepoNotFoundException &ex) {
+	} catch (const repo::RepoNotFoundException &ex) {
 		pk_backend_error_code (backend, PK_ERROR_ENUM_REPO_NOT_FOUND, ex.asUserString().c_str() );
-		return zypp::RepoInfo ();
+		return RepoInfo ();
 	}
 
 	return info;
@@ -462,23 +462,23 @@ class AbortTransactionException {
 };
 
 gboolean
-zypp_refresh_meta_and_cache (zypp::RepoManager &manager, zypp::RepoInfo &repo, bool force)
+zypp_refresh_meta_and_cache (RepoManager &manager, RepoInfo &repo, bool force)
 {
 	try {
 		if (manager.checkIfToRefreshMetadata (repo, repo.url(),
-					zypp::RepoManager::RefreshIfNeededIgnoreDelay)
-					!= zypp::RepoManager::REFRESH_NEEDED)
+					RepoManager::RefreshIfNeededIgnoreDelay)
+					!= RepoManager::REFRESH_NEEDED)
 			return TRUE;
 
-		zypp::sat::Pool pool = zypp::sat::Pool::instance ();
+		sat::Pool pool = sat::Pool::instance ();
 		// Erase old solv file
 		pool.reposErase (repo.alias ());
 		manager.refreshMetadata (repo, force ?
-					 zypp::RepoManager::RefreshForced :
-					 zypp::RepoManager::RefreshIfNeededIgnoreDelay);
+					 RepoManager::RefreshForced :
+					 RepoManager::RefreshIfNeededIgnoreDelay);
 		manager.buildCache (repo, force ?
-				    zypp::RepoManager::BuildForced :
-				    zypp::RepoManager::BuildIfNeeded);
+				    RepoManager::BuildForced :
+				    RepoManager::BuildIfNeeded);
 		manager.loadFromCache (repo);
 		return TRUE;
 	} catch (const AbortTransactionException &ex) {
@@ -487,13 +487,13 @@ zypp_refresh_meta_and_cache (zypp::RepoManager &manager, zypp::RepoInfo &repo, b
 }
 
 gboolean
-zypp_signature_required (PkBackend *backend, const zypp::PublicKey &key)
+zypp_signature_required (PkBackend *backend, const PublicKey &key)
 {
 	gboolean ok = FALSE;
 
-	if (std::find (_signatures[backend]->begin (), _signatures[backend]->end (), key.id ()) == _signatures[backend]->end ()) {
-		zypp::RepoInfo info = zypp_get_Repository (backend, _repoName);
-		if (info.type () == zypp::repo::RepoType::NONE)
+	if (find (_signatures[backend]->begin (), _signatures[backend]->end (), key.id ()) == _signatures[backend]->end ()) {
+		RepoInfo info = zypp_get_Repository (backend, _repoName);
+		if (info.type () == repo::RepoType::NONE)
 			pk_backend_error_code (backend, PK_ERROR_ENUM_INTERNAL_ERROR,
 					       "Repository unknown");
 		else {
@@ -517,13 +517,13 @@ zypp_signature_required (PkBackend *backend, const zypp::PublicKey &key)
 }
 
 gboolean
-zypp_signature_required (PkBackend *backend, const std::string &file, const std::string &id)
+zypp_signature_required (PkBackend *backend, const string &file, const string &id)
 {
         gboolean ok = FALSE;
 
-	if (std::find (_signatures[backend]->begin (), _signatures[backend]->end (), id) == _signatures[backend]->end ()) {
-		zypp::RepoInfo info = zypp_get_Repository (backend, _repoName);
-		if (info.type () == zypp::repo::RepoType::NONE)
+	if (find (_signatures[backend]->begin (), _signatures[backend]->end (), id) == _signatures[backend]->end ()) {
+		RepoInfo info = zypp_get_Repository (backend, _repoName);
+		if (info.type () == repo::RepoType::NONE)
 			pk_backend_error_code (backend, PK_ERROR_ENUM_INTERNAL_ERROR,
 					       "Repository unknown");
 		else {
@@ -547,13 +547,13 @@ zypp_signature_required (PkBackend *backend, const std::string &file, const std:
 }
 
 gboolean
-zypp_signature_required (PkBackend *backend, const std::string &file)
+zypp_signature_required (PkBackend *backend, const string &file)
 {
 	gboolean ok = FALSE;
 
-	if (std::find (_signatures[backend]->begin (), _signatures[backend]->end (), file) == _signatures[backend]->end ()) {
-        	zypp::RepoInfo info = zypp_get_Repository (backend, _repoName);
-		if (info.type () == zypp::repo::RepoType::NONE)
+	if (find (_signatures[backend]->begin (), _signatures[backend]->end (), file) == _signatures[backend]->end ()) {
+        	RepoInfo info = zypp_get_Repository (backend, _repoName);
+		if (info.type () == repo::RepoType::NONE)
 			pk_backend_error_code (backend, PK_ERROR_ENUM_INTERNAL_ERROR,
 					       "Repository unknown");
 		else {
@@ -577,17 +577,17 @@ zypp_signature_required (PkBackend *backend, const std::string &file)
 }
 
 gboolean
-system_and_package_are_x86 (zypp::sat::Solvable item)
+system_and_package_are_x86 (sat::Solvable item)
 {
 	// i586, i686, ... all should be considered the same arch for our comparison
 	return (!strcmp (item.arch ().asString ().c_str (), "i586") &&
-			!strcmp (zypp::ZConfig::defaultSystemArchitecture ().asString().c_str(), "i686"));
+			!strcmp (ZConfig::defaultSystemArchitecture ().asString().c_str(), "i686"));
 }
 
 static gboolean
-zypp_package_is_devel (const zypp::sat::Solvable &item)
+zypp_package_is_devel (const sat::Solvable &item)
 {
-	const std::string &name = item.name();
+	const string &name = item.name();
 	const char *cstr = name.c_str();
 
 	return ( g_str_has_suffix (cstr, "-debuginfo") ||
@@ -597,7 +597,7 @@ zypp_package_is_devel (const zypp::sat::Solvable &item)
 
 /* should we filter out this package ? */
 gboolean
-zypp_filter_solvable (PkBitfield filters, const zypp::sat::Solvable &item)
+zypp_filter_solvable (PkBitfield filters, const sat::Solvable &item)
 {
 	// iterate through the given filters
 	if (!filters)
@@ -611,19 +611,19 @@ zypp_filter_solvable (PkBitfield filters, const zypp::sat::Solvable &item)
 		if (i == PK_FILTER_ENUM_NOT_INSTALLED && item.isSystem ())
 			return TRUE;
 		if (i == PK_FILTER_ENUM_ARCH) {
-			if (item.arch () != zypp::ZConfig::defaultSystemArchitecture () &&
-			    item.arch () != zypp::Arch_noarch &&
+			if (item.arch () != ZConfig::defaultSystemArchitecture () &&
+			    item.arch () != Arch_noarch &&
 			    ! system_and_package_are_x86 (item))
 				return TRUE;
 		}
 		if (i == PK_FILTER_ENUM_NOT_ARCH) {
-			if (item.arch () == zypp::ZConfig::defaultSystemArchitecture () ||
+			if (item.arch () == ZConfig::defaultSystemArchitecture () ||
 			    system_and_package_are_x86 (item))
 				return TRUE;
 		}
-		if (i == PK_FILTER_ENUM_SOURCE && !(zypp::isKind<zypp::SrcPackage>(item)))
+		if (i == PK_FILTER_ENUM_SOURCE && !(isKind<SrcPackage>(item)))
 			return TRUE;
-		if (i == PK_FILTER_ENUM_NOT_SOURCE && zypp::isKind<zypp::SrcPackage>(item))
+		if (i == PK_FILTER_ENUM_NOT_SOURCE && isKind<SrcPackage>(item))
 			return TRUE;
 		if (i == PK_FILTER_ENUM_DEVELOPMENT && !zypp_package_is_devel (item))
 			return TRUE;
@@ -644,11 +644,11 @@ zypp_filter_solvable (PkBitfield filters, const zypp::sat::Solvable &item)
  * PK doesn't handle re-installs (by some quirk).
  */
 void
-zypp_emit_filtered_packages_in_list (PkBackend *backend, const std::vector<zypp::sat::Solvable> &v)
+zypp_emit_filtered_packages_in_list (PkBackend *backend, const vector<sat::Solvable> &v)
 {
-	typedef std::vector<zypp::sat::Solvable>::const_iterator sat_it_t;
+	typedef vector<sat::Solvable>::const_iterator sat_it_t;
 
-	std::vector<zypp::sat::Solvable> installed;
+	vector<sat::Solvable> installed;
 	PkBitfield filters = (PkBitfield) pk_backend_get_uint (backend, "filters");
 
 	// always emit system installed packages first
@@ -658,7 +658,7 @@ zypp_emit_filtered_packages_in_list (PkBackend *backend, const std::vector<zypp:
 			continue;
 
 		zypp_backend_package (backend, PK_INFO_ENUM_INSTALLED, *it,
-				      it->lookupStrAttribute (zypp::sat::SolvAttr::summary).c_str ());
+				      it->lookupStrAttribute (sat::SolvAttr::summary).c_str ());
 		installed.push_back (*it);
 	}
 
@@ -673,19 +673,19 @@ zypp_emit_filtered_packages_in_list (PkBackend *backend, const std::vector<zypp:
 		match = FALSE;
 		for (sat_it_t i = installed.begin (); !match && i != installed.end (); i++) {
 			match = it->sameNVRA (*i) &&
-				!(!zypp::isKind<zypp::SrcPackage>(*it) ^
-				  !zypp::isKind<zypp::SrcPackage>(*i));
+				!(!isKind<SrcPackage>(*it) ^
+				  !isKind<SrcPackage>(*i));
 		}
 		if (!match) {
 			zypp_backend_package (backend, PK_INFO_ENUM_AVAILABLE, *it,
-					      it->lookupStrAttribute (zypp::sat::SolvAttr::summary).c_str ());
+					      it->lookupStrAttribute (sat::SolvAttr::summary).c_str ());
 		}
 	}
 }
 
 void
 zypp_backend_package (PkBackend *backend, PkInfoEnum info,
-		      const zypp::sat::Solvable &pkg,
+		      const sat::Solvable &pkg,
 		      const char *opt_summary)
 {
 	gchar *id = zypp_build_package_id_from_resolvable (pkg);
@@ -698,20 +698,20 @@ zypp_backend_package (PkBackend *backend, PkInfoEnum info,
  * (you're able to exclude a single (normally the 'patch' repo)
  */
 static void
-zypp_get_package_updates (std::string repo, std::set<zypp::PoolItem> &pks)
+zypp_get_package_updates (string repo, set<PoolItem> &pks)
 {
-        zypp::ResPool pool = zypp::ResPool::instance ();
+        ResPool pool = ResPool::instance ();
 
-        zypp::ResObject::Kind kind = zypp::ResTraits<zypp::Package>::kind;
-        zypp::ResPool::byKind_iterator it = pool.byKindBegin (kind);
-        zypp::ResPool::byKind_iterator e = pool.byKindEnd (kind);
+        ResObject::Kind kind = ResTraits<Package>::kind;
+        ResPool::byKind_iterator it = pool.byKindBegin (kind);
+        ResPool::byKind_iterator e = pool.byKindEnd (kind);
 
-	zypp::getZYpp()->resolver()->doUpdate();
+	getZYpp()->resolver()->doUpdate();
         for (; it != e; ++it)
        	        if (it->status().isToBeInstalled())
                 {
-	                zypp::ui::Selectable::constPtr s =
-	                zypp::ui::Selectable::get((*it)->kind(), (*it)->name());
+	                ui::Selectable::constPtr s =
+	                ui::Selectable::get((*it)->kind(), (*it)->name());
                         if (s->hasInstalledObj())
                                 pks.insert(*it);
 	        }
@@ -721,20 +721,20 @@ zypp_get_package_updates (std::string repo, std::set<zypp::PoolItem> &pks)
  * Returns a set of all patches the could be installed
  */
 static void
-zypp_get_patches (PkBackend *backend, std::set<zypp::PoolItem> &patches)
+zypp_get_patches (PkBackend *backend, set<PoolItem> &patches)
 {
 	_updating_self = FALSE;
 
-        zypp::ZYpp::Ptr zypp;
+        ZYpp::Ptr zypp;
         zypp = get_zypp (backend);
 
 	zypp->resolver ()->resolvePool ();
 
-        for (zypp::ResPoolProxy::const_iterator it = zypp->poolProxy ().byKindBegin<zypp::Patch>();
-                        it != zypp->poolProxy ().byKindEnd<zypp::Patch>(); it ++) {
+        for (ResPoolProxy::const_iterator it = zypp->poolProxy ().byKindBegin<Patch>();
+                        it != zypp->poolProxy ().byKindEnd<Patch>(); it ++) {
                 // check if patch is needed
                 if((*it)->isNeeded()) {
-			zypp::Patch::constPtr patch = zypp::asKind<zypp::Patch>((*it)->candidateObj ().resolvable ());
+			Patch::constPtr patch = asKind<Patch>((*it)->candidateObj ().resolvable ());
 			if (_updating_self) {
 				if (patch->restartSuggested ())
 					patches.insert ((*it)->candidateObj ());
@@ -754,28 +754,28 @@ zypp_get_patches (PkBackend *backend, std::set<zypp::PoolItem> &patches)
 }
 
 void
-zypp_get_updates (PkBackend *backend, std::set<zypp::PoolItem> &candidates)
+zypp_get_updates (PkBackend *backend, set<PoolItem> &candidates)
 {
-	typedef std::set<zypp::PoolItem>::iterator pi_it_t;
+	typedef set<PoolItem>::iterator pi_it_t;
 	zypp_get_patches (backend, candidates);
 
 	if (!_updating_self) {
 		// exclude the patch-repository
-		std::string patchRepo;
+		string patchRepo;
 		if (!candidates.empty ()) {
 			patchRepo = candidates.begin ()->resolvable ()->repoInfo ().alias ();
 		}
 
 		bool hidePackages = false;
 		if (PathInfo("/etc/PackageKit/ZYpp.conf").isExist()) {
-			zypp::parser::IniDict vendorConf(InputStream("/etc/PackageKit/ZYpp.conf"));
+			parser::IniDict vendorConf(InputStream("/etc/PackageKit/ZYpp.conf"));
 			if (vendorConf.hasSection("Updates")) {
-				for ( zypp::parser::IniDict::entry_const_iterator eit = vendorConf.entriesBegin("Updates");
+				for ( parser::IniDict::entry_const_iterator eit = vendorConf.entriesBegin("Updates");
 				      eit != vendorConf.entriesEnd("Updates");
 				      ++eit )
 				{
 					if ((*eit).first == "HidePackages" &&
-					    zypp::str::strToTrue((*eit).second))
+					    str::strToTrue((*eit).second))
 						hidePackages = true;
 				}
 			}
@@ -783,24 +783,24 @@ zypp_get_updates (PkBackend *backend, std::set<zypp::PoolItem> &candidates)
 
 		if (!hidePackages)
 		{
-			std::set<zypp::PoolItem> packages;
+			set<PoolItem> packages;
 			zypp_get_package_updates(patchRepo, packages);
 
 			pi_it_t cb = candidates.begin (), ce = candidates.end (), ci;
 			for (ci = cb; ci != ce; ++ci) {
-				if (!zypp::isKind<zypp::Patch>(ci->resolvable()))
+				if (!isKind<Patch>(ci->resolvable()))
 				continue;
 
-				zypp::Patch::constPtr patch = zypp::asKind<zypp::Patch>(ci->resolvable());
+				Patch::constPtr patch = asKind<Patch>(ci->resolvable());
 
 				// Remove contained packages from list of packages to add
-				zypp::sat::SolvableSet::const_iterator pki;
-				zypp::Patch::Contents content(patch->contents());
+				sat::SolvableSet::const_iterator pki;
+				Patch::Contents content(patch->contents());
 				for (pki = content.begin(); pki != content.end(); ++pki) {
 
 					pi_it_t pb = packages.begin (), pe = packages.end (), pi;
 					for (pi = pb; pi != pe; ++pi) {
-						if (pi->satSolvable() == zypp::sat::Solvable::noSolvable)
+						if (pi->satSolvable() == sat::Solvable::noSolvable)
 							continue;
 
 						if (pi->satSolvable().identical (*pki)) {
@@ -818,7 +818,7 @@ zypp_get_updates (PkBackend *backend, std::set<zypp::PoolItem> &candidates)
 }
 
 void
-zypp_check_restart (PkRestartEnum *restart, zypp::Patch::constPtr patch)
+zypp_check_restart (PkRestartEnum *restart, Patch::constPtr patch)
 {
 	if (patch == NULL || restart == NULL)
 		return;
@@ -842,7 +842,7 @@ zypp_perform_execution (PkBackend *backend, PerformType type, gboolean force)
 	gboolean simulate = pk_backend_get_bool (backend, "hint:simulate");
 
         try {
-                zypp::ZYpp::Ptr zypp = get_zypp (backend);
+                ZYpp::Ptr zypp = get_zypp (backend);
 
                 if (force)
                         zypp->resolver ()->setForceResolve (force);
@@ -858,10 +858,10 @@ zypp_perform_execution (PkBackend *backend, PerformType type, gboolean force)
                        // TODO: Figure out what we need to do with PackageKit
                        // to pull off interactive problem solving.
 
-			zypp::ResolverProblemList problems = zypp->resolver ()->problems ();
+			ResolverProblemList problems = zypp->resolver ()->problems ();
 			gchar * emsg = NULL, * tempmsg = NULL;
 
-			for (zypp::ResolverProblemList::iterator it = problems.begin (); it != problems.end (); it++) {
+			for (ResolverProblemList::iterator it = problems.begin (); it != problems.end (); it++) {
 				if (emsg == NULL) {
 					emsg = g_strdup ((*it)->description ().c_str ());
 				}
@@ -873,8 +873,8 @@ zypp_perform_execution (PkBackend *backend, PerformType type, gboolean force)
 			}
 
 			// reset the status of all touched PoolItems
-			zypp::ResPool pool = zypp::ResPool::instance ();
-			for (zypp::ResPool::const_iterator it = pool.begin (); it != pool.end (); it++) {
+			ResPool pool = ResPool::instance ();
+			for (ResPool::const_iterator it = pool.begin (); it != pool.end (); it++) {
 				if (it->status ().isToBeInstalled ())
 					it->statusReset ();
 			}
@@ -897,13 +897,13 @@ zypp_perform_execution (PkBackend *backend, PerformType type, gboolean force)
                                 break;
                 };
 
-		zypp::ResPool pool = zypp::ResPool::instance ();
+		ResPool pool = ResPool::instance ();
 		if (simulate) {
 			ret = TRUE;
 
 			g_debug ("simulating");
 
-			for (zypp::ResPool::const_iterator it = pool.begin (); it != pool.end (); it++) {
+			for (ResPool::const_iterator it = pool.begin (); it != pool.end (); it++) {
 				if (type == REMOVE && !(*it)->isSystem ()) {
 					it->statusReset ();
 					continue;
@@ -918,8 +918,8 @@ zypp_perform_execution (PkBackend *backend, PerformType type, gboolean force)
 
 		// look for licenses to confirm
 
-		for (zypp::ResPool::const_iterator it = pool.begin (); it != pool.end (); it++) {
-			if (it->status ().isToBeInstalled () && !(it->satSolvable ().lookupStrAttribute (zypp::sat::SolvAttr::eula).empty ())) {
+		for (ResPool::const_iterator it = pool.begin (); it != pool.end (); it++) {
+			if (it->status ().isToBeInstalled () && !(it->satSolvable ().lookupStrAttribute (sat::SolvAttr::eula).empty ())) {
 				gchar *eula_id = g_strdup ((*it)->name ().c_str ());
 				gboolean has_eula = pk_backend_is_eula_valid (backend, eula_id);
 				if (!has_eula) {
@@ -928,7 +928,7 @@ zypp_perform_execution (PkBackend *backend, PerformType type, gboolean force)
 							eula_id,
 							package_id,
 							(*it)->vendor ().c_str (),
-							it->satSolvable ().lookupStrAttribute (zypp::sat::SolvAttr::eula).c_str ());
+							it->satSolvable ().lookupStrAttribute (sat::SolvAttr::eula).c_str ());
 					pk_backend_error_code (backend, PK_ERROR_ENUM_NO_LICENSE_AGREEMENT, "You've to agree/decline a license");
 					g_free (package_id);
 					g_free (eula_id);
@@ -940,21 +940,21 @@ zypp_perform_execution (PkBackend *backend, PerformType type, gboolean force)
 
                 // Perform the installation
 		gboolean only_trusted = pk_backend_get_bool (backend, "only_trusted");
-                zypp::ZYppCommitPolicy policy;
+                ZYppCommitPolicy policy;
                 policy.restrictToMedia (0); // 0 == install all packages regardless to media
-		policy.downloadMode (zypp::DownloadInHeaps);
+		policy.downloadMode (DownloadInHeaps);
 		policy.syncPoolAfterCommit (true);
 		if (only_trusted == FALSE)
 			policy.rpmNoSignature(true);
 
-                zypp::ZYppCommitResult result = zypp->commit (policy);
+                ZYppCommitResult result = zypp->commit (policy);
 
                 if(!result._errors.empty () || !result._remaining.empty () || !result._srcremaining.empty ()){
 
-			zypp::ZYppCommitResult::PoolItemList errors = result._errors;
+			ZYppCommitResult::PoolItemList errors = result._errors;
 			gchar *emsg = NULL, *tmpmsg = NULL;
 
-			for (zypp::ZYppCommitResult::PoolItemList::iterator it = errors.begin (); it != errors.end (); it++){
+			for (ZYppCommitResult::PoolItemList::iterator it = errors.begin (); it != errors.end (); it++){
 				if (emsg == NULL) {
 					emsg = g_strdup ((*it)->name ().c_str ());
 				} else {
@@ -964,8 +964,8 @@ zypp_perform_execution (PkBackend *backend, PerformType type, gboolean force)
 				}
 			}
 
-			zypp::ZYppCommitResult::PoolItemList remaining = result._remaining;
-			for (zypp::ZYppCommitResult::PoolItemList::iterator it = remaining.begin (); it != remaining.end (); it++){
+			ZYppCommitResult::PoolItemList remaining = result._remaining;
+			for (ZYppCommitResult::PoolItemList::iterator it = remaining.begin (); it != remaining.end (); it++){
 				if (emsg == NULL) {
 					emsg = g_strdup ((*it)->name ().c_str ());
 				} else {
@@ -975,8 +975,8 @@ zypp_perform_execution (PkBackend *backend, PerformType type, gboolean force)
 				}
 			}
 
-			zypp::ZYppCommitResult::PoolItemList srcremaining = result._srcremaining;
-			for (zypp::ZYppCommitResult::PoolItemList::iterator it = srcremaining.begin (); it != srcremaining.end (); it++){
+			ZYppCommitResult::PoolItemList srcremaining = result._srcremaining;
+			for (ZYppCommitResult::PoolItemList::iterator it = srcremaining.begin (); it != srcremaining.end (); it++){
 				if (emsg == NULL) {
 					emsg = g_strdup ((*it)->name ().c_str ());
 				} else {
@@ -995,33 +995,33 @@ zypp_perform_execution (PkBackend *backend, PerformType type, gboolean force)
                 }
 
 		ret = TRUE;
-        } catch (const zypp::repo::RepoNotFoundException &ex) {
+        } catch (const repo::RepoNotFoundException &ex) {
 		pk_backend_error_code (backend, PK_ERROR_ENUM_REPO_NOT_FOUND, ex.asUserString().c_str() );
-	} catch (const zypp::target::rpm::RpmException &ex) {
+	} catch (const target::rpm::RpmException &ex) {
 		pk_backend_error_code (backend, PK_ERROR_ENUM_PACKAGE_DOWNLOAD_FAILED, ex.asUserString().c_str () );
-	} catch (const zypp::Exception &ex) {
+	} catch (const Exception &ex) {
 		pk_backend_error_code (backend, PK_ERROR_ENUM_INTERNAL_ERROR, ex.asUserString().c_str() );
 	}
 
  exit:
 	/* reset the various options */
         try {
-                zypp::ZYpp::Ptr zypp = get_zypp (backend);
+                ZYpp::Ptr zypp = get_zypp (backend);
 		zypp->resolver ()->setForceResolve (FALSE);
 		if (type == UPDATE)
 			zypp->resolver ()->setIgnoreAlreadyRecommended (FALSE);
-	} catch (const zypp::Exception &ex) { /* we tried */ }
+	} catch (const Exception &ex) { /* we tried */ }
 
         return ret;
 }
 
 gchar **
-zypp_convert_set_char (std::set<zypp::sat::Solvable> *set)
+zypp_convert_set_char (set<sat::Solvable> &solvables)
 {
-        gchar **array = new gchar* [set->size ()];
+        gchar **array = new gchar* [solvables.size ()];
         guint i = 0;
 
-        for (std::set<zypp::sat::Solvable>::iterator it = set->begin (); it != set->end (); it++){
+        for (set<sat::Solvable>::iterator it = solvables.begin (); it != solvables.end (); it++){
                 gchar *package_id = zypp_build_package_id_from_resolvable (*it);
                 array[i] = g_strdup(package_id);
                 i++;
@@ -1032,13 +1032,13 @@ zypp_convert_set_char (std::set<zypp::sat::Solvable> *set)
 }
 
 gchar *
-zypp_build_package_id_capabilities (zypp::Capabilities caps)
+zypp_build_package_id_capabilities (Capabilities caps)
 {
 	gchar * package_ids = new gchar ();
 
-	zypp::sat::WhatProvides provs (caps);
+	sat::WhatProvides provs (caps);
 
-	for (zypp::sat::WhatProvides::const_iterator it = provs.begin (); it != provs.end (); it++) {
+	for (sat::WhatProvides::const_iterator it = provs.begin (); it != provs.end (); it++) {
 		gchar *package_id = zypp_build_package_id_from_resolvable (*it);
 		//package_ids = g_strconcat (package_ids, package_id, PK_PACKAGE_IDS_DELIM, (gchar *)NULL);
 		if (strlen (package_ids) == 0) {
@@ -1056,10 +1056,10 @@ gboolean
 zypp_refresh_cache (PkBackend *backend, gboolean force)
 {
 	// This call is needed as it calls initializeTarget which appears to properly setup the keyring
-	zypp::ZYpp::Ptr zypp = get_zypp (backend);
+	ZYpp::Ptr zypp = get_zypp (backend);
         if (zypp == NULL)
 		return  FALSE;
-	zypp::filesystem::Pathname pathname(pk_backend_get_root (backend));
+	filesystem::Pathname pathname(pk_backend_get_root (backend));
 	// This call is needed to refresh system rpmdb status while refresh cache
 	zypp->finishTarget ();
 	zypp->initializeTarget (pathname);
@@ -1067,13 +1067,13 @@ zypp_refresh_cache (PkBackend *backend, gboolean force)
 	pk_backend_set_status (backend, PK_STATUS_ENUM_REFRESH_CACHE);
 	pk_backend_set_percentage (backend, 0);
 
-	zypp::RepoManager manager;
-	std::list <zypp::RepoInfo> repos;
+	RepoManager manager;
+	list <RepoInfo> repos;
 	try
 	{
-		repos = std::list<zypp::RepoInfo>(manager.repoBegin(),manager.repoEnd());
+		repos = list<RepoInfo>(manager.repoBegin(),manager.repoEnd());
 	}
-	catch ( const zypp::Exception &e)
+	catch ( const Exception &e)
 	{
 		// FIXME: make sure this dumps out the right sring.
 		pk_backend_error_code (backend, PK_ERROR_ENUM_REPO_NOT_FOUND, e.asUserString().c_str() );
@@ -1084,8 +1084,8 @@ zypp_refresh_cache (PkBackend *backend, gboolean force)
 	int num_of_repos = repos.size ();
 	gchar *repo_messages = NULL;
 
-	for (std::list <zypp::RepoInfo>::iterator it = repos.begin(); it != repos.end(); it++, i++) {
-		zypp::RepoInfo repo (*it);
+	for (list <RepoInfo>::iterator it = repos.begin(); it != repos.end(); it++, i++) {
+		RepoInfo repo (*it);
 
 		if (!zypp_is_valid_repo (backend, repo))
 			return FALSE;
@@ -1106,7 +1106,7 @@ zypp_refresh_cache (PkBackend *backend, gboolean force)
 			g_free (_repoName);
 			_repoName = g_strdup (repo.alias ().c_str ());
 			zypp_refresh_meta_and_cache (manager, repo, force);
-		} catch (const zypp::Exception &ex) {
+		} catch (const Exception &ex) {
 			if (repo_messages == NULL) {
 				repo_messages = g_strdup_printf ("%s: %s%s", repo.alias ().c_str (), ex.asUserString ().c_str (), "\n");
 			} else {
@@ -1151,7 +1151,7 @@ zypp_backend_finished_error (PkBackend  *backend, PkErrorEnum err_code,
 
 gboolean
 zypp_backend_pool_item_notify (PkBackend  *backend,
-			       const zypp::PoolItem &item,
+			       const PoolItem &item,
 			       gboolean sanity_check)
 {
 	PkInfoEnum status = PK_INFO_ENUM_UNKNOWN;
@@ -1165,7 +1165,7 @@ zypp_backend_pool_item_notify (PkBackend  *backend,
 	} else if (item.status ().isToBeUninstalled ()) {
 		status = PK_INFO_ENUM_REMOVING;
 
-		const std::string &name = item.satSolvable().name();
+		const string &name = item.satSolvable().name();
 		if (name == "glibc" || name == "PackageKit" ||
 		    name == "rpm" || name == "libzypp") {
 			pk_backend_error_code (backend, PK_ERROR_ENUM_CANNOT_REMOVE_SYSTEM_PACKAGE,
@@ -1178,19 +1178,19 @@ zypp_backend_pool_item_notify (PkBackend  *backend,
 	// FIXME: do we need more heavy lifting here cf. zypper's
 	// Summary.cc (readPool) to generate _DOWNGRADING types ?
 	if (status != PK_INFO_ENUM_UNKNOWN) {
-		const std::string &summary = item.resolvable ()->summary ();
+		const string &summary = item.resolvable ()->summary ();
 		zypp_backend_package (backend, status, item.resolvable()->satSolvable(), summary.c_str ());
 	}
 	return TRUE;
 }
 
 gchar *
-zypp_build_package_id_from_resolvable (const zypp::sat::Solvable &resolvable)
+zypp_build_package_id_from_resolvable (const sat::Solvable &resolvable)
 {
 	gchar *package_id;
 	const char *arch;
 
-	if (zypp::isKind<zypp::SrcPackage>(resolvable))
+	if (isKind<SrcPackage>(resolvable))
 		arch = "source";
 	else
 		arch = resolvable.arch ().asString ().c_str ();
@@ -1204,18 +1204,18 @@ zypp_build_package_id_from_resolvable (const zypp::sat::Solvable &resolvable)
 }
 
 gboolean
-zypp_ver_and_arch_equal (const zypp::sat::Solvable &pkg,
+zypp_ver_and_arch_equal (const sat::Solvable &pkg,
 			 const char *name, const char *arch)
 {
-	const std::string &ver = pkg.edition ().asString();
+	const string &ver = pkg.edition ().asString();
 	if (g_strcmp0 (ver.c_str (), name))
 		return FALSE;
 
 	if (arch && !strcmp (arch, "source")) {
-		return zypp::isKind<zypp::SrcPackage>(pkg);
+		return isKind<SrcPackage>(pkg);
 	}
 
-	const zypp::Arch &parch = pkg.arch();
+	const Arch &parch = pkg.arch();
 	if (g_strcmp0 (parch.c_str(), arch))
 		return FALSE;
 
commit f408787d8562089ba283ec251e74bd618ae54267
Author: Duncan Mac-Vicar P <dmacvicar at suse.de>
Date:   Wed Apr 27 12:33:57 2011 +0200

    Use output parameters (references) for containers instead of
    pointers. ZYpp throws exceptions and therefore it is safer to
    have objects allocated on the stack if you are not protecting them
    with a guard or smart pointer.

diff --git a/backends/zypp/pk-backend-zypp.cpp b/backends/zypp/pk-backend-zypp.cpp
index 2b5fa54..aea7731 100644
--- a/backends/zypp/pk-backend-zypp.cpp
+++ b/backends/zypp/pk-backend-zypp.cpp
@@ -497,28 +497,25 @@ backend_get_details_thread (PkBackend *backend)
 	for (uint i = 0; package_ids[i]; i++) {
 		gchar **id_parts = pk_package_id_split (package_ids[i]);
 
-		std::vector<zypp::sat::Solvable> *v;
-		std::vector<zypp::sat::Solvable> *v2;
-		std::vector<zypp::sat::Solvable> *v3;
-		v = zypp_get_packages_by_name (backend, (const gchar *)id_parts[PK_PACKAGE_ID_NAME], zypp::ResKind::package);
-		v2 = zypp_get_packages_by_name (backend, (const gchar *)id_parts[PK_PACKAGE_ID_NAME], zypp::ResKind::patch);
-		v3 = zypp_get_packages_by_name (backend, (const gchar *)id_parts[PK_PACKAGE_ID_NAME], zypp::ResKind::srcpackage);
+		std::vector<zypp::sat::Solvable> v;
+		std::vector<zypp::sat::Solvable> v2;
+		std::vector<zypp::sat::Solvable> v3;
+		zypp_get_packages_by_name (backend, (const gchar *)id_parts[PK_PACKAGE_ID_NAME], zypp::ResKind::package, v);
+		zypp_get_packages_by_name (backend, (const gchar *)id_parts[PK_PACKAGE_ID_NAME], zypp::ResKind::patch, v2);
+		zypp_get_packages_by_name (backend, (const gchar *)id_parts[PK_PACKAGE_ID_NAME], zypp::ResKind::srcpackage, v3);
 
-		v->insert (v->end (), v2->begin (), v2->end ());
-		v->insert (v->end (), v3->begin (), v3->end ());
+		v.insert (v.end (), v2.begin (), v2.end ());
+		v.insert (v.end (), v3.begin (), v3.end ());
 
 		zypp::sat::Solvable package;
-		for (std::vector<zypp::sat::Solvable>::iterator it = v->begin ();
-				it != v->end (); it++) {
+		for (std::vector<zypp::sat::Solvable>::iterator it = v.begin ();
+				it != v.end (); it++) {
 			if (zypp_ver_and_arch_equal (*it, id_parts[PK_PACKAGE_ID_VERSION],
 						     id_parts[PK_PACKAGE_ID_ARCH])) {
 				package = *it;
 				break;
 			}
 		}
-		delete (v);
-		delete (v2);
-		delete (v3);
 		g_strfreev (id_parts);
 
 		if (package == NULL) {
@@ -712,11 +709,12 @@ backend_get_updates_thread (PkBackend *backend)
 	// check if the repositories may be dead (feature #301904)
 	warn_outdated_repos (backend, pool);
 
-	std::set<zypp::PoolItem> *candidates = zypp_get_updates (backend);
+	std::set<zypp::PoolItem> candidates;
+	zypp_get_updates (backend, candidates);
 
 	pk_backend_set_percentage (backend, 80);
 
-	pi_it_t cb = candidates->begin (), ce = candidates->end (), ci;
+	pi_it_t cb = candidates.begin (), ce = candidates.end (), ci;
 	for (ci = cb; ci != ce; ++ci) {
 		zypp::ResObject::constPtr res = ci->resolvable();
 
@@ -746,7 +744,6 @@ backend_get_updates_thread (PkBackend *backend)
 					      res->summary ().c_str ());
 		}
 	}
-	delete (candidates);
 
 	pk_backend_set_percentage (backend, 100);
 	pk_backend_finished (backend);
@@ -841,13 +838,13 @@ backend_install_files_thread (PkBackend *backend)
 		zypp::target::rpm::RpmHeader::constPtr rpmHeader = zypp::target::rpm::RpmHeader::readPackage (rpmPath, zypp::target::rpm::RpmHeader::NOSIGNATURE);
 
 		// look for the packages and set them to toBeInstalled
-		std::vector<zypp::sat::Solvable> *solvables = 0;
-		solvables = zypp_get_packages_by_name (backend, rpmHeader->tag_name ().c_str (), zypp::ResKind::package, TRUE);
+		std::vector<zypp::sat::Solvable> solvables;
+		zypp_get_packages_by_name (backend, rpmHeader->tag_name ().c_str (), zypp::ResKind::package, solvables, TRUE);
 		zypp::PoolItem *item = NULL;
 
 		gboolean found = FALSE;
 
-		for (std::vector<zypp::sat::Solvable>::iterator it = solvables->begin (); it != solvables->end (); it ++) {
+		for (std::vector<zypp::sat::Solvable>::iterator it = solvables.begin (); it != solvables.end (); it ++) {
 		       if (it->repository ().alias () == "PK_TMP_DIR") {
 			       item = new zypp::PoolItem(*it);
 			       found = TRUE;
@@ -867,7 +864,6 @@ backend_install_files_thread (PkBackend *backend)
 		}
 
 		item->statusReset ();
-		delete (solvables);
 		delete (item);
 	}
 
@@ -1017,13 +1013,14 @@ backend_update_system_thread (PkBackend *backend)
 	pk_backend_set_percentage (backend, 40);
 	PkRestartEnum restart = PK_RESTART_ENUM_NONE;
 
-	std::set<zypp::PoolItem> *candidates = zypp_get_updates (backend);
+	std::set<zypp::PoolItem> candidates;
+	zypp_get_updates (backend, candidates);
 
 	if (_updating_self)
 		_updating_self = FALSE;
 
 	pk_backend_set_percentage (backend, 80);
-	std::set<zypp::PoolItem>::iterator cb = candidates->begin (), ce = candidates->end (), ci;
+	std::set<zypp::PoolItem>::iterator cb = candidates.begin (), ce = candidates.end (), ci;
 	for (ci = cb; ci != ce; ++ci) {
 		// set the status of the update to ToBeInstalled
 		zypp::ResStatus &status = ci->status ();
@@ -1042,7 +1039,6 @@ backend_update_system_thread (PkBackend *backend)
 	if (restart != PK_RESTART_ENUM_NONE)
 		pk_backend_require_restart (backend, restart, "A restart is needed");
 
-	delete (candidates);
 	pk_backend_set_percentage (backend, 100);
 	pk_backend_finished (backend);
 	return TRUE;
@@ -1327,30 +1323,28 @@ backend_resolve_thread (PkBackend *backend)
 	pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
 
 	for (uint i = 0; package_ids[i]; i++) {
-		std::vector<zypp::sat::Solvable> *v;
+		std::vector<zypp::sat::Solvable> v;
 
 		/* build a list of packages with this name */
-		v = zypp_get_packages_by_name (backend, package_ids[i], zypp::ResKind::package);
+		zypp_get_packages_by_name (backend, package_ids[i], zypp::ResKind::package, v);
 
 		/* add source packages */
 		if (!pk_bitfield_contain (_filters, PK_FILTER_ENUM_NOT_SOURCE)) {
-			std::vector<zypp::sat::Solvable> *src;
-			src = zypp_get_packages_by_name (backend, package_ids[i], zypp::ResKind::srcpackage);
-			v->insert (v->end (), src->begin (), src->end ());
-			delete (src);
+			std::vector<zypp::sat::Solvable> src;
+			zypp_get_packages_by_name (backend, package_ids[i], zypp::ResKind::srcpackage, src);
+			v.insert (v.end (), src.begin (), src.end ());
 		}
 
 		/* include patches too */
-		std::vector<zypp::sat::Solvable> *v2;
-		v2 = zypp_get_packages_by_name (backend, package_ids[i], zypp::ResKind::patch);
-		v->insert (v->end (), v2->begin (), v2->end ());
-		delete (v2);
+		std::vector<zypp::sat::Solvable> v2;
+		zypp_get_packages_by_name (backend, package_ids[i], zypp::ResKind::patch, v2);
+		v.insert (v.end (), v2.begin (), v2.end ());
 
 		zypp::sat::Solvable newest;
 		std::vector<zypp::sat::Solvable> pkgs;
 
 		/* Filter the list of packages with this name to 'pkgs' */
-		for (std::vector<zypp::sat::Solvable>::iterator it = v->begin (); it != v->end (); it++) {
+		for (std::vector<zypp::sat::Solvable>::iterator it = v.begin (); it != v.end (); it++) {
 
 			if (zypp_filter_solvable (_filters, *it) ||
 			    *it == zypp::sat::Solvable::noSolvable)
@@ -1363,7 +1357,6 @@ backend_resolve_thread (PkBackend *backend)
 			}
 			pkgs.push_back (*it);
 		}
-		delete (v);
 
 		/* 'newest' filter support */
 		if (pk_bitfield_contain (_filters, PK_FILTER_ENUM_NEWEST)) {
@@ -1668,16 +1661,16 @@ backend_get_files_thread (PkBackend *backend)
 		gchar **id_parts = pk_package_id_split (package_ids[i]);
 		pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
 
-		std::vector<zypp::sat::Solvable> *v;
-		std::vector<zypp::sat::Solvable> *v2;
-		v = zypp_get_packages_by_name (backend, (const gchar *)id_parts[PK_PACKAGE_ID_NAME], zypp::ResKind::package);
-		v2 = zypp_get_packages_by_name (backend, (const gchar *)id_parts[PK_PACKAGE_ID_NAME], zypp::ResKind::srcpackage);
+		std::vector<zypp::sat::Solvable> v;
+		std::vector<zypp::sat::Solvable> v2;
+		zypp_get_packages_by_name (backend, (const gchar *)id_parts[PK_PACKAGE_ID_NAME], zypp::ResKind::package, v);
+		zypp_get_packages_by_name (backend, (const gchar *)id_parts[PK_PACKAGE_ID_NAME], zypp::ResKind::srcpackage, v2);
 
-		v->insert (v->end (), v2->begin (), v2->end ());
+		v.insert (v.end (), v2.begin (), v2.end ());
 
 		zypp::sat::Solvable package;
-		for (std::vector<zypp::sat::Solvable>::iterator it = v->begin ();
-				it != v->end (); it++) {
+		for (std::vector<zypp::sat::Solvable>::iterator it = v.begin ();
+				it != v.end (); it++) {
 			char *version = g_strdup (it->edition ().asString ().c_str ());
 			if (strcmp (id_parts[PK_PACKAGE_ID_VERSION], version) == 0) {
 				g_free (version);
@@ -1686,9 +1679,6 @@ backend_get_files_thread (PkBackend *backend)
 			}
 			g_free (version);
 		}
-
-		delete (v);
-		delete (v2);
 		g_strfreev (id_parts);
 
 		if (package == NULL) {
@@ -2067,7 +2057,7 @@ backend_download_packages_thread (PkBackend *backend)
 {
 	gchar **package_ids;
 	gulong size = 0;
-	
+
 	if (!zypp_refresh_cache (backend, FALSE)) {
 		pk_backend_finished (backend);
 		return FALSE;
@@ -2085,7 +2075,7 @@ backend_download_packages_thread (PkBackend *backend)
 		return zypp_backend_finished_error (
 			backend, PK_ERROR_ENUM_PACKAGE_ID_INVALID, "invalid package id");
 	}
-	
+
 	try
 	{
 		zypp::ResPool pool = zypp_build_pool (backend, FALSE);
@@ -2124,7 +2114,7 @@ backend_download_packages_thread (PkBackend *backend)
 				zypp::repo::SrcPackageProvider pkgProvider(access);
 				pkgProvider.provideSrcPackage(package);
 				tmp_file = solvable.repository().info().packagesPath()+ package->location().filename();
-			
+
 			} else {
 				zypp::Package::constPtr package = zypp::asKind<zypp::Package>(item.resolvable());
 				zypp::repo::PackageProvider pkgProvider(access, package, deltas);
diff --git a/backends/zypp/zypp-utils.cpp b/backends/zypp/zypp-utils.cpp
index 181e6e0..4662898 100644
--- a/backends/zypp/zypp-utils.cpp
+++ b/backends/zypp/zypp-utils.cpp
@@ -184,7 +184,7 @@ zypp_is_valid_repo (PkBackend *backend, zypp::RepoInfo repo)
 		pk_backend_error_code (backend, PK_ERROR_ENUM_REPO_CONFIGURATION_ERROR, "%s: Repository has no or invalid url defined.\n", repo.alias ().c_str ());
 		return FALSE;
 	}
-	
+
 	return TRUE;
 }
 
@@ -347,27 +347,26 @@ get_enum_group (std::string group)
         return PK_GROUP_ENUM_UNKNOWN;
 }
 
-std::vector<zypp::sat::Solvable> *
-zypp_get_packages_by_name (PkBackend *backend, const gchar *package_name,
-			   const zypp::ResKind kind, gboolean include_local)
+void
+zypp_get_packages_by_name (PkBackend *backend,
+			   const gchar *package_name,
+			   const zypp::ResKind kind,
+			   std::vector<zypp::sat::Solvable> &result,
+			   gboolean include_local)
 {
-	std::vector<zypp::sat::Solvable> *v = new std::vector<zypp::sat::Solvable> ();
-
 	zypp::ResPool pool = zypp_build_pool (backend, include_local);
 
         for (zypp::ResPool::byIdent_iterator it = pool.byIdentBegin (kind, package_name);
                         it != pool.byIdentEnd (kind, package_name); it++) {
-                v->push_back (it->satSolvable ());
+                result.push_back (it->satSolvable ());
         }
-
-	return v;
 }
 
-std::vector<zypp::sat::Solvable> *
-zypp_get_packages_by_file (PkBackend *backend, const gchar *search_file)
+void
+zypp_get_packages_by_file (PkBackend *backend,
+			   const gchar *search_file,
+			   std::vector<zypp::sat::Solvable> &ret)
 {
-        std::vector<zypp::sat::Solvable> *v = new std::vector<zypp::sat::Solvable> ();
-
         zypp::ResPool pool = zypp_build_pool (backend, TRUE);
 
         std::string file (search_file);
@@ -378,20 +377,18 @@ zypp_get_packages_by_file (PkBackend *backend, const gchar *search_file)
 	for (it.findByFile (search_file); *it; ++it) {
 		for (zypp::ResPool::byName_iterator it2 = pool.byNameBegin (it->tag_name ()); it2 != pool.byNameEnd (it->tag_name ()); it2++) {
 			if ((*it2)->isSystem ())
-				v->push_back ((*it2)->satSolvable ());
+				ret.push_back ((*it2)->satSolvable ());
 		}
 	}
 
-	if (v->empty ()) {
+	if (ret.empty ()) {
 		zypp::Capability cap (search_file);
 		zypp::sat::WhatProvides prov (cap);
 
 		for(zypp::sat::WhatProvides::const_iterator it = prov.begin (); it != prov.end (); it++) {
-			v->push_back (*it);
+			ret.push_back (*it);
 		}
 	}
-
-	return v;
 }
 
 zypp::sat::Solvable
@@ -403,18 +400,21 @@ zypp_get_package_by_id (PkBackend *backend, const gchar *package_id)
 	}
 
 	gchar **id_parts = pk_package_id_split(package_id);
-	std::vector<zypp::sat::Solvable> *v = zypp_get_packages_by_name (backend, id_parts[PK_PACKAGE_ID_NAME], zypp::ResKind::package);
-	std::vector<zypp::sat::Solvable> *v2 = zypp_get_packages_by_name (backend, id_parts[PK_PACKAGE_ID_NAME], zypp::ResKind::patch);
+	std::vector<zypp::sat::Solvable> v;
+	std::vector<zypp::sat::Solvable> v2;
 
-	v->insert (v->end (), v2->begin (), v2->end ());
+	zypp_get_packages_by_name (backend, id_parts[PK_PACKAGE_ID_NAME], zypp::ResKind::package, v);
+	zypp_get_packages_by_name (backend, id_parts[PK_PACKAGE_ID_NAME], zypp::ResKind::patch, v2);
 
-	if (v == NULL)
+	v.insert (v.end (), v2.begin (), v2.end ());
+
+	if (v.empty())
 		return zypp::sat::Solvable::noSolvable;
 
 	zypp::sat::Solvable package;
 
-	for (std::vector<zypp::sat::Solvable>::iterator it = v->begin ();
-			it != v->end (); it++) {
+	for (std::vector<zypp::sat::Solvable>::iterator it = v.begin ();
+			it != v.end (); it++) {
 		if (zypp_ver_and_arch_equal (*it, id_parts[PK_PACKAGE_ID_VERSION],
 					     id_parts[PK_PACKAGE_ID_ARCH])) {
 			package = *it;
@@ -422,8 +422,6 @@ zypp_get_package_by_id (PkBackend *backend, const gchar *package_id)
 		}
 	}
 
-	delete (v);
-	delete (v2);
 	g_strfreev (id_parts);
 	return package;
 }
@@ -699,10 +697,9 @@ zypp_backend_package (PkBackend *backend, PkInfoEnum info,
  * Returns a set of all packages the could be updated
  * (you're able to exclude a single (normally the 'patch' repo)
  */
-static std::set<zypp::PoolItem> *
-zypp_get_package_updates (std::string repo)
+static void
+zypp_get_package_updates (std::string repo, std::set<zypp::PoolItem> &pks)
 {
-        std::set<zypp::PoolItem> *pks = new std::set<zypp::PoolItem> ();
         zypp::ResPool pool = zypp::ResPool::instance ();
 
         zypp::ResObject::Kind kind = zypp::ResTraits<zypp::Package>::kind;
@@ -716,18 +713,16 @@ zypp_get_package_updates (std::string repo)
 	                zypp::ui::Selectable::constPtr s =
 	                zypp::ui::Selectable::get((*it)->kind(), (*it)->name());
                         if (s->hasInstalledObj())
-                                pks->insert(*it);
+                                pks.insert(*it);
 	        }
-                return pks;
 }
 
 /**
  * Returns a set of all patches the could be installed
  */
-static std::set<zypp::PoolItem> *
-zypp_get_patches (PkBackend *backend)
+static void
+zypp_get_patches (PkBackend *backend, std::set<zypp::PoolItem> &patches)
 {
-        std::set<zypp::PoolItem> *patches = new std::set<zypp::PoolItem> ();
 	_updating_self = FALSE;
 
         zypp::ZYpp::Ptr zypp;
@@ -742,37 +737,33 @@ zypp_get_patches (PkBackend *backend)
 			zypp::Patch::constPtr patch = zypp::asKind<zypp::Patch>((*it)->candidateObj ().resolvable ());
 			if (_updating_self) {
 				if (patch->restartSuggested ())
-					patches->insert ((*it)->candidateObj ());
+					patches.insert ((*it)->candidateObj ());
 			}
 			else
-				patches->insert ((*it)->candidateObj ());
+				patches.insert ((*it)->candidateObj ());
 
 			// check if the patch updates libzypp or packageKit and show only these
 			if (!_updating_self && patch->restartSuggested ()) {
 				_updating_self = TRUE;
-				patches->clear ();
-				patches->insert ((*it)->candidateObj ());
+				patches.clear ();
+				patches.insert ((*it)->candidateObj ());
 			}
 		}
 
         }
-
-        return patches;
-
 }
 
-std::set<zypp::PoolItem> *
-zypp_get_updates (PkBackend *backend)
+void
+zypp_get_updates (PkBackend *backend, std::set<zypp::PoolItem> &candidates)
 {
 	typedef std::set<zypp::PoolItem>::iterator pi_it_t;
-
-	std::set<zypp::PoolItem> *candidates = zypp_get_patches (backend);
+	zypp_get_patches (backend, candidates);
 
 	if (!_updating_self) {
 		// exclude the patch-repository
 		std::string patchRepo;
-		if (!candidates->empty ()) {
-			patchRepo = candidates->begin ()->resolvable ()->repoInfo ().alias ();
+		if (!candidates.empty ()) {
+			patchRepo = candidates.begin ()->resolvable ()->repoInfo ().alias ();
 		}
 
 		bool hidePackages = false;
@@ -792,9 +783,10 @@ zypp_get_updates (PkBackend *backend)
 
 		if (!hidePackages)
 		{
-			std::set<zypp::PoolItem> *packages;
-			packages = zypp_get_package_updates (patchRepo);
-			pi_it_t cb = candidates->begin (), ce = candidates->end (), ci;
+			std::set<zypp::PoolItem> packages;
+			zypp_get_package_updates(patchRepo, packages);
+
+			pi_it_t cb = candidates.begin (), ce = candidates.end (), ci;
 			for (ci = cb; ci != ce; ++ci) {
 				if (!zypp::isKind<zypp::Patch>(ci->resolvable()))
 				continue;
@@ -806,13 +798,13 @@ zypp_get_updates (PkBackend *backend)
 				zypp::Patch::Contents content(patch->contents());
 				for (pki = content.begin(); pki != content.end(); ++pki) {
 
-					pi_it_t pb = packages->begin (), pe = packages->end (), pi;
+					pi_it_t pb = packages.begin (), pe = packages.end (), pi;
 					for (pi = pb; pi != pe; ++pi) {
 						if (pi->satSolvable() == zypp::sat::Solvable::noSolvable)
 							continue;
 
 						if (pi->satSolvable().identical (*pki)) {
-							packages->erase (pi);
+							packages.erase (pi);
 							break;
 						}
 					}
@@ -820,11 +812,9 @@ zypp_get_updates (PkBackend *backend)
 			}
 
 			// merge into the list
-			candidates->insert (packages->begin (), packages->end ());
-			delete (packages);
+			candidates.insert (packages.begin (), packages.end ());
 		}
 	}
-	return candidates;
 }
 
 void
diff --git a/backends/zypp/zypp-utils.h b/backends/zypp/zypp-utils.h
index 586139e..bb5a846 100644
--- a/backends/zypp/zypp-utils.h
+++ b/backends/zypp/zypp-utils.h
@@ -117,13 +117,14 @@ PkGroupEnum get_enum_group (std::string group);
 /**
  * Returns a list of packages that match the specified package_name.
  */
-std::vector<zypp::sat::Solvable> * zypp_get_packages_by_name (PkBackend *backend, const gchar *package_name,
-							      const zypp::ResKind kind, gboolean include_local = TRUE);
+void zypp_get_packages_by_name (PkBackend *backend, const gchar *package_name,
+				const zypp::ResKind kind, std::vector<zypp::sat::Solvable> &result,
+				gboolean include_local = TRUE);
 
 /**
  * Returns a list of packages that owns the specified file.
  */
-std::vector<zypp::sat::Solvable> * zypp_get_packages_by_file (PkBackend *backend, const gchar *search_file);
+void zypp_get_packages_by_file (PkBackend *backend, const gchar *search_file, std::vector<zypp::sat::Solvable> &result);
 
 /**
  * Returns the Resolvable for the specified package_id.
@@ -167,7 +168,7 @@ zypp::PoolItem zypp_find_arch_update_item (const zypp::ResPool & pool, zypp::Poo
   * we can find. Also manages _updating_self to prioritise critical infrastructure
   * updates.
   */
-std::set<zypp::PoolItem> * zypp_get_updates (PkBackend *backend);
+void zypp_get_updates (PkBackend *backend, std::set<zypp::PoolItem> &);
 
 /**
   * Sets the restart flag of a patch
commit f524ce6a59fb3c01da726b57194ab7dc5e1987e4
Author: Duncan Mac-Vicar P <dmacvicar at suse.de>
Date:   Wed Apr 27 10:41:30 2011 +0200

    Patch::Content is returned by value, so we should not iterate
    using two different copies. Fixes crash on get-updates (bnc#685831)

diff --git a/backends/zypp/zypp-utils.cpp b/backends/zypp/zypp-utils.cpp
index ab42846..181e6e0 100644
--- a/backends/zypp/zypp-utils.cpp
+++ b/backends/zypp/zypp-utils.cpp
@@ -803,7 +803,8 @@ zypp_get_updates (PkBackend *backend)
 
 				// Remove contained packages from list of packages to add
 				zypp::sat::SolvableSet::const_iterator pki;
-				for (pki = patch->contents().begin(); pki != patch->contents().end(); pki++) {
+				zypp::Patch::Contents content(patch->contents());
+				for (pki = content.begin(); pki != content.end(); ++pki) {
 
 					pi_it_t pb = packages->begin (), pe = packages->end (), pi;
 					for (pi = pb; pi != pe; ++pi) {
commit d9c5a352b9e7cc013c37608828e43392bb0c1676
Author: Jesse Zhang <zh.jesse at gmail.com>
Date:   Sat Apr 23 14:02:50 2011 +0800

    conary: fix call of deleted method in conaryCallback
    
    PackageKitConaryBackend no longer has get_package_id.
    
    And some other trivial fixes.

diff --git a/backends/conary/conaryBackend.py b/backends/conary/conaryBackend.py
index ec8e79b..093475e 100755
--- a/backends/conary/conaryBackend.py
+++ b/backends/conary/conaryBackend.py
@@ -22,8 +22,9 @@
 
 import sys
 
-from conary import conaryclient, errors, trove
-from conary.lib import util
+from conary.conaryclient import DepResolutionFailure
+from conary.errors import InternalConaryError
+from conary.trove import TroveIntegrityError
 
 from packagekit.backend import get_package_id, split_package_id, \
     PackageKitBaseBackend
@@ -39,10 +40,10 @@ from conaryCallback import UpdateCallback, GetUpdateCallback
 from conaryCallback import RemoveCallback, UpdateSystemCallback
 from conaryFilter import ConaryFilter
 from XMLCache import XMLCache
-from pkConaryLog import log
 import conarypk
 
-sys.excepthook = util.genExcepthook()
+# To use the logger, uncomment this line:
+# from pkConaryLog import log
 
 def ConaryExceptionHandler(func):
     '''Centralized handler for conary Exceptions
@@ -52,17 +53,17 @@ def ConaryExceptionHandler(func):
     def wrapper(self, *args, **kwargs):
         try:
             return func(self, *args, **kwargs)
-        except conaryclient.DepResolutionFailure as e:
+        except DepResolutionFailure as e:
             deps = [str(i[0][0]).split(":")[0] for i in e.cannotResolve]
             self.error(ERROR_DEP_RESOLUTION_FAILED, ", ".join(set(deps)))
-        except errors.InternalConaryError as e:
+        except InternalConaryError as e:
             if str(e) == "Stale update job":
                 self.conary.clear_job_cache()
                 # The UpdateJob can be invalid. It's probably because after the
                 # update job is fozen, the state of the database has changed.
                 self.error(ERROR_NO_CACHE,
                         "The previously cached update job is broken. Please try again.")
-        except trove.TroveIntegrityError:
+        except TroveIntegrityError:
             self.error(ERROR_NO_PACKAGES_TO_UPDATE, "Network error. Try again")
     return wrapper
 
@@ -122,10 +123,8 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
     def _get_package_name_from_ids(self, package_ids):
         return [split_package_id(x)[0] for x in package_ids]
 
-    def _format_package_summary(self, name, metadata):
-        data = ""
-        if "shortDesc" in metadata:
-            data = metadata['shortDesc'].decode("UTF")
+    def _format_package_summary(self, name, short_desc):
+        data = short_desc
         if data == "." or data == "":
             data = name.replace("-",' ').capitalize()
         return data
@@ -273,7 +272,9 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
             arch = conarypk.get_arch(f)
 
             pkg_id = get_package_id(name, version, arch, label)
-            summary = self._format_package_summary(name, pkg["metadata"])
+
+            summary = self._format_package_summary(name,
+                    pkg["metadata"].get("shortDesc", "").decode("UTF"))
             self.package(pkg_id, status, summary)
 
     def search_group(self, options, searchlist):
@@ -345,7 +346,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
             arch = conarypk.get_arch(f)
             label = str(v.trailingLabel())
             pkg_id = get_package_id(name, version, arch, label)
-            summary = ''
+            summary = self._format_package_summary(name, "")
             self.package(pkg_id, status, summary)
 
     def _display_update_jobs(self, install_jobs, erase_jobs, update_jobs):
diff --git a/backends/conary/conaryCallback.py b/backends/conary/conaryCallback.py
index e4983b9..a1aa25e 100644
--- a/backends/conary/conaryCallback.py
+++ b/backends/conary/conaryCallback.py
@@ -17,10 +17,17 @@
 #
 # Copyright (C) 2007 Elliot Peele <elliot at bentlogic.net>
 # Copyright (C) 2008 Richard Hughes <richard at hughsie.com>
+
 from conary import callbacks
-from packagekit.backend import *
+
+from packagekit.backend import get_package_id
+from packagekit.enums import (INFO_INSTALLING, INFO_REMOVING, INFO_UPDATING,
+        STATUS_COMMIT, STATUS_DEP_RESOLVE, STATUS_DOWNLOAD, STATUS_INSTALL,
+        STATUS_REMOVE, STATUS_REQUEST, STATUS_UPDATE)
+
 from conaryProgress import PackagekitProgress
 from pkConaryLog import log
+import conarypk
 
 MEGA = 1048576.0
 
@@ -92,27 +99,33 @@ class BasePKConaryCallback(callbacks.UpdateCallback):
         # Don't do anything unless we actually rollback
         pass
 
-    def preparingUpdate(self, troveNum, troveCount, add=0):
+    def preparingUpdate(self, troveNum, troveCount):
+
+        def _get_package_id(name, v, f):
+            version = str(v.trailingRevision())
+            label = str(v.trailingLabel())
+            arch = conarypk.get_arch(f)
+            package_id = get_package_id(name, version, arch, label)
+            return package_id
+
         if not self.currentJob or len(self.currentJob) == 0 or troveNum > troveCount:
             return
 
         self.backend.percentage(self.progress.percent)
         job = self.currentJob[troveNum-1]
-        name = job[0]
-        oldVersion, oldFlavor = job[1]
-        newVersion, newFlavor = job[2]
+        name, (oldVersion, oldFlavor), (newVersion, newFlavor) = job[:3]
         if oldVersion and newVersion:
-            package_id = self.backend.get_package_id(name, newVersion, newFlavor)
+            package_id = _get_package_id(name, newVersion, newFlavor)
             log.info("Preparing Update %d out of %d: %s" % (troveNum, troveCount, package_id))
             self.backend.status(STATUS_UPDATE)
             self.backend.package(package_id, INFO_UPDATING, '')
         elif oldVersion and not newVersion:
-            package_id = self.backend.get_package_id(name, oldVersion, oldFlavor)
+            package_id = _get_package_id(name, oldVersion, oldFlavor)
             log.info("Preparing Remove %d out of %d: %s" % (troveNum, troveCount, package_id))
             self.backend.status(STATUS_REMOVE)
             self.backend.package(package_id, INFO_REMOVING, '')
         elif not oldVersion and newVersion:
-            package_id = self.backend.get_package_id(name, newVersion, newFlavor)
+            package_id = _get_package_id(name, newVersion, newFlavor)
             log.info("Preparing Install %d out of %d: %s" % (troveNum, troveCount, package_id))
             self.backend.status(STATUS_INSTALL)
             self.backend.package(package_id, INFO_INSTALLING, '')
diff --git a/backends/conary/conarypk.py b/backends/conary/conarypk.py
index 7a23a5b..eb5a21d 100644
--- a/backends/conary/conarypk.py
+++ b/backends/conary/conarypk.py
@@ -18,7 +18,8 @@ from conary.deps import deps
 from conary.lib import sha1helper
 from conary.lib import util
 
-from pkConaryLog import log
+# To use the logger, uncomment this line:
+# from pkConaryLog import log
 
 def get_arch(flavor):
     '''Turn a Flavor into a string describing the arch
commit 7247193b2f90bdf918314d99977c107ecb2cb96a
Author: Richard Hughes <richard at hughsie.com>
Date:   Tue Apr 26 11:42:04 2011 +0100

    Do not abort in pk_catalog_init() if PackageKit is not available. Fixes rh#688280

diff --git a/lib/packagekit-glib2/pk-catalog.c b/lib/packagekit-glib2/pk-catalog.c
index 24eb09a..f5941c4 100644
--- a/lib/packagekit-glib2/pk-catalog.c
+++ b/lib/packagekit-glib2/pk-catalog.c
@@ -615,7 +615,7 @@ pk_catalog_init (PkCatalog *catalog)
 	control = pk_control_new ();
 	ret = pk_control_get_properties (control, NULL, &error);
 	if (!ret) {
-		g_error ("Failed to contact PackageKit: %s", error->message);
+		g_warning ("Failed to contact PackageKit: %s", error->message);
 		g_error_free (error);
 		return;
 	}
commit ff50fbc35f2d912535cf2e78831134c1ddfed20d
Author: ElleUca <elle.uca at libero.it>
Date:   Tue Apr 26 10:19:11 2011 +0100

    Added Italian translation
    
    Signed-off-by: Richard Hughes <richard at hughsie.com>

diff --git a/po/it_IT.po b/po/it_IT.po
new file mode 100644
index 0000000..7a936ad
--- /dev/null
+++ b/po/it_IT.po
@@ -0,0 +1,2105 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL at ADDRESS>, YEAR.
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: PackageKit\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-12-13 12:23+0000\n"
+"PO-Revision-Date: 2011-03-04 18:34+0000\n"
+"Last-Translator: ElleUca <elle.uca at libero.it>\n"
+"Language-Team: LANGUAGE <LL at li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: it_IT\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#. TRANSLATORS: this is an atomic transaction
+#. TRANSLATORS: the role is the point of the transaction, e.g. update-system
+#: ../client/pk-console.c:174 ../client/pk-console.c:596
+msgid "Transaction"
+msgstr "Transazione"
+
+#. TRANSLATORS: this is the time the transaction was started in system
+#. timezone
+#: ../client/pk-console.c:176
+msgid "System time"
+msgstr "Ora di sistema"
+
+#. TRANSLATORS: this is if the transaction succeeded or not
+#: ../client/pk-console.c:178
+msgid "Succeeded"
+msgstr "Riuscito"
+
+#: ../client/pk-console.c:178
+msgid "True"
+msgstr "Vero"
+
+#: ../client/pk-console.c:178
+msgid "False"
+msgstr "Falso"
+
+#. TRANSLATORS: this is the transactions role, e.g. "update-system"
+#. TRANSLATORS: the trasaction role, e.g. update-system
+#: ../client/pk-console.c:180 ../src/pk-polkit-action-lookup.c:332
+msgid "Role"
+msgstr "Ruolo"
+
+#. TRANSLATORS: this is The duration of the transaction
+#: ../client/pk-console.c:185
+msgid "Duration"
+msgstr "Durata"
+
+#: ../client/pk-console.c:185
+msgid "(seconds)"
+msgstr "(secondi)"
+
+#. TRANSLATORS: this is The command line used to do the action
+#. TRANSLATORS: the command line of the thing that wants the authentication
+#: ../client/pk-console.c:189 ../src/pk-polkit-action-lookup.c:346
+msgid "Command line"
+msgstr "Riga di comando"
+
+#. TRANSLATORS: this is the user ID of the user that started the action
+#: ../client/pk-console.c:191
+msgid "User ID"
+msgstr "ID utente"
+
+#. TRANSLATORS: this is the username, e.g. hughsie
+#: ../client/pk-console.c:198
+msgid "Username"
+msgstr "Nome utente"
+
+#. TRANSLATORS: this is the users real name, e.g. "Richard Hughes"
+#: ../client/pk-console.c:202
+msgid "Real name"
+msgstr "Nome reale"
+
+#: ../client/pk-console.c:210
+msgid "Affected packages:"
+msgstr "Pacchetti interessati:"
+
+#: ../client/pk-console.c:212
+msgid "Affected packages: None"
+msgstr "Pacchetti interessati: nessuno"
+
+#. TRANSLATORS: this is the distro, e.g. Fedora 10
+#: ../client/pk-console.c:247
+msgid "Distribution"
+msgstr "Distribuzione"
+
+#. TRANSLATORS: this is type of update, stable or testing
+#: ../client/pk-console.c:249
+msgid "Type"
+msgstr "Tipo"
+
+#. TRANSLATORS: this is any summary text describing the upgrade
+#. TRANSLATORS: this is the summary of the group
+#: ../client/pk-console.c:251 ../client/pk-console.c:290
+msgid "Summary"
+msgstr "Sommario"
+
+#. TRANSLATORS: this is the group category name
+#: ../client/pk-console.c:279
+msgid "Category"
+msgstr "Categoria"
+
+#. TRANSLATORS: this is group identifier
+#: ../client/pk-console.c:281
+msgid "ID"
+msgstr "ID"
+
+#. TRANSLATORS: this is the parent group
+#: ../client/pk-console.c:284
+msgid "Parent"
+msgstr "Genitore"
+
+#. TRANSLATORS: this is the name of the parent group
+#: ../client/pk-console.c:287
+msgid "Name"
+msgstr "Nome"
+
+#. TRANSLATORS: this is preferred icon for the group
+#: ../client/pk-console.c:293
+msgid "Icon"
+msgstr "Icona"
+
+#. TRANSLATORS: this is a header for the package that can be updated
+#: ../client/pk-console.c:339
+msgid "Details about the update:"
+msgstr "Dettagli sull'aggiornamento:"
+
+#. TRANSLATORS: details about the update, package name and version
+#. TRANSLATORS: the package that is being processed
+#. TRANSLATORS: the package that is not signed by a known key
+#. TRANSLATORS: the package name that was trying to be installed
+#. TRANSLATORS: title, the names of the packages that the method is processing
+#: ../client/pk-console.c:345 ../client/pk-console.c:615
+#: ../lib/packagekit-glib2/pk-task-text.c:124
+#: ../lib/packagekit-glib2/pk-task-text.c:206
+#: ../src/pk-polkit-action-lookup.c:357
+msgid "Package"
+msgid_plural "Packages"
+msgstr[0] "Pacchetto"
+msgstr[1] "Pacchetti"
+
+#. TRANSLATORS: details about the update, any packages that this update
+#. updates
+#: ../client/pk-console.c:348
+msgid "Updates"
+msgstr "Aggiornamenti"
+
+#. TRANSLATORS: details about the update, any packages that this update
+#. obsoletes
+#: ../client/pk-console.c:352
+msgid "Obsoletes"
+msgstr "Obsoleti"
+
+#. TRANSLATORS: details about the update, the vendor URLs
+#. TRANSLATORS: the vendor (e.g. vmware) that is providing the EULA
+#: ../client/pk-console.c:356 ../lib/packagekit-glib2/pk-task-text.c:209
+msgid "Vendor"
+msgstr "Vendor"
+
+#. TRANSLATORS: details about the update, the bugzilla URLs
+#: ../client/pk-console.c:360
+msgid "Bugzilla"
+msgstr "Bugzilla"
+
+#. TRANSLATORS: details about the update, the CVE URLs
+#: ../client/pk-console.c:364
+msgid "CVE"
+msgstr "CVE"
+
+#. TRANSLATORS: details about the update, if the package requires a restart
+#: ../client/pk-console.c:368
+msgid "Restart"
+msgstr "Riavvia"
+
+#. TRANSLATORS: details about the update, any description of the update
+#: ../client/pk-console.c:372
+msgid "Update text"
+msgstr "Testo dell'aggiornamento"
+
+#. TRANSLATORS: details about the update, the changelog for the package
+#: ../client/pk-console.c:376
+msgid "Changes"
+msgstr "Cambiamenti"
+
+#. TRANSLATORS: details about the update, the ongoing state of the update
+#: ../client/pk-console.c:380
+msgid "State"
+msgstr "Stato"
+
+#. TRANSLATORS: details about the update, date the update was issued
+#: ../client/pk-console.c:384
+msgid "Issued"
+msgstr ""
+
+#. TRANSLATORS: details about the update, date the update was updated
+#. TRANSLATORS: The action of the package, in past tense
+#: ../client/pk-console.c:388 ../lib/packagekit-glib2/pk-console-shared.c:515
+msgid "Updated"
+msgstr "Aggiornato"
+
+#. TRANSLATORS: if the repo is enabled
+#: ../client/pk-console.c:424
+msgid "Enabled"
+msgstr "Abilitato"
+
+#. TRANSLATORS: if the repo is disabled
+#: ../client/pk-console.c:427
+msgid "Disabled"
+msgstr "Disabilitato"
+
+#. TRANSLATORS: a package requires the system to be restarted
+#: ../client/pk-console.c:459
+msgid "System restart required by:"
+msgstr "Riavvio del sistema richiesto da:"
+
+#. TRANSLATORS: a package requires the session to be restarted
+#: ../client/pk-console.c:462
+msgid "Session restart required:"
+msgstr "Riavvio della sessione richiesto da:"
+
+#. TRANSLATORS: a package requires the system to be restarted due to a
+#. security update
+#: ../client/pk-console.c:465
+msgid "System restart (security) required by:"
+msgstr "Riavvio del sistema (sicurezza) richiesto da:"
+
+#. TRANSLATORS: a package requires the session to be restarted due to a
+#. security update
+#: ../client/pk-console.c:468
+msgid "Session restart (security) required:"
+msgstr "Riavvio della sessione (sicurezza) richiesto da:"
+
+#. TRANSLATORS: a package requires the application to be restarted
+#: ../client/pk-console.c:471
+msgid "Application restart required by:"
+msgstr "Riavvio dell'applicazione richesto da:"
+
+#. TRANSLATORS: This a list of details about the package
+#: ../client/pk-console.c:506
+msgid "Package description"
+msgstr "Descrizione del pacchetto:"
+
+#. TRANSLATORS: This a message (like a little note that may be of interest)
+#. from the transaction
+#: ../client/pk-console.c:537
+msgid "Message:"
+msgstr "Messaggio:"
+
+#. TRANSLATORS: This where the package has no files
+#: ../client/pk-console.c:558
+msgid "No files"
+msgstr "Nessun file"
+
+#. TRANSLATORS: This a list files contained in the package
+#: ../client/pk-console.c:563
+msgid "Package files"
+msgstr "File del pacchetto"
+
+#. TRANSLATORS: the percentage complete of the transaction
+#: ../client/pk-console.c:631
+msgid "Percentage"
+msgstr "Percentuale"
+
+#. TRANSLATORS: the status of the transaction (e.g. downloading)
+#: ../client/pk-console.c:649
+msgid "Status"
+msgstr "Stato"
+
+#. TRANSLATORS: the results from the transaction
+#: ../client/pk-console.c:678
+msgid "Results:"
+msgstr "Risultati:"
+
+#. TRANSLATORS: we failed to get any results, which is pretty fatal in my book
+#: ../client/pk-console.c:685
+msgid "Fatal error"
+msgstr ""
+
+#. TRANSLATORS: the user asked to update everything, but there is nothing that
+#. can be updated
+#: ../client/pk-console.c:701
+msgid "There are no packages to update."
+msgstr "Non c'è alcun pacchetto da aggiornare."
+
+#. TRANSLATORS: the transaction failed in a way we could not expect
+#: ../client/pk-console.c:704
+#: ../contrib/command-not-found/pk-command-not-found.c:639
+msgid "The transaction failed"
+msgstr "La transazione non è riuscita"
+
+#. TRANSLATORS: print a message when there are no updates
+#: ../client/pk-console.c:733
+msgid "There are no updates available at this time."
+msgstr "Al momento non c'è alcun aggiornamento disponibile."
+
+#: ../client/pk-console.c:756
+msgid "There are no upgrades available at this time."
+msgstr "Al momento non c'è alcun avanzamento disponibile."
+
+#. TRANSLATORS: a package needs to restart their system
+#: ../client/pk-console.c:823
+msgid "Please restart the computer to complete the update."
+msgstr "Riavviare il computer per completare l'aggiornamento"
+
+#. TRANSLATORS: a package needs to restart the session
+#: ../client/pk-console.c:826
+msgid "Please logout and login to complete the update."
+msgstr "Terminare la sessione e riaccedere per completare l'aggiornamento."
+
+#. TRANSLATORS: a package needs to restart their system (due to security)
+#: ../client/pk-console.c:829
+msgid ""
+"Please restart the computer to complete the update as important security "
+"updates have been installed."
+msgstr ""
+"Riavviare il computer per completare l'aggiornamento, poiché sono stati "
+"installi importanti aggiornamenti di sicurezza."
+
+#. TRANSLATORS: a package needs to restart the session (due to security)
+#: ../client/pk-console.c:832
+msgid ""
+"Please logout and login to complete the update as important security updates"
+" have been installed."
+msgstr ""
+"Terminare la sessione e riaccedere per completare l'aggiornamento, poiché "
+"sono stati installi importanti aggiornamenti di sicurezza."
+
+#. TRANSLATORS: The user used 'pkcon install dave.rpm' rather than 'pkcon
+#. install-local dave.rpm'
+#: ../client/pk-console.c:858
+#, c-format
+msgid ""
+"Expected package name, actually got file. Try using 'pkcon install-local %s'"
+" instead."
+msgstr ""
+"Atteso un nome di pacchetto, ottenuto un file. Provare ad usare invece "
+"\"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:866
+#, c-format
+msgid "This tool could not find any available package: %s"
+msgstr ""
+"Questo strumento non è riuscito a trovare alcun pacchetto disponibile: %s"
+
+#. TRANSLATORS: There was an error getting the list of files for the package.
+#. The detailed error follows
+#: ../client/pk-console.c:894
+#, c-format
+msgid "This tool could not find the installed package: %s"
+msgstr ""
+
+#. TRANSLATORS: There was an error getting the list of files for the package.
+#. The detailed error follows
+#: ../client/pk-console.c:922 ../client/pk-console.c:950
+#, c-format
+msgid "This tool could not find the package: %s"
+msgstr ""
+
+#. TRANSLATORS: There was an error getting the list of files for the package.
+#. The detailed error follows
+#. TRANSLATORS: There was an error getting the dependencies for the package.
+#. The detailed error follows
+#. TRANSLATORS: There was an error getting the details about the package. The
+#. detailed error follows
+#. TRANSLATORS: The package name was not found in any software sources. The
+#. detailed error follows
+#: ../client/pk-console.c:978 ../client/pk-console.c:1006
+#: ../client/pk-console.c:1034 ../client/pk-console.c:1062
+#: ../client/pk-console.c:1090
+#, c-format
+msgid "This tool could not find all the packages: %s"
+msgstr ""
+
+#. TRANSLATORS: This is when the daemon crashed, and we are up shit creek
+#. without a paddle
+#: ../client/pk-console.c:1119
+msgid "The daemon crashed mid-transaction!"
+msgstr ""
+
+#. TRANSLATORS: This is the header to the --help menu
+#: ../client/pk-console.c:1153
+msgid "PackageKit Console Interface"
+msgstr ""
+
+#. these are commands we can use with pkcon
+#: ../client/pk-console.c:1155
+msgid "Subcommands:"
+msgstr ""
+
+#. TRANSLATORS: we keep a database updated with the time that an action was
+#. last executed
+#: ../client/pk-console.c:1234
+msgid "Failed to get the time since this action was last completed"
+msgstr ""
+
+#. TRANSLATORS: command line argument, just show the version string
+#: ../client/pk-console.c:1275 ../client/pk-monitor.c:371
+msgid "Show the program version and exit"
+msgstr ""
+
+#. TRANSLATORS: command line argument, use a filter to narrow down results
+#: ../client/pk-console.c:1278
+msgid "Set the filter, e.g. installed"
+msgstr ""
+
+#. TRANSLATORS: command line argument, use a non-standard install prefix
+#: ../client/pk-console.c:1281
+msgid "Set the install root, e.g. '/' or '/mnt/ltsp'"
+msgstr ""
+
+#. TRANSLATORS: command line argument, work asynchronously
+#: ../client/pk-console.c:1284
+msgid "Exit without waiting for actions to complete"
+msgstr ""
+
+#. command line argument, do we ask questions
+#: ../client/pk-console.c:1287
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:525
+msgid "Install the packages without asking for confirmation"
+msgstr ""
+
+#. TRANSLATORS: command line argument, this command is not a priority
+#: ../client/pk-console.c:1290
+msgid "Run the command using idle network bandwidth and also using less power"
+msgstr ""
+
+#. TRANSLATORS: command line argument, just output without fancy formatting
+#: ../client/pk-console.c:1293
+msgid ""
+"Print to screen a machine readable output, rather than using animated "
+"widgets"
+msgstr ""
+
+#. TRANSLATORS: command line argument, just output without fancy formatting
+#: ../client/pk-console.c:1296
+msgid "The maximum metadata cache age. Use -1 for 'never'."
+msgstr ""
+
+#. TRANSLATORS: we failed to contact the daemon
+#: ../client/pk-console.c:1333
+msgid "Failed to contact PackageKit"
+msgstr ""
+
+#. TRANSLATORS: The user specified an incorrect filter
+#: ../client/pk-console.c:1381
+msgid "The proxy could not be set"
+msgstr ""
+
+#. TRANSLATORS: The user specified an incorrect filter
+#: ../client/pk-console.c:1393
+msgid "The install root could not be set"
+msgstr ""
+
+#. TRANSLATORS: The user specified an incorrect filter
+#: ../client/pk-console.c:1405
+msgid "The filter specified was invalid"
+msgstr ""
+
+#. TRANSLATORS: a search type can be name, details, file, etc
+#: ../client/pk-console.c:1424
+msgid "A search type is required, e.g. name"
+msgstr ""
+
+#. TRANSLATORS: the user needs to provide a search term
+#: ../client/pk-console.c:1431 ../client/pk-console.c:1443
+#: ../client/pk-console.c:1455 ../client/pk-console.c:1467
+msgid "A search term is required"
+msgstr ""
+
+#. TRANSLATORS: the search type was provided, but invalid
+#: ../client/pk-console.c:1477
+msgid "Invalid search type"
+msgstr ""
+
+#. TRANSLATORS: the user did not specify what they wanted to install
+#: ../client/pk-console.c:1483
+msgid "A package name to install is required"
+msgstr ""
+
+#. TRANSLATORS: the user did not specify what they wanted to install
+#: ../client/pk-console.c:1492
+msgid "A filename to install is required"
+msgstr ""
+
+#. TRANSLATORS: geeky error, 99.9999% of users won't see this
+#: ../client/pk-console.c:1503
+msgid "A type, key_id and package_id are required"
+msgstr ""
+
+#. TRANSLATORS: the user did not specify what they wanted to remove
+#: ../client/pk-console.c:1514
+msgid "A package name to remove is required"
+msgstr ""
+
+#. TRANSLATORS: the user did not specify anything about what to download or
+#. where
+#: ../client/pk-console.c:1523
+msgid "A destination directory and the package names to download are required"
+msgstr ""
+
+#. TRANSLATORS: the directory does not exist, so we can't continue
+#: ../client/pk-console.c:1530
+msgid "Directory not found"
+msgstr ""
+
+#. TRANSLATORS: geeky error, 99.9999% of users won't see this
+#: ../client/pk-console.c:1539
+msgid "A licence identifier (eula-id) is required"
+msgstr ""
+
+#. TRANSLATORS: geeky error, 99.9999% of users won't see this
+#: ../client/pk-console.c:1550
+msgid "A transaction identifier (tid) is required"
+msgstr ""
+
+#. TRANSLATORS: The user did not specify a package name
+#: ../client/pk-console.c:1571
+msgid "A package name to resolve is required"
+msgstr ""
+
+#. TRANSLATORS: The user did not specify a repository (software source) name
+#: ../client/pk-console.c:1582 ../client/pk-console.c:1593
+msgid "A repository name is required"
+msgstr ""
+
+#. TRANSLATORS: The user didn't provide any data
+#: ../client/pk-console.c:1604
+msgid "A repo name, parameter and value are required"
+msgstr ""
+
+#. TRANSLATORS: The user didn't specify what action to use
+#: ../client/pk-console.c:1621
+msgid "An action, e.g. 'update-system' is required"
+msgstr ""
+
+#. TRANSLATORS: The user specified an invalid action
+#: ../client/pk-console.c:1628
+msgid "A correct role is required"
+msgstr ""
+
+#. TRANSLATORS: The user did not provide a package name
+#. TRANSLATORS: This is when the user fails to supply the package name
+#: ../client/pk-console.c:1638 ../client/pk-console.c:1652
+#: ../client/pk-console.c:1661 ../client/pk-console.c:1681
+#: ../client/pk-console.c:1690 ../client/pk-generate-pack.c:314
+msgid "A package name is required"
+msgstr ""
+
+#. TRANSLATORS: each package "provides" certain things, e.g. mime(gstreamer-
+#. decoder-mp3), the user didn't specify it
+#: ../client/pk-console.c:1670
+msgid "A package provide string is required"
+msgstr ""
+
+#. TRANSLATORS: The user did not provide a distro name
+#: ../client/pk-console.c:1714
+msgid "A distribution name is required"
+msgstr ""
+
+#. TRANSLATORS: The user did not provide an upgrade type
+#: ../client/pk-console.c:1720
+msgid "An upgrade type is required, e.g. 'minimal', 'default' or 'complete'"
+msgstr ""
+
+#. TRANSLATORS: The user tried to use an unsupported option on the command
+#. line
+#: ../client/pk-console.c:1770
+#, c-format
+msgid "Option '%s' is not supported"
+msgstr ""
+
+#. TRANSLATORS: Generic failure of what they asked to do
+#: ../client/pk-console.c:1780
+msgid "Command failed"
+msgstr ""
+
+#. TRANSLATORS: we can exclude certain packages (glibc) when we know they'll
+#. exist on the target
+#: ../client/pk-generate-pack.c:253
+msgid "Set the file name of dependencies to be excluded"
+msgstr ""
+
+#. TRANSLATORS: the output location
+#: ../client/pk-generate-pack.c:256
+msgid ""
+"The output file or directory (the current directory is used if omitted)"
+msgstr ""
+
+#. TRANSLATORS: put a list of packages in the pack
+#: ../client/pk-generate-pack.c:259
+msgid "The package to be put into the service pack"
+msgstr ""
+
+#. TRANSLATORS: put all pending updates in the pack
+#: ../client/pk-generate-pack.c:262
+msgid "Put all updates available in the service pack"
+msgstr ""
+
+#. TRANSLATORS: This is when the user fails to supply the correct arguments
+#: ../client/pk-generate-pack.c:298
+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:306
+msgid "Both options selected."
+msgstr ""
+
+#. TRANSLATORS: This is when the user fails to supply the output
+#: ../client/pk-generate-pack.c:322
+msgid "A output directory or file name is required"
+msgstr ""
+
+#. TRANSLATORS: This is when the daemon is not-installed/broken and fails to
+#. startup
+#: ../client/pk-generate-pack.c:340
+msgid "The daemon failed to startup"
+msgstr ""
+
+#. TRANSLATORS: This is when the backend doesn't have the capability to get-
+#. depends
+#. TRANSLATORS: This is when the backend doesn't have the capability to
+#. download
+#: ../client/pk-generate-pack.c:351 ../client/pk-generate-pack.c:357
+msgid "The package manager cannot perform this type of operation."
+msgstr ""
+
+#. TRANSLATORS: This is when the distro didn't include libarchive support into
+#. PK
+#: ../client/pk-generate-pack.c:364
+msgid ""
+"Service packs cannot be created as PackageKit was not built with libarchive "
+"support."
+msgstr ""
+
+#. TRANSLATORS: the user specified an absolute path, but didn't get the
+#. extension correct
+#: ../client/pk-generate-pack.c:375
+msgid "If specifying a file, the service pack name must end with"
+msgstr ""
+
+#. TRANSLATORS: This is when file already exists
+#: ../client/pk-generate-pack.c:391
+msgid "A pack with the same name already exists, do you want to overwrite it?"
+msgstr ""
+
+#. TRANSLATORS: This is when the pack was not overwritten
+#: ../client/pk-generate-pack.c:394
+msgid "The pack was not overwritten."
+msgstr ""
+
+#. TRANSLATORS: This is when the temporary directory cannot be created, the
+#. directory name follows
+#: ../client/pk-generate-pack.c:407
+msgid "Failed to create directory:"
+msgstr ""
+
+#. TRANSLATORS: This is when the list of packages from the remote computer
+#. cannot be opened
+#: ../client/pk-generate-pack.c:419
+msgid "Failed to open package list."
+msgstr ""
+
+#. TRANSLATORS: The package name is being matched up to available packages
+#: ../client/pk-generate-pack.c:428
+msgid "Finding package name."
+msgstr ""
+
+#. TRANSLATORS: This is when the package cannot be found in any software
+#. source. The detailed error follows
+#: ../client/pk-generate-pack.c:432
+#, 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:440
+msgid "Creating service pack..."
+msgstr ""
+
+#. TRANSLATORS: we succeeded in making the file
+#: ../client/pk-generate-pack.c:455
+#, c-format
+msgid "Service pack created '%s'"
+msgstr ""
+
+#. TRANSLATORS: we failed to make te file
+#: ../client/pk-generate-pack.c:460
+#, c-format
+msgid "Failed to create '%s': %s"
+msgstr ""
+
+#: ../client/pk-monitor.c:284
+msgid "Failed to get daemon state"
+msgstr ""
+
+#: ../client/pk-monitor.c:349
+msgid "Failed to get properties"
+msgstr ""
+
+#. TRANSLATORS: this is a program that monitors PackageKit
+#: ../client/pk-monitor.c:387
+msgid "PackageKit Monitor"
+msgstr ""
+
+#. TRANSLATORS: when we are getting data from the daemon
+#: ../contrib/browser-plugin/pk-plugin-install.c:499
+msgid "Getting package information..."
+msgstr ""
+
+#. TRANSLATORS: run an applicaiton
+#: ../contrib/browser-plugin/pk-plugin-install.c:505
+#, c-format
+msgid "Run %s"
+msgstr ""
+
+#. TRANSLATORS: show the installed version of a package
+#: ../contrib/browser-plugin/pk-plugin-install.c:511
+msgid "Installed version"
+msgstr ""
+
+#. TRANSLATORS: run the application now
+#: ../contrib/browser-plugin/pk-plugin-install.c:519
+#, c-format
+msgid "Run version %s now"
+msgstr ""
+
+#. TRANSLATORS: run the application now
+#: ../contrib/browser-plugin/pk-plugin-install.c:525
+msgid "Run now"
+msgstr ""
+
+#. TRANSLATORS: update to a new version of the package
+#: ../contrib/browser-plugin/pk-plugin-install.c:531
+#, c-format
+msgid "Update to version %s"
+msgstr ""
+
+#. TRANSLATORS: To install a package
+#: ../contrib/browser-plugin/pk-plugin-install.c:537
+#, c-format
+msgid "Install %s now"
+msgstr ""
+
+#. TRANSLATORS: the version of the package
+#: ../contrib/browser-plugin/pk-plugin-install.c:540
+msgid "Version"
+msgstr ""
+
+#. TRANSLATORS: noting found, so can't install
+#: ../contrib/browser-plugin/pk-plugin-install.c:545
+msgid "No packages found for your system"
+msgstr ""
+
+#. TRANSLATORS: package is being installed
+#: ../contrib/browser-plugin/pk-plugin-install.c:550
+msgid "Installing..."
+msgstr ""
+
+#. TRANSLATORS: downloading repo data so we can search
+#: ../contrib/command-not-found/pk-command-not-found.c: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: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: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: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:444
+msgid "Failed to search for file"
+msgstr ""
+
+#. TRANSLATORS: the transaction failed in a way we could not expect
+#: ../contrib/command-not-found/pk-command-not-found.c:456
+msgid "Getting the list of files failed"
+msgstr ""
+
+#. TRANSLATORS: we failed to launch the executable, the error follows
+#: ../contrib/command-not-found/pk-command-not-found.c:602
+msgid "Failed to launch:"
+msgstr ""
+
+#. TRANSLATORS: we failed to install the package
+#: ../contrib/command-not-found/pk-command-not-found.c:630
+msgid "Failed to install packages"
+msgstr ""
+
+#. TRANSLATORS: tool that gets called when the command is not found
+#: ../contrib/command-not-found/pk-command-not-found.c:706
+msgid "PackageKit Command Not Found"
+msgstr ""
+
+#. TRANSLATORS: the prefix of all the output telling the user
+#. * why it's not executing. NOTE: this is lowercase to mimic
+#. * the style of bash itself -- apologies
+#: ../contrib/command-not-found/pk-command-not-found.c:739
+msgid "command not found"
+msgstr ""
+
+#. TRANSLATORS: tell the user what we think the command is
+#: ../contrib/command-not-found/pk-command-not-found.c:757
+msgid "Similar command is:"
+msgstr ""
+
+#. TRANSLATORS: Ask the user if we should run the similar command
+#: ../contrib/command-not-found/pk-command-not-found.c:771
+msgid "Run similar command:"
+msgstr ""
+
+#. TRANSLATORS: show the user a list of commands that they could have meant
+#. TRANSLATORS: show the user a list of commands we could run
+#: ../contrib/command-not-found/pk-command-not-found.c:785
+#: ../contrib/command-not-found/pk-command-not-found.c:794
+msgid "Similar commands are:"
+msgstr ""
+
+#. TRANSLATORS: ask the user to choose a file to run
+#: ../contrib/command-not-found/pk-command-not-found.c:801
+msgid "Please choose a command to run"
+msgstr ""
+
+#. TRANSLATORS: tell the user what package provides the command
+#: ../contrib/command-not-found/pk-command-not-found.c:819
+msgid "The package providing this file is:"
+msgstr ""
+
+#. TRANSLATORS: as the user if we want to install a package to provide the
+#. command
+#: ../contrib/command-not-found/pk-command-not-found.c:826
+#, 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:853
+msgid "Packages providing this file are:"
+msgstr ""
+
+#. TRANSLATORS: Show the user a list of packages that they can install to
+#. provide this command
+#: ../contrib/command-not-found/pk-command-not-found.c:863
+msgid "Suitable packages are:"
+msgstr ""
+
+#. get selection
+#. TRANSLATORS: ask the user to choose a file to install
+#: ../contrib/command-not-found/pk-command-not-found.c:872
+msgid "Please choose a package to install"
+msgstr ""
+
+#. TRANSLATORS: we are starting to install the packages
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:195
+msgid "Starting install"
+msgstr ""
+
+#. TRANSLATORS: we couldn't find the package name, non-fatal
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:407
+#, c-format
+msgid "Failed to find the package %s, or already installed: %s"
+msgstr ""
+
+#. command line argument, simulate what would be done, but don't actually do
+#. it
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:516
+msgid ""
+"Don't actually install any packages, only simulate what would be installed"
+msgstr ""
+
+#. command line argument, do we skip packages that depend on the ones
+#. specified
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:519
+msgid "Do not install dependencies of the core packages"
+msgstr ""
+
+#. command line argument, do we operate quietly
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:522
+msgid "Do not display information or progress"
+msgstr ""
+
+#. TRANSLATORS: tool that gets called when the command is not found
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:540
+msgid "PackageKit Debuginfo Installer"
+msgstr ""
+
+#. TRANSLATORS: the use needs to specify a list of package names on the
+#. command line
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:554
+#, c-format
+msgid "ERROR: Specify package names to install."
+msgstr ""
+
+#. TRANSLATORS: we are getting the list of repositories
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:590
+#, c-format
+msgid "Getting sources list"
+msgstr ""
+
+#. TRANSLATORS: operation was not successful
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:600
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:675
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:759
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:803
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:870
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:914
+msgid "FAILED."
+msgstr ""
+
+#. TRANSLATORS: all completed 100%
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:615
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:655
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:690
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:774
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:818
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:885
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:929
+#, c-format
+msgid "OK."
+msgstr ""
+
+#. TRANSLATORS: tell the user what we found
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:618
+#, c-format
+msgid "Found %i enabled and %i disabled sources."
+msgstr ""
+
+#. TRANSLATORS: we're finding repositories that match out pattern
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:625
+#, c-format
+msgid "Finding debugging sources"
+msgstr ""
+
+#. TRANSLATORS: tell the user what we found
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:658
+#, c-format
+msgid "Found %i disabled debuginfo repos."
+msgstr ""
+
+#. TRANSLATORS: we're now enabling all the debug sources we found
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:665
+#, c-format
+msgid "Enabling debugging sources"
+msgstr ""
+
+#. TRANSLATORS: tell the user how many we enabled
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:693
+#, c-format
+msgid "Enabled %i debugging sources."
+msgstr ""
+
+#. TRANSLATORS: we're now finding packages that match in all the repos
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:700
+#, c-format
+msgid "Finding debugging packages"
+msgstr ""
+
+#. TRANSLATORS: we couldn't find the package name, non-fatal
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:712
+#, c-format
+msgid "Failed to find the package %s: %s"
+msgstr ""
+
+#. TRANSLATORS: we couldn't find the debuginfo package name, non-fatal
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:735
+#, c-format
+msgid "Failed to find the debuginfo package %s: %s"
+msgstr ""
+
+#. TRANSLATORS: no debuginfo packages could be found to be installed
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:763
+#, c-format
+msgid "Found no packages to install."
+msgstr ""
+
+#. TRANSLATORS: tell the user we found some packages, and then list them
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:777
+#, c-format
+msgid "Found %i packages:"
+msgstr ""
+
+#. TRANSLATORS: tell the user we are searching for deps
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:793
+#, c-format
+msgid "Finding packages that depend on these packages"
+msgstr ""
+
+#. TRANSLATORS: could not install, detailed error follows
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:806
+#, c-format
+msgid "Could not find dependant packages: %s"
+msgstr ""
+
+#. TRANSLATORS: tell the user we found some more packages
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:822
+#, c-format
+msgid "Found %i extra packages."
+msgstr ""
+
+#. TRANSLATORS: tell the user we found some more packages
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:826
+#, c-format
+msgid "No extra packages required."
+msgstr ""
+
+#. TRANSLATORS: tell the user we found some packages (and deps), and then list
+#. them
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:835
+#, c-format
+msgid "Found %i packages to install:"
+msgstr ""
+
+#. TRANSLATORS: simulate mode is a testing mode where we quit before the
+#. action
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:848
+#, c-format
+msgid "Not installing packages in simulate mode"
+msgstr ""
+
+#. TRANSLATORS: we are now installing the debuginfo packages we found earlier
+#. TRANSLATORS: transaction state, installing packages
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:860
+#: ../lib/packagekit-glib2/pk-console-shared.c:287
+#, c-format
+msgid "Installing packages"
+msgstr ""
+
+#. TRANSLATORS: could not install, detailed error follows
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:873
+#, c-format
+msgid "Could not install packages: %s"
+msgstr ""
+
+#. TRANSLATORS: we are now disabling all debuginfo repos we previously enabled
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:905
+#, c-format
+msgid "Disabling sources previously enabled"
+msgstr ""
+
+#. TRANSLATORS: no debuginfo packages could be found to be installed, detailed
+#. error follows
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:917
+#, c-format
+msgid "Could not disable the debugging sources: %s"
+msgstr ""
+
+#. TRANSLATORS: we disabled all the debugging repos that we enabled before
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:932
+#, c-format
+msgid "Disabled %i debugging sources."
+msgstr ""
+
+#. TRANSLATORS: couldn't open device to write
+#: ../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:71
+msgid "Failed to write to the file"
+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 ""
+
+#. TRANSLATORS: the device could not be found in sysfs
+#: ../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:203
+msgid "Failed to unregister driver"
+msgstr ""
+
+#. TRANSLATORS: we failed to bind the old driver
+#: ../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:261
+msgid "Device path not found"
+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 ""
+
+#: ../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: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: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:315
+msgid "PackageKit Device Reloader"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. TRANSLATORS: we're going to verify the path first
+#: ../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:347
+msgid "Failed to verify device path"
+msgstr ""
+
+#. TRANSLATORS: we're going to try
+#: ../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:366
+msgid "Failed to rebind device"
+msgstr ""
+
+#: ../data/packagekit-catalog.xml.in.h:1
+msgid "PackageKit Catalog"
+msgstr ""
+
+#: ../data/packagekit-package-list.xml.in.h:1
+msgid "PackageKit Package List"
+msgstr ""
+
+#: ../data/packagekit-servicepack.xml.in.h:1
+msgid "PackageKit Service Pack"
+msgstr ""
+
+#: ../lib/packagekit-glib2/pk-console-shared.c:63
+#, 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:189
+msgid "More than one package matches:"
+msgstr ""
+
+#. TRANSLATORS: This finds out which package in the list to use
+#: ../lib/packagekit-glib2/pk-console-shared.c:200
+msgid "Please choose the correct package: "
+msgstr ""
+
+#. TRANSLATORS: This is when the transaction status is not known
+#: ../lib/packagekit-glib2/pk-console-shared.c:255
+msgid "Unknown state"
+msgstr ""
+
+#. TRANSLATORS: transaction state, the daemon is in the process of starting
+#: ../lib/packagekit-glib2/pk-console-shared.c:259
+msgid "Starting"
+msgstr ""
+
+#. TRANSLATORS: transaction state, the transaction is waiting for another to
+#. complete
+#: ../lib/packagekit-glib2/pk-console-shared.c:263
+msgid "Waiting in queue"
+msgstr ""
+
+#. TRANSLATORS: transaction state, just started
+#: ../lib/packagekit-glib2/pk-console-shared.c:267
+msgid "Running"
+msgstr ""
+
+#. TRANSLATORS: transaction state, is querying data
+#: ../lib/packagekit-glib2/pk-console-shared.c:271
+msgid "Querying"
+msgstr ""
+
+#. TRANSLATORS: transaction state, getting data from a server
+#: ../lib/packagekit-glib2/pk-console-shared.c:275
+msgid "Getting information"
+msgstr ""
+
+#. TRANSLATORS: transaction state, removing packages
+#: ../lib/packagekit-glib2/pk-console-shared.c:279
+msgid "Removing packages"
+msgstr ""
+
+#. TRANSLATORS: transaction state, downloading package files
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:283
+#: ../lib/packagekit-glib2/pk-console-shared.c:661
+msgid "Downloading packages"
+msgstr ""
+
+#. TRANSLATORS: transaction state, refreshing internal lists
+#: ../lib/packagekit-glib2/pk-console-shared.c:291
+msgid "Refreshing software list"
+msgstr ""
+
+#. TRANSLATORS: transaction state, installing updates
+#: ../lib/packagekit-glib2/pk-console-shared.c:295
+msgid "Installing updates"
+msgstr ""
+
+#. TRANSLATORS: transaction state, removing old packages, and cleaning config
+#. files
+#: ../lib/packagekit-glib2/pk-console-shared.c:299
+msgid "Cleaning up packages"
+msgstr ""
+
+#. TRANSLATORS: transaction state, obsoleting old packages
+#: ../lib/packagekit-glib2/pk-console-shared.c:303
+msgid "Obsoleting packages"
+msgstr ""
+
+#. TRANSLATORS: transaction state, checking the transaction before we do it
+#: ../lib/packagekit-glib2/pk-console-shared.c:307
+msgid "Resolving dependencies"
+msgstr ""
+
+#. TRANSLATORS: transaction state, checking if we have all the security keys
+#. for the operation
+#: ../lib/packagekit-glib2/pk-console-shared.c:311
+msgid "Checking signatures"
+msgstr ""
+
+#. TRANSLATORS: transaction state, when we return to a previous system state
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:315
+#: ../lib/packagekit-glib2/pk-console-shared.c:621
+msgid "Rolling back"
+msgstr ""
+
+#. TRANSLATORS: transaction state, when we're doing a test transaction
+#: ../lib/packagekit-glib2/pk-console-shared.c:319
+msgid "Testing changes"
+msgstr ""
+
+#. TRANSLATORS: transaction state, when we're writing to the system package
+#. database
+#: ../lib/packagekit-glib2/pk-console-shared.c:323
+msgid "Committing changes"
+msgstr ""
+
+#. TRANSLATORS: transaction state, requesting data from a server
+#: ../lib/packagekit-glib2/pk-console-shared.c:327
+msgid "Requesting data"
+msgstr ""
+
+#. TRANSLATORS: transaction state, all done!
+#: ../lib/packagekit-glib2/pk-console-shared.c:331
+msgid "Finished"
+msgstr ""
+
+#. TRANSLATORS: transaction state, in the process of cancelling
+#: ../lib/packagekit-glib2/pk-console-shared.c:335
+msgid "Cancelling"
+msgstr ""
+
+#. TRANSLATORS: transaction state, downloading metadata
+#: ../lib/packagekit-glib2/pk-console-shared.c:339
+msgid "Downloading repository information"
+msgstr ""
+
+#. TRANSLATORS: transaction state, downloading metadata
+#: ../lib/packagekit-glib2/pk-console-shared.c:343
+msgid "Downloading list of packages"
+msgstr ""
+
+#. TRANSLATORS: transaction state, downloading metadata
+#: ../lib/packagekit-glib2/pk-console-shared.c:347
+msgid "Downloading file lists"
+msgstr ""
+
+#. TRANSLATORS: transaction state, downloading metadata
+#: ../lib/packagekit-glib2/pk-console-shared.c:351
+msgid "Downloading lists of changes"
+msgstr ""
+
+#. TRANSLATORS: transaction state, downloading metadata
+#: ../lib/packagekit-glib2/pk-console-shared.c:355
+msgid "Downloading groups"
+msgstr ""
+
+#. TRANSLATORS: transaction state, downloading metadata
+#: ../lib/packagekit-glib2/pk-console-shared.c:359
+msgid "Downloading update information"
+msgstr ""
+
+#. TRANSLATORS: transaction state, repackaging delta files
+#: ../lib/packagekit-glib2/pk-console-shared.c:363
+msgid "Repackaging files"
+msgstr ""
+
+#. TRANSLATORS: transaction state, loading databases
+#: ../lib/packagekit-glib2/pk-console-shared.c:367
+msgid "Loading cache"
+msgstr ""
+
+#. TRANSLATORS: transaction state, scanning for running processes
+#: ../lib/packagekit-glib2/pk-console-shared.c:371
+msgid "Scanning applications"
+msgstr ""
+
+#. TRANSLATORS: transaction state, generating a list of packages installed on
+#. the system
+#: ../lib/packagekit-glib2/pk-console-shared.c:375
+msgid "Generating package lists"
+msgstr ""
+
+#. TRANSLATORS: transaction state, when we're waiting for the native tools to
+#. exit
+#: ../lib/packagekit-glib2/pk-console-shared.c:379
+msgid "Waiting for package manager lock"
+msgstr ""
+
+#. TRANSLATORS: transaction state, waiting for user to type in a password
+#: ../lib/packagekit-glib2/pk-console-shared.c:383
+msgid "Waiting for authentication"
+msgstr ""
+
+#. TRANSLATORS: transaction state, we are updating the list of processes
+#: ../lib/packagekit-glib2/pk-console-shared.c:387
+msgid "Updating running applications"
+msgstr ""
+
+#. TRANSLATORS: transaction state, we are checking executable files currently
+#. in use
+#: ../lib/packagekit-glib2/pk-console-shared.c:391
+msgid "Checking applications in use"
+msgstr ""
+
+#. TRANSLATORS: transaction state, we are checking for libraries currently in
+#. use
+#: ../lib/packagekit-glib2/pk-console-shared.c:395
+msgid "Checking libraries in use"
+msgstr ""
+
+#. TRANSLATORS: transaction state, we are copying package files before or
+#. after the transaction
+#: ../lib/packagekit-glib2/pk-console-shared.c:399
+msgid "Copying files"
+msgstr ""
+
+#. TRANSLATORS: The type of update
+#: ../lib/packagekit-glib2/pk-console-shared.c:417
+msgid "Trivial"
+msgstr ""
+
+#. TRANSLATORS: The type of update
+#: ../lib/packagekit-glib2/pk-console-shared.c:421
+msgid "Normal"
+msgstr ""
+
+#. TRANSLATORS: The type of update
+#: ../lib/packagekit-glib2/pk-console-shared.c:425
+msgid "Important"
+msgstr ""
+
+#. TRANSLATORS: The type of update
+#: ../lib/packagekit-glib2/pk-console-shared.c:429
+msgid "Security"
+msgstr ""
+
+#. TRANSLATORS: The type of update
+#: ../lib/packagekit-glib2/pk-console-shared.c:433
+msgid "Bug fix "
+msgstr ""
+
+#. TRANSLATORS: The type of update
+#: ../lib/packagekit-glib2/pk-console-shared.c:437
+msgid "Enhancement"
+msgstr ""
+
+#. TRANSLATORS: The type of update
+#: ../lib/packagekit-glib2/pk-console-shared.c:441
+msgid "Blocked"
+msgstr ""
+
+#. TRANSLATORS: The state of a package
+#. TRANSLATORS: The action of the package, in past tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:446
+#: ../lib/packagekit-glib2/pk-console-shared.c:519
+msgid "Installed"
+msgstr ""
+
+#. TRANSLATORS: The state of a package, i.e. not installed
+#: ../lib/packagekit-glib2/pk-console-shared.c:451
+msgid "Available"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:469
+msgid "Downloading"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:473
+msgid "Updating"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in present tense
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:477
+#: ../lib/packagekit-glib2/pk-console-shared.c:597
+msgid "Installing"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in present tense
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:481
+#: ../lib/packagekit-glib2/pk-console-shared.c:593
+msgid "Removing"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:485
+msgid "Cleaning up"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:489
+msgid "Obsoleting"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:493
+msgid "Reinstalling"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in past tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:511
+msgid "Downloaded"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in past tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:523
+msgid "Removed"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in past tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:527
+msgid "Cleaned up"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in past tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:531
+msgid "Obsoleted"
+msgstr ""
+
+#. TRANSLATORS: The action of the package, in past tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:535
+msgid "Reinstalled"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:553
+msgid "Unknown role type"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:557
+msgid "Getting dependencies"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:561
+msgid "Getting update details"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:565
+msgid "Getting details"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:569
+msgid "Getting requires"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:573
+msgid "Getting updates"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:577
+msgid "Searching by details"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:581
+msgid "Searching by file"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:585
+msgid "Searching groups"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:589
+msgid "Searching by name"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:601
+msgid "Installing files"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:605
+msgid "Refreshing cache"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:609
+msgid "Updating packages"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:613
+msgid "Updating system"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:617
+msgid "Canceling"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:625
+msgid "Getting repositories"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:629
+msgid "Enabling repository"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:633
+msgid "Setting data"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:637
+msgid "Resolving"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:641
+msgid "Getting file list"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:645
+msgid "Getting provides"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:649
+msgid "Installing signature"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:653
+msgid "Getting packages"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:657
+msgid "Accepting EULA"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:665
+msgid "Getting upgrades"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:669
+msgid "Getting categories"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:673
+msgid "Getting transactions"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:677
+#: ../lib/packagekit-glib2/pk-console-shared.c:681
+msgid "Simulating install"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:685
+msgid "Simulating remove"
+msgstr ""
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:689
+msgid "Simulating update"
+msgstr ""
+
+#. TRANSLATORS: turn on all debugging
+#: ../lib/packagekit-glib2/pk-debug.c:133
+msgid "Show debugging information for all files"
+msgstr ""
+
+#: ../lib/packagekit-glib2/pk-debug.c:201
+msgid "Debugging Options"
+msgstr ""
+
+#: ../lib/packagekit-glib2/pk-debug.c:201
+msgid "Show debugging options"
+msgstr ""
+
+#. TRANSLATORS: ask the user if they are comfortable installing insecure
+#. packages
+#: ../lib/packagekit-glib2/pk-task-text.c:67
+msgid "Do you want to allow installing of unsigned software?"
+msgstr ""
+
+#. TRANSLATORS: tell the user we've not done anything
+#: ../lib/packagekit-glib2/pk-task-text.c:72
+msgid "The unsigned software will not be installed."
+msgstr ""
+
+#. TRANSLATORS: the package repository is signed by a key that is not
+#. recognised
+#: ../lib/packagekit-glib2/pk-task-text.c:121
+msgid "Software source signature required"
+msgstr ""
+
+#. TRANSLATORS: the package repository name
+#: ../lib/packagekit-glib2/pk-task-text.c:127
+msgid "Software source name"
+msgstr ""
+
+#. TRANSLATORS: the key URL
+#: ../lib/packagekit-glib2/pk-task-text.c:130
+msgid "Key URL"
+msgstr ""
+
+#. TRANSLATORS: the username of the key
+#: ../lib/packagekit-glib2/pk-task-text.c:133
+msgid "Key user"
+msgstr ""
+
+#. TRANSLATORS: the key ID, usually a few hex digits
+#: ../lib/packagekit-glib2/pk-task-text.c:136
+msgid "Key ID"
+msgstr ""
+
+#. TRANSLATORS: the key fingerprint, again, yet more hex
+#: ../lib/packagekit-glib2/pk-task-text.c:139
+msgid "Key fingerprint"
+msgstr ""
+
+#. TRANSLATORS: the timestamp (a bit like a machine readable time)
+#: ../lib/packagekit-glib2/pk-task-text.c:142
+msgid "Key Timestamp"
+msgstr ""
+
+#. TRANSLATORS: ask the user if they want to import
+#: ../lib/packagekit-glib2/pk-task-text.c:155
+msgid "Do you accept this signature?"
+msgstr ""
+
+#. TRANSLATORS: tell the user we've not done anything
+#: ../lib/packagekit-glib2/pk-task-text.c:160
+msgid "The signature was not accepted."
+msgstr ""
+
+#. TRANSLATORS: this is another name for a software licence that has to be
+#. read before installing
+#: ../lib/packagekit-glib2/pk-task-text.c:203
+msgid "End user licence agreement required"
+msgstr ""
+
+#. TRANSLATORS: the EULA text itself (long and boring)
+#: ../lib/packagekit-glib2/pk-task-text.c:212
+msgid "Agreement"
+msgstr ""
+
+#. TRANSLATORS: ask the user if they've read and accepted the EULA
+#: ../lib/packagekit-glib2/pk-task-text.c:221
+msgid "Do you accept this agreement?"
+msgstr ""
+
+#. TRANSLATORS: tell the user we've not done anything
+#: ../lib/packagekit-glib2/pk-task-text.c:226
+msgid "The agreement was not accepted."
+msgstr ""
+
+#. TRANSLATORS: the user needs to change media inserted into the computer
+#: ../lib/packagekit-glib2/pk-task-text.c:265
+msgid "Media change required"
+msgstr ""
+
+#. TRANSLATORS: the type, e.g. DVD, CD, etc
+#: ../lib/packagekit-glib2/pk-task-text.c:268
+msgid "Media type"
+msgstr ""
+
+#. TRANSLATORS: the media label, usually like 'disk-1of3'
+#: ../lib/packagekit-glib2/pk-task-text.c:271
+msgid "Media label"
+msgstr ""
+
+#. TRANSLATORS: the media description, usually like 'Fedora 12 disk 5'
+#: ../lib/packagekit-glib2/pk-task-text.c:274
+msgid "Text"
+msgstr ""
+
+#. TRANSLATORS: ask the user to insert the media
+#: ../lib/packagekit-glib2/pk-task-text.c:280
+msgid "Please insert the correct media"
+msgstr ""
+
+#. TRANSLATORS: tell the user we've not done anything as they are lazy
+#: ../lib/packagekit-glib2/pk-task-text.c:285
+msgid "The correct media was not inserted."
+msgstr ""
+
+#. TRANSLATORS: When processing, we might have to remove other dependencies
+#: ../lib/packagekit-glib2/pk-task-text.c:300
+msgid "The following packages have to be removed:"
+msgstr ""
+
+#. TRANSLATORS: When processing, we might have to install other dependencies
+#: ../lib/packagekit-glib2/pk-task-text.c:305
+msgid "The following packages have to be installed:"
+msgstr ""
+
+#. TRANSLATORS: When processing, we might have to update other dependencies
+#: ../lib/packagekit-glib2/pk-task-text.c:310
+msgid "The following packages have to be updated:"
+msgstr ""
+
+#. TRANSLATORS: When processing, we might have to reinstall other dependencies
+#: ../lib/packagekit-glib2/pk-task-text.c:315
+msgid "The following packages have to be reinstalled:"
+msgstr ""
+
+#. TRANSLATORS: When processing, we might have to downgrade other dependencies
+#: ../lib/packagekit-glib2/pk-task-text.c:320
+msgid "The following packages have to be downgraded:"
+msgstr ""
+
+#. TRANSLATORS: ask the user if the proposed changes are okay
+#: ../lib/packagekit-glib2/pk-task-text.c:380
+msgid "Proceed with changes?"
+msgstr ""
+
+#. TRANSLATORS: tell the user we didn't do anything
+#: ../lib/packagekit-glib2/pk-task-text.c:385
+msgid "The transaction did not proceed."
+msgstr ""
+
+#. SECURITY:
+#. - Normal users do not require admin authentication to accept new
+#. licence agreements.
+#. - Change this to 'auth_admin' for environments where users should not
+#. be given the option to make legal decisions.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:7
+msgid "Accept EULA"
+msgstr ""
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h: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"
+msgstr ""
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:10
+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:13
+msgid "Authentication is required to install a signed package"
+msgstr ""
+
+#: ../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:15
+msgid "Authentication is required to refresh the system sources"
+msgstr ""
+
+#: ../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:17
+msgid "Authentication is required to remove packages"
+msgstr ""
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:18
+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 ""
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:21
+msgid "Authentication is required to upgrade the operating system"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users are allowed to cancel their own task without
+#. authentication, but a different user id needs the admin password
+#. to cancel another users task.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:27
+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:34
+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:40
+msgid "Change software source parameters"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users do not need authentication to install signed packages
+#. from signed repositories, as this cannot exploit a system.
+#. - Paranoid users (or parents!) can change this to 'auth_admin' or
+#. 'auth_admin_keep'.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:47
+msgid "Install signed package"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users require admin authentication to install untrusted or
+#. unrecognised packages, as allowing users to do this without a
+#. password would be a massive security hole.
+#. - This is not retained as each package should be authenticated.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:54
+msgid "Install untrusted local file"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users do not require admin authentication to refresh the
+#. cache, as this doesn't actually install or remove software.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:59
+msgid "Refresh system sources"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users require admin authentication to rebind a driver
+#. so that it works after we install firmware.
+#. - This should not be set to 'yes' as unprivileged users could then
+#. try to rebind drivers in use, for instance security authentication
+#. devices.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:67
+msgid "Reload a device"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users require admin authentication to remove packages as
+#. this can make the system unbootable or stop other applications from
+#. working.
+#. - Be sure to close the tool used to remove the packages after the
+#. admin authentication has been obtained, otherwise packages can still
+#. be removed. If this is not possible, change this authentication to
+#. 'auth_admin'.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:77
+msgid "Remove package"
+msgstr ""
+
+#. 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:83
+msgid "Rollback to a previous transaction"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users do not require admin authentication to set the proxy
+#. used for downloading packages.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:88
+msgid "Set network proxy"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users require admin authentication to add signing keys.
+#. - This implies adding an explicit trust, and should not be granted
+#. without a secure authentication.
+#. - This is not kept as each package should be authenticated.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:95
+msgid "Trust a key used for signing packages"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users do not require admin authentication to update the
+#. system as the packages will be signed, and the action is required
+#. to update the system when unattended.
+#. - Changing this to anything other than 'yes' will break unattended
+#. updates.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:103
+msgid "Update packages"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users require admin authentication to upgrade the disto as
+#. this can make the system unbootable or stop other applications from
+#. working.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:109
+msgid "Upgrade System"
+msgstr ""
+
+#. TRANSLATORS: failed due to DBus security
+#: ../src/pk-main.c:87
+msgid "Startup failed due to security policies on this machine."
+msgstr ""
+
+#. TRANSLATORS: only two ways this can fail...
+#: ../src/pk-main.c:89
+msgid "This can happen for two reasons:"
+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 ""
+
+#. 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 ""
+
+#. TRANSLATORS: a backend is the system package tool, e.g. yum, apt
+#: ../src/pk-main.c:200
+msgid "Packaging backend to use, e.g. dummy"
+msgstr ""
+
+#. TRANSLATORS: if we should run in the background
+#: ../src/pk-main.c:203
+msgid "Daemonize and detach from the terminal"
+msgstr ""
+
+#. TRANSLATORS: if we should not monitor how long we are inactive for
+#: ../src/pk-main.c:206
+msgid "Disable the idle timer"
+msgstr ""
+
+#. TRANSLATORS: show version
+#: ../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:212
+msgid "Exit after a small delay"
+msgstr ""
+
+#. TRANSLATORS: exit straight away, used for automatic profiling
+#: ../src/pk-main.c:215
+msgid "Exit after the engine has loaded"
+msgstr ""
+
+#. TRANSLATORS: describing the service that is running
+#: ../src/pk-main.c:230
+msgid "PackageKit service"
+msgstr ""
+
+#. TRANSLATORS: fatal error, dbus is not running
+#: ../src/pk-main.c:267
+msgid "Cannot connect to the system bus"
+msgstr ""
+
+#. TRANSLATORS: cannot register on system bus, unknown reason -- geeky error
+#. follows
+#: ../src/pk-main.c:316
+msgid "Error trying to start:"
+msgstr ""
+
+#: ../src/pk-polkit-action-lookup.c:150
+msgid "To install debugging packages, extra sources need to be enabled"
+msgstr ""
+
+#. 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 ""
+
+#: ../src/pk-polkit-action-lookup.c:176
+msgid "Do not update this package unless you are sure it is safe to do so."
+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 ""
+
+#: ../src/pk-polkit-action-lookup.c:195
+msgid "Do not install this package unless you are sure it is safe to do so."
+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 ""
+
+#. TRANSLATORS: too many packages to list each one
+#: ../src/pk-polkit-action-lookup.c:273
+msgid "Many packages"
+msgstr ""
+
+#. TRANSLATORS: if the transaction is forced to install only trusted packages
+#: ../src/pk-polkit-action-lookup.c:339
+msgid "Only trusted"
+msgstr ""
commit 375a8c9040242d50a5f1c95be650aad359fc861f
Author: mbouzada <mbouzada at gmail.com>
Date:   Tue Apr 26 10:18:43 2011 +0100

    Added Galician translation
    
    Signed-off-by: Richard Hughes <richard at hughsie.com>

diff --git a/po/gl.po b/po/gl.po
new file mode 100644
index 0000000..ff1bffa
--- /dev/null
+++ b/po/gl.po
@@ -0,0 +1,2139 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL at ADDRESS>, YEAR.
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: PackageKit\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-12-13 12:23+0000\n"
+"PO-Revision-Date: 2011-03-04 18:34+0000\n"
+"Last-Translator: mbouzada <mbouzada at gmail.com>\n"
+"Language-Team: Galician <None>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: gl\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#. TRANSLATORS: this is an atomic transaction
+#. TRANSLATORS: the role is the point of the transaction, e.g. update-system
+#: ../client/pk-console.c:174 ../client/pk-console.c:596
+msgid "Transaction"
+msgstr "Transacción"
+
+#. TRANSLATORS: this is the time the transaction was started in system
+#. timezone
+#: ../client/pk-console.c:176
+msgid "System time"
+msgstr "Hora do sistema"
+
+#. TRANSLATORS: this is if the transaction succeeded or not
+#: ../client/pk-console.c:178
+msgid "Succeeded"
+msgstr "Correcto"
+
+#: ../client/pk-console.c:178
+msgid "True"
+msgstr "Verdadeiro"
+
+#: ../client/pk-console.c:178
+msgid "False"
+msgstr "Falso"
+
+#. TRANSLATORS: this is the transactions role, e.g. "update-system"
+#. TRANSLATORS: the trasaction role, e.g. update-system
+#: ../client/pk-console.c:180 ../src/pk-polkit-action-lookup.c:332
+msgid "Role"
+msgstr "Rol"
+
+#. TRANSLATORS: this is The duration of the transaction
+#: ../client/pk-console.c:185
+msgid "Duration"
+msgstr "Duración"
+
+#: ../client/pk-console.c:185
+msgid "(seconds)"
+msgstr "(segundos)"
+
+#. TRANSLATORS: this is The command line used to do the action
+#. TRANSLATORS: the command line of the thing that wants the authentication
+#: ../client/pk-console.c:189 ../src/pk-polkit-action-lookup.c:346
+msgid "Command line"
+msgstr "Liña de ordes"
+
+#. TRANSLATORS: this is the user ID of the user that started the action
+#: ../client/pk-console.c:191
+msgid "User ID"
+msgstr "ID de usuario"
+
+#. TRANSLATORS: this is the username, e.g. hughsie
+#: ../client/pk-console.c:198
+msgid "Username"
+msgstr "Nome de usuario"
+
+#. TRANSLATORS: this is the users real name, e.g. "Richard Hughes"
+#: ../client/pk-console.c:202
+msgid "Real name"
+msgstr "Nome real"
+
+#: ../client/pk-console.c:210
+msgid "Affected packages:"
+msgstr "Paquetes afectados:"
+
+#: ../client/pk-console.c:212
+msgid "Affected packages: None"
+msgstr "Paquetes afectados: ningún"
+
+#. TRANSLATORS: this is the distro, e.g. Fedora 10
+#: ../client/pk-console.c:247
+msgid "Distribution"
+msgstr "Distribución"
+
+#. TRANSLATORS: this is type of update, stable or testing
+#: ../client/pk-console.c:249
+msgid "Type"
+msgstr "Tipo"
+
+#. TRANSLATORS: this is any summary text describing the upgrade
+#. TRANSLATORS: this is the summary of the group
+#: ../client/pk-console.c:251 ../client/pk-console.c:290
+msgid "Summary"
+msgstr "Resumo"
+
+#. TRANSLATORS: this is the group category name
+#: ../client/pk-console.c:279
+msgid "Category"
+msgstr "Categoría"
+
+#. TRANSLATORS: this is group identifier
+#: ../client/pk-console.c:281
+msgid "ID"
+msgstr "ID"
+
+#. TRANSLATORS: this is the parent group
+#: ../client/pk-console.c:284
+msgid "Parent"
+msgstr "Pai"
+
+#. TRANSLATORS: this is the name of the parent group
+#: ../client/pk-console.c:287
+msgid "Name"
+msgstr "Nome"
+
+#. TRANSLATORS: this is preferred icon for the group
+#: ../client/pk-console.c:293
+msgid "Icon"
+msgstr "Icona"
+
+#. TRANSLATORS: this is a header for the package that can be updated
+#: ../client/pk-console.c:339
+msgid "Details about the update:"
+msgstr "Detalles sobre a actualización:"
+
+#. TRANSLATORS: details about the update, package name and version
+#. TRANSLATORS: the package that is being processed
+#. TRANSLATORS: the package that is not signed by a known key
+#. TRANSLATORS: the package name that was trying to be installed
+#. TRANSLATORS: title, the names of the packages that the method is processing
+#: ../client/pk-console.c:345 ../client/pk-console.c:615
+#: ../lib/packagekit-glib2/pk-task-text.c:124
+#: ../lib/packagekit-glib2/pk-task-text.c:206
+#: ../src/pk-polkit-action-lookup.c:357
+msgid "Package"
+msgid_plural "Packages"
+msgstr[0] "Paquete"
+msgstr[1] "Paquetes"
+
+#. TRANSLATORS: details about the update, any packages that this update
+#. updates
+#: ../client/pk-console.c:348
+msgid "Updates"
+msgstr "Actualizacións"
+
+#. TRANSLATORS: details about the update, any packages that this update
+#. obsoletes
+#: ../client/pk-console.c:352
+msgid "Obsoletes"
+msgstr "Obsoletos"
+
+#. TRANSLATORS: details about the update, the vendor URLs
+#. TRANSLATORS: the vendor (e.g. vmware) that is providing the EULA
+#: ../client/pk-console.c:356 ../lib/packagekit-glib2/pk-task-text.c:209
+msgid "Vendor"
+msgstr "Provedor"
+
+#. TRANSLATORS: details about the update, the bugzilla URLs
+#: ../client/pk-console.c:360
+msgid "Bugzilla"
+msgstr "Bugzilla"
+
+#. TRANSLATORS: details about the update, the CVE URLs
+#: ../client/pk-console.c:364
+msgid "CVE"
+msgstr "CVE"
+
+#. TRANSLATORS: details about the update, if the package requires a restart
+#: ../client/pk-console.c:368
+msgid "Restart"
+msgstr "Reiniciar"
+
+#. TRANSLATORS: details about the update, any description of the update
+#: ../client/pk-console.c:372
+msgid "Update text"
+msgstr "Texto de actualización"
+
+#. TRANSLATORS: details about the update, the changelog for the package
+#: ../client/pk-console.c:376
+msgid "Changes"
+msgstr "Cambios"
+
+#. TRANSLATORS: details about the update, the ongoing state of the update
+#: ../client/pk-console.c:380
+msgid "State"
+msgstr "Estado"
+
+#. TRANSLATORS: details about the update, date the update was issued
+#: ../client/pk-console.c:384
+msgid "Issued"
+msgstr "Publicada"
+
+#. TRANSLATORS: details about the update, date the update was updated
+#. TRANSLATORS: The action of the package, in past tense
+#: ../client/pk-console.c:388 ../lib/packagekit-glib2/pk-console-shared.c:515
+msgid "Updated"
+msgstr "Actualizado"
+
+#. TRANSLATORS: if the repo is enabled
+#: ../client/pk-console.c:424
+msgid "Enabled"
+msgstr "Activado"
+
+#. TRANSLATORS: if the repo is disabled
+#: ../client/pk-console.c:427
+msgid "Disabled"
+msgstr "Desactivado"
+
+#. TRANSLATORS: a package requires the system to be restarted
+#: ../client/pk-console.c:459
+msgid "System restart required by:"
+msgstr "Reinicio do sistema requirido por:"
+
+#. TRANSLATORS: a package requires the session to be restarted
+#: ../client/pk-console.c:462
+msgid "Session restart required:"
+msgstr "Reinicio da sesión requirido por:"
+
+#. TRANSLATORS: a package requires the system to be restarted due to a
+#. security update
+#: ../client/pk-console.c:465
+msgid "System restart (security) required by:"
+msgstr "Reinicio do sistema (seguranza) requirido por:"
+
+#. TRANSLATORS: a package requires the session to be restarted due to a
+#. security update
+#: ../client/pk-console.c:468
+msgid "Session restart (security) required:"
+msgstr "Reinicio da sesión (seguranza) requirido por:"
+
+#. TRANSLATORS: a package requires the application to be restarted
+#: ../client/pk-console.c:471
+msgid "Application restart required by:"
+msgstr "Reinicio do aplicativo requirido por:"
+
+#. TRANSLATORS: This a list of details about the package
+#: ../client/pk-console.c:506
+msgid "Package description"
+msgstr "Descrición do paquete"
+
+#. TRANSLATORS: This a message (like a little note that may be of interest)
+#. from the transaction
+#: ../client/pk-console.c:537
+msgid "Message:"
+msgstr "Mensaxe:"
+
+#. TRANSLATORS: This where the package has no files
+#: ../client/pk-console.c:558
+msgid "No files"
+msgstr "Sen ficheiros"
+
+#. TRANSLATORS: This a list files contained in the package
+#: ../client/pk-console.c:563
+msgid "Package files"
+msgstr "Ficheiros do paquete"
+
+#. TRANSLATORS: the percentage complete of the transaction
+#: ../client/pk-console.c:631
+msgid "Percentage"
+msgstr "Porcentaxe"
+
+#. TRANSLATORS: the status of the transaction (e.g. downloading)
+#: ../client/pk-console.c:649
+msgid "Status"
+msgstr "Estado"
+
+#. TRANSLATORS: the results from the transaction
+#: ../client/pk-console.c:678
+msgid "Results:"
+msgstr "Resultados:"
+
+#. TRANSLATORS: we failed to get any results, which is pretty fatal in my book
+#: ../client/pk-console.c:685
+msgid "Fatal error"
+msgstr "Produciuse un erro moi grave"
+
+#. TRANSLATORS: the user asked to update everything, but there is nothing that
+#. can be updated
+#: ../client/pk-console.c:701
+msgid "There are no packages to update."
+msgstr "Non hai paquetes que actualizar"
+
+#. TRANSLATORS: the transaction failed in a way we could not expect
+#: ../client/pk-console.c:704
+#: ../contrib/command-not-found/pk-command-not-found.c:639
+msgid "The transaction failed"
+msgstr "Produciuse un fallo durante a transacción"
+
+#. TRANSLATORS: print a message when there are no updates
+#: ../client/pk-console.c:733
+msgid "There are no updates available at this time."
+msgstr "Non hai actualizacións dispoñíbeis neste momento"
+
+#: ../client/pk-console.c:756
+msgid "There are no upgrades available at this time."
+msgstr "Non hai anovacións dispoñíbeis neste momento"
+
+#. TRANSLATORS: a package needs to restart their system
+#: ../client/pk-console.c:823
+msgid "Please restart the computer to complete the update."
+msgstr "Reinicie o equipo para completar a actualización."
+
+#. TRANSLATORS: a package needs to restart the session
+#: ../client/pk-console.c:826
+msgid "Please logout and login to complete the update."
+msgstr "Peche a sesión e volva a entrar para completar a actualización."
+
+#. TRANSLATORS: a package needs to restart their system (due to security)
+#: ../client/pk-console.c:829
+msgid ""
+"Please restart the computer to complete the update as important security "
+"updates have been installed."
+msgstr ""
+"Reinicie o equipo para completar a actualización, foi instalada unha "
+"actualización de seguranza importante."
+
+#. TRANSLATORS: a package needs to restart the session (due to security)
+#: ../client/pk-console.c:832
+msgid ""
+"Please logout and login to complete the update as important security updates"
+" have been installed."
+msgstr ""
+"Peche a sesión e volva a entrar para completar a actualización, foi "
+"instalada unha actualización de seguranza importante."
+
+#. TRANSLATORS: The user used 'pkcon install dave.rpm' rather than 'pkcon
+#. install-local dave.rpm'
+#: ../client/pk-console.c:858
+#, c-format
+msgid ""
+"Expected package name, actually got file. Try using 'pkcon install-local %s'"
+" instead."
+msgstr ""
+"Agardábase o nome dun paquete, mais obtívose un ficheiro. No seu canto tente"
+" empregar «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:866
+#, c-format
+msgid "This tool could not find any available package: %s"
+msgstr "Esta ferramenta non foi quen de atopar ningún paquete dispoñíbel: %s"
+
+#. TRANSLATORS: There was an error getting the list of files for the package.
+#. The detailed error follows
+#: ../client/pk-console.c:894
+#, c-format
+msgid "This tool could not find the installed package: %s"
+msgstr "Esta ferramenta non foi quen de atopar o paquete instalado: %s"
+
+#. TRANSLATORS: There was an error getting the list of files for the package.
+#. The detailed error follows
+#: ../client/pk-console.c:922 ../client/pk-console.c:950
+#, c-format
+msgid "This tool could not find the package: %s"
+msgstr "Esta ferramenta non foi quen de atopar o paquete: %s"
+
+#. TRANSLATORS: There was an error getting the list of files for the package.
+#. The detailed error follows
+#. TRANSLATORS: There was an error getting the dependencies for the package.
+#. The detailed error follows
+#. TRANSLATORS: There was an error getting the details about the package. The
+#. detailed error follows
+#. TRANSLATORS: The package name was not found in any software sources. The
+#. detailed error follows
+#: ../client/pk-console.c:978 ../client/pk-console.c:1006
+#: ../client/pk-console.c:1034 ../client/pk-console.c:1062
+#: ../client/pk-console.c:1090
+#, c-format
+msgid "This tool could not find all the packages: %s"
+msgstr "Esta ferramenta non foi quen de atopar todos os paquetes: %s"
+
+#. TRANSLATORS: This is when the daemon crashed, and we are up shit creek
+#. without a paddle
+#: ../client/pk-console.c:1119
+msgid "The daemon crashed mid-transaction!"
+msgstr "O daemon estragouse no medio dunha transacción."
+
+#. TRANSLATORS: This is the header to the --help menu
+#: ../client/pk-console.c:1153
+msgid "PackageKit Console Interface"
+msgstr "Interface de consola de PackageKit"
+
+#. these are commands we can use with pkcon
+#: ../client/pk-console.c:1155
+msgid "Subcommands:"
+msgstr "Subordes:"
+
+#. TRANSLATORS: we keep a database updated with the time that an action was
+#. last executed
+#: ../client/pk-console.c:1234
+msgid "Failed to get the time since this action was last completed"
+msgstr ""
+"Produciuse un fallo ao obter a hora da última vez que se completou esta "
+"acción"
+
+#. TRANSLATORS: command line argument, just show the version string
+#: ../client/pk-console.c:1275 ../client/pk-monitor.c:371
+msgid "Show the program version and exit"
+msgstr "Mostrar a versión do programa e saír"
+
+#. TRANSLATORS: command line argument, use a filter to narrow down results
+#: ../client/pk-console.c:1278
+msgid "Set the filter, e.g. installed"
+msgstr "Estabelecer o filtro, p.ex., instalado"
+
+#. TRANSLATORS: command line argument, use a non-standard install prefix
+#: ../client/pk-console.c:1281
+msgid "Set the install root, e.g. '/' or '/mnt/ltsp'"
+msgstr "Estabelecer a raíz de instalación, p. ex., «/», ou «/mnt/ltsp»"
+
+#. TRANSLATORS: command line argument, work asynchronously
+#: ../client/pk-console.c:1284
+msgid "Exit without waiting for actions to complete"
+msgstr "Saír sen agardar a que se completen as accións"
+
+#. command line argument, do we ask questions
+#: ../client/pk-console.c:1287
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:525
+msgid "Install the packages without asking for confirmation"
+msgstr "Instalar os paquetes sen pedir confirmación"
+
+#. TRANSLATORS: command line argument, this command is not a priority
+#: ../client/pk-console.c:1290
+msgid "Run the command using idle network bandwidth and also using less power"
+msgstr "Executa a orde empregando menos potencia, e o largo de banda libre"
+
+#. TRANSLATORS: command line argument, just output without fancy formatting
+#: ../client/pk-console.c:1293
+msgid ""
+"Print to screen a machine readable output, rather than using animated "
+"widgets"
+msgstr ""
+"Imprime na pantalla unha saída lexíbel por unha máquina, no canto de "
+"empregar trebellos animados"
+
+#. TRANSLATORS: command line argument, just output without fancy formatting
+#: ../client/pk-console.c:1296
+msgid "The maximum metadata cache age. Use -1 for 'never'."
+msgstr "A idade máxima para a caché de metadatos. Usar -1 para «nunca»."
+
+#. TRANSLATORS: we failed to contact the daemon
+#: ../client/pk-console.c:1333
+msgid "Failed to contact PackageKit"
+msgstr "Produciuse un fallo ao contactar con PackageKit"
+
+#. TRANSLATORS: The user specified an incorrect filter
+#: ../client/pk-console.c:1381
+msgid "The proxy could not be set"
+msgstr "Non foi posíbel definir o proxy"
+
+#. TRANSLATORS: The user specified an incorrect filter
+#: ../client/pk-console.c:1393
+msgid "The install root could not be set"
+msgstr "Non foi posíbel definir a raíz da instalación"
+
+#. TRANSLATORS: The user specified an incorrect filter
+#: ../client/pk-console.c:1405
+msgid "The filter specified was invalid"
+msgstr "O filtro especificado foi incorrecto"
+
+#. TRANSLATORS: a search type can be name, details, file, etc
+#: ../client/pk-console.c:1424
+msgid "A search type is required, e.g. name"
+msgstr "Precisase dun tipo de busca, p.ex. nome"
+
+#. TRANSLATORS: the user needs to provide a search term
+#: ../client/pk-console.c:1431 ../client/pk-console.c:1443
+#: ../client/pk-console.c:1455 ../client/pk-console.c:1467
+msgid "A search term is required"
+msgstr "Requírese un termo de busca"
+
+#. TRANSLATORS: the search type was provided, but invalid
+#: ../client/pk-console.c:1477
+msgid "Invalid search type"
+msgstr "Tipo de busca incorrecto"
+
+#. TRANSLATORS: the user did not specify what they wanted to install
+#: ../client/pk-console.c:1483
+msgid "A package name to install is required"
+msgstr "Requírese o nome do paquete a instalar"
+
+#. TRANSLATORS: the user did not specify what they wanted to install
+#: ../client/pk-console.c:1492
+msgid "A filename to install is required"
+msgstr "Requírese o nome do ficheiro a instalar"
+
+#. TRANSLATORS: geeky error, 99.9999% of users won't see this
+#: ../client/pk-console.c:1503
+msgid "A type, key_id and package_id are required"
+msgstr "Requírense o tipos key_id e package_id"
+
+#. TRANSLATORS: the user did not specify what they wanted to remove
+#: ../client/pk-console.c:1514
+msgid "A package name to remove is required"
+msgstr "Requírese o nome do paquete a retirar"
+
+#. TRANSLATORS: the user did not specify anything about what to download or
+#. where
+#: ../client/pk-console.c:1523
+msgid "A destination directory and the package names to download are required"
+msgstr ""
+"Requírense o directorio de destino e os nomes dos paquetes a descargar"
+
+#. TRANSLATORS: the directory does not exist, so we can't continue
+#: ../client/pk-console.c:1530
+msgid "Directory not found"
+msgstr "Non se atopou o directorio"
+
+#. TRANSLATORS: geeky error, 99.9999% of users won't see this
+#: ../client/pk-console.c:1539
+msgid "A licence identifier (eula-id) is required"
+msgstr "Requírese o identificador de licenza (eula-id)"
+
+#. TRANSLATORS: geeky error, 99.9999% of users won't see this
+#: ../client/pk-console.c:1550
+msgid "A transaction identifier (tid) is required"
+msgstr "Requírese o identificador de transacción (tid)"
+
+#. TRANSLATORS: The user did not specify a package name
+#: ../client/pk-console.c:1571
+msgid "A package name to resolve is required"
+msgstr "Requírese un nome de paquete para buscar"
+
+#. TRANSLATORS: The user did not specify a repository (software source) name
+#: ../client/pk-console.c:1582 ../client/pk-console.c:1593
+msgid "A repository name is required"
+msgstr "Requírese o nome do repositorio"
+
+#. TRANSLATORS: The user didn't provide any data
+#: ../client/pk-console.c:1604
+msgid "A repo name, parameter and value are required"
+msgstr "Requírese o nome do repositorio, o parámetro e o valor"
+
+#. TRANSLATORS: The user didn't specify what action to use
+#: ../client/pk-console.c:1621
+msgid "An action, e.g. 'update-system' is required"
+msgstr "Requírese unha acción, p.ex. «update-system»"
+
+#. TRANSLATORS: The user specified an invalid action
+#: ../client/pk-console.c:1628
+msgid "A correct role is required"
+msgstr "Requírese un rol correcto"
+
+#. TRANSLATORS: The user did not provide a package name
+#. TRANSLATORS: This is when the user fails to supply the package name
+#: ../client/pk-console.c:1638 ../client/pk-console.c:1652
+#: ../client/pk-console.c:1661 ../client/pk-console.c:1681
+#: ../client/pk-console.c:1690 ../client/pk-generate-pack.c:314
+msgid "A package name is required"
+msgstr "Requírese un nome de paquete"
+
+#. TRANSLATORS: each package "provides" certain things, e.g. mime(gstreamer-
+#. decoder-mp3), the user didn't specify it
+#: ../client/pk-console.c:1670
+msgid "A package provide string is required"
+msgstr "Requírese a cadea previda polo paquete"
+
+#. TRANSLATORS: The user did not provide a distro name
+#: ../client/pk-console.c:1714
+msgid "A distribution name is required"
+msgstr "Requírese o nome da distribución"
+
+#. TRANSLATORS: The user did not provide an upgrade type
+#: ../client/pk-console.c:1720
+msgid "An upgrade type is required, e.g. 'minimal', 'default' or 'complete'"
+msgstr ""
+"Requírese un tipo de anovación. p.ex «mínimal», «default» ou «complete»."
+
+#. TRANSLATORS: The user tried to use an unsupported option on the command
+#. line
+#: ../client/pk-console.c:1770
+#, c-format
+msgid "Option '%s' is not supported"
+msgstr "A opción «%s» non está admitida"
+
+#. TRANSLATORS: Generic failure of what they asked to do
+#: ../client/pk-console.c:1780
+msgid "Command failed"
+msgstr "Fallou a orde"
+
+#. TRANSLATORS: we can exclude certain packages (glibc) when we know they'll
+#. exist on the target
+#: ../client/pk-generate-pack.c:253
+msgid "Set the file name of dependencies to be excluded"
+msgstr "Estabeleza o nome do ficheiro de dependencias para excluír"
+
+#. TRANSLATORS: the output location
+#: ../client/pk-generate-pack.c:256
+msgid ""
+"The output file or directory (the current directory is used if omitted)"
+msgstr ""
+"O ficheiro ou directorio de saída (por omisión empregarase o actual "
+"directorio)"
+
+#. TRANSLATORS: put a list of packages in the pack
+#: ../client/pk-generate-pack.c:259
+msgid "The package to be put into the service pack"
+msgstr "O paquete será posto no paquete de servizo"
+
+#. TRANSLATORS: put all pending updates in the pack
+#: ../client/pk-generate-pack.c:262
+msgid "Put all updates available in the service pack"
+msgstr "Pór todas as actualizacións dispoñíbeis no paquete de servizo"
+
+#. TRANSLATORS: This is when the user fails to supply the correct arguments
+#: ../client/pk-generate-pack.c:298
+msgid "Neither --package or --updates option selected."
+msgstr "Non se seleccionou nin a opción --package nin --updates."
+
+#. TRANSLATORS: This is when the user fails to supply just one argument
+#: ../client/pk-generate-pack.c:306
+msgid "Both options selected."
+msgstr "Seleccionáronse ambas opcións."
+
+#. TRANSLATORS: This is when the user fails to supply the output
+#: ../client/pk-generate-pack.c:322
+msgid "A output directory or file name is required"
+msgstr "Requírese o nome do ficheiro ou directorio de saída"
+
+#. TRANSLATORS: This is when the daemon is not-installed/broken and fails to
+#. startup
+#: ../client/pk-generate-pack.c:340
+msgid "The daemon failed to startup"
+msgstr "O daemon fallou ao iniciar"
+
+#. TRANSLATORS: This is when the backend doesn't have the capability to get-
+#. depends
+#. TRANSLATORS: This is when the backend doesn't have the capability to
+#. download
+#: ../client/pk-generate-pack.c:351 ../client/pk-generate-pack.c:357
+msgid "The package manager cannot perform this type of operation."
+msgstr "O xestor de paquetes non é quen de realizar este tipo de operación."
+
+#. TRANSLATORS: This is when the distro didn't include libarchive support into
+#. PK
+#: ../client/pk-generate-pack.c:364
+msgid ""
+"Service packs cannot be created as PackageKit was not built with libarchive "
+"support."
+msgstr ""
+"Non é posíbel crear paquetes de servizo xa que PackageKit non foi construído"
+" con compatibilidade con «libarchive»."
+
+#. TRANSLATORS: the user specified an absolute path, but didn't get the
+#. extension correct
+#: ../client/pk-generate-pack.c:375
+msgid "If specifying a file, the service pack name must end with"
+msgstr ""
+"Se especifica un ficheiro, o nome do paquete de servizo debe rematar con"
+
+#. TRANSLATORS: This is when file already exists
+#: ../client/pk-generate-pack.c:391
+msgid "A pack with the same name already exists, do you want to overwrite it?"
+msgstr "Xa existe un paquete con ese nome, desexa sobrescribilo?"
+
+#. TRANSLATORS: This is when the pack was not overwritten
+#: ../client/pk-generate-pack.c:394
+msgid "The pack was not overwritten."
+msgstr "Non se sobrescribiu o paquete."
+
+#. TRANSLATORS: This is when the temporary directory cannot be created, the
+#. directory name follows
+#: ../client/pk-generate-pack.c:407
+msgid "Failed to create directory:"
+msgstr "Produciuse un fallo ao crear o directorio:"
+
+#. TRANSLATORS: This is when the list of packages from the remote computer
+#. cannot be opened
+#: ../client/pk-generate-pack.c:419
+msgid "Failed to open package list."
+msgstr "Produciuse un fallo ao abrir a lista de paquetes."
+
+#. TRANSLATORS: The package name is being matched up to available packages
+#: ../client/pk-generate-pack.c:428
+msgid "Finding package name."
+msgstr "Buscando o nome de paquete."
+
+#. TRANSLATORS: This is when the package cannot be found in any software
+#. source. The detailed error follows
+#: ../client/pk-generate-pack.c:432
+#, c-format
+msgid "Failed to find package '%s': %s"
+msgstr "Produciuse un fallo ao buscar o paquete «%s»: %s"
+
+#. TRANSLATORS: This is telling the user we are in the process of making the
+#. pack
+#: ../client/pk-generate-pack.c:440
+msgid "Creating service pack..."
+msgstr "Creando o paquete de servizo..."
+
+#. TRANSLATORS: we succeeded in making the file
+#: ../client/pk-generate-pack.c:455
+#, c-format
+msgid "Service pack created '%s'"
+msgstr "Paquete de servizo «%s» creado"
+
+#. TRANSLATORS: we failed to make te file
+#: ../client/pk-generate-pack.c:460
+#, c-format
+msgid "Failed to create '%s': %s"
+msgstr "Produciuse un fallo ao crear «%s»: %s"
+
+#: ../client/pk-monitor.c:284
+msgid "Failed to get daemon state"
+msgstr "Produciuse un fallo ao obter o estado do daemon"
+
+#: ../client/pk-monitor.c:349
+msgid "Failed to get properties"
+msgstr "Produciuse un fallo ao obter as propiedades"
+
+#. TRANSLATORS: this is a program that monitors PackageKit
+#: ../client/pk-monitor.c:387
+msgid "PackageKit Monitor"
+msgstr "Monitor de PackageKit"
+
+#. TRANSLATORS: when we are getting data from the daemon
+#: ../contrib/browser-plugin/pk-plugin-install.c:499
+msgid "Getting package information..."
+msgstr "Extraendo a información do paquete..."
+
+#. TRANSLATORS: run an applicaiton
+#: ../contrib/browser-plugin/pk-plugin-install.c:505
+#, c-format
+msgid "Run %s"
+msgstr "Executar %s"
+
+#. TRANSLATORS: show the installed version of a package
+#: ../contrib/browser-plugin/pk-plugin-install.c:511
+msgid "Installed version"
+msgstr "Versión instalada"
+
+#. TRANSLATORS: run the application now
+#: ../contrib/browser-plugin/pk-plugin-install.c:519
+#, c-format
+msgid "Run version %s now"
+msgstr "Executar agora a versión %s"
+
+#. TRANSLATORS: run the application now
+#: ../contrib/browser-plugin/pk-plugin-install.c:525
+msgid "Run now"
+msgstr "Executar agora"
+
+#. TRANSLATORS: update to a new version of the package
+#: ../contrib/browser-plugin/pk-plugin-install.c:531
+#, c-format
+msgid "Update to version %s"
+msgstr "Actualizar á versión %s"
+
+#. TRANSLATORS: To install a package
+#: ../contrib/browser-plugin/pk-plugin-install.c:537
+#, c-format
+msgid "Install %s now"
+msgstr "Instalar %s agora"
+
+#. TRANSLATORS: the version of the package
+#: ../contrib/browser-plugin/pk-plugin-install.c:540
+msgid "Version"
+msgstr "Versión"
+
+#. TRANSLATORS: noting found, so can't install
+#: ../contrib/browser-plugin/pk-plugin-install.c:545
+msgid "No packages found for your system"
+msgstr "Non se atopou ningún paquete para o seu sistema"
+
+#. TRANSLATORS: package is being installed
+#: ../contrib/browser-plugin/pk-plugin-install.c:550
+msgid "Installing..."
+msgstr "Instalando..."
+
+#. TRANSLATORS: downloading repo data so we can search
+#: ../contrib/command-not-found/pk-command-not-found.c:366
+msgid "Downloading details about the software sources."
+msgstr "Descargando detalles sobre as orixes de software"
+
+#. 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 ""
+"Descargando listas de ficheiros (isto podería tardar bastante tempo en "
+"completarse)."
+
+#. TRANSLATORS: waiting for native lock
+#: ../contrib/command-not-found/pk-command-not-found.c:374
+msgid "Waiting for package manager lock."
+msgstr "Agardando polo bloqueo do xestor de paquetes."
+
+#. TRANSLATORS: loading package cache so we can search
+#: ../contrib/command-not-found/pk-command-not-found.c:378
+msgid "Loading list of packages."
+msgstr "Cargando listas de paquetes."
+
+#. TRANSLATORS: we failed to find the package, this shouldn't happen
+#: ../contrib/command-not-found/pk-command-not-found.c:444
+msgid "Failed to search for file"
+msgstr "Produciuse un fallo ao buscar o ficheiro"
+
+#. TRANSLATORS: the transaction failed in a way we could not expect
+#: ../contrib/command-not-found/pk-command-not-found.c:456
+msgid "Getting the list of files failed"
+msgstr "Produciuse un fallo ao obter a lista de ficheiros"
+
+#. TRANSLATORS: we failed to launch the executable, the error follows
+#: ../contrib/command-not-found/pk-command-not-found.c:602
+msgid "Failed to launch:"
+msgstr "Produciuse un fallo ao iniciar:"
+
+#. TRANSLATORS: we failed to install the package
+#: ../contrib/command-not-found/pk-command-not-found.c:630
+msgid "Failed to install packages"
+msgstr "Produciuse un fallo durante a instalación dos paquetes"
+
+#. TRANSLATORS: tool that gets called when the command is not found
+#: ../contrib/command-not-found/pk-command-not-found.c:706
+msgid "PackageKit Command Not Found"
+msgstr "Non se atopou a orde PackageKit"
+
+#. TRANSLATORS: the prefix of all the output telling the user
+#. * why it's not executing. NOTE: this is lowercase to mimic
+#. * the style of bash itself -- apologies
+#: ../contrib/command-not-found/pk-command-not-found.c:739
+msgid "command not found"
+msgstr "non se atopou a orde"
+
+#. TRANSLATORS: tell the user what we think the command is
+#: ../contrib/command-not-found/pk-command-not-found.c:757
+msgid "Similar command is:"
+msgstr "Unha orde similar é:"
+
+#. TRANSLATORS: Ask the user if we should run the similar command
+#: ../contrib/command-not-found/pk-command-not-found.c:771
+msgid "Run similar command:"
+msgstr "Executar unha orde similar:"
+
+#. TRANSLATORS: show the user a list of commands that they could have meant
+#. TRANSLATORS: show the user a list of commands we could run
+#: ../contrib/command-not-found/pk-command-not-found.c:785
+#: ../contrib/command-not-found/pk-command-not-found.c:794
+msgid "Similar commands are:"
+msgstr "As ordes similares son:"
+
+#. TRANSLATORS: ask the user to choose a file to run
+#: ../contrib/command-not-found/pk-command-not-found.c:801
+msgid "Please choose a command to run"
+msgstr "Elixa unha orde para executar"
+
+#. TRANSLATORS: tell the user what package provides the command
+#: ../contrib/command-not-found/pk-command-not-found.c:819
+msgid "The package providing this file is:"
+msgstr "O paquete que fornece este ficheiro é:"
+
+#. TRANSLATORS: as the user if we want to install a package to provide the
+#. command
+#: ../contrib/command-not-found/pk-command-not-found.c:826
+#, c-format
+msgid "Install package '%s' to provide command '%s'?"
+msgstr "Instalar o paquete «%s» para fornecer a orde «%s»?"
+
+#. TRANSLATORS: Show the user a list of packages that provide this command
+#: ../contrib/command-not-found/pk-command-not-found.c:853
+msgid "Packages providing this file are:"
+msgstr "Os paquetes que fornecen este ficheiro son:"
+
+#. TRANSLATORS: Show the user a list of packages that they can install to
+#. provide this command
+#: ../contrib/command-not-found/pk-command-not-found.c:863
+msgid "Suitable packages are:"
+msgstr "Os posíbeis paquetes son:"
+
+#. get selection
+#. TRANSLATORS: ask the user to choose a file to install
+#: ../contrib/command-not-found/pk-command-not-found.c:872
+msgid "Please choose a package to install"
+msgstr "Elixa un paquete para instalar"
+
+#. TRANSLATORS: we are starting to install the packages
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:195
+msgid "Starting install"
+msgstr "Iniciando a instalación"
+
+#. TRANSLATORS: we couldn't find the package name, non-fatal
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:407
+#, c-format
+msgid "Failed to find the package %s, or already installed: %s"
+msgstr ""
+"Non foi posíbel atopar o paquete %s, é probábel que xa estea instalado: %s"
+
+#. command line argument, simulate what would be done, but don't actually do
+#. it
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:516
+msgid ""
+"Don't actually install any packages, only simulate what would be installed"
+msgstr "Non se instala ningún paquete, só se indica cales serían instalados"
+
+#. command line argument, do we skip packages that depend on the ones
+#. specified
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:519
+msgid "Do not install dependencies of the core packages"
+msgstr "Non se instalan dependencias dos paquetes principais"
+
+#. command line argument, do we operate quietly
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:522
+msgid "Do not display information or progress"
+msgstr "Non se mostra información nin progreso"
+
+#. TRANSLATORS: tool that gets called when the command is not found
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:540
+msgid "PackageKit Debuginfo Installer"
+msgstr "Instalador de depuración de erros de PackageKit"
+
+#. TRANSLATORS: the use needs to specify a list of package names on the
+#. command line
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:554
+#, c-format
+msgid "ERROR: Specify package names to install."
+msgstr "ERRO: Debe especificar os nomes dos paquetes a instalar."
+
+#. TRANSLATORS: we are getting the list of repositories
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:590
+#, c-format
+msgid "Getting sources list"
+msgstr "Obtendo a lista desde as orixes"
+
+#. TRANSLATORS: operation was not successful
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:600
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:675
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:759
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:803
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:870
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:914
+msgid "FAILED."
+msgstr "FALLOU."
+
+#. TRANSLATORS: all completed 100%
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:615
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:655
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:690
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:774
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:818
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:885
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:929
+#, c-format
+msgid "OK."
+msgstr "Aceptar."
+
+#. TRANSLATORS: tell the user what we found
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:618
+#, c-format
+msgid "Found %i enabled and %i disabled sources."
+msgstr "Atopáronse %i orixes activas e %i orixes desactivadas."
+
+#. TRANSLATORS: we're finding repositories that match out pattern
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:625
+#, c-format
+msgid "Finding debugging sources"
+msgstr "Buscando orixes para depuración"
+
+#. TRANSLATORS: tell the user what we found
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:658
+#, c-format
+msgid "Found %i disabled debuginfo repos."
+msgstr "Atopáronse %i repositorios desactivados para depuración."
+
+#. TRANSLATORS: we're now enabling all the debug sources we found
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:665
+#, c-format
+msgid "Enabling debugging sources"
+msgstr "Activando orixes para depuración"
+
+#. TRANSLATORS: tell the user how many we enabled
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:693
+#, c-format
+msgid "Enabled %i debugging sources."
+msgstr "Activáronse %i orixes para depuración."
+
+#. TRANSLATORS: we're now finding packages that match in all the repos
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:700
+#, c-format
+msgid "Finding debugging packages"
+msgstr "Buscando paquetes de depuración."
+
+#. TRANSLATORS: we couldn't find the package name, non-fatal
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:712
+#, c-format
+msgid "Failed to find the package %s: %s"
+msgstr "Produciuse un fallo ao buscar o paquete %s: %s"
+
+#. TRANSLATORS: we couldn't find the debuginfo package name, non-fatal
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:735
+#, c-format
+msgid "Failed to find the debuginfo package %s: %s"
+msgstr "Produciuse un fallo ao buscar o paquete de depuración %s: %s"
+
+#. TRANSLATORS: no debuginfo packages could be found to be installed
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:763
+#, c-format
+msgid "Found no packages to install."
+msgstr "Non se atoparon paquetes para instalar."
+
+#. TRANSLATORS: tell the user we found some packages, and then list them
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:777
+#, c-format
+msgid "Found %i packages:"
+msgstr "Atopáronse %i paquetes:"
+
+#. TRANSLATORS: tell the user we are searching for deps
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:793
+#, c-format
+msgid "Finding packages that depend on these packages"
+msgstr "Buscando paquetes que dependan deses paquetes."
+
+#. TRANSLATORS: could not install, detailed error follows
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:806
+#, c-format
+msgid "Could not find dependant packages: %s"
+msgstr "Non foi posíbel atopar paquetes dependentes: %s"
+
+#. TRANSLATORS: tell the user we found some more packages
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:822
+#, c-format
+msgid "Found %i extra packages."
+msgstr "Atopáronse %i paquetes extra."
+
+#. TRANSLATORS: tell the user we found some more packages
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:826
+#, c-format
+msgid "No extra packages required."
+msgstr "Non son necesarios paquetes extra."
+
+#. TRANSLATORS: tell the user we found some packages (and deps), and then list
+#. them
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:835
+#, c-format
+msgid "Found %i packages to install:"
+msgstr "Atopáronse %i paquetes para instalar:"
+
+#. TRANSLATORS: simulate mode is a testing mode where we quit before the
+#. action
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:848
+#, c-format
+msgid "Not installing packages in simulate mode"
+msgstr "En modo simulación non se instalan paquetes"
+
+#. TRANSLATORS: we are now installing the debuginfo packages we found earlier
+#. TRANSLATORS: transaction state, installing packages
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:860
+#: ../lib/packagekit-glib2/pk-console-shared.c:287
+#, c-format
+msgid "Installing packages"
+msgstr "Instalando os paquetes"
+
+#. TRANSLATORS: could not install, detailed error follows
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:873
+#, c-format
+msgid "Could not install packages: %s"
+msgstr "Non foi posíbel instalar os paquetes: %s"
+
+#. TRANSLATORS: we are now disabling all debuginfo repos we previously enabled
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:905
+#, c-format
+msgid "Disabling sources previously enabled"
+msgstr "Desactivando orixes que foran activadas anteriormente"
+
+#. TRANSLATORS: no debuginfo packages could be found to be installed, detailed
+#. error follows
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:917
+#, c-format
+msgid "Could not disable the debugging sources: %s"
+msgstr "Non é posíbel desactivar as orixes para depuración:%s"
+
+#. TRANSLATORS: we disabled all the debugging repos that we enabled before
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:932
+#, c-format
+msgid "Disabled %i debugging sources."
+msgstr "Desactiváronse %i orixes para depuración."
+
+#. TRANSLATORS: couldn't open device to write
+#: ../contrib/device-rebind/pk-device-rebind.c:62
+msgid "Failed to open file"
+msgstr "Produciuse un fallo ao abrir o ficheiro"
+
+#. TRANSLATORS: could not write to the device
+#: ../contrib/device-rebind/pk-device-rebind.c:71
+msgid "Failed to write to the file"
+msgstr "Produciuse un fallo ao escribir no ficheiro"
+
+#. 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 "Produciuse un fallo ao escribir no dispositivo"
+
+#. TRANSLATORS: the device could not be found in sysfs
+#: ../contrib/device-rebind/pk-device-rebind.c:176
+msgid "Device could not be found"
+msgstr "Non foi posíbel atopar o dispositivo"
+
+#. TRANSLATORS: we failed to release the current driver
+#: ../contrib/device-rebind/pk-device-rebind.c:203
+msgid "Failed to unregister driver"
+msgstr "Produciuse un fallo ao quitar do rexistro o controlador"
+
+#. TRANSLATORS: we failed to bind the old driver
+#: ../contrib/device-rebind/pk-device-rebind.c:212
+msgid "Failed to register driver"
+msgstr "Produciuse un fallo ao rexistrar o controlador"
+
+#. 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 "Non foi posíbel atopar a ruta ao dispositivo"
+
+#. TRANSLATORS: user did not specify a valid device sysfs path
+#: ../contrib/device-rebind/pk-device-rebind.c:269
+msgid "Incorrect device path specified"
+msgstr "Especificouse unha ruta de dispositivo incorrecta"
+
+#: ../contrib/device-rebind/pk-device-rebind.c:294
+msgid "Show extra debugging information"
+msgstr "Mostrar información adicional de depuración"
+
+#. 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 "Non afecta ao hardware, só simula o que se faría"
+
+#. TRANSLATORS: command line option: a list of files to install
+#: ../contrib/device-rebind/pk-device-rebind.c:300
+msgid "Device paths"
+msgstr "Rutas de dispositivo"
+
+#. 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 "Recargador de dispositivo de 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 "Precisa especificar polo menos unha ruta de dispositivo correcta"
+
+#. 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 "Este script só pode ser empregado polo usuario administrador (root)"
+
+#. TRANSLATORS: we're going to verify the path first
+#: ../contrib/device-rebind/pk-device-rebind.c:342
+msgid "Verifying device path"
+msgstr "Verificando a ruta ao dispositivo"
+
+#. 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 "Produciuse un fallo ao verificar a ruta do dispositivo"
+
+#. TRANSLATORS: we're going to try
+#: ../contrib/device-rebind/pk-device-rebind.c:361
+msgid "Attempting to rebind device"
+msgstr "Tentando volver a asociar o dispositivo"
+
+#. TRANSLATORS: we failed to release the current driver
+#: ../contrib/device-rebind/pk-device-rebind.c:366
+msgid "Failed to rebind device"
+msgstr "Produciuse un fallo ao volver a asociar o dispositivo"
+
+#: ../data/packagekit-catalog.xml.in.h:1
+msgid "PackageKit Catalog"
+msgstr "Catálogo de PackageKit"
+
+#: ../data/packagekit-package-list.xml.in.h:1
+msgid "PackageKit Package List"
+msgstr "Lista de paquetes de PackageKit"
+
+#: ../data/packagekit-servicepack.xml.in.h:1
+msgid "PackageKit Service Pack"
+msgstr "Paquete de servizo de PackageKit"
+
+#: ../lib/packagekit-glib2/pk-console-shared.c:63
+#, c-format
+msgid "Please enter a number from 1 to %i: "
+msgstr "Introduza un número do 1 ao %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:189
+msgid "More than one package matches:"
+msgstr "Coincide máis dun paquete:"
+
+#. TRANSLATORS: This finds out which package in the list to use
+#: ../lib/packagekit-glib2/pk-console-shared.c:200
+msgid "Please choose the correct package: "
+msgstr "Elixa o paquete correcto: "
+
+#. TRANSLATORS: This is when the transaction status is not known
+#: ../lib/packagekit-glib2/pk-console-shared.c:255
+msgid "Unknown state"
+msgstr "Estado descoñecido"
+
+#. TRANSLATORS: transaction state, the daemon is in the process of starting
+#: ../lib/packagekit-glib2/pk-console-shared.c:259
+msgid "Starting"
+msgstr "Comezando"
+
+#. TRANSLATORS: transaction state, the transaction is waiting for another to
+#. complete
+#: ../lib/packagekit-glib2/pk-console-shared.c:263
+msgid "Waiting in queue"
+msgstr "Agardando na cola"
+
+#. TRANSLATORS: transaction state, just started
+#: ../lib/packagekit-glib2/pk-console-shared.c:267
+msgid "Running"
+msgstr "Executando"
+
+#. TRANSLATORS: transaction state, is querying data
+#: ../lib/packagekit-glib2/pk-console-shared.c:271
+msgid "Querying"
+msgstr "Consultando"
+
+#. TRANSLATORS: transaction state, getting data from a server
+#: ../lib/packagekit-glib2/pk-console-shared.c:275
+msgid "Getting information"
+msgstr "Obtendo información"
+
+#. TRANSLATORS: transaction state, removing packages
+#: ../lib/packagekit-glib2/pk-console-shared.c:279
+msgid "Removing packages"
+msgstr "Retirando paquetes"
+
+#. TRANSLATORS: transaction state, downloading package files
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:283
+#: ../lib/packagekit-glib2/pk-console-shared.c:661
+msgid "Downloading packages"
+msgstr "Descargando os paquetes"
+
+#. TRANSLATORS: transaction state, refreshing internal lists
+#: ../lib/packagekit-glib2/pk-console-shared.c:291
+msgid "Refreshing software list"
+msgstr "Actualizando a lista de software"
+
+#. TRANSLATORS: transaction state, installing updates
+#: ../lib/packagekit-glib2/pk-console-shared.c:295
+msgid "Installing updates"
+msgstr "Instalando actualizacións"
+
+#. TRANSLATORS: transaction state, removing old packages, and cleaning config
+#. files
+#: ../lib/packagekit-glib2/pk-console-shared.c:299
+msgid "Cleaning up packages"
+msgstr "Limpando paquetes"
+
+#. TRANSLATORS: transaction state, obsoleting old packages
+#: ../lib/packagekit-glib2/pk-console-shared.c:303
+msgid "Obsoleting packages"
+msgstr "Paquetes obsoletos"
+
+#. TRANSLATORS: transaction state, checking the transaction before we do it
+#: ../lib/packagekit-glib2/pk-console-shared.c:307
+msgid "Resolving dependencies"
+msgstr "Buscando as dependencias"
+
+#. TRANSLATORS: transaction state, checking if we have all the security keys
+#. for the operation
+#: ../lib/packagekit-glib2/pk-console-shared.c:311
+msgid "Checking signatures"
+msgstr "Comprobando as sinaturas"
+
+#. TRANSLATORS: transaction state, when we return to a previous system state
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:315
+#: ../lib/packagekit-glib2/pk-console-shared.c:621
+msgid "Rolling back"
+msgstr "Volvendo atrás"
+
+#. TRANSLATORS: transaction state, when we're doing a test transaction
+#: ../lib/packagekit-glib2/pk-console-shared.c:319
+msgid "Testing changes"
+msgstr "Probando os cambios"
+
+#. TRANSLATORS: transaction state, when we're writing to the system package
+#. database
+#: ../lib/packagekit-glib2/pk-console-shared.c:323
+msgid "Committing changes"
+msgstr "Realizando os cambios"
+
+#. TRANSLATORS: transaction state, requesting data from a server
+#: ../lib/packagekit-glib2/pk-console-shared.c:327
+msgid "Requesting data"
+msgstr "Solicitando os datos"
+
+#. TRANSLATORS: transaction state, all done!
+#: ../lib/packagekit-glib2/pk-console-shared.c:331
+msgid "Finished"
+msgstr "Rematado"
+
+#. TRANSLATORS: transaction state, in the process of cancelling
+#: ../lib/packagekit-glib2/pk-console-shared.c:335
+msgid "Cancelling"
+msgstr "Cancelando"
+
+#. TRANSLATORS: transaction state, downloading metadata
+#: ../lib/packagekit-glib2/pk-console-shared.c:339
+msgid "Downloading repository information"
+msgstr "Descargando a información do repositorio"
+
+#. TRANSLATORS: transaction state, downloading metadata
+#: ../lib/packagekit-glib2/pk-console-shared.c:343
+msgid "Downloading list of packages"
+msgstr "Descargando a lista de paquetes"
+
+#. TRANSLATORS: transaction state, downloading metadata
+#: ../lib/packagekit-glib2/pk-console-shared.c:347
+msgid "Downloading file lists"
+msgstr "Descargando as listas de ficheiros"
+
+#. TRANSLATORS: transaction state, downloading metadata
+#: ../lib/packagekit-glib2/pk-console-shared.c:351
+msgid "Downloading lists of changes"
+msgstr "Descargando as lista de cambios"
+
+#. TRANSLATORS: transaction state, downloading metadata
+#: ../lib/packagekit-glib2/pk-console-shared.c:355
+msgid "Downloading groups"
+msgstr "Descargando os grupos"
+
+#. TRANSLATORS: transaction state, downloading metadata
+#: ../lib/packagekit-glib2/pk-console-shared.c:359
+msgid "Downloading update information"
+msgstr "Descargando a información da actualización"
+
+#. TRANSLATORS: transaction state, repackaging delta files
+#: ../lib/packagekit-glib2/pk-console-shared.c:363
+msgid "Repackaging files"
+msgstr "Empaquetando de novo os ficheiros"
+
+#. TRANSLATORS: transaction state, loading databases
+#: ../lib/packagekit-glib2/pk-console-shared.c:367
+msgid "Loading cache"
+msgstr "Cargando a caché"
+
+#. TRANSLATORS: transaction state, scanning for running processes
+#: ../lib/packagekit-glib2/pk-console-shared.c:371
+msgid "Scanning applications"
+msgstr "Escaneando aplicativos"
+
+#. TRANSLATORS: transaction state, generating a list of packages installed on
+#. the system
+#: ../lib/packagekit-glib2/pk-console-shared.c:375
+msgid "Generating package lists"
+msgstr "Xerando as listas de paquetes"
+
+#. TRANSLATORS: transaction state, when we're waiting for the native tools to
+#. exit
+#: ../lib/packagekit-glib2/pk-console-shared.c:379
+msgid "Waiting for package manager lock"
+msgstr "Agardando polo bloqueo do xestor de paquetes"
+
+#. TRANSLATORS: transaction state, waiting for user to type in a password
+#: ../lib/packagekit-glib2/pk-console-shared.c:383
+msgid "Waiting for authentication"
+msgstr "Agardando pola autenticación"
+
+#. TRANSLATORS: transaction state, we are updating the list of processes
+#: ../lib/packagekit-glib2/pk-console-shared.c:387
+msgid "Updating running applications"
+msgstr "Actualizando aplicativos executados"
+
+#. TRANSLATORS: transaction state, we are checking executable files currently
+#. in use
+#: ../lib/packagekit-glib2/pk-console-shared.c:391
+msgid "Checking applications in use"
+msgstr "Comprobando aplicativos en uso"
+
+#. TRANSLATORS: transaction state, we are checking for libraries currently in
+#. use
+#: ../lib/packagekit-glib2/pk-console-shared.c:395
+msgid "Checking libraries in use"
+msgstr "Comprobando bibliotecas en uso"
+
+#. TRANSLATORS: transaction state, we are copying package files before or
+#. after the transaction
+#: ../lib/packagekit-glib2/pk-console-shared.c:399
+msgid "Copying files"
+msgstr "Copiando ficheiros"
+
+#. TRANSLATORS: The type of update
+#: ../lib/packagekit-glib2/pk-console-shared.c:417
+msgid "Trivial"
+msgstr "Trivial"
+
+#. TRANSLATORS: The type of update
+#: ../lib/packagekit-glib2/pk-console-shared.c:421
+msgid "Normal"
+msgstr "Normal"
+
+#. TRANSLATORS: The type of update
+#: ../lib/packagekit-glib2/pk-console-shared.c:425
+msgid "Important"
+msgstr "Importante"
+
+#. TRANSLATORS: The type of update
+#: ../lib/packagekit-glib2/pk-console-shared.c:429
+msgid "Security"
+msgstr "Seguranza"
+
+#. TRANSLATORS: The type of update
+#: ../lib/packagekit-glib2/pk-console-shared.c:433
+msgid "Bug fix "
+msgstr "Solución de erros "
+
+#. TRANSLATORS: The type of update
+#: ../lib/packagekit-glib2/pk-console-shared.c:437
+msgid "Enhancement"
+msgstr "Optimización"
+
+#. TRANSLATORS: The type of update
+#: ../lib/packagekit-glib2/pk-console-shared.c:441
+msgid "Blocked"
+msgstr "Bloqueado"
+
+#. TRANSLATORS: The state of a package
+#. TRANSLATORS: The action of the package, in past tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:446
+#: ../lib/packagekit-glib2/pk-console-shared.c:519
+msgid "Installed"
+msgstr "Instalado"
+
+#. TRANSLATORS: The state of a package, i.e. not installed
+#: ../lib/packagekit-glib2/pk-console-shared.c:451
+msgid "Available"
+msgstr "Dispoñíbel"
+
+#. TRANSLATORS: The action of the package, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:469
+msgid "Downloading"
+msgstr "Descargando"
+
+#. TRANSLATORS: The action of the package, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:473
+msgid "Updating"
+msgstr "Actualizando"
+
+#. TRANSLATORS: The action of the package, in present tense
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:477
+#: ../lib/packagekit-glib2/pk-console-shared.c:597
+msgid "Installing"
+msgstr "Instalando"
+
+#. TRANSLATORS: The action of the package, in present tense
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:481
+#: ../lib/packagekit-glib2/pk-console-shared.c:593
+msgid "Removing"
+msgstr "Retirando"
+
+#. TRANSLATORS: The action of the package, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:485
+msgid "Cleaning up"
+msgstr "Limpando"
+
+#. TRANSLATORS: The action of the package, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:489
+msgid "Obsoleting"
+msgstr "Marcando como obsoleto"
+
+#. TRANSLATORS: The action of the package, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:493
+msgid "Reinstalling"
+msgstr "Reinstalando"
+
+#. TRANSLATORS: The action of the package, in past tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:511
+msgid "Downloaded"
+msgstr "Descargado"
+
+#. TRANSLATORS: The action of the package, in past tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:523
+msgid "Removed"
+msgstr "Retirado"
+
+#. TRANSLATORS: The action of the package, in past tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:527
+msgid "Cleaned up"
+msgstr "Limpo"
+
+#. TRANSLATORS: The action of the package, in past tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:531
+msgid "Obsoleted"
+msgstr "Obsoleto"
+
+#. TRANSLATORS: The action of the package, in past tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:535
+msgid "Reinstalled"
+msgstr "Reinstalado"
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:553
+msgid "Unknown role type"
+msgstr "Tipo de rol descoñecido"
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:557
+msgid "Getting dependencies"
+msgstr "Obtendo as dependencias"
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:561
+msgid "Getting update details"
+msgstr "Obtendo detalles da actualización"
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:565
+msgid "Getting details"
+msgstr "Obtendo os detalles"
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:569
+msgid "Getting requires"
+msgstr "Obtendo os requisitos"
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:573
+msgid "Getting updates"
+msgstr "Obtendo as actualizacións"
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:577
+msgid "Searching by details"
+msgstr "Buscando por detalles"
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:581
+msgid "Searching by file"
+msgstr "Buscando por ficheiro"
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:585
+msgid "Searching groups"
+msgstr "Buscando os grupos"
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:589
+msgid "Searching by name"
+msgstr "Buscando por nome"
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:601
+msgid "Installing files"
+msgstr "Instalando ficheiros"
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:605
+msgid "Refreshing cache"
+msgstr "Actualizando a caché"
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:609
+msgid "Updating packages"
+msgstr "Actualizando os paquetes"
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:613
+msgid "Updating system"
+msgstr "Actualizando o sistema"
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:617
+msgid "Canceling"
+msgstr "Cancelando"
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:625
+msgid "Getting repositories"
+msgstr "Obtendo repositorios"
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:629
+msgid "Enabling repository"
+msgstr "Activando o repositorio"
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:633
+msgid "Setting data"
+msgstr "Configurando os datos"
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:637
+msgid "Resolving"
+msgstr "Resolvendo"
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:641
+msgid "Getting file list"
+msgstr "Obtendo a lista de ficheiros"
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:645
+msgid "Getting provides"
+msgstr "Obtendo o que fornece"
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:649
+msgid "Installing signature"
+msgstr "Instalando a sinatura"
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:653
+msgid "Getting packages"
+msgstr "Obtendo os paquetes"
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:657
+msgid "Accepting EULA"
+msgstr "Aceptando a EULA"
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:665
+msgid "Getting upgrades"
+msgstr "Obtendo anovacións"
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:669
+msgid "Getting categories"
+msgstr "Obtendo as categorías"
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:673
+msgid "Getting transactions"
+msgstr "Obtendo as transaccións"
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:677
+#: ../lib/packagekit-glib2/pk-console-shared.c:681
+msgid "Simulating install"
+msgstr "Simulando a instalación"
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:685
+msgid "Simulating remove"
+msgstr "Simulando a retirada"
+
+#. TRANSLATORS: The role of the transaction, in present tense
+#: ../lib/packagekit-glib2/pk-console-shared.c:689
+msgid "Simulating update"
+msgstr "Simulando a actualización"
+
+#. TRANSLATORS: turn on all debugging
+#: ../lib/packagekit-glib2/pk-debug.c:133
+msgid "Show debugging information for all files"
+msgstr "Mostrar a información de depuración para todos os ficheiros"
+
+#: ../lib/packagekit-glib2/pk-debug.c:201
+msgid "Debugging Options"
+msgstr "Opcións de depuración"
+
+#: ../lib/packagekit-glib2/pk-debug.c:201
+msgid "Show debugging options"
+msgstr "Mostrar as opcións de depuración"
+
+#. TRANSLATORS: ask the user if they are comfortable installing insecure
+#. packages
+#: ../lib/packagekit-glib2/pk-task-text.c:67
+msgid "Do you want to allow installing of unsigned software?"
+msgstr "Desexa permitir a instalación de software que non estea asinado?"
+
+#. TRANSLATORS: tell the user we've not done anything
+#: ../lib/packagekit-glib2/pk-task-text.c:72
+msgid "The unsigned software will not be installed."
+msgstr "Non instalar o software non asinado."
+
+#. TRANSLATORS: the package repository is signed by a key that is not
+#. recognised
+#: ../lib/packagekit-glib2/pk-task-text.c:121
+msgid "Software source signature required"
+msgstr "Requírese da sinatura da orixe do software"
+
+#. TRANSLATORS: the package repository name
+#: ../lib/packagekit-glib2/pk-task-text.c:127
+msgid "Software source name"
+msgstr "Nome da orixe do software"
+
+#. TRANSLATORS: the key URL
+#: ../lib/packagekit-glib2/pk-task-text.c:130
+msgid "Key URL"
+msgstr "URL da chave"
+
+#. TRANSLATORS: the username of the key
+#: ../lib/packagekit-glib2/pk-task-text.c:133
+msgid "Key user"
+msgstr "Usuario da chave"
+
+#. TRANSLATORS: the key ID, usually a few hex digits
+#: ../lib/packagekit-glib2/pk-task-text.c:136
+msgid "Key ID"
+msgstr "ID da chave"
+
+#. TRANSLATORS: the key fingerprint, again, yet more hex
+#: ../lib/packagekit-glib2/pk-task-text.c:139
+msgid "Key fingerprint"
+msgstr "Pegada da chave"
+
+#. TRANSLATORS: the timestamp (a bit like a machine readable time)
+#: ../lib/packagekit-glib2/pk-task-text.c:142
+msgid "Key Timestamp"
+msgstr "Data e hora da chave"
+
+#. TRANSLATORS: ask the user if they want to import
+#: ../lib/packagekit-glib2/pk-task-text.c:155
+msgid "Do you accept this signature?"
+msgstr "Acepta esta sinatura?"
+
+#. TRANSLATORS: tell the user we've not done anything
+#: ../lib/packagekit-glib2/pk-task-text.c:160
+msgid "The signature was not accepted."
+msgstr "A sinatura non foi aceptada."
+
+#. TRANSLATORS: this is another name for a software licence that has to be
+#. read before installing
+#: ../lib/packagekit-glib2/pk-task-text.c:203
+msgid "End user licence agreement required"
+msgstr "Precisase do acordo de licenza de usuario final"
+
+#. TRANSLATORS: the EULA text itself (long and boring)
+#: ../lib/packagekit-glib2/pk-task-text.c:212
+msgid "Agreement"
+msgstr "Acordo"
+
+#. TRANSLATORS: ask the user if they've read and accepted the EULA
+#: ../lib/packagekit-glib2/pk-task-text.c:221
+msgid "Do you accept this agreement?"
+msgstr "Acepta este acordo?"
+
+#. TRANSLATORS: tell the user we've not done anything
+#: ../lib/packagekit-glib2/pk-task-text.c:226
+msgid "The agreement was not accepted."
+msgstr "O acordo non foi aceptado."
+
+#. TRANSLATORS: the user needs to change media inserted into the computer
+#: ../lib/packagekit-glib2/pk-task-text.c:265
+msgid "Media change required"
+msgstr "É necesario cambiar o soporte"
+
+#. TRANSLATORS: the type, e.g. DVD, CD, etc
+#: ../lib/packagekit-glib2/pk-task-text.c:268
+msgid "Media type"
+msgstr "Tipo de soporte"
+
+#. TRANSLATORS: the media label, usually like 'disk-1of3'
+#: ../lib/packagekit-glib2/pk-task-text.c:271
+msgid "Media label"
+msgstr "Etiqueta do soporte"
+
+#. TRANSLATORS: the media description, usually like 'Fedora 12 disk 5'
+#: ../lib/packagekit-glib2/pk-task-text.c:274
+msgid "Text"
+msgstr "Texto"
+
+#. TRANSLATORS: ask the user to insert the media
+#: ../lib/packagekit-glib2/pk-task-text.c:280
+msgid "Please insert the correct media"
+msgstr "Insira o soporte correcto"
+
+#. TRANSLATORS: tell the user we've not done anything as they are lazy
+#: ../lib/packagekit-glib2/pk-task-text.c:285
+msgid "The correct media was not inserted."
+msgstr "Non foi inserido o soporte correcto."
+
+#. TRANSLATORS: When processing, we might have to remove other dependencies
+#: ../lib/packagekit-glib2/pk-task-text.c:300
+msgid "The following packages have to be removed:"
+msgstr "Retiraranse os seguintes paquetes:"
+
+#. TRANSLATORS: When processing, we might have to install other dependencies
+#: ../lib/packagekit-glib2/pk-task-text.c:305
+msgid "The following packages have to be installed:"
+msgstr "Teñen de ser instalados os seguintes paquetes:"
+
+#. TRANSLATORS: When processing, we might have to update other dependencies
+#: ../lib/packagekit-glib2/pk-task-text.c:310
+msgid "The following packages have to be updated:"
+msgstr "Teñen de ser actualizados os seguintes paquetes:"
+
+#. TRANSLATORS: When processing, we might have to reinstall other dependencies
+#: ../lib/packagekit-glib2/pk-task-text.c:315
+msgid "The following packages have to be reinstalled:"
+msgstr "Teñen de ser reinstalados os seguintes paquetes:"
+
+#. TRANSLATORS: When processing, we might have to downgrade other dependencies
+#: ../lib/packagekit-glib2/pk-task-text.c:320
+msgid "The following packages have to be downgraded:"
+msgstr "Teñen de ser revertidos os seguintes paquetes:"
+
+#. TRANSLATORS: ask the user if the proposed changes are okay
+#: ../lib/packagekit-glib2/pk-task-text.c:380
+msgid "Proceed with changes?"
+msgstr "Proceder a facer as modificacións?"
+
+#. TRANSLATORS: tell the user we didn't do anything
+#: ../lib/packagekit-glib2/pk-task-text.c:385
+msgid "The transaction did not proceed."
+msgstr "Non foi posíbel realizar a transacción."
+
+#. SECURITY:
+#. - Normal users do not require admin authentication to accept new
+#. licence agreements.
+#. - Change this to 'auth_admin' for environments where users should not
+#. be given the option to make legal decisions.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:7
+msgid "Accept EULA"
+msgstr "Aceptar a EULA"
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:8
+msgid "Authentication is required to accept a EULA"
+msgstr "Requírese a autenticación para aceptar unha EULA"
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:9
+msgid ""
+"Authentication is required to cancel a task that was not started by yourself"
+msgstr ""
+"Requírese a autenticación para cancelar unha tarefa que non foi iniciada por"
+" vostede."
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:10
+msgid "Authentication is required to change software source parameters"
+msgstr ""
+"Requírese a autenticación para cambiar os parámetros da orixe do software"
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:11
+msgid ""
+"Authentication is required to change the location used to decompress "
+"packages"
+msgstr ""
+"Requírese a autenticación para modificar a localización empregada para "
+"descomprimir paquetes"
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:12
+msgid ""
+"Authentication is required to consider a key used for signing packages as "
+"trusted"
+msgstr ""
+"Requírese a autenticación para fiar nunha chave empregada para asinar "
+"paquetes"
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:13
+msgid "Authentication is required to install a signed package"
+msgstr "Requírese a autenticación para instalar un paquete asinado"
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:14
+msgid "Authentication is required to install an untrusted package"
+msgstr "Requírese a autenticación para instalar un paquete non fiábel"
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:15
+msgid "Authentication is required to refresh the system sources"
+msgstr "Requírese a autenticación para actualizar as fontes do sistema"
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:16
+msgid "Authentication is required to reload the device with a new driver"
+msgstr ""
+"Requírese a autenticación para recargar o dispositivo cun controlador novo"
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:17
+msgid "Authentication is required to remove packages"
+msgstr "Requírese a autenticación para retirar paquetes"
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:18
+msgid "Authentication is required to rollback a transaction"
+msgstr "Requírese a autenticación para desfacer una transacción"
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:19
+msgid ""
+"Authentication is required to set the network proxy used for downloading "
+"packages"
+msgstr ""
+"Requírese a autenticación para cambiar o proxy de rede empregado para "
+"descargar paquetes"
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:20
+msgid "Authentication is required to update packages"
+msgstr "Requírese a autenticación para actualizar paquetes"
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:21
+msgid "Authentication is required to upgrade the operating system"
+msgstr "Requírese a autenticación para actualizar o sistema operativo"
+
+#. SECURITY:
+#. - Normal users are allowed to cancel their own task without
+#. authentication, but a different user id needs the admin password
+#. to cancel another users task.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:27
+msgid "Cancel foreign task"
+msgstr "Cancelar tarefa externa"
+
+#. SECURITY:
+#. - This is used when users want to install to a different prefix, for
+#. instance to a LTSP image or a virtual machine.
+#. - This could be used to overwrite files not owned by the user using
+#. a carefully created package file.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:34
+msgid "Change location that packages are installed"
+msgstr "Cambiar a localización onde instalar os paquetes"
+
+#. SECURITY:
+#. - Normal users require admin authentication to enable or disable
+#. software sources as this can be used to enable new updates or
+#. install different versions of software.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:40
+msgid "Change software source parameters"
+msgstr "Cambiar os parámetros da orixe do software"
+
+#. SECURITY:
+#. - Normal users do not need authentication to install signed packages
+#. from signed repositories, as this cannot exploit a system.
+#. - Paranoid users (or parents!) can change this to 'auth_admin' or
+#. 'auth_admin_keep'.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:47
+msgid "Install signed package"
+msgstr "Instalar paquete asinado"
+
+#. SECURITY:
+#. - Normal users require admin authentication to install untrusted or
+#. unrecognised packages, as allowing users to do this without a
+#. password would be a massive security hole.
+#. - This is not retained as each package should be authenticated.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:54
+msgid "Install untrusted local file"
+msgstr "Instalar un ficheiro local sen confianza"
+
+#. SECURITY:
+#. - Normal users do not require admin authentication to refresh the
+#. cache, as this doesn't actually install or remove software.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:59
+msgid "Refresh system sources"
+msgstr "Actualizar as orixes do sistema"
+
+#. SECURITY:
+#. - Normal users require admin authentication to rebind a driver
+#. so that it works after we install firmware.
+#. - This should not be set to 'yes' as unprivileged users could then
+#. try to rebind drivers in use, for instance security authentication
+#. devices.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:67
+msgid "Reload a device"
+msgstr "Recargar un dispositivo"
+
+#. SECURITY:
+#. - Normal users require admin authentication to remove packages as
+#. this can make the system unbootable or stop other applications from
+#. working.
+#. - Be sure to close the tool used to remove the packages after the
+#. admin authentication has been obtained, otherwise packages can still
+#. be removed. If this is not possible, change this authentication to
+#. 'auth_admin'.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:77
+msgid "Remove package"
+msgstr "Retirar paquete"
+
+#. 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:83
+msgid "Rollback to a previous transaction"
+msgstr "Desfacer ata unha transacción anterior"
+
+#. SECURITY:
+#. - Normal users do not require admin authentication to set the proxy
+#. used for downloading packages.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:88
+msgid "Set network proxy"
+msgstr "Estabelecer o proxy da rede"
+
+#. SECURITY:
+#. - Normal users require admin authentication to add signing keys.
+#. - This implies adding an explicit trust, and should not be granted
+#. without a secure authentication.
+#. - This is not kept as each package should be authenticated.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:95
+msgid "Trust a key used for signing packages"
+msgstr "Confiar nunha chave empregada para asinar paquetes"
+
+#. SECURITY:
+#. - Normal users do not require admin authentication to update the
+#. system as the packages will be signed, and the action is required
+#. to update the system when unattended.
+#. - Changing this to anything other than 'yes' will break unattended
+#. updates.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:103
+msgid "Update packages"
+msgstr "Actualizar paquetes"
+
+#. SECURITY:
+#. - Normal users require admin authentication to upgrade the disto as
+#. this can make the system unbootable or stop other applications from
+#. working.
+#. 
+#: ../policy/org.freedesktop.packagekit.policy.in.h:109
+msgid "Upgrade System"
+msgstr "Actualizar sistema"
+
+#. TRANSLATORS: failed due to DBus security
+#: ../src/pk-main.c:87
+msgid "Startup failed due to security policies on this machine."
+msgstr "O arranque fallou debido ás políticas de seguranza nesta máquina."
+
+#. TRANSLATORS: only two ways this can fail...
+#: ../src/pk-main.c:89
+msgid "This can happen for two reasons:"
+msgstr "Isto pode acontecer por dúas razóns:"
+
+#. 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 "O usuario correcto non esta iniciando o executábel (xeralmente root)"
+
+#. TRANSLATORS: or we are installed in a prefix
+#: ../src/pk-main.c:93
+msgid ""
+"The org.freedesktop.PackageKit.conf file is not installed in the system "
+"directory:"
+msgstr ""
+"O ficheiro org.freedesktop.PackageKit.conf non está instalado no directorio "
+"do sistema:"
+
+#. TRANSLATORS: a backend is the system package tool, e.g. yum, apt
+#: ../src/pk-main.c:200
+msgid "Packaging backend to use, e.g. dummy"
+msgstr "Administrador de paquetes que usar, p.ex., dummy"
+
+#. TRANSLATORS: if we should run in the background
+#: ../src/pk-main.c:203
+msgid "Daemonize and detach from the terminal"
+msgstr "Daemonizar e desacoplar do terminal"
+
+#. TRANSLATORS: if we should not monitor how long we are inactive for
+#: ../src/pk-main.c:206
+msgid "Disable the idle timer"
+msgstr "Desactivar o contador de inactividade"
+
+#. TRANSLATORS: show version
+#: ../src/pk-main.c:209
+msgid "Show version and exit"
+msgstr "Mostrar a versión e saír"
+
+#. TRANSLATORS: exit after we've started up, used for user profiling
+#: ../src/pk-main.c:212
+msgid "Exit after a small delay"
+msgstr "Saír despois dunha pequena pausa"
+
+#. TRANSLATORS: exit straight away, used for automatic profiling
+#: ../src/pk-main.c:215
+msgid "Exit after the engine has loaded"
+msgstr "Saír despois de que o motor estea cargado"
+
+#. TRANSLATORS: describing the service that is running
+#: ../src/pk-main.c:230
+msgid "PackageKit service"
+msgstr "Servizo PackageKit"
+
+#. TRANSLATORS: fatal error, dbus is not running
+#: ../src/pk-main.c:267
+msgid "Cannot connect to the system bus"
+msgstr "Non se pode conectar ao bus do sistema"
+
+#. TRANSLATORS: cannot register on system bus, unknown reason -- geeky error
+#. follows
+#: ../src/pk-main.c:316
+msgid "Error trying to start:"
+msgstr "Produciuse un erro tentando iniciar:"
+
+#: ../src/pk-polkit-action-lookup.c:150
+msgid "To install debugging packages, extra sources need to be enabled"
+msgstr ""
+"Para poder instalar paquetes de depuración, é necesario activar novas orixes"
+
+#. 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 "O software non proven dunha orixe de confianza."
+
+#: ../src/pk-polkit-action-lookup.c:176
+msgid "Do not update this package unless you are sure it is safe to do so."
+msgstr ""
+"Non actualice este paquete a non ser que saiba con certeza que é seguro "
+"facelo."
+
+#: ../src/pk-polkit-action-lookup.c:177
+msgid "Do not update these packages unless you are sure it is safe to do so."
+msgstr ""
+"Non actualice estes paquetes a non ser que saiba con certeza que é seguro "
+"facelo."
+
+#: ../src/pk-polkit-action-lookup.c:195
+msgid "Do not install this package unless you are sure it is safe to do so."
+msgstr ""
+"Non instale este paquete a non ser que saiba con certeza que é seguro "
+"facelo."
+
+#: ../src/pk-polkit-action-lookup.c:196
+msgid "Do not install these packages unless you are sure it is safe to do so."
+msgstr ""
+"Non instale estes paquetes a non ser que saiba con certeza que é seguro "
+"facelo."
+
+#. TRANSLATORS: too many packages to list each one
+#: ../src/pk-polkit-action-lookup.c:273
+msgid "Many packages"
+msgstr "Varios paquetes"
+
+#. TRANSLATORS: if the transaction is forced to install only trusted packages
+#: ../src/pk-polkit-action-lookup.c:339
+msgid "Only trusted"
+msgstr "Só os de confianza"
commit eacba4badf8b31c5f341b541605cba942fbbfd5c
Author: Jesse Zhang <zh.jesse at gmail.com>
Date:   Tue Apr 26 09:46:51 2011 +0800

    docs: update Feature Matrix for conary
    
    The conary backend can SimulateInstallPackages/SimulateRemovePackages
    and can't UpdatePackages.

diff --git a/docs/html/pk-matrix.html b/docs/html/pk-matrix.html
index 976b3c5..d170ab4 100644
--- a/docs/html/pk-matrix.html
+++ b/docs/html/pk-matrix.html
@@ -545,7 +545,7 @@
 <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 -->
+<td><img src="img/status-good.png" alt="[no]"/></td><!-- conary -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- entropy -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- pacman -->
@@ -565,7 +565,7 @@
 <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 -->
+<td><img src="img/status-good.png" alt="[no]"/></td><!-- conary -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- entropy -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- pacman -->
@@ -605,7 +605,7 @@
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- aptcc -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- alpm -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- box -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- conary -->
+<td><img src="img/status-bad.png" alt="[yes]"/></td><!-- conary -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- entropy -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- opkg -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- pacman -->
commit 31a4493d95d78bfa12850a60ee11781fd362b56e
Author: Zhang Qiang <qiang.z.zhang at intel.com>
Date:   Mon Apr 25 17:47:53 2011 +0800

    Backend Matrix:Set zypp backend can downloadPackages

diff --git a/docs/html/pk-matrix.html b/docs/html/pk-matrix.html
index 33f2efb..976b3c5 100644
--- a/docs/html/pk-matrix.html
+++ b/docs/html/pk-matrix.html
@@ -77,7 +77,7 @@
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- smart -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- urpmi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- zypp -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- zypp -->
 </tr>
 <tr>
 <td><b>GetDepends</b></td>
commit 5333e6be752e83c2080b43473ec5f38b6b0fc7f0
Author: Richard Hughes <richard at hughsie.com>
Date:   Sun Apr 24 16:06:56 2011 +0100

    trivial: Update linguas file after I broke it in f983ebe658d596cc7847e31feb3ef4894338ecac
    
    Apologies.

diff --git a/po/LINGUAS b/po/LINGUAS
index 0ff91ab..dfda8bf 100644
--- a/po/LINGUAS
+++ b/po/LINGUAS
@@ -4,7 +4,6 @@ bn_IN
 ca
 cs
 da
-de_DE
 de
 el
 en_GB
commit 5508438eb0ac0e105d4bb6ae51c66e4a1b4b39a2
Merge: 02779ba... 37c46a2...
Author: Matthias Klumpp <matthias at nlinux.org>
Date:   Sun Apr 24 12:26:32 2011 +0200

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

commit 02779bae76041f2cdec9b7c936ac5f35d1d3c008
Author: Matthias Klumpp <matthias at nlinux.org>
Date:   Sun Apr 24 12:26:03 2011 +0200

    browser-plugin: Remove deprecated symbols
    
    Compile with GSEAL_ENABLE to remove all
    deprecated symbols.
    This might also fix an implicit pointer conversion,
    which causes Debian builds with GCC 4.6 to fail.

diff --git a/contrib/browser-plugin/Makefile.am b/contrib/browser-plugin/Makefile.am
index cc3a9d5..2b469e6 100644
--- a/contrib/browser-plugin/Makefile.am
+++ b/contrib/browser-plugin/Makefile.am
@@ -7,6 +7,7 @@ packagekit_plugin_la_CPPFLAGS =			\
 	-DPACKAGE_LOCALE_DIR=\"$(localedir)\"	\
 	-DI_KNOW_THE_PACKAGEKIT_GLIB2_API_IS_SUBJECT_TO_CHANGE	\
 	-DMOZ_X11				\
+	-DGSEAL_ENABLE				\
 	-I$(top_srcdir)/lib
 
 packagekit_plugin_la_CFLAGS =			\
diff --git a/contrib/browser-plugin/pk-main.c b/contrib/browser-plugin/pk-main.c
index 62914e0..b9378cb 100644
--- a/contrib/browser-plugin/pk-main.c
+++ b/contrib/browser-plugin/pk-main.c
@@ -219,7 +219,7 @@ pk_main_create_window (PkPlugin *plugin)
 		}
 
 		/* get parent */
-		parent = gdk_window_foreign_new_for_display (gdk_display, xwindow);
+		parent = gdk_x11_window_foreign_new_for_display (gdk_display, xwindow);
 		if (parent == NULL) {
 			pk_debug ("invalid window given for setup (id %lu)\n", xwindow);
 			return;
commit 37c46a2d5f53b82660f64fcc7489614ab227ed88
Author: Zhang Qiang <qiang.z.zhang at intel.com>
Date:   Thu Apr 21 17:19:33 2011 +0800

    Creat transaction db properly if it's not exist
    
    This commit creat transaction db proxy table properly even if it's not
    exist.

diff --git a/src/pk-transaction-db.c b/src/pk-transaction-db.c
index 65bf7fc..a3d179d 100644
--- a/src/pk-transaction-db.c
+++ b/src/pk-transaction-db.c
@@ -940,7 +940,15 @@ pk_transaction_db_init (PkTransactionDb *tdb)
 	}
 
 	/* session proxy saving (since 0.5.1) */
-	rc = sqlite3_exec (tdb->priv->db, "SELECT proxy_https FROM proxy LIMIT 1", NULL, NULL, &error_msg);
+	rc = sqlite3_exec (tdb->priv->db, "SELECT * FROM proxy LIMIT 1", NULL, NULL, &error_msg);
+	if (rc != SQLITE_OK) {
+		g_debug ("adding table proxy: %s", error_msg);
+		statement = "CREATE TABLE proxy (created TEXT, proxy_http TEXT, proxy_https TEXT, proxy_ftp TEXT, proxy_socks TEXT, no_proxy TEXT, pac TEXT, uid INTEGER, session TEXT);";
+		sqlite3_exec (tdb->priv->db, statement, NULL, NULL, NULL);
+	}
+
+	/* session no_proxy proxy */
+	rc = sqlite3_exec (tdb->priv->db, "SELECT no_proxy FROM proxy LIMIT 1", NULL, NULL, &error_msg);
 	if (rc != SQLITE_OK) {
 		g_debug ("altering table to repair: %s", error_msg);
 		sqlite3_free (error_msg);
@@ -954,14 +962,6 @@ pk_transaction_db_init (PkTransactionDb *tdb)
 		sqlite3_exec (tdb->priv->db, statement, NULL, NULL, NULL);
 	}
 
-	/* session no_proxy proxy */
-	rc = sqlite3_exec (tdb->priv->db, "SELECT no_proxy FROM proxy LIMIT 1", NULL, NULL, &error_msg);
-	if (rc != SQLITE_OK) {
-		g_debug ("adding table proxy: %s", error_msg);
-		statement = "CREATE TABLE proxy (created TEXT, proxy_http TEXT, proxy_ftp TEXT, uid INTEGER, session TEXT);";
-		sqlite3_exec (tdb->priv->db, statement, NULL, NULL, NULL);
-	}
-
 	/* transaction root (since 0.6.4) */
 	rc = sqlite3_exec (tdb->priv->db, "SELECT * FROM root LIMIT 1", NULL, NULL, &error_msg);
 	if (rc != SQLITE_OK) {
commit f983ebe658d596cc7847e31feb3ef4894338ecac
Author: Richard Hughes <richard at hughsie.com>
Date:   Thu Apr 21 07:52:28 2011 +0100

    trivial: update the LINGUAS file

diff --git a/po/LINGUAS b/po/LINGUAS
index c3f7e98..0ff91ab 100644
--- a/po/LINGUAS
+++ b/po/LINGUAS
@@ -4,6 +4,7 @@ bn_IN
 ca
 cs
 da
+de_DE
 de
 el
 en_GB
@@ -11,11 +12,13 @@ es
 eu
 fi
 fr
+gl
 gu
 he
 hi
 hu
 id
+it_IT
 it
 ja
 kn
commit cc52ca053ed3faf03a97a114674934d8ceb9685d
Author: Jonny Lamb <jonnylamb at gnome.org>
Date:   Wed Apr 20 09:30:24 2011 +0100

    client: fix precedence when assigning strings to a *GStrv
    
    Signed-off-by: Jonny Lamb <jonnylamb at gnome.org>
    Signed-off-by: Richard Hughes <richard at hughsie.com>

diff --git a/lib/packagekit-glib2/pk-client.c b/lib/packagekit-glib2/pk-client.c
index b9156e6..028e0db 100644
--- a/lib/packagekit-glib2/pk-client.c
+++ b/lib/packagekit-glib2/pk-client.c
@@ -1843,13 +1843,14 @@ out:
 static gboolean
 pk_client_create_helper_argv_envp (PkClientState *state,
 				   gchar ***argv,
-				   gchar ***envp)
+				   gchar ***envp_out)
 {
 	const gchar *dialog = NULL;
 	const gchar *display;
 	const gchar *term;
 	gboolean ret;
 	guint envpi = 0;
+	gchar **envp;
 
 	/* check we have the right file */
 	ret = g_file_test ("/usr/bin/debconf-communicate",
@@ -1861,23 +1862,24 @@ pk_client_create_helper_argv_envp (PkClientState *state,
 	*argv = g_new0 (gchar *, 2);
 	*argv[0] = g_strdup ("/usr/bin/debconf-communicate");
 
-	*envp = g_new0 (gchar *, 8);
-	*envp[envpi++] = g_strdup ("DEBCONF_DB_REPLACE=configdb");
-	*envp[envpi++] = g_strdup ("DEBCONF_DB_OVERRIDE=Pipe{infd:none outfd:none}");
+	*envp_out = g_new0 (gchar *, 8);
+	envp = *envp_out;
+	envp[envpi++] = g_strdup ("DEBCONF_DB_REPLACE=configdb");
+	envp[envpi++] = g_strdup ("DEBCONF_DB_OVERRIDE=Pipe{infd:none outfd:none}");
 	if (pk_debug_is_verbose ())
-		*envp[envpi++] = g_strdup ("DEBCONF_DEBUG=.");
+		envp[envpi++] = g_strdup ("DEBCONF_DEBUG=.");
 
 	/* do we have an available terminal to use */
 	term = g_getenv ("TERM");
 	if (term != NULL) {
-		*envp[envpi++] = g_strdup_printf ("TERM=%s", term);
+		envp[envpi++] = g_strdup_printf ("TERM=%s", term);
 		dialog = "dialog";
 	}
 
 	/* do we have access to the display */
 	display = g_getenv ("DISPLAY");
 	if (display != NULL) {
-		*envp[envpi++] = g_strdup_printf ("DISPLAY=%s", display);
+		envp[envpi++] = g_strdup_printf ("DISPLAY=%s", display);
 		if (g_strcmp0 (g_getenv ("KDE_FULL_SESSION"), "true") == 0)
 		  dialog = "kde";
 		else
@@ -1886,7 +1888,7 @@ pk_client_create_helper_argv_envp (PkClientState *state,
 
 	/* indicate a prefered frontend */
 	if (dialog != NULL) {
-		*envp[envpi++] = g_strdup_printf ("DEBIAN_FRONTEND=%s", dialog);
+		envp[envpi++] = g_strdup_printf ("DEBIAN_FRONTEND=%s", dialog);
 		g_debug ("using frontend %s", dialog);
 	}
 out:
commit 78cea15a1fbde767ed21395715084507bbb267d8
Author: Jesse Zhang <zh.jesse at gmail.com>
Date:   Mon Apr 18 15:16:29 2011 +0800

    conary: make pylint happier

diff --git a/backends/conary/conaryBackend.py b/backends/conary/conaryBackend.py
index ffdf9ea..ec8e79b 100755
--- a/backends/conary/conaryBackend.py
+++ b/backends/conary/conaryBackend.py
@@ -21,17 +21,19 @@
 #                         Scott Parkerson <scott.parkerson at gmail.com>
 
 import sys
-import os
-import re
-import xmlrpclib
 
-from conary import conaryclient, errors, trove, versions
-from conary.deps import deps
+from conary import conaryclient, errors, trove
 from conary.lib import util
 
 from packagekit.backend import get_package_id, split_package_id, \
     PackageKitBaseBackend
-from packagekit.enums import *
+from packagekit.enums import (ERROR_DEP_RESOLUTION_FAILED, ERROR_NO_CACHE,
+        ERROR_NO_PACKAGES_TO_UPDATE, ERROR_UNKNOWN, FILTER_INSTALLED,
+        FILTER_NOT_INSTALLED, INFO_INSTALLING, INFO_NORMAL, INFO_REMOVING,
+        INFO_SECURITY, INFO_UPDATING, MESSAGE_COULD_NOT_FIND_PACKAGE,
+        RESTART_APPLICATION, RESTART_NONE, RESTART_SYSTEM, STATUS_INFO,
+        STATUS_QUERY, STATUS_REFRESH_CACHE, STATUS_RUNNING, STATUS_UPDATE,
+        UPDATE_STATE_STABLE, UPDATE_STATE_TESTING, UPDATE_STATE_UNSTABLE)
 
 from conaryCallback import UpdateCallback, GetUpdateCallback
 from conaryCallback import RemoveCallback, UpdateSystemCallback
@@ -77,6 +79,31 @@ def _get_trovespec_from_ids(package_ids):
         ret.append(trovespec)
     return ret
 
+def _get_fits(branch):
+    if "conary.rpath.com" in branch:
+        return "http://issues.rpath.com; rPath Issue Tracking System"
+    elif "foresight.rpath.org" in branch:
+        return "http://issues.foresightlinux.org; Foresight Issue Tracking System"
+    else:
+        return ""
+
+def _get_license(license_list):
+    if license_list == "":
+        return ""
+
+    # license_list is a list of licenses in the format of
+    # 'rpath.com/licenses/copyright/GPL-2'.
+    return " ".join([i.split("/")[-1] for i in license_list])
+
+def _get_branch(branch):
+    branchList = branch.split("@")
+    if "2-qa" in branchList[1]:
+        return UPDATE_STATE_TESTING
+    elif "2-devel" in branchList[1]:
+        return UPDATE_STATE_UNSTABLE
+    else:
+        return UPDATE_STATE_STABLE
+
 class PackageKitConaryBackend(PackageKitBaseBackend):
     # Packages that require a reboot
     rebootpkgs = ("kernel", "glibc", "hal", "dbus")
@@ -109,10 +136,10 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
                 return pkg
         return None
 
-    def _convert_package( self, trove , pkgDict ):
+    def _convert_package(self, trovetuple, metadata):
         return dict(
-                trove = trove ,
-                metadata = pkgDict
+                trove = trovetuple,
+                metadata = metadata
             )
 
     def _do_search(self, filters, searchlist, where = "name"):
@@ -162,11 +189,11 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         db_trove_list = self.client.db.findTroves(None, list_trove_all, allowMissing=True)
 
         list_installed = []
-        for trove in list_trove_all:
-            if trove in db_trove_list:
-                pkg = self._search_package(pkg_list, trove[0])
+        for trv in list_trove_all:
+            if trv in db_trove_list:
+                pkg = self._search_package(pkg_list, trv[0])
                 # A package may have different versions/flavors installed.
-                for t in db_trove_list[trove]:
+                for t in db_trove_list[trv]:
                     list_installed.append(self._convert_package(t, pkg["metadata"]))
                 ret.append(pkg)
         pkgFilter.add_installed(list_installed)
@@ -183,18 +210,18 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         '''
         list_trove_all = []
         for pkg in pkg_list:
-            name,version,flavor = pkg.get("trove")
-            trove = (name, version, self.conary.flavor)
-            list_trove_all.append(trove)
+            name, version, flavor = pkg.get("trove")
+            trv = (name, version, self.conary.flavor)
+            list_trove_all.append(trv)
 
         repo_trove_list = self.client.repos.findTroves(self.conary.default_label,
                 list_trove_all, allowMissing=True)
 
         list_available = []
-        for trove in list_trove_all:
-            if trove in repo_trove_list:
+        for trv in list_trove_all:
+            if trv in repo_trove_list:
                 # only use the first trove in the list
-                t = repo_trove_list[trove][0]
+                t = repo_trove_list[trv][0]
                 pkg = self._search_package(pkg_list, t[0])
                 pkg["trove"] = t
                 list_available.append(pkg)
@@ -217,23 +244,23 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         # installed, so ConaryFilter can't do proper filtering. Don't pass
         # @filters to it. Instead manually check the filters before calling
         # add_installed() and add_available().
-        filter = ConaryFilter()
+        pkgfilter = ConaryFilter()
 
         is_found_locally = False
         if FILTER_NOT_INSTALLED not in filters:
             trove_installed = self.conary.query(pkg_dict.get("name"))
             for trv in trove_installed:
                 pkg = self._convert_package(trv, pkg_dict)
-                filter.add_installed([pkg])
+                pkgfilter.add_installed([pkg])
                 is_found_locally = True
 
         if not is_found_locally and FILTER_INSTALLED not in filters:
             trove_available = self.conary.repo_query(pkg_dict.get("name"))
             for trv in trove_available:
                 pkg = self._convert_package(trv, pkg_dict)
-                filter.add_available([pkg])
+                pkgfilter.add_available([pkg])
 
-        package_list = filter.post_process()
+        package_list = pkgfilter.post_process()
         self._show_package_list(package_list)
 
     def _show_package_list(self, lst):
@@ -277,10 +304,10 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         self.status(STATUS_QUERY)
         self._do_search(options, search, 'details' )
 
-    def get_packages(self, filter ):
+    def get_packages(self, filters):
         self.allow_cancel(False)
         self.status(STATUS_QUERY)
-        self._do_search(filter, "", 'all' )
+        self._do_search(filters, "", 'all' )
 
     def get_files(self, package_ids):
         self.allow_cancel(True)
@@ -336,8 +363,14 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
 
         self._show_packages(ret)
 
+    def install_packages(self, only_trusted, package_ids):
+        self._install_packages(only_trusted, package_ids)
+
+    def simulate_install_packages(self, package_ids):
+        return self._install_packages(False, package_ids, simulate=True)
+
     @ConaryExceptionHandler
-    def install_packages(self, only_trusted, package_ids, simulate=False):
+    def _install_packages(self, only_trusted, package_ids, simulate=False):
         self.allow_cancel(False)
         self.percentage(0)
         self.status(STATUS_RUNNING)
@@ -347,12 +380,18 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         updJob, suggMap = self.conary.install(pkglist, cb, simulate)
         if simulate:
             pkgs = self._get_package_name_from_ids(package_ids)
-            jobs = conarypk.parse_jobs(updJob, excludes=pkgs,
-                    show_components=False)
-            self._display_update_jobs(*jobs)
+            installs, erases, updates = conarypk.parse_jobs(updJob,
+                    excludes=pkgs, show_components=False)
+            self._display_update_jobs(installs, erases, updates)
+
+    def remove_packages(self, allowDeps, autoremove, package_ids):
+        self. _remove_packages(allowDeps, autoremove, package_ids)
+
+    def simulate_remove_packages(self, package_ids):
+        return self._remove_packages(False, False, package_ids, simulate=True)
 
     @ConaryExceptionHandler
-    def remove_packages(self, allowDeps, autoremove, package_ids, simulate=False):
+    def _remove_packages(self, allowDeps, autoremove, package_ids, simulate=False):
         # TODO: use autoremove
         self.allow_cancel(False)
         self.percentage(0)
@@ -363,9 +402,9 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         updJob, suggMap = self.conary.erase(pkglist, cb, simulate)
         if simulate:
             pkgs = self._get_package_name_from_ids(package_ids)
-            jobs = conarypk.parse_jobs(updJob, excludes=pkgs,
-                    show_components=False)
-            self._display_update_jobs(*jobs)
+            installs, erases, updates = conarypk.parse_jobs(updJob,
+                    excludes=pkgs, show_components=False)
+            self._display_update_jobs(installs, erases, updates)
 
     def _check_for_reboot(self, name):
         if name in self.rebootpkgs:
@@ -385,8 +424,8 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
                 vendor_url = pkgDict.get("url","")
                 desc = pkgDict.get("longDesc","")
                 reboot = self._get_restart(name)
-                state = self._get_branch(label)
-                bz_url = self._get_fits(label)
+                state = _get_branch(label)
+                bz_url = _get_fits(label)
                 self.update_detail(package_id, update, obsolete, vendor_url, bz_url, cve_url,
                         reboot, desc, changelog="", state= state, issued="", updated = "")
 
@@ -399,20 +438,20 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         self.status(STATUS_INFO)
 
         for package_id in package_ids:
-            name,version,arch,data = split_package_id(package_id)
+            name, version, arch, data = split_package_id(package_id)
             pkgDict = self.xmlcache.resolve(name)
             if name and pkgDict:
                 longDesc = ""
                 url = ""
                 categories  = None
-                license = ""
+                licenses = ""
 
                 longDesc = pkgDict.get("longDesc", "")
                 url = pkgDict.get("url", "")
                 categories = self.xmlcache.getGroup(pkgDict.get("category",""))
-                license = self._get_license(pkgDict.get("licenses",""))
+                licenses = _get_license(pkgDict.get("licenses",""))
                 size = pkgDict.get("size", 0)
-                self.details(package_id, license, categories, longDesc, url, size)
+                self.details(package_id, licenses, categories, longDesc, url, size)
 
     def _get_restart(self, name):
         if name in self.rebootpkgs:
@@ -430,30 +469,6 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         else:
             return INFO_NORMAL
 
-    def _get_fits(self, branch):
-        if "conary.rpath.com" in branch:
-            return "http://issues.rpath.com;rPath Issues Tracker"
-        elif "foresight.rpath.org" in branch:
-            return "http://issues.foresightlinux.org; Foresight Issues Tracker"
-        else:
-            return ""
-    def _get_license(self, license_list ):
-        if license_list == "":
-            return ""
-
-        # license_list is a list of licenses in the format of
-        # 'rpath.com/licenses/copyright/GPL-2'.
-        return " ".join([i.split("/")[-1] for i in license_list])
-
-    def _get_branch(self, branch ):
-        branchList = branch.split("@")
-        if "2-qa" in branchList[1]:
-            return UPDATE_STATE_TESTING
-        elif "2-devel" in branchList[1]:
-            return UPDATE_STATE_UNSTABLE
-        else:
-            return UPDATE_STATE_STABLE
-
     def _display_updates(self, jobs):
         '''Emit Package signals for a list of update jobs
 
@@ -483,15 +498,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         labels = self.conary.get_labels()
         self.status(STATUS_QUERY)
         for repo in labels:
-            repo_name = repo.split("@")[0]
-            repo_branch  = repo.split("@")[1]
-            self.repo_detail(repo,repo,True)
-
-    def simulate_install_packages(self, package_ids):
-        return self.install_packages(False, package_ids, simulate=True)
-
-    def simulate_remove_packages(self, package_ids):
-        return self.remove_packages(False, False, package_ids, simulate=True)
+            self.repo_detail(repo, repo, True)
 
 def main():
     backend = PackageKitConaryBackend('')
commit 0cadd836f1adeb3ec52b18184550a3c39f3da0a5
Author: Jesse Zhang <zh.jesse at gmail.com>
Date:   Mon Apr 18 14:29:17 2011 +0800

    conary: use ExceptionHandler again
    
    ExceptionHandler was made a no-op by the immediate 'return func'. Enable
    it again and put the exception handling from _do_conary_update and
    _do_conary_updateall here together.

diff --git a/backends/conary/conaryBackend.py b/backends/conary/conaryBackend.py
index 4ba8319..ffdf9ea 100755
--- a/backends/conary/conaryBackend.py
+++ b/backends/conary/conaryBackend.py
@@ -42,24 +42,26 @@ import conarypk
 
 sys.excepthook = util.genExcepthook()
 
-def ExceptionHandler(func):
-    return func
-    def display(error):
-        return str(error).replace('\n', ' ').replace("\t",'')
+def ConaryExceptionHandler(func):
+    '''Centralized handler for conary Exceptions
+
+    Currently only considers conary install/erase/updateall.
+    '''
     def wrapper(self, *args, **kwargs):
         try:
             return func(self, *args, **kwargs)
-        #except Exception:
-        #    raise
-        except conaryclient.NoNewTrovesError:
-            return
-        except conaryclient.DepResolutionFailure, e:
-            self.error(ERROR_DEP_RESOLUTION_FAILED, display(e), exit=True)
-        except conaryclient.UpdateError, e:
-            # FIXME: Need a enum for UpdateError
-            self.error(ERROR_UNKNOWN, display(e), exit=True)
-        except Exception, e:
-            self.error(ERROR_UNKNOWN, display(e), exit=True)
+        except conaryclient.DepResolutionFailure as e:
+            deps = [str(i[0][0]).split(":")[0] for i in e.cannotResolve]
+            self.error(ERROR_DEP_RESOLUTION_FAILED, ", ".join(set(deps)))
+        except errors.InternalConaryError as e:
+            if str(e) == "Stale update job":
+                self.conary.clear_job_cache()
+                # The UpdateJob can be invalid. It's probably because after the
+                # update job is fozen, the state of the database has changed.
+                self.error(ERROR_NO_CACHE,
+                        "The previously cached update job is broken. Please try again.")
+        except trove.TroveIntegrityError:
+            self.error(ERROR_NO_PACKAGES_TO_UPDATE, "Network error. Try again")
     return wrapper
 
 def _get_trovespec_from_ids(package_ids):
@@ -132,32 +134,6 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         else:
             self.message(MESSAGE_COULD_NOT_FIND_PACKAGE,"search not found")
 
-    def _do_conary_update(self, op, *args):
-        '''Wrapper around ConaryPk.install/erase() so we can add exception
-        handling
-        '''
-        try:
-            if op == 'install':
-                ret = self.conary.install(*args)
-            elif op == 'erase':
-                ret = self.conary.erase(*args)
-            else:
-                self.error(ERROR_INTERNAL_ERROR,
-                        'Unknown operation for conary: %s' % op)
-        except conaryclient.DepResolutionFailure as e:
-            deps = [str(i[0][0]).split(":")[0] for i in e.cannotResolve]
-            self.error(ERROR_DEP_RESOLUTION_FAILED, ", ".join(set(deps)))
-        except errors.InternalConaryError as e:
-            if str(e) == "Stale update job":
-                self.conary.clear_job_cache()
-                # The UpdateJob can be invalid. It's probably because after the
-                # update job is fozen, the state of the database has changed.
-                self.error(ERROR_NO_CACHE,
-                        "The previously cached update job is broken. Please try again.")
-        except trove.TroveIntegrityError:
-            self.error(ERROR_NO_PACKAGES_TO_UPDATE, "Network error. Try again")
-        return ret
-
     def _resolve_list(self, pkg_list, filters):
         pkgFilter = ConaryFilter()
 
@@ -224,7 +200,6 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
                 list_available.append(pkg)
         pkgFilter.add_available(list_available)
 
-    @ExceptionHandler
     def resolve(self, filters, package ):
         """
             @filters  (list)  list of filters
@@ -274,14 +249,12 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
             summary = self._format_package_summary(name, pkg["metadata"])
             self.package(pkg_id, status, summary)
 
-    @ExceptionHandler
     def search_group(self, options, searchlist):
         self.allow_cancel(True)
         self.percentage(None)
         self.status(STATUS_QUERY)
         self._do_search(options, searchlist, 'group')
 
-    @ExceptionHandler
     def search_file(self, filters, search ):
         self.allow_cancel(True)
         self.percentage(None)
@@ -292,27 +265,23 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
                 name = name.split(":")[0]
             self.resolve( filters, [name])
 
-    @ExceptionHandler
     def search_name(self, options, searchlist):
         self.allow_cancel(True)
         self.percentage(None)
         self.status(STATUS_QUERY)
         self._do_search(options, searchlist, 'name')
 
-    @ExceptionHandler
     def search_details(self, options, search):
         self.allow_cancel(True)
         #self.percentage(None)
         self.status(STATUS_QUERY)
         self._do_search(options, search, 'details' )
 
-    @ExceptionHandler
     def get_packages(self, filter ):
         self.allow_cancel(False)
         self.status(STATUS_QUERY)
         self._do_search(filter, "", 'all' )
 
-    @ExceptionHandler
     def get_files(self, package_ids):
         self.allow_cancel(True)
         self.percentage(None)
@@ -324,29 +293,13 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
                     (name, version, arch))
             self.files(package_id, ';'.join(files))
 
-    def _do_conary_updateall(self, callback, dry_run):
-        '''Wrapper around ConaryPk.updateall() so we can add exception handling
-        '''
-        try:
-            ret = self.conary.updateall(callback, dry_run)
-        except xmlrpclib.ProtocolError as e:
-            self.error(ERROR_NO_NETWORK, '%s. Try again.' % str(e))
-        except errors.InternalConaryError as e:
-            if str(e) == "Stale update job":
-                self.conary.clear_job_cache()
-                # The UpdateJob can be invalid. It's probably because after the
-                # update job is fozen, the state of the database has changed.
-                self.error(ERROR_NO_CACHE,
-                        "The previously cached update job is broken. Please try again.")
-        return ret
-
-    @ExceptionHandler
+    @ConaryExceptionHandler
     def update_system(self, only_trusted):
         # FIXME: use only_trusted
         self.allow_cancel(False)
         self.status(STATUS_UPDATE)
         cb = UpdateSystemCallback(self, self.cfg)
-        self._do_conary_updateall(cb, dry_run=False)
+        self.conary.updateall(cb, dry_run=False)
 
     def refresh_cache(self, force):
         # TODO: use force ?
@@ -383,6 +336,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
 
         self._show_packages(ret)
 
+    @ConaryExceptionHandler
     def install_packages(self, only_trusted, package_ids, simulate=False):
         self.allow_cancel(False)
         self.percentage(0)
@@ -390,14 +344,14 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
 
         pkglist = _get_trovespec_from_ids(package_ids)
         cb = UpdateCallback(self, self.cfg)
-        updJob, suggMap = self._do_conary_update('install', pkglist, cb, simulate)
+        updJob, suggMap = self.conary.install(pkglist, cb, simulate)
         if simulate:
             pkgs = self._get_package_name_from_ids(package_ids)
             jobs = conarypk.parse_jobs(updJob, excludes=pkgs,
                     show_components=False)
             self._display_update_jobs(*jobs)
 
-    @ExceptionHandler
+    @ConaryExceptionHandler
     def remove_packages(self, allowDeps, autoremove, package_ids, simulate=False):
         # TODO: use autoremove
         self.allow_cancel(False)
@@ -406,7 +360,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
 
         pkglist = _get_trovespec_from_ids(package_ids)
         cb = RemoveCallback(self, self.cfg)
-        updJob, suggMap = self._do_conary_update('erase', pkglist, cb, simulate)
+        updJob, suggMap = self.conary.erase(pkglist, cb, simulate)
         if simulate:
             pkgs = self._get_package_name_from_ids(package_ids)
             jobs = conarypk.parse_jobs(updJob, excludes=pkgs,
@@ -417,7 +371,6 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         if name in self.rebootpkgs:
             self.require_restart(RESTART_SYSTEM, "")
 
-    @ExceptionHandler
     def get_update_detail(self, package_ids):
         self.allow_cancel(True)
         self.percentage(None)
@@ -437,7 +390,6 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
                 self.update_detail(package_id, update, obsolete, vendor_url, bz_url, cve_url,
                         reboot, desc, changelog="", state= state, issued="", updated = "")
 
-   # @ExceptionHandler
     def get_details(self, package_ids):
         '''
         Print a detailed description for a given package
@@ -515,14 +467,14 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
 
         self._show_packages(ret)
 
-    @ExceptionHandler
+    @ConaryExceptionHandler
     def get_updates(self, filters):
         self.allow_cancel(True)
         self.percentage(0)
         self.status(STATUS_INFO)
 
         cb = GetUpdateCallback(self, self.cfg)
-        updJob, suggMap = self._do_conary_updateall(cb, dry_run=True)
+        updJob, suggMap = self.conary.updateall(cb, dry_run=True)
         installs, erases, updates = conarypk.parse_jobs(updJob,
                 show_components=False)
         self._display_updates(installs + updates)
commit 6644913042ea904332a6ab3eeed8a857f9b52c4e
Author: Zhang Qiang <qiang.z.zhang at intel.com>
Date:   Mon Apr 18 15:55:33 2011 +0800

    Get more proxy info after the new proxy parameters was introduced

diff --git a/src/pk-transaction-db.c b/src/pk-transaction-db.c
index cfd2edc..65bf7fc 100644
--- a/src/pk-transaction-db.c
+++ b/src/pk-transaction-db.c
@@ -587,9 +587,21 @@ pk_transaction_sqlite_proxy_cb (void *data, gint argc, gchar **argv, gchar **col
 		if (g_strcmp0 (col_name[i], "proxy_http") == 0) {
 			item->proxy_http = g_strdup (argv[i]);
 			item->set = TRUE;
+		} else if (g_strcmp0 (col_name[i], "proxy_https") == 0) {
+			item->proxy_https = g_strdup (argv[i]);
+			item->set = TRUE;
 		} else if (g_strcmp0 (col_name[i], "proxy_ftp") == 0) {
 			item->proxy_ftp = g_strdup (argv[i]);
 			item->set = TRUE;
+		} else if (g_strcmp0 (col_name[i], "proxy_socks") == 0) {
+			item->proxy_socks = g_strdup (argv[i]);
+			item->set = TRUE;
+		} else if (g_strcmp0 (col_name[i], "no_proxy") == 0) {
+			item->no_proxy = g_strdup (argv[i]);
+			item->set = TRUE;
+		} else if (g_strcmp0 (col_name[i], "pac") == 0) {
+			item->pac = g_strdup (argv[i]);
+			item->set = TRUE;
 		} else {
 			g_warning ("%s = %s\n", col_name[i], argv[i]);
 		}
@@ -646,7 +658,7 @@ pk_transaction_db_get_proxy (PkTransactionDb *tdb, guint uid, const gchar *sessi
 
 	/* get existing data */
 	item = g_new0 (PkTransactionDbProxyItem, 1);
-	statement = g_strdup_printf ("SELECT proxy_http, proxy_ftp FROM proxy WHERE uid = '%i' AND session = '%s' LIMIT 1",
+	statement = g_strdup_printf ("SELECT proxy_http, proxy_https, proxy_ftp, proxy_socks, no_proxy, pac FROM proxy WHERE uid = '%i' AND session = '%s' LIMIT 1",
 				     uid, session);
 	rc = sqlite3_exec (tdb->priv->db, statement,
 			   pk_transaction_sqlite_proxy_cb,
commit 130514d642e2e54d813789a1427fd701af433c0d
Author: Zhang Qiang <qiang.z.zhang at intel.com>
Date:   Mon Apr 18 15:45:35 2011 +0800

    zypp:fix memory leak in pk_backend_transaction_start
    
    'locale' variable is alloced but not freed. This patch fix this memory
    leak issue.

diff --git a/backends/zypp/pk-backend-zypp.cpp b/backends/zypp/pk-backend-zypp.cpp
index 1740f27..2b5fa54 100644
--- a/backends/zypp/pk-backend-zypp.cpp
+++ b/backends/zypp/pk-backend-zypp.cpp
@@ -2220,6 +2220,7 @@ pk_backend_transaction_start (PkBackend *backend)
 		g_free (uri);
 	}
 
+	g_free (locale);
 	g_free (proxy_http);
 	g_free (proxy_https);
 	g_free (proxy_ftp);
commit 2c9e6c2a71072be26e7c566ac67c6e8902751b96
Author: Zhang Qiang <qiang.z.zhang at intel.com>
Date:   Mon Apr 18 15:42:21 2011 +0800

    zypp: support proxy_https,proxy_socks,no_proxy
    
    This commit adds the proxy_https, proxy_socks, no_proxy and pac
    supporting for zypp backend.

diff --git a/backends/zypp/pk-backend-zypp.cpp b/backends/zypp/pk-backend-zypp.cpp
index 08f7a82..1740f27 100644
--- a/backends/zypp/pk-backend-zypp.cpp
+++ b/backends/zypp/pk-backend-zypp.cpp
@@ -2162,8 +2162,12 @@ pk_backend_transaction_start (PkBackend *backend)
 {
 	gchar *locale;
 	gchar *proxy_http;
+	gchar *proxy_https;
 	gchar *proxy_ftp;
 	gchar *uri;
+	gchar *proxy_socks;
+	gchar *no_proxy;
+	gchar *pac;
 
 	locale = pk_backend_get_locale(backend);
 	if (!egg_strzero (locale)) {
@@ -2178,6 +2182,14 @@ pk_backend_transaction_start (PkBackend *backend)
 		g_free (uri);
 	}
 
+	/* https_proxy */
+	proxy_https = pk_backend_get_proxy_https (backend);
+	if (!egg_strzero (proxy_https)) {
+		uri = pk_backend_spawn_convert_uri (proxy_https);
+		g_setenv ("https_proxy", uri, TRUE);
+		g_free (uri);
+	}
+
 	/* ftp_proxy */
 	proxy_ftp = pk_backend_get_proxy_ftp (backend);
 	if (!egg_strzero (proxy_ftp)) {
@@ -2186,8 +2198,34 @@ pk_backend_transaction_start (PkBackend *backend)
 		g_free (uri);
 	}
 
+	/* socks_proxy */
+	proxy_socks = pk_backend_get_proxy_socks (backend);
+	if (!egg_strzero (proxy_socks)) {
+		uri = pk_backend_spawn_convert_uri (proxy_socks);
+		g_setenv ("socks_proxy", uri, TRUE);
+		g_free (uri);
+	}
+
+	/* no_proxy */
+	no_proxy = pk_backend_get_no_proxy (backend);
+	if (!egg_strzero (no_proxy)) {
+		g_setenv ("no_proxy", no_proxy, TRUE);
+	}
+
+	/* pac */
+	pac = pk_backend_get_pac (backend);
+	if (!egg_strzero (pac)) {
+		uri = pk_backend_spawn_convert_uri (pac);
+		g_setenv ("pac", uri, TRUE);
+		g_free (uri);
+	}
+
 	g_free (proxy_http);
+	g_free (proxy_https);
 	g_free (proxy_ftp);
+	g_free (proxy_socks);
+	g_free (no_proxy);
+	g_free (pac);
 }
 
 /**
@@ -2199,6 +2237,10 @@ pk_backend_transaction_stop (PkBackend *backend)
 	/* unset proxy info for this transaction */
 	g_unsetenv ("http_proxy");
 	g_unsetenv ("ftp_proxy");
+	g_unsetenv ("https_proxy");
+	g_unsetenv ("no_proxy");
+	g_unsetenv ("socks_proxy");
+	g_unsetenv ("pac");
 }
 
 
commit ca30e6152a09b35f0ff28a1f2c5ca3c128d877a6
Author: Zhang Qiang <qiang.z.zhang at intel.com>
Date:   Sat Apr 16 15:30:58 2011 +0800

    Fix a typo in pk_transaction_db_get_proxy

diff --git a/src/pk-transaction-db.c b/src/pk-transaction-db.c
index c8a8f4b..cfd2edc 100644
--- a/src/pk-transaction-db.c
+++ b/src/pk-transaction-db.c
@@ -671,7 +671,7 @@ pk_transaction_db_get_proxy (PkTransactionDb *tdb, guint uid, const gchar *sessi
 	if (proxy_http != NULL)
 		*proxy_http = g_strdup (item->proxy_http);
 	if (proxy_https != NULL)
-		*proxy_http = g_strdup (item->proxy_https);
+		*proxy_https = g_strdup (item->proxy_https);
 	if (proxy_ftp != NULL)
 		*proxy_ftp = g_strdup (item->proxy_ftp);
 	if (proxy_socks != NULL)
commit 54e608a4391cb1bebd661d6d44ab8a6e06e795fa
Author: Zhang Qiang <qiang.z.zhang at intel.com>
Date:   Sat Apr 16 15:20:44 2011 +0800

    zypp:Set locale info at the begin of transaction
    
    Set locale for each transaction for zypp backend.

diff --git a/backends/zypp/pk-backend-zypp.cpp b/backends/zypp/pk-backend-zypp.cpp
index 3629d23..08f7a82 100644
--- a/backends/zypp/pk-backend-zypp.cpp
+++ b/backends/zypp/pk-backend-zypp.cpp
@@ -2160,10 +2160,16 @@ pk_backend_download_packages (PkBackend *backend, gchar **package_ids, const gch
 void
 pk_backend_transaction_start (PkBackend *backend)
 {
+	gchar *locale;
 	gchar *proxy_http;
 	gchar *proxy_ftp;
 	gchar *uri;
 
+	locale = pk_backend_get_locale(backend);
+	if (!egg_strzero (locale)) {
+		setlocale(LC_ALL, locale);
+	}
+
 	/* http_proxy */
 	proxy_http = pk_backend_get_proxy_http (backend);
 	if (!egg_strzero (proxy_http)) {
commit 9d213b812c6141443dba5264153387f272dd5c9a
Author: Jesse Zhang <zh.jesse at gmail.com>
Date:   Thu Apr 14 21:55:28 2011 +0800

    conary: update TODO

diff --git a/backends/conary/TODO b/backends/conary/TODO
index dc71985..b4e975c 100644
--- a/backends/conary/TODO
+++ b/backends/conary/TODO
@@ -15,6 +15,5 @@
 * decide what to do with package components
 * don't show dead packages:
   - version == '0'
-* policy error
-  - Failed to check for authentication: GDBus.Error:org.freedesktop.PolicyKit1.Error.Failed: Action org.freedesktop.packagekit.package-install is not registered
-  - Failed to check for authentication: GDBus.Error:org.freedesktop.PolicyKit1.Error.Failed: Action org.freedesktop.packagekit.system-sources-refresh is not registered
+* conarypk.py: move _classic_build_update_job()/_classic_get_package_update()/_classic_get_updateall_job()
+  out of the ConaryPk and change them into functions, as the _model* functions.
commit d1bd4b9a357e838730ca795f805fe968d262b7ec
Author: Og B. Maciel <ogmaciel at gnome.org>
Date:   Wed Apr 13 13:03:30 2011 -0400

    conary: handle stale jobs for updateall
    
    And using a better error description.

diff --git a/backends/conary/conaryBackend.py b/backends/conary/conaryBackend.py
index 25b9266..4ba8319 100755
--- a/backends/conary/conaryBackend.py
+++ b/backends/conary/conaryBackend.py
@@ -152,8 +152,8 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
                 self.conary.clear_job_cache()
                 # The UpdateJob can be invalid. It's probably because after the
                 # update job is fozen, the state of the database has changed.
-                self.error(ERROR_INVALID_PACKAGE_FILE,
-                        "Previously cached file is broken. Try again")
+                self.error(ERROR_NO_CACHE,
+                        "The previously cached update job is broken. Please try again.")
         except trove.TroveIntegrityError:
             self.error(ERROR_NO_PACKAGES_TO_UPDATE, "Network error. Try again")
         return ret
@@ -331,6 +331,13 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
             ret = self.conary.updateall(callback, dry_run)
         except xmlrpclib.ProtocolError as e:
             self.error(ERROR_NO_NETWORK, '%s. Try again.' % str(e))
+        except errors.InternalConaryError as e:
+            if str(e) == "Stale update job":
+                self.conary.clear_job_cache()
+                # The UpdateJob can be invalid. It's probably because after the
+                # update job is fozen, the state of the database has changed.
+                self.error(ERROR_NO_CACHE,
+                        "The previously cached update job is broken. Please try again.")
         return ret
 
     @ExceptionHandler
commit 1b4d716f8753034f7e2f3f81fe37fce8b341a760
Author: Jesse Zhang <zh.jesse at gmail.com>
Date:   Tue Apr 12 11:13:10 2011 +0800

    conary: fix typo of conary operation
    
    remove -> erase

diff --git a/backends/conary/TODO b/backends/conary/TODO
index 8fcaf49..dc71985 100644
--- a/backends/conary/TODO
+++ b/backends/conary/TODO
@@ -13,3 +13,8 @@
   - the data structure dict(trove, metadata) (as used in _show_package_list())
     is too complicated than necessary.
 * decide what to do with package components
+* don't show dead packages:
+  - version == '0'
+* policy error
+  - Failed to check for authentication: GDBus.Error:org.freedesktop.PolicyKit1.Error.Failed: Action org.freedesktop.packagekit.package-install is not registered
+  - Failed to check for authentication: GDBus.Error:org.freedesktop.PolicyKit1.Error.Failed: Action org.freedesktop.packagekit.system-sources-refresh is not registered
diff --git a/backends/conary/conaryBackend.py b/backends/conary/conaryBackend.py
index 61776cb..25b9266 100755
--- a/backends/conary/conaryBackend.py
+++ b/backends/conary/conaryBackend.py
@@ -142,7 +142,8 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
             elif op == 'erase':
                 ret = self.conary.erase(*args)
             else:
-                self.error(ERROR_INTERNAL_ERROR, 'Unkown command: %s' % op)
+                self.error(ERROR_INTERNAL_ERROR,
+                        'Unknown operation for conary: %s' % op)
         except conaryclient.DepResolutionFailure as e:
             deps = [str(i[0][0]).split(":")[0] for i in e.cannotResolve]
             self.error(ERROR_DEP_RESOLUTION_FAILED, ", ".join(set(deps)))
@@ -398,7 +399,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
 
         pkglist = _get_trovespec_from_ids(package_ids)
         cb = RemoveCallback(self, self.cfg)
-        updJob, suggMap = self._do_conary_update('remove', pkglist, cb, simulate)
+        updJob, suggMap = self._do_conary_update('erase', pkglist, cb, simulate)
         if simulate:
             pkgs = self._get_package_name_from_ids(package_ids)
             jobs = conarypk.parse_jobs(updJob, excludes=pkgs,
commit bb2d4534a847bcfc563415e7ae952055b23f94ab
Author: Jesse Zhang <zh.jesse at gmail.com>
Date:   Mon Apr 11 22:07:51 2011 +0800

    conary: fix generating XMLCache for custom labels
    
    Don't pass instance of a class (conarypk) around, esp. across modules.

diff --git a/backends/conary/XMLCache.py b/backends/conary/XMLCache.py
index c38d5ea..9ab86f3 100644
--- a/backends/conary/XMLCache.py
+++ b/backends/conary/XMLCache.py
@@ -7,7 +7,6 @@ from packagekit.backend import *
 from packagekit.enums import ERROR_NO_CACHE,ERROR_REPO_CONFIGURATION_ERROR, ERROR_NO_NETWORK
 
 from pkConaryLog import log
-from conarypk import ConaryPk
 from conaryEnums import groupMap
 import generateXML
 
@@ -111,7 +110,7 @@ class XMLRepo:
             except:
                 self.pk.error(ERROR_NO_NETWORK,"Failed to fetch %s." % wwwfile)
         else:
-            generateXML.init(self.label, self.xml_file, self.conarypk)
+            generateXML.init(self.label, self.xml_file)
 
     def refresh_cache(self, force=False):
         if force or not os.path.exists(self.xml_file):
@@ -221,9 +220,7 @@ class XMLCache:
     dbPath = '/var/cache/conary/'
     xml_path =  dbPath + "xmlrepo/"
 
-    def __init__(self):
-        self.conarypk = ConaryPk()
-        self.labels = ( x for x in self.conarypk.get_labels_from_config() )
+    def __init__(self, labels):
         self.pk = PackageKitBaseBackend("")
 
         if not os.path.isdir(self.dbPath):
@@ -231,7 +228,7 @@ class XMLCache:
         if not os.path.isdir( self.xml_path ):
             os.makedirs(self.xml_path )
 
-        for label in self.labels:
+        for label in labels:
             self.repos.append(XMLRepo(label, self.xml_path, self.pk))
 
     def convertTroveToDict(self, troveTupleList):
diff --git a/backends/conary/conaryBackend.py b/backends/conary/conaryBackend.py
index 5de8cea..61776cb 100755
--- a/backends/conary/conaryBackend.py
+++ b/backends/conary/conaryBackend.py
@@ -88,7 +88,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         self.cfg = conary.cfg
         self.client = conary.cli
         self.conary = conary
-        self.xmlcache = XMLCache()
+        self.xmlcache = XMLCache(self.conary.get_labels())
 
     def _get_package_name_from_ids(self, package_ids):
         return [split_package_id(x)[0] for x in package_ids]
@@ -520,7 +520,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         self._display_updates(installs + updates)
 
     def get_repo_list(self, filters):
-        labels = self.conary.get_labels_from_config()
+        labels = self.conary.get_labels()
         self.status(STATUS_QUERY)
         for repo in labels:
             repo_name = repo.split("@")[0]
diff --git a/backends/conary/conarypk.py b/backends/conary/conarypk.py
index 367e4d1..7a23a5b 100644
--- a/backends/conary/conarypk.py
+++ b/backends/conary/conarypk.py
@@ -245,7 +245,7 @@ class ConaryPk:
         if installLabel:
             return Label(installLabel)
         return self.default_label
-    def get_labels_from_config(self):
+    def get_labels(self):
         labels = []
         for i in self.default_label:
             #if "foresight.rpath.org" or "conary.rpath.com" in i.asString():
@@ -293,7 +293,7 @@ class ConaryPk:
         return files
 
     def search_path(self,path_file ):
-        labels = self.get_labels_from_config()
+        labels = self.get_labels()
         where = self._get_repos()
         for label in self.default_label:
             trove = where.getTroveLeavesByPath([path_file], label)
diff --git a/backends/conary/generateXML.py b/backends/conary/generateXML.py
index e94f47c..8b37656 100644
--- a/backends/conary/generateXML.py
+++ b/backends/conary/generateXML.py
@@ -67,10 +67,9 @@ def generate_xml( troves, label):
         document.append(package)
     return document
 
-def init(label, fileoutput, conarypk=None):
+def init(label, fileoutput):
 
-    if not conarypk:
-        conarypk = ConaryPk()
+    conarypk = ConaryPk()
 
     cli = conarypk.cli
     cfg = conarypk.cfg
commit 7fd365ef0bf32538d5eaa9da4b6ea6164d6586ec
Author: Jesse Zhang <zh.jesse at gmail.com>
Date:   Mon Apr 11 21:07:12 2011 +0800

    conary: use makedirs instead of mkdir
    
    ConaryPk should be initialized after XMLCache, since the later creates a
    dir that ConaryPk uses. But in order not introduce coupling, simply use
    makedirs instead of mkdir.

diff --git a/backends/conary/conarypk.py b/backends/conary/conarypk.py
index f66646d..367e4d1 100644
--- a/backends/conary/conarypk.py
+++ b/backends/conary/conarypk.py
@@ -170,7 +170,7 @@ class UpdateJobCache:
 
     def __init__(self, jobPath='/var/cache/conary/jobs/', createJobPath=True):
         if createJobPath and not os.path.isdir(jobPath):
-            os.mkdir(jobPath)
+            os.makedirs(jobPath)
         self._jobPath = jobPath
 
     def _getJobCachePath(self, applyList):
commit d286eaddb92540aad76271e5b88cf0c1237758e2
Author: Jesse Zhang <zh.jesse at gmail.com>
Date:   Mon Apr 11 20:42:56 2011 +0800

    docs: fix path of packagekitd
    
    packagekitd is now in /usr/libexec.

diff --git a/docs/html/pk-bugs.html b/docs/html/pk-bugs.html
index a0a1dac..0b9a974 100644
--- a/docs/html/pk-bugs.html
+++ b/docs/html/pk-bugs.html
@@ -57,7 +57,7 @@ useful when debugging problems.
 
 <pre>
 sudo killall packagekitd
-sudo /usr/sbin/packagekitd --verbose
+sudo /usr/libexec/packagekitd --verbose
 </pre>
 
 <h2>GConf session settings</h2>
@@ -77,7 +77,7 @@ else the reports from gdb won't mean much to any of us.
 </p>
 
 <pre>
-gdb /usr/sbin/packagekitd
+gdb /usr/libexec/packagekitd
 </pre>
 <p>
 The GNU debugger (gdb) will start and put you at a prompt:
commit e2e91d4b38af338c986aa10c4e043fc8c179d997
Author: Jesse Zhang <zh.jesse at gmail.com>
Date:   Mon Apr 11 17:35:36 2011 +0800

    pkcon: add missing {} around if

diff --git a/client/pk-console.c b/client/pk-console.c
index 38d2f01..e00b944 100644
--- a/client/pk-console.c
+++ b/client/pk-console.c
@@ -1203,9 +1203,10 @@ pk_console_get_summary (void)
 		g_string_append_printf (string, "  %s\n", "rollback");
 	if (pk_bitfield_contain (roles, PK_ROLE_ENUM_GET_REPO_LIST))
 		g_string_append_printf (string, "  %s\n", "repo-list");
-	if (pk_bitfield_contain (roles, PK_ROLE_ENUM_REPO_ENABLE))
+	if (pk_bitfield_contain (roles, PK_ROLE_ENUM_REPO_ENABLE)) {
 		g_string_append_printf (string, "  %s\n", "repo-enable [repo_id]");
 		g_string_append_printf (string, "  %s\n", "repo-disable [repo_id]");
+	}
 	if (pk_bitfield_contain (roles, PK_ROLE_ENUM_REPO_SET_DATA))
 		g_string_append_printf (string, "  %s\n", "repo-set-data [repo_id] [parameter] [value];");
 	if (pk_bitfield_contain (roles, PK_ROLE_ENUM_WHAT_PROVIDES))
commit 41b4d17c01fc67400b4a6737c135c9c545e4cf89
Author: Jesse Zhang <zh.jesse at gmail.com>
Date:   Mon Apr 11 15:00:47 2011 +0800

    conary: port away from PK_BACKEND_OPTIONS
    
    And some minor cleanup in Makefile.am
    
    Fix the prototype of pk_backend_simulate_remove_packages. There was one
    argument missing.
    
    Fix the name of pk_backend_search_names/groups/files.

diff --git a/backends/conary/Makefile.am b/backends/conary/Makefile.am
index 7a71ef0..7a3fed3 100644
--- a/backends/conary/Makefile.am
+++ b/backends/conary/Makefile.am
@@ -7,11 +7,11 @@ dist_helper_DATA = 			\
 	conaryFilter.py			\
 	conaryCallback.py		\
 	conaryInit.py			\
-	XMLCache.py			    \
-	generateXML.py			    \
+	XMLCache.py			\
+	generateXML.py			\
 	pkConaryLog.py			\
-	conarypk.py			    \
-    conaryProgress.py       \
+	conarypk.py			\
+	conaryProgress.py		\
 	conaryEnums.py
 
 plugindir = $(PK_PLUGIN_DIR)
@@ -26,4 +26,3 @@ install-data-hook:
 
 clean-local :
 	rm -f *~
-
diff --git a/backends/conary/pk-backend-conary.c b/backends/conary/pk-backend-conary.c
index 88f8cfa..e10b8b2 100644
--- a/backends/conary/pk-backend-conary.c
+++ b/backends/conary/pk-backend-conary.c
@@ -28,11 +28,29 @@
 static PkBackendSpawn *spawn;
 
 /**
- * backend_initialize:
+ * pk_backend_get_description:
+ */
+gchar *
+pk_backend_get_description (PkBackend *backend)
+{
+	return g_strdup ("Conary");
+}
+
+/**
+ * pk_backend_get_author:
+ */
+gchar *
+pk_backend_get_author (PkBackend *backend)
+{
+	return g_strdup ("Andres Vargas <zodman at foresightlinux.org>");
+}
+
+/**
+ * pk_backend_initialize:
  * This should only be run once per backend load, i.e. not every transaction
  */
-static void
-backend_initialize (PkBackend *backend)
+void
+pk_backend_initialize (PkBackend *backend)
 {
 	g_debug ("backend: initialize");
 	spawn = pk_backend_spawn_new ();
@@ -40,21 +58,21 @@ backend_initialize (PkBackend *backend)
 }
 
 /**
- * backend_destroy:
+ * pk_backend_destroy:
  * This should only be run once per backend load, i.e. not every transaction
  */
-static void
-backend_destroy (PkBackend *backend)
+void
+pk_backend_destroy (PkBackend *backend)
 {
 	g_debug ("backend: destroy");
 	g_object_unref (spawn);
 }
 
 /**
- * backend_get_groups:
+ * pk_backend_get_groups:
 */
-static PkBitfield
-backend_get_groups (PkBackend *backend)
+PkBitfield
+pk_backend_get_groups (PkBackend *backend)
 {
 	return pk_bitfield_from_enums (
 		PK_GROUP_ENUM_ACCESSIBILITY,
@@ -71,21 +89,20 @@ backend_get_groups (PkBackend *backend)
 		-1);
 }
 
-
 /**
- * backend_get_filters:
+ * pk_backend_get_filters:
  */
-static PkBitfield
-backend_get_filters (PkBackend *backend)
+PkBitfield
+pk_backend_get_filters (PkBackend *backend)
 {
 	return pk_bitfield_from_enums (PK_FILTER_ENUM_INSTALLED, -1);
 }
 
 /**
- * backend_get_roles:
+ * pk_backend_get_roles:
  */
-static PkBitfield
-backend_get_roles (PkBackend *backend)
+PkBitfield
+pk_backend_get_roles (PkBackend *backend)
 {
 	PkBitfield roles;
 	roles = pk_bitfield_from_enums (
@@ -115,18 +132,18 @@ backend_get_roles (PkBackend *backend)
 /**
  * pk_backend_cancel:
  */
-static void
-backend_cancel (PkBackend *backend)
+void
+pk_backend_cancel (PkBackend *backend)
 {
 	/* this feels bad... */
 	pk_backend_spawn_kill (spawn);
 }
 
 /**
- * backend_get_details:
+ * pk_backend_get_details:
  */
-static void
-backend_get_details (PkBackend *backend, gchar **package_ids)
+void
+pk_backend_get_details (PkBackend *backend, gchar **package_ids)
 {
 	gchar *package_ids_temp;
 	package_ids_temp = pk_package_ids_to_string (package_ids);
@@ -135,10 +152,10 @@ backend_get_details (PkBackend *backend, gchar **package_ids)
 }
 
 /**
- * backend_get_files:
+ * pk_backend_get_files:
  */
-static void
-backend_get_files (PkBackend *backend, gchar **package_ids)
+void
+pk_backend_get_files (PkBackend *backend, gchar **package_ids)
 {
 	gchar *package_ids_temp;
 	package_ids_temp = pk_package_ids_to_string (package_ids);
@@ -147,10 +164,10 @@ backend_get_files (PkBackend *backend, gchar **package_ids)
 }
 
 /**
- * backend_get_updates:
+ * pk_backend_get_updates:
  */
-static void
-backend_get_updates (PkBackend *backend, PkBitfield filters)
+void
+pk_backend_get_updates (PkBackend *backend, PkBitfield filters)
 {
 	gchar *filters_text;
 	filters_text = pk_filter_bitfield_to_string (filters);
@@ -159,10 +176,10 @@ backend_get_updates (PkBackend *backend, PkBitfield filters)
 }
 
 /**
- * backend_get_update_detail:
+ * pk_backend_get_update_detail:
  */
-static void
-backend_get_update_detail (PkBackend *backend, gchar **package_ids)
+void
+pk_backend_get_update_detail (PkBackend *backend, gchar **package_ids)
 {
 	gchar *package_ids_temp;
 	package_ids_temp = pk_package_ids_to_string (package_ids);
@@ -170,11 +187,11 @@ backend_get_update_detail (PkBackend *backend, gchar **package_ids)
 	g_free (package_ids_temp);
 }
 /**
- * backend_install_packages:
+ * pk_backend_install_packages:
 */
 
-static void
-backend_install_packages (PkBackend *backend, gboolean only_trusted, gchar **package_ids)
+void
+pk_backend_install_packages (PkBackend *backend, gboolean only_trusted, gchar **package_ids)
 {
 	gchar *package_ids_temp;
 
@@ -192,24 +209,10 @@ backend_install_packages (PkBackend *backend, gboolean only_trusted, gchar **pac
 }
 
 /**
- * backend_install_files:
- */
-/**
-static void
-backend_install_files (PkBackend *backend, gboolean only_trusted, const gchar *full_paths)
-{
-	gchar *package_ids_temp;
-
-	package_ids_temp = pk_package_ids_to_string (package_ids);
-	pk_backend_spawn_helper (spawn, "conaryBackend.py", "install-files", pk_backend_bool_to_string (only_trusted), full_paths, NULL);
-	g_free (package_ids_temp);
-}
-*/
-/**
- * backend_refresh_cache:
+ * pk_backend_refresh_cache:
  */
-static void
-backend_refresh_cache (PkBackend *backend, gboolean force)
+void
+pk_backend_refresh_cache (PkBackend *backend, gboolean force)
 {
 	/* check network state */
 	if (!pk_backend_is_online (backend)) {
@@ -224,14 +227,8 @@ backend_refresh_cache (PkBackend *backend, gboolean force)
 /**
  * pk_backend_remove_packages:
  */
-
-/*
- zodman notes:
- python conaryBackend.py  remove-packages none  "pastebinit;0.7-1-1;x86;/foresight.rpath.org at fl:2-qa/1222042924.172:0.7-1-1,1#x86"
-
- */
-static void
-backend_remove_packages (PkBackend *backend, gchar **package_ids, gboolean allow_deps, gboolean autoremove)
+void
+pk_backend_remove_packages (PkBackend *backend, gchar **package_ids, gboolean allow_deps, gboolean autoremove)
 {
 	gchar *package_ids_temp;
 
@@ -242,10 +239,10 @@ backend_remove_packages (PkBackend *backend, gchar **package_ids, gboolean allow
 }
 
 /**
- * pk_backend_search_name:
+ * pk_backend_search_names:
  */
-static void
-backend_search_name (PkBackend *backend, PkBitfield filters, gchar **values)
+void
+pk_backend_search_names (PkBackend *backend, PkBitfield filters, gchar **values)
 {
 	gchar *filters_text;
 	gchar *search;
@@ -257,10 +254,10 @@ backend_search_name (PkBackend *backend, PkBitfield filters, gchar **values)
 }
 
 /**
-    pk_backend_search_groups
-*/
-static void
-backend_search_group (PkBackend *backend, PkBitfield filters, gchar **values)
+ * pk_backend_search_groups
+ */
+void
+pk_backend_search_groups (PkBackend *backend, PkBitfield filters, gchar **values)
 {
 	gchar *filters_text;
 	gchar *search;
@@ -272,14 +269,11 @@ backend_search_group (PkBackend *backend, PkBitfield filters, gchar **values)
 	g_free (search);
 }
 
-
-
-
 /**
-    pk_backend_search_details
-*/
-static void
-backend_search_details (PkBackend *backend, PkBitfield filters, gchar **values)
+ * pk_backend_search_details
+ */
+void
+pk_backend_search_details (PkBackend *backend, PkBitfield filters, gchar **values)
 {
 	gchar *filters_text;
 	gchar *search;
@@ -293,8 +287,8 @@ backend_search_details (PkBackend *backend, PkBitfield filters, gchar **values)
 /**
  * pk_backend_update_system:
  */
-static void
-backend_update_system (PkBackend *backend, gboolean only_trusted)
+void
+pk_backend_update_system (PkBackend *backend, gboolean only_trusted)
 {
 	pk_backend_spawn_helper (spawn, "conaryBackend.py", "update-system", pk_backend_bool_to_string (only_trusted), NULL);
 }
@@ -302,8 +296,8 @@ backend_update_system (PkBackend *backend, gboolean only_trusted)
 /**
  * pk_backend_resolve:
  */
-static void
-backend_resolve (PkBackend *backend, PkBitfield filters, gchar **package_ids)
+void
+pk_backend_resolve (PkBackend *backend, PkBitfield filters, gchar **package_ids)
 {
 	gchar *filters_text;
 	filters_text = pk_filter_bitfield_to_string (filters);
@@ -311,23 +305,23 @@ backend_resolve (PkBackend *backend, PkBitfield filters, gchar **package_ids)
 	g_free (filters_text);
 }
 
-
 /**
- * backend_get_packages:
+ * pk_backend_get_packages:
  */
-static void
-backend_get_packages (PkBackend *backend, PkBitfield filters)
+void
+pk_backend_get_packages (PkBackend *backend, PkBitfield filters)
 {
     gchar *filters_text;
     filters_text = pk_filter_bitfield_to_string (filters);
     pk_backend_spawn_helper (spawn, "conaryBackend.py", "get-packages", filters_text, NULL);
     g_free (filters_text);
 }
+
 /**
- * pk_backend_search_file:
+ * pk_backend_search_files:
  */
-static void
-backend_search_file (PkBackend *backend, PkBitfield filters, gchar **values)
+void
+pk_backend_search_files (PkBackend *backend, PkBitfield filters, gchar **values)
 {
 	gchar *filters_text;
 	gchar *search;
@@ -340,20 +334,10 @@ backend_search_file (PkBackend *backend, PkBitfield filters, gchar **values)
 }
 
 /**
- * backend_get_distro_upgrades:
-static void
-backend_get_distro_upgrades (PkBackend *backend)
-{
-    pk_backend_spawn_helper (spawn, "conaryBackend.py", "get-distro-upgrades", NULL);
-}
-
- */
-
-
-/**
  * pk_backend_get_repo_list:
  */
-static void backend_get_repo_list (PkBackend *backend, PkBitfield filters)
+void
+pk_backend_get_repo_list (PkBackend *backend, PkBitfield filters)
 {
     gchar *filters_text;
     filters_text = pk_filter_bitfield_to_string (filters);
@@ -362,10 +346,10 @@ static void backend_get_repo_list (PkBackend *backend, PkBitfield filters)
 }
 
 /**
- * backend_simulate_install_packages:
+ * pk_backend_simulate_install_packages:
  */
-static void
-backend_simulate_install_packages (PkBackend *backend, gchar **package_ids)
+void
+pk_backend_simulate_install_packages (PkBackend *backend, gchar **package_ids)
 {
 	gchar *package_ids_temp;
 
@@ -383,10 +367,10 @@ backend_simulate_install_packages (PkBackend *backend, gchar **package_ids)
 }
 
 /**
- * backend_simulate_remove_packages:
+ * pk_backend_simulate_remove_packages:
  */
-static void
-backend_simulate_remove_packages (PkBackend *backend, gchar **package_ids)
+void
+pk_backend_simulate_remove_packages (PkBackend *backend, gchar **package_ids, gboolean autoremove)
 {
 	gchar *package_ids_temp;
 
@@ -395,51 +379,3 @@ backend_simulate_remove_packages (PkBackend *backend, gchar **package_ids)
 	pk_backend_spawn_helper (spawn, "conaryBackend.py", "simulate-remove-packages", package_ids_temp, NULL);
 	g_free (package_ids_temp);
 }
-
-/* FIXME: port this away from PK_BACKEND_OPTIONS */
-PK_BACKEND_OPTIONS (
-	"Conary with XMLCache",				/* description */
-	"Andres Vargas <zodman at foresightlinux.org>", /* author */
-	backend_initialize,			/* initalize */
-	backend_destroy,			/* destroy */
-	backend_get_groups,			/* get_groups */
-	backend_get_filters,			/* get_filters */
-	backend_get_roles,			/* get_roles */
-	NULL,					/* get_mime_types */
-	backend_cancel,				/* cancel */
-	NULL,					/* download_packages */
-	NULL,					/* get_categories */
-	NULL,					/* get_depends */
-	backend_get_details,			/* get_details */
-	NULL,	                /* get_distro_upgrades */
-	backend_get_files,			/* get_files */
-	backend_get_packages,					/* get_packages */
-	backend_get_repo_list,					/* get_repo_list */
-	NULL,					/* get_requires */
-	backend_get_update_detail,              /* get_update_detail */
-	backend_get_updates,			/* get_updates */
-	NULL,					/* install_files */
-	backend_install_packages,		/* install_packages */
-	NULL,					/* install_signature */
-	backend_refresh_cache,			/* refresh_cache */
-	backend_remove_packages,		/* remove_packages */
-	NULL,					/* repo_enable */
-	NULL,					/* repo_set_data */
-	backend_resolve,			/* resolve */
-	NULL,					/* rollback */
-	backend_search_details,					/* search_details */
-	backend_search_file,					/* search_file */
-	backend_search_group,					/* search_group */
-	backend_search_name,			/* search_name */
-	NULL,					/* update_packages */
-	backend_update_system,			/* update_system */
-	NULL,					/* what_provides */
-	NULL,					/* simulate_install_files */
-	backend_simulate_install_packages,	/* simulate_install_packages */
-	backend_simulate_remove_packages,	/* simulate_remove_packages */
-	NULL,					/* simulate_update_packages */
-	NULL,					/* upgrade_system */
-	NULL,					/* transaction_start */
-	NULL					/* transaction_stop */
-);
-
commit 6a2c17abdf9a3ad58090a16dc599c5ee2d58c10d
Author: Fabio Erculiani <lxnay at sabayon.org>
Date:   Mon Apr 11 10:10:01 2011 +0200

    entropy: restore compatibility with newer releases

diff --git a/backends/entropy/entropyBackend.py b/backends/entropy/entropyBackend.py
index 1de42cc..02b83a7 100755
--- a/backends/entropy/entropyBackend.py
+++ b/backends/entropy/entropyBackend.py
@@ -65,6 +65,7 @@ from entropy.core.settings.base import SystemSettings
 from entropy.misc import LogFile
 from entropy.cache import EntropyCacher
 from entropy.exceptions import SystemDatabaseError
+from entropy.db.exceptions import Error as EntropyRepositoryError
 try:
     from entropy.exceptions import DependenciesNotRemovable
 except ImportError:
@@ -861,12 +862,8 @@ class PackageKitEntropyBackend(PackageKitBaseBackend, PackageKitEntropyMixin):
         self._log_message(__name__, "_generic_message:", decolorize(message))
 
     def _config_files_message(self):
-        if hasattr(self._entropy, "PackageFileUpdates"):
-            scandata = self._entropy.PackageFileUpdates().scan(dcache = True,
-                quiet = True)
-        else:
-            scandata = self._entropy.FileUpdates.scan(dcache = True,
-                quiet = True)
+        scandata = self._entropy.PackageFileUpdates().scan(dcache = True,
+            quiet = True)
         if scandata is None:
             return
         if len(scandata) > 0:
@@ -987,6 +984,17 @@ class PackageKitEntropyBackend(PackageKitBaseBackend, PackageKitEntropyMixin):
 
         self.percentage(100)
 
+    def _etp_get_package_categories(self):
+        categories = set()
+        for repository_id in self._entropy.repositories():
+            repo_db = self._entropy.open_repository(repository_id)
+            try:
+                categories.update(repo_db.listAllCategories())
+            except EntropyRepositoryError:
+                # on broken repos this might cause issues
+                continue
+        return sorted(categories)
+
     def get_categories(self):
 
         self._log_message(__name__, "get_categories: called")
@@ -994,7 +1002,7 @@ class PackageKitEntropyBackend(PackageKitBaseBackend, PackageKitEntropyMixin):
         self.status(STATUS_QUERY)
         self.allow_cancel(True)
 
-        categories = self._entropy.get_package_categories()
+        categories = self._etp_get_package_categories()
         if not categories:
             self.error(ERROR_GROUP_LIST_INVALID, "no package categories")
             return
@@ -1161,7 +1169,7 @@ class PackageKitEntropyBackend(PackageKitBaseBackend, PackageKitEntropyMixin):
 
         empty = False
         deep = False
-        reverse_deps = self._entropy.get_reverse_dependencies(matches,
+        reverse_deps = self._entropy.get_reverse_queue(matches,
             deep = deep, recursive = recursive)
 
         self._log_message(__name__, "get_requires: reverse_deps => %s" % (
@@ -1325,7 +1333,8 @@ class PackageKitEntropyBackend(PackageKitBaseBackend, PackageKitEntropyMixin):
         pkg_ids = []
         for etp_file in inst_files:
             repo_id = os.path.basename(etp_file)
-            status, atomsfound = self._entropy.add_package_to_repos(etp_file)
+            status, atomsfound = self._entropy.add_package_to_repositories(
+                etp_file)
             if status != 0:
                 self.error(ERROR_INVALID_PACKAGE_FILE,
                     "Error while trying to add %s repository" % (repo_id,))
commit bec17c432f666d6ed8aabc5056cac8318b0f6a23
Author: Fabio Erculiani <lxnay at sabayon.org>
Date:   Mon Apr 11 10:03:57 2011 +0200

    entropy: make use of the new Entropy Web Services interfaces

diff --git a/backends/entropy/entropyBackend.py b/backends/entropy/entropyBackend.py
index 0487b12..1de42cc 100755
--- a/backends/entropy/entropyBackend.py
+++ b/backends/entropy/entropyBackend.py
@@ -70,6 +70,10 @@ try:
 except ImportError:
     DependenciesNotRemovable = Exception
 from entropy.fetchers import UrlFetcher
+try:
+    from entropy.services.client import WebService
+except ImportError:
+    WebService = None
 
 import entropy.tools
 import entropy.dep
@@ -357,19 +361,41 @@ class PackageKitEntropyMixin(object):
             self._repo_name_cache[repo_db] = repo_name
         return repo_name
 
+    def _etp_get_webservice(self, repository_id):
+        """
+        Get Entropy Web Services service object (ClientWebService).
+
+        @param entropy_client: Entropy Client interface
+        @type entropy_client: entropy.client.interfaces.Client
+        @param repository_id: repository identifier
+        @type repository_id: string
+        @return: the ClientWebService instance
+        @rtype: entropy.client.services.interfaces.ClientWebService
+        @raise WebService.UnsupportedService: if service is unsupported by
+            repository
+        """
+        factory = self._entropy.WebServices()
+        return factory.new(repository_id)
+
     def _etp_spawn_ugc(self, pkg_data):
         """
         Inform repository maintainers that user fetched packages, if user
         enabled this feature.
         """
-        if self._entropy.UGC is None:
+        if WebService is None:
+            # old entropy library, ignore all
             return
-        for repo_id in pkg_data:
-            repo_pkg_keys = sorted(pkg_data[repo_id])
+
+        for repository_id, repo_pkg_keys in pkg_data.items():
+            try:
+                webserv = self._etp_get_webservice(repository_id)
+            except WebService.UnsupportedService:
+                continue
+            pkg_keys = sorted(repo_pkg_keys)
             try:
-                self._entropy.UGC.add_download_stats(repo_id, repo_pkg_keys)
-            except:
-                pass
+                webserv.add_downloads(pkg_keys)
+            except WebService.WebServiceException:
+                continue
 
     def _etp_get_category_description(self, category):
         """
@@ -1367,6 +1393,24 @@ class PackageKitEntropyBackend(PackageKitBaseBackend, PackageKitEntropyMixin):
 
         self._execute_etp_pkgs_fetch(pkgs, directory)
 
+    def _etp_update_repository_stats(self, repository_ids):
+        """
+        Update repository download statistics.
+        """
+        if WebService is None:
+            # old entropy library, ignore all
+            return
+
+        for repository_id in repository_ids:
+            try:
+                webserv = self._etp_get_webservice(repository_id)
+            except WebService.UnsupportedService:
+                continue
+            try:
+                webserv.add_downloads(repository_id, [repository_id])
+            except WebService.WebServiceException:
+                continue
+
     def refresh_cache(self, force):
 
         self.status(STATUS_REFRESH_CACHE)
@@ -1388,10 +1432,7 @@ class PackageKitEntropyBackend(PackageKitBaseBackend, PackageKitEntropyMixin):
 
         ex_rc = repo_intf.sync()
         if not ex_rc:
-            for repo_id in repo_identifiers:
-                # inform UGC that we are syncing this repo
-                if self._entropy.UGC is not None:
-                    self._entropy.UGC.add_download_stats(repo_id, [repo_id])
+            self._etp_update_repository_stats(repo_identifiers)
         else:
             self.message(MESSAGE_REPO_METADATA_DOWNLOAD_FAILED,
                 "Cannot update repositories!")
commit 7ed083bda2090bd1218f6104e84686a9d2d119a0
Merge: 27ca81a... dc9af32...
Author: Matthias Klumpp <matthias at nlinux.org>
Date:   Sun Apr 10 15:32:23 2011 +0200

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

commit 27ca81a196343946fa7574ed693221eecdebb350
Author: Matthias Klumpp <matthias at nlinux.org>
Date:   Sun Apr 10 15:31:53 2011 +0200

    trivial: Inform about GNOME-PackageKit in Debian
    
    GPK can now be fetched from Debian Sid.

diff --git a/docs/html/pk-download.html b/docs/html/pk-download.html
index f27bbc0..715a855 100644
--- a/docs/html/pk-download.html
+++ b/docs/html/pk-download.html
@@ -35,7 +35,7 @@ your native package manager.
   </li>
   <li>
    Debian: Yes, packages are available for Debian Sid.
-   Just install <code>packagekit</code> via APT. PackageKit frontends are not yet packaged for Debian.
+   Just run <code>apt-get install packagekit gnome-packagekit</code> (as root).
   </li>
   <li>
    Ubuntu: Yes, starting with Hardy Heron (8.04), that ships an obsolete version (0.1.6) of PackageKit by default.
commit dc9af3229438ef12b6abbdfa5965954e62331cb0
Author: Og B. Maciel <ogmaciel at gnome.org>
Date:   Sat Apr 9 09:23:49 2011 -0400

    Minor typo

diff --git a/backends/conary/generateXML.py b/backends/conary/generateXML.py
index b8b45a8..e94f47c 100644
--- a/backends/conary/generateXML.py
+++ b/backends/conary/generateXML.py
@@ -58,7 +58,7 @@ def generate_xml( troves, label):
                     for cat in value:
                         cat_node = cElementTree.Element("category", lang = "en")
                         cat_node.text = cat
-                        package.append(node)
+                        package.append(cat_node)
                 else:
                     node = cElementTree.Element(key, lang = "en")
                     node.text = value
commit 1394da3430643d583d4a6c24747922f5bec4bf30
Author: Jesse Zhang <zh.jesse at gmail.com>
Date:   Sat Apr 9 10:14:53 2011 +0800

    conary: assorted fixes

diff --git a/backends/conary/conaryBackend.py b/backends/conary/conaryBackend.py
index d8d2566..5de8cea 100755
--- a/backends/conary/conaryBackend.py
+++ b/backends/conary/conaryBackend.py
@@ -62,25 +62,6 @@ def ExceptionHandler(func):
             self.error(ERROR_UNKNOWN, display(e), exit=True)
     return wrapper
 
-def _format_str(str):
-    """
-    Convert a multi line string to a list separated by ';'
-    """
-    if str:
-        lines = str.split('\n')
-        return ";".join(lines)
-    else:
-        return ""
-
-def _format_list(lst):
-    """
-    Convert a multi line string to a list separated by ';'
-    """
-    if lst:
-        return ";".join(lst)
-    else:
-        return ""
-
 def _get_trovespec_from_ids(package_ids):
     ret = []
     for p in package_ids:
@@ -109,30 +90,16 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         self.conary = conary
         self.xmlcache = XMLCache()
 
-    def _freezeData(self, version, flavor):
-        frzVersion = version.freeze()
-        frzFlavor = flavor.freeze()
-        return ','.join([frzVersion, frzFlavor])
-
-    def _thawData(self, frzVersion, frzFlavor ):
-        version = versions.ThawVersion(frzVersion)
-        flavor = deps.ThawFlavor(frzFlavor)
-        return version, flavor
-
     def _get_package_name_from_ids(self, package_ids):
         return [split_package_id(x)[0] for x in package_ids]
 
-    def get_package_id_new(self,pkg):
-        name,version,flavor = pkg.get("trove")
-        metadata = pkg.get("metadata")
+    def _format_package_summary(self, name, metadata):
         data = ""
-        if metadata:
-            if "shortDesc" in metadata:
-                data = metadata['shortDesc'].decode("UTF")
-                if data == "." or data == "":
-                    data = name.replace("-",' ').capitalize()
-        return get_package_id(name, str(version.trailingRevision()),
-                conarypk.get_arch(flavor), data)
+        if "shortDesc" in metadata:
+            data = metadata['shortDesc'].decode("UTF")
+        if data == "." or data == "":
+            data = name.replace("-",' ').capitalize()
+        return data
 
     def _search_package(self, pkg_list, name):
         for pkg in pkg_list:
@@ -286,8 +253,8 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
 
         if not is_found_locally and FILTER_INSTALLED not in filters:
             trove_available = self.conary.repo_query(pkg_dict.get("name"))
-            if trove_available:
-                pkg = self._convert_package(trove_available[0], pkg_dict)
+            for trv in trove_available:
+                pkg = self._convert_package(trv, pkg_dict)
                 filter.add_available([pkg])
 
         package_list = filter.post_process()
@@ -297,16 +264,14 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         """@lst(list(tuple) = [ ( troveTuple, status ) ]
         """
         for pkg, status in lst:
-            package_id = self.get_package_id_new(pkg)
+            name, v, f = pkg["trove"]
+            version = str(v.trailingRevision())
+            label = str(v.trailingLabel())
+            arch = conarypk.get_arch(f)
 
-            # split the list for get Determine info
-            summary = package_id.split(";")
-            name = summary[0]
-            meta = summary[3]
-
-            summary[3] = pkg.get("metadata").get("label")
-            pkg_id = ";".join(summary)
-            self.package(package_id, status, meta )
+            pkg_id = get_package_id(name, version, arch, label)
+            summary = self._format_package_summary(name, pkg["metadata"])
+            self.package(pkg_id, status, summary)
 
     @ExceptionHandler
     def search_group(self, options, searchlist):
@@ -370,7 +335,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
     @ExceptionHandler
     def update_system(self, only_trusted):
         # FIXME: use only_trusted
-        self.allow_cancel(True)
+        self.allow_cancel(False)
         self.status(STATUS_UPDATE)
         cb = UpdateSystemCallback(self, self.cfg)
         self._do_conary_updateall(cb, dry_run=False)
@@ -387,11 +352,11 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
 
         pkgs should be a list of (name, Version, Flavor, status) tuples.
         '''
-        for (name, version, flavor, status) in pkgs:
-            v = str(version.trailingRevision())
-            f = conarypk.get_arch(flavor)
-            data = ''
-            pkg_id = get_package_id(name, v, f, data)
+        for (name, v, f, status) in pkgs:
+            version = str(v.trailingRevision())
+            arch = conarypk.get_arch(f)
+            label = str(v.trailingLabel())
+            pkg_id = get_package_id(name, version, arch, label)
             summary = ''
             self.package(pkg_id, status, summary)
 
@@ -450,7 +415,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         self.percentage(None)
         self.status(STATUS_INFO)
         for package_id in package_ids:
-            name, version, arch, summary = split_package_id(package_id)
+            name, version, arch, label = split_package_id(package_id)
             pkgDict = self.xmlcache.resolve(name)
             update = ""
             obsolete = ""
@@ -458,9 +423,9 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
             if pkgDict:
                 vendor_url = pkgDict.get("url","")
                 desc = pkgDict.get("longDesc","")
-                reboot = self._get_restart(pkgDict.get("name"))
-                state = self._get_branch( pkgDict.get("label"))
-                bz_url = self._get_fits(pkgDict.get("label"), pkgDict.get("name"))
+                reboot = self._get_restart(name)
+                state = self._get_branch(label)
+                bz_url = self._get_fits(label)
                 self.update_detail(package_id, update, obsolete, vendor_url, bz_url, cve_url,
                         reboot, desc, changelog="", state= state, issued="", updated = "")
 
@@ -505,7 +470,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         else:
             return INFO_NORMAL
 
-    def _get_fits(self, branch, pkg_name):
+    def _get_fits(self, branch):
         if "conary.rpath.com" in branch:
             return "http://issues.rpath.com;rPath Issues Tracker"
         elif "foresight.rpath.org" in branch:
diff --git a/backends/conary/conarypk.py b/backends/conary/conarypk.py
index 23f069e..f66646d 100644
--- a/backends/conary/conarypk.py
+++ b/backends/conary/conarypk.py
@@ -12,7 +12,6 @@ from conary import errors
 from conary.cmds import query, queryrep
 from conary.conaryclient import ConaryClient, cmdline
 from conary.conaryclient import cml, systemmodel, modelupdate
-from conary.conaryclient.update import NoNewTrovesError
 from conary.versions import Label
 from conary.deps import deps
 
@@ -161,7 +160,7 @@ def _model_do_conary_updateall(cfg, callback, dry_run=False):
 
     if not dry_run:
         _model_apply_update_job(ret[0], cfg, modelFile, callback)
-    return updJob
+    return ret
 
 class UpdateJobCache:
     '''A cache to store (freeze) conary UpdateJobs.
@@ -342,7 +341,7 @@ class ConaryPk:
         if cache and jobPath:
             try:
                 updJob.thaw(jobPath)
-            except IOError, err:
+            except IOError:
                 updJob = None
         else:
             try:
diff --git a/backends/conary/pk-backend-conary.c b/backends/conary/pk-backend-conary.c
index 52f55df..88f8cfa 100644
--- a/backends/conary/pk-backend-conary.c
+++ b/backends/conary/pk-backend-conary.c
@@ -94,6 +94,7 @@ backend_get_roles (PkBackend *backend)
 		PK_ROLE_ENUM_GET_FILES,
 		PK_ROLE_ENUM_GET_PACKAGES,
 		PK_ROLE_ENUM_GET_UPDATES,
+		PK_ROLE_ENUM_GET_UPDATE_DETAIL,
 		PK_ROLE_ENUM_INSTALL_PACKAGES,
 		PK_ROLE_ENUM_REFRESH_CACHE,
 		PK_ROLE_ENUM_REMOVE_PACKAGES,
@@ -415,7 +416,7 @@ PK_BACKEND_OPTIONS (
 	backend_get_packages,					/* get_packages */
 	backend_get_repo_list,					/* get_repo_list */
 	NULL,					/* get_requires */
-	NULL,//	backend_get_update_detail,              /* get_update_detail */
+	backend_get_update_detail,              /* get_update_detail */
 	backend_get_updates,			/* get_updates */
 	NULL,					/* install_files */
 	backend_install_packages,		/* install_packages */
commit 11da590ed8e51f3d219ee24555dfa03eb8551643
Merge: 66bc1e1... 317128c...
Author: Jesse Zhang <zh.jesse at gmail.com>
Date:   Fri Apr 8 21:19:25 2011 +0800

    Merge branch 'conary'

commit 317128cc9d26f3790fd0413d85337005a235f4f3
Author: Jesse Zhang <zh.jesse at gmail.com>
Date:   Fri Apr 8 17:56:47 2011 +0800

    conary: remove some code duplication

diff --git a/backends/conary/TODO b/backends/conary/TODO
index ef3ce75..8fcaf49 100644
--- a/backends/conary/TODO
+++ b/backends/conary/TODO
@@ -1,12 +1,15 @@
 * the XML cache doesn't include all packages (e.g. ubuntu-font-family/automake)
   - there is probably bugs in the tool ('ticache') that generates the cache.
 * should support system model
-  - the conary-api related code should all be put in conarypk.py
-  - Note: some allow_cancel/status() calls may be lost when moving the code.
+  - don't use conary API directly in conaryBackend.py
   - move self.xmlcache into conarypk, so it won't come in the way of system
     model support.
-  - implement search
+  - implement search (pending upcoming features of conary)
 * fix use of post_process and implement _pkg_compare in conaryFilter.py
   - http://lists.freedesktop.org/archives/packagekit/2011-March/006245.html
-* update conaryCallback.py to base on new callbacks
-  (conary/cmds/updatecmd.py:UpdateCallback) so it can handle system-model.
+* simplify _resolve_list(). It calls conary API directly and has much
+  duplication with resolve().
+  - _show_package_list() has duplication with the newly added _show_packages()
+  - the data structure dict(trove, metadata) (as used in _show_package_list())
+    is too complicated than necessary.
+* decide what to do with package components
diff --git a/backends/conary/conaryBackend.py b/backends/conary/conaryBackend.py
index 3d1db74..d8d2566 100755
--- a/backends/conary/conaryBackend.py
+++ b/backends/conary/conaryBackend.py
@@ -382,26 +382,33 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         self.percentage(None)
         self.xmlcache.refresh()
 
+    def _show_packages(self, pkgs):
+        '''Emit Package signals for a list of packages
+
+        pkgs should be a list of (name, Version, Flavor, status) tuples.
+        '''
+        for (name, version, flavor, status) in pkgs:
+            v = str(version.trailingRevision())
+            f = conarypk.get_arch(flavor)
+            data = ''
+            pkg_id = get_package_id(name, v, f, data)
+            summary = ''
+            self.package(pkg_id, status, summary)
+
     def _display_update_jobs(self, install_jobs, erase_jobs, update_jobs):
         '''Emit package status for a list of installing/erasing/updating jobs
         '''
+        ret = []
         for (name, (oldVer, oldFla), (newVer, newFla)) in install_jobs:
-            v = str(newVer.trailingRevision())
-            f = conarypk.get_arch(newFla)
-            pkg_id = get_package_id(name, v, f, '')
-            self.package(pkg_id, INFO_INSTALLING, '')
+            ret.append((name, newVer, newFla, INFO_INSTALLING))
 
         for (name, (oldVer, oldFla), (newVer, newFla)) in erase_jobs:
-            v = str(oldVer.trailingRevision())
-            f = conarypk.get_arch(oldFla)
-            pkg_id = get_package_id(name, v, f, '')
-            self.package(pkg_id, INFO_REMOVING, '')
+            ret.append((name, oldVer, oldFla, INFO_REMOVING))
 
         for (name, (oldVer, oldFla), (newVer, newFla)) in update_jobs:
-            v = str(oldVer.trailingRevision())
-            f = conarypk.get_arch(oldFla)
-            pkg_id = get_package_id(name, v, f, '')
-            self.package(pkg_id, INFO_UPDATING, '')
+            ret.append((name, oldVer, oldFla, INFO_UPDATING))
+
+        self._show_packages(ret)
 
     def install_packages(self, only_trusted, package_ids, simulate=False):
         self.allow_cancel(False)
@@ -528,12 +535,12 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         jobs should only contain installs and updates. Shouldn't get any erase
         jobs.
         '''
+        ret = []
         for (name, (oldVer, oldFla), (newVer, newFla)) in jobs:
-            v = str(newVer.trailingRevision())
-            f = conarypk.get_arch(newFla)
-            pkg_id = get_package_id(name, v, f, '')
             info = self._get_update_priority(name)
-            self.package(pkg_id, info, '')
+            ret.append((name, newVer, newFla, info))
+
+        self._show_packages(ret)
 
     @ExceptionHandler
     def get_updates(self, filters):
commit f4f9c008ebfbddad4b18e0cc9887b49ce7369c4f
Author: Jesse Zhang <zh.jesse at gmail.com>
Date:   Fri Apr 8 14:04:44 2011 +0800

    conary: move the get-files function into conarypk
    
    Hide implementation details from conaryBackend

diff --git a/backends/conary/conaryBackend.py b/backends/conary/conaryBackend.py
index 12123c6..3d1db74 100755
--- a/backends/conary/conaryBackend.py
+++ b/backends/conary/conaryBackend.py
@@ -25,13 +25,9 @@ import os
 import re
 import xmlrpclib
 
-from conary import dbstore, queryrep, versions, updatecmd
-from conary import errors, conarycfg, conaryclient
-from conary import trove
-from conary.conaryclient import cmdline
+from conary import conaryclient, errors, trove, versions
 from conary.deps import deps
 from conary.lib import util
-from conary.local import database
 
 from packagekit.backend import get_package_id, split_package_id, \
     PackageKitBaseBackend
@@ -355,26 +351,11 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         self.allow_cancel(True)
         self.percentage(None)
         self.status(STATUS_INFO)
-        package_id = package_ids[0]
-        def _get_files(troveSource, n, v, f):
-            files = []
-            trv = troveSource.getTrove(n, v, f)
-            for (n, v, f) in [x for x in trv.iterTroveList(strongRefs=True)
-                                if troveSource.hasTrove(*x)]:
-                for (pathId, path, fileId, version, filename) in \
-                    troveSource.iterFilesInTrove(n, v, f, sortByPath = True,
-                            withFiles=True, capsules=False):
-                    files.append(path)
-            return files
-
-        for package in package_id.split("&"):
-            name, version, flavor, installed = self._findPackage(package)
-
-            if installed == INFO_INSTALLED:
-                files = _get_files(self.client.db, name, version, flavor)
-            else:
-                files = _get_files(self.client.repos, name, version, flavor)
 
+        for package_id in package_ids:
+            name, version, arch, data = split_package_id(package_id)
+            files = self.conary.list_files('%s=%s[is: %s]' %
+                    (name, version, arch))
             self.files(package_id, ';'.join(files))
 
     def _do_conary_updateall(self, callback, dry_run):
@@ -566,25 +547,6 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
                 show_components=False)
         self._display_updates(installs + updates)
 
-    def _findPackage(self, package_id):
-        '''
-        find a package based on a package id (name;version;arch;summary)
-        '''
-        name, verString, archString, data = split_package_id(package_id)
-        troveTuples = self.conary.query(name)
-        info = INFO_INSTALLED
-
-        if not troveTuples:
-            troveTuples = self.conary.repo_query(name)
-            info = INFO_AVAILABLE
-
-        if not troveTuples:
-            self.error(ERROR_INTERNAL_ERROR, "package_id Not Correct ")
-        else:
-            troveTuple = troveTuples[0]
-            name, version, flavor = troveTuple
-            return name, version, flavor, info
-
     def get_repo_list(self, filters):
         labels = self.conary.get_labels_from_config()
         self.status(STATUS_QUERY)
diff --git a/backends/conary/conarypk.py b/backends/conary/conarypk.py
index 4ce91e5..23f069e 100644
--- a/backends/conary/conarypk.py
+++ b/backends/conary/conarypk.py
@@ -9,6 +9,7 @@ import os
 
 from conary import conarycfg, conaryclient
 from conary import errors
+from conary.cmds import query, queryrep
 from conary.conaryclient import ConaryClient, cmdline
 from conary.conaryclient import cml, systemmodel, modelupdate
 from conary.conaryclient.update import NoNewTrovesError
@@ -252,6 +253,46 @@ class ConaryPk:
             labels.append(i.asString())
         return labels
 
+    def _findPackage(self, trovespec):
+        '''Turn a trovespec into a tuple of (name, Version, Flavor, status)
+
+        If the package is not installed, do a repoquery.
+        '''
+        troveTuples = self.query(trovespec)
+        installed = True
+
+        if not troveTuples:
+            troveTuples = self.repo_query(trovespec)
+            installed = False
+
+        if not troveTuples:
+            ret = None
+        else:
+            name, version, flavor = troveTuples[0]
+            ret = name, version, flavor, installed
+        return ret
+
+    def list_files(self, trovespec):
+        '''List files of a package
+        '''
+        def _get_files(troveSource, n, v, f):
+            files = []
+            trv = troveSource.getTrove(n, v, f)
+            for (n, v, f) in [x for x in trv.iterTroveList(strongRefs=True)
+                                if troveSource.hasTrove(*x)]:
+                for (pathId, path, fileId, version, filename) in \
+                    troveSource.iterFilesInTrove(n, v, f, sortByPath = True,
+                            withFiles=True, capsules=False):
+                    files.append(path)
+            return files
+
+        name, version, flavor, installed = self._findPackage(trovespec)
+        if installed:
+            files = _get_files(self.db, name, version, flavor)
+        else:
+            files = _get_files(self.repos, name, version, flavor)
+        return files
+
     def search_path(self,path_file ):
         labels = self.get_labels_from_config()
         where = self._get_repos()
@@ -261,26 +302,36 @@ class ConaryPk:
                 for ( name,version,flavor) in trove[path_file]:
                     return name
 
-    def query(self, name):
-        """ do a conary query """
-        if name is None or name == "":
+    def query(self, trove):
+        '''Finds the given trove
+
+        This is a wrapper around getTrovesToDisplay.
+
+        trove is a string "n[=v][[f]]".
+        Returns a list of (name, Version, Flavor) tuples.
+        '''
+        if trove is None or trove == "":
             return []
         try:
-            troves = self.db.findTrove( None ,(name , None, None ))
-            return troves
+            ret = query.getTrovesToDisplay(self.db, [trove], [], [], False)[0]
         except errors.TroveNotFound:
-            return []
+            ret = []
+        return ret
 
-    def repo_query(self, name, installLabel = None):
-        """ Do a conary request query """
-        label = self.label( installLabel )
+    def repo_query(self, trove):
+        '''
+        trove is a string "n[=v][[f]]".
+        Returns a list of (name, Version, Flavor) tuples.
+        '''
         repos = self._get_repos()
         try:
-            troves = repos.findTrove( label ,( name, None ,self.flavor ) )
-            #return repos.getTroves(troves)
-            return troves
+            ret = queryrep.getTrovesToDisplay(repos, [trove], [], [],
+                    queryrep.VERSION_FILTER_LATEST,
+                    queryrep.FLAVOR_FILTER_BEST, self.default_label,
+                    self.flavors, None)
         except errors.TroveNotFound:
-            return []
+            ret = []
+        return ret
 
     def _classic_build_update_job(self, applyList, cache=True):
         '''Build an UpdateJob from applyList
@@ -368,7 +419,3 @@ class ConaryPk:
 if __name__ == "__main__":
     conary = ConaryPk()
     print conary.search_path("/usr/bin/vim")
-    #print conary.query("gimpasdas")
-    #print conary.repo_query("dpaster",'zodyrepo.rpath.org at rpl:devel')
-    #print conary.repo_query("gimp")
-    #print conary.repo_query("gimpasdasd")
commit 43ebfd8f9fb40fd01eabab580d3dcd08104ea9f4
Author: Jesse Zhang <zh.jesse at gmail.com>
Date:   Fri Apr 8 13:34:15 2011 +0800

    conary: simplify and remove needless functions

diff --git a/backends/conary/conaryBackend.py b/backends/conary/conaryBackend.py
index 1df00af..12123c6 100755
--- a/backends/conary/conaryBackend.py
+++ b/backends/conary/conaryBackend.py
@@ -123,15 +123,6 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         flavor = deps.ThawFlavor(frzFlavor)
         return version, flavor
 
-    @ExceptionHandler
-    def check_installed(self, troveTuple):
-        result = self.conary.query(troveTuple[0])
-        if result:
-            installed = INFO_INSTALLED
-        else:
-            installed = INFO_AVAILABLE
-        return installed
-
     def _get_package_name_from_ids(self, package_ids):
         return [split_package_id(x)[0] for x in package_ids]
 
@@ -147,15 +138,6 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         return get_package_id(name, str(version.trailingRevision()),
                 conarypk.get_arch(flavor), data)
 
-    @ExceptionHandler
-    def get_package_from_id(self, package_id):
-        """ package_id(string) =
-        "dpaster;0.1-3-1;x86;Summary"
-        """
-        name, verString, archString, data = split_package_id(package_id)
-        troves = self.conary.query(name) or self.conary.repo_query(name)
-        return troves
-
     def _search_package(self, pkg_list, name):
         for pkg in pkg_list:
             if pkg["trove"][0] == name:
@@ -480,7 +462,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         self.percentage(None)
         self.status(STATUS_INFO)
         for package_id in package_ids:
-            name, version,arch,summary  = get_package_from_id(package_id)
+            name, version, arch, summary = split_package_id(package_id)
             pkgDict = self.xmlcache.resolve(name)
             update = ""
             obsolete = ""
@@ -588,13 +570,20 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         '''
         find a package based on a package id (name;version;arch;summary)
         '''
-        troveTuples = self.get_package_from_id(package_id)
-        for troveTuple in troveTuples:
-            installed = self.check_installed(troveTuple)
-            name, version, flavor = troveTuple
-            return name, version, flavor, installed
-        else:
+        name, verString, archString, data = split_package_id(package_id)
+        troveTuples = self.conary.query(name)
+        info = INFO_INSTALLED
+
+        if not troveTuples:
+            troveTuples = self.conary.repo_query(name)
+            info = INFO_AVAILABLE
+
+        if not troveTuples:
             self.error(ERROR_INTERNAL_ERROR, "package_id Not Correct ")
+        else:
+            troveTuple = troveTuples[0]
+            name, version, flavor = troveTuple
+            return name, version, flavor, info
 
     def get_repo_list(self, filters):
         labels = self.conary.get_labels_from_config()
commit 3b32510ab0e1681d45dcb687f2dbd13122080bd5
Author: Jesse Zhang <zh.jesse at gmail.com>
Date:   Fri Apr 8 10:41:38 2011 +0800

    conary: simplify _resolve_list

diff --git a/backends/conary/conaryBackend.py b/backends/conary/conaryBackend.py
index 4a44b82..1df00af 100755
--- a/backends/conary/conaryBackend.py
+++ b/backends/conary/conaryBackend.py
@@ -188,7 +188,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
             self.message(MESSAGE_COULD_NOT_FIND_PACKAGE,"search not found")
 
     def _do_conary_update(self, op, *args):
-        '''Wrapper around ConaryPk.install/erase() so we are add exception
+        '''Wrapper around ConaryPk.install/erase() so we can add exception
         handling
         '''
         try:
@@ -213,56 +213,70 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         return ret
 
     def _resolve_list(self, pkg_list, filters):
-        # 1. Resolve through local db
+        pkgFilter = ConaryFilter()
+
+        installed = []
+        if FILTER_NOT_INSTALLED not in filters:
+            installed = self._resolve_local(pkgFilter, pkg_list)
+
+        if FILTER_INSTALLED not in filters:
+            pkg_list = [x for x in pkg_list if x not in installed]
+            self._resolve_repo(pkgFilter, pkg_list)
+
+        package_list = pkgFilter.post_process()
+        self._show_package_list(package_list)
+
+    def _resolve_local(self, pkgFilter, pkg_list):
+        '''Find out installed packages from pkg_list
+
+        If a package from pkg_list can be found locally, add it (after some
+        convertion) to pkgFilter.
+
+        Returns the list of installed packages.
+        '''
+        ret = []
 
         list_trove_all = [p.get("trove") for p in pkg_list]
-        list_installed = []
-        list_not_installed = []
+        db_trove_list = self.client.db.findTroves(None, list_trove_all, allowMissing=True)
 
-        if FILTER_NOT_INSTALLED in filters:
-            list_not_installed = pkg_list[:]
-        else:
-            db_trove_list = self.client.db.findTroves(None, list_trove_all, allowMissing=True)
-            for trove in list_trove_all:
+        list_installed = []
+        for trove in list_trove_all:
+            if trove in db_trove_list:
                 pkg = self._search_package(pkg_list, trove[0])
-                if trove in db_trove_list:
-                    # A package may have different versions/flavors installed.
-                    for t in db_trove_list[trove]:
-                        list_installed.append(dict(trove=t, metadata=pkg["metadata"]))
-                else:
-                    list_not_installed.append(pkg)
-
-        # Our list of troves doesn't contain information about whether trove is
-        # installed, so ConaryFilter can't do proper filtering. Don't pass
-        # @filters to it. Instead manually check the filters before calling
-        # add_installed() and add_available().
-        pkgFilter = ConaryFilter()
+                # A package may have different versions/flavors installed.
+                for t in db_trove_list[trove]:
+                    list_installed.append(self._convert_package(t, pkg["metadata"]))
+                ret.append(pkg)
         pkgFilter.add_installed(list_installed)
 
-        # 2. Resolve through repository
+        return ret
 
-        if FILTER_INSTALLED not in filters:
-            list_trove_not_installed = []
-            for pkg in list_not_installed:
-                name,version,flavor = pkg.get("trove")
-                trove = (name, version, self.conary.flavor)
-                list_trove_not_installed.append(trove)
-
-            list_available = []
-            repo_trove_list = self.client.repos.findTroves(self.conary.default_label,
-                    list_trove_not_installed, allowMissing=True)
-
-            for trove in list_trove_not_installed:
-                if trove in repo_trove_list:
-                    # only use the first trove in the list
-                    t = repo_trove_list[trove][0]
-                    pkg = self._search_package(pkg_list, t[0])
-                    pkg["trove"] = t
-                    list_available.append(pkg)
-            pkgFilter.add_available( list_available )
+    def _resolve_repo(self, pkgFilter, pkg_list):
+        '''Find out packages from pkg_list that are available in the repository
 
-        package_list = pkgFilter.post_process()
-        self._show_package_list(package_list)
+        If a package from pkg_list can be found in the repo, add it (after some
+        convertion) to pkgFilter.
+
+        No return value.
+        '''
+        list_trove_all = []
+        for pkg in pkg_list:
+            name,version,flavor = pkg.get("trove")
+            trove = (name, version, self.conary.flavor)
+            list_trove_all.append(trove)
+
+        repo_trove_list = self.client.repos.findTroves(self.conary.default_label,
+                list_trove_all, allowMissing=True)
+
+        list_available = []
+        for trove in list_trove_all:
+            if trove in repo_trove_list:
+                # only use the first trove in the list
+                t = repo_trove_list[trove][0]
+                pkg = self._search_package(pkg_list, t[0])
+                pkg["trove"] = t
+                list_available.append(pkg)
+        pkgFilter.add_available(list_available)
 
     @ExceptionHandler
     def resolve(self, filters, package ):
@@ -382,7 +396,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
             self.files(package_id, ';'.join(files))
 
     def _do_conary_updateall(self, callback, dry_run):
-        '''Wrapper around ConaryPk.updateall() so we are add exception handling
+        '''Wrapper around ConaryPk.updateall() so we can add exception handling
         '''
         try:
             ret = self.conary.updateall(callback, dry_run)
commit 376bfc8724227c043171ca9a9676a043eb5d102f
Author: Jesse Zhang <zh.jesse at gmail.com>
Date:   Fri Apr 8 10:26:17 2011 +0800

    conary: clean up

diff --git a/backends/conary/TODO b/backends/conary/TODO
index bb7f580..ef3ce75 100644
--- a/backends/conary/TODO
+++ b/backends/conary/TODO
@@ -3,13 +3,10 @@
 * should support system model
   - the conary-api related code should all be put in conarypk.py
   - Note: some allow_cancel/status() calls may be lost when moving the code.
+  - move self.xmlcache into conarypk, so it won't come in the way of system
+    model support.
   - implement search
 * fix use of post_process and implement _pkg_compare in conaryFilter.py
   - http://lists.freedesktop.org/archives/packagekit/2011-March/006245.html
 * update conaryCallback.py to base on new callbacks
   (conary/cmds/updatecmd.py:UpdateCallback) so it can handle system-model.
-* a bug (seems in conary?):
-  - sudo conary install gitweb --> "install gitweb" in /etc/conary/system-model
-    (right)
-  - sudo conary erase gitweb --> "install gitweb" becomes "erase gitweb"
-    (wrong; the line should be just deleted)
diff --git a/backends/conary/conaryBackend.py b/backends/conary/conaryBackend.py
index 61855ca..4a44b82 100755
--- a/backends/conary/conaryBackend.py
+++ b/backends/conary/conaryBackend.py
@@ -1,5 +1,5 @@
 #!/usr/bin/python
-#{{{ Licensed under the GNU General Public License Version 2
+# 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
@@ -19,8 +19,7 @@
 # Copyright (C) 2008 Richard Hughes <richard at hughsie.com>
 # Copyright (C) 2009-2010 Andres Vargas <zodman at foresightlinux.org>
 #                         Scott Parkerson <scott.parkerson at gmail.com>
-# }}}
-#{{{ LIBS
+
 import sys
 import os
 import re
@@ -46,11 +45,10 @@ from pkConaryLog import log
 import conarypk
 
 sys.excepthook = util.genExcepthook()
-#{{{ FUNCTIONS
+
 def ExceptionHandler(func):
     return func
     def display(error):
-        log.info(error)
         return str(error).replace('\n', ' ').replace("\t",'')
     def wrapper(self, *args, **kwargs):
         try:
@@ -124,10 +122,9 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         version = versions.ThawVersion(frzVersion)
         flavor = deps.ThawFlavor(frzFlavor)
         return version, flavor
-    #}}}
+
     @ExceptionHandler
     def check_installed(self, troveTuple):
-        log.info("============check installed =========")
         result = self.conary.query(troveTuple[0])
         if result:
             installed = INFO_INSTALLED
@@ -151,25 +148,10 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
                 conarypk.get_arch(flavor), data)
 
     @ExceptionHandler
-    def get_package_id(self, name, versionObj, flavor):
-        version = versionObj.trailingRevision()
-        arch = conarypk.get_arch(flavor)
-        data = ""
-        pkg = self.xmlcache.resolve(name)
-        if pkg:
-            if "shortDesc" in pkg:
-                data = pkg['shortDesc'].decode("UTF")
-                if data == "." or data == "":
-                    data = name.replace("-",' ').capitalize()
-
-        return get_package_id(name, version, arch, data)
-
-    @ExceptionHandler
     def get_package_from_id(self, package_id):
         """ package_id(string) =
         "dpaster;0.1-3-1;x86;Summary"
         """
-        log.info("=========== get package from package_id ======================")
         name, verString, archString, data = split_package_id(package_id)
         troves = self.conary.query(name) or self.conary.repo_query(name)
         return troves
@@ -193,10 +175,8 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         """
         fltlist = filters
         if where not in ("name", "details", "group", "all"):
-            log.info("where %s" % where)
             self.error(ERROR_UNKNOWN, "DORK---- search where not found")
 
-        log.debug((searchlist, where))
         pkgList = self.xmlcache.search(searchlist, where )
 
         if len(pkgList) > 0 :
@@ -205,7 +185,6 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
 
             self._resolve_list(to_resolve, fltlist)
         else:
-            log.info("NOT FOUND %s " % searchlist )
             self.message(MESSAGE_COULD_NOT_FIND_PACKAGE,"search not found")
 
     def _do_conary_update(self, op, *args):
@@ -259,8 +238,6 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         # add_installed() and add_available().
         pkgFilter = ConaryFilter()
         pkgFilter.add_installed(list_installed)
-        log.info("Packages installed .... %s " % len(list_installed))
-        log.info("Packages available .... %s " % len(list_not_installed))
 
         # 2. Resolve through repository
 
@@ -301,7 +278,6 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         if pkg_dict is None:
             return None
 
-        log.info("doing a resolve")
         # Our list of troves doesn't contain information about whether trove is
         # installed, so ConaryFilter can't do proper filtering. Don't pass
         # @filters to it. Instead manually check the filters before calling
@@ -311,7 +287,6 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         is_found_locally = False
         if FILTER_NOT_INSTALLED not in filters:
             trove_installed = self.conary.query(pkg_dict.get("name"))
-            log.info("end of conary query")
             for trv in trove_installed:
                 pkg = self._convert_package(trv, pkg_dict)
                 filter.add_installed([pkg])
@@ -319,15 +294,12 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
 
         if not is_found_locally and FILTER_INSTALLED not in filters:
             trove_available = self.conary.repo_query(pkg_dict.get("name"))
-            log.info("end of conary rquery")
             if trove_available:
                 pkg = self._convert_package(trove_available[0], pkg_dict)
                 filter.add_available([pkg])
 
         package_list = filter.post_process()
-        log.info("package_list %s" % package_list)
         self._show_package_list(package_list)
-	log.info("end resolve ...................")
 
     def _show_package_list(self, lst):
         """@lst(list(tuple) = [ ( troveTuple, status ) ]
@@ -346,76 +318,42 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
 
     @ExceptionHandler
     def search_group(self, options, searchlist):
-        '''
-        Implement the {backend}-search-group functionality
-        '''
-        log.info("============= search_group ========")
         self.allow_cancel(True)
         self.percentage(None)
         self.status(STATUS_QUERY)
-        log.info("options: %s searchlist:%s "%(options, searchlist))
         self._do_search(options, searchlist, 'group')
 
     @ExceptionHandler
     def search_file(self, filters, search ):
-
-        log.info("============= search_file ========")
         self.allow_cancel(True)
-        self.percentage(0)
+        self.percentage(None)
         self.status(STATUS_QUERY)
-        log.info("options: %s searchlist:%s "%(filters, search))
-        self.percentage(10)
-
-
-        self.percentage(20)
-
-
-        self.percentage(30)
         name = self.conary.search_path( search )
-        self.percentage(50)
-        log.info(name)
         if name:
-            log.info("resolving")
             if ":" in name:
                 name = name.split(":")[0]
             self.resolve( filters, [name])
 
     @ExceptionHandler
     def search_name(self, options, searchlist):
-        '''
-        Implement the {backend}-search-name functionality
-        '''
-        log.info("============= search_name ========")
         self.allow_cancel(True)
         self.percentage(None)
         self.status(STATUS_QUERY)
-        log.info("options: %s searchlist:%s "%(options, searchlist))
         self._do_search(options, searchlist, 'name')
 
     @ExceptionHandler
     def search_details(self, options, search):
-        '''
-        Implement the {backend}-search-details functionality
-        '''
-        log.info("============= search_details ========")
         self.allow_cancel(True)
         #self.percentage(None)
         self.status(STATUS_QUERY)
-        log.info("options: %s searchlist:%s "%(options, search))
         self._do_search(options, search, 'details' )
 
-
     @ExceptionHandler
     def get_packages(self, filter ):
         self.allow_cancel(False)
         self.status(STATUS_QUERY)
-        log.info("options: %s searchlist:%s "%(filter,"all"))
         self._do_search(filter, "", 'all' )
 
-
-    def get_requires(self, filters, package_ids, recursive_text):
-        pass
-
     @ExceptionHandler
     def get_files(self, package_ids):
         self.allow_cancel(True)
@@ -434,7 +372,6 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
             return files
 
         for package in package_id.split("&"):
-            log.info(package)
             name, version, flavor, installed = self._findPackage(package)
 
             if installed == INFO_INSTALLED:
@@ -455,21 +392,14 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
 
     @ExceptionHandler
     def update_system(self, only_trusted):
-
         # FIXME: use only_trusted
-
         self.allow_cancel(True)
         self.status(STATUS_UPDATE)
         cb = UpdateSystemCallback(self, self.cfg)
         self._do_conary_updateall(cb, dry_run=False)
 
-#    @ExceptionHandler
     def refresh_cache(self, force):
         # TODO: use force ?
-
-        #log.debug("refresh-cache command ")
-    #    self.percentage()
-
         self.percentage(None)
         self.status(STATUS_REFRESH_CACHE)
         self.percentage(None)
@@ -512,9 +442,6 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
 
     @ExceptionHandler
     def remove_packages(self, allowDeps, autoremove, package_ids, simulate=False):
-        '''
-        Implement the {backend}-remove-packages functionality
-        '''
         # TODO: use autoremove
         self.allow_cancel(False)
         self.percentage(0)
@@ -535,14 +462,10 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
 
     @ExceptionHandler
     def get_update_detail(self, package_ids):
-        '''
-        Implement the {backend}-get-update_detail functionality
-        '''
         self.allow_cancel(True)
         self.percentage(None)
         self.status(STATUS_INFO)
         for package_id in package_ids:
-            log.info(package_id)
             name, version,arch,summary  = get_package_from_id(package_id)
             pkgDict = self.xmlcache.resolve(name)
             update = ""
@@ -566,7 +489,6 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         self.percentage(None)
         self.status(STATUS_INFO)
 
-        log.info("========== get_details =============")
         for package_id in package_ids:
             name,version,arch,data = split_package_id(package_id)
             pkgDict = self.xmlcache.resolve(name)
@@ -581,7 +503,6 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
                 categories = self.xmlcache.getGroup(pkgDict.get("category",""))
                 license = self._get_license(pkgDict.get("licenses",""))
                 size = pkgDict.get("size", 0)
-                log.info("Details: %s, %s, %s, %s, %s, %d" % (package_id, license, categories, longDesc, url, size))
                 self.details(package_id, license, categories, longDesc, url, size)
 
     def _get_restart(self, name):
@@ -615,16 +536,6 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         # 'rpath.com/licenses/copyright/GPL-2'.
         return " ".join([i.split("/")[-1] for i in license_list])
 
-    def _upgrade_from_branch( self, branch):
-        branchList = branch.split("@")
-        if "2-qa" in branchList[1]:
-            return DISTRO_UPGRADE_TESTING
-        elif "2-devel" in branchList[1]:
-            return DISTRO_UPGRADE_UNSTABLE
-        else:
-            return DISTRO_UPGRADE_STABLE
-
-
     def _get_branch(self, branch ):
         branchList = branch.split("@")
         if "2-qa" in branchList[1]:
@@ -663,31 +574,15 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         '''
         find a package based on a package id (name;version;arch;summary)
         '''
-        log.info("========== _findPackage ==========")
-        log.info(package_id)
         troveTuples = self.get_package_from_id(package_id)
-        log.info(troveTuples)
         for troveTuple in troveTuples:
-            log.info("======== trove ")
-            log.info(troveTuple)
             installed = self.check_installed(troveTuple)
-            log.info(installed)
             name, version, flavor = troveTuple
             return name, version, flavor, installed
         else:
             self.error(ERROR_INTERNAL_ERROR, "package_id Not Correct ")
 
-    def repo_set_data(self, repoid, parameter, value):
-        '''
-        Implement the {backend}-repo-set-data functionality
-        '''
-        pass
-
     def get_repo_list(self, filters):
-        '''
-        Implement the {backend}-get-repo-list functionality
-        '''
-        log.info("======= get repo list ===========0")
         labels = self.conary.get_labels_from_config()
         self.status(STATUS_QUERY)
         for repo in labels:
@@ -695,28 +590,14 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
             repo_branch  = repo.split("@")[1]
             self.repo_detail(repo,repo,True)
 
-    def repo_enable(self, repoid, enable):
-        '''
-        Implement the {backend}-repo-enable functionality
-        '''
-        pass
-
     def simulate_install_packages(self, package_ids):
-	'''
-	Simulate an install of one or more packages.
-        '''
-	return self.install_packages(False, package_ids, simulate=True)
+        return self.install_packages(False, package_ids, simulate=True)
 
     def simulate_remove_packages(self, package_ids):
-	'''
-	Simulate an update of one or more packages.
-        '''
-	return self.remove_packages(False, False, package_ids, simulate=True)
+        return self.remove_packages(False, False, package_ids, simulate=True)
 
 def main():
     backend = PackageKitConaryBackend('')
-    log.info("======== argv =========== ")
-    log.info(sys.argv)
     backend.dispatcher(sys.argv[1:])
 
 if __name__ == "__main__":
diff --git a/backends/conary/conarypk.py b/backends/conary/conarypk.py
index 7d0b644..4ce91e5 100644
--- a/backends/conary/conarypk.py
+++ b/backends/conary/conarypk.py
@@ -20,9 +20,6 @@ from conary.lib import util
 
 from pkConaryLog import log
 
-from packagekit.backend import PackageKitBaseBackend
-from packagekit.enums import ERROR_NO_NETWORK
-
 def get_arch(flavor):
     '''Turn a Flavor into a string describing the arch
 
@@ -231,11 +228,6 @@ class ConaryPk:
 
         self.job_cache = UpdateJobCache()
 
-    def _exist_network(self):
-        if not os.environ.get("NETWORK"):
-            Pk = PackageKitBaseBackend("")
-            Pk.error(ERROR_NO_NETWORK,"Not exist network conection")
-
     def clear_job_cache(self):
         self.job_cache.clearCache()
 
@@ -281,7 +273,6 @@ class ConaryPk:
 
     def repo_query(self, name, installLabel = None):
         """ Do a conary request query """
-        self._exist_network()
         label = self.label( installLabel )
         repos = self._get_repos()
         try:
@@ -291,37 +282,6 @@ class ConaryPk:
         except errors.TroveNotFound:
             return []
 
-    def get_metadata( self, name , installLabel = None):
-        pass
-
-    def remove(self, name):
-        return self.update(name, remove = True )
-    def update(self, name, installLabel= None, remove  = False ):
-        cli = self.cli
-        #get a trove
-        troves = self.repo_query(name, installLabel)
-        for trove in troves:
-            trovespec =  self.trove_to_spec( trove, remove )
-        try:
-            # create a Job
-            job = cli.newUpdateJob()
-            # Add Update task to Job
-            cli.prepareUpdateJob(job, cmdline.parseChangeList(trovespec))
-            # Apply the Job
-            cli.applyUpdateJob(job)
-            # im rulz
-            return "Update Success of %s" %  trovespec
-        except NoNewTrovesError:
-            return "no new Troves Found by %s " % trovespec
-
-    def trove_to_spec(self, trove, remove = False ):
-        # add a -app=blah.rpath.org at rpl:devel for remove packages
-        if remove:
-            tmp = '-'
-        else:
-            tmp = ""
-        return tmp + cmdline.toTroveSpec( trove[0], str(trove[1]), None)
-
     def _classic_build_update_job(self, applyList, cache=True):
         '''Build an UpdateJob from applyList
         '''
@@ -412,6 +372,3 @@ if __name__ == "__main__":
     #print conary.repo_query("dpaster",'zodyrepo.rpath.org at rpl:devel')
     #print conary.repo_query("gimp")
     #print conary.repo_query("gimpasdasd")
-    #print conary.update("amsn")
-    #print conary.remove("amsn")
-
commit 66bc1e180259f0ae95c806ce40bcdc9673e98f90
Author: Zhang Qiang <qiang.z.zhang at intel.com>
Date:   Thu Apr 7 10:17:05 2011 +0800

    zypp:reload RpmDB before removing packages
    
    This patch reload RpmDB before removing packages, as RpmDB can't be
    reloaded immediately  while finish installation.
    
    This patch also fix a bug in perform_execution, and without this patch,
    some error information would be reported.

diff --git a/backends/zypp/pk-backend-zypp.cpp b/backends/zypp/pk-backend-zypp.cpp
index 67b6d83..3629d23 100644
--- a/backends/zypp/pk-backend-zypp.cpp
+++ b/backends/zypp/pk-backend-zypp.cpp
@@ -1322,6 +1322,8 @@ backend_resolve_thread (PkBackend *backend)
 		return FALSE;
 	}
 
+	zypp->getTarget()->load();
+
 	pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
 
 	for (uint i = 0; package_ids[i]; i++) {
diff --git a/backends/zypp/zypp-utils.cpp b/backends/zypp/zypp-utils.cpp
index b9c4bce..ab42846 100644
--- a/backends/zypp/zypp-utils.cpp
+++ b/backends/zypp/zypp-utils.cpp
@@ -913,6 +913,10 @@ zypp_perform_execution (PkBackend *backend, PerformType type, gboolean force)
 			g_debug ("simulating");
 
 			for (zypp::ResPool::const_iterator it = pool.begin (); it != pool.end (); it++) {
+				if (type == REMOVE && !(*it)->isSystem ()) {
+					it->statusReset ();
+					continue;
+				}
 				if (!zypp_backend_pool_item_notify (backend, *it, TRUE))
 					ret = FALSE;
 				it->statusReset ();
commit fb8ff8dcce9b406276dfe87b5cf522e9c94f5e48
Author: Zhang Qiang <qiang.z.zhang at intel.com>
Date:   Thu Apr 7 10:13:06 2011 +0800

    zypp:consider only_trusted option while installing packages
    
    This patch consider only_trusted option to enable user to install
    un-signed packages if possible.

diff --git a/backends/zypp/zypp-utils.cpp b/backends/zypp/zypp-utils.cpp
index 91fd6fe..b9c4bce 100644
--- a/backends/zypp/zypp-utils.cpp
+++ b/backends/zypp/zypp-utils.cpp
@@ -944,10 +944,13 @@ zypp_perform_execution (PkBackend *backend, PerformType type, gboolean force)
 		}
 
                 // Perform the installation
+		gboolean only_trusted = pk_backend_get_bool (backend, "only_trusted");
                 zypp::ZYppCommitPolicy policy;
                 policy.restrictToMedia (0); // 0 == install all packages regardless to media
 		policy.downloadMode (zypp::DownloadInHeaps);
 		policy.syncPoolAfterCommit (true);
+		if (only_trusted == FALSE)
+			policy.rpmNoSignature(true);
 
                 zypp::ZYppCommitResult result = zypp->commit (policy);
 
commit bfdcda1d317c05940360e6b704a179ef79040fbc
Author: Mikel Olasagasti Uranga <mikel at olasagasti.info>
Date:   Sun Apr 3 19:39:38 2011 +0200

    Add missing languages to LINGUAS file
    
    Signed-off-by: Richard Hughes <richard at hughsie.com>

diff --git a/po/LINGUAS b/po/LINGUAS
index acc56da..c3f7e98 100644
--- a/po/LINGUAS
+++ b/po/LINGUAS
@@ -8,12 +8,14 @@ de
 el
 en_GB
 es
+eu
 fi
 fr
 gu
 he
 hi
 hu
+id
 it
 ja
 kn
commit 1fe7c5034a8d16233b2a7a4a50fb6822449747fb
Merge: abc434a... 36389ca...
Author: Jesse Zhang <zh.jesse at gmail.com>
Date:   Fri Apr 1 16:54:07 2011 +0800

    Merge branch 'conary'

commit 36389ca02a66e3f7ae842851f484502108f7f52a
Author: Jesse Zhang <zh.jesse at gmail.com>
Date:   Thu Mar 31 15:38:02 2011 +0800

    conary: implement install/remove for system model

diff --git a/backends/conary/TODO b/backends/conary/TODO
index 71cf20e..bb7f580 100644
--- a/backends/conary/TODO
+++ b/backends/conary/TODO
@@ -3,7 +3,13 @@
 * should support system model
   - the conary-api related code should all be put in conarypk.py
   - Note: some allow_cancel/status() calls may be lost when moving the code.
-  - implement install/remove-packages
   - implement search
 * fix use of post_process and implement _pkg_compare in conaryFilter.py
   - http://lists.freedesktop.org/archives/packagekit/2011-March/006245.html
+* update conaryCallback.py to base on new callbacks
+  (conary/cmds/updatecmd.py:UpdateCallback) so it can handle system-model.
+* a bug (seems in conary?):
+  - sudo conary install gitweb --> "install gitweb" in /etc/conary/system-model
+    (right)
+  - sudo conary erase gitweb --> "install gitweb" becomes "erase gitweb"
+    (wrong; the line should be just deleted)
diff --git a/backends/conary/conaryBackend.py b/backends/conary/conaryBackend.py
index dec205d..61855ca 100755
--- a/backends/conary/conaryBackend.py
+++ b/backends/conary/conaryBackend.py
@@ -86,7 +86,20 @@ def _format_list(lst):
         return ";".join(lst)
     else:
         return ""
-#}}}
+
+def _get_trovespec_from_ids(package_ids):
+    ret = []
+    for p in package_ids:
+        name, version, arch, data = split_package_id(p)
+        trovespec = name
+        # Omitting version and label. Depend on conary to find the proper package.
+        # This may be problematic.
+        # Also omitting flavor for now.
+        #if arch:
+        #    trovespec = '%s[is: %s]' % (trovespec, arch)
+        ret.append(trovespec)
+    return ret
+
 class PackageKitConaryBackend(PackageKitBaseBackend):
     # Packages that require a reboot
     rebootpkgs = ("kernel", "glibc", "hal", "dbus")
@@ -100,11 +113,8 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         self.cfg = conary.cfg
         self.client = conary.cli
         self.conary = conary
-        self.callback = UpdateCallback(self, self.cfg)
         self.xmlcache = XMLCache()
 
-        self._reset_conary_callback()
-
     def _freezeData(self, version, flavor):
         frzVersion = version.freeze()
         frzFlavor = flavor.freeze()
@@ -198,11 +208,20 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
             log.info("NOT FOUND %s " % searchlist )
             self.message(MESSAGE_COULD_NOT_FIND_PACKAGE,"search not found")
 
-    def _apply_update_job(self, updJob):
-        self.allow_cancel(False)
+    def _do_conary_update(self, op, *args):
+        '''Wrapper around ConaryPk.install/erase() so we are add exception
+        handling
+        '''
         try:
-            # TODO we should really handle the restart case here
-            restartDir = self.client.applyUpdateJob(updJob)
+            if op == 'install':
+                ret = self.conary.install(*args)
+            elif op == 'erase':
+                ret = self.conary.erase(*args)
+            else:
+                self.error(ERROR_INTERNAL_ERROR, 'Unkown command: %s' % op)
+        except conaryclient.DepResolutionFailure as e:
+            deps = [str(i[0][0]).split(":")[0] for i in e.cannotResolve]
+            self.error(ERROR_DEP_RESOLUTION_FAILED, ", ".join(set(deps)))
         except errors.InternalConaryError as e:
             if str(e) == "Stale update job":
                 self.conary.clear_job_cache()
@@ -212,15 +231,6 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
                         "Previously cached file is broken. Try again")
         except trove.TroveIntegrityError:
             self.error(ERROR_NO_PACKAGES_TO_UPDATE, "Network error. Try again")
-
-    def _get_package_update(self, pkg_list):
-        '''Wrapper around get_package_update() so we are add exception handling
-        '''
-        try:
-            ret = self.conary.get_package_update(pkg_list)
-        except conaryclient.DepResolutionFailure as e:
-            deps = [str(i[0][0]).split(":")[0] for i in e.cannotResolve]
-            self.error(ERROR_DEP_RESOLUTION_FAILED, ", ".join(set(deps)))
         return ret
 
     def _resolve_list(self, pkg_list, filters):
@@ -434,14 +444,11 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
 
             self.files(package_id, ';'.join(files))
 
-    def _reset_conary_callback(self):
-        self.client.setUpdateCallback(self.callback )
-
-    def _get_updateall_job(self, callback):
-        '''Wrapper around get_updateall_job() so we are add exception handling
+    def _do_conary_updateall(self, callback, dry_run):
+        '''Wrapper around ConaryPk.updateall() so we are add exception handling
         '''
         try:
-            ret = self.conary.get_updateall_job(callback)
+            ret = self.conary.updateall(callback, dry_run)
         except xmlrpclib.ProtocolError as e:
             self.error(ERROR_NO_NETWORK, '%s. Try again.' % str(e))
         return ret
@@ -454,10 +461,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         self.allow_cancel(True)
         self.status(STATUS_UPDATE)
         cb = UpdateSystemCallback(self, self.cfg)
-        updJob, suggMap = self._get_updateall_job(cb)
-
-        self._apply_update_job(updJob)
-        self._reset_conary_callback()
+        self._do_conary_updateall(cb, dry_run=False)
 
 #    @ExceptionHandler
     def refresh_cache(self, force):
@@ -493,21 +497,14 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
             self.package(pkg_id, INFO_UPDATING, '')
 
     def install_packages(self, only_trusted, package_ids, simulate=False):
-        self.allow_cancel(True)
+        self.allow_cancel(False)
         self.percentage(0)
         self.status(STATUS_RUNNING)
 
-        pkglist = []
-        for package_id in package_ids:
-            name, version, flavor, installed = self._findPackage(package_id)
-            if name:
-                pkglist.append((name, version, flavor))
-
-        self.status(STATUS_INSTALL)
-        updJob, suggMap = self._get_package_update(pkglist)
-        if not simulate:
-            self._apply_update_job(updJob)
-        else:
+        pkglist = _get_trovespec_from_ids(package_ids)
+        cb = UpdateCallback(self, self.cfg)
+        updJob, suggMap = self._do_conary_update('install', pkglist, cb, simulate)
+        if simulate:
             pkgs = self._get_package_name_from_ids(package_ids)
             jobs = conarypk.parse_jobs(updJob, excludes=pkgs,
                     show_components=False)
@@ -519,34 +516,19 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         Implement the {backend}-remove-packages functionality
         '''
         # TODO: use autoremove
-        self.allow_cancel(True)
+        self.allow_cancel(False)
         self.percentage(0)
         self.status(STATUS_RUNNING)
-        self.client.setUpdateCallback(RemoveCallback(self, self.cfg))
 
-        pkglist = []
-        for package_id in package_ids:
-            name, version, arch,data = split_package_id(package_id)
-            troveTuple = self.conary.query(name)
-            for name,version,flavor in troveTuple:
-                name = '-%s' % name
-                callback = self.client.getUpdateCallback()
-                if callback.error:
-                    self.error(ERROR_DEP_RESOLUTION_FAILED,', '.join(callback.error))
-                pkglist.append((name, version, flavor))
-
-        self.status(STATUS_REMOVE)
-        updJob, suggMap = self._get_package_update(pkglist)
-        if not simulate:
-            self._apply_update_job(updJob)
-        else:
+        pkglist = _get_trovespec_from_ids(package_ids)
+        cb = RemoveCallback(self, self.cfg)
+        updJob, suggMap = self._do_conary_update('remove', pkglist, cb, simulate)
+        if simulate:
             pkgs = self._get_package_name_from_ids(package_ids)
             jobs = conarypk.parse_jobs(updJob, excludes=pkgs,
                     show_components=False)
             self._display_update_jobs(*jobs)
 
-        self._reset_conary_callback()
-
     def _check_for_reboot(self, name):
         if name in self.rebootpkgs:
             self.require_restart(RESTART_SYSTEM, "")
@@ -672,13 +654,11 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         self.status(STATUS_INFO)
 
         cb = GetUpdateCallback(self, self.cfg)
-        updJob, suggMap = self._get_updateall_job(cb)
+        updJob, suggMap = self._do_conary_updateall(cb, dry_run=True)
         installs, erases, updates = conarypk.parse_jobs(updJob,
                 show_components=False)
         self._display_updates(installs + updates)
 
-        self._reset_conary_callback()
-
     def _findPackage(self, package_id):
         '''
         find a package based on a package id (name;version;arch;summary)
diff --git a/backends/conary/conarypk.py b/backends/conary/conarypk.py
index 898f4c6..7d0b644 100644
--- a/backends/conary/conarypk.py
+++ b/backends/conary/conarypk.py
@@ -116,6 +116,55 @@ def _model_build_update_job(cfg, model, modelFile, callback):
 
     return updJob, suggMap
 
+def _model_apply_update_job(updJob, cfg, modelFile, callback):
+    if not updJob.getJobs():
+        return
+    client = conaryclient.ConaryClient(cfg, modelFile=modelFile)
+    client.setUpdateCallback(callback)
+
+    client.checkWriteableRoot()
+    client.applyUpdateJob(updJob, noRestart=True)
+    modelFile.closeSnapshot()
+
+def _model_do_conary_update(cfg, op, args, callback, dry_run=False):
+    '''Perform a conary update action
+
+    op can be 'install'/'erase'.
+    args is a list of packages.
+
+    If dry_run is True, return (UpdateJob, suggMap) which contains information
+    about the install.
+    '''
+    # Copy of conary/cmds/conarycmd.py:_UpdateCommand and
+    # conary/cmds/updatecmd.py:doModelUpdate
+
+    model = cml.CML(cfg)
+    modelFile = systemmodel.SystemModelFile(model)
+
+    model.appendOpByName(op, args)
+
+    ret = _model_build_update_job(cfg, model, modelFile, callback)
+    if not dry_run:
+        _model_apply_update_job(ret[0], cfg, modelFile, callback)
+    return ret
+
+def _model_do_conary_updateall(cfg, callback, dry_run=False):
+    '''Perform a conary updatell
+
+    If dry_run is True, return (UpdateJob, suggMap) which contains information
+    about the install.
+
+    '''
+    model = cml.CML(cfg)
+    modelFile = systemmodel.SystemModelFile(model)
+
+    model.refreshVersionSnapshots()
+    ret = _model_build_update_job(cfg, model, modelFile, callback)
+
+    if not dry_run:
+        _model_apply_update_job(ret[0], cfg, modelFile, callback)
+    return updJob
+
 class UpdateJobCache:
     '''A cache to store (freeze) conary UpdateJobs.
 
@@ -273,7 +322,7 @@ class ConaryPk:
             tmp = ""
         return tmp + cmdline.toTroveSpec( trove[0], str(trove[1]), None)
 
-    def _build_update_job(self, applyList, cache=True):
+    def _classic_build_update_job(self, applyList, cache=True):
         '''Build an UpdateJob from applyList
         '''
         updJob = self.cli.newUpdateJob()
@@ -294,47 +343,66 @@ class ConaryPk:
 
         return updJob, suggMap
 
-    def get_package_update(self, pkg_list):
-        '''Build an UpdateJob according to trove specs in pkg_list
-
-        Returns a (UpdateJob, suggMap) tuple.
-        '''
-        applyList = []
-        for name, version, flavor in pkg_list:
-            if name.startswith('-'):
-                applyList.append((name, (version, flavor), (None, None), False))
-            else:
-                applyList.append((name, (None, None), (version, flavor), True))
-        return self._build_update_job(applyList)
-
-    def _model_get_updateall_job(self, callback):
-        model = cml.CML(self.cfg)
-        modelFile = systemmodel.SystemModelFile(model)
-
-        model.refreshVersionSnapshots()
-        ret = _model_build_update_job(self.cfg, model, modelFile, callback)
-
+    def _classic_get_package_update(self, pkg_list, callback, dry_run=False):
+        self.cli.setUpdateCallback(callback)
+        applyList = cmdline.parseChangeList(pkg_list, keepExisting=False,
+                                            updateByDefault=True,
+                                            allowChangeSets=False)
+        ret = self._classic_build_update_job(applyList)
+        if not dry_run:
+            self.cli.applyUpdateJob(ret[0])
         return ret
 
-    def _classic_get_updateall_job(self, callback):
+    def _classic_get_updateall_job(self, callback, dry_run):
         self.cli.setUpdateCallback(callback)
 
         updateItems = self.cli.fullUpdateItemList()
         applyList = [(x[0], (None, None), x[1:], True) for x in updateItems]
 
-        ret = self._build_update_job(applyList)
+        ret = self._classic_build_update_job(applyList)
+        if not dry_run:
+            self.cli.applyUpdateJob(ret[0])
+        return ret
+
+    def install(self, pkglist, callback, dry_run=False):
+        '''Equivalent to 'conary install'
+
+        pkglist is a list of package specs.
+
+        Returns a (UpdateJob, suggMap) tuple.
+        '''
+        if self._using_system_model():
+            ret = _model_do_conary_update(self.cfg, 'install', pkglist,
+                    callback, dry_run)
+        else:
+            ret = self._classic_get_package_update(pkglist, callback, dry_run)
+        return ret
+
+    def erase(self, pkglist, callback, dry_run=False):
+        '''Equivalent to 'conary erase'
 
+        pkglist is a list of package specs.
+
+        Returns a (UpdateJob, suggMap) tuple.
+        '''
+        if self._using_system_model():
+            ret = _model_do_conary_update(self.cfg, 'erase', pkglist,
+                    callback, dry_run)
+        else:
+            # Append '-' for erasing
+            pkglist = ['-%s' % x for x in pkglist]
+            ret = self._classic_get_package_update(pkglist, callback, dry_run)
         return ret
 
-    def get_updateall_job(self, callback):
+    def updateall(self, callback, dry_run=False):
         '''Build an UpdateJob for updateall
 
         Returns a (UpdateJob, suggMap) tuple.
         '''
         if self._using_system_model():
-            ret = self._model_get_updateall_job(callback)
+            ret = _model_do_conary_updateall(self.cfg, callback, dry_run)
         else:
-            ret = self._classic_get_updateall_job(callback)
+            ret = self._classic_get_updateall_job(callback, dry_run)
         return ret
 
 if __name__ == "__main__":
commit 0fd9684aadff5ae4f6587fb6c27701b307794683
Author: Jesse Zhang <zh.jesse at gmail.com>
Date:   Thu Mar 31 14:57:59 2011 +0800

    conary: trivial fix
    
    _apply_update_job doesn't have to return anything.

diff --git a/backends/conary/TODO b/backends/conary/TODO
index cc496ac..71cf20e 100644
--- a/backends/conary/TODO
+++ b/backends/conary/TODO
@@ -3,5 +3,7 @@
 * should support system model
   - the conary-api related code should all be put in conarypk.py
   - Note: some allow_cancel/status() calls may be lost when moving the code.
+  - implement install/remove-packages
+  - implement search
 * fix use of post_process and implement _pkg_compare in conaryFilter.py
   - http://lists.freedesktop.org/archives/packagekit/2011-March/006245.html
diff --git a/backends/conary/conaryBackend.py b/backends/conary/conaryBackend.py
index f3ddd71..dec205d 100755
--- a/backends/conary/conaryBackend.py
+++ b/backends/conary/conaryBackend.py
@@ -212,7 +212,6 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
                         "Previously cached file is broken. Try again")
         except trove.TroveIntegrityError:
             self.error(ERROR_NO_PACKAGES_TO_UPDATE, "Network error. Try again")
-        return updJob
 
     def _get_package_update(self, pkg_list):
         '''Wrapper around get_package_update() so we are add exception handling
commit 2effdf1fa6c83830277b3efafa522313813a1add
Author: Jesse Zhang <zh.jesse at gmail.com>
Date:   Thu Mar 31 14:33:06 2011 +0800

    conary: add exception handling around get_updateall_job

diff --git a/backends/conary/conaryBackend.py b/backends/conary/conaryBackend.py
index 53577ec..f3ddd71 100755
--- a/backends/conary/conaryBackend.py
+++ b/backends/conary/conaryBackend.py
@@ -24,6 +24,7 @@
 import sys
 import os
 import re
+import xmlrpclib
 
 from conary import dbstore, queryrep, versions, updatecmd
 from conary import errors, conarycfg, conaryclient
@@ -437,6 +438,15 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
     def _reset_conary_callback(self):
         self.client.setUpdateCallback(self.callback )
 
+    def _get_updateall_job(self, callback):
+        '''Wrapper around get_updateall_job() so we are add exception handling
+        '''
+        try:
+            ret = self.conary.get_updateall_job(callback)
+        except xmlrpclib.ProtocolError as e:
+            self.error(ERROR_NO_NETWORK, '%s. Try again.' % str(e))
+        return ret
+
     @ExceptionHandler
     def update_system(self, only_trusted):
 
@@ -445,7 +455,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         self.allow_cancel(True)
         self.status(STATUS_UPDATE)
         cb = UpdateSystemCallback(self, self.cfg)
-        updJob, suggMap = self.conary.get_updateall_job(cb)
+        updJob, suggMap = self._get_updateall_job(cb)
 
         self._apply_update_job(updJob)
         self._reset_conary_callback()
@@ -663,7 +673,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         self.status(STATUS_INFO)
 
         cb = GetUpdateCallback(self, self.cfg)
-        updJob, suggMap = self.conary.get_updateall_job(cb)
+        updJob, suggMap = self._get_updateall_job(cb)
         installs, erases, updates = conarypk.parse_jobs(updJob,
                 show_components=False)
         self._display_updates(installs + updates)
commit e7f06a23d8f5740e2383db2e1913a720f848f8e6
Author: Jesse Zhang <zh.jesse at gmail.com>
Date:   Thu Mar 31 14:17:53 2011 +0800

    conary: fix get-updates
    
    The original implementation didn't understand what's returned by
    UpdateJobs.getJobs(). Some jobs were missing in the displayed update
    list, since it only considered the first job in each jobs list:
            for job in jobs_list:
                job = job[0][:3]

diff --git a/backends/conary/conaryBackend.py b/backends/conary/conaryBackend.py
index 03f9089..53577ec 100755
--- a/backends/conary/conaryBackend.py
+++ b/backends/conary/conaryBackend.py
@@ -601,7 +601,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         else:
             return RESTART_NONE
 
-    def _get_info(self, name):
+    def _get_update_priority(self, name):
         if name in self.rebootpkgs:
             return INFO_SECURITY
         elif name in self.restartpkgs:
@@ -643,32 +643,18 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         else:
             return UPDATE_STATE_STABLE
 
-    def _parse_updates(self, updJob):
-        jobs_list = updJob.getJobs()
-        r = []
-        for job in jobs_list:
-            job = job[0][:3]
-            (name, (oldVer, oldFla), (newVer, newFla)) = job
+    def _display_updates(self, jobs):
+        '''Emit Package signals for a list of update jobs
 
-            info = self._get_info(name)
-            if not newVer:
-                trove_info = ((name, oldVer, oldFla), info)
-            else:
-                trove_info = ((name, newVer, newFla), info)
-            r.append(trove_info)
-        return r
-
-    def _display_updates(self, pkg_list):
-        data = self.xmlcache.resolve_list([name for ((name, version, flavor), info) in pkg_list])
-        new_res = []
-        for pkg in data:
-            for (trove, info) in pkg_list:
-                name, version, flav = trove
-                if name == pkg["name"]:
-                    npkg = self._convert_package(trove, pkg)
-                    new_res.append((npkg, info))
-
-        self._show_package_list(new_res)
+        jobs should only contain installs and updates. Shouldn't get any erase
+        jobs.
+        '''
+        for (name, (oldVer, oldFla), (newVer, newFla)) in jobs:
+            v = str(newVer.trailingRevision())
+            f = conarypk.get_arch(newFla)
+            pkg_id = get_package_id(name, v, f, '')
+            info = self._get_update_priority(name)
+            self.package(pkg_id, info, '')
 
     @ExceptionHandler
     def get_updates(self, filters):
@@ -678,8 +664,9 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
 
         cb = GetUpdateCallback(self, self.cfg)
         updJob, suggMap = self.conary.get_updateall_job(cb)
-        r = self._parse_updates(updJob)
-        self._display_updates(r)
+        installs, erases, updates = conarypk.parse_jobs(updJob,
+                show_components=False)
+        self._display_updates(installs + updates)
 
         self._reset_conary_callback()
 
commit 320118cf065f3977857dffa652841296c39063d7
Author: Jesse Zhang <zh.jesse at gmail.com>
Date:   Thu Mar 31 11:01:49 2011 +0800

    conary: remove broken GetDepends implementation
    
    It makes no sense to get dependencies by try installing the package and
    see what conary wants to install.
    
    And it doesn't even have an entry in pk-backend-conary.c

diff --git a/backends/conary/TODO b/backends/conary/TODO
index 215191e..cc496ac 100644
--- a/backends/conary/TODO
+++ b/backends/conary/TODO
@@ -3,3 +3,5 @@
 * should support system model
   - the conary-api related code should all be put in conarypk.py
   - Note: some allow_cancel/status() calls may be lost when moving the code.
+* fix use of post_process and implement _pkg_compare in conaryFilter.py
+  - http://lists.freedesktop.org/archives/packagekit/2011-March/006245.html
diff --git a/backends/conary/conaryBackend.py b/backends/conary/conaryBackend.py
index 8b8ccca..03f9089 100755
--- a/backends/conary/conaryBackend.py
+++ b/backends/conary/conaryBackend.py
@@ -407,27 +407,6 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         pass
 
     @ExceptionHandler
-    def get_depends(self, filters, package_ids, recursive_text):
-        name, version, flavor, installed = self._findPackage(package_ids[0])
-
-        if name:
-            if installed == INFO_INSTALLED:
-                self.error(ERROR_PACKAGE_ALREADY_INSTALLED, 'Package already installed')
-
-            else:
-                updJob, suggMap = self._get_package_update([
-                    (name, version, flavor)])
-                for what, need in suggMap:
-                    package_id = self.get_package_id(need[0], need[1], need[2])
-                    depInstalled = self.check_installed(need[0])
-                    if depInstalled == INFO_INSTALLED:
-                        self.package(package_id, INFO_INSTALLED, '')
-                    else:
-                        self.package(package_id, INFO_AVAILABLE, '')
-        else:
-            self.error(ERROR_PACKAGE_ALREADY_INSTALLED, 'Package was not found')
-
-    @ExceptionHandler
     def get_files(self, package_ids):
         self.allow_cancel(True)
         self.percentage(None)
commit d8efc5fe42e163b440cf860035099077308a9d7a
Author: Jesse Zhang <zh.jesse at gmail.com>
Date:   Wed Mar 30 22:02:44 2011 +0800

    conary: implement get-updates for system model

diff --git a/backends/conary/conarypk.py b/backends/conary/conarypk.py
index 08c8370..898f4c6 100644
--- a/backends/conary/conarypk.py
+++ b/backends/conary/conarypk.py
@@ -3,14 +3,16 @@
 ###  greets mkj
 ### zodman at foresightlinux.org under the WTFPL http://sam.zoy.org/wtfpl/
 
+import copy
 import itertools
 import os
 
-from conary.conaryclient import ConaryClient, cmdline
 from conary import conarycfg, conaryclient
-from conary.versions import Label
-from conary.errors import TroveNotFound
+from conary import errors
+from conary.conaryclient import ConaryClient, cmdline
+from conary.conaryclient import cml, systemmodel, modelupdate
 from conary.conaryclient.update import NoNewTrovesError
+from conary.versions import Label
 from conary.deps import deps
 
 from conary.lib import sha1helper
@@ -57,6 +59,63 @@ def parse_jobs(updJob, excludes=[], show_components=True):
             update_jobs.append(job)
     return (install_jobs, erase_jobs, update_jobs)
 
+def _model_build_update_job(cfg, model, modelFile, callback):
+    '''Build an UpdateJob based on the system model
+    '''
+    # Copied from conary/cmds/updatecmd.py:_updateTroves(), with slight
+    # modification
+
+    client = conaryclient.ConaryClient(cfg, modelFile=modelFile)
+    client.setUpdateCallback(callback)
+
+    updJob = client.newUpdateJob()
+    try:
+        tc = modelupdate.CMLTroveCache(client.getDatabase(),
+                                               client.getRepos(),
+                                               callback = callback)
+        tcPath = cfg.root + cfg.dbPath + '/modelcache'
+        if os.path.exists(tcPath):
+            callback.loadingModelCache()
+            tc.load(tcPath)
+        ts = client.cmlGraph(model)
+        try:
+            suggMap = client._updateFromTroveSetGraph(updJob, ts, tc,
+                                        callback = callback)
+        except errors.TroveSpecsNotFound:
+            callback.done()
+            client.close()
+            return updJob, {}
+
+        finalModel = copy.deepcopy(model)
+        if model.suggestSimplifications(tc, ts.g):
+            ts2 = client.cmlGraph(model)
+            updJob2 = client.newUpdateJob()
+            try:
+                suggMap2 = client._updateFromTroveSetGraph(updJob2, ts2, tc)
+            except errors.TroveNotFound:
+                pass
+            else:
+                if (suggMap == suggMap2 and
+                    updJob.getJobs() == updJob2.getJobs()):
+                    ts = ts2
+                    finalModel = model
+                    updJob = updJob2
+                    suggMap = suggMap2
+
+        model = finalModel
+        modelFile.model = finalModel
+
+        if tc.cacheModified():
+            callback.savingModelCache()
+            tc.save(tcPath)
+            callback.done()
+    except:
+        callback.done()
+        client.close()
+        raise
+
+    return updJob, suggMap
+
 class UpdateJobCache:
     '''A cache to store (freeze) conary UpdateJobs.
 
@@ -131,6 +190,11 @@ class ConaryPk:
     def clear_job_cache(self):
         self.job_cache.clearCache()
 
+    def _using_system_model(self):
+        # Directly check the default location. Ignore conary configuration.
+        # Change me if this proves to be problematic.
+        return os.path.isfile('/etc/conary/system-model')
+
     def _get_repos(self):
         """ get repos for do request query """
         return self.repos
@@ -163,7 +227,7 @@ class ConaryPk:
         try:
             troves = self.db.findTrove( None ,(name , None, None ))
             return troves
-        except TroveNotFound:
+        except errors.TroveNotFound:
             return []
 
     def repo_query(self, name, installLabel = None):
@@ -175,7 +239,7 @@ class ConaryPk:
             troves = repos.findTrove( label ,( name, None ,self.flavor ) )
             #return repos.getTroves(troves)
             return troves
-        except TroveNotFound:
+        except errors.TroveNotFound:
             return []
 
     def get_metadata( self, name , installLabel = None):
@@ -243,17 +307,35 @@ class ConaryPk:
                 applyList.append((name, (None, None), (version, flavor), True))
         return self._build_update_job(applyList)
 
-    def get_updateall_job(self, callback):
-        '''Build an UpdateJob for updateall
+    def _model_get_updateall_job(self, callback):
+        model = cml.CML(self.cfg)
+        modelFile = systemmodel.SystemModelFile(model)
 
-        Returns a (UpdateJob, suggMap) tuple.
-        '''
+        model.refreshVersionSnapshots()
+        ret = _model_build_update_job(self.cfg, model, modelFile, callback)
+
+        return ret
+
+    def _classic_get_updateall_job(self, callback):
         self.cli.setUpdateCallback(callback)
 
         updateItems = self.cli.fullUpdateItemList()
         applyList = [(x[0], (None, None), x[1:], True) for x in updateItems]
 
-        return self._build_update_job(applyList)
+        ret = self._build_update_job(applyList)
+
+        return ret
+
+    def get_updateall_job(self, callback):
+        '''Build an UpdateJob for updateall
+
+        Returns a (UpdateJob, suggMap) tuple.
+        '''
+        if self._using_system_model():
+            ret = self._model_get_updateall_job(callback)
+        else:
+            ret = self._classic_get_updateall_job(callback)
+        return ret
 
 if __name__ == "__main__":
     conary = ConaryPk()
commit 1677e9f7832c837382d2e889e92af809e4ccc5d3
Author: Jesse Zhang <zh.jesse at gmail.com>
Date:   Wed Mar 30 21:05:04 2011 +0800

    conary: move more code to conarypk
    
    Move get_package_update and get_updateall_job to conarypk.py, to get
    ready for supporting system model.

diff --git a/backends/conary/TODO b/backends/conary/TODO
index a34a3ca..215191e 100644
--- a/backends/conary/TODO
+++ b/backends/conary/TODO
@@ -2,4 +2,4 @@
   - there is probably bugs in the tool ('ticache') that generates the cache.
 * should support system model
   - the conary-api related code should all be put in conarypk.py
-  - Note: some allow_cancel() calls may be lost when moving the code.
+  - Note: some allow_cancel/status() calls may be lost when moving the code.
diff --git a/backends/conary/conaryBackend.py b/backends/conary/conaryBackend.py
index 2a25002..8b8ccca 100755
--- a/backends/conary/conaryBackend.py
+++ b/backends/conary/conaryBackend.py
@@ -213,25 +213,16 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
             self.error(ERROR_NO_PACKAGES_TO_UPDATE, "Network error. Try again")
         return updJob
 
-    def _build_update_job(self, applyList):
-        '''Wrapper around build_update_job() so we are add exception handling
+    def _get_package_update(self, pkg_list):
+        '''Wrapper around get_package_update() so we are add exception handling
         '''
         try:
-            ret = self.conary.build_update_job(applyList)
+            ret = self.conary.get_package_update(pkg_list)
         except conaryclient.DepResolutionFailure as e:
             deps = [str(i[0][0]).split(":")[0] for i in e.cannotResolve]
             self.error(ERROR_DEP_RESOLUTION_FAILED, ", ".join(set(deps)))
         return ret
 
-    def _get_package_update(self, pkg_list):
-        applyList = []
-        for name, version, flavor in pkg_list:
-            if name.startswith('-'):
-                applyList.append((name, (version, flavor), (None, None), False))
-            else:
-                applyList.append((name, (None, None), (version, flavor), True))
-        return self._build_update_job(applyList)
-
     def _resolve_list(self, pkg_list, filters):
         # 1. Resolve through local db
 
@@ -475,7 +466,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         self.allow_cancel(True)
         self.status(STATUS_UPDATE)
         cb = UpdateSystemCallback(self, self.cfg)
-        updJob = self._get_updateall_job(cb)
+        updJob, suggMap = self.conary.get_updateall_job(cb)
 
         self._apply_update_job(updJob)
         self._reset_conary_callback()
@@ -673,16 +664,6 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         else:
             return UPDATE_STATE_STABLE
 
-    def _get_updateall_job(self, callback):
-        self.client.setUpdateCallback(callback)
-
-        updateItems = self.client.fullUpdateItemList()
-        applyList = [(x[0], (None, None), x[1:], True) for x in updateItems]
-
-        self.status(STATUS_RUNNING)
-        updJob, suggMap = self._build_update_job(applyList)
-        return updJob
-
     def _parse_updates(self, updJob):
         jobs_list = updJob.getJobs()
         r = []
@@ -717,7 +698,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         self.status(STATUS_INFO)
 
         cb = GetUpdateCallback(self, self.cfg)
-        updJob = self._get_updateall_job(cb)
+        updJob, suggMap = self.conary.get_updateall_job(cb)
         r = self._parse_updates(updJob)
         self._display_updates(r)
 
diff --git a/backends/conary/conarypk.py b/backends/conary/conarypk.py
index a32d7cf..08c8370 100644
--- a/backends/conary/conarypk.py
+++ b/backends/conary/conarypk.py
@@ -209,7 +209,7 @@ class ConaryPk:
             tmp = ""
         return tmp + cmdline.toTroveSpec( trove[0], str(trove[1]), None)
 
-    def build_update_job(self, applyList, cache=True):
+    def _build_update_job(self, applyList, cache=True):
         '''Build an UpdateJob from applyList
         '''
         updJob = self.cli.newUpdateJob()
@@ -230,6 +230,31 @@ class ConaryPk:
 
         return updJob, suggMap
 
+    def get_package_update(self, pkg_list):
+        '''Build an UpdateJob according to trove specs in pkg_list
+
+        Returns a (UpdateJob, suggMap) tuple.
+        '''
+        applyList = []
+        for name, version, flavor in pkg_list:
+            if name.startswith('-'):
+                applyList.append((name, (version, flavor), (None, None), False))
+            else:
+                applyList.append((name, (None, None), (version, flavor), True))
+        return self._build_update_job(applyList)
+
+    def get_updateall_job(self, callback):
+        '''Build an UpdateJob for updateall
+
+        Returns a (UpdateJob, suggMap) tuple.
+        '''
+        self.cli.setUpdateCallback(callback)
+
+        updateItems = self.cli.fullUpdateItemList()
+        applyList = [(x[0], (None, None), x[1:], True) for x in updateItems]
+
+        return self._build_update_job(applyList)
+
 if __name__ == "__main__":
     conary = ConaryPk()
     print conary.search_path("/usr/bin/vim")
commit 86c8d0f94b3c81473053e7a1d077f39e2ffdab50
Author: Jesse Zhang <zh.jesse at gmail.com>
Date:   Wed Mar 30 16:51:13 2011 +0800

    conary: remove unused methods

diff --git a/backends/conary/conaryBackend.py b/backends/conary/conaryBackend.py
index 31e5856..2a25002 100755
--- a/backends/conary/conaryBackend.py
+++ b/backends/conary/conaryBackend.py
@@ -568,65 +568,6 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
 
         self._reset_conary_callback()
 
-    def _get_metadata(self, package_id, field):
-        '''
-        Retrieve metadata from the repository and return result
-        field should be one of:
-                bibliography
-                url
-                notes
-                crypto
-                licenses
-                shortDesc
-                longDesc
-                categories
-        '''
-
-        self.allow_cancel(True)
-        self.percentage(None)
-        self.status(STATUS_QUERY)
-        # XXX the usage of self.get_package_from_id is wrong here. The return
-        # value is a list.
-        n, v, f = self.get_package_from_id(package_id)
-        trvList = self.client.repos.findTrove(self.cfg.installLabelPath,
-                                     (n, v, f),
-                                     defaultFlavor = self.cfg.flavor)
-
-        troves = self.client.repos.getTroves(trvList, withFiles=False)
-        result = ''
-        for trove in troves:
-            result = trove.getMetadata()[field]
-        return result
-
-    def _get_update_extras(self, package_id):
-        notice = self._get_metadata(package_id, 'notice') or " "
-        urls = {'jira':[], 'cve' : [], 'vendor': []}
-        if notice:
-            # Update Details
-            desc = notice['description']
-            # Update References (Jira, CVE ...)
-            refs = notice['references']
-            if refs:
-                for ref in refs:
-                    typ = ref['type']
-                    href = ref['href']
-                    title = ref['title']
-                    if typ in ('jira', 'cve') and href != None:
-                        if title == None:
-                            title = ""
-                        urls[typ].append("%s;%s" % (href, title))
-                    else:
-                        urls['vendor'].append("%s;%s" % (ref['href'], ref['title']))
-
-            # Reboot flag
-            if notice.get_metadata().has_key('reboot_suggested') and notice['reboot_suggested']:
-                reboot = 'system'
-            else:
-                reboot = 'none'
-            return _format_str(desc), urls, reboot
-        else:
-            return "", urls, "none"
-
     def _check_for_reboot(self, name):
         if name in self.rebootpkgs:
             self.require_restart(RESTART_SYSTEM, "")
commit bff5d7ec99a5883eccdee5539a4e52a66712dc2d
Author: Jesse Zhang <zh.jesse at gmail.com>
Date:   Wed Mar 30 16:23:23 2011 +0800

    conary: don't support UpdatePackages
    
    It doesn't make sense for conary.

diff --git a/backends/conary/conaryBackend.py b/backends/conary/conaryBackend.py
index eb3c7d5..31e5856 100755
--- a/backends/conary/conaryBackend.py
+++ b/backends/conary/conaryBackend.py
@@ -514,22 +514,6 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
             self.package(pkg_id, INFO_UPDATING, '')
 
     def install_packages(self, only_trusted, package_ids, simulate=False):
-        """
-            alias of update_packages
-        """
-
-        # FIXME: use only_trusted
-
-        self.update_packages(only_trusted, package_ids, simulate)
-
-    @ExceptionHandler
-    def update_packages(self, only_trusted, package_ids, simulate=False):
-        '''
-        Implement the {backend}-{install, update}-packages functionality
-        '''
-
-        # FIXME: use only_trusted
-
         self.allow_cancel(True)
         self.percentage(0)
         self.status(STATUS_RUNNING)
@@ -846,12 +830,6 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         '''
 	return self.install_packages(False, package_ids, simulate=True)
 
-    def simulate_update_packages(self, package_ids):
-	'''
-	Simulate an update of one or more packages.
-        '''
-	return self.update_packages(False, package_ids, simulate=True)
-
     def simulate_remove_packages(self, package_ids):
 	'''
 	Simulate an update of one or more packages.
diff --git a/backends/conary/pk-backend-conary.c b/backends/conary/pk-backend-conary.c
index 99154fd..52f55df 100644
--- a/backends/conary/pk-backend-conary.c
+++ b/backends/conary/pk-backend-conary.c
@@ -84,7 +84,7 @@ backend_get_filters (PkBackend *backend)
 /**
  * backend_get_roles:
  */
-PkBitfield
+static PkBitfield
 backend_get_roles (PkBackend *backend)
 {
 	PkBitfield roles;
@@ -102,11 +102,9 @@ backend_get_roles (PkBackend *backend)
 		PK_ROLE_ENUM_SEARCH_FILE,
 		PK_ROLE_ENUM_SEARCH_GROUP,
 		PK_ROLE_ENUM_SEARCH_NAME,
-		PK_ROLE_ENUM_UPDATE_PACKAGES,
 		PK_ROLE_ENUM_UPDATE_SYSTEM,
 		PK_ROLE_ENUM_GET_REPO_LIST,
 		PK_ROLE_ENUM_SIMULATE_INSTALL_PACKAGES,
-		PK_ROLE_ENUM_SIMULATE_UPDATE_PACKAGES,
 		PK_ROLE_ENUM_SIMULATE_REMOVE_PACKAGES,
 		-1);
 
@@ -292,27 +290,6 @@ backend_search_details (PkBackend *backend, PkBitfield filters, gchar **values)
 }
 
 /**
- * pk_backend_update_packages:
- */
-static void
-backend_update_packages (PkBackend *backend, gboolean only_trusted, gchar **package_ids)
-{
-	gchar *package_ids_temp;
-
-	/* check network state */
-	if (!pk_backend_is_online (backend)) {
-		pk_backend_error_code (backend, PK_ERROR_ENUM_NO_NETWORK, "Cannot update when offline");
-		pk_backend_finished (backend);
-		return;
-	}
-	/* send the complete list as stdin */
-	package_ids_temp = pk_package_ids_to_string (package_ids);
-	g_debug("Updates Packages");
-	pk_backend_spawn_helper (spawn, "conaryBackend.py", "update-packages", pk_backend_bool_to_string (only_trusted), package_ids_temp, NULL);
-	g_free (package_ids_temp);
-}
-
-/**
  * pk_backend_update_system:
  */
 static void
@@ -324,20 +301,6 @@ backend_update_system (PkBackend *backend, gboolean only_trusted)
 /**
  * pk_backend_resolve:
  */
-
-/* zodman note
-
-# python conaryBackend.py  resolve installed pastebinit
-allow-cancel	true
-no-percentage-updates
-status	info
-allow-cancel	true
-no-percentage-updates
-status	query
-package	available	pastebinit;0.7-1-1;x86;/foresight.rpath.org at fl:2-qa/1222042924.172:0.7-1-1,1#x86
-finished
-
- */
 static void
 backend_resolve (PkBackend *backend, PkBitfield filters, gchar **package_ids)
 {
@@ -432,27 +395,6 @@ backend_simulate_remove_packages (PkBackend *backend, gchar **package_ids)
 	g_free (package_ids_temp);
 }
 
-/**
- * backend_simulate_update_packages:
- */
-static void
-backend_simulate_update_packages (PkBackend *backend, gchar **package_ids)
-{
-	gchar *package_ids_temp;
-
-	/* check network state */
-	if (!pk_backend_is_online (backend)) {
-		pk_backend_error_code (backend, PK_ERROR_ENUM_NO_NETWORK, "Cannot update when offline");
-		pk_backend_finished (backend);
-		return;
-	}
-	/* send the complete list as stdin */
-	package_ids_temp = pk_package_ids_to_string (package_ids);
-	g_debug("Updates Packages");
-	pk_backend_spawn_helper (spawn, "conaryBackend.py", "simulate-update-packages", package_ids_temp, NULL);
-	g_free (package_ids_temp);
-}
-
 /* FIXME: port this away from PK_BACKEND_OPTIONS */
 PK_BACKEND_OPTIONS (
 	"Conary with XMLCache",				/* description */
@@ -488,13 +430,13 @@ PK_BACKEND_OPTIONS (
 	backend_search_file,					/* search_file */
 	backend_search_group,					/* search_group */
 	backend_search_name,			/* search_name */
-	backend_update_packages,		/* update_packages */
+	NULL,					/* update_packages */
 	backend_update_system,			/* update_system */
 	NULL,					/* what_provides */
 	NULL,					/* simulate_install_files */
 	backend_simulate_install_packages,	/* simulate_install_packages */
 	backend_simulate_remove_packages,	/* simulate_remove_packages */
-	backend_simulate_update_packages,	/* simulate_update_packages */
+	NULL,					/* simulate_update_packages */
 	NULL,					/* upgrade_system */
 	NULL,					/* transaction_start */
 	NULL					/* transaction_stop */
commit 4f407598615b67ff000b3124c688ec075f5d7da5
Author: Jonathan Conder <jonno.conder at gmail.com>
Date:   Fri Apr 1 11:28:04 2011 +1300

    alpm: download packages to the system cache if no directory is specified

diff --git a/backends/alpm/pk-backend-sync.c b/backends/alpm/pk-backend-sync.c
index 7147514..ccf9e3d 100644
--- a/backends/alpm/pk-backend-sync.c
+++ b/backends/alpm/pk-backend-sync.c
@@ -100,11 +100,12 @@ pk_backend_download_packages_thread (PkBackend *self)
 
 	directory = pk_backend_get_string (self, "directory");
 
-	g_return_val_if_fail (directory != NULL, FALSE);
-
-	/* download files to a PackageKit directory */
-	cachedirs = alpm_list_strdup (alpm_option_get_cachedirs ());
-	alpm_option_set_cachedirs (alpm_list_add (NULL, strdup (directory)));
+	if (directory != NULL) {
+		/* download files to a PackageKit directory */
+		cachedirs = alpm_list_strdup (alpm_option_get_cachedirs ());
+		directory = strdup (directory);
+		alpm_option_set_cachedirs (alpm_list_add (NULL, directory));
+	}
 
 	flags |= PM_TRANS_FLAG_NODEPS;
 	flags |= PM_TRANS_FLAG_NOCONFLICTS;
@@ -116,7 +117,9 @@ pk_backend_download_packages_thread (PkBackend *self)
 		pk_backend_transaction_commit (self, &error);
 	}
 
-	alpm_option_set_cachedirs (cachedirs);
+	if (directory != NULL) {
+		alpm_option_set_cachedirs (cachedirs);
+	}
 
 	return pk_backend_transaction_finish (self, error);
 }
commit 2bf4f209995d57462e7f5e207b3ed1de14f44750
Merge: abc434a... fd0f5a1...
Author: Jonathan Conder <jonno.conder at gmail.com>
Date:   Fri Apr 1 11:21:28 2011 +1300

    Merge branch 'alpm'

commit fd0f5a158ae27253a99bde0a3bfe77320b8ce048
Author: Jonathan Conder <jonno.conder at gmail.com>
Date:   Fri Apr 1 11:21:05 2011 +1300

    alpm: update for libalpm 6

diff --git a/backends/alpm/pk-backend-alpm.c b/backends/alpm/pk-backend-alpm.c
index 6dd099c..0077329 100644
--- a/backends/alpm/pk-backend-alpm.c
+++ b/backends/alpm/pk-backend-alpm.c
@@ -34,6 +34,8 @@ PkBackend *backend = NULL;
 GCancellable *cancellable = NULL;
 static GStaticMutex mutex = G_STATIC_MUTEX_INIT;
 
+pmdb_t *localdb = NULL;
+
 gchar *xfercmd = NULL;
 alpm_list_t *holdpkgs = NULL;
 alpm_list_t *syncfirsts = NULL;
@@ -159,7 +161,7 @@ out:
 }
 
 static void
-pk_backend_logcb (pmloglevel_t level, gchar *format, va_list args)
+pk_backend_logcb (pmloglevel_t level, const gchar *format, va_list args)
 {
 	gchar *output;
 
@@ -217,6 +219,11 @@ pk_backend_initialize_alpm (PkBackend *self, GError **error)
 	}
 
 	backend = self;
+	localdb = alpm_option_get_localdb ();
+	if (localdb == NULL) {
+		g_set_error (error, ALPM_ERROR, pm_errno, "[%s]: %s", "local",
+			     alpm_strerrorlast ());
+	}
 
 	/* set some sane defaults */
 	alpm_option_set_logcb (pk_backend_logcb);
diff --git a/backends/alpm/pk-backend-alpm.h b/backends/alpm/pk-backend-alpm.h
index ccdbb8e..23a2724 100644
--- a/backends/alpm/pk-backend-alpm.h
+++ b/backends/alpm/pk-backend-alpm.h
@@ -28,6 +28,8 @@
 extern PkBackend *backend;
 extern GCancellable *cancellable;
 
+extern pmdb_t *localdb;
+
 extern gchar *xfercmd;
 extern alpm_list_t *holdpkgs;
 extern alpm_list_t *syncfirsts;
diff --git a/backends/alpm/pk-backend-config.c b/backends/alpm/pk-backend-config.c
index c426e75..21a4c54 100644
--- a/backends/alpm/pk-backend-config.c
+++ b/backends/alpm/pk-backend-config.c
@@ -28,11 +28,10 @@
 
 #include "pk-backend-alpm.h"
 #include "pk-backend-config.h"
-#include "pk-backend-databases.h"
 #include "pk-backend-error.h"
 
 typedef struct {
-	gboolean ilovecandy, showsize, totaldl, usedelta, usesyslog;
+	gboolean checkspace, ilovecandy, showsize, totaldl, usedelta, usesyslog;
 
 	gchar *arch, *cleanmethod, *dbpath, *logfile, *root, *xfercmd;
 
@@ -98,6 +97,14 @@ pk_backend_config_free (PkBackendConfig *config)
 }
 
 static void
+pk_backend_config_set_checkspace (PkBackendConfig *config)
+{
+	g_return_if_fail (config != NULL);
+
+	config->checkspace = TRUE;
+}
+
+static void
 pk_backend_config_set_ilovecandy (PkBackendConfig *config)
 {
 	g_return_if_fail (config != NULL);
@@ -144,6 +151,7 @@ typedef struct {
 
 /* keep this in alphabetical order */
 static const PkBackendConfigBoolean pk_backend_config_boolean_options[] = {
+	{ "CheckSpace", pk_backend_config_set_checkspace },
 	{ "ILoveCandy", pk_backend_config_set_ilovecandy },
 	{ "ShowSize", pk_backend_config_set_showsize },
 	{ "TotalDownload", pk_backend_config_set_totaldl },
@@ -659,17 +667,12 @@ pk_backend_config_configure_repos (PkBackendConfig *config, GError **error)
 
 	g_return_val_if_fail (config != NULL, FALSE);
 
-	if (alpm_db_unregister_all () < 0) {
-		g_set_error_literal (error, ALPM_ERROR, pm_errno,
-				     alpm_strerrorlast ());
-		return FALSE;
-	}
-
-	localdb = alpm_db_register_local ();
-	if (localdb == NULL) {
-		g_set_error (error, ALPM_ERROR, pm_errno, "[%s]: %s", "local",
-			     alpm_strerrorlast ());
-		return FALSE;
+	for (i = alpm_option_get_syncdbs (); i != NULL; i = i->next) {
+		if (alpm_db_unregister (i->data) < 0) {
+			g_set_error_literal (error, ALPM_ERROR, pm_errno,
+					     alpm_strerrorlast ());
+			return FALSE;
+		}
 	}
 
 	for (i = config->repos; i != NULL; i = i->next) {
@@ -705,6 +708,7 @@ pk_backend_config_configure_alpm (PkBackendConfig *config, GError **error)
 		return FALSE;
 	}
 
+	alpm_option_set_checkspace (config->checkspace);
 	alpm_option_set_usedelta (config->usedelta);
 	alpm_option_set_usesyslog (config->usesyslog);
 	alpm_option_set_arch (config->arch);
diff --git a/backends/alpm/pk-backend-databases.c b/backends/alpm/pk-backend-databases.c
index 00acd8c..f6ab06e 100644
--- a/backends/alpm/pk-backend-databases.c
+++ b/backends/alpm/pk-backend-databases.c
@@ -26,7 +26,6 @@
 #include "pk-backend-databases.h"
 #include "pk-backend-error.h"
 
-pmdb_t *localdb = NULL;
 static GHashTable *disabled = NULL;
 
 static GHashTable *
diff --git a/backends/alpm/pk-backend-databases.h b/backends/alpm/pk-backend-databases.h
index f787201..f9eb2f9 100644
--- a/backends/alpm/pk-backend-databases.h
+++ b/backends/alpm/pk-backend-databases.h
@@ -24,8 +24,6 @@
 #include <alpm.h>
 #include <pk-backend.h>
 
-extern pmdb_t *localdb;
-
 gboolean	 pk_backend_initialize_databases	(PkBackend *self,
 							 GError **error);
 
diff --git a/backends/alpm/pk-backend-depends.c b/backends/alpm/pk-backend-depends.c
index fbf5721..8bb8567 100644
--- a/backends/alpm/pk-backend-depends.c
+++ b/backends/alpm/pk-backend-depends.c
@@ -25,57 +25,11 @@
 #include <pk-backend.h>
 
 #include "pk-backend-alpm.h"
-#include "pk-backend-databases.h"
 #include "pk-backend-depends.h"
 #include "pk-backend-error.h"
 #include "pk-backend-packages.h"
 
 static pmpkg_t *
-alpm_list_find_provider (const alpm_list_t *pkgs, pmdepend_t *depend)
-{
-	g_return_val_if_fail (depend != NULL, NULL);
-
-	/* find a package that provides depend */
-	for (; pkgs != NULL; pkgs = pkgs->next) {
-		if (alpm_depcmp (pkgs->data, depend) != 0) {
-			return pkgs->data;
-		}
-	}
-
-	return NULL;
-}
-
-static pmpkg_t *
-alpm_dbs_find_provider (const alpm_list_t *dbs, pmdepend_t *depend)
-{
-	const alpm_list_t *i;
-
-	g_return_val_if_fail (depend != NULL, NULL);
-
-	/* find the default package that provides depend */
-	for (i = dbs; i != NULL; i = i->next) {
-		const gchar *name = alpm_dep_get_name (depend);
-		pmpkg_t *provider = alpm_db_get_pkg (i->data, name);
-
-		if (provider != NULL && alpm_depcmp (provider, depend) != 0) {
-			return provider;
-		}
-	}
-
-	/* find any package that provides depend */
-	for (i = dbs; i != NULL; i = i->next) {
-		const alpm_list_t *pkgcache = alpm_db_get_pkgcache (i->data);
-		pmpkg_t *provider = alpm_list_find_provider (pkgcache, depend);
-
-		if (provider != NULL) {
-			return provider;
-		}
-	}
-
-	return NULL;
-}
-
-static pmpkg_t *
 alpm_list_find_pkg (const alpm_list_t *pkgs, const gchar *name)
 {
 	g_return_val_if_fail (name != NULL, NULL);
@@ -91,13 +45,13 @@ alpm_list_find_pkg (const alpm_list_t *pkgs, const gchar *name)
 
 static alpm_list_t *
 pk_backend_find_provider (PkBackend *self, alpm_list_t *pkgs,
-			  pmdepend_t *depend, GError **error)
+			  const gchar *depend, GError **error)
 {
 	PkBitfield filters;
 	gboolean recursive, skip_local, skip_remote;
 
 	pmpkg_t *provider;
-	const alpm_list_t *pkgcache, *syncdbs;
+	alpm_list_t *pkgcache, *syncdbs;
 
 	g_return_val_if_fail (self != NULL, pkgs);
 	g_return_val_if_fail (depend != NULL, pkgs);
@@ -109,13 +63,13 @@ pk_backend_find_provider (PkBackend *self, alpm_list_t *pkgs,
 					  PK_FILTER_ENUM_NOT_INSTALLED);
 	skip_remote = pk_bitfield_contain (filters, PK_FILTER_ENUM_INSTALLED);
 
-	if (alpm_list_find_provider (pkgs, depend) != NULL) {
+	if (alpm_find_satisfier (pkgs, depend) != NULL) {
 		return pkgs;
 	}
 
 	/* look for local dependencies */
 	pkgcache = alpm_db_get_pkgcache (localdb);
-	provider = alpm_list_find_provider (pkgcache, depend);
+	provider = alpm_find_satisfier (pkgcache, depend);
 
 	if (provider != NULL) {
 		if (!skip_local) {
@@ -131,7 +85,7 @@ pk_backend_find_provider (PkBackend *self, alpm_list_t *pkgs,
 
 	/* look for remote dependencies */
 	syncdbs = alpm_option_get_syncdbs ();
-	provider = alpm_dbs_find_provider (syncdbs, depend);
+	provider = alpm_find_dbs_satisfier (syncdbs, depend);
 
 	if (provider != NULL) {
 		if (!skip_remote) {
@@ -142,11 +96,9 @@ pk_backend_find_provider (PkBackend *self, alpm_list_t *pkgs,
 			pkgs = alpm_list_add (pkgs, provider);
 		}
 	} else {
-		gchar *string = alpm_dep_compute_string (depend);
 		int code = PM_ERR_UNSATISFIED_DEPS;
-		g_set_error (error, ALPM_ERROR, code, "%s: %s", string,
+		g_set_error (error, ALPM_ERROR, code, "%s: %s", depend,
 			     alpm_strerror (code));
-		free (string);
 	}
 
 	return pkgs;
@@ -222,12 +174,16 @@ pk_backend_get_depends_thread (PkBackend *self)
 
 		depends = alpm_pkg_get_depends (i->data);
 		for (; depends != NULL; depends = depends->next) {
+			gchar *depend;
+
 			if (pk_backend_cancelled (self) || error != NULL) {
 				break;
 			}
 
-			pkgs = pk_backend_find_provider (self, pkgs,
-							 depends->data, &error);
+			depend = alpm_dep_compute_string (depends->data);
+			pkgs = pk_backend_find_provider (self, pkgs, depend,
+							 &error);
+			g_free (depend);
 		}
 	}
 
diff --git a/backends/alpm/pk-backend-error.c b/backends/alpm/pk-backend-error.c
index 9dfb7d0..6383175 100644
--- a/backends/alpm/pk-backend-error.c
+++ b/backends/alpm/pk-backend-error.c
@@ -74,6 +74,10 @@ pk_backend_error (PkBackend *self, GError *error)
 				code = PK_ERROR_ENUM_INTERNAL_ERROR;
 				break;
 
+			case PM_ERR_DISK_SPACE:
+				code = PK_ERROR_ENUM_NO_SPACE_ON_DEVICE;
+				break;
+
 			case PM_ERR_HANDLE_NOT_NULL:
 			case PM_ERR_DB_NOT_NULL:
 			case PM_ERR_TRANS_NOT_NULL:
@@ -95,14 +99,15 @@ pk_backend_error (PkBackend *self, GError *error)
 				code = PK_ERROR_ENUM_CANNOT_WRITE_REPO_CONFIG;
 				break;
 
-			case PM_ERR_DB_WRITE:
-				code = PK_ERROR_ENUM_REPO_NOT_AVAILABLE;
-				break;
-
+			case PM_ERR_DB_VERSION:
 			case PM_ERR_DB_REMOVE:
 				code = PK_ERROR_ENUM_REPO_CONFIGURATION_ERROR;
 				break;
 
+			case PM_ERR_DB_WRITE:
+				code = PK_ERROR_ENUM_REPO_NOT_AVAILABLE;
+				break;
+
 			case PM_ERR_SERVER_BAD_URL:
 				code = PK_ERROR_ENUM_REPO_CONFIGURATION_ERROR;
 				break;
diff --git a/backends/alpm/pk-backend-install.c b/backends/alpm/pk-backend-install.c
index ec5fd21..65a6c11 100644
--- a/backends/alpm/pk-backend-install.c
+++ b/backends/alpm/pk-backend-install.c
@@ -29,6 +29,25 @@
 #include "pk-backend-install.h"
 #include "pk-backend-transaction.h"
 
+static gint
+alpm_add_file (const gchar *filename)
+{
+	pmpkg_t *pkg;
+
+	g_return_val_if_fail (filename != NULL, -1);
+
+	if (alpm_pkg_load (filename, 1, &pkg) < 0) {
+		return -1;
+	}
+
+	if (alpm_add_pkg (pkg) < 0) {
+		alpm_pkg_free (pkg);
+		return -1;
+	}
+
+	return 0;
+}
+
 static gboolean
 pk_backend_transaction_add_targets (PkBackend *self, GError **error)
 {
@@ -41,7 +60,7 @@ pk_backend_transaction_add_targets (PkBackend *self, GError **error)
 	g_return_val_if_fail (paths != NULL, FALSE);
 
 	for (; *paths != NULL; ++paths) {
-		if (alpm_add_target (*paths) < 0) {
+		if (alpm_add_file (*paths) < 0) {
 			g_set_error (error, ALPM_ERROR, pm_errno, "%s: %s",
 				     *paths, alpm_strerrorlast ());
 			return FALSE;
diff --git a/backends/alpm/pk-backend-packages.c b/backends/alpm/pk-backend-packages.c
index 7b983f8..e9a7c94 100644
--- a/backends/alpm/pk-backend-packages.c
+++ b/backends/alpm/pk-backend-packages.c
@@ -22,7 +22,6 @@
  */
 
 #include "pk-backend-alpm.h"
-#include "pk-backend-databases.h"
 #include "pk-backend-error.h"
 #include "pk-backend-groups.h"
 #include "pk-backend-packages.h"
@@ -45,9 +44,8 @@ alpm_pkg_build_id (pmpkg_t *pkg)
 	}
 
 	db = alpm_pkg_get_db (pkg);
-	if (db == NULL) {
-		repo = "local";
-	} else if (db == localdb) {
+	/* TODO: check */
+	if (db == NULL || db == localdb) {
 		repo = "installed";
 	} else {
 		repo = alpm_db_get_name (db);
diff --git a/backends/alpm/pk-backend-remove.c b/backends/alpm/pk-backend-remove.c
index 39a7f14..03329b1 100644
--- a/backends/alpm/pk-backend-remove.c
+++ b/backends/alpm/pk-backend-remove.c
@@ -29,6 +29,23 @@
 #include "pk-backend-remove.h"
 #include "pk-backend-transaction.h"
 
+static gint
+alpm_remove_local (const gchar *name)
+{
+	pmpkg_t *pkg;
+
+	g_return_val_if_fail (name != NULL, -1);
+	g_return_val_if_fail (localdb != NULL, -1);
+
+	pkg = alpm_db_get_pkg (localdb, name);
+	if (pkg == NULL) {
+		pm_errno = PM_ERR_PKG_NOT_FOUND;
+		return -1;
+	}
+
+	return alpm_remove_pkg (pkg);
+}
+
 static gboolean
 pk_backend_transaction_remove_targets (PkBackend *self, GError **error)
 {
@@ -44,7 +61,7 @@ pk_backend_transaction_remove_targets (PkBackend *self, GError **error)
 		gchar **package = pk_package_id_split (*packages);
 		gchar *name = package[PK_PACKAGE_ID_NAME];
 
-		if (alpm_remove_target (name) < 0) {
+		if (alpm_remove_local (name) < 0) {
 			g_set_error (error, ALPM_ERROR, pm_errno, "%s: %s",
 				     name, alpm_strerrorlast ());
 			g_strfreev (package);
diff --git a/backends/alpm/pk-backend-search.c b/backends/alpm/pk-backend-search.c
index 971e19b..592472d 100644
--- a/backends/alpm/pk-backend-search.c
+++ b/backends/alpm/pk-backend-search.c
@@ -26,7 +26,6 @@
 #include <string.h>
 
 #include "pk-backend-alpm.h"
-#include "pk-backend-databases.h"
 #include "pk-backend-groups.h"
 #include "pk-backend-packages.h"
 #include "pk-backend-search.h"
diff --git a/backends/alpm/pk-backend-sync.c b/backends/alpm/pk-backend-sync.c
index b3cb1e9..7147514 100644
--- a/backends/alpm/pk-backend-sync.c
+++ b/backends/alpm/pk-backend-sync.c
@@ -26,11 +26,39 @@
 #include <string.h>
 
 #include "pk-backend-alpm.h"
-#include "pk-backend-databases.h"
 #include "pk-backend-error.h"
 #include "pk-backend-sync.h"
 #include "pk-backend-transaction.h"
 
+static gint
+alpm_add_dbtarget (const gchar *repo, const gchar *name)
+{
+	const alpm_list_t *i;
+	pmpkg_t *pkg;
+
+	g_return_val_if_fail (repo != NULL, -1);
+	g_return_val_if_fail (name != NULL, -1);
+
+	for (i = alpm_option_get_syncdbs (); i != NULL; i = i->next) {
+		if (g_strcmp0 (alpm_db_get_name (i->data), repo) == 0) {
+			break;
+		}
+	}
+
+	if (i == NULL) {
+		pm_errno = PM_ERR_DB_NOT_FOUND;
+		return -1;
+	}
+
+	pkg = alpm_db_get_pkg (i->data, name);
+	if (pkg == NULL) {
+		pm_errno = PM_ERR_PKG_NOT_FOUND;
+		return -1;
+	}
+
+	return alpm_add_pkg (pkg);
+}
+
 static gboolean
 pk_backend_transaction_sync_targets (PkBackend *self, GError **error)
 {
@@ -47,7 +75,7 @@ pk_backend_transaction_sync_targets (PkBackend *self, GError **error)
 		gchar *repo = package[PK_PACKAGE_ID_DATA];
 		gchar *name = package[PK_PACKAGE_ID_NAME];
 
-		if (alpm_sync_dbtarget (repo, name) < 0) {
+		if (alpm_add_dbtarget (repo, name) < 0) {
 			g_set_error (error, ALPM_ERROR, pm_errno, "%s/%s: %s",
 				     repo, name, alpm_strerrorlast ());
 			g_strfreev (package);
diff --git a/backends/alpm/pk-backend-transaction.c b/backends/alpm/pk-backend-transaction.c
index cad1010..f919309 100644
--- a/backends/alpm/pk-backend-transaction.c
+++ b/backends/alpm/pk-backend-transaction.c
@@ -22,7 +22,6 @@
  */
 
 #include "pk-backend-alpm.h"
-#include "pk-backend-databases.h"
 #include "pk-backend-error.h"
 #include "pk-backend-packages.h"
 #include "pk-backend-transaction.h"
@@ -201,10 +200,23 @@ pk_backend_transaction_dlcb (const gchar *basename, off_t complete, off_t total)
 
 static void
 pk_backend_transaction_progress_cb (pmtransprog_t type, const gchar *target,
-				    gint percent, gint targets, gint current)
+				    gint percent, gsize targets, gsize current)
 {
 	static gint recent = 101;
-	gint overall = percent + (current - 1) * 100;
+	gsize overall = percent + (current - 1) * 100;
+
+	/* TODO: revert when fixed upstream */
+	if (type == PM_TRANS_PROGRESS_CONFLICTS_START ||
+	    type == PM_TRANS_PROGRESS_DISKSPACE_START ||
+	    type == PM_TRANS_PROGRESS_INTEGRITY_START) {
+		if (current < targets) {
+			overall = percent + current++ * 100;
+		}
+	}
+	
+	if (current < 1 || targets < current) {
+		g_warning ("TODO: CURRENT/TARGETS FAILED for %d", type);
+	}
 
 	g_return_if_fail (target != NULL);
 	g_return_if_fail (0 <= percent && percent <= 100);
@@ -217,6 +229,8 @@ pk_backend_transaction_progress_cb (pmtransprog_t type, const gchar *target,
 		case PM_TRANS_PROGRESS_UPGRADE_START:
 		case PM_TRANS_PROGRESS_REMOVE_START:
 		case PM_TRANS_PROGRESS_CONFLICTS_START:
+		case PM_TRANS_PROGRESS_DISKSPACE_START:
+		case PM_TRANS_PROGRESS_INTEGRITY_START:
 			if (percent == recent) {
 				break;
 			}
@@ -225,7 +239,7 @@ pk_backend_transaction_progress_cb (pmtransprog_t type, const gchar *target,
 			pk_backend_set_percentage (backend, overall / targets);
 			recent = percent;
 
-			g_debug ("%d%% of %s complete (%u of %u)", percent,
+			g_debug ("%d%% of %s complete (%zu of %zu)", percent,
 				 target, current, targets);
 			break;
 
@@ -263,6 +277,24 @@ pk_backend_install_ignorepkg (PkBackend *self, pmpkg_t *pkg, gint *result)
 }
 
 static void
+pk_backend_select_provider (PkBackend *self, pmdepend_t *dep,
+			    const alpm_list_t *providers)
+{
+	gchar *output;
+
+	g_return_if_fail (self != NULL);
+	g_return_if_fail (dep != NULL);
+	g_return_if_fail (providers != NULL);
+
+	output = g_strdup_printf ("provider package was selected "
+				  "(%s provides %s)\n",
+				  alpm_pkg_get_name (providers->data),
+				  alpm_dep_get_name (dep));
+	pk_backend_output (self, output);
+	g_free (output);
+}
+
+static void
 pk_backend_transaction_conv_cb (pmtransconv_t question, gpointer data1,
 				gpointer data2, gpointer data3, gint *result)
 {
@@ -274,11 +306,6 @@ pk_backend_transaction_conv_cb (pmtransconv_t question, gpointer data1,
 			pk_backend_install_ignorepkg (backend, data1, result);
 			break;
 
-		case PM_TRANS_CONV_REMOVE_PKGS:
-			g_debug ("unsafe question %d", question);
-			*result = 0;
-			break;
-
 		case PM_TRANS_CONV_REPLACE_PKG:
 		case PM_TRANS_CONV_CONFLICT_PKG:
 		case PM_TRANS_CONV_CORRUPTED_PKG:
@@ -288,6 +315,16 @@ pk_backend_transaction_conv_cb (pmtransconv_t question, gpointer data1,
 			*result = 1;
 			break;
 
+		case PM_TRANS_CONV_REMOVE_PKGS:
+			g_debug ("unsafe question %d", question);
+			*result = 0;
+			break;
+
+		case PM_TRANS_CONV_SELECT_PROVIDER:
+			pk_backend_select_provider (backend, data1, data2);
+			*result = 0;
+			break;
+
 		default:
 			g_warning ("unknown question %d", question);
 			break;
@@ -332,7 +369,7 @@ pk_backend_transaction_add_done (PkBackend *self, pmpkg_t *pkg)
 	name = alpm_pkg_get_name (pkg);
 	version = alpm_pkg_get_version (pkg);
 
-	alpm_logaction ((gchar *) "installed %s (%s)\n", name, version);
+	alpm_logaction ("installed %s (%s)\n", name, version);
 	pk_backend_pkg (self, pkg, PK_INFO_ENUM_FINISHED);
 
 	optdepends = alpm_pkg_get_optdepends (pkg);
@@ -374,7 +411,7 @@ pk_backend_transaction_remove_done (PkBackend *self, pmpkg_t *pkg)
 	name = alpm_pkg_get_name (pkg);
 	version = alpm_pkg_get_version (pkg);
 
-	alpm_logaction ((gchar *) "removed %s (%s)\n", name, version);
+	alpm_logaction ("removed %s (%s)\n", name, version);
 	pk_backend_pkg (self, pkg, PK_INFO_ENUM_FINISHED);
 }
 
@@ -419,7 +456,7 @@ pk_backend_transaction_upgrade_done (PkBackend *self, pmpkg_t *pkg,
 	pre = alpm_pkg_get_version (old);
 	post = alpm_pkg_get_version (pkg);
 
-	alpm_logaction ((gchar *) "upgraded %s (%s -> %s)\n", name, pre, post);
+	alpm_logaction ("upgraded %s (%s -> %s)\n", name, pre, post);
 	pk_backend_pkg (self, pkg, PK_INFO_ENUM_FINISHED);
 
 	optdepends = alpm_list_diff (alpm_pkg_get_optdepends (pkg),
@@ -461,6 +498,7 @@ pk_backend_transaction_event_cb (pmtransevt_t event, gpointer data,
 		case PM_TRANS_EVT_INTERCONFLICTS_START:
 		case PM_TRANS_EVT_INTEGRITY_START:
 		case PM_TRANS_EVT_DELTA_INTEGRITY_START:
+		case PM_TRANS_EVT_DISKSPACE_START:
 			pk_backend_transaction_test_commit (backend);
 			break;
 
diff --git a/backends/alpm/pk-backend-update.c b/backends/alpm/pk-backend-update.c
index 771d528..a281953 100644
--- a/backends/alpm/pk-backend-update.c
+++ b/backends/alpm/pk-backend-update.c
@@ -28,7 +28,6 @@
 #include <sys/stat.h>
 
 #include "pk-backend-alpm.h"
-#include "pk-backend-databases.h"
 #include "pk-backend-error.h"
 #include "pk-backend-packages.h"
 #include "pk-backend-transaction.h"
@@ -251,7 +250,7 @@ pk_backend_update_databases (PkBackend *self, gint force, GError **error) {
 		return FALSE;
 	}
 
-	alpm_logaction ((gchar *) "synchronizing package lists\n");
+	alpm_logaction ("synchronizing package lists\n");
 
 	dlcb = alpm_option_get_dlcb ();
 	totaldlcb = alpm_option_get_totaldlcb ();
@@ -326,26 +325,6 @@ alpm_pkg_is_syncfirst (pmpkg_t *pkg)
 	return FALSE;
 }
 
-static gboolean
-alpm_pkg_is_update (pmpkg_t *pkg, pmpkg_t *update)
-{
-	gint result;
-
-	g_return_val_if_fail (pkg != NULL, FALSE);
-	g_return_val_if_fail (update != NULL, FALSE);
-
-	result = alpm_pkg_vercmp (alpm_pkg_get_version (pkg),
-				  alpm_pkg_get_version (update));
-
-	if (result < 0) {
-		return TRUE;
-	} else if (result > 0) {
-		return alpm_pkg_has_force (update) != 0;
-	} else {
-		return FALSE;
-	}
-}
-
 static pmpkg_t *
 alpm_pkg_find_update (pmpkg_t *pkg, const alpm_list_t *dbs)
 {
@@ -360,7 +339,8 @@ alpm_pkg_find_update (pmpkg_t *pkg, const alpm_list_t *dbs)
 		pmpkg_t *update = alpm_db_get_pkg (dbs->data, name);
 
 		if (update != NULL) {
-			if (alpm_pkg_is_update (pkg, update)) {
+			if (alpm_pkg_vercmp (alpm_pkg_get_version (update),
+					     alpm_pkg_get_version (pkg)) > 0) {
 				return update;
 			} else {
 				return NULL;
commit 35070d60ac860bcb1d749173e2e507fc5b7e1cb0
Author: Jesse Zhang <zh.jesse at gmail.com>
Date:   Wed Mar 30 16:13:37 2011 +0800

    conary: bring back exception handling around build_update_job

diff --git a/backends/conary/conaryBackend.py b/backends/conary/conaryBackend.py
index 95b57c7..eb3c7d5 100755
--- a/backends/conary/conaryBackend.py
+++ b/backends/conary/conaryBackend.py
@@ -213,6 +213,16 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
             self.error(ERROR_NO_PACKAGES_TO_UPDATE, "Network error. Try again")
         return updJob
 
+    def _build_update_job(self, applyList):
+        '''Wrapper around build_update_job() so we are add exception handling
+        '''
+        try:
+            ret = self.conary.build_update_job(applyList)
+        except conaryclient.DepResolutionFailure as e:
+            deps = [str(i[0][0]).split(":")[0] for i in e.cannotResolve]
+            self.error(ERROR_DEP_RESOLUTION_FAILED, ", ".join(set(deps)))
+        return ret
+
     def _get_package_update(self, pkg_list):
         applyList = []
         for name, version, flavor in pkg_list:
@@ -220,7 +230,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
                 applyList.append((name, (version, flavor), (None, None), False))
             else:
                 applyList.append((name, (None, None), (version, flavor), True))
-        return self.conary.build_update_job(applyList)
+        return self._build_update_job(applyList)
 
     def _resolve_list(self, pkg_list, filters):
         # 1. Resolve through local db
@@ -745,7 +755,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         applyList = [(x[0], (None, None), x[1:], True) for x in updateItems]
 
         self.status(STATUS_RUNNING)
-        updJob, suggMap = self.conary.build_update_job(applyList)
+        updJob, suggMap = self._build_update_job(applyList)
         return updJob
 
     def _parse_updates(self, updJob):
diff --git a/backends/conary/conarypk.py b/backends/conary/conarypk.py
index 9b6e4b2..a32d7cf 100644
--- a/backends/conary/conarypk.py
+++ b/backends/conary/conarypk.py
@@ -7,7 +7,7 @@ import itertools
 import os
 
 from conary.conaryclient import ConaryClient, cmdline
-from conary import conarycfg
+from conary import conarycfg, conaryclient
 from conary.versions import Label
 from conary.errors import TroveNotFound
 from conary.conaryclient.update import NoNewTrovesError
@@ -227,8 +227,6 @@ class ConaryPk:
                     self.job_cache.cacheUpdateJob(applyList, updJob)
             except conaryclient.NoNewTrovesError:
                 suggMap = {}
-            except conaryclient.DepResolutionFailure as error :
-                raise
 
         return updJob, suggMap
 
commit f814d9c1a6a6b252a7bdede69d55a28ff5cfc950
Author: Jesse Zhang <zh.jesse at gmail.com>
Date:   Wed Mar 30 14:58:32 2011 +0800

    conary: show update jobs correctly
    
    Update jobs are different from updates.

diff --git a/backends/conary/conaryBackend.py b/backends/conary/conaryBackend.py
index 0242e1b..95b57c7 100755
--- a/backends/conary/conaryBackend.py
+++ b/backends/conary/conaryBackend.py
@@ -42,7 +42,7 @@ from conaryCallback import RemoveCallback, UpdateSystemCallback
 from conaryFilter import ConaryFilter
 from XMLCache import XMLCache
 from pkConaryLog import log
-from conarypk import ConaryPk, get_arch
+import conarypk
 
 sys.excepthook = util.genExcepthook()
 #{{{ FUNCTIONS
@@ -95,7 +95,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         PackageKitBaseBackend.__init__(self, args)
 
         # conary configurations
-        conary = ConaryPk()
+        conary = conarypk.ConaryPk()
         self.cfg = conary.cfg
         self.client = conary.cli
         self.conary = conary
@@ -124,6 +124,9 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
             installed = INFO_AVAILABLE
         return installed
 
+    def _get_package_name_from_ids(self, package_ids):
+        return [split_package_id(x)[0] for x in package_ids]
+
     def get_package_id_new(self,pkg):
         name,version,flavor = pkg.get("trove")
         metadata = pkg.get("metadata")
@@ -134,12 +137,12 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
                 if data == "." or data == "":
                     data = name.replace("-",' ').capitalize()
         return get_package_id(name, str(version.trailingRevision()),
-                get_arch(flavor), data)
+                conarypk.get_arch(flavor), data)
 
     @ExceptionHandler
     def get_package_id(self, name, versionObj, flavor):
         version = versionObj.trailingRevision()
-        arch = get_arch(flavor)
+        arch = conarypk.get_arch(flavor)
         data = ""
         pkg = self.xmlcache.resolve(name)
         if pkg:
@@ -479,6 +482,27 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         self.percentage(None)
         self.xmlcache.refresh()
 
+    def _display_update_jobs(self, install_jobs, erase_jobs, update_jobs):
+        '''Emit package status for a list of installing/erasing/updating jobs
+        '''
+        for (name, (oldVer, oldFla), (newVer, newFla)) in install_jobs:
+            v = str(newVer.trailingRevision())
+            f = conarypk.get_arch(newFla)
+            pkg_id = get_package_id(name, v, f, '')
+            self.package(pkg_id, INFO_INSTALLING, '')
+
+        for (name, (oldVer, oldFla), (newVer, newFla)) in erase_jobs:
+            v = str(oldVer.trailingRevision())
+            f = conarypk.get_arch(oldFla)
+            pkg_id = get_package_id(name, v, f, '')
+            self.package(pkg_id, INFO_REMOVING, '')
+
+        for (name, (oldVer, oldFla), (newVer, newFla)) in update_jobs:
+            v = str(oldVer.trailingRevision())
+            f = conarypk.get_arch(oldFla)
+            pkg_id = get_package_id(name, v, f, '')
+            self.package(pkg_id, INFO_UPDATING, '')
+
     def install_packages(self, only_trusted, package_ids, simulate=False):
         """
             alias of update_packages
@@ -511,8 +535,10 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         if not simulate:
             self._apply_update_job(updJob)
         else:
-            r = self._parse_update_jobs(updJob)
-            self._display_update_jobs(r)
+            pkgs = self._get_package_name_from_ids(package_ids)
+            jobs = conarypk.parse_jobs(updJob, excludes=pkgs,
+                    show_components=False)
+            self._display_update_jobs(*jobs)
 
     @ExceptionHandler
     def remove_packages(self, allowDeps, autoremove, package_ids, simulate=False):
@@ -541,8 +567,10 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         if not simulate:
             self._apply_update_job(updJob)
         else:
-            r = self._parse_update_jobs(updJob)
-            self._display_update_jobs(r)
+            pkgs = self._get_package_name_from_ids(package_ids)
+            jobs = conarypk.parse_jobs(updJob, excludes=pkgs,
+                    show_components=False)
+            self._display_update_jobs(*jobs)
 
         self._reset_conary_callback()
 
@@ -720,7 +748,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         updJob, suggMap = self.conary.build_update_job(applyList)
         return updJob
 
-    def _parse_update_jobs(self, updJob):
+    def _parse_updates(self, updJob):
         jobs_list = updJob.getJobs()
         r = []
         for job in jobs_list:
@@ -735,7 +763,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
             r.append(trove_info)
         return r
 
-    def _display_update_jobs(self, pkg_list):
+    def _display_updates(self, pkg_list):
         data = self.xmlcache.resolve_list([name for ((name, version, flavor), info) in pkg_list])
         new_res = []
         for pkg in data:
@@ -755,8 +783,8 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
 
         cb = GetUpdateCallback(self, self.cfg)
         updJob = self._get_updateall_job(cb)
-        r = self._parse_update_jobs(updJob)
-        self._display_update_jobs(r)
+        r = self._parse_updates(updJob)
+        self._display_updates(r)
 
         self._reset_conary_callback()
 
diff --git a/backends/conary/conarypk.py b/backends/conary/conarypk.py
index 9285e25..9b6e4b2 100644
--- a/backends/conary/conarypk.py
+++ b/backends/conary/conarypk.py
@@ -3,6 +3,9 @@
 ###  greets mkj
 ### zodman at foresightlinux.org under the WTFPL http://sam.zoy.org/wtfpl/
 
+import itertools
+import os
+
 from conary.conaryclient import ConaryClient, cmdline
 from conary import conarycfg
 from conary.versions import Label
@@ -15,8 +18,6 @@ from conary.lib import util
 
 from pkConaryLog import log
 
-import os
-
 from packagekit.backend import PackageKitBaseBackend
 from packagekit.enums import ERROR_NO_NETWORK
 
@@ -30,6 +31,32 @@ def get_arch(flavor):
         ret = ''
     return ret
 
+def parse_jobs(updJob, excludes=[], show_components=True):
+    '''Split the install/erase/update jobs from an UpdateJob
+
+    @updJob: an UpdateJob
+    @excludes: packages to be ignored
+    @show_components: if set to False, discard jobs on component troves.
+
+    Return a (list, list, list) tuple.
+    '''
+    def _filter_pkg(j):
+        return (show_components or ':' not in j[0]) and j[0] not in excludes
+
+    jobs_list = updJob.getJobs()
+    jobs = filter(_filter_pkg, itertools.chain(*jobs_list))
+    install_jobs, erase_jobs, update_jobs = [], [], []
+    for job in jobs:
+        job = job[:3]
+        (name, (oldVer, oldFla), (newVer, newFla)) = job
+        if not oldVer:
+            install_jobs.append(job)
+        elif not newVer:
+            erase_jobs.append(job)
+        else:
+            update_jobs.append(job)
+    return (install_jobs, erase_jobs, update_jobs)
+
 class UpdateJobCache:
     '''A cache to store (freeze) conary UpdateJobs.
 
commit cefa2e8e3a267d35c1ac154b6f8b471233a7d50b
Author: Jesse Zhang <zh.jesse at gmail.com>
Date:   Wed Mar 30 11:06:46 2011 +0800

    conary: fix exception processing of applyUpdateJob

diff --git a/backends/conary/conaryBackend.py b/backends/conary/conaryBackend.py
index c2cfbb7..0242e1b 100755
--- a/backends/conary/conaryBackend.py
+++ b/backends/conary/conaryBackend.py
@@ -199,10 +199,15 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         try:
             # TODO we should really handle the restart case here
             restartDir = self.client.applyUpdateJob(updJob)
-        except errors.InternalConaryError:
-            self.error(ERROR_NO_PACKAGES_TO_UPDATE,"get-updates first and then update sytem")
+        except errors.InternalConaryError as e:
+            if str(e) == "Stale update job":
+                self.conary.clear_job_cache()
+                # The UpdateJob can be invalid. It's probably because after the
+                # update job is fozen, the state of the database has changed.
+                self.error(ERROR_INVALID_PACKAGE_FILE,
+                        "Previously cached file is broken. Try again")
         except trove.TroveIntegrityError:
-            self.error(ERROR_NO_PACKAGES_TO_UPDATE,"run get-updates again")
+            self.error(ERROR_NO_PACKAGES_TO_UPDATE, "Network error. Try again")
         return updJob
 
     def _get_package_update(self, pkg_list):
diff --git a/backends/conary/conarypk.py b/backends/conary/conarypk.py
index 00dd5db..9285e25 100644
--- a/backends/conary/conarypk.py
+++ b/backends/conary/conarypk.py
@@ -63,6 +63,11 @@ class UpdateJobCache:
         os.mkdir(jobPath)
         updJob.freeze(jobPath)
 
+    def clearCache(self):
+        '''Clear all cached jobs
+        '''
+        util.rmtree('%s/*' % self._jobPath)
+
 class ConaryPk:
     def __init__(self):
         # get configs from /etc/conary
@@ -96,6 +101,9 @@ class ConaryPk:
             Pk = PackageKitBaseBackend("")
             Pk.error(ERROR_NO_NETWORK,"Not exist network conection")
 
+    def clear_job_cache(self):
+        self.job_cache.clearCache()
+
     def _get_repos(self):
         """ get repos for do request query """
         return self.repos
commit 8a87c7e66fa22b543e812d7a1c7ff169ba2c03b9
Author: Jesse Zhang <zh.jesse at gmail.com>
Date:   Wed Mar 30 10:57:07 2011 +0800

    conary: move build_update_job to where it belongs
    
    * build_update_job should be part of conarypk.py.
    * also move UpdateJobCache to conarypk.py
    * did some cleanup in the meantime. Removed unused method _show_package.

diff --git a/backends/conary/TODO b/backends/conary/TODO
index 1d3aeb2..a34a3ca 100644
--- a/backends/conary/TODO
+++ b/backends/conary/TODO
@@ -2,3 +2,4 @@
   - there is probably bugs in the tool ('ticache') that generates the cache.
 * should support system model
   - the conary-api related code should all be put in conarypk.py
+  - Note: some allow_cancel() calls may be lost when moving the code.
diff --git a/backends/conary/XMLCache.py b/backends/conary/XMLCache.py
index bd8510c..c38d5ea 100644
--- a/backends/conary/XMLCache.py
+++ b/backends/conary/XMLCache.py
@@ -3,14 +3,9 @@ import cElementTree
 from xml.parsers.expat import ExpatError
 import urllib as url
 
-
-from conary.lib import sha1helper
-from conary.lib import util
-
 from packagekit.backend import *
 from packagekit.enums import ERROR_NO_CACHE,ERROR_REPO_CONFIGURATION_ERROR, ERROR_NO_NETWORK
 
-
 from pkConaryLog import log
 from conarypk import ConaryPk
 from conaryEnums import groupMap
@@ -334,39 +329,6 @@ class XMLCache:
         categories.sort()
         return set( categories )
 
-class UpdateJobCache:
-    '''A cache to store (freeze) conary UpdateJobs.
-
-    The key is an applyList which can be used to build UpdateJobs.
-    '''
-
-    def __init__(self, jobPath='/var/cache/conary/jobs/', createJobPath=True):
-        if createJobPath and not os.path.isdir(jobPath):
-            os.mkdir(jobPath)
-        self._jobPath = jobPath
-
-    def _getJobCachePath(self, applyList):
-        applyStr = '\0'.join(['%s=%s[%s]--%s[%s]%s' % (
-            x[0], x[1][0], x[1][1], x[2][0], x[2][1], x[3]) for x in applyList])
-        return '%s/%s' % (self._jobPath,
-                sha1helper.sha1ToString(sha1helper.sha1String(applyStr)))
-
-    def getCachedUpdateJob(self, applyList):
-        '''Retrieve a previously cached job
-        '''
-        jobPath = self._getJobCachePath(applyList)
-        if os.path.exists(jobPath):
-            return jobPath
-
-    def cacheUpdateJob(self, applyList, updJob):
-        '''Cache a conary UpdateJob
-        '''
-        jobPath = self._getJobCachePath(applyList)
-        if os.path.exists(jobPath):
-            util.rmtree(jobPath)
-        os.mkdir(jobPath)
-        updJob.freeze(jobPath)
-
 if __name__ == '__main__':
   #  print ">>> name"
     import sys
diff --git a/backends/conary/conaryBackend.py b/backends/conary/conaryBackend.py
index e889ac9..c2cfbb7 100755
--- a/backends/conary/conaryBackend.py
+++ b/backends/conary/conaryBackend.py
@@ -40,7 +40,7 @@ from packagekit.enums import *
 from conaryCallback import UpdateCallback, GetUpdateCallback
 from conaryCallback import RemoveCallback, UpdateSystemCallback
 from conaryFilter import ConaryFilter
-from XMLCache import XMLCache, UpdateJobCache
+from XMLCache import XMLCache
 from pkConaryLog import log
 from conarypk import ConaryPk, get_arch
 
@@ -101,7 +101,6 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         self.conary = conary
         self.callback = UpdateCallback(self, self.cfg)
         self.xmlcache = XMLCache()
-        self.job_cache = UpdateJobCache()
 
         self._reset_conary_callback()
 
@@ -139,13 +138,10 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
 
     @ExceptionHandler
     def get_package_id(self, name, versionObj, flavor):
-
         version = versionObj.trailingRevision()
-        pkg = self.xmlcache.resolve(name)
-        #pkg["shortDesc"] = "."
         arch = get_arch(flavor)
-        #data = versionObj.asString() + "#"
         data = ""
+        pkg = self.xmlcache.resolve(name)
         if pkg:
             if "shortDesc" in pkg:
                 data = pkg['shortDesc'].decode("UTF")
@@ -198,38 +194,6 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
             log.info("NOT FOUND %s " % searchlist )
             self.message(MESSAGE_COULD_NOT_FIND_PACKAGE,"search not found")
 
-    def _build_update_job(self, applyList, cache=True):
-        '''Build an UpdateJob from applyList
-        '''
-        self.allow_cancel(False)
-        updJob = self.client.newUpdateJob()
-        suggMap = {}
-        jobPath = self.job_cache.getCachedUpdateJob(applyList)
-        if cache and jobPath:
-            try:
-                log.info("Using previously cached update job at %s" % (jobPath,))
-                updJob.thaw(jobPath)
-            except IOError, err:
-                log.error("Failed to read update job at %s (error=%s)" % (jobPath, str(err)))
-                updJob = None
-        else:
-            log.info("Creating a new update job")
-            try:
-                suggMap = self.client.prepareUpdateJob(updJob, applyList)
-                log.info("Successfully created a new update job")
-                if cache:
-                    self.job_cache.cacheUpdateJob(applyList, updJob)
-            except conaryclient.NoNewTrovesError:
-                return updJob, {}
-            except conaryclient.DepResolutionFailure as error :
-                log.info(error.getErrorMessage())
-                deps =  error.cannotResolve
-                dep_package = [ str(i[0][0]).split(":")[0] for i in deps ]
-                log.info(dep_package)
-                self.error(ERROR_DEP_RESOLUTION_FAILED,  "This package depends of:  %s" % ", ".join(set(dep_package)))
-
-        return updJob, suggMap
-
     def _apply_update_job(self, updJob):
         self.allow_cancel(False)
         try:
@@ -248,7 +212,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
                 applyList.append((name, (version, flavor), (None, None), False))
             else:
                 applyList.append((name, (None, None), (version, flavor), True))
-        return self._build_update_job(applyList)
+        return self.conary.build_update_job(applyList)
 
     def _resolve_list(self, pkg_list, filters):
         # 1. Resolve through local db
@@ -691,15 +655,6 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
                 log.info("Details: %s, %s, %s, %s, %s, %d" % (package_id, license, categories, longDesc, url, size))
                 self.details(package_id, license, categories, longDesc, url, size)
 
-    def _show_package(self, name, version, flavor, status):
-        '''  Show info about package'''
-        log.info(name)
-        package_id = self.get_package_id(name, version, flavor)
-        summary = package_id.split(";")
-        meta = summary[3]
-
-        self.package(package_id, status, meta)
-
     def _get_restart(self, name):
         if name in self.rebootpkgs:
             return RESTART_SYSTEM
@@ -757,7 +712,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         applyList = [(x[0], (None, None), x[1:], True) for x in updateItems]
 
         self.status(STATUS_RUNNING)
-        updJob, suggMap = self._build_update_job(applyList)
+        updJob, suggMap = self.conary.build_update_job(applyList)
         return updJob
 
     def _parse_update_jobs(self, updJob):
diff --git a/backends/conary/conarypk.py b/backends/conary/conarypk.py
index 1313b32..00dd5db 100644
--- a/backends/conary/conarypk.py
+++ b/backends/conary/conarypk.py
@@ -10,6 +10,9 @@ from conary.errors import TroveNotFound
 from conary.conaryclient.update import NoNewTrovesError
 from conary.deps import deps
 
+from conary.lib import sha1helper
+from conary.lib import util
+
 from pkConaryLog import log
 
 import os
@@ -27,6 +30,39 @@ def get_arch(flavor):
         ret = ''
     return ret
 
+class UpdateJobCache:
+    '''A cache to store (freeze) conary UpdateJobs.
+
+    The key is an applyList which can be used to build UpdateJobs.
+    '''
+
+    def __init__(self, jobPath='/var/cache/conary/jobs/', createJobPath=True):
+        if createJobPath and not os.path.isdir(jobPath):
+            os.mkdir(jobPath)
+        self._jobPath = jobPath
+
+    def _getJobCachePath(self, applyList):
+        applyStr = '\0'.join(['%s=%s[%s]--%s[%s]%s' % (
+            x[0], x[1][0], x[1][1], x[2][0], x[2][1], x[3]) for x in applyList])
+        return '%s/%s' % (self._jobPath,
+                sha1helper.sha1ToString(sha1helper.sha1String(applyStr)))
+
+    def getCachedUpdateJob(self, applyList):
+        '''Retrieve a previously cached job
+        '''
+        jobPath = self._getJobCachePath(applyList)
+        if os.path.exists(jobPath):
+            return jobPath
+
+    def cacheUpdateJob(self, applyList, updJob):
+        '''Cache a conary UpdateJob
+        '''
+        jobPath = self._getJobCachePath(applyList)
+        if os.path.exists(jobPath):
+            util.rmtree(jobPath)
+        os.mkdir(jobPath)
+        updJob.freeze(jobPath)
+
 class ConaryPk:
     def __init__(self):
         # get configs from /etc/conary
@@ -52,6 +88,9 @@ class ConaryPk:
         self.db = cli.db
         # for request query on repository (repos)
         self.repos = cli.repos
+
+        self.job_cache = UpdateJobCache()
+
     def _exist_network(self):
         if not os.environ.get("NETWORK"):
             Pk = PackageKitBaseBackend("")
@@ -135,6 +174,29 @@ class ConaryPk:
             tmp = ""
         return tmp + cmdline.toTroveSpec( trove[0], str(trove[1]), None)
 
+    def build_update_job(self, applyList, cache=True):
+        '''Build an UpdateJob from applyList
+        '''
+        updJob = self.cli.newUpdateJob()
+        suggMap = {}
+        jobPath = self.job_cache.getCachedUpdateJob(applyList)
+        if cache and jobPath:
+            try:
+                updJob.thaw(jobPath)
+            except IOError, err:
+                updJob = None
+        else:
+            try:
+                suggMap = self.cli.prepareUpdateJob(updJob, applyList)
+                if cache:
+                    self.job_cache.cacheUpdateJob(applyList, updJob)
+            except conaryclient.NoNewTrovesError:
+                suggMap = {}
+            except conaryclient.DepResolutionFailure as error :
+                raise
+
+        return updJob, suggMap
+
 if __name__ == "__main__":
     conary = ConaryPk()
     print conary.search_path("/usr/bin/vim")
commit abc434a5845cf3c55bde066e003906320c277f07
Author: Richard Hughes <richard at hughsie.com>
Date:   Wed Mar 30 18:06:42 2011 +0100

    yum: implement _pkg_compare() and use get_package_list()
    
    This fixes the backend after 3d740a67ba48c65bc6711bb035a96d6344925941 broke it.

diff --git a/backends/yum/yumBackend.py b/backends/yum/yumBackend.py
index b815570..92aa99b 100755
--- a/backends/yum/yumBackend.py
+++ b/backends/yum/yumBackend.py
@@ -436,7 +436,7 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
                 pkgfilter.add_available(available)
 
                 # we couldn't do this when generating the list
-                package_list = pkgfilter.post_process()
+                package_list = pkgfilter.get_package_list()
                 self._show_package_list(package_list)
 
     def _show_package_list(self, lst):
@@ -568,7 +568,7 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
         # add list to filter
         pkgfilter.add_installed(installed)
         pkgfilter.add_available(available)
-        package_list = pkgfilter.post_process()
+        package_list = pkgfilter.get_package_list()
         self._show_package_list(package_list)
         self.percentage(100)
 
@@ -623,7 +623,7 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
         # add list to filter
         pkgfilter.add_installed(installed)
         pkgfilter.add_available(available)
-        package_list = pkgfilter.post_process()
+        package_list = pkgfilter.get_package_list()
         self._show_package_list(package_list)
         self.percentage(100)
 
@@ -661,7 +661,7 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
             # add list to filter
             pkgfilter.add_installed(installed)
             pkgfilter.add_available(available)
-            package_list = pkgfilter.post_process()
+            package_list = pkgfilter.get_package_list()
             self._show_package_list(package_list)
             self.percentage(100)
 
@@ -785,7 +785,7 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
                     return
 
         # we couldn't do this when generating the list
-        package_list = pkgfilter.post_process()
+        package_list = pkgfilter.get_package_list()
 
         self.percentage(90)
         self._show_package_list(package_list)
@@ -835,7 +835,7 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
                 pkgfilter.add_available(pkgs)
 
         # we couldn't do this when generating the list
-        package_list = pkgfilter.post_process()
+        package_list = pkgfilter.get_package_list()
         self._show_package_list(package_list)
 
     def search_file(self, filters, values):
@@ -883,7 +883,7 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
                     pkgfilter.add_available(pkgs)
 
         # we couldn't do this when generating the list
-        package_list = pkgfilter.post_process()
+        package_list = pkgfilter.get_package_list()
         self._show_package_list(package_list)
 
     def _get_provides_query(self, provides_type, value):
@@ -963,7 +963,7 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
                             pkgfilter.add_available(pkgs)
 
                     # we couldn't do this when generating the list
-                    package_list = pkgfilter.post_process()
+                    package_list = pkgfilter.get_package_list()
                     self._show_package_list(package_list)
 
     def get_categories(self):
@@ -1637,7 +1637,7 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
         if FILTER_NOT_INSTALLED in filters and recursive:
             pkgs = self._get_depends_not_installed (filters, package_ids, recursive)
             pkgfilter.add_available(pkgs)
-            package_list = pkgfilter.post_process()
+            package_list = pkgfilter.get_package_list()
             self._show_package_list(package_list)
             self.percentage(100)
             return
@@ -1691,7 +1691,7 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
                 pkgfilter.add_available([pkg])
 
         # we couldn't do this when generating the list
-        package_list = pkgfilter.post_process()
+        package_list = pkgfilter.get_package_list()
         self._show_package_list(package_list)
         self.percentage(100)
 
@@ -1921,7 +1921,7 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
                             pkgfilter.add_available([pkg])
 
         # we couldn't do this when generating the list
-        package_list = pkgfilter.post_process()
+        package_list = pkgfilter.get_package_list()
         self._show_package_list(package_list)
 
     def install_packages(self, only_trusted, inst_files):
@@ -2808,7 +2808,7 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
                                 break
                 pkgfilter.add_custom(pkg, status)
 
-        package_list = pkgfilter.post_process()
+        package_list = pkgfilter.get_package_list()
         self._show_package_list(package_list)
 
     def repo_enable(self, repoid, enable):
diff --git a/backends/yum/yumFilter.py b/backends/yum/yumFilter.py
index 71b9410..5fec7bd 100644
--- a/backends/yum/yumFilter.py
+++ b/backends/yum/yumFilter.py
@@ -129,11 +129,18 @@ class YumFilter(PackagekitFilter):
 
         return self.package_list
 
-    def _pkg_get_unique(self, pkg):
-        '''
-        Return a unique string for the package
-        '''
-        return "%s-%s:%s-%s.%s" % (pkg.name, pkg.epoch, pkg.version, pkg.release, pkg.arch)
+    def _pkg_compare(self, pkg1, pkg2):
+        '''
+        Returns a version comparison of the packages
+        '''
+        if pkg1.name != pkg2.name:
+            return -2
+        if pkg1.arch != pkg2.arch:
+            return -2
+        evr1 = (pkg1.epoch, pkg1.version, pkg1.release.split('.')[0])
+        evr2 = (pkg2.epoch, pkg2.version, pkg2.release.split('.')[0])
+        rc = rpmUtils.miscutils.compareEVR(evr1, evr2)
+        return rc
 
     def _pkg_get_name(self, pkg):
         '''
commit 3d740a67ba48c65bc6711bb035a96d6344925941
Author: Richard Hughes <richard at hughsie.com>
Date:   Wed Mar 30 18:00:49 2011 +0100

    Do not allow backends to output duplicate older packages when searching with newest
    
    Python backends should implement _pkg_compare() rather than _pkg_get_unique() and use
    fliter.get_package_list() rather than using filter.post_process() directly.

diff --git a/lib/python/packagekit/filter.py b/lib/python/packagekit/filter.py
index f247526..0eedd15 100644
--- a/lib/python/packagekit/filter.py
+++ b/lib/python/packagekit/filter.py
@@ -33,33 +33,21 @@ class PackagekitFilter(object, PackagekitPackage):
     def add_installed(self, pkgs):
         ''' add a list of packages that are already installed '''
         for pkg in pkgs:
-            if self.pre_process(pkg):
-                self.package_list.append((pkg, INFO_INSTALLED))
-            name = self._pkg_get_unique(pkg)
-            self.installed_unique[name] = pkg
+            self.package_list.append((pkg, INFO_INSTALLED))
 
     def add_available(self, pkgs):
         ''' add a list of packages that are available '''
         for pkg in pkgs:
-            name = self._pkg_get_unique(pkg)
-            if not self.installed_unique.has_key(name):
-                if self.pre_process(pkg):
-                    self.package_list.append((pkg, INFO_AVAILABLE))
+            self.package_list.append((pkg, INFO_AVAILABLE))
 
     def add_custom(self, pkg, info):
         ''' add a custom packages indervidually '''
-        name = self._pkg_get_unique(pkg)
-        if not self.installed_unique.has_key(name):
-            if self.pre_process(pkg):
-                self.package_list.append((pkg, info))
+        self.package_list.append((pkg, info))
 
-    def pre_process(self, pkg):
+    def _filter_base(self, pkg):
         ''' do extra filtering (gui, devel etc) '''
         for flt in self.fltlist:
-            if flt in (FILTER_INSTALLED, FILTER_NOT_INSTALLED):
-                if not self._do_installed_filtering(flt, pkg):
-                    return False
-            elif flt in (FILTER_GUI, FILTER_NOT_GUI):
+            if flt in (FILTER_GUI, FILTER_NOT_GUI):
                 if not self._do_gui_filtering(flt, pkg):
                     return False
             elif flt in (FILTER_DEVELOPMENT, FILTER_NOT_DEVELOPMENT):
@@ -73,6 +61,60 @@ class PackagekitFilter(object, PackagekitPackage):
                     return False
         return True
 
+    def _filter_installed(self, pkg):
+        ''' do extra filtering (gui, devel etc) '''
+        for flt in self.fltlist:
+            if flt in (FILTER_INSTALLED, FILTER_NOT_INSTALLED):
+                if not self._do_installed_filtering(flt, pkg):
+                    return False
+        return True
+
+    def get_package_list(self):
+        '''
+        do filtering we couldn't do when generating the list
+        '''
+
+        # filter common things here like architecture
+        # NOTE: we can't do installed and ~installed here as we need
+        # this data for the newest and downgrade checks below
+        package_list = self.package_list
+        self.package_list = []
+        for pkg, state in package_list:
+            if self._filter_base(pkg):
+                self.package_list.append((pkg, state))
+
+        # check there are not available versions in the package list
+        # that are older than the installed version
+        package_list = self.package_list
+        self.package_list = []
+        for pkg, state in package_list:
+
+            add = True;
+            if state is INFO_AVAILABLE:
+                for pkg_tmp, state_tmp in self.package_list:
+                    if state_tmp is not INFO_INSTALLED:
+                        continue
+                    rc = self._pkg_compare(pkg, pkg_tmp)
+
+                    # don't add if the same as the installed package
+                    # or a downgrade to the existing installed package
+                    if rc == 0 or rc == -1:
+                        add = False
+                        break
+
+            if add:
+                self.package_list.append((pkg, state))
+
+        # filter installed state last
+        package_list = self.package_list
+        self.package_list = []
+        for pkg, state in package_list:
+            if self._filter_installed(pkg):
+                self.package_list.append((pkg, state))
+
+        # do the backend specific filtering
+        return self.post_process()
+
     def post_process(self):
         '''
         do filtering we couldn't do when generating the list
@@ -80,12 +122,17 @@ class PackagekitFilter(object, PackagekitPackage):
         '''
         return self.package_list
 
-    def _pkg_get_unique(self, pkg):
+    def _pkg_compare(self, pkg1, pkg2):
         '''
-        Return a unique string for the package
+        Returns a version comparison of the packages, where:
+        -2 : pkg1 not comparable with pkg2
+        -1 : pkg2 is newer than pkg1
+         0 : pkg1 == pkg2
+         1 : pkg1 is newer than pkg2
+         2 : not implemented
         Needed to be implemented in a sub class
         '''
-        return None
+        return 2
 
     def _pkg_get_name(self, pkg):
         '''
commit f8238c9ea2c6b2b7bc09c15cc6b80346a9789546
Author: Daniel Nicoletti <dantti85-pk at yahoo.com.br>
Date:   Wed Mar 30 13:22:13 2011 -0300

    Add storeInCache parameter to downloadPackages to cover new API

diff --git a/lib/packagekit-qt/src/client.cpp b/lib/packagekit-qt/src/client.cpp
index 5fe796e..fa263f8 100644
--- a/lib/packagekit-qt/src/client.cpp
+++ b/lib/packagekit-qt/src/client.cpp
@@ -292,14 +292,14 @@ Transaction* Client::acceptEula(EulaInfo info)
 	RUN_TRANSACTION(acceptEula(info))
 }
 
-Transaction* Client::downloadPackages(const QList<QSharedPointer<Package> >& packages)
+Transaction* Client::downloadPackages(const QList<QSharedPointer<Package> > &packages, bool storeInCache)
 {
-	RUN_TRANSACTION(downloadPackages(packages))
+    RUN_TRANSACTION(downloadPackages(packages, storeInCache))
 }
 
-Transaction* Client::downloadPackages(QSharedPointer<Package> package)
+Transaction* Client::downloadPackages(QSharedPointer<Package> package, bool storeInCache)
 {
-	return downloadPackages(QList<QSharedPointer<Package> >() << package);
+    return downloadPackages(QList<QSharedPointer<Package> >() << package, storeInCache);
 }
 
 Transaction* Client::getDepends(const QList<QSharedPointer<Package> >& packages, Enum::Filters filters, bool recursive)
diff --git a/lib/packagekit-qt/src/client.h b/lib/packagekit-qt/src/client.h
index d8fd964..c3de25c 100644
--- a/lib/packagekit-qt/src/client.h
+++ b/lib/packagekit-qt/src/client.h
@@ -310,17 +310,18 @@ public:
 	 */
 	Transaction* Q_DECL_DEPRECATED acceptEula(EulaInfo info);
 
-	/**
+    /**
      * DEPRECATED
-	 * Download the given \p packages to a temp dir
-	 */
-	Transaction* Q_DECL_DEPRECATED downloadPackages(const QList<QSharedPointer<Package> >& packages);
+     * Download the given \p packages to a temp dir, if \p storeInCache is true
+     * the download will be stored in the package manager cache
+     */
+    Transaction* Q_DECL_DEPRECATED downloadPackages(const QList<QSharedPointer<Package> > &packages, bool storeInCache = false);
 
-	/**
+    /**
      * DEPRECATED
-	 * This is a convenience function
-	 */
-	Transaction* Q_DECL_DEPRECATED downloadPackages(QSharedPointer<Package> package);
+     * This is a convenience function
+     */
+    Transaction* Q_DECL_DEPRECATED downloadPackages(QSharedPointer<Package> package, bool storeInCache = false);
 
 	/**
      * DEPRECATED
diff --git a/lib/packagekit-qt/src/transaction.cpp b/lib/packagekit-qt/src/transaction.cpp
index c08d638..a7d1b9f 100644
--- a/lib/packagekit-qt/src/transaction.cpp
+++ b/lib/packagekit-qt/src/transaction.cpp
@@ -333,14 +333,14 @@ void Transaction::acceptEula(const Client::EulaInfo &info)
     RUN_TRANSACTION(AcceptEula(info.id))
 }
 
-void Transaction::downloadPackages(const QList<QSharedPointer<Package> > &packages)
+void Transaction::downloadPackages(const QList<QSharedPointer<Package> > &packages, bool storeInCache)
 {
-    RUN_TRANSACTION(DownloadPackages(Util::packageListToPids(packages)))
+    RUN_TRANSACTION(DownloadPackages(storeInCache, Util::packageListToPids(packages)))
 }
 
-void Transaction::downloadPackages(const QSharedPointer<Package> &package)
+void Transaction::downloadPackages(const QSharedPointer<Package> &package, bool storeInCache)
 {
-    downloadPackages(QList<QSharedPointer<Package> >() << package);
+    downloadPackages(QList<QSharedPointer<Package> >() << package, storeInCache);
 }
 
 void Transaction::getCategories()
diff --git a/lib/packagekit-qt/src/transaction.h b/lib/packagekit-qt/src/transaction.h
index 00d88fa..b49b517 100644
--- a/lib/packagekit-qt/src/transaction.h
+++ b/lib/packagekit-qt/src/transaction.h
@@ -235,14 +235,15 @@ public:
     void acceptEula(const Client::EulaInfo &info);
 
     /**
-     * Download the given \p packages to a temp dir
+     * Download the given \p packages to a temp dir, if \p storeInCache is true
+     * the download will be stored in the package manager cache
      */
-    void downloadPackages(const QList<QSharedPointer<Package> > &packages);
+    void downloadPackages(const QList<QSharedPointer<Package> > &packages, bool storeInCache = false);
 
     /**
      * This is a convenience function
      */
-    void downloadPackages(const QSharedPointer<Package> &package);
+    void downloadPackages(const QSharedPointer<Package> &package, bool storeInCache = false);
 
     /**
      * Returns the collection categories
commit 9a315cc5263ca1bae9f66fc62f19f39a9e76c905
Author: Richard Hughes <richard at hughsie.com>
Date:   Wed Mar 30 14:03:03 2011 +0100

    yum: fix DownloadPackages to save to the system cache if there is no directory passed to it

diff --git a/backends/yum/yumBackend.py b/backends/yum/yumBackend.py
index c9dcd96..b815570 100755
--- a/backends/yum/yumBackend.py
+++ b/backends/yum/yumBackend.py
@@ -1113,17 +1113,21 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
             except Exception, e:
                 self.error(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
             remote = pkg_download.returnSimple('relativepath')
-            local = os.path.basename(remote)
-            if not os.path.exists(directory):
-                self.error(ERROR_PACKAGE_DOWNLOAD_FAILED, "No destination directory exists", exit=False)
-                return
-            local = os.path.join(directory, local)
-            if (os.path.exists(local) and os.path.getsize(local) == int(pkg_download.returnSimple('packagesize'))):
-                self.error(ERROR_PACKAGE_DOWNLOAD_FAILED, "Package already exists as %s" % local, exit=False)
-                return
+            if directory:
+                local = os.path.basename(remote)
+                if not os.path.exists(directory):
+                    self.error(ERROR_PACKAGE_DOWNLOAD_FAILED, "No destination directory exists", exit=False)
+                    return
+                local = os.path.join(directory, local)
+                if (os.path.exists(local) and os.path.getsize(local) == int(pkg_download.returnSimple('packagesize'))):
+                    self.error(ERROR_PACKAGE_DOWNLOAD_FAILED, "Package already exists as %s" % local, exit=False)
+                    return
             # Disable cache otherwise things won't download
             repo.cache = 0
-            pkg_download.localpath = local #Hack:To set the localpath we want
+
+            #  set the localpath we want
+            if directory:
+                pkg_download.localpath = local
             try:
                 path = repo.getPackage(pkg_download)
 
commit c1ee03fb4c29922acd69d33e8cbe5aa85aad8d30
Author: Richard Hughes <richard at hughsie.com>
Date:   Wed Mar 30 12:56:20 2011 +0100

    Add a 'store_in_cache' attribute to the DownloadPackages method
    
    This is so we know whether to copy them into a new directory, or leave them in
    the package manager cache.
    
    Note: this does not change the API of the client libraries as we can test if the
    download directory is not NULL and set the boolean value accordingly.

diff --git a/lib/packagekit-glib2/pk-client.c b/lib/packagekit-glib2/pk-client.c
index cea899f..b9156e6 100644
--- a/lib/packagekit-glib2/pk-client.c
+++ b/lib/packagekit-glib2/pk-client.c
@@ -1622,6 +1622,7 @@ pk_client_set_hints_cb (DBusGProxy *proxy, DBusGProxyCall *call, PkClientState *
 	} else if (state->role == PK_ROLE_ENUM_DOWNLOAD_PACKAGES) {
 		state->call = dbus_g_proxy_begin_call (state->proxy, "DownloadPackages",
 						       (DBusGProxyCallNotify) pk_client_method_cb, state, NULL,
+						       G_TYPE_BOOLEAN, (state->directory == NULL),
 						       G_TYPE_STRV, state->package_ids,
 						       G_TYPE_INVALID);
 		g_object_set (state->results, "inputs", g_strv_length (state->package_ids), NULL);
diff --git a/src/org.freedesktop.PackageKit.Transaction.xml b/src/org.freedesktop.PackageKit.Transaction.xml
index da08713..019bbed 100644
--- a/src/org.freedesktop.PackageKit.Transaction.xml
+++ b/src/org.freedesktop.PackageKit.Transaction.xml
@@ -259,6 +259,22 @@
           </doc:para>
         </doc:description>
       </doc:doc>
+      <arg type="b" name="store_in_cache" direction="in">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              If the downloaded files should be stored in the system
+              package cache rather than copied into a newly created
+              directory.
+            </doc:para>
+            <doc:para>
+              See <doc:ulink url="http://packagekit.org/gtk-doc/introduction-ideas-transactions.html">
+              the developer docs</doc:ulink> for more details on how
+              this is supposed to work.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
       <arg type="as" name="package_ids" direction="in">
         <doc:doc>
           <doc:summary>
diff --git a/src/pk-transaction.c b/src/pk-transaction.c
index e60b176..80c2450 100644
--- a/src/pk-transaction.c
+++ b/src/pk-transaction.c
@@ -551,7 +551,8 @@ pk_transaction_files_cb (PkBackend *backend, PkFiles *item, PkTransaction *trans
 		      NULL);
 
 	/* ensure the files have the correct prefix */
-	if (transaction->priv->role == PK_ROLE_ENUM_DOWNLOAD_PACKAGES) {
+	if (transaction->priv->role == PK_ROLE_ENUM_DOWNLOAD_PACKAGES &&
+	    transaction->priv->cached_directory != NULL) {
 		for (i=0; files[i] != NULL; i++) {
 			if (!g_str_has_prefix (files[i], transaction->priv->cached_directory)) {
 				pk_backend_message (transaction->priv->backend, PK_MESSAGE_ENUM_BACKEND_ERROR,
@@ -2960,7 +2961,10 @@ out:
  * pk_transaction_download_packages:
  **/
 void
-pk_transaction_download_packages (PkTransaction *transaction, gchar **package_ids, DBusGMethodInvocation *context)
+pk_transaction_download_packages (PkTransaction *transaction,
+				  gboolean store_in_cache,
+				  gchar **package_ids,
+				  DBusGMethodInvocation *context)
 {
 	gboolean ret;
 	GError *error = NULL;
@@ -3015,15 +3019,17 @@ pk_transaction_download_packages (PkTransaction *transaction, gchar **package_id
 	}
 
 	/* create cache directory */
-	directory = g_build_filename (LOCALSTATEDIR, "cache", "PackageKit",
-				     "downloads", transaction->priv->tid, NULL);
-	/* rwxrwxr-x */
-	retval = g_mkdir (directory, 0775);
-	if (retval != 0) {
-		error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_DENIED,
-				     "cannot create %s", directory);
-		pk_transaction_dbus_return_error (context, error);
-		goto out;
+	if (!store_in_cache) {
+		directory = g_build_filename (LOCALSTATEDIR, "cache", "PackageKit",
+					     "downloads", transaction->priv->tid, NULL);
+		/* rwxrwxr-x */
+		retval = g_mkdir (directory, 0775);
+		if (retval != 0) {
+			error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_DENIED,
+					     "cannot create %s", directory);
+			pk_transaction_dbus_return_error (context, error);
+			goto out;
+		}
 	}
 
 	/* save so we can run later */
diff --git a/src/pk-transaction.h b/src/pk-transaction.h
index 4afbaca..a307fc4 100644
--- a/src/pk-transaction.h
+++ b/src/pk-transaction.h
@@ -120,6 +120,7 @@ void		 pk_transaction_accept_eula			(PkTransaction	*transaction,
 void		 pk_transaction_cancel				(PkTransaction	*transaction,
 								 DBusGMethodInvocation *context);
 void		 pk_transaction_download_packages		(PkTransaction  *transaction,
+								 gboolean	 copy_files,
 								 gchar		**package_ids,
 								 DBusGMethodInvocation *context);
 void		 pk_transaction_get_categories			(PkTransaction	*transaction,
commit c50bc7fe87a0d7c929c10e6a858bebf971fa1399
Author: Jesse Zhang <zh.jesse at gmail.com>
Date:   Tue Mar 29 21:56:31 2011 +0800

    conary: remove class scope variable
    
    Make logic clearer.

diff --git a/backends/conary/conaryBackend.py b/backends/conary/conaryBackend.py
index 385f6cb..e889ac9 100755
--- a/backends/conary/conaryBackend.py
+++ b/backends/conary/conaryBackend.py
@@ -87,23 +87,10 @@ def _format_list(lst):
         return ""
 #}}}
 class PackageKitConaryBackend(PackageKitBaseBackend):
-    # Packages there require a reboot
+    # Packages that require a reboot
     rebootpkgs = ("kernel", "glibc", "hal", "dbus")
     restartpkgs = ("PackageKit","gnome-packagekit")
 
-    packages = []
-    #{{{   Packages structure
-    """
-    packages = {
-        pkg_name: {
-            'trove': ( name,version,flavor)
-            'metadata': pkgDict,
-        }
-    }
-
-    """
-    #}}}
-    #{{{ Init
     def __init__(self, args):
         PackageKitBaseBackend.__init__(self, args)
 
@@ -139,7 +126,6 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         return installed
 
     def get_package_id_new(self,pkg):
-
         name,version,flavor = pkg.get("trove")
         metadata = pkg.get("metadata")
         data = ""
@@ -178,8 +164,8 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         troves = self.conary.query(name) or self.conary.repo_query(name)
         return troves
 
-    def _search_package( self, name ):
-        for pkg in self.packages:
+    def _search_package(self, pkg_list, name):
+        for pkg in pkg_list:
             if pkg["trove"][0] == name:
                 return pkg
         return None
@@ -190,9 +176,6 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
                 metadata = pkgDict
             )
 
-    def _add_package(self, trove, pkgDict):
-        self.packages.append( self._convert_package(trove, pkgDict) )
-
     def _do_search(self, filters, searchlist, where = "name"):
         """
          searchlist(str)ist as the package for search like
@@ -204,21 +187,16 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
             self.error(ERROR_UNKNOWN, "DORK---- search where not found")
 
         log.debug((searchlist, where))
-        log.info("||||||||||||||||||||||||||||searching  on cache... ")
         pkgList = self.xmlcache.search(searchlist, where )
-        log.info("|||||||||||||||||||||||||||||1end searching on cache... ")
 
         if len(pkgList) > 0 :
-            log.info("FOUND (%s) elements " % len(pkgList) )
-            for pkgDict in pkgList:
-                self._add_package( ( pkgDict["name"], None, None), pkgDict )
+            to_resolve = [self._convert_package((p["name"], None, None), p)
+                    for p in pkgList]
 
-            self._resolve_list( fltlist  )
+            self._resolve_list(to_resolve, fltlist)
         else:
             log.info("NOT FOUND %s " % searchlist )
             self.message(MESSAGE_COULD_NOT_FIND_PACKAGE,"search not found")
-            #self.error(ERROR_INTERNAL_ERROR, "packagenotfound")
-
 
     def _build_update_job(self, applyList, cache=True):
         '''Build an UpdateJob from applyList
@@ -272,21 +250,19 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
                 applyList.append((name, (None, None), (version, flavor), True))
         return self._build_update_job(applyList)
 
-    def _resolve_list(self, filters):
-        log.info("======= _resolve_list =====")
-
+    def _resolve_list(self, pkg_list, filters):
         # 1. Resolve through local db
 
-        list_trove_all = [p.get("trove") for p in self.packages]
+        list_trove_all = [p.get("trove") for p in pkg_list]
         list_installed = []
         list_not_installed = []
 
         if FILTER_NOT_INSTALLED in filters:
-            list_not_installed = self.packages[:]
+            list_not_installed = pkg_list[:]
         else:
             db_trove_list = self.client.db.findTroves(None, list_trove_all, allowMissing=True)
             for trove in list_trove_all:
-                pkg = self._search_package(trove[0])
+                pkg = self._search_package(pkg_list, trove[0])
                 if trove in db_trove_list:
                     # A package may have different versions/flavors installed.
                     for t in db_trove_list[trove]:
@@ -320,7 +296,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
                 if trove in repo_trove_list:
                     # only use the first trove in the list
                     t = repo_trove_list[trove][0]
-                    pkg = self._search_package(t[0])
+                    pkg = self._search_package(pkg_list, t[0])
                     pkg["trove"] = t
                     list_available.append(pkg)
             pkgFilter.add_available( list_available )
@@ -337,10 +313,8 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         self.allow_cancel(True)
         self.percentage(None)
         self.status(STATUS_INFO)
-        log.info("filters: %s package:%s " % (filters, package))
 
         pkg_dict = self.xmlcache.resolve( package[0] )
-        log.info(pkg_dict)
         if pkg_dict is None:
             return None
 
@@ -373,15 +347,9 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
 	log.info("end resolve ...................")
 
     def _show_package_list(self, lst):
+        """@lst(list(tuple) = [ ( troveTuple, status ) ]
         """
-            HOW its showed on packageKit
-            @lst(list(tuple) = [ ( troveTuple, status ) ]
-        """
-        for (pos, ( pkg, status) ) in enumerate(lst):
-            # take the basic info
-           # name ,version,flavor = pkg.get("trove")
-            # get the string id from packagekit
-            #log.info(pkg)
+        for pkg, status in lst:
             package_id = self.get_package_id_new(pkg)
 
             # split the list for get Determine info
@@ -391,9 +359,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
 
             summary[3] = pkg.get("metadata").get("label")
             pkg_id = ";".join(summary)
-            log.info("====== show the package (%s) %s- %s" %( pos, name, status) )
             self.package(package_id, status, meta )
-        self.packages = []
 
     @ExceptionHandler
     def search_group(self, options, searchlist):
commit 445c15a900e00520a642929b43a32e1e3705f0db
Author: Jesse Zhang <zh.jesse at gmail.com>
Date:   Tue Mar 29 17:41:25 2011 +0800

    conary: really implement simulate* and don't rely on conary --test

diff --git a/backends/conary/conaryBackend.py b/backends/conary/conaryBackend.py
index 04f4c4f..385f6cb 100755
--- a/backends/conary/conaryBackend.py
+++ b/backends/conary/conaryBackend.py
@@ -252,11 +252,11 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
 
         return updJob, suggMap
 
-    def _apply_update_job(self, updJob, simulate=False):
+    def _apply_update_job(self, updJob):
         self.allow_cancel(False)
         try:
             # TODO we should really handle the restart case here
-            restartDir = self.client.applyUpdateJob(updJob, test=simulate)
+            restartDir = self.client.applyUpdateJob(updJob)
         except errors.InternalConaryError:
             self.error(ERROR_NO_PACKAGES_TO_UPDATE,"get-updates first and then update sytem")
         except trove.TroveIntegrityError:
@@ -573,7 +573,11 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
 
         self.status(STATUS_INSTALL)
         updJob, suggMap = self._get_package_update(pkglist)
-        self._apply_update_job(updJob, simulate)
+        if not simulate:
+            self._apply_update_job(updJob)
+        else:
+            r = self._parse_update_jobs(updJob)
+            self._display_update_jobs(r)
 
     @ExceptionHandler
     def remove_packages(self, allowDeps, autoremove, package_ids, simulate=False):
@@ -599,7 +603,11 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
 
         self.status(STATUS_REMOVE)
         updJob, suggMap = self._get_package_update(pkglist)
-        self._apply_update_job(updJob, simulate)
+        if not simulate:
+            self._apply_update_job(updJob)
+        else:
+            r = self._parse_update_jobs(updJob)
+            self._display_update_jobs(r)
 
         self._reset_conary_callback()
 
@@ -701,7 +709,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
 
         log.info("========== get_details =============")
         for package_id in package_ids:
-            name,version,arch,data = get_package_from_id(package_id)
+            name,version,arch,data = split_package_id(package_id)
             pkgDict = self.xmlcache.resolve(name)
             if name and pkgDict:
                 longDesc = ""
commit 0f86471a1a609132b45b62305eea7a96c53e2801
Author: Jesse Zhang <zh.jesse at gmail.com>
Date:   Tue Mar 29 17:33:38 2011 +0800

    conary: process packages update/erase in a single job
    
    Don't process N packages in N jobs.

diff --git a/backends/conary/conaryBackend.py b/backends/conary/conaryBackend.py
index 14adbd0..04f4c4f 100755
--- a/backends/conary/conaryBackend.py
+++ b/backends/conary/conaryBackend.py
@@ -263,11 +263,13 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
             self.error(ERROR_NO_PACKAGES_TO_UPDATE,"run get-updates again")
         return updJob
 
-    def _get_package_update(self, name, version, flavor):
-        if name.startswith('-'):
-            applyList = [(name, (version, flavor), (None, None), False)]
-        else:
-            applyList = [(name, (None, None), (version, flavor), True)]
+    def _get_package_update(self, pkg_list):
+        applyList = []
+        for name, version, flavor in pkg_list:
+            if name.startswith('-'):
+                applyList.append((name, (version, flavor), (None, None), False))
+            else:
+                applyList.append((name, (None, None), (version, flavor), True))
         return self._build_update_job(applyList)
 
     def _resolve_list(self, filters):
@@ -474,8 +476,8 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
                 self.error(ERROR_PACKAGE_ALREADY_INSTALLED, 'Package already installed')
 
             else:
-                updJob, suggMap = self._get_package_update(name, version,
-                                                           flavor)
+                updJob, suggMap = self._get_package_update([
+                    (name, version, flavor)])
                 for what, need in suggMap:
                     package_id = self.get_package_id(need[0], need[1], need[2])
                     depInstalled = self.check_installed(need[0])
@@ -559,23 +561,19 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
 
         # FIXME: use only_trusted
 
+        self.allow_cancel(True)
+        self.percentage(0)
+        self.status(STATUS_RUNNING)
+
+        pkglist = []
         for package_id in package_ids:
             name, version, flavor, installed = self._findPackage(package_id)
-            log.info((name, version, flavor, installed ))
-
-            self.allow_cancel(True)
-            self.percentage(0)
-            self.status(STATUS_RUNNING)
-
             if name:
-                """
-                if installed == INFO_INSTALLED:
-                    self.error(ERROR_PACKAGE_ALREADY_INSTALLED,
-                        'Package already installed')
-                """
-                self.status(STATUS_INSTALL)
-                updJob, suggMap = self._get_package_update(name, version, flavor)
-                self._apply_update_job(updJob, simulate)
+                pkglist.append((name, version, flavor))
+
+        self.status(STATUS_INSTALL)
+        updJob, suggMap = self._get_package_update(pkglist)
+        self._apply_update_job(updJob, simulate)
 
     @ExceptionHandler
     def remove_packages(self, allowDeps, autoremove, package_ids, simulate=False):
@@ -586,25 +584,22 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         self.allow_cancel(True)
         self.percentage(0)
         self.status(STATUS_RUNNING)
-        log.info("========== Remove Packages ============ ")
-        log.info( allowDeps )
         self.client.setUpdateCallback(RemoveCallback(self, self.cfg))
-        errors = ""
-        #for package_id in package_ids.split('%'):
+
+        pkglist = []
         for package_id in package_ids:
             name, version, arch,data = split_package_id(package_id)
             troveTuple = self.conary.query(name)
             for name,version,flavor in troveTuple:
                 name = '-%s' % name
-                #self.client.repos.findTrove(self.conary.default_label)
-                self.status(STATUS_REMOVE)
-
                 callback = self.client.getUpdateCallback()
                 if callback.error:
                     self.error(ERROR_DEP_RESOLUTION_FAILED,', '.join(callback.error))
+                pkglist.append((name, version, flavor))
 
-                updJob, suggMap = self._get_package_update(name, version, flavor)
-                self._apply_update_job(updJob, simulate)
+        self.status(STATUS_REMOVE)
+        updJob, suggMap = self._get_package_update(pkglist)
+        self._apply_update_job(updJob, simulate)
 
         self._reset_conary_callback()
 
commit bca698fae727382b6ae71427370b8a13fcc3ce7e
Author: Jesse Zhang <zh.jesse at gmail.com>
Date:   Tue Mar 29 17:20:47 2011 +0800

    conary: remove unnecessary method

diff --git a/backends/conary/conaryBackend.py b/backends/conary/conaryBackend.py
index d2bfeb5..14adbd0 100755
--- a/backends/conary/conaryBackend.py
+++ b/backends/conary/conaryBackend.py
@@ -270,10 +270,6 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
             applyList = [(name, (None, None), (version, flavor), True)]
         return self._build_update_job(applyList)
 
-    def _do_package_update(self, name, version, flavor, simulate):
-        updJob, suggMap = self._get_package_update(name, version, flavor)
-        return self._apply_update_job(updJob, simulate)
-
     def _resolve_list(self, filters):
         log.info("======= _resolve_list =====")
 
@@ -578,8 +574,8 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
                         'Package already installed')
                 """
                 self.status(STATUS_INSTALL)
-                self._do_package_update(name, version, flavor, simulate)
-
+                updJob, suggMap = self._get_package_update(name, version, flavor)
+                self._apply_update_job(updJob, simulate)
 
     @ExceptionHandler
     def remove_packages(self, allowDeps, autoremove, package_ids, simulate=False):
@@ -607,7 +603,9 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
                 if callback.error:
                     self.error(ERROR_DEP_RESOLUTION_FAILED,', '.join(callback.error))
 
-                self._do_package_update(name, version, flavor, simulate)
+                updJob, suggMap = self._get_package_update(name, version, flavor)
+                self._apply_update_job(updJob, simulate)
+
         self._reset_conary_callback()
 
     def _get_metadata(self, package_id, field):
commit 56d79587e0d132bed5f56d9c41b76edf79d726b3
Author: Jesse Zhang <zh.jesse at gmail.com>
Date:   Tue Mar 29 16:57:37 2011 +0800

    conary: reduce code duplication between get_updates and update_system
    
    Extract common code into methods

diff --git a/backends/conary/XMLCache.py b/backends/conary/XMLCache.py
index 7047a8f..bd8510c 100644
--- a/backends/conary/XMLCache.py
+++ b/backends/conary/XMLCache.py
@@ -277,8 +277,7 @@ class XMLCache:
         r = []
         for repo in self.repos:
             res = repo.resolve_list( search_list )
-            for i in res:
-                r.append( i)
+            r.extend(res)
         return self.list_set( r )
 
     def list_set(self, repositories_result ):
diff --git a/backends/conary/conaryBackend.py b/backends/conary/conaryBackend.py
index 6d58bf7..d2bfeb5 100755
--- a/backends/conary/conaryBackend.py
+++ b/backends/conary/conaryBackend.py
@@ -252,7 +252,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
 
         return updJob, suggMap
 
-    def _do_update(self, updJob, simulate=False):
+    def _apply_update_job(self, updJob, simulate=False):
         self.allow_cancel(False)
         try:
             # TODO we should really handle the restart case here
@@ -272,7 +272,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
 
     def _do_package_update(self, name, version, flavor, simulate):
         updJob, suggMap = self._get_package_update(name, version, flavor)
-        return self._do_update(updJob, simulate)
+        return self._apply_update_job(updJob, simulate)
 
     def _resolve_list(self, filters):
         log.info("======= _resolve_list =====")
@@ -528,14 +528,10 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
 
         self.allow_cancel(True)
         self.status(STATUS_UPDATE)
-        self.client.setUpdateCallback( UpdateSystemCallback(self, self.cfg) )
-        updateItems = self.client.fullUpdateItemList()
-        [ log.info(i) for i,ver,flav in updateItems]
-        applyList = [ (x[0], (None, None), x[1:], True) for x in updateItems ]
+        cb = UpdateSystemCallback(self, self.cfg)
+        updJob = self._get_updateall_job(cb)
 
-        updJob, suggMap = self._build_update_job(applyList)
-        jobs = self._do_update(updJob)
-        log.info(jobs)
+        self._apply_update_job(updJob)
         self._reset_conary_callback()
 
 #    @ExceptionHandler
@@ -753,14 +749,6 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         else:
             return INFO_NORMAL
 
-
-    def _get_status(self, notice):
-        if name in self.rebootpkgs:
-            return INFO_SECURITY
-        elif name in self.restartpkgs:
-            return INFO_INSTALLED
-        else:
-            return INFO_NORMAL
     def _get_fits(self, branch, pkg_name):
         if "conary.rpath.com" in branch:
             return "http://issues.rpath.com;rPath Issues Tracker"
@@ -794,57 +782,55 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
             return UPDATE_STATE_UNSTABLE
         else:
             return UPDATE_STATE_STABLE
-    @ExceptionHandler
-    def get_updates(self, filters):
-        self.allow_cancel(True)
-        self.percentage(0)
-        self.status(STATUS_INFO)
 
-        getUpdateC= GetUpdateCallback(self,self.cfg)
-        self.client.setUpdateCallback(getUpdateC)
+    def _get_updateall_job(self, callback):
+        self.client.setUpdateCallback(callback)
 
-        log.info("============== get_updates ========================")
-        log.info("get fullUpdateItemList")
-        updateItems =self.client.fullUpdateItemList()
-#        updateItems = cli.cli.getUpdateItemList()
-        applyList = [ (x[0], (None, None), x[1:], True) for x in updateItems ]
+        updateItems = self.client.fullUpdateItemList()
+        applyList = [(x[0], (None, None), x[1:], True) for x in updateItems]
 
         self.status(STATUS_RUNNING)
         updJob, suggMap = self._build_update_job(applyList)
+        return updJob
 
-        log.info("getting JobLists...........")
+    def _parse_update_jobs(self, updJob):
+        jobs_list = updJob.getJobs()
         r = []
-        for num, job in enumerate(updJob.getJobs()):
-            name = job[0][0]
-
-            # On an erase display the old version/flavor information.
-            version = job[0][2][0]
-            if version is None:
-                version = job[0][1][0]
-
-            flavor = job[0][2][1]
-            if flavor is None:
-                flavor = job[0][1][1]
+        for job in jobs_list:
+            job = job[0][:3]
+            (name, (oldVer, oldFla), (newVer, newFla)) = job
 
             info = self._get_info(name)
-            trove_info = ( ( name,version,flavor ), info)
+            if not newVer:
+                trove_info = ((name, oldVer, oldFla), info)
+            else:
+                trove_info = ((name, newVer, newFla), info)
             r.append(trove_info)
+        return r
 
-        pkg_list = self.xmlcache.resolve_list([ name for (  ( name,version,flavor), info )  in r ])
-        log.info("generate the pkgs ")
+    def _display_update_jobs(self, pkg_list):
+        data = self.xmlcache.resolve_list([name for ((name, version, flavor), info) in pkg_list])
         new_res = []
-        for pkg in pkg_list:
-            for ( trove, info ) in r:
-                #log.info( ( pkg, trove) )
-                name,version,flav = trove
+        for pkg in data:
+            for (trove, info) in pkg_list:
+                name, version, flav = trove
                 if name == pkg["name"]:
-                    npkg = self._convert_package( trove, pkg)
-                    new_res.append( ( npkg, info ) )
-
-        log.info(new_res)
+                    npkg = self._convert_package(trove, pkg)
+                    new_res.append((npkg, info))
 
         self._show_package_list(new_res)
-        log.info("============== end get_updates ========================")
+
+    @ExceptionHandler
+    def get_updates(self, filters):
+        self.allow_cancel(True)
+        self.percentage(0)
+        self.status(STATUS_INFO)
+
+        cb = GetUpdateCallback(self, self.cfg)
+        updJob = self._get_updateall_job(cb)
+        r = self._parse_update_jobs(updJob)
+        self._display_update_jobs(r)
+
         self._reset_conary_callback()
 
     def _findPackage(self, package_id):
commit 7c19db7e6fc32777298f444b3f6ad4f01f7ded6b
Author: Jesse Zhang <zh.jesse at gmail.com>
Date:   Tue Mar 29 16:09:41 2011 +0800

    conary: add a method to reset callback

diff --git a/backends/conary/conaryBackend.py b/backends/conary/conaryBackend.py
index 820a5da..6d58bf7 100755
--- a/backends/conary/conaryBackend.py
+++ b/backends/conary/conaryBackend.py
@@ -113,10 +113,11 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         self.client = conary.cli
         self.conary = conary
         self.callback = UpdateCallback(self, self.cfg)
-        self.client.setUpdateCallback(self.callback)
         self.xmlcache = XMLCache()
         self.job_cache = UpdateJobCache()
 
+        self._reset_conary_callback()
+
     def _freezeData(self, version, flavor):
         frzVersion = version.freeze()
         frzFlavor = flavor.freeze()
@@ -517,6 +518,9 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
 
             self.files(package_id, ';'.join(files))
 
+    def _reset_conary_callback(self):
+        self.client.setUpdateCallback(self.callback )
+
     @ExceptionHandler
     def update_system(self, only_trusted):
 
@@ -532,7 +536,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         updJob, suggMap = self._build_update_job(applyList)
         jobs = self._do_update(updJob)
         log.info(jobs)
-        self.client.setUpdateCallback(self.callback )
+        self._reset_conary_callback()
 
 #    @ExceptionHandler
     def refresh_cache(self, force):
@@ -608,7 +612,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
                     self.error(ERROR_DEP_RESOLUTION_FAILED,', '.join(callback.error))
 
                 self._do_package_update(name, version, flavor, simulate)
-        self.client.setUpdateCallback(self.callback)
+        self._reset_conary_callback()
 
     def _get_metadata(self, package_id, field):
         '''
@@ -841,7 +845,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
 
         self._show_package_list(new_res)
         log.info("============== end get_updates ========================")
-        self.client.setUpdateCallback(self.callback)
+        self._reset_conary_callback()
 
     def _findPackage(self, package_id):
         '''
commit a55666118b36b63e62689fc2aad62a69c5f9dd20
Author: Jesse Zhang <zh.jesse at gmail.com>
Date:   Tue Mar 29 15:57:37 2011 +0800

    conary: move job caching methods to UpdateJobCache
    
    Split job caching methods out from XMLCache

diff --git a/backends/conary/XMLCache.py b/backends/conary/XMLCache.py
index e111f3d..7047a8f 100644
--- a/backends/conary/XMLCache.py
+++ b/backends/conary/XMLCache.py
@@ -224,7 +224,6 @@ class XMLCache:
 
     repos = []
     dbPath = '/var/cache/conary/'
-    jobPath = dbPath + 'jobs'
     xml_path =  dbPath + "xmlrepo/"
 
     def __init__(self):
@@ -234,37 +233,12 @@ class XMLCache:
 
         if not os.path.isdir(self.dbPath):
             os.makedirs(self.dbPath)
-        if not os.path.isdir(self.jobPath):
-            os.mkdir(self.jobPath)
         if not os.path.isdir( self.xml_path ):
             os.makedirs(self.xml_path )
 
         for label in self.labels:
             self.repos.append(XMLRepo(label, self.xml_path, self.pk))
 
-    def _getJobCachePath(self, applyList):
-        applyStr = '\0'.join(['%s=%s[%s]--%s[%s]%s' % (x[0], x[1][0], x[1][1], x[2][0], x[2][1], x[3]) for x in applyList])
-        return self.jobPath + '/' + sha1helper.sha1ToString(sha1helper.sha1String(applyStr))
-
-    def checkCachedUpdateJob(self, applyList):
-        jobPath = self._getJobCachePath(applyList)
-        log.info("CheckjobPath %s" % jobPath)
-        if os.path.exists(jobPath):
-            return jobPath
-
-    def cacheUpdateJob(self, applyList, updJob):
-        jobPath = self._getJobCachePath(applyList)
-        log.info("jobPath %s" % jobPath)
-        if os.path.exists(jobPath):
-            log.info("deleting the JobPath %s "% jobPath)
-            util.rmtree(jobPath)
-            log.info("end deleting the JobPath %s "% jobPath)
-        log.info("making the logPath ")
-        os.mkdir(jobPath)
-        log.info("freeze JobPath")
-        updJob.freeze(jobPath)
-        log.info("end freeze JobPath")
-
     def convertTroveToDict(self, troveTupleList):
         mList = []
         for troveTuple in troveTupleList:
@@ -361,6 +335,38 @@ class XMLCache:
         categories.sort()
         return set( categories )
 
+class UpdateJobCache:
+    '''A cache to store (freeze) conary UpdateJobs.
+
+    The key is an applyList which can be used to build UpdateJobs.
+    '''
+
+    def __init__(self, jobPath='/var/cache/conary/jobs/', createJobPath=True):
+        if createJobPath and not os.path.isdir(jobPath):
+            os.mkdir(jobPath)
+        self._jobPath = jobPath
+
+    def _getJobCachePath(self, applyList):
+        applyStr = '\0'.join(['%s=%s[%s]--%s[%s]%s' % (
+            x[0], x[1][0], x[1][1], x[2][0], x[2][1], x[3]) for x in applyList])
+        return '%s/%s' % (self._jobPath,
+                sha1helper.sha1ToString(sha1helper.sha1String(applyStr)))
+
+    def getCachedUpdateJob(self, applyList):
+        '''Retrieve a previously cached job
+        '''
+        jobPath = self._getJobCachePath(applyList)
+        if os.path.exists(jobPath):
+            return jobPath
+
+    def cacheUpdateJob(self, applyList, updJob):
+        '''Cache a conary UpdateJob
+        '''
+        jobPath = self._getJobCachePath(applyList)
+        if os.path.exists(jobPath):
+            util.rmtree(jobPath)
+        os.mkdir(jobPath)
+        updJob.freeze(jobPath)
 
 if __name__ == '__main__':
   #  print ">>> name"
diff --git a/backends/conary/conaryBackend.py b/backends/conary/conaryBackend.py
index 36386fe..820a5da 100755
--- a/backends/conary/conaryBackend.py
+++ b/backends/conary/conaryBackend.py
@@ -40,7 +40,7 @@ from packagekit.enums import *
 from conaryCallback import UpdateCallback, GetUpdateCallback
 from conaryCallback import RemoveCallback, UpdateSystemCallback
 from conaryFilter import ConaryFilter
-from XMLCache import XMLCache
+from XMLCache import XMLCache, UpdateJobCache
 from pkConaryLog import log
 from conarypk import ConaryPk, get_arch
 
@@ -115,6 +115,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         self.callback = UpdateCallback(self, self.cfg)
         self.client.setUpdateCallback(self.callback)
         self.xmlcache = XMLCache()
+        self.job_cache = UpdateJobCache()
 
     def _freezeData(self, version, flavor):
         frzVersion = version.freeze()
@@ -224,7 +225,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         self.allow_cancel(False)
         updJob = self.client.newUpdateJob()
         suggMap = {}
-        jobPath = self.xmlcache.checkCachedUpdateJob(applyList)
+        jobPath = self.job_cache.getCachedUpdateJob(applyList)
         if cache and jobPath:
             try:
                 log.info("Using previously cached update job at %s" % (jobPath,))
@@ -238,7 +239,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
                 suggMap = self.client.prepareUpdateJob(updJob, applyList)
                 log.info("Successfully created a new update job")
                 if cache:
-                    self.xmlcache.cacheUpdateJob(applyList, updJob)
+                    self.job_cache.cacheUpdateJob(applyList, updJob)
             except conaryclient.NoNewTrovesError:
                 return updJob, {}
             except conaryclient.DepResolutionFailure as error :
commit 4a22a6cf72574ec15e0a35b45da3dfe40015bc52
Author: Jesse Zhang <zh.jesse at gmail.com>
Date:   Tue Mar 29 15:27:04 2011 +0800

    conary: add a TODO

diff --git a/backends/conary/TODO b/backends/conary/TODO
new file mode 100644
index 0000000..1d3aeb2
--- /dev/null
+++ b/backends/conary/TODO
@@ -0,0 +1,4 @@
+* the XML cache doesn't include all packages (e.g. ubuntu-font-family/automake)
+  - there is probably bugs in the tool ('ticache') that generates the cache.
+* should support system model
+  - the conary-api related code should all be put in conarypk.py
commit 216da925fe9b50720de8459515c004c3ae79d242
Author: Jesse Zhang <zh.jesse at gmail.com>
Date:   Fri Mar 25 16:21:09 2011 +0800

    conary: rename variables to better reflect the return type

diff --git a/backends/conary/conaryBackend.py b/backends/conary/conaryBackend.py
index 4c331b8..36386fe 100755
--- a/backends/conary/conaryBackend.py
+++ b/backends/conary/conaryBackend.py
@@ -173,8 +173,8 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         """
         log.info("=========== get package from package_id ======================")
         name, verString, archString, data = split_package_id(package_id)
-        trove = self.conary.query(name) or self.conary.repo_query(name)
-        return trove
+        troves = self.conary.query(name) or self.conary.repo_query(name)
+        return troves
 
     def _search_package( self, name ):
         for pkg in self.packages:
@@ -626,6 +626,8 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         self.allow_cancel(True)
         self.percentage(None)
         self.status(STATUS_QUERY)
+        # XXX the usage of self.get_package_from_id is wrong here. The return
+        # value is a list.
         n, v, f = self.get_package_from_id(package_id)
         trvList = self.client.repos.findTrove(self.cfg.installLabelPath,
                                      (n, v, f),
commit 2750b6dc86f521ce1b97ddfbaf76b95f8fd01bd9
Author: Jesse Zhang <zh.jesse at gmail.com>
Date:   Fri Mar 25 15:29:18 2011 +0800

    conary: move get_arch to conarypk.py
    
    Moving conary api away from conaryBackend.py

diff --git a/backends/conary/conaryBackend.py b/backends/conary/conaryBackend.py
index ae46f9f..4c331b8 100755
--- a/backends/conary/conaryBackend.py
+++ b/backends/conary/conaryBackend.py
@@ -24,26 +24,26 @@
 import sys
 import os
 import re
-from conary import errors
-from conary.deps import deps
+
 from conary import dbstore, queryrep, versions, updatecmd
-from conary.local import database
+from conary import errors, conarycfg, conaryclient
 from conary import trove
 from conary.conaryclient import cmdline
+from conary.deps import deps
 from conary.lib import util
+from conary.local import database
 
 from packagekit.backend import get_package_id, split_package_id, \
     PackageKitBaseBackend
+from packagekit.enums import *
+
 from conaryCallback import UpdateCallback, GetUpdateCallback
 from conaryCallback import RemoveCallback, UpdateSystemCallback
-from conaryFilter import *
+from conaryFilter import ConaryFilter
 from XMLCache import XMLCache
-from conaryInit import *
+from pkConaryLog import log
+from conarypk import ConaryPk, get_arch
 
-from conary import conarycfg, conaryclient
-from conarypk import ConaryPk
-from pkConaryLog import *
-#}}}
 sys.excepthook = util.genExcepthook()
 #{{{ FUNCTIONS
 def ExceptionHandler(func):
@@ -67,17 +67,6 @@ def ExceptionHandler(func):
             self.error(ERROR_UNKNOWN, display(e), exit=True)
     return wrapper
 
-def _get_arch( flavor ):
-    if flavor is not None :
-        isdep = deps.InstructionSetDependency
-        arches = [ x.name for x in flavor.iterDepsByClass(isdep) ]
-        if not arches:
-            arches = [ 'noarch' ]
-        return ','.join(arches)
-    else:
-        return None
-
-
 def _format_str(str):
     """
     Convert a multi line string to a list separated by ';'
@@ -137,9 +126,6 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         flavor = deps.ThawFlavor(frzFlavor)
         return version, flavor
     #}}}
-    def _get_arch(self, flavor):
-        return _get_arch(flavor)
-
     @ExceptionHandler
     def check_installed(self, troveTuple):
         log.info("============check installed =========")
@@ -161,7 +147,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
                 if data == "." or data == "":
                     data = name.replace("-",' ').capitalize()
         return get_package_id(name, str(version.trailingRevision()),
-                self._get_arch(flavor), data)
+                get_arch(flavor), data)
 
     @ExceptionHandler
     def get_package_id(self, name, versionObj, flavor):
@@ -169,7 +155,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         version = versionObj.trailingRevision()
         pkg = self.xmlcache.resolve(name)
         #pkg["shortDesc"] = "."
-        arch = self._get_arch(flavor)
+        arch = get_arch(flavor)
         #data = versionObj.asString() + "#"
         data = ""
         if pkg:
diff --git a/backends/conary/conaryFilter.py b/backends/conary/conaryFilter.py
index b92bd04..abcd9db 100644
--- a/backends/conary/conaryFilter.py
+++ b/backends/conary/conaryFilter.py
@@ -24,8 +24,7 @@ from packagekit.filter import *
 
 import re
 from pkConaryLog import log
-from conarypk import ConaryPk
-from conaryBackend import _get_arch
+from conarypk import ConaryPk, get_arch
 
 class ConaryFilter(PackagekitFilter):
 
@@ -55,7 +54,7 @@ class ConaryFilter(PackagekitFilter):
         '''
         name,version,flavor = pkg.get("trove")
         ver = version.trailingRevision()
-        fl = _get_arch(flavor)
+        fl = get_arch(flavor)
         return "%s-%s.%s" % (name,ver,fl)
 
     def _pkg_is_installed(self, pkg):
diff --git a/backends/conary/conarypk.py b/backends/conary/conarypk.py
index ef36731..1313b32 100644
--- a/backends/conary/conarypk.py
+++ b/backends/conary/conarypk.py
@@ -8,6 +8,7 @@ from conary import conarycfg
 from conary.versions import Label
 from conary.errors import TroveNotFound
 from conary.conaryclient.update import NoNewTrovesError
+from conary.deps import deps
 
 from pkConaryLog import log
 
@@ -16,7 +17,15 @@ import os
 from packagekit.backend import PackageKitBaseBackend
 from packagekit.enums import ERROR_NO_NETWORK
 
+def get_arch(flavor):
+    '''Turn a Flavor into a string describing the arch
 
+    Return value can be x86, x86_64 or None.
+    '''
+    ret = deps.getMajorArch(flavor)
+    if ret is None:
+        ret = ''
+    return ret
 
 class ConaryPk:
     def __init__(self):
@@ -67,7 +76,6 @@ class ConaryPk:
     def search_path(self,path_file ):
         labels = self.get_labels_from_config()
         where = self._get_repos()
-        from conary.deps.deps import compatibleFlavors
         for label in self.default_label:
             trove = where.getTroveLeavesByPath([path_file], label)
             if trove.get(path_file):
commit 5cad22fae74f946a1b8e457f936bbae7784534e3
Author: Jesse Zhang <zh.jesse at gmail.com>
Date:   Fri Mar 25 14:46:09 2011 +0800

    conary: remove abundant imports

diff --git a/backends/conary/conaryBackend.py b/backends/conary/conaryBackend.py
index d759fd6..ae46f9f 100755
--- a/backends/conary/conaryBackend.py
+++ b/backends/conary/conaryBackend.py
@@ -32,10 +32,8 @@ from conary import trove
 from conary.conaryclient import cmdline
 from conary.lib import util
 
-from packagekit.backend import *
-from packagekit.package import *
-from packagekit.enums import PackageKitEnum
-from packagekit.progress import PackagekitProgress
+from packagekit.backend import get_package_id, split_package_id, \
+    PackageKitBaseBackend
 from conaryCallback import UpdateCallback, GetUpdateCallback
 from conaryCallback import RemoveCallback, UpdateSystemCallback
 from conaryFilter import *
@@ -46,7 +44,6 @@ from conary import conarycfg, conaryclient
 from conarypk import ConaryPk
 from pkConaryLog import *
 #}}}
-pkpackage = PackagekitPackage()
 sys.excepthook = util.genExcepthook()
 #{{{ FUNCTIONS
 def ExceptionHandler(func):
@@ -163,7 +160,8 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
                 data = metadata['shortDesc'].decode("UTF")
                 if data == "." or data == "":
                     data = name.replace("-",' ').capitalize()
-        return pkpackage.get_package_id(name, version.trailingRevision(), self._get_arch(flavor), data)
+        return get_package_id(name, str(version.trailingRevision()),
+                self._get_arch(flavor), data)
 
     @ExceptionHandler
     def get_package_id(self, name, versionObj, flavor):
@@ -180,7 +178,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
                 if data == "." or data == "":
                     data = name.replace("-",' ').capitalize()
 
-        return pkpackage.get_package_id(name, version, arch, data)
+        return get_package_id(name, version, arch, data)
 
     @ExceptionHandler
     def get_package_from_id(self, package_id):
@@ -188,7 +186,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         "dpaster;0.1-3-1;x86;Summary"
         """
         log.info("=========== get package from package_id ======================")
-        name, verString, archString, data =  pkpackage.get_package_from_id(package_id)
+        name, verString, archString, data = split_package_id(package_id)
         trove = self.conary.query(name) or self.conary.repo_query(name)
         return trove
 
@@ -611,7 +609,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         errors = ""
         #for package_id in package_ids.split('%'):
         for package_id in package_ids:
-            name, version, arch,data = pkpackage.get_package_from_id(package_id)
+            name, version, arch,data = split_package_id(package_id)
             troveTuple = self.conary.query(name)
             for name,version,flavor in troveTuple:
                 name = '-%s' % name
@@ -696,7 +694,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         self.status(STATUS_INFO)
         for package_id in package_ids:
             log.info(package_id)
-            name, version,arch,summary  = pkpackage.get_package_from_id(package_id)
+            name, version,arch,summary  = get_package_from_id(package_id)
             pkgDict = self.xmlcache.resolve(name)
             update = ""
             obsolete = ""
@@ -721,7 +719,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
 
         log.info("========== get_details =============")
         for package_id in package_ids:
-            name,version,arch,data = pkpackage.get_package_from_id(package_id)
+            name,version,arch,data = get_package_from_id(package_id)
             pkgDict = self.xmlcache.resolve(name)
             if name and pkgDict:
                 longDesc = ""
@@ -916,8 +914,6 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         '''
 	return self.remove_packages(False, False, package_ids, simulate=True)
 
-from pkConaryLog import pdb
-
 def main():
     backend = PackageKitConaryBackend('')
     log.info("======== argv =========== ")
commit 49ae911b4714b4aa23348375ee8f438b55a0afaf
Author: Jesse Zhang <zh.jesse at gmail.com>
Date:   Fri Mar 25 13:37:26 2011 +0800

    conary: clean up trailing spaces

diff --git a/backends/conary/XMLCache.py b/backends/conary/XMLCache.py
index 1a5a9b7..e111f3d 100644
--- a/backends/conary/XMLCache.py
+++ b/backends/conary/XMLCache.py
@@ -91,7 +91,7 @@ class XMLRepo:
 
     def resolve_list(self, searchList):
         return self._getPackages(searchList)
-        
+
     def search(self, search, where ):
         if where == "name":
             return self._searchNamePackage(search)
@@ -132,12 +132,12 @@ class XMLRepo:
             except SyntaxError as e:
                 self.pk.error(ERROR_REPO_CONFIGURATION_ERROR, "Failed to parse %s: %s. A cache refresh should fix this." %
                         (self.xml_file, str(e)))
-       
 
-    def _generatePackage(self, package_node ): 
+
+    def _generatePackage(self, package_node ):
         """ convert from package_node to dictionary """
         cat = [ cat for cat in package_node.findall("category") ]
-        pkg = dict( 
+        pkg = dict(
             name= package_node.find("name").text,
             label = self.label,
             version = package_node.find("version").text,
@@ -146,7 +146,7 @@ class XMLRepo:
             url = getattr( package_node.find("url"),"text","") ,
             category = [ i.text for i in cat ],
             licenses = eval( getattr( package_node.find("licenses"),"text", "str('')") )
-        ) 
+        )
         return pkg
 
     def _getPackage(self, name):
@@ -251,7 +251,7 @@ class XMLCache:
         log.info("CheckjobPath %s" % jobPath)
         if os.path.exists(jobPath):
             return jobPath
-    
+
     def cacheUpdateJob(self, applyList, updJob):
         jobPath = self._getJobCachePath(applyList)
         log.info("jobPath %s" % jobPath)
@@ -271,10 +271,10 @@ class XMLCache:
             pkg = {}
             pkg["name"] = troveTuple[0]
             pkg["version"] = troveTuple[1].trailingRevision()
-            pkg["label"] = troveTuple[1].trailingLabel() 
+            pkg["label"] = troveTuple[1].trailingLabel()
             mList.append(pkg)
         return mList
-            
+
     def searchByGroups(self, groups):
         pass
 
@@ -291,7 +291,7 @@ class XMLCache:
             return None
 
     def search(self, search, where = "name" ):
-        """ 
+        """
             @where (string) values = name | details | group |
         """
         repositories_result = []
@@ -325,7 +325,7 @@ class XMLCache:
 
     def getGroup(self,categorieList):
         return getGroup(categorieList)
-                
+
     def _getCategorieBase(self, mapDict, categorieList ):
         if not categorieList:
             return None
@@ -360,7 +360,7 @@ class XMLCache:
                         categories.append(cat)
         categories.sort()
         return set( categories )
-        
+
 
 if __name__ == '__main__':
   #  print ">>> name"
diff --git a/backends/conary/conaryBackend.py b/backends/conary/conaryBackend.py
index 3b41e5f..d759fd6 100755
--- a/backends/conary/conaryBackend.py
+++ b/backends/conary/conaryBackend.py
@@ -106,7 +106,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
     restartpkgs = ("PackageKit","gnome-packagekit")
 
     packages = []
-    #{{{   Packages structure 
+    #{{{   Packages structure
     """
     packages = {
         pkg_name: {
@@ -114,7 +114,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
             'metadata': pkgDict,
         }
     }
-    
+
     """
     #}}}
     #{{{ Init
@@ -142,7 +142,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
     #}}}
     def _get_arch(self, flavor):
         return _get_arch(flavor)
- 
+
     @ExceptionHandler
     def check_installed(self, troveTuple):
         log.info("============check installed =========")
@@ -164,7 +164,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
                 if data == "." or data == "":
                     data = name.replace("-",' ').capitalize()
         return pkpackage.get_package_id(name, version.trailingRevision(), self._get_arch(flavor), data)
-            
+
     @ExceptionHandler
     def get_package_id(self, name, versionObj, flavor):
 
@@ -179,7 +179,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
                 data = pkg['shortDesc'].decode("UTF")
                 if data == "." or data == "":
                     data = name.replace("-",' ').capitalize()
-                
+
         return pkpackage.get_package_id(name, version, arch, data)
 
     @ExceptionHandler
@@ -199,14 +199,14 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         return None
 
     def _convert_package( self, trove , pkgDict ):
-        return dict( 
+        return dict(
                 trove = trove ,
                 metadata = pkgDict
             )
 
     def _add_package(self, trove, pkgDict):
         self.packages.append( self._convert_package(trove, pkgDict) )
-        
+
     def _do_search(self, filters, searchlist, where = "name"):
         """
          searchlist(str)ist as the package for search like
@@ -343,10 +343,10 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
 
         package_list = pkgFilter.post_process()
         self._show_package_list(package_list)
- 
+
     @ExceptionHandler
     def resolve(self, filters, package ):
-        """ 
+        """
             @filters  (list)  list of filters
             @package (list ) list with packages name for resolve
         """
@@ -389,17 +389,17 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
 	log.info("end resolve ...................")
 
     def _show_package_list(self, lst):
-        """ 
+        """
             HOW its showed on packageKit
             @lst(list(tuple) = [ ( troveTuple, status ) ]
         """
         for (pos, ( pkg, status) ) in enumerate(lst):
             # take the basic info
            # name ,version,flavor = pkg.get("trove")
-            # get the string id from packagekit 
-            #log.info(pkg) 
+            # get the string id from packagekit
+            #log.info(pkg)
             package_id = self.get_package_id_new(pkg)
-            
+
             # split the list for get Determine info
             summary = package_id.split(";")
             name = summary[0]
@@ -435,7 +435,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
 
 
         self.percentage(20)
-      
+
 
         self.percentage(30)
         name = self.conary.search_path( search )
@@ -445,7 +445,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
             log.info("resolving")
             if ":" in name:
                 name = name.split(":")[0]
-            self.resolve( filters, [name]) 
+            self.resolve( filters, [name])
 
     @ExceptionHandler
     def search_name(self, options, searchlist):
@@ -470,15 +470,15 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         self.status(STATUS_QUERY)
         log.info("options: %s searchlist:%s "%(options, search))
         self._do_search(options, search, 'details' )
-       
-    
+
+
     @ExceptionHandler
     def get_packages(self, filter ):
         self.allow_cancel(False)
         self.status(STATUS_QUERY)
         log.info("options: %s searchlist:%s "%(filter,"all"))
         self._do_search(filter, "", 'all' )
- 
+
 
     def get_requires(self, filters, package_ids, recursive_text):
         pass
@@ -520,7 +520,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
                             withFiles=True, capsules=False):
                     files.append(path)
             return files
-        
+
         for package in package_id.split("&"):
             log.info(package)
             name, version, flavor, installed = self._findPackage(package)
@@ -595,7 +595,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
                 self.status(STATUS_INSTALL)
                 self._do_package_update(name, version, flavor, simulate)
 
-        
+
     @ExceptionHandler
     def remove_packages(self, allowDeps, autoremove, package_ids, simulate=False):
         '''
@@ -606,7 +606,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         self.percentage(0)
         self.status(STATUS_RUNNING)
         log.info("========== Remove Packages ============ ")
-        log.info( allowDeps ) 
+        log.info( allowDeps )
         self.client.setUpdateCallback(RemoveCallback(self, self.cfg))
         errors = ""
         #for package_id in package_ids.split('%'):
@@ -621,7 +621,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
                 callback = self.client.getUpdateCallback()
                 if callback.error:
                     self.error(ERROR_DEP_RESOLUTION_FAILED,', '.join(callback.error))
-                        
+
                 self._do_package_update(name, version, flavor, simulate)
         self.client.setUpdateCallback(self.callback)
 
@@ -836,7 +836,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
                 flavor = job[0][1][1]
 
             info = self._get_info(name)
-            trove_info = ( ( name,version,flavor ), info) 
+            trove_info = ( ( name,version,flavor ), info)
             r.append(trove_info)
 
         pkg_list = self.xmlcache.resolve_list([ name for (  ( name,version,flavor), info )  in r ])
@@ -844,7 +844,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         new_res = []
         for pkg in pkg_list:
             for ( trove, info ) in r:
-                #log.info( ( pkg, trove) ) 
+                #log.info( ( pkg, trove) )
                 name,version,flav = trove
                 if name == pkg["name"]:
                     npkg = self._convert_package( trove, pkg)
diff --git a/backends/conary/conaryCallback.py b/backends/conary/conaryCallback.py
index d34d1a0..e4983b9 100644
--- a/backends/conary/conaryCallback.py
+++ b/backends/conary/conaryCallback.py
@@ -149,16 +149,16 @@ class BasePKConaryCallback(callbacks.UpdateCallback):
 
     def done(self):
         log.info("Done.")
- 
+
     def warning(self, msg, *args, **kwargs):
         e = msg %args
         log.warning(e)
 
     def tagHandlerOutput(self, tag, msg, stderr = False):
-        log.info("Tag Handler Output: [%s] %s" % (tag, msg)) 
+        log.info("Tag Handler Output: [%s] %s" % (tag, msg))
 
     def troveScriptOutput(self, typ, msg):
-        log.info("Trove Script Output [%s] %s" % (typ, msg)) 
+        log.info("Trove Script Output [%s] %s" % (typ, msg))
 
 
 class UpdateSystemCallback(BasePKConaryCallback):
@@ -176,7 +176,7 @@ class GetUpdateCallback(BasePKConaryCallback):
 class UpdateCallback(BasePKConaryCallback):
     def __init__(self, backend, cfg=None):
         BasePKConaryCallback.__init__(self, backend, cfg)
-        self.progress.set_steps([ 
+        self.progress.set_steps([
             1, # requestingChangeSet 1
             50, # resolveDeps2
             51, # SetChangesetHunk3
diff --git a/backends/conary/conaryEnums.py b/backends/conary/conaryEnums.py
index 1089f02..1beb54d 100644
--- a/backends/conary/conaryEnums.py
+++ b/backends/conary/conaryEnums.py
@@ -3,7 +3,7 @@ from packagekit.enums import GROUP_ACCESSIBILITY, GROUP_ACCESSORIES, GROUP_EDUCA
 """
 Classify the Categories and help me to make a backend
 
-#    from XMLCache import XMLCache 
+#    from XMLCache import XMLCache
 #    print "categoryMap = {",
 #    for i in XMLCache()._getAllCategories():
 #        print "'%s':" % i
@@ -11,7 +11,7 @@ Classify the Categories and help me to make a backend
 
 """
 
-categoryMap = { 
+categoryMap = {
 'VectorGraphics': GROUP_GRAPHICS,
 'Network': GROUP_INTERNET,
 'Spreadsheet': GROUP_OFFICE,
@@ -150,12 +150,12 @@ categoryMap = {
 'Robotics':GROUP_EDUCATION,#	Robotics software	Education;Science
 'Sports':GROUP_GRAPHICS,#	Sports software	Education
 'ParallelComputing':GROUP_EDUCATION,#	Parallel computing software	Education;Science;ComputerScience
-#'Amusement'	A simple amusement	 
+#'Amusement'	A simple amusement
 'Archiving': GROUP_ACCESSORIES,#	A tool to archive/backup data	Utility
 'Compression': GROUP_ACCESSORIES,#	A tool to manage compressed data/archives	Utility;Archiving
-#'Electronics'	Electronics software, e.g. a circuit designer	 
+#'Electronics'	Electronics software, e.g. a circuit designer
 'Emulator':GROUP_GAMES,#	Emulator of another platform, such as a DOS emulator	System or Game
-'Engineering':GROUP_EDUCATION,#	Engineering software, e.g. CAD programs	 
+'Engineering':GROUP_EDUCATION,#	Engineering software, e.g. CAD programs
 'FileTools':GROUP_ACCESSORIES, #	A file tool utility	Utility or System
 'FileManager':GROUP_ACCESSORIES,#	A file manager	System;FileTools
 'TerminalEmulator':GROUP_ACCESSORIES,#	A terminal emulator application	System
@@ -166,14 +166,14 @@ categoryMap = {
 'Calculator':GROUP_ACCESSORIES,#	A calculator	Utility
 'Clock':GROUP_ACCESSORIES,#	A clock application/applet	Utility
 'TextEditor':GROUP_ACCESSORIES,#	A text editor	Utility
-'Documentation':GROUP_EDUCATION,#	Help or documentation	 
-'Core':GROUP_SYSTEM,#	Important application, core to the desktop such as a file manager or a help browser	 
+'Documentation':GROUP_EDUCATION,#	Help or documentation
+'Core':GROUP_SYSTEM,#	Important application, core to the desktop such as a file manager or a help browser
 #KDE	Application based on KDE libraries	QT
 #GNOME	Application based on GNOME libraries	GTK
-#GTK	Application based on GTK+ libraries	 
-#Qt	Application based on Qt libraries	 
-#Motif	Application based on Motif libraries	 
-#Java	Application based on Java GUI libraries, such as AWT or Swing	 
+#GTK	Application based on GTK+ libraries
+#Qt	Application based on Qt libraries
+#Motif	Application based on Motif libraries
+#Java	Application based on Java GUI libraries, such as AWT or Swing
 'ConsoleOnly':GROUP_ACCESSORIES,
 }
 
diff --git a/backends/conary/conarypk.py b/backends/conary/conarypk.py
index 2ec9f71..ef36731 100644
--- a/backends/conary/conarypk.py
+++ b/backends/conary/conarypk.py
@@ -73,7 +73,7 @@ class ConaryPk:
             if trove.get(path_file):
                 for ( name,version,flavor) in trove[path_file]:
                     return name
-                
+
     def query(self, name):
         """ do a conary query """
         if name is None or name == "":
@@ -98,7 +98,7 @@ class ConaryPk:
 
     def get_metadata( self, name , installLabel = None):
         pass
-        
+
     def remove(self, name):
         return self.update(name, remove = True )
     def update(self, name, installLabel= None, remove  = False ):
@@ -118,7 +118,7 @@ class ConaryPk:
             return "Update Success of %s" %  trovespec
         except NoNewTrovesError:
             return "no new Troves Found by %s " % trovespec
-    
+
     def trove_to_spec(self, trove, remove = False ):
         # add a -app=blah.rpath.org at rpl:devel for remove packages
         if remove:
diff --git a/backends/conary/generateXML.py b/backends/conary/generateXML.py
index 1ca14d7..b8b45a8 100644
--- a/backends/conary/generateXML.py
+++ b/backends/conary/generateXML.py
@@ -47,7 +47,7 @@ def generate_xml( troves, label):
         node_name = cElementTree.Element("name")
         node_name.text = name
         node_version = cElementTree.Element("version")
-        node_version.text = version 
+        node_version.text = version
 
         for i in [ node_name, node_version ]:
             package.append(i)
commit b505b70005160e7ff112274193459eb6639d813a
Author: Jesse Zhang <zh.jesse at gmail.com>
Date:   Fri Mar 25 11:02:59 2011 +0800

    conary: rename _get_update to _build_update_job
    
    Use a more descriptive name.

diff --git a/backends/conary/conaryBackend.py b/backends/conary/conaryBackend.py
index f562193..3b41e5f 100755
--- a/backends/conary/conaryBackend.py
+++ b/backends/conary/conaryBackend.py
@@ -234,8 +234,9 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
             #self.error(ERROR_INTERNAL_ERROR, "packagenotfound")
 
 
-    def _get_update(self, applyList, cache=True):
-        from conary.conaryclient.update import NoNewTrovesError,DepResolutionFailure
+    def _build_update_job(self, applyList, cache=True):
+        '''Build an UpdateJob from applyList
+        '''
         self.allow_cancel(False)
         updJob = self.client.newUpdateJob()
         suggMap = {}
@@ -254,9 +255,9 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
                 log.info("Successfully created a new update job")
                 if cache:
                     self.xmlcache.cacheUpdateJob(applyList, updJob)
-            except NoNewTrovesError:
+            except conaryclient.NoNewTrovesError:
                 return updJob, {}
-            except DepResolutionFailure as error :
+            except conaryclient.DepResolutionFailure as error :
                 log.info(error.getErrorMessage())
                 deps =  error.cannotResolve
                 dep_package = [ str(i[0][0]).split(":")[0] for i in deps ]
@@ -281,7 +282,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
             applyList = [(name, (version, flavor), (None, None), False)]
         else:
             applyList = [(name, (None, None), (version, flavor), True)]
-        return self._get_update(applyList)
+        return self._build_update_job(applyList)
 
     def _do_package_update(self, name, version, flavor, simulate):
         updJob, suggMap = self._get_package_update(name, version, flavor)
@@ -543,11 +544,8 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         [ log.info(i) for i,ver,flav in updateItems]
         applyList = [ (x[0], (None, None), x[1:], True) for x in updateItems ]
 
-        log.info(">>>>>>>>>> get update >>>>>>>>>>>>")
-        updJob, suggMap = self._get_update(applyList)
-        log.info(">>>>>>>>>> DO Update >>>>>>>>>>>>")
+        updJob, suggMap = self._build_update_job(applyList)
         jobs = self._do_update(updJob)
-        log.info(">>>>>>>>>>END DO Update >>>>>>>>>>>>")
         log.info(jobs)
         self.client.setUpdateCallback(self.callback )
 
@@ -819,11 +817,9 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         updateItems =self.client.fullUpdateItemList()
 #        updateItems = cli.cli.getUpdateItemList()
         applyList = [ (x[0], (None, None), x[1:], True) for x in updateItems ]
-        log.info("_get_update ....")
 
         self.status(STATUS_RUNNING)
-        updJob, suggMap = self._get_update(applyList)
-        log.info("_get_update ....end.")
+        updJob, suggMap = self._build_update_job(applyList)
 
         log.info("getting JobLists...........")
         r = []
commit ff247546d7d10236927b1238ae44a4e78f637620
Author: Jesse Zhang <zh.jesse at gmail.com>
Date:   Thu Mar 24 15:48:51 2011 +0800

    conary: initialize local variable before using it
    
    When using a previously cached update job, suggMap can be null when it's
    referenced in the return statement.

diff --git a/backends/conary/conaryBackend.py b/backends/conary/conaryBackend.py
index 230c216..f562193 100755
--- a/backends/conary/conaryBackend.py
+++ b/backends/conary/conaryBackend.py
@@ -238,6 +238,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         from conary.conaryclient.update import NoNewTrovesError,DepResolutionFailure
         self.allow_cancel(False)
         updJob = self.client.newUpdateJob()
+        suggMap = {}
         jobPath = self.xmlcache.checkCachedUpdateJob(applyList)
         if cache and jobPath:
             try:
commit 3371da61cef9fdc4985d8a473f346dba25a263b5
Author: Jesse Zhang <zh.jesse at gmail.com>
Date:   Thu Mar 24 14:50:18 2011 +0800

    conary: remove duplicated code
    
    Remove the duplication between _do_package_update and
    _get_package_update.

diff --git a/backends/conary/conaryBackend.py b/backends/conary/conaryBackend.py
index 8da4b5e..230c216 100755
--- a/backends/conary/conaryBackend.py
+++ b/backends/conary/conaryBackend.py
@@ -283,11 +283,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         return self._get_update(applyList)
 
     def _do_package_update(self, name, version, flavor, simulate):
-        if name.startswith('-'):
-            applyList = [(name, (version, flavor), (None, None), False)]
-        else:
-            applyList = [(name, (None, None), (version, flavor), True)]
-        updJob, suggMap = self._get_update(applyList)
+        updJob, suggMap = self._get_package_update(name, version, flavor)
         return self._do_update(updJob, simulate)
 
     def _resolve_list(self, filters):
commit 3724366eef78b4d9adbcf05a706211ca7a9c6cb9
Author: Jesse Zhang <zh.jesse at gmail.com>
Date:   Thu Mar 24 14:22:09 2011 +0800

    conary: remove unused parameter
    
    _do_update doesn't need the applyList.

diff --git a/backends/conary/conaryBackend.py b/backends/conary/conaryBackend.py
index 2b7a2a7..8da4b5e 100755
--- a/backends/conary/conaryBackend.py
+++ b/backends/conary/conaryBackend.py
@@ -264,7 +264,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
 
         return updJob, suggMap
 
-    def _do_update(self, updJob, applyList, simulate=False):
+    def _do_update(self, updJob, simulate=False):
         self.allow_cancel(False)
         try:
             # TODO we should really handle the restart case here
@@ -288,7 +288,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         else:
             applyList = [(name, (None, None), (version, flavor), True)]
         updJob, suggMap = self._get_update(applyList)
-        return self._do_update(updJob, applyList, simulate)
+        return self._do_update(updJob, simulate)
 
     def _resolve_list(self, filters):
         log.info("======= _resolve_list =====")
@@ -549,7 +549,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         log.info(">>>>>>>>>> get update >>>>>>>>>>>>")
         updJob, suggMap = self._get_update(applyList)
         log.info(">>>>>>>>>> DO Update >>>>>>>>>>>>")
-        jobs = self._do_update(updJob, applyList)
+        jobs = self._do_update(updJob)
         log.info(">>>>>>>>>>END DO Update >>>>>>>>>>>>")
         log.info(jobs)
         self.client.setUpdateCallback(self.callback )
commit befa51c17b77ce53262fb050948f059043b8d456
Author: Richard Hughes <richard at hughsie.com>
Date:   Tue Mar 15 18:31:45 2011 +0000

    trivial: fix up the Fedora spec file

diff --git a/contrib/PackageKit.spec.in b/contrib/PackageKit.spec.in
index ddf0820..f034c6a 100644
--- a/contrib/PackageKit.spec.in
+++ b/contrib/PackageKit.spec.in
@@ -63,7 +63,8 @@ cross-architecture API.
 Summary: PackageKit YUM backend
 Group: System Environment/Libraries
 Requires: yum >= 3.2.19
-Requires: pygobject2 # python(gio)
+# python(gio)
+Requires: pygobject2
 Requires: %{name} = %{version}-%{release}
 Provides: PackageKit-backend
 
@@ -344,7 +345,6 @@ update-mime-database %{_datadir}/mime &> /dev/null || :
 %ghost %verify(not md5 size mtime) %{_localstatedir}/lib/PackageKit/transactions.db
 %{_datadir}/dbus-1/system-services/*.service
 %{_libdir}/pm-utils/sleep.d/95packagekit
-%{_libdir}/polkit-1/extensions/libpackagekit-action-lookup.so
 
 %files docs
 %defattr(-,root,root,-)
commit 61ec66a10c6ecc42e58f759ab93049a717be26a5
Author: Richard Hughes <richard at hughsie.com>
Date:   Mon Mar 14 20:43:22 2011 +0000

    Clear the pending queue and cancel any background transactions when we get SuggestDaemonQuit

diff --git a/src/pk-engine.c b/src/pk-engine.c
index 85fa531..4aedd8c 100644
--- a/src/pk-engine.c
+++ b/src/pk-engine.c
@@ -492,6 +492,9 @@ pk_engine_suggest_daemon_quit (PkEngine *engine, GError **error)
 
 	g_return_val_if_fail (PK_IS_ENGINE (engine), FALSE);
 
+	/* attempt to kill background tasks */
+	pk_transaction_list_cancel_background (engine->priv->transaction_list);
+
 	/* can we exit straight away */
 	size = pk_transaction_list_get_size (engine->priv->transaction_list);
 	if (size == 0) {
diff --git a/src/pk-transaction-list.c b/src/pk-transaction-list.c
index 8b1fec7..f810911 100644
--- a/src/pk-transaction-list.c
+++ b/src/pk-transaction-list.c
@@ -561,6 +561,45 @@ pk_transaction_list_get_active_transaction (PkTransactionList *tlist)
 }
 
 /**
+ * pk_transaction_list_cancel_background:
+ **/
+void
+pk_transaction_list_cancel_background (PkTransactionList *tlist)
+{
+	guint i;
+	GPtrArray *array;
+	PkTransactionItem *item;
+	PkTransactionState state;
+
+	g_return_if_fail (PK_IS_TRANSACTION_LIST (tlist));
+
+	/* clear any pending transactions */
+	array = tlist->priv->array;
+	for (i=0; i<array->len; i++) {
+		item = (PkTransactionItem *) g_ptr_array_index (array, i);
+		state = pk_transaction_get_state (item->transaction);
+		if (state >= PK_TRANSACTION_STATE_RUNNING)
+			continue;
+		g_debug ("cancelling pending transaction %s",
+			 item->tid);
+		pk_transaction_priv_cancel_bg (item->transaction);
+	}
+
+	/* cancel any running transactions */
+	for (i=0; i<array->len; i++) {
+		item = (PkTransactionItem *) g_ptr_array_index (array, i);
+		state = pk_transaction_get_state (item->transaction);
+		if (state != PK_TRANSACTION_STATE_RUNNING)
+			continue;
+		if (!item->background)
+			continue;
+		g_debug ("cancelling running background transaction %s",
+			 item->tid);
+		pk_transaction_priv_cancel_bg (item->transaction);
+	}
+}
+
+/**
  * pk_transaction_list_commit:
  **/
 gboolean
diff --git a/src/pk-transaction-list.h b/src/pk-transaction-list.h
index 939718c..2812e7d 100644
--- a/src/pk-transaction-list.h
+++ b/src/pk-transaction-list.h
@@ -75,6 +75,7 @@ gchar		*pk_transaction_list_get_state		(PkTransactionList	*tlist)
 guint		 pk_transaction_list_get_size		(PkTransactionList	*tlist);
 PkTransaction	*pk_transaction_list_get_transaction	(PkTransactionList	*tlist,
 							 const gchar		*tid);
+void		 pk_transaction_list_cancel_background	(PkTransactionList	*tlist);
 
 G_END_DECLS
 
diff --git a/src/pk-transaction.c b/src/pk-transaction.c
index c243227..e60b176 100644
--- a/src/pk-transaction.c
+++ b/src/pk-transaction.c
@@ -2822,7 +2822,17 @@ pk_transaction_priv_cancel_bg (PkTransaction *transaction)
 	/* not implemented yet */
 	if (!pk_backend_is_implemented (transaction->priv->backend, PK_ROLE_ENUM_CANCEL)) {
 		g_warning ("Cancel not yet supported by backend");
-		return;
+		goto out;
+	}
+
+	/* if it's never been run, just remove this transaction from the list */
+	if (transaction->priv->state <= PK_TRANSACTION_STATE_READY) {
+		pk_transaction_progress_changed_emit (transaction, 100, 100, 0, 0);
+		pk_transaction_allow_cancel_emit (transaction, FALSE);
+		pk_transaction_status_changed_emit (transaction, PK_STATUS_ENUM_FINISHED);
+		pk_transaction_finished_emit (transaction, PK_EXIT_ENUM_CANCELLED, 0);
+		pk_transaction_release_tid (transaction);
+		goto out;
 	}
 
 	/* set the state, as cancelling might take a few seconds */
@@ -2836,6 +2846,8 @@ pk_transaction_priv_cancel_bg (PkTransaction *transaction)
 
 	/* actually run the method */
 	pk_backend_cancel (transaction->priv->backend);
+out:
+	return;
 }
 
 /**
commit 67b241b30906052dacf921c5f4419e53732d41ec
Author: Richard Hughes <richard at hughsie.com>
Date:   Mon Mar 14 17:30:17 2011 +0000

    Automatically cancel running background transactions if a foreground transaction is committed
    
    This allows us to have session agents automatically using PackageKit, and for any
    in-flight requests to be cancelled and automatically requeued if a high-priority
    transaction is added.
    
    This option can be disabled in PackageKit.conf by setting the key
    CancelBackgroundTransactions to false.

diff --git a/etc/PackageKit.conf.in b/etc/PackageKit.conf.in
index 730c12f..cea7398 100644
--- a/etc/PackageKit.conf.in
+++ b/etc/PackageKit.conf.in
@@ -303,3 +303,19 @@ UseThreadsInBackend=true
 # default=/
 UseRoot=/
 
+# If background tasks should be cancelled if a foreground one is committed
+#
+# This allows us to have session agents automatically using PackageKit,
+# and for any in-flight requests to be cancelled and automatically
+# requeued if a high-priority transaction is added.
+#
+# This avoids the user waiting for actions such as installing software
+# or when getting lists of uninstalled software for BASH when programs
+# like gnome-settings-daemon are checking for updates or refreshing the
+# cache in the background.
+#
+# Set this value to be false if transactions cannot be safely or sanely
+# cancelled.
+#
+# default=true
+CancelBackgroundTransactions=true
diff --git a/lib/packagekit-glib2/pk-enum.c b/lib/packagekit-glib2/pk-enum.c
index 29f1e1f..5802b59 100644
--- a/lib/packagekit-glib2/pk-enum.c
+++ b/lib/packagekit-glib2/pk-enum.c
@@ -44,6 +44,7 @@ static const PkEnumMatch enum_exit[] = {
 	{PK_EXIT_ENUM_MEDIA_CHANGE_REQUIRED,	"media-change-required"},
 	{PK_EXIT_ENUM_KILLED,			"killed"},
 	{PK_EXIT_ENUM_NEED_UNTRUSTED,		"need-untrusted"},
+	{PK_EXIT_ENUM_CANCELLED_PRIORITY,	"cancelled-priority"},
 	{0, NULL}
 };
 
@@ -194,6 +195,7 @@ static const PkEnumMatch enum_error[] = {
 	{PK_ERROR_ENUM_PROVIDE_TYPE_NOT_SUPPORTED, "provide-type-not-supported"},
 	{PK_ERROR_ENUM_INSTALL_ROOT_INVALID,	"install-root-invalid"},
 	{PK_ERROR_ENUM_CANNOT_FETCH_SOURCES,	"cannot-fetch-sources"},
+	{PK_ERROR_ENUM_CANCELLED_PRIORITY,	"cancelled-priority"},
 	{0, NULL}
 };
 
diff --git a/lib/packagekit-glib2/pk-enum.h b/lib/packagekit-glib2/pk-enum.h
index 1902757..7b31263 100644
--- a/lib/packagekit-glib2/pk-enum.h
+++ b/lib/packagekit-glib2/pk-enum.h
@@ -200,6 +200,7 @@ typedef enum {
 	PK_EXIT_ENUM_KILLED, /* when we forced the cancel, but had to SIGKILL */
 	PK_EXIT_ENUM_MEDIA_CHANGE_REQUIRED,
 	PK_EXIT_ENUM_NEED_UNTRUSTED,
+	PK_EXIT_ENUM_CANCELLED_PRIORITY,
 	PK_EXIT_ENUM_LAST
 } PkExitEnum;
 
@@ -364,6 +365,7 @@ typedef enum {
 	PK_ERROR_ENUM_PROVIDE_TYPE_NOT_SUPPORTED,
 	PK_ERROR_ENUM_INSTALL_ROOT_INVALID,
 	PK_ERROR_ENUM_CANNOT_FETCH_SOURCES,
+	PK_ERROR_ENUM_CANCELLED_PRIORITY,
 	PK_ERROR_ENUM_LAST
 } PkErrorEnum;
 
diff --git a/lib/packagekit-glib2/pk-task.c b/lib/packagekit-glib2/pk-task.c
index ba6f5f5..5d10a98 100644
--- a/lib/packagekit-glib2/pk-task.c
+++ b/lib/packagekit-glib2/pk-task.c
@@ -900,6 +900,12 @@ pk_task_ready_cb (GObject *source_object, GAsyncResult *res, PkTaskState *state)
 		goto out;
 	}
 
+	/* just re-run the transaction */
+	if (state->exit_enum == PK_EXIT_ENUM_CANCELLED_PRIORITY) {
+		pk_task_do_async_action (state);
+		goto out;
+	}
+
 	/* we can't handle this, just finish the async method */
 	state->ret = TRUE;
 
diff --git a/src/pk-backend.c b/src/pk-backend.c
index 13f8fda..ff8dde0 100644
--- a/src/pk-backend.c
+++ b/src/pk-backend.c
@@ -2062,6 +2062,8 @@ pk_backend_error_code (PkBackend *backend, PkErrorEnum error_code, const gchar *
 	need_untrusted = pk_backend_error_code_is_need_untrusted (error_code);
 	if (need_untrusted)
 		pk_backend_set_exit_code (backend, PK_EXIT_ENUM_NEED_UNTRUSTED);
+	else if (error_code == PK_ERROR_ENUM_CANCELLED_PRIORITY)
+		pk_backend_set_exit_code (backend, PK_EXIT_ENUM_CANCELLED_PRIORITY);
 	else
 		pk_backend_set_exit_code (backend, PK_EXIT_ENUM_FAILED);
 
diff --git a/src/pk-transaction-list.c b/src/pk-transaction-list.c
index 058a2e2..8b1fec7 100644
--- a/src/pk-transaction-list.c
+++ b/src/pk-transaction-list.c
@@ -539,26 +539,25 @@ out:
 }
 
 /**
- * pk_transaction_list_number_running:
+ * pk_transaction_list_get_active_transaction:
  **/
-static guint
-pk_transaction_list_number_running (PkTransactionList *tlist)
+static PkTransactionItem *
+pk_transaction_list_get_active_transaction (PkTransactionList *tlist)
 {
 	guint i;
-	guint count = 0;
-	guint length;
+	GPtrArray *array;
 	PkTransactionItem *item;
 
-	g_return_val_if_fail (PK_IS_TRANSACTION_LIST (tlist), 0);
+	g_return_val_if_fail (PK_IS_TRANSACTION_LIST (tlist), NULL);
 
-	/* find all the transactions in progress */
-	length = tlist->priv->array->len;
-	for (i=0; i<length; i++) {
-		item = (PkTransactionItem *) g_ptr_array_index (tlist->priv->array, i);
+	/* find the runner with the transaction ID */
+	array = tlist->priv->array;
+	for (i=0; i<array->len; i++) {
+		item = (PkTransactionItem *) g_ptr_array_index (array, i);
 		if (pk_transaction_get_state (item->transaction) == PK_TRANSACTION_STATE_RUNNING)
-			count++;
+			return item;
 	}
-	return count;
+	return NULL;
 }
 
 /**
@@ -569,6 +568,7 @@ pk_transaction_list_commit (PkTransactionList *tlist, const gchar *tid)
 {
 	gboolean ret;
 	PkTransactionItem *item;
+	PkTransactionItem *item_active;
 
 	g_return_val_if_fail (PK_IS_TRANSACTION_LIST (tlist), FALSE);
 	g_return_val_if_fail (tid != NULL, FALSE);
@@ -604,11 +604,27 @@ pk_transaction_list_commit (PkTransactionList *tlist, const gchar *tid)
 	g_signal_emit (tlist, signals [PK_TRANSACTION_LIST_CHANGED], 0);
 
 	/* do the transaction now if we have no other in progress */
-	if (pk_transaction_list_number_running (tlist) == 0) {
+	item_active = pk_transaction_list_get_active_transaction (tlist);
+	if (item_active == NULL) {
 		g_debug ("running %s as no others in progress", item->tid);
 		pk_transaction_list_run_item (tlist, item);
+		goto out;
 	}
 
+	/* is the current running transaction backtround, and this new
+	 * transaction foreground? */
+	ret = pk_conf_get_bool (tlist->priv->conf,
+				"TransactionCreateCommitTimeout");
+	if (!ret)
+		goto out;
+	if (!item->background && item_active->background) {
+		g_debug ("cancelling running background transaction %s "
+			 "and instead running %s",
+			 item_active->tid, item->tid);
+		pk_transaction_priv_cancel_bg (item_active->transaction);
+		goto out;
+	}
+out:
 	return TRUE;
 }
 
diff --git a/src/pk-transaction.c b/src/pk-transaction.c
index 34ded99..c243227 100644
--- a/src/pk-transaction.c
+++ b/src/pk-transaction.c
@@ -2812,6 +2812,33 @@ pk_transaction_accept_eula (PkTransaction *transaction, const gchar *eula_id, DB
 }
 
 /**
+ * pk_transaction_priv_cancel_bg:
+ **/
+void
+pk_transaction_priv_cancel_bg (PkTransaction *transaction)
+{
+	g_debug ("CancelBg method called on %s", transaction->priv->tid);
+
+	/* not implemented yet */
+	if (!pk_backend_is_implemented (transaction->priv->backend, PK_ROLE_ENUM_CANCEL)) {
+		g_warning ("Cancel not yet supported by backend");
+		return;
+	}
+
+	/* set the state, as cancelling might take a few seconds */
+	pk_backend_set_status (transaction->priv->backend, PK_STATUS_ENUM_CANCEL);
+
+	/* we don't want to cancel twice */
+	pk_backend_set_allow_cancel (transaction->priv->backend, FALSE);
+
+	/* we need ::finished to not return success or failed */
+	pk_backend_set_exit_code (transaction->priv->backend, PK_EXIT_ENUM_CANCELLED_PRIORITY);
+
+	/* actually run the method */
+	pk_backend_cancel (transaction->priv->backend);
+}
+
+/**
  * pk_transaction_cancel:
  **/
 void
diff --git a/src/pk-transaction.h b/src/pk-transaction.h
index 07a21c4..4afbaca 100644
--- a/src/pk-transaction.h
+++ b/src/pk-transaction.h
@@ -97,6 +97,7 @@ PkTransaction	*pk_transaction_new				(void);
 gboolean	 pk_transaction_run				(PkTransaction      *transaction)
 								 G_GNUC_WARN_UNUSED_RESULT;
 /* internal status */
+void		 pk_transaction_priv_cancel_bg			(PkTransaction	*transaction);
 PkRoleEnum	 pk_transaction_priv_get_role			(PkTransaction	*transaction);
 PkTransactionState pk_transaction_get_state			(PkTransaction	*transaction);
 gboolean	 pk_transaction_set_state			(PkTransaction	*transaction,
commit 11872c12358cb3ec1491c5309280f548d04aa00e
Author: Richard Hughes <richard at hughsie.com>
Date:   Tue Mar 15 11:08:58 2011 +0000

    Fix a crash where the error code was pointing to freed memory. Fixes rh#684464

diff --git a/src/pk-transaction.c b/src/pk-transaction.c
index 5dd4577..34ded99 100644
--- a/src/pk-transaction.c
+++ b/src/pk-transaction.c
@@ -1874,8 +1874,9 @@ pk_transaction_set_running (PkTransaction *transaction)
 	/* set proxy */
 	ret = pk_transaction_set_session_state (transaction, &error);
 	if (!ret) {
-		g_debug ("failed to set the session state (non-fatal): %s", error->message);
-		g_error_free (error);
+		g_debug ("failed to set the session state (non-fatal): %s",
+			 error->message);
+		g_clear_error (&error);
 	}
 
 	/* we are no longer waiting, we are setting up */
commit bc3d338c7f4c842a494f805b99ad8d45f5572eca
Author: Richard Hughes <richard at hughsie.com>
Date:   Mon Mar 14 16:58:56 2011 +0000

    trivial: fix make check after the new proxy parameters was introduced

diff --git a/src/pk-self-test.c b/src/pk-self-test.c
index d1226a6..3b04259 100644
--- a/src/pk-self-test.c
+++ b/src/pk-self-test.c
@@ -1503,7 +1503,7 @@ pk_test_transaction_db_func (void)
 					   NULL,
 					   NULL);
 	g_assert (ret);
-	g_assert_cmpstr (proxy_http, ==, "127.0.0.1:8000");
+	g_assert_cmpstr (proxy_http, ==, "127.0.0.1:80");
 	g_assert_cmpstr (proxy_ftp, ==, "127.0.0.1:21");
 
 	/* can we set the root */
diff --git a/src/pk-transaction-db.c b/src/pk-transaction-db.c
index d0c8666..c8a8f4b 100644
--- a/src/pk-transaction-db.c
+++ b/src/pk-transaction-db.c
@@ -643,8 +643,6 @@ pk_transaction_db_get_proxy (PkTransactionDb *tdb, guint uid, const gchar *sessi
 
 	g_return_val_if_fail (PK_IS_TRANSACTION_DB (tdb), FALSE);
 	g_return_val_if_fail (uid != G_MAXUINT, FALSE);
-	g_return_val_if_fail (proxy_http != NULL, FALSE);
-	g_return_val_if_fail (proxy_ftp != NULL, FALSE);
 
 	/* get existing data */
 	item = g_new0 (PkTransactionDbProxyItem, 1);
@@ -735,10 +733,10 @@ pk_transaction_db_set_proxy (PkTransactionDb *tdb, guint uid,
 		rc = sqlite3_prepare_v2 (tdb->priv->db,
 					 "UPDATE proxy SET "
 					 "proxy_http = ?, "
-					 "proxy_https = ? , "
-					 "proxy_ftp = ? "
-					 "proxy_socks = ? "
-					 "no_proxy = ? "
+					 "proxy_https = ?, "
+					 "proxy_ftp = ?, "
+					 "proxy_socks = ?, "
+					 "no_proxy = ?, "
 					 "pac = ? "
 					 "WHERE uid = ? AND session = ?",
 					 -1, &statement, NULL);
@@ -930,7 +928,7 @@ pk_transaction_db_init (PkTransactionDb *tdb)
 	}
 
 	/* session proxy saving (since 0.5.1) */
-	rc = sqlite3_exec (tdb->priv->db, "SELECT * FROM proxy LIMIT 1", NULL, NULL, &error_msg);
+	rc = sqlite3_exec (tdb->priv->db, "SELECT proxy_https FROM proxy LIMIT 1", NULL, NULL, &error_msg);
 	if (rc != SQLITE_OK) {
 		g_debug ("altering table to repair: %s", error_msg);
 		sqlite3_free (error_msg);
commit a32482c30d3760ed5a158d4cad7c1f2a569b49ae
Author: Dimitar Popov <dimitar.georgiev.popov at googlemail.com>
Date:   Mon Mar 14 15:12:06 2011 +0000

    qt: Fix typo in SearchGroups
    
    Signed-off-by: Richard Hughes <richard at hughsie.com>

diff --git a/lib/packagekit-qt/src/transaction.cpp b/lib/packagekit-qt/src/transaction.cpp
index fad5255..c08d638 100644
--- a/lib/packagekit-qt/src/transaction.cpp
+++ b/lib/packagekit-qt/src/transaction.cpp
@@ -528,7 +528,7 @@ void Transaction::searchGroups(Enum::Groups groups, Enum::Filters filters)
         groupsSL << Util::enumToString<Enum>(group, "Group", "Group");
     }
 
-    searchGroups(groups, filters);
+    searchGroups(groupsSL, filters);
 }
 
 void Transaction::searchGroups(Enum::Group group, Enum::Filters filters)
commit fb1dca938389972793c3e392f0309eead0578e88
Author: Richard Hughes <richard at hughsie.com>
Date:   Mon Mar 14 10:09:04 2011 +0000

    Honour ACLOCAL_FLAGS in Makefile.am. Fixes fd#35237
    
    Thanks to hummerbliss at gmail.com for the fix.

diff --git a/Makefile.am b/Makefile.am
index 025a525..4961fa6 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,6 +1,6 @@
 AUTOMAKE_OPTIONS = 1.7
 
-ACLOCAL_AMFLAGS = -I m4
+ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS}
 
 NULL =
 
commit b3c6db3834ce6f1bc7d2a3d7ba45af0eb2f82f8c
Author: Zhang Qiang <qiang.z.zhang at intel.com>
Date:   Fri Mar 11 10:14:09 2011 +0800

    zypp: check repo file before using it
    
    The format of repo file should be checked before using it, which can
    prevent crash issue when modify/refresh repo.

diff --git a/backends/zypp/pk-backend-zypp.cpp b/backends/zypp/pk-backend-zypp.cpp
index b894338..67b6d83 100644
--- a/backends/zypp/pk-backend-zypp.cpp
+++ b/backends/zypp/pk-backend-zypp.cpp
@@ -1620,6 +1620,10 @@ pk_backend_repo_enable (PkBackend *backend, const gchar *rid, gboolean enabled)
 
 	try {
 		repo = manager.getRepositoryInfo (rid);
+		if (!zypp_is_valid_repo (backend, repo)){
+			pk_backend_finished (backend);
+			return;
+		}
 		repo.setEnabled (enabled);
 		manager.modifyRepository (rid, repo);
 		if (!enabled) {
@@ -1857,6 +1861,13 @@ backend_repo_set_data_thread (PkBackend *backend)
 
 	try {
 		pk_backend_set_status(backend, PK_STATUS_ENUM_SETUP);
+		if (g_ascii_strcasecmp (parameter, "add") != 0) {
+			repo = manager.getRepositoryInfo (repo_id);
+			if (!zypp_is_valid_repo (backend, repo)){
+				pk_backend_finished (backend);
+				return FALSE;
+			}
+		}
 		// add a new repo
 		if (g_ascii_strcasecmp (parameter, "add") == 0) {
 			repo.setAlias (repo_id);
@@ -1868,11 +1879,9 @@ backend_repo_set_data_thread (PkBackend *backend)
 
 		// remove a repo
 		} else if (g_ascii_strcasecmp (parameter, "remove") == 0) {
-			repo = manager.getRepositoryInfo (repo_id);
 			manager.removeRepository (repo);
 		// set autorefresh of a repo true/false
 		} else if (g_ascii_strcasecmp (parameter, "refresh") == 0) {
-			repo = manager.getRepositoryInfo (repo_id);
 
 			if (g_ascii_strcasecmp (value, "true") == 0) {
 				repo.setAutorefresh (TRUE);
@@ -1885,7 +1894,6 @@ backend_repo_set_data_thread (PkBackend *backend)
 
 			manager.modifyRepository (repo_id, repo);
 		} else if (g_ascii_strcasecmp (parameter, "keep") == 0) {
-			repo = manager.getRepositoryInfo (repo_id);
 
 			if (g_ascii_strcasecmp (value, "true") == 0) {
 				repo.setKeepPackages (TRUE);
@@ -1898,15 +1906,12 @@ backend_repo_set_data_thread (PkBackend *backend)
 
 			manager.modifyRepository (repo_id, repo);
 		} else if (g_ascii_strcasecmp (parameter, "url") == 0) {
-			repo = manager.getRepositoryInfo (repo_id);
 			repo.setBaseUrl (zypp::Url(value));
 			manager.modifyRepository (repo_id, repo);
 		} else if (g_ascii_strcasecmp (parameter, "name") == 0) {
-			repo = manager.getRepositoryInfo (repo_id);
 			repo.setName(value);
 			manager.modifyRepository (repo_id, repo);
 		} else if (g_ascii_strcasecmp (parameter, "prio") == 0) {
-			repo = manager.getRepositoryInfo (repo_id);
 			gint prio = 0;
 			gint length = strlen (value);
 
diff --git a/backends/zypp/zypp-utils.cpp b/backends/zypp/zypp-utils.cpp
index 9000070..91fd6fe 100644
--- a/backends/zypp/zypp-utils.cpp
+++ b/backends/zypp/zypp-utils.cpp
@@ -171,6 +171,23 @@ zypp_is_development_repo (PkBackend *backend, zypp::RepoInfo repo)
 	return FALSE;
 }
 
+gboolean
+zypp_is_valid_repo (PkBackend *backend, zypp::RepoInfo repo)
+{
+
+	if (repo.alias().empty()){
+		pk_backend_error_code (backend, PK_ERROR_ENUM_REPO_CONFIGURATION_ERROR, "Repository has no or invalid repo name defined.\n", repo.alias ().c_str ());
+		return FALSE;
+	}
+
+	if (!repo.url().isValid()){
+		pk_backend_error_code (backend, PK_ERROR_ENUM_REPO_CONFIGURATION_ERROR, "%s: Repository has no or invalid url defined.\n", repo.alias ().c_str ());
+		return FALSE;
+	}
+	
+	return TRUE;
+}
+
 zypp::ResPool
 zypp_build_pool (PkBackend *backend, gboolean include_local)
 {
@@ -1072,6 +1089,8 @@ zypp_refresh_cache (PkBackend *backend, gboolean force)
 	for (std::list <zypp::RepoInfo>::iterator it = repos.begin(); it != repos.end(); it++, i++) {
 		zypp::RepoInfo repo (*it);
 
+		if (!zypp_is_valid_repo (backend, repo))
+			return FALSE;
 		if (pk_backend_get_is_error_set (backend))
 			break;
 
diff --git a/backends/zypp/zypp-utils.h b/backends/zypp/zypp-utils.h
index 71cd955..586139e 100644
--- a/backends/zypp/zypp-utils.h
+++ b/backends/zypp/zypp-utils.h
@@ -87,6 +87,7 @@ gboolean zypp_is_changeable_media (PkBackend *backend, const zypp::Url &url);
 
 gboolean zypp_is_development_repo (PkBackend *backend, zypp::RepoInfo repo);
 
+gboolean zypp_is_valid_repo (PkBackend *backend, zypp::RepoInfo repo);
 /**
  * Build and return a ResPool that contains all local resolvables
  * and ones found in the enabled repositories.
commit 1c07c5495e4b250f5d21aa5c9db4f7ab4d067c55
Author: Zhang Qiang <qiang.z.zhang at intel.com>
Date:   Fri Mar 11 10:08:40 2011 +0800

    pk-debuginfo-install:fix typo of using PK_FILTER
    
    PkFilterEnum can't be passed to pk_client_get_repo_list directlly,
    and PkFilterEnum should be transfered using pk_bitfield_value first.

diff --git a/contrib/debuginfo-install/pk-debuginfo-install.c b/contrib/debuginfo-install/pk-debuginfo-install.c
index bad3d4a..2f94174 100644
--- a/contrib/debuginfo-install/pk-debuginfo-install.c
+++ b/contrib/debuginfo-install/pk-debuginfo-install.c
@@ -374,7 +374,7 @@ pk_debuginfo_install_add_deps (PkDebuginfoInstallPrivate *priv, GPtrArray *packa
 
 	/* get depends for them all, not adding dup's */
 	package_ids = pk_ptr_array_to_strv (packages_search);
-	results = pk_client_get_depends (priv->client, PK_FILTER_ENUM_NONE, package_ids, TRUE, NULL, NULL, NULL, &error_local);
+	results = pk_client_get_depends (priv->client, pk_bitfield_value (PK_FILTER_ENUM_NONE), package_ids, TRUE, NULL, NULL, NULL, &error_local);
 	if (results == NULL) {
 		*error = g_error_new (1, 0, "failed to get_depends: %s", error_local->message);
 		g_error_free (error_local);
@@ -448,7 +448,7 @@ pk_debuginfo_install_get_repo_list (PkDebuginfoInstallPrivate *priv, GError **er
 	gchar *repo_id;
 
 	/* get all repo details */
-	results = pk_client_get_repo_list (priv->client, PK_FILTER_ENUM_NONE, NULL, NULL, NULL, &error_local);
+	results = pk_client_get_repo_list (priv->client, pk_bitfield_value (PK_FILTER_ENUM_NONE), NULL, NULL, NULL, &error_local);
 	if (results == NULL) {
 		*error = g_error_new (1, 0, "failed to get repo list: %s", error_local->message);
 		g_error_free (error_local);
commit 0d9258e2faddf2fd87efcba491dae74403e0bd6b
Author: Richard Hughes <richard at hughsie.com>
Date:   Fri Mar 4 11:50:22 2011 +0000

    Introduce other attributes in the SetProxy() method
    
    This commit adds the proxy_https, proxy_socks, no_proxy and pac attributes to the
    DBus method. It breaks DBus interface API, but is careful to maintain packagekit-glib
    and packagekit-qt API and ABI compatibility.

diff --git a/etc/PackageKit.conf.in b/etc/PackageKit.conf.in
index 643e840..730c12f 100644
--- a/etc/PackageKit.conf.in
+++ b/etc/PackageKit.conf.in
@@ -113,7 +113,11 @@ UseSyslog=false
 # They are in the format username:password at server:port
 #
 # ProxyHTTP=username:password at server.lan:8080
+# ProxyHTTPS=username:password at server.lan:8080
 # ProxyFTP=server.lan:21
+# ProxySOCKS=server.lan:21
+# NoProxy=internal.webserver
+# PAC=/etc/proxy.pac
 
 # Scan installed desktop files when we update or install packages
 #
diff --git a/lib/packagekit-glib2/pk-control-sync.c b/lib/packagekit-glib2/pk-control-sync.c
index b866ea0..b0de0f2 100644
--- a/lib/packagekit-glib2/pk-control-sync.c
+++ b/lib/packagekit-glib2/pk-control-sync.c
@@ -259,7 +259,7 @@ pk_control_set_proxy_cb (PkControl *control, GAsyncResult *res, PkControlHelper
 }
 
 /**
- * pk_control_set_proxy:
+ * pk_control_set_proxy2:
  * @control: a valid #PkControl instance
  * @proxy_http: the HTTP proxy server
  * @proxy_ftp: the FTP proxy server
@@ -272,10 +272,18 @@ pk_control_set_proxy_cb (PkControl *control, GAsyncResult *res, PkControlHelper
  *
  * Return value: %TRUE if the proxy was set correctly
  *
- * Since: 0.6.3
+ * Since: 0.6.13
  **/
 gboolean
-pk_control_set_proxy (PkControl *control, const gchar *proxy_http, const gchar *proxy_ftp, GCancellable *cancellable, GError **error)
+pk_control_set_proxy2 (PkControl *control,
+		       const gchar *proxy_http,
+		       const gchar *proxy_https,
+		       const gchar *proxy_ftp,
+		       const gchar *proxy_socks,
+		       const gchar *no_proxy,
+		       const gchar *pac,
+		       GCancellable *cancellable,
+		       GError **error)
 {
 	gboolean ret;
 	PkControlHelper *helper;
@@ -289,8 +297,16 @@ pk_control_set_proxy (PkControl *control, const gchar *proxy_http, const gchar *
 	helper->error = error;
 
 	/* run async method */
-	pk_control_set_proxy_async (control, proxy_http, proxy_ftp,
-				    cancellable, (GAsyncReadyCallback) pk_control_set_proxy_cb, helper);
+	pk_control_set_proxy2_async (control,
+				     proxy_http,
+				     proxy_https,
+				     proxy_ftp,
+				     proxy_socks,
+				     no_proxy,
+				     pac,
+				     cancellable,
+				     (GAsyncReadyCallback) pk_control_set_proxy_cb,
+				     helper);
 	g_main_loop_run (helper->loop);
 
 	ret = helper->ret;
@@ -302,3 +318,40 @@ pk_control_set_proxy (PkControl *control, const gchar *proxy_http, const gchar *
 	return ret;
 }
 
+
+/**
+ * pk_control_set_proxy:
+ * @control: a valid #PkControl instance
+ * @proxy_http: the HTTP proxy server
+ * @proxy_ftp: the FTP proxy server
+ * @cancellable: a #GCancellable or %NULL
+ * @error: A #GError or %NULL
+ *
+ * Sets the network proxy to use in the daemon.
+ * Warning: this function is synchronous, and may block. Do not use it in GUI
+ * applications.
+ *
+ * Return value: %TRUE if the proxy was set correctly
+ *
+ * NOTE: This is just provided for backwards compatibility.
+ * Clients should really be using pk_control_set_proxy2().
+ *
+ * Since: 0.6.3
+ **/
+gboolean
+pk_control_set_proxy (PkControl *control,
+		      const gchar *proxy_http,
+		      const gchar *proxy_ftp,
+		      GCancellable *cancellable,
+		      GError **error)
+{
+	return pk_control_set_proxy2 (control,
+				      proxy_http,
+				      NULL,
+				      proxy_ftp,
+				      NULL,
+				      NULL,
+				      NULL,
+				      cancellable,
+				      error);
+}
diff --git a/lib/packagekit-glib2/pk-control-sync.h b/lib/packagekit-glib2/pk-control-sync.h
index ed33006..e1ff785 100644
--- a/lib/packagekit-glib2/pk-control-sync.h
+++ b/lib/packagekit-glib2/pk-control-sync.h
@@ -45,6 +45,15 @@ gboolean	 pk_control_set_proxy			(PkControl		*control,
 							 const gchar		*proxy_ftp,
 							 GCancellable		*cancellable,
 							 GError			**error);
+gboolean	 pk_control_set_proxy2			(PkControl		*control,
+							 const gchar		*proxy_http,
+							 const gchar		*proxy_https,
+							 const gchar		*proxy_ftp,
+							 const gchar		*proxy_socks,
+							 const gchar		*no_proxy,
+							 const gchar		*pac,
+							 GCancellable		*cancellable,
+							 GError			**error);
 
 G_END_DECLS
 
diff --git a/lib/packagekit-glib2/pk-control.c b/lib/packagekit-glib2/pk-control.c
index 6a975ac..a455056 100644
--- a/lib/packagekit-glib2/pk-control.c
+++ b/lib/packagekit-glib2/pk-control.c
@@ -703,21 +703,33 @@ out:
 }
 
 /**
- * pk_control_set_proxy_async:
+ * pk_control_set_proxy2_async:
  * @control: a valid #PkControl instance
- * @proxy_http: a HTTP proxy string such as "username:password at server.lan:8080"
- * @proxy_ftp: a FTP proxy string such as "server.lan:8080"
+ * @proxy_http: a HTTP proxy string such as "username:password at server.lan:8080", or %NULL
+ * @proxy_https: a HTTPS proxy string such as "username:password at server.lan:8080", or %NULL
+ * @proxy_ftp: a FTP proxy string such as "server.lan:8080", or %NULL
+ * @proxy_socks: a SOCKS proxy string such as "server.lan:8080", or %NULL
+ * @no_proxy: a list of download IPs that shouldn't go through the proxy, or %NULL
+ * @pac: a PAC string, or %NULL
  * @cancellable: a #GCancellable or %NULL
  * @callback: the function to run on completion
  * @user_data: the data to pass to @callback
  *
  * Set a proxy on the PK daemon
  *
- * Since: 0.5.2
+ * Since: 0.6.13
  **/
 void
-pk_control_set_proxy_async (PkControl *control, const gchar *proxy_http, const gchar *proxy_ftp, GCancellable *cancellable,
-			    GAsyncReadyCallback callback, gpointer user_data)
+pk_control_set_proxy2_async (PkControl *control,
+			     const gchar *proxy_http,
+			     const gchar *proxy_https,
+			     const gchar *proxy_ftp,
+			     const gchar *proxy_socks,
+			     const gchar *no_proxy,
+			     const gchar *pac,
+			     GCancellable *cancellable,
+			     GAsyncReadyCallback callback,
+			     gpointer user_data)
 {
 	GSimpleAsyncResult *res;
 	PkControlState *state;
@@ -749,7 +761,11 @@ pk_control_set_proxy_async (PkControl *control, const gchar *proxy_http, const g
 	state->call = dbus_g_proxy_begin_call (control->priv->proxy, "SetProxy",
 					       (DBusGProxyCallNotify) pk_control_set_proxy_cb, state, NULL,
 					       G_TYPE_STRING, proxy_http,
+					       G_TYPE_STRING, proxy_https,
 					       G_TYPE_STRING, proxy_ftp,
+					       G_TYPE_STRING, proxy_socks,
+					       G_TYPE_STRING, no_proxy,
+					       G_TYPE_STRING, pac,
 					       G_TYPE_INVALID);
 	if (state->call == NULL)
 		g_error ("failed to setup call, maybe OOM or no connection");
@@ -761,6 +777,42 @@ out:
 }
 
 /**
+ * pk_control_set_proxy_async:
+ * @control: a valid #PkControl instance
+ * @proxy_http: a HTTP proxy string such as "username:password at server.lan:8080"
+ * @proxy_ftp: a FTP proxy string such as "server.lan:8080"
+ * @cancellable: a #GCancellable or %NULL
+ * @callback: the function to run on completion
+ * @user_data: the data to pass to @callback
+ *
+ * Set a proxy on the PK daemon
+ *
+ * NOTE: This is just provided for backwards compatibility.
+ * Clients should really be using pk_control_set_proxy2_async().
+ *
+ * Since: 0.5.2
+ **/
+void
+pk_control_set_proxy_async (PkControl *control,
+			    const gchar *proxy_http,
+			    const gchar *proxy_ftp,
+			    GCancellable *cancellable,
+			    GAsyncReadyCallback callback,
+			    gpointer user_data)
+{
+	pk_control_set_proxy2_async (control,
+				     proxy_http,
+				     NULL,
+				     proxy_ftp,
+				     NULL,
+				     NULL,
+				     NULL,
+				     cancellable,
+				     callback,
+				     user_data);
+}
+
+/**
  * pk_control_set_proxy_finish:
  * @control: a valid #PkControl instance
  * @res: the #GAsyncResult
diff --git a/lib/packagekit-glib2/pk-control.h b/lib/packagekit-glib2/pk-control.h
index 920629e..eeb195b 100644
--- a/lib/packagekit-glib2/pk-control.h
+++ b/lib/packagekit-glib2/pk-control.h
@@ -119,6 +119,16 @@ void		 pk_control_set_proxy_async		(PkControl		*control,
 							 GCancellable		*cancellable,
 							 GAsyncReadyCallback	 callback,
 							 gpointer		 user_data);
+void		 pk_control_set_proxy2_async		(PkControl		*control,
+							 const gchar		*proxy_http,
+							 const gchar		*proxy_https,
+							 const gchar		*proxy_ftp,
+							 const gchar		*proxy_socks,
+							 const gchar		*no_proxy,
+							 const gchar		*pac,
+							 GCancellable		*cancellable,
+							 GAsyncReadyCallback	 callback,
+							 gpointer		 user_data);
 gboolean	 pk_control_set_proxy_finish		(PkControl		*control,
 							 GAsyncResult		*res,
 							 GError			**error);
diff --git a/lib/packagekit-qt/src/client.cpp b/lib/packagekit-qt/src/client.cpp
index c0c15ef..5fe796e 100644
--- a/lib/packagekit-qt/src/client.cpp
+++ b/lib/packagekit-qt/src/client.cpp
@@ -226,7 +226,20 @@ void Client::setHints(const QString& hints)
 bool Client::setProxy(const QString& http_proxy, const QString& ftp_proxy)
 {
 	Q_D(Client);
-	QDBusPendingReply<> r = d->daemon->SetProxy(http_proxy, ftp_proxy);
+	QDBusPendingReply<> r = d->daemon->SetProxy(http_proxy, NULL, ftp_proxy, NULL, NULL, NULL);
+	r.waitForFinished ();
+	if (r.isError ()) {
+		setLastError (daemonErrorFromDBusReply (r));
+		return false;
+	} else {
+		return true;
+	}
+}
+
+bool Client::setProxy(const QString& http_proxy, const QString& https_proxy, const QString& ftp_proxy, const QString& socks_proxy, const QString& no_proxy, const QString& pac)
+{
+	Q_D(Client);
+	QDBusPendingReply<> r = d->daemon->SetProxy(http_proxy, https_proxy, ftp_proxy, socks_proxy, no_proxy, pac);
 	r.waitForFinished ();
 	if (r.isError ()) {
 		setLastError (daemonErrorFromDBusReply (r));
diff --git a/lib/packagekit-qt/src/client.h b/lib/packagekit-qt/src/client.h
index 682cca9..d8fd964 100644
--- a/lib/packagekit-qt/src/client.h
+++ b/lib/packagekit-qt/src/client.h
@@ -180,6 +180,7 @@ public:
 	 * Sets a proxy to be used for all the network operations
 	 */
 	bool setProxy(const QString& http_proxy, const QString& ftp_proxy);
+	bool setProxy(const QString& http_proxy, const QString& https_proxy, const QString& ftp_proxy, const QString& socks_proxy, const QString& no_proxy, const QString& pac);
 
 	/**
 	 * \brief Tells the daemon that the system state has changed, to make it reload its cache
diff --git a/src/org.freedesktop.PackageKit.xml b/src/org.freedesktop.PackageKit.xml
index 9dfb832..e750780 100644
--- a/src/org.freedesktop.PackageKit.xml
+++ b/src/org.freedesktop.PackageKit.xml
@@ -341,6 +341,15 @@
           </doc:summary>
         </doc:doc>
       </arg>
+      <arg type="s" name="proxy_https" direction="in">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              The HTTPS proxy, e.g. <doc:tt>username:password at server:port</doc:tt>.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
       <arg type="s" name="proxy_ftp" direction="in">
         <doc:doc>
           <doc:summary>
@@ -350,6 +359,36 @@
           </doc:summary>
         </doc:doc>
       </arg>
+      <arg type="s" name="proxy_socks" direction="in">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              The SOCKS proxy, e.g. <doc:tt>username:password at server:port</doc:tt>.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <arg type="s" name="no_proxy" direction="in">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              The comma seporated list of sites to not use the proxy for, e.g.
+              <doc:tt>127.0.0.1,localmirror.org</doc:tt>.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <arg type="s" name="pac" direction="in">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              The PAC file for the proxy, e.g.
+              <doc:tt>/etc/network/school.pac</doc:tt>.
+              Note: Most backends will not be able to use a PAC file.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
     </method>
 
     <!--*****************************************************************************************-->
diff --git a/src/pk-backend-spawn.c b/src/pk-backend-spawn.c
index 20ac3a3..73d3197 100644
--- a/src/pk-backend-spawn.c
+++ b/src/pk-backend-spawn.c
@@ -700,7 +700,11 @@ pk_backend_spawn_get_envp (PkBackendSpawn *backend_spawn)
 {
 	gchar **envp;
 	gchar *proxy_http;
+	gchar *proxy_https;
 	gchar *proxy_ftp;
+	gchar *proxy_socks;
+	gchar *no_proxy;
+	gchar *pac;
 	gchar *locale;
 	gchar *line;
 	gchar *uri;
@@ -742,6 +746,15 @@ pk_backend_spawn_get_envp (PkBackendSpawn *backend_spawn)
 		g_free (uri);
 	}
 
+	/* https_proxy */
+	proxy_https = pk_backend_get_proxy_https (priv->backend);
+	if (!egg_strzero (proxy_https)) {
+		uri = pk_backend_spawn_convert_uri (proxy_https);
+		line = g_strdup_printf ("%s=%s", "https_proxy", uri);
+		g_ptr_array_add (array, line);
+		g_free (uri);
+	}
+
 	/* ftp_proxy */
 	proxy_ftp = pk_backend_get_proxy_ftp (priv->backend);
 	if (!egg_strzero (proxy_ftp)) {
@@ -751,6 +764,33 @@ pk_backend_spawn_get_envp (PkBackendSpawn *backend_spawn)
 		g_free (uri);
 	}
 
+	/* socks_proxy */
+	proxy_socks = pk_backend_get_proxy_socks (priv->backend);
+	if (!egg_strzero (proxy_socks)) {
+		uri = pk_backend_spawn_convert_uri (proxy_socks);
+		line = g_strdup_printf ("%s=%s", "socks_proxy", uri);
+		g_ptr_array_add (array, line);
+		g_free (uri);
+	}
+
+	/* no_proxy */
+	no_proxy = pk_backend_get_no_proxy (priv->backend);
+	if (!egg_strzero (no_proxy)) {
+		uri = pk_backend_spawn_convert_uri (no_proxy);
+		line = g_strdup_printf ("%s=%s", "no_proxy", uri);
+		g_ptr_array_add (array, line);
+		g_free (uri);
+	}
+
+	/* pac */
+	pac = pk_backend_get_pac (priv->backend);
+	if (!egg_strzero (pac)) {
+		uri = pk_backend_spawn_convert_uri (pac);
+		line = g_strdup_printf ("%s=%s", "pac", uri);
+		g_ptr_array_add (array, line);
+		g_free (uri);
+	}
+
 	/* LANG */
 	locale = pk_backend_get_locale (priv->backend);
 	if (!egg_strzero (locale)) {
@@ -800,7 +840,11 @@ pk_backend_spawn_get_envp (PkBackendSpawn *backend_spawn)
 	g_ptr_array_unref (array);
 
 	g_free (proxy_http);
+	g_free (proxy_https);
 	g_free (proxy_ftp);
+	g_free (proxy_socks);
+	g_free (no_proxy);
+	g_free (pac);
 	g_free (locale);
 	g_free (eulas);
 	g_free (transaction_id);
diff --git a/src/pk-backend.c b/src/pk-backend.c
index 4421762..13f8fda 100644
--- a/src/pk-backend.c
+++ b/src/pk-backend.c
@@ -103,8 +103,12 @@ struct PkBackendPrivate
 	gchar			*frontend_socket;
 	guint			 cache_age;
 	gchar			*name;
-	gchar			*proxy_ftp;
 	gchar			*proxy_http;
+	gchar			*proxy_https;
+	gchar			*proxy_ftp;
+	gchar			*proxy_socks;
+	gchar			*no_proxy;
+	gchar			*pac;
 	gchar			*root;
 	gpointer		 file_changed_data;
 	guint			 download_files;
@@ -609,13 +613,27 @@ out:
  * pk_backend_set_proxy:
  **/
 gboolean
-pk_backend_set_proxy (PkBackend	*backend, const gchar *proxy_http, const gchar *proxy_ftp)
+pk_backend_set_proxy (PkBackend	*backend,
+		      const gchar *proxy_http,
+		      const gchar *proxy_https,
+		      const gchar *proxy_ftp,
+		      const gchar *proxy_socks,
+		      const gchar *no_proxy,
+		      const gchar *pac)
 {
 	g_return_val_if_fail (PK_IS_BACKEND (backend), FALSE);
 	g_free (backend->priv->proxy_http);
+	g_free (backend->priv->proxy_https);
 	g_free (backend->priv->proxy_ftp);
+	g_free (backend->priv->proxy_socks);
+	g_free (backend->priv->no_proxy);
+	g_free (backend->priv->pac);
 	backend->priv->proxy_http = g_strdup (proxy_http);
+	backend->priv->proxy_https = g_strdup (proxy_https);
 	backend->priv->proxy_ftp = g_strdup (proxy_ftp);
+	backend->priv->proxy_socks = g_strdup (proxy_socks);
+	backend->priv->no_proxy = g_strdup (no_proxy);
+	backend->priv->pac = g_strdup (pac);
 	return TRUE;
 }
 
@@ -632,6 +650,18 @@ pk_backend_get_proxy_http (PkBackend *backend)
 }
 
 /**
+ * pk_backend_get_proxy_https:
+ *
+ * Return value: proxy string in the form username:password at server:port
+ **/
+gchar *
+pk_backend_get_proxy_https (PkBackend *backend)
+{
+	g_return_val_if_fail (PK_IS_BACKEND (backend), NULL);
+	return g_strdup (backend->priv->proxy_https);
+}
+
+/**
  * pk_backend_get_proxy_ftp:
  *
  * Return value: proxy string in the form username:password at server:port
@@ -644,6 +674,42 @@ pk_backend_get_proxy_ftp (PkBackend *backend)
 }
 
 /**
+ * pk_backend_get_proxy_socks:
+ *
+ * Return value: proxy string in the form username:password at server:port
+ **/
+gchar *
+pk_backend_get_proxy_socks (PkBackend *backend)
+{
+	g_return_val_if_fail (PK_IS_BACKEND (backend), NULL);
+	return g_strdup (backend->priv->proxy_socks);
+}
+
+/**
+ * pk_backend_get_no_proxy:
+ *
+ * Return value: comma seporated value of proxy exlude string
+ **/
+gchar *
+pk_backend_get_no_proxy (PkBackend *backend)
+{
+	g_return_val_if_fail (PK_IS_BACKEND (backend), NULL);
+	return g_strdup (backend->priv->no_proxy);
+}
+
+/**
+ * pk_backend_get_pac:
+ *
+ * Return value: proxy PAC filename
+ **/
+gchar *
+pk_backend_get_pac (PkBackend *backend)
+{
+	g_return_val_if_fail (PK_IS_BACKEND (backend), NULL);
+	return g_strdup (backend->priv->pac);
+}
+
+/**
  * pk_backend_set_root:
  **/
 gboolean
@@ -2720,7 +2786,11 @@ pk_backend_finalize (GObject *object)
 
 	pk_backend_reset (backend);
 	g_free (backend->priv->proxy_http);
+	g_free (backend->priv->proxy_https);
 	g_free (backend->priv->proxy_ftp);
+	g_free (backend->priv->proxy_socks);
+	g_free (backend->priv->no_proxy);
+	g_free (backend->priv->pac);
 	g_free (backend->priv->root);
 	g_free (backend->priv->name);
 	g_free (backend->priv->locale);
@@ -3427,8 +3497,6 @@ pk_backend_init (PkBackend *backend)
 	backend->priv->frontend_socket = NULL;
 	backend->priv->cache_age = 0;
 	backend->priv->transaction_id = NULL;
-	backend->priv->proxy_http = NULL;
-	backend->priv->proxy_ftp = NULL;
 	backend->priv->root = NULL;
 	backend->priv->file_changed_func = NULL;
 	backend->priv->file_changed_data = NULL;
diff --git a/src/pk-backend.h b/src/pk-backend.h
index 9e754a5..bf5a8ca 100644
--- a/src/pk-backend.h
+++ b/src/pk-backend.h
@@ -81,7 +81,11 @@ gboolean	 pk_backend_set_name			(PkBackend	*backend,
 							 G_GNUC_WARN_UNUSED_RESULT;
 gboolean	 pk_backend_set_proxy			(PkBackend	*backend,
 							 const gchar	*proxy_http,
-							 const gchar	*proxy_ftp);
+							 const gchar	*proxy_https,
+							 const gchar	*proxy_ftp,
+							 const gchar	*proxy_socks,
+							 const gchar	*no_proxy,
+							 const gchar	*pac);
 gboolean	 pk_backend_set_root			(PkBackend	*backend,
 							 const gchar	*root);
 gchar		*pk_backend_get_name			(PkBackend	*backend)
@@ -235,6 +239,11 @@ gboolean	 pk_backend_get_progress		(PkBackend	*backend,
 guint		 pk_backend_get_runtime			(PkBackend	*backend);
 gchar		*pk_backend_get_proxy_ftp		(PkBackend	*backend);
 gchar		*pk_backend_get_proxy_http		(PkBackend	*backend);
+gchar		*pk_backend_get_proxy_https		(PkBackend	*backend);
+gchar		*pk_backend_get_proxy_socks		(PkBackend	*backend);
+gchar		*pk_backend_get_no_proxy		(PkBackend	*backend);
+gchar		*pk_backend_get_pac			(PkBackend	*backend);
+gchar		*pk_backend_get_proxy_http		(PkBackend	*backend);
 const gchar	*pk_backend_get_root			(PkBackend	*backend);
 gchar		*pk_backend_get_locale			(PkBackend	*backend);
 gchar		*pk_backend_get_frontend_socket		(PkBackend	*backend);
diff --git a/src/pk-engine.c b/src/pk-engine.c
index 67c6f4a..85fa531 100644
--- a/src/pk-engine.c
+++ b/src/pk-engine.c
@@ -511,14 +511,26 @@ pk_engine_suggest_daemon_quit (PkEngine *engine, GError **error)
  * pk_engine_set_proxy_internal:
  **/
 static gboolean
-pk_engine_set_proxy_internal (PkEngine *engine, const gchar *sender, const gchar *proxy_http, const gchar *proxy_ftp)
+pk_engine_set_proxy_internal (PkEngine *engine, const gchar *sender,
+			      const gchar *proxy_http,
+			      const gchar *proxy_https,
+			      const gchar *proxy_ftp,
+			      const gchar *proxy_socks,
+			      const gchar *no_proxy,
+			      const gchar *pac)
 {
 	gboolean ret;
 	guint uid;
 	gchar *session = NULL;
 
 	/* try to set the new proxy */
-	ret = pk_backend_set_proxy (engine->priv->backend, proxy_http, proxy_ftp);
+	ret = pk_backend_set_proxy (engine->priv->backend,
+				    proxy_http,
+				    proxy_https,
+				    proxy_ftp,
+				    proxy_socks,
+				    no_proxy,
+				    pac);
 	if (!ret) {
 		g_warning ("setting the proxy failed");
 		goto out;
@@ -539,7 +551,14 @@ pk_engine_set_proxy_internal (PkEngine *engine, const gchar *sender, const gchar
 	}
 
 	/* save to database */
-	ret = pk_transaction_db_set_proxy (engine->priv->transaction_db, uid, session, proxy_http, proxy_ftp);
+	ret = pk_transaction_db_set_proxy (engine->priv->transaction_db,
+					   uid, session,
+					   proxy_http,
+					   proxy_https,
+					   proxy_ftp,
+					   proxy_socks,
+					   no_proxy,
+					   pac);
 	if (!ret) {
 		g_warning ("failed to save the proxy in the database");
 		goto out;
@@ -556,6 +575,10 @@ typedef struct {
 	gchar			*sender;
 	gchar			*value1;
 	gchar			*value2;
+	gchar			*value3;
+	gchar			*value4;
+	gchar			*value5;
+	gchar			*value6;
 } PkEngineDbusState;
 #endif
 
@@ -564,7 +587,9 @@ typedef struct {
  * pk_engine_action_obtain_authorization:
  **/
 static void
-pk_engine_action_obtain_proxy_authorization_finished_cb (PolkitAuthority *authority, GAsyncResult *res, PkEngineDbusState *state)
+pk_engine_action_obtain_proxy_authorization_finished_cb (PolkitAuthority *authority,
+							 GAsyncResult *res,
+							 PkEngineDbusState *state)
 {
 	PolkitAuthorizationResult *result;
 	GError *error_local = NULL;
@@ -578,7 +603,8 @@ pk_engine_action_obtain_proxy_authorization_finished_cb (PolkitAuthority *author
 	/* failed */
 	if (result == NULL) {
 		error = g_error_new (PK_ENGINE_ERROR, PK_ENGINE_ERROR_CANNOT_SET_PROXY,
-				     "setting the proxy failed, could not check for auth: %s", error_local->message);
+				     "setting the proxy failed, could not check for auth: %s",
+				     error_local->message);
 		dbus_g_method_return_error (state->context, error);
 		g_error_free (error_local);
 		goto out;
@@ -600,7 +626,13 @@ pk_engine_action_obtain_proxy_authorization_finished_cb (PolkitAuthority *author
 	}
 
 	/* try to set the new proxy and save to database */
-	ret = pk_engine_set_proxy_internal (state->engine, state->sender, state->value1, state->value2);
+	ret = pk_engine_set_proxy_internal (state->engine, state->sender,
+					    state->value1,
+					    state->value2,
+					    state->value3,
+					    state->value4,
+					    state->value5,
+					    state->value6);
 	if (!ret) {
 		error = g_error_new_literal (PK_ENGINE_ERROR, PK_ENGINE_ERROR_CANNOT_SET_PROXY,
 					     "setting the proxy failed");
@@ -610,7 +642,11 @@ pk_engine_action_obtain_proxy_authorization_finished_cb (PolkitAuthority *author
 
 	/* only set after the auth success */
 	g_debug ("changing http proxy to %s for %s", state->value1, state->sender);
-	g_debug ("changing ftp proxy to %s for %s", state->value2, state->sender);
+	g_debug ("changing https proxy to %s for %s", state->value2, state->sender);
+	g_debug ("changing ftp proxy to %s for %s", state->value3, state->sender);
+	g_debug ("changing socks proxy to %s for %s", state->value4, state->sender);
+	g_debug ("changing no proxy to %s for %s", state->value5, state->sender);
+	g_debug ("changing PAC proxy to %s for %s", state->value6, state->sender);
 
 	/* all okay */
 	dbus_g_method_return (state->context);
@@ -631,13 +667,23 @@ out:
  * pk_engine_is_proxy_unchanged:
  **/
 static gboolean
-pk_engine_is_proxy_unchanged (PkEngine *engine, const gchar *sender, const gchar *proxy_http, const gchar *proxy_ftp)
+pk_engine_is_proxy_unchanged (PkEngine *engine, const gchar *sender,
+			      const gchar *proxy_http,
+			      const gchar *proxy_https,
+			      const gchar *proxy_ftp,
+			      const gchar *proxy_socks,
+			      const gchar *no_proxy,
+			      const gchar *pac)
 {
 	guint uid;
 	gboolean ret = FALSE;
 	gchar *session = NULL;
 	gchar *proxy_http_tmp = NULL;
+	gchar *proxy_https_tmp = NULL;
 	gchar *proxy_ftp_tmp = NULL;
+	gchar *proxy_socks_tmp = NULL;
+	gchar *no_proxy_tmp = NULL;
+	gchar *pac_tmp = NULL;
 
 	/* get uid */
 	uid = pk_dbus_get_uid (engine->priv->dbus, sender);
@@ -654,18 +700,34 @@ pk_engine_is_proxy_unchanged (PkEngine *engine, const gchar *sender, const gchar
 	}
 
 	/* find out if they are the same as what we tried to set before */
-	ret = pk_transaction_db_get_proxy (engine->priv->transaction_db, uid, session, &proxy_http_tmp, &proxy_ftp_tmp);
+	ret = pk_transaction_db_get_proxy (engine->priv->transaction_db,
+					   uid,
+					   session,
+					   &proxy_http_tmp,
+					   &proxy_https_tmp,
+					   &proxy_ftp_tmp,
+					   &proxy_socks_tmp,
+					   &no_proxy_tmp,
+					   &pac_tmp);
 	if (!ret)
 		goto out;
 
 	/* are different? */
 	if (g_strcmp0 (proxy_http_tmp, proxy_http) != 0 ||
-	    g_strcmp0 (proxy_ftp_tmp, proxy_ftp) != 0)
+	    g_strcmp0 (proxy_https_tmp, proxy_https) != 0 ||
+	    g_strcmp0 (proxy_ftp_tmp, proxy_ftp) != 0 ||
+	    g_strcmp0 (proxy_socks_tmp, proxy_socks) != 0 ||
+	    g_strcmp0 (no_proxy_tmp, no_proxy) != 0 ||
+	    g_strcmp0 (pac_tmp, pac) != 0)
 		ret = FALSE;
 out:
 	g_free (session);
 	g_free (proxy_http_tmp);
+	g_free (proxy_https_tmp);
 	g_free (proxy_ftp_tmp);
+	g_free (proxy_socks_tmp);
+	g_free (no_proxy_tmp);
+	g_free (pac_tmp);
 	return ret;
 }
 
@@ -673,7 +735,14 @@ out:
  * pk_engine_set_proxy:
  **/
 void
-pk_engine_set_proxy (PkEngine *engine, const gchar *proxy_http, const gchar *proxy_ftp, DBusGMethodInvocation *context)
+pk_engine_set_proxy (PkEngine *engine,
+		     const gchar *proxy_http,
+		     const gchar *proxy_https,
+		     const gchar *proxy_ftp,
+		     const gchar *proxy_socks,
+		     const gchar *no_proxy,
+		     const gchar *pac,
+		     DBusGMethodInvocation *context)
 {
 	guint len;
 	GError *error = NULL;
@@ -696,7 +765,9 @@ pk_engine_set_proxy (PkEngine *engine, const gchar *proxy_http, const gchar *pro
 	/* check length of http */
 	len = egg_strlen (proxy_http, 1024);
 	if (len == 1024) {
-		error = g_error_new (PK_ENGINE_ERROR, PK_ENGINE_ERROR_CANNOT_SET_PROXY, "%s", "http proxy was too long");
+		error = g_error_new_literal (PK_ENGINE_ERROR,
+					     PK_ENGINE_ERROR_CANNOT_SET_PROXY,
+					     "http proxy was too long");
 		dbus_g_method_return_error (context, error);
 		goto out;
 	}
@@ -704,7 +775,9 @@ pk_engine_set_proxy (PkEngine *engine, const gchar *proxy_http, const gchar *pro
 	/* check length of ftp */
 	len = egg_strlen (proxy_ftp, 1024);
 	if (len == 1024) {
-		error = g_error_new (PK_ENGINE_ERROR, PK_ENGINE_ERROR_CANNOT_SET_PROXY, "%s", "ftp proxy was too long");
+		error = g_error_new_literal (PK_ENGINE_ERROR,
+					     PK_ENGINE_ERROR_CANNOT_SET_PROXY,
+					     "ftp proxy was too long");
 		dbus_g_method_return_error (context, error);
 		goto out;
 	}
@@ -713,7 +786,13 @@ pk_engine_set_proxy (PkEngine *engine, const gchar *proxy_http, const gchar *pro
 	sender = dbus_g_method_get_sender (context);
 
 	/* is exactly the same proxy? */
-	ret = pk_engine_is_proxy_unchanged (engine, sender, proxy_http, proxy_ftp);
+	ret = pk_engine_is_proxy_unchanged (engine, sender,
+					    proxy_http,
+					    proxy_https,
+					    proxy_ftp,
+					    proxy_socks,
+					    no_proxy,
+					    pac);
 	if (ret) {
 		g_debug ("not changing proxy as the same as before");
 		dbus_g_method_return (context);
@@ -730,7 +809,11 @@ pk_engine_set_proxy (PkEngine *engine, const gchar *proxy_http, const gchar *pro
 	state->engine = g_object_ref (engine);
 	state->sender = g_strdup (sender);
 	state->value1 = g_strdup (proxy_http);
-	state->value2 = g_strdup (proxy_ftp);
+	state->value2 = g_strdup (proxy_https);
+	state->value3 = g_strdup (proxy_ftp);
+	state->value4 = g_strdup (proxy_socks);
+	state->value5 = g_strdup (no_proxy);
+	state->value6 = g_strdup (pac);
 
 	/* do authorization async */
 	polkit_authority_check_authorization (engine->priv->authority, subject,
@@ -744,9 +827,17 @@ pk_engine_set_proxy (PkEngine *engine, const gchar *proxy_http, const gchar *pro
 	g_warning ("*** THERE IS NO SECURITY MODEL BEING USED!!! ***");
 
 	/* try to set the new proxy and save to database */
-	ret = pk_engine_set_proxy_internal (engine, sender, proxy_http, proxy_ftp);
+	ret = pk_engine_set_proxy_internal (engine, sender,
+					    proxy_http,
+					    proxy_https,
+					    proxy_ftp,
+					    proxy_socks,
+					    no_proxy,
+					    pac);
 	if (!ret) {
-		error = g_error_new (PK_ENGINE_ERROR, PK_ENGINE_ERROR_CANNOT_SET_PROXY, "%s", "setting the proxy failed");
+		error = g_error_new_literal (PK_ENGINE_ERROR,
+					     PK_ENGINE_ERROR_CANNOT_SET_PROXY,
+					     "setting the proxy failed");
 		dbus_g_method_return_error (context, error);
 		goto out;
 	}
@@ -812,7 +903,9 @@ out:
  * pk_engine_action_obtain_authorization:
  **/
 static void
-pk_engine_action_obtain_root_authorization_finished_cb (PolkitAuthority *authority, GAsyncResult *res, PkEngineDbusState *state)
+pk_engine_action_obtain_root_authorization_finished_cb (PolkitAuthority *authority,
+							GAsyncResult *res,
+							PkEngineDbusState *state)
 {
 	PolkitAuthorizationResult *result;
 	GError *error_local = NULL;
@@ -825,8 +918,10 @@ pk_engine_action_obtain_root_authorization_finished_cb (PolkitAuthority *authori
 
 	/* failed */
 	if (result == NULL) {
-		error = g_error_new (PK_ENGINE_ERROR, PK_ENGINE_ERROR_CANNOT_SET_PROXY,
-				     "could not check for auth: %s", error_local->message);
+		error = g_error_new (PK_ENGINE_ERROR,
+				     PK_ENGINE_ERROR_CANNOT_SET_ROOT,
+				     "could not check for auth: %s",
+				     error_local->message);
 		dbus_g_method_return_error (state->context, error);
 		g_error_free (error_local);
 		goto out;
@@ -834,7 +929,8 @@ pk_engine_action_obtain_root_authorization_finished_cb (PolkitAuthority *authori
 
 	/* did not auth */
 	if (!polkit_authorization_result_get_is_authorized (result)) {
-		error = g_error_new_literal (PK_ENGINE_ERROR, PK_ENGINE_ERROR_CANNOT_SET_PROXY,
+		error = g_error_new_literal (PK_ENGINE_ERROR,
+					     PK_ENGINE_ERROR_CANNOT_SET_ROOT,
 					     "failed to obtain auth");
 		dbus_g_method_return_error (state->context, error);
 		goto out;
@@ -843,7 +939,8 @@ pk_engine_action_obtain_root_authorization_finished_cb (PolkitAuthority *authori
 	/* try to set the new root and save to database */
 	ret = pk_engine_set_root_internal (state->engine, state->value1, state->sender);
 	if (!ret) {
-		error = g_error_new_literal (PK_ENGINE_ERROR, PK_ENGINE_ERROR_CANNOT_SET_PROXY,
+		error = g_error_new_literal (PK_ENGINE_ERROR,
+					     PK_ENGINE_ERROR_CANNOT_SET_ROOT,
 					     "setting the root failed");
 		dbus_g_method_return_error (state->context, error);
 		goto out;
@@ -1379,7 +1476,11 @@ pk_engine_init (PkEngine *engine)
 	gchar *filename;
 	gchar *root;
 	gchar *proxy_http;
+	gchar *proxy_https;
 	gchar *proxy_ftp;
+	gchar *proxy_socks;
+	gchar *no_proxy;
+	gchar *pac;
 #if defined(USE_SECURITY_POLKIT_NEW) && defined(HAVE_POLKIT_AUTHORITY_GET_SYNC)
 	GError *error = NULL;
 #endif
@@ -1492,15 +1593,29 @@ pk_engine_init (PkEngine *engine)
 
 	/* set the default proxy */
 	proxy_http = pk_conf_get_string (engine->priv->conf, "ProxyHTTP");
+	proxy_https = pk_conf_get_string (engine->priv->conf, "ProxyHTTPS");
 	proxy_ftp = pk_conf_get_string (engine->priv->conf, "ProxyFTP");
-	pk_backend_set_proxy (engine->priv->backend, proxy_http, proxy_ftp);
-
-	/* if either of these is set, we ignore the users proxy setting */
-	if (proxy_http != NULL || proxy_ftp != NULL)
+	proxy_socks = pk_conf_get_string (engine->priv->conf, "ProxySOCKS");
+	no_proxy = pk_conf_get_string (engine->priv->conf, "NoProxy");
+	pac = pk_conf_get_string (engine->priv->conf, "PAC");
+	pk_backend_set_proxy (engine->priv->backend,
+			      proxy_http,
+			      proxy_https,
+			      proxy_ftp,
+			      proxy_socks,
+			      no_proxy,
+			      pac);
+
+	/* if any of these is set, we ignore the users proxy setting */
+	if (proxy_http != NULL || proxy_https != NULL || proxy_ftp != NULL)
 		engine->priv->using_hardcoded_proxy = TRUE;
 
 	g_free (proxy_http);
+	g_free (proxy_https);
 	g_free (proxy_ftp);
+	g_free (proxy_socks);
+	g_free (no_proxy);
+	g_free (pac);
 
 	/* set the default root */
 	root = pk_conf_get_string (engine->priv->conf, "UseRoot");
diff --git a/src/pk-engine.h b/src/pk-engine.h
index a057419..df578ba 100644
--- a/src/pk-engine.h
+++ b/src/pk-engine.h
@@ -95,7 +95,11 @@ gboolean	 pk_engine_suggest_daemon_quit		(PkEngine	*engine,
 							 GError		**error);
 void		 pk_engine_set_proxy			(PkEngine	*engine,
 							 const gchar	*proxy_http,
+							 const gchar	*proxy_https,
 							 const gchar	*proxy_ftp,
+							 const gchar	*proxy_socks,
+							 const gchar	*no_proxy,
+							 const gchar	*pac,
 							 DBusGMethodInvocation *context);
 void		 pk_engine_set_root			(PkEngine	*engine,
 							 const gchar	*root,
diff --git a/src/pk-self-test.c b/src/pk-self-test.c
index feea3ba..d1226a6 100644
--- a/src/pk-self-test.c
+++ b/src/pk-self-test.c
@@ -1451,27 +1451,57 @@ pk_test_transaction_db_func (void)
 	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");
+	ret = pk_transaction_db_set_proxy (db, 500, "session1",
+					   "127.0.0.1:80",
+					   NULL,
+					   "127.0.0.1:21",
+					   NULL,
+					   NULL,
+					   NULL);
 	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");
+	ret = pk_transaction_db_set_proxy (db, 500, "session1",
+					   "127.0.0.1:80",
+					   NULL,
+					   "127.0.0.1:21",
+					   NULL,
+					   NULL,
+					   NULL);
 	g_assert (ret);
 
 	/* can we get the proxies (non-existant user) */
-	ret = pk_transaction_db_get_proxy (db, 501, "session1", &proxy_http, &proxy_ftp);
+	ret = pk_transaction_db_get_proxy (db, 501, "session1",
+					   &proxy_http,
+					   NULL,
+					   &proxy_ftp,
+					   NULL,
+					   NULL,
+					   NULL);
 	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);
+	ret = pk_transaction_db_get_proxy (db, 500, "session2",
+					   &proxy_http,
+					   NULL,
+					   &proxy_ftp,
+					   NULL,
+					   NULL,
+					   NULL);
 	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);
+	ret = pk_transaction_db_get_proxy (db, 500, "session1",
+					   &proxy_http,
+					   NULL,
+					   &proxy_ftp,
+					   NULL,
+					   NULL,
+					   NULL);
 	g_assert (ret);
 	g_assert_cmpstr (proxy_http, ==, "127.0.0.1:8000");
 	g_assert_cmpstr (proxy_ftp, ==, "127.0.0.1:21");
diff --git a/src/pk-transaction-db.c b/src/pk-transaction-db.c
index 5fb09a0..d0c8666 100644
--- a/src/pk-transaction-db.c
+++ b/src/pk-transaction-db.c
@@ -67,7 +67,11 @@ G_DEFINE_TYPE (PkTransactionDb, pk_transaction_db, G_TYPE_OBJECT)
 
 typedef struct {
 	gchar		*proxy_http;
+	gchar		*proxy_https;
 	gchar		*proxy_ftp;
+	gchar		*proxy_socks;
+	gchar		*no_proxy;
+	gchar		*pac;
 	gboolean	set;
 } PkTransactionDbProxyItem;
 
@@ -602,7 +606,11 @@ pk_transaction_db_proxy_item_free (PkTransactionDbProxyItem *item)
 	if (item == NULL)
 		return;
 	g_free (item->proxy_http);
+	g_free (item->proxy_https);
 	g_free (item->proxy_ftp);
+	g_free (item->proxy_socks);
+	g_free (item->no_proxy);
+	g_free (item->pac);
 	g_free (item);
 }
 
@@ -611,8 +619,8 @@ pk_transaction_db_proxy_item_free (PkTransactionDbProxyItem *item)
  * @tdb: the #PkTransactionDb instance
  * @uid: the user ID of the user
  * @session: the ConsoleKit session
- * @proxy_http: the HTTP proxy
- * @proxy_ftp: the FTP proxy
+ * @proxy_http: the HTTP proxy, or %NULL
+ * @proxy_ftp: the FTP proxy, or %NULL
  *
  * Retrieves the proxy information from the database.
  *
@@ -620,7 +628,12 @@ pk_transaction_db_proxy_item_free (PkTransactionDbProxyItem *item)
  **/
 gboolean
 pk_transaction_db_get_proxy (PkTransactionDb *tdb, guint uid, const gchar *session,
-			     gchar **proxy_http, gchar **proxy_ftp)
+			     gchar **proxy_http,
+			     gchar **proxy_https,
+			     gchar **proxy_ftp,
+			     gchar **proxy_socks,
+			     gchar **no_proxy,
+			     gchar **pac)
 {
 	gchar *error_msg = NULL;
 	gchar *statement;
@@ -637,7 +650,10 @@ pk_transaction_db_get_proxy (PkTransactionDb *tdb, guint uid, const gchar *sessi
 	item = g_new0 (PkTransactionDbProxyItem, 1);
 	statement = g_strdup_printf ("SELECT proxy_http, proxy_ftp FROM proxy WHERE uid = '%i' AND session = '%s' LIMIT 1",
 				     uid, session);
-	rc = sqlite3_exec (tdb->priv->db, statement, pk_transaction_sqlite_proxy_cb, item, &error_msg);
+	rc = sqlite3_exec (tdb->priv->db, statement,
+			   pk_transaction_sqlite_proxy_cb,
+			   item,
+			   &error_msg);
 	if (rc != SQLITE_OK) {
 		g_warning ("SQL error: %s\n", error_msg);
 		sqlite3_free (error_msg);
@@ -654,8 +670,18 @@ pk_transaction_db_get_proxy (PkTransactionDb *tdb, guint uid, const gchar *sessi
 	ret = TRUE;
 
 	/* copy data */
-	*proxy_http = g_strdup (item->proxy_http);
-	*proxy_ftp = g_strdup (item->proxy_ftp);
+	if (proxy_http != NULL)
+		*proxy_http = g_strdup (item->proxy_http);
+	if (proxy_https != NULL)
+		*proxy_http = g_strdup (item->proxy_https);
+	if (proxy_ftp != NULL)
+		*proxy_ftp = g_strdup (item->proxy_ftp);
+	if (proxy_socks != NULL)
+		*proxy_socks = g_strdup (item->proxy_socks);
+	if (no_proxy != NULL)
+		*no_proxy = g_strdup (item->no_proxy);
+	if (pac != NULL)
+		*pac = g_strdup (item->pac);
 out:
 	pk_transaction_db_proxy_item_free (item);
 	g_free (statement);
@@ -675,12 +701,17 @@ out:
  * Return value: %TRUE for success
  **/
 gboolean
-pk_transaction_db_set_proxy (PkTransactionDb *tdb, guint uid, const gchar *session,
-			     const gchar *proxy_http, const gchar *proxy_ftp)
+pk_transaction_db_set_proxy (PkTransactionDb *tdb, guint uid,
+			     const gchar *session,
+			     const gchar *proxy_http,
+			     const gchar *proxy_https,
+			     const gchar *proxy_ftp,
+			     const gchar *proxy_socks,
+			     const gchar *no_proxy,
+			     const gchar *pac)
 {
 	gchar *timespec = NULL;
 	gchar *proxy_http_tmp = NULL;
-	gchar *proxy_ftp_tmp = NULL;
 	gboolean ret = FALSE;
 	gint rc;
 	sqlite3_stmt *statement = NULL;
@@ -689,13 +720,27 @@ pk_transaction_db_set_proxy (PkTransactionDb *tdb, guint uid, const gchar *sessi
 	g_return_val_if_fail (uid != G_MAXUINT, FALSE);
 
 	/* check for previous entries */
-	ret = pk_transaction_db_get_proxy (tdb, uid, session, &proxy_http_tmp, &proxy_ftp_tmp);
+	ret = pk_transaction_db_get_proxy (tdb, uid, session,
+					   &proxy_http_tmp,
+					   NULL,
+					   NULL,
+					   NULL,
+					   NULL,
+					   NULL);
 	if (ret) {
-		g_debug ("updated proxy %s, %s for uid:%i and session:%s", proxy_http, proxy_ftp, uid, session);
+		g_debug ("updated proxy %s, %s for uid:%i and session:%s",
+			 proxy_http, proxy_ftp, uid, session);
 
 		/* prepare statement */
 		rc = sqlite3_prepare_v2 (tdb->priv->db,
-					 "UPDATE proxy SET proxy_http = ?, proxy_ftp = ? WHERE uid = ? AND session = ?",
+					 "UPDATE proxy SET "
+					 "proxy_http = ?, "
+					 "proxy_https = ? , "
+					 "proxy_ftp = ? "
+					 "proxy_socks = ? "
+					 "no_proxy = ? "
+					 "pac = ? "
+					 "WHERE uid = ? AND session = ?",
 					 -1, &statement, NULL);
 		if (rc != SQLITE_OK) {
 			g_warning ("failed to prepare statement: %s", sqlite3_errmsg (tdb->priv->db));
@@ -704,9 +749,13 @@ pk_transaction_db_set_proxy (PkTransactionDb *tdb, guint uid, const gchar *sessi
 
 		/* bind data, so that the freeform proxy text cannot be used to inject SQL */
 		sqlite3_bind_text (statement, 1, proxy_http, -1, SQLITE_STATIC);
-		sqlite3_bind_text (statement, 2, proxy_ftp, -1, SQLITE_STATIC);
-		sqlite3_bind_int (statement, 3, uid);
-		sqlite3_bind_text (statement, 4, session, -1, SQLITE_STATIC);
+		sqlite3_bind_text (statement, 2, proxy_https, -1, SQLITE_STATIC);
+		sqlite3_bind_text (statement, 3, proxy_ftp, -1, SQLITE_STATIC);
+		sqlite3_bind_text (statement, 4, proxy_socks, -1, SQLITE_STATIC);
+		sqlite3_bind_text (statement, 5, no_proxy, -1, SQLITE_STATIC);
+		sqlite3_bind_text (statement, 6, pac, -1, SQLITE_STATIC);
+		sqlite3_bind_int (statement, 7, uid);
+		sqlite3_bind_text (statement, 8, session, -1, SQLITE_STATIC);
 
 		/* execute statement */
 		rc = sqlite3_step (statement);
@@ -723,7 +772,14 @@ pk_transaction_db_set_proxy (PkTransactionDb *tdb, guint uid, const gchar *sessi
 
 	/* prepare statement */
 	rc = sqlite3_prepare_v2 (tdb->priv->db,
-				 "INSERT INTO proxy (created, uid, session, proxy_http, proxy_ftp) VALUES (?, ?, ?, ?, ?)",
+				 "INSERT INTO proxy (created, uid, session, "
+				 "proxy_http, "
+				 "proxy_https, "
+				 "proxy_ftp, "
+				 "proxy_socks, "
+				 "no_proxy, "
+				 "pac) "
+				 "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)",
 				 -1, &statement, NULL);
 	if (rc != SQLITE_OK) {
 		g_warning ("failed to prepare statement: %s", sqlite3_errmsg (tdb->priv->db));
@@ -735,7 +791,11 @@ pk_transaction_db_set_proxy (PkTransactionDb *tdb, guint uid, const gchar *sessi
 	sqlite3_bind_int (statement, 2, uid);
 	sqlite3_bind_text (statement, 3, session, -1, SQLITE_STATIC);
 	sqlite3_bind_text (statement, 4, proxy_http, -1, SQLITE_STATIC);
-	sqlite3_bind_text (statement, 5, proxy_ftp, -1, SQLITE_STATIC);
+	sqlite3_bind_text (statement, 5, proxy_https, -1, SQLITE_STATIC);
+	sqlite3_bind_text (statement, 6, proxy_ftp, -1, SQLITE_STATIC);
+	sqlite3_bind_text (statement, 7, proxy_socks, -1, SQLITE_STATIC);
+	sqlite3_bind_text (statement, 8, no_proxy, -1, SQLITE_STATIC);
+	sqlite3_bind_text (statement, 9, pac, -1, SQLITE_STATIC);
 
 	/* execute statement */
 	rc = sqlite3_step (statement);
@@ -750,7 +810,6 @@ out:
 		sqlite3_finalize (statement);
 	g_free (timespec);
 	g_free (proxy_http_tmp);
-	g_free (proxy_ftp_tmp);
 	return ret;
 }
 
@@ -873,6 +932,21 @@ pk_transaction_db_init (PkTransactionDb *tdb)
 	/* session proxy saving (since 0.5.1) */
 	rc = sqlite3_exec (tdb->priv->db, "SELECT * FROM proxy LIMIT 1", NULL, NULL, &error_msg);
 	if (rc != SQLITE_OK) {
+		g_debug ("altering table to repair: %s", error_msg);
+		sqlite3_free (error_msg);
+		statement = "ALTER TABLE proxy ADD COLUMN proxy_https TEXT;";
+		sqlite3_exec (tdb->priv->db, statement, NULL, NULL, NULL);
+		statement = "ALTER TABLE proxy ADD COLUMN proxy_socks TEXT;";
+		sqlite3_exec (tdb->priv->db, statement, NULL, NULL, NULL);
+		statement = "ALTER TABLE proxy ADD COLUMN no_proxy TEXT;";
+		sqlite3_exec (tdb->priv->db, statement, NULL, NULL, NULL);
+		statement = "ALTER TABLE proxy ADD COLUMN pac TEXT;";
+		sqlite3_exec (tdb->priv->db, statement, NULL, NULL, NULL);
+	}
+
+	/* session no_proxy proxy */
+	rc = sqlite3_exec (tdb->priv->db, "SELECT no_proxy FROM proxy LIMIT 1", NULL, NULL, &error_msg);
+	if (rc != SQLITE_OK) {
 		g_debug ("adding table proxy: %s", error_msg);
 		statement = "CREATE TABLE proxy (created TEXT, proxy_http TEXT, proxy_ftp TEXT, uid INTEGER, session TEXT);";
 		sqlite3_exec (tdb->priv->db, statement, NULL, NULL, NULL);
diff --git a/src/pk-transaction-db.h b/src/pk-transaction-db.h
index e38ec8a..30076d5 100644
--- a/src/pk-transaction-db.h
+++ b/src/pk-transaction-db.h
@@ -87,12 +87,20 @@ gboolean	 pk_transaction_db_get_proxy		(PkTransactionDb	*tdb,
 							 guint			 uid,
 							 const gchar		*session,
 							 gchar			**proxy_http,
-							 gchar			**proxy_ftp);
+							 gchar			**proxy_https,
+							 gchar			**proxy_ftp,
+							 gchar			**proxy_socks,
+							 gchar			**no_proxy,
+							 gchar			**pac);
 gboolean	 pk_transaction_db_set_proxy		(PkTransactionDb	*tdb,
 							 guint			 uid,
 							 const gchar		*session,
 							 const gchar		*proxy_http,
-							 const gchar		*proxy_ftp);
+							 const gchar		*proxy_https,
+							 const gchar		*proxy_ftp,
+							 const gchar		*proxy_socks,
+							 const gchar		*no_proxy,
+							 const gchar		*pac);
 gboolean	 pk_transaction_db_get_root		(PkTransactionDb	*tdb,
 							 guint			 uid,
 							 const gchar		*session,
diff --git a/src/pk-transaction.c b/src/pk-transaction.c
index 3c35eb2..5dd4577 100644
--- a/src/pk-transaction.c
+++ b/src/pk-transaction.c
@@ -1749,7 +1749,11 @@ pk_transaction_set_session_state (PkTransaction *transaction, GError **error)
 	gboolean ret = FALSE;
 	gchar *session = NULL;
 	gchar *proxy_http = NULL;
+	gchar *proxy_https = NULL;
 	gchar *proxy_ftp = NULL;
+	gchar *proxy_socks = NULL;
+	gchar *no_proxy = NULL;
+	gchar *pac = NULL;
 	gchar *root = NULL;
 	PkTransactionPrivate *priv = transaction->priv;
 
@@ -1761,14 +1765,27 @@ pk_transaction_set_session_state (PkTransaction *transaction, GError **error)
 	}
 
 	/* get from database */
-	ret = pk_transaction_db_get_proxy (priv->transaction_db, priv->uid, session, &proxy_http, &proxy_ftp);
+	ret = pk_transaction_db_get_proxy (priv->transaction_db, priv->uid, session,
+					   &proxy_http,
+					   &proxy_https,
+					   &proxy_ftp,
+					   &proxy_socks,
+					   &no_proxy,
+					   &pac);
 	if (!ret) {
-		g_set_error_literal (error, 1, 0, "failed to get the proxy from the database");
+		g_set_error_literal (error, 1, 0,
+				     "failed to get the proxy from the database");
 		goto out;
 	}
 
 	/* try to set the new proxy */
-	ret = pk_backend_set_proxy (priv->backend, proxy_http, proxy_ftp);
+	ret = pk_backend_set_proxy (priv->backend,
+				    proxy_http,
+				    proxy_https,
+				    proxy_ftp,
+				    proxy_socks,
+				    no_proxy,
+				    pac);
 	if (!ret) {
 		g_set_error_literal (error, 1, 0, "failed to set the proxy");
 		goto out;
@@ -1791,7 +1808,11 @@ pk_transaction_set_session_state (PkTransaction *transaction, GError **error)
 		   proxy_http, proxy_ftp, root, priv->uid, session);
 out:
 	g_free (proxy_http);
+	g_free (proxy_https);
 	g_free (proxy_ftp);
+	g_free (proxy_socks);
+	g_free (no_proxy);
+	g_free (pac);
 	g_free (session);
 	return ret;
 }
commit a1edaa30b3df51ad3c5fc52548aef6b8aed8d693
Author: Fabio Erculiani <lxnay at sabayon.org>
Date:   Wed Mar 9 23:12:56 2011 +0100

    entropy: drop entropy.tools deprecated functions usage

diff --git a/backends/entropy/entropyBackend.py b/backends/entropy/entropyBackend.py
index 61d6e82..0487b12 100755
--- a/backends/entropy/entropyBackend.py
+++ b/backends/entropy/entropyBackend.py
@@ -72,6 +72,7 @@ except ImportError:
 from entropy.fetchers import UrlFetcher
 
 import entropy.tools
+import entropy.dep
 
 PK_DEBUG = False
 
@@ -627,7 +628,7 @@ class PackageKitEntropyMixin(object):
             package.prepare(match, "fetch", metaopts)
             myrepo = package.pkgmeta['repository']
             obj = down_data.setdefault(myrepo, set())
-            obj.add(entropy.tools.dep_getkey(package.pkgmeta['atom']))
+            obj.add(entropy.dep.dep_getkey(package.pkgmeta['atom']))
 
             x_rc = package.run()
             if x_rc != 0:
commit 26670fcfa4e6e2b634b880cac5e8a34324528aaa
Author: Richard Hughes <richard at hughsie.com>
Date:   Mon Mar 7 16:51:39 2011 +0000

    trivial: post release version bump

diff --git a/RELEASE b/RELEASE
index a98004f..fe6c9e6 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_12.. | grep -i -v trivial | grep -v Merge > NEWS.new
+git shortlog PACKAGEKIT_0_6_13.. | grep -i -v trivial | grep -v Merge > NEWS.new
 
 --------------------------------------------------------------------------------
-Version 0.6.13
+Version 0.6.14
 ~~~~~~~~~~~~~~
 Released: 2011-xx-xx
 
@@ -30,8 +30,8 @@ tx pull --all
 
 4. Commit changes in PackageKit git:
 
-git commit -a -m "Release version 0.6.13"
-git tag -s -f -m "Release 0.6.13" PACKAGEKIT_0_6_13
+git commit -a -m "Release version 0.6.14"
+git tag -s -f -m "Release 0.6.14" PACKAGEKIT_0_6_14
 <gpg password>
 git push --tags
 git push
@@ -57,7 +57,7 @@ tx push --source
 10. Send an email to packagekit at lists.freedesktop.org
 
 =================================================
-Subject: PackageKit 0.6.13 released!
+Subject: PackageKit 0.6.14 released!
 
 Tarballs available here: http://www.packagekit.org/releases/
 
diff --git a/configure.ac b/configure.ac
index 4744bf5..e3d25ce 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], [13])
+m4_define([pk_micro_version], [14])
 m4_define([pk_version],
           [pk_major_version.pk_minor_version.pk_micro_version])
 
commit 07a83e7c7011b856c0d75d71a6d90d87f75e4d22
Author: Jonathan Conder <jonno.conder at gmail.com>
Date:   Sat Feb 5 14:51:27 2011 +1300

    Remove pacman backend

diff --git a/backends/Makefile.am b/backends/Makefile.am
index 3d53950..ba378df 100644
--- a/backends/Makefile.am
+++ b/backends/Makefile.am
@@ -32,10 +32,6 @@ if BACKEND_TYPE_OPKG
 SUBDIRS += opkg
 endif
 
-if BACKEND_TYPE_PACMAN
-SUBDIRS += pacman
-endif
-
 if BACKEND_TYPE_RAZOR
 SUBDIRS += razor
 endif
diff --git a/backends/pacman/Makefile.am b/backends/pacman/Makefile.am
deleted file mode 100644
index 9ea0217..0000000
--- a/backends/pacman/Makefile.am
+++ /dev/null
@@ -1,53 +0,0 @@
-INCLUDES = \
-	-DG_LOG_DOMAIN=\"PackageKit-Pacman\"
-
-PACMAN_CONFIG_FILE = $(confdir)/pacman.conf
-PACMAN_GROUP_LIST = $(confdir)/groups.list
-PACMAN_REPO_LIST = $(confdir)/repos.list
-PACMAN_REPO_LIST_HEADER = "\# Generated by $(PACKAGE_NAME) - DO NOT MODIFY"
-PACMAN_CACHE_PATH = $(localstatedir)/lib/pacman/sync
-PACMAN_PACKAGE_URL = "http://www.archlinux.org/packages/%s/%s/%s/"
-PACMAN_DEFAULT_PATH = "/bin:/usr/bin:/sbin:/usr/sbin"
-
-DEFS = -DPACMAN_CONFIG_FILE=\"$(PACMAN_CONFIG_FILE)\" \
-       -DPACMAN_GROUP_LIST=\"$(PACMAN_GROUP_LIST)\" \
-       -DPACMAN_REPO_LIST=\"$(PACMAN_REPO_LIST)\" \
-       -DPACMAN_REPO_LIST_HEADER=\"$(PACMAN_REPO_LIST_HEADER)\" \
-       -DPACMAN_CACHE_PATH=\"$(PACMAN_CACHE_PATH)\" \
-       -DPACMAN_PACKAGE_URL=\"$(PACMAN_PACKAGE_URL)\" \
-       -DPACMAN_DEFAULT_PATH=\"$(PACMAN_DEFAULT_PATH)\"
-
-confdir = $(PK_CONF_DIR)/pacman.d
-conf_DATA = groups.list \
-            pacman.conf \
-            repos.list
-
-plugindir = $(PK_PLUGIN_DIR)
-plugin_LTLIBRARIES = libpk_backend_pacman.la
-
-libpk_backend_pacman_la_SOURCES = backend-depends.c \
-                                  backend-error.c \
-                                  backend-groups.c \
-                                  backend-install.c \
-                                  backend-packages.c \
-                                  backend-pacman.c \
-                                  backend-remove.c \
-                                  backend-repos.c \
-                                  backend-search.c \
-                                  backend-transaction.c \
-                                  backend-update.c
-libpk_backend_pacman_la_LIBADD = $(PK_PLUGIN_LIBS) \
-                                 $(PACMAN_LIBS)
-libpk_backend_pacman_la_LDFLAGS = -module -avoid-version
-libpk_backend_pacman_la_CFLAGS = $(PK_PLUGIN_CFLAGS) \
-                                 $(PACMAN_CFLAGS) \
-                                 $(WARNINGFLAGS_C)
-
-repos.list:
-	echo $(PACMAN_REPO_LIST_HEADER) > $@
-
-BUILT_SOURCES = repos.list
-
-EXTRA_DIST = $(conf_DATA) $(libpk_backend_pacman_la_SOURCES:.c=.h)
-
-CLEANFILES = $(BUILT_SOURCES)
diff --git a/backends/pacman/backend-depends.c b/backends/pacman/backend-depends.c
deleted file mode 100644
index 9bd2324..0000000
--- a/backends/pacman/backend-depends.c
+++ /dev/null
@@ -1,298 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2007 Andreas Obergrusberger <tradiaz at yahoo.de>
- * Copyright (C) 2008, 2009 Valeriy Lyasotskiy <onestep at ukr.net>
- * Copyright (C) 2010 Jonathan Conder <j at skurvy.no-ip.org>
- *
- * 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 <pacman.h>
-#include "backend-packages.h"
-#include "backend-pacman.h"
-#include "backend-repos.h"
-#include "backend-depends.h"
-
-static PacmanPackage *
-pacman_list_find_provider (const PacmanList *packages, PacmanDependency *depend)
-{
-	const PacmanList *list;
-
-	g_return_val_if_fail (depend != NULL, NULL);
-
-	/* find a package that provides depend */
-	for (list = packages; list != NULL; list = pacman_list_next (list)) {
-		PacmanPackage *provider = (PacmanPackage *) pacman_list_get (list);
-
-		if (pacman_dependency_satisfied_by (depend, provider)) {
-			return provider;
-		}
-	}
-
-	return NULL;
-}
-
-static PacmanPackage *
-pacman_sync_databases_find_provider (PacmanDependency *depend)
-{
-	const PacmanList *databases;
-
-	g_return_val_if_fail (pacman != NULL, NULL);
-	g_return_val_if_fail (depend != NULL, NULL);
-
-	/* find the default package that provides depend */
-	for (databases = pacman_manager_get_sync_databases (pacman); databases != NULL; databases = pacman_list_next (databases)) {
-		PacmanDatabase *database = (PacmanDatabase *) pacman_list_get (databases);
-		PacmanPackage *provider = pacman_database_find_package (database, pacman_dependency_get_name (depend));
-
-		if (provider != NULL && pacman_dependency_satisfied_by (depend, provider)) {
-			return provider;
-		}
-	}
-
-	/* find any package that provides depend */
-	for (databases = pacman_manager_get_sync_databases (pacman); databases != NULL; databases = pacman_list_next (databases)) {
-		PacmanDatabase *database = (PacmanDatabase *) pacman_list_get (databases);
-		PacmanPackage *provider = pacman_list_find_provider (pacman_database_get_packages (database), depend);
-
-		if (provider != NULL) {
-			return provider;
-		}
-	}
-
-	return NULL;
-}
-
-static gboolean
-backend_get_depends_thread (PkBackend *backend)
-{
-	guint iterator;
-	PacmanList *list, *packages = NULL;
-
-	PkBitfield filters;
-	gchar **package_ids;
-	gboolean recursive;
-
-	gboolean search_installed;
-	gboolean search_not_installed;
-
-	g_return_val_if_fail (local_database != NULL, FALSE);
-	g_return_val_if_fail (backend != NULL, FALSE);
-
-	package_ids = pk_backend_get_strv (backend, "package_ids");
-	recursive = pk_backend_get_bool (backend, "recursive");
-
-	g_return_val_if_fail (package_ids != NULL, FALSE);
-
-	filters = pk_backend_get_uint (backend, "filters");
-	search_installed = pk_bitfield_contain (filters, PK_FILTER_ENUM_INSTALLED);
-	search_not_installed = pk_bitfield_contain (filters, PK_FILTER_ENUM_NOT_INSTALLED);
-
-	/* construct an initial package list */
-	for (iterator = 0; package_ids[iterator] != NULL; ++iterator) {
-		PacmanPackage *package = backend_get_package (backend, package_ids[iterator]);
-
-		if (backend_cancelled (backend)) {
-			break;
-		} else if (package == NULL) {
-			pacman_list_free (packages);
-			backend_finished (backend);
-			return FALSE;
-		}
-
-		packages = pacman_list_add (packages, package);
-	}
-
-	/* package list might be modified along the way but that is ok */
-	for (list = packages; list != NULL; list = pacman_list_next (list)) {
-		PacmanPackage *package = (PacmanPackage *) pacman_list_get (list);
-		const PacmanList *depends;
-
-		if (backend_cancelled (backend)) {
-			break;
-		}
-
-		for (depends = pacman_package_get_dependencies (package); depends != NULL; depends = pacman_list_next (depends)) {
-			PacmanDependency *depend = (PacmanDependency *) pacman_list_get (depends);
-			PacmanPackage *provider = pacman_list_find_provider (packages, depend);
-
-			if (backend_cancelled (backend)) {
-				break;
-			} else if (provider != NULL) {
-				continue;
-			}
-
-			/* look for installed dependencies */
-			provider = pacman_list_find_provider (pacman_database_get_packages (local_database), depend);
-			if (provider != NULL) {
-				/* don't emit when not needed... */
-				if (!search_not_installed) {
-					backend_package (backend, provider, PK_INFO_ENUM_INSTALLED);
-					/* ... and assume installed packages also have installed dependencies */
-					if (recursive) {
-						packages = pacman_list_add (packages, provider);
-					}
-				}
-				continue;
-			}
-
-			/* look for non-installed dependencies */
-			provider = pacman_sync_databases_find_provider (depend);
-			if (provider != NULL) {
-				/* don't emit when not needed... */
-				if (!search_installed) {
-					backend_package (backend, provider, PK_INFO_ENUM_AVAILABLE);
-				}
-				/* ... but keep looking for installed dependencies */
-				if (recursive) {
-					packages = pacman_list_add (packages, provider);
-				}
-			} else {
-				gchar *depend_id = pacman_dependency_to_string (depend);
-				pk_backend_error_code (backend, PK_ERROR_ENUM_DEP_RESOLUTION_FAILED, "Could not resolve dependency %s", depend_id);
-				g_free (depend_id);
-
-				pacman_list_free (packages);
-				backend_finished (backend);
-				return FALSE;
-			}
-		}
-	}
-
-	pacman_list_free (packages);
-	backend_finished (backend);
-	return TRUE;
-}
-
-/**
- * backend_get_depends:
- **/
-void
-backend_get_depends (PkBackend *backend, PkBitfield filters, gchar **package_ids, gboolean recursive)
-{
-	g_return_if_fail (backend != NULL);
-	g_return_if_fail (package_ids != NULL);
-
-	backend_run (backend, PK_STATUS_ENUM_QUERY, backend_get_depends_thread);
-}
-
-static PacmanPackage *
-pacman_list_find_package (const PacmanList *packages, const gchar *name)
-{
-	const PacmanList *list;
-
-	g_return_val_if_fail (name != NULL, NULL);
-
-	/* find a package called name */
-	for (list = packages; list != NULL; list = pacman_list_next (list)) {
-		PacmanPackage *package = (PacmanPackage *) pacman_list_get (list);
-
-		if (g_strcmp0 (name, pacman_package_get_name (package)) == 0) {
-			return package;
-		}
-	}
-
-	return NULL;
-}
-
-static gboolean
-backend_get_requires_thread (PkBackend *backend)
-{
-	guint iterator;
-	PacmanList *list, *packages = NULL;
-
-	gchar **package_ids;
-	gboolean recursive;
-
-	g_return_val_if_fail (local_database != NULL, FALSE);
-	g_return_val_if_fail (backend != NULL, FALSE);
-
-	package_ids = pk_backend_get_strv (backend, "package_ids");
-	recursive = pk_backend_get_bool (backend, "recursive");
-
-	g_return_val_if_fail (package_ids != NULL, FALSE);
-
-	/* construct an initial package list */
-	for (iterator = 0; package_ids[iterator] != NULL; ++iterator) {
-		PacmanPackage *package = backend_get_package (backend, package_ids[iterator]);
-
-		if (backend_cancelled (backend)) {
-			break;
-		} else if (package == NULL) {
-			pacman_list_free (packages);
-			backend_finished (backend);
-			return FALSE;
-		}
-
-		packages = pacman_list_add (packages, package);
-	}
-
-	/* package list might be modified along the way but that is ok */
-	for (list = packages; list != NULL; list = pacman_list_next (list)) {
-		PacmanPackage *package = (PacmanPackage *) pacman_list_get (list);
-		PacmanList *requires, *required_by = pacman_package_find_required_by (package);
-
-		if (backend_cancelled (backend)) {
-			break;
-		}
-
-		for (requires = required_by; requires != NULL; requires = pacman_list_next (requires)) {
-			const gchar *name = (const gchar *) pacman_list_get (requires);
-			PacmanPackage *requirer = pacman_list_find_package (packages, name);
-
-			if (backend_cancelled (backend)) {
-				break;
-			} else if (requirer != NULL) {
-				continue;
-			}
-
-			/* look for installed requirers */
-			requirer = pacman_database_find_package (local_database, name);
-			if (requirer == NULL) {
-				pk_backend_error_code (backend, PK_ERROR_ENUM_PACKAGE_NOT_FOUND, "Could not find package %s", name);
-
-				pacman_list_free_full (required_by, g_free);
-				pacman_list_free (packages);
-				backend_finished (backend);
-				return FALSE;
-			}
-
-			backend_package (backend, requirer, PK_INFO_ENUM_INSTALLED);
-			if (recursive) {
-				packages = pacman_list_add (packages, requirer);
-			}
-		}
-
-		pacman_list_free_full (required_by, g_free);
-	}
-
-	pacman_list_free (packages);
-	backend_finished (backend);
-	return TRUE;
-}
-
-/**
- * backend_get_requires:
- **/
-void
-backend_get_requires (PkBackend *backend, PkBitfield filters, gchar **package_ids, gboolean recursive)
-{
-	g_return_if_fail (backend != NULL);
-	g_return_if_fail (package_ids != NULL);
-
-	backend_run (backend, PK_STATUS_ENUM_QUERY, backend_get_requires_thread);
-}
diff --git a/backends/pacman/backend-depends.h b/backends/pacman/backend-depends.h
deleted file mode 100644
index c6f7b6a..0000000
--- a/backends/pacman/backend-depends.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2007 Andreas Obergrusberger <tradiaz at yahoo.de>
- * Copyright (C) 2008, 2009 Valeriy Lyasotskiy <onestep at ukr.net>
- * Copyright (C) 2010 Jonathan Conder <j at skurvy.no-ip.org>
- *
- * 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 <pk-backend.h>
-
-void	 backend_get_depends	(PkBackend	*backend,
-				 PkBitfield	 filters,
-				 gchar		**package_ids,
-				 gboolean	 recursive);
-void	 backend_get_requires	(PkBackend	*backend,
-				 PkBitfield	 filters,
-				 gchar		**package_ids,
-				 gboolean	 recursive);
diff --git a/backends/pacman/backend-error.c b/backends/pacman/backend-error.c
deleted file mode 100644
index 2336508..0000000
--- a/backends/pacman/backend-error.c
+++ /dev/null
@@ -1,185 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2007 Andreas Obergrusberger <tradiaz at yahoo.de>
- * Copyright (C) 2008, 2009 Valeriy Lyasotskiy <onestep at ukr.net>
- * Copyright (C) 2010 Jonathan Conder <j at skurvy.no-ip.org>
- *
- * 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 <pacman.h>
-#include "backend-error.h"
-
-void
-backend_error (PkBackend *backend, GError *error)
-{
-	PkErrorEnum code = PK_ERROR_ENUM_INTERNAL_ERROR;
-
-	g_return_if_fail (backend != NULL);
-	g_return_if_fail (error != NULL);
-
-	/* convert error codes */
-	if (error->domain == PACMAN_ERROR) {
-		switch (error->code) {
-			case PACMAN_ERROR_MEMORY:
-				code = PK_ERROR_ENUM_OOM;
-				break;
-
-			case PACMAN_ERROR_SYSTEM:
-			case PACMAN_ERROR_INVALID_ARGS:
-			case PACMAN_ERROR_NOT_INITIALIZED:
-			case PACMAN_ERROR_DATABASE_NOT_INITIALIZED:
-			case PACMAN_ERROR_SERVER_INVALID_URL:
-			case PACMAN_ERROR_REGEX_INVALID:
-			case PACMAN_ERROR_LIBARCHIVE:
-			case PACMAN_ERROR_LIBFETCH:
-			case PACMAN_ERROR_DOWNLOAD_HANDLER:
-				code = PK_ERROR_ENUM_INTERNAL_ERROR;
-				break;
-
-			case PACMAN_ERROR_NOT_PERMITTED:
-				code = PK_ERROR_ENUM_NOT_AUTHORIZED;
-				break;
-
-			case PACMAN_ERROR_FILE_NOT_FOUND:
-			case PACMAN_ERROR_DIRECTORY_NOT_FOUND:
-				code = PK_ERROR_ENUM_FILE_NOT_FOUND;
-				break;
-
-			case PACMAN_ERROR_ALREADY_INITIALIZED:
-			case PACMAN_ERROR_DATABASE_ALREADY_INITIALIZED:
-				code = PK_ERROR_ENUM_FAILED_INITIALIZATION;
-				break;
-
-			case PACMAN_ERROR_ALREADY_RUNNING:
-				code = PK_ERROR_ENUM_CANNOT_GET_LOCK;
-				break;
-
-			case PACMAN_ERROR_DATABASE_OPEN_FAILED:
-				code = PK_ERROR_ENUM_REPO_NOT_FOUND;
-				break;
-
-			case PACMAN_ERROR_DATABASE_CREATE_FAILED:
-				code = PK_ERROR_ENUM_CANNOT_WRITE_REPO_CONFIG;
-				break;
-
-			case PACMAN_ERROR_DATABASE_NOT_FOUND:
-				code = PK_ERROR_ENUM_REPO_NOT_FOUND;
-				break;
-
-			case PACMAN_ERROR_DATABASE_UPDATE_FAILED:
-				code = PK_ERROR_ENUM_REPO_NOT_AVAILABLE;
-				break;
-
-			case PACMAN_ERROR_DATABASE_REMOVE_FAILED:
-				code = PK_ERROR_ENUM_REPO_CONFIGURATION_ERROR;
-				break;
-
-			case PACMAN_ERROR_SERVER_NONE_AVAILABLE:
-				code = PK_ERROR_ENUM_NO_MORE_MIRRORS_TO_TRY;
-				break;
-
-			case PACMAN_ERROR_TRANSACTION_ALREADY_INITIALIZED:
-			case PACMAN_ERROR_TRANSACTION_NOT_INITIALIZED:
-			case PACMAN_ERROR_TRANSACTION_DUPLICATE_TARGET:
-			case PACMAN_ERROR_TRANSACTION_NOT_READY:
-			case PACMAN_ERROR_TRANSACTION_NOT_PREPARED:
-			case PACMAN_ERROR_TRANSACTION_INVALID_OPERATION:
-			case PACMAN_ERROR_TRANSACTION_NOT_LOCKED:
-				code = PK_ERROR_ENUM_TRANSACTION_ERROR;
-				break;
-
-			case PACMAN_ERROR_TRANSACTION_ABORTED:
-				code = PK_ERROR_ENUM_TRANSACTION_CANCELLED;
-				break;
-
-			case PACMAN_ERROR_PACKAGE_NOT_FOUND:
-				code = PK_ERROR_ENUM_PACKAGE_NOT_FOUND;
-				break;
-
-			case PACMAN_ERROR_PACKAGE_IGNORED:
-				code = PK_ERROR_ENUM_PACKAGE_INSTALL_BLOCKED;
-				break;
-
-			case PACMAN_ERROR_DELTA_INVALID:
-			case PACMAN_ERROR_PACKAGE_INVALID:
-				code = PK_ERROR_ENUM_INVALID_PACKAGE_FILE;
-				break;
-
-			case PACMAN_ERROR_PACKAGE_OPEN_FAILED:
-				code = PK_ERROR_ENUM_PACKAGE_NOT_FOUND;
-				break;
-
-			case PACMAN_ERROR_PACKAGE_REMOVE_FAILED:
-				code = PK_ERROR_ENUM_PACKAGE_FAILED_TO_REMOVE;
-				break;
-
-			case PACMAN_ERROR_PACKAGE_UNKNOWN_FILENAME:
-			case PACMAN_ERROR_PACKAGE_DATABASE_NOT_FOUND:
-				code = PK_ERROR_ENUM_PACKAGE_FAILED_TO_CONFIGURE;
-				break;
-
-			case PACMAN_ERROR_DELTA_PATCH_FAILED:
-				code = PK_ERROR_ENUM_PACKAGE_FAILED_TO_BUILD;
-				break;
-
-			case PACMAN_ERROR_DEPENDENCY_UNSATISFIED:
-				code = PK_ERROR_ENUM_DEP_RESOLUTION_FAILED;
-				break;
-
-			case PACMAN_ERROR_CONFLICT:
-				code = PK_ERROR_ENUM_PACKAGE_CONFLICTS;
-				break;
-
-			case PACMAN_ERROR_FILE_CONFLICT:
-				code = PK_ERROR_ENUM_FILE_CONFLICTS;
-				break;
-
-			case PACMAN_ERROR_DOWNLOAD_FAILED:
-				code = PK_ERROR_ENUM_PACKAGE_DOWNLOAD_FAILED;
-				break;
-
-			case PACMAN_ERROR_CONFIG_INVALID:
-				code = PK_ERROR_ENUM_FAILED_CONFIG_PARSING;
-				break;
-
-			case PACMAN_ERROR_PACKAGE_HELD:
-				code = PK_ERROR_ENUM_CANNOT_REMOVE_SYSTEM_PACKAGE;
-				break;
-		}
-	}
-
-	pk_backend_error_code (backend, code, "%s", error->message);
-	g_error_free (error);
-}
-
-void
-backend_message (PkBackend *backend, const gchar *message)
-{
-	guint iterator;
-	gchar **messages = g_strsplit_set (message, "\r\n", 0);
-
-	/* display multi-line messages in a nice format */
-	for (iterator = 0; messages[iterator] != NULL; ++iterator) {
-		g_strstrip (messages[iterator]);
-		if (*messages[iterator] != '\0') {
-			pk_backend_message (backend, PK_MESSAGE_ENUM_UNKNOWN, "%s", messages[iterator]);
-		}
-	}
-
-	g_strfreev (messages);
-}
diff --git a/backends/pacman/backend-error.h b/backends/pacman/backend-error.h
deleted file mode 100644
index 2be8021..0000000
--- a/backends/pacman/backend-error.h
+++ /dev/null
@@ -1,29 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2007 Andreas Obergrusberger <tradiaz at yahoo.de>
- * Copyright (C) 2008, 2009 Valeriy Lyasotskiy <onestep at ukr.net>
- * Copyright (C) 2010 Jonathan Conder <j at skurvy.no-ip.org>
- *
- * 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 <pk-backend.h>
-
-void	 backend_error		(PkBackend	*backend,
-				 GError		*error);
-void	 backend_message	(PkBackend	*backend,
-				 const gchar	*message);
diff --git a/backends/pacman/backend-groups.c b/backends/pacman/backend-groups.c
deleted file mode 100644
index 95ebce6..0000000
--- a/backends/pacman/backend-groups.c
+++ /dev/null
@@ -1,150 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2007 Andreas Obergrusberger <tradiaz at yahoo.de>
- * Copyright (C) 2008, 2009 Valeriy Lyasotskiy <onestep at ukr.net>
- * Copyright (C) 2010 Jonathan Conder <j at skurvy.no-ip.org>
- *
- * 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 <string.h>
-#include <gio/gio.h>
-#include "backend-error.h"
-#include "backend-groups.h"
-
-static GHashTable *group_map = NULL;
-static PkBitfield groups = 0;
-
-static GHashTable *
-group_map_new (GError **error)
-{
-	GHashTable *map;
-	GFile *file;
-
-	GFileInputStream *file_stream;
-	GDataInputStream *data_stream;
-
-	gchar *key, *value;
-	GError *e = NULL;
-
-	g_debug ("pacman: reading groups from %s", PACMAN_GROUP_LIST);
-	file = g_file_new_for_path (PACMAN_GROUP_LIST);
-	file_stream = g_file_read (file, NULL, &e);
-
-	if (file_stream == NULL) {
-		g_object_unref (file);
-		g_propagate_error (error, e);
-		return NULL;
-	}
-
-	map = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
-	data_stream = g_data_input_stream_new (G_INPUT_STREAM (file_stream));
-
-	/* read groups line by line, ignoring comments */
-	while ((value = g_data_input_stream_read_line (data_stream, NULL, NULL, &e)) != NULL) {
-		PkGroupEnum group;
-
-		g_strstrip (value);
-		if (*value == '\0' || *value == '#') {
-			g_free (value);
-			continue;
-		}
-
-		/* line format: alpm-group (space|tab)+ packagekit-group */
-		key = strsep (&value, " 	");
-		g_strchomp (key);
-
-		if (value == NULL) {
-			/* safe to cast as it is never freed or modified */
-			value = (gchar *) "other";
-			group = PK_GROUP_ENUM_OTHER;
-		} else {
-			g_strchug (value);
-			group = pk_group_enum_from_string (value);
-		}
-
-		if (group != PK_GROUP_ENUM_UNKNOWN) {
-			/* use replace because key and value are allocated together */
-			g_hash_table_replace (map, key, value);
-			pk_bitfield_add (groups, group);
-		}
-	}
-
-	g_object_unref (data_stream);
-	g_object_unref (file_stream);
-	g_object_unref (file);
-
-	if (e != NULL) {
-		g_hash_table_unref (map);
-		g_propagate_error (error, e);
-		return NULL;
-	} else {
-		return map;
-	}
-}
-
-gboolean
-backend_initialize_groups (PkBackend *backend, GError **error)
-{
-	g_return_val_if_fail (backend != NULL, FALSE);
-
-	group_map = group_map_new (error);
-	if (group_map == NULL) {
-		return FALSE;
-	}
-
-	return TRUE;
-}
-
-void
-backend_destroy_groups (PkBackend *backend)
-{
-	g_return_if_fail (backend != NULL);
-
-	if (group_map != NULL) {
-		g_hash_table_unref (group_map);
-	}
-}
-
-const gchar *
-pacman_package_get_group (PacmanPackage *package)
-{
-	const PacmanList *list;
-
-	g_return_val_if_fail (group_map != NULL, NULL);
-	g_return_val_if_fail (package != NULL, NULL);
-
-	/* use the first group that we recognise */
-	for (list = pacman_package_get_groups (package); list != NULL; list = pacman_list_next (list)) {
-		gpointer value = g_hash_table_lookup (group_map, pacman_list_get (list));
-		if (value != NULL) {
-			return (const gchar *) value;
-		}
-	}
-
-	return "other";
-}
-
-/**
- * backend_get_groups:
- **/
-PkBitfield backend_get_groups (PkBackend *backend)
-{
-	g_return_val_if_fail (backend != NULL, 0);
-
-	return groups;
-}
diff --git a/backends/pacman/backend-groups.h b/backends/pacman/backend-groups.h
deleted file mode 100644
index 9642015..0000000
--- a/backends/pacman/backend-groups.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2007 Andreas Obergrusberger <tradiaz at yahoo.de>
- * Copyright (C) 2008, 2009 Valeriy Lyasotskiy <onestep at ukr.net>
- * Copyright (C) 2010 Jonathan Conder <j at skurvy.no-ip.org>
- *
- * 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 <pacman.h>
-#include <pk-backend.h>
-
-gboolean	 backend_initialize_groups	(PkBackend	*backend,
-						 GError		**error);
-void		 backend_destroy_groups		(PkBackend	*backend);
-
-const gchar	*pacman_package_get_group	(PacmanPackage	*package);
-PkBitfield	 backend_get_groups		(PkBackend	*backend);
diff --git a/backends/pacman/backend-install.c b/backends/pacman/backend-install.c
deleted file mode 100644
index 5c188cc..0000000
--- a/backends/pacman/backend-install.c
+++ /dev/null
@@ -1,348 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2007 Andreas Obergrusberger <tradiaz at yahoo.de>
- * Copyright (C) 2008, 2009 Valeriy Lyasotskiy <onestep at ukr.net>
- * Copyright (C) 2010 Jonathan Conder <j at skurvy.no-ip.org>
- *
- * 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 <pacman.h>
-#include "backend-error.h"
-#include "backend-pacman.h"
-#include "backend-packages.h"
-#include "backend-repos.h"
-#include "backend-transaction.h"
-#include "backend-install.h"
-
-static PacmanList *
-backend_transaction_list_targets (PkBackend *backend)
-{
-	gchar **package_ids;
-	guint iterator;
-	PacmanList *list = NULL;
-
-	g_return_val_if_fail (backend != NULL, NULL);
-
-	package_ids = pk_backend_get_strv (backend, "package_ids");
-
-	g_return_val_if_fail (package_ids != NULL, NULL);
-
-	for (iterator = 0; package_ids[iterator] != NULL; ++iterator) {
-		gchar **package_id_data = pk_package_id_split (package_ids[iterator]);
-		list = pacman_list_add (list, g_strdup_printf ("%s/%s", package_id_data[PK_PACKAGE_ID_DATA], package_id_data[PK_PACKAGE_ID_NAME]));
-		g_strfreev (package_id_data);
-	}
-
-	return list;
-}
-
-static gboolean
-backend_download_packages_thread (PkBackend *backend)
-{
-	PacmanList *list;
-	PacmanList *cache_paths;
-	const gchar *directory;
-
-	PacmanTransaction *transaction = NULL;
-	PacmanTransactionFlags flags = PACMAN_TRANSACTION_FLAGS_IGNORE_DEPENDENCIES |
-				       PACMAN_TRANSACTION_FLAGS_IGNORE_DEPENDENCY_CONFLICTS |
-				       PACMAN_TRANSACTION_FLAGS_SYNC_DOWNLOAD_ONLY;
-
-	g_return_val_if_fail (pacman != NULL, FALSE);
-	g_return_val_if_fail (backend != NULL, FALSE);
-
-	directory = pk_backend_get_string (backend, "directory");
-
-	g_return_val_if_fail (directory != NULL, FALSE);
-
-	/* download files to a PackageKit directory */
-	cache_paths = pacman_list_strdup (pacman_manager_get_cache_paths (pacman));
-	pacman_manager_set_cache_paths (pacman, NULL);
-	pacman_manager_add_cache_path (pacman, directory);
-
-	/* run the transaction */
-	list = backend_transaction_list_targets (backend);
-	if (list != NULL) {
-		transaction = backend_transaction_run (backend, PACMAN_TRANSACTION_SYNC, flags, list);
-		pacman_list_free_full (list, g_free);
-	}
-
-	pacman_manager_set_cache_paths (pacman, cache_paths);
-	pacman_list_free_full (cache_paths, g_free);
-	return backend_transaction_finished (backend, transaction);
-}
-
-/**
- * backend_download_packages:
- **/
-void
-backend_download_packages (PkBackend *backend, gchar **package_ids, const gchar *directory)
-{
-	g_return_if_fail (backend != NULL);
-	g_return_if_fail (package_ids != NULL);
-	g_return_if_fail (directory != NULL);
-
-	backend_run (backend, PK_STATUS_ENUM_SETUP, backend_download_packages_thread);
-}
-
-static gboolean
-backend_install_files_thread (PkBackend *backend)
-{
-	guint iterator;
-	PacmanList *list = NULL;
-
-	/* FS#5331: use only_trusted */
-	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);
-
-	/* run the transaction */
-	for (iterator = 0; full_paths[iterator] != NULL; ++iterator) {
-		list = pacman_list_add (list, full_paths[iterator]);
-	}
-	if (list != NULL) {
-		transaction = backend_transaction_run (backend, PACMAN_TRANSACTION_INSTALL, flags, list);
-		pacman_list_free (list);
-	}
-
-	return backend_transaction_finished (backend, transaction);
-}
-
-/**
- * backend_install_files:
- **/
-void
-backend_install_files (PkBackend *backend, gboolean only_trusted, gchar **full_paths)
-{
-	g_return_if_fail (backend != NULL);
-	g_return_if_fail (full_paths != NULL);
-
-	backend_run (backend, PK_STATUS_ENUM_SETUP, backend_install_files_thread);
-}
-
-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;
-	/* FS#5331: use only_trusted */
-	PacmanTransaction *transaction = NULL;
-	PacmanTransactionFlags flags = PACMAN_TRANSACTION_FLAGS_NONE;
-
-	g_return_val_if_fail (backend != NULL, FALSE);
-
-	/* run the transaction */
-	list = backend_transaction_list_targets (backend);
-	if (list != NULL) {
-		transaction = backend_transaction_run (backend, PACMAN_TRANSACTION_SYNC, flags, list);
-		pacman_list_free_full (list, g_free);
-	}
-
-	return backend_transaction_finished (backend, transaction);
-}
-
-/**
- * backend_install_packages:
- **/
-void
-backend_install_packages (PkBackend *backend, gboolean only_trusted, gchar **package_ids)
-{
-	g_return_if_fail (backend != NULL);
-	g_return_if_fail (package_ids != NULL);
-
-	backend_run (backend, PK_STATUS_ENUM_SETUP, backend_install_packages_thread);
-}
-
-static gboolean
-backend_simulate_install_packages_thread (PkBackend *backend)
-{
-	PacmanList *list;
-
-	PacmanTransaction *transaction = NULL;
-	PacmanTransactionFlags flags = PACMAN_TRANSACTION_FLAGS_NONE;
-
-	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);
-		pacman_list_free_full (list, g_free);
-
-		if (transaction != NULL) {
-			/* emit packages that would have been installed or removed */
-			backend_transaction_packages (backend, transaction);
-		}
-	}
-
-	return backend_transaction_finished (backend, transaction);
-}
-
-/**
- * backend_simulate_install_packages:
- **/
-void
-backend_simulate_install_packages (PkBackend *backend, gchar **package_ids)
-{
-	g_return_if_fail (backend != NULL);
-	g_return_if_fail (package_ids != NULL);
-
-	backend_run (backend, PK_STATUS_ENUM_SETUP, backend_simulate_install_packages_thread);
-}
-
-static gboolean
-backend_update_packages_thread (PkBackend *backend)
-{
-	PacmanList *list, *asdeps = NULL;
-	/* FS#5331: use only_trusted */
-	PacmanTransaction *transaction = NULL;
-	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, sflags, list);
-		pacman_list_free_full (list, g_free);
-
-		if (transaction != NULL) {
-			const PacmanList *installs, *removes;
-
-			/* 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 (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_list_find_string (replaces, replace)) {
-							if (pacman_package_was_explicitly_installed (remove)) {
-								break;
-							}
-						}
-					}
-
-					/* none of the replaced packages were installed explicitly */
-					if (removes == NULL) {
-						asdeps = pacman_list_add (asdeps, g_strdup (name));
-					}
-				}
-			}
-
-			transaction = backend_transaction_commit (backend, transaction);
-		}
-	}
-
-	/* mark replacements as deps if required */
-	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);
-	}
-
-	return backend_transaction_finished (backend, transaction);
-}
-
-/**
- * backend_update_packages:
- **/
-void
-backend_update_packages (PkBackend *backend, gboolean only_trusted, gchar **package_ids)
-{
-	g_return_if_fail (backend != NULL);
-	g_return_if_fail (package_ids != NULL);
-
-	backend_run (backend, PK_STATUS_ENUM_SETUP, backend_update_packages_thread);
-}
-
-/**
- * backend_simulate_update_packages:
- **/
-void
-backend_simulate_update_packages (PkBackend *backend, gchar **package_ids)
-{
-	g_return_if_fail (backend != NULL);
-	g_return_if_fail (package_ids != NULL);
-
-	backend_run (backend, PK_STATUS_ENUM_SETUP, backend_simulate_install_packages_thread);
-}
diff --git a/backends/pacman/backend-install.h b/backends/pacman/backend-install.h
deleted file mode 100644
index 0685a48..0000000
--- a/backends/pacman/backend-install.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2007 Andreas Obergrusberger <tradiaz at yahoo.de>
- * Copyright (C) 2008, 2009 Valeriy Lyasotskiy <onestep at ukr.net>
- * Copyright (C) 2010 Jonathan Conder <j at skurvy.no-ip.org>
- *
- * 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 <pk-backend.h>
-
-void	 backend_download_packages		(PkBackend	*backend,
-						 gchar		**package_ids,
-						 const gchar	*directory);
-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,
-						 gchar		**package_ids);
-void	 backend_simulate_install_packages	(PkBackend	*backend,
-						 gchar		**package_ids);
-
-void	 backend_update_packages		(PkBackend	*backend,
-						 gboolean	 only_trusted,
-						 gchar		**package_ids);
-void	 backend_simulate_update_packages	(PkBackend	*backend,
-						 gchar		**package_ids);
diff --git a/backends/pacman/backend-packages.c b/backends/pacman/backend-packages.c
deleted file mode 100644
index a00f107..0000000
--- a/backends/pacman/backend-packages.c
+++ /dev/null
@@ -1,345 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2007 Andreas Obergrusberger <tradiaz at yahoo.de>
- * Copyright (C) 2008, 2009 Valeriy Lyasotskiy <onestep at ukr.net>
- * Copyright (C) 2010 Jonathan Conder <j at skurvy.no-ip.org>
- *
- * 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 <pacman.h>
-#include "backend-groups.h"
-#include "backend-pacman.h"
-#include "backend-repos.h"
-#include "backend-packages.h"
-
-gchar *
-pacman_package_make_id (PacmanPackage *package)
-{
-	const gchar *name, *version, *arch, *repo;
-	PacmanDatabase *database;
-
-	g_return_val_if_fail (local_database != NULL, NULL);
-	g_return_val_if_fail (package != NULL, NULL);
-
-	name = pacman_package_get_name (package);
-	version = pacman_package_get_version (package);
-
-	arch = pacman_package_get_arch (package);
-	if (arch == NULL) {
-		arch = "any";
-	}
-
-	/* PackageKit requires "local" for package files and "installed" for installed packages */
-	database = pacman_package_get_database (package);
-	if (database == NULL) {
-		repo = "local";
-	} else if (database == local_database) {
-		repo = "installed";
-	} else {
-		repo = pacman_database_get_name (database);
-	}
-
-	return pk_package_id_build (name, version, arch, repo);
-}
-
-void
-backend_package (PkBackend *backend, PacmanPackage *package, PkInfoEnum info)
-{
-	gchar *package_id;
-
-	g_return_if_fail (backend != NULL);
-	g_return_if_fail (package != NULL);
-
-	/* build and emit package id */
-	package_id = pacman_package_make_id (package);
-	pk_backend_package (backend, info, package_id, pacman_package_get_description (package));
-	g_free (package_id);
-}
-
-PacmanPackage *
-backend_get_package (PkBackend *backend, const gchar *package_id)
-{
-	gchar **package_id_data;
-	const gchar *repo;
-	PacmanDatabase *database;
-	PacmanPackage *package;
-
-	g_return_val_if_fail (pacman != NULL, NULL);
-	g_return_val_if_fail (local_database != NULL, NULL);
-	g_return_val_if_fail (backend != NULL, NULL);
-	g_return_val_if_fail (package_id != NULL, NULL);
-
-	package_id_data = pk_package_id_split (package_id);
-	repo = package_id_data[PK_PACKAGE_ID_DATA];
-
-	/* find the database to search in */
-	if (g_strcmp0 (repo, "installed") == 0) {
-		database = local_database;
-	} else {
-		database = pacman_manager_find_sync_database (pacman, repo);
-	}
-
-	if (database == NULL) {
-		pk_backend_error_code (backend, PK_ERROR_ENUM_REPO_NOT_FOUND, "Could not find repo [%s]", repo);
-		g_strfreev (package_id_data);
-		return NULL;
-	}
-
-	/* find the package in the database */
-	package = pacman_database_find_package (database, package_id_data[PK_PACKAGE_ID_NAME]);
-	if (package == NULL || g_strcmp0 (pacman_package_get_version (package), package_id_data[PK_PACKAGE_ID_VERSION]) != 0) {
-		pk_backend_error_code (backend, PK_ERROR_ENUM_PACKAGE_ID_INVALID, "Could not find package with ID %s", package_id);
-		g_strfreev (package_id_data);
-		return NULL;
-	}
-
-	g_strfreev (package_id_data);
-	return package;
-}
-
-static gboolean
-backend_resolve_thread (PkBackend *backend)
-{
-	guint iterator;
-
-	gchar **package_ids;
-	PkBitfield filters;
-
-	gboolean search_installed;
-	gboolean search_not_installed;
-
-	g_return_val_if_fail (pacman != NULL, FALSE);
-	g_return_val_if_fail (local_database != NULL, FALSE);
-	g_return_val_if_fail (backend != NULL, FALSE);
-
-	package_ids = pk_backend_get_strv (backend, "package_ids");
-	filters = pk_backend_get_uint (backend, "filters");
-
-	g_return_val_if_fail (package_ids != NULL, FALSE);
-
-	search_installed = pk_bitfield_contain (filters, PK_FILTER_ENUM_INSTALLED);
-	search_not_installed = pk_bitfield_contain (filters, PK_FILTER_ENUM_NOT_INSTALLED);
-
-	for (iterator = 0; package_ids[iterator] != NULL; ++iterator) {
-		if (backend_cancelled (backend)) {
-			break;
-		}
-
-		/* find a package with the given id or name */
-		if (pk_package_id_check (package_ids[iterator])) {
-			PacmanPackage *package = backend_get_package (backend, package_ids[iterator]);
-			if (package == NULL) {
-				backend_finished (backend);
-				return FALSE;
-			}
-
-			/* don't emit when not needed */
-			if (pacman_package_get_database (package) == local_database) {
-				if (!search_not_installed) {
-					backend_package (backend, package, PK_INFO_ENUM_INSTALLED);
-				}
-			} else {
-				if (!search_installed) {
-					backend_package (backend, package, PK_INFO_ENUM_AVAILABLE);
-				}
-			}
-		} else {
-			/* find installed packages first */
-			if (!search_not_installed) {
-				PacmanPackage *package = pacman_database_find_package (local_database, package_ids[iterator]);
-
-				if (package != NULL) {
-					backend_package (backend, package, PK_INFO_ENUM_INSTALLED);
-					continue;
-				}
-			}
-
-			if (!search_installed) {
-				const PacmanList *databases;
-
-				for (databases = pacman_manager_get_sync_databases (pacman); databases != NULL; databases = pacman_list_next (databases)) {
-					PacmanDatabase *database = (PacmanDatabase *) pacman_list_get (databases);
-					PacmanPackage *package = pacman_database_find_package (database, package_ids[iterator]);
-
-					if (package != NULL) {
-						backend_package (backend, package, PK_INFO_ENUM_AVAILABLE);
-						break;
-					}
-				}
-			}
-		}
-	}
-
-	backend_finished (backend);
-	return TRUE;
-}
-
-/**
- * backend_resolve:
- **/
-void
-backend_resolve (PkBackend *backend, PkBitfield filters, gchar **package_ids)
-{
-	g_return_if_fail (backend != NULL);
-	g_return_if_fail (package_ids != NULL);
-
-	backend_run (backend, PK_STATUS_ENUM_QUERY, backend_resolve_thread);
-}
-
-static gboolean
-backend_get_details_thread (PkBackend *backend)
-{
-	guint iterator;
-
-	gchar **package_ids;
-
-	g_return_val_if_fail (local_database != NULL, FALSE);
-	g_return_val_if_fail (backend != NULL, FALSE);
-
-	package_ids = pk_backend_get_strv (backend, "package_ids");
-
-	g_return_val_if_fail (package_ids != NULL, FALSE);
-
-	/* collect details about packages */
-	for (iterator = 0; package_ids[iterator] != NULL; ++iterator) {
-		PacmanPackage *package;
-		const PacmanList *list;
-		GString *string;
-
-		gchar *licenses;
-		PkGroupEnum group;
-		const gchar *description, *url;
-		gulong size;
-
-		if (backend_cancelled (backend)) {
-			break;
-		}
-
-		package = backend_get_package (backend, package_ids[iterator]);
-		if (package == NULL) {
-			backend_finished (backend);
-			return FALSE;
-		}
-
-		list = pacman_package_get_licenses (package);
-		if (list == NULL) {
-			string = g_string_new ("unknown");
-		} else {
-			string = g_string_new ((const gchar *) pacman_list_get (list));
-			for (list = pacman_list_next (list); list != NULL; list = pacman_list_next (list)) {
-				/* assume OR although it may not be correct */
-				g_string_append_printf (string, " or %s", (const gchar *) pacman_list_get (list));
-			}
-		}
-
-		group = pk_group_enum_from_string (pacman_package_get_group (package));
-		description = pacman_package_get_description (package);
-		url = pacman_package_get_url (package);
-
-		if (pacman_package_get_database (package) == local_database) {
-			size = pacman_package_get_installed_size (package);
-		} else {
-			size = pacman_package_get_download_size (package);
-		}
-
-		licenses = g_string_free (string, FALSE);
-		pk_backend_details (backend, package_ids[iterator], licenses, group, description, url, size);
-		g_free (licenses);
-	}
-
-	backend_finished (backend);
-	return TRUE;
-}
-
-/**
- * backend_get_details:
- **/
-void
-backend_get_details (PkBackend *backend, gchar **package_ids)
-{
-	g_return_if_fail (backend != NULL);
-	g_return_if_fail (package_ids != NULL);
-
-	backend_run (backend, PK_STATUS_ENUM_QUERY, backend_get_details_thread);
-}
-
-static gboolean
-backend_get_files_thread (PkBackend *backend)
-{
-	guint iterator;
-
-	gchar **package_ids;
-
-	g_return_val_if_fail (pacman != NULL, FALSE);
-	g_return_val_if_fail (backend != NULL, FALSE);
-
-	package_ids = pk_backend_get_strv (backend, "package_ids");
-
-	g_return_val_if_fail (package_ids != NULL, FALSE);
-
-	/* enumerate files provided by package */
-	for (iterator = 0; package_ids[iterator] != NULL; ++iterator) {
-		PacmanPackage *package;
-		const PacmanList *list;
-
-		GString *string;
-		gchar *files;
-
-		if (backend_cancelled (backend)) {
-			break;
-		}
-
-		package = backend_get_package (backend, package_ids[iterator]);
-		if (package == NULL) {
-			backend_finished (backend);
-			return FALSE;
-		}
-
-		list = pacman_package_get_files (package);
-		if (list == NULL) {
-			string = g_string_new ("");
-		} else {
-			const gchar *root_path = pacman_manager_get_root_path (pacman);
-			string = g_string_new (root_path);
-			g_string_append (string, (const gchar *) pacman_list_get (list));
-
-			for (list = pacman_list_next (list); list != NULL; list = pacman_list_next (list)) {
-				g_string_append_printf (string, ";%s%s", root_path, (const gchar *) pacman_list_get (list));
-			}
-		}
-
-		files = g_string_free (string, FALSE);
-		pk_backend_files (backend, package_ids[iterator], files);
-		g_free (files);
-	}
-
-	backend_finished (backend);
-	return TRUE;
-}
-
-/**
- * backend_get_files:
- **/
-void
-backend_get_files (PkBackend *backend, gchar **package_ids)
-{
-	g_return_if_fail (pacman != NULL);
-	g_return_if_fail (backend != NULL);
-
-	backend_run (backend, PK_STATUS_ENUM_QUERY, backend_get_files_thread);
-}
diff --git a/backends/pacman/backend-packages.h b/backends/pacman/backend-packages.h
deleted file mode 100644
index 2064b89..0000000
--- a/backends/pacman/backend-packages.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2007 Andreas Obergrusberger <tradiaz at yahoo.de>
- * Copyright (C) 2008, 2009 Valeriy Lyasotskiy <onestep at ukr.net>
- * Copyright (C) 2010 Jonathan Conder <j at skurvy.no-ip.org>
- *
- * 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 <pacman.h>
-#include <pk-backend.h>
-
-gchar		*pacman_package_make_id	(PacmanPackage	*package);
-void		 backend_package	(PkBackend	*backend,
-					 PacmanPackage	*package,
-					 PkInfoEnum	 info);
-
-PacmanPackage	*backend_get_package	(PkBackend	*backend,
-					 const gchar	*package_id);
-void		 backend_resolve	(PkBackend	*backend,
-					 PkBitfield	 filters,
-					 gchar		**package_ids);
-
-void		 backend_get_details	(PkBackend	*backend,
-					 gchar		**package_ids);
-void		 backend_get_files	(PkBackend	*backend,
-					 gchar		**package_ids);
diff --git a/backends/pacman/backend-pacman.c b/backends/pacman/backend-pacman.c
deleted file mode 100644
index 1276f15..0000000
--- a/backends/pacman/backend-pacman.c
+++ /dev/null
@@ -1,260 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2007 Andreas Obergrusberger <tradiaz at yahoo.de>
- * Copyright (C) 2008, 2009 Valeriy Lyasotskiy <onestep at ukr.net>
- * Copyright (C) 2010 Jonathan Conder <j at skurvy.no-ip.org>
- *
- * 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 "backend-depends.h"
-#include "backend-error.h"
-#include "backend-groups.h"
-#include "backend-install.h"
-#include "backend-packages.h"
-#include "backend-remove.h"
-#include "backend-repos.h"
-#include "backend-search.h"
-#include "backend-transaction.h"
-#include "backend-update.h"
-#include "backend-pacman.h"
-
-PacmanManager *pacman = NULL;
-GCancellable *cancellable = NULL;
-
-static void
-pacman_message_cb (const gchar *domain, GLogLevelFlags level, const gchar *message, gpointer user_data)
-{
-	g_return_if_fail (message != NULL);
-	g_return_if_fail (user_data != NULL);
-
-/* disable due to recursive logging, will fix via improving alpm backend */
-#if 0
-	/* report important output to PackageKit */
-	switch (level) {
-		case G_LOG_LEVEL_WARNING:
-		case G_LOG_LEVEL_MESSAGE:
-			g_warning ("pacman: %s", message);
-			backend_message ((PkBackend *) user_data, message);
-			break;
-
-		case G_LOG_LEVEL_INFO:
-		case G_LOG_LEVEL_DEBUG:
-			g_debug ("pacman: %s", message);
-			break;
-
-		default:
-			g_warning ("pacman: %s", message);
-			break;
-	}
-#endif
-}
-
-/**
- * backend_initialize:
- **/
-static void
-backend_initialize (PkBackend *backend)
-{
-	GError *error = NULL;
-	GLogLevelFlags flags = G_LOG_LEVEL_MASK;
-
-	g_return_if_fail (backend != NULL);
-
-	/* handle output from pacman */
-	g_log_set_handler ("Pacman", flags, pacman_message_cb, backend);
-
-	/* PATH needs to be set for install scriptlets */
-	g_setenv ("PATH", PACMAN_DEFAULT_PATH, FALSE);
-
-	g_debug ("pacman: initializing");
-
-	/* initialize pacman-glib */
-	pacman = pacman_manager_get (&error);
-	if (pacman == NULL) {
-		g_error ("pacman: %s", error->message);
-		g_error_free (error);
-		return;
-	}
-
-	/* configure and disable the relevant databases */
-	if (!backend_initialize_databases (backend, &error)) {
-		g_error ("pacman: %s", error->message);
-		g_error_free (error);
-		return;
-	}
-
-	/* read the group mapping from a config file */
-	if (!backend_initialize_groups (backend, &error)) {
-		g_error ("pacman: %s", error->message);
-		g_error_free (error);
-		return;
-	}
-
-	/* setup better download progress reporting */
-	if (!backend_initialize_downloads (backend, &error)) {
-		g_error ("pacman: %s", error->message);
-		g_error_free (error);
-		return;
-	}
-}
-
-/**
- * backend_destroy:
- **/
-static void
-backend_destroy (PkBackend *backend)
-{
-	g_return_if_fail (backend != NULL);
-
-	g_debug ("pacman: cleaning up");
-
-	backend_destroy_downloads (backend);
-	backend_destroy_groups (backend);
-	backend_destroy_databases (backend);
-
-	if (pacman != NULL) {
-		g_object_unref (pacman);
-	}
-}
-
-/**
- * backend_get_filters:
- **/
-static PkBitfield
-backend_get_filters (PkBackend *backend)
-{
-	g_return_val_if_fail (backend != NULL, 0);
-
-	return pk_bitfield_from_enums (PK_FILTER_ENUM_INSTALLED, -1);
-}
-
-/**
- * backend_get_mime_types:
- **/
-static gchar *
-backend_get_mime_types (PkBackend *backend)
-{
-	g_return_val_if_fail (backend != NULL, NULL);
-
-	/* packages currently use .pkg.tar.gz and .pkg.tar.xz */
-	return g_strdup ("application/x-compressed-tar;application/x-xz-compressed-tar");
-}
-
-void
-backend_run (PkBackend *backend, PkStatusEnum status, PkBackendThreadFunc func)
-{
-	g_return_if_fail (backend != NULL);
-	g_return_if_fail (func != NULL);
-
-	if (cancellable != NULL) {
-		g_warning ("pacman: cancellable was not NULL");
-		g_object_unref (cancellable);
-	}
-	cancellable = g_cancellable_new ();
-	pk_backend_set_allow_cancel (backend, TRUE);
-
-	pk_backend_set_status (backend, status);
-	pk_backend_thread_create (backend, func);
-}
-
-/**
- * backend_cancel:
- **/
-static void
-backend_cancel (PkBackend *backend)
-{
-	g_return_if_fail (backend != NULL);
-
-	if (cancellable != NULL) {
-		g_cancellable_cancel (cancellable);
-	}
-}
-
-gboolean
-backend_cancelled (PkBackend *backend)
-{
-	g_return_val_if_fail (cancellable != NULL, FALSE);
-	g_return_val_if_fail (backend != NULL, FALSE);
-
-	if (g_cancellable_is_cancelled (cancellable)) {
-		pk_backend_set_status (backend, PK_STATUS_ENUM_CANCEL);
-		return TRUE;
-	} else {
-		return FALSE;
-	}
-}
-
-void
-backend_finished (PkBackend *backend)
-{
-	g_return_if_fail (backend != NULL);
-
-	pk_backend_set_allow_cancel (backend, FALSE);
-	if (cancellable != NULL) {
-		g_object_unref (cancellable);
-		cancellable = NULL;
-	}
-
-	pk_backend_thread_finished (backend);
-}
-
-PK_BACKEND_OPTIONS (
-	"pacman",				/* description */
-	"Jonathan Conder <j at skurvy.no-ip.org>",	/* author */
-	backend_initialize,			/* initialize */
-	backend_destroy,			/* destroy */
-	backend_get_groups,			/* get_groups */
-	backend_get_filters,			/* get_filters */
-	NULL,					/* get_roles */
-	backend_get_mime_types,			/* get_mime_types */
-	backend_cancel,				/* cancel */
-	backend_download_packages,		/* download_packages */
-	NULL,					/* get_categories */
-	backend_get_depends,			/* get_depends */
-	backend_get_details,			/* get_details */
-	NULL,					/* get_distro_upgrades */
-	backend_get_files,			/* get_files */
-	backend_get_packages,			/* get_packages */
-	backend_get_repo_list,			/* get_repo_list */
-	backend_get_requires,			/* get_requires */
-	backend_get_update_detail,		/* get_update_detail */
-	backend_get_updates,			/* get_updates */
-	backend_install_files,			/* install_files */
-	backend_install_packages,		/* install_packages */
-	NULL,					/* install_signature */
-	backend_refresh_cache,			/* refresh_cache */
-	backend_remove_packages,		/* remove_packages */
-	backend_repo_enable,			/* repo_enable */
-	NULL,					/* repo_set_data */
-	backend_resolve,			/* resolve */
-	NULL,					/* rollback */
-	backend_search_details,			/* search_details */
-	backend_search_files,			/* search_files */
-	backend_search_groups,			/* search_groups */
-	backend_search_names,			/* search_names */
-	backend_update_packages,		/* update_packages */
-	NULL,					/* update_system */
-	backend_what_provides,			/* what_provides */
-	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 */
-	NULL,					/* upgrade_packages */
-	NULL,					/* transaction_start */
-	NULL					/* transaction_stop */
-);
diff --git a/backends/pacman/backend-pacman.h b/backends/pacman/backend-pacman.h
deleted file mode 100644
index 0d7b89b..0000000
--- a/backends/pacman/backend-pacman.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2007 Andreas Obergrusberger <tradiaz at yahoo.de>
- * Copyright (C) 2008, 2009 Valeriy Lyasotskiy <onestep at ukr.net>
- * Copyright (C) 2010 Jonathan Conder <j at skurvy.no-ip.org>
- *
- * 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 <gio/gio.h>
-#include <pacman.h>
-#include <pk-backend.h>
-
-extern PacmanManager	*pacman;
-extern GCancellable	*cancellable;
-
-void		 backend_run		(PkBackend		*backend,
-					 PkStatusEnum		 status,
-					 PkBackendThreadFunc	 func);
-gboolean	 backend_cancelled	(PkBackend		*backend);
-void		 backend_finished	(PkBackend		*backend);
diff --git a/backends/pacman/backend-remove.c b/backends/pacman/backend-remove.c
deleted file mode 100644
index b31218b..0000000
--- a/backends/pacman/backend-remove.c
+++ /dev/null
@@ -1,142 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2007 Andreas Obergrusberger <tradiaz at yahoo.de>
- * Copyright (C) 2008, 2009 Valeriy Lyasotskiy <onestep at ukr.net>
- * Copyright (C) 2010 Jonathan Conder <j at skurvy.no-ip.org>
- *
- * 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 <pacman.h>
-#include "backend-error.h"
-#include "backend-packages.h"
-#include "backend-pacman.h"
-#include "backend-transaction.h"
-#include "backend-remove.h"
-
-static PacmanList *
-backend_remove_list_targets (PkBackend *backend)
-{
-	gchar **package_ids;
-	guint iterator;
-	PacmanList *list = NULL;
-
-	g_return_val_if_fail (backend != NULL, NULL);
-
-	package_ids = pk_backend_get_strv (backend, "package_ids");
-
-	g_return_val_if_fail (package_ids != NULL, NULL);
-
-	for (iterator = 0; package_ids[iterator] != NULL; ++iterator) {
-		gchar **package_id_data = pk_package_id_split (package_ids[iterator]);
-		list = pacman_list_add (list, g_strdup (package_id_data[PK_PACKAGE_ID_NAME]));
-		g_strfreev (package_id_data);
-	}
-
-	return list;
-}
-
-static gboolean
-backend_remove_packages_thread (PkBackend *backend)
-{
-	PacmanList *list;
-	gboolean allow_deps;
-	gboolean autoremove;
-
-	PacmanTransaction *transaction = NULL;
-	PacmanTransactionFlags flags = PACMAN_TRANSACTION_FLAGS_NONE;
-
-	g_return_val_if_fail (backend != NULL, FALSE);
-
-	allow_deps = pk_backend_get_bool (backend, "allow_deps");
-	autoremove = pk_backend_get_bool (backend, "autoremove");
-
-	/* remove packages that depend on those to be removed */
-	if (allow_deps) {
-		flags |= PACMAN_TRANSACTION_FLAGS_REMOVE_CASCADE;
-	}
-	/* remove unneeded packages that were required by those to be removed */
-	if (autoremove) {
-		flags |= PACMAN_TRANSACTION_FLAGS_REMOVE_RECURSIVE;
-	}
-
-	/* run the transaction */
-	list = backend_remove_list_targets (backend);
-	if (list != NULL) {
-		transaction = backend_transaction_run (backend, PACMAN_TRANSACTION_REMOVE, flags, list);
-		pacman_list_free_full (list, g_free);
-	}
-
-	return backend_transaction_finished (backend, transaction);
-}
-
-/**
- * backend_remove_packages:
- **/
-void
-backend_remove_packages (PkBackend *backend, gchar **package_ids, gboolean allow_deps, gboolean autoremove)
-{
-	g_return_if_fail (backend != NULL);
-	g_return_if_fail (package_ids != NULL);
-
-	backend_run (backend, PK_STATUS_ENUM_SETUP, backend_remove_packages_thread);
-}
-
-static gboolean
-backend_simulate_remove_packages_thread (PkBackend *backend)
-{
-	PacmanList *list;
-	gboolean autoremove;
-
-	PacmanTransaction *transaction = NULL;
-	PacmanTransactionFlags flags = PACMAN_TRANSACTION_FLAGS_REMOVE_CASCADE;
-
-	g_return_val_if_fail (backend != NULL, FALSE);
-
-	autoremove = pk_backend_get_bool (backend, "autoremove");
-
-	/* remove unneeded packages that were required by those to be removed */
-	if (autoremove) {
-		flags |= PACMAN_TRANSACTION_FLAGS_REMOVE_RECURSIVE;
-	}
-
-	/* prepare the transaction */
-	list = backend_remove_list_targets (backend);
-	if (list != NULL) {
-		transaction = backend_transaction_simulate (backend, PACMAN_TRANSACTION_REMOVE, flags, list);
-		pacman_list_free_full (list, g_free);
-
-		if (transaction != NULL) {
-			/* emit packages that would have been installed or removed */
-			backend_transaction_packages (backend, transaction);
-		}
-	}
-
-	return backend_transaction_finished (backend, transaction);
-}
-
-/**
- * backend_simulate_remove_packages:
- **/
-void
-backend_simulate_remove_packages (PkBackend *backend, gchar **package_ids, gboolean autoremove)
-{
-	g_return_if_fail (backend != NULL);
-	g_return_if_fail (package_ids != NULL);
-
-	backend_run (backend, PK_STATUS_ENUM_SETUP, backend_simulate_remove_packages_thread);
-}
diff --git a/backends/pacman/backend-remove.h b/backends/pacman/backend-remove.h
deleted file mode 100644
index 90f0374..0000000
--- a/backends/pacman/backend-remove.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2007 Andreas Obergrusberger <tradiaz at yahoo.de>
- * Copyright (C) 2008, 2009 Valeriy Lyasotskiy <onestep at ukr.net>
- * Copyright (C) 2010 Jonathan Conder <j at skurvy.no-ip.org>
- *
- * 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 <pk-backend.h>
-
-void	 backend_remove_packages		(PkBackend	*backend,
-						 gchar		**package_ids,
-						 gboolean	 allow_deps,
-						 gboolean	 autoremove);
-void	 backend_simulate_remove_packages	(PkBackend	*backend,
-						 gchar		**package_ids,
-						 gboolean	 autoremove);
diff --git a/backends/pacman/backend-repos.c b/backends/pacman/backend-repos.c
deleted file mode 100644
index 8ef23d9..0000000
--- a/backends/pacman/backend-repos.c
+++ /dev/null
@@ -1,298 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2007 Andreas Obergrusberger <tradiaz at yahoo.de>
- * Copyright (C) 2008, 2009 Valeriy Lyasotskiy <onestep at ukr.net>
- * Copyright (C) 2010 Jonathan Conder <j at skurvy.no-ip.org>
- *
- * 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 "backend-error.h"
-#include "backend-pacman.h"
-#include "backend-repos.h"
-
-PacmanDatabase *local_database = NULL;
-static GHashTable *disabled_repos = NULL;
-
-static GHashTable *
-disabled_repos_new (GError **error)
-{
-	GHashTable *disabled;
-	GFile *file;
-
-	GFileInputStream *file_stream;
-	GDataInputStream *data_stream;
-
-	gchar *line;
-	GError *e = NULL;
-
-	g_debug ("pacman: reading disabled repos from %s", PACMAN_REPO_LIST);
-	file = g_file_new_for_path (PACMAN_REPO_LIST);
-	file_stream = g_file_read (file, NULL, &e);
-
-	if (file_stream == NULL) {
-		g_object_unref (file);
-		g_propagate_error (error, e);
-		return NULL;
-	}
-
-	disabled = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
-	data_stream = g_data_input_stream_new (G_INPUT_STREAM (file_stream));
-
-	/* read disabled repos line by line, ignoring comments */
-	while ((line = g_data_input_stream_read_line (data_stream, NULL, NULL, &e)) != NULL) {
-		g_strstrip (line);
-
-		if (*line == '\0' || *line == '#') {
-			g_free (line);
-			continue;
-		}
-
-		g_hash_table_insert (disabled, line, GINT_TO_POINTER (1));
-	}
-
-	g_object_unref (data_stream);
-	g_object_unref (file_stream);
-	g_object_unref (file);
-
-	if (e != NULL) {
-		g_hash_table_unref (disabled);
-		g_propagate_error (error, e);
-		return NULL;
-	} else {
-		return disabled;
-	}
-}
-
-static gboolean
-disabled_repos_configure (GHashTable *disabled, GError **error)
-{
-	const PacmanList *databases;
-
-	g_return_val_if_fail (pacman != NULL, FALSE);
-
-	g_debug ("pacman: reading config from %s", PACMAN_CONFIG_FILE);
-
-	/* read configuration from pacman config file */
-	if (!pacman_manager_configure (pacman, PACMAN_CONFIG_FILE, error)) {
-		return FALSE;
-	}
-
-	local_database = pacman_manager_get_local_database (pacman);
-
-	/* disable disabled repos */
-	for (databases = pacman_manager_get_sync_databases (pacman); databases != NULL; databases = pacman_list_next (databases)) {
-		PacmanDatabase *database = (PacmanDatabase *) pacman_list_get (databases);
-		const gchar *repo = pacman_database_get_name (database);
-
-		if (g_hash_table_lookup (disabled, repo) != NULL) {
-			if (!pacman_manager_unregister_database (pacman, database, error)) {
-				return FALSE;
-			}
-
-			/* start again as the list gets invalidated */
-			databases = pacman_manager_get_sync_databases (pacman);
-		}
-	}
-
-	return TRUE;
-}
-
-static void
-disabled_repos_free (GHashTable *disabled)
-{
-	GHashTableIter iter;
-	GFile *file;
-
-	GFileOutputStream *file_stream;
-	GDataOutputStream *data_stream;
-
-	const gchar *line = PACMAN_REPO_LIST_HEADER "\n";
-
-	g_return_if_fail (disabled != NULL);
-
-	g_debug ("pacman: storing disabled repos in %s", PACMAN_REPO_LIST);
-	file = g_file_new_for_path (PACMAN_REPO_LIST);
-	file_stream = g_file_replace (file, NULL, FALSE, G_FILE_CREATE_NONE, NULL, NULL);
-
-	if (file_stream == NULL) {
-		g_object_unref (file);
-		g_hash_table_unref (disabled);
-		return;
-	}
-
-	g_hash_table_iter_init (&iter, disabled);
-	data_stream = g_data_output_stream_new (G_OUTPUT_STREAM (file_stream));
-
-	/* write header, then all disabled repos line by line */
-	if (g_data_output_stream_put_string (data_stream, line, NULL, NULL)) {
-		while (g_hash_table_iter_next (&iter, (gpointer *) &line, NULL) &&
-			g_data_output_stream_put_string (data_stream, line, NULL, NULL) &&
-			g_data_output_stream_put_string (data_stream, "\n", NULL, NULL));
-	}
-
-	g_object_unref (data_stream);
-	g_object_unref (file_stream);
-	g_object_unref (file);
-	g_hash_table_unref (disabled);
-}
-
-gboolean
-backend_initialize_databases (PkBackend *backend, GError **error)
-{
-	g_return_val_if_fail (pacman != NULL, FALSE);
-	g_return_val_if_fail (backend != NULL, FALSE);
-
-	disabled_repos = disabled_repos_new (error);
-	if (disabled_repos == NULL) {
-		return FALSE;
-	}
-
-	if (!disabled_repos_configure (disabled_repos, error)) {
-		return FALSE;
-	}
-
-	return TRUE;
-}
-
-void
-backend_destroy_databases (PkBackend *backend)
-{
-	g_return_if_fail (backend != NULL);
-
-	if (disabled_repos != NULL) {
-		disabled_repos_free (disabled_repos);
-	}
-}
-
-static gboolean
-backend_get_repo_list_thread (PkBackend *backend)
-{
-	const PacmanList *databases;
-	GHashTableIter iter;
-	gpointer key, value;
-
-	g_return_val_if_fail (pacman != NULL, FALSE);
-	g_return_val_if_fail (disabled_repos != NULL, FALSE);
-	g_return_val_if_fail (backend != NULL, FALSE);
-
-	/* emit enabled repos */
-	for (databases = pacman_manager_get_sync_databases (pacman); databases != NULL; databases = pacman_list_next (databases)) {
-		PacmanDatabase *database = (PacmanDatabase *) pacman_list_get (databases);
-		const gchar *repo = pacman_database_get_name (database);
-
-		if (backend_cancelled (backend)) {
-			break;
-		} else {
-			pk_backend_repo_detail (backend, repo, repo, TRUE);
-		}
-	}
-
-	/* emit disabled repos */
-	g_hash_table_iter_init (&iter, disabled_repos);
-	while (g_hash_table_iter_next (&iter, &key, &value)) {
-		const gchar *repo = (const gchar *) key;
-
-		if (backend_cancelled (backend)) {
-			break;
-		} else {
-			pk_backend_repo_detail (backend, repo, repo, FALSE);
-		}
-	}
-
-	backend_finished (backend);
-	return TRUE;
-}
-
-/**
- * backend_get_repo_list:
- **/
-void
-backend_get_repo_list (PkBackend *backend, PkBitfield filters)
-{
-	g_return_if_fail (backend != NULL);
-
-	backend_run (backend, PK_STATUS_ENUM_QUERY, backend_get_repo_list_thread);
-}
-
-static gboolean
-backend_repo_enable_thread (PkBackend *backend)
-{
-	GError *error = NULL;
-
-	const gchar *repo;
-	gboolean enabled;
-
-	g_return_val_if_fail (pacman != NULL, FALSE);
-	g_return_val_if_fail (disabled_repos != NULL, FALSE);
-	g_return_val_if_fail (backend != NULL, FALSE);
-
-	repo = pk_backend_get_string (backend, "repo_id");
-	enabled = pk_backend_get_bool (backend, "enabled");
-
-	g_return_val_if_fail (repo != NULL, FALSE);
-
-	if (enabled) {
-		/* check that repo is indeed disabled */
-		if (g_hash_table_remove (disabled_repos, repo)) {
-			/* reload configuration to preserve the correct order */
-			if (disabled_repos_configure (disabled_repos, &error)) {
-				pk_backend_repo_list_changed (backend);
-			} else {
-				backend_error (backend, error);
-				pk_backend_thread_finished (backend);
-				return FALSE;
-			}
-		} else {
-			pk_backend_error_code (backend, PK_ERROR_ENUM_REPO_NOT_FOUND, "Could not find repo [%s]", repo);
-			pk_backend_thread_finished (backend);
-			return FALSE;
-		}
-	} else {
-		PacmanDatabase *database = pacman_manager_find_sync_database (pacman, repo);
-
-		if (database != NULL) {
-			if (pacman_manager_unregister_database (pacman, database, &error)) {
-				g_hash_table_insert (disabled_repos, g_strdup (repo), GINT_TO_POINTER (1));
-			} else {
-				backend_error (backend, error);
-				pk_backend_thread_finished (backend);
-				return FALSE;
-			}
-		} else {
-			pk_backend_error_code (backend, PK_ERROR_ENUM_REPO_NOT_FOUND, "Could not find repo [%s]", repo);
-			pk_backend_thread_finished (backend);
-			return FALSE;
-		}
-	}
-
-	pk_backend_thread_finished (backend);
-	return TRUE;
-}
-
-/**
- * backend_repo_enable:
- **/
-void
-backend_repo_enable (PkBackend *backend, const gchar *repo, gboolean enabled)
-{
-	g_return_if_fail (backend != NULL);
-	g_return_if_fail (repo != NULL);
-
-	pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
-	pk_backend_thread_create (backend, backend_repo_enable_thread);
-}
diff --git a/backends/pacman/backend-repos.h b/backends/pacman/backend-repos.h
deleted file mode 100644
index 7faba0c..0000000
--- a/backends/pacman/backend-repos.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2007 Andreas Obergrusberger <tradiaz at yahoo.de>
- * Copyright (C) 2008, 2009 Valeriy Lyasotskiy <onestep at ukr.net>
- * Copyright (C) 2010 Jonathan Conder <j at skurvy.no-ip.org>
- *
- * 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 <pacman.h>
-#include <pk-backend.h>
-
-extern PacmanDatabase	*local_database;
-
-gboolean	 backend_initialize_databases	(PkBackend	*backend,
-						 GError		**error);
-void		 backend_destroy_databases	(PkBackend	*backend);
-
-void		 backend_get_repo_list		(PkBackend	*backend,
-						 PkBitfield	 filters);
-void		 backend_repo_enable		(PkBackend	*backend,
-						 const gchar	*repo,
-						 gboolean	 enabled);
diff --git a/backends/pacman/backend-search.c b/backends/pacman/backend-search.c
deleted file mode 100644
index 32b4df8..0000000
--- a/backends/pacman/backend-search.c
+++ /dev/null
@@ -1,479 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2007 Andreas Obergrusberger <tradiaz at yahoo.de>
- * Copyright (C) 2008, 2009 Valeriy Lyasotskiy <onestep at ukr.net>
- * Copyright (C) 2010 Jonathan Conder <j at skurvy.no-ip.org>
- *
- * 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 <string.h>
-#include <pacman.h>
-#include "backend-error.h"
-#include "backend-groups.h"
-#include "backend-packages.h"
-#include "backend-pacman.h"
-#include "backend-repos.h"
-#include "backend-search.h"
-
-static gpointer
-backend_pattern_needle (const gchar *needle, GError **error)
-{
-	return (gpointer) needle;
-}
-
-static gpointer
-backend_pattern_regex (const gchar *needle, GError **error)
-{
-	gchar *pattern;
-	GRegex *regex;
-
-	g_return_val_if_fail (needle != NULL, NULL);
-
-	pattern = g_regex_escape_string (needle, -1);
-	regex = g_regex_new (pattern, G_REGEX_CASELESS, 0, error);
-	g_free (pattern);
-
-	return regex;
-}
-
-static gpointer
-backend_pattern_chroot (const gchar *needle, GError **error)
-{
-	g_return_val_if_fail (pacman != NULL, FALSE);
-	g_return_val_if_fail (needle != NULL, NULL);
-
-	if (G_IS_DIR_SEPARATOR (*needle)) {
-		const gchar *file = needle, *path = pacman_manager_get_root_path (pacman);
-
-		/* adjust needle to the correct prefix */
-		while (*file++ == *path++) {
-			if (*path == '\0') {
-				needle = file - 1;
-				break;
-			} else if (*file == '\0') {
-				break;
-			}
-		}
-	}
-
-	return (gpointer) needle;
-}
-
-static gboolean
-backend_match_all (PacmanPackage *package, gpointer pattern)
-{
-	g_return_val_if_fail (package != NULL, FALSE);
-	g_return_val_if_fail (pattern != NULL, FALSE);
-
-	/* match all packages */
-	return TRUE;
-}
-
-static gboolean
-backend_match_details (PacmanPackage *package, gpointer pattern)
-{
-	const gchar *description;
-	PacmanDatabase *database;
-	const PacmanList *licenses;
-
-	GRegex *regex = (GRegex *) pattern;
-
-	g_return_val_if_fail (package != NULL, FALSE);
-	g_return_val_if_fail (regex != NULL, FALSE);
-
-	/* match the name first... */
-	if (g_regex_match (regex, pacman_package_get_name (package), 0, NULL)) {
-		return TRUE;
-	}
-
-	/* ... then the description... */
-	description = pacman_package_get_description (package);
-	if (description != NULL && g_regex_match (regex, description, 0, NULL)) {
-		return TRUE;
-	}
-
-	/* ... then the database... */
-	database = pacman_package_get_database (package);
-	if (database != NULL && g_regex_match (regex, pacman_database_get_name (database), G_REGEX_MATCH_ANCHORED, NULL)) {
-		return TRUE;
-	}
-
-	/* ... then the licenses */
-	for (licenses = pacman_package_get_licenses (package); licenses != NULL; licenses = pacman_list_next (licenses)) {
-		const gchar *license = (const gchar *) pacman_list_get (licenses);
-		if (g_regex_match (regex, license, G_REGEX_MATCH_ANCHORED, NULL)) {
-			return TRUE;
-		}
-	}
-
-	return FALSE;
-}
-
-static gboolean
-backend_match_file (PacmanPackage *package, gpointer pattern)
-{
-	const PacmanList *files;
-	const gchar *needle = (const gchar *) pattern;
-
-	g_return_val_if_fail (package != NULL, FALSE);
-	g_return_val_if_fail (needle != NULL, FALSE);
-
-	/* match any file the package contains */
-	if (G_IS_DIR_SEPARATOR (*needle)) {
-		for (files = pacman_package_get_files (package); files != NULL; files = pacman_list_next (files)) {
-			const gchar *file = (const gchar *) pacman_list_get (files);
-
-			/* match the full path of file */
-			if (g_strcmp0 (file, needle + 1) == 0) {
-				return TRUE;
-			}
-		}
-	} else {
-		for (files = pacman_package_get_files (package); files != NULL; files = pacman_list_next (files)) {
-			const gchar *file = (const gchar *) pacman_list_get (files);
-			file = strrchr (file, G_DIR_SEPARATOR);
-
-			/* match the basename of file */
-			if (file != NULL && g_strcmp0 (file + 1, needle) == 0) {
-				return TRUE;
-			}
-		}
-	}
-
-	return FALSE;
-}
-
-static gboolean
-backend_match_group (PacmanPackage *package, gpointer pattern)
-{
-	const gchar *needle = (const gchar *) pattern;
-
-	g_return_val_if_fail (package != NULL, FALSE);
-	g_return_val_if_fail (needle != NULL, FALSE);
-
-	/* match the group the package is in */
-	return g_strcmp0 (needle, pacman_package_get_group (package)) == 0;
-}
-
-static gboolean
-backend_match_name (PacmanPackage *package, gpointer pattern)
-{
-	GRegex *regex = (GRegex *) pattern;
-
-	g_return_val_if_fail (package != NULL, FALSE);
-	g_return_val_if_fail (regex != NULL, FALSE);
-
-	/* match the name of the package */
-	return g_regex_match (regex, pacman_package_get_name (package), 0, NULL);
-}
-
-static gboolean
-backend_match_provides (PacmanPackage *package, gpointer pattern)
-{
-	/* TODO: implement GStreamer codecs, Pango fonts, etc. */
-	const PacmanList *provides;
-
-	g_return_val_if_fail (package != NULL, FALSE);
-	g_return_val_if_fail (pattern != NULL, FALSE);
-
-	/* match features provided by package */
-	for (provides = pacman_package_get_provides (package); provides != NULL; provides = pacman_list_next (provides)) {
-		const gchar *needle = (const gchar *) pattern, *name = (const gchar *) pacman_list_get (provides);
-
-		while (*needle == *name && *needle != '\0') {
-			++needle;
-			++name;
-		}
-
-		if (*needle == '\0' && (*name == '\0' || *name == '=')) {
-			return TRUE;
-		}
-	}
-
-	return FALSE;
-}
-
-typedef enum {
-	SEARCH_TYPE_ALL,
-	SEARCH_TYPE_DETAILS,
-	SEARCH_TYPE_FILES,
-	SEARCH_TYPE_GROUP,
-	SEARCH_TYPE_NAME,
-	SEARCH_TYPE_PROVIDES,
-	SEARCH_TYPE_LAST
-} SearchType;
-
-typedef gpointer (*PatternFunc) (const gchar *needle, GError **error);
-typedef gboolean (*MatchFunc) (PacmanPackage *package, gpointer pattern);
-
-static PatternFunc pattern_funcs[] = {
-	backend_pattern_needle,
-	backend_pattern_regex,
-	backend_pattern_chroot,
-	backend_pattern_needle,
-	backend_pattern_regex,
-	backend_pattern_needle
-};
-
-static GDestroyNotify pattern_frees[] = {
-	NULL,
-	(GDestroyNotify) g_regex_unref,
-	NULL,
-	NULL,
-	(GDestroyNotify) g_regex_unref,
-	NULL
-};
-
-static MatchFunc match_funcs[] = {
-	backend_match_all,
-	backend_match_details,
-	backend_match_file,
-	backend_match_group,
-	backend_match_name,
-	backend_match_provides
-};
-
-static gboolean
-pacman_package_is_installed (PacmanPackage *package)
-{
-	PacmanPackage *installed;
-
-	g_return_val_if_fail (local_database != NULL, FALSE);
-	g_return_val_if_fail (package != NULL, FALSE);
-
-	/* find an installed package with the same name */
-	installed = pacman_database_find_package (local_database, pacman_package_get_name (package));
-	if (installed == NULL) {
-		return FALSE;
-	}
-
-	/* make sure the installed version is the same */
-	if (pacman_package_compare_version (pacman_package_get_version (installed), pacman_package_get_version (package)) != 0) {
-		return FALSE;
-	}
-
-	/* make sure the installed arch is the same */
-	if (g_strcmp0 (pacman_package_get_arch (installed), pacman_package_get_arch (package)) != 0) {
-		return FALSE;
-	}
-
-	return TRUE;
-}
-
-static void
-backend_search_database (PkBackend *backend, PacmanDatabase *database, MatchFunc match, const PacmanList *patterns)
-{
-	const PacmanList *packages, *list;
-
-	g_return_if_fail (backend != NULL);
-	g_return_if_fail (database != NULL);
-	g_return_if_fail (match != NULL);
-
-	/* emit packages that match all search terms */
-	for (packages = pacman_database_get_packages (database); packages != NULL; packages = pacman_list_next (packages)) {
-		PacmanPackage *package = (PacmanPackage *) pacman_list_get (packages);
-
-		if (backend_cancelled (backend)) {
-			break;
-		}
-
-		for (list = patterns; list != NULL; list = pacman_list_next (list)) {
-			if (!match (package, pacman_list_get (list))) {
-				break;
-			}
-		}
-
-		/* all search terms matched */
-		if (list == NULL) {
-			if (database == local_database) {
-				backend_package (backend, package, PK_INFO_ENUM_INSTALLED);
-			} else if (!pacman_package_is_installed (package)) {
-				backend_package (backend, package, PK_INFO_ENUM_AVAILABLE);
-			}
-		}
-	}
-}
-
-static gboolean
-backend_search_thread (PkBackend *backend)
-{
-	gchar **search;
-	SearchType search_type;
-
-	PatternFunc pattern_func;
-	GDestroyNotify pattern_free;
-	MatchFunc match_func;
-
-	PkBitfield filters;
-	gboolean search_installed;
-	gboolean search_not_installed;
-
-	guint iterator;
-	PacmanList *patterns = NULL;
-	GError *error = NULL;
-
-	g_return_val_if_fail (pacman != NULL, FALSE);
-	g_return_val_if_fail (local_database != NULL, FALSE);
-	g_return_val_if_fail (backend != NULL, FALSE);
-
-	search = pk_backend_get_strv (backend, "search");
-	search_type = (SearchType) pk_backend_get_uint (backend, "search-type");
-
-	g_return_val_if_fail (search != NULL, FALSE);
-	g_return_val_if_fail (search_type < SEARCH_TYPE_LAST, FALSE);
-
-	pattern_func = pattern_funcs[search_type];
-	pattern_free = pattern_frees[search_type];
-	match_func = match_funcs[search_type];
-
-	g_return_val_if_fail (pattern_func != NULL, FALSE);
-	g_return_val_if_fail (match_func != NULL, FALSE);
-
-	filters = pk_backend_get_uint (backend, "filters");
-	search_installed = pk_bitfield_contain (filters, PK_FILTER_ENUM_INSTALLED);
-	search_not_installed = pk_bitfield_contain (filters, PK_FILTER_ENUM_NOT_INSTALLED);
-
-	/* convert search terms to the pattern requested */
-	for (iterator = 0; search[iterator] != NULL; ++iterator) {
-		gpointer pattern = pattern_func (search[iterator], &error);
-
-		if (pattern != NULL) {
-			patterns = pacman_list_add (patterns, pattern);
-		} else {
-			backend_error (backend, error);
-			if (pattern_free != NULL) {
-				pacman_list_free_full (patterns, pattern_free);
-			} else {
-				pacman_list_free (patterns);
-			}
-			backend_finished (backend);
-			return FALSE;
-		}
-	}
-
-	/* find installed packages first */
-	if (!search_not_installed) {
-		backend_search_database (backend, local_database, match_func, patterns);
-	}
-
-	if (!search_installed) {
-		const PacmanList *databases;
-
-		for (databases = pacman_manager_get_sync_databases (pacman); databases != NULL; databases = pacman_list_next (databases)) {
-			PacmanDatabase *database = (PacmanDatabase *) pacman_list_get (databases);
-
-			if (backend_cancelled (backend)) {
-				break;
-			}
-
-			backend_search_database (backend, database, match_func, patterns);
-		}
-	}
-
-	if (pattern_free != NULL) {
-		pacman_list_free_full (patterns, pattern_free);
-	} else {
-		pacman_list_free (patterns);
-	}
-	backend_finished (backend);
-	return TRUE;
-}
-
-/**
- * backend_get_packages:
- **/
-void
-backend_get_packages (PkBackend	*backend, PkBitfield filters)
-{
-	g_return_if_fail (backend != NULL);
-
-	/* provide a dummy needle */
-	pk_backend_set_strv (backend, "search", g_strsplit ("", ";", 0));
-
-	pk_backend_set_uint (backend, "search-type", SEARCH_TYPE_ALL);
-	backend_run (backend, PK_STATUS_ENUM_QUERY, backend_search_thread);
-}
-
-/**
- * backend_search_details:
- **/
-void
-backend_search_details (PkBackend *backend, PkBitfield filters, gchar **values)
-{
-	g_return_if_fail (backend != NULL);
-	g_return_if_fail (values != NULL);
-
-	pk_backend_set_uint (backend, "search-type", SEARCH_TYPE_DETAILS);
-	backend_run (backend, PK_STATUS_ENUM_QUERY, backend_search_thread);
-}
-
-/**
- * backend_search_files:
- **/
-void
-backend_search_files (PkBackend *backend, PkBitfield filters, gchar **values)
-{
-	g_return_if_fail (backend != NULL);
-	g_return_if_fail (values != NULL);
-
-	/* speed up search by restricting it to local database */
-	pk_bitfield_add (filters, PK_FILTER_ENUM_INSTALLED);
-	pk_backend_set_uint (backend, "filters", filters);
-
-	pk_backend_set_uint (backend, "search-type", SEARCH_TYPE_FILES);
-	backend_run (backend, PK_STATUS_ENUM_QUERY, backend_search_thread);
-}
-
-/**
- * backend_search_groups:
- **/
-void
-backend_search_groups (PkBackend *backend, PkBitfield filters, gchar **values)
-{
-	g_return_if_fail (backend != NULL);
-	g_return_if_fail (values != NULL);
-
-	pk_backend_set_uint (backend, "search-type", SEARCH_TYPE_GROUP);
-	backend_run (backend, PK_STATUS_ENUM_QUERY, backend_search_thread);
-}
-
-/**
- * backend_search_names:
- **/
-void
-backend_search_names (PkBackend *backend, PkBitfield filters, gchar **values)
-{
-	g_return_if_fail (backend != NULL);
-	g_return_if_fail (values != NULL);
-
-	pk_backend_set_uint (backend, "search-type", SEARCH_TYPE_NAME);
-	backend_run (backend, PK_STATUS_ENUM_QUERY, backend_search_thread);
-}
-
-/**
- * backend_what_provides:
- **/
-void
-backend_what_provides (PkBackend *backend, PkBitfield filters, PkProvidesEnum provides, gchar **values)
-{
-	g_return_if_fail (backend != NULL);
-	g_return_if_fail (values != NULL);
-
-	pk_backend_set_uint (backend, "search-type", SEARCH_TYPE_PROVIDES);
-	backend_run (backend, PK_STATUS_ENUM_QUERY, backend_search_thread);
-}
diff --git a/backends/pacman/backend-search.h b/backends/pacman/backend-search.h
deleted file mode 100644
index c2ce6a0..0000000
--- a/backends/pacman/backend-search.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2007 Andreas Obergrusberger <tradiaz at yahoo.de>
- * Copyright (C) 2008, 2009 Valeriy Lyasotskiy <onestep at ukr.net>
- * Copyright (C) 2010 Jonathan Conder <j at skurvy.no-ip.org>
- *
- * 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 <pk-backend.h>
-
-void	 backend_get_packages	(PkBackend	*backend,
-				 PkBitfield	 filters);
-void	 backend_search_details	(PkBackend	*backend,
-				 PkBitfield	 filters,
-				 gchar		**values);
-void	 backend_search_files	(PkBackend	*backend,
-				 PkBitfield	 filters,
-				 gchar		**values);
-void	 backend_search_groups	(PkBackend	*backend,
-				 PkBitfield	 filters,
-				 gchar		**values);
-void	 backend_search_names	(PkBackend	*backend,
-				 PkBitfield	 filters,
-				 gchar		**values);
-void	 backend_what_provides	(PkBackend	*backend,
-				 PkBitfield	 filters,
-				 PkProvidesEnum	 provides,
-				 gchar		**values);
diff --git a/backends/pacman/backend-transaction.c b/backends/pacman/backend-transaction.c
deleted file mode 100644
index 748760b..0000000
--- a/backends/pacman/backend-transaction.c
+++ /dev/null
@@ -1,532 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2007 Andreas Obergrusberger <tradiaz at yahoo.de>
- * Copyright (C) 2008, 2009 Valeriy Lyasotskiy <onestep at ukr.net>
- * Copyright (C) 2010 Jonathan Conder <j at skurvy.no-ip.org>
- *
- * 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 <string.h>
-#include "backend-error.h"
-#include "backend-packages.h"
-#include "backend-pacman.h"
-#include "backend-repos.h"
-#include "backend-transaction.h"
-
-typedef struct {
-	guint complete;
-	guint total;
-
-	PacmanPackage *package;
-	GString *files;
-} BackendDownloadData;
-
-static GHashTable *downloads = NULL;
-
-gboolean
-backend_initialize_downloads (PkBackend *backend, GError **error)
-{
-	g_return_val_if_fail (backend != NULL, FALSE);
-
-	downloads = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, g_free);
-	return TRUE;
-}
-
-void
-backend_destroy_downloads (PkBackend *backend)
-{
-	g_return_if_fail (backend != NULL);
-
-	if (downloads != NULL) {
-		g_hash_table_unref (downloads);
-	}
-}
-
-static void
-transaction_download_end (PacmanTransaction *transaction, BackendDownloadData *download, PkBackend *backend) {
-	g_return_if_fail (transaction != NULL);
-	g_return_if_fail (download != NULL);
-	g_return_if_fail (backend != NULL);
-
-	/* emit the finished signal for the old package */
-	backend_package (backend, download->package, PK_INFO_ENUM_FINISHED);
-
-	/* emit the list of files downloaded for DownloadPackages */
-	if (download->files != NULL) {
-		gchar *package_id, *files;
-
-		package_id = pacman_package_make_id (download->package);
-		files = g_string_free (download->files, FALSE);
-
-		pk_backend_files (backend, package_id, files);
-
-		g_free (package_id);
-		g_free (files);
-	}
-
-	download->package = NULL;
-	download->files = NULL;
-}
-
-static gchar *
-backend_filename_make_path (PkBackend *backend, const gchar *filename)
-{
-	const gchar *directory;
-
-	g_return_val_if_fail (backend != NULL, NULL);
-	g_return_val_if_fail (filename != NULL, NULL);
-
-	directory = pk_backend_get_string (backend, "directory");
-
-	g_return_val_if_fail (directory != NULL, NULL);
-
-	return g_build_filename (directory, filename, NULL);
-}
-
-static void
-transaction_download_start (PacmanTransaction *transaction, BackendDownloadData *download, const gchar *filename, PkBackend *backend)
-{
-	const PacmanList *packages;
-
-	g_return_if_fail (transaction != NULL);
-	g_return_if_fail (download != NULL);
-	g_return_if_fail (filename != NULL);
-	g_return_if_fail (backend != NULL);
-
-	/* continue or finish downloading the old package */
-	if (download->package != NULL) {
-		if (pacman_package_has_filename (download->package, filename)) {
-			if (download->files != NULL) {
-				gchar *path = backend_filename_make_path (backend, filename);
-				g_string_append_printf (download->files, ";%s", path);
-				g_free (path);
-			}
-			return;
-		} else {
-			transaction_download_end (transaction, download, backend);
-		}
-	}
-
-	/* find a new package for the current file */
-	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;
-			break;
-		}
-	}
-
-	/* emit the downloading signal and start collecting files for the new package */
-	if (download->package != NULL) {
-		backend_package (backend, download->package, PK_INFO_ENUM_DOWNLOADING);
-
-		/* only emit files downloaded for DownloadPackages */
-		if (pk_backend_get_role (backend) == PK_ROLE_ENUM_DOWNLOAD_PACKAGES) {
-			gchar *path = backend_filename_make_path (backend, filename);
-			download->files = g_string_new (path);
-			g_free (path);
-		}
-	}
-}
-
-static void
-transaction_download_cb (PacmanTransaction *transaction, const gchar *filename, guint complete, guint total, gpointer user_data)
-{
-	BackendDownloadData *download;
-
-	g_return_if_fail (pacman != NULL);
-	g_return_if_fail (transaction != NULL);
-	g_return_if_fail (user_data != NULL);
-
-	download = (BackendDownloadData *) g_hash_table_lookup (downloads, transaction);
-
-	if (filename == NULL) {
-		if (download == NULL) {
-			/* start a new download */
-			download = g_new0 (BackendDownloadData, 1);
-			download->complete = complete;
-			download->total = total;
-			g_hash_table_insert (downloads, transaction, download);
-		} else {
-			/* finish the current download */
-			if (download->package != NULL) {
-				transaction_download_end (transaction, download, (PkBackend *) user_data);
-			}
-			g_hash_table_remove (downloads, transaction);
-		}
-	} else {
-		guint percentage = 100, sub_percentage = 100;
-
-		g_return_if_fail (download != NULL);
-
-		if (total > 0) {
-			sub_percentage = complete * 100 / total;
-		}
-
-		if (strstr (filename, ".db.tar.") != NULL) {
-			const PacmanList *databases = pacman_manager_get_sync_databases (pacman);
-			guint database_total = pacman_list_length (databases);
-
-			/* report download progress for databases */
-			if (database_total > 0) {
-				percentage = (sub_percentage + download->complete * 100) / database_total;
-			}
-
-			if (complete == 0) {
-				g_debug ("pacman: downloading database %s", filename);
-				pk_backend_set_status ((PkBackend *) user_data, PK_STATUS_ENUM_REFRESH_CACHE);
-			}
-
-			if (complete == total) {
-				download->complete += 1;
-			}
-		} else {
-			/* report download progress for package or delta files */
-			if (download->total > 0) {
-				percentage = (download->complete + complete) * 100 / download->total;
-			}
-
-			if (complete == 0) {
-				g_debug ("pacman: downloading package %s", filename);
-				pk_backend_set_status ((PkBackend *) user_data, PK_STATUS_ENUM_DOWNLOAD);
-				transaction_download_start (transaction, download, filename, (PkBackend *) user_data);
-			}
-
-			if (complete == total) {
-				download->complete += complete;
-			}
-		}
-
-		pk_backend_set_sub_percentage ((PkBackend *) user_data, sub_percentage);
-		pk_backend_set_percentage ((PkBackend *) user_data, percentage);
-	}
-}
-
-static void
-transaction_progress_cb (PacmanTransaction *transaction, PacmanTransactionProgress type, const gchar *target, guint percent, guint current, guint targets, gpointer user_data)
-{
-	g_return_if_fail (transaction != NULL);
-	g_return_if_fail (user_data != NULL);
-
-	g_return_if_fail (percent >= 0);
-	g_return_if_fail (percent <= 100);
-	g_return_if_fail (current >= 1);
-	g_return_if_fail (current <= targets);
-
-	/* update transaction progress */
-	switch (type) {
-		case PACMAN_TRANSACTION_PROGRESS_INSTALL:
-		case PACMAN_TRANSACTION_PROGRESS_UPGRADE:
-		case PACMAN_TRANSACTION_PROGRESS_REMOVE:
-		case PACMAN_TRANSACTION_PROGRESS_FILE_CONFLICT_CHECK:
-		{
-			g_debug ("pacman: progress for %s (%u of %u) is %u%%", target, current, targets, percent);
-			pk_backend_set_sub_percentage ((PkBackend *) user_data, percent);
-			pk_backend_set_percentage ((PkBackend *) user_data, (percent + (current - 1) * 100) / targets);
-			break;
-		}
-		default:
-			g_debug ("pacman: progress of type %d (%u of %u) is %u%%", type, current, targets, percent);
-			break;
-	}
-}
-
-static gboolean
-transaction_question_cb (PacmanTransaction *transaction, PacmanTransactionQuestion question, const gchar *message, gpointer user_data)
-{
-	g_return_val_if_fail (transaction != NULL, FALSE);
-	g_return_val_if_fail (user_data != NULL, FALSE);
-
-	switch (question) {
-		case PACMAN_TRANSACTION_QUESTION_INSTALL_IGNORE_PACKAGE:
-		{
-			PkRoleEnum role = pk_backend_get_role ((PkBackend *) user_data);
-			if (role == PK_ROLE_ENUM_INSTALL_PACKAGES) {
-				gchar *packages = pacman_package_make_list (pacman_transaction_get_marked_packages (transaction));
-				gchar *warning = g_strdup_printf ("The following packages were marked as ignored:\n%s\n", packages);
-
-				/* ignored packages are blocked in updates, can be explicitly installed */
-				g_warning ("pacman: %s", warning);
-				backend_message ((PkBackend *) user_data, warning);
-
-				g_free (warning);
-				g_free (packages);
-				return TRUE;
-			} else if (role == PK_ROLE_ENUM_DOWNLOAD_PACKAGES || role == PK_ROLE_ENUM_SIMULATE_INSTALL_PACKAGES) {
-				return TRUE;
-			} else {
-				return FALSE;
-			}
-		}
-		case PACMAN_TRANSACTION_QUESTION_SKIP_UNRESOLVABLE_PACKAGES:
-		case PACMAN_TRANSACTION_QUESTION_REMOVE_HOLD_PACKAGES:
-		case PACMAN_TRANSACTION_QUESTION_SYNC_FIRST:
-			/* none of these actions are safe */
-			g_warning ("pacman: ignoring question '%s'", message);
-			return FALSE;
-
-		case PACMAN_TRANSACTION_QUESTION_REPLACE_PACKAGE:
-		case PACMAN_TRANSACTION_QUESTION_REMOVE_CONFLICTING_PACKAGE:
-		case PACMAN_TRANSACTION_QUESTION_INSTALL_OLDER_PACKAGE:
-		case PACMAN_TRANSACTION_QUESTION_DELETE_CORRUPTED_PACKAGE:
-			/* these actions are mostly harmless */
-			g_warning ("pacman: confirming question '%s'", message);
-			return TRUE;
-
-		default:
-			g_warning ("pacman: unrecognised question '%s'", message);
-			return FALSE;
-	}
-}
-
-static void
-transaction_status_cb (PacmanTransaction *transaction, PacmanTransactionStatus status, const gchar *message, gpointer user_data)
-{
-	PkStatusEnum state;
-	PkInfoEnum info;
-
-	g_return_if_fail (transaction != NULL);
-	g_return_if_fail (user_data != NULL);
-
-	/* figure out the backend status and package info */
-	switch (status) {
-		case PACMAN_TRANSACTION_STATUS_INSTALL_START:
-			state = PK_STATUS_ENUM_INSTALL;
-			info = PK_INFO_ENUM_INSTALLING;
-			break;
-
-		case PACMAN_TRANSACTION_STATUS_UPGRADE_START:
-			if (pk_backend_get_role ((PkBackend *) user_data) == PK_ROLE_ENUM_INSTALL_FILES) {
-				state = PK_STATUS_ENUM_INSTALL;
-				info = PK_INFO_ENUM_INSTALLING;
-			} else {
-				state = PK_STATUS_ENUM_UPDATE;
-				info = PK_INFO_ENUM_UPDATING;
-			}
-			break;
-
-		case PACMAN_TRANSACTION_STATUS_REMOVE_START:
-			state = PK_STATUS_ENUM_REMOVE;
-			info = PK_INFO_ENUM_REMOVING;
-			break;
-
-		case PACMAN_TRANSACTION_STATUS_INSTALL_END:
-		case PACMAN_TRANSACTION_STATUS_UPGRADE_END:
-		case PACMAN_TRANSACTION_STATUS_REMOVE_END:
-			state = PK_STATUS_ENUM_UNKNOWN;
-			info = PK_INFO_ENUM_FINISHED;
-			break;
-
-		case PACMAN_TRANSACTION_STATUS_DEPENDENCY_CHECK_START:
-		case PACMAN_TRANSACTION_STATUS_DEPENDENCY_RESOLVE_START:
-			state = PK_STATUS_ENUM_DEP_RESOLVE;
-			info = PK_INFO_ENUM_UNKNOWN;
-			break;
-
-		case PACMAN_TRANSACTION_STATUS_FILE_CONFLICT_CHECK_START:
-		case PACMAN_TRANSACTION_STATUS_CONFLICT_CHECK_START:
-		case PACMAN_TRANSACTION_STATUS_PACKAGE_INTEGRITY_CHECK_START:
-		case PACMAN_TRANSACTION_STATUS_DELTA_INTEGRITY_CHECK_START:
-			state = PK_STATUS_ENUM_TEST_COMMIT;
-			info = PK_INFO_ENUM_UNKNOWN;
-			break;
-
-		default:
-			state = PK_STATUS_ENUM_UNKNOWN;
-			info = PK_INFO_ENUM_UNKNOWN;
-			g_debug ("pacman: %s", message);
-			break;
-	}
-
-	/* update the backend status */
-	if (state != PK_STATUS_ENUM_UNKNOWN) {
-		pk_backend_set_status ((PkBackend *) user_data, state);
-	}
-
-	/* update the package info */
-	if (info != PK_INFO_ENUM_UNKNOWN) {
-		const PacmanList *packages;
-
-		for (packages = pacman_transaction_get_marked_packages (transaction); packages != NULL; packages = pacman_list_next (packages)) {
-			PacmanPackage *package;
-
-			/* only report the old versions */
-			if (status == PACMAN_TRANSACTION_STATUS_UPGRADE_START || status == PACMAN_TRANSACTION_STATUS_UPGRADE_END) {
-				packages = pacman_list_next (packages);
-				if (packages == NULL) {
-					break;
-				}
-			}
-
-			package = (PacmanPackage *) pacman_list_get (packages);
-			backend_package ((PkBackend *) user_data, package, info);
-		}
-	}
-}
-
-static void
-transaction_cancelled_cb (GCancellable *object, gpointer user_data)
-{
-	g_return_if_fail (user_data != NULL);
-
-	pacman_transaction_cancel ((PacmanTransaction *) user_data, NULL);
-}
-
-PacmanTransaction *
-backend_transaction_simulate (PkBackend *backend, PacmanTransactionType type, guint32 flags, const PacmanList *targets)
-{
-	PacmanTransaction *transaction;
-	GError *error = NULL;
-
-	g_return_val_if_fail (pacman != NULL, NULL);
-	g_return_val_if_fail (cancellable != NULL, NULL);
-	g_return_val_if_fail (backend != NULL, NULL);
-	g_return_val_if_fail (type < PACMAN_TRANSACTION_LAST, NULL);
-
-	switch (type) {
-		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;
-		case PACMAN_TRANSACTION_SYNC:
-			transaction = pacman_manager_sync (pacman, flags, &error);
-			break;
-		case PACMAN_TRANSACTION_UPDATE:
-			transaction = pacman_manager_update (pacman, flags, &error);
-			break;
-		default:
-			g_return_val_if_reached (NULL);
-	}
-
-	if (transaction == NULL) {
-		backend_error (backend, error);
-		return NULL;
-	}
-
-	g_signal_connect (transaction, "download", G_CALLBACK (transaction_download_cb), backend);
-	g_signal_connect (transaction, "progress", G_CALLBACK (transaction_progress_cb), backend);
-	g_signal_connect (transaction, "question", G_CALLBACK (transaction_question_cb), backend);
-	g_signal_connect (transaction, "status", G_CALLBACK (transaction_status_cb), backend);
-
-	if (g_cancellable_connect (cancellable, G_CALLBACK (transaction_cancelled_cb), transaction, NULL) == 0 && backend_cancelled (backend)) {
-		return transaction;
-	}
-
-	if (!pacman_transaction_prepare (transaction, targets, &error)) {
-		backend_error (backend, error);
-		g_object_unref (transaction);
-		return NULL;
-	}
-
-	return transaction;
-}
-
-PacmanTransaction *
-backend_transaction_run (PkBackend *backend, PacmanTransactionType type, guint32 flags, const PacmanList *targets)
-{
-	PacmanTransaction *transaction;
-
-	g_return_val_if_fail (backend != NULL, NULL);
-
-	transaction = backend_transaction_simulate (backend, type, flags, targets);
-
-	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)
-{
-	GError *error = NULL;
-
-	if (transaction != NULL && !backend_cancelled (backend)) {
-		pk_backend_set_status (backend, PK_STATUS_ENUM_RUNNING);
-
-		if (!pacman_transaction_commit (transaction, &error)) {
-			backend_error (backend, error);
-			g_hash_table_remove (downloads, transaction);
-			g_object_unref (transaction);
-			return NULL;
-		}
-	}
-
-	return transaction;
-}
-
-gboolean
-backend_transaction_finished (PkBackend *backend, PacmanTransaction *transaction)
-{
-	g_return_val_if_fail (backend != NULL, FALSE);
-
-	if (transaction != NULL) {
-		g_object_unref (transaction);
-		backend_finished (backend);
-		return TRUE;
-	} else {
-		backend_finished (backend);
-		return FALSE;
-	}
-}
diff --git a/backends/pacman/backend-transaction.h b/backends/pacman/backend-transaction.h
deleted file mode 100644
index a7db49a..0000000
--- a/backends/pacman/backend-transaction.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2007 Andreas Obergrusberger <tradiaz at yahoo.de>
- * Copyright (C) 2008, 2009 Valeriy Lyasotskiy <onestep at ukr.net>
- * Copyright (C) 2010 Jonathan Conder <j at skurvy.no-ip.org>
- *
- * 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 <pacman.h>
-#include <pk-backend.h>
-
-typedef enum {
-	PACMAN_TRANSACTION_INSTALL,
-	PACMAN_TRANSACTION_MODIFY,
-	PACMAN_TRANSACTION_REMOVE,
-	PACMAN_TRANSACTION_SYNC,
-	PACMAN_TRANSACTION_UPDATE,
-	PACMAN_TRANSACTION_LAST
-} PacmanTransactionType;
-
-gboolean		 backend_initialize_downloads	(PkBackend		*backend,
-							 GError			**error);
-void			 backend_destroy_downloads	(PkBackend		*backend);
-
-PacmanTransaction	*backend_transaction_simulate	(PkBackend		*backend,
-							 PacmanTransactionType	 type,
-							 guint32		 flags,
-							 const PacmanList	*targets);
-PacmanTransaction	*backend_transaction_run	(PkBackend		*backend,
-							 PacmanTransactionType	 type,
-							 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,
-							 PacmanTransaction	*transaction);
diff --git a/backends/pacman/backend-update.c b/backends/pacman/backend-update.c
deleted file mode 100644
index a34eb05..0000000
--- a/backends/pacman/backend-update.c
+++ /dev/null
@@ -1,394 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2007 Andreas Obergrusberger <tradiaz at yahoo.de>
- * Copyright (C) 2008, 2009 Valeriy Lyasotskiy <onestep at ukr.net>
- * Copyright (C) 2010 Jonathan Conder <j at skurvy.no-ip.org>
- *
- * 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 <string.h>
-#include <pacman.h>
-#include <glib/gstdio.h>
-#include "backend-error.h"
-#include "backend-pacman.h"
-#include "backend-packages.h"
-#include "backend-repos.h"
-#include "backend-transaction.h"
-#include "backend-update.h"
-
-static gchar *
-pacman_package_make_replaces_ids (PacmanPackage *package)
-{
-	const PacmanList *list;
-	GString *string = NULL;
-
-	g_return_val_if_fail (local_database != NULL, NULL);
-	g_return_val_if_fail (package != NULL, NULL);
-
-	/* make a list of the packages that package replaces */
-	for (list = pacman_package_get_replaces (package); list != NULL; list = pacman_list_next (list)) {
-		const gchar *name = pacman_list_get (list);
-		PacmanPackage *replaces = pacman_database_find_package (local_database, name);
-
-		if (replaces != NULL) {
-			gchar *package_id = pacman_package_make_id (replaces);
-			if (string == NULL) {
-				string = g_string_new (package_id);
-			} else {
-				g_string_append_printf (string, "&%s", package_id);
-			}
-			g_free (package_id);
-		}
-	}
-
-	if (string != NULL) {
-		return g_string_free (string, FALSE);
-	} else {
-		return NULL;
-	}
-}
-
-static gchar *
-pacman_package_make_vendor_url (PacmanPackage *package)
-{
-	GString *string = g_string_new ("");
-#ifdef PACMAN_PACKAGE_URL
-	const gchar *name, *arch, *repo, *url;
-#else
-	const gchar *url;
-#endif
-
-	g_return_val_if_fail (package != NULL, NULL);
-
-	/* grab the URL of the package... */
-	url = pacman_package_get_url (package);
-	if (url != NULL) {
-		g_string_append_printf (string, "%s;Package website;", url);
-	}
-
-#ifdef PACMAN_PACKAGE_URL
-	/* ... and construct the distro URL if possible */
-	name = pacman_package_get_name (package);
-	arch = pacman_package_get_arch (package);
-	repo = pacman_database_get_name (pacman_package_get_database (package));
-
-	g_string_append_printf (string, PACMAN_PACKAGE_URL ";Distribution website;", repo, arch, name);
-#endif
-
-	g_string_truncate (string, string->len - 1);
-	return g_string_free (string, FALSE);
-}
-
-static gint
-pacman_package_compare_pkgver (PacmanPackage *a, PacmanPackage *b)
-{
-	gint result;
-	const gchar *version_a, *version_b, *last_a, *last_b;
-	gchar *pkgver_a, *pkgver_b;
-
-	g_return_val_if_fail (a != NULL, (b == NULL) ? 0 : -1);
-	g_return_val_if_fail (b != NULL, 1);
-
-	version_a = pacman_package_get_version (a);
-	version_b = pacman_package_get_version (b);
-
-	last_a = strrchr (version_a, '-');
-	last_b = strrchr (version_b, '-');
-
-	if (last_a != NULL) {
-		pkgver_a = g_strndup (version_a, last_a - version_a);
-	} else {
-		pkgver_a = g_strdup (version_a);
-	}
-
-	if (last_b != NULL) {
-		pkgver_b = g_strndup (version_b, last_b - version_b);
-	} else {
-		pkgver_b = g_strdup (version_b);
-	}
-
-	result = pacman_package_compare_version (pkgver_a, pkgver_b);
-
-	g_free (pkgver_a);
-	g_free (pkgver_b);
-
-	return result;
-}
-
-static gboolean
-backend_get_update_detail_thread (PkBackend *backend)
-{
-	guint iterator;
-
-	gchar **package_ids;
-
-	g_return_val_if_fail (local_database != NULL, FALSE);
-	g_return_val_if_fail (backend != NULL, FALSE);
-
-	package_ids = pk_backend_get_strv (backend, "package_ids");
-
-	g_return_val_if_fail (package_ids != NULL, FALSE);
-
-	/* collect details about updates */
-	for (iterator = 0; package_ids[iterator] != NULL; ++iterator) {
-		PacmanPackage *package, *upgrades;
-		PacmanDatabase *database;
-
-		gchar *upgrades_id, *replaces_ids, *vendor_url;
-		const gchar *message;
-
-		PkRestartEnum restart;
-		PkUpdateStateEnum state;
-
-		GTimeVal built = { 0 }, installed = { 0 };
-		gchar *issued, *updated;
-
-		if (backend_cancelled (backend)) {
-			break;
-		}
-
-		package = backend_get_package (backend, package_ids[iterator]);
-		if (package == NULL) {
-			backend_finished (backend);
-			return FALSE;
-		}
-
-		upgrades = pacman_database_find_package (local_database, pacman_package_get_name (package));
-		if (upgrades != NULL) {
-			upgrades_id = pacman_package_make_id (upgrades);
-			if (pacman_package_compare_pkgver (package, upgrades) != 0) {
-				message = "Update to newest upstream version";
-			} else {
-				message = "Update to newest release";
-			}
-		} else {
-			upgrades_id = NULL;
-			message = "Install as a replacement for an older package";
-		}
-
-		database = pacman_package_get_database (package);
-		replaces_ids = pacman_package_make_replaces_ids (package);
-		vendor_url = pacman_package_make_vendor_url (package);
-
-		if (g_str_has_prefix (pacman_package_get_name (package), "kernel")) {
-			restart = PK_RESTART_ENUM_SYSTEM;
-		} else {
-			restart = PK_RESTART_ENUM_NONE;
-		}
-
-		if (g_str_has_suffix (pacman_database_get_name (database), "testing")) {
-			state = PK_UPDATE_STATE_ENUM_TESTING;
-		} else {
-			state = PK_UPDATE_STATE_ENUM_STABLE;
-		}
-
-		built.tv_sec = pacman_package_get_build_date (package);
-		if (built.tv_sec > 0) {
-			issued = g_time_val_to_iso8601 (&built);
-		} else {
-			issued = NULL;
-		}
-
-		if (upgrades != NULL) {
-			installed.tv_sec = pacman_package_get_install_date (upgrades);
-			if (installed.tv_sec > 0) {
-				updated = g_time_val_to_iso8601 (&installed);
-			} else {
-				updated = NULL;
-			}
-		} else {
-			updated = NULL;
-		}
-
-		pk_backend_update_detail (backend, package_ids[iterator], upgrades_id, replaces_ids, vendor_url, NULL, NULL, restart, message, NULL, state, issued, updated);
-
-		g_free (issued);
-		g_free (updated);
-
-		g_free (vendor_url);
-		g_free (replaces_ids);
-		g_free (upgrades_id);
-	}
-
-	backend_finished (backend);
-	return TRUE;
-}
-
-/**
- * backend_get_update_detail:
- **/
-void
-backend_get_update_detail (PkBackend *backend, gchar **package_ids)
-{
-	g_return_if_fail (backend != NULL);
-	g_return_if_fail (package_ids != NULL);
-
-	backend_run (backend, PK_STATUS_ENUM_QUERY, backend_get_update_detail_thread);
-}
-
-static gboolean
-pacman_package_should_ignore (PacmanPackage *package)
-{
-	const PacmanList *groups;
-	const PacmanList *ignore_packages;
-	const PacmanList *ignore_groups;
-
-	g_return_val_if_fail (pacman != NULL, TRUE);
-	g_return_val_if_fail (package != NULL, TRUE);
-
-	ignore_packages = pacman_manager_get_ignore_packages (pacman);
-
-	/* check if package is an IgnorePkg */
-	if (pacman_list_find_string (ignore_packages, pacman_package_get_name (package)) != NULL) {
-		return TRUE;
-	}
-
-	ignore_groups = pacman_manager_get_ignore_groups (pacman);
-
-	/* check if package is in an IgnoreGroup */
-	for (groups = pacman_package_get_groups (package); groups != NULL; groups = pacman_list_next (groups)) {
-		if (pacman_list_find_string (ignore_groups, (const gchar *) pacman_list_get (groups)) != NULL) {
-			return TRUE;
-		}
-	}
-
-	return FALSE;
-}
-
-static gboolean
-pacman_package_should_sync_first (PacmanPackage *package)
-{
-	const PacmanList *sync_firsts;
-
-	g_return_val_if_fail (pacman != NULL, FALSE);
-	g_return_val_if_fail (package != NULL, FALSE);
-
-	sync_firsts = pacman_manager_get_sync_firsts (pacman);
-
-	/* check if package is in SyncFirst */
-	if (pacman_list_find_string (sync_firsts, pacman_package_get_name (package)) != NULL) {
-		return TRUE;
-	}
-
-	return FALSE;
-}
-
-static gboolean
-backend_get_updates_thread (PkBackend *backend)
-{
-	struct stat cache;
-	time_t one_hour_ago;
-
-	PacmanTransaction *transaction = NULL;
-	PacmanTransactionFlags flags = PACMAN_TRANSACTION_FLAGS_NONE;
-
-	const PacmanList *packages;
-
-	g_return_val_if_fail (local_database != NULL, FALSE);
-	g_return_val_if_fail (pacman != NULL, FALSE);
-	g_return_val_if_fail (backend != NULL, FALSE);
-
-	time (&one_hour_ago);
-	one_hour_ago -= 60 * 60;
-
-	/* refresh databases if they are older than an hour */
-	if (g_stat (PACMAN_CACHE_PATH, &cache) < 0 || cache.st_mtime < one_hour_ago) {
-		transaction = backend_transaction_run (backend, PACMAN_TRANSACTION_UPDATE, flags, NULL);
-
-		if (transaction != NULL) {
-			g_object_unref (transaction);
-		} else {
-			backend_finished (backend);
-			return FALSE;
-		}
-	} else {
-		g_debug ("pacman: databases have been refreshed recently");
-	}
-
-	/* find outdated and replacement packages */
-	for (packages = pacman_database_get_packages (local_database); packages != NULL; packages = pacman_list_next (packages)) {
-		PacmanPackage *package = (PacmanPackage *) pacman_list_get (packages);
-		PacmanPackage *upgrade = pacman_package_find_upgrade (package, pacman_manager_get_sync_databases (pacman));
-
-		if (backend_cancelled (backend)) {
-			break;
-		}
-
-		if (upgrade != NULL) {
-			PkInfoEnum info;
-
-			if (pacman_package_should_ignore (upgrade)) {
-				info = PK_INFO_ENUM_BLOCKED;
-			} else if (pacman_package_should_sync_first (upgrade)) {
-				info = PK_INFO_ENUM_IMPORTANT;
-			} else {
-				info = PK_INFO_ENUM_NORMAL;
-			}
-
-			backend_package (backend, upgrade, info);
-		}
-	}
-
-	backend_finished (backend);
-	return TRUE;
-}
-
-/**
- * backend_get_updates:
- **/
-void
-backend_get_updates (PkBackend *backend, PkBitfield filters)
-{
-	g_return_if_fail (backend != NULL);
-
-	backend_run (backend, PK_STATUS_ENUM_QUERY, backend_get_updates_thread);
-}
-
-static gboolean
-backend_refresh_cache_thread (PkBackend *backend)
-{
-	gboolean force;
-
-	PacmanTransaction *transaction = NULL;
-	PacmanTransactionFlags flags = PACMAN_TRANSACTION_FLAGS_NONE;
-
-	g_return_val_if_fail (backend != NULL, FALSE);
-
-	force = pk_backend_get_bool (backend, "force");
-
-	/* download databases even if they are older than current */
-	if (force) {
-		flags |= PACMAN_TRANSACTION_FLAGS_UPDATE_ALLOW_DOWNGRADE;
-	}
-
-	/* run the transaction */
-	transaction = backend_transaction_run (backend, PACMAN_TRANSACTION_UPDATE, flags, NULL);
-
-	return backend_transaction_finished (backend, transaction);
-}
-
-/**
- * backend_refresh_cache:
- **/
-void
-backend_refresh_cache (PkBackend *backend, gboolean force)
-{
-	g_return_if_fail (backend != NULL);
-
-	backend_run (backend, PK_STATUS_ENUM_SETUP, backend_refresh_cache_thread);
-}
diff --git a/backends/pacman/backend-update.h b/backends/pacman/backend-update.h
deleted file mode 100644
index 2a8bf02..0000000
--- a/backends/pacman/backend-update.h
+++ /dev/null
@@ -1,31 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2007 Andreas Obergrusberger <tradiaz at yahoo.de>
- * Copyright (C) 2008, 2009 Valeriy Lyasotskiy <onestep at ukr.net>
- * Copyright (C) 2010 Jonathan Conder <j at skurvy.no-ip.org>
- *
- * 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 <pk-backend.h>
-
-void	 backend_get_update_detail		(PkBackend	*backend,
-						 gchar		**package_ids);
-void	 backend_get_updates			(PkBackend	*backend,
-						 PkBitfield	 filters);
-void	 backend_refresh_cache			(PkBackend	*backend,
-						 gboolean	 force);
diff --git a/backends/pacman/groups.list b/backends/pacman/groups.list
deleted file mode 100644
index b2c02ae..0000000
--- a/backends/pacman/groups.list
+++ /dev/null
@@ -1,65 +0,0 @@
-adesklet-desklets	desktop-other
-base			system
-base-devel		programming
-bmp-io-plugins		multimedia
-bmp-plugins		multimedia
-cegcc			programming
-compiz			desktop-other
-compiz-fusion		desktop-other
-compiz-fusion-gtk	desktop-gnome
-compiz-fusion-kde	desktop-kde
-compiz-gnome		desktop-gnome
-compiz-gtk		desktop-gnome
-compiz-kde		desktop-kde
-e17-extra-svn		desktop-other
-e17-libs-svn		desktop-other
-e17-svn			desktop-other
-fprint			other
-gimp-help		other
-gimp-plugins		other
-gnome			desktop-gnome
-gnome-extra		desktop-gnome
-gnustep-core		desktop-other
-google-gadgets		desktop-other
-gstreamer0.10-plugins	multimedia
-kde			desktop-kde
-kdeaccessibility	desktop-kde
-kdeadmin		desktop-kde
-kdeartwork		desktop-kde
-kdebase			desktop-kde
-kdeedu			desktop-kde
-kde-extragear		desktop-kde
-kdegames		desktop-kde
-kdegraphics		desktop-kde
-kde-l10n		desktop-kde
-kde-meta		desktop-kde
-kdemultimedia		desktop-kde
-kdenetwork		desktop-kde
-kdepim			desktop-kde
-kdeplasma-addons	desktop-kde
-kdesdk			desktop-kde
-kdetoys			desktop-kde
-kdeutils		desktop-kde
-kdewebdev		desktop-kde
-koffice			desktop-kde
-ladspa-plugins		multimedia
-lib32			other
-lxde			other
-qtcurve			desktop-kde
-rox-desktop		desktop-other
-telepathy		other
-texlive-lang		other
-texlive-lang-doc	other
-texlive-most		other
-texlive-most-doc	other
-thunderbird-i18n	other
-thunderbird-spell-i18n	other
-vim-plugins		other
-xfce4			desktop-xfce
-xfce4-goodies		desktop-xfce
-xmms-effect-plugins	multimedia
-xmms-io-plugins		multimedia
-xmms-plugins		multimedia
-xorg			desktop-other
-xorg-input-drivers	desktop-other
-xorg-video-drivers	desktop-other
diff --git a/backends/pacman/pacman.conf b/backends/pacman/pacman.conf
deleted file mode 100644
index 40b8e4a..0000000
--- a/backends/pacman/pacman.conf
+++ /dev/null
@@ -1,12 +0,0 @@
-# PackageKit configuration for the pacman backend
-# See the pacman.conf(5) manpage for option and repository directives.
-
-[options]
-
-# Use default pacman configuration initially
-#
-Include = /etc/pacman.conf
-
-# Prevent PackageKit from removing itself
-#
-HoldPkg = packagekit
diff --git a/configure.ac b/configure.ac
index ad86e3b..6604ac5 100644
--- a/configure.ac
+++ b/configure.ac
@@ -487,7 +487,6 @@ AC_ARG_ENABLE(conary, AS_HELP_STRING([--enable-conary],[use the CONARY backend])
 AC_ARG_ENABLE(dummy, AS_HELP_STRING([--enable-dummy],[use the dummy backend]),enable_dummy=$enableval,enable_dummy=yes)
 AC_ARG_ENABLE(entropy, AS_HELP_STRING([--enable-entropy],[use the entropy backend]),enable_entropy=$enableval,enable_entropy=no)
 AC_ARG_ENABLE(opkg, AS_HELP_STRING([--enable-opkg],[use the OPKG backend]),enable_opkg=$enableval,enable_opkg=no)
-AC_ARG_ENABLE(pacman, AS_HELP_STRING([--enable-pacman],[use the Pacman backend]),enable_pacman=$enableval,enable_pacman=no)
 AC_ARG_ENABLE(pisi, AS_HELP_STRING([--enable-pisi],[use the PiSi backend]),enable_pisi=$enableval,enable_pisi=no)
 AC_ARG_ENABLE(poldek, AS_HELP_STRING([--enable-poldek],[use the poldek backend]),enable_poldek=$enableval,enable_poldek=no)
 AC_ARG_ENABLE(portage, AS_HELP_STRING([--enable-portage],[use the portage backend]),enable_portage=$enableval,enable_portage=no)
@@ -509,7 +508,6 @@ AM_CONDITIONAL(BACKEND_TYPE_CONARY, [test x$enable_conary = xyes])
 AM_CONDITIONAL(BACKEND_TYPE_DUMMY, [test x$enable_dummy = xyes])
 AM_CONDITIONAL(BACKEND_TYPE_ENTROPY, [test x$enable_entropy = xyes])
 AM_CONDITIONAL(BACKEND_TYPE_OPKG, [test x$enable_opkg = xyes])
-AM_CONDITIONAL(BACKEND_TYPE_PACMAN, [test x$enable_pacman = xyes])
 AM_CONDITIONAL(BACKEND_TYPE_PISI, [test x$enable_pisi = xyes])
 AM_CONDITIONAL(BACKEND_TYPE_POLDEK, [test x$enable_poldek = xyes])
 AM_CONDITIONAL(BACKEND_TYPE_PORTAGE, [test x$enable_portage = xyes])
@@ -610,8 +608,6 @@ if test x$with_default_backend = x; then
 		with_default_backend=slapt
 	elif test -f /usr/bin/smart ; then
 		with_default_backend=smart
-	elif test -f /usr/lib/libpacman-glib.so ; then
-		with_default_backend=pacman
 	elif test -f /usr/bin/pisi ; then
 		with_default_backend=pisi
 	elif test -f /usr/bin/razor ; then
@@ -710,12 +706,6 @@ if test x$enable_alpm = xyes; then
 			[AC_MSG_ERROR([No ALPM headers found])])
 fi
 
-if test x$enable_pacman = xyes; then
-	PKG_CHECK_MODULES(PACMAN, pacman-glib >= 3.3.0)
-	AC_SUBST(PACMAN_CFLAGS)
-	AC_SUBST(PACMAN_LIBS)
-fi
-
 if test x$enable_poldek = xyes; then
 	POLDEK_CFLAGS="-I/usr/include/poldek"
 	POLDEK_LIBS="-lpoclidek -lpoldek"
@@ -794,7 +784,6 @@ backends/conary/Makefile
 backends/dummy/Makefile
 backends/entropy/Makefile
 backends/opkg/Makefile
-backends/pacman/Makefile
 backends/slapt/Makefile
 backends/smart/Makefile
 backends/test/Makefile
@@ -870,7 +859,6 @@ echo "
         Entropy backend:           ${enable_entropy}
         OPKG backend:              ${enable_opkg}
         Razor backend:             ${enable_razor}
-        Pacman backend:            ${enable_pacman}
         PiSi backend:              ${enable_pisi}
         poldek backend:            ${enable_poldek}
         Portage backend:           ${enable_portage}
diff --git a/docs/html/pk-matrix.html b/docs/html/pk-matrix.html
index 991529d..91dc2d4 100644
--- a/docs/html/pk-matrix.html
+++ b/docs/html/pk-matrix.html
@@ -28,7 +28,6 @@
 <td><center>conary</center></td>
 <td><center>entropy</center></td>
 <td><center>opkg</center></td>
-<td><center>pacman</center></td>
 <td><center>pisi</center></td>
 <td><center>poldek</center></td>
 <td><center>portage</center></td>
@@ -48,7 +47,6 @@
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- conary -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- entropy -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- pacman -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- portage -->
@@ -68,7 +66,6 @@
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- conary -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- entropy -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- pacman -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- pisi -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- poldek -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- portage -->
@@ -88,7 +85,6 @@
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- conary -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- entropy -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- opkg -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- pacman -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- portage -->
@@ -108,7 +104,6 @@
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- conary -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- entropy -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- opkg -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- pacman -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- portage -->
@@ -128,7 +123,6 @@
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- conary -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- entropy -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- pacman -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- pisi -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- poldek -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- portage -->
@@ -148,7 +142,6 @@
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- conary -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- entropy -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- pacman -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- portage -->
@@ -168,7 +161,6 @@
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- conary -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- entropy -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- pacman -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- pisi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- portage -->
@@ -188,7 +180,6 @@
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- conary -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- entropy -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- pacman -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- portage -->
@@ -208,7 +199,6 @@
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- conary -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- entropy -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- pacman -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- portage -->
@@ -228,7 +218,6 @@
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- conary -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- entropy -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- pacman -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- pisi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- portage -->
@@ -248,7 +237,6 @@
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- conary -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- entropy -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- opkg -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- pacman -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- portage -->
@@ -268,7 +256,6 @@
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- conary -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- entropy -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- pacman -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- poldek -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- portage -->
@@ -288,7 +275,6 @@
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- conary -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- entropy -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- opkg -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- pacman -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- portage -->
@@ -308,7 +294,6 @@
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- conary -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- entropy -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- pacman -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- pisi -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- poldek -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- portage -->
@@ -328,7 +313,6 @@
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- conary -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- entropy -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- opkg -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- pacman -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- portage -->
@@ -348,7 +332,6 @@
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- conary -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- entropy -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- opkg -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- pacman -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- portage -->
@@ -368,7 +351,6 @@
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- conary -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- entropy -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- pacman -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- pisi -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- poldek -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- portage -->
@@ -388,7 +370,6 @@
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- conary -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- entropy -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- pacman -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- poldek -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- portage -->
@@ -408,7 +389,6 @@
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- conary -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- entropy -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- pacman -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- portage -->
@@ -428,7 +408,6 @@
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- conary -->
 <td><img src="img/status-good.png" alt="[no]"/></td><!-- entropy -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- pacman -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- pisi -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- poldek -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- portage -->
@@ -448,7 +427,6 @@
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- conary -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- entropy -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- opkg -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- pacman -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- portage -->
@@ -468,7 +446,6 @@
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- conary -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- entropy -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- pacman -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- portage -->
@@ -488,7 +465,6 @@
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- conary -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- entropy -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- opkg -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- pacman -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- portage -->
@@ -508,7 +484,6 @@
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- conary -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- entropy -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- opkg -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- pacman -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- portage -->
@@ -528,7 +503,6 @@
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- conary -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- entropy -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- pacman -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- pisi -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- poldek -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- portage -->
@@ -548,7 +522,6 @@
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- conary -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- entropy -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- pacman -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- pisi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- portage -->
@@ -568,7 +541,6 @@
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- conary -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- entropy -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- pacman -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- pisi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- portage -->
@@ -588,7 +560,6 @@
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- conary -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- entropy -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- pacman -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- pisi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- portage -->
@@ -608,7 +579,6 @@
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- conary -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- entropy -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- opkg -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- pacman -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- portage -->
@@ -628,7 +598,6 @@
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- conary -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- entropy -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- opkg -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- pacman -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- portage -->
@@ -648,7 +617,6 @@
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- conary -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- entropy -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- pacman -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- pisi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- portage -->
@@ -672,7 +640,6 @@
 <td><center>conary</center></td>
 <td><center>entropy</center></td>
 <td><center>opkg</center></td>
-<td><center>pacman</center></td>
 <td><center>pisi</center></td>
 <td><center>poldek</center></td>
 <td><center>portage</center></td>
@@ -692,7 +659,6 @@
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- conary -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- entropy -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- opkg -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- pacman -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- portage -->
@@ -712,7 +678,6 @@
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- conary -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- entropy -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- opkg -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- pacman -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- portage -->
@@ -732,7 +697,6 @@
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- conary -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- entropy -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- opkg -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- pacman -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- portage -->
@@ -752,7 +716,6 @@
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- conary -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- entropy -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- pacman -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- pisi -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- poldek -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- portage -->
@@ -772,7 +735,6 @@
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- conary -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- entropy -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- pacman -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- pisi -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- poldek -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- portage -->
@@ -792,7 +754,6 @@
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- conary -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- entropy -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- pacman -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- pisi -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- poldek -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- portage -->
@@ -812,7 +773,6 @@
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- conary -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- entropy -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- pacman -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- pisi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- portage -->
@@ -832,7 +792,6 @@
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- conary -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- entropy -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- pacman -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- pisi -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- poldek -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- portage -->
@@ -852,7 +811,6 @@
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- conary -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- entropy -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- pacman -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- pisi -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- poldek -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- portage -->
commit 9a448ce737d327a16b6c034081f83e458befc1ca
Author: Jonathan Conder <jonno.conder at gmail.com>
Date:   Sat Feb 5 14:38:48 2011 +1300

    alpm: Port features from the pacman backend

diff --git a/backends/alpm/Makefile.am b/backends/alpm/Makefile.am
index 15749dc..a664b2c 100644
--- a/backends/alpm/Makefile.am
+++ b/backends/alpm/Makefile.am
@@ -1,10 +1,54 @@
-INCLUDES = \
-	-DG_LOG_DOMAIN=\"PackageKit-Alpm\"
+PK_BACKEND_CONFIG_FILE = $(confdir)/pacman.conf
+PK_BACKEND_GROUP_FILE = $(confdir)/groups.list
+PK_BACKEND_REPO_FILE = $(confdir)/repos.list
+
+PK_BACKEND_DEFAULT_PATH = "/bin:/usr/bin:/sbin:/usr/sbin"
+PK_BACKEND_DEFAULT_ROOT = "/"
+PK_BACKEND_DEFAULT_DBPATH = $(localstatedir)/lib/pacman
+PK_BACKEND_DEFAULT_CACHEDIR = $(localstatedir)/cache/pacman/pkg
+PK_BACKEND_DEFAULT_LOGFILE = $(localstatedir)/log/pacman.log
+
+ALPM_CACHE_PATH = $(localstatedir)/lib/pacman/sync
+ALPM_PACKAGE_URL = "http://www.archlinux.org/packages/%s/%s/%s/"
+
+DEFS = -DPK_BACKEND_CONFIG_FILE=\"$(PK_BACKEND_CONFIG_FILE)\" \
+       -DPK_BACKEND_GROUP_FILE=\"$(PK_BACKEND_GROUP_FILE)\" \
+       -DPK_BACKEND_REPO_FILE=\"$(PK_BACKEND_REPO_FILE)\" \
+       -DPK_BACKEND_DEFAULT_PATH=\"$(PK_BACKEND_DEFAULT_PATH)\" \
+       -DPK_BACKEND_DEFAULT_ROOT=\"$(PK_BACKEND_DEFAULT_ROOT)\" \
+       -DPK_BACKEND_DEFAULT_DBPATH=\"$(PK_BACKEND_DEFAULT_DBPATH)\" \
+       -DPK_BACKEND_DEFAULT_CACHEDIR=\"$(PK_BACKEND_DEFAULT_CACHEDIR)\" \
+       -DPK_BACKEND_DEFAULT_LOGFILE=\"$(PK_BACKEND_DEFAULT_LOGFILE)\" \
+       -DALPM_CACHE_PATH=\"$(ALPM_CACHE_PATH)\" \
+       -DALPM_PACKAGE_URL=\"$(ALPM_PACKAGE_URL)\" \
+       -DG_LOG_DOMAIN=\"PackageKit-alpm\"
+
+confdir = $(PK_CONF_DIR)/alpm.d
+conf_DATA = groups.list \
+	    pacman.conf \
+	    repos.list
 
 plugindir = $(PK_PLUGIN_DIR)
 plugin_LTLIBRARIES = libpk_backend_alpm.la
-libpk_backend_alpm_la_SOURCES = pk-backend-alpm.c
-libpk_backend_alpm_la_LIBADD = $(PK_PLUGIN_LIBS) -lalpm
-libpk_backend_alpm_la_LDFLAGS = -module -avoid-version
-libpk_backend_alpm_la_CFLAGS = $(PK_PLUGIN_CFLAGS) $(WARNINGFLAGS_C)
 
+libpk_backend_alpm_la_SOURCES = pk-backend-alpm.c \
+				pk-backend-config.c \
+				pk-backend-databases.c \
+				pk-backend-depends.c \
+				pk-backend-error.c \
+				pk-backend-groups.c \
+				pk-backend-install.c \
+				pk-backend-packages.c \
+				pk-backend-remove.c \
+				pk-backend-search.c \
+				pk-backend-sync.c \
+				pk-backend-transaction.c \
+				pk-backend-update.c
+libpk_backend_alpm_la_LIBADD = $(PK_PLUGIN_LIBS) \
+			       -lalpm
+libpk_backend_alpm_la_LDFLAGS = -module \
+				-avoid-version
+libpk_backend_alpm_la_CFLAGS = $(PK_PLUGIN_CFLAGS) \
+			       $(WARNINGFLAGS_C)
+
+EXTRA_DIST = $(conf_DATA) $(libpk_backend_alpm_la_SOURCES:.c=.h)
diff --git a/backends/alpm/TODO b/backends/alpm/TODO
deleted file mode 100644
index 04a827f..0000000
--- a/backends/alpm/TODO
+++ /dev/null
@@ -1,4 +0,0 @@
-
-* Fix cache refreshing. Currently throws 'unexpected error'
-* Improve error handling by using macros. Currently 50% is very similiar error handling code.
-* Handle transaction progress and events in the callback functions.
diff --git a/backends/alpm/groups.list b/backends/alpm/groups.list
new file mode 100644
index 0000000..b2c02ae
--- /dev/null
+++ b/backends/alpm/groups.list
@@ -0,0 +1,65 @@
+adesklet-desklets	desktop-other
+base			system
+base-devel		programming
+bmp-io-plugins		multimedia
+bmp-plugins		multimedia
+cegcc			programming
+compiz			desktop-other
+compiz-fusion		desktop-other
+compiz-fusion-gtk	desktop-gnome
+compiz-fusion-kde	desktop-kde
+compiz-gnome		desktop-gnome
+compiz-gtk		desktop-gnome
+compiz-kde		desktop-kde
+e17-extra-svn		desktop-other
+e17-libs-svn		desktop-other
+e17-svn			desktop-other
+fprint			other
+gimp-help		other
+gimp-plugins		other
+gnome			desktop-gnome
+gnome-extra		desktop-gnome
+gnustep-core		desktop-other
+google-gadgets		desktop-other
+gstreamer0.10-plugins	multimedia
+kde			desktop-kde
+kdeaccessibility	desktop-kde
+kdeadmin		desktop-kde
+kdeartwork		desktop-kde
+kdebase			desktop-kde
+kdeedu			desktop-kde
+kde-extragear		desktop-kde
+kdegames		desktop-kde
+kdegraphics		desktop-kde
+kde-l10n		desktop-kde
+kde-meta		desktop-kde
+kdemultimedia		desktop-kde
+kdenetwork		desktop-kde
+kdepim			desktop-kde
+kdeplasma-addons	desktop-kde
+kdesdk			desktop-kde
+kdetoys			desktop-kde
+kdeutils		desktop-kde
+kdewebdev		desktop-kde
+koffice			desktop-kde
+ladspa-plugins		multimedia
+lib32			other
+lxde			other
+qtcurve			desktop-kde
+rox-desktop		desktop-other
+telepathy		other
+texlive-lang		other
+texlive-lang-doc	other
+texlive-most		other
+texlive-most-doc	other
+thunderbird-i18n	other
+thunderbird-spell-i18n	other
+vim-plugins		other
+xfce4			desktop-xfce
+xfce4-goodies		desktop-xfce
+xmms-effect-plugins	multimedia
+xmms-io-plugins		multimedia
+xmms-plugins		multimedia
+xorg			desktop-other
+xorg-input-drivers	desktop-other
+xorg-video-drivers	desktop-other
diff --git a/backends/alpm/pacman.conf b/backends/alpm/pacman.conf
new file mode 100644
index 0000000..8fdef09
--- /dev/null
+++ b/backends/alpm/pacman.conf
@@ -0,0 +1,12 @@
+# PackageKit configuration for the alpm backend
+# See the pacman.conf(5) manpage for option and repository directives.
+
+[options]
+
+# Use default pacman configuration initially
+#
+Include = /etc/pacman.conf
+
+# Prevent PackageKit from removing itself
+#
+HoldPkg = packagekit
diff --git a/backends/alpm/pk-backend-alpm.c b/backends/alpm/pk-backend-alpm.c
index 5513d8d..6dd099c 100644
--- a/backends/alpm/pk-backend-alpm.c
+++ b/backends/alpm/pk-backend-alpm.c
@@ -1,7 +1,8 @@
 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
  *
  * Copyright (C) 2007 Andreas Obergrusberger <tradiaz at yahoo.de>
- * Copyright (C) 2008, 2009 Valeriy Lyasotskiy <onestep at ukr.net>
+ * Copyright (C) 2008-2010 Valeriy Lyasotskiy <onestep at ukr.net>
+ * Copyright (C) 2010-2011 Jonathan Conder <jonno.conder at gmail.com>
  *
  * Licensed under the GNU General Public License Version 2
  *
@@ -20,1678 +21,354 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  */
 
-#define _GNU_SOURCE
+#include <config.h>
+#include <glib/gstdio.h>
+#include <sys/utsname.h>
 
-#define ALPM_CONFIG_PATH "/etc/pacman.conf"
+#include "pk-backend-alpm.h"
+#include "pk-backend-databases.h"
+#include "pk-backend-error.h"
+#include "pk-backend-groups.h"
 
-#define ALPM_ROOT "/"
-#define ALPM_DBPATH "/var/lib/pacman"
-#define ALPM_CACHEDIR "/var/cache/pacman/pkg"
-#define ALPM_LOGFILE "/var/log/pacman.log"
+PkBackend *backend = NULL;
+GCancellable *cancellable = NULL;
+static GStaticMutex mutex = G_STATIC_MUTEX_INIT;
 
-#define ALPM_PKG_EXT ".pkg.tar.gz"
-#define ALPM_LOCAL_DB_ALIAS "installed"
+gchar *xfercmd = NULL;
+alpm_list_t *holdpkgs = NULL;
+alpm_list_t *syncfirsts = NULL;
 
-#define ALPM_PROGRESS_UPDATE_INTERVAL 400
-
-#include <gmodule.h>
-#include <glib.h>
-#include <string.h>
-#include <pk-backend.h>
-
-#include <alpm.h>
-#include <alpm_list.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-
-PkBackend *backend_instance = NULL;
-
-GHashTable *group_map;
-
-alpm_list_t *syncfirst = NULL;
-alpm_list_t *holdpkg = NULL;
-
-alpm_list_t *downloaded_files = NULL;
-gchar *current_file = NULL;
-
-off_t trans_xfered;
-off_t trans_total;
-
-int trans_subprogress;
-
-typedef enum {
-	PK_ALPM_SEARCH_TYPE_NULL,
-	PK_ALPM_SEARCH_TYPE_RESOLVE,
-	PK_ALPM_SEARCH_TYPE_NAME,
-	PK_ALPM_SEARCH_TYPE_DETAILS,
-	PK_ALPM_SEARCH_TYPE_GROUP,
-	PK_ALPM_SEARCH_TYPE_PROVIDES
-} PkAlpmSearchType;
-
-static int
-pkg_cmp (pmpkg_t *pkg1, pmpkg_t *pkg2) {
-	int comparison;
-	/* check for no package */
-	if (pkg1 == NULL)
-		return -1;
-	if (pkg2 == NULL)
-		return 1;
-	/* compare package names */
-	comparison = g_strcmp0 (alpm_pkg_get_name (pkg1), alpm_pkg_get_name (pkg2));
-	if (comparison != 0)
-		return comparison;
-	/* compare package versions */
-	comparison = alpm_pkg_vercmp (alpm_pkg_get_version (pkg1), alpm_pkg_get_version (pkg2));
-	if (comparison != 0)
-		return comparison;
-	/* packages are equal */
-	return 0;
-}
-
-/* temporary commented to not produce compilation errors :) */
-/*
-static gboolean
-pkg_equal (pmpkg_t *p1, pmpkg_t *p2)
-{
-	if (g_strcmp0 (alpm_pkg_get_name (p1), alpm_pkg_get_name (p2)) != 0)
-		return FALSE;
-	if (g_strcmp0 (alpm_pkg_get_version (p1), alpm_pkg_get_version (p2)) != 0)
-		return FALSE;
-	return TRUE;
-}
-*/
-
-static gboolean
-pkg_equals_to (pmpkg_t *pkg, const gchar *name, const gchar *version)
-{
-	if (pkg == NULL)
-		return FALSE;
-	if (g_strcmp0 (alpm_pkg_get_name (pkg), name) != 0)
-		return FALSE;
-	if (version != NULL)
-		if (g_strcmp0 (alpm_pkg_get_version (pkg), version) != 0)
-			return FALSE;
-	return TRUE;
-}
-
-static gchar *
-pkg_to_package_id_str (pmpkg_t *pkg, const gchar *repo)
-{
-	gchar *arch = (gchar *) alpm_pkg_get_arch (pkg);
-	if (arch == NULL)
-		arch = (gchar *) "unknown";
-
-	return pk_package_id_build (alpm_pkg_get_name (pkg), alpm_pkg_get_version (pkg), arch, repo);
-}
-
-static pmpkg_t *
-pkg_from_package_id (const gchar *package_id)
-{
-	pmdb_t *repo = NULL;
-	pmpkg_t *result;
-	gchar **package_id_data = pk_package_id_split (package_id);
-
-	/* do all this fancy stuff */
-	if (g_strcmp0 (ALPM_LOCAL_DB_ALIAS, package_id_data[PK_PACKAGE_ID_DATA]) == 0)
-		repo = alpm_option_get_localdb ();
-	else {
-		alpm_list_t *iterator;
-		for (iterator = alpm_option_get_syncdbs (); iterator; iterator = alpm_list_next (iterator)) {
-			repo = alpm_list_getdata (iterator);
-			if (g_strcmp0 (alpm_db_get_name (repo), package_id_data[PK_PACKAGE_ID_DATA]) == 0)
-				break;
-		}
-	}
-
-	if (repo != NULL) {
-		pmpkg_t *pkg = alpm_db_get_pkg (repo, package_id_data[PK_PACKAGE_ID_NAME]);
-		if (pkg_equals_to (pkg, package_id_data[PK_PACKAGE_ID_NAME], package_id_data[PK_PACKAGE_ID_VERSION]))
-			result = pkg;
-		else
-			result = NULL;
-	} else
-		result = NULL;
-
-	g_strfreev (package_id_data);
-
-	return result;
-}
-
-static void
-emit_package (PkBackend *backend, pmpkg_t *pkg, const gchar *repo, PkInfoEnum info)
-{
-	gchar *package_id_str;
-
-	g_debug ("alpm: emitting package with name %s", alpm_pkg_get_name (pkg));
-
-	package_id_str = pkg_to_package_id_str (pkg, repo);
-	pk_backend_package (backend, info, package_id_str, alpm_pkg_get_desc (pkg));
-	g_free (package_id_str);
-}
-
-static void
-cb_trans_evt (pmtransevt_t event, void *data1, void *data2)
-{
-	gchar **package_ids;
-
-	/* TODO: add more code here */
-	switch (event) {
-		case PM_TRANS_EVT_REMOVE_START:
-			pk_backend_set_allow_cancel (backend_instance, FALSE);
-
-			/* reset transaction subprogress */
-			trans_subprogress = -1;
-
-			emit_package (backend_instance, data1, ALPM_LOCAL_DB_ALIAS, PK_INFO_ENUM_REMOVING);
-			break;
-		case PM_TRANS_EVT_ADD_START:
-			pk_backend_set_allow_cancel (backend_instance, FALSE);
-
-			/* reset transaction subprogress */
-			trans_subprogress = -1;
-
-			pk_backend_set_status (backend_instance, PK_STATUS_ENUM_INSTALL);
-
-			package_ids = pk_backend_get_strv (backend_instance, "package_ids");
-			if (package_ids != NULL) {
-				unsigned int iterator;
-
-				/* search for package in package_ids */
-				gchar *package_id_needle = pkg_to_package_id_str (data1, "");
-
-				g_debug ("needle is %s", package_id_needle);
-				for (iterator = 0; iterator < g_strv_length (package_ids); ++iterator)
-					if (strstr (package_ids[iterator], package_id_needle) != NULL) {
-						pk_backend_package (backend_instance, PK_INFO_ENUM_INSTALLING, package_ids[iterator], alpm_pkg_get_desc (data1));
-						break;
-					}
-
-				g_free (package_id_needle);
-			} else
-				/* we are installing a local file */
-				emit_package (backend_instance, data1, "local", PK_INFO_ENUM_INSTALLING);
-
-			break;
-		case PM_TRANS_EVT_UPGRADE_START:
-			pk_backend_set_allow_cancel (backend_instance, FALSE);
-
-			/* reset transaction subprogress */
-			trans_subprogress = -1;
-
-			emit_package (backend_instance, data1, ALPM_LOCAL_DB_ALIAS, PK_INFO_ENUM_UPDATING);
-			break;
-		default: g_debug ("alpm: event %i happened", event);
-	}
-}
-
-static void
-cb_trans_conv (pmtransconv_t conv, void *data1, void *data2, void *data3, int *response)
-{
-	/* TODO: check if some code needs to be placed there */
-}
-
-static void
-cb_trans_progress (pmtransprog_t event, const char *pkgname, int percent, int howmany, int current)
-{
-	if (trans_subprogress != percent) {
-		/* avoid duplicates */
-		trans_subprogress = percent;
-
-		if (event == PM_TRANS_PROGRESS_ADD_START || event == PM_TRANS_PROGRESS_UPGRADE_START || event == PM_TRANS_PROGRESS_REMOVE_START) {
-			int trans_percent;
-
-			g_debug ("alpm: transaction percentage for %s is %i", pkgname, percent);
-			trans_percent = (int) ((float) ((current - 1) * 100 + percent)) / ((float) (howmany * 100)) * 100;
-			pk_backend_set_sub_percentage ((PkBackend *) backend_instance, percent);
-			pk_backend_set_percentage ((PkBackend *) backend_instance, trans_percent);
-		}
-	}
-}
-
-static void
-cb_dl_progress (const char *filename, off_t file_xfered, off_t file_total)
-{
-	int file_percent;
-	int trans_percent;
-
-	if (g_str_has_suffix (filename, ALPM_PKG_EXT)) {
-		if (g_strcmp0 (filename, current_file) != 0) {
-			alpm_list_t *repos;
-			alpm_list_t *packages;
-			pmpkg_t *current_pkg = NULL;
-			const gchar *repo_name = NULL;
-
-			g_free (current_file);
-			current_file = g_strdup (filename);
-
-			/* iterate repos */
-			for (repos = alpm_option_get_syncdbs (); current_pkg == NULL && repos; repos = alpm_list_next (repos)) {
-				pmdb_t *db = alpm_list_getdata (repos);
-
-				/* iterate pkgs */
-				for (packages = alpm_db_get_pkgcache (db); current_pkg == NULL && packages; packages = alpm_list_next (packages)) {
-					pmpkg_t *pkg = alpm_list_getdata (packages);
-
-					/* compare package information with file name */
-					gchar *needle = g_strjoin ("-", alpm_pkg_get_name (pkg), alpm_pkg_get_version (pkg), NULL);
-					if (needle != NULL && strcmp (needle, "") != 0)
-						g_debug ("matching %s with %s", filename, needle);
-					if (g_str_has_prefix (filename, needle)) {
-						current_pkg = pkg;
-						repo_name = alpm_db_get_name (db);
-					}
-					g_free (needle);
-				}
-			}
-
-			if (current_pkg != NULL)
-				emit_package (backend_instance, current_pkg, repo_name, PK_INFO_ENUM_DOWNLOADING);
-		}
-	}
-
-	file_percent = (int) ((float) file_xfered) / ((float) file_total) * 100;
-	trans_percent = (int) ((float) (trans_xfered + file_xfered)) / ((float) trans_total) * 100;
-	pk_backend_set_sub_percentage ((PkBackend *) backend_instance, file_percent);
-	pk_backend_set_percentage ((PkBackend *) backend_instance, trans_percent);
-
-	if (file_xfered == file_total) {
-		downloaded_files = alpm_list_add (downloaded_files, g_strdup (filename));
-		trans_xfered = trans_xfered + file_total;
-	}
-}
-
-static void
-cb_dl_total (off_t total)
-{
-	trans_total = total;
-	/* zero total size means that download is finished, so clear trans_xfered */
-	if (total == 0)
-		trans_xfered = 0;
-}
-
-/**
- * strtrim:
- * Trim whitespaces and newlines from a string
- */
-static char *
-strtrim (char *str)
-{
-	char *pch = str;
-
-	if (str == NULL || *str == '\0')
-		/* string is empty, so we're done. */
-		return (str);
-
-	while (isspace (*pch))
-		pch++;
-
-	if (pch != str)
-		memmove (str, pch, (strlen (pch) + 1));
-
-	/* check if there wasn't anything but whitespace in the string. */
-	if (*str == '\0')
-		return (str);
-
-	pch = (str + (strlen (str) - 1));
-
-	while (isspace (*pch))
-		pch--;
-
-	*++pch = '\0';
-
-	return (str);
-}
-
-/**
- * _strnadd:
- * Helper function for strreplace
- */
-static void
-_strnadd (char **str, const char *append, unsigned int count)
-{
-	if (*str)
-		*str = realloc (*str, strlen (*str) + count + 1);
-	else
-		*str = calloc (sizeof (char), count + 1);
-
-	strncat (*str, append, count);
-}
-
-/**
- * strreplace:
- * Replace all occurences of 'needle' with 'replace' in 'str', returning
- * a new string (must be free'd)
- */
-static char *
-strreplace (const char *str, const char *needle, const char *replace)
-{
-	const char *p, *q;
-	char *newstr = NULL;
-	unsigned int needlesz = strlen (needle), replacesz = strlen (replace);
-
-	p = q = str;
-
-	while (1) {
-		q = strstr (p, needle);
-		if (!q) {
-			/* not found */
-			if (*p) /* add the rest of 'p' */
-				_strnadd (&newstr, p, strlen (p));
-
-			break;
-		} else { /* found match */
-			if (q > p) /* add chars between this occurance and last occurance, if any */
-				_strnadd (&newstr, p, q - p);
-
-			_strnadd (&newstr, replace, replacesz);
-			p = q + needlesz;
-		}
-	}
-
-	return newstr;
-}
-
-/**
- * set_repeating_option:
- * Add repeating options such as NoExtract, NoUpgrade, etc to alpm settings.
- * @param ptr a pointer to the start of the multiple options
- * @param option the string (friendly) name of the option, used for messages
- * @param optionfunc a function pointer to an alpm_option_add_* function
- */
-static void
-set_repeating_option (const char *ptr, const char *option, void (*optionfunc) (const char*))
-{
-	char *p = (char*) ptr;
-	char *q;
-
-	while ((q = strchr (p, ' '))) {
-		*q = '\0';
-		(*optionfunc) (p);
-		g_debug ("config: %s: %s", option, p);
-		p = q;
-		p++;
-	}
-	(*optionfunc) (p);
-	g_debug ("config: %s: %s", option, p);
-}
-
-/**
- * option_add_syncfirst:
- * Add package name to SyncFirst list
- * @param name name of the package to be added
- */
-static void
-option_add_syncfirst (const char *name) {
-	syncfirst = alpm_list_add (syncfirst, strdup (name));
-}
-
-/**
- * option_add_holdpkg:
- * Add package name to HoldPkg list
- * @param name name of the package to be added
- */
-static void
-option_add_holdpkg (const char *name) {
-	holdpkg = alpm_list_add (holdpkg, strdup (name));
-}
-
-/**
- * parse_config:
- * Parse config file and set all the needed options
- * Based heavily on the pacman source code
- * @param file full name of config file
- * @param givensection section to start from
- * @param givendb db to start from
- */
-static int
-parse_config (const char *file, const char *givensection, pmdb_t * const givendb)
-{
-	FILE *fp = NULL;
-	char line[PATH_MAX + 1];
-	int linenum = 0;
-	char *ptr, *section = NULL;
-	pmdb_t *db = NULL;
-
-	/* set default options */
-	alpm_option_set_root (ALPM_ROOT);
-	alpm_option_set_dbpath (ALPM_DBPATH);
-	alpm_option_add_cachedir (ALPM_CACHEDIR);
-	alpm_option_set_logfile (ALPM_LOGFILE);
-
-	fp = fopen (file, "r");
-	if (fp == NULL) {
-		g_error ("config file %s could not be read", file);
-		return 1;
-	}
-
-	/* if we are passed a section, use it as our starting point */
-	if (givensection != NULL)
-		section = strdup (givensection);
-
-	/* if we are passed a db, use it as our starting point */
-	if (givendb != NULL)
-		db = givendb;
-
-	while (fgets (line, PATH_MAX, fp)) {
-		linenum++;
-		strtrim (line);
-
-		if (strlen (line) == 0 || line[0] == '#')
-			continue;
-
-		if ((ptr = strchr (line, '#')))
-			*ptr = '\0';
-
-		if (line[0] == '[' && line[strlen (line) - 1] == ']') {
-			/* new config section, skip the '[' */
-			ptr = line;
-			ptr++;
-			if (section)
-				free (section);
-
-			section = strdup (ptr);
-			section[strlen (section) - 1] = '\0';
-			g_debug ("config: new section '%s'", section);
-			if (!strlen (section)) {
-				g_debug ("config file %s, line %d: bad section name", file, linenum);
-				return 1;
-			}
-
-			/* if we are not looking at the options section, register a db */
-			if (g_strcmp0 (section, "options") != 0)
-				db = alpm_db_register_sync (section);
-		} else {
-			/* directive */
-			char *key;
-			key = line;
-			ptr = line;
-			/* strsep modifies the 'line' string: 'key \0 ptr' */
-			strsep (&ptr, "=");
-			strtrim (key);
-			strtrim (ptr);
-
-			if (key == NULL) {
-				g_error ("config file %s, line %d: syntax error in config file - missing key.", file, linenum);
-				return 1;
-			}
-			if (section == NULL) {
-				g_error ("config file %s, line %d: all directives must belong to a section.", file, linenum);
-				return 1;
-			}
-
-			if (ptr == NULL && g_strcmp0 (section, "options") == 0) {
-				/* directives without settings, all in [options] */
-				if (g_strcmp0 (key, "UseSyslog") == 0) {
-					alpm_option_set_usesyslog (1);
-					g_debug ("config: usesyslog");
-				} else if (g_strcmp0 (key, "UseDelta") == 0) {
-					alpm_option_set_usedelta (1);
-					g_debug ("config: usedelta");
-				} else if (g_strcmp0 (key, "ILoveCandy") != 0 && g_strcmp0 (key, "ShowSize") != 0 && g_strcmp0 (key, "TotalDownload") != 0 && g_strcmp0 (key, "NoPassiveFTP") != 0) {
-					g_warning ("config file %s, line %d: directive '%s' not recognized.", file, linenum, key);
-				}
-			} else {
-				/* directives with settings */
-				if (g_strcmp0 (key, "Include") == 0) {
-					g_debug ("config: including %s", ptr);
-					parse_config (ptr, section, db);
-					/* Ignore include failures... assume non-critical */
-				} else if (g_strcmp0 (section, "options") == 0) {
-					if (g_strcmp0 (key, "NoUpgrade") == 0) {
-						set_repeating_option (ptr, "NoUpgrade", alpm_option_add_noupgrade);
-					} else if (g_strcmp0 (key, "NoExtract") == 0) {
-						set_repeating_option (ptr, "NoExtract", alpm_option_add_noextract);
-					} else if (g_strcmp0 (key, "IgnorePkg") == 0) {
-						set_repeating_option (ptr, "IgnorePkg", alpm_option_add_ignorepkg);
-					} else if (g_strcmp0 (key, "IgnoreGroup") == 0) {
-						set_repeating_option (ptr, "IgnoreGroup", alpm_option_add_ignoregrp);
-					} else if (g_strcmp0 (key, "HoldPkg") == 0) {
-						set_repeating_option (ptr, "HoldPkg", option_add_holdpkg);
-					} else if (g_strcmp0 (key, "SyncFirst") == 0) {
-						set_repeating_option (ptr, "SyncFirst", option_add_syncfirst);
-					} else if (g_strcmp0 (key, "DBPath") == 0) {
-						alpm_option_set_dbpath (ptr);
-					} else if (g_strcmp0 (key, "CacheDir") == 0) {
-						if (alpm_option_add_cachedir (ptr) != 0) {
-							g_error ("problem adding cachedir '%s' (%s)", ptr, alpm_strerrorlast ());
-							return 1;
-						}
-						g_debug ("config: cachedir: %s", ptr);
-					} else if (g_strcmp0 (key, "RootDir") == 0) {
-						alpm_option_set_root (ptr);
-						g_debug ("config: rootdir: %s", ptr);
-					} else if (g_strcmp0 (key, "LogFile") == 0) {
-						alpm_option_set_logfile (ptr);
-						g_debug ("config: logfile: %s", ptr);
-					} else if (g_strcmp0 (key, "XferCommand") != 0 && g_strcmp0 (key, "CleanMethod") != 0) {
-						g_warning ("config file %s, line %d: directive '%s' not recognized.", file, linenum, key);
-					}
-				} else if (g_strcmp0 (key, "Server") == 0) {
-					/* let's attempt a replacement for the current repo */
-					char *server = strreplace (ptr, "$repo", section);
-
-					if (alpm_db_setserver (db, server) != 0) {
-						/* pm_errno is set by alpm_db_setserver */
-						g_error ("config file %s, line %d: could not add server URL to database (%s).", file, linenum, alpm_strerrorlast ());
-						free (server);
-						return 1;
-					}
-					free (server);
-				} else {
-					g_warning ("config file %s, line %d: directive '%s' not recognized.", file, linenum, key);
-				}
-			}
-		}
-	}
-
-	fclose (fp);
-	if (section)
-		free (section);
-
-	g_debug ("config: finished parsing %s", file);
-	return 0;
-}
-
-/**
- * backend_initialize:
- */
-static void
-backend_initialize (PkBackend *backend)
-{
-	/* initialize backend_instance for use in callback functions */
-	backend_instance = backend;
-
-	g_debug ("alpm: initializing backend");
-
-	if (alpm_initialize () == -1) {
-		pk_backend_error_code (backend, PK_ERROR_ENUM_FAILED_INITIALIZATION, "Failed to initialize package manager");
-		g_debug ("alpm: %s", alpm_strerror (pm_errno));
-		return;
-	}
-
-	/* read options from config file */
-	if (parse_config (ALPM_CONFIG_PATH, NULL, NULL) != 0) {
-		pk_backend_error_code (backend, PK_ERROR_ENUM_FAILED_CONFIG_PARSING, "Failed to parse config file");
-		alpm_release ();
-		return;
-	}
-
-	if (alpm_db_register_local () == NULL) {
-		pk_backend_error_code (backend, PK_ERROR_ENUM_REPO_NOT_AVAILABLE, "Failed to load local database");
-		g_debug ("alpm: %s", alpm_strerror (pm_errno));
-		alpm_release ();
-		return;
-	}
-
-	alpm_option_set_dlcb (cb_dl_progress);
-	alpm_option_set_totaldlcb (cb_dl_total);
-
-	/* fill in group mapping */
-	group_map = g_hash_table_new (g_str_hash, g_str_equal);
-	g_hash_table_insert (group_map, (gchar *) "gnome", (gchar *) "desktop-gnome");
-	g_hash_table_insert (group_map, (gchar *) "gnome-extra", (gchar *) "desktop-gnome");
-	g_hash_table_insert (group_map, (gchar *) "compiz-gnome", (gchar *) "desktop-gnome");
-	g_hash_table_insert (group_map, (gchar *) "kde", (gchar *) "desktop-kde");
-	g_hash_table_insert (group_map, (gchar *) "compiz-kde", (gchar *) "desktop-kde");
-	g_hash_table_insert (group_map, (gchar *) "compiz-fusion-kde", (gchar *) "desktop-kde");
-	g_hash_table_insert (group_map, (gchar *) "lxde", (gchar *) "desktop-other");
-	g_hash_table_insert (group_map, (gchar *) "rox-desktop", (gchar *) "desktop-other");
-	g_hash_table_insert (group_map, (gchar *) "e17-cvs", (gchar *) "desktop-other");
-	g_hash_table_insert (group_map, (gchar *) "e17-extra-cvs", (gchar *) "desktop-other");
-	g_hash_table_insert (group_map, (gchar *) "e17-libs-cvs", (gchar *) "desktop-other");
-	g_hash_table_insert (group_map, (gchar *) "xfce4", (gchar *) "desktop-xfce");
-	g_hash_table_insert (group_map, (gchar *) "xfce4-goodies", (gchar *) "desktop-xfce");
-	g_hash_table_insert (group_map, (gchar *) "bmp-io-plugins", (gchar *) "multimedia");
-	g_hash_table_insert (group_map, (gchar *) "bmp-plugins", (gchar *) "multimedia");
-	g_hash_table_insert (group_map, (gchar *) "bmp-visualization-plugins", (gchar *) "multimedia");
-	g_hash_table_insert (group_map, (gchar *) "gstreamer0.10-plugins", (gchar *) "multimedia");
-	g_hash_table_insert (group_map, (gchar *) "ladspa-plugins", (gchar *) "multimedia");
-	g_hash_table_insert (group_map, (gchar *) "pvr", (gchar *) "multimedia");
-	g_hash_table_insert (group_map, (gchar *) "mythtv-extras", (gchar *) "multimedia");
-	g_hash_table_insert (group_map, (gchar *) "xmms-effect-plugins", (gchar *) "multimedia");
-	g_hash_table_insert (group_map, (gchar *) "xmms-io-plugins", (gchar *) "multimedia");
-	g_hash_table_insert (group_map, (gchar *) "xmms-plugins", (gchar *) "multimedia");
-	g_hash_table_insert (group_map, (gchar *) "base-devel", (gchar *) "programming");
-	g_hash_table_insert (group_map, (gchar *) "texlive-lang", (gchar *) "publishing");
-	g_hash_table_insert (group_map, (gchar *) "texlive-lang-doc", (gchar *) "publishing");
-	g_hash_table_insert (group_map, (gchar *) "texlive-most", (gchar *) "publishing");
-	g_hash_table_insert (group_map, (gchar *) "texlive-most-doc", (gchar *) "publishing");
-	g_hash_table_insert (group_map, (gchar *) "texlive-most-svn", (gchar *) "publishing");
-	g_hash_table_insert (group_map, (gchar *) "base", (gchar *) "system");
-
-	g_debug ("alpm: ready to go");
-}
-
-/**
- * backend_destroy:
- */
-static void
-backend_destroy (PkBackend *backend)
+gchar *
+pk_backend_get_description (PkBackend *self)
 {
-	g_hash_table_destroy (group_map);
+	g_return_val_if_fail (self != NULL, NULL);
 
-	if (alpm_release () == -1) {
-		pk_backend_error_code (backend, PK_ERROR_ENUM_FAILED_FINALISE, "Failed to release package manager");
-		g_debug ("alpm: %s", alpm_strerror (pm_errno));
-	}
+	return g_strdup ("alpm");
 }
 
-/**
- * backend_get_groups:
- */
-static PkBitfield
-backend_get_groups (PkBackend *backend)
+gchar *
+pk_backend_get_author (PkBackend *self)
 {
-	return pk_bitfield_from_enums (
-		PK_GROUP_ENUM_DESKTOP_GNOME,
-		PK_GROUP_ENUM_DESKTOP_KDE,
-		PK_GROUP_ENUM_DESKTOP_OTHER,
-		PK_GROUP_ENUM_DESKTOP_XFCE,
-		PK_GROUP_ENUM_MULTIMEDIA,
-		PK_GROUP_ENUM_OTHER,
-		PK_GROUP_ENUM_PROGRAMMING,
-		PK_GROUP_ENUM_PUBLISHING,
-		PK_GROUP_ENUM_SYSTEM,
-		-1);
-}
+	g_return_val_if_fail (self != NULL, NULL);
 
-/**
- * backend_get_filters:
- */
-static PkBitfield
-backend_get_filters (PkBackend *backend)
-{
-	return pk_bitfield_from_enums (PK_FILTER_ENUM_INSTALLED, -1);
+	return g_strdup ("Jonathan Conder <jonno.conder at gmail.com>");
 }
 
-/**
- * backend_get_mime_types:
- */
-static gchar *
-backend_get_mime_types (PkBackend *backend)
-{
-	return g_strdup ("application/x-compressed-tar");
-}
-
-/**
- * backend_cancel:
- **/
-static void
-backend_cancel (PkBackend *backend)
-{
-	pk_backend_set_status (backend, PK_STATUS_ENUM_CANCEL);
-}
-
-/**
- * backend_download_packages_thread:
- */
 static gboolean
-backend_download_packages_thread (PkBackend *backend)
+pk_backend_spawn (PkBackend *self, const gchar *command)
 {
-	gchar **package_ids = pk_backend_get_strv (backend, "package_ids");
-	const gchar *directory = pk_backend_get_string (backend, "directory");
-	unsigned int iterator;
-	alpm_list_t *list_iterator;
-	alpm_list_t *cachedirs = NULL;
-	alpm_list_t *data = NULL;
-
-	g_debug ("alpm: downloading packages to %s", directory);
-
-	/* old cachedirs list automatically gets freed in alpm, so make a copy */
-	for (list_iterator = alpm_option_get_cachedirs (); list_iterator; list_iterator = alpm_list_next (list_iterator))
-		cachedirs = alpm_list_add (cachedirs, g_strdup (alpm_list_getdata (list_iterator)));
-	/* set new download destination */
-	alpm_option_set_cachedirs (NULL);
-	alpm_option_add_cachedir (directory);
-
-	/* create a new transaction */
-	if (alpm_trans_init (PM_TRANS_FLAG_NODEPS | PM_TRANS_FLAG_DOWNLOADONLY, cb_trans_evt, cb_trans_conv, cb_trans_progress) != 0) {
-		pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_ERROR, alpm_strerrorlast ());
-		pk_backend_finished (backend);
-		return FALSE;
-	}
+	int status;
+	GError *error = NULL;
 
-	/* add targets to the transaction */
-	for (iterator = 0; iterator < g_strv_length (package_ids); ++iterator) {
-		gchar **package_id_data = pk_package_id_split (package_ids[iterator]);
-
-		if (alpm_sync_target (package_id_data[PK_PACKAGE_ID_NAME]) != 0) {
-			pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_ERROR, alpm_strerrorlast ());
-			alpm_trans_release ();
-			pk_backend_finished (backend);
-			return FALSE;
-		}
+	g_return_val_if_fail (self != NULL, FALSE);
+	g_return_val_if_fail (command != NULL, FALSE);
 
-		g_strfreev (package_id_data);
+	if (!g_spawn_command_line_sync (command, NULL, NULL, &status, &error)) {
+		g_warning ("could not spawn command: %s", error->message);
+		g_error_free (error);
+		return FALSE;
 	}
 
-	/* prepare and commit transaction */
-	if (alpm_trans_prepare (&data) != 0 || alpm_trans_commit (&data) != 0) {
-		pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_ERROR, alpm_strerrorlast ());
-		alpm_trans_release ();
-		pk_backend_finished (backend);
+	if (WIFEXITED (status) == 0) {
+		g_warning ("command did not execute correctly");
 		return FALSE;
 	}
 
-	alpm_trans_release ();
-
-	/* emit downloaded packages */
-	for (list_iterator = downloaded_files; list_iterator; list_iterator = alpm_list_next (list_iterator)) {
-		gchar *package_id = NULL;
-		gchar *filename;
-
-		/* TODO: optimize this? split-then-join isn't good */
-		for (iterator = 0; package_id == NULL && iterator < g_strv_length (package_ids); ++iterator) {
-			gchar **package_id_data = pk_package_id_split (package_ids[iterator]);
-			gchar *needle = g_strjoin ("-", package_id_data[PK_PACKAGE_ID_NAME], package_id_data[PK_PACKAGE_ID_VERSION], NULL);
-
-			if (needle != NULL && strcmp (needle, "") != 0)
-				g_debug ("matching %s with %s", (char *) alpm_list_getdata (list_iterator), needle);
-			if (g_str_has_prefix ((char *) alpm_list_getdata (list_iterator), needle))
-				package_id = package_ids[iterator];
-
-			g_free (needle);
-			g_strfreev (package_id_data);
-		}
-
-		filename = g_build_filename (directory, alpm_list_getdata (list_iterator), NULL);
-		pk_backend_files (backend, package_id, filename);
-		g_free (filename);
-
-		/* clean up list data */
-		g_free (alpm_list_getdata (list_iterator));
+	if (WEXITSTATUS (status) != EXIT_SUCCESS) {
+		gint code = WEXITSTATUS (status);
+		g_warning ("command returned error code %d", code);
+		return FALSE;
 	}
-	alpm_list_free (downloaded_files);
 
-	/* return cachedirs back */
-	alpm_option_set_cachedirs (cachedirs);
-
-	pk_backend_finished (backend);
 	return TRUE;
 }
 
-/**
- * backend_download_packages:
- */
-static void
-backend_download_packages (PkBackend *backend, gchar **package_ids, const gchar *directory)
-{
-	pk_backend_set_status (backend, PK_STATUS_ENUM_DOWNLOAD);
-	pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID);
-
-	pk_backend_thread_create (backend, backend_download_packages_thread);
-}
-
-/**
- * backend_get_depends:
- */
-static void
-backend_get_depends (PkBackend *backend, PkBitfield filters, gchar **package_ids, gboolean recursive)
+gint
+pk_backend_fetchcb (const gchar *url, const gchar *path, gint force)
 {
-	unsigned int iterator;
+	GRegex *xo, *xi;
+	gchar *oldpwd, *basename, *file, *part;
+	gchar *tempcmd = NULL, *finalcmd = NULL;
+	gint result = 0;
 
-	pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
-	pk_backend_set_allow_cancel (backend, FALSE);
+	g_return_val_if_fail (url != NULL, -1);
+	g_return_val_if_fail (path != NULL, -1);
+	g_return_val_if_fail (xfercmd != NULL, -1);
+	g_return_val_if_fail (backend != NULL, -1);
 
-	for (iterator = 0; iterator < g_strv_length (package_ids); ++iterator) {
-		alpm_list_t *list_iterator;
-
-		pmpkg_t *pkg = pkg_from_package_id (package_ids[iterator]);
-		if (pkg == NULL) {
-			pk_backend_error_code (backend, PK_ERROR_ENUM_PACKAGE_ID_INVALID, alpm_strerrorlast ());
-			pk_backend_finished (backend);
-			return;
-		}
-
-		for (list_iterator = alpm_pkg_get_depends (pkg); list_iterator; list_iterator = alpm_list_next (list_iterator)) {
-			pmdepend_t *dep = alpm_list_getdata (list_iterator);
-			pmpkg_t *dep_pkg;
-			gboolean found = FALSE;
-
-			if (!pk_bitfield_contain (filters, PK_FILTER_ENUM_INSTALLED)) {
-				/* search in sync dbs */
-				alpm_list_t *db_iterator;
-				for (db_iterator = alpm_option_get_syncdbs (); found == FALSE && db_iterator; db_iterator = alpm_list_next (db_iterator)) {
-					pmdb_t *syncdb = alpm_list_getdata (db_iterator);
-
-					g_debug ("alpm: searching for %s in %s", alpm_dep_get_name (dep), alpm_db_get_name (syncdb));
-
-					dep_pkg = alpm_db_get_pkg (syncdb, alpm_dep_get_name (dep));
-					if (dep_pkg && alpm_depcmp (dep_pkg, dep) && pkg_cmp (dep_pkg, alpm_db_get_pkg (alpm_option_get_localdb (), alpm_dep_get_name (dep))) != 0) {
-						found = TRUE;
-						emit_package (backend, dep_pkg, alpm_db_get_name (syncdb), PK_INFO_ENUM_AVAILABLE);
-					}
-				}
-			}
-
-			if (!pk_bitfield_contain (filters, PK_FILTER_ENUM_NOT_INSTALLED)) {
-				g_debug ("alpm: searching for %s in local db", alpm_dep_get_name (dep));
-
-				/* search in local db */
-				dep_pkg = alpm_db_get_pkg (alpm_option_get_localdb (), alpm_dep_get_name (dep));
-				if (dep_pkg && alpm_depcmp (dep_pkg, dep)) {
-					found = TRUE;
-					emit_package (backend, dep_pkg, ALPM_LOCAL_DB_ALIAS, PK_INFO_ENUM_INSTALLED);
-				}
-			}
-		}
+	oldpwd = g_get_current_dir ();
+	if (g_chdir (path) < 0) {
+		g_warning ("could not find or read directory %s", path);
+		g_free (oldpwd);
+		return -1;
 	}
 
-	pk_backend_finished (backend);
-}
-
-/**
- * backend_get_details:
- */
-static void
-backend_get_details (PkBackend *backend, gchar **package_ids)
-{
-	unsigned int iterator;
-
-	pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
-	pk_backend_set_allow_cancel (backend, FALSE);
-
-	for (iterator = 0; iterator < g_strv_length (package_ids); ++iterator) {
-		alpm_list_t *licenses_list;
-		GString *licenses_str;
-		gchar *licenses;
-
-		pmpkg_t *pkg = pkg_from_package_id (package_ids[iterator]);
-		if (pkg == NULL) {
-			pk_backend_error_code (backend, PK_ERROR_ENUM_REPO_NOT_FOUND, alpm_strerrorlast ());
-			pk_backend_finished (backend);
-			return;
-		}
-
-		licenses_list = alpm_pkg_get_licenses (pkg);
-		if (licenses_list == NULL)
-			licenses_str = g_string_new ("unknown");
-		else {
-			alpm_list_t *list_iterator;
-
-			licenses_str = g_string_new ("");
-			for (list_iterator = licenses_list; list_iterator; list_iterator = alpm_list_next (list_iterator)) {
-				if (list_iterator != licenses_list)
-					g_string_append (licenses_str, ", ");
-				g_string_append (licenses_str, (char *) alpm_list_getdata (list_iterator));
-			}
-		}
-
-		/* get licenses_str content to licenses array */
-		licenses = g_string_free (licenses_str, FALSE);
+	xo = g_regex_new ("%o", 0, 0, NULL);
+	xi = g_regex_new ("%u", 0, 0, NULL);
 
-		/* return details */
-		pk_backend_details (backend, package_ids[iterator], licenses, PK_GROUP_ENUM_OTHER, alpm_pkg_get_desc (pkg), alpm_pkg_get_url (pkg), alpm_pkg_get_size (pkg));
+	basename = g_path_get_basename (url);
+	file = g_strconcat (path, basename, NULL);
+	part = g_strconcat (file, ".part", NULL);
 
-		/* free licenses array as we no longer need it */
-		g_free (licenses);
+	if (force != 0 && g_file_test (part, G_FILE_TEST_EXISTS)) {
+		g_unlink (part);
 	}
-
-	pk_backend_finished (backend);
-}
-
-/**
- * backend_get_files:
- */
-static void
-backend_get_files (PkBackend *backend, gchar **package_ids)
-{
-	unsigned int iterator;
-
-	pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
-	pk_backend_set_allow_cancel (backend, FALSE);
-
-	for (iterator = 0; iterator < g_strv_length (package_ids); ++iterator) {
-		alpm_list_t *files_list;
-		GString *files_str;
-		gchar *files;
-
-		pmpkg_t *pkg = pkg_from_package_id (package_ids[iterator]);
-		if (pkg == NULL) {
-			pk_backend_error_code (backend, PK_ERROR_ENUM_REPO_NOT_FOUND, alpm_strerrorlast ());
-			pk_backend_finished (backend);
-			return;
-		}
-
-		files_list = alpm_pkg_get_files (pkg);
-		files_str = g_string_new ("");
-		if (files_list != NULL) {
-			alpm_list_t *list_iterator;
-
-			for (list_iterator = files_list; list_iterator; list_iterator = alpm_list_next (list_iterator)) {
-				if (list_iterator != files_list)
-					g_string_append (files_str, ";");
-				g_string_append (files_str, alpm_option_get_root ());
-				g_string_append (files_str, (char *) alpm_list_getdata (list_iterator));
-			}
-		}
-		files = g_string_free (files_str, FALSE);
-
-		pk_backend_files (backend, package_ids[iterator], files);
+	if (force != 0 && g_file_test (file, G_FILE_TEST_EXISTS)) {
+		g_unlink (file);
 	}
 
-	pk_backend_finished (backend);
-}
-
-static void
-backend_search (PkBackend *backend, pmdb_t *repo, const gchar *needle, PkAlpmSearchType search_type) {
-	/* package cache */
-	alpm_list_t *pkg_cache;
-
-	/* utility variables */
-	alpm_list_t *iterator;
-	const gchar *repo_name;
-	PkInfoEnum info;
-	gboolean match;
-	gboolean repo_is_local;
-
-	if (repo == alpm_option_get_localdb ()) {
-		repo_name = ALPM_LOCAL_DB_ALIAS;
-		info = PK_INFO_ENUM_INSTALLED;
-		repo_is_local = TRUE;
-	} else {
-		repo_name = alpm_db_get_name (repo);
-		info = PK_INFO_ENUM_AVAILABLE;
-		repo_is_local = FALSE;
+	tempcmd = g_regex_replace_literal (xo, xfercmd, -1, 0, part, 0, NULL);
+	if (tempcmd == NULL) {
+		result = -1;
+		goto out;
 	}
 
-	/* get package cache for specified repo */
-	pkg_cache = alpm_db_get_pkgcache (repo);
-
-	/* iterate package cache */
-	for (iterator = pkg_cache; iterator; iterator = alpm_list_next (iterator)) {
-		pmpkg_t *pkg = alpm_list_getdata (iterator);
-
-		switch (search_type) {
-			alpm_list_t *provides;
-			alpm_list_t *groups;
-
-			case PK_ALPM_SEARCH_TYPE_NULL:
-				match = TRUE;
-				break;
-			case PK_ALPM_SEARCH_TYPE_RESOLVE:
-				match = g_strcmp0 (alpm_pkg_get_name (pkg), needle) == 0;
-				break;
-			case PK_ALPM_SEARCH_TYPE_NAME:
-				match = strstr (alpm_pkg_get_name (pkg), needle) != NULL;
-				break;
-			case PK_ALPM_SEARCH_TYPE_DETAILS:
-				/* workaround for buggy packages with no description */
-				if (alpm_pkg_get_desc (pkg) == NULL)
-					match = FALSE;
-				else
-					/* TODO: strcasestr is a non-standard extension, replace it? */
-					match = strcasestr (alpm_pkg_get_desc (pkg), needle) != NULL;
-				break;
-			case PK_ALPM_SEARCH_TYPE_GROUP:
-				match = FALSE;
-				/* iterate groups */
-				for (groups = alpm_pkg_get_groups (pkg); groups && !match; groups = alpm_list_next (groups)) {
-					gchar *group = (gchar *) g_hash_table_lookup (group_map, (char *) alpm_list_getdata (groups));
-					if (group == NULL)
-						group = (gchar *) "other";
-					match = (g_strcmp0 (group, needle) == 0);
-				}
-				break;
-			case PK_ALPM_SEARCH_TYPE_PROVIDES:
-				match = FALSE;
-				/* iterate provides */
-				for (provides = alpm_pkg_get_provides (pkg); provides && !match; provides = alpm_list_next (provides))
-					match = (g_strcmp0 (needle, alpm_list_getdata (provides)) == 0);
-				break;
-			default:
-				match = FALSE;
-		}
-
-		if (match && (repo_is_local || pkg_cmp (pkg, alpm_db_get_pkg (alpm_option_get_localdb (), alpm_pkg_get_name (pkg))) != 0)) {
-			/* we found what we wanted */
-			emit_package (backend, pkg, repo_name, info);
-		}
+	finalcmd = g_regex_replace_literal (xi, tempcmd, -1, 0, url, 0, NULL);
+	if (finalcmd == NULL) {
+		result = -1;
+		goto out;
 	}
-}
 
-/**
- * backend_search_values:
- */
-static void
-backend_search_values (PkBackend *backend, pmdb_t *repo, gchar **values, PkAlpmSearchType search_type) {
-	unsigned int iterator;
-
-	for (iterator = 0; iterator < g_strv_length (values); ++iterator)
-		backend_search (backend, repo, values[iterator], search_type);
-}
-
-/**
- * backend_get_packages_thread:
- */
-static gboolean
-backend_get_packages_thread (PkBackend *backend)
-{
-	PkBitfield filters = pk_backend_get_uint (backend, "filters");
-
-	gboolean search_installed = pk_bitfield_contain (filters, PK_FILTER_ENUM_INSTALLED);
-	gboolean search_not_installed = pk_bitfield_contain (filters, PK_FILTER_ENUM_NOT_INSTALLED);
-
-	if (!search_not_installed) {
-		/* search in local db */
-		backend_search (backend, alpm_option_get_localdb (), NULL, PK_ALPM_SEARCH_TYPE_NULL);
-	}
-
-	if (!search_installed) {
-		/* search in sync repos */
-		alpm_list_t *repos;
-		/* iterate repos */
-		for (repos = alpm_option_get_syncdbs (); repos; repos = alpm_list_next (repos))
-			backend_search (backend, alpm_list_getdata (repos), NULL, PK_ALPM_SEARCH_TYPE_NULL);
+	if (!pk_backend_spawn (backend, finalcmd)) {
+		result = -1;
+		goto out;
+	} else if (g_strrstr (xfercmd, "%o") != NULL) {
+		/* using .part filename */
+		if (g_rename (part, file) < 0) {
+			g_warning ("could not rename %s", part);
+			result = -1;
+			goto out;
+		}
 	}
 
-	pk_backend_finished (backend);
-	return TRUE;
-}
+out:
+	g_free (finalcmd);
+	g_free (tempcmd);
 
-/**
- * backend_get_packages:
- */
-static void
-backend_get_packages (PkBackend *backend, PkBitfield filters)
-{
-	pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
-	pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID);
+	g_free (part);
+	g_free (file);
+	g_free (basename);
 
-	pk_backend_thread_create (backend, backend_get_packages_thread);
-}
+	g_regex_unref (xi);
+	g_regex_unref (xo);
 
-/**
- * backend_get_repo_list:
- */
-static void
-backend_get_repo_list (PkBackend *backend, PkBitfield filters)
-{
-	alpm_list_t *list_iterator;
-
-	pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
-
-	/* iterate on repo list */
-	for (list_iterator = alpm_option_get_syncdbs (); list_iterator; list_iterator = alpm_list_next (list_iterator)) {
-		pmdb_t *db = alpm_list_getdata (list_iterator);
-
-		pk_backend_repo_detail (backend, alpm_db_get_name (db), alpm_db_get_name (db), TRUE);
-	}
+	g_chdir (oldpwd);
+	g_free (oldpwd);
 
-	pk_backend_finished (backend);
+	return result;
 }
 
-/**
- * backend_get_update_detail:
- */
 static void
-backend_get_update_detail (PkBackend *backend, gchar **package_ids)
+pk_backend_logcb (pmloglevel_t level, gchar *format, va_list args)
 {
-	unsigned int iterator;
-
-	pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
-	pk_backend_set_allow_cancel (backend, FALSE);
-
-	for (iterator = 0; iterator < g_strv_length (package_ids); ++iterator) {
-		/* TODO: add changelog code here */
-		gchar **package_id_data = pk_package_id_split (package_ids[iterator]);
+	gchar *output;
 
-		pmpkg_t *installed_pkg = alpm_db_get_pkg (alpm_option_get_localdb (), package_id_data[PK_PACKAGE_ID_NAME]);
+	g_return_if_fail (backend != NULL);
 
-		gchar *installed_package_id = installed_pkg ? pkg_to_package_id_str (installed_pkg, ALPM_LOCAL_DB_ALIAS) : NULL;
-		pk_backend_update_detail (backend, package_ids[iterator], installed_package_id, "", "", "", "", PK_RESTART_ENUM_NONE,
-			installed_pkg ? "Update to latest available version" : "Install as a dependency for another update",
-			NULL, PK_UPDATE_STATE_ENUM_UNKNOWN, NULL, NULL);
-		g_free (installed_package_id);
-
-		g_strfreev (package_id_data);
+	if (format != NULL && format[0] != '\0') {
+		output = g_strdup_vprintf (format, args);
+	} else {
+		return;
 	}
 
-	pk_backend_finished (backend);
-}
-
-/**
- * backend_get_updates:
- */
-static void
-backend_get_updates (PkBackend *backend, PkBitfield filters)
-{
-	alpm_list_t *list_iterator;
-
-	pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
-	pk_backend_set_allow_cancel (backend, FALSE);
-
-	/* iterate through list of installed packages to find update for each */
-	for (list_iterator = alpm_db_get_pkgcache (alpm_option_get_localdb ()); list_iterator; list_iterator = alpm_list_next (list_iterator)) {
-		alpm_list_t *db_iterator;
-
-		pmpkg_t *pkg = alpm_list_getdata (list_iterator);
-
-		for (db_iterator = alpm_option_get_syncdbs (); db_iterator; db_iterator = alpm_list_next (db_iterator)) {
-			pmdb_t *db = alpm_list_getdata (db_iterator);
-			pmpkg_t *repo_pkg = alpm_db_get_pkg (db, alpm_pkg_get_name (pkg));
+	/* report important output to PackageKit */
+	switch (level) {
+		case PM_LOG_DEBUG:
+		case PM_LOG_FUNCTION:
+			g_debug ("%s", output);
+			break;
 
-			if (repo_pkg != NULL && alpm_pkg_vercmp (alpm_pkg_get_version (pkg), alpm_pkg_get_version (repo_pkg)) < 0) {
-				gchar *package_id_str = pkg_to_package_id_str (repo_pkg, alpm_db_get_name (db));
-				pk_backend_package (backend, PK_INFO_ENUM_NORMAL, package_id_str, alpm_pkg_get_desc (repo_pkg));
-				g_free (package_id_str);
+		case PM_LOG_WARNING:
+			g_warning ("%s", output);
+			pk_backend_output (backend, output);
+			break;
 
-				break;
-			}
-		}
+		default:
+			g_warning ("%s", output);
+			break;
 	}
 
-	pk_backend_finished (backend);
+	g_free (output);
 }
 
-/**
- * backend_install_files_thread:
- */
 static gboolean
-backend_install_files_thread (PkBackend *backend)
+pk_backend_initialize_alpm (PkBackend *self, GError **error)
 {
-	unsigned int iterator;
-	alpm_list_t *data = NULL;
+	struct utsname un;
+	gchar *user_agent;
 
-	gchar **full_paths = pk_backend_get_strv (backend, "full_paths");
+	g_return_val_if_fail (self != NULL, FALSE);
 
-	/* create a new transaction */
-	if (alpm_trans_init (0, cb_trans_evt, cb_trans_conv, cb_trans_progress) != 0) {
-		pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_ERROR, alpm_strerrorlast ());
-		pk_backend_finished (backend);
-		return FALSE;
-	}
+	/* PATH might have been nuked by D-Bus */
+	g_setenv ("PATH", PK_BACKEND_DEFAULT_PATH, FALSE);
 
-	/* add targets to the transaction */
-	for (iterator = 0; iterator < g_strv_length (full_paths); ++iterator) {
-		if (alpm_add_target (full_paths[iterator]) != 0) {
-			pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_ERROR, alpm_strerrorlast ());
-			alpm_trans_release ();
-			pk_backend_finished (backend);
-			return FALSE;
-		} else
-			g_debug ("alpm: %s added to transaction queue", full_paths[iterator]);
-	}
+	uname (&un);
+	user_agent = g_strdup_printf ("%s/%s (%s %s) libalpm/%s",
+				      PACKAGE_TARNAME, PACKAGE_VERSION,
+				      un.sysname, un.machine, alpm_version ());
+	g_setenv ("HTTP_USER_AGENT", user_agent, FALSE);
+	g_free (user_agent);
 
-	/* prepare and commit transaction */
-	if (alpm_trans_prepare (&data) != 0 || alpm_trans_commit (&data) != 0) {
-		pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_ERROR, alpm_strerrorlast ());
-		alpm_trans_release ();
-		pk_backend_finished (backend);
+	g_debug ("initializing");
+	if (alpm_initialize () < 0) {
+		g_set_error_literal (error, ALPM_ERROR, pm_errno,
+				     alpm_strerrorlast ());
 		return FALSE;
 	}
 
-	alpm_trans_release ();
+	backend = self;
+
+	/* set some sane defaults */
+	alpm_option_set_logcb (pk_backend_logcb);
+	alpm_option_set_root (PK_BACKEND_DEFAULT_ROOT);
+	alpm_option_set_dbpath (PK_BACKEND_DEFAULT_DBPATH);
+	alpm_option_set_logfile (PK_BACKEND_DEFAULT_LOGFILE);
 
-	pk_backend_finished (backend);
 	return TRUE;
 }
 
-/**
- * backend_install_files:
- */
 static void
-backend_install_files (PkBackend *backend, gboolean only_trusted, gchar **full_paths)
-{
-	pk_backend_set_status (backend, PK_STATUS_ENUM_INSTALL);
-	pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID);
-
-	pk_backend_thread_create (backend, backend_install_files_thread);
-}
-
-/**
- * backend_install_packages_thread:
- */
-static gboolean
-backend_install_packages_thread (PkBackend *backend)
+pk_backend_destroy_alpm (PkBackend *self)
 {
-	unsigned int iterator;
-	alpm_list_t *data = NULL;
-
-	/* FIXME: support only_trusted */
-	gchar **package_ids = pk_backend_get_strv (backend, "package_ids");
-
-	/* create a new transaction */
-	if (alpm_trans_init (0, cb_trans_evt, cb_trans_conv, cb_trans_progress) != 0) {
-		pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_ERROR, alpm_strerrorlast ());
-		pk_backend_finished (backend);
-		return FALSE;
-	}
-
-	/* add targets to the transaction */
-	for (iterator = 0; iterator < g_strv_length (package_ids); ++iterator) {
-		gchar **package_id_data = pk_package_id_split (package_ids[iterator]);
+	g_return_if_fail (self != NULL);
 
-		if (alpm_sync_target (package_id_data[PK_PACKAGE_ID_NAME]) != 0) {
-			pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_ERROR, alpm_strerrorlast ());
+	if (backend != NULL) {
+		if (alpm_trans_get_flags () != -1) {
 			alpm_trans_release ();
-			pk_backend_finished (backend);
-			return FALSE;
 		}
-
-		g_strfreev (package_id_data);
-	}
-
-	/* prepare and commit transaction */
-	if (alpm_trans_prepare (&data) != 0 || alpm_trans_commit (&data) != 0) {
-		pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_ERROR, alpm_strerrorlast ());
-		alpm_trans_release ();
-		pk_backend_finished (backend);
-		return FALSE;
+		alpm_release ();
+		backend = NULL;
 	}
 
-	alpm_trans_release ();
-
-	pk_backend_finished (backend);
-	return TRUE;
-}
-
-/**
- * backend_install_packages:
- */
-static void
-backend_install_packages (PkBackend *backend, gboolean only_trusted, gchar **package_ids)
-{
-	pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID);
-
-	pk_backend_thread_create (backend, backend_install_packages_thread);
+	FREELIST (syncfirsts);
+	FREELIST (holdpkgs);
+	g_free (xfercmd);
 }
 
-/**
- * backend_refresh_cache_thread:
- */
-static gboolean
-backend_refresh_cache_thread (PkBackend *backend)
+void
+pk_backend_initialize (PkBackend *self)
 {
-	alpm_list_t *list_iterator;
+	GError *error = NULL;
 
-	if (alpm_trans_init (PM_TRANS_FLAG_NOSCRIPTLET, cb_trans_evt, cb_trans_conv, cb_trans_progress) != 0) {
-		pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_ERROR, alpm_strerrorlast ());
-		pk_backend_finished (backend);
-		return FALSE;
-	}
+	g_return_if_fail (self != NULL);
 
-	for (list_iterator = alpm_option_get_syncdbs (); list_iterator; list_iterator = alpm_list_next (list_iterator)) {
-		pmdb_t *db = (pmdb_t *) alpm_list_getdata (list_iterator);
-		if (alpm_db_update (FALSE, db) == -1) {
-			pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_ERROR, alpm_strerrorlast ());
-			pk_backend_finished (backend);
-			return FALSE;
-		}
+	if (!pk_backend_initialize_alpm (self, &error) ||
+	    !pk_backend_initialize_databases (self, &error) ||
+	    !pk_backend_initialize_groups (self, &error)) {
+		g_error ("%s", error->message);
+		g_error_free (error);
 	}
-
-	alpm_trans_release ();
-
-	pk_backend_finished (backend);
-	return TRUE;
 }
 
-/**
- * backend_refresh_cache:
- */
-static void
-backend_refresh_cache (PkBackend *backend, gboolean force)
+void
+pk_backend_destroy (PkBackend *self)
 {
-	if (!pk_backend_is_online (backend)) {
-		pk_backend_error_code (backend, PK_ERROR_ENUM_NO_NETWORK, "Can not refresh cache in offline mode");
-		pk_backend_finished (backend);
-		return;
-	}
-
-	pk_backend_set_status (backend, PK_STATUS_ENUM_REFRESH_CACHE);
-	pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID);
+	g_return_if_fail (self != NULL);
 
-	pk_backend_thread_create (backend, backend_refresh_cache_thread);
+	pk_backend_destroy_groups (self);
+	pk_backend_destroy_databases (self);
+	pk_backend_destroy_alpm (self);
 }
 
-/**
- * backend_remove_packages_thread:
- */
-static gboolean
-backend_remove_packages_thread (PkBackend *backend)
+PkBitfield
+pk_backend_get_filters (PkBackend *self)
 {
-	unsigned int iterator;
-	alpm_list_t *list_iterator = NULL;
-	alpm_list_t *data = NULL;
-	gchar *holdpkgs = NULL;
-
-	gchar **package_ids = pk_backend_get_strv (backend, "package_ids");
-	gboolean allow_deps = pk_backend_get_bool (backend, "allow_deps");
-	gboolean autoremove = pk_backend_get_bool (backend, "autoremove");
-
-	pmtransflag_t flags = 0;
-	if (allow_deps)
-		flags |= PM_TRANS_FLAG_CASCADE;
-	if (autoremove)
-		flags |= PM_TRANS_FLAG_RECURSE;
-
-	/* create a new transaction */
-	if (alpm_trans_init (flags, cb_trans_evt, cb_trans_conv, cb_trans_progress) != 0) {
-		pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_ERROR, alpm_strerrorlast ());
-		pk_backend_finished (backend);
-		return FALSE;
-	}
-
-	/* add targets to the transaction */
-	for (iterator = 0; iterator < g_strv_length (package_ids); ++iterator) {
-		gchar **package_id_data = pk_package_id_split (package_ids[iterator]);
-
-		if (alpm_remove_target (package_id_data[PK_PACKAGE_ID_NAME]) != 0) {
-			pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_ERROR, alpm_strerrorlast ());
-			alpm_trans_release ();
-			pk_backend_finished (backend);
-			return FALSE;
-		}
-
-		g_strfreev (package_id_data);
-	}
-
-	/* prepare transaction */
-	if (alpm_trans_prepare (&data) != 0) {
-		pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_ERROR, alpm_strerrorlast ());
-		alpm_trans_release ();
-		pk_backend_finished (backend);
-		return FALSE;
-	}
+	g_return_val_if_fail (self != NULL, 0);
 
-	/* search for HoldPkg's in target list */
-	for (list_iterator = alpm_trans_get_remove (); list_iterator; list_iterator = alpm_list_next (list_iterator)) {
-		pmpkg_t *pkg = alpm_list_getdata (list_iterator);
-		const gchar *pkgname = alpm_pkg_get_name (pkg);
-
-		if (alpm_list_find_str (holdpkg, pkgname) != NULL) {
-			if (holdpkgs == NULL)
-				holdpkgs = g_strdup (pkgname);
-			else {
-				gchar *new_holdpkgs = g_strdup_printf ("%s, %s", holdpkgs, pkgname);
-				g_free (holdpkgs);
-				holdpkgs = new_holdpkgs;
-			}
-		}
-	}
-
-	/* pacman just asks for confirmation, but here we fail to be safe */
-	if (holdpkgs != NULL) {
-		pk_backend_error_code (backend, PK_ERROR_ENUM_CANNOT_REMOVE_SYSTEM_PACKAGE, "The following packages are designated HoldPkg: %s", holdpkgs);
-		free (holdpkgs);
-		alpm_trans_release ();
-		pk_backend_finished (backend);
-		return FALSE;
-	}
-
-	/* commit transaction */
-	if (alpm_trans_commit (&data) != 0) {
-		pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_ERROR, alpm_strerrorlast ());
-		alpm_trans_release ();
-		pk_backend_finished (backend);
-		return FALSE;
-	}
-
-	alpm_trans_release ();
-
-	pk_backend_finished (backend);
-	return TRUE;
+	return pk_bitfield_from_enums (PK_FILTER_ENUM_INSTALLED, -1);
 }
 
-/**
- * backend_remove_packages:
- */
-static void
-backend_remove_packages (PkBackend *backend, gchar **package_ids, gboolean allow_deps, gboolean autoremove)
+gchar *
+pk_backend_get_mime_types (PkBackend *self)
 {
-	pk_backend_set_status (backend, PK_STATUS_ENUM_REMOVE);
-	pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID);
+	g_return_val_if_fail (self != NULL, NULL);
 
-	pk_backend_thread_create (backend, backend_remove_packages_thread);
+	/* packages currently use .pkg.tar.gz and .pkg.tar.xz */
+	return g_strdup ("application/x-compressed-tar;"
+			 "application/x-xz-compressed-tar");
 }
 
-/**
- * backend_resolve_thread:
- */
-static gboolean
-backend_resolve_thread (PkBackend *backend)
+void
+pk_backend_run (PkBackend *self, PkStatusEnum status, PkBackendThreadFunc func)
 {
-	unsigned int iterator;
-
-	gchar **package_ids = pk_backend_get_strv (backend, "package_ids");
-	PkBitfield filters = pk_backend_get_uint (backend, "filters");
-
-	gboolean search_installed = pk_bitfield_contain (filters, PK_FILTER_ENUM_INSTALLED);
-	gboolean search_not_installed = pk_bitfield_contain (filters, PK_FILTER_ENUM_NOT_INSTALLED);
-
-	for (iterator = 0; iterator < g_strv_length (package_ids); ++iterator) {
-		if (pk_package_id_check (package_ids[iterator])) {
-			/* skip all the db iterations and so on - we already know everything */
-			pmpkg_t *pkg = pkg_from_package_id (package_ids[iterator]);
-
-			if (pkg != NULL) {
-				gchar **package_id_data = pk_package_id_split (package_ids[iterator]);
-
-				if (!search_not_installed && g_strcmp0 (package_id_data[PK_PACKAGE_ID_DATA], ALPM_LOCAL_DB_ALIAS) == 0)
-					emit_package (backend, pkg, ALPM_LOCAL_DB_ALIAS, PK_INFO_ENUM_INSTALLED);
-
-				if (!search_installed && g_strcmp0 (package_id_data[PK_PACKAGE_ID_DATA], ALPM_LOCAL_DB_ALIAS) != 0)
-					emit_package (backend, pkg, package_id_data[PK_PACKAGE_ID_DATA], PK_INFO_ENUM_INSTALLED);
-
-				g_strfreev (package_id_data);
-			}
-		} else {
-			/* good old way with backend_search */
-			/* TODO: check, is it still needed? */
-			if (!search_not_installed) {
-				/* search in local db */
-				backend_search (backend, alpm_option_get_localdb (), package_ids[iterator], PK_ALPM_SEARCH_TYPE_RESOLVE);
-			}
-
-			if (!search_installed) {
-				/* search in sync repos */
-				alpm_list_t *repos;
-				/* iterate repos */
-				for (repos = alpm_option_get_syncdbs (); repos; repos = alpm_list_next (repos))
-					backend_search (backend, alpm_list_getdata (repos), package_ids[iterator], PK_ALPM_SEARCH_TYPE_RESOLVE);
-			}
-		}
+	g_return_if_fail (self != NULL);
+	g_return_if_fail (func != NULL);
+
+	g_static_mutex_lock (&mutex);
+
+	if (cancellable != NULL) {
+		g_warning ("cancellable was not NULL");
+		g_object_unref (cancellable);
 	}
+	cancellable = g_cancellable_new ();
 
-	pk_backend_finished (backend);
-	return TRUE;
-}
+	g_static_mutex_unlock (&mutex);
 
-/**
- * backend_resolve:
- */
-static void
-backend_resolve (PkBackend *backend, PkBitfield filters, gchar **package_ids)
-{
-	pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
-	pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID);
+	pk_backend_set_allow_cancel (self, TRUE);
 
-	pk_backend_thread_create (backend, backend_resolve_thread);
+	pk_backend_set_status (self, status);
+	pk_backend_thread_create (self, func);
 }
 
-/**
- * backend_search_thread:
- */
-static gboolean
-backend_search_thread (PkBackend *backend)
+void
+pk_backend_cancel (PkBackend *self)
 {
-	gchar **values = pk_backend_get_strv (backend, "values");
-	PkBitfield filters = pk_backend_get_uint (backend, "filters");
-	PkAlpmSearchType search_type = pk_backend_get_uint (backend, "search-type");
-
-	gboolean search_installed = pk_bitfield_contain (filters, PK_FILTER_ENUM_INSTALLED);
-	gboolean search_not_installed = pk_bitfield_contain (filters, PK_FILTER_ENUM_NOT_INSTALLED);
+	g_return_if_fail (self != NULL);
 
-	if (!search_not_installed) {
-		/* search in local db */
-		backend_search_values (backend, alpm_option_get_localdb (), values, search_type);
-	}
+	g_static_mutex_lock (&mutex);
 
-	if (!search_installed) {
-		/* search in sync repos */
-		alpm_list_t *repos;
-		/* iterate repos */
-		for (repos = alpm_option_get_syncdbs (); repos; repos = alpm_list_next (repos))
-			backend_search_values (backend, alpm_list_getdata (repos), values, search_type);
+	if (cancellable != NULL) {
+		g_cancellable_cancel (cancellable);
 	}
 
-	pk_backend_finished (backend);
-	return TRUE;
+	g_static_mutex_unlock (&mutex);
 }
 
-/**
- * backend_search_details:
- */
-static void
-backend_search_details (PkBackend *backend, PkBitfield filters, gchar **values)
+gboolean
+pk_backend_cancelled (PkBackend *self)
 {
-	pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
-	pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID);
-	pk_backend_set_uint (backend, "search-type", PK_ALPM_SEARCH_TYPE_DETAILS);
-	pk_backend_set_strv (backend, "values", values);
+	gboolean cancelled;
 
-	pk_backend_thread_create (backend, backend_search_thread);
-}
+	g_return_val_if_fail (self != NULL, FALSE);
+	g_return_val_if_fail (cancellable != NULL, FALSE);
 
-/**
- * backend_search_groups:
- */
-static void
-backend_search_groups (PkBackend *backend, PkBitfield filters, gchar **values)
-{
-	pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
-	pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID);
-	pk_backend_set_uint (backend, "search-type", PK_ALPM_SEARCH_TYPE_GROUP);
-	pk_backend_set_strv (backend, "values", values);
+	g_static_mutex_lock (&mutex);
 
-	pk_backend_thread_create (backend, backend_search_thread);
-}
+	cancelled = g_cancellable_is_cancelled (cancellable);
 
-/**
- * backend_search_names:
- */
-static void
-backend_search_names (PkBackend *backend, PkBitfield filters, gchar **values)
-{
-	pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
-	pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID);
-	pk_backend_set_uint (backend, "search-type", PK_ALPM_SEARCH_TYPE_NAME);
-	pk_backend_set_strv (backend, "values", values);
+	g_static_mutex_unlock (&mutex);
 
-	pk_backend_thread_create (backend, backend_search_thread);
+	return cancelled;
 }
 
-/**
- * backend_update_packages:
- */
-static void
-backend_update_packages (PkBackend *backend, gboolean only_trusted, gchar **package_ids)
+gboolean
+pk_backend_finish (PkBackend *self, GError *error)
 {
-	pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID);
+	gboolean cancelled = FALSE;
 
-	pk_backend_thread_create (backend, backend_install_packages_thread);
-}
+	g_return_val_if_fail (self != NULL, FALSE);
 
-/**
- * backend_update_system_thread:
- */
-static gboolean
-backend_update_system_thread (PkBackend *backend)
-{
-	alpm_list_t *data = NULL;
-
-	/* FIXME: support only_trusted */
+	pk_backend_set_allow_cancel (self, FALSE);
 
-	/* create a new transaction */
-	if (alpm_trans_init (0, cb_trans_evt, cb_trans_conv, cb_trans_progress) != 0) {
-		pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_ERROR, alpm_strerrorlast ());
-		pk_backend_finished (backend);
-		return FALSE;
-	}
+	g_static_mutex_lock (&mutex);
 
-	/* set action, prepare and commit transaction */
-	if (alpm_sync_sysupgrade (FALSE) != 0 || alpm_trans_prepare (&data) != 0 || alpm_trans_commit (&data) != 0) {
-		pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_ERROR, alpm_strerrorlast ());
-		alpm_trans_release ();
-		pk_backend_finished (backend);
-		return FALSE;
+	if (cancellable != NULL) {
+		cancelled = g_cancellable_is_cancelled (cancellable);
+		g_object_unref (cancellable);
+		cancellable = NULL;
 	}
 
-	alpm_trans_release ();
+	g_static_mutex_unlock (&mutex);
 
-	pk_backend_finished (backend);
-	return TRUE;
-}
-
-/**
- * backend_update_system:
- */
-static void
-backend_update_system (PkBackend *backend, gboolean only_trusted)
-{
-	pk_backend_thread_create (backend, backend_update_system_thread);
-}
+	if (error != NULL) {
+		pk_backend_error (self, error);
+		g_error_free (error);
+	}
 
-/**
- * backend_what_provides:
- */
-static void
-backend_what_provides (PkBackend *backend, PkBitfield filters, PkProvidesEnum provides, gchar **values)
-{
-	pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
-	pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID);
-	pk_backend_set_uint (backend, "search-type", PK_ALPM_SEARCH_TYPE_PROVIDES);
-	pk_backend_set_strv (backend, "values", values);
+	if (cancelled) {
+		pk_backend_set_status (self, PK_STATUS_ENUM_CANCEL);
+	}
 
-	pk_backend_thread_create (backend, backend_search_thread);
+	pk_backend_thread_finished (self);
+	return (error == NULL);
 }
-
-/* FIXME: port this away from PK_BACKEND_OPTIONS */
-PK_BACKEND_OPTIONS (
-	"alpm",						/* description */
-	"Valeriy Lyasotskiy <onestep at ukr.net>",		/* author */
-	backend_initialize,				/* initialize */
-	backend_destroy,				/* destroy */
-	backend_get_groups,				/* get_groups */
-	backend_get_filters,				/* get_filters */
-	NULL,						/* get_roles */
-	backend_get_mime_types,				/* get_mime_types */
-	backend_cancel,					/* cancel */
-	backend_download_packages,			/* download_packages */
-	NULL,						/* get_categories */
-	backend_get_depends,				/* get_depends */
-	backend_get_details,				/* get_details */
-	NULL,						/* get_distro_upgrades */
-	backend_get_files,				/* get_files */
-	backend_get_packages,				/* get_packages */
-	backend_get_repo_list,				/* get_repo_list */
-	NULL,						/* get_requires */
-	backend_get_update_detail,			/* get_update_detail */
-	backend_get_updates,				/* get_updates */
-	backend_install_files,				/* install_files */
-	backend_install_packages,			/* install_packages */
-	NULL,						/* install_signature */
-	backend_refresh_cache,				/* refresh_cache */
-	backend_remove_packages,			/* remove_packages */
-	NULL,						/* repo_enable */
-	NULL,						/* repo_set_data */
-	backend_resolve,				/* resolve */
-	NULL,						/* rollback */
-	backend_search_details,				/* search_details */
-	NULL,						/* search_files */
-	backend_search_groups,				/* search_groups */
-	backend_search_names,				/* search_names */
-	backend_update_packages,			/* update_packages */
-	backend_update_system,				/* update_system */
-	backend_what_provides,				/* what_provides */
-	NULL,						/* simulate_install_files */
-	NULL,						/* simulate_install_packages */
-	NULL,						/* simulate_remove_packages */
-	NULL,						/* simulate_update_packages */
-	NULL,						/* upgrade_system */
-	NULL,						/* transaction_start */
-	NULL						/* transaction_stop */
-);
diff --git a/backends/alpm/pk-backend-alpm.h b/backends/alpm/pk-backend-alpm.h
new file mode 100644
index 0000000..ccdbb8e
--- /dev/null
+++ b/backends/alpm/pk-backend-alpm.h
@@ -0,0 +1,45 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2007 Andreas Obergrusberger <tradiaz at yahoo.de>
+ * Copyright (C) 2008-2010 Valeriy Lyasotskiy <onestep at ukr.net>
+ * Copyright (C) 2010-2011 Jonathan Conder <jonno.conder 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 <alpm.h>
+#include <gio/gio.h>
+#include <pk-backend.h>
+
+extern PkBackend *backend;
+extern GCancellable *cancellable;
+
+extern gchar *xfercmd;
+extern alpm_list_t *holdpkgs;
+extern alpm_list_t *syncfirsts;
+
+gint		 pk_backend_fetchcb	(const gchar *url, const gchar *path,
+					 gint force);
+
+void		 pk_backend_run		(PkBackend *self, PkStatusEnum status,
+					 PkBackendThreadFunc func);
+
+void		 pk_backend_cancel	(PkBackend *self);
+
+gboolean	 pk_backend_cancelled	(PkBackend *self);
+
+gboolean	 pk_backend_finish	(PkBackend *self, GError *error);
diff --git a/backends/alpm/pk-backend-config.c b/backends/alpm/pk-backend-config.c
new file mode 100644
index 0000000..c426e75
--- /dev/null
+++ b/backends/alpm/pk-backend-config.c
@@ -0,0 +1,771 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2007 Andreas Obergrusberger <tradiaz at yahoo.de>
+ * Copyright (C) 2008-2010 Valeriy Lyasotskiy <onestep at ukr.net>
+ * Copyright (C) 2010-2011 Jonathan Conder <jonno.conder 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 <alpm.h>
+#include <glob.h>
+#include <string.h>
+#include <sys/utsname.h>
+
+#include "pk-backend-alpm.h"
+#include "pk-backend-config.h"
+#include "pk-backend-databases.h"
+#include "pk-backend-error.h"
+
+typedef struct {
+	gboolean ilovecandy, showsize, totaldl, usedelta, usesyslog;
+
+	gchar *arch, *cleanmethod, *dbpath, *logfile, *root, *xfercmd;
+
+	alpm_list_t *cachedirs, *holdpkgs, *ignoregrps, *ignorepkgs,
+		    *noextracts, *noupgrades, *syncfirsts;
+
+	alpm_list_t *repos;
+	GHashTable *servers;
+	GRegex *xrepo, *xarch;
+} PkBackendConfig;
+
+static PkBackendConfig *
+pk_backend_config_new (void)
+{
+	PkBackendConfig *config = g_new0 (PkBackendConfig, 1);
+	config->servers = g_hash_table_new_full (g_str_hash, g_str_equal,
+						 g_free, NULL);
+	config->xrepo = g_regex_new ("\\$repo", 0, 0, NULL);
+	config->xarch = g_regex_new ("\\$arch", 0, 0, NULL);
+	return config;
+}
+
+static void
+pk_backend_config_list_free (alpm_list_t *list)
+{
+	alpm_list_free_inner (list, g_free);
+	alpm_list_free (list);
+}
+
+static gboolean
+pk_backend_config_servers_free (gpointer repo, gpointer list, gpointer data)
+{
+	pk_backend_config_list_free ((alpm_list_t *) list);
+	return TRUE;
+}
+
+static void
+pk_backend_config_free (PkBackendConfig *config)
+{
+	g_return_if_fail (config != NULL);
+
+	g_free (config->arch);
+	g_free (config->cleanmethod);
+	g_free (config->dbpath);
+	g_free (config->logfile);
+	g_free (config->root);
+	g_free (config->xfercmd);
+
+	FREELIST (config->cachedirs);
+	FREELIST (config->holdpkgs);
+	FREELIST (config->ignoregrps);
+	FREELIST (config->ignorepkgs);
+	FREELIST (config->noextracts);
+	FREELIST (config->noupgrades);
+	FREELIST (config->syncfirsts);
+
+	pk_backend_config_list_free (config->repos);
+	g_hash_table_foreach_remove (config->servers,
+				     pk_backend_config_servers_free, NULL);
+	g_hash_table_unref (config->servers);
+	g_regex_unref (config->xrepo);
+	g_regex_unref (config->xarch);
+}
+
+static void
+pk_backend_config_set_ilovecandy (PkBackendConfig *config)
+{
+	g_return_if_fail (config != NULL);
+
+	config->ilovecandy = TRUE;
+}
+
+static void
+pk_backend_config_set_showsize (PkBackendConfig *config)
+{
+	g_return_if_fail (config != NULL);
+
+	config->showsize = TRUE;
+}
+
+static void
+pk_backend_config_set_totaldl (PkBackendConfig *config)
+{
+	g_return_if_fail (config != NULL);
+
+	config->totaldl = TRUE;
+}
+
+static void
+pk_backend_config_set_usedelta (PkBackendConfig *config)
+{
+	g_return_if_fail (config != NULL);
+
+	config->usedelta = TRUE;
+}
+
+static void
+pk_backend_config_set_usesyslog (PkBackendConfig *config)
+{
+	g_return_if_fail (config != NULL);
+
+	config->usesyslog = TRUE;
+}
+
+typedef struct {
+	const gchar *name;
+	void (*func) (PkBackendConfig *config);
+} PkBackendConfigBoolean;
+
+/* keep this in alphabetical order */
+static const PkBackendConfigBoolean pk_backend_config_boolean_options[] = {
+	{ "ILoveCandy", pk_backend_config_set_ilovecandy },
+	{ "ShowSize", pk_backend_config_set_showsize },
+	{ "TotalDownload", pk_backend_config_set_totaldl },
+	{ "UseDelta", pk_backend_config_set_usedelta },
+	{ "UseSyslog", pk_backend_config_set_usesyslog },
+	{ NULL, NULL }
+};
+
+static gboolean
+pk_backend_config_set_boolean (PkBackendConfig *config, const gchar *option)
+{
+	gsize i;
+
+	g_return_val_if_fail (config != NULL, FALSE);
+	g_return_val_if_fail (option != NULL, FALSE);
+
+	for (i = 0;; ++i) {
+		const gchar *name = pk_backend_config_boolean_options[i].name;
+		gint cmp = g_strcmp0 (option, name);
+
+		if (name == NULL || cmp < 0) {
+			return FALSE;
+		} else if (cmp == 0) {
+			pk_backend_config_boolean_options[i].func (config);
+			return TRUE;
+		}
+	}
+}
+
+static void
+pk_backend_config_add_cachedir (PkBackendConfig *config, const gchar *path)
+{
+	gsize length;
+	gchar *cachedir;
+
+	g_return_if_fail (config != NULL);
+	g_return_if_fail (path != NULL);
+
+	/* allocate normally */
+	length = strlen (path) + 1;
+	cachedir = malloc (length * sizeof (gchar));
+	g_strlcpy (cachedir, path, length);
+	config->cachedirs = alpm_list_add (config->cachedirs, cachedir);
+}
+
+static void
+pk_backend_config_set_arch (PkBackendConfig *config, const gchar *arch)
+{
+	g_return_if_fail (config != NULL);
+	g_return_if_fail (arch != NULL);
+
+	g_free (config->arch);
+	if (g_strcmp0 (arch, "auto") == 0) {
+		struct utsname un;
+		uname (&un);
+		config->arch = g_strdup (un.machine);
+	} else {
+		config->arch = g_strdup (arch);
+	}
+}
+
+static void
+pk_backend_config_set_cleanmethod (PkBackendConfig *config, const gchar *method)
+{
+	g_return_if_fail (config != NULL);
+	g_return_if_fail (method != NULL);
+
+	g_free (config->cleanmethod);
+	config->cleanmethod = g_strdup (method);
+}
+
+static void
+pk_backend_config_set_dbpath (PkBackendConfig *config, const gchar *path)
+{
+	g_return_if_fail (config != NULL);
+	g_return_if_fail (path != NULL);
+
+	g_free (config->dbpath);
+	config->dbpath = g_strdup (path);
+}
+
+static void
+pk_backend_config_set_logfile (PkBackendConfig *config, const gchar *filename)
+{
+	g_return_if_fail (config != NULL);
+	g_return_if_fail (filename != NULL);
+
+	g_free (config->logfile);
+	config->logfile = g_strdup (filename);
+}
+
+static void
+pk_backend_config_set_root (PkBackendConfig *config, const gchar *path)
+{
+	g_return_if_fail (config != NULL);
+	g_return_if_fail (path != NULL);
+
+	g_free (config->root);
+	config->root = g_strdup (path);
+}
+
+static void
+pk_backend_config_set_xfercmd (PkBackendConfig *config, const gchar *command)
+{
+	g_return_if_fail (config != NULL);
+	g_return_if_fail (command != NULL);
+
+	g_free (config->xfercmd);
+	config->xfercmd = g_strdup (command);
+}
+
+typedef struct {
+	const gchar *name;
+	void (*func) (PkBackendConfig *config, const gchar *s);
+} PkBackendConfigString;
+
+/* keep this in alphabetical order */
+static const PkBackendConfigString pk_backend_config_string_options[] = {
+	{ "Architecture", pk_backend_config_set_arch },
+	{ "CacheDir", pk_backend_config_add_cachedir },
+	{ "CleanMethod", pk_backend_config_set_cleanmethod },
+	{ "DBPath", pk_backend_config_set_dbpath },
+	{ "LogFile", pk_backend_config_set_logfile },
+	{ "RootDir", pk_backend_config_set_root },
+	{ "XferCommand", pk_backend_config_set_xfercmd },
+	{ NULL, NULL }
+};
+
+static gboolean
+pk_backend_config_set_string (PkBackendConfig *config, const gchar *option,
+			      const gchar *s)
+{
+	gsize i;
+
+	g_return_val_if_fail (config != NULL, FALSE);
+	g_return_val_if_fail (option != NULL, FALSE);
+	g_return_val_if_fail (s != NULL, FALSE);
+
+	for (i = 0;; ++i) {
+		const gchar *name = pk_backend_config_string_options[i].name;
+		gint cmp = g_strcmp0 (option, name);
+
+		if (name == NULL || cmp < 0) {
+			return FALSE;
+		} else if (cmp == 0) {
+			pk_backend_config_string_options[i].func (config, s);
+			return TRUE;
+		}
+	}
+}
+
+static void
+pk_backend_config_add_holdpkg (PkBackendConfig *config, gchar *package)
+{
+	g_return_if_fail (config != NULL);
+	g_return_if_fail (package != NULL);
+
+	config->holdpkgs = alpm_list_add (config->holdpkgs, package);
+}
+
+static void
+pk_backend_config_add_ignoregrp (PkBackendConfig *config, gchar *group)
+{
+	g_return_if_fail (config != NULL);
+	g_return_if_fail (group != NULL);
+
+	config->ignoregrps = alpm_list_add (config->ignoregrps, group);
+}
+
+static void
+pk_backend_config_add_ignorepkg (PkBackendConfig *config, gchar *package)
+{
+	g_return_if_fail (config != NULL);
+	g_return_if_fail (package != NULL);
+
+	config->ignorepkgs = alpm_list_add (config->ignorepkgs, package);
+}
+
+static void
+pk_backend_config_add_noextract (PkBackendConfig *config, gchar *filename)
+{
+	g_return_if_fail (config != NULL);
+	g_return_if_fail (filename != NULL);
+
+	config->noextracts = alpm_list_add (config->noextracts, filename);
+}
+
+static void
+pk_backend_config_add_noupgrade (PkBackendConfig *config, gchar *filename)
+{
+	g_return_if_fail (config != NULL);
+	g_return_if_fail (filename != NULL);
+
+	config->noupgrades = alpm_list_add (config->noupgrades, filename);
+}
+
+static void
+pk_backend_config_add_syncfirst (PkBackendConfig *config, gchar *package)
+{
+	g_return_if_fail (config != NULL);
+	g_return_if_fail (package != NULL);
+
+	config->syncfirsts = alpm_list_add (config->syncfirsts, package);
+}
+
+typedef struct {
+	const gchar *name;
+	void (*func) (PkBackendConfig *config, gchar *value);
+} PkBackendConfigList;
+
+/* keep this in alphabetical order */
+static const PkBackendConfigList pk_backend_config_list_options[] = {
+	{ "HoldPkg", pk_backend_config_add_holdpkg },
+	{ "IgnoreGroup", pk_backend_config_add_ignoregrp },
+	{ "IgnorePkg", pk_backend_config_add_ignorepkg },
+	{ "NoExtract", pk_backend_config_add_noextract },
+	{ "NoUpgrade", pk_backend_config_add_noupgrade },
+	{ "SyncFirst", pk_backend_config_add_syncfirst },
+	{ NULL, NULL }
+};
+
+static void
+pk_backend_config_list_add (PkBackendConfig *config, gsize option,
+			    const gchar *list)
+{
+	gchar *str;
+
+	for (str = strchr (list, ' '); str != NULL; str = strchr (list, ' ')) {
+		/* allocate normally */
+		gchar *value = malloc ((++str - list) * sizeof (gchar));
+		g_strlcpy (value, list, str - list);
+		pk_backend_config_list_options[option].func (config, value);
+		list = str;
+	}
+	pk_backend_config_list_options[option].func (config, strdup (list));
+}
+
+static gboolean
+pk_backend_config_set_list (PkBackendConfig *config, const gchar *option,
+			    const gchar *list)
+{
+	gsize i;
+
+	g_return_val_if_fail (config != NULL, FALSE);
+	g_return_val_if_fail (option != NULL, FALSE);
+	g_return_val_if_fail (list != NULL, FALSE);
+
+	for (i = 0;; ++i) {
+		const gchar *name = pk_backend_config_list_options[i].name;
+		gint cmp = g_strcmp0 (option, name);
+
+		if (name == NULL || cmp < 0) {
+			return FALSE;
+		} else if (cmp == 0) {
+			pk_backend_config_list_add (config, i, list);
+			return TRUE;
+		}
+	}
+}
+
+static void
+pk_backend_config_add_repo (PkBackendConfig *config, const gchar *repo)
+{
+	g_return_if_fail (config != NULL);
+	g_return_if_fail (repo != NULL);
+
+	if (alpm_list_find_str (config->repos, repo) == NULL) {
+		config->repos = alpm_list_add (config->repos, g_strdup (repo));
+	}
+}
+
+static gboolean
+pk_backend_config_repo_add_server (PkBackendConfig *config, const gchar *repo,
+				   const gchar *value, GError **e)
+{
+	alpm_list_t *list;
+	gchar *url;
+
+	g_return_val_if_fail (config != NULL, FALSE);
+	g_return_val_if_fail (repo != NULL, FALSE);
+	g_return_val_if_fail (alpm_list_find_str (config->repos, repo) != NULL,
+			      FALSE);
+	g_return_val_if_fail (value != NULL, FALSE);
+
+	url = g_regex_replace_literal (config->xrepo, value, -1, 0, repo, 0, e);
+	if (url == NULL) {
+		return FALSE;
+	}
+
+	if (config->arch != NULL) {
+		gchar *temp = url;
+		url = g_regex_replace_literal (config->xarch, temp, -1, 0,
+					       config->arch, 0, e);
+		g_free (temp);
+
+		if (url == NULL) {
+			return FALSE;
+		}
+	} else if (strstr (url, "$arch") != NULL) {
+		g_set_error (e, ALPM_ERROR, PM_ERR_CONFIG_INVALID,
+			     "url contained $arch, which is not set");
+	}
+
+	list = (alpm_list_t *) g_hash_table_lookup (config->servers, repo);
+	list = alpm_list_add (list, url);
+	g_hash_table_insert (config->servers, g_strdup (repo), list);
+
+	return TRUE;
+}
+
+static gboolean
+pk_backend_config_parse (PkBackendConfig *config, const gchar *filename,
+			 gchar *section, GError **error)
+{
+	GFile *file;
+	GFileInputStream *is;
+	GDataInputStream *input;
+
+	gchar *key, *str, *line = NULL;
+	guint num = 1;
+
+	GError *e = NULL;
+
+	g_return_val_if_fail (config != NULL, FALSE);
+	g_return_val_if_fail (filename != NULL, FALSE);
+
+	file = g_file_new_for_path (filename);
+	is = g_file_read (file, NULL, &e);
+
+	if (is == NULL) {
+		g_propagate_error (error, e);
+		g_object_unref (file);
+		return FALSE;
+	}
+
+	input = g_data_input_stream_new (G_INPUT_STREAM (is));
+	section = g_strdup (section);
+
+	for (;; g_free (line), ++num) {
+		line = g_data_input_stream_read_line (input, NULL, NULL, &e);
+
+		if (line != NULL) {
+			g_strstrip (line);
+		} else {
+			break;
+		}
+
+		/* skip empty lines */
+		if (*line == '\0' || *line == '#') {
+			continue;
+		}
+
+		/* remove trailing comments */
+		for (str = line; *str != '\0' && *str != '#'; ++str);
+		*str-- = '\0';
+
+		/* change sections */
+		if (*line == '[' && *str == ']') {
+			*str = '\0';
+			str = line + 1;
+
+			if (*str == '\0') {
+				g_set_error (&e, ALPM_ERROR,
+					     PM_ERR_CONFIG_INVALID,
+					     "empty section name");
+				break;
+			}
+
+			g_free (section);
+			section = g_strdup (str);
+
+			if (g_strcmp0 (section, "options") != 0) {
+				pk_backend_config_add_repo (config, section);
+			}
+
+			continue;
+		}
+
+		/* parse a directive */
+		if (section == NULL) {
+			g_set_error (&e, ALPM_ERROR, PM_ERR_CONFIG_INVALID,
+				     "directive must belong to a section");
+			break;
+		}
+
+		str = line;
+		key = strsep (&str, "=");
+		g_strchomp (key);
+		if (str != NULL) {
+			g_strchug (str);
+		}
+
+		if (str == NULL) {
+			/* set a boolean directive */
+			if (g_strcmp0 (section, "options") == 0 &&
+			    pk_backend_config_set_boolean (config, key)) {
+				continue;
+			}
+			/* report error below */
+		} else if (g_strcmp0 (key, "Include") == 0) {
+			gsize i;
+			glob_t match = { 0 };
+
+			/* ignore globbing errors */
+			if (glob (str, GLOB_NOCHECK, NULL, &match) != 0) {
+				continue;
+			}
+
+			/* parse the files that matched */
+			for (i = 0; i < match.gl_pathc; ++i) {
+				if (!pk_backend_config_parse (config,
+							      match.gl_pathv[i],
+							      section, &e)) {
+					break;
+				}
+			}
+
+			globfree (&match);
+			if (e != NULL) {
+				break;
+			} else {
+				continue;
+			}
+		} else if (g_strcmp0 (section, "options") == 0) {
+			/* set a string or list directive */
+			if (pk_backend_config_set_string (config, key, str) ||
+			    pk_backend_config_set_list (config, key, str)) {
+				continue;
+			}
+			/* report error below */
+		} else if (g_strcmp0 (key, "Server") == 0) {
+			if (!pk_backend_config_repo_add_server (config, section,
+								str, &e)) {
+				break;
+			} else {
+				continue;
+			}
+		}
+
+		/* report errors from above */
+		g_set_error (&e, ALPM_ERROR, PM_ERR_CONFIG_INVALID,
+			     "unrecognised directive '%s'", key);
+		break;
+	}
+
+	g_free (section);
+
+	g_object_unref (input);
+	g_object_unref (is);
+	g_object_unref (file);
+
+	if (e != NULL) {
+		g_propagate_prefixed_error (error, e, "%s:%u", filename, num);
+		return FALSE;
+	} else {
+		return TRUE;
+	}
+}
+
+static gboolean
+pk_backend_config_configure_paths (PkBackendConfig *config, GError **error)
+{
+	g_return_val_if_fail (config != NULL, FALSE);
+
+	if (config->root == NULL) {
+		config->root = g_strdup (PK_BACKEND_DEFAULT_ROOT);
+	}
+
+	if (alpm_option_set_root (config->root) < 0) {
+		g_set_error (error, ALPM_ERROR, pm_errno, "RootDir: %s",
+			     alpm_strerrorlast ());
+		return FALSE;
+	}
+
+	if (config->dbpath == NULL) {
+		config->dbpath = g_strconcat (alpm_option_get_root (),
+					      PK_BACKEND_DEFAULT_DBPATH + 1,
+					      NULL);
+	}
+
+	if (alpm_option_set_dbpath (config->dbpath) < 0) {
+		g_set_error (error, ALPM_ERROR, pm_errno, "DBPath: %s",
+			     alpm_strerrorlast ());
+		return FALSE;
+	}
+
+	if (config->logfile == NULL) {
+		config->logfile = g_strconcat (alpm_option_get_root (),
+					       PK_BACKEND_DEFAULT_LOGFILE + 1,
+					       NULL);
+	}
+
+	alpm_option_set_logfile (config->logfile);
+
+	if (config->cachedirs == NULL) {
+		gchar *path = g_strconcat (alpm_option_get_root (),
+					   PK_BACKEND_DEFAULT_CACHEDIR + 1,
+					   NULL);
+		config->cachedirs = alpm_list_add (NULL, path);
+	}
+
+	/* alpm takes ownership */
+	alpm_option_set_cachedirs (config->cachedirs);
+	config->cachedirs = NULL;
+
+	return TRUE;
+}
+
+static gboolean
+pk_backend_config_configure_repos (PkBackendConfig *config, GError **error)
+{
+	const alpm_list_t *i;
+
+	g_return_val_if_fail (config != NULL, FALSE);
+
+	if (alpm_db_unregister_all () < 0) {
+		g_set_error_literal (error, ALPM_ERROR, pm_errno,
+				     alpm_strerrorlast ());
+		return FALSE;
+	}
+
+	localdb = alpm_db_register_local ();
+	if (localdb == NULL) {
+		g_set_error (error, ALPM_ERROR, pm_errno, "[%s]: %s", "local",
+			     alpm_strerrorlast ());
+		return FALSE;
+	}
+
+	for (i = config->repos; i != NULL; i = i->next) {
+		const gchar *key;
+		gpointer value;
+		pmdb_t *db;
+		alpm_list_t *j;
+
+		key = (const gchar *) i->data;
+		value = g_hash_table_lookup (config->servers, key);
+
+		db = alpm_db_register_sync (key);
+		if (db == NULL) {
+			g_set_error (error, ALPM_ERROR, pm_errno, "[%s]: %s",
+				     key, alpm_strerrorlast ());
+			return FALSE;
+		}
+
+		for (j = (alpm_list_t *) value; j != NULL; j = j->next) {
+			alpm_db_setserver (db, (const gchar *) j->data);
+		}
+	}
+
+	return TRUE;
+}
+
+static gboolean
+pk_backend_config_configure_alpm (PkBackendConfig *config, GError **error)
+{
+	g_return_val_if_fail (config != NULL, FALSE);
+
+	if (!pk_backend_config_configure_paths (config, error)) {
+		return FALSE;
+	}
+
+	alpm_option_set_usedelta (config->usedelta);
+	alpm_option_set_usesyslog (config->usesyslog);
+	alpm_option_set_arch (config->arch);
+
+	/* backend takes ownership */
+	g_free (xfercmd);
+	xfercmd = config->xfercmd;
+	config->xfercmd = NULL;
+
+	if (xfercmd != NULL) {
+		alpm_option_set_fetchcb (pk_backend_fetchcb);
+	} else {
+		alpm_option_set_fetchcb (NULL);
+	}
+
+	/* backend takes ownership */
+	FREELIST (holdpkgs);
+	holdpkgs = config->holdpkgs;
+	config->holdpkgs = NULL;
+
+	/* backend takes ownership */
+	FREELIST (syncfirsts);
+	syncfirsts = config->syncfirsts;
+	config->syncfirsts = NULL;
+
+	/* alpm takes ownership */
+	alpm_option_set_ignoregrps (config->ignoregrps);
+	config->ignoregrps = NULL;
+
+	/* alpm takes ownership */
+	alpm_option_set_ignorepkgs (config->ignorepkgs);
+	config->ignorepkgs = NULL;
+
+	/* alpm takes ownership */
+	alpm_option_set_noextracts (config->noextracts);
+	config->noextracts = NULL;
+
+	/* alpm takes ownership */
+	alpm_option_set_noupgrades (config->noupgrades);
+	config->noupgrades = NULL;
+
+	if (!pk_backend_config_configure_repos (config, error)) {
+		return FALSE;
+	}
+
+	return TRUE;
+}
+
+gboolean
+pk_backend_configure (const gchar *filename, GError **error)
+{
+	PkBackendConfig *config;
+	gboolean result;
+
+	g_return_val_if_fail (filename != NULL, FALSE);
+
+	config = pk_backend_config_new ();
+
+	result = pk_backend_config_parse (config, filename, NULL, error) &&
+		 pk_backend_config_configure_alpm (config, error);
+
+	pk_backend_config_free (config);
+	return result;
+}
diff --git a/backends/alpm/pk-backend-config.h b/backends/alpm/pk-backend-config.h
new file mode 100644
index 0000000..cb8b8dc
--- /dev/null
+++ b/backends/alpm/pk-backend-config.h
@@ -0,0 +1,26 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2007 Andreas Obergrusberger <tradiaz at yahoo.de>
+ * Copyright (C) 2008-2010 Valeriy Lyasotskiy <onestep at ukr.net>
+ * Copyright (C) 2010-2011 Jonathan Conder <jonno.conder 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 <glib.h>
+
+gboolean	 pk_backend_configure	(const gchar *filename, GError **error);
diff --git a/backends/alpm/pk-backend-databases.c b/backends/alpm/pk-backend-databases.c
new file mode 100644
index 0000000..00acd8c
--- /dev/null
+++ b/backends/alpm/pk-backend-databases.c
@@ -0,0 +1,347 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2007 Andreas Obergrusberger <tradiaz at yahoo.de>
+ * Copyright (C) 2008-2010 Valeriy Lyasotskiy <onestep at ukr.net>
+ * Copyright (C) 2010-2011 Jonathan Conder <jonno.conder 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 "pk-backend-alpm.h"
+#include "pk-backend-config.h"
+#include "pk-backend-databases.h"
+#include "pk-backend-error.h"
+
+pmdb_t *localdb = NULL;
+static GHashTable *disabled = NULL;
+
+static GHashTable *
+disabled_repos_new (GError **error)
+{
+	GHashTable *table;
+	GFile *file;
+
+	GFileInputStream *is;
+	GDataInputStream *input;
+
+	GError *e = NULL;
+
+	g_debug ("reading disabled repos from %s", PK_BACKEND_REPO_FILE);
+	file = g_file_new_for_path (PK_BACKEND_REPO_FILE);
+	is = g_file_read (file, NULL, &e);
+
+	if (is == NULL) {
+		g_object_unref (file);
+		g_propagate_error (error, e);
+		return NULL;
+	}
+
+	table = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
+	input = g_data_input_stream_new (G_INPUT_STREAM (is));
+
+	/* read disabled repos line by line, ignoring comments */
+	while (TRUE) {
+		gchar *line;
+
+		line = g_data_input_stream_read_line (input, NULL, NULL, &e);
+
+		if (line != NULL) {
+			g_strstrip (line);
+		} else {
+			break;
+		}
+
+		if (*line == '\0' || *line == '#') {
+			g_free (line);
+			continue;
+		}
+
+		g_hash_table_insert (table, line, GINT_TO_POINTER (1));
+	}
+
+	g_object_unref (input);
+	g_object_unref (is);
+	g_object_unref (file);
+
+	if (e != NULL) {
+		g_hash_table_unref (table);
+		g_propagate_error (error, e);
+		return NULL;
+	} else {
+		return table;
+	}
+}
+
+static void
+disabled_repos_free (GHashTable *table)
+{
+	GHashTableIter iter;
+	GFile *file;
+
+	GFileOutputStream *os;
+	GDataOutputStream *output;
+
+	const gchar *line;
+
+	g_return_if_fail (table != NULL);
+
+	g_debug ("storing disabled repos in %s", PK_BACKEND_REPO_FILE);
+	file = g_file_new_for_path (PK_BACKEND_REPO_FILE);
+	os = g_file_replace (file, NULL, FALSE, G_FILE_CREATE_NONE, NULL, NULL);
+
+	if (os == NULL) {
+		g_object_unref (file);
+		g_hash_table_unref (table);
+		return;
+	}
+
+	g_hash_table_iter_init (&iter, table);
+	output = g_data_output_stream_new (G_OUTPUT_STREAM (os));
+
+	/* write all disabled repos line by line */
+	while (g_hash_table_iter_next (&iter, (gpointer *) &line, NULL) &&
+		g_data_output_stream_put_string (output, line, NULL, NULL) &&
+		g_data_output_stream_put_byte (output, '\n', NULL, NULL));
+
+	g_object_unref (output);
+	g_object_unref (os);
+	g_object_unref (file);
+
+	g_hash_table_unref (table);
+}
+
+static gboolean
+disabled_repos_configure (GHashTable *table, GError **error)
+{
+	const alpm_list_t *i;
+
+	g_debug ("reading config from %s", PK_BACKEND_CONFIG_FILE);
+
+	/* read configuration from pacman.conf file */
+	if (!pk_backend_configure (PK_BACKEND_CONFIG_FILE, error)) {
+		return FALSE;
+	}
+
+	/* disable disabled repos */
+	for (i = alpm_option_get_syncdbs (); i != NULL;) {
+		pmdb_t *db = (pmdb_t *) i->data;
+		const gchar *repo = alpm_db_get_name (db);
+
+		if (g_hash_table_lookup (table, repo) == NULL) {
+			/* repo is not disabled */
+			i = i->next;
+			continue;
+		}
+
+		if (alpm_db_unregister (db) < 0) {
+			g_set_error (error, ALPM_ERROR, pm_errno, "[%s]: %s",
+				     repo, alpm_strerrorlast ());
+			return FALSE;
+		}
+
+		/* start again because the list gets invalidated */
+		i = alpm_option_get_syncdbs ();
+	}
+
+	return TRUE;
+}
+
+gboolean
+pk_backend_initialize_databases (PkBackend *self, GError **error)
+{
+	g_return_val_if_fail (self != NULL, FALSE);
+
+	disabled = disabled_repos_new (error);
+	if (disabled == NULL) {
+		return FALSE;
+	}
+
+	if (!disabled_repos_configure (disabled, error)) {
+		return FALSE;
+	}
+
+	return TRUE;
+}
+
+void
+pk_backend_destroy_databases (PkBackend *self)
+{
+	g_return_if_fail (self != NULL);
+
+	if (disabled != NULL) {
+		disabled_repos_free (disabled);
+	}
+}
+
+static gboolean
+pk_backend_repo_info (PkBackend *self, const gchar *repo, gboolean enabled)
+{
+	gchar *description;
+	gboolean result;
+
+	g_return_val_if_fail (self != NULL, FALSE);
+	g_return_val_if_fail (repo != NULL, FALSE);
+
+	description = g_strdup_printf ("[%s]", repo);
+	result = pk_backend_repo_detail (self, repo, description, enabled);
+	g_free (description);
+
+	return result;
+}
+
+static gboolean
+pk_backend_get_repo_list_thread (PkBackend *self)
+{
+	const alpm_list_t *i;
+	GHashTableIter iter;
+	gpointer key, value;
+
+	g_return_val_if_fail (self != NULL, FALSE);
+	g_return_val_if_fail (disabled != NULL, FALSE);
+
+	/* emit enabled repos */
+	for (i = alpm_option_get_syncdbs (); i != NULL; i = i->next) {
+		pmdb_t *db = (pmdb_t *) i->data;
+		const gchar *repo = alpm_db_get_name (db);
+
+		if (pk_backend_cancelled (self)) {
+			goto out;
+		} else {
+			pk_backend_repo_info (self, repo, TRUE);
+		}
+	}
+
+	/* emit disabled repos */
+	g_hash_table_iter_init (&iter, disabled);
+	while (g_hash_table_iter_next (&iter, &key, &value)) {
+		const gchar *repo = (const gchar *) key;
+
+		if (pk_backend_cancelled (self)) {
+			goto out;
+		} else {
+			pk_backend_repo_info (self, repo, FALSE);
+		}
+	}
+
+out:
+	return pk_backend_finish (self, NULL);
+}
+
+void
+pk_backend_get_repo_list (PkBackend *self, PkBitfield filters)
+{
+	g_return_if_fail (self != NULL);
+
+	pk_backend_run (self, PK_STATUS_ENUM_QUERY,
+			pk_backend_get_repo_list_thread);
+}
+
+static gboolean
+pk_backend_repo_enable_thread (PkBackend *self)
+{
+	const gchar *repo;
+
+	GError *error = NULL;
+
+	g_return_val_if_fail (self != NULL, FALSE);
+	g_return_val_if_fail (disabled != NULL, FALSE);
+
+	repo = pk_backend_get_string (self, "repo_id");
+
+	g_return_val_if_fail (repo != NULL, FALSE);
+
+	if (g_hash_table_remove (disabled, repo)) {
+		/* reload configuration to preserve ordering */
+		if (disabled_repos_configure (disabled, &error)) {
+			pk_backend_repo_list_changed (self);
+		}
+	} else {
+		int code = PM_ERR_DB_NOT_NULL;
+		g_set_error (&error, ALPM_ERROR, code, "[%s]: %s",
+			     repo, alpm_strerror (code));
+	}
+
+	if (error != NULL) {
+		pk_backend_error (self, error);
+		g_error_free (error);
+	}
+
+	pk_backend_thread_finished (self);
+	return (error == NULL);
+}
+
+static gboolean
+pk_backend_repo_disable_thread (PkBackend *self)
+{
+	const alpm_list_t *i;
+	const gchar *repo;
+
+	GError *error = NULL;
+
+	g_return_val_if_fail (self != NULL, FALSE);
+	g_return_val_if_fail (disabled != NULL, FALSE);
+
+	repo = pk_backend_get_string (self, "repo_id");
+
+	g_return_val_if_fail (repo != NULL, FALSE);
+
+	for (i = alpm_option_get_syncdbs (); i != NULL; i = i->next) {
+		pmdb_t *db = (pmdb_t *) i->data;
+		const gchar *name = alpm_db_get_name (db);
+
+		if (g_strcmp0 (repo, name) == 0) {
+			if (alpm_db_unregister (db) < 0) {
+				g_set_error (&error, ALPM_ERROR, pm_errno,
+					     "[%s]: %s", repo,
+					     alpm_strerrorlast ());
+			} else {
+				g_hash_table_insert (disabled, g_strdup (repo),
+						     GINT_TO_POINTER (1));
+			}
+			break;
+		}
+	}
+
+	if (i == NULL) {
+		int code = PM_ERR_DB_NULL;
+		g_set_error (&error, ALPM_ERROR, code, "[%s]: %s", repo,
+			     alpm_strerror (code));
+	}
+
+	if (error != NULL) {
+		pk_backend_error (self, error);
+		g_error_free (error);
+	}
+
+	pk_backend_thread_finished (self);
+	return (error == NULL);
+}
+
+void
+pk_backend_repo_enable (PkBackend *self, const gchar *repo_id, gboolean enabled)
+{
+	g_return_if_fail (self != NULL);
+	g_return_if_fail (repo_id != NULL);
+
+	pk_backend_set_status (self, PK_STATUS_ENUM_QUERY);
+
+	if (enabled) {
+		pk_backend_thread_create (self, pk_backend_repo_enable_thread);
+	} else {
+		pk_backend_thread_create (self, pk_backend_repo_disable_thread);
+	}
+}
diff --git a/backends/alpm/pk-backend-databases.h b/backends/alpm/pk-backend-databases.h
new file mode 100644
index 0000000..f787201
--- /dev/null
+++ b/backends/alpm/pk-backend-databases.h
@@ -0,0 +1,32 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2007 Andreas Obergrusberger <tradiaz at yahoo.de>
+ * Copyright (C) 2008-2010 Valeriy Lyasotskiy <onestep at ukr.net>
+ * Copyright (C) 2010-2011 Jonathan Conder <jonno.conder 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 <alpm.h>
+#include <pk-backend.h>
+
+extern pmdb_t *localdb;
+
+gboolean	 pk_backend_initialize_databases	(PkBackend *self,
+							 GError **error);
+
+void		 pk_backend_destroy_databases		(PkBackend *self);
diff --git a/backends/alpm/pk-backend-depends.c b/backends/alpm/pk-backend-depends.c
new file mode 100644
index 0000000..fbf5721
--- /dev/null
+++ b/backends/alpm/pk-backend-depends.c
@@ -0,0 +1,313 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2007 Andreas Obergrusberger <tradiaz at yahoo.de>
+ * Copyright (C) 2008-2010 Valeriy Lyasotskiy <onestep at ukr.net>
+ * Copyright (C) 2010-2011 Jonathan Conder <jonno.conder 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 <alpm.h>
+#include <pk-backend.h>
+
+#include "pk-backend-alpm.h"
+#include "pk-backend-databases.h"
+#include "pk-backend-depends.h"
+#include "pk-backend-error.h"
+#include "pk-backend-packages.h"
+
+static pmpkg_t *
+alpm_list_find_provider (const alpm_list_t *pkgs, pmdepend_t *depend)
+{
+	g_return_val_if_fail (depend != NULL, NULL);
+
+	/* find a package that provides depend */
+	for (; pkgs != NULL; pkgs = pkgs->next) {
+		if (alpm_depcmp (pkgs->data, depend) != 0) {
+			return pkgs->data;
+		}
+	}
+
+	return NULL;
+}
+
+static pmpkg_t *
+alpm_dbs_find_provider (const alpm_list_t *dbs, pmdepend_t *depend)
+{
+	const alpm_list_t *i;
+
+	g_return_val_if_fail (depend != NULL, NULL);
+
+	/* find the default package that provides depend */
+	for (i = dbs; i != NULL; i = i->next) {
+		const gchar *name = alpm_dep_get_name (depend);
+		pmpkg_t *provider = alpm_db_get_pkg (i->data, name);
+
+		if (provider != NULL && alpm_depcmp (provider, depend) != 0) {
+			return provider;
+		}
+	}
+
+	/* find any package that provides depend */
+	for (i = dbs; i != NULL; i = i->next) {
+		const alpm_list_t *pkgcache = alpm_db_get_pkgcache (i->data);
+		pmpkg_t *provider = alpm_list_find_provider (pkgcache, depend);
+
+		if (provider != NULL) {
+			return provider;
+		}
+	}
+
+	return NULL;
+}
+
+static pmpkg_t *
+alpm_list_find_pkg (const alpm_list_t *pkgs, const gchar *name)
+{
+	g_return_val_if_fail (name != NULL, NULL);
+
+	for (; pkgs != NULL; pkgs = pkgs->next) {
+		if (g_strcmp0 (name, alpm_pkg_get_name (pkgs->data)) == 0) {
+			return pkgs->data;
+		}
+	}
+
+	return NULL;
+}
+
+static alpm_list_t *
+pk_backend_find_provider (PkBackend *self, alpm_list_t *pkgs,
+			  pmdepend_t *depend, GError **error)
+{
+	PkBitfield filters;
+	gboolean recursive, skip_local, skip_remote;
+
+	pmpkg_t *provider;
+	const alpm_list_t *pkgcache, *syncdbs;
+
+	g_return_val_if_fail (self != NULL, pkgs);
+	g_return_val_if_fail (depend != NULL, pkgs);
+	g_return_val_if_fail (localdb != NULL, pkgs);
+
+	recursive = pk_backend_get_bool (self, "recursive");
+	filters = pk_backend_get_uint (self, "filters");
+	skip_local = pk_bitfield_contain (filters,
+					  PK_FILTER_ENUM_NOT_INSTALLED);
+	skip_remote = pk_bitfield_contain (filters, PK_FILTER_ENUM_INSTALLED);
+
+	if (alpm_list_find_provider (pkgs, depend) != NULL) {
+		return pkgs;
+	}
+
+	/* look for local dependencies */
+	pkgcache = alpm_db_get_pkgcache (localdb);
+	provider = alpm_list_find_provider (pkgcache, depend);
+
+	if (provider != NULL) {
+		if (!skip_local) {
+			pk_backend_pkg (self, provider, PK_INFO_ENUM_INSTALLED);
+			/* assume later dependencies will also be local */
+			if (recursive) {
+				pkgs = alpm_list_add (pkgs, provider);
+			}
+		}
+
+		return pkgs;
+	}
+
+	/* look for remote dependencies */
+	syncdbs = alpm_option_get_syncdbs ();
+	provider = alpm_dbs_find_provider (syncdbs, depend);
+
+	if (provider != NULL) {
+		if (!skip_remote) {
+			pk_backend_pkg (self, provider, PK_INFO_ENUM_AVAILABLE);
+		}
+		/* keep looking for local dependencies */
+		if (recursive) {
+			pkgs = alpm_list_add (pkgs, provider);
+		}
+	} else {
+		gchar *string = alpm_dep_compute_string (depend);
+		int code = PM_ERR_UNSATISFIED_DEPS;
+		g_set_error (error, ALPM_ERROR, code, "%s: %s", string,
+			     alpm_strerror (code));
+		free (string);
+	}
+
+	return pkgs;
+}
+
+static alpm_list_t *
+pk_backend_find_requirer (PkBackend *self, alpm_list_t *pkgs, const gchar *name,
+			  GError **error)
+{
+	pmpkg_t *requirer;
+
+	g_return_val_if_fail (self != NULL, pkgs);
+	g_return_val_if_fail (name != NULL, pkgs);
+	g_return_val_if_fail (localdb != NULL, pkgs);
+
+	if (alpm_list_find_pkg (pkgs, name) != NULL) {
+		return pkgs;
+	}
+
+	/* look for local requirers */
+	requirer = alpm_db_get_pkg (localdb, name);
+
+	if (requirer != NULL) {
+		pk_backend_pkg (self, requirer, PK_INFO_ENUM_INSTALLED);
+		if (pk_backend_get_bool (self, "recursive")) {
+			pkgs = alpm_list_add (pkgs, requirer);
+		}
+	} else {
+		int code = PM_ERR_PKG_NOT_FOUND;
+		g_set_error (error, ALPM_ERROR, code, "%s: %s", name,
+			     alpm_strerror (code));
+	}
+
+	return pkgs;
+}
+
+static gboolean
+pk_backend_get_depends_thread (PkBackend *self)
+{
+	gchar **packages;
+	alpm_list_t *i, *pkgs = NULL;
+	GError *error = NULL;
+
+	g_return_val_if_fail (self != NULL, FALSE);
+
+	packages = pk_backend_get_strv (self, "package_ids");
+
+	g_return_val_if_fail (packages != NULL, FALSE);
+
+	/* construct an initial package list */
+	for (; *packages != NULL; ++packages) {
+		pmpkg_t *pkg;
+
+		if (pk_backend_cancelled (self)) {
+			break;
+		}
+
+		pkg = pk_backend_find_pkg (self, *packages, &error);
+		if (pkg == NULL) {
+			break;
+		}
+
+		pkgs = alpm_list_add (pkgs, pkg);
+	}
+
+	/* package list might be modified along the way but that is ok */
+	for (i = pkgs; i != NULL; i = i->next) {
+		const alpm_list_t *depends;
+
+		if (pk_backend_cancelled (self) || error != NULL) {
+			break;
+		}
+
+		depends = alpm_pkg_get_depends (i->data);
+		for (; depends != NULL; depends = depends->next) {
+			if (pk_backend_cancelled (self) || error != NULL) {
+				break;
+			}
+
+			pkgs = pk_backend_find_provider (self, pkgs,
+							 depends->data, &error);
+		}
+	}
+
+	alpm_list_free (pkgs);
+	return pk_backend_finish (self, NULL);
+}
+
+static gboolean
+pk_backend_get_requires_thread (PkBackend *self)
+{
+	gchar **packages;
+	alpm_list_t *i, *pkgs = NULL;
+	GError *error = NULL;
+
+	g_return_val_if_fail (self != NULL, FALSE);
+
+	packages = pk_backend_get_strv (self, "package_ids");
+
+	g_return_val_if_fail (packages != NULL, FALSE);
+
+	/* construct an initial package list */
+	for (; *packages != NULL; ++packages) {
+		pmpkg_t *pkg;
+
+		if (pk_backend_cancelled (self)) {
+			break;
+		}
+
+		pkg = pk_backend_find_pkg (self, *packages, &error);
+		if (pkg == NULL) {
+			break;
+		}
+
+		pkgs = alpm_list_add (pkgs, pkg);
+	}
+
+	/* package list might be modified along the way but that is ok */
+	for (i = pkgs; i != NULL; i = i->next) {
+		alpm_list_t *requiredby;
+
+		if (pk_backend_cancelled (self) || error != NULL) {
+			break;
+		}
+
+		requiredby = alpm_pkg_compute_requiredby (i->data);
+		for (; requiredby != NULL; requiredby = requiredby->next) {
+			if (pk_backend_cancelled (self) || error != NULL) {
+				break;
+			}
+
+			pkgs = pk_backend_find_requirer (self, pkgs,
+							 requiredby->data,
+							 &error);
+		}
+
+		FREELIST (requiredby);
+	}
+
+	alpm_list_free (pkgs);
+	return pk_backend_finish (self, error);
+}
+
+void
+pk_backend_get_depends (PkBackend *self, PkBitfield filters,
+			gchar **package_ids, gboolean recursive)
+{
+	g_return_if_fail (self != NULL);
+	g_return_if_fail (package_ids != NULL);
+
+	pk_backend_run (self, PK_STATUS_ENUM_QUERY,
+			pk_backend_get_depends_thread);
+}
+
+void
+pk_backend_get_requires (PkBackend *self, PkBitfield filters,
+			 gchar **package_ids, gboolean recursive)
+{
+	g_return_if_fail (self != NULL);
+	g_return_if_fail (package_ids != NULL);
+
+	pk_backend_run (self, PK_STATUS_ENUM_QUERY,
+			pk_backend_get_requires_thread);
+}
diff --git a/backends/alpm/pk-backend-depends.h b/backends/alpm/pk-backend-depends.h
new file mode 100644
index 0000000..368965a
--- /dev/null
+++ b/backends/alpm/pk-backend-depends.h
@@ -0,0 +1,22 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2007 Andreas Obergrusberger <tradiaz at yahoo.de>
+ * Copyright (C) 2008-2010 Valeriy Lyasotskiy <onestep at ukr.net>
+ * Copyright (C) 2010-2011 Jonathan Conder <jonno.conder 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.
+ */
diff --git a/backends/alpm/pk-backend-error.c b/backends/alpm/pk-backend-error.c
new file mode 100644
index 0000000..9dfb7d0
--- /dev/null
+++ b/backends/alpm/pk-backend-error.c
@@ -0,0 +1,198 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2007 Andreas Obergrusberger <tradiaz at yahoo.de>
+ * Copyright (C) 2008-2010 Valeriy Lyasotskiy <onestep at ukr.net>
+ * Copyright (C) 2010-2011 Jonathan Conder <jonno.conder 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 <alpm.h>
+
+#include "pk-backend-error.h"
+
+static void
+pk_backend_output_locked (PkBackend *self)
+{
+	gchar *output;
+
+	g_return_if_fail (self != NULL);
+
+	output = g_strdup_printf ("If you are certain no other package manager "
+				  "is running, you can remove %s\n",
+				  alpm_option_get_lockfile ());
+	pk_backend_output (self, output);
+	g_free (output);
+}
+
+void
+pk_backend_error (PkBackend *self, GError *error)
+{
+	PkErrorEnum code = PK_ERROR_ENUM_UNKNOWN;
+
+	g_return_if_fail (self != NULL);
+	g_return_if_fail (error != NULL);
+
+	if (error->domain == ALPM_ERROR) {
+		switch (error->code) {
+			case PM_ERR_MEMORY:
+			case PM_ERR_SYSTEM:
+				code = PK_ERROR_ENUM_OOM;
+				break;
+
+			case PM_ERR_BADPERMS:
+				code = PK_ERROR_ENUM_NOT_AUTHORIZED;
+				break;
+
+			case PM_ERR_NOT_A_FILE:
+			case PM_ERR_NOT_A_DIR:
+				code = PK_ERROR_ENUM_FILE_NOT_FOUND;
+				break;
+
+			case PM_ERR_WRONG_ARGS:
+			case PM_ERR_HANDLE_NULL:
+			case PM_ERR_DB_NULL:
+			case PM_ERR_TRANS_NULL:
+			case PM_ERR_TRANS_NOT_INITIALIZED:
+			case PM_ERR_TRANS_NOT_PREPARED:
+			case PM_ERR_TRANS_NOT_LOCKED:
+			case PM_ERR_INVALID_REGEX:
+				code = PK_ERROR_ENUM_INTERNAL_ERROR;
+				break;
+
+			case PM_ERR_HANDLE_NOT_NULL:
+			case PM_ERR_DB_NOT_NULL:
+			case PM_ERR_TRANS_NOT_NULL:
+				code = PK_ERROR_ENUM_FAILED_INITIALIZATION;
+				break;
+
+			case PM_ERR_HANDLE_LOCK:
+				code = PK_ERROR_ENUM_CANNOT_GET_LOCK;
+				pk_backend_output_locked (self);
+				break;
+
+			case PM_ERR_DB_OPEN:
+			case PM_ERR_DB_NOT_FOUND:
+			case PM_ERR_PKG_REPO_NOT_FOUND:
+				code = PK_ERROR_ENUM_REPO_NOT_FOUND;
+				break;
+
+			case PM_ERR_DB_CREATE:
+				code = PK_ERROR_ENUM_CANNOT_WRITE_REPO_CONFIG;
+				break;
+
+			case PM_ERR_DB_WRITE:
+				code = PK_ERROR_ENUM_REPO_NOT_AVAILABLE;
+				break;
+
+			case PM_ERR_DB_REMOVE:
+				code = PK_ERROR_ENUM_REPO_CONFIGURATION_ERROR;
+				break;
+
+			case PM_ERR_SERVER_BAD_URL:
+				code = PK_ERROR_ENUM_REPO_CONFIGURATION_ERROR;
+				break;
+
+			case PM_ERR_SERVER_NONE:
+				code = PK_ERROR_ENUM_NO_MORE_MIRRORS_TO_TRY;
+				break;
+
+			case PM_ERR_TRANS_DUP_TARGET:
+			case PM_ERR_TRANS_ABORT:
+				code = PK_ERROR_ENUM_TRANSACTION_ERROR;
+				break;
+
+			case PM_ERR_TRANS_TYPE:
+				code = PK_ERROR_ENUM_CANNOT_CANCEL;
+				break;
+
+			case PM_ERR_PKG_NOT_FOUND:
+				code = PK_ERROR_ENUM_PACKAGE_NOT_FOUND;
+				break;
+
+			case PM_ERR_PKG_IGNORED:
+				code = PK_ERROR_ENUM_PACKAGE_INSTALL_BLOCKED;
+				break;
+
+			case PM_ERR_PKG_INVALID:
+			case PM_ERR_PKG_OPEN:
+			case PM_ERR_PKG_INVALID_NAME:
+			case PM_ERR_DLT_INVALID:
+				code = PK_ERROR_ENUM_INVALID_PACKAGE_FILE;
+				break;
+
+			case PM_ERR_PKG_CANT_REMOVE:
+				code = PK_ERROR_ENUM_PACKAGE_FAILED_TO_REMOVE;
+				break;
+
+			case PM_ERR_PKG_INVALID_ARCH:
+				code = PK_ERROR_ENUM_INCOMPATIBLE_ARCHITECTURE;
+				break;
+
+			case PM_ERR_DLT_PATCHFAILED:
+				code = PK_ERROR_ENUM_PACKAGE_FAILED_TO_BUILD;
+				break;
+
+			case PM_ERR_UNSATISFIED_DEPS:
+				code = PK_ERROR_ENUM_DEP_RESOLUTION_FAILED;
+				break;
+
+			case PM_ERR_CONFLICTING_DEPS:
+				code = PK_ERROR_ENUM_PACKAGE_CONFLICTS;
+				break;
+
+			case PM_ERR_FILE_CONFLICTS:
+				code = PK_ERROR_ENUM_FILE_CONFLICTS;
+				break;
+
+			case PM_ERR_RETRIEVE:
+			case PM_ERR_LIBFETCH:
+			case PM_ERR_EXTERNAL_DOWNLOAD:
+				code = PK_ERROR_ENUM_PACKAGE_DOWNLOAD_FAILED;
+				break;
+
+			case PM_ERR_LIBARCHIVE:
+				code = PK_ERROR_ENUM_LOCAL_INSTALL_FAILED;
+				break;
+
+			case PM_ERR_CONFIG_INVALID:
+				code = PK_ERROR_ENUM_CANNOT_REMOVE_SYSTEM_PACKAGE;
+				break;
+
+			case PM_ERR_PKG_HELD:
+				code = PK_ERROR_ENUM_CANNOT_REMOVE_SYSTEM_PACKAGE;
+				break;
+		}
+	}
+
+	pk_backend_error_code (self, code, "%s", error->message);
+}
+
+void
+pk_backend_output (PkBackend *self, const gchar *output)
+{
+	g_return_if_fail (self != NULL);
+	g_return_if_fail (output != NULL);
+
+	pk_backend_message (self, PK_MESSAGE_ENUM_UNKNOWN, "%s", output);
+}
+
+GQuark
+alpm_error_quark (void)
+{
+	return g_quark_from_static_string ("alpm-error-quark");
+}
diff --git a/backends/alpm/pk-backend-error.h b/backends/alpm/pk-backend-error.h
new file mode 100644
index 0000000..b01b06d
--- /dev/null
+++ b/backends/alpm/pk-backend-error.h
@@ -0,0 +1,37 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2007 Andreas Obergrusberger <tradiaz at yahoo.de>
+ * Copyright (C) 2008-2010 Valeriy Lyasotskiy <onestep at ukr.net>
+ * Copyright (C) 2010-2011 Jonathan Conder <jonno.conder 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 <pk-backend.h>
+
+#define	 ALPM_ERROR		(alpm_error_quark ())
+
+enum {
+	PM_ERR_CONFIG_INVALID = 0x10000,
+	PM_ERR_PKG_HELD
+};
+
+void	 pk_backend_error	(PkBackend *self, GError *error);
+
+void	 pk_backend_output	(PkBackend *self, const gchar *output);
+
+GQuark	 alpm_error_quark	(void);
diff --git a/backends/alpm/pk-backend-groups.c b/backends/alpm/pk-backend-groups.c
new file mode 100644
index 0000000..59e304d
--- /dev/null
+++ b/backends/alpm/pk-backend-groups.c
@@ -0,0 +1,153 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2007 Andreas Obergrusberger <tradiaz at yahoo.de>
+ * Copyright (C) 2008-2010 Valeriy Lyasotskiy <onestep at ukr.net>
+ * Copyright (C) 2010-2011 Jonathan Conder <jonno.conder 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 <gio/gio.h>
+#include <string.h>
+
+#include "pk-backend-groups.h"
+
+static GHashTable *grps = NULL;
+static PkBitfield groups = 0;
+
+static GHashTable *
+group_map_new (GError **error)
+{
+	GHashTable *map;
+	GFile *file;
+
+	GFileInputStream *is;
+	GDataInputStream *input;
+
+	GError *e = NULL;
+
+	g_debug ("reading group map from %s", PK_BACKEND_GROUP_FILE);
+	file = g_file_new_for_path (PK_BACKEND_GROUP_FILE);
+	is = g_file_read (file, NULL, &e);
+
+	if (is == NULL) {
+		g_object_unref (file);
+		g_propagate_error (error, e);
+		return NULL;
+	}
+
+	map = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
+	input = g_data_input_stream_new (G_INPUT_STREAM (is));
+
+	/* read groups line by line, ignoring comments */
+	while (TRUE) {
+		PkGroupEnum group;
+		gchar *key, *value;
+
+		value = g_data_input_stream_read_line (input, NULL, NULL, &e);
+
+		if (value != NULL) {
+			g_strstrip (value);
+		} else {
+			break;
+		}
+
+		if (*value == '\0' || *value == '#') {
+			g_free (value);
+			continue;
+		}
+
+		/* line format: grp (space|tab)+ group */
+		key = strsep (&value, " 	");
+		g_strchomp (key);
+
+		if (value == NULL) {
+			/* safe to cast as it is never freed or modified */
+			value = (gchar *) "other";
+			group = PK_GROUP_ENUM_OTHER;
+		} else {
+			g_strchug (value);
+			group = pk_group_enum_from_string (value);
+		}
+
+		if (group != PK_GROUP_ENUM_UNKNOWN) {
+			/* key and value are allocated together */
+			g_hash_table_replace (map, key, value);
+			pk_bitfield_add (groups, group);
+		}
+	}
+
+	g_object_unref (input);
+	g_object_unref (is);
+	g_object_unref (file);
+
+	if (e != NULL) {
+		g_hash_table_unref (map);
+		g_propagate_error (error, e);
+		return NULL;
+	} else {
+		return map;
+	}
+}
+
+gboolean
+pk_backend_initialize_groups (PkBackend *self, GError **error)
+{
+	g_return_val_if_fail (self != NULL, FALSE);
+
+	grps = group_map_new (error);
+
+	return (grps != NULL);
+}
+
+void
+pk_backend_destroy_groups (PkBackend *self)
+{
+	g_return_if_fail (self != NULL);
+
+	if (grps != NULL) {
+		g_hash_table_unref (grps);
+	}
+}
+
+const gchar *
+alpm_pkg_get_group (pmpkg_t *pkg)
+{
+	const alpm_list_t *i;
+
+	g_return_val_if_fail (pkg != NULL, NULL);
+	g_return_val_if_fail (grps != NULL, NULL);
+
+	/* use the first group that we recognise */
+	for (i = alpm_pkg_get_groups (pkg); i != NULL; i = i->next) {
+		gpointer value = g_hash_table_lookup (grps, i->data);
+
+		if (value != NULL) {
+			return (const gchar *) value;
+		}
+	}
+
+	return "other";
+}
+
+PkBitfield
+pk_backend_get_groups (PkBackend *self)
+{
+	g_return_val_if_fail (self != NULL, 0);
+
+	return groups;
+}
diff --git a/backends/alpm/pk-backend-groups.h b/backends/alpm/pk-backend-groups.h
new file mode 100644
index 0000000..28dcf65
--- /dev/null
+++ b/backends/alpm/pk-backend-groups.h
@@ -0,0 +1,32 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2007 Andreas Obergrusberger <tradiaz at yahoo.de>
+ * Copyright (C) 2008-2010 Valeriy Lyasotskiy <onestep at ukr.net>
+ * Copyright (C) 2010-2011 Jonathan Conder <jonno.conder 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 <alpm.h>
+#include <pk-backend.h>
+
+gboolean	 pk_backend_initialize_groups	(PkBackend *self,
+						 GError **error);
+
+void		 pk_backend_destroy_groups	(PkBackend *self);
+
+const gchar	*alpm_pkg_get_group		(pmpkg_t *pkg);
diff --git a/backends/alpm/pk-backend-install.c b/backends/alpm/pk-backend-install.c
new file mode 100644
index 0000000..ec5fd21
--- /dev/null
+++ b/backends/alpm/pk-backend-install.c
@@ -0,0 +1,105 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2007 Andreas Obergrusberger <tradiaz at yahoo.de>
+ * Copyright (C) 2008-2010 Valeriy Lyasotskiy <onestep at ukr.net>
+ * Copyright (C) 2010-2011 Jonathan Conder <jonno.conder 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 <alpm.h>
+#include <pk-backend.h>
+
+#include "pk-backend-alpm.h"
+#include "pk-backend-error.h"
+#include "pk-backend-install.h"
+#include "pk-backend-transaction.h"
+
+static gboolean
+pk_backend_transaction_add_targets (PkBackend *self, GError **error)
+{
+	gchar **paths;
+
+	g_return_val_if_fail (self != NULL, FALSE);
+
+	paths = pk_backend_get_strv (self, "full_paths");
+
+	g_return_val_if_fail (paths != NULL, FALSE);
+
+	for (; *paths != NULL; ++paths) {
+		if (alpm_add_target (*paths) < 0) {
+			g_set_error (error, ALPM_ERROR, pm_errno, "%s: %s",
+				     *paths, alpm_strerrorlast ());
+			return FALSE;
+		}
+	}
+
+	return TRUE;
+}
+
+static gboolean
+pk_backend_simulate_install_files_thread (PkBackend *self)
+{
+	GError *error = NULL;
+
+	g_return_val_if_fail (self != NULL, FALSE);
+
+	if (pk_backend_transaction_initialize (self, 0, &error) &&
+	    pk_backend_transaction_add_targets (self, &error) &&
+	    pk_backend_transaction_simulate (self, &error)) {
+		pk_backend_transaction_packages (self);
+	}
+
+	return pk_backend_transaction_finish (self, error);
+}
+
+static gboolean
+pk_backend_install_files_thread (PkBackend *self)
+{
+	GError *error = NULL;
+
+	g_return_val_if_fail (self != NULL, FALSE);
+
+	if (pk_backend_transaction_initialize (self, 0, &error) &&
+	    pk_backend_transaction_add_targets (self, &error) &&
+	    pk_backend_transaction_simulate (self, &error)) {
+		pk_backend_transaction_commit (self, &error);
+	}
+
+	return pk_backend_transaction_finish (self, error);
+}
+
+void
+pk_backend_simulate_install_files (PkBackend *self, gchar **paths)
+{
+	g_return_if_fail (self != NULL);
+	g_return_if_fail (paths != NULL);
+
+	pk_backend_run (self, PK_STATUS_ENUM_SETUP,
+			pk_backend_simulate_install_files_thread);
+}
+
+void
+pk_backend_install_files (PkBackend *self, gboolean only_trusted,
+			  gchar **full_paths)
+{
+	g_return_if_fail (self != NULL);
+	g_return_if_fail (full_paths != NULL);
+
+	pk_backend_run (self, PK_STATUS_ENUM_SETUP,
+			pk_backend_install_files_thread);
+}
diff --git a/backends/alpm/pk-backend-install.h b/backends/alpm/pk-backend-install.h
new file mode 100644
index 0000000..368965a
--- /dev/null
+++ b/backends/alpm/pk-backend-install.h
@@ -0,0 +1,22 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2007 Andreas Obergrusberger <tradiaz at yahoo.de>
+ * Copyright (C) 2008-2010 Valeriy Lyasotskiy <onestep at ukr.net>
+ * Copyright (C) 2010-2011 Jonathan Conder <jonno.conder 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.
+ */
diff --git a/backends/alpm/pk-backend-packages.c b/backends/alpm/pk-backend-packages.c
new file mode 100644
index 0000000..7b983f8
--- /dev/null
+++ b/backends/alpm/pk-backend-packages.c
@@ -0,0 +1,365 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2007 Andreas Obergrusberger <tradiaz at yahoo.de>
+ * Copyright (C) 2008-2010 Valeriy Lyasotskiy <onestep at ukr.net>
+ * Copyright (C) 2010-2011 Jonathan Conder <jonno.conder 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 "pk-backend-alpm.h"
+#include "pk-backend-databases.h"
+#include "pk-backend-error.h"
+#include "pk-backend-groups.h"
+#include "pk-backend-packages.h"
+
+gchar *
+alpm_pkg_build_id (pmpkg_t *pkg)
+{
+	const gchar *name, *version, *arch, *repo;
+	pmdb_t *db;
+
+	g_return_val_if_fail (pkg != NULL, NULL);
+	g_return_val_if_fail (localdb != NULL, NULL);
+
+	name = alpm_pkg_get_name (pkg);
+	version = alpm_pkg_get_version (pkg);
+
+	arch = alpm_pkg_get_arch (pkg);
+	if (arch == NULL) {
+		arch = "any";
+	}
+
+	db = alpm_pkg_get_db (pkg);
+	if (db == NULL) {
+		repo = "local";
+	} else if (db == localdb) {
+		repo = "installed";
+	} else {
+		repo = alpm_db_get_name (db);
+	}
+
+	return pk_package_id_build (name, version, arch, repo);
+}
+
+void
+pk_backend_pkg (PkBackend *self, pmpkg_t *pkg, PkInfoEnum info)
+{
+	gchar *package;
+
+	g_return_if_fail (self != NULL);
+	g_return_if_fail (pkg != NULL);
+
+	package = alpm_pkg_build_id (pkg);
+	pk_backend_package (self, info, package, alpm_pkg_get_desc (pkg));
+	g_free (package);
+}
+
+pmpkg_t *
+pk_backend_find_pkg (PkBackend *self, const gchar *package_id, GError **error)
+{
+	gchar **package;
+	const gchar *repo_id;
+	pmdb_t *db = NULL;
+	pmpkg_t *pkg;
+
+	g_return_val_if_fail (self != NULL, NULL);
+	g_return_val_if_fail (package_id != NULL, NULL);
+	g_return_val_if_fail (localdb != NULL, NULL);
+
+	package = pk_package_id_split (package_id);
+	repo_id = package[PK_PACKAGE_ID_DATA];
+
+	/* find the database to search in */
+	if (g_strcmp0 (repo_id, "installed") == 0) {
+		db = localdb;
+	} else {
+		const alpm_list_t *i;
+		for (i = alpm_option_get_syncdbs (); i != NULL; i = i->next) {
+			const gchar *repo = alpm_db_get_name (i->data);
+
+			if (g_strcmp0 (repo, repo_id) == 0) {
+				db = i->data;
+				break;
+			}
+		}
+	}
+
+	if (db != NULL) {
+		pkg = alpm_db_get_pkg (db, package[PK_PACKAGE_ID_NAME]);
+	} else {
+		pkg = NULL;
+	}
+
+	if (pkg != NULL) {
+		const gchar *version = alpm_pkg_get_version (pkg);
+		if (g_strcmp0 (version, package[PK_PACKAGE_ID_VERSION]) != 0) {
+			pkg = NULL;
+		}
+	}
+
+	if (pkg == NULL) {
+		int code = PM_ERR_PKG_NOT_FOUND;
+		g_set_error (error, ALPM_ERROR, code, "%s: %s", package_id,
+			     alpm_strerror (code));
+	}
+	g_strfreev (package);
+	return pkg;
+}
+
+static gboolean
+pk_backend_resolve_package (PkBackend *self, const gchar *package,
+			    GError **error)
+{
+	pmpkg_t *pkg;
+	
+	PkBitfield filters;
+	gboolean skip_local, skip_remote;
+
+	g_return_val_if_fail (self != NULL, FALSE);
+	g_return_val_if_fail (package != NULL, FALSE);
+	g_return_val_if_fail (localdb != NULL, FALSE);
+
+	pkg = pk_backend_find_pkg (self, package, error);
+	if (pkg == NULL) {
+		return FALSE;
+	}
+
+	filters = pk_backend_get_uint (self, "filters");
+	skip_local = pk_bitfield_contain (filters,
+					  PK_FILTER_ENUM_NOT_INSTALLED);
+	skip_remote = pk_bitfield_contain (filters, PK_FILTER_ENUM_INSTALLED);
+
+	if (alpm_pkg_get_db (pkg) == localdb) {
+		if (!skip_local) {
+			pk_backend_pkg (self, pkg, PK_INFO_ENUM_INSTALLED);
+		}
+	} else {
+		if (!skip_remote) {
+			pk_backend_pkg (self, pkg, PK_INFO_ENUM_AVAILABLE);
+		}
+	}
+
+	return TRUE;
+}
+
+static gboolean
+pk_backend_resolve_name (PkBackend *self, const gchar *name, GError **error)
+{
+	pmpkg_t *pkg;
+	int code;
+	
+	PkBitfield filters;
+	gboolean skip_local, skip_remote;
+
+	g_return_val_if_fail (self != NULL, FALSE);
+	g_return_val_if_fail (name != NULL, FALSE);
+	g_return_val_if_fail (localdb != NULL, FALSE);
+
+	filters = pk_backend_get_uint (self, "filters");
+	skip_local = pk_bitfield_contain (filters,
+					  PK_FILTER_ENUM_NOT_INSTALLED);
+	skip_remote = pk_bitfield_contain (filters, PK_FILTER_ENUM_INSTALLED);
+
+	pkg = alpm_db_get_pkg (localdb, name);
+	if (pkg != NULL) {
+		if (!skip_local) {
+			pk_backend_pkg (self, pkg, PK_INFO_ENUM_INSTALLED);
+			return TRUE;
+		}
+	} else if (!skip_remote) {
+		const alpm_list_t *i;
+		for (i = alpm_option_get_syncdbs (); i != NULL; i = i->next) {
+			pkg = alpm_db_get_pkg (i->data, name);
+			if (pkg != NULL) {
+				pk_backend_pkg (self, pkg,
+						PK_INFO_ENUM_AVAILABLE);
+				return TRUE;
+			}
+		}
+	}
+
+	code = PM_ERR_PKG_NOT_FOUND;
+	g_set_error (error, ALPM_ERROR, code, "%s: %s", name,
+		     alpm_strerror (code));
+	return FALSE;
+}
+
+static gboolean
+pk_backend_resolve_thread (PkBackend *self)
+{
+	gchar **packages;
+	GError *error = NULL;
+
+	g_return_val_if_fail (self != NULL, FALSE);
+
+	packages = pk_backend_get_strv (self, "package_ids");
+
+	g_return_val_if_fail (packages != NULL, FALSE);
+
+	for (; *packages != NULL; ++packages) {
+		if (pk_backend_cancelled (self)) {
+			break;
+		}
+
+		/* find a package with the given id or name */
+		if (pk_package_id_check (*packages)) {
+			if (!pk_backend_resolve_package (self, *packages,
+							 &error)) {
+				break;
+			}
+		} else {
+			if (!pk_backend_resolve_name (self, *packages,
+						      &error)) {
+				break;
+			}
+		}
+	}
+
+	return pk_backend_finish (self, error);
+}
+
+void
+pk_backend_resolve (PkBackend *self, PkBitfield filters, gchar **package_ids)
+{
+	g_return_if_fail (self != NULL);
+	g_return_if_fail (package_ids != NULL);
+
+	pk_backend_run (self, PK_STATUS_ENUM_QUERY, pk_backend_resolve_thread);
+}
+
+static gboolean
+pk_backend_get_details_thread (PkBackend *self)
+{
+	gchar **packages;
+	GError *error = NULL;
+
+	g_return_val_if_fail (self != NULL, FALSE);
+	g_return_val_if_fail (localdb != NULL, FALSE);
+
+	packages = pk_backend_get_strv (self, "package_ids");
+
+	g_return_val_if_fail (packages != NULL, FALSE);
+
+	for (; *packages != NULL; ++packages) {
+		pmpkg_t *pkg;
+		const alpm_list_t *i;
+
+		GString *licenses;
+		PkGroupEnum group;
+		const gchar *desc, *url;
+		gulong size;
+
+		if (pk_backend_cancelled (self)) {
+			break;
+		}
+
+		pkg = pk_backend_find_pkg (self, *packages, &error);
+		if (pkg == NULL) {
+			break;
+		}
+
+		licenses = g_string_new ("");
+		i = alpm_pkg_get_licenses (pkg);
+		for (; i != NULL; i = i->next) {
+			/* assume OR although it may not be correct */
+			g_string_append_printf (licenses, " or %s",
+						(const gchar *) i->data);
+		}
+		if (licenses->len == 0) {
+			g_string_append (licenses, " or Unknown");
+		}
+
+		group = pk_group_enum_from_string (alpm_pkg_get_group (pkg));
+		desc = alpm_pkg_get_desc (pkg);
+		url = alpm_pkg_get_url (pkg);
+
+		if (alpm_pkg_get_db (pkg) == localdb) {
+			size = alpm_pkg_get_isize (pkg);
+		} else {
+			size = alpm_pkg_download_size (pkg);
+		}
+
+		pk_backend_details (self, *packages, licenses->str + 4, group,
+				    desc, url, size);
+		g_string_free (licenses, TRUE);
+	}
+
+	return pk_backend_finish (self, error);
+}
+
+void
+pk_backend_get_details (PkBackend *self, gchar **package_ids)
+{
+	g_return_if_fail (self != NULL);
+	g_return_if_fail (package_ids != NULL);
+
+	pk_backend_run (self, PK_STATUS_ENUM_QUERY,
+			pk_backend_get_details_thread);
+}
+
+static gboolean
+pk_backend_get_files_thread (PkBackend *self)
+{
+	gchar **packages;
+	GError *error = NULL;
+
+	g_return_val_if_fail (self != NULL, FALSE);
+
+	packages = pk_backend_get_strv (self, "package_ids");
+
+	g_return_val_if_fail (packages != NULL, FALSE);
+
+	for (; *packages != NULL; ++packages) {
+		pmpkg_t *pkg;
+		const alpm_list_t *i;
+
+		GString *files;
+		const gchar *root;
+
+		if (pk_backend_cancelled (self)) {
+			break;
+		}
+
+		pkg = pk_backend_find_pkg (self, *packages, &error);
+		if (pkg == NULL) {
+			break;
+		}
+
+		files = g_string_new ("");
+		root = alpm_option_get_root ();
+		for (i = alpm_pkg_get_files (pkg); i != NULL; i = i->next) {
+			g_string_append_printf (files, ";%s%s", root,
+						(const gchar *) i->data);
+		}
+
+		pk_backend_files (self, *packages, files->str + 1);
+		g_string_free (files, TRUE);
+	}
+
+	return pk_backend_finish (self, error);
+}
+
+void
+pk_backend_get_files (PkBackend *self, gchar **package_ids)
+{
+	g_return_if_fail (self != NULL);
+	g_return_if_fail (package_ids != NULL);
+
+	pk_backend_run (self, PK_STATUS_ENUM_QUERY,
+			pk_backend_get_files_thread);
+}
diff --git a/backends/alpm/pk-backend-packages.h b/backends/alpm/pk-backend-packages.h
new file mode 100644
index 0000000..4b2d7f8
--- /dev/null
+++ b/backends/alpm/pk-backend-packages.h
@@ -0,0 +1,33 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2007 Andreas Obergrusberger <tradiaz at yahoo.de>
+ * Copyright (C) 2008-2010 Valeriy Lyasotskiy <onestep at ukr.net>
+ * Copyright (C) 2010-2011 Jonathan Conder <jonno.conder 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 <alpm.h>
+#include <pk-backend.h>
+
+gchar	*alpm_pkg_build_id	(pmpkg_t *pkg);
+
+void	 pk_backend_pkg		(PkBackend *self, pmpkg_t *pkg,
+				 PkInfoEnum info);
+
+pmpkg_t	*pk_backend_find_pkg	(PkBackend *self, const gchar *package_id,
+				 GError **error);
diff --git a/backends/alpm/pk-backend-remove.c b/backends/alpm/pk-backend-remove.c
new file mode 100644
index 0000000..39a7f14
--- /dev/null
+++ b/backends/alpm/pk-backend-remove.c
@@ -0,0 +1,150 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2007 Andreas Obergrusberger <tradiaz at yahoo.de>
+ * Copyright (C) 2008-2010 Valeriy Lyasotskiy <onestep at ukr.net>
+ * Copyright (C) 2010-2011 Jonathan Conder <jonno.conder 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 <alpm.h>
+#include <pk-backend.h>
+
+#include "pk-backend-alpm.h"
+#include "pk-backend-error.h"
+#include "pk-backend-remove.h"
+#include "pk-backend-transaction.h"
+
+static gboolean
+pk_backend_transaction_remove_targets (PkBackend *self, GError **error)
+{
+	gchar **packages;
+
+	g_return_val_if_fail (self != NULL, FALSE);
+
+	packages = pk_backend_get_strv (self, "package_ids");
+
+	g_return_val_if_fail (packages != NULL, FALSE);
+
+	for (; *packages != NULL; ++packages) {
+		gchar **package = pk_package_id_split (*packages);
+		gchar *name = package[PK_PACKAGE_ID_NAME];
+
+		if (alpm_remove_target (name) < 0) {
+			g_set_error (error, ALPM_ERROR, pm_errno, "%s: %s",
+				     name, alpm_strerrorlast ());
+			g_strfreev (package);
+			return FALSE;
+		}
+
+		g_strfreev (package);
+	}
+
+	return TRUE;
+}
+
+static gboolean
+pk_backend_transaction_remove_simulate (PkBackend *self, GError **error)
+{
+	const alpm_list_t *i;
+
+	if (!pk_backend_transaction_simulate (self, error)) {
+		return FALSE;
+	}
+
+	for (i = alpm_trans_get_remove (); i != NULL; i = i->next) {
+		const gchar *name = alpm_pkg_get_name (i->data);
+		if (alpm_list_find_str (holdpkgs, name)) {
+			g_set_error (error, ALPM_ERROR, PM_ERR_PKG_HELD,
+				     "%s: %s", name,
+				     "could not remove HoldPkg");
+			return FALSE;
+		}
+	}
+
+	return TRUE;
+}
+
+static gboolean
+pk_backend_simulate_remove_packages_thread (PkBackend *self)
+{
+	pmtransflag_t flags = PM_TRANS_FLAG_CASCADE;
+	GError *error = NULL;
+
+	g_return_val_if_fail (self != NULL, FALSE);
+
+	/* remove unneeded packages that were required by those to be removed */
+	if (pk_backend_get_bool (self, "autoremove")) {
+		flags |= PM_TRANS_FLAG_RECURSE;
+	}
+
+	if (pk_backend_transaction_initialize (self, flags, &error) &&
+	    pk_backend_transaction_remove_targets (self, &error) &&
+	    pk_backend_transaction_remove_simulate (self, &error)) {
+		pk_backend_transaction_packages (self);
+	}
+
+	return pk_backend_transaction_finish (self, error);
+}
+
+static gboolean
+pk_backend_remove_packages_thread (PkBackend *self)
+{
+	pmtransflag_t flags = 0;
+	GError *error = NULL;
+
+	g_return_val_if_fail (self != NULL, FALSE);
+
+	/* remove packages that depend on those to be removed */
+	if (pk_backend_get_bool (self, "allow_deps")) {
+		flags |= PM_TRANS_FLAG_CASCADE;
+	}
+	/* remove unneeded packages that were required by those to be removed */
+	if (pk_backend_get_bool (self, "autoremove")) {
+		flags |= PM_TRANS_FLAG_RECURSE;
+	}
+
+	if (pk_backend_transaction_initialize (self, flags, &error) &&
+	    pk_backend_transaction_remove_targets (self, &error) &&
+	    pk_backend_transaction_remove_simulate (self, &error)) {
+		pk_backend_transaction_commit (self, &error);
+	}
+
+	return pk_backend_transaction_finish (self, error);
+}
+
+void
+pk_backend_simulate_remove_packages (PkBackend *self, gchar **package_ids,
+				     gboolean autoremove)
+{
+	g_return_if_fail (self != NULL);
+	g_return_if_fail (package_ids != NULL);
+
+	pk_backend_run (self, PK_STATUS_ENUM_SETUP,
+			pk_backend_simulate_remove_packages_thread);
+}
+
+void
+pk_backend_remove_packages (PkBackend *self, gchar **package_ids,
+			    gboolean allow_deps, gboolean autoremove)
+{
+	g_return_if_fail (self != NULL);
+	g_return_if_fail (package_ids != NULL);
+
+	pk_backend_run (self, PK_STATUS_ENUM_SETUP,
+			pk_backend_remove_packages_thread);
+}
diff --git a/backends/alpm/pk-backend-remove.h b/backends/alpm/pk-backend-remove.h
new file mode 100644
index 0000000..368965a
--- /dev/null
+++ b/backends/alpm/pk-backend-remove.h
@@ -0,0 +1,22 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2007 Andreas Obergrusberger <tradiaz at yahoo.de>
+ * Copyright (C) 2008-2010 Valeriy Lyasotskiy <onestep at ukr.net>
+ * Copyright (C) 2010-2011 Jonathan Conder <jonno.conder 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.
+ */
diff --git a/backends/alpm/pk-backend-search.c b/backends/alpm/pk-backend-search.c
new file mode 100644
index 0000000..971e19b
--- /dev/null
+++ b/backends/alpm/pk-backend-search.c
@@ -0,0 +1,451 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2007 Andreas Obergrusberger <tradiaz at yahoo.de>
+ * Copyright (C) 2008-2010 Valeriy Lyasotskiy <onestep at ukr.net>
+ * Copyright (C) 2010-2011 Jonathan Conder <jonno.conder 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 <alpm.h>
+#include <pk-backend.h>
+#include <string.h>
+
+#include "pk-backend-alpm.h"
+#include "pk-backend-databases.h"
+#include "pk-backend-groups.h"
+#include "pk-backend-packages.h"
+#include "pk-backend-search.h"
+
+static gpointer
+pk_backend_pattern_needle (const gchar *needle, GError **error)
+{
+	return (gpointer) needle;
+}
+
+static gpointer
+pk_backend_pattern_regex (const gchar *needle, GError **error)
+{
+	gchar *pattern;
+	GRegex *regex;
+
+	g_return_val_if_fail (needle != NULL, NULL);
+
+	pattern = g_regex_escape_string (needle, -1);
+	regex = g_regex_new (pattern, G_REGEX_CASELESS, 0, error);
+	g_free (pattern);
+
+	return regex;
+}
+
+static gpointer
+pk_backend_pattern_chroot (const gchar *needle, GError **error)
+{
+	g_return_val_if_fail (needle != NULL, NULL);
+
+	if (G_IS_DIR_SEPARATOR (*needle)) {
+		const gchar *file = needle, *root = alpm_option_get_root ();
+
+		/* adjust needle to the correct prefix */
+		for (; *file == *root; ++file, ++root) {
+			if (*root == '\0') {
+				needle = file - 1;
+				break;
+			} else if (*file == '\0') {
+				break;
+			}
+		}
+	}
+
+	return (gpointer) needle;
+}
+
+static gboolean
+pk_backend_match_all (pmpkg_t *pkg, gpointer pattern)
+{
+	g_return_val_if_fail (pkg != NULL, FALSE);
+	g_return_val_if_fail (pattern != NULL, FALSE);
+
+	/* match all packages */
+	return TRUE;
+}
+
+static gboolean
+pk_backend_match_details (pmpkg_t *pkg, GRegex *regex)
+{
+	const gchar *desc;
+	pmdb_t *db;
+	const alpm_list_t *i;
+
+	g_return_val_if_fail (pkg != NULL, FALSE);
+	g_return_val_if_fail (regex != NULL, FALSE);
+
+	/* match the name first... */
+	if (g_regex_match (regex, alpm_pkg_get_name (pkg), 0, NULL)) {
+		return TRUE;
+	}
+
+	/* ... then the description... */
+	desc = alpm_pkg_get_desc (pkg);
+	if (desc != NULL && g_regex_match (regex, desc, 0, NULL)) {
+		return TRUE;
+	}
+
+	/* ... then the database... */
+	db = alpm_pkg_get_db (pkg);
+	if (db != NULL && g_regex_match (regex, alpm_db_get_name (db),
+					 G_REGEX_MATCH_ANCHORED, NULL)) {
+		return TRUE;
+	}
+
+	/* ... then the licenses */
+	for (i = alpm_pkg_get_licenses (pkg); i != NULL; i = i->next) {
+		if (g_regex_match (regex, i->data, G_REGEX_MATCH_ANCHORED,
+				   NULL)) {
+			return TRUE;
+		}
+	}
+
+	return FALSE;
+}
+
+static gboolean
+pk_backend_match_file (pmpkg_t *pkg, const gchar *needle)
+{
+	const alpm_list_t *i;
+
+	g_return_val_if_fail (pkg != NULL, FALSE);
+	g_return_val_if_fail (needle != NULL, FALSE);
+
+	/* match any file the package contains */
+	if (G_IS_DIR_SEPARATOR (*needle)) {
+		for (i = alpm_pkg_get_files (pkg); i != NULL; i = i->next) {
+			/* match the full path of file */
+			if (g_strcmp0 (i->data, needle + 1) == 0) {
+				return TRUE;
+			}
+		}
+	} else {
+		for (i = alpm_pkg_get_files (pkg); i != NULL; i = i->next) {
+			const gchar *file = strrchr (i->data, G_DIR_SEPARATOR);
+			if (file == NULL) {
+				file = i->data;
+			} else {
+				++file;
+			}
+
+			/* match the basename of file */
+			if (g_strcmp0 (file, needle) == 0) {
+				return TRUE;
+			}
+		}
+	}
+
+	return FALSE;
+}
+
+static gboolean
+pk_backend_match_group (pmpkg_t *pkg, const gchar *needle)
+{
+	g_return_val_if_fail (pkg != NULL, FALSE);
+	g_return_val_if_fail (needle != NULL, FALSE);
+
+	/* match the group the package is in */
+	return g_strcmp0 (needle, alpm_pkg_get_group (pkg)) == 0;
+}
+
+static gboolean
+pk_backend_match_name (pmpkg_t *pkg, GRegex *regex)
+{
+	g_return_val_if_fail (pkg != NULL, FALSE);
+	g_return_val_if_fail (regex != NULL, FALSE);
+
+	/* match the name of the package */
+	return g_regex_match (regex, alpm_pkg_get_name (pkg), 0, NULL);
+}
+
+static gboolean
+pk_backend_match_provides (pmpkg_t *pkg, gpointer pattern)
+{
+	/* TODO: implement GStreamer codecs, Pango fonts, etc. */
+	const alpm_list_t *i;
+
+	g_return_val_if_fail (pkg != NULL, FALSE);
+	g_return_val_if_fail (pattern != NULL, FALSE);
+
+	/* match features provided by package */
+	for (i = alpm_pkg_get_provides (pkg); i != NULL; i = i->next) {
+		const gchar *needle = pattern, *name = i->data;
+
+		for (; *needle == *name; ++needle, ++name) {
+			if (*needle == '\0') {
+				if (*name == '\0' || *name == '=') {
+					return TRUE;
+				} else {
+					break;
+				}
+			}
+		}
+	}
+
+	return FALSE;
+}
+
+typedef enum {
+	SEARCH_TYPE_ALL,
+	SEARCH_TYPE_DETAILS,
+	SEARCH_TYPE_FILES,
+	SEARCH_TYPE_GROUP,
+	SEARCH_TYPE_NAME,
+	SEARCH_TYPE_PROVIDES,
+	SEARCH_TYPE_LAST
+} SearchType;
+
+typedef gpointer (*PatternFunc) (const gchar *needle, GError **error);
+typedef gboolean (*MatchFunc) (pmpkg_t *pkg, gpointer pattern);
+
+static PatternFunc pattern_funcs[] = {
+	pk_backend_pattern_needle,
+	pk_backend_pattern_regex,
+	pk_backend_pattern_chroot,
+	pk_backend_pattern_needle,
+	pk_backend_pattern_regex,
+	pk_backend_pattern_needle
+};
+
+static GDestroyNotify pattern_frees[] = {
+	NULL,
+	(GDestroyNotify) g_regex_unref,
+	NULL,
+	NULL,
+	(GDestroyNotify) g_regex_unref,
+	NULL
+};
+
+static MatchFunc match_funcs[] = {
+	pk_backend_match_all,
+	(MatchFunc) pk_backend_match_details,
+	(MatchFunc) pk_backend_match_file,
+	(MatchFunc) pk_backend_match_group,
+	(MatchFunc) pk_backend_match_name,
+	pk_backend_match_provides
+};
+
+static gboolean
+alpm_pkg_is_local (pmpkg_t *pkg)
+{
+	pmpkg_t *local;
+
+	g_return_val_if_fail (pkg != NULL, FALSE);
+	g_return_val_if_fail (localdb != NULL, FALSE);
+
+	/* find an installed package with the same name */
+	local = alpm_db_get_pkg (localdb, alpm_pkg_get_name (pkg));
+	if (local == NULL) {
+		return FALSE;
+	}
+
+	/* make sure the installed version is the same */
+	if (alpm_pkg_vercmp (alpm_pkg_get_version (local),
+			     alpm_pkg_get_version (pkg)) != 0) {
+		return FALSE;
+	}
+
+	/* make sure the installed arch is the same */
+	if (g_strcmp0 (alpm_pkg_get_arch (local),
+		       alpm_pkg_get_arch (pkg)) != 0) {
+		return FALSE;
+	}
+
+	return TRUE;
+}
+
+static void
+pk_backend_search_db (PkBackend *self, pmdb_t *db, MatchFunc match,
+		      const alpm_list_t *patterns)
+{
+	const alpm_list_t *i, *j;
+
+	g_return_if_fail (self != NULL);
+	g_return_if_fail (db != NULL);
+	g_return_if_fail (match != NULL);
+
+	/* emit packages that match all search terms */
+	for (i = alpm_db_get_pkgcache (db); i != NULL; i = i->next) {
+		if (pk_backend_cancelled (self)) {
+			break;
+		}
+
+		for (j = patterns; j != NULL; j = j->next) {
+			if (!match (i->data, j->data)) {
+				break;
+			}
+		}
+
+		/* all search terms matched */
+		if (j == NULL) {
+			if (db == localdb) {
+				pk_backend_pkg (self, i->data,
+						PK_INFO_ENUM_INSTALLED);
+			} else if (!alpm_pkg_is_local (i->data)) {
+				pk_backend_pkg (self, i->data,
+						PK_INFO_ENUM_AVAILABLE);
+			}
+		}
+	}
+}
+
+static gboolean
+pk_backend_search_thread (PkBackend *self)
+{
+	gchar **needles;
+	SearchType type;
+
+	PatternFunc pattern_func;
+	GDestroyNotify pattern_free;
+	MatchFunc match_func;
+
+	PkBitfield filters;
+	gboolean skip_local, skip_remote;
+
+	const alpm_list_t *i;
+	alpm_list_t *patterns = NULL;
+	GError *error = NULL;
+
+	g_return_val_if_fail (self != NULL, FALSE);
+	g_return_val_if_fail (localdb != NULL, FALSE);
+
+	needles = pk_backend_get_strv (self, "search");
+	type = pk_backend_get_uint (self, "search-type");
+
+	g_return_val_if_fail (needles != NULL, FALSE);
+	g_return_val_if_fail (type < SEARCH_TYPE_LAST, FALSE);
+
+	pattern_func = pattern_funcs[type];
+	pattern_free = pattern_frees[type];
+	match_func = match_funcs[type];
+
+	g_return_val_if_fail (pattern_func != NULL, FALSE);
+	g_return_val_if_fail (match_func != NULL, FALSE);
+
+	filters = pk_backend_get_uint (self, "filters");
+	skip_local = pk_bitfield_contain (filters,
+					  PK_FILTER_ENUM_NOT_INSTALLED);
+	skip_remote = pk_bitfield_contain (filters, PK_FILTER_ENUM_INSTALLED);
+
+	/* convert search terms to the pattern requested */
+	for (; *needles != NULL; ++needles) {
+		gpointer pattern = pattern_func (*needles, &error);
+
+		if (pattern == NULL) {
+			goto out;
+		}
+
+		patterns = alpm_list_add (patterns, pattern);
+	}
+
+	/* find installed packages first */
+	if (!skip_local) {
+		pk_backend_search_db (self, localdb, match_func, patterns);
+	}
+
+	if (skip_remote) {
+		goto out;
+	}
+
+	for (i = alpm_option_get_syncdbs (); i != NULL; i = i->next) {
+		if (pk_backend_cancelled (self)) {
+			break;
+		}
+
+		pk_backend_search_db (self, i->data, match_func, patterns);
+	}
+
+out:
+	if (pattern_free != NULL) {
+		alpm_list_free_inner (patterns, pattern_free);
+	}
+	alpm_list_free (patterns);
+	return pk_backend_finish (self, error);
+}
+
+void
+pk_backend_get_packages (PkBackend *self, PkBitfield filters)
+{
+	g_return_if_fail (self != NULL);
+
+	/* provide a dummy needle */
+	pk_backend_set_strv (self, "search", g_strsplit ("", ";", 0));
+
+	pk_backend_set_uint (self, "search-type", SEARCH_TYPE_ALL);
+	pk_backend_run (self, PK_STATUS_ENUM_QUERY, pk_backend_search_thread);
+}
+
+void
+pk_backend_search_details (PkBackend *self, PkBitfield filters, gchar **values)
+{
+	g_return_if_fail (self != NULL);
+	g_return_if_fail (values != NULL);
+
+	pk_backend_set_uint (self, "search-type", SEARCH_TYPE_DETAILS);
+	pk_backend_run (self, PK_STATUS_ENUM_QUERY, pk_backend_search_thread);
+}
+
+void
+pk_backend_search_files (PkBackend *self, PkBitfield filters, gchar **values)
+{
+	g_return_if_fail (self != NULL);
+	g_return_if_fail (values != NULL);
+
+	/* speed up search by restricting it to local database */
+	pk_bitfield_add (filters, PK_FILTER_ENUM_INSTALLED);
+	pk_backend_set_uint (self, "filters", filters);
+
+	pk_backend_set_uint (self, "search-type", SEARCH_TYPE_FILES);
+	pk_backend_run (self, PK_STATUS_ENUM_QUERY, pk_backend_search_thread);
+}
+
+void
+pk_backend_search_groups (PkBackend *self, PkBitfield filters, gchar **values)
+{
+	g_return_if_fail (self != NULL);
+	g_return_if_fail (values != NULL);
+
+	pk_backend_set_uint (self, "search-type", SEARCH_TYPE_GROUP);
+	pk_backend_run (self, PK_STATUS_ENUM_QUERY, pk_backend_search_thread);
+}
+
+void
+pk_backend_search_names (PkBackend *self, PkBitfield filters, gchar **values)
+{
+	g_return_if_fail (self != NULL);
+	g_return_if_fail (values != NULL);
+
+	pk_backend_set_uint (self, "search-type", SEARCH_TYPE_NAME);
+	pk_backend_run (self, PK_STATUS_ENUM_QUERY, pk_backend_search_thread);
+}
+
+void
+pk_backend_what_provides (PkBackend *self, PkBitfield filters,
+			  PkProvidesEnum provides, gchar **values)
+{
+	g_return_if_fail (self != NULL);
+	g_return_if_fail (values != NULL);
+
+	pk_backend_set_uint (self, "search-type", SEARCH_TYPE_PROVIDES);
+	pk_backend_run (self, PK_STATUS_ENUM_QUERY, pk_backend_search_thread);
+}
diff --git a/backends/alpm/pk-backend-search.h b/backends/alpm/pk-backend-search.h
new file mode 100644
index 0000000..368965a
--- /dev/null
+++ b/backends/alpm/pk-backend-search.h
@@ -0,0 +1,22 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2007 Andreas Obergrusberger <tradiaz at yahoo.de>
+ * Copyright (C) 2008-2010 Valeriy Lyasotskiy <onestep at ukr.net>
+ * Copyright (C) 2010-2011 Jonathan Conder <jonno.conder 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.
+ */
diff --git a/backends/alpm/pk-backend-sync.c b/backends/alpm/pk-backend-sync.c
new file mode 100644
index 0000000..b3cb1e9
--- /dev/null
+++ b/backends/alpm/pk-backend-sync.c
@@ -0,0 +1,255 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2007 Andreas Obergrusberger <tradiaz at yahoo.de>
+ * Copyright (C) 2008-2010 Valeriy Lyasotskiy <onestep at ukr.net>
+ * Copyright (C) 2010-2011 Jonathan Conder <jonno.conder 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 <alpm.h>
+#include <pk-backend.h>
+#include <string.h>
+
+#include "pk-backend-alpm.h"
+#include "pk-backend-databases.h"
+#include "pk-backend-error.h"
+#include "pk-backend-sync.h"
+#include "pk-backend-transaction.h"
+
+static gboolean
+pk_backend_transaction_sync_targets (PkBackend *self, GError **error)
+{
+	gchar **packages;
+
+	g_return_val_if_fail (self != NULL, FALSE);
+
+	packages = pk_backend_get_strv (self, "package_ids");
+
+	g_return_val_if_fail (packages != NULL, FALSE);
+
+	for (; *packages != NULL; ++packages) {
+		gchar **package = pk_package_id_split (*packages);
+		gchar *repo = package[PK_PACKAGE_ID_DATA];
+		gchar *name = package[PK_PACKAGE_ID_NAME];
+
+		if (alpm_sync_dbtarget (repo, name) < 0) {
+			g_set_error (error, ALPM_ERROR, pm_errno, "%s/%s: %s",
+				     repo, name, alpm_strerrorlast ());
+			g_strfreev (package);
+			return FALSE;
+		}
+
+		g_strfreev (package);
+	}
+
+	return TRUE;
+}
+
+static gboolean
+pk_backend_download_packages_thread (PkBackend *self)
+{
+	alpm_list_t *cachedirs;
+	const gchar *directory;
+	pmtransflag_t flags = 0;
+	GError *error = NULL;
+
+	g_return_val_if_fail (self != NULL, FALSE);
+
+	directory = pk_backend_get_string (self, "directory");
+
+	g_return_val_if_fail (directory != NULL, FALSE);
+
+	/* download files to a PackageKit directory */
+	cachedirs = alpm_list_strdup (alpm_option_get_cachedirs ());
+	alpm_option_set_cachedirs (alpm_list_add (NULL, strdup (directory)));
+
+	flags |= PM_TRANS_FLAG_NODEPS;
+	flags |= PM_TRANS_FLAG_NOCONFLICTS;
+	flags |= PM_TRANS_FLAG_DOWNLOADONLY;
+
+	if (pk_backend_transaction_initialize (self, flags, &error) &&
+	    pk_backend_transaction_sync_targets (self, &error) &&
+	    pk_backend_transaction_simulate (self, &error)) {
+		pk_backend_transaction_commit (self, &error);
+	}
+
+	alpm_option_set_cachedirs (cachedirs);
+
+	return pk_backend_transaction_finish (self, error);
+}
+
+void
+pk_backend_download_packages (PkBackend *self, gchar **package_ids,
+			      const gchar *directory)
+{
+	g_return_if_fail (self != NULL);
+	g_return_if_fail (package_ids != NULL);
+	g_return_if_fail (directory != NULL);
+
+	pk_backend_run (self, PK_STATUS_ENUM_SETUP,
+			pk_backend_download_packages_thread);
+}
+
+static gboolean
+pk_backend_simulate_install_packages_thread (PkBackend *self)
+{
+	GError *error = NULL;
+
+	g_return_val_if_fail (self != NULL, FALSE);
+
+	if (pk_backend_transaction_initialize (self, 0, &error) &&
+	    pk_backend_transaction_sync_targets (self, &error) &&
+	    pk_backend_transaction_simulate (self, &error)) {
+		pk_backend_transaction_packages (self);
+	}
+
+	return pk_backend_transaction_finish (self, error);
+}
+
+static gboolean
+pk_backend_install_packages_thread (PkBackend *self)
+{
+	GError *error = NULL;
+
+	g_return_val_if_fail (self != NULL, FALSE);
+
+	if (pk_backend_transaction_initialize (self, 0, &error) &&
+	    pk_backend_transaction_sync_targets (self, &error) &&
+	    pk_backend_transaction_simulate (self, &error)) {
+		pk_backend_transaction_commit (self, &error);
+	}
+
+	return pk_backend_transaction_finish (self, error);
+}
+
+void
+pk_backend_simulate_install_packages (PkBackend *self, gchar **package_ids)
+{
+	g_return_if_fail (self != NULL);
+	g_return_if_fail (package_ids != NULL);
+
+	pk_backend_run (self, PK_STATUS_ENUM_SETUP,
+			pk_backend_simulate_install_packages_thread);
+}
+
+void
+pk_backend_install_packages (PkBackend *self, gboolean only_trusted,
+			     gchar **package_ids)
+{
+	g_return_if_fail (self != NULL);
+	g_return_if_fail (package_ids != NULL);
+
+	pk_backend_run (self, PK_STATUS_ENUM_SETUP,
+			pk_backend_install_packages_thread);
+}
+
+static gboolean
+pk_backend_replaces_dependencies (PkBackend *self, pmpkg_t *pkg)
+{
+	const alpm_list_t *i, *replaces;
+
+	g_return_val_if_fail (self != NULL, FALSE);
+	g_return_val_if_fail (pkg != NULL, FALSE);
+
+	replaces = alpm_pkg_get_replaces (pkg);
+	for (i = alpm_trans_get_remove (); i != NULL; i = i->next) {
+		pmpkg_t *rpkg = (pmpkg_t *) i->data;
+		const gchar *rname = alpm_pkg_get_name (rpkg);
+
+		if (pk_backend_cancelled (self)) {
+			return FALSE;
+		} else if (alpm_list_find_str (replaces, rname) == NULL) {
+			continue;
+		}
+
+		if (alpm_pkg_get_reason (rpkg) == PM_PKG_REASON_EXPLICIT) {
+			return FALSE;
+		}
+	}
+
+	return TRUE;
+}
+
+static gboolean
+pk_backend_update_packages_thread (PkBackend *self)
+{
+	const alpm_list_t *i;
+	alpm_list_t *asdeps = NULL;
+	GError *error = NULL;
+
+	g_return_val_if_fail (self != NULL, FALSE);
+	g_return_val_if_fail (localdb != NULL, FALSE);
+
+	if (!pk_backend_transaction_initialize (self, 0, &error) ||
+	    !pk_backend_transaction_sync_targets (self, &error) ||
+	    !pk_backend_transaction_simulate (self, &error)) {
+		goto out;
+	}
+
+	/* change the install reason of packages that replace dependencies */
+	for (i = alpm_trans_get_add (); i != NULL; i = i->next) {
+		pmpkg_t *pkg = (pmpkg_t *) i->data;
+		const gchar *name = alpm_pkg_get_name (pkg);
+
+		if (pk_backend_cancelled (self)) {
+			goto out;
+		} else if (alpm_db_get_pkg (localdb, name) != NULL) {
+			continue;
+		}
+
+		if (pk_backend_replaces_dependencies (self, pkg)) {
+			asdeps = alpm_list_add (asdeps, g_strdup (name));
+		}
+	}
+
+	if (!pk_backend_transaction_commit (self, &error)) {
+		goto out;
+	}
+
+	for (i = asdeps; i != NULL; i = i->next) {
+		const gchar *name = (const gchar *) i->data;
+		alpm_db_set_pkgreason (localdb, name, PM_PKG_REASON_DEPEND);
+	}
+
+out:
+	alpm_list_free_inner (asdeps, g_free);
+	alpm_list_free (asdeps);
+
+	return pk_backend_transaction_finish (self, error);
+}
+
+void
+pk_backend_simulate_update_packages (PkBackend *self, gchar **package_ids)
+{
+	g_return_if_fail (self != NULL);
+	g_return_if_fail (package_ids != NULL);
+
+	pk_backend_run (self, PK_STATUS_ENUM_SETUP,
+			pk_backend_simulate_install_packages_thread);
+}
+
+void
+pk_backend_update_packages (PkBackend *self, gboolean only_trusted,
+			    gchar **package_ids)
+{
+	g_return_if_fail (self != NULL);
+	g_return_if_fail (package_ids != NULL);
+
+	pk_backend_run (self, PK_STATUS_ENUM_SETUP,
+			pk_backend_update_packages_thread);
+}
diff --git a/backends/alpm/pk-backend-sync.h b/backends/alpm/pk-backend-sync.h
new file mode 100644
index 0000000..368965a
--- /dev/null
+++ b/backends/alpm/pk-backend-sync.h
@@ -0,0 +1,22 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2007 Andreas Obergrusberger <tradiaz at yahoo.de>
+ * Copyright (C) 2008-2010 Valeriy Lyasotskiy <onestep at ukr.net>
+ * Copyright (C) 2010-2011 Jonathan Conder <jonno.conder 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.
+ */
diff --git a/backends/alpm/pk-backend-transaction.c b/backends/alpm/pk-backend-transaction.c
new file mode 100644
index 0000000..cad1010
--- /dev/null
+++ b/backends/alpm/pk-backend-transaction.c
@@ -0,0 +1,878 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2007 Andreas Obergrusberger <tradiaz at yahoo.de>
+ * Copyright (C) 2008-2010 Valeriy Lyasotskiy <onestep at ukr.net>
+ * Copyright (C) 2010-2011 Jonathan Conder <jonno.conder 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 "pk-backend-alpm.h"
+#include "pk-backend-databases.h"
+#include "pk-backend-error.h"
+#include "pk-backend-packages.h"
+#include "pk-backend-transaction.h"
+
+static off_t dcomplete = 0;
+static off_t dtotal = 0;
+
+static pmpkg_t *dpkg = NULL;
+static GString *dfiles = NULL;
+
+static gchar *
+pk_backend_resolve_path (PkBackend *self, const gchar *basename)
+{
+	const gchar *dirname;
+
+	g_return_val_if_fail (self != NULL, NULL);
+	g_return_val_if_fail (basename != NULL, NULL);
+
+	dirname = pk_backend_get_string (self, "directory");
+
+	g_return_val_if_fail (dirname != NULL, NULL);
+
+	return g_build_filename (dirname, basename, NULL);
+}
+
+static gboolean
+alpm_pkg_has_basename (pmpkg_t *pkg, const gchar *basename)
+{
+	const alpm_list_t *i;
+
+	g_return_val_if_fail (pkg != NULL, FALSE);
+	g_return_val_if_fail (basename != NULL, FALSE);
+
+	if (g_strcmp0 (alpm_pkg_get_filename (pkg), basename) == 0) {
+		return TRUE;
+	}
+
+	if (alpm_option_get_usedelta () == 0) {
+		return FALSE;
+	}
+
+	for (i = alpm_pkg_get_deltas (pkg); i != NULL; i = i->next) {
+		const gchar *patch = alpm_delta_get_filename (i->data);
+
+		if (g_strcmp0 (patch, basename) == 0) {
+			return TRUE;
+		}
+	}
+
+	return FALSE;
+}
+
+static void
+pk_backend_transaction_download_end (PkBackend *self)
+{
+	g_return_if_fail (self != NULL);
+	g_return_if_fail (dpkg != NULL);
+
+	pk_backend_pkg (self, dpkg, PK_INFO_ENUM_FINISHED);
+
+	/* tell DownloadPackages what files were downloaded */
+	if (dfiles != NULL) {
+		gchar *package_id;
+
+		package_id = alpm_pkg_build_id (dpkg);
+
+		pk_backend_files (self, package_id, dfiles->str);
+
+		g_free (package_id);
+		g_string_free (dfiles, TRUE);
+	}
+
+	dpkg = NULL;
+	dfiles = NULL;
+}
+
+static void
+pk_backend_transaction_download_start (PkBackend *self, const gchar *basename)
+{
+	gchar *path;
+	const alpm_list_t *i;
+
+	g_return_if_fail (self != NULL);
+	g_return_if_fail (basename != NULL);
+
+	/* continue or finish downloading the current package */
+	if (dpkg != NULL) {
+		if (alpm_pkg_has_basename (dpkg, basename)) {
+			if (dfiles != NULL) {
+				path = pk_backend_resolve_path (self, basename);
+				g_string_append_printf (dfiles, ";%s", path);
+				g_free (path);
+			}
+
+			return;
+		} else {
+			pk_backend_transaction_download_end (self);
+			dpkg = NULL;
+		}
+	}
+
+	/* figure out what the next package is */
+	for (i = alpm_trans_get_add (); i != NULL; i = i->next) {
+		pmpkg_t *pkg = (pmpkg_t *) i->data;
+
+		if (alpm_pkg_has_basename (pkg, basename)) {
+			dpkg = pkg;
+			break;
+		}
+	}
+
+	if (dpkg == NULL) {
+		return;
+	}
+
+	pk_backend_pkg (self, dpkg, PK_INFO_ENUM_DOWNLOADING);
+
+	/* start collecting files for the new package */
+	if (pk_backend_get_role (self) == PK_ROLE_ENUM_DOWNLOAD_PACKAGES) {
+		path = pk_backend_resolve_path (self, basename);
+		dfiles = g_string_new (path);
+		g_free (path);
+	}
+}
+
+static void
+pk_backend_transaction_totaldlcb (off_t total)
+{
+	g_return_if_fail (backend != NULL);
+
+	if (dtotal > 0 && dpkg != NULL) {
+		pk_backend_transaction_download_end (backend);
+	}
+
+	dcomplete = 0;
+	dtotal = total;
+}
+
+static void
+pk_backend_transaction_dlcb (const gchar *basename, off_t complete, off_t total)
+{
+	guint percentage = 100, sub_percentage = 100;
+
+	g_return_if_fail (basename != NULL);
+	g_return_if_fail (complete <= total);
+	g_return_if_fail (backend != NULL);
+
+	if (total > 0) {
+		sub_percentage = complete * 100 / total;
+	}
+
+	if (dtotal > 0) {
+		percentage = (dcomplete + complete) * 100 / dtotal;
+	} else if (dtotal < 0) {
+		/* database files */
+		percentage = (dcomplete * 100 + sub_percentage) / -dtotal;
+
+		if (complete == total) {
+			complete = total = 1;
+		} else {
+			complete = total + 1;
+		}
+	}
+
+	if (complete == 0) {
+		g_debug ("downloading file %s", basename);
+		pk_backend_set_status (backend, PK_STATUS_ENUM_DOWNLOAD);
+		pk_backend_transaction_download_start (backend, basename);
+	} else if (complete == total) {
+		dcomplete += complete;
+	}
+
+	pk_backend_set_sub_percentage (backend, sub_percentage);
+	pk_backend_set_percentage (backend, percentage);
+}
+
+static void
+pk_backend_transaction_progress_cb (pmtransprog_t type, const gchar *target,
+				    gint percent, gint targets, gint current)
+{
+	static gint recent = 101;
+	gint overall = percent + (current - 1) * 100;
+
+	g_return_if_fail (target != NULL);
+	g_return_if_fail (0 <= percent && percent <= 100);
+	g_return_if_fail (1 <= current && current <= targets);
+	g_return_if_fail (backend != NULL);
+
+	/* update transaction progress */
+	switch (type) {
+		case PM_TRANS_PROGRESS_ADD_START:
+		case PM_TRANS_PROGRESS_UPGRADE_START:
+		case PM_TRANS_PROGRESS_REMOVE_START:
+		case PM_TRANS_PROGRESS_CONFLICTS_START:
+			if (percent == recent) {
+				break;
+			}
+
+			pk_backend_set_sub_percentage (backend, percent);
+			pk_backend_set_percentage (backend, overall / targets);
+			recent = percent;
+
+			g_debug ("%d%% of %s complete (%u of %u)", percent,
+				 target, current, targets);
+			break;
+
+		default:
+			g_warning ("unknown progress type %d", type);
+			break;
+	}
+}
+
+static void
+pk_backend_install_ignorepkg (PkBackend *self, pmpkg_t *pkg, gint *result)
+{
+	gchar *output;
+
+	g_return_if_fail (self != NULL);
+	g_return_if_fail (pkg != NULL);
+	g_return_if_fail (result != NULL);
+
+	switch (pk_backend_get_role (self)) {
+		case PK_ROLE_ENUM_INSTALL_PACKAGES:
+			output = g_strdup_printf ("%s: was not ignored\n",
+						  alpm_pkg_get_name (pkg));
+			pk_backend_output (self, output);
+			g_free (output);
+
+		case PK_ROLE_ENUM_DOWNLOAD_PACKAGES:
+		case PK_ROLE_ENUM_SIMULATE_INSTALL_PACKAGES:
+			*result = 1;
+			break;
+
+		default:
+			*result = 0;
+			break;
+	}
+}
+
+static void
+pk_backend_transaction_conv_cb (pmtransconv_t question, gpointer data1,
+				gpointer data2, gpointer data3, gint *result)
+{
+	g_return_if_fail (result != NULL);
+	g_return_if_fail (backend != NULL);
+
+	switch (question) {
+		case PM_TRANS_CONV_INSTALL_IGNOREPKG:
+			pk_backend_install_ignorepkg (backend, data1, result);
+			break;
+
+		case PM_TRANS_CONV_REMOVE_PKGS:
+			g_debug ("unsafe question %d", question);
+			*result = 0;
+			break;
+
+		case PM_TRANS_CONV_REPLACE_PKG:
+		case PM_TRANS_CONV_CONFLICT_PKG:
+		case PM_TRANS_CONV_CORRUPTED_PKG:
+		case PM_TRANS_CONV_LOCAL_NEWER:
+			/* these actions are mostly harmless */
+			g_debug ("safe question %d", question);
+			*result = 1;
+			break;
+
+		default:
+			g_warning ("unknown question %d", question);
+			break;
+	}
+}
+
+static void
+pk_backend_transaction_dep_resolve (PkBackend *self)
+{
+	g_return_if_fail (self != NULL);
+
+	pk_backend_set_status (self, PK_STATUS_ENUM_DEP_RESOLVE);
+}
+
+static void
+pk_backend_transaction_test_commit (PkBackend *self)
+{
+	g_return_if_fail (self != NULL);
+
+	pk_backend_set_status (self, PK_STATUS_ENUM_TEST_COMMIT);
+}
+
+static void
+pk_backend_transaction_add_start (PkBackend *self, pmpkg_t *pkg)
+{
+	g_return_if_fail (self != NULL);
+	g_return_if_fail (pkg != NULL);
+
+	pk_backend_set_status (self, PK_STATUS_ENUM_INSTALL);
+	pk_backend_pkg (self, pkg, PK_INFO_ENUM_INSTALLING);
+}
+
+static void
+pk_backend_transaction_add_done (PkBackend *self, pmpkg_t *pkg)
+{
+	const gchar *name, *version;
+	const alpm_list_t *i, *optdepends;
+
+	g_return_if_fail (self != NULL);
+	g_return_if_fail (pkg != NULL);
+
+	name = alpm_pkg_get_name (pkg);
+	version = alpm_pkg_get_version (pkg);
+
+	alpm_logaction ((gchar *) "installed %s (%s)\n", name, version);
+	pk_backend_pkg (self, pkg, PK_INFO_ENUM_FINISHED);
+
+	optdepends = alpm_pkg_get_optdepends (pkg);
+	if (optdepends != NULL) {
+		GString *depends = g_string_new ("");
+
+		g_string_append_printf (depends,
+					"Optional dependencies for %s:\n",
+					name);
+
+		for (i = optdepends; i != NULL; i = i->next) {
+			g_string_append_printf (depends, "%s\n",
+						(const gchar *) i->data);
+		}
+
+		pk_backend_output (self, depends->str);
+		g_string_free (depends, TRUE);
+	}
+}
+
+static void
+pk_backend_transaction_remove_start (PkBackend *self, pmpkg_t *pkg)
+{
+	g_return_if_fail (self != NULL);
+	g_return_if_fail (pkg != NULL);
+
+	pk_backend_set_status (self, PK_STATUS_ENUM_REMOVE);
+	pk_backend_pkg (self, pkg, PK_INFO_ENUM_REMOVING);
+}
+
+static void
+pk_backend_transaction_remove_done (PkBackend *self, pmpkg_t *pkg)
+{
+	const gchar *name, *version;
+
+	g_return_if_fail (self != NULL);
+	g_return_if_fail (pkg != NULL);
+
+	name = alpm_pkg_get_name (pkg);
+	version = alpm_pkg_get_version (pkg);
+
+	alpm_logaction ((gchar *) "removed %s (%s)\n", name, version);
+	pk_backend_pkg (self, pkg, PK_INFO_ENUM_FINISHED);
+}
+
+static void
+pk_backend_transaction_upgrade_start (PkBackend *self, pmpkg_t *pkg,
+				      pmpkg_t *old)
+{
+	PkRoleEnum role;
+	PkStatusEnum state;
+	PkInfoEnum info;
+
+	g_return_if_fail (self != NULL);
+	g_return_if_fail (pkg != NULL);
+
+	role = pk_backend_get_role (self);
+	if (role == PK_ROLE_ENUM_INSTALL_FILES ||
+	    role == PK_ROLE_ENUM_SIMULATE_INSTALL_FILES) {
+		state = PK_STATUS_ENUM_INSTALL;
+		info = PK_INFO_ENUM_INSTALLING;
+	} else {
+		state = PK_STATUS_ENUM_UPDATE;
+		info = PK_INFO_ENUM_UPDATING;
+	}
+
+	pk_backend_set_status (self, state);
+	pk_backend_pkg (self, pkg, info);
+}
+
+static void
+pk_backend_transaction_upgrade_done (PkBackend *self, pmpkg_t *pkg,
+				     pmpkg_t *old)
+{
+	const gchar *name, *pre, *post;
+	const alpm_list_t *i;
+	alpm_list_t *optdepends;
+
+	g_return_if_fail (self != NULL);
+	g_return_if_fail (pkg != NULL);
+	g_return_if_fail (old != NULL);
+
+	name = alpm_pkg_get_name (pkg);
+	pre = alpm_pkg_get_version (old);
+	post = alpm_pkg_get_version (pkg);
+
+	alpm_logaction ((gchar *) "upgraded %s (%s -> %s)\n", name, pre, post);
+	pk_backend_pkg (self, pkg, PK_INFO_ENUM_FINISHED);
+
+	optdepends = alpm_list_diff (alpm_pkg_get_optdepends (pkg),
+				     alpm_pkg_get_optdepends (old),
+				     (alpm_list_fn_cmp) g_strcmp0);
+	if (optdepends != NULL) {
+		GString *depends = g_string_new ("");
+
+		g_string_append_printf (depends,
+					"New optional dependencies for %s\n",
+					name);
+
+		for (i = optdepends; i != NULL; i = i->next) {
+			g_string_append_printf (depends, "%s\n",
+						(const gchar *) i->data);
+		}
+
+		pk_backend_output (self, depends->str);
+
+		g_string_free (depends, TRUE);
+		alpm_list_free (optdepends);
+	}
+}
+
+static void
+pk_backend_transaction_event_cb (pmtransevt_t event, gpointer data,
+				 gpointer old)
+{
+	g_return_if_fail (backend != NULL);
+
+	/* figure out the backend status and package info */
+	switch (event) {
+		case PM_TRANS_EVT_CHECKDEPS_START:
+		case PM_TRANS_EVT_RESOLVEDEPS_START:
+			pk_backend_transaction_dep_resolve (backend);
+			break;
+
+		case PM_TRANS_EVT_FILECONFLICTS_START:
+		case PM_TRANS_EVT_INTERCONFLICTS_START:
+		case PM_TRANS_EVT_INTEGRITY_START:
+		case PM_TRANS_EVT_DELTA_INTEGRITY_START:
+			pk_backend_transaction_test_commit (backend);
+			break;
+
+		case PM_TRANS_EVT_ADD_START:
+			pk_backend_transaction_add_start (backend, data);
+			break;
+
+		case PM_TRANS_EVT_ADD_DONE:
+			pk_backend_transaction_add_done (backend, data);
+			break;
+
+		case PM_TRANS_EVT_REMOVE_START:
+			pk_backend_transaction_remove_start (backend, data);
+			break;
+
+		case PM_TRANS_EVT_REMOVE_DONE:
+			pk_backend_transaction_remove_done (backend, data);
+			break;
+
+		case PM_TRANS_EVT_UPGRADE_START:
+			pk_backend_transaction_upgrade_start (backend, data,
+							      old);
+			break;
+
+		case PM_TRANS_EVT_UPGRADE_DONE:
+			pk_backend_transaction_upgrade_done (backend, data,
+							     old);
+			break;
+
+		case PM_TRANS_EVT_SCRIPTLET_INFO:
+			pk_backend_output (backend, data);
+			break;
+
+		default:
+			g_debug ("unhandled event %d", event);
+			break;
+	}
+}
+
+static void
+transaction_cancelled_cb (GCancellable *object, gpointer data)
+{
+	g_return_if_fail (data != NULL);
+
+	alpm_trans_interrupt ();
+}
+
+gboolean
+pk_backend_transaction_initialize (PkBackend *self, pmtransflag_t flags,
+				   GError **error)
+{
+	g_return_val_if_fail (self != NULL, FALSE);
+	g_return_val_if_fail (cancellable != NULL, FALSE);
+
+	if (alpm_trans_init (flags, pk_backend_transaction_event_cb,
+			     pk_backend_transaction_conv_cb,
+			     pk_backend_transaction_progress_cb) < 0) {
+		g_set_error_literal (error, ALPM_ERROR, pm_errno,
+				     alpm_strerrorlast ());
+		return FALSE;
+	}
+
+	alpm_option_set_dlcb (pk_backend_transaction_dlcb);
+	alpm_option_set_totaldlcb (pk_backend_transaction_totaldlcb);
+
+	g_cancellable_connect (cancellable,
+			       G_CALLBACK (transaction_cancelled_cb),
+			       self, NULL);
+
+	return TRUE;
+}
+
+static gchar *
+alpm_pkg_build_list (const alpm_list_t *i)
+{
+	GString *list;
+
+	if (i == NULL) {
+		return NULL;
+	} else {
+		list = g_string_new ("");
+	}
+
+	for (; i != NULL; i = i->next) {
+		g_string_append_printf (list, "%s, ",
+					alpm_pkg_get_name (i->data));
+	}
+
+	g_string_truncate (list, list->len - 2);
+	return g_string_free (list, FALSE);
+}
+
+static gchar *
+alpm_miss_build_list (const alpm_list_t *i)
+{
+	GString *list;
+
+	if (i == NULL) {
+		return NULL;
+	} else {
+		list = g_string_new ("");
+	}
+
+	for (; i != NULL; i = i->next) {
+		pmdepend_t *dep = alpm_miss_get_dep (i->data);
+		gchar *depend = alpm_dep_compute_string (dep);
+		g_string_append_printf (list, "%s <- %s, ", depend,
+					alpm_miss_get_target (i->data));
+		free (depend);
+	}
+
+	g_string_truncate (list, list->len - 2);
+	return g_string_free (list, FALSE);
+}
+
+static void
+alpm_dep_free (gpointer dep)
+{
+	/* TODO: remove when implemented in libalpm */
+	free ((gpointer) alpm_dep_get_name (dep));
+	free ((gpointer) alpm_dep_get_version (dep));
+	free (dep);
+}
+
+static void
+alpm_miss_free (gpointer miss)
+{
+	/* TODO: remove when implemented in libalpm */
+	const gchar *temp = alpm_miss_get_causingpkg (miss);
+	if (temp != NULL) {
+		free ((gpointer) temp);
+	}
+
+	free ((gpointer) alpm_miss_get_target (miss));
+	alpm_dep_free (alpm_miss_get_dep (miss));
+	free (miss);
+}
+
+static gchar *
+alpm_conflict_build_list (const alpm_list_t *i)
+{
+	GString *list;
+
+	if (i == NULL) {
+		return NULL;
+	} else {
+		list = g_string_new ("");
+	}
+
+	for (; i != NULL; i = i->next) {
+		const gchar *first = alpm_conflict_get_package1 (i->data);
+		const gchar *second = alpm_conflict_get_package2 (i->data);
+		const gchar *reason = alpm_conflict_get_reason (i->data);
+
+		if (g_strcmp0 (first, reason) == 0 ||
+		    g_strcmp0 (second, reason) == 0) {
+			g_string_append_printf (list, "%s <-> %s, ", first,
+						second);
+		} else {
+			g_string_append_printf (list, "%s <-> %s (%s), ", first,
+						second, reason);
+		}
+	}
+
+	g_string_truncate (list, list->len - 2);
+	return g_string_free (list, FALSE);
+}
+
+static void
+alpm_conflict_free (gpointer conflict)
+{
+	/* TODO: remove when implemented in libalpm */
+	free ((gpointer) alpm_conflict_get_package1 (conflict));
+	free ((gpointer) alpm_conflict_get_package2 (conflict));
+	free ((gpointer) alpm_conflict_get_reason (conflict));
+	free (conflict);
+}
+
+static gchar *
+alpm_fileconflict_build_list (const alpm_list_t *i)
+{
+	GString *list;
+
+	if (i == NULL) {
+		return NULL;
+	} else {
+		list = g_string_new ("");
+	}
+
+	for (; i != NULL; i = i->next) {
+		const gchar *target = alpm_fileconflict_get_target (i->data);
+		const gchar *file = alpm_fileconflict_get_file (i->data);
+		const gchar *ctarget = alpm_fileconflict_get_ctarget (i->data);
+		if (*ctarget != '\0') {
+			g_string_append_printf (list, "%s <-> %s (%s), ",
+						target, ctarget, file);
+		} else {
+			g_string_append_printf (list, "%s (%s), ", target,
+						file);
+		}
+	}
+
+	g_string_truncate (list, list->len - 2);
+	return g_string_free (list, FALSE);
+}
+
+static void
+alpm_fileconflict_free (gpointer conflict)
+{
+	/* TODO: remove when implemented in libalpm */
+	const gchar *temp = alpm_fileconflict_get_ctarget (conflict);
+	if (*temp != '\0') {
+		free ((gpointer) temp);
+	}
+
+	free ((gpointer) alpm_fileconflict_get_target (conflict));
+	free ((gpointer) alpm_fileconflict_get_file (conflict));
+	free (conflict);
+}
+
+gboolean
+pk_backend_transaction_simulate (PkBackend *self, GError **error)
+{
+	alpm_list_t *data = NULL;
+	gchar *prefix;
+
+	if (alpm_trans_prepare (&data) >= 0) {
+		return TRUE;
+	}
+
+	switch (pm_errno) {
+		case PM_ERR_PKG_INVALID_ARCH:
+			prefix = alpm_pkg_build_list (data);
+			alpm_list_free (data);
+			break;
+
+		case PM_ERR_UNSATISFIED_DEPS:
+			prefix = alpm_miss_build_list (data);
+			alpm_list_free_inner (data, alpm_miss_free);
+			alpm_list_free (data);
+			break;
+
+		case PM_ERR_CONFLICTING_DEPS:
+			prefix = alpm_conflict_build_list (data);
+			alpm_list_free_inner (data, alpm_conflict_free);
+			alpm_list_free (data);
+			break;
+
+		case PM_ERR_FILE_CONFLICTS:
+			prefix = alpm_fileconflict_build_list (data);
+			alpm_list_free_inner (data, alpm_fileconflict_free);
+			alpm_list_free (data);
+			break;
+
+		default:
+			prefix = NULL;
+			if (data != NULL) {
+				g_warning ("unhandled error %d", pm_errno);
+			}
+			break;
+	}
+
+	if (prefix != NULL) {
+		g_set_error (error, ALPM_ERROR, pm_errno, "%s: %s", prefix,
+			     alpm_strerrorlast ());
+		g_free (prefix);
+	} else {
+		g_set_error_literal (error, ALPM_ERROR, pm_errno,
+				     alpm_strerrorlast ());
+	}
+
+	return FALSE;
+}
+
+void
+pk_backend_transaction_packages (PkBackend *self)
+{
+	const alpm_list_t *i;
+	PkInfoEnum info;
+
+	g_return_if_fail (self != NULL);
+	g_return_if_fail (localdb != NULL);
+
+	/* emit packages that would have been installed */
+	for (i = alpm_trans_get_add (); i != NULL; i = i->next) {
+		if (pk_backend_cancelled (self)) {
+			break;
+		} else {
+			const gchar *name = alpm_pkg_get_name (i->data);
+
+			if (alpm_db_get_pkg (localdb, name) != NULL) {
+				info = PK_INFO_ENUM_UPDATING;
+			} else {
+				info = PK_INFO_ENUM_INSTALLING;
+			}
+
+			pk_backend_pkg (self, i->data, info);
+		}
+	}
+
+	switch (pk_backend_get_role (self)) {
+		case PK_ROLE_ENUM_SIMULATE_UPDATE_PACKAGES:
+			info = PK_INFO_ENUM_OBSOLETING;
+			break;
+
+		default:
+			info = PK_INFO_ENUM_REMOVING;
+			break;
+	}
+
+	/* emit packages that would have been removed */
+	for (i = alpm_trans_get_remove (); i != NULL; i = i->next) {
+		if (pk_backend_cancelled (self)) {
+			break;
+		} else {
+			pk_backend_pkg (self, i->data, info);
+		}
+	}
+}
+
+static gchar *
+alpm_string_build_list (const alpm_list_t *i)
+{
+	GString *list;
+
+	if (i == NULL) {
+		return NULL;
+	} else {
+		list = g_string_new ("");
+	}
+
+	for (; i != NULL; i = i->next) {
+		g_string_append_printf (list, "%s, ", (const gchar *) i->data);
+	}
+
+	g_string_truncate (list, list->len - 2);
+	return g_string_free (list, FALSE);
+}
+
+gboolean
+pk_backend_transaction_commit (PkBackend *self, GError **error)
+{
+	alpm_list_t *data = NULL;
+	gchar *prefix;
+
+	if (pk_backend_cancelled (self)) {
+		return TRUE;
+	}
+
+	pk_backend_set_allow_cancel (self, FALSE);
+	pk_backend_set_status (self, PK_STATUS_ENUM_RUNNING);
+
+	if (alpm_trans_commit (&data) >= 0) {
+		return TRUE;
+	}
+
+	switch (pm_errno) {
+		case PM_ERR_FILE_CONFLICTS:
+			prefix = alpm_fileconflict_build_list (data);
+			alpm_list_free_inner (data, alpm_fileconflict_free);
+			alpm_list_free (data);
+			break;
+
+		case PM_ERR_PKG_INVALID:
+		case PM_ERR_DLT_INVALID:
+			prefix = alpm_string_build_list (data);
+			alpm_list_free (data);
+			break;
+
+		default:
+			prefix = NULL;
+			if (data != NULL) {
+				g_warning ("unhandled error %d", pm_errno);
+			}
+			break;
+	}
+
+	if (prefix != NULL) {
+		g_set_error (error, ALPM_ERROR, pm_errno, "%s: %s", prefix,
+			     alpm_strerrorlast ());
+		g_free (prefix);
+	} else {
+		g_set_error_literal (error, ALPM_ERROR, pm_errno,
+				     alpm_strerrorlast ());
+	}
+
+	return FALSE;
+}
+
+gboolean
+pk_backend_transaction_end (PkBackend *self, GError **error)
+{
+	g_return_val_if_fail (self != NULL, FALSE);
+
+	alpm_option_set_dlcb (NULL);
+	alpm_option_set_totaldlcb (NULL);
+
+	if (alpm_trans_release () < 0) {
+		g_set_error_literal (error, ALPM_ERROR, pm_errno,
+				     alpm_strerrorlast ());
+		return FALSE;
+	}
+
+	return TRUE;
+}
+
+gboolean
+pk_backend_transaction_finish (PkBackend *self, GError *error)
+{
+	g_return_val_if_fail (self != NULL, FALSE);
+
+	pk_backend_transaction_end (self, (error == NULL) ? &error : NULL);
+
+	return pk_backend_finish (self, error);
+}
diff --git a/backends/alpm/pk-backend-transaction.h b/backends/alpm/pk-backend-transaction.h
new file mode 100644
index 0000000..7bc1af0
--- /dev/null
+++ b/backends/alpm/pk-backend-transaction.h
@@ -0,0 +1,43 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2007 Andreas Obergrusberger <tradiaz at yahoo.de>
+ * Copyright (C) 2008-2010 Valeriy Lyasotskiy <onestep at ukr.net>
+ * Copyright (C) 2010-2011 Jonathan Conder <jonno.conder 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 <alpm.h>
+#include <pk-backend.h>
+
+gboolean	 pk_backend_transaction_initialize	(PkBackend *self,
+							 pmtransflag_t flags,
+							 GError **error);
+
+gboolean	 pk_backend_transaction_simulate	(PkBackend *self,
+							 GError **error);
+
+void		 pk_backend_transaction_packages	(PkBackend *self);
+
+gboolean	 pk_backend_transaction_commit		(PkBackend *self,
+							 GError **error);
+
+gboolean	 pk_backend_transaction_end		(PkBackend *self,
+							 GError **error);
+
+gboolean	 pk_backend_transaction_finish		(PkBackend *self,
+							 GError *error);
diff --git a/backends/alpm/pk-backend-update.c b/backends/alpm/pk-backend-update.c
new file mode 100644
index 0000000..771d528
--- /dev/null
+++ b/backends/alpm/pk-backend-update.c
@@ -0,0 +1,463 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2007 Andreas Obergrusberger <tradiaz at yahoo.de>
+ * Copyright (C) 2008-2010 Valeriy Lyasotskiy <onestep at ukr.net>
+ * Copyright (C) 2010-2011 Jonathan Conder <jonno.conder 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 <alpm.h>
+#include <glib/gstdio.h>
+#include <pk-backend.h>
+#include <string.h>
+#include <sys/stat.h>
+
+#include "pk-backend-alpm.h"
+#include "pk-backend-databases.h"
+#include "pk-backend-error.h"
+#include "pk-backend-packages.h"
+#include "pk-backend-transaction.h"
+#include "pk-backend-update.h"
+
+static gchar *
+alpm_pkg_build_replaces (pmpkg_t *pkg)
+{
+	const alpm_list_t *i;
+	GString *string = NULL;
+
+	g_return_val_if_fail (pkg != NULL, NULL);
+	g_return_val_if_fail (localdb != NULL, NULL);
+
+	/* make a list of the packages that package replaces */
+	for (i = alpm_pkg_get_replaces (pkg); i != NULL; i = i->next) {
+		pmpkg_t *replaces = alpm_db_get_pkg (localdb, i->data);
+
+		if (replaces != NULL) {
+			gchar *package = alpm_pkg_build_id (replaces);
+			if (string == NULL) {
+				string = g_string_new (package);
+			} else {
+				g_string_append_printf (string, "&%s", package);
+			}
+			g_free (package);
+		}
+	}
+
+	if (string != NULL) {
+		return g_string_free (string, FALSE);
+	} else {
+		return NULL;
+	}
+}
+
+static gchar *
+alpm_pkg_build_urls (pmpkg_t *pkg)
+{
+	GString *string = g_string_new ("");
+#ifdef ALPM_PACKAGE_URL
+	const gchar *name, *arch, *repo, *url;
+#else
+	const gchar *url;
+#endif
+
+	g_return_val_if_fail (pkg != NULL, NULL);
+
+	/* grab the URL of the package... */
+	url = alpm_pkg_get_url (pkg);
+	if (url != NULL) {
+		g_string_append_printf (string, "%s;Package website;", url);
+	}
+
+#ifdef ALPM_PACKAGE_URL
+	/* ... and construct the distro URL if possible */
+	name = alpm_pkg_get_name (pkg);
+	arch = alpm_pkg_get_arch (pkg);
+	repo = alpm_db_get_name (alpm_pkg_get_db (pkg));
+
+	g_string_append_printf (string, ALPM_PACKAGE_URL ";Distribution page;",
+				repo, arch, name);
+#endif
+
+	g_string_truncate (string, string->len - 1);
+	return g_string_free (string, FALSE);
+}
+
+static gboolean
+alpm_pkg_same_pkgver (pmpkg_t *a, pmpkg_t *b)
+{
+	const gchar *version_a, *version_b, *last_a, *last_b;
+	gsize length_a, length_b;
+
+	g_return_val_if_fail (a != NULL, (b == NULL));
+	g_return_val_if_fail (b != NULL, FALSE);
+
+	version_a = alpm_pkg_get_version (a);
+	version_b = alpm_pkg_get_version (b);
+
+	last_a = strrchr (version_a, '-');
+	last_b = strrchr (version_b, '-');
+
+	if (last_a != NULL) {
+		length_a = last_a - version_a;
+	} else {
+		length_a = strlen (version_a);
+	}
+
+	if (last_b != NULL) {
+		length_b = last_b - version_b;
+	} else {
+		length_b = strlen (version_b);
+	}
+
+	if (length_a != length_b) {
+		return FALSE;
+	} else {
+		return strncmp (version_a, version_b, length_a) == 0;
+	}
+}
+
+static gboolean
+pk_backend_get_update_detail_thread (PkBackend *self)
+{
+	gchar **packages;
+	GError *error = NULL;
+
+	g_return_val_if_fail (self != NULL, FALSE);
+	g_return_val_if_fail (localdb != NULL, FALSE);
+
+	packages = pk_backend_get_strv (self, "package_ids");
+
+	g_return_val_if_fail (packages != NULL, FALSE);
+
+	/* collect details about updates */
+	for (; *packages != NULL; ++packages) {
+		pmpkg_t *pkg, *old;
+		pmdb_t *db;
+
+		gchar *upgrades, *replaces, *urls;
+		const gchar *reason;
+
+		PkRestartEnum restart;
+		PkUpdateStateEnum state;
+
+		GTimeVal built = { 0 }, installed = { 0 };
+		gchar *issued, *updated;
+
+		if (pk_backend_cancelled (self)) {
+			break;
+		}
+
+		pkg = pk_backend_find_pkg (self, *packages, &error);
+		if (pkg == NULL) {
+			break;
+		}
+
+		old = alpm_db_get_pkg (localdb, alpm_pkg_get_name (pkg));
+		if (old != NULL) {
+			upgrades = alpm_pkg_build_id (old);
+			if (alpm_pkg_same_pkgver (pkg, old)) {
+				reason = "Update to a newer release";
+			} else {
+				reason = "Update to a new upstream version";
+			}
+		} else {
+			upgrades = NULL;
+			reason = "Install to replace an older package";
+		}
+
+		db = alpm_pkg_get_db (pkg);
+		replaces = alpm_pkg_build_replaces (pkg);
+		urls = alpm_pkg_build_urls (pkg);
+
+		if (g_str_has_prefix (alpm_pkg_get_name (pkg), "kernel")) {
+			restart = PK_RESTART_ENUM_SYSTEM;
+		} else {
+			restart = PK_RESTART_ENUM_NONE;
+		}
+
+		if (g_str_has_suffix (alpm_db_get_name (db), "testing")) {
+			state = PK_UPDATE_STATE_ENUM_TESTING;
+		} else {
+			state = PK_UPDATE_STATE_ENUM_STABLE;
+		}
+
+		built.tv_sec = alpm_pkg_get_builddate (pkg);
+		if (built.tv_sec > 0) {
+			issued = g_time_val_to_iso8601 (&built);
+		} else {
+			issued = NULL;
+		}
+
+		if (upgrades != NULL) {
+			installed.tv_sec = alpm_pkg_get_installdate (old);
+			if (installed.tv_sec > 0) {
+				updated = g_time_val_to_iso8601 (&installed);
+			} else {
+				updated = NULL;
+			}
+		} else {
+			updated = NULL;
+		}
+
+		pk_backend_update_detail (self, *packages, upgrades, replaces,
+					  urls, NULL, NULL, restart, reason,
+					  NULL, state, issued, updated);
+
+		g_free (issued);
+		g_free (updated);
+
+		g_free (urls);
+		g_free (replaces);
+		g_free (upgrades);
+	}
+
+	return pk_backend_finish (self, error);
+}
+
+void
+pk_backend_get_update_detail (PkBackend *self, gchar **package_ids)
+{
+	g_return_if_fail (self != NULL);
+	g_return_if_fail (package_ids != NULL);
+
+	pk_backend_run (self, PK_STATUS_ENUM_QUERY,
+			pk_backend_get_update_detail_thread);
+}
+
+static gboolean
+pk_backend_update_databases (PkBackend *self, gint force, GError **error) {
+	alpm_cb_download dlcb;
+	alpm_cb_totaldl totaldlcb;
+	const alpm_list_t *i;
+
+	g_return_val_if_fail (self != NULL, FALSE);
+
+	if (!pk_backend_transaction_initialize (self, 0, error)) {
+		return FALSE;
+	}
+
+	alpm_logaction ((gchar *) "synchronizing package lists\n");
+
+	dlcb = alpm_option_get_dlcb ();
+	totaldlcb = alpm_option_get_totaldlcb ();
+
+	/* set total size to minus the number of databases */
+	i = alpm_option_get_syncdbs ();
+	totaldlcb (-alpm_list_count (i));
+
+	for (; i != NULL; i = i->next) {
+		gint result;
+
+		if (pk_backend_cancelled (self)) {
+			/* pretend to be finished */
+			i = NULL;
+			break;
+		}
+
+		result = alpm_db_update (force, i->data);
+
+		if (result > 0) {
+			/* fake the download when already up to date */
+			dlcb ("", 1, 1);
+		} else if (result < 0) {
+			g_set_error (error, ALPM_ERROR, pm_errno, "[%s]: %s",
+				     alpm_db_get_name (i->data),
+				     alpm_strerrorlast ());
+			break;
+		}
+	}
+
+	totaldlcb (0);
+
+	if (i == NULL) {
+		return pk_backend_transaction_end (self, error);
+	} else {
+		pk_backend_transaction_end (self, NULL);
+		return FALSE;
+	}
+}
+
+static gboolean
+alpm_pkg_is_ignorepkg (pmpkg_t *pkg)
+{
+	const alpm_list_t *ignorepkgs, *ignoregrps, *i;
+
+	g_return_val_if_fail (pkg != NULL, TRUE);
+
+	ignorepkgs = alpm_option_get_ignorepkgs ();
+	if (alpm_list_find_str (ignorepkgs, alpm_pkg_get_name (pkg)) != NULL) {
+		return TRUE;
+	}
+
+	ignoregrps = alpm_option_get_ignoregrps ();
+	for (i = alpm_pkg_get_groups (pkg); i != NULL; i = i->next) {
+		if (alpm_list_find_str (ignoregrps, i->data) != NULL) {
+			return TRUE;
+		}
+	}
+
+	return FALSE;
+}
+
+static gboolean
+alpm_pkg_is_syncfirst (pmpkg_t *pkg)
+{
+	g_return_val_if_fail (pkg != NULL, FALSE);
+
+	if (alpm_list_find_str (syncfirsts, alpm_pkg_get_name (pkg)) != NULL) {
+		return TRUE;
+	}
+
+	return FALSE;
+}
+
+static gboolean
+alpm_pkg_is_update (pmpkg_t *pkg, pmpkg_t *update)
+{
+	gint result;
+
+	g_return_val_if_fail (pkg != NULL, FALSE);
+	g_return_val_if_fail (update != NULL, FALSE);
+
+	result = alpm_pkg_vercmp (alpm_pkg_get_version (pkg),
+				  alpm_pkg_get_version (update));
+
+	if (result < 0) {
+		return TRUE;
+	} else if (result > 0) {
+		return alpm_pkg_has_force (update) != 0;
+	} else {
+		return FALSE;
+	}
+}
+
+static pmpkg_t *
+alpm_pkg_find_update (pmpkg_t *pkg, const alpm_list_t *dbs)
+{
+	const gchar *name;
+	const alpm_list_t *i;
+
+	g_return_val_if_fail (pkg != NULL, NULL);
+
+	name = alpm_pkg_get_name (pkg);
+
+	for (; dbs != NULL; dbs = dbs->next) {
+		pmpkg_t *update = alpm_db_get_pkg (dbs->data, name);
+
+		if (update != NULL) {
+			if (alpm_pkg_is_update (pkg, update)) {
+				return update;
+			} else {
+				return NULL;
+			}
+		}
+
+		i = alpm_db_get_pkgcache (dbs->data);
+		for (; i != NULL; i = i->next) {
+			if (alpm_list_find_str (alpm_pkg_get_replaces (i->data),
+						name) != NULL) {
+				return i->data;
+			}
+		}
+	}
+
+	return NULL;
+}
+
+static gboolean
+pk_backend_get_updates_thread (PkBackend *self)
+{
+	struct stat cache;
+	time_t one_hour_ago;
+	const alpm_list_t *i, *syncdbs;
+
+	g_return_val_if_fail (self != NULL, FALSE);
+	g_return_val_if_fail (localdb != NULL, FALSE);
+
+	time (&one_hour_ago);
+	one_hour_ago -= 60 * 60;
+
+	/* refresh databases if they are older than an hour */
+	if (g_stat (ALPM_CACHE_PATH, &cache) < 0 ||
+	    cache.st_mtime < one_hour_ago) {
+		GError *error = NULL;
+		/* show updates even if the databases could not be updated */
+		if (!pk_backend_update_databases (self, 0, &error)) {
+			g_warning ("%s", error->message);
+		}
+	} else {
+		g_debug ("databases have been refreshed recently");
+	}
+
+	/* find outdated and replacement packages */
+	syncdbs = alpm_option_get_syncdbs ();
+	for (i = alpm_db_get_pkgcache (localdb); i != NULL; i = i->next) {
+		pmpkg_t *upgrade = alpm_pkg_find_update (i->data, syncdbs);
+
+		if (pk_backend_cancelled (self)) {
+			break;
+		} else if (upgrade != NULL) {
+			PkInfoEnum info;
+
+			if (alpm_pkg_is_ignorepkg (upgrade)) {
+				info = PK_INFO_ENUM_BLOCKED;
+			} else if (alpm_pkg_is_syncfirst (upgrade)) {
+				info = PK_INFO_ENUM_IMPORTANT;
+			} else {
+				info = PK_INFO_ENUM_NORMAL;
+			}
+
+			pk_backend_pkg (self, upgrade, info);
+		}
+	}
+
+	return pk_backend_finish (self, NULL);
+}
+
+void
+pk_backend_get_updates (PkBackend *self, PkBitfield filters)
+{
+	g_return_if_fail (self != NULL);
+
+	pk_backend_run (self, PK_STATUS_ENUM_QUERY,
+			pk_backend_get_updates_thread);
+}
+
+static gboolean
+pk_backend_refresh_cache_thread (PkBackend *self)
+{
+	gint force;
+	GError *error = NULL;
+
+	g_return_val_if_fail (self != NULL, FALSE);
+
+	/* download databases even if they are older than current */
+	force = (gint) pk_backend_get_bool (self, "force");
+
+	pk_backend_update_databases (self, force, &error);
+	return pk_backend_finish (self, error);
+}
+
+void
+pk_backend_refresh_cache (PkBackend *self, gboolean force)
+{
+	g_return_if_fail (self != NULL);
+
+	pk_backend_run (self, PK_STATUS_ENUM_SETUP,
+			pk_backend_refresh_cache_thread);
+}
diff --git a/backends/alpm/pk-backend-update.h b/backends/alpm/pk-backend-update.h
new file mode 100644
index 0000000..368965a
--- /dev/null
+++ b/backends/alpm/pk-backend-update.h
@@ -0,0 +1,22 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2007 Andreas Obergrusberger <tradiaz at yahoo.de>
+ * Copyright (C) 2008-2010 Valeriy Lyasotskiy <onestep at ukr.net>
+ * Copyright (C) 2010-2011 Jonathan Conder <jonno.conder 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.
+ */
diff --git a/backends/alpm/repos.list b/backends/alpm/repos.list
new file mode 100644
index 0000000..e69de29
diff --git a/docs/html/pk-matrix.html b/docs/html/pk-matrix.html
index 33f2efb..991529d 100644
--- a/docs/html/pk-matrix.html
+++ b/docs/html/pk-matrix.html
@@ -43,7 +43,7 @@
 <td><b>Cancel</b></td>
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- apt -->
 <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-good.png" alt="[yes]"/></td><!-- alpm -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- box -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- conary -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- entropy -->
@@ -203,7 +203,7 @@
 <td><b>GetRequires</b></td>
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- apt -->
 <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-good.png" alt="[yes]"/></td><!-- alpm -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- box -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- conary -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- entropy -->
@@ -363,7 +363,7 @@
 <td><b>RepoEnable</b></td>
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- apt -->
 <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-good.png" alt="[yes]"/></td><!-- alpm -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- box -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- conary -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- entropy -->
@@ -463,7 +463,7 @@
 <td><b>SearchFile</b></td>
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- apt -->
 <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-good.png" alt="[yes]"/></td><!-- alpm -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- box -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- conary -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- entropy -->
@@ -523,7 +523,7 @@
 <td><b>SimulateInstallFiles</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-bad.png" alt="[no]"/></td><!-- alpm -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- alpm -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- box -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- conary -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- entropy -->
@@ -543,7 +543,7 @@
 <td><b>SimulateInstallPackages</b></td>
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- apt -->
 <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-good.png" alt="[yes]"/></td><!-- alpm -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- box -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- conary -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- entropy -->
@@ -563,7 +563,7 @@
 <td><b>SimulateRemovePackages</b></td>
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- apt -->
 <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-good.png" alt="[yes]"/></td><!-- alpm -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- box -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- conary -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- entropy -->
@@ -583,7 +583,7 @@
 <td><b>SimulateUpdatePackages</b></td>
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- apt -->
 <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-good.png" alt="[yes]"/></td><!-- alpm -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- box -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- conary -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- entropy -->


More information about the PackageKit-commit mailing list