diff --git a/libril/RilSapSocket.cpp b/libril/RilSapSocket.cpp
index 02db4ad..92b7a7b 100644
--- a/libril/RilSapSocket.cpp
+++ b/libril/RilSapSocket.cpp
@@ -110,7 +110,7 @@
 }
 
 void RilSapSocket::initSapSocket(const char *socketName,
-        RIL_RadioFunctions *uimFuncs) {
+        const RIL_RadioFunctions *uimFuncs) {
 
     if (strcmp(socketName, RIL1_SERVICE_NAME) == 0) {
         if(!SocketExists(socketName)) {
@@ -144,7 +144,7 @@
 }
 
 void RilSapSocket::addSocketToList(const char *socketName, RIL_SOCKET_ID socketid,
-        RIL_RadioFunctions *uimFuncs) {
+        const RIL_RadioFunctions *uimFuncs) {
     RilSapSocket* socket = NULL;
     RilSapSocketList *current;
 
@@ -189,7 +189,7 @@
 
 RilSapSocket::RilSapSocket(const char *socketName,
         RIL_SOCKET_ID socketId,
-        RIL_RadioFunctions *inputUimFuncs):
+        const RIL_RadioFunctions *inputUimFuncs):
         RilSocket(socketName, socketId) {
     if (inputUimFuncs) {
         uimFuncs = inputUimFuncs;
@@ -285,4 +285,4 @@
         sap::processUnsolResponse(&rsp, this);
         free(payload);
     }
-}
\ No newline at end of file
+}
diff --git a/libril/RilSapSocket.h b/libril/RilSapSocket.h
index 1f6163e..4f6316c 100644
--- a/libril/RilSapSocket.h
+++ b/libril/RilSapSocket.h
@@ -55,7 +55,7 @@
      * Place holder for the radio functions returned by the initialization
      * function. Currenty only onRequest handler is being used.
      */
-    RIL_RadioFunctions* uimFuncs;
+    const RIL_RadioFunctions* uimFuncs;
 
     /**
      * Wrapper struct for handling the requests in the queue.
@@ -85,7 +85,7 @@
          * @param Radio functions to be used by the socket.
          */
         static void initSapSocket(const char *socketName,
-        RIL_RadioFunctions *uimFuncs);
+        const RIL_RadioFunctions *uimFuncs);
 
         /**
          * Ril envoronment variable that holds the request and
@@ -153,7 +153,7 @@
          * and add socket to the socket list.
          */
         static void addSocketToList(const char *socketName, RIL_SOCKET_ID socketid,
-        RIL_RadioFunctions *uimFuncs);
+        const RIL_RadioFunctions *uimFuncs);
 
         /**
          * Check if a socket of the given name exists in the socket list.
@@ -173,7 +173,7 @@
          */
         RilSapSocket(const char *socketName,
         RIL_SOCKET_ID socketId,
-        RIL_RadioFunctions *inputUimFuncs);
+        const RIL_RadioFunctions *inputUimFuncs);
 
         /**
          * Class method that selects the socket on which the onRequestComplete
diff --git a/libril/ril.cpp b/libril/ril.cpp
index ea9ca86..1451a56 100644
--- a/libril/ril.cpp
+++ b/libril/ril.cpp
@@ -484,10 +484,10 @@
 }
 
 extern "C" void
-RIL_register_socket (RIL_RadioFunctions *(*Init)(const struct RIL_Env *, int, char **),
+RIL_register_socket (const RIL_RadioFunctions *(*Init)(const struct RIL_Env *, int, char **),
         RIL_SOCKET_TYPE socketType, int argc, char **argv) {
 
-    RIL_RadioFunctions* UimFuncs = NULL;
+    const RIL_RadioFunctions* UimFuncs = NULL;
 
     if(Init) {
         UimFuncs = Init(&RilSapSocket::uimRilEnv, argc, argv);
diff --git a/libril/sap_service.cpp b/libril/sap_service.cpp
index b027f89..2ac6745 100644
--- a/libril/sap_service.cpp
+++ b/libril/sap_service.cpp
@@ -915,7 +915,7 @@
     processResponse(rsp, sapSocket, MsgType_UNSOL_RESPONSE);
 }
 
-void sap::registerService(RIL_RadioFunctions *callbacks) {
+void sap::registerService(const RIL_RadioFunctions *callbacks) {
     using namespace android::hardware;
     int simCount = 1;
     const char *serviceNames[] = {
diff --git a/libril/sap_service.h b/libril/sap_service.h
index afed612..cb5ae10 100644
--- a/libril/sap_service.h
+++ b/libril/sap_service.h
@@ -24,10 +24,10 @@
 
 namespace sap {
 
-void registerService(RIL_RadioFunctions *callbacks);
+void registerService(const RIL_RadioFunctions *callbacks);
 void processResponse(MsgHeader *rsp, RilSapSocket *sapSocket);
 void processUnsolResponse(MsgHeader *rsp, RilSapSocket *sapSocket);
 
 }   // namespace android
 
-#endif  // RIL_SERVICE_H
\ No newline at end of file
+#endif  // RIL_SERVICE_H
diff --git a/rild/rild.c b/rild/rild.c
index ce04040..d324692 100644
--- a/rild/rild.c
+++ b/rild/rild.c
@@ -53,7 +53,7 @@
 extern void RIL_register (const RIL_RadioFunctions *callbacks);
 extern void rilc_thread_pool ();
 
-extern void RIL_register_socket (RIL_RadioFunctions *(*rilUimInit)
+extern void RIL_register_socket (const RIL_RadioFunctions *(*rilUimInit)
         (const struct RIL_Env *, int, char **), RIL_SOCKET_TYPE socketType, int argc, char **argv);
 
 extern void RIL_onRequestComplete(RIL_Token t, RIL_Errno e,
@@ -153,7 +153,7 @@
     // Pointer to ril init function in vendor ril
     const RIL_RadioFunctions *(*rilInit)(const struct RIL_Env *, int, char **);
     // Pointer to sap init function in vendor ril
-    RIL_RadioFunctions *(*rilUimInit)(const struct RIL_Env *, int, char **);
+    const RIL_RadioFunctions *(*rilUimInit)(const struct RIL_Env *, int, char **);
     const char *err_str = NULL;
 
     // functions returned by ril init function in vendor ril
@@ -231,7 +231,7 @@
 
     dlerror(); // Clear any previous dlerror
     rilUimInit =
-        (RIL_RadioFunctions *(*)(const struct RIL_Env *, int, char **))
+        (const RIL_RadioFunctions *(*)(const struct RIL_Env *, int, char **))
         dlsym(dlHandle, "RIL_SAP_Init");
     err_str = dlerror();
     if (err_str) {
