diff --git a/BluetoothFacade/src/com/googlecode/android_scripting/facade/BluetoothFacade.java b/BluetoothFacade/src/com/googlecode/android_scripting/facade/BluetoothFacade.java
index 6f5a08d..f24b0b5 100644
--- a/BluetoothFacade/src/com/googlecode/android_scripting/facade/BluetoothFacade.java
+++ b/BluetoothFacade/src/com/googlecode/android_scripting/facade/BluetoothFacade.java
@@ -176,12 +176,14 @@
   @Rpc(description = "Requests that the device be discoverable for Bluetooth connections.")
   public void bluetoothMakeDiscoverable(
       @RpcParameter(name = "duration", description = "period of time, in seconds, during which the device should be discoverable") @RpcDefault("300") Integer duration) {
-    if (mBluetoothAdapter.getScanMode() != BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE) {
-      Intent discoverableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
-      discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, duration);
-      // Use startActivityForResult to make this a synchronous call.
-      mAndroidFacade.startActivityForResult(discoverableIntent);
-    }
+    Log.d("Making discoverable for "+duration+" seconds.\n");
+    mBluetoothAdapter.setScanMode(BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE, duration);
+  }
+
+  @Rpc(description = "Requests that the device be not discoverable.")
+  public void bluetoothMakeUndiscoverable() {
+    Log.d("Making undiscoverable\n");
+    mBluetoothAdapter.setScanMode(BluetoothAdapter.SCAN_MODE_NONE);
   }
 
   @Rpc(description = "Sends ASCII characters over the currently open Bluetooth connection.")
diff --git a/Common/src/com/googlecode/android_scripting/facade/EventFacade.java b/Common/src/com/googlecode/android_scripting/facade/EventFacade.java
index 045e784..0eeda48 100644
--- a/Common/src/com/googlecode/android_scripting/facade/EventFacade.java
+++ b/Common/src/com/googlecode/android_scripting/facade/EventFacade.java
@@ -164,15 +164,21 @@
     return events;
   }
 
-  @Rpc(description = "Blocks until an event with the supplied name occurs. The returned event is not removed from the buffer.", returns = "Map of event properties.")
+  @Rpc(description = "Blocks until an event with the supplied name occurs. Event is removed from the buffer if removeEvent is True.",
+      returns = "Map of event properties.")
   public Event eventWaitFor(
       @RpcParameter(name = "eventName") final String eventName,
+      @RpcParameter(name = "removeEvent") final Boolean removeEvent,
       @RpcParameter(name = "timeout", description = "the maximum time to wait (in ms)") @RpcOptional Integer timeout)
       throws InterruptedException {
+    Event result = null;
     synchronized (mEventQueue) { // First check to make sure it isn't already there
       for (Event event : mEventQueue) {
         if (event.getName().equals(eventName)) {
-          return event;
+          result = event;
+          if(removeEvent)
+            mEventQueue.remove(event);
+          return result;
         }
       }
     }
@@ -186,15 +192,18 @@
               futureEvent.set(event);
               removeEventObserver(this);
             }
+            if(removeEvent)
+              mEventQueue.remove(event);
           }
         }
       }
     });
     if (timeout != null) {
-      return futureEvent.get(timeout, TimeUnit.MILLISECONDS);
+      result = futureEvent.get(timeout, TimeUnit.MILLISECONDS);
     } else {
-      return futureEvent.get();
+      result = futureEvent.get();
     }
+    return result;
   }
 
   @Rpc(description = "Blocks until an event occurs. The returned event is removed from the buffer.", returns = "Map of event properties.")
@@ -293,12 +302,14 @@
   }
 
   @RpcDeprecated(value = "eventWaitFor", release = "r4")
-  @Rpc(description = "Blocks until an event with the supplied name occurs. The returned event is not removed from the buffer.", returns = "Map of event properties.")
+  @Rpc(description = "Blocks until an event with the supplied name occurs. Event is removed from the buffer if removeEvent is True.",
+   returns = "Map of event properties.")
   public Event waitForEvent(
       @RpcParameter(name = "eventName") final String eventName,
+      @RpcOptional final Boolean removeEvent,
       @RpcParameter(name = "timeout", description = "the maximum time to wait") @RpcOptional Integer timeout)
       throws InterruptedException {
-    return eventWaitFor(eventName, timeout);
+    return eventWaitFor(eventName, removeEvent, timeout);
   }
 
   @Rpc(description = "Opens up a socket where you can read for events posted")
diff --git a/Common/src/com/googlecode/android_scripting/facade/ScanFacade.java b/Common/src/com/googlecode/android_scripting/facade/ScanFacade.java
index f098156..24097b8 100644
--- a/Common/src/com/googlecode/android_scripting/facade/ScanFacade.java
+++ b/Common/src/com/googlecode/android_scripting/facade/ScanFacade.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright (C) 2014 Google 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.
+ */
 package com.googlecode.android_scripting.facade;
 
 import android.app.Service;
@@ -16,6 +31,7 @@
 import com.googlecode.android_scripting.rpc.RpcStopEvent;
 
 import java.util.Hashtable;
