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

Richard Hughes hughsient at kemper.freedesktop.org
Thu Nov 6 00:40:34 PST 2008


 backends/yum/pk-backend-yum.c                  |   14 
 contrib/PackageKit.spec.in                     |   12 
 contrib/udev/Makefile.am                       |    2 
 data/Makefile.am                               |    2 
 docs/api/Makefile.am                           |    4 
 docs/api/PackageKit-docs.sgml                  |    4 
 docs/api/dbus/Makefile.am                      |    8 
 docs/html/pk-faq.html                          |    2 
 docs/html/pk-using.html                        |    2 
 lib/packagekit-glib/egg-debug.c                |    2 
 lib/packagekit-glib/pk-client.c                |  379 +++-
 lib/packagekit-qt/src/daemonproxy.h            |    2 
 lib/packagekit-qt/src/transactionproxy.h       |    2 
 src/.gitignore                                 |    2 
 src/Makefile.am                                |   20 
 src/org.freedesktop.PackageKit.Transaction.xml | 2194 +++++++++++++++++++++++++
 src/org.freedesktop.PackageKit.xml             |  380 ++++
 src/pk-backend-spawn.c                         |   51 
 src/pk-backend-spawn.h                         |    8 
 src/pk-interface-transaction.xml               | 2194 -------------------------
 src/pk-interface.xml                           |  380 ----
 src/pk-main.c                                  |    2 
 src/pk-transaction-id.c                        |    2 
 src/pk-transaction-list.c                      |    2 
 src/pk-transaction.c                           |  145 +
 tools/add-method.sh                            |    2 
 26 files changed, 3110 insertions(+), 2707 deletions(-)

New commits:
commit c88dd756b10f332c4ed2cbd2e46ef1f51afe9254
Author: Richard Hughes <richard at hughsie.com>
Date:   Thu Nov 6 08:37:57 2008 +0000

    trivially rename the interface files to be the same format as other projects

diff --git a/docs/api/Makefile.am b/docs/api/Makefile.am
index 0b785eb..8e8b035 100644
--- a/docs/api/Makefile.am
+++ b/docs/api/Makefile.am
@@ -63,8 +63,8 @@ HTML_IMAGES =						\
 # Extra SGML files that are included by $(DOC_MAIN_SGML_FILE).
 content_files =						\
 	version.xml					\
-	dbus/pk-interface.ref.xml			\
-	dbus/pk-interface-transaction.ref.xml		\
+	dbus/org.freedesktop.PackageKit.ref.xml			\
+	dbus/org.freedesktop.PackageKit.Transaction.ref.xml		\
 	$(NULL)
 
 # SGML files where gtk-doc abbrevations (#GtkWidget) are expanded
diff --git a/docs/api/PackageKit-docs.sgml b/docs/api/PackageKit-docs.sgml
index 77cbb6e..b3df91c 100644
--- a/docs/api/PackageKit-docs.sgml
+++ b/docs/api/PackageKit-docs.sgml
@@ -54,8 +54,8 @@
         This part documents the D-Bus interface used to access the PackageKit daemon.
       </para>
     </partintro>
-    <xi:include href="dbus/pk-interface.ref.xml"/>
-    <xi:include href="dbus/pk-interface-transaction.ref.xml"/>
+    <xi:include href="dbus/org.freedesktop.PackageKit.ref.xml"/>
+    <xi:include href="dbus/org.freedesktop.PackageKit.Transaction.ref.xml"/>
   </reference>
 
   <reference id="libpackagekit-gobject">
diff --git a/docs/api/dbus/Makefile.am b/docs/api/dbus/Makefile.am
index d7a221c..164a65e 100644
--- a/docs/api/dbus/Makefile.am
+++ b/docs/api/dbus/Makefile.am
@@ -1,17 +1,17 @@
 
 if ENABLE_GTK_DOC
 
-all : pk-interface.ref.xml pk-interface-transaction.ref.xml
+all : org.freedesktop.PackageKit.ref.xml org.freedesktop.PackageKit.Transaction.ref.xml
 
-pk-interface.ref.xml : $(top_srcdir)/src/pk-interface.xml $(top_srcdir)/docs/api/dbus/spec-to-docbook.xsl
+org.freedesktop.PackageKit.ref.xml : $(top_srcdir)/src/org.freedesktop.PackageKit.xml $(top_srcdir)/docs/api/dbus/spec-to-docbook.xsl
 	echo "<?xml version=\"1.0\"?>""<!DOCTYPE refentry PUBLIC \"-//OASIS//DTD DocBook XML V4.1.2//EN\" \"http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd\">" > $@
 	$(XSLTPROC) $(top_srcdir)/docs/api/dbus/spec-to-docbook.xsl $< | tail -n +2 >> $@
 
-pk-interface-transaction.ref.xml : $(top_srcdir)/src/pk-interface-transaction.xml $(top_srcdir)/docs/api/dbus/spec-to-docbook.xsl
+org.freedesktop.PackageKit.Transaction.ref.xml : $(top_srcdir)/src/org.freedesktop.PackageKit.Transaction.xml $(top_srcdir)/docs/api/dbus/spec-to-docbook.xsl
 	echo "<?xml version=\"1.0\"?>""<!DOCTYPE refentry PUBLIC \"-//OASIS//DTD DocBook XML V4.1.2//EN\" \"http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd\">" > $@
 	$(XSLTPROC) $(top_srcdir)/docs/api/dbus/spec-to-docbook.xsl $< | tail -n +2 >> $@
 
-#$(top_srcdir)/docs/api/dbus/spec-to-docbook $(top_srcdir)/src/pk-interface.xml
+#$(top_srcdir)/docs/api/dbus/spec-to-docbook $(top_srcdir)/src/org.freedesktop.PackageKit.xml
 
 endif
 
diff --git a/docs/html/pk-faq.html b/docs/html/pk-faq.html
index 33cb51c..4c0df26 100644
--- a/docs/html/pk-faq.html
+++ b/docs/html/pk-faq.html
@@ -182,7 +182,7 @@ Please see <a href="http://www.gtk.org/setuid.html">the GTK+ explanation</a> for
 <p>
 PackageKit runs a process <code>packagekitd</code> that is a daemon that runs per-system.
 The daemon lets you schedule transactions using either the raw
-<a href="http://gitweb.freedesktop.org/?p=packagekit.git;a=blob;f=src/pk-interface-transaction.xml">
+<a href="http://gitweb.freedesktop.org/?p=packagekit.git;a=blob;f=src/org.freedesktop.PackageKit.Transaction.xml">
 DBUS methods</a>, or using <a href="http://www.packagekit.org/gtk-doc/PkClient.html">libpackagekit</a>.
 The transactions are very fine grained, so an application would have to manage
 <a href="http://www.packagekit.org/gtk-doc/introduction-ideas-transactions.html">
diff --git a/docs/html/pk-using.html b/docs/html/pk-using.html
index 6ebe10c..02a0305 100644
--- a/docs/html/pk-using.html
+++ b/docs/html/pk-using.html
@@ -86,7 +86,7 @@ gobject dependency is needed, although this means you will have to
 manage the transaction_id multiplexing in any client program.
 This is not difficult, although does require more code than just using
 libpackagekit.
-The latest interface is available in the source tree or <a href="http://gitweb.freedesktop.org/?p=packagekit.git;a=blob;f=src/pk-interface.xml">on-line</a>.
+The latest interface is available in the source tree or <a href="http://gitweb.freedesktop.org/?p=packagekit.git;a=blob;f=src/org.freedesktop.PackageKit.xml">on-line</a>.
 </p>
 
 <p>Back to the <a href="index.html">main page</a></p>
