diff --git a/Modules/Core/ComponentInterface/include/Overlord.h b/Modules/Core/ComponentInterface/include/Overlord.h
index 6c14dc287769610022be458e581f37b092af2210..b720df97dde4df414c254a7f493b818588825eaa 100644
--- a/Modules/Core/ComponentInterface/include/Overlord.h
+++ b/Modules/Core/ComponentInterface/include/Overlord.h
@@ -45,7 +45,7 @@ namespace selx
     void ApplyNodeConfiguration();
     void ApplyConnectionConfiguration();
     bool UpdateSelectors();
-
+    bool ConnectComponents();
     Blueprint::Pointer m_Blueprint;
     ComponentSelectorContainerType m_ComponentSelectorContainer;
   };
diff --git a/Modules/Core/ComponentInterface/src/Overlord.cxx b/Modules/Core/ComponentInterface/src/Overlord.cxx
index 79daef79022909339343b8dffe274abfb323bce0..a463c5f7ad88d5af114bd5635bc9fbf56dfa3338 100644
--- a/Modules/Core/ComponentInterface/src/Overlord.cxx
+++ b/Modules/Core/ComponentInterface/src/Overlord.cxx
@@ -38,6 +38,7 @@ namespace selx
 
   bool Overlord::Configure()
   {
+    bool isSuccess(false);
     bool allUniqueComponents;
     this->ApplyNodeConfiguration();
     allUniqueComponents = this->UpdateSelectors();
@@ -46,7 +47,13 @@ namespace selx
     this->ApplyConnectionConfiguration();
     allUniqueComponents = this->UpdateSelectors();
     std::cout << "By adding Connection Criteria unique components could " << (allUniqueComponents ? "" : "not ") << "be selected" << std::endl;
-    return allUniqueComponents;
+
+    if (allUniqueComponents)
+    {
+      isSuccess = this->ConnectComponents();
+    }
+
+    return isSuccess;
   }
   void Overlord::ApplyNodeConfiguration()
   {
@@ -113,5 +120,28 @@ namespace selx
 
     return;
   }
+  bool Overlord::ConnectComponents()
+  {
+
+    //TODO: redesign loops, see ApplyConnectionConfiguration()
+    Blueprint::ComponentIndexType index;
+    for (index = 0; index < this->m_ComponentSelectorContainer.size(); ++index)
+    {
+      Blueprint::OutputIteratorPairType ouputItPair = this->m_Blueprint->GetOutputIterator(index);
+      Blueprint::OutputIteratorPairType::first_type ouputIt;
+      Blueprint::OutputIteratorPairType::second_type ouputItEnd = ouputItPair.second;
+      for (ouputIt = ouputItPair.first; ouputIt != ouputItEnd; ++ouputIt)
+      {
+        //TODO check direction upstream/downstream input/output source/target
+        //TODO GetComponent returns NULL if possible components !=1 we can check for that, but Overlord::UpdateSelectors() does something similar.
+        ComponentBase::Pointer sourceComponent = this->m_ComponentSelectorContainer[ouputIt->m_source]->GetComponent();
+        ComponentBase::Pointer targetComponent = this->m_ComponentSelectorContainer[ouputIt->m_target]->GetComponent();
+        targetComponent->ConnectFrom(sourceComponent);
+      }
+    }
+    //TODO should we communicate by exceptions instead of returning booleans?
+    return true;
+  }
+
 } // end namespace selx