Index: trac011-upgrade/externals/trac-xmlrpcplugin/setup.py
===================================================================
--- trac011-upgrade/externals/trac-xmlrpcplugin/setup.py	(revision 2507)
+++ trac011-upgrade/externals/trac-xmlrpcplugin/setup.py	(working copy)
@@ -7,7 +7,7 @@
     version='0.1',
     author='Alec Thomas',
     author_email='alec@swapoff.org',
-    url='http://trac-hacks.swapoff.org/wiki/XmlRpcPlugin',
+    url='http://trac-hacks.org/wiki/XmlRpcPlugin',
     description='XML-RPC interface to Trac',
     zip_safe=True,
     packages=['tracrpc'],
Index: trac011-upgrade/externals/trac-xmlrpcplugin/tracrpc/api.py
===================================================================
--- trac011-upgrade/externals/trac-xmlrpcplugin/tracrpc/api.py	(revision 2507)
+++ trac011-upgrade/externals/trac-xmlrpcplugin/tracrpc/api.py	(working copy)
@@ -3,6 +3,8 @@
 import inspect
 import types
 import xmlrpclib
+import datetime
+from tracrpc.util import to_datetime
 try:
     set = set
 except:
@@ -87,7 +89,10 @@
         if result is None:
             result = 0
         elif isinstance(result, dict):
-            pass
+            for key,val in result.iteritems():
+                if isinstance(val, datetime.datetime):
+                    result[key] = to_datetime(val)
+            #pass
         elif not isinstance(result, basestring):
             # Try and convert result to a list
             try:
@@ -224,4 +229,4 @@
         version number, second is the minor. Changes to the major version
         indicate API breaking changes, while minor version changes are simple
         additions, bug fixes, etc. """
-        return [0, 2]
+        return [0, 3]
Index: trac011-upgrade/externals/trac-xmlrpcplugin/tracrpc/web_ui.py
===================================================================
--- trac011-upgrade/externals/trac-xmlrpcplugin/tracrpc/web_ui.py	(revision 2507)
+++ trac011-upgrade/externals/trac-xmlrpcplugin/tracrpc/web_ui.py	(working copy)
@@ -1,3 +1,4 @@
+from pkg_resources import resource_filename
 from trac.core import *
 from trac.web.main import IRequestHandler
 from trac.web.chrome import ITemplateProvider, add_stylesheet
@@ -8,7 +9,7 @@
 class XMLRPCWeb(Component):
     """ Handle XML-RPC calls from HTTP clients, as well as presenting a list of
         methods available to the currently logged in user. Browsing to
-        <trac>/xmlrpc will display this list. """
+        <trac>/xmlrpc or <trac>/login/xmlrpc will display this list. """
 
     implements(IRequestHandler, ITemplateProvider)
 
@@ -48,8 +49,7 @@
                     traceback.print_exc(file=out)
                     raise Exception('%s: %s\n%s' % (method.name, str(e), out.getvalue()))
             add_stylesheet(req, 'common/css/wiki.css')
-            req.hdf['xmlrpc.functions'] = namespaces
-            return 'xmlrpclist.cs', None
+            return ('xmlrpclist.cs', {'xmlrpc': {'functions': namespaces}}, None)
 
         # Handle XML-RPC call
         args, method = xmlrpclib.loads(req.read(int(req.get_header('Content-Length'))))
@@ -73,5 +73,4 @@
         return []
 
     def get_templates_dirs(self):
-        from pkg_resources import resource_filename
         return [resource_filename(__name__, 'templates')]
Index: trac011-upgrade/externals/trac-xmlrpcplugin/tracrpc/util.py
===================================================================
--- trac011-upgrade/externals/trac-xmlrpcplugin/tracrpc/util.py	(revision 2507)
+++ trac011-upgrade/externals/trac-xmlrpcplugin/tracrpc/util.py	(working copy)
@@ -1,5 +1,10 @@
 import time
+import xmlrpclib
 
 def to_timestamp(datetime):
     """ Convert xmlrpclib.DateTime string representation to UNIX timestamp. """
     return time.mktime(time.strptime('%s UTC' % datetime.value, '%Y%m%dT%H:%M:%S %Z')) - time.timezone
