diff --git a/src/com/android/server/telecom/Call.java b/src/com/android/server/telecom/Call.java
index 0bdf58d..b011879 100644
--- a/src/com/android/server/telecom/Call.java
+++ b/src/com/android/server/telecom/Call.java
@@ -40,14 +40,13 @@
 import android.telecom.BluetoothCallQualityReport;
 import android.telecom.CallAudioState;
 import android.telecom.CallDiagnosticService;
+import android.telecom.CallDiagnostics;
 import android.telecom.CallerInfo;
 import android.telecom.Conference;
 import android.telecom.Connection;
 import android.telecom.ConnectionService;
-import android.telecom.DiagnosticCall;
 import android.telecom.DisconnectCause;
 import android.telecom.GatewayInfo;
-import android.telecom.InCallService;
 import android.telecom.Log;
 import android.telecom.Logging.EventManager;
 import android.telecom.ParcelableConference;
@@ -63,7 +62,6 @@
 import android.telephony.emergency.EmergencyNumber;
 import android.telephony.ims.ImsReasonInfo;
 import android.text.TextUtils;
-import android.util.ArrayMap;
 import android.widget.Toast;
 
 import com.android.internal.annotations.VisibleForTesting;
@@ -667,8 +665,8 @@
 
     /**
      * Set to {@code true} if we received a valid response ({@code null} or otherwise) from
-     * the {@link DiagnosticCall#onCallDisconnected(ImsReasonInfo)} or
-     * {@link DiagnosticCall#onCallDisconnected(int, int)} calls.  This is used to detect a timeout
+     * the {@link CallDiagnostics#onCallDisconnected(ImsReasonInfo)} or
+     * {@link CallDiagnostics#onCallDisconnected(int, int)} calls.  This is used to detect a timeout
      * when awaiting a response from the call diagnostic service.
      */
     private boolean mReceivedCallDiagnosticPostCallResponse = false;
@@ -676,8 +674,8 @@
     /**
      * {@link CompletableFuture} used to delay posting disconnection and removal to a call until
      * after a {@link CallDiagnosticService} is able to handle the disconnection and provide a
-     * disconnect message via {@link DiagnosticCall#onCallDisconnected(ImsReasonInfo)} or
-     * {@link DiagnosticCall#onCallDisconnected(int, int)}.
+     * disconnect message via {@link CallDiagnostics#onCallDisconnected(ImsReasonInfo)} or
+     * {@link CallDiagnostics#onCallDisconnected(int, int)}.
      */
     private CompletableFuture<Boolean> mDisconnectFuture;
 
@@ -4001,7 +3999,7 @@
      * @param message the message type to send.
      * @param value the value for the message.
      */
