diff --git a/libsensors/MPLSensor.cpp b/libsensors/MPLSensor.cpp
index 2103d82..9663bfc 100644
--- a/libsensors/MPLSensor.cpp
+++ b/libsensors/MPLSensor.cpp
@@ -54,6 +54,7 @@
 }
 
 #include "mlcontrol.h"
+#include "sensor_params.h"
 
 #define EXTRA_VERBOSE (0)
 #define FUNC_LOG LOGV("%s", __PRETTY_FUNCTION__)
@@ -63,6 +64,33 @@
 
 #define CALL_MEMBER_FN(pobject,ptrToMember)  ((pobject)->*(ptrToMember))
 
+/******************************************/
+
+/* Base values for the sensor list, these need to be in the order defined in MPLSensor.h */
+static struct sensor_t sSensorList[] =
+    { { "MPL Gyro", "Invensense", 1,
+         SENSORS_GYROSCOPE_HANDLE,
+         SENSOR_TYPE_GYROSCOPE, 2000.0f, 1.0f, 0.5f, 10000, { } },
+      { "MPL accel", "Invensense", 1,
+         SENSORS_ACCELERATION_HANDLE,
+         SENSOR_TYPE_ACCELEROMETER, 10240.0f, 1.0f, 0.5f, 10000, { } },
+      { "MPL magnetic field", "Invensense", 1,
+         SENSORS_MAGNETIC_FIELD_HANDLE,
+         SENSOR_TYPE_MAGNETIC_FIELD, 10240.0f, 1.0f, 0.5f, 10000, { } },
+      { "MPL Orientation (android deprecated format)", "Invensense", 1,
+         SENSORS_ORIENTATION_HANDLE,
+         SENSOR_TYPE_ORIENTATION, 360.0f, 1.0f, 9.7f, 10000, { } },
+      { "MPL rotation vector", "Invensense", 1,
+         SENSORS_ROTATION_VECTOR_HANDLE,
+         SENSOR_TYPE_ROTATION_VECTOR, 10240.0f, 1.0f, 0.5f, 10000, { } },
+      { "MPL linear accel", "Invensense", 1,
+         SENSORS_LINEAR_ACCEL_HANDLE,
+         SENSOR_TYPE_LINEAR_ACCELERATION, 10240.0f, 1.0f, 0.5f, 10000, { } },
+      { "MPL gravity", "Invensense", 1,
+         SENSORS_GRAVITY_HANDLE,
+         SENSOR_TYPE_GRAVITY, 10240.0f, 1.0f, 0.5f, 10000, { } },
+};
+
 /* ***************************************************************************
  * MPL interface misc.
  */
@@ -127,6 +155,11 @@
 
     mForceSleep = false;
 
+    /* used for identifying whether 9axis is enabled or not             */
+    /* this variable will be changed in initMPL() when libmpl is loaded */
+    /* sensor list will be changed based on this variable               */
+    mNineAxisEnabled = false;
+
     for (i = 0; i < ARRAY_SIZE(mPollFds); i++) {
         mPollFds[i].fd = -1;
         mPollFds[i].events = 0;
@@ -436,10 +469,14 @@
         } else if ((*fp_inv_enable_9x_fusion)() != INV_SUCCESS) {
             LOGE( "Warning : 9 axis sensor fusion not available "
                   "- No compass detected.\n");
+        } else {
+            /*  9axis is loaded and enabled                            */
+            /*  this variable is used for coming up with sensor list   */
+            mNineAxisEnabled = true;
         }
     } else {
         const char* error = dlerror();
-        LOGE("libmpl.so not found, 9x sensor fusion disabled (%s)",error);
+        LOGE("libinvensense_mpl.so not found, 9x sensor fusion disabled (%s)",error);
     }
 
     mldl_cfg = inv_get_dl_config();
@@ -1072,3 +1109,245 @@
     mForceSleep = false;
     pthread_mutex_unlock(&mMplMutex);
 }
