diff --git a/src/main/java/plugins/adufour/blocks/tools/output/BooleanOutput.java b/src/main/java/plugins/adufour/blocks/tools/output/BooleanOutput.java
new file mode 100644
index 0000000000000000000000000000000000000000..a268cace32f7c003cd9144b8bd5e290fbeba9e82
--- /dev/null
+++ b/src/main/java/plugins/adufour/blocks/tools/output/BooleanOutput.java
@@ -0,0 +1,26 @@
+package plugins.adufour.blocks.tools.output;
+
+import icy.plugin.abstract_.Plugin;
+import plugins.adufour.blocks.util.VarList;
+import plugins.adufour.vars.lang.VarBoolean;
+
+public class BooleanOutput extends Plugin implements OutputBlock
+{
+    @Override
+    public void declareInput(VarList inputMap)
+    {
+        inputMap.add("boolean", new VarBoolean("Boolean", false));
+    }
+
+    @Override
+    public void declareOutput(VarList outputMap)
+    {
+        //
+    }
+
+    @Override
+    public void run()
+    {
+        //
+    }
+}
diff --git a/src/main/java/plugins/adufour/blocks/tools/output/DecimalOutput.java b/src/main/java/plugins/adufour/blocks/tools/output/DecimalOutput.java
new file mode 100644
index 0000000000000000000000000000000000000000..eb469a29758523d04f3965fc282f5a610048dbdd
--- /dev/null
+++ b/src/main/java/plugins/adufour/blocks/tools/output/DecimalOutput.java
@@ -0,0 +1,29 @@
+package plugins.adufour.blocks.tools.output;
+
+import icy.plugin.abstract_.Plugin;
+import plugins.adufour.blocks.util.VarList;
+import plugins.adufour.vars.lang.VarDouble;
+
+/**
+ * Input block reading a 64-bit double-precision floating-point value
+ * 
+ * @author Alexandre Dufour
+ */
+public class DecimalOutput extends Plugin implements OutputBlock
+{
+    @Override
+    public void declareInput(VarList inputMap)
+    {
+        inputMap.add("decimal", new VarDouble("decimal", 0.0));
+    }
+    
+    @Override
+    public void run()
+    {
+    }
+    
+    @Override
+    public void declareOutput(VarList outputMap)
+    {
+    }
+}
diff --git a/src/main/java/plugins/adufour/blocks/tools/output/DecimalsOutput.java b/src/main/java/plugins/adufour/blocks/tools/output/DecimalsOutput.java
new file mode 100644
index 0000000000000000000000000000000000000000..5014b2123c4f07304c3b2fd2338844fc053a499b
--- /dev/null
+++ b/src/main/java/plugins/adufour/blocks/tools/output/DecimalsOutput.java
@@ -0,0 +1,29 @@
+package plugins.adufour.blocks.tools.output;
+
+import icy.plugin.abstract_.Plugin;
+import plugins.adufour.blocks.util.VarList;
+import plugins.adufour.vars.lang.VarDoubleArrayNative;
+
+/**
+ * Utility block reading an array of double-precision floating-point values
+ * 
+ * @author Alexandre Dufour
+ */
+public class DecimalsOutput extends Plugin implements OutputBlock
+{
+    @Override
+    public void declareInput(VarList inputMap)
+    {
+        inputMap.add("decimals", new VarDoubleArrayNative("decimals", new double[0]));
+    }
+    
+    @Override
+    public void run()
+    {
+    }
+    
+    @Override
+    public void declareOutput(VarList outputMap)
+    {
+    }
+}
diff --git a/src/main/java/plugins/adufour/blocks/tools/output/FileOutput.java b/src/main/java/plugins/adufour/blocks/tools/output/FileOutput.java
new file mode 100644
index 0000000000000000000000000000000000000000..c57803e6b5581b2b2fe8ba2f1232645a8ae4b349
--- /dev/null
+++ b/src/main/java/plugins/adufour/blocks/tools/output/FileOutput.java
@@ -0,0 +1,34 @@
+package plugins.adufour.blocks.tools.output;
+
+import icy.plugin.abstract_.Plugin;
+import plugins.adufour.blocks.util.VarList;
+import plugins.adufour.vars.gui.FileMode;
+import plugins.adufour.vars.gui.model.FileTypeModel;
+import plugins.adufour.vars.lang.VarFile;
+
+/**
+ * Input block reading a file
+ * 
+ * @author Alexandre Dufour
+ */
+public class FileOutput extends Plugin implements OutputBlock
+{
+    @Override
+    public void run()
+    {
+    }
+    
+    @Override
+    public void declareInput(VarList inputMap)
+    {
+        VarFile vf = new VarFile("file", null);
+        vf.setDefaultEditorModel(new FileTypeModel("", FileMode.FILES, null, false));
+        inputMap.add("file", vf);
+    }
+    
+    @Override
+    public void declareOutput(VarList outputMap)
+    {
+    }
+    
+}
diff --git a/src/main/java/plugins/adufour/blocks/tools/output/FilesOutput.java b/src/main/java/plugins/adufour/blocks/tools/output/FilesOutput.java
new file mode 100644
index 0000000000000000000000000000000000000000..16eec7c33ee2905c309a889b96827f4449e5e2d5
--- /dev/null
+++ b/src/main/java/plugins/adufour/blocks/tools/output/FilesOutput.java
@@ -0,0 +1,34 @@
+package plugins.adufour.blocks.tools.output;
+
+import icy.plugin.abstract_.Plugin;
+import plugins.adufour.blocks.util.VarList;
+import plugins.adufour.vars.gui.FileMode;
+import plugins.adufour.vars.gui.model.FileTypeListModel;
+import plugins.adufour.vars.lang.VarFileArray;
+
+/**
+ * Input block reading a list of files
+ * 
+ * @author Alexandre Dufour
+ */
+public class FilesOutput extends Plugin implements OutputBlock
+{
+    @Override
+    public void run()
+    {
+    }
+    
+    @Override
+    public void declareInput(VarList inputMap)
+    {
+        VarFileArray vf = new VarFileArray("files", new java.io.File[0]);
+        vf.setDefaultEditorModel(new FileTypeListModel("", FileMode.FILES, null, false));
+        inputMap.add("files", vf);
+    }
+    
+    @Override
+    public void declareOutput(VarList outputMap)
+    {
+    }
+    
+}
diff --git a/src/main/java/plugins/adufour/blocks/tools/output/FolderOutput.java b/src/main/java/plugins/adufour/blocks/tools/output/FolderOutput.java
new file mode 100644
index 0000000000000000000000000000000000000000..acdd8dd6bb9e246956fb60024d7ca09047de294d
--- /dev/null
+++ b/src/main/java/plugins/adufour/blocks/tools/output/FolderOutput.java
@@ -0,0 +1,34 @@
+package plugins.adufour.blocks.tools.output;
+
+import icy.plugin.abstract_.Plugin;
+import plugins.adufour.blocks.util.VarList;
+import plugins.adufour.vars.gui.FileMode;
+import plugins.adufour.vars.gui.model.FileTypeModel;
+import plugins.adufour.vars.lang.VarFile;
+
+/**
+ * Input block reading a folder
+ * 
+ * @author Alexandre Dufour
+ */
+public class FolderOutput extends Plugin implements OutputBlock
+{
+    @Override
+    public void run()
+    {
+    }
+    
+    @Override
+    public void declareInput(VarList inputMap)
+    {
+        VarFile vf = new VarFile("folder", null);
+        vf.setDefaultEditorModel(new FileTypeModel("", FileMode.FOLDERS, null, false));
+        inputMap.add("folder", vf);
+    }
+    
+    @Override
+    public void declareOutput(VarList outputMap)
+    {
+    }
+    
+}
diff --git a/src/main/java/plugins/adufour/blocks/tools/output/FoldersOutput.java b/src/main/java/plugins/adufour/blocks/tools/output/FoldersOutput.java
new file mode 100644
index 0000000000000000000000000000000000000000..7097d7db6536bb4a10ac6ad00d5d7f423d87d194
--- /dev/null
+++ b/src/main/java/plugins/adufour/blocks/tools/output/FoldersOutput.java
@@ -0,0 +1,34 @@
+package plugins.adufour.blocks.tools.output;
+
+import icy.plugin.abstract_.Plugin;
+import plugins.adufour.blocks.util.VarList;
+import plugins.adufour.vars.gui.FileMode;
+import plugins.adufour.vars.gui.model.FileTypeListModel;
+import plugins.adufour.vars.lang.VarFileArray;
+
+/**
+ * Input block reading a list of folders
+ * 
+ * @author Alexandre Dufour
+ */
+public class FoldersOutput extends Plugin implements OutputBlock
+{
+    @Override
+    public void run()
+    {
+    }
+    
+    @Override
+    public void declareInput(VarList inputMap)
+    {
+        VarFileArray vf = new VarFileArray("folders", new java.io.File[0]);
+        vf.setDefaultEditorModel(new FileTypeListModel("", FileMode.FOLDERS, null, false));
+        inputMap.add("folders", vf);
+    }
+    
+    @Override
+    public void declareOutput(VarList outputMap)
+    {
+    }
+    
+}
diff --git a/src/main/java/plugins/adufour/blocks/tools/output/IntegerOutput.java b/src/main/java/plugins/adufour/blocks/tools/output/IntegerOutput.java
new file mode 100644
index 0000000000000000000000000000000000000000..ea444dccc18bd8da7bb5f5a9bbb4be3e05e90f55
--- /dev/null
+++ b/src/main/java/plugins/adufour/blocks/tools/output/IntegerOutput.java
@@ -0,0 +1,30 @@
+package plugins.adufour.blocks.tools.output;
+
+import icy.plugin.abstract_.Plugin;
+import plugins.adufour.blocks.util.VarList;
+import plugins.adufour.vars.lang.VarInteger;
+
+/**
+ * Utility block reading a 32-bit integer value
+ * 
+ * @author Alexandre Dufour
+ */
+public class IntegerOutput extends Plugin implements OutputBlock
+{
+    @Override
+    public void declareInput(VarList inputMap)
+    {
+        VarInteger vi = new VarInteger("integer", 0);
+        inputMap.add("integer", vi);
+    }
+    
+    @Override
+    public void run()
+    {
+    }
+    
+    @Override
+    public void declareOutput(VarList outputMap)
+    {
+    }
+}
diff --git a/src/main/java/plugins/adufour/blocks/tools/output/IntegersOutput.java b/src/main/java/plugins/adufour/blocks/tools/output/IntegersOutput.java
new file mode 100644
index 0000000000000000000000000000000000000000..24f3b6339defc1c48ccc66a0dd7b1d6c7945c7d1
--- /dev/null
+++ b/src/main/java/plugins/adufour/blocks/tools/output/IntegersOutput.java
@@ -0,0 +1,29 @@
+package plugins.adufour.blocks.tools.output;
+
+import icy.plugin.abstract_.Plugin;
+import plugins.adufour.blocks.util.VarList;
+import plugins.adufour.vars.lang.VarIntegerArrayNative;
+
+/**
+ * Utility block reading an array of 32-bit integer values
+ * 
+ * @author Alexandre Dufour
+ */
+public class IntegersOutput extends Plugin implements OutputBlock
+{
+    @Override
+    public void declareInput(VarList inputMap)
+    {
+        inputMap.add("integers", new VarIntegerArrayNative("integers", new int[0]));
+    }
+    
+    @Override
+    public void run()
+    {
+    }
+    
+    @Override
+    public void declareOutput(VarList outputMap)
+    {
+    }
+}
diff --git a/src/main/java/plugins/adufour/blocks/tools/output/OutputBlock.java b/src/main/java/plugins/adufour/blocks/tools/output/OutputBlock.java
new file mode 100644
index 0000000000000000000000000000000000000000..f4127101c8eb38cfe68090ab2e9abf7feb3bf70f
--- /dev/null
+++ b/src/main/java/plugins/adufour/blocks/tools/output/OutputBlock.java
@@ -0,0 +1,13 @@
+package plugins.adufour.blocks.tools.output;
+
+import plugins.adufour.blocks.lang.Block;
+
+/**
+ * Interface used to flag pure output blocks
+ * 
+ * @author Stephane Dallongeville
+ * 
+ */
+public interface OutputBlock extends Block
+{
+}
\ No newline at end of file
diff --git a/src/main/java/plugins/adufour/blocks/tools/output/SequenceOutput.java b/src/main/java/plugins/adufour/blocks/tools/output/SequenceOutput.java
new file mode 100644
index 0000000000000000000000000000000000000000..607badbb23612cf3142640560c56ad264c1af24b
--- /dev/null
+++ b/src/main/java/plugins/adufour/blocks/tools/output/SequenceOutput.java
@@ -0,0 +1,36 @@
+package plugins.adufour.blocks.tools.output;
+
+import icy.plugin.abstract_.Plugin;
+import plugins.adufour.blocks.util.VarList;
+import plugins.adufour.vars.lang.VarSequence;
+
+/**
+ * Utility block reading a {@link icy.sequence.Sequence} object
+ * 
+ * @author Alexandre Dufour
+ */
+public class SequenceOutput extends Plugin implements OutputBlock
+{
+    private final VarSequence vs = new VarSequence("sequence", null);
+    
+    @Override
+    public void run()
+    {
+    }
+    
+    @Override
+    public void declareInput(VarList inputMap)
+    {
+        inputMap.add("input sequence", vs);
+    }
+    
+    @Override
+    public void declareOutput(VarList outputMap)
+    {
+    }
+    
+    public VarSequence getVariable()
+    {
+        return vs;
+    }
+}
diff --git a/src/main/java/plugins/adufour/blocks/tools/output/SequencesOutput.java b/src/main/java/plugins/adufour/blocks/tools/output/SequencesOutput.java
new file mode 100644
index 0000000000000000000000000000000000000000..f185d08fc0e90c2d21fa3ae17404bc09fa466ad4
--- /dev/null
+++ b/src/main/java/plugins/adufour/blocks/tools/output/SequencesOutput.java
@@ -0,0 +1,30 @@
+package plugins.adufour.blocks.tools.output;
+
+import icy.plugin.abstract_.Plugin;
+import plugins.adufour.blocks.util.VarList;
+import plugins.adufour.vars.lang.VarSequenceArray;
+
+/**
+ * Utility block reading a list of {@link icy.sequence.Sequence} objects
+ * 
+ * @author Alexandre Dufour
+ */
+public class SequencesOutput extends Plugin implements OutputBlock
+{
+    @Override
+    public void run()
+    {
+    }
+    
+    @Override
+    public void declareInput(VarList inputMap)
+    {
+        VarSequenceArray vsa = new VarSequenceArray("sequence");
+        inputMap.add("input sequence", vsa);
+    }
+    
+    @Override
+    public void declareOutput(VarList outputMap)
+    {
+    }
+}
diff --git a/src/main/java/plugins/adufour/blocks/tools/output/TextOutput.java b/src/main/java/plugins/adufour/blocks/tools/output/TextOutput.java
new file mode 100644
index 0000000000000000000000000000000000000000..d5c3ec07d58256f04643aa1af4c68c448a1ccbd4
--- /dev/null
+++ b/src/main/java/plugins/adufour/blocks/tools/output/TextOutput.java
@@ -0,0 +1,31 @@
+package plugins.adufour.blocks.tools.output;
+
+import icy.plugin.abstract_.Plugin;
+import plugins.adufour.blocks.util.VarList;
+import plugins.adufour.vars.lang.VarString;
+
+/**
+ * Text input
+ * 
+ * @author Alexandre Dufour
+ */
+public class TextOutput extends Plugin implements OutputBlock
+{
+    @Override
+    public void run()
+    {
+        
+    }
+    
+    @Override
+    public void declareInput(VarList inputMap)
+    {
+        inputMap.add("text", new VarString("text", ""));
+    }
+    
+    @Override
+    public void declareOutput(VarList outputMap)
+    {
+        
+    }
+}
diff --git a/src/main/java/plugins/adufour/blocks/util/BlocksFinder.java b/src/main/java/plugins/adufour/blocks/util/BlocksFinder.java
index 73c13acaa9fb32558247286a2cc7719540bfb7f2..99cf45102617752be40f6cc072453af52a73eaa7 100644
--- a/src/main/java/plugins/adufour/blocks/util/BlocksFinder.java
+++ b/src/main/java/plugins/adufour/blocks/util/BlocksFinder.java
@@ -51,6 +51,7 @@ import plugins.adufour.blocks.tools.ToolsBlock;
 import plugins.adufour.blocks.tools.ij.IJBlock;
 import plugins.adufour.blocks.tools.input.InputBlock;
 import plugins.adufour.blocks.tools.io.IOBlock;
