diff --git a/bash_completion b/bash_completion
index 9fd0ebf..c876b98 100644
--- a/bash_completion
+++ b/bash_completion
@@ -86,6 +86,12 @@ _quilt_comfile()
         done
 }
 
+# Print a list of patches relative to the patches directory
+_quilt_patchlist()
+{
+	quilt $1 | sed -e "s:^\\(\\.\\./\\)*${QUILT_PATCHES:-patches}/\\?::"
+}
+
 _quilt_completion()
 {
     local cur prev cmds command_matches
@@ -123,7 +129,7 @@ _quilt_completion()
 	add)
 	   case $prev in
 	     -P)
- 	        COMPREPLY=( $( compgen -W "$(quilt applied)" -- $cur ) )
+ 	        COMPREPLY=( $( compgen -W "$(_quilt_patchlist applied)" -- $cur ) )
 		;;
 	     *)
 	        _quilt_comfile
@@ -134,7 +140,7 @@ _quilt_completion()
 	annotate)
 	   case $prev in
 	     -P)
- 	        COMPREPLY=( $( compgen -W "$(quilt applied)" -- $cur ) )
+ 	        COMPREPLY=( $( compgen -W "$(_quilt_patchlist applied)" -- $cur ) )
 		;;
 	     *)
 	        _quilt_comfile
@@ -143,10 +149,10 @@ _quilt_completion()
 	   esac
 	   ;;
 	applied) 
-	   COMPREPLY=( $( compgen -W "-h $(quilt applied)" -- $cur ) )
+	   COMPREPLY=( $( compgen -W "-h $(_quilt_patchlist applied)" -- $cur ) )
 	   ;;
 	delete) 
-	   COMPREPLY=( $( compgen -W "-n -r -h --backup $(quilt series)" -- $cur ) )
+	   COMPREPLY=( $( compgen -W "-n -r -h --backup $(_quilt_patchlist series)" -- $cur ) )
 	   ;;
 	diff) 
 	   case $prev in
@@ -154,7 +160,7 @@ _quilt_completion()
  	        COMPREPLY=( $( compgen -W "0 1" -- $cur ) )
 		;;
 	     -P|--combine)
-	     	COMPREPLY=( $( compgen -W "$(quilt applied)" -- $cur ) )
+	     	COMPREPLY=( $( compgen -W "$(_quilt_patchlist applied)" -- $cur ) )
 		;;
 	     --diff|-U|-C)
 		;;
@@ -171,10 +177,10 @@ _quilt_completion()
 	files)
 	   case $prev in
 	     --combine)
-		COMPREPLY=( $( compgen -W "$(quilt applied)" -- $cur ) )
+		COMPREPLY=( $( compgen -W "$(_quilt_patchlist applied)" -- $cur ) )
 		;;
 	     *)
-		COMPREPLY=( $( compgen -W "-a -l -v -h --combine $(quilt applied)" -- $cur ) )
+		COMPREPLY=( $( compgen -W "-a -l -v -h --combine $(_quilt_patchlist applied)" -- $cur ) )
 		;;
 	   esac
 	   ;;
@@ -198,7 +204,7 @@ _quilt_completion()
 	        COMPREPLY=( $( compgen -W "files" -- $cur ) )
 		;;
 	     *)
-		COMPREPLY=( $( compgen -W "-T -h --all --reduce --lines --edge-labels $(quilt applied)" -- $cur ) )
+		COMPREPLY=( $( compgen -W "-T -h --all --reduce --lines --edge-labels $(_quilt_patchlist applied)" -- $cur ) )
 		;;
 	   esac
 	   ;;
@@ -207,7 +213,7 @@ _quilt_completion()
 	   COMPREPLY=( ${COMPREPLY[@]:-} $( compgen -W "-h" -- $cur ) )
 	   ;;
 	header)
-	   COMPREPLY=( $( compgen -W "-a -e -h -r --backup --strip-diffstat --strip-trailing-whitespace $(quilt series)" -- $cur ) )
+	   COMPREPLY=( $( compgen -W "-a -e -h -r --backup --strip-diffstat --strip-trailing-whitespace $(_quilt_patchlist series)" -- $cur ) )
 	   ;;
 	import)
 	   case $prev in
@@ -229,17 +235,17 @@ _quilt_completion()
 	   COMPREPLY=( $( compgen -W "-m --prefix --mbox --send --sender --from --subject --to --cc --bcc" -- $cur ) )
 	   ;;
 	next|previous)
-	   COMPREPLY=( $( compgen -W "$(quilt series)" -- $cur ) )
+	   COMPREPLY=( $( compgen -W "$(_quilt_patchlist series)" -- $cur ) )
 	   ;;
 	patches)
 	   _quilt_comfile 
 	   COMPREPLY=( ${COMPREPLY[@]:-} $( compgen -W "-v -h" -- $cur ) )
 	   ;;
 	pop)
-	   COMPREPLY=( $( compgen -W "-a -f -R -q -v -h $(quilt applied)" -- $cur ) )
+	   COMPREPLY=( $( compgen -W "-a -f -R -q -v -h $(_quilt_patchlist applied)" -- $cur ) )
 	   ;;
 	push)
-	   COMPREPLY=( $( compgen -W "-a -f -q -v -h --leave-rejects --interactive --color $(quilt unapplied)" -- $cur ) )
+	   COMPREPLY=( $( compgen -W "-a -f -q -v -h --leave-rejects --interactive --color $(_quilt_patchlist unapplied)" -- $cur ) )
 	   ;;
 	refresh)
 	   case $prev in
@@ -249,14 +255,14 @@ _quilt_completion()
 	     -U|-C)
 		;;
 	     *)
-	     	COMPREPLY=( $( compgen -W "-p -u -U -c -C -f -h $(quilt applied) --no-timestamps --no-index --diffstat --sort --backup --strip-trailing-whitespace" -- $cur ) )
+	     	COMPREPLY=( $( compgen -W "-p -u -U -c -C -f -h $(_quilt_patchlist applied) --no-timestamps --no-index --diffstat --sort --backup --strip-trailing-whitespace" -- $cur ) )
 		;;
 	   esac
 	   ;;
 	remove)
 	   case $prev in
 	     -P)
- 	        COMPREPLY=( $( compgen -W "$(quilt applied)" -- $cur ) )
+ 	        COMPREPLY=( $( compgen -W "$(_quilt_patchlist applied)" -- $cur ) )
 		;;
 	     *)
 	        _quilt_comfile 
@@ -267,7 +273,7 @@ _quilt_completion()
 	rename)
 	   case $prev in
 	     -P)
-		COMPREPLY=( $( compgen -W "$(quilt series)" -- $cur ) )
+		COMPREPLY=( $( compgen -W "$(_quilt_patchlist series)" -- $cur ) )
 		;;
 	     *)
 		COMPREPLY=( $( compgen -W "-P -h" -- $cur ) )
@@ -292,7 +298,7 @@ _quilt_completion()
 	   COMPREPLY=( $( compgen -W "-d -h" -- $cur ) )
 	   ;;
 	unapplied)
-	   COMPREPLY=( $( compgen -W "-h $(quilt series)" -- $cur ) )
+	   COMPREPLY=( $( compgen -W "-h $(_quilt_patchlist series)" -- $cur ) )
 	   ;;
 	fork|new|top|upgrade)
 	   ;;