+
+/** fill in the sensor list based on which sensors are configured.
+ *  return the number of configured sensors.
+ *  parameter list must point to a memory region of at least 7*sizeof(sensor_t)
+ *  parameter len gives the length of the buffer pointed to by list
+ */
+
+int MPLSensor::populateSensorList(struct sensor_t *list, int len)
+{
+    int numsensors;
+
+    if(len < 7*sizeof(sensor_t)) {
+        LOGE("sensor list too small, not populating.");
+        return 0;
+    }
+
+    /* fill in the base values */
+    memcpy(list, sSensorList, sizeof (struct sensor_t) * 7);
+
+    /* get platform config  */
+    struct mldl_cfg *mldl_cfg = inv_get_dl_config();
+    if( mldl_cfg == NULL )
+    {
+        LOGE("Can not get mldl_cfg handle\n");
+        return 0;
+    }
+
+    /* first add gyro, accel and compass to the list */
+
+    /* fill in accel values                          */
+    fillAccel(mldl_cfg->accel->id, list);
+
+    /* fill in compass values                        */
+    fillCompass(mldl_cfg->compass->id, list);
+
+    /* fill in gyro values                           */
+    fillGyro(MPU_NAME, list);
+
+    if(mNineAxisEnabled)
+    {
+        numsensors = 7;
+        /* all sensors will be added to the list     */
+        /* fill in orientation values	             */
+        fillOrientation(list);
+
+        /* fill in rotation vector values	     */
+        fillRV(list);
+
+        /* fill in gravity values			     */
+        fillGravity(list);
+
+        /* fill in Linear accel values            */
+        fillLinearAccel(list);
+    } else {
+        /* no 9-axis sensors, zero fill that part of the list */
+        numsensors = 3;
+        memset(list+3, 0, 4*sizeof(struct sensor_t));
+    }
+
+    return numsensors;
+}
+
+void MPLSensor::fillAccel(unsigned char accel, struct sensor_t *list)
+{
+    switch (accel) {
+    case ACCEL_ID_LIS331:
+        list[Accelerometer].maxRange = ACCEL_LIS331_RANGE;
+        list[Accelerometer].resolution = ACCEL_LIS331_RESOLUTION;
+        list[Accelerometer].power = ACCEL_LIS331_POWER;
+        break;
+
+    case ACCEL_ID_LIS3DH:
+        list[Accelerometer].maxRange = ACCEL_LIS3DH_RANGE;
+        list[Accelerometer].resolution = ACCEL_LIS3DH_RESOLUTION;
+        list[Accelerometer].power = ACCEL_LIS3DH_POWER;
+        break;
+
+    case ACCEL_ID_KXSD9:
+        list[Accelerometer].maxRange = ACCEL_KXSD9_RANGE;
+        list[Accelerometer].resolution = ACCEL_KXSD9_RESOLUTION;
+        list[Accelerometer].power = ACCEL_KXSD9_POWER;
+        break;
+
+    case ACCEL_ID_KXTF9:
+        list[Accelerometer].maxRange = ACCEL_KXTF9_RANGE;
+        list[Accelerometer].resolution = ACCEL_KXTF9_RESOLUTION;
+        list[Accelerometer].power = ACCEL_KXTF9_POWER;
+        break;
+
+    case ACCEL_ID_BMA150:
+        list[Accelerometer].maxRange = ACCEL_BMA150_RANGE;
+        list[Accelerometer].resolution = ACCEL_BMA150_RESOLUTION;
+        list[Accelerometer].power = ACCEL_BMA150_POWER;
+        break;
+
+    case ACCEL_ID_BMA222:
+        list[Accelerometer].maxRange = ACCEL_BMA222_RANGE;
+        list[Accelerometer].resolution = ACCEL_BMA222_RESOLUTION;
+        list[Accelerometer].power = ACCEL_BMA222_POWER;
+        break;
+
+    case ACCEL_ID_BMA250:
+        list[Accelerometer].maxRange = ACCEL_BMA250_RANGE;
+        list[Accelerometer].resolution = ACCEL_BMA250_RESOLUTION;
+        list[Accelerometer].power = ACCEL_BMA250_POWER;
+        break;
+
+    case ACCEL_ID_ADXL34X:
+        list[Accelerometer].maxRange = ACCEL_ADXL34X_RANGE;
+        list[Accelerometer].resolution = ACCEL_ADXL34X_RESOLUTION;
+        list[Accelerometer].power = ACCEL_ADXL34X_POWER;
+        break;
+
+    case ACCEL_ID_MMA8450:
+        list[Accelerometer].maxRange = ACCEL_MMA8450_RANGE;
+        list[Accelerometer].maxRange = ACCEL_MMA8450_RANGE;
+        list[Accelerometer].maxRange = ACCEL_MMA8450_RANGE;
+        break;
+
+    case ACCEL_ID_MMA845X:
+        list[Accelerometer].maxRange = ACCEL_MMA845X_RANGE;
+        list[Accelerometer].resolution = ACCEL_MMA845X_RESOLUTION;
+        list[Accelerometer].power = ACCEL_MMA845X_POWER;
+        break;
+
+    case ACCEL_ID_MPU6050:
+        list[Accelerometer].maxRange = ACCEL_MPU6050_RANGE;
+        list[Accelerometer].resolution = ACCEL_MPU6050_RESOLUTION;
+        list[Accelerometer].power = ACCEL_MPU6050_POWER;
+        break;
+    default:
+        LOGE("unknown accel id -- accel params will be wrong.");
+        break;
+    }
+}
+
+void MPLSensor::fillCompass(unsigned char compass, struct sensor_t *list)
+{
+    switch (compass) {
+    case COMPASS_ID_AK8975:
+        list[MagneticField].maxRange = COMPASS_AKM8975_RANGE;
+        list[MagneticField].resolution = COMPASS_AKM8975_RESOLUTION;
+        list[MagneticField].power = COMPASS_AKM8975_POWER;
+        break;
+    case COMPASS_ID_AMI30X:
+        list[MagneticField].maxRange = COMPASS_AMI30X_RANGE;
+        list[MagneticField].resolution = COMPASS_AMI30X_RESOLUTION;
+        list[MagneticField].power = COMPASS_AMI30X_POWER;
+        break;
+    case COMPASS_ID_AMI306:
+        list[MagneticField].maxRange = COMPASS_AMI306_RANGE;
+        list[MagneticField].resolution = COMPASS_AMI306_RESOLUTION;
+        list[MagneticField].power = COMPASS_AMI306_POWER;
+        break;
+    case COMPASS_ID_YAS529:
+        list[MagneticField].maxRange = COMPASS_YAS529_RANGE;
+        list[MagneticField].resolution = COMPASS_AMI306_RESOLUTION;
+        list[MagneticField].power = COMPASS_AMI306_POWER;
+        break;
+    case COMPASS_ID_YAS530:
+        list[MagneticField].maxRange = COMPASS_YAS530_RANGE;
+        list[MagneticField].resolution = COMPASS_YAS530_RESOLUTION;
+        list[MagneticField].power = COMPASS_YAS530_POWER;
+        break;
+    case COMPASS_ID_HMC5883:
+        list[MagneticField].maxRange = COMPASS_HMC5883_RANGE;
+        list[MagneticField].resolution = COMPASS_HMC5883_RESOLUTION;
+        list[MagneticField].power = COMPASS_HMC5883_POWER;
+        break;
+    case COMPASS_ID_MMC314X:
+        list[MagneticField].maxRange = COMPASS_MMC314X_RANGE;
+        list[MagneticField].resolution = COMPASS_MMC314X_RESOLUTION;
+        list[MagneticField].power = COMPASS_MMC314X_POWER;
+        break;
+    case COMPASS_ID_HSCDTD002B:
+        list[MagneticField].maxRange = COMPASS_HSCDTD002B_RANGE;
+        list[MagneticField].resolution = COMPASS_HSCDTD002B_RESOLUTION;
+        list[MagneticField].power = COMPASS_HSCDTD002B_POWER;
+        break;
+    case COMPASS_ID_HSCDTD004A:
+        list[MagneticField].maxRange = COMPASS_HSCDTD004A_RANGE;
+        list[MagneticField].resolution = COMPASS_HSCDTD004A_RESOLUTION;
+        list[MagneticField].power = COMPASS_HSCDTD004A_POWER;
+        break;
+    default:
+        LOGE("unknown compass id -- compass parameters will be wrong");
+    }
+}
+
+void MPLSensor::fillGyro(const char* gyro, struct sensor_t *list)
+{
+    if ((gyro != NULL) && (strcmp(gyro, "mpu3050") == 0)) {
+        list[Gyro].maxRange = GYRO_MPU3050_RANGE;
+        list[Gyro].resolution = GYRO_MPU3050_RESOLUTION;
+        list[Gyro].power = GYRO_MPU3050_POWER;
+    } else {
+        list[Gyro].maxRange = GYRO_MPU6050_RANGE;
+        list[Gyro].resolution = GYRO_MPU6050_RESOLUTION;
+        list[Gyro].power = GYRO_MPU6050_POWER;
+    }
+    return;
+}
+
+
+/* fillRV depends on values of accel and compass in the list	*/
+void MPLSensor::fillRV(struct sensor_t *list)
+{
+    /* compute power on the fly */
+    list[RotationVector].power = list[Gyro].power + list[Accelerometer].power
+            + list[MagneticField].power;
+    list[RotationVector].resolution = .00001;
+    list[RotationVector].maxRange = 1.0;
+    return;
+}
+
+void MPLSensor::fillOrientation(struct sensor_t *list)
+{
+    list[Orientation].power = list[Gyro].power + list[Accelerometer].power
+            + list[MagneticField].power;
+    list[Orientation].resolution = .00001;
+    list[Orientation].maxRange = 360.0;
+    return;
+}
+
+void MPLSensor::fillGravity( struct sensor_t *list)
+{
+    list[Gravity].power = list[Gyro].power + list[Accelerometer].power
+            + list[MagneticField].power;
+    list[Gravity].resolution = .00001;
+    list[Gravity].maxRange = 9.81;
+    return;
+}
+
+void MPLSensor::fillLinearAccel(struct sensor_t *list)
+{
+    list[Gravity].power = list[Gyro].power + list[Accelerometer].power
+            + list[MagneticField].power;
+    list[Gravity].resolution = list[Accelerometer].resolution;
+    list[Gravity].maxRange = list[Accelerometer].maxRange;
+    return;
+}
+
diff --git a/libsensors/MPLSensor.h b/libsensors/MPLSensor.h
index 8febac3..d3b85d7 100644
--- a/libsensors/MPLSensor.h
+++ b/libsensors/MPLSensor.h
@@ -44,13 +44,13 @@
 
     enum
     {
-        RotationVector = 0,
-        LinearAccel,
-        Gravity,
-        Gyro,
+        Gyro=0,
         Accelerometer,
         MagneticField,
         Orientation,
+        RotationVector,
+        LinearAccel,
+        Gravity,
         numSensors
     };
 
