diff -ur BackupPC-3.2.1.dist/bin/BackupPC_dump BackupPC-3.2.1/bin/BackupPC_dump
--- BackupPC-3.2.1.dist/bin/BackupPC_dump	2013-03-14 12:19:34.000000000 -0400
+++ BackupPC-3.2.1/bin/BackupPC_dump	2013-03-14 18:21:12.000000000 -0400
@@ -201,6 +201,9 @@
 alarm($Conf{ClientTimeout});
 
 mkpath($Dir, 0, 0777) if ( !-d $Dir );
+mkpath("$Dir/pool", 0, 0777) if ( !-d "$Dir/pool" );
+mkpath("$Dir/cpool", 0, 0777) if ( !-d "$Dir/cpool" );
+mkpath("$Dir/trash", 0, 0777) if ( !-d "$Dir/trash" );
 if ( !-f "$Dir/LOCK" ) {
     open(LOCK, ">", "$Dir/LOCK") && close(LOCK);
 }
@@ -470,15 +473,21 @@
     }
 }
 
-if ( !$bpc->HardlinkTest($Dir, "$TopDir/cpool") ) {
+foreach my $dir ( qw(PoolDir CPoolDir) ) {
+    next if ( $bpc->{Conf}{$dir} eq "" );
+    $bpc->{$dir} = $bpc->{Conf}{$dir};
+}
+my $testpool = $bpc->{CPoolDir};
+
+if ( !$bpc->HardlinkTest($Dir, "$testpool") ) {
     print(LOG $bpc->timeStamp, "Can't create a test hardlink between a file"
-               . " in $Dir and $TopDir/cpool.  Either these are different"
+               . " in $Dir and $testpool.  Either these are different"
                . " file systems, or this file system doesn't support hardlinks,"
                . " or these directories don't exist, or there is a permissions"
                . " problem, or the file system is out of inodes or full.  Use"
                . " df, df -i, and ls -ld to check each of these possibilities."
                . " Quitting...\n");
-    print("test hardlink between $Dir and $TopDir/cpool failed\n");
+    print("test hardlink between $Dir and $testpool failed\n");
     print("link $clientURI\n") if ( $needLink );
     exit(1);
 }
@@ -539,10 +548,26 @@
     print(LOG $bpc->timeStamp, "$host is dhcp $hostIP, user is $user\n");
 }
 
+foreach my $dir ( (
+            "$Conf{TopDir}/pc/$host/pool",
+            "$Conf{TopDir}/pc/$host/cpool",
+            "$Conf{TopDir}/pc/$host/trash",
+        ) ) {
+    next if ( -d $dir );
+    mkpath($dir, 0, 0750);
+    if ( !-d $dir ) {
+        print("Failed to create $dir\n");
+        printf(LOG "%sFailed to create directory %s\n", $bpc->timeStamp, $dir);
+        exit(1);
+    } else {
+        printf(LOG "%sCreated directory %s\n", $bpc->timeStamp, $dir);
+    }
+}
+
 #
 # Get a clean directory $Dir/new
 #
-$bpc->RmTreeDefer("$TopDir/trash", "$Dir/new") if ( -d "$Dir/new" );
+$bpc->RmTreeDefer("$Dir/trash", "$Dir/new") if ( -d "$Dir/new" );
 
 #
 # Setup file extension for compression and open XferLOG output file
@@ -1205,7 +1230,7 @@
         unlink("$Dir/XferLOG.bad$fileExt") if ( -f "$Dir/XferLOG.bad$fileExt" );
         unlink("$Dir/NewFileList")         if ( -f "$Dir/NewFileList" );
         rename("$Dir/XferLOG$fileExt", "$Dir/XferLOG.bad$fileExt");
-        $bpc->RmTreeDefer("$TopDir/trash", "$Dir/new") if ( -d "$Dir/new" );
+        $bpc->RmTreeDefer("$Dir/trash", "$Dir/new") if ( -d "$Dir/new" );
         print("dump failed: $stat{hostError}\n");
         $XferLOG->close();
         print("link $clientURI\n") if ( $needLink );
@@ -1451,7 +1476,7 @@
         $num = $Backups[$i]{num} if ( $num < $Backups[$i]{num} );
     }
     $num++;
