Index: Trac-0.11.1/trac/ticket/web_ui.py
===================================================================
--- Trac-0.11.1/trac/ticket/web_ui.py	(revision 6)
+++ Trac-0.11.1/trac/ticket/web_ui.py	(working copy)
@@ -956,14 +956,6 @@
         ticket.insert()
         req.perm(ticket.resource).require('TICKET_VIEW')
 
-        # Notify
-        try:
-            tn = TicketNotifyEmail(self.env)
-            tn.notify(ticket, newticket=True)
-        except Exception, e:
-            self.log.exception("Failure sending notification on creation of "
-                               "ticket #%s: %s" % (ticket.id, e))
-
         # Redirect the user to the newly created ticket or add attachment
         if 'attachment' in req.args:
             req.redirect(req.href.attachment('ticket', ticket.id,
@@ -984,15 +976,9 @@
         # -- Save changes
 
         now = datetime.now(utc)
-        if ticket.save_changes(get_reporter_id(req, 'author'),
+        ticket.save_changes(get_reporter_id(req, 'author'),
                                      req.args.get('comment'), when=now,
-                                     cnum=internal_cnum):
-            try:
-                tn = TicketNotifyEmail(self.env)
-                tn.notify(ticket, newticket=False, modtime=now)
-            except Exception, e:
-                self.log.exception("Failure sending notification on change to "
-                                   "ticket #%s: %s" % (ticket.id, e))
+                                     cnum=internal_cnum)
 
         # After saving the changes, apply the side-effects.
         for controller in controllers:
Index: Trac-0.11.1/trac/ticket/notification.py
===================================================================
--- Trac-0.11.1/trac/ticket/notification.py	(revision 6)
+++ Trac-0.11.1/trac/ticket/notification.py	(working copy)
@@ -19,6 +19,7 @@
 from trac import __version__
 from trac.core import *
 from trac.config import *
+from trac.ticket.api import ITicketChangeListener
 from trac.notification import NotifyEmail
 from trac.util import md5
 from trac.util.datefmt import to_timestamp
@@ -26,7 +27,10 @@
 
 from genshi.template.text import TextTemplate
 
+class TicketNotifyEmail: pass
+
 class TicketNotificationSystem(Component):
+    implements(ITicketChangeListener)
 
     always_notify_owner = BoolOption('notification', 'always_notify_owner',
                                      'false',
@@ -48,6 +52,25 @@
         (since 0.11)""")
 
 
+    def ticket_created(self, ticket):
+        try:
+            tn = TicketNotifyEmail(self.env)
+            tn.notify(ticket, newticket=True)
+        except Exception, e:
+            self.log.exception("Failure sending notification on creation to "
+                              "ticket #%s: %s" % (ticket.id, e))
+
+    def ticket_changed(self, ticket, comment, author, old_values):
+        try:
+            tn = TicketNotifyEmail(self.env)
+            tn.notify(ticket, newticket=False, modtime=ticket.time_changed)
+        except Exception, e:
+            self.log.exception("Failure sending notification on change to "
+                              "ticket #%s: %s" % (ticket.id, e))
+
+    def ticket_deleted(self, ticket):    
+        """Not implemented for email notificaitons"""
+
 class TicketNotifyEmail(NotifyEmail):
     """Notification of ticket changes."""
 

