diff --git a/application/modules/admin/controllers/CustomFieldsController.php b/application/modules/admin/controllers/CustomFieldsController.php
index e11c5580bfe6368ff53d203f7247999a8fe2e137..1614ea55b3452c17604a99a2dc8a6986b1a2dffd 100644
--- a/application/modules/admin/controllers/CustomFieldsController.php
+++ b/application/modules/admin/controllers/CustomFieldsController.php
@@ -31,6 +31,10 @@ class Admin_CustomFieldsController extends ZendAfi_Controller_Action {
 
 	public function addAction() {
 		$this->view->titre = $this->_('Ajouter un champ personnalisé');
+		$this->view->new_custom_field = new Class_CustomField();
+		if($this->_request->isPost() && $this->view->form->isValid()) {
+			$this->_redirectToReferer();
+		}
 	}
 }
 ?>
\ No newline at end of file
diff --git a/application/modules/admin/views/scripts/custom-fields/add.phtml b/application/modules/admin/views/scripts/custom-fields/add.phtml
index 5fe2c843d4c0aae111fb0844ed97c307016210be..7f291cda3366658b16c4e52fd5851c6ff06b1b03 100644
--- a/application/modules/admin/views/scripts/custom-fields/add.phtml
+++ b/application/modules/admin/views/scripts/custom-fields/add.phtml
@@ -1,3 +1,4 @@
 <?php
-echo $this->renderForm(ZendAfi_Form_Admin_CustomFields_CustomField::newWith(new Class_CustomField()));
+$this->form = ZendAfi_Form_Admin_CustomFields_CustomField::newWith($this->new_custom_field);
+echo $this->renderForm($this->form);
 ?>
diff --git a/library/Class/CustomField.php b/library/Class/CustomField.php
index 276579ac2aa002dd14b457a0c712d6d215d66750..131fbba20e1041883535aaef0c0fc5a4f3d5fbc5 100644
--- a/library/Class/CustomField.php
+++ b/library/Class/CustomField.php
@@ -21,5 +21,15 @@
 
 
 class Class_CustomField extends Storm_Model_Abstract {
+	use Trait_TreeViewableItem;
+
+	protected $_belongs_to = ['meta' => ['model' => 'Class_CustomField_Meta',
+																			 'referenced_in' => 'meta_id']];
+
+
+
+	public function getTitre() {
+		return $this->getMeta()->getLabel();
+	}
 }
 ?>
\ No newline at end of file
diff --git a/library/Class/CustomField/Meta.php b/library/Class/CustomField/Meta.php
new file mode 100644
index 0000000000000000000000000000000000000000..38afd911a359fbbaf42da1ccff44b7350834fa26
--- /dev/null
+++ b/library/Class/CustomField/Meta.php
@@ -0,0 +1,41 @@
+<?php
+/**
+ * Copyright (c) 2012-2014, Agence Française Informatique (AFI). All rights reserved.
+ *
+ * AFI-OPAC 2.0 is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by
+ * the Free Software Foundation.
+ *
+ * There are special exceptions to the terms and conditions of the AGPL as it
+ * is applied to this software (see README file).
+ *
+ * AFI-OPAC 2.0 is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * along with AFI-OPAC 2.0; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA 
+ */
+
+
+class Class_CustomField_Meta extends Storm_Model_Abstract {
+	const TEXT_INPUT = 'TEXT_INPUT';
+
+	protected static $_models = [];
+
+
+	public static function register($array_of_model_and_label) {
+		static::$_models = [];
+		foreach ($array_of_model_and_label as $model => $label) {
+			static::$_models []= (new Class_CustomField_Model($model, $label));
+		}
+	}
+
+	
+	public static function getModels() {
+		return static::$_models;
+	}
+}
+?>
\ No newline at end of file
diff --git a/library/Class/CustomField/Model.php b/library/Class/CustomField/Model.php
new file mode 100644
index 0000000000000000000000000000000000000000..31d690e98fa94b13dc94c7c54cda9c15fd5620ac
--- /dev/null
+++ b/library/Class/CustomField/Model.php
@@ -0,0 +1,62 @@
+<?php
+/**
+ * Copyright (c) 2012-2014, Agence Française Informatique (AFI). All rights reserved.
+ *
+ * AFI-OPAC 2.0 is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by
+ * the Free Software Foundation.
+ *
+ * There are special exceptions to the terms and conditions of the AGPL as it
+ * is applied to this software (see README file).
+ *
+ * AFI-OPAC 2.0 is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * along with AFI-OPAC 2.0; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA 
+ */
+
+
+class Class_CustomField_Model {
+	use Trait_TreeViewableCategorie;
+	
+
+	protected 
+		$_class_name,
+		$_label;	
+	
+
+	public function __construct($class_name, $label) {
+		$this->_class_name = $class_name;
+		$this->_label = $label;
+	}
+
+	
+	public function isNew() {
+		return false;
+	}
+
+	
+	public function getLibelle() {
+		return $this->_label;
+	}
+
+	
+	public function getId() {
+		return md5($this->_class_name);
+	}
+
+
+	public function getItems() {
+		return Class_CustomField::findAllBy(['model' => $this->_class_name]);
+	}
+
+	
+	public function getSousCategories() {
+		return [];
+	}
+}
+?>
\ No newline at end of file
diff --git a/library/Trait/TreeViewableItem.php b/library/Trait/TreeViewableItem.php
index 68703399271ba2d2685a99bfdfbc8d5911ceeb15..5aa01bbeb831b8c5c3270d1d844a3a39a867cd4f 100644
--- a/library/Trait/TreeViewableItem.php
+++ b/library/Trait/TreeViewableItem.php
@@ -32,6 +32,21 @@ trait Trait_TreeViewableItem {
 			:'';
 	}
 
