diff --git a/car-lib/src/android/car/CarInfoManager.java b/car-lib/src/android/car/CarInfoManager.java
index 8beb8d2..b70f6c9 100644
--- a/car-lib/src/android/car/CarInfoManager.java
+++ b/car-lib/src/android/car/CarInfoManager.java
@@ -63,24 +63,22 @@
     @ValueTypeDef(type = String.class)
     public static final String BASIC_INFO_KEY_VEHICLE_ID = "android.car.vehicle-id";
 
-    //TODO
+    /* TODO bug: 32059999
     //@ValueTypeDef(type = Integer.class)
     //public static final String KEY_DRIVER_POSITION = "driver-position";
 
-    //TODO
     //@ValueTypeDef(type = int[].class)
     //public static final String KEY_SEAT_CONFIGURATION = "seat-configuration";
 
-    //TODO
     //@ValueTypeDef(type = Integer.class)
     //public static final String KEY_WINDOW_CONFIGURATION = "window-configuration";
 
-    //TODO: MT, AT, CVT, ...
+    //MT, AT, CVT, ...
     //@ValueTypeDef(type = Integer.class)
     //public static final String KEY_TRANSMISSION_TYPE = "transmission-type";
 
-    //TODO add: transmission gear available selection, gear available steps
-    //          drive wheel: FWD, RWD, AWD, 4WD
+    // add: transmission gear available selection, gear available steps
+    //          drive wheel: FWD, RWD, AWD, 4WD */
 
     private final ICarInfo mService;
 
diff --git a/car-lib/src/android/car/cluster/renderer/DisplayConfiguration.java b/car-lib/src/android/car/cluster/renderer/DisplayConfiguration.java
index 2b9f0a0..409c817 100644
--- a/car-lib/src/android/car/cluster/renderer/DisplayConfiguration.java
+++ b/car-lib/src/android/car/cluster/renderer/DisplayConfiguration.java
@@ -22,7 +22,7 @@
 import android.os.Parcelable;
 
 /**
- * TODO: need to properly define this class and make it immutable.
+ * TODO: need to properly define this class and make it immutable. bug: 32060601
  *
  * @hide
  */
diff --git a/car-lib/src/android/car/cluster/renderer/InstrumentClusterRenderer.java b/car-lib/src/android/car/cluster/renderer/InstrumentClusterRenderer.java
index 858613d..5086186 100644
--- a/car-lib/src/android/car/cluster/renderer/InstrumentClusterRenderer.java
+++ b/car-lib/src/android/car/cluster/renderer/InstrumentClusterRenderer.java
@@ -24,7 +24,7 @@
 /**
  * Interface for instrument cluster rendering.
  *
- * TODO: implement instrument cluster feature list and extend API.
+ * TODO: implement instrument cluster feature list and extend API. bug: 32060603
  *
  * @hide
  */
diff --git a/car-lib/src/android/car/cluster/renderer/NavigationRenderer.java b/car-lib/src/android/car/cluster/renderer/NavigationRenderer.java
index 447348f..1719190 100644
--- a/car-lib/src/android/car/cluster/renderer/NavigationRenderer.java
+++ b/car-lib/src/android/car/cluster/renderer/NavigationRenderer.java
@@ -23,7 +23,7 @@
 /**
  * Contains methods specified for Navigation App renderer in instrument cluster.
  *
- * TODO: Consider to add methods to report time / distance to final destination.
+ * TODO: Consider to add methods to report time / distance to final destination. bug:32060070
  * @hide
  */
 @SystemApi