@@ -66,6 +66,7 @@
     virtual void handlePowerEvent();
     virtual void sleepEvent();
     virtual void wakeEvent();
+    int populateSensorList(struct sensor_t *list, int len);
     void cbOnMotion(uint16_t);
     void cbProcData();
 
@@ -122,6 +123,15 @@
     long int mOldEnabledMask;
     android::KeyedVector<int, int> mIrqFds;
 
+    /* added for dynamic get sensor list              */
+    bool mNineAxisEnabled;
+    void fillAccel(unsigned char accel, struct sensor_t *list);
+    void fillCompass(unsigned char compass, struct sensor_t *list);
+    void fillGyro(const char* gyro, struct sensor_t *list);
+    void fillRV(struct sensor_t *list);
+    void fillOrientation(struct sensor_t *list);
+    void fillGravity(struct sensor_t *list);
+    void fillLinearAccel(struct sensor_t *list);
 };
 
 void setCallbackObject(MPLSensor*);
diff --git a/libsensors/sensor_params.h b/libsensors/sensor_params.h
new file mode 100644
index 0000000..35b64be
--- /dev/null
+++ b/libsensors/sensor_params.h
@@ -0,0 +1,134 @@
+/*
+ * Copyright (C) 2011 Invensense, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef INV_SENSOR_PARAMS_H
+#define INV_SENSOR_PARAMS_H
+
+/* Physical parameters of the sensors supported by Invensense MPL */
+#define SENSORS_ROTATION_VECTOR_HANDLE  (ID_RV)
+#define SENSORS_LINEAR_ACCEL_HANDLE     (ID_LA)
+#define SENSORS_GRAVITY_HANDLE          (ID_GR)
+#define SENSORS_GYROSCOPE_HANDLE        (ID_GY)
+#define SENSORS_ACCELERATION_HANDLE     (ID_A)
+#define SENSORS_MAGNETIC_FIELD_HANDLE   (ID_M)
+#define SENSORS_ORIENTATION_HANDLE      (ID_O)
+/******************************************/
+//COMPASS_ID_AKM
+#define COMPASS_AKM8975_RANGE       (9830.0f)
+#define COMPASS_AKM8975_RESOLUTION  (0.285f)
+#define COMPASS_AKM8975_POWER       (10.0f)
+//COMPASS_ID_AMI30X
+#define COMPASS_AMI30X_RANGE        (5461.0f)
+#define COMPASS_AMI30X_RESOLUTION   (0.9f)
+#define COMPASS_AMI30X_POWER        (0.15f)
+//COMPASS_ID_AMI306
+#define COMPASS_AMI306_RANGE        (5461.0f)
+#define COMPASS_AMI306_RESOLUTION   (0.9f)
+#define COMPASS_AMI306_POWER        (0.15f)
+//COMPASS_ID_YAS529
+#define COMPASS_YAS529_RANGE        (19660.0f)
+#define COMPASS_YAS529_RESOLUTION   (0.012f)
+#define COMPASS_YAS529_POWER        (4.0f)
+//COMPASS_ID_YAS530
+#define COMPASS_YAS530_RANGE        (8001.0f)
+#define COMPASS_YAS530_RESOLUTION   (0.012f)
+#define COMPASS_YAS530_POWER        (4.0f)
+//COMPASS_ID_HMC5883
+#define COMPASS_HMC5883_RANGE       (10673.0f)
+#define COMPASS_HMC5883_RESOLUTION  (10.0f)
+#define COMPASS_HMC5883_POWER       (0.24f)
+//COMPASS_ID_LSM303DLH
+#define COMPASS_LSM303DLH_RANGE     (10240.0f)
+#define COMPASS_LSM303DLH_RESOLUTION    (1.0f)
+#define COMPASS_LSM303DLH_POWER     (1.0f)
+//COMPASS_ID_LSM303DLM
+#define COMPASS_LSM303DLM_RANGE     (10240.0f)
+#define COMPASS_LSM303DLM_RESOLUTION    (1.0f)
+#define COMPASS_LSM303DLM_POWER     (1.0f)
+//COMPASS_ID_MMC314X
+#define COMPASS_MMC314X_RANGE       (400.0f)
+#define COMPASS_MMC314X_RESOLUTION  (2.0f)
+#define COMPASS_MMC314X_POWER       (0.55f)
+//COMPASS_ID_HSCDTD002B
+#define COMPASS_HSCDTD002B_RANGE    (9830.0f)
+#define COMPASS_HSCDTD002B_RESOLUTION   (1.0f)
+#define COMPASS_HSCDTD002B_POWER    (1.0f)
+//COMPASS_ID_HSCDTD004A
+#define COMPASS_HSCDTD004A_RANGE    (9830.0f)
+#define COMPASS_HSCDTD004A_RESOLUTION   (1.0f)
+#define COMPASS_HSCDTD004A_POWER    (1.0f)
+/*******************************************/
+//ACCEL_ID_LIS331
+#define ACCEL_LIS331_RANGE      (2.480f*GRAVITY_EARTH)
+#define ACCEL_LIS331_RESOLUTION     (.001f*GRAVITY_EARTH)
+#define ACCEL_LIS331_POWER      (1.0f)
+//ACCEL_ID_LSM303DLX
+#define ACCEL_LSM303DLX_RANGE       (2.480f*GRAVITY_EARTH)
+#define ACCEL_LSM303DLX_RESOLUTION  (0.001f*GRAVITY_EARTH)
+#define ACCEL_LSM303DLX_POWER       (1.0f)
+//ACCEL_ID_LIS3DH
+#define ACCEL_LIS3DH_RANGE      (2.480f*GRAVITY_EARTH)
+#define ACCEL_LIS3DH_RESOLUTION     (0.001f*GRAVITY_EARTH)
+#define ACCEL_LIS3DH_POWER      (1.0f)
+//ACCEL_ID_KXSD9
+#define ACCEL_KXSD9_RANGE       (2.5006f*GRAVITY_EARTH)
+#define ACCEL_KXSD9_RESOLUTION      (0.001f*GRAVITY_EARTH)
+#define ACCEL_KXSD9_POWER       (1.0f)
+//ACCEL_ID_KXTF9
+#define ACCEL_KXTF9_RANGE       (1.0f*GRAVITY_EARTH)
+#define ACCEL_KXTF9_RESOLUTION      (0.033f*GRAVITY_EARTH)
+#define ACCEL_KXTF9_POWER       (0.35f)
+//ACCEL_ID_BMA150
+#define ACCEL_BMA150_RANGE      (2.0f*GRAVITY_EARTH)
+#define ACCEL_BMA150_RESOLUTION     (0.004f*GRAVITY_EARTH)
+#define ACCEL_BMA150_POWER      (0.2f)
+//ACCEL_ID_BMA222
+#define ACCEL_BMA222_RANGE      (2.0f*GRAVITY_EARTH)
+#define ACCEL_BMA222_RESOLUTION     (0.001f*GRAVITY_EARTH)
+#define ACCEL_BMA222_POWER      (0.1f)
+//ACCEL_ID_BMA250
+#define ACCEL_BMA250_RANGE      (2.0f*GRAVITY_EARTH)
+#define ACCEL_BMA250_RESOLUTION     (0.00391f*GRAVITY_EARTH)
+#define ACCEL_BMA250_POWER      (0.139f)
+//ACCEL_ID_ADXL34X
+#define ACCEL_ADXL34X_RANGE     (2.0f*GRAVITY_EARTH)
+#define ACCEL_ADXL34X_RESOLUTION    (0.001f*GRAVITY_EARTH)
+#define ACCEL_ADXL34X_POWER     (1.0f)
+//ACCEL_ID_MMA8450
+#define ACCEL_MMA8450_RANGE     (2.0f*GRAVITY_EARTH)
+#define ACCEL_MMA8450_RESOLUTION    (0.001f*GRAVITY_EARTH)
+#define ACCEL_MMA8450_POWER     (1.0f)
+//ACCEL_ID_MMA845X
+#define ACCEL_MMA845X_RANGE     (2.0f*GRAVITY_EARTH)
+#define ACCEL_MMA845X_RESOLUTION    (0.001f*GRAVITY_EARTH)
+#define ACCEL_MMA845X_POWER     (1.0f)
+//ACCEL_ID_MPU6050
+#define ACCEL_MPU6050_RANGE     (2.0f*GRAVITY_EARTH)
+#define ACCEL_MPU6050_RESOLUTION    (0.004f*GRAVITY_EARTH)
+#define ACCEL_MPU6050_POWER     (0.0f)
+/******************************************/
+//GYRO MPU3050
+#define RAD_P_DEG (3.14159f/180.0f)
+#define GYRO_MPU3050_RANGE      (2000.0f*RAD_P_DEG)
+#define GYRO_MPU3050_RESOLUTION     (16.4f*RAD_P_DEG)
+#define GYRO_MPU3050_POWER      (6.1f)
+//GYRO MPU6050
+#define GYRO_MPU6050_RANGE      (2000.0f*RAD_P_DEG)
+#define GYRO_MPU6050_RESOLUTION     (16.4f*RAD_P_DEG)
+#define GYRO_MPU6050_POWER      (5.5f)
+
+#endif
+
diff --git a/libsensors/sensors.h b/libsensors/sensors.h
index 283870b..5c56da0 100644
--- a/libsensors/sensors.h
+++ b/libsensors/sensors.h
@@ -34,13 +34,13 @@
 #define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0]))
 
 #define ID_MPL_BASE (0)
