diff --git a/db/newwanode.in b/db/newwanode.in
index 4941fa8d19138e04a426639c5701c3a7fe22f4e7..1ddcb074495707c57a0707c5e010bf3e6194af61 100644
--- a/db/newwanode.in
+++ b/db/newwanode.in
@@ -12,10 +12,11 @@ use Getopt::Std;
 # 
 sub usage()
 {
-    print "Usage: newwanode [-w] -t <nodetype> -i <ip address>\n";
+    print "Usage: ".
+	"newwanode [-w] [-n nickname] -t <nodetype> -i <ip address>\n";
     exit(1);
 }
-my  $optlist = "wt:i:";
+my  $optlist = "wt:i:v:n:";
 
 #
 # Configure variables
@@ -51,6 +52,7 @@ if ($UID != getpwnam("nobody") && !TBAdmin($UID)) {
 my $nodetype;
 my $nodeip;
 my $fromweb = 0;
+my $nickname;
 my $nodename;
 my $nodevtype;
 my $nodevname;
@@ -72,6 +74,12 @@ if (defined($options{"i"})) {
 if (defined($options{"t"})) {
     $nodetype = $options{"t"};
 }
+if (defined($options{"v"})) {
+    $nodevtype = $options{"v"};
+}
+if (defined($options{"n"})) {
+    $nickname = $options{"n"};
+}
 if (!defined($nodeip) || !defined($nodetype)) {
     usage();
 }
@@ -91,6 +99,22 @@ if ($nodeip =~ /^([\d\.]+)$/) {
 else {
     die("*** Bad data in $nodeip\n");
 }
+if (defined($nodevtype)) {
+    if ($nodevtype =~ /^([\w]+)$/) {
+	$nodevtype = $1;
+    }
+    else {
+	die("*** Bad data in $nodevtype\n");
+    }
+}
+if (defined($nickname)) {
+    if ($nickname =~ /^([-\w]+)$/) {
+	$nickname = $1;
+    }
+    else {
+	die("*** Bad data in $nickname\n");
+    }
+}
 
 #
 # Must be a valid type.
@@ -112,6 +136,19 @@ if ($nodetype ne "pcwa" && $nodetype ne "pcron") {
     fatal("Can only handle pcwa/pcron nodetype right now!");
 }
 
+#
+# Make sure its a valid vtype too!
+#
+if (defined($nodevtype)) {
+    $query_result =
+	DBQueryFatal("select * from node_types where type='$nodevtype'");
+    
+    if (! $query_result->numrows) {
+	fatal("*** $0:\n".
+	      "    No such nodevtype $nodevtype is defined in the DB!\n");
+    }
+}
+
 #
 # We need the next id and priority.
 # 
@@ -143,6 +180,21 @@ if ($nodetype =~ /^pc(\w+)$/) {
 else {
     fatal("Could not determine a name from type for $nodetype!");
 }
+if (!defined($nickname)) {
+    $nickname = $nodename;
+}
+
+#
+# Create the virtual type name. Again, this is bogus.
+#
+if (!defined($nodevtype)) {
+    if ($nodetype eq "pcwa") {
+	$nodevtype = "pcvwainet";
+    }    
+    else {
+	$nodevtype = "pcvroninet";
+    }
+}
 
 #
 # Enter the records
@@ -153,19 +205,9 @@ DBQueryFatal("insert into nodes ".
 	     "values ('$nodename', '$nodetype', '$nodename', ".
 	     "        'testnode', $nextpri, 'down', 'NORMAL', '$defosid') ");
 
-#
-# Create the virtual nodes. Again, this is bogus.
-#
-if ($nodetype eq "pcwa") {
-    $nodevtype = "pcvwainet";
-}    
-else {
-    $nodevtype = "pcvroninet";
-}
-
-for ($i = 0; $i < 5; $i++) {
+for ($i = 1; $i < 9; $i++) {
     my $priority  = ($nextpri * 100) + $i;
-    $nodevname = "v${nodename}${i}";
+    $nodevname = "v${nodename}-${i}";
 	
     DBQueryFatal("insert into nodes ".
 		 "(node_id, type, phys_nodeid, role, priority, ".
@@ -176,8 +218,26 @@ for ($i = 0; $i < 5; $i++) {
 }
 
 DBQueryFatal("insert into interfaces ".
-	     "(node_id, card, port, IP, iface) ".
-	     "values ('$nodename', $control_net, 1, '$nodeip', 'eth0')");
+	     "(node_id, card, port, IP, interface_type, iface) ".
+	     "values ('$nodename', $control_net, 1, '$nodeip', ".
+	     "        'fxp0', 'eth0')");
+
+#
+# Again, this is bogus.
+#
+my $pid;
+my $eid;
+if ($nodetype eq "pcwa") {
+    $pid = "emulab-ops";
+    $eid = "widearea-nodes";
+}    
+else {
+    $pid = "ron";
+    $eid = "all";
+}
+DBQueryFatal("insert into reserved ".
+	     "(node_id, pid, eid, rsrv_time, vname) ".
+	     "values ('$nodename', '$pid', '$eid', now(), '$nickname')");
 
 #
 # Lets log it.
@@ -190,7 +250,8 @@ if ($fromweb) {
 	     "Name:      $nodename\n".
 	     "IP:        $nodeip\n".
 	     "Vtype:     $nodevtype\n".
-	     "Vname:     $nodevname (actually the last vnode)\n",
+	     "Vname:     $nodevname (actually the last vnode)\n".
+	     "Nickname:  $nickname\n",
 	     $TBOPS);
 }