Index: main/plugin-sms/src/org/ametys/plugins/sms/service/SubscribeGenerator.java
===================================================================
--- main/plugin-sms/src/org/ametys/plugins/sms/service/SubscribeGenerator.java	(revision 29736)
+++ main/plugin-sms/src/org/ametys/plugins/sms/service/SubscribeGenerator.java	(working copy)
@@ -35,8 +35,10 @@
 import org.ametys.plugins.sms.dao.JCRSubscribersList;
 import org.ametys.plugins.sms.dao.SubscriberListsDAO;
 import org.ametys.runtime.config.Config;
+import org.ametys.web.pageaccess.PageAccessManager;
 import org.ametys.web.repository.page.Page;
 import org.ametys.web.repository.page.ZoneItem;
+import org.ametys.web.site.SiteConfigurationExtensionPoint;
 
 
 /**
@@ -49,12 +51,20 @@
     
     private AmetysObjectResolver _resolver;
     
+    /** The page access manager */
+    protected PageAccessManager _accessManager;
+    
+    /** The site configuration */
+    protected SiteConfigurationExtensionPoint _siteConfiguration;
+    
     @Override
     public void service(ServiceManager serviceManager) throws ServiceException
     {
         super.service(serviceManager);
         _subscriberListDAO = (SubscriberListsDAO) serviceManager.lookup(SubscriberListsDAO.ROLE);
         _resolver = (AmetysObjectResolver) serviceManager.lookup(AmetysObjectResolver.ROLE);
+        _accessManager = (PageAccessManager) serviceManager.lookup(PageAccessManager.ROLE);
+        _siteConfiguration = (SiteConfigurationExtensionPoint) serviceManager.lookup(SiteConfigurationExtensionPoint.ROLE);
     }
 
     @Override
@@ -122,9 +132,34 @@
             XMLUtils.createElement(contentHandler, "list", attr, subList.getTitle());
         }
       
-        XMLUtils.endElement(contentHandler, "lists");        
+        XMLUtils.endElement(contentHandler, "lists");
+        
+        XMLUtils.startElement(contentHandler, "page-info");
+        XMLUtils.createElement(contentHandler, "has-captcha", _hasCaptcha(request) ? "true" : "false");
+        XMLUtils.endElement(contentHandler, "page-info");
+        
         XMLUtils.endElement(contentHandler, "form");
         
         contentHandler.endDocument();
     }
+    
+    private boolean _hasCaptcha(Request request)
+    {
+        Page page = (Page) request.getAttribute(Page.class.getName());
+        String siteName = (String) request.getAttribute("site");
+        
+        String displayCaptcha = _siteConfiguration.getValueAsString(siteName, "display-captcha");
+        boolean hasCaptcha;
+        
+        if (displayCaptcha.equals("restricted")) 
+        {
+            hasCaptcha = !_accessManager.getAccessInfo(page).isRestricted(); 
+        }
+        else 
+        {
+            hasCaptcha = displayCaptcha.equals("always");
+        }
+        
+        return hasCaptcha;
+    }
 }
Index: main/plugin-sms/src/org/ametys/plugins/sms/service/SubscribeAction.java
===================================================================
--- main/plugin-sms/src/org/ametys/plugins/sms/service/SubscribeAction.java	(revision 29736)
+++ main/plugin-sms/src/org/ametys/plugins/sms/service/SubscribeAction.java	(working copy)
@@ -34,11 +34,15 @@
 
 import org.ametys.plugins.repository.AmetysObjectResolver;
 import org.ametys.plugins.sms.dao.SubscribeDAO;
+import org.ametys.plugins.sms.dao.SubscriberListsDAO;
 import org.ametys.runtime.captcha.CaptchaHelper;
 import org.ametys.runtime.config.Config;
 import org.ametys.runtime.util.I18nizableText;
 import org.ametys.runtime.util.cocoon.ActionResultGenerator;
+import org.ametys.web.pageaccess.PageAccessManager;
+import org.ametys.web.repository.page.Page;
 import org.ametys.web.repository.page.ZoneItem;
+import org.ametys.web.site.SiteConfigurationExtensionPoint;
 
 /**
  * Add or remove the phone number into a list
@@ -54,12 +58,20 @@
     /** Subscribe DAO. */
     protected SubscribeDAO _subscribeDAO;
     
+    /** The page access manager */
+    protected PageAccessManager _accessManager;
+    
+    /** The site configuration */
+    protected SiteConfigurationExtensionPoint _siteConfiguration;
+    
     @Override
     public void service(ServiceManager serviceManager) throws ServiceException
     {
         super.service(serviceManager);
         _resolver = (AmetysObjectResolver) serviceManager.lookup(AmetysObjectResolver.ROLE);
         _subscribeDAO = (SubscribeDAO) serviceManager.lookup(SubscribeDAO.ROLE);
+        _accessManager = (PageAccessManager) serviceManager.lookup(PageAccessManager.ROLE);
+        _siteConfiguration = (SiteConfigurationExtensionPoint) serviceManager.lookup(SiteConfigurationExtensionPoint.ROLE);
     }
     
     public Map act(Redirector redirector, SourceResolver resolver, Map objectModel, String source, Parameters parameters) throws Exception
@@ -69,8 +81,6 @@
 
         Request request = ObjectModelHelper.getRequest(objectModel);
         
-        String captchaKey = request.getParameter("captcha-key");
-        String captchaValue = request.getParameter("captcha-value");
         String phoneNumber = request.getParameter("phone");
         
         String zoneId = request.getParameter("zone-id");
@@ -101,11 +111,17 @@
                 errors.add(new I18nizableText("plugin.sms", "PLUGINS_SMS_SUBSCRIBTION_SERVICE_FORM_ERROR_DIRECTORY"));
             }
         }
