Index: tracrpc/web_ui.py
===================================================================
--- tracrpc/web_ui.py	(revision 818)
+++ tracrpc/web_ui.py	(working copy)
@@ -54,7 +54,7 @@ class XMLRPCWeb(Component):
         args, method = xmlrpclib.loads(req.read(int(req.get_header('Content-Length'))))
         try:
             result = XMLRPCSystem(self.env).get_method(method)(req, args)
-            self._send_response(req, xmlrpclib.dumps(result, methodresponse=True))
+            self._send_response(req, xmlrpclib.dumps(result, methodresponse=True, allow_none=1))
         except xmlrpclib.Fault, e:
             self._send_response(req, xmlrpclib.dumps(e))
         except Exception, e:
Index: tracrpc/ticket.py
===================================================================
--- tracrpc/ticket.py	(revision 818)
+++ tracrpc/ticket.py	(working copy)
@@ -6,6 +6,7 @@ import trac.ticket.query as query
 
 import pydoc
 import xmlrpclib
+from StringIO import StringIO
 
 class TicketRPC(Component):
     """ An interface to Trac's ticketing system. """
@@ -58,7 +59,7 @@ class TicketRPC(Component):
         for k, v in attributes.iteritems():
             t[k] = v
         t.save_changes(req.authname, comment)
-        return self.get(t.id)
+        return self.get(req, t.id)
 
     def delete(self, req, id):
         """ Delete ticket with the given id. """
@@ -66,7 +67,7 @@ class TicketRPC(Component):
         t.delete()
 
     def changeLog(self, req, id, when = 0):
-        t = model.Ticket(self.env, id)
+        t = model.Ticket(self.env, id, when)
         return t.get_changelog()
     # Use existing documentation from Ticket model
     changeLog.__doc__ = pydoc.getdoc(model.Ticket.get_changelog)
@@ -76,17 +77,17 @@ class TicketRPC(Component):
         return [a.filename for a in Attachment.select(self.env, 'ticket', ticket)]
 
     def getAttachment(self, req, ticket, filename):
-        """ returns the content of an attachment. """
+        """ Returns the content of an attachment. """
         attachment = Attachment(self.env, 'ticket', ticket, filename)
         return xmlrpclib.Binary(attachment.open().read())
 
     def putAttachment(self, req, ticket, filename, data):
-        """ (over)writes an attachment. """
-        if not Ticket(self.env, ticket).exists:
+        """ Writes an attachment and returns the filename of the attachment. If an attachment with filename already exists, a new unique filename is generated."""
+        if not model.Ticket(self.env, ticket).exists:
             raise TracError, 'Ticket "%s" does not exist' % ticket
         attachment = Attachment(self.env, 'ticket', ticket)
         attachment.insert(filename, StringIO(data.data), len(data.data))
-        return True
+        return attachment.filename
 
 
 def ticketModelFactory(cls, cls_attributes):
@@ -114,7 +115,7 @@ def ticketModelFactory(cls, cls_attribut
             attributes= {}
             for k in cls_attributes:
                 attributes[k] = getattr(i, k)
-            return attr
+            return (name, attributes)
         get.__doc__ = """ Get a ticket %s. """ % cls.__name__.lower()
 
         def delete(self, req, name):
@@ -122,15 +123,14 @@ def ticketModelFactory(cls, cls_attribut
         delete.__doc__ = """ Delete a ticket %s """ % cls.__name__.lower()
 
         def create(self, req, name, attributes):
-            self._updateHelper(name, attributes).insert()
+            self._updateHelper(cls(self.env), name, attributes).insert()
         create.__doc__ = """ Create a new ticket %s with the given attributes. """ % cls.__name__.lower()
 
         def update(self, req, name, attributes):
-            self._updateHelper(name, attributes).update()
+            self._updateHelper(cls(self.env, name), name, attributes).update()
         update.__doc__ = """ Update ticket %s with the given attributes. """ % cls.__name__.lower()
 
-        def _updateHelper(self, name, attributes):
-            i = cls(self.env)
+        def _updateHelper(self, i, name, attributes):
             i.name = name
             for k, v in attributes.iteritems():
                 setattr(i, k, v)
@@ -169,15 +169,14 @@ def ticketEnumFactory(cls):
         delete.__doc__ = """ Delete a ticket %s """ % cls.__name__.lower()
 
         def create(self, req, name, value):
-            self._updateHelper(name, value).insert()
+            self._updateHelper(req, cls(self.env), name, value).insert()
         create.__doc__ = """ Create a new ticket %s with the given value. """ % cls.__name__.lower()
 
         def update(self, req, name, value):
-            self._updateHelper(name, value).update()
+            self._updateHelper(req, cls(self.env, name), name, value).update()
         update.__doc__ = """ Update ticket %s with the given value. """ % cls.__name__.lower()
 
-        def _updateHelper(self, req, name, value):
-            i = cls(self.env)
+        def _updateHelper(self, req, i, name, value):
             i.name = name
             i.value = value
             return i

