diff --git a/src/lib/systemlib/hysteresis/hysteresis.cpp b/src/lib/systemlib/hysteresis/hysteresis.cpp
index 33aee834c1a5f22decc0a0a7d0e3064259213f6e..473867d044009425da7455cfbbde6cf0fea84088 100644
--- a/src/lib/systemlib/hysteresis/hysteresis.cpp
+++ b/src/lib/systemlib/hysteresis/hysteresis.cpp
@@ -37,13 +37,21 @@
  * @author Julian Oes <julian@oes.ch>
  */
 
-#include <px4_log.h>
-#include "systemlib/hysteresis/hysteresis.h"
-
+#include "hysteresis.h"
 
 namespace systemlib
 {
 
+void
+Hysteresis::set_hysteresis_time_from(const bool from_state, const hrt_abstime new_hysteresis_time_us)
+{
+	if (from_state == true) {
+		_time_from_true_us = new_hysteresis_time_us;
+
+	} else {
+		_time_from_false_us = new_hysteresis_time_us;
+	}
+}
 
 void
 Hysteresis::set_state_and_update(const bool new_state)
@@ -66,10 +74,19 @@ Hysteresis::update()
 {
 	if (_requested_state != _state) {
 
-		if (hrt_elapsed_time(&_last_time_to_change_state) >= (_state ?
-				_hysteresis_time_from_true_us :
-				_hysteresis_time_from_false_us)) {
-			_state = _requested_state;
+		const hrt_abstime elapsed = hrt_elapsed_time(&_last_time_to_change_state);
+
+		if (_state && !_requested_state) {
+			// true -> false
+			if (elapsed >= _time_from_true_us) {
+				_state = false;
+			}
+
+		} else if (!_state && _requested_state) {
+			// false -> true
+			if (elapsed >= _time_from_false_us) {
+				_state = true;
+			}
 		}
 	}
 }
diff --git a/src/lib/systemlib/hysteresis/hysteresis.h b/src/lib/systemlib/hysteresis/hysteresis.h
index 97cd6c049e90ec1c385e1b67c859f8643c051110..2fbc271d0c69b8cbe172507a110fe62a2852f49f 100644
--- a/src/lib/systemlib/hysteresis/hysteresis.h
+++ b/src/lib/systemlib/hysteresis/hysteresis.h
@@ -49,31 +49,17 @@ namespace systemlib
 class Hysteresis
 {
 public:
-	Hysteresis(bool init_state) :
+	explicit Hysteresis(bool init_state) :
 		_state(init_state),
-		_requested_state(init_state),
-		_hysteresis_time_from_true_us(0),
-		_hysteresis_time_from_false_us(0),
-		_last_time_to_change_state(0)
+		_requested_state(init_state)
 	{}
+	Hysteresis() = delete; // no default constructor
 
-	~Hysteresis()
-	{}
-
-	void set_hysteresis_time_from(const bool from_state, const hrt_abstime new_hysteresis_time_us)
-	{
-		if (from_state == true) {
-			_hysteresis_time_from_true_us = new_hysteresis_time_us;
+	~Hysteresis() = default;
 
-		} else {
-			_hysteresis_time_from_false_us = new_hysteresis_time_us;
-		}
-	}
+	bool get_state() const { return _state; }
 
-	bool get_state() const
-	{
-		return _state;
-	}
+	void set_hysteresis_time_from(const bool from_state, const hrt_abstime new_hysteresis_time_us);
 
 	void set_state_and_update(const bool new_state);
 
@@ -81,11 +67,13 @@ public:
 
 private:
 
+	hrt_abstime _last_time_to_change_state{0};
+
+	hrt_abstime _time_from_true_us{0};
+	hrt_abstime _time_from_false_us{0};
+
 	bool _state;
 	bool _requested_state;
-	hrt_abstime _hysteresis_time_from_true_us;
-	hrt_abstime _hysteresis_time_from_false_us;
-	hrt_abstime _last_time_to_change_state;
 };
 
 } // namespace systemlib