Index: src/Graph/BoostGraphCreator.cpp
===================================================================
--- src/Graph/BoostGraphCreator.cpp	(revision 6e5b8dd8423dbdf1fe4c776b9a340f732f99558c)
+++ src/Graph/BoostGraphCreator.cpp	(revision 1356afee7ed130690ce667478af2c3a02c81b8ff)
@@ -39,11 +39,8 @@
 
 #include <algorithm>
-#include <iterator>
 
 #include "CodePatterns/Assert.hpp"
-#include "CodePatterns/Log.hpp"
 
 #include "Atom/atom.hpp"
-#include "Bond/bond.hpp"
 #include "molecule.hpp"
 
@@ -105,51 +102,2 @@
 }
 
-template <typename iterator>
-void BoostGraphCreator::createFromRange(
-    const iterator &_begin,
-    const iterator &_end,
-    const size_t &_no_nodes,
-    const predicate_t &_pred
-    )
-{
-  graph = UndirectedGraph();
-
-  // add vertices
-  for(iterator iter = _begin; iter != _end; ++iter) {
-    const atomId_t atomid = (*iter)->getId();
-    Vertex v = boost::add_vertex(atomid, graph);
-    const atomId_t vertexname = boost::get(boost::get(boost::vertex_name, graph), v);
-    const nodeId_t vertexindex = boost::get(boost::get(boost::vertex_index, graph), v);
-    LOG(2, "DEBUG: Adding node " << vertexindex << " associated to atom #" << vertexname);
-    ASSERT( vertexname == atomid,
-        "BoostGraphCreator::createFromRange() - atomid "+toString(atomid)
-        +" is not name of vertex "+toString(vertexname)+".");
-    atomids_nodeids.insert( std::make_pair(vertexname, vertexindex) );
-  }
-
-  // add edges
-  for(iterator iter = _begin; iter != _end; ++iter) {
-    LOG(2, "DEBUG: Looking at atom " << (*iter)->getId());
-    const BondList& ListOfBonds = (*iter)->getListOfBonds();
-    for(BondList::const_iterator bonditer = ListOfBonds.begin();
-        bonditer != ListOfBonds.end(); ++bonditer) {
-      LOG(2, "DEBUG: Looking at bond " << *(*bonditer));
-      const atomId_t leftid = (*bonditer)->leftatom->getId();
-      const nodeId_t leftnodeid = getNodeId(leftid);
-      const atomId_t rightid = (*bonditer)->rightatom->getId();
-      const nodeId_t rightnodeid = getNodeId(rightid);
-      // only pick each bond once and evaluate predicate
-      if ((leftid == (*iter)->getId())
-          && (_pred(**bonditer))) {
-        LOG(3, "DEBUG: ADDING edge " << leftnodeid << " <-> " << rightnodeid);
-        boost::add_edge(leftnodeid, rightnodeid, graph);
-      } else {
-        LOG(3, "DEBUG: Discarding edge " << leftnodeid << " <-> " << rightnodeid);
-      }
-    }
-  }
-  LOG(2, "DEBUG: We have " << getNumVertices() << " nodes and " << getNumEdges()
-      << " edges in the molecule graph.");
-}
-
-
Index: src/Graph/BoostGraphCreator.hpp
===================================================================
--- src/Graph/BoostGraphCreator.hpp	(revision 6e5b8dd8423dbdf1fe4c776b9a340f732f99558c)
+++ src/Graph/BoostGraphCreator.hpp	(revision 1356afee7ed130690ce667478af2c3a02c81b8ff)
@@ -116,5 +116,4 @@
   nodeId_t getNodeId(const atomId_t &_atomid) const;
 
-private:
   /** General purpose function that contains the internal logic of walking the
    * bonds of a set of atoms given by \a _begin and \a _end iterators and
@@ -145,4 +144,6 @@
 };
 
+#include "BoostGraphCreator_impl.hpp"
+
 
 #endif /* GRAPH_BOOSTGRAPHCREATOR_HPP_ */
