diff --git a/deploy/datasets/testData/hoc1pmap.js b/deploy/datasets/testData/hoc1pmap.js
new file mode 100644
index 0000000000000000000000000000000000000000..3cd032968a85c4696ed35c9554dd0dc6c93f333c
--- /dev/null
+++ b/deploy/datasets/testData/hoc1pmap.js
@@ -0,0 +1,146 @@
+module.exports = [
+  {
+    "formats": [
+      "NIFTI"
+    ],
+    "datasetDOI": [
+      {
+        "cite": "Amunts, K., Malikovic, A., Mohlberg, H., Schormann, T., & Zilles, K. (2000). Brodmann’s Areas 17 and 18 Brought into Stereotaxic Space—Where and How Variable? NeuroImage, 11(1), 66–84. ",
+        "doi": "10.1006/nimg.1999.0516"
+      }
+    ],
+    "activity": [
+      {
+        "protocols": [
+          "histology"
+        ],
+        "preparation": [
+          "Ex vivo"
+        ]
+      },
+      {
+        "protocols": [
+          "imaging"
+        ],
+        "preparation": [
+          "Ex vivo"
+        ]
+      },
+      {
+        "protocols": [
+          "brain mapping"
+        ],
+        "preparation": [
+          "Ex vivo"
+        ]
+      }
+    ],
+    "referenceSpaces": [
+      {
+        "name": null,
+        "fullId": "https://nexus.humanbrainproject.org/v0/data/minds/core/referencespace/v1.0.0/dafcffc5-4826-4bf1-8ff6-46b8a31ff8e2"
+      },
+      {
+        "name": "MNI Colin 27",
+        "fullId": "https://nexus.humanbrainproject.org/v0/data/minds/core/referencespace/v1.0.0/7f39f7be-445b-47c0-9791-e971c0b6d992"
+      }
+    ],
+    "methods": [
+      "silver staining",
+      "magnetic resonance imaging (MRI)",
+      "probability mapping",
+      "cytoarchitectonic mapping"
+    ],
+    "custodians": [
+      "Amunts, Katrin"
+    ],
+    "project": [
+      "JuBrain: cytoarchitectonic probabilistic maps of the human brain"
+    ],
+    "description": "This dataset contains the distinct architectonic Area hOc1 (V1, 17, CalcS) in the individual, single subject template of the MNI Colin 27 as well as the MNI ICBM 152 2009c nonlinear asymmetric reference space. As part of the JuBrain cytoarchitectonic atlas, the area was identified using cytoarchitectonic analysis on cell-body-stained histological sections of 10 human postmortem brains obtained from the body donor program of the University of Düsseldorf. The results of the cytoarchitectonic analysis were then mapped to both reference spaces, where each voxel was assigned the probability to belong to Area hOc1 (V1, 17, CalcS). The probability map of Area hOc1 (V1, 17, CalcS) are provided in the NifTi format for each brain reference space and hemisphere. The JuBrain atlas relies on a modular, flexible and adaptive framework containing workflows to create the probabilistic brain maps for these structures. Note that methodological improvements and integration of new brain structures may lead to small deviations in earlier released datasets.",
+    "parcellationAtlas": [
+      {
+        "name": "Jülich Cytoarchitechtonic Brain Atlas (human)",
+        "fullId": "https://nexus.humanbrainproject.org/v0/data/minds/core/parcellationatlas/v1.0.0/94c1125b-b87e-45e4-901c-00daee7f2579",
+        "id": [
+          "deec923ec31a82f89a9c7c76a6fefd6b",
+          "e2d45e028b6da0f6d9fdb9491a4de80a"
+        ]
+      }
+    ],
+    "licenseInfo": [
+      {
+        "name": "Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International",
+        "url": "https://creativecommons.org/licenses/by-nc-sa/4.0/"
+      }
+    ],
+    "embargoStatus": [
+      "Free"
+    ],
+    "license": [],
+    "parcellationRegion": [
+      {
+        "species": [],
+        "name": "Area hOc1 (V1, 17, CalcS)",
+        "alias": null,
+        "fullId": "https://nexus.humanbrainproject.org/v0/data/minds/core/parcellationregion/v1.0.0/5151ab8f-d8cb-4e67-a449-afe2a41fb007"
+      }
+    ],
+    "species": [
+      "Homo sapiens"
+    ],
+    "name": "Probabilistic cytoarchitectonic map of Area hOc1 (V1, 17, CalcS) (v2.4)",
+    "files": [
+      {
+        "byteSize": 199561,
+        "name": "Area-hOc1_r_N10_nlin2Stdcolin27_2.4_publicP_b3b742528b1d1a933c89b2604d23028d.nii.gz",
+        "absolutePath": "https://object.cscs.ch/v1/AUTH_227176556f3c4bb38df9feea4b91200c/hbp-d000001_jubrain-cytoatlas-Area-hOc1_pub/2.4/Area-hOc1_r_N10_nlin2Stdcolin27_2.4_publicP_b3b742528b1d1a933c89b2604d23028d.nii.gz",
+        "contentType": "application/octet-stream"
+      },
+      {
+        "byteSize": 217968,
+        "name": "Area-hOc1_l_N10_nlin2Stdcolin27_2.4_publicP_788fe1ea663b1fa4e7e9a8b5cf26c5d6.nii.gz",
+        "absolutePath": "https://object.cscs.ch/v1/AUTH_227176556f3c4bb38df9feea4b91200c/hbp-d000001_jubrain-cytoatlas-Area-hOc1_pub/2.4/Area-hOc1_l_N10_nlin2Stdcolin27_2.4_publicP_788fe1ea663b1fa4e7e9a8b5cf26c5d6.nii.gz",
+        "contentType": "application/octet-stream"
+      },
+      {
+        "byteSize": 188966,
+        "name": "Area-hOc1_l_N10_nlin2MNI152ASYM2009C_2.4_publicP_d3045ee3c0c4de9820eb1516d2cc72bb.nii.gz",
+        "absolutePath": "https://object.cscs.ch/v1/AUTH_227176556f3c4bb38df9feea4b91200c/hbp-d000001_jubrain-cytoatlas-Area-hOc1_pub/2.4/Area-hOc1_l_N10_nlin2MNI152ASYM2009C_2.4_publicP_d3045ee3c0c4de9820eb1516d2cc72bb.nii.gz",
+        "contentType": "application/octet-stream"
+      },
+      {
+        "byteSize": 181550,
+        "name": "Area-hOc1_r_N10_nlin2MNI152ASYM2009C_2.4_publicP_a48ca5d938781ebaf1eaa25f59df74d0.nii.gz",
+        "absolutePath": "https://object.cscs.ch/v1/AUTH_227176556f3c4bb38df9feea4b91200c/hbp-d000001_jubrain-cytoatlas-Area-hOc1_pub/2.4/Area-hOc1_r_N10_nlin2MNI152ASYM2009C_2.4_publicP_a48ca5d938781ebaf1eaa25f59df74d0.nii.gz",
+        "contentType": "application/octet-stream"
+      },
+      {
+        "byteSize": 20,
+        "name": "subjects_Area-hOc1.csv",
+        "absolutePath": "https://object.cscs.ch/v1/AUTH_227176556f3c4bb38df9feea4b91200c/hbp-d000001_jubrain-cytoatlas-Area-hOc1_pub/subjects_Area-hOc1.csv",
+        "contentType": "text/csv"
+      }
+    ],
+    "fullId": "https://nexus.humanbrainproject.org/v0/data/minds/core/dataset/v1.0.0/5c669b77-c981-424a-858d-fe9f527dbc07",
+    "contributors": [
+      "Zilles, Karl",
+      "Schormann, Thorsten",
+      "Mohlberg, Hartmut",
+      "Malikovic, Aleksandar",
+      "Amunts, Katrin"
+    ],
+    "id": "5c669b77-c981-424a-858d-fe9f527dbc07",
+    "kgReference": [
+      "10.25493/MXJ6-6DH"
+    ],
+    "publications": [
+      {
+        "name": "Brodmann's Areas 17 and 18 Brought into Stereotaxic Space—Where and How Variable?",
+        "cite": "Amunts, K., Malikovic, A., Mohlberg, H., Schormann, T., & Zilles, K. (2000). Brodmann’s Areas 17 and 18 Brought into Stereotaxic Space—Where and How Variable? NeuroImage, 11(1), 66–84. ",
+        "doi": "10.1006/nimg.1999.0516"
+      }
+    ],
+    "preview": true
+  }
+]
\ No newline at end of file
diff --git a/deploy/datasets/util.spec.js b/deploy/datasets/util.spec.js
index c300acaaadc529bae23aa5aa1f8e2195a7e8035f..48de1ddfa584b597cc3d38bd737633f207c6b436 100644
--- a/deploy/datasets/util.spec.js
+++ b/deploy/datasets/util.spec.js
@@ -7,6 +7,7 @@ const bigbrain = require('./testData/bigbrain')
 const humanReceptor = require('./testData/humanReceptor')
 const mni152JuBrain = require('./testData/mni152JuBrain')
 const colin27 = require('./testData/colin27')
