diff --git a/src/app/core/services/helpers/config.helpers.spec.ts b/src/app/core/services/helpers/config.helpers.spec.ts
index f0fb2a7..5883434 100644
--- a/src/app/core/services/helpers/config.helpers.spec.ts
+++ b/src/app/core/services/helpers/config.helpers.spec.ts
@@ -244,9 +244,10 @@
   });
 
   describe('the private methods', () => {
-    let modelStoreMock, toastr, auth, stateMock;
+    let modelStoreMock, toastr, auth, stateMock, logMock;
 
-    beforeEach(angular.mock.inject((_toastr_, AuthService) => {
+    beforeEach(angular.mock.inject(($log, _toastr_, AuthService) => {
+      logMock = $log;
       modelStoreMock = {
         query: () => {
           const subject = new BehaviorSubject([
@@ -277,7 +278,7 @@
         test: 2
       };
       it('should add the formatted data to the column definition', () => {
-        service = new ConfigHelpers(stateMock, toastr, modelStoreMock);
+        service = new ConfigHelpers(logMock, stateMock, toastr, modelStoreMock);
         service['populateRelated'](item, item.test, field);
         expect(item['test-formatted']).toBe('second');
       });
@@ -293,7 +294,7 @@
       };
 
       it('should add the available choice to the select', () => {
-        service = new ConfigHelpers(stateMock, toastr, modelStoreMock);
+        service = new ConfigHelpers(logMock, stateMock, toastr, modelStoreMock);
         service['populateSelectField'](field, input);
         expect(input.options).toEqual([
           {id: 1, label: 'test'},
diff --git a/src/app/core/services/helpers/config.helpers.ts b/src/app/core/services/helpers/config.helpers.ts
index 78a767e..8ff81a2 100644
--- a/src/app/core/services/helpers/config.helpers.ts
+++ b/src/app/core/services/helpers/config.helpers.ts
@@ -40,6 +40,7 @@
 
 export class ConfigHelpers implements IXosConfigHelpersService {
   static $inject = [
+    '$log',
     '$state',
     'toastr',
     'XosModelStore'];
@@ -64,6 +65,7 @@
   ];
 
   constructor(
+    private $log: ng.ILogService,
     private $state: ng.ui.IStateService,
     private toastr: ng.toastr.IToastrService,
     private XosModelStore: IXosModelStoreService
@@ -352,15 +354,25 @@
 
   // augment a select field with related model informations
   private populateSelectField(field: IXosModelDefsField, input: IXosFormInput): void {
+
+    if (field.relation.model.indexOf('_decl') > -1) {
+      field.relation.model = field.relation.model.replace('_decl', '');
+    }
+
     this.XosModelStore.query(field.relation.model)
-      .subscribe(res => {
-        input.options = _.map(res, item => {
-          let opt = {id: item.id, label: item.humanReadableName ? item.humanReadableName : item.name};
-          if (!angular.isDefined(item.humanReadableName) && !angular.isDefined(item.name)) {
-            opt.label = item.id;
-          }
-          return opt;
-        });
-      });
+      .subscribe(
+        res => {
+          input.options = _.map(res, item => {
+            let opt = {id: item.id, label: item.humanReadableName ? item.humanReadableName : item.name};
+            if (!angular.isDefined(item.humanReadableName) && !angular.isDefined(item.name)) {
+              opt.label = item.id;
+            }
+            return opt;
+          });
+        },
+        err => {
+          this.$log.error(`[XOSConfigHelpers] Failed to build relations for ${field.relation.model}`);
+        }
+      );
   }
 }
