diff --git a/guest/hals/sensors/sensors.cpp b/guest/hals/sensors/sensors.cpp
index 609606c..eb1dda6 100644
--- a/guest/hals/sensors/sensors.cpp
+++ b/guest/hals/sensors/sensors.cpp
@@ -195,17 +195,4 @@
                     flags);
 }
 
-SensorInfo StepCounterSensor() {
-  uint32_t flags = sc::kStepCounterReportingMode |
-      (sc::kStepCounterIsWakeup ? SENSOR_FLAG_WAKE_UP : 0);
-
-  return SensorInfo(sc::kStepCounterName, sc::kVendor, sc::kVersion,
-                    sc::kStepCounterHandle, SENSOR_TYPE_STEP_COUNTER,
-                    sc::kStepCounterMaxRange, sc::kStepCounterResolution,
-                    sc::kStepCounterPower, sc::kStepCounterMinDelay,
-                    sc::kFifoReservedEventCount, sc::kFifoMaxEventCount,
-                    sc::kStepCounterStringType, sc::kRequiredPermission,
-                    sc::kMaxDelay, flags);
-}
-
 }  // namespace cvd
diff --git a/guest/hals/sensors/sensors.h b/guest/hals/sensors/sensors.h
index c94b14f..c4305ce 100644
--- a/guest/hals/sensors/sensors.h
+++ b/guest/hals/sensors/sensors.h
@@ -47,7 +47,6 @@
   friend SensorInfo AmbientTempSensor();
   friend SensorInfo DeviceTempSensor();
   friend SensorInfo RelativeHumiditySensor();
-  friend SensorInfo StepCounterSensor();
 };
 
 SensorInfo AccelerometerSensor();
@@ -59,7 +58,6 @@
 SensorInfo AmbientTempSensor();
 SensorInfo DeviceTempSensor();
 SensorInfo RelativeHumiditySensor();
-SensorInfo StepCounterSensor();
 
 // Stores the current state of a sensor.
 class SensorState {
@@ -113,7 +111,6 @@
 const char kAmbientTempName[] = "ambient_temp";
 const char kDeviceTempName[] = "device_temp";
 const char kRelativeHumidityName[] = "relative_humidity";
-const char kStepCounterName[] = "step_counter";
 
 // Handle that identifies the sensor. This is used as an array index,
 // so must be unique in the range [0, # sensors)
@@ -127,7 +124,6 @@
 const int kAmbientTempHandle = 6;
 const int kDeviceTempHandle = 7;
 const int kRelativeHumidityHandle = 8;
-const int kStepCounterHandle = 9;
 
 // For continuous sensors, minimum sample period (in microseconds).
 // On-Change (0), One-shot (-1), and special (0).
@@ -140,7 +136,6 @@
 const int32_t kAmbientTempMinDelay = 4444;
 const int32_t kDeviceTempMinDelay = 4444;
 const int32_t kRelativeHumidityMinDelay = 4444;
-const int32_t kStepCounterMinDelay = 0;
 
 // Maximum range of this sensor's value in SI units.
 const float kAccelerometerMaxRange = 39.226593f;
@@ -152,7 +147,6 @@
 const float kAmbientTempMaxRange = 80.0f;
 const float kDeviceTempMaxRange = 80.0f;
 const float kRelativeHumidityMaxRange = 100;
-const float kStepCounterMaxRange = 1.0f;
 
 // Smallest difference between two values reported by this sensor.
 const float kAccelerometerResolution = 0.45f;
@@ -164,7 +158,6 @@
 const float kAmbientTempResolution = 1.0f;
 const float kDeviceTempResolution = 1.0f;
 const float kRelativeHumidityResolution = 1.0f;
-const float kStepCounterResolution = 1.0f;
 
 // Rough estimate of this sensor's power consumption in mA.
 const float kAccelerometerPower = 0.45f;
@@ -176,7 +169,6 @@
 const float kAmbientTempPower = 1.0f;
 const float kDeviceTempPower = 1.0f;
 const float kRelativeHumidityPower = 1.0f;
-const float kStepCounterPower = 0.1f;
 
 // Type of this sensor, represented as a string.
 
@@ -190,7 +182,6 @@
 const char kAmbientTempStringType[] = SENSOR_STRING_TYPE_AMBIENT_TEMPERATURE;
 const char kDeviceTempStringType[] = SENSOR_STRING_TYPE_TEMPERATURE;
 const char kRelativeHumidityStringType[] = SENSOR_STRING_TYPE_RELATIVE_HUMIDITY;
-const char kStepCounterStringType[] = SENSOR_STRING_TYPE_STEP_COUNTER;
 #else
 const char kAccelerometerStringType[] = "";
 const char kGyroscopeStringType[] = "";
@@ -201,7 +192,6 @@
 const char kAmbientTempStringType[] = "";
 const char kDeviceTempStringType[] = "";
 const char kRelativeHumidityStringType[] = "";
-const char kStepCounterStringType[] = "";
 #endif
 
 #if VSOC_SENSORS_DEVICE_API_VERSION_ATLEAST(1_3)
@@ -214,7 +204,6 @@
 const uint32_t kAmbientTempReportingMode = SENSOR_FLAG_ON_CHANGE_MODE;
 const uint32_t kDeviceTempReportingMode = SENSOR_FLAG_ON_CHANGE_MODE;
 const uint32_t kRelativeHumidityReportingMode = SENSOR_FLAG_ON_CHANGE_MODE;
-const uint32_t kStepCounterReportingMode = SENSOR_FLAG_ON_CHANGE_MODE;
 #else
 const uint32_t kAccelerometerReportingMode = 0;
 const uint32_t kGyroscopeReportingMode = 0;
@@ -225,7 +214,6 @@
 const uint32_t kAmbientTempReportingMode = 0;
 const uint32_t kDeviceTempReportingMode = 0;
 const uint32_t kRelativeHumidityReportingMode = 0;
-const uint32_t kStepCounterReportingMode = 0;
 #endif
 
 const bool kAccelerometerIsWakeup = false;
@@ -237,7 +225,6 @@
 const bool kAmbientTempIsWakeup = false;
 const bool kDeviceTempIsWakeup = false;
 const bool kRelativeHumidityIsWakeup = false;
-const bool kStepCounterIsWakeup = false;
 
 }  // namespace sensors_constants
 }  // namespace cvd
diff --git a/guest/hals/sensors/vsoc_sensors.cpp b/guest/hals/sensors/vsoc_sensors.cpp
index 94aee73..86809a0 100644
--- a/guest/hals/sensors/vsoc_sensors.cpp
+++ b/guest/hals/sensors/vsoc_sensors.cpp
@@ -502,7 +502,7 @@
   if (total_sensor_count_ != -1) {
     return -1;
   }
-  total_sensor_count_ = 10;
+  total_sensor_count_ = 9;
   sensor_infos_ = new SensorInfo[total_sensor_count_];
   sensor_infos_[sensors_constants::kAccelerometerHandle] =
       AccelerometerSensor();
@@ -516,7 +516,6 @@
   sensor_infos_[sensors_constants::kDeviceTempHandle] = DeviceTempSensor();
   sensor_infos_[sensors_constants::kRelativeHumidityHandle] =
       RelativeHumiditySensor();
-  sensor_infos_[sensors_constants::kStepCounterHandle] = StepCounterSensor();
   int i;
   for (i = 0; i < total_sensor_count_; i++) {
     D("Found sensor %s with handle %d", sensor_infos_[i].name,
