--- start-vservers.orig	2010-12-02 23:30:13.000000000 +0800
+++ start-vservers	2011-01-24 15:38:12.000000000 +0800
@@ -128,6 +128,44 @@
     exit 1
 }
 
+declare -a ordered=()
+declare -a unordered=()
+
+for t in ${tmp_vservers[@]}; do
+  if test -f "$__CONFDIR/$t/apps/init/startorder"; then
+    ord=$(< "$__CONFDIR/$t/apps/init/startorder")
+    if test $ord -gt 0 2>/dev/null; then
+      if test -z "${ordered[$ord]}"; then
+        ordered[$ord]="$t"
+      else
+        warning "'$ord' in $__CONFDIR/$t/apps/init/startorder is a duplicate entry."
+        unordered=( "${unordered[@]}" "$t" )
+      fi
+    else
+      warning "'$ord' in $__CONFDIR/$t/apps/init/startorder is not a positive number."
+      unordered=( "${unordered[@]}" "$t" )
+    fi
+  else
+    unordered=( "${unordered[@]}" "$t" )
+  fi
+done
+
+tmp_vservers=( "${ordered[@]}" "${unordered[@]}" )
+
+if test "$OPTION_FLAVOR" == "stop"; then
+  T=("${tmp_vservers[@]}")
+  y=${#T[@]};
+  x=0;
+  while (test $x -lt $y); do
+    tmp=${T[x]};
+    T[x]=${T[y-1]};
+    T[y-1]=$tmp;
+    (( x++ ));
+    (( y-- ));
+  done
+  tmp_vservers=("${T[@]}")
+fi 
+
 vservers=( "$@" "${tmp_vservers[@]}" )
 
 makedir=$($_MKTEMPDIR vserver-init.XXXXXX)