-#define ID_RV (ID_MPL_BASE)
-#define ID_LA (ID_RV + 1)
-#define ID_GR (ID_LA + 1)
-#define ID_GY (ID_GR + 1)
+#define ID_GY (ID_MPL_BASE)
 #define ID_A  (ID_GY + 1)
 #define ID_M  (ID_A + 1)
 #define ID_O  (ID_M + 1)
+#define ID_RV (ID_O + 1) 
+#define ID_LA (ID_RV + 1)
+#define ID_GR (ID_LA + 1)
 
 /*****************************************************************************/
 
diff --git a/libsensors/sensors_mpl.cpp b/libsensors/sensors_mpl.cpp
index 44697bf..847ad91 100644
--- a/libsensors/sensors_mpl.cpp
+++ b/libsensors/sensors_mpl.cpp
@@ -44,23 +44,6 @@
 
 #define LIGHT_SENSOR_POLLTIME    2000000000
 
-#define SENSORS_ROTATION_VECTOR  (1<<ID_RV)
-#define SENSORS_LINEAR_ACCEL     (1<<ID_LA)
-#define SENSORS_GRAVITY          (1<<ID_GR)
-#define SENSORS_GYROSCOPE        (1<<ID_GY)
-#define SENSORS_ACCELERATION     (1<<ID_A)
-#define SENSORS_MAGNETIC_FIELD   (1<<ID_M)
-#define SENSORS_ORIENTATION      (1<<ID_O)
-
-#define SENSORS_ROTATION_VECTOR_HANDLE  (ID_RV)
-#define SENSORS_LINEAR_ACCEL_HANDLE     (ID_LA)
-#define SENSORS_GRAVITY_HANDLE          (ID_GR)
-#define SENSORS_GYROSCOPE_HANDLE        (ID_GY)
-#define SENSORS_ACCELERATION_HANDLE     (ID_A)
-#define SENSORS_MAGNETIC_FIELD_HANDLE   (ID_M)
-#define SENSORS_ORIENTATION_HANDLE      (ID_O)
-
-
 #define AKM_FTRACE 0
 #define AKM_DEBUG 0
 #define AKM_DATA 0
