diff --git a/src/components/components.module.ts b/src/components/components.module.ts
index d51928617d69ff3089cb7aa07dcfd7da2d37b0f0..e435687fd0541445a7989f8f87f1bb3eb392bae9 100644
--- a/src/components/components.module.ts
+++ b/src/components/components.module.ts
@@ -28,6 +28,7 @@ import { PillComponent } from './pill/pill.component';
 import { CommonModule } from '@angular/common';
 import { RadioList } from './radiolist/radiolist.component';
 import { AngularMaterialModule } from 'src/ui/sharedModules/angularMaterial.module';
+import { FilterCollapsePipe } from './flatTree/filterCollapse.pipe';
 
 
 @NgModule({
@@ -65,7 +66,8 @@ import { AngularMaterialModule } from 'src/ui/sharedModules/angularMaterial.modu
     HighlightPipe,
     FitlerRowsByVisibilityPipe,
     AppendSiblingFlagPipe,
-    ClusteringPipe
+    ClusteringPipe,
+    FilterCollapsePipe
   ],
   exports : [
     BrowserAnimationsModule,
diff --git a/src/components/flatTree/filterCollapse.pipe.ts b/src/components/flatTree/filterCollapse.pipe.ts
new file mode 100644
index 0000000000000000000000000000000000000000..00ce53d406e06c316d6b9027b5570f068578e69e
--- /dev/null
+++ b/src/components/flatTree/filterCollapse.pipe.ts
@@ -0,0 +1,28 @@
+import { PipeTransform, Pipe } from "@angular/core";
+
+@Pipe({
+  name: 'filterCollapsePipe'
+})
+
+export class FilterCollapsePipe implements PipeTransform{
+  public transform(array: any[], collapsedLevels: Set<string>, uncollapsedLevels: Set<string>, defaultCollapse: boolean ){
+    const isCollapsedById = (id) => {
+
+      return collapsedLevels.has(id) 
+      ? true
+      : uncollapsedLevels.has(id)
+        ? false
+        : !defaultCollapse
+    }
+    const returnArray =  array.filter(item => {
+      return !item.lvlId.split('_')
+        .filter((v,idx,arr) => idx < arr.length -1 )
+        .reduce((acc,curr) => acc
+          .concat(acc.length === 0 
+            ? curr 
+            : acc[acc.length -1].concat(`_${curr}`)), [])
+        .some(id => isCollapsedById(id))
+    })
+    return returnArray
+  }
+}
\ No newline at end of file
diff --git a/src/components/flatTree/flatTree.component.ts b/src/components/flatTree/flatTree.component.ts
index bf1efd663bf2bb3f9af5615fb5284057f341be7c..d6002b13089f56e10b96b5b49463b4b3e7694b68 100644
--- a/src/components/flatTree/flatTree.component.ts
+++ b/src/components/flatTree/flatTree.component.ts
@@ -43,9 +43,15 @@ export class FlatTreeComponent{
   uncollapsedLevels : Set<string> = new Set()
 
   toggleCollapse(flattenedItem:FlattenedTreeInterface){
-    this.isCollapsed(flattenedItem)
-      ? (this.collapsedLevels.delete(flattenedItem.lvlId), this.uncollapsedLevels.add(flattenedItem.lvlId))
-      : (this.collapsedLevels.add(flattenedItem.lvlId), this.uncollapsedLevels.delete(flattenedItem.lvlId))
+    if (this.isCollapsed(flattenedItem)) {
+      this.collapsedLevels.delete(flattenedItem.lvlId)
+      this.uncollapsedLevels.add(flattenedItem.lvlId)
+    } else {
+      this.collapsedLevels.add(flattenedItem.lvlId)
+      this.uncollapsedLevels.delete(flattenedItem.lvlId)
+    }
+    this.collapsedLevels = new Set(this.collapsedLevels)
+    this.uncollapsedLevels = new Set(this.uncollapsedLevels)
   }
 
   isCollapsed(flattenedItem:FlattenedTreeInterface):boolean{
diff --git a/src/components/flatTree/flatTree.template.html b/src/components/flatTree/flatTree.template.html
index 6340f50b7992ab68a9b01213699fb5cd2db666a5..3dc5601046cb636f23482dbe2025df86a6c7c4c1 100644
--- a/src/components/flatTree/flatTree.template.html
+++ b/src/components/flatTree/flatTree.template.html
@@ -4,13 +4,12 @@
   itemSize="15">
 
   <div
-    *cdkVirtualFor="let flattenedItem of (inputItem | flattenTreePipe : findChildren | filterRowsByVisbilityPipe : findChildren : searchFilter | appendSiblingFlagPipe )" 
+    *cdkVirtualFor="let flattenedItem of (inputItem | flattenTreePipe : findChildren | filterRowsByVisbilityPipe : findChildren : searchFilter | appendSiblingFlagPipe | filterCollapsePipe : collapsedLevels : uncollapsedLevels : childrenExpanded )" 
     [ngClass]="getClass(flattenedItem.flattenedTreeLevel)"
     class="text-nowrap"
     [attr.flattenedtreelevel]="flattenedItem.flattenedTreeLevel" 
     [attr.collapsed]="flattenedItem.collapsed ? flattenedItem.collapsed : false"
     [attr.lvlId]="flattenedItem.lvlId"
-    [hidden]="collapseRow(flattenedItem) "
     renderNode>
 
     <span class="padding-block-container">
diff --git a/src/ui/regionHierachy/regionHierarchy.component.ts b/src/ui/regionHierachy/regionHierarchy.component.ts
index c4b4a4951d83d5414602696297800046045cd5a9..f04dc7b1b501c71e5b5cc48ce5181cab4275e896 100644
--- a/src/ui/regionHierachy/regionHierarchy.component.ts
+++ b/src/ui/regionHierachy/regionHierarchy.component.ts
@@ -105,6 +105,8 @@ export class RegionHierarchy implements OnInit, AfterViewInit{
   }
 
   ngOnInit(){
+    this.displayTreeNode = getDisplayTreeNode(this.searchTerm, this.selectedRegions)
+    this.filterTreeBySearch = getFilterTreeBySearch(this.filterNameBySearchPipe, this.searchTerm)
 
     this.subscriptions.push(
       this.handleRegionTreeClickSubject.pipe(
@@ -118,6 +120,20 @@ export class RegionHierarchy implements OnInit, AfterViewInit{
   }
 
   ngAfterViewInit(){
+    /**
+     * TODO
+     * bandaid fix on
+     * when region search loses focus, the searchTerm is cleared,
+     * but hierarchy filter does not reset
+     */
+    this.subscriptions.push(
+      fromEvent(this.searchTermInput.nativeElement, 'focus').pipe(
+        
+      ).subscribe(() => {
+        this.displayTreeNode = getDisplayTreeNode(this.searchTerm, this.selectedRegions)
+        this.filterTreeBySearch = getFilterTreeBySearch(this.filterNameBySearchPipe, this.searchTerm)
+      })
+    )
     this.subscriptions.push(
       fromEvent(this.searchTermInput.nativeElement, 'input').pipe(
         debounceTime(200)