diff --git a/Source/Processors/Editors/MergerEditor.cpp b/Source/Processors/Editors/MergerEditor.cpp
index 5bea9103c096b54cd21c400642e195ded03e7d20..e612cad5d8dded101fb05b439adacdce8f886f06 100755
--- a/Source/Processors/Editors/MergerEditor.cpp
+++ b/Source/Processors/Editors/MergerEditor.cpp
@@ -23,6 +23,8 @@
 
 #include "MergerEditor.h"
 #include "../Utilities/Merger.h"
+#include "../ProcessorGraph.h"
+#include "../../UI/EditorViewport.h"
 
 // PipelineSelectorButton::PipelineSelectorButton()
 // 	: DrawableButton ("Selector", DrawableButton::ImageFitted)
@@ -114,6 +116,55 @@ void MergerEditor::buttonEvent(Button* button)
     }
 }
 
+void MergerEditor::mouseDown(const MouseEvent& e)
+{
+
+
+
+    if (e.mods.isRightButtonDown())
+    {
+
+        PopupMenu m;
+        m.addItem(1, "Choose input 2:",false);
+
+        Array<GenericProcessor*> availableProcessors = getProcessorGraph()->getListOfProcessors();
+
+        for (int i = 0; i < availableProcessors.size(); i++)
+        {
+            if (!availableProcessors[i]->isSink() && 
+                !availableProcessors[i]->isMerger() &&
+                !availableProcessors[i]->isSplitter() &&
+                availableProcessors[i]->getDestNode() != getProcessor())
+            {
+
+                String name = String(availableProcessors[i]->getNodeId());
+                name += " - ";
+                name += availableProcessors[i]->getName();
+
+                m.addItem(i+2, name);
+                //processorsInList.add(availableProcessors[i]);
+            }
+        }
+
+        const int result = m.show();
+
+        if (result > 1)
+        {
+            std::cout << "Selected " << availableProcessors[result-2]->getName() << std::endl;
+        
+            switchSource(1);
+
+            Merger* processor = (Merger*) getProcessor();
+            processor->setMergerSourceNode(availableProcessors[result-2]);
+
+            getEditorViewport()->makeEditorVisible(this, false, true);
+        }
+    }
+
+    
+
+}
+
 void MergerEditor::switchSource(int source)
 {
     if (source == 0)
diff --git a/Source/Processors/Editors/MergerEditor.h b/Source/Processors/Editors/MergerEditor.h
index dfbf85aa8e065fd8365863aa7020a599d2556c5c..b37818907de6e2ea64ed81ee891a73a287fcd4f3 100755
--- a/Source/Processors/Editors/MergerEditor.h
+++ b/Source/Processors/Editors/MergerEditor.h
@@ -50,6 +50,8 @@ public:
 
     void switchIO(int);
 
+    void mouseDown(const MouseEvent& event);
+
 private:
 
     ImageButton* pipelineSelectorA;
diff --git a/Source/Processors/ProcessorGraph.cpp b/Source/Processors/ProcessorGraph.cpp
index f30f18b837acbd07db1edd9761b8213865d59191..ddfb4ca609f6bd1146900b766855d1cbbc540ad1 100644
--- a/Source/Processors/ProcessorGraph.cpp
+++ b/Source/Processors/ProcessorGraph.cpp
@@ -225,7 +225,30 @@ void ProcessorGraph::restoreParameters()
 
 }
 
+Array<GenericProcessor*> ProcessorGraph::getListOfProcessors()
+{
+
+    Array<GenericProcessor*> a;
+
+     for (int i = 0; i < getNumNodes(); i++)
+    {
+        Node* node = getNode(i);
+
+        int nodeId = node->nodeId;
+
+        if (nodeId != OUTPUT_NODE_ID &&
+            nodeId != AUDIO_NODE_ID &&
+            nodeId != RECORD_NODE_ID &&
+            nodeId != RESAMPLING_NODE_ID)
+        {
+            GenericProcessor* p =(GenericProcessor*) node->getProcessor();
+            a.add(p);
+        }
+    }
 
+    return a;
+
+}
 
 void ProcessorGraph::clearConnections()
 {
diff --git a/Source/Processors/ProcessorGraph.h b/Source/Processors/ProcessorGraph.h
index c660b75a2ea4eb1295ed366278f75fa99bdd096f..ef0ae08e9589ff69b0ecd90e3e8e702e09fa51b7 100755
--- a/Source/Processors/ProcessorGraph.h
+++ b/Source/Processors/ProcessorGraph.h
@@ -83,6 +83,8 @@ public:
     
     void setRecordState(bool);
 
+    Array<GenericProcessor*> getListOfProcessors();
+
 private:
 
     int currentNodeId;