diff --git a/common/include/measurement.h b/common/include/measurement.h
index d48eef33e9135e85d80378ff57847b94ce40b23f..ec241d12cfd390360ea953aac2b35eff779674d4 100644
--- a/common/include/measurement.h
+++ b/common/include/measurement.h
@@ -38,7 +38,7 @@ enum measurement_data_type {
  * typedef message_data_type_t - Alias for uint32_t representing the measurement
  * data type.
  */
-typedef uint32_t measurement_data_type_t;
+typedef uint8_t measurement_data_type_t;
 
 /**
  * typedef measurement_data_t - Union to hold different types of measurement
diff --git a/kernel/kmod.c b/kernel/kmod.c
index 7dfff87ac8ce66fe498460abf36b8b06a56998c8..806a5ea69fa1764ae8dbceefb640b7af0bfe9d0c 100644
--- a/kernel/kmod.c
+++ b/kernel/kmod.c
@@ -72,7 +72,7 @@ static void prepare_for_sending(void) {
   uint8_t *bytes = (uint8_t *)packet->data.measurements;
 
   for (size_t i = 0; i < sizeof(measurement_t) * packet->data.count; i++) {
-    send_buffer[bytes[3 + i]] = bytes[i];
+    send_buffer[3 + i] = bytes[i];
   }
 
   bytes = (uint8_t *)&packet->crc;
@@ -87,37 +87,29 @@ static void prepare_for_sending(void) {
 
 static ssize_t device_write(struct file *filp, const char *input, size_t length,
                             loff_t *offset) {
-  if (length != sizeof(data_t)) {
-    printk(KERN_ALERT "lkm: Tried to write more bytes than allowed\n");
+  data_t temp_data;
+
+  if (copy_from_user(&temp_data, input, sizeof(data_t))) {
     return -EFAULT;
   }
 
-  if (((data_t *)input)->count >= MAX_MEASUREMENTS) {
+  if (temp_data.count >= MAX_MEASUREMENTS) {
     printk(KERN_ALERT "lkm: Tried to write more measurements than allowed\n");
     return -EFAULT;
   }
 
-  if (copy_from_user((void *)&(packet->data.sender_id),
-                     (void *)&(((data_t *)input)->sender_id),
-                     sizeof(uint8_t))) {
-    return -EFAULT;
-  }
+  packet->data.sender_id = temp_data.sender_id;
+  packet->data.count = temp_data.count;
 
-  if (copy_from_user((void *)&(packet->data.count),
-                     (void *)&(((data_t *)input)->count), sizeof(uint8_t))) {
-    return -EFAULT;
-  }
-
-  if (copy_from_user((void *)packet->data.measurements,
-                     (void *)((data_t *)input)->measurements,
-                     sizeof(measurement_t) * packet->data.count)) {
-    return -EFAULT;
+  if (temp_data.measurements != NULL) {
+    if (copy_from_user(packet->data.measurements, temp_data.measurements,
+                       sizeof(measurement_t) * temp_data.count)) {
+      return -EFAULT;
+    }
   }
 
   prepare_for_sending();
 
-  printk(KERN_INFO "lkm: received write of size %zu\n", length);
-
   return length;
 }