diff --git a/client/cros/power/power_test.py b/client/cros/power/power_test.py
index af4eb76..b6c6bc2 100644
--- a/client/cros/power/power_test.py
+++ b/client/cros/power/power_test.py
@@ -40,6 +40,8 @@
         self.keyvals = dict()
         self.status = power_status.get_status()
 
+        self._checkpoint_logger = power_status.CheckpointLogger()
+
         measurements = []
         if not self.status.on_ac():
             measurements.append(
@@ -49,15 +51,19 @@
         elif power_utils.has_rapl_support():
             measurements += power_rapl.create_rapl()
         self._plog = power_status.PowerLogger(measurements,
-                                              seconds_period=seconds_period)
+                seconds_period=seconds_period,
+                checkpoint_logger=self._checkpoint_logger)
         self._psr = power_utils.DisplayPanelSelfRefresh()
         self._services = service_stopper.ServiceStopper(
                 service_stopper.ServiceStopper.POWER_DRAW_SERVICES)
         self._services.stop_services()
         self._stats = power_status.StatoMatic()
 
-        self._tlog = power_status.TempLogger([], seconds_period=seconds_period)
-        self._clog = power_status.CPUStatsLogger(seconds_period=seconds_period)
+        self._tlog = power_status.TempLogger([],
+                seconds_period=seconds_period,
+                checkpoint_logger=self._checkpoint_logger)
+        self._clog = power_status.CPUStatsLogger(seconds_period=seconds_period,
+                checkpoint_logger=self._checkpoint_logger)
 
     def warmup(self, warmup_time=30):
         """Warm up.
@@ -95,9 +101,7 @@
         if not start_time:
             start_time = self._start_time
         self.status.refresh()
-        self._plog.checkpoint(name, start_time)
-        self._tlog.checkpoint(name, start_time)
-        self._clog.checkpoint(name, start_time)
+        self._checkpoint_logger.checkpoint(name, start_time)
         self._psr.refresh()
 
     def publish_keyvals(self):
diff --git a/client/site_tests/power_LoadTest/power_LoadTest.py b/client/site_tests/power_LoadTest/power_LoadTest.py
index 497511e..a2817a0 100755
--- a/client/site_tests/power_LoadTest/power_LoadTest.py
+++ b/client/site_tests/power_LoadTest/power_LoadTest.py
@@ -266,9 +266,16 @@
             measurements += power_rapl.create_powercap()
         elif power_utils.has_rapl_support():
             measurements += power_rapl.create_rapl()
-        self._plog = power_status.PowerLogger(measurements, seconds_period=20)
-        self._tlog = power_status.TempLogger([], seconds_period=20)
-        self._clog = power_status.CPUStatsLogger(seconds_period=20)
+        self._checkpoint_logger = power_status.CheckpointLogger()
+        self._plog = power_status.PowerLogger(measurements,
+                seconds_period=20,
+                checkpoint_logger=self._checkpoint_logger)
+        self._tlog = power_status.TempLogger([],
+                seconds_period=20,
+                checkpoint_logger=self._checkpoint_logger)
+        self._clog = power_status.CPUStatsLogger(
+                seconds_period=20,
+                checkpoint_logger=self._checkpoint_logger)
         self._meas_logs = [self._plog, self._tlog, self._clog]
         for log in self._meas_logs:
             log.start()
@@ -368,8 +375,7 @@
 
             script_logging.set();
             pagetime_tracking.set();
-            for log in self._meas_logs:
-                log.checkpoint('loop%d' % (i), start_time)
+            self._checkpoint_logger.checkpoint('loop%d' % (i), start_time)
             if self._verbose:
                 logging.debug('loop %d completed', i)
 
@@ -415,8 +421,7 @@
 
 
         for task, tstart, tend in self._task_tracker:
-            for log in self._meas_logs:
-                log.checkpoint(task, tstart, tend)
+            self._checkpoint_logger.checkpoint(task, tstart, tend)
 
         keyvals = {}
         for log in self._meas_logs:
@@ -508,9 +513,7 @@
         self.write_perf_keyval(keyvals)
         for log in self._meas_logs:
             log.save_results(self.resultsdir)
-        # checkpoint data for all measurement loggers should be the same
-        # just save checkpoint data for one of them
-        self._plog.save_checkpoint_data(self.resultsdir)
+        self._checkpoint_logger.save_checkpoint_data(self.resultsdir)
         pdash = power_dashboard.PowerLoggerDashboard( \
                 self._plog, self.tagged_testname, self.resultsdir)
         pdash.upload()
