diff --git a/src/java/com/android/internal/telephony/Phone.java b/src/java/com/android/internal/telephony/Phone.java
index 13c99ea..c8cdcef 100644
--- a/src/java/com/android/internal/telephony/Phone.java
+++ b/src/java/com/android/internal/telephony/Phone.java
@@ -1317,6 +1317,11 @@
     String getSubscriberId();
 
     /**
+     * Retrieves the Group Identifier Level1 for GSM phones.
+     */
+    String getGroupIdLevel1();
+
+    /**
      * Retrieves the serial number of the ICC, if applicable.
      */
     String getIccSerialNumber();
diff --git a/src/java/com/android/internal/telephony/PhoneProxy.java b/src/java/com/android/internal/telephony/PhoneProxy.java
index bd322b3..a88d2ec 100644
--- a/src/java/com/android/internal/telephony/PhoneProxy.java
+++ b/src/java/com/android/internal/telephony/PhoneProxy.java
@@ -902,6 +902,11 @@
     }
 
     @Override
+    public String getGroupIdLevel1() {
+        return mActivePhone.getGroupIdLevel1();
+    }
+
+    @Override
     public String getIccSerialNumber() {
         return mActivePhone.getIccSerialNumber();
     }
diff --git a/src/java/com/android/internal/telephony/PhoneSubInfo.java b/src/java/com/android/internal/telephony/PhoneSubInfo.java
index 6effe76..185814d 100755
--- a/src/java/com/android/internal/telephony/PhoneSubInfo.java
+++ b/src/java/com/android/internal/telephony/PhoneSubInfo.java
@@ -88,6 +88,14 @@
     }
 
     /**
+     * Retrieves the Group Identifier Level1 for GSM phones.
+     */
+    public String getGroupIdLevel1() {
+        mContext.enforceCallingOrSelfPermission(READ_PHONE_STATE, "Requires READ_PHONE_STATE");
+        return mPhone.getGroupIdLevel1();
+    }
+
+    /**
      * Retrieves the serial number of the ICC, if applicable.
      */
     @Override
diff --git a/src/java/com/android/internal/telephony/PhoneSubInfoProxy.java b/src/java/com/android/internal/telephony/PhoneSubInfoProxy.java
index 3c13b97..1974ff8 100755
--- a/src/java/com/android/internal/telephony/PhoneSubInfoProxy.java
+++ b/src/java/com/android/internal/telephony/PhoneSubInfoProxy.java
@@ -55,6 +55,13 @@
     }
 
     /**
+     * Retrieves the Group Identifier Level1 for GSM phones.
+     */
+    public String getGroupIdLevel1() {
+        return mPhoneSubInfo.getGroupIdLevel1();
+    }
+
+    /**
      * Retrieves the serial number of the ICC, if applicable.
      */
     @Override
diff --git a/src/java/com/android/internal/telephony/cdma/CDMALTEPhone.java b/src/java/com/android/internal/telephony/cdma/CDMALTEPhone.java
index 988f36a..973f773 100644
--- a/src/java/com/android/internal/telephony/cdma/CDMALTEPhone.java
+++ b/src/java/com/android/internal/telephony/cdma/CDMALTEPhone.java
@@ -229,6 +229,12 @@
         return (mSimRecords != null) ? mSimRecords.getIMSI() : "";
     }
 
+    // return GID1 from USIM
+    @Override
+    public String getGroupIdLevel1() {
+        return (mSimRecords != null) ? mSimRecords.getGid1() : "";
+    }
+
     @Override
     public String getImei() {
         return mImei;
diff --git a/src/java/com/android/internal/telephony/cdma/CDMAPhone.java b/src/java/com/android/internal/telephony/cdma/CDMAPhone.java
index b304e81..9f51483 100755
--- a/src/java/com/android/internal/telephony/cdma/CDMAPhone.java
+++ b/src/java/com/android/internal/telephony/cdma/CDMAPhone.java
@@ -512,6 +512,12 @@
     }
 
     @Override
+    public String getGroupIdLevel1() {
+        Rlog.e(LOG_TAG, "GID1 is not available in CDMA");
+        return null;
+    }
+
+    @Override
     public String getImei() {
         Rlog.e(LOG_TAG, "IMEI is not available in CDMA");
         return null;
diff --git a/src/java/com/android/internal/telephony/gsm/GSMPhone.java b/src/java/com/android/internal/telephony/gsm/GSMPhone.java
index 32e5a80..5cdf0ce 100644
--- a/src/java/com/android/internal/telephony/gsm/GSMPhone.java
+++ b/src/java/com/android/internal/telephony/gsm/GSMPhone.java
@@ -886,6 +886,12 @@
     }
 
     @Override
+    public String getGroupIdLevel1() {
+        IccRecords r = mIccRecords.get();
+        return (r != null) ? r.getGid1() : null;
+    }
+
+    @Override
     public String getLine1Number() {
         IccRecords r = mIccRecords.get();
         return (r != null) ? r.getMsisdnNumber() : null;
diff --git a/src/java/com/android/internal/telephony/sip/SipPhoneBase.java b/src/java/com/android/internal/telephony/sip/SipPhoneBase.java
index 49ca7c6..b369112 100755
--- a/src/java/com/android/internal/telephony/sip/SipPhoneBase.java
+++ b/src/java/com/android/internal/telephony/sip/SipPhoneBase.java
@@ -323,6 +323,11 @@
     }
 
     @Override
+    public String getGroupIdLevel1() {
+        return null;
+    }
+
+    @Override
     public String getIccSerialNumber() {
         return null;
     }