+
+def to_datetime(dt):
+    """ Convert a datetime.datetime object to a xmlrpclib DateTime object """
+    return xmlrpclib.DateTime(dt.utctimetuple())
\ No newline at end of file
Index: trac011-upgrade/externals/trac-xmlrpcplugin/tracrpc/ticket.py
===================================================================
--- trac011-upgrade/externals/trac-xmlrpcplugin/tracrpc/ticket.py	(revision 2507)
+++ trac011-upgrade/externals/trac-xmlrpcplugin/tracrpc/ticket.py	(working copy)
@@ -1,7 +1,7 @@
 from trac.attachment import Attachment
 from trac.core import *
 from tracrpc.api import IXMLRPCHandler, expose_rpc
-from tracrpc.util import to_timestamp
+from tracrpc.util import to_timestamp, to_datetime
 import trac.ticket.model as model
 import trac.ticket.query as query
 from trac.ticket.api import TicketSystem
@@ -69,7 +69,8 @@
     def get(self, req, id):
         """ Fetch a ticket. Returns [id, time_created, time_changed, attributes]. """
         t = model.Ticket(self.env, id)
-        return (t.id, t.time_created, t.time_changed, t.values)
+        return (t.id, to_datetime(t.time_created), 
+                to_datetime(t.time_changed), t.values)
 
     def create(self, req, summary, description, attributes = {}, notify=False):
         """ Create a new ticket, returning the ticket ID. """
@@ -118,7 +119,8 @@
 
     def changeLog(self, req, id, when=0):
         t = model.Ticket(self.env, id)
-        return t.get_changelog(when)
+        for date, author, field, old, new, permanent in t.get_changelog(when):
+            yield (to_datetime(date), author, field, old, new, permanent)
     # Use existing documentation from Ticket model
     changeLog.__doc__ = pydoc.getdoc(model.Ticket.get_changelog)
 
@@ -126,7 +128,8 @@
         """ Lists attachments for a given ticket. Returns (filename,
         description, size, time, author) for each attachment."""
         for t in Attachment.select(self.env, 'ticket', ticket):
-            yield (t.filename, t.description or '', t.size, t.time, t.author)
+            yield (t.filename, t.description or '', t.size, 
+                   to_datetime(t.date), t.author)
 
     def getAttachment(self, req, ticket, filename):
         """ returns the content of an attachment. """
Index: trac011-upgrade/externals/trac-xmlrpcplugin/tracrpc/wiki.py
===================================================================
--- trac011-upgrade/externals/trac-xmlrpcplugin/tracrpc/wiki.py	(revision 2507)
+++ trac011-upgrade/externals/trac-xmlrpcplugin/tracrpc/wiki.py	(working copy)
@@ -4,6 +4,7 @@
     from StringIO import StringIO
 import xmlrpclib
 import posixpath
+import time
 
 from trac.core import *
 from trac.perm import IPermissionRequestor
@@ -12,7 +13,7 @@
 from trac.wiki.formatter import wiki_to_html
 from trac.attachment import Attachment
 from tracrpc.api import IXMLRPCHandler, expose_rpc
-from tracrpc.util import to_timestamp
+from tracrpc.util import to_timestamp, to_datetime
 
 class WikiRPC(Component):
     """ Implementation of the [http://www.jspwiki.org/Wiki.jsp?page=WikiRPCInterface2 WikiRPC API]. """
@@ -92,8 +93,9 @@
         page = WikiPage(self.env, pagename, version)
         if page.exists:
             last_update = page.get_history().next()
-            return self._page_info(page.name, last_update[1], last_update[2],
-                                   page.version)
+            return self._page_info(page.name, 
+                                   time.mktime(last_update[1].utctimetuple()), 
+                                   last_update[2], page.version)
 
     def putPage(self, req, pagename, content, attributes):
         """ writes the content of the page. """
Index: trac011-upgrade/externals/trac-xmlrpcplugin/tracrpc/search.py
===================================================================
--- trac011-upgrade/externals/trac-xmlrpcplugin/tracrpc/search.py	(revision 2507)
+++ trac011-upgrade/externals/trac-xmlrpcplugin/tracrpc/search.py	(working copy)
@@ -1,6 +1,7 @@
 from trac.core import *
 from tracrpc.api import IXMLRPCHandler
