diff --git a/common/libs/constants/ril.h b/common/libs/constants/ril.h
new file mode 100644
index 0000000..b9c3e8a
--- /dev/null
+++ b/common/libs/constants/ril.h
@@ -0,0 +1,31 @@
+#pragma once
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * 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.
+ */
+
+#if defined(CUTTLEFISH_HOST)
+#define CF_PROPERTY_PREFIX "androidboot"
+#else
+#define CF_PROPERTY_PREFIX "ro.boot"
+#endif
+
+#define CUTTLEFISH_RIL_ADDR_PROPERTY CF_PROPERTY_PREFIX ".cuttlefish_ril_addr"
+#define CUTTLEFISH_RIL_GATEWAY_PROPERTY \
+  CF_PROPERTY_PREFIX ".cuttlefish_ril_gateway"
+#define CUTTLEFISH_RIL_DNS_PROPERTY CF_PROPERTY_PREFIX ".cuttlefish_ril_dns"
+#define CUTTLEFISH_RIL_BROADCAST_PROPERTY \
+  CF_PROPERTY_PREFIX ".cuttlefish_ril_broadcast"
+#define CUTTLEFISH_RIL_PREFIXLEN_PROPERTY \
+  CF_PROPERTY_PREFIX ".cuttlefish_ril_prefixlen"
diff --git a/guest/hals/ril/cuttlefish_ril.cpp b/guest/hals/ril/cuttlefish_ril.cpp
index 80de442..929933b 100644
--- a/guest/hals/ril/cuttlefish_ril.cpp
+++ b/guest/hals/ril/cuttlefish_ril.cpp
@@ -17,6 +17,7 @@
 #include "guest/hals/ril/cuttlefish_ril.h"
 
 #include <cutils/properties.h>
+#include <stdio.h>
 #include <string.h>
 #include <sys/types.h>
 #include <time.h>
@@ -26,10 +27,10 @@
 #include <string>
 #include <vector>
 
+#include "common/libs/constants/ril.h"
 #include "common/libs/net/netlink_client.h"
 #include "common/libs/net/network_interface.h"
 #include "common/libs/net/network_interface_manager.h"
-#include "common/vsoc/lib/ril_region_view.h"
 #include "guest/libs/platform_support/api_level_fixes.h"
 
 #define CUTTLEFISH_RIL_VERSION_STRING "Android Cuttlefish RIL 1.0"
@@ -61,6 +62,49 @@
   RUIM_NETWORK_PERSONALIZATION = 11
 } SIM_Status;
 
+class RilConfig {
+ public:
+  static void InitRilConfig();
+
+  static char* address_and_prefixlength() {
+    return RilConfig::global_ril_config_.address_and_prefixlength_;
+  }
+
+  static char* dns() {
+    return RilConfig::global_ril_config_.dns_;
+  }
+
+  static char* gateway() {
+    return RilConfig::global_ril_config_.gateway_;
+  }
+
+  static char* ipaddr() {
+    return RilConfig::global_ril_config_.ipaddr_;
+  }
+
+  static int prefixlen() {
+    return RilConfig::global_ril_config_.prefixlen_;
+  }
+
+  static char* broadcast() {
+    return RilConfig::global_ril_config_.broadcast_;
+  }
+
+ private:
+  RilConfig() = default;
+  RilConfig(const RilConfig&) = default;
+
+  char ipaddr_[16]; // xxx.xxx.xxx.xxx\0 = 16 bytes
+  char gateway_[16];
+  char dns_[16];
+  char broadcast_[16];
+  char address_and_prefixlength_[19]; // <ipaddr>/dd
+  int prefixlen_;
+
+  static RilConfig global_ril_config_;
+};
+RilConfig RilConfig::global_ril_config_;
+
 static const struct RIL_Env* gce_ril_env;
 
 static const struct timeval TIMEVAL_SIMPOLL = {3, 0};
@@ -129,6 +173,43 @@
   return false;
 }
 
