Index: /quintagroup.plonecaptchas/trunk/docs/HISTORY.txt
===================================================================
--- /quintagroup.plonecaptchas/trunk/docs/HISTORY.txt	(revision 3456)
+++ /quintagroup.plonecaptchas/trunk/docs/HISTORY.txt	(revision 3457)
@@ -1,4 +1,10 @@
 Changelog
 =========
+
+4.3-dev (unreleased)
+----------------
+
+* implemented Captcha Provider feature.
+* added ability to include other captcha plugins who provides ICaptchaProvider.
 
 4.2 - Apr 20, 2012
Index: /quintagroup.plonecaptchas/trunk/quintagroup/plonecaptchas/captcha.py
===================================================================
--- /quintagroup.plonecaptchas/trunk/quintagroup/plonecaptchas/captcha.py	(revision 3456)
+++ /quintagroup.plonecaptchas/trunk/quintagroup/plonecaptchas/captcha.py	(revision 3457)
@@ -3,10 +3,15 @@
 from plone.app.discussion import vocabularies
 from zope.schema.vocabulary import SimpleVocabulary, SimpleTerm
-from z3c.form import interfaces
-from quintagroup.plonecaptchas.config import CAPTCHA_NAME
 from quintagroup.plonecaptchas.interfaces import IQGDiscussionCaptchas
+from quintagroup.plonecaptchas.interfaces import ICaptchaProvider
 from zope.interface import Interface
-from zope.component import adapts
+from zope.component import adapts, getUtilitiesFor, queryUtility
 from plone.app.discussion.browser.comments import CommentForm
+
+
+class CaptchaProvider(object):
+
+    def __init__(self):
+        self.widget_factory = CaptchaWidgetFactory
 
 
@@ -16,7 +21,10 @@
     def update(self):
         super(CaptchaExtender, self).update()
-        if self.captcha == CAPTCHA_NAME and self.isAnon:
-            self.form.fields['captcha'].widgetFactory = CaptchaWidgetFactory
-            if self.form.fields['captcha'].mode == interfaces.HIDDEN_MODE:
+        if self.isAnon:
+            captcha_provider = queryUtility(ICaptchaProvider,
+                                            name=self.captcha)
+            if captcha_provider:
+                self.form.fields['captcha'].widgetFactory = \
+                                                captcha_provider.widget_factory
                 self.form.fields['captcha'].mode = None
 
@@ -25,6 +33,11 @@
     """ Extend captcha vocabulary with quintagroup.plonecaptchas"""
     terms = vocabularies.captcha_vocabulary(context)._terms
-    terms.append(SimpleTerm(value=CAPTCHA_NAME,
-                            token=CAPTCHA_NAME,
-                            title=CAPTCHA_NAME))
+    captchas = set((t.value for t in terms))
+
+    providers = getUtilitiesFor(ICaptchaProvider)
+    for name, util in providers:
+        if name and name not in captchas:
+            terms.append(SimpleTerm(value=name,
+                                    token=name,
+                                    title=name.capitalize()))
     return SimpleVocabulary(terms)
Index: /quintagroup.plonecaptchas/trunk/quintagroup/plonecaptchas/configure.zcml
===================================================================
--- /quintagroup.plonecaptchas/trunk/quintagroup/plonecaptchas/configure.zcml	(revision 3456)
+++ /quintagroup.plonecaptchas/trunk/quintagroup/plonecaptchas/configure.zcml	(revision 3457)
@@ -26,4 +26,10 @@
 
     <configure zcml:condition="installed plone.app.discussion">
+
+        <utility
+            factory=".captcha.CaptchaProvider"
+            provides="quintagroup.plonecaptchas.interfaces.ICaptchaProvider"
+            name="plonecaptchas"
+            />
 
         <adapter
Index: /quintagroup.plonecaptchas/trunk/quintagroup/plonecaptchas/interfaces.py
===================================================================
--- /quintagroup.plonecaptchas/trunk/quintagroup/plonecaptchas/interfaces.py	(revision 3456)
+++ /quintagroup.plonecaptchas/trunk/quintagroup/plonecaptchas/interfaces.py	(revision 3457)
@@ -4,4 +4,5 @@
 if HAS_APP_DISCUSSION:
     from zope.publisher.interfaces.browser import IDefaultBrowserLayer
+    from zope.interface import Interface, Attribute
 
     class IQGDiscussionCaptchas(IDefaultBrowserLayer):
@@ -10,4 +11,13 @@
         """
 
+    try:
+        from plone.app.discussion.interfaces import ICaptchaProvider
+        ICaptchaProvider  # keep pyflakes quiet
+    except ImportError:
+        class ICaptchaProvider(Interface):
+            """ Captcha Provider
+            """
+            widget_factory = Attribute("Chaptcha widget factory")
+
 
 class IQGPloneCaptchas(IDefaultPloneLayer):
Index: /quintagroup.plonecaptchas/trunk/quintagroup/plonecaptchas/meta.zcml
===================================================================
--- /quintagroup.plonecaptchas/trunk/quintagroup/plonecaptchas/meta.zcml	(revision 3456)
+++ /quintagroup.plonecaptchas/trunk/quintagroup/plonecaptchas/meta.zcml	(revision 3457)
@@ -6,5 +6,9 @@
          can be used by plone.app.discussion to add a Captcha field to comment 
          forms. -->
-    <meta:provides feature="plone.app.discussion-captcha" />
+
+    <configure zcml:condition="installed plone.app.discussion">
+        <meta:provides feature="plone.app.discussion-captcha" />
+        <meta:provides feature="plone.app.discussion-captcha-provider" />
+    </configure>
     
 </configure>
Index: /quintagroup.plonecaptchas/trunk/quintagroup/plonecaptchas/version.txt
===================================================================
--- /quintagroup.plonecaptchas/trunk/quintagroup/plonecaptchas/version.txt	(revision 3456)
+++ /quintagroup.plonecaptchas/trunk/quintagroup/plonecaptchas/version.txt	(revision 3457)
@@ -1,1 +1,1 @@
-4.2
+4.3-dev
Index: /quintagroup.plonecaptchas/trunk/setup.py
===================================================================
--- /quintagroup.plonecaptchas/trunk/setup.py	(revision 3456)
+++ /quintagroup.plonecaptchas/trunk/setup.py	(revision 3457)
@@ -2,5 +2,5 @@
 import os
 
-version = '4.2'
+version = '4.3-dev'
 
 setup(name='quintagroup.plonecaptchas',
