diff --git a/src/register/hei_hardware_register.hpp b/src/register/hei_hardware_register.hpp
index ae7480e..0f5ac61 100644
--- a/src/register/hei_hardware_register.hpp
+++ b/src/register/hei_hardware_register.hpp
@@ -100,22 +100,45 @@
     /** @brief Equals operator. */
     bool operator==(const HardwareRegister& i_r) const
     {
-        // Comparing register type and address should be sufficient.
-        return (getAddress() == i_r.getAddress()) &&
+        // In general, comparing the ID and instance should be enough. However,
+        // no error will be thrown when adding the register to the flyweights
+        // and any other field differs. Therfore all fields will be used and
+        // invalid duplicates will be found when adding the register pointers
+        // to the IsolationChip objects.
+        return (getAddress() == i_r.getAddress()) && (getId() == i_r.getId()) &&
+               (getInstance() == i_r.getInstance()) &&
                (getType() == i_r.getType());
     }
 
     /** @brief Less than operator. */
     bool operator<(const HardwareRegister& i_r) const
     {
-        // Comparing register type and address should be sufficient.
+        // In general, comparing the ID and instance should be enough. However,
+        // no error will be thrown when adding the register to the flyweights
+        // and any other field differs. Therfore all fields will be used and
+        // invalid duplicates will be found when adding the register pointers
+        // to the IsolationChip objects.
         if (getAddress() < i_r.getAddress())
         {
             return true;
         }
         else if (getAddress() == i_r.getAddress())
         {
-            return (getType() < i_r.getType());
+            if (getId() < i_r.getId())
+            {
+                return true;
+            }
+            else if (getId() == i_r.getId())
+            {
+                if (getInstance() < i_r.getInstance())
+                {
+                    return true;
+                }
+                else if (getInstance() == i_r.getInstance())
+                {
+                    return (getType() < i_r.getType());
+                }
+            }
         }
 
         return false;
diff --git a/src/register/hei_scom_register.hpp b/src/register/hei_scom_register.hpp
index 47a6852..040bd4f 100644
--- a/src/register/hei_scom_register.hpp
+++ b/src/register/hei_scom_register.hpp
@@ -33,24 +33,10 @@
     ~ScomRegister() = default;
 
   private:
-    // This is needed to allow the flyweights to use the copy constructor, but
-    // not allow it to be used in general.
-    friend class Flyweight<ScomRegister>;
+    /** @brief Copy constructor. */
+    ScomRegister(const ScomRegister&) = delete;
 
-    /**
-     * @brief Copy constructor.
-     *
-     * Needed by Flyweight class, but should not be allowed in general.
-     */
-    ScomRegister(const ScomRegister&) = default;
-
-    /**
-     * @brief Explicitly disables assignment operator.
-     *
-     * This is redundant since the compilier will implicitly delete this because
-     * of the constant instance variables, but helps communicate it is not
-     * allowed.
-     */
+    /** @brief Assignment operator. */
     ScomRegister& operator=(const ScomRegister&) = delete;
 
   public: // Accessor functions
@@ -112,24 +98,10 @@
     ~IdScomRegister() = default;
 
   private:
-    // This is needed to allow the flyweights to use the copy constructor, but
-    // not allow it to be used in general.
-    friend class Flyweight<IdScomRegister>;
+    /** @brief Copy constructor. */
+    IdScomRegister(const IdScomRegister&) = delete;
 
-    /**
-     * @brief Copy constructor.
-     *
-     * Needed by Flyweight class, but should not be allowed in general.
-     */
-    IdScomRegister(const IdScomRegister&) = default;
-
-    /**
-     * @brief Explicitly disables assignment operator.
-     *
-     * This is redundant since the compilier will implicitly delete this because
-     * of the constant instance variables, but helps communicate it is not
-     * allowed.
-     */
+    /** @brief Assignment operator. */
     IdScomRegister& operator=(const IdScomRegister&) = delete;
 
   public: // Accessor functions
