Index: /trunk/cgi-bin/IPDB.pm
===================================================================
--- /trunk/cgi-bin/IPDB.pm	(revision 898)
+++ /trunk/cgi-bin/IPDB.pm	(revision 899)
@@ -2247,5 +2247,5 @@
       my @nbset = $pr->{cidr}->split($args{newmask});
 
-      # set up update of existing block
+      # update existing block
       $dbh->do("UPDATE allocations SET cidr = ? WHERE id = ?", undef, ("$nbset[0]", $pr->{id}) );
 
@@ -2320,9 +2320,12 @@
 
       if (%fbdel) {
+        # pretty sure this SELECT result isn't used...
         my $delfblist = $dbh->selectall_arrayref(q{
             SELECT cidr,parent_id,id FROM freeblocks
             WHERE id in (
             }.join(',', keys %fbdel).")", {Slice=>{}} );
-        $dbh->do("DELETE FROM freeblocks WHERE id IN (".join(',', keys %fbdel).")") if %fbdel;
+        foreach my $fbd (keys %fbdel) {
+          $dbh->do("UPDATE freeblocks SET cidr = set_masklen(cidr, ?) WHERE id = ?", undef, $args{newmask}, $fbd);
+        }
       }
 
