diff --git a/Marlin/printcounter.cpp b/Marlin/printcounter.cpp
index 158356217144a080921f1e8755cbd4b2cb44a282..30a94f28dbd775d1b4f96253d31083c0e7b74570 100644
--- a/Marlin/printcounter.cpp
+++ b/Marlin/printcounter.cpp
@@ -73,6 +73,7 @@ void PrintCounter::saveStats() {
   // Refuses to save data is object is not loaded
   if (!this->isLoaded()) return;
 
+  // Saves the struct to EEPROM
   eeprom_update_block(&this->data, (void *)(this->address + sizeof(uint8_t)), sizeof(printStatistics));
 }
 
@@ -135,35 +136,46 @@ void PrintCounter::tick() {
   }
 }
 
-void PrintCounter::start() {
+// @Override
+bool PrintCounter::start() {
   #if ENABLED(DEBUG_PRINTCOUNTER)
     PrintCounter::debug(PSTR("start"));
   #endif
 
-  if (!this->isPaused()) this->data.totalPrints++;
-  super::start();
+  bool paused = this->isPaused();
+
+  if (super::start()) {
+    if (!paused) {
+      this->data.totalPrints++;
+      this->lastDuration = 0;
+    }
+    return true;
+  }
+  else return false;
 }
 
-void PrintCounter::stop() {
+// @Override
+bool PrintCounter::stop() {
   #if ENABLED(DEBUG_PRINTCOUNTER)
     PrintCounter::debug(PSTR("stop"));
   #endif
 
-  if (!this->isRunning()) return;
-  super::stop();
-
-  this->data.finishedPrints++;
-  this->data.printTime += this->deltaDuration();
-  this->saveStats();
+  if (super::stop()) {
+    this->data.finishedPrints++;
+    this->data.printTime += this->deltaDuration();
+    this->saveStats();
+  }
+  else return false;
 }
 
+// @Override
 void PrintCounter::reset() {
   #if ENABLED(DEBUG_PRINTCOUNTER)
     PrintCounter::debug(PSTR("stop"));
   #endif
 
-  this->lastDuration = 0;
   super::reset();
+  this->lastDuration = 0;
 }
 
 #if ENABLED(DEBUG_PRINTCOUNTER)
diff --git a/Marlin/printcounter.h b/Marlin/printcounter.h
index e3a4a5119fa1c786da1138d9831a2b362acd04ed..7e5ef31b33e731aac086d39971678f8f381dae28 100644
--- a/Marlin/printcounter.h
+++ b/Marlin/printcounter.h
@@ -138,8 +138,8 @@ class PrintCounter: public Stopwatch {
     /**
      * The following functions are being overridden
      */
-    void start();
-    void stop();
+    bool start();
+    bool stop();
     void reset();
 
     #if ENABLED(DEBUG_PRINTCOUNTER)
diff --git a/Marlin/stopwatch.cpp b/Marlin/stopwatch.cpp
index 4a1344db140fc9e8afd8422b90d36146e99cb964..7a9e90d3c76552a6b7ef17296f2f067cb178bf77 100644
--- a/Marlin/stopwatch.cpp
+++ b/Marlin/stopwatch.cpp
@@ -27,40 +27,46 @@ Stopwatch::Stopwatch() {
   this->reset();
 }
 
-void Stopwatch::stop() {
+bool Stopwatch::stop() {
   #if ENABLED(DEBUG_STOPWATCH)
     Stopwatch::debug(PSTR("stop"));
   #endif
 
-  if (!this->isRunning()) return;
-
-  this->state = STPWTCH_STOPPED;
-  this->stopTimestamp = millis();
+  if (this->isRunning() || this->isPaused()) {
+    this->state = STOPWATCH_STOPPED;
+    this->stopTimestamp = millis();
+    return true;
+  }
+  else return false;
 }
 
-void Stopwatch::pause() {
+bool Stopwatch::pause() {
   #if ENABLED(DEBUG_STOPWATCH)
     Stopwatch::debug(PSTR("pause"));
   #endif
 
-  if (!this->isRunning()) return;
-
-  this->state = STPWTCH_PAUSED;
-  this->stopTimestamp = millis();
+  if (this->isRunning()) {
+    this->state = STOPWATCH_PAUSED;
+    this->stopTimestamp = millis();
+    return true;
+  }
+  else return false;
 }
 
-void Stopwatch::start() {
+bool Stopwatch::start() {
   #if ENABLED(DEBUG_STOPWATCH)
     Stopwatch::debug(PSTR("start"));
   #endif
 
-  if (this->isRunning()) return;
-
-  if (this->isPaused()) this->accumulator = this->duration();
-  else this->reset();
+  if (!this->isRunning()) {
+    if (this->isPaused()) this->accumulator = this->duration();
+    else this->reset();
 
-  this->state = STPWTCH_RUNNING;
-  this->startTimestamp = millis();
+    this->state = STOPWATCH_RUNNING;
+    this->startTimestamp = millis();
+    return true;
+  }
+  else return false;
 }
 
 void Stopwatch::reset() {
@@ -68,18 +74,18 @@ void Stopwatch::reset() {
     Stopwatch::debug(PSTR("reset"));
   #endif
 
-  this->state = STPWTCH_STOPPED;
+  this->state = STOPWATCH_STOPPED;
   this->startTimestamp = 0;
   this->stopTimestamp = 0;
   this->accumulator = 0;
 }
 
 bool Stopwatch::isRunning() {
-  return (this->state == STPWTCH_RUNNING) ? true : false;
+  return (this->state == STOPWATCH_RUNNING) ? true : false;
 }
 
 bool Stopwatch::isPaused() {
-  return (this->state == STPWTCH_PAUSED) ? true : false;
+  return (this->state == STOPWATCH_PAUSED) ? true : false;
 }
 
 uint16_t Stopwatch::duration() {
diff --git a/Marlin/stopwatch.h b/Marlin/stopwatch.h
index 6ac69eaccdd16c5a921cb245360061638697f71c..f5ce2335ac708010781122b5241f3e9a29055066 100644
--- a/Marlin/stopwatch.h
+++ b/Marlin/stopwatch.h
@@ -29,9 +29,9 @@
 //#define DEBUG_STOPWATCH
 
 enum StopwatchState {
-  STPWTCH_STOPPED,
-  STPWTCH_RUNNING,
-  STPWTCH_PAUSED
+  STOPWATCH_STOPPED,
+  STOPWATCH_RUNNING,
+  STOPWATCH_PAUSED
 };
 
 /**
@@ -56,22 +56,25 @@ class Stopwatch {
      * @brief Stops the stopwatch
      * @details Stops the running timer, it will silently ignore the request if
      * no timer is currently running.
+     * @return true is method was successful
      */
-    void stop();
+    bool stop();
 
     /**
-     * @brief Pauses the stopwatch
+     * @brief Pause the stopwatch
      * @details Pauses the running timer, it will silently ignore the request if
      * no timer is currently running.
+     * @return true is method was successful
      */
-    void pause();
+    bool pause();
 
     /**
      * @brief Starts the stopwatch
      * @details Starts the timer, it will silently ignore the request if the
      * timer is already running.
+     * @return true is method was successful
      */
-    void start();
+    bool start();
 
     /**
      * @brief Resets the stopwatch
@@ -82,21 +85,21 @@ class Stopwatch {
     /**
      * @brief Checks if the timer is running
      * @details Returns true if the timer is currently running, false otherwise.
-     * @return bool
+     * @return true if stopwatch is running
      */
     bool isRunning();
 
     /**
      * @brief Checks if the timer is paused
      * @details Returns true if the timer is currently paused, false otherwise.
-     * @return bool
+     * @return true if stopwatch is paused
      */
     bool isPaused();
 
     /**
      * @brief Gets the running time
      * @details Returns the total number of seconds the timer has been running.
-     * @return uint16_t
+     * @return the delta since starting the stopwatch
      */
     uint16_t duration();