diff --git a/hgext/rebase.py b/hgext/rebase.py
index e43c140eb08fed717ff26cd45c2dc92db7778e39_aGdleHQvcmViYXNlLnB5..e4fc0f0b4f7e73f6cbfa132cf09b7027a909d08c_aGdleHQvcmViYXNlLnB5 100644
--- a/hgext/rebase.py
+++ b/hgext/rebase.py
@@ -15,7 +15,7 @@
 '''
 
 from mercurial import hg, util, repair, merge, cmdutil, commands, bookmarks
-from mercurial import extensions, patch
+from mercurial import extensions, patch, scmutil
 from mercurial.commands import templateopts
 from mercurial.node import nullrev
 from mercurial.lock import release
@@ -187,5 +187,6 @@
             if revf:
                 revgen = repo.set('%lr', revf)
             elif srcf:
-                revgen = repo.set('(%r)::', srcf)
+                src = scmutil.revrange(repo, [srcf])
+                revgen = repo.set('(%ld)::', src)
             else:
@@ -191,6 +192,6 @@
             else:
-                base = basef or '.'
-                revgen = repo.set('(children(ancestor(%r, %d)) and ::(%r))::',
+                base = scmutil.revrange(repo, [basef or '.'])
+                revgen = repo.set('(children(ancestor(%ld, %d)) and ::(%ld))::',
                                   base, dest, base)
 
             rebaseset = [c.rev() for c in revgen]
diff --git a/tests/test-rebase-named-branches.t b/tests/test-rebase-named-branches.t
index e43c140eb08fed717ff26cd45c2dc92db7778e39_dGVzdHMvdGVzdC1yZWJhc2UtbmFtZWQtYnJhbmNoZXMudA==..e4fc0f0b4f7e73f6cbfa132cf09b7027a909d08c_dGVzdHMvdGVzdC1yZWJhc2UtbmFtZWQtYnJhbmNoZXMudA== 100644
--- a/tests/test-rebase-named-branches.t
+++ b/tests/test-rebase-named-branches.t
@@ -19,10 +19,7 @@
   3 files updated, 0 files merged, 0 files removed, 0 files unresolved
   $ cd ..
 
-
-Rebasing descendant onto ancestor across different named branches
-
   $ hg clone -q -u . a a1
 
   $ cd a1
 
@@ -25,12 +22,21 @@
   $ hg clone -q -u . a a1
 
   $ cd a1
 
-  $ hg branch dev
-  marked working directory as branch dev
+  $ hg update 3
+  3 files updated, 0 files merged, 2 files removed, 0 files unresolved
+  $ hg branch dev-one
+  marked working directory as branch dev-one
+  (branches are permanent and global, did you want a bookmark?)
+  $ hg ci -m 'dev-one named branch'
+
+  $ hg update 7
+  2 files updated, 0 files merged, 3 files removed, 0 files unresolved
+  $ hg branch dev-two
+  marked working directory as branch dev-two
   (branches are permanent and global, did you want a bookmark?)
 
   $ echo x > x
 
   $ hg add x
 
@@ -31,9 +37,60 @@
   (branches are permanent and global, did you want a bookmark?)
 
   $ echo x > x
 
   $ hg add x
 
-  $ hg ci -m 'extra named branch'
+  $ hg ci -m 'dev-two named branch'
+
+  $ hg tglog
+  @  9: 'dev-two named branch' dev-two
+  |
+  | o  8: 'dev-one named branch' dev-one
+  | |
+  o |  7: 'H'
+  | |
+  +---o  6: 'G'
+  | | |
+  o | |  5: 'F'
+  | | |
+  +---o  4: 'E'
+  | |
+  | o  3: 'D'
+  | |
+  | o  2: 'C'
+  | |
+  | o  1: 'B'
+  |/
+  o  0: 'A'
+  
+
+Branch name containing a dash (issue3181)
+
+  $ hg rebase -b dev-two -d dev-one --keepbranches
+  saved backup bundle to $TESTTMP/a1/.hg/strip-backup/*-backup.hg (glob)
+
+  $ hg tglog
+  @  9: 'dev-two named branch' dev-two
+  |
+  o  8: 'H'
+  |
+  | o  7: 'G'
+  |/|
+  o |  6: 'F'
+  | |
+  o |  5: 'dev-one named branch' dev-one
+  | |
+  | o  4: 'E'
+  | |
+  o |  3: 'D'
+  | |
+  o |  2: 'C'
+  | |
+  o |  1: 'B'
+  |/
+  o  0: 'A'
+  
+  $ hg rebase -s dev-one -d 0 --keepbranches
+  saved backup bundle to $TESTTMP/a1/.hg/strip-backup/*-backup.hg (glob)
 
   $ hg tglog
@@ -38,6 +95,80 @@
 
   $ hg tglog
-  @  8: 'extra named branch' dev
+  @  8: 'dev-two named branch' dev-two
+  |
+  o  7: 'H'
+  |
+  | o  6: 'G'
+  |/|
+  o |  5: 'F'
+  | |
+  | o  4: 'E'
+  |/
+  | o  3: 'D'
+  | |
+  | o  2: 'C'
+  | |
+  | o  1: 'B'
+  |/
+  o  0: 'A'
+  
+  $ hg update 3
+  3 files updated, 0 files merged, 3 files removed, 0 files unresolved
+  $ hg branch dev-one
+  marked working directory as branch dev-one
+  (branches are permanent and global, did you want a bookmark?)
+  $ hg ci -m 'dev-one named branch'
+
+  $ hg tglog
+  @  9: 'dev-one named branch' dev-one
+  |
+  | o  8: 'dev-two named branch' dev-two
+  | |
+  | o  7: 'H'
+  | |
+  | | o  6: 'G'
+  | |/|
+  | o |  5: 'F'
+  | | |
+  | | o  4: 'E'
+  | |/
+  o |  3: 'D'
+  | |
+  o |  2: 'C'
+  | |
+  o |  1: 'B'
+  |/
+  o  0: 'A'
+  
+  $ hg rebase -b 'max(branch("dev-two"))' -d dev-one --keepbranches
+  saved backup bundle to $TESTTMP/a1/.hg/strip-backup/*-backup.hg (glob)
+
+  $ hg tglog
+  @  9: 'dev-two named branch' dev-two
+  |
+  o  8: 'H'
+  |
+  | o  7: 'G'
+  |/|
+  o |  6: 'F'
+  | |
+  o |  5: 'dev-one named branch' dev-one
+  | |
+  | o  4: 'E'
+  | |
+  o |  3: 'D'
+  | |
+  o |  2: 'C'
+  | |
+  o |  1: 'B'
+  |/
+  o  0: 'A'
+  
+  $ hg rebase -s 'max(branch("dev-one"))' -d 0 --keepbranches
+  saved backup bundle to $TESTTMP/a1/.hg/strip-backup/*-backup.hg (glob)
+
+  $ hg tglog
+  @  8: 'dev-two named branch' dev-two
   |
   o  7: 'H'
   |
@@ -56,6 +187,7 @@
   o  0: 'A'
   
 
+Rebasing descendant onto ancestor across different named branches
 
   $ hg rebase -s 1 -d 8 --keepbranches
   saved backup bundle to $TESTTMP/a1/.hg/strip-backup/*-backup.hg (glob)
@@ -67,7 +199,7 @@
   |
   o  6: 'B'
   |
-  o  5: 'extra named branch' dev
+  o  5: 'dev-two named branch' dev-two
   |
   o  4: 'H'
   |
@@ -93,7 +225,7 @@
   |
   o  6: 'B'
   |
-  o  5: 'extra named branch'
+  o  5: 'dev-two named branch'
   |
   o  4: 'H'
   |