diff --git a/6515/libsensors_iio/Android.mk b/6515/libsensors_iio/Android.mk
index 64dba37..993d52e 100755
--- a/6515/libsensors_iio/Android.mk
+++ b/6515/libsensors_iio/Android.mk
@@ -146,6 +146,7 @@
 LOCAL_SHARED_LIBRARIES += libdl
 LOCAL_SHARED_LIBRARIES += liblog
 LOCAL_SHARED_LIBRARIES += libmllite
+LOCAL_SHARED_LIBRARIES += libhardware_legacy
 include $(BUILD_SHARED_LIBRARY)
 
 include $(CLEAR_VARS)
diff --git a/6515/libsensors_iio/sensors_mpl.cpp b/6515/libsensors_iio/sensors_mpl.cpp
index 3e1ff52..df0a97f 100755
--- a/6515/libsensors_iio/sensors_mpl.cpp
+++ b/6515/libsensors_iio/sensors_mpl.cpp
@@ -16,6 +16,7 @@
 
 #define FUNC_LOG LOGV("%s", __PRETTY_FUNCTION__)
 
+#include <hardware_legacy/power.h>
 #include <hardware/sensors.h>
 #include <fcntl.h>
 #include <errno.h>
@@ -61,6 +62,8 @@
 struct simplehead *headp;
 static pthread_mutex_t flush_handles_mutex = PTHREAD_MUTEX_INITIALIZER;
 
+static const char *smdWakelockStr = "significant motion";
+
 static struct sensor_t sSensorList[LOCAL_SENSORS];
 static int sensors = (sizeof(sSensorList) / sizeof(sensor_t));
 
@@ -121,6 +124,10 @@
     struct pollfd mPollFds[numFds];
     SensorBase *mSensor;
     CompassSensor *mCompassSensor;
+
+    /* Significant Motion wakelock support */
+    bool mSMDWakelockHeld;
+
 };
 
 /******************************************************************************/
@@ -132,6 +139,9 @@
     mCompassSensor = new CompassSensor();
     MPLSensor *mplSensor = new MPLSensor(mCompassSensor);
 
+    /* No significant motion events pending yet */
+    mSMDWakelockHeld = false;
+
    /* For Vendor-defined Accel Calibration File Load
     * Use the Following Constructor and Pass Your Load Cal File Function
     * 
@@ -197,6 +207,11 @@
     int nbEvents = 0;
     int nb, polltime = -1;
 
+    if (mSMDWakelockHeld) {
+        mSMDWakelockHeld = false;
+        release_wake_lock(smdWakelockStr);
+    }
+
     struct handle_entry *handle_element;
     pthread_mutex_lock(&flush_handles_mutex);
     if (!SIMPLEQ_EMPTY(&pending_flush_items_head)) {
@@ -243,9 +258,18 @@
                     nb = ((MPLSensor*) mSensor)->
                                     readDmpSignificantMotionEvents(data, count);
                     mPollFds[i].revents = 0;
-                    count -= nb;
-                    nbEvents += nb;
-                    data += nb; 
+                    if (nb) {
+                        if (!mSMDWakelockHeld) {
+                            /* Hold wakelock until Sensor Services reads event */
+                            acquire_wake_lock(PARTIAL_WAKE_LOCK, smdWakelockStr);
+                            LOGI_IF(1, "HAL: grabbed %s wakelock", smdWakelockStr);
+                            mSMDWakelockHeld = true;
+                        }
+
+                        count -= nb;
+                        nbEvents += nb;
+                        data += nb;
+                    }
                 } else if (i == dmpPed) {
                     nb = ((MPLSensor*) mSensor)->readDmpPedometerEvents(
                             data, count, ID_P, 0);
@@ -299,14 +323,6 @@
                 data += nb;
             }
         }
-
-        if (mPollFds[numSensorDrivers].revents & POLLIN) {
-            char msg;
-            int result = read(mPollFds[numSensorDrivers].fd, &msg, 1);
-            LOGE_IF(result < 0, 
-                    "error reading from wake pipe (%s)", strerror(errno));
-            mPollFds[numSensorDrivers].revents = 0;
-        }
     }
     return nbEvents;
 }
