diff --git a/CMakeLists.txt b/CMakeLists.txt
index e53d308b4ad295a014dcf6402dbb89d4cb65599e..1d159ea960a41810a47d3efb647c8f81a64d886f 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -8,7 +8,28 @@ set (rapidmix_VERSION_MINOR 0)
 set(CMAKE_CXX_STANDARD 11)
 set(CMAKE_CXX_STANDARD_REQUIRED ON)
 
-include_directories(src)
+# Main lib
+include_directories(${PROJECT_SOURCE_DIR}/src)
 
-add_executable(rapidmix rapidmixCMake.cpp )
+# RAPID-MIX dependencies
+include_directories(dependencies/RapidLib/src)
+include_directories(dependencies/xmm/src)
+include_directories(dependencies/GVF)
+include_directories(dependencies/Maximilian)
+include_directories(dependencies/Maximilian/libs)
+include_directories(dependencies/pipo/src/include)
+include_directories(dependencies/pipo/src/host)
+
+# Third party dependencies
+include_directories(dependencies/third_party/json)
+
+file(GLOB_RECURSE RM_SOURCES "${PROJECT_SOURCE_DIR}/src/*.cpp")
+file(GLOB JSON_SRC "${PROJECT_SOURCE_DIR}/dependencies/third_party/json.cpp")
 
+#Set the source for the main library, using the groups defined above
+set(RAPIDMIX_SRC ${RM_SOURCES} ${JSON_SRC})
+
+add_library(RMIX ${RAPIDMIX_SRC})
+
+add_executable(rapidmix rapidmixCMake.cpp )
+target_link_libraries(rapidmix RMIX)
diff --git a/rapidmixCMake.cpp b/rapidmixCMake.cpp
index be3c0d7379a1bbd9c41852b0506da7a32f421632..024fdab906a79b68aa8215ada7f228149726aabc 100644
--- a/rapidmixCMake.cpp
+++ b/rapidmixCMake.cpp
@@ -1,6 +1,24 @@
+#include <cassert>
+#include <vector>
 #include "rapidmix.h"
 
 int main() {
-    
+
+  //rapidmix::staticRegression myNN;
+  rapidmix::trainingData myData;
+  
+  std::vector<double> input = { 0.2, 0.7 };
+  std::vector<double> output = { 3.0 };  
+  myData.recordSingleElement("label", input, output);
+
+  input = { 2.0, 44.2 };
+  output = { 20.14 };
+  myData.recordSingleElement("label", input, output);
+        
+  //myNN.train(myData);
+  
+  std::vector<double> inputVec = { 1.618, 18.9 };       
+  //assert(myNN.run(inputVec)[0] == 12.596715279688549);
+  
   return 0;
 }
diff --git a/src/machineLearning/machineLearning.h b/src/machineLearning/machineLearning.h
index 70a78f57e9ead5574f9bd5489fc269d2bbbdc789..2594f78b5c3fa78d7686899de0af8d364bd7a495 100644
--- a/src/machineLearning/machineLearning.h
+++ b/src/machineLearning/machineLearning.h
@@ -16,8 +16,8 @@
 #include "classification.h"
 #include "regression.h"
 #include "seriesClassification.h"
-#include "rapidXMM.h"
-#include "rapidGVF.h"
+#include "./rapidXMM/rapidXMM.h"
+#include "./rapidGVF/rapidGVF.h"
 
 namespace rapidmix {
     
diff --git a/src/machineLearning/rapidGVF/rapidGVF.cpp b/src/machineLearning/rapidGVF/rapidGVF.cpp
index 1f051fddd888e858d51b6a47f6817a23b7b4e8fb..adccd071cb0520fa5e364a31a3c3627a05a59ba5 100644
--- a/src/machineLearning/rapidGVF/rapidGVF.cpp
+++ b/src/machineLearning/rapidGVF/rapidGVF.cpp
@@ -6,7 +6,7 @@
 //
 
 #include "rapidGVF.h"
-#include "trainingData.h"
+#include "../trainingData.h"
 
 rapidGVF::rapidGVF()
 {
diff --git a/src/machineLearning/rapidXMM/rapidXMM.cpp b/src/machineLearning/rapidXMM/rapidXMM.cpp
index 799a429bf6b0673dcd8680992cd01c46bdf47d43..a65780e5788e8f7e6d409cc2eda9e1a4a758f737 100644
--- a/src/machineLearning/rapidXMM/rapidXMM.cpp
+++ b/src/machineLearning/rapidXMM/rapidXMM.cpp
@@ -1,6 +1,6 @@
 #include "rapidXMM.h"
-#include "trainingData.h"
-#include "machineLearning.h"
+#include "../trainingData.h"
+#include "../machineLearning.h"
 
 static bool trainingData2xmmTrainingSet(const rapidmix::trainingData& data, xmm::TrainingSet& set) {
   if (data.trainingSet.size() < 1) {
diff --git a/src/machineLearning/trainingData.h b/src/machineLearning/trainingData.h
index 67f4a67126a4b20e23aa653022319c51c60e3816..6645b4a6dcdbd2157b452ee08175e72389676f0d 100644
--- a/src/machineLearning/trainingData.h
+++ b/src/machineLearning/trainingData.h
@@ -48,7 +48,7 @@ namespace rapidmix {
 //                tempElement.uniqueId = assignCurrentId();  //TODO: how to do this? Do we need this?
                 tempElement.input = input;
                 tempElement.output = output;
-                tempElement.timeStamp = NULL;
+                //tempElement.timeStamp = NULL;
                 this->elements.push_back(tempElement);
             }
         };
diff --git a/src/signalProcessing/signalProcessing.h b/src/signalProcessing/signalProcessing.h
index 887664faa67e5781221ffb77bc78d1fd4a6dc4c0..ac2e02f2b6aa9485daa4c6ea19aa1d075c92796e 100644
--- a/src/signalProcessing/signalProcessing.h
+++ b/src/signalProcessing/signalProcessing.h
@@ -15,7 +15,7 @@
 #include "maximilian.h"
 #include "maxim.h"
 #include "rapidStream.h"
-#include "rapidPiPoTools.h"
+#include "./rapidPiPoTools/rapidPiPoTools.h"
 
 namespace rapidmix {