+import plugins.adufour.blocks.tools.output.OutputBlock;
 import plugins.adufour.blocks.tools.roi.ROIBlock;
 import plugins.adufour.blocks.tools.sequence.SequenceBlock;
 import plugins.adufour.protocols.gui.BlockSearchPanel;
@@ -311,6 +312,9 @@ public class BlocksFinder
         JMenu mnInput = new JMenu("Read...");
         mnInput.setIcon(new IcyIcon(ResourceUtil.ICON_REDO, 22));
 
+        JMenu mnOutput = new JMenu("Out...");
+        mnOutput.setIcon(new IcyIcon(ResourceUtil.ICON_UNDO, 22));
+
         JMenu mnIO = new JMenu("I/O...");
         mnIO.setIcon(new IcyIcon(ResourceUtil.ICON_SAVE, 22));
 
@@ -432,6 +436,10 @@ public class BlocksFinder
                 {
                     mnInput.add(menuItem);
                 }
+                else if (OutputBlock.class.isAssignableFrom(blockClass))
+                {
+                    mnOutput.add(menuItem);
+                }
                 else if (SequenceBlock.class.isAssignableFrom(blockClass))
                 {
                     mnSeq.add(menuItem);
@@ -489,6 +497,7 @@ public class BlocksFinder
 
         splitLongMenus(mnBlocks, 15);
         splitLongMenus(mnInput, 15);
+        splitLongMenus(mnOutput, 15);
         splitLongMenus(mnSeq, 15);
         splitLongMenus(mnROI, 15);
         splitLongMenus(mnIO, 15);
@@ -498,6 +507,7 @@ public class BlocksFinder
 
         menuContainer.add(mnBlocks);
         menuContainer.add(mnInput);
+        menuContainer.add(mnOutput);
         menuContainer.add(mnSeq);
         menuContainer.add(mnROI);
         menuContainer.add(mnIO);
diff --git a/src/main/java/plugins/adufour/blocks/util/BlocksML.java b/src/main/java/plugins/adufour/blocks/util/BlocksML.java
index e8c3e332fb6bfa8880e06dc6250f1b211dd461ee..5fbb6a66b01b05080c24415c8d4f844442980250 100644
--- a/src/main/java/plugins/adufour/blocks/util/BlocksML.java
+++ b/src/main/java/plugins/adufour/blocks/util/BlocksML.java
@@ -43,6 +43,7 @@ import plugins.adufour.blocks.lang.BlockDescriptor;
 import plugins.adufour.blocks.lang.Link;
 import plugins.adufour.blocks.lang.WorkFlow;
 import plugins.adufour.blocks.tools.input.InputBlock;
+import plugins.adufour.blocks.tools.output.OutputBlock;
 import plugins.adufour.protocols.Protocols;
 import plugins.adufour.vars.gui.model.TypeSelectionModel;
 import plugins.adufour.vars.lang.Var;
@@ -598,7 +599,7 @@ public class BlocksML
             XMLUtil.setAttributeValue(blockNode, "definedName", blockData.getDefinedName());
             XMLUtil.setAttributeBooleanValue(blockNode, "keepsResults", blockData.keepsResults());
 
-            if (block instanceof InputBlock)
+            if ((block instanceof InputBlock) || (block instanceof OutputBlock))
                 XMLUtil.setAttributeValue(blockNode, "CommandLineID", blockData.getCommandLineID());
 
             if (blockData.isWorkFlow())
@@ -1360,7 +1361,7 @@ public class BlocksML
 
             blockDescriptor.keepResults(XMLUtil.getAttributeBooleanValue(blockNode, "keepsResults", true));
 
-            if (block instanceof InputBlock)
+            if ((block instanceof InputBlock) || (block instanceof OutputBlock))
                 blockDescriptor.setCommandLineID(XMLUtil.getAttributeValue(blockNode, "CommandLineID", ""));
 
             workFlow.addBlock(blockDescriptor);
diff --git a/src/main/java/plugins/adufour/protocols/gui/block/BlockPanel.java b/src/main/java/plugins/adufour/protocols/gui/block/BlockPanel.java
index 5dfcf700622fc782b77c7ec56b8e0c6f41652a9c..11a17046698adec13d7724964fe2a1442256cab5 100644
--- a/src/main/java/plugins/adufour/protocols/gui/block/BlockPanel.java
+++ b/src/main/java/plugins/adufour/protocols/gui/block/BlockPanel.java
@@ -53,6 +53,7 @@ import plugins.adufour.blocks.lang.BlockDescriptor;
 import plugins.adufour.blocks.lang.BlockDescriptor.BlockStatus;
 import plugins.adufour.blocks.lang.WorkFlow;
 import plugins.adufour.blocks.tools.input.InputBlock;
+import plugins.adufour.blocks.tools.output.OutputBlock;
 import plugins.adufour.blocks.util.BlockListener;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.protocols.Protocols;
@@ -90,7 +91,7 @@ public class BlockPanel extends JPanel implements ActionListener, BlockListener
             if (dragging)
             {
                 WorkFlow wf = workFlowPane.getWorkFlow();
-                
+
                 if (wf.isBlockSelected(blockDesc))
                 {
                     for (BlockDescriptor bd : wf.getBlockSelection())
@@ -846,7 +847,7 @@ public class BlockPanel extends JPanel implements ActionListener, BlockListener
 
         menu.addSeparator();
 
-        if (blockDesc.getBlock() instanceof InputBlock)
+        if ((blockDesc.getBlock() instanceof InputBlock) || (blockDesc.getBlock() instanceof OutputBlock))
         {
             // option to retrieve parameter from command line
             String tooltip = "<html><h4>Identifier used to set the value from the command line</h4></html>";