@@ -68,39 +51,8 @@
 /*****************************************************************************/
 
 /* The SENSORS Module */
-static const struct sensor_t sSensorList[] = {
-      { "MPL rotation vector",
-        "Invensense",
-        1, SENSORS_ROTATION_VECTOR_HANDLE,
-        SENSOR_TYPE_ROTATION_VECTOR, 10240.0f, 1.0f, 0.5f, 20000,{ } },
-      { "MPL linear accel",
-        "Invensense",
-        1, SENSORS_LINEAR_ACCEL_HANDLE,
-        SENSOR_TYPE_LINEAR_ACCELERATION, 10240.0f, 1.0f, 0.5f, 20000,{ } },
-      { "MPL gravity",
-        "Invensense",
-        1, SENSORS_GRAVITY_HANDLE,
-        SENSOR_TYPE_GRAVITY, 10240.0f, 1.0f, 0.5f, 20000,{ } },
-      { "MPL Gyro",
-        "Invensense",
-        1, SENSORS_GYROSCOPE_HANDLE,
-        SENSOR_TYPE_GYROSCOPE, 10240.0f, 1.0f, 0.5f, 20000,{ } },
-      { "MPL accel",
-        "Invensense",
-        1, SENSORS_ACCELERATION_HANDLE,
-        SENSOR_TYPE_ACCELEROMETER, 10240.0f, 1.0f, 0.5f, 20000,{ } },
-      { "MPL magnetic field",
-        "Invensense",
-        1, SENSORS_MAGNETIC_FIELD_HANDLE,
-        SENSOR_TYPE_MAGNETIC_FIELD, 10240.0f, 1.0f, 0.5f, 20000,{ } },
-      { "MPL Orientation (android deprecated format)",
-          "Invensense",
-          1, SENSORS_ORIENTATION_HANDLE,
-          SENSOR_TYPE_ORIENTATION, 360.0f, 1.0f, 9.7f, 20000,{ } },
-
-
-};
-
+static struct sensor_t sSensorList[7];
+static int numSensors=7;
 
 static int open_sensors(const struct hw_module_t* module, const char* id,
                         struct hw_device_t** device);
@@ -110,7 +62,7 @@
                                      struct sensor_t const** list)
 {
     *list = sSensorList;
-    return ARRAY_SIZE(sSensorList);
+    return numSensors;
 }
 
 static struct hw_module_methods_t sensors_module_methods = {
@@ -177,6 +129,7 @@
     FUNC_LOG;
     MPLSensor* p_mplsen = new MPLSensor();
     setCallbackObject(p_mplsen); //setup the callback object for handing mpl callbacks
+    numSensors = p_mplsen->populateSensorList(sSensorList, sizeof(sSensorList));
 
     mSensors[mpl] = p_mplsen;
     mPollFds[mpl].fd = mSensors[mpl]->getFd();
