diff --git a/buildbot/status/words.py b/buildbot/status/words.py
index a1b546c..ff60ad2 100644
--- a/buildbot/status/words.py
+++ b/buildbot/status/words.py
@@ -168,7 +168,7 @@ class Contact:
     command_STATUS.usage = "status [<which>] - List status of a builder (or all builders)"
 
     def validate_notification_event(self, event):
-        if not re.compile("^(started|finished|success|failed|exception)$").match(event):
+        if not re.compile("^(started|finished|success|failed|exception|successToFailure|failureToSuccess)$").match(event):
             raise UsageError("try 'notify on|off <EVENT>'")
 
     def list_notified_events(self):
@@ -310,7 +310,7 @@ class Contact:
         # only notify about builders we are interested in
         log.msg('[Contact] builder %r in category %s finished' % (builder, builder.category))
 
-        if not self.notify_for('finished', 'failed', 'success', 'exception', 'failedToSuccess', 'successToFailed'):
+        if not self.notify_for('finished', 'failed', 'success', 'exception', 'failureToSuccess', 'successToFailure'):
             return
 
         if (self.channel.categories != None and
@@ -337,7 +337,7 @@ class Contact:
 
         prevBuild = build.getPreviousBuild()
         if prevBuild:
-            prevResult = prevBuild.getResult()
+            prevResult = prevBuild.getResults()
 
             if (self.notify_for('failureToSuccess') and prevResult == FAILURE and results == SUCCESS) or \
                (self.notify_for('successToFailure') and prevResult == SUCCESS and results == FAILURE):
diff --git a/buildbot/test/test_status.py b/buildbot/test/test_status.py
index 9c24ee0..ea460c2 100644
--- a/buildbot/test/test_status.py
+++ b/buildbot/test/test_status.py
@@ -1156,12 +1156,75 @@ class ContactTester(unittest.TestCase):
         irc.buildFinished(my_builder.getName(), my_build, None)
         self.failUnlessEqual(irc.message, "", "No finish notification generated on exception with notify_events=['exception']")
 
+    def test_notification_successToFailure(self):
+        irc = MyContact()
+
+        my_builder = MyBuilder("builder834")
+        my_build = MyIrcBuild(my_builder, 862, builder.FAILURE)
+        my_build.changes = (
+            Change(who = 'author1', files = ['file1'], comments = 'comment1', revision = 943),
+            )
+        previous_build = MyIrcBuild(my_builder, 861, builder.SUCCESS)
+        my_build.setPreviousBuild(previous_build)
+
+        irc.command_NOTIFY("on successToFailure", "mynick")
+
+        irc.message = ""
+        irc.buildStarted(my_builder.getName(), my_build)
+        self.failUnlessEqual(irc.message, "", "No started notification with notify_events=['failed']")
+
+        irc.message = ""
+        irc.buildFinished(my_builder.getName(), my_build, None)
+        self.failUnlessEqual(irc.message, "build #862 of builder834 is complete: Failure [step1 step2]  Build details are at http://myserver/mypath?build=765", "Finish notification generated on failure with notify_events=['successToFailure']")
+
+        irc.message = ""
+        my_build.results = builder.SUCCESS
+        irc.buildFinished(my_builder.getName(), my_build, None)
+        self.failUnlessEqual(irc.message, "", "No finish notification generated on success with notify_events=['failed']")
+
+        irc.message = ""
+        my_build.results = builder.EXCEPTION
+        irc.buildFinished(my_builder.getName(), my_build, None)
+        self.failUnlessEqual(irc.message, "", "No finish notification generated on exception with notify_events=['failed']")
+
+    def test_notification_failureToSuccess(self):
+        irc = MyContact()
+
+        my_builder = MyBuilder("builder834")
+        my_build = MyIrcBuild(my_builder, 862, builder.SUCCESS)
+        my_build.changes = (
+            Change(who = 'author1', files = ['file1'], comments = 'comment1', revision = 943),
+            )
+        previous_build = MyIrcBuild(my_builder, 861, builder.FAILURE)
+        my_build.setPreviousBuild(previous_build)
+
+        irc.command_NOTIFY("on failureToSuccess", "mynick")
+
+        irc.message = ""
+        irc.buildStarted(my_builder.getName(), my_build)
+        self.failUnlessEqual(irc.message, "", "No started notification with notify_events=['success']")
+
+        irc.message = ""
+        irc.buildFinished(my_builder.getName(), my_build, None)
+        self.failUnlessEqual(irc.message, "build #862 of builder834 is complete: Success [step1 step2]  Build details are at http://myserver/mypath?build=765", "Finish notification generated on success with notify_events=['failureToSuccess']")
+
+        irc.message = ""
+        my_build.results = builder.FAILURE
+        irc.buildFinished(my_builder.getName(), my_build, None)
+        self.failUnlessEqual(irc.message, "", "No finish notification generated on failure with notify_events=['success']")
+
+        irc.message = ""
+        my_build.results = builder.EXCEPTION
+        irc.buildFinished(my_builder.getName(), my_build, None)
+        self.failUnlessEqual(irc.message, "", "No finish notification generated on exception with notify_events=['success']")
+
 class MyIrcBuild(builder.BuildStatus):
     results = None
 
     def __init__(self, parent, number, results):
         builder.BuildStatus.__init__(self, parent, number)
         self.results = results
+        self.previousBuild = None
 
     def getResults(self):
         return self.results
@@ -1169,6 +1232,12 @@ class MyIrcBuild(builder.BuildStatus):
     def getText(self):
         return ('step1', 'step2')
 
+    def setPreviousBuild(self, pb):
+        self.previousBuild = pb
+
+    def getPreviousBuild(self):
+        return self.previousBuild
+
 class URLProducer:
     def getURLForThing(self, build):
         return 'http://myserver/mypath?build=765'
