diff --git a/hgext/notify.py b/hgext/notify.py
index 93c77d5b9752c351a6c04c4aaf7ec4d46002704e_aGdleHQvbm90aWZ5LnB5..2a7fa7c641d80430659d589cf3316cfe6a7f81d9_aGdleHQvbm90aWZ5LnB5 100644
--- a/hgext/notify.py
+++ b/hgext/notify.py
@@ -108,6 +108,11 @@
 notify.mbox
   If set, append mails to this mbox file instead of sending. Default: None.
 
+notify.fromauthor
+  If set, use the first committer of the changegroup for the "From" field of
+  the notification mail. If not set, take the user from the pushing repo.
+  Default: False.
+
 If set, the following entries will also be used to customize the notifications:
 
 email.from
@@ -338,8 +343,9 @@
     ui.pushbuffer()
     data = ''
     count = 0
+    author = ''
     if hooktype == 'changegroup' or hooktype == 'outgoing':
         start, end = ctx.rev(), len(repo)
         for rev in xrange(start, end):
             if n.node(repo[rev]):
                 count += 1
@@ -341,8 +347,10 @@
     if hooktype == 'changegroup' or hooktype == 'outgoing':
         start, end = ctx.rev(), len(repo)
         for rev in xrange(start, end):
             if n.node(repo[rev]):
                 count += 1
+                if not author:
+                    author = repo[rev].user()
             else:
                 data += ui.popbuffer()
                 ui.note(_('notify: suppressing notification for merge %d:%s\n') %
@@ -360,5 +368,9 @@
         n.diff(ctx)
 
     data += ui.popbuffer()
+    fromauthor = ui.config('notify', 'fromauthor')
+    if author and fromauthor:
+        data = '\n'.join(['From: %s' % author, data])
+
     if count:
         n.send(ctx, count, data)
diff --git a/tests/test-notify-changegroup.t b/tests/test-notify-changegroup.t
index 93c77d5b9752c351a6c04c4aaf7ec4d46002704e_dGVzdHMvdGVzdC1ub3RpZnktY2hhbmdlZ3JvdXAudA==..2a7fa7c641d80430659d589cf3316cfe6a7f81d9_dGVzdHMvdGVzdC1ub3RpZnktY2hhbmdlZ3JvdXAudA== 100644
--- a/tests/test-notify-changegroup.t
+++ b/tests/test-notify-changegroup.t
@@ -124,3 +124,91 @@
   +a
   +a
   (run 'hg update' to get a working copy)
+
+Check that using the first committer as the author of a changeset works:
+Check that the config option works.
+Check that the first committer is indeed used for "From:".
+Check that the merge user is NOT used for "From:"
+
+Create new file
+
+  $ echo a > b/b
+  $ echo b >> b/b
+  $ echo c >> b/b
+  $ hg --traceback --cwd b commit -Amnewfile -u committer_1
+  adding b
+
+commit as one user
+
+  $ echo x > b/b
+  $ echo b >> b/b
+  $ echo c >> b/b
+  $ hg --traceback --cwd b commit -Amx -u committer_2
+
+commit as other user, change file so we can do an (automatic) merge
+
+  $ hg --cwd b up 2
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ echo a > b/b
+  $ echo b >> b/b
+  $ echo y >> b/b
+  $ hg --traceback --cwd b commit -Amy -u committer_3
+  created new head
+
+merge as a different user
+
+  $ hg --cwd b merge --config notify.fromauthor=True
+  merging b
+  0 files updated, 1 files merged, 0 files removed, 0 files unresolved
+  (branch merge, don't forget to commit)
+
+  $ hg --traceback --cwd b commit -Am "merged"
+
+push
+
+  $ hg --traceback --cwd b --config notify.fromauthor=True push ../a 2>&1 |
+  >     python -c 'import sys,re; print re.sub("\n\t", " ", sys.stdin.read()),'
+  pushing to ../a
+  searching for changes
+  adding changesets
+  adding manifests
+  adding file changes
+  added 4 changesets with 4 changes to 1 files
+  Content-Type: text/plain; charset="us-ascii"
+  MIME-Version: 1.0
+  Content-Transfer-Encoding: 7bit
+  Date: * (glob)
+  Subject: * (glob)
+  From: committer_1
+  X-Hg-Notification: changeset 84e487dddc58
+  Message-Id: <*> (glob)
+  To: baz, foo@bar
+  
+  changeset 84e487dddc58 in $TESTTMP/a
+  details: $TESTTMP/a?cmd=changeset;node=84e487dddc58
+  summary: newfile
+  
+  changeset b29c7a2b6b0c in $TESTTMP/a
+  details: $TESTTMP/a?cmd=changeset;node=b29c7a2b6b0c
+  summary: x
+  
+  changeset 0957c7d64886 in $TESTTMP/a
+  details: $TESTTMP/a?cmd=changeset;node=0957c7d64886
+  summary: y
+  
+  changeset 485b4e6b0249 in $TESTTMP/a
+  details: $TESTTMP/a?cmd=changeset;node=485b4e6b0249
+  summary: merged
+  
+  diffs (7 lines):
+  
+  diff -r ba677d0156c1 -r 485b4e6b0249 b
+  --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+  +++ b/b	Thu Jan 01 00:00:00 1970 +0000
+  @@ -0,0 +1,3 @@
+  +x
+  +b
+  +y
+  $ hg --cwd a rollback
+  repository tip rolled back to revision 1 (undo push)
+
diff --git a/tests/test-notify.t b/tests/test-notify.t
index 93c77d5b9752c351a6c04c4aaf7ec4d46002704e_dGVzdHMvdGVzdC1ub3RpZnkudA==..2a7fa7c641d80430659d589cf3316cfe6a7f81d9_dGVzdHMvdGVzdC1ub3RpZnkudA== 100644
--- a/tests/test-notify.t
+++ b/tests/test-notify.t
@@ -116,6 +116,11 @@
   notify.mbox
     If set, append mails to this mbox file instead of sending. Default: None.
   
+  notify.fromauthor
+    If set, use the first committer of the changegroup for the "From" field of
+    the notification mail. If not set, take the user from the pushing repo.
+    Default: False.
+  
   If set, the following entries will also be used to customize the
   notifications: