diff --git a/Event.cpp b/Event.cpp
index f722cb249dd0185a3b8394da413cd3e5792e0cc1..bd43d529a4a7aba24fbd538041e2483eb2900565 100644
--- a/Event.cpp
+++ b/Event.cpp
@@ -15,6 +15,7 @@ EventData::EventData()
     this->start = chrono::steady_clock::now();
     this->elapsed_time = 0.0; 
     this->count = 0;
+    this->ContiniousTime = 0.0;
     // this->ifCUDA = 0;
     this->event_name = "Unnamed";
     this->ifStart = false, this->ifEnd = false;
@@ -53,7 +54,7 @@ EventData::EventData(const string& name)
     this->start = chrono::steady_clock::now();
     this->elapsed_time = 0.0; 
     this->count = 0;
-    // this->ifCUDA = 0;
+    this->ContiniousTime = 0.0;
     this->event_name = name;
     this->ifStart = false, this->ifEnd = false;
     this->if_mode_set = false;
@@ -74,7 +75,7 @@ EventData& EventData::operator=(const EventData& src)
     this->start = src.start;
     this->elapsed_time = src.elapsed_time; 
     this->count = src.count;
-    // this->ifCUDA = 0;
+    this->ContiniousTime = src.ContiniousTime;
     this->event_name = src.event_name;
     this->ifStart = src.ifStart, this->ifEnd = src.ifEnd;
     this->if_mode_set = src.if_mode_set;
diff --git a/Event.h b/Event.h
index cff3885b1c9ab09330283eb73dbe8ea9d4dd25d4..8a4f7dcae8b808a67cec2c38451fa7e05b6c6c31 100644
--- a/Event.h
+++ b/Event.h
@@ -23,6 +23,7 @@ public:
     bool ifCUDAinit;  // If CUDA variables are initialized
     bool ifStart, ifEnd; // If measurment for current code block is started/finished 
     double elapsed_time, double_start;               // seconds
+    double ContiniousTime;
     int count; // Count of current code block measurments
     chrono_time_type start;
     std::vector<double> time_series; // Measurments time series for current code block
diff --git a/Jikan.cpp b/Jikan.cpp
index 652666b063ae3ecd281a2517f0dc9a833cddbe13..6b71019fa3d9a16b36c72bb5f927c4cce69d0ee8 100644
--- a/Jikan.cpp
+++ b/Jikan.cpp
@@ -16,11 +16,11 @@ extern "C"
         Timer.JikanStart(str_name, mode);
     }
 
-    void TimerEnd(const char* name)
+    void TimerEnd(const char* name, const int cont_mode_t)
     {
         string str_name = name;
 
-        Timer.JikanEnd(str_name);
+        Timer.JikanEnd(str_name, cont_mode_t);
     }
 
     void WriteOutput()
diff --git a/Jikan.h b/Jikan.h
index 8c9c792a790139d00ff241299c86c89719441ad5..1acf6d12c219d4e13bfbb283df13dda411ccabb1 100644
--- a/Jikan.h
+++ b/Jikan.h
@@ -27,17 +27,23 @@ enum TimerMode
     MPI_CUDA         = MPI_mode * CUDA_mode,
 };
 
+enum ContinueMode
+{
+    cont =  1,
+    finish = 0,
+};
+
 #ifdef __cplusplus
 extern "C" {  
 #endif         
 
         void TimerStart(const char* name, const int mode_t);
-        void TimerEnd(const char* name);
+        void TimerEnd(const char* name, const int cont_mode_t);
         void WriteOutput();
         
 #ifdef TIMER_ON
         #define START_JIKAN_TIMER(name, mode_t) TimerStart(name, mode_t);
-        #define END_JIKAN_TIMER(name)           TimerEnd(name);
+        #define END_JIKAN_TIMER(name, cont_mode_t)           TimerEnd(name, cont_mode_t);
         #define JIKAN_TIMER_OUTPUT() WriteOutput();
 #else
         #define START_JIKAN_TIMER(name, mode_t)
diff --git a/JikanDepths.cpp b/JikanDepths.cpp
index 7198133a3efddaab60bb00c7ceb3c140233cdb78..c4e5fb1197e33a55136c30e920e5c22133c83014 100644
--- a/JikanDepths.cpp
+++ b/JikanDepths.cpp
@@ -55,6 +55,26 @@ Jikan::Jikan()
 
 bool Jikan::ifWriteProc()
 {
+    #ifdef INCLUDE_MPI
+        int init_flag, fin_flag;
+
+        MPI_Initialized(&init_flag);
+        MPI_Finalized(&fin_flag);
+
+        int GlobalCommRank;
+
+        if((!fin_flag) && init_flag)
+        {
+            MPI_Comm_rank(MPI_COMM_WORLD, &GlobalCommRank);
+            if(GlobalCommRank == 0)
+                return true;
+            else
+                return false;
+        }
+        else
+            return true;
+    #endif
+
     return true;
 }
 
@@ -178,7 +198,7 @@ void Jikan::JikanStart(const string& name, const int& mode)
     // printf("177 (this->Events)[name].ifStart = %d\n", (this->Events)[name].ifStart);
 }
 
-void Jikan::JikanEnd(const string& name)
+void Jikan::JikanEnd(const string& name, const int cont_mode_t)
 {    
     bool ExistFlag, ifStart;
     bool ifMPI, ifOpenMP, ifCUDA;
@@ -204,7 +224,7 @@ void Jikan::JikanEnd(const string& name)
         {    
             #ifdef INCLUDE_GPU_TIMER
                 this->EndCUDASync(name);
-                this->CUDAGetTime(name);
+                this->CUDAGetTime(name, cont_mode_t);
             #endif
         }
     #ifdef INCLUDE_OPEN_MP
@@ -228,7 +248,7 @@ void Jikan::JikanEnd(const string& name)
         if(ifMPI)
             this->BarrierMPI();
 
-        this->EndEvent(name);
+        this->EndEvent(name, cont_mode_t);
     #ifdef INCLUDE_OPEN_MP
     }
     #endif
