diff --git a/src/java/com/android/internal/telephony/CommandsInterface.java b/src/java/com/android/internal/telephony/CommandsInterface.java
index a6ff3fa..8a5cbda 100644
--- a/src/java/com/android/internal/telephony/CommandsInterface.java
+++ b/src/java/com/android/internal/telephony/CommandsInterface.java
@@ -1599,6 +1599,17 @@
     default void isNrDualConnectivityEnabled(Message message, WorkSource workSource) {}
 
     /**
+     * Enable or disable Voice over NR (VoNR)
+     * @param enabled enable or disable VoNR.
+     */
+    default void setVoNrEnabled(boolean enabled, Message message, WorkSource workSource) {}
+
+    /**
+     * Is voice over NR enabled
+     */
+    default void isVoNrEnabled(Message message, WorkSource workSource) {}
+
+    /**
      * Request to enable/disable network state change notifications when
      * location information (lac and/or cid) has changed.
      *
diff --git a/src/java/com/android/internal/telephony/Phone.java b/src/java/com/android/internal/telephony/Phone.java
index 9d16f1f..c718dbb 100644
--- a/src/java/com/android/internal/telephony/Phone.java
+++ b/src/java/com/android/internal/telephony/Phone.java
@@ -4656,6 +4656,21 @@
         mCi.setSimCardPower(state, result, workSource);
     }
 
+    /**
+     * Enable or disable Voice over NR (VoNR)
+     * @param enabled enable or disable VoNR.
+     **/
+    public void setVoNrEnabled(boolean enabled, Message result, WorkSource workSource) {
+        mCi.setVoNrEnabled(enabled, result, workSource);
+    }
+
+    /**
+     * Is voice over NR enabled
+     */
+    public void isVoNrEnabled(Message message, WorkSource workSource) {
+        mCi.isVoNrEnabled(message, workSource);
+    }
+
     public void setCarrierTestOverride(String mccmnc, String imsi, String iccid, String gid1,
             String gid2, String pnn, String spn, String carrierPrivilegeRules, String apn) {
     }
diff --git a/src/java/com/android/internal/telephony/RIL.java b/src/java/com/android/internal/telephony/RIL.java
index 29e12e1..dccd4f9 100644
--- a/src/java/com/android/internal/telephony/RIL.java
+++ b/src/java/com/android/internal/telephony/RIL.java
@@ -64,6 +64,7 @@
 import android.os.PowerManager.WakeLock;
 import android.os.RemoteException;
 import android.os.SystemClock;
+import android.os.SystemProperties;
 import android.os.WorkSource;
 import android.provider.Settings;
 import android.sysprop.TelephonyProperties;
@@ -235,6 +236,8 @@
 
     final Integer mPhoneId;
 
+    private static final String PROPERTY_IS_VONR_ENABLED = "persist.radio.is_vonr_enabled_";
+
     /**
      * A set that records if radio service is disabled in hal for
      * a specific phone id slot to avoid further getService request.
@@ -3096,6 +3099,46 @@
         }
     }
 
+    private void setVoNrEnabled(boolean enabled) {
+        SystemProperties.set(PROPERTY_IS_VONR_ENABLED + mPhoneId, String.valueOf(enabled));
+    }
+
+    private boolean isVoNrEnabled() {
+        return SystemProperties.getBoolean(PROPERTY_IS_VONR_ENABLED + mPhoneId, true);
+    }
+
+    /**
+     * Is voice over NR enabled
+     */
+    @Override
+    public void isVoNrEnabled(Message result, WorkSource workSource) {
+        boolean isEnabled = isVoNrEnabled();
+        if (result != null) {
+            AsyncResult.forMessage(result, isEnabled, null);
+            result.sendToTarget();
+        }
+    }
+
+    /**
+     * Enable or disable Voice over NR (VoNR)
+     * @param enabled enable or disable VoNR.
+     */
+    @Override
+    public void setVoNrEnabled(boolean enabled, Message result, WorkSource workSource) {
+        setVoNrEnabled(enabled);
+        /* calling a query api to let HAL know that VoNREnabled state is updated.
+           This is a temporary work around as new HIDL API is not allowed.
+           HAL can check the value of PROPERTY_IS_VONR_ENABLED property to determine
+           if there is any change whenever it receives isNrDualConnectivityEnabled request.
+           This behavior will be removed in Android T.
+         */
+        isNrDualConnectivityEnabled(null, workSource);
+        if (result != null) {
+            AsyncResult.forMessage(result, null, null);
+            result.sendToTarget();
+        }
+    }
+
     @Override
     public void setCdmaSubscriptionSource(int cdmaSubscription , Message result) {
         IRadio radioProxy = getRadioProxy(result);