+import java.util.List;
 import java.util.concurrent.Callable;
 
 /**
@@ -34,6 +50,7 @@
   private final Hashtable<Integer, WifiScanListener> wifiScannerListenerList;
   private final Hashtable<Integer, ChangeListener> wifiChangeListenerList;
   private final Hashtable<Integer, WifiHotspotListener> wifiHotspotListenerList;
+  private static Hashtable<Integer, ScanResult[]> wifiScannerResultList;
 
   public ScanFacade(FacadeManager manager) {
     super(manager);
@@ -43,48 +60,53 @@
     wifiScannerListenerList = new Hashtable<Integer, WifiScanListener>();
     wifiChangeListenerList = new Hashtable<Integer, ChangeListener>();
     wifiHotspotListenerList = new Hashtable<Integer, WifiHotspotListener>();
+    wifiScannerResultList = new Hashtable<Integer, ScanResult[]>();
+  }
+
+  public static List<ScanResult> getWifiScanResult(Integer listener_index, List<ScanResult> scanResults){
+    synchronized (wifiScannerResultList) {
+      ScanResult[] scanArray = wifiScannerResultList.get(listener_index);
+      for(ScanResult scanresult :  scanArray)
+        scanResults.add(scanresult);
+      return scanResults;
+    }
   }
 
   private class WifiActionListener implements WifiScanner.ActionListener {
-    private final Bundle mStatus;
     private final Bundle mResults;
-    public int index;
-    protected String listenerType;
+    public int mIndex;
+    protected String mEventType;
 
-    public WifiActionListener(String type, int idx, Bundle statusBundle, Bundle resultBundle) {
-      this.index = idx;
-      this.listenerType = type;
-      this.mStatus = statusBundle;
+    public WifiActionListener(String type, int idx, Bundle resultBundle) {
+      this.mIndex = idx;
+      this.mEventType = type;
       this.mResults = resultBundle;
     }
 
     @Override
     public void onSuccess() {
-      Log.d("android_scripting change onSuccess "+listenerType+index);
-      mStatus.putString("ID", listenerType+index);
-      mStatus.putBoolean("Status", true);
-      mEventFacade.postEvent("Started", mStatus.clone());
-      mStatus.clear();
+      Log.d("onSuccess " + mEventType + " " + mIndex);
+      mResults.putString("Type", "onSuccess");
+      mEventFacade.postEvent(mEventType + mIndex, mResults.clone());
+      mResults.clear();
     }
 
     @Override
     public void onFailure(int reason, String description) {
-      Log.d("android_scripting change onFailure "+listenerType+index);
-      mStatus.putString("ID", listenerType+index);
-      mStatus.putBoolean("Status", false);
-      mStatus.putInt("Reason", reason);
-      mStatus.putString("Exception", description);
-      mEventFacade.postEvent("Failed", mStatus.clone());
-      mStatus.clear();
+      Log.d("onFailure " + mEventType + " " + mIndex);
+      mResults.putString("Type", "onFailure");
+      mResults.putInt("Reason", reason);
+      mResults.putString("Description", description);
+      mEventFacade.postEvent(mEventType + mIndex, mResults.clone());
+      mResults.clear();
     }
 
-    public void reportResult(ScanResult[] results, String eventType) {
-      Log.d("android_scripting "+eventType+" "+listenerType+index);
-      mResults.putString("ID", listenerType+index);
+    public void reportResult(ScanResult[] results, String type) {
+      Log.d("reportResult "+ mEventType + " "+ mIndex);
       mResults.putLong("Timestamp", System.currentTimeMillis()/1000);
-      mResults.putString("Type", eventType);
+      mResults.putString("Type", type);
       mResults.putParcelableArray("Results", results);
-      mEventFacade.postEvent("ScanResults", mResults.clone());
+      mEventFacade.postEvent(mEventType + mIndex, mResults.clone());
       mResults.clear();
     }
   }
@@ -100,22 +122,21 @@
         return new WifiScanListener();
       }
     });
-    wifiScannerListenerList.put(mWifiScannerListener.index, mWifiScannerListener);
+    wifiScannerListenerList.put(mWifiScannerListener.mIndex, mWifiScannerListener);
     return mWifiScannerListener;
   }
 
   private class WifiScanListener implements WifiScanner.ScanListener {
+    private static final String mEventType =  "WifiBackgroundScan";
     protected final Bundle mScanResults;
-    protected final Bundle mScanStatus;
     private final WifiActionListener mWAL;
-    public int index;
+    public int mIndex;
 
     public WifiScanListener() {
-      mScanStatus = new Bundle();
       mScanResults = new Bundle();
       WifiScanListenerCnt += 1;
-      index = WifiScanListenerCnt;
-      mWAL = new WifiActionListener("WifiScanListener", index, mScanStatus, mScanResults);
+      mIndex = WifiScanListenerCnt;
+      mWAL = new WifiActionListener(mEventType, mIndex, mScanResults);
     }
 
     @Override
@@ -130,21 +151,24 @@
 
     @Override
     public void onPeriodChanged(int periodInMs) {
-      mScanStatus.putString("ID", "WifiScanListener"+index);
-      mScanStatus.putBoolean("Status", true);
-      mScanStatus.putInt("NewPeriod", periodInMs);
-      mEventFacade.postEvent("onPeriodChanged", mScanStatus.clone());
-      mScanStatus.clear();
+      Log.d("onPeriodChanged " + mEventType + " " + mIndex);
+      mScanResults.putString("Type", "onPeriodChanged");
+      mScanResults.putInt("NewPeriod", periodInMs);
+      mEventFacade.postEvent(mEventType + mIndex, mScanResults.clone());
+      mScanResults.clear();
     }
 
     @Override
     public void onResults(ScanResult[] results) {
+      synchronized (wifiScannerResultList) {
+        wifiScannerResultList.put(mIndex, results);
+      }
       mWAL.reportResult(results, "onScanResults");
     }
 
     @Override
     public void onFullResult(ScanResult fullScanResult) {
-      Log.d("android_scripting onFullResult WifiScanListener "+index);
+      Log.d("onFullResult WifiScanListener " + mIndex);
       mWAL.reportResult(new ScanResult[]{fullScanResult}, "onFullResult");
     }
   }
@@ -160,22 +184,21 @@
         return new ChangeListener();
       }
     });
-    wifiChangeListenerList.put(mWifiChangeListener.index, mWifiChangeListener);
+    wifiChangeListenerList.put(mWifiChangeListener.mIndex, mWifiChangeListener);
     return mWifiChangeListener;
   }
 
   private class ChangeListener implements WifiScanner.WifiChangeListener {
-    protected final Bundle mStatus;
+    private static final String mEventType =  "TrackChanges";
     protected final Bundle mResults;
     private final WifiActionListener mWAL;
-    public int index;
+    public int mIndex;
 
     public ChangeListener() {
-      mStatus = new Bundle();
       mResults = new Bundle();
       WifiChangeListenerCnt += 1;
-      index = WifiChangeListenerCnt;
-      mWAL = new WifiActionListener("WifiChangeListener", index, mStatus, mResults);
+      mIndex = WifiChangeListenerCnt;
+      mWAL = new WifiActionListener(mEventType, mIndex, mResults);
     }
 
     @Override
@@ -210,22 +233,21 @@
         return new WifiHotspotListener();
       }
     });
-    wifiHotspotListenerList.put(mWifiHotspotListener.index, mWifiHotspotListener);
+    wifiHotspotListenerList.put(mWifiHotspotListener.mIndex, mWifiHotspotListener);
     return mWifiHotspotListener;
   }
 
   private class WifiHotspotListener implements WifiScanner.HotspotListener {
-    protected final Bundle mStatus;
+    private static final String mEventType =  "TrackHotspot";
     protected final Bundle mResults;
     private final WifiActionListener mWAL;
-    public int index;
+    public int mIndex;
 
     public WifiHotspotListener() {
-      mStatus = new Bundle();
       mResults = new Bundle();
       WifiHotspotListenerCnt += 1;
-      index = WifiHotspotListenerCnt;
-      mWAL = new WifiActionListener("HotspotListener", index, mStatus, mResults);
+      mIndex = WifiHotspotListenerCnt;
+      mWAL = new WifiActionListener(mEventType, mIndex, mResults);
     }
 
     @Override
@@ -262,35 +284,37 @@
       ss.channels[i] = new WifiScanner.ChannelSpec(channel_freqs[i]);
     }
     ss.periodInMs = periodInMs;
-    Log.d("android_scripting periodInMs "+ss.periodInMs);
+    Log.d("startWifiBackgroundScan periodInMs " + ss.periodInMs);
     for(int i=0; i<ss.channels.length; i++) {
-      Log.d("android_scripting "+ss.channels[i].frequency+" "+ss.channels[i].passive+" "+ss.channels[i].dwellTimeMS);
+      Log.d("startWifiBackgroundScan " + ss.channels[i].frequency + " " + ss.channels[i].passive + " " + ss.channels[i].dwellTimeMS);
     }
     WifiScanListener mListener = genWifiScanListener();
     mScan.startBackgroundScan(ss, mListener);
-    return mListener.index;
+    return mListener.mIndex;
   }
 
   /**
    * Stops a wifi background scan
-   * @param listener_index the id of the scan listener whose scan to stop
+   * @param listener_mIndex the id of the scan listener whose scan to stop
    */
   @Rpc(description = "Stops an ongoing periodic Wifi scan in background")
   @RpcStopEvent("WifiScan")
   public void stopWifiBackgroundScan(@RpcParameter(name = "listener") Integer listener_index) {
-    Log.d("android_scripting stopping background scan");
     WifiScanListener mListener = wifiScannerListenerList.get(listener_index);
-    Log.d("android_scripting mListener "+mListener.index+mListener.toString());
+    Log.d("stopWifiBackgroundScan mListener "+ mListener.mIndex );
     mScan.stopBackgroundScan(mListener);
+    synchronized (wifiScannerResultList) {
+      wifiScannerResultList.remove(listener_index);
+    }
     wifiScannerListenerList.remove(listener_index);
   }
 
