diff --git a/main.cpp b/main.cpp
index f869a4b3b236f89bc346e8cce7338907077f3398..575605dc5c54026efa872d18457340e34e12a0a7 100644
--- a/main.cpp
+++ b/main.cpp
@@ -15,7 +15,8 @@ Kokkos::Timer timer;
 // constexpr int nlev = 90;
 // constexpr int nproma = 55000;
 
-// #define ENABLE_CHECK_BOUNDS
+//#define ENABLE_CHECK_BOUNDS
+//#define ENABLE_CHECK_BOUNDS_2D
 
 static void validate(double* array, int nblocks, int nlev, int nproma) {
   for (int i = 0; i < nblocks * nlev * nproma; ++i) {
@@ -29,6 +30,12 @@ KOKKOS_INLINE_FUNCTION void check_bounds(int i1, int i2, int i3, int n1, int n2,
 #endif
 }
 
+KOKKOS_INLINE_FUNCTION void check_bounds_2d(int i1, int i2, int n1, int n2) {
+#ifdef ENABLE_CHECK_BOUNDS_2D
+  assert(i1 >= 0 && i2 >= 0 && i1 < n1 && i2 < n2 );
+#endif
+}
+
 void scenario_1(double* array, int nblocks, int nlev, int nproma, bool print = true) {
   if (print)
     std::cout << "scenario 1: Default layout; view(array, nblocks, nlev, nproma); d_view(jb, jk, jc) ----- "
@@ -83,6 +90,33 @@ void scenario_1b(double* array, int nblocks, int nlev, int nproma) {
 }
 
 
+void scenario_1c(double* array, int nblocks, int nlev, int nproma) {
+  std::cout << "scenario 1c: Default layout; view(array, ncells, nlev); d_view(jc, jk) ----- "
+              << std::endl;
+  int ncells = nblocks*nproma;
+
+  Kokkos::View<double**, Kokkos::MemoryUnmanaged> d_view(array, ncells, nlev);
+
+  timer.reset();
+
+    Kokkos::parallel_for(
+        "", Kokkos::RangePolicy<>(0, ncells), KOKKOS_LAMBDA(const int jc) {
+          for (int jk = 0; jk < nlev; ++jk) {
+#if defined(DEMO_DEVICE)
+            int p = jk * ncells + jc;
+#else
+            int p = jc * nlev + jk;
+#endif
+            check_bounds_2d(jc, jk, d_view.extent(0), d_view.extent(1));
+            d_view(jc, jk) = p;
+          }
+        });
+  Kokkos::fence();
+
+  printf("Time = %f ms\n\n", timer.seconds() * 1000);
+
+}
+
 void scenario_2(double* array, int nblocks, int nlev, int nproma, bool print = true) {
   if (print)
     std::cout << "scenario 2: Right layout; view(array, nproma, nlev, nblocks); d_view(jc, jk, jb) ----- " << std::endl;
@@ -455,6 +489,10 @@ int main() {
     std::function<void(double*, int, int, int)> s_1b = scenario_1b;
     openacc_calls(array, nblocks, nlev, nproma, s_1b);
     
+    memset(array, 0.0, sizeof(array));
+    std::function<void(double*, int, int, int)> s_1c = scenario_1c;
+    openacc_calls(array, nblocks, nlev, nproma, s_1c);
+
     memset(array, 0.0, sizeof(array));
     std::function<void(double*, int, int, int)> s_7b = scenario_7b;
     openacc_calls(array, nblocks, nlev, nproma, s_7b);
@@ -477,4 +515,4 @@ int main() {
   Kokkos::finalize();
 
   return 0;
-}
\ No newline at end of file
+}