diff --git a/Android.mk b/Android.mk
index f487428..2a68027 100644
--- a/Android.mk
+++ b/Android.mk
@@ -23,6 +23,8 @@
 LOCAL_JAVA_LIBRARIES := javax.obex
 LOCAL_JAVA_LIBRARIES += mms-common
 LOCAL_JAVA_LIBRARIES += telephony-common
+LOCAL_JAVA_LIBRARIES += com.quicinc.wbc
+
 LOCAL_STATIC_JAVA_LIBRARIES := com.android.vcard
 
 LOCAL_REQUIRED_MODULES := libbluetooth_jni bluetooth.default
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 3bbd86d..3e7c322 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -51,6 +51,8 @@
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
     <uses-permission android:name="android.permission.WRITE_MEDIA_STORAGE" />
     <application android:process="com.android.bluetooth">
+        <uses-library android:name="com.quicinc.wbc"
+            android:required="false" />
         <uses-library android:name="javax.obex" />
         <uses-feature android:name="android.hardware.bluetooth_le" android:required="true" />
         <service
diff --git a/src/org/codeaurora/bluetooth/a4wp/A4wpService.java b/src/org/codeaurora/bluetooth/a4wp/A4wpService.java
index 50f6393..f778f96 100644
--- a/src/org/codeaurora/bluetooth/a4wp/A4wpService.java
+++ b/src/org/codeaurora/bluetooth/a4wp/A4wpService.java
@@ -58,6 +58,8 @@
 import android.wipower.WipowerManager.PowerApplyEvent;
 import android.wipower.WipowerManager.PowerLevel;
 import android.wipower.WipowerDynamicParam;
+import com.quicinc.wbc.WbcManager;
+import com.quicinc.wbc.WbcTypes;
 
 /**
  * Class which executes A4WP service
@@ -94,7 +96,7 @@
     private final static byte DEFAULT_MAX_POWER_DESIRED = 0x0032;
     private final static short DEFAULT_VRECT_MIN = 0x003200;
     private final static short DEFAULT_VRECT_MAX = 0x004650;
-    private final static short DEFAULT_VRECT_SET = 0x002580;
+    private final static short DEFAULT_VRECT_SET = 0x003580;
     private final static short DEFAULT_DELTA_R1 = 0x0001;
     private final static int DEFAULT_RFU_VAL = 0x0000;
     private static final int MSB_MASK = 0xFF00;
@@ -108,6 +110,30 @@
     private static final byte A4WP_ADV_MIN_INTERVAL = 0x20;
     private static final byte A4WP_ADV_MAX_INTERVAL = 0x20;
 
+    private static boolean mWipowerBoot = false;
+    static boolean mChargeComplete = true;
+
+    private WbcManager.WbcEventListener mWbcCallback = new WbcManager.WbcEventListener() {
+
+        @Override
+        public void onWbcEventUpdate(int what, int arg1, int arg2) {
+            Log.v(LOGTAG, "onWbcEventUpdate rcvd: " + what + ", " + arg1 + ", " + arg2);
+            if ((what == WbcTypes.WBC_EVENT_TYPE_CHARGING_REQUIRED_STATUS)){
+                if ((arg1 == WbcTypes.WBC_BATTERY_STATUS_CHARGING_NOT_REQUIRED)){
+                    // this will set charge complete bit in pru alert
+                    // eventally leading to a possible disconnect from ptu
+                    mChargeComplete = true;
+                } else {
+                    // We could be in 600mS scan state here and since charging needs to be resumed
+                    // send enable power apply command to scan for short beacons */
+                    mChargeComplete = false;
+                    mWipowerManager.enablePowerApply(true, true, false);
+                }
+            }
+            Log.v(LOGTAG, "onWbcEventUpdate: charge complete " +  mChargeComplete);
+        }
+    };
+
     private class PruStaticParam {
         private byte mOptvalidity;
         private byte mProtoRevision;
@@ -380,6 +406,7 @@
     private PtuStaticParam mPtuStaticParam; //20 bytes
     private static WipowerDynamicParam mPruDynamicParam; //20 bytes
     private WipowerManager mWipowerManager;
+    private WbcManager mWbcManager;
 
     public A4wpService() {
         Log.v(LOGTAG, "A4wpService");
@@ -451,6 +478,12 @@
         @Override
         public void onWipowerReady() {
             Log.v(LOGTAG, "onWipowerReady");
+            if (mChargeComplete == true) {
+                mWipowerManager.enablePowerApply(true, true, true);
+            } else {
+                mWipowerManager.enablePowerApply(true, true, false);
+            }
+            mWipowerBoot = true;
         }
 
         @Override
@@ -514,7 +547,7 @@
             byte[] value = data.getValue();
 
             Log.v(LOGTAG, "calling SetValue");
-            mPruDynamicParam.setAppValue(value);
+            mPruDynamicParam.setValue(value);
         }
 
     };
