diff --git a/Modules/Core/ComponentInterface/ComponentBase.h b/Modules/Core/ComponentInterface/include/ComponentBase.h
similarity index 87%
rename from Modules/Core/ComponentInterface/ComponentBase.h
rename to Modules/Core/ComponentInterface/include/ComponentBase.h
index 77571d97e4efa5c3a988015cef84a774c9a39123..1fb89f4a62dfb4a8e3925960819538c3e2140357 100644
--- a/Modules/Core/ComponentInterface/ComponentBase.h
+++ b/Modules/Core/ComponentInterface/include/ComponentBase.h
@@ -10,8 +10,8 @@ namespace elx
   class ComponentBase {
   public:
     virtual interfaceStatus ConnectFrom(const char *, ComponentBase*) = 0;
-  protected:
-    virtual ~ComponentBase(){};
+  //protected:
+    virtual ~ComponentBase() {};
   };
 } // end namespace elx
 #endif // #define ComponentBase_h
\ No newline at end of file
diff --git a/Modules/Core/ComponentInterface/Example3rdPartyCode.h b/Modules/Core/ComponentInterface/include/Example3rdPartyCode.h
similarity index 100%
rename from Modules/Core/ComponentInterface/Example3rdPartyCode.h
rename to Modules/Core/ComponentInterface/include/Example3rdPartyCode.h
diff --git a/Modules/Core/ComponentInterface/Example4thPartyCode.h b/Modules/Core/ComponentInterface/include/Example4thPartyCode.h
similarity index 100%
rename from Modules/Core/ComponentInterface/Example4thPartyCode.h
rename to Modules/Core/ComponentInterface/include/Example4thPartyCode.h
diff --git a/Modules/Core/ComponentInterface/GDOptimizer3rdPartyComponent.h b/Modules/Core/ComponentInterface/include/GDOptimizer3rdPartyComponent.h
similarity index 94%
rename from Modules/Core/ComponentInterface/GDOptimizer3rdPartyComponent.h
rename to Modules/Core/ComponentInterface/include/GDOptimizer3rdPartyComponent.h
index c584235d0b7311cd6a1db54c57076439c520f028..1d281e9b9fa7541e14721693433c8f307937578a 100644
--- a/Modules/Core/ComponentInterface/GDOptimizer3rdPartyComponent.h
+++ b/Modules/Core/ComponentInterface/include/GDOptimizer3rdPartyComponent.h
@@ -18,7 +18,7 @@ namespace elx
   {
   public:
     GDOptimizer3rdPartyComponent();
-    ~GDOptimizer3rdPartyComponent();
+    virtual ~GDOptimizer3rdPartyComponent();
     Example3rdParty::GDOptimizer3rdParty* theImplementation;
     Metric3rdPartyWrapper* MetricObject;
     //virtual int ConnectFrom(const char *, ComponentBase*);
diff --git a/Modules/Core/ComponentInterface/GDOptimizer4thPartyComponent.h b/Modules/Core/ComponentInterface/include/GDOptimizer4thPartyComponent.h
similarity index 94%
rename from Modules/Core/ComponentInterface/GDOptimizer4thPartyComponent.h
rename to Modules/Core/ComponentInterface/include/GDOptimizer4thPartyComponent.h
index 29f03e9639b0f223992d1aeea24c655995e17875..eff1bb78cd856c4f9b6ae6088c2b5d555fb05077 100644
--- a/Modules/Core/ComponentInterface/GDOptimizer4thPartyComponent.h
+++ b/Modules/Core/ComponentInterface/include/GDOptimizer4thPartyComponent.h
@@ -18,7 +18,7 @@ namespace elx
   {
   public:
     GDOptimizer4thPartyComponent();
-    ~GDOptimizer4thPartyComponent();
+    virtual ~GDOptimizer4thPartyComponent();
     Example4thParty::GDOptimizer4thParty* theImplementation;
     Metric4thPartyWrapper* MetricObject;
     //virtual int ConnectFrom(const char *, ComponentBase*);
diff --git a/Modules/Core/ComponentInterface/Interfaces.hxx b/Modules/Core/ComponentInterface/include/Interfaces.hxx
similarity index 100%
rename from Modules/Core/ComponentInterface/Interfaces.hxx
rename to Modules/Core/ComponentInterface/include/Interfaces.hxx
diff --git a/Modules/Core/ComponentInterface/Metric3rdPartyWrapper.h b/Modules/Core/ComponentInterface/include/Metric3rdPartyWrapper.h
similarity index 100%
rename from Modules/Core/ComponentInterface/Metric3rdPartyWrapper.h
rename to Modules/Core/ComponentInterface/include/Metric3rdPartyWrapper.h
diff --git a/Modules/Core/ComponentInterface/Metric4thPartyWrapper.h b/Modules/Core/ComponentInterface/include/Metric4thPartyWrapper.h
similarity index 100%
rename from Modules/Core/ComponentInterface/Metric4thPartyWrapper.h
rename to Modules/Core/ComponentInterface/include/Metric4thPartyWrapper.h
diff --git a/Modules/Core/ComponentInterface/SSDMetric3rdPartyComponent.h b/Modules/Core/ComponentInterface/include/SSDMetric3rdPartyComponent.h
similarity index 93%
rename from Modules/Core/ComponentInterface/SSDMetric3rdPartyComponent.h
rename to Modules/Core/ComponentInterface/include/SSDMetric3rdPartyComponent.h
index e789950ac4e3223f4d613a8edbd4e7c110e3a3e2..860398a559b4862de5c5a9bc923e669b652b8f04 100644
--- a/Modules/Core/ComponentInterface/SSDMetric3rdPartyComponent.h
+++ b/Modules/Core/ComponentInterface/include/SSDMetric3rdPartyComponent.h
@@ -16,7 +16,7 @@ namespace elx
   {
   public:
     SSDMetric3rdPartyComponent();
-    ~SSDMetric3rdPartyComponent();
+    virtual ~SSDMetric3rdPartyComponent();
     Example3rdParty::SSDMetric3rdParty* theImplementation;
     int GetValue();
     int GetDerivative();
diff --git a/Modules/Core/ComponentInterface/SSDMetric4thPartyComponent.h b/Modules/Core/ComponentInterface/include/SSDMetric4thPartyComponent.h
similarity index 93%
rename from Modules/Core/ComponentInterface/SSDMetric4thPartyComponent.h
rename to Modules/Core/ComponentInterface/include/SSDMetric4thPartyComponent.h
index 26685c74fd4f941ebc339a78e4471fc6f71ce2b3..c07ff0abce595d7f55e6dda9c8aaaed38d19237c 100644
--- a/Modules/Core/ComponentInterface/SSDMetric4thPartyComponent.h
+++ b/Modules/Core/ComponentInterface/include/SSDMetric4thPartyComponent.h
@@ -16,7 +16,7 @@ namespace elx
   {
   public:
     SSDMetric4thPartyComponent();
-    ~SSDMetric4thPartyComponent();
+    virtual ~SSDMetric4thPartyComponent();
     Example4thParty::SSDMetric4thParty* theImplementation;
     int GetValue();
   };
diff --git a/Modules/Core/ComponentInterface/Example3rdPartyCode.cxx b/Modules/Core/ComponentInterface/src/Example3rdPartyCode.cxx
similarity index 100%
rename from Modules/Core/ComponentInterface/Example3rdPartyCode.cxx
rename to Modules/Core/ComponentInterface/src/Example3rdPartyCode.cxx
diff --git a/Modules/Core/ComponentInterface/Example4thPartyCode.cxx b/Modules/Core/ComponentInterface/src/Example4thPartyCode.cxx
similarity index 100%
rename from Modules/Core/ComponentInterface/Example4thPartyCode.cxx
rename to Modules/Core/ComponentInterface/src/Example4thPartyCode.cxx
diff --git a/Modules/Core/ComponentInterface/GDOptimizer3rdPartyComponent.cxx b/Modules/Core/ComponentInterface/src/GDOptimizer3rdPartyComponent.cxx
similarity index 100%
rename from Modules/Core/ComponentInterface/GDOptimizer3rdPartyComponent.cxx
rename to Modules/Core/ComponentInterface/src/GDOptimizer3rdPartyComponent.cxx
diff --git a/Modules/Core/ComponentInterface/GDOptimizer4thPartyComponent.cxx b/Modules/Core/ComponentInterface/src/GDOptimizer4thPartyComponent.cxx
similarity index 100%
rename from Modules/Core/ComponentInterface/GDOptimizer4thPartyComponent.cxx
rename to Modules/Core/ComponentInterface/src/GDOptimizer4thPartyComponent.cxx
diff --git a/Modules/Core/ComponentInterface/Metric3rdPartyWrapper.cxx b/Modules/Core/ComponentInterface/src/Metric3rdPartyWrapper.cxx
similarity index 100%
rename from Modules/Core/ComponentInterface/Metric3rdPartyWrapper.cxx
rename to Modules/Core/ComponentInterface/src/Metric3rdPartyWrapper.cxx
diff --git a/Modules/Core/ComponentInterface/Metric4thPartyWrapper.cxx b/Modules/Core/ComponentInterface/src/Metric4thPartyWrapper.cxx
similarity index 100%
rename from Modules/Core/ComponentInterface/Metric4thPartyWrapper.cxx
rename to Modules/Core/ComponentInterface/src/Metric4thPartyWrapper.cxx
diff --git a/Modules/Core/ComponentInterface/SSDMetric3rdPartyComponent.cxx b/Modules/Core/ComponentInterface/src/SSDMetric3rdPartyComponent.cxx
similarity index 100%
rename from Modules/Core/ComponentInterface/SSDMetric3rdPartyComponent.cxx
rename to Modules/Core/ComponentInterface/src/SSDMetric3rdPartyComponent.cxx
diff --git a/Modules/Core/ComponentInterface/SSDMetric4thPartyComponent.cxx b/Modules/Core/ComponentInterface/src/SSDMetric4thPartyComponent.cxx
similarity index 100%
rename from Modules/Core/ComponentInterface/SSDMetric4thPartyComponent.cxx
rename to Modules/Core/ComponentInterface/src/SSDMetric4thPartyComponent.cxx
diff --git a/Modules/Core/ComponentInterface/componenthandshake.cxx b/Modules/Core/ComponentInterface/src/componenthandshake.cxx
similarity index 100%
rename from Modules/Core/ComponentInterface/componenthandshake.cxx
rename to Modules/Core/ComponentInterface/src/componenthandshake.cxx
diff --git a/Modules/Core/elxModuleCore.cmake b/Modules/Core/elxModuleCore.cmake
index 24e93a5aced2900241b50cb7df509fa9c1c03b00..f0db2453ac04f145970f8d3a8691f5a432a2e261 100644
--- a/Modules/Core/elxModuleCore.cmake
+++ b/Modules/Core/elxModuleCore.cmake
@@ -4,6 +4,7 @@ set( MODULE elxModuleCore )
 set( ${MODULE}_INCLUDE_DIRS
   ${${MODULE}_SOURCE_DIR}/Common/include
   ${${MODULE}_SOURCE_DIR}/Blueprints/include
+  ${${MODULE}_SOURCE_DIR}/ComponentInterface/include
 )
 
 # Export libraries
@@ -14,8 +15,18 @@ set( ${MODULE}_LIBRARIES
 # Module source files
 set( ${MODULE}_SOURCE_FILES
   ${${MODULE}_SOURCE_DIR}/Blueprints/src/elxBlueprint.cxx
+  ${${MODULE}_SOURCE_DIR}/ComponentInterface/src/Example3rdPartyCode.cxx
+  ${${MODULE}_SOURCE_DIR}/ComponentInterface/src/Example4thPartyCode.cxx
+  ${${MODULE}_SOURCE_DIR}/ComponentInterface/src/GDOptimizer3rdPartyComponent.cxx
+  ${${MODULE}_SOURCE_DIR}/ComponentInterface/src/GDOptimizer4thPartyComponent.cxx
+  ${${MODULE}_SOURCE_DIR}/ComponentInterface/src/Metric3rdPartyWrapper.cxx
+  ${${MODULE}_SOURCE_DIR}/ComponentInterface/src/Metric4thPartyWrapper.cxx
+  ${${MODULE}_SOURCE_DIR}/ComponentInterface/src/SSDMetric3rdPartyComponent.cxx
+  ${${MODULE}_SOURCE_DIR}/ComponentInterface/src/SSDMetric4thPartyComponent.cxx
+  ${${MODULE}_SOURCE_DIR}/ComponentInterface/src/componenthandshake.cxx
 )
 
+
 # Compile library
 
 add_library( ${MODULE} STATIC "${${MODULE}_SOURCE_FILES}" )
diff --git a/Testing/Unit/CMakeLists.txt b/Testing/Unit/CMakeLists.txt
index 06f783c2367e33d4d65317703aa29297a624bbe4..a20706ab79020617154a3afd278dd70243093549 100644
--- a/Testing/Unit/CMakeLists.txt
+++ b/Testing/Unit/CMakeLists.txt
@@ -6,6 +6,7 @@
 set( ElastixUnitTestFilenames
   elxExampleUnitTest.cxx
   elxBlueprintTest.cxx
+  elxComponentInterfaceTest.cxx
 )         
 
 # ---------------------------------------------------------------------