diff --git a/src/app/core/form/form.ts b/src/app/core/form/form.ts
index 6713fe7..34b0287 100644
--- a/src/app/core/form/form.ts
+++ b/src/app/core/form/form.ts
@@ -28,11 +28,17 @@
     // alternatively you can return an array [errorName, true|false]
 }
 
+export interface IXosFormInputOptions {
+  id: number;
+  label: string;
+}
+
 export interface IXosFormInput {
   name: string;
   label: string;
   type: string; // options are: [date, boolean, number, email, string, select],
   validators: IXosFormInputValidator;
+  options?: IXosFormInputOptions[];
 }
 
 export interface IXosFormConfig {
diff --git a/src/app/core/header/header.ts b/src/app/core/header/header.ts
index 2aef872..a7cba72 100644
--- a/src/app/core/header/header.ts
+++ b/src/app/core/header/header.ts
@@ -59,9 +59,7 @@
         }
         return list;
       }, []);
-      console.log(this.states.length);
       this.states = _.uniqBy(this.states, 'state');
-      console.log(this.states.length);
     }, 500);
 
     // listen for keypress
diff --git a/src/app/core/services/helpers/config.helpers.spec.ts b/src/app/core/services/helpers/config.helpers.spec.ts
index 28ba22b..eca43d9 100644
--- a/src/app/core/services/helpers/config.helpers.spec.ts
+++ b/src/app/core/services/helpers/config.helpers.spec.ts
@@ -2,10 +2,11 @@
 import 'angular-mocks';
 import 'angular-ui-router';
 
-import {IXosConfigHelpersService, ConfigHelpers} from './config.helpers';
+import {IXosConfigHelpersService, ConfigHelpers, IXosModelDefsField} from './config.helpers';
 import {IModeldef} from '../../../datasources/rest/modeldefs.rest';
 import {IXosTableCfg} from '../../table/table';
 import {IXosFormInput, IXosFormConfig} from '../../form/form';
+import {BehaviorSubject} from 'rxjs';
 
 let service: IXosConfigHelpersService;
 
@@ -185,5 +186,62 @@
       expect(config.inputs.length).toBe(4);
     });
   });
+
+  describe('the private methods', () => {
+    let modelStoreMock, toastr, auth;
+
+    beforeEach(angular.mock.inject((_toastr_, AuthService) => {
+      modelStoreMock = {
+        query: () => {
+          const subject = new BehaviorSubject([
+            {id: 1, humanReadableName: 'test'},
+            {id: 2, humanReadableName: 'second'}
+          ]);
+          return subject.asObservable();
+        }
+      };
+      toastr = _toastr_;
+      auth = AuthService;
+    }));
+
+    const field: IXosModelDefsField = {
+      name: 'test',
+      type: 'number',
+      relation: {
+        model: 'Test',
+        type: 'many_to_one'
+      }
+    };
+
+    describe('the populateRelated method', () => {
+      const item = {
+        test: 2
+      };
+      it('should add the formatted data to the column definition', () => {
+        service = new ConfigHelpers(toastr, auth, modelStoreMock);
+        service['populateRelated'](item, item.test, field);
+        expect(item['test-formatted']).toBe('second');
+      });
+    });
+
+    describe('the populateSelectField', () => {
+
+      const input: IXosFormInput = {
+        name: 'test',
+        label: 'Test',
+        type: 'select',
+        validators: {}
+      };
+
+      it('should add the available choice to the select', () => {
+        service = new ConfigHelpers(toastr, auth, modelStoreMock);
+        service['populateSelectField'](field, input);
+        expect(input.options).toEqual([
+          {id: 1, label: 'test'},
+          {id: 2, label: 'second'}
+        ]);
+      });
+    });
+  });
 });
 
diff --git a/src/app/core/services/helpers/config.helpers.ts b/src/app/core/services/helpers/config.helpers.ts
index b2d966a..93ae064 100644
--- a/src/app/core/services/helpers/config.helpers.ts
+++ b/src/app/core/services/helpers/config.helpers.ts
@@ -172,6 +172,17 @@
   public modelFieldToInputCfg(fields: IXosModelDefsField[]): IXosFormInput[] {
 
     return _.map(fields, f => {
+      if (f.relation) {
+        const input = {
+          name: f.name,
+          label: this.toLabel(f.name),
+          type: 'select',
+          validators: f.validators
+        };
+        this.populateSelectField(f, input);
+        return input;
+      }
+
       return {
         name: f.name,
         label: this.toLabel(f.name),
@@ -248,4 +259,14 @@
         }
       });
   }
+
+  // augment a select field with related model informations
+  private populateSelectField(field: IXosModelDefsField, input: IXosFormInput): void {
+    this.ModelStore.query(field.relation.model)
+      .subscribe(res => {
+        input.options = _.map(res, item => {
+          return {id: item.id, label: item.humanReadableName ? item.humanReadableName : item.name};
+        });
+      });
+  }
 }
diff --git a/src/app/datasources/helpers/store.helpers.spec.ts b/src/app/datasources/helpers/store.helpers.spec.ts
index 82a5e7a..4e45070 100644
--- a/src/app/datasources/helpers/store.helpers.spec.ts
+++ b/src/app/datasources/helpers/store.helpers.spec.ts
@@ -43,6 +43,11 @@
   it('should convert a core model name in an URL', () => {
     expect(service.urlFromCoreModel('Slice')).toBe('/core/slices');
     expect(service.urlFromCoreModel('Xos')).toBe('/core/xosses');
+
+    // handling exceptions
+    expect(service.urlFromCoreModel('SiteRole')).toBe('/core/site_roles');
+    expect(service.urlFromCoreModel('SliceRole')).toBe('/core/slice_roles');
+    expect(service.urlFromCoreModel('SlicePrivilege')).toBe('/core/slice_privileges');
   });
 
   describe('when updating a collection', () => {
diff --git a/src/app/datasources/helpers/store.helpers.ts b/src/app/datasources/helpers/store.helpers.ts
index aa18bd8..7792590 100644
--- a/src/app/datasources/helpers/store.helpers.ts
+++ b/src/app/datasources/helpers/store.helpers.ts
@@ -18,7 +18,15 @@
   }
 
   public urlFromCoreModel(name: string): string {
-    return `/core/${pluralize(name.toLowerCase())}`;
+    switch (name) {
+      // FIXME handling exceptions, understand why these 3 endpoints are autogenerated with an _f
+      case 'SiteRole':
+      case 'SliceRole':
+      case 'SlicePrivilege':
+        return `/core/${pluralize(name.split(/(?=[A-Z])/).map(w => w.toLowerCase()).join('_'))}`;
+      default:
+        return `/core/${pluralize(name.toLowerCase())}`;
+    }
   }
 
   public updateCollection(event: IWSEvent, subject: BehaviorSubject<any>): BehaviorSubject<any> {