diff --git a/car-lib/src/android/car/hardware/CarSensorManager.java b/car-lib/src/android/car/hardware/CarSensorManager.java
index 5baf08e..831ee73 100644
--- a/car-lib/src/android/car/hardware/CarSensorManager.java
+++ b/car-lib/src/android/car/hardware/CarSensorManager.java
@@ -346,7 +346,7 @@
      * @throws CarNotConnectedException if the connection to the car service has been lost.
      */
     public void unregisterListener(OnSensorChangedListener listener) {
-        //TODO: removing listener should reset update rate
+        //TODO: removing listener should reset update rate, bug: 32060307
         synchronized(mActiveSensorListeners) {
             Iterator<Integer> sensorIterator = mActiveSensorListeners.keySet().iterator();
             while (sensorIterator.hasNext()) {
diff --git a/car-lib/src/android/car/hardware/camera/CarCameraManager.java b/car-lib/src/android/car/hardware/camera/CarCameraManager.java
index eed670d..37cf8b9 100644
--- a/car-lib/src/android/car/hardware/camera/CarCameraManager.java
+++ b/car-lib/src/android/car/hardware/camera/CarCameraManager.java
@@ -102,7 +102,7 @@
     }
 
     public void closeCamera(CarCamera camera) {
-        // TODO:  What should we do?
+        // nothing to do for now
     }
 
     /** @hide */
diff --git a/car-systemtest-lib/src/android/car/test/CarTestManager.java b/car-systemtest-lib/src/android/car/test/CarTestManager.java
index c7a0996..4a99207 100644
--- a/car-systemtest-lib/src/android/car/test/CarTestManager.java
+++ b/car-systemtest-lib/src/android/car/test/CarTestManager.java
@@ -132,7 +132,8 @@
     }
 
     private void handleRemoteException(RemoteException e) {
-        //TODO
+        // let test fail
+        throw new RuntimeException(e);
     }
 
     private static class IVehicleNetworkHalMockImpl extends IVehicleNetworkHalMock.Stub {
diff --git a/libvehiclenetwork/include/VehicleNetworkDataTypes.h b/libvehiclenetwork/include/VehicleNetworkDataTypes.h
index f5cc209..159aad0 100644
--- a/libvehiclenetwork/include/VehicleNetworkDataTypes.h
+++ b/libvehiclenetwork/include/VehicleNetworkDataTypes.h
@@ -100,7 +100,6 @@
         if (l.config_flags != r.config_flags) {
             return false;
         }
-        //TODO config_string
         if (l.float_min_value != r.float_min_value) {
             return false;
         }
diff --git a/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/IVehicleNetwork.aidl b/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/IVehicleNetwork.aidl
index a081fd0..cd16b4d 100644
--- a/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/IVehicleNetwork.aidl
+++ b/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/IVehicleNetwork.aidl
@@ -46,6 +46,4 @@
     void stopErrorListening(in IVehicleNetworkListener listener)                         = 10;
     void startHalRestartMonitoring(in IVehicleNetworkListener listener)                  = 11;
     void stopHalRestartMonitoring(in IVehicleNetworkListener listener)                   = 12;
-
-    //TODO add specialized set for byte array for efficiency
 }
diff --git a/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/IVehicleNetworkListener.aidl b/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/IVehicleNetworkListener.aidl
index 3acee49..6403e03 100644
--- a/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/IVehicleNetworkListener.aidl
+++ b/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/IVehicleNetworkListener.aidl
@@ -29,5 +29,4 @@
     void onHalError(int errorCode, int property, int operation)        = 1;
     void onHalRestart(boolean inMocking)                               = 2;
     void onPropertySet(in VehiclePropValueParcelable value)            = 3;
-    //TODO add specialized onVehicleNetworkEvents for byte array for efficiency
 }
diff --git a/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/VehicleNetwork.java b/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/VehicleNetwork.java
index 471c2c3..6dc92db 100644
--- a/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/VehicleNetwork.java
+++ b/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/VehicleNetwork.java
@@ -425,7 +425,6 @@
     /**
      * Get string type property.
      */
-    //TODO check UTF8 to java string conversion
     public String getStringProperty(int property) throws IllegalArgumentException,
             ServiceSpecificException {
         VehiclePropValue v = getProperty(
diff --git a/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/VehicleNetworkProtoUtil.java b/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/VehicleNetworkProtoUtil.java
index ac2f393..e8eedc1 100644
--- a/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/VehicleNetworkProtoUtil.java
+++ b/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/VehicleNetworkProtoUtil.java
@@ -63,7 +63,6 @@
         if (l.getPermissionModel() != r.getPermissionModel()) {
             return false;
         }
-        //TODO add more comparison
         return true;
     }
 }
diff --git a/libvehiclenetwork/libvehiclenetwork-audio-helper/src/VehicleNetworkAudioHelper.cpp b/libvehiclenetwork/libvehiclenetwork-audio-helper/src/VehicleNetworkAudioHelper.cpp
index 770b2e3..09d6a3e 100644
--- a/libvehiclenetwork/libvehiclenetwork-audio-helper/src/VehicleNetworkAudioHelper.cpp
+++ b/libvehiclenetwork/libvehiclenetwork-audio-helper/src/VehicleNetworkAudioHelper.cpp
@@ -243,7 +243,6 @@
 }
 
 void VehicleNetworkAudioHelper::onPropertySet(const vehicle_prop_value_t &value) {
-    // TODO
 }
 
 }; // namespace android
