Index: trunk/PS-IPP-Config/lib/PS/IPP/Config.pm
===================================================================
--- trunk/PS-IPP-Config/lib/PS/IPP/Config.pm	(revision 32652)
+++ trunk/PS-IPP-Config/lib/PS/IPP/Config.pm	(revision 35714)
@@ -730,4 +730,49 @@
 }
 
+sub file_rename {
+    my $self = shift;
+    my $old_name = shift;
+    my $name = shift;
+
+    my $scheme = file_scheme($old_name);
+    my $newscheme = file_scheme($name);
+    if ($scheme and $scheme eq 'neb') {
+        if (!$newscheme or $newscheme ne 'neb') {
+            carp "cannot rename nebulous file to non nebulous path";
+            return undef;
+        }
+        my $neb = $self->nebulous;
+        if ($neb->storage_object_exists($old_name)) {
+            eval {
+                $neb->move($old_name, $name);
+            };
+            if ($@) {
+                carp "nebulous move failed for $old_name";
+                return undef;
+            }
+        } else {
+            carp "$old_name not found";
+            return undef;
+        }
+    } else {
+        if ($newscheme and $newscheme eq 'neb') {
+            carp "cannot rename non-nebulous file to nebulous path";
+            return undef;
+        }
+        if ($self->file_exists($old_name)) {
+            my $resolved = $self->file_resolve($old_name);
+            my $resolved_new = $self->file_resolve($name);
+            if (!rename($resolved, $resolved_new)) {
+                carp "Failed to rename $resolved $resolved_new";
+                return undef;
+            }
+        } else {
+            carp "$old_name not found";
+            return undef;
+        }
+    }
+    return $name;
+}
+
 # redirect stderr and stdout streams to log file. If file already exists rename it and record
 # the name in the new log file.