Index: src/Graph/BoostGraphCreator_impl.hpp
===================================================================
--- src/Graph/BoostGraphCreator_impl.hpp	(revision 1356afee7ed130690ce667478af2c3a02c81b8ff)
+++ src/Graph/BoostGraphCreator_impl.hpp	(revision 1356afee7ed130690ce667478af2c3a02c81b8ff)
@@ -0,0 +1,74 @@
+/*
+ * BoostGraphCreator_impl.hpp
+ *
+ *  Created on: May 18, 2017
+ *      Author: heber
+ */
+
+
+#ifndef GRAPH_BOOSTGRAPHCREATOR_IMPL_HPP_
+#define GRAPH_BOOSTGRAPHCREATOR_IMPL_HPP_
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "BoostGraphCreator.hpp"
+
+#include "CodePatterns/Assert.hpp"
+#include "CodePatterns/Log.hpp"
+
+#include "Atom/atom.hpp"
+#include "Bond/bond.hpp"
+
+template <typename iterator>
+void BoostGraphCreator::createFromRange(
+    const iterator &_begin,
+    const iterator &_end,
+    const size_t &_no_nodes,
+    const predicate_t &_pred
+    )
+{
+  graph = UndirectedGraph();
+
+  // add vertices
+  for(iterator iter = _begin; iter != _end; ++iter) {
+    const atomId_t atomid = (*iter)->getId();
+    Vertex v = boost::add_vertex(atomid, graph);
+    const atomId_t vertexname = boost::get(boost::get(boost::vertex_name, graph), v);
+    const nodeId_t vertexindex = boost::get(boost::get(boost::vertex_index, graph), v);
+    LOG(2, "DEBUG: Adding node " << vertexindex << " associated to atom #" << vertexname);
+    ASSERT( vertexname == atomid,
+        "BoostGraphCreator::createFromRange() - atomid "+toString(atomid)
+        +" is not name of vertex "+toString(vertexname)+".");
+    atomids_nodeids.insert( std::make_pair(vertexname, vertexindex) );
+  }
+
+  // add edges
+  for(iterator iter = _begin; iter != _end; ++iter) {
+    LOG(2, "DEBUG: Looking at atom " << (*iter)->getId());
+    const BondList& ListOfBonds = (*iter)->getListOfBonds();
+    for(BondList::const_iterator bonditer = ListOfBonds.begin();
+        bonditer != ListOfBonds.end(); ++bonditer) {
+      LOG(2, "DEBUG: Looking at bond " << *(*bonditer));
+      const atomId_t leftid = (*bonditer)->leftatom->getId();
+      const nodeId_t leftnodeid = getNodeId(leftid);
+      const atomId_t rightid = (*bonditer)->rightatom->getId();
+      const nodeId_t rightnodeid = getNodeId(rightid);
+      // only pick each bond once and evaluate predicate
+      if ((leftid == (*iter)->getId())
+          && (_pred(**bonditer))) {
+        LOG(3, "DEBUG: ADDING edge " << leftnodeid << " <-> " << rightnodeid);
+        boost::add_edge(leftnodeid, rightnodeid, graph);
+      } else {
+        LOG(3, "DEBUG: Discarding edge " << leftnodeid << " <-> " << rightnodeid);
+      }
+    }
+  }
+  LOG(2, "DEBUG: We have " << getNumVertices() << " nodes and " << getNumEdges()
+      << " edges in the molecule graph.");
+}
+
+
+#endif /* GRAPH_BOOSTGRAPHCREATOR_IMPL_HPP_ */
Index: src/Graph/Makefile.am
===================================================================
--- src/Graph/Makefile.am	(revision 6e5b8dd8423dbdf1fe4c776b9a340f732f99558c)
+++ src/Graph/Makefile.am	(revision 1356afee7ed130690ce667478af2c3a02c81b8ff)
@@ -17,4 +17,5 @@
 	Graph/BoostGraphCreator.hpp \
 	Graph/BoostGraphHelpers.hpp \
+	Graph/BoostGraphCreator_impl.hpp \
 	Graph/BreadthFirstSearchGatherer.hpp \
 	Graph/BuildInducedSubgraph.hpp \
@@ -23,5 +24,4 @@
 	Graph/DepthFirstSearchAnalysis.hpp \
 	Graph/ListOfLocalAtoms.hpp
-
 
 noinst_LTLIBRARIES += libMolecuilderGraph.la
