--- a/src/DAF/CDAP/CDAP.cc
+++ b/src/DAF/CDAP/CDAP.cc
@@ -19,10 +19,43 @@
 
 void CDAP::initialize()
 {
-    // TODO - Generated method body
+    initSignalsAndListeners();
 }
 
-void CDAP::handleMessage(cMessage *msg)
+void CDAP::handleMessage(cMessage* msg)
 {
-    // TODO - Generated method body
+    //Pass CDAP message to AE or RIBd
+    if (dynamic_cast<CDAPMessage*>(msg)) {
+        CDAPMessage* cmsg = check_and_cast<CDAPMessage*>(msg);
+        cmsg->setHandle(cmsg->getArrivalGate()->getIndex());
+        signalizeReceiveData(cmsg);
+    }
+    //FIXME: Vesely - Proper disposing of object
+    //delete msg;
 }
+
+void CDAP::initSignalsAndListeners() {
+    cModule* catcher = this->getParentModule()->getParentModule();
+
+    //Signals emmited by this module
+    sigCDAPReceiveData = registerSignal(SIG_CDAP_DateReceive);
+
+    //Listeners registered to process signal
+    lisCDAPSendData = new LisCDAPSendData(this);
+    catcher->subscribe(SIG_AE_DataSend, lisCDAPSendData);
+    catcher->subscribe(SIG_RIBD_DataSend, lisCDAPSendData);
+}
+
+void CDAP::sendData(CDAPMessage* cmsg) {
+    //Change and take ownership
+    Enter_Method("SendData()");
+    take(check_and_cast<cOwnedObject*>(cmsg) );
+
+    //Send message
+    cGate* out = gateHalf(GATE_SPLITIO, cGate::OUTPUT, cmsg->getHandle());
+    send(cmsg, out);
+}
+
+void CDAP::signalizeReceiveData(CDAPMessage* cmsg) {
+    emit(sigCDAPReceiveData, cmsg);
+}