diff --git a/source/+DeviceMode/HTAccelerometer.m b/source/+DeviceMode/HTAccelerometer.m
new file mode 100644
index 0000000000000000000000000000000000000000..6808afdbb515f11f0f8793c48f921b57d98d4e79
--- /dev/null
+++ b/source/+DeviceMode/HTAccelerometer.m
@@ -0,0 +1,7 @@
+classdef HTAccelerometer < uint8
+    enumeration
+        Acceleration (0)
+        AccelerationAllAxes (1)
+    end
+end
+
diff --git a/source/+DeviceMode/HTColor.m b/source/+DeviceMode/HTColor.m
new file mode 100644
index 0000000000000000000000000000000000000000..bbd2aca4a3d8612371745546ba7e941eebfefe39
--- /dev/null
+++ b/source/+DeviceMode/HTColor.m
@@ -0,0 +1,12 @@
+classdef HTColor < uint8
+    enumeration
+        Col (0)
+        Red (1)
+        Green (2)
+        Blue (3)
+        White (4)
+        Raw (5)
+        Nrm (6)
+        All (7)
+    end
+end
\ No newline at end of file
diff --git a/source/+DeviceMode/HTCompass.m b/source/+DeviceMode/HTCompass.m
new file mode 100644
index 0000000000000000000000000000000000000000..1ed8055ee502da8633456372e9d3792d9ed923ef
--- /dev/null
+++ b/source/+DeviceMode/HTCompass.m
@@ -0,0 +1,6 @@
+classdef HTCompass < uint8
+    enumeration
+        Degrees (0)
+    end
+end
+
diff --git a/source/DeviceMode.m b/source/DeviceMode.m
index 146666fcae37a1cfad442d497edc0bbca9a104f9..a66536f6af7a31a9bc94813cb63420cf4c898720 100755
--- a/source/DeviceMode.m
+++ b/source/DeviceMode.m
@@ -34,6 +34,12 @@ function mode = DeviceMode(type, modeNo)
                 mode = DeviceMode.Gyro(modeNo);
             case DeviceType.InfraRed
                 mode = DeviceMode.InfraRed(modeNo);
+            case DeviceType.HTColor
+                mode = DeviceMode.HTColor(modeNo);
+            case DeviceType.HTCompass
+                mode = DeviceMode.HTCompass(modeNo);
+            case DeviceType.HTAccelerometer
+                mode = DeviceMode.HTAccelerometer(modeNo);
             otherwise
                 mode = DeviceMode.Default.Undefined; % Need to think about this...
         end
diff --git a/source/DeviceType.m b/source/DeviceType.m
index 4afa3f9cd8d3f47da56a69dff63cb8ce5aaeef6c..1fb6e75590cf72fb5b587e38344de8d8b1400df3 100644
--- a/source/DeviceType.m
+++ b/source/DeviceType.m
@@ -13,6 +13,9 @@ classdef DeviceType < uint8
         UltraSonic (30)
         Gyro (32)
         InfraRed (33)
+        HTColor (54)
+        HTCompass (56)
+        HTAccelerometer (58)
         Unknown (125)
         None (126)
         Error (127)
diff --git a/source/private/isModeValid.m b/source/private/isModeValid.m
index debc72a9bd4a9687e418b51490f00f387e743b6e..1bec154a662a1d0acf7804b69014a689949fd97f 100755
--- a/source/private/isModeValid.m
+++ b/source/private/isModeValid.m
@@ -59,6 +59,18 @@ function isValid = isModeValid(mode, type)
             if ~strcmp(class(mode), 'DeviceMode.InfraRed')
                 isValid = false;
             end
+        case DeviceType.HTColor
+            if ~strcmp(class(mode), 'DeviceMode.HTColor')
+                isValid = false;
+            end
+        case DeviceType.HTCompass
+            if ~strcmp(class(mode), 'DeviceMode.HTCompass')
+                isValid = false;
+            end
+        case DeviceType.HTAccelerometer
+            if ~strcmp(class(mode), 'DeviceMode.HTAccelerometer')
+                isValid = false;
+            end
         otherwise
             isValid = false;
     end
diff --git a/typedata.ods b/typedata.ods
index 1a573c687ac47d297f1673388f58e428095cfc15..95323d3b03637ef0ecf89a9e9eb583304d2e3ea8 100644
Binary files a/typedata.ods and b/typedata.ods differ