diff --git a/test_conformance/CMakeLists.txt b/test_conformance/CMakeLists.txt
index 8f1fbef..0b2e247 100644
--- a/test_conformance/CMakeLists.txt
+++ b/test_conformance/CMakeLists.txt
@@ -1,4 +1,4 @@
-# 
+#
 
 # Copyright (c) 2012-2017 The Khronos Group Inc.
 #
@@ -21,7 +21,10 @@
 
 file(GLOB SOURCES "./*.c")
 file(GLOB HEADERS "./*.h")
+
+if(OPENVX_USE_NN_16)
 file(GLOB NETWORK_SOURCES "./Networks/src/*")
+endif(OPENVX_USE_NN_16)
 
 include_directories(${CMAKE_CURRENT_SOURCE_DIR})
 
diff --git a/test_conformance/Networks/src/common.c b/test_conformance/Networks/src/common.c
index 96c6604..c1a2108 100644
--- a/test_conformance/Networks/src/common.c
+++ b/test_conformance/Networks/src/common.c
@@ -1,7 +1,9 @@
 /** @file common.c
- *  @brief 
- *  This file contains the implementation of the generated utility functions 
+ *  @brief
+ *  This file contains the implementation of the generated utility functions
  */
+#ifdef OPENVX_CONFORMANCE_NEURAL_NETWORKS
+#ifdef OPENVX_USE_NN_16
 
 #include "common.h"
 #include <stdio.h>
@@ -23,12 +25,15 @@
 
             if(pObj->ref)
             {
-                if(pObj->type == VX_TYPE_IMAGE)
+                if(pObj->type == VX_TYPE_TENSOR)
+                    vxReleaseTensor((vx_tensor*)&(pObj->ref));
+                else if(pObj->type == VX_TYPE_SCALAR)
+                    vxReleaseScalar((vx_scalar*)&(pObj->ref));
+#if defined OPENVX_USE_ENHANCED_VISION || OPENVX_CONFORMANCE_VISION
+                else if(pObj->type == VX_TYPE_IMAGE)
                     vxReleaseImage((vx_image*)&(pObj->ref));
                 else if(pObj->type == VX_TYPE_ARRAY)
                     vxReleaseArray((vx_array*)&(pObj->ref));
-                else if(pObj->type == VX_TYPE_SCALAR)
-                    vxReleaseScalar((vx_scalar*)&(pObj->ref));
                 else if(pObj->type == VX_TYPE_REMAP)
                     vxReleaseRemap((vx_remap*)&(pObj->ref));
                 else if(pObj->type == VX_TYPE_CONVOLUTION)
@@ -45,10 +50,9 @@
                     vxReleaseLUT((vx_lut*)&(pObj->ref));
                 else if(pObj->type == VX_TYPE_OBJECT_ARRAY)
                     vxReleaseObjectArray((vx_object_array*)&(pObj->ref));
-				else if(pObj->type == VX_TYPE_TENSOR)
-                    vxReleaseTensor((vx_tensor*)&(pObj->ref));
                 else if(pObj->type == VX_TYPE_DELAY)
                     vxReleaseDelay((vx_delay*)&(pObj->ref));
+#endif
             }
             else if(pObj->pMem)
             {
@@ -156,7 +160,7 @@
         {
             if(0 == strcmp(nodeName, filteredNodesList[i]))
             {
-                bCreateNode = true;                
+                bCreateNode = true;
                 break;
             }
         }
@@ -173,12 +177,12 @@
             return status;
         }
         AddVXObject(pObjectContainer, (vx_reference)*node, VX_TYPE_NODE, nodeName);
-    }    
+    }
     else
     {
         *node = NULL;
     }
-    return VX_SUCCESS;    
+    return VX_SUCCESS;
 }
 
 int WriteLog(const char* format, ...)
