diff --git a/CPP/register_modeling/example_project/driver/device.cpp b/CPP/register_modeling/example_project/driver/device.cpp
index 06f4851..e9ebe90 100644
--- a/CPP/register_modeling/example_project/driver/device.cpp
+++ b/CPP/register_modeling/example_project/driver/device.cpp
@@ -47,4 +47,21 @@ void Device::doSomething()
 
 
     
+}
+
+void Device::status()
+{
+    // imitating read hardware register
+    reg_motorStatus = 0xFF;
+
+    if(reg_motorStatus.bits.POWER == Reg_MotorStatus::POWER::ON) {
+        std::cout << "Motor is Powered ON!" << std::endl;
+    } else {
+        std::cout << "Motor is Powered OFF!" << std::endl;
+    }
+
+    // will throw error because this bitfield is set const!
+    //std::cout << "Motor is Powered ON!" << std::endl;
+    
+    std::cout << +reg_motorStatus.bits.POWER << std::endl;
 }
\ No newline at end of file
diff --git a/CPP/register_modeling/example_project/driver/device.hpp b/CPP/register_modeling/example_project/driver/device.hpp
index 32f4689..2f9e1ea 100644
--- a/CPP/register_modeling/example_project/driver/device.hpp
+++ b/CPP/register_modeling/example_project/driver/device.hpp
@@ -13,6 +13,8 @@ class Device
 
         void doSomething();
 
+        void status();
+
     private:
 
         //
@@ -71,8 +73,39 @@ class Device
             void operator = (uint8_t v) {raw = v;}
         };
 
+        union Reg_MotorStatus
+        {
+            struct POWER{
+                typedef BitField<uint8_t,0,1> Bits;
+                enum{OFF = 0, ON = 1};
+            };
+            struct STATUS{
+                typedef BitField<uint8_t, 2,3>Bits;
+                enum{STANDSTILL = 0,
+                     ACCELERATING_CW = 1,
+                     DEACCELERATING_CW = 2,
+                     ACCELERATING_CCW = 3,
+                     DEACCELERATING_CCW = 4,
+                     CONSTANT_SPEED = 5,
+                     BLOCKED = 6};
+            };
+            union Bits
+            {
+                // is set const because it only used for status indication
+                const Reg_MotorStatus::POWER::Bits POWER;
+                const Reg_MotorStatus::STATUS::Bits STATUS;
+            }bits;
+            uint8_t raw;
+
+            Reg_MotorStatus(uint8_t v = 0x00) : raw(v) {}
+            operator uint8_t() {return raw;}
+            void operator = (uint8_t v) {raw = v;}   
+        };
+
         Reg_Control reg_control;
 
+        Reg_MotorStatus reg_motorStatus;
+
 
 
 };
diff --git a/CPP/register_modeling/example_project/main.cpp b/CPP/register_modeling/example_project/main.cpp
index ab862ce..ea510f1 100644
--- a/CPP/register_modeling/example_project/main.cpp
+++ b/CPP/register_modeling/example_project/main.cpp
@@ -47,7 +47,9 @@ int main(void)
 
     Device dev;
 
-    dev.doSomething();
+    //dev.doSomething();
+
+    dev.status();
 
     //dev.doSomething();
 
diff --git a/CPP/register_modeling/example_project/runtest b/CPP/register_modeling/example_project/runtest
index 869ff84..107aae9 100755
Binary files a/CPP/register_modeling/example_project/runtest and b/CPP/register_modeling/example_project/runtest differ