diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 46ca80e469b0d0761f2892355b71dce65cac792c..3ccf7a7381c49a8d11faf5437f28eea308007ea9 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -13,7 +13,7 @@ pattern:
         - apt-get update && apt-get install -y git python
         - git clone https://github.com/google/styleguide
         - cd styleguide/cpplint
-        - ./cpplint.py --filter=-whitespace/blank_line,-build/include_what_you_use ../../src/!(jsoncpp).cpp  ../../src/linux/*.cpp ../../src/windows/*.cpp
+        - ./cpplint.py --filter=-whitespace/blank_line,-build/include_what_you_use ../../src/agent/!(jsoncpp).cpp  ../../src/agent/linux/*.cpp ../../src/agent/windows/*.cpp
 
 compile:
     stage: build
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 5fc8536c23e568232c6907da0cf30e1359dc4d15..238b82c086b4ad9d75a66ad75ce1d7ad681705e9 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -11,14 +11,14 @@ set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11" )
 
 
 # src : main + jsoncpp library
-file ( GLOB SOURCES src/*.cpp )
+file ( GLOB SOURCES src/agent/*.cpp )
 
 
 # src : collect functions - depend on OS
 if ( WIN32 )
-	file ( GLOB SOURCES ${SOURCES} src/windows/*.cpp )
+	file ( GLOB SOURCES ${SOURCES} src/agent/windows/*.cpp )
 else () 	# if( UNIX )
-	file ( GLOB SOURCES ${SOURCES} src/linux/*.cpp )
+	file ( GLOB SOURCES ${SOURCES} src/agent/linux/*.cpp )
 endif ()
 
 
@@ -66,6 +66,13 @@ if ( PRINT_JSON )
 	add_definitions ( -DPRINT_JSON )
 endif ()
 
+# test to update
+option( UPDATE_JSON "Set to ON to print json objects before sending" OFF )
+message(STATUS "${UPDATE_JSON}: ${${UPDATE_JSON}}")
+if ( UPDATE_JSON )
+    add_definitions ( -DUPDATE_JSON )
+endif ()
+
 # compile
 set ( CMAKE_RUNTIME_OUTPUT_DIRECTORY "../bin" )
 add_executable ( agent-v${VERSION_MAJOR}.${VERSION_MINOR} ${SOURCES} )
diff --git a/include/agent/linux/datasid-agent.h b/include/agent/linux/datasid-agent.h
index b2a9c552d2e131185c34997f415c1915837ebc23..33e562fc3536561dfa0b2beb72e7830ea5d98736 100644
--- a/include/agent/linux/datasid-agent.h
+++ b/include/agent/linux/datasid-agent.h
@@ -20,6 +20,7 @@
  */
 #pragma once
 #include <iostream>