-from trac.Search import ISearchSource
+from tracrpc.util import to_datetime
+from trac.search import ISearchSource
 
 try:
     a = set()
@@ -46,9 +47,10 @@
         self.env.log.debug("Searching with %s" % filters)
 
         results = []
+        converters = [unicode, unicode, to_datetime, unicode, unicode]         	
         for source in self.search_sources:
             for result in source.get_search_results(req, query, filters):
-                result = map(unicode, result)
+                result = [f(v) for f,v in zip(converters, result)]
                 results.append(['/'.join(req.base_url.split('/')[0:3])
                                 + result[0]] + list(result[1:]))
         return results
Index: trac011-upgrade/externals/trac-xmlrpcplugin/tracrpc/templates/xmlrpclist.cs
===================================================================
--- trac011-upgrade/externals/trac-xmlrpcplugin/tracrpc/templates/xmlrpclist.cs	(revision 2507)
+++ trac011-upgrade/externals/trac-xmlrpcplugin/tracrpc/templates/xmlrpclist.cs	(working copy)
@@ -1,46 +1,54 @@
-<?cs include "header.cs"?>
-<?cs include "macros.cs"?>
+<!DOCTYPE html
+    PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"
+      xmlns:py="http://genshi.edgewall.org/"
+      xmlns:xi="http://www.w3.org/2001/XInclude">
+  <xi:include href="layout.html" />
+  <xi:include href="macros.html" />
+  <head>
+    <title>XML-RPC</title>
+  </head>
+  <body>
 
-<div id="ctxtnav" class="nav"></div>
+    <div id="ctxtnav" class="nav" />
 
-<div id="content" class="wiki">
+    <div id="content" class="wiki">
 
-<h2>XML-RPC exported functions</h2>
+      <h2>XML-RPC exported functions</h2>
 
-<div id="searchable">
-<dl>
-<?cs each:namespace = xmlrpc.functions ?>
+      <div id="searchable">
+        <dl py:for="key in xmlrpc.functions" py:with="namespace = xmlrpc.functions[key]">
+          <dt>
+            <h3 id="${'xmlrpc.' + to_unicode(namespace.namespace)}">
+              ${namespace.namespace} - ${namespace.description}
+            </h3>
+          </dt>
+          <dd>
+            <table class="listing tickets">
+              <thead>
+                <tr>
+                  <th>Function</th>
+                  <th>Description</th>
+                  <th><nobr>Permission required</nobr></th>
+                </tr>
+              </thead>
+              <tbody py:for="idx, function in enumerate(namespace.methods)">
+                <tr class="${'color3-' + (idx % 2 == 0 and 'even' or 'odd')}">
+                  <td><nobr>${function[0]}</nobr></td>
+                  <td>${function[1]}</td>
+                  <td>${function[2]}</td>
+                </tr>
+              </tbody>
+            </table>
+          </dd>
+        </dl>
+      </div>
 
-<dt><h3 id=xmlrpc.<?cs var:namespace.namespace ?>><?cs var:namespace.namespace ?> - <?cs var:namespace.description ?></h3></dt>
-<dd>
-<table class="listing tickets">
-<thead>
-<tr>
-<th>Function</th>
-<th>Description</th>
-<th><nobr>Permission required</nobr></th>
-</tr>
-</thead>
+      <script type="text/javascript">
+        addHeadingLinks(document.getElementById("searchable"));
+      </script>
+    </div>
 
-<?cs set idx = #0 ?>
-<tbody>
-<?cs each:function = namespace.methods ?>
-<tr class="color3-<?cs if idx % #2 == 0 ?>even<?cs else ?>odd<?cs /if ?>" style="">
-<td><nobr><?cs var:function.0?></nobr></td><td><?cs var:function.1?></td><td><?cs var:function.2 ?></td>
-</tr>
-<?cs set idx = idx + #1 ?>
-<?cs /each ?>
-</tbody>
-</table>
-</dd>
-<?cs /each ?>
-</dl>
-</div>
-
-<script type="text/javascript">
-addHeadingLinks(document.getElementById("searchable"));
-</script>
-
-</div>
-
-<?cs include:"footer.cs"?>
+  </body>
+</html>