@@ -528,11 +561,15 @@
         public void onConnectionStateChange(BluetoothDevice device, int status, int newState) {
             mState = newState;
             if (mState == BluetoothProfile.STATE_DISCONNECTED) {
-                Log.v(LOGTAG, "onConnectionStateChange:DISCONNECTED " + device);
-                if (mDevice != null) {
-                    //Uncomment this later
-                    //mWipowerManager.enableDataNotification(false);
-                    //mWipowerManager.stopCharging();
+                Log.v(LOGTAG, "onConnectionStateChange:DISCONNECTED " + device + "charge complete " + mChargeComplete);
+                if (mDevice != null && mWipowerManager != null) {
+                    mWipowerManager.enableDataNotification(false);
+                    mWipowerManager.stopCharging();
+                    if (mChargeComplete == true) {
+                        mWipowerManager.enablePowerApply(true, true, true);
+                    } else {
+                        mWipowerManager.enablePowerApply(true, true, false);
+                    }
                     mDevice = null;
                 }
             } else {
@@ -588,10 +625,15 @@
                          return;
                     }
                     value = mPruDynamicParam.getValue();
+                    if (mChargeComplete == true) {
+                        value[16] = (byte)(value[16] | CHARGE_COMPLETE_BIT);
+                    } else {
+                        value[16] = (byte)(value[16] & (~CHARGE_COMPLETE_BIT));
+                    }
                 }
                 if (value != null)
                 {
-                     Log.v(LOGTAG, "device:" + id + "requestId:" + requestId + "status:" + status + "offset:" + offset + "value" + value);
+                     Log.v(LOGTAG, "device=" + id + "requestId=" + requestId + "status=" + status + "offset=" + offset + "value=" + value[16]);
                      mBluetoothGattServer.sendResponse(device, requestId, status, offset, value);
                 }
         }
@@ -698,7 +740,6 @@
 
 
         mBluetoothGattServer.addService(a4wpService);
-        Log.d(LOGTAG,"time to start advertising....:");
 
         //startAdvertising();
 
@@ -726,6 +767,12 @@
         mWipowerManager = WipowerManager.getWipowerManger(this, mWipowerCallback);
         if (mWipowerManager != null)
              mWipowerManager.registerCallback(mWipowerCallback);
+        mWbcManager = WbcManager.getInstance();
+        if (mWbcManager != null) {
+            mChargeComplete = (mWbcManager.getChargingRequired() == 0);
+            Log.v(LOGTAG, "onCreate: charge complete " + mChargeComplete);
+            mWbcManager.register(mWbcCallback);
+        }
     }
 
     @Override
@@ -733,6 +780,8 @@
         Log.v(LOGTAG, "onDestroy");
         if (mWipowerManager != null)
              mWipowerManager.unregisterCallback(mWipowerCallback);
+        if (mWbcManager != null)
+             mWbcManager.unregister(mWbcCallback);
     }
 
     @Override
@@ -744,8 +793,15 @@
     @Override
     public int onStartCommand(Intent intent, int flags, int startId) {
         Log.d(LOGTAG, "onStart Command called!!");
-        //Make this restarable service by
-        //Android app manager
+
+        //mWipowerBoot is used to hold power enable command till the service is been registered completely
+        if (mWipowerBoot == true) {
+            if (mChargeComplete == true) {
+                mWipowerManager.enablePowerApply(true, true, true);
+            } else {
+                mWipowerManager.enablePowerApply(true, true, false);
+            }
+        }
         return START_STICKY;
    }
 }