diff --git a/libvehiclenetwork/native/IVehicleNetwork.cpp b/libvehiclenetwork/native/IVehicleNetwork.cpp
index f8ba297..ddecd3a 100644
--- a/libvehiclenetwork/native/IVehicleNetwork.cpp
+++ b/libvehiclenetwork/native/IVehicleNetwork.cpp
@@ -86,7 +86,6 @@
                 ALOGE("listProperties, cannot read blob %d", status);
                 return holder;
             }
-            //TODO make this more memory efficient
             std::unique_ptr<VehiclePropConfigs> configs(new VehiclePropConfigs());
             if (configs.get() == NULL) {
                 return holder;
@@ -338,7 +337,6 @@
                 switch (value.value_type) {
                 case VEHICLE_VALUE_TYPE_INT32:
                 case VEHICLE_VALUE_TYPE_ZONED_INT32:
-                    // TODO:  Handle array types as well?
                     if (value.value.int32_value == VEHICLE_INT_OUT_OF_RANGE_OFF) {
                         // this should be handled specially to throw IllegalStateException in java.
                         reply->writeInt32(binder::Status::EX_ILLEGAL_STATE);
@@ -347,7 +345,6 @@
                     break;
                 case VEHICLE_VALUE_TYPE_FLOAT:
                 case VEHICLE_VALUE_TYPE_ZONED_FLOAT:
-                    // TODO:  Handle array types as well?
                     if (value.value.float_value == VEHICLE_FLOAT_OUT_OF_RANGE_OFF) {
                         // this should be handled specially to throw IllegalStateException in java.
                         reply->writeInt32(binder::Status::EX_ILLEGAL_STATE);
diff --git a/libvehiclenetwork/native/IVehicleNetworkHalMock.cpp b/libvehiclenetwork/native/IVehicleNetworkHalMock.cpp
index 91e00b2..7bc9f8b 100644
--- a/libvehiclenetwork/native/IVehicleNetworkHalMock.cpp
+++ b/libvehiclenetwork/native/IVehicleNetworkHalMock.cpp
@@ -78,7 +78,6 @@
                 ALOGE("listProperties, cannot read blob %d", status);
                 return holder;
             }
-            //TODO make this more memory efficient
             std::unique_ptr<VehiclePropConfigs> configs(new VehiclePropConfigs());
             if (configs.get() == NULL) {
                 return holder;
diff --git a/libvehiclenetwork/native/VehicleNetworkProtoUtil.cpp b/libvehiclenetwork/native/VehicleNetworkProtoUtil.cpp
index c79164c..ec1db59 100644
--- a/libvehiclenetwork/native/VehicleNetworkProtoUtil.cpp
+++ b/libvehiclenetwork/native/VehicleNetworkProtoUtil.cpp
@@ -43,7 +43,6 @@
     out.set_zone(in.zone);
     switch (in.value_type) {
         case VEHICLE_VALUE_TYPE_STRING: {
-            //TODO fix ugly copy here for inplace mode
             if (in.value.str_value.len > 0) {
                 out.set_string_value((char*)in.value.str_value.data, in.value.str_value.len);
             }
@@ -119,7 +118,6 @@
                     return BAD_VALUE;
                 }
             }
-            //TODO fix copy...
             status_t r = copyString(in.string_value(), &(out.value.str_value.data),
                     &(out.value.str_value.len));
             if (r != NO_ERROR) {
diff --git a/service/src/com/android/car/CanBusErrorNotifier.java b/service/src/com/android/car/CanBusErrorNotifier.java
index 115dda0..56be067 100644
--- a/service/src/com/android/car/CanBusErrorNotifier.java
+++ b/service/src/com/android/car/CanBusErrorNotifier.java
@@ -64,7 +64,7 @@
 
     private void showNotification() {
         if (IS_RELEASE_BUILD) {
-            // TODO: for release build we should show message to take car to the dealer.
+            // TODO: for user, we should show message to take car to the dealer. bug:32096297
             return;
         }
         Notification notification;
@@ -84,7 +84,7 @@
 
     private void hideNotification() {
         if (IS_RELEASE_BUILD) {
-            // TODO: for release build we should show message to take car to the dealer.
+            // TODO: for user, we should show message to take car to the dealer. bug:32096297
             return;
         }
         mNotificationManager.cancel(TAG, NOTIFICATION_ID);
diff --git a/service/src/com/android/car/CarAudioService.java b/service/src/com/android/car/CarAudioService.java
index e4ad5db..17df7a0 100644
--- a/service/src/com/android/car/CarAudioService.java
+++ b/service/src/com/android/car/CarAudioService.java
@@ -1194,7 +1194,6 @@
             if (((mCurrentFocusState.streams & streamsToRequest) == streamsToRequest) &&
                     ((mCurrentFocusState.streams & ~streamsToRequest) != 0)) {
                 // stream is reduced, so do not release it immediately
-                //TODO find better way than blocking here.
                 try {
                     Thread.sleep(NO_FOCUS_PLAY_WAIT_TIME_MS);
                 } catch (InterruptedException e) {
@@ -1343,7 +1342,6 @@
     }
 
     private void doHandleFocusRelease() {
-        //TODO Is there a need to wait for the stopping of streams?
         boolean sent = false;
         synchronized (mLock) {
             if (mCurrentFocusState != FocusState.STATE_LOSS) {
diff --git a/service/src/com/android/car/CarPowerManagementService.java b/service/src/com/android/car/CarPowerManagementService.java
index 1563dee..34a67fa 100644
--- a/service/src/com/android/car/CarPowerManagementService.java
+++ b/service/src/com/android/car/CarPowerManagementService.java
@@ -506,15 +506,15 @@
 
     @Override
     public void onDisplayBrightnessChange(int brightness) {
-        // TODO
+        // TODO bug: 32065231
     }
 
     private void doHandleDisplayBrightnessChange(int brightness) {
-        //TODO
+        //TODO bug: 32065231
     }
 
     private void doHandleMainDisplayStateChange(boolean on) {
-        //TODO
+        //TODO bug: 32065231
     }
 
     private boolean shouldDoFakeShutdown() {
@@ -672,7 +672,7 @@
 
         @Override
         public void enterDeepSleep(int wakeupTimeSec) {
-            //TODO set wake up time
+            //TODO set wake up time, bug: 32061842
             mPowerManager.goToSleep(SystemClock.uptimeMillis(),
                     PowerManager.GO_TO_SLEEP_REASON_DEVICE_ADMIN,
                     PowerManager.GO_TO_SLEEP_FLAG_NO_DOZE);
@@ -680,7 +680,7 @@
 
         @Override
         public boolean isSystemSupportingDeepSleep() {
-            //TODO should return by checking some kernel suspend control sysfs
+            //TODO should return by checking some kernel suspend control sysfs, bug: 32061842
             return false;
         }
 
@@ -716,8 +716,8 @@
 
         @Override
         public boolean isWakeupCausedByTimer() {
-            //TODO check wake up reason and do necessary operation information should come from
-            // kernel. it can be either power on or wake up for maintenance
+            //TODO bug: 32061842, check wake up reason and do necessary operation information should
+            // come from kernel. it can be either power on or wake up for maintenance
             // power on will involve GPIO trigger from power controller
             // its own wakeup will involve timer expiration.
             return false;
diff --git a/service/src/com/android/car/CarPropertyServiceBase.java b/service/src/com/android/car/CarPropertyServiceBase.java
index cfeb6f2..7864e6a 100644
--- a/service/src/com/android/car/CarPropertyServiceBase.java
+++ b/service/src/com/android/car/CarPropertyServiceBase.java
@@ -101,7 +101,6 @@
 
     @Override
     public void dump(PrintWriter writer) {
-        // TODO
     }
 
     @Override
@@ -209,6 +208,6 @@
 
     @Override
     public void onError(int zone, int property) {
-        // TODO:
+        // TODO bug:32068464
     }
 }
diff --git a/service/src/com/android/car/CarSensorService.java b/service/src/com/android/car/CarSensorService.java
index f0bc8d1..748d3c2 100644
--- a/service/src/com/android/car/CarSensorService.java
+++ b/service/src/com/android/car/CarSensorService.java
@@ -234,9 +234,9 @@
                     record.lastEvent = event;
                 } else if (record.lastEvent.timestamp < event.timestamp) {
                     record.lastEvent = event;
-                    //TODO recycle event
+                    //TODO recycle event, bug: 32094595
                 } else { // wrong timestamp, throw away this.
-                    //TODO recycle new event
+                    //TODO recycle new event, bug: 32094595
                     continue;
                 }
                 SensorListeners listeners = mSensorListeners.get(event.sensorType);
@@ -400,7 +400,7 @@
         return result;
     }
 
-    //TODO handle per property OEM permission
+    //TODO handle per property OEM permission. bug: 32094983
     private String getPermissionName(int sensorType) {
         if ((sensorType >= CarSensorManager.SENSOR_TYPE_VENDOR_EXTENSION_START) &&
                 (sensorType >= CarSensorManager.SENSOR_TYPE_VENDOR_EXTENSION_END)) {
@@ -424,7 +424,7 @@
     }
 
     private boolean startSensor(SensorRecord record, int sensorType, int rate) {
-        //TODO choose proper sensor rate per each sensor.
+        //TODO handle sensor rate properly. bug: 32095903
         //Some sensors which report only when there is change should be always set with maximum
         //rate. For now, set every sensor to the maximum.
         if (Log.isLoggable(CarLog.TAG_SENSOR, Log.VERBOSE)) {
diff --git a/service/src/com/android/car/CarServiceApplication.java b/service/src/com/android/car/CarServiceApplication.java
deleted file mode 100644
index 49cd8f0..0000000
--- a/service/src/com/android/car/CarServiceApplication.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2015 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 com.android.car;
-
-import android.app.Application;
-
-public class CarServiceApplication extends Application {
-
-    @Override
-    public void onCreate() {
-        // TODO Auto-generated method stub
-        super.onCreate();
-    }
-
-    @Override
-    public void onTerminate() {
-        // TODO Auto-generated method stub
-        super.onTerminate();
-    }
-
-}
diff --git a/service/src/com/android/car/CarVolumeControllerFactory.java b/service/src/com/android/car/CarVolumeControllerFactory.java
index 8ad9fef..79ada5a 100644
--- a/service/src/com/android/car/CarVolumeControllerFactory.java
+++ b/service/src/com/android/car/CarVolumeControllerFactory.java
@@ -186,11 +186,11 @@
      * volume internally. If we only support single channel, then we only send the volume change
      * event when that stream is in focus; Otherwise, we need to adjust the stream volume either on
      * software mixer level or send it the car audio module if the car support audio context
-     * and multi channel. TODO: Add support for multi channel.
+     * and multi channel. TODO: Add support for multi channel. bug: 32095376
      *
      * Per context volume should be persisted, so the volumes can stay the same across boots.
      * Depending on the hardware property, this can be persisted on car side (or/and android side).
-     * TODO: we need to define one single source of truth if the car has memory.
+     * TODO: we need to define one single source of truth if the car has memory. bug: 32091839
      */
     public static class CarExternalVolumeController extends CarVolumeController
             implements CarInputService.KeyEventListener, AudioHalService.AudioHalVolumeListener,
@@ -392,7 +392,7 @@
 
         private void initCurrentVolumeLocked() {
             if (mHasExternalMemory) {
-                // TODO: read per context volume from audio hal
+                // TODO: read per context volume from audio hal. bug: 32091839
             } else {
                 // when vhal does not work, get call can take long. For that case,
                 // for the same physical streams, cache initial get results
@@ -554,8 +554,8 @@
 
         @Override
         public void onVolumeLimitChange(int streamNumber, int volume) {
-            // TODO: How should this update be sent to SystemUI? maybe send a volume update without
-            // showing UI.
+            // TODO: How should this update be sent to SystemUI? bug: 32095237
+            // maybe send a volume update without showing UI.
             synchronized (this) {
                 initVolumeLimitLocked();
             }
@@ -592,7 +592,7 @@
             if (DBG) {
                 Log.d(TAG, "Receive volume keyevent " + event.toString());
             }
-            // TODO: properly handle long press on volume key
+            // TODO: properly handle long press on volume key, bug: 32095989
             if (!down || interceptVolKeyBeforeDispatching(mContext)) {
                 return true;
             }
diff --git a/service/src/com/android/car/CarVolumeService.java b/service/src/com/android/car/CarVolumeService.java
index a0d3033..74e7071 100644
--- a/service/src/com/android/car/CarVolumeService.java
+++ b/service/src/com/android/car/CarVolumeService.java
@@ -37,7 +37,6 @@
 public class CarVolumeService {
     private static final String TAG = "CarVolumeService";
 
-    // TODO: need to have a policy to define the default context
     public static int DEFAULT_CAR_AUDIO_CONTEXT =
             VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_MUSIC_FLAG;
     private final Context mContext;
diff --git a/service/src/com/android/car/DayNightModePolicy.java b/service/src/com/android/car/DayNightModePolicy.java
index cdf5ad5..5acbfb4 100644
--- a/service/src/com/android/car/DayNightModePolicy.java
+++ b/service/src/com/android/car/DayNightModePolicy.java
@@ -23,7 +23,7 @@
 
 import java.io.PrintWriter;
 
-//TODO
+//TODO implement default one based on time or other sensors. bug: 32066909
 public class DayNightModePolicy extends CarSensorService.LogicalSensorHalBase {
 
     private final Context mContext;
@@ -31,6 +31,8 @@
     private boolean mIsReady = false;
     private boolean mStarted = false;
 
+    private static final int[] SUPPORTED_SENSORS = { CarSensorManager.SENSOR_TYPE_NIGHT };
+
     public DayNightModePolicy(Context context) {
         mContext = context;
     }
@@ -42,7 +44,6 @@
 
     @Override
     public synchronized void release() {
-        // TODO Auto-generated method stub
     }
 
     public static CarSensorEvent getDefaultValue(int sensorType) {
@@ -59,7 +60,6 @@
 
     @Override
     public synchronized void onSensorServiceReady() {
-        // TODO Auto-generated method stub
     }
 
     @Override
@@ -69,14 +69,12 @@
 
     @Override
     public synchronized int[] getSupportedSensors() {
-        // TODO Auto-generated method stub
-        return null;
+        return SUPPORTED_SENSORS;
     }
 
     @Override
     public synchronized boolean requestSensorStart(int sensorType, int rate) {
         mStarted = true;
-        // TODO Auto-generated method stub
         Log.w(CarLog.TAG_SENSOR,
                 "DayNightModePolicy.requestSensorStart, default policy not implemented");
         return false;
@@ -84,7 +82,6 @@
 
     @Override
     public synchronized void requestSensorStop(int sensorType) {
-        // TODO Auto-generated method stub
     }
 
     private static CarSensorEvent createEvent(boolean isNight, long timestamp) {
@@ -96,6 +93,5 @@
 
     @Override
     public synchronized void dump(PrintWriter writer) {
-        // TODO Auto-generated method stub
     }
 }
diff --git a/service/src/com/android/car/DrivingStatePolicy.java b/service/src/com/android/car/DrivingStatePolicy.java
index 3507dec..4716c1e 100644
--- a/service/src/com/android/car/DrivingStatePolicy.java
+++ b/service/src/com/android/car/DrivingStatePolicy.java
@@ -86,7 +86,6 @@
 
     @Override
     public void release() {
-        // TODO Auto-generated method stub
     }
 
     public static CarSensorEvent getDefaultValue(int sensorType) {
@@ -130,7 +129,6 @@
 
     @Override
     public void dump(PrintWriter writer) {
-        // TODO Auto-generated method stub
     }
 
     private boolean subscribeIfSupportedLocked(int sensorList[], int sensorType, int rate) {
diff --git a/service/src/com/android/car/GarageModeService.java b/service/src/com/android/car/GarageModeService.java
index 92f25ea..245af0a 100644
--- a/service/src/com/android/car/GarageModeService.java
+++ b/service/src/com/android/car/GarageModeService.java
@@ -229,7 +229,7 @@
 
     private void readPolicyLocked() {
         logd("readPolicy");
-        // TODO: define a xml schema for garage mode policy and read it from system dir.
+        // TODO: define a xml schema for policy and read it from system dir. bug: 32096969
         mPolicy = new DefaultGarageModePolicy();
     }
 
@@ -269,8 +269,8 @@
          * Returns number of seconds between now to 1am {@param numDays} days later.
          */
         public static int nextWakeUpSeconds(int numDays, int hour, int min) {
-            // TODO: Should select a random time within a window to avoid all cars update at the
-            // same time.
+            // TODO: Should select a random time within a window. bug: 32096386
+            // This is to avoid all cars update at the same time.
             Calendar next = Calendar.getInstance();
             next.add(Calendar.DATE, numDays);
             next.set(Calendar.HOUR_OF_DAY, hour);
diff --git a/service/src/com/android/car/SystemStateControllerService.java b/service/src/com/android/car/SystemStateControllerService.java
index a9585f4..5746300 100644
--- a/service/src/com/android/car/SystemStateControllerService.java
+++ b/service/src/com/android/car/SystemStateControllerService.java
@@ -44,7 +44,7 @@
 
     @Override
     public long onPrepareShutdown(boolean shuttingDown) {
-        //TODO add state saving here for things to restore on power on.
+        //TODO add state saving here for things to restore on power on. bug: 32096079
         return 0;
     }
 
@@ -59,7 +59,7 @@
             if (!mICarImpl.isInMocking()) { // do not do this in mocking as it can affect test.
                 Log.i(CarLog.TAG_SYS, "Media mute");
                 mCarAudioService.muteMediaWithLock(mLockWhenMuting);
-                //TODO store last context and resume or silence radio on display on
+                //TODO store last context and resume or silence radio on display on. bug: 32096079
             }
         }
     }
@@ -71,17 +71,17 @@
 
     @Override
     public void onShutdown() {
-        // TODO
+        // TODO bug: 32096079
     }
 
     @Override
     public void onSleepEntry() {
-        // TODO
+        // TODO bug: 32096079
     }
 
     @Override
     public void onSleepExit() {
-        // TODO
+        // TODO bug: 32096079
     }
 
     @Override
diff --git a/service/src/com/android/car/hal/AudioHalService.java b/service/src/com/android/car/hal/AudioHalService.java
index c4ce31b..cb73454 100644
--- a/service/src/com/android/car/hal/AudioHalService.java
+++ b/service/src/com/android/car/hal/AudioHalService.java
@@ -375,7 +375,7 @@
                     VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_VOLUME, payload);
         } catch (ServiceSpecificException e) {
             Log.e(CarLog.TAG_AUDIO, "Cannot write to VEHICLE_PROPERTY_AUDIO_VOLUME", e);
-            //TODO should reset volume
+            //TODO should reset volume, bug: 32096870
         }
     }
 
diff --git a/service/src/com/android/car/hal/CarPropertyUtils.java b/service/src/com/android/car/hal/CarPropertyUtils.java
index 849417e..ed97bea 100644
--- a/service/src/com/android/car/hal/CarPropertyUtils.java
+++ b/service/src/com/android/car/hal/CarPropertyUtils.java
@@ -120,7 +120,7 @@
             halType = VEHICLE_VALUE_TYPE_STRING;
             builder.setStringValue((String) o);
         } else if (o instanceof byte[]) {
-            halType = VEHICLE_VALUE_TYPE_BYTES;  // TODO: We don't have zoned type in vehicle.h
+            halType = VEHICLE_VALUE_TYPE_BYTES;  // We don't have zoned type in vehicle.h
             builder.setBytesValue(ByteString.copyFrom((byte[]) o));
         } else {
             throw new IllegalArgumentException("Unexpected type in: " + hvacProp);
diff --git a/service/src/com/android/car/hal/SensorHalService.java b/service/src/com/android/car/hal/SensorHalService.java
index fe80c54..c21bddd 100644
--- a/service/src/com/android/car/hal/SensorHalService.java
+++ b/service/src/com/android/car/hal/SensorHalService.java
@@ -170,7 +170,7 @@
         if (config == null) {
             return false;
         }
-        //TODO calculate sampling rate properly
+        //TODO calculate sampling rate properly, bug: 32095903
         mHal.subscribeProperty(this, config.getProp(), fixSamplingRateForProperty(config, rate));
         return true;
     }
diff --git a/service/src/com/android/car/hal/VehicleHal.java b/service/src/com/android/car/hal/VehicleHal.java
index 6ec50fe..94baeb0 100644
--- a/service/src/com/android/car/hal/VehicleHal.java
+++ b/service/src/com/android/car/hal/VehicleHal.java
@@ -334,13 +334,13 @@
         Log.e(CarLog.TAG_HAL, "onHalError, errorCode:" + errorCode +
                 " property:0x" + Integer.toHexString(property) +
                 " operation:" + operation);
-        // TODO propagate per property error to HAL services and handle global error
+        // TODO propagate per property error to HAL services and handle global error, bug:32068464
     }
 
     @Override
     public void onHalRestart(boolean inMocking) {
         Log.e(CarLog.TAG_HAL, "onHalRestart, inMocking:" + inMocking);
-        // TODO restart things as other components started mocking. For now, ignore.
+        // TODO restart things as other components started mocking. For now, ignore., bug:32068464
     }
 
     public void dump(PrintWriter writer) {
diff --git a/service/src/com/android/car/pm/CarPackageManagerService.java b/service/src/com/android/car/pm/CarPackageManagerService.java
index 9d02973..9f73b61 100644
--- a/service/src/com/android/car/pm/CarPackageManagerService.java
+++ b/service/src/com/android/car/pm/CarPackageManagerService.java
@@ -61,7 +61,7 @@
 import java.util.Map.Entry;
 import java.util.Set;
 
-//TODO monitor app installing and refresh policy
+//TODO monitor app installing and refresh policy, bug: 31970400
 
 public class CarPackageManagerService extends ICarPackageManager.Stub implements CarServiceBase {
     static final boolean DBG_POLICY_SET = false;
diff --git a/tests/libvehiclenetwork-java-test/src/com/android/car/vehiclenetwork/libtest/VehicleNetworkMockedTest.java b/tests/libvehiclenetwork-java-test/src/com/android/car/vehiclenetwork/libtest/VehicleNetworkMockedTest.java
index 531b3d4..2d7cf1e 100644
--- a/tests/libvehiclenetwork-java-test/src/com/android/car/vehiclenetwork/libtest/VehicleNetworkMockedTest.java
+++ b/tests/libvehiclenetwork-java-test/src/com/android/car/vehiclenetwork/libtest/VehicleNetworkMockedTest.java
@@ -587,7 +587,6 @@
 
         @Override
         public void onPropertyUnsubscribe(int property) {
-            // TODO Auto-generated method stub
         }
 
         private void setValue(VehiclePropValue value) {
diff --git a/tests/libvehiclenetwork-java-test/src/com/android/car/vehiclenetwork/libtest/VehicleNetworkTest.java b/tests/libvehiclenetwork-java-test/src/com/android/car/vehiclenetwork/libtest/VehicleNetworkTest.java
index 7a10c3f..6ec9e54 100644
--- a/tests/libvehiclenetwork-java-test/src/com/android/car/vehiclenetwork/libtest/VehicleNetworkTest.java
+++ b/tests/libvehiclenetwork-java-test/src/com/android/car/vehiclenetwork/libtest/VehicleNetworkTest.java
@@ -213,12 +213,10 @@
 
         @Override
         public void onHalError(int errorCode, int property, int operation) {
-            // TODO Auto-generated method stub
         }
 
         @Override
         public void onHalRestart(boolean inMocking) {
-            // TODO Auto-generated method stub
         }
 
         @Override
diff --git a/tests/vehicle_hal_test/src/com/android/car/vehiclenetwork/haltest/RecordingVehicleNetworkListener.java b/tests/vehicle_hal_test/src/com/android/car/vehiclenetwork/haltest/RecordingVehicleNetworkListener.java
index 61f66f3..282d9e9 100644
--- a/tests/vehicle_hal_test/src/com/android/car/vehiclenetwork/haltest/RecordingVehicleNetworkListener.java
+++ b/tests/vehicle_hal_test/src/com/android/car/vehiclenetwork/haltest/RecordingVehicleNetworkListener.java
@@ -105,17 +105,14 @@
 
     @Override
     public void onHalError(int errorCode, int property, int operation) {
-        // TODO Auto-generated method stub
     }
 
     @Override
     public void onHalRestart(boolean inMocking) {
-        // TODO Auto-generated method stub
     }
 
     @Override
     public void onPropertySet(VehiclePropValue value) {
-        // TODO
     }
 
     // To be used to compare expected vs recorded values.
diff --git a/vehicle_network_service/VehicleNetworkService.cpp b/vehicle_network_service/VehicleNetworkService.cpp
index d41d515..21171ff 100644
--- a/vehicle_network_service/VehicleNetworkService.cpp
+++ b/vehicle_network_service/VehicleNetworkService.cpp
@@ -197,7 +197,6 @@
         return false;
     }
     const vehicle_prop_value_t* cached = mCache.valueAt(index);
-    //TODO this can be improved by just passing pointer and not deleting members.
     status_t r = VehiclePropValueUtil::copyVehicleProp(value, *cached);
     if (r != NO_ERROR) {
         ALOGD("readFromCache 0x%x, copy failed %d", value->prop, r);
@@ -232,7 +231,6 @@
     if (mMockingEnabled) {
         msg.append("*Mocked Properties\n");
         for (auto& prop : mPropertiesForMocking->getList()) {
-            //TODO dump more info
             msg.appendFormat("property 0x%x\n", prop->prop);
         }
     }
@@ -325,7 +323,6 @@
         for (size_t i = 0; i < mPropertyToClientsMap.size(); i++) {
             sp<HalClientSpVector>& clients = mPropertyToClientsMap.editValueAt(i);
             clients->remove(currentClient);
-            // TODO update frame rate
             if (clients->size() == 0) {
                 int32_t property = mPropertyToClientsMap.keyAt(i);
                 propertiesToUnsubscribe.push_back(property);
@@ -466,7 +463,6 @@
         ALOGI("cannot subscribe, property 0x%x is static", property);
         return false;
     }
-    //TODO extend VNS to support event notification for set from android
     if (config->change_mode == VEHICLE_PROP_CHANGE_MODE_POLL) {
             ALOGI("cannot subscribe, property 0x%x is poll only", property);
             return false;
@@ -998,7 +994,6 @@
         // onlistProperties call. Otherwise, this will lead into dead-lock.
         mPropertiesForMocking = mock->onListProperties();
         handleHalRestartAndGetClientsToDispatchLocked(clientsToDispatch);
-        //TODO handle binder death
         handler = mHandler;
     } while (false);
     handler->handleMockStart();
