diff --git a/src/services/state/ngViewerState.store.ts b/src/services/state/ngViewerState.store.ts
index 016911efc30984b8d25284ac1c511c97d3c7ed51..289489d7e549bd4266aac0a57ffd67c877aa2804 100644
--- a/src/services/state/ngViewerState.store.ts
+++ b/src/services/state/ngViewerState.store.ts
@@ -30,6 +30,14 @@ const defaultState:NgViewerStateInterface = {
 
 export function ngViewerState(prevState:NgViewerStateInterface = defaultState, action:NgViewerAction):NgViewerStateInterface{
   switch(action.type){
+    case ACTION_TYPES.SET_PANEL_ORDER: {
+      const { payload } = action
+      const { panelOrder } = payload
+      return {
+        ...prevState,
+        panelOrder
+      }
+    }
     case ACTION_TYPES.SWITCH_PANEL_MODE: {
       const { payload } = action
       const { panelMode } = payload
@@ -113,7 +121,8 @@ interface NgLayerInterface{
 }
 
 const ACTION_TYPES = {
-  SWITCH_PANEL_MODE: 'SWITCH_PANEL_MODE'
+  SWITCH_PANEL_MODE: 'SWITCH_PANEL_MODE',
+  SET_PANEL_ORDER: 'SET_PANEL_ORDER'
 }
 
 export const SUPPORTED_PANEL_MODES = [
diff --git a/src/ui/config/config.component.ts b/src/ui/config/config.component.ts
index e60d64ae778cef8e473fce2dbee28e455d319175..1a0e15cdfed2280faed73006978c123df033e833 100644
--- a/src/ui/config/config.component.ts
+++ b/src/ui/config/config.component.ts
@@ -36,7 +36,9 @@ export class ConfigComponent implements OnInit, OnDestroy{
   public gpuMax : number = 1000
 
   public panelMode$: Observable<string>
-  public panelOrder$: Observable<[number, number, number, number]>
+  
+  private panelOrder: string
+  private panelOrder$: Observable<string>
   public panelTexts$: Observable<[string, string, string, string]>
 
   constructor(private store: Store<ViewerConfiguration>) {
@@ -60,16 +62,19 @@ export class ConfigComponent implements OnInit, OnDestroy{
 
     this.panelOrder$ = this.store.pipe(
       select('ngViewerState'),
-      select('panelOrder'),
-      map(string => string.split('').map(s => Number(s)))
+      select('panelOrder')
     )
     
     this.panelTexts$ = this.panelOrder$.pipe(
+      map(string => string.split('').map(s => Number(s))),
       map(arr => arr.map(idx => ROOT_TEXT_ORDER[idx]) as [string, string, string, string])
     )
   }
 
   ngOnInit(){
+    this.subscriptions.push(
+      this.panelOrder$.subscribe(panelOrder => this.panelOrder = panelOrder)
+    )
   }
 
   ngOnDestroy(){
@@ -104,10 +109,23 @@ export class ConfigComponent implements OnInit, OnDestroy{
   handleDrop(event:DragEvent){
     const droppedAttri = (event.target as HTMLElement).getAttribute('panel-order')
     const draggedAttri = event.dataTransfer.getData('text/plain')
-    console.log({droppedAttri, draggedAttri})
+    if (droppedAttri === draggedAttri) return
+    const idx1 = Number(droppedAttri)
+    const idx2 = Number(draggedAttri)
+    const arr = this.panelOrder.split('');
+
+    [arr[idx1], arr[idx2]] = [arr[idx2], arr[idx1]]
+    this.store.dispatch({
+      type: NG_VIEWER_ACTION_TYPES.SET_PANEL_ORDER,
+      payload: { panelOrder: arr.join('') }
+    })
+  }
+  handleDragOver(event:DragEvent){
+    event.preventDefault();
+    (event.target as HTMLElement).classList.add('onDragOver')
   }
-  handleDragOver(event){
-    event.preventDefault()
+  handleDragLeave(event:DragEvent){
+    (event.target as HTMLElement).classList.remove('onDragOver')
   }
   handleDragStart(event:DragEvent){
     const attri = (event.target as HTMLElement).getAttribute('panel-order')
diff --git a/src/ui/config/config.style.css b/src/ui/config/config.style.css
index 6ba7757691d6d946412acae13f13b1285f8f33c9..907391412ce3868cca03f2b38599f2f551238085 100644
--- a/src/ui/config/config.style.css
+++ b/src/ui/config/config.style.css
@@ -1,4 +1,14 @@
-[cell-i],[cell-ii],[cell-iii],[cell-iv]
+.config-transition
+{
+  transition: background-color ease-in-out 200ms;
+}
+
+.config-transition:hover
 {
   background-color: rgba(128,128,128,0.1);
+}
+
+.onDragOver
+{
+  background-color: rgba(128,128,128,0.2);
 }
\ No newline at end of file
diff --git a/src/ui/config/config.template.html b/src/ui/config/config.template.html
index 6d34bc0da7a2c7c58e2382d57b15b2386e2092f4..e34dc8b62bb2fde4d9347e52f35060b98ef61b65 100644
--- a/src/ui/config/config.template.html
+++ b/src/ui/config/config.template.html
@@ -11,10 +11,14 @@
           matRipple
           (dragstart)="handleDragStart($event)"
           (dragover)="handleDragOver($event)"
+          (dragleave)="handleDragLeave($event)"
           (drop)="handleDrop($event)"
-          class="w-100 h-100"
+          class="w-100 h-100 config-transition"
           cell-i>
-          <div [attr.panel-order]="0" class="w-100 h-100 d-flex align-items-center justify-content-center border" draggable="true">
+          <div
+            [attr.panel-order]="0"
+            class="config-transition w-100 h-100 d-flex align-items-center justify-content-center border"
+            draggable="true">
             {{ (panelTexts$ | async)[0] }}
           </div>
         </div>
@@ -22,10 +26,14 @@
           matRipple
           (dragstart)="handleDragStart($event)"
           (dragover)="handleDragOver($event)"
+          (dragleave)="handleDragLeave($event)"
           (drop)="handleDrop($event)"
-          class="w-100 h-100"
+          class="w-100 h-100 config-transition"
           cell-ii>
-          <div [attr.panel-order]="1" class="w-100 h-100 d-flex align-items-center justify-content-center border" draggable="true">
+          <div
+            [attr.panel-order]="1"
+            class="config-transition w-100 h-100 d-flex align-items-center justify-content-center border"
+            draggable="true">
             {{ (panelTexts$ | async)[1] }}
           </div>
         </div>
@@ -33,10 +41,14 @@
           matRipple
           (dragstart)="handleDragStart($event)"
           (dragover)="handleDragOver($event)"
+          (dragleave)="handleDragLeave($event)"
           (drop)="handleDrop($event)"
-          class="w-100 h-100"
+          class="w-100 h-100 config-transition"
           cell-iii>
-          <div [attr.panel-order]="2" class="w-100 h-100 d-flex align-items-center justify-content-center border" draggable="true">
+          <div
+            [attr.panel-order]="2"
+            class="config-transition w-100 h-100 d-flex align-items-center justify-content-center border"
+            draggable="true">
             {{ (panelTexts$ | async)[2] }}
           </div>
         </div>
@@ -44,10 +56,14 @@
           matRipple
           (dragstart)="handleDragStart($event)"
           (dragover)="handleDragOver($event)"
+          (dragleave)="handleDragLeave($event)"
           (drop)="handleDrop($event)"
-          class="w-100 h-100"
+          class="w-100 h-100 config-transition"
           cell-iv>
-          <div [attr.panel-order]="3" class="w-100 h-100 d-flex align-items-center justify-content-center border" draggable="true">
+          <div
+            [attr.panel-order]="3"
+            class="config-transition w-100 h-100 d-flex align-items-center justify-content-center border"
+            draggable="true">
             {{ (panelTexts$ | async)[3] }}
           </div>
         </div>
@@ -55,26 +71,194 @@
       <layout-horizontal-one-three
         *ngSwitchCase="supportedPanelModes[1]"
         class="d-block w-20em h-15em">
-        <div cell-i>{{ (panelTexts$ | async)[0] }}</div>
-        <div cell-ii>{{ (panelTexts$ | async)[1] }}</div>
-        <div cell-iii>{{ (panelTexts$ | async)[2] }}</div>
-        <div cell-iv>{{ (panelTexts$ | async)[3] }}</div>
+        <div
+          matRipple
+          (dragstart)="handleDragStart($event)"
+          (dragover)="handleDragOver($event)"
+          (dragleave)="handleDragLeave($event)"
+          (drop)="handleDrop($event)"
+          class="w-100 h-100 config-transition"
+          cell-i>
+          <div
+            [attr.panel-order]="0"
+            class="config-transition w-100 h-100 d-flex align-items-center justify-content-center border"
+            draggable="true">
+            {{ (panelTexts$ | async)[0] }}
+          </div>
+        </div>
+        <div
+          matRipple
+          (dragstart)="handleDragStart($event)"
+          (dragover)="handleDragOver($event)"
+          (dragleave)="handleDragLeave($event)"
+          (drop)="handleDrop($event)"
+          class="w-100 h-100 config-transition"
+          cell-ii>
+          <div
+            [attr.panel-order]="1"
+            class="config-transition w-100 h-100 d-flex align-items-center justify-content-center border"
+            draggable="true">
+            {{ (panelTexts$ | async)[1] }}
+          </div>
+        </div>
+        <div
+          matRipple
+          (dragstart)="handleDragStart($event)"
+          (dragover)="handleDragOver($event)"
+          (dragleave)="handleDragLeave($event)"
+          (drop)="handleDrop($event)"
+          class="w-100 h-100 config-transition"
+          cell-iii>
+          <div
+            [attr.panel-order]="2"
+            class="config-transition w-100 h-100 d-flex align-items-center justify-content-center border"
+            draggable="true">
+            {{ (panelTexts$ | async)[2] }}
+          </div>
+        </div>
+        <div
+          matRipple
+          (dragstart)="handleDragStart($event)"
+          (dragover)="handleDragOver($event)"
+          (dragleave)="handleDragLeave($event)"
+          (drop)="handleDrop($event)"
+          class="w-100 h-100 config-transition"
+          cell-iv>
+          <div
+            [attr.panel-order]="3"
+            class="config-transition w-100 h-100 d-flex align-items-center justify-content-center border"
+            draggable="true">
+            {{ (panelTexts$ | async)[3] }}
+          </div>
+        </div>
       </layout-horizontal-one-three>
       <layout-vertical-one-three
         *ngSwitchCase="supportedPanelModes[2]"
         class="d-block w-20em h-15em">
-        <div cell-i>{{ (panelTexts$ | async)[0] }}</div>
-        <div cell-ii>{{ (panelTexts$ | async)[1] }}</div>
-        <div cell-iii>{{ (panelTexts$ | async)[2] }}</div>
-        <div cell-iv>{{ (panelTexts$ | async)[3] }}</div>
+        <div
+          matRipple
+          (dragstart)="handleDragStart($event)"
+          (dragover)="handleDragOver($event)"
+          (dragleave)="handleDragLeave($event)"
+          (drop)="handleDrop($event)"
+          class="w-100 h-100 config-transition"
+          cell-i>
+          <div
+            [attr.panel-order]="0"
+            class="config-transition w-100 h-100 d-flex align-items-center justify-content-center border"
+            draggable="true">
+            {{ (panelTexts$ | async)[0] }}
+          </div>
+        </div>
+        <div
+          matRipple
+          (dragstart)="handleDragStart($event)"
+          (dragover)="handleDragOver($event)"
+          (dragleave)="handleDragLeave($event)"
+          (drop)="handleDrop($event)"
+          class="w-100 h-100 config-transition"
+          cell-ii>
+          <div
+            [attr.panel-order]="1"
+            class="config-transition w-100 h-100 d-flex align-items-center justify-content-center border"
+            draggable="true">
+            {{ (panelTexts$ | async)[1] }}
+          </div>
+        </div>
+        <div
+          matRipple
+          (dragstart)="handleDragStart($event)"
+          (dragover)="handleDragOver($event)"
+          (dragleave)="handleDragLeave($event)"
+          (drop)="handleDrop($event)"
+          class="w-100 h-100 config-transition"
+          cell-iii>
+          <div
+            [attr.panel-order]="2"
+            class="config-transition w-100 h-100 d-flex align-items-center justify-content-center border"
+            draggable="true">
+            {{ (panelTexts$ | async)[2] }}
+          </div>
+        </div>
+        <div
+          matRipple
+          (dragstart)="handleDragStart($event)"
+          (dragover)="handleDragOver($event)"
+          (dragleave)="handleDragLeave($event)"
+          (drop)="handleDrop($event)"
+          class="w-100 h-100 config-transition"
+          cell-iv>
+          <div
+            [attr.panel-order]="3"
+            class="config-transition w-100 h-100 d-flex align-items-center justify-content-center border"
+            draggable="true">
+            {{ (panelTexts$ | async)[3] }}
+          </div>
+        </div>
       </layout-vertical-one-three>
       <layout-single-panel
         *ngSwitchCase="supportedPanelModes[3]"
         class="d-block w-20em h-15em">
-        <div cell-i>{{ (panelTexts$ | async)[0] }}</div>
-        <div cell-ii>{{ (panelTexts$ | async)[1] }}</div>
-        <div cell-iii>{{ (panelTexts$ | async)[2] }}</div>
-        <div cell-iv>{{ (panelTexts$ | async)[3] }}</div>
+        <div
+          matRipple
+          (dragstart)="handleDragStart($event)"
+          (dragover)="handleDragOver($event)"
+          (dragleave)="handleDragLeave($event)"
+          (drop)="handleDrop($event)"
+          class="w-100 h-100 config-transition"
+          cell-i>
+          <div
+            [attr.panel-order]="0"
+            class="config-transition w-100 h-100 d-flex align-items-center justify-content-center border"
+            draggable="true">
+            {{ (panelTexts$ | async)[0] }}
+          </div>
+        </div>
+        <div
+          matRipple
+          (dragstart)="handleDragStart($event)"
+          (dragover)="handleDragOver($event)"
+          (dragleave)="handleDragLeave($event)"
+          (drop)="handleDrop($event)"
+          class="w-100 h-100 config-transition"
+          cell-ii>
+          <div
+            [attr.panel-order]="1"
+            class="config-transition w-100 h-100 d-flex align-items-center justify-content-center border"
+            draggable="true">
+            {{ (panelTexts$ | async)[1] }}
+          </div>
+        </div>
+        <div
+          matRipple
+          (dragstart)="handleDragStart($event)"
+          (dragover)="handleDragOver($event)"
+          (dragleave)="handleDragLeave($event)"
+          (drop)="handleDrop($event)"
+          class="w-100 h-100 config-transition"
+          cell-iii>
+          <div
+            [attr.panel-order]="2"
+            class="config-transition w-100 h-100 d-flex align-items-center justify-content-center border"
+            draggable="true">
+            {{ (panelTexts$ | async)[2] }}
+          </div>
+        </div>
+        <div
+          matRipple
+          (dragstart)="handleDragStart($event)"
+          (dragover)="handleDragOver($event)"
+          (dragleave)="handleDragLeave($event)"
+          (drop)="handleDrop($event)"
+          class="w-100 h-100 config-transition"
+          cell-iv>
+          <div
+            [attr.panel-order]="3"
+            class="config-transition w-100 h-100 d-flex align-items-center justify-content-center border"
+            draggable="true">
+            {{ (panelTexts$ | async)[3] }}
+          </div>
+        </div>
       </layout-single-panel>
       <div *ngSwitchDefault>
         A panel mode which I have never seen before ...
diff --git a/src/ui/nehubaContainer/nehubaContainer.component.ts b/src/ui/nehubaContainer/nehubaContainer.component.ts
index 090bad598038810c0d9e97d09eb42eddea3be396..22d62b6e0110cc5916e6c6238f7423a22776b5f0 100644
--- a/src/ui/nehubaContainer/nehubaContainer.component.ts
+++ b/src/ui/nehubaContainer/nehubaContainer.component.ts
@@ -427,12 +427,19 @@ export class NehubaContainer implements OnInit, OnDestroy{
   ngOnInit(){
 
     this.subscriptions.push(
-      this.store.pipe(
-        select('ngViewerState'),
-        select('panelMode'),
-        distinctUntilChanged()
-      ).subscribe(mode => {
-
+      combineLatest(
+        this.store.pipe(
+          select('ngViewerState'),
+          select('panelMode'),
+          distinctUntilChanged()
+        ),
+        this.store.pipe(
+          select('ngViewerState'),
+          select('panelOrder'),
+          distinctUntilChanged()
+        )
+      ).subscribe(([mode, panelOrder]) => {
+        const viewPanels = panelOrder.split('').map(v => Number(v)).map(idx => this.viewPanels[idx])
         /**
          * TODO be smarter with event stream
          */
@@ -441,25 +448,25 @@ export class NehubaContainer implements OnInit, OnDestroy{
         switch (mode) {
           case H_ONE_THREE:{
             const element = this.removeExistingPanels()
-            const newEl = getHorizontalOneThree(this.viewPanels)
+            const newEl = getHorizontalOneThree(viewPanels)
             element.appendChild(newEl)
             break;
           }
           case V_ONE_THREE:{
             const element = this.removeExistingPanels()
-            const newEl = getVerticalOneThree(this.viewPanels)
+            const newEl = getVerticalOneThree(viewPanels)
             element.appendChild(newEl)
             break;
           }
           case FOUR_PANEL: {
             const element = this.removeExistingPanels()
-            const newEl = getFourPanel(this.viewPanels)
+            const newEl = getFourPanel(viewPanels)
             element.appendChild(newEl)
             break;
           }
           case SINGLE_PANEL: {
             const element = this.removeExistingPanels()
-            const newEl = getSinglePanel(this.viewPanels)
+            const newEl = getSinglePanel(viewPanels)
             element.appendChild(newEl)
             break;
           }