+	
+	public function getTitleInfo() {
+		return '';
+	}
+
+
+	public function getIcoInfoTitle() {
+		return '';
+	}
+	
+
+	public function getIcoInfo() {
+		return '';
+	}
+
 
 	/**
 	 * @return String
diff --git a/library/ZendAfi/Controller/Plugin/CustomFields.php b/library/ZendAfi/Controller/Plugin/CustomFields.php
new file mode 100644
index 0000000000000000000000000000000000000000..4bafc7226e2ef313a58b13e91ea0318fb66c5ce8
--- /dev/null
+++ b/library/ZendAfi/Controller/Plugin/CustomFields.php
@@ -0,0 +1,33 @@
+<?php
+/**
+ * Copyright (c) 2012-2014, Agence Française Informatique (AFI). All rights reserved.
+ *
+ * AFI-OPAC 2.0 is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by
+ * the Free Software Foundation.
+ *
+ * There are special exceptions to the terms and conditions of the AGPL as it
+ * is applied to this software (see README file).
+ *
+ * AFI-OPAC 2.0 is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * along with AFI-OPAC 2.0; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA 
+ */
+
+
+class ZendAfi_Controller_Plugin_CustomFields extends Zend_Controller_Plugin_Abstract {
+	use Trait_Translator;
+
+	
+	public function preDispatch(Zend_Controller_Request_Abstract $request) {
+		Class_CustomField_Meta::register(['Class_Article' => $this->_('Article'),
+																			'Class_Formation' => $this->_('Formation'),
+																			'Class_UserGroup' => $this->_('Groupe d\'utilisateurs')]);
+	}
+}
+?>
\ No newline at end of file
diff --git a/library/ZendAfi/View/Helper/Admin/CustomFieldsCategories.php b/library/ZendAfi/View/Helper/Admin/CustomFieldsCategories.php
index a9a3ce3f27d3b9fc6c825f7388d53f0d388786d2..3f0c460c5ad2a0999ac8227a7e6eb390e0ac4b71 100644
--- a/library/ZendAfi/View/Helper/Admin/CustomFieldsCategories.php
+++ b/library/ZendAfi/View/Helper/Admin/CustomFieldsCategories.php
@@ -25,12 +25,13 @@ class ZendAfi_View_Helper_Admin_CustomFieldsCategories extends ZendAfi_View_Help
 	public function customFieldsCategories() {
 		$categories = [ 
 			['bib' => Class_Bib::getPortail(),
-			 'containers' => Class_CustomFieldsCategory::getTopCategories(),
+			 'containers' => Class_CustomField_Meta::getModels(),
 			 'add_link' => '']];
 		
-		$categories_actions = [ ['url' => $this->view->url(['module' => 'admin',
-																								'controller' => 'custom-fields',
-																								'action' => 'add'], null, true).'/category/%s',
+		$categories_actions = [ ['url' => $this->view->url([
+																										 'module' => 'admin',
+																										 'controller' => 'custom-fields',
+																										 'action' => 'add'], null, true).'/category/%s',
 														 'icon' => 'ico/add_news.gif',
 														 'label' => $this->view->_('Ajouter un champ personnalisé')]];
 		
diff --git a/library/startup.php b/library/startup.php
index 76886e0e486ca4478a42b25f7e0fa9e43df69aa7..045caea044232e438d8b723040bd37327cd8c694 100644
--- a/library/startup.php
+++ b/library/startup.php
@@ -273,6 +273,7 @@ function setupFrontController($cfg) {
 		->registerPlugin(new ZendAfi_Controller_Plugin_System())
 		->registerPlugin(new ZendAfi_Controller_Plugin_Popup())
 		->registerPlugin(new ZendAfi_Controller_Plugin_TogetherJS())
+		->registerPlugin(new ZendAfi_Controller_Plugin_CustomFields())
 		->setParam('useDefaultControllerAlways', true);
 
 
diff --git a/tests/application/modules/admin/controllers/CustomFieldsControllerTest.php b/tests/application/modules/admin/controllers/CustomFieldsControllerTest.php
index 1b8aa4478c3cd5c10b0c97d791580a2e6bec23d0..4468b01fe0f14fbe8cc232742af403b51276a267 100644
--- a/tests/application/modules/admin/controllers/CustomFieldsControllerTest.php
+++ b/tests/application/modules/admin/controllers/CustomFieldsControllerTest.php
@@ -24,13 +24,42 @@ require_once 'AbstractControllerTestCase.php';
 class CustomFieldsControllerIndexTest extends AbstractControllerTestCase {
 	public function setup() {
 		parent::setup();
+
+		$field_address_article = $this->fixture('Class_CustomField_Meta',
+																						['id' => 1,
+																						 'label' => 'Address',
+																						 'field_type' => Class_CustomField_Meta::TEXT_INPUT]);
+
+
+		$this->fixture('Class_CustomField',
+									 ['id' => 1,
+										'meta_id' => 1,
+										'priority' => 2,
+										'model' => 'Class_Article']);
+
+		
+		$this->fixture('Class_CustomField',
+									 ['id' => 2,
+										'meta_id' => 1,
+										'priority' => 2,
+										'model' => 'Class_Formation']);
+
+		
+		$this->fixture('Class_CustomField',
+									 ['id' => 3,
+										'meta_id' => 1,
+										'priority' => 2,
+										'model' => 'Class_UserGroup']);
+
+
 		$this->dispatch('admin/custom-fields', true);
 	}
 
+
 	public function customFieldsCategories() {
-		return [ ['1', 'Article' ],
-						 ['2', 'Formation'],
-						 ['3', "Groupe d'utilisateur"]];
+		return [ [md5('Class_Article'), 'Article' ],
+						 [md5('Class_Formation'), 'Formation'],
+						 [md5('Class_UserGroup'), "Groupe d'utilisateurs"]];
 	}
 	
 	
@@ -60,6 +89,13 @@ class CustomFieldsControllerIndexTest extends AbstractControllerTestCase {
 	public function addCustomFieldLinkShouldBeDisplay($expected, $custom_field_category) {
 		$this->assertXPath('//div[@class="treeView"]//li[@class="categorie"]/div[@class="actions"]/a[contains(@href,"/admin/custom-fields/add/category/'.$expected.'")]');
 	}
+
+
+	/** @test */
+	public function fieldAddressShouldAppearInFormations() {
+		$this->assertXPathContentContains('//li//li',
+																			'Address', $this->_response->getBody());
+	}
 }
 
 
@@ -103,4 +139,17 @@ class CustomFieldsControllerAddIndexTest extends AbstractControllerTestCase {
 	}
 }
 
+
+
+class CustomFieldsControllerPostAddActionTest extends AbstractControllerTestCase {
+	public function setup() {
+		parent::setup();
+		$this->postDispatch('admin/custom-fields/add/category/1', ['label' => 'categorie',
+																															 'field_type' => 'text']);
+
+	}
+	
+
+	
+}
 ?>
\ No newline at end of file
diff --git a/tests/bootstrap_frontcontroller.php b/tests/bootstrap_frontcontroller.php
index 51662e477de7650e4cd30255d432303cb52dd362..d4eb60250a4f6427dc8f022767ac7f391c1c8357 100644
--- a/tests/bootstrap_frontcontroller.php
+++ b/tests/bootstrap_frontcontroller.php
@@ -36,7 +36,8 @@ $controller = Zend_Controller_Front::getInstance()
 	->registerPlugin(new ZendAfi_Controller_Plugin_InitModule())
 	->registerPlugin(new ZendAfi_Controller_Plugin_SelectionBib())
 	->registerPlugin(new ZendAfi_Controller_Plugin_System())
-	->registerPlugin(new ZendAfi_Controller_Plugin_TogetherJS());
+	->registerPlugin(new ZendAfi_Controller_Plugin_TogetherJS())
+	->registerPlugin(new ZendAfi_Controller_Plugin_CustomFields());
 
 $_SESSION["selection_bib"]=array("message" => 'selection bib sucks',
 																 "nb_notices" => 12345,