diff --git a/modules/build.sh b/modules/build.sh
old mode 100644
new mode 100755
diff --git a/modules/catkin_ws/src/CMakeLists.txt b/modules/catkin_ws/src/CMakeLists.txt
index 581e61db89fce59006b1ceb2d208d9f3e5fbcb5e..3421623bd042f7eb4d2675c8c9ca624feb01cd4f 120000
--- a/modules/catkin_ws/src/CMakeLists.txt
+++ b/modules/catkin_ws/src/CMakeLists.txt
@@ -1 +1 @@
-/opt/ros/kinetic/share/catkin/cmake/toplevel.cmake
\ No newline at end of file
+/opt/ros/lunar/share/catkin/cmake/toplevel.cmake
\ No newline at end of file
diff --git a/modules/catkin_ws/src/car/CMakeLists.txt b/modules/catkin_ws/src/car/CMakeLists.txt
index a0072a0cd10346c8dff2e15c1ebe24cdc231988d..2847e81ed880604caa05c7d67940e4089d6a06a6 100644
--- a/modules/catkin_ws/src/car/CMakeLists.txt
+++ b/modules/catkin_ws/src/car/CMakeLists.txt
@@ -1,13 +1,15 @@
 cmake_minimum_required(VERSION 3.5.1)
 project(car)
-add_compile_options(-std=c++14)
 
-# Include Boost
-find_package(Boost REQUIRED COMPONENTS system regex)
+set(CMAKE_CXX_STANDARD 14)
+# add_compile_options(-std=c++14 -fPIC)
 
 # for dealing with threads
 set(CMAKE_CXX_FLAGS -pthread)
 
