diff --git a/CMake/elxComponent.cmake b/CMake/elxComponent.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..4fd04dfb6e043411fce6ac20509b97a215444347
--- /dev/null
+++ b/CMake/elxComponent.cmake
@@ -0,0 +1,10 @@
+macro( ElastixComponent COMPONENT )
+  ElastixModuleCheckName( ${COMPONENT} )
+  set( ELASTIX_COMPONENT_{$COMPONENT}_DEFINED TRUE )
+endmacro()
+
+macro( ElastixComponentCheckName COMPONENT )
+  if( NOT "${_name}" MATCHES "^[a-zA-Z][a-zA-Z0-9]*$" )
+    message( FATAL_ERROR "Invalid component name: ${COMPONENT}" )
+  endif()
+endmacro()
\ No newline at end of file
diff --git a/CMake/elxModules.cmake b/CMake/elxModules.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..0b993b9570fca4351a47dacadb59c42e476d1f3b
--- /dev/null
+++ b/CMake/elxModules.cmake
@@ -0,0 +1,87 @@
+# ---------------------------------------------------------------------
+# Private helper macros
+
+macro( _elxmodule_check_name MODULE )
+  if( NOT "${_name}" MATCHES "^[a-zA-Z_]*$" )
+    message( FATAL_ERROR "Invalid module name: ${MODULE}" )
+  endif()
+
+  list( FIND ELXMODULE_ALL "${MODULE}" MODULE_FOUND )
+  if( ${MODULE_FOUND} EQUAL -1 )
+    message( FATAL_ERROR "Module not found: ${MODULE}")
+  endif()
+endmacro()
+
+macro( _elxmodule_enable MODULE )
+  _elxmodule_check_name( ${MODULE} )
+
+  if( NOT ${MODULE}_ENABLED )
+    set( USE_${MODULE} ON )
+
+    include( ${${MODULE}_FILE} )
+
+    if( ${MODULE}_INCLUDE_DIRS )
+      include_directories( ${${MODULE}_INCLUDE_DIRS} )
+    endif()
+
+    add_subdirectory( ${${MODULE}_SOURCE_DIR} )
+
+    if( ${MODULE}_LIBRARIES )
+      link_directories( ${${MODULE}_LIBRARY_DIRS} )
+
+      list( APPEND ELASTIX_LIBRARIES
+        ${${MODULE}_LIBRARIES}
+      )
+    endif()
+
+    # TODO: Add recursive dependency walk
+  endif()
+endmacro()
+
+macro( _elxmodule_disable MODULE )
+  # TODO
+endmacro()
+
+macro( _elxmodules_initialize )
+  set( ELXMODULE_ALL )
+
+  file( GLOB MODULE_FILES RELATIVE "${CMAKE_SOURCE_DIR}"
+     "${CMAKE_SOURCE_DIR}/Modules/*/elxModule*.cmake"
+  )
+
+  message( STATUS "Found the following elastix modules:")
+  foreach( MODULE_FILE ${MODULE_FILES})
+    get_filename_component( MODULE_PATH ${MODULE_FILE} PATH )
+    get_filename_component( MODULE ${MODULE_FILE} NAME_WE )
+    message( STATUS "  ${MODULE}" )
+
+    option( "USE_${MODULE}" OFF )
+    set( "${MODULE}_FILE" ${CMAKE_SOURCE_DIR}/${MODULE_FILE} )
+    set( "${MODULE}_ENABLED" OFF )
+
+    set( ${MODULE}_SOURCE_DIR ${CMAKE_SOURCE_DIR}/${MODULE_PATH} )
+    set( ${MODULE}_BINARY_DIR ${CMAKE_BINARY_DIR}/${MODULE_PATH} )
+
+    set( ${MODULE}_INCLUDE_DIRS )
+    set( ${MODULE}_LIBRARY_DIRS )
+    set( ${MODULE}_LIBRARIES )
+
+    list(APPEND ELXMODULE_ALL ${MODULE} )
+  endforeach()
+endmacro()
+
+_elxmodules_initialize()
+
+# ---------------------------------------------------------------------
+# Public interface
+
+macro( elxmodule_enable MODULE )
+  _elxmodule_enable( ${MODULE} )
+endmacro()
+
+macro( elxmodule_compile MODULE )
+  project( "${MODULE}" )
+  add_library( ${MODULE} STATIC "${${MODULE}_SOURCE_FILES}" )
+  target_link_libraries( ${MODULE} ${ELASTIX_LIBRARIES} )
+  list( APPEND ${MODULE}_LIBRARIES ${MODULE} )
+endmacro()
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 8214d5aa7d313d5cc58e23b26ebf25f88919cdcb..eea7b29716863cb1db0a6dd49cd4fbc9f6ef7f3d 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -7,6 +7,11 @@ set( MSVC_INCREMENTAL_DEFAULT ON )
 # ---------------------------------------------------------------------
 project( Elastix )
 
