[pytango] 04/09: Imported Upstream version 8.1.1~rc1

Frédéric-Emmanuel Picca picca at moszumanska.debian.org
Thu Nov 28 07:43:04 UTC 2013


This is an automated email from the git hooks/post-receive script.

picca pushed a commit to branch master
in repository pytango.

commit 3a261078e813d43cd26914ee03b73788c795a94e
Author: Picca Frédéric-Emmanuel <picca at debian.org>
Date:   Fri Nov 22 20:20:16 2013 +0100

    Imported Upstream version 8.1.1~rc1
---
 IPython/Extensions/ipy_profile_tango.py            |  34 +-
 IPython/config/profile/tango/ipython_config.py     |  32 +-
 PKG-INFO                                           |   4 +-
 doc/WINDOWS-COMPILATION-EXAMPLE.TXT                |  38 -
 doc/_static/banner.png                             | Bin 427830 -> 0 bytes
 doc/_static/banner1.png                            | Bin 0 -> 335135 bytes
 doc/_static/banner2.png                            | Bin 0 -> 89184 bytes
 doc/_static/banner3.png                            | Bin 0 -> 108825 bytes
 doc/_static/boost_python_install.py                |  43 +-
 doc/_static/green_python.png                       | Bin 0 -> 603593 bytes
 doc/_static/green_python_original.png              | Bin 0 -> 1684994 bytes
 doc/_static/slideshow.js                           |  33 +
 doc/_templates/index.html                          | 174 ++++-
 doc/_templates/indexsidebar.html                   |   4 +-
 doc/_templates/layout.html                         |  13 -
 doc/api.rst                                        |   3 +
 doc/client/index.rst                               |   4 +-
 doc/client/miscellaneous.rst                       | 290 +++++++-
 doc/client/other.rst                               |   5 +-
 doc/conf.py                                        |  77 +-
 doc/data_types.rst                                 | 200 +++++
 doc/database.rst                                   |   4 +-
 doc/encoded.rst                                    |   6 +-
 doc/itango/features.rst                            |   2 -
 doc/itango/highlights.rst                          |   3 +-
 doc/itango/index.rst                               |   5 -
 doc/quicktour.rst                                  |   7 +-
 doc/revision.rst                                   | 450 ++++++------
 doc/server/index.rst                               | 266 +------
 doc/server/server.rst                              | 109 +++
 doc/sphinxext/ipython_console_highlighting.py      |  34 +-
 doc/start.rst                                      | 390 ++--------
 doc/tep/tep-0001.rst                               |  55 +-
 doc/utilities.rst                                  |   3 -
 doc/windows_notes.txt                              | 156 ++++
 scripts/itango                                     |  32 +-
 scripts/winpostinstall.py                          |  75 --
 setup.py                                           | 505 ++++++-------
 src/boost/cpp/api_util.cpp                         |  28 +-
 src/boost/cpp/archive_event_info.cpp               |  29 +-
 src/boost/cpp/attr_conf_event_data.cpp             |  29 +-
 src/boost/cpp/attribute_alarm_info.cpp             |  29 +-
 src/boost/cpp/attribute_dimension.cpp              |  28 +-
 src/boost/cpp/attribute_event_info.cpp             |  29 +-
 src/boost/cpp/attribute_info.cpp                   |  29 +-
 src/boost/cpp/attribute_info_ex.cpp                |  29 +-
 src/boost/cpp/attribute_proxy.cpp                  |  32 +-
 src/boost/cpp/base_types.cpp                       |  40 +-
 src/boost/cpp/base_types_numpy.hpp                 |  32 +-
 src/boost/cpp/callback.cpp                         |  32 +-
 src/boost/cpp/callback.h                           |  32 +-
 src/boost/cpp/change_event_info.cpp                |  29 +-
 src/boost/cpp/command_info.cpp                     |  28 +-
 src/boost/cpp/connection.cpp                       |  32 +-
 src/boost/cpp/constants.cpp                        | 191 ++---
 src/boost/cpp/data_ready_event_data.cpp            |  28 +-
 src/boost/cpp/database.cpp                         |  91 ++-
 src/boost/cpp/db.cpp                               |  72 +-
 src/boost/cpp/defs.h                               |  35 +-
 src/boost/cpp/dev_command_info.cpp                 |  28 +-
 src/boost/cpp/dev_error.cpp                        |  83 ++-
 src/boost/cpp/device_attribute.cpp                 |  35 +-
 src/boost/cpp/device_attribute.h                   |  34 +-
 src/boost/cpp/device_attribute_config.cpp          |  46 +-
 src/boost/cpp/device_attribute_history.cpp         |  32 +-
 src/boost/cpp/device_attribute_numpy.hpp           |  44 +-
 src/boost/cpp/device_data.cpp                      |  39 +-
 src/boost/cpp/device_data_history.cpp              |  28 +-
 src/boost/cpp/device_info.cpp                      |  28 +-
 src/boost/cpp/device_proxy.cpp                     |  49 +-
 src/boost/cpp/enums.cpp                            |  32 +-
 src/boost/cpp/event_data.cpp                       |  28 +-
 src/boost/cpp/exception.cpp                        |  32 +-
 src/boost/cpp/exception.h                          |  28 +-
 src/boost/cpp/fast_from_py.h                       |  55 +-
 src/boost/cpp/fast_from_py_numpy.hpp               |  28 +-
 src/boost/cpp/from_py.cpp                          |  28 +-
 src/boost/cpp/from_py.h                            |  32 +-
 src/boost/cpp/group.cpp                            |  28 +-
 src/boost/cpp/group_reply.cpp                      |  28 +-
 src/boost/cpp/group_reply_list.cpp                 |  28 +-
 src/boost/cpp/locker_info.cpp                      |  28 +-
 src/boost/cpp/locking_thread.cpp                   |  28 +-
 src/boost/cpp/periodic_event_info.cpp              |  29 +-
 src/boost/cpp/poll_device.cpp                      |  28 +-
 src/boost/cpp/precompiled_header.cpp               |  28 +-
 src/boost/cpp/precompiled_header.hpp               |  29 +-
 src/boost/cpp/pytango.cpp                          |  32 +-
 src/boost/cpp/pytgutils.cpp                        |  28 +-
 src/boost/cpp/pytgutils.h                          |  28 +-
 src/boost/cpp/pyutils.cpp                          |  32 +-
 src/boost/cpp/pyutils.h                            |  32 +-
 src/boost/cpp/server/attr.cpp                      |  28 +-
 src/boost/cpp/server/attr.h                        |  32 +-
 src/boost/cpp/server/attribute.cpp                 |  34 +-
 src/boost/cpp/server/attribute.h                   |  32 +-
 src/boost/cpp/server/command.cpp                   |  32 +-
 src/boost/cpp/server/command.h                     |  32 +-
 src/boost/cpp/server/device_class.cpp              |  32 +-
 src/boost/cpp/server/device_class.h                |  32 +-
 src/boost/cpp/server/device_impl.cpp               |  57 +-
 src/boost/cpp/server/device_impl.h                 |  32 +-
 src/boost/cpp/server/dserver.cpp                   |  35 +-
 src/boost/cpp/server/encoded_attribute.cpp         |  31 +-
 src/boost/cpp/server/log4tango.cpp                 |  28 +-
 src/boost/cpp/server/multi_attribute.cpp           |  28 +-
 src/boost/cpp/server/multi_class_attribute.cpp     |  28 +-
 src/boost/cpp/server/subdev.cpp                    |  28 +-
 src/boost/cpp/server/tango_util.cpp                |  67 +-
 src/boost/cpp/server/user_default_attr_prop.cpp    |  28 +-
 src/boost/cpp/server/wattribute.cpp                | 123 +++-
 src/boost/cpp/server/wattribute_numpy.hpp          |  28 +-
 src/boost/cpp/tango_numpy.h                        |  32 +-
 src/boost/cpp/tgutils.h                            |  32 +-
 src/boost/cpp/time_val.cpp                         |  28 +-
 src/boost/cpp/to_py.cpp                            |  28 +-
 src/boost/cpp/to_py.h                              |  32 +-
 src/boost/cpp/to_py_numpy.hpp                      |  28 +-
 src/boost/cpp/version.cpp                          |  28 +-
 src/boost/python/__init__.py                       |  49 +-
 src/boost/python/api2.py                           | 605 ---------------
 src/boost/python/api_util.py                       |  32 +-
 src/boost/python/attr_data.py                      |  70 +-
 src/boost/python/attribute_proxy.py                | 107 ++-
 src/boost/python/base_types.py                     | 257 ++++++-
 src/boost/python/callback.py                       |  32 +-
 src/boost/python/client.py                         |  18 +
 src/boost/python/connection.py                     |  57 +-
 src/boost/python/databaseds/database.py            | 772 ++++++++++---------
 src/boost/python/databaseds/db_access.py           | 216 ++++--
 src/boost/python/db.py                             | 198 ++++-
 src/boost/python/device_attribute.py               |  32 +-
 src/boost/python/device_class.py                   |  32 +-
 src/boost/python/device_data.py                    |  32 +-
 src/boost/python/device_proxy.py                   | 632 +++++++++++-----
 src/boost/python/device_server.py                  |  32 +-
 src/boost/python/encoded_attribute.py              |  90 +--
 src/boost/python/exception.py                      |  58 +-
 src/boost/python/futures.py                        | 109 +++
 src/boost/python/gevent.py                         | 109 +++
 src/boost/python/globals.py                        |  32 +-
 src/boost/python/green.py                          | 163 ++++
 src/boost/python/group.py                          |  36 +-
 src/boost/python/group_reply.py                    |  32 +-
 src/boost/python/group_reply_list.py               |  32 +-
 src/boost/python/ipython/__init__.py               |  62 +-
 src/boost/python/ipython/common.py                 | 123 +---
 src/boost/python/ipython/eventlogger.py            |  32 +-
 src/boost/python/ipython/ipython_00_10/__init__.py |  32 +-
 .../python/ipython/ipython_00_10/ipy_install.py    |  32 +-
 src/boost/python/ipython/ipython_00_10/ipy_qt.py   |  32 +-
 .../python/ipython/ipython_00_10/ipython_00_10.py  |  40 +-
 src/boost/python/ipython/ipython_00_11/__init__.py |  35 +-
 .../python/ipython/ipython_00_11/ipy_install.py    |  42 +-
 .../python/ipython/ipython_00_11/ipython_00_11.py  |  45 +-
 src/boost/python/ipython/ipython_10_00/__init__.py |  18 +
 .../ipy_install.py                                 |  42 +-
 .../ipython_10_00.py}                              |  56 +-
 src/boost/python/log4tango.py                      |  32 +-
 src/boost/python/pytango_init.py                   |  81 +-
 src/boost/python/pytango_pprint.py                 |  32 +-
 src/boost/python/pyutil.py                         |  32 +-
 src/boost/python/release.py                        |  38 +-
 src/boost/python/server.py                         | 817 +++++++++++++++++++++
 src/boost/python/tango_futures.py                  |  43 ++
 src/boost/python/tango_gevent.py                   |  28 +
 src/boost/python/tango_numpy.py                    |  32 +-
 src/boost/python/time_val.py                       |  32 +-
 src/boost/python/utils.py                          | 472 ++++++------
 src/sip/AttributeInfo.sip                          | 102 +++
 src/sip/CommandInfo.sip                            | 119 +++
 src/sip/{database.sip => Database.sip}             |  32 +-
 src/sip/DbData.sip                                 |  12 +
 src/sip/DbDatum.sip                                | 187 +++++
 src/sip/DbDevImportInfo.sip                        |  25 +
 src/sip/DbDevInfo.sip                              |  24 +
 src/sip/DeviceAttributeConfig.sip                  |  38 +
 src/sip/DeviceInfo.sip                             |  24 +
 src/sip/DeviceProxy.sip                            | 221 ++++++
 src/sip/Makefile                                   |  58 ++
 src/sip/Tango.sip                                  |  47 ++
 src/sip/__init_tango.py                            |  65 ++
 src/sip/configure.py                               |  42 +-
 src/sip/connection.sip                             |  32 +-
 src/sip/constants.sip                              |  34 +-
 src/sip/dbdatum.sip                                | 123 ----
 src/sip/deviceproxy.sip                            | 232 ------
 src/{boost/python => sip}/release.py               |  38 +-
 src/sip/setup.cfg                                  |   2 +
 src/sip/setup.py                                   | 297 ++++++++
 src/sip/{stdutils.sip => std_utils.sip}            |  50 +-
 src/sip/tango.sip                                  |  31 -
 src/swig/Makefile                                  | 106 +++
 src/swig/deviceproxy.i                             | 224 ++++++
 src/swig/tango.i                                   |  21 +
 win/PyTango_VS10/PyTango.props                     |  11 +-
 win/PyTango_VS10/PyTango.sln                       |  12 +-
 win/PyTango_VS9/PyTango.sln                        |  60 +-
 win/PyTango_VS9/PyTango.vcproj                     |   1 +
 win/PyTango_VS9/PyTango.vsprops                    |  11 +-
 winsetup.py                                        |  57 +-
 201 files changed, 8155 insertions(+), 6297 deletions(-)

diff --git a/IPython/Extensions/ipy_profile_tango.py b/IPython/Extensions/ipy_profile_tango.py
index eb4b79d..d54ef2c 100644
--- a/IPython/Extensions/ipy_profile_tango.py
+++ b/IPython/Extensions/ipy_profile_tango.py
@@ -1,25 +1,13 @@
-################################################################################
-##
-## This file is part of PyTango, a python binding for Tango
-## 
-## http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## PyTango is free software: you can redistribute it and/or modify
-## it under the terms of the GNU Lesser General Public License as published by
-## the Free Software Foundation, either version 3 of the License, or
-## (at your option) any later version.
-## 
-## PyTango 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 Lesser General Public License for more details.
-## 
-## You should have received a copy of the GNU Lesser General Public License
-## along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-##
-################################################################################
+# ------------------------------------------------------------------------------
+# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+#
+# Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+# Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+#
+# Distributed under the terms of the GNU Lesser General Public License,
+# either version 3 of the License, or (at your option) any later version.
+# See LICENSE.txt for more info.
+# ------------------------------------------------------------------------------
 
 """ IPython 'spock' profile, to preload PyTango and offer a friendly interface to Tango."""
 
@@ -35,4 +23,4 @@ def main():
     except ImportError:
         print "Unable to start spock profile, is PyTango installed?"
 
-main()
\ No newline at end of file
+main()
diff --git a/IPython/config/profile/tango/ipython_config.py b/IPython/config/profile/tango/ipython_config.py
index 225abba..e7f1ad0 100644
--- a/IPython/config/profile/tango/ipython_config.py
+++ b/IPython/config/profile/tango/ipython_config.py
@@ -1,25 +1,13 @@
-################################################################################
-##
-## This file is part of PyTango, a python binding for Tango
-## 
-## http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## PyTango is free software: you can redistribute it and/or modify
-## it under the terms of the GNU Lesser General Public License as published by
-## the Free Software Foundation, either version 3 of the License, or
-## (at your option) any later version.
-## 
-## PyTango 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 Lesser General Public License for more details.
-## 
-## You should have received a copy of the GNU Lesser General Public License
-## along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-##
-################################################################################
+# ------------------------------------------------------------------------------
+# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+#
+# Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+# Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+#
+# Distributed under the terms of the GNU Lesser General Public License,
+# either version 3 of the License, or (at your option) any later version.
+# See LICENSE.txt for more info.
+# ------------------------------------------------------------------------------
 
 config = get_config()
 
diff --git a/PKG-INFO b/PKG-INFO
index 81f737e..377dd76 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,6 +1,6 @@
 Metadata-Version: 1.1
 Name: PyTango
-Version: 8.0.3
+Version: 8.1.1
 Summary: A python binding for the Tango control system
 Home-page: http://www.tango-controls.org/static/PyTango/
 Author: Tiago Coutinho
@@ -10,7 +10,7 @@ Download-URL: http://pypi.python.org/packages/source/P/PyTango
 Description: This module implements the Python Tango Device API mapping.
 Keywords: Tango,CORBA,binding
 Platform: Linux
-Platform: Windows XP/Vista/7
+Platform: Windows XP/Vista/7/8
 Classifier: Development Status :: 5 - Production/Stable
 Classifier: Environment :: Other Environment
 Classifier: Intended Audience :: Developers
diff --git a/doc/WINDOWS-COMPILATION-EXAMPLE.TXT b/doc/WINDOWS-COMPILATION-EXAMPLE.TXT
deleted file mode 100644
index 877ac65..0000000
--- a/doc/WINDOWS-COMPILATION-EXAMPLE.TXT
+++ /dev/null
@@ -1,38 +0,0 @@
-
-REM Set environment variables needed to compile
-
-set TANGO_ROOT=C:\Program Files\tango\win32_vc8\win32_dll
-set BOOST_ROOT=C:\Program Files\boost\boost_1_38
-set OMNI_ROOT=%TANGO_ROOT%
-set NUMPY_ROOT=C:\sicilia\Python25\Lib\site-packages\numpy\core\
-
-dir "%OMNI_ROOT%"\lib
-dir "%BOOST_ROOT%\lib"
-
-
-
-REM For some reason distutils is trying to locate Vs9 tools...
-REM And obviously it fails. We will fool him with this:
-
-set VS90COMNTOOLS=%VS80COMNTOOLS%
-
-REM compile :)
-setup.py -v build
-
-
-
-
-
-
-
-REM ------------------------------------
-
-REM to compile:
-setup.py -v build
-
-REM to create a MSI windows installer:
-setup.py bdist_msi
-
-REM to create a EXE windows installer:
-setup.py bdist_wininst
-
diff --git a/doc/_static/banner.png b/doc/_static/banner.png
deleted file mode 100644
index 67ec30d..0000000
Binary files a/doc/_static/banner.png and /dev/null differ
diff --git a/doc/_static/banner1.png b/doc/_static/banner1.png
new file mode 100644
index 0000000..75ae5d5
Binary files /dev/null and b/doc/_static/banner1.png differ
diff --git a/doc/_static/banner2.png b/doc/_static/banner2.png
new file mode 100644
index 0000000..4eaf882
Binary files /dev/null and b/doc/_static/banner2.png differ
diff --git a/doc/_static/banner3.png b/doc/_static/banner3.png
new file mode 100644
index 0000000..6299619
Binary files /dev/null and b/doc/_static/banner3.png differ
diff --git a/doc/_static/boost_python_install.py b/doc/_static/boost_python_install.py
index 893dd43..381b219 100644
--- a/doc/_static/boost_python_install.py
+++ b/doc/_static/boost_python_install.py
@@ -1,7 +1,15 @@
-from __future__ import print_function
+# ------------------------------------------------------------------------------
+# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+#
+# Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+# Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+#
+# Distributed under the terms of the GNU Lesser General Public License,
+# either version 3 of the License, or (at your option) any later version.
+# See LICENSE.txt for more info.
+# ------------------------------------------------------------------------------
 
-"""
-*build boost python script on windows*
+"""*build boost python script on windows*
 
 Purpose
     Build boost-python on multiple architectures (32 and 64bits), with different toolsets (vc9, vc10),
@@ -15,21 +23,25 @@ How to use it
     This script should be used together with another boost configuration file called user-config.jam.
     
     - Download boost source code from http://wwww.boost.org
-    - Extract boost to a directory (ex: c:\workspace\boost-1.53.0)
-    - Place this file in your boost extract directory (ex: c:\workspace\boost-1.53.0\boost_python_install.py)
-    - Place the user-config.jam file in %HOMEPATH%%HOMEDIR%
+    - Extract boost to a directory (ex: :file:`c:\\workspace\\boost-1.53.0`)
+    - Place this file in your boost extract directory
+      (ex: :file:`c:\\workspace\\boost-1.53.0\\boost_python_install.py`)
+    - Place the user-config.jam file in :envvar:`%HOMEPATH%%HOMEDIR%`
     - Open a console
     - Switch to the boost directory 
-    - Execute this script using python (ex: C:\Python\win32\26\python.exe boost_python_install.py
+    - Execute this script using python
+      (ex: :file:`C:\\Python\\win32\\26\\python.exe boost_python_install.py`
 """
+
+from __future__ import print_function
+
+
 # b2 --with-python --prefix=c:\boost-1.53.0 
 #    --libdir=c:\boost-1.53.0\msvc-9.0\Win32\release\shared\threading-multi\26
 #    toolset=msvc-9.0 address-model=32 variant=release link=shared
 #    threading=multi python=2.6 install
 
 import os
-import sys
-import pprint
 import subprocess
 
 boost_version = r"1.53.0"
@@ -75,13 +87,10 @@ def _main():
     
     toolsets = r"msvc-10.0",
     pythons = "3.3",    
-    compile()
+    compile_boost()
         
-def compile():
-    cur_dir = os.path.abspath(os.path.curdir)
-    
+def compile_boost():    
     prefix = r"c:\boost-" + boost_version
-    build_prefix = os.path.join(prefix, "build")
     
     silent_args = ""
     if silent:
@@ -98,8 +107,8 @@ def compile():
     cmd_line_template = base_cmd_line
     for option in options:
         cmd_line_template += " --{0}={{{1}}}".format(option, option)
-    for property in properties:
-        cmd_line_template += " {0}={{{1}}}".format(property, property)
+    for prop in properties:
+        cmd_line_template += " {0}={{{1}}}".format(prop, prop)
     
     cmd_line_template += " {0}".format(stage)
     fh = open("NUL", "w")
@@ -152,4 +161,4 @@ def compile():
     fh.close()
     
 if __name__ == "__main__":
-    main()
\ No newline at end of file
+    main()
diff --git a/doc/_static/green_python.png b/doc/_static/green_python.png
new file mode 100644
index 0000000..85903b8
Binary files /dev/null and b/doc/_static/green_python.png differ
diff --git a/doc/_static/green_python_original.png b/doc/_static/green_python_original.png
new file mode 100644
index 0000000..b09236d
Binary files /dev/null and b/doc/_static/green_python_original.png differ
diff --git a/doc/_static/slideshow.js b/doc/_static/slideshow.js
new file mode 100644
index 0000000..1b920c3
--- /dev/null
+++ b/doc/_static/slideshow.js
@@ -0,0 +1,33 @@
+$(document).ready(function() 
+{
+    // Constants to be redefined
+    var FADE_TIME = 250;
+    var IMAGE_TIME = 5000;
+
+    var curr_index = 0;
+    var elements = $("#gallery").children();
+    elements.hide()
+    if (elements.length > 0)
+    { 
+	elements.eq(0).show();
+    }
+    var slideshow_timer = setInterval(switch_image, IMAGE_TIME);
+    
+    function switch_image()
+    {
+	old_index = curr_index;
+	if (curr_index < (elements.length-1)) {
+	    curr_index += 1; 
+	}
+	else {
+	    curr_index = 0;
+	}
+	show_hide(curr_index, old_index);
+    }
+    
+    function show_hide(show_index, hide_index)
+    {
+	elements.eq(hide_index).fadeOut(FADE_TIME);
+	elements.eq(show_index).delay(FADE_TIME+100).fadeIn(FADE_TIME);
+    }
+});
diff --git a/doc/_templates/index.html b/doc/_templates/index.html
index b2eec92..8d53c05 100644
--- a/doc/_templates/index.html
+++ b/doc/_templates/index.html
@@ -1,40 +1,182 @@
 {% extends "layout.html" %}
 {% set title = 'PyTango documentation' %}
+
+{% set script_files = script_files + ["_static/slideshow.js"] %}
+
 {% block body %}
 
 <h1>Welcome to PyTango documentation!</h1>
 
 <p>
-    PyTango is a python module that exposes to <a class="reference external" href="http://www.python.org/">Python</a>
-    the complete <a class="reference external" href="http://www.tango-controls.org/">Tango</a> C++ API
-    (including both client and server).
-
+  PyTango is a python module that exposes to <a class="reference external" href="http://www.python.org/">Python</a>
+  the complete <a class="reference external" href="http://www.tango-controls.org/">Tango</a> C++ API.
+  This means that you can write not only tango applications (scripts, CLIs, GUIs)
+  that access tango device servers but also tango device servers themselves, all
+  of this in pure python.
 </p>
 
-<p>
-    This means that you can write not only tango applications (scripts, CLIs, GUIs)
-    that access tango device servers but also tango device servers themselves, all
-    of this in pure python.
-</p>
+<div id="gallery" style="width:780px; height:525px; margin:auto;">
+
+  <!-- 1st snap -->
+  <img src="_static/banner1.png" />
+  <!-- 2nd snap -->
+  <img src="_static/banner2.png" />
+  <!-- 3rd snap -->
+  <img src="_static/banner3.png" />
+
+  <!-- 4th snap -->
+  <table style="width:100%;"><tr>
+  <td>
+
+<div class="highlight-python"><div class="highlight"><pre>
+<span class="c"># ----------------- server ------------------</span>
+
+<span class="kn">import</span> <span class="nn">time</span>
+
+<span class="kn">from</span> <span class="nn">PyTango.server</span> <span class="kn">import</span> <span class="n">server_run</span>
+<span class="kn">from</span> <span class="nn">PyTango.server</span> <span class="kn">import</span> <span class="n">Device</span><span class="p">,</span> <span class="n">DeviceMeta</span>
+<span class="kn">from</span> <span class="nn">PyTango.server</span> <span class="kn">import</span> <span class="n">attribute</span><span class="p">,</span> <span class="n">command</span>
+
+
+<span class="k">class</span> <span class="nc">Clock</span><span class="p">(</span><span class="n">Device</span><span class="p">):</span>
+    <span class="n">__metaclass__</span> <span class="o">=</span> <span class="n">DeviceMeta</span>
+
+    <span class="n">time</span> <span class="o">=</span> <span class="n">attribute</span><span class="p">()</span>
+
+    <span class="k">def</span> <span class="nf">read_time</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span>
+
+    <span class="nd">@command</span><span class="p">(</span><span class="n">dtype_in</span><span class="o">=</span><span class="nb">str</span><span class="p">,</span> <span class="n">dtype_out</span><span class="o">=</span><span class="nb">str</span><span class="p">)</span>
+    <span class="k">def</span> <span class="nf">strftime</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">tformat</span><span class="p">):</span>
+        <span class="k">return</span> <span class="n">time</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="n">tformat</span><span class="p">)</span>
+
+<span class="k">if</span> <span class="n">__name__</span> <span class="o">==</span> <span class="s">"__main__"</span><span class="p">:</span>
+    <span class="n">server_run</span><span class="p">((</span><span class="n">Clock</span><span class="p">,))</span>
+</pre></div>
+</div>
+
+  </td>
+  <td>
+
+<div class="highlight-python"><div class="highlight"><pre>
+<span class="c">$ # ---------------- client -----------------</span>
+
+<span class="n">$ python</span>
+
+<span class="gp">>>> </span><span class="kn">from</span> <span class="nn">PyTango</span> <span class="kn">import</span> <span class="n">DeviceProxy</span>
+
+<span class="gp">>>> </span><span class="n">clock</span> <span class="o">=</span> <span class="n">DeviceProxy</span><span class="p">(</span><span class="s">"my/first/clock"</span><span class="p">)</span>
+
+<span class="gp">>>> </span><span class="n">clock</span><span class="o">.</span><span class="n">time</span>
+<span class="go">1384447223.774121</span>
+
+<span class="gp">>>> </span><span class="n">clock</span><span class="o">.</span><span class="n">read_attribute</span><span class="p">(</span><span class="s">"time"</span><span class="p">)</span><span class="o">.</span><span class="n">value</span>
+<span class="go">1384447252.037578</span>
+
+<span class="gp">>>> </span><span class="n">clock</span><span class="o">.</span><span class="n">command_inout</span><span class="p">(</span><span class="s">"strftime"</span><span class="p">,</span>
+<span class="gp">... </span>                    <span class="s">"%H:%M:%S"</span><span class="p">)</span>
+<span class="go">'17:41:50'</span>
+
+<span class="gp">>>> </span><span class="n">clock</span><span class="o">.</span><span class="n">status</span><span class="p">()</span>
+<span class="go">The device is in UNKNOWN state.</span>
+
+
+
+</pre></div>
+</div>
+
+  </td>
+  </tr></table>
+
+  <!-- 5th snap -->
+  <table style="width:100%;"><tr>
+  <td>
+
+<div class="highlight-python"><div class="highlight"><pre>
+<span class="gp">>>> </span><span class="c"># ---------- gevent client -----------</span>
+<span class="gp">>>> </span><span class="kn">from</span> <span class="nn">PyTango.gevent</span> <span class="kn">import</span> <span class="n">DeviceProxy</span>
+
+<span class="gp">>>> </span><span class="n">dev</span> <span class="o">=</span> <span class="n">DeviceProxy</span><span class="p">(</span><span class="s">"sys/tg_test/1"</span><span class="p">)</span>
+<span class="gp">>>> </span><span class="n">dev</span><span class="o">.</span><span class="n">get_green_mode</span><span class="p">()</span>
+<span class="go">PyTango.GreenMode.Gevent</span>
+
+<span class="gp">>>> </span><span class="c"># Synchronous but green!</span>
+<span class="gp">>>> </span><span class="k">print</span><span class="p">(</span><span class="n">dev</span><span class="o">.</span><span class="n">state</span><span class="p">())</span>
+<span class="go">RUNNING</span>
+
+<span class="gp">>>> </span><span class="c"># Asynchronous</span>
+<span class="gp">>>> </span><span class="n">res</span> <span class="o">=</span> <span class="n">dev</span><span class="o">.</span><span class="n">state</span><span class="p">(</span><span class="n">wait</span><span class="o">=</span><span class="bp">False</span><span class="p">)</span>
+<span class="gp">>>> </span><span class="k">print</span><span class="p">(</span><span class="n">res</span><span class="p">)</span>
+<span class="go"><gevent.event.AsyncResult at 0x1a74050></span>
+<span class="gp">>>> </span><span class="k">print</span><span class="p">(</span><span class="n">res</span><span class="o">.</span><span class="n">get</span><span class="p">())</span>
+<span class="go">RUNNING</span>
+
+<span class="gp">>>> </span><span class="c"># Synchronous, but green!</span>
+<span class="gp">>>> </span><span class="k">print</span><span class="p">(</span><span class="n">dev</span><span class="o">.</span><span class="n">long_scalar</span><span class="p">)</span>
+<span class="go">832</span>
+
+<span class="gp">>>> </span><span class="c"># Asynchronous</span>
+<span class="gp">>>> </span><span class="n">res</span> <span class="o">=</span> <span class="n">dev</span><span class="o">.</span><span class="n">read_attribute</span><span class="p">(</span><span class="s">"long_scalar"</span><span class="p">,</span>
+<span class="gp">... </span>                         <span class="n">wait</span><span class="o">=</span><span class="bp">False</span><span class="p">)</span>
+<span class="gp">>>> </span><span class="k">print</span><span class="p">(</span><span class="n">res</span><span class="p">)</span>
+<span class="go"><gevent.event.AsyncResult at 0x1a9f54></span>
+<span class="gp">>>> </span><span class="k">print</span><span class="p">(</span><span class="n">res</span><span class="o">.</span><span class="n">get</span><span class="p">())</span>
+<span class="go">126</span>
+</pre></div>
+</div>
+
+  </td>
+  <td>
+
+<div class="highlight-python"><div class="highlight"><pre>
+<span class="gp">>>> </span><span class="c"># ----- concurrent.futures client -----</span>
+<span class="gp">>>> </span><span class="kn">from</span> <span class="nn">PyTango.futures</span> <span class="kn">import</span> <span class="n">DeviceProxy</span>
+
+<span class="gp">>>> </span><span class="n">dev</span> <span class="o">=</span> <span class="n">DeviceProxy</span><span class="p">(</span><span class="s">"sys/tg_test/1"</span><span class="p">)</span>
+<span class="gp">>>> </span><span class="n">dev</span><span class="o">.</span><span class="n">get_green_mode</span><span class="p">()</span>
+<span class="go">PyTango.GreenMode.Futures</span>
+
+<span class="gp">>>> </span><span class="c"># Synchronous</span>
+<span class="gp">>>> </span><span class="k">print</span><span class="p">(</span><span class="n">dev</span><span class="o">.</span><span class="n">state</span><span class="p">())</span>
+<span class="go">RUNNING</span>
+
+<span class="gp">>>> </span><span class="c"># Asynchronous</span>
+<span class="gp">>>> </span><span class="n">res</span> <span class="o">=</span> <span class="n">dev</span><span class="o">.</span><span class="n">state</span><span class="p">(</span><span class="n">wait</span><span class="o">=</span><span class="bp">False</span><span class="p">)</span>
+<span class="gp">>>> </span><span class="k">print</span><span class="p">(</span><span class="n">res</span><span class="p">)</span>
+<span class="go"><Future at 0x34a9e51 state=pending></span>
+<span class="gp">>>> </span><span class="k">print</span><span class="p">(</span><span class="n">res</span><span class="o">.</span><span class="n">result</span><span class="p">())</span>
+<span class="go">RUNNING</span>
+
+<span class="gp">>>> </span><span class="c"># Synchronous</span>
+<span class="gp">>>> </span><span class="k">print</span><span class="p">(</span><span class="n">dev</span><span class="o">.</span><span class="n">long_scalar</span><span class="p">)</span>
+<span class="go">832</span>
+
+<span class="gp">>>> </span><span class="c"># Asynchronous</span>
+<span class="gp">>>> </span><span class="n">res</span> <span class="o">=</span> <span class="n">dev</span><span class="o">.</span><span class="n">read_attribute</span><span class="p">(</span><span class="s">"long_scalar"</span><span class="p">,</span>
+<span class="gp">... </span>                         <span class="n">wait</span><span class="o">=</span><span class="bp">False</span><span class="p">)</span>
+<span class="gp">>>> </span><span class="k">print</span><span class="p">(</span><span class="n">res</span><span class="p">)</span>
+<span class="go"><Future at 0x5d8a17b state=pending></span>
+<span class="gp">>>> </span><span class="k">print</span><span class="p">(</span><span class="n">res</span><span class="o">.</span><span class="n">result</span><span class="p">())</span>
+<span class="go">126</span>
+</pre></div>
+</div>
+
+  </td>
+  </tr></table>
 
-<div class="figure align-center">
-<img alt="ITango" src="_static/banner.png" style="width: 70%;" />
 </div>
 
 <p>
     Check out the <a class="reference internal" href="start.html#getting-started"><em>getting started guide</em></a>
     to learn how to build and/or install PyTango and after that the <a class="reference internal" href="quicktour.html#quick-tour"><em>quick tour</em></a>
     can help you with the first steps in the PyTango world.
-</p>
-
-<p>
     If you need help understanding what Tango itself really is, you can check the
     <a class="reference external" href="http://www.tango-controls.org/">Tango</a>
     homepage where you will find plenty of documentation, FAQ and tutorials.
 </p>
 
 <p>
-    A PDF version can be downloaded from <a href="PyTango.pdf">here</a>.
+    A PDF version of this documentation can be downloaded from <a href="PyTango.pdf">here</a>.
 </p>
 <p>
     For convenience here are the links to other versions:<br/>
@@ -42,6 +184,8 @@
      
     <a href="http://www.tango-controls.org/static/PyTango/latest/doc/html">Latest stable</a>
      
+    <a href="http://www.tango-controls.org/static/PyTango/v803/doc/html">8.0.3</a>
+     
     <a href="http://www.tango-controls.org/static/PyTango/v723/doc/html">7.2.3</a>
 </p>
 
diff --git a/doc/_templates/indexsidebar.html b/doc/_templates/indexsidebar.html
index 5a9747d..f91d749 100644
--- a/doc/_templates/indexsidebar.html
+++ b/doc/_templates/indexsidebar.html
@@ -1,7 +1,9 @@
 <h3>Download</h3>
 <p>Current version: <b>{{ version }}</b></p>
-<p>Get PyTango from the <a href="http://pypi.python.org/pypi/PyTango">PyPi</a>,
+<p>Get PyTango from <a href="http://pypi.python.org/pypi/PyTango">PyPi</a><br/>
 or install it with:</p>
+<pre>pip install PyTango</pre>
+or
 <pre>easy_install -U PyTango</pre>
 
 <h3>PDF</h3>
diff --git a/doc/_templates/layout.html b/doc/_templates/layout.html
index cb4dc53..0e1e248 100644
--- a/doc/_templates/layout.html
+++ b/doc/_templates/layout.html
@@ -1,19 +1,6 @@
 {% extends "sphinxdoc/layout.html" %}
 
 {% block extrahead %}
-    <script src="{{ pathto('_static/js/jquery.min.js',1) }}"></script> 
-    <script src="{{ pathto('_static/js/jquery.mousewheel.min.js',1) }}"></script> 
-    <script src="{{ pathto('_static/js/jquery.terminal.min.js',1) }}"></script> 
-    <link href="{{ pathto('_static/css/jquery.terminal.css',1) }}" rel="stylesheet"/> 
-    
-    <link href="{{ pathto('_static/css/start/jquery-ui-1.8.10.custom.css',1) }}" rel="stylesheet"/> 
-    <link href="{{ pathto('_static/css/pytango.css',1) }}" rel="stylesheet"/> 
-    <link href="{{ pathto('_static/css/pytango_terminal.css',1) }}" rel="stylesheet"/> 
-    <script src="{{ pathto('_static/js/jquery-ui-1.8.10.custom.min.js',1) }}"></script> 
-    
-    <script src="{{ pathto('_static/js/dterm.js',1) }}"></script> 
-    <script src="{{ pathto('_static/js/pytango.js',1) }}"></script> 
-
 {% endblock %}
 
 {% block rootrellink %}
diff --git a/doc/api.rst b/doc/api.rst
index dec2d01..745ab10 100644
--- a/doc/api.rst
+++ b/doc/api.rst
@@ -7,9 +7,12 @@
 PyTango API
 ===========
 
+.. automodule:: PyTango
+
 .. toctree::
     :maxdepth: 2
 
+    data_types
     client/index
     database
     server/index
diff --git a/doc/client/index.rst b/doc/client/index.rst
index b2af241..317614a 100644
--- a/doc/client/index.rst
+++ b/doc/client/index.rst
@@ -1,5 +1,5 @@
-The Tango Device Python API
-===========================
+Client API
+==========
 
 .. toctree::
     :maxdepth: 2
diff --git a/doc/client/miscellaneous.rst b/doc/client/miscellaneous.rst
index 55cd8c2..66c183e 100644
--- a/doc/client/miscellaneous.rst
+++ b/doc/client/miscellaneous.rst
@@ -1,6 +1,292 @@
+.. currentmodule:: PyTango
 
+Green objects
+-------------
 
-.. currentmodule:: PyTango
+PyTango supports cooperative green Tango objects. Since version 8.1 two *green*
+modes have been added: :obj:`~PyTango.GreenMode.Gevent` and
+:obj:`~PyTango.GreenMode.Futures`.
+
+The :obj:`~PyTango.GreenMode.Gevent` mode uses the well known :mod:`gevent`
+module. The :obj:`~PyTango.GreenMode.Futures` uses the standard python module
+:mod:`concurrent.futures`.
+
+You can set the PyTango green mode at a global level. Set the environment
+variable :envvar:`PYTANGO_GREEN_MODE` to either gevent_ or futures
+(case incensitive). If this environment variable is not defined the PyTango
+global green mode defaults to *Synchronous*.
+
+Currently, at version 8.1, only :class:`DeviceProxy` has been modified to work
+in a green cooperative way. If the work is found to be useful, the same can
+be implemented in the future for :class:`AttributeProxy` and even 
+to :class:`Database`.
+
+
+
+You can also change the active global green mode at any time in your program::
+
+    >>> from PyTango import DeviceProxy, GreenMode
+    >>> from PyTango import set_green_mode, get_green_mode
+
+    >>> get_green_mode()
+    PyTango.GreenMode.Synchronous    
+
+    >>> dev = DeviceProxy("sys/tg_test/1")
+    >>> dev.get_green_mode()
+    PyTango.GreenMode.Synchronous    
+
+    >>> set_green_mode(GreenMode.Gevent)
+    >>> get_green_mode()
+    PyTango.GreenMode.Gevent    
+
+    >>> dev.get_green_mode()
+    PyTango.GreenMode.Gevent
+
+As you can see by the example, the global green mode will affect any previously
+created :class:`DeviceProxy` using the default constructor parameters.
+
+You can specificy green mode on a :class:`DeviceProxy` at creation time.
+You can also change the green mode at any time::
+
+    >>> from PyTango.gevent import DeviceProxy
+
+    >>> dev = DeviceProxy("sys/tg_test/1")
+    >>> dev.get_green_mode()
+    PyTango.GreenMode.Gevent
+
+    >>> from PyTango import GreenMode
+    >>> from PyTango import set_green_mode, get_green_mode
+    >>> get_green_mode()
+    PyTango.GreenMode.Synchronous    
+
+    >>> dev.set_green_mode(GreenMode.Synchronous)
+    >>> dev.get_green_mode()
+    PyTango.GreenMode.Synchronous
+
+gevent mode
+~~~~~~~~~~~
+
+Using :mod:`gevent` cooperative mode in PyTango is relatively easy::
+
+    >>> from PyTango.gevent import DeviceProxy
+
+    >>> dev = DeviceProxy("sys/tg_test/1")
+    >>> dev.get_green_mode()
+    PyTango.GreenMode.Gevent
+
+    >>> print(dev.state())
+    RUNNING
+
+The :func:`PyTango.gevent.DeviceProxy` API is exactly the same as the standard
+:class:`~PyTango.DeviceProxy`. The difference is in the semantics of the methods
+that involve synchronous network calls (constructor included) which may block
+the execution for a relatively big amount of time.
+The list of methods that have been modified to accept *gevent* semantics are,
+on the :func:`PyTango.gevent.DeviceProxy`:
+
+* Constructor
+* :meth:`~DeviceProxy.state`
+* :meth:`~DeviceProxy.status`
+* :meth:`~DeviceProxy.read_attribute` 
+* :meth:`~DeviceProxy.write_attribute`
+* :meth:`~DeviceProxy.write_read_attribute`
+* :meth:`~DeviceProxy.read_attributes`
+* :meth:`~DeviceProxy.write_attributes`
+* :meth:`~DeviceProxy.ping`
+
+So how does this work in fact? I see no difference from using the *standard* 
+:class:`~PyTango.DeviceProxy`.
+Well, this is, in fact, one of the goals: be able to use a gevent cooperation
+without changing the API. Behind the scenes the methods mentioned before have
+been modified to be able to work cooperatively with other greenlets.
+
+All of the above methods have been boosted with two extra keyword arguments
+*wait* and *timeout* which allow to fine tune the behaviour.
+The *wait* parameter is by default set to `True` meaning wait for the request
+to finish (the default semantics when not using green mode).
+If *wait* is set to `True`, the timeout determines the maximum time to wait for
+the method to execute. The default timeout is `None` which means wait forever.
+If *wait* is set to `False`, the *timeout* is ignored.
+
+If *wait* is set to `True`, the result is the same as executing the 
+*standard* method on a :class:`~PyTango.DeviceProxy`.
+If, *wait* is set to `False`, the result will be a 
+:class:`gevent.event.AsyncResult`. In this case, to get the actual value
+you will need to do something like::
+
+    >>> from PyTango.gevent import DeviceProxy
+
+    >>> dev = DeviceProxy("sys/tg_test/1")
+    >>> result = dev.state(wait=False)
+    >>> result
+    <gevent.event.AsyncResult at 0x1a74050>
+
+    >>> # this will be the blocking code
+    >>> state = result.get()
+    >>> print(state)
+    RUNNING
+
+Here is another example using :meth:`~DeviceProxy.read_attribute`::
+
+    >>> from PyTango.gevent import DeviceProxy
+
+    >>> dev = DeviceProxy("sys/tg_test/1")
+    >>> result = dev.read_attribute('wave', wait=False)
+    >>> result
+    <gevent.event.AsyncResult at 0x1aff54e>
+
+    >>> dev_attr = result.get()
+    >>> print(dev_attr)
+    DeviceAttribute[
+    data_format = PyTango.AttrDataFormat.SPECTRUM
+          dim_x = 256
+          dim_y = 0
+     has_failed = False
+       is_empty = False
+           name = 'wave'
+        nb_read = 256
+     nb_written = 0
+        quality = PyTango.AttrQuality.ATTR_VALID
+    r_dimension = AttributeDimension(dim_x = 256, dim_y = 0)
+           time = TimeVal(tv_nsec = 0, tv_sec = 1383923292, tv_usec = 886720)
+           type = PyTango.CmdArgType.DevDouble
+          value = array([ -9.61260664e-01,  -9.65924853e-01,  -9.70294813e-01,
+            -9.74369212e-01,  -9.78146810e-01,  -9.81626455e-01,
+            -9.84807087e-01,  -9.87687739e-01,  -9.90267531e-01,
+            ...
+            5.15044507e-1])
+        w_dim_x = 0
+        w_dim_y = 0
+    w_dimension = AttributeDimension(dim_x = 0, dim_y = 0)
+        w_value = None]
+
+.. note::
+   due to the internal workings of gevent, setting the *wait* flag to 
+   `True` (default) doesn't prevent other greenlets from running in *parallel*.
+   This is, in fact, one of the major bonus of working with :mod:`gevent` when
+   compared with :mod:`concurrent.futures`
+
+futures mode
+~~~~~~~~~~~~
+
+Using :mod:`concurrent.futures` cooperative mode in PyTango is relatively easy::
+
+    >>> from PyTango.futures import DeviceProxy
+
+    >>> dev = DeviceProxy("sys/tg_test/1")
+    >>> dev.get_green_mode()
+    PyTango.GreenMode.Futures
+
+    >>> print(dev.state())
+    RUNNING
+
+The :func:`PyTango.futures.DeviceProxy` API is exactly the same as the standard
+:class:`~PyTango.DeviceProxy`. The difference is in the semantics of the methods
+that involve synchronous network calls (constructor included) which may block
+the execution for a relatively big amount of time.
+The list of methods that have been modified to accept *futures* semantics are,
+on the :func:`PyTango.futures.DeviceProxy`:
+
+* Constructor
+* :meth:`~DeviceProxy.state`
+* :meth:`~DeviceProxy.status`
+* :meth:`~DeviceProxy.read_attribute` 
+* :meth:`~DeviceProxy.write_attribute`
+* :meth:`~DeviceProxy.write_read_attribute`
+* :meth:`~DeviceProxy.read_attributes`
+* :meth:`~DeviceProxy.write_attributes`
+* :meth:`~DeviceProxy.ping`
+
+So how does this work in fact? I see no difference from using the *standard* 
+:class:`~PyTango.DeviceProxy`.
+Well, this is, in fact, one of the goals: be able to use a *futures* cooperation
+without changing the API. Behind the scenes the methods mentioned before have
+been modified to be able to work cooperatively.
+
+All of the above methods have been boosted with two extra keyword arguments
+*wait* and *timeout* which allow to fine tune the behaviour.
+The *wait* parameter is by default set to `True` meaning wait for the request
+to finish (the default semantics when not using green mode).
+If *wait* is set to `True`, the timeout determines the maximum time to wait for
+the method to execute. The default is `None` which means wait forever. If *wait*
+is set to `False`, the *timeout* is ignored.
+
+If *wait* is set to `True`, the result is the same as executing the 
+*standard* method on a :class:`~PyTango.DeviceProxy`.
+If, *wait* is set to `False`, the result will be a 
+:class:`concurrent.futures.Future`. In this case, to get the actual value
+you will need to do something like::
+
+    >>> from PyTango.futures import DeviceProxy
+
+    >>> dev = DeviceProxy("sys/tg_test/1")
+    >>> result = dev.state(wait=False)
+    >>> result
+    <Future at 0x16cb310 state=pending>
+
+    >>> # this will be the blocking code
+    >>> state = result.result()
+    >>> print(state)
+    RUNNING
+
+Here is another example using :meth:`~DeviceProxy.read_attribute`::
+
+    >>> from PyTango.futures import DeviceProxy
+
+    >>> dev = DeviceProxy("sys/tg_test/1")
+    >>> result = dev.read_attribute('wave', wait=False)
+    >>> result
+    <Future at 0x16cbe50 state=pending>
+
+    >>> dev_attr = result.result()
+    >>> print(dev_attr)
+    DeviceAttribute[
+    data_format = PyTango.AttrDataFormat.SPECTRUM
+          dim_x = 256
+          dim_y = 0
+     has_failed = False
+       is_empty = False
+           name = 'wave'
+        nb_read = 256
+     nb_written = 0
+        quality = PyTango.AttrQuality.ATTR_VALID
+    r_dimension = AttributeDimension(dim_x = 256, dim_y = 0)
+           time = TimeVal(tv_nsec = 0, tv_sec = 1383923329, tv_usec = 451821)
+           type = PyTango.CmdArgType.DevDouble
+          value = array([ -9.61260664e-01,  -9.65924853e-01,  -9.70294813e-01,
+            -9.74369212e-01,  -9.78146810e-01,  -9.81626455e-01,
+            -9.84807087e-01,  -9.87687739e-01,  -9.90267531e-01,
+            ...
+            5.15044507e-1])
+        w_dim_x = 0
+        w_dim_y = 0
+    w_dimension = AttributeDimension(dim_x = 0, dim_y = 0)
+        w_value = None]
+
+Green API
+~~~~~~~~~
+
+Summary:
+    * :func:`PyTango.get_green_mode` 
+    * :func:`PyTango.set_green_mode` 
+    * :func:`PyTango.gevent.DeviceProxy` 
+    * :func:`PyTango.futures.DeviceProxy` 
+
+.. autofunction:: PyTango.get_green_mode
+
+.. autofunction:: PyTango.set_green_mode
+
+.. autofunction:: PyTango.gevent.DeviceProxy
+
+.. autofunction:: PyTango.futures.DeviceProxy
+
+
+Low level API
+#############
+
+.. autofunction:: get_device_proxy
+
+.. autofunction:: get_attribute_proxy
 
 API util
 --------
@@ -15,6 +301,7 @@ See also `Event configuration information`_
 
 Attribute
 ~~~~~~~~~
+
 .. autoclass:: PyTango.AttributeAlarmInfo
     :members:
 
@@ -142,3 +429,4 @@ See :class:`DeviceAttribute`.
     :members:
 
 See :class:`DeviceData`.
+
diff --git a/doc/client/other.rst b/doc/client/other.rst
index 910e026..d8b7fe8 100644
--- a/doc/client/other.rst
+++ b/doc/client/other.rst
@@ -50,6 +50,9 @@ Enumerations
 
 .. autoclass:: PyTango.DispLevel
 
+.. autoclass:: PyTango.GreenMode
+
+
 Other classes
 ~~~~~~~~~~~~~
 
@@ -57,4 +60,4 @@ Other classes
     :members:
     
 .. autoclass:: PyTango.TimeVal
-    :members:
\ No newline at end of file
+    :members:
diff --git a/doc/conf.py b/doc/conf.py
index 0a0fa86..302e1b5 100644
--- a/doc/conf.py
+++ b/doc/conf.py
@@ -1,37 +1,13 @@
-################################################################################
-##
-## This file is part of PyTango, a python binding for Tango
-## 
-## http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## PyTango is free software: you can redistribute it and/or modify
-## it under the terms of the GNU Lesser General Public License as published by
-## the Free Software Foundation, either version 3 of the License, or
-## (at your option) any later version.
-## 
-## PyTango 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 Lesser General Public License for more details.
-## 
-## You should have received a copy of the GNU Lesser General Public License
-## along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-##
-################################################################################
-
-#
-# PyTango documentation build configuration file, created by
-# sphinx-quickstart on Fri Jun  5 14:31:50 2009.
-#
-# This file is execfile()d with the current directory set to its containing dir.
+# ------------------------------------------------------------------------------
+# This file is part of PyTango (http://www.tinyurl.com/PyTango)
 #
-# Note that not all possible configuration values are present in this
-# autogenerated file.
+# Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+# Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
 #
-# All configuration values have a default; values that are commented out
-# serve to show the default.
+# Distributed under the terms of the GNU Lesser General Public License,
+# either version 3 of the License, or (at your option) any later version.
+# See LICENSE.txt for more info.
+# ------------------------------------------------------------------------------
 
 import sys
 import os
@@ -43,6 +19,8 @@ import PyTango
 # documentation root, use os.path.abspath to make it absolute, like shown here.
 sys.path.append(os.path.abspath('sphinxext'))
 
+needs_sphinx = "1.0"
+
 # -- General configuration -----------------------------------------------------
 
 # Add any Sphinx extension module names here, as strings. They can be extensions
@@ -73,12 +51,19 @@ master_doc = 'contents'
 
 # General information about the project.
 project = u'PyTango'
-copyright = u'2012, ALBA - CELLS'
 copyright = u"""Except where otherwise noted, content on this site is
 licensed under a Creative Commons Attribution 3.0 License"""
 
 #Ideally we would like to put the following html code for copyright... but how?
-'''<a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/es/"><img alt="Creative Commons License" style="border-width:0" src="http://i.creativecommons.org/l/by-sa/3.0/es/88x31.png" /></a><br /><span xmlns:dc="http://purl.org/dc/elements/1.1/" href="http://purl.org/dc/dcmitype/Text" property="dc:title" rel="dc:type">Tau Documentation</span> by <span xmlns:cc="http://creativecommons.org/ns#" property="cc:attributionName">CELLS - ALBA</span> is licensed under a <a rel="licens [...]
+'''\
+<a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/es/">
+  <img alt="Creative Commons License" style="border-width:0" src="http://i.creativecommons.org/l/by-sa/3.0/es/88x31.png" />
+</a><br />
+<span xmlns:dc="http://purl.org/dc/elements/1.1/" href="http://purl.org/dc/dcmitype/Text" property="dc:title" rel="dc:type">PyTango Documentation</span>
+by
+<span xmlns:cc="http://creativecommons.org/ns#" property="cc:attributionName">ESRF</span>
+is licensed under a
+<a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/es/">Creative Commons Attribution-Share Alike 3.0 Spain License</a>.'''
 
 # The version info for the project you're documenting, acts as replacement for
 # |version| and |release|, also used in various other places throughout the
@@ -210,12 +195,6 @@ htmlhelp_basename = 'PyTangodoc'
 
 # -- Options for LaTeX output --------------------------------------------------
 
-# The paper size ('letter' or 'a4').
-latex_paper_size = 'a4'
-
-# The font size ('10pt', '11pt' or '12pt').
-latex_font_size = '10pt'
-
 # Grouping the document tree into LaTeX files. List of tuples
 # (source start file, target name, title, author, documentclass [howto/manual]).
 latex_documents = [
@@ -229,8 +208,11 @@ latex_logo = '_static/logo.png'
 
 latex_elements = {
     'fontpkg': '\\usepackage{palatino}',
+    'papersize': 'a4paper',
+    'pointsize': '10pt',
+    
 }
-latex_show_urls = 'footnote'
+latex_show_urls = 'no'
 
 # For "manual" documents, if this is true, then toplevel headings are parts,
 # not chapters.
@@ -245,6 +227,19 @@ latex_show_urls = 'footnote'
 # If false, no module index is generated.
 #latex_use_modindex = True
 
+# -- Options for RST -----------------------------------------------------------
+
+rst_epilog = """\
+.. _Tango: http://www.tango-controls.org/
+.. _Python: http://python.org/
+.. _IPython: http://ipython.org/
+.. _numpy: http://www.numpy.org/
+.. _gevent: http://www.gevent.org/
+.. _boost-python: http://www.boost.org/libs/python/
+.. _PyPi: https://pypi.python.org/pypi/PyTango/
+
+"""
+
 # -- Options for reference to other documentation ------------------------------
 
 intersphinx_mapping = {
diff --git a/doc/data_types.rst b/doc/data_types.rst
new file mode 100644
index 0000000..01d17cc
--- /dev/null
+++ b/doc/data_types.rst
@@ -0,0 +1,200 @@
+.. currentmodule:: PyTang
+
+.. _pytango-data-types:
+
+Data types
+==========
+
+This chapter describes the mapping of data types between Python and Tango.
+
+Tango has more data types than Python which is more dynamic. The input and
+output values of the commands are translated according to the array below.
+Note that if PyTango is compiled with :py:mod:`numpy` support the numpy type
+will be the used for the input arguments. Also, it is recomended to use numpy
+arrays of the appropiate type for output arguments as well, as they tend to be
+much more efficient.
+
+**For scalar types (SCALAR)**
+
++-------------------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
+|   Tango data type       |              Python 2.x type                                              |              Python 3.x type (*New in PyTango 8.0*)                       |
++=========================+===========================================================================+===========================================================================+
+|          DEV_VOID       |                    No data                                                |                    No data                                                |
++-------------------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
+|       DEV_BOOLEAN       | :py:obj:`bool`                                                            | :py:obj:`bool`                                                            |
++-------------------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
+|         DEV_SHORT       | :py:obj:`int`                                                             | :py:obj:`int`                                                             |
++-------------------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
+|         DEV_LONG        | :py:obj:`int`                                                             | :py:obj:`int`                                                             |
++-------------------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
+|        DEV_LONG64       | - :py:obj:`long` (on a 32 bits computer)                                  | :py:obj:`int`                                                             |
+|                         | - :py:obj:`int` (on a 64 bits computer)                                   |                                                                           |
++-------------------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
+|         DEV_FLOAT       | :py:obj:`float`                                                           | :py:obj:`float`                                                           |
++-------------------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
+|       DEV_DOUBLE        | :py:obj:`float`                                                           | :py:obj:`float`                                                           |
++-------------------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
+|        DEV_USHORT       | :py:obj:`int`                                                             | :py:obj:`int`                                                             |
++-------------------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
+|        DEV_ULONG        | :py:obj:`int`                                                             | :py:obj:`int`                                                             |
++-------------------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
+|        DEV_ULONG64      | * :py:obj:`long` (on a 32 bits computer)                                  | :py:obj:`int`                                                             |
+|                         | * :py:obj:`int` (on a 64 bits computer)                                   |                                                                           |
++-------------------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
+|        DEV_STRING       | :py:obj:`str`                                                             | :py:obj:`str` (decoded with *latin-1*, aka *ISO-8859-1*)                  |
++-------------------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
+|                         | sequence of two elements:                                                 | sequence of two elements:                                                 |
+| DEV_ENCODED             |                                                                           |                                                                           |
+| (*New in PyTango 8.0*)  | 0. :py:obj:`str`                                                          | 0. :py:obj:`str` (decoded with *latin-1*, aka *ISO-8859-1*)               |
+|                         | 1. :py:obj:`bytes` (for any value of *extract_as*)                        | 1. :py:obj:`bytes` (for any value of *extract_as*, except String.         |
+|                         |                                                                           |    In this case it is :py:obj:`str` (decoded with default python          |
+|                         |                                                                           |    encoding *utf-8*))                                                     |
++-------------------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
+
+**For array types (SPECTRUM/IMAGE)**
+
++-------------------------+-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
+|    Tango data type      |   ExtractAs     |                          Data type (Python 2.x)                           |             Data type (Python 3.x) (*New in PyTango 8.0*)                 |
++=========================+=================+===========================================================================+===========================================================================+
+| DEVVAR_CHARARRAY        | Numpy           | :py:class:`numpy.ndarray` (dtype= :py:obj:`numpy.uint8`)                  | :py:class:`numpy.ndarray` (dtype= :py:obj:`numpy.uint8`)                  |
+|                         +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
+|                         | Bytes           | :py:obj:`bytes` (which is in fact equal to :py:obj:`str`)                 | :py:obj:`bytes`                                                           |
+|                         +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
+|                         | ByteArray       | :py:obj:`bytearray`                                                       | :py:obj:`bytearray`                                                       |
+|                         +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
+|                         | String          | :py:obj:`str`                                                             | String    :py:obj:`str` (decoded with default python encoding *utf-8*!!!) |
+|                         +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
+|                         | List            | :py:class:`list` <:py:obj:`int`>                                          | :py:class:`list` <:py:obj:`int`>                                          |
+|                         +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
+|                         | Tuple           | :py:class:`tuple` <:py:obj:`int`>                                         | :py:class:`tuple` <:py:obj:`int`>                                         |
++-------------------------+-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
+| DEVVAR_SHORTARRAY       | Numpy           | :py:class:`numpy.ndarray` (dtype= :py:obj:`numpy.uint16`)                 | :py:class:`numpy.ndarray` (dtype= :py:obj:`numpy.uint16`)                 |
+| or                      +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
+| (DEV_SHORT + SPECTRUM)  | Bytes           | :py:obj:`bytes` (which is in fact equal to :py:obj:`str`)                 | :py:obj:`bytes`                                                           |
+| or                      +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
+| (DEV_SHORT + IMAGE)     | ByteArray       | :py:obj:`bytearray`                                                       | :py:obj:`bytearray`                                                       |
+|                         +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
+|                         | String          | :py:obj:`str`                                                             | String    :py:obj:`str` (decoded with default python encoding *utf-8*!!!) |
+|                         +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
+|                         | List            | :py:class:`list` <:py:obj:`int`>                                          | :py:class:`list` <:py:obj:`int`>                                          |
+|                         +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
+|                         | Tuple           | :py:class:`tuple` <:py:obj:`int`>                                         | :py:class:`tuple` <:py:obj:`int`>                                         |
++-------------------------+-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
+| DEVVAR_LONGARRAY        | Numpy           | :py:class:`numpy.ndarray` (dtype= :py:obj:`numpy.uint32`)                 | :py:class:`numpy.ndarray` (dtype= :py:obj:`numpy.uint32`)                 |
+| or                      +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
+| (DEV_LONG + SPECTRUM)   | Bytes           | :py:obj:`bytes` (which is in fact equal to :py:obj:`str`)                 | :py:obj:`bytes`                                                           |
+| or                      +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
+| (DEV_LONG + IMAGE)      | ByteArray       | :py:obj:`bytearray`                                                       | :py:obj:`bytearray`                                                       |
+|                         +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
+|                         | String          | :py:obj:`str`                                                             | String    :py:obj:`str` (decoded with default python encoding *utf-8*!!!) |
+|                         +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
+|                         | List            | :py:class:`list` <:py:obj:`int`>                                          | :py:class:`list` <:py:obj:`int`>                                          |
+|                         +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
+|                         | Tuple           | :py:class:`tuple` <:py:obj:`int`>                                         | :py:class:`tuple` <:py:obj:`int`>                                         |
++-------------------------+-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
+| DEVVAR_LONG64ARRAY      | Numpy           | :py:class:`numpy.ndarray` (dtype= :py:obj:`numpy.uint64`)                 | :py:class:`numpy.ndarray` (dtype= :py:obj:`numpy.uint64`)                 |
+| or                      +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
+| (DEV_LONG64 + SPECTRUM) | Bytes           | :py:obj:`bytes` (which is in fact equal to :py:obj:`str`)                 | :py:obj:`bytes`                                                           |
+| or                      +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
+| (DEV_LONG64 + IMAGE)    | ByteArray       | :py:obj:`bytearray`                                                       | :py:obj:`bytearray`                                                       |
+|                         +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
+|                         | String          | :py:obj:`str`                                                             | String    :py:obj:`str` (decoded with default python encoding *utf-8*!!!) |
+|                         +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
+|                         | List            | :py:class:`list` <int (64 bits) / long (32 bits)>                         | :py:class:`list` <:py:obj:`int`>                                          |
+|                         +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
+|                         | Tuple           | :py:class:`tuple` <int (64 bits) / long (32 bits)>                        | :py:class:`tuple` <:py:obj:`int`>                                         |
++-------------------------+-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
+| DEVVAR_FLOATARRAY       | Numpy           | :py:class:`numpy.ndarray` (dtype= :py:obj:`numpy.float32`)                | :py:class:`numpy.ndarray` (dtype= :py:obj:`numpy.float32`)                |
+| or                      +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
+| (DEV_FLOAT + SPECTRUM)  | Bytes           | :py:obj:`bytes` (which is in fact equal to :py:obj:`str`)                 | :py:obj:`bytes`                                                           |
+| or                      +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
+| (DEV_FLOAT + IMAGE)     | ByteArray       | :py:obj:`bytearray`                                                       | :py:obj:`bytearray`                                                       |
+|                         +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
+|                         | String          | :py:obj:`str`                                                             | String    :py:obj:`str` (decoded with default python encoding *utf-8*!!!) |
+|                         +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
+|                         | List            | :py:class:`list` <:py:obj:`float`>                                        | :py:class:`list` <:py:obj:`float`>                                        |
+|                         +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
+|                         | Tuple           | :py:class:`tuple` <:py:obj:`float`>                                       | :py:class:`tuple` <:py:obj:`float`>                                       |
++-------------------------+-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
+| DEVVAR_DOUBLEARRAY      | Numpy           | :py:class:`numpy.ndarray` (dtype= :py:obj:`numpy.float64`)                | :py:class:`numpy.ndarray` (dtype= :py:obj:`numpy.float64`)                |
+| or                      +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
+| (DEV_DOUBLE + SPECTRUM) | Bytes           | :py:obj:`bytes` (which is in fact equal to :py:obj:`str`)                 | :py:obj:`bytes`                                                           |
+| or                      +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
+| (DEV_DOUBLE + IMAGE)    | ByteArray       | :py:obj:`bytearray`                                                       | :py:obj:`bytearray`                                                       |
+|                         +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
+|                         | String          | :py:obj:`str`                                                             | String    :py:obj:`str` (decoded with default python encoding *utf-8*!!!) |
+|                         +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
+|                         | List            | :py:class:`list` <:py:obj:`float`>                                        | :py:class:`list` <:py:obj:`float`>                                        |
+|                         +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
+|                         | Tuple           | :py:class:`tuple` <:py:obj:`float`>                                       | :py:class:`tuple` <:py:obj:`float`>                                       |
++-------------------------+-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
+| DEVVAR_USHORTARRAY      | Numpy           | :py:class:`numpy.ndarray` (dtype= :py:obj:`numpy.uint16`)                 | :py:class:`numpy.ndarray` (dtype= :py:obj:`numpy.uint16`)                 |
+| or                      +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
+| (DEV_USHORT + SPECTRUM) | Bytes           | :py:obj:`bytes` (which is in fact equal to :py:obj:`str`)                 | :py:obj:`bytes`                                                           |
+| or                      +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
+| (DEV_USHORT + IMAGE)    | ByteArray       | :py:obj:`bytearray`                                                       | :py:obj:`bytearray`                                                       |
+|                         +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
+|                         | String          | :py:obj:`str`                                                             | String    :py:obj:`str` (decoded with default python encoding *utf-8*!!!) |
+|                         +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
+|                         | List            | :py:class:`list` <:py:obj:`int`>                                          | :py:class:`list` <:py:obj:`int`>                                          |
+|                         +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
+|                         | Tuple           | :py:class:`tuple` <:py:obj:`int`>                                         | :py:class:`tuple` <:py:obj:`int`>                                         |
++-------------------------+-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
+| DEVVAR_ULONGARRAY       | Numpy           | :py:class:`numpy.ndarray` (dtype= :py:obj:`numpy.uint32`)                 | :py:class:`numpy.ndarray` (dtype= :py:obj:`numpy.uint32`)                 |
+| or                      +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
+| (DEV_ULONG + SPECTRUM)  | Bytes           | :py:obj:`bytes` (which is in fact equal to :py:obj:`str`)                 | :py:obj:`bytes`                                                           |
+| or                      +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
+| (DEV_ULONG + IMAGE)     | ByteArray       | :py:obj:`bytearray`                                                       | :py:obj:`bytearray`                                                       |
+|                         +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
+|                         | String          | :py:obj:`str`                                                             | String    :py:obj:`str` (decoded with default python encoding *utf-8*!!!) |
+|                         +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
+|                         | List            | :py:class:`list` <:py:obj:`int`>                                          | :py:class:`list` <:py:obj:`int`>                                          |
+|                         +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
+|                         | Tuple           | :py:class:`tuple` <:py:obj:`int`>                                         | :py:class:`tuple` <:py:obj:`int`>                                         |
++-------------------------+-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
+| DEVVAR_ULONG64ARRAY     | Numpy           | :py:class:`numpy.ndarray` (dtype= :py:obj:`numpy.uint64`)                 | :py:class:`numpy.ndarray` (dtype= :py:obj:`numpy.uint64`)                 |
+| or                      +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
+| (DEV_ULONG64 + SPECTRUM)| Bytes           | :py:obj:`bytes` (which is in fact equal to :py:obj:`str`)                 | :py:obj:`bytes`                                                           |
+| or                      +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
+| (DEV_ULONG64 + IMAGE)   | ByteArray       | :py:obj:`bytearray`                                                       | :py:obj:`bytearray`                                                       |
+|                         +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
+|                         | String          | :py:obj:`str`                                                             | String    :py:obj:`str` (decoded with default python encoding *utf-8*!!!) |
+|                         +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
+|                         | List            | :py:class:`list` <int (64 bits) / long (32 bits)>                         | :py:class:`list` <:py:obj:`int`>                                          |
+|                         +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
+|                         | Tuple           | :py:class:`tuple` <int (64 bits) / long (32 bits)>                        | :py:class:`tuple` <:py:obj:`int`>                                         |
++-------------------------+-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
+| DEVVAR_STRINGARRAY      |                 | sequence<:py:obj:`str`>                                                   | sequence<:py:obj:`str`>                                                   |
+| or                      |                 |                                                                           | (decoded with *latin-1*, aka *ISO-8859-1*)                                |
+| (DEV_STRING + SPECTRUM) |                 |                                                                           |                                                                           |
+| or                      |                 |                                                                           |                                                                           |
+| (DEV_STRING + IMAGE)    |                 |                                                                           |                                                                           |
++-------------------------+-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
+|                         |                 | sequence of two elements:                                                 | sequence of two elements:                                                 |
+|  DEV_LONGSTRINGARRAY    |                 |                                                                           |                                                                           |
+|                         |                 | 0. :py:class:`numpy.ndarray` (dtype= :py:obj:`numpy.int32`) or            | 0. :py:class:`numpy.ndarray` (dtype= :py:obj:`numpy.int32`) or            |
+|                         |                 |    sequence<:py:obj:`int`>                                                |    sequence<:py:obj:`int`>                                                |
+|                         |                 | 1. sequence<:py:obj:`str`>                                                | 1.  sequence<:py:obj:`str`> (decoded with *latin-1*, aka *ISO-8859-1*)    |
++-------------------------+-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
+|                         |                 | sequence of two elements:                                                 | sequence of two elements:                                                 |
+|  DEV_DOUBLESTRINGARRAY  |                 |                                                                           |                                                                           |
+|                         |                 | 0. :py:class:`numpy.ndarray` (dtype= :py:obj:`numpy.float64`) or          | 0. :py:class:`numpy.ndarray` (dtype= :py:obj:`numpy.float64`) or          |
+|                         |                 |    sequence<:py:obj:`int`>                                                |    sequence<:py:obj:`int`>                                                |
+|                         |                 | 1. sequence<:py:obj:`str`>                                                | 1. sequence<:py:obj:`str`> (decoded with *latin-1*, aka *ISO-8859-1*)     |
++-------------------------+-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
+
+For SPECTRUM and IMAGES the actual sequence object used depends on the context 
+where the tango data is used, and the availability of :py:mod:`numpy`.
+
+1. for properties the sequence is always a :py:class:`list`. Example::
+    
+    >>> import PyTango
+    >>> db = PyTango.Database()
+    >>> s = db.get_property(["TangoSynchrotrons"])
+    >>> print type(s)
+    <type 'list'>
+
+2. for attribute/command values
+    - :py:class:`numpy.ndarray` if PyTango was compiled with :py:mod:`numpy`
+      support (default) and :py:mod:`numpy` is installed.
+    - :py:class:`list` otherwise
diff --git a/doc/database.rst b/doc/database.rst
index 0450b3c..3a3eefd 100644
--- a/doc/database.rst
+++ b/doc/database.rst
@@ -1,5 +1,5 @@
-The Tango Database Python API
-=============================
+Database API
+============
 
 .. currentmodule:: PyTango
 
diff --git a/doc/encoded.rst b/doc/encoded.rst
index f85b137..8851023 100644
--- a/doc/encoded.rst
+++ b/doc/encoded.rst
@@ -1,12 +1,12 @@
 
 .. _encoded:
 
-The Tango Encoded Python API
-============================
+Encoded API
+===========
 
 *This feature is only possible since PyTango 7.1.4*
 
 .. currentmodule:: PyTango
 
 .. autoclass:: PyTango.EncodedAttribute
-    :members:
\ No newline at end of file
+    :members:
diff --git a/doc/itango/features.rst b/doc/itango/features.rst
index 0033858..8a5b66f 100644
--- a/doc/itango/features.rst
+++ b/doc/itango/features.rst
@@ -38,5 +38,3 @@ Plus an additional set o Tango_ specific features:
 Check the :ref:`itango-highlights` to see how to put these feature to good use
 :-)
 
-.. _IPython: http://ipython.org/
-.. _Tango: http://www.tango-controls.org/
\ No newline at end of file
diff --git a/doc/itango/highlights.rst b/doc/itango/highlights.rst
index bfd12a1..02575e8 100644
--- a/doc/itango/highlights.rst
+++ b/doc/itango/highlights.rst
@@ -643,5 +643,4 @@ To stop monitoring the attribute:
 .. note::
     Type 'mon?' to see detailed information about this magic command
 
-.. _IPython: http://ipython.org/
-.. _Tango: http://www.tango-controls.org/
+
diff --git a/doc/itango/index.rst b/doc/itango/index.rst
index 3a6cd05..25f123b 100644
--- a/doc/itango/index.rst
+++ b/doc/itango/index.rst
@@ -30,8 +30,3 @@ and you should get something like this:
 
     features
     highlights
-
---------------------------------------------------------------------------------
-
-.. _IPython: http://ipython.org/
-.. _Tango: http://www.tango-controls.org/
diff --git a/doc/quicktour.rst b/doc/quicktour.rst
index a881b76..1ed0cbc 100644
--- a/doc/quicktour.rst
+++ b/doc/quicktour.rst
@@ -14,7 +14,7 @@ Quick tour on the client side
 Check PyTango version
 ~~~~~~~~~~~~~~~~~~~~~
 
-Start an ipython tango console with::
+Start an IPython_ tango console with::
 
     $ itango
 
@@ -177,9 +177,9 @@ structures.
         
 .. note::
     notice that the command returns a list of two elements. The first element is
-    a :class:`numpy.ndarray` (assuming PyTango is compiled with numpy support).
+    a :class:`numpy.ndarray` (assuming PyTango is compiled with numpy_ support).
     This is because PyTango does a best effort to convert all numeric array types
-    to numpy arrays.
+    to numpy_ arrays.
     
 Reading and writing attributes
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -500,4 +500,3 @@ The following code is the complete device server code::
 
     Quick tour (original) <quicktour_old>
     
-.. _IPython: http://ipython.scipy.org/
diff --git a/doc/revision.rst b/doc/revision.rst
index 939582e..b7b68f8 100644
--- a/doc/revision.rst
+++ b/doc/revision.rst
@@ -12,7 +12,7 @@ Revision
 History of modifications:
 
 +----------+----------------------------------------------------------------------------------+-----------------------------------------------------+-----------------------+
-|   Date   | Revision                                                                         |                          Description                | Author                |
+| Date     | Revision                                                                         | Description                                         | Author                |
 +==========+==================================================================================+=====================================================+=======================+
 | 18/07/03 | 1.0                                                                              | Initial Version                                     | M\. Ounsy             |
 +----------+----------------------------------------------------------------------------------+-----------------------------------------------------+-----------------------+
@@ -71,224 +71,242 @@ History of modifications:
 +----------+----------------------------------------------------------------------------------+-----------------------------------------------------+-----------------------+
 | 20/05/13 | `8.16 <http://www.tango-controls.org/static/PyTango/v803/doc/html/index.html>`_  | Update to PyTango 8.0.3                             | T\. Coutinho          |
 +----------+----------------------------------------------------------------------------------+-----------------------------------------------------+-----------------------+
+| 28/08/13 | `8.13 <http://www.tango-controls.org/static/PyTango/v723/doc/html/index.html>`_  | Update to PyTango 7.2.4                             | T\. Coutinho          |
++----------+----------------------------------------------------------------------------------+-----------------------------------------------------+-----------------------+
+| 22/11/13 | `8.18 <http://www.tango-controls.org/static/PyTango/v810/doc/html/index.html>`_  | Update to PyTango 8.1.1                             | T\. Coutinho          |
++----------+----------------------------------------------------------------------------------+-----------------------------------------------------+-----------------------+
 
 .. _version-history:
 
 Version history
 ---------------
 
-+------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| version    | Changes                                                                                                                                                                      |
-+============+==============================================================================================================================================================================+
-| 8.0.3      | Features:                                                                                                                                                                    |
-|            |     - from sourceforge:                                                                                                                                                      |
-|            |         - `88: Implement Util::server_set_event_loop method in python <https://sourceforge.net/p/tango-cs/feature-requests/88>`_                                             |
-|            | Bug fixes:                                                                                                                                                                   |
-|            |     - from sourceforge:                                                                                                                                                      |
-|            |         - `3576353: [pytango] segfault on 'RestartServer' <https://sourceforge.net/tracker/?func=detail&aid=3576353&group_id=57612&atid=484769>`_                            |
-|            |         - `3579062: [pytango] Attribute missing methods <https://sourceforge.net/tracker/?func=detail&aid=3579062&group_id=57612&atid=484769>`_                              |
-|            |         - `3586337: [pytango] Some DeviceClass methods are not python safe <https://sourceforge.net/tracker/?func=detail&aid=3586337&group_id=57612&atid=484769>`_           |
-|            |         - `3598514: DeviceProxy.__setattr__ break python's descriptors <https://sourceforge.net/tracker/?func=detail&aid=3598514&group_id=57612&atid=484769>`_               |
-|            |         - `3607779: [pytango] IPython 0.10 error <https://sourceforge.net/tracker/?func=detail&aid=3607779&group_id=57612&atid=484769>`_                                     |
-|            |         - `598: Import DLL by PyTango failed on windows <https://sourceforge.net/p/tango-cs/bugs/598/>`_                                                                     |
-|            |         - `605: [pytango] use distutils.version module <https://sourceforge.net/p/tango-cs/bugs/605/>`_                                                                      |
-+------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| 8.0.2      | Bug fixes:                                                                                                                                                                   |
-|            |     - from sourceforge:                                                                                                                                                      |
-|            |         - `3570970: [pytango] problem during the python3 building <https://sourceforge.net/tracker/?func=detail&aid=3570970&group_id=57612&atid=484769>`_                    |
-|            |         - `3570971: [pytango] itango does not work without qtconsole <https://sourceforge.net/tracker/?func=detail&aid=3570971&group_id=57612&atid=484769>`_                 |
-|            |         - `3570972: [pytango] warning/error when building 8.0.0 <https://sourceforge.net/tracker/?func=detail&aid=3570972&group_id=57612&atid=484769>`_                      |
-|            |         - `3570975: [pytango] problem during use of python3 version <https://sourceforge.net/tracker/?func=detail&aid=3570975&group_id=57612&atid=484769>`_                  |
-|            |         - `3574099: [pytango] compile error with gcc < 4.5 <https://sourceforge.net/tracker/?func=detail&aid=3574099&group_id=57612&atid=484769>`_                           |
-+------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| 8.0.1      | *SKIPPED*                                                                                                                                                                    |
-+------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| 8.0.0      | Features:                                                                                                                                                                    |
-|            |     - Implemented tango C++ 8.0 API                                                                                                                                          |
-|            |     - Python 3k compatible                                                                                                                                                   |
-|            | Bug fixes:                                                                                                                                                                   |
-|            |     - from sourceforge:                                                                                                                                                      |
-|            |         - `3023857: DevEncoded write attribute not supported <https://sourceforge.net/tracker/?func=detail&aid=3023857&group_id=57612&atid=484769>`_                         |
-|            |         - `3521545: [pytango] problem with tango profile <https://sourceforge.net/tracker/?func=detail&aid=3521545&group_id=57612&atid=484769>`_                             |
-|            |         - `3530535: PyTango group writting fails <https://sourceforge.net/tracker/?func=detail&aid=3530535&group_id=57612&atid=484769>`_                                     |
-|            |         - `3564959: EncodedAttribute.encode_xxx() methods don't accept bytearray  <https://sourceforge.net/tracker/?func=detail&aid=3564959&group_id=57612&atid=484769>`_    |
-+------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| 7.2.3      | Features:                                                                                                                                                                    |
-|            |     - from sourceforge:                                                                                                                                                      |
-|            |         - `3495607: DeviceClass.device_name_factory is missing <https://sourceforge.net/tracker/?func=detail&aid=3495607&group_id=57612&atid=484772>`_                       |
-|            | Bug fixes:                                                                                                                                                                   |
-|            |     - from sourceforge:                                                                                                                                                      |
-|            |         - `3103588: documentation of PyTango.Attribute.Group <https://sourceforge.net/tracker/?func=detail&aid=3103588&group_id=57612&atid=484769>`_                         |
-|            |         - `3458336: Problem with pytango 7.2.2 <https://sourceforge.net/tracker/?func=detail&aid=3458336&group_id=57612&atid=484769>`_                                       |
-|            |         - `3463377: PyTango memory leak in read encoded attribute <https://sourceforge.net/tracker/?func=detail&aid=3463377&group_id=57612&atid=484769>`_                    |
-|            |         - `3487930: [pytango] wrong python dependency <https://sourceforge.net/tracker/?func=detail&aid=3487930&group_id=57612&atid=484769>`_                                |
-|            |         - `3511509: Attribute.set_value_date_quality for encoded does not work <https://sourceforge.net/tracker/?func=detail&aid=3511509&group_id=57612&atid=484769>`_       |
-|            |         - `3514457: [pytango]  TANGO_HOST multi-host support <https://sourceforge.net/tracker/?func=detail&aid=3514457&group_id=57612&atid=484769>`_                         |
-|            |         - `3520739: command_history(...) in  PyTango <https://sourceforge.net/tracker/?func=detail&aid=3520739&group_id=57612&atid=484769>`_                                 |
-+------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| 7.2.2      | Features:                                                                                                                                                                    |
-|            |     - from sourceforge:                                                                                                                                                      |
-|            |         - `3305251: DS dynamic attributes discards some Attr properties <https://sourceforge.net/tracker/?func=detail&aid=3305251&group_id=57612&atid=484769>`_              |
-|            |         - `3365792: DeviceProxy.<cmd_name> could be documented <https://sourceforge.net/tracker/?func=detail&aid=3365792&group_id=57612&atid=484772>`_                       |
-|            |         - `3386079: add support for ipython 0.11 <https://sourceforge.net/tracker/?func=detail&aid=3386079&group_id=57612&atid=484772>`_                                     |
-|            |         - `3437654: throw python exception as tango exception <https://sourceforge.net/tracker/?func=detail&aid=3437654&group_id=57612&atid=484772>`_                        |
-|            |         - `3447477: spock profile installation <https://sourceforge.net/tracker/?func=detail&aid=3447477&group_id=57612&atid=484772>`_                                       |
-|            | Bug fixes:                                                                                                                                                                   |
-|            |     - from sourceforge:                                                                                                                                                      |
-|            |         - `3372371: write attribute of DevEncoded doesn't work <https://sourceforge.net/tracker/?func=detail&aid=3372371&group_id=57612&atid=484769>`_                       |
-|            |         - `3374026: [pytango] pyflakes warning <https://sourceforge.net/tracker/?func=detail&aid=3374026&group_id=57612&atid=484769>`_                                       |
-|            |         - `3404771: PyTango.MultiAttribute.get_attribute_list missing <https://sourceforge.net/tracker/?func=detail&aid=3404771&group_id=57612&atid=484769>`_                |
-|            |         - `3405580: PyTango.MultiClassAttribute missing <https://sourceforge.net/tracker/?func=detail&aid=3405580&group_id=57612&atid=484769>`_                              |
-+------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| 7.2.1      | *SKIPPED*                                                                                                                                                                    |
-+------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| 7.2.0      | Features:                                                                                                                                                                    |
-|            |     - from sourceforge:                                                                                                                                                      |
-|            |         - `3286678: Add missing EncodedAttribute JPEG methods <https://sourceforge.net/tracker/?func=detail&aid=3286678&group_id=57612&atid=484772>`_                        |
-+------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| 7.1.6      | Bug fixes:                                                                                                                                                                   |
-|            |    - 7.1.5 distribution is missing some files                                                                                                                                |
-+------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| 7.1.5      | Bug fixes:                                                                                                                                                                   |
-|            |     - from sourceforge:                                                                                                                                                      |
-|            |         - `3284174: 7.1.4 does not build with gcc 4.5 and tango 7.2.6 <https://sourceforge.net/tracker/?func=detail&aid=3284174&group_id=57612&atid=484769>`_                |
-|            |         - `3284265: [pytango][7.1.4] a few files without licence and copyright <https://sourceforge.net/tracker/?func=detail&aid=3284265&group_id=57612&atid=484769>`_       |
-|            |         - `3284318: copyleft vs copyright <https://sourceforge.net/tracker/?func=detail&aid=3284318&group_id=57612&atid=484769>`_                                            |
-|            |         - `3284434: [pytango][doc] few ERROR during the doc generation <https://sourceforge.net/tracker/?func=detail&aid=3284434&group_id=57612&atid=484769>`_               |
-|            |         - `3284435: [pytango][doc] few warning during the doc generation <https://sourceforge.net/tracker/?func=detail&aid=3284435&group_id=57612&atid=484769>`_             |
-|            |         - `3284440: [pytango][spock] the profile can't be installed <https://sourceforge.net/tracker/?func=detail&aid=3284440&group_id=57612&atid=484769>`_                  |
-|            |         - `3285185: PyTango Device Server does not load Class Properties values <https://sourceforge.net/tracker/?func=detail&aid=3285185&group_id=57612&atid=484769>`_      |
-|            |         - `3286055: PyTango 7.1.x DS using Tango C++ 7.2.x seg faults on exit <https://sourceforge.net/tracker/?func=detail&aid=3286055&group_id=57612&atid=484769>`_        |
-+------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| 7.1.4      | Features:                                                                                                                                                                    |
-|            |     - from sourceforge:                                                                                                                                                      |
-|            |         - `3274309: Generic Callback for events <https://sourceforge.net/tracker/?func=detail&aid=3274309&group_id=57612&atid=484772>`_                                      |
-|            |                                                                                                                                                                              |
-|            | Bug fixes:                                                                                                                                                                   |
-|            |     - from sourceforge:                                                                                                                                                      |
-|            |         - `3011775: Seg Faults due to removed dynamic attributes <https://sourceforge.net/tracker/?func=detail&aid=3011775&group_id=57612&atid=484769>`_                     |
-|            |         - `3105169: PyTango 7.1.3 does not compile with Tango 7.2.X <https://sourceforge.net/tracker/?func=detail&aid=3105169&group_id=57612&atid=484769>`_                  |
-|            |         - `3107243: spock profile does not work with python 2.5 <https://sourceforge.net/tracker/?func=detail&aid=3107243&group_id=57612&atid=484769>`_                      |
-|            |         - `3124427: PyTango.WAttribute.set_max_value() changes min value <https://sourceforge.net/tracker/?func=detail&aid=3124427&group_id=57612&atid=484769>`_             |
-|            |         - `3170399: Missing documentation about is_<attr>_allowed method <https://sourceforge.net/tracker/?func=detail&aid=3170399&group_id=57612&atid=484769>`_             |
-|            |         - `3189082: Missing get_properties() for Attribute class <https://sourceforge.net/tracker/?func=detail&aid=3189082&group_id=57612&atid=484769>`_                     |
-|            |         - `3196068: delete_device() not called after server_admin.Kill() <https://sourceforge.net/tracker/?func=detail&aid=3196068&group_id=57612&atid=484769>`_             |
-|            |         - `3257286: Binding crashes when reading a WRITE string attribute <https://sourceforge.net/tracker/?func=detail&aid=3257286&group_id=57612&atid=484769>`_            |
-|            |         - `3267628: DP.read_attribute(, extract=List/tuple) write value is wrong <https://sourceforge.net/tracker/?func=detail&aid=3267628&group_id=57612&atid=484769>`_     |
-|            |         - `3274262: Database.is_multi_tango_host missing <https://sourceforge.net/tracker/?func=detail&aid=3274262&group_id=57612&atid=484769>`_                             |
-|            |         - `3274319: EncodedAttribute is missing in PyTango (<= 7.1.3) <https://sourceforge.net/tracker/?func=detail&aid=3274319&group_id=57612&atid=484769>`_                |
-|            |         - `3277269: read_attribute(DevEncoded) is not numpy as expected <https://sourceforge.net/tracker/?func=detail&aid=3277269&group_id=57612&atid=484769>`_              |
-|            |         - `3278946: DeviceAttribute copy constructor is not working <https://sourceforge.net/tracker/?func=detail&aid=3278946&group_id=57612&atid=484769>`_                  |
-|            |                                                                                                                                                                              |
-|            | Documentation:                                                                                                                                                               |
-|            |     - Added :ref:`utilities` chapter                                                                                                                                         |
-|            |     - Added :ref:`encoded` chapter                                                                                                                                           |
-|            |     - Improved :ref:`server` chapter                                                                                                                                         |
-+------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| 7.1.3      | Features:                                                                                                                                                                    |
-|            |     - tango logging with print statement                                                                                                                                     |
-|            |     - tango logging with decorators                                                                                                                                          |
-|            |     - from sourceforge:                                                                                                                                                      |
-|            |         - `3060380: ApiUtil should be exported to PyTango  <https://sourceforge.net/tracker/?func=detail&aid=3060380&group_id=57612&atid=484772>`_                           |
-|            |                                                                                                                                                                              |
-|            | Bug fixes:                                                                                                                                                                   |
-|            |     - added licence header to all source code files                                                                                                                          |
-|            |     - spock didn't work without TANGO_HOST env. variable (it didn't recognize                                                                                                |
-|            |       tangorc)                                                                                                                                                               |
-|            |     - spock should give a proper message if it tries to be initialized outside                                                                                               |
-|            |       ipython                                                                                                                                                                |
-|            |     - from sourceforge:                                                                                                                                                      |
-|            |         - `3048798: licence issue GPL != LGPL <https://sourceforge.net/tracker/?func=detail&aid=3048798&group_id=57612&atid=484769>`_                                        |
-|            |         - `3073378: DeviceImpl.signal_handler raising exception crashes DS <https://sourceforge.net/tracker/?func=detail&aid=3073378&group_id=57612&atid=484769>`_           |
-|            |         - `3088031: Python DS unable to read DevVarBooleanArray property <https://sourceforge.net/tracker/?func=detail&aid=3088031&group_id=57612&atid=484769>`_             |
-|            |         - `3102776: PyTango 7.1.2 does not work with python 2.4 & boost 1.33.0 <https://sourceforge.net/tracker/?func=detail&aid=3102776&group_id=57612&atid=484769>`_       |
-|            |         - `3102778: Fix compilation warnings in linux <https://sourceforge.net/tracker/?func=detail&aid=3102778&group_id=57612&atid=484769>`_                                |
-+------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| 7.1.2      | Features:                                                                                                                                                                    |
-|            |     - from sourceforge:                                                                                                                                                      |
-|            |         - `2995964: Dynamic device creation <https://sourceforge.net/tracker/?func=detail&aid=2995964&group_id=57612&atid=484772>`_                                          |
-|            |         - `3010399: The DeviceClass.get_device_list that exists in C++ is missing <https://sourceforge.net/tracker/?func=detail&aid=3010399&group_id=57612&atid=484772>`_    |
-|            |         - `3023686: Missing DeviceProxy.<attribute name> <https://sourceforge.net/tracker/?func=detail&aid=3023686&group_id=57612&atid=484772>`_                             |
-|            |         - `3025396: DeviceImpl is missing some CORBA methods <https://sourceforge.net/tracker/?func=detail&aid=3025396&group_id=57612&atid=484772>`_                         |
-|            |         - `3032005: IPython extension for PyTango <https://sourceforge.net/tracker/?func=detail&aid=3032005&group_id=57612&atid=484772>`_                                    |
-|            |         - `3033476: Make client objects pickable <https://sourceforge.net/tracker/?func=detail&aid=3033476&group_id=57612&atid=484772>`_                                     |
-|            |         - `3039902: PyTango.Util.add_class would be useful <https://sourceforge.net/tracker/?func=detail&aid=3039902&group_id=57612&atid=484772>`_                           |
-|            |                                                                                                                                                                              |
-|            | Bug fixes:                                                                                                                                                                   |
-|            |     - from sourceforge:                                                                                                                                                      |
-|            |         - `2975940: DS command with DevVarCharArray return type fails <https://sourceforge.net/tracker/?func=detail&aid=2975940&group_id=57612&atid=484769>`_                |
-|            |         - `3000467: DeviceProxy.unlock is LOCKING instead of unlocking! <https://sourceforge.net/tracker/?func=detail&aid=3000467&group_id=57612&atid=484769>`_              |
-|            |         - `3010395: Util.get_device_* methods don't work <https://sourceforge.net/tracker/?func=detail&aid=3010395&group_id=57612&atid=484769>`_                             |
-|            |         - `3010425: Database.dev_name does not work <https://sourceforge.net/tracker/?func=detail&aid=3010425&group_id=57612&atid=484769>`_                                  |
-|            |         - `3016949: command_inout_asynch callback does not work <https://sourceforge.net/tracker/?func=detail&aid=3016949&group_id=57612&atid=484769>`_                      |
-|            |         - `3020300: PyTango does not compile with gcc 4.1.x <https://sourceforge.net/tracker/?func=detail&aid=3020300&group_id=57612&atid=484769>`_                          |
-|            |         - `3030399: Database put(delete)_attribute_alias generates segfault <https://sourceforge.net/tracker/?func=detail&aid=3030399&group_id=57612&atid=484769>`_          |
-+------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| 7.1.1      | Features:                                                                                                                                                                    |
-|            |     - Improved setup script                                                                                                                                                  |
-|            |     - Interfaced with PyPI                                                                                                                                                   |
-|            |     - Cleaned build script warnings due to unclean python C++ macro definitions                                                                                              |
-|            |     - from sourceforge:                                                                                                                                                      |
-|            |         - `2985993: PyTango numpy command support <https://sourceforge.net/tracker/?func=detail&aid=2985993&group_id=57612&atid=484772>`_                                    |
-|            |         - `2971217: PyTango.GroupAttrReplyList slicing <https://sourceforge.net/tracker/?func=detail&aid=2971217&group_id=57612&atid=484772>`_                               |
-|            |                                                                                                                                                                              |
-|            | Bug fixes:                                                                                                                                                                   |
-|            |     - from sourceforge:                                                                                                                                                      |
-|            |         - `2983299: Database.put_property() deletes the property <https://sourceforge.net/tracker/?func=detail&aid=2983299&group_id=57612&atid=484769>`_                     |
-|            |         - `2953689: can not write_attribute scalar/spectrum/image <https://sourceforge.net/tracker/?func=detail&aid=2953689&group_id=57612&atid=484769>`_                    |
-|            |         - `2953030: PyTango doc installation <https://sourceforge.net/tracker/?func=detail&aid=2953030&group_id=57612&atid=484769>`_                                         |
-+------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| 7.1.0      | Features:                                                                                                                                                                    |
-|            |     - from sourceforge:                                                                                                                                                      |
-|            |         - `2908176: read_*, write_* and is_*_allowed() methods can now be defined <https://sourceforge.net/tracker/?func=detail&aid=2908176&group_id=57612&atid=484772>`_    |
-|            |         - `2941036: TimeVal conversion to time and datetime <https://sourceforge.net/tracker/?func=detail&aid=2941036&group_id=57612&atid=484772>`_                          |
-|            |     - added str representation on Attr, Attribute, DeviceImpl and DeviceClass                                                                                                |
-|            |                                                                                                                                                                              |
-|            | Bug fixes:                                                                                                                                                                   |
-|            |     - from sourceforge:                                                                                                                                                      |
-|            |         - `2903755: get_device_properties() bug reading DevString properties <https://sourceforge.net/tracker/?func=detail&aid=2903755group_id=57612&atid=484769>`_          |
-|            |         - `2909927: PyTango.Group.read_attribute() return values <https://sourceforge.net/tracker/?func=detail&aid=2909927&group_id=57612&atid=484769>`_                     |
-|            |         - `2914194: DevEncoded does not work <https://sourceforge.net/tracker/?func=detail&aid=2914194&group_id=57612&atid=484769>`_                                         |
-|            |         - `2916397: PyTango.DeviceAttribute copy constructor does not work <https://sourceforge.net/tracker/?func=detail&aid=2916397&group_id=57612&atid=484769>`_           |
-|            |         - `2936173: PyTango.Group.read_attributes() fails <https://sourceforge.net/tracker/?func=detail&aid=2936173&group_id=57612&atid=484769>`_                            |
-|            |         - `2949099: Missing PyTango.Except.print_error_stack <https://sourceforge.net/tracker/?func=detail&aid=2949099&group_id=57612&atid=484769>`_                         |
-+------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| 7.1.0rc1   | Features:                                                                                                                                                                    |
-|            |     - v = image_attribute.get_write_value() returns square sequences (arrays of                                                                                              |
-|            |       arrays, or numpy objects) now instead of flat lists. Also for spectrum                                                                                                 |
-|            |       attributes a numpy is returned by default now instead.                                                                                                                 |
-|            |     - image_attribute.set_value(v) accepts numpy arrays now or square sequences                                                                                              |
-|            |       instead of just flat lists. So, dim_x and dim_y are useless now. Also the                                                                                              |
-|            |       numpy path is faster.                                                                                                                                                  |
-|            |     - new enum AttrSerialModel                                                                                                                                               |
-|            |     - Attribute new methods: set(get)_attr_serial_model, set_change_event,                                                                                                   |
-|            |       set_archive_event, is_change_event, is_check_change_event,                                                                                                             |
-|            |       is_archive_criteria, is_check_archive_criteria, remove_configuration                                                                                                   |
-|            |     - added support for numpy scalars in tango operations like write_attribute                                                                                               |
-|            |       (ex: now a DEV_LONG attribute can receive a numpy.int32 argument in a                                                                                                  |
-|            |       write_attribute method call)                                                                                                                                           |
-|            |                                                                                                                                                                              |
-|            | Bug fixes:                                                                                                                                                                   |
-|            |     - DeviceImpl.set_value for scalar attributes                                                                                                                             |
-|            |     - DeviceImpl.push_***_event                                                                                                                                              |
-|            |     - server commands with DevVar***StringArray as parameter or as return type                                                                                               |
-|            |     - in windows,a bug in PyTango.Util prevented servers from starting up                                                                                                    |
-|            |     - DeviceImpl.get_device_properties for string properties assigns only first                                                                                              |
-|            |       character of string to object member instead of entire string                                                                                                          |
-|            |     - added missing methods to Util                                                                                                                                          |
-|            |     - exported SubDevDiag class                                                                                                                                              |
-|            |     - error in read/events of attributes of type DevBoolean READ_WRITE                                                                                                       |
-|            |     - error in automatic unsubscribe events of DeviceProxy when the object                                                                                                   |
-|            |       disapears (happens only on some compilers with some optimization flags)                                                                                                |
-|            |     - fix possible bug when comparing attribute names in DeviceProxy                                                                                                         |
-|            |     - pretty print of DevFailed -> fix deprecation warning in python 2.6                                                                                                     |
-|            |     - device class properties where not properly fetched when there is no                                                                                                    |
-|            |       property value defined                                                                                                                                                 |
-|            |     - memory leak when converting DevFailed exceptions from C++ to python                                                                                                    |
-|            |     - python device server file without extension does not start                                                                                                             |
-|            |                                                                                                                                                                              |
-|            | Documentation:                                                                                                                                                               |
-|            |     - Improved FAQ                                                                                                                                                           |
-|            |     - Improved compilation chapter                                                                                                                                           |
-|            |     - Improved migration information                                                                                                                                         |
-+------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
++----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| version  | Changes                                                                                                                                                           |
++==========+===================================================================================================================================================================+
+| 8.1.1    | Features:                                                                                                                                                         |
+|          | - Implemented tango C++ 8.1 API                                                                                                                                   |
+|          |                                                                                                                                                                   |
+|          | Bug fixes:                                                                                                                                                        |
+|          | - `527: set_value() for ULong64 <https://sourceforge.net/p/tango-cs/bugs/527/>`_                                                                                  |
+|          | - `573: [pytango] python3 error with unregistered device <https://sourceforge.net/p/tango-cs/bugs/573/>`_                                                         |
+|          | - `611: URGENT fail to write attribute with PyTango 8.0.3 <https://sourceforge.net/p/tango-cs/bugs/611/>`_                                                        |
+|          | - `612: [pytango][8.0.3] failed to build from source on s390 <https://sourceforge.net/p/tango-cs/bugs/612/>`_                                                     |
+|          | - `615: Threading problem when setting a DevULong64 attribute <https://sourceforge.net/p/tango-cs/bugs/615/>`_                                                    |
+|          | - `622: PyTango broken when running on Ubuntu 13 <https://sourceforge.net/p/tango-cs/bugs/622/>`_                                                                 |
+|          | - `626: attribute_history extraction can raised an exception <https://sourceforge.net/p/tango-cs/bugs/626/>`_                                                     |
+|          | - `628: Problem in installing PyTango 8.0.3 on Scientific Linux 6 <https://sourceforge.net/p/tango-cs/bugs/628/>`_                                                |
+|          | - `635: Reading of ULong64 attributes does not work <https://sourceforge.net/p/tango-cs/bugs/635/>`_                                                              |
+|          | - `636: PyTango log messages are not filtered by level <https://sourceforge.net/p/tango-cs/bugs/636/>`_                                                           |
++----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| 8.1.0    | *SKIPPED*                                                                                                                                                         |
++----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| 8.0.3    | Features:                                                                                                                                                         |
+|          | - `88: Implement Util::server_set_event_loop method in python <https://sourceforge.net/p/tango-cs/feature-requests/88>`_                                          |
+|          |                                                                                                                                                                   |
+|          | Bug fixes:                                                                                                                                                        |
+|          | - `3576353: [pytango] segfault on 'RestartServer' <https://sourceforge.net/tracker/?func=detail&aid=3576353&group_id=57612&atid=484769>`_                         |
+|          | - `3579062: [pytango] Attribute missing methods <https://sourceforge.net/tracker/?func=detail&aid=3579062&group_id=57612&atid=484769>`_                           |
+|          | - `3586337: [pytango] Some DeviceClass methods are not python safe <https://sourceforge.net/tracker/?func=detail&aid=3586337&group_id=57612&atid=484769>`_        |
+|          | - `3598514: DeviceProxy.__setattr__ break python's descriptors <https://sourceforge.net/tracker/?func=detail&aid=3598514&group_id=57612&atid=484769>`_            |
+|          | - `3607779: [pytango] IPython 0.10 error <https://sourceforge.net/tracker/?func=detail&aid=3607779&group_id=57612&atid=484769>`_                                  |
+|          | - `598: Import DLL by PyTango failed on windows <https://sourceforge.net/p/tango-cs/bugs/598/>`_                                                                  |
+|          | - `605: [pytango] use distutils.version module <https://sourceforge.net/p/tango-cs/bugs/605/>`_                                                                   |
++----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| 8.0.2    | Bug fixes:                                                                                                                                                        |
+|          | - `3570970: [pytango] problem during the python3 building <https://sourceforge.net/tracker/?func=detail&aid=3570970&group_id=57612&atid=484769>`_                 |
+|          | - `3570971: [pytango] itango does not work without qtconsole <https://sourceforge.net/tracker/?func=detail&aid=3570971&group_id=57612&atid=484769>`_              |
+|          | - `3570972: [pytango] warning/error when building 8.0.0 <https://sourceforge.net/tracker/?func=detail&aid=3570972&group_id=57612&atid=484769>`_                   |
+|          | - `3570975: [pytango] problem during use of python3 version <https://sourceforge.net/tracker/?func=detail&aid=3570975&group_id=57612&atid=484769>`_               |
+|          | - `3574099: [pytango] compile error with gcc < 4.5 <https://sourceforge.net/tracker/?func=detail&aid=3574099&group_id=57612&atid=484769>`_                        |
++----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| 8.0.1    | *SKIPPED*                                                                                                                                                         |
++----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| 8.0.0    | Features:                                                                                                                                                         |
+|          | - Implemented tango C++ 8.0 API                                                                                                                                   |
+|          | - Python 3k compatible                                                                                                                                            |
+|          | Bug fixes:                                                                                                                                                        |
+|          | - `3023857: DevEncoded write attribute not supported <https://sourceforge.net/tracker/?func=detail&aid=3023857&group_id=57612&atid=484769>`_                      |
+|          | - `3521545: [pytango] problem with tango profile <https://sourceforge.net/tracker/?func=detail&aid=3521545&group_id=57612&atid=484769>`_                          |
+|          | - `3530535: PyTango group writting fails <https://sourceforge.net/tracker/?func=detail&aid=3530535&group_id=57612&atid=484769>`_                                  |
+|          | - `3564959: EncodedAttribute.encode_xxx() methods don't accept bytearray  <https://sourceforge.net/tracker/?func=detail&aid=3564959&group_id=57612&atid=484769>`_ |
++----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| 7.2.4    | Bug fixes:                                                                                                                                                        |
+|          | - from sourceforge:                                                                                                                                               |
+|          | - `551: [pytango] Some DeviceClass methods are not python safe <https://sourceforge.net/p/tango-cs/bugs/551/>`_                                                   |
++----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| 7.2.3    | Features:                                                                                                                                                         |
+|          | - `3495607: DeviceClass.device_name_factory is missing <https://sourceforge.net/tracker/?func=detail&aid=3495607&group_id=57612&atid=484772>`_                    |
+|          |                                                                                                                                                                   |
+|          | Bug fixes:                                                                                                                                                        |
+|          | - `3103588: documentation of PyTango.Attribute.Group <https://sourceforge.net/tracker/?func=detail&aid=3103588&group_id=57612&atid=484769>`_                      |
+|          | - `3458336: Problem with pytango 7.2.2 <https://sourceforge.net/tracker/?func=detail&aid=3458336&group_id=57612&atid=484769>`_                                    |
+|          | - `3463377: PyTango memory leak in read encoded attribute <https://sourceforge.net/tracker/?func=detail&aid=3463377&group_id=57612&atid=484769>`_                 |
+|          | - `3487930: [pytango] wrong python dependency <https://sourceforge.net/tracker/?func=detail&aid=3487930&group_id=57612&atid=484769>`_                             |
+|          | - `3511509: Attribute.set_value_date_quality for encoded does not work <https://sourceforge.net/tracker/?func=detail&aid=3511509&group_id=57612&atid=484769>`_    |
+|          | - `3514457: [pytango]  TANGO_HOST multi-host support <https://sourceforge.net/tracker/?func=detail&aid=3514457&group_id=57612&atid=484769>`_                      |
+|          | - `3520739: command_history(...) in  PyTango <https://sourceforge.net/tracker/?func=detail&aid=3520739&group_id=57612&atid=484769>`_                              |
++----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| 7.2.2    | Features:                                                                                                                                                         |
+|          | - `3305251: DS dynamic attributes discards some Attr properties <https://sourceforge.net/tracker/?func=detail&aid=3305251&group_id=57612&atid=484769>`_           |
+|          | - `3365792: DeviceProxy.<cmd_name> could be documented <https://sourceforge.net/tracker/?func=detail&aid=3365792&group_id=57612&atid=484772>`_                    |
+|          | - `3386079: add support for ipython 0.11 <https://sourceforge.net/tracker/?func=detail&aid=3386079&group_id=57612&atid=484772>`_                                  |
+|          | - `3437654: throw python exception as tango exception <https://sourceforge.net/tracker/?func=detail&aid=3437654&group_id=57612&atid=484772>`_                     |
+|          | - `3447477: spock profile installation <https://sourceforge.net/tracker/?func=detail&aid=3447477&group_id=57612&atid=484772>`_                                    |
+|          |                                                                                                                                                                   |
+|          | Bug fixes:                                                                                                                                                        |
+|          | - `3372371: write attribute of DevEncoded doesn't work <https://sourceforge.net/tracker/?func=detail&aid=3372371&group_id=57612&atid=484769>`_                    |
+|          | - `3374026: [pytango] pyflakes warning <https://sourceforge.net/tracker/?func=detail&aid=3374026&group_id=57612&atid=484769>`_                                    |
+|          | - `3404771: PyTango.MultiAttribute.get_attribute_list missing <https://sourceforge.net/tracker/?func=detail&aid=3404771&group_id=57612&atid=484769>`_             |
+|          | - `3405580: PyTango.MultiClassAttribute missing <https://sourceforge.net/tracker/?func=detail&aid=3405580&group_id=57612&atid=484769>`_                           |
++----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| 7.2.1    | *SKIPPED*                                                                                                                                                         |
++----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| 7.2.0    | Features:                                                                                                                                                         |
+|          | - from sourceforge:                                                                                                                                               |
+|          | - `3286678: Add missing EncodedAttribute JPEG methods <https://sourceforge.net/tracker/?func=detail&aid=3286678&group_id=57612&atid=484772>`_                     |
++----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| 7.1.6    | Bug fixes:                                                                                                                                                        |
+|          | - 7.1.5 distribution is missing some files                                                                                                                        |
++----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| 7.1.5    | Bug fixes:                                                                                                                                                        |
+|          | - from sourceforge:                                                                                                                                               |
+|          | - `3284174: 7.1.4 does not build with gcc 4.5 and tango 7.2.6 <https://sourceforge.net/tracker/?func=detail&aid=3284174&group_id=57612&atid=484769>`_             |
+|          | - `3284265: [pytango][7.1.4] a few files without licence and copyright <https://sourceforge.net/tracker/?func=detail&aid=3284265&group_id=57612&atid=484769>`_    |
+|          | - `3284318: copyleft vs copyright <https://sourceforge.net/tracker/?func=detail&aid=3284318&group_id=57612&atid=484769>`_                                         |
+|          | - `3284434: [pytango][doc] few ERROR during the doc generation <https://sourceforge.net/tracker/?func=detail&aid=3284434&group_id=57612&atid=484769>`_            |
+|          | - `3284435: [pytango][doc] few warning during the doc generation <https://sourceforge.net/tracker/?func=detail&aid=3284435&group_id=57612&atid=484769>`_          |
+|          | - `3284440: [pytango][spock] the profile can't be installed <https://sourceforge.net/tracker/?func=detail&aid=3284440&group_id=57612&atid=484769>`_               |
+|          | - `3285185: PyTango Device Server does not load Class Properties values <https://sourceforge.net/tracker/?func=detail&aid=3285185&group_id=57612&atid=484769>`_   |
+|          | - `3286055: PyTango 7.1.x DS using Tango C++ 7.2.x seg faults on exit <https://sourceforge.net/tracker/?func=detail&aid=3286055&group_id=57612&atid=484769>`_     |
++----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| 7.1.4    | Features:                                                                                                                                                         |
+|          | - `3274309: Generic Callback for events <https://sourceforge.net/tracker/?func=detail&aid=3274309&group_id=57612&atid=484772>`_                                   |
+|          |                                                                                                                                                                   |
+|          | Bug fixes:                                                                                                                                                        |
+|          | - `3011775: Seg Faults due to removed dynamic attributes <https://sourceforge.net/tracker/?func=detail&aid=3011775&group_id=57612&atid=484769>`_                  |
+|          | - `3105169: PyTango 7.1.3 does not compile with Tango 7.2.X <https://sourceforge.net/tracker/?func=detail&aid=3105169&group_id=57612&atid=484769>`_               |
+|          | - `3107243: spock profile does not work with python 2.5 <https://sourceforge.net/tracker/?func=detail&aid=3107243&group_id=57612&atid=484769>`_                   |
+|          | - `3124427: PyTango.WAttribute.set_max_value() changes min value <https://sourceforge.net/tracker/?func=detail&aid=3124427&group_id=57612&atid=484769>`_          |
+|          | - `3170399: Missing documentation about is_<attr>_allowed method <https://sourceforge.net/tracker/?func=detail&aid=3170399&group_id=57612&atid=484769>`_          |
+|          | - `3189082: Missing get_properties() for Attribute class <https://sourceforge.net/tracker/?func=detail&aid=3189082&group_id=57612&atid=484769>`_                  |
+|          | - `3196068: delete_device() not called after server_admin.Kill() <https://sourceforge.net/tracker/?func=detail&aid=3196068&group_id=57612&atid=484769>`_          |
+|          | - `3257286: Binding crashes when reading a WRITE string attribute <https://sourceforge.net/tracker/?func=detail&aid=3257286&group_id=57612&atid=484769>`_         |
+|          | - `3267628: DP.read_attribute(, extract=List/tuple) write value is wrong <https://sourceforge.net/tracker/?func=detail&aid=3267628&group_id=57612&atid=484769>`_  |
+|          | - `3274262: Database.is_multi_tango_host missing <https://sourceforge.net/tracker/?func=detail&aid=3274262&group_id=57612&atid=484769>`_                          |
+|          | - `3274319: EncodedAttribute is missing in PyTango (<= 7.1.3) <https://sourceforge.net/tracker/?func=detail&aid=3274319&group_id=57612&atid=484769>`_             |
+|          | - `3277269: read_attribute(DevEncoded) is not numpy as expected <https://sourceforge.net/tracker/?func=detail&aid=3277269&group_id=57612&atid=484769>`_           |
+|          | - `3278946: DeviceAttribute copy constructor is not working <https://sourceforge.net/tracker/?func=detail&aid=3278946&group_id=57612&atid=484769>`_               |
+|          |                                                                                                                                                                   |
+|          | Documentation:                                                                                                                                                    |
+|          | - Added :ref:`utilities` chapter                                                                                                                                  |
+|          | - Added :ref:`encoded` chapter                                                                                                                                    |
+|          | - Improved :ref:`server` chapter                                                                                                                                  |
++----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| 7.1.3    | Features:                                                                                                                                                         |
+|          | - tango logging with print statement                                                                                                                              |
+|          | - tango logging with decorators                                                                                                                                   |
+|          | - from sourceforge:                                                                                                                                               |
+|          | - `3060380: ApiUtil should be exported to PyTango  <https://sourceforge.net/tracker/?func=detail&aid=3060380&group_id=57612&atid=484772>`_                        |
+|          |                                                                                                                                                                   |
+|          | Bug fixes:                                                                                                                                                        |
+|          | - added licence header to all source code files                                                                                                                   |
+|          | - spock didn't work without TANGO_HOST env. variable (it didn't recognize                                                                                         |
+|          | tangorc)                                                                                                                                                          |
+|          | - spock should give a proper message if it tries to be initialized outside                                                                                        |
+|          | ipython                                                                                                                                                           |
+|          | - from sourceforge:                                                                                                                                               |
+|          | - `3048798: licence issue GPL != LGPL <https://sourceforge.net/tracker/?func=detail&aid=3048798&group_id=57612&atid=484769>`_                                     |
+|          | - `3073378: DeviceImpl.signal_handler raising exception crashes DS <https://sourceforge.net/tracker/?func=detail&aid=3073378&group_id=57612&atid=484769>`_        |
+|          | - `3088031: Python DS unable to read DevVarBooleanArray property <https://sourceforge.net/tracker/?func=detail&aid=3088031&group_id=57612&atid=484769>`_          |
+|          | - `3102776: PyTango 7.1.2 does not work with python 2.4 & boost 1.33.0 <https://sourceforge.net/tracker/?func=detail&aid=3102776&group_id=57612&atid=484769>`_    |
+|          | - `3102778: Fix compilation warnings in linux <https://sourceforge.net/tracker/?func=detail&aid=3102778&group_id=57612&atid=484769>`_                             |
++----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| 7.1.2    | Features:                                                                                                                                                         |
+|          | - from sourceforge:                                                                                                                                               |
+|          | - `2995964: Dynamic device creation <https://sourceforge.net/tracker/?func=detail&aid=2995964&group_id=57612&atid=484772>`_                                       |
+|          | - `3010399: The DeviceClass.get_device_list that exists in C++ is missing <https://sourceforge.net/tracker/?func=detail&aid=3010399&group_id=57612&atid=484772>`_ |
+|          | - `3023686: Missing DeviceProxy.<attribute name> <https://sourceforge.net/tracker/?func=detail&aid=3023686&group_id=57612&atid=484772>`_                          |
+|          | - `3025396: DeviceImpl is missing some CORBA methods <https://sourceforge.net/tracker/?func=detail&aid=3025396&group_id=57612&atid=484772>`_                      |
+|          | - `3032005: IPython extension for PyTango <https://sourceforge.net/tracker/?func=detail&aid=3032005&group_id=57612&atid=484772>`_                                 |
+|          | - `3033476: Make client objects pickable <https://sourceforge.net/tracker/?func=detail&aid=3033476&group_id=57612&atid=484772>`_                                  |
+|          | - `3039902: PyTango.Util.add_class would be useful <https://sourceforge.net/tracker/?func=detail&aid=3039902&group_id=57612&atid=484772>`_                        |
+|          |                                                                                                                                                                   |
+|          | Bug fixes:                                                                                                                                                        |
+|          | - from sourceforge:                                                                                                                                               |
+|          | - `2975940: DS command with DevVarCharArray return type fails <https://sourceforge.net/tracker/?func=detail&aid=2975940&group_id=57612&atid=484769>`_             |
+|          | - `3000467: DeviceProxy.unlock is LOCKING instead of unlocking! <https://sourceforge.net/tracker/?func=detail&aid=3000467&group_id=57612&atid=484769>`_           |
+|          | - `3010395: Util.get_device_* methods don't work <https://sourceforge.net/tracker/?func=detail&aid=3010395&group_id=57612&atid=484769>`_                          |
+|          | - `3010425: Database.dev_name does not work <https://sourceforge.net/tracker/?func=detail&aid=3010425&group_id=57612&atid=484769>`_                               |
+|          | - `3016949: command_inout_asynch callback does not work <https://sourceforge.net/tracker/?func=detail&aid=3016949&group_id=57612&atid=484769>`_                   |
+|          | - `3020300: PyTango does not compile with gcc 4.1.x <https://sourceforge.net/tracker/?func=detail&aid=3020300&group_id=57612&atid=484769>`_                       |
+|          | - `3030399: Database put(delete)_attribute_alias generates segfault <https://sourceforge.net/tracker/?func=detail&aid=3030399&group_id=57612&atid=484769>`_       |
++----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| 7.1.1    | Features:                                                                                                                                                         |
+|          | - Improved setup script                                                                                                                                           |
+|          | - Interfaced with PyPI                                                                                                                                            |
+|          | - Cleaned build script warnings due to unclean python C++ macro definitions                                                                                       |
+|          | - from sourceforge:                                                                                                                                               |
+|          | - `2985993: PyTango numpy command support <https://sourceforge.net/tracker/?func=detail&aid=2985993&group_id=57612&atid=484772>`_                                 |
+|          | - `2971217: PyTango.GroupAttrReplyList slicing <https://sourceforge.net/tracker/?func=detail&aid=2971217&group_id=57612&atid=484772>`_                            |
+|          |                                                                                                                                                                   |
+|          | Bug fixes:                                                                                                                                                        |
+|          | - from sourceforge:                                                                                                                                               |
+|          | - `2983299: Database.put_property() deletes the property <https://sourceforge.net/tracker/?func=detail&aid=2983299&group_id=57612&atid=484769>`_                  |
+|          | - `2953689: can not write_attribute scalar/spectrum/image <https://sourceforge.net/tracker/?func=detail&aid=2953689&group_id=57612&atid=484769>`_                 |
+|          | - `2953030: PyTango doc installation <https://sourceforge.net/tracker/?func=detail&aid=2953030&group_id=57612&atid=484769>`_                                      |
++----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| 7.1.0    | Features:                                                                                                                                                         |
+|          | - from sourceforge:                                                                                                                                               |
+|          | - `2908176: read_*, write_* and is_*_allowed() methods can now be defined <https://sourceforge.net/tracker/?func=detail&aid=2908176&group_id=57612&atid=484772>`_ |
+|          | - `2941036: TimeVal conversion to time and datetime <https://sourceforge.net/tracker/?func=detail&aid=2941036&group_id=57612&atid=484772>`_                       |
+|          | - added str representation on Attr, Attribute, DeviceImpl and DeviceClass                                                                                         |
+|          |                                                                                                                                                                   |
+|          | Bug fixes:                                                                                                                                                        |
+|          | - from sourceforge:                                                                                                                                               |
+|          | - `2903755: get_device_properties() bug reading DevString properties <https://sourceforge.net/tracker/?func=detail&aid=2903755group_id=57612&atid=484769>`_       |
+|          | - `2909927: PyTango.Group.read_attribute() return values <https://sourceforge.net/tracker/?func=detail&aid=2909927&group_id=57612&atid=484769>`_                  |
+|          | - `2914194: DevEncoded does not work <https://sourceforge.net/tracker/?func=detail&aid=2914194&group_id=57612&atid=484769>`_                                      |
+|          | - `2916397: PyTango.DeviceAttribute copy constructor does not work <https://sourceforge.net/tracker/?func=detail&aid=2916397&group_id=57612&atid=484769>`_        |
+|          | - `2936173: PyTango.Group.read_attributes() fails <https://sourceforge.net/tracker/?func=detail&aid=2936173&group_id=57612&atid=484769>`_                         |
+|          | - `2949099: Missing PyTango.Except.print_error_stack <https://sourceforge.net/tracker/?func=detail&aid=2949099&group_id=57612&atid=484769>`_                      |
++----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| 7.1.0rc1 | Features:                                                                                                                                                         |
+|          | - v = image_attribute.get_write_value() returns square sequences (arrays of                                                                                       |
+|          | arrays, or numpy objects) now instead of flat lists. Also for spectrum                                                                                            |
+|          | attributes a numpy is returned by default now instead.                                                                                                            |
+|          | - image_attribute.set_value(v) accepts numpy arrays now or square sequences                                                                                       |
+|          | instead of just flat lists. So, dim_x and dim_y are useless now. Also the                                                                                         |
+|          | numpy path is faster.                                                                                                                                             |
+|          | - new enum AttrSerialModel                                                                                                                                        |
+|          | - Attribute new methods: set(get)_attr_serial_model, set_change_event,                                                                                            |
+|          | set_archive_event, is_change_event, is_check_change_event,                                                                                                        |
+|          | is_archive_criteria, is_check_archive_criteria, remove_configuration                                                                                              |
+|          | - added support for numpy scalars in tango operations like write_attribute                                                                                        |
+|          | (ex: now a DEV_LONG attribute can receive a numpy.int32 argument in a                                                                                             |
+|          | write_attribute method call)                                                                                                                                      |
+|          |                                                                                                                                                                   |
+|          | Bug fixes:                                                                                                                                                        |
+|          | - DeviceImpl.set_value for scalar attributes                                                                                                                      |
+|          | - DeviceImpl.push_***_event                                                                                                                                       |
+|          | - server commands with DevVar***StringArray as parameter or as return type                                                                                        |
+|          | - in windows,a bug in PyTango.Util prevented servers from starting up                                                                                             |
+|          | - DeviceImpl.get_device_properties for string properties assigns only first                                                                                       |
+|          | character of string to object member instead of entire string                                                                                                     |
+|          | - added missing methods to Util                                                                                                                                   |
+|          | - exported SubDevDiag class                                                                                                                                       |
+|          | - error in read/events of attributes of type DevBoolean READ_WRITE                                                                                                |
+|          | - error in automatic unsubscribe events of DeviceProxy when the object                                                                                            |
+|          | disapears (happens only on some compilers with some optimization flags)                                                                                           |
+|          | - fix possible bug when comparing attribute names in DeviceProxy                                                                                                  |
+|          | - pretty print of DevFailed -> fix deprecation warning in python 2.6                                                                                              |
+|          | - device class properties where not properly fetched when there is no                                                                                             |
+|          | property value defined                                                                                                                                            |
+|          | - memory leak when converting DevFailed exceptions from C++ to python                                                                                             |
+|          | - python device server file without extension does not start                                                                                                      |
+|          |                                                                                                                                                                   |
+|          | Documentation:                                                                                                                                                    |
+|          | - Improved FAQ                                                                                                                                                    |
+|          | - Improved compilation chapter                                                                                                                                    |
+|          | - Improved migration information                                                                                                                                  |
++----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------+
diff --git a/doc/server/index.rst b/doc/server/index.rst
index 1a3894e..d437c04 100644
--- a/doc/server/index.rst
+++ b/doc/server/index.rst
@@ -1,4 +1,3 @@
-
 .. currentmodule:: PyTango
 
 .. highlight:: python
@@ -6,8 +5,8 @@
    
 .. _server:
    
-The Tango Device Server Python API
-==================================
+Server API
+==========
 
 This chapter does not explain what a Tango device or a device server is.
 This is explained in details in "The Tango control system manual" available at
@@ -185,7 +184,8 @@ array:
     +-------------------+-----------------------------------+------------------------------------------+
     |"polling period"   |          Any number               | The attribute polling period (mS)        |
     +-------------------+-----------------------------------+------------------------------------------+
-    |  "memorized"      | True or True_without_hard_applied | Define if and how the att. is memorized  |
+    |  "memorized"      | "true" or                         | Define if and how the att. is memorized  |
+    |                   | "true_without_hard_applied"       |                                          |
     +-------------------+-----------------------------------+------------------------------------------+
     |     "label"       |            A string               |       The attribute label                |
     +-------------------+-----------------------------------+------------------------------------------+
@@ -393,177 +393,8 @@ The following array gives some more info on these methods.
 |      Cmd_name         | Depends on cmd type     |Depends on cmd type |  Yes      |
 +-----------------------+-------------------------+--------------------+-----------+
 
-Tango has more data types than Python which is more dynamic. The input and
-output values of the commands are translated according to the array below.
-Note that if PyTango is compiled with :py:mod:`numpy` support the numpy type
-will be the used for the input arguments. Also, it is recomended to use numpy
-arrays of the appropiate type for output arguments as well, as it is much more
-efficient.
-
-**For scalar types**
-
-+-------------------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
-|   Tango data type       |              Python 2.x type                                              |              Python 3.x type (*New in PyTango 8.0*)                       |
-+=========================+===========================================================================+===========================================================================+
-|          DEV_VOID       |                    No data                                                |                    No data                                                |
-+-------------------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
-|       DEV_BOOLEAN       | :py:obj:`bool`                                                            | :py:obj:`bool`                                                            |
-+-------------------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
-|         DEV_SHORT       | :py:obj:`int`                                                             | :py:obj:`int`                                                             |
-+-------------------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
-|         DEV_LONG        | :py:obj:`int`                                                             | :py:obj:`int`                                                             |
-+-------------------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
-|        DEV_LONG64       | - :py:obj:`long` (on a 32 bits computer)                                  | :py:obj:`int`                                                             |
-|                         | - :py:obj:`int` (on a 64 bits computer)                                   |                                                                           |
-+-------------------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
-|         DEV_FLOAT       | :py:obj:`float`                                                           | :py:obj:`float`                                                           |
-+-------------------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
-|       DEV_DOUBLE        | :py:obj:`float`                                                           | :py:obj:`float`                                                           |
-+-------------------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
-|        DEV_USHORT       | :py:obj:`int`                                                             | :py:obj:`int`                                                             |
-+-------------------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
-|        DEV_ULONG        | :py:obj:`int`                                                             | :py:obj:`int`                                                             |
-+-------------------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
-|        DEV_ULONG64      | * :py:obj:`long` (on a 32 bits computer)                                  | :py:obj:`int`                                                             |
-|                         | * :py:obj:`int` (on a 64 bits computer)                                   |                                                                           |
-+-------------------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
-|        DEV_STRING       | :py:obj:`str`                                                             | :py:obj:`str` (decoded with *latin-1*, aka *ISO-8859-1*)                  |
-+-------------------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
-|                         | sequence of two elements:                                                 | sequence of two elements:                                                 |
-| DEV_ENCODED             |                                                                           |                                                                           |
-| (*New in PyTango 8.0*)  | 0. :py:obj:`str`                                                          | 0. :py:obj:`str` (decoded with *latin-1*, aka *ISO-8859-1*)               |
-|                         | 1. :py:obj:`bytes` (for any value of *extract_as*)                        | 1. :py:obj:`bytes` (for any value of *extract_as*, except String.         |
-|                         |                                                                           |    In this case it is :py:obj:`str` (decoded with default python          |
-|                         |                                                                           |    encoding *utf-8*))                                                     |
-+-------------------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
-
-**For array types**
-
-+-------------------------+-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
-|    Tango data type      |   ExtractAs     |                          Data type (Python 2.x)                           |             Data type (Python 3.x) (*New in PyTango 8.0*)                 |
-+=========================+=================+===========================================================================+===========================================================================+
-| DEVVAR_CHARARRAY        | Numpy           | :py:class:`numpy.ndarray` (dtype= :py:obj:`numpy.uint8`)                  | :py:class:`numpy.ndarray` (dtype= :py:obj:`numpy.uint8`)                  |
-|                         +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
-|                         | Bytes           | :py:obj:`bytes` (which is in fact equal to :py:obj:`str`)                 | :py:obj:`bytes`                                                           |
-|                         +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
-|                         | ByteArray       | :py:obj:`bytearray`                                                       | :py:obj:`bytearray`                                                       |
-|                         +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
-|                         | String          | :py:obj:`str`                                                             | String    :py:obj:`str` (decoded with default python encoding *utf-8*!!!) |
-|                         +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
-|                         | List            | :py:class:`list` <:py:obj:`int`>                                          | :py:class:`list` <:py:obj:`int`>                                          |
-|                         +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
-|                         | Tuple           | :py:class:`tuple` <:py:obj:`int`>                                         | :py:class:`tuple` <:py:obj:`int`>                                         |
-+-------------------------+-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
-| DEVVAR_SHORTARRAY       | Numpy           | :py:class:`numpy.ndarray` (dtype= :py:obj:`numpy.uint16`)                 | :py:class:`numpy.ndarray` (dtype= :py:obj:`numpy.uint16`)                 |
-|                         +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
-|                         | Bytes           | :py:obj:`bytes` (which is in fact equal to :py:obj:`str`)                 | :py:obj:`bytes`                                                           |
-|                         +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
-|                         | ByteArray       | :py:obj:`bytearray`                                                       | :py:obj:`bytearray`                                                       |
-|                         +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
-|                         | String          | :py:obj:`str`                                                             | String    :py:obj:`str` (decoded with default python encoding *utf-8*!!!) |
-|                         +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
-|                         | List            | :py:class:`list` <:py:obj:`int`>                                          | :py:class:`list` <:py:obj:`int`>                                          |
-|                         +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
-|                         | Tuple           | :py:class:`tuple` <:py:obj:`int`>                                         | :py:class:`tuple` <:py:obj:`int`>                                         |
-+-------------------------+-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
-| DEVVAR_LONGARRAY        | Numpy           | :py:class:`numpy.ndarray` (dtype= :py:obj:`numpy.uint32`)                 | :py:class:`numpy.ndarray` (dtype= :py:obj:`numpy.uint32`)                 |
-|                         +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
-|                         | Bytes           | :py:obj:`bytes` (which is in fact equal to :py:obj:`str`)                 | :py:obj:`bytes`                                                           |
-|                         +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
-|                         | ByteArray       | :py:obj:`bytearray`                                                       | :py:obj:`bytearray`                                                       |
-|                         +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
-|                         | String          | :py:obj:`str`                                                             | String    :py:obj:`str` (decoded with default python encoding *utf-8*!!!) |
-|                         +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
-|                         | List            | :py:class:`list` <:py:obj:`int`>                                          | :py:class:`list` <:py:obj:`int`>                                          |
-|                         +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
-|                         | Tuple           | :py:class:`tuple` <:py:obj:`int`>                                         | :py:class:`tuple` <:py:obj:`int`>                                         |
-+-------------------------+-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
-| DEVVAR_LONG64ARRAY      | Numpy           | :py:class:`numpy.ndarray` (dtype= :py:obj:`numpy.uint64`)                 | :py:class:`numpy.ndarray` (dtype= :py:obj:`numpy.uint64`)                 |
-|                         +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
-|                         | Bytes           | :py:obj:`bytes` (which is in fact equal to :py:obj:`str`)                 | :py:obj:`bytes`                                                           |
-|                         +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
-|                         | ByteArray       | :py:obj:`bytearray`                                                       | :py:obj:`bytearray`                                                       |
-|                         +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
-|                         | String          | :py:obj:`str`                                                             | String    :py:obj:`str` (decoded with default python encoding *utf-8*!!!) |
-|                         +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
-|                         | List            | :py:class:`list` <int (64 bits) / long (32 bits)>                         | :py:class:`list` <:py:obj:`int`>                                          |
-|                         +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
-|                         | Tuple           | :py:class:`tuple` <int (64 bits) / long (32 bits)>                        | :py:class:`tuple` <:py:obj:`int`>                                         |
-+-------------------------+-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
-| DEVVAR_FLOATARRAY       | Numpy           | :py:class:`numpy.ndarray` (dtype= :py:obj:`numpy.float32`)                | :py:class:`numpy.ndarray` (dtype= :py:obj:`numpy.float32`)                |
-|                         +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
-|                         | Bytes           | :py:obj:`bytes` (which is in fact equal to :py:obj:`str`)                 | :py:obj:`bytes`                                                           |
-|                         +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
-|                         | ByteArray       | :py:obj:`bytearray`                                                       | :py:obj:`bytearray`                                                       |
-|                         +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
-|                         | String          | :py:obj:`str`                                                             | String    :py:obj:`str` (decoded with default python encoding *utf-8*!!!) |
-|                         +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
-|                         | List            | :py:class:`list` <:py:obj:`float`>                                        | :py:class:`list` <:py:obj:`float`>                                        |
-|                         +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
-|                         | Tuple           | :py:class:`tuple` <:py:obj:`float`>                                       | :py:class:`tuple` <:py:obj:`float`>                                       |
-+-------------------------+-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
-| DEVVAR_DOUBLEARRAY      | Numpy           | :py:class:`numpy.ndarray` (dtype= :py:obj:`numpy.float64`)                | :py:class:`numpy.ndarray` (dtype= :py:obj:`numpy.float64`)                |
-|                         +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
-|                         | Bytes           | :py:obj:`bytes` (which is in fact equal to :py:obj:`str`)                 | :py:obj:`bytes`                                                           |
-|                         +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
-|                         | ByteArray       | :py:obj:`bytearray`                                                       | :py:obj:`bytearray`                                                       |
-|                         +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
-|                         | String          | :py:obj:`str`                                                             | String    :py:obj:`str` (decoded with default python encoding *utf-8*!!!) |
-|                         +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
-|                         | List            | :py:class:`list` <:py:obj:`float`>                                        | :py:class:`list` <:py:obj:`float`>                                        |
-|                         +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
-|                         | Tuple           | :py:class:`tuple` <:py:obj:`float`>                                       | :py:class:`tuple` <:py:obj:`float`>                                       |
-+-------------------------+-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
-| DEVVAR_USHORTARRAY      | Numpy           | :py:class:`numpy.ndarray` (dtype= :py:obj:`numpy.uint16`)                 | :py:class:`numpy.ndarray` (dtype= :py:obj:`numpy.uint16`)                 |
-|                         +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
-|                         | Bytes           | :py:obj:`bytes` (which is in fact equal to :py:obj:`str`)                 | :py:obj:`bytes`                                                           |
-|                         +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
-|                         | ByteArray       | :py:obj:`bytearray`                                                       | :py:obj:`bytearray`                                                       |
-|                         +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
-|                         | String          | :py:obj:`str`                                                             | String    :py:obj:`str` (decoded with default python encoding *utf-8*!!!) |
-|                         +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
-|                         | List            | :py:class:`list` <:py:obj:`int`>                                          | :py:class:`list` <:py:obj:`int`>                                          |
-|                         +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
-|                         | Tuple           | :py:class:`tuple` <:py:obj:`int`>                                         | :py:class:`tuple` <:py:obj:`int`>                                         |
-+-------------------------+-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
-| DEVVAR_ULONGARRAY       | Numpy           | :py:class:`numpy.ndarray` (dtype= :py:obj:`numpy.uint32`)                 | :py:class:`numpy.ndarray` (dtype= :py:obj:`numpy.uint32`)                 |
-|                         +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
-|                         | Bytes           | :py:obj:`bytes` (which is in fact equal to :py:obj:`str`)                 | :py:obj:`bytes`                                                           |
-|                         +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
-|                         | ByteArray       | :py:obj:`bytearray`                                                       | :py:obj:`bytearray`                                                       |
-|                         +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
-|                         | String          | :py:obj:`str`                                                             | String    :py:obj:`str` (decoded with default python encoding *utf-8*!!!) |
-|                         +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
-|                         | List            | :py:class:`list` <:py:obj:`int`>                                          | :py:class:`list` <:py:obj:`int`>                                          |
-|                         +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
-|                         | Tuple           | :py:class:`tuple` <:py:obj:`int`>                                         | :py:class:`tuple` <:py:obj:`int`>                                         |
-+-------------------------+-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
-| DEVVAR_ULONG64ARRAY     | Numpy           | :py:class:`numpy.ndarray` (dtype= :py:obj:`numpy.uint64`)                 | :py:class:`numpy.ndarray` (dtype= :py:obj:`numpy.uint64`)                 |
-|                         +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
-|                         | Bytes           | :py:obj:`bytes` (which is in fact equal to :py:obj:`str`)                 | :py:obj:`bytes`                                                           |
-|                         +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
-|                         | ByteArray       | :py:obj:`bytearray`                                                       | :py:obj:`bytearray`                                                       |
-|                         +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
-|                         | String          | :py:obj:`str`                                                             | String    :py:obj:`str` (decoded with default python encoding *utf-8*!!!) |
-|                         +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
-|                         | List            | :py:class:`list` <int (64 bits) / long (32 bits)>                         | :py:class:`list` <:py:obj:`int`>                                          |
-|                         +-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
-|                         | Tuple           | :py:class:`tuple` <int (64 bits) / long (32 bits)>                        | :py:class:`tuple` <:py:obj:`int`>                                         |
-+-------------------------+-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
-|   DEVVAR_STRINGARRAY    |                 | sequence<:py:obj:`str`>                                                   | sequence<:py:obj:`str`> (decoded with *latin-1*, aka *ISO-8859-1*)        |
-+-------------------------+-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
-|                         |                 | sequence of two elements:                                                 | sequence of two elements:                                                 |
-|  DEV_LONGSTRINGARRAY    |                 |                                                                           |                                                                           |
-|                         |                 | 0. :py:class:`numpy.ndarray` (dtype= :py:obj:`numpy.int32`) or            | 0. :py:class:`numpy.ndarray` (dtype= :py:obj:`numpy.int32`) or            |
-|                         |                 |    sequence<:py:obj:`int`>                                                |    sequence<:py:obj:`int`>                                                |
-|                         |                 | 1. sequence<:py:obj:`str`>                                                | 1.  sequence<:py:obj:`str`> (decoded with *latin-1*, aka *ISO-8859-1*)    |
-+-------------------------+-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
-|                         |                 | sequence of two elements:                                                 | sequence of two elements:                                                 |
-|  DEV_DOUBLESTRINGARRAY  |                 |                                                                           |                                                                           |
-|                         |                 | 0. :py:class:`numpy.ndarray` (dtype= :py:obj:`numpy.float64`) or          | 0. :py:class:`numpy.ndarray` (dtype= :py:obj:`numpy.float64`) or          |
-|                         |                 |    sequence<:py:obj:`int`>                                                |    sequence<:py:obj:`int`>                                                |
-|                         |                 | 1. sequence<:py:obj:`str`>                                                | 1. sequence<:py:obj:`str`> (decoded with *latin-1*, aka *ISO-8859-1*)     |
-+-------------------------+-----------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+
+Please check :ref:`pytango-data-types` chapter to understand the data types
+that can be used in command parameters and return values.
 
 The following code is an example of how you write code executed when a client
 calls a command named IOLong::
@@ -610,83 +441,10 @@ its write method has to be called *write_MyAttr*.
 The *attr* parameter is an instance of :class:`Attr`.
 Unlike the commands, the is_allowed method for attributes receives a parameter
 of type :class:`AttReqtype`.
-The following table gives some more info on these methods:
-
-.. html:
-    +-------------+-------------+--------------------------------------------------------------+
-    | data format | data type   |  python type                                                 |
-    +=============+=============+==============================================================+
-    | SCALAR      | DEV_BOOLEAN | :py:obj:`bool`                                               |
-    |-------------+-------------+--------------------------------------------------------------+
-    | SCALAR      | DEV_UCHAR   | :py:obj:`int`                                                |
-    +-------------+-------------+--------------------------------------------------------------+
-    | SCALAR      | DEV_SHORT   | :py:obj:`int`                                                |
-    +-------------+-------------+--------------------------------------------------------------+
-    | SCALAR      | DEV_USHORT  | :py:obj:`int`                                                |
-    +-------------+-------------+--------------------------------------------------------------+
-    | SCALAR      | DEV_LONG    | :py:obj:`int`                                                |
-    +-------------+-------------+--------------------------------------------------------------+
-    | SCALAR      | DEV_ULONG   | :py:obj:`int`                                                |
-    +-------------+-------------+--------------------------------------------------------------+
-    | SCALAR      | DEV_LONG64  | :py:obj:`int`/ :py:obj:`long`                                |
-    +-------------+-------------+--------------------------------------------------------------+
-    | SCALAR      | DEV_ULONG64 | :py:obj:`int`/ :py:obj:`long`                                |
-    +-------------+-------------+--------------------------------------------------------------+
-    | SCALAR      | DEV_FLOAT   | :py:obj:`float`                                              |
-    +-------------+-------------+--------------------------------------------------------------+
-    | SCALAR      | DEV_DOUBLE  | :py:obj:`float`                                              |
-    +-------------+-------------+--------------------------------------------------------------+
-    | SCALAR      | DEV_STRING  | :py:obj:`str`                                                |
-    +-------------+-------------+--------------------------------------------------------------+
-    | SPECTRUM    | DEV_BOOLEAN | :py:class:`numpy.ndarray` (dtype= :py:obj:`numpy.bool`)      |
-    | or IMAGE    |             | or sequence<:py:obj:`bool`>                                  |
-    +-------------+-------------+--------------------------------------------------------------+
-    |             | DEV_UCHAR   | :py:class:`numpy.ndarray` (dtype= :py:obj:`numpy.uint8`)     |
-    |             |             | or sequence<:py:obj:`int`>                                   |
-    +-------------+-------------+--------------------------------------------------------------+
-    |             | DEV_SHORT   | :py:class:`numpy.ndarray` (dtype= :py:obj:`numpy.int16`)     |
-    |             |             | or sequence<:py:obj:`int`>                                   |
-    +-------------+-------------+--------------------------------------------------------------+
-    |             | DEV_USHORT  | :py:class:`numpy.ndarray` (dtype= :py:obj:`numpy.uint16`)    |
-    |             |             | or sequence<:py:obj:`int`>                                   |
-    +-------------+-------------+--------------------------------------------------------------+
-    |             | DEV_LONG    | :py:class:`numpy.ndarray` (dtype= :py:obj:`numpy.int32`)     |
-    |             |             | or sequence<:py:obj:`int`>                                   |
-    +-------------+-------------+--------------------------------------------------------------+
-    |             | DEV_ULONG   | :py:class:`numpy.ndarray` (dtype= :py:obj:`numpy.uint32`)    |
-    |             |             | or sequence<:py:obj:`int`>                                   |
-    +-------------+-------------+--------------------------------------------------------------+
-    |             | DEV_LONG64  | :py:class:`numpy.ndarray` (dtype= :py:obj:`numpy.int64`)     |
-    |             |             | or sequence<:py:obj:`int`>                                   |
-    +-------------+-------------+--------------------------------------------------------------+
-    |             | DEV_ULONG64 | :py:class:`numpy.ndarray` (dtype= :py:obj:`numpy.uint64`)    |
-    |             |             | or sequence<:py:obj:`int`>                                   |
-    +-------------+-------------+--------------------------------------------------------------+
-    |             | DEV_FLOAT   | :py:class:`numpy.ndarray` (dtype= :py:obj:`numpy.float32`)   |
-    |             |             | or sequence<:py:obj:`float`>                                 |
-    +-------------+-------------+--------------------------------------------------------------+
-    |             | DEV_DOUBLE  | :py:class:`numpy.ndarray` (dtype= :py:obj:`numpy.float64`)   |
-    |             |             | or sequence<:py:obj:`float`>                                 |
-    +-------------+-------------+--------------------------------------------------------------+
-    |             | DEV_STRING  | sequence<:py:obj:`str`>                                      |
-    +-------------+-------------+--------------------------------------------------------------+
-
-For SPECTRUM and IMAGES the actual sequence object used depends on the context 
-where the tango data is used, and the availability of :py:mod:`numpy`.
-
-1. for properties the sequence is always a :py:class:`list`. Example:
-    
-    >>> import PyTango
-    >>> db = PyTango.Database()
-    >>> s = db.get_property(["TangoSynchrotrons"])
-    >>> print type(s)
-    <type 'list'>
-
-2. for attribute/command values
-    - :py:class:`numpy.ndarray` if PyTango was compiled with :py:mod:`numpy`
-      support (default) and :py:mod:`numpy` is installed.
-    - :py:class:`list` otherwise
-    
+
+Please check :ref:`pytango-data-types` chapter to understand the data types
+that can be used in attribute.
+
 The following code is an example of how you write code executed when a client
 read an attribute which is called *Long_attr*::
     
@@ -855,7 +613,6 @@ creates a device of some arbitrary class (the example assumes the tango commands
 with two strings. No error processing was done on the code for simplicity sake)::
 
     class MyDevice(PyTango.Device_4Impl):
-        ...
         
         def CreateDevice(self, pars):
             klass_name, dev_name = pars
@@ -882,7 +639,6 @@ For example, if you wish to create a clone of your device, you can create a
 tango command called Clone::
 
     class MyDevice(PyTango.Device_4Impl):
-        ...
         
         def fill_new_device_properties(self, dev_name):
             prop_names = db.get_device_property_list(self.get_name(), "*")
@@ -999,7 +755,7 @@ Server API
 .. toctree::
     :maxdepth: 2
     
-    api2
+    server
     device
     device_class
     logging
diff --git a/doc/server/server.rst b/doc/server/server.rst
new file mode 100644
index 0000000..2eb660b
--- /dev/null
+++ b/doc/server/server.rst
@@ -0,0 +1,109 @@
+
+.. currentmodule:: PyTango.server
+
+.. _pytango-hlapi:
+
+High Level API
+==============
+
+This module provides a high level device server API. It implements
+:ref:`TEP1 <pytango-TEP1>`. It exposes an easier API for developing a Tango
+device server.
+
+Here is a simple example on how to write a *Clock* device server using the
+high level API::
+    
+    import time
+    from PyTango.server import server_run
+    from PyTango.server import Device, DeviceMeta
+    from PyTango.server import attribute, command   
+
+    class Clock(Device):
+        __metaclass__ = DeviceMeta
+
+	time = attribute()
+
+	def read_time(self):
+	    return time.time()
+
+	@command(din_type=str, dout_type=str)
+	def strftime(self, format):
+	    return time.strftime(format)
+
+    if __name__ == "__main__":
+        server_run((Clock,))
+
+Here is a more complete  example on how to write a *PowerSupply* device server
+using the high level API. The example contains:
+
+#. a read-only double scalar attribute called *voltage*
+#. a read/write double scalar expert attribute *current*
+#. a read-only double image attribute called *noise*
+#. a *ramp* command
+#. a *host* device property
+#. a *port* class property
+
+.. code-block:: python
+    :linenos:
+
+    from time import time
+
+    from PyTango import AttrQuality, AttrWriteType, DispLevel, server_run
+    from PyTango.server import Device, DeviceMeta, attribute, command
+    from PyTango.server import class_property, device_property
+
+    class PowerSupply(Device):
+        __metaclass__ = DeviceMeta
+
+        voltage = attribute()
+
+        current = attribute(label="Current",
+                            dtype=float,
+                            display_level=DispLevel.EXPERT,
+                            access=AttrWriteType.READ_WRITE,
+                            unit="A",
+                            format="8.4f",
+			    min_value=0.0, max_value=8.5,
+			    min_alarm=0.1, max_alarm=8.4,
+			    min_warning=0.5, max_warning=8.0,
+                            fget="get_current",
+                            fset="set_current",
+                            doc="the power supply current")
+	
+	noise = attribute(label="Noise",
+			  dtype=((float,),),
+			  max_dim_x=1024, max_dim_y=1024,
+			  fget="get_noise")
+ 
+        host = device_property(dtype=str)
+        port = class_property(dtype=int, default_value=9788)
+
+        def read_voltage(self):
+            self.info_stream("get voltage(%s, %d)" %(self.host, self.port))
+            return 10.0
+
+        def get_current(self):
+            return 2.3456, time(), AttrQuality.ATTR_WARNING
+     
+
+*Pretty cool, uh?*
+
+API
+---
+
+.. automodule:: PyTango.server
+
+   .. autoclass:: Device
+      :show-inheritance:
+      :inherited-members:
+      :members:
+
+   .. autoclass:: attribute
+
+   .. autofunction:: command
+
+   .. autoclass:: device_property
+
+   .. autoclass:: class_property
+
+   .. autofunction:: server_run
diff --git a/doc/sphinxext/ipython_console_highlighting.py b/doc/sphinxext/ipython_console_highlighting.py
index 063468c..1a9bf2e 100644
--- a/doc/sphinxext/ipython_console_highlighting.py
+++ b/doc/sphinxext/ipython_console_highlighting.py
@@ -1,25 +1,13 @@
-################################################################################
-##
-## This file is part of PyTango, a python binding for Tango
-## 
-## http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## PyTango is free software: you can redistribute it and/or modify
-## it under the terms of the GNU Lesser General Public License as published by
-## the Free Software Foundation, either version 3 of the License, or
-## (at your option) any later version.
-## 
-## PyTango 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 Lesser General Public License for more details.
-## 
-## You should have received a copy of the GNU Lesser General Public License
-## along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-##
-################################################################################
+# ------------------------------------------------------------------------------
+# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+#
+# Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+# Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+#
+# Distributed under the terms of the GNU Lesser General Public License,
+# either version 3 of the License, or (at your option) any later version.
+# See LICENSE.txt for more info.
+# ------------------------------------------------------------------------------
 
 """reST directive for syntax-highlighting ipython interactive sessions.
 
@@ -134,4 +122,4 @@ def setup(app):
 
 #-----------------------------------------------------------------------------
 # Register the extension as a valid pygments lexer
-highlighting.lexers['ipython'] = IPythonConsoleLexer()
\ No newline at end of file
+highlighting.lexers['ipython'] = IPythonConsoleLexer()
diff --git a/doc/start.rst b/doc/start.rst
index 9feb492..4408937 100644
--- a/doc/start.rst
+++ b/doc/start.rst
@@ -6,106 +6,54 @@
 Getting started
 ===============
 
-Quick installation
-------------------
+Quick installation: Linux
+-------------------------
 
-If you have all :ref:`dependencies <dependencies>` installed on your system,
-building and installing / updating PyTango can be as simple as::
+PyTango is available on linux as an official debian/ubuntu package::
 
-    easy_install -U PyTango
+    $ sudo apt-get install python-pytango
 
-.. _dependencies:
-
-If you managed to run this line, the :ref:`quick tour <quick-tour>` can guide
-you through the first steps on using PyTango.
-
-Dependencies on other libraries
--------------------------------
-
-.. graphviz::
+RPM packages are also available for RHEL & CentOS:
 
-    digraph dependencies {
-        size="6,3";
-        PyTango     [shape=box, label="PyTango 8.0"];
-        Python      [shape=box, label="Python >=2.6"];
-        boostpython [shape=box, label="boost python"];
-        Tango       [shape=box, label="Tango >=8.0.5"];
-        omniORB     [shape=box, label="omniORB >=4"];
-        numpy       [shape=box, label="numpy >=1.1.0"];
-        IPython     [shape=box, label="IPython >=0.10"];
-        PyTango -> Python;
-        PyTango -> Tango;
-        PyTango -> numpy [style=dotted, label="mandatory in windows"];
-        Tango -> omniORB;
-        PyTango -> boostpython
-        PyTango -> IPython [style=dotted, label="optional"];
-    }   
+.. hlist::
+   :columns: 2
 
-Don't be scared by the graph. Probably most of the packages are already installed.
-The current PyTango version has three major dependencies:
+   * `RHEL 5/CentOS 5 32bits <ftp://ftp.maxlab.lu.se/pub/maxlab/packages/el5/i386/repoview/index.html>`_
+   * `RHEL 5/CentOS 5 64bits <ftp://ftp.maxlab.lu.se/pub/maxlab/packages/el5/x86_64/repoview/index.html>`_
+   * `RHEL 6/CentOS 6 32bits <ftp://ftp.maxlab.lu.se/pub/maxlab/packages/el6/i386/repoview/index.html>`_
+   * `RHEL 6/CentOS 6 64bits <ftp://ftp.maxlab.lu.se/pub/maxlab/packages/el6/x86_64/repoview/index.html>`_
 
-- python (>= 2.6) (http://www.python.org/)
-- Tango (>= 8.0.5) (http://www.tango-controls.org/)
-- boost python (http://www.boost.org):
-    We **strongly** recommend always using boost python >= 1.41
-  
-plus two optional dependencies (activated by default) on:
+From PyPi
+~~~~~~~~~
 
-- IPython (>=0.10) (http://www.ipython.org/) (necessary for :ref:`itango`)
-- numpy (>= 1.1.0) (http://numpy.scipy.org/)
+You can also install the latest version from `PyPi`_.
 
-.. note::
-    For the provided windows binary, numpy is MANDATORY!
+First, make sure you have the following packages already installed (all of them
+are available from the major official distribution repositories):
 
-Installing precompiled binaries
--------------------------------
+* `boost-python`_ (including boost-python-dev)
+* `numpy`_ 
+* `IPython`_ (optional, highly recommended)
 
-Linux
-~~~~~
+Then install PyTango either from pip::
 
-PyTango is available on linux as an official debian/ubuntu package (python-pytango).
+    $ pip install PyTango
 
-RPM packages are also available for RHEL & CentOS:
+or easy_install::
 
-    * `RHEL5/CentOS5 5 32bits <ftp://ftp.maxlab.lu.se/pub/maxlab/packages/el5/i386/repoview/index.html>`_
-    * `RHEL5/CentOS5 5 64bits <ftp://ftp.maxlab.lu.se/pub/maxlab/packages/el5/x86_64/repoview/index.html>`_
-    * `RHEL6/CentOS6 5 32bits <ftp://ftp.maxlab.lu.se/pub/maxlab/packages/el6/i386/repoview/index.html>`_
-    * `RHEL6/CentOS6 5 64bits <ftp://ftp.maxlab.lu.se/pub/maxlab/packages/el6/x86_64/repoview/index.html>`_        
+    $ easy_install -U PyTango
 
-.. _pytango-windows-bin:
+Quick installation: Windows
+---------------------------
 
-Windows
-~~~~~~~
+First, make sure `Python`_ and `numpy`_ are installed.
 
 PyTango team provides a limited set of binary PyTango distributables for
-Windows XP/Vista/7. The complete list of binaries can be downloaded from
-`PyTango PyPI website <http://pypi.python.org/pypi/PyTango/>`_.
-
-Steps:
-
-* Install `Tango C++ 32 bits <http://ftp.esrf.fr/pub/cs/tango/TangoSetup-8.0.5_win32.exe>`_
-* For `Python 2.6 32 bits <http://www.python.org/ftp/python/2.6.6/python-2.6.6.msi>`_
-    * `Numpy for python 2.6 <http://pypi.python.org/packages/2.6/n/numpy/numpy-1.6.2.win32-py2.6.exe>`_
-    * `PyTango 8 for python 2.6 <http://pypi.python.org/packages/2.6/P/PyTango/PyTango-8.0.2.win32-py2.6.msi>`_
-* For `Python 2.7 32 bits <http://www.python.org/ftp/python/2.7.3/python-2.7.3.msi>`_
-    * `Numpy for python 2.7 <http://pypi.python.org/packages/2.7/n/numpy/numpy-1.6.2.win32-py2.7.exe>`_
-    * `PyTango 8 for python 2.7 <http://pypi.python.org/packages/2.7/P/PyTango/PyTango-8.0.2.win32-py2.7.msi>`_
-* For `Python 3.1 32 bits <http://www.python.org/ftp/python/3.1.4/python-3.1.4.msi>`_
-    * `Numpy for python 3.1 <http://pypi.python.org/packages/3.1/n/numpy/numpy-1.6.2.win32-py3.1.exe>`_
-    * `PyTango 8 for python 3.1 <http://pypi.python.org/packages/3.1/P/PyTango/PyTango-8.0.2.win32-py3.1.msi>`_
-* For `Python 3.2 32 bits <http://www.python.org/ftp/python/3.2.3/python-3.2.3.msi>`_
-    * `Numpy for python 3.2 <http://pypi.python.org/packages/3.2/n/numpy/numpy-1.6.2.win32-py3.2.exe>`_
-    * `PyTango 8 for python 3.2 <http://pypi.python.org/packages/3.2/P/PyTango/PyTango-8.0.2.win32-py3.2.msi>`_
-
-..
-.. _PyTango-8.0.2.win32-py2.6.msi: http://pypi.python.org/packages/2.6/P/PyTango/PyTango-8.0.2.win32-py2.6.msi
-.. _PyTango-8.0.2.win32-py2.6.exe: http://pypi.python.org/packages/2.6/P/PyTango/PyTango-8.0.2.win32-py2.6.exe
-.. _PyTango-8.0.2.win32-py2.7.msi: http://pypi.python.org/packages/2.7/P/PyTango/PyTango-8.0.2.win32-py2.7.msi
-.. _PyTango-8.0.2.win32-py2.7.exe: http://pypi.python.org/packages/2.7/P/PyTango/PyTango-8.0.2.win32-py2.7.exe
-.. _PyTango-8.0.2.win32-py3.1.msi: http://pypi.python.org/packages/3.1/P/PyTango/PyTango-8.0.2.win32-py3.1.msi
-.. _PyTango-8.0.2.win32-py3.1.exe: http://pypi.python.org/packages/3.1/P/PyTango/PyTango-8.0.2.win32-py3.1.exe
-.. _PyTango-8.0.2.win32-py3.2.msi: http://pypi.python.org/packages/3.2/P/PyTango/PyTango-8.0.2.win32-py3.2.msi
-.. _PyTango-8.0.2.win32-py3.2.exe: http://pypi.python.org/packages/3.2/P/PyTango/PyTango-8.0.2.win32-py3.2.exe
+Windows XP/Vista/7/8. The complete list of binaries can be downloaded from
+`PyPI`_.
+
+Select the proper windows package, download it and finally execute the 
+installion wizard.
 
 
 Compiling & installing
@@ -120,109 +68,35 @@ distutils.
 Besides the binaries for the three dependencies mentioned above, you also need 
 the development files for the respective libraries.
 
-boost python dependency
-#######################
-
-PyTango has a dependency on the boost python library (>= 1.33). This means that
-the shared library file **libboost-python.so** must be accessible to the 
-compilation command.
-
-.. note::
+You can get the latest ``.tar.gz`` from `PyPI`_ or directly
+the latest SVN checkout::
 
-    If you use python >= 2.6.3 you MUST install boost python >= 1.41
+    $ svn co http://svn.code.sf.net/p/tango-cs/code/bindings/PyTango/trunk PyTango
+    $ cd PyTango
+    $ python setup.py build
+    $ sudo python setup.py install
 
-Most linux distributions today provide a boost python package.
-
-Furthermore, in order to be able to build PyTango, you also need the include
-headers of boost python. They are normaly provided by a package called
-boost_python-dev.
-
-If, for some reason, you need to compile and install boost python, here is a
-quick recipie:
-
-    #. Download latest boost tar.gz file and extract it
-    #. Download latest bjam (most linux distributions have a bjam package. If
-       not, sourceforge provides a binary for many platforms)
-    #. build and/or install:
-    
-       #. Simple build: in the root directory where you extracted boost type:
-       
-          ``bjam --with-python toolset=gcc variant=release threading=multi link=shared``
-          
-          this will produce in :file:`bin.v2/libs/python/build/gcc-<gcc_ver>/release/threading-multi` a file called :file:`libboost_python-gcc<gcc_ver>-mt-<boost_ver>.so.<boost_python_ver>`
-          
-       #. Install (you may need administrator permissions to do so):
-       
-          ``bjam --with-python toolset=gcc variant=release threading=multi link=shared install``
-          
-       #. Install in a different directory (<install_dir>):
-       
-          ``bjam --with-python toolset=gcc variant=release threading=multi link=shared install --prefix=<install_dir>``
-
-
-boost, omniORB and TangoC++ configuration
-#########################################
-
-The second step is to make sure the three/four libraries (omniORB, tango, 
-boost python and/or numpy) are accessible to the compilation command. So, for 
-example, if you installed:
-
-    ``boost python under /home/homer/local``
-    
-    ``omniORB under /home/homer/local1``
-    
-    ``tango under /home/homer/local2``
-    
-    ``numpy under /usr/lib/python2.6/site-packages/numpy``
-    
-you must export the three environment variables::
-
-    export BOOST_ROOT=/home/homer/local
-    export OMNI_ROOT=/home/homer/local1
-    export TANGO_ROOT=/home/homer/local2
-    
-    # in openSUSE 11.1 this is the default base location for the include files
-    export NUMPY_ROOT=/usr/lib/python2.6/site-packages/numpy/core
-
-(for numpy this is the default base location for the include files. This is
-distribution dependent. For example, ubuntu places a numpy directory under /usr/include,
-so exporting NUMPY_ROOT is not necessary for this distribution)
-
-For the libraries that were installed in the default system directory (/usr or /usr/local)
-the above lines are not necessary.
-
-.. _build-install:
-
-build & install
-###############
-
-Finally::
-
-    python setup.py build
-    sudo python setup.py install
-    
 This will install PyTango in the system python installation directory and, since
 version 8.0.0, it will also install :ref:`itango` as an IPython_ extension.
-    
-Or if you whish to install in a different directory::
-    
-    python setup.py build
-    python setup.py install --prefix=/home/homer/local --ipython-local
 
-(This will try to install :ref:`itango` as an IPython profile to the local
-user, since probably there is no permission to write into the IPython_ extension
-directory)
+If whish to install in a different directory, replace the last line with::
+    
+    $ # private installation to your user (usually ~/.local/lib/python<X>.<Y>/site-packages
+    $ python setup.py install --user
 
-Or if you wish to use your own private python distribution::
+    $ # or specific installation directory
+    $ python setup.py install --prefix=/home/homer/local
 
-    /home/homer/bin/python setup.py build
-    /home/homer/bin/python setup.py install
+Windows
+~~~~~~~
 
-For the last case above don't forget that boost python should have also been 
-previously compiled with this private python distribution.
+On windows, PyTango must be built using MS VC++.
+Since it is rarely needed and the instructions are so complicated, I have
+choosen to place the how-to in a separate text file. You can find it in the
+source package under :file:`doc/windows_notes.txt`.
 
-test
-####
+Testing your installation
+-------------------------
 
 If you have IPython_ installed, the best way to test your PyTango installation
 is by starting the new PyTango CLI called :ref:`itango` by typing on the command
@@ -237,167 +111,13 @@ then, in ITango type:
     ITango [1]: PyTango.Release.version
     Result [1]: '8.0.2'
 
-(if you are wondering, :ref:`itango` automaticaly does ``import PyTango`` for you!)
+(if you are wondering, :ref:`itango` automaticaly does ``import PyTango`` 
+for you!)
 
-If you don't have IPython_ installed, to test the installation start a python console
-and type:
+If you don't have IPython_ installed, to test the installation start a
+python console and type:
 
     >>> import PyTango
     >>> PyTango.Release.version
     '8.0.2'
 
-Windows
-~~~~~~~
-
-On windows, PyTango must be built using MS VC++.
-
-... which is good fun specially if you only have express edition and multiple python versions to build with! 
-
-Pre-requisites
-##############
-
-**Python**
-
-Python must be installed in the following directory structure:
-
-    <PythonBaseDir>\\<PlatformName>\\<PythonVersion>
-    
-Where:
-
-    - <PythonBaseDir> is a directory that can be choosen by the you (ex: C:\\Python)
-    - <PlatformName> **must** be either *win32* or *x64*
-    - <PythonVersion> **must** be *26*, *27*, *31*, *32*, *33*
-
-Example: Assuming you choose *C:\\Python* as PythonBaseDir, if you want to build
-PyTango for python 2.7 on 64 bits you must install python in:
-
-    c:\\python\\x64\\27
-
-**Visual C++**
-
-Python recommends compiling any python libraries using the same compiler
-version. So, depending on the python version(s) you want PyTango to be
-build, you need VC++ 9.0 (2008) or/and VC++ 10.0 (2010).
-
-Here is the table of compilers and corresponding Visual C++ version used by CPython:
-
-+----------------------+--------------+
-| Visual C++ version   | Compiler     |
-+======================+==============+
-| Visual C++ 4.x       | MSC_VER=1000 |
-+----------------------+--------------+
-| Visual C++ 5         | MSC_VER=1100 |
-+----------------------+--------------+
-| Visual C++ 6         | MSC_VER=1200 |
-+----------------------+--------------+
-| Visual C++ .NET      | MSC_VER=1300 |
-+----------------------+--------------+
-| Visual C++ .NET 2003 | MSC_VER=1310 |
-+----------------------+--------------+
-| Visual C++ 2005      | MSC_VER=1400 |
-+----------------------+--------------+
-| Visual C++ 2008      | MSC_VER=1500 |
-+----------------------+--------------+
-| Visual C++ 2010      | MSC_VER=1600 |
-+----------------------+--------------+
-| Visual C++ 2011      | MSC_VER=1700 |
-+----------------------+--------------+
-
-+----------+--------------+-----------------------------+
-| version  | architecture |            VC++             |
-+==========+==============+=============================+
-|  2.6.6   |   32 bits    | MSC 1500 (Visual C++ 2008)  |
-+----------+--------------+-----------------------------+
-|  2.6.6   |   64 bits    | MSC 1500 (Visual C++ 2008)  |
-+----------+--------------+-----------------------------+
-|  2.7.3   |   32 bits    | MSC 1500 (Visual C++ 2008)  |
-+----------+--------------+-----------------------------+
-|  2.7.3   |   64 bits    | MSC 1500 (Visual C++ 2008)  |
-+----------+--------------+-----------------------------+
-|  3.1.4   |   32 bits    | MSC 1500 (Visual C++ 2008)  |
-+----------+--------------+-----------------------------+
-|  3.1.4   |   64 bits    | MSC 1500 (Visual C++ 2008)  |
-+----------+--------------+-----------------------------+
-|  3.2.3   |   32 bits    | MSC 1500 (Visual C++ 2008)  |
-+----------+--------------+-----------------------------+
-|  3.2.3   |   64 bits    | MSC 1500 (Visual C++ 2008)  |
-+----------+--------------+-----------------------------+
-|  3.3.0   |   32 bits    | MSC 1600 (Visual C++ 2010)  |
-+----------+--------------+-----------------------------+
-|  3.3.0   |   64 bits    | MSC 1600 (Visual C++ 2010)  |
-+----------+--------------+-----------------------------+
-
-**Visual C++ 9.0 (2008) express quick install guide**
-
-1. Download and install VC++ 9.0 (2008) Express Edition
-2. If you need to compile in 64 bits platform
-    2.1. Download and install Windows 7 SDK for .NET Framework 3.5 SP1 [a.k.a. Windows SDK 7.0]
-        (**not** Windows SDK 7.1!)
-    
-    2.2. The vcvarsall.bat in VC++ 2008 Express looks for the x86_amd64 vcvarsx86_amd64.bat
-         in all the wrong places. The easiest way to work around that is to navigate to the
-         VC\\bin directory of your VC++ 2008 installation (in my case
-         C:\\Program Files (x86)\\Microsoft Visual Studio 9.0\\VC\\bin). Copy vcvarsx86_amd64.bat,
-         and paste into the VC\\bin\\x86_amd64 subdirectory.
-
-**Visual C++ 10.0 (2010) express quick install guide**
-
-1. Download and install VC++ 10.0 (2010) Express Edition
-2. If you need to compile in 64 bits platform follow the instructions
-   **in the order they appear** (not doing so may lead to
-   `KB2519277 <http://support.microsoft.com/kb/2519277>`_ problem)
-    
-    2.1. Visual Studio 2010 SP1
-    
-    2.2. Download and install Windows 7 SDK for .NET Framework 4.0 [a.k.a. Windows SDK 7.1]
-    
-    2.3. VC++ 2010 doesn't come with vcvarsx86_amd64.bat. But in this case, since the 
-         environment setting tool is different than in VC++ 2008, all you have to do is 
-         create a file called vcvarsx86_amd64.bat in VC\\bin\\x86_amd64 directory of your 
-         VC++ 2010 installation (in my case 
-         C:\\Program Files (x86)\\Microsoft Visual Studio 10.0\\VC\\bin\\x86_amd64) with the
-         following content:
-         
-             @CALL "C:\\Program Files\\Microsoft SDKs\\Windows\\v7.1\\Bin\\SetEnv.Cmd" /Release /x64
-         
-         (adapt to your Windows SDK installation directory)
-    
-**Boost python**
-
-Boost python DLL, lib and header files must be installed for the specific platform(s)
-and python version(s) you which to build PyTango on. The directory structure for
-the boost headers: 
-
-    <BoostDir>\\include
-
-The directory structure for the boost libraries:
-
-    <BoostDir>\\multi\\release\\<MSVCVersion>\\<PlatformName>\\<Link>\\<RuntimeLink>\\<PythonVersion>
-
-Where:
-    
-    - <BoostDir> the boost base directory (ex: C:\Boost-1.53.0)
-    - <MSVCVersion> may be either *msvc-9.0* or *msvc-10.0*
-    - <PlatformName> **must** be either *win32* or *x64*
-    - <Link> **must** be either *static* or *shared*
-    - <RuntimeLink> **must** be either *static* or *shared*
-      (if Link==static, RuntimeLink can only be *static*)
-    - <PythonVersion> **must** be *26*, *27*, *31*, *32*, *33*
-
-**Boost python multi platform compilation quick build guide**
-    
-    - Download boost source code from http://wwww.boost.org
-    - Extract boost to a directory (ex: c:\\workspace\\boost-1.53.0)
-    - Download and place `boost_python_install.py <>` in your boost extract directory (ex: c:\\workspace\\boost-1.53.0\\boost_python_install.py)
-      (adapt python versions you which to build)
-    - Place the user-config.jam file in %HOMEPATH%%HOMEDIR% (adapt paths and python versions to your system)
-    - Open a console
-    - Switch to the boost directory 
-    - Execute this script using python (ex: C:\\Python\\win32\\26\\python.exe boost_python_install.py)
-
-**Tango**
-
-
-
-.. _IPython: http://ipython.scipy.org/
-
diff --git a/doc/tep/tep-0001.rst b/doc/tep/tep-0001.rst
index c84923f..27ef5cf 100644
--- a/doc/tep/tep-0001.rst
+++ b/doc/tep/tep-0001.rst
@@ -1,18 +1,18 @@
 
-.. currentmodule:: PyTango.api2
+.. currentmodule:: PyTango.hlapi
 
 .. _pytango-TEP1:
 
-=================================
-TEP 1 - Device Server API Level 2
-=================================
+====================================
+TEP 1 - Device Server High Level API
+====================================
 
 ================== ====================================================
  TEP:               1   
 ================== ====================================================
- Title:             Device Server API Level 2
- Version:           2.0.0
- Last-Modified:     22-Oct-2012
+ Title:             Device Server High Level API
+ Version:           2.1.0
+ Last-Modified:     13-Nov-2013
  Author:            Tiago Coutinho <tcoutinho at cells.es>
  Status:            Active
  Type:              Standards Track
@@ -125,10 +125,10 @@ In order to keep the code up to date with tango, every time a new Tango IDL
 is released, the code of **every** device server needs to be manually
 updated to ihnerit from the newest tango version.
 
-By inheriting from a new high-level :class:`~PyTango.api2.Device` (which
+By inheriting from a new high-level :class:`~PyTango.hlapi.Device` (which
 itself automatically *decides* from which DeviceImpl version it should
 inherit), the device servers are always up to date with the latest tango
-release without need for manual intervention (see :mod:`PyTango.api2`).
+release without need for manual intervention (see :mod:`PyTango.hlapi`).
 
 Low-level way::
 
@@ -137,17 +137,17 @@ Low-level way::
     
 High-level way::
 
-    class Motor(PyTango.api2.Device):
+    class Motor(PyTango.hlapi.Device):
         pass
     
-Default implementation of :class:`~PyTango.api2.Device` constructor
+Default implementation of :class:`~PyTango.hlapi.Device` constructor
 --------------------------------------------------------------------------------
 
 99% of the different device classes which inherit from low level
 :class:`~PyTango.DeviceImpl` only implement `__init__` to call their
-`init_device` (see :mod:`PyTango.api2`).
+`init_device` (see :mod:`PyTango.hlapi`).
 
-:class:`~PyTango.api2.Device` already calls init_device.
+:class:`~PyTango.hlapi.Device` already calls init_device.
 
 Low-level way::
 
@@ -159,21 +159,21 @@ Low-level way::
     
 High-level way::
 
-    class Motor(PyTango.api2.Device):
+    class Motor(PyTango.hlapi.Device):
 
         # Nothing to be done!
         
         pass
 
-Default implementation of :meth:`~PyTango.api2.Device.init_device`
+Default implementation of :meth:`~PyTango.hlapi.Device.init_device`
 --------------------------------------------------------------------------------
 
 99% of different device classes which inherit from low level
 :class:`~PyTango.DeviceImpl` have an implementation of `init_device` which
 *at least* calls :meth:`~PyTango.DeviceImpl.get_device_properties`
-(see :mod:`PyTango.api2`).
+(see :mod:`PyTango.hlapi`).
 
-:meth:`~PyTango.api2.Device.init_device` already calls :meth:`~PyTango.api2.Device.get_device_properties`.
+:meth:`~PyTango.hlapi.Device.init_device` already calls :meth:`~PyTango.hlapi.Device.get_device_properties`.
 
 Low-level way::
 
@@ -184,7 +184,7 @@ Low-level way::
     
 High-level way::
 
-    class Motor(PyTango.api2.Device):
+    class Motor(PyTango.hlapi.Device):
         # Nothing to be done!
         pass
 
@@ -199,8 +199,8 @@ device and class properties by using the corresponding
 
 With the high-level API we completely remove the need to code the
 :class:`~PyTango.DeviceClass` by registering attribute, commands,
-device and class properties in the :class:`~PyTango.api2.Device` with a more
-pythonic API (see :mod:`PyTango.api2`)
+device and class properties in the :class:`~PyTango.hlapi.Device` with a more
+pythonic API (see :mod:`PyTango.hlapi`)
 
 
 #. Hide `<Device>Class` class completely
@@ -232,9 +232,9 @@ Low-level way::
 
 High-level way::
 
-    class Motor(PyTango.api2.Device):
+    class Motor(PyTango.hlapi.Device):
         
-        position = PyTango.api2.attribute(dtype=float, )
+        position = PyTango.hlapi.attribute(dtype=float, )
 
         def read_position(self):
             pass
@@ -569,12 +569,12 @@ instead::
     if __name__ == '__main__':
         main()
 
-And the equivalent API2 version of the code would be::
+And the equivalent HLAPI version of the code would be::
 
     #!/usr/bin/env python
 
     from PyTango import DebugIt, server_run
-    from PyTango.api2 import Device, DeviceMeta, attribute
+    from PyTango.hlapi import Device, DeviceMeta, attribute
 
 
     class Motor(Device):
@@ -595,11 +595,16 @@ And the equivalent API2 version of the code would be::
 References
 ==========
 
-:mod:`PyTango.api2`
+:mod:`PyTango.hlapi`
 
 Changes
 =======
 
+from 2.0.0 to 2.1.0
+-------------------
+
+Changed module name from *api2* to *hlapi* (High Level API)
+
 From 1.0.0 to 2.0.0
 -------------------
     
diff --git a/doc/utilities.rst b/doc/utilities.rst
index 962e8dd..26152c9 100644
--- a/doc/utilities.rst
+++ b/doc/utilities.rst
@@ -3,9 +3,6 @@
 The Utilities API
 =================
 
-.. autofunction:: PyTango.server_run
-
-
 .. currentmodule:: PyTango.utils
 
 .. autoclass:: PyTango.utils.EventCallBack
diff --git a/doc/windows_notes.txt b/doc/windows_notes.txt
new file mode 100644
index 0000000..8df6a95
--- /dev/null
+++ b/doc/windows_notes.txt
@@ -0,0 +1,156 @@
+Windows
+~~~~~~~
+
+On windows, PyTango must be built using MS VC++.
+
+... which is good fun specially if you only have express edition and multiple python versions to build with! 
+
+.. warning::
+   The next chapters are internal notes I have gathered along the years to
+   overcome windows limitations/problems in order to be able to compile PyTango.
+   They are not for the weak of heart, seriously! 
+
+Pre-requisites
+##############
+
+**Python**
+
+Python must be installed in the following directory structure:
+
+    <PythonBaseDir>\\<PlatformName>\\<PythonVersion>
+    
+Where:
+
+    - <PythonBaseDir> is a python base directory choosen by you (ex: :file:`C:\\Python`)
+    - <PlatformName> **must** be either *win32* or *x64*
+    - <PythonVersion> **must** be *26*, *27*, *31*, *32*, *33*
+
+Example: Assuming you choose *C:\\Python* as PythonBaseDir, if you want to build
+PyTango for python 2.7 on 64 bits you must install python in
+:file:`C:\\python\\x64\\27`.
+
+**Visual C++**
+
+Python recommends compiling any python libraries using the same compiler
+version. So, depending on the python version(s) you want PyTango to be
+build, you need VC++ 9.0 (2008) or/and VC++ 10.0 (2010).
+
+Here is the table of compilers and corresponding Visual C++ version used by CPython:
+
++----------------------+--------------+
+| Visual C++ version   | Compiler     |
++======================+==============+
+| Visual C++ 4.x       | MSC_VER=1000 |
++----------------------+--------------+
+| Visual C++ 5         | MSC_VER=1100 |
++----------------------+--------------+
+| Visual C++ 6         | MSC_VER=1200 |
++----------------------+--------------+
+| Visual C++ .NET      | MSC_VER=1300 |
++----------------------+--------------+
+| Visual C++ .NET 2003 | MSC_VER=1310 |
++----------------------+--------------+
+| Visual C++ 2005      | MSC_VER=1400 |
++----------------------+--------------+
+| Visual C++ 2008      | MSC_VER=1500 |
++----------------------+--------------+
+| Visual C++ 2010      | MSC_VER=1600 |
++----------------------+--------------+
+| Visual C++ 2011      | MSC_VER=1700 |
++----------------------+--------------+
+
++----------+--------------+-----------------------------+
+| version  | architecture |            VC++             |
++==========+==============+=============================+
+|  2.6.6   |   32 bits    | MSC 1500 (Visual C++ 2008)  |
++----------+--------------+-----------------------------+
+|  2.6.6   |   64 bits    | MSC 1500 (Visual C++ 2008)  |
++----------+--------------+-----------------------------+
+|  2.7.3   |   32 bits    | MSC 1500 (Visual C++ 2008)  |
++----------+--------------+-----------------------------+
+|  2.7.3   |   64 bits    | MSC 1500 (Visual C++ 2008)  |
++----------+--------------+-----------------------------+
+|  3.1.4   |   32 bits    | MSC 1500 (Visual C++ 2008)  |
++----------+--------------+-----------------------------+
+|  3.1.4   |   64 bits    | MSC 1500 (Visual C++ 2008)  |
++----------+--------------+-----------------------------+
+|  3.2.3   |   32 bits    | MSC 1500 (Visual C++ 2008)  |
++----------+--------------+-----------------------------+
+|  3.2.3   |   64 bits    | MSC 1500 (Visual C++ 2008)  |
++----------+--------------+-----------------------------+
+|  3.3.0   |   32 bits    | MSC 1600 (Visual C++ 2010)  |
++----------+--------------+-----------------------------+
+|  3.3.0   |   64 bits    | MSC 1600 (Visual C++ 2010)  |
++----------+--------------+-----------------------------+
+
+**Visual C++ 9.0 (2008) express quick install guide**
+
+1. Download and install VC++ 9.0 (2008) Express Edition
+2. If you need to compile in 64 bits platform
+    2.1. Download and install Windows 7 SDK for .NET Framework 3.5 SP1 [a.k.a. Windows SDK 7.0]
+        (**not** Windows SDK 7.1!)
+    
+    2.2. The vcvarsall.bat in VC++ 2008 Express looks for the x86_amd64 :file:`vcvarsx86_amd64.bat`
+         in all the wrong places. The easiest way to work around that is to navigate to the
+         :file:`VC\\bin` directory of your VC++ 2008 installation (in my case
+         :file:`C:\\Program Files (x86)\\Microsoft Visual Studio 9.0\\VC\\bin`). Copy :file:`vcvarsx86_amd64.bat`,
+         and paste into the :file:`VC\\bin\\x86_amd64 subdirectory`.
+
+**Visual C++ 10.0 (2010) express quick install guide**
+
+1. Download and install VC++ 10.0 (2010) Express Edition
+2. If you need to compile in 64 bits platform follow the instructions
+   **in the order they appear** (not doing so may lead to
+   `KB2519277 <http://support.microsoft.com/kb/2519277>`_ problem)
+    
+    2.1. Visual Studio 2010 SP1
+    
+    2.2. Download and install Windows 7 SDK for .NET Framework 4.0 [a.k.a. Windows SDK 7.1]
+    
+    2.3. VC++ 2010 doesn't come with vcvarsx86_amd64.bat. But in this case, since the 
+         environment setting tool is different than in VC++ 2008, all you have to do is 
+         create a file called vcvarsx86_amd64.bat in VC\\bin\\x86_amd64 directory of your 
+         VC++ 2010 installation (in my case 
+         C:\\Program Files (x86)\\Microsoft Visual Studio 10.0\\VC\\bin\\x86_amd64) with the
+         following content:
+         
+             @CALL "C:\\Program Files\\Microsoft SDKs\\Windows\\v7.1\\Bin\\SetEnv.Cmd" /Release /x64
+         
+         (adapt to your Windows SDK installation directory)
+    
+**Boost python**
+
+Boost python DLL, lib and header files must be installed for the specific platform(s)
+and python version(s) you which to build PyTango on. The directory structure for
+the boost headers: 
+
+    <BoostDir>\\include
+
+The directory structure for the boost libraries:
+
+    <BoostDir>\\multi\\release\\<MSVCVersion>\\<PlatformName>\\<Link>\\<RuntimeLink>\\<PythonVersion>
+
+Where:
+    
+    - <BoostDir> the boost base directory (ex: C:\Boost-1.53.0)
+    - <MSVCVersion> may be either *msvc-9.0* or *msvc-10.0*
+    - <PlatformName> **must** be either *win32* or *x64*
+    - <Link> **must** be either *static* or *shared*
+    - <RuntimeLink> **must** be either *static* or *shared*
+      (if Link==static, RuntimeLink can only be *static*)
+    - <PythonVersion> **must** be *26*, *27*, *31*, *32*, *33*
+
+**Boost python multi platform compilation quick build guide**
+    
+    - Download boost source code from http://wwww.boost.org
+    - Extract boost to a directory (ex: c:\\workspace\\boost-1.53.0)
+    - Download and place `boost_python_install.py <>` in your boost extract directory (ex: c:\\workspace\\boost-1.53.0\\boost_python_install.py)
+      (adapt python versions you which to build)
+    - Place the user-config.jam file in %HOMEPATH%%HOMEDIR% (adapt paths and python versions to your system)
+    - Open a console
+    - Switch to the boost directory 
+    - Execute this script using python (ex: C:\\Python\\win32\\26\\python.exe boost_python_install.py)
+
+**Tango**
+
+TODO
diff --git a/scripts/itango b/scripts/itango
index 1547a76..0692811 100755
--- a/scripts/itango
+++ b/scripts/itango
@@ -1,27 +1,15 @@
 #!/usr/bin/env python
 
-################################################################################
-##
-## This file is part of PyTango, a python binding for Tango
-## 
-## http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## PyTango is free software: you can redistribute it and/or modify
-## it under the terms of the GNU Lesser General Public License as published by
-## the Free Software Foundation, either version 3 of the License, or
-## (at your option) any later version.
-## 
-## PyTango 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 Lesser General Public License for more details.
-## 
-## You should have received a copy of the GNU Lesser General Public License
-## along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-##
-################################################################################
+# ------------------------------------------------------------------------------
+# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+#
+# Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+# Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+#
+# Distributed under the terms of the GNU Lesser General Public License,
+# either version 3 of the License, or (at your option) any later version.
+# See LICENSE.txt for more info.
+# ------------------------------------------------------------------------------
 
 """The itango startup file. This executable is actually an extension of the 
    ipython file that can be found in <prefix>/ipython (prefix usually being in 
diff --git a/scripts/winpostinstall.py b/scripts/winpostinstall.py
deleted file mode 100644
index 4c698e7..0000000
--- a/scripts/winpostinstall.py
+++ /dev/null
@@ -1,75 +0,0 @@
-from __future__ import print_function
-
-import sys
-import os
-import os.path
-
-import urllib
-try:
-    urlretrieve = urllib.urlretrieve
-except AttributeError:
-    import urllib.request
-    urlretrieve = urllib.urlrequest.urlretrieve
-
-try:
-    file_created
-except:
-    def file_created(*args, **kwargs): pass
-
-def find_tango_root():
-    program_files = os.environ["PROGRAMFILES"]
-    tango = os.path.join(program_files, 'tango')
-    if os.path.isdir(tango):
-        return tango
-
-def find_tango_dll():
-    program_files = os.environ["PROGRAMFILES"]
-    tangodll = os.path.join(program_files, 'tango','win32','lib','vc9_dll')
-    if os.path.isdir(tangodll):
-        return tangodll
-
-def install_tango_dll():
-    pytango_web = "http://www.tango-controls.org/static/PyTango/"
-    print("Fetching appropriate tango from " + pytango_web+ "...")
-    pytango_dll_path = pytango_web + "tangodll/"
-    pytango_dll_file = pytango_dll_path + "tango_8.0_win32_vc9_dll.zip"
-    filename, headers = urlretrieve(pytango_dll_file)
-    import distutils.sysconfig
-    import zipfile
-    pytango_dll_zip = zipfile.ZipFile(filename)
-    pytango_dir = distutils.sysconfig.get_python_lib()
-    pytango_dir = os.path.join(pytango_dir, "PyTango")
-    print("Extracting " + filename + " into " + pytango_dir + "...")
-    pytango_dll_zip.extractall(pytango_dir)
-    print("Registering all files...")
-    for name in pytango_dll_zip.namelist():
-        print("Registering " + name)
-        name = os.path.join(pytango_dir, name)
-        file_created(name)
-    
-def remove():
-    print ("removing PyTango")
-    
-def install():
-    print ("installing PyTango")
-
-def main():
-    if len(sys.argv) < 2:
-        op = "-install"
-    else:
-        op = sys.argv[1]
-    
-    if "-install" in op:
-        install()
-    elif "-remove" in op:
-        remove()
-    else:
-        print("unknown operation " + op)
- 
-if __name__ == "__main__":
-    try:
-        main()
-    except:
-        import traceback
-        traceback.print_exc()
-        raw_input("Press any key to continue")
\ No newline at end of file
diff --git a/setup.py b/setup.py
index 27b7809..e807da5 100644
--- a/setup.py
+++ b/setup.py
@@ -1,32 +1,20 @@
-################################################################################
-##
-## This file is part of PyTango, a python binding for Tango
-## 
-## http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## PyTango is free software: you can redistribute it and/or modify
-## it under the terms of the GNU Lesser General Public License as published by
-## the Free Software Foundation, either version 3 of the License, or
-## (at your option) any later version.
-## 
-## PyTango 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 Lesser General Public License for more details.
-## 
-## You should have received a copy of the GNU Lesser General Public License
-## along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-##
-################################################################################
+# ------------------------------------------------------------------------------
+# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+#
+# Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+# Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+#
+# Distributed under the terms of the GNU Lesser General Public License,
+# either version 3 of the License, or (at your option) any later version.
+# See LICENSE.txt for more info.
+# ------------------------------------------------------------------------------
 
 import os
-import sys
-import platform
 import imp
-import io
+import sys
 import struct
+import platform
+import subprocess
 
 from distutils.core import setup, Extension
 from distutils.cmd import Command
@@ -35,14 +23,13 @@ from distutils.command.build_ext import build_ext as dftbuild_ext
 from distutils.command.install import install as dftinstall
 from distutils.unixccompiler import UnixCCompiler
 from distutils.version import StrictVersion as V
-import distutils.sysconfig
 
 try:
     import sphinx
     import sphinx.util.console
     sphinx.util.console.color_terminal = lambda : False
     from sphinx.setup_command import BuildDoc
-except:
+except ImportError:
     sphinx = None
 
 try:
@@ -64,12 +51,30 @@ except:
     numpy = None
 
 
+is64 = 8 * struct.calcsize("P") == 64
+
+
+def pkg_config(*packages, **config):
+    config_map = {"-I": "include_dirs",
+                "-L": "library_dirs",
+                "-l": "libraries"}
+    cmd = ["pkg-config", "--libs", "--cflags-only-I", " ".join(packages)]
+    result = subprocess.Popen(cmd, stdout=subprocess.PIPE).communicate()[0]
+    for elem in result.split():
+        flag, value = elem[:2], elem[2:]
+        config_values = config.setdefault(config_map.get(flag), [])
+        if value not in config_values:
+            config_values.append(value)
+    return config
+        
+        
 def abspath(*path):
     """A method to determine absolute path for a given relative path to the
     directory where this setup.py script is located"""
     setup_dir = os.path.dirname(os.path.abspath(__file__))
     return os.path.join(setup_dir, *path)
 
+
 def get_release_info():
     name = "release"
     release_dir = abspath('src', 'boost', 'python')
@@ -77,36 +82,44 @@ def get_release_info():
     release = imp.load_module(name, *data)
     return release.Release
 
+
 def uniquify(seq):
     no_dups = []
-    [ no_dups.append(i) for i in seq if not no_dups.count(i) ]
+    for elem in seq:
+        if elem not in no_dups:
+            no_dups.append(elem)
     return no_dups
 
+
 def get_c_numpy():
-    NUMPY_ROOT = os.environ.get('NUMPY_ROOT')
-    if NUMPY_ROOT is not None:
-        d = os.path.join(NUMPY_ROOT, 'include')
-        if os.path.isdir(d):
-            return d
     if numpy is None:
-        return None
-    d = os.path.join(numpy.__path__[0], 'core', 'include')
-    if os.path.isdir(d):
-        return d
+        return
+    else:
+        get_include = getattr(numpy, "get_include", None)
+        if get_include is None:
+            get_include = getattr(numpy, "get_numpy_include", None)
+            if get_include is None:
+                return
+        inc = get_include()
+        if os.path.isdir(inc):
+            return inc
 
+        
 def has_c_numpy():
     return get_c_numpy() is not None
 
+
 def has_numpy(with_src=True):
     ret = numpy is not None
     if with_src:
         ret &= has_c_numpy()
     return ret
 
+
 def get_script_files():
-    
-    FILTER_OUT = (), # "winpostinstall.py",
-    
+
+    FILTER_OUT = (),  # "winpostinstall.py",
+
     scripts_dir = abspath('scripts')
     scripts = []
     items = os.listdir(scripts_dir)
@@ -128,15 +141,43 @@ def get_script_files():
         scripts.append('scripts/' + item)
     return scripts
 
+
+def add_lib(name, dirs, sys_libs, env_name=None, lib_name=None, inc_suffix=None):
+    if env_name is None:
+        env_name = name.upper() + '_ROOT'
+    ENV = os.environ.get(env_name)
+    if lib_name is None:
+        lib_name = name
+    if ENV is None:
+        sys_libs.append(lib_name)
+        return
+    else:
+        inc_dir = os.path.join(ENV, 'include')
+        if inc_suffix is not None:
+            inc_dir = os.path.join(inc_dir, inc_suffix)
+        if is64:
+            lib_dir = os.path.join(ENV, 'lib64')
+            if not os.path.isdir(lib_dir):
+                lib_dir = os.path.join(ENV, 'lib')
+        else:
+            lib_dir = os.path.join(ENV, 'lib')
+        
+        if lib_name.startswith('lib'):
+            lib_name = lib_name[3:]
+        dirs['include_dirs'].append(inc_dir)
+        dirs['library_dirs'].append(lib_dir)
+        dirs['libraries'].append(lib_name)
+
+        
 class build(dftbuild):
-    
+
     user_options = dftbuild.user_options + \
         [('without-ipython', None, "Tango IPython extension"),
          ('strip-lib', None, "strips the shared library of debugging symbols (Unix like systems only)"),
          ('no-doc', None, "do not build documentation") ]
-    
+
     boolean_options = dftbuild.boolean_options + ['without-ipython', 'strip-lib', 'no-doc']
-    
+
     def initialize_options (self):
         dftbuild.initialize_options(self)
         self.without_ipython = None
@@ -145,21 +186,21 @@ class build(dftbuild):
 
     def finalize_options(self):
         dftbuild.finalize_options(self)
-        
+
     def run(self):
         if numpy is None:
             self.warn('NOT using numpy: it is not available')
         elif get_c_numpy() is None:
             self.warn("NOT using numpy: numpy available but C source is not")
-        
+
         if IPython and not self.without_ipython:
             if V(IPython.__version__) > V('0.10'):
                 self.distribution.py_modules.append('IPython.config.profile.tango.ipython_config')
             else:
                 self.distribution.py_modules.append('IPython.Extensions.ipy_profile_tango')
-            
+
         dftbuild.run(self)
-        
+
         if self.strip_lib:
             if os.name == 'posix':
                 has_objcopy = os.system("type objcopy") == 0
@@ -186,15 +227,15 @@ class build(dftbuild):
             return False
         if V(sphinx.__version__) <= V("0.6.5"):
             print("Documentation will not be generated: sphinx version (%s) too low. Needs 0.6.6" % sphinx.__version__)
-            return False 
+            return False
         setup_dir = os.path.dirname(os.path.abspath(__file__))
         return os.path.isdir(os.path.join(setup_dir, 'doc'))
 
-    sub_commands = dftbuild.sub_commands + [('build_doc', has_doc),]
+    sub_commands = dftbuild.sub_commands + [('build_doc', has_doc), ]
 
 
-class build_ext(dftbuild_ext): 
-    
+class build_ext(dftbuild_ext):
+
     def build_extensions(self):
         self.use_cpp_0x = False
         if isinstance(self.compiler, UnixCCompiler):
@@ -202,11 +243,12 @@ class build_ext(dftbuild_ext):
             while '-Wstrict-prototypes' in compiler_pars:
                 del compiler_pars[compiler_pars.index('-Wstrict-prototypes')]
             #self.compiler.compiler_so = " ".join(compiler_pars)
-            
+
             # mimic tango check to activate C++0x extension
-            import subprocess
             compiler = self.compiler.compiler
-            pipe = subprocess.Popen(compiler + ["-dumpversion"], stdout=subprocess.PIPE).stdout
+            proc = subprocess.Popen(compiler + ["-dumpversion"], stdout=subprocess.PIPE)
+            pipe = proc.stdout
+            proc.wait()
             gcc_ver = pipe.readlines()[0].decode().strip()
             if V(gcc_ver) >= V("4.3.3"):
                 self.use_cpp_0x = True
@@ -220,14 +262,14 @@ class build_ext(dftbuild_ext):
 
 if sphinx:
     class build_doc(BuildDoc):
-        
+
         def run(self):
             # make sure the python path is pointing to the newly built
             # code so that the documentation is built on this and not a
             # previously installed version
-            
-            build = self.get_finalized_command('build')
-            sys.path.insert(0, os.path.abspath(build.build_lib))
+
+            build_cmd = self.get_finalized_command('build')
+            sys.path.insert(0, os.path.abspath(build_cmd.build_lib))
             sphinx.setup_command.BuildDoc.run(self)
             sys.path.pop(0)
 
@@ -236,24 +278,24 @@ class install_html(Command):
 
     user_options = [
         ('install-dir=', 'd', 'base directory for installing HTML documentation files')]
-    
+
     def initialize_options(self):
         self.install_dir = None
-        
+
     def finalize_options(self):
         self.set_undefined_options('install',
                                    ('install_html', 'install_dir'))
-                                   
+
     def run(self):
-        build_doc = self.get_finalized_command('build_doc')
-        src_html_dir = abspath(build_doc.build_dir, 'html')
+        build_doc_cmd = self.get_finalized_command('build_doc')
+        src_html_dir = abspath(build_doc_cmd.build_dir, 'html')
         self.copy_tree(src_html_dir, self.install_dir)
 
 
 class install(dftinstall):
-    
+
     user_options = dftinstall.user_options + \
-        [('install-html=', None, "installation directory for HTML documentation"),]
+        [('install-html=', None, "installation directory for HTML documentation"), ]
 
     def initialize_options(self):
         dftinstall.initialize_options(self)
@@ -264,31 +306,76 @@ class install(dftinstall):
         # We do a hack here. We cannot trust the 'install_base' value because it
         # is not always the final target. For example, in unix, the install_base
         # is '/usr' and all other install_* are directly relative to it. However,
-        # in unix-local (like ubuntu) install_base is still '/usr' but, for 
+        # in unix-local (like ubuntu) install_base is still '/usr' but, for
         # example, install_data, is '$install_base/local' which breaks everything.
         #
         # The hack consists in using install_data instead of install_base since
         # install_data seems to be, in practice, the proper install_base on all
         # different systems.
         if self.install_html is None:
-            self.install_html = os.path.join(self.install_data, 'share', 'doc', 'PyTango', 'html')
-        
+            self.install_html = os.path.join(self.install_data,
+                                             'share', 'doc', 'PyTango', 'html')
+
     def has_html(self):
         return sphinx is not None
-    
+
     sub_commands = list(dftinstall.sub_commands)
     sub_commands.append(('install_html', has_html))
 
-
+    
 def main():
-    ZMQ_ROOT = LOG4TANGO_ROOT = BOOST_ROOT = OMNI_ROOT = TANGO_ROOT = '/usr'
+    macros = []
+    
+    directories = dict(include_dirs=[abspath('src', 'boost', 'cpp')],
+                       library_dirs=[],
+                       libraries=[])
+    sys_libs = []
+    
+    add_lib('omni', directories, sys_libs, lib_name='omniORB4')
+    add_lib('zmq', directories, sys_libs, lib_name='libzmq')
+    add_lib('tango', directories, sys_libs, inc_suffix='tango')
+    add_lib('log4tango', directories, sys_libs)
+
+    # special boost-python configuration
+
+    BOOST_ROOT = os.environ.get('BOOST_ROOT')
+    boost_library_name = 'boost_python'
+    if BOOST_ROOT is None:
+        if 'linux' in sys.platform:
+            dist_name = platform.linux_distribution()[0].lower()
+            debian_based = 'debian' in dist_name or 'ubuntu' in dist_name
+            if debian_based:
+                # when building with multiple version of python on debian we need
+                # to link against boost_python-py25/-py26 etc...
+                pyver = "-py"
+                pyver += "".join(map(str, platform.python_version_tuple()[:2]))
+                boost_library_name += pyver
+    else:
+        inc_dir = os.path.join(BOOST_ROOT, 'include')
+        lib_dir = os.path.join(BOOST_ROOT, 'lib')
+        if is64:
+            lib_dir = os.path.join(BOOST_ROOT, 'lib64')
+            if not os.path.isdir(lib_dir):
+                lib_dir = os.path.join(BOOST_ROOT, 'lib')                
+
+        directories['include_dirs'].append(inc_dir)
+        directories['library_dirs'].append(lib_dir)
+                
+    directories['libraries'].append(boost_library_name)
 
-    TANGO_ROOT = os.environ.get('TANGO_ROOT', TANGO_ROOT)
-    OMNI_ROOT  = os.environ.get('OMNI_ROOT', OMNI_ROOT)
-    BOOST_ROOT = os.environ.get('BOOST_ROOT', BOOST_ROOT)
-    LOG4TANGO_ROOT = os.environ.get('LOG4TANGO_ROOT', LOG4TANGO_ROOT)
-    ZMQ_ROOT = os.environ.get('ZMQ_ROOT', ZMQ_ROOT)
+    # special numpy configuration
+    
     numpy_c_include = get_c_numpy()
+    if numpy_c_include is not None:
+        directories['include_dirs'].append(numpy_c_include)
+
+    if not has_numpy():
+        macros.append(('DISABLE_PYTANGO_NUMPY', None))
+    else:
+        macros.append(('PYTANGO_NUMPY_VERSION', '"' + str(numpy.__version__) + '"'))
+
+    if 'posix' in os.name:
+        directories = pkg_config(*sys_libs, **directories)
     
     Release = get_release_info()
 
@@ -301,6 +388,7 @@ def main():
         'PyTango.ipython',
         'PyTango.ipython.ipython_00_10',
         'PyTango.ipython.ipython_00_11',
+        'PyTango.ipython.ipython_10_00',        
     ]
 
     py_modules = []
@@ -317,9 +405,9 @@ def main():
     package_data = {
         'PyTango' : [],
     }
-    
+
     scripts = get_script_files()
-    
+
     data_files = []
 
     classifiers = [
@@ -338,229 +426,86 @@ def main():
         'Topic :: Scientific/Engineering',
         'Topic :: Software Development :: Libraries',
     ]
-
-    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-    # include directories
-    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-
-    include_dirs = [ abspath('src', 'boost', 'cpp') ]
-
-    _tango_root_inc = os.path.join(TANGO_ROOT, 'include')
-    include_dirs.append(_tango_root_inc)
-
-    # $TANGO_ROOT/include/tango exists since tango 7.2.0
-    # we changed the PyTango code include statements from:
-    # #include <tango.h> to:
-    # #include <tango/tango.h>
-    # However tango itself complains that it doesn't know his own header files
-    # if we don't add the $TANGO_ROOT/include/tango directory to the path. So we do it
-    # here
-    _tango_root_inc = os.path.join(_tango_root_inc, 'tango')
-    if os.path.isdir(_tango_root_inc):
-        include_dirs.append(_tango_root_inc)
-
-    include_dirs.append(os.path.join(OMNI_ROOT, 'include'))
-    if numpy_c_include is not None:
-        include_dirs.append(numpy_c_include)
-    include_dirs.append(os.path.join(LOG4TANGO_ROOT, 'include'))
-
-    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-    # library directories
-    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-
-    libraries = [
-        'tango',
-        'log4tango',
-        'zmq',
+    
+    # Note for PyTango developers:
+    # Compilation time can be greatly reduced by compiling the file
+    # src/precompiled_header.hpp as src/precompiled_header.hpp.gch
+    # and then uncommenting this line. Someday maybe this will be
+    # automated...
+    extra_compile_args = [
+#        '-includesrc/precompiled_header.hpp',
     ]
 
-    extra_compile_args = []
-
-    extra_link_args = []
-
-    macros = []
-
-    if not has_numpy():
-        macros.append( ('DISABLE_PYTANGO_NUMPY', None) )
+    extra_link_args = [
+        '-Wl,-h',
+        '-Wl,--strip-all',
+    ]
 
-    library_dirs = []
-    for f in (TANGO_ROOT,BOOST_ROOT,LOG4TANGO_ROOT,ZMQ_ROOT):
-        is64 = 8 * struct.calcsize("P") == 64
-        d = os.path.join(f,'lib')
-        if is64:
-            d = os.path.join(f,'lib64')
-            try: 
-                if not os.stat(d): raise Exception('%s_doesnt_exist'%d)
-            except: d = os.path.join(f,'lib')
-        library_dirs.append(d)
-            
-#    library_dirs = [
-#        os.path.join(TANGO_ROOT, 'lib'),
-#        os.path.join(BOOST_ROOT, 'lib'),
-#        #os.path.join(LOG4TANGO_ROOT, 'lib'),
-#        os.path.join(ZMQ_ROOT, 'lib'),
-#    ]                                
-
-    if os.name == 'nt':
-        include_dirs += [ BOOST_ROOT ]
-
-        if please_debug:
-            libraries += [
-                #'libboost_python-vc80-mt-1_38', Boost in windows autodetects the
-                #proper library to link itself with...
-                'omniORB414d_rt',
-                'omniDynamic414d_rt',
-                'omnithread34d_rt',
-                'COS414d_rt',
-            ]
-            extra_compile_args += []
-            extra_link_args += ['/DEBUG']
-            macros += [ ('_DEBUG', None) ]
-        else:
-            libraries += [
-                #'libboost_python-vc80-mt-1_38', Boost in windows autodetects the
-                #proper library to link itself with...
-                'omniORB414_rt',
-                'omniDynamic414_rt',
-                'omnithread34_rt',
-                'COS414_rt',
-            ]
-
-        library_dirs += [ os.path.join(OMNI_ROOT, 'lib', 'x86_win32') ]
-        
-        extra_compile_args += [
-            '/EHsc',
-            '/wd4005', # supress redefinition of HAVE_STRFTIME between python and omniORB
-            '/wd4996', # same as /D_SCL_SECURE_NO_WARNINGS
-            '/wd4250', # supress base class inheritance warning
-        ]
-
-        extra_link_args += []
-
-        macros += [
-            #('_WINDOWS', None),
-            #('_USRDLL', None),
-            #('_TANGO_LIB', None),
-            #('JPG_USE_ASM', None),
-            ('LOG4TANGO_HAS_DLL', None),
-            ('TANGO_HAS_DLL', None),
-            ('WIN32', None),
-        ]
+    if please_debug:
+        extra_compile_args += ['-g', '-O0']
+        extra_link_args += ['-g' , '-O0'] 
 
-    else:
-        if please_debug:
-            extra_compile_args += ['-g', '-O0']
-            extra_link_args += ['-g' , '-O0']
-        
-        include_dirs += [ os.path.join(BOOST_ROOT, 'include') ]
+    include_dirs = uniquify(directories['include_dirs'])
+    library_dirs = uniquify(directories['library_dirs'])
+    libraries = uniquify(directories['libraries'])
         
-        libraries += [
-            'pthread',
-            'rt',
-            'dl',
-            'omniORB4',
-            'omniDynamic4',
-            'omnithread',
-            'COS4',
-        ]
-        
-        boost_library_name = 'boost_python'
-        
-        if 'linux' in sys.platform:
-            dist_name = platform.linux_distribution()[0].lower()
-            debian_based = 'debian' in dist_name or 'ubuntu' in dist_name
-            if debian_based:
-                # when building with multiple version of python on debian we need
-                # to link against boost_python-py25/-py26 etc...
-                pyver = "-py" + "".join(map(str, platform.python_version_tuple()[:2]))
-                boost_library_name += pyver
-        libraries.append(boost_library_name)
-
-        is64 = 8 * struct.calcsize("P") == 64
-        omni_lib = os.path.join(OMNI_ROOT, 'lib')
-        if is64:
-            omni_lib = os.path.join(OMNI_ROOT, 'lib64')
-            try: 
-                if not os.stat(d): raise Exception('%s_doesnt_exist'%d)
-            except:
-                omni_lib = os.path.join(OMNI_ROOT, 'lib')
-        library_dirs += [ omni_lib ]
-
-
-        # Note for PyTango developers:
-        # Compilation time can be greatly reduced by compiling the file
-        # src/precompiled_header.hpp as src/precompiled_header.hpp.gch
-        # and then uncommenting this line. Someday maybe this will be
-        # automated...
-        extra_compile_args += [
-#            '-includesrc/precompiled_header.hpp',
-        ]
-
-        #if not please_debug:
-        #    extra_compile_args += [ '-g0' ]
-
-        extra_link_args += [
-            '-Wl,-h',
-            '-Wl,--strip-all',
-        ]
-
-        macros += []
-
-    include_dirs = uniquify(include_dirs)
-    library_dirs = uniquify(library_dirs)
     src_dir = abspath('src', 'boost', 'cpp')
     client_dir = src_dir
     server_dir = os.path.join(src_dir, 'server')
-    _clientfiles = [ os.path.join(client_dir,fname) for fname in os.listdir(client_dir) if fname.endswith('.cpp') ]
+    _clientfiles = [ os.path.join(client_dir, fname)
+                        for fname in os.listdir(client_dir)
+                            if fname.endswith('.cpp') ]
     _clientfiles.sort()
-    _serverfiles = [ os.path.join(server_dir,fname) for fname in os.listdir(server_dir) if fname.endswith('.cpp') ]
+    _serverfiles = [ os.path.join(server_dir, fname)
+                         for fname in os.listdir(server_dir)
+                             if fname.endswith('.cpp') ]
     _serverfiles.sort()
     _cppfiles = _clientfiles + _serverfiles
-    
+
     _pytango = Extension(
-        name               = '_PyTango',
-        sources            = _cppfiles,
-        include_dirs       = include_dirs,
-        library_dirs       = library_dirs,
-        libraries          = libraries,
-        define_macros      = macros,
-        extra_compile_args = extra_compile_args,
-        extra_link_args    = extra_link_args,
-        language           = 'c++',
-        depends            = [])
+        name='_PyTango',
+        sources=_cppfiles,
+        include_dirs=include_dirs,
+        library_dirs=library_dirs,
+        libraries=libraries,
+        define_macros=macros,
+        extra_compile_args=extra_compile_args,
+        extra_link_args=extra_link_args,
+        language='c++',
+        depends=[])
 
     cmdclass = {'build'        : build,
                 'build_ext'    : build_ext,
                 'install_html' : install_html,
                 'install'      : install }
-    
+
     if sphinx:
         cmdclass['build_doc'] = build_doc
 
     dist = setup(
-        name             = 'PyTango',
-        version          = Release.version,
-        description      = Release.description,
-        long_description = Release.long_description,
-        author           = author[0],
-        author_email     = author[1],
-        url              = Release.url,
-        download_url     = Release.download_url,
-        platforms        = Release.platform,
-        license          = Release.license,
-        packages         = packages,
-        package_dir      = { 'PyTango' : os.path.join('src', 'boost', 'python') },
-        py_modules       = py_modules,
-        classifiers      = classifiers,
-        package_data     = package_data,
-        data_files       = data_files,
-        scripts          = scripts,
-        provides         = provides,
-        keywords         = Release.keywords,
-        requires         = requires,
-        ext_package      = 'PyTango',
-        ext_modules      = [_pytango],
-        cmdclass         = cmdclass)
+        name='PyTango',
+        version=Release.version,
+        description=Release.description,
+        long_description=Release.long_description,
+        author=author[0],
+        author_email=author[1],
+        url=Release.url,
+        download_url=Release.download_url,
+        platforms=Release.platform,
+        license=Release.license,
+        packages=packages,
+        package_dir={ 'PyTango' : os.path.join('src', 'boost', 'python') },
+        py_modules=py_modules,
+        classifiers=classifiers,
+        package_data=package_data,
+        data_files=data_files,
+        scripts=scripts,
+        provides=provides,
+        keywords=Release.keywords,
+        requires=requires,
+        ext_package='PyTango',
+        ext_modules=[_pytango],
+        cmdclass=cmdclass)
 
 if __name__ == "__main__":
     main()
diff --git a/src/boost/cpp/api_util.cpp b/src/boost/cpp/api_util.cpp
index d0e4651..d9c550d 100644
--- a/src/boost/cpp/api_util.cpp
+++ b/src/boost/cpp/api_util.cpp
@@ -1,25 +1,13 @@
-/*******************************************************************************
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
 
-   This file is part of PyTango, a python binding for Tango
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
 
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 #include "precompiled_header.hpp"
 #include <tango.h>
diff --git a/src/boost/cpp/archive_event_info.cpp b/src/boost/cpp/archive_event_info.cpp
index 78cfc7a..75a8fa4 100644
--- a/src/boost/cpp/archive_event_info.cpp
+++ b/src/boost/cpp/archive_event_info.cpp
@@ -1,25 +1,13 @@
-/*******************************************************************************
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
 
-   This file is part of PyTango, a python binding for Tango
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
 
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 #include "precompiled_header.hpp"
 #include <tango.h>
@@ -29,6 +17,7 @@ using namespace boost::python;
 void export_archive_event_info()
 {
     class_<Tango::ArchiveEventInfo>("ArchiveEventInfo")
+        .enable_pickling()
         .def_readwrite("archive_rel_change", &Tango::ArchiveEventInfo::archive_rel_change)
         .def_readwrite("archive_abs_change", &Tango::ArchiveEventInfo::archive_abs_change)
         .def_readwrite("archive_period", &Tango::ArchiveEventInfo::archive_period)
diff --git a/src/boost/cpp/attr_conf_event_data.cpp b/src/boost/cpp/attr_conf_event_data.cpp
index c3441f1..cee7201 100644
--- a/src/boost/cpp/attr_conf_event_data.cpp
+++ b/src/boost/cpp/attr_conf_event_data.cpp
@@ -1,25 +1,13 @@
-/*******************************************************************************
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
 
-   This file is part of PyTango, a python binding for Tango
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
 
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 #include "precompiled_header.hpp"
 #include <tango.h>
@@ -30,7 +18,6 @@ void export_attr_conf_event_data()
 {
     class_<Tango::AttrConfEventData>("AttrConfEventData",
         init<const Tango::AttrConfEventData &>())
-
         // The original Tango::EventData structure has a 'device' field.
         // However, if we returned this directly we would get a different
         // python device each time. So we are doing our weird things to make
diff --git a/src/boost/cpp/attribute_alarm_info.cpp b/src/boost/cpp/attribute_alarm_info.cpp
index 48e182f..93557ef 100644
--- a/src/boost/cpp/attribute_alarm_info.cpp
+++ b/src/boost/cpp/attribute_alarm_info.cpp
@@ -1,25 +1,13 @@
-/*******************************************************************************
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
 
-   This file is part of PyTango, a python binding for Tango
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
 
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 #include "precompiled_header.hpp"
 #include <tango.h>
@@ -29,6 +17,7 @@ using namespace boost::python;
 void export_attribute_alarm_info()
 {
     class_<Tango::AttributeAlarmInfo>("AttributeAlarmInfo")
+        .enable_pickling()
         .def_readwrite("min_alarm", &Tango::AttributeAlarmInfo::min_alarm)
         .def_readwrite("max_alarm", &Tango::AttributeAlarmInfo::max_alarm)
         .def_readwrite("min_warning", &Tango::AttributeAlarmInfo::min_warning)
diff --git a/src/boost/cpp/attribute_dimension.cpp b/src/boost/cpp/attribute_dimension.cpp
index cfc123a..1e03935 100644
--- a/src/boost/cpp/attribute_dimension.cpp
+++ b/src/boost/cpp/attribute_dimension.cpp
@@ -1,25 +1,13 @@
-/*******************************************************************************
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
 
-   This file is part of PyTango, a python binding for Tango
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
 
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 #include "precompiled_header.hpp"
 #include <tango.h>
diff --git a/src/boost/cpp/attribute_event_info.cpp b/src/boost/cpp/attribute_event_info.cpp
index b617f8c..cfcb4f6 100644
--- a/src/boost/cpp/attribute_event_info.cpp
+++ b/src/boost/cpp/attribute_event_info.cpp
@@ -1,25 +1,13 @@
-/*******************************************************************************
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
 
-   This file is part of PyTango, a python binding for Tango
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
 
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 #include "precompiled_header.hpp"
 #include <tango.h>
@@ -29,6 +17,7 @@ using namespace boost::python;
 void export_attribute_event_info()
 {
     class_<Tango::AttributeEventInfo>("AttributeEventInfo")
+       .enable_pickling()
        .def_readwrite("ch_event", &Tango::AttributeEventInfo::ch_event)
        .def_readwrite("per_event", &Tango::AttributeEventInfo::per_event)
        .def_readwrite("arch_event", &Tango::AttributeEventInfo::arch_event)
diff --git a/src/boost/cpp/attribute_info.cpp b/src/boost/cpp/attribute_info.cpp
index 215ef9c..1a03ded 100644
--- a/src/boost/cpp/attribute_info.cpp
+++ b/src/boost/cpp/attribute_info.cpp
@@ -1,25 +1,13 @@
-/*******************************************************************************
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
 
-   This file is part of PyTango, a python binding for Tango
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
 
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 #include "precompiled_header.hpp"
 #include <tango.h>
@@ -31,6 +19,7 @@ void export_attribute_info()
     class_<Tango::AttributeInfo, bases<Tango::DeviceAttributeConfig> >
         ("AttributeInfo")
         .def(init<const Tango::AttributeInfo&>())
+        .enable_pickling()
         .def_readwrite("disp_level", &Tango::AttributeInfo::disp_level)
     ;
 }
diff --git a/src/boost/cpp/attribute_info_ex.cpp b/src/boost/cpp/attribute_info_ex.cpp
index eab4c13..bdec946 100644
--- a/src/boost/cpp/attribute_info_ex.cpp
+++ b/src/boost/cpp/attribute_info_ex.cpp
@@ -1,25 +1,13 @@
-/*******************************************************************************
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
 
-   This file is part of PyTango, a python binding for Tango
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
 
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 #include "precompiled_header.hpp"
 #include <tango.h>
@@ -31,6 +19,7 @@ void export_attribute_info_ex()
     class_<Tango::AttributeInfoEx, bases<Tango::AttributeInfo> >
         ("AttributeInfoEx")
         .def(init<const Tango::AttributeInfoEx&>())
+        .enable_pickling()
         .def_readwrite("alarms", &Tango::AttributeInfoEx::alarms)
         .def_readwrite("events", &Tango::AttributeInfoEx::events)
         .def_readwrite("sys_extensions", &Tango::AttributeInfoEx::sys_extensions)
diff --git a/src/boost/cpp/attribute_proxy.cpp b/src/boost/cpp/attribute_proxy.cpp
index 1890076..8beaf9c 100644
--- a/src/boost/cpp/attribute_proxy.cpp
+++ b/src/boost/cpp/attribute_proxy.cpp
@@ -1,25 +1,13 @@
-/*******************************************************************************
-
-   This file is part of PyTango, a python binding for Tango
-
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 #include "precompiled_header.hpp"
 #include "defs.h"
diff --git a/src/boost/cpp/base_types.cpp b/src/boost/cpp/base_types.cpp
index b2fd009..c1586c4 100644
--- a/src/boost/cpp/base_types.cpp
+++ b/src/boost/cpp/base_types.cpp
@@ -1,25 +1,13 @@
-/*******************************************************************************
-
-   This file is part of PyTango, a python binding for Tango
-
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 #include "precompiled_header.hpp"
 #include "defs.h"
@@ -188,6 +176,12 @@ void export_base_types()
         .value("Nothing", PyTango::ExtractAsNothing)
     ;
 
+    enum_<PyTango::GreenMode>("GreenMode")
+        .value("Synchronous", PyTango::GreenModeSynchronous)
+        .value("Futures", PyTango::GreenModeFutures)
+        .value("Gevent", PyTango::GreenModeGevent)
+    ;
+
     enum_<PyTango::ImageFormat>("_ImageFormat")
         .value("RawImage", PyTango::RawImage)
         .value("JpegImage", PyTango::JpegImage)
@@ -351,4 +345,6 @@ void export_base_types()
     export_time_val();
     
     def("raise_asynch_exception", &raise_asynch_exception);
+
+    def("_get_tango_lib_release", &Tango::_convert_tango_lib_release);
 }
diff --git a/src/boost/cpp/base_types_numpy.hpp b/src/boost/cpp/base_types_numpy.hpp
index b2366f5..9f0a8d7 100644
--- a/src/boost/cpp/base_types_numpy.hpp
+++ b/src/boost/cpp/base_types_numpy.hpp
@@ -1,25 +1,13 @@
-/*******************************************************************************
-
-   This file is part of PyTango, a python binding for Tango
-
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 #pragma once
 
diff --git a/src/boost/cpp/callback.cpp b/src/boost/cpp/callback.cpp
index 486d363..59ae207 100644
--- a/src/boost/cpp/callback.cpp
+++ b/src/boost/cpp/callback.cpp
@@ -1,25 +1,13 @@
-/*******************************************************************************
-
-   This file is part of PyTango, a python binding for Tango
-
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 #include "precompiled_header.hpp"
 #include "pytgutils.h"
diff --git a/src/boost/cpp/callback.h b/src/boost/cpp/callback.h
index e478ffe..7c2e21d 100644
--- a/src/boost/cpp/callback.h
+++ b/src/boost/cpp/callback.h
@@ -1,25 +1,13 @@
-/*******************************************************************************
-
-   This file is part of PyTango, a python binding for Tango
-
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 #pragma once
 
diff --git a/src/boost/cpp/change_event_info.cpp b/src/boost/cpp/change_event_info.cpp
index 261355b..7d808e1 100644
--- a/src/boost/cpp/change_event_info.cpp
+++ b/src/boost/cpp/change_event_info.cpp
@@ -1,25 +1,13 @@
-/*******************************************************************************
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
 
-   This file is part of PyTango, a python binding for Tango
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
 
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 #include "precompiled_header.hpp"
 #include <tango.h>
@@ -29,6 +17,7 @@ using namespace boost::python;
 void export_change_event_info()
 {
     class_<Tango::ChangeEventInfo>("ChangeEventInfo")
+        .enable_pickling()
         .def_readwrite("rel_change", &Tango::ChangeEventInfo::rel_change)
         .def_readwrite("abs_change", &Tango::ChangeEventInfo::abs_change)
         .def_readwrite("extensions", &Tango::ChangeEventInfo::extensions)
diff --git a/src/boost/cpp/command_info.cpp b/src/boost/cpp/command_info.cpp
index a912fbd..b9e638f 100644
--- a/src/boost/cpp/command_info.cpp
+++ b/src/boost/cpp/command_info.cpp
@@ -1,25 +1,13 @@
-/*******************************************************************************
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
 
-   This file is part of PyTango, a python binding for Tango
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
 
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 #include "precompiled_header.hpp"
 #include <tango.h>
diff --git a/src/boost/cpp/connection.cpp b/src/boost/cpp/connection.cpp
index a8ca2c4..a7fc450 100644
--- a/src/boost/cpp/connection.cpp
+++ b/src/boost/cpp/connection.cpp
@@ -1,25 +1,13 @@
-/*******************************************************************************
-
-   This file is part of PyTango, a python binding for Tango
-
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 #include "precompiled_header.hpp"
 #include "pytgutils.h"
diff --git a/src/boost/cpp/constants.cpp b/src/boost/cpp/constants.cpp
index e771477..9717a23 100644
--- a/src/boost/cpp/constants.cpp
+++ b/src/boost/cpp/constants.cpp
@@ -1,28 +1,17 @@
-/*******************************************************************************
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
 
-   This file is part of PyTango, a python binding for Tango
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
 
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 #include "precompiled_header.hpp"
 #include <tango.h>
+#include "tango_numpy.h"
 
 using namespace boost::python;
 
@@ -39,10 +28,24 @@ void export_constants()
 
 #ifdef DISABLE_PYTANGO_NUMPY
     consts_scope.attr("NUMPY_SUPPORT") = false;
+    consts_scope.attr("NUMPY_VERSION") = "0.0.0";
 #else
     consts_scope.attr("NUMPY_SUPPORT") = true;
+    consts_scope.attr("NUMPY_VERSION") = PYTANGO_NUMPY_VERSION;
 #endif
 
+    consts_scope.attr("PY_MAJOR_VERSION") = PY_MAJOR_VERSION;
+    consts_scope.attr("PY_MINOR_VERSION") = PY_MINOR_VERSION;
+    consts_scope.attr("PY_MICRO_VERSION") = PY_MICRO_VERSION;
+    consts_scope.attr("PY_VERSION") = PY_VERSION;
+    consts_scope.attr("PY_VERSION_HEX") = PY_VERSION_HEX;
+
+    consts_scope.attr("BOOST_MAJOR_VERSION") = BOOST_VERSION / 100000;
+    consts_scope.attr("BOOST_MINOR_VERSION") = BOOST_VERSION / 100 % 1000;
+    consts_scope.attr("BOOST_PATCH_VERSION") = BOOST_VERSION % 100;
+    // missing BOOST_VERSION => do it in python
+
+
     //
     // From tango_const.h
     //
@@ -53,8 +56,10 @@ void export_constants()
     consts_scope.attr("TANGO_VERSION_MAJOR") = TANGO_VERSION_MAJOR;
     consts_scope.attr("TANGO_VERSION_MINOR") = TANGO_VERSION_MINOR;
     consts_scope.attr("TANGO_VERSION_PATCH") = TANGO_VERSION_PATCH;
-    
+    consts_scope.attr("TANGO_VERSION") = TgLibVers;
+
     consts_scope.attr("TgLibVers") = TgLibVers;
+    consts_scope.attr("TgLibVersNb") = TgLibVersNb;
     consts_scope.attr("DevVersion") = DevVersion;
     consts_scope.attr("DefaultMaxSeq") = DefaultMaxSeq;
     consts_scope.attr("DefaultBlackBoxDepth") = DefaultBlackBoxDepth;
@@ -188,7 +193,15 @@ void export_constants()
     consts_scope.attr("UnitNotSpec") = UnitNotSpec;
     consts_scope.attr("StdUnitNotSpec") = StdUnitNotSpec;
     consts_scope.attr("DispUnitNotSpec") = DispUnitNotSpec;
+#ifdef FormatNotSpec
     consts_scope.attr("FormatNotSpec") = FormatNotSpec;
+#else
+    consts_scope.attr("FormatNotSpec") = FormatNotSpec_FL;
+#endif
+    consts_scope.attr("FormatNotSpec_FL") = FormatNotSpec_FL;
+    consts_scope.attr("FormatNotSpec_INT") = FormatNotSpec_INT;
+    consts_scope.attr("FormatNotSpec_STR") = FormatNotSpec_STR;
+    
     consts_scope.attr("NotANumber") = NotANumber;
     consts_scope.attr("MemNotUsed") = MemNotUsed;
     consts_scope.attr("MemAttrPropName") = MemAttrPropName;
@@ -201,73 +214,73 @@ void export_constants()
     consts_scope.attr("TANGO_LONG64") = false;
 #endif    
 
-    consts_scope.attr("API_AttrConfig") = "API_AttrConfig";
-    consts_scope.attr("API_AttrEventProp") = "API_AttrEventProp";
-    consts_scope.attr("API_AttrIncorrectDataNumber") = "API_AttrIncorrectDataNumber";
-    consts_scope.attr("API_AttrNoAlarm") = "API_AttrNoAlarm";
-    consts_scope.attr("API_AttrNotAllowed") = "API_AttrNotAllowed";
-    consts_scope.attr("API_AttrNotFound") = "API_AttrNotFound";
-    consts_scope.attr("API_AttrNotWritable") = "API_AttrNotWritable";
-    consts_scope.attr("API_AttrOptProp") = "API_AttrOptProp";
-    consts_scope.attr("API_AttrPropValueNotSet") = "API_AttrPropValueNotSet";
-    consts_scope.attr("API_AttrValueNotSet") = "API_AttrValueNotSet";
-    consts_scope.attr("API_AttrWrongDefined") = "API_AttrWrongDefined";
-    consts_scope.attr("API_AttrWrongMemValue") = "API_AttrWrongMemValue";
-    consts_scope.attr("API_BadConfigurationProperty") = "API_BadConfigurationProperty";
-    consts_scope.attr("API_BlackBoxArgument") = "API_BlackBoxArgument";
-    consts_scope.attr("API_BlackBoxEmpty") = "API_BlackBoxEmpty";
-    consts_scope.attr("API_CannotCheckAccessControl") = "API_CannotCheckAccessControl";
-    consts_scope.attr("API_CannotOpenFile") = "API_CannotOpenFile";
-    consts_scope.attr("API_CantActivatePOAManager") = "API_CantActivatePOAManager";
-    consts_scope.attr("API_CantCreateClassPoa") = "API_CantCreateClassPoa";
-    consts_scope.attr("API_CantCreateLockingThread") = "API_CantCreateLockingThread";
-    consts_scope.attr("API_CantFindLockingThread") = "API_CantFindLockingThread";
-    consts_scope.attr("API_CantGetClientIdent") = "API_CantGetClientIdent";
-    consts_scope.attr("API_CantGetDevObjectId") = "API_CantGetDevObjectId";
-    consts_scope.attr("API_CantInstallSignal") = "API_CantInstallSignal";
-    consts_scope.attr("API_CantRetrieveClass") = "API_CantRetrieveClass";
-    consts_scope.attr("API_CantRetrieveClassList") = "API_CantRetrieveClassList";
-    consts_scope.attr("API_CantStoreDeviceClass") = "API_CantStoreDeviceClass";
-    consts_scope.attr("API_ClassNotFound") = "API_ClassNotFound";
-    consts_scope.attr("API_CmdArgumentTypeNotSupported") = "API_CmdArgumentTypeNotSupported";
-    consts_scope.attr("API_CommandNotAllowed") = "API_CommandNotAllowed";
-    consts_scope.attr("API_CommandNotFound") = "API_CommandNotFound";
-    consts_scope.attr("API_CorbaSysException") = "API_CorbaSysException";
-    consts_scope.attr("API_CorruptedDatabase") = "API_CorruptedDatabase";
-    consts_scope.attr("API_DatabaseAccess") = "API_DatabaseAccess";
-    consts_scope.attr("API_DeviceLocked") = "API_DeviceLocked";
-    consts_scope.attr("API_DeviceNotFound") = "API_DeviceNotFound";
-    consts_scope.attr("API_DeviceNotLocked") = "API_DeviceNotLocked";
-    consts_scope.attr("API_DeviceUnlockable") = "API_DeviceUnlockable";
-    consts_scope.attr("API_DeviceUnlocked") = "API_DeviceUnlocked";
-    consts_scope.attr("API_EventSupplierNotConstructed") = "API_EventSupplierNotConstructed";
-    consts_scope.attr("API_IncoherentDbData") = "API_IncoherentDbData";
-    consts_scope.attr("API_IncoherentDevData") = "API_IncoherentDevData";
-    consts_scope.attr("API_IncoherentValues") = "API_IncoherentValues";
-    consts_scope.attr("API_IncompatibleAttrDataType") = "API_IncompatibleAttrDataType";
-    consts_scope.attr("API_IncompatibleCmdArgumentType") = "API_IncompatibleCmdArgumentType";
-    consts_scope.attr("API_InitMethodNotFound") = "API_InitMethodNotFound";
-    consts_scope.attr("API_InitNotPublic") = "API_InitNotPublic";
-    consts_scope.attr("API_InitThrowsException") = "API_InitThrowsException";
-    consts_scope.attr("API_JavaRuntimeSecurityException") = "API_JavaRuntimeSecurityException";
-    consts_scope.attr("API_MemoryAllocation") = "API_MemoryAllocation";
-    consts_scope.attr("API_MethodArgument") = "API_MethodArgument";
-    consts_scope.attr("API_MethodNotFound") = "API_MethodNotFound";
-    consts_scope.attr("API_MissedEvents") = "API_MissedEvents";
-    consts_scope.attr("API_NotSupportedFeature") = "API_NotSupportedFeature";
-    consts_scope.attr("API_NtDebugWindowError") = "API_NtDebugWindowError";
-    consts_scope.attr("API_OverloadingNotSupported") = "API_OverloadingNotSupported";
-    consts_scope.attr("API_PolledDeviceNotInPoolConf") = "API_PolledDeviceNotInPoolConf";
-    consts_scope.attr("API_PolledDeviceNotInPoolMap") = "API_PolledDeviceNotInPoolMap";
-    consts_scope.attr("API_PollingThreadNotFound") = "API_PollingThreadNotFound";
-    consts_scope.attr("API_ReadOnlyMode") = "API_ReadOnlyMode";
-    consts_scope.attr("API_SignalOutOfRange") = "API_SignalOutOfRange";
-    consts_scope.attr("API_SystemCallFailed") = "API_SystemCallFailed";
-    consts_scope.attr("API_WAttrOutsideLimit") = "API_WAttrOutsideLimit";
-    consts_scope.attr("API_WizardConfError") = "API_WizardConfError";
-    consts_scope.attr("API_WrongEventData") = "API_WrongEventData";
-    consts_scope.attr("API_WrongHistoryDataBuffer") = "API_WrongHistoryDataBuffer";
-    consts_scope.attr("API_WrongLockingStatus") = "API_WrongLockingStatus";
-    consts_scope.attr("API_ZmqInitFailed") = "API_ZmqInitFailed";
+    consts_scope.attr("API_AttrConfig") = API_AttrConfig;
+    consts_scope.attr("API_AttrEventProp") = API_AttrEventProp;
+    consts_scope.attr("API_AttrIncorrectDataNumber") = API_AttrIncorrectDataNumber;
+    consts_scope.attr("API_AttrNoAlarm") = API_AttrNoAlarm;
+    consts_scope.attr("API_AttrNotAllowed") = API_AttrNotAllowed;
+    consts_scope.attr("API_AttrNotFound") = API_AttrNotFound;
+    consts_scope.attr("API_AttrNotWritable") = API_AttrNotWritable;
+    consts_scope.attr("API_AttrOptProp") = API_AttrOptProp;
+    consts_scope.attr("API_AttrPropValueNotSet") = API_AttrPropValueNotSet;
+    consts_scope.attr("API_AttrValueNotSet") = API_AttrValueNotSet;
+    consts_scope.attr("API_AttrWrongDefined") = API_AttrWrongDefined;
+    consts_scope.attr("API_AttrWrongMemValue") = API_AttrWrongMemValue;
+    consts_scope.attr("API_BadConfigurationProperty") = API_BadConfigurationProperty;
+    consts_scope.attr("API_BlackBoxArgument") = API_BlackBoxArgument;
+    consts_scope.attr("API_BlackBoxEmpty") = API_BlackBoxEmpty;
+    consts_scope.attr("API_CannotCheckAccessControl") = API_CannotCheckAccessControl;
+    consts_scope.attr("API_CannotOpenFile") = API_CannotOpenFile;
+    consts_scope.attr("API_CantActivatePOAManager") = API_CantActivatePOAManager;
+    consts_scope.attr("API_CantCreateClassPoa") = API_CantCreateClassPoa;
+    consts_scope.attr("API_CantCreateLockingThread") = API_CantCreateLockingThread;
+    consts_scope.attr("API_CantFindLockingThread") = API_CantFindLockingThread;
+    consts_scope.attr("API_CantGetClientIdent") = API_CantGetClientIdent;
+    consts_scope.attr("API_CantGetDevObjectId") = API_CantGetDevObjectId;
+    consts_scope.attr("API_CantInstallSignal") = API_CantInstallSignal;
+    consts_scope.attr("API_CantRetrieveClass") = API_CantRetrieveClass;
+    consts_scope.attr("API_CantRetrieveClassList") = API_CantRetrieveClassList;
+    consts_scope.attr("API_CantStoreDeviceClass") = API_CantStoreDeviceClass;
+    consts_scope.attr("API_ClassNotFound") = API_ClassNotFound;
+    consts_scope.attr("API_CmdArgumentTypeNotSupported") = API_CmdArgumentTypeNotSupported;
+    consts_scope.attr("API_CommandNotAllowed") = API_CommandNotAllowed;
+    consts_scope.attr("API_CommandNotFound") = API_CommandNotFound;
+    consts_scope.attr("API_CorbaSysException") = API_CorbaSysException;
+    consts_scope.attr("API_CorruptedDatabase") = API_CorruptedDatabase;
+    consts_scope.attr("API_DatabaseAccess") = API_DatabaseAccess;
+    consts_scope.attr("API_DeviceLocked") = API_DeviceLocked;
+    consts_scope.attr("API_DeviceNotFound") = API_DeviceNotFound;
+    consts_scope.attr("API_DeviceNotLocked") = API_DeviceNotLocked;
+    consts_scope.attr("API_DeviceUnlockable") = API_DeviceUnlockable;
+    consts_scope.attr("API_DeviceUnlocked") = API_DeviceUnlocked;
+    consts_scope.attr("API_EventSupplierNotConstructed") = API_EventSupplierNotConstructed;
+    consts_scope.attr("API_IncoherentDbData") = API_IncoherentDbData;
+    consts_scope.attr("API_IncoherentDevData") = API_IncoherentDevData;
+    consts_scope.attr("API_IncoherentValues") = API_IncoherentValues;
+    consts_scope.attr("API_IncompatibleAttrDataType") = API_IncompatibleAttrDataType;
+    consts_scope.attr("API_IncompatibleCmdArgumentType") = API_IncompatibleCmdArgumentType;
+    consts_scope.attr("API_InitMethodNotFound") = API_InitMethodNotFound;
+    consts_scope.attr("API_InitNotPublic") = API_InitNotPublic;
+    consts_scope.attr("API_InitThrowsException") = API_InitThrowsException;
+    consts_scope.attr("API_JavaRuntimeSecurityException") = API_JavaRuntimeSecurityException;
+    consts_scope.attr("API_MemoryAllocation") = API_MemoryAllocation;
+    consts_scope.attr("API_MethodArgument") = API_MethodArgument;
+    consts_scope.attr("API_MethodNotFound") = API_MethodNotFound;
+    consts_scope.attr("API_MissedEvents") = API_MissedEvents;
+    consts_scope.attr("API_NotSupportedFeature") = API_NotSupportedFeature;
+    consts_scope.attr("API_NtDebugWindowError") = API_NtDebugWindowError;
+    consts_scope.attr("API_OverloadingNotSupported") = API_OverloadingNotSupported;
+    consts_scope.attr("API_PolledDeviceNotInPoolConf") = API_PolledDeviceNotInPoolConf;
+    consts_scope.attr("API_PolledDeviceNotInPoolMap") = API_PolledDeviceNotInPoolMap;
+    consts_scope.attr("API_PollingThreadNotFound") = API_PollingThreadNotFound;
+    consts_scope.attr("API_ReadOnlyMode") = API_ReadOnlyMode;
+    consts_scope.attr("API_SignalOutOfRange") = API_SignalOutOfRange;
+    consts_scope.attr("API_SystemCallFailed") = API_SystemCallFailed;
+    consts_scope.attr("API_WAttrOutsideLimit") = API_WAttrOutsideLimit;
+    consts_scope.attr("API_WizardConfError") = API_WizardConfError;
+    consts_scope.attr("API_WrongEventData") = API_WrongEventData;
+    consts_scope.attr("API_WrongHistoryDataBuffer") = API_WrongHistoryDataBuffer;
+    consts_scope.attr("API_WrongLockingStatus") = API_WrongLockingStatus;
+    consts_scope.attr("API_ZmqInitFailed") = API_ZmqInitFailed;
 
 }
diff --git a/src/boost/cpp/data_ready_event_data.cpp b/src/boost/cpp/data_ready_event_data.cpp
index 047770d..073e395 100644
--- a/src/boost/cpp/data_ready_event_data.cpp
+++ b/src/boost/cpp/data_ready_event_data.cpp
@@ -1,25 +1,13 @@
-/*******************************************************************************
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
 
-   This file is part of PyTango, a python binding for Tango
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
 
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 #include "precompiled_header.hpp"
 #include <tango.h>
diff --git a/src/boost/cpp/database.cpp b/src/boost/cpp/database.cpp
index c7b1910..88ab1c9 100644
--- a/src/boost/cpp/database.cpp
+++ b/src/boost/cpp/database.cpp
@@ -1,25 +1,13 @@
-/*******************************************************************************
-
-   This file is part of PyTango, a python binding for Tango
-
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 #include "precompiled_header.hpp"
 #include "defs.h"
@@ -125,6 +113,38 @@ struct PyDatabase
     //{
     //    return boost::python::str(self.get_file_name());
     //}
+
+    static inline boost::python::str
+    get_device_from_alias(Tango::Database& self, const std::string &input)
+    {
+        std::string output;
+        self.get_device_from_alias(input, output);
+        return boost::python::str(output);
+    }
+    
+    static inline boost::python::str
+    get_alias_from_device(Tango::Database& self, const std::string &input)
+    {
+        std::string output;
+        self.get_alias_from_device(input, output);
+        return boost::python::str(output);
+    }
+    
+    static inline boost::python::str
+    get_attribute_from_alias(Tango::Database& self, const std::string &input)
+    {
+        std::string output;
+        self.get_attribute_from_alias(input, output);
+        return boost::python::str(output);
+    }
+    
+    static inline boost::python::str
+    get_alias_from_attribute(Tango::Database& self, const std::string &input)
+    {
+        std::string output;
+        self.get_alias_from_attribute(input, output);
+        return boost::python::str(output);
+    }
 };
 
 void export_database()
@@ -137,6 +157,8 @@ void export_database()
         &Tango::Database::get_host_list;
     Tango::DbDatum (Tango::Database::*get_services_)(std::string &, std::string &) =
         &Tango::Database::get_services;
+    Tango::DbDatum (Tango::Database::*get_device_service_list_)(std::string &) =
+        &Tango::Database::get_device_service_list;
     void (Tango::Database::*register_service_)(std::string &, std::string &, std::string &) =
         &Tango::Database::register_service;
     void (Tango::Database::*unregister_service_)(std::string &, std::string &) =
@@ -208,6 +230,8 @@ void export_database()
 
     Tango::DbDevImportInfo (Tango::Database::*import_device_)(std::string &) =
         &Tango::Database::import_device;
+    Tango::DbDevFullInfo (Tango::Database::*get_device_info_)(std::string &) =
+        &Tango::Database::get_device_info;
     
     Tango::DbDatum (Tango::Database::*get_attribute_alias_list_)(std::string &) =
         &Tango::Database::get_attribute_alias_list;
@@ -264,6 +288,9 @@ void export_database()
         .def("get_services",
             (Tango::DbDatum (Tango::Database::*) (const std::string &, const std::string &))
             get_services_)
+        .def("get_device_service_list",
+            (Tango::DbDatum (Tango::Database::*) (const std::string &))
+            get_device_service_list_)
         .def("register_service",
             (void (Tango::Database::*) (const std::string &, const std::string &, const std::string &))
             register_service_)
@@ -277,10 +304,14 @@ void export_database()
 
         .def("add_device", &Tango::Database::add_device)
         .def("delete_device", &Tango::Database::delete_device)
-        .def("import_device", (Tango::DbDevImportInfo (Tango::Database::*) (const std::string &))
-        import_device_)
+        .def("import_device", 
+            (Tango::DbDevImportInfo (Tango::Database::*) (const std::string &))
+            import_device_)
         .def("export_device", &Tango::Database::export_device)
         .def("unexport_device", &Tango::Database::unexport_device)
+        .def("get_device_info", 
+            (Tango::DbDevFullInfo (Tango::Database::*) (const std::string &))
+            get_device_info_)
         .def("get_device_name",
             (Tango::DbDatum (Tango::Database::*) (const string &, const string &))
             get_device_name_)
@@ -316,7 +347,7 @@ void export_database()
         .def("delete_device_alias",
             (void (Tango::Database::*) (const std::string &))
             delete_device_alias_)
-
+        
         //
         // server methods
         //
@@ -331,6 +362,8 @@ void export_database()
         .def("unexport_server",
             (void (Tango::Database::*) (const std::string &))
             unexport_server_)
+        .def("rename_server", &Tango::Database::rename_server,
+            ( arg_("self"), arg_("old_ds_name"), arg_("new_ds_name") ))
         .def("get_server_info",
             (Tango::DbServerInfo (Tango::Database::*) (const std::string &))
             get_server_info_)
@@ -453,6 +486,14 @@ void export_database()
         .def("unexport_event",
             (void (Tango::Database::*) (const std::string &))
             &Tango::Database::unexport_event)
+
+// alias methods
+
+        .def("get_device_from_alias", &PyDatabase::get_device_from_alias)
+        .def("get_alias_from_device", &PyDatabase::get_alias_from_device)
+        .def("get_attribute_from_alias", &PyDatabase::get_attribute_from_alias)
+        .def("get_alias_from_attribute", &PyDatabase::get_alias_from_attribute)
+
         ;
 }
 
diff --git a/src/boost/cpp/db.cpp b/src/boost/cpp/db.cpp
index fcf2b44..5dc2adc 100644
--- a/src/boost/cpp/db.cpp
+++ b/src/boost/cpp/db.cpp
@@ -1,25 +1,13 @@
-/*******************************************************************************
-
-   This file is part of PyTango, a python binding for Tango
-
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 #include "precompiled_header.hpp"
 #include "defs.h"
@@ -29,6 +17,15 @@ using namespace boost::python;
 
 void export_database();
 
+namespace PyDbServerData {
+
+    static inline boost::python::str get_name(Tango::DbServerData &self)
+    {
+        return boost::python::str(self.get_name());
+    }
+
+};
+
 void export_db()
 {
     // Note: DbDatum in python is extended to support the python sequence API
@@ -59,8 +56,16 @@ void export_db()
         .def_readonly("ior", &Tango::DbDevImportInfo::ior)
         .def_readonly("version", &Tango::DbDevImportInfo::version)
     ;
+    
+    class_<Tango::DbDevFullInfo, bases<Tango::DbDevImportInfo> >("DbDevFullInfo")
+        .def_readonly("class_name", &Tango::DbDevFullInfo::class_name)
+        .def_readonly("ds_full_name", &Tango::DbDevFullInfo::ds_full_name)
+        .def_readonly("started_date", &Tango::DbDevFullInfo::started_date)
+        .def_readonly("stopped_date", &Tango::DbDevFullInfo::stopped_date)
+        .def_readonly("pid", &Tango::DbDevFullInfo::pid)
+    ;
 
-     class_<Tango::DbDevInfo>("DbDevInfo")
+    class_<Tango::DbDevInfo>("DbDevInfo")
         .def_readwrite("name", &Tango::DbDevInfo::name)
         .def_readwrite("_class", &Tango::DbDevInfo::_class)
         .def_readwrite("klass", &Tango::DbDevInfo::_class)
@@ -78,10 +83,23 @@ void export_db()
     ;
 
     class_<Tango::DbServerInfo>("DbServerInfo")
-         .def_readwrite("name", &Tango::DbServerInfo::name)
-         .def_readwrite("host", &Tango::DbServerInfo::host)
-         .def_readwrite("mode", &Tango::DbServerInfo::mode)
-         .def_readwrite("level", &Tango::DbServerInfo::level)
+        .def_readwrite("name", &Tango::DbServerInfo::name)
+        .def_readwrite("host", &Tango::DbServerInfo::host)
+        .def_readwrite("mode", &Tango::DbServerInfo::mode)
+        .def_readwrite("level", &Tango::DbServerInfo::level)
+    ;
+    
+    class_<Tango::DbServerData>("DbServerData",
+        init<const std::string, const std::string>())
+        .def("get_name", &PyDbServerData::get_name)
+        .def("put_in_database", &Tango::DbServerData::put_in_database)
+        .def("already_exist", &Tango::DbServerData::already_exist)
+        .def("remove", 
+             (void (Tango::DbServerData::*) ())
+             &Tango::DbServerData::remove)
+        .def("remove", 
+             (void (Tango::DbServerData::*) (const std::string &))
+             &Tango::DbServerData::remove)
     ;
 
     export_database();
diff --git a/src/boost/cpp/defs.h b/src/boost/cpp/defs.h
index 4f20c7c..8dfa3a9 100644
--- a/src/boost/cpp/defs.h
+++ b/src/boost/cpp/defs.h
@@ -1,25 +1,13 @@
-/*******************************************************************************
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
 
-   This file is part of PyTango, a python binding for Tango
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
 
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 #pragma once
 
@@ -56,6 +44,7 @@ namespace PyTango
         ExtractAsTuple,
         ExtractAsList,
         ExtractAsString,
+        ExtractAsPyTango3,
         ExtractAsNothing
     };
     
@@ -63,4 +52,10 @@ namespace PyTango
         RawImage,
         JpegImage
     };
+
+    enum GreenMode {
+        GreenModeSynchronous,
+        GreenModeFutures,
+        GreenModeGevent
+    };
 }
diff --git a/src/boost/cpp/dev_command_info.cpp b/src/boost/cpp/dev_command_info.cpp
index 91d3c11..c9c6b7e 100644
--- a/src/boost/cpp/dev_command_info.cpp
+++ b/src/boost/cpp/dev_command_info.cpp
@@ -1,25 +1,13 @@
-/*******************************************************************************
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
 
-   This file is part of PyTango, a python binding for Tango
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
 
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 #include "precompiled_header.hpp"
 #include <tango.h>
diff --git a/src/boost/cpp/dev_error.cpp b/src/boost/cpp/dev_error.cpp
index c630721..0968315 100644
--- a/src/boost/cpp/dev_error.cpp
+++ b/src/boost/cpp/dev_error.cpp
@@ -1,49 +1,60 @@
-/*******************************************************************************
-
-   This file is part of PyTango, a python binding for Tango
-
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 #include "precompiled_header.hpp"
 #include "pyutils.h"
 #include <tango.h>
 
-struct PyDevError
+namespace PyDevError
 {
-    static inline PyObject* get_reason(Tango::DevError &de)
-    { return from_char_to_str(de.reason); }
-
-    static inline PyObject* get_desc(Tango::DevError &de)
-    { return from_char_to_str(de.desc); }
-
-    static inline PyObject* get_origin(Tango::DevError &de)
-    { return from_char_to_str(de.origin); }
-
+    static void from_str_to_char(PyObject* in, CORBA::String_member& out)
+    {
+        if (PyUnicode_Check(in))
+        {
+            PyObject *bytes_in = PyUnicode_AsLatin1String(in);
+            out = CORBA::string_dup(PyBytes_AsString(bytes_in));
+            Py_DECREF(bytes_in);
+        }
+        else 
+        {
+            out = CORBA::string_dup(PyBytes_AsString(in));
+        }
+    }
+
+    static inline PyObject* get_reason(Tango::DevError &self)
+    { return from_char_to_str(self.reason); }
+
+    static inline void set_reason(Tango::DevError &self, PyObject *str)
+    { PyDevError::from_str_to_char(str, self.reason); }
+
+    static inline PyObject* get_desc(Tango::DevError &self)
+    { return from_char_to_str(self.desc); }
+
+    static inline void set_desc(Tango::DevError &self, PyObject *str)
+    { PyDevError::from_str_to_char(str, self.desc); }
+
+    static inline PyObject* get_origin(Tango::DevError &self)
+    { return from_char_to_str(self.origin); }
+
+    static inline void set_origin(Tango::DevError &self, PyObject *str)
+    { PyDevError::from_str_to_char(str, self.origin); }
 };
 
 void export_dev_error()
 {
     bopy::class_<Tango::DevError>("DevError")
-        .add_property("reason", &PyDevError::get_reason)
-        .def_readonly("severity", &Tango::DevError::severity)
-        .add_property("desc", &PyDevError::get_desc)
-        .add_property("origin", &PyDevError::get_origin)
+        .enable_pickling()
+        .add_property("reason", &PyDevError::get_reason, &PyDevError::set_reason)
+        .def_readwrite("severity", &Tango::DevError::severity)
+        .add_property("desc", &PyDevError::get_desc, &PyDevError::set_desc)
+        .add_property("origin", &PyDevError::get_origin, &PyDevError::set_origin)
     ;
 }
diff --git a/src/boost/cpp/device_attribute.cpp b/src/boost/cpp/device_attribute.cpp
index c61ff74..b7a3b61 100644
--- a/src/boost/cpp/device_attribute.cpp
+++ b/src/boost/cpp/device_attribute.cpp
@@ -1,25 +1,13 @@
-/*******************************************************************************
-
-   This file is part of PyTango, a python binding for Tango
-
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 #include "precompiled_header.hpp"
 #include "device_attribute.h"
@@ -624,7 +612,8 @@ namespace PyDeviceAttribute
         if (isImage) {
             for(CORBA::ULong y = 0; y < dim_y; ++y) {
                 object py_sub = py_value[y];
-                if (len(py_sub) != dim_x)
+                CORBA::ULong len_py_sub = static_cast<CORBA::ULong>(boost::python::len(py_sub));
+                if (len_py_sub != dim_x)
                     raise_(PyExc_TypeError, non_valid_image);
                 for(CORBA::ULong x = 0; x < dim_x; ++x) {
                     python_tangocpp<tangoTypeConst>::to_cpp(py_sub[x], buffer[x + y*dim_x]);
diff --git a/src/boost/cpp/device_attribute.h b/src/boost/cpp/device_attribute.h
index 83a95ca..23828ee 100644
--- a/src/boost/cpp/device_attribute.h
+++ b/src/boost/cpp/device_attribute.h
@@ -1,25 +1,13 @@
-/*******************************************************************************
-
-   This file is part of PyTango, a python binding for Tango
-
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 #pragma once
 
@@ -41,7 +29,7 @@ namespace PyDeviceAttribute {
     typedef unique_pointer<std::vector<Tango::DeviceAttribute> > AutoDevAttrVector;
 /// @}
     
-    template<long tangoTypeConst>
+    template<long tangoTypeConst> static
     void _update_array_values_as_tuples(Tango::DeviceAttribute &self, bool isImage, boost::python::object py_value);
 
     /// Set the value of a DeviceAttribute from python (useful for write*)
diff --git a/src/boost/cpp/device_attribute_config.cpp b/src/boost/cpp/device_attribute_config.cpp
index 9ad336c..f7d7d0d 100644
--- a/src/boost/cpp/device_attribute_config.cpp
+++ b/src/boost/cpp/device_attribute_config.cpp
@@ -1,35 +1,25 @@
-/*******************************************************************************
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
 
-   This file is part of PyTango, a python binding for Tango
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
 
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 #include "precompiled_header.hpp"
-#include <tango.h>
-
-using namespace boost::python;
+#include "pytgutils.h"
 
 void export_device_attribute_config()
 {
-    class_<Tango::DeviceAttributeConfig>("DeviceAttributeConfig")
-        .def(init<const Tango::DeviceAttributeConfig&>())
+    bopy::class_<Tango::DeviceAttributeConfig>("DeviceAttributeConfig")
+        .def(bopy::init<const Tango::DeviceAttributeConfig&>())
+
+        .enable_pickling()
+//        .def_pickle(PyDeviceAttributeConfig::PickleSuite())
+
         .def_readwrite("name", &Tango::DeviceAttributeConfig::name)
         .def_readwrite("writable", &Tango::DeviceAttributeConfig::writable)
         .def_readwrite("data_format", &Tango::DeviceAttributeConfig::data_format)
@@ -38,8 +28,10 @@ void export_device_attribute_config()
         .def_readwrite("max_dim_y", &Tango::DeviceAttributeConfig::max_dim_y)
         .def_readwrite("description", &Tango::DeviceAttributeConfig::description)
         //.def_readwrite("label", &Tango::DeviceAttributeConfig::label)
-        .add_property("label", make_getter(&Tango::DeviceAttributeConfig::label, return_value_policy<return_by_value>()),
-                               make_setter(&Tango::DeviceAttributeConfig::label, return_value_policy<return_by_value>()))
+        .add_property("label", bopy::make_getter(&Tango::DeviceAttributeConfig::label,
+                                                 bopy::return_value_policy<bopy::return_by_value>()),
+                               bopy::make_setter(&Tango::DeviceAttributeConfig::label,
+                                                 bopy::return_value_policy<bopy::return_by_value>()))
         .def_readwrite("unit", &Tango::DeviceAttributeConfig::unit)
         .def_readwrite("standard_unit", &Tango::DeviceAttributeConfig::standard_unit)
         .def_readwrite("display_unit", &Tango::DeviceAttributeConfig::display_unit)
diff --git a/src/boost/cpp/device_attribute_history.cpp b/src/boost/cpp/device_attribute_history.cpp
index a86c9ef..16c01bb 100644
--- a/src/boost/cpp/device_attribute_history.cpp
+++ b/src/boost/cpp/device_attribute_history.cpp
@@ -1,25 +1,13 @@
-/*******************************************************************************
-
-   This file is part of PyTango, a python binding for Tango
-
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 #include "precompiled_header.hpp"
 #include <tango.h>
diff --git a/src/boost/cpp/device_attribute_numpy.hpp b/src/boost/cpp/device_attribute_numpy.hpp
index 9932620..6ccd9e3 100644
--- a/src/boost/cpp/device_attribute_numpy.hpp
+++ b/src/boost/cpp/device_attribute_numpy.hpp
@@ -1,25 +1,13 @@
-/*******************************************************************************
-
-   This file is part of PyTango, a python binding for Tango
-
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 
 // This header file is just some template functions moved apart from
@@ -239,16 +227,18 @@ namespace PyDeviceAttribute {
             // x and y position it corresponded! Yes, 'iter' has a coordinates
             // field, but it was always [0,0], never updated!!
             npy_intp coordinates[2];
-            Py_ssize_t &x = coordinates[1];
-            Py_ssize_t &y = coordinates[0];
-            for (y=0; y < dim_y; ++y) {
-                for (x=0; x < dim_x; ++x) {
+            npy_intp &x = coordinates[1];
+            npy_intp &y = coordinates[0];
+            npy_intp ndim_x = static_cast<npy_intp>(dim_x);
+            npy_intp ndim_y = static_cast<npy_intp>(dim_y);
+            for (y=0; y < ndim_y; ++y) {
+                for (x=0; x < ndim_x; ++x) {
                     PyArray_ITER_GOTO(iter, coordinates);
 
                     PyObject* dataObj = PyArray_GETITEM(array, iter->dataptr);
                     const object py_data = object( handle<>( dataObj ) );
 
-                    buffer[y*dim_x + x] = extract<TangoScalarType>(py_data);
+                    buffer[y*ndim_x + x] = extract<TangoScalarType>(py_data);
                 }
             }
         } else {
diff --git a/src/boost/cpp/device_data.cpp b/src/boost/cpp/device_data.cpp
index 4d0a0bb..42eef88 100644
--- a/src/boost/cpp/device_data.cpp
+++ b/src/boost/cpp/device_data.cpp
@@ -1,25 +1,13 @@
-/*******************************************************************************
-
-   This file is part of PyTango, a python binding for Tango
-
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 #include "precompiled_header.hpp"
 #include "pytgutils.h"
@@ -45,9 +33,9 @@ namespace PyDeviceData {
         void insert_scalar(Tango::DeviceData &self, object py_value)
         {
             typedef typename TANGO_const2type(tangoTypeConst) TangoScalarType;
-            TangoScalarType val;
-            val = boost::python::extract<TangoScalarType>(py_value);
-            self << val;
+            TangoScalarType value;
+	    from_py<tangoTypeConst>::convert(py_value.ptr(), value);
+            self << value;
         }
         template <>
         void insert_scalar<Tango::DEV_ENCODED>(Tango::DeviceData &self, object py_value)
@@ -146,6 +134,7 @@ namespace PyDeviceData {
                     return to_py_numpy<tangoArrayTypeConst>(tmp_ptr, py_self);
 #                 endif
                 case PyTango::ExtractAsList:
+                case PyTango::ExtractAsPyTango3:
                     return to_py_list(tmp_ptr);
                 case PyTango::ExtractAsTuple:
                     return to_py_tuple(tmp_ptr);
diff --git a/src/boost/cpp/device_data_history.cpp b/src/boost/cpp/device_data_history.cpp
index 85e9828..cf37f29 100644
--- a/src/boost/cpp/device_data_history.cpp
+++ b/src/boost/cpp/device_data_history.cpp
@@ -1,25 +1,13 @@
-/*******************************************************************************
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
 
-   This file is part of PyTango, a python binding for Tango
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
 
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 #include "precompiled_header.hpp"
 #include <tango.h>
diff --git a/src/boost/cpp/device_info.cpp b/src/boost/cpp/device_info.cpp
index 2d62892..d2fd32f 100644
--- a/src/boost/cpp/device_info.cpp
+++ b/src/boost/cpp/device_info.cpp
@@ -1,25 +1,13 @@
-/*******************************************************************************
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
 
-   This file is part of PyTango, a python binding for Tango
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
 
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 #include "precompiled_header.hpp"
 #include <tango.h>
diff --git a/src/boost/cpp/device_proxy.cpp b/src/boost/cpp/device_proxy.cpp
index ab94662..f99838c 100644
--- a/src/boost/cpp/device_proxy.cpp
+++ b/src/boost/cpp/device_proxy.cpp
@@ -1,25 +1,13 @@
-/*******************************************************************************
-
-   This file is part of PyTango, a python binding for Tango
-
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 #include "precompiled_header.hpp"
 #include "device_attribute.h"
@@ -424,10 +412,10 @@ void export_device_proxy()
         .def("get_device_db", &Tango::DeviceProxy::get_device_db,
             bopy::return_value_policy<bopy::reference_existing_object>())
 
-        .def("status", &PyDeviceProxy::status,
+        .def("_status", &PyDeviceProxy::status,
             ( arg_("self") ) )
 
-        .def("state", &PyDeviceProxy::state,
+        .def("_state", &PyDeviceProxy::state,
             ( arg_("self") ) )
 
         .def("adm_name", &Tango::DeviceProxy::adm_name,
@@ -442,7 +430,10 @@ void export_device_proxy()
         .def("alias", &Tango::DeviceProxy::alias,
             ( arg_("self") ) )
 
-        .def("ping", &PyDeviceProxy::ping,
+        .def("get_tango_lib_version", &Tango::DeviceProxy::get_tango_lib_version,
+            ( arg_("self") ) )        
+
+        .def("_ping", &PyDeviceProxy::ping,
             ( arg_("self") ) )
             
 
@@ -550,21 +541,21 @@ void export_device_proxy()
             &PyDeviceProxy::read_attribute,
             ( arg_("self"), arg_("attr_name"), arg_("extract_as")=PyTango::ExtractAsNumpy ) )
 
-        .def("read_attributes",
+        .def("_read_attributes",
             &PyDeviceProxy::read_attributes,
             ( arg_("self"), arg_("attr_names"), arg_("extract_as")=PyTango::ExtractAsNumpy ) )
 
-        .def("write_attribute",
+        .def("_write_attribute",
             (void (*)(Tango::DeviceProxy&, const string &, bopy::object ))
             &PyDeviceProxy::write_attribute,
             ( arg_("self"), arg_("attr_name"), arg_("value") ) )
 
-        .def("write_attribute",
+        .def("_write_attribute",
             (void (*)(Tango::DeviceProxy&, const Tango::AttributeInfo &, bopy::object ))
             &PyDeviceProxy::write_attribute,
             ( arg_("self"), arg_("attr_info"), arg_("value") ) )
 
-        .def("write_attributes",
+        .def("_write_attributes",
             &PyDeviceProxy::write_attributes,
             ( arg_("self"), arg_("name_val") ) )
 
diff --git a/src/boost/cpp/enums.cpp b/src/boost/cpp/enums.cpp
index a82832f..4f4fa53 100644
--- a/src/boost/cpp/enums.cpp
+++ b/src/boost/cpp/enums.cpp
@@ -1,25 +1,13 @@
-/*******************************************************************************
-
-   This file is part of PyTango, a python binding for Tango
-
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 #include "precompiled_header.hpp"
 #include <tango.h>
diff --git a/src/boost/cpp/event_data.cpp b/src/boost/cpp/event_data.cpp
index 834f815..a9f7f49 100644
--- a/src/boost/cpp/event_data.cpp
+++ b/src/boost/cpp/event_data.cpp
@@ -1,25 +1,13 @@
-/*******************************************************************************
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
 
-   This file is part of PyTango, a python binding for Tango
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
 
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 #include "precompiled_header.hpp"
 #include <tango.h>
diff --git a/src/boost/cpp/exception.cpp b/src/boost/cpp/exception.cpp
index ab86894..f6852c7 100644
--- a/src/boost/cpp/exception.cpp
+++ b/src/boost/cpp/exception.cpp
@@ -1,25 +1,13 @@
-/*******************************************************************************
-
-   This file is part of PyTango, a python binding for Tango
-
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 #include "precompiled_header.hpp"
 #include "pytgutils.h"
diff --git a/src/boost/cpp/exception.h b/src/boost/cpp/exception.h
index c2073b3..3fadbd1 100644
--- a/src/boost/cpp/exception.h
+++ b/src/boost/cpp/exception.h
@@ -1,25 +1,13 @@
-/*******************************************************************************
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
 
-   This file is part of PyTango, a python binding for Tango
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
 
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 #pragma once
 
diff --git a/src/boost/cpp/fast_from_py.h b/src/boost/cpp/fast_from_py.h
index 6f4a1bb..4329aae 100644
--- a/src/boost/cpp/fast_from_py.h
+++ b/src/boost/cpp/fast_from_py.h
@@ -1,25 +1,13 @@
-/*******************************************************************************
-
-   This file is part of PyTango, a python binding for Tango
-
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 #pragma once
 
@@ -103,6 +91,7 @@ struct from_py<tangoTypeConst> \
         { \
             cpy_type cpy_value = FN(o); \
             if(PyErr_Occurred()) { \
+	        PyErr_Clear(); \
                 PyErr_SetString(PyExc_TypeError, "Expecting a numeric type, it is not."); \
                 boost::python::throw_error_already_set();  \
             } \
@@ -135,18 +124,20 @@ struct from_py<tangoTypeConst> \
         { \
             cpy_type cpy_value = FN(o); \
             if(PyErr_Occurred()) { \
+	        PyErr_Clear(); \
                 if(PyArray_CheckScalar(o) && \
                 ( PyArray_DescrFromScalar(o) \
                     == PyArray_DescrFromType(TANGO_const2numpy(tangoTypeConst)))) \
                 { \
                     PyArray_ScalarAsCtype(o, reinterpret_cast<void*>(&tg)); \
                     return; \
-                } else \
+                } else { \
                     PyErr_SetString(PyExc_TypeError, "Expecting a numeric type," \
                         " but it is not. If you use a numpy type instead of" \
                         " python core types, then it must exactly match (ex:" \
                         " numpy.int32 for PyTango.DevLong)"); \
                     boost::python::throw_error_already_set();  \
+		} \
             } \
             if (TangoScalarTypeLimits::is_integer) { \
                 if (cpy_value > (cpy_type)TangoScalarTypeLimits::max()) { \
@@ -163,6 +154,20 @@ struct from_py<tangoTypeConst> \
     };
 #endif // !DISABLE_PYTANGO_NUMPY
 
+
+/* Allow for downcast */
+
+inline unsigned PY_LONG_LONG PyLong_AsUnsignedLongLong_2(PyObject *pylong)
+{
+  unsigned PY_LONG_LONG result = PyLong_AsUnsignedLongLong(pylong);
+  if(PyErr_Occurred())
+  {
+    PyErr_Clear();
+    result = PyLong_AsUnsignedLong(pylong);
+  }
+  return result;
+}
+
 DEFINE_FAST_TANGO_FROMPY_NUM(Tango::DEV_BOOLEAN, long, PyLong_AsLong)
 DEFINE_FAST_TANGO_FROMPY_NUM(Tango::DEV_UCHAR, unsigned long, PyLong_AsUnsignedLong)
 DEFINE_FAST_TANGO_FROMPY_NUM(Tango::DEV_SHORT, long, PyLong_AsLong)
@@ -172,7 +177,7 @@ DEFINE_FAST_TANGO_FROMPY_NUM(Tango::DEV_ULONG, unsigned long, PyLong_AsUnsignedL
 DEFINE_FAST_TANGO_FROMPY(Tango::DEV_STATE, PyLong_AsLong)
 
 DEFINE_FAST_TANGO_FROMPY_NUM(Tango::DEV_LONG64, Tango::DevLong64, PyLong_AsLongLong)
-DEFINE_FAST_TANGO_FROMPY_NUM(Tango::DEV_ULONG64, Tango::DevULong64, PyLong_AsUnsignedLongLong)
+DEFINE_FAST_TANGO_FROMPY_NUM(Tango::DEV_ULONG64, Tango::DevULong64, PyLong_AsUnsignedLongLong_2)
 DEFINE_FAST_TANGO_FROMPY_NUM(Tango::DEV_FLOAT, double, PyFloat_AsDouble)
 DEFINE_FAST_TANGO_FROMPY_NUM(Tango::DEV_DOUBLE, double, PyFloat_AsDouble)
 
@@ -202,6 +207,7 @@ struct array_element_from_py<Tango::DEVVAR_CHARARRAY>
     {
         long cpy_value = PyLong_AsLong(o);
         if(PyErr_Occurred()) {
+            PyErr_Clear();
             PyErr_SetString(PyExc_TypeError, "Expecting a numeric type,"
                 " but it is not");
             boost::python::throw_error_already_set(); 
@@ -223,6 +229,7 @@ struct array_element_from_py<Tango::DEVVAR_CHARARRAY>
     {
         long cpy_value = PyLong_AsLong(o);
         if(PyErr_Occurred()) {
+	    PyErr_Clear();
             if(PyArray_CheckScalar(o) &&
             ( PyArray_DescrFromScalar(o)
                 == PyArray_DescrFromType(TANGO_const2scalarnumpy(tangoArrayTypeConst))))
diff --git a/src/boost/cpp/fast_from_py_numpy.hpp b/src/boost/cpp/fast_from_py_numpy.hpp
index cd2e5ae..6fd6cb8 100644
--- a/src/boost/cpp/fast_from_py_numpy.hpp
+++ b/src/boost/cpp/fast_from_py_numpy.hpp
@@ -1,25 +1,13 @@
-/*******************************************************************************
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
 
-   This file is part of PyTango, a python binding for Tango
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
 
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 // This header file is just some template functions moved apart from
 // attribute.cpp, and should only be included there.
diff --git a/src/boost/cpp/from_py.cpp b/src/boost/cpp/from_py.cpp
index 6c91a6f..0ec3c8d 100644
--- a/src/boost/cpp/from_py.cpp
+++ b/src/boost/cpp/from_py.cpp
@@ -1,25 +1,13 @@
-/*******************************************************************************
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
 
-   This file is part of PyTango, a python binding for Tango
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
 
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 #include "precompiled_header.hpp"
 #include "from_py.h"
diff --git a/src/boost/cpp/from_py.h b/src/boost/cpp/from_py.h
index 90a0093..f03bd6b 100644
--- a/src/boost/cpp/from_py.h
+++ b/src/boost/cpp/from_py.h
@@ -1,25 +1,13 @@
-/*******************************************************************************
-
-   This file is part of PyTango, a python binding for Tango
-
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 #pragma once
 
diff --git a/src/boost/cpp/group.cpp b/src/boost/cpp/group.cpp
index bbf0cdf..67ab686 100644
--- a/src/boost/cpp/group.cpp
+++ b/src/boost/cpp/group.cpp
@@ -1,25 +1,13 @@
-/*******************************************************************************
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
 
-   This file is part of PyTango, a python binding for Tango
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
 
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 #include "precompiled_header.hpp"
 #include "pytgutils.h"
diff --git a/src/boost/cpp/group_reply.cpp b/src/boost/cpp/group_reply.cpp
index 49d6684..4685fe5 100644
--- a/src/boost/cpp/group_reply.cpp
+++ b/src/boost/cpp/group_reply.cpp
@@ -1,25 +1,13 @@
-/*******************************************************************************
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
 
-   This file is part of PyTango, a python binding for Tango
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
 
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 #include "precompiled_header.hpp"
 #include "pytgutils.h"
diff --git a/src/boost/cpp/group_reply_list.cpp b/src/boost/cpp/group_reply_list.cpp
index 63d2da5..6b80999 100644
--- a/src/boost/cpp/group_reply_list.cpp
+++ b/src/boost/cpp/group_reply_list.cpp
@@ -1,25 +1,13 @@
-/*******************************************************************************
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
 
-   This file is part of PyTango, a python binding for Tango
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
 
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 #include "precompiled_header.hpp"
 #include "pytgutils.h"
diff --git a/src/boost/cpp/locker_info.cpp b/src/boost/cpp/locker_info.cpp
index 1315bda..3509cab 100644
--- a/src/boost/cpp/locker_info.cpp
+++ b/src/boost/cpp/locker_info.cpp
@@ -1,25 +1,13 @@
-/*******************************************************************************
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
 
-   This file is part of PyTango, a python binding for Tango
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
 
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 #include "precompiled_header.hpp"
 #include <tango.h>
diff --git a/src/boost/cpp/locking_thread.cpp b/src/boost/cpp/locking_thread.cpp
index aced19b..8ef8c9c 100644
--- a/src/boost/cpp/locking_thread.cpp
+++ b/src/boost/cpp/locking_thread.cpp
@@ -1,25 +1,13 @@
-/*******************************************************************************
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
 
-   This file is part of PyTango, a python binding for Tango
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
 
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 #include "precompiled_header.hpp"
 #include <tango.h>
diff --git a/src/boost/cpp/periodic_event_info.cpp b/src/boost/cpp/periodic_event_info.cpp
index 15b4c69..a44cccb 100644
--- a/src/boost/cpp/periodic_event_info.cpp
+++ b/src/boost/cpp/periodic_event_info.cpp
@@ -1,25 +1,13 @@
-/*******************************************************************************
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
 
-   This file is part of PyTango, a python binding for Tango
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
 
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 #include "precompiled_header.hpp"
 #include <tango.h>
@@ -29,6 +17,7 @@ using namespace boost::python;
 void export_periodic_event_info()
 {
     class_<Tango::PeriodicEventInfo>("PeriodicEventInfo")
+        .enable_pickling()
         .def_readwrite("period", &Tango::PeriodicEventInfo::period)
         .def_readwrite("extensions", &Tango::PeriodicEventInfo::extensions)
     ;
diff --git a/src/boost/cpp/poll_device.cpp b/src/boost/cpp/poll_device.cpp
index 8c96fa2..f878670 100644
--- a/src/boost/cpp/poll_device.cpp
+++ b/src/boost/cpp/poll_device.cpp
@@ -1,25 +1,13 @@
-/*******************************************************************************
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
 
-   This file is part of PyTango, a python binding for Tango
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
 
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 #include "precompiled_header.hpp"
 #include <tango.h>
diff --git a/src/boost/cpp/precompiled_header.cpp b/src/boost/cpp/precompiled_header.cpp
index dfb1220..1b7634d 100644
--- a/src/boost/cpp/precompiled_header.cpp
+++ b/src/boost/cpp/precompiled_header.cpp
@@ -1,24 +1,12 @@
-/*******************************************************************************
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
 
-   This file is part of PyTango, a python binding for Tango
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
 
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 #include "precompiled_header.hpp"
\ No newline at end of file
diff --git a/src/boost/cpp/precompiled_header.hpp b/src/boost/cpp/precompiled_header.hpp
index 854742f..b484add 100644
--- a/src/boost/cpp/precompiled_header.hpp
+++ b/src/boost/cpp/precompiled_header.hpp
@@ -1,31 +1,20 @@
-/*******************************************************************************
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
 
-   This file is part of PyTango, a python binding for Tango
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
 
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 // These files are really basic, used everywere within the project
 // but they take a while (seconds!) to process.
 // We don't want to waste those seconds for each cpp file, so we
 // use this precompiled header.
 
+//#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION
 
 #include <boost/python.hpp>
 #include <boost/version.hpp>
diff --git a/src/boost/cpp/pytango.cpp b/src/boost/cpp/pytango.cpp
index ad80c1d..967b0cf 100644
--- a/src/boost/cpp/pytango.cpp
+++ b/src/boost/cpp/pytango.cpp
@@ -1,25 +1,13 @@
-/*******************************************************************************
-
-   This file is part of PyTango, a python binding for Tango
-
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 #include "precompiled_header.hpp"
 
diff --git a/src/boost/cpp/pytgutils.cpp b/src/boost/cpp/pytgutils.cpp
index 66910eb..cb9b553 100644
--- a/src/boost/cpp/pytgutils.cpp
+++ b/src/boost/cpp/pytgutils.cpp
@@ -1,25 +1,13 @@
-/*******************************************************************************
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
 
-   This file is part of PyTango, a python binding for Tango
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
 
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 #include "precompiled_header.hpp"
 #include "defs.h"
diff --git a/src/boost/cpp/pytgutils.h b/src/boost/cpp/pytgutils.h
index 896df23..75b7cbe 100644
--- a/src/boost/cpp/pytgutils.h
+++ b/src/boost/cpp/pytgutils.h
@@ -1,25 +1,13 @@
-/*******************************************************************************
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
 
-   This file is part of PyTango, a python binding for Tango
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
 
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 #pragma once
 
diff --git a/src/boost/cpp/pyutils.cpp b/src/boost/cpp/pyutils.cpp
index d112e53..3fd6baf 100644
--- a/src/boost/cpp/pyutils.cpp
+++ b/src/boost/cpp/pyutils.cpp
@@ -1,25 +1,13 @@
-/*******************************************************************************
-
-   This file is part of PyTango, a python binding for Tango
-
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 #include "precompiled_header.hpp"
 #include "defs.h"
diff --git a/src/boost/cpp/pyutils.h b/src/boost/cpp/pyutils.h
index 21e090f..23295dd 100644
--- a/src/boost/cpp/pyutils.h
+++ b/src/boost/cpp/pyutils.h
@@ -1,25 +1,13 @@
-/*******************************************************************************
-
-   This file is part of PyTango, a python binding for Tango
-
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 #pragma once
 
diff --git a/src/boost/cpp/server/attr.cpp b/src/boost/cpp/server/attr.cpp
index 8a68e34..0933262 100644
--- a/src/boost/cpp/server/attr.cpp
+++ b/src/boost/cpp/server/attr.cpp
@@ -1,25 +1,13 @@
-/*******************************************************************************
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
 
-   This file is part of PyTango, a python binding for Tango
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
 
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 #include "precompiled_header.hpp"
 #include "server/attr.h"
diff --git a/src/boost/cpp/server/attr.h b/src/boost/cpp/server/attr.h
index 92a52bb..ab3f6c8 100644
--- a/src/boost/cpp/server/attr.h
+++ b/src/boost/cpp/server/attr.h
@@ -1,25 +1,13 @@
-/*******************************************************************************
-
-   This file is part of PyTango, a python binding for Tango
-
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 #ifndef _ATTR_H_
 #define _ATTR_H_
diff --git a/src/boost/cpp/server/attribute.cpp b/src/boost/cpp/server/attribute.cpp
index e74eb86..0e88137 100644
--- a/src/boost/cpp/server/attribute.cpp
+++ b/src/boost/cpp/server/attribute.cpp
@@ -1,25 +1,13 @@
-/*******************************************************************************
-
-   This file is part of PyTango, a python binding for Tango
-
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 #include "precompiled_header.hpp"
 #include "defs.h"
@@ -94,7 +82,7 @@ namespace PyAttribute
         */
         unique_pointer<TangoScalarType> cpp_val(new TangoScalarType);
         
-        from_py<tangoTypeConst>::convert(value, *cpp_val);
+        from_py<tangoTypeConst>::convert(value.ptr(), *cpp_val);
         att.set_value(cpp_val.release(), 1, 0, true);
     }
 
diff --git a/src/boost/cpp/server/attribute.h b/src/boost/cpp/server/attribute.h
index 24e3bce..7c9ef38 100644
--- a/src/boost/cpp/server/attribute.h
+++ b/src/boost/cpp/server/attribute.h
@@ -1,25 +1,13 @@
-/*******************************************************************************
-
-   This file is part of PyTango, a python binding for Tango
-
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 #ifndef _ATTRIBUTE_H_
 #define _ATTRIBUTE_H_
diff --git a/src/boost/cpp/server/command.cpp b/src/boost/cpp/server/command.cpp
index 94845d2..99e8134 100644
--- a/src/boost/cpp/server/command.cpp
+++ b/src/boost/cpp/server/command.cpp
@@ -1,25 +1,13 @@
-/*******************************************************************************
-
-   This file is part of PyTango, a python binding for Tango
-
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 #include "precompiled_header.hpp"
 #include "exception.h"
diff --git a/src/boost/cpp/server/command.h b/src/boost/cpp/server/command.h
index e92a590..1630c5f 100644
--- a/src/boost/cpp/server/command.h
+++ b/src/boost/cpp/server/command.h
@@ -1,25 +1,13 @@
-/*******************************************************************************
-
-   This file is part of PyTango, a python binding for Tango
-
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 #ifndef _COMMAND_H_
 #define _COMMAND_H_
diff --git a/src/boost/cpp/server/device_class.cpp b/src/boost/cpp/server/device_class.cpp
index d5b8033..63e4324 100644
--- a/src/boost/cpp/server/device_class.cpp
+++ b/src/boost/cpp/server/device_class.cpp
@@ -1,25 +1,13 @@
-/*******************************************************************************
-
-   This file is part of PyTango, a python binding for Tango
-
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 #include "precompiled_header.hpp"
 #include "pytgutils.h"
diff --git a/src/boost/cpp/server/device_class.h b/src/boost/cpp/server/device_class.h
index c03a473..8f9ea43 100644
--- a/src/boost/cpp/server/device_class.h
+++ b/src/boost/cpp/server/device_class.h
@@ -1,25 +1,13 @@
-/*******************************************************************************
-
-   This file is part of PyTango, a python binding for Tango
-
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 #ifndef _DEVICE_CLASS_H_
 #define _DEVICE_CLASS_H_
diff --git a/src/boost/cpp/server/device_impl.cpp b/src/boost/cpp/server/device_impl.cpp
index 16bd950..a5472e7 100644
--- a/src/boost/cpp/server/device_impl.cpp
+++ b/src/boost/cpp/server/device_impl.cpp
@@ -1,25 +1,13 @@
-/*******************************************************************************
-
-   This file is part of PyTango, a python binding for Tango
-
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 #include "precompiled_header.hpp"
 #include "defs.h"
@@ -595,27 +583,42 @@ namespace PyDeviceImpl
 
     inline void debug(Tango::DeviceImpl &self, const string &msg)
     {
-        self.get_logger()->debug(msg);
+        if (self.get_logger()->is_debug_enabled()) {
+	    self.get_logger()->debug_stream() 
+	      << log4tango::LogInitiator::_begin_log << msg;
+	}
     }
 
     inline void info(Tango::DeviceImpl &self, const string &msg)
     {
-        self.get_logger()->info(msg);
+        if (self.get_logger()->is_info_enabled()) {
+	    self.get_logger()->info_stream() 
+	      << log4tango::LogInitiator::_begin_log << msg;
+	}
     }
 
     inline void warn(Tango::DeviceImpl &self, const string &msg)
     {
-        self.get_logger()->warn(msg);
+        if (self.get_logger()->is_warn_enabled()) {
+	    self.get_logger()->warn_stream() 
+	      << log4tango::LogInitiator::_begin_log << msg;
+	}
     }
 
     inline void error(Tango::DeviceImpl &self, const string &msg)
     {
-        self.get_logger()->error(msg);
+        if (self.get_logger()->is_error_enabled()) {
+	    self.get_logger()->error_stream() 
+	      << log4tango::LogInitiator::_begin_log << msg;
+	}
     }
 
     inline void fatal(Tango::DeviceImpl &self, const string &msg)
     {
-        self.get_logger()->fatal(msg);
+        if (self.get_logger()->is_fatal_enabled()) {
+	    self.get_logger()->fatal_stream() 
+	      << log4tango::LogInitiator::_begin_log << msg;
+	}
     }
     
     PyObject* get_attribute_config(Tango::DeviceImpl &self, object &py_attr_name_seq)
diff --git a/src/boost/cpp/server/device_impl.h b/src/boost/cpp/server/device_impl.h
index 6ac340d..b998d80 100644
--- a/src/boost/cpp/server/device_impl.h
+++ b/src/boost/cpp/server/device_impl.h
@@ -1,25 +1,13 @@
-/*******************************************************************************
-
-   This file is part of PyTango, a python binding for Tango
-
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 #ifndef _DEVICE_IMPL_H
 #define _DEVICE_IMPL_H
diff --git a/src/boost/cpp/server/dserver.cpp b/src/boost/cpp/server/dserver.cpp
index d8ed68a..904ba61 100644
--- a/src/boost/cpp/server/dserver.cpp
+++ b/src/boost/cpp/server/dserver.cpp
@@ -1,25 +1,13 @@
-/*******************************************************************************
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
 
-   This file is part of PyTango, a python binding for Tango
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
 
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 #include "precompiled_header.hpp"
 #include <tango.h>
@@ -139,6 +127,12 @@ namespace PyDServer
         delete ret;
         return py_ret;
     }
+    
+    void duplicate_d_var(Tango::DServer &self)
+    {
+        Tango::Device_var d = self._this();
+        self.set_d_var(Tango::Device::_duplicate(d));
+    }
 }
 
 BOOST_PYTHON_FUNCTION_OVERLOADS(add_obj_polling_overload, PyDServer::add_obj_polling, 2, 4)
@@ -198,6 +192,7 @@ void export_dserver()
         .def("get_poll_th_pool_size", &Tango::DServer::get_poll_th_pool_size)
         .def("get_opt_pool_usage", &Tango::DServer::get_opt_pool_usage)
         .def("get_poll_th_conf", &Tango::DServer::get_poll_th_conf)
+        .def("duplicate_d_var", &PyDServer::duplicate_d_var)
     ;
     
 }
diff --git a/src/boost/cpp/server/encoded_attribute.cpp b/src/boost/cpp/server/encoded_attribute.cpp
index bafa5d0..8bbbc36 100644
--- a/src/boost/cpp/server/encoded_attribute.cpp
+++ b/src/boost/cpp/server/encoded_attribute.cpp
@@ -1,25 +1,13 @@
-/*******************************************************************************
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
 
-   This file is part of PyTango, a python binding for Tango
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
 
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 #include "precompiled_header.hpp"
 #include <tango.h>
@@ -844,6 +832,7 @@ namespace PyEncodedAttribute
                 delete [] buffer;
                 break;
             }
+            case PyTango::ExtractAsPyTango3:
             case PyTango::ExtractAsList:
             {
                 ret = PyList_New(height);
@@ -981,6 +970,7 @@ namespace PyEncodedAttribute
                 delete [] buffer;
                 break;
             }
+            case PyTango::ExtractAsPyTango3:
             case PyTango::ExtractAsList:
             {
                 ret = PyList_New(height);
@@ -1138,6 +1128,7 @@ namespace PyEncodedAttribute
                 delete [] buffer;
                 break;
             }
+            case PyTango::ExtractAsPyTango3:
             case PyTango::ExtractAsList:
             {
                 ret = PyList_New(height);
diff --git a/src/boost/cpp/server/log4tango.cpp b/src/boost/cpp/server/log4tango.cpp
index eb29b87..d724ab0 100644
--- a/src/boost/cpp/server/log4tango.cpp
+++ b/src/boost/cpp/server/log4tango.cpp
@@ -1,25 +1,13 @@
-/*******************************************************************************
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
 
-   This file is part of PyTango, a python binding for Tango
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
 
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 #include "precompiled_header.hpp"
 #include "defs.h"
diff --git a/src/boost/cpp/server/multi_attribute.cpp b/src/boost/cpp/server/multi_attribute.cpp
index b3d5216..6d2f249 100644
--- a/src/boost/cpp/server/multi_attribute.cpp
+++ b/src/boost/cpp/server/multi_attribute.cpp
@@ -1,25 +1,13 @@
-/*******************************************************************************
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
 
-   This file is part of PyTango, a python binding for Tango
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
 
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 #include "precompiled_header.hpp"
 #include <tango.h>
diff --git a/src/boost/cpp/server/multi_class_attribute.cpp b/src/boost/cpp/server/multi_class_attribute.cpp
index 218363d..7dc2f31 100644
--- a/src/boost/cpp/server/multi_class_attribute.cpp
+++ b/src/boost/cpp/server/multi_class_attribute.cpp
@@ -1,25 +1,13 @@
-/*******************************************************************************
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
 
-   This file is part of PyTango, a python binding for Tango
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
 
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 #include "precompiled_header.hpp"
 #include "pytgutils.h"
diff --git a/src/boost/cpp/server/subdev.cpp b/src/boost/cpp/server/subdev.cpp
index 6fdec99..e72e4bc 100644
--- a/src/boost/cpp/server/subdev.cpp
+++ b/src/boost/cpp/server/subdev.cpp
@@ -1,25 +1,13 @@
-/*******************************************************************************
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
 
-   This file is part of PyTango, a python binding for Tango
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
 
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 #include "precompiled_header.hpp"
 #include <tango.h>
diff --git a/src/boost/cpp/server/tango_util.cpp b/src/boost/cpp/server/tango_util.cpp
index 506ad42..d6594af 100644
--- a/src/boost/cpp/server/tango_util.cpp
+++ b/src/boost/cpp/server/tango_util.cpp
@@ -1,25 +1,13 @@
-/*******************************************************************************
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
 
-   This file is part of PyTango, a python binding for Tango
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
 
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 #include "precompiled_header.hpp"
 #include "defs.h"
@@ -177,7 +165,7 @@ namespace PyUtil
                                       boost::python::object& py_event_loop)
     {
         PYTANGO_MOD
-        if (py_event_loop.is_none())
+        if (py_event_loop.ptr() == Py_None)
         {
             self.server_set_event_loop(NULL);
             pytango.attr("_server_event_loop") = py_event_loop;
@@ -188,6 +176,32 @@ namespace PyUtil
             self.server_set_event_loop(event_loop);
         }
     }
+    
+    void set_use_db(bool use_db)
+    {
+        Tango::Util::_UseDb = use_db;
+    }
+    
+    boost::python::str get_dserver_ior(Tango::Util& self, Tango::DServer* dserver)
+    {
+        const char *ior = self.get_orb()->object_to_string(dserver->_this());
+        boost::python::str ret = ior;
+        delete [] ior;
+        return ret;
+    }
+
+    boost::python::str get_device_ior(Tango::Util& self, Tango::DeviceImpl* device)
+    {
+        const char *ior = self.get_orb()->object_to_string(device->get_d_var());
+        boost::python::str ret = ior;
+        delete [] ior;
+        return ret;
+    }
+    
+    void orb_run(Tango::Util& self)
+    {
+        self.get_orb()->run();
+    }
 }
 
 void init_python()
@@ -202,6 +216,11 @@ BOOST_PYTHON_FUNCTION_OVERLOADS (server_init_overload, PyUtil::server_init, 1, 2
 
 void export_util()
 {
+    class_<Tango::Interceptors>("Interceptors")
+        .def("create_thread", &Tango::Interceptors::create_thread)
+        .def("delete_thread", &Tango::Interceptors::delete_thread)
+    ;
+    
     class_<Tango::Util, boost::noncopyable>("_Util", no_init)
         .def("init", PyUtil::init,
             return_value_policy<reference_existing_object>())
@@ -259,9 +278,15 @@ void export_util()
         .def("get_device_by_name", &PyUtil::get_device_by_name)
         .def("get_device_list", &PyUtil::get_device_list)
         .def("server_set_event_loop", &PyUtil::server_set_event_loop)
+        .def("set_interceptors", &Tango::Util::set_interceptors)
         .def_readonly("_UseDb", &Tango::Util::_UseDb)
         .def_readonly("_FileDb", &Tango::Util::_FileDb)
         .def("init_python", init_python)
         .staticmethod("init_python")
+        .def("set_use_db", &PyUtil::set_use_db)
+        .staticmethod("set_use_db")
+        .def("get_dserver_ior", &PyUtil::get_dserver_ior)
+        .def("get_device_ior", &PyUtil::get_device_ior)
+        .def("orb_run", &PyUtil::orb_run)
     ;
 }
diff --git a/src/boost/cpp/server/user_default_attr_prop.cpp b/src/boost/cpp/server/user_default_attr_prop.cpp
index b0b49ef..6c8aabd 100644
--- a/src/boost/cpp/server/user_default_attr_prop.cpp
+++ b/src/boost/cpp/server/user_default_attr_prop.cpp
@@ -1,25 +1,13 @@
-/*******************************************************************************
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
 
-   This file is part of PyTango, a python binding for Tango
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
 
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 #include "precompiled_header.hpp"
 #include <tango.h>
diff --git a/src/boost/cpp/server/wattribute.cpp b/src/boost/cpp/server/wattribute.cpp
index e12f4be..5d63198 100644
--- a/src/boost/cpp/server/wattribute.cpp
+++ b/src/boost/cpp/server/wattribute.cpp
@@ -1,25 +1,13 @@
-/*******************************************************************************
-
-   This file is part of PyTango, a python binding for Tango
-
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 #include "precompiled_header.hpp"
 #include "defs.h"
@@ -243,13 +231,16 @@ namespace PyWAttribute
                                          boost::python::object &value)
     {
         typedef typename TANGO_const2type(tangoTypeConst) TangoScalarType;
-        extract<TangoScalarType> val(value.ptr());
+        /*extract<TangoScalarType> val(value.ptr());
         if (!val.check())
         {
             throw_wrong_python_data_type(att.get_name(), "set_write_value()");
         }
-        TangoScalarType cpp_val = val;
-        att.set_write_value(cpp_val);
+        TangoScalarType cpp_value = val;
+	*/
+	TangoScalarType cpp_value;
+	from_py<tangoTypeConst>::convert(value.ptr(), cpp_value);
+        att.set_write_value(cpp_value);
     }
 
     template<>
@@ -436,6 +427,50 @@ namespace PyWAttribute
 /// @name get_write_value
 /// @{ 
 
+    //
+    // PyTango 3 compatibility
+    //
+
+    template<long tangoTypeConst>
+    void __get_write_value_pytango3(Tango::WAttribute &att, boost::python::list &seq)
+    {
+        typedef typename TANGO_const2type(tangoTypeConst) TangoScalarType;
+
+        const TangoScalarType *ptr;
+
+        long length = att.get_write_value_length();
+
+        att.get_write_value(ptr);
+
+        for (long l = 0; l < length; ++l)
+        {
+            seq.append(ptr[l]);
+        }
+    }
+
+    template<>
+    void __get_write_value_pytango3<Tango::DEV_STRING>(Tango::WAttribute &att,
+                                              boost::python::list &seq)
+    {
+        const Tango::ConstDevString *ptr;
+
+        long length = att.get_write_value_length();
+
+        att.get_write_value(ptr);
+
+        for (long l = 0; l < length; ++l)
+        {
+            seq.append(ptr[l]);
+        }
+    }
+
+    inline void get_write_value_pytango3(Tango::WAttribute &att,
+                                boost::python::list &value)
+    {
+        long type = att.get_data_type();
+        TANGO_CALL_ON_ATTRIBUTE_DATA_TYPE_ID(type, __get_write_value_pytango3, att, value);
+    }
+
     template<long tangoTypeConst>
     void __get_write_value_scalar(Tango::WAttribute &att, boost::python::object* obj)
     {
@@ -455,6 +490,32 @@ namespace PyWAttribute
     }
 
     template<long tangoTypeConst>
+    void __get_write_value_array_pytango3(Tango::WAttribute &att, boost::python::object* obj)
+    {
+        typedef typename TANGO_const2type(tangoTypeConst) TangoScalarType;
+
+        const TangoScalarType * buffer;
+        att.get_write_value(buffer);
+        size_t length = att.get_write_value_length();
+        
+        boost::python::list o;
+        for (size_t n = 0; n < length; ++n)
+            o.append(buffer[n]);
+        *obj = o;
+    }
+
+    template<>
+    void __get_write_value_array_pytango3<Tango::DEV_STRING>(Tango::WAttribute &att, boost::python::object* obj)
+    {
+        const Tango::ConstDevString *ptr;
+        long length = att.get_write_value_length();
+        att.get_write_value(ptr);
+        boost::python::list o;
+        for (long l = 0; l < length; ++l)
+            o.append(ptr[l]);
+    }
+
+    template<long tangoTypeConst>
     void __get_write_value_array_lists(Tango::WAttribute &att, boost::python::object* obj)
     {
         typedef typename TANGO_const2type(tangoTypeConst) TangoScalarType;
@@ -534,6 +595,11 @@ namespace PyWAttribute
             TANGO_CALL_ON_ATTRIBUTE_DATA_TYPE_ID(type, __get_write_value_scalar, att, &value);
         } else {
             switch (extract_as) {
+                case PyTango::ExtractAsPyTango3: {
+                    TANGO_CALL_ON_ATTRIBUTE_DATA_TYPE_ID(type,
+                        __get_write_value_array_pytango3, att, &value);
+                    break;
+                }
                 case PyTango::ExtractAsNumpy: {
 #               ifndef DISABLE_PYTANGO_NUMPY
                     TANGO_CALL_ON_ATTRIBUTE_DATA_TYPE_ID(type,
@@ -587,6 +653,13 @@ void export_wattribute()
         .def("set_write_value",
             (void (*) (Tango::WAttribute &, boost::python::object &, long, long))
             &PyWAttribute::set_write_value)
+
+        // old style get_write_value
+        .def("get_write_value",
+            &PyWAttribute::get_write_value_pytango3,
+            ( arg_("self"), arg_("empty_list")))
+
+        // new style get_write_value
         .def("get_write_value",
             &PyWAttribute::get_write_value,
             ( arg_("self"), arg_("extract_as")=PyTango::ExtractAsNumpy ))
diff --git a/src/boost/cpp/server/wattribute_numpy.hpp b/src/boost/cpp/server/wattribute_numpy.hpp
index 4ff7d1c..d5c8b11 100644
--- a/src/boost/cpp/server/wattribute_numpy.hpp
+++ b/src/boost/cpp/server/wattribute_numpy.hpp
@@ -1,25 +1,13 @@
-/*******************************************************************************
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
 
-   This file is part of PyTango, a python binding for Tango
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
 
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 // This header file is just some template functions moved apart from
 // wattribute.cpp, and should only be included there.
diff --git a/src/boost/cpp/tango_numpy.h b/src/boost/cpp/tango_numpy.h
index 0d90ebd..56f29e5 100644
--- a/src/boost/cpp/tango_numpy.h
+++ b/src/boost/cpp/tango_numpy.h
@@ -1,25 +1,13 @@
-/*******************************************************************************
-
-   This file is part of PyTango, a python binding for Tango
-
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 #pragma once
 
diff --git a/src/boost/cpp/tgutils.h b/src/boost/cpp/tgutils.h
index 88cd837..a06d2a3 100644
--- a/src/boost/cpp/tgutils.h
+++ b/src/boost/cpp/tgutils.h
@@ -1,25 +1,13 @@
-/*******************************************************************************
-
-   This file is part of PyTango, a python binding for Tango
-
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 #pragma once
 
diff --git a/src/boost/cpp/time_val.cpp b/src/boost/cpp/time_val.cpp
index 7bca3a8..93f6be1 100644
--- a/src/boost/cpp/time_val.cpp
+++ b/src/boost/cpp/time_val.cpp
@@ -1,25 +1,13 @@
-/*******************************************************************************
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
 
-   This file is part of PyTango, a python binding for Tango
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
 
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 #include "precompiled_header.hpp"
 #include <tango.h>
diff --git a/src/boost/cpp/to_py.cpp b/src/boost/cpp/to_py.cpp
index c093e52..3c2600d 100644
--- a/src/boost/cpp/to_py.cpp
+++ b/src/boost/cpp/to_py.cpp
@@ -1,25 +1,13 @@
-/*******************************************************************************
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
 
-   This file is part of PyTango, a python binding for Tango
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
 
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 #include "precompiled_header.hpp"
 #include "defs.h"
diff --git a/src/boost/cpp/to_py.h b/src/boost/cpp/to_py.h
index c394c26..691779c 100644
--- a/src/boost/cpp/to_py.h
+++ b/src/boost/cpp/to_py.h
@@ -1,25 +1,13 @@
-/*******************************************************************************
-
-   This file is part of PyTango, a python binding for Tango
-
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 #pragma once
 
diff --git a/src/boost/cpp/to_py_numpy.hpp b/src/boost/cpp/to_py_numpy.hpp
index eeac9a9..2574d76 100644
--- a/src/boost/cpp/to_py_numpy.hpp
+++ b/src/boost/cpp/to_py_numpy.hpp
@@ -1,25 +1,13 @@
-/*******************************************************************************
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
 
-   This file is part of PyTango, a python binding for Tango
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
 
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 #pragma once
 
diff --git a/src/boost/cpp/version.cpp b/src/boost/cpp/version.cpp
index 005d5b6..cfa950e 100644
--- a/src/boost/cpp/version.cpp
+++ b/src/boost/cpp/version.cpp
@@ -1,25 +1,13 @@
-/*******************************************************************************
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
 
-   This file is part of PyTango, a python binding for Tango
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
 
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 #include "precompiled_header.hpp"
 #include <tango.h>
diff --git a/src/boost/python/__init__.py b/src/boost/python/__init__.py
index 4dfcee8..38a9163 100644
--- a/src/boost/python/__init__.py
+++ b/src/boost/python/__init__.py
@@ -1,25 +1,13 @@
-################################################################################
-##
-## This file is part of PyTango, a python binding for Tango
-## 
-## http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## PyTango is free software: you can redistribute it and/or modify
-## it under the terms of the GNU Lesser General Public License as published by
-## the Free Software Foundation, either version 3 of the License, or
-## (at your option) any later version.
-## 
-## PyTango 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 Lesser General Public License for more details.
-## 
-## You should have received a copy of the GNU Lesser General Public License
-## along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-##
-################################################################################
+# ------------------------------------------------------------------------------
+# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+#
+# Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+# Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+#
+# Distributed under the terms of the GNU Lesser General Public License,
+# either version 3 of the License, or (at your option) any later version.
+# See LICENSE.txt for more info.
+# ------------------------------------------------------------------------------
 
 """
 This is the main PyTango package file.
@@ -43,8 +31,8 @@ __all__ = [ 'AccessControlType', 'ApiUtil', 'ArchiveEventInfo',
 'CommunicationFailed', 'Connection', 'ConnectionFailed',
 'ConstDevString', 'DServer', 'DataReadyEventData', 'Database', 'DbData',
 'DbDatum', 'DbDevExportInfo', 'DbDevExportInfos', 'DbDevImportInfo',
-'DbDevImportInfos', 'DbDevInfo', 'DbDevInfos', 'DbHistory',
-'DbHistoryList', 'DbServerInfo', 'DebugIt', 'DevBoolean', 'DevCommandInfo',
+'DbDevImportInfos', 'DbDevFullInfo', 'DbDevInfo', 'DbDevInfos', 'DbHistory',
+'DbHistoryList', 'DbServerInfo', 'DbServerData', 'DebugIt', 'DevBoolean', 'DevCommandInfo',
 'DevDouble', 'DevEncoded', 'DevError', 'DevFailed', 'DevFloat', 'DevInt',
 'DevLong', 'DevLong64', 'DevShort', 'DevSource', 'DevState', 'DevString',
 'DevUChar', 'DevULong', 'DevULong64', 'DevUShort', 'DevVarBooleanArray',
@@ -130,8 +118,8 @@ from ._PyTango import (AccessControlType, ApiUtil, ArchiveEventInfo,
     CmdDoneEvent, CommandInfo, CommandInfoList, CommunicationFailed,
     Connection, ConnectionFailed, ConstDevString, DServer, DataReadyEventData,
     Database, DbData, DbDatum, DbDevExportInfo, DbDevExportInfos,
-    DbDevImportInfo, DbDevImportInfos, DbDevInfo, DbDevInfos, DbHistory,
-    DbHistoryList, DbServerInfo, DevBoolean, DevCommandInfo, DevDouble,
+    DbDevImportInfo, DbDevImportInfos, DbDevFullInfo, DbDevInfo, DbDevInfos, DbHistory,
+    DbHistoryList, DbServerInfo, DbServerData, DevBoolean, DevCommandInfo, DevDouble,
     DevEncoded, DevError, DevFailed, DevFloat, DevInt, DevLong, DevLong64,
     DevShort, DevSource, DevState, DevString, DevUChar, DevULong, DevULong64,
     DevUShort, DevVarBooleanArray, DevVarCharArray, DevVarDoubleArray,
@@ -143,7 +131,7 @@ from ._PyTango import (AccessControlType, ApiUtil, ArchiveEventInfo,
     DeviceImpl, DeviceInfo, DeviceUnlocked, Device_2Impl,
     Device_3Impl, Device_4Impl, DispLevel, EncodedAttribute, ErrSeverity,
     EventData, EventSystemFailed, EventType,
-    Except, ExtractAs, FMT_UNKNOWN, GroupAttrReply, GroupAttrReplyList,
+    Except, ExtractAs, GreenMode, FMT_UNKNOWN, GroupAttrReply, GroupAttrReplyList,
     GroupCmdReply, GroupCmdReplyList, GroupReply, GroupReplyList,
     IMAGE, ImageAttr, KeepAliveCmdCode, Level, LockCmdCode, LockerInfo,
     LockerLanguage, LogLevel, LogTarget, Logger, Logging, MessBoxType,
@@ -156,7 +144,7 @@ from ._PyTango import (AccessControlType, ApiUtil, ArchiveEventInfo,
     StdNamedDevFailedVector, StdStringVector, SubDevDiag, TimeVal,
     UserDefaultAttrProp, WAttribute, WRITE, WrongData, WrongNameSyntax,
     alarm_flags, asyn_req_type, cb_sub_model, constants,
-    raise_asynch_exception)
+    raise_asynch_exception, Interceptors)
 
 ArgType = CmdArgType
 
@@ -176,7 +164,7 @@ from .log4tango import TangoStream, LogIt, DebugIt, InfoIt, WarnIt, \
 from .device_server import ChangeEventProp, PeriodicEventProp, \
     ArchiveEventProp, AttributeAlarm, EventProperties, AttributeConfig, \
     AttributeConfig_2, AttributeConfig_3, MultiAttrProp
-from .attribute_proxy import AttributeProxy
+from .attribute_proxy import AttributeProxy, get_attribute_proxy
 from .group import Group
 from .pyutil import Util
 from .device_class import DeviceClass
@@ -185,7 +173,8 @@ from .globals import get_class, get_classes, get_cpp_class, get_cpp_classes, \
     delete_class_list, class_list, cpp_class_list, constructed_class
 from .utils import is_scalar_type, is_array_type, is_numerical_type, \
     is_int_type, is_float_type, obj_2_str, seqStr_2_obj
-from .utils import server_run
+from .green import set_green_mode, get_green_mode
+from .device_proxy import get_device_proxy
 from .tango_numpy import NumpyType, numpy_type, numpy_spectrum, numpy_image
 
 from .pytango_init import init as __init
diff --git a/src/boost/python/api2.py b/src/boost/python/api2.py
deleted file mode 100644
index 3a0672d..0000000
--- a/src/boost/python/api2.py
+++ /dev/null
@@ -1,605 +0,0 @@
-################################################################################
-##
-## This file is part of PyTango, a python binding for Tango
-## 
-## http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## PyTango is free software: you can redistribute it and/or modify
-## it under the terms of the GNU Lesser General Public License as published by
-## the Free Software Foundation, either version 3 of the License, or
-## (at your option) any later version.
-## 
-## PyTango 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 Lesser General Public License for more details.
-## 
-## You should have received a copy of the GNU Lesser General Public License
-## along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-##
-################################################################################
-
-""".. _pytango-api2:
-
-This module provides a high level device server API. It implements
-:ref:`TEP1 <pytango-TEP1>`. It exposes an easier API for developing a tango
-device server.
-
-Here is the summary of features which this module exposes and are not available
-on the low level :mod:`PyTango` server API:
-
-#. Automatic inheritance from the latest :class:`~PyTango.DeviceImpl`
-#. default implementation of :meth:`Device.__init__`
-   calls :meth:`Device.init_device`. Around 90% of the
-   different device classes which inherit from low level
-   :class:`~PyTango.DeviceImpl` only implement `__init__` to call their
-   `init_device`
-#. has a default implementation of :meth:`Device.init_device`
-   which calls :meth:`Device.get_device_properties`. Again,
-   90% of existing device classes do that
-#. Automatically creates a hidden :class:`~PyTango.DeviceClass` class 
-#. recognizes :func:`attribute` members and automatically 
-   registers them as tango attributes in the hidden
-   :class:`~PyTango.DeviceClass`
-#. recognizes :class:`command` decorated functions and
-   automatically registers them as tango commands in the hidden
-   :class:`~PyTango.DeviceClass`
-#. recognizes :func:`device_property` members and
-   automatically registers them as tango device properties in the hidden
-   :class:`~PyTango.DeviceClass`
-#. recognizes :func:`class_property` members and
-   automatically registers them as tango class properties in the hidden
-   :class:`~PyTango.DeviceClass`
-#. read and write attribute methods don't need :class:`~PyTango.Attribute`
-   parameter. Access to :class:`~PyTango.Attribute` object is with simple::
-   
-       self.<attr name>
-       
-#. read attribute methods can set attribute return value with::
-       
-       def read_voltage(self):
-           return value
-       
-       # or 
-       
-       def read_voltage(self):
-           self.voltage = value
-       
-   instead of::
-   
-       def read_voltage(self, attr):
-           attr.set_value(value)
-
-:class:`Device` works very well in conjuction with:
-
-#. :meth:`attribute`
-#. :class:`command`
-#. :meth:`device_property`
-#. :meth:`class_property`
-#. :meth:`~PyTango.server_run`
-
-Here is an example of a PowerSupply device with:
-
-#. a read-only double scalar `voltage` attribute
-#. a read/write double scalar `current` attribute
-#. a `ramp` command
-#. a `host` device property
-
-.. code-block:: python
-    :linenos:
-
-    from time import time
-        
-    from PyTango import AttrQuality, DebugIt, server_run
-    from PyTango.api2 import Device, DeviceMeta
-    from PyTango.api2 import attribute, command, device_property
-
-    class PowerSupply(Device):
-        __metaclass__ = DeviceMeta
-        
-        voltage = attribute()        
-
-        current = attribute(label="Current", unit="A",
-                            fread="read_current",
-                            fwrite="write_current")
-        
-        host = device_property()
-        
-        def read_voltage(self):
-            return 10.0
-            
-        def read_current(self):
-            return 2.5, time(), AttrQuality.ON
-        
-        @DebugIt()
-        def write_current(self):
-            new_current = self.current.get_write_value()
-        
-        @command()
-        def ramp(self):
-            self.info_stream("Ramping on " + self.host + "...")
-
-    def main():
-        classes = PowerSupply,
-        server_run(classes)
-    
-    if __name__ == "__main__":
-        main()
-
-And here is the equivalent code using the low-level API:
-
-.. code-block:: python
-    :linenos:
-
-    import sys
-    import time
-
-    import PyTango
-
-    class PowerSupply(PyTango.Device_4Impl):
-
-        def __init__(self, devclass, name):
-            PyTango.Device_4Impl.__init__(self, devclass, name)
-            self.init_device()
-        
-        def init_device(self):
-            self.get_device_properties()
-        
-        def read_voltage(self, attr):
-            attr.set_value(10.0)
-            
-        def read_current(self):
-            attr.set_value_date_quality(2.5, time.time(), PyTango.AttrQuality.ON)
-        
-        @PyTango.DebugIt()
-        def write_current(self, attr):
-            new_current = attr.get_write_value()
-        
-        def ramp(self):
-            self.info_stream("Ramping on " + self.host + "...")
-
-
-    class PowerSupplyClass(PyTango.DeviceClass):
-        
-        class_property_list = {}
-
-        device_property_list = {
-            'host':
-                [PyTango.DevString, "host of power supply", "localhost"],
-        }
-
-        cmd_list = {
-            'ramp':
-                [ [PyTango.DevVoid, "nothing"],
-                  [PyTango.DevVoid, "nothing"] ],
-        }
-
-        attr_list = {
-            'voltage':
-                [[PyTango.DevDouble,
-                PyTango.SCALAR,
-                PyTango.READ]],
-            'current':
-                [[PyTango.DevDouble,
-                PyTango.SCALAR,
-                PyTango.READ_WRITE], 
-                { 'label' : 'Current', 'unit' : 'A' }],
-        }
-        
-
-    def main():
-        try:
-            py = PyTango.Util(sys.argv)
-            py.add_class(PowerSupplyClass,PowerSupply,'PowerSupply')
-
-            U = PyTango.Util.instance()
-            U.server_init()
-            U.server_run()
-
-        except PyTango.DevFailed,e:
-            print '-------> Received a DevFailed exception:',e
-        except Exception,e:
-            print '-------> An unforeseen exception occured....',e
-
-    if __name__ == "__main__":
-        main()
-        
-        
-*Pretty cool, uh?*
-"""
-
-from __future__ import with_statement
-from __future__ import print_function
-
-__all__ = ["DeviceMeta", "Device", "LatestDeviceImpl", "attribute", "command",
-           "device_property", "class_property"]
-
-import functools
-import __builtin__
-
-from ._PyTango import DeviceImpl, Attribute, WAttribute, CmdArgType, \
-    AttrDataFormat, AttrWriteType, DispLevel, constants
-from .attr_data import AttrData
-from .device_class import DeviceClass
-from .utils import get_tango_device_classes, is_non_str_seq, is_pure_str
-from .log4tango import DebugIt
-
-API_VERSION = 2
-
-LatestDeviceImpl = get_tango_device_classes()[-1]
-
-def __build_to_tango_type():
-    ret = \
-    {
-        int         : CmdArgType.DevLong,
-        str         : CmdArgType.DevString,
-        bool        : CmdArgType.DevBoolean,
-        bytearray   : CmdArgType.DevEncoded,
-        float       : CmdArgType.DevDouble,
-        chr         : CmdArgType.DevUChar,
-        None        : CmdArgType.DevVoid,
-
-        'int'       : CmdArgType.DevLong,
-        'int16'     : CmdArgType.DevShort,
-        'int32'     : CmdArgType.DevLong,
-        'int64'     : CmdArgType.DevLong64,
-        'uint'      : CmdArgType.DevULong,
-        'uint16'    : CmdArgType.DevUShort,
-        'uint32'    : CmdArgType.DevULong,
-        'uint64'    : CmdArgType.DevULong64,
-        'str'       : CmdArgType.DevString,
-        'string'    : CmdArgType.DevString,
-        'text'      : CmdArgType.DevString,
-        'bool'      : CmdArgType.DevBoolean,
-        'boolean'   : CmdArgType.DevBoolean,
-        'bytes'     : CmdArgType.DevEncoded,
-        'bytearray' : CmdArgType.DevEncoded,
-        'float'     : CmdArgType.DevDouble,
-        'float32'   : CmdArgType.DevFloat,
-        'float64'   : CmdArgType.DevDouble,
-        'double'    : CmdArgType.DevDouble,
-        'byte'      : CmdArgType.DevUChar,
-        'chr'       : CmdArgType.DevUChar,
-        'char'      : CmdArgType.DevUChar,
-        'None'      : CmdArgType.DevVoid,
-    }
-
-    for key in dir(CmdArgType):
-        if key.startswith("Dev"):
-            value = getattr(CmdArgType, key)
-            ret[key] = ret[value] = value
-            
-    if constants.NUMPY_SUPPORT:
-        import numpy
-        FROM_TANGO_TO_NUMPY_TYPE = { \
-                   CmdArgType.DevBoolean : numpy.bool8,
-                     CmdArgType.DevUChar : numpy.ubyte,
-                     CmdArgType.DevShort : numpy.short,
-                    CmdArgType.DevUShort : numpy.ushort,
-                      CmdArgType.DevLong : numpy.int32,
-                     CmdArgType.DevULong : numpy.uint32,
-                    CmdArgType.DevLong64 : numpy.int64,
-                   CmdArgType.DevULong64 : numpy.uint64,
-                    CmdArgType.DevString : numpy.str,
-                    CmdArgType.DevDouble : numpy.float64,
-                     CmdArgType.DevFloat : numpy.float32,
-        }
-
-        for key,value in FROM_TANGO_TO_NUMPY_TYPE.items():
-            ret[value] = key
-    
-    head = "{0:40}  {0:40}\n".format(40*"=")
-    doc = "{0} {1:38}    {2:38} \n{0}".format(head,'type','tango type')
-    keys = sorted(ret)
-    for key in keys:
-        value = ret[key]
-        if type(key) == type:
-            key_name = key.__name__
-            if key_name in __builtin__.__dict__:
-                key = ":py:obj:`{0}`".format(key_name)
-            elif key.__module__ == 'numpy':
-                key = ":py:obj:`numpy.{0}`".format(key_name)
-            else:
-                key = "``{0}``".format(key_name)
-        elif is_pure_str(key):
-            key = "``'{0}'``".format(key) 
-        else:
-            key = "``{0}``".format(key)
-        value = "``{0}``".format(value) 
-        doc += " {0:38}    {1:38} \n".format(key, str(value))
-    doc += head
-    return ret, doc
-    
-TO_TANGO_TYPE, __type_doc = __build_to_tango_type()
-
-
-
-def get_tango_type(dtype):
-    return TO_TANGO_TYPE[dtype]
-
-get_tango_type.__doc__ = __type_doc
-
-def set_complex_value(attr, value):
-    is_tuple = isinstance(value, tuple)
-    dtype, fmt = attr.get_data_type(), attr.get_data_format()
-    if dtype == CmdArgType.DevEncoded:
-        if is_tuple and len(value) == 4:
-            attr.set_value_date_quality(*value)
-        elif is_tuple and len(value) == 3 and is_non_str_seq(value[0]):
-            attr.set_value_date_quality(value[0][0], value[0][1], *value[1:])
-        else:
-            attr.set_value(*value)
-    else:
-        if is_tuple:
-            if len(value) == 3:
-                if fmt == AttrDataFormat.SCALAR:
-                    attr.set_value_date_quality(*value)
-                elif fmt == AttrDataFormat.SPECTRUM:
-                    if is_seq(value[0]):
-                        attr.set_value_date_quality(*value)
-                    else:
-                        attr.set_value(value)
-                else:
-                    if is_seq(value[0]) and is_seq(value[0][0]):
-                        attr.set_value_date_quality(*value)
-                    else:
-                        attr.set_value(value)
-            else:
-                attr.set_value(value)
-        else:
-            attr.set_value(value)
-
-def check_tango_device_klass_attribute_read_method(tango_device_klass, method_name):
-    """Checks if method given by it's name for the given DeviceImpl class has
-    the correct signature. If a read/write method doesn't have a parameter
-    (the traditional Attribute), then the method is wrapped into another method
-    which has correct parameter definition to make it work.
-    
-    :param tango_device_klass: a DeviceImpl class
-    :type tango_device_klass: class
-    :param method_name: method to be cheched
-    :type attr_data: str"""
-    read_method = getattr(tango_device_klass, method_name)
-
-    @functools.wraps(read_method)
-    def read_attr(self, attr):
-        ret = read_method(self)
-        if not attr.get_value_flag() and ret is not None:
-            set_complex_value(attr, ret)
-        return ret
-    setattr(tango_device_klass, method_name, read_attr)
-
-def check_tango_device_klass_attribute_write_method(tango_device_klass, method_name):
-    """Checks if method given by it's name for the given DeviceImpl class has
-    the correct signature. If a read/write method doesn't have a parameter
-    (the traditional Attribute), then the method is wrapped into another method
-    which has correct parameter definition to make it work.
-    
-    :param tango_device_klass: a DeviceImpl class
-    :type tango_device_klass: class
-    :param method_name: method to be cheched
-    :type attr_data: str"""
-    write_method = real_f_obj = getattr(tango_device_klass, method_name)
-
-    @functools.wraps(write_method)
-    def write_attr(self, attr):
-        value = attr.get_write_value()
-        return write_method(self, value)
-    setattr(tango_device_klass, method_name, write_attr)
-
-def check_tango_device_klass_attribute_methods(tango_device_klass, attr_data):
-    """Checks if the read and write methods have the correct signature. If a 
-    read/write method doesn't have a parameter (the traditional Attribute),
-    then the method is wrapped into another method to make this work
-    
-    :param tango_device_klass: a DeviceImpl class
-    :type tango_device_klass: class
-    :param attr_data: the attribute data information
-    :type attr_data: AttrData"""
-    if attr_data.attr_write in (AttrWriteType.READ, AttrWriteType.READ_WRITE):
-        check_tango_device_klass_attribute_read_method(tango_device_klass, attr_data.read_method_name)
-    if attr_data.attr_write in (AttrWriteType.WRITE, AttrWriteType.READ_WRITE):
-        check_tango_device_klass_attribute_write_method(tango_device_klass, attr_data.write_method_name)
-        
-def create_tango_deviceclass_klass(tango_device_klass, attrs=None):
-    klass_name = tango_device_klass.__name__
-    if not issubclass(tango_device_klass, (Device)):
-        raise Exception("{0} device must inherit from PyTango.api2.Device".format(klass_name))
-    
-    if attrs is None:
-        attrs = tango_device_klass.__dict__
-        
-    attr_list = {}
-    for attr_name, attr_obj in attrs.items():
-        if isinstance(attr_obj, AttrData2):
-            attr_obj._set_name(attr_name)
-            attr_list[attr_name] = attr_obj
-            check_tango_device_klass_attribute_methods(tango_device_klass, attr_obj)
-            
-    class_property_list = {}
-    device_property_list = {}
-    cmd_list = {}
-    devclass_name = klass_name + "Class"
-    
-    def device_class_constructor(self, name):
-        DeviceClass.__init__(self, name)
-        self.set_type(name)
-    
-    devclass_attrs = dict(class_property_list=class_property_list,
-                          device_property_list=device_property_list,
-                          cmd_list=cmd_list, attr_list=attr_list)
-    devclass_attrs['__init__'] = device_class_constructor
-    return type(devclass_name, (DeviceClass,), devclass_attrs)
-
-def init_tango_device_klass(tango_device_klass, attrs=None, tango_class_name=None):
-    klass_name = tango_device_klass.__name__
-    tango_deviceclass_klass = create_tango_deviceclass_klass(tango_device_klass,
-                                                             attrs=attrs)
-    if tango_class_name is None:
-        tango_klass_name = klass_name
-    tango_device_klass._DeviceClass = tango_deviceclass_klass
-    tango_device_klass._DeviceClassName = tango_klass_name
-    tango_device_klass._api = API_VERSION
-    return tango_device_klass
-
-def create_tango_device_klass(name, bases, attrs):
-    klass_name = name
-
-    LatestDeviceImplMeta = type(LatestDeviceImpl)
-    klass = LatestDeviceImplMeta(klass_name, bases, attrs)
-    init_tango_device_klass(klass, attrs)
-    return klass
-    
-def DeviceMeta(name, bases, attrs):
-    """The :py:data:`metaclass` callable for :class:`Device`. Every subclass of
-    :class:`Device` must have associated this metaclass to itself in order to
-    work properly (boost-python internal limitation).
-    
-    Example (python 2.x)::
-    
-        from PyTango.api2 import Device, DeviceMeta
-
-        class PowerSupply(Device):
-            __metaclass__ = DeviceMeta
-
-    Example (python 3.x)::
-    
-        from PyTango.api2 import Device, DeviceMeta
-
-        class PowerSupply(Device, metaclass=DeviceMeta):
-            pass
-    """
-    return create_tango_device_klass(name, bases, attrs)
-
-
-class Device(LatestDeviceImpl):
-    """High level DeviceImpl API.
-    
-    .. seealso::
-        
-        Module :py:mod:`PyTango.api2`
-            Full API2 documentation"""
-    
-    def __init__(self, cl, name):
-        LatestDeviceImpl.__init__(self, cl, name)
-        self.init_device()
-
-    def init_device(self):
-        """Tango init_device method. Default implementation calls
-        :meth:`get_device_properties`"""
-        self.get_device_properties()
-    
-    def always_executed_hook(self):
-        """Tango always_executed_hook. Default implementation does nothing"""
-        pass
-
-
-class AttrData2(AttrData):
-    """High level AttrData. To be used """
-    
-    def get_attribute(self, obj):
-        return obj.get_device_attr().get_attr_by_name(self.attr_name)
-        
-    def __get__(self, obj, objtype):
-        return self.get_attribute(obj)
-
-    def __set__(self, obj, value):
-        attr = self.get_attribute(obj)
-        set_complex_value(attr, value)
-    
-    def __delete__(self, obj):
-        obj.remove_attribute(self.attr_name)
-    
-def attribute(**kwargs):
-    if 'dtype' in kwargs:
-        kwargs['dtype'] = get_tango_type(kwargs['dtype'])
-    return AttrData2.from_dict(kwargs)
-
-
-attribute.__doc__ = """\
-declares a new tango attribute in a :class:`Device`. To be used like the python
-native :obj:`property` function. For exampke, to declare a scalar, 
-`PyTango.DevDouble`, read-only attribute called *voltage* in a *PowerSupply*
-:class:`Device` do::
-
-    class PowerSupply(Device):
-        
-        voltage = attribute()
-        
-        def read_voltage(self):
-            self.voltage = 1.0
-
-It receives multiple keyword arguments.
-
-===================== ========================================== ============================================== =======================================================================================
-parameter              type                                       default value                                  description
-===================== ========================================== ============================================== =======================================================================================
-name                   :obj:`str`                                 class member name                              alternative attribute name
-dtype                  :obj:`object`                              :obj:`~PyTango.CmdArgType`\ ``.DevDouble``     data type (see :ref:`Data type equivalence <pytango-api2-datatypes>`)             
-dformat                :obj:`~PyTango.AttrDataFormat`             :obj:`~PyTango.AttrDataFormat`\ ``.SCALAR``    data format
-max_dim_x              :obj:`int`                                 1                                              maximum size for x dimension (ignored for SCALAR format) 
-max_dim_y              :obj:`int`                                 0                                              maximum size for y dimension (ignored for SCALAR and SPECTRUM formats) 
-display_level          :obj:`~PyTango.DispLevel`                  :obj:`~PyTango.DisLevel`\ ``.OPERATOR``        display level
-polling_period         :obj:`int`                                 -1                                             polling period
-memorized              :obj:`bool`                                False                                          attribute should or not be memorized
-hw_memorized           :obj:`bool`                                False                                          write method should be called at startup when restoring memorize value (dangerous!)
-param access           :obj:`~PyTango.AttrWriteType`              :obj:`~PyTango.AttrWriteType`\ ``.READ``       read only/ read write / write only access
-fread                  :obj:`str` or :obj:`callable`              'read_<attr_name>'                             read method name or method object
-fwrite                 :obj:`str` or :obj:`callable`              'write_<attr_name>'                            write method name or method object
-is_allowed             :obj:`str` or :obj:`callable`              'is_<attr_name>_allowed'                       is allowed method name or method object
-label                  :obj:`str`                                 '<attr_name>'                                  attribute label
-description            :obj:`str`                                 ''                                             attribute description
-unit                   :obj:`str`                                 ''                                             physical units the attribute value is in
-standard_unit          :obj:`str`                                 ''                                             physical standard unit
-display_unit           :obj:`str`                                 ''                                             physical display unit (hint for clients)
-format                 :obj:`str`                                 '6.2f'                                         attribute representation format
-min_value              :obj:`str`                                 None                                           minimum allowed value
-max_value              :obj:`str`                                 None                                           maximum allowed value
-min_alarm              :obj:`str`                                 None                                           minimum value to trigger attribute alarm
-max_alarm              :obj:`str`                                 None                                           maximum value to trigger attribute alarm
-min_warning            :obj:`str`                                 None                                           minimum value to trigger attribute warning
-max_warning            :obj:`str`                                 None                                           maximum value to trigger attribute warning
-delta_val              :obj:`str`                                 None
-delta_t                :obj:`str`                                 None
-abs_change             :obj:`str`                                 None                                           minimum value change between events that causes event filter to send the event
-rel_change             :obj:`str`                                 None                                           minimum relative change between events that causes event filter to send the event (%)
-period                 :obj:`str`                                 None
-archive_abs_change     :obj:`str`                                 None
-archive_rel_change     :obj:`str`                                 None
-archive_period         :obj:`str`                                 None
-===================== ========================================== ============================================== =======================================================================================
-
-.. _pytango-api2-datatypes:
-
-The `dtype` parameter in :func:`attribute` is not retricted to the :obj:`~PyTango.CmdArgType options.
-For example, to define a :obj:`~PyTango.CmdArgType`\ ``.DevLong`` attribute you
-have several possibilities:
-
-    #. :obj:`int`
-    #. 'int'
-    #. 'int32'
-    #. 'integer' 
-    #. :obj:`~PyTango.CmdArgType`\ ``.DevLong``
-    #. 'DevLong' 
-    #. :obj:`numpy.int32`
-
-Below is the complete table of equivalences.
-    
-.. rubric:: Data type equivalence 
-
-""" + __type_doc
-    
-class command:
-    """TODO"""
-    pass
-    
-def device_property():
-    """TODO"""
-    pass
-
-def class_property():
-    """TODO"""
-    pass
-
diff --git a/src/boost/python/api_util.py b/src/boost/python/api_util.py
index 6d5594c..1184555 100644
--- a/src/boost/python/api_util.py
+++ b/src/boost/python/api_util.py
@@ -1,25 +1,13 @@
-################################################################################
-##
-## This file is part of PyTango, a python binding for Tango
-## 
-## http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## PyTango is free software: you can redistribute it and/or modify
-## it under the terms of the GNU Lesser General Public License as published by
-## the Free Software Foundation, either version 3 of the License, or
-## (at your option) any later version.
-## 
-## PyTango 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 Lesser General Public License for more details.
-## 
-## You should have received a copy of the GNU Lesser General Public License
-## along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-##
-################################################################################
+# ------------------------------------------------------------------------------
+# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+#
+# Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+# Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+#
+# Distributed under the terms of the GNU Lesser General Public License,
+# either version 3 of the License, or (at your option) any later version.
+# See LICENSE.txt for more info.
+# ------------------------------------------------------------------------------
 
 """
 This is an internal PyTango module.
diff --git a/src/boost/python/attr_data.py b/src/boost/python/attr_data.py
index 5467a45..c75c6d6 100644
--- a/src/boost/python/attr_data.py
+++ b/src/boost/python/attr_data.py
@@ -1,25 +1,13 @@
-################################################################################
-##
-## This file is part of PyTango, a python binding for Tango
-## 
-## http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## PyTango is free software: you can redistribute it and/or modify
-## it under the terms of the GNU Lesser General Public License as published by
-## the Free Software Foundation, either version 3 of the License, or
-## (at your option) any later version.
-## 
-## PyTango 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 Lesser General Public License for more details.
-## 
-## You should have received a copy of the GNU Lesser General Public License
-## along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-##
-################################################################################
+# ------------------------------------------------------------------------------
+# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+#
+# Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+# Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+#
+# Distributed under the terms of the GNU Lesser General Public License,
+# either version 3 of the License, or (at your option) any later version.
+# See LICENSE.txt for more info.
+# ------------------------------------------------------------------------------
 
 """
 This is an internal PyTango module.
@@ -34,8 +22,9 @@ __docformat__ = "restructuredtext"
 
 import inspect
 
-from ._PyTango import Except, CmdArgType, AttrDataFormat, AttrWriteType, \
-    DispLevel, UserDefaultAttrProp, Attr, SpectrumAttr, ImageAttr
+from ._PyTango import Except, CmdArgType, AttrDataFormat, AttrWriteType
+from ._PyTango import DispLevel, UserDefaultAttrProp
+from ._PyTango import Attr, SpectrumAttr, ImageAttr
 from .utils import is_non_str_seq, is_pure_str
 
 
@@ -75,6 +64,10 @@ class AttrData(object):
         name = attr_dict.pop('name', None)
         class_name = attr_dict.pop('class_name', None)
         self = cls(name, class_name)
+        self.build_from_dict(attr_dict)
+        return self
+        
+    def build_from_dict(self, attr_dict):
         self.attr_type = attr_dict.pop('dtype', CmdArgType.DevDouble)
         self.attr_format = attr_dict.pop('dformat', AttrDataFormat.SCALAR)
         self.dim_x = attr_dict.pop('max_dim_x', 1)
@@ -89,7 +82,8 @@ class AttrData(object):
             self.attr_write = attr_dict.pop('access')
         else:
             # access is defined by which methods were defined
-            r_explicit, w_explicit = "fread" in attr_dict, "fwrite" in attr_dict
+            r_explicit = "fread" in attr_dict or "fget" in attr_dict
+            w_explicit = "fwrite" in attr_dict or "fset" in attr_dict
             if r_explicit and w_explicit:
                 self.attr_write = AttrWriteType.READ_WRITE
             elif r_explicit:
@@ -99,13 +93,13 @@ class AttrData(object):
             else:
                 self.attr_write = AttrWriteType.READ
             
-        fread = attr_dict.pop('fread', None)
+        fread = attr_dict.pop('fget', attr_dict.pop('fread', None))
         if fread is not None:
             if is_pure_str(fread):
                 self.read_method_name = fread
             elif inspect.isroutine(fread):
                 self.read_method_name = fread.__name__
-        fwrite = attr_dict.pop('fwrite', None)
+        fwrite = attr_dict.pop('fset', attr_dict.pop('fwrite', None))
         if fwrite is not None:
             if is_pure_str(fwrite):
                 self.write_method_name = fwrite
@@ -124,7 +118,7 @@ class AttrData(object):
             if not self.attr_format == AttrDataFormat.SPECTRUM:
                 self.attr_args.append(self.dim_y)
         if len(attr_dict):
-            self.att_prop = self.__create_user_default_attr_prop(self.attr_name, attr_dict)
+            self.att_prop = self.__create_user_default_attr_prop(attr_dict)
         return self
     
     def _set_name(self, name):
@@ -142,9 +136,14 @@ class AttrData(object):
     def __throw_exception(self, msg, meth="create_attribute()"):
         Except.throw_exception("PyDs_WrongAttributeDefinition", msg, meth)
 
-    def __create_user_default_attr_prop(self, attr_name, extra_info):
+    def __create_user_default_attr_prop(self, extra_info):
         """for internal usage only"""
         p = UserDefaultAttrProp()
+
+        doc = extra_info.pop('doc', None)
+        if 'doc' is not None:
+            extra_info['description'] = doc
+        
         for k, v in extra_info.items():
             k_lower = k.lower()
             method_name = "set_%s" % k_lower.replace(' ','_')
@@ -249,7 +248,7 @@ class AttrData(object):
                 self.dim_y = int(attr_info[4])
             except:
                 throw_ex("Wrong data type in attribute argument for attribute "
-                         "%s in class %s\n5th element in sequence describing "
+                         "%s in class %s\n5th element in sequence desribing "
                          "mandatory dim_y attribute parameter for image "
                          "attribute must be an integer" % (attr_name, name))
         
@@ -276,10 +275,11 @@ class AttrData(object):
                      "attribute %s in class %s\nAttribute information for "
                      "polling period is not an integer" % (attr_name, name))
         
-        self.memorized = extra_info.get("memorized", "false")
-        if self.memorized == "true":
-            self.memorized, self.hw_memorized = True, True
-        elif self.memorized == "true_without_hard_applied":
+        memorized = extra_info.get("memorized", "false").lower()
+        if memorized == "true":
+            self.memorized = True
+            self.hw_memorized = True
+        elif memorized == "true_without_hard_applied":
             self.memorized = True
         else:
             self.memorized = False
@@ -293,7 +293,7 @@ class AttrData(object):
                 
         att_prop = None
         if extra_info:
-            att_prop = self.__create_user_default_attr_prop(attr_name, extra_info)
+            att_prop = self.__create_user_default_attr_prop(extra_info)
         self.att_prop = att_prop
     
     def to_attr(self):
diff --git a/src/boost/python/attribute_proxy.py b/src/boost/python/attribute_proxy.py
index 66fd972..f8461f9 100644
--- a/src/boost/python/attribute_proxy.py
+++ b/src/boost/python/attribute_proxy.py
@@ -1,25 +1,13 @@
-################################################################################
-##
-## This file is part of PyTango, a python binding for Tango
-## 
-## http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## PyTango is free software: you can redistribute it and/or modify
-## it under the terms of the GNU Lesser General Public License as published by
-## the Free Software Foundation, either version 3 of the License, or
-## (at your option) any later version.
-## 
-## PyTango 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 Lesser General Public License for more details.
-## 
-## You should have received a copy of the GNU Lesser General Public License
-## along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-##
-################################################################################
+# ------------------------------------------------------------------------------
+# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+#
+# Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+# Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+#
+# Distributed under the terms of the GNU Lesser General Public License,
+# either version 3 of the License, or (at your option) any later version.
+# See LICENSE.txt for more info.
+# ------------------------------------------------------------------------------
 
 """
 This is an internal PyTango module. It completes the binding of
@@ -29,17 +17,78 @@ To access these members use directly :mod:`PyTango` module and NOT
 PyTango.attribute_proxy.
 """
 
-__all__ = [ "AttributeProxy", "attribute_proxy_init"]
+__all__ = [ "AttributeProxy", "attribute_proxy_init", "get_attribute_proxy" ]
             
 __docformat__ = "restructuredtext"
 
+import collections
+
 from ._PyTango import StdStringVector, DbData, DbDatum, DeviceProxy
 from ._PyTango import __AttributeProxy as _AttributeProxy
-from .utils import seq_2_StdStringVector, seq_2_DbData, DbData_2_dict, \
-    is_pure_str, is_non_str_seq
-import collections
+from .utils import seq_2_StdStringVector, seq_2_DbData, DbData_2_dict
+from .utils import is_pure_str, is_non_str_seq
+from .green import result, submit, get_green_mode
 
 
+def get_attribute_proxy(*args, **kwargs):
+    """
+    get_attribute_proxy(self, full_attr_name, green_mode=None, wait=True, timeout=True) -> AttributeProxy
+    get_attribute_proxy(self, device_proxy, attr_name, green_mode=None, wait=True, timeout=True) -> AttributeProxy
+
+    Returns a new :class:`~PyTango.AttributeProxy`.
+    There is no difference between using this function and the direct 
+    :class:`~PyTango.AttributeProxy` constructor if you use the default kwargs.
+     
+    The added value of this function becomes evident when you choose a green_mode
+    to be *Futures* or *Gevent*. The AttributeProxy constructor internally makes some
+    network calls which makes it *slow*. By using one of the *green modes* as 
+    green_mode you are allowing other python code to be executed in a cooperative way.
+
+    :param full_attr_name: the full name of the attribute
+    :type full_attr_name: str
+    :param device_proxy: the :class:`~PyTango.DeviceProxy`
+    :type device_proxy: DeviceProxy
+    :param attr_name: attribute name for the given device proxy
+    :type attr_name: str
+    :param green_mode: determines the mode of execution of the device (including
+                      the way it is created). Defaults to the current global
+                      green_mode (check :func:`~PyTango.get_green_mode` and
+                      :func:`~PyTango.set_green_mode`)
+    :type green_mode: :obj:`~PyTango.GreenMode`
+    :param wait: whether or not to wait for result. If green_mode
+                 Ignored when green_mode is Synchronous (always waits).
+    :type wait: bool
+    :param timeout: The number of seconds to wait for the result.
+                    If None, then there is no limit on the wait time.
+                    Ignored when green_mode is Synchronous or wait is False.
+    :type timeout: float
+    :returns:
+        if green_mode is Synchronous or wait is True:
+            :class:`~PyTango.AttributeProxy`
+        else if green_mode is Futures:
+            :class:`concurrent.futures.Future`
+        else if green_mode is Gevent:
+            :class:`gevent.event.AsynchResult`
+    :throws:
+        * a *DevFailed* if green_mode is Synchronous or wait is True 
+          and there is an error creating the attribute.
+        * a *concurrent.futures.TimeoutError* if green_mode is Futures,
+          wait is False, timeout is not None and the time to create the attribute
+          has expired.                            
+        * a *gevent.timeout.Timeout* if green_mode is Gevent, wait is False,
+          timeout is not None and the time to create the attribute has expired.
+    
+    New in PyTango 8.1.0
+    """
+    # we cannot use the green wrapper because it consumes the green_mode and we
+    # want to forward it to the DeviceProxy constructor
+    green_mode = kwargs.get('green_mode', get_green_mode())
+    wait = kwargs.pop('wait', True)
+    timeout = kwargs.pop('timeout', None)
+    
+    d = submit(green_mode, AttributeProxy, *args, **kwargs)
+    return result(d, green_mode, wait=wait, timeout=timeout)
+
 def __AttributeProxy__get_property(self, propname, value=None):
     """
     get_property(self, propname, value) -> DbData
@@ -128,7 +177,7 @@ def __AttributeProxy__put_property(self, value):
         Return     : None
 
         Throws     : ConnectionFailed, CommunicationFailed
-                    DevFailed from device (DB_SQLError)
+                     DevFailed from device (DB_SQLError)
     """
     if isinstance(value, DbData):
         pass
@@ -239,10 +288,12 @@ class AttributeProxy(object):
         python reimplementation of the AttributeProxy found on the C++ API.
     """
     def __init__(self, *args, **kwds):
+        green_mode = kwds.pop('green_mode', get_green_mode())
         self.__attr_proxy = _AttributeProxy(*args, **kwds)
         # get_device_proxy() returns a different python object each time
         # we don't want a different object, so we save the current one.
-        self.__dev_proxy = self.__attr_proxy.get_device_proxy()
+        self.__dev_proxy = dp = self.__attr_proxy.get_device_proxy()
+        dp.set_green_mode(green_mode)
 
     def get_device_proxy(self):
         """
diff --git a/src/boost/python/base_types.py b/src/boost/python/base_types.py
index 6e25eb9..d49cc20 100644
--- a/src/boost/python/base_types.py
+++ b/src/boost/python/base_types.py
@@ -1,25 +1,13 @@
-################################################################################
-##
-## This file is part of PyTango, a python binding for Tango
-## 
-## http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## PyTango is free software: you can redistribute it and/or modify
-## it under the terms of the GNU Lesser General Public License as published by
-## the Free Software Foundation, either version 3 of the License, or
-## (at your option) any later version.
-## 
-## PyTango 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 Lesser General Public License for more details.
-## 
-## You should have received a copy of the GNU Lesser General Public License
-## along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-##
-################################################################################
+# ------------------------------------------------------------------------------
+# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+#
+# Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+# Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+#
+# Distributed under the terms of the GNU Lesser General Public License,
+# either version 3 of the License, or (at your option) any later version.
+# See LICENSE.txt for more info.
+# ------------------------------------------------------------------------------
 
 """
 This is an internal PyTango module.
@@ -39,10 +27,11 @@ from ._PyTango import (StdStringVector, StdLongVector, StdDoubleVector, \
     AttributeDimension, AttributeEventInfo, DeviceAttributeConfig, \
     AttributeInfo, AttributeInfoEx, ChangeEventInfo, PeriodicEventInfo, \
     DevCommandInfo, CommandInfo, DataReadyEventData, DeviceInfo, \
-    LockerInfo, PollDevice, TimeVal)
+    LockerInfo, PollDevice, TimeVal, AttrWriteType, AttrDataFormat, DispLevel)
 
 from .utils import document_method, is_integer
 from .utils import document_enum as __document_enum
+from .utils import seq_2_StdStringVector, StdStringVector_2_seq
 
 def __StdVector__add(self, seq):
     ret = seq.__class__(self)
@@ -85,7 +74,184 @@ def __fillVectorClass(klass):
     klass.__imul__ = __StdVector__imul
     klass.__original_getitem = klass.__getitem__
     klass.__getitem__ = __StdVector__getitem
-    
+
+# -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
+# DeviceAttributeConfig pickle
+# -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
+
+def __DeviceAttributeConfig__getinitargs__(self):
+    return ()
+
+def __DeviceAttributeConfig__getstate__(self):
+    ret = self.name, \
+          int(self.writable), \
+          int(self.data_format), \
+          self.data_type, \
+          self.max_dim_x, \
+          self.max_dim_y, \
+          self.description, \
+          self.label, \
+          self.unit, \
+          self.standard_unit, \
+          self.display_unit, \
+          self.format, \
+          self.min_value, \
+          self.max_value, \
+          self.min_alarm, \
+          self.max_alarm, \
+          self.writable_attr_name, \
+          StdStringVector_2_seq(self.extensions)
+    return ret
+
+def __DeviceAttributeConfig__setstate__(self, state):
+    self.name = state[0]
+    self.writable = AttrWriteType(state[1])
+    self.data_format = AttrDataFormat(state[2])
+    self.data_type = state[3]
+    self.max_dim_x = state[4]
+    self.max_dim_y = state[5]
+    self.description = state[6]
+    self.label = state[7]
+    self.unit = state[8]
+    self.standard_unit = state[9]
+    self.display_unit = state[10]
+    self.format = state[11]
+    self.min_value = state[12]
+    self.max_value = state[13]
+    self.min_alarm = state[14]
+    self.max_alarm = state[15]
+    self.writable_attr_name = state[16]
+    self.extensions = seq_2_StdStringVector(state[17])
+
+# -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
+# AttributeInfo pickle
+# -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
+
+def __AttributeInfo__getinitargs__(self):
+    return ()
+
+def __AttributeInfo__getstate__(self):
+    ret = list(__DeviceAttributeConfig__getstate__(self))
+    ret.append(int(self.disp_level))
+    return tuple(ret)
+
+def __AttributeInfo__setstate__(self, state):
+    __DeviceAttributeConfig__setstate__(self, state)
+    self.disp_level = DispLevel(state[18])
+
+# -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
+# AttributeAlarmInfo pickle
+# -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
+
+def __AttributeAlarmInfo__getinitargs__(self):
+    return ()
+
+def __AttributeAlarmInfo__getstate__(self):
+    return self.min_alarm, \
+           self.max_alarm, \
+           self.min_warning, \
+           self.max_warning, \
+           self.delta_t, \
+           self.delta_val, \
+           StdStringVector_2_seq(self.extensions)
+
+def __AttributeAlarmInfo__setstate__(self, state):
+    self.min_alarm = state[0]
+    self.max_alarm = state[1]
+    self.min_warning = state[2]
+    self.max_warning = state[3]
+    self.delta_t = state[4]
+    self.delta_val = state[5]
+    self.extensions = seq_2_StdStringVector(state[6])
+
+# -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
+# ChangeEventInfo pickle
+# -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
+
+def __ChangeEventInfo__getinitargs__(self):
+    return ()
+
+def __ChangeEventInfo__getstate__(self):
+    return self.rel_change, \
+           self.abs_change, \
+           StdStringVector_2_seq(self.extensions)
+
+def __ChangeEventInfo__setstate__(self, state):
+    self.rel_change = state[0]
+    self.abs_change = state[1]
+    self.extensions = seq_2_StdStringVector(state[2])
+
+# -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
+# PeriodicEventInfo pickle
+# -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
+
+def __PeriodicEventInfo__getinitargs__(self):
+    return ()
+
+def __PeriodicEventInfo__getstate__(self):
+    return self.period, \
+        StdStringVector_2_seq(self.extensions)
+
+def __PeriodicEventInfo__setstate__(self, state):
+    self.period = state[0]
+    self.extensions = seq_2_StdStringVector(state[1])
+
+# -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
+# ArchiveEventInfo pickle
+# -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
+
+def __ArchiveEventInfo__getinitargs__(self):
+    return ()
+
+def __ArchiveEventInfo__getstate__(self):
+    return self.archive_rel_change, \
+           self.archive_abs_change, \
+           self.archive_period, \
+           StdStringVector_2_seq(self.extensions)
+
+def __ArchiveEventInfo__setstate__(self, state):
+    self.archive_rel_change = state[0]
+    self.archive_abs_change = state[1]
+    self.archive_period = state[2]
+    self.extensions = seq_2_StdStringVector(state[3])
+
+# -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
+# AttributeEventInfo pickle
+# -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
+
+def __AttributeEventInfo__getinitargs__(self):
+    return ()
+
+def __AttributeEventInfo__getstate__(self):
+    return self.ch_event, \
+           self.per_event, \
+           self.arch_event
+
+def __AttributeEventInfo__setstate__(self, state):
+    self.ch_event = state[0]
+    self.per_event = state[1]
+    self.arch_event = state[2]
+
+# -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
+# AttributeInfoEx pickle
+# -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
+
+def __AttributeInfoEx__getinitargs__(self):
+    return ()
+
+def __AttributeInfoEx__getstate__(self):
+    ret = list(__AttributeInfo__getstate__(self))
+    ret.append(self.alarms)
+    ret.append(self.events)
+    ret.append(StdStringVector_2_seq(self.sys_extensions))
+    return tuple(ret)
+
+def __AttributeInfoEx__setstate__(self, state):
+    __AttributeInfo__setstate__(self, state)
+    self.alarms = state[19]
+    self.events = state[20]
+    self.sys_extensions = seq_2_StdStringVector(state[21])
+
 def __init_base_types():
     
     v_klasses = (StdStringVector,StdLongVector,StdDoubleVector,CommandInfoList, \
@@ -97,6 +263,39 @@ def __init_base_types():
     for v_klass in v_klasses:
         __fillVectorClass(v_klass)
 
+    DeviceAttributeConfig.__getinitargs__ = __DeviceAttributeConfig__getinitargs__
+    DeviceAttributeConfig.__getstate__ = __DeviceAttributeConfig__getstate__
+    DeviceAttributeConfig.__setstate__ = __DeviceAttributeConfig__setstate__
+
+    AttributeInfo.__getinitargs__ = __AttributeInfo__getinitargs__
+    AttributeInfo.__getstate__ = __AttributeInfo__getstate__
+    AttributeInfo.__setstate__ = __AttributeInfo__setstate__
+
+    AttributeAlarmInfo.__getinitargs__ = __AttributeAlarmInfo__getinitargs__
+    AttributeAlarmInfo.__getstate__ = __AttributeAlarmInfo__getstate__
+    AttributeAlarmInfo.__setstate__ = __AttributeAlarmInfo__setstate__
+
+    ChangeEventInfo.__getinitargs__ = __ChangeEventInfo__getinitargs__
+    ChangeEventInfo.__getstate__ = __ChangeEventInfo__getstate__
+    ChangeEventInfo.__setstate__ = __ChangeEventInfo__setstate__
+
+    PeriodicEventInfo.__getinitargs__ = __PeriodicEventInfo__getinitargs__
+    PeriodicEventInfo.__getstate__ = __PeriodicEventInfo__getstate__
+    PeriodicEventInfo.__setstate__ = __PeriodicEventInfo__setstate__
+
+    ArchiveEventInfo.__getinitargs__ = __ArchiveEventInfo__getinitargs__
+    ArchiveEventInfo.__getstate__ = __ArchiveEventInfo__getstate__
+    ArchiveEventInfo.__setstate__ = __ArchiveEventInfo__setstate__
+
+    AttributeEventInfo.__getinitargs__ = __AttributeEventInfo__getinitargs__
+    AttributeEventInfo.__getstate__ = __AttributeEventInfo__getstate__
+    AttributeEventInfo.__setstate__ = __AttributeEventInfo__setstate__
+
+    AttributeInfoEx.__getinitargs__ = __AttributeInfoEx__getinitargs__
+    AttributeInfoEx.__getstate__ = __AttributeInfoEx__getstate__
+    AttributeInfoEx.__setstate__ = __AttributeInfoEx__setstate__
+    
+
 def __doc_base_types():
     
     def document_enum(enum_name, desc):
@@ -383,6 +582,16 @@ def __doc_base_types():
         - OPERATOR
         - EXPERT
     """ )
+
+    document_enum("GreenMode", """
+    An enumeration representing the GreenMode
+    
+        - Synchronous
+        - Futures
+        - Gevent
+    
+    New in PyTango 8.1.0
+    """ )
     
     ArchiveEventInfo.__doc__ = """
     A structure containing available archiving event information for an attribute
diff --git a/src/boost/python/callback.py b/src/boost/python/callback.py
index 6b78bb4..629e01f 100644
--- a/src/boost/python/callback.py
+++ b/src/boost/python/callback.py
@@ -1,25 +1,13 @@
-################################################################################
-##
-## This file is part of PyTango, a python binding for Tango
-## 
-## http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## PyTango is free software: you can redistribute it and/or modify
-## it under the terms of the GNU Lesser General Public License as published by
-## the Free Software Foundation, either version 3 of the License, or
-## (at your option) any later version.
-## 
-## PyTango 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 Lesser General Public License for more details.
-## 
-## You should have received a copy of the GNU Lesser General Public License
-## along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-##
-################################################################################
+# ------------------------------------------------------------------------------
+# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+#
+# Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+# Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+#
+# Distributed under the terms of the GNU Lesser General Public License,
+# either version 3 of the License, or (at your option) any later version.
+# See LICENSE.txt for more info.
+# ------------------------------------------------------------------------------
 
 """
 This is an internal PyTango module.
diff --git a/src/boost/python/client.py b/src/boost/python/client.py
new file mode 100644
index 0000000..de55252
--- /dev/null
+++ b/src/boost/python/client.py
@@ -0,0 +1,18 @@
+# ------------------------------------------------------------------------------
+# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+#
+# Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+# Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+#
+# Distributed under the terms of the GNU Lesser General Public License,
+# either version 3 of the License, or (at your option) any later version.
+# See LICENSE.txt for more info.
+# ------------------------------------------------------------------------------
+
+"""High Level API for writting Tango clients"""
+
+from PyTango import DeviceProxy as Device
+from PyTango import AttributeProxy as Attribute
+from PyTango import Database
+from PyTango import Group
+from PyTango import DeviceAttribute
diff --git a/src/boost/python/connection.py b/src/boost/python/connection.py
index 0245c0b..a576e3f 100644
--- a/src/boost/python/connection.py
+++ b/src/boost/python/connection.py
@@ -1,25 +1,13 @@
-################################################################################
-##
-## This file is part of PyTango, a python binding for Tango
-## 
-## http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## PyTango is free software: you can redistribute it and/or modify
-## it under the terms of the GNU Lesser General Public License as published by
-## the Free Software Foundation, either version 3 of the License, or
-## (at your option) any later version.
-## 
-## PyTango 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 Lesser General Public License for more details.
-## 
-## You should have received a copy of the GNU Lesser General Public License
-## along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-##
-################################################################################
+# ------------------------------------------------------------------------------
+# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+#
+# Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+# Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+#
+# Distributed under the terms of the GNU Lesser General Public License,
+# either version 3 of the License, or (at your option) any later version.
+# See LICENSE.txt for more info.
+# ------------------------------------------------------------------------------
 
 """
 This is an internal PyTango module.
@@ -36,6 +24,7 @@ from ._PyTango import Connection, DeviceData, __CallBackAutoDie, CmdArgType, \
     DeviceProxy, Database, ExtractAs
 from .utils import document_method as __document_method
 from .utils import document_static_method as __document_static_method
+from .green import green
 
 
 def __CallBackAutoDie__cmd_ended_aux(self, fn):
@@ -79,7 +68,7 @@ def __get_command_inout_param(self, cmd_name, cmd_param=None):
 
 def __Connection__command_inout(self, name, *args, **kwds):
     """
-    command_inout( self, cmd_name, cmd_param=None) -> any
+    command_inout( self, cmd_name, cmd_param=None, green_mode=None, wait=True, timeout=None) -> any
 
             Execute a command on a device.
             
@@ -88,9 +77,26 @@ def __Connection__command_inout(self, name, *args, **kwds):
                 - cmd_param : (any) It should be a value of the type expected by the
                               command or a DeviceData object with this value inserted.
                               It can be ommited if the command should not get any argument.
+                - green_mode : (GreenMode) Defaults to the current DeviceProxy GreenMode.
+                               (see :meth:`~PyTango.DeviceProxy.get_green_mode` and
+                               :meth:`~PyTango.DeviceProxy.set_green_mode`).
+                - wait       : (bool) whether or not to wait for result. If green_mode
+                               is *Synchronous*, this parameter is ignored as it always
+                               waits for the result.
+                               Ignored when green_mode is Synchronous (always waits).
+                - timeout    : (float) The number of seconds to wait for the result.
+                               If None, then there is no limit on the wait time.
+                               Ignored when green_mode is Synchronous or wait is False.
         Return     : The result of the command. The type depends on the command. It may be None.
 
         Throws     : ConnectionFailed, CommunicationFailed, DeviceUnlocked, DevFailed from device 
+                     TimeoutError (green_mode == Futures) If the future didn't finish executing before the given timeout.
+                     Timeout (green_mode == Gevent) If the async result didn't finish executing before the given timeout.
+
+    .. versionadded:: 8.1.0
+        *green_mode* parameter.
+        *wait* parameter.
+        *timeout* parameter.
     """
     r = Connection.command_inout_raw(self, name, *args, **kwds)
     if isinstance(r, DeviceData):
@@ -100,6 +106,7 @@ def __Connection__command_inout(self, name, *args, **kwds):
             return None
     else:
         return r
+__Connection__command_inout.__name__ = "command_inout"
 
 def __Connection__command_inout_raw(self, cmd_name, cmd_param = None):
     """
@@ -198,6 +205,7 @@ def __Connection__command_inout_asynch(self, cmd_name, *args):
             return self.__command_inout_asynch_id(cmd_name, argin, forget)
     else:
         raise TypeError("Wrong number of attributes!")
+__Connection__command_inout_asynch.__name__ = "command_inout_asynch"
 
 def __Connection__command_inout_reply(self, idx, timeout=None):
     """
@@ -244,11 +252,12 @@ def __Connection__command_inout_reply(self, idx, timeout=None):
             return None
     else:
         return r
+__Connection__command_inout_reply.__name__ = "command_inout_reply"
     
 def __init_Connection():
     Connection.defaultCommandExtractAs = ExtractAs.Numpy
     Connection.command_inout_raw = __Connection__command_inout_raw
-    Connection.command_inout = __Connection__command_inout
+    Connection.command_inout = green(__Connection__command_inout)
     Connection.command_inout_asynch = __Connection__command_inout_asynch
     Connection.command_inout_reply = __Connection__command_inout_reply
     
diff --git a/src/boost/python/databaseds/database.py b/src/boost/python/databaseds/database.py
index d579778..6092884 100644
--- a/src/boost/python/databaseds/database.py
+++ b/src/boost/python/databaseds/database.py
@@ -1,5 +1,5 @@
 #!/usr/bin/env python
-# -*- coding:utf-8 -*- 
+# -*- coding:utf-8 -*-
 
 
 ##############################################################################
@@ -7,7 +7,7 @@
 ##============================================================================
 ##
 ## File :        DataBase.py
-## 
+##
 ## Project :     TANGO
 ##
 ## $Author :      controls$
@@ -35,6 +35,26 @@ import sys
 # Add additional import
 #----- PROTECTED REGION ID(DataBase.additionnal_import) ENABLED START -----#
 
+import logging
+
+class DbInter(PyTango.Interceptors):
+
+    def create_thread(self):
+        pass
+
+    def delete_thread(self):
+        pass
+
+DB_NAME = None
+
+def set_db_name(db_name):
+    global DB_NAME
+    DB_NAME = db_name
+
+def get_db_name():
+    return DB_NAME
+
+
 import db_access
 
 th_exc = PyTango.Except.throw_exception
@@ -49,7 +69,7 @@ DB_FRONTED = {
 def check_device_name(dev_name):
     if '*' in dev_name:
         return False, None, None
-    
+
     if dev_name.startswith("tango:"):
         dev_name = dev_name[6:]
     elif dev_name.startswith("taco:"):
@@ -62,7 +82,7 @@ def check_device_name(dev_name):
     if len(dfm) != 3:
         return False, None, None
     # check that each element has at least one character
-    if not all(map(len,dfm)):
+    if not all(map(len, dfm)):
         return False, None, None
     return True, dev_name, dfm
 
@@ -78,8 +98,8 @@ def replace_wildcard(text):
     # replace '*' with '%'
     text = text.replace("*", "%")
     return text
-    
- 
+
+
 #----- PROTECTED REGION END -----#	//	DataBase.additionnal_import
 
 ##############################################################################
@@ -100,18 +120,18 @@ class DataBase (PyTango.Device_4Impl):
 #------------------------------------------------------------------
 #    Device constructor
 #------------------------------------------------------------------
-    def __init__(self,cl, name):
-        PyTango.Device_4Impl.__init__(self,cl,name)
+    def __init__(self, cl, name):
+        PyTango.Device_4Impl.__init__(self, cl, name)
         self.debug_stream("In " + self.get_name() + ".__init__()")
         DataBase.init_device(self)
-        
+
 #------------------------------------------------------------------
 #    Device destructor
 #------------------------------------------------------------------
     def delete_device(self):
         self.debug_stream("In " + self.get_name() + ".delete_device()")
         #----- PROTECTED REGION ID(DataBase.delete_device) ENABLED START -----#
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.delete_device
 
 #------------------------------------------------------------------
@@ -119,7 +139,7 @@ class DataBase (PyTango.Device_4Impl):
 #------------------------------------------------------------------
     def init_device(self):
         self.debug_stream("In " + self.get_name() + ".init_device()")
-        self.get_device_properties(self.get_device_class())
+        #self.get_device_properties(self.get_device_class())
         self.attr_StoredProcedureRelease_read = ''
         self.attr_Timing_average_read = [0.0]
         self.attr_Timing_minimum_read = [0.0]
@@ -128,10 +148,10 @@ class DataBase (PyTango.Device_4Impl):
         self.attr_Timing_index_read = ['']
         self.attr_Timing_info_read = ['']
         #----- PROTECTED REGION ID(DataBase.init_device) ENABLED START -----#
-        
+
         self.db = db_access.Tango_sqlite3()
-        
-        
+
+
         #----- PROTECTED REGION END -----#	//	DataBase.init_device
 
 #------------------------------------------------------------------
@@ -140,7 +160,7 @@ class DataBase (PyTango.Device_4Impl):
     def always_executed_hook(self):
         self.debug_stream("In " + self.get_name() + ".always_excuted_hook()")
         #----- PROTECTED REGION ID(DataBase.always_executed_hook) ENABLED START -----#
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.always_executed_hook
 
 #==================================================================
@@ -155,71 +175,69 @@ class DataBase (PyTango.Device_4Impl):
     def read_StoredProcedureRelease(self, attr):
         self.debug_stream("In " + self.get_name() + ".read_StoredProcedureRelease()")
         #----- PROTECTED REGION ID(DataBase.StoredProcedureRelease_read) ENABLED START -----#
-        self.attr_StoredProcedureRelease_read = db.get_stored_procedure_release()
+        self.attr_StoredProcedureRelease_read = self.db.get_stored_procedure_release()
         #----- PROTECTED REGION END -----#	//	DataBase.StoredProcedureRelease_read
         attr.set_value(self.attr_StoredProcedureRelease_read)
-        
+
 #------------------------------------------------------------------
 #    Read Timing_average attribute
 #------------------------------------------------------------------
     def read_Timing_average(self, attr):
         self.debug_stream("In " + self.get_name() + ".read_Timing_average()")
         #----- PROTECTED REGION ID(DataBase.Timing_average_read) ENABLED START -----#
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.Timing_average_read
         attr.set_value(self.attr_Timing_average_read)
-        
+
 #------------------------------------------------------------------
 #    Read Timing_minimum attribute
 #------------------------------------------------------------------
     def read_Timing_minimum(self, attr):
         self.debug_stream("In " + self.get_name() + ".read_Timing_minimum()")
         #----- PROTECTED REGION ID(DataBase.Timing_minimum_read) ENABLED START -----#
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.Timing_minimum_read
         attr.set_value(self.attr_Timing_minimum_read)
-        
+
 #------------------------------------------------------------------
 #    Read Timing_maximum attribute
 #------------------------------------------------------------------
     def read_Timing_maximum(self, attr):
         self.debug_stream("In " + self.get_name() + ".read_Timing_maximum()")
         #----- PROTECTED REGION ID(DataBase.Timing_maximum_read) ENABLED START -----#
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.Timing_maximum_read
         attr.set_value(self.attr_Timing_maximum_read)
-        
+
 #------------------------------------------------------------------
 #    Read Timing_calls attribute
 #------------------------------------------------------------------
     def read_Timing_calls(self, attr):
         self.debug_stream("In " + self.get_name() + ".read_Timing_calls()")
         #----- PROTECTED REGION ID(DataBase.Timing_calls_read) ENABLED START -----#
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.Timing_calls_read
         attr.set_value(self.attr_Timing_calls_read)
-        
+
 #------------------------------------------------------------------
 #    Read Timing_index attribute
 #------------------------------------------------------------------
     def read_Timing_index(self, attr):
         self.debug_stream("In " + self.get_name() + ".read_Timing_index()")
         #----- PROTECTED REGION ID(DataBase.Timing_index_read) ENABLED START -----#
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.Timing_index_read
         attr.set_value(self.attr_Timing_index_read)
-        
+
 #------------------------------------------------------------------
 #    Read Timing_info attribute
 #------------------------------------------------------------------
     def read_Timing_info(self, attr):
         self.debug_stream("In " + self.get_name() + ".read_Timing_info()")
         #----- PROTECTED REGION ID(DataBase.Timing_info_read) ENABLED START -----#
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.Timing_info_read
         attr.set_value(self.attr_Timing_info_read)
-        
-
 
 
 #------------------------------------------------------------------
@@ -228,7 +246,7 @@ class DataBase (PyTango.Device_4Impl):
     def read_attr_hardware(self, data):
         self.debug_stream("In " + self.get_name() + ".read_attr_hardware()")
         #----- PROTECTED REGION ID(DataBase.read_attr_hardware) ENABLED START -----#
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.read_attr_hardware
 
 
@@ -250,32 +268,32 @@ class DataBase (PyTango.Device_4Impl):
         :type: PyTango.DevVarStringArray
         :return: 
         :rtype: PyTango.DevVoid """
-        self.debug_stream("In " + self.get_name() +  ".DbAddDevice()")
+        self.debug_stream("In " + self.get_name() + ".DbAddDevice()")
         #----- PROTECTED REGION ID(DataBase.DbAddDevice) ENABLED START -----#
-        
+
         if len(argin) < 3:
             self.warn_stream("DataBase::AddDevice(): incorrect number of input arguments ")
-            th_exc(DB_IncorrectArguments, 
+            th_exc(DB_IncorrectArguments,
                    "incorrect no. of input arguments, needs at least 3 (server,device,class)",
                    "DataBase::AddDevice()")
-        
+
         self.info_stream("DataBase::AddDevice(): insert " + argin[0] + " %s server with device " + argin[1])
         server_name, d_name, klass_name = argin[:3]
         if len(argin) > 3:
             alias = argin[3]
         else:
-            alias = None                
-    
+            alias = None
+
         ret, dev_name, dfm = check_device_name(d_name)
         if not ret:
-            th_exc(DB_IncorrectDeviceName, 
+            th_exc(DB_IncorrectDeviceName,
                   "device name (" + d_name + ") syntax error (should be [tango:][//instance/]domain/family/member)",
                   "DataBase::AddDevice()")
         # Lock table
         self.db.add_device(server_name, (dev_name, dfm) , klass_name, alias=alias)
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbAddDevice
-        
+
 #------------------------------------------------------------------
 #    DbAddServer command:
 #------------------------------------------------------------------
@@ -290,32 +308,32 @@ class DataBase (PyTango.Device_4Impl):
         :type: PyTango.DevVarStringArray
         :return: 
         :rtype: PyTango.DevVoid """
-        self.debug_stream("In " + self.get_name() +  ".DbAddServer()")
+        self.debug_stream("In " + self.get_name() + ".DbAddServer()")
         #----- PROTECTED REGION ID(DataBase.DbAddServer) ENABLED START -----#
-        
+
         if len(argin) < 3 or not len(argin) % 2:
             self.warn_stream("DataBase::AddServer(): incorrect number of input arguments ")
-            th_exc(DB_IncorrectArguments, 
+            th_exc(DB_IncorrectArguments,
                    "incorrect no. of input arguments, needs at least 3 (server,device,class)",
-                   "DataBase::AddServer()")        
+                   "DataBase::AddServer()")
         server_name = argin[0]
-        
+
         db = self.db
         cursor = db.get_cursor()
-        for i in range((len(argin)-1)/2):
-            d_name, klass_name = argin[i*2+1], argin[i*2+2]
+        for i in range((len(argin) - 1) / 2):
+            d_name, klass_name = argin[i * 2 + 1], argin[i * 2 + 2]
             ret, dev_name, dfm = check_device_name(d_name)
             if not ret:
-                th_exc(DB_IncorrectDeviceName, 
+                th_exc(DB_IncorrectDeviceName,
                       "device name (" + d_name + ") syntax error (should be [tango:][//instance/]domain/family/member)",
                       "DataBase::AddServer()")
             db.add_device(server_name, (dev_name, dfm) , klass_name, cursor=cursor)
-        
+
         cursor.connection.commit()
         cursor.close()
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbAddServer
-        
+
 #------------------------------------------------------------------
 #    DbDeleteAttributeAlias command:
 #------------------------------------------------------------------
@@ -326,13 +344,13 @@ class DataBase (PyTango.Device_4Impl):
         :type: PyTango.DevString
         :return: 
         :rtype: PyTango.DevVoid """
-        self.debug_stream("In " + self.get_name() +  ".DbDeleteAttributeAlias()")
+        self.debug_stream("In " + self.get_name() + ".DbDeleteAttributeAlias()")
         #----- PROTECTED REGION ID(DataBase.DbDeleteAttributeAlias) ENABLED START -----#
-        
+
         self.db.delete_attribute_alias(argin)
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbDeleteAttributeAlias
-        
+
 #------------------------------------------------------------------
 #    DbDeleteClassAttribute command:
 #------------------------------------------------------------------
@@ -344,21 +362,21 @@ class DataBase (PyTango.Device_4Impl):
         :type: PyTango.DevVarStringArray
         :return: 
         :rtype: PyTango.DevVoid """
-        self.debug_stream("In " + self.get_name() +  ".DbDeleteClassAttribute()")
+        self.debug_stream("In " + self.get_name() + ".DbDeleteClassAttribute()")
         #----- PROTECTED REGION ID(DataBase.DbDeleteClassAttribute) ENABLED START -----#
-        
+
         if len(argin) < 2:
             self.warn_stream("DataBase::db_delete_class_attribute(): insufficient number of arguments ")
-            th_exc(DB_IncorrectArguments, 
+            th_exc(DB_IncorrectArguments,
                    "insufficient number of arguments to delete class attribute",
                    "DataBase::DeleteClassAttribute()")
-        
+
         klass_name, attr_name = argin[:2]
-                
+
         self.db.delete_class_attribute(klass_name, attr_name)
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbDeleteClassAttribute
-        
+
 #------------------------------------------------------------------
 #    DbDeleteClassAttributeProperty command:
 #------------------------------------------------------------------
@@ -372,26 +390,26 @@ class DataBase (PyTango.Device_4Impl):
         :type: PyTango.DevVarStringArray
         :return: 
         :rtype: PyTango.DevVoid """
-        self.debug_stream("In " + self.get_name() +  ".DbDeleteClassAttributeProperty()")
+        self.debug_stream("In " + self.get_name() + ".DbDeleteClassAttributeProperty()")
         #----- PROTECTED REGION ID(DataBase.DbDeleteClassAttributeProperty) ENABLED START -----#
 
         if len(argin) < 3:
             self.warn_stream("DataBase::db_delete_class_attribute_property(): insufficient number of arguments ")
-            th_exc(DB_IncorrectArguments, 
+            th_exc(DB_IncorrectArguments,
                    "insufficient number of arguments to delete class attribute property",
                    "DataBase::DeleteClassAttributeProperty()")
-        
+
         klass_name, attr_name = argin[:2]
 
-        db = self.db 
-        cursor = db.get_cursor()        
+        db = self.db
+        cursor = db.get_cursor()
         for prop_name in argin[2:]:
             db.delete_class_attribute_property(klass_name, attr_name, prop_name, cursor=cursor)
         cursor.connection.commit()
-        cursor.close()            
+        cursor.close()
 
         #----- PROTECTED REGION END -----#	//	DataBase.DbDeleteClassAttributeProperty
-        
+
 #------------------------------------------------------------------
 #    DbDeleteClassProperty command:
 #------------------------------------------------------------------
@@ -404,20 +422,20 @@ class DataBase (PyTango.Device_4Impl):
         :type: PyTango.DevVarStringArray
         :return: 
         :rtype: PyTango.DevVoid """
-        self.debug_stream("In " + self.get_name() +  ".DbDeleteClassProperty()")
+        self.debug_stream("In " + self.get_name() + ".DbDeleteClassProperty()")
         #----- PROTECTED REGION ID(DataBase.DbDeleteClassProperty) ENABLED START -----#
-        
+
         klass_name = argin[0]
-        
+
         db = self.db
         cursor = db.get_cursor()
         for prop_name in argin[1:]:
             db.delete_class_property(prop_name, cursor=cursor)
         cursor.connection.commit()
         cursor.close()
-                
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbDeleteClassProperty
-        
+
 #------------------------------------------------------------------
 #    DbDeleteDevice command:
 #------------------------------------------------------------------
@@ -428,19 +446,19 @@ class DataBase (PyTango.Device_4Impl):
         :type: PyTango.DevString
         :return: 
         :rtype: PyTango.DevVoid """
-        self.debug_stream("In " + self.get_name() +  ".DbDeleteDevice()")
+        self.debug_stream("In " + self.get_name() + ".DbDeleteDevice()")
         #----- PROTECTED REGION ID(DataBase.DbDeleteDevice) ENABLED START -----#
-        
+
         ret, dev_name, dfm = check_device_name(argin)
         if not ret:
             self.warn_stream("DataBase::db_delete_device(): device name " + argin + " incorrect ")
-            th_exc(DB_IncorrectDeviceName, 
+            th_exc(DB_IncorrectDeviceName,
                    "failed to delete device, device name incorrect",
                    "DataBase::DeleteDevice()")
         self.db.delete_device(dev_name)
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbDeleteDevice
-        
+
 #------------------------------------------------------------------
 #    DbDeleteDeviceAlias command:
 #------------------------------------------------------------------
@@ -451,13 +469,13 @@ class DataBase (PyTango.Device_4Impl):
         :type: PyTango.DevString
         :return: 
         :rtype: PyTango.DevVoid """
-        self.debug_stream("In " + self.get_name() +  ".DbDeleteDeviceAlias()")
+        self.debug_stream("In " + self.get_name() + ".DbDeleteDeviceAlias()")
         #----- PROTECTED REGION ID(DataBase.DbDeleteDeviceAlias) ENABLED START -----#
-        
+
         self.db.delete_device_alias(argin)
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbDeleteDeviceAlias
-        
+
 #------------------------------------------------------------------
 #    DbDeleteDeviceAttribute command:
 #------------------------------------------------------------------
@@ -469,28 +487,28 @@ class DataBase (PyTango.Device_4Impl):
         :type: PyTango.DevVarStringArray
         :return: 
         :rtype: PyTango.DevVoid """
-        self.debug_stream("In " + self.get_name() +  ".DbDeleteDeviceAttribute()")
+        self.debug_stream("In " + self.get_name() + ".DbDeleteDeviceAttribute()")
         #----- PROTECTED REGION ID(DataBase.DbDeleteDeviceAttribute) ENABLED START -----#
-        
+
         if len(argin) < 2:
             self.warn_stream("DataBase::db_delete_device_attribute(): insufficient number of arguments ")
-            th_exc(DB_IncorrectArguments, 
+            th_exc(DB_IncorrectArguments,
                    "insufficient number of arguments to delete device attribute",
                    "DataBase::DeleteDeviceAttribute()")
-        
+
         dev_name, attr_name = argin[:2]
 
         ret, dev_name, dfm = check_device_name(argin)
         if not ret:
             self.warn_stream("DataBase::db_delete_device_attribute(): device name " + dev_name + " incorrect ")
-            th_exc(DB_IncorrectDeviceName, 
+            th_exc(DB_IncorrectDeviceName,
                    "failed to delete device attribute, device name incorrect",
-                   "DataBase::DeleteDeviceAttribute()")        
-        
+                   "DataBase::DeleteDeviceAttribute()")
+
         self.db.delete_device_attribute(dev_name, attr_name)
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbDeleteDeviceAttribute
-        
+
 #------------------------------------------------------------------
 #    DbDeleteDeviceAttributeProperty command:
 #------------------------------------------------------------------
@@ -504,35 +522,35 @@ class DataBase (PyTango.Device_4Impl):
         :type: PyTango.DevVarStringArray
         :return: 
         :rtype: PyTango.DevVoid """
-        self.debug_stream("In " + self.get_name() +  ".DbDeleteDeviceAttributeProperty()")
+        self.debug_stream("In " + self.get_name() + ".DbDeleteDeviceAttributeProperty()")
         #----- PROTECTED REGION ID(DataBase.DbDeleteDeviceAttributeProperty) ENABLED START -----#
 
         if len(argin) < 3:
             self.warn_stream("DataBase::db_delete_device_attribute_property(): insufficient number of arguments ")
-            th_exc(DB_IncorrectArguments, 
+            th_exc(DB_IncorrectArguments,
                    "insufficient number of arguments to delete device attribute property",
                    "DataBase::DeleteDeviceAttributeProperty()")
-        
+
         dev_name, attr_name = argin[:2]
 
         ret, dev_name, dfm = check_device_name(argin)
         if not ret:
             self.warn_stream("DataBase::db_delete_device_attribute_property(): device name " + dev_name + " incorrect ")
-            th_exc(DB_IncorrectDeviceName, 
+            th_exc(DB_IncorrectDeviceName,
                    "failed to delete device attribute property, device name incorrect",
-                   "DataBase::DeleteDeviceAttributeProperty()")        
-        
+                   "DataBase::DeleteDeviceAttributeProperty()")
+
         db = self.db
         cursor = db.get_cursor()
         for prop_name in argin[2:]:
             self.db.delete_device_attribute_property(dev_name, attr_name, prop_name, cursor=cursor)
         cursor.connection.commit()
         cursor.close()
-                
-        
-                
+
+
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbDeleteDeviceAttributeProperty
-        
+
 #------------------------------------------------------------------
 #    DbDeleteDeviceProperty command:
 #------------------------------------------------------------------
@@ -545,19 +563,19 @@ class DataBase (PyTango.Device_4Impl):
         :type: PyTango.DevVarStringArray
         :return: 
         :rtype: PyTango.DevVoid """
-        self.debug_stream("In " + self.get_name() +  ".DbDeleteDeviceProperty()")
+        self.debug_stream("In " + self.get_name() + ".DbDeleteDeviceProperty()")
         #----- PROTECTED REGION ID(DataBase.DbDeleteDeviceProperty) ENABLED START -----#
 
         dev_name = argin[0]
         db = self.db
-        cursor = db.get_cursor()        
+        cursor = db.get_cursor()
         for prop_name in argin[1:]:
             self.db.delete_device_property(dev_name, prop_name)
         cursor.connection.commit()
         cursor.close()
-                   
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbDeleteDeviceProperty
-        
+
 #------------------------------------------------------------------
 #    DbDeleteProperty command:
 #------------------------------------------------------------------
@@ -570,19 +588,19 @@ class DataBase (PyTango.Device_4Impl):
         :type: PyTango.DevVarStringArray
         :return: 
         :rtype: PyTango.DevVoid """
-        self.debug_stream("In " + self.get_name() +  ".DbDeleteProperty()")
+        self.debug_stream("In " + self.get_name() + ".DbDeleteProperty()")
         #----- PROTECTED REGION ID(DataBase.DbDeleteProperty) ENABLED START -----#
-        
+
         obj_name = argin[0];
         db = self.db
-        cursor = db.get_cursor()        
+        cursor = db.get_cursor()
         for prop_name in argin[1:]:
             self.db.delete_property(obj_name, prop_name)
         cursor.connection.commit()
-        cursor.close()        
-        
+        cursor.close()
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbDeleteProperty
-        
+
 #------------------------------------------------------------------
 #    DbDeleteServer command:
 #------------------------------------------------------------------
@@ -593,19 +611,19 @@ class DataBase (PyTango.Device_4Impl):
         :type: PyTango.DevString
         :return: 
         :rtype: PyTango.DevVoid """
-        self.debug_stream("In " + self.get_name() +  ".DbDeleteServer()")
+        self.debug_stream("In " + self.get_name() + ".DbDeleteServer()")
         #----- PROTECTED REGION ID(DataBase.DbDeleteServer) ENABLED START -----#
 
         if '*' in argin or '%' in argin or not '/' in argin:
             self.warn_stream("DataBase::db_delete_server(): server name " + argin + " incorrect ")
-            th_exc(DB_IncorrectServerName, 
+            th_exc(DB_IncorrectServerName,
                    "failed to delete server, server name incorrect",
                    "DataBase::DeleteServer()")
-            
+
         self.db.delete_server(argin)
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbDeleteServer
-        
+
 #------------------------------------------------------------------
 #    DbDeleteServerInfo command:
 #------------------------------------------------------------------
@@ -616,13 +634,13 @@ class DataBase (PyTango.Device_4Impl):
         :type: PyTango.DevString
         :return: 
         :rtype: PyTango.DevVoid """
-        self.debug_stream("In " + self.get_name() +  ".DbDeleteServerInfo()")
+        self.debug_stream("In " + self.get_name() + ".DbDeleteServerInfo()")
         #----- PROTECTED REGION ID(DataBase.DbDeleteServerInfo) ENABLED START -----#
-        
+
         self.db.delete_server_info(argin)
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbDeleteServerInfo
-        
+
 #------------------------------------------------------------------
 #    DbExportDevice command:
 #------------------------------------------------------------------
@@ -637,22 +655,22 @@ class DataBase (PyTango.Device_4Impl):
         :type: PyTango.DevVarStringArray
         :return: 
         :rtype: PyTango.DevVoid """
-        self.debug_stream("In " + self.get_name() +  ".DbExportDevice()")
+        self.debug_stream("In " + self.get_name() + ".DbExportDevice()")
         #----- PROTECTED REGION ID(DataBase.DbExportDevice) ENABLED START -----#
-        
+
         if len(argin) < 5:
             self.warn_stream("DataBase::DbExportDevice(): insufficient export info for device ")
-            th_exc(DB_IncorrectArguments, 
+            th_exc(DB_IncorrectArguments,
                    "insufficient export info for device",
-                   "DataBase::ExportDevice()")        
-        
+                   "DataBase::ExportDevice()")
+
         dev_name, IOR, host, pid, version = argin[:5]
-        if pid.lower() == 'null'):
+        if pid.lower() == 'null':
             pid = "-1"
         self.db.export_device(dev_name, IOR, host, pid, version)
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbExportDevice
-        
+
 #------------------------------------------------------------------
 #    DbExportEvent command:
 #------------------------------------------------------------------
@@ -667,21 +685,21 @@ class DataBase (PyTango.Device_4Impl):
         :type: PyTango.DevVarStringArray
         :return: 
         :rtype: PyTango.DevVoid """
-        self.debug_stream("In " + self.get_name() +  ".DbExportEvent()")
+        self.debug_stream("In " + self.get_name() + ".DbExportEvent()")
         #----- PROTECTED REGION ID(DataBase.DbExportEvent) ENABLED START -----#
-        
-         if len(argin) < 5:
+
+        if len(argin) < 5:
             self.warn_stream("DataBase::db_export_event(): insufficient export info for event ")
-            th_exc(DB_IncorrectArguments, 
+            th_exc(DB_IncorrectArguments,
                    "insufficient export info for event",
-                   "DataBase::ExportEvent()")             
-        
+                   "DataBase::ExportEvent()")
+
         event, IOR, host, pid, version = argin[:5]
         event = replace_wildcard(event.lower())
         self.db.export_event(event, IOR, host, pid, version)
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbExportEvent
-        
+
 #------------------------------------------------------------------
 #    DbGetAliasDevice command:
 #------------------------------------------------------------------
@@ -692,20 +710,20 @@ class DataBase (PyTango.Device_4Impl):
         :type: PyTango.DevString
         :return: Device name
         :rtype: PyTango.DevString """
-        self.debug_stream("In " + self.get_name() +  ".DbGetAliasDevice()")
+        self.debug_stream("In " + self.get_name() + ".DbGetAliasDevice()")
         argout = ''
         #----- PROTECTED REGION ID(DataBase.DbGetAliasDevice) ENABLED START -----#
 
         if not argin:
             argin = "%"
         else:
-            argin = replace_wildcard(argin)     
-        
+            argin = replace_wildcard(argin)
+
         argout = self.db.get_alias_device(argin)
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbGetAliasDevice
         return argout
-        
+
 #------------------------------------------------------------------
 #    DbGetAttributeAlias command:
 #------------------------------------------------------------------
@@ -717,15 +735,15 @@ class DataBase (PyTango.Device_4Impl):
         :type: PyTango.DevString
         :return: The attribute name (device/attribute)
         :rtype: PyTango.DevString """
-        self.debug_stream("In " + self.get_name() +  ".DbGetAttributeAlias()")
+        self.debug_stream("In " + self.get_name() + ".DbGetAttributeAlias()")
         argout = ''
         #----- PROTECTED REGION ID(DataBase.DbGetAttributeAlias) ENABLED START -----#
-        
+
         argout = self.db.get_attribute_alias(argin)
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbGetAttributeAlias
         return argout
-        
+
 #------------------------------------------------------------------
 #    DbGetAttributeAliasList command:
 #------------------------------------------------------------------
@@ -736,20 +754,20 @@ class DataBase (PyTango.Device_4Impl):
         :type: PyTango.DevString
         :return: attribute aliases
         :rtype: PyTango.DevVarStringArray """
-        self.debug_stream("In " + self.get_name() +  ".DbGetAttributeAliasList()")
+        self.debug_stream("In " + self.get_name() + ".DbGetAttributeAliasList()")
         argout = ['']
         #----- PROTECTED REGION ID(DataBase.DbGetAttributeAliasList) ENABLED START -----#
-        
+
         if not argin:
             argin = "%"
         else:
-            argin = replace_wildcard(argin)     
-        
+            argin = replace_wildcard(argin)
+
         argout = self.db.get_attribute_alias_list(argin)
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbGetAttributeAliasList
         return argout
-        
+
 #------------------------------------------------------------------
 #    DbGetClassAttributeList command:
 #------------------------------------------------------------------
@@ -762,15 +780,21 @@ class DataBase (PyTango.Device_4Impl):
         :return: Str[0] = Class attribute name
         Str[n] = Class attribute name
         :rtype: PyTango.DevVarStringArray """
-        self.debug_stream("In " + self.get_name() +  ".DbGetClassAttributeList()")
+        self.debug_stream("In " + self.get_name() + ".DbGetClassAttributeList()")
         argout = ['']
         #----- PROTECTED REGION ID(DataBase.DbGetClassAttributeList) ENABLED START -----#
-        
-        
-        
+
+        class_name = argin[0]
+        if len(argin) > 1:
+            wildcard = replace_wildcard(argin[1])
+        else:
+            wildcard = "%"
+
+        argout = self.db.get_class_attribute_list(class_name, wildcard)
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbGetClassAttributeList
         return argout
-        
+
 #------------------------------------------------------------------
 #    DbGetClassAttributeProperty command:
 #------------------------------------------------------------------
@@ -788,13 +812,16 @@ class DataBase (PyTango.Device_4Impl):
         Str[n + 1] = Attribute property 2 name
         Str[n + 2] = Attribute property 2 value
         :rtype: PyTango.DevVarStringArray """
-        self.debug_stream("In " + self.get_name() +  ".DbGetClassAttributeProperty()")
+        self.debug_stream("In " + self.get_name() + ".DbGetClassAttributeProperty()")
         argout = ['']
         #----- PROTECTED REGION ID(DataBase.DbGetClassAttributeProperty) ENABLED START -----#
-        
+
+        class_name = argin[0]
+        argout = self.db.get_class_attribute_property(clas_name, argout[1:])
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbGetClassAttributeProperty
         return argout
-        
+
 #------------------------------------------------------------------
 #    DbGetClassAttributeProperty2 command:
 #------------------------------------------------------------------
@@ -818,13 +845,16 @@ class DataBase (PyTango.Device_4Impl):
         Str[n + 3] = Attribute property 2 value
         Str[n + m] = Attribute property 2 value (array case)
         :rtype: PyTango.DevVarStringArray """
-        self.debug_stream("In " + self.get_name() +  ".DbGetClassAttributeProperty2()")
+        self.debug_stream("In " + self.get_name() + ".DbGetClassAttributeProperty2()")
         argout = ['']
         #----- PROTECTED REGION ID(DataBase.DbGetClassAttributeProperty2) ENABLED START -----#
-        
+
+        class_name = argin[0]
+        argout = self.db.get_class_attribute_property2(clas_name, argout[1:])
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbGetClassAttributeProperty2
         return argout
-        
+
 #------------------------------------------------------------------
 #    DbGetClassAttributePropertyHist command:
 #------------------------------------------------------------------
@@ -842,13 +872,13 @@ class DataBase (PyTango.Device_4Impl):
         Str[4] = Property value 1
         Str[n] = Property value n
         :rtype: PyTango.DevVarStringArray """
-        self.debug_stream("In " + self.get_name() +  ".DbGetClassAttributePropertyHist()")
+        self.debug_stream("In " + self.get_name() + ".DbGetClassAttributePropertyHist()")
         argout = ['']
         #----- PROTECTED REGION ID(DataBase.DbGetClassAttributePropertyHist) ENABLED START -----#
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbGetClassAttributePropertyHist
         return argout
-        
+
 #------------------------------------------------------------------
 #    DbGetClassForDevice command:
 #------------------------------------------------------------------
@@ -859,13 +889,15 @@ class DataBase (PyTango.Device_4Impl):
         :type: PyTango.DevString
         :return: Device Tango class
         :rtype: PyTango.DevString """
-        self.debug_stream("In " + self.get_name() +  ".DbGetClassForDevice()")
+        self.debug_stream("In " + self.get_name() + ".DbGetClassForDevice()")
         argout = ''
         #----- PROTECTED REGION ID(DataBase.DbGetClassForDevice) ENABLED START -----#
-        
+
+        argout = self.db.get_class_for_device(argin)
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbGetClassForDevice
         return argout
-        
+
 #------------------------------------------------------------------
 #    DbGetClassInheritanceForDevice command:
 #------------------------------------------------------------------
@@ -879,13 +911,15 @@ class DataBase (PyTango.Device_4Impl):
         [1] - is the class from the device class is inherited.
         ........and so on
         :rtype: PyTango.DevVarStringArray """
-        self.debug_stream("In " + self.get_name() +  ".DbGetClassInheritanceForDevice()")
+        self.debug_stream("In " + self.get_name() + ".DbGetClassInheritanceForDevice()")
         argout = ['']
         #----- PROTECTED REGION ID(DataBase.DbGetClassInheritanceForDevice) ENABLED START -----#
-        
+
+        argout = self.db.get_class_inheritance_for_device(argin)
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbGetClassInheritanceForDevice
         return argout
-        
+
 #------------------------------------------------------------------
 #    DbGetClassList command:
 #------------------------------------------------------------------
@@ -896,13 +930,16 @@ class DataBase (PyTango.Device_4Impl):
         :type: PyTango.DevString
         :return: Class list
         :rtype: PyTango.DevVarStringArray """
-        self.debug_stream("In " + self.get_name() +  ".DbGetClassList()")
+        self.debug_stream("In " + self.get_name() + ".DbGetClassList()")
         argout = ['']
         #----- PROTECTED REGION ID(DataBase.DbGetClassList) ENABLED START -----#
-        
+
+        server = replace_wildcard(argin)
+        argout = self.db.get_class_list(server)
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbGetClassList
         return argout
-        
+
 #------------------------------------------------------------------
 #    DbGetClassProperty command:
 #------------------------------------------------------------------
@@ -921,13 +958,13 @@ class DataBase (PyTango.Device_4Impl):
         Str[n] = Propery value (array case)
         ....
         :rtype: PyTango.DevVarStringArray """
-        self.debug_stream("In " + self.get_name() +  ".DbGetClassProperty()")
+        self.debug_stream("In " + self.get_name() + ".DbGetClassProperty()")
         argout = ['']
         #----- PROTECTED REGION ID(DataBase.DbGetClassProperty) ENABLED START -----#
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbGetClassProperty
         return argout
-        
+
 #------------------------------------------------------------------
 #    DbGetClassPropertyHist command:
 #------------------------------------------------------------------
@@ -943,13 +980,13 @@ class DataBase (PyTango.Device_4Impl):
         Str[3] = Property value 1
         Str[n] = Property value n
         :rtype: PyTango.DevVarStringArray """
-        self.debug_stream("In " + self.get_name() +  ".DbGetClassPropertyHist()")
+        self.debug_stream("In " + self.get_name() + ".DbGetClassPropertyHist()")
         argout = ['']
         #----- PROTECTED REGION ID(DataBase.DbGetClassPropertyHist) ENABLED START -----#
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbGetClassPropertyHist
         return argout
-        
+
 #------------------------------------------------------------------
 #    DbGetClassPropertyList command:
 #------------------------------------------------------------------
@@ -960,13 +997,13 @@ class DataBase (PyTango.Device_4Impl):
         :type: PyTango.DevString
         :return: Property name list
         :rtype: PyTango.DevVarStringArray """
-        self.debug_stream("In " + self.get_name() +  ".DbGetClassPropertyList()")
+        self.debug_stream("In " + self.get_name() + ".DbGetClassPropertyList()")
         argout = ['']
         #----- PROTECTED REGION ID(DataBase.DbGetClassPropertyList) ENABLED START -----#
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbGetClassPropertyList
         return argout
-        
+
 #------------------------------------------------------------------
 #    DbGetDeviceAlias command:
 #------------------------------------------------------------------
@@ -977,13 +1014,13 @@ class DataBase (PyTango.Device_4Impl):
         :type: PyTango.DevString
         :return: The alias found
         :rtype: PyTango.DevString """
-        self.debug_stream("In " + self.get_name() +  ".DbGetDeviceAlias()")
+        self.debug_stream("In " + self.get_name() + ".DbGetDeviceAlias()")
         argout = ''
         #----- PROTECTED REGION ID(DataBase.DbGetDeviceAlias) ENABLED START -----#
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbGetDeviceAlias
         return argout
-        
+
 #------------------------------------------------------------------
 #    DbGetDeviceAliasList command:
 #------------------------------------------------------------------
@@ -994,13 +1031,13 @@ class DataBase (PyTango.Device_4Impl):
         :type: PyTango.DevString
         :return: Device alias list
         :rtype: PyTango.DevVarStringArray """
-        self.debug_stream("In " + self.get_name() +  ".DbGetDeviceAliasList()")
+        self.debug_stream("In " + self.get_name() + ".DbGetDeviceAliasList()")
         argout = ['']
         #----- PROTECTED REGION ID(DataBase.DbGetDeviceAliasList) ENABLED START -----#
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbGetDeviceAliasList
         return argout
-        
+
 #------------------------------------------------------------------
 #    DbGetDeviceAttributeList command:
 #------------------------------------------------------------------
@@ -1013,13 +1050,13 @@ class DataBase (PyTango.Device_4Impl):
         :type: PyTango.DevVarStringArray
         :return: attribute name list
         :rtype: PyTango.DevVarStringArray """
-        self.debug_stream("In " + self.get_name() +  ".DbGetDeviceAttributeList()")
+        self.debug_stream("In " + self.get_name() + ".DbGetDeviceAttributeList()")
         argout = ['']
         #----- PROTECTED REGION ID(DataBase.DbGetDeviceAttributeList) ENABLED START -----#
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbGetDeviceAttributeList
         return argout
-        
+
 #------------------------------------------------------------------
 #    DbGetDeviceAttributeProperty command:
 #------------------------------------------------------------------
@@ -1037,13 +1074,13 @@ class DataBase (PyTango.Device_4Impl):
         Str[n + 1] = Attribute property 2 name
         Str[n + 2] = Attribute property 2 value
         :rtype: PyTango.DevVarStringArray """
-        self.debug_stream("In " + self.get_name() +  ".DbGetDeviceAttributeProperty()")
+        self.debug_stream("In " + self.get_name() + ".DbGetDeviceAttributeProperty()")
         argout = ['']
         #----- PROTECTED REGION ID(DataBase.DbGetDeviceAttributeProperty) ENABLED START -----#
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbGetDeviceAttributeProperty
         return argout
-        
+
 #------------------------------------------------------------------
 #    DbGetDeviceAttributeProperty2 command:
 #------------------------------------------------------------------
@@ -1068,13 +1105,13 @@ class DataBase (PyTango.Device_4Impl):
         Str[n + 3] = Attribute property 2 value
         Str[n + m] = Attribute property 2 value (array case)
         :rtype: PyTango.DevVarStringArray """
-        self.debug_stream("In " + self.get_name() +  ".DbGetDeviceAttributeProperty2()")
+        self.debug_stream("In " + self.get_name() + ".DbGetDeviceAttributeProperty2()")
         argout = ['']
         #----- PROTECTED REGION ID(DataBase.DbGetDeviceAttributeProperty2) ENABLED START -----#
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbGetDeviceAttributeProperty2
         return argout
-        
+
 #------------------------------------------------------------------
 #    DbGetDeviceAttributePropertyHist command:
 #------------------------------------------------------------------
@@ -1092,13 +1129,13 @@ class DataBase (PyTango.Device_4Impl):
         Str[4] = Property value 1
         Str[n] = Property value n
         :rtype: PyTango.DevVarStringArray """
-        self.debug_stream("In " + self.get_name() +  ".DbGetDeviceAttributePropertyHist()")
+        self.debug_stream("In " + self.get_name() + ".DbGetDeviceAttributePropertyHist()")
         argout = ['']
         #----- PROTECTED REGION ID(DataBase.DbGetDeviceAttributePropertyHist) ENABLED START -----#
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbGetDeviceAttributePropertyHist
         return argout
-        
+
 #------------------------------------------------------------------
 #    DbGetDeviceClassList command:
 #------------------------------------------------------------------
@@ -1112,13 +1149,13 @@ class DataBase (PyTango.Device_4Impl):
         Str[n] = Device name
         Str[n + 1] = Tango class
         :rtype: PyTango.DevVarStringArray """
-        self.debug_stream("In " + self.get_name() +  ".DbGetDeviceClassList()")
+        self.debug_stream("In " + self.get_name() + ".DbGetDeviceClassList()")
         argout = ['']
         #----- PROTECTED REGION ID(DataBase.DbGetDeviceClassList) ENABLED START -----#
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbGetDeviceClassList
         return argout
-        
+
 #------------------------------------------------------------------
 #    DbGetDeviceDomainList command:
 #------------------------------------------------------------------
@@ -1129,13 +1166,13 @@ class DataBase (PyTango.Device_4Impl):
         :type: PyTango.DevString
         :return: Device name domain list
         :rtype: PyTango.DevVarStringArray """
-        self.debug_stream("In " + self.get_name() +  ".DbGetDeviceDomainList()")
+        self.debug_stream("In " + self.get_name() + ".DbGetDeviceDomainList()")
         argout = ['']
         #----- PROTECTED REGION ID(DataBase.DbGetDeviceDomainList) ENABLED START -----#
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbGetDeviceDomainList
         return argout
-        
+
 #------------------------------------------------------------------
 #    DbGetDeviceExportedList command:
 #------------------------------------------------------------------
@@ -1146,13 +1183,13 @@ class DataBase (PyTango.Device_4Impl):
         :type: PyTango.DevString
         :return: list of exported devices
         :rtype: PyTango.DevVarStringArray """
-        self.debug_stream("In " + self.get_name() +  ".DbGetDeviceExportedList()")
+        self.debug_stream("In " + self.get_name() + ".DbGetDeviceExportedList()")
         argout = ['']
         #----- PROTECTED REGION ID(DataBase.DbGetDeviceExportedList) ENABLED START -----#
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbGetDeviceExportedList
         return argout
-        
+
 #------------------------------------------------------------------
 #    DbGetDeviceFamilyList command:
 #------------------------------------------------------------------
@@ -1164,13 +1201,13 @@ class DataBase (PyTango.Device_4Impl):
         :type: PyTango.DevString
         :return: Family list
         :rtype: PyTango.DevVarStringArray """
-        self.debug_stream("In " + self.get_name() +  ".DbGetDeviceFamilyList()")
+        self.debug_stream("In " + self.get_name() + ".DbGetDeviceFamilyList()")
         argout = ['']
         #----- PROTECTED REGION ID(DataBase.DbGetDeviceFamilyList) ENABLED START -----#
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbGetDeviceFamilyList
         return argout
-        
+
 #------------------------------------------------------------------
 #    DbGetDeviceInfo command:
 #------------------------------------------------------------------
@@ -1191,13 +1228,13 @@ class DataBase (PyTango.Device_4Impl):
         Lg[0] = Device exported flag
         Lg[1] = Device Server process PID (or -1 if not set)
         :rtype: PyTango.DevVarLongStringArray """
-        self.debug_stream("In " + self.get_name() +  ".DbGetDeviceInfo()")
-        argout = [0],['']
+        self.debug_stream("In " + self.get_name() + ".DbGetDeviceInfo()")
+        argout = [0], ['']
         #----- PROTECTED REGION ID(DataBase.DbGetDeviceInfo) ENABLED START -----#
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbGetDeviceInfo
         return argout
-        
+
 #------------------------------------------------------------------
 #    DbGetDeviceList command:
 #------------------------------------------------------------------
@@ -1209,13 +1246,13 @@ class DataBase (PyTango.Device_4Impl):
         :type: PyTango.DevVarStringArray
         :return: The list of devices for specified server and class.
         :rtype: PyTango.DevVarStringArray """
-        self.debug_stream("In " + self.get_name() +  ".DbGetDeviceList()")
+        self.debug_stream("In " + self.get_name() + ".DbGetDeviceList()")
         argout = ['']
         #----- PROTECTED REGION ID(DataBase.DbGetDeviceList) ENABLED START -----#
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbGetDeviceList
         return argout
-        
+
 #------------------------------------------------------------------
 #    DbGetDeviceWideList command:
 #------------------------------------------------------------------
@@ -1226,13 +1263,13 @@ class DataBase (PyTango.Device_4Impl):
         :type: PyTango.DevString
         :return: list of exported devices
         :rtype: PyTango.DevVarStringArray """
-        self.debug_stream("In " + self.get_name() +  ".DbGetDeviceWideList()")
+        self.debug_stream("In " + self.get_name() + ".DbGetDeviceWideList()")
         argout = ['']
         #----- PROTECTED REGION ID(DataBase.DbGetDeviceWideList) ENABLED START -----#
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbGetDeviceWideList
         return argout
-        
+
 #------------------------------------------------------------------
 #    DbGetDeviceMemberList command:
 #------------------------------------------------------------------
@@ -1244,13 +1281,13 @@ class DataBase (PyTango.Device_4Impl):
         :type: PyTango.DevString
         :return: Device names member list
         :rtype: PyTango.DevVarStringArray """
-        self.debug_stream("In " + self.get_name() +  ".DbGetDeviceMemberList()")
+        self.debug_stream("In " + self.get_name() + ".DbGetDeviceMemberList()")
         argout = ['']
         #----- PROTECTED REGION ID(DataBase.DbGetDeviceMemberList) ENABLED START -----#
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbGetDeviceMemberList
         return argout
-        
+
 #------------------------------------------------------------------
 #    DbGetDeviceProperty command:
 #------------------------------------------------------------------
@@ -1272,13 +1309,13 @@ class DataBase (PyTango.Device_4Impl):
         Str[n + 3] = Property value 1
         Str[n + m] = Property value m
         :rtype: PyTango.DevVarStringArray """
-        self.debug_stream("In " + self.get_name() +  ".DbGetDeviceProperty()")
+        self.debug_stream("In " + self.get_name() + ".DbGetDeviceProperty()")
         argout = ['']
         #----- PROTECTED REGION ID(DataBase.DbGetDeviceProperty) ENABLED START -----#
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbGetDeviceProperty
         return argout
-        
+
 #------------------------------------------------------------------
 #    DbGetDevicePropertyHist command:
 #------------------------------------------------------------------
@@ -1294,13 +1331,13 @@ class DataBase (PyTango.Device_4Impl):
         Str[3] = Property value 1
         Str[n] = Property value n
         :rtype: PyTango.DevVarStringArray """
-        self.debug_stream("In " + self.get_name() +  ".DbGetDevicePropertyHist()")
+        self.debug_stream("In " + self.get_name() + ".DbGetDevicePropertyHist()")
         argout = ['']
         #----- PROTECTED REGION ID(DataBase.DbGetDevicePropertyHist) ENABLED START -----#
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbGetDevicePropertyHist
         return argout
-        
+
 #------------------------------------------------------------------
 #    DbGetDevicePropertyList command:
 #------------------------------------------------------------------
@@ -1313,13 +1350,13 @@ class DataBase (PyTango.Device_4Impl):
         :type: PyTango.DevVarStringArray
         :return: Property name list
         :rtype: PyTango.DevVarStringArray """
-        self.debug_stream("In " + self.get_name() +  ".DbGetDevicePropertyList()")
+        self.debug_stream("In " + self.get_name() + ".DbGetDevicePropertyList()")
         argout = ['']
         #----- PROTECTED REGION ID(DataBase.DbGetDevicePropertyList) ENABLED START -----#
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbGetDevicePropertyList
         return argout
-        
+
 #------------------------------------------------------------------
 #    DbGetDeviceServerClassList command:
 #------------------------------------------------------------------
@@ -1330,13 +1367,13 @@ class DataBase (PyTango.Device_4Impl):
         :type: PyTango.DevString
         :return: list of classes for this device server
         :rtype: PyTango.DevVarStringArray """
-        self.debug_stream("In " + self.get_name() +  ".DbGetDeviceServerClassList()")
+        self.debug_stream("In " + self.get_name() + ".DbGetDeviceServerClassList()")
         argout = ['']
         #----- PROTECTED REGION ID(DataBase.DbGetDeviceServerClassList) ENABLED START -----#
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbGetDeviceServerClassList
         return argout
-        
+
 #------------------------------------------------------------------
 #    DbGetExportdDeviceListForClass command:
 #------------------------------------------------------------------
@@ -1347,13 +1384,13 @@ class DataBase (PyTango.Device_4Impl):
         :type: PyTango.DevString
         :return: Device exported list
         :rtype: PyTango.DevVarStringArray """
-        self.debug_stream("In " + self.get_name() +  ".DbGetExportdDeviceListForClass()")
+        self.debug_stream("In " + self.get_name() + ".DbGetExportdDeviceListForClass()")
         argout = ['']
         #----- PROTECTED REGION ID(DataBase.DbGetExportdDeviceListForClass) ENABLED START -----#
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbGetExportdDeviceListForClass
         return argout
-        
+
 #------------------------------------------------------------------
 #    DbGetHostList command:
 #------------------------------------------------------------------
@@ -1364,13 +1401,13 @@ class DataBase (PyTango.Device_4Impl):
         :type: PyTango.DevString
         :return: Host name list
         :rtype: PyTango.DevVarStringArray """
-        self.debug_stream("In " + self.get_name() +  ".DbGetHostList()")
+        self.debug_stream("In " + self.get_name() + ".DbGetHostList()")
         argout = ['']
         #----- PROTECTED REGION ID(DataBase.DbGetHostList) ENABLED START -----#
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbGetHostList
         return argout
-        
+
 #------------------------------------------------------------------
 #    DbGetHostServerList command:
 #------------------------------------------------------------------
@@ -1382,13 +1419,13 @@ class DataBase (PyTango.Device_4Impl):
         :type: PyTango.DevString
         :return: Device server process name list
         :rtype: PyTango.DevVarStringArray """
-        self.debug_stream("In " + self.get_name() +  ".DbGetHostServerList()")
+        self.debug_stream("In " + self.get_name() + ".DbGetHostServerList()")
         argout = ['']
         #----- PROTECTED REGION ID(DataBase.DbGetHostServerList) ENABLED START -----#
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbGetHostServerList
         return argout
-        
+
 #------------------------------------------------------------------
 #    DbGetHostServersInfo command:
 #------------------------------------------------------------------
@@ -1399,13 +1436,13 @@ class DataBase (PyTango.Device_4Impl):
         :type: PyTango.DevString
         :return: Server info for all servers running on specified host
         :rtype: PyTango.DevVarStringArray """
-        self.debug_stream("In " + self.get_name() +  ".DbGetHostServersInfo()")
+        self.debug_stream("In " + self.get_name() + ".DbGetHostServersInfo()")
         argout = ['']
         #----- PROTECTED REGION ID(DataBase.DbGetHostServersInfo) ENABLED START -----#
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbGetHostServersInfo
         return argout
-        
+
 #------------------------------------------------------------------
 #    DbGetInstanceNameList command:
 #------------------------------------------------------------------
@@ -1416,13 +1453,13 @@ class DataBase (PyTango.Device_4Impl):
         :type: PyTango.DevString
         :return: The instance names found for specified server.
         :rtype: PyTango.DevVarStringArray """
-        self.debug_stream("In " + self.get_name() +  ".DbGetInstanceNameList()")
+        self.debug_stream("In " + self.get_name() + ".DbGetInstanceNameList()")
         argout = ['']
         #----- PROTECTED REGION ID(DataBase.DbGetInstanceNameList) ENABLED START -----#
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbGetInstanceNameList
         return argout
-        
+
 #------------------------------------------------------------------
 #    DbGetObjectList command:
 #------------------------------------------------------------------
@@ -1434,13 +1471,13 @@ class DataBase (PyTango.Device_4Impl):
         :type: PyTango.DevString
         :return: Object name list
         :rtype: PyTango.DevVarStringArray """
-        self.debug_stream("In " + self.get_name() +  ".DbGetObjectList()")
+        self.debug_stream("In " + self.get_name() + ".DbGetObjectList()")
         argout = ['']
         #----- PROTECTED REGION ID(DataBase.DbGetObjectList) ENABLED START -----#
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbGetObjectList
         return argout
-        
+
 #------------------------------------------------------------------
 #    DbGetProperty command:
 #------------------------------------------------------------------
@@ -1462,13 +1499,13 @@ class DataBase (PyTango.Device_4Impl):
         Str[n + 3] = Property value 1
         Str[n + m] = Property value m
         :rtype: PyTango.DevVarStringArray """
-        self.debug_stream("In " + self.get_name() +  ".DbGetProperty()")
+        self.debug_stream("In " + self.get_name() + ".DbGetProperty()")
         argout = ['']
         #----- PROTECTED REGION ID(DataBase.DbGetProperty) ENABLED START -----#
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbGetProperty
         return argout
-        
+
 #------------------------------------------------------------------
 #    DbGetPropertyHist command:
 #------------------------------------------------------------------
@@ -1484,13 +1521,13 @@ class DataBase (PyTango.Device_4Impl):
         Str[3] = Property value 1
         Str[n] = Property value n
         :rtype: PyTango.DevVarStringArray """
-        self.debug_stream("In " + self.get_name() +  ".DbGetPropertyHist()")
+        self.debug_stream("In " + self.get_name() + ".DbGetPropertyHist()")
         argout = ['']
         #----- PROTECTED REGION ID(DataBase.DbGetPropertyHist) ENABLED START -----#
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbGetPropertyHist
         return argout
-        
+
 #------------------------------------------------------------------
 #    DbGetPropertyList command:
 #------------------------------------------------------------------
@@ -1503,13 +1540,13 @@ class DataBase (PyTango.Device_4Impl):
         :type: PyTango.DevVarStringArray
         :return: Property name list
         :rtype: PyTango.DevVarStringArray """
-        self.debug_stream("In " + self.get_name() +  ".DbGetPropertyList()")
+        self.debug_stream("In " + self.get_name() + ".DbGetPropertyList()")
         argout = ['']
         #----- PROTECTED REGION ID(DataBase.DbGetPropertyList) ENABLED START -----#
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbGetPropertyList
         return argout
-        
+
 #------------------------------------------------------------------
 #    DbGetServerInfo command:
 #------------------------------------------------------------------
@@ -1520,13 +1557,13 @@ class DataBase (PyTango.Device_4Impl):
         :type: PyTango.DevString
         :return: server info
         :rtype: PyTango.DevVarStringArray """
-        self.debug_stream("In " + self.get_name() +  ".DbGetServerInfo()")
+        self.debug_stream("In " + self.get_name() + ".DbGetServerInfo()")
         argout = ['']
         #----- PROTECTED REGION ID(DataBase.DbGetServerInfo) ENABLED START -----#
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbGetServerInfo
         return argout
-        
+
 #------------------------------------------------------------------
 #    DbGetServerList command:
 #------------------------------------------------------------------
@@ -1538,13 +1575,13 @@ class DataBase (PyTango.Device_4Impl):
         :type: PyTango.DevString
         :return: Device server process name list
         :rtype: PyTango.DevVarStringArray """
-        self.debug_stream("In " + self.get_name() +  ".DbGetServerList()")
+        self.debug_stream("In " + self.get_name() + ".DbGetServerList()")
         argout = ['']
         #----- PROTECTED REGION ID(DataBase.DbGetServerList) ENABLED START -----#
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbGetServerList
         return argout
-        
+
 #------------------------------------------------------------------
 #    DbGetServerNameList command:
 #------------------------------------------------------------------
@@ -1556,13 +1593,13 @@ class DataBase (PyTango.Device_4Impl):
         :type: PyTango.DevString
         :return: server names found.
         :rtype: PyTango.DevVarStringArray """
-        self.debug_stream("In " + self.get_name() +  ".DbGetServerNameList()")
+        self.debug_stream("In " + self.get_name() + ".DbGetServerNameList()")
         argout = ['']
         #----- PROTECTED REGION ID(DataBase.DbGetServerNameList) ENABLED START -----#
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbGetServerNameList
         return argout
-        
+
 #------------------------------------------------------------------
 #    DbImportDevice command:
 #------------------------------------------------------------------
@@ -1581,13 +1618,13 @@ class DataBase (PyTango.Device_4Impl):
         Lg[0] = Exported flag
         Lg[1] = Device server process PID
         :rtype: PyTango.DevVarLongStringArray """
-        self.debug_stream("In " + self.get_name() +  ".DbImportDevice()")
-        argout = [0],['']
+        self.debug_stream("In " + self.get_name() + ".DbImportDevice()")
+        argout = [0], ['']
         #----- PROTECTED REGION ID(DataBase.DbImportDevice) ENABLED START -----#
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbImportDevice
         return argout
-        
+
 #------------------------------------------------------------------
 #    DbImportEvent command:
 #------------------------------------------------------------------
@@ -1598,13 +1635,13 @@ class DataBase (PyTango.Device_4Impl):
         :type: PyTango.DevString
         :return: export information e.g. IOR
         :rtype: PyTango.DevVarLongStringArray """
-        self.debug_stream("In " + self.get_name() +  ".DbImportEvent()")
-        argout = [0],['']
+        self.debug_stream("In " + self.get_name() + ".DbImportEvent()")
+        argout = [0], ['']
         #----- PROTECTED REGION ID(DataBase.DbImportEvent) ENABLED START -----#
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbImportEvent
         return argout
-        
+
 #------------------------------------------------------------------
 #    DbInfo command:
 #------------------------------------------------------------------
@@ -1625,13 +1662,13 @@ class DataBase (PyTango.Device_4Impl):
         - Class attribute properties defined in database
         - Object properties defined in database
         :rtype: PyTango.DevVarStringArray """
-        self.debug_stream("In " + self.get_name() +  ".DbInfo()")
+        self.debug_stream("In " + self.get_name() + ".DbInfo()")
         argout = ['']
         #----- PROTECTED REGION ID(DataBase.DbInfo) ENABLED START -----#
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbInfo
         return argout
-        
+
 #------------------------------------------------------------------
 #    DbPutAttributeAlias command:
 #------------------------------------------------------------------
@@ -1643,11 +1680,11 @@ class DataBase (PyTango.Device_4Impl):
         :type: PyTango.DevVarStringArray
         :return: 
         :rtype: PyTango.DevVoid """
-        self.debug_stream("In " + self.get_name() +  ".DbPutAttributeAlias()")
+        self.debug_stream("In " + self.get_name() + ".DbPutAttributeAlias()")
         #----- PROTECTED REGION ID(DataBase.DbPutAttributeAlias) ENABLED START -----#
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbPutAttributeAlias
-        
+
 #------------------------------------------------------------------
 #    DbPutClassAttributeProperty command:
 #------------------------------------------------------------------
@@ -1664,11 +1701,11 @@ class DataBase (PyTango.Device_4Impl):
         :type: PyTango.DevVarStringArray
         :return: 
         :rtype: PyTango.DevVoid """
-        self.debug_stream("In " + self.get_name() +  ".DbPutClassAttributeProperty()")
+        self.debug_stream("In " + self.get_name() + ".DbPutClassAttributeProperty()")
         #----- PROTECTED REGION ID(DataBase.DbPutClassAttributeProperty) ENABLED START -----#
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbPutClassAttributeProperty
-        
+
 #------------------------------------------------------------------
 #    DbPutClassAttributeProperty2 command:
 #------------------------------------------------------------------
@@ -1688,11 +1725,11 @@ class DataBase (PyTango.Device_4Impl):
         :type: PyTango.DevVarStringArray
         :return: 
         :rtype: PyTango.DevVoid """
-        self.debug_stream("In " + self.get_name() +  ".DbPutClassAttributeProperty2()")
+        self.debug_stream("In " + self.get_name() + ".DbPutClassAttributeProperty2()")
         #----- PROTECTED REGION ID(DataBase.DbPutClassAttributeProperty2) ENABLED START -----#
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbPutClassAttributeProperty2
-        
+
 #------------------------------------------------------------------
 #    DbPutClassProperty command:
 #------------------------------------------------------------------
@@ -1709,11 +1746,11 @@ class DataBase (PyTango.Device_4Impl):
         :type: PyTango.DevVarStringArray
         :return: 
         :rtype: PyTango.DevVoid """
-        self.debug_stream("In " + self.get_name() +  ".DbPutClassProperty()")
+        self.debug_stream("In " + self.get_name() + ".DbPutClassProperty()")
         #----- PROTECTED REGION ID(DataBase.DbPutClassProperty) ENABLED START -----#
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbPutClassProperty
-        
+
 #------------------------------------------------------------------
 #    DbPutDeviceAlias command:
 #------------------------------------------------------------------
@@ -1725,11 +1762,11 @@ class DataBase (PyTango.Device_4Impl):
         :type: PyTango.DevVarStringArray
         :return: 
         :rtype: PyTango.DevVoid """
-        self.debug_stream("In " + self.get_name() +  ".DbPutDeviceAlias()")
+        self.debug_stream("In " + self.get_name() + ".DbPutDeviceAlias()")
         #----- PROTECTED REGION ID(DataBase.DbPutDeviceAlias) ENABLED START -----#
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbPutDeviceAlias
-        
+
 #------------------------------------------------------------------
 #    DbPutDeviceAttributeProperty command:
 #------------------------------------------------------------------
@@ -1746,11 +1783,11 @@ class DataBase (PyTango.Device_4Impl):
         :type: PyTango.DevVarStringArray
         :return: 
         :rtype: PyTango.DevVoid """
-        self.debug_stream("In " + self.get_name() +  ".DbPutDeviceAttributeProperty()")
+        self.debug_stream("In " + self.get_name() + ".DbPutDeviceAttributeProperty()")
         #----- PROTECTED REGION ID(DataBase.DbPutDeviceAttributeProperty) ENABLED START -----#
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbPutDeviceAttributeProperty
-        
+
 #------------------------------------------------------------------
 #    DbPutDeviceAttributeProperty2 command:
 #------------------------------------------------------------------
@@ -1771,11 +1808,11 @@ class DataBase (PyTango.Device_4Impl):
         :type: PyTango.DevVarStringArray
         :return: 
         :rtype: PyTango.DevVoid """
-        self.debug_stream("In " + self.get_name() +  ".DbPutDeviceAttributeProperty2()")
+        self.debug_stream("In " + self.get_name() + ".DbPutDeviceAttributeProperty2()")
         #----- PROTECTED REGION ID(DataBase.DbPutDeviceAttributeProperty2) ENABLED START -----#
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbPutDeviceAttributeProperty2
-        
+
 #------------------------------------------------------------------
 #    DbPutDeviceProperty command:
 #------------------------------------------------------------------
@@ -1792,11 +1829,11 @@ class DataBase (PyTango.Device_4Impl):
         :type: PyTango.DevVarStringArray
         :return: 
         :rtype: PyTango.DevVoid """
-        self.debug_stream("In " + self.get_name() +  ".DbPutDeviceProperty()")
+        self.debug_stream("In " + self.get_name() + ".DbPutDeviceProperty()")
         #----- PROTECTED REGION ID(DataBase.DbPutDeviceProperty) ENABLED START -----#
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbPutDeviceProperty
-        
+
 #------------------------------------------------------------------
 #    DbPutProperty command:
 #------------------------------------------------------------------
@@ -1813,11 +1850,11 @@ class DataBase (PyTango.Device_4Impl):
         :type: PyTango.DevVarStringArray
         :return: 
         :rtype: PyTango.DevVoid """
-        self.debug_stream("In " + self.get_name() +  ".DbPutProperty()")
+        self.debug_stream("In " + self.get_name() + ".DbPutProperty()")
         #----- PROTECTED REGION ID(DataBase.DbPutProperty) ENABLED START -----#
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbPutProperty
-        
+
 #------------------------------------------------------------------
 #    DbPutServerInfo command:
 #------------------------------------------------------------------
@@ -1828,11 +1865,11 @@ class DataBase (PyTango.Device_4Impl):
         :type: PyTango.DevVarStringArray
         :return: 
         :rtype: PyTango.DevVoid """
-        self.debug_stream("In " + self.get_name() +  ".DbPutServerInfo()")
+        self.debug_stream("In " + self.get_name() + ".DbPutServerInfo()")
         #----- PROTECTED REGION ID(DataBase.DbPutServerInfo) ENABLED START -----#
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbPutServerInfo
-        
+
 #------------------------------------------------------------------
 #    DbUnExportDevice command:
 #------------------------------------------------------------------
@@ -1843,11 +1880,11 @@ class DataBase (PyTango.Device_4Impl):
         :type: PyTango.DevString
         :return: 
         :rtype: PyTango.DevVoid """
-        self.debug_stream("In " + self.get_name() +  ".DbUnExportDevice()")
+        self.debug_stream("In " + self.get_name() + ".DbUnExportDevice()")
         #----- PROTECTED REGION ID(DataBase.DbUnExportDevice) ENABLED START -----#
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbUnExportDevice
-        
+
 #------------------------------------------------------------------
 #    DbUnExportEvent command:
 #------------------------------------------------------------------
@@ -1858,11 +1895,11 @@ class DataBase (PyTango.Device_4Impl):
         :type: PyTango.DevString
         :return: none
         :rtype: PyTango.DevVoid """
-        self.debug_stream("In " + self.get_name() +  ".DbUnExportEvent()")
+        self.debug_stream("In " + self.get_name() + ".DbUnExportEvent()")
         #----- PROTECTED REGION ID(DataBase.DbUnExportEvent) ENABLED START -----#
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbUnExportEvent
-        
+
 #------------------------------------------------------------------
 #    DbUnExportServer command:
 #------------------------------------------------------------------
@@ -1874,11 +1911,11 @@ class DataBase (PyTango.Device_4Impl):
         :type: PyTango.DevString
         :return: 
         :rtype: PyTango.DevVoid """
-        self.debug_stream("In " + self.get_name() +  ".DbUnExportServer()")
+        self.debug_stream("In " + self.get_name() + ".DbUnExportServer()")
         #----- PROTECTED REGION ID(DataBase.DbUnExportServer) ENABLED START -----#
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbUnExportServer
-        
+
 #------------------------------------------------------------------
 #    ResetTimingValues command:
 #------------------------------------------------------------------
@@ -1889,11 +1926,11 @@ class DataBase (PyTango.Device_4Impl):
         :type: PyTango.DevVoid
         :return: 
         :rtype: PyTango.DevVoid """
-        self.debug_stream("In " + self.get_name() +  ".ResetTimingValues()")
+        self.debug_stream("In " + self.get_name() + ".ResetTimingValues()")
         #----- PROTECTED REGION ID(DataBase.ResetTimingValues) ENABLED START -----#
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.ResetTimingValues
-        
+
 #------------------------------------------------------------------
 #    DbGetDataForServerCache command:
 #------------------------------------------------------------------
@@ -1906,13 +1943,13 @@ class DataBase (PyTango.Device_4Impl):
         :type: PyTango.DevVarStringArray
         :return: All the data needed by the device server during its startup sequence. Precise list depend on the device server
         :rtype: PyTango.DevVarStringArray """
-        self.debug_stream("In " + self.get_name() +  ".DbGetDataForServerCache()")
+        self.debug_stream("In " + self.get_name() + ".DbGetDataForServerCache()")
         argout = ['']
         #----- PROTECTED REGION ID(DataBase.DbGetDataForServerCache) ENABLED START -----#
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbGetDataForServerCache
         return argout
-        
+
 #------------------------------------------------------------------
 #    DbDeleteAllDeviceAttributeProperty command:
 #------------------------------------------------------------------
@@ -1924,11 +1961,11 @@ class DataBase (PyTango.Device_4Impl):
         :type: PyTango.DevVarStringArray
         :return: 
         :rtype: PyTango.DevVoid """
-        self.debug_stream("In " + self.get_name() +  ".DbDeleteAllDeviceAttributeProperty()")
+        self.debug_stream("In " + self.get_name() + ".DbDeleteAllDeviceAttributeProperty()")
         #----- PROTECTED REGION ID(DataBase.DbDeleteAllDeviceAttributeProperty) ENABLED START -----#
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbDeleteAllDeviceAttributeProperty
-        
+
 #------------------------------------------------------------------
 #    DbMySqlSelect command:
 #------------------------------------------------------------------
@@ -1943,13 +1980,13 @@ class DataBase (PyTango.Device_4Impl):
          - lvalue[n] : =0 if svalue[n] is null else =1
          (last lvalue -1) is number of rows, (last lvalue) is number of fields
         :rtype: PyTango.DevVarLongStringArray """
-        self.debug_stream("In " + self.get_name() +  ".DbMySqlSelect()")
-        argout = [0],['']
+        self.debug_stream("In " + self.get_name() + ".DbMySqlSelect()")
+        argout = [0], ['']
         #----- PROTECTED REGION ID(DataBase.DbMySqlSelect) ENABLED START -----#
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbMySqlSelect
         return argout
-        
+
 #------------------------------------------------------------------
 #    DbGetCSDbServerList command:
 #------------------------------------------------------------------
@@ -1960,13 +1997,13 @@ class DataBase (PyTango.Device_4Impl):
         :type: PyTango.DevVoid
         :return: List of host:port with one element for each database server
         :rtype: PyTango.DevVarStringArray """
-        self.debug_stream("In " + self.get_name() +  ".DbGetCSDbServerList()")
+        self.debug_stream("In " + self.get_name() + ".DbGetCSDbServerList()")
         argout = ['']
         #----- PROTECTED REGION ID(DataBase.DbGetCSDbServerList) ENABLED START -----#
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbGetCSDbServerList
         return argout
-        
+
 #------------------------------------------------------------------
 #    DbGetAttributeAlias2 command:
 #------------------------------------------------------------------
@@ -1978,13 +2015,13 @@ class DataBase (PyTango.Device_4Impl):
         :type: PyTango.DevString
         :return: The attribute alias name (or empty string)
         :rtype: PyTango.DevString """
-        self.debug_stream("In " + self.get_name() +  ".DbGetAttributeAlias2()")
+        self.debug_stream("In " + self.get_name() + ".DbGetAttributeAlias2()")
         argout = ''
         #----- PROTECTED REGION ID(DataBase.DbGetAttributeAlias2) ENABLED START -----#
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbGetAttributeAlias2
         return argout
-        
+
 #------------------------------------------------------------------
 #    DbGetAliasAttribute command:
 #------------------------------------------------------------------
@@ -1996,13 +2033,13 @@ class DataBase (PyTango.Device_4Impl):
         :type: PyTango.DevString
         :return: The attribute name (dev_name/att_name)
         :rtype: PyTango.DevString """
-        self.debug_stream("In " + self.get_name() +  ".DbGetAliasAttribute()")
+        self.debug_stream("In " + self.get_name() + ".DbGetAliasAttribute()")
         argout = ''
         #----- PROTECTED REGION ID(DataBase.DbGetAliasAttribute) ENABLED START -----#
-        
+
         #----- PROTECTED REGION END -----#	//	DataBase.DbGetAliasAttribute
         return argout
-        
+
 
 #==================================================================
 #
@@ -2313,24 +2350,53 @@ class DataBaseClass(PyTango.DeviceClass):
         self.set_type(name);
         print "In DataBase Class  constructor"
 
+    def device_factory(self, names):
+        names = [get_db_name()]
+        return PyTango.DeviceClass.device_factory(self, names)
+
 #==================================================================
 #
 #    DataBase class main method
 #
 #==================================================================
 def main():
+    log_fmt = '%(threadName)-14s %(levelname)-8s %(asctime)s %(name)s: %(message)s'
+    logging.basicConfig(format=log_fmt, stream=sys.stdout, level=logging.INFO)
     try:
+        db_name = "sys/database/" + sys.argv[1]
+        set_db_name(db_name)
+        PyTango.Util.set_use_db(False)
         py = PyTango.Util(sys.argv)
-        py.add_class(DataBaseClass,DataBase,'DataBase')
+        py.add_class(DataBaseClass, DataBase, 'DataBase')
 
         U = PyTango.Util.instance()
+        dbi = DbInter()
+        U.set_interceptors(dbi)
+        U.set_serial_model(PyTango.SerialModel.NO_SYNC)
         U.server_init()
-        U.server_run()
+        dserver = U.get_dserver_device()
+        dbase = U.get_device_by_name(db_name)
+
+        dserver.duplicate_d_var()
+
+        pars = [dserver.get_name(), U.get_dserver_ior(dserver),
+                U.get_host_name(), U.get_pid_str(), U.get_version_str()]
+        dbase.DbExportDevice(pars)
+
+        pars[0] = dbase.get_name()
+        pars[1] = U.get_device_ior(dbase)
+        dbase.DbExportDevice(pars)
+
+        print "Ready to accept request"
+        U.orb_run()
+
 
-    except PyTango.DevFailed,e:
-        print '-------> Received a DevFailed exception:',e
-    except Exception,e:
-        print '-------> An unforeseen exception occured....',e
+    except PyTango.DevFailed as df:
+        print '-------> Received a DevFailed exception:', df
+        import traceback;traceback.print_exc()
+    except Exception as e:
+        print '-------> An unforeseen exception occured....', e
+        import traceback;traceback.print_exc()
 
 if __name__ == '__main__':
     main()
diff --git a/src/boost/python/databaseds/db_access.py b/src/boost/python/databaseds/db_access.py
index 49b28a2..6faa291 100644
--- a/src/boost/python/databaseds/db_access.py
+++ b/src/boost/python/databaseds/db_access.py
@@ -1,6 +1,7 @@
 from __future__ import print_function
 
 import os
+import logging
 import functools
 
 import PyTango
@@ -11,26 +12,26 @@ from db_errors import *
 
 def get_create_db_statements():
     statements = []
-    with open("create_db_tables.sql.in") as f:
+    with open("create_db_tables.sql") as f:
         lines = f.readlines()
     # strip comments
-    lines = ( line for line in lines if not line.startswith('#') )
-    lines = ( line for line in lines if not line.lower().strip().startswith('key') )
-    lines = ( line for line in lines if not line.lower().strip().startswith('key') )
+    lines = (line for line in lines if not line.startswith('#'))
+    lines = (line for line in lines if not line.lower().strip().startswith('key'))
+    lines = (line for line in lines if not line.lower().strip().startswith('key'))
     lines = "".join(lines)
-    lines = lines.replace("ENGINE=MyISAM","")
+    lines = lines.replace("ENGINE=MyISAM", "")
     statements += lines.split(";")
-        
-    with open("create_db.sql.in") as f:
+
+    with open("create_db.sql") as f:
         lines = f.readlines()
     # strip comments
-    lines = ( line for line in lines if not line.lower().startswith('#') )
-    lines = ( line for line in lines if not line.lower().startswith('create database') )
-    lines = ( line for line in lines if not line.lower().startswith('use') )
-    lines = ( line for line in lines if not line.lower().startswith('source') )
+    lines = (line for line in lines if not line.lower().startswith('#'))
+    lines = (line for line in lines if not line.lower().startswith('create database'))
+    lines = (line for line in lines if not line.lower().startswith('use'))
+    lines = (line for line in lines if not line.lower().startswith('source'))
     lines = "".join(lines)
     statements += lines.split(";")
-    
+
     return statements
 
 def replace_wildcard(text):
@@ -45,7 +46,7 @@ def replace_wildcard(text):
     # replace '*' with '%'
     text = text.replace("*", "%")
     return text
-    
+
 def use_cursor(f):
     @functools.wraps(f)
     def wrap(*args, **kwargs):
@@ -65,17 +66,23 @@ def use_cursor(f):
                 cursor.close()
                 del self.cursor
     return wrap
-    
+
 class Tango_dbapi2(object):
-    
+
     DB_API_NAME = 'sqlite3'
-    
+
     def __init__(self, db_name="tango_database.db", history_depth=10, fire_to_starter=True):
         self._db_api = None
         self._db_conn = None
         self.db_name = db_name
         self.history_depth = history_depth;
         self.fire_to_starter = fire_to_starter
+        self._logger = logging.getLogger(self.__class__.__name__)
+        self._debug = self._logger.info
+        self._info = self._logger.info
+        self._warn = self._logger.warn
+        self._error = self._logger.error
+        self._critical = self._logger.critical
         self.initialize()
 
     def close_db(self):
@@ -89,12 +96,12 @@ class Tango_dbapi2(object):
         if self._db_api is None:
             self._db_api = __import__(self.DB_API_NAME)
         return self._db_api
-    
+
     @property
     def db_api(self):
         return self.get_db_api()
-    
-    @property    
+
+    @property
     def db_conn(self):
         if self._db_conn is None:
             self._db_conn = self.db_api.connect(self.db_name)
@@ -104,17 +111,18 @@ class Tango_dbapi2(object):
         return self.db_conn.cursor()
 
     def initialize(self):
+        self._info("Initializing database...")
         if not os.path.isfile(self.db_name):
             self.create_db()
-    
+
     @use_cursor
     def create_db(self):
-        print("Creating database...")
+        self._info("Creating database...")
         statements = get_create_db_statements()
         cursor = self.cursor
         for statement in statements:
             cursor.execute(statement)
-    
+
     @use_cursor
     def get_id(self, name):
         cursor = self.cursor
@@ -122,7 +130,7 @@ class Tango_dbapi2(object):
         _id = cursor.execute('SELECT id FROM ?', (name,)).fetchone()[0] + 1
         cursor.execute('UPDATE ? SET id=?', (name, _id))
         return _id
-    
+
     @use_cursor
     def purge_att_property(self, table, field, obj, attr, name):
         cursor = self.cursor
@@ -134,7 +142,7 @@ class Tango_dbapi2(object):
         if to_del > 0:
             for row in rows[:to_del]:
                 cursor.execute('DELETE FROM ? WHERE id=?', (table, row[0]))
-                
+
     @use_cursor
     def purge_property(self, table, field, obj, name):
         cursor = self.cursor
@@ -159,25 +167,27 @@ class Tango_dbapi2(object):
             return row[0]
 
     # TANGO API
-    
+
     def get_stored_procedure_release(self):
         return 'release 1.8'
 
     @use_cursor
     def add_device(self, server_name, dev_info, klass_name, alias=None):
+        self._info("delete_attribute_alias(server_name=%s, dev_info=%s, klass_name=%s, alias=%s)",
+                   server_name, dev_info, klass_name, alias)
         dev_name, (domain, family, member) = dev_info
         cursor = self.cursor
-        
+
         # first delete the tuple (device,name) from the device table
         cursor.execute('DELETE FROM device WHERE name LIKE ?', (dev_name,))
-        
+
         # then insert the new value for this tuple
         cursor.execute(\
             'INSERT INTO device (name, alias, domain, family, member, exported, ' \
             'ior, host, server, pid, class, version, started, stopped) ' \
-            'VALUES (?, ?, ?, ?, ?, 0, "nada", "nada", ?, 0, ?, "0", NULL, NULL)', 
+            'VALUES (?, ?, ?, ?, ?, 0, "nada", "nada", ?, 0, ?, "0", NULL, NULL)',
             (dev_name, alias, domain, family, member, server_name, klass_name))
-        
+
         # Check if a DServer device entry for the process already exists
         cursor.execute('SELECT name FROM device WHERE server LIKE ? AND class LIKE "DServer"', (server_name,))
         if cursor.fetchone() is None:
@@ -186,11 +196,12 @@ class Tango_dbapi2(object):
             cursor.execute(\
             'INSERT INTO device (name, domain, family, member, exported, ior, ' \
             'host, server, pid, class, version, started, stopped) ' \
-            'VALUES (?, ?, ?, ?, 0, "nada", "nada", ?, 0, "DServer", "0", NULL, NULL)', 
+            'VALUES (?, ?, ?, ?, 0, "nada", "nada", ?, 0, "DServer", "0", NULL, NULL)',
             (dev_name, domain, family, member, server_name))
 
     @use_cursor
     def delete_attribute_alias(self, alias):
+        self._info("delete_attribute_alias(alias=%s)", alias)
         self.cursor.execute('DELETE FROM attribute_alias WHERE alias=?', (alias,))
 
     @use_cursor
@@ -198,11 +209,11 @@ class Tango_dbapi2(object):
         self.cursor.execute(\
             'DELETE FROM property_attribute_class WHERE class LIKE ? AND ' \
             'attribute LIKE ?', (klass_name, attr_name))
-        
+
     @use_cursor
     def delete_class_attribute_property(self, klass_name, attr_name, prop_name):
         cursor = self.cursor
-        
+
         # Is there something to delete ?
         cursor.execute(\
             'SELECT count(*) FROM property_attribute_class WHERE class = ? ' \
@@ -212,7 +223,7 @@ class Tango_dbapi2(object):
             cursor.execute(\
                 'DELETE FROM property_attribute_class WHERE class = ? AND ' \
                 'attribute = ? and name = ?', (klass_name, attr_name, prop_name))
-            # mark this property as deleted    
+            # mark this property as deleted
             hist_id = self.get_id('class_attibute', cursor=cursor)
             cursor.execute(\
                 'INSERT INTO property_attribute_class_hist (class, attribute, ' \
@@ -221,7 +232,7 @@ class Tango_dbapi2(object):
                 (klass_name, attr_name, prop_name, hist_id))
             self.purge_att_property("property_attribute_class_hist", "class",
                                     klass_name, attr_name, prop_name, cursor=cursor)
-    
+
     @use_cursor
     def delete_class_property(self, klass_name, prop_name):
         cursor = self.cursor
@@ -243,34 +254,36 @@ class Tango_dbapi2(object):
                 'INSERT INTO property_class_hist (class, name, id, count, value) ' \
                 'VALUES (?, ?, ?, "0", "DELETED")',
                 (klass_name, name, hist_id))
-            self.purge_property("property_class_hist", "class", klass_name, 
+            self.purge_property("property_class_hist", "class", klass_name,
                                 name, cursor=cursor)
-            
+
     @use_cursor
     def delete_device(self, dev_name):
+        self._info("delete_device(dev_name=%s)", dev_name)
         cursor = self.cursor
         dev_name = replace_wildcard(dev_name)
-        
+
         # delete the device from the device table
         cursor.execute('DELETE FROM device WHERE name LIKE ?', (dev_name,))
-        
+
         # delete device from the property_device table
         cursor.execute('DELETE FROM property_device WHERE device LIKE ?', (dev_name,))
-        
+
         # delete device from the property_attribute_device table
         cursor.execute('DELETE FROM property_attribute_device WHERE device LIKE ?', (dev_name,))
 
     @use_cursor
     def delete_device_alias(self, dev_alias):
+        self._info("delete_device_alias(dev_alias=%s)", dev_alias)
         self.cursor.execute('UPDATE device SET alias=NULL WHERE alias=?', (dev_alias,))
-    
+
     @use_cursor
     def delete_device_attribute(self, dev_name, attr_name):
         dev_name = replace_wildcard(dev_name)
         self.cursor.execute(\
             'DELETE FROM property_attribute_device WHERE device LIKE ? AND ' \
             'attribute LIKE ?', (dev_name, attr_name))
-    
+
     @use_cursor
     def delete_device_attribute_property(self, dev_name, attr_name, prop_name):
         cursor = self.cursor
@@ -283,7 +296,7 @@ class Tango_dbapi2(object):
             cursor.execute(\
                 'DELETE FROM property_attribute_device WHERE device = ? AND '
                 'attribute = ? AND name = ?', (dev_name, attr_name, prop_name))
-            # Mark this property as deleted	
+            # Mark this property as deleted
             hist_id = self.get_id("device_attribute", cursor=cursor)
             cursor.execute(\
                 'INSERT INTO property_attribute_device_hist ' \
@@ -291,12 +304,12 @@ class Tango_dbapi2(object):
                 '(?, ?, ?, ?, "0", "DELETED")', (dev_name, attr_name, prop_name, hist_id))
             self.purge_att_property("property_attribute_device_hist", "device",
                                     dev_name, attr_name, prop_name, cursor=cursor)
-        
+
     @use_cursor
     def delete_device_property(self, dev_name, prop_name):
         cursor = self.cursor
         prop_name = replace_wildcard(prop_name)
-        
+
         # Is there something to delete ?
         cursor.execute(\
             'SELECT DISTINCT name FROM property_device WHERE device=? AND ' \
@@ -317,7 +330,7 @@ class Tango_dbapi2(object):
     def delete_property(self, obj_name, prop_name):
         cursor = self.cursor
         prop_name = replace_wildcard(prop_name)
-        
+
         # Is there something to delete ?
         cursor.execute(\
             'SELECT DISTINCT name FROM property WHERE object=? AND ' \
@@ -333,12 +346,12 @@ class Tango_dbapi2(object):
                 'INSERT INTO property_hist (object, name, id, count, value) ' \
                 'VALUES (?, ?, ?, "0", "DELETED")', (obj_name, row[0], hist_id))
             self.purge_property("property_hist", "object", obj_name, row[0])
-          
+
     @use_cursor
     def delete_server(self, server_instance):
         cursor = self.cursor
         server_instance = replace_wildcard(server_instance)
-        
+
         previous_host = None
         # get host where running
         if self.fire_to_starter:
@@ -347,7 +360,7 @@ class Tango_dbapi2(object):
 
         # then delete the device from the device table
         cursor.execute('DELETE FROM device WHERE server LIKE ?', (server_instance,))
-        
+
         # Update host's starter to update controlled servers list
         if self.fire_to_starter and previous_host:
             # TODO send to starter
@@ -359,6 +372,8 @@ class Tango_dbapi2(object):
 
     @use_cursor
     def export_device(self, dev_name, IOR, host, pid, version):
+        self._info("export_device(dev_name=%s, IOR=%s, host=%s, pid=%s, version=%s)",
+                   dev_name, IOR, host, pid, version)
         cursor = self.cursor
         do_fire = False
         previous_host = None
@@ -372,66 +387,131 @@ class Tango_dbapi2(object):
                    "device " + dev_name + " not defined in the database !",
                    "DataBase::ExportDevice()")
         server = row[0]
-        
+
         # update the new value for this tuple
         cursor.execute(\
             'UPDATE device SET exported=1, ior=?, host=?, pid=?, version=?, ' \
             'started=datetime("now") WHERE name LIKE ?',
             (IOR, host, pid, version, dev_name))
-        
+
         # update host name in server table
-        cursor.execute('UPDATE server SET host=?, WHERE name LIKE ?', (host, server))
-        
+        cursor.execute('UPDATE server SET host=? WHERE name LIKE ?', (host, server))
+
         if do_fire:
             # TODO send to starter
             pass
-        
+
     @use_cursor
-    def export_event(self, event, IOR, host, pid, version):      
+    def export_event(self, event, IOR, host, pid, version):
         cursor = self.cursor
         cursor.execute(\
             'INSERT event (name,exported,ior,host,server,pid,version,started) ' \
             'VALUES (?, 1, ?, ?, ?, ?, ?, datetime("now")',
             (event, IOR, host, event, pid, version))
-    
+
     @use_cursor
     def get_alias_device(self, dev_alias):
         cursor = self.cursor
-        cursor.execute('SELECT name FROM device WHERE alias LIKE ?', (dev_alias,))
+        cursor.execute('SELECT name FROM device WHERE alias LIKE ?',
+                       (dev_alias,))
         row = cursor.fetchone()
         if row is None:
             th_exc(DB_DeviceNotDefined,
                    "No device found for alias '" + dev_alias + "'",
                    "DataBase::GetAliasDevice()")
-        return row[0]   
-    
+        return row[0]
+
     @use_cursor
     def get_attribute_alias(self, attr_alias):
         cursor = self.cursor
-        cursor.execute('SELECT name from attribute_alias WHERE alias LIKE ?', (attr_alias,))
+        cursor.execute('SELECT name from attribute_alias WHERE alias LIKE ?',
+                       (attr_alias,))
         row = cursor.fetchone()
         if row is None:
             th_exc(DB_SQLError,
                    "No attribute found for alias '" + attr_alias + "'",
-                   "DataBase::GetAttributeAlias()")        
+                   "DataBase::GetAttributeAlias()")
         return row[0]
-    
+
     @use_cursor
     def get_attribute_alias_list(self, attr_alias):
         cursor = self.cursor
-        cursor.execute('SELECT DISTINCT alias FROM attribute_alias WHERE alias LIKE ? ORDER BY attribute', (attr_alias,))
+        cursor.execute('SELECT DISTINCT alias FROM attribute_alias WHERE alias LIKE ? ORDER BY attribute',
+                       (attr_alias,))
+        return [ row[0] for row in cursor.fetchall() ]
+
+    @use_cursor
+    def get_class_attribute_list(self, class_name, wildcard):
+        cursor = self.cursor
+        cursor.execute('SELECT DISTINCT attribute FROM property_attribute_class WHERE class=? and attribute like ?',
+                       (class_name, wildcard))
+        return [ row[0] for row in cursor.fetchall() ]
+
+    @use_cursor
+    def get_class_attribute_property(self, clas_name, attributes):
+        cursor = self.cursor
+        stmt = 'SELECT name,value FROM property_attribute_class WHERE class=? AND attribute LIKE ?'
+        result = [class_name, str(len(attributes))]
+        for attribute in attributes:
+            cursor.execute(stmt, (class_name, attribute))
+            rows = cursor.fetchall()
+            result.append(attribute)
+            result.append(str(len(rows)))
+            for row in rows:
+                result.append(row[0])
+                result.append(row[1])
+        return result
+
+    @use_cursor
+    def get_class_attribute_property2(self, clas_name, attributes):
+        cursor = self.cursor
+        stmt = 'SELECT name,value FROM property_attribute_class WHERE class=? AND attribute LIKE ? ORDER BY name,count'
+        result = [class_name, str(len(attributes))]
+        # TODO: NOT DONE YET!
+        for attribute in attributes:
+            cursor.execute(stmt, (class_name, attribute))
+            rows = cursor.fetchall()
+            result.append(attribute)
+            result.append(str(len(rows)))
+            for row in rows:
+                result.append(row[0])
+                result.append(row[1])
+        return result
+
+    @use_cursor
+    def get_class_for_device(self, dev_name):
+        cursor = self.cursor
+        cursor.execute('SELECT DISTINCT class FROM device WHERE name=?', (dev_name,))
+        row = cursor.fetchone()
+        if row is None:
+            th_exc(DB_IncorrectArguments, "Class not found for " + dev_name,
+                   "Database.GetClassForDevice")
+        return row
+
+    @use_cursor
+    def get_class_inheritance_for_device(self, dev_name):
+        cursor = self.cursor
+        class_name = self.get_class_for_device(dev_name, cursor=cursor)
+        props = self.get_class_property(class_name, "InheritedFrom", cursor=cursor)
+        return [class_name] + props[4:]
+
+    @use_cursor
+    def get_class_list(self, server):
+        cursor = self.cursor
+        cursor.execute('SELECT DISTINCT class FROM device WHERE class LIKE ? ORDER BY class', (server,))
         return [ row[0] for row in cursor.fetchall() ]
-    
-        
+
+
+
 class Tango_sqlite3(Tango_dbapi2):
-    
+
     DB_API_NAME = 'sqlite3'
-    
+
 
 def main():
     db = Tango_sqlite3()
-    db.add_device("MyServer/my1", ("a/b/c", ("a","b","c")), "MyClass")
+    db.add_device("MyServer/my1", ("a/b/c", ("a", "b", "c")), "MyClass")
     db.close_db()
-    
+
 if __name__ == "__main__":
     main()
diff --git a/src/boost/python/db.py b/src/boost/python/db.py
index dad4d9a..68352d5 100644
--- a/src/boost/python/db.py
+++ b/src/boost/python/db.py
@@ -1,25 +1,13 @@
-################################################################################
-##
-## This file is part of PyTango, a python binding for Tango
-## 
-## http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## PyTango is free software: you can redistribute it and/or modify
-## it under the terms of the GNU Lesser General Public License as published by
-## the Free Software Foundation, either version 3 of the License, or
-## (at your option) any later version.
-## 
-## PyTango 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 Lesser General Public License for more details.
-## 
-## You should have received a copy of the GNU Lesser General Public License
-## along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-##
-################################################################################
+# ------------------------------------------------------------------------------
+# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+#
+# Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+# Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+#
+# Distributed under the terms of the GNU Lesser General Public License,
+# either version 3 of the License, or (at your option) any later version.
+# See LICENSE.txt for more info.
+# ------------------------------------------------------------------------------
 
 """
 This is an internal PyTango module.
@@ -33,7 +21,7 @@ import collections
 
 from ._PyTango import StdStringVector, Database, DbDatum, DbData, \
     DbDevInfo, DbDevInfos, DbDevImportInfo, DbDevExportInfo, DbDevExportInfos, \
-    DbHistory, DbServerInfo
+    DbHistory, DbServerInfo, DbServerData
 
 from .utils import is_pure_str, is_non_str_seq, seq_2_StdStringVector, \
     seq_2_DbDevInfos, seq_2_DbDevExportInfos, seq_2_DbData, DbData_2_dict
@@ -1008,6 +996,18 @@ def __doc_Database():
         New in PyTango 3.0.4
     """ )
 
+    document_method("get_device_service_list", """
+    get_device_service_list(self, dev_name) -> DbDatum
+
+            Query database for the list of services provided by the given device.
+
+        Parameters :
+            - dev_name : (str) device name
+        Return     : DbDatum with the list of services
+
+        New in PyTango 8.1.0
+    """ )
+    
     document_method("register_service", """
     register_service(self, serv_name, inst_name, dev_name) -> None
 
@@ -1080,6 +1080,30 @@ def __doc_Database():
         Return     : DbDevImportInfo
     """ )
 
+    document_method("get_device_info", """
+    get_device_info(self, dev_name) -> DbDevFullInfo
+
+            Query the databse for the full info of the specified device.
+
+            Example :
+                dev_info = db.get_device_info('my/own/device')
+                print(dev_info.name)
+                print(dev_info.class_name)
+                print(dev_info.ds_full_name)
+                print(dev_info.exported)
+                print(dev_info.ior)
+                print(dev_info.version)
+                print(dev_info.pid)
+                print(dev_info.started_date)
+                print(dev_info.stopped_date)
+
+        Parameters :
+            - dev_name : (str) device name
+        Return     : DbDevFullInfo
+        
+        New in PyTango 8.1.0
+    """ )
+
     document_method("export_device", """
     export_device(self, dev_export) -> None
 
@@ -1179,6 +1203,9 @@ def __doc_Database():
         Parameters :
             - alias : (str) alias
         Return     : device name
+
+        .. deprecated:: 8.1.0
+            Use :meth:`~PyTango.Database.get_device_from_alias` instead
     """ )
 
     document_method("get_alias", """
@@ -1191,6 +1218,33 @@ def __doc_Database():
         Return     : alias
 
         New in PyTango 3.0.4
+        
+        .. deprecated:: 8.1.0
+            Use :meth:`~PyTango.Database.get_alias_from_device` instead
+    """ )
+
+    document_method("get_device_from_alias", """
+    get_device_from_alias(self, alias) -> str
+
+            Get the device name from an alias.
+
+        Parameters :
+            - alias : (str) alias
+        Return     : device name
+        
+        New in PyTango 8.1.0
+    """ )
+
+    document_method("get_alias_from_device", """
+    get_alias_from_device(self, alias) -> str
+
+            Get the device alias name from its name.
+
+        Parameters :
+            - alias : (str) device name
+        Return     : alias
+
+        New in PyTango 8.1.0
     """ )
 
     document_method("get_device_alias_list", """
@@ -1320,6 +1374,21 @@ def __doc_Database():
         Throws     : ConnectionFailed, CommunicationFailed, DevFailed from device (DB_SQLError)
     """ )
 
+    document_method("rename_server", """
+    rename_server(self, old_ds_name, new_ds_name) -> None
+
+            Rename a device server process.
+
+        Parameters :
+            - old_ds_name : (str) old name
+            - new_ds_name : (str) new name
+        Return     : None
+
+        Throws     : ConnectionFailed, CommunicationFailed, DevFailed from device (DB_SQLError)
+        
+        New in PyTango 8.1.0
+    """ )
+
     document_method("get_server_info", """
     get_server_info(self, server) -> DbServerInfo
 
@@ -1874,8 +1943,39 @@ def __doc_Database():
         Return     :  full attribute name
 
         Throws     : ConnectionFailed, CommunicationFailed, DevFailed from device (DB_SQLError)
+        
+        .. deprecated:: 8.1.0
+            Use :meth:`~PyTango.Database.get_attribute_from_alias` instead
+    """ )
+
+    document_method("get_attribute_from_alias", """
+    get_attribute_from_alias(self, alias) -> str
+
+            Get the full attribute name from an alias.
+
+        Parameters :
+            - alias : (str) attribute alias
+        Return     :  full attribute name
+
+        Throws     : ConnectionFailed, CommunicationFailed, DevFailed from device (DB_SQLError)
+        
+        New in PyTango 8.1.0
     """ )
 
+    document_method("get_alias_from_attribute", """
+    get_alias_from_attribute(self, attr_name) -> str
+
+            Get the attribute alias from the full attribute name.
+
+        Parameters :
+            - attr_name : (str) full attribute name
+        Return     :  attribute alias
+
+        Throws     : ConnectionFailed, CommunicationFailed, DevFailed from device (DB_SQLError)
+        
+        New in PyTango 8.1.0
+    """ )
+    
     document_method("get_attribute_alias_list", """
     get_attribute_alias_list(self, filter) -> DbDatum
 
@@ -2084,6 +2184,57 @@ def __doc_DbServerInfo():
         - mode : (str) mode
         - level : (str) level"""
 
+def __doc_DbServerData():
+    def document_method(method_name, desc, append=True):
+        return __document_method(DbServerData, method_name, desc, append)
+        
+    DbServerData.__doc__ = """\
+    A structure used for moving DS from one tango host to another.
+    Create a new instance by: DbServerData(<server name>, <server instance>)"""
+
+    document_method("get_name", """
+    get_name(self) -> str
+
+            Returns the full server name
+
+        Parameters : None
+        Return     : (str) the full server name
+    """ )
+
+    document_method("put_in_database", """
+    put_in_database(self, tg_host) -> None
+
+            Store all the data related to the device server process in the 
+            database specified by the input arg.
+
+        Parameters :
+            - tg_host : (str) The tango host for the new database
+        Return     : None
+    """ )
+    
+    document_method("already_exist", """
+    already_exist(self, tg_host) -> bool
+
+            Check if any of the device server process device(s) is already
+            defined in the database specified by the tango host given as input arg
+
+        Parameters :
+            - tg_host : (str) The tango host for the new database
+        Return     : (str) True in case any of the device is already known. False otherwise
+    """ )
+
+    document_method("remove", """
+    remove(self) -> None
+    remove(self, tg_host) -> None
+
+            Remove device server process from a database.
+
+        Parameters :
+            - tg_host : (str) The tango host for the new database
+        Return     : None
+    """ )  
+    
+       
 def db_init(doc=True):
     __init_DbDatum()
     if doc:
@@ -2097,4 +2248,5 @@ def db_init(doc=True):
         __doc_DbDevInfo()
         __doc_DbHistory()
         __doc_DbServerInfo()
+        __doc_DbServerData()
 
diff --git a/src/boost/python/device_attribute.py b/src/boost/python/device_attribute.py
index 4859359..985de73 100644
--- a/src/boost/python/device_attribute.py
+++ b/src/boost/python/device_attribute.py
@@ -1,25 +1,13 @@
-################################################################################
-##
-## This file is part of PyTango, a python binding for Tango
-## 
-## http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## PyTango is free software: you can redistribute it and/or modify
-## it under the terms of the GNU Lesser General Public License as published by
-## the Free Software Foundation, either version 3 of the License, or
-## (at your option) any later version.
-## 
-## PyTango 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 Lesser General Public License for more details.
-## 
-## You should have received a copy of the GNU Lesser General Public License
-## along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-##
-################################################################################
+# ------------------------------------------------------------------------------
+# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+#
+# Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+# Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+#
+# Distributed under the terms of the GNU Lesser General Public License,
+# either version 3 of the License, or (at your option) any later version.
+# See LICENSE.txt for more info.
+# ------------------------------------------------------------------------------
 
 """
 This is an internal PyTango module.
diff --git a/src/boost/python/device_class.py b/src/boost/python/device_class.py
index db2e4e6..f35eef4 100644
--- a/src/boost/python/device_class.py
+++ b/src/boost/python/device_class.py
@@ -1,25 +1,13 @@
-################################################################################
-##
-## This file is part of PyTango, a python binding for Tango
-## 
-## http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## PyTango is free software: you can redistribute it and/or modify
-## it under the terms of the GNU Lesser General Public License as published by
-## the Free Software Foundation, either version 3 of the License, or
-## (at your option) any later version.
-## 
-## PyTango 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 Lesser General Public License for more details.
-## 
-## You should have received a copy of the GNU Lesser General Public License
-## along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-##
-################################################################################
+# ------------------------------------------------------------------------------
+# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+#
+# Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+# Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+#
+# Distributed under the terms of the GNU Lesser General Public License,
+# either version 3 of the License, or (at your option) any later version.
+# See LICENSE.txt for more info.
+# ------------------------------------------------------------------------------
 
 """
 This is an internal PyTango module.
diff --git a/src/boost/python/device_data.py b/src/boost/python/device_data.py
index edfed89..4efcaed 100644
--- a/src/boost/python/device_data.py
+++ b/src/boost/python/device_data.py
@@ -1,25 +1,13 @@
-################################################################################
-##
-## This file is part of PyTango, a python binding for Tango
-## 
-## http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## PyTango is free software: you can redistribute it and/or modify
-## it under the terms of the GNU Lesser General Public License as published by
-## the Free Software Foundation, either version 3 of the License, or
-## (at your option) any later version.
-## 
-## PyTango 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 Lesser General Public License for more details.
-## 
-## You should have received a copy of the GNU Lesser General Public License
-## along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-##
-################################################################################
+# ------------------------------------------------------------------------------
+# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+#
+# Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+# Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+#
+# Distributed under the terms of the GNU Lesser General Public License,
+# either version 3 of the License, or (at your option) any later version.
+# See LICENSE.txt for more info.
+# ------------------------------------------------------------------------------
 
 """
 This is an internal PyTango module.
diff --git a/src/boost/python/device_proxy.py b/src/boost/python/device_proxy.py
index 47e431c..19223f8 100644
--- a/src/boost/python/device_proxy.py
+++ b/src/boost/python/device_proxy.py
@@ -1,25 +1,13 @@
-################################################################################
-##
-## This file is part of PyTango, a python binding for Tango
-## 
-## http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## PyTango is free software: you can redistribute it and/or modify
-## it under the terms of the GNU Lesser General Public License as published by
-## the Free Software Foundation, either version 3 of the License, or
-## (at your option) any later version.
-## 
-## PyTango 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 Lesser General Public License for more details.
-## 
-## You should have received a copy of the GNU Lesser General Public License
-## along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-##
-################################################################################
+# ------------------------------------------------------------------------------
+# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+#
+# Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+# Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+#
+# Distributed under the terms of the GNU Lesser General Public License,
+# either version 3 of the License, or (at your option) any later version.
+# See LICENSE.txt for more info.
+# ------------------------------------------------------------------------------
 
 """
 This is an internal PyTango module.
@@ -27,25 +15,92 @@ This is an internal PyTango module.
 
 from __future__ import with_statement
 
-__all__ = ["device_proxy_init"]
+__all__ = ["device_proxy_init", "get_device_proxy"]
 
 __docformat__ = "restructuredtext"
 
 import threading
+import collections
 
 from ._PyTango import StdStringVector, DbData, DbDatum, AttributeInfo, \
     AttributeInfoEx, AttributeInfoList, AttributeInfoListEx, DeviceProxy, \
     __CallBackAutoDie, __CallBackPushEvent, EventType, DevFailed, Except, \
-    ExtractAs
-from .utils import is_pure_str, is_non_str_seq, is_integer, \
-    seq_2_StdStringVector, StdStringVector_2_seq, seq_2_DbData, DbData_2_dict
+    ExtractAs, GreenMode
+
+from .utils import is_pure_str, is_non_str_seq, is_integer
+from .utils import seq_2_StdStringVector, StdStringVector_2_seq
+from .utils import seq_2_DbData, DbData_2_dict
 from .utils import document_method as __document_method
-import collections
-import numbers
+from .green import result, submit, green, get_green_mode
+
+
+def get_device_proxy(*args, **kwargs):
+    """get_device_proxy(self, dev_name, green_mode=None, wait=True, timeout=True) -> DeviceProxy
+    get_device_proxy(self, dev_name, need_check_acc, green_mode=None, wait=True, timeout=None) -> DeviceProxy
+
+    Returns a new :class:`~PyTango.DeviceProxy`.
+    There is no difference between using this function and the direct 
+    :class:`~PyTango.DeviceProxy` constructor if you use the default kwargs.
+     
+    The added value of this function becomes evident when you choose a green_mode
+    to be *Futures* or *Gevent*. The DeviceProxy constructor internally makes some
+    network calls which makes it *slow*. By using one of the *green modes* as 
+    green_mode you are allowing other python code to be executed in a cooperative way.
+
+    .. note::
+        The timeout parameter has no relation with the tango device client side
+        timeout (gettable by :meth:`~PyTango.DeviceProxy.get_timeout_millis` and 
+        settable through :meth:`~PyTango.DeviceProxy.set_timeout_millis`)
+
+    :param dev_name: the device name or alias
+    :type dev_name: str
+    :param need_check_acc: in first version of the function it defaults to True.
+                           Determines if at creation time of DeviceProxy it should check
+                           for channel access (rarely used)
+    :type need_check_acc: bool
+    :param green_mode: determines the mode of execution of the device (including
+                      the way it is created). Defaults to the current global
+                      green_mode (check :func:`~PyTango.get_green_mode` and
+                      :func:`~PyTango.set_green_mode`)
+    :type green_mode: :obj:`~PyTango.GreenMode`
+    :param wait: whether or not to wait for result. If green_mode
+                 Ignored when green_mode is Synchronous (always waits).
+    :type wait: bool
+    :param timeout: The number of seconds to wait for the result.
+                    If None, then there is no limit on the wait time.
+                    Ignored when green_mode is Synchronous or wait is False.
+    :type timeout: float
+    :returns:
+        if green_mode is Synchronous or wait is True:
+            :class:`~PyTango.DeviceProxy`
+        else if green_mode is Futures:
+            :class:`concurrent.futures.Future`
+        else if green_mode is Gevent:
+            :class:`gevent.event.AsynchResult`
+    :throws:
+        * a *DevFailed* if green_mode is Synchronous or wait is True 
+          and there is an error creating the device.
+        * a *concurrent.futures.TimeoutError* if green_mode is Futures,
+          wait is False, timeout is not None and the time to create the device
+          has expired.                            
+        * a *gevent.timeout.Timeout* if green_mode is Gevent, wait is False,
+          timeout is not None and the time to create the device has expired.
+    
+    New in PyTango 8.1.0
+    """
+    # we cannot use the green wrapper because it consumes the green_mode and we
+    # want to forward it to the DeviceProxy constructor
+    green_mode = kwargs.get('green_mode', get_green_mode())
+    wait = kwargs.pop('wait', True)
+    timeout = kwargs.pop('timeout', None)
+
+    d = submit(green_mode, DeviceProxy, *args, **kwargs)
+    return result(d, green_mode, wait=wait, timeout=timeout)
+
 
 class __TangoInfo(object):
     """Helper class for when DeviceProxy.info() is not available"""
-    
+
     def __init__(self):
         self.dev_class = self.dev_type = 'Device'
         self.doc_url = 'http://www.esrf.fr/computing/cs/tango/tango_doc/ds_doc/'
@@ -63,6 +118,43 @@ def __check_read_attribute(dev_attr):
         raise DevFailed(*dev_attr.get_err_stack())
     return dev_attr
 
+def __DeviceProxy__init__(self, *args, **kwargs):
+    self.__dict__['_green_mode'] = kwargs.pop('green_mode', None)
+    self.__dict__['_executors'] = executors = {}
+    executors[GreenMode.Futures] = kwargs.pop('executor', None)
+    executors[GreenMode.Gevent] = kwargs.pop('threadpool', None)
+    return DeviceProxy.__init_orig__(self, *args, **kwargs)
+
+def __DeviceProxy__get_green_mode(self):
+    """Returns the green mode in use by this DeviceProxy.
+    
+    :returns: the green mode in use by this DeviceProxy.
+    :rtype: GreenMode
+
+    .. seealso::
+        :func:`PyTango.get_green_mode`
+        :func:`PyTango.set_green_mode`
+
+    New in PyTango 8.1.0
+    """
+    gm = self._green_mode
+    if gm is None:
+        gm = get_green_mode()
+    return gm
+
+def __DeviceProxy__set_green_mode(self, green_mode=None):
+    """Sets the green mode to be used by this DeviceProxy
+    Setting it to None means use the global PyTango green mode
+    (see :func:`PyTango.get_green_mode`).
+    
+    :param green_mode: the new green mode
+    :type green_mode: GreenMode
+
+    New in PyTango 8.1.0
+    """
+    self._green_mode = green_mode
+
+
 def __DeviceProxy__refresh_cmd_cache(self):
     cmd_list = self.command_list_query()
     cmd_cache = {}
@@ -81,7 +173,7 @@ def __DeviceProxy__getattr(self, name):
     # and the ugly trait_names could be removed.
     if name[:2] == "__" or name == 'trait_names':
         raise AttributeError(name)
-    
+
     name_l = name.lower()
     cmd_info = None
     if not hasattr(self, '__cmd_cache'):
@@ -93,28 +185,28 @@ def __DeviceProxy__getattr(self, name):
         cmd_info = self.__cmd_cache[name_l]
     except:
         pass
-        
+
     if cmd_info is not None:
         d, f = cmd_info
         if f is None:
-            doc =  "%s(%s) -> %s\n\n" % (d.cmd_name, d.in_type, d.out_type)
+            doc = "%s(%s) -> %s\n\n" % (d.cmd_name, d.in_type, d.out_type)
             doc += " -  in (%s): %s\n" % (d.in_type, d.in_type_desc)
             doc += " - out (%s): %s\n" % (d.out_type, d.out_type_desc)
-            def f(*args,**kwds): return self.command_inout(name, *args, **kwds)
+            def f(*args, **kwds): return self.command_inout(name, *args, **kwds)
             f.__doc__ = doc
             self.__cmd_cache[name_l] = d, f
         return f
-    
+
     find_attr = True
     if not hasattr(self, '__attr_cache') or name_l not in self.__attr_cache:
         try:
             self.__refresh_attr_cache()
         except:
             find_attr = False
-    
+
     if not find_attr or name_l not in self.__attr_cache:
         raise AttributeError(name)
-    
+
     return self.read_attribute(name).value
 
 def __DeviceProxy__setattr(self, name, value):
@@ -123,7 +215,7 @@ def __DeviceProxy__setattr(self, name, value):
             self.__refresh_attr_cache()
     except:
         return super(DeviceProxy, self).__setattr__(name, value)
-        
+
     if name.lower() in self.__attr_cache:
         self.write_attribute(name, value)
     else:
@@ -154,6 +246,12 @@ def __DeviceProxy__contains(self, key):
 def __DeviceProxy__read_attribute(self, value, extract_as=ExtractAs.Numpy):
     return __check_read_attribute(self._read_attribute(value, extract_as))
 
+#def __DeviceProxy__read_attribute(self, value, extract_as=ExtractAs.Numpy,
+#                                  green_mode=None, wait=True, timeout=None):
+#    green_mode, submit = submitable(green_mode)
+#    result = submit(__DeviceProxy__read_attribute_raw, self, value, extract_as=extract_as)
+#    return get_result(result, green_mode, wait=wait, timeout=timeout)
+
 def __DeviceProxy__read_attributes_asynch(self, attr_names, cb=None, extract_as=ExtractAs.Numpy):
     """
     read_attributes_asynch( self, attr_names) -> int
@@ -658,7 +756,7 @@ def __DeviceProxy__get_event_map(self):
         self.__dict__['_subscribed_events'] = dict()
     return self._subscribed_events
 
-def __DeviceProxy__subscribe_event ( self, attr_name, event_type, cb_or_queuesize, filters=[], stateless=False, extract_as=ExtractAs.Numpy):
+def __DeviceProxy__subscribe_event (self, attr_name, event_type, cb_or_queuesize, filters=[], stateless=False, extract_as=ExtractAs.Numpy):
     """
     subscribe_event(self, attr_name, event, callback, filters=[], stateless=False, extract_as=Numpy) -> int
 
@@ -722,7 +820,7 @@ def __DeviceProxy__subscribe_event ( self, attr_name, event_type, cb_or_queuesiz
             All other parameters are similar to the descriptions given in the
             other subscribe_event() version.
     """
-    
+
     if isinstance(cb_or_queuesize, collections.Callable):
         cb = __CallBackPushEvent()
         cb.push_event = cb_or_queuesize
@@ -730,7 +828,7 @@ def __DeviceProxy__subscribe_event ( self, attr_name, event_type, cb_or_queuesiz
         cb = __CallBackPushEvent()
         cb.push_event = cb_or_queuesize.push_event
     elif is_integer(cb_or_queuesize):
-        cb = cb_or_queuesize # queuesize
+        cb = cb_or_queuesize  # queuesize
     else:
         raise TypeError("Parameter cb_or_queuesize should be a number, a" + \
                     " callable object or an object with a 'push_event' method.")
@@ -818,15 +916,15 @@ def __DeviceProxy__get_events(self, event_id, callback=None, extract_as=ExtractA
         queuesize, event_type, attr_name = self.__get_event_map().get(event_id, (None, None, None))
         if event_type is None:
             raise ValueError("Invalid event_id. You are not subscribed to event %s." % str(event_id))
-        if event_type in [  EventType.CHANGE_EVENT,
-                            EventType.QUALITY_EVENT,
-                            EventType.PERIODIC_EVENT,
-                            EventType.ARCHIVE_EVENT,
-                            EventType.USER_EVENT ]:
+        if event_type in ( EventType.CHANGE_EVENT,
+                           EventType.QUALITY_EVENT,
+                           EventType.PERIODIC_EVENT,
+                           EventType.ARCHIVE_EVENT,
+                           EventType.USER_EVENT ):
             return self.__get_data_events(event_id, extract_as)
-        elif event_type in [ EventType.ATTR_CONF_EVENT ]:
+        elif event_type in (EventType.ATTR_CONF_EVENT,):
             return self.__get_attr_conf_events(event_id, extract_as)
-        elif event_type in [ EventType.DATA_READY_EVENT ]:
+        elif event_type in (EventType.DATA_READY_EVENT,):
             return self.__get_data_ready_events(event_id, extract_as)
         else:
             assert (False)
@@ -859,7 +957,89 @@ def __DeviceProxy__str(self):
     info = self._get_info_()
     return "%s(%s)" % (info.dev_class, self.dev_name())
 
+def __DeviceProxy__read_attributes(self, *args, **kwargs):
+    return self._read_attributes(*args, **kwargs)
+
+def __DeviceProxy__write_attribute(self, *args, **kwargs):
+    return self._write_attribute(*args, **kwargs)
+
+def __DeviceProxy__write_attributes(self, *args, **kwargs):
+    return self._write_attributes(*args, **kwargs)
+
+def __DeviceProxy__ping(self, *args, **kwargs):
+    return self._ping(*args, **kwargs)
+
+def __DeviceProxy__state(self, *args, **kwargs):
+    """state(self) -> DevState
+
+            A method which returns the state of the device.
+
+        Parameters : None
+        Return     : (DevState) constant
+        Example :
+                dev_st = dev.state()
+                if dev_st == DevState.ON : ...
+    """
+    return self._state(*args, **kwargs)
+
+def __DeviceProxy__status(self, *args, **kwargs):
+    """status(self) -> str
+
+            A method which returns the status of the device as a string.
+
+        Parameters : None
+        Return     : (str) describing the device status
+    """
+    return self._status(*args, **kwargs)
+
+def __DeviceProxy__write_attribute_reply(self, *args, **kwargs):
+    """
+    write_attribute_reply(self, id) -> None
+
+            Check if the answer of an asynchronous write_attribute is arrived
+            (polling model). If the reply is arrived and if it is a valid reply,
+            the call returned. If the reply is an exception, it is re-thrown by
+            this call. An exception is also thrown in case of the reply is not
+            yet arrived.
+
+        Parameters :
+            - id : (int) the asynchronous call identifier.
+        Return     : None
+
+        Throws     : AsynCall, AsynReplyNotArrived, CommunicationFailed, DevFailed from device.
+
+        New in PyTango 7.0.0
+
+    write_attribute_reply(self, id, timeout) -> None
+
+            Check if the answer of an asynchronous write_attribute is arrived
+            (polling model). id is the asynchronous call identifier. If the
+            reply is arrived and if it is a valid reply, the call returned. If
+            the reply is an exception, it is re-thrown by this call. If the
+            reply is not yet arrived, the call will wait (blocking the process)
+            for the time specified in timeout. If after timeout milliseconds,
+            the reply is still not there, an exception is thrown. If timeout is
+            set to 0, the call waits until the reply arrived.
+            
+        Parameters :
+            - id      : (int) the asynchronous call identifier.
+            - timeout : (int) the timeout
+            
+        Return     : None
+
+        Throws     : AsynCall, AsynReplyNotArrived, CommunicationFailed, DevFailed from device.
+
+        New in PyTango 7.0.0
+    """
+    return self.write_attributes_reply(*args, **kwargs)
+
 def __init_DeviceProxy():
+    DeviceProxy.__init_orig__ = DeviceProxy.__init__
+    DeviceProxy.__init__ = __DeviceProxy__init__
+
+    DeviceProxy.get_green_mode = __DeviceProxy__get_green_mode
+    DeviceProxy.set_green_mode = __DeviceProxy__set_green_mode
+
     DeviceProxy.__getattr__ = __DeviceProxy__getattr
     DeviceProxy.__setattr__ = __DeviceProxy__setattr
     DeviceProxy.__getitem__ = __DeviceProxy__getitem
@@ -871,14 +1051,22 @@ def __init_DeviceProxy():
     DeviceProxy.__refresh_cmd_cache = __DeviceProxy__refresh_cmd_cache
     DeviceProxy.__refresh_attr_cache = __DeviceProxy__refresh_attr_cache
 
-    DeviceProxy.read_attribute = __DeviceProxy__read_attribute
+    DeviceProxy.ping = green(__DeviceProxy__ping)
+    DeviceProxy.state = green(__DeviceProxy__state)
+    DeviceProxy.status = green(__DeviceProxy__status)
+
+    DeviceProxy.read_attribute = green(__DeviceProxy__read_attribute)
+    DeviceProxy.read_attributes = green(__DeviceProxy__read_attributes)
+    DeviceProxy.write_attribute = green(__DeviceProxy__write_attribute)
+    DeviceProxy.write_attributes = green(__DeviceProxy__write_attributes)
+    DeviceProxy.write_read_attribute = green(__DeviceProxy__write_read_attribute)
+
     DeviceProxy.read_attributes_asynch = __DeviceProxy__read_attributes_asynch
     DeviceProxy.read_attribute_asynch = __DeviceProxy__read_attribute_asynch
     DeviceProxy.read_attribute_reply = __DeviceProxy__read_attribute_reply
     DeviceProxy.write_attributes_asynch = __DeviceProxy__write_attributes_asynch
     DeviceProxy.write_attribute_asynch = __DeviceProxy__write_attribute_asynch
-    DeviceProxy.write_attribute_reply = DeviceProxy.write_attributes_reply
-    DeviceProxy.write_read_attribute = __DeviceProxy__write_read_attribute
+    DeviceProxy.write_attribute_reply = __DeviceProxy__write_attribute_reply
 
     DeviceProxy.get_property = __DeviceProxy__get_property
     DeviceProxy.put_property = __DeviceProxy__put_property
@@ -890,21 +1078,21 @@ def __init_DeviceProxy():
 
     DeviceProxy.__get_event_map = __DeviceProxy__get_event_map
     DeviceProxy.__get_event_map_lock = __DeviceProxy__get_event_map_lock
-    DeviceProxy.subscribe_event = __DeviceProxy__subscribe_event
-    DeviceProxy.unsubscribe_event = __DeviceProxy__unsubscribe_event
+    DeviceProxy.subscribe_event = green(__DeviceProxy__subscribe_event)
+    DeviceProxy.unsubscribe_event = green(__DeviceProxy__unsubscribe_event)
     DeviceProxy.__unsubscribe_event_all = __DeviceProxy__unsubscribe_event_all
     DeviceProxy.get_events = __DeviceProxy__get_events
     DeviceProxy.__str__ = __DeviceProxy__str
     DeviceProxy.__repr__ = __DeviceProxy__str
-    
+
     DeviceProxy._get_info_ = __DeviceProxy___get_info_
 
-    
+
 def __doc_DeviceProxy():
     def document_method(method_name, desc, append=True):
         return __document_method(DeviceProxy, method_name, desc, append)
 
-    DeviceProxy.__doc__ = """
+    DeviceProxy.__doc__ = """\
     DeviceProxy is the high level Tango object which provides the client with
     an easy-to-use interface to TANGO devices. DeviceProxy provides interfaces
     to all TANGO Device interfaces.The DeviceProxy manages timeouts, stateless
@@ -913,6 +1101,51 @@ def __doc_DeviceProxy():
 
     Example :
        dev = PyTango.DeviceProxy("sys/tg_test/1")
+
+    DeviceProxy(dev_name, green_mode=None, wait=True, timeout=True) -> DeviceProxy
+    DeviceProxy(self, dev_name, need_check_acc, green_mode=None, wait=True, timeout=True) -> DeviceProxy
+
+    Creates a new :class:`~PyTango.DeviceProxy`.
+     
+    :param dev_name: the device name or alias
+    :type dev_name: str
+    :param need_check_acc: in first version of the function it defaults to True.
+                           Determines if at creation time of DeviceProxy it should check
+                           for channel access (rarely used)
+    :type need_check_acc: bool
+    :param green_mode: determines the mode of execution of the device (including.
+                      the way it is created). Defaults to the current global
+                      green_mode (check :func:`~PyTango.get_green_mode` and
+                      :func:`~PyTango.set_green_mode`)
+    :type green_mode: :obj:`~PyTango.GreenMode`
+    :param wait: whether or not to wait for result. If green_mode
+                 Ignored when green_mode is Synchronous (always waits).
+    :type wait: bool
+    :param timeout: The number of seconds to wait for the result.
+                    If None, then there is no limit on the wait time.
+                    Ignored when green_mode is Synchronous or wait is False.
+    :type timeout: float
+    :returns:
+        if green_mode is Synchronous or wait is True:
+            :class:`~PyTango.DeviceProxy`
+        elif green_mode is Futures:
+            :class:`concurrent.futures.Future`
+        elif green_mode is Gevent:
+            :class:`gevent.event.AsynchResult`
+    :throws:
+        * :class:`~PyTango.DevFailed` if green_mode is Synchronous or wait is True 
+          and there is an error creating the device.
+        * :class:`concurrent.futures.TimeoutError` if green_mode is Futures,
+          wait is False, timeout is not None and the time to create the device
+          has expired.                            
+        * :class:`gevent.timeout.Timeout` if green_mode is Gevent, wait is False,
+          timeout is not None and the time to create the device has expired.
+
+    .. versionadded:: 8.1.0
+        *green_mode* parameter.
+        *wait* parameter.
+        *timeout* parameter.
+
     """
 
 #-------------------------------------
@@ -937,7 +1170,7 @@ def __doc_DeviceProxy():
 
             All DeviceInfo fields are strings except for the server_version
             which is an integer"
-    """ )
+    """)
 
     document_method("get_device_db", """
     get_device_db(self) -> Database
@@ -948,28 +1181,7 @@ def __doc_DeviceProxy():
         Return     : (Database) object
 
         New in PyTango 7.0.0
-    """ )
-
-    document_method("status", """
-    status(self) -> str
-
-            A method which returns the status of the device as a string.
-
-        Parameters : None
-        Return     : (str) describing the device status
-    """ )
-
-    document_method("state", """
-    state(self) -> DevState
-
-            A method which returns the state of the device.
-
-        Parameters : None
-        Return     : (DevState) constant
-        Example :
-                dev_st = dev.state()
-                if dev_st == DevState.ON : ...
-    """ )
+    """)
 
     document_method("adm_name", """
     adm_name(self) -> str
@@ -979,7 +1191,7 @@ def __doc_DeviceProxy():
             server, e.g restart it
 
         New in PyTango 3.0.4
-    """ )
+    """)
 
     document_method("description", """
     description(self) -> str
@@ -988,20 +1200,34 @@ def __doc_DeviceProxy():
 
         Parameters : None
         Return     : (str) describing the device
-    """ )
+    """)
 
     document_method("name", """
     name(self) -> str
 
             Return the device name from the device itself.
-    """ )
+    """)
 
     document_method("alias", """
     alias(self) -> str
 
             Return the device alias if one is defined.
             Otherwise, throws exception.
-    """ )
+
+        Return     : (str) device alias
+    """)
+
+    document_method("get_tango_lib_version", """
+    get_tango_lib_version(self) -> int
+
+            Returns the Tango lib version number used by the remote device
+            Otherwise, throws exception.
+
+        Return     : (int) The device Tango lib version as a 3 or 4 digits number.
+                     Possible return value are: 100,200,500,520,700,800,810,...
+        
+        New in PyTango 8.1.0
+    """)
 
     document_method("ping", """
     ping(self) -> int
@@ -1009,9 +1235,9 @@ def __doc_DeviceProxy():
             A method which sends a ping to the device
 
         Parameters : None
-        Return     : (int) time elapsed in milliseconds
+        Return     : (int) time elapsed in microseconds
         Throws     : exception if device is not alive
-    """ )
+    """)
 
     document_method("black_box", """
     black_box(self, n) -> sequence<str>
@@ -1025,7 +1251,7 @@ def __doc_DeviceProxy():
                      was executed
         Example :
                 print(black_box(4))
-    """ )
+    """)
 
 #-------------------------------------
 #   Device methods
@@ -1051,7 +1277,7 @@ def __doc_DeviceProxy():
                 print(com_info.disp_level)
                 
         See CommandInfo documentation string form more detail
-    """ )
+    """)
 
     document_method("command_list_query", """
     command_list_query(self) -> sequence<CommandInfo>
@@ -1060,7 +1286,7 @@ def __doc_DeviceProxy():
 
         Parameters : None
         Return     : (CommandInfoList) Sequence of CommandInfo objects
-    """ )
+    """)
 
     document_method("import_info", """
     import_info(self) -> DbDevImportInfo
@@ -1078,7 +1304,7 @@ def __doc_DeviceProxy():
 
         All DbDevImportInfo fields are strings except for exported which
         is an integer"
-    """ )
+    """)
 
 #-------------------------------------
 #   Property methods
@@ -1101,7 +1327,7 @@ def __doc_DeviceProxy():
 
         Throws     : ConnectionFailed, CommunicationFailed,
                      DevFailed from device
-    """ )
+    """)
 
     # get_attribute_config -> in code
     # get_attribute_config_ex -> in code
@@ -1118,7 +1344,7 @@ def __doc_DeviceProxy():
 
         Throws     : ConnectionFailed, CommunicationFailed,
                      DevFailed from device
-    """ )
+    """)
 
     document_method("attribute_list_query", """
     attribute_list_query(self) -> sequence<AttributeInfo>
@@ -1132,7 +1358,7 @@ def __doc_DeviceProxy():
 
         Throws     : ConnectionFailed, CommunicationFailed,
                      DevFailed from device
-    """ )
+    """)
 
     document_method("attribute_list_query_ex", """
     attribute_list_query_ex(self) -> sequence<AttributeInfoEx>
@@ -1146,21 +1372,34 @@ def __doc_DeviceProxy():
 
         Throws     : ConnectionFailed, CommunicationFailed,
                      DevFailed from device
-    """ )
+    """)
 
     # set_attribute_config -> in code
 
     document_method("read_attribute", """
-    read_attribute(self, attr_name, extract_as=ExtractAs.Numpy) -> DeviceAttribute
+    read_attribute(self, attr_name, extract_as=ExtractAs.Numpy, green_mode=None, wait=True, timeout=None) -> DeviceAttribute
 
             Read a single attribute.
 
         Parameters :
             - attr_name  : (str) The name of the attribute to read.
             - extract_as : (ExtractAs) Defaults to numpy.
+            - green_mode : (GreenMode) Defaults to the current DeviceProxy GreenMode.
+                           (see :meth:`~PyTango.DeviceProxy.get_green_mode` and
+                           :meth:`~PyTango.DeviceProxy.set_green_mode`).
+            - wait       : (bool) whether or not to wait for result. If green_mode
+                           is *Synchronous*, this parameter is ignored as it always
+                           waits for the result.
+                           Ignored when green_mode is Synchronous (always waits).
+            - timeout    : (float) The number of seconds to wait for the result.
+                           If None, then there is no limit on the wait time.
+                           Ignored when green_mode is Synchronous or wait is False.
+
         Return     : (DeviceAttribute)
         
         Throws     : ConnectionFailed, CommunicationFailed, DevFailed from device
+                     TimeoutError (green_mode == Futures) If the future didn't finish executing before the given timeout.
+                     Timeout (green_mode == Gevent) If the async result didn't finish executing before the given timeout.
             
     .. versionchanged:: 7.1.4
         For DevEncoded attributes, before it was returning a DeviceAttribute.value
@@ -1175,50 +1414,107 @@ def __doc_DeviceProxy():
         in which case it returns **(format<str>, data<str>)**. Carefull, if
         using python >= 3 data<str> is decoded using default python 
         *utf-8* encoding. This means that PyTango assumes tango DS was written
-        encapsulating string into *utf-8* which is the default python enconding.
-    """ )
+        encapsulating string into *utf-8* which is the default python encoding.
+
+    .. versionadded:: 8.1.0
+        *green_mode* parameter.
+        *wait* parameter.
+        *timeout* parameter.
+    """)
 
     document_method("read_attributes", """
-        read_attributes(self, attr_names, extract_as=ExtractAs.Numpy) -> sequence<DeviceAttribute>
+    read_attributes(self, attr_names, extract_as=ExtractAs.Numpy, green_mode=None, wait=True, timeout=None) -> sequence<DeviceAttribute>
 
-                Read the list of specified attributes.
+            Read the list of specified attributes.
 
-            Parameters :
-                    - attr_names : (sequence<str>) A list of attributes to read.
-                    - extract_as : (ExtractAs) Defaults to numpy.
-            Return     : (sequence<DeviceAttribute>)
+        Parameters :
+                - attr_names : (sequence<str>) A list of attributes to read.
+                - extract_as : (ExtractAs) Defaults to numpy.
+                - green_mode : (GreenMode) Defaults to the current DeviceProxy GreenMode.
+                               (see :meth:`~PyTango.DeviceProxy.get_green_mode` and
+                               :meth:`~PyTango.DeviceProxy.set_green_mode`).
+                - wait       : (bool) whether or not to wait for result. If green_mode
+                               is *Synchronous*, this parameter is ignored as it always
+                               waits for the result.
+                               Ignored when green_mode is Synchronous (always waits).
+                - timeout    : (float) The number of seconds to wait for the result.
+                               If None, then there is no limit on the wait time.
+                               Ignored when green_mode is Synchronous or wait is False.
+
+        Return     : (sequence<DeviceAttribute>)
 
-            Throws     : ConnectionFailed, CommunicationFailed, DevFailed from device
-    """ )
+        Throws     : ConnectionFailed, CommunicationFailed, DevFailed from device
+                     TimeoutError (green_mode == Futures) If the future didn't finish executing before the given timeout.
+                     Timeout (green_mode == Gevent) If the async result didn't finish executing before the given timeout.
 
-    document_method("write_attribute", """
-        write_attribute(self, attr_name, value) -> None
-        write_attribute(self, attr_info, value) -> None
+    .. versionadded:: 8.1.0
+        *green_mode* parameter.
+        *wait* parameter.
+        *timeout* parameter.
+    """)
 
-                Write a single attribute.
+    document_method("write_attribute", """
+    write_attribute(self, attr_name, value, green_mode=None, wait=True, timeout=None) -> None
+    write_attribute(self, attr_info, value, green_mode=None, wait=True, timeout=None) -> None
 
-            Parameters :
-                    - attr_name : (str) The name of the attribute to write.
-                    - attr_info : (AttributeInfo)
-                    - value : The value. For non SCALAR attributes it may be any sequence of sequences.
+            Write a single attribute.
 
-            Throws     : ConnectionFailed, CommunicationFailed, DeviceUnlocked, DevFailed from device
-    """ )
+        Parameters :
+                - attr_name : (str) The name of the attribute to write.
+                - attr_info : (AttributeInfo)
+                - value : The value. For non SCALAR attributes it may be any sequence of sequences.
+                - green_mode : (GreenMode) Defaults to the current DeviceProxy GreenMode.
+                               (see :meth:`~PyTango.DeviceProxy.get_green_mode` and
+                               :meth:`~PyTango.DeviceProxy.set_green_mode`).
+                - wait       : (bool) whether or not to wait for result. If green_mode
+                               is *Synchronous*, this parameter is ignored as it always
+                               waits for the result.
+                               Ignored when green_mode is Synchronous (always waits).
+                - timeout    : (float) The number of seconds to wait for the result.
+                               If None, then there is no limit on the wait time.
+                               Ignored when green_mode is Synchronous or wait is False.
+
+        Throws     : ConnectionFailed, CommunicationFailed, DeviceUnlocked, DevFailed from device
+                     TimeoutError (green_mode == Futures) If the future didn't finish executing before the given timeout.
+                     Timeout (green_mode == Gevent) If the async result didn't finish executing before the given timeout.
+
+    .. versionadded:: 8.1.0
+        *green_mode* parameter.
+        *wait* parameter.
+        *timeout* parameter.
+    """)
 
     document_method("write_attributes", """
-    write_attributes(self, name_val) -> None
+    write_attributes(self, name_val, green_mode=None, wait=True, timeout=None) -> None
 
             Write the specified attributes.
 
         Parameters :
                 - name_val: A list of pairs (attr_name, value). See write_attribute
+                - green_mode : (GreenMode) Defaults to the current DeviceProxy GreenMode.
+                               (see :meth:`~PyTango.DeviceProxy.get_green_mode` and
+                               :meth:`~PyTango.DeviceProxy.set_green_mode`).
+                - wait       : (bool) whether or not to wait for result. If green_mode
+                               is *Synchronous*, this parameter is ignored as it always
+                               waits for the result.
+                               Ignored when green_mode is Synchronous (always waits).
+                - timeout    : (float) The number of seconds to wait for the result.
+                               If None, then there is no limit on the wait time.
+                               Ignored when green_mode is Synchronous or wait is False.
 
         Throws     : ConnectionFailed, CommunicationFailed, DeviceUnlocked,
                      DevFailed or NamedDevFailedList from device
-    """ )
+                     TimeoutError (green_mode == Futures) If the future didn't finish executing before the given timeout.
+                     Timeout (green_mode == Gevent) If the async result didn't finish executing before the given timeout.
+
+    .. versionadded:: 8.1.0
+        *green_mode* parameter.
+        *wait* parameter.
+        *timeout* parameter.
+    """)
 
     document_method("write_read_attribute", """
-    write_read_attribute(self, attr_name, value, extract_as=ExtractAs.Numpy) -> DeviceAttribute
+    write_read_attribute(self, attr_name, value, extract_as=ExtractAs.Numpy, green_mode=None, wait=True, timeout=None) -> DeviceAttribute
 
             Write then read a single attribute in a single network call.
             By default (serialisation by device), the execution of this call in
@@ -1229,9 +1525,16 @@ def __doc_DeviceProxy():
 
         Throws     : ConnectionFailed, CommunicationFailed, DeviceUnlocked,
                      DevFailed from device, WrongData
+                     TimeoutError (green_mode == Futures) If the future didn't finish executing before the given timeout.
+                     Timeout (green_mode == Gevent) If the async result didn't finish executing before the given timeout.
 
         New in PyTango 7.0.0
-    """ )
+
+    .. versionadded:: 8.1.0
+        *green_mode* parameter.
+        *wait* parameter.
+        *timeout* parameter.
+    """)
 
 #-------------------------------------
 #   History methods
@@ -1249,7 +1552,7 @@ def __doc_DeviceProxy():
 
         Throws     : NonSupportedFeature, ConnectionFailed,
                      CommunicationFailed, DevFailed from device
-    """ )
+    """)
 
     document_method("attribute_history", """
     attribute_history(self, attr_name, depth, extract_as=ExtractAs.Numpy) -> sequence<DeviceAttributeHistory>
@@ -1266,7 +1569,7 @@ def __doc_DeviceProxy():
 
         Throws     : NonSupportedFeature, ConnectionFailed,
                      CommunicationFailed, DevFailed from device
-    """ )
+    """)
 
 #-------------------------------------
 #   Polling administration methods
@@ -1288,7 +1591,7 @@ def __doc_DeviceProxy():
                         - time since data in the ring buffer has not been updated
                         - delta time between the last records in the ring buffer
                         - exception parameters in case of the last execution failed
-    """ )
+    """)
 
     document_method("poll_command", """
     poll_command(self, cmd_name, period) -> None
@@ -1299,7 +1602,7 @@ def __doc_DeviceProxy():
             - cmd_name : (str) command name
             - period   : (int) polling period in milliseconds
         Return     : None
-    """ )
+    """)
 
     document_method("poll_attribute", """
     poll_attribute(self, attr_name, period) -> None
@@ -1310,7 +1613,7 @@ def __doc_DeviceProxy():
             - attr_name : (str) attribute name
             - period    : (int) polling period in milliseconds
         Return     : None
-    """ )
+    """)
 
     document_method("get_command_poll_period", """
     get_command_poll_period(self, cmd_name) -> int
@@ -1320,7 +1623,7 @@ def __doc_DeviceProxy():
         Parameters :
             - cmd_name : (str) command name
         Return     : polling period in milliseconds
-    """ )
+    """)
 
     document_method("get_attribute_poll_period", """
     get_attribute_poll_period(self, attr_name) -> int
@@ -1330,7 +1633,7 @@ def __doc_DeviceProxy():
         Parameters :
             - attr_name : (str) attribute name
         Return     : polling period in milliseconds
-    """ )
+    """)
 
     document_method("is_command_polled", """
     is_command_polled(self, cmd_name) -> bool
@@ -1340,7 +1643,7 @@ def __doc_DeviceProxy():
         Parameters :
             - cmd_name : (str) command name
         Return     : boolean value
-    """ )
+    """)
 
     document_method("is_attribute_polled", """
     is_attribute_polled(self, attr_name) -> bool
@@ -1350,7 +1653,7 @@ def __doc_DeviceProxy():
         Parameters :
             - attr_name : (str) attribute name
         Return     : boolean value
-    """ )
+    """)
 
     document_method("stop_poll_command", """
     stop_poll_command(self, cmd_name) -> None
@@ -1360,7 +1663,7 @@ def __doc_DeviceProxy():
         Parameters :
             - cmd_name : (str) command name
         Return     : None
-    """ )
+    """)
 
     document_method("stop_poll_attribute", """
     stop_poll_attribute(self, attr_name) -> None
@@ -1370,7 +1673,7 @@ def __doc_DeviceProxy():
         Parameters :
             - attr_name : (str) attribute name
         Return     : None
-    """ )
+    """)
 
 #-------------------------------------
 #   Asynchronous methods
@@ -1421,7 +1724,7 @@ def __doc_DeviceProxy():
                      CommunicationFailed, DevFailed from device
 
         New in PyTango 7.0.0
-    """ )
+    """)
 
     document_method("pending_asynch_call", """
     pending_asynch_call(self) -> int
@@ -1429,7 +1732,7 @@ def __doc_DeviceProxy():
             Return number of device asynchronous pending requests"
 
         New in PyTango 7.0.0
-    """ )
+    """)
 
     # write_attributes_asynch -> in code
 
@@ -1470,46 +1773,7 @@ def __doc_DeviceProxy():
         Throws     : AsynCall, AsynReplyNotArrived, CommunicationFailed, DevFailed from device.
 
         New in PyTango 7.0.0
-    """ )
-    
-    document_method("write_attribute_reply", """
-    write_attribute_reply(self, id) -> None
-
-            Check if the answer of an asynchronous write_attribute is arrived
-            (polling model). If the reply is arrived and if it is a valid reply,
-            the call returned. If the reply is an exception, it is re-thrown by
-            this call. An exception is also thrown in case of the reply is not
-            yet arrived.
-
-        Parameters :
-            - id : (int) the asynchronous call identifier.
-        Return     : None
-
-        Throws     : AsynCall, AsynReplyNotArrived, CommunicationFailed, DevFailed from device.
-
-        New in PyTango 7.0.0
-
-    write_attribute_reply(self, id, timeout) -> None
-
-            Check if the answer of an asynchronous write_attribute is arrived
-            (polling model). id is the asynchronous call identifier. If the
-            reply is arrived and if it is a valid reply, the call returned. If
-            the reply is an exception, it is re-thrown by this call. If the
-            reply is not yet arrived, the call will wait (blocking the process)
-            for the time specified in timeout. If after timeout milliseconds,
-            the reply is still not there, an exception is thrown. If timeout is
-            set to 0, the call waits until the reply arrived.
-            
-        Parameters :
-            - id      : (int) the asynchronous call identifier.
-            - timeout : (int) the timeout
-            
-        Return     : None
-
-        Throws     : AsynCall, AsynReplyNotArrived, CommunicationFailed, DevFailed from device.
-
-        New in PyTango 7.0.0
-    """ )
+    """)
 
 #-------------------------------------
 #   Logging administration methods
@@ -1538,7 +1802,7 @@ def __doc_DeviceProxy():
         Throws     : DevFailed from device
 
         New in PyTango 7.0.0
-    """ )
+    """)
 
     document_method("remove_logging_target", """
     remove_logging_target(self, target_type_target_name) -> None
@@ -1562,7 +1826,7 @@ def __doc_DeviceProxy():
         Return     : None
 
         New in PyTango 7.0.0
-    """ )
+    """)
 
     document_method("get_logging_target", """
     get_logging_target(self) -> sequence<str>
@@ -1576,7 +1840,7 @@ def __doc_DeviceProxy():
         Return     : a squence<str> with the logging targets
 
         New in PyTango 7.0.0
-    """ )
+    """)
 
     document_method("get_logging_level", """
     get_logging_level(self) -> int
@@ -1593,7 +1857,7 @@ def __doc_DeviceProxy():
         Return     : (int) representing the current logging level
 
         New in PyTango 7.0.0
-    """ )
+    """)
 
     document_method("set_logging_level", """
     set_logging_level(self, (int)level) -> None
@@ -1611,7 +1875,7 @@ def __doc_DeviceProxy():
         Return     : None
 
         New in PyTango 7.0.0
-    """ )
+    """)
 
 #-------------------------------------
 #   Event methods
@@ -1637,7 +1901,7 @@ def __doc_DeviceProxy():
         Throws     : EventSystemFailed
 
         New in PyTango 7.0.0
-    """ )
+    """)
 
     document_method("get_last_event_date", """
     get_last_event_date(self, event_id) -> TimeVal
@@ -1656,7 +1920,7 @@ def __doc_DeviceProxy():
         Throws     : EventSystemFailed
 
         New in PyTango 7.0.0
-    """ )
+    """)
 
     document_method("is_event_queue_empty", """
     is_event_queue_empty(self, event_id) -> bool
@@ -1673,7 +1937,7 @@ def __doc_DeviceProxy():
             Throws     : EventSystemFailed
 
             New in PyTango 7.0.0
-    """ )
+    """)
 
 #-------------------------------------
 #   Locking methods
@@ -1718,7 +1982,7 @@ def __doc_DeviceProxy():
         Return     : None
 
         New in PyTango 7.0.0
-    """ )
+    """)
 
     document_method("unlock", """
     unlock(self, (bool)force) -> None
@@ -1737,7 +2001,7 @@ def __doc_DeviceProxy():
         Return     : None
 
         New in PyTango 7.0.0
-    """ )
+    """)
 
     document_method("locking_status", """
     locking_status(self) -> str
@@ -1758,7 +2022,7 @@ def __doc_DeviceProxy():
         Return     : a string representing the current locking status
 
         New in PyTango 7.0.0"
-    """ )
+    """)
 
     document_method("is_locked", """
     is_locked(self) -> bool
@@ -1769,7 +2033,7 @@ def __doc_DeviceProxy():
         Return     : (bool) True if the device is locked. Otherwise, False
 
         New in PyTango 7.0.0
-    """ )
+    """)
 
     document_method("is_locked_by_me", """
     is_locked_by_me(self) -> bool
@@ -1782,7 +2046,7 @@ def __doc_DeviceProxy():
                         Otherwise, False
 
         New in PyTango 7.0.0
-    """ )
+    """)
 
     document_method("get_locker", """
     get_locker(self, lockinfo) -> bool
@@ -1798,7 +2062,7 @@ def __doc_DeviceProxy():
                      Otherwise, False
 
         New in PyTango 7.0.0
-    """ )
+    """)
 
 def device_proxy_init(doc=True):
     __init_DeviceProxy()
diff --git a/src/boost/python/device_server.py b/src/boost/python/device_server.py
index 8c05fa5..e19cb5b 100644
--- a/src/boost/python/device_server.py
+++ b/src/boost/python/device_server.py
@@ -1,25 +1,13 @@
-################################################################################
-##
-## This file is part of PyTango, a python binding for Tango
-## 
-## http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## PyTango is free software: you can redistribute it and/or modify
-## it under the terms of the GNU Lesser General Public License as published by
-## the Free Software Foundation, either version 3 of the License, or
-## (at your option) any later version.
-## 
-## PyTango 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 Lesser General Public License for more details.
-## 
-## You should have received a copy of the GNU Lesser General Public License
-## along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-##
-################################################################################
+# ------------------------------------------------------------------------------
+# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+#
+# Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+# Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+#
+# Distributed under the terms of the GNU Lesser General Public License,
+# either version 3 of the License, or (at your option) any later version.
+# See LICENSE.txt for more info.
+# ------------------------------------------------------------------------------
 
 """
 This is an internal PyTango module.
diff --git a/src/boost/python/encoded_attribute.py b/src/boost/python/encoded_attribute.py
index d23d784..ca39bdd 100644
--- a/src/boost/python/encoded_attribute.py
+++ b/src/boost/python/encoded_attribute.py
@@ -1,25 +1,13 @@
-################################################################################
-##
-## This file is part of PyTango, a python binding for Tango
-## 
-## http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## PyTango is free software: you can redistribute it and/or modify
-## it under the terms of the GNU Lesser General Public License as published by
-## the Free Software Foundation, either version 3 of the License, or
-## (at your option) any later version.
-## 
-## PyTango 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 Lesser General Public License for more details.
-## 
-## You should have received a copy of the GNU Lesser General Public License
-## along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-##
-################################################################################
+# ------------------------------------------------------------------------------
+# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+#
+# Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+# Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+#
+# Distributed under the terms of the GNU Lesser General Public License,
+# either version 3 of the License, or (at your option) any later version.
+# See LICENSE.txt for more info.
+# ------------------------------------------------------------------------------
 
 """
 This is an internal PyTango module.
@@ -44,7 +32,7 @@ if constants.NUMPY_SUPPORT:
         np = None
 else:
     np = None
-    
+
 _allowed_extract = ExtractAs.Numpy, ExtractAs.String, ExtractAs.Tuple, \
                    ExtractAs.List
 
@@ -81,7 +69,7 @@ def __EncodedAttribute_encode_jpeg_gray8(self, gray8, width=0, height=0, quality
                data = numpy.arange(100, dtype=numpy.byte)
                data = numpy.array((data,data,data))
                enc.encode_jpeg_gray8(data)
-               attr.set_value(data)
+               attr.set_value(enc)
     """
     self._generic_encode_gray8(gray8, width=width, height=height, quality=quality, format=_ImageFormat.JpegImage)
 
@@ -116,7 +104,7 @@ def __EncodedAttribute_encode_gray8(self, gray8, width=0, height=0):
                data = numpy.arange(100, dtype=numpy.byte)
                data = numpy.array((data,data,data))
                enc.encode_gray8(data)
-               attr.set_value(data)
+               attr.set_value(enc)
     """
     self._generic_encode_gray8(gray8, width=width, height=height, format=_ImageFormat.RawImage)
 
@@ -125,19 +113,19 @@ def __EncodedAttribute_generic_encode_gray8(self, gray8, width=0, height=0, qual
     if not is_seq(gray8):
         raise TypeError("Expected sequence (str, numpy.ndarray, list, tuple "
                         "or bytearray) as first argument")
-    
+
     is_str = is_pure_str(gray8)
     if is_str:
         if not width or not height:
             raise ValueError("When giving a string as data, you must also "
                              "supply width and height")
-    
+
     if np and isinstance(gray8, np.ndarray):
         if gray8.ndim != 2:
             if not width or not height:
                 raise ValueError("When giving a non 2D numpy array, width and "
                                  "height must be supplied")
-            if gray8.nbytes != width*height:
+            if gray8.nbytes != width * height:
                 raise ValueError("numpy array size mismatch")
         else:
             if gray8.itemsize != 1:
@@ -153,7 +141,7 @@ def __EncodedAttribute_generic_encode_gray8(self, gray8, width=0, height=0, qual
         height = len(gray8)
         if height < 1:
             raise IndexError("Expected sequence with at least one row")
-        
+
         row0 = gray8[0]
         if not is_seq(row0):
             raise IndexError("Expected sequence (str, numpy.ndarray, list, tuple or "
@@ -196,25 +184,25 @@ def __EncodedAttribute_encode_gray16(self, gray16, width=0, height=0):
                data = numpy.arange(100, dtype=numpy.int16)
                data = numpy.array((data,data,data))
                enc.encode_gray16(data)
-               attr.set_value(data)
+               attr.set_value(enc)
     """
     if not is_seq(gray16):
         raise TypeError("Expected sequence (str, numpy.ndarray, list, tuple "
                         "or bytearray) as first argument")
-    
+
     is_str = is_pure_str(gray16)
     if is_str:
         if not width or not height:
             raise ValueError("When giving a string as data, you must also "
                              "supply width and height")
-    
-    
+
+
     if np and isinstance(gray16, np.ndarray):
         if gray16.ndim != 2:
             if not width or not height:
                 raise ValueError("When giving a non 2D numpy array, width and "
                                  "height must be supplied")
-            if gray16.nbytes/2 != width*height:
+            if gray16.nbytes / 2 != width * height:
                 raise ValueError("numpy array size mismatch")
         else:
             if gray16.itemsize != 2:
@@ -225,12 +213,12 @@ def __EncodedAttribute_encode_gray16(self, gray16, width=0, height=0):
         if gray16.flags.aligned != True:
             raise TypeError("Currently, only contiguous, aligned numpy arrays "
                             "are supported")
-    
+
     if not is_str and (not width or not height):
         height = len(gray16)
         if height < 1:
             raise IndexError("Expected sequence with at least one row")
-        
+
         row0 = gray16[0]
         if not is_seq(row0):
             raise IndexError("Expected sequence (str, numpy.ndarray, list, tuple or "
@@ -238,7 +226,7 @@ def __EncodedAttribute_encode_gray16(self, gray16, width=0, height=0):
         width = len(row0)
         if is_pure_str(row0) or type(row0) == bytearray:
             width /= 2
-    
+
     self._encode_gray16(gray16, width, height)
 
 def __EncodedAttribute_encode_jpeg_rgb24(self, rgb24, width=0, height=0, quality=100.0):
@@ -275,7 +263,7 @@ def __EncodedAttribute_encode_jpeg_rgb24(self, rgb24, width=0, height=0, quality
                # create an 'image' where each pixel is R=0x01, G=0x01, B=0x01
                arr = numpy.ones((10,10,3), dtype=numpy.uint8)
                enc.encode_jpeg_rgb24(data)
-               attr.set_value(data)
+               attr.set_value(enc)
     """
     self._generic_encode_rgb24(rgb24, width=width, height=height, quality=quality, format=_ImageFormat.JpegImage)
 
@@ -311,28 +299,28 @@ def __EncodedAttribute_encode_rgb24(self, rgb24, width=0, height=0):
                # create an 'image' where each pixel is R=0x01, G=0x01, B=0x01
                arr = numpy.ones((10,10,3), dtype=numpy.uint8)
                enc.encode_rgb24(data)
-               attr.set_value(data)
+               attr.set_value(enc)
     """
     self._generic_encode_rgb24(rgb24, width=width, height=height, format=_ImageFormat.RawImage)
-    
+
 def __EncodedAttribute_generic_encode_rgb24(self, rgb24, width=0, height=0, quality=0, format=_ImageFormat.RawImage):
     """Internal usage only"""
     if not is_seq(rgb24):
         raise TypeError("Expected sequence (str, numpy.ndarray, list, tuple "
                         "or bytearray) as first argument")
-    
+
     is_str = is_pure_str(rgb24)
     if is_str:
         if not width or not height:
             raise ValueError("When giving a string as data, you must also "
                              "supply width and height")
-    
+
     if np and isinstance(rgb24, np.ndarray):
         if rgb24.ndim != 3:
             if not width or not height:
                 raise ValueError("When giving a non 2D numpy array, width and "
                                  "height must be supplied")
-            if rgb24.nbytes/3 != width*height:
+            if rgb24.nbytes / 3 != width * height:
                 raise ValueError("numpy array size mismatch")
         else:
             if rgb24.itemsize != 1:
@@ -343,12 +331,12 @@ def __EncodedAttribute_generic_encode_rgb24(self, rgb24, width=0, height=0, qual
         if rgb24.flags.aligned != True:
             raise TypeError("Currently, only contiguous, aligned numpy arrays "
                             "are supported")
-    
+
     if not is_str and (not width or not height):
         height = len(rgb24)
         if height < 1:
             raise IndexError("Expected sequence with at least one row")
-        
+
         row0 = rgb24[0]
         if not is_seq(row0):
             raise IndexError("Expected sequence (str, numpy.ndarray, list, tuple or "
@@ -391,24 +379,24 @@ def __EncodedAttribute_encode_jpeg_rgb32(self, rgb32, width=0, height=0, quality
                data = numpy.arange(100, dtype=numpy.int32)
                data = numpy.array((data,data,data))
                enc.encode_jpeg_rgb32(data)
-               attr.set_value(data)
+               attr.set_value(enc)
     """
     if not is_seq(rgb32):
         raise TypeError("Expected sequence (str, numpy.ndarray, list, tuple "
                         "or bytearray) as first argument")
-    
+
     is_str = is_pure_str(rgb32)
     if is_str:
         if not width or not height:
             raise ValueError("When giving a string as data, you must also "
                              "supply width and height")
-    
+
     if np and isinstance(rgb32, np.ndarray):
         if rgb32.ndim != 2:
             if not width or not height:
                 raise ValueError("When giving a non 2D numpy array, width and "
                                  "height must be supplied")
-            if rgb32.nbytes/4 != width*height:
+            if rgb32.nbytes / 4 != width * height:
                 raise ValueError("numpy array size mismatch")
         else:
             if rgb32.itemsize != 4:
@@ -424,7 +412,7 @@ def __EncodedAttribute_encode_jpeg_rgb32(self, rgb32, width=0, height=0, quality
         height = len(rgb32)
         if height < 1:
             raise IndexError("Expected sequence with at least one row")
-        
+
         row0 = rgb32[0]
         if not is_seq(row0):
             raise IndexError("Expected sequence (str, numpy.ndarray, list, tuple or "
@@ -553,7 +541,7 @@ def __init_EncodedAttribute():
     EncodedAttribute.decode_gray8 = __EncodedAttribute_decode_gray8
     EncodedAttribute.decode_gray16 = __EncodedAttribute_decode_gray16
     EncodedAttribute.decode_rgb32 = __EncodedAttribute_decode_rgb32
-    
+
 def __doc_EncodedAttribute():
     pass
 
diff --git a/src/boost/python/exception.py b/src/boost/python/exception.py
index b172e04..84b4cf7 100644
--- a/src/boost/python/exception.py
+++ b/src/boost/python/exception.py
@@ -1,25 +1,13 @@
-################################################################################
-##
-## This file is part of PyTango, a python binding for Tango
-## 
-## http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## PyTango is free software: you can redistribute it and/or modify
-## it under the terms of the GNU Lesser General Public License as published by
-## the Free Software Foundation, either version 3 of the License, or
-## (at your option) any later version.
-## 
-## PyTango 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 Lesser General Public License for more details.
-## 
-## You should have received a copy of the GNU Lesser General Public License
-## along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-##
-################################################################################
+# ------------------------------------------------------------------------------
+# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+#
+# Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+# Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+#
+# Distributed under the terms of the GNU Lesser General Public License,
+# either version 3 of the License, or (at your option) any later version.
+# See LICENSE.txt for more info.
+# ------------------------------------------------------------------------------
 
 """
 This is an internal PyTango module.
@@ -30,7 +18,7 @@ __all__ = ["exception_init"]
 __docformat__ = "restructuredtext"
 
 from .utils import document_static_method as __document_static_method
-from ._PyTango import Except, DevError
+from ._PyTango import Except, DevError, ErrSeverity
 
 def __to_dev_failed(exc_type=None, exc_value=None, traceback=None):
     """to_dev_failed(exc_type, exc_value, traceback) -> PyTango.DevFailed
@@ -58,6 +46,27 @@ def __to_dev_failed(exc_type=None, exc_value=None, traceback=None):
     except Exception as e:
         return e
 
+# -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
+# DevError pickle
+# -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
+
+def __DevError__getinitargs__(self):
+    return ()
+
+def __DevError__getstate__(self):
+    return self.reason, self.desc, self.origin, int(self.severity)
+
+def __DevError__setstate__(self, state):
+    self.reason = state[0]
+    self.desc = state[1]
+    self.origin = state[2]
+    self.severity = ErrSeverity(state[3])
+
+def __init_DevError():
+    DevError.__getinitargs__ = __DevError__getinitargs__
+    DevError.__getstate__ = __DevError__getstate__
+    DevError.__setstate__ = __DevError__setstate__
+
 def __init_Except():
     Except.to_dev_failed = staticmethod(__to_dev_failed)
 
@@ -162,6 +171,7 @@ def __doc_DevError():
   
 def exception_init(doc=True):
     __init_Except()
+    __init_DevError()
     if doc:
         __doc_Except()
-        __doc_DevError()
\ No newline at end of file
+        __doc_DevError()
diff --git a/src/boost/python/futures.py b/src/boost/python/futures.py
new file mode 100644
index 0000000..ad98474
--- /dev/null
+++ b/src/boost/python/futures.py
@@ -0,0 +1,109 @@
+# ------------------------------------------------------------------------------
+# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+#
+# Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+# Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+#
+# Distributed under the terms of the GNU Lesser General Public License,
+# either version 3 of the License, or (at your option) any later version.
+# See LICENSE.txt for more info.
+# ------------------------------------------------------------------------------
+
+"""This module exposes a futures version of :class:`PyTango.DeviceProxy` and
+:class:`PyTango.AttributeProxy"""
+
+__all__ = ["DeviceProxy", "AttributeProxy"]
+
+from functools import partial
+
+from PyTango import GreenMode
+from PyTango.device_proxy import get_device_proxy
+from PyTango.attribute_proxy import get_attribute_proxy
+
+
+DeviceProxy = partial(get_device_proxy, green_mode=GreenMode.Futures)
+DeviceProxy.__doc__ = """
+    DeviceProxy(self, dev_name, wait=True, timeout=True) -> DeviceProxy
+    DeviceProxy(self, dev_name, need_check_acc, wait=True, timeout=True) -> DeviceProxy
+
+    Creates a *futures* enabled :class:`~PyTango.DeviceProxy`.
+     
+    The DeviceProxy constructor internally makes some network calls which makes
+    it *slow*. By using the futures *green mode* you are allowing other
+    python code to be executed in a cooperative way.
+
+    .. note::
+        The timeout parameter has no relation with the tango device client side
+        timeout (gettable by :meth:`~PyTango.DeviceProxy.get_timeout_millis` and 
+        settable through :meth:`~PyTango.DeviceProxy.set_timeout_millis`)
+
+    :param dev_name: the device name or alias
+    :type dev_name: str
+    :param need_check_acc: in first version of the function it defaults to True.
+                           Determines if at creation time of DeviceProxy it 
+                           should check for channel access (rarely used)
+    :type need_check_acc: bool
+    :param wait: whether or not to wait for result of creating a DeviceProxy.
+    :type wait: bool
+    :param timeout: The number of seconds to wait for the result.
+                    If None, then there is no limit on the wait time.
+                    Ignored when wait is False.
+    :type timeout: float
+    :returns:
+        if wait is True:
+            :class:`~PyTango.DeviceProxy`
+        else:
+            :class:`concurrent.futures.Future`
+    :throws:
+        * a *DevFailed* if wait is True and there is an error creating 
+          the device.
+        * a *concurrent.futures.TimeoutError* if wait is False, timeout is not
+          None and the time to create the device has expired.                            
+
+    New in PyTango 8.1.0
+"""
+
+AttributeProxy = partial(get_attribute_proxy, green_mode=GreenMode.Futures)
+AttributeProxy.__doc__ = """
+    AttributeProxy(self, full_attr_name, wait=True, timeout=True) -> AttributeProxy
+    AttributeProxy(self, device_proxy, attr_name, wait=True, timeout=True) -> AttributeProxy
+
+    Creates a *futures* enabled :class:`~PyTango.AttributeProxy`.
+    
+    The AttributeProxy constructor internally makes some network calls which
+    makes it *slow*. By using the *gevent mode* you are allowing other python
+    code to be executed in a cooperative way.
+
+    :param full_attr_name: the full name of the attribute
+    :type full_attr_name: str
+    :param device_proxy: the :class:`~PyTango.DeviceProxy`
+    :type device_proxy: DeviceProxy
+    :param attr_name: attribute name for the given device proxy
+    :type attr_name: str
+    :param wait: whether or not to wait for result of creating an
+                 AttributeProxy.
+    :type wait: bool
+    :param timeout: The number of seconds to wait for the result.
+                    If None, then there is no limit on the wait time.
+                    Ignored when wait is False.
+    :type timeout: float
+    :returns:
+        if wait is True:
+            :class:`~PyTango.AttributeProxy`
+        else:
+            :class:`concurrent.futures.Future`
+    :throws:
+        * a *DevFailed* if wait is True  and there is an error creating the
+          attribute.
+        * a *concurrent.futures.TimeoutError* if wait is False, timeout is not
+          None and the time to create the attribute has expired.
+    
+    New in PyTango 8.1.0
+"""
+
+Device = DeviceProxy
+Attribute = AttributeProxy
+
+del GreenMode
+del get_device_proxy
+del get_attribute_proxy
diff --git a/src/boost/python/gevent.py b/src/boost/python/gevent.py
new file mode 100644
index 0000000..b556318
--- /dev/null
+++ b/src/boost/python/gevent.py
@@ -0,0 +1,109 @@
+# ------------------------------------------------------------------------------
+# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+#
+# Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+# Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+#
+# Distributed under the terms of the GNU Lesser General Public License,
+# either version 3 of the License, or (at your option) any later version.
+# See LICENSE.txt for more info.
+# ------------------------------------------------------------------------------
+
+"""This module exposes a gevent version of :class:`PyTango.DeviceProxy` and
+:class:`PyTango.AttributeProxy"""
+
+__all__ = ["DeviceProxy", "AttributeProxy"]
+
+from functools import partial
+
+from PyTango import GreenMode
+from PyTango.device_proxy import get_device_proxy
+from PyTango.attribute_proxy import get_attribute_proxy
+
+
+DeviceProxy = partial(get_device_proxy, green_mode=GreenMode.Gevent)
+DeviceProxy.__doc__ = """
+    DeviceProxy(self, dev_name, wait=True, timeout=True) -> DeviceProxy
+    DeviceProxy(self, dev_name, need_check_acc, wait=True, timeout=True) -> DeviceProxy
+
+    Creates a *gevent* enabled :class:`~PyTango.DeviceProxy`.
+     
+    The DeviceProxy constructor internally makes some network calls which makes
+    it *slow*. By using the gevent *green mode* you are allowing other python
+    code to be executed in a cooperative way.
+
+    .. note::
+        The timeout parameter has no relation with the tango device client side
+        timeout (gettable by :meth:`~PyTango.DeviceProxy.get_timeout_millis` and 
+        settable through :meth:`~PyTango.DeviceProxy.set_timeout_millis`)
+
+    :param dev_name: the device name or alias
+    :type dev_name: str
+    :param need_check_acc: in first version of the function it defaults to True.
+                           Determines if at creation time of DeviceProxy it should check
+                           for channel access (rarely used)
+    :type need_check_acc: bool
+    :param wait: whether or not to wait for result of creating a DeviceProxy.
+    :type wait: bool
+    :param timeout: The number of seconds to wait for the result.
+                    If None, then there is no limit on the wait time.
+                    Ignored when wait is False.
+    :type timeout: float
+    :returns:
+        if wait is True:
+            :class:`~PyTango.DeviceProxy`
+        else:
+            :class:`gevent.event.AsynchResult`
+    :throws:
+        * a *DevFailed* if wait is True and there is an error creating 
+          the device.
+        * a *gevent.timeout.Timeout* if wait is False, timeout is not None and
+          the time to create the device has expired.
+
+    New in PyTango 8.1.0
+"""
+
+AttributeProxy = partial(get_attribute_proxy, green_mode=GreenMode.Gevent)
+AttributeProxy.__doc__ = """
+    AttributeProxy(self, full_attr_name, wait=True, timeout=True) -> AttributeProxy
+    AttributeProxy(self, device_proxy, attr_name, wait=True, timeout=True) -> AttributeProxy
+
+    Creates a *gevent* enabled :class:`~PyTango.AttributeProxy`.
+    
+    The AttributeProxy constructor internally makes some network calls which
+    makes it *slow*. By using the *gevent mode* you are allowing other python
+    code to be executed in a cooperative way.
+
+    :param full_attr_name: the full name of the attribute
+    :type full_attr_name: str
+    :param device_proxy: the :class:`~PyTango.DeviceProxy`
+    :type device_proxy: DeviceProxy
+    :param attr_name: attribute name for the given device proxy
+    :type attr_name: str
+    :param wait: whether or not to wait for result of creating an
+                 AttributeProxy.
+    :type wait: bool
+    :param timeout: The number of seconds to wait for the result.
+                    If None, then there is no limit on the wait time.
+                    Ignored when wait is False.
+    :type timeout: float
+    :returns:
+        if wait is True:
+            :class:`~PyTango.AttributeProxy`
+        else:
+            :class:`gevent.event.AsynchResult`
+    :throws:
+        * a *DevFailed* if wait is True  and there is an error creating the
+          attribute.
+        * a *gevent.timeout.Timeout* if wait is False, timeout is not None
+          and the time to create the attribute has expired.
+    
+    New in PyTango 8.1.0
+"""
+
+Device = DeviceProxy
+Attribute = AttributeProxy
+
+del GreenMode
+del get_device_proxy
+del get_attribute_proxy
diff --git a/src/boost/python/globals.py b/src/boost/python/globals.py
index e288607..f09c0a4 100644
--- a/src/boost/python/globals.py
+++ b/src/boost/python/globals.py
@@ -1,25 +1,13 @@
-################################################################################
-##
-## This file is part of PyTango, a python binding for Tango
-## 
-## http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## PyTango is free software: you can redistribute it and/or modify
-## it under the terms of the GNU Lesser General Public License as published by
-## the Free Software Foundation, either version 3 of the License, or
-## (at your option) any later version.
-## 
-## PyTango 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 Lesser General Public License for more details.
-## 
-## You should have received a copy of the GNU Lesser General Public License
-## along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-##
-################################################################################
+# ------------------------------------------------------------------------------
+# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+#
+# Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+# Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+#
+# Distributed under the terms of the GNU Lesser General Public License,
+# either version 3 of the License, or (at your option) any later version.
+# See LICENSE.txt for more info.
+# ------------------------------------------------------------------------------
 
 """
 This is an internal PyTango module.
diff --git a/src/boost/python/green.py b/src/boost/python/green.py
new file mode 100644
index 0000000..a5ea588
--- /dev/null
+++ b/src/boost/python/green.py
@@ -0,0 +1,163 @@
+# ------------------------------------------------------------------------------
+# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+#
+# Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+# Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+#
+# Distributed under the terms of the GNU Lesser General Public License,
+# either version 3 of the License, or (at your option) any later version.
+# See LICENSE.txt for more info.
+# ------------------------------------------------------------------------------
+
+__all__ = ["get_green_mode", "set_green_mode",
+           "get_executor", "submit", "spawn",
+           "get_synch_executor", "synch_submit",
+           "get_gevent_executor", "gevent_submit",
+           "get_futures_executor", "futures_submit",
+           "result", "submitable", "green"] 
+
+__docformat__ = "restructuredtext"
+
+import os
+from functools import wraps
+
+from ._PyTango import GreenMode
+from .tango_gevent import get_global_executor as get_gevent_executor
+from .tango_gevent import submit as gevent_submit
+from .tango_futures import get_global_executor as get_futures_executor
+from .tango_futures import submit as futures_submit
+
+__default_green_mode = GreenMode.Synchronous
+try:
+    __current_green_mode = getattr(GreenMode,
+                                   os.environ.get("PYTANGO_GREEN_MODE",
+                                                  "Synchronous").capitalize())
+except:
+    __current_green_mode = __default_green_mode
+
+
+def set_green_mode(green_mode=None):
+    """Sets the global default PyTango green mode.
+
+    Advice: Use only in your final application. Don't use this in a python library
+    in order not to interfere with the beavior of other libraries and/or 
+    application where your library is being.
+
+    :param green_mode: the new global default PyTango green mode
+    :type green_mode: GreenMode
+    """
+    global __current_green_mode
+    if green_mode is None:
+        green_mode = GreenMode.Synchronous
+    __current_green_mode = green_mode
+
+
+def get_green_mode():
+    """Returns the current global default PyTango green mode.
+
+    :returns: the current global default PyTango green mode
+    :rtype: GreenMode
+    """
+    return __current_green_mode
+
+
+class SynchExecutor(object):
+    def submit(self, fn, *args, **kwargs):
+        return fn(*args, **kwargs)
+
+__synch_executor = SynchExecutor()
+
+def get_synch_executor():
+    return __synch_executor
+
+def synch_submit(fn, *args, **kwargs):
+    return get_synch_executor().submit(fn, *args, **kwargs)
+
+__executor_map = {
+    GreenMode.Synchronous: get_synch_executor,
+    GreenMode.Futures:     get_futures_executor,
+    GreenMode.Gevent:      get_gevent_executor,
+}
+
+__submit_map = {
+    GreenMode.Synchronous: synch_submit,
+    GreenMode.Futures:     futures_submit,
+    GreenMode.Gevent:      gevent_submit,
+}
+
+def get_executor(mode):
+    return __executor_map[mode]()
+
+def get_submitter(mode):
+    executor = get_executor(mode)
+    if mode == GreenMode.Gevent:
+        return executor.spawn
+    return executor.submit
+
+def submit(mode, fn, *args, **kwargs):
+    return get_submitter(mode)(fn, *args, **kwargs)
+
+spawn = submit
+
+def result(value, green_mode, wait=True, timeout=None):
+    if wait and not green_mode is GreenMode.Synchronous:
+        if green_mode == GreenMode.Futures:
+            return value.result(timeout=timeout)
+        elif green_mode == GreenMode.Gevent:
+            return value.get(timeout=timeout)
+    return value
+
+def submitable(obj, green_mode=None):
+    """Returns a proper submit callable for the given object.
+
+    If the object has *_executors* and *_green_mode* members it returns a submit
+    callable for the executor corresponding to the green_mode.
+    Otherwise it returns the global submit callable for the given green_mode
+
+    :returns: green_mode, submit callable"""
+    # determine the efective green_mode
+    if green_mode is None:
+        if hasattr(obj, "get_green_mode"):
+            green_mode = obj.get_green_mode()
+        else:
+            green_mode = get_green_mode()
+    
+    if green_mode == GreenMode.Synchronous:
+        return green_mode, synch_submit
+    
+    has_executors = hasattr(obj, "_executors")
+    s_func = __submit_map[green_mode]
+    if green_mode == GreenMode.Futures:
+        if has_executors:
+            executor = obj._executors.get(GreenMode.Futures)
+            if executor:
+                s_func = executor.submit
+    elif green_mode == GreenMode.Gevent:
+        if has_executors:
+            executor = obj._executors.get(GreenMode.Gevent)
+            if executor:
+                s_func = executor.spawn
+    else:
+        raise TypeError("Undefined green_mode '%s' for %s" % (str(green_mode)), str(obj))
+    return green_mode, s_func
+
+def green(fn):
+    """make a method green. Can be used as a decorator"""
+
+    @wraps(fn)
+    def greener(self, *args, **kwargs):
+        # first take out all green parameters
+        green_mode = kwargs.pop('green_mode', None)
+        wait = kwargs.pop('wait', True)
+        timeout = kwargs.pop('timeout', None)
+
+        # get the proper submitable for the given green_mode
+        green_mode, submit = submitable(self, green_mode)
+
+        # submit the method
+        ret = submit(fn, self, *args, **kwargs)
+        
+        # return the proper result        
+        return result(ret, green_mode, wait=wait, timeout=timeout)
+    return greener     
+
diff --git a/src/boost/python/group.py b/src/boost/python/group.py
index c121e9b..cbd75b7 100644
--- a/src/boost/python/group.py
+++ b/src/boost/python/group.py
@@ -1,25 +1,13 @@
-################################################################################
-##
-## This file is part of PyTango, a python binding for Tango
-## 
-## http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## PyTango is free software: you can redistribute it and/or modify
-## it under the terms of the GNU Lesser General Public License as published by
-## the Free Software Foundation, either version 3 of the License, or
-## (at your option) any later version.
-## 
-## PyTango 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 Lesser General Public License for more details.
-## 
-## You should have received a copy of the GNU Lesser General Public License
-## along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-##
-################################################################################
+# ------------------------------------------------------------------------------
+# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+#
+# Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+# Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+#
+# Distributed under the terms of the GNU Lesser General Public License,
+# either version 3 of the License, or (at your option) any later version.
+# See LICENSE.txt for more info.
+# ------------------------------------------------------------------------------
 
 """
 This is an internal PyTango module.
@@ -177,8 +165,8 @@ def __init_proxy_Group():
     for fname in proxy_methods:
         proxy_call_define(fname)
     
-    #Group.add.im_func.__doc__ = _RealGroup.add.__doc__
-    #Group.get_group.im_func.__doc__ = _RealGroup.get_group.__doc__
+    #Group.add.__func__.__doc__ = _RealGroup.add.__doc__
+    #Group.get_group.__func__.__doc__ = _RealGroup.get_group.__doc__
     #Group.__doc__ = _RealGroup.__doc__
 
 
diff --git a/src/boost/python/group_reply.py b/src/boost/python/group_reply.py
index 9d045f0..1ac3773 100644
--- a/src/boost/python/group_reply.py
+++ b/src/boost/python/group_reply.py
@@ -1,25 +1,13 @@
-################################################################################
-##
-## This file is part of PyTango, a python binding for Tango
-## 
-## http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## PyTango is free software: you can redistribute it and/or modify
-## it under the terms of the GNU Lesser General Public License as published by
-## the Free Software Foundation, either version 3 of the License, or
-## (at your option) any later version.
-## 
-## PyTango 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 Lesser General Public License for more details.
-## 
-## You should have received a copy of the GNU Lesser General Public License
-## along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-##
-################################################################################
+# ------------------------------------------------------------------------------
+# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+#
+# Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+# Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+#
+# Distributed under the terms of the GNU Lesser General Public License,
+# either version 3 of the License, or (at your option) any later version.
+# See LICENSE.txt for more info.
+# ------------------------------------------------------------------------------
 
 """
 This is an internal PyTango module.
diff --git a/src/boost/python/group_reply_list.py b/src/boost/python/group_reply_list.py
index 272105a..9f5067d 100644
--- a/src/boost/python/group_reply_list.py
+++ b/src/boost/python/group_reply_list.py
@@ -1,25 +1,13 @@
-################################################################################
-##
-## This file is part of PyTango, a python binding for Tango
-## 
-## http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## PyTango is free software: you can redistribute it and/or modify
-## it under the terms of the GNU Lesser General Public License as published by
-## the Free Software Foundation, either version 3 of the License, or
-## (at your option) any later version.
-## 
-## PyTango 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 Lesser General Public License for more details.
-## 
-## You should have received a copy of the GNU Lesser General Public License
-## along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-##
-################################################################################
+# ------------------------------------------------------------------------------
+# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+#
+# Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+# Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+#
+# Distributed under the terms of the GNU Lesser General Public License,
+# either version 3 of the License, or (at your option) any later version.
+# See LICENSE.txt for more info.
+# ------------------------------------------------------------------------------
 
 """
 This is an internal PyTango module.
diff --git a/src/boost/python/ipython/__init__.py b/src/boost/python/ipython/__init__.py
index 6b74895..94e27fb 100644
--- a/src/boost/python/ipython/__init__.py
+++ b/src/boost/python/ipython/__init__.py
@@ -1,41 +1,29 @@
-################################################################################
-##
-## This file is part of PyTango, a python binding for Tango
-## 
-## http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## PyTango is free software: you can redistribute it and/or modify
-## it under the terms of the GNU Lesser General Public License as published by
-## the Free Software Foundation, either version 3 of the License, or
-## (at your option) any later version.
-## 
-## PyTango 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 Lesser General Public License for more details.
-## 
-## You should have received a copy of the GNU Lesser General Public License
-## along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-##
-################################################################################
+# -----------------------------------------------------------------------------
+# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+#
+# Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+# Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+#
+# Distributed under the terms of the GNU Lesser General Public License,
+# either version 3 of the License, or (at your option) any later version.
+# See LICENSE.txt for more info.
+# -----------------------------------------------------------------------------
 
 __all__ = ["init_ipython", "install", "load_ipython_extension",
            "unload_ipython_extension", "load_config"]
 
-from .common import get_python_version, get_python_version_number, \
-    get_ipython_version, get_ipython_version_list, \
-    get_ipython_version_number, get_pytango_version, get_pytango_version_number
+from .common import get_python_version
+from .common import get_ipython_version
+from .common import get_pytango_version
 
-def default_init_ipython(ip, store=True, pytango=True, colors=True,
-                         console=True, magic=True):
+
+def default_init_ipython(*args, **kwargs):
     print("Unsupported IPython version (%s) for tango profile" \
         % get_ipython_version())
     print("Supported IPython versions are: >= 0.10")
     print("Starting normal IPython console...")
 
-def default_install(ipydir=None, verbose=True):
+def default_install(*args, **kwargs):
     print("Unsupported IPython version (%s) for tango profile" \
         % get_ipython_version())
     print("Supported IPython versions are: >= 0.10")
@@ -44,8 +32,9 @@ def default_install(ipydir=None, verbose=True):
 init_ipython = default_init_ipython
 install = default_install
 
-ipv = get_ipython_version_list()
-if ipv >= [0, 10] and ipv < [0, 11]:
+ipv = get_ipython_version()
+
+if ipv >= "0.10" and ipv < "0.11":
     from . import ipython_00_10
     init_ipython = ipython_00_10.init_ipython
     install = ipython_00_10.install
@@ -54,7 +43,7 @@ if ipv >= [0, 10] and ipv < [0, 11]:
     load_config = None
     load_ipython_extension = None
     unload_ipython_extension = None
-elif ipv >= [0, 11] and ipv < [1, 0]:
+elif ipv >= "0.11" and ipv < "1.0":
     from . import ipython_00_11
     init_ipython = None
     install = ipython_00_11.install
@@ -63,7 +52,16 @@ elif ipv >= [0, 11] and ipv < [1, 0]:
     load_config = ipython_00_11.load_config
     load_ipython_extension = ipython_00_11.load_ipython_extension
     unload_ipython_extension = ipython_00_11.unload_ipython_extension
-
+elif ipv >= "1.00":
+    from . import ipython_10_00
+    init_ipython = None
+    install = ipython_10_00.install
+    is_installed = ipython_10_00.is_installed
+    __run = ipython_10_00.run
+    load_config = ipython_10_00.load_config
+    load_ipython_extension = ipython_10_00.load_ipython_extension
+    unload_ipython_extension = ipython_10_00.unload_ipython_extension
+    
 def run():
     if not is_installed():
         install(verbose=False)
diff --git a/src/boost/python/ipython/common.py b/src/boost/python/ipython/common.py
index 8876a09..1ae516f 100644
--- a/src/boost/python/ipython/common.py
+++ b/src/boost/python/ipython/common.py
@@ -1,102 +1,31 @@
 #!/usr/bin/env python
 
-################################################################################
-##
-## This file is part of PyTango, a python binding for Tango
-## 
-## http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## PyTango is free software: you can redistribute it and/or modify
-## it under the terms of the GNU Lesser General Public License as published by
-## the Free Software Foundation, either version 3 of the License, or
-## (at your option) any later version.
-## 
-## PyTango 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 Lesser General Public License for more details.
-## 
-## You should have received a copy of the GNU Lesser General Public License
-## along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-##
-################################################################################
+# -----------------------------------------------------------------------------
+# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+#
+# Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+# Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+#
+# Distributed under the terms of the GNU Lesser General Public License,
+# either version 3 of the License, or (at your option) any later version.
+# See LICENSE.txt for more info.
+# -----------------------------------------------------------------------------
 
 """functions common (hopefully) to all ipython versions"""
 
-__all__ = ["translate_version_str2int", "translate_version_str2list",
-           "get_python_version", "get_python_version_number",
-           "get_ipython_version", "get_ipython_version_list",
-           "get_ipython_version_number",
-           "get_pytango_version", "get_pytango_version_number"]
+__all__ = ["get_python_version",
+           "get_ipython_version",
+           "get_pytango_version"]
 
 import sys
-import math
-
-def translate_version_str2int(version_str):
-    """Translates a version string in format 'x[.y[.z[...]]]' into a 000000 number"""
-    
-    parts = version_str.split('.')
-    i, v, l = 0, 0, len(parts)
-    if not l:
-        return v
-    while i<3:
-        try:
-            v += int(parts[i])*int(math.pow(10,(2-i)*2))
-            l -= 1
-            i += 1
-        except ValueError:
-            return v
-        if not l: return v
-    return v
-    
-    try:
-        v += 10000*int(parts[0])
-        l -= 1
-    except ValueError:
-        return v
-    if not l: return v
-    
-    try:
-        v += 100*int(parts[1])
-        l -= 1
-    except ValueError:
-        return v
-    if not l: return v
-
-    try:
-        v += int(parts[0])
-        l -= 1
-    except ValueError:
-        return v
-    if not l: return v
-
-def translate_version_str2list(version_str):
-    """Translates a version string in format 'x[.y[.z[...]]]' into a list of
-    numbers"""
-    if version_str is None:
-        ver = [0, 0]
-    else:
-        ver = []
-        for i in version_str.split(".")[:2]:
-            try:
-                i = int(i)
-            except:
-                i = 0
-            ver.append(i)
-    return ver
+from distutils.version import StrictVersion
 
 #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
 # Python utilities
 #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
 
 def get_python_version():
-    return '.'.join(map(str, sys.version_info[:3]))
-
-def get_python_version_number():
-    pyver_str = get_python_version()
-    return translate_version_str2int(pyver_str)
+    return StrictVersion('.'.join(map(str, sys.version_info[:3])))
 
 #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
 # IPython utilities
@@ -116,17 +45,7 @@ def get_ipython_version():
                 pass
     except:
         pass
-    return v
-
-def get_ipython_version_list():
-    ipv_str = get_ipython_version()
-    return translate_version_str2list(ipv_str)
-
-def get_ipython_version_number():
-    """Returns the current IPython version number"""
-    ipyver_str = get_ipython_version()
-    if ipyver_str is None: return None
-    return translate_version_str2int(ipyver_str)
+    return StrictVersion(v)
 
 #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
 # PyTango utilities
@@ -138,11 +57,7 @@ def get_pytango_version():
     except:
         return
     try:
-        return PyTango.Release.version
+        v = PyTango.Release.version
     except:
-        return '0.0.0'
-
-def get_pytango_version_number():
-    tgver_str = get_pytango_version()
-    if tgver_str is None: return None
-    return translate_version_str2int(tgver_str)
\ No newline at end of file
+        v = '0.0.0'
+    return StrictVersion(v)
diff --git a/src/boost/python/ipython/eventlogger.py b/src/boost/python/ipython/eventlogger.py
index a05b445..e0ebad3 100644
--- a/src/boost/python/ipython/eventlogger.py
+++ b/src/boost/python/ipython/eventlogger.py
@@ -1,25 +1,13 @@
-################################################################################
-##
-## This file is part of PyTango, a python binding for Tango
-## 
-## http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## PyTango is free software: you can redistribute it and/or modify
-## it under the terms of the GNU Lesser General Public License as published by
-## the Free Software Foundation, either version 3 of the License, or
-## (at your option) any later version.
-## 
-## PyTango 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 Lesser General Public License for more details.
-## 
-## You should have received a copy of the GNU Lesser General Public License
-## along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-##
-################################################################################
+# -----------------------------------------------------------------------------
+# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+#
+# Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+# Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+#
+# Distributed under the terms of the GNU Lesser General Public License,
+# either version 3 of the License, or (at your option) any later version.
+# See LICENSE.txt for more info.
+# -----------------------------------------------------------------------------
 
 from __future__ import print_function
 
diff --git a/src/boost/python/ipython/ipython_00_10/__init__.py b/src/boost/python/ipython/ipython_00_10/__init__.py
index 06b5776..583c19a 100644
--- a/src/boost/python/ipython/ipython_00_10/__init__.py
+++ b/src/boost/python/ipython/ipython_00_10/__init__.py
@@ -1,25 +1,13 @@
-################################################################################
-##
-## This file is part of PyTango, a python binding for Tango
-## 
-## http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## PyTango is free software: you can redistribute it and/or modify
-## it under the terms of the GNU Lesser General Public License as published by
-## the Free Software Foundation, either version 3 of the License, or
-## (at your option) any later version.
-## 
-## PyTango 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 Lesser General Public License for more details.
-## 
-## You should have received a copy of the GNU Lesser General Public License
-## along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-##
-################################################################################
+# -----------------------------------------------------------------------------
+# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+#
+# Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+# Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+#
+# Distributed under the terms of the GNU Lesser General Public License,
+# either version 3 of the License, or (at your option) any later version.
+# See LICENSE.txt for more info.
+# -----------------------------------------------------------------------------
 
 __all__ = ['init_ipython', 'install']
 
diff --git a/src/boost/python/ipython/ipython_00_10/ipy_install.py b/src/boost/python/ipython/ipython_00_10/ipy_install.py
index 00efcc1..8fb2144 100644
--- a/src/boost/python/ipython/ipython_00_10/ipy_install.py
+++ b/src/boost/python/ipython/ipython_00_10/ipy_install.py
@@ -1,27 +1,15 @@
 #!/usr/bin/env python
 
-################################################################################
-##
-## This file is part of PyTango, a python binding for Tango
-## 
-## http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## PyTango is free software: you can redistribute it and/or modify
-## it under the terms of the GNU Lesser General Public License as published by
-## the Free Software Foundation, either version 3 of the License, or
-## (at your option) any later version.
-## 
-## PyTango 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 Lesser General Public License for more details.
-## 
-## You should have received a copy of the GNU Lesser General Public License
-## along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-##
-################################################################################
+# -----------------------------------------------------------------------------
+# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+#
+# Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+# Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+#
+# Distributed under the terms of the GNU Lesser General Public License,
+# either version 3 of the License, or (at your option) any later version.
+# See LICENSE.txt for more info.
+# -----------------------------------------------------------------------------
 
 import sys
 import os
diff --git a/src/boost/python/ipython/ipython_00_10/ipy_qt.py b/src/boost/python/ipython/ipython_00_10/ipy_qt.py
index 38bd4c6..6ba06b6 100644
--- a/src/boost/python/ipython/ipython_00_10/ipy_qt.py
+++ b/src/boost/python/ipython/ipython_00_10/ipy_qt.py
@@ -1,25 +1,13 @@
-################################################################################
-##
-## This file is part of PyTango, a python binding for Tango
-## 
-## http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## PyTango is free software: you can redistribute it and/or modify
-## it under the terms of the GNU Lesser General Public License as published by
-## the Free Software Foundation, either version 3 of the License, or
-## (at your option) any later version.
-## 
-## PyTango 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 Lesser General Public License for more details.
-## 
-## You should have received a copy of the GNU Lesser General Public License
-## along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-##
-################################################################################
+# -----------------------------------------------------------------------------
+# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+#
+# Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+# Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+#
+# Distributed under the terms of the GNU Lesser General Public License,
+# either version 3 of the License, or (at your option) any later version.
+# See LICENSE.txt for more info.
+# -----------------------------------------------------------------------------
 
 import logging
 import PyTango
diff --git a/src/boost/python/ipython/ipython_00_10/ipython_00_10.py b/src/boost/python/ipython/ipython_00_10/ipython_00_10.py
index 1a530ea..9bc8a6c 100644
--- a/src/boost/python/ipython/ipython_00_10/ipython_00_10.py
+++ b/src/boost/python/ipython/ipython_00_10/ipython_00_10.py
@@ -1,27 +1,15 @@
 #!/usr/bin/env python
 
-################################################################################
-##
-## This file is part of PyTango, a python binding for Tango
-## 
-## http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## PyTango is free software: you can redistribute it and/or modify
-## it under the terms of the GNU Lesser General Public License as published by
-## the Free Software Foundation, either version 3 of the License, or
-## (at your option) any later version.
-## 
-## PyTango 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 Lesser General Public License for more details.
-## 
-## You should have received a copy of the GNU Lesser General Public License
-## along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-##
-################################################################################
+# -----------------------------------------------------------------------------
+# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+#
+# Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+# Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+#
+# Distributed under the terms of the GNU Lesser General Public License,
+# either version 3 of the License, or (at your option) any later version.
+# See LICENSE.txt for more info.
+# -----------------------------------------------------------------------------
 
 """An IPython profile designed to provide a user friendly interface to Tango"""
 
@@ -877,10 +865,10 @@ def init_console(ip):
     
     TermColors = IPython.ColorANSI.TermColors
     
-    d = { "version" : PyTango.ipython.get_pytango_version(),
-          "pyver" : PyTango.ipython.get_python_version(),
-          "ipyver" : PyTango.ipython.get_ipython_version(),
-          "pytangover" : PyTango.ipython.get_pytango_version() }
+    d = { "version" : str(PyTango.ipython.get_pytango_version()),
+          "pyver" : str(PyTango.ipython.get_python_version()),
+          "ipyver" : str(PyTango.ipython.get_ipython_version()),
+          "pytangover" : str(PyTango.ipython.get_pytango_version()) }
     d.update(TermColors.__dict__)
 
     o = ip.options
diff --git a/src/boost/python/ipython/ipython_00_11/__init__.py b/src/boost/python/ipython/ipython_00_11/__init__.py
index 443c485..587afd6 100644
--- a/src/boost/python/ipython/ipython_00_11/__init__.py
+++ b/src/boost/python/ipython/ipython_00_11/__init__.py
@@ -1,29 +1,18 @@
-################################################################################
-##
-## This file is part of PyTango, a python binding for Tango
-## 
-## http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## PyTango is free software: you can redistribute it and/or modify
-## it under the terms of the GNU Lesser General Public License as published by
-## the Free Software Foundation, either version 3 of the License, or
-## (at your option) any later version.
-## 
-## PyTango 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 Lesser General Public License for more details.
-## 
-## You should have received a copy of the GNU Lesser General Public License
-## along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-##
-################################################################################
+# -----------------------------------------------------------------------------
+# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+#
+# Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+# Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+#
+# Distributed under the terms of the GNU Lesser General Public License,
+# either version 3 of the License, or (at your option) any later version.
+# See LICENSE.txt for more info.
+# -----------------------------------------------------------------------------
 
 __all__ = ['load_ipython_extension', 'unload_ipython_extension', 'load_config',
            'run', 'install', 'is_installed']
 
-from .ipython_00_11 import load_ipython_extension, unload_ipython_extension, \
+from .ipython_10_00 import load_ipython_extension, unload_ipython_extension, \
     load_config, run
 from .ipy_install import install, is_installed
+
diff --git a/src/boost/python/ipython/ipython_00_11/ipy_install.py b/src/boost/python/ipython/ipython_00_11/ipy_install.py
index 81d916f..d246cb9 100644
--- a/src/boost/python/ipython/ipython_00_11/ipy_install.py
+++ b/src/boost/python/ipython/ipython_00_11/ipy_install.py
@@ -1,27 +1,15 @@
 #!/usr/bin/env python
 
-################################################################################
-##
-## This file is part of PyTango, a python binding for Tango
-## 
-## http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## PyTango is free software: you can redistribute it and/or modify
-## it under the terms of the GNU Lesser General Public License as published by
-## the Free Software Foundation, either version 3 of the License, or
-## (at your option) any later version.
-## 
-## PyTango 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 Lesser General Public License for more details.
-## 
-## You should have received a copy of the GNU Lesser General Public License
-## along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-##
-################################################################################
+# -----------------------------------------------------------------------------
+# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+#
+# Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+# Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+#
+# Distributed under the terms of the GNU Lesser General Public License,
+# either version 3 of the License, or (at your option) any later version.
+# See LICENSE.txt for more info.
+# -----------------------------------------------------------------------------
 
 from __future__ import with_statement
 
@@ -37,6 +25,7 @@ from IPython.utils.io import ask_yes_no
 
 import PyTango
 
+
 __PROFILE = """\
 #!/usr/bin/env ipython
 \"\"\"An automaticaly generated IPython profile designed to provide a user 
@@ -51,14 +40,15 @@ PyTango.ipython.load_config(config)
 # Put any additional environment here
 """
 
+_CONFIG_FILE_NAME = 'ipython_config.py'
+
 def is_installed(ipydir=None, profile='tango'):
     ipython_dir = ipydir or get_ipython_dir()
     try:
         p_dir = ProfileDir.find_profile_dir_by_name(ipython_dir, profile)
     except ProfileDirError:
         return False
-    config_file_name = BaseIPythonApplication.config_file_name.default_value
-    abs_config_file_name = os.path.join(p_dir.location, config_file_name)
+    abs_config_file_name = os.path.join(p_dir.location, _CONFIG_FILE_NAME)
     return os.path.isfile(abs_config_file_name)
 
 def install(ipydir=None, verbose=True, profile='tango'):
@@ -72,9 +62,7 @@ def install(ipydir=None, verbose=True, profile='tango'):
         p_dir = ProfileDir.find_profile_dir_by_name(ipython_dir, profile)
     except ProfileDirError:
         p_dir = ProfileDir.create_profile_dir_by_name(ipython_dir, profile)
-    
-    config_file_name = BaseIPythonApplication.config_file_name.default_value
-    abs_config_file_name = os.path.join(p_dir.location, config_file_name)
+    abs_config_file_name = os.path.join(p_dir.location, _CONFIG_FILE_NAME)
     create_config = True
     if os.path.isfile(abs_config_file_name):
         create_config = ask_yes_no("Tango configuration file already exists. "\
diff --git a/src/boost/python/ipython/ipython_00_11/ipython_00_11.py b/src/boost/python/ipython/ipython_00_11/ipython_00_11.py
index 38a951c..bbf5911 100644
--- a/src/boost/python/ipython/ipython_00_11/ipython_00_11.py
+++ b/src/boost/python/ipython/ipython_00_11/ipython_00_11.py
@@ -1,27 +1,15 @@
 #!/usr/bin/env python
 
-################################################################################
-##
-## This file is part of PyTango, a python binding for Tango
-## 
-## http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## PyTango is free software: you can redistribute it and/or modify
-## it under the terms of the GNU Lesser General Public License as published by
-## the Free Software Foundation, either version 3 of the License, or
-## (at your option) any later version.
-## 
-## PyTango 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 Lesser General Public License for more details.
-## 
-## You should have received a copy of the GNU Lesser General Public License
-## along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-##
-################################################################################
+# -----------------------------------------------------------------------------
+# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+#
+# Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+# Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+#
+# Distributed under the terms of the GNU Lesser General Public License,
+# either version 3 of the License, or (at your option) any later version.
+# See LICENSE.txt for more info.
+# -----------------------------------------------------------------------------
 
 """An IPython profile designed to provide a user friendly interface to Tango"""
 
@@ -1141,10 +1129,10 @@ def load_config(config):
     import PyTango.ipython
     import IPython.utils.coloransi
     
-    d = { "version" : PyTango.ipython.get_pytango_version(),
-          "pyver" : PyTango.ipython.get_python_version(),
-          "ipyver" : PyTango.ipython.get_ipython_version(),
-          "pytangover" : PyTango.ipython.get_pytango_version(), }
+    d = { "version" : str(PyTango.ipython.get_pytango_version()),
+          "pyver" : str(PyTango.ipython.get_python_version()),
+          "ipyver" : str(PyTango.ipython.get_ipython_version()),
+          "pytangover" : str(PyTango.ipython.get_pytango_version()), }
     d.update(IPython.utils.coloransi.TermColors.__dict__)
 
     so = Struct(
@@ -1152,8 +1140,7 @@ def load_config(config):
 
     so = config.get("tango_options", so)
 
-    import PyTango.ipython
-    ipy_ver = PyTango.ipython.get_ipython_version_list()
+    ipy_ver = PyTango.ipython.get_ipython_version()
     
     # ------------------------------------
     # Application
@@ -1167,7 +1154,7 @@ def load_config(config):
     i_shell = config.InteractiveShell
     i_shell.colors = 'Linux'
 
-    if ipy_ver >= [0, 12]:
+    if ipy_ver >= "0.12":
         # ------------------------------------
         # PromptManager (ipython >= 0.12)
         # ------------------------------------
diff --git a/src/boost/python/ipython/ipython_10_00/__init__.py b/src/boost/python/ipython/ipython_10_00/__init__.py
new file mode 100644
index 0000000..587afd6
--- /dev/null
+++ b/src/boost/python/ipython/ipython_10_00/__init__.py
@@ -0,0 +1,18 @@
+# -----------------------------------------------------------------------------
+# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+#
+# Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+# Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+#
+# Distributed under the terms of the GNU Lesser General Public License,
+# either version 3 of the License, or (at your option) any later version.
+# See LICENSE.txt for more info.
+# -----------------------------------------------------------------------------
+
+__all__ = ['load_ipython_extension', 'unload_ipython_extension', 'load_config',
+           'run', 'install', 'is_installed']
+
+from .ipython_10_00 import load_ipython_extension, unload_ipython_extension, \
+    load_config, run
+from .ipy_install import install, is_installed
+
diff --git a/src/boost/python/ipython/ipython_00_11/ipy_install.py b/src/boost/python/ipython/ipython_10_00/ipy_install.py
similarity index 63%
copy from src/boost/python/ipython/ipython_00_11/ipy_install.py
copy to src/boost/python/ipython/ipython_10_00/ipy_install.py
index 81d916f..d246cb9 100644
--- a/src/boost/python/ipython/ipython_00_11/ipy_install.py
+++ b/src/boost/python/ipython/ipython_10_00/ipy_install.py
@@ -1,27 +1,15 @@
 #!/usr/bin/env python
 
-################################################################################
-##
-## This file is part of PyTango, a python binding for Tango
-## 
-## http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## PyTango is free software: you can redistribute it and/or modify
-## it under the terms of the GNU Lesser General Public License as published by
-## the Free Software Foundation, either version 3 of the License, or
-## (at your option) any later version.
-## 
-## PyTango 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 Lesser General Public License for more details.
-## 
-## You should have received a copy of the GNU Lesser General Public License
-## along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-##
-################################################################################
+# -----------------------------------------------------------------------------
+# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+#
+# Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+# Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+#
+# Distributed under the terms of the GNU Lesser General Public License,
+# either version 3 of the License, or (at your option) any later version.
+# See LICENSE.txt for more info.
+# -----------------------------------------------------------------------------
 
 from __future__ import with_statement
 
@@ -37,6 +25,7 @@ from IPython.utils.io import ask_yes_no
 
 import PyTango
 
+
 __PROFILE = """\
 #!/usr/bin/env ipython
 \"\"\"An automaticaly generated IPython profile designed to provide a user 
@@ -51,14 +40,15 @@ PyTango.ipython.load_config(config)
 # Put any additional environment here
 """
 
+_CONFIG_FILE_NAME = 'ipython_config.py'
+
 def is_installed(ipydir=None, profile='tango'):
     ipython_dir = ipydir or get_ipython_dir()
     try:
         p_dir = ProfileDir.find_profile_dir_by_name(ipython_dir, profile)
     except ProfileDirError:
         return False
-    config_file_name = BaseIPythonApplication.config_file_name.default_value
-    abs_config_file_name = os.path.join(p_dir.location, config_file_name)
+    abs_config_file_name = os.path.join(p_dir.location, _CONFIG_FILE_NAME)
     return os.path.isfile(abs_config_file_name)
 
 def install(ipydir=None, verbose=True, profile='tango'):
@@ -72,9 +62,7 @@ def install(ipydir=None, verbose=True, profile='tango'):
         p_dir = ProfileDir.find_profile_dir_by_name(ipython_dir, profile)
     except ProfileDirError:
         p_dir = ProfileDir.create_profile_dir_by_name(ipython_dir, profile)
-    
-    config_file_name = BaseIPythonApplication.config_file_name.default_value
-    abs_config_file_name = os.path.join(p_dir.location, config_file_name)
+    abs_config_file_name = os.path.join(p_dir.location, _CONFIG_FILE_NAME)
     create_config = True
     if os.path.isfile(abs_config_file_name):
         create_config = ask_yes_no("Tango configuration file already exists. "\
diff --git a/src/boost/python/ipython/ipython_00_11/ipython_00_11.py b/src/boost/python/ipython/ipython_10_00/ipython_10_00.py
similarity index 96%
copy from src/boost/python/ipython/ipython_00_11/ipython_00_11.py
copy to src/boost/python/ipython/ipython_10_00/ipython_10_00.py
index 38a951c..926f119 100644
--- a/src/boost/python/ipython/ipython_00_11/ipython_00_11.py
+++ b/src/boost/python/ipython/ipython_10_00/ipython_10_00.py
@@ -1,27 +1,13 @@
-#!/usr/bin/env python
-
-################################################################################
-##
-## This file is part of PyTango, a python binding for Tango
-## 
-## http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## PyTango is free software: you can redistribute it and/or modify
-## it under the terms of the GNU Lesser General Public License as published by
-## the Free Software Foundation, either version 3 of the License, or
-## (at your option) any later version.
-## 
-## PyTango 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 Lesser General Public License for more details.
-## 
-## You should have received a copy of the GNU Lesser General Public License
-## along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-##
-################################################################################
+# -----------------------------------------------------------------------------
+# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+#
+# Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+# Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+#
+# Distributed under the terms of the GNU Lesser General Public License,
+# either version 3 of the License, or (at your option) any later version.
+# See LICENSE.txt for more info.
+# -----------------------------------------------------------------------------
 
 """An IPython profile designed to provide a user friendly interface to Tango"""
 
@@ -41,11 +27,12 @@ from IPython.utils.ipstruct import Struct
 from IPython.core.page import page
 from IPython.core.interactiveshell import InteractiveShell
 from IPython.config.application import Application
-from IPython.frontend.terminal.ipapp import launch_new_instance
+from IPython.terminal.ipapp import launch_new_instance
 
 import PyTango
 import PyTango.utils
 
+
 _TG_EXCEPTIONS = PyTango.DevFailed, PyTango.ConnectionFailed, \
     PyTango.CommunicationFailed, \
     PyTango.NamedDevFailed, PyTango.NamedDevFailedList, \
@@ -1141,10 +1128,10 @@ def load_config(config):
     import PyTango.ipython
     import IPython.utils.coloransi
     
-    d = { "version" : PyTango.ipython.get_pytango_version(),
-          "pyver" : PyTango.ipython.get_python_version(),
-          "ipyver" : PyTango.ipython.get_ipython_version(),
-          "pytangover" : PyTango.ipython.get_pytango_version(), }
+    d = { "version" : str(PyTango.ipython.get_pytango_version()),
+          "pyver" : str(PyTango.ipython.get_python_version()),
+          "ipyver" : str(PyTango.ipython.get_ipython_version()),
+          "pytangover" : str(PyTango.ipython.get_pytango_version()), }
     d.update(IPython.utils.coloransi.TermColors.__dict__)
 
     so = Struct(
@@ -1152,8 +1139,7 @@ def load_config(config):
 
     so = config.get("tango_options", so)
 
-    import PyTango.ipython
-    ipy_ver = PyTango.ipython.get_ipython_version_list()
+    ipy_ver = PyTango.ipython.get_ipython_version()
     
     # ------------------------------------
     # Application
@@ -1167,7 +1153,7 @@ def load_config(config):
     i_shell = config.InteractiveShell
     i_shell.colors = 'Linux'
 
-    if ipy_ver >= [0, 12]:
+    if ipy_ver >= "0.12":
         # ------------------------------------
         # PromptManager (ipython >= 0.12)
         # ------------------------------------
@@ -1253,7 +1239,7 @@ def run():
     # protect this code against an import error
     try:
         from IPython.utils.traitlets import Unicode
-        from IPython.frontend.qt.console.rich_ipython_widget import RichIPythonWidget
+        from IPython.qt.console.rich_ipython_widget import RichIPythonWidget
 
         class ITangoConsole(RichIPythonWidget):
             
@@ -1263,8 +1249,8 @@ def run():
                 config = get_config()
                 return config.ITangoConsole.banner
 
-        import IPython.frontend.qt.console.qtconsoleapp
-        IPythonQtConsoleApp = IPython.frontend.qt.console.qtconsoleapp.IPythonQtConsoleApp
+        import IPython.qt.console.qtconsoleapp
+        IPythonQtConsoleApp = IPython.qt.console.qtconsoleapp.IPythonQtConsoleApp
         IPythonQtConsoleApp.widget_factory = ITangoConsole      
     except ImportError:
         pass
diff --git a/src/boost/python/log4tango.py b/src/boost/python/log4tango.py
index 3e5088a..050977c 100644
--- a/src/boost/python/log4tango.py
+++ b/src/boost/python/log4tango.py
@@ -1,25 +1,13 @@
-################################################################################
-##
-## This file is part of PyTango, a python binding for Tango
-## 
-## http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## PyTango is free software: you can redistribute it and/or modify
-## it under the terms of the GNU Lesser General Public License as published by
-## the Free Software Foundation, either version 3 of the License, or
-## (at your option) any later version.
-## 
-## PyTango 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 Lesser General Public License for more details.
-## 
-## You should have received a copy of the GNU Lesser General Public License
-## along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-##
-################################################################################
+# ------------------------------------------------------------------------------
+# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+#
+# Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+# Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+#
+# Distributed under the terms of the GNU Lesser General Public License,
+# either version 3 of the License, or (at your option) any later version.
+# See LICENSE.txt for more info.
+# ------------------------------------------------------------------------------
 
 """
 This is an internal PyTango module. It provides tango log classes that can
diff --git a/src/boost/python/pytango_init.py b/src/boost/python/pytango_init.py
index eaf6270..3dc2573 100644
--- a/src/boost/python/pytango_init.py
+++ b/src/boost/python/pytango_init.py
@@ -1,25 +1,13 @@
-################################################################################
-##
-## This file is part of PyTango, a python binding for Tango
-## 
-## http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## PyTango is free software: you can redistribute it and/or modify
-## it under the terms of the GNU Lesser General Public License as published by
-## the Free Software Foundation, either version 3 of the License, or
-## (at your option) any later version.
-## 
-## PyTango 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 Lesser General Public License for more details.
-## 
-## You should have received a copy of the GNU Lesser General Public License
-## along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-##
-################################################################################
+# ------------------------------------------------------------------------------
+# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+#
+# Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+# Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+#
+# Distributed under the terms of the GNU Lesser General Public License,
+# either version 3 of the License, or (at your option) any later version.
+# See LICENSE.txt for more info.
+# ------------------------------------------------------------------------------
 
 """
 This is an internal PyTango module.
@@ -49,22 +37,59 @@ from .pytango_pprint import pytango_pprint_init
 from .pyutil import pyutil_init
 from .time_val import time_val_init
 from ._PyTango import constants
+from ._PyTango import _get_tango_lib_release
 
 __INITIALIZED = False
 __DOC = True
 
+
 def init_constants():
+    import sys
+    import platform
     
-    tgver = tuple(map(int, constants.TgLibVers.split(".")))
-    tgver_str = "0x%02d%02d%02d00" % (tgver[0], tgver[1], tgver[2])
-    constants.TANGO_VERSION_HEX = int(tgver_str, 16)
-    
+    tg_ver = tuple(map(int, constants.TgLibVers.split(".")))
+    tg_ver_str = "0x%02d%02d%02d00" % (tg_ver[0], tg_ver[1], tg_ver[2])
+    constants.TANGO_VERSION_HEX = int(tg_ver_str, 16)
+
+    BOOST_VERSION = ".".join(map(str, (constants.BOOST_MAJOR_VERSION,
+                                       constants.BOOST_MINOR_VERSION,
+                                       constants.BOOST_PATCH_VERSION)))
+    constants.BOOST_VERSION = BOOST_VERSION
+
+    class Compile(object):
+        PY_VERSION = constants.PY_VERSION
+        TANGO_VERSION = constants.TANGO_VERSION
+        BOOST_VERSION = constants.BOOST_VERSION
+        NUMPY_VERSION = constants.NUMPY_VERSION
+        #UNAME = tuple(map(str, json.loads(constants.UNAME)))
+
+    tg_rt_ver_nb = _get_tango_lib_release()
+    tg_rt_major_ver = tg_rt_ver_nb / 100
+    tg_rt_minor_ver = tg_rt_ver_nb / 10 % 10
+    tg_rt_patch_ver = tg_rt_ver_nb % 10
+    tg_rt_ver = ".".join(map(str, (tg_rt_major_ver, tg_rt_minor_ver,
+                                   tg_rt_patch_ver)))
+
+    class Runtime(object):
+        PY_VERSION = ".".join(map(str, sys.version_info[:3]))
+        TANGO_VERSION = tg_rt_ver
+        BOOST_VERSION = '0.0.0'
+        if constants.NUMPY_SUPPORT:
+            import numpy
+            NUMPY_VERSION = numpy.__version__
+        else:
+            NUMPY_VERSION = None
+        UNAME = platform.uname()
+
+    constants.Compile = Compile
+    constants.Runtime = Runtime
+
 
 def init():
     global __INITIALIZED
     if __INITIALIZED:
         return
-    
+
     global __DOC
     doc = __DOC
     init_constants()
@@ -86,7 +111,7 @@ def init():
     pytango_pprint_init(doc=doc)
     pyutil_init(doc=doc)
     time_val_init(doc=doc)
-    
+
     # must come last: depends on device_proxy.init()
     attribute_proxy_init(doc=doc)
 
diff --git a/src/boost/python/pytango_pprint.py b/src/boost/python/pytango_pprint.py
index 16b3f81..952d786 100644
--- a/src/boost/python/pytango_pprint.py
+++ b/src/boost/python/pytango_pprint.py
@@ -1,25 +1,13 @@
-################################################################################
-##
-## This file is part of PyTango, a python binding for Tango
-## 
-## http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## PyTango is free software: you can redistribute it and/or modify
-## it under the terms of the GNU Lesser General Public License as published by
-## the Free Software Foundation, either version 3 of the License, or
-## (at your option) any later version.
-## 
-## PyTango 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 Lesser General Public License for more details.
-## 
-## You should have received a copy of the GNU Lesser General Public License
-## along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-##
-################################################################################
+# ------------------------------------------------------------------------------
+# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+#
+# Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+# Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+#
+# Distributed under the terms of the GNU Lesser General Public License,
+# either version 3 of the License, or (at your option) any later version.
+# See LICENSE.txt for more info.
+# ------------------------------------------------------------------------------
 
 """
 This is an internal PyTango module.
diff --git a/src/boost/python/pyutil.py b/src/boost/python/pyutil.py
index 862d4ed..23ac8a8 100644
--- a/src/boost/python/pyutil.py
+++ b/src/boost/python/pyutil.py
@@ -1,25 +1,13 @@
-################################################################################
-##
-## This file is part of PyTango, a python binding for Tango
-## 
-## http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## PyTango is free software: you can redistribute it and/or modify
-## it under the terms of the GNU Lesser General Public License as published by
-## the Free Software Foundation, either version 3 of the License, or
-## (at your option) any later version.
-## 
-## PyTango 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 Lesser General Public License for more details.
-## 
-## You should have received a copy of the GNU Lesser General Public License
-## along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-##
-################################################################################
+# ------------------------------------------------------------------------------
+# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+#
+# Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+# Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+#
+# Distributed under the terms of the GNU Lesser General Public License,
+# either version 3 of the License, or (at your option) any later version.
+# See LICENSE.txt for more info.
+# ------------------------------------------------------------------------------
 
 """
 This is an internal PyTango module.
diff --git a/src/boost/python/release.py b/src/boost/python/release.py
index 40e8af4..dd3145b 100644
--- a/src/boost/python/release.py
+++ b/src/boost/python/release.py
@@ -1,25 +1,13 @@
-################################################################################
-##
-## This file is part of PyTango, a python binding for Tango
-## 
-## http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## PyTango is free software: you can redistribute it and/or modify
-## it under the terms of the GNU Lesser General Public License as published by
-## the Free Software Foundation, either version 3 of the License, or
-## (at your option) any later version.
-## 
-## PyTango 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 Lesser General Public License for more details.
-## 
-## You should have received a copy of the GNU Lesser General Public License
-## along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-##
-################################################################################
+# ------------------------------------------------------------------------------
+# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+#
+# Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+# Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+#
+# Distributed under the terms of the GNU Lesser General Public License,
+# either version 3 of the License, or (at your option) any later version.
+# See LICENSE.txt for more info.
+# ------------------------------------------------------------------------------
 
 """
 This is an internal PyTango module.
@@ -52,10 +40,10 @@ class Release:
             - keywords : (seq<str>) list of keywords
             - license : (str) the license"""
     name = 'PyTango'
-    version_info = (8, 0, 3, 'final', 0)
+    version_info = (8, 1, 1, 'dev', 0)
     version = '.'.join(map(str, version_info[:3]))
     version_long = version + ''.join(map(str, version_info[3:]))
-    version_description = 'This version implements the C++ Tango 8.0 API.'
+    version_description = 'This version implements the C++ Tango 8.1 API.'
     version_number = int(version.replace('.',''))
     description = 'A python binding for the Tango control system'
     long_description = 'This module implements the Python Tango Device API ' \
@@ -65,6 +53,6 @@ class Release:
     author_lines = "\n".join([ "%s <%s>" % x for x in authors.values()])
     url = 'http://www.tango-controls.org/static/PyTango/'
     download_url = 'http://pypi.python.org/packages/source/P/PyTango'
-    platform = ['Linux', 'Windows XP/Vista/7']
+    platform = ['Linux', 'Windows XP/Vista/7/8']
     keywords = ['Tango', 'CORBA', 'binding']
     
diff --git a/src/boost/python/server.py b/src/boost/python/server.py
new file mode 100644
index 0000000..ca7130a
--- /dev/null
+++ b/src/boost/python/server.py
@@ -0,0 +1,817 @@
+# ------------------------------------------------------------------------------
+# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+#
+# Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+# Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+#
+# Distributed under the terms of the GNU Lesser General Public License,
+# either version 3 of the License, or (at your option) any later version.
+# See LICENSE.txt for more info.
+# ------------------------------------------------------------------------------
+
+"""High Level API for writting Tango device servers.
+
+.. _pytango-hlapi-datatypes:
+
+.. rubric:: Data types
+
+When declaring attributes, properties or commands, one of the most important
+information is the data type. It is given by the keyword argument *dtype*.
+In order to provide a more *pythonic* interface, this argument is not retricted
+to the :obj:`~PyTango.CmdArgType` options.
+
+For example, to define a *SCALAR* :obj:`~PyTango.CmdArgType.DevLong`
+attribute you have several possibilities:
+
+#. :obj:`int`
+#. 'int'
+#. 'int32'
+#. 'integer' 
+#. :obj:`PyTango.CmdArgType.DevLong`
+#. 'DevLong' 
+#. :obj:`numpy.int32`
+
+To define a *SPECTRUM* attribute simply wrap the scalar data type in any
+python sequence:
+
+* using a *tuple*: ``(:obj:`int`,)`` or
+* using a *list*: ``[:obj:`int`]`` or
+* any other sequence type
+
+To define an *IMAGE* attribute simply wrap the scalar data type in any
+python sequence of sequences:
+
+* using a *tuple*: ``((:obj:`int`,),)`` or
+* using a *list*: ``[[:obj:`int`]]`` or
+* any other sequence type
+
+Below is the complete table of equivalences.
+
+========================================  ========================================
+ type                                      tango type                             
+========================================  ========================================
+ ``None``                                  ``DevVoid``                            
+ ``DevVoid``                               ``DevVoid``                            
+ ``DevBoolean``                            ``DevBoolean``                         
+ ``DevShort``                              ``DevShort``                           
+ ``DevLong``                               ``DevLong``                            
+ ``DevFloat``                              ``DevFloat``                           
+ ``DevDouble``                             ``DevDouble``                          
+ ``DevUShort``                             ``DevUShort``                          
+ ``DevULong``                              ``DevULong``                           
+ ``DevString``                             ``DevString``                          
+ ``DevVarCharArray``                       ``DevVarCharArray``                    
+ ``DevVarShortArray``                      ``DevVarShortArray``                   
+ ``DevVarLongArray``                       ``DevVarLongArray``                    
+ ``DevVarFloatArray``                      ``DevVarFloatArray``                   
+ ``DevVarDoubleArray``                     ``DevVarDoubleArray``                  
+ ``DevVarUShortArray``                     ``DevVarUShortArray``                  
+ ``DevVarULongArray``                      ``DevVarULongArray``                   
+ ``DevVarStringArray``                     ``DevVarStringArray``                  
+ ``DevVarLongStringArray``                 ``DevVarLongStringArray``              
+ ``DevVarDoubleStringArray``               ``DevVarDoubleStringArray``            
+ ``DevState``                              ``DevState``                           
+ ``DevVarBooleanArray``                    ``DevVarBooleanArray``                 
+ ``DevUChar``                              ``DevUChar``                           
+ ``DevLong64``                             ``DevLong64``                          
+ ``DevULong64``                            ``DevULong64``                         
+ ``DevVarLong64Array``                     ``DevVarLong64Array``                  
+ ``DevVarULong64Array``                    ``DevVarULong64Array``                 
+ ``DevInt``                                ``DevInt``                             
+ ``DevEncoded``                            ``DevEncoded``                         
+ ``chr``                                   ``DevUChar``                           
+ ``'DevBoolean'``                          ``DevBoolean``                         
+ ``'DevDouble'``                           ``DevDouble``                          
+ ``'DevEncoded'``                          ``DevEncoded``                         
+ ``'DevFloat'``                            ``DevFloat``                           
+ ``'DevInt'``                              ``DevInt``                             
+ ``'DevLong'``                             ``DevLong``                            
+ ``'DevLong64'``                           ``DevLong64``                          
+ ``'DevShort'``                            ``DevShort``                           
+ ``'DevState'``                            ``DevState``                           
+ ``'DevString'``                           ``DevString``                          
+ ``'DevUChar'``                            ``DevUChar``                           
+ ``'DevULong'``                            ``DevULong``                           
+ ``'DevULong64'``                          ``DevULong64``                         
+ ``'DevUShort'``                           ``DevUShort``                          
+ ``'DevVarBooleanArray'``                  ``DevVarBooleanArray``                 
+ ``'DevVarCharArray'``                     ``DevVarCharArray``                    
+ ``'DevVarDoubleArray'``                   ``DevVarDoubleArray``                  
+ ``'DevVarDoubleStringArray'``             ``DevVarDoubleStringArray``            
+ ``'DevVarFloatArray'``                    ``DevVarFloatArray``                   
+ ``'DevVarLong64Array'``                   ``DevVarLong64Array``                  
+ ``'DevVarLongArray'``                     ``DevVarLongArray``                    
+ ``'DevVarLongStringArray'``               ``DevVarLongStringArray``              
+ ``'DevVarShortArray'``                    ``DevVarShortArray``
+ ``'DevVarStringArray'``                   ``DevVarStringArray``                  
+ ``'DevVarULong64Array'``                  ``DevVarULong64Array``                 
+ ``'DevVarULongArray'``                    ``DevVarULongArray``                   
+ ``'DevVarUShortArray'``                   ``DevVarUShortArray``                  
+ ``'DevVoid'``                             ``DevVoid``                            
+ ``'None'``                                ``DevVoid``                            
+ ``'bool'``                                ``DevBoolean``                         
+ ``'boolean'``                             ``DevBoolean``                         
+ ``'byte'``                                ``DevUChar``                           
+ ``'bytearray'``                           ``DevEncoded``                         
+ ``'bytes'``                               ``DevEncoded``                         
+ ``'char'``                                ``DevUChar``                           
+ ``'chr'``                                 ``DevUChar``                           
+ ``'double'``                              ``DevDouble``                          
+ ``'float'``                               ``DevDouble``                          
+ ``'float32'``                             ``DevFloat``                           
+ ``'float64'``                             ``DevDouble``                          
+ ``'int'``                                 ``DevLong``                            
+ ``'int16'``                               ``DevShort``                           
+ ``'int32'``                               ``DevLong``                            
+ ``'int64'``                               ``DevLong64``                          
+ ``'str'``                                 ``DevString``                          
+ ``'string'``                              ``DevString``                          
+ ``'text'``                                ``DevString``                          
+ ``'uint'``                                ``DevULong``                           
+ ``'uint16'``                              ``DevUShort``                          
+ ``'uint32'``                              ``DevULong``                           
+ ``'uint64'``                              ``DevULong64``                         
+ :py:obj:`float`                           ``DevDouble``                          
+ :py:obj:`int`                             ``DevLong``                            
+ :py:obj:`str`                             ``DevString``                          
+ :py:obj:`bool`                            ``DevBoolean``                         
+ :py:obj:`bytearray`                       ``DevEncoded``                         
+ :py:obj:`numpy.bool_`                     ``DevBoolean``                         
+ :py:obj:`numpy.int16`                     ``DevShort``                           
+ :py:obj:`numpy.int32`                     ``DevLong``                            
+ :py:obj:`numpy.int64`                     ``DevLong64``                          
+ :py:obj:`numpy.uint8`                     ``DevUChar``                           
+ :py:obj:`numpy.uint16`                    ``DevUShort``                          
+ :py:obj:`numpy.uint32`                    ``DevULong``                           
+ :py:obj:`numpy.uint64`                    ``DevULong64``                         
+ :py:obj:`numpy.float32`                   ``DevFloat``                           
+ :py:obj:`numpy.float64`                   ``DevDouble``                          
+========================================  ========================================
+"""
+
+from __future__ import with_statement
+from __future__ import print_function
+
+__all__ = ["DeviceMeta", "Device", "LatestDeviceImpl", "attribute", "command",
+           "device_property", "class_property", "server_run"]
+
+import __builtin__
+import sys
+import inspect
+import functools
+import traceback
+
+from ._PyTango import DeviceImpl, Attribute, WAttribute, CmdArgType
+from ._PyTango import AttrDataFormat, AttrWriteType, DispLevel, constants
+from ._PyTango import DevFailed
+from .attr_data import AttrData
+from .device_class import DeviceClass
+from .utils import get_tango_device_classes, is_seq, is_non_str_seq
+from .utils import scalar_to_array_type
+
+API_VERSION = 2
+
+LatestDeviceImpl = get_tango_device_classes()[-1]
+
+def __build_to_tango_type():
+    ret = \
+    {
+        int         : CmdArgType.DevLong,
+        str         : CmdArgType.DevString,
+        bool        : CmdArgType.DevBoolean,
+        bytearray   : CmdArgType.DevEncoded,
+        float       : CmdArgType.DevDouble,
+        chr         : CmdArgType.DevUChar,
+        None        : CmdArgType.DevVoid,
+
+        'int'       : CmdArgType.DevLong,
+        'int16'     : CmdArgType.DevShort,
+        'int32'     : CmdArgType.DevLong,
+        'int64'     : CmdArgType.DevLong64,
+        'uint'      : CmdArgType.DevULong,
+        'uint16'    : CmdArgType.DevUShort,
+        'uint32'    : CmdArgType.DevULong,
+        'uint64'    : CmdArgType.DevULong64,
+        'str'       : CmdArgType.DevString,
+        'string'    : CmdArgType.DevString,
+        'text'      : CmdArgType.DevString,
+        'bool'      : CmdArgType.DevBoolean,
+        'boolean'   : CmdArgType.DevBoolean,
+        'bytes'     : CmdArgType.DevEncoded,
+        'bytearray' : CmdArgType.DevEncoded,
+        'float'     : CmdArgType.DevDouble,
+        'float32'   : CmdArgType.DevFloat,
+        'float64'   : CmdArgType.DevDouble,
+        'double'    : CmdArgType.DevDouble,
+        'byte'      : CmdArgType.DevUChar,
+        'chr'       : CmdArgType.DevUChar,
+        'char'      : CmdArgType.DevUChar,
+        'None'      : CmdArgType.DevVoid,
+    }
+
+    for key in dir(CmdArgType):
+        if key.startswith("Dev"):
+            value = getattr(CmdArgType, key)
+            ret[key] = ret[value] = value
+            
+    if constants.NUMPY_SUPPORT:
+        import numpy
+        FROM_TANGO_TO_NUMPY_TYPE = { \
+                   CmdArgType.DevBoolean : numpy.bool8,
+                     CmdArgType.DevUChar : numpy.ubyte,
+                     CmdArgType.DevShort : numpy.short,
+                    CmdArgType.DevUShort : numpy.ushort,
+                      CmdArgType.DevLong : numpy.int32,
+                     CmdArgType.DevULong : numpy.uint32,
+                    CmdArgType.DevLong64 : numpy.int64,
+                   CmdArgType.DevULong64 : numpy.uint64,
+                    CmdArgType.DevString : numpy.str,
+                    CmdArgType.DevDouble : numpy.float64,
+                     CmdArgType.DevFloat : numpy.float32,
+        }
+
+        for key,value in FROM_TANGO_TO_NUMPY_TYPE.items():
+            ret[value] = key
+    return ret
+    
+TO_TANGO_TYPE = __build_to_tango_type()
+
+
+def get_tango_type_format(dtype=None, dformat=None):
+    if dformat is None:
+        dformat = AttrDataFormat.SCALAR
+        if is_non_str_seq(dtype):
+            dtype = dtype[0]
+            dformat = AttrDataFormat.SPECTRUM
+            if is_non_str_seq(dtype):
+                dtype = dtype[0]
+                dformat = AttrDataFormat.IMAGE
+    return TO_TANGO_TYPE[dtype], dformat
+
+
+def from_typeformat_to_type(dtype, dformat):
+    if dformat == AttrDataFormat.SCALAR:
+        return dtype
+    elif dformat == AttrDataFormat.IMAGE:
+        raise TypeError("Cannot translate IMAGE to tango type")
+    return scalar_to_array_type(dtype)
+
+    
+def set_complex_value(attr, value):
+    is_tuple = isinstance(value, tuple)
+    dtype, fmt = attr.get_data_type(), attr.get_data_format()
+    if dtype == CmdArgType.DevEncoded:
+        if is_tuple and len(value) == 4:
+            attr.set_value_date_quality(*value)
+        elif is_tuple and len(value) == 3 and is_non_str_seq(value[0]):
+            attr.set_value_date_quality(value[0][0], value[0][1], *value[1:])
+        else:
+            attr.set_value(*value)
+    else:
+        if is_tuple:
+            if len(value) == 3:
+                if fmt == AttrDataFormat.SCALAR:
+                    attr.set_value_date_quality(*value)
+                elif fmt == AttrDataFormat.SPECTRUM:
+                    if is_seq(value[0]):
+                        attr.set_value_date_quality(*value)
+                    else:
+                        attr.set_value(value)
+                else:
+                    if is_seq(value[0]) and is_seq(value[0][0]):
+                        attr.set_value_date_quality(*value)
+                    else:
+                        attr.set_value(value)
+            else:
+                attr.set_value(value)
+        else:
+            attr.set_value(value)
+
+            
+def check_tango_device_klass_attribute_read_method(tango_device_klass, method_name):
+    """Checks if method given by it's name for the given DeviceImpl class has
+    the correct signature. If a read/write method doesn't have a parameter
+    (the traditional Attribute), then the method is wrapped into another method
+    which has correct parameter definition to make it work.
+    
+    :param tango_device_klass: a DeviceImpl class
+    :type tango_device_klass: class
+    :param method_name: method to be cheched
+    :type attr_data: str"""
+    read_method = getattr(tango_device_klass, method_name)
+
+    @functools.wraps(read_method)
+    def read_attr(self, attr):
+        ret = read_method(self)
+        if not attr.get_value_flag() and ret is not None:
+            set_complex_value(attr, ret)
+        return ret
+    setattr(tango_device_klass, method_name, read_attr)
+
+    
+def check_tango_device_klass_attribute_write_method(tango_device_klass, method_name):
+    """Checks if method given by it's name for the given DeviceImpl class has
+    the correct signature. If a read/write method doesn't have a parameter
+    (the traditional Attribute), then the method is wrapped into another method
+    which has correct parameter definition to make it work.
+    
+    :param tango_device_klass: a DeviceImpl class
+    :type tango_device_klass: class
+    :param method_name: method to be cheched
+    :type attr_data: str"""
+    write_method = getattr(tango_device_klass, method_name)
+
+    @functools.wraps(write_method)
+    def write_attr(self, attr):
+        value = attr.get_write_value()
+        return write_method(self, value)
+    setattr(tango_device_klass, method_name, write_attr)
+
+    
+def check_tango_device_klass_attribute_methods(tango_device_klass, attr_data):
+    """Checks if the read and write methods have the correct signature. If a 
+    read/write method doesn't have a parameter (the traditional Attribute),
+    then the method is wrapped into another method to make this work
+    
+    :param tango_device_klass: a DeviceImpl class
+    :type tango_device_klass: class
+    :param attr_data: the attribute data information
+    :type attr_data: AttrData"""
+    if attr_data.attr_write in (AttrWriteType.READ, AttrWriteType.READ_WRITE):
+        check_tango_device_klass_attribute_read_method(tango_device_klass, attr_data.read_method_name)
+    if attr_data.attr_write in (AttrWriteType.WRITE, AttrWriteType.READ_WRITE):
+        check_tango_device_klass_attribute_write_method(tango_device_klass, attr_data.write_method_name)
+
+
+class _DeviceClass(DeviceClass):
+
+    def __init__(self, name):
+        DeviceClass.__init__(self, name)
+        self.set_type(name)
+
+    def dyn_attr(self, dev_list):
+        """Invoked to create dynamic attributes for the given devices.
+        Default implementation calls
+        :meth:`TT.initialize_dynamic_attributes` for each device
+    
+        :param dev_list: list of devices
+        :type dev_list: :class:`PyTango.DeviceImpl`"""
+
+        for dev in dev_list:
+            init_dyn_attrs = getattr(dev, "initialize_dynamic_attributes", None)
+            if init_dyn_attrs and callable(init_dyn_attrs):
+                try:
+                    init_dyn_attrs()
+                except Exception:
+                    import traceback
+                    dev.warn_stream("Failed to initialize dynamic attributes")
+                    dev.debug_stream("Details: " + traceback.format_exc())
+    
+        
+def create_tango_deviceclass_klass(tango_device_klass, attrs=None):
+    klass_name = tango_device_klass.__name__
+    if not issubclass(tango_device_klass, (Device)):
+        msg = "{0} device must inherit from PyTango.server.Device".format(klass_name)
+        raise Exception(msg)
+    
+    if attrs is None:
+        attrs = tango_device_klass.__dict__
+        
+    attr_list = {}
+    class_property_list = {}
+    device_property_list = {}
+    cmd_list = {}
+
+    for attr_name, attr_obj in attrs.items():
+        if isinstance(attr_obj, attribute):
+            attr_obj._set_name(attr_name)
+            attr_list[attr_name] = attr_obj
+            check_tango_device_klass_attribute_methods(tango_device_klass, attr_obj)
+        elif isinstance(attr_obj, device_property):
+            device_property_list[attr_name] = [attr_obj.dtype, attr_obj.doc, attr_obj.default_value]
+        elif isinstance(attr_obj, class_property):
+            class_property_list[attr_name] = [attr_obj.dtype, attr_obj.doc, attr_obj.default_value]
+        elif inspect.isroutine(attr_obj):
+            if hasattr(attr_obj, "__tango_command__"):
+                cmd_name, cmd_info = attr_obj.__tango_command__
+                cmd_list[cmd_name] = cmd_info
+    
+    devclass_name = klass_name + "Class"
+    
+    devclass_attrs = dict(class_property_list=class_property_list,
+                          device_property_list=device_property_list,
+                          cmd_list=cmd_list, attr_list=attr_list)
+    return type(devclass_name, (_DeviceClass,), devclass_attrs)
+
+
+def init_tango_device_klass(tango_device_klass, attrs=None, tango_class_name=None):
+    klass_name = tango_device_klass.__name__
+    tango_deviceclass_klass = create_tango_deviceclass_klass(tango_device_klass,
+                                                             attrs=attrs)
+    if tango_class_name is None:
+        tango_klass_name = klass_name
+    tango_device_klass._DeviceClass = tango_deviceclass_klass
+    tango_device_klass._DeviceClassName = tango_klass_name
+    tango_device_klass._api = API_VERSION
+    return tango_device_klass
+
+
+def create_tango_device_klass(name, bases, attrs):
+    klass_name = name
+
+    LatestDeviceImplMeta = type(LatestDeviceImpl)
+    klass = LatestDeviceImplMeta(klass_name, bases, attrs)
+    init_tango_device_klass(klass, attrs)
+    return klass
+
+
+def DeviceMeta(name, bases, attrs):
+    """The :py:data:`metaclass` callable for :class:`Device`. Every subclass of
+    :class:`Device` must have associated this metaclass to itself in order to
+    work properly (boost-python internal limitation).
+    
+    Example (python 2.x)::
+    
+        from PyTango.server import Device, DeviceMeta
+
+        class PowerSupply(Device):
+            __metaclass__ = DeviceMeta
+
+    Example (python 3.x)::
+    
+        from PyTango.server import Device, DeviceMeta
+
+        class PowerSupply(Device, metaclass=DeviceMeta):
+            pass
+    """
+    return create_tango_device_klass(name, bases, attrs)
+
+
+class Device(LatestDeviceImpl):
+    """High level DeviceImpl API. All Device specific classes should inherit
+    from this class."""
+    
+    def __init__(self, cl, name):
+        LatestDeviceImpl.__init__(self, cl, name)
+        self.init_device()
+
+    def init_device(self):
+        """Tango init_device method. Default implementation calls
+        :meth:`get_device_properties`"""
+        self.get_device_properties()
+    
+    def always_executed_hook(self):
+        """Tango always_executed_hook. Default implementation does nothing"""
+        pass
+
+    def initialize_dynamic_attributes(self):
+        """Method executed at initializion phase to create dynamic attributes.
+        Default implementation does nothing. Overwrite when necessary."""
+        pass
+
+
+class attribute(AttrData):
+    """declares a new tango attribute in a :class:`Device`. To be used like
+the python native :obj:`property` function. For example, to declare a
+scalar, `PyTango.DevDouble`, read-only attribute called *voltage* in a
+*PowerSupply* :class:`Device` do::
+
+    class PowerSupply(Device):
+        
+        voltage = attribute()
+        
+        def read_voltage(self):
+            self.voltage = 1.0
+
+It receives multiple keyword arguments.
+
+===================== ================================ ======================================= =======================================================================================
+parameter              type                                       default value                                 description
+===================== ================================ ======================================= =======================================================================================
+name                   :obj:`str`                       class member name                       alternative attribute name
+dtype                  :obj:`object`                    :obj:`~PyTango.CmdArgType.DevDouble`    data type (see :ref:`Data type equivalence <pytango-hlapi-datatypes>`)
+dformat                :obj:`~PyTango.AttrDataFormat`   :obj:`~PyTango.AttrDataFormat.SCALAR`   data format
+max_dim_x              :obj:`int`                       1                                       maximum size for x dimension (ignored for SCALAR format) 
+max_dim_y              :obj:`int`                       0                                       maximum size for y dimension (ignored for SCALAR and SPECTRUM formats) 
+display_level          :obj:`~PyTango.DispLevel`        :obj:`~PyTango.DisLevel.OPERATOR`       display level
+polling_period         :obj:`int`                       -1                                      polling period
+memorized              :obj:`bool`                      False                                   attribute should or not be memorized
+hw_memorized           :obj:`bool`                      False                                   write method should be called at startup when restoring memorize value (dangerous!)
+access                 :obj:`~PyTango.AttrWriteType`    :obj:`~PyTango.AttrWriteType.READ`      read only/ read write / write only access
+fget (or fread)        :obj:`str` or :obj:`callable`    'read_<attr_name>'                      read method name or method object
+fset (or fwrite)       :obj:`str` or :obj:`callable`    'write_<attr_name>'                     write method name or method object
+is_allowed             :obj:`str` or :obj:`callable`    'is_<attr_name>_allowed'                is allowed method name or method object
+label                  :obj:`str`                       '<attr_name>'                           attribute label
+doc (or description)   :obj:`str`                       ''                                      attribute description
+unit                   :obj:`str`                       ''                                      physical units the attribute value is in
+standard_unit          :obj:`str`                       ''                                      physical standard unit
+display_unit           :obj:`str`                       ''                                      physical display unit (hint for clients)
+format                 :obj:`str`                       '6.2f'                                  attribute representation format
+min_value              :obj:`str`                       None                                    minimum allowed value
+max_value              :obj:`str`                       None                                    maximum allowed value
+min_alarm              :obj:`str`                       None                                    minimum value to trigger attribute alarm
+max_alarm              :obj:`str`                       None                                    maximum value to trigger attribute alarm
+min_warning            :obj:`str`                       None                                    minimum value to trigger attribute warning
+max_warning            :obj:`str`                       None                                    maximum value to trigger attribute warning
+delta_val              :obj:`str`                       None
+delta_t                :obj:`str`                       None
+abs_change             :obj:`str`                       None                                    minimum value change between events that causes event filter to send the event
+rel_change             :obj:`str`                       None                                    minimum relative change between events that causes event filter to send the event (%)
+period                 :obj:`str`                       None
+archive_abs_change     :obj:`str`                       None
+archive_rel_change     :obj:`str`                       None
+archive_period         :obj:`str`                       None
+===================== ================================ ======================================= ======================================================================================="""
+
+    def __init__(self, **kwargs):
+        name = kwargs.pop("name", None)
+        class_name = kwargs.pop("class_name", None)
+        super(attribute, self).__init__(name, class_name)
+        if 'dtype' in kwargs:
+            kwargs['dtype'], kwargs['dformat'] = \
+                get_tango_type_format(kwargs['dtype'], kwargs.get('dformat'))
+        self.build_from_dict(kwargs)
+   
+    def get_attribute(self, obj):
+        return obj.get_device_attr().get_attr_by_name(self.attr_name)
+
+    # --------------------
+    # descriptor interface
+    # --------------------
+    
+    def __get__(self, obj, objtype):
+        return self.get_attribute(obj)
+
+    def __set__(self, obj, value):
+        attr = self.get_attribute(obj)
+        set_complex_value(attr, value)
+    
+    def __delete__(self, obj):
+        obj.remove_attribute(self.attr_name)
+
+        
+def _attribute(**kwargs):
+    """declares a new tango attribute in a :class:`Device`. To be used like
+the python native :obj:`property` function. For example, to declare a
+scalar, `PyTango.DevDouble`, read-only attribute called *voltage* in a
+*PowerSupply* :class:`Device` do::
+
+    class PowerSupply(Device):
+        
+        voltage = attribute()
+        
+        def read_voltage(self):
+            self.voltage = 1.0
+
+It receives multiple keyword arguments.
+
+===================== ================================ ======================================= =======================================================================================
+parameter              type                                       default value                                 description
+===================== ================================ ======================================= =======================================================================================
+name                   :obj:`str`                       class member name                       alternative attribute name
+dtype                  :obj:`object`                    :obj:`~PyTango.CmdArgType.DevDouble`    data type (see :ref:`Data type equivalence <pytango-hlapi-datatypes>`)
+dformat                :obj:`~PyTango.AttrDataFormat`   :obj:`~PyTango.AttrDataFormat.SCALAR`   data format
+max_dim_x              :obj:`int`                       1                                       maximum size for x dimension (ignored for SCALAR format) 
+max_dim_y              :obj:`int`                       0                                       maximum size for y dimension (ignored for SCALAR and SPECTRUM formats) 
+display_level          :obj:`~PyTango.DispLevel`        :obj:`~PyTango.DisLevel.OPERATOR`       display level
+polling_period         :obj:`int`                       -1                                      polling period
+memorized              :obj:`bool`                      False                                   attribute should or not be memorized
+hw_memorized           :obj:`bool`                      False                                   write method should be called at startup when restoring memorize value (dangerous!)
+access                 :obj:`~PyTango.AttrWriteType`    :obj:`~PyTango.AttrWriteType.READ`      read only/ read write / write only access
+fget (or fread)        :obj:`str` or :obj:`callable`    'read_<attr_name>'                      read method name or method object
+fset (or fwrite)       :obj:`str` or :obj:`callable`    'write_<attr_name>'                     write method name or method object
+is_allowed             :obj:`str` or :obj:`callable`    'is_<attr_name>_allowed'                is allowed method name or method object
+label                  :obj:`str`                       '<attr_name>'                           attribute label
+doc (or description)   :obj:`str`                       ''                                      attribute description
+unit                   :obj:`str`                       ''                                      physical units the attribute value is in
+standard_unit          :obj:`str`                       ''                                      physical standard unit
+display_unit           :obj:`str`                       ''                                      physical display unit (hint for clients)
+format                 :obj:`str`                       '6.2f'                                  attribute representation format
+min_value              :obj:`str`                       None                                    minimum allowed value
+max_value              :obj:`str`                       None                                    maximum allowed value
+min_alarm              :obj:`str`                       None                                    minimum value to trigger attribute alarm
+max_alarm              :obj:`str`                       None                                    maximum value to trigger attribute alarm
+min_warning            :obj:`str`                       None                                    minimum value to trigger attribute warning
+max_warning            :obj:`str`                       None                                    maximum value to trigger attribute warning
+delta_val              :obj:`str`                       None
+delta_t                :obj:`str`                       None
+abs_change             :obj:`str`                       None                                    minimum value change between events that causes event filter to send the event
+rel_change             :obj:`str`                       None                                    minimum relative change between events that causes event filter to send the event (%)
+period                 :obj:`str`                       None
+archive_abs_change     :obj:`str`                       None
+archive_rel_change     :obj:`str`                       None
+archive_period         :obj:`str`                       None
+===================== ================================ ======================================= ======================================================================================="""
+    if 'dtype' in kwargs:
+        kwargs['dtype'], kwargs['dformat'] = \
+          get_tango_type_format(kwargs['dtype'], kwargs.get('dformat'))
+    return attribute.from_dict(kwargs)
+
+
+def command(f=None, dtype_in=None, dformat_in=None, doc_in="",
+            dtype_out=None, dformat_out=None, doc_out="",):
+    """declares a new tango command in a :class:`Device`.
+    To be used like a decorator in the methods you want to declare as tango
+    commands. For example, to declare a *ramp* command that receives a
+    `PyTango.DevDouble` parameter called *current*, do::
+
+        class PowerSupply(Device):
+
+            @command(dtype_in=float)
+            def ramp(self, current):
+                self.info_stream("Ramping on %f..." % current)
+
+            # Another more elaborate command
+            
+            @command(dtype_in=float, doc_in="the pressure to be set",
+                     dtype_out=(bool, doc_out="True if it worked, False otherwise")
+            def setPressure(self, pressure):
+                self.info_stream("Setting pressure on %f..." % pressure)
+                
+    :param dtype_in: a :ref:`data type <pytango-hlapi-datatypes>`
+                     describing the type of parameter. Default is None meaning
+                     no parameter.
+    :param dformat_in: parameter data format. Default is None.
+    :type dformat_in: AttrDataFormat
+    :param doc_in: parameter documentation
+    :type doc_in: str
+
+    :param dtype_out: a :ref:`data type <pytango-hlapi-datatypes>`
+                      describing the type of return value. Default is None
+                      meaning no return value.
+    :param dformat_out: return value data format. Default is None.
+    :type dformat_out: AttrDataFormat
+    :param doc_out: return value documentation
+    :type doc_out: str
+
+    """
+    if f is None:
+        return functools.partial(command,
+            dtype_in=dtype_in, dformat_in=dformat_in, doc_in=doc_in,
+            dtype_out=dtype_out, dformat_out=dformat_out, doc_out=doc_out)
+    name = f.__name__
+    
+    dtype_in, dformat_in = get_tango_type_format(dtype_in, dformat_in)
+    dtype_out, dformat_out = get_tango_type_format(dtype_out, dformat_out)
+
+    din = [from_typeformat_to_type(dtype_in, dformat_in), doc_in]
+    dout = [from_typeformat_to_type(dtype_out, dformat_out), doc_out]
+    f.__tango_command__ = name, [din, dout]
+    return f
+
+
+class _property(object):
+
+    def __init__(self, dtype, doc='', default_value=None):
+        self.__value = None
+        dtype = from_typeformat_to_type(*get_tango_type_format(dtype))
+        self.dtype = dtype
+        self.doc = doc
+        self.default_value = default_value
+    
+    def __get__(self, obj, objtype):
+        return self.__value
+
+    def __set__(self, obj, value):
+        self.__value = value
+    
+    def __delete__(self, obj):
+        del self.__value
+
+
+class device_property(_property):
+    pass
+
+
+class class_property(_property):
+    pass
+
+
+def __server_run(classes, args=None, msg_stream=sys.stdout, util=None,
+                 event_loop=None):
+    import PyTango
+    if msg_stream is None:
+        import io
+        msg_stream = io.BytesIO()
+
+    if args is None:
+        args = sys.argv
+
+    if util is None:
+        util = PyTango.Util(args)
+
+    if is_seq(classes):
+        for klass_info in classes:
+            if not hasattr(klass_info, '_api') or klass_info._api < 2:
+                raise Exception("When giving a single class, it must implement HLAPI (see PyTango.server)")
+            klass_klass = klass_info._DeviceClass
+            klass_name = klass_info._DeviceClassName
+            klass = klass_info
+            util.add_class(klass_klass, klass, klass_name)
+    else:
+        for klass_name, klass_info in classes.items():
+            if is_seq(klass_info):
+                klass_klass, klass = klass_info
+            else:
+                if not hasattr(klass_info, '_api') or klass_info._api < 2:
+                    raise Exception("When giving a single class, it must implement HLAPI (see PyTango.server)")
+                klass_klass = klass_info._DeviceClass
+                klass_name = klass_info._DeviceClassName
+                klass = klass_info
+            util.add_class(klass_klass, klass, klass_name)
+    u_instance = PyTango.Util.instance()
+    if event_loop is not None:
+        u_instance.server_set_event_loop(event_loop)
+    u_instance.server_init()
+    msg_stream.write("Ready to accept request\n")
+    u_instance.server_run()
+    return util
+
+
+def server_run(classes, args=None, msg_stream=sys.stdout,
+               verbose=False, util=None, event_loop=None):
+    """Provides a simple way to run a tango server. It handles exceptions
+       by writting a message to the msg_stream.
+
+       The `classes` parameter can be either a sequence of :class:`~PyTango.server.Device`
+       classes or a dictionary where:
+       
+       * key is the tango class name
+       * value is either:
+           #. a :class:`~PyTango.server.Device` class or
+           #. a a sequence of two elements :class:`~PyTango.DeviceClass`, :class:`~PyTango.DeviceImpl`
+           
+       Example 1: registering and running a PowerSupply inheriting from :class:`~PyTango.server.Device`::
+       
+           from PyTango import server_run
+           from PyTango.server import Device, DeviceMeta
+       
+           class PowerSupply(Device):
+               __metaclass__ = DeviceMeta
+               
+           server_run((PowerSupply,))
+           
+       Example 2: registering and running a MyServer defined by tango classes 
+       `MyServerClass` and `MyServer`::
+       
+           import PyTango
+
+           class MyServer(PyTango.Device_4Impl):
+               pass
+               
+           class MyServerClass(PyTango.DeviceClass):
+               pass
+       
+           PyTango.server_run({"MyServer": (MyServerClass, MyServer)})
+       
+       :param classes:
+           a sequence of :class:`~PyTango.server.Device` classes or
+           a dictionary where keyword is the tango class name and value is a 
+           sequence of Tango Device Class python class, and Tango Device python class
+       :type classes: sequence or dict
+       
+       :param args:
+           list of command line arguments [default: None, meaning use sys.argv]
+       :type args: list
+       
+       :param msg_stream:
+           stream where to put messages [default: sys.stdout]
+       
+       :param util:
+           PyTango Util object [default: None meaning create a Util instance]
+       :type util: :class:`~PyTango.Util`
+
+       :param event_loop: event_loop callable
+       :type event_loop: callable
+       
+       :return: The Util singleton object
+       :rtype: :class:`~PyTango.Util`
+       
+       .. versionadded:: 8.0.0
+       
+       .. versionchanged:: 8.0.3
+           Added `util` keyword parameter.
+           Returns util object
+
+       .. versionchanged:: 8.1.1
+           Changed default msg_stream from *stderr* to *stdout*
+           Added `event_loop` keyword parameter.
+           Returns util object"""
+
+    if msg_stream is None:
+        import io
+        msg_stream = io.BytesIO()
+    write = msg_stream.write
+    try:
+        return __server_run(classes, args=args, util=util, event_loop=event_loop)
+    except KeyboardInterrupt:
+        write("Exiting: Keyboard interrupt\n")
+    except DevFailed as df:
+        write("Exiting: Server exited with PyTango.DevFailed:\n" + str(df) + "\n")
+        if verbose:
+            write(traceback.format_exc())
+    except Exception as e:
+        write("Exiting: Server exited with unforseen exception:\n" + str(e) + "\n")
+        if verbose:
+            write(traceback.format_exc())
+    write("\nExited\n")
diff --git a/src/boost/python/tango_futures.py b/src/boost/python/tango_futures.py
new file mode 100644
index 0000000..b0a8dc0
--- /dev/null
+++ b/src/boost/python/tango_futures.py
@@ -0,0 +1,43 @@
+# ------------------------------------------------------------------------------
+# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+#
+# Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+# Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+#
+# Distributed under the terms of the GNU Lesser General Public License,
+# either version 3 of the License, or (at your option) any later version.
+# See LICENSE.txt for more info.
+# ------------------------------------------------------------------------------
+
+__all__ = ["uses_future", "get_global_executor", "submit", "spawn"] 
+
+__global_executor = None
+
+MAX_WORKERS = 8
+MODE = 'thread'
+
+
+def __get_executor_class():
+    import concurrent.futures
+    ret = None
+    if MODE == 'thread':
+        ret = concurrent.futures.ThreadPoolExecutor
+    else:
+        ret = concurrent.futures.ProcessPoolExecutor
+    return ret
+
+
+def get_global_executor():
+    global __global_executor
+    if __global_executor is None:
+        klass = __get_executor_class()
+        if klass is not None:
+            __global_executor = klass(max_workers=MAX_WORKERS)
+    return __global_executor
+
+
+def submit(fn, *args, **kwargs):
+    return get_global_executor().submit(fn, *args, **kwargs)
+
+
+spawn = submit
diff --git a/src/boost/python/tango_gevent.py b/src/boost/python/tango_gevent.py
new file mode 100644
index 0000000..019dbac
--- /dev/null
+++ b/src/boost/python/tango_gevent.py
@@ -0,0 +1,28 @@
+# ------------------------------------------------------------------------------
+# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+#
+# Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+# Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+#
+# Distributed under the terms of the GNU Lesser General Public License,
+# either version 3 of the License, or (at your option) any later version.
+# See LICENSE.txt for more info.
+# ------------------------------------------------------------------------------
+
+from __future__ import absolute_import
+
+__all__ = ["get_global_threadpool", "get_global_executor", "submit", "spawn"]
+
+
+def get_global_threadpool():
+    import gevent
+    return gevent.get_hub().threadpool
+
+
+def spawn(fn, *args, **kwargs):
+    return get_global_threadpool().spawn(fn, *args, **kwargs)
+
+
+get_global_executor = get_global_threadpool
+
+submit = spawn
diff --git a/src/boost/python/tango_numpy.py b/src/boost/python/tango_numpy.py
index 98649bd..b8070af 100644
--- a/src/boost/python/tango_numpy.py
+++ b/src/boost/python/tango_numpy.py
@@ -1,25 +1,13 @@
-################################################################################
-##
-## This file is part of PyTango, a python binding for Tango
-## 
-## http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## PyTango is free software: you can redistribute it and/or modify
-## it under the terms of the GNU Lesser General Public License as published by
-## the Free Software Foundation, either version 3 of the License, or
-## (at your option) any later version.
-## 
-## PyTango 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 Lesser General Public License for more details.
-## 
-## You should have received a copy of the GNU Lesser General Public License
-## along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-##
-################################################################################
+# ------------------------------------------------------------------------------
+# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+#
+# Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+# Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+#
+# Distributed under the terms of the GNU Lesser General Public License,
+# either version 3 of the License, or (at your option) any later version.
+# See LICENSE.txt for more info.
+# ------------------------------------------------------------------------------
 
 """
 This is an internal PyTango module.
diff --git a/src/boost/python/time_val.py b/src/boost/python/time_val.py
index c0edd3a..d2e54c9 100644
--- a/src/boost/python/time_val.py
+++ b/src/boost/python/time_val.py
@@ -1,25 +1,13 @@
-################################################################################
-##
-## This file is part of PyTango, a python binding for Tango
-## 
-## http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## PyTango is free software: you can redistribute it and/or modify
-## it under the terms of the GNU Lesser General Public License as published by
-## the Free Software Foundation, either version 3 of the License, or
-## (at your option) any later version.
-## 
-## PyTango 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 Lesser General Public License for more details.
-## 
-## You should have received a copy of the GNU Lesser General Public License
-## along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-##
-################################################################################
+# ------------------------------------------------------------------------------
+# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+#
+# Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+# Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+#
+# Distributed under the terms of the GNU Lesser General Public License,
+# either version 3 of the License, or (at your option) any later version.
+# See LICENSE.txt for more info.
+# ------------------------------------------------------------------------------
 
 """
 This is an internal PyTango module.
diff --git a/src/boost/python/utils.py b/src/boost/python/utils.py
index 6de5409..ca72698 100644
--- a/src/boost/python/utils.py
+++ b/src/boost/python/utils.py
@@ -1,25 +1,13 @@
-################################################################################
-##
-## This file is part of PyTango, a python binding for Tango
-## 
-## http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## PyTango is free software: you can redistribute it and/or modify
-## it under the terms of the GNU Lesser General Public License as published by
-## the Free Software Foundation, either version 3 of the License, or
-## (at your option) any later version.
-## 
-## PyTango 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 Lesser General Public License for more details.
-## 
-## You should have received a copy of the GNU Lesser General Public License
-## along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-##
-################################################################################
+# ------------------------------------------------------------------------------
+# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+#
+# Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+# Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+#
+# Distributed under the terms of the GNU Lesser General Public License,
+# either version 3 of the License, or (at your option) any later version.
+# See LICENSE.txt for more info.
+# ------------------------------------------------------------------------------
 
 """
 This is an internal PyTango module.
@@ -30,25 +18,26 @@ from __future__ import print_function
 
 __all__ = [ "is_pure_str", "is_seq", "is_non_str_seq", "is_integer",
             "is_number", "is_scalar_type", "is_array_type", "is_numerical_type",
-            "is_int_type", "is_float_type", "obj_2_str", "seqStr_2_obj",
+            "is_int_type", "is_float_type", "is_bool_type", "is_bin_type",
+            "is_str_type", "obj_2_str", "seqStr_2_obj",
+            "scalar_to_array_type",
             "document_method", "document_static_method", "document_enum",
             "CaselessList", "CaselessDict", "EventCallBack", "get_home",
             "from_version_str_to_hex_str", "from_version_str_to_int",
-            "server_run", "decorator" ]
+            "seq_2_StdStringVector", "StdStringVector_2_seq" ]
 
 __docformat__ = "restructuredtext"
 
-import sys
 import os
-import collections
+import sys
 import numbers
-import functools
-import inspect
-import traceback
+import collections
 
 from ._PyTango import StdStringVector, StdDoubleVector, \
     DbData, DbDevInfos, DbDevExportInfos, CmdArgType, AttrDataFormat, \
-    EventData, AttrConfEventData, DataReadyEventData, DevFailed, constants
+    EventData, AttrConfEventData, DataReadyEventData, DevFailed, constants, \
+    GreenMode
+
 
 _scalar_int_types = (CmdArgType.DevShort, CmdArgType.DevUShort,
     CmdArgType.DevInt, CmdArgType.DevLong, CmdArgType.DevULong,
@@ -60,9 +49,10 @@ _scalar_numerical_types = _scalar_int_types + _scalar_float_types
 
 _scalar_str_types = (CmdArgType.DevString, CmdArgType.ConstDevString,)
 
+_scalar_bool_types = (CmdArgType.DevBoolean,)
+
 _scalar_types = _scalar_numerical_types + _scalar_str_types + \
-    (CmdArgType.DevBoolean, CmdArgType.DevEncoded,
-     CmdArgType.DevUChar, CmdArgType.DevVoid)
+    _scalar_bool_types + (CmdArgType.DevEncoded, CmdArgType.DevUChar)
 
 _array_int_types = (CmdArgType.DevVarShortArray, CmdArgType.DevVarUShortArray,
                     CmdArgType.DevVarLongArray, CmdArgType.DevVarULongArray,
@@ -72,10 +62,15 @@ _array_float_types = (CmdArgType.DevVarFloatArray, CmdArgType.DevVarDoubleArray)
 
 _array_numerical_types = _array_int_types + _array_float_types
 
-_array_types = _array_numerical_types + (CmdArgType.DevVarBooleanArray,
-    CmdArgType.DevVarStringArray,
-    CmdArgType.DevVarCharArray, CmdArgType.DevVarDoubleStringArray,
-    CmdArgType.DevVarLongStringArray)
+_array_str_types = (CmdArgType.DevVarStringArray,)
+
+_array_bool_types = (CmdArgType.DevVarBooleanArray,)
+
+_array_types = _array_numerical_types + _array_bool_types + _array_str_types + \
+    (CmdArgType.DevVarCharArray,
+     CmdArgType.DevVarDoubleStringArray, CmdArgType.DevVarLongStringArray)
+
+_binary_types = (CmdArgType.DevEncoded, CmdArgType.DevVarCharArray)
 
 _scalar_to_array_type = {
     CmdArgType.DevBoolean : CmdArgType.DevVarBooleanArray,
@@ -95,6 +90,7 @@ _scalar_to_array_type = {
 
 __device_classes = None
 
+
 def get_tango_device_classes():
     global __device_classes
     if __device_classes is None:
@@ -109,7 +105,7 @@ def get_tango_device_classes():
             except AttributeError:
                 break
     return __device_classes
-            
+
 __str_klasses = str,
 __int_klasses = int,
 __number_klasses = numbers.Number,
@@ -136,27 +132,33 @@ if constants.NUMPY_SUPPORT:
     __int_klasses = tuple(list(__int_klasses) + [numpy.integer])
     __number_klasses = tuple(list(__number_klasses) + [numpy.number])
     __seq_klasses = tuple(list(__seq_klasses) + [numpy.ndarray])
-    
+
 __str_klasses = tuple(__str_klasses)
 __int_klasses = tuple(__int_klasses)
 __number_klasses = tuple(__number_klasses)
 __seq_klasses = tuple(__seq_klasses)
 
+
 def is_pure_str(obj):
     return isinstance(obj , __str_klasses)
 
+
 def is_seq(obj):
     return isinstance(obj, __seq_klasses)
 
+
 def is_non_str_seq(obj):
     return is_seq(obj) and not is_pure_str(obj)
 
+
 def is_integer(obj):
     return isinstance(obj, __int_klasses)
 
+
 def is_number(obj):
     return isinstance(obj, __number_klasses)
 
+
 def is_scalar(tg_type):
     """Tells if the given tango type is a scalar
     
@@ -166,7 +168,7 @@ def is_scalar(tg_type):
     :return: True if the given tango type is a scalar or False otherwise
     :rtype: :py:obj:`bool`
     """
-    
+
     global _scalar_types
     return tg_type in _scalar_types
 
@@ -186,6 +188,7 @@ def is_array(tg_type):
 
 is_array_type = is_array
 
+
 def is_numerical(tg_type, inc_array=False):
     """Tells if the given tango type is numerical
     
@@ -207,6 +210,7 @@ def is_numerical(tg_type, inc_array=False):
 
 is_numerical_type = is_numerical
 
+
 def is_int(tg_type, inc_array=False):
     """Tells if the given tango type is integer
     
@@ -228,6 +232,7 @@ def is_int(tg_type, inc_array=False):
 
 is_int_type = is_int
 
+
 def is_float(tg_type, inc_array=False):
     """Tells if the given tango type is float
     
@@ -249,6 +254,68 @@ def is_float(tg_type, inc_array=False):
 
 is_float_type = is_float
 
+
+def is_bool(tg_type, inc_array=False):
+    """Tells if the given tango type is boolean
+    
+    :param tg_type: tango type
+    :type tg_type: :class:`PyTango.CmdArgType`
+    :param inc_array: (optional, default is False) determines if include array 
+                      in the list of checked types
+    :type inc_array: :py:obj:`bool`
+    
+    :return: True if the given tango type is boolean or False otherwise
+    :rtype: :py:obj:`bool`
+    """
+    global _scalar_bool_types, _array_bool_types
+    if tg_type in _scalar_bool_types:
+        return True
+    if not inc_array:
+        return False
+    return tg_type in _array_bool_types
+
+is_bool_type = is_bool
+
+def is_str(tg_type, inc_array=False):
+    """Tells if the given tango type is string
+    
+    :param tg_type: tango type
+    :type tg_type: :class:`PyTango.CmdArgType`
+    :param inc_array: (optional, default is False) determines if include array 
+                      in the list of checked types
+    :type inc_array: :py:obj:`bool`
+    
+    :return: True if the given tango type is string or False otherwise
+    :rtype: :py:obj:`bool`
+    """
+    global _scalar_str_types, _array_str_types
+    if tg_type in _scalar_str_types:
+        return True
+    if not inc_array:
+        return False
+    return tg_type in _array_str_types
+
+is_str_type = is_str
+
+
+def is_bin(tg_type, inc_array=False):
+    """Tells if the given tango type is binary
+    
+    :param tg_type: tango type
+    :type tg_type: :class:`PyTango.CmdArgType`
+    :param inc_array: (optional, default is False) determines if include array 
+                      in the list of checked types
+    :type inc_array: :py:obj:`bool`
+    
+    :return: True if the given tango type is binary or False otherwise
+    :rtype: :py:obj:`bool`
+    """
+    global _scalar_bin_types
+    return tg_type in _scalar_bin_types
+
+is_bin_type = is_bin
+
+
 def seq_2_StdStringVector(seq, vec=None):
     """Converts a python sequence<str> object to a :class:`PyTango.StdStringVector`
         
@@ -269,6 +336,7 @@ def seq_2_StdStringVector(seq, vec=None):
         vec.append(str(e))
     return vec
 
+
 def StdStringVector_2_seq(vec, seq=None):
     """Converts a :class:`PyTango.StdStringVector` to a python sequence<str>
         
@@ -286,6 +354,7 @@ def StdStringVector_2_seq(vec, seq=None):
         seq.append(str(e))
     return seq
 
+
 def seq_2_StdDoubleVector(seq, vec=None):
     """Converts a python sequence<float> object to a :class:`PyTango.StdDoubleVector`
         
@@ -306,6 +375,7 @@ def seq_2_StdDoubleVector(seq, vec=None):
         vec.append(str(e))
     return vec
 
+
 def StdDoubleVector_2_seq(vec, seq=None):
     """Converts a :class:`PyTango.StdDoubleVector` to a python sequence<float>
         
@@ -322,6 +392,7 @@ def StdDoubleVector_2_seq(vec, seq=None):
     for e in vec: seq.append(float(e))
     return seq
 
+
 def seq_2_DbDevInfos(seq, vec=None):
     """Converts a python sequence<DbDevInfo> object to a :class:`PyTango.DbDevInfos`
         
@@ -341,6 +412,7 @@ def seq_2_DbDevInfos(seq, vec=None):
     for e in seq: vec.append(e)
     return vec
 
+
 def seq_2_DbDevExportInfos(seq, vec=None):
     """Converts a python sequence<DbDevExportInfo> object to a :class:`PyTango.DbDevExportInfos`
         
@@ -360,6 +432,7 @@ def seq_2_DbDevExportInfos(seq, vec=None):
     for e in seq: vec.append(e)
     return vec
 
+
 def seq_2_DbData(seq, vec=None):
     """Converts a python sequence<DbDatum> object to a :class:`PyTango.DbData`
         
@@ -379,6 +452,7 @@ def seq_2_DbData(seq, vec=None):
     for e in seq: vec.append(e)
     return vec
 
+
 def DbData_2_dict(db_data, d=None):
     if d is None: d = {}
     if not isinstance(db_data, DbData):
@@ -387,6 +461,7 @@ def DbData_2_dict(db_data, d=None):
         d[db_datum.name] = db_datum.value_string
     return d
 
+
 def seqStr_2_obj(seq, tg_type, tg_format=None):
     """Translates a sequence<str> to a sequence of objects of give type and format
     
@@ -403,11 +478,12 @@ def seqStr_2_obj(seq, tg_type, tg_format=None):
         return _seqStr_2_obj_from_type_format(seq, tg_type, tg_format)
     return _seqStr_2_obj_from_type(seq, tg_type)
 
+
 def _seqStr_2_obj_from_type(seq, tg_type):
-    
+
     if is_pure_str(seq):
         seq = seq,
-    
+
     #    Scalar cases
     global _scalar_int_types
     if tg_type in _scalar_int_types:
@@ -423,7 +499,7 @@ def _seqStr_2_obj_from_type(seq, tg_type):
 
     if tg_type == CmdArgType.DevBoolean:
         return seq[0].lower() == 'true'
-    
+
     #sequence cases
     if tg_type in (CmdArgType.DevVarCharArray, CmdArgType.DevVarStringArray):
         return seq
@@ -446,15 +522,16 @@ def _seqStr_2_obj_from_type(seq, tg_type):
         argout = []
         for x in seq:
             argout.append(x.lower() == 'true')
-        return argout        
+        return argout
 
     return []
 
+
 def _seqStr_2_obj_from_type_format(seq, tg_type, tg_format):
     if tg_format == AttrDataFormat.SCALAR:
         return _seqStr_2_obj_from_type(tg_type, seq)
     elif tg_format == AttrDataFormat.SPECTRUM:
-        return _seqStr_2_obj_from_type(_scalar_to_array_type(tg_type), seq)
+        return _seqStr_2_obj_from_type(_scalar_to_array_type[tg_type], seq)
     elif tg_format == AttrDataFormat.IMAGE:
         if tg_type == CmdArgType.DevString:
             return seq
@@ -478,10 +555,15 @@ def _seqStr_2_obj_from_type_format(seq, tg_type, tg_format):
                     tmp.append(float(y))
                 argout.append(tmp)
             return argout
-    
+
     #UNKNOWN_FORMAT
     return _seqStr_2_obj_from_type(tg_type, seq)
 
+
+def scalar_to_array_type(dtype):
+    return _scalar_to_array_type[dtype]
+
+
 def obj_2_str(obj, tg_type):
     """Converts a python object into a string according to the given tango type
     
@@ -492,18 +574,17 @@ def obj_2_str(obj, tg_type):
            :return: a string representation of the given object
            :rtype: :py:obj:`str`
     """
-    ret = ""
     if tg_type in _scalar_types:
         # scalar cases
-        if isinstance(obj, collections.Sequence):
+        if is_pure_str(obj):
+            return obj
+        elif is_non_str_seq(obj):
             if not len(obj):
-                return ret
+                return ""
             obj = obj[0]
-        ret = str(obj).rstrip()
-    else:
-        # sequence cases
-        ret = '\n'.join([ str(i) for i in obj ])
-    return ret
+        return str(obj)
+    # sequence cases
+    return '\n'.join([str(i) for i in obj])
 
 def __get_meth_func(klass, method_name):
     meth = getattr(klass, method_name)
@@ -514,6 +595,7 @@ def __get_meth_func(klass, method_name):
         func = meth.im_func
     return meth, func
 
+
 def copy_doc(klass, fnname):
     """Copies documentation string of a method from the super class into the
     rewritten method of the given class"""
@@ -521,6 +603,7 @@ def copy_doc(klass, fnname):
     meth, func = __get_meth_func(klass, fnname)
     func.__doc__ = base_func.__doc__
 
+    
 def document_method(klass, method_name, d, add=True):
     meth, func = __get_meth_func(klass, method_name)
     if add:
@@ -530,6 +613,13 @@ def document_method(klass, method_name, d, add=True):
             return
     func.__doc__ = d
 
+    if func.__name__ != method_name:
+        try:
+            func.__name__ = method_name
+        except AttributeError:
+            pass
+
+        
 def document_static_method(klass, method_name, d, add=True):
     meth, func = __get_meth_func(klass, method_name)
     if add:
@@ -539,6 +629,7 @@ def document_static_method(klass, method_name, d, add=True):
             return
     meth.__doc__ = d
 
+    
 def document_enum(klass, enum_name, desc, append=True):
     # derived = type(base)('derived', (base,), {'__doc__': 'desc'})
 
@@ -556,6 +647,7 @@ def document_enum(klass, enum_name, desc, append=True):
     # Replace the original enum type with the new one
     setattr(klass, enum_name, derived)
 
+    
 class CaselessList(list):
     """A case insensitive lists that has some caseless methods. Only allows 
     strings as list members. Most methods that would normally return a list, 
@@ -572,28 +664,28 @@ class CaselessList(list):
     def __init__(self, inlist=[]):
         list.__init__(self)
         for entry in inlist:
-            if not isinstance(entry, str): 
+            if not isinstance(entry, str):
                 raise TypeError('Members of this object must be strings. ' \
-                                'You supplied \"%s\" which is \"%s\"' % 
+                                'You supplied \"%s\" which is \"%s\"' %
                                 (entry, type(entry)))
             self.append(entry)
 
     def findentry(self, item):
         """A caseless way of checking if an item is in the list or not.
         It returns None or the entry."""
-        if not isinstance(item, str): 
+        if not isinstance(item, str):
             raise TypeError('Members of this object must be strings. '\
                             'You supplied \"%s\"' % type(item))
         for entry in self:
             if item.lower() == entry.lower(): return entry
         return None
-    
+
     def __contains__(self, item):
         """A caseless way of checking if a list has a member in it or not."""
         for entry in self:
             if item.lower() == entry.lower(): return True
         return False
-        
+
     def remove(self, item):
         """Remove the first occurence of an item, the caseless way."""
         for entry in self:
@@ -601,7 +693,7 @@ class CaselessList(list):
                 list.remove(self, entry)
                 return
         raise ValueError(': list.remove(x): x not in list')
-    
+
     def copy(self):
         """Return a CaselessList copy of self."""
         return CaselessList(self)
@@ -609,29 +701,29 @@ class CaselessList(list):
     def list(self):
         """Return a normal list version of self."""
         return list(self)
-        
+
     def lowercopy(self):
         """Return a lowercase (list) copy of self."""
         return [entry.lower() for entry in self]
-    
+
     def append(self, item):
         """Adds an item to the list and checks it's a string."""
-        if not isinstance(item, str): 
+        if not isinstance(item, str):
             raise TypeError('Members of this object must be strings. ' \
                             'You supplied \"%s\"' % type(item))
         list.append(self, item)
-        
+
     def extend(self, item):
         """Extend the list with another list. Each member of the list must be 
         a string."""
-        if not isinstance(item, list): 
+        if not isinstance(item, list):
             raise TypeError('You can only extend lists with lists. ' \
                             'You supplied \"%s\"' % type(item))
         for entry in item:
-            if not isinstance(entry, str): 
+            if not isinstance(entry, str):
                 raise TypeError('Members of this object must be strings. '\
                                 'You supplied \"%s\"' % type(entry))
-            list.append(self, entry)        
+            list.append(self, entry)
 
     def count(self, item):
         """Counts references to 'item' in a caseless manner.
@@ -641,7 +733,7 @@ class CaselessList(list):
         for entry in self:
             if item.lower() == entry.lower():
                 count += 1
-        return count    
+        return count
 
     def index(self, item, minindex=0, maxindex=None):
         """Provide an index of first occurence of item in the list. (or raise 
@@ -651,9 +743,9 @@ class CaselessList(list):
         s.index(x[, i[, j]]) return smallest k such that s[k] == x and i <= k < j
         """
         if maxindex == None: maxindex = len(self)
-        minindex = max(0, minindex)-1
+        minindex = max(0, minindex) - 1
         maxindex = min(len(self), maxindex)
-        if not isinstance(item, str): 
+        if not isinstance(item, str):
             raise TypeError('Members of this object must be strings. '\
                             'You supplied \"%s\"' % type(item))
         index = minindex
@@ -662,11 +754,11 @@ class CaselessList(list):
             if item.lower() == self[index].lower():
                 return index
         raise ValueError(': list.index(x): x not in list')
-    
+
     def insert(self, i, x):
         """s.insert(i, x) same as s[i:i] = [x]
         Raises TypeError if x isn't a string."""
-        if not isinstance(x, str): 
+        if not isinstance(x, str):
             raise TypeError('Members of this object must be strings. ' \
                             'You supplied \"%s\"' % type(x))
         list.insert(self, i, x)
@@ -680,15 +772,15 @@ class CaselessList(list):
         the same length as the slice object requires.
         """
         if isinstance(index, int):
-            if not isinstance(value, str): 
+            if not isinstance(value, str):
                 raise TypeError('Members of this object must be strings. ' \
                                 'You supplied \"%s\"' % type(value))
             list.__setitem__(self, index, value)
         elif isinstance(index, slice):
-            if not hasattr(value, '__len__'): 
+            if not hasattr(value, '__len__'):
                 raise TypeError('Value given to set slice is not a sequence object.')
             for entry in value:
-                if not isinstance(entry, str): 
+                if not isinstance(entry, str):
                     raise TypeError('Members of this object must be strings. ' \
                                     'You supplied \"%s\"' % type(entry))
             list.__setitem__(self, index, value)
@@ -698,7 +790,7 @@ class CaselessList(list):
     def __setslice__(self, i, j, sequence):
         """Called to implement assignment to self[i:j]."""
         for entry in sequence:
-            if not isinstance(entry, str): 
+            if not isinstance(entry, str):
                 raise TypeError('Members of this object must be strings. ' \
                                 'You supplied \"%s\"' % type(entry))
         list.__setslice__(self, i, j, sequence)
@@ -717,7 +809,7 @@ class CaselessList(list):
             return list.__getitem__(self, index)
         else:
             return CaselessList(list.__getitem__(self, index))
-            
+
     def __add__(self, item):
         """To add a list, and return a CaselessList.
         Every element of item must be a string."""
@@ -727,7 +819,7 @@ class CaselessList(list):
         """To add a list, and return a CaselessList.
         Every element of item must be a string."""
         return CaselessList(list.__add__(self, item))
-    
+
     def __iadd__(self, item):
         """To add a list in place."""
         for entry in item: self.append(entry)
@@ -748,59 +840,59 @@ class CaselessDict(dict):
         if other:
             # Doesn't do keyword args
             if isinstance(other, dict):
-                for k,v in other.items():
+                for k, v in other.items():
                     dict.__setitem__(self, k.lower(), v)
             else:
-                for k,v in other:
+                for k, v in other:
                     dict.__setitem__(self, k.lower(), v)
-    
+
     def __getitem__(self, key):
         return dict.__getitem__(self, key.lower())
-    
+
     def __setitem__(self, key, value):
         dict.__setitem__(self, key.lower(), value)
-    
+
     def __contains__(self, key):
         return dict.__contains__(self, key.lower())
 
     def __delitem__(self, k):
         dict.__delitem__(self, k.lower())
-    
+
     def has_key(self, key):
         return dict.has_key(self, key.lower())
-    
+
     def get(self, key, def_val=None):
         return dict.get(self, key.lower(), def_val)
-    
+
     def setdefault(self, key, def_val=None):
         return dict.setdefault(self, key.lower(), def_val)
-    
+
     def update(self, other):
-        for k,v in other.items():
+        for k, v in other.items():
             dict.__setitem__(self, k.lower(), v)
-    
+
     def fromkeys(self, iterable, value=None):
         d = CaselessDict()
         for k in iterable:
             dict.__setitem__(d, k.lower(), value)
         return d
-    
+
     def pop(self, key, def_val=None):
         return dict.pop(self, key.lower(), def_val)
-    
+
     def keys(self):
         return CaselessList(dict.keys(self))
 
 __DEFAULT_FACT_IOR_FILE = "/tmp/rdifact.ior"
-__BASE_LINE             = "notifd"
-__END_NOTIFD_LINE       = "/DEVICE/notifd:"
+__BASE_LINE = "notifd"
+__END_NOTIFD_LINE = "/DEVICE/notifd:"
 __NOTIFD_FACTORY_PREFIX = "notifd/factory/"
 
 def notifd2db(notifd_ior_file=__DEFAULT_FACT_IOR_FILE, files=None, host=None, out=sys.stdout):
     ior_string = ""
     with file(notifd_ior_file) as ior_file:
         ior_string = ior_file.read()
-    
+
     if files is None:
         return _notifd2db_real_db(ior_string, host=host, out=out)
     else:
@@ -820,7 +912,7 @@ def _notifd2db_real_db(ior_string, host=None, out=sys.stdout):
     import PyTango
     print("going to export notification service event factory to " \
           "Tango database ...", file=out)
-                 
+
     num_retries = 3
     while num_retries > 0:
         try:
@@ -834,16 +926,16 @@ def _notifd2db_real_db(ior_string, host=None, out=sys.stdout):
                 print(str(df), file=out)
                 return
             print("Can't create Tango database object, retrying....", file=out)
-    
+
     if host is None:
         import socket
         host_name = socket.getfqdn()
-    
+
     global __NOTIFD_FACTORY_PREFIX
     notifd_factory_name = __NOTIFD_FACTORY_PREFIX + host_name
-    
+
     args = notifd_factory_name, ior_string, host_name, str(os.getpid()), "1"
-    
+
     num_retries = 3
     while num_retries > 0:
         try:
@@ -862,7 +954,7 @@ def _notifd2db_real_db(ior_string, host=None, out=sys.stdout):
                 num_retries = 0
         except Exception:
             num_retries = 0
-    
+
     if num_retries == 0:
         print("Failed to export notification service event factory " \
               "to TANGO database", file=out)
@@ -893,12 +985,12 @@ class EventCallBack(object):
 
     def __init__(self, format="{date} {dev_name} {name} {type} {value}",
                  fd=sys.stdout, max_buf=100):
-        
+
         self._msg = format
         self._fd = fd
         self._evts = []
         self._max_buf = max_buf
-    
+
     def get_events(self):
         """Returns the list of events received by this callback
            
@@ -906,7 +998,7 @@ class EventCallBack(object):
            :rtype: sequence<obj>
         """
         return self._evts
-        
+
     def push_event(self, evt):
         """Internal usage only"""
         try:
@@ -914,7 +1006,7 @@ class EventCallBack(object):
         except Exception as e:
             print("Unexpected error in callback for %s: %s" \
                   % (str(evt), str(e)), file=self._fd)
-    
+
     def _push_event(self, evt):
         """Internal usage only"""
         self._append(evt)
@@ -955,21 +1047,22 @@ class EventCallBack(object):
         if len(evts) == self._max_buf:
             evts.pop(0)
         evts.append(evt)
-        
+
     def _get_value(self, evt):
         """Internal usage only"""
         if evt.err:
             e = evt.errors[0]
             return "[%s] %s" % (e.reason, e.desc)
-        
+
         if isinstance(evt, EventData):
-            return "[%s] %s" %(evt.attr_value.quality, str(evt.attr_value.value))
+            return "[%s] %s" % (evt.attr_value.quality, str(evt.attr_value.value))
         elif isinstance(evt, AttrConfEventData):
             cfg = evt.attr_conf
             return "label='%s'; unit='%s'" % (cfg.label, cfg.unit)
         elif isinstance(evt, DataReadyEventData):
             return ""
 
+        
 def get_home():
     """
     Find user's home directory if possible. Otherwise raise error.
@@ -979,9 +1072,9 @@ def get_home():
     
     New in PyTango 7.1.4
     """
-    path=''
+    path = ''
     try:
-        path=os.path.expanduser("~")
+        path = os.path.expanduser("~")
     except:
         pass
     if not os.path.isdir(path):
@@ -996,6 +1089,7 @@ def get_home():
     else:
         raise RuntimeError('please define environment variable $HOME')
 
+    
 def _get_env_var(env_var_name):
     """
     Returns the value for the given environment name
@@ -1013,10 +1107,10 @@ def _get_env_var(env_var_name):
     
     New in PyTango 7.1.4
     """
-    
+
     if env_var_name in os.environ:
         return os.environ[env_var_name]
-    
+
     fname = os.path.join(get_home(), '.tangorc')
     if not os.path.exists(fname):
         if os.name == 'posix':
@@ -1025,142 +1119,54 @@ def _get_env_var(env_var_name):
         return None
 
     for line in file(fname):
-        strippedline = line.split('#',1)[0].strip()
-        
+        strippedline = line.split('#', 1)[0].strip()
+
         if not strippedline:
             #empty line
             continue
-        
-        tup = strippedline.split('=',1)
-        if len(tup) !=2:
+
+        tup = strippedline.split('=', 1)
+        if len(tup) != 2:
             # illegal line!
             continue
-        
+
         key, val = map(str.strip, tup)
         if key == env_var_name:
             return val
 
+        
 def from_version_str_to_hex_str(version_str):
     v = map(int, version_str.split('.'));
-    return "0x%02d%02d%02d00" % (v[0],v[1],v[2])
+    return "0x%02d%02d%02d00" % (v[0], v[1], v[2])
+
 
 def from_version_str_to_int(version_str):
     return int(from_version_str_to_hex_str(version_str, 16))
 
-def __server_run(classes, args=None, msg_stream=sys.stderr, util=None):
-    import PyTango
-    if msg_stream is None:
-        import io
-        msg_stream = io.BytesIO()
-    
-    if args is None:
-        args = sys.argv
-    
-    if util is None:
-        util = PyTango.Util(args)
-
-    if is_seq(classes):
-        for klass_info in classes:
-            if not hasattr(klass_info, '_api') or klass_info._api < 2:
-                raise Exception("When giving a single class, it must implement API2 (see PyTango.api2)")
-            klass_klass = klass_info._DeviceClass
-            klass_name = klass_info._DeviceClassName
-            klass = klass_info
-            util.add_class(klass_klass, klass, klass_name)          
-    else:            
-        for klass_name, klass_info in classes.items():
-            if is_seq(klass_info):
-                klass_klass, klass = klass_info
-            else:
-                if not hasattr(klass_info, '_api') or klass_info._api < 2:
-                    raise Exception("When giving a single class, it must implement API2 (see PyTango.api2)")
-                klass_klass = klass_info._DeviceClass
-                klass_name = klass_info._DeviceClassName
-                klass = klass_info
-            util.add_class(klass_klass, klass, klass_name)
-    u_instance = PyTango.Util.instance()
-    u_instance.server_init()
-    msg_stream.write("Ready to accept request\n")
-    u_instance.server_run()
-    return util
-    
-def server_run(classes, args=None, msg_stream=sys.stderr, verbose=False, util=None):
-    """Provides a simple way to run a tango server. It handles exceptions
-       by writting a message to the msg_stream.
-
-       The `classes` parameter can be either a sequence of :class:`~PyTango.api2.Device`
-       classes or a dictionary where:
-       
-       * key is the tango class name
-       * value is either:
-           #. a :class:`~PyTango.api2.Device` class or
-           #. a a sequence of two elements :class:`~PyTango.DeviceClass`, :class:`~PyTango.DeviceImpl`
-           
-       Example 1: registering and running a PowerSupply inheriting from :class:`~PyTango.api2.Device`::
-       
-           from PyTango import server_run
-           from PyTango.api2 import Device, DeviceMeta
-       
-           class PowerSupply(Device):
-               __metaclass__ = DeviceMeta
-               
-           server_run((PowerSupply,))
-           
-       Example 2: registering and running a MyServer defined by tango classes 
-       `MyServerClass` and `MyServer`::
-       
-           import PyTango
-
-           class MyServer(PyTango.Device_4Impl):
-               pass
-               
-           class MyServerClass(PyTango.DeviceClass):
-               pass
-       
-           PyTango.server_run({"MyServer": (MyServerClass, MyServer)})
-       
-       :param classes:
-           a sequence of :class:`~PyTango.api2.Device` classes or
-           a dictionary where keyword is the tango class name and value is a 
-           sequence of Tango Device Class python class, and Tango Device python class
-       :type classes: sequence or dict
-       
-       :param args:
-           list of command line arguments [default: None, meaning use sys.argv]
-       :type args: list
-       
-       :param msg_stream:
-           stream where to put messages [default: sys.stderr]
-       
-       :param util:
-           PyTango Util object [default: None meaning create a Util instance]
-       :type util: :class:`~PyTango.Util`
-       
-       :return: The Util singleton object
-       :rtype: :class:`~PyTango.Util`
-       
-       .. versionadded:: 8.0.0
-       
-       .. versionchanged:: 8.0.3
-           Added `util` keyword parameter.
-           Returns util object"""
-       
-    if msg_stream is None:
-        import io
-        msg_stream = io.BytesIO()
-    write = msg_stream.write
-    try:
-        return __server_run(classes, args=args, util=util)
-        write("Exiting:\n")
-    except KeyboardInterrupt:
-        write("Exiting: Keyboard interrupt\n")
-    except DevFailed as df:
-        write("Exiting: Server exited with PyTango.DevFailed:\n" + str(df) + "\n")
-        if verbose:
-            write(traceback.format_exc())
-    except Exception as e:
-        write("Exiting: Server exited with unforseen exception:\n" + str(e) + "\n")
-        if verbose:
-            write(traceback.format_exc())
-    write("\nExited\n")
+
+def info():
+    import PyTango.constants
+
+    Compile = PyTango.constants.Compile
+    Runtime = PyTango.constants.Runtime
+
+    msg = """\
+PyTango {0.Release.version} {0.Release.version_info}
+PyTango compiled with:
+    Python : {1.PY_VERSION}
+    Numpy  : {1.NUMPY_VERSION}
+    Tango  : {1.TANGO_VERSION}
+    Boost  : {1.BOOST_VERSION}
+
+PyTango runtime is:
+    Python : {2.PY_VERSION}
+    Numpy  : {2.NUMPY_VERSION}
+    Tango  : {2.TANGO_VERSION}
+    Boost  : {2.BOOST_VERSION}
+
+PyTango running on:
+{2.UNAME}   
+"""
+    msg = msg.format(PyTango, Compile, Runtime)
+    return msg
 
diff --git a/src/sip/AttributeInfo.sip b/src/sip/AttributeInfo.sip
new file mode 100644
index 0000000..42c3b4d
--- /dev/null
+++ b/src/sip/AttributeInfo.sip
@@ -0,0 +1,102 @@
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
+
+struct AttributeInfo : DeviceAttributeConfig
+{
+%TypeHeaderCode
+#include <tango.h>
+using namespace Tango;
+%End
+
+    DispLevel disp_level;
+
+    bool operator==(const AttributeInfo &);
+};
+
+%MappedType AttributeInfoList
+{
+%TypeHeaderCode
+#include <vector>
+#include <tango.h>
+using namespace Tango;
+%End
+
+%ConvertToTypeCode
+    // See if we are just being asked to check the type of the Python
+    // object.
+    if(sipIsErr == NULL)
+    {
+        bool aReturnFlag = PyList_Check(sipPy);
+        for(int i = 0; aReturnFlag && i < PySequence_Size(sipPy); ++i)
+        {
+            aReturnFlag = sipCanConvertToType(PySequence_ITEM(sipPy, i),
+                                              sipType_AttributeInfo,
+                                              SIP_NOT_NONE);
+        }
+        return aReturnFlag;
+    }
+
+    AttributeInfoList *attrInfoList = new AttributeInfoList();
+    for(int i = 0; i < PySequence_Size(sipPy); ++i)
+    {
+        int state;
+        AttributeInfo *aAttributeInfo = reinterpret_cast<AttributeInfo*>(
+                              sipConvertToType(PySequence_ITEM(sipPy, i),
+                              sipType_AttributeInfo, Py_None,
+                              SIP_NOT_NONE,
+                              &state, sipIsErr));
+        // Deal with any errors.
+        if (*sipIsErr)
+        {
+            sipReleaseType(aAttributeInfo, sipType_AttributeInfo, state);
+
+            // Tidy up.
+            delete attrInfoList;
+
+            // There is no temporary instance.
+            return 0;
+        }
+        attrInfoList->push_back(*aAttributeInfo);
+        sipReleaseType(aAttributeInfo, sipType_AttributeInfo, state);
+    }
+    *sipCppPtr = attrInfoList;
+    return sipGetState(sipTransferObj);
+%End
+
+%ConvertFromTypeCode
+    PyObject *l;
+
+    // Create the Python list of the correct length.
+    if (!(l = PyList_New(sipCpp->size())))
+        return NULL;
+
+    // Go through each element in the C++ instance and convert it to a
+    // wrapped AttributeInfo
+    int i = 0;
+    for(std::vector<AttributeInfo>::iterator j = sipCpp->begin();
+        j != sipCpp->end(); ++j, ++i)
+    {
+        AttributeInfo *aAttributeInfo = new AttributeInfo(*j);
+        PyObject *wobj;
+
+        if (!(wobj = sipConvertFromNewType(aAttributeInfo, sipType_AttributeInfo, sipTransferObj)))
+        {
+            // There was an error so garbage collect the Python list.
+            Py_DECREF(l);
+            return NULL;
+        }
+        PyList_SET_ITEM(l, i, wobj);
+    }
+    delete sipCpp;
+    return l;
+%End
+};
+
diff --git a/src/sip/CommandInfo.sip b/src/sip/CommandInfo.sip
new file mode 100644
index 0000000..0ff6ed6
--- /dev/null
+++ b/src/sip/CommandInfo.sip
@@ -0,0 +1,119 @@
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
+
+struct DevCommandInfo
+{
+%TypeHeaderCode
+#include <tango.h>
+using namespace Tango;
+%End
+
+    std::string cmd_name;
+    long        cmd_tag;
+    long        in_type;
+    long        out_type;
+    std::string in_type_desc;
+    std::string out_type_desc;
+
+    bool operator==(const DevCommandInfo &);
+};
+
+struct CommandInfo : DevCommandInfo
+{
+%TypeHeaderCode
+#include <tango.h>
+using namespace Tango;
+%End
+
+    DispLevel disp_level;
+
+    bool operator==(const CommandInfo &);
+};
+
+%MappedType CommandInfoList
+{
+%TypeHeaderCode
+#include <vector>
+#include <tango.h>
+using namespace Tango;
+%End
+
+%ConvertToTypeCode
+    // See if we are just being asked to check the type of the Python
+    // object.
+    if(sipIsErr == NULL)
+    {
+        bool aReturnFlag = PyList_Check(sipPy);
+        for(int i = 0; aReturnFlag && i < PySequence_Size(sipPy); ++i)
+        {
+            aReturnFlag = sipCanConvertToType(PySequence_ITEM(sipPy, i),
+                                              sipType_CommandInfo,
+                                              SIP_NOT_NONE);
+        }
+        return aReturnFlag;
+    }
+    
+    CommandInfoList *cmdInfoList = new CommandInfoList();
+    for(int i = 0; i < PySequence_Size(sipPy); ++i)
+    {
+        int state;
+        CommandInfo *aCommandInfo = reinterpret_cast<CommandInfo*>(
+                              sipConvertToType(PySequence_ITEM(sipPy, i),
+                              sipType_CommandInfo, Py_None,
+                              SIP_NOT_NONE,
+                              &state, sipIsErr));
+        // Deal with any errors.
+        if (*sipIsErr)
+        {
+            sipReleaseType(aCommandInfo, sipType_CommandInfo, state);
+    
+            // Tidy up.
+            delete cmdInfoList;
+    
+            // There is no temporary instance.
+            return 0;
+        }
+        cmdInfoList->push_back(*aCommandInfo);
+        sipReleaseType(aCommandInfo, sipType_CommandInfo, state);
+    }
+    *sipCppPtr = cmdInfoList;
+    return sipGetState(sipTransferObj);
+%End
+
+%ConvertFromTypeCode
+    PyObject *l;
+
+    // Create the Python list of the correct length.
+    if (!(l = PyList_New(sipCpp->size())))
+        return NULL;
+
+    // Go through each element in the C++ instance and convert it to a
+    // wrapped CommandInfo
+    int i = 0;
+    for(std::vector<CommandInfo>::iterator j = sipCpp->begin();
+        j != sipCpp->end(); ++j, ++i)
+    {
+        CommandInfo *aCommandInfo = new CommandInfo(*j);
+        PyObject *wobj;
+
+        if (!(wobj = sipConvertFromNewType(aCommandInfo, sipType_CommandInfo, sipTransferObj)))
+        {
+            // There was an error so garbage collect the Python list.
+            Py_DECREF(l);
+            return NULL;
+        }
+        PyList_SET_ITEM(l, i, wobj);
+    }
+    delete sipCpp;
+    return l;
+%End
+};
+
diff --git a/src/sip/database.sip b/src/sip/Database.sip
similarity index 87%
rename from src/sip/database.sip
rename to src/sip/Database.sip
index 205ea81..93e1848 100644
--- a/src/sip/database.sip
+++ b/src/sip/Database.sip
@@ -1,25 +1,13 @@
-/*******************************************************************************
-
-   This file is part of PyTango, a python binding for Tango
-
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 class Database : Connection {
 
diff --git a/src/sip/DbData.sip b/src/sip/DbData.sip
new file mode 100644
index 0000000..3ba4be2
--- /dev/null
+++ b/src/sip/DbData.sip
@@ -0,0 +1,12 @@
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
+
+
diff --git a/src/sip/DbDatum.sip b/src/sip/DbDatum.sip
new file mode 100644
index 0000000..6319f96
--- /dev/null
+++ b/src/sip/DbDatum.sip
@@ -0,0 +1,187 @@
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
+
+//
+// DbDatum - data object for sending and receiving data from the
+//               TANGO database api
+//
+class DbDatum
+{
+
+%TypeHeaderCode
+#include <tango.h>
+using namespace Tango;
+%End
+
+public :
+	enum except_flags
+	{
+		isempty_flag,
+		wrongtype_flag,
+		numFlags
+	};
+
+	std::string name;
+	std::vector<std::string> value_string;
+
+//
+// constructor methods
+//
+	DbDatum();
+	DbDatum (const char *);
+	~DbDatum();
+	DbDatum(const DbDatum &);
+//	DbDatum &operator=(const DbDatum &);
+
+//	size_t size();
+	bool is_empty();
+
+////	void exceptions(bitset<numFlags> fl) { exceptions_flags = fl;}
+////	bitset<numFlags> exceptions() {return exceptions_flags;}
+	void reset_exceptions(except_flags fl);
+	void set_exceptions(except_flags fl);
+
+//
+// insert methods
+//
+/*
+	void operator << (bool);
+	void operator << (short);
+	void operator << (unsigned char);
+	void operator << (unsigned short);
+	void operator << (DevLong);
+	void operator << (DevULong);
+	void operator << (DevLong64);
+	void operator << (DevULong64);
+	void operator << (float);
+	void operator << (double);
+	void operator << (char *);
+//	void operator << (char *&);
+	void operator << (const char *);
+//	void operator << (const char *&);
+	void operator << (std::string&);
+
+	void operator << (vector<std::string>&);
+	void operator << (vector<short>&);
+	void operator << (vector<unsigned short>&);
+	void operator << (vector<DevLong>&);
+	void operator << (vector<DevULong>&);
+	void operator << (vector<DevLong64>&);
+	void operator << (vector<DevULong64>&);
+	void operator << (vector<float>&);
+	void operator << (vector<double>&);
+
+//
+// extract methods
+//
+
+	bool operator >> (bool&);
+	bool operator >> (short&);
+	bool operator >> (unsigned char&);
+	bool operator >> (unsigned short&);
+	bool operator >> (DevLong&);
+	bool operator >> (DevULong&);
+	bool operator >> (DevLong64&);
+	bool operator >> (DevULong64&);
+	bool operator >> (float&);
+	bool operator >> (double&);
+	bool operator >> (const char*&);
+	bool operator >> (std::string&);
+
+	bool operator >> (vector<std::string>&);
+	bool operator >> (vector<short>&);
+	bool operator >> (vector<unsigned short>&);
+	bool operator >> (vector<DevLong>&);
+	bool operator >> (vector<DevULong>&);
+	bool operator >> (vector<DevLong64>&);
+	bool operator >> (vector<DevULong64>&);
+	bool operator >> (vector<float>&);
+	bool operator >> (vector<double>&);
+*/
+};
+
+%MappedType DbData
+{
+%TypeHeaderCode
+#include <vector>
+#include <tango.h>
+using namespace Tango;
+%End
+
+%ConvertToTypeCode
+    // See if we are just being asked to check the type of the Python
+    // object.
+    if(sipIsErr == NULL)
+    {
+        bool aReturnFlag = PyList_Check(sipPy);
+        for(int i = 0; aReturnFlag && i < PySequence_Size(sipPy); ++i)
+        {
+            aReturnFlag = sipCanConvertToType(PySequence_ITEM(sipPy, i),
+                                              sipType_DbDatum,
+                                              SIP_NOT_NONE);
+        }
+        return aReturnFlag;
+    }
+
+    DbData *dbDatumList = new DbData();
+    for(int i = 0; i < PySequence_Size(sipPy); ++i)
+    {
+        int state;
+        DbDatum *aDbDatum = reinterpret_cast<DbDatum*>(
+                              sipConvertToType(PySequence_ITEM(sipPy, i),
+                              sipType_DbDatum, Py_None,
+                              SIP_NOT_NONE,
+                              &state, sipIsErr));
+        // Deal with any errors.
+        if (*sipIsErr)
+        {
+            sipReleaseType(aDbDatum, sipType_DbDatum, state);
+
+            // Tidy up.
+            delete dbDatumList;
+
+            // There is no temporary instance.
+            return 0;
+        }
+        dbDatumList->push_back(*aDbDatum);
+        sipReleaseType(aDbDatum, sipType_DbDatum, state);
+    }
+    *sipCppPtr = dbDatumList;
+    return sipGetState(sipTransferObj);
+%End
+
+%ConvertFromTypeCode
+    PyObject *l;
+
+    // Create the Python list of the correct length.
+    if (!(l = PyList_New(sipCpp->size())))
+        return NULL;
+
+    // Go through each element in the C++ instance and convert it to a
+    // wrapped DbDatum
+    int i = 0;
+    for(std::vector<DbDatum>::iterator j = sipCpp->begin();
+        j != sipCpp->end(); ++j, ++i)
+    {
+        DbDatum *aDbDatum = new DbDatum(*j);
+        PyObject *wobj;
+
+        if (!(wobj = sipConvertFromNewType(aDbDatum, sipType_DbDatum, sipTransferObj)))
+        {
+            // There was an error so garbage collect the Python list.
+            Py_DECREF(l);
+            return NULL;
+        }
+        PyList_SET_ITEM(l, i, wobj);
+    }
+    return l;
+%End
+};
diff --git a/src/sip/DbDevImportInfo.sip b/src/sip/DbDevImportInfo.sip
new file mode 100644
index 0000000..f96c1eb
--- /dev/null
+++ b/src/sip/DbDevImportInfo.sip
@@ -0,0 +1,25 @@
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
+
+class DbDevImportInfo
+{
+
+%TypeHeaderCode
+#include <tango.h>
+using namespace Tango;
+%End
+
+public :
+    std::string name;
+    long exported;
+    std::string ior;
+    std::string version;
+};
\ No newline at end of file
diff --git a/src/sip/DbDevInfo.sip b/src/sip/DbDevInfo.sip
new file mode 100644
index 0000000..98b6d4a
--- /dev/null
+++ b/src/sip/DbDevInfo.sip
@@ -0,0 +1,24 @@
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
+
+class DbDevInfo
+{
+
+%TypeHeaderCode
+#include <tango.h>
+using namespace Tango;
+%End
+
+public :
+    std::string name;
+	std::string _class;
+	std::string server;
+};
\ No newline at end of file
diff --git a/src/sip/DeviceAttributeConfig.sip b/src/sip/DeviceAttributeConfig.sip
new file mode 100644
index 0000000..d405b5e
--- /dev/null
+++ b/src/sip/DeviceAttributeConfig.sip
@@ -0,0 +1,38 @@
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
+
+struct DeviceAttributeConfig
+{
+%TypeHeaderCode
+#include <tango.h>
+using namespace Tango;
+%End
+    std::string    name;
+    AttrWriteType  writable;
+    AttrDataFormat data_format;
+    int            data_type;
+    int            max_dim_x;
+    int            max_dim_y;
+    std::string    description;
+    std::string    label;
+    std::string    unit;
+    std::string    standard_unit;
+    std::string    display_unit;
+    std::string    format;
+    std::string    min_value;
+    std::string    max_value;
+    std::string    min_alarm;
+    std::string    max_alarm;
+    std::string    writable_attr_name;
+    std::vector<std::string>  extensions;
+
+    bool operator==(const DeviceAttributeConfig &);
+};
diff --git a/src/sip/DeviceInfo.sip b/src/sip/DeviceInfo.sip
new file mode 100644
index 0000000..f565562
--- /dev/null
+++ b/src/sip/DeviceInfo.sip
@@ -0,0 +1,24 @@
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
+
+struct DeviceInfo
+{
+%TypeHeaderCode
+#include <tango.h>
+using namespace Tango;
+%End
+    std::string dev_class;
+    std::string server_id;
+    std::string server_host;
+    long server_version;
+    std::string doc_url;
+    std::string dev_type;
+};
diff --git a/src/sip/DeviceProxy.sip b/src/sip/DeviceProxy.sip
new file mode 100644
index 0000000..a39aaec
--- /dev/null
+++ b/src/sip/DeviceProxy.sip
@@ -0,0 +1,221 @@
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
+
+class DeviceProxy : Connection {
+
+%TypeHeaderCode
+#include <tango.h>
+using namespace Tango;
+%End
+
+protected:
+    virtual std::string get_corba_name(bool);
+    virtual std::string build_corba_name();
+    virtual int get_lock_ctr();
+    virtual void set_lock_ctr(int);
+
+public:
+    DeviceProxy();
+    DeviceProxy(const char *, bool ch_access);
+    DeviceProxy(const char *);
+
+    DeviceProxy(const DeviceProxy &);
+//    DeviceProxy & operator=(const DeviceProxy &);
+
+//
+// general methods
+//
+
+    virtual const DeviceInfo & info();
+    virtual std::string dev_name();
+    virtual void parse_name(std::string &);
+    virtual Database *get_device_db();
+
+    virtual std::string status();
+    virtual DevState state();
+    virtual std::string adm_name();
+    virtual std::string description();
+    virtual std::string name();
+    virtual std::string alias();
+
+    virtual int ping();
+
+    virtual std::vector<std::string>* black_box(int);
+
+//
+// device methods
+//
+    virtual CommandInfo command_query(std::string);
+    virtual CommandInfoList* command_list_query();
+    
+
+    virtual DbDevImportInfo import_info();
+//
+// property methods
+//
+    virtual void get_property(std::string& /In/, DbData& /Out/);
+    virtual void get_property(std::vector<std::string> /In/, DbData& /Out/);
+    virtual void get_property(DbData&);
+    virtual void put_property(DbData& /In/);
+    virtual void delete_property(std::string& /In/);
+    virtual void delete_property(std::vector<std::string>& /In/);
+    virtual void delete_property(DbData& /In/);
+    virtual void get_property_list(const std::string &, std::vector<std::string> & /Out/);
+
+//
+// attribute methods
+//
+    virtual std::vector<std::string> *get_attribute_list();
+
+    virtual AttributeInfoList *get_attribute_config(std::vector<std::string>&);
+    /*
+    virtual AttributeInfoListEx *get_attribute_config_ex(std::vector<std::string>&);
+    virtual AttributeInfoEx get_attribute_config(const std::string &);
+
+    virtual AttributeInfoEx attribute_query(std::string name) {return get_attribute_config(name);}
+    virtual AttributeInfoList *attribute_list_query();
+    virtual AttributeInfoListEx *attribute_list_query_ex();
+
+    virtual void set_attribute_config(AttributeInfoList &);
+    virtual void set_attribute_config(AttributeInfoListEx &);
+
+    virtual DeviceAttribute read_attribute(std::string&);
+    virtual DeviceAttribute read_attribute(const char *at) {std::string str(at);return read_attribute(str);}
+    void read_attribute(const char *,DeviceAttribute &);
+    void read_attribute(std::string &at,DeviceAttribute &da) {read_attribute(at.c_str(),da);}
+    virtual std::vector<DeviceAttribute> *read_attributes(std::vector<std::string>&);
+
+    virtual void write_attribute(DeviceAttribute&);
+    virtual void write_attributes(std::vector<DeviceAttribute>&);
+
+    virtual DeviceAttribute write_read_attribute(DeviceAttribute &);
+
+//
+// history methods
+//
+    virtual std::vector<DeviceDataHistory> *command_history(std::string &,int);
+    virtual std::vector<DeviceDataHistory> *command_history(const char *na,int n)
+            {std::string str(na);return command_history(str,n);}
+
+    virtual std::vector<DeviceAttributeHistory> *attribute_history(std::string &,int);
+    virtual std::vector<DeviceAttributeHistory> *attribute_history(const char *na,int n)
+            {std::string str(na);return attribute_history(str,n);}
+//
+// Polling administration methods
+//
+    virtual std::vector<std::string> *polling_status();
+
+    virtual void poll_command(std::string &, int);
+    virtual void poll_command(const char *na, int per) {std::string tmp(na);poll_command(tmp,per);}
+    virtual void poll_attribute(std::string &, int);
+    virtual void poll_attribute(const char *na, int per) {std::string tmp(na);poll_attribute(tmp,per);}
+
+    virtual int get_command_poll_period(std::string &);
+    virtual int get_command_poll_period(const char *na)
+            {std::string tmp(na);return get_command_poll_period(tmp);}
+    virtual int get_attribute_poll_period(std::string &);
+    virtual int get_attribute_poll_period(const char *na)
+            {std::string tmp(na);return get_attribute_poll_period(tmp);}
+
+    virtual bool is_command_polled(std::string &);
+    virtual bool is_command_polled(const char *na) {std::string tmp(na);return is_command_polled(tmp);}
+    virtual bool is_attribute_polled(std::string &);
+    virtual bool is_attribute_polled(const char *na) {std::string tmp(na);return is_attribute_polled(tmp);}
+
+    virtual void stop_poll_command(std::string &);
+    virtual void stop_poll_command(const char *na) {std::string tmp(na);stop_poll_command(tmp);}
+    virtual void stop_poll_attribute(std::string &);
+    virtual void stop_poll_attribute(const char *na) {std::string tmp(na);stop_poll_attribute(tmp);}
+//
+// Asynchronous methods
+//
+    virtual long read_attribute_asynch(const char *na) {std::string tmp(na);return read_attribute_asynch(tmp);}
+    virtual long read_attribute_asynch(std::string &att_name);
+    virtual long read_attributes_asynch(std::vector <std::string> &);
+
+    virtual std::vector<DeviceAttribute> *read_attributes_reply(long);
+    virtual std::vector<DeviceAttribute> *read_attributes_reply(long,long);
+    virtual DeviceAttribute *read_attribute_reply(long);
+    virtual DeviceAttribute *read_attribute_reply(long,long);
+
+    virtual long write_attribute_asynch(DeviceAttribute &);
+    virtual long write_attributes_asynch(std::vector<DeviceAttribute> &);
+
+    virtual void write_attributes_reply(long);
+    virtual void write_attributes_reply(long,long);
+    virtual void write_attribute_reply(long id) {write_attributes_reply(id);}
+    virtual void write_attribute_reply(long to,long id) {write_attributes_reply(to,id);}
+
+    virtual long pending_asynch_call(asyn_req_type req)
+            {if (req == POLLING)return pasyn_ctr;
+            else if (req==CALL_BACK) return pasyn_cb_ctr;
+            else return (pasyn_ctr + pasyn_cb_ctr);}
+
+    virtual void read_attributes_asynch(std::vector<std::string> &,CallBack &);
+    virtual void read_attribute_asynch(const char *na,CallBack &cb) {std::string tmp(na);read_attribute_asynch(tmp,cb);}
+    virtual void read_attribute_asynch(std::string &,CallBack &);
+
+    virtual void write_attribute_asynch(DeviceAttribute &,CallBack &);
+    virtual void write_attributes_asynch(std::vector<DeviceAttribute> &,CallBack &);
+//
+// Logging administration methods
+//
+#ifdef TANGO_HAS_LOG4TANGO
+    virtual void add_logging_target(const std::string &target_type_name);
+    virtual void add_logging_target(const char *target_type_name)
+            {add_logging_target(std::string(target_type_name));}
+
+    virtual void remove_logging_target(const std::string &target_type_name);
+    virtual void remove_logging_target(const char *target_type_name)
+            {remove_logging_target(std::string(target_type_name));}
+
+    virtual std::vector<std::string> get_logging_target (void);
+    virtual int get_logging_level (void);
+    virtual void set_logging_level (int level);
+#endif // TANGO_HAS_LOG4TANGO
+//
+// Event methods
+//
+    virtual int subscribe_event(const std::string &attr_name, EventType event, CallBack *,
+                       const std::vector<std::string> &filters);  // For compatibility with Tango < 8
+    virtual int subscribe_event(const std::string &attr_name, EventType event, CallBack *,
+                       const std::vector<std::string> &filters, bool stateless); // For compatibility with Tango < 8
+    virtual int subscribe_event(const std::string &attr_name, EventType event, int event_queue_size,
+                       const std::vector<std::string> &filters, bool stateless = false); // For compatibility with Tango < 8
+
+    virtual int subscribe_event(const std::string &attr_name, EventType event, CallBack *);
+    virtual int subscribe_event(const std::string &attr_name, EventType event, CallBack *,bool stateless);
+    virtual int subscribe_event(const std::string &attr_name, EventType event, int event_queue_size,bool stateless = false);
+
+    virtual void unsubscribe_event(int event_id);
+//
+// Methods to access data in event queues
+//
+    virtual void get_events (int event_id, EventDataList &event_list);
+    virtual void get_events (int event_id, AttrConfEventDataList &event_list);
+    virtual void get_events (int event_id, DataReadyEventDataList &event_list);
+    virtual void get_events (int event_id, CallBack *cb);
+    virtual int  event_queue_size(int event_id);
+    virtual TimeVal get_last_event_date(int event_id);
+    virtual bool is_event_queue_empty(int event_id);
+
+//
+// Locking methods
+//
+    virtual void lock(int lock_validity=DEFAULT_LOCK_VALIDITY);
+    virtual void unlock(bool force=false);
+    virtual std::string locking_status();
+    virtual bool is_locked();
+    virtual bool is_locked_by_me();
+    virtual bool get_locker(LockerInfo &);
+*/
+};
+
diff --git a/src/sip/Makefile b/src/sip/Makefile
new file mode 100644
index 0000000..6820d9c
--- /dev/null
+++ b/src/sip/Makefile
@@ -0,0 +1,58 @@
+TARGET = Tango.so
+OFILES = sipTangocmodule.o sipTangoDatabase.o sipTangoDeviceProxy.o sipTangoConnection.o sipTangoDbDevImportInfo.o sipTangoDbDevInfo.o sipTangoDbDatum.o sipTangoCommandInfoList.o sipTangoCommandInfo.o sipTangoDevCommandInfo.o sipTangostdvector1800.o sipTangostdvector0100stdstring.o sipTangostdstring.o
+HFILES = sipAPITango.h 
+
+CC = gcc
+CXX = g++
+LINK = g++
+CPPFLAGS = -DNDEBUG -I. -I/usr/include/python2.6
+CFLAGS =  -O2 -g -fPIC -Wall -W
+CXXFLAGS = -std=c++0x  -O2 -g -fPIC -Wall -W
+LFLAGS = -z defs -shared -Wl,--version-script=Tango.exp
+LIBS = -ltango -llog4tango -lzmq -lomniORB4 -lomniDynamic4 -lomnithread -lCOS4 -lpython2.6
+.SUFFIXES: .c .o .cpp .cc .cxx .C
+
+
+.cpp.o:
+	$(CXX) -c $(CXXFLAGS) $(CPPFLAGS) -o $@ $<
+
+.cc.o:
+	$(CXX) -c $(CXXFLAGS) $(CPPFLAGS) -o $@ $<
+
+.cxx.o:
+	$(CXX) -c $(CXXFLAGS) $(CPPFLAGS) -o $@ $<
+
+.C.o:
+	$(CXX) -c $(CXXFLAGS) $(CPPFLAGS) -o $@ $<
+
+.c.o:
+	$(CC) -c $(CFLAGS) $(CPPFLAGS) -o $@ $<
+
+all: $(TARGET)
+
+$(OFILES): $(HFILES)
+
+$(TARGET): $(OFILES)
+	@echo '{ global: initTango; local: *; };' > Tango.exp
+	$(LINK) $(LFLAGS) -o $(TARGET) $(OFILES) $(LIBS)
+
+install: $(TARGET)
+	@test -d $(DESTDIR)/usr/lib/python2.6/dist-packages || mkdir -p $(DESTDIR)/usr/lib/python2.6/dist-packages
+	cp -f $(TARGET) $(DESTDIR)/usr/lib/python2.6/dist-packages/$(TARGET)
+
+clean:
+	-rm -f $(TARGET)
+	-rm -f sipTangocmodule.o
+	-rm -f sipTangoDatabase.o
+	-rm -f sipTangoDeviceProxy.o
+	-rm -f sipTangoConnection.o
+	-rm -f sipTangoDbDevImportInfo.o
+	-rm -f sipTangoDbDevInfo.o
+	-rm -f sipTangoDbDatum.o
+	-rm -f sipTangoCommandInfoList.o
+	-rm -f sipTangoCommandInfo.o
+	-rm -f sipTangoDevCommandInfo.o
+	-rm -f sipTangostdvector1800.o
+	-rm -f sipTangostdvector0100stdstring.o
+	-rm -f sipTangostdstring.o
+	-rm -f Tango.exp
diff --git a/src/sip/Tango.sip b/src/sip/Tango.sip
new file mode 100644
index 0000000..e1ec7a2
--- /dev/null
+++ b/src/sip/Tango.sip
@@ -0,0 +1,47 @@
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
+
+%Module Tango 008001000
+
+%Timeline { TANGO_7_2 TANGO_8_0 TANGO_8_1 }
+
+%Platforms {WIN32_PLATFORM POSIX_PLATFORM MACOS_PLATFORM}
+
+%Include std_utils.sip
+%Include constants.sip
+%Include CommandInfo.sip
+%Include DeviceInfo.sip
+%Include DeviceAttributeConfig.sip
+%Include AttributeInfo.sip
+%Include DbDatum.sip
+%Include DbDevInfo.sip
+%Include DbDevImportInfo.sip
+%Include connection.sip
+%Include DeviceProxy.sip
+%Include Database.sip
+
+%PostInitialisationCode
+
+    PyObject* init_tango = PyImport_ImportModule("__init_tango");
+    if (init_tango == NULL)
+    {
+        if (!PyErr_Occurred())
+        {
+
+        }
+        return;
+    }
+    PyObject* init_name = PyString_FromString("init");
+    PyObject* ret = PyObject_CallMethodObjArgs(init_tango, init_name, sipModule, sipModuleDict, NULL);
+    Py_DECREF(init_name);
+    Py_DECREF(ret);
+    Py_DECREF(init_tango);
+%End
diff --git a/src/sip/__init_tango.py b/src/sip/__init_tango.py
new file mode 100644
index 0000000..ea3a53c
--- /dev/null
+++ b/src/sip/__init_tango.py
@@ -0,0 +1,65 @@
+# ------------------------------------------------------------------------------
+# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+#
+# Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+# Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+#
+# Distributed under the terms of the GNU Lesser General Public License,
+# either version 3 of the License, or (at your option) any later version.
+# See LICENSE.txt for more info.
+# ------------------------------------------------------------------------------
+
+import collections
+
+def __inc_param(obj, name):
+    ret = not name.startswith('_')
+    ret &= not name in ('except_flags',)
+    ret &= not isinstance(getattr(obj, name), collections.Callable)
+    return ret
+
+def __single_param(obj, param_name, f=repr, fmt='%s = %s'):
+    param_value = getattr(obj, param_name)
+    return fmt % (param_name, f(param_value))
+
+def __struct_params_s(obj, separator=', ', f=repr, fmt='%s = %s'):
+    """method wrapper for printing all elements of a struct"""
+    s = separator.join([__single_param(obj, n, f, fmt) for n in dir(obj) if __inc_param(obj, n)])
+    return s
+
+def __struct_params_repr(obj):
+    """method wrapper for representing all elements of a struct"""
+    return __struct_params_s(obj)
+
+def __struct_params_str(obj, fmt, f=repr):
+    """method wrapper for printing all elements of a struct."""
+    return __struct_params_s(obj, '\n', f=f, fmt=fmt)
+
+def __repr__Struct(self):
+    """repr method for struct"""
+    return '%s(%s)' % (self.__class__.__name__, __struct_params_repr(self))
+
+def __str__Struct_Helper(self, f=repr):
+    """str method for struct"""
+    attrs = [ n for n in dir(self) if __inc_param(self, n)]
+    fmt = attrs and '%%%ds=%%s' % max(map(len, attrs)) or "%s = %s"
+    return '%s(\n%s)\n' % (self.__class__.__name__, __struct_params_str(self, fmt, f))
+
+def __str__Struct(self):
+    return __str__Struct_Helper(self, f=repr)
+
+def __registerStructStr(Tango):
+    """helper method to register str and repr methods for structures"""
+    structs = (Tango.DeviceInfo, Tango.DbDevImportInfo, Tango.DbDatum,
+        Tango.AttributeInfo)
+
+    for struct in structs:
+        struct.__str__ = __str__Struct
+        struct.__repr__ = __repr__Struct
+
+def __pprint_init(Tango):
+    __registerStructStr(Tango)
+
+
+def init(Tango, Tangodict):
+    __pprint_init(Tango)
+    return 1
diff --git a/src/sip/configure.py b/src/sip/configure.py
index 81e945e..ea03e84 100644
--- a/src/sip/configure.py
+++ b/src/sip/configure.py
@@ -1,26 +1,56 @@
 import os
+import sys
 import sipconfig
 
 # The name of the SIP build file generated by SIP and used by the build
 # system.
-build_file = "tango.sbf"
+
+this_dir = os.path.dirname(os.path.abspath(__file__))
+out_dir = os.path.join(this_dir, 'out')
+
+name = "Tango"
+sip_file = os.path.join(this_dir, name + ".sip")
+build_file = os.path.join(out_dir , name + ".sbf")
 
 # Get the SIP configuration information.
 config = sipconfig.Configuration()
 
+
 # Run SIP to generate the code.
-os.system(" ".join([config.sip_bin, "-c", ".", "-b", build_file, "tango.sip"]))
+cmd = " ".join([config.sip_bin,
+                "-e" ,  # Enable support for exceptions.
+                "-g",  # Always release and reaquire the GIL.
+                "-w",  # Enable warning messages
+                "-c", out_dir,
+                "-b", build_file,
+                sip_file])
+print cmd
+ret = os.system(cmd)
+
+if ret:
+    print "sip error: exiting..."
+    sys.exit(ret)
 
 # Create the Makefile.
-makefile = sipconfig.SIPModuleMakefile(config, build_file)
+makefile = sipconfig.SIPModuleMakefile(config, build_file,
+                                       dir=out_dir,
+                                       install_dir=this_dir)
+
+python_lib = "python{v[0]}.{v[1]}".format(v=sys.version_info)
 
 # Add the library we are wrapping.  The name doesn't include any platform
 # specific prefixes or extensions (e.g. the "lib" prefix on UNIX, or the
 # ".dll" extension on Windows).
-makefile.extra_libs = ["tango", "zmq"]
-makefile.extra_lib_dirs = ["/home/tcoutinho/.local/lib"]
-makefile.extra_include_dirs = ["/home/tcoutinho/.local/include", "/home/tcoutinho/.local/include/tango"]
+makefile.extra_libs = ["tango", "log4tango", "zmq",
+                       "omniORB4", "omniDynamic4", "omnithread", "COS4",
+                       python_lib]
+makefile.extra_lib_dirs = []  #["/home/tcoutinho/.local/lib"]
+makefile.extra_include_dirs = []  #["/home/tcoutinho/.local/include", "/home/tcoutinho/.local/include/tango"]
 makefile.extra_cxxflags = ["-std=c++0x"]
 
+# see all undefined references
+makefile.extra_lflags = ['-z defs']
+
 # Generate the Makefile itself.
 makefile.generate()
+
diff --git a/src/sip/connection.sip b/src/sip/connection.sip
index fa05444..9df9c92 100644
--- a/src/sip/connection.sip
+++ b/src/sip/connection.sip
@@ -1,25 +1,13 @@
-/*******************************************************************************
-
-   This file is part of PyTango, a python binding for Tango
-
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 class Connection {
 
diff --git a/src/sip/constants.sip b/src/sip/constants.sip
index 9a513aa..fa3eea9 100644
--- a/src/sip/constants.sip
+++ b/src/sip/constants.sip
@@ -1,25 +1,13 @@
-/*******************************************************************************
-
-   This file is part of PyTango, a python binding for Tango
-
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 %ModuleHeaderCode
 #include <tango.h>
@@ -102,8 +90,6 @@ enum LockCmdCode {
 	LOCK_EXIT
 };
 
-
-
 enum LogLevel {
   	LOG_OFF,
   	LOG_FATAL,
diff --git a/src/sip/dbdatum.sip b/src/sip/dbdatum.sip
deleted file mode 100644
index 0bea30f..0000000
--- a/src/sip/dbdatum.sip
+++ /dev/null
@@ -1,123 +0,0 @@
-/*******************************************************************************
-
-   This file is part of PyTango, a python binding for Tango
-
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
-
-//
-// DbDatum - data object for sending and receiving data from the
-//               TANGO database api
-//
-class DbDatum
-{
-
-%TypeHeaderCode
-#include <tango.h>
-using namespace Tango;
-%End
-
-public :
-	enum except_flags
-	{
-		isempty_flag,
-		wrongtype_flag,
-		numFlags
-	};
-
-	std::string name;
-	std::vector<std::string> value_string;
-
-//
-// constructor methods
-//
-	DbDatum();
-	DbDatum (std::string);
-	DbDatum (const char *);
-	~DbDatum();
-	DbDatum(const DbDatum &);
-//	DbDatum &operator=(const DbDatum &);
-
-//	size_t size();
-	bool is_empty();
-
-////	void exceptions(bitset<numFlags> fl) { exceptions_flags = fl;}
-////	bitset<numFlags> exceptions() {return exceptions_flags;}
-	void reset_exceptions(except_flags fl);
-	void set_exceptions(except_flags fl);
-
-//
-// insert methods
-//
-/*
-	void operator << (bool);
-	void operator << (short);
-	void operator << (unsigned char);
-	void operator << (unsigned short);
-	void operator << (DevLong);
-	void operator << (DevULong);
-	void operator << (DevLong64);
-	void operator << (DevULong64);
-	void operator << (float);
-	void operator << (double);
-	void operator << (char *);
-//	void operator << (char *&);
-	void operator << (const char *);
-//	void operator << (const char *&);
-	void operator << (std::string&);
-
-	void operator << (vector<std::string>&);
-	void operator << (vector<short>&);
-	void operator << (vector<unsigned short>&);
-	void operator << (vector<DevLong>&);
-	void operator << (vector<DevULong>&);
-	void operator << (vector<DevLong64>&);
-	void operator << (vector<DevULong64>&);
-	void operator << (vector<float>&);
-	void operator << (vector<double>&);
-
-//
-// extract methods
-//
-
-	bool operator >> (bool&);
-	bool operator >> (short&);
-	bool operator >> (unsigned char&);
-	bool operator >> (unsigned short&);
-	bool operator >> (DevLong&);
-	bool operator >> (DevULong&);
-	bool operator >> (DevLong64&);
-	bool operator >> (DevULong64&);
-	bool operator >> (float&);
-	bool operator >> (double&);
-	bool operator >> (const char*&);
-	bool operator >> (std::string&);
-
-	bool operator >> (vector<std::string>&);
-	bool operator >> (vector<short>&);
-	bool operator >> (vector<unsigned short>&);
-	bool operator >> (vector<DevLong>&);
-	bool operator >> (vector<DevULong>&);
-	bool operator >> (vector<DevLong64>&);
-	bool operator >> (vector<DevULong64>&);
-	bool operator >> (vector<float>&);
-	bool operator >> (vector<double>&);
-*/
-};
-
diff --git a/src/sip/deviceproxy.sip b/src/sip/deviceproxy.sip
deleted file mode 100644
index e6f7543..0000000
--- a/src/sip/deviceproxy.sip
+++ /dev/null
@@ -1,232 +0,0 @@
-/*******************************************************************************
-
-   This file is part of PyTango, a python binding for Tango
-
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
-
-class DeviceProxy : Connection {
-
-%TypeHeaderCode
-#include <tango.h>
-using namespace Tango;
-%End
-
-protected:
-	virtual std::string get_corba_name(bool);
-	virtual std::string build_corba_name();
-	virtual int get_lock_ctr();
-	virtual void set_lock_ctr(int);
-
-public:
-    DeviceProxy();
-	DeviceProxy(const char *, bool ch_access);
-	DeviceProxy(const char *);
-
-	DeviceProxy(const DeviceProxy &);
-//	DeviceProxy & operator=(const DeviceProxy &);
-
-//
-// general methods
-//
-
-//	virtual DeviceInfo const &info();
-	virtual std::string dev_name();
-	virtual void parse_name(std::string &);
-	virtual Database *get_device_db();
-
-	virtual std::string status();
-	virtual DevState state();
-	virtual std::string adm_name();
-	virtual std::string description();
-	virtual std::string name();
-	virtual std::string alias();
-
-	virtual int ping();
-
-	virtual std::vector<std::string> *black_box(int);
-
-/*
-
-//
-// device methods
-//
-	virtual CommandInfo command_query(std::string);
-	virtual CommandInfoList *command_list_query();
-
-	virtual DbDevImportInfo import_info();
-//
-// property methods
-//
-	virtual void get_property(std::string&, DbData&);
-	virtual void get_property(vector<std::string>&, DbData&);
-	virtual void get_property(DbData&);
-	virtual void put_property(DbData&);
-	virtual void delete_property(std::string&);
-	virtual void delete_property(vector<std::string>&);
-	virtual void delete_property(DbData&);
-	virtual void get_property_list(const std::string &,vector<std::string> &);
-//
-// attribute methods
-//
-	virtual vector<std::string> *get_attribute_list();
-
-	virtual AttributeInfoList *get_attribute_config(vector<std::string>&);
-	virtual AttributeInfoListEx *get_attribute_config_ex(vector<std::string>&);
-	virtual AttributeInfoEx get_attribute_config(const std::string &);
-
-	virtual AttributeInfoEx attribute_query(std::string name) {return get_attribute_config(name);}
-	virtual AttributeInfoList *attribute_list_query();
-	virtual AttributeInfoListEx *attribute_list_query_ex();
-
-	virtual void set_attribute_config(AttributeInfoList &);
-	virtual void set_attribute_config(AttributeInfoListEx &);
-
-	virtual DeviceAttribute read_attribute(std::string&);
-	virtual DeviceAttribute read_attribute(const char *at) {std::string str(at);return read_attribute(str);}
-	void read_attribute(const char *,DeviceAttribute &);
-	void read_attribute(std::string &at,DeviceAttribute &da) {read_attribute(at.c_str(),da);}
-	virtual vector<DeviceAttribute> *read_attributes(vector<std::string>&);
-
-	virtual void write_attribute(DeviceAttribute&);
-	virtual void write_attributes(vector<DeviceAttribute>&);
-
-	virtual DeviceAttribute write_read_attribute(DeviceAttribute &);
-
-//
-// history methods
-//
-	virtual vector<DeviceDataHistory> *command_history(std::string &,int);
-	virtual vector<DeviceDataHistory> *command_history(const char *na,int n)
-			{std::string str(na);return command_history(str,n);}
-
-	virtual vector<DeviceAttributeHistory> *attribute_history(std::string &,int);
-	virtual vector<DeviceAttributeHistory> *attribute_history(const char *na,int n)
-			{std::string str(na);return attribute_history(str,n);}
-//
-// Polling administration methods
-//
-	virtual vector<std::string> *polling_status();
-
-	virtual void poll_command(std::string &, int);
-	virtual void poll_command(const char *na, int per) {std::string tmp(na);poll_command(tmp,per);}
-	virtual void poll_attribute(std::string &, int);
-	virtual void poll_attribute(const char *na, int per) {std::string tmp(na);poll_attribute(tmp,per);}
-
-	virtual int get_command_poll_period(std::string &);
-	virtual int get_command_poll_period(const char *na)
-			{std::string tmp(na);return get_command_poll_period(tmp);}
-	virtual int get_attribute_poll_period(std::string &);
-	virtual int get_attribute_poll_period(const char *na)
-			{std::string tmp(na);return get_attribute_poll_period(tmp);}
-
-	virtual bool is_command_polled(std::string &);
-	virtual bool is_command_polled(const char *na) {std::string tmp(na);return is_command_polled(tmp);}
-	virtual bool is_attribute_polled(std::string &);
-	virtual bool is_attribute_polled(const char *na) {std::string tmp(na);return is_attribute_polled(tmp);}
-
-	virtual void stop_poll_command(std::string &);
-	virtual void stop_poll_command(const char *na) {std::string tmp(na);stop_poll_command(tmp);}
-	virtual void stop_poll_attribute(std::string &);
-	virtual void stop_poll_attribute(const char *na) {std::string tmp(na);stop_poll_attribute(tmp);}
-//
-// Asynchronous methods
-//
-	virtual long read_attribute_asynch(const char *na) {std::string tmp(na);return read_attribute_asynch(tmp);}
-	virtual long read_attribute_asynch(std::string &att_name);
-	virtual long read_attributes_asynch(vector <std::string> &);
-
-	virtual vector<DeviceAttribute> *read_attributes_reply(long);
-	virtual vector<DeviceAttribute> *read_attributes_reply(long,long);
-	virtual DeviceAttribute *read_attribute_reply(long);
-	virtual DeviceAttribute *read_attribute_reply(long,long);
-
-	virtual long write_attribute_asynch(DeviceAttribute &);
-	virtual long write_attributes_asynch(vector<DeviceAttribute> &);
-
-	virtual void write_attributes_reply(long);
-	virtual void write_attributes_reply(long,long);
-	virtual void write_attribute_reply(long id) {write_attributes_reply(id);}
-	virtual void write_attribute_reply(long to,long id) {write_attributes_reply(to,id);}
-
-	virtual long pending_asynch_call(asyn_req_type req)
-			{if (req == POLLING)return pasyn_ctr;
-			else if (req==CALL_BACK) return pasyn_cb_ctr;
-			else return (pasyn_ctr + pasyn_cb_ctr);}
-
-	virtual void read_attributes_asynch(vector<std::string> &,CallBack &);
-	virtual void read_attribute_asynch(const char *na,CallBack &cb) {std::string tmp(na);read_attribute_asynch(tmp,cb);}
-	virtual void read_attribute_asynch(std::string &,CallBack &);
-
-	virtual void write_attribute_asynch(DeviceAttribute &,CallBack &);
-	virtual void write_attributes_asynch(vector<DeviceAttribute> &,CallBack &);
-//
-// Logging administration methods
-//
-#ifdef TANGO_HAS_LOG4TANGO
-	virtual void add_logging_target(const std::string &target_type_name);
-	virtual void add_logging_target(const char *target_type_name)
-			{add_logging_target(std::string(target_type_name));}
-
-	virtual void remove_logging_target(const std::string &target_type_name);
-	virtual void remove_logging_target(const char *target_type_name)
-			{remove_logging_target(std::string(target_type_name));}
-
-	virtual vector<std::string> get_logging_target (void);
-	virtual int get_logging_level (void);
-	virtual void set_logging_level (int level);
-#endif // TANGO_HAS_LOG4TANGO
-//
-// Event methods
-//
-	virtual int subscribe_event(const std::string &attr_name, EventType event, CallBack *,
-	                   const vector<std::string> &filters);  // For compatibility with Tango < 8
-	virtual int subscribe_event(const std::string &attr_name, EventType event, CallBack *,
-	                   const vector<std::string> &filters, bool stateless); // For compatibility with Tango < 8
-	virtual int subscribe_event(const std::string &attr_name, EventType event, int event_queue_size,
-	                   const vector<std::string> &filters, bool stateless = false); // For compatibility with Tango < 8
-
-	virtual int subscribe_event(const std::string &attr_name, EventType event, CallBack *);
-	virtual int subscribe_event(const std::string &attr_name, EventType event, CallBack *,bool stateless);
-	virtual int subscribe_event(const std::string &attr_name, EventType event, int event_queue_size,bool stateless = false);
-
-	virtual void unsubscribe_event(int event_id);
-//
-// Methods to access data in event queues
-//
-	virtual void get_events (int event_id, EventDataList &event_list);
-	virtual void get_events (int event_id, AttrConfEventDataList &event_list);
-	virtual void get_events (int event_id, DataReadyEventDataList &event_list);
-	virtual void get_events (int event_id, CallBack *cb);
-	virtual int  event_queue_size(int event_id);
-	virtual TimeVal get_last_event_date(int event_id);
-	virtual bool is_event_queue_empty(int event_id);
-
-//
-// Locking methods
-//
-	virtual void lock(int lock_validity=DEFAULT_LOCK_VALIDITY);
-	virtual void unlock(bool force=false);
-	virtual std::string locking_status();
-	virtual bool is_locked();
-	virtual bool is_locked_by_me();
-	virtual bool get_locker(LockerInfo &);
-*/
-};
-
diff --git a/src/boost/python/release.py b/src/sip/release.py
similarity index 63%
copy from src/boost/python/release.py
copy to src/sip/release.py
index 40e8af4..a1bcc27 100644
--- a/src/boost/python/release.py
+++ b/src/sip/release.py
@@ -1,25 +1,13 @@
-################################################################################
-##
-## This file is part of PyTango, a python binding for Tango
-## 
-## http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## PyTango is free software: you can redistribute it and/or modify
-## it under the terms of the GNU Lesser General Public License as published by
-## the Free Software Foundation, either version 3 of the License, or
-## (at your option) any later version.
-## 
-## PyTango 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 Lesser General Public License for more details.
-## 
-## You should have received a copy of the GNU Lesser General Public License
-## along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-##
-################################################################################
+# ------------------------------------------------------------------------------
+# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+#
+# Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+# Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+#
+# Distributed under the terms of the GNU Lesser General Public License,
+# either version 3 of the License, or (at your option) any later version.
+# See LICENSE.txt for more info.
+# ------------------------------------------------------------------------------
 
 """
 This is an internal PyTango module.
@@ -52,10 +40,10 @@ class Release:
             - keywords : (seq<str>) list of keywords
             - license : (str) the license"""
     name = 'PyTango'
-    version_info = (8, 0, 3, 'final', 0)
+    version_info = (8, 1, 0, 'dev', 0)
     version = '.'.join(map(str, version_info[:3]))
     version_long = version + ''.join(map(str, version_info[3:]))
-    version_description = 'This version implements the C++ Tango 8.0 API.'
+    version_description = 'This version implements the C++ Tango 8.1 API.'
     version_number = int(version.replace('.',''))
     description = 'A python binding for the Tango control system'
     long_description = 'This module implements the Python Tango Device API ' \
@@ -65,6 +53,6 @@ class Release:
     author_lines = "\n".join([ "%s <%s>" % x for x in authors.values()])
     url = 'http://www.tango-controls.org/static/PyTango/'
     download_url = 'http://pypi.python.org/packages/source/P/PyTango'
-    platform = ['Linux', 'Windows XP/Vista/7']
+    platform = ['Linux', 'Windows XP/Vista/7/8']
     keywords = ['Tango', 'CORBA', 'binding']
     
diff --git a/src/sip/setup.cfg b/src/sip/setup.cfg
new file mode 100644
index 0000000..0e215a3
--- /dev/null
+++ b/src/sip/setup.cfg
@@ -0,0 +1,2 @@
+[build_ext]
+sip-opts = -e -g -w
\ No newline at end of file
diff --git a/src/sip/setup.py b/src/sip/setup.py
new file mode 100644
index 0000000..06ffc78
--- /dev/null
+++ b/src/sip/setup.py
@@ -0,0 +1,297 @@
+# ------------------------------------------------------------------------------
+# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+#
+# Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+# Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+#
+# Distributed under the terms of the GNU Lesser General Public License,
+# either version 3 of the License, or (at your option) any later version.
+# See LICENSE.txt for more info.
+# ------------------------------------------------------------------------------
+
+import os
+import sys
+import imp
+import struct
+import platform
+import subprocess
+
+from distutils.core import setup, Extension
+from distutils.unixccompiler import UnixCCompiler
+from distutils.version import StrictVersion as V
+
+import sipdistutils
+
+
+def abspath(*path):
+    """A method to determine absolute path for a given relative path to the
+    directory where this setup.py script is located"""
+    setup_dir = os.path.dirname(os.path.abspath(__file__))
+    return os.path.join(setup_dir, *path)
+
+
+def get_release_info():
+    import release
+    return release.Release
+
+
+def uniquify(seq):
+    no_dups = []
+    [ no_dups.append(i) for i in seq if not no_dups.count(i) ]
+    return no_dups
+
+
+class build_ext(sipdistutils.build_ext):
+
+    def build_extensions(self):
+        self.use_cpp_0x = False
+        if isinstance(self.compiler, UnixCCompiler):
+            compiler_pars = self.compiler.compiler_so
+            while '-Wstrict-prototypes' in compiler_pars:
+                del compiler_pars[compiler_pars.index('-Wstrict-prototypes')]
+            #self.compiler.compiler_so = " ".join(compiler_pars)
+
+            # mimic tango check to activate C++0x extension
+            compiler = self.compiler.compiler
+            pipe = subprocess.Popen(compiler + ["-dumpversion"], stdout=subprocess.PIPE).stdout
+            gcc_ver = pipe.readlines()[0].decode().strip()
+            if V(gcc_ver) >= V("4.3.3"):
+                self.use_cpp_0x = True
+        sipdistutils.build_ext.build_extensions(self)
+
+    def build_extension(self, ext):
+        if self.use_cpp_0x:
+            ext.extra_compile_args += ['-std=c++0x']
+            ext.define_macros += [ ('PYTANGO_HAS_UNIQUE_PTR', '1') ]
+        sipdistutils.build_ext.build_extension(self, ext)
+
+
+def main():
+    ZMQ_ROOT = LOG4TANGO_ROOT = OMNI_ROOT = TANGO_ROOT = '/usr'
+
+    TANGO_ROOT = os.environ.get('TANGO_ROOT', TANGO_ROOT)
+    OMNI_ROOT = os.environ.get('OMNI_ROOT', OMNI_ROOT)
+    LOG4TANGO_ROOT = os.environ.get('LOG4TANGO_ROOT', LOG4TANGO_ROOT)
+    ZMQ_ROOT = os.environ.get('ZMQ_ROOT', ZMQ_ROOT)
+
+    Release = get_release_info()
+
+    author = Release.authors['Coutinho']
+
+    please_debug = False
+
+    packages = [
+        'Tango',
+    ]
+
+    provides = [
+        'Tango',
+    ]
+
+    requires = [
+        'sip (>=4.10)',
+        'numpy (>=1.1)'
+    ]
+
+    classifiers = [
+        'Development Status :: 2 - Pre-Alpha',
+        'Environment :: Other Environment',
+        'Intended Audience :: Developers',
+        'License :: OSI Approved :: GNU Library or Lesser General Public License v3 (LGPLv3)',
+        'Natural Language :: English',
+        'Operating System :: Microsoft :: Windows',
+        'Operating System :: POSIX',
+        'Operating System :: POSIX :: Linux',
+        'Operating System :: Unix',
+        'Operating System :: MacOS',
+        'Programming Language :: C',
+        'Programming Language :: Python',
+        'Programming Language :: Python :: 3',
+        'Topic :: Scientific/Engineering',
+        'Topic :: Software Development :: Libraries',
+    ]
+
+    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
+    # include directories
+    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
+
+    include_dirs = [ ]
+
+    _tango_root_inc = os.path.join(TANGO_ROOT, 'include')
+    include_dirs.append(_tango_root_inc)
+
+    # $TANGO_ROOT/include/tango exists since tango 7.2.0
+    # we changed the PyTango code include statements from:
+    # #include <tango.h> to:
+    # #include <tango/tango.h>
+    # However tango itself complains that it doesn't know his own header files
+    # if we don't add the $TANGO_ROOT/include/tango directory to the path. So we do it
+    # here
+    _tango_root_inc = os.path.join(_tango_root_inc, 'tango')
+    if os.path.isdir(_tango_root_inc):
+        include_dirs.append(_tango_root_inc)
+
+    include_dirs.append(os.path.join(OMNI_ROOT, 'include'))
+    include_dirs.append(os.path.join(LOG4TANGO_ROOT, 'include'))
+
+    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
+    # library directories
+    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
+
+    libraries = [
+        'tango',
+        'log4tango',
+        'zmq',
+    ]
+
+    extra_compile_args = []
+
+    extra_link_args = []
+
+    macros = []
+
+    library_dirs = []
+    for f in (TANGO_ROOT, LOG4TANGO_ROOT, ZMQ_ROOT):
+        is64 = 8 * struct.calcsize("P") == 64
+        d = os.path.join(f, 'lib')
+        if is64:
+            d = os.path.join(f, 'lib64')
+            try:
+                if not os.stat(d): raise Exception('%s_doesnt_exist' % d)
+            except: d = os.path.join(f, 'lib')
+        library_dirs.append(d)
+
+    if os.name == 'nt':
+        include_dirs += [ ]
+
+        if please_debug:
+            libraries += [
+                #'libboost_python-vc80-mt-1_38', Boost in windows autodetects the
+                #proper library to link itself with...
+                'omniORB414d_rt',
+                'omniDynamic414d_rt',
+                'omnithread34d_rt',
+                'COS414d_rt',
+            ]
+            extra_compile_args += []
+            extra_link_args += ['/DEBUG']
+            macros += [ ('_DEBUG', None) ]
+        else:
+            libraries += [
+                #'libboost_python-vc80-mt-1_38', Boost in windows autodetects the
+                #proper library to link itself with...
+                'omniORB414_rt',
+                'omniDynamic414_rt',
+                'omnithread34_rt',
+                'COS414_rt',
+            ]
+
+        library_dirs += [ os.path.join(OMNI_ROOT, 'lib', 'x86_win32') ]
+
+        extra_compile_args += [
+            '/EHsc',
+            '/wd4005',  # supress redefinition of HAVE_STRFTIME between python and omniORB
+            '/wd4996',  # same as /D_SCL_SECURE_NO_WARNINGS
+            '/wd4250',  # supress base class inheritance warning
+        ]
+
+        extra_link_args += []
+
+        macros += [
+            #('_WINDOWS', None),
+            #('_USRDLL', None),
+            #('_TANGO_LIB', None),
+            #('JPG_USE_ASM', None),
+            ('LOG4TANGO_HAS_DLL', None),
+            ('TANGO_HAS_DLL', None),
+            ('WIN32', None),
+        ]
+
+    else:
+        if please_debug:
+            extra_compile_args += ['-g', '-O0']
+            extra_link_args += ['-g' , '-O0']
+
+        libraries += [
+            'pthread',
+            'rt',
+            'dl',
+            'omniORB4',
+            'omniDynamic4',
+            'omnithread',
+            'COS4',
+        ]
+
+        is64 = 8 * struct.calcsize("P") == 64
+        omni_lib = os.path.join(OMNI_ROOT, 'lib')
+        if is64:
+            omni_lib = os.path.join(OMNI_ROOT, 'lib64')
+            try:
+                if not os.stat(d): raise Exception('%s_doesnt_exist' % d)
+            except:
+                omni_lib = os.path.join(OMNI_ROOT, 'lib')
+        library_dirs += [ omni_lib ]
+
+
+        # Note for PyTango developers:
+        # Compilation time can be greatly reduced by compiling the file
+        # src/precompiled_header.hpp as src/precompiled_header.hpp.gch
+        # and then uncommenting this line. Someday maybe this will be
+        # automated...
+        extra_compile_args += [
+#            '-includesrc/precompiled_header.hpp',
+        ]
+
+        #if not please_debug:
+        #    extra_compile_args += [ '-g0' ]
+
+        extra_link_args += [
+            '-Wl,-h',
+            '-Wl,--strip-all',
+        ]
+
+        macros += []
+
+    include_dirs = uniquify(include_dirs)
+    library_dirs = uniquify(library_dirs)
+    src_dir = abspath('.')
+    _cppfiles = [ os.path.join(src_dir, fname) for fname in os.listdir(src_dir) if fname.endswith('.cpp') ]
+    _cppfiles.sort()
+    sources = ["Tango.sip"] + _cppfiles
+
+    cmdclass = {'build_ext': build_ext}
+
+    _tango = Extension(
+        name='Tango',
+        sources=sources,
+        include_dirs=include_dirs,
+        library_dirs=library_dirs,
+        libraries=libraries,
+        define_macros=macros,
+        extra_compile_args=extra_compile_args,
+        extra_link_args=extra_link_args,
+        language='c++',
+        depends=[])
+
+    dist = setup(
+        name='Tango',
+        version=Release.version,
+        description=Release.description,
+        long_description=Release.long_description,
+        author=author[0],
+        author_email=author[1],
+        url=Release.url,
+        download_url=Release.download_url,
+        platforms=Release.platform,
+        license=Release.license,
+        packages=packages,
+        package_dir={ 'Tango' : abspath(".") },
+        classifiers=classifiers,
+        provides=provides,
+        keywords=Release.keywords,
+        requires=requires,
+        ext_modules=[_tango],
+        cmdclass=cmdclass)
+
+if __name__ == "__main__":
+    main()
diff --git a/src/sip/stdutils.sip b/src/sip/std_utils.sip
similarity index 57%
rename from src/sip/stdutils.sip
rename to src/sip/std_utils.sip
index aec4e07..174f1bf 100644
--- a/src/sip/stdutils.sip
+++ b/src/sip/std_utils.sip
@@ -1,25 +1,13 @@
-/*******************************************************************************
-
-   This file is part of PyTango, a python binding for Tango
-
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
 
 %MappedType std::string
 {
@@ -39,9 +27,9 @@ if (sipIsErr == NULL)
 %ConvertFromTypeCode
 return PyString_FromStringAndSize(sipCpp->data(),sipCpp->length());
 %End
-
 };
 
+
 %MappedType std::vector<std::string>
 {
 %TypeHeaderCode
@@ -52,17 +40,17 @@ return PyString_FromStringAndSize(sipCpp->data(),sipCpp->length());
 %ConvertToTypeCode
 if (sipIsErr == NULL)
 {	
-bool aReturnFlag = PyList_Check(sipPy);
-for(int i = 0;aReturnFlag && i < PyList_Size(sipPy);++i)
-	aReturnFlag = PyString_Check(PyList_GET_ITEM(sipPy,i));
-return aReturnFlag;
+    bool aReturnFlag = PyList_Check(sipPy);
+    for(int i = 0;aReturnFlag && i < PyList_Size(sipPy);++i)
+        aReturnFlag = PyString_Check(PyList_GET_ITEM(sipPy,i));
+    return aReturnFlag;
 }
  
 *sipCppPtr = new std::vector<std::string>(PyList_Size(sipPy));
 for(int i = 0;i < PyList_Size(sipPy);++i)
-  (*sipCppPtr)->operator[](i) = PyString_AsString(PyList_GET_ITEM(sipPy,i));
+    (*sipCppPtr)->operator[](i) = PyString_AsString(PyList_GET_ITEM(sipPy,i));
 
-    return sipGetState(sipTransferObj);
+return sipGetState(sipTransferObj);
 %End
 
 %ConvertFromTypeCode
@@ -70,13 +58,13 @@ PyObject* aReturnListPt = PyList_New(sipCpp->size());
 std::vector<std::string>::iterator vIter = sipCpp->begin();
 
 for(int i = 0;vIter != sipCpp->end();++vIter,++i)
-   PyList_SET_ITEM(aReturnListPt,i,PyString_FromStringAndSize(vIter->data(),vIter->length()));
+    PyList_SET_ITEM(aReturnListPt,i,PyString_FromStringAndSize(vIter->data(),vIter->length()));
 
 return aReturnListPt;
 %End
-
 };
 
+
 %MappedType std::vector<int>
 {
 %TypeHeaderCode
diff --git a/src/sip/tango.sip b/src/sip/tango.sip
deleted file mode 100644
index 25d4a4b..0000000
--- a/src/sip/tango.sip
+++ /dev/null
@@ -1,31 +0,0 @@
-/*******************************************************************************
-
-   This file is part of PyTango, a python binding for Tango
-
-   http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-   Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-   
-   PyTango is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PyTango 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 Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser General Public License
-   along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-   
-*******************************************************************************/
-
-%Module(name=Tango, version=0801)
-
-%Include stdutils.sip
-%Include constants.sip
-%Include connection.sip
-%Include dbdatum.sip
-%Include database.sip
-%Include deviceproxy.sip
diff --git a/src/swig/Makefile b/src/swig/Makefile
new file mode 100644
index 0000000..6555b4a
--- /dev/null
+++ b/src/swig/Makefile
@@ -0,0 +1,106 @@
+
+# -----------------------------------------------------------------------------
+# Common stuff
+# -----------------------------------------------------------------------------
+COMMON_OUT = _common
+
+CSCC = cscc
+CC = c++
+LD = c++
+
+SRC = src
+SWIG = swig -c++
+
+INTERFACE_FILE=tango.i
+
+# -----------------------------------------------------------------------------
+# PERL stuff
+# -----------------------------------------------------------------------------
+PERL_FLAGS =$(shell perl -MConfig -e 'print join(" ", @Config{qw(ccflags optimize cccdlflags)}, "-I$$Config{archlib}/CORE")')
+PERL_LINK_FLAGS = $(shell perl -MConfig -e 'print $$Config{lddlflags}')
+PERL_OUT = _perl
+PERL_SWIG = $(SWIG) -perl5 -outdir $(PERL_OUT)
+PERL_CC = $(CC) $(PERL_FLAGS)
+PERL_LD = $(CC) $(PERL_LINK_FLAGS)
+
+# -----------------------------------------------------------------------------
+# Python stuff
+# -----------------------------------------------------------------------------
+PY_FLAGS = -g -fPIC -Wall $(shell python-config --includes) -std=c++0x
+PY_LINK_FLAGS = -ltango -llog4tango -lpthread -lrt -ldl -lomniORB4 -lomniDynamic4 -lomnithread -lCOS4 -lzmq
+PY_OUT = _python
+PY_SWIG = $(SWIG) -python -outdir $(PY_OUT)
+PY_CC = $(CC) $(PY_FLAGS)
+PY_LD = $(LD) $(PY_LINK_FLAGS) -shared
+
+# -----------------------------------------------------------------------------
+# C# stuff
+# -----------------------------------------------------------------------------
+CSHARP_FLAGS = -fPIC
+CSHARP_OUT = _csharp
+CSHARP_SWIG = $(SWIG) -csharp -outdir $(CSHARP_OUT)
+CSHARP_CC = $(CC) $(CSHARP_FLAGS)
+CSHARP_LD = $(CC) -shared
+
+# -----------------------------------------------------------------------------
+# TCL stuff
+# -----------------------------------------------------------------------------
+TCL_FLAGS = -I/usr/include/tcl -fPIC
+TCL_OUT = _tcl
+TCL_SWIG = $(SWIG) -tcl -outdir $(TCL_OUT)
+TCL_CC = $(CC) $(TCL_FLAGS)
+TCL_LD = $(LD) -shared
+
+# -----------------------------------------------------------------------------
+# GO stuff
+# -----------------------------------------------------------------------------
+GO_FLAGS = -fPIC
+GO_OUT = _go
+GO_SWIG = $(SWIG) -go -intgosize 32 -outdir $(GO_OUT)
+GO_CC = $(CC) $(GO_FLAGS)
+GO_LD = $(CC) -shared
+
+# -----------------------------------------------------------------------------
+# commands
+# -----------------------------------------------------------------------------
+
+all: perl python csharp tcl
+
+common:
+	mkdir -p $(COMMON_OUT)
+
+perl: common
+	mkdir -p $(PERL_OUT)
+	$(PERL_SWIG) -o $(PERL_OUT)/tango_wrap.cpp $(INTERFACE_FILE)
+	$(PERL_CC) -c $(PERL_OUT)/tango_wrap.cpp -o $(PERL_OUT)/tango_wrap.o
+	$(PERL_LD) $(COMMON_OUT)/tango_wrap.o -o $(PERL_OUT)/_Tango.so
+	
+python: common
+	mkdir -p $(PY_OUT)
+	$(PY_SWIG) -o $(PY_OUT)/tango_wrap.cpp $(INTERFACE_FILE)
+	$(PY_CC) -c $(PY_OUT)/tango_wrap.cpp -o $(PY_OUT)/tango_wrap.o
+	$(PY_LD) $(PY_OUT)/tango_wrap.o -o $(PY_OUT)/_Tango.so
+
+csharp: common
+	mkdir -p $(CSHARP_OUT)
+	$(CSHARP_SWIG) -o $(CSHARP_OUT)/example_wrap.c $(INTERFACE_FILE)
+	$(CSHARP_CC) -c $(CSHARP_OUT)/example_wrap.c -o $(CSHARP_OUT)/example_wrap.o
+	$(CSHARP_LD) $(COMMON_OUT)/example.o $(CSHARP_OUT)/example_wrap.o -o $(CSHARP_OUT)/libexample.so
+	
+tcl: common
+	mkdir -p $(TCL_OUT)
+	$(TCL_SWIG) -o $(TCL_OUT)/example_wrap.c $(INTERFACE_FILE)
+	$(TCL_CC) -c $(TCL_OUT)/example_wrap.c -o $(TCL_OUT)/example_wrap.o
+	$(TCL_LD) $(COMMON_OUT)/example.o $(TCL_OUT)/example_wrap.o -o $(TCL_OUT)/example.so
+
+go: common
+	mkdir -p $(GO_OUT)
+	$(GO_SWIG) -o $(GO_OUT)/example_wrap.c $(INTERFACE_FILE)
+	$(GO_CC) -c $(GO_OUT)/example_wrap.c -o $(GO_OUT)/example_wrap.o $(GO_FLAGS)
+	$(GO_LD) $(COMMON_OUT)/example.o $(GO_OUT)/example_wrap.o -o $(GO_OUT)/example.so
+	6g -o $(GO_OUT)/example.6 $(GO_OUT)/example.go
+	6c -I $(GOROOT)/pkg/linux_amd64 -o $(GO_OUT)/example_gc.6 $(GO_OUT)/example_gc.c
+	pack grc $(GO_OUT)/example.a $(GO_OUT)/example.6 $(GO_OUT)/example_gc.6
+
+clean:
+	rm -rf $(COMMON_OUT) $(PERL_OUT) $(PY_OUT) $(CSHARP_OUT) $(TCL_OUT) $(GO_OUT)
diff --git a/src/swig/deviceproxy.i b/src/swig/deviceproxy.i
new file mode 100644
index 0000000..357b25f
--- /dev/null
+++ b/src/swig/deviceproxy.i
@@ -0,0 +1,224 @@
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
+
+ %{
+ #include <tango.h>
+ %}
+
+namespace Tango
+{
+
+class DeviceProxy: public Connection
+{
+public:
+	%newobject black_box;
+	%newobject command_list_query;
+	%newobject get_attribute_list;
+	%newobject get_attribute_config;
+	%newobject get_attribute_ex;
+	%newobject attribute_list_query;
+	%newobject attribute_list_query_ex;
+	%newobject polling_status;
+
+	DeviceProxy();
+	DeviceProxy(std::string &name, CORBA::ORB *orb=NULL);
+	DeviceProxy(std::string &name, bool ch_access, CORBA::ORB *orb=NULL);
+	DeviceProxy(const char *, bool ch_access, CORBA::ORB *orb=NULL);
+	DeviceProxy(const char *, CORBA::ORB *orb=NULL);
+
+	DeviceProxy(const DeviceProxy &);
+	DeviceProxy & operator=(const DeviceProxy &);
+	virtual ~DeviceProxy();
+
+//
+// general methods
+//
+
+	virtual Tango::DeviceInfo const &info();
+	virtual inline std::string dev_name() { return device_name; }
+	virtual void parse_name(std::string &);
+	virtual Tango::Database *get_device_db();
+
+	virtual std::string status();
+	virtual Tango::DevState state();
+	virtual std::string adm_name();
+	virtual std::string description();
+	virtual std::string name();
+	virtual std::string alias();
+
+	int get_tango_lib_version();
+
+	virtual int ping();
+	virtual std::vector<std::string> *black_box(int);
+//
+// device methods
+//
+	virtual Tango::CommandInfo command_query(std::string);
+	virtual Tango::CommandInfoList *command_list_query();
+
+	virtual Tango::DbDevImportInfo import_info();
+//
+// property methods
+//
+	virtual void get_property(std::string&, Tango::DbData&);
+	virtual void get_property(std::vector<std::string>&, Tango::DbData&);
+	virtual void get_property(Tango::DbData&);
+	virtual void put_property(Tango::DbData&);
+	virtual void delete_property(std::string&);
+	virtual void delete_property(std::vector<std::string>&);
+	virtual void delete_property(Tango::DbData&);
+	virtual void get_property_list(const std::string &,std::vector<std::string> &);
+//
+// attribute methods
+//
+	virtual std::vector<std::string> *get_attribute_list(); /* MEMORY LEAK */
+
+	virtual Tango::AttributeInfoList *get_attribute_config(std::vector<std::string>&);
+	virtual Tango::AttributeInfoListEx *get_attribute_config_ex(std::vector<std::string>&);
+	virtual Tango::AttributeInfoEx get_attribute_config(const std::string &);
+
+	virtual Tango::AttributeInfoEx attribute_query(std::string name);
+	virtual Tango::AttributeInfoList *attribute_list_query();
+	virtual Tango::AttributeInfoListEx *attribute_list_query_ex();
+
+	virtual void set_attribute_config(Tango::AttributeInfoList &);
+	virtual void set_attribute_config(Tango::AttributeInfoListEx &);
+
+	virtual Tango::DeviceAttribute read_attribute(std::string&);
+	virtual Tango::DeviceAttribute read_attribute(const char *at);
+	void read_attribute(const char *, Tango::DeviceAttribute &);
+	void read_attribute(std::string &at, Tango::DeviceAttribute &da);
+	virtual std::vector<Tango::DeviceAttribute> *read_attributes(std::vector<std::string>&);
+
+	virtual void write_attribute(Tango::DeviceAttribute&);
+	virtual void write_attributes(std::vector<Tango::DeviceAttribute>&);
+
+	virtual Tango::DeviceAttribute write_read_attribute(Tango::DeviceAttribute &);
+
+//
+// history methods
+//
+	virtual std::vector<Tango::DeviceDataHistory> *command_history(std::string &,int);
+	virtual std::vector<Tango::DeviceDataHistory> *command_history(const char *na,int n);
+
+	virtual std::vector<Tango::DeviceAttributeHistory> *attribute_history(std::string &,int);
+	virtual std::vector<Tango::DeviceAttributeHistory> *attribute_history(const char *na,int n);
+//
+// Polling administration methods
+//
+	virtual std::vector<std::string> *polling_status();
+
+	virtual void poll_command(std::string &, int);
+	virtual void poll_command(const char *na, int per);
+	virtual void poll_attribute(std::string &, int);
+	virtual void poll_attribute(const char *na, int per);
+
+	virtual int get_command_poll_period(std::string &);
+	virtual int get_command_poll_period(const char *na)
+			{std::string tmp(na);return get_command_poll_period(tmp);}
+	virtual int get_attribute_poll_period(std::string &);
+	virtual int get_attribute_poll_period(const char *na)
+			{std::string tmp(na);return get_attribute_poll_period(tmp);}
+
+	virtual bool is_command_polled(std::string &);
+	virtual bool is_command_polled(const char *na);
+	virtual bool is_attribute_polled(std::string &);
+	virtual bool is_attribute_polled(const char *na);
+
+	virtual void stop_poll_command(std::string &);
+	virtual void stop_poll_command(const char *na);
+	virtual void stop_poll_attribute(std::string &);
+	virtual void stop_poll_attribute(const char *na);
+//
+// Asynchronous methods
+//
+	virtual long read_attribute_asynch(const char *na);
+	virtual long read_attribute_asynch(std::string &att_name);
+	virtual long read_attributes_asynch(std::vector <std::string> &);
+
+	virtual std::vector<Tango::DeviceAttribute> *read_attributes_reply(long);
+	virtual std::vector<Tango::DeviceAttribute> *read_attributes_reply(long,long);
+	virtual Tango::DeviceAttribute *read_attribute_reply(long);
+	virtual Tango::DeviceAttribute *read_attribute_reply(long,long);
+
+	virtual long write_attribute_asynch(Tango::DeviceAttribute &);
+	virtual long write_attributes_asynch(std::vector<Tango::DeviceAttribute> &);
+
+	virtual void write_attributes_reply(long);
+	virtual void write_attributes_reply(long,long);
+	virtual void write_attribute_reply(long id) {write_attributes_reply(id);}
+	virtual void write_attribute_reply(long to,long id) {write_attributes_reply(to,id);}
+
+	virtual long pending_asynch_call(Tango::asyn_req_type req)
+			{if (req == POLLING)return pasyn_ctr;
+			else if (req==CALL_BACK) return pasyn_cb_ctr;
+			else return (pasyn_ctr + pasyn_cb_ctr);}
+
+	virtual void read_attributes_asynch(std::vector<std::string> &, Tango::CallBack &);
+	virtual void read_attribute_asynch(const char *na, Tango::CallBack &cb);
+	virtual void read_attribute_asynch(std::string &, Tango::CallBack &);
+
+	virtual void write_attribute_asynch(Tango::DeviceAttribute &, Tango::CallBack &);
+	virtual void write_attributes_asynch(std::vector<Tango::DeviceAttribute> &, Tango::CallBack &);
+//
+// Logging administration methods
+//
+#ifdef TANGO_HAS_LOG4TANGO
+	virtual void add_logging_target(const std::string &target_type_name);
+	virtual void add_logging_target(const char *target_type_name)
+			{add_logging_target(std::string(target_type_name));}
+
+	virtual void remove_logging_target(const std::string &target_type_name);
+	virtual void remove_logging_target(const char *target_type_name)
+			{remove_logging_target(std::string(target_type_name));}
+
+	virtual std::vector<std::string> get_logging_target (void);
+	virtual int get_logging_level (void);
+	virtual void set_logging_level (int level);
+#endif // TANGO_HAS_LOG4TANGO
+//
+// Event methods
+//
+	virtual int subscribe_event(const std::string &attr_name, Tango::EventType event, Tango::CallBack *,
+	                   const std::vector<std::string> &filters);  // For compatibility with Tango < 8
+	virtual int subscribe_event(const std::string &attr_name, Tango::EventType event, Tango::CallBack *,
+	                   const std::vector<std::string> &filters, bool stateless); // For compatibility with Tango < 8
+	virtual int subscribe_event(const std::string &attr_name, Tango::EventType event, int event_queue_size,
+	                   const std::vector<std::string> &filters, bool stateless = false); // For compatibility with Tango < 8
+
+	virtual int subscribe_event(const std::string &attr_name, Tango::EventType event, Tango::CallBack *);
+	virtual int subscribe_event(const std::string &attr_name, Tango::EventType event, Tango::CallBack *,bool stateless);
+	virtual int subscribe_event(const std::string &attr_name, Tango::EventType event, int event_queue_size,bool stateless = false);
+
+	virtual void unsubscribe_event(int event_id);
+//
+// Methods to access data in event queues
+//
+	virtual void get_events (int event_id, Tango::EventDataList &event_list);
+	virtual void get_events (int event_id, Tango::AttrConfEventDataList &event_list);
+	virtual void get_events (int event_id, Tango::DataReadyEventDataList &event_list);
+	virtual void get_events (int event_id, Tango::CallBack *cb);
+	virtual int  event_queue_size(int event_id);
+	virtual Tango::TimeVal get_last_event_date(int event_id);
+	virtual bool is_event_queue_empty(int event_id);
+
+//
+// Locking methods
+//
+	virtual void lock(int lock_validity=DEFAULT_LOCK_VALIDITY);
+	virtual void unlock(bool force=false);
+	virtual std::string locking_status();
+	virtual bool is_locked();
+	virtual bool is_locked_by_me();
+	virtual bool get_locker(Tango::LockerInfo &);
+};
+
+}
\ No newline at end of file
diff --git a/src/swig/tango.i b/src/swig/tango.i
new file mode 100644
index 0000000..8e8b50e
--- /dev/null
+++ b/src/swig/tango.i
@@ -0,0 +1,21 @@
+/******************************************************************************
+  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+
+  Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+  Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+
+  Distributed under the terms of the GNU Lesser General Public License,
+  either version 3 of the License, or (at your option) any later version.
+  See LICENSE.txt for more info.
+******************************************************************************/
+
+%module Tango
+
+%include "std_string.i"
+%include "std_vector.i"
+
+namespace std {
+   %template(vector_string) vector<string>;
+};
+
+%include "deviceproxy.i"
\ No newline at end of file
diff --git a/win/PyTango_VS10/PyTango.props b/win/PyTango_VS10/PyTango.props
index 4adfc86..5b64e88 100755
--- a/win/PyTango_VS10/PyTango.props
+++ b/win/PyTango_VS10/PyTango.props
@@ -3,9 +3,14 @@
   <PropertyGroup Label="UserMacros">
     <PyTangoBaseFile>_PyTango</PyTangoBaseFile>
     <TangoMajorVer>8</TangoMajorVer>
-    <TangoMinorVer>0</TangoMinorVer>
-    <TangoPatchVer>5</TangoPatchVer>
+    <TangoMinorVer>1</TangoMinorVer>
+    <TangoPatchVer>2</TangoPatchVer>
     <TangoVer>$(TangoMajorVer).$(TangoMinorVer).$(TangoPatchVer)</TangoVer>
+    <PyTangoMajorVer>8</PyTangoMajorVer>
+    <PyTangoMinorVer>1</PyTangoMinorVer>
+    <PyTangoPatchVer>1</PyTangoPatchVer>
+    <PyTangoVer>$(PyTangoMajorVer).$(PyTangoMinorVer).$(PyTangoPatchVer)</PyTangoVer>
+
     <BoostMajorVer>1</BoostMajorVer>
     <BoostMinorVer>53</BoostMinorVer>
     <BoostPatchVer>0</BoostPatchVer>
@@ -25,7 +30,7 @@
     <PyTangoCompileOptions>-Zm200 /MP2 /bigobj</PyTangoCompileOptions>
     <BaseDir>$(ProjectDir)..\..</BaseDir>
     <RelPrefixDir>$(Configuration)_$(Platform)_msvc$(VCVer)</RelPrefixDir>
-    <BaseBuildDir>c:\temp\pytango\build</BaseBuildDir>
+    <BaseBuildDir>c:\temp\pytango\build_$(PyTangoVer)_tg$(TangoVer)_boost$(BoostVer)</BaseBuildDir>
     <BaseBuildLibDir>$(BaseBuildDir)\lib</BaseBuildLibDir>
     <BaseTempDir>$(BaseBuildDir)\temp</BaseTempDir>
     <BaseDistDir>$(BaseBuildDir)\dist</BaseDistDir>
diff --git a/win/PyTango_VS10/PyTango.sln b/win/PyTango_VS10/PyTango.sln
index fd1541f..7d9e6ac 100755
--- a/win/PyTango_VS10/PyTango.sln
+++ b/win/PyTango_VS10/PyTango.sln
@@ -15,16 +15,16 @@ Global
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
 		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py33_bopyshared_tangoshared_release|Win32.ActiveCfg = py33_bopyshared_tangoshared_release|Win32
 		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py33_bopyshared_tangoshared_release|Win32.Build.0 = py33_bopyshared_tangoshared_release|Win32
-		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py33_bopyshared_tangoshared_release|x64.ActiveCfg = py33_bopyshared_tangoshared_release|Win32
-		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py33_bopyshared_tangoshared_release|x64.Build.0 = py33_bopyshared_tangoshared_release|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py33_bopyshared_tangoshared_release|x64.ActiveCfg = py33_bopyshared_tangoshared_release|x64
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py33_bopyshared_tangoshared_release|x64.Build.0 = py33_bopyshared_tangoshared_release|x64
 		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py33_bopystatic_tangoshared_release|Win32.ActiveCfg = py33_bopystatic_tangoshared_release|Win32
 		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py33_bopystatic_tangoshared_release|Win32.Build.0 = py33_bopystatic_tangoshared_release|Win32
-		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py33_bopystatic_tangoshared_release|x64.ActiveCfg = py33_bopystatic_tangoshared_release|Win32
-		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py33_bopystatic_tangoshared_release|x64.Build.0 = py33_bopystatic_tangoshared_release|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py33_bopystatic_tangoshared_release|x64.ActiveCfg = py33_bopystatic_tangoshared_release|x64
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py33_bopystatic_tangoshared_release|x64.Build.0 = py33_bopystatic_tangoshared_release|x64
 		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py33_bopystatic_tangostatic_release|Win32.ActiveCfg = py33_bopystatic_tangostatic_release|Win32
 		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py33_bopystatic_tangostatic_release|Win32.Build.0 = py33_bopystatic_tangostatic_release|Win32
-		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py33_bopystatic_tangostatic_release|x64.ActiveCfg = py33_bopystatic_tangostatic_release|Win32
-		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py33_bopystatic_tangostatic_release|x64.Build.0 = py33_bopystatic_tangostatic_release|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py33_bopystatic_tangostatic_release|x64.ActiveCfg = py33_bopystatic_tangostatic_release|x64
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py33_bopystatic_tangostatic_release|x64.Build.0 = py33_bopystatic_tangostatic_release|x64
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
diff --git a/win/PyTango_VS9/PyTango.sln b/win/PyTango_VS9/PyTango.sln
index d4c1f67..c344d2b 100644
--- a/win/PyTango_VS9/PyTango.sln
+++ b/win/PyTango_VS9/PyTango.sln
@@ -39,64 +39,64 @@ Global
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
 		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py26_bopyshared_tangoshared_release|Win32.ActiveCfg = py26_bopyshared_tangoshared_release|Win32
 		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py26_bopyshared_tangoshared_release|Win32.Build.0 = py26_bopyshared_tangoshared_release|Win32
-		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py26_bopyshared_tangoshared_release|x64.ActiveCfg = py26_bopyshared_tangoshared_release|Win32
-		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py26_bopyshared_tangoshared_release|x64.Build.0 = py26_bopyshared_tangoshared_release|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py26_bopyshared_tangoshared_release|x64.ActiveCfg = py26_bopyshared_tangoshared_release|x64
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py26_bopyshared_tangoshared_release|x64.Build.0 = py26_bopyshared_tangoshared_release|x64
 		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py26_bopystatic_tangoshared_release|Win32.ActiveCfg = py26_bopystatic_tangoshared_release|Win32
 		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py26_bopystatic_tangoshared_release|Win32.Build.0 = py26_bopystatic_tangoshared_release|Win32
-		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py26_bopystatic_tangoshared_release|x64.ActiveCfg = py26_bopystatic_tangoshared_release|Win32
-		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py26_bopystatic_tangoshared_release|x64.Build.0 = py26_bopystatic_tangoshared_release|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py26_bopystatic_tangoshared_release|x64.ActiveCfg = py26_bopystatic_tangoshared_release|x64
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py26_bopystatic_tangoshared_release|x64.Build.0 = py26_bopystatic_tangoshared_release|x64
 		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py26_bopystatic_tangostatic_release|Win32.ActiveCfg = py26_bopystatic_tangostatic_release|Win32
 		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py26_bopystatic_tangostatic_release|Win32.Build.0 = py26_bopystatic_tangostatic_release|Win32
-		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py26_bopystatic_tangostatic_release|x64.ActiveCfg = py26_bopystatic_tangostatic_release|Win32
-		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py26_bopystatic_tangostatic_release|x64.Build.0 = py26_bopystatic_tangostatic_release|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py26_bopystatic_tangostatic_release|x64.ActiveCfg = py26_bopystatic_tangostatic_release|x64
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py26_bopystatic_tangostatic_release|x64.Build.0 = py26_bopystatic_tangostatic_release|x64
 		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py27_bopyshared_tangoshared_release|Win32.ActiveCfg = py27_bopyshared_tangoshared_release|Win32
 		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py27_bopyshared_tangoshared_release|Win32.Build.0 = py27_bopyshared_tangoshared_release|Win32
-		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py27_bopyshared_tangoshared_release|x64.ActiveCfg = py27_bopyshared_tangoshared_release|Win32
-		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py27_bopyshared_tangoshared_release|x64.Build.0 = py27_bopyshared_tangoshared_release|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py27_bopyshared_tangoshared_release|x64.ActiveCfg = py27_bopyshared_tangoshared_release|x64
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py27_bopyshared_tangoshared_release|x64.Build.0 = py27_bopyshared_tangoshared_release|x64
 		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py27_bopystatic_tangoshared_release|Win32.ActiveCfg = py27_bopystatic_tangoshared_release|Win32
 		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py27_bopystatic_tangoshared_release|Win32.Build.0 = py27_bopystatic_tangoshared_release|Win32
-		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py27_bopystatic_tangoshared_release|x64.ActiveCfg = py27_bopystatic_tangoshared_release|Win32
-		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py27_bopystatic_tangoshared_release|x64.Build.0 = py27_bopystatic_tangoshared_release|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py27_bopystatic_tangoshared_release|x64.ActiveCfg = py27_bopystatic_tangoshared_release|x64
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py27_bopystatic_tangoshared_release|x64.Build.0 = py27_bopystatic_tangoshared_release|x64
 		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py27_bopystatic_tangostatic_release|Win32.ActiveCfg = py27_bopystatic_tangostatic_release|Win32
 		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py27_bopystatic_tangostatic_release|Win32.Build.0 = py27_bopystatic_tangostatic_release|Win32
-		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py27_bopystatic_tangostatic_release|x64.ActiveCfg = py27_bopystatic_tangostatic_release|Win32
-		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py27_bopystatic_tangostatic_release|x64.Build.0 = py27_bopystatic_tangostatic_release|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py27_bopystatic_tangostatic_release|x64.ActiveCfg = py27_bopystatic_tangostatic_release|x64
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py27_bopystatic_tangostatic_release|x64.Build.0 = py27_bopystatic_tangostatic_release|x64
 		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py31_bopyshared_tangoshared_release|Win32.ActiveCfg = py31_bopyshared_tangoshared_release|Win32
 		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py31_bopyshared_tangoshared_release|Win32.Build.0 = py31_bopyshared_tangoshared_release|Win32
-		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py31_bopyshared_tangoshared_release|x64.ActiveCfg = py31_bopyshared_tangoshared_release|Win32
-		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py31_bopyshared_tangoshared_release|x64.Build.0 = py31_bopyshared_tangoshared_release|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py31_bopyshared_tangoshared_release|x64.ActiveCfg = py31_bopyshared_tangoshared_release|x64
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py31_bopyshared_tangoshared_release|x64.Build.0 = py31_bopyshared_tangoshared_release|x64
 		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py31_bopystatic_tangoshared_release|Win32.ActiveCfg = py31_bopystatic_tangoshared_release|Win32
 		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py31_bopystatic_tangoshared_release|Win32.Build.0 = py31_bopystatic_tangoshared_release|Win32
-		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py31_bopystatic_tangoshared_release|x64.ActiveCfg = py31_bopystatic_tangoshared_release|Win32
-		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py31_bopystatic_tangoshared_release|x64.Build.0 = py31_bopystatic_tangoshared_release|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py31_bopystatic_tangoshared_release|x64.ActiveCfg = py31_bopystatic_tangoshared_release|x64
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py31_bopystatic_tangoshared_release|x64.Build.0 = py31_bopystatic_tangoshared_release|x64
 		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py31_bopystatic_tangostatic_release|Win32.ActiveCfg = py31_bopystatic_tangostatic_release|Win32
 		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py31_bopystatic_tangostatic_release|Win32.Build.0 = py31_bopystatic_tangostatic_release|Win32
-		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py31_bopystatic_tangostatic_release|x64.ActiveCfg = py31_bopystatic_tangostatic_release|Win32
-		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py31_bopystatic_tangostatic_release|x64.Build.0 = py31_bopystatic_tangostatic_release|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py31_bopystatic_tangostatic_release|x64.ActiveCfg = py31_bopystatic_tangostatic_release|x64
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py31_bopystatic_tangostatic_release|x64.Build.0 = py31_bopystatic_tangostatic_release|x64
 		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py32_bopyshared_tangoshared_release|Win32.ActiveCfg = py32_bopyshared_tangoshared_release|Win32
 		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py32_bopyshared_tangoshared_release|Win32.Build.0 = py32_bopyshared_tangoshared_release|Win32
-		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py32_bopyshared_tangoshared_release|x64.ActiveCfg = py32_bopyshared_tangoshared_release|Win32
-		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py32_bopyshared_tangoshared_release|x64.Build.0 = py32_bopyshared_tangoshared_release|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py32_bopyshared_tangoshared_release|x64.ActiveCfg = py32_bopyshared_tangoshared_release|x64
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py32_bopyshared_tangoshared_release|x64.Build.0 = py32_bopyshared_tangoshared_release|x64
 		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py32_bopystatic_tangoshared_release|Win32.ActiveCfg = py32_bopystatic_tangoshared_release|Win32
 		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py32_bopystatic_tangoshared_release|Win32.Build.0 = py32_bopystatic_tangoshared_release|Win32
-		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py32_bopystatic_tangoshared_release|x64.ActiveCfg = py32_bopystatic_tangoshared_release|Win32
-		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py32_bopystatic_tangoshared_release|x64.Build.0 = py32_bopystatic_tangoshared_release|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py32_bopystatic_tangoshared_release|x64.ActiveCfg = py32_bopystatic_tangoshared_release|x64
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py32_bopystatic_tangoshared_release|x64.Build.0 = py32_bopystatic_tangoshared_release|x64
 		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py32_bopystatic_tangostatic_release|Win32.ActiveCfg = py32_bopystatic_tangostatic_release|Win32
 		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py32_bopystatic_tangostatic_release|Win32.Build.0 = py32_bopystatic_tangostatic_release|Win32
-		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py32_bopystatic_tangostatic_release|x64.ActiveCfg = py32_bopystatic_tangostatic_release|Win32
-		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py32_bopystatic_tangostatic_release|x64.Build.0 = py32_bopystatic_tangostatic_release|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py32_bopystatic_tangostatic_release|x64.ActiveCfg = py32_bopystatic_tangostatic_release|x64
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py32_bopystatic_tangostatic_release|x64.Build.0 = py32_bopystatic_tangostatic_release|x64
 		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py33_bopyshared_tangoshared_release|Win32.ActiveCfg = py33_bopyshared_tangoshared_release|Win32
 		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py33_bopyshared_tangoshared_release|Win32.Build.0 = py33_bopyshared_tangoshared_release|Win32
-		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py33_bopyshared_tangoshared_release|x64.ActiveCfg = py33_bopyshared_tangoshared_release|Win32
-		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py33_bopyshared_tangoshared_release|x64.Build.0 = py33_bopyshared_tangoshared_release|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py33_bopyshared_tangoshared_release|x64.ActiveCfg = py33_bopyshared_tangoshared_release|x64
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py33_bopyshared_tangoshared_release|x64.Build.0 = py33_bopyshared_tangoshared_release|x64
 		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py33_bopystatic_tangoshared_release|Win32.ActiveCfg = py33_bopystatic_tangoshared_release|Win32
 		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py33_bopystatic_tangoshared_release|Win32.Build.0 = py33_bopystatic_tangoshared_release|Win32
-		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py33_bopystatic_tangoshared_release|x64.ActiveCfg = py33_bopystatic_tangoshared_release|Win32
-		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py33_bopystatic_tangoshared_release|x64.Build.0 = py33_bopystatic_tangoshared_release|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py33_bopystatic_tangoshared_release|x64.ActiveCfg = py33_bopystatic_tangoshared_release|x64
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py33_bopystatic_tangoshared_release|x64.Build.0 = py33_bopystatic_tangoshared_release|x64
 		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py33_bopystatic_tangostatic_release|Win32.ActiveCfg = py33_bopystatic_tangostatic_release|Win32
 		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py33_bopystatic_tangostatic_release|Win32.Build.0 = py33_bopystatic_tangostatic_release|Win32
-		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py33_bopystatic_tangostatic_release|x64.ActiveCfg = py33_bopystatic_tangostatic_release|Win32
-		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py33_bopystatic_tangostatic_release|x64.Build.0 = py33_bopystatic_tangostatic_release|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py33_bopystatic_tangostatic_release|x64.ActiveCfg = py33_bopystatic_tangostatic_release|x64
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py33_bopystatic_tangostatic_release|x64.Build.0 = py33_bopystatic_tangostatic_release|x64
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
diff --git a/win/PyTango_VS9/PyTango.vcproj b/win/PyTango_VS9/PyTango.vcproj
index d3ebad3..7cde0e2 100644
--- a/win/PyTango_VS9/PyTango.vcproj
+++ b/win/PyTango_VS9/PyTango.vcproj
@@ -809,6 +809,7 @@
 				Name="VCLinkerTool"
 				AdditionalDependencies="$(PyTango27StaticLibs)"
 				AdditionalLibraryDirectories="$(Py27BoostStaticTangoStaticLibDir)"
+				IgnoreDefaultLibraryNames=""
 				LinkTimeCodeGeneration="1"
 				TargetMachine="17"
 			/>
diff --git a/win/PyTango_VS9/PyTango.vsprops b/win/PyTango_VS9/PyTango.vsprops
index ab4fed2..f4b1f69 100644
--- a/win/PyTango_VS9/PyTango.vsprops
+++ b/win/PyTango_VS9/PyTango.vsprops
@@ -93,10 +93,15 @@
     <UserMacro Name="PyTangoBaseFile" Value="_PyTango" />
 
     <UserMacro Name="TangoMajorVer" Value="8" />
-    <UserMacro Name="TangoMinorVer" Value="0" />
-    <UserMacro Name="TangoPatchVer" Value="5" />
+    <UserMacro Name="TangoMinorVer" Value="1" />
+    <UserMacro Name="TangoPatchVer" Value="2" />
     <UserMacro Name="TangoVer" Value="$(TangoMajorVer).$(TangoMinorVer).$(TangoPatchVer)" />
 
+    <UserMacro Name="PyTangoMajorVer" Value="8" />
+    <UserMacro Name="PyTangoMinorVer" Value="1" />
+    <UserMacro Name="PyTangoPatchVer" Value="1" />
+    <UserMacro Name="PyTangoVer" Value="$(PyTangoMajorVer).$(PyTangoMinorVer).$(PyTangoPatchVer)" />
+
     <UserMacro Name="BoostMajorVer" Value="1" />
     <UserMacro Name="BoostMinorVer" Value="53" />
     <UserMacro Name="BoostPatchVer" Value="0" />
@@ -126,7 +131,7 @@
     <UserMacro Name="BaseDir" Value="$(ProjectDir)..\.." />
     <UserMacro Name="RelPrefixDir" Value="$(ConfigurationName)_$(PlatformName)_msvc$(VCVer)" />
 
-    <UserMacro Name="BaseBuildDir" Value="c:\temp\pytango\build" />
+    <UserMacro Name="BaseBuildDir" Value="c:\temp\pytango\build_$(PyTangoVer)_tg$(TangoVer)_boost$(BoostVer)" />
     <UserMacro Name="BaseBuildLibDir" Value="$(BaseBuildDir)\lib" />
     <UserMacro Name="BaseTempDir" Value="$(BaseBuildDir)\temp" />
     <UserMacro Name="BaseDistDir" Value="$(BaseBuildDir)\dist" />
diff --git a/winsetup.py b/winsetup.py
index 941e7cb..30ac42f 100644
--- a/winsetup.py
+++ b/winsetup.py
@@ -1,34 +1,21 @@
 #!/usr/bin/env python
+# ------------------------------------------------------------------------------
+# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+#
+# Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+# Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+#
+# Distributed under the terms of the GNU Lesser General Public License,
+# either version 3 of the License, or (at your option) any later version.
+# See LICENSE.txt for more info.
+# ------------------------------------------------------------------------------
 
-################################################################################
-##
-## This file is part of PyTango, a python binding for Tango
-## 
-## http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## PyTango is free software: you can redistribute it and/or modify
-## it under the terms of the GNU Lesser General Public License as published by
-## the Free Software Foundation, either version 3 of the License, or
-## (at your option) any later version.
-## 
-## PyTango 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 Lesser General Public License for more details.
-## 
-## You should have received a copy of the GNU Lesser General Public License
-## along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
-##
-################################################################################
-
-################################################################################
-# WARNING: This script should only be executed as a Post-Build Event from inside
-#          Microsoft Visual Studio and not from the command line
-################################################################################
+# ------------------------------------------------------------------------------
+# WARNING: This script should only be executed as a Post-Build Event from inside
+#          Microsoft Visual Studio and not from the command line
+# ------------------------------------------------------------------------------
 
-from __future__ import print_function
+from __future__ import print_function
 
 import sys
 import os
@@ -42,8 +29,8 @@ def main():
     winsetup_dir = osp.dirname(osp.abspath(__file__))
     os.chdir(winsetup_dir)
     setup_name = "setup.py"
-    bitmap = osp.join(winsetup_dir, 'doc', 'logo-medium.bmp')
-    ver = ".".join(map(str, sys.version_info[:2]))
+    bitmap = osp.join(winsetup_dir, 'doc', 'logo-medium.bmp')
+    ver = ".".join(map(str, sys.version_info[:2]))
 
     if len(sys.argv) < 6:
         print("Need to supply build directory, distribution directory, temporary binary install directory, configuration name and platform name")
@@ -53,6 +40,8 @@ def main():
     config_name, plat_name = sys.argv[4:6]
 #    temp_base_dir = osp.abspath(os.environ["TEMP"])
 #    temp_dir = osp.join(temp_base_dir, "PyTango", config_name)
+    if plat_name == 'x64':
+        plat_name = 'win-amd64'
 
     try:
         cmd_line =  '%s %s ' % (executable, setup_name)
@@ -66,15 +55,13 @@ def main():
         cmd_line += 'bdist_msi --skip-build --target-version=%s ' \
                     '--bdist-dir=%s ' \
                     '--dist-dir=%s ' \
-                    '--plat-name=%s ' \
-                    '--install-script=winpostinstall.py ' % (ver, bdist_dir, dist_dir, plat_name)
+                    '--plat-name=%s ' % (ver, bdist_dir, dist_dir, plat_name)
         cmd_line += 'bdist_wininst --skip-build --target-version=%s ' \
                     '--bdist-dir=%s ' \
                     '--dist-dir=%s ' \
                     '--title="PyTango 8" ' \
                     '--bitmap="%s" ' \
-                    '--plat-name=%s ' \
-                    '--install-script=winpostinstall.py ' % (ver, bdist_dir, dist_dir, bitmap, plat_name)
+                    '--plat-name=%s ' % (ver, bdist_dir, dist_dir, bitmap, plat_name)
         os.system(cmd_line)
     except:
         print("Failed:")
@@ -88,4 +75,4 @@ def main():
 
 if __name__ == "__main__":
     ret = main()
-    sys.exit(ret)
\ No newline at end of file
+    sys.exit(ret)

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/pytango.git



More information about the debian-science-commits mailing list