diff --git a/sip/src/com/android/services/telephony/sip/SipEditor.java b/sip/src/com/android/services/telephony/sip/SipEditor.java
index 1cee25b..8bc7734 100644
--- a/sip/src/com/android/services/telephony/sip/SipEditor.java
+++ b/sip/src/com/android/services/telephony/sip/SipEditor.java
@@ -258,7 +258,7 @@
      *
      * @param p The {@link SipProfile} to delete.
      */
-    private void deleteAndUnregisterProfile(SipProfile p) throws IOException {
+    private void deleteAndUnregisterProfile(SipProfile p) {
         if (p == null) return;
         mProfileDb.deleteProfile(p);
         mSipAccountRegistry.stopSipService(this, p.getProfileName());
diff --git a/sip/src/com/android/services/telephony/sip/SipProfileDb.java b/sip/src/com/android/services/telephony/sip/SipProfileDb.java
index bb1c7ec..e7b201b 100644
--- a/sip/src/com/android/services/telephony/sip/SipProfileDb.java
+++ b/sip/src/com/android/services/telephony/sip/SipProfileDb.java
@@ -21,7 +21,6 @@
 import android.content.Context;
 import android.net.sip.SipProfile;
 import android.text.TextUtils;
-import android.util.EventLog;
 import android.util.Log;
 
 import java.io.File;
@@ -67,13 +66,9 @@
         mSipPreferences = new SipPreferences(mContext);
     }
 
-    public void deleteProfile(SipProfile p) throws IOException {
+    public void deleteProfile(SipProfile p) {
         synchronized(SipProfileDb.class) {
-            File profileFile = new File(mProfilesDirectory, p.getProfileName());
-            if (!isChild(new File(mProfilesDirectory), profileFile)) {
-                throw new IOException("Invalid Profile Credentials!");
-            }
-            deleteProfile(profileFile);
+            deleteProfile(new File(mProfilesDirectory + p.getProfileName()));
             if (mProfilesCount < 0) retrieveSipProfileListInternal();
         }
     }
@@ -98,10 +93,7 @@
     public void saveProfile(SipProfile p) throws IOException {
         synchronized(SipProfileDb.class) {
             if (mProfilesCount < 0) retrieveSipProfileListInternal();
-            File f = new File(mProfilesDirectory, p.getProfileName());
-            if (!isChild(new File(mProfilesDirectory), f)) {
-                throw new IOException("Invalid Profile Credentials!");
-            }
+            File f = new File(mProfilesDirectory + p.getProfileName());
             if (!f.exists()) f.mkdirs();
             AtomicFile atomicFile = new AtomicFile(new File(f, PROFILE_OBJ_FILE));
             FileOutputStream fos = null;
@@ -181,19 +173,4 @@
     private static void log(String msg) {
         Log.d(SipUtil.LOG_TAG, PREFIX + msg);
     }
-
-    /**
-     * Verifies that the file is a direct child of the base directory.
-     */
-    private boolean isChild(File base, File file) {
-        if (base == null || file == null) {
-            return false;
-        }
-        if (!base.equals(file.getAbsoluteFile().getParentFile())) {
-            Log.w(SipUtil.LOG_TAG, "isChild, file is not a child of the base dir.");
-            EventLog.writeEvent(0x534e4554, "31530456", -1, "");
-            return false;
-        }
-        return true;
-    }
 }
