diff --git a/src/app/core/services/helpers/config.helpers.spec.ts b/src/app/core/services/helpers/config.helpers.spec.ts
new file mode 100644
index 0000000..44260d8
--- /dev/null
+++ b/src/app/core/services/helpers/config.helpers.spec.ts
@@ -0,0 +1,63 @@
+import * as angular from 'angular';
+import 'angular-mocks';
+import 'angular-ui-router';
+
+import {IXosConfigHelpersService} from './config.helpers';
+import {xosCore} from '../../index';
+
+let service: IXosConfigHelpersService;
+describe('The ConfigHelpers service', () => {
+
+  beforeEach(angular.mock.module(xosCore));
+
+  beforeEach(angular.mock.inject((
+    ConfigHelpers: IXosConfigHelpersService,
+  ) => {
+    service = ConfigHelpers;
+  }));
+
+  describe('The pluralize function', () => {
+    it('should pluralize string', () => {
+      expect(service.pluralize('test')).toEqual('tests');
+      expect(service.pluralize('test', 1)).toEqual('test');
+      expect(service.pluralize('xos')).toEqual('xosses');
+      expect(service.pluralize('slice')).toEqual('slices');
+    });
+
+    it('should preprend count to string', () => {
+      expect(service.pluralize('test', 6, true)).toEqual('6 tests');
+      expect(service.pluralize('test', 1, true)).toEqual('1 test');
+    });
+  });
+
+  describe('the label formatter', () => {
+    it('should format a camel case string', () => {
+      expect(service.toLabel('camelCase')).toEqual('Camel case');
+    });
+
+    it('should format a snake case string', () => {
+      expect(service.toLabel('snake_case')).toEqual('Snake case');
+    });
+
+    it('should format a kebab case string', () => {
+      expect(service.toLabel('kebab-case')).toEqual('Kebab case');
+    });
+
+    it('should set plural', () => {
+      expect(service.toLabel('kebab-case', true)).toEqual('Kebab cases');
+    });
+
+    it('should format an array of strings', () => {
+      let strings: string[] = ['camelCase', 'snake_case', 'kebab-case'];
+      let labels = ['Camel case', 'Snake case', 'Kebab case'];
+      expect(service.toLabel(strings)).toEqual(labels);
+    });
+
+    it('should set plural on an array of strings', () => {
+      let strings: string[] = ['camelCase', 'snake_case', 'kebab-case'];
+      let labels = ['Camel cases', 'Snake cases', 'Kebab cases'];
+      expect(service.toLabel(strings, true)).toEqual(labels);
+    });
+  });
+
+});
diff --git a/src/app/core/services/helpers/config.helpers.ts b/src/app/core/services/helpers/config.helpers.ts
new file mode 100644
index 0000000..44d3cdc
--- /dev/null
+++ b/src/app/core/services/helpers/config.helpers.ts
@@ -0,0 +1,107 @@
+import * as _ from 'lodash';
+import * as pluralize from 'pluralize';
+import {IXosTableColumn} from '../../table/table';
+
+export interface IXosModelDefsField {
+  name: string;
+  type: string;
+}
+
+export interface IXosConfigHelpersService {
+  modeldefToTableCfg(fields: IXosModelDefsField[]): any[]; // TODO use a proper interface
+  pluralize(string: string, quantity?: number, count?: boolean): string;
+  toLabel(string: string, pluralize?: boolean): string;
+}
+
+export class ConfigHelpers {
+
+  constructor() {
+    pluralize.addIrregularRule('xos', 'xosses');
+    pluralize.addPluralRule(/slice$/i, 'slices');
+  }
+
+  pluralize(string: string, quantity?: number, count?: boolean): string {
+    return pluralize(string, quantity, count);
+  }
+
+  toLabel(string: string, pluralize?: boolean): string {
+
+    if (angular.isArray(string)) {
+      return _.map(string, s => {
+        return this.toLabel(s, pluralize);
+      });
+    }
+
+    if (pluralize) {
+      string = this.pluralize(string);
+    }
+
+    string = this.fromCamelCase(string);
+    string = this.fromSnakeCase(string);
+    string = this.fromKebabCase(string);
+
+    return this.capitalizeFirst(string);
+  }
+
+  modeldefToTableCfg(fields: IXosModelDefsField[]): IXosTableColumn[] {
+    const excluded_fields = [
+      'created',
+      'updated',
+      'enacted',
+      'policed',
+      'backend_register',
+      'deleted',
+      'write_protect',
+      'lazy_blocked',
+      'no_sync',
+      'no_policy',
+      'omf_friendly',
+      'enabled'
+    ];
+    const cfg =  _.map(fields, (f) => {
+      if (excluded_fields.indexOf(f.name) > -1) {
+        return;
+      }
+      const col: IXosTableColumn =  {
+        label: this.toLabel(f.name),
+        prop: f.name
+      };
+
+      if (f.name === 'backend_status') {
+        col.type = 'icon';
+        col.formatter = (item) => {
+          if (item.backend_status.indexOf('1') > -1) {
+            return 'check';
+          }
+          if (item.backend_status.indexOf('2') > -1) {
+            return 'exclamation-circle';
+          }
+          if (item.backend_status.indexOf('0') > -1) {
+            return 'clock-o';
+          }
+        };
+      }
+      return col;
+    })
+      .filter(v => angular.isDefined(v));
+
+    return cfg;
+  };
+
+  private fromCamelCase(string: string): string {
+    return string.split(/(?=[A-Z])/).map(w => w.toLowerCase()).join(' ');
+  }
+
+  private fromSnakeCase(string: string): string {
+    return string.split('_').join(' ').trim();
+  }
+
+  private fromKebabCase(string: string): string {
+    return string.split('-').join(' ').trim();
+  }
+
+  private capitalizeFirst(string: string): string {
+    return string.slice(0, 1).toUpperCase() + string.slice(1);
+  }
+}
+