-    public void sendDeviceToDeviceMessage(@DiagnosticCall.MessageType int message, int value) {
+    public void sendDeviceToDeviceMessage(@CallDiagnostics.MessageType int message, int value) {
         Log.i(this, "sendDeviceToDeviceMessage; callId=%s, msg=%d/%d", getId(), message, value);
         Bundle extras = new Bundle();
         extras.putInt(Connection.EXTRA_DEVICE_TO_DEVICE_MESSAGE_TYPE, message);
@@ -4141,8 +4139,8 @@
     /**
      * Initializes a disconnect future which is used to chain up pending operations which take
      * place when the {@link CallDiagnosticService} returns the result of the
-     * {@link DiagnosticCall#onCallDisconnected(int, int)} or
-     * {@link DiagnosticCall#onCallDisconnected(ImsReasonInfo)} invocation via
+     * {@link CallDiagnostics#onCallDisconnected(int, int)} or
+     * {@link CallDiagnostics#onCallDisconnected(ImsReasonInfo)} invocation via
      * {@link CallDiagnosticServiceAdapter}.  If no {@link CallDiagnosticService} is in use, we
      * would not try to make a disconnect future.
      * @param timeoutMillis Timeout we use for waiting for the response.
diff --git a/src/com/android/server/telecom/CallDiagnosticServiceAdapter.java b/src/com/android/server/telecom/CallDiagnosticServiceAdapter.java
index 79a94d3..8623866 100644
--- a/src/com/android/server/telecom/CallDiagnosticServiceAdapter.java
+++ b/src/com/android/server/telecom/CallDiagnosticServiceAdapter.java
@@ -20,11 +20,10 @@
 import android.os.Binder;
 import android.os.RemoteException;
 import android.telecom.CallDiagnosticService;
-import android.telecom.DiagnosticCall;
+import android.telecom.CallDiagnostics;
 import android.telecom.Log;
 
 import com.android.internal.telecom.ICallDiagnosticServiceAdapter;
-import com.android.internal.telecom.IInCallAdapter;
 
 /**
  * Adapter class used to provide a path for messages FROM a {@link CallDiagnosticService} back to
@@ -34,7 +33,7 @@
     public interface TelecomAdapter {
         void displayDiagnosticMessage(String callId, int messageId, CharSequence message);
         void clearDiagnosticMessage(String callId, int messageId);
-        void sendDeviceToDeviceMessage(String callId, @DiagnosticCall.MessageType int message,
+        void sendDeviceToDeviceMessage(String callId, @CallDiagnostics.MessageType int message,
                 int value);
         void overrideDisconnectMessage(String callId, CharSequence message);
     }
@@ -91,7 +90,7 @@
     }
 
     @Override
-    public void sendDeviceToDeviceMessage(String callId, @DiagnosticCall.MessageType int message,
+    public void sendDeviceToDeviceMessage(String callId, @CallDiagnostics.MessageType int message,
             int value)
             throws RemoteException {
         try {
diff --git a/src/com/android/server/telecom/CallDiagnosticServiceController.java b/src/com/android/server/telecom/CallDiagnosticServiceController.java
index 547bdcd..7737a44 100644
--- a/src/com/android/server/telecom/CallDiagnosticServiceController.java
+++ b/src/com/android/server/telecom/CallDiagnosticServiceController.java
@@ -35,7 +35,7 @@
 import android.telecom.CallAudioState;
 import android.telecom.CallDiagnosticService;
 import android.telecom.ConnectionService;
-import android.telecom.DiagnosticCall;
+import android.telecom.CallDiagnostics;
 import android.telecom.DisconnectCause;
 import android.telecom.InCallService;
 import android.telecom.Log;
@@ -46,7 +46,6 @@
 import com.android.internal.telecom.ICallDiagnosticService;
 import com.android.internal.util.IndentingPrintWriter;
 
-import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -455,7 +454,7 @@
 
         @Override
         public void sendDeviceToDeviceMessage(String callId,
-                        @DiagnosticCall.MessageType int message, int value) {
+                        @CallDiagnostics.MessageType int message, int value) {
             handleSendD2DMessage(callId, message, value);
         }
 
@@ -528,7 +527,7 @@
      * @param value The message value.
      */
     private void handleSendD2DMessage(@NonNull String callId,
-            @DiagnosticCall.MessageType int message, int value) {
+            @CallDiagnostics.MessageType int message, int value) {
         Call call = mCallIdMapper.getCall(callId);
         if (call == null) {
             Log.w(this, "handleSendD2DMessage: callId=%s; msg=%d/%d; invalid call", callId,
@@ -542,7 +541,7 @@
     /**
      * Handles a request from a {@link CallDiagnosticService} to override the disconnect message
      * for a call.  This is the response path from a previous call into the
-     * {@link CallDiagnosticService} via {@link DiagnosticCall#onCallDisconnected(ImsReasonInfo)}.
+     * {@link CallDiagnosticService} via {@link CallDiagnostics#onCallDisconnected(ImsReasonInfo)}.
      * @param callId The telecom call ID the disconnect override is pending for.
      * @param message The new disconnect message, or {@code null} if no override.
      */
diff --git a/src/com/android/server/telecom/Timeouts.java b/src/com/android/server/telecom/Timeouts.java
index 22d1fbd..4f35003 100644
--- a/src/com/android/server/telecom/Timeouts.java
+++ b/src/com/android/server/telecom/Timeouts.java
@@ -20,7 +20,7 @@
 import android.provider.Settings;
 import android.telecom.CallDiagnosticService;
 import android.telecom.CallRedirectionService;
-import android.telecom.DiagnosticCall;
+import android.telecom.CallDiagnostics;
 import android.telephony.ims.ImsReasonInfo;
 
 import java.util.concurrent.TimeUnit;
@@ -223,8 +223,8 @@
 
     /**
      * Returns the maximum amount of time a {@link CallDiagnosticService} is permitted to take to
-     * return back from {@link DiagnosticCall#onCallDisconnected(ImsReasonInfo)} and
-     * {@link DiagnosticCall#onCallDisconnected(int, int)}.
+     * return back from {@link CallDiagnostics#onCallDisconnected(ImsReasonInfo)} and
+     * {@link CallDiagnostics#onCallDisconnected(int, int)}.
      * @param contentResolver The resolver for the config option.
      * @return The timeout in millis.
      */
diff --git a/testapps/src/com/android/server/telecom/testapps/TestCallDiagnosticService.java b/testapps/src/com/android/server/telecom/testapps/TestCallDiagnosticService.java
index 36554ec..e1511e7 100644
--- a/testapps/src/com/android/server/telecom/testapps/TestCallDiagnosticService.java
+++ b/testapps/src/com/android/server/telecom/testapps/TestCallDiagnosticService.java
@@ -20,7 +20,7 @@
 import android.telecom.Call;
 import android.telecom.CallAudioState;
 import android.telecom.CallDiagnosticService;
-import android.telecom.DiagnosticCall;
+import android.telecom.CallDiagnostics;
 import android.telecom.Log;
 import android.telephony.CallQuality;
 import android.telephony.ims.ImsReasonInfo;
@@ -30,10 +30,10 @@
 
 public class TestCallDiagnosticService extends CallDiagnosticService {
 
-    public static final class TestDiagnosticCall extends DiagnosticCall {
+    public static final class TestCallDiagnostics extends CallDiagnostics {
         public Call.Details details;
 
-        TestDiagnosticCall(Call.Details details) {
+        TestCallDiagnostics(Call.Details details) {
             this.details = details;
         }
 
@@ -69,13 +69,13 @@
 
     @NonNull
     @Override
-    public DiagnosticCall onInitializeDiagnosticCall(@NonNull Call.Details call) {
+    public CallDiagnostics onInitializeCallDiagnostics(@NonNull Call.Details call) {
         Log.i(this, "onInitiatlizeDiagnosticCall %s", call);
-        return new TestDiagnosticCall(call);
+        return new TestCallDiagnostics(call);
     }
 
     @Override
-    public void onRemoveDiagnosticCall(@NonNull DiagnosticCall call) {
+    public void onRemoveCallDiagnostics(@NonNull CallDiagnostics call) {
         Log.i(this, "onRemoveDiagnosticCall %s", call);
     }
 
