diff --git a/src/components/Map/MapViewer/utils/config/useOlMapView.test.ts b/src/components/Map/MapViewer/utils/config/useOlMapView.test.ts
index 8a78f734250e8f020e17ae8093f0af4f33d3ee0f..6ff16dd9408560c69b4e2d7a7baf3b117dcfbc3d 100644
--- a/src/components/Map/MapViewer/utils/config/useOlMapView.test.ts
+++ b/src/components/Map/MapViewer/utils/config/useOlMapView.test.ts
@@ -1,5 +1,5 @@
 /* eslint-disable no-magic-numbers */
-import mapSlice, { setMapData } from '@/redux/map/map.slice';
+import mapSlice, { setMapPosition } from '@/redux/map/map.slice';
 import { getReduxWrapperUsingSliceReducer } from '@/utils/testing/getReduxWrapperUsingSliceReducer';
 import { getReduxWrapperWithStore } from '@/utils/testing/getReduxWrapperWithStore';
 import { renderHook, waitFor } from '@testing-library/react';
@@ -42,7 +42,7 @@ describe('useOlMapView - util', () => {
     const CALLED_ONCE = 1;
 
     store.dispatch(
-      setMapData({
+      setMapPosition({
         position: {
           initial: {
             x: 0,
diff --git a/src/components/Map/MapViewer/utils/listeners/onMapPositionChange.ts b/src/components/Map/MapViewer/utils/listeners/onMapPositionChange.ts
index 3873bf5bd0e35df7b781beb4155262477af05995..482f0509d7bbdd3b3da128a3ce3638c818302d12 100644
--- a/src/components/Map/MapViewer/utils/listeners/onMapPositionChange.ts
+++ b/src/components/Map/MapViewer/utils/listeners/onMapPositionChange.ts
@@ -1,4 +1,4 @@
-import { setMapData } from '@/redux/map/map.slice';
+import { setMapPosition } from '@/redux/map/map.slice';
 import { MapSize } from '@/redux/map/map.types';
 import { AppDispatch } from '@/redux/store';
 import { latLngToPoint } from '@/utils/map/latLngToPoint';
@@ -15,7 +15,7 @@ export const onMapPositionChange =
       const { x, y } = latLngToPoint([lat, lng], mapSize, { rounded: true });
 
       dispatch(
-        setMapData({
+        setMapPosition({
           position: {
             last: {
               x,
diff --git a/src/redux/map/map.constants.ts b/src/redux/map/map.constants.ts
index 34be216db6c6b3a7eabe6ca7fe6a11fb6d06ad08..de82f296b19012d682782e59e10363210eeb285e 100644
--- a/src/redux/map/map.constants.ts
+++ b/src/redux/map/map.constants.ts
@@ -30,4 +30,4 @@ export const MAP_DATA_INITIAL_STATE: MapData = {
   },
 };
 
-export const MIDDLEWARE_ALLOWED_ACTIONS: string[] = ['map/setMapData', 'map/initMapData'];
+export const MIDDLEWARE_ALLOWED_ACTIONS: string[] = ['map/setMapData'];
diff --git a/src/redux/map/map.reducers.ts b/src/redux/map/map.reducers.ts
index 25099909bee3b89f30a9f4106ac03004c0c6e330..7dc80074bba59f069adb94676a3634860a7d8ee1 100644
--- a/src/redux/map/map.reducers.ts
+++ b/src/redux/map/map.reducers.ts
@@ -1,17 +1,24 @@
 import { ActionReducerMapBuilder } from '@reduxjs/toolkit';
-import merge from 'ts-deepmerge';
 import { getPointMerged } from '../../utils/object/getPointMerged';
-import { initMapData } from './map.thunks';
-import { MapState, SetMapDataAction } from './map.types';
+import { initMapData, initMapPosition } from './map.thunks';
+import { MapState, SetMapDataAction, SetMapPositionDataAction } from './map.types';
 
 export const setMapDataReducer = (state: MapState, action: SetMapDataAction): void => {
   const payload = action.payload || {};
-  const payloadPosition = payload?.position || {};
-  const statePosition = state.data.position;
 
   state.data = {
     ...state.data,
     ...payload,
+  };
+};
+
+export const setMapPositionReducer = (state: MapState, action: SetMapPositionDataAction): void => {
+  const payload = action.payload || {};
+  const payloadPosition = 'position' in payload ? payload.position : undefined;
+  const statePosition = state.data.position;
+
+  state.data = {
+    ...state.data,
     position: {
       initial: getPointMerged(payloadPosition?.initial || {}, statePosition.initial),
       last: getPointMerged(payloadPosition?.last || {}, statePosition.last),
@@ -25,7 +32,7 @@ export const getMapReducers = (builder: ActionReducerMapBuilder<MapState>): void
   });
   builder.addCase(initMapData.fulfilled, (state, action) => {
     const payload = action.payload || {};
-    state.data = merge(state.data, payload);
+    state.data = { ...state.data, ...payload };
     state.loading = 'succeeded';
   });
   builder.addCase(initMapData.rejected, state => {
@@ -33,3 +40,18 @@ export const getMapReducers = (builder: ActionReducerMapBuilder<MapState>): void
     // TODO to discuss manage state of failure
   });
 };
+
+export const getMapPositionReducers = (builder: ActionReducerMapBuilder<MapState>): void => {
+  builder.addCase(initMapPosition.pending, state => {
+    state.loading = 'pending';
+  });
+  builder.addCase(initMapPosition.fulfilled, (state, action) => {
+    const payload = action.payload || {};
+    state.data = { ...state.data, ...payload };
+    state.loading = 'succeeded';
+  });
+  builder.addCase(initMapPosition.rejected, state => {
+    state.loading = 'failed';
+    // TODO to discuss manage state of failure
+  });
+};
diff --git a/src/redux/map/map.slice.ts b/src/redux/map/map.slice.ts
index 3565dc2500f9c45182b563f636f16fdf5b47f4a9..49a21589200ba0f0c3c10f2931310eac663cca8f 100644
--- a/src/redux/map/map.slice.ts
+++ b/src/redux/map/map.slice.ts
@@ -1,6 +1,11 @@
 import { createSlice } from '@reduxjs/toolkit';
 import { MAP_DATA_INITIAL_STATE } from './map.constants';
-import { getMapReducers, setMapDataReducer } from './map.reducers';
+import {
+  getMapPositionReducers,
+  getMapReducers,
+  setMapDataReducer,
+  setMapPositionReducer,
+} from './map.reducers';
 import { MapState } from './map.types';
 
 const initialState: MapState = {
@@ -14,12 +19,14 @@ const mapSlice = createSlice({
   initialState,
   reducers: {
     setMapData: setMapDataReducer,
+    setMapPosition: setMapPositionReducer,
   },
   extraReducers: builder => {
     getMapReducers(builder);
+    getMapPositionReducers(builder);
   },
 });
 
-export const { setMapData } = mapSlice.actions;
+export const { setMapData, setMapPosition } = mapSlice.actions;
 
 export default mapSlice.reducer;
diff --git a/src/redux/map/map.thunks.ts b/src/redux/map/map.thunks.ts
index 062328d6d9f3c8e511fd738c8c2c9c2b6546d803..0ebf33265655e61b9e1ad0e382a479b9c8076a31 100644
--- a/src/redux/map/map.thunks.ts
+++ b/src/redux/map/map.thunks.ts
@@ -1,6 +1,6 @@
 import { PROJECT_ID } from '@/constants';
 import { QueryData } from '@/types/query';
-import { getUpdatedMapData } from '@/utils/map/getUpdatedMapData';
+import { GetUpdatedMapDataResult, getUpdatedMapData } from '@/utils/map/getUpdatedMapData';
 import { createAsyncThunk } from '@reduxjs/toolkit';
 import { backgroundsDataSelector } from '../backgrounds/background.selectors';
 import { getAllBackgroundsByProjectId } from '../backgrounds/backgrounds.thunks';
@@ -8,12 +8,16 @@ import { modelsDataSelector } from '../models/models.selectors';
 import { getModels } from '../models/models.thunks';
 import { getAllPublicOverlaysByProjectId } from '../overlays/overlays.thunks';
 import type { AppDispatch, RootState } from '../store';
-import { InitMapDataActionParams, InitMapDataActionPayload } from './map.types';
+import {
+  InitMapDataActionParams,
+  InitMapDataActionPayload,
+  SetMapPositionDataActionPayload,
+} from './map.types';
 
 const getInitMapDataPayload = (
   state: RootState,
   queryData: QueryData,
-): InitMapDataActionPayload => {
+): GetUpdatedMapDataResult | object => {
   const FIRST = 0;
   const models = modelsDataSelector(state);
   const backgrounds = backgroundsDataSelector(state);
@@ -54,3 +58,15 @@ export const initMapData = createAsyncThunk<
     return getInitMapDataPayload(state, queryData);
   },
 );
+
+export const initMapPosition = createAsyncThunk<
+  InitMapDataActionPayload,
+  InitMapDataActionParams,
+  { dispatch: AppDispatch; state: RootState }
+>(
+  'map/initMapPosition',
+  async ({ queryData }, { getState }): Promise<SetMapPositionDataActionPayload> => {
+    const state = getState();
+    return getInitMapDataPayload(state, queryData);
+  },
+);
diff --git a/src/redux/map/map.types.ts b/src/redux/map/map.types.ts
index 2f723872a225ef9bf88d73ab60373e00a85cc9a0..db099d1113ae97fda4e7186da1db597566aee802 100644
--- a/src/redux/map/map.types.ts
+++ b/src/redux/map/map.types.ts
@@ -1,7 +1,7 @@
 import { FetchDataState } from '@/types/fetchDataState';
 import { Point } from '@/types/map';
 import { QueryData } from '@/types/query';
-import { DeepPartial, PayloadAction } from '@reduxjs/toolkit';
+import { PayloadAction } from '@reduxjs/toolkit';
 
 export interface MapSize {
   width: number;
@@ -32,7 +32,6 @@ export type MapState = FetchDataState<MapData, MapData>;
 
 export type SetMapDataActionPayload =
   | (Omit<Partial<MapData>, 'position' | 'projectId'> & {
-      position?: DeepPartial<MapData['position']>;
       projectId?: string;
     })
   | undefined;
@@ -55,3 +54,7 @@ export type SetMapDataByQueryDataActionPayload = Pick<
   MapData,
   'modelId' | 'backgroundId' | 'position'
 >;
+
+export type SetMapPositionDataActionPayload = Pick<MapData, 'position'> | object;
+
+export type SetMapPositionDataAction = PayloadAction<SetMapPositionDataActionPayload>;
diff --git a/src/redux/map/middleware/map.middleware.test.ts b/src/redux/map/middleware/map.middleware.test.ts
index c821eeda0b149f11cfaab37b30feb5aa3e5061ce..3359b92a548c0bee5ec6e40c7a651f163b12d3dd 100644
--- a/src/redux/map/middleware/map.middleware.test.ts
+++ b/src/redux/map/middleware/map.middleware.test.ts
@@ -4,7 +4,7 @@ import { Loading } from '@/types/loadingState';
 import { getReduxWrapperWithStore } from '@/utils/testing/getReduxWrapperWithStore';
 import { Action } from '@reduxjs/toolkit';
 import { MAP_DATA_INITIAL_STATE, MIDDLEWARE_ALLOWED_ACTIONS } from '../map.constants';
-import * as setMapData from '../map.slice';
+import * as mapSlice from '../map.slice';
 import * as checkIfIsMapUpdateActionValid from './checkIfIsMapUpdateActionValid';
 import * as getUpdatedModel from './getUpdatedModel';
 import { mapDataMiddlewareListener } from './map.middleware';
@@ -48,7 +48,8 @@ const checkIfIsMapUpdateActionValidSpy = jest.spyOn(
   'checkIfIsMapUpdateActionValid',
 );
 const getUpdatedModelSpy = jest.spyOn(getUpdatedModel, 'getUpdatedModel');
-const setMapDataSpy = jest.spyOn(setMapData, 'setMapData');
+const setMapDataSpy = jest.spyOn(mapSlice, 'setMapData');
+const setMapPositionSpy = jest.spyOn(mapSlice, 'setMapPosition');
 
 const { store } = getReduxWrapperWithStore({
   map: {
@@ -81,7 +82,7 @@ describe('map middleware', () => {
     });
 
     describe('when model is valid and different than current', () => {
-      it.each(MIDDLEWARE_ALLOWED_ACTIONS)('should dispatch setMapData', async actionType => {
+      it.each(MIDDLEWARE_ALLOWED_ACTIONS)('should dispatch setMapData, %s', async actionType => {
         const model = modelsFixture[1];
 
         const action = {
@@ -95,6 +96,7 @@ describe('map middleware', () => {
         expect(checkIfIsMapUpdateActionValidSpy).toHaveLastReturnedWith(true);
         expect(getUpdatedModelSpy).toHaveLastReturnedWith(model);
         expect(setMapDataSpy).toBeCalled();
+        expect(setMapPositionSpy).toBeCalled();
       });
     });
 
@@ -112,6 +114,7 @@ describe('map middleware', () => {
         expect(checkIfIsMapUpdateActionValidSpy).toHaveLastReturnedWith(false);
         expect(getUpdatedModelSpy).toHaveLastReturnedWith(model);
         expect(setMapDataSpy).not.toBeCalled();
+        expect(setMapPositionSpy).not.toBeCalled();
       });
     });
 
@@ -128,6 +131,7 @@ describe('map middleware', () => {
         expect(checkIfIsMapUpdateActionValidSpy).toHaveLastReturnedWith(true);
         expect(getUpdatedModelSpy).toHaveLastReturnedWith(undefined);
         expect(setMapDataSpy).not.toBeCalled();
+        expect(setMapPositionSpy).not.toBeCalled();
       });
     });
   });
diff --git a/src/redux/map/middleware/map.middleware.ts b/src/redux/map/middleware/map.middleware.ts
index a09dc6bcc00004bcced835a767e3f6c4ba63b69d..f3e12654c64b70720198f86e086789f29136353e 100644
--- a/src/redux/map/middleware/map.middleware.ts
+++ b/src/redux/map/middleware/map.middleware.ts
@@ -1,8 +1,8 @@
 import { currentBackgroundSelector } from '@/redux/backgrounds/background.selectors';
-import type { AppListenerEffectAPI, AppStartListening } from '@/redux/store';
-import { getUpdatedMapData } from '@/utils/map/getUpdatedMapData';
+import type { AppDispatch, AppListenerEffectAPI, AppStartListening } from '@/redux/store';
+import { GetUpdatedMapDataResult, getUpdatedMapData } from '@/utils/map/getUpdatedMapData';
 import { Action, createListenerMiddleware } from '@reduxjs/toolkit';
-import { setMapData } from '../map.slice';
+import { setMapData, setMapPosition } from '../map.slice';
 import { checkIfIsMapUpdateActionValid } from './checkIfIsMapUpdateActionValid';
 import { getUpdatedModel } from './getUpdatedModel';
 
@@ -10,6 +10,14 @@ export const mapListenerMiddleware = createListenerMiddleware();
 
 const startListening = mapListenerMiddleware.startListening as AppStartListening;
 
+/* prettier-ignore */
+export const dispatchMapDataWithPosition =
+  (updatedMapData: GetUpdatedMapDataResult) =>
+    (dispatch: AppDispatch): void => {
+      dispatch(setMapData(updatedMapData));
+      dispatch(setMapPosition(updatedMapData));
+    };
+
 export const mapDataMiddlewareListener = async (
   action: Action,
   { getOriginalState, dispatch }: AppListenerEffectAPI,
@@ -25,6 +33,7 @@ export const mapDataMiddlewareListener = async (
   const background = currentBackgroundSelector(state);
   const updatedMapData = getUpdatedMapData({ model: updatedModel, background });
   dispatch(setMapData(updatedMapData));
+  dispatch(setMapPosition(updatedMapData));
 };
 
 startListening({
diff --git a/src/utils/initialize/useInitializeStore.ts b/src/utils/initialize/useInitializeStore.ts
index 68a6100e2075d8fa3e3a8ce1cb6a1465036e1b1c..207bd0ca713ab57733715d36e24c72aac3702b2d 100644
--- a/src/utils/initialize/useInitializeStore.ts
+++ b/src/utils/initialize/useInitializeStore.ts
@@ -1,6 +1,6 @@
 import { PROJECT_ID } from '@/constants';
 import { useAppDispatch } from '@/redux/hooks/useAppDispatch';
-import { initMapData } from '@/redux/map/map.thunks';
+import { initMapData, initMapPosition } from '@/redux/map/map.thunks';
 import { getProjectById } from '@/redux/project/project.thunks';
 import { initDataLoadingInitialized } from '@/redux/root/init.selectors';
 import { AppDispatch } from '@/redux/store';
@@ -20,6 +20,7 @@ export const getInitStoreData =
     (dispatch: AppDispatch): void => {
       dispatch(getProjectById(PROJECT_ID));
       dispatch(initMapData({ queryData }));
+      dispatch(initMapPosition({ queryData }));
     };
 
 export const useInitializeStore = (): void => {
diff --git a/src/utils/map/getUpdatedMapData.ts b/src/utils/map/getUpdatedMapData.ts
index c3ebf2a09e1988249062c119681baa8b4e869944..dbfcf755181fbc08a8d066d71a22b66a2afaeacd 100644
--- a/src/utils/map/getUpdatedMapData.ts
+++ b/src/utils/map/getUpdatedMapData.ts
@@ -1,6 +1,10 @@
 import { DEFAULT_ZOOM } from '@/constants/map';
 import { MAP_DATA_INITIAL_STATE } from '@/redux/map/map.constants';
-import { MapData, SetMapDataActionPayload } from '@/redux/map/map.types';
+import {
+  MapData,
+  SetMapDataActionPayload,
+  SetMapPositionDataActionPayload,
+} from '@/redux/map/map.types';
 import { MapBackground, MapModel } from '@/types/models';
 import { DeepPartial } from '@reduxjs/toolkit';
 import { getPointMerged } from '../object/getPointMerged';
@@ -11,7 +15,7 @@ interface GetUpdatedMapDataArgs {
   background?: MapBackground;
 }
 
-type GetUpdatedMapDataResult = SetMapDataActionPayload;
+export type GetUpdatedMapDataResult = SetMapDataActionPayload & SetMapPositionDataActionPayload;
 
 const HALF = 2;