-        
-        // We check if the captcha is correct
-        if (captchaKey == null || captchaValue == null || !CaptchaHelper.checkAndInvalidate(captchaKey, captchaValue)) 
+
+        if (_hasCaptcha(request, zone.getZone().getPage()))
         {
-            errors.add(new I18nizableText("plugin.sms", "PLUGINS_SMS_SUBSCRIBTION_SERVICE_FORM_ERROR_CAPTCHA"));
+            String captchaKey = request.getParameter("captcha-key");
+            String captchaValue = request.getParameter("captcha-value");
+        
+            // We check if the captcha is correct
+            if (captchaKey == null || captchaValue == null || !CaptchaHelper.checkAndInvalidate(captchaKey, captchaValue)) 
+            {
+                errors.add(new I18nizableText("plugin.sms", "PLUGINS_SMS_SUBSCRIBTION_SERVICE_FORM_ERROR_CAPTCHA"));
+            }
         }
         
         // We check if the phone number is correct
@@ -237,4 +253,23 @@
         
         return false;
     }
+    
+    private boolean _hasCaptcha(Request request, Page page)
+    {
+        String siteName = page.getSiteName();
+        
+        String displayCaptcha = _siteConfiguration.getValueAsString(siteName, "display-captcha");
+        boolean hasCaptcha;
+        
+        if (displayCaptcha.equals("restricted")) 
+        {
+            hasCaptcha = !_accessManager.getAccessInfo(page).isRestricted(); 
+        }
+        else 
+        {
+            hasCaptcha = displayCaptcha.equals("always");
+        }
+        
+        return hasCaptcha;
+    }
 }
Index: main/plugin-sms/pages/services/subscribe/subscribe_1.2.xsl
===================================================================
--- main/plugin-sms/pages/services/subscribe/subscribe_1.2.xsl	(revision 29736)
+++ main/plugin-sms/pages/services/subscribe/subscribe_1.2.xsl	(working copy)
@@ -119,8 +119,12 @@
 				<xsl:if test="count(/form/lists/list) > 0">	   		
 		   			<xsl:call-template name="smsList-form-field-lists"/> 
 			   		<xsl:call-template name="smsList-form-field-phone"/> 
-					<xsl:call-template name="smsList-form-field-register"/> 	   			
-					<xsl:call-template name="smsList-form-field-captcha"/>
+					<xsl:call-template name="smsList-form-field-register"/>
+					
+					<xsl:if test="/form/page-info/has-captcha = 'true'">	   			
+					   <xsl:call-template name="smsList-form-field-captcha"/>
+					</xsl:if>
+					
 					<xsl:call-template name="smsList-form-field-submit"/>
 				</xsl:if>
 			</form>
@@ -138,12 +142,19 @@
                 function smsList_form_submit_<xsl:value-of select="$uniqueId"/>()
                 {                    
                     var phone =  $j('#smsList-<xsl:value-of select="$uniqueId"/>-phone');
-                    var captchaKey = $j('#smsList-<xsl:value-of select="$uniqueId"/>-captcha-key');
-                    var captchaInput = $j('#smsList-<xsl:value-of select="$uniqueId"/>-captcha');
                     var zoneId = $j('#smsList-<xsl:value-of select="$uniqueId"/>-zone-id');
                     var list = $j('#smsList-<xsl:value-of select="$uniqueId"/>-list');
                     var register = $j('#smsList-<xsl:value-of select="$uniqueId"/>-register');
                     
+                    var captchaKey;
+                    var captchaInput;
+                    var hasCaptcha = '<xsl:value-of select="/form/page-info/has-captcha" />'; 
+                    if (hasCaptcha == "true")
+                    {
+                        captchaKey = $j('#smsList-<xsl:value-of select="$uniqueId"/>-captcha-key');
+                        captchaInput = $j('#smsList-<xsl:value-of select="$uniqueId"/>-captcha');
+                    }
+                    
                     var errors = false;
                     
                     if (/^\s*$/.test(phone.val()))
@@ -176,29 +187,36 @@
                         list.parentsUntil('.field').parent().removeClass('error');
                     }
                     
-                    if (!/^[a-z]{6}$/.test(captchaInput.val()))
-                    {
-                        errors = true;
-                        captchaInput.parentsUntil('.field').parent().addClass('error');
-                    }
-                    else
+                    if (hasCaptcha == "true")
                     {
-                        captchaInput.parentsUntil('.field').parent().removeClass('error');
+	                    if (!/^[a-z]{6}$/.test(captchaInput.val()))
+	                    {
+	                        errors = true;
+	                        captchaInput.parentsUntil('.field').parent().addClass('error');
+	                    }
+	                    else
+	                    {
+	                        captchaInput.parentsUntil('.field').parent().removeClass('error');
+	                    }
                     }
-
+                    
                     if (!errors)
                     {
                         // send it in ajax
                         var data = {
                             "phone": phone.val(),
-                            "captcha-key": captchaKey.val(),
-                            "captcha-value": captchaInput.val(),
                             "zone-id": zoneId.val(),
                             "list": list.val(),
                             "register": register.val(),
                             "ajax": "true"
                         };
 
+                        if (hasCaptcha == "true")
+                        {
+                            data["captcha-key"] = captchaKey.val();
+                            data["captcha-value"] = captchaInput.val();
+                        }
+
 						function result(data)
                         {
                             var s = "";
@@ -241,7 +259,11 @@
                             {
                                 alert(s);
                             }
-                            refresh_smsList_<xsl:value-of select="$uniqueId"/>();
+                            
+                            if (hasCaptcha == "true")
+                            {
+                                refresh_smsList_<xsl:value-of select="$uniqueId"/>();
+                            }
                         }
                         
                         function handleError(jqXHR, textStatus, errorThrown)