-    $bpc->RmTreeDefer("$TopDir/trash", "$Dir/$num") if ( -d "$Dir/$num" );
+    $bpc->RmTreeDefer("$Dir/trash", "$Dir/$num") if ( -d "$Dir/$num" );
     if ( !rename("$Dir/new", "$Dir/$num") ) {
         print(LOG $bpc->timeStamp, "Rename $Dir/new -> $Dir/$num failed\n");
         $stat{xferOK} = 0;
@@ -1580,7 +1605,7 @@
         return;
     }
 
-    $bpc->RmTreeDefer("$TopDir/trash",
+    $bpc->RmTreeDefer("$Dir/trash",
                       "$Dir/$Backups->[$idx]{num}");
     unlink("$Dir/SmbLOG.$Backups->[$idx]{num}")
                 if ( -f "$Dir/SmbLOG.$Backups->[$idx]{num}" );
diff -ur BackupPC-3.2.1.dist/bin/BackupPC_nightly BackupPC-3.2.1/bin/BackupPC_nightly
--- BackupPC-3.2.1.dist/bin/BackupPC_nightly	2013-03-14 12:19:34.000000000 -0400
+++ BackupPC-3.2.1/bin/BackupPC_nightly	2013-03-14 12:50:38.000000000 -0400
@@ -137,7 +137,18 @@
                    # new holes
 my @hexChars = qw(0 1 2 3 4 5 6 7 8 9 a b c d e f);
 
-for my $pool ( qw(pool cpool) ) {
+my @pools = (qw (pool cpool));
+
+opendir(my $dh, "$TopDir/pc");
+while (readdir $dh) {
+  my $hostdir=$_;
+  next if ($hostdir eq "." || $hostdir eq ".." );
+  push @pools,"pc/$hostdir/pool" if ( -d "$TopDir/pc/$hostdir/pool" );
+  push @pools,"pc/$hostdir/cpool" if ( -d "$TopDir/pc/$hostdir/cpool" );
+}
+
+for my $pool ( @pools ) {
+    print "Operating on pool: $TopDir/$pool\n" if ( -d "$TopDir/$pool");
     for ( my $i = $poolRangeStart ; $i <= $poolRangeEnd ; $i++ ) {
         my $dir        = "$hexChars[int($i / 16)]/$hexChars[$i % 16]";
         # print("Doing $pool/$dir\n") if ( ($i % 16) == 0 );
diff -ur BackupPC-3.2.1.dist/bin/BackupPC_trashClean BackupPC-3.2.1/bin/BackupPC_trashClean
--- BackupPC-3.2.1.dist/bin/BackupPC_trashClean	2013-03-14 12:19:34.000000000 -0400
+++ BackupPC-3.2.1/bin/BackupPC_trashClean	2013-03-14 12:17:34.000000000 -0400
@@ -55,6 +55,22 @@
     if ( $bpc->RmTreeTrashEmpty("$TopDir/trash") < 0 ) {
 	print("log BackupPC_trashClean failed to empty $TopDir/trash\n");
     }
+    opendir(my $dh, "$TopDir/pc");
+    while (readdir $dh) {
+      #check for pc/<hostname>/trash dirs
+      my $hostdir=$_;
+      next if ($hostdir eq "." || $hostdir eq ".." );
+      if ( -d "$TopDir/pc/$hostdir/trash" ) {
+        #try to clean it
+        if ( $bpc->RmTreeTrashEmpty("$TopDir/pc/$hostdir/trash") < 0 ) {
+	  print("log BackupPC_trashClean failed to empty $TopDir/trash\n");
+        }
+      } else {
+        #mention none found
+        print("log BackupPC_trashClean failed to find $TopDir/pc/$hostdir/trash\n");
+      }
+    }
+    closedir $dh;
     print("processState idle\n");
     sleep($Conf{TrashCleanSleepSec} || 300);
 }
diff -ur BackupPC-3.2.1.dist/lib/BackupPC/CGI/EditConfig.pm BackupPC-3.2.1/lib/BackupPC/CGI/EditConfig.pm
--- BackupPC-3.2.1.dist/lib/BackupPC/CGI/EditConfig.pm	2013-03-14 12:19:34.000000000 -0400
+++ BackupPC-3.2.1/lib/BackupPC/CGI/EditConfig.pm	2013-03-14 12:17:34.000000000 -0400
@@ -336,6 +336,8 @@
         param => [
 	    {text => "CfgEdit_Title_Client_Lookup"},
 	    {name => "ClientNameAlias"},
+	    {name => "PoolDir"},
+	    {name => "CPoolDir"},
 	    {name => "NmbLookupCmd"},
 	    {name => "NmbLookupFindHostCmd"},
 	    {name => "FixedIPNetBiosNameCheck"},
diff -ur BackupPC-3.2.1.dist/lib/BackupPC/Config/Meta.pm BackupPC-3.2.1/lib/BackupPC/Config/Meta.pm
--- BackupPC-3.2.1.dist/lib/BackupPC/Config/Meta.pm	2013-03-14 12:19:34.000000000 -0400
+++ BackupPC-3.2.1/lib/BackupPC/Config/Meta.pm	2013-03-14 12:17:34.000000000 -0400
@@ -323,6 +323,8 @@
     UserCmdCheckStatus  => "boolean",
 
     ClientNameAlias 	=> {type => "string", undefIfEmpty => 1},
+    PoolDir         	=> {type => "string", undefIfEmpty => 1},
+    CPoolDir        	=> {type => "string", undefIfEmpty => 1},
 
     ######################################################################
     # Email reminders, status and messages
@@ -468,6 +470,8 @@
                 MaxOldPerPCLogFiles       => "boolean",
                 CompressLevel             => "boolean",
                 ClientNameAlias           => "boolean",
+                PoolDir                   => "boolean",
+                CPoolDir                  => "boolean",
                 DumpPreUserCmd            => "boolean",
                 DumpPostUserCmd           => "boolean",
                 RestorePreUserCmd         => "boolean",
diff -ur BackupPC-3.2.1.dist/lib/BackupPC/Lib.pm BackupPC-3.2.1/lib/BackupPC/Lib.pm
--- BackupPC-3.2.1.dist/lib/BackupPC/Lib.pm	2013-03-14 12:19:34.000000000 -0400
+++ BackupPC-3.2.1/lib/BackupPC/Lib.pm	2013-03-14 12:25:48.000000000 -0400
@@ -155,6 +155,12 @@
     $bpc->{PoolDir}  = "$bpc->{TopDir}/pool";
     $bpc->{CPoolDir} = "$bpc->{TopDir}/cpool";
 
+    foreach my $dir ( qw(PoolDir CPoolDir) ) {
+        next if ( $bpc->{Conf}{$dir} eq "" );
+        $bpc->{$dir} = $bpc->{Conf}{$dir};
+    }
+
+
     #
     # Verify we are running as the correct user
     #
@@ -369,6 +375,11 @@
 	$bpc->{Conf} = $config;
     }
 
+    foreach my $dir ( qw(PoolDir CPoolDir) ) {
+        next if ( $bpc->{Conf}{$dir} eq "" );
+        $bpc->{$dir} = $bpc->{Conf}{$dir};
+    }
+
     #
     # Load optional perl modules
     #
@@ -1409,7 +1420,7 @@
 
     $conf->{$shareName} = [ $conf->{$shareName} ]
                     if ( ref($conf->{$shareName}) ne "ARRAY" );
-    foreach my $param qw(BackupFilesOnly BackupFilesExclude) {
+    foreach my $param (qw(BackupFilesOnly BackupFilesExclude)) {
         next if ( !defined($conf->{$param}) );
         if ( ref($conf->{$param}) eq "HASH" ) {
             #
diff -ur BackupPC-3.2.1.dist/lib/BackupPC/Storage/Text.pm BackupPC-3.2.1/lib/BackupPC/Storage/Text.pm
--- BackupPC-3.2.1.dist/lib/BackupPC/Storage/Text.pm	2013-03-14 12:19:34.000000000 -0400
+++ BackupPC-3.2.1/lib/BackupPC/Storage/Text.pm	2013-03-14 12:17:34.000000000 -0400
@@ -298,7 +298,7 @@
     #
     # Promote BackupFilesOnly and BackupFilesExclude to hashes
     #
-    foreach my $param qw(BackupFilesOnly BackupFilesExclude) {
+    foreach my $param (qw(BackupFilesOnly BackupFilesExclude)) {
         next if ( !defined($conf->{$param}) || ref($conf->{$param}) eq "HASH" );
         $conf->{$param} = [ $conf->{$param} ]
                                 if ( ref($conf->{$param}) ne "ARRAY" );
