diff --git a/product/ERP5Wizard/Tool/IntrospectionTool.py b/product/ERP5Wizard/Tool/IntrospectionTool.py
index 18d4ddb485703f0282a80f9fb4254cf24280d8a2..ca90a523e4f1a0186737c92ab025cc0ad551920f 100644
--- a/product/ERP5Wizard/Tool/IntrospectionTool.py
+++ b/product/ERP5Wizard/Tool/IntrospectionTool.py
@@ -45,7 +45,7 @@ class IntrospectionTool(BaseTool):
 
   meta_type = 'ERP5 Introspection Tool'
   portal_type = 'Introspection Tool'
-  allowed_content_types = ('Anonymized Introspection Report', 'User Introspection Report', )
+  allowed_content_types = ('Anonymized Introspection Report', 'User Introspection Report',)
   
   security = ClassSecurityInfo()
   security.declareProtected(Permissions.ManagePortal, 'manage_overview')
diff --git a/product/ERP5Wizard/Tool/WizardTool.py b/product/ERP5Wizard/Tool/WizardTool.py
index f03ebe488485177937e534a184a12c2762c38d70..58dc55e8dfa34fa26eeeadb1e45213e653c1149f 100644
--- a/product/ERP5Wizard/Tool/WizardTool.py
+++ b/product/ERP5Wizard/Tool/WizardTool.py
@@ -47,6 +47,7 @@ from DateTime import DateTime
 from Products.PluggableAuthService.interfaces.plugins import IAuthenticationPlugin
 from Products.ERP5Type.Cache import CachingMethod
 from urlparse import urlparse
+from Products.ERP5Wizard.WebServiceMixIn import WebServiceMixIn
 
 # global (RAM) cookie storage
 cookiejar = cookielib.CookieJar()
@@ -169,7 +170,7 @@ _server_to_preference_ids_map = {'client_id': 'preferred_express_client_uid',
                                  'user_id': 'preferred_express_user_id',}
 
 
-class WizardTool(BaseTool):
+class WizardTool(BaseTool, WebServiceMixIn):
   """ WizardTool is able to generate custom business templates. """
 
   id = 'portal_wizard'
diff --git a/product/ERP5Wizard/WebServiceMixIn.py b/product/ERP5Wizard/WebServiceMixIn.py
new file mode 100644
index 0000000000000000000000000000000000000000..374ebd7607b76ec7245bef99b92dbaff62a6385e
--- /dev/null
+++ b/product/ERP5Wizard/WebServiceMixIn.py
@@ -0,0 +1,47 @@
+##############################################################################
+#
+# Copyright (c) 2006 Nexedi SARL and Contributors. All Rights Reserved.
+#                    Ivan Tyagov <ivan@nexedi.com>
+#
+# WARNING: This program as such is intended to be used by professional
+# programmers who take the whole responsability of assessing all potential
+# consequences resulting from its eventual inadequacies and bugs
+# End users who are looking for a ready-to-use solution with commercial
+# garantees and support are strongly adviced to contract a Free Software
+# Service Company
+#
+# This program is Free Software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+##############################################################################
+
+from AccessControl import ClassSecurityInfo
+from Products.ERP5Type import Permissions
+
+
+class WebServiceMixIn:
+  """
+  Do all kinds of web services in all kinds of protocols.
+  """
+
+  security = ClassSecurityInfo()
+
+  security.declareProtected('connect', Permissions.ManagePortal)
+  def connect(self, url, user=None, password=None, authentication_method=None):
+    """
+    Connect to remote instances
+    of any kind of web service (not only ERP5) with many
+    different kinds of authentication.
+    """
+    pass
\ No newline at end of file
diff --git a/product/ERP5Wizard/__init__.py b/product/ERP5Wizard/__init__.py
index e335b48e9ca083ec577b34a4e68a5c8191e8a5d7..4484a2f3f2b715c39b4e6568db80c1491528a954 100644
--- a/product/ERP5Wizard/__init__.py
+++ b/product/ERP5Wizard/__init__.py
@@ -68,4 +68,4 @@ def initialize(context):
                             addERP5RemoteUserManager, )
                          , visibility=None
                          , icon='dtml/remote_user_manager_plugin.gif'
-                         )  
+                         )
diff --git a/product/ERP5Wizard/transport/SOAPConnection.py b/product/ERP5Wizard/transport/SOAPConnection.py
new file mode 100644
index 0000000000000000000000000000000000000000..36c9c7aa510e562b226fc11637808e5770122a86
--- /dev/null
+++ b/product/ERP5Wizard/transport/SOAPConnection.py
@@ -0,0 +1,5 @@
+class SOAPConnection(self):
+  """
+    Holds a SOAP connection
+  """
+  pass
\ No newline at end of file
diff --git a/product/ERP5Wizard/transport/XMLRPCConnection.py b/product/ERP5Wizard/transport/XMLRPCConnection.py
new file mode 100644
index 0000000000000000000000000000000000000000..34541d394e80c98113d08bf25ea7940d029ec2a8
--- /dev/null
+++ b/product/ERP5Wizard/transport/XMLRPCConnection.py
@@ -0,0 +1,5 @@
+class XMLRPCConnection(self):
+  """
+    Holds an XML-RPC connection
+  """
+  pass
diff --git a/product/ERP5Wizard/transport/__init__.py b/product/ERP5Wizard/transport/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391