diff --git a/src/atlasViewer/atlasViewer.history.service.ts b/src/atlasViewer/atlasViewer.history.service.ts
index 6160d18f53205dbbc08a1ac532e7359c4d3a2bb6..aa381ffec51b286f094424e96f8a1e0c688271ec 100644
--- a/src/atlasViewer/atlasViewer.history.service.ts
+++ b/src/atlasViewer/atlasViewer.history.service.ts
@@ -6,7 +6,8 @@ import { debounceTime, distinctUntilChanged, filter, map, startWith, switchMap,
 import { defaultRootState, GENERAL_ACTION_TYPES, IavRootStoreInterface } from "src/services/stateStore.service";
 import { AtlasViewerConstantsServices } from "src/atlasViewer/atlasViewer.constantService.service";
 import { cvtSearchParamToState, cvtStateToSearchParam } from "./atlasViewer.urlUtil";
-
+import { viewerStateHelperStoreName } from '../services/state/viewerState.store.helper'
+import { PureContantService } from "src/util";
 const getSearchParamStringFromState = state => {
   try {
     return cvtStateToSearchParam(state).toString()
@@ -24,7 +25,10 @@ export class AtlasViewerHistoryUseEffect implements OnDestroy {
   // ensure that fetchedTemplates are all populated
   @Effect()
   public parsingSearchUrlToState$ = this.store$.pipe(
-    filter(state => state.viewerState.fetchedTemplates.length === this.constantService.totalTemplates),
+    filter(state => {
+      return state.viewerState.fetchedTemplates.length === this.constantService.totalTemplates &&
+        state[viewerStateHelperStoreName].fetchedAtlases.length === this.pureConstantSErvice.totalAtlasesLength
+    }),
     take(1),
     switchMapTo(merge(
       // parsing state can occur via 2 ways:
@@ -121,7 +125,8 @@ export class AtlasViewerHistoryUseEffect implements OnDestroy {
   constructor(
     private store$: Store<IavRootStoreInterface>,
     private actions$: Actions,
-    private constantService: AtlasViewerConstantsServices
+    private constantService: AtlasViewerConstantsServices,
+    private pureConstantSErvice: PureContantService
   ) {
 
     this.setNewSearchString$.subscribe(newSearchString => {
diff --git a/src/atlasViewer/atlasViewer.urlUtil.spec.ts b/src/atlasViewer/atlasViewer.urlUtil.spec.ts
index 562ea2318d439ae6cfd5f7672cd223c92b4bf4e1..74966bd4b9e4e02c8397d2cc150a1260d02f0cc8 100644
--- a/src/atlasViewer/atlasViewer.urlUtil.spec.ts
+++ b/src/atlasViewer/atlasViewer.urlUtil.spec.ts
@@ -23,6 +23,13 @@ const fetchedTemplateRootState = {
 // TODO finish writing tests
 describe('atlasViewer.urlService.service.ts', () => {
   describe('cvtSearchParamToState', () => {
+    it('parses template  into atlasId properly', () => {
+      /**
+       * TODO finish test
+       */
+      expect(true).toBe(false)
+    })
+
     it('convert empty search param to empty state', () => {
       const searchparam = new URLSearchParams()
       expect(() => cvtSearchParamToState(searchparam, defaultRootState)).toThrow()
diff --git a/src/atlasViewer/atlasViewer.urlUtil.ts b/src/atlasViewer/atlasViewer.urlUtil.ts
index a99be081530ff5a3188c8b5222e6f05743e468b0..2fee4d50c186852f1466b67c70f753824409f061 100644
--- a/src/atlasViewer/atlasViewer.urlUtil.ts
+++ b/src/atlasViewer/atlasViewer.urlUtil.ts
@@ -4,6 +4,7 @@ import { PLUGINSTORE_CONSTANTS } from 'src/services/state/pluginState.store'
 import { generateLabelIndexId, getNgIdLabelIndexFromRegion, IavRootStoreInterface } from "../services/stateStore.service";
 import { decodeToNumber, encodeNumber, separator } from "./atlasViewer.constantService.service";
 import { getShader, PMAP_DEFAULT_CONFIG } from "src/util/constants";
+import { viewerStateHelperStoreName } from "src/services/state/viewerState.store.helper";
 export const PARSING_SEARCHPARAM_ERROR = {
   TEMPALTE_NOT_SET: 'TEMPALTE_NOT_SET',
   TEMPLATE_NOT_FOUND: 'TEMPLATE_NOT_FOUND',
@@ -305,6 +306,22 @@ export const cvtSearchParamToState = (searchparams: URLSearchParams, state: IavR
   } catch (e) {
     // parsing previewingDatasetFiles
   }
-  
+
+  /**
+   * parsing template to get atlasId
+   */
+  (() => {
+
+    const viewreHelperState = returnState[viewerStateHelperStoreName]
+    const { templateSelected, parcellationSelected } = returnState['viewerState']
+    const { fetchedAtlases, ...rest } = viewreHelperState
+    const selectedAtlas = fetchedAtlases.find(a => a['templateSpaces'].find(t => t['@id'] === templateSelected['@id']))
+    returnState[viewerStateHelperStoreName] = {
+      ...viewreHelperState,
+      selectedAtlasId: selectedAtlas['@id']
+    }
+  })()
+
+  console.log(returnState)
   return returnState
 }
diff --git a/src/services/state/viewerState.store.helper.ts b/src/services/state/viewerState.store.helper.ts
index f49b22e22e6ab061a4ebf1a0e16c9e48fb162037..28894daf0ce8bb35c92e69bcd86b386f7327aa65 100644
--- a/src/services/state/viewerState.store.helper.ts
+++ b/src/services/state/viewerState.store.helper.ts
@@ -1,6 +1,6 @@
 // TODO merge with viewerstate.store.ts when refactor is done
 import { createAction, props, createReducer, on, ActionReducer, createSelector } from "@ngrx/store";
-import { reduce } from "rxjs/operators";
+import { generalApplyState } from "../stateStore.helper";
 
 export interface IRegion{
   name: string
@@ -63,6 +63,7 @@ export const viewerStateHelperReducer = createReducer(
   initialState,
   on(viewerStateSetFetchedAtlases, (state, { fetchedAtlases }) => ({ ...state, fetchedAtlases })),
   on(viewerStateSelectAtlas, (state, { atlas }) => ({ ...state, selectedAtlasId: atlas['@id'] })),
+  on(generalApplyState, (_prevState, { state }) => ({ ...state[viewerStateHelperStoreName] })),
   on(viewerStateToggleAdditionalLayer, (state, { atlas }) => {
     const { overlayingAdditionalParcellations } = state
     const layerAlreadyDisplayed = overlayingAdditionalParcellations.find(p => p['@id'] === atlas['@id'])
@@ -108,4 +109,5 @@ export function viewerStateFleshOutDetail(reducer: ActionReducer<any>): ActionRe
     }
     return reducer(state, action)
   }
-}
\ No newline at end of file
+}
+
diff --git a/src/services/stateStore.helper.ts b/src/services/stateStore.helper.ts
new file mode 100644
index 0000000000000000000000000000000000000000..34393f8cc8ead35f081435bd3721565f1a2ab588
--- /dev/null
+++ b/src/services/stateStore.helper.ts
@@ -0,0 +1,11 @@
+import { createAction, props } from "@ngrx/store";
+
+export const GENERAL_ACTION_TYPES = {
+  ERROR: 'ERROR',
+  APPLY_STATE: 'APPLY_STATE',
+}
+
+export const generalApplyState = createAction(
+  GENERAL_ACTION_TYPES.APPLY_STATE,
+  props<{ state: any }>()
+)
diff --git a/src/services/stateStore.service.ts b/src/services/stateStore.service.ts
index 55bc6f5287bc58778e4f37348a0dbef1f106c475..83981d12f1bd436ada7cc052d49a8260124eb031 100644
--- a/src/services/stateStore.service.ts
+++ b/src/services/stateStore.service.ts
@@ -48,10 +48,7 @@ export { IDataEntry, IParcellationRegion, FETCHED_DATAENTRIES, FETCHED_SPATIAL_D
 export { CLOSE_SIDE_PANEL, MOUSE_OVER_LANDMARK, MOUSE_OVER_SEGMENT, OPEN_SIDE_PANEL, SHOW_SIDE_PANEL_CONNECTIVITY, HIDE_SIDE_PANEL_CONNECTIVITY, COLLAPSE_SIDE_PANEL_CURRENT_VIEW, EXPAND_SIDE_PANEL_CURRENT_VIEW } from './state/uiState.store'
 export { UserConfigStateUseEffect } from './state/userConfigState.store'
 
-export const GENERAL_ACTION_TYPES = {
-  ERROR: 'ERROR',
-  APPLY_STATE: 'APPLY_STATE',
-}
+export { GENERAL_ACTION_TYPES } from './stateStore.helper'
 
 // TODO deprecate
 export function safeFilter(key: string) {
@@ -201,6 +198,7 @@ export interface IavRootStoreInterface {
 }
 
 import { DATASTORE_DEFAULT_STATE } from 'src/ui/databrowserModule'
+import { createAction, props } from '@ngrx/store';
 
 export const defaultRootState: IavRootStoreInterface = {
   pluginState: pluginDefaultState,