-  @Rpc(description = "Returns a list of indexes of existing listeners")
+  @Rpc(description = "Returns a list of mIndexes of existing listeners")
   public Integer[] showWifiScanListeners() {
     Integer[] result = new Integer[wifiScannerListenerList.size()];
     int j = 0;
     for(int i : wifiScannerListenerList.keySet()) {
-      result[j] = wifiScannerListenerList.get(i).index;
+      result[j] = wifiScannerListenerList.get(i).mIndex;
       j += 1;
     }
     return result;
@@ -302,10 +326,10 @@
    */
   @Rpc(description = "Starts tracking wifi changes")
   public Integer startTrackingChange() {
-    Log.d("android_scripting starting change track");
+    Log.d("starting change track");
     ChangeListener mListener = genWifiChangeListener();
     mScan.startTrackingWifiChange(mListener);
-    return mListener.index;
+    return mListener.mIndex;
   }
 
   /**
@@ -347,7 +371,7 @@
     }
     WifiHotspotListener mWHL = genWifiHotspotListener();
     mScan.startTrackingHotspots(mHotspotInfos, apLostThreshold, mWHL);
-    return mWHL.index;
+    return mWHL.mIndex;
   }
 
   /**
diff --git a/Common/src/com/googlecode/android_scripting/facade/SettingsFacade.java b/Common/src/com/googlecode/android_scripting/facade/SettingsFacade.java
index 1635ffc..a21b389 100644
--- a/Common/src/com/googlecode/android_scripting/facade/SettingsFacade.java
+++ b/Common/src/com/googlecode/android_scripting/facade/SettingsFacade.java
@@ -18,8 +18,8 @@
 
 import android.app.Service;
 import android.content.Context;
-import android.content.Intent;
 import android.media.AudioManager;
+import android.net.ConnectivityManager;
 import android.os.PowerManager;
 import android.provider.Settings.SettingNotFoundException;
 import android.view.WindowManager;
@@ -37,7 +37,7 @@
 
 /**
  * Exposes phone settings functionality.
- * 
+ *
  * @author Frank Spychalski (frank.spychalski@gmail.com)
  */
 public class SettingsFacade extends RpcReceiver {
@@ -48,10 +48,11 @@
   private final Service mService;
   private final AudioManager mAudio;
   private final PowerManager mPower;
+  private final ConnectivityManager mConnect;
 
   /**
    * Creates a new SettingsFacade.
-   * 
+   *
    * @param service
    *          is the {@link Context} the APIs will run under
    */
@@ -60,6 +61,7 @@
     mService = manager.getService();
     mAudio = (AudioManager) mService.getSystemService(Context.AUDIO_SERVICE);
     mPower = (PowerManager) mService.getSystemService(Context.POWER_SERVICE);
+    mConnect = (ConnectivityManager) mService.getSystemService(Context.CONNECTIVITY_SERVICE);
   }
 
   @Rpc(description = "Sets the screen timeout to this number of seconds.", returns = "The original screen timeout.")
@@ -91,17 +93,11 @@
   }
 
   @Rpc(description = "Toggles airplane mode on and off.", returns = "True if airplane mode is enabled.")
