diff --git a/test/hello-task.c b/test/hello-task.c
index b18738e0fd7f3ec5aaf7f34c9945347201009ced..6b9c8e2f7f9cd28af5ba2eadb067cd0f68e53d3c 100644
--- a/test/hello-task.c
+++ b/test/hello-task.c
@@ -2,27 +2,75 @@
 #include <unistd.h>
 #include <omp.h>
 #include <math.h>
+#include "AvailabilityMacros.h"
+
 
 int array[] = { 1, 2, 3, 4};
 
+/*
+*/
+//extern void ompt_set_task_name(const char* name ) __attribute__((weak_import)); //__attribute__((weak));
+extern void ompt_set_task_name(const char* name );
+
+
 int main()
 {
 #pragma omp parallel
 #pragma omp master
   {
     printf("Hello from %i\n", omp_get_thread_num());
+    if (ompt_set_task_name != NULL) 
+    {
+      printf("Defined symbol\n");
+      ompt_set_task_name("hello");
+    }
+    else
+      printf("Undefined symbol\n");
+
     #pragma omp task
     {
       sleep(2);
       printf("Hey there\n");
+
+      ompt_set_task_name("sub hello");
+      #pragma omp task 
+      {
+        sleep(2);
+        printf("Hey there\n");
+      }
+     
+      ompt_set_task_name("sub hello");
+      #pragma omp task 
+      {
+        sleep(2);
+        printf("Hey there\n");
+
+        ompt_set_task_name("sub sub hello");
+        #pragma omp task 
+        {
+          sleep(2);
+          printf("Hey there\n");
+        }
+        ompt_set_task_name("sub sub hello");
+        #pragma omp task 
+        {
+          sleep(2);
+          printf("Hey there\n");
+        }
+      }
     }
+
+    ompt_set_task_name("Parent of other tasks");
+    #pragma omp task 
     for (int i = 0; i < 4; i++) {
+      ompt_set_task_name("other tasks");
       #pragma omp task depend(in: array[i]) depend(inout: array[(i+1)%4])
       {
         double d;
         array[(i+1)%4] = array[i];
         for (int j=0; j<100000; ++j) 
           d += sin(M_PI/j)*cos(M_PI/i);
+	sleep(2);
         printf("Hey %i\n", i);
       }
     }
diff --git a/test/hello.c b/test/hello.c
index 52494a01bd4d8db565464196b366a26649775ab1..f8535f075fe7d109e770df24c53b534a6ab4523c 100644
--- a/test/hello.c
+++ b/test/hello.c
@@ -1,15 +1,30 @@
 #include <stdio.h>
 #include <omp.h>
+#include <unistd.h>
+
 
 int main()
 {
+printf("Before parallel region 1,  %i\n", omp_get_thread_num());
 #pragma omp parallel
   {
     printf("Hello from %i\n", omp_get_thread_num());
+    #pragma omp barrier
+    #pragma omp master
+    {
+      #pragma omp task
+      printf("%i:: Master thread\n", omp_get_thread_num());
+      
+      #pragma omp taskwait
+    }
   }
+printf("After parallel region 1, %i\n\n\n\n", omp_get_thread_num());
+sleep(10);
+printf("Before parallel region 2,  %i\n", omp_get_thread_num());
 #pragma omp parallel
   {
     printf("Parallel 2, hello from %i\n", omp_get_thread_num());
   }
+printf("After parallel region 2, %i\n\n\n\n", omp_get_thread_num());
   return 0;
 }
diff --git a/tool/tool.cpp b/tool/tool.cpp
index 41e2c5749e6fa6d53123aeeec0ed2c8467f7a4a1..f4d138639f7c787c8e28c55ae5144b77a249609c 100644
--- a/tool/tool.cpp
+++ b/tool/tool.cpp
@@ -6,6 +6,8 @@
 #include <omp-tools.h>
 #include "kaapi_trace_lib.h"
 
+#include "AvailabilityMacros.h"
+
 #define CALLBACK(name, ...)\
   void name##_action(__VA_ARGS__);
 #include "ompt_callbacks.def"
@@ -27,6 +29,8 @@ extern "C" {
 extern void tikki_ompt_set_task_name(const char* name );
 extern void tikki_ompt_set_task_data(int count, void** data, size_t* size, int* mode );
 
+extern void ompt_set_task_name(const char* name ) __attribute__((weak_import));
+
 void __tikki_ompt_set_task_name(const char* name )
 { tikki_ompt_set_task_name(name); }
 void __tikki_ompt_set_task_data(int count, void** data, size_t* size, int* mode )
@@ -34,7 +38,7 @@ void __tikki_ompt_set_task_data(int count, void** data, size_t* size, int* mode
 
 /* Exported function as extension to be called by application
 */
-extern void ompt_set_task_name(const char* name ) 
+void ompt_set_task_name(const char* name ) __attribute__((weak_import))
 { 
   tikki_ompt_set_task_name(name);
 }