diff --git a/api/system-current.txt b/api/system-current.txt
index 29a869f..23dc949 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -43874,8 +43874,8 @@
 
 package android.telephony.ims {
 
-  public class ImsServiceBase extends android.app.Service {
-    ctor public ImsServiceBase();
+  public class ImsService extends android.app.Service {
+    ctor public ImsService();
     method public android.os.IBinder onBind(android.content.Intent);
   }
 
diff --git a/telephony/java/android/telephony/ims/ImsService.java b/telephony/java/android/telephony/ims/ImsService.java
index f1f683c..ba70374 100644
--- a/telephony/java/android/telephony/ims/ImsService.java
+++ b/telephony/java/android/telephony/ims/ImsService.java
@@ -16,7 +16,9 @@
 
 package android.telephony.ims;
 
+import android.annotation.SystemApi;
 import android.app.PendingIntent;
+import android.app.Service;
 import android.content.Intent;
 import android.content.pm.PackageManager;
 import android.os.IBinder;
@@ -72,26 +74,30 @@
  *    {@link CarrierConfigManager#KEY_CONFIG_IMS_PACKAGE_OVERRIDE_STRING}.
  *
  * The features that are currently supported in an ImsService are:
- * - RCS_FEATURE: This ImsService implements the {@link RcsFeature} class.
- * - MMTEL_FEATURE: This ImsService implements the {@link MMTelFeature} class.
- * - EMERGENCY_MMTEL_FEATURE: This ImsService implements the {@link MMTelFeature} class and will be
+ * - RCS_FEATURE: This ImsService implements the RcsFeature class.
+ * - MMTEL_FEATURE: This ImsService implements the MMTelFeature class.
+ * - EMERGENCY_MMTEL_FEATURE: This ImsService implements the MMTelFeature class and will be
  *   available to place emergency calls at all times. This MUST be implemented by the default
  *   ImsService provided in the device overlay.
- *
- * @hide
+ *   @hide
  */
-public abstract class ImsService extends ImsServiceBase {
+@SystemApi
+public class ImsService extends Service {
 
     private static final String LOG_TAG = "ImsService";
 
     /**
      * The intent that must be defined as an intent-filter in the AndroidManifest of the ImsService.
+     * @hide
      */
     public static final String SERVICE_INTERFACE = "android.telephony.ims.ImsService";
 
     // A map of slot Id -> Set of features corresponding to that slot.
     private final SparseArray<SparseArray<ImsFeature>> mFeatures = new SparseArray<>();
 
+    /**
+     * @hide
+     */
     // Implements all supported features as a flat interface.
     protected final IBinder mImsServiceController = new IImsServiceController.Stub() {
 
@@ -328,6 +334,9 @@
 
     };
 
+    /**
+     * @hide
+     */
     @Override
     public IBinder onBind(Intent intent) {
         if(SERVICE_INTERFACE.equals(intent.getAction())) {
@@ -409,12 +418,18 @@
         return null;
     }
 
+    /**
+     * @hide
+     */
     @VisibleForTesting
     // Be sure to lock on mFeatures before accessing this method
     public SparseArray<ImsFeature> getImsFeatureMap(int slotId) {
         return mFeatures.get(slotId);
     }
 
+    /**
+     * @hide
+     */
     @VisibleForTesting
     // Be sure to lock on mFeatures before accessing this method
     public ImsFeature getImsFeatureFromType(SparseArray<ImsFeature> set, int featureType) {
@@ -451,17 +466,26 @@
     /**
      * @return An implementation of MMTelFeature that will be used by the system for MMTel
      * functionality. Must be able to handle emergency calls at any time as well.
+     * @hide
      */
-    public abstract MMTelFeature onCreateEmergencyMMTelImsFeature(int slotId);
+    public MMTelFeature onCreateEmergencyMMTelImsFeature(int slotId) {
+        return null;
+    }
 
     /**
      * @return An implementation of MMTelFeature that will be used by the system for MMTel
      * functionality.
+     * @hide
      */
-    public abstract MMTelFeature onCreateMMTelImsFeature(int slotId);
+    public MMTelFeature onCreateMMTelImsFeature(int slotId) {
+        return null;
+    }
 
     /**
      * @return An implementation of RcsFeature that will be used by the system for RCS.
+     * @hide
      */
-    public abstract RcsFeature onCreateRcsFeature(int slotId);
+    public RcsFeature onCreateRcsFeature(int slotId) {
+        return null;
+    }
 }
diff --git a/telephony/java/android/telephony/ims/ImsServiceBase.java b/telephony/java/android/telephony/ims/ImsServiceBase.java
deleted file mode 100644
index bb36862..0000000
--- a/telephony/java/android/telephony/ims/ImsServiceBase.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (C) 2017 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
- */
-
-package android.telephony.ims;
-
-import android.annotation.SystemApi;
-import android.app.Service;
-import android.content.Intent;
-import android.os.Binder;
-import android.os.IBinder;
-
-/**
- * Base ImsService Implementation, which is used by the ImsResolver to bind. ImsServices that do not
- * need to provide an ImsService implementation but still wish to be managed by the ImsResolver
- * lifecycle may implement this class directly.
- * @hide
- */
-@SystemApi
-public class ImsServiceBase extends Service {
-
-    /**
-     * Binder connection that does nothing but keep the connection between this Service and the
-     * framework active. If this service crashes, the framework will be notified.
-     */
-    private IBinder mConnection = new Binder();
-
-    @Override
-    public IBinder onBind(Intent intent) {
-        return mConnection;
-    }
-
-}
