diff --git a/Common/src/com/googlecode/android_scripting/facade/VpnFacade.java b/Common/src/com/googlecode/android_scripting/facade/VpnFacade.java
new file mode 100644
index 0000000..af6dc92
--- /dev/null
+++ b/Common/src/com/googlecode/android_scripting/facade/VpnFacade.java
@@ -0,0 +1,110 @@
+/*
+ * Copyright (C) 2016 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 java.util.ArrayList;
+import java.util.List;
+
+import org.json.JSONObject;
+
+import com.android.internal.net.LegacyVpnInfo;
+import com.android.internal.net.VpnConfig;
+import com.android.internal.net.VpnProfile;
+import com.android.internal.util.ArrayUtils;
+import com.google.android.collect.Lists;
+import com.googlecode.android_scripting.jsonrpc.RpcReceiver;
+import com.googlecode.android_scripting.rpc.Rpc;
+import com.googlecode.android_scripting.rpc.RpcParameter;
+
+import android.app.Service;
+import android.content.Context;
+import android.net.IConnectivityManager;
+import android.os.RemoteException;
+import android.os.ServiceManager;
+import android.security.Credentials;
+import android.security.KeyStore;
+
+/**
+ * Access NFC functions.
+ */
+public class VpnFacade extends RpcReceiver {
+
+    private final Service mService;
+    private final IConnectivityManager mConService;
+
+    public VpnFacade(FacadeManager manager) {
+        super(manager);
+        mService = manager.getService();
+        mConService = IConnectivityManager.Stub
+                .asInterface(ServiceManager.getService(Context.CONNECTIVITY_SERVICE));
+    }
+
+    static List<VpnProfile> loadVpnProfiles(KeyStore keyStore, int... excludeTypes) {
+        final ArrayList<VpnProfile> result = Lists.newArrayList();
+
+        for (String key : keyStore.list(Credentials.VPN)) {
+            final VpnProfile profile = VpnProfile.decode(key, keyStore.get(Credentials.VPN + key));
+            if (profile != null && !ArrayUtils.contains(excludeTypes, profile.type)) {
+                result.add(profile);
+            }
+        }
+        return result;
+    }
+
+    private VpnProfile genLegacyVpnProfile(JSONObject vpnProfileJson) {
+        VpnProfile vp = new VpnProfile(vpnProfileJson.optString("key", ""));
+        vp.name = vpnProfileJson.optString("name", "");
+        vp.type = vpnProfileJson.optInt("type", VpnProfile.TYPE_PPTP);
+        vp.server = vpnProfileJson.optString("server", "");
+        vp.username = vpnProfileJson.optString("username", "");
+        vp.password = vpnProfileJson.optString("password", "");
+        vp.dnsServers = vpnProfileJson.optString("dnsServers", "");
+        vp.searchDomains = vpnProfileJson.optString("searchDomains", "");
+        vp.routes = vpnProfileJson.optString("routes", "");
+        vp.mppe = vpnProfileJson.optBoolean("mppe", true);
+        vp.l2tpSecret = vpnProfileJson.optString("l2tpSecret", "");
+        vp.ipsecIdentifier = vpnProfileJson.optString("ipsecIdentifier", "");
+        vp.ipsecSecret = vpnProfileJson.optString("ipsecSecret", "");
+        vp.ipsecUserCert = vpnProfileJson.optString("ipsecUserCert", "");
+        vp.ipsecCaCert = vpnProfileJson.optString("ipsecCaCert", "");
+        vp.ipsecServerCert = vpnProfileJson.optString("ipsecServerCert", "");
+        vp.saveLogin = vpnProfileJson.optBoolean("saveLogin", false);
+        return vp;
+    }
+
+    @Rpc(description = "Start legacy VPN with a profile.")
+    public void vpnStartLegacyVpn(@RpcParameter(name = "vpnProfile") JSONObject vpnProfile)
+            throws RemoteException {
+        VpnProfile profile = genLegacyVpnProfile(vpnProfile);
+        mConService.startLegacyVpn(profile);
+    }
+
+    @Rpc(description = "Stop the current legacy VPN connection.")
+    public void vpnStopLegacyVpn() throws RemoteException {
+        mConService.prepareVpn(VpnConfig.LEGACY_VPN, VpnConfig.LEGACY_VPN, mService.getUserId());
+    }
+
+    @Rpc(description = "Get the info object of the currently active legacy VPN connection.")
+    public LegacyVpnInfo vpnGetLegacyVpnInfo() throws RemoteException {
+        return mConService.getLegacyVpnInfo(mService.getUserId());
+    }
+
+    @Override
+    public void shutdown() {
+    }
+
+}
diff --git a/Common/src/com/googlecode/android_scripting/jsonrpc/JsonBuilder.java b/Common/src/com/googlecode/android_scripting/jsonrpc/JsonBuilder.java
index f9e83a1..11c4426 100644
--- a/Common/src/com/googlecode/android_scripting/jsonrpc/JsonBuilder.java
+++ b/Common/src/com/googlecode/android_scripting/jsonrpc/JsonBuilder.java
@@ -36,6 +36,15 @@
 import org.json.JSONException;
 import org.json.JSONObject;
 
+import com.android.internal.net.LegacyVpnInfo;
+import com.googlecode.android_scripting.ConvertUtils;
+import com.googlecode.android_scripting.Log;
+import com.googlecode.android_scripting.event.Event;
+//FIXME: Refactor classes, constants and conversions out of here
+import com.googlecode.android_scripting.facade.telephony.InCallServiceImpl;
+import com.googlecode.android_scripting.facade.telephony.TelephonyConstants;
+import com.googlecode.android_scripting.facade.telephony.TelephonyUtils;
+
 import android.bluetooth.BluetoothDevice;
 import android.bluetooth.BluetoothGattCharacteristic;
 import android.bluetooth.BluetoothGattDescriptor;
@@ -84,23 +93,15 @@
 import android.telephony.CellSignalStrengthWcdma;
 import android.telephony.ModemActivityInfo;
 import android.telephony.NeighboringCellInfo;
-import android.telephony.SmsMessage;
 import android.telephony.SignalStrength;
+import android.telephony.SmsMessage;
 import android.telephony.SubscriptionInfo;
-import android.telephony.gsm.GsmCellLocation;
 import android.telephony.VoLteServiceState;
+import android.telephony.gsm.GsmCellLocation;
 import android.util.Base64;
 import android.util.DisplayMetrics;
 import android.util.SparseArray;
 
-import com.googlecode.android_scripting.ConvertUtils;
-import com.googlecode.android_scripting.Log;
-import com.googlecode.android_scripting.event.Event;
-//FIXME: Refactor classes, constants and conversions out of here
-import com.googlecode.android_scripting.facade.telephony.InCallServiceImpl;
-import com.googlecode.android_scripting.facade.telephony.TelephonyUtils;
-import com.googlecode.android_scripting.facade.telephony.TelephonyConstants;
-
 public class JsonBuilder {
 
     @SuppressWarnings("unchecked")
@@ -127,7 +128,7 @@
             return data;
         }
         if (data instanceof JsonSerializable) {
-            return ((JsonSerializable)data).toJSON();
+            return ((JsonSerializable) data).toJSON();
         }
         if (data instanceof JSONObject) {
             return data;
@@ -268,7 +269,7 @@
         if (data instanceof byte[]) {
             JSONArray result = new JSONArray();
             for (byte b : (byte[]) data) {
-                result.put(b&0xFF);
+                result.put(b & 0xFF);
             }
             return result;
         }
@@ -305,6 +306,9 @@
         if (data instanceof VoLteServiceState) {
             return buildVoLteServiceStateEvent((VoLteServiceState) data);
         }
+        if (data instanceof LegacyVpnInfo) {
+            return buildLegacyVpnInfo((LegacyVpnInfo) data);
+        }
         if (data instanceof ModemActivityInfo) {
             return buildModemActivityInfo((ModemActivityInfo) data);
         }
@@ -312,7 +316,6 @@
             return buildSignalStrength((SignalStrength) data);
         }
 
-
         return data.toString();
         // throw new JSONException("Failed to build JSON result. " +
         // data.getClass().getName());
@@ -697,8 +700,7 @@
         result.put("rssi", data.getRssi());
         result.put("lac", data.getLac());
         result.put("psc", data.getPsc());
-        String networkType =
-                TelephonyUtils.getNetworkTypeString(data.getNetworkType());
+        String networkType = TelephonyUtils.getNetworkTypeString(data.getNetworkType());
         result.put("network_type", build(networkType));
         return result;
     }
@@ -708,10 +710,8 @@
         JSONObject result = new JSONObject();
         result.put("rat", "lte");
         result.put("registered", data.isRegistered());
-        CellIdentityLte cellidentity =
-                ((CellInfoLte) data).getCellIdentity();
-        CellSignalStrengthLte signalstrength =
-                ((CellInfoLte) data).getCellSignalStrength();
+        CellIdentityLte cellidentity = ((CellInfoLte) data).getCellIdentity();
+        CellSignalStrengthLte signalstrength = ((CellInfoLte) data).getCellSignalStrength();
         result.put("mcc", cellidentity.getMcc());
         result.put("mnc", cellidentity.getMnc());
         result.put("cid", cellidentity.getCi());
@@ -728,10 +728,8 @@
         JSONObject result = new JSONObject();
         result.put("rat", "gsm");
         result.put("registered", data.isRegistered());
-        CellIdentityGsm cellidentity =
-                ((CellInfoGsm) data).getCellIdentity();
-        CellSignalStrengthGsm signalstrength =
-                ((CellInfoGsm) data).getCellSignalStrength();
+        CellIdentityGsm cellidentity = ((CellInfoGsm) data).getCellIdentity();
+        CellSignalStrengthGsm signalstrength = ((CellInfoGsm) data).getCellSignalStrength();
         result.put("mcc", cellidentity.getMcc());
         result.put("mnc", cellidentity.getMnc());
         result.put("cid", cellidentity.getCid());
@@ -746,10 +744,8 @@
         JSONObject result = new JSONObject();
         result.put("rat", "wcdma");
         result.put("registered", data.isRegistered());
-        CellIdentityWcdma cellidentity =
-                ((CellInfoWcdma) data).getCellIdentity();
-        CellSignalStrengthWcdma signalstrength =
-                ((CellInfoWcdma) data).getCellSignalStrength();
+        CellIdentityWcdma cellidentity = ((CellInfoWcdma) data).getCellIdentity();
+        CellSignalStrengthWcdma signalstrength = ((CellInfoWcdma) data).getCellSignalStrength();
         result.put("mcc", cellidentity.getMcc());
         result.put("mnc", cellidentity.getMnc());
         result.put("cid", cellidentity.getCid());
@@ -765,10 +761,8 @@
         JSONObject result = new JSONObject();
         result.put("rat", "cdma");
         result.put("registered", data.isRegistered());
-        CellIdentityCdma cellidentity =
-                ((CellInfoCdma) data).getCellIdentity();
-        CellSignalStrengthCdma signalstrength =
-                ((CellInfoCdma) data).getCellSignalStrength();
+        CellIdentityCdma cellidentity = ((CellInfoCdma) data).getCellIdentity();
+        CellSignalStrengthCdma signalstrength = ((CellInfoCdma) data).getCellSignalStrength();
         result.put("network_id", cellidentity.getNetworkId());
         result.put("system_id", cellidentity.getSystemId());
         result.put("basestation_id", cellidentity.getBasestationId());
@@ -1102,11 +1096,26 @@
     }
 
     private static JSONObject buildVoLteServiceStateEvent(
-        VoLteServiceState volteInfo)
+            VoLteServiceState volteInfo)
             throws JSONException {
         JSONObject info = new JSONObject();
         info.put(TelephonyConstants.VoLteServiceStateContainer.SRVCC_STATE,
-            TelephonyUtils.getSrvccStateString(volteInfo.getSrvccState()));
+                TelephonyUtils.getSrvccStateString(volteInfo.getSrvccState()));
+        return info;
+    }
+
+    private static JSONObject buildLegacyVpnInfo(LegacyVpnInfo data) throws JSONException {
+        JSONObject info = new JSONObject();
+        if (data == null) {
+            return info;
+        }
+        info.put("state", data.state);
+        info.put("key", data.key);
+        String intentStr = "";
+        if (data.intent != null) {
+            intentStr = data.intent.toString();
+        }
+        info.put("intent", intentStr);
         return info;
     }
 
@@ -1117,10 +1126,10 @@
         info.put("Timestamp", modemInfo.getTimestamp());
         info.put("SleepTimeMs", modemInfo.getSleepTimeMillis());
         info.put("IdleTimeMs", modemInfo.getIdleTimeMillis());
-        //convert from int[] to List<Integer> for proper JSON translation
+        // convert from int[] to List<Integer> for proper JSON translation
         int[] txTimes = modemInfo.getTxTimeMillis();
         List<Integer> tmp = new ArrayList<Integer>(txTimes.length);
-        for(int val : txTimes) {
+        for (int val : txTimes) {
             tmp.add(val);
         }
         info.put("TxTimeMs", build(tmp));
@@ -1128,60 +1137,61 @@
         info.put("EnergyUsedMw", modemInfo.getEnergyUsed());
         return info;
     }
+
     private static JSONObject buildSignalStrength(SignalStrength signalStrength)
             throws JSONException {
         JSONObject info = new JSONObject();
         info.put(TelephonyConstants.SignalStrengthContainer.SIGNAL_STRENGTH_GSM,
-            signalStrength.getGsmSignalStrength());
+                signalStrength.getGsmSignalStrength());
         info.put(
-            TelephonyConstants.SignalStrengthContainer.SIGNAL_STRENGTH_GSM_DBM,
-            signalStrength.getGsmDbm());
+                TelephonyConstants.SignalStrengthContainer.SIGNAL_STRENGTH_GSM_DBM,
+                signalStrength.getGsmDbm());
         info.put(
-            TelephonyConstants.SignalStrengthContainer.SIGNAL_STRENGTH_GSM_LEVEL,
-            signalStrength.getGsmLevel());
+                TelephonyConstants.SignalStrengthContainer.SIGNAL_STRENGTH_GSM_LEVEL,
+                signalStrength.getGsmLevel());
         info.put(
-            TelephonyConstants.SignalStrengthContainer.SIGNAL_STRENGTH_GSM_ASU_LEVEL,
-            signalStrength.getGsmAsuLevel());
+                TelephonyConstants.SignalStrengthContainer.SIGNAL_STRENGTH_GSM_ASU_LEVEL,
+                signalStrength.getGsmAsuLevel());
         info.put(
-            TelephonyConstants.SignalStrengthContainer.SIGNAL_STRENGTH_GSM_BIT_ERROR_RATE,
-            signalStrength.getGsmBitErrorRate());
+                TelephonyConstants.SignalStrengthContainer.SIGNAL_STRENGTH_GSM_BIT_ERROR_RATE,
+                signalStrength.getGsmBitErrorRate());
         info.put(
-            TelephonyConstants.SignalStrengthContainer.SIGNAL_STRENGTH_CDMA_DBM,
-            signalStrength.getCdmaDbm());
+                TelephonyConstants.SignalStrengthContainer.SIGNAL_STRENGTH_CDMA_DBM,
+                signalStrength.getCdmaDbm());
         info.put(
-            TelephonyConstants.SignalStrengthContainer.SIGNAL_STRENGTH_CDMA_LEVEL,
-            signalStrength.getCdmaLevel());
+                TelephonyConstants.SignalStrengthContainer.SIGNAL_STRENGTH_CDMA_LEVEL,
+                signalStrength.getCdmaLevel());
         info.put(
-            TelephonyConstants.SignalStrengthContainer.SIGNAL_STRENGTH_CDMA_ASU_LEVEL,
-            signalStrength.getCdmaAsuLevel());
+                TelephonyConstants.SignalStrengthContainer.SIGNAL_STRENGTH_CDMA_ASU_LEVEL,
+                signalStrength.getCdmaAsuLevel());
         info.put(
-            TelephonyConstants.SignalStrengthContainer.SIGNAL_STRENGTH_CDMA_ECIO,
-            signalStrength.getCdmaEcio());
+                TelephonyConstants.SignalStrengthContainer.SIGNAL_STRENGTH_CDMA_ECIO,
+                signalStrength.getCdmaEcio());
         info.put(
-            TelephonyConstants.SignalStrengthContainer.SIGNAL_STRENGTH_EVDO_DBM,
-            signalStrength.getEvdoDbm());
+                TelephonyConstants.SignalStrengthContainer.SIGNAL_STRENGTH_EVDO_DBM,
+                signalStrength.getEvdoDbm());
         info.put(
-            TelephonyConstants.SignalStrengthContainer.SIGNAL_STRENGTH_EVDO_ECIO,
-            signalStrength.getEvdoEcio());
+                TelephonyConstants.SignalStrengthContainer.SIGNAL_STRENGTH_EVDO_ECIO,
+                signalStrength.getEvdoEcio());
         info.put(TelephonyConstants.SignalStrengthContainer.SIGNAL_STRENGTH_LTE,
-            signalStrength.getLteSignalStrength());
+                signalStrength.getLteSignalStrength());
         info.put(
-            TelephonyConstants.SignalStrengthContainer.SIGNAL_STRENGTH_LTE_DBM,
-            signalStrength.getLteDbm());
+                TelephonyConstants.SignalStrengthContainer.SIGNAL_STRENGTH_LTE_DBM,
+                signalStrength.getLteDbm());
         info.put(
-            TelephonyConstants.SignalStrengthContainer.SIGNAL_STRENGTH_LTE_LEVEL,
-            signalStrength.getLteLevel());
+                TelephonyConstants.SignalStrengthContainer.SIGNAL_STRENGTH_LTE_LEVEL,
+                signalStrength.getLteLevel());
         info.put(
-            TelephonyConstants.SignalStrengthContainer.SIGNAL_STRENGTH_LTE_ASU_LEVEL,
-            signalStrength.getLteAsuLevel());
+                TelephonyConstants.SignalStrengthContainer.SIGNAL_STRENGTH_LTE_ASU_LEVEL,
+                signalStrength.getLteAsuLevel());
         info.put(
-            TelephonyConstants.SignalStrengthContainer.SIGNAL_STRENGTH_LEVEL,
-            signalStrength.getLevel());
+                TelephonyConstants.SignalStrengthContainer.SIGNAL_STRENGTH_LEVEL,
+                signalStrength.getLevel());
         info.put(
-            TelephonyConstants.SignalStrengthContainer.SIGNAL_STRENGTH_ASU_LEVEL,
-            signalStrength.getAsuLevel());
+                TelephonyConstants.SignalStrengthContainer.SIGNAL_STRENGTH_ASU_LEVEL,
+                signalStrength.getAsuLevel());
         info.put(TelephonyConstants.SignalStrengthContainer.SIGNAL_STRENGTH_DBM,
-            signalStrength.getDbm());
+                signalStrength.getDbm());
         return info;
     }
 
diff --git a/ScriptingLayer/src/com/googlecode/android_scripting/facade/FacadeConfiguration.java b/ScriptingLayer/src/com/googlecode/android_scripting/facade/FacadeConfiguration.java
index 2b9a089..420fffb 100644
--- a/ScriptingLayer/src/com/googlecode/android_scripting/facade/FacadeConfiguration.java
+++ b/ScriptingLayer/src/com/googlecode/android_scripting/facade/FacadeConfiguration.java
@@ -134,6 +134,7 @@
         sFacadeClassList.add(TelecomCallFacade.class);
         sFacadeClassList.add(CarrierConfigFacade.class);
         sFacadeClassList.add(NfcManagerFacade.class);
+        sFacadeClassList.add(VpnFacade.class);
 
         /* Compatibility reset to >= Marshmallow */
         if (sSdkLevel >= 23) {
