diff --git a/application/modules/opac/controllers/AbonneController.php b/application/modules/opac/controllers/AbonneController.php
index bfd756e0233dec41cddfeb03f37d193a09f3884f..af56ef3a61150ebf3962bce3497e277846f3f637 100644
--- a/application/modules/opac/controllers/AbonneController.php
+++ b/application/modules/opac/controllers/AbonneController.php
@@ -389,16 +389,14 @@ class AbonneController extends ZendAfi_Controller_Action {
 		if ($mail_element = $form->getElement('mail'))
 			$mail_element->addValidator(new Zend_Validate_EmailAddress());
 
-
-
-		$chekboxes = ['is_contact_mail' => $this->_('Recevoir mes courriers par E-Mail'),
-									'is_contact_sms' => $this->_('Recevoir mes alertes par SMS')];
-		foreach($chekboxes	as $field => $label) {
-			if (!in_array($field, $fields_to_show))
-				continue;
-
-			$form->addElement('checkbox', $field, ['label' => $label]);
-		}
+		if (in_array('mode_contact', $fields_to_show))
+			$form->addElement('radio', 
+												'mode_contact', 
+												['label' => 'Mode de contact',
+												 'multiOptions' => [Class_Users::MODE_CONTACT_LETTER => $this->_('Recevoir mes courriers par courrier'),
+																						Class_Users::MODE_CONTACT_MAIL => $this->_('Recevoir mes courriers par E-Mail'),
+																						Class_Users::MODE_CONTACT_SMS => $this->_('Recevoir mes alertes par SMS')],
+												 'value' => $user->getModeContact()]);
 
 		if (in_array('password', $fields_to_show)) {
 			$fields_to_show []= 'confirm_password';
@@ -440,7 +438,7 @@ class AbonneController extends ZendAfi_Controller_Action {
 														 'coordonnees', 
 														 ['legend' => 'Coordonnées']);
 
-		if ($contact_fields = array_intersect(['mail', 'is_contact_mail', 'telephone', 'is_contact_sms' ],
+		if ($contact_fields = array_intersect(['mail', 'telephone', 'mode_contact' ],
 																					$fields_to_show)) 
 			$form->addDisplayGroup($contact_fields, 
 														 'contact', 
diff --git a/library/Class/Users.php b/library/Class/Users.php
index 7442af8cf7af5b267865e483f5e390fbd8a8170d..8475790b60588ef107892c841d91d3283dd70358 100644
--- a/library/Class/Users.php
+++ b/library/Class/Users.php
@@ -145,6 +145,10 @@ class UsersLoader extends Storm_Model_Loader {
 
 
 class Class_Users extends Storm_Model_Abstract {
+	const MODE_CONTACT_MAIL = 'is_contact_mail';
+	const MODE_CONTACT_LETTER = 'is_contact_letter';
+	const MODE_CONTACT_SMS = 'is_contact_sms';
+
 	protected $_table_name = 'bib_admin_users';
 	protected $_table_primary = 'ID_USER';
   protected $_loader_class = 'UsersLoader';
@@ -286,6 +290,29 @@ class Class_Users extends Storm_Model_Abstract {
 	}
 
 
+
+	/**
+	 * @param mode string : 'is_contact_mail' | 'is_contact_sms' | 'is_contact_letter'
+	 */
+	public function setModeContact($mode_contact) {
+		switch ($mode_contact) {
+		case self::MODE_CONTACT_MAIL: $this->setIsContactMail(true)->setIsContactSms(false); break;
+		case self::MODE_CONTACT_SMS: $this->setIsContactMail(false)->setIsContactSms(true); break;
+		default: $user->setIsContactMail(false)->setIsContactSms(false);
+		}
+		return $this;
+	}
+
+
+	public function getModeContact() {
+		return $this->getIsContactMail()
+			? self::MODE_CONTACT_MAIL
+			: ($this->getIsContactSms() 
+				 ? self::MODE_CONTACT_SMS
+				 : self::MODE_CONTACT_LETTER);
+	}
+
+
 	/**
 	 * @return bool
 	 */
diff --git a/tests/application/modules/opac/controllers/AbonneControllerEditTest.php b/tests/application/modules/opac/controllers/AbonneControllerEditTest.php
index 29a11fab3ad428fc29ae63dcd4949c33f7faa962..2544d6eb37c584562a1f36562590c965b515fc48 100644
--- a/tests/application/modules/opac/controllers/AbonneControllerEditTest.php
+++ b/tests/application/modules/opac/controllers/AbonneControllerEditTest.php
@@ -25,13 +25,16 @@ abstract class AbonneControllerEditActionWithAbonneSIGBTestCase extends Abstract
 
 	public function setUp() {
 		parent::setUp();
+		$mock_emprunteur = Storm_Test_ObjectWrapper::mock();
+		$mock_emprunteur->whenCalled('updateFromUserAndSave')->answers(true);
 		
 		$this->_jerome = Class_Users::newInstanceWithId(4, ['login' => 'jm',
 																												'prenom' => 'Jerome',
 																												'is_contact_sms' => true,
 																												'idabon' => '12345',
 																												'id_site' => 1,
-																												'password' => 'secret'])->beAbonneSIGB();
+																												'password' => 'secret',
+																												'fiche_sigb' => ['fiche' => $mock_emprunteur]])->beAbonneSIGB();
 		ZendAfi_Auth::getInstance()->logUser($this->_jerome);
 
 		Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Users')
@@ -49,11 +52,12 @@ class AbonneControllerEditWithContactMailSmsPostTest extends AbonneControllerEdi
 		parent::setUp();
 
 		Class_AdminVar::newInstanceWithId('CHAMPS_FICHE_UTILISATEUR', 
-																			['valeur' => 'prenom;is_contact_mail;is_contact_sms;telephone']);
+																			['valeur' => 'prenom;mode_contact;telephone']);
 
 		$this->postDispatch('/abonne/edit',
 												['telephone' => '12 34 56',
-												 'is_contact_mail' => true,
+												 'mail' => 'mm@gmail.com',
+												 'mode_contact' => 'is_contact_mail',
 												 'prenom' => 'Marcel',
 												 'nom' => 'Mazout']);
 	}
@@ -95,7 +99,7 @@ class AbonneControllerEditWithContactMailSmsTest extends AbonneControllerEditAct
 		parent::setUp();
 
 		Class_AdminVar::newInstanceWithId('CHAMPS_FICHE_UTILISATEUR', 
-																			['valeur' => 'prenom;is_contact_mail;is_contact_sms;telephone']);
+																			['valeur' => 'prenom;mode_contact;telephone']);
 
 		$this->dispatch('/abonne/edit', true);
 	}
@@ -114,14 +118,20 @@ class AbonneControllerEditWithContactMailSmsTest extends AbonneControllerEditAct
 
 
 	/** @test */
-	public function checkboxIsContactSmsShouldBeChecked() {
-		$this->assertXPath('//input[@type="checkbox"][@name="is_contact_sms"][@checked="checked"]');
+	public function radioButtonIsContactSmsShouldBeChecked() {
+		$this->assertXPath('//input[@type="radio"][@name="mode_contact"][@value="is_contact_sms"][@checked="checked"]');
 	}
 
 
 	/** @test */
-	public function checkboxIsContactMailShouldNotBeChecked() {
-		$this->assertXPath('//input[@type="checkbox"][@name="is_contact_mail"][not(@checked)]');
+	public function radioButtonIsContactMailShouldNotBeChecked() {
+		$this->assertXPath('//input[@type="radio"][@name="mode_contact"][@value="is_contact_mail"][not(@checked)]');
+	}
+
+
+	/** @test */
+	public function radioButtonIsContactLetterShouldNotBeChecked() {
+		$this->assertXPath('//input[@type="radio"][@name="mode_contact"][@value="is_contact_letter"][not(@checked)]');
 	}
 
 
@@ -153,7 +163,7 @@ class AbonneControllerEditWithContactPasswordMailTest extends AbonneControllerEd
 
 	/** @test */
 	public function checkboxIsContactSmsShouldNotBePresent() {
-		$this->assertNotXPath('//input[@type="checkbox"][@name="is_contact_sms"]');
+		$this->assertNotXPath('//input[@type="radio"][@name="mode_contact"]');
 	}