diff --git a/src/register/hei_operator_register.hpp b/src/register/hei_operator_register.hpp
index a0d0f6c..02c9b1d 100644
--- a/src/register/hei_operator_register.hpp
+++ b/src/register/hei_operator_register.hpp
@@ -74,11 +74,13 @@
         return &iv_result;
     }
 
+    /** @brief Comparison operator. */
     bool operator==(const NotRegister& r) const
     {
-        return r.iv_child == iv_child;
+        return iv_child == r.iv_child;
     }
 
+    /** @brief Less-than operator. */
     bool operator<(const NotRegister& r) const
     {
         return iv_child < r.iv_child;
@@ -119,11 +121,13 @@
         return &iv_result;
     }
 
+    /** @brief Comparison operator. */
     bool operator==(const LeftShiftRegister& r) const
     {
-        return (r.iv_child == iv_child) && (r.iv_amount == iv_amount);
+        return (iv_child == r.iv_child) && (iv_amount == r.iv_amount);
     }
 
+    /** @brief Less-than operator. */
     bool operator<(const LeftShiftRegister& r) const
     {
         if (iv_child == r.iv_child)
@@ -167,11 +171,13 @@
         return &iv_result;
     }
 
+    /** @brief Comparison operator. */
     bool operator==(const RightShiftRegister& r) const
     {
-        return (r.iv_child == iv_child) && (r.iv_amount == iv_amount);
+        return (iv_child == r.iv_child) && (iv_amount == r.iv_amount);
     }
 
+    /** @brief Less-than operator. */
     bool operator<(const RightShiftRegister& r) const
     {
         if (iv_child == r.iv_child)
@@ -217,11 +223,13 @@
         return &iv_result;
     }
 
+    /** @brief Comparison operator. */
     bool operator==(const AndRegister& r) const
     {
-        return (r.iv_left == iv_left) && (r.iv_right == iv_right);
+        return (iv_left == r.iv_left) && (iv_right == r.iv_right);
     }
 
+    /** @brief Less-than operator. */
     bool operator<(const AndRegister& r) const
     {
         if (iv_left == r.iv_left)
@@ -267,11 +275,13 @@
         return &iv_result;
     }
 
+    /** @brief Comparison operator. */
     bool operator==(const OrRegister& r) const
     {
-        return (r.iv_left == iv_left) && (r.iv_right == iv_right);
+        return (iv_left == r.iv_left) && (iv_right == r.iv_right);
     }
 
+    /** @brief Less-than operator. */
     bool operator<(const OrRegister& r) const
     {
         if (iv_left == r.iv_left)
@@ -312,9 +322,16 @@
         return &iv_result;
     }
 
+    /** @brief Comparison operator. */
     bool operator==(const ConstantRegister& r) const
     {
-        return r.iv_result == iv_result;
+        return iv_result == r.iv_result;
+    }
+
+    /** @brief Less-than operator. */
+    bool operator<(const ConstantRegister& r) const
+    {
+        return iv_result < r.iv_result;
     }
 };
 
diff --git a/src/util/hei_bit_string.cpp b/src/util/hei_bit_string.cpp
index b1780ca..16713ec 100644
--- a/src/util/hei_bit_string.cpp
+++ b/src/util/hei_bit_string.cpp
@@ -284,6 +284,35 @@
 
 //------------------------------------------------------------------------------
 
+bool BitString::operator<(const BitString& i_str) const
+{
+    // The two bit strings must be the same length. Otherwise, the comparison
+    // undefined (i.e. compare from the left vs. right).
+    HEI_ASSERT(getBitLen() == i_str.getBitLen());
+
+    for (uint64_t pos = 0; pos < getBitLen(); pos += UINT64_BIT_LEN)
+    {
+        uint64_t len = std::min(getBitLen() - pos, UINT64_BIT_LEN);
+
+        auto l_str = getFieldRight(pos, len);
+        auto r_str = i_str.getFieldRight(pos, len);
+
+        if (l_str < r_str)
+        {
+            return true;
+        }
+        // The loop can only continue if the values are equal.
+        else if (l_str > r_str)
+        {
+            return false;
+        }
+    }
+
+    return false;
+}
+
+//------------------------------------------------------------------------------
+
 BitStringBuffer BitString::operator~() const
 {
     BitStringBuffer bsb(getBitLen());
diff --git a/src/util/hei_bit_string.hpp b/src/util/hei_bit_string.hpp
index 4b63906..0bb4d8c 100644
--- a/src/util/hei_bit_string.hpp
+++ b/src/util/hei_bit_string.hpp
@@ -333,6 +333,9 @@
         return isEqual(i_str);
     }
 
+    /** @brief Less-than operator */
+    bool operator<(const BitString& i_str) const;
+
     /** @brief Bitwise NOT operator. */
     BitStringBuffer operator~() const;
 
