diff --git a/src/components/DateNavigator/DateNavigatorFormat.tsx b/src/components/DateNavigator/DateNavigatorFormat.tsx
index d13361f6e38964276732aa2fa5b079bfea3e04c2..7b206615476ff2c9e875f46682907f09900026ad 100644
--- a/src/components/DateNavigator/DateNavigatorFormat.tsx
+++ b/src/components/DateNavigator/DateNavigatorFormat.tsx
@@ -1,6 +1,6 @@
-import React from 'react'
-import { DateTime } from 'luxon'
 import { TimeStep } from 'enum/timeStep.enum'
+import { DateTime } from 'luxon'
+import React from 'react'
 import './datenavigatorformat.scss'
 
 interface DateNavigatorFormatProps {
@@ -44,11 +44,20 @@ const DateNavigatorFormat: React.FC<DateNavigatorFormatProps> = ({
           }),
         ]
       case TimeStep.HALF_AN_HOUR:
+        /**
+         * Format date to range:
+         * 9:00 - 9:30
+         * Day 0X Month
+         */
         return [
-          date.toLocaleString({
+          `${date.toLocaleString({
             hour: 'numeric',
             minute: 'numeric',
-          }),
+          })} -
+         ${date.plus({ minutes: 30 }).toLocaleString({
+           hour: 'numeric',
+           minute: 'numeric',
+         })}`,
           date.toLocaleString({
             weekday: 'long',
             day: '2-digit',
@@ -74,7 +83,7 @@ const DateNavigatorFormat: React.FC<DateNavigatorFormatProps> = ({
       ) : (
         <>
           {formatedDate[0] && (
-            <div className="date-navigator-format-date text-16-bold">
+            <div className="date-navigator-format-date text-16-bold timeRange">
               {formatedDate[0]}
             </div>
           )}
diff --git a/src/components/DateNavigator/datenavigatorformat.scss b/src/components/DateNavigator/datenavigatorformat.scss
index 4fc1f721d638c846873da03c0715f42313ce4c42..e964a71685463124326cc49aed07041b4b130125 100644
--- a/src/components/DateNavigator/datenavigatorformat.scss
+++ b/src/components/DateNavigator/datenavigatorformat.scss
@@ -16,5 +16,8 @@
     &::first-letter {
       text-transform: uppercase;
     }
+    &.timeRange {
+      white-space: normal;
+    }
   }
 }
diff --git a/src/services/consumptionFormatter.service.spec.ts b/src/services/consumptionFormatter.service.spec.ts
index fd43404f4dee9a2ca8057d7a413ccb71854b1509..085dab6fb05aa93daec27a81908119c69e7c82c5 100644
--- a/src/services/consumptionFormatter.service.spec.ts
+++ b/src/services/consumptionFormatter.service.spec.ts
@@ -1,10 +1,10 @@
-import ConsumptionFormatterService from './consumptionFormatter.service'
+import { DataloadState } from 'enum/dataload.enum'
+import { FluidType } from 'enum/fluid.enum'
 import { TimeStep } from 'enum/timeStep.enum'
 import { DateTime } from 'luxon'
 import { Dataload, FluidStatus, TimePeriod } from 'models'
-import { DataloadState } from 'enum/dataload.enum'
-import { FluidType } from 'enum/fluid.enum'
 import { fluidStatusConnectedData } from '../../tests/__mocks__/fluidStatusData.mock'
+import ConsumptionFormatterService from './consumptionFormatter.service'
 
 const localSpy = jest.spyOn(DateTime, 'local')
 
@@ -121,10 +121,10 @@ describe('ConsumptionFormatter service', () => {
     })
     it('should return a formattedData for HALF_AN_HOUR', () => {
       mockTimePeriod = {
-        startDate: DateTime.fromISO('2020-10-01T00:00:00.000Z', {
+        startDate: DateTime.fromISO('2020-10-01T00:30:00.000Z', {
           zone: 'utc',
         }),
-        endDate: DateTime.fromISO('2020-10-01T01:00:00.000Z', {
+        endDate: DateTime.fromISO('2020-10-01T01:30:00.000Z', {
           zone: 'utc',
         }),
       }
diff --git a/src/services/consumptionFormatter.service.ts b/src/services/consumptionFormatter.service.ts
index 885e527285727aec350c7ea9fccfb38655e4fba4..36c32a784e0f51da74ccb45ed2279132b19a8b54 100644
--- a/src/services/consumptionFormatter.service.ts
+++ b/src/services/consumptionFormatter.service.ts
@@ -17,13 +17,16 @@ export default class ConsumptionFormatterService {
   ): Dataload[] {
     // Sort data
     data.sort((dataA, dataB) => compareDates(dataA.date, dataB.date))
-
     // Set status of data and complete missing/empty data
     const filledData = []
     let parsingDate = timePeriod.startDate
-
+    let endDate = timePeriod.endDate
+    if (timeStep === TimeStep.HALF_AN_HOUR) {
+      parsingDate = parsingDate.minus({ minutes: 30 })
+      endDate = endDate.minus({ minutes: 30 })
+    }
     const dateChartService = new DateChartService()
-    while (parsingDate <= timePeriod.endDate) {
+    while (parsingDate <= endDate) {
       const filtereddata = data.filter(dt =>
         dateChartService.compareStepDate(timeStep, dt.date, parsingDate)
       )
@@ -43,7 +46,6 @@ export default class ConsumptionFormatterService {
       filledData.push({ ...newElement })
       parsingDate = parsingDate.plus(this.getTimeFromStepTime(timeStep))
     }
-
     return filledData
   }
 
diff --git a/src/services/dateChart.service.ts b/src/services/dateChart.service.ts
index 7f7ecc1507f9ad5541546ab7eff5a5413dfbfad4..8e97757b0fba44980828c71cd96c0b389521ef81 100644
--- a/src/services/dateChart.service.ts
+++ b/src/services/dateChart.service.ts
@@ -151,7 +151,7 @@ export default class DateChartService {
           date1.month === date2.month &&
           date1.day === date2.day &&
           date1.hour === date2.hour &&
-          Math.abs(date1.minute - date2.minute) < 30
+          Math.abs(date1.minute - date2.minute) === 0
         )
       default:
         throw new Error('TimeStep unknown')
diff --git a/src/services/queryRunner.service.spec.ts b/src/services/queryRunner.service.spec.ts
index d31b29f14b017a83ed22c399cd5bd589ad1dc8b6..1df6754513965e79afd155b966282dc5889d0d6d 100644
--- a/src/services/queryRunner.service.spec.ts
+++ b/src/services/queryRunner.service.spec.ts
@@ -1,15 +1,15 @@
 import { QueryResult } from 'cozy-client'
+import { DataloadState } from 'enum/dataload.enum'
 import { FluidType } from 'enum/fluid.enum'
 import { TimeStep } from 'enum/timeStep.enum'
 import { DateTime } from 'luxon'
 import { Dataload, DataloadEntity } from 'models'
-import QueryRunner from './queryRunner.service'
 import mockClient from '../../tests/__mocks__/client'
-import { loadYearData } from '../../tests/__mocks__/loadYearData.mock'
-import { loadMonthData } from '../../tests/__mocks__/loadMonthData.mock'
 import { loadDayData } from '../../tests/__mocks__/loadDayData.mock'
 import { loadMinuteData } from '../../tests/__mocks__/loadMinuteData.mock'
-import { DataloadState } from 'enum/dataload.enum'
+import { loadMonthData } from '../../tests/__mocks__/loadMonthData.mock'
+import { loadYearData } from '../../tests/__mocks__/loadYearData.mock'
+import QueryRunner from './queryRunner.service'
 
 describe('queryRunner service', () => {
   const queryRunner = new QueryRunner(mockClient)
@@ -244,20 +244,12 @@ describe('queryRunner service', () => {
           date: DateTime.fromISO('2020-11-02T00:00:00.000Z', {
             zone: 'utc',
           }),
-          value: 4.5,
-          state: DataloadState.VALID,
-          valueDetail: null,
-        },
-        {
-          date: DateTime.fromISO('2020-11-02T00:30:00.000Z', {
-            zone: 'utc',
-          }),
           value: 1.33,
           state: DataloadState.VALID,
           valueDetail: null,
         },
         {
-          date: DateTime.fromISO('2020-11-02T01:00:00.000Z', {
+          date: DateTime.fromISO('2020-11-02T00:30:00.000Z', {
             zone: 'utc',
           }),
           value: 3.22,
@@ -265,7 +257,7 @@ describe('queryRunner service', () => {
           valueDetail: null,
         },
         {
-          date: DateTime.fromISO('2020-11-02T01:30:00.000Z', {
+          date: DateTime.fromISO('2020-11-02T01:00:00.000Z', {
             zone: 'utc',
           }),
           value: 7.82,
@@ -273,7 +265,7 @@ describe('queryRunner service', () => {
           valueDetail: null,
         },
         {
-          date: DateTime.fromISO('2020-11-02T02:00:00.000Z', {
+          date: DateTime.fromISO('2020-11-02T01:30:00.000Z', {
             zone: 'utc',
           }),
           value: 1.23,
diff --git a/src/services/queryRunner.service.ts b/src/services/queryRunner.service.ts
index f559a5a1c28aea594ca1cf7529063c177a3d0604..5c5e91866ca356039084959118180b298aced9f9 100644
--- a/src/services/queryRunner.service.ts
+++ b/src/services/queryRunner.service.ts
@@ -1,5 +1,4 @@
 import { Client, Q, QueryDefinition } from 'cozy-client'
-import { QueryResult } from 'cozy-client/types/types'
 import {
   EGL_DAY_DOCTYPE,
   EGL_MONTH_DOCTYPE,
@@ -108,33 +107,43 @@ export default class QueryRunner {
   }
 
   private filterDataList(data: any, timePeriod: TimePeriod) {
+    // increase timeperiod range because the last data for a day is actually stored the next day at 00:00
+    if (timePeriod.endDate.day === timePeriod.startDate.day) {
+      timePeriod.startDate = timePeriod.startDate.plus({ minutes: 30 })
+      timePeriod.endDate = timePeriod.endDate.plus({ minutes: 30 })
+    }
     const filteredResult = data.data.filter((entry: any) =>
       this.withinDateBoundaries(
         DateTime.local(
           entry.year,
-          entry.month === 0 ? 1 : entry.month,
-          entry.day === 0 ? 1 : entry.day
+          entry.month || 1,
+          entry.day || 1,
+          entry.hour,
+          entry.minute
         ).setZone('utc', {
           keepLocalTime: true,
         }),
         timePeriod
       )
     )
-
     return filteredResult
   }
 
-  private mapDataList(data: any): Dataload[] {
+  private mapDataList(data: any, timeStep?: TimeStep): Dataload[] {
+    // set back every half hour data at -30 minutes so it is displayed as 23:30 instead of 00:00 etc..
+    const minusValue = timeStep === TimeStep.HALF_AN_HOUR ? 30 : 0
     const mappedResult = data.map((entry: any) => ({
       date: DateTime.local(
         entry.year,
-        entry.month == 0 ? 1 : entry.month,
-        entry.day === 0 ? 1 : entry.day,
+        entry.month || 1,
+        entry.day || 1,
         entry.hour,
         entry.minute
-      ).setZone('utc', {
-        keepLocalTime: true,
-      }),
+      )
+        .setZone('utc', {
+          keepLocalTime: true,
+        })
+        .minus({ minutes: minusValue }),
       value: entry.load,
       state: DataloadState.VALID,
       price: entry.price,
@@ -187,7 +196,6 @@ export default class QueryRunner {
 
   private getPredicate(timePeriod: TimePeriod, timeStep: TimeStep) {
     let predicate = {}
-
     switch (timeStep) {
       case TimeStep.HALF_AN_HOUR:
         predicate = {
@@ -198,7 +206,7 @@ export default class QueryRunner {
             $eq: timePeriod.startDate.month,
           },
           day: {
-            $eq: timePeriod.startDate.day,
+            $in: [timePeriod.startDate.day, timePeriod.startDate.day + 1],
           },
         }
         break
@@ -325,7 +333,10 @@ export default class QueryRunner {
 
     if (result?.data) {
       const filteredResult = this.filterDataList(result, timePeriod)
-      const mappedResult: Dataload[] = this.mapDataList(filteredResult)
+      const mappedResult: Dataload[] = this.mapDataList(
+        filteredResult,
+        timeStep
+      )
       return mappedResult
     }
     return null
@@ -381,7 +392,7 @@ export default class QueryRunner {
     }
     if (result?.data) {
       const filteredResult = this.filterDataList(result, maxTimePeriod)
-      const mappedResult = this.mapDataList(filteredResult)
+      const mappedResult = this.mapDataList(filteredResult, timeStep)
       if (withDate) {
         return mappedResult && mappedResult[0] && mappedResult[0]
       }
@@ -408,7 +419,7 @@ export default class QueryRunner {
       return DateTime.local(
         result.data[0].year,
         result.data[0].month,
-        result.data[0].day === 0 ? 1 : result.data[0].day,
+        result.data[0].day || 1,
         result.data[0].hour || 0,
         result.data[0].minute || 0
       ).setZone('utc', {
@@ -436,7 +447,7 @@ export default class QueryRunner {
       return DateTime.local(
         result.data[0].year,
         result.data[0].month,
-        result.data[0].day === 0 ? 1 : result.data[0].day,
+        result.data[0].day || 1,
         result.data[0].hour || 0,
         result.data[0].minute || 0
       ).setZone('utc', {