diff --git a/library/Class/Users.php b/library/Class/Users.php
index 460bfb8ed30e08aa30d3465ff718b6219854f5ea..8377dc0f06303b2881f159dd12ca7c7ca3057f89 100644
--- a/library/Class/Users.php
+++ b/library/Class/Users.php
@@ -922,6 +922,13 @@ class Class_Users extends Storm_Model_Abstract {
 			return $cache_register;
 		}
 
+		if($this->subscriptionInProgress($email)) {
+			$cache_register['error'] = $this->_('Une demande d\'inscription est déjà en cours pour cet email.');
+			return $cache_register;
+		}
+
+
+
 		$user = Class_UsersNonValid::newInstance([
 			'login' => $email,
 			'password' => $this->randomPassword(),
@@ -934,6 +941,11 @@ class Class_Users extends Storm_Model_Abstract {
 	}
 
 
+	protected function subscriptionInProgress($email) {
+		return 0 < Class_UsersNonValid::countBy(['mail' => $email]);
+	}
+
+
 	protected function isEmailUnique($email) {
 		$users = Class_Users::getLoader()->findAllBy([
 			'where' => 'login = "'.$email.'" or mail = "'.$email.'"']);
@@ -967,7 +979,7 @@ class Class_Users extends Storm_Model_Abstract {
 		$message_mail[] = "http://".$_SERVER["SERVER_NAME"].BASE_URL.'/opac/auth/newsletter-active-user/c/'.$non_valid_user->getCle().'/id/'.$newsletter->getId();
 		$message_mail[] = $this->_('Si vous n\'êtes pas à l\'origine de cette demande d\'inscription, merci de ne pas tenir compte de cet e-mail, et l\'inscription ne sera pas activée.');
 		$message_mail[] = $this->_('Pour vous désincrire de la newsletter, merci de cliquer sur le lien suivant:');
-		$message_mail[] = "http://".$_SERVER["SERVER_NAME"].BASE_URL."/opac/abonne/unsubscribe-newsletter/" . $newsletter->getId();
+		$message_mail[] = "http://".$_SERVER["SERVER_NAME"].BASE_URL."/opac/auth/newsletter-unsubscribe/id/" . $newsletter->getId();
 
 
 		// envoi du mail de confirmation
diff --git a/library/Class/WebService/SIGB/Orphee/SessionStrategy.php b/library/Class/WebService/SIGB/Orphee/SessionStrategy.php
index 4d3f67aeb77afc3b34548883166cf36361932dc1..2b12933067ffbbbea4e0c2f79fe20f4d633a76ff 100644
--- a/library/Class/WebService/SIGB/Orphee/SessionStrategy.php
+++ b/library/Class/WebService/SIGB/Orphee/SessionStrategy.php
@@ -16,7 +16,7 @@
  *
  * 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 
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
  */
 
 class Class_WebService_SIGB_Orphee_SessionStrategy {
@@ -25,6 +25,9 @@ class Class_WebService_SIGB_Orphee_SessionStrategy {
 	protected $_session_id;
 
 	public static function newFrom($soapClient, $key) {
+		if(!$soapClient)
+			return new Class_WebService_SIGB_Orphee_SessionStrategyNull($soapClient, $key);
+
 		foreach(['GetToken', 'GetId'] as $strategy)
 			if ($soapClient->hasFunction($strategy)) {
 				$class_name = 'Class_WebService_SIGB_Orphee_SessionStrategy' . $strategy;
@@ -60,7 +63,7 @@ class Class_WebService_SIGB_Orphee_SessionStrategy {
 		return $this;
 	}
 
-	
+
 	public function isConnected() {
 		return !empty($this->_session_id);
 	}
@@ -92,7 +95,11 @@ class Class_WebService_SIGB_Orphee_SessionStrategyGetToken extends Class_WebServ
 }
 
 
-class Class_WebService_SIGB_Orphee_SessionStrategyNull extends Class_WebService_SIGB_Orphee_SessionStrategy{}
+class Class_WebService_SIGB_Orphee_SessionStrategyNull extends Class_WebService_SIGB_Orphee_SessionStrategy{
+	public function connect() {
+		return $this;
+	}
+}
 
 
 
diff --git a/tests/application/modules/opac/controllers/AuthControllerTest.php b/tests/application/modules/opac/controllers/AuthControllerTest.php
index 32a85cc3bf8707217662d3b336c788d6f0adf375..ad477fe9b173e13fc2f3bf196e168b2555974cf5 100644
--- a/tests/application/modules/opac/controllers/AuthControllerTest.php
+++ b/tests/application/modules/opac/controllers/AuthControllerTest.php
@@ -1675,6 +1675,12 @@ class AuthControllerPostRegisterNewsletterDailyNewsTest extends AuthControllerNo
 	public function mailShouldContainsAccountPassword() {
 		$this->assertContains('Votre mot de passe: ', $this->getSentMailContent());
 	}
+
+
+	/** @test */
+	public function unssubscribUrlShouldBeAsExpected() {
+		$this->assertContains('opac/auth/newsletter-unsubscribe/id/5', $this->getSentMailContent());
+	}
 }
 
 
@@ -1687,13 +1693,11 @@ class AuthControllerPostRegisterNewsletterDailyNewsWithNonUniqueMailTest extends
 
 	 Class_Users::beVolatile();
 
-	 Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Users')
-		 ->whenCalled('findAllBy')
-		 ->answers([	 $this->fixture('Class_Users',
-			 ['id' => 1,
-			 'login' => 'Tom',
-			 'password' => 'pwd',
-			 'mail' => 'imalreadyused@mail.unique'])]);
+	 $this->fixture('Class_Users',
+									['id' => 1,
+									 'login' => 'Tom',
+									 'password' => 'pwd',
+									 'mail' => 'imalreadyused@mail.unique']);
 
 	 Class_UsersNonValid::beVolatile();
 
@@ -1722,6 +1726,39 @@ class AuthControllerPostRegisterNewsletterDailyNewsWithNonUniqueMailTest extends
 
 
 
+class AuthControllerPostRegisterNewsletterDailyNewsWithNonUniqueMailFromNonValidUserTest extends AuthControllerNobodyLoggedTestCase {
+
+	public function setUp() {
+	 parent::setUp();
+
+	 Class_Users::beVolatile();
+
+	 $this->fixture('Class_UsersNonValid',
+									['id' => 1,
+									 'login' => 'imalreadyused@mail.unique',
+									 'password' => 'pwd',
+									 'mail' => 'imalreadyused@mail.unique']);
+
+	 $this->fixture('Class_Newsletter',
+	 ['id' => 5,
+	 'titre' => 'Daily News']);
+
+	 $this->postDispatch('/opac/auth/newsletter-register/id/5', [
+		 'email' => 'imalreadyused@mail.unique',
+		 'emailCheck' => '']);
+ }
+
+
+	/** @test */
+	public function shouldReturnSubscriptionInProgressMessage() {
+		$this->assertXPathContentContains('//span[@class="error"]',
+		"Une demande d'inscription est déjà en cours pour cet email.");
+	}
+}
+
+
+
+
 class AuthControllerNewsletterActiveUserWithWrongParamsTest extends AuthControllerNoBodyLoggedTestCase {
 	public function setUp() {
 		parent::setUp();