+# Include Boost
+find_package(Boost REQUIRED COMPONENTS system regex)
+
 find_package(catkin REQUIRED COMPONENTS
   roscpp
   rospy
@@ -15,7 +17,6 @@ find_package(catkin REQUIRED COMPONENTS
   nodelet
   message_generation
 )
-find_package(Boost REQUIRED COMPONENTS system)
 
 add_message_files(
   FILES
@@ -40,6 +41,8 @@ catkin_package(
   LIBRARIES environment
   LIBRARIES ultrasonic
   LIBRARIES camera
+  LIBRARIES lanekeeping
+  LIBRARIES mav_link
   CATKIN_DEPENDS roscpp std_msgs nodelet rospy #message_runtime
 )
 
@@ -66,6 +69,7 @@ add_library(main_node ${MAIN_NODE_SOURCE_FILES})
 add_dependencies(main_node ${catkin_EXPORTED_TARGETS} ${PROJECT_NAME}_generate_messages_cpp)
 target_link_libraries(main_node
         ${catkin_LIBRARIES}
+        ${Boost_LIBRARIES}
         NetworkingLib
         PlatoonProtocolLib
         PC2CarLib)
@@ -82,13 +86,6 @@ add_library(ultrasonic src/ultrasonic/ultrasonic.cpp)
 add_dependencies(ultrasonic ${catkin_EXPORTED_TARGETS} ${PROJECT_NAME}_generate_messages_cpp)
 target_link_libraries(ultrasonic ${catkin_LIBRARIES})
 
-# NotifiableThread Test
-set(NOTIFIABLE_THREAD_TEST_SOURCE_FILES
-        include/mainNode/NotifiableThread.h
-        src/mainNode/NotifiableThread.cpp
-        test/mainNode/NotifiableThreadTest.cpp)
-add_executable(NotifiableThreadTest ${NOTIFIABLE_THREAD_TEST_SOURCE_FILES})
-
 add_library(camera src/camera/camera.cpp)
 add_dependencies(camera ${catkin_EXPORTED_TARGETS} ${PROJECT_NAME}_generate_messages_cpp)
 target_link_libraries(camera ${catkin_LIBRARIES})
@@ -97,12 +94,25 @@ add_library(lanekeeping src/lanekeeping/lanekeeping.cpp)
 add_dependencies(lanekeeping ${catkin_EXPORTED_TARGETS} ${PROJECT_NAME}_generate_messages_cpp)
 target_link_libraries(lanekeeping ${catkin_LIBRARIES})
 
+add_library(mav_link src/mavLink/mavLink.cpp)
+add_dependencies(mav_link ${catkin_EXPORTED_TARGETS} ${PROJECT_NAME}_generate_messages_cpp)
+target_link_libraries(mav_link ${catkin_LIBRARIES})
+
+# NotifiableThread Test
+set(NOTIFIABLE_THREAD_TEST_SOURCE_FILES
+        include/mainNode/NotifiableThread.h
+        src/mainNode/NotifiableThread.cpp
+        test/mainNode/NotifiableThreadTest.cpp)
+add_executable(NotifiableThreadTest ${NOTIFIABLE_THREAD_TEST_SOURCE_FILES})
+
 install(
   TARGETS
     main_node
     environment
     ultrasonic
     camera
+    lanekeeping
+    mav_link
   ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
   LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
   RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
diff --git a/modules/catkin_ws/src/car/include/mainNode/PlatoonController.h b/modules/catkin_ws/src/car/include/mainNode/PlatoonController.h
index 09916fe02e61aa5e012f53ed30f446df1129406d..f14238758d086b12f93f5febeb3f0285e83dda73 100644
--- a/modules/catkin_ws/src/car/include/mainNode/PlatoonController.h
+++ b/modules/catkin_ws/src/car/include/mainNode/PlatoonController.h
@@ -5,15 +5,22 @@
 #ifndef CAR_PLATOONCONTROLLER_H
 #define CAR_PLATOONCONTROLLER_H
 
+#include <functional>
+
 namespace car
 {
 
 class PlatoonController
 {
 public:
+    using Callback = std::function<void()>;
+    
+    PlatoonController();
+      
     void run();
 
 private:
+    Callback ccNotify;
 };
 
 }
diff --git a/modules/catkin_ws/src/car/include/mainNode/mainNode.h b/modules/catkin_ws/src/car/include/mainNode/mainNode.h
index 6728e817613266926800060fc86078a36f68880c..8b5285d68418a00db8e916f7eb2073bce315440e 100644
--- a/modules/catkin_ws/src/car/include/mainNode/mainNode.h
+++ b/modules/catkin_ws/src/car/include/mainNode/mainNode.h
@@ -8,6 +8,8 @@
 #include "NotifiableThread.h"
 #include "NetworkingLib/Networking.h"
 #include "PlatoonController.h"
+#include "PlatoonProtocolLib/Vehicle.h"
+#include "PC2CarLib/CommandReceiver.h"
 
 namespace car
 {
@@ -23,27 +25,25 @@ public:
     ~MainNode();
 
 private:
-    std::function<void()> platoonControllerNotify =
-        [this]
-        { platoonControllerThread.notify(); };
-
-    NotifiableThread::Callback platoonControllerRun =
-        [this]
-        { platoonController.run(); };
-
+    PlatoonController platoonController;
+    NotifiableThread platoonControllerThread;
+     
+     std::function<void()> platoonControllerNotify =
+         [this] { platoonControllerThread.notify(); };
+
+    // dont touch!
+    // networking::Networking c2cNet;
+    //  networking::Networking pcNet;
+    //  
+    //  platoonProtocol::Vehicle::Ptr c2c;
+    //  pc2car::CommandReceiver::Ptr commandReceiver;
+    //  
     ros::NodeHandle nh;
     std::string name;
-    boost::thread loggerModule;
+    
     ros::Publisher logEnabled;
+    
     ros::Subscriber environmentData;
-
-    networking::Networking net;
-
-    //Networking platoonProtocolThread;
-    NotifiableThread platoonControllerThread;
-
-    PlatoonController platoonController;
-
     void environmentDataCallback(const environmentDataMsg::ConstPtr & inMsg);
 };
 }
diff --git a/modules/catkin_ws/src/car/include/mavLink/mavLink.h b/modules/catkin_ws/src/car/include/mavLink/mavLink.h
new file mode 100644
index 0000000000000000000000000000000000000000..836a23f018f79f5d311af37eb5aeb6da15099f57
--- /dev/null
+++ b/modules/catkin_ws/src/car/include/mavLink/mavLink.h
@@ -0,0 +1,35 @@
+#ifndef ENVIRONMENT_H
+#define ENVIRONMENT_H
+
+#include <nodelet/nodelet.h>
+#include <ros/ros.h>
+
+#include "car/ccDataMsg.h"
+#include "car/laneDataMsg.h"
+#include "car/rcEnabledMsg.h"
+
+namespace car
+{
+	class MavLink : public nodelet::Nodelet
+	{
+		public:
+			virtual void onInit();
+			MavLink(ros::NodeHandle &nh, std::string &name);
+			MavLink();
+			~MavLink();
+		private:
+			ros::NodeHandle nh_;
+			std::string name_;
+      
+			ros::Publisher stmData;
+      ros::Subscriber ccData;
+      ros::Subscriber laneData;
+      ros::Subscriber rcEnabled;
+
+      
+      void ccDataCallback(const ccDataMsg::ConstPtr& inMsg);
+      void laneDataCallback(const laneDataMsg::ConstPtr& inMsg);
+      void rcEnabledCallback(const rcEnabledMsg::ConstPtr& inMsg);
+	};
+}
+#endif
diff --git a/modules/catkin_ws/src/car/launch/fullstart.launch b/modules/catkin_ws/src/car/launch/fullstart.launch
index 5c39d9d8d3041864d4de71eaaa57595cdc979557..26f97c0b45bded7061cf299f0ab88ba61fdd26e0 100644
--- a/modules/catkin_ws/src/car/launch/fullstart.launch
+++ b/modules/catkin_ws/src/car/launch/fullstart.launch
@@ -8,6 +8,7 @@
   <node pkg="nodelet" type="nodelet" name="nodelet_ultrasonic" args="load car/ultrasonic Master"/>
   <node pkg="nodelet" type="nodelet" name="nodelet_camera" args="load car/camera Master"/>
   <node pkg="nodelet" type="nodelet" name="nodelet_lanekeeping" args="load car/lanekeeping Master"/>
+  <node pkg="nodelet" type="nodelet" name="nodelet_mav_link" args="load car/mav_link Master"/>
 </launch>
 
 <!--
diff --git a/modules/catkin_ws/src/car/plugins/nodelet_plugins.xml b/modules/catkin_ws/src/car/plugins/nodelet_plugins.xml
index 6726b019505016846a9f355cb3aeb9c384e75928..f41107561d1b1d855f4d742002355f022225c274 100644
--- a/modules/catkin_ws/src/car/plugins/nodelet_plugins.xml
+++ b/modules/catkin_ws/src/car/plugins/nodelet_plugins.xml
@@ -53,3 +53,13 @@
   </description>
   </class>
 </library>
+
+<library path="lib/libmav_link">
+  <class name="car/mav_link"
+	 type="car::MavLink"
+	 base_class_type="nodelet::Nodelet">
+  <description>
+    Missing
+  </description>
+  </class>
+</library>
diff --git a/modules/catkin_ws/src/car/src/mainNode/PlatoonController.cpp b/modules/catkin_ws/src/car/src/mainNode/PlatoonController.cpp
index fcb44c3c1f21b9fbd465cd09872e4ed9dbe02b5e..fd1aff2bf90581994202b196d226b904e09331a0 100644
--- a/modules/catkin_ws/src/car/src/mainNode/PlatoonController.cpp
+++ b/modules/catkin_ws/src/car/src/mainNode/PlatoonController.cpp
@@ -3,13 +3,20 @@
 //
 
 #include "../../include/mainNode/PlatoonController.h"
+#include <iostream>
 
 namespace car
 {
 
+PlatoonController::PlatoonController()
+    : ccNotify()
+{}
+
+
 void car::PlatoonController::run()
 {
     // TODO: implementation
+    std::cout << "PlatoonController was run." << std::endl;
 }
 
 }
diff --git a/modules/catkin_ws/src/car/src/mainNode/mainNode.cpp b/modules/catkin_ws/src/car/src/mainNode/mainNode.cpp
index 8bef4824b600daf1b26c7c1f8674147a93591b83..9be2fc067163150aedfa78b70c19971925ea9f37 100644
--- a/modules/catkin_ws/src/car/src/mainNode/mainNode.cpp
+++ b/modules/catkin_ws/src/car/src/mainNode/mainNode.cpp
@@ -16,15 +16,29 @@ PLUGINLIB_EXPORT_CLASS(car::MainNode, nodelet::Nodelet);
 
 namespace car
 {
-MainNode::MainNode(ros::NodeHandle & nh, std::string & name)
-    : nh(nh)
-      , name(name)
-      , platoonControllerThread(platoonControllerRun)
-{}
+MainNode::MainNode(ros::NodeHandle & nh, std::string & name) :
+    platoonController()
+    , platoonControllerThread([this] { platoonController.run(); })
+ // , c2cNet()
+ // , pcNet()
+ // , c2c()
+ // , commandReceiver(pc2car::CommandReceiver::create(pcNet))
+    , nh(nh)  
+    , name(name)
+{
+  std::cout << "Called MainNode(ros::NodeHandle & nh, std::string & name)." << std::endl;
+}
 
-MainNode::MainNode()
-    : platoonControllerThread(platoonControllerRun)
-{}
+MainNode::MainNode() : 
+    platoonController()
+    , platoonControllerThread([this] { platoonController.run(); })
+ // , c2cNet()
+ // , pcNet()
+ // , c2c()
+ // , commandReceiver(pc2car::CommandReceiver::create(pcNet))
+{
+  std::cout << "Called MainNode()." << std::endl;
+}
 
 MainNode::~MainNode()
 {}
@@ -34,7 +48,6 @@ void MainNode::onInit()
     NODELET_INFO("MainNode::onInit -- START");
     logEnabled = nh.advertise<logEnabledMsg>("logEnabled", 5);
     environmentData = nh.subscribe("environmentData", 1, &MainNode::environmentDataCallback, this);
-    std::cout << "MainNode &nh: " << &nh << "\n";
 
     // CODE GOES HERE
 
diff --git a/modules/catkin_ws/src/car/src/mavLink/mavLink.cpp b/modules/catkin_ws/src/car/src/mavLink/mavLink.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..94246aac076976252847b42e35c675452ea35a84
--- /dev/null
+++ b/modules/catkin_ws/src/car/src/mavLink/mavLink.cpp
@@ -0,0 +1,50 @@
+#include <pluginlib/class_list_macros.h>
+#include <ros/ros.h>
+
+#include "mavLink/mavLink.h"
+
+#include "car/stmDataMsg.h"
+#include "car/ccDataMsg.h"
+#include "car/laneDataMsg.h"
+#include "car/rcEnabledMsg.h"
+
+PLUGINLIB_EXPORT_CLASS(car::MavLink, nodelet::Nodelet);
+
+namespace car
+{
+	MavLink::MavLink(ros::NodeHandle &nh, std::string &name) :
+    nh_(nh), 
+    name_(name)
+    {}
+  
+	MavLink::MavLink() {}
+  
+	MavLink::~MavLink() {}
+  
+	void MavLink::onInit()
+	{
+		NODELET_INFO("MavLink::onInit -- START");
+	  stmData = nh_.advertise<stmDataMsg>("stmData", 1);
+	  ccData = nh_.subscribe("ccData", 1, &MavLink::ccDataCallback, this);
+	  laneData = nh_.subscribe("laneData", 1, &MavLink::laneDataCallback, this);
+	  rcEnabled = nh_.subscribe("rcEnabled", 1, &MavLink::rcEnabledCallback, this);
+		NODELET_INFO("MavLink::onInit -- END");
+	}
+
+  void MavLink::ccDataCallback(const ccDataMsg::ConstPtr& inMsg)
+  {
+    std::cout << "MavLink recived new cc data (" << inMsg->speed << ").\n";
+  }
+
+  void MavLink::laneDataCallback(const laneDataMsg::ConstPtr& inMsg)
+  {
+    std::cout << "MavLink recived new lane data ( ).\n";
+  }
+  
+  void MavLink::rcEnabledCallback(const rcEnabledMsg::ConstPtr& inMsg)
+  {
+    std::cout << "MavLink recived new rc status (" << inMsg->enabled << ").\n";
+  }
+  
+  
+}