diff --git a/contrib/bin/fusiondirectory-setup b/contrib/bin/fusiondirectory-setup
index 291df4dfca7e6b35c93466553d6284c858b8a486..85b0bed458dc3d176ab6cfe37329789934f2b5e6 100644
--- a/contrib/bin/fusiondirectory-setup
+++ b/contrib/bin/fusiondirectory-setup
@@ -1485,8 +1485,19 @@ sub migrate_winstations
         $entry->replace('cn' => $cn);
         my $newrdn = "cn=".$cn;
         my $dn_old = $entry->dn();
-        my $dn_new = $entry->dn();
-        $dn_new =~ s/^[^,]+,[^,]+,[^,]+,/$newrdn,$workstationrdn,/;
+        $dn_old =~ m/^[^,]+,.*$systemrdn,(.+)$/ or die "Could not parse dn ".$dn_old."\n";
+        my $entrybase = $1;
+        if (!branch_exists($ldap, "$workstationrdn,$entrybase")) {
+          if ($workstationrdn =~ m/^([^,]),([^,])$/) {
+            if (!branch_exists($ldap, "$2,$entrybase")) {
+              create_branch($ldap, $entrybase, $2);
+            }
+            create_branch($ldap, "$2,$entrybase", $1);
+          } else {
+            create_branch($ldap, $entrybase, $workstationrdn);
+          }
+        }
+        my $dn_new = "$newrdn,$workstationrdn,$entrybase";
         $entry->dn($dn_new);
         my @replace = ('fdWorkstation');
         my @classes = $entry->get_value('objectClass');