diff --git a/VERSIONS_STABLE/24383 b/VERSIONS_STABLE/24383
new file mode 100644
index 0000000000000000000000000000000000000000..1f9a6f5fb0ddab29a667ea195d38c17f9a8cdf3b
--- /dev/null
+++ b/VERSIONS_STABLE/24383
@@ -0,0 +1 @@
+ - ticket #24383 : Les balises deviennent autorisées dans la variable TEXT_REPLACEMENTS
\ No newline at end of file
diff --git a/application/modules/admin/controllers/IndexController.php b/application/modules/admin/controllers/IndexController.php
index 073c5c864eaf0b9259653f09b2f2b7d2b9f16a03..8928e65a88ad80ae75595efcd7b4f9b283187e09 100644
--- a/application/modules/admin/controllers/IndexController.php
+++ b/application/modules/admin/controllers/IndexController.php
@@ -60,44 +60,49 @@ class Admin_IndexController extends ZendAfi_Controller_Action {
 
 
 
-	public function shouldEncodeVar($cle) {
-		return in_array($cle->getId(),
+	public function shouldEncodeVar($id) {
+		return in_array($id,
 										['REGISTER_OK', 'RESA_CONDITION', 'TEXTE_MAIL_RESA',
 										 'USER_VALIDATED', 'USER_NON_VALIDATED']);
 	}
 
 
+	protected function shouldAddSlashes($id) {
+		return in_array($id, ['JS_STAT', 'TEXT_REPLACEMENTS']);
+	}
+
+
 	public function adminvareditAction() {
 		$id = $this->_getParam('cle');
-		$cle = Class_AdminVar::getLoader()->find($id);
+		$var = Class_AdminVar::find($id);
 
 		if ($this->_request->isPost())	{
 			$filter = new Zend_Filter_StripTags();
 			$new_valeur = $this->_request->getPost('valeur');
 
-			if ($this->shouldEncodeVar($cle)) {
-				$cle->setValeur(urlencode($new_valeur));
+			if ($this->shouldEncodeVar($var->getId())) {
+				$var->setValeur(urlencode($new_valeur));
 
-			} else if ($cle->getId() == 'JS_STAT') {
-				$cle->setValeur(addslashes($new_valeur));
+			} else if ($this->shouldAddSlashes($var->getId())) {
+				$var->setValeur(addslashes($new_valeur));
 
 			} else {
-				$cle->setValeur(trim($filter->filter($new_valeur)));
+				$var->setValeur(trim($filter->filter($new_valeur)));
 			}
 
-			$cle->save();
+			$var->save();
 			$this->_helper->notify('Variable '.$id.' sauvegardée');
 			$this->_redirect('admin/index/adminvaredit/cle/'.$id);
 			return;
 		}
 
-		$this->view->var_valeur	= $this->shouldEncodeVar($cle)
-			? urldecode($cle->getValeur())
-			: $cle->getValeur();
+		$this->view->var_valeur	= $this->shouldEncodeVar($var->getId())
+			? urldecode($var->getValeur())
+			: $var->getValeur();
 
-		$this->view->var_cle		= $cle->getId();
-		$this->view->tuto				= Class_AdminVar::helpFor($cle->getId());
-		$this->view->titre			= 'Modifier la variable: ' . $cle->getId();
+		$this->view->var_cle		= $var->getId();
+		$this->view->tuto				= Class_AdminVar::helpFor($var->getId());
+		$this->view->titre			= 'Modifier la variable: ' . $var->getId();
 	}
 
 
diff --git a/tests/application/modules/admin/controllers/AdminIndexControllerTest.php b/tests/application/modules/admin/controllers/AdminIndexControllerTest.php
index e87b4b565f030b496739e74331180a98ce682bb6..95ff3fca680a5eb52d8ab82fb966d5173ec1a44d 100644
--- a/tests/application/modules/admin/controllers/AdminIndexControllerTest.php
+++ b/tests/application/modules/admin/controllers/AdminIndexControllerTest.php
@@ -39,13 +39,11 @@ class AdminIndexControllerIndexActionTest extends AdminIndexControllerTestCase {
 	public function setUp() {
 		parent::setUp();
 
-		Class_AdminVar::getLoader()
-			->newInstanceWithId('LANGUES')
-			->setValeur('');
-
+		$this->fixture('Class_AdminVar', ['id' => 'LANGUES', 'valeur' => '']);
 		$this->dispatch('/admin/index', true);
 	}
 
+
 	/** @test */
 	function menuGaucheTraductionsShouldBeHidden() {
 		$this->assertNotXPathContentContains('//a', 'Traductions');
@@ -150,12 +148,9 @@ class AdminIndexControllerAdminVarEditModoBlogActionTest extends Admin_AbstractC
 	public function setUp() {
 		parent::setUp();
 
-		$this->modo_blog = Storm_Test_ObjectWrapper::onLoaderOfModel('Class_AdminVar')
-			->whenCalled('save')
-			->answers('true')
-			->getWrapper()
-			->newInstanceWithId('MODO_BLOG')
-			->setValeur('1');
+		$this->modo_blog = $this->fixture('Class_AdminVar',
+																			['id' => 'MODO_BLOG',
+																			 'valeur' => '1']);
 	}
 
 
@@ -168,12 +163,10 @@ class AdminIndexControllerAdminVarEditModoBlogActionTest extends Admin_AbstractC
 
 	/** @test */
 	public function postTwoToMODO_BLOG() {
-		$this
-			->getRequest()
-			->setMethod('POST')
-			->setPost(array('cle' => 'MODO_BLOG',
-											'valeur' => "<b>2  \n</b>"));
-		$this->dispatch('/admin/index/adminvaredit/cle/MODO_BLOG');
+		$this->postDispatch('/admin/index/adminvaredit/cle/MODO_BLOG',
+												['cle' => 'MODO_BLOG',
+												 'valeur' => "<b>2  \n</b>"]);
+
 		$this->assertEquals(2, $this->modo_blog->getValeur());
 		$this->assertRedirectTo('/admin/index/adminvaredit/cle/MODO_BLOG');
 		$this->assertFlashMessengerContains('Variable MODO_BLOG sauvegardée');
@@ -189,29 +182,43 @@ class AdminIndexControllerAdminVarEditResaConditionActionTest extends Admin_Abst
 	public function setUp() {
 		parent::setUp();
 
-		$this->_resa_condition = Class_AdminVar::getLoader()
-			->newInstanceWithId('RESA_CONDITION')
-			->setValeur('Mes+conditions+de+reservation');
-
-		Storm_Test_ObjectWrapper::onLoaderOfModel('Class_AdminVar')
-			->whenCalled('save')
-			->answers(true);
+		$this->_resa_condition = $this->fixture('Class_AdminVar',
+																						['id' => 'RESA_CONDITION',
+																						 'valeur' => 'Mes+conditions+de+reservation']);
 	}
 
 
 	/** @test */
 	public function editResaConditionShouldDecodeItsValeur() {
 		$this->dispatch('/admin/index/adminvaredit/cle/RESA_CONDITION');
-		$this->assertXPathContentContains('//textarea', 'Mes conditions de reservation');
+		$this->assertXPathContentContains('//textarea', 'Mes conditions de reservation',
+																			$this->_response->getBody());
 	}
 
 
 	/** @test */
 	public function postResaConditionShouldEncodeItsValeur() {
 		$this->postDispatch('/admin/index/adminvaredit/cle/RESA_CONDITION',
-												array('valeur' => 'Il faut demander'));
+												['valeur' => 'Il faut demander']);
 
 		$this->assertEquals('Il+faut+demander', $this->_resa_condition->getValeur());
 	}
 }
-?>
\ No newline at end of file
+
+
+
+/** @see http://forge.afi-sa.fr/issues/24383 */
+class AdminIndexControllerAdminVarEditTextReplacementsActionTest extends Admin_AbstractControllerTestCase {
+
+	/** @test */
+	public function postShouldNotStripTags() {
+		$this->fixture('Class_AdminVar',
+									 ['id' => 'TEXT_REPLACEMENTS', 'valeur' => '']);
+
+		$value = 'Votre réservation est enregistrée.<br>Nous vous informerons quand le document%s sera disponible pour être retiré à : %s';
+		$this->postDispatch('/admin/index/adminvaredit/cle/TEXT_REPLACEMENTS',
+												['valeur' => $value]);
+
+		$this->assertEquals($value, Class_AdminVar::get('TEXT_REPLACEMENTS'));
+	}
+}
\ No newline at end of file