diff --git a/libomptarget/deviceRTLs/nvptx/src/libcall.cu b/libomptarget/deviceRTLs/nvptx/src/libcall.cu
index 452463c..681b819 100644
--- a/libomptarget/deviceRTLs/nvptx/src/libcall.cu
+++ b/libomptarget/deviceRTLs/nvptx/src/libcall.cu
@@ -53,17 +53,16 @@
 }
 
 EXTERN int omp_get_max_threads(void) {
-  if (isSPMDMode())
+  if (parallelLevel[GetWarpId()] > 0)
     // We're already in parallel region.
-    return 1;  // default is 1 thread avail
+    return 1; // default is 1 thread avail
   omptarget_nvptx_TaskDescr *currTaskDescr =
       getMyTopTaskDescriptor(/*isSPMDExecutionMode=*/false);
-  int rc = 1; // default is 1 thread avail
-  if (!currTaskDescr->InParallelRegion()) {
-    // Not currently in a parallel region, return what was set.
-    rc = currTaskDescr->NThreads();
-    ASSERT0(LT_FUSSY, rc >= 0, "bad number of threads");
-  }
+  ASSERT0(LT_FUSSY, !currTaskDescr->InParallelRegion(),
+          "Should no be in the parallel region");
+  // Not currently in a parallel region, return what was set.
+  int rc = currTaskDescr->NThreads();
+  ASSERT0(LT_FUSSY, rc >= 0, "bad number of threads");
   PRINT(LD_IO, "call omp_get_max_threads() return %d\n", rc);
   return rc;
 }
@@ -155,19 +154,19 @@
 }
 
 EXTERN int omp_get_ancestor_thread_num(int level) {
-  if (isRuntimeUninitialized()) {
-    ASSERT0(LT_FUSSY, isSPMDMode(),
-            "Expected SPMD mode only with uninitialized runtime.");
+  if (isSPMDMode())
     return level == 1 ? GetThreadIdInBlock() : 0;
-  }
   int rc = -1;
-  if (level == 0) {
+  // If level is 0 or all parallel regions are not active - return 0.
+  unsigned parLevel = parallelLevel[GetWarpId()];
+  if (level == 0 || (level > 0 && parLevel < OMP_ACTIVE_PARALLEL_LEVEL &&
+                     level <= parLevel)) {
     rc = 0;
   } else if (level > 0) {
     int totLevel = omp_get_level();
     if (level <= totLevel) {
       omptarget_nvptx_TaskDescr *currTaskDescr =
-          getMyTopTaskDescriptor(isSPMDMode());
+          getMyTopTaskDescriptor(/*isSPMDExecutionMode=*/false);
       int steps = totLevel - level;
       PRINT(LD_IO, "backtrack %d steps\n", steps);
       ASSERT0(LT_FUSSY, currTaskDescr,
@@ -207,19 +206,19 @@
 }
 
 EXTERN int omp_get_team_size(int level) {
-  if (isRuntimeUninitialized()) {
-    ASSERT0(LT_FUSSY, isSPMDMode(),
-            "Expected SPMD mode only with uninitialized runtime.");
+  if (isSPMDMode())
     return level == 1 ? GetNumberOfThreadsInBlock() : 1;
-  }
   int rc = -1;
-  if (level == 0) {
+  unsigned parLevel = parallelLevel[GetWarpId()];
+  // If level is 0 or all parallel regions are not active - return 1.
+  if (level == 0 || (level > 0 && parLevel < OMP_ACTIVE_PARALLEL_LEVEL &&
+                     level <= parLevel)) {
     rc = 1;
   } else if (level > 0) {
     int totLevel = omp_get_level();
     if (level <= totLevel) {
       omptarget_nvptx_TaskDescr *currTaskDescr =
-          getMyTopTaskDescriptor(isSPMDMode());
+          getMyTopTaskDescriptor(/*isSPMDExecutionMode=*/false);
       int steps = totLevel - level;
       ASSERT0(LT_FUSSY, currTaskDescr,
               "do not expect fct to be called in a non-active thread");
