diff --git a/Android.mk b/Android.mk
index a35de91..967a096 100644
--- a/Android.mk
+++ b/Android.mk
@@ -1,7 +1,6 @@
 # Copyright 2006 The Android Open Source Project
 
 # Setting LOCAL_PATH will mess up all-subdir-makefiles, so do it beforehand.
-SAVE_MAKEFILES := $(call all-subdir-makefiles)
 
 LOCAL_PATH:= $(call my-dir)
 include $(CLEAR_VARS)
@@ -19,8 +18,6 @@
 LOCAL_SHARED_LIBRARIES += libdl
 endif
 
-include $(SAVE_MAKEFILES)
-
 LOCAL_SRC_FILES += hardware.c
 
 # need "-lrt" on Linux simulator to pick up clock_gettime
@@ -36,5 +33,6 @@
 
 include $(addsuffix /Android.mk, $(addprefix $(LOCAL_PATH)/, \
 			modules/gralloc \
+			tests \
 		))
 		
\ No newline at end of file
diff --git a/include/hardware/sensors.h b/include/hardware/sensors.h
index 883cb47..a044e47 100644
--- a/include/hardware/sensors.h
+++ b/include/hardware/sensors.h
@@ -249,6 +249,53 @@
 } sensors_data_t;
 
 
+
+/**
+ * Union of the various types of sensor data
+ * that can be returned.
+ */
+typedef struct sensors_event_t {
+    /* must be sizeof(struct sensors_event_t) */
+    int32_t version;
+
+    /* sensor identifier */
+    int32_t sensor;
+
+    /* sensor type */
+    int32_t type;
+
+    /* reserved */
+    int32_t reserved0;
+
+    /* time is in nanosecond */
+    int64_t timestamp;
+
+    union {
+        float           data[16];
+
+        /* acceleration values are in meter per second per second (m/s^2) */
+        sensors_vec_t   acceleration;
+
+        /* magnetic vector values are in micro-Tesla (uT) */
+        sensors_vec_t   magnetic;
+
+        /* orientation values are in degrees */
+        sensors_vec_t   orientation;
+
+        /* temperature is in degrees centigrade (Celsius) */
+        float           temperature;
+
+        /* distance in centimeters */
+        float           distance;
+
+        /* light in SI lux units */
+        float           light;
+    };
+    uint32_t        reserved1[4];
+} sensors_event_t;
+
+
+
 struct sensor_t;
 
 /**
@@ -327,7 +374,7 @@
      *
      */
     int (*poll)(struct sensors_poll_device_t *dev,
-            sensors_data_t* data, int count);
+            sensors_event_t* data, int count);
 };
 
 
diff --git a/tests/nusensors/nusensors.cpp b/tests/nusensors/nusensors.cpp
index 215c972..5c6f332 100644
--- a/tests/nusensors/nusensors.cpp
+++ b/tests/nusensors/nusensors.cpp
@@ -73,7 +73,7 @@
                 list[i].power);
     }
 
-    sensors_data_t buffer[16];
+    sensors_event_t buffer[16];
 
     err = sensors_open(&module->common, &device);
     if (err != 0) {
@@ -100,12 +100,19 @@
 
         printf("read %d events:\n", n);
         for (int i=0 ; i<n ; i++) {
-            const sensors_data_t& data = buffer[i];
+            const sensors_event_t& data = buffer[i];
+
+            if (data.version != sizeof(sensors_event_t)) {
+                printf("incorrect event version (version=%d, expected=%d",
+                        data.version, sizeof(sensors_event_t));
+                break;
+            }
+
             switch(data.sensor) {
                 case SENSOR_TYPE_ACCELEROMETER:
                     printf("sensor=%s, time=%lld, value=<%5.1f,%5.1f,%5.1f>\n",
                             getSensorName(data.sensor),
-                            data.time,
+                            data.timestamp,
                             data.acceleration.x,
                             data.acceleration.y,
                             data.acceleration.z);
@@ -113,7 +120,7 @@
                 case SENSOR_TYPE_MAGNETIC_FIELD:
                     printf("sensor=%s, time=%lld, value=<%5.1f,%5.1f,%5.1f>\n",
                             getSensorName(data.sensor),
-                            data.time,
+                            data.timestamp,
                             data.magnetic.x,
                             data.magnetic.y,
                             data.magnetic.z);
@@ -121,7 +128,7 @@
                 case SENSOR_TYPE_ORIENTATION:
                     printf("sensor=%s, time=%lld, value=<%5.1f,%5.1f,%5.1f>\n",
                             getSensorName(data.sensor),
-                            data.time,
+                            data.timestamp,
                             data.orientation.azimuth,
                             data.orientation.pitch,
                             data.orientation.roll);
@@ -129,25 +136,25 @@
                 case SENSOR_TYPE_PROXIMITY:
                     printf("sensor=%s, time=%lld, value=%f\n",
                             getSensorName(data.sensor),
-                            data.time,
+                            data.timestamp,
                             data.distance);
                     break;
                 case SENSOR_TYPE_TEMPERATURE:
                     printf("sensor=%s, time=%lld, value=%f\n",
                             getSensorName(data.sensor),
-                            data.time,
+                            data.timestamp,
                             data.temperature);
                     break;
                 case SENSOR_TYPE_LIGHT:
                     printf("sensor=%s, time=%lld, value=%f\n",
                             getSensorName(data.sensor),
-                            data.time,
+                            data.timestamp,
                             data.light);
                     break;
                 default:
                     printf("sensor=%s, time=%lld, value=<%f,%f,%f>\n",
                             getSensorName(data.sensor),
-                            data.time,
+                            data.timestamp,
                             data.acceleration.x,
                             data.acceleration.y,
                             data.acceleration.z);