+#include <json/json.h>
 
 class Agent{
     private:
@@ -43,6 +44,7 @@ class Agent{
         std::string getVersion() const;
     };
 
+
 int datasid_agent();
 std::string getAbsolutePath( std::string str, int tot);
 bool prefixIsSet(std::string prefix);
diff --git a/include/agent/linux/datasid-common.h b/include/agent/linux/datasid-common.h
index 60dd76b2bf27df538811552bb875c2fec81ea157..c435cd5f772f4b02edd828dce9bee43c57cacff2 100644
--- a/include/agent/linux/datasid-common.h
+++ b/include/agent/linux/datasid-common.h
@@ -23,6 +23,7 @@
 #include "datasid-agent.h"
 #include "datasid-conf.h"
 #include "datasid-proxy.h"
+#include <json/json.h>
 
-bool datasid_common(Conf* conf, Proxy* proxy, Agent* agent);
+bool datasid_common(Json::Value& inventory, Agent* agent, Conf* conf, Proxy* proxy);
 bool fileExist(const char * file);
diff --git a/include/agent/linux/datasid-conf.h b/include/agent/linux/datasid-conf.h
index 4864c0e723d3280f0f5040b3d6db6961a0474b95..3f267d52981b727a87291bc25e6df6a1d565b94d 100644
--- a/include/agent/linux/datasid-conf.h
+++ b/include/agent/linux/datasid-conf.h
@@ -22,6 +22,7 @@
 #include <map>
 #include "datasid-agent.h"
 #include "datasid-parse.h"
+#include "json/json.h"
 
 class Conf{
     private:
@@ -58,5 +59,5 @@ class Conf{
 
     };
 
-void datasid_conf(Agent* agent, Conf* conf);
+bool datasid_conf(Agent* agent, Conf* conf, Json::Value& update);
 bool setConf(Conf* conf, Agent* agent, std::map<std::string, std::string>* content);
diff --git a/include/agent/linux/datasid-proxy.h b/include/agent/linux/datasid-proxy.h
index ab7ca1bc09d24b04a7cbd814e5728d964fb8dfd5..973f1c57295633fb40d9bb96b78cf2ec231d75cb 100644
--- a/include/agent/linux/datasid-proxy.h
+++ b/include/agent/linux/datasid-proxy.h
@@ -23,6 +23,7 @@
 #include "datasid-agent.h"
 #include "datasid-conf.h"
 #include "datasid-parse.h"
+#include "json/json.h"
 
 class Proxy{
     private:
@@ -43,5 +44,5 @@ class Proxy{
         std::string getPassword() const;
     };
 
-void datasid_proxy(Conf* conf, Proxy* proxy);
+bool datasid_proxy(Conf* conf, Proxy* proxy, Json::Value& update);
 bool setProxy(Proxy* proxy, std::map<std::string, std::string>* content);
diff --git a/include/agent/main.h b/include/agent/main.h
index 45dd1eb1ddb64275a30917d602805453106ca2f4..440a57c21790e0520f607f3362dd6bab5f19b18c 100644
--- a/include/agent/main.h
+++ b/include/agent/main.h
@@ -1,5 +1,4 @@
-#ifndef __main__
-#define __main__
+#pragma once
 #include <cstring>
 #include <fstream>
 #include <iostream>
@@ -9,5 +8,3 @@
 #include "linux/datasid-conf.h"
 
 bool fileExist(const std::string& file);
-int main();
-#endif
diff --git a/src/jsoncpp.cpp b/src/agent/jsoncpp.cpp
similarity index 100%
rename from src/jsoncpp.cpp
rename to src/agent/jsoncpp.cpp
diff --git a/src/linux/datasid-agent.cpp b/src/agent/linux/datasid-agent.cpp
similarity index 78%
rename from src/linux/datasid-agent.cpp
rename to src/agent/linux/datasid-agent.cpp
index 3d71b94e46648b64ba3377598ed24b433b5ff951..8a46b58a0a93eb06a8cef7613866fd0d1fcd18ba 100644
--- a/src/linux/datasid-agent.cpp
+++ b/src/agent/linux/datasid-agent.cpp
@@ -19,7 +19,7 @@
  * USA.
  */
 #include <string>
-#include "../../include/agent/main.h"
+#include "agent/main.h"
 
 /*
  * set Functions
@@ -94,20 +94,35 @@ bool prefixIsSet(std::string prefix) {
     return true;
 }
 
+// NOLINTNEXTLINE(runtime/references)
 int datasid_agent() {
     Agent agent;
     Conf conf;
     Proxy proxy;
 
+    Json::Value update;
+
     /* Set agent prefix */
-    agent.setPrefix(__FILE__, 3);
+    agent.setPrefix(__FILE__, 4);
 
     /* Set confif file */
     agent.setDefaultConf("/conf/datasid-conf.json");
 
     /* Run datasid-common.cpp */
-    if (!datasid_common(&conf, &proxy, &agent))
-        exit(1);
+    if (datasid_common(update, &agent, &conf, &proxy)) {
+        std::fstream logFile(agent.getLogFile().c_str(), std::fstream::app);
+        logFile << __DATE__ << " - Agent started." << std::endl;
+        logFile << __DATE__ << " - Start of update process execution."
+                    << std::endl;
+    }
+
+    #ifdef UPDATE_JSON
+            Json::StyledWriter styledWriter;
+            if (!update.isNull())
+                std::cout << styledWriter.write(update) <<  std::endl;
+            else
+                std::cout << "Empty updat object" << std::endl;
+        #endif
 
     return 1;
 }
diff --git a/src/linux/datasid-common.cpp b/src/agent/linux/datasid-common.cpp
similarity index 65%
rename from src/linux/datasid-common.cpp
rename to src/agent/linux/datasid-common.cpp
index 0fcf5857e763e340306da22cd9a593e9b7ca3ef2..2f91cae6c2ca1a1acfbff3de908e69a601747bb9 100644
--- a/src/linux/datasid-common.cpp
+++ b/src/agent/linux/datasid-common.cpp
@@ -19,7 +19,7 @@
  * USA.
  */
 #include <string>
-#include "../../include/agent/linux/datasid-common.h"
+#include "agent/linux/datasid-common.h"
 
 /*
  * fileExist Function
@@ -36,30 +36,43 @@ bool fileExist(const std::string& file) {
     return false;
 }
 
-
-bool datasid_common(Conf* conf, Proxy* proxy, Agent* agent) {
+// NOLINTNEXTLINE(runtime/references)
+bool datasid_common(Json::Value& inventory, Agent* agent, Conf* conf,
+                    Proxy* proxy) {
     try {
         prefixIsSet(agent->getPrefix());
     } catch (const char* msg) {
-        std::cout << __DATE__ << msg << std::endl;
+        std::string var = __DATE__ + *msg;
+        inventory["data"]["prefix_not_set"] =  var;
         return false;
     }
 
     /* Read config file and declare only valid variables */
 
     if (!fileExist(agent->getDefaultConf())) {
-        std::cout << __DATE__ << "ERROR: Config file not found." << std::endl;
+        std::string var = __DATE__ +
+            std::string(" - ERROR: Conf file not found.");
+
+        inventory["data"]["conf_file_not_found"] =  var;
         return false;
     } else {
-       datasid_conf(agent, conf);
+       if (!datasid_conf(agent, conf, inventory)) {
+            return false;
+        }
     }
 
     /* Read proxy file and declare only valid variables */
 
-    if (!fileExist(conf->getProxyConf()))
-        std::cout << __DATE__ << "WARNING: Proxy file not found. " << std::endl;
-    else
-        datasid_proxy(conf, proxy);
+    if (!fileExist(conf->getProxyConf())) {
+        std::string var = __DATE__ +
+            std::string(" - WARNING: Proxy file not found.");
+
+        inventory["data"]["proxy_file_not_found"] =  var;
+    } else {
+        if (!datasid_proxy(conf, proxy, inventory)) {
+            return false;
+        }
+    }
 
     return true;
 }
diff --git a/src/linux/datasid-conf.cpp b/src/agent/linux/datasid-conf.cpp
similarity index 91%
rename from src/linux/datasid-conf.cpp
rename to src/agent/linux/datasid-conf.cpp
index ab33ecfaf52c1d47be4353b899a060aed1cac690..54cf4a310f3a45d038a609a1db3d877f1b5a40ce 100644
--- a/src/linux/datasid-conf.cpp
+++ b/src/agent/linux/datasid-conf.cpp
@@ -25,7 +25,7 @@
 #include <map>
 #include <sstream>
 #include <string>
-#include "../../include/agent/linux/datasid-conf.h"
+#include "agent/linux/datasid-conf.h"
 /*
  * set Functions
  */
@@ -144,17 +144,19 @@ bool setConf(Conf* conf, Agent* agent, std::map<std::string,
     return true;
 }
 
-void datasid_conf(Agent* agent, Conf* conf) {
+// NOLINTNEXTLINE(runtime/references)
+bool datasid_conf(Agent* agent, Conf* conf, Json::Value& update) {
     std::map<std::string, std::string> content;
 
     if (readFile(agent->getDefaultConf(), &content)) {
         if (!setConf(conf, agent, &content)) {
-            std::cout << __DATE__ << " ERROR: to parse variables " <<
-            "from config file." << std::endl;
-            exit(1);
+            std::string var = __DATE__ +
+                std::string(" - ERROR: to parse variables from config file.");
+
+            update["data"]["conf_file_not_found"] =  var;
+            return false;
         }
-    } else {
-        std::cout << __DATE__ << " ERROR: config file not found." << std::endl;
-        exit(1);
     }
+
+    return true;
 }
diff --git a/src/linux/datasid-parse.cpp b/src/agent/linux/datasid-parse.cpp
similarity index 98%
rename from src/linux/datasid-parse.cpp
rename to src/agent/linux/datasid-parse.cpp
index 2bec17c626ab53c45f2320cc3b681592af098b99..a9dcf339507495b8b9987efee643c69571758dbc 100644
--- a/src/linux/datasid-parse.cpp
+++ b/src/agent/linux/datasid-parse.cpp
@@ -21,7 +21,7 @@
 #include <re2/re2.h>
 #include <map>
 #include <string>
-#include "../../include/agent/linux/datasid-parse.h"
+#include "agent/linux/datasid-parse.h"
 
 /* 
  * trim Function
diff --git a/src/linux/datasid-proxy.cpp b/src/agent/linux/datasid-proxy.cpp
similarity index 86%
rename from src/linux/datasid-proxy.cpp
rename to src/agent/linux/datasid-proxy.cpp
index 32ac8a7016a713128fdc3b68768539574aba9cae..3a31f9e0e948f31a2b0c75f34a8f0547d061e9cf 100644
--- a/src/linux/datasid-proxy.cpp
+++ b/src/agent/linux/datasid-proxy.cpp
@@ -21,7 +21,7 @@
 #include <iostream>
 #include <map>
 #include <string>
-#include "../../include/agent/linux/datasid-proxy.h"
+#include "agent/linux/datasid-proxy.h"
 
 /*
  * set Functions
@@ -84,16 +84,19 @@ bool setProxy(Proxy* proxy, std::map<std::string, std::string>* content) {
     return true;
 }
 
-void datasid_proxy(Conf* conf, Proxy* proxy) {
+// NOLINTNEXTLINE(runtime/references)
+bool datasid_proxy(Conf* conf, Proxy* proxy, Json::Value& update) {
     std::map<std::string, std::string> content;
 
     if (readFile(conf->getProxyConf(), &content)) {
         if (!setProxy(proxy, &content)) {
-            std::cout << __DATE__ << " ERROR: to parse variables" <<
-            " from proxy file." << std::endl;
-            exit(1);
+            std::string var = __DATE__ +
+                std::string(" - ERROR: to parse variables from proxy file.");
+
+            update["data"]["proxy_file_not_found"] =  var;
+            return false;
         }
-    } else {
-        std::cout << __DATE__ << " WARNING: proxy file not found." << std::endl;
     }
+
+    return true;
 }
diff --git a/src/linux/get_date.cpp b/src/agent/linux/get_date.cpp
similarity index 100%
rename from src/linux/get_date.cpp
rename to src/agent/linux/get_date.cpp
diff --git a/src/linux/get_disks_info.cpp b/src/agent/linux/get_disks_info.cpp
similarity index 100%
rename from src/linux/get_disks_info.cpp
rename to src/agent/linux/get_disks_info.cpp
diff --git a/src/linux/get_distro.cpp b/src/agent/linux/get_distro.cpp
similarity index 100%
rename from src/linux/get_distro.cpp
rename to src/agent/linux/get_distro.cpp
diff --git a/src/linux/get_macaddr.cpp b/src/agent/linux/get_macaddr.cpp
similarity index 100%
rename from src/linux/get_macaddr.cpp
rename to src/agent/linux/get_macaddr.cpp
diff --git a/src/linux/get_machine_type.cpp b/src/agent/linux/get_machine_type.cpp
similarity index 100%
rename from src/linux/get_machine_type.cpp
rename to src/agent/linux/get_machine_type.cpp
diff --git a/src/linux/get_memory_size.cpp b/src/agent/linux/get_memory_size.cpp
similarity index 100%
rename from src/linux/get_memory_size.cpp
rename to src/agent/linux/get_memory_size.cpp
diff --git a/src/linux/get_processor_model.cpp b/src/agent/linux/get_processor_model.cpp
similarity index 100%
rename from src/linux/get_processor_model.cpp
rename to src/agent/linux/get_processor_model.cpp
diff --git a/src/linux/get_time.cpp b/src/agent/linux/get_time.cpp
similarity index 100%
rename from src/linux/get_time.cpp
rename to src/agent/linux/get_time.cpp
diff --git a/src/linux/get_user_count.cpp b/src/agent/linux/get_user_count.cpp
similarity index 100%
rename from src/linux/get_user_count.cpp
rename to src/agent/linux/get_user_count.cpp
diff --git a/src/linux/inventory.cpp b/src/agent/linux/inventory.cpp
similarity index 100%
rename from src/linux/inventory.cpp
rename to src/agent/linux/inventory.cpp
diff --git a/src/linux/open_file.cpp b/src/agent/linux/open_file.cpp
similarity index 100%
rename from src/linux/open_file.cpp
rename to src/agent/linux/open_file.cpp
diff --git a/src/main.cpp b/src/agent/main.cpp
similarity index 99%
rename from src/main.cpp
rename to src/agent/main.cpp
index 51f0d7afd500b9c7bc8786e041a33fe7cc40a766..79979433cb920654004fc213b5134e10e97e4b6a 100644
--- a/src/main.cpp
+++ b/src/agent/main.cpp
@@ -27,12 +27,10 @@
 #include "agent/main.h"
 
 int main() {
-
+    datasid_agent();
     send_inventory();
     send_net_bandwidth();
     send_user_history();
 
-    datasid_agent();
-
     return 0;
 }
diff --git a/src/network_bandwidth.cpp b/src/agent/network_bandwidth.cpp
similarity index 100%
rename from src/network_bandwidth.cpp
rename to src/agent/network_bandwidth.cpp
diff --git a/src/post.cpp b/src/agent/post.cpp
similarity index 100%
rename from src/post.cpp
rename to src/agent/post.cpp
diff --git a/src/user_history.cpp b/src/agent/user_history.cpp
similarity index 100%
rename from src/user_history.cpp
rename to src/agent/user_history.cpp
diff --git a/src/windows/get_date.cpp b/src/agent/windows/get_date.cpp
similarity index 100%
rename from src/windows/get_date.cpp
rename to src/agent/windows/get_date.cpp
diff --git a/src/windows/get_macaddr.cpp b/src/agent/windows/get_macaddr.cpp
similarity index 100%
rename from src/windows/get_macaddr.cpp
rename to src/agent/windows/get_macaddr.cpp
diff --git a/src/windows/get_machine_type.cpp b/src/agent/windows/get_machine_type.cpp
similarity index 100%
rename from src/windows/get_machine_type.cpp
rename to src/agent/windows/get_machine_type.cpp
diff --git a/src/windows/get_time.cpp b/src/agent/windows/get_time.cpp
similarity index 100%
rename from src/windows/get_time.cpp
rename to src/agent/windows/get_time.cpp
diff --git a/src/windows/inventory.cpp b/src/agent/windows/inventory.cpp
similarity index 100%
rename from src/windows/inventory.cpp
rename to src/agent/windows/inventory.cpp
diff --git a/test/returnTest.bats b/test/returnTest.bats
index d20ca170dd17f8cbf5857482eab1bf193a47f709..30ef0a24ed4958d5f35cfbef4b8eac9a786a5c1a 100755
--- a/test/returnTest.bats
+++ b/test/returnTest.bats
@@ -50,7 +50,7 @@ setup() {
 }
 
 teardown() {
-    rm -f export.json
+     rm -f export.json
 }
 
 @test "Amount Users" {