diff --git a/src/pathcomp/backend/pathComp_RESTapi.c b/src/pathcomp/backend/pathComp_RESTapi.c
index 71fe50ef50824dd31d447290fe2497d471788076..709d3dc004027e7eb4e847f73ae1bae25653316e 100644
--- a/src/pathcomp/backend/pathComp_RESTapi.c
+++ b/src/pathcomp/backend/pathComp_RESTapi.c
@@ -908,7 +908,8 @@ void parse_json_device_endpoints_array(cJSON* endPointsArray, struct device_t* d
  */
  /////////////////////////////////////////////////////////////////////////////////////////
 void parsing_json_deviceList_array(cJSON* deviceArray) {
-
+	DEBUG_PC("");
+	DEBUG_PC("========= PARSING DEVICE LIST ============");
 	for (gint i = 0; i < cJSON_GetArraySize(deviceArray); i++) {
 		deviceList->numDevices++;
 		struct device_t* d = &(deviceList->devices[i]);
@@ -918,7 +919,7 @@ void parsing_json_deviceList_array(cJSON* deviceArray) {
 		cJSON* deviceUuidObj = cJSON_GetObjectItem(item, "device_Id");
 		if (cJSON_IsString(deviceUuidObj)) {
 			duplicate_string(d->deviceId, deviceUuidObj->valuestring);
-			//DEBUG_PC("Device (%d) -- Id: %s (uuid string format)", i + 1, d->deviceId);
+			DEBUG_PC("Device (%d) -- Id: %s (uuid string format)", i + 1, d->deviceId);
 		}
 
 		// Get the device Type
@@ -927,12 +928,11 @@ void parsing_json_deviceList_array(cJSON* deviceArray) {
 			duplicate_string(d->deviceType, deviceTypeObj->valuestring);
 			//DEBUG_PC("  Device Type: %s ---", d->deviceType);
 		}
-		//DEBUG_PC("DeviceId: %s, Device Type: %s", d->deviceId, d->deviceType);
+		DEBUG_PC("DeviceId: %s, Device Type: %s", d->deviceId, d->deviceType);
 
 		// get the device endPoints
 		cJSON* deviceEndpointsArray = cJSON_GetObjectItem(item, "device_endpoints");
-		if (cJSON_IsArray(deviceEndpointsArray))
-		{
+		if (cJSON_IsArray(deviceEndpointsArray)) {
 			parse_json_device_endpoints_array(deviceEndpointsArray, d);
 		}
 	}
@@ -954,6 +954,7 @@ void parsing_json_deviceList_array(cJSON* deviceArray) {
 void parse_json_link_endpoints_array(cJSON *endPointsLinkObj, struct link_t* l) {
 
 	for (gint i = 0; i < cJSON_GetArraySize(endPointsLinkObj); i++) {
+		//DEBUG_PC("link: %s has %d endPointIds", l->linkId, l->numLinkEndPointIds);
 		l->numLinkEndPointIds++;
 		struct link_endpointId_t* endPointLink = &(l->linkEndPointId[i]);
 
@@ -982,7 +983,7 @@ void parse_json_link_endpoints_array(cJSON *endPointsLinkObj, struct link_t* l)
 			cJSON* deviceIdObj = cJSON_GetObjectItem(endPointIdObj, "device_id");
 			if (cJSON_IsString(deviceIdObj)) {
 				duplicate_string(endPointLink->deviceId, deviceIdObj->valuestring);
-				//DEBUG_PC("Link Endpoint (%d) -- Device Id: %s (uuid)", i + 1, endPointLink->deviceId);
+				DEBUG_PC("   Link Endpoint[%d] -- DeviceId: %s", i + 1, endPointLink->deviceId);
 			}
 			// Get the endpoint_uuid
 			cJSON* endPointUuidObj = cJSON_GetObjectItem(endPointIdObj, "endpoint_uuid");
@@ -992,6 +993,7 @@ void parse_json_link_endpoints_array(cJSON *endPointsLinkObj, struct link_t* l)
 			}
 		}
 	}
+	//DEBUG_PC("link id: %s has %d endpoints", l->linkId, l->numLinkEndPointIds);
 	return;
 }
 
@@ -1008,21 +1010,24 @@ void parse_json_link_endpoints_array(cJSON *endPointsLinkObj, struct link_t* l)
  /////////////////////////////////////////////////////////////////////////////////////////
 void parsing_json_linkList_array(cJSON* linkListArray) {
 
+	DEBUG_PC("");
+	DEBUG_PC("======= PARSING OF THE LINK LIST ARRAY ==========");
 	for (gint i = 0; i < cJSON_GetArraySize(linkListArray); i++) {
 		linkList->numLinks++;
 		struct link_t* l = &(linkList->links[i]);
+		//l->numLinkEndPointIds = 0;
 
 		cJSON* item = cJSON_GetArrayItem(linkListArray, i);
-
 		// Get the link Id (uuid)
 		cJSON* linkIdObj = cJSON_GetObjectItem(item, "link_Id");
-		if (cJSON_IsString(linkIdObj)) {			
+		if (cJSON_IsString(linkIdObj)) {
 			duplicate_string(l->linkId, linkIdObj->valuestring);
-			//DEBUG_PC("Link (%d) -- Id: %s (uuid)", i + 1, l->linkId);
+			DEBUG_PC(" * Link (%d) -- Id: %s (uuid)", i + 1, l->linkId);
 		}
 		// Get the link endpoints (assumed to be p2p)
 		cJSON* endPointsLinkObj = cJSON_GetObjectItem(item, "link_endpoint_ids");
 		if (cJSON_IsArray(endPointsLinkObj)) {
+			//DEBUG_PC("number linkEndPointIds: %d", l->numLinkEndPointIds);
 			parse_json_link_endpoints_array(endPointsLinkObj, l);
 		}
 		// get the fowarding direction
@@ -1096,8 +1101,8 @@ void parsing_json_linkList_array(cJSON* linkListArray) {
  */
  ////////////////////////////////////////////////////////////////////////////////////////
 void generate_reverse_linkList() {
-
-	DEBUG_PC("Starting the Creation of the Reverse Links [current: %d]", linkList->numLinks);
+	DEBUG_PC("");
+	DEBUG_PC("CREATION OF REVERSE LINKS");
 	gint numLinks = linkList->numLinks;
 	
 	for (gint i = 0; i < numLinks; i++) {
@@ -1112,16 +1117,17 @@ void generate_reverse_linkList() {
 
 		// Assumption: p2p links. The newLink endpoints are the reversed ones form the reference Link (refLink)
 		// i.e., refLink A->B, then newLink B->A
-#if 0
+		//DEBUG_PC("ref: %s has %d endpoints", refLink->linkId, refLink->numLinkEndPointIds);
+#if 1
 		if (refLink->numLinkEndPointIds != 2) {
-			DEBUG_PC("To construct the new Link from ref, 2 EndPoints are a MUST");
+			DEBUG_PC("To construct the new Link from ref: %s, 2 EndPoints are a MUST", refLink->linkId);
 			exit(-1);
 		}
 #endif
+		DEBUG_PC(" * Link[%d] -- Id: %s", numLinks + i, newLink->linkId);
+
 		//DEBUG_PC("Number of Endpoints in Link: %d", refLink->numLinkEndPointIds);
-		for (gint j = refLink->numLinkEndPointIds - 1, m = 0; j >= 0; j--, m++) {
-			
-			
+		for (gint j = refLink->numLinkEndPointIds - 1, m = 0; j >= 0; j--, m++) {			
 			struct link_endpointId_t* refEndPId = &(refLink->linkEndPointId[j]);
 			struct link_endpointId_t* newEndPId = &(newLink->linkEndPointId[m]);
 			// Duplicate the topologyId information, i.e., contextId and topology_uuid
@@ -1130,7 +1136,7 @@ void generate_reverse_linkList() {
 			//duplicate the deviceId and endPoint_uuid
 			duplicate_string(newEndPId->deviceId, refEndPId->deviceId);
 			duplicate_string(newEndPId->endPointId, refEndPId->endPointId);
-			//DEBUG_PC("refLink Endpoint[%d]: %s(%s)", j, refEndPId->deviceId, refEndPId->endPointId);
+			DEBUG_PC("refLink Endpoint[%d]: %s(%s)", j, refEndPId->deviceId, refEndPId->endPointId);
 			//DEBUG_PC("newLink Endpoint[%d]: %s(%s)", m, newEndPId->deviceId, newEndPId->endPointId);
 			newLink->numLinkEndPointIds++;
 		}
diff --git a/src/pathcomp/backend/pathComp_tools.c b/src/pathcomp/backend/pathComp_tools.c
index 3c7e35e5420d6e1d27baf89d628f1d6165239b3e..84cf63994405a07ff6c7fbb1da3fc667b0f0500f 100644
--- a/src/pathcomp/backend/pathComp_tools.c
+++ b/src/pathcomp/backend/pathComp_tools.c
@@ -1704,6 +1704,7 @@ struct linkList_t* create_link_list() {
 		DEBUG_PC("Memory Allocation Failure");
 		exit(-1);
 	}
+	lList->numLinks = 0;
 	return lList;
 }
 
@@ -1916,7 +1917,7 @@ void print_link_forwarding_direction(guint linkFwDir) {
 			DEBUG_PC("BIDIRECTIONAL LINK FORWARDING DIRECTION");
 			break;
 		case LINK_FORWARDING_DIRECTION_UNIDIRECTIONAL:
-			//DEBUG_PC("UNIDIRECTIONAL LINK FORWARDING DIRECTION");
+			DEBUG_PC("UNIDIRECTIONAL LINK FORWARDING DIRECTION");
 			break;
 		case  LINK_FORWARDING_DIRECTION_UNKNOWN:
 			DEBUG_PC("UNKNOWN LINK FORWARDING DIRECTION");
diff --git a/src/pathcomp/backend/pathComp_tools.h b/src/pathcomp/backend/pathComp_tools.h
index 6632f683334905e38748c38dcca0bea43a66e905..393274e161ee131c4e9d35922cc579faa088ed6e 100644
--- a/src/pathcomp/backend/pathComp_tools.h
+++ b/src/pathcomp/backend/pathComp_tools.h
@@ -50,7 +50,8 @@ extern struct serviceList_t* serviceList;
 
 #define MAX_NODE_ID_SIZE				37 // UUID 128 Bits - In hexadecimal requires 36 char
 #define MAX_CONTEXT_ID					37
-#define UUID_CHAR_LENGTH				37
+//#define UUID_CHAR_LENGTH				37
+#define UUID_CHAR_LENGTH				100
 struct nodes_t {
 	gchar nodeId[UUID_CHAR_LENGTH];
 };
@@ -308,7 +309,7 @@ struct latency_characteristics_t {
 struct link_t {
 	gchar linkId[UUID_CHAR_LENGTH]; // link Id using UUID (128 bits)
 
-	guint numLinkEndPointIds;
+	gint numLinkEndPointIds;
 	struct link_endpointId_t linkEndPointId[MAX_NUM_LINK_ENDPOINT_IDS];
 
 	guint forwarding_direction;