diff --git a/src/main/java/plugins/adufour/protocols/gui/block/WorkFlowContainer.java b/src/main/java/plugins/adufour/protocols/gui/block/WorkFlowContainer.java
index f07994a50be0a182be04cf009a2783e42722738d..3a64436b5ed50a56ced759a9ed9b456443d68b9e 100644
--- a/src/main/java/plugins/adufour/protocols/gui/block/WorkFlowContainer.java
+++ b/src/main/java/plugins/adufour/protocols/gui/block/WorkFlowContainer.java
@@ -335,7 +335,7 @@ public class WorkFlowContainer extends JLayeredPane implements WorkFlowListener,
                     }
                     else
                         dstBlockPanel.refreshNow();
-                    
+
                     repaint();
                 }
             }
@@ -368,8 +368,29 @@ public class WorkFlowContainer extends JLayeredPane implements WorkFlowListener,
                 }
 
                 panel.drawPanel();
+
                 blockPanels.put(blockDesc, panel);
                 add(panel);
+
+                // FIX: get exposed links correctly restored on copy/paste as setVisibility isn't called in that case (Stephane)
+                // this is really an ugly fix but the whole stuff is a complete mess honestly :-/
+                if (blockDesc.isWorkFlow())
+                {
+                    synchronized (blockDesc.inputVars)
+                    {
+                        // update exposed links
+                        for (Var<?> var : blockDesc.inputVars)
+                            ((WorkFlowPanel) panel).updateExposedLink(var, blockDesc.inputVars.isVisible(var));
+                    }
+
+                    synchronized (blockDesc.outputVars)
+                    {
+                        // update exposed links
+                        for (Var<?> var : blockDesc.outputVars)
+                            ((WorkFlowPanel) panel).updateExposedLink(var, blockDesc.outputVars.isVisible(var));
+                    }
+                }
+
                 // Layer 0 for blocks
                 // Layer 1 for work flows
                 setLayer(panel, blockDesc.isWorkFlow() ? 1 : 0, 0);
@@ -531,9 +552,9 @@ public class WorkFlowContainer extends JLayeredPane implements WorkFlowListener,
                 workFlow.removeBlock(workFlow.getBlock(i), true);
         }
 
-        workFlow.addBlock(embed.getBlockDescriptor());
-
         MainFrame.pasteSelection(embed, true);
+        
+        workFlow.addBlock(embed.getBlockDescriptor());
     }
 
     /**