+const hoc1Pmap = require('./testData/hoc1pmap')
 
 describe('datasets/util.js', () => {
 
@@ -215,6 +216,23 @@ describe('datasets/util.js', () => {
         ).to.be.true
       }
     })
+
+    it('hoc1pmap should not belong to bundle parcellation', () => {
+      for (const ds of hoc1Pmap){
+        expect(
+          datasetBelongToParcellation({
+            dataset: ds,
+            parcellationName: 'Fibre Bundle Atlas - Long Bundle'
+          })
+        ).to.be.false
+        expect(
+          datasetBelongToParcellation({
+            dataset: ds,
+            parcellationName: 'Fibre Bundle Atlas - Short Bundle'
+          })
+        ).to.be.false
+      }
+    })
   })
 
   describe('populateSet', () => {
@@ -266,7 +284,5 @@ describe('datasets/util.js', () => {
         'minds/core/parcellationregion/v1.0.0/8a6be82c-5947-4fff-8348-cf9bf73e4f40',
       ])
     })
-
   })
-  
 })
diff --git a/src/atlasViewer/atlasViewer.constantService.service.ts b/src/atlasViewer/atlasViewer.constantService.service.ts
index 919f2b9134aa99d59da652e142baf4ad6882a876..04a9f0f2170a4b041fdd2a653a17f6c965eadcde 100644
--- a/src/atlasViewer/atlasViewer.constantService.service.ts
+++ b/src/atlasViewer/atlasViewer.constantService.service.ts
@@ -1,16 +1,19 @@
 import { HttpClient } from "@angular/common/http";
 import { Injectable, OnDestroy } from "@angular/core";
 import { select, Store } from "@ngrx/store";
-import { merge, Observable, of, Subscription, throwError } from "rxjs";
-import { catchError, map, shareReplay, switchMap, tap } from "rxjs/operators";
+import { merge, Observable, of, Subscription, throwError, fromEvent, forkJoin } from "rxjs";
+import { catchError, map, shareReplay, switchMap, tap, filter, take } from "rxjs/operators";
 import { LoggingService } from "src/services/logging.service";
 import { SNACKBAR_MESSAGE } from "src/services/state/uiState.store";
 import { IavRootStoreInterface } from "../services/stateStore.service";
+import { AtlasWorkerService } from "./atlasViewer.workerService.service";
 
 export const CM_THRESHOLD = `0.05`
 export const CM_MATLAB_JET = `float r;if( x < 0.7 ){r = 4.0 * x - 1.5;} else {r = -4.0 * x + 4.5;}float g;if (x < 0.5) {g = 4.0 * x - 0.5;} else {g = -4.0 * x + 3.5;}float b;if (x < 0.3) {b = 4.0 * x + 0.5;} else {b = -4.0 * x + 2.5;}float a = 1.0;`
 export const GLSL_COLORMAP_JET = `void main(){float x = toNormalized(getDataValue());${CM_MATLAB_JET}if(x>${CM_THRESHOLD}){emitRGB(vec3(r,g,b));}else{emitTransparent();}}`
 
+const getUniqueId = () => Math.round(Math.random() * 1e16).toString(16)
+
 @Injectable({
   providedIn : 'root',
 })