-  public Boolean toggleAirplaneMode(@RpcParameter(name = "enabled") @RpcOptional Boolean enabled) {
+  public void toggleAirplaneMode(@RpcParameter(name = "enabled") @RpcOptional Boolean enabled) {
     if (enabled == null) {
       enabled = !checkAirplaneMode();
     }
-    android.provider.Settings.System.putInt(mService.getContentResolver(),
-        android.provider.Settings.Global.AIRPLANE_MODE_ON, enabled ? AIRPLANE_MODE_ON
-            : AIRPLANE_MODE_OFF);
-    Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
-    intent.putExtra("state", enabled);
-    mService.sendBroadcast(intent);
-    return enabled;
+    mConnect.setAirplaneMode(enabled);
   }
 
   @Rpc(description = "Checks the ringer silent mode setting.", returns = "True if ringer silent mode is enabled.")
diff --git a/Common/src/com/googlecode/android_scripting/facade/WifiPasspointFacade.java b/Common/src/com/googlecode/android_scripting/facade/WifiPasspointFacade.java
new file mode 100644
index 0000000..8b5a119
--- /dev/null
+++ b/Common/src/com/googlecode/android_scripting/facade/WifiPasspointFacade.java
@@ -0,0 +1,154 @@
+/*
+ * Copyright (C) 2014 Google 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.
+ */
+
+package com.googlecode.android_scripting.facade;
+
+import android.app.Service;
+import android.content.Context;
+import android.net.wifi.ScanResult;
+import android.net.wifi.passpoint.WifiPasspointManager;
+import android.net.wifi.passpoint.WifiPasspointManager.Channel;
+import android.net.wifi.passpoint.WifiPasspointManager.ChannelListener;
+import android.os.Bundle;
+import android.os.Looper;
+
+import com.googlecode.android_scripting.Log;
+import com.googlecode.android_scripting.MainThread;
+import com.googlecode.android_scripting.facade.EventFacade;
+import com.googlecode.android_scripting.facade.FacadeManager;
+import com.googlecode.android_scripting.jsonrpc.RpcReceiver;
+import com.googlecode.android_scripting.rpc.Rpc;
+import com.googlecode.android_scripting.rpc.RpcParameter;
+import com.googlecode.android_scripting.rpc.RpcStartEvent;
+
+import java.util.ArrayList;
+import java.util.Hashtable;
+import java.util.List;
+import java.util.concurrent.Callable;
+
+/**
+ * Exposes WifiPasspointManger functionality.
+ */
+public class WifiPasspointFacade extends RpcReceiver {
+
+  private final static String mEventType = "ANQPInfo";
+  private final Service mService;
+  private final EventFacade mEventFacade;
+  private final WifiPasspointManager mWifiPasspointMgr;
+  private static int mWifiPasspointChannelALCnt;
+  private Hashtable<Integer, WifiPasspointChannelActionListener> mWifiPasspointChannelAlList;
+  private List<ScanResult> mScanResults;
+
+  public WifiPasspointFacade(FacadeManager facadeManager){
+    super(facadeManager);
+    mService = facadeManager.getService();
+    mEventFacade = facadeManager.getReceiver(EventFacade.class);
+    mWifiPasspointMgr = (WifiPasspointManager)mService.getSystemService(Context.WIFI_PASSPOINT_SERVICE);
+    mWifiPasspointChannelAlList = new Hashtable<Integer, WifiPasspointChannelActionListener>();
+    mScanResults = new ArrayList<ScanResult>();
+
+  }
+
+  public class WifiPasspointChannelActionListener implements WifiPasspointManager.ActionListener{
+
+    private ChannelListener mChannelListener;
+    private Channel mChannel;
+    private int mIndex;
+    private final Bundle mStatus;
+
+    public WifiPasspointChannelActionListener(){
+      mChannelListener = new WifiPasspointManager.ChannelListener() {
+        @Override
+        public void onChannelDisconnected() {
+          Log.e("Channel Disconnected with WifiPasspoint Framwork");
+        }
+      };
+      mChannel  = mWifiPasspointMgr.initialize(mService.getApplicationContext(), Looper.getMainLooper() , mChannelListener);
+      mIndex = ++mWifiPasspointChannelALCnt;
+      mStatus = new Bundle();
+    }
+
+    @Override
+    public void onSuccess() {
+      Log.d("onSuccess " + mEventType + " " + mIndex);
+      mStatus.putString("Type", "onSuccess");
+      mEventFacade.postEvent(mEventType + mIndex, mStatus.clone());
+      mStatus.clear();
+    }
+
+    @Override
+    public void onFailure(int reason){
+      Log.d("onFailure " + mEventType + " " + mIndex);
+      mStatus.putString("Type", "onFailure");
+      mStatus.putInt("Reason", reason);
+      mEventFacade.postEvent(mEventType + mIndex, mStatus.clone());
+      mStatus.clear();
+    }
+
+  }
+
+  /**
+   * Constructs a WifiPasspointChannelListener object and initialize it
+   * @return WifiPasspointChannelListener
+   */
+  private WifiPasspointChannelActionListener genWifiPasspointChannelAL() {
+    WifiPasspointChannelActionListener mWifiPpChannelAL =
+        MainThread.run(mService, new Callable<WifiPasspointChannelActionListener>() {
+      @Override
+      public WifiPasspointChannelActionListener call() throws Exception {
+        return new WifiPasspointChannelActionListener();
+      }
+    });
+    mWifiPasspointChannelAlList.put(mWifiPpChannelAL.mIndex, mWifiPpChannelAL);
+    return mWifiPpChannelAL;
+  }
+
+  /**
+   * Shuts down all activities associated with Passpoint
+   */
+  @Rpc(description = "Shuts down all Passpoint activities")
+  public void wifiPasspointShutdown() {
+    this.shutdown();
+  }
+
+  /** RPC Method Section */
+
+  /**
+   * Request ANQP Info of Passpoints
+   * @param mask
+   * @return the id of the Passpoint channel listener associated with this
+   */
+  @Rpc(description = "Request ANQP info.")
+  @RpcStartEvent("ANQPInfo")
+  public Integer requestAnqpInfoOfPasspoints(@RpcParameter(name = "scanIndex") Integer scanIndex,
+      @RpcParameter(name = "mask") Integer mask) {
+    ScanFacade.getWifiScanResult(scanIndex, mScanResults);
+    if(mScanResults.size() == 0)
+      return -1;
+    WifiPasspointChannelActionListener mWifiPpChannelAL = genWifiPasspointChannelAL();
+    mWifiPasspointMgr.requestAnqpInfo(mWifiPpChannelAL.mChannel,  mScanResults, mask, mWifiPpChannelAL);
+    return mWifiPpChannelAL.mIndex;
+  }
+  /*
+   * Release all resource before closing down
+   */
+  @Override
+  public void shutdown() {
+    mWifiPasspointChannelAlList.clear();
+    mScanResults.clear();
+  }
+
+}
diff --git a/Common/src/com/googlecode/android_scripting/jsonrpc/JsonBuilder.java b/Common/src/com/googlecode/android_scripting/jsonrpc/JsonBuilder.java
index 178c8ad..35646de 100644
--- a/Common/src/com/googlecode/android_scripting/jsonrpc/JsonBuilder.java
+++ b/Common/src/com/googlecode/android_scripting/jsonrpc/JsonBuilder.java
@@ -229,14 +229,17 @@
     result.put("seen", scanResult.seen);
     result.put("distanceCm", scanResult.distanceCm);
     result.put("distanceSdCm", scanResult.distanceSdCm);
-    JSONArray infoEles = new JSONArray();
-    for(ScanResult.InformationElement ie : scanResult.informationElements) {
-      JSONObject infoEle = new JSONObject();
-      infoEle.put("id", ie.id);
-      infoEle.put("bytes", Base64Codec.encodeBase64(ie.bytes));
-      infoEles.put(infoEle);
-    }
-    result.put("InfomationElements", infoEles);
+    if (scanResult.informationElements != null){
+      JSONArray infoEles = new JSONArray();
+      for(ScanResult.InformationElement ie : scanResult.informationElements) {
+        JSONObject infoEle = new JSONObject();
+        infoEle.put("id", ie.id);
+        infoEle.put("bytes", Base64Codec.encodeBase64(ie.bytes));
+        infoEles.put(infoEle);
+      }
+      result.put("InfomationElements", infoEles);
+    } else
+      result.put("InfomationElements", null);
     return result;
   }
 
