diff --git a/CMakeLists.txt b/CMakeLists.txt
index c1944ac..8f9df32 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -123,7 +123,6 @@
   ${PROJECT_SOURCE_DIR}/src/parser/SV3_1aSplitterParser.cpp
   ${PROJECT_SOURCE_DIR}/src/parser/SV3_1aSplitterParserListener.cpp
   ${PROJECT_SOURCE_DIR}/src/SourceCompile/VObjectTypes.cpp
-  ${PROJECT_SOURCE_DIR}/src/*.cpp
   ${PROJECT_SOURCE_DIR}/src/API/*.cpp
   ${PROJECT_SOURCE_DIR}/src/Design/*.cpp
   ${PROJECT_SOURCE_DIR}/src/Library/*.cpp
@@ -155,25 +154,55 @@
   ${PROJECT_SOURCE_DIR}/src/Package/*.cpp
   )
 
-add_executable(surelog ${surelog_SRC})
+set (SURELOG_PUBLIC_HEADERS
+  ${PROJECT_SOURCE_DIR}/src/surelog.h
+) 
+  
 
-add_dependencies(surelog flatc)
-add_dependencies(surelog antlr4_static)
-add_dependencies(surelog flatbuffers)
-add_dependencies(surelog GenerateParser)
-add_dependencies(surelog GenerateSerializer)
+add_library(surelog STATIC ${surelog_SRC})
+set_target_properties(surelog PROPERTIES PUBLIC_HEADER "${SURELOG_PUBLIC_HEADERS}")
+
+add_executable(surelog-bin ${PROJECT_SOURCE_DIR}/src/main.cpp
+)
+set_target_properties(surelog-bin
+  PROPERTIES OUTPUT_NAME surelog
+)
+
+add_executable(hellosureworld ${PROJECT_SOURCE_DIR}/src/hellosureworld.cpp)
+
+add_dependencies(surelog-bin surelog)
+add_dependencies(surelog-bin flatc)
+add_dependencies(surelog-bin antlr4_static)
+add_dependencies(surelog-bin flatbuffers)
+add_dependencies(surelog-bin GenerateParser)
+add_dependencies(surelog-bin GenerateSerializer)
+
+set (ALL_LIBRARIES_FOR_SURELOG
+  surelog
+  ${PYTHON_LIBRARIES}
+  -L${PROJECT_SOURCE_DIR}/dist/ libantlr4-runtime.a
+  -L${PROJECT_SOURCE_DIR}/build/third_party/flatbuffers libflatbuffers.a
+  dl util m rt pthread tcmalloc
+)
 
 # Linkage instructions
 target_link_libraries(
-  surelog ${PYTHON_LIBRARIES}
+  surelog-bin ${ALL_LIBRARIES_FOR_SURELOG} 
 )
+
+add_dependencies(hellosureworld surelog)
+add_dependencies(hellosureworld flatc)
+add_dependencies(hellosureworld antlr4_static)
+add_dependencies(hellosureworld flatbuffers)
+add_dependencies(hellosureworld GenerateParser)
+add_dependencies(hellosureworld GenerateSerializer)
 target_link_libraries(
-  surelog -L${PROJECT_SOURCE_DIR}/dist/ libantlr4-runtime.a -L${PROJECT_SOURCE_DIR}/build/third_party/flatbuffers libflatbuffers.a dl util m rt pthread tcmalloc
+  hellosureworld ${ALL_LIBRARIES_FOR_SURELOG} 
 )
 
 # Creation of the distribution directory,
 # Precompiled package creation
-add_custom_command(TARGET surelog POST_BUILD
+add_custom_command(TARGET surelog-bin POST_BUILD
   COMMAND echo "       Creating staging for precompiled packages"
   COMMAND mkdir -p ${CMAKE_BINARY_DIR}/dist/${CMAKE_BUILD_TYPE}/sv
   COMMAND mkdir -p ${CMAKE_BINARY_DIR}/dist/${CMAKE_BUILD_TYPE}/python
@@ -197,8 +226,13 @@
 
 # Installation target
 INSTALL(
-  TARGETS surelog
+  TARGETS surelog-bin
   RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+  )
+INSTALL(
+  TARGETS surelog
+  ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}/surelog
+  PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/surelog
 )
 INSTALL(
   DIRECTORY   ${CMAKE_BINARY_DIR}/dist/${CMAKE_BUILD_TYPE}/python
@@ -206,3 +240,98 @@
               ${CMAKE_BINARY_DIR}/dist/${CMAKE_BUILD_TYPE}/pkg
   DESTINATION ${CMAKE_INSTALL_LIBDIR}/surelog
 )
+INSTALL(
+  FILES  ${PROJECT_SOURCE_DIR}/src/CommandLine/CommandLineParser.h
+  DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/surelog/CommandLine
+)
+INSTALL(
+  FILES  
+  ${PROJECT_SOURCE_DIR}/src/SourceCompile/SymbolTable.h
+  ${PROJECT_SOURCE_DIR}/src/SourceCompile/CompilationUnit.h
+  ${PROJECT_SOURCE_DIR}/src/SourceCompile/PreprocessFile.h
+  ${PROJECT_SOURCE_DIR}/src/SourceCompile/CompileSourceFile.h
+  ${PROJECT_SOURCE_DIR}/src/SourceCompile/Compiler.h
+  DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/surelog/SourceCompile
+  )
+INSTALL(
+  FILES
+  ${PROJECT_SOURCE_DIR}/src/ErrorReporting/ErrorContainer.h
+  ${PROJECT_SOURCE_DIR}/src/ErrorReporting/Report.h
+  ${PROJECT_SOURCE_DIR}/src/ErrorReporting/Waiver.h
+  DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/surelog/ErrorReporting
+  )
+INSTALL(
+  FILES
+  ${PROJECT_SOURCE_DIR}/src/API/PythonAPI.h
+  ${PROJECT_SOURCE_DIR}/src/API/SLAPI.h
+  DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/surelog/API
+  )
+INSTALL(
+  FILES
+  ${PROJECT_SOURCE_DIR}/src/Common/ClockingBlockHolder.h
+  DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/surelog/Common
+  )
+INSTALL(
+  FILES
+  ${PROJECT_SOURCE_DIR}/src/Design/ClockingBlock.h
+  ${PROJECT_SOURCE_DIR}/src/Design/Design.h
+  ${PROJECT_SOURCE_DIR}/src/Design/Instance.h
+  ${PROJECT_SOURCE_DIR}/src/Design/Signal.h
+  ${PROJECT_SOURCE_DIR}/src/Design/ValuedComponentI.h
+  ${PROJECT_SOURCE_DIR}/src/Design/DataType.h
+  ${PROJECT_SOURCE_DIR}/src/Design/Enum.h
+  ${PROJECT_SOURCE_DIR}/src/Design/ModuleDefinition.h
+  ${PROJECT_SOURCE_DIR}/src/Design/Statement.h
+  ${PROJECT_SOURCE_DIR}/src/Design/VObject.h
+  ${PROJECT_SOURCE_DIR}/src/Design/DefParam.h
+  ${PROJECT_SOURCE_DIR}/src/Design/FileCNodeId.h
+  ${PROJECT_SOURCE_DIR}/src/Design/ModuleInstance.h
+  ${PROJECT_SOURCE_DIR}/src/Design/Task.h
+  ${PROJECT_SOURCE_DIR}/src/Design/DesignComponent.h
+  ${PROJECT_SOURCE_DIR}/src/Design/FileContent.h
+  ${PROJECT_SOURCE_DIR}/src/Design/Parameter.h
+  ${PROJECT_SOURCE_DIR}/src/Design/TfPortItem.h
+  ${PROJECT_SOURCE_DIR}/src/Design/DesignElement.h
+  ${PROJECT_SOURCE_DIR}/src/Design/Function.h
+  ${PROJECT_SOURCE_DIR}/src/Design/Scope.h
+  ${PROJECT_SOURCE_DIR}/src/Design/TimeInfo.h
+  DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/surelog/Design
+  )
+INSTALL(
+  FILES
+  ${PROJECT_SOURCE_DIR}/src/Testbench/ClassDefinition.h
+  ${PROJECT_SOURCE_DIR}/src/Testbench/CoverGroupDefinition.h
+  ${PROJECT_SOURCE_DIR}/src/Testbench/Property.h
+  ${PROJECT_SOURCE_DIR}/src/Testbench/Variable.h
+  ${PROJECT_SOURCE_DIR}/src/Testbench/ClassObject.h
+  ${PROJECT_SOURCE_DIR}/src/Testbench/FunctionMethod.h
+  ${PROJECT_SOURCE_DIR}/src/Testbench/TaskMethod.h
+  ${PROJECT_SOURCE_DIR}/src/Testbench/Constraint.h
+  ${PROJECT_SOURCE_DIR}/src/Testbench/Program.h
+  ${PROJECT_SOURCE_DIR}/src/Testbench/TypeDef.h
+  DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/surelog/Testbench
+  )
+INSTALL(
+  FILES
+  ${PROJECT_SOURCE_DIR}/src/Package/Package.h
+  DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/surelog/Package
+)
+INSTALL(
+  FILES
+  ${PROJECT_SOURCE_DIR}/src/Library/Library.h
+  ${PROJECT_SOURCE_DIR}/src/Library/LibrarySet.h
+  DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/surelog/Library
+  )
+INSTALL(
+  FILES
+  ${PROJECT_SOURCE_DIR}/src/Config/Config.h
+  ${PROJECT_SOURCE_DIR}/src/Config/ConfigSet.h
+  DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/surelog/Config
+  )
+INSTALL(
+  FILES
+  ${PROJECT_SOURCE_DIR}/src/Expression/ExprBuilder.h
+  ${PROJECT_SOURCE_DIR}/src/Expression/Expr.h
+  ${PROJECT_SOURCE_DIR}/src/Expression/Value.h
+  DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/surelog/Expression
+  )
diff --git a/Makefile b/Makefile
index 2c32c9e..d223a0f 100644
--- a/Makefile
+++ b/Makefile
@@ -5,6 +5,13 @@
 	cd build; cmake ../ -DCMAKE_BUILD_TYPE=Release
 	$(MAKE) -C build
 	cd build; ../tests/regression.tcl mt=0 show_diff
+debug:
+	mkdir -p dbuild/tests;
+	mkdir -p dbuild/dist;
+	mkdir -p dist;
+	cd dbuild; cmake ../ -DCMAKE_BUILD_TYPE=Debug
+	$(MAKE) -C dbuild
+
 
 test:
 	mkdir -p build/tests;
diff --git a/src/CommandLine/CommandLineParser.h b/src/CommandLine/CommandLineParser.h
index cec2ed5..6253976 100644
--- a/src/CommandLine/CommandLineParser.h
+++ b/src/CommandLine/CommandLineParser.h
@@ -104,7 +104,7 @@
   bool elaborate() { return m_elaborate; }
   bool pythonListener() { return m_pythonListener && m_pythonAllowed; }
   bool pythonAllowed() { return m_pythonAllowed; }
-
+  void noPython() { m_pythonAllowed = false; }
   bool pythonEvalScriptPerFile() {
     return m_pythonEvalScriptPerFile && m_pythonAllowed;
   }
diff --git a/src/README.md b/src/README.md
index 5ce0a60..83d1a71 100644
--- a/src/README.md
+++ b/src/README.md
@@ -12,15 +12,16 @@
  * cd Surelog
 ```bash
 make
-```
-```bash
 make install (/usr/local/bin and /usr/local/lib/surelog by default, use DESTDIR= for alternative locations)
 ```
 
 ### Run a test
 
 * dist/Release/surelog -help
-* dist/Release/surelog -writepp -parse tests/UnitTest/top.v
+
+* dist/Release/surelog -writepp -parse ../tests/UnitElabBlock/top.v
+
+* dist/Release/hellosureworld ../tests/UnitElabBlock/top.v -parse -mutestdout
 
 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 ## Modus operanti for grammar development:
diff --git a/src/hellosureworld.cpp b/src/hellosureworld.cpp
new file mode 100644
index 0000000..62b8403
--- /dev/null
+++ b/src/hellosureworld.cpp
@@ -0,0 +1,69 @@
+/*
+ Copyright 2019 Alain Dargelas
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ */
+
+/*
+ * File:   hellosureworld.cpp
+ * Author: alain
+ *
+ * Created on November 20, 2019, 08:07 PM
+ */
+
+// Example of usage:
+// cd tests/UnitElabBlock
+// hellosureworld top.v -parse -mutestdout
+
+#include "surelog.h"
+
+int main(int argc, const char** argv) {
+  // Read command line, compile a design, use -parse argument
+  unsigned int code = 0;
+  SURELOG::SymbolTable* symbolTable = new SURELOG::SymbolTable();
+  SURELOG::ErrorContainer* errors = new SURELOG::ErrorContainer(symbolTable);
+  SURELOG::CommandLineParser* clp =
+      new SURELOG::CommandLineParser(errors, symbolTable, false, false);
+  clp->noPython();
+  bool success = clp->parseCommandLine(argc, argv);
+  errors->printMessages(clp->muteStdout());
+  SURELOG::Design* design = NULL;
+  if (success && (!clp->help())) {
+    SURELOG::Compiler* compiler =
+        new SURELOG::Compiler(clp, errors, symbolTable);
+    success = compiler->compile();
+    design = compiler->getDesign();
+    delete compiler;
+    auto stats = errors->getErrorStats();
+    code = (!success) | stats.nbFatal | stats.nbSyntax | stats.nbError;
+  }
+  delete clp;
+  delete symbolTable;
+  delete errors;
+
+  // Browse the Data Model
+  if (design) {
+    for (auto& top : design->getTopLevelModuleInstances()) {
+      std::function<void(SURELOG::ModuleInstance*)> inst_visit =
+          [&inst_visit](SURELOG::ModuleInstance* inst) {
+            std::cout << "Inst: " << inst->getFullPathName() << std::endl;
+            for (auto i = 0; i < inst->getNbChildren(); i++) {
+              inst_visit(inst->getChildren(i));
+            }
+          };
+      inst_visit(top);
+    }
+  }
+  delete design;
+  return code;
+}
diff --git a/src/surelog.h b/src/surelog.h
new file mode 100644
index 0000000..bcf78d4
--- /dev/null
+++ b/src/surelog.h
@@ -0,0 +1,85 @@
+/*
+ Copyright 2019 Alain Dargelas
+ 
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+ 
+ http://www.apache.org/licenses/LICENSE-2.0
+ 
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ */
+
+// Header file for Surelog library
+
+// Compilation control classes
+#include "CommandLine/CommandLineParser.h"
+#include "SourceCompile/SymbolTable.h"
+#include "SourceCompile/CompilationUnit.h"
+#include "SourceCompile/PreprocessFile.h"
+#include "SourceCompile/CompileSourceFile.h"
+#include "SourceCompile/Compiler.h"
+#include "ErrorReporting/ErrorContainer.h"
+#include "ErrorReporting/Report.h"
+#include "ErrorReporting/Waiver.h"
+
+// Antlr headers
+#include "antlr4-runtime.h"
+using namespace antlr4;
+
+// Python API (optional - needed to be enabled early in the main with PythonAPI::init if needed)
+#include "API/PythonAPI.h"
+
+// Full C++ DataModel API
+#include "Common/ClockingBlockHolder.h"
+#include "Design/ClockingBlock.h"
+#include "Design/Design.h"
+#include "Design/Instance.h"
+#include "Design/Signal.h"
+#include "Design/ValuedComponentI.h"
+#include "Design/DataType.h"
+#include "Design/Enum.h"
+#include "Design/ModuleDefinition.h"
+#include "Design/Statement.h"
+#include "Design/VObject.h"
+#include "Design/DefParam.h"
+#include "Design/FileCNodeId.h"
+#include "Design/ModuleInstance.h"
+#include "Design/Task.h"
+#include "Design/DesignComponent.h"
+#include "Design/FileContent.h"
+#include "Design/Parameter.h"
+#include "Design/TfPortItem.h"
+#include "Design/DesignElement.h"
+#include "Design/Function.h"
+#include "Design/Scope.h"
+#include "Design/TimeInfo.h"
+#include "Testbench/ClassDefinition.h"
+#include "Testbench/CoverGroupDefinition.h"
+#include "Testbench/Property.h"
+#include "Testbench/Variable.h"
+#include "Testbench/ClassObject.h"
+#include "Testbench/FunctionMethod.h"
+#include "Testbench/TaskMethod.h"
+#include "Testbench/Constraint.h"
+#include "Testbench/Program.h"
+#include "Testbench/TypeDef.h"
+#include "Package/Package.h"
+#include "Library/Library.h"
+#include "Library/LibrarySet.h"
+#include "Config/Config.h"
+#include "Config/ConfigSet.h"
+#include "Expression/ExprBuilder.h"
+#include "Expression/Expr.h"
+#include "Expression/Value.h"
+
+// Limited C-like API
+#include "API/SLAPI.h"
+
+
+
+
diff --git a/tests/UnitLibrary/UnitLibrary.sl b/tests/UnitLibrary/UnitLibrary.sl
index 06f921e..359e550 100644
--- a/tests/UnitLibrary/UnitLibrary.sl
+++ b/tests/UnitLibrary/UnitLibrary.sl
@@ -1 +1 @@
-  -map lib.map  -cfgfile  configs.cfg -cfg top -cfg bad -writepp -parse -verbose -d lib  -d inst  +incdir+../../../UVM/ovm-2.1.2/src/  +incdir+../../../UVM/vmm-1.1.1a/sv  -mt max -fileunit
+ -map lib.map -cfgfile configs.cfg -cfg top -cfg bad -parse -verbose -d lib  -d inst  +incdir+../../third_party/UVM/ovm-2.1.2/src/  +incdir+../../third_party/UVM/vmm-1.1.1a/sv -mt 0 -fileunit