@@ -69,10 +72,48 @@ export class AtlasViewerConstantsServices implements OnDestroy {
 
   public totalTemplates = null
 
+  private workerUpdateParcellation$ = fromEvent(this.workerService.worker, 'message').pipe(
+    filter((message: MessageEvent) => message && message.data && message.data.type === 'UPDATE_PARCELLATION_REGIONS'),
+    map(({ data }) => data)
+  )
+
+  private processTemplate = template => forkJoin(
+    ...template.parcellations.map(parcellation => {
+
+      const id = getUniqueId()
+
+      this.workerService.worker.postMessage({
+        type: 'PROPAGATE_PARC_REGION_ATTR',
+        parcellation,
+        inheritAttrsOpts: {
+          ngId: (parcellation as any ).ngId,
+          relatedAreas: [],
+          fullId: null
+        },
+        id
+      })
+
+      return this.workerUpdateParcellation$.pipe(
+        filter(({ id: returnedId }) => id === returnedId),
+        take(1),
+        map(({ parcellation }) => parcellation)
+      )
+    })
+  )
+
   public initFetchTemplate$ = this.http.get(`${this.backendUrl}templates`, { responseType: 'json' }).pipe(
     tap((arr: any[]) => this.totalTemplates = arr.length),
     switchMap((templates: string[]) => merge(
-      ...templates.map(this.fetchTemplate),
+      ...templates.map(templateName => this.fetchTemplate(templateName).pipe(
+        switchMap(template => this.processTemplate(template).pipe(
+          map(parcellations => {
+            return {
+              ...template,
+              parcellations
+            }
+          })
+        ))
+      )),
     )),
     catchError((err) => {
       this.log.warn(`fetching templates error`, err)
@@ -255,6 +296,7 @@ Send us an email: <a target = "_blank" href = "mailto:${this.supportEmailAddress
     private store$: Store<IavRootStoreInterface>,
     private http: HttpClient,
     private log: LoggingService,
+    private workerService: AtlasWorkerService
   ) {
 
     this.darktheme$ = this.store$.pipe(
diff --git a/src/res/ext/MNI152.json b/src/res/ext/MNI152.json
index 315b9cf10744b9ce868fcd00e0630f9062272ccc..cc88e19c20b47c922116ffdb97b56756cd6b8f91 100644
--- a/src/res/ext/MNI152.json
+++ b/src/res/ext/MNI152.json
@@ -9,14 +9,18 @@
     {
       "name": "JuBrain Cytoarchitectonic Atlas",
       "ngId": "jubrain mni152 v18 left",
-      "auxillaryMeshIndices": [ 65535 ],
+      "auxillaryMeshIndices": [
+        65535
+      ],
       "hasAdditionalViewMode": [
         "connectivity"
       ],
-      "originDatasets":[{
-        "kgSchema": "minds/core/dataset/v1.0.0",
-        "kgId": "4ac9f0bc-560d-47e0-8916-7b24da9bb0ce"
-      }],
+      "originDatasets": [
+        {
+          "kgSchema": "minds/core/dataset/v1.0.0",
+          "kgId": "4ac9f0bc-560d-47e0-8916-7b24da9bb0ce"
+        }
+      ],
       "properties": {
         "version": "1.0",
         "description": "This dataset contains the whole-brain parcellation of the JuBrain Cytoarchitectonic Atlas (Amunts and Zilles, 2015) in the MNI Colin 27 as well as the MNI ICBM 152 2009c nonlinear asymmetric reference space. The parcellation is derived from the individual probability maps (PMs) of the cytoarchitectonic regions released in the JuBrain Atlas, that are further combined into a Maximum Probability Map (MPM). The MPM is calculated by considering for each voxel the probability of all cytoarchitectonic areas released in the atlas, and determining the most probable assignment (Eickhoff 2005). Note that methodological improvements and integration of new brain structures may lead to small deviations in earlier released datasets.",
@@ -3476,7 +3480,7 @@
                       "rgb": null,
                       "children": [
                         {
-                          "name": "Area 6d1 (PreG)",
+                          "name": "Area 6d1 (PreCG)",
                           "arealabel": "Area-6d1",
                           "status": "publicDOI",
                           "labelIndex": null,
@@ -3486,9 +3490,15 @@
                             33,
                             27
                           ],
+                          "fullId": {
+                            "kg": {
+                              "kgSchema": "minds/core/parcellationregion/v1.0.0",
+                              "kgId":"a802f3dc-b7e5-48b7-9845-832a6e6f9b1c"
+                            }
+                          },
                           "children": [
                             {
-                              "name": "Area 6d1 (PreG) - left hemisphere",
+                              "name": "Area 6d1 (PreCG) - left hemisphere",
                               "rgb": [
                                 45,
                                 33,
@@ -3504,7 +3514,7 @@
                               ]
                             },
                             {
-                              "name": "Area 6d1 (PreG) - right hemisphere",
+                              "name": "Area 6d1 (PreCG) - right hemisphere",
                               "rgb": [
                                 45,
                                 33,
@@ -3522,7 +3532,7 @@
                           ]
                         },
                         {
-                          "name": "Area 6d2 (PreG)",
+                          "name": "Area 6d2 (PreCG)",
                           "arealabel": "Area-6d2",
                           "status": "publicDOI",
                           "labelIndex": null,
@@ -3532,9 +3542,15 @@
                             151,
                             180
                           ],
+                          "fullId": {
+                            "kg": {
+                              "kgSchema": "minds/core/parcellationregion/v1.0.0",
+                              "kgId":"963c5281-67df-4d41-9b91-60b31cf150c0"
+                            }
+                          },
                           "children": [
                             {
-                              "name": "Area 6d2 (PreG) - left hemisphere",
+                              "name": "Area 6d2 (PreCG) - left hemisphere",
                               "rgb": [
                                 170,
                                 151,
@@ -3550,7 +3566,7 @@
                               ]
                             },
                             {
-                              "name": "Area 6d2 (PreG) - right hemisphere",
+                              "name": "Area 6d2 (PreCG) - right hemisphere",
                               "rgb": [
                                 170,
                                 151,
@@ -6589,97 +6605,145 @@
           "name": "Arcuate - Left",
           "children": [],
           "labelIndex": "1",
-          "relatedAreas": [
-            "Direct segment of the left arcuate fasciculus"
-          ]
+          "relatedAreas": [],
+          "fullId": {
+            "kg": {
+              "kgSchema": "minds/core/parcellationregion/v1.0.0",
+              "kgId": "7de080e0-fa5e-492f-9cbc-a4d7e498b1d5"
+            }
+          }
         },
         {
           "name": "Arcuate - Right",
           "children": [],
           "labelIndex": "31",
-          "relatedAreas": [
-            "Direct segment of the right arcuate fasciculus"
-          ]
+          "relatedAreas": [],
+          "fullId": {
+            "kg": {
+              "kgSchema": "minds/core/parcellationregion/v1.0.0",
+              "kgId": "17cbf31c-f68b-4753-9014-44aa38e1cdcf"
+            }
+          }
         },
         {
           "name": "Arcuate_Anterior - Left",
           "children": [],
           "labelIndex": "2",
-          "relatedAreas": [
-            "Anterior segment of the left arcuate fasciculus"
-          ]
+          "relatedAreas": [],
+          "fullId": {
+            "kg": {
+              "kgSchema": "minds/core/parcellationregion/v1.0.0",
+              "kgId": "1ed86a08-d720-427c-9796-ade24e34a36b"
+            }
+          }
         },
         {
           "name": "Arcuate_Anterior - Right",
           "children": [],
           "labelIndex": "32",
-          "relatedAreas": [
-            "Anterior segment of the right arcuate fasciculus"
-          ]
+          "relatedAreas": [],
+          "fullId": {
+            "kg": {
+              "kgSchema": "minds/core/parcellationregion/v1.0.0",
+              "kgId": "9f625fad-9329-4824-8751-8b27dc197d3e"
+            }
+          }
         },
         {
           "name": "Arcuate_Posterior - Left",
           "children": [],
           "labelIndex": "3",
-          "relatedAreas": [
-            "Posterior segment of the left arcuate fasciculus"
-          ]
+          "relatedAreas": [],
+          "fullId": {
+            "kg": {
+              "kgSchema": "minds/core/parcellationregion/v1.0.0",
+              "kgId": "f13ba46b-09ad-48bd-9301-282b0ee74d8d"
+            }
+          }
         },
         {
           "name": "Arcuate_Posterior - Right",
           "children": [],
           "labelIndex": "33",
-          "relatedAreas": [
-            "Posterior segment of the right arcuate fasciculus"
-          ]
+          "relatedAreas": [],
+          "fullId": {
+            "kg": {
+              "kgSchema": "minds/core/parcellationregion/v1.0.0",
+              "kgId": "2a6ea612-46c1-4a0f-a6f4-5ffc7ff09548"
+            }
+          }
         },
         {
           "name": "Cingulum_Long - Left",
           "children": [],
           "labelIndex": "4",
-          "relatedAreas": [
-            "Left long cingulate fibres"
-          ]
+          "relatedAreas": [],
+          "fullId": {
+            "kg": {
+              "kgSchema": "minds/core/parcellationregion/v1.0.0",
+              "kgId": "6fa27cc1-2efe-4fd3-83d7-973667a0b925"
+            }
+          }
         },
         {
           "name": "Cingulum_Long - Right",
           "children": [],
           "labelIndex": "34",
-          "relatedAreas": [
-            "Right long cingulate fibres"
-          ]
+          "relatedAreas": [],
+          "fullId": {
+            "kg": {
+              "kgSchema": "minds/core/parcellationregion/v1.0.0",
+              "kgId": "f5ae1188-8a10-4e17-9fa9-47b1dc4e50cd"
+            }
+          }
         },
         {
           "name": "Cingulum_Short - Left",
           "children": [],
           "labelIndex": "5",
-          "relatedAreas": [
-            "Left short cingulate fibres"
-          ]
+          "relatedAreas": [],
+          "fullId": {
+            "kg": {
+              "kgSchema": "minds/core/parcellationregion/v1.0.0",
+              "kgId": "882d13c0-ffe4-4fd8-95a1-ba714cd25fbb"
+            }
+          }
         },
         {
           "name": "Cingulum_Short - Right",
           "children": [],
           "labelIndex": "35",
-          "relatedAreas": [
-            "Right short cingulate fibres"
-          ]
+          "relatedAreas": [],
+          "fullId": {
+            "kg": {
+              "kgSchema": "minds/core/parcellationregion/v1.0.0",
+              "kgId": "4c5ecae5-17b4-4a65-8b66-c4d0882a2bca"
+            }
+          }
         },
         {
           "name": "Cingulum_Temporal - Left",
           "children": [],
           "labelIndex": "6",
-          "relatedAreas": [
-            "Left temporal cingulate fibres"
-          ]
+          "relatedAreas": [],
+          "fullId": {
+            "kg": {
+              "kgSchema": "minds/core/parcellationregion/v1.0.0",
+              "kgId": "2c71b329-5a32-4ba0-aacb-0fac99c46aca"
+            }
+          }
         },
         {
           "name": "Cingulum_Temporal - Right",
           "children": [],
           "labelIndex": "36",
-          "relatedAreas": [
-            "Right temporal cingulate fibres"
-          ]
+          "relatedAreas": [],
+          "fullId": {
+            "kg": {
+              "kgSchema": "minds/core/parcellationregion/v1.0.0",
+              "kgId": "7e965e21-1d9b-4b8d-b77d-4a7ca17603e6"
+            }
+          }
         },
         {
           "name": "CorpusCallosum_Body",
@@ -6705,17 +6769,25 @@
           "name": "CorticoSpinalTract - Left",
           "children": [],
           "labelIndex": "11",
-          "relatedAreas": [
-            "Left corticospinal tract"
-          ]
+          "relatedAreas": [],
+          "fullId": {
+            "kg": {
+              "kgSchema": "minds/core/parcellationregion/v1.0.0",
+              "kgId": "afbb2642-5e90-412f-9847-3d7a831f8f07"
+            }
+          }
         },
         {
           "name": "CorticoSpinalTract - Right",
           "children": [],
           "labelIndex": "41",
-          "relatedAreas": [
-            "Right corticospinal tract"
-          ]
+          "relatedAreas": [],
+          "fullId": {
+            "kg": {
+              "kgSchema": "minds/core/parcellationregion/v1.0.0",
+              "kgId": "2f398c6e-6264-4615-8a28-18b3573d0732"
+            }
+          }
         },
         {
           "name": "ExternalCapsule - Left",
@@ -6731,49 +6803,73 @@
           "name": "Fornix - Left",
           "children": [],
           "labelIndex": "13",
-          "relatedAreas": [
-            "Left fornix"
-          ]
+          "relatedAreas": [],
+          "fullId": {
+            "kg": {
+              "kgSchema": "minds/core/parcellationregion/v1.0.0",
+              "kgId": "c8d1e4a0-d0c2-4101-a971-3ffb1ba65ef8"
+            }
+          }
         },
         {
           "name": "Fornix - Right",
           "children": [],
           "labelIndex": "43",
-          "relatedAreas": [
-            "Right fornix"
-          ]
+          "relatedAreas": [],
+          "fullId": {
+            "kg": {
+              "kgSchema": "minds/core/parcellationregion/v1.0.0",
+              "kgId": "e7e8fd6d-aa43-452e-9fc3-635aa0333910"
+            }
+          }
         },
         {
           "name": "InferiorFrontoOccipital - Left",
           "children": [],
           "labelIndex": "14",
-          "relatedAreas": [
-            "Left inferior fronto-occipital fasciculus"
-          ]
+          "relatedAreas": [],
+          "fullId": {
+            "kg": {
+              "kgSchema": "minds/core/parcellationregion/v1.0.0",
+              "kgId": "524cd5a0-7066-4149-83b8-c0c4aaa12820"
+            }
+          }
         },
         {
           "name": "InferiorFrontoOccipital - Right",
           "children": [],
           "labelIndex": "44",
-          "relatedAreas": [
-            "Right inferior fronto-occipital fasciculus"
-          ]
+          "relatedAreas": [],
+          "fullId": {
+            "kg": {
+              "kgSchema": "minds/core/parcellationregion/v1.0.0",
+              "kgId": "34e8f68d-0b00-4e9e-bd43-ccaf10deef6d"
+            }
+          }
         },
         {
           "name": "InferiorLongitudinal - Left",
           "children": [],
           "labelIndex": "15",
-          "relatedAreas": [
-            "Left inferior longitudinal fasciculus"
-          ]
+          "relatedAreas": [],
+          "fullId": {
+            "kg": {
+              "kgSchema": "minds/core/parcellationregion/v1.0.0",
+              "kgId": "d3a458e1-6dbf-418d-bb52-c0b0c6acb920"
+            }
+          }
         },
         {
           "name": "InferiorLongitudinal - Right",
           "children": [],
           "labelIndex": "45",
-          "relatedAreas": [
-            "Right inferior longitudinal fasciculus"
-          ]
+          "relatedAreas": [],
+          "fullId": {
+            "kg": {
+              "kgSchema": "minds/core/parcellationregion/v1.0.0",
+              "kgId": "25326bc6-2b87-4483-9738-89ca249faccd"
+            }
+          }
         },
         {
           "name": "InferiorLongitudinal_Lateral - Left",
@@ -6829,17 +6925,25 @@
           "name": "Uncinate - Left",
           "children": [],
           "labelIndex": "21",
-          "relatedAreas": [
-            "Left uncinate fasciculus"
-          ]
+          "relatedAreas": [],
+          "fullId": {
+            "kg": {
+              "kgSchema": "minds/core/parcellationregion/v1.0.0",
+              "kgId": "f36707b5-d4f3-480b-a1c9-651bf8cc49d5"
+            }
+          }
         },
         {
           "name": "Uncinate - Right",
           "children": [],
           "labelIndex": "51",
-          "relatedAreas": [
-            "Right uncinate fasciculus"
-          ]
+          "relatedAreas": [],
+          "fullId": {
+            "kg": {
+              "kgSchema": "minds/core/parcellationregion/v1.0.0",
+              "kgId": "84ea1a64-03a6-4a7e-9f64-a3d2127ebf3f"
+            }
+          }
         }
       ]
     },
diff --git a/src/res/ext/bigbrain.json b/src/res/ext/bigbrain.json
index 601642cbacac7f21583452163add21ed3a97f4b4..abff253c1bcfe71b4fc29561fb23804a84882302 100644
--- a/src/res/ext/bigbrain.json
+++ b/src/res/ext/bigbrain.json
@@ -52,7 +52,17 @@
                               "kgId": "13e21153-2ba8-4212-b172-8894f1012225"
                             }
                           },
-                          "relatedAreas": []
+                          "relatedAreas": [
+                            {
+                              "name": "Area Te1",
+                              "fullId": {
+                                "kg": {
+                                  "kgSchema": "minds/core/parcellationregion/v1.0.0",
+                                  "kgId": "f424643e-9baf-4c50-9417-db1ac33dcd3e"
+                                }
+                              }
+                            }
+                          ]
                         },
                         {
                           "name": "Area TE 1.1 (HESCHL)",
@@ -200,8 +210,7 @@
                               "kgSchema": "minds/core/parcellationregion/v1.0.0",
                               "kgId": "a802f3dc-b7e5-48b7-9845-832a6e6f9b1c"
                             }
-                          },
-                          "relatedAreas": []
+                          }
                         },
                         {
                           "name": "Area 6d2 (PreCG)",
@@ -219,8 +228,7 @@
                               "kgSchema": "minds/core/parcellationregion/v1.0.0",
                               "kgId": "963c5281-67df-4d41-9b91-60b31cf150c0"
                             }
-                          },
-                          "relatedAreas": []
+                          }
                         },
                         {
                           "name": "Area 6ma (preSMA, mesial SFG)",
@@ -572,7 +580,17 @@
                               "kgId": "5151ab8f-d8cb-4e67-a449-afe2a41fb007"
                             }
                           },