+static bool ReadStringProperty(char* dst, const char* key, size_t max_size) {
+  char buffer[PROPERTY_VALUE_MAX];
+  auto res = property_get(key, buffer, NULL);
+  if (res < 0) {
+    ALOGE("Failed to read property %s", key);
+    return false;
+  }
+  if (res > static_cast<int>(max_size - 1)) {
+    ALOGE("Invalid value in property %s: value too long: %s", key, buffer);
+    return false;
+  }
+  snprintf(dst, res + 1, "%s", buffer);
+  return true;
+}
+
+void RilConfig::InitRilConfig() {
+  RilConfig tmp_config;
+  ReadStringProperty(&tmp_config.ipaddr_[0], CUTTLEFISH_RIL_ADDR_PROPERTY,
+                     sizeof(tmp_config.ipaddr_));
+  ReadStringProperty(&tmp_config.gateway_[0],
+                     CUTTLEFISH_RIL_GATEWAY_PROPERTY,
+                     sizeof(tmp_config.gateway_));
+  ReadStringProperty(&tmp_config.dns_[0], CUTTLEFISH_RIL_DNS_PROPERTY,
+                     sizeof(tmp_config.dns_));
+  ReadStringProperty(&tmp_config.broadcast_[0],
+                     CUTTLEFISH_RIL_BROADCAST_PROPERTY,
+                     sizeof(tmp_config.broadcast_));
+  tmp_config.prefixlen_ =
+      property_get_int32(CUTTLEFISH_RIL_PREFIXLEN_PROPERTY, 30);
+
+  snprintf(&tmp_config.address_and_prefixlength_[0],
+           sizeof(tmp_config.address_and_prefixlength_), "%s/%d",
+           tmp_config.ipaddr_, tmp_config.prefixlen_);
+
+  RilConfig::global_ril_config_ = tmp_config;
+}
+
 // TearDownNetworkInterface disables network interface.
 // This call returns true, if operation was successful.
 bool TearDownNetworkInterface() {
@@ -186,13 +267,11 @@
         break;
     }
 
-    auto ril_region_view = vsoc::ril::RilRegionView::GetInstance();
-
     responses[index].ifname = (char*)"rmnet0";
     responses[index].addresses =
-      const_cast<char*>(ril_region_view->address_and_prefix_length());
-    responses[index].dnses = (char*)ril_region_view->data()->dns;
-    responses[index].gateways = (char*)ril_region_view->data()->gateway;
+      const_cast<char*>(RilConfig::address_and_prefixlength());
+    responses[index].dnses = RilConfig::dns();
+    responses[index].gateways = RilConfig::gateway();
 #if VSOC_PLATFORM_SDK_AFTER(N_MR1)
     responses[index].pcscf = (char*)"";
     responses[index].mtu = 1440;
@@ -314,10 +393,8 @@
   }
 
   if (gDataCalls.empty()) {
-    auto ril_region_view = vsoc::ril::RilRegionView::GetInstance();
-    SetUpNetworkInterface(ril_region_view->data()->ipaddr,
-                          ril_region_view->data()->prefixlen,
-                          ril_region_view->data()->broadcast);
+    SetUpNetworkInterface(RilConfig::ipaddr(), RilConfig::prefixlen(),
+                          RilConfig::broadcast());
   }
 
   gDataCalls[gNextDataCallId] = call;
@@ -2472,6 +2549,8 @@
   time(&gce_ril_start_time);
   gce_ril_env = env;
 
+  RilConfig::InitRilConfig();
+
   TearDownNetworkInterface();
 
   init_modem_supported_network_types();
diff --git a/host/commands/launch/Android.bp b/host/commands/launch/Android.bp
index d055973..c7c0859 100644
--- a/host/commands/launch/Android.bp
+++ b/host/commands/launch/Android.bp
@@ -18,7 +18,7 @@
     srcs: [
         "main.cc",
         "screen_region_handler.cc",
-        "ril_region_handler.cc",
+        "ril_config.cc",
         "vsoc_shared_memory.cc",
         "wifi_region_handler.cc",
         "boot_image_unpacker.cc",
diff --git a/host/commands/launch/flags.cc b/host/commands/launch/flags.cc
index dbb44bf..797c1ea 100644
--- a/host/commands/launch/flags.cc
+++ b/host/commands/launch/flags.cc
@@ -12,6 +12,7 @@
 #include "host/commands/launch/data_image.h"
 #include "host/commands/launch/launch.h"
 #include "host/commands/launch/launcher_defs.h"
+#include "host/commands/launch/ril_config.h"
 #include "host/libs/vm_manager/crosvm_manager.h"
 #include "host/libs/vm_manager/qemu_manager.h"
 #include "host/libs/vm_manager/vm_manager.h"
@@ -349,6 +350,7 @@
 
   tmp_config_obj.set_mobile_bridge_name(FLAGS_mobile_interface);
   tmp_config_obj.set_mobile_tap_name(FLAGS_mobile_tap_name);
+  ConfigureRil(&tmp_config_obj);
 
   tmp_config_obj.set_wifi_bridge_name(FLAGS_wifi_interface);
   tmp_config_obj.set_wifi_tap_name(FLAGS_wifi_tap_name);
diff --git a/host/commands/launch/pre_launch_initializers.h b/host/commands/launch/pre_launch_initializers.h
index 925cdf8..c4788db 100644
--- a/host/commands/launch/pre_launch_initializers.h
+++ b/host/commands/launch/pre_launch_initializers.h
@@ -25,14 +25,12 @@
 // To add initializers for more regions declare here, implement in its own
 // source file and call from PreLaunchInitializers::Initialize().
 void InitializeScreenRegion(const vsoc::CuttlefishConfig& config);
-void InitializeRilRegion(const vsoc::CuttlefishConfig& config);
 void InitializeWifiRegion(const vsoc::CuttlefishConfig& config);
 
 class PreLaunchInitializers {
  public:
   static void Initialize(const vsoc::CuttlefishConfig& config) {
     InitializeScreenRegion(config);
-    InitializeRilRegion(config);
     InitializeWifiRegion(config);
   }
 };
diff --git a/host/commands/launch/ril_region_handler.cc b/host/commands/launch/ril_config.cc
similarity index 76%
rename from host/commands/launch/ril_region_handler.cc
rename to host/commands/launch/ril_config.cc
index b3bb00a..195256a 100644
--- a/host/commands/launch/ril_region_handler.cc
+++ b/host/commands/launch/ril_config.cc
@@ -20,11 +20,13 @@
 #include <string.h>
 
 #include <memory>
+#include <sstream>
 #include <string>
 
-#include "common/vsoc/lib/ril_region_view.h"
-#include "host/commands/launch/pre_launch_initializers.h"
-#include "host/libs/config/cuttlefish_config.h"
+#include <glog/logging.h>
+
+#include "common/libs/constants/ril.h"
+#include "host/commands/launch/ril_config.h"
 
 namespace {
 
@@ -119,31 +121,31 @@
     return ret;
   }
 };
