diff --git a/src/class_server/src/class_server_main.cpp b/src/class_server/src/class_server_main.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..40d05f58547367abe33d7732f5444ca716b99bb7
--- /dev/null
+++ b/src/class_server/src/class_server_main.cpp
@@ -0,0 +1,71 @@
+/**
+ * @file   class_server_main.cpp
+ * @author Alfonso Dominguez <alfonso.dominguez@tecnalia.com>
+ * @date   2020
+ *
+ * Copyright 2020 Tecnalia Research & Innovation.
+ * Distributed under the GNU GPL v3.
+ * For full terms see https://www.gnu.org/licenses/gpl.txt
+ *
+ * @brief CLASS server main program
+ */
+
+#include <class_server/class_server.hpp>
+#include <thread>
+#include <memory>
+
+ClassServer server;
+  
+void handler( const boost::system::error_code& error , int signal_number )
+{
+  std::cout << "[CLASS server] Handling signal " << signal_number << std::endl;
+  server.stop();
+
+  exit(1);
+}
+
+int main (int argc, char *argv[])
+{
+  if (argc != 3)
+  {
+    std::cerr << "[CLASS server] ERROR: Executable expects 2 arguments (BT port to connect to CLASS device and UDP port where this server will listen for client msgs)"<< std::endl;
+    std::cerr << "[CLASS server] Usage example:"<< std::endl;
+    #ifdef _WINDOWS
+    std::cerr << "[CLASS server]    class_server.exe COM14 50000" << std::endl;
+    #else
+    std::cerr << "[CLASS server]    ./class_server COM14 50000" << std::endl;
+    #endif
+
+    return 1;
+  }
+  
+  std::string bt_port = argv[1];
+  std::cout << "[CLASS server] Connect to BT port: " << bt_port << std::endl;
+  std::string udp_port_str = argv[2];
+  int udp_port = 0;
+  try
+  {
+    udp_port = std::stoi(udp_port_str);
+  }
+  catch(const std::exception& e)
+  {
+    std::cerr << "2nd parameter is not an integer (" << udp_port_str << "). Exc:" << e.what() << std::endl;
+    return 1;
+  }
+  std::cout << "[CLASS server] Listen in UDP port: " << udp_port << std::endl;
+
+
+  boost::asio::io_service *io_service = new boost::asio::io_service();
+  boost::asio::signal_set signals(*io_service, SIGINT );
+
+  // Start an asynchronous wait for one of the signals to occur.
+  signals.async_wait( handler );
+
+  if(server.start(bt_port, udp_port, io_service) == 0)
+  {
+    std::cout << "[CLASS server] Waiting for connections. Ctrl+C for stop" << std::endl;
+    io_service->run();
+  }
+  
+  std::cout << "[CLASS server] Bye" << std::endl;
+}
\ No newline at end of file