-                          "relatedAreas": []
+                          "relatedAreas": [
+                            {
+                              "name": "Area hOc1",
+                              "fullId": {
+                                "kg": {
+                                  "kgSchema": "minds/core/parcellationregion/v1.0.0",
+                                  "kgId": "b851eb9d-9502-45e9-8dd8-2861f0e6da3f"
+                                }
+                              }
+                            }
+                          ]
                         },
                         {
                           "name": "Area hOc2 (V2, 18)",
diff --git a/src/services/effect/effect.ts b/src/services/effect/effect.ts
index f6565910f7d9da8e9949fc698065bd0971d4e4b6..a1ade573150dc87aa589e1d5a7d867cc0060be69 100644
--- a/src/services/effect/effect.ts
+++ b/src/services/effect/effect.ts
@@ -1,11 +1,10 @@
 import { Injectable, OnDestroy } from "@angular/core";
 import { Actions, Effect, ofType } from "@ngrx/effects";
 import { select, Store } from "@ngrx/store";
-import { fromEvent, merge, Observable, Subscription } from "rxjs";
-import { filter, map, shareReplay, switchMap, take, withLatestFrom, startWith, tap, distinctUntilChanged, mapTo } from "rxjs/operators";
-import { worker } from 'src/atlasViewer/atlasViewer.workerService.service'
+import { merge, Observable, Subscription } from "rxjs";
+import { filter, map, shareReplay, switchMap, take, withLatestFrom } from "rxjs/operators";
 import { LoggingService } from "../logging.service";
-import { ADD_TO_REGIONS_SELECTION_WITH_IDS, DESELECT_REGIONS, NEWVIEWER, SELECT_PARCELLATION, SELECT_REGIONS, SELECT_REGIONS_WITH_ID, UPDATE_PARCELLATION } from "../state/viewerState.store";
+import { ADD_TO_REGIONS_SELECTION_WITH_IDS, DESELECT_REGIONS, NEWVIEWER, SELECT_PARCELLATION, SELECT_REGIONS, SELECT_REGIONS_WITH_ID } from "../state/viewerState.store";
 import { generateLabelIndexId, getNgIdLabelIndexFromId, IavRootStoreInterface, recursiveFindRegionWithLabelIndexId, getMultiNgIdsRegionsLabelIndexMap, GENERAL_ACTION_TYPES } from '../stateStore.service';
 
 @Injectable({
@@ -18,19 +17,6 @@ export class UseEffects implements OnDestroy {
     private store$: Store<IavRootStoreInterface>,
     private log: LoggingService,
   ) {
-    this.subscriptions.push(
-      this.newParcellationSelected$.subscribe(parcellation => {
-        worker.postMessage({
-          type: `PROPAGATE_PARC_REGION_ATTR`,
-          parcellation,
-          inheritAttrsOpts: {
-            ngId: (parcellation as any ).ngId,
-            relatedAreas: []
-          }
-        })
-      }),
-    )
-
     this.regionsSelected$ = this.store$.pipe(
       select('viewerState'),
       select('regionsSelected'),
@@ -89,19 +75,6 @@ export class UseEffects implements OnDestroy {
         }
       }),
     )
-
-    this.updateSelectedRegion$ = this.actions$.pipe(
-      ofType(UPDATE_PARCELLATION),
-      withLatestFrom(this.regionsSelected$),
-      map(([{ updatedParcellation }, regionsSelected]) => {
-        const map = getMultiNgIdsRegionsLabelIndexMap(updatedParcellation)
-        const newRS = regionsSelected.map(({ ngId, labelIndex }) => map.get(ngId).get(labelIndex))
-        return {
-          type: SELECT_REGIONS,
-          selectRegions: newRS
-        }
-      })
-    )
   }
 
   private regionsSelected$: Observable<any[]>
@@ -149,9 +122,6 @@ export class UseEffects implements OnDestroy {
     shareReplay(1),
   )
 
-  @Effect()
-  public updateSelectedRegion$: Observable<any>
-
   @Effect()
   public onDeselectRegions: Observable<any>
 
@@ -237,29 +207,6 @@ export class UseEffects implements OnDestroy {
       selectRegions: [],
     })),
   )
