diff --git a/src/app/core/services/helpers/config.helpers.spec.ts b/src/app/core/services/helpers/config.helpers.spec.ts
index f36c20a..db1c840 100644
--- a/src/app/core/services/helpers/config.helpers.spec.ts
+++ b/src/app/core/services/helpers/config.helpers.spec.ts
@@ -187,7 +187,7 @@
       });
 
       it('should return the state with params for usage in js', () => {
-        expect(service.stateWithParamsForJs('Test', {id: 1})).toEqual({ name: 'xos.core.tests', params: Object({ id: 1 }) });
+        expect(service.stateWithParamsForJs('Test', 1)).toEqual({ name: 'xos.core.tests', params: Object({ id: 1 }) });
       });
     });
   });
diff --git a/src/app/core/services/helpers/config.helpers.ts b/src/app/core/services/helpers/config.helpers.ts
index 91db9f2..4baf9c5 100644
--- a/src/app/core/services/helpers/config.helpers.ts
+++ b/src/app/core/services/helpers/config.helpers.ts
@@ -196,7 +196,7 @@
       };
 
       if (f.name === 'id' || f.name === 'name') {
-        col.link = item => this.stateWithParamsForJs(modelName, item);
+        col.link = item => this.stateWithParamsForJs(modelName, item.id);
       }
 
       // if the field identify a relation, create a link
@@ -206,7 +206,7 @@
           this.populateRelated(item, item[f.name], f);
           return item[f.name];
         };
-        col.link = item => this.relatedStateWithParams(f.relation.model, item[col.prop]);
+        col.link = item => this.stateWithParamsForJs(f.relation.model, item[col.prop]);
       }
 
       if (f.name === 'backend_status' || f.name === 'policy_status') {
@@ -257,9 +257,9 @@
     return `${state}({id: ${id}})`;
   }
 
-  public stateWithParamsForJs(name: string, model: any): any {
+  public stateWithParamsForJs(name: string, id: number): any {
     const state = this.stateFromCoreModel(name);
-    return {name: state, params: {id: model.id}};
+    return {name: state, params: {id: id}};
   }
 
   public modelFieldToInputCfg(fields: IXosModelDefsField[]): IXosFormInput[] {
diff --git a/src/app/core/services/keyboard-shortcut.spec.ts b/src/app/core/services/keyboard-shortcut.spec.ts
index fa9bf41..d113161 100644
--- a/src/app/core/services/keyboard-shortcut.spec.ts
+++ b/src/app/core/services/keyboard-shortcut.spec.ts
@@ -195,4 +195,65 @@
       expect(logSpy).toHaveBeenCalledWith('[XosKeyboardShortcut] A shortcut for key "a" has already been registered');
     });
   });
+
+  describe('the removeKeyBinding method', () => {
+
+    const globalBinding = {
+      key: 'g',
+      cb: 'callback',
+      modifiers: null
+    };
+
+    const viewBinding = {
+      key: 'v',
+      cb: 'callback',
+      modifiers: null
+    };
+
+    const missingBinding = {
+      key: 'b',
+      cb: 'callback',
+      modifiers: null
+    };
+
+    beforeEach(() => {
+      service['keyMapping'] = {
+        global: [
+          {
+            key: 'g',
+            cb: 'cb',
+            modifiers: null
+          }
+        ],
+        view: [
+          {
+            key: 'v',
+            cb: 'cb',
+            modifiers: null
+          }
+        ]
+      };
+    });
+
+    it(' should remove an existing global keybinding', () => {
+      service.removeKeyBinding(globalBinding);
+      expect(logSpy).not.toHaveBeenCalled();
+      expect(service['keyMapping']['global'].length).toBe(0);
+      expect(service['keyMapping']['view'].length).toBe(1);
+    });
+
+    it(' should remove an existing view keybinding', () => {
+      service.removeKeyBinding(viewBinding);
+      expect(logSpy).not.toHaveBeenCalled();
+      expect(service['keyMapping']['global'].length).toBe(1);
+      expect(service['keyMapping']['view'].length).toBe(0);
+    });
+
+    it('should not raise if removing a missing keybing', () => {
+      service.removeKeyBinding(missingBinding);
+      expect(service['keyMapping']['global'].length).toBe(1);
+      expect(service['keyMapping']['view'].length).toBe(1);
+      expect(logSpy).toHaveBeenCalledWith('[XosKeyboardShortcut] Trying to remove a shortcut for key "b" but it was not registered');
+    });
+  });
 });
diff --git a/src/app/core/services/keyboard-shortcut.ts b/src/app/core/services/keyboard-shortcut.ts
index 9b98b45..e2a3a38 100644
--- a/src/app/core/services/keyboard-shortcut.ts
+++ b/src/app/core/services/keyboard-shortcut.ts
@@ -23,6 +23,7 @@
 export interface IXosKeyboardShortcutService {
   keyMapping: IXosKeyboardShortcutMap;
   registerKeyBinding(binding: IXosKeyboardShortcutBinding, target?: string);
+  removeKeyBinding(binding: IXosKeyboardShortcutBinding);
   setup(): void;
 }
 
@@ -64,11 +65,17 @@
   public baseBindings: IXosKeyboardShortcutBinding[] = [
     {
       key: 'slash',
-      label: '/',
+      label: '/ or ?',
       description: 'Toggle Shortcut Panel',
       cb: this.toggleKeyBindingPanel,
     },
     {
+      // NOTE this is the ? code
+      key: 'slash',
+      modifiers: ['shift'],
+      cb: this.toggleKeyBindingPanel,
+    },
+    {
       key: 'esc',
       label: 'Esc',
       cb: (event) => {
@@ -102,6 +109,7 @@
     $('body').on('keydown', (e) => {
 
       const pressedKey = this.whatKey(e.which);
+      this.$log.debug(`[XosKeyboardShortcut] Pressed key: ${pressedKey}`);
       if (!pressedKey) {
         return;
       }
@@ -149,6 +157,18 @@
     this.keyMapping[target].push(binding);
   }
 
+  public removeKeyBinding(binding: IXosKeyboardShortcutBinding): void {
+    if (_.find(this.keyMapping.global, {key: binding.key, modifiers: binding.modifiers})) {
+      _.remove(this.keyMapping.global, {key: binding.key, modifiers: binding.modifiers});
+    }
+    else if (_.find(this.keyMapping.view, {key: binding.key, modifiers: binding.modifiers})) {
+      _.remove(this.keyMapping.view, {key: binding.key, modifiers: binding.modifiers});
+    }
+    else {
+      this.$log.warn(`[XosKeyboardShortcut] Trying to remove a shortcut for key "${binding.key}" but it was not registered`);
+    }
+  }
+
   private addActiveModifierKey(key: string) {
     if (this.activeModifiers.indexOf(key) === -1) {
       this.activeModifiers.push(key);
