diff --git a/pymusic/examples/eventlogger.py b/pymusic/examples/eventlogger.py
index eba87165f1b9e8ffd27efa61b53bf4cae8732a50..5b9475fc5ba3a32b4a31c4ca54f6677a7dbbdd89 100755
--- a/pymusic/examples/eventlogger.py
+++ b/pymusic/examples/eventlogger.py
@@ -47,3 +47,5 @@ runtime = music.Runtime(setup, timestep)
 times = takewhile(lambda t: t <= stoptime, runtime)
 for time in times:
     pass
+
+runtime.finalize()
diff --git a/pymusic/examples/eventsource.py b/pymusic/examples/eventsource.py
index 6461bb899548978eafbde401870d0beef9168ec0..04a9442108d30e8a7d042434ef6695fcbc3638ea 100755
--- a/pymusic/examples/eventsource.py
+++ b/pymusic/examples/eventsource.py
@@ -47,3 +47,5 @@ for t in times:
         out.insertEvent(when, index, music.Index.GLOBAL)
 
     nextStep, nextEvents = step()
+
+runtime.finalize()
diff --git a/pymusic/examples/messagelogger.py b/pymusic/examples/messagelogger.py
index cea1146bb94c662bf37f3f55b1e1dca055316e79..1c973761889ee1dc207f6a8746f70c80493f5390 100755
--- a/pymusic/examples/messagelogger.py
+++ b/pymusic/examples/messagelogger.py
@@ -35,3 +35,5 @@ runtime = setup.runtime(timestep)
 times = takewhile(lambda t: t <= stoptime, runtime)
 for time in times:
     pass
+
+runtime.finalize()
diff --git a/pymusic/examples/messagesource.py b/pymusic/examples/messagesource.py
index 442e89f4413466cc82abe4474d67607e2fe71c00..86db1e76d968dd181377b42d0e31dbf292f09804 100755
--- a/pymusic/examples/messagesource.py
+++ b/pymusic/examples/messagesource.py
@@ -36,3 +36,5 @@ for t in times:
         out.insertMessage(when, msg)
 
     nextStep, nextEvents = step()
+
+runtime.finalize()
diff --git a/pymusic/examples/receivers.py b/pymusic/examples/receivers.py
index 2a796bdb6a6b12ad14269ba5204af247d5a67c36..a724a601dd19af5c4c7cb92433c5013491cd3d34 100755
--- a/pymusic/examples/receivers.py
+++ b/pymusic/examples/receivers.py
@@ -27,3 +27,5 @@ for time in times:
     sys.stdout.write(
         "t={}\treceiver {}: received Hello from sender {}\n".
         format(time, rank, srank))
+
+runtime.finalize()
diff --git a/pymusic/examples/senders.py b/pymusic/examples/senders.py
index 2ea85ea8175b966f03abe93ba41808da10167806..8efb20653d22b0c551253347bc1e1075f8e3a49a 100755
--- a/pymusic/examples/senders.py
+++ b/pymusic/examples/senders.py
@@ -22,3 +22,5 @@ times = takewhile(lambda t: t < stoptime, runtime)
 for time in times:
     data[0] = rank
     sys.stdout.write("t={}\tsender {}: Hello!\n".format(time, rank))
+
+runtime.finalize()
diff --git a/pymusic/examples/testsink.py b/pymusic/examples/testsink.py
index bc9f4e1b3dc4476ad4d7634bb9f848946d74f701..0fd312a912cb0b513dd1a6a3c22e543d71820929 100755
--- a/pymusic/examples/testsink.py
+++ b/pymusic/examples/testsink.py
@@ -44,3 +44,5 @@ runtime = music.Runtime(setup, timestep)
 times = takewhile(lambda t: t <= stoptime, runtime)
 for time in times:
     pass
+
+runtime.finalize()
diff --git a/pymusic/examples/testsource.py b/pymusic/examples/testsource.py
index fc8024892d6c7232e9f62d56b304892c9608b72e..d8daf36c51ab10e40e5a2f60572dd2029a655851 100755
--- a/pymusic/examples/testsource.py
+++ b/pymusic/examples/testsource.py
@@ -54,3 +54,5 @@ for t in times:
         out.insertEvent(when, i, index)
 
     nextStep, nextEvents = step()
+
+runtime.finalize()
diff --git a/pymusic/pymusic.pxd b/pymusic/pymusic.pxd
index 92aa5c646ac0bf5fcb42af8e1937271f823e03f8..d1d7d68781f760b0e1abe8db987be69237344d20 100644
--- a/pymusic/pymusic.pxd
+++ b/pymusic/pymusic.pxd
@@ -186,6 +186,7 @@ cdef class Runtime(object):
     cdef CRuntime* ptr
     cdef readonly MPI.Intracomm comm
     cdef set ports
+    cdef int isFinalized
 
 ###########################################################
 
diff --git a/pymusic/pymusic.pyx b/pymusic/pymusic.pyx
index 63accac81a952b723f03aed7bb07faaa28d58070..ac8a98bcad518ef8c6f8487279da413a6e13c41a 100644
--- a/pymusic/pymusic.pyx
+++ b/pymusic/pymusic.pyx
@@ -518,6 +518,7 @@ cdef class Runtime(object):
     def __cinit__(self, Setup setup, double h):
         self.ptr = new CRuntime(setup.ptr, h)
         self.ports = setup.ports
+        self.isFinalized = 0
         setup.null()
 
         cdef MPI.Intracomm comm = MPI.Intracomm()
@@ -525,7 +526,8 @@ cdef class Runtime(object):
         self.comm = comm
 
     def __dealloc__(self):
-        self.ptr.finalize()
+        if not self.isFinalized:
+           self.ptr.finalize()
 
         for p in self.ports:
             p.null()
@@ -533,8 +535,13 @@ cdef class Runtime(object):
         del self.ptr
 
     def time(self): return self.ptr.time()
+    
     def tick(self): tick(self.ptr)
 
+    def finalize(self):
+        self.isFinalized = 1
+        self.ptr.finalize()
+
     def __iter__(self):
         cdef CRuntime* ptr = self.ptr
         while True: