diff --git a/include/telephony/ril.h b/include/telephony/ril.h
index 1518d81..c78526d 100644
--- a/include/telephony/ril.h
+++ b/include/telephony/ril.h
@@ -1165,40 +1165,6 @@
     RIL_DcPowerStates           powerState; // Current power state
 } RIL_DcRtInfo;
 
-/**
- * Data profile to modem
- */
-typedef struct {
-    /* id of the data profile */
-    int profileId;
-    /* the APN to connect to */
-    char* apn;
-    /** one of the PDP_type values in TS 27.007 section 10.1.1.
-     * For example, "IP", "IPV6", "IPV4V6", or "PPP".
-     */
-    char* protocol;
-    /** authentication protocol used for this PDP context
-     * (None: 0, PAP: 1, CHAP: 2, PAP&CHAP: 3)
-     */
-    int authType;
-    /* the username for APN, or NULL */
-    char* user;
-    /* the password for APN, or NULL */
-    char* password;
-    /* the profile type, TYPE_COMMON-0, TYPE_3GPP-1, TYPE_3GPP2-2 */
-    int type;
-    /* the period in seconds to limit the maximum connections */
-    int maxConnsTime;
-    /* the maximum connections during maxConnsTime */
-    int maxConns;
-    /** the required wait time in seconds after a successful UE initiated
-     * disconnect of a given PDN connection before the device can send
-     * a new PDN connection request for that given PDN
-     */
-    int waitTime;
-    /* true to enable the profile, 0 to disable, 1 to enable */
-    int enabled;
-} RIL_DataProfileInfo;
 
 /**
  * RIL_REQUEST_GET_SIM_STATUS
@@ -4054,21 +4020,7 @@
  */
 #define RIL_REQUEST_SET_DC_RT_INFO_RATE 127
 
-/**
- * RIL_REQUEST_SET_DATA_PROFILE
- *
- * Set data profile in modem
- * "data" is an const RIL_DataProfileInfo **
- * "datalen" is count * sizeof(const RIL_DataProfileInfo *)
- * "response" is NULL
- *
- * Valid errors:
- *  SUCCESS
- *  RADIO_NOT_AVAILABLE (radio resetting)
- *  GENERIC_FAILURE
- *  SUBSCRIPTION_NOT_AVAILABLE
- */
-#define RIL_REQUEST_SET_DATA_PROFILE 128
+
 /***********************************************************************/
 
 
diff --git a/libril/ril.cpp b/libril/ril.cpp
index 4b3e1b8..6b3fc6c 100644
--- a/libril/ril.cpp
+++ b/libril/ril.cpp
@@ -276,7 +276,6 @@
 static void dispatchNVWriteItem(Parcel &p, RequestInfo *pRI);
 static void dispatchUiccSubscripton(Parcel &p, RequestInfo *pRI);
 static void dispatchSimAuthentication(Parcel &p, RequestInfo *pRI);
-static void dispatchDataProfile(Parcel &p, RequestInfo *pRI);
 static int responseInts(Parcel &p, void *response, size_t responselen);
 static int responseStrings(Parcel &p, void *response, size_t responselen);
 static int responseString(Parcel &p, void *response, size_t responselen);
@@ -1878,80 +1877,6 @@
     return;
 }
 
-static void dispatchDataProfile(Parcel &p, RequestInfo *pRI) {
-    int32_t t;
-    status_t status;
-    int32_t num;
-
-    status = p.readInt32(&num);
-    if (status != NO_ERROR) {
-        goto invalid;
-    }
-
-    {
-        RIL_DataProfileInfo dataProfiles[num];
-        RIL_DataProfileInfo *dataProfilePtrs[num];
-
-        startRequest;
-        for (int i = 0 ; i < num ; i++ ) {
-            dataProfilePtrs[i] = &dataProfiles[i];
-
-            status = p.readInt32(&t);
-            dataProfiles[i].profileId = (int) t;
-
-            dataProfiles[i].apn = strdupReadString(p);
-            dataProfiles[i].protocol = strdupReadString(p);
-            status = p.readInt32(&t);
-            dataProfiles[i].authType = (int) t;
-
-            dataProfiles[i].user = strdupReadString(p);
-            dataProfiles[i].password = strdupReadString(p);
-
-            status = p.readInt32(&t);
-            dataProfiles[i].type = (int) t;
-
-            status = p.readInt32(&t);
-            dataProfiles[i].maxConnsTime = (int) t;
-            status = p.readInt32(&t);
-            dataProfiles[i].maxConns = (int) t;
-            status = p.readInt32(&t);
-            dataProfiles[i].waitTime = (int) t;
-
-            status = p.readInt32(&t);
-            dataProfiles[i].enabled = (int) t;
-
-            appendPrintBuf("%s [%d: profileId=%d, apn =%s, protocol =%s, authType =%d, \
-                  user =%s, password =%s, type =%d, maxConnsTime =%d, maxConns =%d, \
-                  waitTime =%d, enabled =%d]", printBuf, i, dataProfiles[i].profileId,
-                  dataProfiles[i].apn, dataProfiles[i].protocol, dataProfiles[i].authType,
-                  dataProfiles[i].user, dataProfiles[i].password, dataProfiles[i].type,
-                  dataProfiles[i].maxConnsTime, dataProfiles[i].maxConns,
-                  dataProfiles[i].waitTime, dataProfiles[i].enabled);
-        }
-        closeRequest;
-        printRequest(pRI->token, pRI->pCI->requestNumber);
-
-        if (status != NO_ERROR) {
-            goto invalid;
-        }
-        CALL_ONREQUEST(pRI->pCI->requestNumber,
-                              dataProfilePtrs,
-                              num * sizeof(RIL_DataProfileInfo *),
-                              pRI, pRI->socket_id);
-
-#ifdef MEMSET_FREED
-        memset(dataProfiles, 0, num * sizeof(RIL_DataProfileInfo));
-        memset(dataProfilePtrs, 0, num * sizeof(RIL_DataProfileInfo *));
-#endif
-    }
-
-    return;
-
-invalid:
-    invalidCommandBlock(pRI);
-    return;
-}
-
 static int
 blockingWrite(int fd, const void *buffer, size_t len) {
     size_t writeOffset = 0;
@@ -4668,7 +4593,6 @@
         case RIL_REQUEST_SIM_AUTHENTICATION: return "SIM_AUTHENTICATION";
         case RIL_REQUEST_GET_DC_RT_INFO: return "GET_DC_RT_INFO";
         case RIL_REQUEST_SET_DC_RT_INFO_RATE: return "SET_DC_RT_INFO_RATE";
-        case RIL_REQUEST_SET_DATA_PROFILE: return "SET_DATA_PROFILE";
         case RIL_UNSOL_RESPONSE_RADIO_STATE_CHANGED: return "UNSOL_RESPONSE_RADIO_STATE_CHANGED";
         case RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED: return "UNSOL_RESPONSE_CALL_STATE_CHANGED";
         case RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED: return "UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED";
diff --git a/libril/ril_commands.h b/libril/ril_commands.h
index 1d96abb..dfcaf4f 100644
--- a/libril/ril_commands.h
+++ b/libril/ril_commands.h
@@ -142,4 +142,3 @@
     {RIL_REQUEST_SIM_AUTHENTICATION, dispatchSimAuthentication, responseSIM_IO},
     {RIL_REQUEST_GET_DC_RT_INFO, dispatchVoid, responseDcRtInfo},
     {RIL_REQUEST_SET_DC_RT_INFO_RATE, dispatchInts, responseVoid},
-    {RIL_REQUEST_SET_DATA_PROFILE, dispatchDataProfile, responseVoid},