+# Place libraries and executables in the bin directory
+set( CMAKE_RUNTIME_OUTPUT_DIRECTORY
+  "${CMAKE_BINARY_DIR}/bin"
+)
+
 # Include SuperElastix CMake scripts
 set( CMAKE_MODULE_PATH
   "${CMAKE_CURRENT_SOURCE_DIR}/CMake" 
@@ -25,23 +30,16 @@ include( ${ITK_USE_FILE} )
 include( "${CMAKE_CURRENT_SOURCE_DIR}/CMake/elxITKRequiredModules.cmake" )
 
 # ---------------------------------------------------------------------
-# Build Elastix
-
-set( ELASTIX_COMMON_INCLUDE_DIRECTORIES
-  ${CMAKE_SOURCE_DIR}/Modules/Core/Common/include
-)
+# Boost Graph Library
+find_package( Boost REQUIRED graph )
+include_directories( ${Boost_INCLUDE_DIRS} )
 
-set( ELASTIX_CORE_INCLUDE_DIRECTORIES
-  ${CMAKE_SOURCE_DIR}/Modules/Core/Blueprints/include
-)
-
-set( ELASTIX_INCLUDE_DIRECTORIES
-  ${ELASTIX_COMMON_INCLUDE_DIRECTORIES}
-  ${ELASTIX_CORE_INCLUDE_DIRECTORIES}
-)
+# ---------------------------------------------------------------------
+# Build Elastix
 
-include_directories( ${ELASTIX_INCLUDE_DIRECTORIES} )
-add_subdirectory( Modules )
+# For now we just enable all modules
+include( "${CMAKE_CURRENT_SOURCE_DIR}/CMake/elxModules.cmake" )
+elxmodule_enable( elxModuleCore )
 
 # ---------------------------------------------------------------------
 # Testing
diff --git a/Modules/CMakeLists.txt b/Modules/CMakeLists.txt
deleted file mode 100644
index 3c6212d3542a67000d0091ff33a596e2e739a74c..0000000000000000000000000000000000000000
--- a/Modules/CMakeLists.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-add_subdirectory(
-  Core
-)
diff --git a/Modules/Core/Blueprints/CMakeLists.txt b/Modules/Core/Blueprints/CMakeLists.txt
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/Modules/Core/Blueprints/include/elxBlueprint.h b/Modules/Core/Blueprints/include/elxBlueprint.h
new file mode 100644
index 0000000000000000000000000000000000000000..8b42694b8227d2e0881a67b086f7af79147c2090
--- /dev/null
+++ b/Modules/Core/Blueprints/include/elxBlueprint.h
@@ -0,0 +1,62 @@
+#ifndef __Blueprint_h
+#define __Blueprint_h
+
+#include "itkObjectFactory.h"
+#include "itkDataObject.h"
+
+#include "elxMacro.h"
+#include "elxComponentDescriptor.h"
+
+#include "boost/graph/graph_traits.hpp"
+#include "boost/graph/directed_graph.hpp"
+
+namespace elx {
+
+template< class TComponentDescriptor >
+class Blueprint : public itk::DataObject
+{
+public:
+
+  elxNewMacro( Blueprint, itk::DataObject );
+
+  typedef TComponentDescriptor                                                ComponentDescriptorType;
+  typedef typename TComponentDescriptor::ComponentNameType                    ComponentNameType;
+  
+  typedef boost::adjacency_list< boost::vecS,      
+                                 boost::vecS,      
+                                 boost::directedS,
+                                 ComponentDescriptorType >                    GraphType;
+
+  typedef typename boost::graph_traits< GraphType >::vertex_descriptor        ComponentType;
+  typedef typename boost::graph_traits< GraphType >::vertex_iterator          ComponentIterator, ComponentIteratorEnd;
+
+  typedef boost::vertex_index_t                                               ComponentIndexType;
+  typedef typename boost::property_map< GraphType, ComponentIndexType >::type ComponentIndexMapType;
+
+  typedef typename boost::graph_traits< GraphType >::edge_descriptor          ConnectionDescriptorType;
+  typedef typename boost::graph_traits< GraphType >::edge_iterator            ConnectionIterator, ConnectionIteratorEnd;
+
+  typedef typename boost::graph_traits< GraphType >::in_edge_iterator         InputIterator, InputIteratorEnd;
+  typedef typename boost::graph_traits< GraphType >::out_edge_iterator        OutputIterator, OutputIteratorEnd;
+
+  int TestFunction( void );
+  bool AddComponent( ComponentDescriptorType component );
+  bool SetComponent( ComponentIndexType componentIndex, ComponentDescriptorType component );
+  ComponentDescriptorType GetComponent( ComponentIndexType componentIndex );
+  bool RemoveComponent( ComponentDescriptorType component );
+
+  bool SetConnection( ComponentIndexType upstream, ComponentIndexType downstream );
+  ConnectionDescriptorType GetConnection( ConnectionDescriptorType Connection );
+  bool RemoveConnection( ConnectionDescriptorType connection );
+
+  void PrintGraph( void );
+
+private:
+
+  GraphType m_Graph;
+
+};
+
+}
+
+#endif // #define __Blueprint_h
\ No newline at end of file
diff --git a/Modules/Core/Blueprints/include/elxComponentDescriptor.h b/Modules/Core/Blueprints/include/elxComponentDescriptor.h
new file mode 100644
index 0000000000000000000000000000000000000000..8f5402e4526532088cc8089d4af95d775a848b33
--- /dev/null
+++ b/Modules/Core/Blueprints/include/elxComponentDescriptor.h
@@ -0,0 +1,34 @@
+#ifndef __ComponentDescriptor_h
+#define __ComponentDescriptor_h
+
+#include "elxMacro.h"
+#include "itkObjectFactory.h"
+#include "itkDataObject.h"
+
+namespace elx {
+
+class ComponentDescriptor : public itk::DataObject
+{
+public:
+
+  elxNewMacro( ComponentDescriptor, itk::DataObject );
+
+  // Identifier to find component in the component database
+  typedef std::string ComponentNameType;
+
+  ComponentDescriptor( void ) { this->SetComponentName( ComponentNameType() ); }
+  ComponentDescriptor( const ComponentNameType componentName );
+
+  // TODO: Setter should validate ComponentName exists in ComponentDatabase
+  itkSetMacro( ComponentName, ComponentNameType ); 
+  itkGetMacro( ComponentName, ComponentNameType );
+
+private:
+
+  ComponentNameType m_ComponentName;
+
+};
+
+}
+
+#endif // __ComponentDescriptor_h
diff --git a/Modules/Core/Blueprints/src/elxBlueprint.cxx b/Modules/Core/Blueprints/src/elxBlueprint.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..b3319d01551325a82b0926f0f1a33fd4fd3f7abf
--- /dev/null
+++ b/Modules/Core/Blueprints/src/elxBlueprint.cxx
@@ -0,0 +1,77 @@
+#ifndef __Blueprint_hxx
+#define __Blueprint_hxx
+
+#include <boost/graph/graphviz.hpp>
+
+#include "elxBlueprint.h"
+
+namespace elx {
+
+/*
+Blueprint< ComponentDescriptor >::ComponentDescriptorType
+Blueprint< ComponentDescriptor >
+::AddComponent( ComponentDescriptorType component )
+{
+  // TODO: Check that the component is in the ComponentDatabase
+  this->Modified();
+  return this->m_Graph->add_vertex( component );
+}
+
+bool
+Blueprint< ComponentDescriptor >
+::SetComponent( ComponentDescriptorType component )
+{
+  this->Modified();
+  return this->m_Graph->remove_vertex( connection );
+}
+
+bool
+Blueprint< ComponentDescriptor >
+::RemoveComponent( ComponentDescriptorType component )
+{
+  this->Modified();
+  return this->m_Graph->remove_vertex( connection );
+}
+
+bool
+Blueprint< ComponentDescriptor >
+::AddConnection( ComponentDescriptorType upsteam, ComponentDescriptorType downstream )
+{
+  this->Modified();
+  return this->m_Graph->add_edge( upstream, downstream );
+}
+
+ConnectionDescriptorType
+Blueprint< ComponentDescriptor >
+::GetConnection( ConnectionDescriptorType Connection )
+{
+  this->Modified();
+}
+
+void 
+Blueprint< ComponentDescriptor >
+::RemoveConnection( ConnectionType connection )
+{
+  this->Modified();
+  this->m_Graph->remove_edge( connection );
+}
+
+void 
+Blueprint< ComponentDescriptor >
+::PrintGraph( void )
+{
+  // TODO: Link to graphviz library
+  // boost::write_graphviz(std::cout, this->m_Graph);
+  std::cout << "Printed graph" << std::endl;
+}
+*/
+
+template<>
+int
+Blueprint< ComponentDescriptor >
+::TestFunction( void )
+{ return 0; }
+
+} // namespace elx 
+
+#endif // __Blueprint_hxx
\ No newline at end of file
diff --git a/Modules/Core/Blueprints/src/elxComponentDescriptor.cxx b/Modules/Core/Blueprints/src/elxComponentDescriptor.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..9589451733f5f3b2c14b45e990f70711bab241e5
--- /dev/null
+++ b/Modules/Core/Blueprints/src/elxComponentDescriptor.cxx
@@ -0,0 +1,18 @@
+#ifndef __ComponentDescriptor_cxx
+#define __ComponentDescriptor_cxx
+
+#include "elxComponentDescriptor.h"
+
+// TODO: Need enum for component name?
+
+namespace elx {
+
+ComponentDescriptor
+::ComponentDescriptor( const ComponentNameType componentName )
+{
+  this->SetComponentName( componentName );
+}
+
+} // namespace elx
+
+#endif // __ComponentDescriptor_cxx
\ No newline at end of file
diff --git a/Modules/Core/CMakeLists.txt b/Modules/Core/CMakeLists.txt
index 84c12fcb3aba7189c16706bc6a7affdded2175ca..50296aa3c753ddf0818b1b78653383350f700b40 100644
--- a/Modules/Core/CMakeLists.txt
+++ b/Modules/Core/CMakeLists.txt
@@ -1,2 +1 @@
-add_subdirectory( Common )
-add_subdirectory( Blueprints )
+elxmodule_compile( ${MODULE} )
diff --git a/Modules/Core/Common/CMakeLists.txt b/Modules/Core/Common/CMakeLists.txt
deleted file mode 100644
index b83cfce3b85bc48c4c713194051c1e70655c7a95..0000000000000000000000000000000000000000
--- a/Modules/Core/Common/CMakeLists.txt
+++ /dev/null
@@ -1 +0,0 @@
-include_directories( include )
diff --git a/Modules/Core/elxModuleCore.cmake b/Modules/Core/elxModuleCore.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..eaebd893405d56be9b9edeb671461538b04cca09
--- /dev/null
+++ b/Modules/Core/elxModuleCore.cmake
@@ -0,0 +1,13 @@
+set( ${MODULE}_INCLUDE_DIRS
+  ${CMAKE_SOURCE_DIR}/${MODULE_PATH}/Common/include
+  ${CMAKE_SOURCE_DIR}/${MODULE_PATH}/Blueprints/include
+)
+
+set( ${MODULE}_SOURCE_FILES
+  ${CMAKE_SOURCE_DIR}/${MODULE_PATH}/Blueprints/src/elxComponentDescriptor.cxx
+  ${CMAKE_SOURCE_DIR}/${MODULE_PATH}/Blueprints/src/elxBlueprint.cxx
+)
+
+set( ${MODULE}_LIBRARIES 
+  elxModuleCore
+)
\ No newline at end of file
diff --git a/SuperBuild/CMakeLists.txt b/SuperBuild/CMakeLists.txt
index cff7bb5aec197b58bc119bf198014d2991bd6f36..0eb91de3a6f2cccb4fd546af8fb89ce8ff0777aa 100644
--- a/SuperBuild/CMakeLists.txt
+++ b/SuperBuild/CMakeLists.txt
@@ -1,6 +1,6 @@
 cmake_minimum_required( VERSION 2.8 )
 
-#---------------------------------------------------------------------
+# ---------------------------------------------------------------------
 project( ElastixSuperBuild )
 
 find_package( Git REQUIRED )
@@ -15,7 +15,7 @@ set( CMAKE_MODULE_PATH
 
 set(CMAKE_INSTALL_PREFIX ${CMAKE_CURRENT_BINARY_DIR} CACHE PATH "SuperBuild install directory" FORCE)
 
-#---------------------------------------------------------------------
+# ---------------------------------------------------------------------
 # Elastix SuperBuild configuration
 
 # Build release by default
@@ -29,13 +29,16 @@ option( ELASTIX_BUILD_EXAMPLES "Enable building examples." ON )
 
 # Build tests by default
 option( ELASTIX_BUILD_TESTING "Enable building tests." ON )
-
 if( ELASTIX_BUILD_TESTING )
   option( ELASTIX_BUILD_BENCHMARKING "Enable building benchmarks." ON )
   option( ELASTIX_BUILD_DASHBOARD "Enable building benchmarks." ON )
 endif()
 
-#---------------------------------------------------------------------
+# Do not build dashboard by default
+option( ELASTIX_BUILD_DASHBOARD "Enable building dashboard." OFF )
+
+
+# ---------------------------------------------------------------------
 # Build ITK
 
 set( ITK_VERSION_MAJOR "4" )
@@ -54,7 +57,19 @@ else()
   list( APPEND ELASTIX_DEPENDENCIES ITK )
 endif()
 
-#---------------------------------------------------------------------
+# ---------------------------------------------------------------------
+# Boost Graph Library
+
+mark_as_advanced( USE_SYSTEM_BOOST )
+option( USE_SYSTEM_BOOST "Use an installed version of BOOST" OFF )
+if( USE_SYSTEM_BOOST )
+  find_package( BOOST REQUIRED graph )
+else()
+  include( ExternalBoost )
+  list( APPEND ELASTIX_DEPENDENCIES BOOST )
+endif()
+
+# ---------------------------------------------------------------------
 # Build Elastix
 
 include( Elastix )
diff --git a/SuperBuild/Elastix.cmake b/SuperBuild/Elastix.cmake
index d6bf55178d1d5674f14c9a5bd3f3fc7a93dcb3bd..1f1d739399df9111afa2df1d2577b2b4e6e91472 100644
--- a/SuperBuild/Elastix.cmake
+++ b/SuperBuild/Elastix.cmake
@@ -6,10 +6,12 @@ ExternalProject_Add( ${proj}
   BINARY_DIR ${proj}-build
   CMAKE_ARGS
     --no-warn-unused-cli
+    -DELASTIX_BUILD_EXAMPLES:BOOL=${ELASTIX_BUILD_EXAMPLES}
     -DELASTIX_BUILD_TESTING:BOOL=${ELASTIX_BUILD_TESTING}
     -DELASTIX_BUILD_BENCHMARKING:BOOL=${ELASTIX_BUILD_BENCHMARKING}
     -DELASTIX_BUILD_DASHBOARD:BOOL=${ELASTIX_BUILD_DASHBOARD}
     -DITK_DIR:PATH=${ITK_DIR}
+    -DBOOST_ROOT:PATH=${BOOST_ROOT}
   DEPENDS ${ELASTIX_DEPENDENCIES}
   INSTALL_COMMAND ""
-)
\ No newline at end of file
+)
diff --git a/SuperBuild/ExternalBoost.cmake b/SuperBuild/ExternalBoost.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..e1f1286e9995efa98dce2649cc9aa79a41bebdbf
--- /dev/null
+++ b/SuperBuild/ExternalBoost.cmake
@@ -0,0 +1,39 @@
+set( PROJECT BOOST )
+
+# Note: It IS important to download different files on different OS's:
+# on Unix-like systems, we need the file persmissions (only available in the .tar.gz),
+# while on Windows, we need CR/LF line feeds (only available in the .zip)
+
+set( BOOST_CONFIGURE_COMMAND )
+if( UNIX )
+  set( BOOST_URL "http://sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.gz")
+  set( BOOST_MD5 51528a0e3b33d9e10aaa311d9eb451e3 )
+  set( BOOST_CONFIGURE_COMMAND ./bootstrap.sh )
+  set( BOOST_BUILD_COMMAND ./b2 )
+else()
+  if( WIN32 )
+    set( BOOST_URL "http://sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.zip")
+    set( BOOST_MD5 08d29a2d85db3ebc8c6fdfa3a1f2b83c )
+    set( BOOST_CONFIGURE_COMMAND cmd /C bootstrap.bat msvc )
+    set( BOOST_BUILD_COMMAND b2.exe )
+  endif()
+endif()
+
+set( BOOST_BUILD_DIR "${CMAKE_INSTALL_PREFIX}/${PROJECT}-build/" )
+
+ExternalProject_Add( BOOST
+  BUILD_IN_SOURCE 1
+  URL "${BOOST_URL}"
+  URL_MD5 ${BOOST_MD5}
+  UPDATE_COMMAND ""
+  CONFIGURE_COMMAND ${BOOST_CONFIGURE_COMMAND} 
+    --prefix=${BOOST_BUILD_DIR}/lib
+  BUILD_COMMAND ${BOOST_BUILD_COMMAND} install 
+    --prefix=${BOOST_BUILD_DIR}
+    --with-graph
+    --variant=release
+    --jobs=4
+  INSTALL_COMMAND ""
+)
+
+set( BOOST_ROOT ${BOOST_BUILD_DIR} )
diff --git a/SuperBuild/ExternalITK.cmake b/SuperBuild/ExternalITK.cmake
index 206e83a60c330e8a067a4dffc9ea3d4f030c0b7f..0ee77affea1569d7f946b128e1a7de2756189959 100644
--- a/SuperBuild/ExternalITK.cmake
+++ b/SuperBuild/ExternalITK.cmake
@@ -1,13 +1,13 @@
-set( proj ITK )
+set( PROJECT ITK )
 set( ITK_REPOSITORY https://github.com/InsightSoftwareConsortium/ITK.git )
 set( ITK_TAG "v${ITK_VERSION_STRING}")
 
-ExternalProject_Add( ${proj}
+ExternalProject_Add( ${PROJECT}
   GIT_REPOSITORY ${ITK_REPOSITORY}
   GIT_TAG ${ITK_TAG}
   UPDATE_COMMAND ""
-  SOURCE_DIR ${proj}
-  BINARY_DIR ${proj}-build
+  SOURCE_DIR ${PROJECT}
+  BINARY_DIR ${PROJECT}-build
   CMAKE_ARGS
     --no-warn-unused-cli
     -DBUILD_EXAMPLES:BOOL=OFF
@@ -21,4 +21,4 @@ ExternalProject_Add( ${proj}
 )
 
 ExternalProject_Get_Property( ITK install_dir )
-set( ITK_DIR "${install_dir}/lib/cmake/ITK-${ITK_VERSION_MAJOR}.${ITK_VERSION_MINOR}" )
\ No newline at end of file
+set( ITK_DIR "${install_dir}/lib/cmake/ITK-${ITK_VERSION_MAJOR}.${ITK_VERSION_MINOR}" )
diff --git a/Testing/Unit/CMakeLists.txt b/Testing/Unit/CMakeLists.txt
index 152463661b386eebef9985f5071fa38a1f427f9e..1ed2189daf32f2fab2f429e3bdb080dd276c3e77 100644
--- a/Testing/Unit/CMakeLists.txt
+++ b/Testing/Unit/CMakeLists.txt
@@ -5,6 +5,7 @@
 
 set( ElastixUnitTestFilenames
   elxExampleUnitTest.cxx
+  elxBluePrintTest.cxx
   itkRegistration.cxx
 )
 
@@ -33,7 +34,6 @@ configure_file(
 )
 
 include_directories( ${CMAKE_CURRENT_BINARY_DIR} )
-
 add_library( DataManager elxDataManager.cxx )
 
 list( APPEND TEST_LIBRARIES 
diff --git a/Testing/Unit/elxBluePrintTest.cxx b/Testing/Unit/elxBluePrintTest.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..8aa289fc4201a92af8d6c185905855bd58c5ab4e
--- /dev/null
+++ b/Testing/Unit/elxBluePrintTest.cxx
@@ -0,0 +1,27 @@
+#include "elxBlueprint.h"
+#include "elxComponentDescriptor.h"
+#include "gtest/gtest.h"
+
+namespace elx {
+
+TEST( Blueprint, Instantiation )
+{
+  typedef Blueprint< ComponentDescriptor > BlueprintType;
+  BlueprintType::Pointer blueprint;
+  EXPECT_NO_THROW( blueprint = BlueprintType::New() );
+
+  typedef BlueprintType::ComponentDescriptorType ComponentDescriptorType;
+  ComponentDescriptorType::Pointer componentDescriptor;
+  EXPECT_NO_THROW( componentDescriptor = ComponentDescriptorType::New() );
+
+  typedef ComponentDescriptorType::ComponentNameType ComponentNameType;
+  ComponentNameType componentName;
+  EXPECT_NO_THROW( componentName = ComponentNameType("Metric") );
+  EXPECT_NO_THROW( componentDescriptor->SetComponentName( componentName ) );
+
+  EXPECT_NO_THROW( blueprint->TestFunction() );
+
+  ASSERT_TRUE( true );
+}
+
+} // namespace elx