+
+template <typename T>
+std::string BuildPropertyDefinition(const std::string& prop_name,
+                                  const T& prop_value) {
+  std::ostringstream stream;
+  stream << prop_name << "=" << prop_value;
+  return stream.str();
+}
 }  // namespace
 
-void InitializeRilRegion(const vsoc::CuttlefishConfig& config) {
+void ConfigureRil(vsoc::CuttlefishConfig* config) {
   NetConfig netconfig;
-  if (!netconfig.ObtainConfig(config.mobile_bridge_name())) {
+  if (!netconfig.ObtainConfig(config->mobile_bridge_name())) {
     LOG(ERROR) << "Unable to obtain the network configuration";
     return;
   }
 
-  auto region =
-      vsoc::ril::RilRegionView::GetInstance(vsoc::GetDomain().c_str());
-
-  if (!region) {
-    LOG(ERROR) << "Ril region was not found";
-    return;
-  }
-
-  auto dest = region->data();
-
-  snprintf(dest->ipaddr, sizeof(dest->ipaddr), "%s",
-           netconfig.ril_ipaddr.c_str());
-  snprintf(dest->gateway, sizeof(dest->gateway), "%s",
-           netconfig.ril_gateway.c_str());
-  snprintf(dest->dns, sizeof(dest->dns), "%s", netconfig.ril_dns.c_str());
-  snprintf(dest->broadcast, sizeof(dest->broadcast), "%s",
-           netconfig.ril_broadcast.c_str());
-  dest->prefixlen = netconfig.ril_prefixlen;
+  config->add_kernel_cmdline(BuildPropertyDefinition(
+      CUTTLEFISH_RIL_ADDR_PROPERTY, netconfig.ril_ipaddr));
+  config->add_kernel_cmdline(BuildPropertyDefinition(
+      CUTTLEFISH_RIL_GATEWAY_PROPERTY, netconfig.ril_gateway));
+  config->add_kernel_cmdline(BuildPropertyDefinition(
+      CUTTLEFISH_RIL_DNS_PROPERTY, netconfig.ril_dns));
+  config->add_kernel_cmdline(BuildPropertyDefinition(
+      CUTTLEFISH_RIL_BROADCAST_PROPERTY, netconfig.ril_broadcast));
+  config->add_kernel_cmdline(BuildPropertyDefinition(
+      CUTTLEFISH_RIL_PREFIXLEN_PROPERTY, netconfig.ril_prefixlen));
 }
diff --git a/host/commands/launch/ril_config.h b/host/commands/launch/ril_config.h
new file mode 100644
index 0000000..49a43e8
--- /dev/null
+++ b/host/commands/launch/ril_config.h
@@ -0,0 +1,21 @@
+#pragma once
+
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * 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.
+ */
+
+#include "host/libs/config/cuttlefish_config.h"
+
+void ConfigureRil(vsoc::CuttlefishConfig* config);
\ No newline at end of file
