diff --git a/radio/1.3/Android.bp b/radio/1.4/Android.bp
similarity index 92%
rename from radio/1.3/Android.bp
rename to radio/1.4/Android.bp
index b616265..02c6cad 100644
--- a/radio/1.3/Android.bp
+++ b/radio/1.4/Android.bp
@@ -1,7 +1,7 @@
 // This file is autogenerated by hidl-gen -Landroidbp.
 
 hidl_interface {
-    name: "android.hardware.radio@1.3",
+    name: "android.hardware.radio@1.4",
     root: "android.hardware",
     vndk: {
         enabled: true,
@@ -16,6 +16,7 @@
         "android.hardware.radio@1.0",
         "android.hardware.radio@1.1",
         "android.hardware.radio@1.2",
+        "android.hardware.radio@1.3",
         "android.hidl.base@1.0",
         "android.hidl.safe_union@1.0",
     ],
diff --git a/radio/1.3/IRadio.hal b/radio/1.4/IRadio.hal
similarity index 89%
rename from radio/1.3/IRadio.hal
rename to radio/1.4/IRadio.hal
index dde9d71..1b6d9a6 100644
--- a/radio/1.3/IRadio.hal
+++ b/radio/1.4/IRadio.hal
@@ -14,14 +14,14 @@
  * limitations under the License.
  */
 
-package android.hardware.radio@1.3;
+package android.hardware.radio@1.4;
 
-import @1.3::DataProfileInfo;
+import @1.4::DataProfileInfo;
 import @1.0::Dial;
 import @1.2::DataRequestReason;
-import @1.2::IRadio;
-import @1.3::AccessNetwork;
-import @1.3::EmergencyServiceCategory;
+import @1.3::IRadio;
+import @1.4::AccessNetwork;
+import @1.4::EmergencyServiceCategory;
 
 /**
  * This interface is used by telephony and telecom to talk to cellular radio.
@@ -31,7 +31,7 @@
  * serial to different methods), multiple responses (one for each method call) must still be served.
  * setResponseFunctions must work with @1.1::IRadioResponse and @1.1::IRadioIndication.
  */
-interface IRadio extends @1.2::IRadio {
+interface IRadio extends @1.3::IRadio {
     /**
      * Setup a packet data connection. If DataCallResponse.status returns DataCallFailCause:NONE,
      * the data connection must be added to data calls and a unsolDataCallListChanged() must be
@@ -73,9 +73,9 @@
      *
      * Response function is IRadioResponse.setupDataCallResponse()
      *
-     * Note this API is same as 1.2 version except using the 1.3 AccessNetwork as the input param.
+     * Note this API is same as 1.2 version except using the 1.4 AccessNetwork as the input param.
      */
-    oneway setupDataCall_1_3(int32_t serial, AccessNetwork accessNetwork,
+    oneway setupDataCall_1_4(int32_t serial, AccessNetwork accessNetwork,
             DataProfileInfo dataProfileInfo, bool roamingAllowed,
             DataRequestReason reason, vec<string> addresses, vec<string> dnses);
 
@@ -87,7 +87,7 @@
      *
      * Response callback is IRadioResponse.setInitialAttachApnResponse()
      */
-    oneway setInitialAttachApn_1_3(int32_t serial, DataProfileInfo dataProfileInfo);
+    oneway setInitialAttachApn_1_4(int32_t serial, DataProfileInfo dataProfileInfo);
 
     /**
      * Send data profiles of the current carrier to the modem.
@@ -97,17 +97,17 @@
      *
      * Response callback is IRadioResponse.setDataProfileResponse()
      */
-    oneway setDataProfile_1_3(int32_t serial, vec<DataProfileInfo> profiles);
+    oneway setDataProfile_1_4(int32_t serial, vec<DataProfileInfo> profiles);
 
     /**
      * Initiate emergency voice call, with zero or more emergency service category(s).
      *
      * Note this API is the same as IRadio.dial except using the
-     * @1.3::EmergencyServiceCategory as the input param.
+     * @1.4::EmergencyServiceCategory as the input param.
      *
      * If the dialed emergency number does not have a specified emergency service category, the
-     * 'categories' field is set to @1.3::EmergencyServiceCategory#UNSPECIFIED; iff either the
-     * 'categories' field is set to @1.3::EmergencyServiceCategory#UNSPECIFIED or the underlying
+     * 'categories' field is set to @1.4::EmergencyServiceCategory#UNSPECIFIED; iff either the
+     * 'categories' field is set to @1.4::EmergencyServiceCategory#UNSPECIFIED or the underlying
      * technology used to request emergency services does not support the emergency service
      * category, the interpretation of the categories is defined by implementation.
      *
@@ -115,7 +115,7 @@
      *
      * @param serial Serial number of request.
      * @param dialInfo the same @1.0::Dial information used by @1.0::IRadio.dial.
-     * @param categories bitfield<@1.3::EmergencyServiceCategory> the Emergency Service Category(s)
+     * @param categories bitfield<@1.4::EmergencyServiceCategory> the Emergency Service Category(s)
      *     of the call.
      *
      * Response function is IRadioResponse.emergencyDialResponse()
diff --git a/radio/1.3/IRadioIndication.hal b/radio/1.4/IRadioIndication.hal
similarity index 84%
rename from radio/1.3/IRadioIndication.hal
rename to radio/1.4/IRadioIndication.hal
index b793fc0..fac77f7 100644
--- a/radio/1.3/IRadioIndication.hal
+++ b/radio/1.4/IRadioIndication.hal
@@ -14,19 +14,19 @@
  * limitations under the License.
  */
 
-package android.hardware.radio@1.3;
+package android.hardware.radio@1.4;
 
 import @1.0::RadioIndicationType;
-import @1.2::IRadioIndication;
+import @1.3::IRadioIndication;
 
 /**
  * Interface declaring unsolicited radio indications.
  */
-interface IRadioIndication extends @1.2::IRadioIndication {
+interface IRadioIndication extends @1.3::IRadioIndication {
     /**
      * Report the current list of emergency numbers
      *
-     * Each emergency number (@1.3::EmergencyNumber) in the emergency number list contains a
+     * Each emergency number (@1.4::EmergencyNumber) in the emergency number list contains a
      * dialing number, zero or more service category(s), mobile country code, and source(s) that
      * indicate where it comes from.
      *
@@ -35,8 +35,8 @@
      * modem/oem configuration, and default configuration (112 and 911 must be always available;
      * additionally, 000, 08, 110, 999, 118 and 119 must be available when sim is not present).
      * Radio shall not report emergency numbers that are invalid in the current locale. The
-     * reported emergency number list must not have duplicate @1.3::EmergencyNumber entries. Please
-     * refer the documentation of @1.3::EmergencyNumber to construct each emergency number to
+     * reported emergency number list must not have duplicate @1.4::EmergencyNumber entries. Please
+     * refer the documentation of @1.4::EmergencyNumber to construct each emergency number to
      * report.
      *
      * Radio must report the complete list of emergency numbers whenever the emergency numbers in
@@ -56,12 +56,12 @@
      * @param type Type of radio indication
      * @param records Current cell information
      */
-    oneway cellInfoList_1_3(RadioIndicationType type, vec<CellInfo> records);
+    oneway cellInfoList_1_4(RadioIndicationType type, vec<CellInfo> records);
 
     /**
      * Incremental network scan results
      */
-    oneway networkScanResult_1_3(RadioIndicationType type, NetworkScanResult result);
+    oneway networkScanResult_1_4(RadioIndicationType type, NetworkScanResult result);
 
     /**
      * Indicates physical channel configurations.
@@ -71,6 +71,6 @@
      * @param type Type of radio indication
      * @param configs Vector of PhysicalChannelConfigs
      */
-    oneway currentPhysicalChannelConfigs_1_3(RadioIndicationType type,
+    oneway currentPhysicalChannelConfigs_1_4(RadioIndicationType type,
             vec<PhysicalChannelConfig> configs);
-};
+};
\ No newline at end of file
diff --git a/radio/1.3/IRadioResponse.hal b/radio/1.4/IRadioResponse.hal
similarity index 89%
rename from radio/1.3/IRadioResponse.hal
rename to radio/1.4/IRadioResponse.hal
index fecd951..d971850 100644
--- a/radio/1.3/IRadioResponse.hal
+++ b/radio/1.4/IRadioResponse.hal
@@ -14,15 +14,15 @@
  * limitations under the License.
  */
 
-package android.hardware.radio@1.3;
+package android.hardware.radio@1.4;
 
 import @1.0::RadioResponseInfo;
-import @1.2::IRadioResponse;
+import @1.3::IRadioResponse;
 
 /**
  * Interface declaring response functions to solicited radio requests.
  */
-interface IRadioResponse extends @1.2::IRadioResponse {
+interface IRadioResponse extends @1.3::IRadioResponse {
     /**
      * @param info Response info struct containing response type, serial no. and error
      *
@@ -57,7 +57,7 @@
      *   RadioError:RADIO_NOT_AVAILABLE
      *   RadioError:INTERNAL_ERR
      */
-    oneway getCellInfoListResponse_1_3(RadioResponseInfo info, vec<CellInfo> cellInfo);
+    oneway getCellInfoListResponse_1_4(RadioResponseInfo info, vec<CellInfo> cellInfo);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -70,7 +70,7 @@
      *   RadioError:INTERNAL_ERR
      *   RadioError:NOT_PROVISIONED
      */
-    oneway getDataRegistrationStateResponse_1_3(RadioResponseInfo info,
+    oneway getDataRegistrationStateResponse_1_4(RadioResponseInfo info,
             DataRegStateResult dataRegResponse);
 
     /**
@@ -86,5 +86,5 @@
      *   RadioError:CANCELLED
      *   RadioError:REQUEST_NOT_SUPPORTED
      */
-    oneway getIccCardStatusResponse_1_3(RadioResponseInfo info, CardStatus cardStatus);
-};
+    oneway getIccCardStatusResponse_1_4(RadioResponseInfo info, CardStatus cardStatus);
+};
\ No newline at end of file
diff --git a/radio/1.3/types.hal b/radio/1.4/types.hal
similarity index 96%
rename from radio/1.3/types.hal
rename to radio/1.4/types.hal
index bdb7ff6..ea3c53f 100644
--- a/radio/1.3/types.hal
+++ b/radio/1.4/types.hal
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package android.hardware.radio@1.3;
+package android.hardware.radio@1.4;
 
 import @1.0::ApnAuthType;
 import @1.0::ApnTypes;
@@ -56,7 +56,7 @@
  * provided; otherwise the field ‘mcc’ must be an empty string.
  *
  * A unique EmergencyNumber has a unique combination of ‘number’, ‘mcc’ and 'categories' fields.
- * Multiple @1.3::EmergencyNumberSource should be merged into the bitfield for the same
+ * Multiple @1.4::EmergencyNumberSource should be merged into the bitfield for the same
  * EmergencyNumber.
  *
  * Reference: 3GPP TS 22.101 version 9.1.0 Release 9
@@ -72,12 +72,12 @@
      */
     string mcc;
     /**
-     * The bitfield of @1.3::EmergencyServiceCategory(s). See @1.3::EmergencyServiceCategory for
+     * The bitfield of @1.4::EmergencyServiceCategory(s). See @1.4::EmergencyServiceCategory for
      * the value of each bit.
      */
     bitfield<EmergencyServiceCategory> categories;
     /**
-     * The bitfield of @1.3::EmergencyNumberSource(s). See @1.3::EmergencyNumberSource for the
+     * The bitfield of @1.4::EmergencyNumberSource(s). See @1.4::EmergencyNumberSource for the
      * value of each bit.
      */
     bitfield<EmergencyNumberSource> sources;
@@ -120,7 +120,7 @@
 };
 
 /**
- * The source to tell where the corresponding @1.3::EmergencyNumber comes from.
+ * The source to tell where the corresponding @1.4::EmergencyNumber comes from.
  *
  * Reference: 3gpp 22.101, Section 10 - Emergency Calls
  */
@@ -275,7 +275,7 @@
     CellConfigLte cellConfig;
 };
 
-/** Overwritten from @1.2::CellInfo in order to update the CellInfoLte to 1.3 version. */
+/** Overwritten from @1.2::CellInfo in order to update the CellInfoLte to 1.4 version. */
 struct CellInfo {
     /** Cell type for selecting from union CellInfo. */
     CellInfoType cellInfoType;
@@ -296,7 +296,7 @@
     } info;
 };
 
-/** Overwritten from @1.2::NetworkScanResult in order to update the CellInfo to 1.3 version. */
+/** Overwritten from @1.2::NetworkScanResult in order to update the CellInfo to 1.4 version. */
 struct NetworkScanResult {
     /**
      * The status of the scan.
