diff --git a/src/axis_imu.cc b/src/axis_imu.cc
index 15b9d06ef224a6a1bd5b84c9d546898a9adb24d0..9f6a1b8b4277bed7470e68bf5a2705363f526922 100644
--- a/src/axis_imu.cc
+++ b/src/axis_imu.cc
@@ -18,7 +18,7 @@ std::string frame_id;
 
 ros::Publisher imu_pub;
 
-// 1 byte header ('A' eller 'G') | float32 timestamp | float32 x | float32 y | float32 z
+// 1 byte header ('A' eller 'G') | float64 timestamp | float64 x | float64 y | float64 z
 //
 // Headern 'A' och 'G' står för accelerometer respektive gyro.
 // timestamp är sekunder sedan kamerans uppstart
@@ -50,6 +50,17 @@ float bytesToFloat(unsigned char b0, unsigned char b1, unsigned char b2,  unsign
   return result;
 } 
 
+double bytesToDouble(unsigned char b0, unsigned char b1, unsigned char b2,  unsigned char b3,
+                     unsigned char b4, unsigned char b5, unsigned char b6,  unsigned char b7) { 
+  //  unsigned char byte_array[] = { b3, b2, b1, b0 };
+  unsigned char byte_array[] = { b0, b1, b2, b3, b4, b5, b6, b7 };
+  double result;
+  std::copy(reinterpret_cast<const char*>(&byte_array[0]),
+            reinterpret_cast<const char*>(&byte_array[8]),
+            reinterpret_cast<char*>(&result));
+  return result;
+} 
+
 class udp_server {
 public:
   udp_server(boost::asio::io_service& io_service, int port_number)
@@ -72,20 +83,29 @@ private:
                       std::size_t bytes_transferred) {
     if (!error || error == boost::asio::error::message_size) {
       // cerr << "Got message: " << bytes_transferred << " - " << recv_buffer_[0] << endl;
-      float time = bytesToFloat(recv_buffer_[1], recv_buffer_[2], recv_buffer_[3], recv_buffer_[4]);
-      float ax, ay, az, gx, gy, gz;
+      //      float time = bytesToFloat(recv_buffer_[1], recv_buffer_[2], recv_buffer_[3], recv_buffer_[4]);
+      double time = bytesToDouble(recv_buffer_[1], recv_buffer_[2], recv_buffer_[3], recv_buffer_[4],
+                                  recv_buffer_[5], recv_buffer_[6], recv_buffer_[7], recv_buffer_[8]);
+      //float ax, ay, az, gx, gy, gz;
+      double ax, ay, az, gx, gy, gz, v0, v1, v2;
+      v0 = bytesToDouble(recv_buffer_[9], recv_buffer_[10], recv_buffer_[11], recv_buffer_[12],
+                         recv_buffer_[13], recv_buffer_[14], recv_buffer_[15], recv_buffer_[16]);
+      v1 = bytesToDouble(recv_buffer_[17], recv_buffer_[18], recv_buffer_[19], recv_buffer_[20],
+                         recv_buffer_[21], recv_buffer_[22], recv_buffer_[23], recv_buffer_[24]);
+      v2 = bytesToDouble(recv_buffer_[25], recv_buffer_[26], recv_buffer_[27], recv_buffer_[28],
+                         recv_buffer_[29], recv_buffer_[30], recv_buffer_[31], recv_buffer_[32]);
       if (recv_buffer_[0] == 'A') {
         have_acc_flag = true;
-        ax = bytesToFloat(recv_buffer_[5], recv_buffer_[6], recv_buffer_[7], recv_buffer_[8]);
-        ay = bytesToFloat(recv_buffer_[9], recv_buffer_[10], recv_buffer_[11], recv_buffer_[12]);
-        az = bytesToFloat(recv_buffer_[13], recv_buffer_[14], recv_buffer_[15], recv_buffer_[16]);
+        ax = v0;
+        ay = v1;
+        az = v2;
         ROS_ERROR("ACCELEROMETER: %f - %f %f %f", time, ax, ay, az);
       }
       if (recv_buffer_[0] == 'G') {
         have_gyro_flag = true;
-        gx = bytesToFloat(recv_buffer_[5], recv_buffer_[6], recv_buffer_[7], recv_buffer_[8]);
-        gy = bytesToFloat(recv_buffer_[9], recv_buffer_[10], recv_buffer_[11], recv_buffer_[12]);
-        gz = bytesToFloat(recv_buffer_[13], recv_buffer_[14], recv_buffer_[15], recv_buffer_[16]);
+        gx = v0;
+        gy = v1;
+        gz = v2;
         ROS_ERROR("         GYRO: %f - %f %f %f", time, gx, gy, gz);        
       }