diff --git a/lib/packagekit-glib/egg-debug.c b/lib/packagekit-glib/egg-debug.c
index abe5415..f18a5d1 100644
--- a/lib/packagekit-glib/egg-debug.c
+++ b/lib/packagekit-glib/egg-debug.c
@@ -146,7 +146,7 @@ pk_print_line (const gchar *func, const gchar *file, const int line, const gchar
 	pk_set_console_mode (CONSOLE_GREEN);
 	printf ("%s\n", header);
 
-	/* different colours according to the severity */
+	/* different colors according to the severity */
 	pk_set_console_mode (color);
 	printf (" - %s\n", buffer);
 	pk_set_console_mode (CONSOLE_RESET);
diff --git a/lib/packagekit-qt/src/daemonproxy.h b/lib/packagekit-qt/src/daemonproxy.h
index 67cb58f..8a46f50 100644
--- a/lib/packagekit-qt/src/daemonproxy.h
+++ b/lib/packagekit-qt/src/daemonproxy.h
@@ -1,6 +1,6 @@
 /*
  * This file was generated by dbusxml2cpp version 0.6
- * Command line was: dbusxml2cpp -c DaemonProxy -p daemonproxy.h /home/madcat/code/packagekit/src/pk-interface.xml org.freedesktop.PackageKit
+ * Command line was: dbusxml2cpp -c DaemonProxy -p daemonproxy.h /home/madcat/code/packagekit/src/org.freedesktop.PackageKit.xml org.freedesktop.PackageKit
  *
  * dbusxml2cpp is Copyright (C) 2006 Trolltech ASA. All rights reserved.
  *
diff --git a/lib/packagekit-qt/src/transactionproxy.h b/lib/packagekit-qt/src/transactionproxy.h
index 19f2627..30e36a5 100644
--- a/lib/packagekit-qt/src/transactionproxy.h
+++ b/lib/packagekit-qt/src/transactionproxy.h
@@ -1,6 +1,6 @@
 /*
  * This file was generated by dbusxml2cpp version 0.6
- * Command line was: dbusxml2cpp -c TransactionProxy -p transactionproxy.h /home/madcat/code/packagekit/src/pk-interface-transaction.xml org.freedesktop.PackageKit.Transaction
+ * Command line was: dbusxml2cpp -c TransactionProxy -p transactionproxy.h /home/madcat/code/packagekit/src/org.freedesktop.PackageKit.Transaction.xml org.freedesktop.PackageKit.Transaction
  *
  * dbusxml2cpp is Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies).
  *
diff --git a/src/.gitignore b/src/.gitignore
index a6fc053..a4507b0 100644
--- a/src/.gitignore
+++ b/src/.gitignore
@@ -3,7 +3,7 @@
 *.o
 pk-marshal.h
 pk-marshal.c
-pk-interface*.h
+org.freedesktop.PackageKit*.h
 packagekitd
 pk-self-test
 debug.log
diff --git a/src/Makefile.am b/src/Makefile.am
index 457ce91..392145c 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -153,8 +153,8 @@ endif
 BUILT_SOURCES = 					\
 	pk-marshal.c					\
 	pk-marshal.h					\
-	pk-interface.h					\
-	pk-interface-transaction.h			\
+	org.freedesktop.PackageKit.h					\
+	org.freedesktop.PackageKit.Transaction.h			\
 	$(NULL)
 
 pk-marshal.c: pk-marshal.list
@@ -164,19 +164,19 @@ pk-marshal.c: pk-marshal.list
 pk-marshal.h: pk-marshal.list
 	glib-genmarshal $< --prefix=pk_marshal --header > $@
 
-pk-interface.h: pk-interface.xml
+org.freedesktop.PackageKit.h: org.freedesktop.PackageKit.xml
 	$(LIBTOOL) --mode=execute dbus-binding-tool	\
 		--prefix=pk_engine			\
 		--mode=glib-server			\
-		--output=pk-interface.h			\
-		$(srcdir)/pk-interface.xml
+		--output=org.freedesktop.PackageKit.h			\
+		$(srcdir)/org.freedesktop.PackageKit.xml
 
-pk-interface-transaction.h: pk-interface-transaction.xml
+org.freedesktop.PackageKit.Transaction.h: org.freedesktop.PackageKit.Transaction.xml
 	$(LIBTOOL) --mode=execute dbus-binding-tool	\
 		--prefix=pk_transaction			\
 		--mode=glib-server			\
-		--output=pk-interface-transaction.h	\
-		$(srcdir)/pk-interface-transaction.xml
+		--output=org.freedesktop.PackageKit.Transaction.h	\
+		$(srcdir)/org.freedesktop.PackageKit.Transaction.xml
 
 if EGG_BUILD_TESTS
 
@@ -216,8 +216,8 @@ EXTRA_DIST =						\
 	pk-marshal.list					\
 	pk-security-polkit.c				\
 	pk-security-dummy.c				\
-	pk-interface.xml				\
-	pk-interface-transaction.xml			\
+	org.freedesktop.PackageKit.xml				\
+	org.freedesktop.PackageKit.Transaction.xml			\
 	$(NULL)
 
 clean-local:
diff --git a/src/org.freedesktop.PackageKit.Transaction.xml b/src/org.freedesktop.PackageKit.Transaction.xml
new file mode 100644
index 0000000..2448e57
--- /dev/null
+++ b/src/org.freedesktop.PackageKit.Transaction.xml
@@ -0,0 +1,2194 @@
+<!DOCTYPE node PUBLIC
+"-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
+"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd" [
+  <!ENTITY ERROR_GENERAL "org.freedesktop.PackageKit.Denied">
+]>
+<node name="/" xmlns:doc="http://www.freedesktop.org/dbus/1.0/doc.dtd">
+  <interface name="org.freedesktop.PackageKit.Transaction">
+    <doc:doc>
+      <doc:description>
+        <doc:para>
+          The transaction interface is used for interacting with individual transactions.
+        </doc:para>
+      </doc:description>
+    </doc:doc>
+
+    <!--*****************************************************************************************-->
+    <method name="SetLocale">
+      <doc:doc>
+        <doc:description>
+          <doc:para>
+            This method allows the calling session to set a system locale for
+            the package manager so that summaries and descriptions can be
+            correctly localised.
+          </doc:para>
+        </doc:description>
+      </doc:doc>
+      <arg type="s" name="code" direction="in">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              The locale code, for example <doc:tt>en_GB</doc:tt>.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+    </method>
+
+    <!--*****************************************************************************************-->
+    <method name="AcceptEula">
+      <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
+      <doc:doc>
+        <doc:description>
+          <doc:para>
+            This method allows the user to accept a end user licence agreement.
+          </doc:para>
+        </doc:description>
+        <doc:permission>Callers need the org.freedesktop.packagekit.accept-eula</doc:permission>
+      </doc:doc>
+      <arg type="s" name="eula_id" direction="in">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              A valid EULA ID
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+    </method>
+
+    <!--*****************************************************************************************-->
+    <method name="Cancel">
+      <doc:doc>
+        <doc:description>
+          <doc:para>
+            This method cancels a transaction that is already running
+          </doc:para>
+        </doc:description>
+      </doc:doc>
+    </method>
+
+    <!--*****************************************************************************************-->
+    <method name="DownloadPackages">
+      <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
+      <doc:doc>
+        <doc:description>
+          <doc:para>
+            This method downloads packages into a temporary directory.
+          </doc:para>
+        </doc:description>
+      </doc:doc>
+      <arg type="as" name="package_ids" direction="in">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              An array of package IDs.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+    </method>
+
+    <!--*****************************************************************************************-->
+    <method name="GetAllowCancel">
+      <doc:doc>
+        <doc:description>
+          <doc:para>
+            Get if cancel is allowed for the transaction
+          </doc:para>
+        </doc:description>
+      </doc:doc>
+      <arg type="b" name="allow_cancel" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              If cancel is allowed
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+    </method>
+
+    <!--*****************************************************************************************-->
+    <method name="GetCategories">
+      <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
+      <doc:doc>
+        <doc:description>
+          <doc:para>
+            This method return the collection categories
+          </doc:para>
+        </doc:description>
+          <doc:para>
+            This method typically emits
+            <literal>Categories</literal>,
+            <literal>Error</literal> and
+          </doc:para>
+      </doc:doc>
+    </method>
+
+    <!--*****************************************************************************************-->
+    <method name="GetDepends">
+      <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
+      <doc:doc>
+        <doc:description>
+          <doc:para>
+            This method returns packages that this package depends on.
+          </doc:para>
+          <doc:para>
+            This method typically emits
+            <doc:tt>Progress</doc:tt>,
+            <doc:tt>Status</doc:tt> and
+            <doc:tt>Error</doc:tt> and
+            <doc:tt>Package</doc:tt>.
+          </doc:para>
+          <doc:para>
+            <doc:tt>Package</doc:tt> enumerated types should be
+            <doc:tt>available</doc:tt> or <doc:tt>installed</doc:tt>.
+          </doc:para>
+        </doc:description>
+      </doc:doc>
+      <arg type="s" name="filter" direction="in">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              A correct filter, e.g. <doc:tt>none</doc:tt> or <doc:tt>installed;~devel</doc:tt>
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <arg type="as" name="package_ids" direction="in">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              An array of package IDs.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <arg type="b" name="recursive" direction="in">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              Either <doc:tt>true</doc:tt> or <doc:tt>false</doc:tt>. If yes then the requirements should be
+              returned for all packages returned.
+              This means if gnome-power-manager depends on NetworkManager
+              and NetworkManager depends on HAL, then GetDepends on
+              gnome-power-manager should return both HAL and NetworkManager.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+    </method>
+
+    <!--*****************************************************************************************-->
+    <method name="GetDetails">
+      <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
+      <doc:doc>
+        <doc:description>
+          <doc:para>
+            This method should return all the details about a specific
+            <doc:tt>package_id</doc:tt>.
+          </doc:para>
+          <doc:para>
+            This method typically emits
+            <doc:tt>Progress</doc:tt>,
+            <doc:tt>Status</doc:tt> and
+            <doc:tt>Error</doc:tt> and
+            <doc:tt>Details</doc:tt>.
+          </doc:para>
+        </doc:description>
+      </doc:doc>
+      <arg type="as" name="package_ids" direction="in">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              An array of package IDs.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+    </method>
+
+    <!--*****************************************************************************************-->
+    <method name="GetFiles">
+      <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
+      <doc:doc>
+        <doc:description>
+          <doc:para>
+            This method should return the file list of the <doc:tt>package_id</doc:tt>.
+          </doc:para>
+          <doc:para>
+            This method typically emits
+            <doc:tt>Progress</doc:tt>,
+            <doc:tt>Status</doc:tt> and
+            <doc:tt>Error</doc:tt> and
+            <doc:tt>Files</doc:tt>.
+          </doc:para>
+        </doc:description>
+      </doc:doc>
+      <arg type="as" name="package_ids" direction="in">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              An array of package IDs.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+    </method>
+
+    <!--*****************************************************************************************-->
+    <method name="GetOldTransactions">
+      <doc:doc>
+        <doc:description>
+          <doc:para>
+            This method allows a client to view details for old transactions.
+          </doc:para>
+        </doc:description>
+      </doc:doc>
+      <arg type="u" name="number" direction="in">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              The number of past transactions, or 0 for all known transactions.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+    </method>
+
+    <!--*****************************************************************************************-->
+    <method name="GetPackageLast">
+      <doc:doc>
+        <doc:description>
+          <doc:para>
+            This method emits the package that was last emmitted from the daemon.
+            This allows any GUI that is monitoring transactions to accurately reflect the current
+            state of the transaction at startup.
+          </doc:para>
+        </doc:description>
+      </doc:doc>
+      <arg type="s" name="package" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              The last package_id.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+    </method>
+
+    <!--*****************************************************************************************-->
+    <method name="GetPackages">
+      <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
+      <doc:doc>
+        <doc:description>
+          <doc:para>
+            This method returns all the packages without a search term.
+          </doc:para>
+          <doc:para>
+            This method typically emits
+            <doc:tt>Progress</doc:tt>,
+            <doc:tt>Error</doc:tt> and
+            <doc:tt>Package</doc:tt>.
+          </doc:para>
+          <doc:para>
+            <doc:tt>Package</doc:tt> enumerated types should be
+            <doc:tt>available</doc:tt> or <doc:tt>installed</doc:tt>.
+          </doc:para>
+        </doc:description>
+      </doc:doc>
+      <arg type="s" name="filter" direction="in">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              A correct filter, e.g. <doc:tt>none</doc:tt> or <doc:tt>installed;~devel</doc:tt>
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+    </method>
+
+    <!--*****************************************************************************************-->
+    <method name="GetProgress">
+      <doc:doc>
+        <doc:description>
+          <doc:para>
+            This method gets the progress completion of the daemon.
+          </doc:para>
+        </doc:description>
+      </doc:doc>
+      <arg type="u" name="percentage" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              The percentage complete of the whole transaction.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <arg type="u" name="subpercentage" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              The percentage complete of the individual task, for example, downloading.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <arg type="u" name="elapsed" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              The amount of time elapsed during the transaction.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <arg type="u" name="remaining" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              The estimated remaining time of the transaction, or 0 if not known.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+    </method>
+
+    <!--*****************************************************************************************-->
+    <method name="GetRepoList">
+      <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
+      <doc:doc>
+        <doc:description>
+          <doc:para>
+            This method returns the list of repositories used in the system.
+          </doc:para>
+          <doc:para>
+            This method should emit <doc:tt>RepoDetail</doc:tt>.
+          </doc:para>
+        </doc:description>
+      </doc:doc>
+      <arg type="s" name="filter" direction="in">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              A correct filter, e.g. <doc:tt>none</doc:tt> or <doc:tt>installed;~devel</doc:tt>
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+    </method>
+
+    <!--*****************************************************************************************-->
+    <method name="GetRequires">
+      <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
+      <doc:doc>
+        <doc:description>
+          <doc:para>
+            This method returns packages that depend on this package.
+            This is useful to know, as if <doc:tt>package_id</doc:tt> is being
+            removed, we can warn the user what else would be removed.
+          </doc:para>
+          <doc:para>
+            This method typically emits
+            <doc:tt>Progress</doc:tt>,
+            <doc:tt>Status</doc:tt> and
+            <doc:tt>Error</doc:tt> and
+            <doc:tt>Package</doc:tt>.
+          </doc:para>
+          <doc:para>
+            <doc:tt>Package</doc:tt> enumerated types should be
+            <doc:tt>available</doc:tt> or <doc:tt>installed</doc:tt>.
+          </doc:para>
+        </doc:description>
+      </doc:doc>
+      <arg type="s" name="filter" direction="in">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              A correct filter, e.g. <doc:tt>none</doc:tt> or <doc:tt>installed;~devel</doc:tt>
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <arg type="as" name="package_ids" direction="in">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              An array of package IDs.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <arg type="b" name="recursive" direction="in">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              Either <doc:tt>true</doc:tt> or <doc:tt>false</doc:tt>. If yes then the requirements should be
+              returned for all packages returned.
+              This means if gnome-power-manager depends on NetworkManager
+              and NetworkManager depends on HAL, then GetRequires on
+              HAL should return both gnome-power-manager and NetworkManager.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+    </method>
+
+    <!--*****************************************************************************************-->
+    <method name="GetRole">
+      <doc:doc>
+        <doc:description>
+          <doc:para>
+            This method returns the current role of the transaction.
+          </doc:para>
+        </doc:description>
+      </doc:doc>
+      <arg type="s" name="role" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              The PkRoleEnum in text form.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <arg type="s" name="text" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              The original search terms or package names that are used to start the transaction.
+              Multiple entries are split using <doc:tt>;</doc:tt>.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+    </method>
+
+    <!--*****************************************************************************************-->
+    <method name="GetStatus">
+      <doc:doc>
+        <doc:description>
+          <doc:para>
+            This method returns the status of the transaction.
+          </doc:para>
+        </doc:description>
+      </doc:doc>
+      <arg type="s" name="status" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              The PkStatusEnum in string form.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+    </method>
+
+    <!--*****************************************************************************************-->
+    <method name="GetUpdateDetail">
+      <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
+      <doc:doc>
+        <doc:description>
+          <doc:para>
+            This method returns details about a specific update.
+          </doc:para>
+          <doc:para>
+            This method typically emits
+            <doc:tt>UpdateDetail</doc:tt> and
+            <doc:tt>Error</doc:tt>
+          </doc:para>
+        </doc:description>
+      </doc:doc>
+      <arg type="as" name="package_ids" direction="in">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              An array of package IDs.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+    </method>
+
+    <!--*****************************************************************************************-->
+    <method name="GetUpdates">
+      <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
+      <doc:doc>
+        <doc:description>
+          <doc:para>
+            This method should return a list of packages that are installed and are upgradable.
+            It should only return the newest update for each installed package.
+          </doc:para>
+          <doc:para>
+            This method typically emits
+            <doc:tt>Progress</doc:tt>,
+            <doc:tt>Error</doc:tt> and
+            <doc:tt>Package</doc:tt>.
+          </doc:para>
+          <doc:para>
+            <doc:tt>Package</doc:tt> enumerated types should be
+            <doc:tt>blocked</doc:tt>,
+            <doc:tt>low</doc:tt>,
+            <doc:tt>normal</doc:tt>,
+            <doc:tt>important</doc:tt> or
+            <doc:tt>security</doc:tt>.
+          </doc:para>
+          <doc:para>
+            The status <doc:tt>blocked</doc:tt> signifies the package cannot be
+            updated, probably due to other dependencies not being met.
+            This type allows the GUI tools to show to the user that an update
+            exists, but cannot be installed.
+            The reason for it not being installed should be put into the update
+            description when doing GetUpdateDetail.
+          </doc:para>
+          <doc:para>
+            A filter such as <doc:tt>basename</doc:tt> or <doc:tt>gui</doc:tt>
+            is also useful if you want to do filtering on the method to only show
+            the main packages rather than the complete list.
+            The complete list is available but specifying <doc:tt>none</doc:tt>
+            as the filter.
+            Using no filter which may be useful in advanced tools or when using
+            libpackagekit and searching for an update of a specific name.
+            Other filter types may be present, but can be safely ignored of the
+            backend does not support them.
+          </doc:para>
+        </doc:description>
+      </doc:doc>
+      <arg type="s" name="filter" direction="in">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              A correct filter, e.g. <doc:tt>none</doc:tt> or <doc:tt>installed;~devel</doc:tt>
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+    </method>
+
+    <!--*****************************************************************************************-->
+    <method name="GetDistroUpgrades">
+      <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
+      <doc:doc>
+        <doc:description>
+          <doc:para>
+            This method should return a list of distribution upgrades that are
+            available.
+            It should not return updates, only major upgrades.
+          </doc:para>
+          <doc:para>
+            This method typically emits
+            <doc:tt>DistroUpgrade</doc:tt>,
+            <doc:tt>Error</doc:tt> and
+          </doc:para>
+        </doc:description>
+      </doc:doc>
+    </method>
+
+    <!--*****************************************************************************************-->
+    <method name="InstallFiles">
+      <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
+      <doc:doc>
+        <doc:description>
+          <doc:para>
+            This method installs local package files onto the local system.
+          </doc:para>
+          <doc:para>
+            The installer should always install extra dependant packages automatically.
+          </doc:para>
+          <doc:para>
+            This method typically emits
+            <doc:tt>Progress</doc:tt>,
+            <doc:tt>Status</doc:tt> and
+            <doc:tt>Error</doc:tt> and
+            <doc:tt>Package</doc:tt>.
+          </doc:para>
+          <doc:para>
+            <doc:tt>Package</doc:tt> enumerated types should be
+            <doc:tt>downloading</doc:tt>,
+            <doc:tt>updating</doc:tt>,
+            <doc:tt>installing</doc:tt> or
+            <doc:tt>removing</doc:tt>.
+          </doc:para>
+        </doc:description>
+        <doc:permission>Callers need the org.freedesktop.packagekit.localinstall-untrusted</doc:permission>
+      </doc:doc>
+      <arg type="b" name="trusted" direction="in">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              If the package is trusted, i.e. if it has a pre-trusted security signature.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <arg type="as" name="full_paths" direction="in">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              An array of full path and filenames to packages.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+    </method>
+
+    <!--*****************************************************************************************-->
+    <method name="InstallPackages">
+      <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
+      <doc:doc>
+        <doc:description>
+          <doc:para>
+            This method installs new packages on the local system.
+          </doc:para>
+          <doc:para>
+            The installer should always install extra packages automatically
+            as the use could call GetDepends prior to the install if a confirmation
+            is required in the UI.
+          </doc:para>
+          <doc:para>
+            This method typically emits
+            <doc:tt>Progress</doc:tt>,
+            <doc:tt>Status</doc:tt> and
+            <doc:tt>Error</doc:tt> and
+            <doc:tt>Package</doc:tt>.
+          </doc:para>
+          <doc:para>
+            <doc:tt>Package</doc:tt> enumerated types should be
+            <doc:tt>downloading</doc:tt>,
+            <doc:tt>updating</doc:tt>,
+            <doc:tt>installing</doc:tt> or
+            <doc:tt>removing</doc:tt>.
+          </doc:para>
+        </doc:description>
+        <doc:permission>Callers need the org.freedesktop.packagekit.install</doc:permission>
+      </doc:doc>
+      <arg type="as" name="package_ids" direction="in">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              An array of package IDs.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+    </method>
+
+    <!--*****************************************************************************************-->
+    <method name="InstallSignature">
+      <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
+      <doc:doc>
+        <doc:description>
+          <doc:para>
+            This method allows us to install new security keys.
+          </doc:para>
+        </doc:description>
+        <doc:permission>Callers need the org.freedesktop.packagekit.install-signature</doc:permission>
+      </doc:doc>
+      <arg type="s" name="sig_type" direction="in">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              A key type, e.g. <doc:tt>gpg</doc:tt>
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <arg type="s" name="key_id" direction="in">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              A key ID, e.g. <doc:tt>BB7576AC</doc:tt>
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <arg type="s" name="package_id" direction="in">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              A PackageID for the package that the user is trying to install
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+    </method>
+
+    <!--*****************************************************************************************-->
+    <method name="IsCallerActive">
+      <doc:doc>
+        <doc:description>
+          <doc:para>
+            This method allows us to find if the original caller of the method is still connected
+            to the session bus.
+            This is usually an indication that the client can handle it's own error handling and
+            EULA callbacks rather than another program taking over.
+          </doc:para>
+        </doc:description>
+      </doc:doc>
+      <arg type="b" name="is_active" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              If the client is still connected.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+    </method>
+
+    <!--*****************************************************************************************-->
+    <method name="RefreshCache">
+      <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
+      <doc:doc>
+        <doc:description>
+          <doc:para>
+            This method should fetch updated meta-data for all enabled repositories.
+            This operation should be only scheduled when the computer is idle as
+            the network connection will be very active, and will the computer will
+            have have non-trivial levels of hard disk and processor activity.
+            For these reasons, it should not be done automatically when on battery
+            power.
+          </doc:para>
+          <doc:para>
+            This method typically emits
+            <doc:tt>Progress</doc:tt>,
+            <doc:tt>Error</doc:tt> and
+            <doc:tt>Package</doc:tt>.
+          </doc:para>
+        </doc:description>
+        <doc:permission>Callers need the org.freedesktop.packagekit.refresh-cache</doc:permission>
+      </doc:doc>
+      <arg type="b" name="force" direction="in">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              If the caches should be cleaned and reloaded even if there is valid, up to date data.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+    </method>
+
+    <!--*****************************************************************************************-->
+    <method name="RemovePackages">
+      <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
+      <doc:doc>
+        <doc:description>
+          <doc:para>
+            This method removes packages from the local system.
+          </doc:para>
+          <doc:para>
+            This method typically emits
+            <doc:tt>Progress</doc:tt>,
+            <doc:tt>Status</doc:tt> and
+            <doc:tt>Error</doc:tt> and
+            <doc:tt>Package</doc:tt>.
+          </doc:para>
+          <doc:para>
+            <doc:tt>Package</doc:tt> enumerated types should be
+            <doc:tt>downloading</doc:tt>,
+            <doc:tt>updating</doc:tt>,
+            <doc:tt>installing</doc:tt> or
+            <doc:tt>removing</doc:tt>.
+          </doc:para>
+        </doc:description>
+        <doc:permission>Callers need the org.freedesktop.packagekit.remove</doc:permission>
+      </doc:doc>
+      <arg type="as" name="package_ids" direction="in">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              An array of package IDs.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <arg type="b" name="allow_deps" direction="in">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              Either <doc:tt>true</doc:tt> or <doc:tt>false</doc:tt>.
+              If <doc:tt>true</doc:tt> allow other packages to be removed with the package,
+              but <doc:tt>false</doc:tt> should cause the script to abort if other packages
+              are dependant on the package.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <arg type="b" name="autoremove" direction="in">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              Either <doc:tt>true</doc:tt> or <doc:tt>false</doc:tt>.
+              This option is only really interesting on embedded devices with a limited amount of
+              flash storage.
+              It suggests to the packagekit backend that dependencies installed at the same time as
+              the package should also be removed if they are not required by anything else.
+              For instance, if you install OpenOffice, it might download libneon as a dependency.
+              When <doc:tt>auto_remove</doc:tt> is set to true, and you remove OpenOffice then
+              libneon will also get removed automatically.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+    </method>
+
+    <!--*****************************************************************************************-->
+    <method name="RepoEnable">
+      <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
+      <doc:doc>
+        <doc:description>
+          <doc:para>
+            This method enables the repository specified.
+          </doc:para>
+        </doc:description>
+        <doc:permission>Callers need the org.freedesktop.packagekit.repo-change</doc:permission>
+      </doc:doc>
+      <arg type="s" name="repo_id" direction="in">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              A repository identifier, e.g. <doc:tt>fedora-development-debuginfo</doc:tt>
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <arg type="b" name="enabled" direction="in">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              <doc:tt>true</doc:tt> if enabled, <doc:tt>false</doc:tt> if disabled.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+    </method>
+
+    <!--*****************************************************************************************-->
+    <method name="RepoSetData">
+      <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
+      <doc:doc>
+        <doc:description>
+          <doc:para>
+            This method allows arbitary data to be passed to the repository handler.
+          </doc:para>
+        </doc:description>
+        <doc:permission>Callers need the org.freedesktop.packagekit.repo-change</doc:permission>
+      </doc:doc>
+      <arg type="s" name="repo_id" direction="in">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              A repository identifier, e.g. <doc:tt>fedora-development-debuginfo</doc:tt>
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <arg type="s" name="parameter" direction="in">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              The backend specific value, e.g. <doc:tt>set-download-url</doc:tt>.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <arg type="s" name="value" direction="in">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              The backend specific value, e.g. <doc:tt>http://foo.bar.org/baz</doc:tt>.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+    </method>
+
+    <!--*****************************************************************************************-->
+    <method name="Resolve">
+      <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
+      <doc:doc>
+        <doc:description>
+          <doc:para>
+            This method turns a single package name into a package_id suitable for the
+            other methods.
+          </doc:para>
+          <doc:para>
+            This method typically emits
+            <doc:tt>Error</doc:tt> and
+            <doc:tt>Package</doc:tt>.
+          </doc:para>
+          <doc:para>
+            <doc:tt>Package</doc:tt> enumerated types should be
+            <doc:tt>available</doc:tt> or <doc:tt>installed</doc:tt>.
+          </doc:para>
+        </doc:description>
+      </doc:doc>
+      <arg type="s" name="filter" direction="in">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              A correct filter, e.g. <doc:tt>none</doc:tt> or <doc:tt>installed;~devel</doc:tt>
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <arg type="as" name="package" direction="in">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              An array of package names, e.g. <doc:tt>scribus-clipart</doc:tt>.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+    </method>
+
+    <!--*****************************************************************************************-->
+    <method name="Rollback">
+      <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
+      <doc:doc>
+        <doc:description>
+          <doc:para>
+            This method rolls back the package database to a previous transaction.
+          </doc:para>
+        </doc:description>
+        <doc:permission>Callers need the org.freedesktop.packagekit.rollback</doc:permission>
+      </doc:doc>
+      <arg type="s" name="transaction_id" direction="in">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              A valid transaction ID.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+    </method>
+
+    <!--*****************************************************************************************-->
+    <method name="SearchDetails">
+      <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
+      <doc:doc>
+        <doc:description>
+          <doc:para>
+            This method allows deeper searching than SearchName().
+          </doc:para>
+          <doc:para>
+            Do not refresh the package cache. This should be fast.
+            This is very similar to search-name.
+            This should search as much data as possible, including, if possible
+            repo names, package summaries, descriptions and URLs.
+          </doc:para>
+          <doc:para>
+            This method typically emits
+            <doc:tt>Progress</doc:tt>,
+            <doc:tt>Error</doc:tt> and
+            <doc:tt>Package</doc:tt>.
+          </doc:para>
+          <doc:para>
+            <doc:tt>Package</doc:tt> enumerated types should be
+            <doc:tt>available</doc:tt> or <doc:tt>installed</doc:tt>.
+          </doc:para>        </doc:description>
+      </doc:doc>
+      <arg type="s" name="filter" direction="in">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              A correct filter, e.g. <doc:tt>none</doc:tt> or <doc:tt>installed;~devel</doc:tt>
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <arg type="s" name="search" direction="in">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              A single word search term with no wildcard chars.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+    </method>
+
+    <!--*****************************************************************************************-->
+    <method name="SearchFile">
+      <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
+      <doc:doc>
+        <doc:description>
+          <doc:para>
+            This method searches for files on the local system and files in available packages.
+          </doc:para>
+          <doc:para>
+            This should search for files.
+            This should allow an application to find out what package owns
+            a file on the system.
+          </doc:para>
+          <doc:para>
+            This method typically emits
+            <doc:tt>Progress</doc:tt>,
+            <doc:tt>Error</doc:tt> and
+            <doc:tt>Package</doc:tt>.
+          </doc:para>
+          <doc:para>
+            <doc:tt>Package</doc:tt> enumerated types should be
+            <doc:tt>available</doc:tt> or <doc:tt>installed</doc:tt>.
+          </doc:para>        </doc:description>
+      </doc:doc>
+      <arg type="s" name="filter" direction="in">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              A correct filter, e.g. <doc:tt>none</doc:tt> or <doc:tt>installed;~devel</doc:tt>
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <arg type="s" name="search" direction="in">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              A single local path on the system
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+    </method>
+
+    <!--*****************************************************************************************-->
+    <method name="SearchGroup">
+      <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
+      <doc:doc>
+        <doc:description>
+          <doc:para>
+            This method returns packages from a given group enumerated type.
+          </doc:para>
+          <doc:para>
+            Do not refresh the package cache. This should be fast.
+          </doc:para>
+          <doc:para>
+            This method typically emits
+            <doc:tt>Progress</doc:tt>,
+            <doc:tt>Error</doc:tt> and
+            <doc:tt>Package</doc:tt>.
+          </doc:para>
+          <doc:para>
+            <doc:tt>Package</doc:tt> enumerated types should be
+            <doc:tt>available</doc:tt> or <doc:tt>installed</doc:tt>.
+          </doc:para>
+        </doc:description>
+      </doc:doc>
+      <arg type="s" name="filter" direction="in">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              A correct filter, e.g. <doc:tt>none</doc:tt> or <doc:tt>installed;~devel</doc:tt>
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <arg type="s" name="search" direction="in">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              An enumerated group_type, or <doc:tt>unknown</doc:tt>
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+    </method>
+
+    <!--*****************************************************************************************-->
+    <method name="SearchName">
+      <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
+      <doc:doc>
+        <doc:description>
+          <doc:para>
+            This method searches the package database by package name.
+          </doc:para>
+          <doc:para>
+            Do not refresh the package cache. This should be fast.
+          </doc:para>
+          <doc:para>
+            Try to emit <doc:tt>installed</doc:tt> before
+            <doc:tt>available</doc:tt> packages first, as it allows the client
+            program to perform the GUI filtering and matching whilst the daemon is
+            running the transaction.
+          </doc:para>
+          <doc:para>
+            If the backend includes <doc:tt>installed</doc:tt> and
+            <doc:tt>available</doc:tt> versions of the same package when searching
+            then the <doc:tt>available</doc:tt> version will have to be filtered
+            in the backend.
+          </doc:para>
+          <doc:para>
+            The search query in the backend should not be case sensitive, and
+            should not be sensitive to <doc:tt>_</doc:tt> or <doc:tt>-</doc:tt>.
+          </doc:para>
+          <doc:para>
+            The search methods should return all results in all repositories.
+            This may mean that multiple versions of package are returned.
+            If this is not what is wanted by the client program, then the
+            <doc:tt>newest</doc:tt> filter should be used.
+          </doc:para>
+          <doc:para>
+            This method typically emits
+            <doc:tt>Progress</doc:tt>,
+            <doc:tt>Error</doc:tt> and
+            <doc:tt>Package</doc:tt>.
+          </doc:para>
+          <doc:para>
+            <doc:tt>Package</doc:tt> enumerated types should be
+            <doc:tt>available</doc:tt> or <doc:tt>installed</doc:tt>.
+          </doc:para>
+        </doc:description>
+      </doc:doc>
+      <arg type="s" name="filter" direction="in">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              A correct filter, e.g. <doc:tt>none</doc:tt> or <doc:tt>installed;~devel</doc:tt>
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <arg type="s" name="search" direction="in">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              A single word search term with no wildcard chars
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+    </method>
+
+    <!--*****************************************************************************************-->
+    <method name="UpdatePackages">
+      <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
+      <doc:doc>
+        <doc:description>
+          <doc:para>
+            This method updates existing packages on the local system.
+          </doc:para>
+          <doc:para>
+            The installer should always update extra packages automatically to fulfil dependencies.
+          </doc:para>
+          <doc:para>
+            This should allow an application to find out what package owns a file on the system.
+          </doc:para>
+          <doc:para>
+            This method typically emits
+            <doc:tt>Progress</doc:tt>,
+            <doc:tt>Status</doc:tt> and
+            <doc:tt>Error</doc:tt> and
+            <doc:tt>Package</doc:tt>.
+          </doc:para>
+        </doc:description>
+        <doc:permission>Callers need the org.freedesktop.packagekit.update-package</doc:permission>
+      </doc:doc>
+      <arg type="as" name="package_ids" direction="in">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              An array of package IDs.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+    </method>
+
+    <!--*****************************************************************************************-->
+    <method name="UpdateSystem">
+      <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
+      <doc:doc>
+        <doc:description>
+          <doc:para>
+            This method updates all packages on the system to thier newest versions.
+          </doc:para>
+          <doc:para>
+            The installer should update all the updateable packages on the system,
+            including automatically installing any new packages that are needed for
+            dependancies.
+          </doc:para>
+        </doc:description>
+          <doc:para>
+            This method typically emits
+            <doc:tt>Progress</doc:tt>,
+            <doc:tt>Error</doc:tt> and
+            <doc:tt>RequireRestart</doc:tt> and
+            <doc:tt>Package</doc:tt>.
+          </doc:para>
+          <doc:para>
+            <doc:tt>Package</doc:tt> enumerated types should be
+            <doc:tt>downloading</doc:tt>,
+            <doc:tt>updating</doc:tt>,
+            <doc:tt>installing</doc:tt> or
+            <doc:tt>removing</doc:tt>.
+          </doc:para>
+        <doc:permission>Callers need the org.freedesktop.packagekit.update-system</doc:permission>
+      </doc:doc>
+    </method>
+
+    <!--*****************************************************************************************-->
+    <method name="WhatProvides">
+      <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
+      <doc:doc>
+        <doc:description>
+          <doc:para>
+            This method returns packages that provide the supplied attributes.
+            This method is useful for finding out what package(s) provide a modalias
+            or GStreamer codec string.
+          </doc:para>
+          <doc:para>
+            This method typically emits
+            <doc:tt>Progress</doc:tt>,
+            <doc:tt>Status</doc:tt> and
+            <doc:tt>Error</doc:tt> and
+            <doc:tt>Package</doc:tt>.
+          </doc:para>
+          <doc:para>
+            <doc:tt>Package</doc:tt> enumerated types should be
+            <doc:tt>available</doc:tt> or <doc:tt>installed</doc:tt>.
+          </doc:para>
+        </doc:description>
+      </doc:doc>
+      <arg type="s" name="filter" direction="in">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              A correct filter, e.g. <doc:tt>none</doc:tt> or <doc:tt>installed;~devel</doc:tt>
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <arg type="s" name="type" direction="in">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              A PkProvideType, e.g. <doc:tt>PK_PROVIDES_ENUM_CODEC</doc:tt>.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <arg type="s" name="search" direction="in">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              The data to send to the backend to get the packages.
+              Note: This is backend specific.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+    </method>
+
+    <!--*****************************************************************************************-->
+    <signal name="AllowCancel">
+      <doc:doc>
+        <doc:description>
+          <doc:para>
+            This signal is sent when the backend decides that the transaction can no longer be
+            cancelled, or is now able to be cancelled.
+          </doc:para>
+        </doc:description>
+      </doc:doc>
+      <arg type="b" name="allow_cancel" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              If the backend is in a cancelable state.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+    </signal>
+
+    <!--*****************************************************************************************-->
+    <signal name="CallerActiveChanged">
+      <doc:doc>
+        <doc:description>
+          <doc:para>
+            This signal is emitted when the session program that started the transaction exits.
+          </doc:para>
+        </doc:description>
+      </doc:doc>
+      <arg type="b" name="is_active" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              If the caller is active, usually FALSE.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+    </signal>
+
+    <!--*****************************************************************************************-->
+    <signal name="Category">
+      <doc:doc>
+        <doc:description>
+          <doc:para>
+            This signal send information about a collection category
+          </doc:para>
+        </doc:description>
+      </doc:doc>
+      <arg type="s" name="parent_id" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              The parent identifier, e.g. <doc:tt>applications</doc:tt>.
+              If the category is a root entry, use a blank parent.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <arg type="s" name="cat_id" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              The category identifier, e.g. <doc:tt>applications;system-tools</doc:tt>.
+              The identifier does not have to be related to the <doc:tt>parent_id</doc:tt>
+              in any way.
+              A menu tree is made from multiple Category signals.
+              The tree does not have any depth or bredth limits, although it should be kept
+              to less than about 100 entries as this will be shown to the user in a menu.
+            </doc:para>
+            <doc:para>
+              The <doc:tt>cat_id</doc:tt> will be sent as a parameter to <doc:tt>SearchGroup</doc:tt>
+              so you may have to prefix or otherwise identify the ID to not confuse the search method.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <arg type="s" name="name" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              The localised name of the category, e.g. <doc:tt>System Tools</doc:tt>.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <arg type="s" name="summary" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              The localised category summary, e.g. <doc:tt>Tools for mangaing system state</doc:tt>.
+              This is not normally shown in the menus, but may be shown in helper popups.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <arg type="s" name="icon" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              The icon name for the category, e.g. <doc:tt>server-cfg</doc:tt>.
+              If the icon is not known, then it should be set to <doc:tt>image-missing</doc:tt>.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+    </signal>
+
+    <!--*****************************************************************************************-->
+    <signal name="Details">
+      <doc:doc>
+        <doc:description>
+          <doc:para>
+            This signal allows the backend to convey more details about the package.
+          </doc:para>
+        </doc:description>
+      </doc:doc>
+      <arg type="s" name="package_id" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              The package ID
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <arg type="s" name="license" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              The license string, e.g. <doc:tt>GPLv2+</doc:tt> or <doc:tt>BSD and (MPLv1.1 or GPLv2+)</doc:tt>.
+            </doc:para>
+            <doc:para>
+              More details about the correct way to format licensing strings can be found on the
+              <doc:ulink url="http://fedoraproject.org/wiki/Packaging/LicensingGuidelines">Fedora packaging wiki</doc:ulink>.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <arg type="s" name="group" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              The enumerated package group description
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <arg type="s" name="detail" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              The multi-line package description.
+              NOTE: Tabs may have to be stripped from the description to avoid being split.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <arg type="s" name="url" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              The upstream project homepage
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <arg type="t" name="size" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              The size of the package in bytes. This should be the size of the entire package file,
+              not the size of the files installed on the system.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+    </signal>
+
+    <!--*****************************************************************************************-->
+    <signal name="ErrorCode">
+      <doc:doc>
+        <doc:description>
+          <doc:para>
+            This signal is used to report errors back to the session program.
+          </doc:para>
+          <doc:para>
+            Errors should only be send on fatal abort.
+          </doc:para>
+        </doc:description>
+      </doc:doc>
+      <arg type="s" name="code" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              Enumerated type, e.g. <doc:tt>no-network</doc:tt>.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <arg type="s" name="details" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              Long description or error, e.g. <doc:tt>failed to connect to mytry.xml</doc:tt>
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+    </signal>
+
+    <!--*****************************************************************************************-->
+    <signal name="Files">
+      <doc:doc>
+        <doc:description>
+          <doc:para>
+            This signal is used to push file lists from the backend to the session.
+          </doc:para>
+        </doc:description>
+      </doc:doc>
+      <arg type="s" name="package_id" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              The Package ID that called the method.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <arg type="s" name="file_list" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              The file list, with each file seporated with <doc:tt>;</doc:tt>.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+    </signal>
+
+    <!--*****************************************************************************************-->
+    <signal name="Finished">
+      <doc:doc>
+        <doc:description>
+          <doc:para>
+            This signal is used to signal that the transaction has finished.
+          </doc:para>
+        </doc:description>
+      </doc:doc>
+      <arg type="s" name="exit" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              The PkExitEnum describing the exit status of the transaction.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <arg type="u" name="runtime" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              The amount of time in milliseconds that the transaction ran for.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+    </signal>
+
+    <!--*****************************************************************************************-->
+    <signal name="Message">
+      <doc:doc>
+        <doc:description>
+          <doc:para>
+            This signal is sent when the backend wants to send a message to the session.
+          </doc:para>
+          <doc:para>
+            This allows the backend to queue up a message to be shown after the transaction has
+            completed.
+          </doc:para>
+        </doc:description>
+      </doc:doc>
+      <arg type="s" name="type" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              One of <doc:tt>warning</doc:tt>, <doc:tt>notice</doc:tt>, or
+              <doc:tt>daemon</doc:tt>.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <arg type="s" name="details" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              Required details about the message, non-localised.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+    </signal>
+
+    <!--*****************************************************************************************-->
+    <signal name="Package">
+      <doc:doc>
+        <doc:description>
+          <doc:para>
+            This signal allows the backend to communicate packages to the session.
+          </doc:para>
+          <doc:para>
+            If updating, as packages are updated then emit them to the screen.
+            This allows a summary to be presented after the transaction.
+          </doc:para>
+          <doc:para>
+            When returning results from a search always return
+            <doc:tt>installed</doc:tt> before <doc:tt>available</doc:tt> for
+            the same package name.
+          </doc:para>
+        </doc:description>
+      </doc:doc>
+      <arg type="s" name="info" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              A valid <doc:tt>info</doc:tt> string enumerated type
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <arg type="s" name="package_id" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              A valid package ID string with as much data as known
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <arg type="s" name="summary" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              The one line package summary, e.g. Clipart for OpenOffice
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+    </signal>
+
+    <!--*****************************************************************************************-->
+    <signal name="ProgressChanged">
+      <doc:doc>
+        <doc:description>
+          <doc:para>
+            This signal describes the completion of the transaction.
+          </doc:para>
+          <doc:para>
+            This is optional.
+            Backends should send the percentage fields to 101 if the amount complete
+            cannot be calculated.
+          </doc:para>
+        </doc:description>
+      </doc:doc>
+      <arg type="u" name="percentage" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              The percentage complete of the whole transaction.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <arg type="u" name="subpercentage" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              The percentage complete of the individual task, for example, downloading.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <arg type="u" name="elapsed" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              The amount of time in seconds this transaction has been in the
+              running state
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <arg type="u" name="remaining" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              The amount of time in seconds this transaction will take to
+              complete. Zero is sent for unknown.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+    </signal>
+
+    <!--*****************************************************************************************-->
+    <signal name="RepoDetail">
+      <doc:doc>
+        <doc:description>
+          <doc:para>
+            This signal describes a repository on the system.
+          </doc:para>
+        </doc:description>
+      </doc:doc>
+      <arg type="s" name="repo_id" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              The repository ID.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <arg type="s" name="description" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              A description of the repository.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <arg type="b" name="enabled" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              If the repository is enabled and in use.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+    </signal>
+
+    <!--*****************************************************************************************-->
+    <signal name="RepoSignatureRequired">
+      <doc:doc>
+        <doc:description>
+          <doc:para>
+            This signal is emitted when a transaction is not possible due to a missing security
+            certificate.
+          </doc:para>
+          <doc:para>
+            Some backends support repositories which use a cryptographic
+            signature, such as GPG. If a package cannot be installed
+            because it is signed with a key that has not been verified,
+            this signal is generated so the user can choose to accept or
+            decline the key.
+          </doc:para>
+          <doc:para>
+            This signal includes information that can be used to verify
+            that the key should be trusted, such as a URL for the company
+            or person who owns the key, the key's ID, the userid of
+            the key creator, and the date the key was generated.
+          </doc:para>
+        </doc:description>
+      </doc:doc>
+      <arg type="s" name="package_id" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              A package ID for the package that is trying to be installed
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <arg type="s" name="repository_name" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              The name of the repository associated with the provided key.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <arg type="s" name="key_url" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              The URL provided with the key.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <arg type="s" name="key_userid" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              The user id associated with the key.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <arg type="s" name="key_id" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              A unique identifier for the key.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <arg type="s" name="key_fingerprint" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              The hashed fingerprint of the key.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <arg type="s" name="key_timestamp" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              The date the key was created.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <arg type="s" name="type" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              The type of signature used. <doc:tt>gpg</doc:tt>, for example.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+    </signal>
+
+    <!--*****************************************************************************************-->
+    <signal name="EulaRequired">
+      <doc:doc>
+        <doc:description>
+          <doc:para>
+            This signal is emitted when a transaction is not possible due to a EULA that needs to
+            be agreed to at install time.
+          </doc:para>
+          <doc:para>
+            Some backends support EULAs, which have to be agreed to before the install can proceed.
+          </doc:para>
+        </doc:description>
+      </doc:doc>
+      <arg type="s" name="eula_id" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              The <doc:tt>eula_id</doc:tt> which identifies the EULA - this is provided
+              so that if a specific EULA has previously agreed to a EULA from Acme Corp it is
+              not asked again.
+              An example <doc:tt>eula_id</doc:tt>'s is <doc:tt>vmware5_single_user</doc:tt>.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <arg type="s" name="package_id" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              A package ID for the package that is trying to be installed.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <arg type="s" name="vendor_name" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              The vendor that is providing the EULA.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <arg type="s" name="license_agreement" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              The full text EULA.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+    </signal>
+
+    <!--*****************************************************************************************-->
+    <signal name="RequireRestart">
+      <doc:doc>
+        <doc:description>
+          <doc:para>
+            This signal is sent when the session program should notify the user that a restart is
+            required.
+          </doc:para>
+          <doc:para>
+            This is optional, but highly recommended.
+          </doc:para>
+          <doc:para>
+            This can be sent as many times as needed by the backend script.
+            PackageKit will always choose the 'worst' method in the UI notification.
+          </doc:para>
+        </doc:description>
+      </doc:doc>
+      <arg type="s" name="type" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              One of <doc:tt>system</doc:tt>, <doc:tt>application</doc:tt> or
+              <doc:tt>session</doc:tt>.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <arg type="s" name="details" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              Optional details about the restart
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+    </signal>
+
+    <!--*****************************************************************************************-->
+    <signal name="StatusChanged">
+      <doc:doc>
+        <doc:description>
+          <doc:para>
+            This signal is sent when the status of the transaction has changed.
+          </doc:para>
+          <doc:para>
+            This is optional, but highly recommended.
+            It gives the GUI tools a chance to show a different icon to show what stage the
+            transaction is in, for instance, a downloading icon can be shown whilst in the
+            <doc:tt>download</doc:tt> state.
+          </doc:para>
+        </doc:description>
+      </doc:doc>
+      <arg type="s" name="status" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              One of <doc:tt>download</doc:tt>, <doc:tt>install</doc:tt>,
+              <doc:tt>update</doc:tt> or <doc:tt>remove</doc:tt>.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+    </signal>
+
+    <!--*****************************************************************************************-->
+    <signal name="Transaction">
+      <doc:doc>
+        <doc:description>
+          <doc:para>
+            This signal is sent when more details are required about a specific transaction.
+          </doc:para>
+        </doc:description>
+      </doc:doc>
+      <arg type="s" name="old_tid" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              The transaction ID of the old transaction.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <arg type="s" name="timespec" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              The timespec of the old transaction in ISO8601 format.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <arg type="b" name="succeeded" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              If the transaction succeeded.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <arg type="s" name="role" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              The role enumerated type.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <arg type="u" name="duration" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              The duration of the transaction in milliseconds.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <arg type="s" name="data" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              Any data associated with the transaction.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+    </signal>
+
+    <!--*****************************************************************************************-->
+    <signal name="UpdateDetail">
+      <doc:doc>
+        <doc:description>
+          <doc:para>
+            This signal is sent when more details are required about a specific update.
+          </doc:para>
+        </doc:description>
+      </doc:doc>
+      <arg type="s" name="package_id" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              The package ID
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <arg type="s" name="updates" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              A list of package_id's that are to be updated, seporated by <doc:tt>&amp;</doc:tt>.
+              This odd delimited was chosen as <doc:tt>\t</doc:tt> is already being used in the
+              spawned backends, and <doc:tt>&amp;</doc:tt> is a banned character in a package_id.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <arg type="s" name="obsoletes" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              A list of package_id's that are to be obsoleted, separated by <doc:tt>&amp;</doc:tt>
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <arg type="s" name="vendor_url" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              A URL with more details on the update, e.g. a page with more
+              information on the update.
+              The format of this command should be
+              <doc:tt>http://www.foo.org/page.html?4567;Update to SELinux</doc:tt>
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <arg type="s" name="bugzilla_url" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              A bugzilla URL with more details on the update.
+              If no URL is available then this field should be left empty.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <arg type="s" name="cve_url" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              A CVE URL with more details on the security advisory.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <arg type="s" name="restart" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              A valid restart type, e.g. <doc:tt>system</doc:tt>.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <arg type="s" name="update_text" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              The update text describing the update in a non-localised way.
+              Newlines should be converted to <doc:tt>;</doc:tt> before printed.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <arg type="s" name="changelog" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              The ChangeLog text describing the changes since the last version.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <arg type="s" name="state" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              The state of the update, e.g. <doc:tt>stable</doc:tt> or
+              <doc:tt>testing</doc:tt>.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <arg type="s" name="issued" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              The ISO8601 encoded date that the update was issued.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <arg type="s" name="updated" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              The ISO8601 encoded date that the update was updated.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+    </signal>
+
+    <!--*****************************************************************************************-->
+    <signal name="DistroUpgrade">
+      <doc:doc>
+        <doc:description>
+          <doc:para>
+            This signal allows the backend to communicate distribution
+            upgrades to the session.
+          </doc:para>
+        </doc:description>
+      </doc:doc>
+      <arg type="s" name="type" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              A valid upgrade string enumerated type, e.g. <doc:tt>stable</doc:tt>
+              or <doc:tt>unstable</doc:tt>
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <arg type="s" name="name" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              The short name of the distribution, e.g. <doc:tt>Fedora Core 10 RC1</doc:tt>
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <arg type="s" name="summary" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              The multi-line description of the release.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+    </signal>
+
+    <!--*****************************************************************************************-->
+    <signal name="Destroy">
+      <doc:doc>
+        <doc:description>
+          <doc:para>
+            This signal is sent when the transaction has been destroyed and is
+            no longer available for use.
+          </doc:para>
+        </doc:description>
+      </doc:doc>
+    </signal>
+
+  </interface>
+</node>
+
diff --git a/src/org.freedesktop.PackageKit.xml b/src/org.freedesktop.PackageKit.xml
new file mode 100644
index 0000000..6aa07d3
--- /dev/null
+++ b/src/org.freedesktop.PackageKit.xml
@@ -0,0 +1,380 @@
+<!DOCTYPE node PUBLIC
+"-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
+"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd" [
+  <!ENTITY ERROR_GENERAL "org.freedesktop.packagekit.Denied">
+]>
+<node name="/" xmlns:doc="http://www.freedesktop.org/dbus/1.0/doc.dtd">
+  <interface name="org.freedesktop.PackageKit">
+    <doc:doc>
+      <doc:description>
+        <doc:para>
+          The root interface is used for interacting with the daemon.
+        </doc:para>
+      </doc:description>
+    </doc:doc>
+
+    <!--*****************************************************************************************-->
+    <method name="GetActions">
+      <doc:doc>
+        <doc:description>
+          <doc:para>
+            Gets a list of all the actions that are supported by the backend.
+          </doc:para>
+        </doc:description>
+      </doc:doc>
+      <arg type="s" name="actions" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              A list of actions, e.g. <doc:tt>search-name;get-updates;update-system</doc:tt>
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+    </method>
+
+    <!--*****************************************************************************************-->
+    <method name="GetBackendDetail">
+      <doc:doc>
+        <doc:description>
+          <doc:para>
+            Gets any details about the backend being used by PackageKit
+          </doc:para>
+        </doc:description>
+      </doc:doc>
+      <arg type="s" name="name" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              The name of the backend, e.g. yum
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <arg type="s" name="author" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              The author of the backend, e.g. <doc:tt>Richard Hughes &lt;richard at hughsie.com&gt;</doc:tt>
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+    </method>
+
+    <!--*****************************************************************************************-->
+    <method name="GetFilters">
+      <doc:doc>
+        <doc:description>
+          <doc:para>
+            Gets the list of filters that the backend supports
+          </doc:para>
+        </doc:description>
+      </doc:doc>
+      <arg type="s" name="filters" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              The list of filters as a string, e.g. <doc:tt>installed;devel</doc:tt>
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+    </method>
+
+    <!--*****************************************************************************************-->
+    <method name="GetGroups">
+      <doc:doc>
+        <doc:description>
+          <doc:para>
+            Gets the groups that are supported
+          </doc:para>
+        </doc:description>
+      </doc:doc>
+      <arg type="s" name="groups" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              The group list, e.g. <doc:tt>accesories;games;system</doc:tt>
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+    </method>
+
+    <!--*****************************************************************************************-->
+    <method name="GetMimeTypes">
+      <doc:doc>
+        <doc:description>
+          <doc:para>
+            Gets the MIME types of packages that are supported
+          </doc:para>
+        </doc:description>
+      </doc:doc>
+      <arg type="s" name="types" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              The MIME list, e.g. <doc:tt>application/x-rpm;application/x-deb</doc:tt>
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+    </method>
+
+    <!--*****************************************************************************************-->
+    <method name="GetTid">
+      <doc:doc>
+        <doc:description>
+          <doc:para>
+            Gets a new transaction ID from the daemon
+          </doc:para>
+        </doc:description>
+      </doc:doc>
+      <arg type="s" name="tid" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              The tid, e.g. <doc:tt>45_dafeca_checkpoint32</doc:tt>
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+    </method>
+
+    <!--*****************************************************************************************-->
+    <method name="GetTimeSinceAction">
+      <doc:doc>
+        <doc:description>
+          <doc:para>
+            This method allows us to query how long since an action has successfully completed.
+          </doc:para>
+        </doc:description>
+      </doc:doc>
+      <arg type="s" name="role" direction="in">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              The role, e.g. <doc:tt>update-system</doc:tt>
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <arg type="u" name="seconds" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              The amount of time in seconds
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+    </method>
+
+    <!--*****************************************************************************************-->
+    <method name="GetTransactionList">
+      <doc:doc>
+        <doc:description>
+          <doc:para>
+            Gets the transaction list of any transactions that are in progress
+          </doc:para>
+        </doc:description>
+      </doc:doc>
+      <arg type="as" name="transactions" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              A list of transaction ID's
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+    </method>
+
+    <!--*****************************************************************************************-->
+    <method name="StateHasChanged">
+      <doc:doc>
+        <doc:description>
+          <doc:para>
+            This method suggests to PackageKit that the package backend state may have changed.
+            This allows plugins to the native package manager to suggest that PackageKit drops
+            it's caches.
+          </doc:para>
+        </doc:description>
+      </doc:doc>
+      <arg type="s" name="reason" direction="in">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              The reason of the state change. Valid reasons are <doc:tt>resume</doc:tt> or
+              <doc:tt>posttrans</doc:tt>.
+              Resume is given a lower priority than posttrans.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+    </method>
+
+    <!--*****************************************************************************************-->
+    <method name="SuggestDaemonQuit">
+      <doc:doc>
+        <doc:description>
+          <doc:para>
+            Suggests to the daemon that it should quit as soon as possible, for instance if a native
+            package management tool is waiting to be used.
+          </doc:para>
+        </doc:description>
+      </doc:doc>
+    </method>
+
+    <!--*****************************************************************************************-->
+    <method name="GetNetworkState">
+      <doc:doc>
+        <doc:description>
+          <doc:para>
+            Gets the network state from the daemon. This is provided as some clients may not want
+            to use NetworkManager if the system daemon is configured to use something else.
+          </doc:para>
+        </doc:description>
+      </doc:doc>
+      <arg type="s" name="state" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              The network state, e.g. <doc:tt>unknown</doc:tt>,
+              <doc:tt>offline</doc:tt> or <doc:tt>online</doc:tt>.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+    </method>
+
+    <!--*****************************************************************************************-->
+    <method name="SetProxy">
+      <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
+      <doc:doc>
+        <doc:description>
+          <doc:para>
+            Sets the proxy used by the dameon.
+          </doc:para>
+        </doc:description>
+        <doc:permission>Callers need the org.freedesktop.packagekit.set-proxy</doc:permission>
+      </doc:doc>
+      <arg type="s" name="proxy_http" direction="in">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              The HTTP 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>
+            <doc:para>
+              The FTP proxy, e.g. <doc:tt>username:password at server:port</doc:tt>.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+    </method>
+
+
+    <!--*****************************************************************************************-->
+    <signal name="TransactionListChanged">
+      <doc:doc>
+        <doc:description>
+          <doc:para>
+            The transaction list has changed, because either a transaction has finished or a new
+            transaction created.
+          </doc:para>
+        </doc:description>
+      </doc:doc>
+      <arg type="as" name="transactions" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              A list of transaction ID's.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+    </signal>
+
+    <!--*****************************************************************************************-->
+    <signal name="Locked">
+      <doc:doc>
+        <doc:description>
+          <doc:para>
+            This signal is emitted when the backend is locked and native tools would fail.
+          </doc:para>
+        </doc:description>
+      </doc:doc>
+      <arg type="b" name="is_locked" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              If we have locked the package backend.
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+    </signal>
+
+    <!--*****************************************************************************************-->
+    <signal name="NetworkStateChanged">
+      <doc:doc>
+        <doc:description>
+          <doc:para>
+            This signal is emitted when the network state has changed
+          </doc:para>
+        </doc:description>
+      </doc:doc>
+      <arg type="s" name="state" direction="out">
+        <doc:doc>
+          <doc:summary>
+            <doc:para>
+              The new network state
+            </doc:para>
+          </doc:summary>
+        </doc:doc>
+      </arg>
+    </signal>
+
+    <!--*****************************************************************************************-->
+    <signal name="RestartSchedule">
+      <doc:doc>
+        <doc:description>
+          <doc:para>
+            A system restart has been sceduled
+          </doc:para>
+        </doc:description>
+      </doc:doc>
+    </signal>
+
+    <!--*****************************************************************************************-->
+    <signal name="RepoListChanged">
+      <doc:doc>
+        <doc:description>
+          <doc:para>
+            This signal is emitted when the repository list has changed
+          </doc:para>
+        </doc:description>
+      </doc:doc>
+    </signal>
+
+    <!--*****************************************************************************************-->
+    <signal name="UpdatesChanged">
+      <doc:doc>
+        <doc:description>
+          <doc:para>
+            This signal is emitted when the number of updates has changed
+          </doc:para>
+        </doc:description>
+      </doc:doc>
+    </signal>
+
+  </interface>
+</node>
+
diff --git a/src/pk-interface-transaction.xml b/src/pk-interface-transaction.xml
deleted file mode 100644
index 2448e57..0000000
--- a/src/pk-interface-transaction.xml
+++ /dev/null
@@ -1,2194 +0,0 @@
-<!DOCTYPE node PUBLIC
-"-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
-"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd" [
-  <!ENTITY ERROR_GENERAL "org.freedesktop.PackageKit.Denied">
-]>
-<node name="/" xmlns:doc="http://www.freedesktop.org/dbus/1.0/doc.dtd">
-  <interface name="org.freedesktop.PackageKit.Transaction">
-    <doc:doc>
-      <doc:description>
-        <doc:para>
-          The transaction interface is used for interacting with individual transactions.
-        </doc:para>
-      </doc:description>
-    </doc:doc>
-
-    <!--*****************************************************************************************-->
-    <method name="SetLocale">
-      <doc:doc>
-        <doc:description>
-          <doc:para>
-            This method allows the calling session to set a system locale for
-            the package manager so that summaries and descriptions can be
-            correctly localised.
-          </doc:para>
-        </doc:description>
-      </doc:doc>
-      <arg type="s" name="code" direction="in">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              The locale code, for example <doc:tt>en_GB</doc:tt>.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-    </method>
-
-    <!--*****************************************************************************************-->
-    <method name="AcceptEula">
-      <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
-      <doc:doc>
-        <doc:description>
-          <doc:para>
-            This method allows the user to accept a end user licence agreement.
-          </doc:para>
-        </doc:description>
-        <doc:permission>Callers need the org.freedesktop.packagekit.accept-eula</doc:permission>
-      </doc:doc>
-      <arg type="s" name="eula_id" direction="in">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              A valid EULA ID
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-    </method>
-
-    <!--*****************************************************************************************-->
-    <method name="Cancel">
-      <doc:doc>
-        <doc:description>
-          <doc:para>
-            This method cancels a transaction that is already running
-          </doc:para>
-        </doc:description>
-      </doc:doc>
-    </method>
-
-    <!--*****************************************************************************************-->
-    <method name="DownloadPackages">
-      <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
-      <doc:doc>
-        <doc:description>
-          <doc:para>
-            This method downloads packages into a temporary directory.
-          </doc:para>
-        </doc:description>
-      </doc:doc>
-      <arg type="as" name="package_ids" direction="in">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              An array of package IDs.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-    </method>
-
-    <!--*****************************************************************************************-->
-    <method name="GetAllowCancel">
-      <doc:doc>
-        <doc:description>
-          <doc:para>
-            Get if cancel is allowed for the transaction
-          </doc:para>
-        </doc:description>
-      </doc:doc>
-      <arg type="b" name="allow_cancel" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              If cancel is allowed
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-    </method>
-
-    <!--*****************************************************************************************-->
-    <method name="GetCategories">
-      <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
-      <doc:doc>
-        <doc:description>
-          <doc:para>
-            This method return the collection categories
-          </doc:para>
-        </doc:description>
-          <doc:para>
-            This method typically emits
-            <literal>Categories</literal>,
-            <literal>Error</literal> and
-          </doc:para>
-      </doc:doc>
-    </method>
-
-    <!--*****************************************************************************************-->
-    <method name="GetDepends">
-      <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
-      <doc:doc>
-        <doc:description>
-          <doc:para>
-            This method returns packages that this package depends on.
-          </doc:para>
-          <doc:para>
-            This method typically emits
-            <doc:tt>Progress</doc:tt>,
-            <doc:tt>Status</doc:tt> and
-            <doc:tt>Error</doc:tt> and
-            <doc:tt>Package</doc:tt>.
-          </doc:para>
-          <doc:para>
-            <doc:tt>Package</doc:tt> enumerated types should be
-            <doc:tt>available</doc:tt> or <doc:tt>installed</doc:tt>.
-          </doc:para>
-        </doc:description>
-      </doc:doc>
-      <arg type="s" name="filter" direction="in">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              A correct filter, e.g. <doc:tt>none</doc:tt> or <doc:tt>installed;~devel</doc:tt>
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-      <arg type="as" name="package_ids" direction="in">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              An array of package IDs.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-      <arg type="b" name="recursive" direction="in">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              Either <doc:tt>true</doc:tt> or <doc:tt>false</doc:tt>. If yes then the requirements should be
-              returned for all packages returned.
-              This means if gnome-power-manager depends on NetworkManager
-              and NetworkManager depends on HAL, then GetDepends on
-              gnome-power-manager should return both HAL and NetworkManager.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-    </method>
-
-    <!--*****************************************************************************************-->
-    <method name="GetDetails">
-      <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
-      <doc:doc>
-        <doc:description>
-          <doc:para>
-            This method should return all the details about a specific
-            <doc:tt>package_id</doc:tt>.
-          </doc:para>
-          <doc:para>
-            This method typically emits
-            <doc:tt>Progress</doc:tt>,
-            <doc:tt>Status</doc:tt> and
-            <doc:tt>Error</doc:tt> and
-            <doc:tt>Details</doc:tt>.
-          </doc:para>
-        </doc:description>
-      </doc:doc>
-      <arg type="as" name="package_ids" direction="in">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              An array of package IDs.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-    </method>
-
-    <!--*****************************************************************************************-->
-    <method name="GetFiles">
-      <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
-      <doc:doc>
-        <doc:description>
-          <doc:para>
-            This method should return the file list of the <doc:tt>package_id</doc:tt>.
-          </doc:para>
-          <doc:para>
-            This method typically emits
-            <doc:tt>Progress</doc:tt>,
-            <doc:tt>Status</doc:tt> and
-            <doc:tt>Error</doc:tt> and
-            <doc:tt>Files</doc:tt>.
-          </doc:para>
-        </doc:description>
-      </doc:doc>
-      <arg type="as" name="package_ids" direction="in">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              An array of package IDs.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-    </method>
-
-    <!--*****************************************************************************************-->
-    <method name="GetOldTransactions">
-      <doc:doc>
-        <doc:description>
-          <doc:para>
-            This method allows a client to view details for old transactions.
-          </doc:para>
-        </doc:description>
-      </doc:doc>
-      <arg type="u" name="number" direction="in">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              The number of past transactions, or 0 for all known transactions.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-    </method>
-
-    <!--*****************************************************************************************-->
-    <method name="GetPackageLast">
-      <doc:doc>
-        <doc:description>
-          <doc:para>
-            This method emits the package that was last emmitted from the daemon.
-            This allows any GUI that is monitoring transactions to accurately reflect the current
-            state of the transaction at startup.
-          </doc:para>
-        </doc:description>
-      </doc:doc>
-      <arg type="s" name="package" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              The last package_id.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-    </method>
-
-    <!--*****************************************************************************************-->
-    <method name="GetPackages">
-      <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
-      <doc:doc>
-        <doc:description>
-          <doc:para>
-            This method returns all the packages without a search term.
-          </doc:para>
-          <doc:para>
-            This method typically emits
-            <doc:tt>Progress</doc:tt>,
-            <doc:tt>Error</doc:tt> and
-            <doc:tt>Package</doc:tt>.
-          </doc:para>
-          <doc:para>
-            <doc:tt>Package</doc:tt> enumerated types should be
-            <doc:tt>available</doc:tt> or <doc:tt>installed</doc:tt>.
-          </doc:para>
-        </doc:description>
-      </doc:doc>
-      <arg type="s" name="filter" direction="in">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              A correct filter, e.g. <doc:tt>none</doc:tt> or <doc:tt>installed;~devel</doc:tt>
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-    </method>
-
-    <!--*****************************************************************************************-->
-    <method name="GetProgress">
-      <doc:doc>
-        <doc:description>
-          <doc:para>
-            This method gets the progress completion of the daemon.
-          </doc:para>
-        </doc:description>
-      </doc:doc>
-      <arg type="u" name="percentage" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              The percentage complete of the whole transaction.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-      <arg type="u" name="subpercentage" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              The percentage complete of the individual task, for example, downloading.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-      <arg type="u" name="elapsed" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              The amount of time elapsed during the transaction.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-      <arg type="u" name="remaining" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              The estimated remaining time of the transaction, or 0 if not known.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-    </method>
-
-    <!--*****************************************************************************************-->
-    <method name="GetRepoList">
-      <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
-      <doc:doc>
-        <doc:description>
-          <doc:para>
-            This method returns the list of repositories used in the system.
-          </doc:para>
-          <doc:para>
-            This method should emit <doc:tt>RepoDetail</doc:tt>.
-          </doc:para>
-        </doc:description>
-      </doc:doc>
-      <arg type="s" name="filter" direction="in">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              A correct filter, e.g. <doc:tt>none</doc:tt> or <doc:tt>installed;~devel</doc:tt>
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-    </method>
-
-    <!--*****************************************************************************************-->
-    <method name="GetRequires">
-      <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
-      <doc:doc>
-        <doc:description>
-          <doc:para>
-            This method returns packages that depend on this package.
-            This is useful to know, as if <doc:tt>package_id</doc:tt> is being
-            removed, we can warn the user what else would be removed.
-          </doc:para>
-          <doc:para>
-            This method typically emits
-            <doc:tt>Progress</doc:tt>,
-            <doc:tt>Status</doc:tt> and
-            <doc:tt>Error</doc:tt> and
-            <doc:tt>Package</doc:tt>.
-          </doc:para>
-          <doc:para>
-            <doc:tt>Package</doc:tt> enumerated types should be
-            <doc:tt>available</doc:tt> or <doc:tt>installed</doc:tt>.
-          </doc:para>
-        </doc:description>
-      </doc:doc>
-      <arg type="s" name="filter" direction="in">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              A correct filter, e.g. <doc:tt>none</doc:tt> or <doc:tt>installed;~devel</doc:tt>
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-      <arg type="as" name="package_ids" direction="in">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              An array of package IDs.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-      <arg type="b" name="recursive" direction="in">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              Either <doc:tt>true</doc:tt> or <doc:tt>false</doc:tt>. If yes then the requirements should be
-              returned for all packages returned.
-              This means if gnome-power-manager depends on NetworkManager
-              and NetworkManager depends on HAL, then GetRequires on
-              HAL should return both gnome-power-manager and NetworkManager.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-    </method>
-
-    <!--*****************************************************************************************-->
-    <method name="GetRole">
-      <doc:doc>
-        <doc:description>
-          <doc:para>
-            This method returns the current role of the transaction.
-          </doc:para>
-        </doc:description>
-      </doc:doc>
-      <arg type="s" name="role" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              The PkRoleEnum in text form.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-      <arg type="s" name="text" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              The original search terms or package names that are used to start the transaction.
-              Multiple entries are split using <doc:tt>;</doc:tt>.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-    </method>
-
-    <!--*****************************************************************************************-->
-    <method name="GetStatus">
-      <doc:doc>
-        <doc:description>
-          <doc:para>
-            This method returns the status of the transaction.
-          </doc:para>
-        </doc:description>
-      </doc:doc>
-      <arg type="s" name="status" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              The PkStatusEnum in string form.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-    </method>
-
-    <!--*****************************************************************************************-->
-    <method name="GetUpdateDetail">
-      <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
-      <doc:doc>
-        <doc:description>
-          <doc:para>
-            This method returns details about a specific update.
-          </doc:para>
-          <doc:para>
-            This method typically emits
-            <doc:tt>UpdateDetail</doc:tt> and
-            <doc:tt>Error</doc:tt>
-          </doc:para>
-        </doc:description>
-      </doc:doc>
-      <arg type="as" name="package_ids" direction="in">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              An array of package IDs.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-    </method>
-
-    <!--*****************************************************************************************-->
-    <method name="GetUpdates">
-      <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
-      <doc:doc>
-        <doc:description>
-          <doc:para>
-            This method should return a list of packages that are installed and are upgradable.
-            It should only return the newest update for each installed package.
-          </doc:para>
-          <doc:para>
-            This method typically emits
-            <doc:tt>Progress</doc:tt>,
-            <doc:tt>Error</doc:tt> and
-            <doc:tt>Package</doc:tt>.
-          </doc:para>
-          <doc:para>
-            <doc:tt>Package</doc:tt> enumerated types should be
-            <doc:tt>blocked</doc:tt>,
-            <doc:tt>low</doc:tt>,
-            <doc:tt>normal</doc:tt>,
-            <doc:tt>important</doc:tt> or
-            <doc:tt>security</doc:tt>.
-          </doc:para>
-          <doc:para>
-            The status <doc:tt>blocked</doc:tt> signifies the package cannot be
-            updated, probably due to other dependencies not being met.
-            This type allows the GUI tools to show to the user that an update
-            exists, but cannot be installed.
-            The reason for it not being installed should be put into the update
-            description when doing GetUpdateDetail.
-          </doc:para>
-          <doc:para>
-            A filter such as <doc:tt>basename</doc:tt> or <doc:tt>gui</doc:tt>
-            is also useful if you want to do filtering on the method to only show
-            the main packages rather than the complete list.
-            The complete list is available but specifying <doc:tt>none</doc:tt>
-            as the filter.
-            Using no filter which may be useful in advanced tools or when using
-            libpackagekit and searching for an update of a specific name.
-            Other filter types may be present, but can be safely ignored of the
-            backend does not support them.
-          </doc:para>
-        </doc:description>
-      </doc:doc>
-      <arg type="s" name="filter" direction="in">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              A correct filter, e.g. <doc:tt>none</doc:tt> or <doc:tt>installed;~devel</doc:tt>
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-    </method>
-
-    <!--*****************************************************************************************-->
-    <method name="GetDistroUpgrades">
-      <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
-      <doc:doc>
-        <doc:description>
-          <doc:para>
-            This method should return a list of distribution upgrades that are
-            available.
-            It should not return updates, only major upgrades.
-          </doc:para>
-          <doc:para>
-            This method typically emits
-            <doc:tt>DistroUpgrade</doc:tt>,
-            <doc:tt>Error</doc:tt> and
-          </doc:para>
-        </doc:description>
-      </doc:doc>
-    </method>
-
-    <!--*****************************************************************************************-->
-    <method name="InstallFiles">
-      <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
-      <doc:doc>
-        <doc:description>
-          <doc:para>
-            This method installs local package files onto the local system.
-          </doc:para>
-          <doc:para>
-            The installer should always install extra dependant packages automatically.
-          </doc:para>
-          <doc:para>
-            This method typically emits
-            <doc:tt>Progress</doc:tt>,
-            <doc:tt>Status</doc:tt> and
-            <doc:tt>Error</doc:tt> and
-            <doc:tt>Package</doc:tt>.
-          </doc:para>
-          <doc:para>
-            <doc:tt>Package</doc:tt> enumerated types should be
-            <doc:tt>downloading</doc:tt>,
-            <doc:tt>updating</doc:tt>,
-            <doc:tt>installing</doc:tt> or
-            <doc:tt>removing</doc:tt>.
-          </doc:para>
-        </doc:description>
-        <doc:permission>Callers need the org.freedesktop.packagekit.localinstall-untrusted</doc:permission>
-      </doc:doc>
-      <arg type="b" name="trusted" direction="in">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              If the package is trusted, i.e. if it has a pre-trusted security signature.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-      <arg type="as" name="full_paths" direction="in">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              An array of full path and filenames to packages.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-    </method>
-
-    <!--*****************************************************************************************-->
-    <method name="InstallPackages">
-      <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
-      <doc:doc>
-        <doc:description>
-          <doc:para>
-            This method installs new packages on the local system.
-          </doc:para>
-          <doc:para>
-            The installer should always install extra packages automatically
-            as the use could call GetDepends prior to the install if a confirmation
-            is required in the UI.
-          </doc:para>
-          <doc:para>
-            This method typically emits
-            <doc:tt>Progress</doc:tt>,
-            <doc:tt>Status</doc:tt> and
-            <doc:tt>Error</doc:tt> and
-            <doc:tt>Package</doc:tt>.
-          </doc:para>
-          <doc:para>
-            <doc:tt>Package</doc:tt> enumerated types should be
-            <doc:tt>downloading</doc:tt>,
-            <doc:tt>updating</doc:tt>,
-            <doc:tt>installing</doc:tt> or
-            <doc:tt>removing</doc:tt>.
-          </doc:para>
-        </doc:description>
-        <doc:permission>Callers need the org.freedesktop.packagekit.install</doc:permission>
-      </doc:doc>
-      <arg type="as" name="package_ids" direction="in">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              An array of package IDs.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-    </method>
-
-    <!--*****************************************************************************************-->
-    <method name="InstallSignature">
-      <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
-      <doc:doc>
-        <doc:description>
-          <doc:para>
-            This method allows us to install new security keys.
-          </doc:para>
-        </doc:description>
-        <doc:permission>Callers need the org.freedesktop.packagekit.install-signature</doc:permission>
-      </doc:doc>
-      <arg type="s" name="sig_type" direction="in">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              A key type, e.g. <doc:tt>gpg</doc:tt>
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-      <arg type="s" name="key_id" direction="in">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              A key ID, e.g. <doc:tt>BB7576AC</doc:tt>
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-      <arg type="s" name="package_id" direction="in">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              A PackageID for the package that the user is trying to install
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-    </method>
-
-    <!--*****************************************************************************************-->
-    <method name="IsCallerActive">
-      <doc:doc>
-        <doc:description>
-          <doc:para>
-            This method allows us to find if the original caller of the method is still connected
-            to the session bus.
-            This is usually an indication that the client can handle it's own error handling and
-            EULA callbacks rather than another program taking over.
-          </doc:para>
-        </doc:description>
-      </doc:doc>
-      <arg type="b" name="is_active" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              If the client is still connected.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-    </method>
-
-    <!--*****************************************************************************************-->
-    <method name="RefreshCache">
-      <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
-      <doc:doc>
-        <doc:description>
-          <doc:para>
-            This method should fetch updated meta-data for all enabled repositories.
-            This operation should be only scheduled when the computer is idle as
-            the network connection will be very active, and will the computer will
-            have have non-trivial levels of hard disk and processor activity.
-            For these reasons, it should not be done automatically when on battery
-            power.
-          </doc:para>
-          <doc:para>
-            This method typically emits
-            <doc:tt>Progress</doc:tt>,
-            <doc:tt>Error</doc:tt> and
-            <doc:tt>Package</doc:tt>.
-          </doc:para>
-        </doc:description>
-        <doc:permission>Callers need the org.freedesktop.packagekit.refresh-cache</doc:permission>
-      </doc:doc>
-      <arg type="b" name="force" direction="in">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              If the caches should be cleaned and reloaded even if there is valid, up to date data.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-    </method>
-
-    <!--*****************************************************************************************-->
-    <method name="RemovePackages">
-      <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
-      <doc:doc>
-        <doc:description>
-          <doc:para>
-            This method removes packages from the local system.
-          </doc:para>
-          <doc:para>
-            This method typically emits
-            <doc:tt>Progress</doc:tt>,
-            <doc:tt>Status</doc:tt> and
-            <doc:tt>Error</doc:tt> and
-            <doc:tt>Package</doc:tt>.
-          </doc:para>
-          <doc:para>
-            <doc:tt>Package</doc:tt> enumerated types should be
-            <doc:tt>downloading</doc:tt>,
-            <doc:tt>updating</doc:tt>,
-            <doc:tt>installing</doc:tt> or
-            <doc:tt>removing</doc:tt>.
-          </doc:para>
-        </doc:description>
-        <doc:permission>Callers need the org.freedesktop.packagekit.remove</doc:permission>
-      </doc:doc>
-      <arg type="as" name="package_ids" direction="in">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              An array of package IDs.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-      <arg type="b" name="allow_deps" direction="in">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              Either <doc:tt>true</doc:tt> or <doc:tt>false</doc:tt>.
-              If <doc:tt>true</doc:tt> allow other packages to be removed with the package,
-              but <doc:tt>false</doc:tt> should cause the script to abort if other packages
-              are dependant on the package.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-      <arg type="b" name="autoremove" direction="in">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              Either <doc:tt>true</doc:tt> or <doc:tt>false</doc:tt>.
-              This option is only really interesting on embedded devices with a limited amount of
-              flash storage.
-              It suggests to the packagekit backend that dependencies installed at the same time as
-              the package should also be removed if they are not required by anything else.
-              For instance, if you install OpenOffice, it might download libneon as a dependency.
-              When <doc:tt>auto_remove</doc:tt> is set to true, and you remove OpenOffice then
-              libneon will also get removed automatically.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-    </method>
-
-    <!--*****************************************************************************************-->
-    <method name="RepoEnable">
-      <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
-      <doc:doc>
-        <doc:description>
-          <doc:para>
-            This method enables the repository specified.
-          </doc:para>
-        </doc:description>
-        <doc:permission>Callers need the org.freedesktop.packagekit.repo-change</doc:permission>
-      </doc:doc>
-      <arg type="s" name="repo_id" direction="in">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              A repository identifier, e.g. <doc:tt>fedora-development-debuginfo</doc:tt>
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-      <arg type="b" name="enabled" direction="in">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              <doc:tt>true</doc:tt> if enabled, <doc:tt>false</doc:tt> if disabled.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-    </method>
-
-    <!--*****************************************************************************************-->
-    <method name="RepoSetData">
-      <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
-      <doc:doc>
-        <doc:description>
-          <doc:para>
-            This method allows arbitary data to be passed to the repository handler.
-          </doc:para>
-        </doc:description>
-        <doc:permission>Callers need the org.freedesktop.packagekit.repo-change</doc:permission>
-      </doc:doc>
-      <arg type="s" name="repo_id" direction="in">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              A repository identifier, e.g. <doc:tt>fedora-development-debuginfo</doc:tt>
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-      <arg type="s" name="parameter" direction="in">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              The backend specific value, e.g. <doc:tt>set-download-url</doc:tt>.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-      <arg type="s" name="value" direction="in">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              The backend specific value, e.g. <doc:tt>http://foo.bar.org/baz</doc:tt>.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-    </method>
-
-    <!--*****************************************************************************************-->
-    <method name="Resolve">
-      <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
-      <doc:doc>
-        <doc:description>
-          <doc:para>
-            This method turns a single package name into a package_id suitable for the
-            other methods.
-          </doc:para>
-          <doc:para>
-            This method typically emits
-            <doc:tt>Error</doc:tt> and
-            <doc:tt>Package</doc:tt>.
-          </doc:para>
-          <doc:para>
-            <doc:tt>Package</doc:tt> enumerated types should be
-            <doc:tt>available</doc:tt> or <doc:tt>installed</doc:tt>.
-          </doc:para>
-        </doc:description>
-      </doc:doc>
-      <arg type="s" name="filter" direction="in">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              A correct filter, e.g. <doc:tt>none</doc:tt> or <doc:tt>installed;~devel</doc:tt>
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-      <arg type="as" name="package" direction="in">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              An array of package names, e.g. <doc:tt>scribus-clipart</doc:tt>.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-    </method>
-
-    <!--*****************************************************************************************-->
-    <method name="Rollback">
-      <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
-      <doc:doc>
-        <doc:description>
-          <doc:para>
-            This method rolls back the package database to a previous transaction.
-          </doc:para>
-        </doc:description>
-        <doc:permission>Callers need the org.freedesktop.packagekit.rollback</doc:permission>
-      </doc:doc>
-      <arg type="s" name="transaction_id" direction="in">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              A valid transaction ID.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-    </method>
-
-    <!--*****************************************************************************************-->
-    <method name="SearchDetails">
-      <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
-      <doc:doc>
-        <doc:description>
-          <doc:para>
-            This method allows deeper searching than SearchName().
-          </doc:para>
-          <doc:para>
-            Do not refresh the package cache. This should be fast.
-            This is very similar to search-name.
-            This should search as much data as possible, including, if possible
-            repo names, package summaries, descriptions and URLs.
-          </doc:para>
-          <doc:para>
-            This method typically emits
-            <doc:tt>Progress</doc:tt>,
-            <doc:tt>Error</doc:tt> and
-            <doc:tt>Package</doc:tt>.
-          </doc:para>
-          <doc:para>
-            <doc:tt>Package</doc:tt> enumerated types should be
-            <doc:tt>available</doc:tt> or <doc:tt>installed</doc:tt>.
-          </doc:para>        </doc:description>
-      </doc:doc>
-      <arg type="s" name="filter" direction="in">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              A correct filter, e.g. <doc:tt>none</doc:tt> or <doc:tt>installed;~devel</doc:tt>
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-      <arg type="s" name="search" direction="in">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              A single word search term with no wildcard chars.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-    </method>
-
-    <!--*****************************************************************************************-->
-    <method name="SearchFile">
-      <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
-      <doc:doc>
-        <doc:description>
-          <doc:para>
-            This method searches for files on the local system and files in available packages.
-          </doc:para>
-          <doc:para>
-            This should search for files.
-            This should allow an application to find out what package owns
-            a file on the system.
-          </doc:para>
-          <doc:para>
-            This method typically emits
-            <doc:tt>Progress</doc:tt>,
-            <doc:tt>Error</doc:tt> and
-            <doc:tt>Package</doc:tt>.
-          </doc:para>
-          <doc:para>
-            <doc:tt>Package</doc:tt> enumerated types should be
-            <doc:tt>available</doc:tt> or <doc:tt>installed</doc:tt>.
-          </doc:para>        </doc:description>
-      </doc:doc>
-      <arg type="s" name="filter" direction="in">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              A correct filter, e.g. <doc:tt>none</doc:tt> or <doc:tt>installed;~devel</doc:tt>
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-      <arg type="s" name="search" direction="in">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              A single local path on the system
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-    </method>
-
-    <!--*****************************************************************************************-->
-    <method name="SearchGroup">
-      <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
-      <doc:doc>
-        <doc:description>
-          <doc:para>
-            This method returns packages from a given group enumerated type.
-          </doc:para>
-          <doc:para>
-            Do not refresh the package cache. This should be fast.
-          </doc:para>
-          <doc:para>
-            This method typically emits
-            <doc:tt>Progress</doc:tt>,
-            <doc:tt>Error</doc:tt> and
-            <doc:tt>Package</doc:tt>.
-          </doc:para>
-          <doc:para>
-            <doc:tt>Package</doc:tt> enumerated types should be
-            <doc:tt>available</doc:tt> or <doc:tt>installed</doc:tt>.
-          </doc:para>
-        </doc:description>
-      </doc:doc>
-      <arg type="s" name="filter" direction="in">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              A correct filter, e.g. <doc:tt>none</doc:tt> or <doc:tt>installed;~devel</doc:tt>
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-      <arg type="s" name="search" direction="in">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              An enumerated group_type, or <doc:tt>unknown</doc:tt>
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-    </method>
-
-    <!--*****************************************************************************************-->
-    <method name="SearchName">
-      <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
-      <doc:doc>
-        <doc:description>
-          <doc:para>
-            This method searches the package database by package name.
-          </doc:para>
-          <doc:para>
-            Do not refresh the package cache. This should be fast.
-          </doc:para>
-          <doc:para>
-            Try to emit <doc:tt>installed</doc:tt> before
-            <doc:tt>available</doc:tt> packages first, as it allows the client
-            program to perform the GUI filtering and matching whilst the daemon is
-            running the transaction.
-          </doc:para>
-          <doc:para>
-            If the backend includes <doc:tt>installed</doc:tt> and
-            <doc:tt>available</doc:tt> versions of the same package when searching
-            then the <doc:tt>available</doc:tt> version will have to be filtered
-            in the backend.
-          </doc:para>
-          <doc:para>
-            The search query in the backend should not be case sensitive, and
-            should not be sensitive to <doc:tt>_</doc:tt> or <doc:tt>-</doc:tt>.
-          </doc:para>
-          <doc:para>
-            The search methods should return all results in all repositories.
-            This may mean that multiple versions of package are returned.
-            If this is not what is wanted by the client program, then the
-            <doc:tt>newest</doc:tt> filter should be used.
-          </doc:para>
-          <doc:para>
-            This method typically emits
-            <doc:tt>Progress</doc:tt>,
-            <doc:tt>Error</doc:tt> and
-            <doc:tt>Package</doc:tt>.
-          </doc:para>
-          <doc:para>
-            <doc:tt>Package</doc:tt> enumerated types should be
-            <doc:tt>available</doc:tt> or <doc:tt>installed</doc:tt>.
-          </doc:para>
-        </doc:description>
-      </doc:doc>
-      <arg type="s" name="filter" direction="in">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              A correct filter, e.g. <doc:tt>none</doc:tt> or <doc:tt>installed;~devel</doc:tt>
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-      <arg type="s" name="search" direction="in">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              A single word search term with no wildcard chars
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-    </method>
-
-    <!--*****************************************************************************************-->
-    <method name="UpdatePackages">
-      <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
-      <doc:doc>
-        <doc:description>
-          <doc:para>
-            This method updates existing packages on the local system.
-          </doc:para>
-          <doc:para>
-            The installer should always update extra packages automatically to fulfil dependencies.
-          </doc:para>
-          <doc:para>
-            This should allow an application to find out what package owns a file on the system.
-          </doc:para>
-          <doc:para>
-            This method typically emits
-            <doc:tt>Progress</doc:tt>,
-            <doc:tt>Status</doc:tt> and
-            <doc:tt>Error</doc:tt> and
-            <doc:tt>Package</doc:tt>.
-          </doc:para>
-        </doc:description>
-        <doc:permission>Callers need the org.freedesktop.packagekit.update-package</doc:permission>
-      </doc:doc>
-      <arg type="as" name="package_ids" direction="in">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              An array of package IDs.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-    </method>
-
-    <!--*****************************************************************************************-->
-    <method name="UpdateSystem">
-      <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
-      <doc:doc>
-        <doc:description>
-          <doc:para>
-            This method updates all packages on the system to thier newest versions.
-          </doc:para>
-          <doc:para>
-            The installer should update all the updateable packages on the system,
-            including automatically installing any new packages that are needed for
-            dependancies.
-          </doc:para>
-        </doc:description>
-          <doc:para>
-            This method typically emits
-            <doc:tt>Progress</doc:tt>,
-            <doc:tt>Error</doc:tt> and
-            <doc:tt>RequireRestart</doc:tt> and
-            <doc:tt>Package</doc:tt>.
-          </doc:para>
-          <doc:para>
-            <doc:tt>Package</doc:tt> enumerated types should be
-            <doc:tt>downloading</doc:tt>,
-            <doc:tt>updating</doc:tt>,
-            <doc:tt>installing</doc:tt> or
-            <doc:tt>removing</doc:tt>.
-          </doc:para>
-        <doc:permission>Callers need the org.freedesktop.packagekit.update-system</doc:permission>
-      </doc:doc>
-    </method>
-
-    <!--*****************************************************************************************-->
-    <method name="WhatProvides">
-      <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
-      <doc:doc>
-        <doc:description>
-          <doc:para>
-            This method returns packages that provide the supplied attributes.
-            This method is useful for finding out what package(s) provide a modalias
-            or GStreamer codec string.
-          </doc:para>
-          <doc:para>
-            This method typically emits
-            <doc:tt>Progress</doc:tt>,
-            <doc:tt>Status</doc:tt> and
-            <doc:tt>Error</doc:tt> and
-            <doc:tt>Package</doc:tt>.
-          </doc:para>
-          <doc:para>
-            <doc:tt>Package</doc:tt> enumerated types should be
-            <doc:tt>available</doc:tt> or <doc:tt>installed</doc:tt>.
-          </doc:para>
-        </doc:description>
-      </doc:doc>
-      <arg type="s" name="filter" direction="in">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              A correct filter, e.g. <doc:tt>none</doc:tt> or <doc:tt>installed;~devel</doc:tt>
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-      <arg type="s" name="type" direction="in">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              A PkProvideType, e.g. <doc:tt>PK_PROVIDES_ENUM_CODEC</doc:tt>.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-      <arg type="s" name="search" direction="in">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              The data to send to the backend to get the packages.
-              Note: This is backend specific.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-    </method>
-
-    <!--*****************************************************************************************-->
-    <signal name="AllowCancel">
-      <doc:doc>
-        <doc:description>
-          <doc:para>
-            This signal is sent when the backend decides that the transaction can no longer be
-            cancelled, or is now able to be cancelled.
-          </doc:para>
-        </doc:description>
-      </doc:doc>
-      <arg type="b" name="allow_cancel" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              If the backend is in a cancelable state.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-    </signal>
-
-    <!--*****************************************************************************************-->
-    <signal name="CallerActiveChanged">
-      <doc:doc>
-        <doc:description>
-          <doc:para>
-            This signal is emitted when the session program that started the transaction exits.
-          </doc:para>
-        </doc:description>
-      </doc:doc>
-      <arg type="b" name="is_active" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              If the caller is active, usually FALSE.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-    </signal>
-
-    <!--*****************************************************************************************-->
-    <signal name="Category">
-      <doc:doc>
-        <doc:description>
-          <doc:para>
-            This signal send information about a collection category
-          </doc:para>
-        </doc:description>
-      </doc:doc>
-      <arg type="s" name="parent_id" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              The parent identifier, e.g. <doc:tt>applications</doc:tt>.
-              If the category is a root entry, use a blank parent.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-      <arg type="s" name="cat_id" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              The category identifier, e.g. <doc:tt>applications;system-tools</doc:tt>.
-              The identifier does not have to be related to the <doc:tt>parent_id</doc:tt>
-              in any way.
-              A menu tree is made from multiple Category signals.
-              The tree does not have any depth or bredth limits, although it should be kept
-              to less than about 100 entries as this will be shown to the user in a menu.
-            </doc:para>
-            <doc:para>
-              The <doc:tt>cat_id</doc:tt> will be sent as a parameter to <doc:tt>SearchGroup</doc:tt>
-              so you may have to prefix or otherwise identify the ID to not confuse the search method.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-      <arg type="s" name="name" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              The localised name of the category, e.g. <doc:tt>System Tools</doc:tt>.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-      <arg type="s" name="summary" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              The localised category summary, e.g. <doc:tt>Tools for mangaing system state</doc:tt>.
-              This is not normally shown in the menus, but may be shown in helper popups.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-      <arg type="s" name="icon" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              The icon name for the category, e.g. <doc:tt>server-cfg</doc:tt>.
-              If the icon is not known, then it should be set to <doc:tt>image-missing</doc:tt>.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-    </signal>
-
-    <!--*****************************************************************************************-->
-    <signal name="Details">
-      <doc:doc>
-        <doc:description>
-          <doc:para>
-            This signal allows the backend to convey more details about the package.
-          </doc:para>
-        </doc:description>
-      </doc:doc>
-      <arg type="s" name="package_id" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              The package ID
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-      <arg type="s" name="license" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              The license string, e.g. <doc:tt>GPLv2+</doc:tt> or <doc:tt>BSD and (MPLv1.1 or GPLv2+)</doc:tt>.
-            </doc:para>
-            <doc:para>
-              More details about the correct way to format licensing strings can be found on the
-              <doc:ulink url="http://fedoraproject.org/wiki/Packaging/LicensingGuidelines">Fedora packaging wiki</doc:ulink>.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-      <arg type="s" name="group" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              The enumerated package group description
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-      <arg type="s" name="detail" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              The multi-line package description.
-              NOTE: Tabs may have to be stripped from the description to avoid being split.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-      <arg type="s" name="url" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              The upstream project homepage
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-      <arg type="t" name="size" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              The size of the package in bytes. This should be the size of the entire package file,
-              not the size of the files installed on the system.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-    </signal>
-
-    <!--*****************************************************************************************-->
-    <signal name="ErrorCode">
-      <doc:doc>
-        <doc:description>
-          <doc:para>
-            This signal is used to report errors back to the session program.
-          </doc:para>
-          <doc:para>
-            Errors should only be send on fatal abort.
-          </doc:para>
-        </doc:description>
-      </doc:doc>
-      <arg type="s" name="code" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              Enumerated type, e.g. <doc:tt>no-network</doc:tt>.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-      <arg type="s" name="details" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              Long description or error, e.g. <doc:tt>failed to connect to mytry.xml</doc:tt>
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-    </signal>
-
-    <!--*****************************************************************************************-->
-    <signal name="Files">
-      <doc:doc>
-        <doc:description>
-          <doc:para>
-            This signal is used to push file lists from the backend to the session.
-          </doc:para>
-        </doc:description>
-      </doc:doc>
-      <arg type="s" name="package_id" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              The Package ID that called the method.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-      <arg type="s" name="file_list" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              The file list, with each file seporated with <doc:tt>;</doc:tt>.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-    </signal>
-
-    <!--*****************************************************************************************-->
-    <signal name="Finished">
-      <doc:doc>
-        <doc:description>
-          <doc:para>
-            This signal is used to signal that the transaction has finished.
-          </doc:para>
-        </doc:description>
-      </doc:doc>
-      <arg type="s" name="exit" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              The PkExitEnum describing the exit status of the transaction.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-      <arg type="u" name="runtime" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              The amount of time in milliseconds that the transaction ran for.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-    </signal>
-
-    <!--*****************************************************************************************-->
-    <signal name="Message">
-      <doc:doc>
-        <doc:description>
-          <doc:para>
-            This signal is sent when the backend wants to send a message to the session.
-          </doc:para>
-          <doc:para>
-            This allows the backend to queue up a message to be shown after the transaction has
-            completed.
-          </doc:para>
-        </doc:description>
-      </doc:doc>
-      <arg type="s" name="type" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              One of <doc:tt>warning</doc:tt>, <doc:tt>notice</doc:tt>, or
-              <doc:tt>daemon</doc:tt>.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-      <arg type="s" name="details" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              Required details about the message, non-localised.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-    </signal>
-
-    <!--*****************************************************************************************-->
-    <signal name="Package">
-      <doc:doc>
-        <doc:description>
-          <doc:para>
-            This signal allows the backend to communicate packages to the session.
-          </doc:para>
-          <doc:para>
-            If updating, as packages are updated then emit them to the screen.
-            This allows a summary to be presented after the transaction.
-          </doc:para>
-          <doc:para>
-            When returning results from a search always return
-            <doc:tt>installed</doc:tt> before <doc:tt>available</doc:tt> for
-            the same package name.
-          </doc:para>
-        </doc:description>
-      </doc:doc>
-      <arg type="s" name="info" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              A valid <doc:tt>info</doc:tt> string enumerated type
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-      <arg type="s" name="package_id" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              A valid package ID string with as much data as known
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-      <arg type="s" name="summary" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              The one line package summary, e.g. Clipart for OpenOffice
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-    </signal>
-
-    <!--*****************************************************************************************-->
-    <signal name="ProgressChanged">
-      <doc:doc>
-        <doc:description>
-          <doc:para>
-            This signal describes the completion of the transaction.
-          </doc:para>
-          <doc:para>
-            This is optional.
-            Backends should send the percentage fields to 101 if the amount complete
-            cannot be calculated.
-          </doc:para>
-        </doc:description>
-      </doc:doc>
-      <arg type="u" name="percentage" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              The percentage complete of the whole transaction.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-      <arg type="u" name="subpercentage" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              The percentage complete of the individual task, for example, downloading.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-      <arg type="u" name="elapsed" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              The amount of time in seconds this transaction has been in the
-              running state
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-      <arg type="u" name="remaining" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              The amount of time in seconds this transaction will take to
-              complete. Zero is sent for unknown.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-    </signal>
-
-    <!--*****************************************************************************************-->
-    <signal name="RepoDetail">
-      <doc:doc>
-        <doc:description>
-          <doc:para>
-            This signal describes a repository on the system.
-          </doc:para>
-        </doc:description>
-      </doc:doc>
-      <arg type="s" name="repo_id" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              The repository ID.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-      <arg type="s" name="description" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              A description of the repository.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-      <arg type="b" name="enabled" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              If the repository is enabled and in use.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-    </signal>
-
-    <!--*****************************************************************************************-->
-    <signal name="RepoSignatureRequired">
-      <doc:doc>
-        <doc:description>
-          <doc:para>
-            This signal is emitted when a transaction is not possible due to a missing security
-            certificate.
-          </doc:para>
-          <doc:para>
-            Some backends support repositories which use a cryptographic
-            signature, such as GPG. If a package cannot be installed
-            because it is signed with a key that has not been verified,
-            this signal is generated so the user can choose to accept or
-            decline the key.
-          </doc:para>
-          <doc:para>
-            This signal includes information that can be used to verify
-            that the key should be trusted, such as a URL for the company
-            or person who owns the key, the key's ID, the userid of
-            the key creator, and the date the key was generated.
-          </doc:para>
-        </doc:description>
-      </doc:doc>
-      <arg type="s" name="package_id" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              A package ID for the package that is trying to be installed
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-      <arg type="s" name="repository_name" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              The name of the repository associated with the provided key.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-      <arg type="s" name="key_url" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              The URL provided with the key.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-      <arg type="s" name="key_userid" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              The user id associated with the key.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-      <arg type="s" name="key_id" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              A unique identifier for the key.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-      <arg type="s" name="key_fingerprint" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              The hashed fingerprint of the key.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-      <arg type="s" name="key_timestamp" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              The date the key was created.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-      <arg type="s" name="type" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              The type of signature used. <doc:tt>gpg</doc:tt>, for example.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-    </signal>
-
-    <!--*****************************************************************************************-->
-    <signal name="EulaRequired">
-      <doc:doc>
-        <doc:description>
-          <doc:para>
-            This signal is emitted when a transaction is not possible due to a EULA that needs to
-            be agreed to at install time.
-          </doc:para>
-          <doc:para>
-            Some backends support EULAs, which have to be agreed to before the install can proceed.
-          </doc:para>
-        </doc:description>
-      </doc:doc>
-      <arg type="s" name="eula_id" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              The <doc:tt>eula_id</doc:tt> which identifies the EULA - this is provided
-              so that if a specific EULA has previously agreed to a EULA from Acme Corp it is
-              not asked again.
-              An example <doc:tt>eula_id</doc:tt>'s is <doc:tt>vmware5_single_user</doc:tt>.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-      <arg type="s" name="package_id" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              A package ID for the package that is trying to be installed.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-      <arg type="s" name="vendor_name" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              The vendor that is providing the EULA.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-      <arg type="s" name="license_agreement" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              The full text EULA.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-    </signal>
-
-    <!--*****************************************************************************************-->
-    <signal name="RequireRestart">
-      <doc:doc>
-        <doc:description>
-          <doc:para>
-            This signal is sent when the session program should notify the user that a restart is
-            required.
-          </doc:para>
-          <doc:para>
-            This is optional, but highly recommended.
-          </doc:para>
-          <doc:para>
-            This can be sent as many times as needed by the backend script.
-            PackageKit will always choose the 'worst' method in the UI notification.
-          </doc:para>
-        </doc:description>
-      </doc:doc>
-      <arg type="s" name="type" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              One of <doc:tt>system</doc:tt>, <doc:tt>application</doc:tt> or
-              <doc:tt>session</doc:tt>.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-      <arg type="s" name="details" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              Optional details about the restart
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-    </signal>
-
-    <!--*****************************************************************************************-->
-    <signal name="StatusChanged">
-      <doc:doc>
-        <doc:description>
-          <doc:para>
-            This signal is sent when the status of the transaction has changed.
-          </doc:para>
-          <doc:para>
-            This is optional, but highly recommended.
-            It gives the GUI tools a chance to show a different icon to show what stage the
-            transaction is in, for instance, a downloading icon can be shown whilst in the
-            <doc:tt>download</doc:tt> state.
-          </doc:para>
-        </doc:description>
-      </doc:doc>
-      <arg type="s" name="status" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              One of <doc:tt>download</doc:tt>, <doc:tt>install</doc:tt>,
-              <doc:tt>update</doc:tt> or <doc:tt>remove</doc:tt>.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-    </signal>
-
-    <!--*****************************************************************************************-->
-    <signal name="Transaction">
-      <doc:doc>
-        <doc:description>
-          <doc:para>
-            This signal is sent when more details are required about a specific transaction.
-          </doc:para>
-        </doc:description>
-      </doc:doc>
-      <arg type="s" name="old_tid" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              The transaction ID of the old transaction.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-      <arg type="s" name="timespec" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              The timespec of the old transaction in ISO8601 format.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-      <arg type="b" name="succeeded" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              If the transaction succeeded.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-      <arg type="s" name="role" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              The role enumerated type.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-      <arg type="u" name="duration" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              The duration of the transaction in milliseconds.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-      <arg type="s" name="data" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              Any data associated with the transaction.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-    </signal>
-
-    <!--*****************************************************************************************-->
-    <signal name="UpdateDetail">
-      <doc:doc>
-        <doc:description>
-          <doc:para>
-            This signal is sent when more details are required about a specific update.
-          </doc:para>
-        </doc:description>
-      </doc:doc>
-      <arg type="s" name="package_id" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              The package ID
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-      <arg type="s" name="updates" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              A list of package_id's that are to be updated, seporated by <doc:tt>&amp;</doc:tt>.
-              This odd delimited was chosen as <doc:tt>\t</doc:tt> is already being used in the
-              spawned backends, and <doc:tt>&amp;</doc:tt> is a banned character in a package_id.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-      <arg type="s" name="obsoletes" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              A list of package_id's that are to be obsoleted, separated by <doc:tt>&amp;</doc:tt>
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-      <arg type="s" name="vendor_url" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              A URL with more details on the update, e.g. a page with more
-              information on the update.
-              The format of this command should be
-              <doc:tt>http://www.foo.org/page.html?4567;Update to SELinux</doc:tt>
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-      <arg type="s" name="bugzilla_url" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              A bugzilla URL with more details on the update.
-              If no URL is available then this field should be left empty.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-      <arg type="s" name="cve_url" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              A CVE URL with more details on the security advisory.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-      <arg type="s" name="restart" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              A valid restart type, e.g. <doc:tt>system</doc:tt>.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-      <arg type="s" name="update_text" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              The update text describing the update in a non-localised way.
-              Newlines should be converted to <doc:tt>;</doc:tt> before printed.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-      <arg type="s" name="changelog" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              The ChangeLog text describing the changes since the last version.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-      <arg type="s" name="state" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              The state of the update, e.g. <doc:tt>stable</doc:tt> or
-              <doc:tt>testing</doc:tt>.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-      <arg type="s" name="issued" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              The ISO8601 encoded date that the update was issued.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-      <arg type="s" name="updated" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              The ISO8601 encoded date that the update was updated.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-    </signal>
-
-    <!--*****************************************************************************************-->
-    <signal name="DistroUpgrade">
-      <doc:doc>
-        <doc:description>
-          <doc:para>
-            This signal allows the backend to communicate distribution
-            upgrades to the session.
-          </doc:para>
-        </doc:description>
-      </doc:doc>
-      <arg type="s" name="type" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              A valid upgrade string enumerated type, e.g. <doc:tt>stable</doc:tt>
-              or <doc:tt>unstable</doc:tt>
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-      <arg type="s" name="name" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              The short name of the distribution, e.g. <doc:tt>Fedora Core 10 RC1</doc:tt>
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-      <arg type="s" name="summary" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              The multi-line description of the release.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-    </signal>
-
-    <!--*****************************************************************************************-->
-    <signal name="Destroy">
-      <doc:doc>
-        <doc:description>
-          <doc:para>
-            This signal is sent when the transaction has been destroyed and is
-            no longer available for use.
-          </doc:para>
-        </doc:description>
-      </doc:doc>
-    </signal>
-
-  </interface>
-</node>
-
diff --git a/src/pk-interface.xml b/src/pk-interface.xml
deleted file mode 100644
index 6aa07d3..0000000
--- a/src/pk-interface.xml
+++ /dev/null
@@ -1,380 +0,0 @@
-<!DOCTYPE node PUBLIC
-"-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
-"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd" [
-  <!ENTITY ERROR_GENERAL "org.freedesktop.packagekit.Denied">
-]>
-<node name="/" xmlns:doc="http://www.freedesktop.org/dbus/1.0/doc.dtd">
-  <interface name="org.freedesktop.PackageKit">
-    <doc:doc>
-      <doc:description>
-        <doc:para>
-          The root interface is used for interacting with the daemon.
-        </doc:para>
-      </doc:description>
-    </doc:doc>
-
-    <!--*****************************************************************************************-->
-    <method name="GetActions">
-      <doc:doc>
-        <doc:description>
-          <doc:para>
-            Gets a list of all the actions that are supported by the backend.
-          </doc:para>
-        </doc:description>
-      </doc:doc>
-      <arg type="s" name="actions" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              A list of actions, e.g. <doc:tt>search-name;get-updates;update-system</doc:tt>
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-    </method>
-
-    <!--*****************************************************************************************-->
-    <method name="GetBackendDetail">
-      <doc:doc>
-        <doc:description>
-          <doc:para>
-            Gets any details about the backend being used by PackageKit
-          </doc:para>
-        </doc:description>
-      </doc:doc>
-      <arg type="s" name="name" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              The name of the backend, e.g. yum
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-      <arg type="s" name="author" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              The author of the backend, e.g. <doc:tt>Richard Hughes &lt;richard at hughsie.com&gt;</doc:tt>
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-    </method>
-
-    <!--*****************************************************************************************-->
-    <method name="GetFilters">
-      <doc:doc>
-        <doc:description>
-          <doc:para>
-            Gets the list of filters that the backend supports
-          </doc:para>
-        </doc:description>
-      </doc:doc>
-      <arg type="s" name="filters" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              The list of filters as a string, e.g. <doc:tt>installed;devel</doc:tt>
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-    </method>
-
-    <!--*****************************************************************************************-->
-    <method name="GetGroups">
-      <doc:doc>
-        <doc:description>
-          <doc:para>
-            Gets the groups that are supported
-          </doc:para>
-        </doc:description>
-      </doc:doc>
-      <arg type="s" name="groups" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              The group list, e.g. <doc:tt>accesories;games;system</doc:tt>
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-    </method>
-
-    <!--*****************************************************************************************-->
-    <method name="GetMimeTypes">
-      <doc:doc>
-        <doc:description>
-          <doc:para>
-            Gets the MIME types of packages that are supported
-          </doc:para>
-        </doc:description>
-      </doc:doc>
-      <arg type="s" name="types" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              The MIME list, e.g. <doc:tt>application/x-rpm;application/x-deb</doc:tt>
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-    </method>
-
-    <!--*****************************************************************************************-->
-    <method name="GetTid">
-      <doc:doc>
-        <doc:description>
-          <doc:para>
-            Gets a new transaction ID from the daemon
-          </doc:para>
-        </doc:description>
-      </doc:doc>
-      <arg type="s" name="tid" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              The tid, e.g. <doc:tt>45_dafeca_checkpoint32</doc:tt>
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-    </method>
-
-    <!--*****************************************************************************************-->
-    <method name="GetTimeSinceAction">
-      <doc:doc>
-        <doc:description>
-          <doc:para>
-            This method allows us to query how long since an action has successfully completed.
-          </doc:para>
-        </doc:description>
-      </doc:doc>
-      <arg type="s" name="role" direction="in">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              The role, e.g. <doc:tt>update-system</doc:tt>
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-      <arg type="u" name="seconds" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              The amount of time in seconds
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-    </method>
-
-    <!--*****************************************************************************************-->
-    <method name="GetTransactionList">
-      <doc:doc>
-        <doc:description>
-          <doc:para>
-            Gets the transaction list of any transactions that are in progress
-          </doc:para>
-        </doc:description>
-      </doc:doc>
-      <arg type="as" name="transactions" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              A list of transaction ID's
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-    </method>
-
-    <!--*****************************************************************************************-->
-    <method name="StateHasChanged">
-      <doc:doc>
-        <doc:description>
-          <doc:para>
-            This method suggests to PackageKit that the package backend state may have changed.
-            This allows plugins to the native package manager to suggest that PackageKit drops
-            it's caches.
-          </doc:para>
-        </doc:description>
-      </doc:doc>
-      <arg type="s" name="reason" direction="in">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              The reason of the state change. Valid reasons are <doc:tt>resume</doc:tt> or
-              <doc:tt>posttrans</doc:tt>.
-              Resume is given a lower priority than posttrans.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-    </method>
-
-    <!--*****************************************************************************************-->
-    <method name="SuggestDaemonQuit">
-      <doc:doc>
-        <doc:description>
-          <doc:para>
-            Suggests to the daemon that it should quit as soon as possible, for instance if a native
-            package management tool is waiting to be used.
-          </doc:para>
-        </doc:description>
-      </doc:doc>
-    </method>
-
-    <!--*****************************************************************************************-->
-    <method name="GetNetworkState">
-      <doc:doc>
-        <doc:description>
-          <doc:para>
-            Gets the network state from the daemon. This is provided as some clients may not want
-            to use NetworkManager if the system daemon is configured to use something else.
-          </doc:para>
-        </doc:description>
-      </doc:doc>
-      <arg type="s" name="state" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              The network state, e.g. <doc:tt>unknown</doc:tt>,
-              <doc:tt>offline</doc:tt> or <doc:tt>online</doc:tt>.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-    </method>
-
-    <!--*****************************************************************************************-->
-    <method name="SetProxy">
-      <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
-      <doc:doc>
-        <doc:description>
-          <doc:para>
-            Sets the proxy used by the dameon.
-          </doc:para>
-        </doc:description>
-        <doc:permission>Callers need the org.freedesktop.packagekit.set-proxy</doc:permission>
-      </doc:doc>
-      <arg type="s" name="proxy_http" direction="in">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              The HTTP 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>
-            <doc:para>
-              The FTP proxy, e.g. <doc:tt>username:password at server:port</doc:tt>.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-    </method>
-
-
-    <!--*****************************************************************************************-->
-    <signal name="TransactionListChanged">
-      <doc:doc>
-        <doc:description>
-          <doc:para>
-            The transaction list has changed, because either a transaction has finished or a new
-            transaction created.
-          </doc:para>
-        </doc:description>
-      </doc:doc>
-      <arg type="as" name="transactions" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              A list of transaction ID's.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-    </signal>
-
-    <!--*****************************************************************************************-->
-    <signal name="Locked">
-      <doc:doc>
-        <doc:description>
-          <doc:para>
-            This signal is emitted when the backend is locked and native tools would fail.
-          </doc:para>
-        </doc:description>
-      </doc:doc>
-      <arg type="b" name="is_locked" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              If we have locked the package backend.
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-    </signal>
-
-    <!--*****************************************************************************************-->
-    <signal name="NetworkStateChanged">
-      <doc:doc>
-        <doc:description>
-          <doc:para>
-            This signal is emitted when the network state has changed
-          </doc:para>
-        </doc:description>
-      </doc:doc>
-      <arg type="s" name="state" direction="out">
-        <doc:doc>
-          <doc:summary>
-            <doc:para>
-              The new network state
-            </doc:para>
-          </doc:summary>
-        </doc:doc>
-      </arg>
-    </signal>
-
-    <!--*****************************************************************************************-->
-    <signal name="RestartSchedule">
-      <doc:doc>
-        <doc:description>
-          <doc:para>
-            A system restart has been sceduled
-          </doc:para>
-        </doc:description>
-      </doc:doc>
-    </signal>
-
-    <!--*****************************************************************************************-->
-    <signal name="RepoListChanged">
-      <doc:doc>
-        <doc:description>
-          <doc:para>
-            This signal is emitted when the repository list has changed
-          </doc:para>
-        </doc:description>
-      </doc:doc>
-    </signal>
-
-    <!--*****************************************************************************************-->
-    <signal name="UpdatesChanged">
-      <doc:doc>
-        <doc:description>
-          <doc:para>
-            This signal is emitted when the number of updates has changed
-          </doc:para>
-        </doc:description>
-      </doc:doc>
-    </signal>
-
-  </interface>
-</node>
-
diff --git a/src/pk-main.c b/src/pk-main.c
index c1a262a..32eea39 100644
--- a/src/pk-main.c
+++ b/src/pk-main.c
@@ -38,7 +38,7 @@
 #include "pk-engine.h"
 #include "pk-transaction.h"
 #include "pk-backend-internal.h"
-#include "pk-interface.h"
+#include "org.freedesktop.PackageKit.h"
 
 static guint exit_idle_time;
 static PkEngine *engine = NULL;
diff --git a/src/pk-transaction-list.c b/src/pk-transaction-list.c
index 2e5a018..1065f9d 100644
--- a/src/pk-transaction-list.c
+++ b/src/pk-transaction-list.c
@@ -44,7 +44,7 @@
 
 #include "pk-transaction-id.h"
 #include "pk-transaction-list.h"
-#include "pk-interface-transaction.h"
+#include "org.freedesktop.PackageKit.Transaction.h"
 
 static void     pk_transaction_list_class_init	(PkTransactionListClass *klass);
 static void     pk_transaction_list_init	(PkTransactionList      *tlist);
diff --git a/tools/add-method.sh b/tools/add-method.sh
index 59e55d4..040bba9 100755
--- a/tools/add-method.sh
+++ b/tools/add-method.sh
@@ -7,5 +7,5 @@
 # the Free Software Foundation; either version 2 of the License, or
 # (at your option) any later version.
 
-$EDITOR docs/spec/pk-methods.xml src/pk-interface-transaction.xml src/pk-transaction.h src/pk-transaction.c  python/packagekit/backend.py python/packagekit/daemonBackend.py libpackagekit/pk-client.h libpackagekit/pk-client.c  libpackagekit/pk-enum.h libpackagekit/pk-enum.c client/pk-console.c backends/*/pk-*.c* src/pk-backend-dbus.c src/pk-backend-dbus.h contrib/*.bash src/pk-engine.c src/pk-backend.h docs/html/pk-faq.html ../gnome-packagekit/src/gpk-common.c
+$EDITOR docs/spec/pk-methods.xml src/org.freedesktop.PackageKit.Transaction.xml src/pk-transaction.h src/pk-transaction.c  python/packagekit/backend.py python/packagekit/daemonBackend.py libpackagekit/pk-client.h libpackagekit/pk-client.c  libpackagekit/pk-enum.h libpackagekit/pk-enum.c client/pk-console.c backends/*/pk-*.c* src/pk-backend-dbus.c src/pk-backend-dbus.h contrib/*.bash src/pk-engine.c src/pk-backend.h docs/html/pk-faq.html ../gnome-packagekit/src/gpk-common.c
 
commit a305e07cd9196b3f5bc183ef08aff6ede3e9f891
Author: Richard Hughes <richard at hughsie.com>
Date:   Wed Nov 5 11:22:11 2008 +0000

    trivial: add in a small self check in the glib library so we are not trying to reuse the instance before it's been reset

diff --git a/lib/packagekit-glib/pk-client.c b/lib/packagekit-glib/pk-client.c
index 01fc447..eb4e6f8 100644
--- a/lib/packagekit-glib/pk-client.c
+++ b/lib/packagekit-glib/pk-client.c
@@ -1285,6 +1285,12 @@ pk_client_get_updates (PkClient *client, PkBitfield filters, GError **error)
 	g_return_val_if_fail (PK_IS_CLIENT (client), FALSE);
 	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
 
+	/* ensure we are not trying to run without reset */
+	if (client->priv->tid != NULL) {
+		pk_client_error_set (error, PK_CLIENT_ERROR_FAILED, "TID already set to %s", client->priv->tid);
+		return FALSE;
+	}
+
 	/* get and set a new ID */
 	ret = pk_client_allocate_transaction_id (client, error);
 	if (!ret)
@@ -1333,6 +1339,12 @@ pk_client_get_categories (PkClient *client, GError **error)
 	g_return_val_if_fail (PK_IS_CLIENT (client), FALSE);
 	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
 
+	/* ensure we are not trying to run without reset */
+	if (client->priv->tid != NULL) {
+		pk_client_error_set (error, PK_CLIENT_ERROR_FAILED, "TID already set to %s", client->priv->tid);
+		return FALSE;
+	}
+
 	/* get and set a new ID */
 	ret = pk_client_allocate_transaction_id (client, error);
 	if (!ret)
@@ -1409,6 +1421,12 @@ pk_client_update_system (PkClient *client, GError **error)
 	g_return_val_if_fail (PK_IS_CLIENT (client), FALSE);
 	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
 
+	/* ensure we are not trying to run without reset */
+	if (client->priv->tid != NULL) {
+		pk_client_error_set (error, PK_CLIENT_ERROR_FAILED, "TID already set to %s", client->priv->tid);
+		return FALSE;
+	}
+
 	/* get and set a new ID */
 	ret = pk_client_allocate_transaction_id (client, error);
 	if (!ret)
@@ -1475,6 +1493,12 @@ pk_client_search_name (PkClient *client, PkBitfield filters, const gchar *search
 	g_return_val_if_fail (PK_IS_CLIENT (client), FALSE);
 	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
 
+	/* ensure we are not trying to run without reset */
+	if (client->priv->tid != NULL) {
+		pk_client_error_set (error, PK_CLIENT_ERROR_FAILED, "TID already set to %s", client->priv->tid);
+		return FALSE;
+	}
+
 	/* get and set a new ID */
 	ret = pk_client_allocate_transaction_id (client, error);
 	if (!ret)
@@ -1530,6 +1554,12 @@ pk_client_search_details (PkClient *client, PkBitfield filters, const gchar *sea
 	g_return_val_if_fail (PK_IS_CLIENT (client), FALSE);
 	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
 
+	/* ensure we are not trying to run without reset */
+	if (client->priv->tid != NULL) {
+		pk_client_error_set (error, PK_CLIENT_ERROR_FAILED, "TID already set to %s", client->priv->tid);
+		return FALSE;
+	}
+
 	/* get and set a new ID */
 	ret = pk_client_allocate_transaction_id (client, error);
 	if (!ret)
@@ -1583,6 +1613,12 @@ pk_client_search_group (PkClient *client, PkBitfield filters, const gchar *searc
 	g_return_val_if_fail (PK_IS_CLIENT (client), FALSE);
 	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
 
+	/* ensure we are not trying to run without reset */
+	if (client->priv->tid != NULL) {
+		pk_client_error_set (error, PK_CLIENT_ERROR_FAILED, "TID already set to %s", client->priv->tid);
+		return FALSE;
+	}
+
 	/* get and set a new ID */
 	ret = pk_client_allocate_transaction_id (client, error);
 	if (!ret)
@@ -1636,6 +1672,12 @@ pk_client_search_file (PkClient *client, PkBitfield filters, const gchar *search
 	g_return_val_if_fail (PK_IS_CLIENT (client), FALSE);
 	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
 
+	/* ensure we are not trying to run without reset */
+	if (client->priv->tid != NULL) {
+		pk_client_error_set (error, PK_CLIENT_ERROR_FAILED, "TID already set to %s", client->priv->tid);
+		return FALSE;
+	}
+
 	/* get and set a new ID */
 	ret = pk_client_allocate_transaction_id (client, error);
 	if (!ret)
@@ -1692,6 +1734,12 @@ pk_client_get_depends (PkClient *client, PkBitfield filters, gchar **package_ids
 	g_return_val_if_fail (package_ids != NULL, FALSE);
 	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
 
+	/* ensure we are not trying to run without reset */
+	if (client->priv->tid != NULL) {
+		pk_client_error_set (error, PK_CLIENT_ERROR_FAILED, "TID already set to %s", client->priv->tid);
+		return FALSE;
+	}
+
 	/* check the PackageIDs here to avoid a round trip if invalid */
 	ret = pk_package_ids_check (package_ids);
 	if (!ret) {
@@ -1749,52 +1797,58 @@ pk_client_get_depends (PkClient *client, PkBitfield filters, gchar **package_ids
 gboolean
 pk_client_download_packages (PkClient *client, gchar **package_ids, const gchar *directory, GError **error)
 {
-        gboolean ret;
-        gchar *package_ids_temp;
+	gboolean ret;
+	gchar *package_ids_temp;
 
-        g_return_val_if_fail (PK_IS_CLIENT (client), FALSE);
-        g_return_val_if_fail (package_ids != NULL, FALSE);
+	g_return_val_if_fail (PK_IS_CLIENT (client), FALSE);
+	g_return_val_if_fail (package_ids != NULL, FALSE);
 	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
 
-        /* check the PackageIDs here to avoid a round trip if invalid */
-        ret = pk_package_ids_check (package_ids);
-        if (!ret) {
-                package_ids_temp = pk_package_ids_to_text (package_ids);
-                pk_client_error_set (error, PK_CLIENT_ERROR_INVALID_INPUT,
-                                     "package_ids '%s' are not valid", package_ids_temp);
-                g_free (package_ids_temp);
-                return FALSE;
-        }
-
-        /* get and set a new ID */
-        ret = pk_client_allocate_transaction_id (client, error);
-        if (!ret) {
-                return FALSE;
-        }
-
-        /* save this so we can re-issue it */
-        client->priv->role = PK_ROLE_ENUM_DOWNLOAD_PACKAGES;
-        client->priv->cached_package_ids = g_strdupv (package_ids);
-        client->priv->cached_directory = g_strdup (directory);
-
-        /* check to see if we have a valid proxy */
-        if (client->priv->proxy == NULL) {
-                pk_client_error_set (error, PK_CLIENT_ERROR_NO_TID, "No proxy for transaction");
-                return FALSE;
-        }
-        ret = dbus_g_proxy_call (client->priv->proxy, "DownloadPackages", error,
-                                 G_TYPE_STRV, package_ids,
-                                 G_TYPE_INVALID, G_TYPE_INVALID);
-        if (ret && !client->priv->is_finished) {
-                /* allow clients to respond in the status changed callback */
-                pk_client_change_status (client, PK_STATUS_ENUM_WAIT);
-
-                /* spin until finished */
-                if (client->priv->synchronous)
-                        g_main_loop_run (client->priv->loop);
-        }
-        pk_client_error_fixup (error);
-        return ret;
+	/* ensure we are not trying to run without reset */
+	if (client->priv->tid != NULL) {
+		pk_client_error_set (error, PK_CLIENT_ERROR_FAILED, "TID already set to %s", client->priv->tid);
+		return FALSE;
+	}
+
+	/* check the PackageIDs here to avoid a round trip if invalid */
+	ret = pk_package_ids_check (package_ids);
+	if (!ret) {
+		package_ids_temp = pk_package_ids_to_text (package_ids);
+		pk_client_error_set (error, PK_CLIENT_ERROR_INVALID_INPUT,
+				     "package_ids '%s' are not valid", package_ids_temp);
+		g_free (package_ids_temp);
+		return FALSE;
+	}
+
+	/* get and set a new ID */
+	ret = pk_client_allocate_transaction_id (client, error);
+	if (!ret) {
+		return FALSE;
+	}
+
+	/* save this so we can re-issue it */
+	client->priv->role = PK_ROLE_ENUM_DOWNLOAD_PACKAGES;
+	client->priv->cached_package_ids = g_strdupv (package_ids);
+	client->priv->cached_directory = g_strdup (directory);
+
+	/* check to see if we have a valid proxy */
+	if (client->priv->proxy == NULL) {
+		pk_client_error_set (error, PK_CLIENT_ERROR_NO_TID, "No proxy for transaction");
+		return FALSE;
+	}
+	ret = dbus_g_proxy_call (client->priv->proxy, "DownloadPackages", error,
+				 G_TYPE_STRV, package_ids,
+				 G_TYPE_INVALID, G_TYPE_INVALID);
+	if (ret && !client->priv->is_finished) {
+		/* allow clients to respond in the status changed callback */
+		pk_client_change_status (client, PK_STATUS_ENUM_WAIT);
+
+		/* spin until finished */
+		if (client->priv->synchronous)
+			g_main_loop_run (client->priv->loop);
+	}
+	pk_client_error_fixup (error);
+	return ret;
 }
 
 
@@ -1817,6 +1871,12 @@ pk_client_get_packages (PkClient *client, PkBitfield filters, GError **error)
 	g_return_val_if_fail (PK_IS_CLIENT (client), FALSE);
 	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
 
+	/* ensure we are not trying to run without reset */
+	if (client->priv->tid != NULL) {
+		pk_client_error_set (error, PK_CLIENT_ERROR_FAILED, "TID already set to %s", client->priv->tid);
+		return FALSE;
+	}
+
 	/* get and set a new ID */
 	ret = pk_client_allocate_transaction_id (client, error);
 	if (!ret)
@@ -1904,6 +1964,12 @@ pk_client_get_requires (PkClient *client, PkBitfield filters, gchar **package_id
 	g_return_val_if_fail (package_ids != NULL, FALSE);
 	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
 
+	/* ensure we are not trying to run without reset */
+	if (client->priv->tid != NULL) {
+		pk_client_error_set (error, PK_CLIENT_ERROR_FAILED, "TID already set to %s", client->priv->tid);
+		return FALSE;
+	}
+
 	/* check the PackageIDs here to avoid a round trip if invalid */
 	ret = pk_package_ids_check (package_ids);
 	if (!ret) {
@@ -1976,6 +2042,12 @@ pk_client_what_provides (PkClient *client, PkBitfield filters, PkProvidesEnum pr
 	g_return_val_if_fail (search != NULL, FALSE);
 	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
 
+	/* ensure we are not trying to run without reset */
+	if (client->priv->tid != NULL) {
+		pk_client_error_set (error, PK_CLIENT_ERROR_FAILED, "TID already set to %s", client->priv->tid);
+		return FALSE;
+	}
+
 	/* get and set a new ID */
 	ret = pk_client_allocate_transaction_id (client, error);
 	if (!ret)
@@ -2034,6 +2106,12 @@ pk_client_get_update_detail (PkClient *client, gchar **package_ids, GError **err
 	g_return_val_if_fail (package_ids != NULL, FALSE);
 	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
 
+	/* ensure we are not trying to run without reset */
+	if (client->priv->tid != NULL) {
+		pk_client_error_set (error, PK_CLIENT_ERROR_FAILED, "TID already set to %s", client->priv->tid);
+		return FALSE;
+	}
+
 	/* check the PackageIDs here to avoid a round trip if invalid */
 	ret = pk_package_ids_check (package_ids);
 	if (!ret) {
@@ -2096,6 +2174,12 @@ pk_client_rollback (PkClient *client, const gchar *transaction_id, GError **erro
 	g_return_val_if_fail (PK_IS_CLIENT (client), FALSE);
 	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
 
+	/* ensure we are not trying to run without reset */
+	if (client->priv->tid != NULL) {
+		pk_client_error_set (error, PK_CLIENT_ERROR_FAILED, "TID already set to %s", client->priv->tid);
+		return FALSE;
+	}
+
 	/* get and set a new ID */
 	ret = pk_client_allocate_transaction_id (client, error);
 	if (!ret)
@@ -2148,6 +2232,12 @@ pk_client_resolve (PkClient *client, PkBitfield filters, gchar **packages, GErro
 	g_return_val_if_fail (packages != NULL, FALSE);
 	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
 
+	/* ensure we are not trying to run without reset */
+	if (client->priv->tid != NULL) {
+		pk_client_error_set (error, PK_CLIENT_ERROR_FAILED, "TID already set to %s", client->priv->tid);
+		return FALSE;
+	}
+
 	/* get and set a new ID */
 	ret = pk_client_allocate_transaction_id (client, error);
 	if (!ret)
@@ -2202,6 +2292,12 @@ pk_client_get_details (PkClient *client, gchar **package_ids, GError **error)
 	g_return_val_if_fail (package_ids != NULL, FALSE);
 	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
 
+	/* ensure we are not trying to run without reset */
+	if (client->priv->tid != NULL) {
+		pk_client_error_set (error, PK_CLIENT_ERROR_FAILED, "TID already set to %s", client->priv->tid);
+		return FALSE;
+	}
+
 	/* check the PackageIDs here to avoid a round trip if invalid */
 	ret = pk_package_ids_check (package_ids);
 	if (!ret) {
@@ -2263,6 +2359,12 @@ pk_client_get_distro_upgrades (PkClient *client, GError **error)
 	g_return_val_if_fail (PK_IS_CLIENT (client), FALSE);
 	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
 
+	/* ensure we are not trying to run without reset */
+	if (client->priv->tid != NULL) {
+		pk_client_error_set (error, PK_CLIENT_ERROR_FAILED, "TID already set to %s", client->priv->tid);
+		return FALSE;
+	}
+
 	/* get and set a new ID */
 	ret = pk_client_allocate_transaction_id (client, error);
 	if (!ret)
@@ -2314,6 +2416,12 @@ pk_client_get_files (PkClient *client, gchar **package_ids, GError **error)
 	g_return_val_if_fail (package_ids != NULL, FALSE);
 	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
 
+	/* ensure we are not trying to run without reset */
+	if (client->priv->tid != NULL) {
+		pk_client_error_set (error, PK_CLIENT_ERROR_FAILED, "TID already set to %s", client->priv->tid);
+		return FALSE;
+	}
+
 	/* check the PackageIDs here to avoid a round trip if invalid */
 	ret = pk_package_ids_check (package_ids);
 	if (!ret) {
@@ -2367,6 +2475,12 @@ pk_client_remove_packages_action (PkClient *client, gchar **package_ids,
 	g_return_val_if_fail (PK_IS_CLIENT (client), FALSE);
 	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
 
+	/* ensure we are not trying to run without reset */
+	if (client->priv->tid != NULL) {
+		pk_client_error_set (error, PK_CLIENT_ERROR_FAILED, "TID already set to %s", client->priv->tid);
+		return FALSE;
+	}
+
 	/* check to see if we have a valid proxy */
 	if (client->priv->proxy == NULL) {
 		pk_client_error_set (error, PK_CLIENT_ERROR_NO_TID, "No proxy for transaction");
@@ -2406,6 +2520,12 @@ pk_client_remove_packages (PkClient *client, gchar **package_ids, gboolean allow
 	g_return_val_if_fail (package_ids != NULL, FALSE);
 	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
 
+	/* ensure we are not trying to run without reset */
+	if (client->priv->tid != NULL) {
+		pk_client_error_set (error, PK_CLIENT_ERROR_FAILED, "TID already set to %s", client->priv->tid);
+		return FALSE;
+	}
+
 	/* check the PackageIDs here to avoid a round trip if invalid */
 	ret = pk_package_ids_check (package_ids);
 	if (!ret) {
@@ -2509,6 +2629,12 @@ pk_client_refresh_cache (PkClient *client, gboolean force, GError **error)
 	g_return_val_if_fail (PK_IS_CLIENT (client), FALSE);
 	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
 
+	/* ensure we are not trying to run without reset */
+	if (client->priv->tid != NULL) {
+		pk_client_error_set (error, PK_CLIENT_ERROR_FAILED, "TID already set to %s", client->priv->tid);
+		return FALSE;
+	}
+
 	/* get and set a new ID */
 	ret = pk_client_allocate_transaction_id (client, error);
 	if (!ret)
@@ -2599,6 +2725,12 @@ pk_client_install_packages (PkClient *client, gchar **package_ids, GError **erro
 	g_return_val_if_fail (package_ids != NULL, FALSE);
 	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
 
+	/* ensure we are not trying to run without reset */
+	if (client->priv->tid != NULL) {
+		pk_client_error_set (error, PK_CLIENT_ERROR_FAILED, "TID already set to %s", client->priv->tid);
+		return FALSE;
+	}
+
 	/* check the PackageIDs here to avoid a round trip if invalid */
 	ret = pk_package_ids_check (package_ids);
 	if (!ret) {
@@ -2706,6 +2838,12 @@ pk_client_install_signature (PkClient *client, PkSigTypeEnum type, const gchar *
 	g_return_val_if_fail (package_id != NULL, FALSE);
 	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
 
+	/* ensure we are not trying to run without reset */
+	if (client->priv->tid != NULL) {
+		pk_client_error_set (error, PK_CLIENT_ERROR_FAILED, "TID already set to %s", client->priv->tid);
+		return FALSE;
+	}
+
 	/* check the PackageID here to avoid a round trip if invalid */
 	ret = pk_package_id_check (package_id);
 	if (!ret) {
@@ -2805,6 +2943,12 @@ pk_client_update_packages (PkClient *client, gchar **package_ids, GError **error
 	g_return_val_if_fail (package_ids != NULL, FALSE);
 	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
 
+	/* ensure we are not trying to run without reset */
+	if (client->priv->tid != NULL) {
+		pk_client_error_set (error, PK_CLIENT_ERROR_FAILED, "TID already set to %s", client->priv->tid);
+		return FALSE;
+	}
+
 	/* check the PackageIDs here to avoid a round trip if invalid */
 	ret = pk_package_ids_check (package_ids);
 	if (!ret) {
@@ -2943,6 +3087,12 @@ pk_client_install_files (PkClient *client, gboolean trusted, gchar **files_rel,
 	g_return_val_if_fail (files_rel != NULL, FALSE);
 	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
 
+	/* ensure we are not trying to run without reset */
+	if (client->priv->tid != NULL) {
+		pk_client_error_set (error, PK_CLIENT_ERROR_FAILED, "TID already set to %s", client->priv->tid);
+		return FALSE;
+	}
+
 	/* get and set a new ID */
 	ret = pk_client_allocate_transaction_id (client, error);
 	if (!ret)
@@ -3024,6 +3174,12 @@ pk_client_get_repo_list (PkClient *client, PkBitfield filters, GError **error)
 	g_return_val_if_fail (PK_IS_CLIENT (client), FALSE);
 	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
 
+	/* ensure we are not trying to run without reset */
+	if (client->priv->tid != NULL) {
+		pk_client_error_set (error, PK_CLIENT_ERROR_FAILED, "TID already set to %s", client->priv->tid);
+		return FALSE;
+	}
+
 	/* get and set a new ID */
 	ret = pk_client_allocate_transaction_id (client, error);
 	if (!ret)
@@ -3098,6 +3254,12 @@ pk_client_accept_eula (PkClient *client, const gchar *eula_id, GError **error)
 	g_return_val_if_fail (eula_id != NULL, FALSE);
 	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
 
+	/* ensure we are not trying to run without reset */
+	if (client->priv->tid != NULL) {
+		pk_client_error_set (error, PK_CLIENT_ERROR_FAILED, "TID already set to %s", client->priv->tid);
+		return FALSE;
+	}
+
 	/* get and set a new ID */
 	ret = pk_client_allocate_transaction_id (client, error);
 	if (!ret)
@@ -3188,6 +3350,12 @@ pk_client_repo_enable (PkClient *client, const gchar *repo_id, gboolean enabled,
 	g_return_val_if_fail (repo_id != NULL, FALSE);
 	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
 
+	/* ensure we are not trying to run without reset */
+	if (client->priv->tid != NULL) {
+		pk_client_error_set (error, PK_CLIENT_ERROR_FAILED, "TID already set to %s", client->priv->tid);
+		return FALSE;
+	}
+
 	/* get and set a new ID */
 	ret = pk_client_allocate_transaction_id (client, error);
 	if (!ret)
@@ -3248,6 +3416,12 @@ pk_client_repo_set_data_action (PkClient *client, const gchar *repo_id,
 	g_return_val_if_fail (PK_IS_CLIENT (client), FALSE);
 	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
 
+	/* ensure we are not trying to run without reset */
+	if (client->priv->tid != NULL) {
+		pk_client_error_set (error, PK_CLIENT_ERROR_FAILED, "TID already set to %s", client->priv->tid);
+		return FALSE;
+	}
+
 	/* check to see if we have a valid proxy */
 	if (client->priv->proxy == NULL) {
 		pk_client_error_set (error, PK_CLIENT_ERROR_NO_TID, "No proxy for transaction");
@@ -3287,6 +3461,12 @@ pk_client_repo_set_data (PkClient *client, const gchar *repo_id, const gchar *pa
 	g_return_val_if_fail (value != NULL, FALSE);
 	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
 
+	/* ensure we are not trying to run without reset */
+	if (client->priv->tid != NULL) {
+		pk_client_error_set (error, PK_CLIENT_ERROR_FAILED, "TID already set to %s", client->priv->tid);
+		return FALSE;
+	}
+
 	/* get and set a new ID */
 	ret = pk_client_allocate_transaction_id (client, error);
 	if (!ret)
@@ -3383,6 +3563,12 @@ pk_client_get_old_transactions (PkClient *client, guint number, GError **error)
 	g_return_val_if_fail (PK_IS_CLIENT (client), FALSE);
 	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
 
+	/* ensure we are not trying to run without reset */
+	if (client->priv->tid != NULL) {
+		pk_client_error_set (error, PK_CLIENT_ERROR_FAILED, "TID already set to %s", client->priv->tid);
+		return FALSE;
+	}
+
 	/* get and set a new ID */
 	ret = pk_client_allocate_transaction_id (client, error);
 	if (!ret)
@@ -3969,37 +4155,37 @@ pk_client_disconnect_proxy (PkClient *client)
 	if (client->priv->proxy == NULL)
 		return FALSE;
 	dbus_g_proxy_disconnect_signal (client->priv->proxy, "Finished",
-				        G_CALLBACK (pk_client_finished_cb), client);
+					G_CALLBACK (pk_client_finished_cb), client);
 	dbus_g_proxy_disconnect_signal (client->priv->proxy, "ProgressChanged",
-				        G_CALLBACK (pk_client_progress_changed_cb), client);
+					G_CALLBACK (pk_client_progress_changed_cb), client);
 	dbus_g_proxy_disconnect_signal (client->priv->proxy, "StatusChanged",
-				        G_CALLBACK (pk_client_status_changed_cb), client);
+					G_CALLBACK (pk_client_status_changed_cb), client);
 	dbus_g_proxy_disconnect_signal (client->priv->proxy, "Package",
-				        G_CALLBACK (pk_client_package_cb), client);
+					G_CALLBACK (pk_client_package_cb), client);
 	dbus_g_proxy_disconnect_signal (client->priv->proxy, "Transaction",
-				        G_CALLBACK (pk_client_transaction_cb), client);
+					G_CALLBACK (pk_client_transaction_cb), client);
 	dbus_g_proxy_disconnect_signal (client->priv->proxy, "DistroUpgrade",
-				        G_CALLBACK (pk_client_distro_upgrade_cb), client);
+					G_CALLBACK (pk_client_distro_upgrade_cb), client);
 	dbus_g_proxy_disconnect_signal (client->priv->proxy, "Details",
-				        G_CALLBACK (pk_client_details_cb), client);
+					G_CALLBACK (pk_client_details_cb), client);
 	dbus_g_proxy_disconnect_signal (client->priv->proxy, "Files",
-				        G_CALLBACK (pk_client_files_cb), client);
+					G_CALLBACK (pk_client_files_cb), client);
 	dbus_g_proxy_disconnect_signal (client->priv->proxy, "RepoSignatureRequired",
-				        G_CALLBACK (pk_client_repo_signature_required_cb), client);
+					G_CALLBACK (pk_client_repo_signature_required_cb), client);
 	dbus_g_proxy_disconnect_signal (client->priv->proxy, "EulaRequired",
-				        G_CALLBACK (pk_client_eula_required_cb), client);
+					G_CALLBACK (pk_client_eula_required_cb), client);
 	dbus_g_proxy_disconnect_signal (client->priv->proxy, "ErrorCode",
-				        G_CALLBACK (pk_client_error_code_cb), client);
+					G_CALLBACK (pk_client_error_code_cb), client);
 	dbus_g_proxy_disconnect_signal (client->priv->proxy, "RequireRestart",
-				        G_CALLBACK (pk_client_require_restart_cb), client);
+					G_CALLBACK (pk_client_require_restart_cb), client);
 	dbus_g_proxy_disconnect_signal (client->priv->proxy, "Message",
-				        G_CALLBACK (pk_client_message_cb), client);
+					G_CALLBACK (pk_client_message_cb), client);
 	dbus_g_proxy_disconnect_signal (client->priv->proxy, "CallerActiveChanged",
 					G_CALLBACK (pk_client_caller_active_changed_cb), client);
 	dbus_g_proxy_disconnect_signal (client->priv->proxy, "AllowCancel",
-				        G_CALLBACK (pk_client_allow_cancel_cb), client);
+					G_CALLBACK (pk_client_allow_cancel_cb), client);
 	dbus_g_proxy_disconnect_signal (client->priv->proxy, "Destroy",
-				        G_CALLBACK (pk_client_destroy_cb), client);
+					G_CALLBACK (pk_client_destroy_cb), client);
 	g_object_unref (G_OBJECT (client->priv->proxy));
 	client->priv->proxy = NULL;
 	return TRUE;
commit 3e7c69cb1b338aabbbfffe2c37c9a0317ad862bf
Author: Richard Hughes <richard at hughsie.com>
Date:   Wed Nov 5 11:03:39 2008 +0000

    bugfix: store job_count.dat in /var/lib as it's persistent, and some distros mount /var/run as tmpfs

diff --git a/contrib/PackageKit.spec.in b/contrib/PackageKit.spec.in
index c0e9cb5..32bee64 100644
--- a/contrib/PackageKit.spec.in
+++ b/contrib/PackageKit.spec.in
@@ -230,6 +230,12 @@ rm -rf $RPM_BUILD_ROOT
 %post
 update-mime-database %{_datadir}/mime &> /dev/null || :
 
+# the job count used to live in /var/run, but it's now in /var/lib with the
+# other persistent bits
+if [ -e %{_localstatedir}/run/PackageKit/job_count.dat ]; then
+	mv %{_localstatedir}/run/PackageKit/job_count.dat %{_localstatedir}/lib/PackageKit/job_count.dat
+fi
+
 %postun
 update-mime-database %{_datadir}/mime &> /dev/null || :
 
@@ -247,8 +253,6 @@ update-mime-database %{_datadir}/mime &> /dev/null || :
 %dir %{_sysconfdir}/PackageKit
 %dir %{_localstatedir}/lib/PackageKit
 %dir %{python_sitelib}/packagekit
-%dir %{_localstatedir}/run/PackageKit
-%dir %{_localstatedir}/run/PackageKit/udev
 %dir %{_localstatedir}/cache/PackageKit
 %ghost %verify(not md5 size mtime) %{_localstatedir}/cache/PackageKit/groups.sqlite
 %dir %{_localstatedir}/cache/PackageKit/downloads
@@ -274,7 +278,7 @@ update-mime-database %{_datadir}/mime &> /dev/null || :
 %{_libdir}/packagekit-backend/libpk_backend_dummy.so
 %{_libdir}/packagekit-backend/libpk_backend_test_*.so
 %ghost %verify(not md5 size mtime) %{_localstatedir}/lib/PackageKit/transactions.db
-%ghost %verify(not md5 size mtime) %{_localstatedir}/run/PackageKit/job_count.dat
+%ghost %verify(not md5 size mtime) %{_localstatedir}/lib/PackageKit/job_count.dat
 %{_datadir}/dbus-1/system-services/*.service
 %{_libdir}/pm-utils/sleep.d/95packagekit
 %{_libexecdir}/*py*
@@ -306,6 +310,8 @@ update-mime-database %{_datadir}/mime &> /dev/null || :
 
 %files udev-helper
 %defattr(-, root, root)
+%dir %{_localstatedir}/run/PackageKit
+%dir %{_localstatedir}/run/PackageKit/udev
 %doc README AUTHORS NEWS COPYING
 %{_sysconfdir}/udev/rules.d/*.rules
 /lib/udev/*.sh
diff --git a/contrib/udev/Makefile.am b/contrib/udev/Makefile.am
index 12ecb0d..3bf7632 100644
--- a/contrib/udev/Makefile.am
+++ b/contrib/udev/Makefile.am
@@ -3,7 +3,7 @@ dist_udevrules_DATA = 51-packagekit-firmware.rules
 
 install-data-hook:
 	if test -w $(DESTDIR)/; then \
-		mkdir $(DESTDIR)/var/run/PackageKit/udev; \
+		mkdir -p $(DESTDIR)/var/run/PackageKit/udev; \
 		mkdir -p $(DESTDIR)/lib/udev; \
 		cp $(top_srcdir)/contrib/udev/packagekit-firmware.sh $(DESTDIR)/lib/udev; \
 	fi
diff --git a/data/Makefile.am b/data/Makefile.am
index bbe77d5..8aa831d 100644
--- a/data/Makefile.am
+++ b/data/Makefile.am
@@ -64,7 +64,7 @@ serviceapt_DATA     = $(serviceapt_in_files:.service.in=.service)
 $(serviceapt_DATA): $(serviceapt_in_files) Makefile
 	@sed -e "s|\@servicedir\@|$(libexecdir)|" -e "s|\@PK_BACKEND_USER\@|$(PK_BACKEND_USER)|" $< > $@
 
-localcachedir = $(localstatedir)/run/PackageKit
+localcachedir = $(localstatedir)/lib/PackageKit
 localcache_DATA =					\
 	job_count.dat					\
 	$(NULL)
diff --git a/src/pk-transaction-id.c b/src/pk-transaction-id.c
index 877b838..ec8bdec 100644
--- a/src/pk-transaction-id.c
+++ b/src/pk-transaction-id.c
@@ -31,7 +31,7 @@
 #include "egg-string.h"
 
 #include "pk-transaction-id.h"
-#define PK_TRANSACTION_ID_COUNT_FILE		LOCALSTATEDIR "/run/PackageKit/job_count.dat"
+#define PK_TRANSACTION_ID_COUNT_FILE		LOCALSTATEDIR "/lib/PackageKit/job_count.dat"
 
 /**
  * pk_transaction_id_get_random_hex_string:
commit 8bab1d97f67a852853dc21f1303a7fea45f55919
Author: Richard Hughes <richard at hughsie.com>
Date:   Wed Nov 5 09:20:08 2008 +0000

    trivial: don't kill the transaction when we get output from stderr, just issue a warning. There are too many false positives.

diff --git a/src/pk-backend-spawn.c b/src/pk-backend-spawn.c
index b8a93aa..1f63873 100644
--- a/src/pk-backend-spawn.c
+++ b/src/pk-backend-spawn.c
@@ -508,12 +508,10 @@ pk_backend_spawn_stderr_cb (PkBackendSpawn *spawn, const gchar *line, PkBackendS
 			return;
 	}
 
-	/* send error up to session, this is never going to be pretty... */
+	/* send warning up to session, this is never going to be pretty... */
 	egg_warning ("STDERR: %s", line);
-	pk_backend_error_code (backend_spawn->priv->backend, PK_ERROR_ENUM_INTERNAL_ERROR,
-			       "library error: %s", line);
-	pk_backend_finished (backend_spawn->priv->backend);
-	pk_spawn_kill (backend_spawn->priv->spawn);
+	pk_backend_message (backend_spawn->priv->backend, PK_MESSAGE_ENUM_BACKEND_ERROR,
+			    "library warning: %s", line);
 }
 
 /**
commit d03c82fa11f4255ea86ac048c4b018784f1d9467
Author: Richard Hughes <richard at hughsie.com>
Date:   Wed Nov 5 07:47:30 2008 +0000

    bugfix: fix protocol violation in the server and client
    
    PackageKit does not adhere to it's own specification where a new TID is required
    when an error is emitted on the original TID. For a couple of releases now
    we cleanup unused TID's after 5 seconds, to avoid denial of service attacks.
    As we re-use the original TID after showing the signature dialog, we wait on
    the client, and then resumbit after PolicyKit returns from the authentication
    request.
    If the user takes longer than 5 seconds to authenticate, then the TID is timed
    out, and the helpful error is presented to the user:
    
    Method 'Update System' with signature '' on interface
    'org.freedesktop.PackageKit.Transaction' doesn't exist.
    
    Of course, the correct fix is to release the TID on error to prevent it being
    reused, and also to re-request a TID after authentication has been obtained.

diff --git a/lib/packagekit-glib/pk-client.c b/lib/packagekit-glib/pk-client.c
index 5600581..01fc447 100644
--- a/lib/packagekit-glib/pk-client.c
+++ b/lib/packagekit-glib/pk-client.c
@@ -1226,7 +1226,7 @@ pk_client_cancel (PkClient *client, GError **error)
  * @client: a valid #PkClient instance
  * @error: a %GError to put the error code and message in, or %NULL
  *
- * Get a new tid.
+ * Get a new tid, freeing the old tid if required.
  *
  * Return value: the tid, or %NULL if we had an error.
  **/
@@ -1251,6 +1251,10 @@ pk_client_allocate_transaction_id (PkClient *client, GError **error)
 		return FALSE;
 	}
 
+	/* free any old tid */
+	g_free (client->priv->tid);
+	client->priv->tid = NULL;
+
 	/* set that new ID to this GObject */
 	ret = pk_client_set_tid (client, tid, &error_local);
 	g_free (tid);
@@ -1422,20 +1426,21 @@ pk_client_update_system (PkClient *client, GError **error)
 		if (pk_client_error_auth_obtain (error_pk)) {
 			/* clear old error */
 			g_clear_error (&error_pk);
+
+			/* get a new tid */
+			ret = pk_client_allocate_transaction_id (client, error);
+			if (!ret)
+				return FALSE;
+
 			/* retry the action now we have got auth */
 			ret = pk_client_update_system_action (client, &error_pk);
 		}
-		if (!ret && pk_client_error_refused_by_policy (error_pk)) {
-			/* we failed to get an auth */
-			pk_client_error_set (error, PK_CLIENT_ERROR_FAILED_AUTH, error_pk->message);
-			/* clear old error */
-			g_clear_error (&error_pk);
-			return FALSE;
-		}
 	}
 	/* we failed one of these, return the error to the user */
-	if (!ret)
+	if (!ret) {
+		pk_client_error_fixup (&error_pk);
 		g_propagate_error (error, error_pk);
+	}
 
 	if (ret && !client->priv->is_finished) {
 		/* allow clients to respond in the status changed callback */
@@ -2431,6 +2436,12 @@ pk_client_remove_packages (PkClient *client, gchar **package_ids, gboolean allow
 		if (pk_client_error_auth_obtain (error_pk)) {
 			/* clear old error */
 			g_clear_error (&error_pk);
+
+			/* get a new tid */
+			ret = pk_client_allocate_transaction_id (client, error);
+			if (!ret)
+				return FALSE;
+
 			/* retry the action now we have got auth */
 			ret = pk_client_remove_packages_action (client, package_ids, allow_deps, autoremove, &error_pk);
 		}
@@ -2516,6 +2527,12 @@ pk_client_refresh_cache (PkClient *client, gboolean force, GError **error)
 		if (pk_client_error_auth_obtain (error_pk)) {
 			/* clear old error */
 			g_clear_error (&error_pk);
+
+			/* get a new tid */
+			ret = pk_client_allocate_transaction_id (client, error);
+			if (!ret)
+				return FALSE;
+
 			/* retry the action now we have got auth */
 			ret = pk_client_refresh_cache_action (client, force, &error_pk);
 		}
@@ -2610,6 +2627,12 @@ pk_client_install_packages (PkClient *client, gchar **package_ids, GError **erro
 		if (pk_client_error_auth_obtain (error_pk)) {
 			/* clear old error */
 			g_clear_error (&error_pk);
+
+			/* get a new tid */
+			ret = pk_client_allocate_transaction_id (client, error);
+			if (!ret)
+				return FALSE;
+
 			/* retry the action now we have got auth */
 			ret = pk_client_install_package_action (client, package_ids, &error_pk);
 		}
@@ -2710,6 +2733,12 @@ pk_client_install_signature (PkClient *client, PkSigTypeEnum type, const gchar *
 		if (pk_client_error_auth_obtain (error_pk)) {
 			/* clear old error */
 			g_clear_error (&error_pk);
+
+			/* get a new tid */
+			ret = pk_client_allocate_transaction_id (client, error);
+			if (!ret)
+				return FALSE;
+
 			/* retry the action now we have got auth */
 			ret = pk_client_install_signature_action (client, type, key_id, package_id, &error_pk);
 		}
@@ -2808,6 +2837,12 @@ pk_client_update_packages (PkClient *client, gchar **package_ids, GError **error
 		if (pk_client_error_auth_obtain (error_pk)) {
 			/* clear old error */
 			g_clear_error (&error_pk);
+
+			/* get a new tid */
+			ret = pk_client_allocate_transaction_id (client, error);
+			if (!ret)
+				return FALSE;
+
 			/* retry the action now we have got auth */
 			ret = pk_client_update_packages_action (client, package_ids, &error_pk);
 		}
@@ -2942,6 +2977,12 @@ pk_client_install_files (PkClient *client, gboolean trusted, gchar **files_rel,
 		if (pk_client_error_auth_obtain (error_pk)) {
 			/* clear old error */
 			g_clear_error (&error_pk);
+
+			/* get a new tid */
+			ret = pk_client_allocate_transaction_id (client, error);
+			if (!ret)
+				return FALSE;
+
 			/* retry the action now we have got auth */
 			ret = pk_client_install_files_action (client, trusted, files, &error_pk);
 		}
@@ -3074,6 +3115,12 @@ pk_client_accept_eula (PkClient *client, const gchar *eula_id, GError **error)
 		if (pk_client_error_auth_obtain (error_pk)) {
 			/* clear old error */
 			g_clear_error (&error_pk);
+
+			/* get a new tid */
+			ret = pk_client_allocate_transaction_id (client, error);
+			if (!ret)
+				return FALSE;
+
 			/* retry the action now we have got auth */
 			ret = pk_client_accept_eula_action (client, eula_id, &error_pk);
 		}
@@ -3158,6 +3205,12 @@ pk_client_repo_enable (PkClient *client, const gchar *repo_id, gboolean enabled,
 		if (pk_client_error_auth_obtain (error_pk)) {
 			/* clear old error */
 			g_clear_error (&error_pk);
+
+			/* get a new tid */
+			ret = pk_client_allocate_transaction_id (client, error);
+			if (!ret)
+				return FALSE;
+
 			/* retry the action now we have got auth */
 			ret = pk_client_repo_enable_action (client, repo_id, enabled, &error_pk);
 		}
@@ -3251,6 +3304,12 @@ pk_client_repo_set_data (PkClient *client, const gchar *repo_id, const gchar *pa
 		if (pk_client_error_auth_obtain (error_pk)) {
 			/* clear old error */
 			g_clear_error (&error_pk);
+
+			/* get a new tid */
+			ret = pk_client_allocate_transaction_id (client, error);
+			if (!ret)
+				return FALSE;
+
 			/* retry the action now we have got auth */
 			ret = pk_client_repo_set_data_action (client, repo_id, parameter, value, &error_pk);
 		}
diff --git a/src/pk-transaction.c b/src/pk-transaction.c
index f304c22..f7765c7 100644
--- a/src/pk-transaction.c
+++ b/src/pk-transaction.c
@@ -1151,6 +1151,20 @@ pk_transaction_set_tid (PkTransaction *transaction, const gchar *tid)
 }
 
 /**
+ * pk_transaction_release_tid:
+ **/
+static gboolean
+pk_transaction_release_tid (PkTransaction *transaction)
+{
+	gboolean ret;
+	g_return_val_if_fail (PK_IS_TRANSACTION (transaction), FALSE);
+	/* release the ID as we are returning an error */
+	ret = pk_transaction_list_remove (transaction->priv->transaction_list,
+					  transaction->priv->tid);
+	return ret;
+}
+
+/**
  * pk_transaction_commit:
  **/
 G_GNUC_WARN_UNUSED_RESULT static gboolean
@@ -1165,8 +1179,7 @@ pk_transaction_commit (PkTransaction *transaction)
 	ret = pk_transaction_list_commit (transaction->priv->transaction_list,
 					  transaction->priv->tid);
 	if (!ret) {
-		pk_transaction_list_remove (transaction->priv->transaction_list,
-					    transaction->priv->tid);
+		pk_transaction_release_tid (transaction);
 		egg_warning ("failed to commit (job not run?)");
 		return FALSE;
 	}
@@ -1349,6 +1362,7 @@ pk_transaction_accept_eula (PkTransaction *transaction, const gchar *eula_id, DB
 	if (!ret) {
 		error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_INPUT_INVALID,
 				     "Invalid input passed to daemon");
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -1364,6 +1378,7 @@ pk_transaction_accept_eula (PkTransaction *transaction, const gchar *eula_id, DB
 	/* check if the action is allowed from this client - if not, set an error */
 	ret = pk_transaction_action_is_allowed (transaction, FALSE, PK_ROLE_ENUM_ACCEPT_EULA, &error);
 	if (!ret) {
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -1373,6 +1388,7 @@ pk_transaction_accept_eula (PkTransaction *transaction, const gchar *eula_id, DB
 	if (!ret) {
 		error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_INPUT_INVALID,
 				     "EULA failed to be added");
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -1469,8 +1485,7 @@ pk_transaction_download_packages (PkTransaction *transaction, gchar **package_id
 	if (transaction->priv->backend->desc->download_packages == NULL) {
 	        error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_NOT_SUPPORTED,
 	                             "Operation not yet supported by backend");
-		pk_transaction_list_remove (transaction->priv->transaction_list,
-					    transaction->priv->tid);
+		pk_transaction_release_tid (transaction);
 	        dbus_g_method_return_error (context, error);
 	        return;
 	}
@@ -1516,8 +1531,7 @@ pk_transaction_download_packages (PkTransaction *transaction, gchar **package_id
 	if (!ret) {
 	        error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_COMMIT_FAILED,
 	                             "Could not commit to a transaction object");
-		pk_transaction_list_remove (transaction->priv->transaction_list,
-					    transaction->priv->tid);
+		pk_transaction_release_tid (transaction);
 	        return;
 	}
 
@@ -1560,8 +1574,7 @@ pk_transaction_get_categories (PkTransaction *transaction, DBusGMethodInvocation
 	if (transaction->priv->backend->desc->get_categories == NULL) {
 		error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_NOT_SUPPORTED,
 				     "Operation not yet supported by backend");
-		pk_transaction_list_remove (transaction->priv->transaction_list,
-					    transaction->priv->tid);
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -1578,6 +1591,7 @@ pk_transaction_get_categories (PkTransaction *transaction, DBusGMethodInvocation
 	if (pk_transaction_list_role_present (transaction->priv->transaction_list, PK_ROLE_ENUM_GET_CATEGORIES)) {
 		error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_TRANSACTION_EXISTS_WITH_ROLE,
 				     "Already performing get categories");
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -1589,6 +1603,7 @@ pk_transaction_get_categories (PkTransaction *transaction, DBusGMethodInvocation
 	if (!ret) {
 		error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_COMMIT_FAILED,
 				     "Could not commit to a transaction object");
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -1620,6 +1635,7 @@ pk_transaction_get_depends (PkTransaction *transaction, const gchar *filter, gch
 		egg_debug ("Not implemented yet: GetDepends");
 		error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_NOT_SUPPORTED,
 				     "Operation not yet supported by backend");
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -1627,6 +1643,7 @@ pk_transaction_get_depends (PkTransaction *transaction, const gchar *filter, gch
 	/* check the filter */
 	ret = pk_transaction_filter_check (filter, &error);
 	if (!ret) {
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -1638,6 +1655,7 @@ pk_transaction_get_depends (PkTransaction *transaction, const gchar *filter, gch
 		error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_PACKAGE_ID_INVALID,
 				     "The package id's '%s' are not valid", package_ids_temp);
 		g_free (package_ids_temp);
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -1661,6 +1679,7 @@ pk_transaction_get_depends (PkTransaction *transaction, const gchar *filter, gch
 	if (!ret) {
 		error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_COMMIT_FAILED,
 				     "Could not commit to a transaction object");
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -1693,6 +1712,7 @@ pk_transaction_get_details (PkTransaction *transaction, gchar **package_ids, DBu
 		egg_debug ("Not implemented yet: GetDetails");
 		error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_NOT_SUPPORTED,
 				     "Operation not yet supported by backend");
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -1704,6 +1724,7 @@ pk_transaction_get_details (PkTransaction *transaction, gchar **package_ids, DBu
 		error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_PACKAGE_ID_INVALID,
 				     "The package id's '%s' are not valid", package_ids_temp);
 		g_free (package_ids_temp);
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -1725,6 +1746,7 @@ pk_transaction_get_details (PkTransaction *transaction, gchar **package_ids, DBu
 	if (!ret) {
 		error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_COMMIT_FAILED,
 				     "Could not commit to a transaction object");
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -1754,6 +1776,7 @@ pk_transaction_get_distro_upgrades (PkTransaction *transaction, DBusGMethodInvoc
 		egg_debug ("Not implemented yet: GetDistroUpgrades");
 		error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_NOT_SUPPORTED,
 				     "Operation not yet supported by backend");
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -1774,6 +1797,7 @@ pk_transaction_get_distro_upgrades (PkTransaction *transaction, DBusGMethodInvoc
 	if (!ret) {
 		error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_COMMIT_FAILED,
 				     "Could not commit to a transaction object");
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -1807,6 +1831,7 @@ pk_transaction_get_files (PkTransaction *transaction, gchar **package_ids, DBusG
 		egg_debug ("Not implemented yet: GetFiles");
 		error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_NOT_SUPPORTED,
 				     "Operation not yet supported by backend");
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -1818,6 +1843,7 @@ pk_transaction_get_files (PkTransaction *transaction, gchar **package_ids, DBusG
 		error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_PACKAGE_ID_INVALID,
 				     "The package id's '%s' are not valid", package_ids_temp);
 		g_free (package_ids_temp);
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -1839,6 +1865,7 @@ pk_transaction_get_files (PkTransaction *transaction, gchar **package_ids, DBusG
 	if (!ret) {
 		error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_COMMIT_FAILED,
 				     "Could not commit to a transaction object");
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -1868,6 +1895,7 @@ pk_transaction_get_packages (PkTransaction *transaction, const gchar *filter, DB
 		egg_debug ("Not implemented yet: GetPackages");
 		error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_NOT_SUPPORTED,
 				     "Operation not yet supported by backend");
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -1875,6 +1903,7 @@ pk_transaction_get_packages (PkTransaction *transaction, const gchar *filter, DB
 	/* check the filter */
 	ret = pk_transaction_filter_check (filter, &error);
 	if (!ret) {
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -1896,6 +1925,7 @@ pk_transaction_get_packages (PkTransaction *transaction, const gchar *filter, DB
 	if (!ret) {
 		error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_COMMIT_FAILED,
 				     "Could not commit to a transaction object");
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -1982,6 +2012,7 @@ pk_transaction_get_repo_list (PkTransaction *transaction, const gchar *filter, D
 		egg_debug ("Not implemented yet: GetRepoList");
 		error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_NOT_SUPPORTED,
 				     "Operation not yet supported by backend");
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -1989,6 +2020,7 @@ pk_transaction_get_repo_list (PkTransaction *transaction, const gchar *filter, D
 	/* check the filter */
 	ret = pk_transaction_filter_check (filter, &error);
 	if (!ret) {
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -2010,6 +2042,7 @@ pk_transaction_get_repo_list (PkTransaction *transaction, const gchar *filter, D
 	if (!ret) {
 		error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_COMMIT_FAILED,
 				     "Could not commit to a transaction object");
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -2043,6 +2076,7 @@ pk_transaction_get_requires (PkTransaction *transaction, const gchar *filter, gc
 		egg_debug ("Not implemented yet: GetRequires");
 		error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_NOT_SUPPORTED,
 				     "Operation not yet supported by backend");
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -2050,6 +2084,7 @@ pk_transaction_get_requires (PkTransaction *transaction, const gchar *filter, gc
 	/* check the filter */
 	ret = pk_transaction_filter_check (filter, &error);
 	if (!ret) {
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -2061,6 +2096,7 @@ pk_transaction_get_requires (PkTransaction *transaction, const gchar *filter, gc
 		error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_PACKAGE_ID_INVALID,
 				     "The package id's '%s' are not valid", package_ids_temp);
 		g_free (package_ids_temp);
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -2084,6 +2120,7 @@ pk_transaction_get_requires (PkTransaction *transaction, const gchar *filter, gc
 	if (!ret) {
 		error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_COMMIT_FAILED,
 				     "Could not commit to a transaction object");
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -2168,6 +2205,7 @@ pk_transaction_get_update_detail (PkTransaction *transaction, gchar **package_id
 		egg_debug ("Not implemented yet: GetUpdateDetail");
 		error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_NOT_SUPPORTED,
 				     "Operation not yet supported by backend");
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -2179,6 +2217,7 @@ pk_transaction_get_update_detail (PkTransaction *transaction, gchar **package_id
 		error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_PACKAGE_ID_INVALID,
 				     "The package id's '%s' are not valid", package_ids_temp);
 		g_free (package_ids_temp);
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -2245,6 +2284,7 @@ pk_transaction_get_update_detail (PkTransaction *transaction, gchar **package_id
 	if (!ret) {
 		error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_COMMIT_FAILED,
 				     "Could not commit to a transaction object");
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -2279,6 +2319,7 @@ pk_transaction_get_updates (PkTransaction *transaction, const gchar *filter, DBu
 		egg_debug ("Not implemented yet: GetUpdates");
 		error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_NOT_SUPPORTED,
 				     "Operation not yet supported by backend");
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -2286,6 +2327,7 @@ pk_transaction_get_updates (PkTransaction *transaction, const gchar *filter, DBu
 	/* check the filter */
 	ret = pk_transaction_filter_check (filter, &error);
 	if (!ret) {
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -2337,6 +2379,7 @@ pk_transaction_get_updates (PkTransaction *transaction, const gchar *filter, DBu
 	if (!ret) {
 		error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_COMMIT_FAILED,
 				     "Could not commit to a transaction object");
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -2373,8 +2416,7 @@ pk_transaction_install_files (PkTransaction *transaction, gboolean trusted,
 	if (transaction->priv->backend->desc->install_files == NULL) {
 		error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_NOT_SUPPORTED,
 				     "Operation not yet supported by backend");
-		pk_transaction_list_remove (transaction->priv->transaction_list,
-					    transaction->priv->tid);
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -2388,6 +2430,7 @@ pk_transaction_install_files (PkTransaction *transaction, gboolean trusted,
 		if (!ret) {
 			error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_NO_SUCH_FILE,
 					     "No such file %s", full_paths[i]);
+			pk_transaction_release_tid (transaction);
 			dbus_g_method_return_error (context, error);
 			return;
 		}
@@ -2399,6 +2442,7 @@ pk_transaction_install_files (PkTransaction *transaction, gboolean trusted,
 			g_object_unref (service_pack);
 			if (!ret) {
 				error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_PACK_INVALID, "%s", error_local->message);
+				pk_transaction_release_tid (transaction);
 				dbus_g_method_return_error (context, error);
 				g_error_free (error_local);
 				return;
@@ -2417,6 +2461,7 @@ pk_transaction_install_files (PkTransaction *transaction, gboolean trusted,
 	/* check if the action is allowed from this client - if not, set an error */
 	ret = pk_transaction_action_is_allowed (transaction, trusted, PK_ROLE_ENUM_INSTALL_FILES, &error);
 	if (!ret) {
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -2431,6 +2476,7 @@ pk_transaction_install_files (PkTransaction *transaction, gboolean trusted,
 	if (!ret) {
 		error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_COMMIT_FAILED,
 				     "Could not commit to a transaction object");
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -2464,8 +2510,7 @@ pk_transaction_install_packages (PkTransaction *transaction, gchar **package_ids
 	if (transaction->priv->backend->desc->install_packages == NULL) {
 		error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_NOT_SUPPORTED,
 				     "Operation not yet supported by backend");
-		pk_transaction_list_remove (transaction->priv->transaction_list,
-					    transaction->priv->tid);
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -2477,6 +2522,7 @@ pk_transaction_install_packages (PkTransaction *transaction, gchar **package_ids
 		error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_PACKAGE_ID_INVALID,
 				     "The package id's '%s' are not valid", package_ids_temp);
 		g_free (package_ids_temp);
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -2492,6 +2538,7 @@ pk_transaction_install_packages (PkTransaction *transaction, gchar **package_ids
 	/* check if the action is allowed from this client - if not, set an error */
 	ret = pk_transaction_action_is_allowed (transaction, FALSE, PK_ROLE_ENUM_INSTALL_PACKAGES, &error);
 	if (!ret) {
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -2505,6 +2552,7 @@ pk_transaction_install_packages (PkTransaction *transaction, gchar **package_ids
 	if (!ret) {
 		error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_COMMIT_FAILED,
 				     "Could not commit to a transaction object");
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -2535,8 +2583,7 @@ pk_transaction_install_signature (PkTransaction *transaction, const gchar *sig_t
 	if (transaction->priv->backend->desc->install_signature == NULL) {
 		error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_NOT_SUPPORTED,
 				     "Operation not yet supported by backend");
-		pk_transaction_list_remove (transaction->priv->transaction_list,
-					    transaction->priv->tid);
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -2546,6 +2593,7 @@ pk_transaction_install_signature (PkTransaction *transaction, const gchar *sig_t
 	if (!ret) {
 		error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_INPUT_INVALID,
 				     "Invalid input passed to daemon");
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -2555,6 +2603,7 @@ pk_transaction_install_signature (PkTransaction *transaction, const gchar *sig_t
 	if (!ret) {
 		error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_PACKAGE_ID_INVALID,
 				     "The package id '%s' is not valid", package_id);
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -2570,6 +2619,7 @@ pk_transaction_install_signature (PkTransaction *transaction, const gchar *sig_t
 	/* check if the action is allowed from this client - if not, set an error */
 	ret = pk_transaction_action_is_allowed (transaction, FALSE, PK_ROLE_ENUM_INSTALL_SIGNATURE, &error);
 	if (!ret) {
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -2584,6 +2634,7 @@ pk_transaction_install_signature (PkTransaction *transaction, const gchar *sig_t
 	if (!ret) {
 		error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_COMMIT_FAILED,
 				     "Could not commit to a transaction object");
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -2627,8 +2678,7 @@ pk_transaction_refresh_cache (PkTransaction *transaction, gboolean force, DBusGM
 	if (transaction->priv->backend->desc->refresh_cache == NULL) {
 		error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_NOT_SUPPORTED,
 			     "Operation not yet supported by backend");
-		pk_transaction_list_remove (transaction->priv->transaction_list,
-					    transaction->priv->tid);
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -2644,6 +2694,7 @@ pk_transaction_refresh_cache (PkTransaction *transaction, gboolean force, DBusGM
 	/* check if the action is allowed from this client - if not, set an error */
 	ret = pk_transaction_action_is_allowed (transaction, FALSE, PK_ROLE_ENUM_REFRESH_CACHE, &error);
 	if (!ret) {
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -2660,6 +2711,7 @@ pk_transaction_refresh_cache (PkTransaction *transaction, gboolean force, DBusGM
 	if (!ret) {
 		error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_COMMIT_FAILED,
 				     "Could not commit to a transaction object");
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -2693,8 +2745,7 @@ pk_transaction_remove_packages (PkTransaction *transaction, gchar **package_ids,
 	if (transaction->priv->backend->desc->remove_packages == NULL) {
 		error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_NOT_SUPPORTED,
 				     "Operation not yet supported by backend");
-		pk_transaction_list_remove (transaction->priv->transaction_list,
-					    transaction->priv->tid);
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -2706,6 +2757,7 @@ pk_transaction_remove_packages (PkTransaction *transaction, gchar **package_ids,
 		error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_PACKAGE_ID_INVALID,
 				     "The package id's '%s' are not valid", package_ids_temp);
 		g_free (package_ids_temp);
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -2721,6 +2773,7 @@ pk_transaction_remove_packages (PkTransaction *transaction, gchar **package_ids,
 	/* check if the action is allowed from this client - if not, set an error */
 	ret = pk_transaction_action_is_allowed (transaction, FALSE, PK_ROLE_ENUM_REMOVE_PACKAGES, &error);
 	if (!ret) {
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -2735,6 +2788,7 @@ pk_transaction_remove_packages (PkTransaction *transaction, gchar **package_ids,
 	if (!ret) {
 		error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_COMMIT_FAILED,
 				     "Could not commit to a transaction object");
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -2764,8 +2818,7 @@ pk_transaction_repo_enable (PkTransaction *transaction, const gchar *repo_id, gb
 	if (transaction->priv->backend->desc->repo_enable == NULL) {
 		error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_NOT_SUPPORTED,
 				     "Operation not yet supported by backend");
-		pk_transaction_list_remove (transaction->priv->transaction_list,
-					    transaction->priv->tid);
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -2775,6 +2828,7 @@ pk_transaction_repo_enable (PkTransaction *transaction, const gchar *repo_id, gb
 	if (!ret) {
 		error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_INPUT_INVALID,
 				     "Invalid input passed to daemon");
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -2790,6 +2844,7 @@ pk_transaction_repo_enable (PkTransaction *transaction, const gchar *repo_id, gb
 	/* check if the action is allowed from this client - if not, set an error */
 	ret = pk_transaction_action_is_allowed (transaction, FALSE, PK_ROLE_ENUM_REPO_ENABLE, &error);
 	if (!ret) {
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -2804,6 +2859,7 @@ pk_transaction_repo_enable (PkTransaction *transaction, const gchar *repo_id, gb
 	if (!ret) {
 		error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_COMMIT_FAILED,
 				     "Could not commit to a transaction object");
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -2834,8 +2890,7 @@ pk_transaction_repo_set_data (PkTransaction *transaction, const gchar *repo_id,
 	if (transaction->priv->backend->desc->repo_set_data == NULL) {
 		error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_NOT_SUPPORTED,
 				     "Operation not yet supported by backend");
-		pk_transaction_list_remove (transaction->priv->transaction_list,
-					    transaction->priv->tid);
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -2845,6 +2900,7 @@ pk_transaction_repo_set_data (PkTransaction *transaction, const gchar *repo_id,
 	if (!ret) {
 		error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_INPUT_INVALID,
 				     "Invalid input passed to daemon");
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -2860,6 +2916,7 @@ pk_transaction_repo_set_data (PkTransaction *transaction, const gchar *repo_id,
 	/* check if the action is allowed from this client - if not, set an error */
 	ret = pk_transaction_action_is_allowed (transaction, FALSE, PK_ROLE_ENUM_REPO_SET_DATA, &error);
 	if (!ret) {
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -2875,6 +2932,7 @@ pk_transaction_repo_set_data (PkTransaction *transaction, const gchar *repo_id,
 	if (!ret) {
 		error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_COMMIT_FAILED,
 				     "Could not commit to a transaction object");
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -2910,6 +2968,7 @@ pk_transaction_resolve (PkTransaction *transaction, const gchar *filter,
 		egg_debug ("Not implemented yet: Resolve");
 		error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_NOT_SUPPORTED,
 				     "Operation not yet supported by backend");
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -2917,6 +2976,7 @@ pk_transaction_resolve (PkTransaction *transaction, const gchar *filter,
 	/* check the filter */
 	ret = pk_transaction_filter_check (filter, &error);
 	if (!ret) {
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -2928,6 +2988,7 @@ pk_transaction_resolve (PkTransaction *transaction, const gchar *filter,
 		if (!ret) {
 			error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_INPUT_INVALID,
 					     "Invalid input passed to daemon");
+			pk_transaction_release_tid (transaction);
 			dbus_g_method_return_error (context, error);
 			return;
 		}
@@ -2951,6 +3012,7 @@ pk_transaction_resolve (PkTransaction *transaction, const gchar *filter,
 	if (!ret) {
 		error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_COMMIT_FAILED,
 				     "Could not commit to a transaction object");
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -2980,8 +3042,7 @@ pk_transaction_rollback (PkTransaction *transaction, const gchar *transaction_id
 	if (transaction->priv->backend->desc->rollback == NULL) {
 		error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_NOT_SUPPORTED,
 				     "Operation not yet supported by backend");
-		pk_transaction_list_remove (transaction->priv->transaction_list,
-					    transaction->priv->tid);
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -2991,6 +3052,7 @@ pk_transaction_rollback (PkTransaction *transaction, const gchar *transaction_id
 	if (!ret) {
 		error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_INPUT_INVALID,
 				     "Invalid input passed to daemon");
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -3006,6 +3068,7 @@ pk_transaction_rollback (PkTransaction *transaction, const gchar *transaction_id
 	/* check if the action is allowed from this client - if not, set an error */
 	ret = pk_transaction_action_is_allowed (transaction, FALSE, PK_ROLE_ENUM_ROLLBACK, &error);
 	if (!ret) {
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -3019,6 +3082,7 @@ pk_transaction_rollback (PkTransaction *transaction, const gchar *transaction_id
 	if (!ret) {
 		error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_COMMIT_FAILED,
 				     "Could not commit to a transaction object");
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -3049,6 +3113,7 @@ pk_transaction_search_details (PkTransaction *transaction, const gchar *filter,
 		egg_debug ("Not implemented yet: SearchDetails");
 		error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_NOT_SUPPORTED,
 				     "Operation not yet supported by backend");
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -3056,6 +3121,7 @@ pk_transaction_search_details (PkTransaction *transaction, const gchar *filter,
 	/* check the search term */
 	ret = pk_transaction_search_check (search, &error);
 	if (!ret) {
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -3063,6 +3129,7 @@ pk_transaction_search_details (PkTransaction *transaction, const gchar *filter,
 	/* check the filter */
 	ret = pk_transaction_filter_check (filter, &error);
 	if (!ret) {
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -3085,6 +3152,7 @@ pk_transaction_search_details (PkTransaction *transaction, const gchar *filter,
 	if (!ret) {
 		error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_COMMIT_FAILED,
 				     "Could not commit to a transaction object");
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -3115,6 +3183,7 @@ pk_transaction_search_file (PkTransaction *transaction, const gchar *filter,
 		egg_debug ("Not implemented yet: SearchFile");
 		error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_NOT_SUPPORTED,
 				     "Operation not yet supported by backend");
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -3122,6 +3191,7 @@ pk_transaction_search_file (PkTransaction *transaction, const gchar *filter,
 	/* check the search term */
 	ret = pk_transaction_search_check (search, &error);
 	if (!ret) {
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -3129,6 +3199,7 @@ pk_transaction_search_file (PkTransaction *transaction, const gchar *filter,
 	/* check the filter */
 	ret = pk_transaction_filter_check (filter, &error);
 	if (!ret) {
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -3151,6 +3222,7 @@ pk_transaction_search_file (PkTransaction *transaction, const gchar *filter,
 	if (!ret) {
 		error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_COMMIT_FAILED,
 				     "Could not commit to a transaction object");
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -3181,6 +3253,7 @@ pk_transaction_search_group (PkTransaction *transaction, const gchar *filter,
 		egg_debug ("Not implemented yet: SearchGroup");
 		error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_NOT_SUPPORTED,
 				     "Operation not yet supported by backend");
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -3188,6 +3261,7 @@ pk_transaction_search_group (PkTransaction *transaction, const gchar *filter,
 	/* check the search term */
 	ret = pk_transaction_search_check (search, &error);
 	if (!ret) {
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -3195,6 +3269,7 @@ pk_transaction_search_group (PkTransaction *transaction, const gchar *filter,
 	/* check the filter */
 	ret = pk_transaction_filter_check (filter, &error);
 	if (!ret) {
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -3217,6 +3292,7 @@ pk_transaction_search_group (PkTransaction *transaction, const gchar *filter,
 	if (!ret) {
 		error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_COMMIT_FAILED,
 				     "Could not commit to a transaction object");
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -3247,6 +3323,7 @@ pk_transaction_search_name (PkTransaction *transaction, const gchar *filter,
 		egg_debug ("Not implemented yet: SearchName");
 		error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_NOT_SUPPORTED,
 				     "Operation not yet supported by backend");
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -3254,6 +3331,7 @@ pk_transaction_search_name (PkTransaction *transaction, const gchar *filter,
 	/* check the search term */
 	ret = pk_transaction_search_check (search, &error);
 	if (!ret) {
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -3261,6 +3339,7 @@ pk_transaction_search_name (PkTransaction *transaction, const gchar *filter,
 	/* check the filter */
 	ret = pk_transaction_filter_check (filter, &error);
 	if (!ret) {
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -3283,6 +3362,7 @@ pk_transaction_search_name (PkTransaction *transaction, const gchar *filter,
 	if (!ret) {
 		error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_COMMIT_FAILED,
 				     "Could not commit to a transaction object");
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -3336,8 +3416,7 @@ pk_transaction_update_packages (PkTransaction *transaction, gchar **package_ids,
 	if (transaction->priv->backend->desc->update_packages == NULL) {
 		error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_NOT_SUPPORTED,
 				     "Operation not yet supported by backend");
-		pk_transaction_list_remove (transaction->priv->transaction_list,
-					    transaction->priv->tid);
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -3349,6 +3428,7 @@ pk_transaction_update_packages (PkTransaction *transaction, gchar **package_ids,
 		error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_PACKAGE_ID_INVALID,
 				     "The package id's '%s' are not valid", package_ids_temp);
 		g_free (package_ids_temp);
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -3364,6 +3444,7 @@ pk_transaction_update_packages (PkTransaction *transaction, gchar **package_ids,
 	/* check if the action is allowed from this client - if not, set an error */
 	ret = pk_transaction_action_is_allowed (transaction, FALSE, PK_ROLE_ENUM_UPDATE_PACKAGES, &error);
 	if (!ret) {
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -3377,6 +3458,7 @@ pk_transaction_update_packages (PkTransaction *transaction, gchar **package_ids,
 	if (!ret) {
 		error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_COMMIT_FAILED,
 				     "Could not commit to a transaction object");
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -3405,8 +3487,7 @@ pk_transaction_update_system (PkTransaction *transaction, DBusGMethodInvocation
 	if (transaction->priv->backend->desc->update_system == NULL) {
 		error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_NOT_SUPPORTED,
 				     "Operation not yet supported by backend");
-		pk_transaction_list_remove (transaction->priv->transaction_list,
-					    transaction->priv->tid);
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -3422,6 +3503,7 @@ pk_transaction_update_system (PkTransaction *transaction, DBusGMethodInvocation
 	/* check if the action is allowed from this client - if not, set an error */
 	ret = pk_transaction_action_is_allowed (transaction, FALSE, PK_ROLE_ENUM_UPDATE_SYSTEM, &error);
 	if (!ret) {
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -3430,6 +3512,7 @@ pk_transaction_update_system (PkTransaction *transaction, DBusGMethodInvocation
 	if (pk_transaction_list_role_present (transaction->priv->transaction_list, PK_ROLE_ENUM_UPDATE_SYSTEM)) {
 		error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_TRANSACTION_EXISTS_WITH_ROLE,
 				     "Already performing system update");
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -3441,6 +3524,7 @@ pk_transaction_update_system (PkTransaction *transaction, DBusGMethodInvocation
 	if (!ret) {
 		error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_COMMIT_FAILED,
 				     "Could not commit to a transaction object");
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -3472,6 +3556,7 @@ pk_transaction_what_provides (PkTransaction *transaction, const gchar *filter, c
 		egg_debug ("Not implemented yet: WhatProvides");
 		error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_NOT_SUPPORTED,
 				     "Operation not yet supported by backend");
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -3479,6 +3564,7 @@ pk_transaction_what_provides (PkTransaction *transaction, const gchar *filter, c
 	/* check the search term */
 	ret = pk_transaction_search_check (search, &error);
 	if (!ret) {
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -3486,6 +3572,7 @@ pk_transaction_what_provides (PkTransaction *transaction, const gchar *filter, c
 	/* check the filter */
 	ret = pk_transaction_filter_check (filter, &error);
 	if (!ret) {
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -3494,6 +3581,7 @@ pk_transaction_what_provides (PkTransaction *transaction, const gchar *filter, c
 	if (provides == PK_PROVIDES_ENUM_UNKNOWN) {
 		error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_INVALID_PROVIDE,
 				     "provide type '%s' not found", type);
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
@@ -3517,6 +3605,7 @@ pk_transaction_what_provides (PkTransaction *transaction, const gchar *filter, c
 	if (!ret) {
 		error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_COMMIT_FAILED,
 				     "Could not commit to a transaction object");
+		pk_transaction_release_tid (transaction);
 		dbus_g_method_return_error (context, error);
 		return;
 	}
commit 65efd13cfc52f8d7963100d08681998aba92b506
Author: Richard Hughes <richard at hughsie.com>
Date:   Tue Nov 4 20:51:41 2008 +0000

    yum: filter out stderr KEY requests before the data is processed

diff --git a/backends/yum/pk-backend-yum.c b/backends/yum/pk-backend-yum.c
index 819abd3..918795b 100644
--- a/backends/yum/pk-backend-yum.c
+++ b/backends/yum/pk-backend-yum.c
@@ -22,10 +22,23 @@
 #include <packagekit-glib/packagekit.h>
 #include <pk-backend.h>
 #include <pk-backend-spawn.h>
+#include <string.h>
 
 static PkBackendSpawn *spawn;
 
 /**
+ * backend_stderr_cb:
+ */
+static gboolean
+backend_stderr_cb (PkBackend *backend, const gchar *output)
+{
+	/* unsigned rpm, this will be picked up by yum and and exception will be thrown */
+	if (strstr (output, "NOKEY") != NULL)
+		return FALSE;
+	return TRUE;
+}
+
+/**
  * backend_initialize:
  * This should only be run once per backend load, i.e. not every transaction
  */
@@ -34,6 +47,7 @@ backend_initialize (PkBackend *backend)
 {
 	egg_debug ("backend: initialize");
 	spawn = pk_backend_spawn_new ();
+	pk_backend_spawn_set_filter_stderr (spawn, backend_stderr_cb);
 	pk_backend_spawn_set_name (spawn, "yum");
 }
 
commit dc99221b2103eed553330da0e6efb31570aa650e
Author: Richard Hughes <richard at hughsie.com>
Date:   Tue Nov 4 20:51:08 2008 +0000

    feature: add the functions pk_backend_spawn_set_filter_x() to allow the spawned backends to filter the output if required

diff --git a/src/pk-backend-spawn.c b/src/pk-backend-spawn.c
index 55e107a..b8a93aa 100644
--- a/src/pk-backend-spawn.c
+++ b/src/pk-backend-spawn.c
@@ -63,11 +63,35 @@ struct PkBackendSpawnPrivate
 	guint			 backend_finished_id;
 	PkConf			*conf;
 	gboolean		 finished;
+	PkBackendSpawnFilterFunc stdout_func;
+	PkBackendSpawnFilterFunc stderr_func;
 };
 
 G_DEFINE_TYPE (PkBackendSpawn, pk_backend_spawn, G_TYPE_OBJECT)
 
 /**
+ * pk_backend_spawn_set_filter_stdout:
+ **/
+gboolean
+pk_backend_spawn_set_filter_stdout (PkBackendSpawn *backend_spawn, PkBackendSpawnFilterFunc func)
+{
+	g_return_val_if_fail (PK_IS_BACKEND_SPAWN (backend_spawn), FALSE);
+	backend_spawn->priv->stdout_func = func;
+	return TRUE;
+}
+
+/**
+ * pk_backend_spawn_set_filter_stderr:
+ **/
+gboolean
+pk_backend_spawn_set_filter_stderr (PkBackendSpawn *backend_spawn, PkBackendSpawnFilterFunc func)
+{
+	g_return_val_if_fail (PK_IS_BACKEND_SPAWN (backend_spawn), FALSE);
+	backend_spawn->priv->stderr_func = func;
+	return TRUE;
+}
+
+/**
  * pk_backend_spawn_parse_stdout:
  *
  * If you are editing this function creating a new backend,
@@ -456,6 +480,13 @@ pk_backend_spawn_stdout_cb (PkBackendSpawn *spawn, const gchar *line, PkBackendS
 	gboolean ret;
 	g_return_if_fail (PK_IS_BACKEND_SPAWN (backend_spawn));
 
+	/* do we ignore with a filter func ? */
+	if (backend_spawn->priv->stdout_func != NULL) {
+		ret = backend_spawn->priv->stdout_func (backend_spawn->priv->backend, line);
+		if (!ret)
+			return;
+	}
+
 	ret = pk_backend_spawn_parse_stdout (backend_spawn, line);
 	if (!ret)
 		egg_debug ("failed to parse '%s'", line);
@@ -467,6 +498,16 @@ pk_backend_spawn_stdout_cb (PkBackendSpawn *spawn, const gchar *line, PkBackendS
 static void
 pk_backend_spawn_stderr_cb (PkBackendSpawn *spawn, const gchar *line, PkBackendSpawn *backend_spawn)
 {
+	gboolean ret;
+	g_return_if_fail (PK_IS_BACKEND_SPAWN (backend_spawn));
+
+	/* do we ignore with a filter func ? */
+	if (backend_spawn->priv->stderr_func != NULL) {
+		ret = backend_spawn->priv->stderr_func (backend_spawn->priv->backend, line);
+		if (!ret)
+			return;
+	}
+
 	/* send error up to session, this is never going to be pretty... */
 	egg_warning ("STDERR: %s", line);
 	pk_backend_error_code (backend_spawn->priv->backend, PK_ERROR_ENUM_INTERNAL_ERROR,
@@ -731,6 +772,8 @@ pk_backend_spawn_init (PkBackendSpawn *backend_spawn)
 	backend_spawn->priv = PK_BACKEND_SPAWN_GET_PRIVATE (backend_spawn);
 	backend_spawn->priv->kill_id = 0;
 	backend_spawn->priv->name = NULL;
+	backend_spawn->priv->stdout_func = NULL;
+	backend_spawn->priv->stderr_func = NULL;
 	backend_spawn->priv->finished = FALSE;
 	backend_spawn->priv->conf = pk_conf_new ();
 	backend_spawn->priv->backend = pk_backend_new ();
diff --git a/src/pk-backend-spawn.h b/src/pk-backend-spawn.h
index 5c320c2..50b629e 100644
--- a/src/pk-backend-spawn.h
+++ b/src/pk-backend-spawn.h
@@ -59,6 +59,14 @@ const gchar	*pk_backend_spawn_get_name		(PkBackendSpawn	*backend_spawn);
 gboolean	 pk_backend_spawn_set_name		(PkBackendSpawn	*backend_spawn,
 							 const gchar	*name);
 
+/* filtering */
+typedef gboolean (*PkBackendSpawnFilterFunc)		(PkBackend	*backend,
+							 const gchar	*data);
+gboolean	 pk_backend_spawn_set_filter_stderr	(PkBackendSpawn	*backend_spawn,
+							 PkBackendSpawnFilterFunc func);
+gboolean	 pk_backend_spawn_set_filter_stdout	(PkBackendSpawn	*backend_spawn,
+							 PkBackendSpawnFilterFunc func);
+
 
 G_END_DECLS
 


More information about the PackageKit-commit mailing list