Index: trunk/psconfig/psbuild
===================================================================
--- trunk/psconfig/psbuild	(revision 29559)
+++ trunk/psconfig/psbuild	(revision 30601)
@@ -13,4 +13,5 @@
 $operations = 0;
 $start = "";
+$start_after = "";
 $stop = "";
 $verbose = 0;
@@ -85,4 +86,5 @@
     }
     if ($ARGV[0] eq "-only") {
+	if ($start || $stop || $start_after) { die "do not mix -only (-start, -stop) or (-after, -stop)\n"; }
         $start = $ARGV[1];
         $stop = $ARGV[1];
@@ -90,8 +92,16 @@
     }
     if ($ARGV[0] eq "-start") {
+	if ($start || $start_after) { die "do not mix -only (-start, -stop) or (-after, -stop)\n"; }
         $start = $ARGV[1];
         shift; shift; next;
     }
+    if ($ARGV[0] eq "-after") {
+	if ($start || $start_after) { die "do not mix -only (-start, -stop) or (-after, -stop)\n"; }
+        $start_after = $ARGV[1];
+        $start = "INVALID_VALUE"; # need to have a value to skip earlier entries
+        shift; shift; next;
+    }
     if ($ARGV[0] eq "-stop") {
+	if ($stop) { die "do not mix -only (-start, -stop) or (-after, -stop)\n"; }
         $stop = $ARGV[1];
         shift; shift; next;
@@ -258,6 +268,7 @@
     $stop_now = 0;
     for ($i = 0; !$stop_now && ($i < @module); $i++) {
-        if (($stop ne "") && ($stop eq $module[$i])) { $stop_now = 1; }
-        if (($start ne "") && ($start ne $module[$i])) { next; }
+        if ($stop && ($stop eq $module[$i])) { $stop_now = 1; }
+	if ($start_after && ($start_after eq $module[$i])) { $start = $module[$i+1]; next; }
+        if ($start && ($start ne $module[$i])) { next; }
         $start = "";
 
@@ -348,4 +359,7 @@
         chdir $homedir;
     }
+    if ($start) { if ($start_after) { $start = $start_after; } &failure($start, "unknown -start or -after module $start\n"); } 
+    if ($stop && !$stop_now) { &failure($start, "unknown -stop module $stop\n"); } 
+
     print "\033]0; ** psbuild: finished ** \007";
     exit 0;