diff --git a/ScriptingLayer/src/com/googlecode/android_scripting/facade/FacadeConfiguration.java b/ScriptingLayer/src/com/googlecode/android_scripting/facade/FacadeConfiguration.java
index b7f6306..3992a7f 100644
--- a/ScriptingLayer/src/com/googlecode/android_scripting/facade/FacadeConfiguration.java
+++ b/ScriptingLayer/src/com/googlecode/android_scripting/facade/FacadeConfiguration.java
@@ -93,7 +93,6 @@
 
     if (sSdkLevel >= 5) {
       sFacadeClassList.add(BluetoothFacade.class);
-      sFacadeClassList.add(ScanFacade.class);
     }
 
     if (sSdkLevel >= 7) {
@@ -104,6 +103,11 @@
       sFacadeClassList.add(WebCamFacade.class);
     }
 
+    if (sSdkLevel >= 18) {
+      sFacadeClassList.add(ScanFacade.class);
+      sFacadeClassList.add(WifiPasspointFacade.class);
+    }
+
     for (Class<? extends RpcReceiver> recieverClass : sFacadeClassList) {
       for (MethodDescriptor rpcMethod : MethodDescriptor.collectFrom(recieverClass)) {
         sRpcs.put(rpcMethod.getName(), rpcMethod);
diff --git a/ScriptingLayerForAndroid/Android.mk b/ScriptingLayerForAndroid/Android.mk
index 2b03d43..824f6a7 100644
--- a/ScriptingLayerForAndroid/Android.mk
+++ b/ScriptingLayerForAndroid/Android.mk
@@ -6,6 +6,8 @@
 
 LOCAL_PACKAGE_NAME := sl4a
 
+LOCAL_CERTIFICATE := platform
+
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
 
diff --git a/ScriptingLayerForAndroid/AndroidManifest.xml b/ScriptingLayerForAndroid/AndroidManifest.xml
index 2b39602..d0bb6ed 100644
--- a/ScriptingLayerForAndroid/AndroidManifest.xml
+++ b/ScriptingLayerForAndroid/AndroidManifest.xml
@@ -1,154 +1,167 @@
-<?xml version="1.0" encoding="utf-8"?>
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-	package="com.googlecode.android_scripting" android:installLocation="auto"
-	android:versionCode="603" android:versionName="6x03">
-	<uses-permission android:name="android.permission.RECEIVE_SMS" />
-	<uses-permission android:name="net.dinglisch.android.tasker.PERMISSION_RUN_TASKS" />
-	<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
-	<uses-permission android:name="android.permission.INTERNET" />
-	<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
-	<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
-	<uses-permission android:name="android.permission.CALL_PHONE" />
-	<uses-permission android:name="android.permission.SEND_SMS" />
-	<uses-permission android:name="android.permission.READ_SMS" />
-	<uses-permission android:name="android.permission.WRITE_SMS" />
-	<uses-permission android:name="android.permission.VIBRATE" />
-	<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
-	<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
-	<uses-permission android:name="android.permission.READ_PHONE_STATE" />
-	<uses-permission android:name="android.permission.PERSISTENT_ACTIVITY" />
-	<uses-permission android:name="android.permission.RESTART_PACKAGES" />
-	<uses-permission android:name="android.permission.GET_TASKS" />
-	<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
-	<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
-	<uses-permission android:name="android.permission.RECORD_AUDIO" />
-	<uses-permission android:name="android.permission.READ_LOGS" />
-	<uses-permission android:name="android.permission.WRITE_SETTINGS" />
-	<uses-permission android:name="android.permission.BLUETOOTH" />
-	<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
-	<uses-permission android:name="android.permission.CAMERA" />
-	<uses-permission android:name="android.permission.WAKE_LOCK" />
-	<uses-permission android:name="android.permission.READ_CONTACTS" />
-	<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
-	<uses-sdk android:targetSdkVersion="10" android:minSdkVersion="3" />
-	<application android:icon="@drawable/sl4a_logo_48"
-		android:label="@string/application_title" android:name=".Sl4aApplication">
-		<activity android:name=".activity.ScriptManager"
-			android:configChanges="keyboardHidden|orientation"
-			android:windowSoftInputMode="adjustResize" android:launchMode="singleTop">
-			<intent-filter>
-				<action android:name="android.intent.action.MAIN" />
-				<category android:name="android.intent.category.LAUNCHER" />
-			</intent-filter>
-			<intent-filter>
-				<action android:name="android.intent.action.SEARCH" />
-			</intent-filter>
-			<meta-data android:name="android.app.searchable"
-				android:resource="@xml/searchable_scripts" />
-		</activity>
-		<activity android:name=".activity.ScriptPicker"
-			android:configChanges="keyboardHidden|orientation" android:label="Scripts">
-			<intent-filter>
-				<action android:name="android.intent.action.CREATE_SHORTCUT" />
-				<category android:name="android.intent.category.DEFAULT" />
-			</intent-filter>
-			<intent-filter>
-				<action android:name="android.intent.action.PICK" />
-				<data android:scheme="content" android:path="sl4a/scripts" />
-				<category android:name="android.intent.category.DEFAULT" />
-			</intent-filter>
-		</activity>
-		<activity android:name=".activity.InterpreterPicker"
-			android:configChanges="keyboardHidden|orientation" android:label="Interpreters">
-			<intent-filter>
-				<action android:name="android.intent.action.CREATE_SHORTCUT" />
-				<category android:name="android.intent.category.DEFAULT" />
-			</intent-filter>
-		</activity>
-		<activity-alias android:name="LocalePlugin"
-			android:targetActivity=".activity.ScriptPicker" android:label="@string/application_title"
-			android:icon="@drawable/sl4a_logo_32">
-			<intent-filter>
-				<action android:name="com.twofortyfouram.locale.intent.action.EDIT_SETTING" />
-			</intent-filter>
-		</activity-alias>
-		<receiver android:name=".locale.LocaleReceiver">
-			<intent-filter>
-				<action android:name="com.twofortyfouram.locale.intent.action.FIRE_SETTING" />
-			</intent-filter>
-		</receiver>
-		<activity android:name=".activity.Preferences" android:theme="@android:style/Theme.NoTitleBar" />
-		<activity android:name="org.connectbot.ConsoleActivity"
-			android:theme="@android:style/Theme.NoTitleBar"
-			android:configChanges="keyboardHidden|orientation"
-			android:windowSoftInputMode="stateAlwaysVisible|adjustResize"
-			android:finishOnTaskLaunch="true" android:launchMode="singleTask" />
-
-		<activity android:name=".activity.ScriptEditor"
-			android:theme="@android:style/Theme.NoTitleBar"
-			android:configChanges="keyboardHidden|orientation"
-			android:windowSoftInputMode="stateAlwaysVisible|adjustResize">
-			<intent-filter>
-				<action android:name="com.googlecode.android_scripting.action.EDIT_SCRIPT" />
-				<category android:name="android.intent.category.DEFAULT" />
-			</intent-filter>
-		</activity>
-		<activity android:name=".activity.ApiBrowser"
-			android:configChanges="keyboardHidden|orientation"
-			android:launchMode="singleTop" android:windowSoftInputMode="adjustResize">
-			<intent-filter>
-				<action android:name="android.intent.action.SEARCH" />
-			</intent-filter>
-			<meta-data android:name="android.app.searchable"
-				android:resource="@xml/searchable_apis" />
-		</activity>
-		<activity android:name=".activity.ApiPrompt" android:theme="@android:style/Theme.NoTitleBar"
-			android:configChanges="keyboardHidden|orientation" />
-		<activity android:name=".activity.TriggerManager"
-			android:launchMode="singleTask" android:configChanges="keyboardHidden|orientation" />
-		<activity android:name=".activity.BluetoothDeviceList"
-			android:configChanges="keyboardHidden|orientation" />
-		<activity android:name=".activity.ScriptingLayerServiceLauncher"
-			android:taskAffinity="" android:theme="@android:style/Theme.Translucent.NoTitleBar">
-			<intent-filter>
-				<action android:name="android.intent.action.VIEW" />
-				<category android:name="android.intent.category.DEFAULT" />
-			</intent-filter>
-		</activity>
-		<activity android:name=".activity.FutureActivity"
-			android:configChanges="keyboardHidden|orientation" android:theme="@android:style/Theme.Translucent.NoTitleBar" />
-		<activity android:name="org.connectbot.HelpActivity"
-			android:configChanges="keyboardHidden|orientation" />
-		<activity android:name="org.connectbot.HelpTopicActivity"
-			android:configChanges="keyboardHidden|orientation" />
-		<service android:name=".activity.ScriptingLayerService" />
-		<service android:name=".activity.TriggerService" />
-		<activity android:name=".activity.InterpreterManager"
-			android:launchMode="singleTask" android:configChanges="keyboardHidden|orientation" />
-		<activity android:name=".activity.LogcatViewer"
-			android:launchMode="singleTask" android:configChanges="keyboardHidden|orientation" />
-		<activity android:name=".activity.ScriptsLiveFolder"
-			android:label="Scripts" android:icon="@drawable/live_folder"
-			android:configChanges="keyboardHidden|orientation">
-			<intent-filter>
-				<action android:name="android.intent.action.CREATE_LIVE_FOLDER" />
-				<category android:name="android.intent.category.DEFAULT" />
-			</intent-filter>
-		</activity>
-		<provider android:name=".provider.ScriptProvider"
-			android:authorities="com.googlecode.android_scripting.provider.scriptprovider" />
-		<provider android:name=".provider.ApiProvider"
-			android:authorities="com.googlecode.android_scripting.provider.apiprovider" />
-		<uses-library android:name="android.test.runner" />
-		<activity android:name=".activity.ScriptProcessMonitor"
-			android:launchMode="singleTask" android:finishOnTaskLaunch="true" />
-		<activity android:configChanges="keyboardHidden|orientation"
-			android:name="org.connectbot.util.ColorsActivity" android:theme="@android:style/Theme.Dialog">
-			<intent-filter>
-				<action android:name="com.googlecode.android_scripting.PICK_TERMINAL_COLORS" />
-				<category android:name="android.intent.category.DEFAULT" />
-			</intent-filter>
-		</activity>
-	</application>
-
+<?xml version="1.0" encoding="UTF-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.googlecode.android_scripting" android:installLocation="auto" android:versionCode="603" android:versionName="6x03">
+    <uses-permission android:name="android.permission.RECEIVE_SMS" />
+    <uses-permission android:name="net.dinglisch.android.tasker.PERMISSION_RUN_TASKS" />
+    <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
+    <uses-permission android:name="android.permission.INTERNET" />
+    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
+    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
+    <uses-permission android:name="android.permission.CALL_PHONE" />
+    <uses-permission android:name="android.permission.CONNECTIVITY_INTERNAL" />
+    <uses-permission android:name="android.permission.SEND_SMS" />
+    <uses-permission android:name="android.permission.READ_SMS" />
+    <uses-permission android:name="android.permission.WRITE_SMS" />
+    <uses-permission android:name="android.permission.VIBRATE" />
+    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
+    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
+    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
+    <uses-permission android:name="android.permission.PERSISTENT_ACTIVITY" />
+    <uses-permission android:name="android.permission.RESTART_PACKAGES" />
+    <uses-permission android:name="android.permission.GET_TASKS" />
+    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
+    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
+    <uses-permission android:name="android.permission.RECORD_AUDIO" />
+    <uses-permission android:name="android.permission.READ_LOGS" />
+    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
+    <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />
+    <uses-permission android:name="android.permission.BLUETOOTH" />
+    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
+    <uses-permission android:name="android.permission.CAMERA" />
+    <uses-permission android:name="android.permission.WAKE_LOCK" />
+    <uses-permission android:name="android.permission.READ_CONTACTS" />
+    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
+    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
+    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
+    <uses-permission android:name="android.permission.DEVICE_POWER" />
+    <uses-permission android:name="android.permission.CHANGE_CONFIGURATION" />
+    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
+    <uses-permission android:name="android.permission.BLUETOOTH_PRIVILEGED" />
+    <uses-permission android:name="android.permission.NFC" />
+    <uses-permission android:name="android.permission.HARDWARE_TEST" />
+    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
+    <uses-permission android:name="android.permission.MASTER_CLEAR" />
+    <uses-permission android:name="android.permission.USE_CREDENTIALS" />
+    <uses-permission android:name="com.google.android.googleapps.permission.GOOGLE_AUTH" />
+    <uses-permission android:name="android.permission.ACCESS_DOWNLOAD_MANAGER" />
+    <uses-permission android:name="android.permission.WRITE_CONTACTS" />
+    <uses-permission android:name="android.permission.ACCESS_WIMAX_STATE" />
+    <uses-permission android:name="android.permission.CHANGE_WIMAX_STATE" />
+    <uses-permission android:name="com.android.certinstaller.INSTALL_AS_USER" />
+    <uses-permission android:name="android.permission.CLEAR_APP_USER_DATA" />
+    <uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
+    <uses-permission android:name="android.permission.WRITE_APN_SETTINGS" />
+    <uses-permission android:name="android.permission.ACCESS_CHECKIN_PROPERTIES" />
+    <uses-permission android:name="android.permission.READ_USER_DICTIONARY" />
+    <uses-permission android:name="android.permission.WRITE_USER_DICTIONARY" />
+    <uses-permission android:name="android.permission.FORCE_STOP_PACKAGES" />
+    <uses-permission android:name="android.permission.PACKAGE_USAGE_STATS" />
+    <uses-permission android:name="android.permission.BATTERY_STATS" />
+    <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
+    <uses-permission android:name="android.permission.MOVE_PACKAGE" />
+    <uses-permission android:name="android.permission.USE_CREDENTIALS" />
+    <uses-permission android:name="android.permission.BACKUP" />
+    <uses-permission android:name="android.permission.READ_SYNC_SETTINGS" />
+    <uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS" />
+    <uses-permission android:name="android.permission.READ_SYNC_STATS" />
+    <uses-permission android:name="android.permission.READ_SYNC_SETTINGS" />
+    <uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS" />
+    <uses-permission android:name="android.permission.STATUS_BAR" />
+    <uses-permission android:name="android.permission.MANAGE_USB" />
+    <uses-permission android:name="android.permission.SET_POINTER_SPEED" />
+    <uses-permission android:name="android.permission.SET_KEYBOARD_LAYOUT" />
+    <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL" />
+    <uses-permission android:name="android.permission.COPY_PROTECTED_DATA" />
+    <uses-permission android:name="android.permission.MANAGE_USERS" />
+    <uses-permission android:name="android.permission.READ_PROFILE" />
+    <uses-permission android:name="android.permission.CONFIGURE_WIFI_DISPLAY" />
+    <uses-permission android:name="android.permission.SET_TIME" />
+    <uses-permission android:name="android.permission.ACCESS_NOTIFICATIONS" />
+    <uses-permission android:name="android.permission.REBOOT" />
+    <uses-permission android:name="android.permission.MANAGE_DEVICE_ADMINS" />
+    <uses-sdk android:targetSdkVersion="10" android:minSdkVersion="3" />
+    <application android:icon="@drawable/sl4a_logo_48" android:label="@string/application_title" android:name=".Sl4aApplication">
+        <activity android:name=".activity.ScriptManager" android:configChanges="keyboardHidden|orientation" android:windowSoftInputMode="adjustResize" android:launchMode="singleTop">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+            <intent-filter>
+                <action android:name="android.intent.action.SEARCH" />
+            </intent-filter>
+            <meta-data android:name="android.app.searchable" android:resource="@xml/searchable_scripts" />
+        </activity>
+        <activity android:name=".activity.ScriptPicker" android:configChanges="keyboardHidden|orientation" android:label="Scripts">
+            <intent-filter>
+                <action android:name="android.intent.action.CREATE_SHORTCUT" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+            <intent-filter>
+                <action android:name="android.intent.action.PICK" />
+                <data android:scheme="content" android:path="sl4a/scripts" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+        </activity>
+        <activity android:name=".activity.InterpreterPicker" android:configChanges="keyboardHidden|orientation" android:label="Interpreters">
+            <intent-filter>
+                <action android:name="android.intent.action.CREATE_SHORTCUT" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+        </activity>
+        <activity-alias android:name="LocalePlugin" android:targetActivity=".activity.ScriptPicker" android:label="@string/application_title" android:icon="@drawable/sl4a_logo_32">
+            <intent-filter>
+                <action android:name="com.twofortyfouram.locale.intent.action.EDIT_SETTING" />
+            </intent-filter>
+        </activity-alias>
+        <receiver android:name=".locale.LocaleReceiver">
+            <intent-filter>
+                <action android:name="com.twofortyfouram.locale.intent.action.FIRE_SETTING" />
+            </intent-filter>
+        </receiver>
+        <activity android:name=".activity.Preferences" android:theme="@android:style/Theme.NoTitleBar" />
+        <activity android:name="org.connectbot.ConsoleActivity" android:theme="@android:style/Theme.NoTitleBar" android:configChanges="keyboardHidden|orientation" android:windowSoftInputMode="stateAlwaysVisible|adjustResize" android:finishOnTaskLaunch="true" android:launchMode="singleTask" />
+        <activity android:name=".activity.ScriptEditor" android:theme="@android:style/Theme.NoTitleBar" android:configChanges="keyboardHidden|orientation" android:windowSoftInputMode="stateAlwaysVisible|adjustResize">
+            <intent-filter>
+                <action android:name="com.googlecode.android_scripting.action.EDIT_SCRIPT" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+        </activity>
+        <activity android:name=".activity.ApiBrowser" android:configChanges="keyboardHidden|orientation" android:launchMode="singleTop" android:windowSoftInputMode="adjustResize">
+            <intent-filter>
+                <action android:name="android.intent.action.SEARCH" />
+            </intent-filter>
+            <meta-data android:name="android.app.searchable" android:resource="@xml/searchable_apis" />
+        </activity>
+        <activity android:name=".activity.ApiPrompt" android:theme="@android:style/Theme.NoTitleBar" android:configChanges="keyboardHidden|orientation" />
+        <activity android:name=".activity.TriggerManager" android:launchMode="singleTask" android:configChanges="keyboardHidden|orientation" />
+        <activity android:name=".activity.BluetoothDeviceList" android:configChanges="keyboardHidden|orientation" />
+        <activity android:name=".activity.ScriptingLayerServiceLauncher" android:taskAffinity="" android:theme="@android:style/Theme.Translucent.NoTitleBar">
+            <intent-filter>
+                <action android:name="android.intent.action.VIEW" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+        </activity>
+        <activity android:name=".activity.FutureActivity" android:configChanges="keyboardHidden|orientation" android:theme="@android:style/Theme.Translucent.NoTitleBar" />
+        <activity android:name="org.connectbot.HelpActivity" android:configChanges="keyboardHidden|orientation" />
+        <activity android:name="org.connectbot.HelpTopicActivity" android:configChanges="keyboardHidden|orientation" />
+        <service android:name=".activity.ScriptingLayerService" />
+        <service android:name=".activity.TriggerService" />
+        <activity android:name=".activity.InterpreterManager" android:launchMode="singleTask" android:configChanges="keyboardHidden|orientation" />
+        <activity android:name=".activity.LogcatViewer" android:launchMode="singleTask" android:configChanges="keyboardHidden|orientation" />
+        <activity android:name=".activity.ScriptsLiveFolder" android:label="Scripts" android:icon="@drawable/live_folder" android:configChanges="keyboardHidden|orientation">
+            <intent-filter>
+                <action android:name="android.intent.action.CREATE_LIVE_FOLDER" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+        </activity>
+        <provider android:name=".provider.ScriptProvider" android:authorities="com.googlecode.android_scripting.provider.scriptprovider" />
+        <provider android:name=".provider.ApiProvider" android:authorities="com.googlecode.android_scripting.provider.apiprovider" />
+        <uses-library android:name="android.test.runner" />
+        <activity android:name=".activity.ScriptProcessMonitor" android:launchMode="singleTask" android:finishOnTaskLaunch="true" />
+        <activity android:configChanges="keyboardHidden|orientation" android:name="org.connectbot.util.ColorsActivity" android:theme="@android:style/Theme.Dialog">
+            <intent-filter>
+                <action android:name="com.googlecode.android_scripting.PICK_TERMINAL_COLORS" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+        </activity>
+    </application>
 </manifest>
\ No newline at end of file
diff --git a/build_all.sh b/build_all.sh
index 32cb04e..3ae62a2 100755
--- a/build_all.sh
+++ b/build_all.sh
@@ -34,7 +34,7 @@
 APP_NAME=sl4a
 APP_PACKAGE_NAME=com.googlecode.android_scripting
 
-BRANCH_ROOT=~/My_workshope/klp-wireless-dev
+BRANCH_ROOT=~/dev/android/another-klp-wireless-dev
 SL4A_ROOT=$BRANCH_ROOT/vendor/google_testing/comms/Tools/sl4a
 SHARED_LIB_JAR_ROOT=$BRANCH_ROOT/out/target/common/obj/JAVA_LIBRARIES
 APP_JAR_ROOT=$BRANCH_ROOT/out/target/common/obj/APPS
@@ -78,12 +78,18 @@
 exec mm -B "building $APP_NAME.apk"
 echo
 
+echo -e "${y}Switching to root${NC}"
+adb root
+adb remount
+
 echo -e "${y}Uninstalling old apk from device${NC}"
 adb uninstall $APP_PACKAGE_NAME
+adb shell rm -r /system/priv-app/$APP_NAME.apk
 
 echo -e "${lb}Installing apk to device${NC}"
 cd $APK_ROOT
-exec adb install $APP_NAME.apk "installing apk to device"
+#exec adb install $APP_NAME.apk "installing apk to device"
+exec adb push $APP_NAME.apk /system/priv-app "installing apk to previliged dir"
 
 echo "All clear!"
 echo -e " ${r}U${brn}N${y}I${g}C${cy}O${lb}R${p}N ${r}P${brn}O${y}W${g}E${cy}R${lb}!${p}!${NC}"