@@ -196,9 +200,9 @@
 {
     static char allVxStatusEnumsContainer[1024];
     static char* statusArray[VX_SUCCESS - VX_STATUS_MIN + 1];
-	static bool firstTime = true;
-	if (firstTime)
-	{
+    static bool firstTime = true;
+    if (firstTime)
+    {
         size_t index = 0;
         for (int i = VX_STATUS_MIN; i <= VX_SUCCESS; ++i)
         {
@@ -209,7 +213,7 @@
             else if (i == VX_ERROR_INVALID_SCOPE) strcpy(allVxStatusEnumsContainer + index, "VX_ERROR_INVALID_SCOPE");
             else if (i == VX_ERROR_INVALID_NODE) strcpy(allVxStatusEnumsContainer + index, "VX_ERROR_INVALID_NODE");
             else if (i == VX_ERROR_INVALID_GRAPH) strcpy(allVxStatusEnumsContainer + index, "VX_ERROR_INVALID_GRAPH");
-		    else if (i == VX_ERROR_INVALID_TYPE) strcpy(allVxStatusEnumsContainer + index, "VX_ERROR_INVALID_TYPE");
+            else if (i == VX_ERROR_INVALID_TYPE) strcpy(allVxStatusEnumsContainer + index, "VX_ERROR_INVALID_TYPE");
             else if (i == VX_ERROR_INVALID_VALUE) strcpy(allVxStatusEnumsContainer + index, "VX_ERROR_INVALID_VALUE");
             else if (i == VX_ERROR_INVALID_DIMENSION) strcpy(allVxStatusEnumsContainer + index, "VX_ERROR_INVALID_DIMENSION");
             else if (i == VX_ERROR_INVALID_FORMAT) strcpy(allVxStatusEnumsContainer + index, "VX_ERROR_INVALID_FORMAT");
@@ -230,8 +234,8 @@
             else strcpy(allVxStatusEnumsContainer + index, "Unknown error");
             statusArray[i - VX_STATUS_MIN] = allVxStatusEnumsContainer + index;
             index += strlen(allVxStatusEnumsContainer + index) + 1;
-	    }
-		firstTime = false;
+        }
+        firstTime = false;
     }
     return statusArray;
 }
@@ -247,3 +251,6 @@
     }
     return statusContainer[vxStatus - VX_STATUS_MIN];
 }
+
+#endif
+#endif
diff --git a/test_engine/CMakeLists.txt b/test_engine/CMakeLists.txt
index 5ab87db..fda2415 100644
--- a/test_engine/CMakeLists.txt
+++ b/test_engine/CMakeLists.txt
@@ -1,4 +1,4 @@
-# 
+#
 
 # Copyright (c) 2012-2017 The Khronos Group Inc.
 #
@@ -22,6 +22,9 @@
 file(GLOB SOURCES "./*.c")
 file(GLOB HEADERS "./*.h")
 
+# Following is added for accessing prototype of usleep() in unistd.h
+add_definitions( -D_XOPEN_SOURCE=700 -D_GNU_SOURCE=1 )
+
 add_library(${target} STATIC ${SOURCES} ${HEADERS})
 target_include_directories(${target} PUBLIC ${CMAKE_SOURCE_DIR})
 target_link_libraries(${target} PUBLIC openvx-interface)
diff --git a/test_engine/test_engine.c b/test_engine/test_engine.c
index c9538c3..b3bb51e 100644
--- a/test_engine/test_engine.c
+++ b/test_engine/test_engine.c
@@ -919,15 +919,25 @@
                     if (strncmp(enhanced_vision_test[i], test_name, sizeof(enhanced_vision_test[i]) - 1) == 0) {
                         conformance_enhanced_vision_status = 1;
                         i = enhance_vision_num;
-            }
-        }
+                    }
+                }
 #endif
+#ifdef OPENVX_CONFORMANCE_NEURAL_NETWORKS
 #ifdef OPENVX_USE_NN
                 if (strncmp("TensorNN", test_name, sizeof("TensorNN") - 1) == 0) {
                     total_openvx_failed_nn_tests ++;
+                    total_openvx_failed_neural_networks_tests ++;
                 }
                 else
 #endif
+#ifdef OPENVX_USE_NN_16
+                if (strncmp("TensorNetworks", test_name, sizeof("TensorNetworks") - 1) == 0) {
+                    total_openvx_failed_nn_tests ++;
+                    total_openvx_failed_neural_networks_tests ++;
+                }
+                else
+#endif
+#endif
 #ifdef OPENVX_USE_IX
                 if (strncmp("ExtensionObject", test_name, sizeof("ExtensionObject") - 1) == 0) {
                     total_openvx_failed_ix_tests ++;
@@ -958,20 +968,6 @@
                 }
                 else
 #endif
-#ifdef OPENVX_CONFORMANCE_NEURAL_NETWORKS
-#ifdef OPENVX_USE_NN
-                if (strncmp("TensorNN", test_name, sizeof("TensorNN") - 1) == 0) {
-                    total_openvx_failed_neural_networks_tests ++;
-                }
-                else
-#endif
-#ifdef OPENVX_USE_NN_16
-                if (strncmp("TensorNetworks", test_name, sizeof("TensorNetworks") - 1) == 0) {
-                    total_openvx_failed_neural_networks_tests ++;
-                }
-                else
-#endif
-#endif
 #ifdef OPENVX_CONFORMANCE_NNEF_IMPORT
                 if (strncmp("TensorNNEFImport", test_name, sizeof("TensorNNEFImport") - 1) == 0) {
                     total_openvx_failed_nnef_tests ++;
