diff --git a/src/engine.c b/src/engine.c
index eabe688f293577c0fac1c1fb61d3a5f0780e25d4..d94075558bc91ac68734f67c0758383d7b56e9c2 100644
--- a/src/engine.c
+++ b/src/engine.c
@@ -2356,9 +2356,8 @@ void engine_dump_snapshot(struct engine *e) {
   struct clocks_time time1, time2;
   clocks_gettime(&time1);
 
-  if (e->verbose)
-    message("writing snapshot at t=%f", e->time);
-  
+  if (e->verbose) message("writing snapshot at t=%f.", e->time);
+
 /* Dump... */
 #if defined(WITH_MPI)
 #if defined(HAVE_PARALLEL_HDF5)
@@ -2751,8 +2750,8 @@ void engine_print_policy(struct engine *e) {
  */
 void engine_compute_next_snapshot_time(struct engine *e) {
 
-  for (double time = e->timeFirstSnapshot; time < e->timeEnd;
-       time += e->deltaTimeSnapshot) {
+  for (double time = e->timeFirstSnapshot;
+       time < e->timeEnd + e->deltaTimeSnapshot; time += e->deltaTimeSnapshot) {
 
     /* Output time on the integer timeline */
     e->ti_nextSnapshot = (time - e->timeBegin) / e->timeBase;
@@ -2760,8 +2759,16 @@ void engine_compute_next_snapshot_time(struct engine *e) {
     if (e->ti_nextSnapshot > e->ti_current) break;
   }
 
-  /* Be nice, talk... */
-  const float next_snapshot_time =
-      e->ti_nextSnapshot * e->timeBase + e->timeBegin;
-  if (e->verbose) message("Next output time set to t=%f", next_snapshot_time);
+  /* Deal with last snapshot */
+  if (e->ti_nextSnapshot >= max_nr_timesteps) {
+    e->ti_nextSnapshot = -1;
+    if (e->verbose) message("No further output time.");
+  } else {
+
+    /* Be nice, talk... */
+    const float next_snapshot_time =
+        e->ti_nextSnapshot * e->timeBase + e->timeBegin;
+    if (e->verbose)
+      message("Next output time set to t=%f.", next_snapshot_time);
+  }
 }