@@ -324,14 +344,17 @@ void Jikan::StartEvent(const string& name)
         (this->Events)[name].start = chrono::steady_clock::now();
 }
 
-void Jikan::EndEvent(const string& name)
+#define btoa(x) ((x)?"true":"false")
+
+void Jikan::EndEvent(const string& name, const int cont_mode_t)
 {
     bool ifMPI = (this->Events)[name].mode[0], ifOpenMP = (this->Events)[name].mode[1], ifCUDA = (this->Events)[name].mode[2];
 
-    if((ifCUDA))
+    // printf("%s %s %s\n", btoa(ifMPI), btoa(ifOpenMP), btoa(ifCUDA));
+
+    if(ifCUDA)
     {
         #ifdef INCLUDE_GPU_TIMER
-            // printf("EndCUDASync\n");
             this->EndCUDASync(name);
         #endif
     }
@@ -343,10 +366,19 @@ void Jikan::EndEvent(const string& name)
             double main_elapsed = end - (this->Events)[name].double_start;
 
             (this->Events)[name].elapsed_time += main_elapsed;
-            (this->Events)[name].count ++;
+            (this->Events)[name].ContiniousTime += main_elapsed;
+
+            if(cont_mode_t == 0)
+            {
+                (this->Events)[name].count ++;
+            }
 
             #ifdef SAVE_TIME_SERIES
-                (this->Events)[name].time_series.push_back(main_elapsed);
+                if(cont_mode_t == 0)
+                { 
+                    (this->Events)[name].time_series.push_back((this->Events)[name].ContiniousTime);
+                    (this->Events)[name].ContiniousTime = 0.0;
+                }
             #endif
         }
     #endif
@@ -357,12 +389,21 @@ void Jikan::EndEvent(const string& name)
         chrono_time_type start = (this->Events)[name].start;
 
         double main_elapsed = chrono::duration_cast<chrono::nanoseconds>(end - start).count() * 1e-9;
-
+	//printf("%e\n", main_elapsed);
         (this->Events)[name].elapsed_time += main_elapsed;
-        (this->Events)[name].count ++;
+        (this->Events)[name].ContiniousTime += main_elapsed;
+
+        if(cont_mode_t == 0)
+        {
+            (this->Events)[name].count ++;
+        }
 
         #ifdef SAVE_TIME_SERIES
-            (this->Events)[name].time_series.push_back(main_elapsed);
+        if(cont_mode_t == 0)
+        { 
+            (this->Events)[name].time_series.push_back((this->Events)[name].ContiniousTime);
+            (this->Events)[name].ContiniousTime = 0.0;
+        }
         #endif
     }
 }
@@ -380,4 +421,4 @@ void Jikan::BarrierMPI()
 #endif
 }
 
-class Jikan Timer;
\ No newline at end of file
+class Jikan Timer;
diff --git a/JikanDepths.cu b/JikanDepths.cu
index 75335df92343c25682aeceaaf3b4992df6290b49..d1d734d59f50b81475467da5a8ef9ef10d38ff99 100644
--- a/JikanDepths.cu
+++ b/JikanDepths.cu
@@ -20,15 +20,24 @@ void Jikan::EndCUDASync(const string& name)
 	cudaEventSynchronize((this->Events)[name].gpu_end);
 }
 
-void Jikan::CUDAGetTime(const string& name)
+void Jikan::CUDAGetTime(const string& name, const int cont_mode_t)
 {
     float GPUtime = 0.0;
     cudaEventElapsedTime(&GPUtime, (this->Events)[name].gpu_start, (this->Events)[name].gpu_end );
     GPUtime *= 1e-3;
     (this->Events)[name].elapsed_time += GPUtime;
-    (this->Events)[name].count ++;
+    (this->Events)[name].ContiniousTime += GPUtime;
+
+    if(cont_mode_t == 0)
+    {
+        (this->Events)[name].count ++;
+    }
 
     #ifdef SAVE_TIME_SERIES
-        (this->Events)[name].time_series.push_back(GPUtime);
+        if(cont_mode_t == 0)
+        { 
+            (this->Events)[name].time_series.push_back((this->Events)[name].ContiniousTime);
+            (this->Events)[name].ContiniousTime = 0.0;
+        }
     #endif
 }
\ No newline at end of file
diff --git a/JikanDepths.h b/JikanDepths.h
index 3a1eb939fd17624a5fe860e0e50a8b9302b3e369..d12e2597c974c24d04d11282ca2fb858390e5088 100644
--- a/JikanDepths.h
+++ b/JikanDepths.h
@@ -24,7 +24,7 @@ public:
     ~Jikan();
 
     void JikanStart(const std::string& name, const int& mode); // Start code block measurments
-    void JikanEnd(  const std::string& name); // End code block measurments
+    void JikanEnd(  const std::string& name, const int cont_mode_t); // End code block measurments
 
 #ifdef INCLUDE_GPU_TIMER
     void StartCUDASync(const std::string& name); // Start CUDA synchronization
@@ -47,9 +47,9 @@ public:
 private:
     void BarrierMPI(); // Start MPI barrier
     void StartEvent(const std::string& name); 
-    void EndEvent(const std::string& name);
+    void EndEvent(const std::string& name, const int cont_mode_t);
 
 #ifdef INCLUDE_GPU_TIMER
-    void CUDAGetTime(const std::string& name);
+    void CUDAGetTime(const std::string& name, const int cont_mode_t);
 #endif
 };
\ No newline at end of file