diff --git a/pelab/goodnodes.pl b/pelab/goodnodes.pl
index 65c20ecd29e28d0add83b50a9b9750a251baa6cf..c7987bf4a6d93f465e36266e8dda0a2b4ed5f40d 100644
--- a/pelab/goodnodes.pl
+++ b/pelab/goodnodes.pl
@@ -33,13 +33,15 @@ my $pprefix = "node-";
 #
 $| = 1;
 sub usage {
-        print "Usage: $0 [-e pid/eid] <numNodes>\n";
+        print "Usage: $0 [-e pid/eid] [-f blacklistfilename] <numNodes>\n";
         return 1;
 }
 my ($pid, $eid);
+my $blacklistfilename;
 my %opt = ();
-if (! getopts("e:", \%opt)) { exit &usage; }
+getopts("e:f:", \%opt);
 if ($opt{e}) { ($pid,$eid) = split('/', $opt{e}); }
+if ($opt{f}) { $blacklistfilename = $opt{f}; }
 if (@ARGV !=1) { exit &usage; }
 my $numnodes = $ARGV[0];
 my @allnodes = ();      #nodes to consider, in order of desirablility (?)
@@ -47,6 +49,7 @@ my %chosenBySite = ();  #indexed by siteidx, maps to plabxxx
 my %nodeIds = ();       #indexed by plabxxx => (siteid, nodeid)
 my $earliesttime = time() - $pastHourWindow*60*60;
 my %expnodes = ();  #nodes making up eid/pid
+my %blacknodes = ();#nodes not allowed to be chosen (deleted from allnodes)
 my %connMatrix = (); # {srcsite}{dstsite} => 1/0 mapping 
 my %connRating = (); # site => rating value
 my $allnodesIndex = 0;
@@ -63,8 +66,22 @@ foreach my $nodeinfo (@allnodesinfo){
     push @allnodes, $fields[0];
     #print "$fields[0]\n";
 }
+close FILE;
 
-
+#
+# get list of blacklisted nodes
+#
+if( defined $blacklistfilename ){
+    open FILE, "< $blacklistfilename"
+        or die "Can't open file";
+    my @blacklist = <FILE>;
+    chomp @blacklist;
+    foreach my $node (@blacklist){
+        $blacknodes{$node} = 1;
+        print "blacknode: $node\n";
+    }
+    close FILE;
+}
 
 #
 # Get DB password and connect.
@@ -106,7 +123,9 @@ if( defined($pid) && defined($eid) ){
     }
     #delete nodes from allnodes not found in given experiment
     for( my $i=0; $i < scalar(@allnodes); $i++ ){
-        if( !defined $expnodes{$allnodes[$i]} ){
+        if( !defined $expnodes{$allnodes[$i]} ||
+            defined $blacknodes{$allnodes[$i]})
+        {
 #            print "removing $allnodes[$i] from set\n";
             splice( @allnodes, $i, 1 );
             $i--;