-
-  /**
-   * calculating propagating ngId from worker thread
-   */
-  @Effect()
-  public updateParcellation$ = fromEvent(worker, 'message').pipe(
-    filter((message: MessageEvent) => message && message.data && message.data.type === 'UPDATE_PARCELLATION_REGIONS'),
-    map(({data}) => data.parcellation),
-    withLatestFrom(this.newParcellationSelected$),
-    filter(([ propagatedP, selectedP ]: [any, any]) => {
-      /**
-       * TODO
-       * use id
-       * but jubrain may have same id for different template spaces
-       */
-      return propagatedP.name === selectedP.name
-    }),
-    map(([ propagatedP, _ ]) => propagatedP),
-    map(parcellation => ({
-      type: UPDATE_PARCELLATION,
-      updatedParcellation: parcellation,
-    })),
-  )
 }
 
 export const getGetRegionFromLabelIndexId = ({ parcellation }) => {
diff --git a/src/services/state/viewerState.store.ts b/src/services/state/viewerState.store.ts
index 606ac579f63d2866c6b7d9779e4ec78726b773e7..45f6313d5ab9ddfe3657715f6cbf7da7801aebae 100644
--- a/src/services/state/viewerState.store.ts
+++ b/src/services/state/viewerState.store.ts
@@ -88,15 +88,10 @@ export const getStateStore = ({ state = defaultState } = {}) => (prevState: Part
   case NEWVIEWER: {
 
     const { selectParcellation: parcellation } = action
-    // const parcellation = propagateNgId( selectParcellation ): parcellation
-    const { regions, ...parcellationWORegions } = parcellation
     return {
       ...prevState,
       templateSelected : action.selectTemplate,
-      parcellationSelected : {
-        ...parcellationWORegions,
-        regions: null,
-      },
+      parcellationSelected : parcellation,
       // taken care of by effect.ts
       // regionsSelected : [],
       landmarksSelected : [],
@@ -117,25 +112,14 @@ export const getStateStore = ({ state = defaultState } = {}) => (prevState: Part
     }
   }
   case SELECT_PARCELLATION : {
-    const { selectParcellation: sParcellation } = action
-    const { regions, ...sParcellationWORegions } = sParcellation
+    const { selectParcellation } = action
     return {
       ...prevState,
-      parcellationSelected: sParcellationWORegions,
+      parcellationSelected: selectParcellation,
       // taken care of by effect.ts
       // regionsSelected: []
     }
   }
-  case UPDATE_PARCELLATION: {
-    const { updatedParcellation } = action
-    return {
-      ...prevState,
-      parcellationSelected: {
-        ...updatedParcellation,
-        updated: true,
-      },
-    }
-  }
   case SELECT_REGIONS: {
     const { selectRegions } = action
     return {
@@ -225,7 +209,6 @@ export const FETCHED_TEMPLATE = 'FETCHED_TEMPLATE'
 export const CHANGE_NAVIGATION = 'CHANGE_NAVIGATION'
 
 export const SELECT_PARCELLATION = `SELECT_PARCELLATION`
-export const UPDATE_PARCELLATION = `UPDATE_PARCELLATION`
 
 export const DESELECT_REGIONS = `DESELECT_REGIONS`
 export const SELECT_REGIONS = `SELECT_REGIONS`
diff --git a/src/services/stateStore.service.ts b/src/services/stateStore.service.ts
index dadde7dc67e49a1d0d041f611a953aa825f432cc..654e6f4395fa22e84724594b9788d3e640b096e2 100644
--- a/src/services/stateStore.service.ts
+++ b/src/services/stateStore.service.ts
@@ -216,8 +216,3 @@ export const defaultRootState: IavRootStoreInterface = {
   viewerConfigState: viewerConfigDefaultState,
   viewerState: viewerDefaultState,
 }
-
-// export const getInitialState = (): IavRootStoreInterface => {
-//   const search = new URLSearchParams( window.location.search )
-//   cvtSearchParamToState(search, defaultRootState)
-// }
diff --git a/src/ui/nehubaContainer/nehubaViewer/nehubaViewer.component.ts b/src/ui/nehubaContainer/nehubaViewer/nehubaViewer.component.ts
index ad488c9ea3fa810464f6ed72d0c6f3c57f0a3f65..1cb264cde6a2c183fdf807ac0f26a5053dce9b81 100644
--- a/src/ui/nehubaContainer/nehubaViewer/nehubaViewer.component.ts
+++ b/src/ui/nehubaContainer/nehubaViewer/nehubaViewer.component.ts
@@ -1,5 +1,5 @@
 import { Component, ElementRef, EventEmitter, NgZone, OnDestroy, OnInit, Output, Renderer2 } from "@angular/core";
-import { fromEvent, Subject, Subscription } from 'rxjs'
+import { fromEvent, Subscription, ReplaySubject } from 'rxjs'
 import { pipeFromArray } from "rxjs/internal/util/pipe";
 import { debounceTime, filter, map, scan } from "rxjs/operators";
 import { AtlasViewerConstantsServices } from "src/atlasViewer/atlasViewer.constantService.service";
@@ -109,6 +109,11 @@ export class NehubaViewerUnit implements OnInit, OnDestroy {
 
   public ondestroySubscriptions: Subscription[] = []
 
+  private createNehubaPromiseRs: Function
+  private createNehubaPromise = new Promise(rs => {
+    this.createNehubaPromiseRs = rs
+  })
+
   constructor(
     private rd: Renderer2,
     public elementRef: ElementRef,
@@ -143,6 +148,10 @@ export class NehubaViewerUnit implements OnInit, OnDestroy {
         this.layersChangedHandler = this.nehubaViewer.ngviewer.layerManager.layersChanged.add(() => this.layersChanged.emit(null))
         this.nehubaViewer.ngviewer.registerDisposer(this.layersChangedHandler)
       })
+      .then(() => {
+        // all mutation to this.nehubaViewer should await createNehubaPromise
+        this.createNehubaPromiseRs()
+      })
       .catch(e => this.errorEmitter.emit(e))
 
     this.ondestroySubscriptions.push(
@@ -258,20 +267,16 @@ export class NehubaViewerUnit implements OnInit, OnDestroy {
   }
 
   set ngIds(val: string[]) {
-
-    if (this.nehubaViewer) {
-      this._ngIds.forEach(id => {
-        const oldlayer = this.nehubaViewer.ngviewer.layerManager.getLayerByName(id)
-        if (oldlayer) {oldlayer.setVisible(false) } else { this.log.warn('could not find old layer', id) }
+    this.createNehubaPromise
+      .then(() => {
+        this._ngIds.forEach(id => {
+          const oldlayer = this.nehubaViewer.ngviewer.layerManager.getLayerByName(id)
+          if (oldlayer) {oldlayer.setVisible(false) } else { this.log.warn('could not find old layer', id) }
+        })
+        this._ngIds = val
+        this.loadNewParcellation()
+        this.showAllSeg()
       })
-    }
-
-    this._ngIds = val
-
-    if (this.nehubaViewer) {
-      this.loadNewParcellation()
-      this.showAllSeg()
-    }
   }
 
   public spatialLandmarkSelectionChanged(labels: number[]) {
@@ -312,7 +317,7 @@ export class NehubaViewerUnit implements OnInit, OnDestroy {
     this._multiNgIdColorMap = val
   }
 
-  private loadMeshes$: Subject<{labelIndicies: number[], layer: { name: string }}> = new Subject()
+  private loadMeshes$: ReplaySubject<{labelIndicies: number[], layer: { name: string }}> = new ReplaySubject()
   private loadMeshes(labelIndicies: number[], { name }) {
     this.loadMeshes$.next({
       labelIndicies,
@@ -386,6 +391,7 @@ export class NehubaViewerUnit implements OnInit, OnDestroy {
     this.subscriptions.push(
       this.loadMeshes$.pipe(
         scan(scanFn, []),
+        debounceTime(100)
       ).subscribe(layersLabelIndex => {
         let totalMeshes = 0
         for (const layerLayerIndex of layersLabelIndex) {
@@ -708,7 +714,7 @@ export class NehubaViewerUnit implements OnInit, OnDestroy {
       this.setNavigationState(this.initNav)
     }
 
-    if (this.initRegions) {
+    if (this.initRegions && this.initRegions.length > 0) {
       this.hideAllSeg()
       this.showSegs(this.initRegions)
     }
diff --git a/src/ui/viewerStateController/regionSearch/regionSearch.component.ts b/src/ui/viewerStateController/regionSearch/regionSearch.component.ts
index a86f9f553a19e28fa83b014c8a5a72f3fe3444e7..a5c3b12a235d91ec21c7ec569b6ab5b1685e6c3d 100644
--- a/src/ui/viewerStateController/regionSearch/regionSearch.component.ts
+++ b/src/ui/viewerStateController/regionSearch/regionSearch.component.ts
@@ -12,7 +12,7 @@ import { VIEWERSTATE_CONTROLLER_ACTION_TYPES } from "../viewerState.base";
 import { LoggingService } from "src/services/logging.service";
 
 const filterRegionBasedOnText = searchTerm => region => region.name.toLowerCase().includes(searchTerm.toLowerCase())
-  || (region.relatedAreas && region.relatedAreas.some(relatedArea => relatedArea.name.toLowerCase().includes(searchTerm.toLowerCase())))
+  || (region.relatedAreas && region.relatedAreas.some(relatedArea => relatedArea.name && relatedArea.name.toLowerCase().includes(searchTerm.toLowerCase())))
 
 const compareFn = (it, item) => it.name === item.name
 
@@ -60,7 +60,7 @@ export class RegionTextSearchAutocomplete {
       map(parcellationSelected => {
         try {
           const returnArray = []
-          const ngIdMap = getMultiNgIdsRegionsLabelIndexMap(parcellationSelected, { ngId: 'root', relatedAreas: [] })
+          const ngIdMap = getMultiNgIdsRegionsLabelIndexMap(parcellationSelected, { ngId: 'root', relatedAreas: [], fullId: null })
           for (const [ngId, labelIndexMap] of ngIdMap) {
             for (const [labelIndex, region] of labelIndexMap) {
               returnArray.push({
diff --git a/src/ui/viewerStateController/viewerState.base.ts b/src/ui/viewerStateController/viewerState.base.ts
index be61afdff357ddf3c02af888ef5a881ad79b4fd3..db5527bbbd227f6fe0d3a1fae96ab65e095564e5 100644
--- a/src/ui/viewerStateController/viewerState.base.ts
+++ b/src/ui/viewerStateController/viewerState.base.ts
@@ -2,7 +2,7 @@ import { OnInit, TemplateRef, ViewChild } from "@angular/core";
 import { MatBottomSheet, MatBottomSheetRef, MatSelectChange } from "@angular/material";
 import { select, Store } from "@ngrx/store";
 import { Observable, Subscription } from "rxjs";
-import { distinctUntilChanged, filter, shareReplay } from "rxjs/operators";
+import { distinctUntilChanged, filter, shareReplay, tap } from "rxjs/operators";
 import { DialogService } from "src/services/dialogService.service";
 import { RegionSelection } from "src/services/state/userConfigState.store";
 import { IavRootStoreInterface, SELECT_REGIONS, USER_CONFIG_ACTION_TYPES } from "src/services/stateStore.service";
@@ -78,6 +78,7 @@ export class ViewerStateBase implements OnInit {
     this.availableTemplates$ = viewerState$.pipe(
       select('fetchedTemplates'),
       distinctUntilChanged(),
+      tap(() => console.log('available templates'))
     )
 
     this.availableParcellations$ = this.templateSelected$.pipe(
@@ -155,13 +156,7 @@ export class ViewerStateBase implements OnInit {
     })
   }
 
-  public displayActiveParcellation(parcellation: any) {
-    return `<div class="d-flex"><small>Parcellation</small> <small class = "flex-grow-1 mute-text">${parcellation ? '(' + parcellation.name + ')' : ''}</small> <span class = "fas fa-caret-down"></span></div>`
-  }
-
-  public displayActiveTemplate(template: any) {
-    return `<div class="d-flex"><small>Template</small> <small class = "flex-grow-1 mute-text">${template ? '(' + template.name + ')' : ''}</small> <span class = "fas fa-caret-down"></span></div>`
-  }
+  public trackByFn = ({ name }) => name
 
   public loadSelection(_event: MouseEvent) {
     this.focused = true
diff --git a/src/ui/viewerStateController/viewerStateCFull/viewerState.template.html b/src/ui/viewerStateController/viewerStateCFull/viewerState.template.html
index 5f72c5990590ccc7a949b14f8937a737b9b9fb3e..32675891bf3eb5ad67fefe2b83d80e78bf176157 100644
--- a/src/ui/viewerStateController/viewerStateCFull/viewerState.template.html
+++ b/src/ui/viewerStateController/viewerStateCFull/viewerState.template.html
@@ -14,7 +14,7 @@
           (selectionChange)="handleTemplateChange($event)"
           (openedChange)="focused = $event">
           <mat-option
-            *ngFor="let template of (availableTemplates$ | async)"
+            *ngFor="let template of (availableTemplates$ | async); trackBy: trackByFn"
             [value]="template.name">
             {{ template.name }}
           </mat-option>
diff --git a/src/util/worker.js b/src/util/worker.js
index 7d60b6c469e785db1147241ab018b1a13bf6dac0..a46c50fccc19223a9f2fadd1c317eddea9b2d141 100644
--- a/src/util/worker.js
+++ b/src/util/worker.js
@@ -258,7 +258,9 @@ const recursivePropagateAttri = (region, inheritAttrsOpts) => {
     returnRegion[attr] = returnRegion[attr] || inheritAttrsOpts[attr]
     newInhAttrsOpts[attr] = returnRegion[attr] || inheritAttrsOpts[attr]
   }
-  returnRegion.children = returnRegion.children.map(c => recursivePropagateAttri(c, newInhAttrsOpts))
+  returnRegion.children = returnRegion.children && Array.isArray(returnRegion.children)
+    ? returnRegion.children.map(c => recursivePropagateAttri(c, newInhAttrsOpts))
+    : null
   return returnRegion
 }
 
@@ -280,6 +282,7 @@ const processParcRegionAttr = (payload) => {
   const { parcellation, inheritAttrsOpts } = payload
   const p = propagateAttri(parcellation, inheritAttrsOpts)
   postMessage({
+    ...payload,
     type: 'UPDATE_PARCELLATION_REGIONS',
     parcellation: p
   })