[pytango] 01/05: Import Upstream version 9.2.0

Frédéric-Emmanuel Picca picca at moszumanska.debian.org
Sun Sep 4 16:31:03 UTC 2016


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

picca pushed a commit to branch master
in repository pytango.

commit a7434436eddcd651a1cd2c7db72e4543495998a8
Author: Picca Frédéric-Emmanuel <picca at debian.org>
Date:   Sun Sep 4 09:01:38 2016 +0200

    Import Upstream version 9.2.0
---
 .gitignore                                         |   51 +
 IPython/Extensions/ipy_profile_tango.py            |   26 -
 IPython/config/profile/tango/ipython_config.py     |   22 -
 MANIFEST.in                                        |   12 +
 Makefile                                           |  318 ++
 PKG-INFO                                           |   30 -
 PyTango.py                                         |   50 +
 README.rst                                         |  117 +
 cPyTango/__init__.py                               |   24 -
 cPyTango/cPyTango.py                               |  895 -----
 cPyTango/enumeration.py                            |  109 -
 ci/ALBA/build.sh                                   |  105 +
 ci/ALBA/ct32suse11                                 |    4 +
 ci/ALBA/ct64suse11                                 |    4 +
 ci/ALBA/ct64suse121                                |    4 +
 ci/ESRF/build.sh                                   |  109 +
 ci/ESRF/ct32redhate4                               |    7 +
 ci/ESRF/ct32windows7                               |    5 +
 ci/ESRF/ct64debian6                                |    7 +
 ci/ESRF/ct64debian7                                |    8 +
 ci/ESRF/ct64redhate5                               |    7 +
 ci/README                                          |   48 +
 ci/build.sh                                        |   20 +
 doc/_static/PowerSupplyDS.py                       |   13 +-
 doc/_static/boost_python_install.py                |    2 +-
 doc/_static/itango.ico                             |  Bin 16446 -> 0 bytes
 doc/_static/itango.png                             |  Bin 15517 -> 0 bytes
 doc/_static/itango01.png                           |  Bin 66682 -> 0 bytes
 doc/_static/itango02.png                           |  Bin 55182 -> 0 bytes
 doc/_static/itango03.png                           |  Bin 17471 -> 0 bytes
 doc/_static/itango04.png                           |  Bin 87205 -> 0 bytes
 doc/_static/itango05.png                           |  Bin 2885381 -> 0 bytes
 doc/_static/itango06.png                           |  Bin 137259 -> 0 bytes
 doc/_static/{default.css => pytango.css}           |   44 +-
 doc/_templates/index.html                          |   10 +-
 doc/_templates/indexsidebar.html                   |   18 +-
 doc/_templates/layout.html                         |    2 +-
 doc/api.rst                                        |    4 +-
 doc/client_api/attribute_proxy.rst                 |    4 +-
 doc/client_api/device_proxy.rst                    |    4 +-
 doc/client_api/green.rst                           |   17 +-
 doc/client_api/group.rst                           |   16 +-
 doc/client_api/miscellaneous.rst                   |    2 +-
 doc/client_api/other.rst                           |   54 +-
 doc/conf.py                                        |   79 +-
 doc/contents.rst                                   |    2 +-
 doc/data_types.rst                                 |  127 +-
 doc/database.rst                                   |   18 +-
 doc/encoded.rst                                    |    4 +-
 doc/environment.yml                                |    6 +
 doc/exception.rst                                  |  234 +-
 doc/faq.rst                                        |  259 +-
 doc/green.rst                                      |  101 +-
 doc/howto.rst                                      |  385 +-
 doc/itango.rst                                     |  706 +---
 doc/mock_tango_extension.py                        |  100 +
 doc/quicktour.rst                                  |  102 +-
 doc/revision.rst                                   |   69 +-
 doc/server_api/attribute.rst                       |   12 +-
 doc/server_api/device.rst                          |   12 +-
 doc/server_api/device_class.rst                    |    4 +-
 doc/server_api/index.rst                           |    2 +-
 doc/server_api/logging.rst                         |   14 +-
 doc/server_api/server.rst                          |   42 +-
 doc/server_api/util.rst                            |    4 +-
 doc/sphinxext/ipython_console_highlighting.py      |  125 -
 doc/sphinxext/tango_console_highlighting.py        |  139 -
 doc/start.rst                                      |   76 +-
 doc/tep.rst                                        |    2 +-
 doc/tep/tep-0001.rst                               |   48 +-
 doc/tep/tep-0002.rst                               |    4 +-
 doc/utilities.rst                                  |   44 +-
 examples/Clock/Clock.py                            |   21 +
 examples/Clock/ClockDS.py                          |   60 +
 examples/Clock/client.py                           |   36 +
 examples/TuringMachine/TuringMachine.py            |   69 +
 examples/TuringMachine/turing_client.py            |   18 +
 .../dynamic/common}/__init__.py                    |    0
 examples/dynamic/common/roi.py                     |   13 +
 examples/dynamic/dynamic_client.py                 |   23 +
 examples/dynamic/dynamic_server.py                 |   44 +
 examples/many/many_client.py                       |   17 +
 examples/many/many_server.py                       |   36 +
 examples/multi/multi_client.py                     |   24 +
 examples/multi/multi_server.py                     |   47 +
 .../simple/common}/__init__.py                     |    0
 examples/simple/common/roi.py                      |   13 +
 examples/simple/simple_client.py                   |   23 +
 examples/simple/simple_server.py                   |   45 +
 {src/boost/cpp => ext}/api_util.cpp                |    2 +-
 {src/boost/cpp => ext}/archive_event_info.cpp      |    2 +-
 {src/boost/cpp => ext}/attr_conf_event_data.cpp    |    2 +-
 {src/boost/cpp => ext}/attribute_alarm_info.cpp    |    2 +-
 {src/boost/cpp => ext}/attribute_dimension.cpp     |    2 +-
 {src/boost/cpp => ext}/attribute_event_info.cpp    |    2 +-
 {src/boost/cpp => ext}/attribute_info.cpp          |    2 +-
 {src/boost/cpp => ext}/attribute_info_ex.cpp       |    5 +-
 {src/boost/cpp => ext}/attribute_proxy.cpp         |    2 +-
 {src/boost/cpp => ext}/base_types.cpp              |   29 +-
 {src/boost/cpp => ext}/base_types_numpy.hpp        |    2 +-
 {src/boost/cpp => ext}/callback.cpp                |    6 +-
 {src/boost/cpp => ext}/callback.h                  |    2 +-
 {src/boost/cpp => ext}/change_event_info.cpp       |    2 +-
 {src/boost/cpp => ext}/command_info.cpp            |    2 +-
 {src/boost/cpp => ext}/connection.cpp              |    2 +-
 ext/constants.cpp                                  |  341 ++
 {src/boost/cpp => ext}/data_ready_event_data.cpp   |    2 +-
 {src/boost/cpp => ext}/database.cpp                |    2 +-
 {src/boost/cpp => ext}/db.cpp                      |    2 +-
 {src/boost/cpp => ext}/defs.h                      |    5 +-
 {src/boost/cpp => ext}/dev_command_info.cpp        |    2 +-
 {src/boost/cpp => ext}/dev_error.cpp               |    2 +-
 {src/boost/cpp => ext}/device_attribute.cpp        |   40 +-
 {src/boost/cpp => ext}/device_attribute.h          |    2 +-
 {src/boost/cpp => ext}/device_attribute_config.cpp |    2 +-
 .../boost/cpp => ext}/device_attribute_history.cpp |    2 +-
 {src/boost/cpp => ext}/device_attribute_numpy.hpp  |    8 +-
 {src/boost/cpp => ext}/device_data.cpp             |   25 +-
 {src/boost/cpp => ext}/device_data_history.cpp     |    2 +-
 {src/boost/cpp => ext}/device_info.cpp             |    2 +-
 ext/device_pipe.cpp                                |  415 +++
 ext/device_pipe.h                                  |   51 +
 {src/boost/cpp => ext}/device_proxy.cpp            |  117 +-
 {src/boost/cpp => ext}/enums.cpp                   |   29 +-
 {src/boost/cpp => ext}/event_data.cpp              |    2 +-
 {src/boost/cpp => ext}/exception.cpp               |    2 +-
 {src/boost/cpp => ext}/exception.h                 |    2 +-
 {src/boost/cpp => ext}/fast_from_py.h              |    4 +-
 {src/boost/cpp => ext}/fast_from_py_numpy.hpp      |    2 +-
 {src/boost/cpp => ext}/from_py.cpp                 |   84 +-
 {src/boost/cpp => ext}/from_py.h                   |    7 +-
 {src/boost/cpp => ext}/group.cpp                   |    2 +-
 {src/boost/cpp => ext}/group_reply.cpp             |    2 +-
 {src/boost/cpp => ext}/group_reply_list.cpp        |    2 +-
 {src/boost/cpp => ext}/locker_info.cpp             |    2 +-
 {src/boost/cpp => ext}/locking_thread.cpp          |    2 +-
 {src/boost/cpp => ext}/periodic_event_info.cpp     |    2 +-
 .../archive_event_info.cpp => ext/pipe_info.cpp    |   18 +-
 {src/boost/cpp => ext}/poll_device.cpp             |    2 +-
 .../sip/DbData.sip => ext/precompiled_header.cpp   |    4 +-
 {src/boost/cpp => ext}/precompiled_header.hpp      |    2 +-
 {src/boost/cpp => ext}/pytango.cpp                 |   10 +-
 {src/boost/cpp => ext}/pytgutils.cpp               |    2 +-
 {src/boost/cpp => ext}/pytgutils.h                 |    2 +-
 {src/boost/cpp => ext}/pyutils.cpp                 |    7 +-
 {src/boost/cpp => ext}/pyutils.h                   |   24 +-
 {src/boost/cpp => ext}/server/attr.cpp             |   83 +-
 {src/boost/cpp => ext}/server/attr.h               |   83 +-
 {src/boost/cpp => ext}/server/attribute.cpp        |  104 +-
 {src/boost/cpp => ext}/server/attribute.h          |    2 +-
 ext/server/auto_monitor.cpp                        |  151 +
 {src/boost/cpp => ext}/server/command.cpp          |   27 +-
 {src/boost/cpp => ext}/server/command.h            |    2 +-
 {src/boost/cpp => ext}/server/device_class.cpp     |   80 +-
 {src/boost/cpp => ext}/server/device_class.h       |   24 +-
 {src/boost/cpp => ext}/server/device_impl.cpp      |  204 +-
 {src/boost/cpp => ext}/server/device_impl.h        |  136 +-
 {src/boost/cpp => ext}/server/dserver.cpp          |    2 +-
 .../boost/cpp => ext}/server/encoded_attribute.cpp |    2 +-
 {src/boost/cpp => ext}/server/log4tango.cpp        |    2 +-
 {src/boost/cpp => ext}/server/multi_attribute.cpp  |    2 +-
 .../cpp => ext}/server/multi_class_attribute.cpp   |    8 +-
 ext/server/pipe.cpp                                |  448 +++
 ext/server/pipe.h                                  |   86 +
 {src/boost/cpp => ext}/server/subdev.cpp           |    2 +-
 {src/boost/cpp => ext}/server/tango_util.cpp       |    3 +-
 .../cpp => ext}/server/user_default_attr_prop.cpp  |    6 +-
 .../server/user_default_pipe_prop.cpp              |   12 +-
 {src/boost/cpp => ext}/server/wattribute.cpp       |    2 +-
 {src/boost/cpp => ext}/server/wattribute_numpy.hpp |    2 +-
 {src/boost/cpp => ext}/tango_numpy.h               |    3 +-
 {src/boost/cpp => ext}/tgutils.h                   |   42 +-
 {src/boost/cpp => ext}/time_val.cpp                |    2 +-
 {src/boost/cpp => ext}/to_py.cpp                   |   77 +-
 {src/boost/cpp => ext}/to_py.h                     |   11 +-
 {src/boost/cpp => ext}/to_py_numpy.hpp             |   73 +-
 {src/boost/cpp => ext}/version.cpp                 |    4 +-
 images/banner.xcf                                  |  Bin 0 -> 1305732 bytes
 images/itango_console.png                          |  Bin 0 -> 66700 bytes
 images/itango_qtconsole.png                        |  Bin 0 -> 87266 bytes
 images/logo-2009.xcf                               |  Bin 0 -> 3059144 bytes
 images/logo-2010.png                               |  Bin 0 -> 1363560 bytes
 images/logo-2010.xcf                               |  Bin 0 -> 9367953 bytes
 images/logo-medium-2009.png                        |  Bin 0 -> 56077 bytes
 images/logo-medium-2010.png                        |  Bin 0 -> 98513 bytes
 images/logo-small-2009.png                         |  Bin 0 -> 17765 bytes
 images/logo-small-2010.png                         |  Bin 0 -> 99573 bytes
 images/tango.jpg                                   |  Bin 0 -> 8694 bytes
 readthedocs.yml                                    |    2 +
 scripts/itango                                     |   27 -
 setup.cfg                                          |    7 +
 setup.py                                           |  301 +-
 src/boost/cpp/constants.cpp                        |  290 --
 src/boost/cpp/precompiled_header.cpp               |   12 -
 src/boost/python/green.py                          |  191 -
 src/boost/python/ipython/__init__.py               |   77 -
 src/boost/python/ipython/common.py                 |   66 -
 src/boost/python/ipython/eventlogger.py            |   79 -
 src/boost/python/ipython/ipython_00_10/__init__.py |   15 -
 .../python/ipython/ipython_00_10/ipy_install.py    |   99 -
 src/boost/python/ipython/ipython_00_10/ipy_qt.py   |  373 --
 .../python/ipython/ipython_00_10/ipython_00_10.py  |  969 -----
 src/boost/python/ipython/ipython_00_11/__init__.py |   18 -
 .../python/ipython/ipython_00_11/ipy_install.py    |  102 -
 .../python/ipython/ipython_00_11/ipython_00_11.py  | 1269 -------
 src/boost/python/ipython/ipython_10_00/__init__.py |   18 -
 .../python/ipython/ipython_10_00/ipy_install.py    |  102 -
 .../python/ipython/ipython_10_00/ipython_10_00.py  | 1331 -------
 .../python/ipython/resource/ITangoConsole.svg      |  422 ---
 src/boost/python/ipython/resource/database.png     |  Bin 13726 -> 0 bytes
 src/boost/python/ipython/resource/device.png       |  Bin 65909 -> 0 bytes
 src/boost/python/ipython/resource/motor.png        |  Bin 13299 -> 0 bytes
 src/boost/python/ipython/resource/serial.png       |  Bin 6323 -> 0 bytes
 src/boost/python/ipython/resource/starter.png      |  Bin 15763 -> 0 bytes
 src/sip/Makefile                                   |   58 -
 src/sip/Tango/__init__.py                          |   29 -
 src/sip/Tango/__init_tango.py                      |   67 -
 src/sip/Tango/release.py                           |   58 -
 src/sip/setup.cfg                                  |    2 -
 src/sip/setup.py                                   |  298 --
 src/sip/sip/AttributeInfo.sip                      |  104 -
 src/sip/sip/AttributeInfoEx.sip                    |  176 -
 src/sip/sip/CommandInfo.sip                        |  119 -
 src/sip/sip/Database.sip                           |  181 -
 src/sip/sip/DbDatum.sip                            |  187 -
 src/sip/sip/DbDevImportInfo.sip                    |   25 -
 src/sip/sip/DbDevInfo.sip                          |   24 -
 src/sip/sip/DeviceAttribute.sip                    |   30 -
 src/sip/sip/DeviceAttributeConfig.sip              |   38 -
 src/sip/sip/DeviceInfo.sip                         |   24 -
 src/sip/sip/DeviceProxy.sip                        |  222 --
 src/sip/sip/Tango.sip                              |   52 -
 src/sip/sip/configure.py                           |   59 -
 src/sip/sip/connection.sip                         |   51 -
 src/sip/sip/constants.sip                          |  218 --
 src/sip/sip/std_utils.sip                          |  101 -
 src/swig/Makefile                                  |  106 -
 src/swig/deviceproxy.i                             |  224 --
 src/swig/tango.i                                   |   21 -
 {src/boost/python => tango}/__init__.py            |   51 +-
 {src/boost/python => tango}/api_util.py            |    8 +-
 src/boost/python/futures.py => tango/asyncio.py    |   88 +-
 tango/asyncio_tools.py                             |  100 +
 {src/boost/python => tango}/attr_data.py           |   27 +-
 {src/boost/python => tango}/attribute_proxy.py     |  118 +-
 tango/auto_monitor.py                              |   77 +
 {src/boost/python => tango}/base_types.py          |  177 +-
 {src/boost/python => tango}/callback.py            |    4 +-
 {src/boost/python => tango}/client.py              |   55 +-
 {src/boost/python => tango}/codec.py               |    0
 {src/boost/python => tango}/connection.py          |   10 +-
 .../boost/python => tango}/databaseds/DataBase.xmi |    0
 {src/boost/python => tango}/databaseds/DataBaseds  |    0
 {src/boost/python => tango}/databaseds/__init__.py |    0
 .../python => tango}/databaseds/create_db.sql      |    0
 .../databaseds/create_db_tables.sql                |    0
 {src/boost/python => tango}/databaseds/database.py |  376 +-
 .../databaseds/db_access/__init__.py               |    0
 .../databaseds/db_access/beacon.py                 |   66 +-
 .../databaseds/db_access/sqlite3.py                |    8 +-
 .../boost/python => tango}/databaseds/db_errors.py |    0
 .../python => tango}/databaseds/mysql2sqlite.sh    |    0
 {src/boost/python => tango}/db.py                  |   48 +-
 {src/boost/python => tango}/device_attribute.py    |    4 +-
 {src/boost/python => tango}/device_class.py        |   70 +-
 {src/boost/python => tango}/device_data.py         |    4 +-
 {src/boost/python => tango}/device_proxy.py        |  515 ++-
 {src/boost/python => tango}/device_server.py       |  180 +-
 {src/boost/python => tango}/encoded_attribute.py   |   36 +-
 {src/boost/python => tango}/exception.py           |   60 +-
 {src/boost/python => tango}/futures.py             |   26 +-
 {src/boost/python => tango}/gevent.py              |   26 +-
 {src/boost/python => tango}/globals.py             |    2 +-
 tango/green.py                                     |  284 ++
 {src/boost/python => tango}/group.py               |  254 +-
 {src/boost/python => tango}/group_reply.py         |    4 +-
 {src/boost/python => tango}/group_reply_list.py    |    4 +-
 {src/boost/python => tango}/log4tango.py           |   50 +-
 tango/pipe.py                                      |  168 +
 tango/pipe_data.py                                 |  192 +
 {src/boost/python => tango}/pytango_init.py        |   10 +-
 {src/boost/python => tango}/pytango_pprint.py      |   24 +-
 {src/boost/python => tango}/pyutil.py              |   22 +-
 {src/boost/python => tango}/release.py             |   11 +-
 {src/boost/python => tango}/server.py              |  630 +++-
 tango/tango_asyncio.py                             |  110 +
 {src/boost/python => tango}/tango_futures.py       |    8 +-
 {src/boost/python => tango}/tango_gevent.py        |   11 +-
 {src/boost/python => tango}/tango_numpy.py         |   16 +-
 {src/boost/python => tango}/time_val.py            |   10 +-
 {src/boost/python => tango}/utils.py               |  410 ++-
 win/PyTango_VS10/PyTango.props                     |  472 +++
 win/PyTango_VS10/PyTango.sln                       |   93 +
 win/PyTango_VS10/PyTango.vcxproj                   |  926 +++++
 win/PyTango_VS10/PyTango.vcxproj.filters           |  284 ++
 win/PyTango_VS14/PyTango.props                     |  399 +++
 win/PyTango_VS14/PyTango.sln                       |   53 +
 win/PyTango_VS14/PyTango.vcxproj                   |  521 +++
 win/PyTango_VS14/PyTango.vcxproj.filters           |  284 ++
 win/PyTango_VS8/PyTango.sln                        |   76 +
 win/PyTango_VS8/PyTango.vcproj                     | 1293 +++++++
 win/PyTango_VS9/PyTango.sln                        |  158 +
 win/PyTango_VS9/PyTango.vcproj                     | 3751 ++++++++++++++++++++
 win/PyTango_VS9/PyTango.vsprops                    |  316 ++
 winsetup.py                                        |   78 +
 305 files changed, 17093 insertions(+), 12578 deletions(-)

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..244d789
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,51 @@
+# Byte-compiled / optimized / DLL files
+__pycache__/
+*.py[cod]
+
+# C extensions
+*.o
+*.so
+
+# Precompiled headers
+*.gch
+
+# Packages
+bin/
+build/
+develop-eggs/
+dist/
+eggs/
+lib/
+lib64/
+parts/
+sdist/
+var/
+*.egg-info/
+.installed.cfg
+*.egg
+*.cfg
+MANIFEST
+
+# Installer logs
+pip-log.txt
+pip-delete-this-directory.txt
+
+# Unit test / coverage reports
+.tox/
+.coverage
+.cache
+nosetests.xml
+coverage.xml
+
+# Translations
+*.mo
+
+# Sphinx documentation
+doc/_build/
+
+# Qt Help generated
+*.qch
+*.qhc
+
+# Backup files
+*~
diff --git a/IPython/Extensions/ipy_profile_tango.py b/IPython/Extensions/ipy_profile_tango.py
deleted file mode 100644
index d54ef2c..0000000
--- a/IPython/Extensions/ipy_profile_tango.py
+++ /dev/null
@@ -1,26 +0,0 @@
-# ------------------------------------------------------------------------------
-# 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."""
-
-import IPython.ipapi
-import ipy_defaults
-
-def main():
-    ip = IPython.ipapi.get()
-    try:
-        ip.ex("import IPython.ipapi")
-        ip.ex("import PyTango.ipython")
-        ip.ex("PyTango.ipython.init_ipython(IPython.ipapi.get())")
-    except ImportError:
-        print "Unable to start spock profile, is PyTango installed?"
-
-main()
diff --git a/IPython/config/profile/tango/ipython_config.py b/IPython/config/profile/tango/ipython_config.py
deleted file mode 100644
index e7f1ad0..0000000
--- a/IPython/config/profile/tango/ipython_config.py
+++ /dev/null
@@ -1,22 +0,0 @@
-# ------------------------------------------------------------------------------
-# 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()
-
-# This can be used at any point in a config file to load a sub config
-# and merge it into the current one.
-load_subconfig('ipython_config.py', profile='default')
-
-import PyTango.ipython
-PyTango.ipython.load_config(config)
-
-
-
diff --git a/MANIFEST.in b/MANIFEST.in
new file mode 100644
index 0000000..36f7736
--- /dev/null
+++ b/MANIFEST.in
@@ -0,0 +1,12 @@
+include LICENSE.txt
+
+graft ext
+graft doc
+graft tests
+
+global-exclude *~
+global-exclude *.pyc
+global-exclude *.pyo
+exclude setup.cfg
+exclude images
+exclude src/precompiled_header.hpp.gch
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..b2aac1e
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,318 @@
+# ------------------------------------------------------------------------------
+# This file is part of PyTango (http://pytango.rtfd.io)
+#
+# 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.
+# ------------------------------------------------------------------------------
+
+################################################################################
+#                    TO BE USED BY DEVELOPERS ONLY
+################################################################################
+
+# Makefile to generate the PyTango library
+# Needs the following environment variables to be defined:
+# - TANGO_ROOT
+# - LOG4TANGO_ROOT
+# - OMNI_ROOT
+# - BOOST_ROOT
+# - ZMQ_ROOT
+# - NUMPY_ROOT
+#
+# if target == install also needs: prefix=<install_dir>
+# ex: make install prefix=/home/homer/.local/lib/python2.6/site-packages
+#
+# Optional:
+# - OBJS_DIR: directory where files will be build (default: objs)
+# - PY3K: if defined use python 3 boost python
+# - PY_VER: use a specific python version (default is empty) (ex: 3.2)
+
+# Build "in parallel":
+# make prepare && make -j5
+#
+# Install "in parallel":
+# make prepare && make -j5 && make install prefix=<install dir>
+
+ifdef PY_VER
+PY_EXC=python$(PY_VER)
+PY_MAJOR=$(shell $(PY_EXC) -c "import sys; sys.stdout.write(str(sys.version_info[0]))")
+PY_MINOR=$(shell $(PY_EXC) -c "import sys; sys.stdout.write(str(sys.version_info[1]))")
+else
+PY_EXC=python
+PY_MAJOR=$(shell $(PY_EXC) -c "import sys; sys.stdout.write(str(sys.version_info[0]))")
+PY_MINOR=$(shell $(PY_EXC) -c "import sys; sys.stdout.write(str(sys.version_info[1]))")
+PY_VER=$(PY_MAJOR).$(PY_MINOR)
+endif
+
+PY_VER_S=$(PY_MAJOR)$(PY_MINOR)
+
+ifndef NUMPY_ROOT
+NUMPY_INC = -I$(shell $(PY_EXC) -c "import sys, numpy; sys.stdout.write(numpy.get_include())")
+else
+NUMPY_INC = -I$(NUMPY_ROOT)/include
+endif
+
+PYTANGO_NUMPY_VERSION = \"$(shell $(PY_EXC) -c "import sys, numpy; sys.stdout.write(numpy.__version__)")\"
+
+ifndef prefix
+ifdef user
+_PY_DIR=$(shell $(PY_EXC) -c "import sys, os; sys.stdout.write(os.path.split(os.path.join(os.path.dirname(os.__file__)))[1])")
+prefix=$(HOME)/.local/lib/$(_PY_DIR)/site-packages
+else
+_PY_DIR=$(shell $(PY_EXC) -c "import sys, os; sys.stdout.write(os.path.join(os.path.dirname(os.__file__)))")
+prefix=$(_PY_DIR)/site-packages
+endif
+endif
+
+SRC_DIR = ext
+
+ifndef OBJS_DIR
+OBJS_DIR := objs_py$(PY_VER_S)
+endif
+
+CC = gcc
+
+PY_INC := $(shell python$(PY_VER)-config --includes)
+
+ifdef optimize
+OPTIMIZE_CC = -O2
+OPTIMIZE_LN = -O2
+else
+OPTIMIZE_CC = -O0
+OPTIMIZE_LN = -O0
+endif
+
+TANGO_CFLAGS=`pkg-config --cflags-only-other tango`
+TANGO_LIBS=`pkg-config --libs-only-l tango`
+BOOST_LIB = boost_python-py$(PY_VER_S)
+
+PRE_C_H := precompiled_header.hpp
+PRE_C_H_O := $(OBJS_DIR)/$(PRE_C_H).gch
+PRE_C := -include$(OBJS_DIR)/$(PRE_C_H)
+
+LN := g++ -pthread -shared -Wl,$(OPTIMIZE_LN) -Wl,-Bsymbolic-functions #-z defs
+LN_STATIC := g++ -pthread -static -Wl,$(OPTIMIZE_LN) -Wl,-Bsymbolic-functions
+
+LN_VER := -Wl,-h -Wl,--strip-all
+
+LN_LIBS := -l$(BOOST_LIB) -lpython$(PY_VER) -ltango
+
+INCLUDE_DIRS =
+
+ifdef TANGO_ROOT
+LN_DIRS += -L$(TANGO_ROOT)/lib
+INCLUDE_DIRS += -I$(TANGO_ROOT)/include -I$(TANGO_ROOT)/include/tango
+#LN_LIBS += -ltango -lomniDynamic4 -lCOS4 -llog4tango -lzmq -lomniORB4 -lomnithread
+else
+LN_DIRS += `pkg-config --libs-only-L tango`
+INCLUDE_DIRS += `pkg-config --cflags-only-I tango`
+#LN_LIBS += `pkg-config --libs-only-l tango`
+endif
+
+ifdef LOG4TANGO_ROOT
+LN_DIRS += -L$(LOG4TANGO_ROOT)/lib
+INCLUDE_DIRS += -I$(LOG4TANGO_ROOT)/include
+endif
+
+ifdef OMNI_ROOT
+LN_DIRS += -L$(OMNI_ROOT)/lib
+INCLUDE_DIRS += -I$(OMNI_ROOT)/include
+endif
+
+ifdef BOOST_ROOT
+LN_DIRS += -L$(BOOST_ROOT)/lib
+endif
+
+ifdef ZMQ_ROOT
+LN_DIRS += -L$(ZMQ_ROOT)/lib
+INCLUDE_DIRS += -I$(ZMQ_ROOT)/include
+endif
+
+INCLUDE_DIRS += \
+    $(PY_INC) \
+    $(NUMPY_INC)
+
+QUOTE_INCLUDE_DIRS = -iquote $(SRC_DIR)
+
+MACROS := -DNDEBUG -DPYTANGO_HAS_UNIQUE_PTR -DPYTANGO_NUMPY_VERSION=$(PYTANGO_NUMPY_VERSION)
+CFLAGS := -pthread -fno-strict-aliasing -fwrapv -Wall -fPIC -g $(OPTIMIZE_CC) $(MACROS) $(TANGO_CFLAGS) $(INCLUDE_DIRS) $(QUOTE_INCLUDE_DIRS)
+LNFLAGS := $(LN_DIRS) $(LN_LIBS)
+
+LIB_NAME := _tango.so
+LIB_SYMB_NAME := $(LIB_NAME).dbg
+
+OBJS := \
+$(OBJS_DIR)/api_util.o \
+$(OBJS_DIR)/archive_event_info.o \
+$(OBJS_DIR)/attr_conf_event_data.o \
+$(OBJS_DIR)/attribute_alarm_info.o \
+$(OBJS_DIR)/attribute_dimension.o \
+$(OBJS_DIR)/attribute_event_info.o \
+$(OBJS_DIR)/attribute_info.o \
+$(OBJS_DIR)/attribute_info_ex.o \
+$(OBJS_DIR)/device_pipe.o \
+$(OBJS_DIR)/pipe_info.o \
+$(OBJS_DIR)/attribute_proxy.o \
+$(OBJS_DIR)/base_types.o \
+$(OBJS_DIR)/callback.o \
+$(OBJS_DIR)/change_event_info.o \
+$(OBJS_DIR)/command_info.o \
+$(OBJS_DIR)/connection.o \
+$(OBJS_DIR)/constants.o \
+$(OBJS_DIR)/database.o \
+$(OBJS_DIR)/data_ready_event_data.o \
+$(OBJS_DIR)/db.o \
+$(OBJS_DIR)/dev_command_info.o \
+$(OBJS_DIR)/dev_error.o \
+$(OBJS_DIR)/device_attribute_config.o \
+$(OBJS_DIR)/device_attribute.o \
+$(OBJS_DIR)/device_attribute_history.o \
+$(OBJS_DIR)/device_data.o \
+$(OBJS_DIR)/device_data_history.o \
+$(OBJS_DIR)/device_info.o \
+$(OBJS_DIR)/device_proxy.o \
+$(OBJS_DIR)/enums.o \
+$(OBJS_DIR)/event_data.o \
+$(OBJS_DIR)/exception.o \
+$(OBJS_DIR)/from_py.o \
+$(OBJS_DIR)/group.o \
+$(OBJS_DIR)/group_reply.o \
+$(OBJS_DIR)/group_reply_list.o \
+$(OBJS_DIR)/locker_info.o \
+$(OBJS_DIR)/locking_thread.o \
+$(OBJS_DIR)/periodic_event_info.o \
+$(OBJS_DIR)/poll_device.o \
+$(OBJS_DIR)/pytango.o \
+$(OBJS_DIR)/pytgutils.o \
+$(OBJS_DIR)/pyutils.o \
+$(OBJS_DIR)/time_val.o \
+$(OBJS_DIR)/to_py.o \
+$(OBJS_DIR)/version.o \
+$(OBJS_DIR)/attr.o \
+$(OBJS_DIR)/attribute.o \
+$(OBJS_DIR)/command.o \
+$(OBJS_DIR)/pipe.o \
+$(OBJS_DIR)/device_class.o \
+$(OBJS_DIR)/device_impl.o \
+$(OBJS_DIR)/dserver.o \
+$(OBJS_DIR)/encoded_attribute.o \
+$(OBJS_DIR)/log4tango.o \
+$(OBJS_DIR)/multi_attribute.o \
+$(OBJS_DIR)/multi_class_attribute.o \
+$(OBJS_DIR)/subdev.o \
+$(OBJS_DIR)/tango_util.o \
+$(OBJS_DIR)/user_default_attr_prop.o \
+$(OBJS_DIR)/user_default_pipe_prop.o \
+$(OBJS_DIR)/wattribute.o \
+$(OBJS_DIR)/auto_monitor.o
+
+INC := callback.h \
+defs.h \
+device_attribute.h \
+exception.h \
+fast_from_py.h \
+from_py.h \
+pytgutils.h \
+pyutils.h \
+tango_numpy.h \
+tgutils.h \
+to_py.h \
+attr.h \
+attribute.h \
+command.h \
+pipe.h \
+device_class.h \
+device_impl.h
+
+LINKER=$(LN) $(OBJS) $(LN_VER)
+
+LINK_TASK=link
+ifdef optimize
+LINK_TASK=link-opt
+endif
+
+OK=OK!
+
+#-----------------------------------------------------------------
+
+all: build
+
+prepare: init $(PRE_C_H_O)
+
+build: init prepare $(LINK_TASK)
+
+init:
+	@echo Using python $(PY_VER)
+	@echo CFLAGS  = $(CFLAGS)
+	@echo LNFLAGS = $(LNFLAGS)
+	@echo -n "Preparing build directories... "
+	@mkdir -p $(OBJS_DIR)
+	@echo $(OK)
+
+$(PRE_C_H_O): $(SRC_DIR)/$(PRE_C_H)
+	@echo -n "Compiling pre-compiled header... "
+	@$(CC) $(CFLAGS) -c $< -o $(PRE_C_H_O)
+	@echo $(OK)
+
+#
+# Rule for API files
+#
+$(OBJS_DIR)/%.o: $(SRC_DIR)/%.cpp
+	@echo -n "Compiling $(<F)... "
+	@$(CC) $(CFLAGS) -c $< -o $(OBJS_DIR)/$*.o $(PRE_C)
+	@echo Done!
+
+$(OBJS_DIR)/%.o: $(SRC_DIR)/server/%.cpp
+	@echo -n "Compiling $(<F)... "
+	@$(CC) $(CFLAGS) -c $< -o $(OBJS_DIR)/$*.o $(PRE_C)
+	@echo $(OK)
+
+#
+#	The shared libs
+#
+
+link: prepare $(OBJS)
+	@echo -n "Linking shared $(LIB_NAME)... "
+	@$(LINKER) -o $(OBJS_DIR)/$(LIB_NAME) $(LNFLAGS)
+	@echo $(OK)
+
+link-opt: link
+	@echo Optimizing shared $(LIB_NAME)
+	@echo -n "  Building separate debug file... "
+	@objcopy --only-keep-debug $(OBJS_DIR)/$(LIB_NAME) $(OBJS_DIR)/$(LIB_NAME).dbg
+	@echo $(OK)
+	@echo -n "  Stripping $(LIB_NAME)... "
+	@objcopy --strip-debug --strip-unneeded $(OBJS_DIR)/$(LIB_NAME)
+	@echo $(OK)
+	@echo -n "  Linking $(LIB_NAME) with debug file... "
+	@objcopy --add-gnu-debuglink=$(OBJS_DIR)/$(LIB_NAME).dbg $(OBJS_DIR)/$(LIB_NAME)
+	@echo $(OK)
+
+clean:
+	@echo -n Cleaning ...
+	@rm -f $(OBJS_DIR)/*.o
+	@echo $(OK)
+
+clean-all:
+	@echo -n Cleaning all...
+	@rm -rf $(OBJS_DIR)
+	@echo $(OK)
+
+install-py:
+	@echo -n "Installing python files into $(prefix)/tango... "
+	@mkdir -p $(prefix)/tango
+	@rsync -r tango/ $(prefix)/tango/
+	@rsync PyTango.py $(prefix)/
+	@echo $(OK)
+
+install-lib:
+	@echo -n "Installing binary files into $(prefix)/tango... "
+	@rsync $(OBJS_DIR)/$(LIB_NAME) $(prefix)/tango
+	@echo $(OK)
+
+install-all: install-py install-lib
+
+install: build install-all
diff --git a/PKG-INFO b/PKG-INFO
deleted file mode 100644
index b45e16a..0000000
--- a/PKG-INFO
+++ /dev/null
@@ -1,30 +0,0 @@
-Metadata-Version: 1.1
-Name: PyTango
-Version: 8.1.8
-Summary: A python binding for the Tango control system
-Home-page: http://www.tinyurl.com/PyTango/
-Author: Tiago Coutinho
-Author-email: coutinho at esrf.fr
-License: LGPL
-Download-URL: http://pypi.python.org/pypi/PyTango
-Description: This module implements the Python Tango Device API mapping.
-Keywords: Tango,CORBA,binding
-Platform: Linux
-Platform: Windows XP/Vista/7/8
-Classifier: Development Status :: 5 - Production/Stable
-Classifier: Environment :: Other Environment
-Classifier: Intended Audience :: Developers
-Classifier: License :: OSI Approved :: GNU Library or Lesser General Public License (LGPL)
-Classifier: Natural Language :: English
-Classifier: Operating System :: Microsoft :: Windows
-Classifier: Operating System :: POSIX
-Classifier: Operating System :: POSIX :: Linux
-Classifier: Operating System :: Unix
-Classifier: Programming Language :: C
-Classifier: Programming Language :: Python
-Classifier: Programming Language :: Python :: 3
-Classifier: Topic :: Scientific/Engineering
-Classifier: Topic :: Software Development :: Libraries
-Requires: boost_python (>=1.33)
-Requires: numpy (>=1.1)
-Provides: PyTango
diff --git a/PyTango.py b/PyTango.py
new file mode 100644
index 0000000..dfb51c5
--- /dev/null
+++ b/PyTango.py
@@ -0,0 +1,50 @@
+"""Provides PyTango as a module for backward compatibility."""
+
+# Imports
+import sys
+import tango
+import pkgutil
+import warnings
+
+
+def alias_package(package, alias, extra_modules={}):
+    """Alias a python package properly.
+
+    It ensures that modules are not duplicated by trying
+    to import and alias all the submodules recursively.
+    """
+    path = package.__path__
+    alias_prefix = alias + '.'
+    prefix = package.__name__ + '.'
+    # Alias all importable modules recursively
+    for _, name, _ in pkgutil.walk_packages(path, prefix):
+        try:
+            if name not in sys.modules:
+                __import__(name)
+        except ImportError:
+            continue
+        alias_name = name.replace(prefix, alias_prefix)
+        sys.modules[alias_name] = sys.modules[name]
+    # Alias extra modules
+    for key, value in extra_modules.items():
+        name = prefix + value
+        if name not in sys.modules:
+            __import__(name)
+        if not hasattr(package, key):
+            setattr(package, key, sys.modules[name])
+        sys.modules[alias_prefix + key] = sys.modules[name]
+    # Alias root module
+    sys.modules[alias] = sys.modules[package.__name__]
+
+
+# Do not flood pytango users console with warnings yet
+# warnings.warn('PyTango module is deprecated, import tango instead.')
+
+# Alias tango package
+alias_package(
+    package=tango,
+    alias=__name__,
+    extra_modules={
+        '_PyTango': '_tango',
+        'constants': 'constants'},
+)
diff --git a/README.rst b/README.rst
new file mode 100644
index 0000000..8f39d4a
--- /dev/null
+++ b/README.rst
@@ -0,0 +1,117 @@
+PyTango
+=======
+
+|Doc Status|
+
+Main website: http://pytango.rtfd.io
+
+Python binding for Tango_, a library dedicated to distributed control systems.
+
+
+Description
+-----------
+
+PyTango_ exposes the complete `Tango C++ API`_ through the ``tango`` python module.
+It also adds a bit of abstraction by taking advantage of the Python capabilites:
+
+- ``tango.client`` provides a client access to device servers and databases.
+- ``tango.server`` provides base classes to declare and run device servers.
+
+
+Requirements
+------------
+
+PyTango_ is compatible with python 2 and python 3.
+
+General dependencies:
+
+-  libtango_ >= 9.2
+-  `Boost.Python`_ >= 1.33
+
+Python dependencies:
+
+-  numpy_ >= 1.1
+-  six_
+
+Build dependencies:
+
+- setuptools_
+- sphinx_
+
+Optional dependencies:
+
+- futures_
+- gevent_
+
+.. note:: As a general rule, libtango_ and pytango_ should share the same major
+	  and minor version (for a version ``X.Y.Z``, ``X`` and ``Y`` should
+	  match)
+
+
+Install
+-------
+
+PyTango_ is available on PyPI_ as ``pytango``::
+
+    $ pip install pytango
+
+Alternatively, PyTango_ can be built and installed from the
+`sources`_::
+
+    $ python setup.py install
+
+In both cases, the installation takes a few minutes since the ``_tango`` boost
+extension has to compile.
+
+
+Usage
+-----
+
+To test the installation, import ``tango`` and check ``tango.__version__``::
+
+    >>> import tango
+    >>> tango.__version__
+    '9.2.0'
+
+For an interactive use, consider using ITango_, a tango IPython_ profile.
+
+
+Documentation
+-------------
+
+Check out the documentation_ for more informations.
+
+
+
+Support and contribution
+------------------------
+
+You can get support from the `Tango forums`_, for both Tango_ and PyTango_ questions.
+
+All contributions,  `PR and bug reports`_ are welcome!
+
+.. |Doc Status| image:: https://readthedocs.org/projects/pytango/badge/?version=latest
+                :target: http://pytango.readthedocs.io/en/latest/?badge=latest
+                :alt: PyTango documentation status
+
+.. _Tango: http://tango-controls.org
+.. _Tango C++ API: http://esrf.eu/computing/cs/tango/tango_doc/kernel_doc/cpp_doc
+.. _PyTango: http://github.com/tango-cs/pytango
+.. _PyPI: http://pypi.python.org/pypi/pytango
+
+.. _libtango: http://tango-controls.org/downloads/source
+.. _Boost.Python: http://boost.org/doc/libs/1_61_0/libs/python/doc/html
+.. _numpy: http://pypi.python.org/pypi/numpy
+.. _six: http://pypi.python.org/pypi/six
+.. _setuptools: http://pypi.python.org/pypi/setuptools
+.. _sphinx: http://pypi.python.org/pypi/sphinx
+.. _futures: http://pypi.python.org/pypi/futures
+.. _gevent: http://pypi.python.org/pypi/gevents
+
+.. _ITango: http://pypi.python.org/pypi/itango
+.. _IPython: http://ipython.org
+
+.. _documentation: http://pytango.readthedocs.io/en/latest
+.. _Tango forums: http://tango-controls.org/community/forum
+.. _PR and bug reports: PyTango_
+.. _sources: PyTango_
diff --git a/cPyTango/__init__.py b/cPyTango/__init__.py
deleted file mode 100644
index 55acfd4..0000000
--- a/cPyTango/__init__.py
+++ /dev/null
@@ -1,24 +0,0 @@
-################################################################################
-##
-## This file is part of Taurus, a Tango User Interface Library
-## 
-## 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/>.
-##
-################################################################################
-
-from cPyTango import *
diff --git a/cPyTango/cPyTango.py b/cPyTango/cPyTango.py
deleted file mode 100644
index 05e6fad..0000000
--- a/cPyTango/cPyTango.py
+++ /dev/null
@@ -1,895 +0,0 @@
-################################################################################
-##
-## This file is part of Taurus, a Tango User Interface Library
-## 
-## 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/>.
-##
-################################################################################
-
-import ctypes
-import ctypes.util
-import enumeration
-import time
-
-_tango_lib_name = ctypes.util.find_library("c_tango")
-
-if _tango_lib_name is None:
-    raise RuntimeError("Failed to find c_tango shared library")
-
-_ref      = ctypes.byref
-String    = ctypes.c_char_p
-StringPtr = ctypes.POINTER(String)
-Int       = ctypes.c_int
-IntPtr    = ctypes.POINTER(Int) 
-Enum      = ctypes.c_int
-Length    = ctypes.c_uint
-Bool      = ctypes.c_short
-
-c_tango = ctypes.CDLL(_tango_lib_name)
-
-TangoDataType = Enum
-TangoDataTypeEnum = enumeration.Enumeration("TangoDataTypeEnum", (
-    "DEV_VOID",
-    "DEV_BOOLEAN",
-    "DEV_SHORT",
-    "DEV_LONG",
-    "DEV_FLOAT",
-    "DEV_DOUBLE",
-    "DEV_USHORT",
-    "DEV_ULONG",
-    "DEV_STRING",
-    "DEVVAR_CHARARRAY",
-    "DEVVAR_SHORTARRAY",
-    "DEVVAR_LONGARRAY",
-    "DEVVAR_FLOATARRAY",
-    "DEVVAR_DOUBLEARRAY",
-    "DEVVAR_USHORTARRAY",
-    "DEVVAR_ULONGARRAY",
-    "DEVVAR_STRINGARRAY",
-    "DEVVAR_LONGSTRINGARRAY",
-    "DEVVAR_DOUBLESTRINGARRAY",
-    "DEV_STATE",
-    "CONST_DEV_STRING",
-    "DEVVAR_BOOLEANARRAY",
-    "DEV_UCHAR",
-    "DEV_LONG64",
-    "DEV_ULONG64",
-    "DEVVAR_LONG64ARRAY",
-    "DEVVAR_ULONG64ARRAY",
-    "DEV_INT" ) )
-locals().update(TangoDataTypeEnum.lookup)
-TangoDataTypePtr = ctypes.POINTER(TangoDataType)
-
-def _is_scalar(data_type):
-    if data_type <= TangoDataTypeEnum.DEV_STRING: return True
-    if data_type > TangoDataTypeEnum.DEV_STRING and data_type < TangoDataTypeEnum.DEV_STATE: return False
-    if data_type == TangoDataTypeEnum.DEVVAR_BOOLEANARRAY or \
-       data_type == TangoDataTypeEnum.DEVVAR_LONG64ARRAY or \
-       data_type == TangoDataTypeEnum.DEVVAR_ULONG64ARRAY:
-       return False
-    return True
-
-TangoDataTypeEnum.is_scalar = _is_scalar
-
-TangoDevState = Enum
-TangoDevStateEnum = enumeration.Enumeration("TangoDevStateEnum", (
-    "ON",
-    "OFF",
-    "CLOSE",
-    "OPEN",
-    "INSERT",
-    "EXTRACT",
-    "MOVING",
-    "STANDBY",
-    "FAULT",
-    "INIT",
-    "RUNNING",
-    "ALARM",
-    "DISABLE",
-    "UNKNOWN") )
-locals().update(TangoDevStateEnum.lookup)
-TangoDevStatePtr = ctypes.POINTER(TangoDevState)
-
-AttrQuality = Enum
-AttrQualityEnum = enumeration.Enumeration("AttrQualityEnum", (
-    "ATTR_VALID",
-    "ATTR_INVALID",
-    "ATTR_ALARM",
-    "ATTR_CHANGING", 
-    "ATTR_WARNING" ) )
-locals().update(AttrQualityEnum.lookup)
-AttrQualityPtr = ctypes.POINTER(AttrQuality)
-
-AttrWriteType = Enum
-AttrWriteTypeEnum = enumeration.Enumeration("AttrWriteTypeEnum", (
-   "READ",
-   "READ_WITH_WRITE",
-   "WRITE",
-   "READ_WRITE" ) )
-locals().update(AttrWriteTypeEnum.lookup)
-AttrWriteTypePtr = ctypes.POINTER(AttrWriteType)
-
-AttrDataFormat = Enum
-AttrDataFormatEnum = enumeration.Enumeration("AttrDataFormatEnum", (
-    "SCALAR",
-    "SPECTRUM",
-    "IMAGE" ) )
-locals().update(AttrDataFormatEnum.lookup)
-AttrDataFormatPtr = ctypes.POINTER(AttrDataFormat)
-
-DispLevel = Enum
-DispLevelEnum = enumeration.Enumeration("DispLevelEnum", (
-    "OPERATOR",
-    "EXPERT" ) )
-locals().update(DispLevelEnum.lookup)
-DispLevelPtr = ctypes.POINTER(DispLevel)
-
-ErrSeverity = Enum
-ErrSeverityEnum = enumeration.Enumeration("ErrSeverityEnum", (
-   "WARN",
-   "ERR",
-   "PANIC" ) )
-locals().update(ErrSeverityEnum.lookup)   
-ErrSeverityPtr = ctypes.POINTER(ErrSeverity)
-
-DevSource = Enum
-DevSourceEnum = enumeration.Enumeration("DevSourceEnum", (
-    "DEV",
-    "CACHE",
-    "CACHE_DEV" ) )
-locals().update(DevSourceEnum.lookup)  
-DevSourcePtr = ctypes.POINTER(DevSource)
-    
-TangoDevLong = ctypes.c_int32
-TangoDevLongPtr = ctypes.POINTER(TangoDevLong)
-TangoDevULong = ctypes.c_uint32
-TangoDevULongPtr = ctypes.POINTER(TangoDevULong)
-TangoDevLong64 = ctypes.c_int64
-TangoDevLong64Ptr = ctypes.POINTER(TangoDevLong64)
-TangoDevULong64 = ctypes.c_uint64
-TangoDevULong64Ptr = ctypes.POINTER(TangoDevULong64)
-
-
-class VarArray(ctypes.Structure):
-    
-    def __len__(self):
-        return self.length
-    
-    def __getitem__(self, i):
-        if not isinstance(i,int): raise TypeError("tuple indices must be integers")
-        if i < 0 or i > self.length-1: raise IndexError("tuple index out of range")
-        return self.sequence[i]
-
-
-class VarBoolArray(VarArray):
-    _fields_ = \
-        ("length", Length), \
-        ("sequence", ctypes.POINTER(ctypes.c_int16)) 
-        
-
-class VarCharArray(VarArray):
-    _fields_ = \
-        ("length", Length), \
-        ("sequence", ctypes.POINTER(ctypes.c_char)) 
-
-
-class VarShortArray(VarArray):
-    _fields_ = \
-        ("length", Length), \
-        ("sequence", ctypes.POINTER(ctypes.c_int16)) 
-
-
-class VarUShortArray(VarArray):
-    _fields_ = \
-        ("length", Length), \
-        ("sequence", ctypes.POINTER(ctypes.c_uint16)) 
-
-
-class VarLongArray(VarArray):
-    _fields_ = \
-        ("length", Length), \
-        ("sequence", TangoDevLongPtr) 
-
-
-class VarULongArray(VarArray):
-    _fields_ =  \
-        ("length", Length), \
-        ("sequence", TangoDevULongPtr) 
-
-
-class VarLong64Array(VarArray):
-    _fields_ = \
-        ("length", Length), \
-        ("sequence", TangoDevLong64Ptr) 
-
-
-class VarULong64Array(VarArray):
-    _fields_ = \
-        ("length", Length), \
-        ("sequence", TangoDevULong64Ptr) 
-
-
-class VarFloatArray(VarArray):
-    _fields_ = \
-        ("length", Length), \
-        ("sequence", ctypes.POINTER(ctypes.c_float)) 
-
-
-class VarDoubleArray(VarArray):
-    _fields_ =  \
-        ("length", Length), \
-        ("sequence", ctypes.POINTER(ctypes.c_double)) 
-    
-
-class VarStringArray(VarArray):
-    _fields_ = \
-        ("length", Length), \
-        ("sequence", StringPtr)
-    
-    def __str__(self):
-        l = self.length
-        if l == 1:
-            return self.sequence[0]
-        return str(list(self.sequence[:10]))
-VarStringArrayPtr = ctypes.POINTER(VarStringArray)
-
-class VarStateArray(VarArray):
-    _fields_ = \
-        ("length", Length), \
-        ("sequence", TangoDevStatePtr) 
-    
-    def __str__(self):
-        l = self.length
-        if l == 1:
-            return TangoDevStateEnum.whatis(self.sequence[0])
-        return map(TangoDevStateEnum.whatis, self.sequence[:10])
-        
-
-class TangoAttributeData(ctypes.Union):
-    _fields_ =  \
-        ("bool_arr", VarBoolArray), \
-        ("char_arr", VarCharArray), \
-        ("short_arr", VarShortArray), \
-        ("ushort_arr", VarUShortArray), \
-        ("long_arr", VarLongArray), \
-        ("ulong_arr", VarULongArray), \
-        ("long64_arr", VarLong64Array), \
-        ("ulong64_arr", VarULong64Array), \
-        ("float_arr", VarFloatArray), \
-        ("double_arr", VarDoubleArray), \
-        ("string_arr", VarStringArray), \
-        ("state_arr", VarStateArray)
-    
-    def get_raw(self, type):
-        if type == DEV_BOOLEAN:   return self.bool_arr
-        elif type == DEV_UCHAR:    return self.char_arr
-        elif type == DEV_SHORT:   return self.short_arr
-        elif type == DEV_USHORT:  return self.ushort_arr
-        elif type == DEV_LONG:    return self.long_arr
-        elif type == DEV_ULONG:   return self.ulong_arr
-        elif type == DEV_LONG64:  return self.long64_arr
-        elif type == DEV_ULONG64: return self.ulong64_arr
-        elif type == DEV_FLOAT:   return self.float_arr
-        elif type == DEV_DOUBLE:  return self.double_arr
-        elif type == DEV_STRING:  return self.string_arr
-        elif type == DEV_STATE:   return self.state_arr
-
-    def get(self, type):
-        raw = self.get_raw(type)
-        if TangoDataTypeEnum.is_scalar(type):
-            return raw[0]
-        return raw
-
-    def representation(self, type):
-        return str(self.get_raw(type))
-TangoAttributeDataPtr = ctypes.POINTER(TangoAttributeData)
-
-
-class TangoCommandData(ctypes.Union):
-    _fields_ = \
-        ("bool_val", Bool), \
-        ("short_val", ctypes.c_short), \
-        ("ushort_val", ctypes.c_ushort), \
-        ("long_val", ctypes.c_int32), \
-        ("ulong_val", ctypes.c_uint32), \
-        ("float_val", ctypes.c_float), \
-        ("double_val", ctypes.c_double), \
-        ("string_val", ctypes.c_char_p), \
-        ("state_val", TangoDevState), \
-        ("long64_val", ctypes.c_int64), \
-        ("ulong64_val", ctypes.c_uint64), \
-        ("bool_arr", VarBoolArray), \
-        ("char_arr", VarCharArray), \
-        ("short_arr", VarShortArray), \
-        ("ushort_arr", VarUShortArray), \
-        ("long_arr", VarLongArray), \
-        ("ulong_arr", VarULongArray), \
-        ("long64_arr", VarLong64Array), \
-        ("ulong64_arr", VarULong64Array), \
-        ("float_arr", VarFloatArray), \
-        ("double_arr", VarDoubleArray), \
-        ("string_arr", VarStringArray), \
-        ("state_arr", VarStateArray),
-TangoCommandDataPtr = ctypes.POINTER(TangoCommandData)
-
-
-class TangoPropertyData(ctypes.Union):
-    _fields_ = \
-        ("bool_val", Bool), \
-        ("char_val", ctypes.c_char), \
-        ("short_val", ctypes.c_short), \
-        ("ushort_val", ctypes.c_ushort), \
-        ("long_val", ctypes.c_int32), \
-        ("ulong_val", ctypes.c_uint32), \
-        ("float_val", ctypes.c_float), \
-        ("double_val", ctypes.c_double), \
-        ("string_val", ctypes.c_char_p), \
-        ("long64_val", ctypes.c_int64), \
-        ("ulong64_val", ctypes.c_uint64), \
-        ("short_arr", VarShortArray), \
-        ("ushort_arr", VarUShortArray), \
-        ("long_arr", VarLongArray), \
-        ("ulong_arr", VarULongArray), \
-        ("long64_arr", VarLong64Array), \
-        ("ulong64_arr", VarULong64Array), \
-        ("float_arr", VarFloatArray), \
-        ("double_arr", VarDoubleArray), \
-        ("string_arr", VarStringArray),
-TangoPropertyDataPtr = ctypes.POINTER(TangoPropertyData)
-
-
-class CommandData(ctypes.Structure):
-    _fields_ = \
-        ("arg_type",TangoDataType), \
-        ("cmd_data",TangoCommandData)
-CommandDataPtr = ctypes.POINTER(CommandData)
-
-
-_time_t = ctypes.c_long
-_suseconds_t = ctypes.c_long
-
-class timeval(ctypes.Structure):
-    _fields_ = \
-        ("tv_sec", _time_t), \
-        ("tv_usec", _suseconds_t),
-    
-    def __str__(self):
-        return time.ctime(self.tv_sec + 1E-6 * self.tv_usec)
-timevalPtr = ctypes.POINTER(timeval)
-
-
-class AttributeData(ctypes.Structure):
-    _fields_ = \
-        ("data_type", TangoDataType), \
-        ("attr_data", TangoAttributeData), \
-        ("quality", AttrQuality), \
-        ("name", String), \
-        ("dim_x", Int), \
-        ("dim_y", Int), \
-        ("time_stamp", timeval)
-    
-    def __str__(self):
-        s = "AttributeData[\n"
-        s += "name: %s\n" % self.name
-        s += "data_type: %s\n" % TangoDataTypeEnum.whatis(self.data_type)
-        s += "quality: %s\n" % AttrQualityEnum.whatis(self.quality)
-        s += "dim_x: %d\n" % self.dim_x
-        s += "dim_y: %d\n" % self.dim_y
-        s += "time_stamp: %s\n" % self.time_stamp
-        s += "attr_data: %s\n" % str(self.attr_data.representation(self.data_type))
-        s += "]\n"
-        return s
-    
-    def get_raw_data(self):
-        return self.attr_data.get_raw(self.data_type)
-
-    def get_data(self):
-        return self.attr_data.get(self.data_type)
-AttributeDataPtr = ctypes.POINTER(AttributeData)
-
-
-class AttributeDataList(ctypes.Structure):
-    _fields_ = \
-        ("length", Length), \
-        ("sequence", AttributeDataPtr)
-
-    def __len__(self):
-        return self.length
-    
-    def __getitem__(self, i):
-        if not isinstance(i,int): raise TypeError("tuple indices must be integers")
-        if i < 0 or i > self.length-1: raise IndexError("tuple index out of range")
-        return self.sequence[i]
-    
-    def __str__(self):
-        s = "AttributeDataList[\n"
-        for attr in self: s += attr
-        return s
-AttributeDataListPtr = ctypes.POINTER(AttributeDataList)
-
-                        
-class DevFailed(ctypes.Structure):
-    _fields_ = \
-        ("desc", String), \
-        ("reason", String), \
-        ("origin", String), \
-        ("severity", ErrSeverity)
-    
-    def __str__(self):
-        s  = "Severity    : %d\n" % self.severity
-        s += "Reason      : %s\n" % self.reason
-        s += "Description : %s\n" % self.desc
-        s += "Origin      : %s\n\n" % self.origin
-        return s    
-
-    def __repr__(self):
-        return self.__str__()
-DevFailedPtr = ctypes.POINTER(DevFailed)
-
-
-class ErrorStack(ctypes.Structure):
-    _fields_ = \
-        ("length", Length), \
-        ("sequence", DevFailedPtr) 
-
-    def __len__(self):
-        return self.length
-    
-    def __getitem__(self, i):
-        if not isinstance(i,int): raise TypeError("tuple indices must be integers")
-        if i < 0 or i > self.length-1: raise IndexError("tuple index out of range")
-        return self.sequence[i]
-    
-    def __str__(self):
-        s = "\nTango exception:\n"
-        for i in xrange(self.length):
-            s += str(self.sequence[i])
-        return s
-        
-    def __repr__(self):
-        return self.__str__()
-ErrorStackPtr = ctypes.POINTER(ErrorStack)
-
-
-class CommandInfo(ctypes.Structure):
-    _fields_ = \
-        ("cmd_name", String), \
-        ("cmd_tag", Int), \
-        ("in_type", Int), \
-        ("out_type", Int), \
-        ("in_type_desc", String), \
-        ("out_type_desc", String), \
-        ("disp_level", DispLevel) 
-CommandInfoPtr = ctypes.POINTER(CommandInfo)
-
-
-class CommandInfoList(ctypes.Structure):
-    _fields_ = \
-        ("length", Length), \
-        ("sequence", CommandInfoPtr)
-CommandInfoListPtr = ctypes.POINTER(CommandInfoList)
-
-
-class AttributeInfo(ctypes.Structure):
-    _fields_ = \
-        ("name", String), \
-        ("writable", AttrWriteType), \
-        ("data_format", AttrDataFormat), \
-        ("data_type", TangoDataType), \
-        ("max_dim_x", Int), \
-        ("max_dim_y", Int), \
-        ("description", String), \
-        ("label", String), \
-        ("unit", String), \
-        ("standard_unit", String), \
-        ("display_unit", String), \
-        ("format", String), \
-        ("min_value", String), \
-        ("max_value", String), \
-        ("min_alarm", String), \
-        ("max_alarm", String), \
-        ("writable_attr_name", String), \
-        ("disp_level", DispLevel)
-AttributeInfoPtr = ctypes.POINTER(AttributeInfo)
-
-
-class AttributeInfoList(ctypes.Structure):
-    _fields_ = \
-        ("length", Length), \
-        ("sequence", AttributeInfoPtr)
-AttributeInfoListPtr = ctypes.POINTER(AttributeInfoList)
-
-
-class DbDatum(ctypes.Structure):
-    _fields_ = \
-        ("property_name", String), \
-        ("data_type", TangoDataType), \
-        ("prop_data", TangoPropertyData), \
-        ("is_empty", Bool), \
-        ("wrong_data_type", Bool)
-DbDatumPtr = ctypes.POINTER(DbDatum)
-
-
-class DbData(ctypes.Structure):
-    _fields_ = \
-        ("length", Length), \
-        ("sequence", DbDatumPtr)
-DbDataPtr = ctypes.POINTER(DbData)
-
-
-DeviceProxyPtr    = ctypes.c_void_p
-DeviceProxyPtrPtr = ctypes.POINTER(DeviceProxyPtr)
-DatabasePtr       = ctypes.c_void_p
-DatabasePtrPtr    = ctypes.POINTER(DatabasePtr)
-
-
-c_tango.tango_create_device_proxy.argtypes = (String, DeviceProxyPtrPtr, ErrorStackPtr, )
-c_tango.tango_delete_device_proxy.argtypes = (DeviceProxyPtrPtr, ErrorStackPtr, )
-c_tango.tango_set_timeout_millis.argtypes = (DeviceProxyPtr, Int, ErrorStackPtr, )
-c_tango.tango_get_timeout_millis.argtypes = (DeviceProxyPtr, IntPtr, ErrorStackPtr, )
-c_tango.tango_set_source.argtypes = (DeviceProxyPtr, DevSource, ErrorStackPtr, )
-c_tango.tango_get_source.argtypes = (DeviceProxyPtr, DevSourcePtr, ErrorStackPtr, )
-c_tango.tango_command_query.argtypes = (DeviceProxyPtr, String, CommandInfoPtr, ErrorStackPtr, )
-c_tango.tango_command_list_query.argtypes = (DeviceProxyPtr, CommandInfoListPtr, ErrorStackPtr, )
-c_tango.tango_command_inout.argtypes = (DeviceProxyPtr, String, CommandDataPtr, CommandDataPtr, ErrorStackPtr, )
-c_tango.tango_free_CommandData.argtypes = (CommandDataPtr, )
-c_tango.tango_free_CommandInfo.argtypes = (CommandInfoPtr, )
-c_tango.tango_free_CommandInfoList.argtypes = (CommandInfoListPtr, )
-c_tango.tango_get_attribute_list.argtypes = (DeviceProxyPtr, VarStringArrayPtr, ErrorStackPtr, )
-c_tango.tango_get_attribute_config.argtypes = (DeviceProxyPtr, VarStringArrayPtr, AttributeInfoListPtr, ErrorStackPtr, )
-c_tango.tango_attribute_list_query.argtypes = (DeviceProxyPtr, AttributeInfoListPtr, ErrorStackPtr, )
-c_tango.tango_read_attribute.argtypes = (DeviceProxyPtr, String, AttributeDataPtr, ErrorStackPtr, )
-c_tango.tango_write_attribute.argtypes = (DeviceProxyPtr, String, AttributeDataPtr, ErrorStackPtr, )
-c_tango.tango_read_attributes.argtypes = (DeviceProxyPtr, VarStringArrayPtr, AttributeDataListPtr, ErrorStackPtr, )
-c_tango.tango_write_attributes.argtypes = (DeviceProxyPtr, AttributeDataListPtr, ErrorStackPtr, )
-c_tango.tango_free_AttributeData.argtypes = (AttributeDataPtr, )
-c_tango.tango_free_AttributeDataList.argtypes = (AttributeDataListPtr, )
-c_tango.tango_free_VarStringArray.argtypes = (VarStringArrayPtr, )
-c_tango.tango_print_ErrorStack.argtypes = (ErrorStackPtr, )
-c_tango.tango_free_ErrorStack.argtypes = (ErrorStackPtr, )
-c_tango.tango_create_database_proxy.argtypes = (DatabasePtrPtr, ErrorStackPtr, )
-c_tango.tango_delete_database_proxy.argtypes = (DatabasePtrPtr, ErrorStackPtr, )
-c_tango.tango_get_device_exported.argtypes = (DatabasePtr, String, DbDatumPtr, ErrorStackPtr, )
-c_tango.tango_get_device_exported_for_class.argtypes = (DatabasePtr, String, DbDatumPtr, ErrorStackPtr, )
-c_tango.tango_get_object_list.argtypes = (DatabasePtr, String, DbDatumPtr, ErrorStackPtr, )
-c_tango.tango_get_object_property_list.argtypes = (DatabasePtr, String, String, DbDatumPtr, ErrorStackPtr, )
-c_tango.tango_get_property.argtypes = (DatabasePtr, String, DbDataPtr, ErrorStackPtr, )
-c_tango.tango_put_property.argtypes = (DatabasePtr, String, DbDataPtr, ErrorStackPtr, )
-c_tango.tango_delete_property.argtypes = (DatabasePtr, String, DbDataPtr, ErrorStackPtr, )
-c_tango.tango_get_device_property.argtypes = (DeviceProxyPtr, DbDataPtr, ErrorStackPtr, )
-c_tango.tango_put_device_property.argtypes = (DeviceProxyPtr, DbDataPtr, ErrorStackPtr, )
-c_tango.tango_delete_device_property.argtypes = (DeviceProxyPtr, DbDataPtr, ErrorStackPtr, )
-c_tango.tango_free_DbDatum.argtypes = (DbDatumPtr, )
-c_tango.tango_free_DbData.argtypes = (DbDataPtr, )
-
-
-def tango_create_device_proxy(dev_name):
-    dev_name = ctypes.create_string_buffer(dev_name)
-    dev_ptr = ctypes.c_void_p()
-    err_stack = ErrorStack()
-    result = c_tango.tango_create_device_proxy(dev_name, _ref(dev_ptr), _ref(err_stack))
-    if result:
-        return dev_ptr
-    raise Exception(err_stack)
-
-def tango_delete_device_proxy(dev_ptr):
-    err_stack = ErrorStack()
-    result = c_tango.tango_delete_device_proxy(_ref(dev_ptr), _ref(err_stack))
-    if result:
-        return True
-    raise Exception(err_stack)
-
-def tango_set_timeout_millis(dev_ptr, millis):
-    err_stack = ErrorStack()
-    millis = ctypes.c_int(millis)
-    result = c_tango.tango_set_timeout_millis(dev_ptr, millis, _ref(err_stack))
-    if result:
-        return True
-    raise Exception(err_stack)    
-
-def tango_get_timeout_millis(dev_ptr):
-    err_stack = ErrorStack()
-    millis = ctypes.c_int()
-    result = c_tango.tango_get_timeout_millis(dev_ptr, _ref(millis), _ref(err_stack))
-    if result:
-        return millis
-    raise Exception(err_stack)      
-
-def tango_set_source(dev_ptr, src):
-    """src -> DevSource"""
-    err_stack = ErrorStack()
-    result = c_tango.tango_set_source(dev_ptr, src, _ref(err_stack))
-    if result:
-        return True
-    raise Exception(err_stack)   
-    
-def tango_get_source(dev_ptr):
-    err_stack = ErrorStack()
-    src = ctypes.c_int()
-    result = c_tango.tango_get_source(dev_ptr, _ref(src), _ref(err_stack))
-    if result:
-        return src
-    raise Exception(err_stack)
-    
-def tango_command_query(dev_ptr, cmd_name):
-    err_stack = ErrorStack()
-    cmd_name = ctypes.create_string_buffer(cmd_name)
-    cmd_info = CommandInfo()
-    result = c_tango.tango_command_query(dev_ptr, cmd_name, _ref(cmd_info), _ref(err_stack))
-    if result:
-        return cmd_info
-    raise Exception(err_stack)    
-
-def tango_command_list_query(dev_ptr):
-    err_stack = ErrorStack()
-    cmd_info_list = CommandInfoList()
-    result = c_tango.tango_command_list_query(dev_ptr, _ref(cmd_info_list), _ref(err_stack))
-    if result:
-        return cmd_info_list
-    raise Exception(err_stack)    
-
-def tango_command_inout(dev_ptr, cmd_name, arg_in):
-    """arg_in->CommandData"""
-    err_stack = ErrorStack()
-    cmd_name = ctypes.create_string_buffer(cmd_name)
-    arg_out = CommandData()
-    result = c_tango.tango_command_inout(dev_ptr, cmd_name, _ref(arg_in), _ref(arg_out), _ref(err_stack))
-    if result:
-        return arg_out
-    raise Exception(err_stack)  
-    
-def tango_free_CommandData(cmd_data):
-    c_tango.tango_free_CommandData(_ref(cmd_data))
-
-def tango_free_CommandInfo(cmd_info):
-    c_tango.tango_free_CommandInfo(_ref(cmd_info))
-    
-def tango_free_CommandInfoList(cmd_info_list):
-    c_tango.tango_free_CommandInfoList(_ref(cmd_info_list))
-
-def tango_get_attribute_list(dev_ptr):
-    err_stack = ErrorStack()
-    attr_names = VarStringArray()
-    result = c_tango.tango_get_attribute_list(dev_ptr, _ref(attr_names), _ref(err_stack))
-    if result:
-        return attr_names
-    raise Exception(err_stack)  
-    
-def tango_get_attribute_config(dev_ptr, attr_names):
-    print "TODO"
-    return
-    err_stack = ErrorStack()
-    attr_names = VarStringArray()
-    attr_info_list = AttributeInfoList()
-    result = c_tango.tango_get_attribute_config(dev_ptr, _ref(attr_names), _ref(attr_info_list), _ref(err_stack))
-    if result:
-        return attr_info_list
-    raise Exception(err_stack)  
-    
-def tango_attribute_list_query(dev_ptr):
-    err_stack = ErrorStack()
-    attr_info_list = AttributeInfoList()
-    result = c_tango.tango_attribute_list_query(dev_ptr, _ref(attr_info_list), _ref(err_stack))
-    if result:
-        return attr_info_list
-    raise Exception(err_stack) 
-    
-def tango_read_attribute(dev_ptr, attr_name):
-    attr_name = ctypes.create_string_buffer(attr_name)
-    attr_data = AttributeData()
-    err_stack = ErrorStack()
-    result = c_tango.tango_read_attribute(dev_ptr, attr_name, _ref(attr_data), _ref(err_stack))    
-    if result:
-        return attr_data
-    raise Exception(err_stack)
-
-def tango_write_attribute(dev_ptr, attr_name, value):
-    print "TODO"
-    return
-    attr_data = AttributeData()
-    attr_data.name = ctypes.create_string_buffer(attr_name)
-    attr_data.attr_data = value
-    err_stack = ErrorStack()
-    result = c_tango.tango_write_attribute(dev_ptr, attr_name, _ref(attr_data), _ref(err_stack))    
-    if result:
-        return True
-    raise Exception(err_stack)
-
-def tango_read_attributes(dev_ptr, attr_names):
-    print "TODO"
-    return
-    attr_data_list = AttributeDataList()
-    attr_names = VarStringArray()
-    err_stack = ErrorStack()
-    result = c_tango.tango_read_attribute(dev_ptr, _ref(attr_names), _ref(attr_data_list), _ref(err_stack))    
-    if result:
-        return attr_data
-    raise Exception(err_stack)
-    
-def tango_write_attributes(dev_ptr, attr_data_list):
-    """attr_data_list->AttributeDataList"""
-    err_stack = ErrorStack()
-    result = c_tango.tango_write_attributes(dev_ptr, _ref(attr_data_list), _ref(err_stack))    
-    if result:
-        return True
-    raise Exception(err_stack)
-    
-def tango_free_AttributeData(attr_data):
-    c_tango.tango_free_AttributeData(_ref(attr_data))
-    
-def tango_free_AttributeDataList(attr_data_list):
-    c_tango.tango_free_AttributeDataList(_ref(attr_data_list))
-    
-def tango_free_VarStringArray(str_array):
-    c_tango.tango_free_VarStringArray(_ref(str_array))
-
-def tango_print_ErrorStack(err_stack):
-    """Should not be used. This function prints to STDOUT instead of sys.stdout.
-       Use: 'print err_stack' instead"""
-    c_tango.tango_print_ErrorStack(_ref(err_stack))
-
-def tango_free_ErrorStack(err_stack):
-    c_tango.tango_free_ErrorStack(_ref(err_stack))
-
-def tango_create_database_proxy():
-    err_stack = ErrorStack()
-    db_ptr = ctypes.c_void_p()
-    result = c_tango.tango_create_database_proxy(_ref(db_ptr), _ref(err_stack))    
-    if result:
-        return db_ptr
-    raise Exception(err_stack)
-
-def tango_delete_database_proxy(db_ptr):
-    err_stack = ErrorStack()
-    result = c_tango.tango_delete_database_proxy(_ref(db_ptr), _ref(err_stack))    
-    if result:
-        return True
-    raise Exception(err_stack)
-
-def tango_get_device_exported(db_ptr, name_filter):
-    err_stack = ErrorStack()
-    name_filter = ctypes.create_string_buffer(name_filter)
-    db_datum = DbDatum()
-    result = c_tango.tango_get_device_exported(db_ptr, name_filter, _ref(db_datum), _ref(err_stack))    
-    if result:
-        return db_datum
-    raise Exception(err_stack)
-
-def tango_get_device_exported_for_class(db_ptr, class_name):
-    err_stack = ErrorStack()
-    class_name = ctypes.create_string_buffer(class_name)
-    db_datum = DbDatum()
-    result = c_tango.tango_get_device_exported_for_class(db_ptr, class_name, _ref(db_datum), _ref(err_stack))    
-    if result:
-        return db_datum
-    raise Exception(err_stack)
-
-def tango_get_object_list(db_ptr, name_filter):
-    err_stack = ErrorStack()
-    name_filter = ctypes.create_string_buffer(name_filter)
-    db_datum = DbDatum()
-    result = c_tango.tango_get_object_list(db_ptr, name_filter, _ref(db_datum), _ref(err_stack))    
-    if result:
-        return db_datum
-    raise Exception(err_stack)
-
-def tango_get_object_property_list(db_ptr, obj_name, name_filter):
-    err_stack = ErrorStack()
-    obj_name = ctypes.create_string_buffer(obj_name)
-    name_filter = ctypes.create_string_buffer(name_filter)
-    db_datum = DbDatum()
-    result = c_tango.tango_get_object_property_list(db_ptr, obj_name, name_filter, _ref(db_datum), _ref(err_stack))    
-    if result:
-        return db_datum
-    raise Exception(err_stack)
-
-def tango_get_property(db_ptr, obj_name):
-    err_stack = ErrorStack()
-    obj_name = ctypes.create_string_buffer(obj_name)
-    db_data = DbData()
-    result = c_tango.tango_get_property(db_ptr, obj_name, _ref(db_data), _ref(err_stack))    
-    if result:
-        return db_datum
-    raise Exception(err_stack)
-
-def tango_put_property(db_ptr, obj_name, prop_list):
-    """prop_list -> DbData"""
-    err_stack = ErrorStack()
-    obj_name = ctypes.create_string_buffer(obj_name)
-    result = c_tango.tango_put_property(db_ptr, obj_name, _ref(prop_list), _ref(err_stack))    
-    if result:
-        return True
-    raise Exception(err_stack)
-
-def tango_delete_property(db_ptr, obj_name, prop_list):
-    """prop_list -> DbData"""
-    err_stack = ErrorStack()
-    obj_name = ctypes.create_string_buffer(obj_name)
-    result = c_tango.tango_delete_property(db_ptr, obj_name, _ref(prop_list), _ref(err_stack))    
-    if result:
-        return True
-    raise Exception(err_stack)
-    
-def tango_get_device_property(dev_ptr, prop_list):
-    """prop_list -> DbData"""
-    err_stack = ErrorStack()
-    result = c_tango.tango_get_device_property(dev_ptr, _ref(prop_list), _ref(err_stack))    
-    if result:
-        return prop_list
-    raise Exception(err_stack)
-
-def tango_put_device_property(dev_ptr, prop_list):
-    """prop_list -> DbData"""
-    err_stack = ErrorStack()
-    result = c_tango.tango_put_device_property(dev_ptr, _ref(prop_list), _ref(err_stack))    
-    if result:
-        return True
-    raise Exception(err_stack)
-
-def tango_delete_device_property(dev_ptr, prop_list):
-    """prop_list -> DbData"""
-    err_stack = ErrorStack()
-    result = c_tango.tango_delete_device_property(dev_ptr, _ref(prop_list), _ref(err_stack))    
-    if result:
-        return True
-    raise Exception(err_stack)
-
-def tango_free_DbDatum(db_datum):
-    c_tango.tango_free_DbDatum(_ref(db_datum))
-    
-def tango_free_DbData(db_data):
-    c_tango.tango_free_DbData(_ref(db_data))
-
-
-class DeviceProxy:
-    def __init__(self, dev_name):
-        self._dev_name = dev_name
-        self._dev = tango_create_device_proxy(dev_name)
-        
-    def read_attribute(self, attr_name):
-        return tango_read_attribute(self._dev, attr_name)
-
-    def write_attribute(self, attr_name, value):
-        return tango_read_attribute(self._dev, attr)
-        
-    def read_attributes(self, attr_name_list):
-        return tango_read_attributes(self._dev, attr_name_list)
-        
-    def get_property(self, attr_name_list):
-        if isinstance(attr_name_list, str):
-            attr_name_list = [ attr_name_list ]
-        n = len(attr_name_list)
-        db_data = DbData()
-        db_data.length = n
-        db_data.sequence = (n*DbDatum)()
-        for i in xrange(n):
-            db_data.sequence[i].property_name = attr_name_list[i]
-            db_data.sequence[i].data_type = DEV_STRING
-        return tango_get_device_property(self._dev, db_data)
-
-    def __del__(self):
-        try:
-            if self._dev:
-                try:
-                    tango_delete_device_proxy(self._dev)
-                except Exception, e:
-                    print e
-        except AttributeError:
-            #The error was in the constructor and therefore _dev is not defined
-            pass
-
diff --git a/cPyTango/enumeration.py b/cPyTango/enumeration.py
deleted file mode 100644
index 006bea6..0000000
--- a/cPyTango/enumeration.py
+++ /dev/null
@@ -1,109 +0,0 @@
-################################################################################
-##
-## This file is part of Taurus, a Tango User Interface Library
-## 
-## 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/>.
-##
-################################################################################
-
-import types
-
-""" 
-  Enumeration module.
-  In C, enums allow you to declare a bunch of constants with unique values,
-  without necessarily specifying the actual values (except in cases where you
-  need to). Python has an accepted idiom that's fine for very small numbers of
-  constants (A, B, C, D = range(4)) but it doesn't scale well to large numbers,
-  and it doesn't allow you to specify values for some constants while leaving
-  others unspecified. This approach does those things, while verifying that all
-  values (specified and unspecified) are unique. Enum values then are attributes
-  of an Enumeration class (Volkswagen.BEETLE, Volkswagen.PASSAT, etc.).
-"""
-    
-
-class Enumeration:
-    """ Enumeration class intended to provide the 'enum' feature present in many 
-        programming languages.
-        Usage:
-        car = ThingWithType(Volkswagen.BEETLE)
-        print whatkind(car.type, Volkswagen)
-        bug = ThingWithType(Insect.BEETLE)
-        print whatkind(bug.type, Insect)
-
-        Notice that car's and bug's attributes don't include any of the
-        enum machinery, because that machinery is all CLASS attributes and
-        not INSTANCE attributes. So you can generate thousands of cars and
-        bugs with reckless abandon, never worrying that time or memory will
-        be wasted on redundant copies of the enum stuff.
-
-        print car.__dict__
-        print bug.__dict__
-        pprint.pprint(Volkswagen.__dict__)
-        pprint.pprint(Insect.__dict__)
-        """
-        
-    def __init__(self, name, enumList):
-        self.__doc__ = name
-        lookup = { }
-        reverseLookup = { }
-        uniqueNames = [ ]
-        self._uniqueValues = uniqueValues = [ ]
-        self._uniqueId = 0
-        for x in enumList:
-            if type(x) == types.TupleType:
-                x, i = x
-                if type(x) != types.StringType:
-                    raise EnumException, "enum name is not a string: " + x
-                if type(i) != types.IntType:
-                    raise EnumException, "enum value is not an integer: " + i
-                if x in uniqueNames:
-                    raise EnumException, "enum name is not unique: " + x
-                if i in uniqueValues:
-                    raise EnumException, "enum value is not unique for " + x
-                uniqueNames.append(x)
-                uniqueValues.append(i)
-                lookup[x] = i
-                reverseLookup[i] = x
-        for x in enumList:
-            if type(x) != types.TupleType:
-                if type(x) != types.StringType:
-                    raise EnumException, "enum name is not a string: " + x
-                if x in uniqueNames:
-                    raise EnumException, "enum name is not unique: " + x
-                uniqueNames.append(x)
-                i = self.generateUniqueId()
-                uniqueValues.append(i)
-                lookup[x] = i
-                reverseLookup[i] = x
-        self.lookup = lookup
-        self.reverseLookup = reverseLookup
-   
-    def generateUniqueId(self):
-        while self._uniqueId in self._uniqueValues:
-            self._uniqueId += 1
-        n = self._uniqueId
-        self._uniqueId += 1
-        return n
-    
-    def __getattr__(self, attr):
-        if not self.lookup.has_key(attr):
-            raise AttributeError
-        return self.lookup[attr]
-    
-    def whatis(self, value):
-        return self.reverseLookup[value]
diff --git a/ci/ALBA/build.sh b/ci/ALBA/build.sh
new file mode 100755
index 0000000..5b490d5
--- /dev/null
+++ b/ci/ALBA/build.sh
@@ -0,0 +1,105 @@
+#!/bin/bash
+
+if [ ! -z "$NODE_NAME" -a -f "$NODE_NAME" ]
+then
+	source "$NODE_NAME"
+else
+	echo "The settings file for the node $NODE_NAME does not exist!"
+	echo "Create ci/$INSTITUTE/$NODE_NAME file."
+	exit 1
+fi
+
+export TANGO_ROOT=/tmp/jenkins/jobs/TangoLib
+
+cd ../..
+
+python setup.py build
+
+if [ $? != 0 ]
+then
+	exit $?
+fi
+
+python setup.py install --prefix=/tmp/jenkins/jobs/PyTango
+
+exit $?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+echo LOG4TANGO_ROOT
+echo $LOG4TANGO_ROOT
+echo OMNI_ROOT
+echo $OMNI_ROOT
+echo BOOST_ROOT
+echo $BOOST_ROOT
+echo ZMQ_ROOT
+echo $ZMQ_ROOT
+
+echo C_INCLUDE_PATH
+echo $C_INCLUDE_PATH
+
+echo CPLUS_INCLUDE_PATH
+echo $CPLUS_INCLUDE_PATH
+
+echo CPATH
+echo $CPATH
+
+export CPATH=/tmp/jenkins/jobs/TangoLib/include
+export C_INCLUDE_PATH=/tmp/jenkins/jobs/TangoLib/include:$C_INCLUDE_PATH
+export CPLUS_INCLUDE_PATH=/tmp/jenkins/jobs/TangoLib/include:$CPLUS_INCLUDE_PATH
+
+export TANGO_ROOT=/tmp/jenkins/jobs/TangoLib
+
+
+export LD_LIBRARY_PATH=/tmp/jenkins/jobs/TangoLib/lib:$LD_LIBRARY_PATH
+
+
+echo $LD_LIBRARY_PATH
+echo $CPLUS_INCLUDE_PATH
+
+
+cd ../..
+
+pwd
+
+make user=1 prefix=/tmp/jenkins/jobs install
+
+make user=1 prefix=/tmp/jenkins/jobs install
+
+export PYTHONPATH=/tmp/jenkins/jobs/PyTango:$PYTHONPATH
+
+echo $PYTHONPATH
+
+python tests/DevTest.py pytomasz &
+
+python tests/TestSuite.py
+
+ps -ef | awk '/DevTest.py/ {print$2}' | xargs kill -9
diff --git a/ci/ALBA/ct32suse11 b/ci/ALBA/ct32suse11
new file mode 100644
index 0000000..b554091
--- /dev/null
+++ b/ci/ALBA/ct32suse11
@@ -0,0 +1,4 @@
+export LOG4TANGO_ROOT=/siciliarep/build/lib/log4tango/log4tango.suse111.32
+export OMNI_ROOT=/siciliarep/build/lib/omniORB/omniORB.suse111.32
+export BOOST_ROOT=/siciliarep/build/lib/boost/boost.suse111.32
+export ZMQ_ROOT=/siciliarep/build/lib/zeromq/zeromq.suse111.32
\ No newline at end of file
diff --git a/ci/ALBA/ct64suse11 b/ci/ALBA/ct64suse11
new file mode 100644
index 0000000..e0e962b
--- /dev/null
+++ b/ci/ALBA/ct64suse11
@@ -0,0 +1,4 @@
+export LOG4TANGO_ROOT=/siciliarep/build/lib/log4tango/log4tango.suse111.64
+export OMNI_ROOT=/siciliarep/build/lib/omniORB/omniORB.suse111.64
+export BOOST_ROOT=/siciliarep/build/lib/boost/boost.suse111.64
+export ZMQ_ROOT=/siciliarep/build/lib/zeromq/zeromq.suse11.64
diff --git a/ci/ALBA/ct64suse121 b/ci/ALBA/ct64suse121
new file mode 100644
index 0000000..31d94a6
--- /dev/null
+++ b/ci/ALBA/ct64suse121
@@ -0,0 +1,4 @@
+export LOG4TANGO_ROOT=/siciliarep/build/lib/log4tango/log4tango.suse121.64
+export OMNI_ROOT=/siciliarep/build/lib/omniORB/omniORB.suse121.64
+export BOOST_ROOT=/siciliarep/build/lib/boost/boost.suse121.64
+export ZMQ_ROOT=/siciliarep/build/lib/zeromq/zeromq.suse121.64
\ No newline at end of file
diff --git a/ci/ESRF/build.sh b/ci/ESRF/build.sh
new file mode 100755
index 0000000..1b35769
--- /dev/null
+++ b/ci/ESRF/build.sh
@@ -0,0 +1,109 @@
+#!/bin/bash
+#export CYGWIN="${CYGWIN} nodosfilewarning"
+INSTALL_DIR=/segfs/tango/ci/PyTango
+
+if [ ! -z "$NODE_NAME" -a -f "$NODE_NAME" ]
+then
+	echo $NODE_NAME
+	if [ $NODE_NAME != "ct32windows7" ]
+	then
+        source "$NODE_NAME"
+    fi
+else
+    echo "The settings file for the node $NODE_NAME does not exist!"
+    echo "Create ci/$INSTITUTE/$NODE_NAME file."
+fi
+
+cd ../..
+#used system by default
+
+rm -rf build/*
+
+print $realos
+case "${realos}" in
+	"debian"*)
+		#debian6/7
+        /usr/bin/python setup.py build
+		;; 
+	"redhate"*)
+        #redhate4/5
+        /segfs/bliss/bin/python2.6 setup.py build
+        ;;
+	"windows7")
+		cd /cygdrive/c
+        export PATH=$PATH:/cygdrive/c/Program\ Files\ \(x86\)/Microsoft\ Visual\ Studio\ 9.0/Common7/IDE 
+        #export PATH=$PATH:/cygdrive/c/Windows/Microsoft.Net/Framework64/v4.0.30319
+		/bin/rm -rf /cygdrive/c/pytango
+		LIBNAME="PyTango.vcproj"
+		pyVersion="py26 py27"
+		platform="Win32 x64"
+		SLN="C:\jenkins\workspace\PyTango\OperatingSystems\Windows64-VC10\win\PyTango_VS9\PyTango.sln"
+		LIBNAME="PyTango.vcproj"
+		for pv in $pyVersion
+		do
+		    for p in $platform
+		    do
+		        pyN=${pv:2:4}
+			    MODE=$pv"_bopystatic_tangostatic_release|"$p
+			    OUTFILE="c:/Temp/log_"${p}"_"${pyN}
+                echo "BUILD_"$pv"_"$p
+                if [ "$pyN" -eq 33 ]
+                then
+                    SLN="C:\jenkins\workspace\PyTango\OperatingSystems\Windows64-VC10\win\PyTango_VS10"
+					MODE=$pv"_bopystatic_tangostatic_release"
+					MAKE_CMD="MSBuild.exe $SLN/PyTango.vcxproj /p:Platform=$p /t:rebuild /p:Configuration=$MODE /v:quiet /flp:LogFile=$OUTFILE;Summary;ShowCommandLine;Verbosity=minimal"
+                    #MsBuild.exe $SLN /t:Rebuild /p:Configuration=py33_bopystatic_tangostatic_release /p:Platform=x86 /flp:LogFile=C:/Temp/log_
+                else          
+			        MAKE_CMD="devenv.exe $SLN /project PyTango.vcproj /rebuild $MODE /projectconfig $MODE /out $OUTFILE"
+                fi
+			    $MAKE_CMD
+		    done
+		done
+        ;;
+	*)
+		echo "Build - Not supporting operating system: " ${OSTYPE}
+        exit $?
+		;;
+esac
+
+if [ $? != 0 ]
+then
+	exit $?
+fi
+
+case "${realos}" in
+	"debian6_64")
+        rm -rf $INSTALL_DIR/debian6/*
+		/usr/bin/python setup.py install --prefix=$INSTALL_DIR/debian6
+		;; 
+	"debian7_64")
+        rm -rf $INSTALL_DIR/debian7/*
+		/usr/bin/python setup.py install --prefix=$INSTALL_DIR/debian7
+		;; 
+	"redhate4_32")
+        rm -rf $INSTALL_DIR/redhate4/*
+		/segfs/bliss/bin/python2.6 setup.py install --prefix=$INSTALL_DIR/redhate4
+		;;
+	"redhate5_64")
+        rm -rf $INSTALL_DIR/redhate5/*
+		/segfs/bliss/bin/python2.6 setup.py install --prefix=$INSTALL_DIR/redhate5
+		;;
+    "windows7"*)
+		INSTALL_DIR="//unixhome/segfs/tango/ci/PyTango/windows7"
+		/bin/rm -rf $INSTALL_DIR/* || echo "Error executing rm command"
+        /bin/cp -rf /cygdrive/c/pytango/build_8.1.2_tg8.1.2_boost1.53.0/lib  $INSTALL_DIR || echo "Error executing cp command, LIB"
+		/bin/cp -rf /cygdrive/c/pytango/build_8.1.2_tg8.1.2_boost1.53.0/dist  $INSTALL_DIR || echo "Error executing cp command, DIST"
+		/bin/chmod -R 755  $INSTALL_DIR || echo "Error executing chmod command"
+        ;;
+	*)
+		echo "Install - Not supporting operating system: " ${OSTYPE}
+        exit $?
+		;;
+esac
+
+
+exit $?
+
+
+
+
diff --git a/ci/ESRF/ct32redhate4 b/ci/ESRF/ct32redhate4
new file mode 100644
index 0000000..a3398fb
--- /dev/null
+++ b/ci/ESRF/ct32redhate4
@@ -0,0 +1,7 @@
+export realos=redhate4_32
+export BOOST_ROOT=/segfs/bliss/source/python/PyTango/PyTango7/redhate4
+export OMNI_ROOT=/segfs/tango/release/redhate4
+export TANGO_ROOT=/segfs/tango/release/redhate4
+export NUMPY_ROOT=/segfs/bliss/depot/pythonbliss_5.0/installdir/redhate4/python/lib/python2.6/site-packages/numpy/core
+export LD_LIBRARY_PATH=/segfs/tango/release/redhate4/lib:${LD_LIBRARY_PATH}
+export PKG_CONFIG_PATH=/segfs/tango/release/redhate4/lib/pkgconfig
diff --git a/ci/ESRF/ct32windows7 b/ci/ESRF/ct32windows7
new file mode 100644
index 0000000..acb52d1
--- /dev/null
+++ b/ci/ESRF/ct32windows7
@@ -0,0 +1,5 @@
+SETX realos windows7
+SETX BOOST_ROOT "C:\Program File (x86)\boost\boost_1_47"
+SETX TANGO_ROOT "C:\Users\falconto\tango\VC9\win32" 
+SETX OMNI_ROOT "C:\Users\falconto\tango\VC9\win32"
+SETX NUMPY_ROOT "C:\Python_27_32\Lib\site-packages\core"
diff --git a/ci/ESRF/ct64debian6 b/ci/ESRF/ct64debian6
new file mode 100644
index 0000000..3b3f030
--- /dev/null
+++ b/ci/ESRF/ct64debian6
@@ -0,0 +1,7 @@
+export realos=debian6_64
+export BOOST_ROOT=/usr/lib
+export OMNI_ROOT=/segfs/tango/release/debian6
+export TANGO_ROOT=/segfs/tango/release/debian6
+export NUMPY_ROOT=/usr/lib/pymodules/python2.6/numpy/core
+export LD_LIBRARY_PATH=/segfs/tango/release/debian6/lib:${LD_LIBRARY_PATH}
+export PKG_CONFIG_PATH=/segfs/tango/release/debian6/lib/pkgconfig
diff --git a/ci/ESRF/ct64debian7 b/ci/ESRF/ct64debian7
new file mode 100644
index 0000000..cbe5469
--- /dev/null
+++ b/ci/ESRF/ct64debian7
@@ -0,0 +1,8 @@
+export realos=debian7_64
+export BOOST_ROOT=/usr/lib
+export NUMPY_ROOT=/usr/lib/pyshared/python2.6/numpy/core
+export OMNI_ROOT=/bliss/users/falconto/install/install_dir/tango8
+export TANGO_ROOT=/bliss/users/falconto/install/install_dir/tango8
+export ZMQ_ROOT=/bliss/users/falconto/install/install_dir/zmq
+export LD_LIBRARY_PATH=/bliss/users/falconto/install/install_dir/tango8/lib:/bliss/users/falconto/install/install_dir/zmq/lib:$LD_LIBRARY_PATH
+export PKG_CONFIG_PATH=/bliss/users/falconto/install/install_dir/tango8/lib/pkgconfig
diff --git a/ci/ESRF/ct64redhate5 b/ci/ESRF/ct64redhate5
new file mode 100644
index 0000000..dc91f7b
--- /dev/null
+++ b/ci/ESRF/ct64redhate5
@@ -0,0 +1,7 @@
+export realos=redhate5_64
+export BOOST_ROOT=/segfs/bliss/source/python/PyTango/PyTango7/redhate5
+export OMNI_ROOT=/segfs/tango/release/redhate5
+export TANGO_ROOT=/segfs/tango/release/redhate5
+export NUMPY_ROOT=/segfs/bliss/depot/pythonbliss_5.0/installdir/redhate5/python/lib/python2.6/site-packages/numpy/core
+export LD_LIBRARY_PATH=/segfs/tango/release/redhate5/lib:${LD_LIBRARY_PATH}
+export PKG_CONFIG_PATH=/segfs/tango/release/redhate5/lib/pkgconfig
diff --git a/ci/README b/ci/README
new file mode 100644
index 0000000..f089f1d
--- /dev/null
+++ b/ci/README
@@ -0,0 +1,48 @@
+How to set up PyTango job in Mr Jenkins
+---------------------------------------
+
+1. Go to 'Manage Jenkins' -> 'Configure System' -> 'Global properties', tick 'Environment variables' and add a new pare name: INSTITUTE, value: YOURINSTITUTENAME. Having it done Mr Jenkins will automatically set an environmental variable 'INSTITUTE' with the provided value on every machine it builds the project.
+
+2. 'Create a new job' and name it PyTango. Tick 'Build multi-configuration project'.
+
+3. Add 'Description' - what the project is, what are the deliverables (libs, binaries...) and paths where the deliverables are stored. Configure your build script (described below) so the deliverables end up in a directory /tmp/jenkins/jobs/PyTango (just a convention).
+
+4. In S'ource Code Management' tick 'Subversion' and provide the 'Repository URL' to the trunk (https://tango-cs.svn.sourceforge.net/svnroot/tango-cs/bindings/PyTango/trunk). In the Local module directory input field enter dot (.). Thanks to this, the temporary bash file created by Mr Jenkins will be executed from the directory in which the project files are stored on the slave machines - which provides you an easy access to your build scripts.
+
+5. In 'Build Triggers' tick 'Build after other projects are built' if you want to trigger the build of PyTango job after another project is build (e.g. TangoLib) and provide the 'Project name'. If you want to schedule a build at a particular days and hours, tick 'Poll SCM'. Acquaint yourself with the syntax by clicking the question mark icon on the right hand side.
+
+6. If you want to build your the project on different machines, testing its compatibility with numerous operating systems, etc. use the 'Configuration Matrix'. 'Add axis', choose 'Slaves', change the 'name' to SLAVE, tick nodes of your choice (the project will be build just on the nodes you choose). If you want to build your project in various ways (e.g. the debug and release versions) 'Add axis' choose 'User-defined axis' and provide a 'name' (e.g. DEBUGMODE) and space separated values  [...]
+
+7. Go to 'Build' choose 'Execute shell' and enter:
+	cd ci
+	./build.sh
+   If the configuration of Mr Jenkins was done following the aforementioned steps, this will execute the build script tailored for your INSTITUTE. More about the build script and the ci directory file structure below.
+   
+8. Go to 'Post-build Actions' and choose 'E-mail Notification' to inform you about any broken builds.
+
+
+Appendix A
+The 'ci' folder structure and the build script.
+
+In the 'ci' folder there is a 'build.sh' script. This is a default script and can be copied to any new project to support Continuous Integration with the use of Mr Jenkins in different institutes.
+
+The 'build.sh' script simply checks if Mr Jenkins has set up the INSTITUTE environmental variable (look point 1.) and whether in the 'ci' folder exists a directory named 'YOURINSTITUTENAME'. If so, the 'build.sh' enters the YOURINSTITUTENAME directory and executes a 'build.sh' script within it. This is an institute tailored build script.
+
+The 'YOURINSTITUTENAME/build.sh' script contains the recipe of how to build the project in your institute.
+
+If you build the project on different machines and systems it is quite likely that the configuration of the build will be different for different nodes (slaves, machines, hosts).
+For this purpose node dependent properties files have been introduced. The idea is that in the 'YOURINSTITUTENAME' there should be a file for each node used by Mr Jenkins. The file should have the same name as the node name, e.g. 'mynode'. Mr Jenkins automatically sets up an environmental variable called 'NODE_NAME' on each machine it executes a job. The NODE_NAME is the name defined in 'Manage Jenkins' -> 'Manage Nodes' -> 'Name' and this name should be given to the properties file name.
+The below code manages the node properties files:
+
+if [ ! -z "$NODE_NAME" -a -f "$NODE_NAME" ]
+then
+	source "$NODE_NAME"
+else
+	echo "The settings file for the node $NODE_NAME does not exist!"
+	echo "Create ci/$INSTITUTE/$NODE_NAME file."
+	exit 1
+fi
+
+If the file '$NODE_NAME' exists in the 'YOURINSTITUTENAME' directory its content is sourced in the 'build.sh' file and therefore all the variables set in the file are available in the build script.
+
+To make use of them, write your 'build.sh' script in the most generic way you can. When you need to put a node dependent configuration, use a variable. Set a value of this variable in the node properties file (providing different values for different nodes). This way configuring you build after adding or removing a node is limited to simply adding or removing a file in the 'YOURINSTITUTENAME' directory.
diff --git a/ci/build.sh b/ci/build.sh
new file mode 100755
index 0000000..9ea91e1
--- /dev/null
+++ b/ci/build.sh
@@ -0,0 +1,20 @@
+#!/bin/bash
+
+if [ ! -z "$INSTITUTE" -a -d "$INSTITUTE" -a -f "$INSTITUTE/build.sh" ]
+then
+	echo "Executing build.sh for $INSTITUTE"
+	cd "$INSTITUTE"
+	./build.sh
+	exit $?
+else
+	if [ ! -z "$INSTITUTE" ]
+	then
+		echo "Failed to execute ci/$INSTITUTE/build.sh !"
+		echo "Make sure ci/$INSTITUTE/build.sh exists"
+	else
+		echo "Mr Jenkins needs additional configuration!"
+		echo "Go to Jenkins dashboard -> Manage Jenkins -> Global Properties, tick Environment Variables and add a key-value pair: name - INSTITUTE, value - YourInstituteName."
+		echo "Check out the project. Go to the 'ci' directory and create a 'YourInstituteName' subdirectory. In the 'YourInstituteName' subdirectory create a 'build.sh' file which will contain the recipe how to build your project. Make the 'build.sh' file executable. Commit changes."
+	fi
+	exit 1
+fi
diff --git a/doc/_static/PowerSupplyDS.py b/doc/_static/PowerSupplyDS.py
index e5b8e0d..8dd6fd7 100644
--- a/doc/_static/PowerSupplyDS.py
+++ b/doc/_static/PowerSupplyDS.py
@@ -6,9 +6,9 @@
 import time
 import numpy
 
-from PyTango import AttrQuality, AttrWriteType, DispLevel, DevState, DebugIt
-from PyTango.server import Device, DeviceMeta, attribute, command, run
-from PyTango.server import device_property
+from tango import AttrQuality, AttrWriteType, DispLevel, DevState, DebugIt
+from tango.server import Device, DeviceMeta, attribute, command, pipe, run
+from tango.server import device_property
 
 
 class PowerSupply(Device):
@@ -35,6 +35,8 @@ class PowerSupply(Device):
                       dtype=((int,),),
                       max_dim_x=1024, max_dim_y=1024)
 
+    info = pipe(label='Info')
+
     host = device_property(dtype=str)
     port = device_property(dtype=int, default_value=9788)
     
@@ -54,6 +56,11 @@ class PowerSupply(Device):
         # should set the power supply current
         self.__current = current
 
+    def read_info(self):
+        return 'Information', dict(manufacturer='Tango',
+                                   model='PS2000',
+                                   version_number=123)
+
     @DebugIt()
     def read_noise(self):
         return numpy.random.random_integers(1000, size=(100, 100))
diff --git a/doc/_static/boost_python_install.py b/doc/_static/boost_python_install.py
index 381b219..5895e38 100644
--- a/doc/_static/boost_python_install.py
+++ b/doc/_static/boost_python_install.py
@@ -1,5 +1,5 @@
 # ------------------------------------------------------------------------------
-# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+# This file is part of PyTango (http://pytango.rtfd.io)
 #
 # Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
 # Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
diff --git a/doc/_static/itango.ico b/doc/_static/itango.ico
deleted file mode 100644
index eb8e2dc..0000000
Binary files a/doc/_static/itango.ico and /dev/null differ
diff --git a/doc/_static/itango.png b/doc/_static/itango.png
deleted file mode 100644
index b4cd925..0000000
Binary files a/doc/_static/itango.png and /dev/null differ
diff --git a/doc/_static/itango01.png b/doc/_static/itango01.png
deleted file mode 100644
index 0fff50e..0000000
Binary files a/doc/_static/itango01.png and /dev/null differ
diff --git a/doc/_static/itango02.png b/doc/_static/itango02.png
deleted file mode 100644
index d50c853..0000000
Binary files a/doc/_static/itango02.png and /dev/null differ
diff --git a/doc/_static/itango03.png b/doc/_static/itango03.png
deleted file mode 100644
index 5c6cf90..0000000
Binary files a/doc/_static/itango03.png and /dev/null differ
diff --git a/doc/_static/itango04.png b/doc/_static/itango04.png
deleted file mode 100644
index f8c7a5b..0000000
Binary files a/doc/_static/itango04.png and /dev/null differ
diff --git a/doc/_static/itango05.png b/doc/_static/itango05.png
deleted file mode 100644
index 8e8d7fb..0000000
Binary files a/doc/_static/itango05.png and /dev/null differ
diff --git a/doc/_static/itango06.png b/doc/_static/itango06.png
deleted file mode 100644
index 60d346d..0000000
Binary files a/doc/_static/itango06.png and /dev/null differ
diff --git a/doc/_static/default.css b/doc/_static/pytango.css
similarity index 87%
rename from doc/_static/default.css
rename to doc/_static/pytango.css
index db3b120..071071d 100644
--- a/doc/_static/default.css
+++ b/doc/_static/pytango.css
@@ -1,8 +1,13 @@
-/**
- * Sphinx stylesheet -- sphinxdoc theme
- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+/*
+ * sphinxdoc.css_t
+ * ~~~~~~~~~~~~~~~
+ *
+ * Sphinx stylesheet -- sphinxdoc theme.  Originally created by
+ * Armin Ronacher for Werkzeug.
+ *
+ * :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS.
+ * :license: BSD, see LICENSE for details.
  *
- * Originally created by Armin Ronacher for Werkzeug, adapted by Georg Brandl.
  */
 
 @import url("basic.css");
@@ -21,7 +26,7 @@ body {
     padding: 0;
     border: 1px solid #aaa;
 
-    margin: 0px 40px 0px 40px;
+    margin: 0px 20px 0px 20px;
     min-width: 740px;
 }
 
@@ -43,7 +48,7 @@ div.body {
 }
 
 div.related {
-    font-size: 12px;
+    font-size: 1em;
 }
 
 div.related ul {
@@ -199,20 +204,20 @@ a.headerlink:hover {
     color: white!important;
 }
 
-cite, code, tt {
+cite, code, code {
     font-family: 'Consolas', 'Deja Vu Sans Mono',
                  'Bitstream Vera Sans Mono', monospace;
     font-size: 0.95em;
     letter-spacing: 0.01em;
 }
 
-tt {
+code {
     background-color: #f2f2f2;
     border-bottom: 1px solid #ddd;
     color: #333;
 }
 
-tt.descname, tt.descclassname, tt.xref {
+code.descname, code.descclassname, code.xref {
     border: 0;
 }
 
@@ -221,12 +226,12 @@ hr {
     margin: 2em;
 }
 
-a tt {
+a code {
     border: 0;
     color: #CA7900;
 }
 
-a tt:hover {
+a code:hover {
     color: #2491CF;
 }
 
@@ -320,4 +325,21 @@ div.versioninfo {
     padding: 8px;
     line-height: 1.3em;
     font-size: 0.9em;
+}
+
+.viewcode-back {
+    font-family: 'Lucida Grande', 'Lucida Sans Unicode', 'Geneva',
+                 'Verdana', sans-serif;
+}
+
+div.viewcode-block:target {
+    background-color: #f4debf;
+    border-top: 1px solid #ac9;
+    border-bottom: 1px solid #ac9;
+}
+
+div.code-block-caption {
+    background-color: #ddd;
+    color: #222;
+    border: 1px solid #ccc;
 }
\ No newline at end of file
diff --git a/doc/_templates/index.html b/doc/_templates/index.html
index 4b81976..b71ff99 100644
--- a/doc/_templates/index.html
+++ b/doc/_templates/index.html
@@ -18,7 +18,7 @@
         var options = {
             $AutoPlay: true,
             $AutoPlaySteps: 1,
-            $AutoPlayInterval: 3000, 
+            $AutoPlayInterval: 3000,
             $PauseOnHover: 1,
             $ArrowKeyNavigation: true,
             $SlideDuration: 500,
@@ -27,7 +27,7 @@
             $DisplayPieces: 1,
             $ParkingPosition: 0,
             $UISearchMode: 1,
-            $PlayOrientation: 1, 
+            $PlayOrientation: 1,
             $DragOrientation: 3,
 
             $SlideshowOptions: {
@@ -35,7 +35,7 @@
                 $Transitions: _SlideshowTransitions,
                 $TransitionsOrder: 1,
                 $ShowLink: false
-            },     
+            },
 
             $ArrowNavigatorOptions: {
                 $Class: $JssorArrowNavigator$,
@@ -52,8 +52,8 @@
 <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.
+  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.esrf.eu/computing/cs/tango/tango_doc/kernel_doc/cpp_doc">Tango C++ API</a>.
   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.
diff --git a/doc/_templates/indexsidebar.html b/doc/_templates/indexsidebar.html
index 7f4ef73..c8c5373 100644
--- a/doc/_templates/indexsidebar.html
+++ b/doc/_templates/indexsidebar.html
@@ -1,22 +1,18 @@
 <h3>Download</h3>
-<p>Current version: <b>{{ version }}</b></p>
-<p>Get PyTango from <a href="http://pypi.python.org/pypi/PyTango">PyPi</a><br/>
+<p>Current version: <b>{{ release }}</b></p>
+<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>
-<p>A PDF version <a href="PyTango.pdf">here</a>.
+<p>A PDF version <a href="https://media.readthedocs.org/pdf/pytango/latest/pytango.pdf">here</a>.
 
 
 <h3>Other versions</h3>
-<a href="http://www.tango-controls.org/static/PyTango/development/doc/html">Development</a>
+<a href="http://pytango.readthedocs.io/en/latest">Development</a>
 <br/>
-<a href="http://www.tango-controls.org/static/PyTango/latest/doc/html">Latest stable</a>
+<a href="http://pytango.readthedocs.io/en/stable">Latest stable</a>
 <br/>
-<a href="http://www.tango-controls.org/static/PyTango/v812/doc/html">8.1.2</a>
+<a href="http://www.esrf.eu/computing/cs/tango/pytango/v818">8.1.8</a>
 <br/>
-<a href="http://www.tango-controls.org/static/PyTango/v811/doc/html">8.1.1</a>
-<br/>
-<a href="http://www.tango-controls.org/static/PyTango/v723/doc/html">7.2.3</a>
+<a href="http://www.esrf.eu/computing/cs/tango/pytango/v816">8.1.6</a>
diff --git a/doc/_templates/layout.html b/doc/_templates/layout.html
index dece097..6592bd9 100644
--- a/doc/_templates/layout.html
+++ b/doc/_templates/layout.html
@@ -9,5 +9,5 @@
     <li><a href="{{ pathto('quicktour') }}">quick tour</a>| </li>
     <li><a href="{{ pathto('howto') }}">how to</a>| </li>
     <li><a href="{{ pathto('faq') }}">FAQ</a>| </li>
-    <li><a href="{{ pathto('contents') }}">documentation </a> »</li>
+    <li><a href="{{ pathto('contents') }}">documentation (v{{ release }})</a> »</li>
 {% endblock %}
diff --git a/doc/api.rst b/doc/api.rst
index 122da04..8fe07ca 100644
--- a/doc/api.rst
+++ b/doc/api.rst
@@ -1,5 +1,5 @@
 
-.. currentmodule:: PyTango
+.. currentmodule:: tango
 
 .. _pytango-api:
 
@@ -7,7 +7,7 @@
 PyTango API
 ===========
 
-.. automodule:: PyTango
+.. automodule:: tango
 
 .. toctree::
     :maxdepth: 1
diff --git a/doc/client_api/attribute_proxy.rst b/doc/client_api/attribute_proxy.rst
index 158ed18..45b56e6 100644
--- a/doc/client_api/attribute_proxy.rst
+++ b/doc/client_api/attribute_proxy.rst
@@ -1,9 +1,9 @@
 AttributeProxy
 --------------
 
-.. currentmodule:: PyTango
+.. currentmodule:: tango
 
-.. autoclass:: PyTango.AttributeProxy
+.. autoclass:: tango.AttributeProxy
     :members:
 
 
diff --git a/doc/client_api/device_proxy.rst b/doc/client_api/device_proxy.rst
index 8c617b7..9679998 100644
--- a/doc/client_api/device_proxy.rst
+++ b/doc/client_api/device_proxy.rst
@@ -1,9 +1,9 @@
-.. currentmodule:: PyTango
+.. currentmodule:: tango
 
 DeviceProxy
 -----------
 
-.. autoclass:: PyTango.DeviceProxy
+.. autoclass:: tango.DeviceProxy
     :show-inheritance: 
     :members:
     :inherited-members:
diff --git a/doc/client_api/green.rst b/doc/client_api/green.rst
index 9048861..c5df3d8 100644
--- a/doc/client_api/green.rst
+++ b/doc/client_api/green.rst
@@ -6,16 +6,15 @@ Green API
 =========
 
 Summary:
-    * :func:`PyTango.get_green_mode` 
-    * :func:`PyTango.set_green_mode` 
-    * :func:`PyTango.futures.DeviceProxy` 
-    * :func:`PyTango.gevent.DeviceProxy` 
+    * :func:`tango.get_green_mode`
+    * :func:`tango.set_green_mode`
+    * :func:`tango.futures.DeviceProxy`
+    * :func:`tango.gevent.DeviceProxy`
 
-.. autofunction:: PyTango.get_green_mode
+.. autofunction:: tango.get_green_mode
 
-.. autofunction:: PyTango.set_green_mode
+.. autofunction:: tango.set_green_mode
 
-.. autofunction:: PyTango.futures.DeviceProxy
-
-.. autofunction:: PyTango.gevent.DeviceProxy
+.. autofunction:: tango.futures.DeviceProxy
 
+.. autofunction:: tango.gevent.DeviceProxy
diff --git a/doc/client_api/group.rst b/doc/client_api/group.rst
index 025c1dc..afd4bcf 100644
--- a/doc/client_api/group.rst
+++ b/doc/client_api/group.rst
@@ -2,7 +2,7 @@
 Group
 -----
 
-.. currentmodule:: PyTango
+.. currentmodule:: tango
 
 
 .. GroupElement is the base class of Group, but is not the base of
@@ -12,7 +12,7 @@ Group
 Group class
 ~~~~~~~~~~~
 
-.. autoclass:: PyTango.Group
+.. autoclass:: tango.Group
     :show-inheritance:
     :inherited-members:
     :members:
@@ -24,20 +24,20 @@ GroupReply classes
 Group member functions do not return the same as their DeviceProxy counterparts,
 but objects that contain them. This is:
 
-    - *write attribute* family returns PyTango.GroupReplyList
-    - *read attribute* family returns PyTango.GroupAttrReplyList
-    - *command inout* family returns PyTango.GroupCmdReplyList
+    - *write attribute* family returns tango.GroupReplyList
+    - *read attribute* family returns tango.GroupAttrReplyList
+    - *command inout* family returns tango.GroupCmdReplyList
 
 The Group*ReplyList objects are just list-like objects containing
-:class:`~PyTango.GroupReply`, :class:`~PyTango.GroupAttrReply` and
+:class:`~tango.GroupReply`, :class:`~tango.GroupAttrReply` and
 :class:`~GroupCmdReply` elements that will be described now.
 
 Note also that GroupReply is the base of GroupCmdReply and GroupAttrReply.
 
-.. autoclass:: PyTango.GroupReply
+.. autoclass:: tango.GroupReply
     :members:
 
-.. autoclass:: PyTango.GroupAttrReply
+.. autoclass:: tango.GroupAttrReply
     :show-inheritance:
     :members:
 
diff --git a/doc/client_api/miscellaneous.rst b/doc/client_api/miscellaneous.rst
index 27905d5..d0666e5 100644
--- a/doc/client_api/miscellaneous.rst
+++ b/doc/client_api/miscellaneous.rst
@@ -1,4 +1,4 @@
-.. currentmodule:: PyTango
+.. currentmodule:: tango
 
 API util
 --------
diff --git a/doc/client_api/other.rst b/doc/client_api/other.rst
index d8b7fe8..315176e 100644
--- a/doc/client_api/other.rst
+++ b/doc/client_api/other.rst
@@ -1,4 +1,4 @@
-.. currentmodule:: PyTango
+.. currentmodule:: tango
 
 Enumerations & other classes
 ----------------------------
@@ -6,58 +6,60 @@ Enumerations & other classes
 Enumerations
 ~~~~~~~~~~~~
 
-.. autoclass:: PyTango.LockerLanguage
+.. autoclass:: tango.LockerLanguage
 
-.. autoclass:: PyTango.CmdArgType
+.. autoclass:: tango.CmdArgType
 
-.. autoclass:: PyTango.MessBoxType
+.. autoclass:: tango.MessBoxType
 
-.. autoclass:: PyTango.PollObjType
+.. autoclass:: tango.PollObjType
 
-.. autoclass:: PyTango.PollCmdCode
+.. autoclass:: tango.PollCmdCode
 
-.. autoclass:: PyTango..SerialModel
+.. autoclass:: tango..SerialModel
 
-.. autoclass:: PyTango.AttReqType
+.. autoclass:: tango.AttReqType
 
-.. autoclass:: PyTango.LockCmdCode
+.. autoclass:: tango.LockCmdCode
 
-.. autoclass:: PyTango.LogLevel
+.. autoclass:: tango.LogLevel
 
-.. autoclass:: PyTango.LogTarget
+.. autoclass:: tango.LogTarget
 
-.. autoclass:: PyTango.EventType
+.. autoclass:: tango.EventType
 
-.. autoclass:: PyTango.KeepAliveCmdCode
+.. autoclass:: tango.KeepAliveCmdCode
 
-.. autoclass:: PyTango.AccessControlType
+.. autoclass:: tango.AccessControlType
 
-.. autoclass:: PyTango.asyn_req_type
+.. autoclass:: tango.asyn_req_type
 
-.. autoclass:: PyTango.cb_sub_model
+.. autoclass:: tango.cb_sub_model
 
-.. autoclass:: PyTango.AttrQuality
+.. autoclass:: tango.AttrQuality
 
-.. autoclass:: PyTango.AttrWriteType
+.. autoclass:: tango.AttrWriteType
 
-.. autoclass:: PyTango.AttrDataFormat
+.. autoclass:: tango.AttrDataFormat
 
-.. autoclass:: PyTango.DevSource
+.. autoclass:: tango.PipeWriteType
 
-.. autoclass:: PyTango.ErrSeverity
+.. autoclass:: tango.DevSource
 
-.. autoclass:: PyTango.DevState
+.. autoclass:: tango.ErrSeverity
 
-.. autoclass:: PyTango.DispLevel
+.. autoclass:: tango.DevState
 
-.. autoclass:: PyTango.GreenMode
+.. autoclass:: tango.DispLevel
+
+.. autoclass:: tango.GreenMode
 
 
 Other classes
 ~~~~~~~~~~~~~
 
-.. autoclass:: PyTango.Release
+.. autoclass:: tango.Release
     :members:
     
-.. autoclass:: PyTango.TimeVal
+.. autoclass:: tango.TimeVal
     :members:
diff --git a/doc/conf.py b/doc/conf.py
index 33b44da..f7f8978 100644
--- a/doc/conf.py
+++ b/doc/conf.py
@@ -1,5 +1,5 @@
 # ------------------------------------------------------------------------------
-# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+# This file is part of PyTango (http://pytango.rtfd.io)
 #
 # Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
 # Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
@@ -12,12 +12,22 @@
 import sys
 import os
 import re
-import PyTango
 
 # If extensions (or modules to document with autodoc) are in another directory,
 # add these directories to sys.path here. If the directory is relative to the
 # documentation root, use os.path.abspath to make it absolute, like shown here.
-sys.path.append(os.path.abspath('sphinxext'))
+sys.path.append(os.path.abspath('../'))
+sys.path.append(os.path.abspath('./'))
+
+
+# Import tango
+try:
+    import tango
+except ImportError:
+    from mock_tango_extension import tango
+from tango import Release
+print("Building documentation for PyTango {0}".format(Release.version_long))
+print("Using PyTango from: {0}".format(os.path.dirname(tango.__file__)))
 
 needs_sphinx = "1.0"
 
@@ -30,13 +40,7 @@ extensions = ['sphinx.ext.pngmath',
               'sphinx.ext.doctest',
               'sphinx.ext.intersphinx',
               'sphinx.ext.todo',
-              'ipython_console_highlighting',
-              'tango_console_highlighting']
-
-# disable until graphviz works in pyhon 3
-if sys.hexversion < 0x03000000:
-    extensions.append('sphinx.ext.graphviz')
-
+              'sphinx.ext.graphviz']
 
 # Add any paths that contain templates here, relative to this directory.
 templates_path = ['_templates']
@@ -71,9 +75,9 @@ is licensed under a
 # built documents.
 #
 # The short X.Y version.
-version = '.'.join(PyTango.Release.version.split('.')[:2])
+version = '.'.join(Release.version.split('.')[:2])
 # The full version, including alpha/beta/rc tags.
-release = PyTango.Release.version
+release = Release.version_long
 
 # The language for content autogenerated by Sphinx. Refer to documentation
 # for a list of supported languages.
@@ -108,7 +112,6 @@ exclude_trees = ['_build']
 
 # The name of the Pygments (syntax highlighting) style to use.
 pygments_style = 'sphinx'
-pygments_style = 'tango_console_highlighting.TangoStyle'
 
 # A list of ignored prefixes for module index sorting.
 #modindex_common_prefix = []
@@ -128,6 +131,8 @@ html_theme = 'sphinxdoc'
 # Add any paths that contain custom themes here, relative to this directory.
 #html_theme_path = []
 
+html_style = 'pytango.css'
+
 # The name for this set of Sphinx documents.  If None, it defaults to
 # "<project> v<release> documentation".
 #html_title = "PyTango documentation"
@@ -211,7 +216,7 @@ latex_elements = {
     'fontpkg': '\\usepackage{palatino}',
     'papersize': 'a4paper',
     'pointsize': '10pt',
-    
+
 }
 latex_show_urls = 'no'
 
@@ -231,13 +236,13 @@ latex_show_urls = 'no'
 # -- 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/
+.. _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
 
 """
 
@@ -245,13 +250,13 @@ rst_epilog = """\
 
 intersphinx_mapping = {
     'http://docs.python.org/dev': None,
-    'http://docs.scipy.org/doc/scipy/reference' : None,
-    'http://docs.scipy.org/doc/numpy' : None,
-    'http://ipython.org/ipython-doc/stable/' : None,
-    'http://api.mongodb.org/python/current/' : None,
-    'http://packages.python.org/CouchDB/' : None,
-    'http://pycassa.github.com/pycassa/' : None,
-    'http://docs.sqlalchemy.org/en/rel_0_7/' : None,
+    'http://docs.scipy.org/doc/scipy/reference': None,
+    'http://docs.scipy.org/doc/numpy': None,
+    'http://ipython.org/ipython-doc/stable': None,
+    'http://api.mongodb.org/python/current': None,
+    'http://packages.python.org/CouchDB': None,
+    'http://pycassa.github.com/pycassa': None,
+    'http://docs.sqlalchemy.org/en/latest': None,
 }
 
 todo_include_todos = True
@@ -278,7 +283,7 @@ def type_to_link(tipus):
 def type_to_pytango_link(tipus):
         if tipus[:9] == 'sequence<' and tipus[-1:] == '>':
             return 'sequence<' + type_to_link(tipus[9:-1]) + '>'
-        elif tipus in dir(PyTango):
+        elif tipus in dir(tango):
             return ':class:`' + tipus + "`"
         else:
            return tipus
@@ -303,7 +308,7 @@ def parse_parameters(line):
     spl = miniLine[2:].split(':', 1)
 
     assert(len(spl) == 2)
-    
+
     return spaces + ':' + spl[0].strip() + ': ' + parse_typed_line(spl[1])
 
 
@@ -383,12 +388,12 @@ def search_ONLY_signature(name, text):
 def split_signature(text):
     if text is None:
         return None
-    
+
     # split "fname(params)", "returntype"
     ops = text.split('->')
     if len(ops) != 2:
         return None
-    
+
     # get rid of "fname"
     params = ops[0].strip()
     ret_type = ops[1].strip()
@@ -397,9 +402,9 @@ def split_signature(text):
         return None
     params = params[p:]
     return params, ret_type
-    
 
-    
+
+
 _with_only_one_signature_methods = {}
 
 def __reformat_lines(app, what, name, obj, options, lines):
@@ -414,7 +419,7 @@ def __reformat_lines(app, what, name, obj, options, lines):
     parsingThrows = False
 
     toinsert.append((0, ""))
-    
+
     for ln in range(len(lines)):
         line = lines[ln]
 
@@ -456,7 +461,7 @@ def __reformat_lines(app, what, name, obj, options, lines):
         # with the one understood by reStructuredText ":Return: something"
         spl = line.strip().split(':', 1)
         control_word = spl[0].strip()
-            
+
         if ((len(spl) != 2)
             or (control_word not in ["Parameters", "Return", "Throws", "Example", "See Also" ]) ):
                 if parsingParameters:
@@ -514,6 +519,6 @@ def setup(app):
     # Problem is __process_signature works great with python methods...
     # but is not even called for methods defined by boost. So, as it is,
     # is useless now.
-    
+
     #app.connect('autodoc-process-signature', __process_signature)
     app.connect('autodoc-process-docstring', __reformat_lines)
diff --git a/doc/contents.rst b/doc/contents.rst
index f17733c..41f0889 100644
--- a/doc/contents.rst
+++ b/doc/contents.rst
@@ -1,5 +1,5 @@
 
-.. currentmodule:: PyTango
+.. currentmodule:: tango
 
 .. _contents: 
 
diff --git a/doc/data_types.rst b/doc/data_types.rst
index 423c3f1..4b2b2e4 100644
--- a/doc/data_types.rst
+++ b/doc/data_types.rst
@@ -1,4 +1,4 @@
-.. currentmodule:: PyTango
+.. currentmodule:: tango
 
 .. _pytango-data-types:
 
@@ -183,13 +183,13 @@ much more efficient.
 |                         |                 | 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 
+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()
+
+    >>> import tango
+    >>> db = tango.Database()
     >>> s = db.get_property(["TangoSynchrotrons"])
     >>> print type(s)
     <type 'list'>
@@ -198,3 +198,120 @@ where the tango data is used, and the availability of :py:mod:`numpy`.
     - :py:class:`numpy.ndarray` if PyTango was compiled with :py:mod:`numpy`
       support (default) and :py:mod:`numpy` is installed.
     - :py:class:`list` otherwise
+
+
+.. _pytango-pipe-data-types:
+
+Pipe data types
+---------------
+
+Pipes require different data types. You can think of them as a structured type.
+
+A pipe transports data which is called a *blob*. A *blob* consists of name and
+a list of fields. Each field is called *data element*. Each *data element*
+consists of a name and a value. *Data element* names must be unique in the same
+blob.
+
+The value can be of any of the SCALAR or SPECTRUM tango data types (except
+DevEnum).
+
+Additionally, the value can be a *blob* itself.
+
+In PyTango, a *blob* is represented by a sequence of two elements:
+
+* blob name (str)
+* data is either:
+
+  * sequence (:py:class:`list`, :py:class:`tuple`, or other) of data elements
+    where each element is a :py:class:`dict` with the following keys:
+
+    * *name* (mandatory): (str) data element name
+    * *value* (mandatory): data (compatible with any of the SCALAR or SPECTRUM
+      data types except DevEnum). If value is to be a sub-*blob* then it
+      should be sequence of [*blob name*, sequence of data elements]
+      (see above)
+    * *dtype* (optional, mandatory if a DevEncoded is required):
+      see :ref:`Data type equivalence <pytango-hlapi-datatypes>`. If dtype
+      key is not given, PyTango will try to find the proper tango type by
+      inspecting the value.
+
+  * a :py:class:`dict` where key is the data element name and value is the data
+    element value (compact version)
+
+When using the compact dictionary version note that the order of the data elements
+is lost. If the order is important for you, consider using
+:py:class:`collections.OrderedDict` instead (if you have python >=2.7. If not you can
+use ``ordereddict`` backport module available on pypi).
+Also, in compact mode it is not possible to enforce a specific type. As a
+consequence, DevEncoded is not supported in compact mode.
+
+The description sounds more complicated that it actually is. Here are some practical
+examples of what you can return in a server as a read request from a pipe::
+
+    import numpy as np
+
+    # plain (one level) blob showing different tango data types
+    # (explicity and implicit):
+
+    PIPE0 = \
+    ('BlobCase0',
+     ({'name': 'DE1', 'value': 123,},                                # converts to DevLong64
+      {'name': 'DE2', 'value': np.int32(456),},                      # converts to DevLong
+      {'name': 'DE3', 'value': 789, 'dtype': 'int32'},               # converts to DevLong
+      {'name': 'DE4', 'value': np.uint32(123)},                      # converts to DevULong
+      {'name': 'DE5', 'value': range(5), 'dtype': ('uint16',)},      # converts to DevVarUShortArray
+      {'name': 'DE6', 'value': [1.11, 2.22], 'dtype': ('float64',)}, # converts to DevVarDoubleArray
+      {'name': 'DE7', 'value': numpy.zeros((100,))},                 # converts to DevVarDoubleArray
+      {'name': 'DE8', 'value': True},                                # converts to DevBoolean
+     )
+    )
+
+
+    # similar as above but in compact version (implicit data type conversion):
+
+    PIPE1 = \
+    ('BlobCase1', dict(DE1=123, DE2=np.int32(456), DE3=np.int32(789),
+                       DE4=np.uint32(123), DE5=np.arange(5, dtype='uint16'),
+		       DE6=[1.11, 2.22], DE7=numpy.zeros((100,)),
+		       DE8=True)
+    )
+
+    # similar as above but order matters so we use an ordered dict:
+
+    import collections
+
+    data = collections.OrderedDict()
+    data['DE1'] = 123
+    data['DE2'] = np.int32(456)
+    data['DE3'] = np.int32(789)
+    data['DE4'] = np.uint32(123)
+    data['DE5'] = np.arange(5, dtype='uint16')
+    data['DE6'] = [1.11, 2.22]
+    data['DE7'] = numpy.zeros((100,))
+    data['DE8'] = True
+
+    PIPE2 = 'BlobCase2', data
+
+    # another plain blob showing string, string array and encoded data types:
+
+    PIPE3 = \
+    ('BlobCase3',
+     ({'name': 'stringDE',  'value': 'Hello'},
+      {'name': 'VectorStringDE', 'value': ('bonjour', 'le', 'monde')},
+      {'name': 'DevEncodedDE', 'value': ('json', '"isn\'t it?"'), 'dtype': 'bytes'},
+     )
+    )
+
+    # blob with sub-blob which in turn has a sub-blob
+
+    PIPE4 = \
+    ('BlobCase4',
+     ({'name': '1DE', 'value': ('Inner', ({'name': '1_1DE', 'value': 'Grenoble'},
+                                          {'name': '1_2DE', 'value': ('InnerInner',
+                                                                      ({'name': '1_1_1DE', 'value': np.int32(111)},
+                                                                       {'name': '1_1_2DE', 'value': [3.33]}))
+                                         })
+      )},
+      {'name': '2DE', 'value': (3,4,5,6), 'dtype': ('int32',) },
+     )
+    )
diff --git a/doc/database.rst b/doc/database.rst
index 3a3eefd..0d6b3c3 100644
--- a/doc/database.rst
+++ b/doc/database.rst
@@ -1,29 +1,29 @@
 Database API
 ============
 
-.. currentmodule:: PyTango
+.. currentmodule:: tango
 
-.. autoclass:: PyTango.Database
+.. autoclass:: tango.Database
     :members:
 
-.. autoclass:: PyTango.DbDatum
+.. autoclass:: tango.DbDatum
     :members:
 
-.. autoclass:: PyTango.DbDevExportInfo
+.. autoclass:: tango.DbDevExportInfo
     :members:
 
-.. autoclass:: PyTango.DbDevExportInfo
+.. autoclass:: tango.DbDevExportInfo
     :members:
 
-.. autoclass:: PyTango.DbDevImportInfo
+.. autoclass:: tango.DbDevImportInfo
     :members:
 
-.. autoclass:: PyTango.DbDevInfo
+.. autoclass:: tango.DbDevInfo
     :members:
 
-.. autoclass:: PyTango.DbHistory
+.. autoclass:: tango.DbHistory
     :members:
 
-.. autoclass:: PyTango.DbServerInfo
+.. autoclass:: tango.DbServerInfo
     :members:
 
diff --git a/doc/encoded.rst b/doc/encoded.rst
index 8851023..8dd51a9 100644
--- a/doc/encoded.rst
+++ b/doc/encoded.rst
@@ -6,7 +6,7 @@ Encoded API
 
 *This feature is only possible since PyTango 7.1.4*
 
-.. currentmodule:: PyTango
+.. currentmodule:: tango
 
-.. autoclass:: PyTango.EncodedAttribute
+.. autoclass:: tango.EncodedAttribute
     :members:
diff --git a/doc/environment.yml b/doc/environment.yml
new file mode 100644
index 0000000..a739706
--- /dev/null
+++ b/doc/environment.yml
@@ -0,0 +1,6 @@
+name: py35
+dependencies:
+- python=3.5
+- numpy
+- gevent
+- graphviz
\ No newline at end of file
diff --git a/doc/exception.rst b/doc/exception.rst
index 9371d9b..39e4a4e 100644
--- a/doc/exception.rst
+++ b/doc/exception.rst
@@ -1,4 +1,4 @@
-.. currentmodule:: PyTango
+.. currentmodule:: tango
 
 .. highlight:: python
    :linenothreshold: 4
@@ -44,12 +44,12 @@ all of which containing the following kind of key-value pairs:
 
 ::
 
-    import PyTango
+    import tango
 
     #  How to protect the script from exceptions raised by the Tango
     try:
         # Get proxy on a non existing device should throw an exception
-        device = DeviceProxy("non/existing/device")
+        device = tango.DeviceProxy("non/existing/device")
     except DevFailed as df:
         print("Failed to create proxy to non/existing/device:\n%s" % df)
 
@@ -57,21 +57,21 @@ all of which containing the following kind of key-value pairs:
 Throwing exception in a device server
 -------------------------------------
 
-The C++ :class:`~PyTango::Except` class with its most important methods have 
-been wrapped to Python. Therefore, in a Python device server, you have the 
+The C++ :class:`~tango::Except` class with its most important methods have
+been wrapped to Python. Therefore, in a Python device server, you have the
 following methods to throw, re-throw or print a Tango::DevFailed exception :
 
-- :meth:`~PyTango.Except.throw_exception` which is a static method
-- :meth:`~PyTango.Except.re_throw_exception` which is also a static method
-- :meth:`~PyTango.Except.print_exception` which is also a static method
+- :meth:`~tango.Except.throw_exception` which is a static method
+- :meth:`~tango.Except.re_throw_exception` which is also a static method
+- :meth:`~tango.Except.print_exception` which is also a static method
 
 The following code is an example of a command method requesting a command on a
 sub-device and re-throwing the exception in case of::
 
     try:
         dev.command_inout("SubDevCommand")
-    except PyTango.DevFailed as df:
-        PyTango.Except.re_throw_exception(df,
+    except tango.DevFailed as df:
+        tango.Except.re_throw_exception(df,
             "MyClass_CommandFailed",
             "Sub device command SubdevCommand failed",
             "Command()")
@@ -83,50 +83,50 @@ sub-device and re-throwing the exception in case of::
 Exception API
 -------------
 
-.. autoclass:: PyTango.Except
+.. autoclass:: tango.Except
    :show-inheritance:
    :members:
 
-.. autoclass:: PyTango.DevError
+.. autoclass:: tango.DevError
    :show-inheritance:
    :members:
 
-.. autoexception:: PyTango.DevFailed
+.. autoexception:: tango.DevFailed
    :show-inheritance:
    :members:
 
-.. autoexception:: PyTango.ConnectionFailed
+.. autoexception:: tango.ConnectionFailed
    :show-inheritance:
-    
-    This exception is thrown when a problem occurs during the connection 
-    establishment between the application and the device. The API is stateless. 
-    This means that DeviceProxy constructors filter most of the exception 
-    except for cases described in the following table. 
-    
+
+    This exception is thrown when a problem occurs during the connection
+    establishment between the application and the device. The API is stateless.
+    This means that DeviceProxy constructors filter most of the exception
+    except for cases described in the following table.
+
     The desc DevError structure field allows a user to get more precise information. These informations are :
-    
+
     **DB_DeviceNotDefined**
-        The name of the device not defined in the database 
-    **API_CommandFailed** 
-        The device and command name 
-    **API_CantConnectToDevice** 
-        The device name 
-    **API_CorbaException** 
-        The name of the CORBA exception, its reason, its locality, its completed 
-        flag and its minor code 
-    **API_CantConnectToDatabase** 
-        The database server host and its port number 
-    **API_DeviceNotExported** 
+        The name of the device not defined in the database
+    **API_CommandFailed**
+        The device and command name
+    **API_CantConnectToDevice**
+        The device name
+    **API_CorbaException**
+        The name of the CORBA exception, its reason, its locality, its completed
+        flag and its minor code
+    **API_CantConnectToDatabase**
+        The database server host and its port number
+    **API_DeviceNotExported**
         The device name
 
 
-.. autoexception:: PyTango.CommunicationFailed
+.. autoexception:: tango.CommunicationFailed
    :show-inheritance:
-    
-    This exception is thrown when a communication problem is detected during 
-    the communication between the client application and the device server. It 
+
+    This exception is thrown when a communication problem is detected during
+    the communication between the client application and the device server. It
     is a two levels Tango::DevError structure. In case of time-out, the DevError
-    structures fields are: 
+    structures fields are:
 
     +-------+--------------------+-------------------------------------------------+----------+
     | Level |      Reason        |                   Desc                          | Severity |
@@ -136,7 +136,7 @@ Exception API
     |   1   | API_DeviceTimedOut | String with time-out value and device name      |   ERR    |
     +-------+--------------------+-------------------------------------------------+----------+
 
-    For all other communication errors, the DevError structures fields are: 
+    For all other communication errors, the DevError structures fields are:
 
     +-------+-------------------------+----------------------------------------------------+----------+
     | Level |         Reason          |                     Desc                           | Severity |
@@ -147,91 +147,91 @@ Exception API
     +-------+-------------------------+----------------------------------------------------+----------+
 
 
-.. autoexception:: PyTango.WrongNameSyntax
+.. autoexception:: tango.WrongNameSyntax
    :show-inheritance:
 
-This exception has only one level of Tango::DevError structure. The possible 
+This exception has only one level of Tango::DevError structure. The possible
 value for the reason field are :
 
     **API_UnsupportedProtocol**
-        This error occurs when trying to build a DeviceProxy or an AttributeProxy 
-        instance for a device with an unsupported protocol. Refer to the appendix 
-        on device naming syntax to get the list of supported database modifier 
+        This error occurs when trying to build a DeviceProxy or an AttributeProxy
+        instance for a device with an unsupported protocol. Refer to the appendix
+        on device naming syntax to get the list of supported database modifier
     **API_UnsupportedDBaseModifier**
-        This error occurs when trying to build a DeviceProxy or an AttributeProxy 
-        instance for a device/attribute with a database modifier unsupported. 
-        Refer to the appendix on device naming syntax to get the list of 
-        supported database modifier 
+        This error occurs when trying to build a DeviceProxy or an AttributeProxy
+        instance for a device/attribute with a database modifier unsupported.
+        Refer to the appendix on device naming syntax to get the list of
+        supported database modifier
     **API_WrongDeviceNameSyntax**
-        This error occurs for all the other error in device name syntax. It is 
-        thrown by the DeviceProxy class constructor. 
+        This error occurs for all the other error in device name syntax. It is
+        thrown by the DeviceProxy class constructor.
     **API_WrongAttributeNameSyntax**
-        This error occurs for all the other error in attribute name syntax. It 
-        is thrown by the AttributeProxy class constructor. 
+        This error occurs for all the other error in attribute name syntax. It
+        is thrown by the AttributeProxy class constructor.
     **API_WrongWildcardUsage**
-        This error occurs if there is a bad usage of the wildcard character 
+        This error occurs if there is a bad usage of the wildcard character
 
-.. autoexception:: PyTango.NonDbDevice
+.. autoexception:: tango.NonDbDevice
    :show-inheritance:
 
-    This exception has only one level of Tango::DevError structure. The reason 
-    field is set to API_NonDatabaseDevice. This exception is thrown by the API 
-    when using the DeviceProxy or AttributeProxy class database access for 
-    non-database device. 
+    This exception has only one level of Tango::DevError structure. The reason
+    field is set to API_NonDatabaseDevice. This exception is thrown by the API
+    when using the DeviceProxy or AttributeProxy class database access for
+    non-database device.
 
-.. autoexception:: PyTango.WrongData
+.. autoexception:: tango.WrongData
    :show-inheritance:
 
-    This exception has only one level of Tango::DevError structure. 
+    This exception has only one level of Tango::DevError structure.
     The possible value for the reason field are :
 
     **API_EmptyDbDatum**
-        This error occurs when trying to extract data from an empty DbDatum 
-        object 
+        This error occurs when trying to extract data from an empty DbDatum
+        object
     **API_IncompatibleArgumentType**
-        This error occurs when trying to extract data with a type different 
-        than the type used to send the data 
+        This error occurs when trying to extract data with a type different
+        than the type used to send the data
     **API_EmptyDeviceAttribute**
-        This error occurs when trying to extract data from an empty 
-        DeviceAttribute object 
+        This error occurs when trying to extract data from an empty
+        DeviceAttribute object
     **API_IncompatibleAttrArgumentType**
-        This error occurs when trying to extract attribute data with a type 
-        different than the type used to send the data 
+        This error occurs when trying to extract attribute data with a type
+        different than the type used to send the data
     **API_EmptyDeviceData**
-        This error occurs when trying to extract data from an empty DeviceData 
-        object 
+        This error occurs when trying to extract data from an empty DeviceData
+        object
     **API_IncompatibleCmdArgumentType**
-        This error occurs when trying to extract command data with a type 
-        different than the type used to send the data 
+        This error occurs when trying to extract command data with a type
+        different than the type used to send the data
 
-.. autoexception:: PyTango.NonSupportedFeature
+.. autoexception:: tango.NonSupportedFeature
    :show-inheritance:
 
-    This exception is thrown by the API layer when a request to a feature 
-    implemented in Tango device interface release n is requested for a device 
-    implementing Tango device interface n-x. There is one possible value for 
-    the reason field which is API_UnsupportedFeature. 
+    This exception is thrown by the API layer when a request to a feature
+    implemented in Tango device interface release n is requested for a device
+    implementing Tango device interface n-x. There is one possible value for
+    the reason field which is API_UnsupportedFeature.
 
-.. autoexception:: PyTango.AsynCall
+.. autoexception:: tango.AsynCall
    :show-inheritance:
 
     This exception is thrown by the API layer when a the asynchronous model id
-    badly used. This exception has only one level of Tango::DevError structure. 
+    badly used. This exception has only one level of Tango::DevError structure.
     The possible value for the reason field are :
 
     **API_BadAsynPollId**
-        This error occurs when using an asynchronous request identifier which is not 
-        valid any more. 
+        This error occurs when using an asynchronous request identifier which is not
+        valid any more.
     **API_BadAsyn**
-        This error occurs when trying to fire callback when no callback has been 
-        previously registered 
+        This error occurs when trying to fire callback when no callback has been
+        previously registered
     **API_BadAsynReqType**
-        This error occurs when trying to get result of an asynchronous request with 
-        an asynchronous request identifier returned by a non-coherent asynchronous 
-        request (For instance, using the asynchronous request identifier returned 
-        by a command_inout_asynch() method with a read_attribute_reply() attribute). 
+        This error occurs when trying to get result of an asynchronous request with
+        an asynchronous request identifier returned by a non-coherent asynchronous
+        request (For instance, using the asynchronous request identifier returned
+        by a command_inout_asynch() method with a read_attribute_reply() attribute).
 
-.. autoexception:: PyTango.AsynReplyNotArrived
+.. autoexception:: tango.AsynReplyNotArrived
    :show-inheritance:
 
     This exception is thrown by the API layer when:
@@ -239,66 +239,64 @@ value for the reason field are :
         - a request to get asynchronous reply is made and the reply is not yet arrived
         - a blocking wait with timeout for asynchronous reply is made and the timeout expired.
 
-    There is one possible value for the reason field which is API_AsynReplyNotArrived. 
+    There is one possible value for the reason field which is API_AsynReplyNotArrived.
 
-.. autoexception:: PyTango.EventSystemFailed
+.. autoexception:: tango.EventSystemFailed
    :show-inheritance:
 
-    This exception is thrown by the API layer when subscribing or unsubscribing 
-    from an event failed. This exception has only one level of Tango::DevError 
+    This exception is thrown by the API layer when subscribing or unsubscribing
+    from an event failed. This exception has only one level of Tango::DevError
     structure. The possible value for the reason field are :
 
     **API_NotificationServiceFailed**
-        This error occurs when the subscribe_event() method failed trying to 
-        access the CORBA notification service 
+        This error occurs when the subscribe_event() method failed trying to
+        access the CORBA notification service
     **API_EventNotFound**
-        This error occurs when you are using an incorrect event_id in the 
-        unsubscribe_event() method 
+        This error occurs when you are using an incorrect event_id in the
+        unsubscribe_event() method
     **API_InvalidArgs**
-        This error occurs when NULL pointers are passed to the subscribe or 
-        unsubscribe event methods 
+        This error occurs when NULL pointers are passed to the subscribe or
+        unsubscribe event methods
     **API_MethodArgument**
-        This error occurs when trying to subscribe to an event which has already 
-        been subsribed to 
+        This error occurs when trying to subscribe to an event which has already
+        been subsribed to
     **API_DSFailedRegisteringEvent**
-        This error means that the device server to which the device belongs to 
-        failed when it tries to register the event. Most likely, it means that 
-        there is no event property defined 
+        This error means that the device server to which the device belongs to
+        failed when it tries to register the event. Most likely, it means that
+        there is no event property defined
     **API_EventNotFound**
-        Occurs when using a wrong event identifier in the unsubscribe_event 
-        method 
+        Occurs when using a wrong event identifier in the unsubscribe_event
+        method
 
 
-.. autoexception:: PyTango.DeviceUnlocked
+.. autoexception:: tango.DeviceUnlocked
    :show-inheritance:
 
-    This exception is thrown by the API layer when a device locked by the 
-    process has been unlocked by an admin client. This exception has two levels 
-    of Tango::DevError structure. There is only possible value for the reason 
+    This exception is thrown by the API layer when a device locked by the
+    process has been unlocked by an admin client. This exception has two levels
+    of Tango::DevError structure. There is only possible value for the reason
     field which is
 
     **API_DeviceUnlocked**
-        The device has been unlocked by another client (administration client) 
+        The device has been unlocked by another client (administration client)
 
-    The first level is the message reported by the Tango kernel from the server 
+    The first level is the message reported by the Tango kernel from the server
     side. The second layer is added by the client API layer with informations on
-    which API call generates the exception and device name. 
+    which API call generates the exception and device name.
 
-.. autoexception:: PyTango.NotAllowed
+.. autoexception:: tango.NotAllowed
    :show-inheritance:
 
 
-.. autoexception:: PyTango.NamedDevFailedList
+.. autoexception:: tango.NamedDevFailedList
    :show-inheritance:
 
-    This exception is only thrown by the DeviceProxy::write_attributes() 
-    method. In this case, it is necessary to have a new class of exception 
-    to transfer the error stack for several attribute(s) which failed during 
+    This exception is only thrown by the DeviceProxy::write_attributes()
+    method. In this case, it is necessary to have a new class of exception
+    to transfer the error stack for several attribute(s) which failed during
     the writing. Therefore, this exception class contains for each attributes
     which failed :
 
         - The name of the attribute
         - Its index in the vector passed as argumen tof the write_attributes() method
         - The error stack
-
-
diff --git a/doc/faq.rst b/doc/faq.rst
index c559ec7..9ba3740 100644
--- a/doc/faq.rst
+++ b/doc/faq.rst
@@ -1,258 +1,51 @@
-.. currentmodule:: PyTango
+.. currentmodule:: tango
 
 .. _pytango-faq:
 
 FAQ
 ===
 
-Answers to general Tango questions can be found at http://www.tango-controls.org/tutorials
+Answers to general Tango questions can be found in the
+`general tango tutorial <http://www.tango-controls.org/resources/tutorials>`_.
 
-Please also check http://www.tango-controls.org/howtos for a list of Tango howtos
+Please also check the `general tango how to <http://www.tango-controls.org/resources/howto/>`_.
 
-**Where are the usual bjam files?**
 
-Starting from PyTango 7.0.0 the prefered way to build PyTango is using the standard
-python distutils package. This means that:
+**How can I report an issue?**
 
-- you do NOT have to install the additional bjam package
-- you do NOT have to change 3 configuration files
-- you do NOT need to have 2Gb of RAM to compile PyTango.
+Bug reports are very valuable for the community.
 
-Please check the compilation chapter for details on how to build PyTango.
+Please open a new issue on the `github issue page <https://github.com/tango-cs/pytango/issues>`_.
 
-**I got a libbost_python error when I try to import PyTango module**
 
-doing:
-    >>> import PyTango
-    ImportError: libboost_python-gcc43-mt-1_38.so.1.38.0: cannot open shared object file: No such file or directory
+**How can I contribute to PyTango and the documentation?**
 
-You must check that you have the correct boost python installed on your computer.
-To see which boost python file PyTango needs type::
-
-    $ ldd /usr/lib/python2.5/site-packages/PyTango/_PyTango.so
-    linux-vdso.so.1 =>  (0x00007fff48bfe000)
-    libtango.so.7 => /home/homer/local/lib/libtango.so.7 (0x00007f393fabb000)
-    liblog4tango.so.4 => /home/homer/local/lib/liblog4tango.so.4 (0x00007f393f8a0000)
-    **libboost_python-gcc43-mt-1_38.so.1.38.0 => not found**
-    libpthread.so.0 => /lib/libpthread.so.0 (0x00007f393f65e000)
-    librt.so.1 => /lib/librt.so.1 (0x00007f393f455000)
-    libdl.so.2 => /lib/libdl.so.2 (0x00007f393f251000)
-    libomniORB4.so.1 => /usr/local/lib/libomniORB4.so.1 (0x00007f393ee99000)
-    libomniDynamic4.so.1 => /usr/local/lib/libomniDynamic4.so.1 (0x00007f393e997000)
-    libomnithread.so.3 => /usr/local/lib/libomnithread.so.3 (0x00007f393e790000)
-    libCOS4.so.1 => /usr/local/lib/libCOS4.so.1 (0x00007f393e359000)
-    libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00007f393e140000)
-    libc.so.6 => /lib/libc.so.6 (0x00007f393ddce000)
-    libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00007f393dac1000)
-    libm.so.6 => /lib/libm.so.6 (0x00007f393d83b000)
-    /lib64/ld-linux-x86-64.so.2 (0x00007f3940a4c000)
-
-
-**My python code uses PyTango 3.0.4 API. How do I change to 7.0.0 API?**
-
-To ease migration effort, PyTango 7 provides an alternative module called
-PyTango3.
-
-Changing your python import from::
-
-    import PyTango
-    
-to::
-
-    import PyTango3 as PyTango
-    
-should allow you to execute your old PyTango code using the new PyTango 7 library.
-
-Please note that you should as soon as possible migrate the code to Tango 7
-since the PyTango team cannot assure the maintainability of the PyTango3 module.
-
-Please find below a basic set of rules to migrate from PyTango 3.0.x to 7:
-
-*General rule of thumb for data types*
-
-The first important thing to be aware of when migrating from PyTango <= 3.0.4 to
-PyTango >= 7 is that the data type mapping from tango to python and vice versa is
-not always the same. The following table summarizes the differences:
-
-+-------------------------+-------------------------------------------+-------------------------------------------+
-|   Tango data type       |              PyTango 7 type               | PyTango <= 3.0.4 type                     |
-+=========================+===========================================+===========================================+
-|          DEV_VOID       |                    No data                |                    No data                |
-+-------------------------+-------------------------------------------+-------------------------------------------+
-|       DEV_BOOLEAN       | bool                                      | bool                                      |
-+-------------------------+-------------------------------------------+-------------------------------------------+
-|         DEV_SHORT       | int                                       | int                                       |
-+-------------------------+-------------------------------------------+-------------------------------------------+
-|         DEV_LONG        | int                                       | int                                       |
-+-------------------------+-------------------------------------------+-------------------------------------------+
-|        DEV_LONG64       | long (on a 32 bits computer) or           | long (on a 32 bits computer) or           |
-|                         | int (on a 64 bits computer)               | int (on a 64 bits computer)               |
-+-------------------------+-------------------------------------------+-------------------------------------------+
-|         DEV_FLOAT       | float                                     | float                                     |
-+-------------------------+-------------------------------------------+-------------------------------------------+
-|       DEV_DOUBLE        | float                                     | float                                     |
-+-------------------------+-------------------------------------------+-------------------------------------------+
-|        DEV_USHORT       | int                                       | int                                       |
-+-------------------------+-------------------------------------------+-------------------------------------------+
-|        DEV_ULONG        | int                                       | int                                       |
-+-------------------------+-------------------------------------------+-------------------------------------------+
-|        DEV_ULONG64      | long (on a 32 bits computer) or           | long (on a 32 bits computer) or           |
-|                         | int (on a 64 bits computer)               | int (on a 64 bits computer)               |
-+-------------------------+-------------------------------------------+-------------------------------------------+
-|        DEV_STRING       | str                                       | str                                       |
-+-------------------------+-------------------------------------------+-------------------------------------------+
-|    DEVVAR_CHARARRAY     | sequence<int>                             | list<int>                                 |
-+-------------------------+-------------------------------------------+-------------------------------------------+
-|    DEVVAR_SHORTARRAY    | sequence<int>                             | list<int>                                 |
-+-------------------------+-------------------------------------------+-------------------------------------------+
-|    DEVVAR_LONGARRAY     | sequence<int>                             | list<int>                                 |
-+-------------------------+-------------------------------------------+-------------------------------------------+
-|   DEVVAR_LONG64ARRAY    | sequence<long> (on a 32 bits computer) or | list<long> (on a 32 bits computer) or     |
-|                         | sequence<int> (on a 64 bits computer)     | list<int> (on a 64 bits computer)         |
-+-------------------------+-------------------------------------------+-------------------------------------------+
-|    DEVVAR_FLOATARRAY    | sequence<float>                           | list<float>                               |
-+-------------------------+-------------------------------------------+-------------------------------------------+
-|   DEVVAR_DOUBLEARRAY    | sequence<float>                           | list<float>                               |
-+-------------------------+-------------------------------------------+-------------------------------------------+
-|   DEVVAR_USHORTARRAY    | sequence<int>                             | list<int>                                 |
-+-------------------------+-------------------------------------------+-------------------------------------------+
-|   DEVVAR_ULONGARRAY     | sequence<int>                             | list<int>                                 |
-+-------------------------+-------------------------------------------+-------------------------------------------+
-|  DEVVAR_ULONG64ARRAY    | sequence<long> (on a 32 bits computer) or | list<long> (on a 32 bits computer) or     |
-|                         | sequence<int> (on a 64 bits computer)     | list<int> (on a 64 bits computer)         |
-+-------------------------+-------------------------------------------+-------------------------------------------+
-|   DEVVAR_STRINGARRAY    | sequence<str>                             | list<str>                                 |
-+-------------------------+-------------------------------------------+-------------------------------------------+
-|                         | A sequence with two elements:             | A list with two elements:                 |
-| DEVVAR_LONGSTRINGARRAY  | 1. sequence<int>                          |  1. list<int>                             |
-|                         | 2. sequence<str>                          |  2. list<str>                             |
-+-------------------------+-------------------------------------------+-------------------------------------------+
-|                         | A sequence with two elements:             | A list with two elements:                 |
-|DEVVAR_DOUBLESTRINGARRAY | 1. sequence<float>                        |  1. list<float>                           |
-|                         | 2. sequence<str>                          |  2. list<str>                             |
-+-------------------------+-------------------------------------------+-------------------------------------------+
-
-Note that starting from PyTango 7 you **cannot assume anything** about the concrete 
-sequence implementation for the tango array types in PyTango.
-This means that the following code (valid in PyTango <= 3.0.4)::
-
-    import PyTango
-    dp = PyTango.DeviceProxy("my/device/experiment")
-    da = dp.read_attribute("array_attr")
-    if isinstance(da.value, list):
-        print "array_attr is NOT a scalar attribute"
-
-must be replaced with::
-
-    import operator, types
-    import PyTango
-    dp = PyTango.DeviceProxy("my/device/experiment")
-    da = dp.read_attribute("array_attr")
-    if operator.isSequence(da.value) and not type(da.value) in types.StringTypes:
-        print "array_attr is NOT a scalar attribute"
+Contribution are always welcome!
 
-Note that the above example is intended for demonstration purposes only. For 
-reference, the proper code would be::
+You can open pull requests on the `github PR page <https://github.com/tango-cs/pytango/pulls>`_.
 
-    import PyTango
-    dp = PyTango.DeviceProxy("my/device/experiment")
-    da = dp.read_attribute("array_attr")
-    if not da.data_format is PyTango.AttrDataFormat.SCALAR:
-        print "array_attr is NOT a scalar attribute"
-    
-*Server*
 
+**I got a libbost_python error when I try to import tango module...**
 
-#. replace `PyTango.PyUtil` with :class:`Util`
+For instance::
 
-#. replace `PyTango.PyDeviceClass` with :class:`DeviceClass`
+    >>> import tango
+    ImportError: libboost_python.so.1.53.0: cannot open shared object file: No such file or directory
 
-#. state and status overwrite
-    in PyTango <= 3.0.4, in order to overwrite the default state and status in a device
-    server, you had to reimplement **State()** and **Status()** methods respectively.
-
-    in PyTango 7 the methods have been renamed to **dev_state()** and **dev_status()** in
-    order to match the C++ API.
-
-*General*
-
-#. AttributeValue does **NOT** exist anymore.
-    - the result of a read_attribute call on a :class:`DeviceProxy` / :class:`Group`
-      is now a :class:`DeviceAttribute` object
-    - write_attribute does not accept AttributeValue anymore
-    
-    (See :class:`DeviceProxy` API documentation for more details)
-    
-#. command_inout for commands with parameter type DevVar****StringArray don't accept items in second sequence not being strings:
-    For example, a tango command 'DevVoid Go(DevVarDoubleArray)' in tango 3.0.4
-    could be executed by calling::
-        
-        dev_proxy.command_inout( 'Go', [[1.0, 2.0], [1, 2, 3]] )
-    
-    and the second list would internally be converted to ['1', '2', '3'].
-    Starting from PyTango 7 this is not allowed anymore. So the above code 
-    must be changed to::
-    
-        dev_proxy.command_inout( 'Go', [[1.0, 2.0], ['1', '2', '3']] )
-
-#. :class:`EventType` enumeration constants changed to match C++ enumeration
-    - CHANGE -> CHANGE_EVENT
-    - QUALITY -> QUALITY_EVENT
-    - PERIODIC -> PERIODIC_EVENT
-    - ARCHIVE -> ARCHIVE_EVENT
-    - USER -> USER_EVENT
-    - ATTR_CONF_EVENT remains
-
-#. Exception handling
-    in 3.0.4 :class:`DevFailed` was a tuple of dictionaries. 
-    Now :class:`DevFailed` is a tuple of :class:`DevError`.
-    This means that code::
-
-        try:
-            tango_fail()
-        except PyTango.DevFailed as e:
-            print e.args[0]['reason']
-
-    needs to be replaced with::
-
-        try:
-            tango_fail()
-        except PyTango.DevFailed as e:
-            print e.args[0].reason
-
-
-*Optional*
-
-The following is a list of API improvements. Some where added for performance 
-reasons, others to allow for a more pythonic interface, others still to reflect 
-more adequately the C++ interface. They are not mandatory since the original 
-interface will still be available.
-
-**Why is there a "-Wstrict-prototypes" warning when I compile PyTango?**
-
-
-The PyTango prefered build system (distutils) uses the same flags used to compile
-Python to compile PyTango. It happens that Python is compiled as a pure C library
-while PyTango is a C++ library. Unfortunately one of the flags used by Python is
-the "-Wstrict-prototypes" which makes sence in a C compilation but not in a C++ 
-compilation.
-For reference here is the complete error message you may have:
-    
-    `cc1plus: warning: command line option "-Wstrict-prototypes" is valid for Ada/C/ObjC but not for C++`
-
-Do not worry about this warning since the compiler is ignoring the presence of this flag
-in the compilation.
+You must check that you have the correct boost python installed on your computer.
+To see which boost python file PyTango needs, type:
 
-**Why are there so many warnings when generating the documentation?**
+.. sourcecode:: console
 
-PyTango uses boost python for the binding between C++ and Python and sphinx for
-document generation.
-When sphinx generates the PyTango API documentation it uses introspection to search
-for documentation in the python code. It happens that boost overrides some python
-introspection API for functions and methods which sphinx expects to have. Therefore
-you should see many warnings of type:
+    $ ldd /usr/lib64/python2.7/site-packages/tango/_tango.so
+        linux-vdso.so.1 =>  (0x00007ffea7562000)
+        libtango.so.9 => /lib64/libtango.so.9 (0x00007fac04011000)
+        libomniORB4.so.1 => /lib64/libomniORB4.so.1 (0x00007fac03c62000)
+        libboost_python.so.1.53.0 => not found
+        [...]
 
-    `(WARNING/2) error while formatting signature for PyTango.Device_4Impl.always_executed_hook: **arg is not a Python function**`
 
-Do not worry since sphinx is able to generate the proper documentation.
+**I have more questions, where can I ask?**
 
+The `Tango forum <http://www.tango-controls.org/community/forum>`_ is a good place to get some support.
+Meet us in the `Python section <http://www.tango-controls.org/community/forum/c/development/python/>`_.
diff --git a/doc/green.rst b/doc/green.rst
index 00cbeff..9d1f850 100644
--- a/doc/green.rst
+++ b/doc/green.rst
@@ -1,19 +1,19 @@
-.. currentmodule:: PyTango
+.. currentmodule:: tango
 
 Green mode
 ----------
 
 PyTango supports cooperative green Tango objects. Since version 8.1 two *green*
-modes have been added: :obj:`~PyTango.GreenMode.Futures` and
-:obj:`~PyTango.GreenMode.Gevent`.
+modes have been added: :obj:`~tango.GreenMode.Futures` and
+:obj:`~tango.GreenMode.Gevent`.
 
-The :obj:`~PyTango.GreenMode.Futures` uses the standard python module
+The :obj:`~tango.GreenMode.Futures` uses the standard python module
 :mod:`concurrent.futures`.
-The :obj:`~PyTango.GreenMode.Gevent` mode uses the well known gevent_ library.
+The :obj:`~tango.GreenMode.Gevent` mode uses the well known gevent_ library.
 
 Currently, in 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`, :class:`Database`, 
+be implemented in the future for :class:`AttributeProxy`, :class:`Database`,
 :class:`Group` or even in the server side.
 
 You can set the PyTango green mode at a global level. Set the environment
@@ -23,22 +23,22 @@ global green mode defaults to *Synchronous*.
 
 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
+    >>> from tango import DeviceProxy, GreenMode
+    >>> from tango import set_green_mode, get_green_mode
 
     >>> get_green_mode()
-    PyTango.GreenMode.Synchronous    
+    tango.GreenMode.Synchronous
 
     >>> dev = DeviceProxy("sys/tg_test/1")
     >>> dev.get_green_mode()
-    PyTango.GreenMode.Synchronous    
+    tango.GreenMode.Synchronous
 
     >>> set_green_mode(GreenMode.Futures)
     >>> get_green_mode()
-    PyTango.GreenMode.Futures
+    tango.GreenMode.Futures
 
     >>> dev.get_green_mode()
-    PyTango.GreenMode.Futures
+    tango.GreenMode.Futures
 
 As you can see by the example, the global green mode will affect any previously
 created :class:`DeviceProxy` using the default *DeviceProxy* constructor
@@ -47,49 +47,49 @@ 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.futures import DeviceProxy
+    >>> from tango.futures import DeviceProxy
 
     >>> dev = DeviceProxy("sys/tg_test/1")
     >>> dev.get_green_mode()
-    PyTango.GreenMode.Futures
+    tango.GreenMode.Futures
 
     >>> dev.set_green_mode(GreenMode.Synchronous)
     >>> dev.get_green_mode()
-    PyTango.GreenMode.Synchronous
+    tango.GreenMode.Synchronous
 
 futures mode
 ~~~~~~~~~~~~
 
 Using :mod:`concurrent.futures` cooperative mode in PyTango is relatively easy::
 
-    >>> from PyTango.futures import DeviceProxy
+    >>> from tango.futures import DeviceProxy
 
     >>> dev = DeviceProxy("sys/tg_test/1")
     >>> dev.get_green_mode()
-    PyTango.GreenMode.Futures
+    tango.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
+The :func:`tango.futures.DeviceProxy` API is exactly the same as the standard
+:class:`~tango.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`:
+on the :func:`tango.futures.DeviceProxy`:
 
 * Constructor
 * :meth:`~DeviceProxy.state`
 * :meth:`~DeviceProxy.status`
-* :meth:`~DeviceProxy.read_attribute` 
+* :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`.
+So how does this work in fact? I see no difference from using the *standard*
+:class:`~tango.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.
@@ -102,13 +102,13 @@ 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 
+If *wait* is set to `True`, the result is the same as executing the
+*standard* method on a :class:`~tango.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
+    >>> from tango.futures import DeviceProxy
 
     >>> dev = DeviceProxy("sys/tg_test/1")
     >>> result = dev.state(wait=False)
@@ -122,7 +122,7 @@ you will need to do something like::
 
 Here is another example using :meth:`~DeviceProxy.read_attribute`::
 
-    >>> from PyTango.futures import DeviceProxy
+    >>> from tango.futures import DeviceProxy
 
     >>> dev = DeviceProxy("sys/tg_test/1")
     >>> result = dev.read_attribute('wave', wait=False)
@@ -132,7 +132,7 @@ Here is another example using :meth:`~DeviceProxy.read_attribute`::
     >>> dev_attr = result.result()
     >>> print(dev_attr)
     DeviceAttribute[
-    data_format = PyTango.AttrDataFormat.SPECTRUM
+    data_format = tango.AttrDataFormat.SPECTRUM
           dim_x = 256
           dim_y = 0
      has_failed = False
@@ -140,10 +140,10 @@ Here is another example using :meth:`~DeviceProxy.read_attribute`::
            name = 'wave'
         nb_read = 256
      nb_written = 0
-        quality = PyTango.AttrQuality.ATTR_VALID
+        quality = tango.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
+           type = tango.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,
@@ -159,41 +159,41 @@ gevent mode
 
 .. warning::
    Before using gevent mode please note that at the time of writing this
-   documentation, *PyTango.gevent* requires the latest version 1.0 of
-   gevent (which has been released the day before :-P). Also take into 
+   documentation, *tango.gevent* requires the latest version 1.0 of
+   gevent (which has been released the day before :-P). Also take into
    account that gevent_ 1.0 is *not* available on python 3.
    Please consider using the *Futures* mode instead.
 
 Using gevent_ cooperative mode in PyTango is relatively easy::
 
-    >>> from PyTango.gevent import DeviceProxy
+    >>> from tango.gevent import DeviceProxy
 
     >>> dev = DeviceProxy("sys/tg_test/1")
     >>> dev.get_green_mode()
-    PyTango.GreenMode.Gevent
+    tango.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
+The :func:`tango.gevent.DeviceProxy` API is exactly the same as the standard
+:class:`~tango.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`:
+on the :func:`tango.gevent.DeviceProxy`:
 
 * Constructor
 * :meth:`~DeviceProxy.state`
 * :meth:`~DeviceProxy.status`
-* :meth:`~DeviceProxy.read_attribute` 
+* :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`.
+So how does this work in fact? I see no difference from using the *standard*
+:class:`~tango.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.
@@ -206,13 +206,13 @@ 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 
+If *wait* is set to `True`, the result is the same as executing the
+*standard* method on a :class:`~tango.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
+    >>> from tango.gevent import DeviceProxy
 
     >>> dev = DeviceProxy("sys/tg_test/1")
     >>> result = dev.state(wait=False)
@@ -226,7 +226,7 @@ you will need to do something like::
 
 Here is another example using :meth:`~DeviceProxy.read_attribute`::
 
-    >>> from PyTango.gevent import DeviceProxy
+    >>> from tango.gevent import DeviceProxy
 
     >>> dev = DeviceProxy("sys/tg_test/1")
     >>> result = dev.read_attribute('wave', wait=False)
@@ -236,7 +236,7 @@ Here is another example using :meth:`~DeviceProxy.read_attribute`::
     >>> dev_attr = result.get()
     >>> print(dev_attr)
     DeviceAttribute[
-    data_format = PyTango.AttrDataFormat.SPECTRUM
+    data_format = tango.AttrDataFormat.SPECTRUM
           dim_x = 256
           dim_y = 0
      has_failed = False
@@ -244,10 +244,10 @@ Here is another example using :meth:`~DeviceProxy.read_attribute`::
            name = 'wave'
         nb_read = 256
      nb_written = 0
-        quality = PyTango.AttrQuality.ATTR_VALID
+        quality = tango.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
+           type = tango.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,
@@ -259,8 +259,7 @@ Here is another example using :meth:`~DeviceProxy.read_attribute`::
         w_value = None]
 
 .. note::
-   due to the internal workings of gevent, setting the *wait* flag to 
+   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`
-
diff --git a/doc/howto.rst b/doc/howto.rst
index dbda286..57596a8 100644
--- a/doc/howto.rst
+++ b/doc/howto.rst
@@ -1,4 +1,4 @@
-.. currentmodule:: PyTango
+.. currentmodule:: tango
 
 .. highlight:: python
    :linenothreshold: 3
@@ -10,22 +10,22 @@ How to
 ======
 
 This is a small list of how-tos specific to PyTango. A more general Tango how-to
-list can be found `here <http://www.tango-controls.org/howtos>`_.
+list can be found `here <http://www.tango-controls.org/resources/howto>`_.
 
 
 Check the default TANGO host
 ----------------------------
 
-The default TANGO host can be defined using the environment variable 
+The default TANGO host can be defined using the environment variable
 :envvar:`TANGO_HOST` or in a `tangorc` file
 (see `Tango environment variables <http://www.esrf.eu/computing/cs/tango/tango_doc/kernel_doc/ds_prog/node11.html#SECTION0011123000000000000000>`_
 for complete information)
 
 To check what is the current value that TANGO uses for the default configuration
 simple do::
- 
-    >>> import PyTango
-    >>> PyTango.ApiUtil.get_env_var("TANGO_HOST")
+
+    >>> import tango
+    >>> tango.ApiUtil.get_env_var("TANGO_HOST")
     'homer.simpson.com:10000'
 
 Check TANGO version
@@ -34,18 +34,18 @@ Check TANGO version
 There are two library versions you might be interested in checking:
 The PyTango version::
 
-    >>> import PyTango
-    >>> PyTango.__version__
-    '8.1.1'
+    >>> import tango
+    >>> tango.__version__
+    '9.2.0'
 
-    >>> PyTango.__version_info__
-    (8, 1, 1, 'final', 0)
+    >>> tango.__version_info__
+    (9, 2, 0, 'b', 1)
 
 ... and the Tango C++ library version that PyTango was compiled with::
 
-    >>> import PyTango
-    >>> PyTango.constants.TgLibVers
-    '8.1.2'
+    >>> import tango
+    >>> tango.constants.TgLibVers
+    '9.2.0'
 
 
 Report a bug
@@ -56,9 +56,11 @@ Bugs can be reported as tickets in `TANGO Source forge <https://sourceforge.net/
 When making a bug report don't forget to select *PyTango* in **Category**.
 
 It is also helpfull if you can put in the ticket description the PyTango information.
-It can be a dump of::
+It can be a dump of:
+
+.. sourcecode:: console
 
-   $ python -c "from PyTango.utils import info; print(info())"
+   $ python -c "from tango.utils import info; print(info())"
 
 Test the connection to the Device and get it's current state
 ------------------------------------------------------------
@@ -66,7 +68,7 @@ Test the connection to the Device and get it's current state
 One of the most basic examples is to get a reference to a device and
 determine if it is running or not::
 
-    from PyTango import DeviceProxy
+    from tango import DeviceProxy
 
     # Get proxy on the tango_test1 device
     print("Creating proxy to TangoTest device...")
@@ -74,7 +76,7 @@ determine if it is running or not::
 
     # ping it
     print(tango_test.ping())
-            
+
     # get the state
     print(tango_test.state())
 
@@ -83,18 +85,18 @@ Read and write attributes
 
 Basic read/write attribute operations::
 
-    from PyTango import DeviceProxy
+    from tango import DeviceProxy
 
     # Get proxy on the tango_test1 device
     print("Creating proxy to TangoTest device...")
     tango_test = DeviceProxy("sys/tg_test/1")
 
-    # Read a scalar attribute. This will return a PyTango.DeviceAttribute
+    # Read a scalar attribute. This will return a tango.DeviceAttribute
     # Member 'value' contains the attribute value
     scalar = tango_test.read_attribute("long_scalar")
     print("Long_scalar value = {0}".format(scalar.value))
 
-    # PyTango provides a shorter way: 
+    # PyTango provides a shorter way:
     scalar = tango_test.long_scalar.value
     print("Long_scalar value = {0}".format(scalar))
 
@@ -107,7 +109,7 @@ Basic read/write attribute operations::
     scalar_value = 18
     tango_test.write_attribute("long_scalar", scalar_value)
 
-    #  PyTango provides a shorter way: 
+    #  PyTango provides a shorter way:
     tango_test.long_scalar = scalar_value
 
     # Write a spectrum attribute
@@ -128,7 +130,7 @@ more memory efficient PyTango. You can also use numpy to specify the values when
 writing attributes, especially if you know the exact attribute type::
 
     import numpy
-    from PyTango import DeviceProxy
+    from tango import DeviceProxy
 
     # Get proxy on the tango_test1 device
     print("Creating proxy to TangoTest device...")
@@ -147,9 +149,9 @@ Execute commands
 ----------------
 
 As you can see in the following example, when scalar types are used, the Tango
-binding automagically manages the data types, and writing scripts is quite easy::            
+binding automagically manages the data types, and writing scripts is quite easy::
 
-    from PyTango import DeviceProxy
+    from tango import DeviceProxy
 
     # Get proxy on the tango_test1 device
     print("Creating proxy to TangoTest device...")
@@ -176,13 +178,13 @@ Execute commands with more complex types
 In this case you have to use put your arguments data in the correct python
 structures::
 
-    from PyTango import DeviceProxy
+    from tango import DeviceProxy
 
     # Get proxy on the tango_test1 device
     print("Creating proxy to TangoTest device...")
     tango_test = DeviceProxy("sys/tg_test/1")
 
-    # The input argument is a DevVarLongStringArray so create the argin 
+    # The input argument is a DevVarLongStringArray so create the argin
     # variable containing an array of longs and an array of strings
     argin = ([1,2,3], ["Hello", "TangoTest device"])
 
@@ -192,13 +194,13 @@ structures::
 Work with Groups
 ----------------
 
-.. todo:: 
+.. todo::
    write this how to
 
 Handle errors
 -------------
 
-.. todo:: 
+.. todo::
    write this how to
 
 .. _pytango-howto-server:
@@ -210,7 +212,7 @@ Registering devices
 
 Here is how to define devices in the Tango DataBase::
 
-    from PyTango import Database, DbDevInfo
+    from tango import Database, DbDevInfo
 
     #  A reference on the DataBase
     db = Database()
@@ -250,7 +252,7 @@ The following python script example (containing some functions and instructions
 manipulating a Galil motor axis device server) gives an idea of how the Tango
 API should be accessed from Python::
 
-    from PyTango import DeviceProxy
+    from tango import DeviceProxy
 
     # connecting to the motor axis device
     axis1 = DeviceProxy("microxas/motorisation/galilbox")
@@ -292,22 +294,22 @@ Write a server
 Before reading this chapter you should be aware of the TANGO basic concepts.
 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 <http://www.tango-controls.org/TangoKernel>`_
+`Tango control system manual <http://www.tango-controls.org/resources/documentation/kernel/>`_
 
-Since version 8.1, PyTango provides a helper module which simplifies the 
+Since version 8.1, PyTango provides a helper module which simplifies the
 development of a Tango device server. This helper is provided through the
-:mod:`PyTango.server` module.
+:mod:`tango.server` module.
 
 Here is a simple example on how to write a *Clock* device server using the
 high level API
 
 .. code-block:: python
    :linenos:
-    
+
     import time
-    from PyTango.server import run
-    from PyTango.server import Device, DeviceMeta
-    from PyTango.server import attribute, command   
+    from tango.server import run
+    from tango.server import Device, DeviceMeta
+    from tango.server import attribute, command, pipe
 
 
     class Clock(Device):
@@ -321,6 +323,13 @@ high level API
         def strftime(self, format):
             return time.strftime(format)
 
+	@pipe
+	def info(self):
+            return ('Information',
+                    dict(manufacturer='Tango',
+	                 model='PS2000',
+                         version_number=123))
+
 
     if __name__ == "__main__":
         run([Clock])
@@ -330,28 +339,32 @@ high level API
     import the necessary symbols
 
 **line 7**
-    tango device class definition. A Tango device must inherit from 
-    :class:`PyTango.server.Device`
+    tango device class definition. A Tango device must inherit from
+    :class:`tango.server.Device`
 
 **line 8**
     mandatory *magic* line. A Tango device must define the metaclass as
-    :class:`PyTango.server.DeviceClass`. This has to be done due to a limitation
+    :class:`tango.server.DeviceClass`. This has to be done due to a limitation
     on boost-python
 
 **line 10-12**
-    definition of the *time* attribute. By default, attributes are double, scalar, 
-    read-only. Check the :class:`~PyTango.server.attribute` for the complete
+    definition of the *time* attribute. By default, attributes are double, scalar,
+    read-only. Check the :class:`~tango.server.attribute` for the complete
     list of attribute options.
 
 **line 14-16**
     the method *strftime* is exported as a Tango command. In receives a string
     as argument and it returns a string. If a method is to be exported as a
     Tango command, it must be decorated as such with the
-    :func:`~PyTango.server.command` decorator
+    :func:`~tango.server.command` decorator
 
-**line 20**
+**line 18-23**
+    definition of the *info* pipe. Check the :class:`~tango.server.pipe`
+    for the complete list of pipe options.
+
+**line 28**
     start the Tango run loop. The mandatory argument is a list of python classes
-    that are to be exported as Tango classes. Check :func:`~PyTango.server.run`
+    that are to be exported as Tango classes. Check :func:`~tango.server.run`
     for the complete list of options
 
 Here is a more complete example on how to write a *PowerSupply* device server
@@ -370,9 +383,9 @@ using the high level API. The example contains:
     from time import time
     from numpy.random import random_sample
 
-    from PyTango import AttrQuality, AttrWriteType, DispLevel, run
-    from PyTango.server import Device, DeviceMeta, attribute, command
-    from PyTango.server import class_property, device_property
+    from tango import AttrQuality, AttrWriteType, DispLevel, run
+    from tango.server import Device, DeviceMeta, attribute, command
+    from tango.server import class_property, device_property
 
 
     class PowerSupply(Device):
@@ -387,11 +400,11 @@ using the high level API. The example contains:
                             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)
 
@@ -402,10 +415,10 @@ using the high level API. The example contains:
 
         def get_current(self):
             return 2.3456, time(), AttrQuality.ATTR_WARNING
-    
+
         def set_current(self, current):
             print("Current set to %f" % current)
-    
+
         def get_noise(self):
             return random_sample((1024, 1024))
 
@@ -421,9 +434,9 @@ using the high level API. The example contains:
 .. note::
     the ``__metaclass__`` statement is mandatory due to a limitation in the
     *boost-python* library used by PyTango.
-    
+
     If you are using python 3 you can write instead::
-        
+
         class PowerSupply(Device, metaclass=DeviceMeta)
             pass
 
@@ -446,9 +459,9 @@ by starting it with the verbose option. Example::
 
     python PyDsExp.py PyDs1 -v4
 
-This activates the console tango logging target and filters messages with 
+This activates the console tango logging target and filters messages with
 importance level DEBUG or more.
-The links above provided detailed information on how to configure log levels 
+The links above provided detailed information on how to configure log levels
 and log targets. In this document we will focus on how to write log messages on
 your device server.
 
@@ -456,19 +469,19 @@ Basic logging
 ~~~~~~~~~~~~~
 
 The most basic way to write a log message on your device is to use the
-:class:`~PyTango.server.Device` logging related methods:
+:class:`~tango.server.Device` logging related methods:
 
-    * :meth:`~PyTango.server.Device.debug_stream`
-    * :meth:`~PyTango.server.Device.info_stream`
-    * :meth:`~PyTango.server.Device.warn_stream`
-    * :meth:`~PyTango.server.Device.error_stream`
-    * :meth:`~PyTango.server.Device.fatal_stream`
+    * :meth:`~tango.server.Device.debug_stream`
+    * :meth:`~tango.server.Device.info_stream`
+    * :meth:`~tango.server.Device.warn_stream`
+    * :meth:`~tango.server.Device.error_stream`
+    * :meth:`~tango.server.Device.fatal_stream`
 
 Example::
 
     def read_voltage(self):
         self.info_stream("read voltage attribute")
-	# ... 
+	# ...
 	return voltage_value
 
 This will print a message like::
@@ -517,7 +530,7 @@ Logging with decorators
 PyTango provides a set of decorators that place automatic log messages when
 you enter and when you leave a python method. For example::
 
-    @PyTango.DebugIt()
+    @tango.DebugIt()
     def read_Long_attr(self, the_att):
         the_att.set_value(self.attr_long)
 
@@ -528,11 +541,11 @@ value. Your output would look something like::
     1282208997 [-1215965504] DEBUG test/pydsexp/1 <- read_Long_attr()
 
 Decorators exist for all tango log levels:
-    * :class:`PyTango.DebugIt`
-    * :class:`PyTango.InfoIt`
-    * :class:`PyTango.WarnIt`
-    * :class:`PyTango.ErrorIt`
-    * :class:`PyTango.FatalIt`
+    * :class:`tango.DebugIt`
+    * :class:`tango.InfoIt`
+    * :class:`tango.WarnIt`
+    * :class:`tango.ErrorIt`
+    * :class:`tango.FatalIt`
 
 The decorators receive three optional arguments:
     * show_args - shows method arguments in log message (defaults to False)
@@ -540,8 +553,8 @@ The decorators receive three optional arguments:
     * show_ret - shows return value in log message (defaults to False)
 
 Example::
-    
-    @PyTango.DebugIt(show_args=True, show_ret=True)
+
+    @tango.DebugIt(show_args=True, show_ret=True)
     def IOLong(self, in_data):
         return in_data * 2
 
@@ -560,8 +573,8 @@ separated python files: A :class:`PLC` class in a :file:`PLC.py`::
 
     # PLC.py
 
-    from PyTango.server import Device, DeviceMeta, run
-    
+    from tango.server import Device, DeviceMeta, run
+
     class PLC(Device):
         __metaclass__ = DeviceMeta
 
@@ -574,8 +587,8 @@ separated python files: A :class:`PLC` class in a :file:`PLC.py`::
 
     # IRMirror.py
 
-    from PyTango.server import Device, DeviceMeta, run
-    
+    from tango.server import Device, DeviceMeta, run
+
     class IRMirror(Device):
         __metaclass__ = DeviceMeta
 
@@ -590,7 +603,7 @@ a :file:`PLCMirror.py` containing the code::
 
     # PLCMirror.py
 
-    from PyTango.server import run
+    from tango.server import run
     from PLC import PLC
     from IRMirror import IRMirror
 
@@ -600,23 +613,23 @@ It is also possible to add C++ Tango class in a Python device server as soon as:
     1. The Tango class is in a shared library
     2. It exist a C function to create the Tango class
 
-For a Tango class called MyTgClass, the shared library has to be called 
-MyTgClass.so and has to be in a directory listed in the LD_LIBRARY_PATH 
-environment variable. The C function creating the Tango class has to be called 
-_create_MyTgClass_class() and has to take one parameter of type "char \*" which 
-is the Tango class name. Here is an example of the main function of the same 
+For a Tango class called MyTgClass, the shared library has to be called
+MyTgClass.so and has to be in a directory listed in the LD_LIBRARY_PATH
+environment variable. The C function creating the Tango class has to be called
+_create_MyTgClass_class() and has to take one parameter of type "char \*" which
+is the Tango class name. Here is an example of the main function of the same
 device server than before but with one C++ Tango class called SerialLine::
 
-    import PyTango
+    import tango
     import sys
-    
+
     if __name__ == '__main__':
-        py = PyTango.Util(sys.argv)
+        py = tango.Util(sys.argv)
         util.add_class('SerialLine', 'SerialLine', language="c++")
         util.add_class(PLCClass, PLC, 'PLC')
         util.add_class(IRMirrorClass, IRMirror, 'IRMirror')
-        
-        U = PyTango.Util.instance()
+
+        U = tango.Util.instance()
         U.server_init()
         U.server_run()
 
@@ -626,24 +639,24 @@ device server than before but with one C++ Tango class called SerialLine::
 Create attributes dynamically
 -----------------------------
 
-It is also possible to create dynamic attributes within a Python device server. 
-There are several ways to create dynamic attributes. One of the way, is to 
+It is also possible to create dynamic attributes within a Python device server.
+There are several ways to create dynamic attributes. One of the way, is to
 create all the devices within a loop, then to create the dynamic attributes and
 finally to make all the devices available for the external world. In C++ device
 server, this is typically done within the <Device>Class::device_factory() method.
 In Python device server, this method is generic and the user does not have one.
 Nevertheless, this generic device_factory method calls a method named dyn_attr()
 allowing the user to create his dynamic attributes. It is simply necessary to
-re-define this method within your <Device>Class and to create the dynamic 
+re-define this method within your <Device>Class and to create the dynamic
 attribute within this method:
 
     ``dyn_attr(self, dev_list)``
-    
-    where dev_list is a list containing all the devices created by the 
+
+    where dev_list is a list containing all the devices created by the
     generic device_factory() method.
 
-There is another point to be noted regarding dynamic attribute within Python 
-device server. The Tango Python device server core checks that for each 
+There is another point to be noted regarding dynamic attribute within Python
+device server. The Tango Python device server core checks that for each
 attribute it exists methods named <attribute_name>_read and/or
 <attribute_name>_write and/or is_<attribute_name>_allowed. Using dynamic
 attribute, it is not possible to define these methods because attributes name
@@ -652,32 +665,32 @@ To address this issue, the Device_3Impl::add_attribute() method has a diferent
 signature for Python device server which is:
 
     ``add_attribute(self, attr, r_meth = None, w_meth = None, is_allo_meth = None)``
-    
-attr is an instance of the Attr class, r_meth is the method which has to be 
-executed with the attribute is read, w_meth is the method to be executed 
+
+attr is an instance of the Attr class, r_meth is the method which has to be
+executed with the attribute is read, w_meth is the method to be executed
 when the attribute is written and is_allo_meth is the method to be executed
 to implement the attribute state machine. The method passed here as argument
-as to be class method and not object method. Which argument you have to use 
-depends on the type of the attribute (A WRITE attribute does not need a 
+as to be class method and not object method. Which argument you have to use
+depends on the type of the attribute (A WRITE attribute does not need a
 read method). Note, that depending on the number of argument you pass to this
-method, you may have to use Python keyword argument. The necessary methods 
+method, you may have to use Python keyword argument. The necessary methods
 required by the Tango Python device server core will be created automatically
 as a forward to the methods given as arguments.
 
-Here is an example of a device which has a TANGO command called 
+Here is an example of a device which has a TANGO command called
 *createFloatAttribute*. When called, this command creates a new scalar floating
 point attribute with the specified name::
 
- 
-    from PyTango import Util, Attr
-    from PyTango.server import DeviceMeta, Device, command
+
+    from tango import Util, Attr
+    from tango.server import DeviceMeta, Device, command
 
     class MyDevice(Device):
     	__metaclass__ = DeviceMeta
 
 	@command(dtype_in=str)
         def CreateFloatAttribute(self, attr_name):
-	    attr = Attr(attr_name, PyTango.DevDouble) 
+	    attr = Attr(attr_name, tango.DevDouble)
 	    self.add_attribute(attr, self.read_General, self.write_General)
 
 	def read_General(self, attr):
@@ -701,23 +714,23 @@ There are two ways to create a new device which are described below.
 Tango imposes a limitation: the tango class(es) of the device(s) that is(are)
 to be created must have been registered before the server starts.
 If you use the high level API, the tango class(es) must be listed in the call
-to :func:`~PyTango.server.run`. If you use the lower level server API, it must
-be done using individual calls to :meth:`~PyTango.Util.add_class`.
+to :func:`~tango.server.run`. If you use the lower level server API, it must
+be done using individual calls to :meth:`~tango.Util.add_class`.
 
 
 Dynamic device from a known tango class name
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-If you know the tango class name but you don't have access to the :class:`PyTango.DeviceClass`
-(or you are too lazy to search how to get it ;-) the way to do it is call 
-:meth:`~PyTango.Util.create_device` / :meth:`~PyTango.Util.delete_device`.
-Here is an example of implementing a tango command on one of your devices that 
+If you know the tango class name but you don't have access to the :class:`tango.DeviceClass`
+(or you are too lazy to search how to get it ;-) the way to do it is call
+:meth:`~tango.Util.create_device` / :meth:`~tango.Util.delete_device`.
+Here is an example of implementing a tango command on one of your devices that
 creates a device of some arbitrary class (the example assumes the tango commands
 'CreateDevice' and 'DeleteDevice' receive a parameter of type DevVarStringArray
 with two strings. No error processing was done on the code for simplicity sake)::
 
-    from PyTango import Util
-    from PyTango.server import DeviceMeta, Device, command
+    from tango import Util
+    from tango.server import DeviceMeta, Device, command
 
     class MyDevice(Device):
     	__metaclass__ = DeviceMeta
@@ -727,7 +740,7 @@ with two strings. No error processing was done on the code for simplicity sake):
             klass_name, dev_name = pars
             util = Util.instance()
             util.create_device(klass_name, dev_name, alias=None, cb=None)
-        
+
 	@command(dtype_in=[str])
         def DeleteDevice(self, pars):
             klass_name, dev_name = pars
@@ -742,30 +755,30 @@ some device properties.
 Dynamic device from a known tango class
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-If you already have access to the :class:`~PyTango.DeviceClass` object that
+If you already have access to the :class:`~tango.DeviceClass` object that
 corresponds to the tango class of the device to be created you can call directly
-the :meth:`~PyTango.DeviceClass.create_device` / :meth:`~PyTango.DeviceClass.delete_device`.
-For example, if you wish to create a clone of your device, you can create a 
+the :meth:`~tango.DeviceClass.create_device` / :meth:`~tango.DeviceClass.delete_device`.
+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):
-        
+    class MyDevice(tango.Device_4Impl):
+
         def fill_new_device_properties(self, dev_name):
             prop_names = db.get_device_property_list(self.get_name(), "*")
             prop_values = db.get_device_property(self.get_name(), prop_names.value_string)
             db.put_device_property(dev_name, prop_values)
-            
+
             # do the same for attributes...
-            ... 
-        
+            ...
+
         def Clone(self, dev_name):
             klass = self.get_device_class()
             klass.create_device(dev_name, alias=None, cb=self.fill_new_device_properties)
-            
+
         def DeleteSibling(self, dev_name):
             klass = self.get_device_class()
             klass.delete_device(dev_name)
-            
+
 Note that the cb parameter is optional. In the example it is given for
 demonstration purposes only.
 
@@ -777,8 +790,8 @@ Write a server (original API)
 This chapter describes how to develop a PyTango device server using the
 original PyTango server API. This API mimics the C++ API and is considered
 low level.
-You should write a server using this API if you are using code generated by 
-`Pogo tool <http://www.esrf.eu/computing/cs/tango/tango_doc/tools_doc/pogo_doc/index.html>`_
+You should write a server using this API if you are using code generated by
+`Pogo tool <http://www.esrf.eu/computing/cs/tango/tango_doc/tools_doc/pogo_doc>`_
 or if for some reason the high level API helper doesn't provide a feature
 you need (in that case think of writing a mail to tango mailing list explaining
 what you cannot do).
@@ -798,10 +811,10 @@ The rule of this part of a Tango device server is to:
 The following is a typical code for this main function::
 
     if __name__ == '__main__':
-        util = PyTango.Util(sys.argv)
+        util = tango.Util(sys.argv)
         util.add_class(PyDsExpClass, PyDsExp)
-        
-        U = PyTango.Util.instance()
+
+        U = tango.Util.instance()
         U.server_init()
         U.server_run()
 
@@ -809,10 +822,10 @@ The following is a typical code for this main function::
     Create the Util object passing it the interpreter command line arguments
 **Line 3**
     Add the Tango class *PyDsExp* to the device server. The :meth:`Util.add_class`
-    method of the Util class has two arguments which are the Tango class 
+    method of the Util class has two arguments which are the Tango class
     PyDsExpClass instance and the Tango PyDsExp instance.
-    This :meth:`Util.add_class` method is only available since version 
-    7.1.2. If you are using an older version please use 
+    This :meth:`Util.add_class` method is only available since version
+    7.1.2. If you are using an older version please use
     :meth:`Util.add_TgClass` instead.
 **Line 7**
     Initialize the Tango device server
@@ -831,44 +844,44 @@ The rule of this class is to :
 
 In our example, the code of this Python class looks like::
 
-    class PyDsExpClass(PyTango.DeviceClass):
+    class PyDsExpClass(tango.DeviceClass):
 
-        cmd_list = { 'IOLong' : [ [ PyTango.ArgType.DevLong, "Number" ],
-                                  [ PyTango.ArgType.DevLong, "Number * 2" ] ],
-                     'IOStringArray' : [ [ PyTango.ArgType.DevVarStringArray, "Array of string" ],
-                                         [ PyTango.ArgType.DevVarStringArray, "This reversed array"] ],
+        cmd_list = { 'IOLong' : [ [ tango.ArgType.DevLong, "Number" ],
+                                  [ tango.ArgType.DevLong, "Number * 2" ] ],
+                     'IOStringArray' : [ [ tango.ArgType.DevVarStringArray, "Array of string" ],
+                                         [ tango.ArgType.DevVarStringArray, "This reversed array"] ],
         }
 
-        attr_list = { 'Long_attr' : [ [ PyTango.ArgType.DevLong ,
-                                        PyTango.AttrDataFormat.SCALAR ,
-                                        PyTango.AttrWriteType.READ],
+        attr_list = { 'Long_attr' : [ [ tango.ArgType.DevLong ,
+                                        tango.AttrDataFormat.SCALAR ,
+                                        tango.AttrWriteType.READ],
                                       { 'min alarm' : 1000, 'max alarm' : 1500 } ],
 
-                     'Short_attr_rw' : [ [ PyTango.ArgType.DevShort,
-                                           PyTango.AttrDataFormat.SCALAR,
-                                           PyTango.AttrWriteType.READ_WRITE ] ]
+                     'Short_attr_rw' : [ [ tango.ArgType.DevShort,
+                                           tango.AttrDataFormat.SCALAR,
+                                           tango.AttrWriteType.READ_WRITE ] ]
         }
 
-        
 
-**Line 1** 
+
+**Line 1**
     The PyDsExpClass class has to inherit from the :class:`DeviceClass` class
-    
+
 **Line 3 to 7**
-    Definition of the cmd_list :class:`dict` defining commands. The *IOLong* command 
-    is defined at lines 3 and 4. The *IOStringArray* command is defined in 
+    Definition of the cmd_list :class:`dict` defining commands. The *IOLong* command
+    is defined at lines 3 and 4. The *IOStringArray* command is defined in
     lines 5 and 6
 **Line 9 to 17**
     Definition of the attr_list :class:`dict` defining attributes. The *Long_attr*
-    attribute is defined at lines 9 to 12 and the *Short_attr_rw* attribute is 
+    attribute is defined at lines 9 to 12 and the *Short_attr_rw* attribute is
     defined at lines 14 to 16
-    
+
 If you have something specific to do in the class constructor like
-initializing some specific data member, you will have to code a class 
+initializing some specific data member, you will have to code a class
 constructor. An example of such a contructor is ::
 
     def __init__(self, name):
-        PyTango.DeviceClass.__init__(self, name)
+        tango.DeviceClass.__init__(self, name)
         self.set_type("TestDevice")
 
 The device type is set at line 3.
@@ -881,14 +894,14 @@ called *cmd_list* as a data member of the xxxClass class of the Tango class.
 This :class:`dict` has one element per command. The element key is the command
 name. The element value is a python list which defines the command. The generic
 form of a command definition is:
-    
+
     ``'cmd_name' : [ [in_type, <"In desc">], [out_type, <"Out desc">], <{opt parameters}>]``
 
 The first element of the value list is itself a list with the command input
-data type (one of the :class:`PyTango.ArgType` pseudo enumeration value) and
+data type (one of the :class:`tango.ArgType` pseudo enumeration value) and
 optionally a string describing this input argument. The second element of the
 value list is also a list with the command output data type (one of the
-:class:`PyTango.ArgType` pseudo enumeration value) and optionaly a string
+:class:`tango.ArgType` pseudo enumeration value) and optionaly a string
 describing it. These two elements are mandatory. The third list element is
 optional and allows additional command definition. The authorized element for
 this :class:`dict` are summarized in the following array:
@@ -910,7 +923,7 @@ As shown in the previous example, attributes have to be defined in a :class:`dic
 called **attr_list** as a data
 member of the xxxClass class of the Tango class. This :class:`dict` has one element
 per attribute. The element key is the attribute name. The element value is a
-python :class:`list` which defines the attribute. The generic form of an 
+python :class:`list` which defines the attribute. The generic form of an
 attribute definition is:
 
     ``'attr_name' : [ [mandatory parameters], <{opt parameters}>]``
@@ -918,12 +931,12 @@ attribute definition is:
 For any kind of attributes, the mandatory parameters are:
 
     ``[attr data type, attr data format, attr data R/W type]``
-    
+
 The attribute data type is one of the possible value for attributes of the
-:class:`PyTango.ArgType` pseudo enunmeration. The attribute data format is one
-of the possible value of the :class:`PyTango.AttrDataFormat` pseudo enumeration
+:class:`tango.ArgType` pseudo enunmeration. The attribute data format is one
+of the possible value of the :class:`tango.AttrDataFormat` pseudo enumeration
 and the attribute R/W type is one of the possible value of the
-:class:`PyTango.AttrWriteType` pseudo enumeration. For spectrum attribute,
+:class:`tango.AttrWriteType` pseudo enumeration. For spectrum attribute,
 you have to add the maximum X size (a number). For image attribute, you have
 to add the maximun X and Y dimension (two numbers). The authorized elements for
 the :class:`dict` defining optional parameters are summarized in the following
@@ -932,7 +945,7 @@ array:
     +-------------------+-----------------------------------+------------------------------------------+
     |       key         |              value                |            definition                    |
     +===================+===================================+==========================================+
-    | "display level"   | PyTango.DispLevel enum value      |   The attribute display level            |
+    | "display level"   | tango.DispLevel enum value        |   The attribute display level            |
     +-------------------+-----------------------------------+------------------------------------------+
     |"polling period"   |          Any number               | The attribute polling period (mS)        |
     +-------------------+-----------------------------------+------------------------------------------+
@@ -974,16 +987,16 @@ The PyDsExp class in Python
 The rule of this class is to implement methods executed by commands and attributes.
 In our example, the code of this class looks like::
 
-    class PyDsExp(PyTango.Device_4Impl):
+    class PyDsExp(tango.Device_4Impl):
 
         def __init__(self,cl,name):
-            PyTango.Device_4Impl.__init__(self, cl, name)
+            tango.Device_4Impl.__init__(self, cl, name)
             self.info_stream('In PyDsExp.__init__')
             PyDsExp.init_device(self)
 
         def init_device(self):
             self.info_stream('In Python init_device method')
-            self.set_state(PyTango.DevState.ON)
+            self.set_state(tango.DevState.ON)
             self.attr_short_rw = 66
             self.attr_long = 1246
 
@@ -997,7 +1010,7 @@ In our example, the code of this class looks like::
         #------------------------------------------------------------------
 
         def is_IOLong_allowed(self):
-            return self.get_state() == PyTango.DevState.ON
+            return self.get_state() == tango.DevState.ON
 
         def IOLong(self, in_data):
             self.info_stream('IOLong', in_data)
@@ -1008,7 +1021,7 @@ In our example, the code of this class looks like::
         #------------------------------------------------------------------
 
         def is_IOStringArray_allowed(self):
-            return self.get_state() == PyTango.DevState.ON
+            return self.get_state() == tango.DevState.ON
 
         def IOStringArray(self, in_data):
             l = range(len(in_data)-1, -1, -1)
@@ -1035,7 +1048,7 @@ In our example, the code of this class looks like::
             the_att.set_value(self.attr_long)
 
         def is_Long_attr_allowed(self, req_type):
-            return self.get_state() in (PyTango.DevState.ON,)
+            return self.get_state() in (tango.DevState.ON,)
 
         def read_Short_attr_rw(self, the_att):
             self.info_stream("read_Short_attr_rw")
@@ -1048,10 +1061,10 @@ In our example, the code of this class looks like::
             self.attr_short_rw = the_att.get_write_value()
 
         def is_Short_attr_rw_allowed(self, req_type):
-            return self.get_state() in (PyTango.DevState.ON,)
+            return self.get_state() in (tango.DevState.ON,)
 
 **Line 1**
-    The PyDsExp class has to inherit from the PyTango.Device_4Impl
+    The PyDsExp class has to inherit from the tango.Device_4Impl
 **Line 3 to 6**
     PyDsExp class constructor. Note that at line 6, it calls the *init_device()*
     method
@@ -1078,7 +1091,7 @@ In our example, the code of this class looks like::
     Python integer.
 **Line 56 to 59**
     The method executed when the *Long_attr* attribute is read. Note that before
-    PyTango 7 it sets the attribute value with the PyTango.set_attribute_value
+    PyTango 7 it sets the attribute value with the tango.set_attribute_value
     function. Now the same can be done using the set_value of the attribute
     object
 **Line 61 to 62**
@@ -1106,7 +1119,7 @@ In our example, the code of this class looks like::
 General methods
 ###############
 
-The following array summarizes how the general methods we have in a Tango 
+The following array summarizes how the general methods we have in a Tango
 device server are implemented in Python.
 
 +----------------------+-------------------------+-------------+-----------+
@@ -1126,14 +1139,14 @@ device server are implemented in Python.
 Implementing a command
 ######################
 
-Commands are defined as described above. Nevertheless, some methods implementing 
-them have to be written. These methods names are fixed and depend on command 
+Commands are defined as described above. Nevertheless, some methods implementing
+them have to be written. These methods names are fixed and depend on command
 name. They have to be called:
 
     - ``is_<Cmd_name>_allowed(self)``
     - ``<Cmd_name>(self, arg)``
 
-For instance, with a command called *MyCmd*, its is_allowed method has to be 
+For instance, with a command called *MyCmd*, its is_allowed method has to be
 called `is_MyCmd_allowed` and its execution method has to be called simply *MyCmd*.
 The following array gives some more info on these methods.
 
@@ -1153,7 +1166,7 @@ calls a command named IOLong::
 
     def is_IOLong_allowed(self):
         self.debug_stream("in is_IOLong_allowed")
-        return self.get_state() == PyTango.DevState.ON
+        return self.get_state() == tango.DevState.ON
 
     def IOLong(self, in_data):
         self.info_stream('IOLong', in_data)
@@ -1175,20 +1188,20 @@ calls a command named IOLong::
     more information about PyTango log system).
 **Line 9**
     return the output of executing the tango command
-    
+
 Implementing an attribute
 #########################
 
 Attributes are defined as described in chapter 5.3.2. Nevertheless, some methods
-implementing them have to be written. These methods names are fixed and depend 
+implementing them have to be written. These methods names are fixed and depend
 on attribute name. They have to be called:
 
     - ``is_<Attr_name>_allowed(self, req_type)``
     - ``read_<Attr_name>(self, attr)``
     - ``write_<Attr_name>(self, attr)``
 
-For instance, with an attribute called *MyAttr*, its is_allowed method has to be 
-called *is_MyAttr_allowed*, its read method has to be called *read_MyAttr* and 
+For instance, with an attribute called *MyAttr*, its is_allowed method has to be
+called *is_MyAttr_allowed*, its read method has to be called *read_MyAttr* and
 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
@@ -1199,7 +1212,7 @@ 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*::
-    
+
     def read_Long_attr(self, the_att):
         self.info_stream("read attribute name Long_attr")
         the_att.set_value(self.attr_long)
@@ -1211,10 +1224,10 @@ read an attribute which is called *Long_attr*::
     write a log message to the tango INFO stream (click :ref:`here <logging>`
     for more information about PyTango log system).
 **Line 3**
-    Set the attribute value using the method set_value() with the attribute 
+    Set the attribute value using the method set_value() with the attribute
     value as parameter.
-    
-The following code is an example of how you write code executed when a client 
+
+The following code is an example of how you write code executed when a client
 write the Short_attr_rw attribute::
 
     def write_Short_attr_rw(self,the_att):
@@ -1222,14 +1235,12 @@ write the Short_attr_rw attribute::
         self.attr_short_rw = the_att.get_write_value(data)
 
 **Line 1**
-       Method declaration with "the_att" being an instance of the Attribute 
+       Method declaration with "the_att" being an instance of the Attribute
        class representing the Short_attr_rw attribute
 **Line 2**
     write a log message to the tango INFO stream (click :ref:`here <logging>` for
     more information about PyTango log system).
 **Line 3**
     Get the value sent by the client using the method get_write_value() and
-    store the value written in the device object. Our attribute is a scalar 
+    store the value written in the device object. Our attribute is a scalar
     short attribute so the return value is an int
-
-
diff --git a/doc/itango.rst b/doc/itango.rst
index 97931c1..0ccf71a 100644
--- a/doc/itango.rst
+++ b/doc/itango.rst
@@ -10,705 +10,11 @@ ITango
 ITango is a PyTango CLI based on IPython_. It is designed to be used as an
 IPython profile.
 
-ITango is available since PyTango 7.1.2
-
-You can start ITango by typing on the command line::
-
-    $ itango
-
-or the equivalent::
-
-    $ ipython --profile=tango
-
-and you should get something like this:
-
-.. image:: _static/itango00.png
-    :align: center
-    :width: 75%
-
-
-.. _itango-features:
-
-Features
---------
-
-ITango works like a normal python console, but it gives you in addition a nice
-set of features from IPython_ like:
-
-    - proper (bash-like) command completion
-    - automatic expansion of python variables, functions, types
-    - command history (with up/down arrow keys, %hist command)
-    - help system ( object? syntax, help(object))
-    - persistently store your favorite variables
-    - color modes
- 
-(for a complete list checkout the `IPython web page <http://ipython.org/>`_)
-
-Plus an additional set o Tango_ specific features:
-
-    - automatic import of Tango objects to the console namespace (:mod:`PyTango`
-      module, :class:`~PyTango.DeviceProxy` (=Device),
-      :class:`~PyTango.Database`, :class:`~PyTango.Group`
-      and :class:`~PyTango.AttributeProxy` (=Attribute))
-    - device name completion
-    - attribute name completion
-    - automatic tango object member completion
-    - list tango devices, classes, servers
-    - customized tango error message
-    - tango error introspection
-    - switch database
-    - refresh database
-    - list tango devices, classes
-    - store favorite tango objects
-    - store favorite tango devices
-    - tango color modes
-
-Check the :ref:`itango-highlights` to see how to put these feature to good use
-:-)
-
-
-.. currentmodule:: PyTango
-
-.. _itango-highlights:
-
-Highlights
-----------
-
-Tab completion
-~~~~~~~~~~~~~~
-
-ITango exports many tango specific objects to the console namespace.
-These include:
-
-    - the PyTango module itself
-      
-      .. sourcecode:: itango
-
-            ITango [1]: PyTango
-            Result [1]: <module 'PyTango' from ...>
-                         
-    - The :class:`DeviceProxy` (=Device), :class:`AttributeProxy` (=Attribute),
-      :class:`Database` and :class:`Group` classes
-      
-      .. sourcecode:: itango
-
-            ITango [1]: De<tab>
-            DeprecationWarning            Device       DeviceProxy
-
-            ITango [2]: Device
-            Result [2]: <class 'PyTango._PyTango.DeviceProxy'>
-            
-            ITango [3]: Device("sys/tg_test/1")
-            Result [3]: DeviceProxy(sys/tg_test/1)
-                         
-            ITango [4]: Datab<tab>
-            
-            ITango [4]: Database
-            
-            ITango [4]: Att<tab>
-            Attribute       AttributeError  AttributeProxy
-            
-    - The Tango :class:`Database` object to which the itango session is 
-      currently connected
-      
-      .. sourcecode:: itango
-
-            ITango [1]: db
-            Result [1]: Database(homer, 10000)
-    
-Device name completion
-~~~~~~~~~~~~~~~~~~~~~~
-
-ITango knows the complete list of device names (including alias) for the current
-tango database. This means that when you try to create a new Device, by pressing
-<tab> you can see a context sensitive list of devices.
-
-.. sourcecode:: itango
-
-    ITango [1]: test = Device("<tab>
-    Display all 3654 possibilities? (y or n) n
-    
-    ITango [1]: test = Device("sys<tab>
-    sys/access_control/1  sys/database/2        sys/tautest/1         sys/tg_test/1
-    
-    ITango [2]: test = Device("sys/tg_test/1")
-
-Attribute name completion
-~~~~~~~~~~~~~~~~~~~~~~~~~
-
-ITango can inspect the list of attributes in case the device server for the device
-where the attribute resides is running.
-
-.. sourcecode:: itango
-
-    ITango [1]: short_scalar = Attribute("sys<tab>
-    sys/access_control/1/  sys/database/2/        sys/tautest/1/         sys/tg_test/1/
-    
-    ITango [1]: short_scalar = Attribute("sys/tg_test/1/<tab>
-    sys/tg_test/1/State                sys/tg_test/1/no_value
-    sys/tg_test/1/Status               sys/tg_test/1/short_image
-    sys/tg_test/1/ampli                sys/tg_test/1/short_image_ro
-    sys/tg_test/1/boolean_image        sys/tg_test/1/short_scalar
-    sys/tg_test/1/boolean_image_ro     sys/tg_test/1/short_scalar_ro
-    sys/tg_test/1/boolean_scalar       sys/tg_test/1/short_scalar_rww
-    sys/tg_test/1/boolean_spectrum     sys/tg_test/1/short_scalar_w
-    sys/tg_test/1/boolean_spectrum_ro  sys/tg_test/1/short_spectrum
-    sys/tg_test/1/double_image         sys/tg_test/1/short_spectrum_ro
-    sys/tg_test/1/double_image_ro      sys/tg_test/1/string_image
-    sys/tg_test/1/double_scalar        sys/tg_test/1/string_image_ro
-    ...
-
-    ITango [1]: short_scalar = Attribute("sys/tg_test/1/short_scalar")
-    
-    ITango [29]: print test.read()
-    DeviceAttribute[
-    data_format = PyTango._PyTango.AttrDataFormat.SCALAR
-      dim_x = 1
-      dim_y = 0
-    has_failed = False
-    is_empty = False
-       name = 'short_scalar'
-    nb_read = 1
-    nb_written = 1
-    quality = PyTango._PyTango.AttrQuality.ATTR_VALID
-    r_dimension = AttributeDimension(dim_x = 1, dim_y = 0)
-       time = TimeVal(tv_nsec = 0, tv_sec = 1279723723, tv_usec = 905598)
-       type = PyTango._PyTango.CmdArgType.DevShort
-      value = 47
-    w_dim_x = 1
-    w_dim_y = 0
-    w_dimension = AttributeDimension(dim_x = 1, dim_y = 0)
-    w_value = 0]
-
-Automatic tango object member completion
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-When you create a new tango object, (ex.: a device), itango is able to find out
-dynamically which are the members of this device (including tango commands 
-and attributes if the device is currently running)
-
-.. sourcecode:: itango
-
-    ITango [1]: test = Device("sys/tg_test/1")
-    
-    ITango [2]: test.<tab>
-    Display all 240 possibilities? (y or n)
-    ...
-    test.DevVoid                            test.get_access_control
-    test.Init                               test.get_asynch_replies
-    test.State                              test.get_attribute_config
-    test.Status                             test.get_attribute_config_ex
-    test.SwitchStates                       test.get_attribute_list
-    ...
-    
-    ITango [2]: test.short_<tab>
-    test.short_image        test.short_scalar       test.short_scalar_rww   test.short_spectrum
-    test.short_image_ro     test.short_scalar_ro    test.short_scalar_w     test.short_spectrum_ro
-
-    ITango [2]: test.short_scalar        # old style: test.read_attribute("short_scalar").value
-    Result [2]: 252
-
-    ITango [3]: test.Dev<tab>
-    test.DevBoolean               test.DevUShort                test.DevVarShortArray
-    test.DevDouble                test.DevVarCharArray          test.DevVarStringArray
-    test.DevFloat                 test.DevVarDoubleArray        test.DevVarULongArray
-    test.DevLong                  test.DevVarDoubleStringArray  test.DevVarUShortArray
-    test.DevShort                 test.DevVarFloatArray         test.DevVoid
-    test.DevString                test.DevVarLongArray          
-    test.DevULong                 test.DevVarLongStringArray
-    
-    ITango [3]: test.DevDouble(56.433)  # old style: test.command_inout("DevDouble").
-    Result [3]: 56.433
-
-Tango classes as :class:`DeviceProxy`
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-ITango exports all known tango classes as python alias to :class:`DeviceProxy`. 
-This way, if you want to create a device of class which you already know 
-(say, Libera, for example) you can do:
-
-.. sourcecode:: itango
-
-    ITango [1]: lib01 = Libera("BO01/DI/BPM-01")
-
-One great advantage is that the tango device name completion is sensitive to the
-type of device you want to create. This means that if you are in the middle of
-writting a device name and you press the <tab> key, only devices of the tango
-class 'Libera' will show up as possible completions.
-
-.. sourcecode:: itango
-
-    ITango [1]: bpm1 = Libera("<tab>
-    BO01/DI/BPM-01  BO01/DI/BPM-09  BO02/DI/BPM-06  BO03/DI/BPM-03  BO03/DI/BPM-11  BO04/DI/BPM-08
-    BO01/DI/BPM-02  BO01/DI/BPM-10  BO02/DI/BPM-07  BO03/DI/BPM-04  BO04/DI/BPM-01  BO04/DI/BPM-09
-    BO01/DI/BPM-03  BO01/DI/BPM-11  BO02/DI/BPM-08  BO03/DI/BPM-05  BO04/DI/BPM-02  BO04/DI/BPM-10
-    BO01/DI/BPM-04  BO02/DI/BPM-01  BO02/DI/BPM-09  BO03/DI/BPM-06  BO04/DI/BPM-03  BO04/DI/BPM-11
-    BO01/DI/BPM-05  BO02/DI/BPM-02  BO02/DI/BPM-10  BO03/DI/BPM-07  BO04/DI/BPM-04  
-    BO01/DI/BPM-06  BO02/DI/BPM-03  BO02/DI/BPM-11  BO03/DI/BPM-08  BO04/DI/BPM-05  
-    BO01/DI/BPM-07  BO02/DI/BPM-04  BO03/DI/BPM-01  BO03/DI/BPM-09  BO04/DI/BPM-06  
-    BO01/DI/BPM-08  BO02/DI/BPM-05  BO03/DI/BPM-02  BO03/DI/BPM-10  BO04/DI/BPM-07
-
-    ITango [1]: bpm1 = Libera("BO01<tab>
-    BO01/DI/BPM-01  BO01/DI/BPM-03  BO01/DI/BPM-05  BO01/DI/BPM-07  BO01/DI/BPM-09  BO01/DI/BPM-11
-    BO01/DI/BPM-02  BO01/DI/BPM-04  BO01/DI/BPM-06  BO01/DI/BPM-08  BO01/DI/BPM-10
-    
-    ITango [1]: bpm1 = Libera("BO01/DI/BPM-01")
-
-Customized device representation
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
-
-When you use ipython >= 0.11 with a Qt console frontend::
-
-    $ itango qtconsole
-    
-typing a variable containing a tango device object followend by :kbd:`Enter`
-will present you with a customized representation of the object instead of the
-usual :func:`repr` :
-
-    .. image:: _static/itango06.png
-
-You can customize the icon that itango displays for a specific device.
-The first thing to do is to copy the image file into
-:mod:`PyTango.ipython.resource` installation directory (if you don't have
-permissions to do so, copy the image into a directory of your choosing
-and make sure it is accessible from itango).
-
-If you want to use the image for all devices of a certain tango class, just
-add a new tango class property called *__icon*. You can do it with jive or, of
-course, with itango itself::
-
-    db.put_class_property("Libera", dict(__icon="libera.png"))
-    
-    # if you placed your image in a directory different than PyTango.ipython.resource
-    # then, instead you have to specify the absolute directory
-    
-    db.put_class_property("Libera", dict(__icon="/home/homer/.config/itango/libera.png"))
-
-If you need different images for different devices of the same class, you can
-specify an *__icon* property at the device level (which takes precedence over
-the class property value, if defined)::
-
-    db.put_device_property("BO01/DI/BPM-01", dict(__icon="libera2.png"))
-
-
-
-List tango devices, classes, servers
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
-
-ITango provides a set of magic functions (ipython lingo) that allow you to check
-for the list tango devices, classes and servers which are registered in the 
-current database.
-
-.. sourcecode:: itango
-
-    ITango [1]: lsdev
-                                      Device                     Alias                    Server                Class
-    ---------------------------------------- ------------------------- ------------------------- --------------------
-                  expchan/BL99_Dummy0DCtrl/1                  BL99_0D1                 Pool/BL99      ZeroDExpChannel
-                      simulator/bl98/motor08                                      Simulator/BL98            SimuMotor
-                  expchan/BL99_Dummy0DCtrl/3                  BL99_0D3                 Pool/BL99      ZeroDExpChannel
-                  expchan/BL99_Dummy0DCtrl/2                  BL99_0D2                 Pool/BL99      ZeroDExpChannel
-                  expchan/BL99_Dummy0DCtrl/5                  BL99_0D5                 Pool/BL99      ZeroDExpChannel
-                  expchan/BL99_Dummy0DCtrl/4                  BL99_0D4                 Pool/BL99      ZeroDExpChannel
-                  expchan/BL99_Dummy0DCtrl/7                  BL99_0D7                 Pool/BL99      ZeroDExpChannel
-                  expchan/BL99_Dummy0DCtrl/6                  BL99_0D6                 Pool/BL99      ZeroDExpChannel
-                      simulator/bl98/motor01                                      Simulator/BL98            SimuMotor
-                      simulator/bl98/motor02                                      Simulator/BL98            SimuMotor
-                      simulator/bl98/motor03                                      Simulator/BL98            SimuMotor
-       mg/BL99/_mg_macserv_26065_-1320158352                                           Pool/BL99           MotorGroup
-                      simulator/bl98/motor05                                      Simulator/BL98            SimuMotor
-                      simulator/bl98/motor06                                      Simulator/BL98            SimuMotor
-                      simulator/bl98/motor07                                      Simulator/BL98            SimuMotor
-                    simulator/BL98/motctrl01                                      Simulator/BL98        SimuMotorCtrl
-                  expchan/BL99_Simu0DCtrl1/1                  BL99_0D8                 Pool/BL99      ZeroDExpChannel
-                 expchan/BL99_UxTimerCtrl1/1                BL99_Timer                 Pool/BL99         CTExpChannel
-    ...
-    
-    ITango [1]: lsdevclass
-    SimuCoTiCtrl                   TangoAccessControl             ZeroDExpChannel
-    Door                           Motor                          DataBase
-    MotorGroup                     IORegister                     SimuMotorCtrl
-    TangoTest                      MacroServer                    TauTest
-    SimuMotor                      SimuCounterEx                  MeasurementGroup
-    Pool                           CTExpChannel
-
-    ITango [1]: lsserv
-    MacroServer/BL99               MacroServer/BL98               Pool/V2
-    Pool/BL99                      Pool/BL98                      TangoTest/test
-    Pool/tcoutinho                 Simulator/BL98
-    TangoAccessControl/1           TauTest/tautest                DataBaseds/2
-    MacroServer/tcoutinho          Simulator/BL99
-
-Customized tango error message and introspection
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-ITango intercepts tango exceptions that occur when you do tango operations 
-(ex.: write an attribute with a value outside the allowed limits) and tries to
-display it in a summarized, user friendly way.
-If you need more detailed information about the last tango error, you can use
-the magic command 'tango_error'.
-
-.. sourcecode:: itango
-
-    ITango [1]: test = Device("sys/tg_test/1")
-
-    ITango [2]: test.no_value
-    API_AttrValueNotSet : Read value for attribute no_value has not been updated
-    For more detailed information type: tango_error
-
-    ITango [3]: tango_error
-    Last tango error:
-    DevFailed[
-    DevError[
-        desc = 'Read value for attribute no_value has not been updated'
-      origin = 'Device_3Impl::read_attributes_no_except'
-      reason = 'API_AttrValueNotSet'
-    severity = PyTango._PyTango.ErrSeverity.ERR]
-    DevError[
-        desc = 'Failed to read_attribute on device sys/tg_test/1, attribute no_value'
-      origin = 'DeviceProxy::read_attribute()'
-      reason = 'API_AttributeFailed'
-    severity = PyTango._PyTango.ErrSeverity.ERR]]
-
-Switching database
-~~~~~~~~~~~~~~~~~~
-
-You can switch database simply by executing the 'switchdb <host> [<port>]' magic
-command.
-
-.. sourcecode:: itango
-
-    ITango [1]: switchdb
-
-    Must give new database name in format <host>[:<port>].
-    <port> is optional. If not given it defaults to 10000.
-
-    Examples:
-    switchdb homer:10005
-    switchdb homer 10005
-    switchdb homer
-    
-    ITango [2]: db
-    Database(homer, 10000)
-    
-    ITango [3]: switchdb bart       # by default port is 10000
-    
-    ITango [4]: db
-    Database(bart, 10000)
-    
-    ITango [5]: switchdb lisa 10005  # you can use spaces between host and port
-    
-    ITango [6]: db
-    Database(lisa, 10005)
-
-    ITango [7]: switchdb marge:10005   # or the traditional ':'
-
-    ITango [8]: db
-    Database(marge, 10005)
-
-Refreshing the database
-~~~~~~~~~~~~~~~~~~~~~~~
-
-When itango starts up or when the database is switched, a query is made to the
-tango Database device server which provides all necessary data. This
-data is stored locally in a itango cache which is used to provide all the nice 
-features.
-If the Database server is changed in some way (ex: a new device server is registered),
-the local database cache is not consistent anymore with the tango database.
-Therefore, itango provides a magic command 'refreshdb' that allows you to reread
-all tango information from the database.
-
-.. sourcecode:: itango
-
-    ITango [1]: refreshdb
-    
-Storing your favorite tango objects for later usage
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-.. note::
-    This feature is not available if you have installed IPython 0.11!
-
-Since version 7.1.2, :class:`DeviceProxy`, :class:`AttributeProxy` and 
-:class:`Database` became pickable.
-This means that they can be used by the IPython_ 'store' magic command (type
-'store?' on the itango console to get information on how to use this command).
-You can, for example, assign your favorite devices in local python variables and
-then store these for the next time you startup IPython_ with itango profile.
-
-.. sourcecode:: itango
-
-    ITango [1]: theta = Motor("BL99_M1")  # notice how we used tango alias
-    
-    ITango [2]: store theta
-    Stored 'theta' (DeviceProxy)
-    
-    ITango [3]: Ctrl+D
-    
-    (IPython session is closed and started again...)
-
-    ITango [1]: store -r # in some versions of IPython you may need to do this ...
-    
-    ITango [1]: print theta
-    DeviceProxy(motor/bl99/1)
-
-Adding itango to your own ipython profile
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Adding itango to the ipython default profile
-##################################################
-
-Let's assume that you find itango so useful that each time you start ipython, you want
-itango features to be loaded by default.
-The way to do this is by editing your default ipython configuration file: 
-
-1. On IPython <= 0.10
-
-    $HOME/.ipython/ipy_user_conf.py and add the lines 1 and 7.
-
-    .. note::
-        The code shown below is a small part of your $HOME/.ipython/ipy_user_conf.py.
-        It is shown here only the relevant part for this example.
-
-    .. sourcecode:: python
-
-        import PyTango.ipython
-
-        def main():
-
-            # uncomment if you want to get ipython -p sh behaviour
-            # without having to use command line switches  
-            # import ipy_profile_sh
-            PyTango.ipython.init_ipython(ip, console=False)
-
-2. On IPython > 0.10
-
-    First you have to check which is the configuration directory being used by
-    IPython. For this, in an IPython console type:
-    
-    .. sourcecode:: itango
-
-        ITango [1]: import IPython.utils.path
-        
-        ITango [2]: IPython.utils.path.get_ipython_dir()
-        <IPYTHON_DIR>
-
-    now edit <IPYTHON_DIR>/profile_default/ipython_config.py and add the
-    following line at the end to add itango configuration::
-    
-        load_subconfig('ipython_config.py', profile='tango')
-    
-    Alternatively, you could also load itango as an IPython extension::
-        
-        config = get_config()
-        i_shell_app = config.InteractiveShellApp
-        extensions = getattr(i_shell_app, 'extensions', [])
-        extensions.append('PyTango.ipython')
-        i_shell_app.extensions = extensions
-    
-    for more information on how to configure IPython >= 0.11 please check the
-    `IPython configuration <http://ipython.org/ipython-doc/dev/config/ipython.html#configuring-the-ipython-command-line-application>`_
-    
-And now, every time you start ipython::
-
-    ipython
-
-itango features will also be loaded.
-
-.. sourcecode:: ipython
-
-    In [1]: db
-    Out[1]: Database(homer, 10000)
-
-
-Adding itango to an existing customized profile
-####################################################
-
-.. note::
-    This chapter has a pending update. The contents only apply to
-    IPython <= 0.10.
-
-If you have been working with IPython_ before and have already defined a
-customized personal profile, you can extend your profile with itango features 
-without breaking your existing options. The trick is to initialize itango extension
-with a parameter that tells itango to maintain the existing options (like colors,
-command line and initial banner).
-
-So, for example, let's say you have created a profile called nuclear, and therefore
-you have a file called $HOME/.ipython/ipy_profile_nuclear.py with the following
-contents:
-
-.. sourcecode:: python
-
-    import os
-    import IPython.ipapi
-
-    def main():
-        ip = IPython.ipapi.get()
-        
-        o = ip.options
-        o.banner = "Springfield nuclear powerplant CLI\n\nWelcome Homer Simpson"
-        o.colors = "Linux"
-        o.prompt_in1 = "Mr. Burns owns you [\\#]: "
-        
-    main()
-
-In order to have itango features available to this profile you simply need to
-add two lines of code (lines 3 and 7):
-
-.. sourcecode:: python
-
-    import os
-    import IPython.ipapi
-    import PyTango.ipython
-
-    def main():
-        ip = IPython.ipapi.get()
-        PyTango.ipython.init_ipython(ip, console=False)
-        
-        o = ip.options
-        o.banner = "Springfield nuclear powerplant CLI\n\nMr. Burns owns you!"
-        o.colors = "Linux"
-        o.prompt_in1 = "The Simpsons [\\#]: "
-        
-    main()
-
-This will load the itango features into your profile while preserving your
-profile's console options (like colors, command line and initial banner).
-
-Creating a profile that extends itango profile
-####################################################
-
-.. note::
-    This chapter has a pending update. The contents only apply to
-    IPython <= 0.10.
-    
-It is also possible to create a profile that includes all itango features and at
-the same time adds new ones. Let's suppose that you want to create a customized
-profile called 'orbit' that automaticaly exports devices of class 
-'Libera' for the booster accelerator (assuming you are working on a synchrotron
-like institute ;-).
-Here is the code for the $HOME/.ipython/ipy_profile_orbit.py:
-
-.. sourcecode:: python
-
-    import os
-    import IPython.ipapi
-    import IPython.genutils
-    import IPython.ColorANSI
-    import PyTango.ipython
-    import StringIO
-
-    def magic_liberas(ip, p=''):
-        """Lists all known Libera devices."""
-        data = PyTango.ipython.get_device_map()
-        s = StringIO.StringIO()
-        cols = 30, 15, 20
-        l = "%{0}s %{1}s %{2}s".format(*cols)
-        print >>s, l % ("Device", "Alias", "Server")
-        print >>s, l % (cols[0]*"-", cols[1]*"-", cols[2]*"-")
-        for d, v in data.items():
-            if v[2] != 'Libera': continue
-            print >>s, l % (d, v[0], v[1])
-        s.seek(0)
-        IPython.genutils.page(s.read())
-
-    def main():
-        ip = IPython.ipapi.get()
-
-        PyTango.ipython.init_ipython(ip)
-
-        o = ip.options
-        
-        Colors = IPython.ColorANSI.TermColors
-        c = dict(Colors.__dict__)
-
-        o.banner += "\n{Brown}Welcome to Orbit analysis{Normal}\n".format(**c)
-
-        o.prompt_in1 = "Orbit [\\#]: "
-        o.colors = "BlueTango"
-        
-        ip.expose_magic("liberas", magic_liberas)
-
-        db = ip.user_ns.get('db')
-        dev_class_dict = PyTango.ipython.get_class_map()
-
-        if not dev_class_dict.has_key("Libera"):
-            return
-        
-        for libera in dev_class_dict['Libera']:
-            domain, family, member = libera.split("/")
-            var_name = domain + "_" + member
-            var_name = var_name.replace("-","_")
-            ip.to_user_ns( { var_name : PyTango.DeviceProxy(libera) } )
-
-    main()
-
-Then start your CLI with::
-
-    $ ipython --profile=orbit
-
-and you will have something like this
-
-.. image:: _static/itango02.png
-
-Advanced event monitoring
-~~~~~~~~~~~~~~~~~~~~~~~~~
-
-.. note::
-    This chapter has a pending update. The contents only apply to
-    IPython <= 0.10.
-
-With itango it is possible to monitor change events triggered by any tango
-attribute which has events enabled.
-
-To start monitoring the change events of an attribute:
-
-.. sourcecode:: itango
-
-    ITango [1]: mon -a BL99_M1/Position
-    'BL99_M1/Position' is now being monitored. Type 'mon' to see all events
-    
-To list all events that have been intercepted:
-
-.. sourcecode:: itango
-
-    ITango [2]: mon
-      ID           Device    Attribute            Value       Quality             Time
-    ---- ---------------- ------------ ---------------- ------------- ----------------
-       0     motor/bl99/1        state               ON    ATTR_VALID  17:11:08.026472
-       1     motor/bl99/1     position            190.0    ATTR_VALID  17:11:20.691112
-       2     motor/bl99/1        state           MOVING    ATTR_VALID  17:12:11.858985
-       3     motor/bl99/1     position    188.954072857 ATTR_CHANGING  17:12:11.987817
-       4     motor/bl99/1     position    186.045533882 ATTR_CHANGING  17:12:12.124448
-       5     motor/bl99/1     position    181.295838155 ATTR_CHANGING  17:12:12.260884
-       6     motor/bl99/1     position     174.55354729 ATTR_CHANGING  17:12:12.400036
-       7     motor/bl99/1     position     166.08870515 ATTR_CHANGING  17:12:12.536387
-       8     motor/bl99/1     position     155.77528943 ATTR_CHANGING  17:12:12.672846
-       9     motor/bl99/1     position    143.358230136 ATTR_CHANGING  17:12:12.811878
-      10     motor/bl99/1     position    131.476140017 ATTR_CHANGING  17:12:12.950391
-      11     motor/bl99/1     position    121.555421781 ATTR_CHANGING  17:12:13.087970
-      12     motor/bl99/1     position    113.457930987 ATTR_CHANGING  17:12:13.226531
-      13     motor/bl99/1     position    107.319423091 ATTR_CHANGING  17:12:13.363559
-      14     motor/bl99/1     position    102.928229946 ATTR_CHANGING  17:12:13.505102
-      15     motor/bl99/1     position    100.584726495 ATTR_CHANGING  17:12:13.640794
-      16     motor/bl99/1     position            100.0    ATTR_ALARM  17:12:13.738136
-      17     motor/bl99/1        state            ALARM    ATTR_VALID  17:12:13.743481
-
-    ITango [3]: mon -l mot.* state
-      ID           Device    Attribute            Value       Quality             Time
-    ---- ---------------- ------------ ---------------- ------------- ----------------
-       0     motor/bl99/1        state               ON    ATTR_VALID  17:11:08.026472
-       2     motor/bl99/1        state           MOVING    ATTR_VALID  17:12:11.858985
-      17     motor/bl99/1        state            ALARM    ATTR_VALID  17:12:13.743481
-
-To stop monitoring the attribute:
-
-.. sourcecode:: itango
-
-    ITango [1]: mon -d BL99_M1/Position
-    Stopped monitoring 'BL99_M1/Position'
-
-.. note::
-    Type 'mon?' to see detailed information about this magic command
+    .. image:: _static/itango00.png
 
+ITango is available since PyTango 7.1.2 and has been moved to a separate
+project since PyTango 9.2.0:
 
+* `package and instructions on PyPI <http://pypi.python.org/pypi/itango>`_
+* `sources on GitHub  <https://github.com/tango-cs/itango>`_
+* `documentation on pythonhosted <http://pythonhosted.org/itango>`_
diff --git a/doc/mock_tango_extension.py b/doc/mock_tango_extension.py
new file mode 100644
index 0000000..33a90c6
--- /dev/null
+++ b/doc/mock_tango_extension.py
@@ -0,0 +1,100 @@
+"""Mock the tango._tango extension module.
+
+This is useful to build the documentation without building the extension.
+However this is a bit tricky since the python side relies on what the
+extension exposes. Here is the list of the mocking aspects that require
+special attention:
+- __doc__ should not contain the mock documentation
+- __mro__ is required for autodoc
+- __name__ attribute is required
+- Device_6Impl class should not be accessible
+- the __base__ attribute for Device_[X]Impl is required
+- it shoud be possible to set __init__, __getattr__ and __setattr__ methods
+- tango.base_types.__document_enum needs to be patched before it is called
+- the mocks should not have any public methods such as assert_[...]
+- _tango.constants.TgLibVers is required (e.g. '9.2.2')
+- _tango._get_tango_lib_release function is required (e.g. lambda: 922)
+- tango._tango AND tango.constants modules have to be patched
+
+Patching tango._tango using sys.modules does not seem to work for python
+version older than 3.5 (failed with 2.7 and 3.4)
+"""
+
+__all__ = ['tango']
+
+# Imports
+import sys
+from mock import MagicMock
+
+# Constants
+TANGO_VERSION = '9.2.2'
+TANGO_VERSION_INT = int(TANGO_VERSION[::2])
+
+
+# Extension mock class
+class ExtensionMock(MagicMock):
+
+    # Remove the mock documentation
+    __doc__ = None
+
+    # The method resolution order is required for autodoc
+    __mro__ = object,
+
+    @property
+    def __name__(self):
+        # __name__ is used for some objects
+        return self._mock_name.split('.')[-1]
+
+    def __getattr__(self, name):
+        # Limit device class discovery
+        if name == 'Device_6Impl':
+            raise AttributeError
+        # Emulate device class inheritance
+        if name == '__base__':
+            return {
+                'Device_5Impl': _tango.Device_4Impl,
+                'Device_4Impl': _tango.Device_3Impl,
+                'Device_3Impl': _tango.Device_2Impl,
+                'Device_2Impl': _tango.DeviceImpl,
+                'DeviceImpl': object}[self.__name__]
+        # Regular mock behavior
+        return MagicMock.__getattr__(self, name)
+
+    def __setattr__(self, name, value):
+        # Ignore unsupported magic methods
+        if name in ["__init__", "__getattr__", "__setattr__"]:
+            return
+        # Hook in tango.base_types to patch document_enum
+        if name == '__getinitargs__' and self.__name__ == 'AttributeInfo':
+            import tango.base_types
+            tango.base_types.__dict__['__document_enum'] = document_enum
+        # Regular mock behavior
+        MagicMock.__setattr__(self, name, value)
+
+
+# Remove all public methods
+for name in dir(ExtensionMock):
+    if not name.startswith('_') and \
+       callable(getattr(ExtensionMock, name)):
+        setattr(ExtensionMock, name, None)
+
+
+# Patched version of document_enum
+def document_enum(klass, enum_name, desc, append=True):
+    getattr(klass, enum_name).__doc__ = desc
+
+
+# Patch the extension module
+_tango = ExtensionMock(name='_tango')
+_tango.constants.TgLibVers = TANGO_VERSION
+_tango._get_tango_lib_release.return_value = TANGO_VERSION_INT
+
+
+# Patch modules
+sys.modules['tango._tango'] = _tango
+sys.modules['tango.constants'] = _tango.constants
+print('Mocking tango._tango extension module')
+
+
+# Try to import
+import tango
diff --git a/doc/quicktour.rst b/doc/quicktour.rst
index cd346a2..4ae806e 100644
--- a/doc/quicktour.rst
+++ b/doc/quicktour.rst
@@ -10,30 +10,34 @@ Fundamental TANGO concepts
 
 Before you begin there are some fundamental TANGO concepts you should be aware of.
 
-Tango consists basically of a set of **devices** running somewhere on the network.
+Tango consists basically of a set of *devices* running somewhere on the network.
 
-A device is identified by a unique case insensitive name in the format 
-*<domain>/<family>/<member>*. Examples: `LAB-01/PowerSupply/01`, 
-`ID21/OpticsHutch/energy`. 
+A device is identified by a unique case insensitive name in the format
+*<domain>/<family>/<member>*. Examples: `LAB-01/PowerSupply/01`,
+`ID21/OpticsHutch/energy`.
 
-Each device has a series of *attributes*, *properties* and *commands*. 
+Each device has a series of *attributes*, *pipes*, *properties* and *commands*.
 
-An attribute is identified by a name in a device. It has a value that can 
-be read. Some attributes can also be changed (read-write attributes).
+An attribute is identified by a name in a device. It has a value that can
+be read. Some attributes can also be changed (read-write attributes). Each
+attribute has a well known, fixed data type.
+
+A pipe is a kind of attribute. Unlike attributes, the pipe data type is strucured
+(in the sence of C struct) and it is dynamic.
 
 A property is identified by a name in a device. Usually, devices properties are
-used to provide a way to configure a device. 
+used to provide a way to configure a device.
 
 A command is also identified by a name. A command may or not receive a parameter
 and may or not return a value when it is executed.
 
 Any device has **at least** a *State* and *Status* attributes and *State*,
-*Status* and *Init* commands. Reading the *State* or *Status* attributes has 
+*Status* and *Init* commands. Reading the *State* or *Status* attributes has
 the same effect as executing the *State* or *Status* commands.
 
-Each device as an associated *TANGO Class*. Most of the times the TANGO class 
+Each device as an associated *TANGO Class*. Most of the times the TANGO class
 has the same name as the object oriented programming class which implements it
-but that is not mandatory. 
+but that is not mandatory.
 
 TANGO devices *live* inside a operating system process called *TANGO Device Server*.
 This server acts as a container of devices. A device server can host multiple
@@ -41,8 +45,8 @@ devices of multiple TANGO classes. Devices are, therefore, only accessible when
 the corresponding TANGO Device Server is running.
 
 A special TANGO device server called the *TANGO Database Server* will act as
-a naming service between TANGO servers and clients. This server has a known 
-address where it can be reached. The machines that run TANGO Device Servers 
+a naming service between TANGO servers and clients. This server has a known
+address where it can be reached. The machines that run TANGO Device Servers
 and/or TANGO clients, should export an environment variable called
 :envvar:`TANGO_HOST` that points to the TANGO Database server address. Example:
 ``TANGO_HOST=homer.lab.eu:10000``
@@ -55,22 +59,22 @@ This chapter assumes you have already installed PyTango.
 To explore PyTango you should have a running Tango system. If you are working in
 a facility/institute that uses Tango, this has probably already been prepared
 for you. You need to ask your facility/institute tango contact for the
-:envvar:`TANGO_HOST` variable where Tango system is running. 
+:envvar:`TANGO_HOST` variable where Tango system is running.
 
 If you are working in an isolate machine you first need to make sure the Tango
-system is installed and running (`Tango howtos <http://www.tango-controls.org/howtos>`_).
+system is installed and running (see `tango how to <http://www.tango-controls.org/resources/howto>`_).
 
-Most examples here connect to a device called *sys/tg_test/1* that runs in a 
+Most examples here connect to a device called *sys/tg_test/1* that runs in a
 TANGO server called *TangoTest* with the instance name *test*.
 This server comes with the TANGO installation. The TANGO installation
-also registers the *test* instance. All you have to do is start the TangoTest 
+also registers the *test* instance. All you have to do is start the TangoTest
 server on a console::
 
     $ TangoTest test
     Ready to accept request
 
 .. note::
-   if you receive a message saying that the server is already running, 
+   if you receive a message saying that the server is already running,
    it just means that somebody has already started the test server so you don't
    need to do anything.
 
@@ -78,14 +82,14 @@ Client
 ------
 
 Finally you can get your hands dirty. The first thing to do is start a python
-console and import the :mod:`PyTango` module. The following example shows
+console and import the :mod:`tango` module. The following example shows
 how to create a proxy to an existing TANGO device, how to read and write
 attributes and execute commands from a python console::
-    
-    >>> import PyTango
-    
-    >>> # create a device object 
-    >>> test_device = PyTango.DeviceProxy("sys/tg_test/1")
+
+    >>> import tango
+
+    >>> # create a device object
+    >>> test_device = tango.DeviceProxy("sys/tg_test/1")
 
     >>> # every device has a state and status which can be checked with:
     >>> print(test_device.state())
@@ -100,7 +104,7 @@ attributes and execute commands from a python console::
     >>> # ...PyTango provides a shortcut to do the same:
     >>> data = test_device["long_scalar"]
 
-    >>> # the result of reading an attribute is a DeviceAttribute python object. 
+    >>> # the result of reading an attribute is a DeviceAttribute python object.
     >>> # It has a member called "value" which contains the value of the attribute
     >>> data.value
     136
@@ -128,7 +132,7 @@ attributes and execute commands from a python console::
 
     >>> # PyTango provides a handy pythonic shortcut to read the attribute value:
     >>> test_device.long_scalar
-    136 
+    136
 
     >>> # Setting an attribute value is equally easy:
     >>> test_device.write_attribute("long_scalar", 8776)
@@ -136,7 +140,7 @@ attributes and execute commands from a python console::
     >>> # ... and a handy shortcut to do the same exists as well:
     >>> test_device.long_scalar = 8776
 
-    >>> # TangoTest has a command called "DevDouble" which receives a number 
+    >>> # TangoTest has a command called "DevDouble" which receives a number
     >>> # as parameter and returns the same number as a result. Let's
     >>> # execute this command:
     >>> test_device.command_inout("DevDouble", 45.67)
@@ -149,16 +153,17 @@ attributes and execute commands from a python console::
     >>> # Introspection: check the list of attributes:
     >>> test_device.get_attribute_list()
     ['ampli', 'boolean_scalar', 'double_scalar', '...', 'State', 'Status']
-    
-    >>> 
 
-This is just the tip of the iceberg. Check the :class:`~PyTango.DeviceProxy` for
-the complete API. 
+    >>>
+
+This is just the tip of the iceberg. Check the :class:`~tango.DeviceProxy` for
+the complete API.
 
-PyTango comes with an integrated IPython_ based console called :ref:`itango`.
-It provides helpers to simplify console usage. You can use this console instead
-of the traditional python console. Be aware, though, that many of the *tricks*
-you can do in an :ref:`itango` console cannot be done in a python program.
+PyTango used to come with an integrated IPython_ based console called
+:ref:`itango`, now moved to a separate project. It provides helpers to simplify
+console usage. You can use this console instead of the traditional python
+console. Be aware, though, that many of the *tricks* you can do in an
+:ref:`itango` console cannot be done in a python program.
 
 Server
 ------
@@ -171,7 +176,7 @@ Before creating a server you need to decide:
 
 1. The name of the device server (example: `PowerSupplyDS`). This will be
    the mandatory name of your python file.
-2. The Tango Class name of your device (example: `PowerSupply`). In our 
+2. The Tango Class name of your device (example: `PowerSupply`). In our
    example we will use the same name as the python class name.
 3. the list of attributes of the device, their data type, access (read-only vs
    read-write), data_format (scalar, 1D, 2D)
@@ -182,9 +187,13 @@ will be called `PowerSupplyDS`. There will be a class called `PowerSupply`
 which will have attributes:
 
 * *voltage* (scalar, read-only, numeric)
-* *current* (scalar, read_write, numeric, expert mode) 
+* *current* (scalar, read_write, numeric, expert mode)
 * *noise* (2D, read-only, numeric)
 
+pipes:
+
+* *info* (read-only)
+
 commands:
 
 * *TurnOn* (argument: None, result: None)
@@ -212,14 +221,14 @@ You can do it with Jive (`Jive->Edit->Create server`):
 
 ... or in a python script::
 
-    >>> import PyTango
-    
-    >>> dev_info = PyTango.DbDevInfo()
+    >>> import tango
+
+    >>> dev_info = tango.DbDevInfo()
     >>> dev_info.server = "PowerSupplyDS/test"
     >>> dev_info._class = "PowerSupply"
     >>> dev_info.name = "test/power_supply/1"
-    
-    >>> db = PyTango.Database()
+
+    >>> db = tango.Database()
     >>> db.add_device(dev_info)
 
 After, you can run the server on a console with::
@@ -229,23 +238,22 @@ After, you can run the server on a console with::
 
 Now you can access it from a python console::
 
-    >>> import PyTango
+    >>> import tango
 
-    >>> power_supply = PyTango.DeviceProxy("test/power/supply/1")
+    >>> power_supply = tango.DeviceProxy("test/power/supply/1")
     >>> power_supply.state()
     STANDBY
 
     >>> power_supply.current = 2.3
-    
+
     >>> power_supply.current
     2.3
 
     >>> power_supply.PowerOn()
     >>> power_supply.Ramp(2.1)
     True
-    
+
     >>> power_supply.state()
     ON
 
 Next steps: Check out the :ref:`pytango-api`.
-    
diff --git a/doc/revision.rst b/doc/revision.rst
index 17765b3..fb6324b 100644
--- a/doc/revision.rst
+++ b/doc/revision.rst
@@ -83,9 +83,15 @@ Document revisions
 +----------+----------------------------------------------------------------------------------+-----------------------------------------------------+-----------------------+
 | 01/10/14 | `8.21 <http://www.tango-controls.org/static/PyTango/v815/doc/html/index.html>`_  | Update to PyTango 8.1.5                             | T\. Coutinho          |
 +----------+----------------------------------------------------------------------------------+-----------------------------------------------------+-----------------------+
-| 05/02/15 | `8.22 <http://www.tango-controls.org/static/PyTango/v816/doc/html/index.html>`_  | Update to PyTango 8.1.6                             | T\. Coutinho          |
+| 05/02/15 | `8.22 <http://www.esrf.fr/computing/cs/tango/pytango/v816/index.html>`_          | Update to PyTango 8.1.6                             | T\. Coutinho          |
 +----------+----------------------------------------------------------------------------------+-----------------------------------------------------+-----------------------+
-| 02/02/15 | `8.23 <http://www.tango-controls.org/static/PyTango/v817/doc/html/index.html>`_  | Update to PyTango 8.1.8                             | T\. Coutinho          |
+| 03/02/16 | `8.23 <http://www.esrf.fr/computing/cs/tango/pytango/v818/index.html>`_          | Update to PyTango 8.1.8                             | T\. Coutinho          |
++----------+----------------------------------------------------------------------------------+-----------------------------------------------------+-----------------------+
+| 12/08/16 |  8.24                                                                            | Update to PyTango 8.1.9                             | V\. Michel            |
++----------+----------------------------------------------------------------------------------+-----------------------------------------------------+-----------------------+
+| 26/02/16 | `9.2 <http://www.esrf.fr/computing/cs/tango/pytango/v920>`_                      | Update to PyTango 9.2.0a                            | T\. Coutinho          |
++----------+----------------------------------------------------------------------------------+-----------------------------------------------------+-----------------------+
+| 15/08/16 | `9.3 <http://pytango.readthedocs.io/en/9.2.0>`_                                  | Update to PyTango 9.2.0                             | V\. Michel            |
 +----------+----------------------------------------------------------------------------------+-----------------------------------------------------+-----------------------+
 
 .. _pytango-version-history:
@@ -96,8 +102,67 @@ Version history
 +----------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 | version  | Changes                                                                                                                                                               |
 +==========+=======================================================================================================================================================================+
+| 9.2.0    | 9.2.0 release.                                                                                                                                                        |
+|          |                                                                                                                                                                       |
+|          | Features:                                                                                                                                                             |
+|          |                                                                                                                                                                       |
+|          |     - `Issue #37: Add display_level and polling_period as optional arguments to command decorator <https://github.com/tango-cs/pytango/issues/37>`_                   |
+|          |                                                                                                                                                                       |
+|          | Bug fixes:                                                                                                                                                            |
+|          |                                                                                                                                                                       |
+|          |     - Fix cache problem when using `DeviceProxy` through an `AttributeProxy`                                                                                          |
+|          |     - Fix compilation on several platforms                                                                                                                            |
+|          |     - `Issue #19: Defining new members in DeviceProxy has side effects <https://github.com/tango-cs/pytango/issues/19>`_                                              |
+|          |     - Fixed bug in `beacon.add_device`                                                                                                                                |
+|          |     - Fix for `get_device_list` if server_name is '*'                                                                                                                 |
+|          |     - Fix `get_device_attribute_property2` if `prop_attr` is not `None`                                                                                               |
+|          |     - Accept `StdStringVector` in `put_device_property`                                                                                                               |
+|          |     - Map 'int' to DevLong64 and 'uint' to DevULong64                                                                                                                 |
+|          |     - `Issue #22: Fix push_data_ready_event() deadlock <https://github.com/tango-cs/pytango/issues/22>`_                                                              |
+|          |     - `Issue #28: Fix compilation error for constants.cpp <https://github.com/tango-cs/pytango/issues/28>`_                                                           |
+|          |     - `Issue #21: Fix Group.get_device method <https://github.com/tango-cs/pytango/issues/21>`_                                                                       |
+|          |     - `Issue #33: Fix internal server documentation <https://github.com/tango-cs/pytango/issues/33>`_                                                                 |
+|          |                                                                                                                                                                       |
+|          | Changes:                                                                                                                                                              |
+|          |     - Move ITango to another project                                                                                                                                  |
+|          |     - Use `setuptools` instead of `distutils`                                                                                                                         |
+|          |     - Add `six` as a requirement                                                                                                                                      |
+|          |     - Refactor directory structure                                                                                                                                    |
+|          |     - Rename `PyTango` module to `tango` (`import PyTango` still works for backward compatibility)                                                                    |
+|          |     - Add a ReST readme for GitHub and PyPI                                                                                                                           |
+|          |                                                                                                                                                                       |
+|          | ITango changes (moved to another project):                                                                                                                            |
+|          |     - Fix itango event logger for python 3                                                                                                                            |
+|          |     - Avoid deprecation warning with IPython 4.x                                                                                                                      |
+|          |     - Use entry points instead of scripts                                                                                                                             |
+|          |                                                                                                                                                                       |
++----------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| 9.2.0a   | 9.2 alpha release. Missing:                                                                                                                                           |
+|          |                                                                                                                                                                       |
+|          |     - writtable pipes (client and server)                                                                                                                             |
+|          |     - dynamic commands (server)                                                                                                                                       |
+|          |     - device interface change event (client and server)                                                                                                               |
+|          |     - pipe event (client and server)                                                                                                                                  |
+|          |                                                                                                                                                                       |
+|          | Bug fixes:                                                                                                                                                            |
+|          |                                                                                                                                                                       |
+|          |     - `776:  [pytango][8.1.8] SyntaxError: invalid syntax <https://sourceforge.net/p/tango-cs/bugs/776/>`_                                                            |
++----------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| 8.1.9    | Features:                                                                                                                                                             |
+|          |                                                                                                                                                                       |
+|          |     - `PR #2: asyncio support for both client and server API <https://github.com/tango-cs/pytango/pull/2>`_                                                           |
+|          |     - `PR #6: Expose AutoTangoMonitor and AutoTangoAllowThreads <https://github.com/tango-cs/pytango/pull/6>`_                                                        |
+|          |                                                                                                                                                                       |
+|          | Bug fixes:                                                                                                                                                            |
+|          |                                                                                                                                                                       |
+|          |     - `PR #31: Get -l flags from pkg-config <https://github.com/tango-cs/pytango/pull/31>`_                                                                           |
+|          |     - `PR #15: Rename itango script to itango3 for python3 <https://github.com/tango-cs/pytango/pull/15>`_                                                            |
+|          |     - `PR #14: Avoid deprecation warning with IPython 4.x <https://github.com/tango-cs/pytango/pull/14>`_                                                             |
++----------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 | 8.1.8    | Features:                                                                                                                                                             |
 |          |                                                                                                                                                                       |
+|          |     - `PR #3: Add a run_server class method to Device <https://github.com/tango-cs/pytango/pull/3>`_                                                                  |
+|          |     - `PR #4: Add device inheritance <https://github.com/tango-cs/pytango/pull/4>`_                                                                                   |
 |          |     - `110:  device property with auto update in database <https://sourceforge.net/p/tango-cs/feature-requests/110>`_                                                 |
 |          |                                                                                                                                                                       |
 |          | Bug fixes:                                                                                                                                                            |
diff --git a/doc/server_api/attribute.rst b/doc/server_api/attribute.rst
index 756dffb..103ff07 100644
--- a/doc/server_api/attribute.rst
+++ b/doc/server_api/attribute.rst
@@ -1,34 +1,34 @@
 Attribute classes
 =================
 
-.. currentmodule:: PyTango
+.. currentmodule:: tango
 
 Attr
 ----
 
-.. autoclass:: PyTango.Attr
+.. autoclass:: tango.Attr
     :members:
 
 Attribute
 ---------
 
-.. autoclass:: PyTango.Attribute
+.. autoclass:: tango.Attribute
     :members:
 
 WAttribute
 ----------
 
-.. autoclass:: PyTango.WAttribute
+.. autoclass:: tango.WAttribute
     :members:
 
 MultiAttribute
 --------------
 
-.. autoclass:: PyTango.MultiAttribute
+.. autoclass:: tango.MultiAttribute
     :members:
     
 UserDefaultAttrProp
 -------------------
 
-.. autoclass:: PyTango.UserDefaultAttrProp
+.. autoclass:: tango.UserDefaultAttrProp
     :members:
diff --git a/doc/server_api/device.rst b/doc/server_api/device.rst
index ce1c421..0da5e4f 100644
--- a/doc/server_api/device.rst
+++ b/doc/server_api/device.rst
@@ -1,18 +1,18 @@
 Device
 ======
 
-.. currentmodule:: PyTango
+.. currentmodule:: tango
 
 DeviceImpl
 ----------
 
-.. autoclass:: PyTango.DeviceImpl
+.. autoclass:: tango.DeviceImpl
     :members:
 
 Device_2Impl
 ------------
 
-.. autoclass:: PyTango.Device_2Impl
+.. autoclass:: tango.Device_2Impl
     :show-inheritance:
     :inherited-members:
     :members:
@@ -20,7 +20,7 @@ Device_2Impl
 Device_3Impl
 ------------
 
-.. autoclass:: PyTango.Device_3Impl
+.. autoclass:: tango.Device_3Impl
     :show-inheritance:
     :inherited-members:
     :members:
@@ -28,7 +28,7 @@ Device_3Impl
 Device_4Impl
 ------------
 
-.. autoclass:: PyTango.Device_4Impl
+.. autoclass:: tango.Device_4Impl
     :show-inheritance:
     :inherited-members:
     :members:
@@ -36,6 +36,6 @@ Device_4Impl
 DServer
 ----------
 
-.. autoclass:: PyTango.DServer
+.. autoclass:: tango.DServer
     :show-inheritance:
     :members:
diff --git a/doc/server_api/device_class.rst b/doc/server_api/device_class.rst
index 71c4723..1e9ce30 100644
--- a/doc/server_api/device_class.rst
+++ b/doc/server_api/device_class.rst
@@ -1,7 +1,7 @@
 DeviceClass
 ===========
 
-.. currentmodule:: PyTango
+.. currentmodule:: tango
 
-.. autoclass:: PyTango.DeviceClass
+.. autoclass:: tango.DeviceClass
     :members:
diff --git a/doc/server_api/index.rst b/doc/server_api/index.rst
index f2a28ef..c3f4d08 100644
--- a/doc/server_api/index.rst
+++ b/doc/server_api/index.rst
@@ -1,4 +1,4 @@
-.. currentmodule:: PyTango
+.. currentmodule:: tango
 
 Server API
 ----------
diff --git a/doc/server_api/logging.rst b/doc/server_api/logging.rst
index 704b953..1687869 100644
--- a/doc/server_api/logging.rst
+++ b/doc/server_api/logging.rst
@@ -1,40 +1,40 @@
 Logging decorators
 ==================
 
-.. currentmodule:: PyTango
+.. currentmodule:: tango
 
 LogIt
 -----
 
-.. autoclass:: PyTango.LogIt
+.. autoclass:: tango.LogIt
     :members:
 
 DebugIt
 -------
 
-.. autoclass:: PyTango.DebugIt
+.. autoclass:: tango.DebugIt
     :members:
 
 InfoIt
 ------
 
-.. autoclass:: PyTango.InfoIt
+.. autoclass:: tango.InfoIt
     :members:
 
 WarnIt
 -------
 
-.. autoclass:: PyTango.WarnIt
+.. autoclass:: tango.WarnIt
     :members:
 
 ErrorIt
 -------
 
-.. autoclass:: PyTango.ErrorIt
+.. autoclass:: tango.ErrorIt
     :members:
 
 FatalIt
 -------
 
-.. autoclass:: PyTango.FatalIt
+.. autoclass:: tango.FatalIt
     :members:
diff --git a/doc/server_api/server.rst b/doc/server_api/server.rst
index 9a3a65b..6c5094d 100644
--- a/doc/server_api/server.rst
+++ b/doc/server_api/server.rst
@@ -1,22 +1,23 @@
 
-.. currentmodule:: PyTango.server
+.. currentmodule:: tango.server
 
 .. _pytango-hlapi:
 
 High level server API
 =====================
 
-.. automodule:: PyTango.server
+.. automodule:: tango.server
 
 .. hlist::
 
-   * :class:`~PyTango.server.Device`
-   * :class:`~PyTango.server.attribute`
-   * :class:`~PyTango.server.command`
-   * :class:`~PyTango.server.device_property`
-   * :class:`~PyTango.server.class_property`
-   * :func:`~PyTango.server.run`
-   * :func:`~PyTango.server.server_run`
+   * :class:`~tango.server.Device`
+   * :class:`~tango.server.attribute`
+   * :class:`~tango.server.command`
+   * :class:`~tango.server.pipe`
+   * :class:`~tango.server.device_property`
+   * :class:`~tango.server.class_property`
+   * :func:`~tango.server.run`
+   * :func:`~tango.server.server_run`
 
 This module provides a high level device server API. It implements
 :ref:`TEP1 <pytango-TEP1>`. It exposes an easier API for developing a Tango
@@ -26,9 +27,9 @@ Here is a simple example on how to write a *Clock* device server using the
 high level API::
     
     import time
-    from PyTango.server import run
-    from PyTango.server import Device, DeviceMeta
-    from PyTango.server import attribute, command   
+    from tango.server import run
+    from tango.server import Device, DeviceMeta
+    from tango.server import attribute, command   
 
 
     class Clock(Device):
@@ -64,9 +65,9 @@ using the high level API. The example contains:
     from time import time
     from numpy.random import random_sample
 
-    from PyTango import AttrQuality, AttrWriteType, DispLevel, server_run
-    from PyTango.server import Device, DeviceMeta, attribute, command
-    from PyTango.server import class_property, device_property
+    from tango import AttrQuality, AttrWriteType, DispLevel, server_run
+    from tango.server import Device, DeviceMeta, attribute, command
+    from tango.server import class_property, device_property
 
     class PowerSupply(Device):
         __metaclass__ = DeviceMeta
@@ -128,16 +129,16 @@ using the high level API. The example contains:
 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 restricted
-to the :obj:`~PyTango.CmdArgType` options.
+to the :obj:`~tango.CmdArgType` options.
 
-For example, to define a *SCALAR* :obj:`~PyTango.CmdArgType.DevLong`
+For example, to define a *SCALAR* :obj:`~tango.CmdArgType.DevLong`
 attribute you have several possibilities:
 
 #. :obj:`int`
 #. 'int'
 #. 'int32'
 #. 'integer' 
-#. :obj:`PyTango.CmdArgType.DevLong`
+#. :obj:`tango.CmdArgType.DevLong`
 #. 'DevLong' 
 #. :obj:`numpy.int32`
 
@@ -283,6 +284,9 @@ dtype argument                            converts to tango type
  
  ``DevVarDoubleStringArray``               ``DevVarDoubleStringArray``
  ``'DevVarDoubleStringArray'``             ``DevVarDoubleStringArray``
+
+ ``DevPipeBlob``                           ``DevPipeBlob``
+ ``'DevPipeBlob'``                         ``DevPipeBlob``
 ========================================  ========================================
 
 .. autoclass:: Device
@@ -294,6 +298,8 @@ dtype argument                            converts to tango type
 
 .. autofunction:: command
 
+.. autoclass:: pipe
+
 .. autoclass:: device_property
 
 .. autoclass:: class_property
diff --git a/doc/server_api/util.rst b/doc/server_api/util.rst
index 7641f66..45558e7 100644
--- a/doc/server_api/util.rst
+++ b/doc/server_api/util.rst
@@ -1,8 +1,8 @@
 Util
 ====
 
-.. currentmodule:: PyTango
+.. currentmodule:: tango
 
-.. autoclass:: PyTango.Util
+.. autoclass:: tango.Util
     :members:
     :inherited-members:
diff --git a/doc/sphinxext/ipython_console_highlighting.py b/doc/sphinxext/ipython_console_highlighting.py
deleted file mode 100644
index 1a9bf2e..0000000
--- a/doc/sphinxext/ipython_console_highlighting.py
+++ /dev/null
@@ -1,125 +0,0 @@
-# ------------------------------------------------------------------------------
-# 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.
-
-XXX - See what improvements can be made based on the new (as of Sept 2009)
-'pycon' lexer for the python console.  At the very least it will give better
-highlighted tracebacks.
-"""
-
-#-----------------------------------------------------------------------------
-# Needed modules
-
-# Standard library
-import re
-
-# Third party
-from pygments.lexer import Lexer, do_insertions
-from pygments.lexers.agile import (PythonConsoleLexer, PythonLexer, 
-                                   PythonTracebackLexer)
-from pygments.token import Comment, Generic
-
-from sphinx import highlighting
-
-#-----------------------------------------------------------------------------
-# Global constants
-line_re = re.compile('.*?\n')
-
-#-----------------------------------------------------------------------------
-# Code begins - classes and functions
-
-class IPythonConsoleLexer(Lexer):
-    """
-    For IPython console output or doctests, such as:
-
-    .. sourcecode:: ipython
-
-      In [1]: a = 'foo'
-
-      In [2]: a
-      Out[2]: 'foo'
-
-      In [3]: print a
-      foo
-
-      In [4]: 1 / 0
-
-    Notes:
-
-      - Tracebacks are not currently supported.
-
-      - It assumes the default IPython prompts, not customized ones.
-    """
-    
-    name = 'IPython console session'
-    aliases = ['ipython']
-    mimetypes = ['text/x-ipython-console']
-    input_prompt = re.compile("(In \[(?P<N>[0-9]+)\]: )|(   \.\.\.+:)")
-    output_prompt = re.compile("(Out\[(?P<N>[0-9]+)\]: )|(   \.\.\.+:)")
-    continue_prompt = re.compile("   \.\.\.+:")
-    tb_start = re.compile("\-+")
-
-    def get_tokens_unprocessed(self, text):
-        pylexer = PythonLexer(**self.options)
-        tblexer = PythonTracebackLexer(**self.options)
-
-        curcode = ''
-        insertions = []
-        for match in line_re.finditer(text):
-            line = match.group()
-            input_prompt = self.input_prompt.match(line)
-            continue_prompt = self.continue_prompt.match(line.rstrip())
-            output_prompt = self.output_prompt.match(line)
-            if line.startswith("#"):
-                insertions.append((len(curcode),
-                                   [(0, Comment, line)]))
-            elif input_prompt is not None:
-                insertions.append((len(curcode),
-                                   [(0, Generic.Prompt, input_prompt.group())]))
-                curcode += line[input_prompt.end():]
-            elif continue_prompt is not None:
-                insertions.append((len(curcode),
-                                   [(0, Generic.Prompt, continue_prompt.group())]))
-                curcode += line[continue_prompt.end():]
-            elif output_prompt is not None:
-                # Use the 'error' token for output.  We should probably make
-                # our own token, but error is typicaly in a bright color like
-                # red, so it works fine for our output prompts.
-                insertions.append((len(curcode),
-                                   [(0, Generic.Error, output_prompt.group())]))
-                curcode += line[output_prompt.end():]
-            else:
-                if curcode:
-                    for item in do_insertions(insertions,
-                                              pylexer.get_tokens_unprocessed(curcode)):
-                        yield item
-                        curcode = ''
-                        insertions = []
-                yield match.start(), Generic.Output, line
-        if curcode:
-            for item in do_insertions(insertions,
-                                      pylexer.get_tokens_unprocessed(curcode)):
-                yield item
-
-
-def setup(app):
-    """Setup as a sphinx extension."""
-
-    # This is only a lexer, so adding it below to pygments appears sufficient.
-    # But if somebody knows that the right API usage should be to do that via
-    # sphinx, by all means fix it here.  At least having this setup.py
-    # suppresses the sphinx warning we'd get without it.
-    pass
-
-#-----------------------------------------------------------------------------
-# Register the extension as a valid pygments lexer
-highlighting.lexers['ipython'] = IPythonConsoleLexer()
diff --git a/doc/sphinxext/tango_console_highlighting.py b/doc/sphinxext/tango_console_highlighting.py
deleted file mode 100644
index fa70aff..0000000
--- a/doc/sphinxext/tango_console_highlighting.py
+++ /dev/null
@@ -1,139 +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/>.
-##
-################################################################################
-
-"""reST directive for syntax-highlighting itango interactive sessions.
-"""
-
-#-----------------------------------------------------------------------------
-# Needed modules
-
-# Standard library
-import re
-import copy
-
-# Third party
-from pygments.lexer import Lexer, do_insertions
-from pygments.lexers.agile import (PythonConsoleLexer, PythonLexer, 
-                                   PythonTracebackLexer)
-from pygments.token import Comment, Generic
-from pygments.style import Style
-import pygments.styles
-from sphinx import highlighting
-
-#-----------------------------------------------------------------------------
-# Global constants
-line_re = re.compile('.*?\n')
-
-DftStyle = pygments.styles.get_style_by_name("default")
-
-class TangoStyle(DftStyle):
-    
-    styles = copy.copy(DftStyle.styles)
-    styles[Generic.Prompt] = 'bold #00AA00'
-
-class TangoConsoleLexer(Lexer):
-    """
-    For itango console output or doctests, such as:
-
-    .. sourcecode:: itango
-
-      ITango [1]: a = 'foo'
-
-      ITango [2]: a
-                   Result [2]: 'foo'
-
-      ITango [3]: print a
-      foo
-
-      ITango [4]: 1 / 0
-
-    Notes:
-
-      - Tracebacks are not currently supported.
-
-      - It assumes the default itango prompts, not customized ones.
-    """
-    
-    name = 'ITango console session'
-    aliases = ['itango']
-    mimetypes = ['text/x-itango-console']
-    input_prompt = re.compile("(ITango \[(?P<N>[0-9]+)\]: )|(   \.\.\.+:)")
-    output_prompt = re.compile("(\s*Result \[(?P<N>[0-9]+)\]: )|(   \.\.\.+:)")
-    continue_prompt = re.compile("   \.\.\.+:")
-    tb_start = re.compile("\-+")
-
-    def get_tokens_unprocessed(self, text):
-        pylexer = PythonLexer(**self.options)
-        tblexer = PythonTracebackLexer(**self.options)
-
-        curcode = ''
-        insertions = []
-        for match in line_re.finditer(text):
-            line = match.group()
-            input_prompt = self.input_prompt.match(line)
-            continue_prompt = self.continue_prompt.match(line.rstrip())
-            output_prompt = self.output_prompt.match(line)
-            if line.startswith("#"):
-                insertions.append((len(curcode),
-                                   [(0, Comment, line)]))
-            elif input_prompt is not None:
-                insertions.append((len(curcode),
-                                   [(0, Generic.Prompt, input_prompt.group())]))
-                curcode += line[input_prompt.end():]
-            elif continue_prompt is not None:
-                insertions.append((len(curcode),
-                                   [(0, Generic.Prompt, continue_prompt.group())]))
-                curcode += line[continue_prompt.end():]
-            elif output_prompt is not None:
-                # Use the 'error' token for output.  We should probably make
-                # our own token, but error is typicaly in a bright color like
-                # red, so it works fine for our output prompts.
-                insertions.append((len(curcode),
-                                   [(0, Generic.Error, output_prompt.group())]))
-                curcode += line[output_prompt.end():]
-            else:
-                if curcode:
-                    for item in do_insertions(insertions,
-                                              pylexer.get_tokens_unprocessed(curcode)):
-                        yield item
-                        curcode = ''
-                        insertions = []
-                yield match.start(), Generic.Output, line
-        if curcode:
-            for item in do_insertions(insertions,
-                                      pylexer.get_tokens_unprocessed(curcode)):
-                yield item
-
-
-def setup(app):
-    """Setup as a sphinx extension."""
-
-    # This is only a lexer, so adding it below to pygments appears sufficient.
-    # But if somebody knows that the right API usage should be to do that via
-    # sphinx, by all means fix it here.  At least having this setup.py
-    # suppresses the sphinx warning we'd get without it.
-    pass
-
-#-----------------------------------------------------------------------------
-# Register the extension as a valid pygments lexer
-highlighting.lexers['itango'] = TangoConsoleLexer()
diff --git a/doc/start.rst b/doc/start.rst
index 48d6df9..7ded997 100644
--- a/doc/start.rst
+++ b/doc/start.rst
@@ -9,10 +9,13 @@ Getting started
 Installing
 ----------
 
+
 Linux
 ~~~~~
 
-PyTango is available on linux as an official debian/ubuntu package::
+PyTango is available on linux as an official debian/ubuntu package:
+
+.. sourcecode:: console
 
     $ sudo apt-get install python-pytango
 
@@ -21,10 +24,11 @@ RPM packages are also available for RHEL & CentOS:
 .. hlist::
    :columns: 2
 
-   * `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>`_
+   * `CentOS 6 32bits <http://pubrepo.maxiv.lu.se/rpm/el6/x86_64/>`_
+   * `CentOS 6 64bits <http://pubrepo.maxiv.lu.se/rpm/el6/x86_64/>`_
+   * `CentOS 7 64bits <http://pubrepo.maxiv.lu.se/rpm/el7/x86_64/>`_
+   * `Fedora 23 32bits <http://pubrepo.maxiv.lu.se/rpm/fc23/i/386/>`_
+   * `Fedora 23 64bits <http://pubrepo.maxiv.lu.se/rpm/fc23/x86_64/>`_
 
 PyPi
 ~~~~
@@ -35,14 +39,17 @@ First, make sure you have the following packages already installed (all of them
 are available from the major official distribution repositories):
 
 * `boost-python`_ (including boost-python-dev)
-* `numpy`_ 
-* `IPython`_ (optional, highly recommended)
+* `numpy`_
+
+Then install PyTango either from pip:
 
-Then install PyTango either from pip::
+.. sourcecode:: console
 
     $ pip install PyTango
 
-or easy_install::
+or easy_install:
+
+.. sourcecode:: console
 
     $ easy_install -U PyTango
 
@@ -55,7 +62,7 @@ PyTango team provides a limited set of binary PyTango distributables for
 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 
+Select the proper windows package, download it and finally execute the
 installion wizard.
 
 Compiling
@@ -64,26 +71,29 @@ Compiling
 Linux
 ~~~~~
 
-Since PyTango 7 the build system used to compile PyTango is the standard python 
-distutils.
+Since PyTango 9 the build system used to compile PyTango is the standard python
+setuptools.
 
-Besides the binaries for the three dependencies mentioned above, you also need 
+Besides the binaries for the three dependencies mentioned above, you also need
 the development files for the respective libraries.
 
 You can get the latest ``.tar.gz`` from `PyPI`_ or directly
-the latest SVN checkout::
+the latest SVN checkout:
+
+.. sourcecode:: console
 
-    $ svn co http://svn.code.sf.net/p/tango-cs/code/bindings/PyTango/trunk PyTango
-    $ cd PyTango
+    $ git clone https://github.com/tango-cs/pytango.git
+    $ cd pytango
     $ 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.
+This will install PyTango in the system python installation directory.
+(Since PyTango9, :ref:`itango` has been removed to a separate project and it will not be installed with PyTango.)
+If you whish to install in a different directory, replace the last line with:
+
+.. sourcecode:: console
 
-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
+    $ # private installation to your user (usually ~/.local/lib/python<X>.<Y>/site-packages)
     $ python setup.py install --user
 
     $ # or specific installation directory
@@ -100,27 +110,11 @@ source package under :file:`doc/windows_notes.txt`.
 Testing
 -------
 
-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
-line::
-
-    $ itango
-
-then, in ITango type:
-
-.. sourcecode:: itango
-
-    ITango [1]: PyTango.Release.version
-    Result [1]: '8.0.2'
-
-(if you are wondering, :ref:`itango` automaticaly does ``import PyTango`` 
-for you!)
+To test the installation, import ``tango`` and check ``tango.Release.version``:
 
-If you don't have IPython_ installed, to test the installation start a
-python console and type:
+.. sourcecode:: console
 
-    >>> import PyTango
-    >>> PyTango.Release.version
-    '8.0.2'
+    $ python -c "import tango; print(tango.Release.version)"
+    9.2.0
 
 Next steps: Check out the :ref:`pytango-quick-tour`.
diff --git a/doc/tep.rst b/doc/tep.rst
index d888037..668984c 100644
--- a/doc/tep.rst
+++ b/doc/tep.rst
@@ -1,4 +1,4 @@
-.. currentmodule:: PyTango
+.. currentmodule:: tango
 
 .. _pytango_enhancement_proposals:
 
diff --git a/doc/tep/tep-0001.rst b/doc/tep/tep-0001.rst
index 3348ff4..f3306a1 100644
--- a/doc/tep/tep-0001.rst
+++ b/doc/tep/tep-0001.rst
@@ -1,5 +1,5 @@
 
-.. currentmodule:: PyTango.server
+.. currentmodule:: tango.server
 
 .. _pytango-TEP1:
 
@@ -113,22 +113,22 @@ with the new API.
 All tango features should be available by direct usage of the new simplified,
 cleaner high-level API and through direct access to the low-level API.
     
-Automatic inheritance from the latest** :class:`~PyTango.DeviceImpl` 
+Automatic inheritance from the latest** :class:`~tango.DeviceImpl` 
 --------------------------------------------------------------------------------
 
 Currently Devices need to inherit from a direct Tango device implementation
-(:class:`~PyTango.DeviceImpl`, or :class:`~PyTango.Device_2Impl`,
-:class:`~PyTango.Device_3Impl`, :class:`~PyTango.Device_4Impl`, etc)
+(:class:`~tango.DeviceImpl`, or :class:`~tango.Device_2Impl`,
+:class:`~tango.Device_3Impl`, :class:`~tango.Device_4Impl`, etc)
 according to the tango version being used during the development.
 
 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.server.Device` (which
+By inheriting from a new high-level :class:`~tango.server.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.server`).
+release without need for manual intervention (see :mod:`tango.server`).
 
 Low-level way::
 
@@ -140,14 +140,14 @@ High-level way::
     class Motor(PyTango.server.Device):
         pass
     
-Default implementation of :class:`~PyTango.server.Device` constructor
+Default implementation of :class:`~tango.server.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.server`).
+:class:`~tango.DeviceImpl` only implement `__init__` to call their
+`init_device` (see :mod:`tango.server`).
 
-:class:`~PyTango.server.Device` already calls init_device.
+:class:`~tango.server.Device` already calls init_device.
 
 Low-level way::
 
@@ -165,15 +165,15 @@ High-level way::
         
         pass
 
-Default implementation of :meth:`~PyTango.server.Device.init_device`
+Default implementation of :meth:`~tango.server.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.server`).
+:class:`~tango.DeviceImpl` have an implementation of `init_device` which
+*at least* calls :meth:`~tango.DeviceImpl.get_device_properties`
+(see :mod:`tango.server`).
 
-:meth:`~PyTango.server.Device.init_device` already calls :meth:`~PyTango.server.Device.get_device_properties`.
+:meth:`~tango.server.Device.init_device` already calls :meth:`~tango.server.Device.get_device_properties`.
 
 Low-level way::
 
@@ -188,19 +188,19 @@ High-level way::
         # Nothing to be done!
         pass
 
-Remove the need to code :class:`~PyTango.DeviceClass`
+Remove the need to code :class:`~tango.DeviceClass`
 --------------------------------------------------------------------------------
 
 99% of different device servers only need to implement their own subclass
-of :class:`~PyTango.DeviceClass` to register the attribute, commands,
+of :class:`~tango.DeviceClass` to register the attribute, commands,
 device and class properties by using the corresponding
-:obj:`~PyTango.DeviceClass.attr_list`, :obj:`~PyTango.DeviceClass.cmd_list`,
-:obj:`~PyTango.DeviceClass.device_property_list` and :obj:`~PyTango.DeviceClass.class_property_list`.
+:obj:`~tango.DeviceClass.attr_list`, :obj:`~tango.DeviceClass.cmd_list`,
+:obj:`~tango.DeviceClass.device_property_list` and :obj:`~tango.DeviceClass.class_property_list`.
 
 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.server.Device` with a more
-pythonic API (see :mod:`PyTango.server`)
+:class:`~tango.DeviceClass` by registering attribute, commands,
+device and class properties in the :class:`~tango.server.Device` with a more
+pythonic API (see :mod:`tango.server`)
 
 
 #. Hide `<Device>Class` class completely
@@ -279,7 +279,7 @@ Simplify `main()`
 the typical `main()` method could be greatly simplified.
 initializing tango, registering tango classes, initializing and running the
 server loop and managing errors could all be done with the single function
-call to :func:`~PyTango.server_run`
+call to :func:`~tango.server_run`
 
 Low-level way::
 
@@ -595,7 +595,7 @@ And the equivalent HLAPI version of the code would be::
 References
 ==========
 
-:mod:`PyTango.server`
+:mod:`tango.server`
 
 Changes
 =======
diff --git a/doc/tep/tep-0002.rst b/doc/tep/tep-0002.rst
index 79307a2..ead4fe3 100644
--- a/doc/tep/tep-0002.rst
+++ b/doc/tep/tep-0002.rst
@@ -1,5 +1,5 @@
 
-.. currentmodule:: PyTango.databaseds
+.. currentmodule:: tango.databaseds
 
 .. _pytango-TEP2:
 
@@ -294,7 +294,7 @@ python DataBaseds with sqlite3 implementation.
 Development
 =================
 
-The development is being done in PyTango SVN trunk in the :mod:`PyTango.databaseds`
+The development is being done in PyTango SVN trunk in the :mod:`tango.databaseds`
 module.
 
 You can checkout with::
diff --git a/doc/utilities.rst b/doc/utilities.rst
index 95975e0..fa1250d 100644
--- a/doc/utilities.rst
+++ b/doc/utilities.rst
@@ -3,48 +3,48 @@
 The Utilities API
 =================
 
-.. currentmodule:: PyTango.utils
+.. currentmodule:: tango.utils
 
-.. autoclass:: PyTango.utils.EventCallBack
+.. autoclass:: tango.utils.EventCallBack
     :members:
     :undoc-members:
 
-.. autofunction:: PyTango.utils.is_pure_str
+.. autofunction:: tango.utils.is_pure_str
 
-.. autofunction:: PyTango.utils.is_seq
+.. autofunction:: tango.utils.is_seq
 
-.. autofunction:: PyTango.utils.is_non_str_seq
+.. autofunction:: tango.utils.is_non_str_seq
 
-.. autofunction:: PyTango.utils.is_integer
+.. autofunction:: tango.utils.is_integer
 
-.. autofunction:: PyTango.utils.is_number
+.. autofunction:: tango.utils.is_number
 
-.. autofunction:: PyTango.utils.is_bool
+.. autofunction:: tango.utils.is_bool
 
-.. autofunction:: PyTango.utils.is_scalar_type
+.. autofunction:: tango.utils.is_scalar_type
     
-.. autofunction:: PyTango.utils.is_array_type
+.. autofunction:: tango.utils.is_array_type
 
-.. autofunction:: PyTango.utils.is_numerical_type
+.. autofunction:: tango.utils.is_numerical_type
 
-.. autofunction:: PyTango.utils.is_int_type
+.. autofunction:: tango.utils.is_int_type
 
-.. autofunction:: PyTango.utils.is_float_type
+.. autofunction:: tango.utils.is_float_type
 
-.. autofunction:: PyTango.utils.is_bool_type
+.. autofunction:: tango.utils.is_bool_type
 
-.. autofunction:: PyTango.utils.is_bin_type
+.. autofunction:: tango.utils.is_bin_type
 
-.. autofunction:: PyTango.utils.is_str_type
+.. autofunction:: tango.utils.is_str_type
 
-.. autofunction:: PyTango.utils.obj_2_str
+.. autofunction:: tango.utils.obj_2_str
 
-.. autofunction:: PyTango.utils.seqStr_2_obj
+.. autofunction:: tango.utils.seqStr_2_obj
 
-.. autofunction:: PyTango.utils.scalar_to_array_type
+.. autofunction:: tango.utils.scalar_to_array_type
 
-.. autofunction:: PyTango.utils.get_home
+.. autofunction:: tango.utils.get_home
 
-.. autofunction:: PyTango.utils.requires_pytango
+.. autofunction:: tango.utils.requires_pytango
 
-.. autofunction:: PyTango.utils.requires_tango
+.. autofunction:: tango.utils.requires_tango
diff --git a/examples/Clock/Clock.py b/examples/Clock/Clock.py
new file mode 100644
index 0000000..faa24a6
--- /dev/null
+++ b/examples/Clock/Clock.py
@@ -0,0 +1,21 @@
+import time
+from PyTango.server import run
+from PyTango.server import Device, DeviceMeta
+from PyTango.server import attribute, command   
+
+
+class Clock(Device):
+    __metaclass__ = DeviceMeta
+
+    @attribute
+    def time(self):
+	"""The time attribute"""
+        return time.time()
+
+    @command(dtype_in=str, dtype_out=str)
+    def strftime(self, format):
+        return time.strftime(format)
+
+
+if __name__ == "__main__":
+    run([Clock])
diff --git a/examples/Clock/ClockDS.py b/examples/Clock/ClockDS.py
new file mode 100644
index 0000000..24ad822
--- /dev/null
+++ b/examples/Clock/ClockDS.py
@@ -0,0 +1,60 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+# ------------------------------------------------------------------------------
+# This file is part of PyTango (http://pytango.rtfd.io)
+#
+# Copyright 2013-2015 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.
+# ------------------------------------------------------------------------------
+
+"""
+Clock Device server showing how to write a TANGO server with a Clock device
+which has attributes:
+
+  - time: read-only scalar float
+  - gmtime: read-only sequence (spectrum) of integers
+
+commands:
+
+  - ctime: in: float parameter; returns a string
+  - mktime: in: sequence (spectrum) of 9 integers; returns a float
+"""
+
+import time
+
+from PyTango.server import Device, DeviceMeta
+from PyTango.server import attribute, command
+from PyTango.server import run
+
+
+class Clock(Device):
+    __metaclass__ = DeviceMeta
+
+    @attribute(dtype=float)
+    def time(self):
+        return time.time()
+
+    gmtime = attribute(dtype=(int,), max_dim_x=9)
+
+    def read_gmtime(self):
+        return time.gmtime()
+
+    @command(dtype_in=float, dtype_out=str)
+    def ctime(self, seconds):
+        """
+        Convert a time in seconds since the Epoch to a string in local time.
+        This is equivalent to asctime(localtime(seconds)). When the time tuple
+        is not present, current time as returned by localtime() is used.
+        """
+        return time.ctime(seconds)
+
+    @command(dtype_in=(int,), dtype_out=float)
+    def mktime(self, tupl):
+        return time.mktime(tupl)
+
+
+if __name__ == "__main__":
+    run([Clock,])
diff --git a/examples/Clock/client.py b/examples/Clock/client.py
new file mode 100644
index 0000000..24f933c
--- /dev/null
+++ b/examples/Clock/client.py
@@ -0,0 +1,36 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+# ------------------------------------------------------------------------------
+# This file is part of PyTango (http://pytango.rtfd.io)
+#
+# Copyright 2013-2015 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.
+# ------------------------------------------------------------------------------
+
+"""
+Simple client to show how to connect to a Clock device from ClockDS
+
+usage: client clock_dev_name
+"""
+
+import sys
+import PyTango
+
+if len(sys.argv) != 2:
+    print "must provide one and only one clock device name"
+    sys.exit(1)
+
+clock = PyTango.DeviceProxy(sys.argv[1])
+t = clock.time
+gmt = clock.gmtime
+print(t)
+print(gmt)
+print(clock.ctime(t))
+print(clock.mktime(gmt))
+
+
+
+
diff --git a/examples/TuringMachine/TuringMachine.py b/examples/TuringMachine/TuringMachine.py
new file mode 100644
index 0000000..994c72b
--- /dev/null
+++ b/examples/TuringMachine/TuringMachine.py
@@ -0,0 +1,69 @@
+import json
+from PyTango import DevState
+from PyTango.server import Device, DeviceMeta, run
+from PyTango.server import attribute, command, device_property
+
+class TuringMachine(Device):
+    __metaclass__ = DeviceMeta
+
+    blank_symbol = device_property(dtype=str, default_value=" ")
+    initial_state = device_property(dtype=str, default_value="init")
+    
+    def init_device(self):
+        Device.init_device(self)
+        self.__tape = {}
+        self.__head = 0
+        self.__state = self.initial_state
+        self.__final_states = []
+        self.__transition_function = None
+        self.set_state(DevState.RUNNING)
+
+    @attribute(dtype=(str,))
+    def final_states(self):
+        return self.__final_states
+
+    @final_states.write
+    def final_states(self, final_states):
+        self.__final_states = final_states
+
+    @attribute(dtype=str)
+    def transition_function(self):
+        return self.__transition_function
+
+    @transition_function.write
+    def transition_function(self, func_str):
+        self.__transition_function = tf = {}
+        for k, v in json.loads(func_str).items():
+            tf[tuple(str(k).split(","))] = map(str, v)
+        print tf
+        
+    @attribute(dtype=str)
+    def tape(self):
+        s, keys = "", self.__tape.keys()
+        min_used, max_used = min(keys), max(keys)
+        for i in range(min_used, max_used):
+            s += self.__tape.get(i, self.__blank_symbol)
+        return s
+
+    @command
+    def step(self):
+        char_under_head = self.__tape.get(self.__head, self.blank_symbol)
+        x = self.__state, char_under_head
+        if x in self.__transition_function:
+            y = self.__transition_function[x]
+            self.__tape[self.__head] = y[1]
+            if y[2] == "R":
+                self.__head += 1
+            elif y[2] == "L":
+                self.__head -= 1
+            self.__state = y[0]
+        print self.__state
+
+    def dev_state(self):
+        if self.__state in self.__final_states:
+            return DevState.ON
+        else:
+            return DevState.RUNNING
+            
+    
+run([TuringMachine])
diff --git a/examples/TuringMachine/turing_client.py b/examples/TuringMachine/turing_client.py
new file mode 100644
index 0000000..0b8d751
--- /dev/null
+++ b/examples/TuringMachine/turing_client.py
@@ -0,0 +1,18 @@
+from turing_machine import TuringMachine
+
+transition_function = {("init","0"):("init", "1", "R"),
+                       ("init","1"):("init", "0", "R"),
+                       ("init"," "):("final"," ", "N"),
+                       }
+
+t = TuringMachine("010011 ", final_states=["final"],
+                  transition_function=transition_function)
+
+print("Input on Tape:")
+print(t.get_tape_str())
+
+while not t.final():
+    t.step()
+
+print("Result of the Turing machine calculation:")    
+print(t.get_tape_str())
diff --git a/src/boost/python/databaseds/__init__.py b/examples/dynamic/common/__init__.py
similarity index 100%
copy from src/boost/python/databaseds/__init__.py
copy to examples/dynamic/common/__init__.py
diff --git a/examples/dynamic/common/roi.py b/examples/dynamic/common/roi.py
new file mode 100644
index 0000000..7c74ff3
--- /dev/null
+++ b/examples/dynamic/common/roi.py
@@ -0,0 +1,13 @@
+class ROI:
+    def __init__(self, x, y, w, h):
+        self.x = x
+        self.y = y
+        self.w = w
+        self.h = h
+
+    def __repr__(self):
+        return str(self)
+
+    def __str__(self):
+        txt = "ROI(x={o.x}, y={o.y}, w={o.w}, h={o.h})".format(o=self)
+        return txt
diff --git a/examples/dynamic/dynamic_client.py b/examples/dynamic/dynamic_client.py
new file mode 100644
index 0000000..541e6b5
--- /dev/null
+++ b/examples/dynamic/dynamic_client.py
@@ -0,0 +1,23 @@
+import PyTango.client
+
+my_object = PyTango.client.Object("my_object")
+
+print("my_object.bla = {0}".format(my_object.bla))
+print("my_object.ble = {0}".format(my_object.ble))
+print("my_object.bli = {0}".format(my_object.bli))
+print("my_object.array = {0}".format(my_object.array))
+
+r1 = my_object.func1()
+print("my_object.func1() = {0}".format(r1))
+
+r2 = my_object.func2(96.44)
+print("my_object.func2(96.44) = {0}".format(r2))
+
+r3 = my_object.func3(45.86, 'hello', d=False, c='world')
+print("my_object.func3(45.86, 'hello', d=False, c='world') = {0}".format(r3))
+
+r4 = my_object.func4()
+print("my_object.func4() = {0}".format(r4))
+
+r5 = my_object.zeros((500, 1000))
+print("my_object.zeros((500, 1000)) = {0}".format(r5))
diff --git a/examples/dynamic/dynamic_server.py b/examples/dynamic/dynamic_server.py
new file mode 100644
index 0000000..0ae7e74
--- /dev/null
+++ b/examples/dynamic/dynamic_server.py
@@ -0,0 +1,44 @@
+import numpy
+
+from PyTango.server import Server
+from common.roi import ROI
+
+class MyClass:
+
+    def __init__(self):
+        self.bla = 55.6
+        self.ble = 11
+        self.bli = False
+        self.array = numpy.ones((1000,1000))
+        self.buff = bytearray(100000*"Hello ")
+        self.__rois = {}
+
+    def func1(self):
+        return "executed func1"
+
+    def func2(self, v):
+        return 2*v
+
+    def func3(self, a, b, c=1, d=3):
+        """Just some documentation"""
+        return "done func3"
+
+    def add_roi(self, name, roi):
+        self.__rois[name] = roi
+        server.register_object(roi, name)
+
+    def remove_roi(self, name):
+        del self.__rois[name] # no need to unregister object
+
+
+import logging
+logging.basicConfig(level=logging.DEBUG)
+
+my_object = MyClass()
+a_roi = ROI(0,0,0,0)
+
+server = Server("Dynamic")
+
+server.register_object(my_object, "dynamic_object")
+server.register_object(a_roi, "dummy_roi")
+server.run()
diff --git a/examples/many/many_client.py b/examples/many/many_client.py
new file mode 100644
index 0000000..17de7a4
--- /dev/null
+++ b/examples/many/many_client.py
@@ -0,0 +1,17 @@
+from time import time
+
+import tango.client
+
+N = 100
+
+obj_names = ["obj%04d" % i for i in range(N)]
+
+start = time()
+objs = map(tango.client.Object, obj_names)
+dt = time() - start
+print "Took %fs to create %d objects (avg %fs/object)" % (dt, N, dt/N)
+
+start = time()
+res = [ obj.func3(1,2) for obj in objs ]
+dt = time() - start
+print "Took %fs to call func3 on %d objects (avg %fs/object)" % (dt, N, dt/N)
diff --git a/examples/many/many_server.py b/examples/many/many_server.py
new file mode 100644
index 0000000..0cbb286
--- /dev/null
+++ b/examples/many/many_server.py
@@ -0,0 +1,36 @@
+from PyTango.server import Server
+
+class MyClass:
+
+    def __init__(self):
+        self.bla = 55.6
+        self.ble = 11
+        self.bli = False
+
+    def func1(self):
+        return "executed func1"
+
+    def func2(self, v):
+        return 2*v
+
+    def func3(self, a, b, c=1, d=3):
+        """Just some documentation"""
+        return "done func3"
+
+    def func(self, nap_time):
+        import time
+        time.sleep(nap_time)
+        return "Finished sleep for {0}s".format(nap_time)
+
+server = Server("many", server_type="Server")
+
+N = 100
+
+objs = []
+for i in range(N):
+    name = "obj%04d" % i
+    obj = MyClass()
+    objs.append(obj)
+    server.register_object(obj, name)
+
+server.run()
diff --git a/examples/multi/multi_client.py b/examples/multi/multi_client.py
new file mode 100644
index 0000000..563609b
--- /dev/null
+++ b/examples/multi/multi_client.py
@@ -0,0 +1,24 @@
+import PyTango.client
+
+my_object = PyTango.client.Object("multi_my_object")
+
+print("my_object.bla = {0}".format(my_object.bla))
+print("my_object.ble = {0}".format(my_object.ble))
+print("my_object.bli = {0}".format(my_object.bli))
+
+r1 = my_object.func1()
+print("my_object.func1() = {0}".format(r1))
+
+r2 = my_object.func2(96.44)
+print("my_object.func2(96.44) = {0}".format(r2))
+
+r3 = my_object.func3(45.86, 'hello', d=False, c='world')
+print("my_object.func3(45.86, 'hello', d=False, c='world') = {0}".format(r3))
+
+another_object = PyTango.client.Object("multi_another_object")
+
+r1 = another_object.is_valid()
+print("another_object.is_valid() = {0}".format(r1))
+
+r2 = another_object.lets_go("hello, world!")
+print("another_object.lets_go('hello, world!') = {0}".format(r2))
diff --git a/examples/multi/multi_server.py b/examples/multi/multi_server.py
new file mode 100644
index 0000000..a3aed27
--- /dev/null
+++ b/examples/multi/multi_server.py
@@ -0,0 +1,47 @@
+from PyTango.server import Server
+
+class MyClass:
+
+    def __init__(self):
+        self.bla = 55.6
+        self.ble = 11
+        self.bli = False
+
+    def func1(self):
+        return "executed func1"
+
+    def func2(self, v):
+        return 2*v
+    
+    def func3(self, a, b, c=1, d=3):
+        """Just some documentation"""
+        return "done func3"
+
+
+class AnotherClass:
+
+    def __init__(self, valid=True):
+        self.__valid = valid
+
+    def is_valid(self):
+        return self.__valid
+    
+    def lets_go(self, p1):
+        return "lets_go done!", p1
+
+    def fft(self, a, n=None, axis=-1):
+        import numpy.fft
+        return numpy.fft.fft(a, n=n, axis=axis)
+
+    def array(self, a):
+        return a
+
+my_object = MyClass()
+another_object = AnotherClass(valid=False)
+
+server = Server("multi", server_type="Server")
+
+server.register_object(my_object, "multi_my_object")
+server.register_object(another_object, "multi_another_object")
+
+server.run()
diff --git a/src/boost/python/databaseds/__init__.py b/examples/simple/common/__init__.py
similarity index 100%
copy from src/boost/python/databaseds/__init__.py
copy to examples/simple/common/__init__.py
diff --git a/examples/simple/common/roi.py b/examples/simple/common/roi.py
new file mode 100644
index 0000000..7c74ff3
--- /dev/null
+++ b/examples/simple/common/roi.py
@@ -0,0 +1,13 @@
+class ROI:
+    def __init__(self, x, y, w, h):
+        self.x = x
+        self.y = y
+        self.w = w
+        self.h = h
+
+    def __repr__(self):
+        return str(self)
+
+    def __str__(self):
+        txt = "ROI(x={o.x}, y={o.y}, w={o.w}, h={o.h})".format(o=self)
+        return txt
diff --git a/examples/simple/simple_client.py b/examples/simple/simple_client.py
new file mode 100644
index 0000000..541e6b5
--- /dev/null
+++ b/examples/simple/simple_client.py
@@ -0,0 +1,23 @@
+import PyTango.client
+
+my_object = PyTango.client.Object("my_object")
+
+print("my_object.bla = {0}".format(my_object.bla))
+print("my_object.ble = {0}".format(my_object.ble))
+print("my_object.bli = {0}".format(my_object.bli))
+print("my_object.array = {0}".format(my_object.array))
+
+r1 = my_object.func1()
+print("my_object.func1() = {0}".format(r1))
+
+r2 = my_object.func2(96.44)
+print("my_object.func2(96.44) = {0}".format(r2))
+
+r3 = my_object.func3(45.86, 'hello', d=False, c='world')
+print("my_object.func3(45.86, 'hello', d=False, c='world') = {0}".format(r3))
+
+r4 = my_object.func4()
+print("my_object.func4() = {0}".format(r4))
+
+r5 = my_object.zeros((500, 1000))
+print("my_object.zeros((500, 1000)) = {0}".format(r5))
diff --git a/examples/simple/simple_server.py b/examples/simple/simple_server.py
new file mode 100644
index 0000000..26f69ca
--- /dev/null
+++ b/examples/simple/simple_server.py
@@ -0,0 +1,45 @@
+import numpy
+from PyTango.server import Server
+from common.roi import ROI
+
+class MyClass:
+
+    def __init__(self):
+        self.bla = 55.6
+        self.ble = 11
+        self.bli = False
+        self.array = numpy.ones((1000,1000))
+        self.buff = bytearray(100000*"Hello ")
+
+    def func1(self):
+        return "executed func1"
+
+    def func2(self, v):
+        return 2*v
+
+    def func3(self, a, b, c=1, d=3):
+        """Just some documentation"""
+        return "done func3"
+
+    def func4(self):
+        roi1 = ROI(10, 20, 640, 480)
+        roi2 = ROI(0, 0, 1024, 768)
+        return roi1.__dict__
+
+    def zeros(self, shape, dtype='float'):
+        import numpy
+        return numpy.zeros(shape, dtype=dtype)
+
+    def func5(self, nap_time):
+        import time
+        time.sleep(nap_time)
+        return "Finished sleep for {0}s".format(nap_time)
+
+
+my_object = MyClass()
+
+server = Server("Bla")
+
+server.register_object(my_object, "my_object")
+
+server.run()
diff --git a/src/boost/cpp/api_util.cpp b/ext/api_util.cpp
similarity index 97%
rename from src/boost/cpp/api_util.cpp
rename to ext/api_util.cpp
index d9c550d..aa4b2c1 100644
--- a/src/boost/cpp/api_util.cpp
+++ b/ext/api_util.cpp
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
diff --git a/src/boost/cpp/archive_event_info.cpp b/ext/archive_event_info.cpp
similarity index 94%
copy from src/boost/cpp/archive_event_info.cpp
copy to ext/archive_event_info.cpp
index 75a8fa4..0c2cc9a 100644
--- a/src/boost/cpp/archive_event_info.cpp
+++ b/ext/archive_event_info.cpp
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
diff --git a/src/boost/cpp/attr_conf_event_data.cpp b/ext/attr_conf_event_data.cpp
similarity index 97%
rename from src/boost/cpp/attr_conf_event_data.cpp
rename to ext/attr_conf_event_data.cpp
index 15c5521..4afda70 100644
--- a/src/boost/cpp/attr_conf_event_data.cpp
+++ b/ext/attr_conf_event_data.cpp
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
diff --git a/src/boost/cpp/attribute_alarm_info.cpp b/ext/attribute_alarm_info.cpp
similarity index 95%
rename from src/boost/cpp/attribute_alarm_info.cpp
rename to ext/attribute_alarm_info.cpp
index 93557ef..1abb5e8 100644
--- a/src/boost/cpp/attribute_alarm_info.cpp
+++ b/ext/attribute_alarm_info.cpp
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
diff --git a/src/boost/cpp/attribute_dimension.cpp b/ext/attribute_dimension.cpp
similarity index 92%
copy from src/boost/cpp/attribute_dimension.cpp
copy to ext/attribute_dimension.cpp
index 1e03935..10e4dd3 100644
--- a/src/boost/cpp/attribute_dimension.cpp
+++ b/ext/attribute_dimension.cpp
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
diff --git a/src/boost/cpp/attribute_event_info.cpp b/ext/attribute_event_info.cpp
similarity index 93%
rename from src/boost/cpp/attribute_event_info.cpp
rename to ext/attribute_event_info.cpp
index cfcb4f6..536668f 100644
--- a/src/boost/cpp/attribute_event_info.cpp
+++ b/ext/attribute_event_info.cpp
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
diff --git a/src/boost/cpp/attribute_info.cpp b/ext/attribute_info.cpp
similarity index 93%
rename from src/boost/cpp/attribute_info.cpp
rename to ext/attribute_info.cpp
index 1a03ded..e66064c 100644
--- a/src/boost/cpp/attribute_info.cpp
+++ b/ext/attribute_info.cpp
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
diff --git a/src/boost/cpp/attribute_info_ex.cpp b/ext/attribute_info_ex.cpp
similarity index 78%
rename from src/boost/cpp/attribute_info_ex.cpp
rename to ext/attribute_info_ex.cpp
index bdec946..9247004 100644
--- a/src/boost/cpp/attribute_info_ex.cpp
+++ b/ext/attribute_info_ex.cpp
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
@@ -20,6 +20,9 @@ void export_attribute_info_ex()
         ("AttributeInfoEx")
         .def(init<const Tango::AttributeInfoEx&>())
         .enable_pickling()
+	.def_readwrite("root_attr_name",  &Tango::AttributeInfoEx::root_attr_name)
+	.def_readwrite("memorized",  &Tango::AttributeInfoEx::memorized)
+	.def_readwrite("enum_labels",  &Tango::AttributeInfoEx::enum_labels)
         .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/ext/attribute_proxy.cpp
similarity index 98%
rename from src/boost/cpp/attribute_proxy.cpp
rename to ext/attribute_proxy.cpp
index 3f0f7ed..8d3d815 100644
--- a/src/boost/cpp/attribute_proxy.cpp
+++ b/ext/attribute_proxy.cpp
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
diff --git a/src/boost/cpp/base_types.cpp b/ext/base_types.cpp
similarity index 95%
rename from src/boost/cpp/base_types.cpp
rename to ext/base_types.cpp
index dcc9faa..6b7a2a5 100644
--- a/src/boost/cpp/base_types.cpp
+++ b/ext/base_types.cpp
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
@@ -39,6 +39,8 @@ void export_device_data();
 void export_device_attribute();
 void export_device_data_history();
 void export_device_attribute_history();
+void export_device_pipe();
+void export_pipe_info();
 
 void export_dev_error();
 void export_time_val();
@@ -120,6 +122,15 @@ inline bool operator==(const Tango::DeviceDataHistory& ddh1_, const Tango::Devic
            //ddh1.errors() == ddh2.errors();
 }
 
+inline bool operator==(const Tango::PipeInfo& pi1, const Tango::PipeInfo& pi2)
+{
+    return pi1.name == pi2.name &&
+	pi1.description == pi2.description &&
+	pi1.label == pi2.label &&
+	pi1.disp_level == pi2.disp_level &&
+	pi1.writable == pi2.writable &&
+	pi1.extensions == pi2.extensions;
+}
 }
 
 /**
@@ -223,12 +234,6 @@ int raise_asynch_exception(long thread_id, boost::python::object exp_klass)
     return PyThreadState_SetAsyncExc(thread_id, exp_klass.ptr());
 }
 
-void leave()
-{
-    AutoPythonAllowThreads guard;
-    Tango::leavefunc();
-}
-
 void export_base_types()
 {
     enum_<PyTango::ExtractAs>("ExtractAs")
@@ -245,6 +250,7 @@ void export_base_types()
         .value("Synchronous", PyTango::GreenModeSynchronous)
         .value("Futures", PyTango::GreenModeFutures)
         .value("Gevent", PyTango::GreenModeGevent)
+        .value("Asyncio", PyTango::GreenModeAsyncio)
     ;
 
     enum_<PyTango::ImageFormat>("_ImageFormat")
@@ -295,6 +301,8 @@ void export_base_types()
 
     class_<Tango::AttributeInfoListEx>("AttributeInfoListEx")
         .def(vector_indexing_suite<Tango::AttributeInfoListEx, false>());
+    class_<Tango::PipeInfoList>("PipeInfoList")
+        .def(vector_indexing_suite<Tango::PipeInfoList, false>());
 
     class_<std::vector<Tango::Attr *> >("AttrList")
         .def(vector_indexing_suite<std::vector<Tango::Attr *>, true>());
@@ -302,6 +310,9 @@ void export_base_types()
     class_<std::vector<Tango::Attribute *> >("AttributeList")
         .def(vector_indexing_suite<std::vector<Tango::Attribute *>, true>());
 
+    class_<std::vector<Tango::Pipe *> >("PipeList")
+        .def(vector_indexing_suite<std::vector<Tango::Pipe *>, true>());
+
     //class_<Tango::EventDataList>("EventDataList")
     //    .def(vector_indexing_suite<Tango::EventDataList>());
 
@@ -409,6 +420,8 @@ void export_base_types()
     export_device_attribute();
     export_device_data_history();
     export_device_attribute_history();
+    export_device_pipe();
+    export_pipe_info();
 
     export_dev_error();
     export_time_val();
@@ -416,6 +429,4 @@ void export_base_types()
     def("raise_asynch_exception", &raise_asynch_exception);
 
     def("_get_tango_lib_release", &Tango::_convert_tango_lib_release);
-
-    def("_leavefunc", &leave);
 }
diff --git a/src/boost/cpp/base_types_numpy.hpp b/ext/base_types_numpy.hpp
similarity index 98%
rename from src/boost/cpp/base_types_numpy.hpp
rename to ext/base_types_numpy.hpp
index 9f0a8d7..3262176 100644
--- a/src/boost/cpp/base_types_numpy.hpp
+++ b/ext/base_types_numpy.hpp
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
diff --git a/src/boost/cpp/callback.cpp b/ext/callback.cpp
similarity index 98%
rename from src/boost/cpp/callback.cpp
rename to ext/callback.cpp
index 06ceaef..14e996d 100644
--- a/src/boost/cpp/callback.cpp
+++ b/ext/callback.cpp
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
@@ -272,8 +272,12 @@ void PyCallBackPushEvent::fill_py_event(Tango::EventData* ev, object & py_ev, ob
     // attr_value pointer but its own copy, so my efforts are useless.
     if (ev->attr_value)
     {
+#ifdef PYTANGO_HAS_UNIQUE_PTR	
         Tango::DeviceAttribute *attr = new Tango::DeviceAttribute;
 	(*attr) = std::move(*ev->attr_value);
+#else
+	Tango::DeviceAttribute *attr = new Tango::DeviceAttribute(*ev->attr_value);
+#endif
         py_ev.attr("attr_value") = PyDeviceAttribute::convert_to_python(attr, *ev->device, extract_as);
     }
     // ev->attr_value = 0; // Do not delete, python will.
diff --git a/src/boost/cpp/callback.h b/ext/callback.h
similarity index 98%
rename from src/boost/cpp/callback.h
rename to ext/callback.h
index a149bb4..e0e3354 100644
--- a/src/boost/cpp/callback.h
+++ b/ext/callback.h
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
diff --git a/src/boost/cpp/change_event_info.cpp b/ext/change_event_info.cpp
similarity index 93%
rename from src/boost/cpp/change_event_info.cpp
rename to ext/change_event_info.cpp
index 7d808e1..7e77d94 100644
--- a/src/boost/cpp/change_event_info.cpp
+++ b/ext/change_event_info.cpp
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
diff --git a/src/boost/cpp/command_info.cpp b/ext/command_info.cpp
similarity index 92%
rename from src/boost/cpp/command_info.cpp
rename to ext/command_info.cpp
index b9e638f..fa08ca9 100644
--- a/src/boost/cpp/command_info.cpp
+++ b/ext/command_info.cpp
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
diff --git a/src/boost/cpp/connection.cpp b/ext/connection.cpp
similarity index 98%
rename from src/boost/cpp/connection.cpp
rename to ext/connection.cpp
index a7fc450..c812a95 100644
--- a/src/boost/cpp/connection.cpp
+++ b/ext/connection.cpp
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
diff --git a/ext/constants.cpp b/ext/constants.cpp
new file mode 100644
index 0000000..52419ee
--- /dev/null
+++ b/ext/constants.cpp
@@ -0,0 +1,341 @@
+/******************************************************************************
+  This file is part of PyTango (http://pytango.rtfd.io)
+
+  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>
+#include "tango_numpy.h"
+#include "tgutils.h"
+
+using namespace boost::python;
+
+long TANGO_VERSION_HEX;
+
+void export_constants()
+{
+    object consts_module(handle<>(borrowed(PyImport_AddModule("tango.constants"))));
+    scope().attr("constants") = consts_module;
+    scope consts_scope = consts_module;
+
+    consts_scope.attr("__doc__") = "module containing several Tango constants.\n"
+        "\nNew in PyTango 7.0.0";
+
+#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;
+#ifdef PYTANGO_NUMPY_VERSION
+    consts_scope.attr("NUMPY_VERSION") = PYTANGO_NUMPY_VERSION;
+#else
+    consts_scope.attr("NUMPY_VERSION") = "0.0.0";
+#endif
+#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
+    //
+
+    //
+    // Some general interest define
+    //
+    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_NB") = TANGO_VERSION_NB;
+    consts_scope.attr("TANGO_VERSION") = Tango::TgLibVers;
+
+    consts_scope.attr("TgLibVers") = Tango::TgLibVers;
+    consts_scope.attr("TgLibMajorVers") = Tango::TgLibMajorVers;
+    consts_scope.attr("TgLibVersNb") = Tango::TgLibVersNb;
+    consts_scope.attr("DevVersion") = Tango::DevVersion;
+    consts_scope.attr("DefaultMaxSeq") = Tango::DefaultMaxSeq;
+    consts_scope.attr("DefaultBlackBoxDepth") = Tango::DefaultBlackBoxDepth;
+    consts_scope.attr("DefaultPollRingDepth") = Tango::DefaultPollRingDepth;
+
+    consts_scope.attr("InitialOutput") =Tango:: InitialOutput;
+    consts_scope.attr("DSDeviceDomain") = Tango::DSDeviceDomain;
+    consts_scope.attr("DefaultDocUrl") = Tango::DefaultDocUrl;
+    consts_scope.attr("EnvVariable") = Tango::EnvVariable;
+    consts_scope.attr("WindowsEnvVariable") = Tango::WindowsEnvVariable;
+    consts_scope.attr("DbObjName") = Tango::DbObjName;
+
+    // Changed in tango 8 from DescNotSet to NotSet. We keep the old constant
+    // to try to maintain backward compatibility
+    consts_scope.attr("DescNotSet") = Tango::NotSet;
+    consts_scope.attr("NotSet") = Tango::NotSet;
+
+    consts_scope.attr("ResNotDefined") = Tango::ResNotDefined;
+    consts_scope.attr("MessBoxTitle") = Tango::MessBoxTitle;
+    consts_scope.attr("StatusNotSet") = Tango::StatusNotSet;
+    consts_scope.attr("TangoHostNotSet") = Tango::TangoHostNotSet;
+    consts_scope.attr("RootAttNotDef") = Tango::RootAttNotDef;
+
+    consts_scope.attr("DefaultWritAttrProp") = Tango::DefaultWritAttrProp;
+    consts_scope.attr("AllAttr") = Tango::AllAttr;
+    consts_scope.attr("AllAttr_3") = Tango::AllAttr_3;
+    consts_scope.attr("AllPipe") = Tango::AllPipe;
+    consts_scope.attr("AllCmd") = Tango::AllCmd;
+
+    consts_scope.attr("PollCommand") = Tango::PollCommand;
+    consts_scope.attr("PollAttribute") = Tango::PollAttribute;
+
+    consts_scope.attr("LOCAL_POLL_REQUEST") = Tango::LOCAL_POLL_REQUEST;
+    consts_scope.attr("LOCAL_REQUEST_STR_SIZE") = Tango::LOCAL_REQUEST_STR_SIZE;
+
+    consts_scope.attr("MIN_POLL_PERIOD") = Tango::MIN_POLL_PERIOD;
+    consts_scope.attr("DELTA_T") = Tango::DELTA_T;
+    consts_scope.attr("MIN_DELTA_WORK") = Tango::MIN_DELTA_WORK;
+    consts_scope.attr("TIME_HEARTBEAT") = Tango::TIME_HEARTBEAT;
+    consts_scope.attr("POLL_LOOP_NB") = Tango::POLL_LOOP_NB;
+    consts_scope.attr("ONE_SECOND") = Tango::ONE_SECOND;
+    consts_scope.attr("DISCARD_THRESHOLD") = Tango::DISCARD_THRESHOLD;
+
+    consts_scope.attr("DEFAULT_TIMEOUT") = Tango::DEFAULT_TIMEOUT;
+    consts_scope.attr("DEFAULT_POLL_OLD_FACTOR") = Tango::DEFAULT_POLL_OLD_FACTOR;
+
+    consts_scope.attr("TG_IMP_MINOR_TO") = Tango::TG_IMP_MINOR_TO;
+    consts_scope.attr("TG_IMP_MINOR_DEVFAILED") = Tango::TG_IMP_MINOR_DEVFAILED;
+    consts_scope.attr("TG_IMP_MINOR_NON_DEVFAILED") = Tango::TG_IMP_MINOR_NON_DEVFAILED;
+
+    consts_scope.attr("TANGO_PY_MOD_NAME") = Tango::TANGO_PY_MOD_NAME;
+    consts_scope.attr("DATABASE_CLASS") = Tango::DATABASE_CLASS;
+
+    consts_scope.attr("TANGO_FLOAT_PRECISION") = Tango::TANGO_FLOAT_PRECISION;
+    consts_scope.attr("NoClass") = Tango::NoClass;
+
+    //
+    // Event related define
+    //
+
+    consts_scope.attr("EVENT_HEARTBEAT_PERIOD") = Tango::EVENT_HEARTBEAT_PERIOD;
+    consts_scope.attr("EVENT_RESUBSCRIBE_PERIOD") = Tango::EVENT_RESUBSCRIBE_PERIOD;
+    consts_scope.attr("DEFAULT_EVENT_PERIOD") = Tango::DEFAULT_EVENT_PERIOD;
+    consts_scope.attr("DELTA_PERIODIC") = Tango::DELTA_PERIODIC;
+    consts_scope.attr("DELTA_PERIODIC_LONG") = Tango::DELTA_PERIODIC_LONG;
+    consts_scope.attr("HEARTBEAT") = Tango::HEARTBEAT;
+
+    //
+    // ZMQ event system related define
+    //
+    consts_scope.attr("ZMQ_EVENT_PROT_VERSION") = Tango::ZMQ_EVENT_PROT_VERSION;
+    consts_scope.attr("HEARTBEAT_METHOD_NAME") = Tango::HEARTBEAT_METHOD_NAME;
+    consts_scope.attr("EVENT_METHOD_NAME") = Tango::EVENT_METHOD_NAME;
+    consts_scope.attr("HEARTBEAT_EVENT_NAME") = Tango::HEARTBEAT_EVENT_NAME;
+    consts_scope.attr("CTRL_SOCK_ENDPOINT") = Tango::CTRL_SOCK_ENDPOINT;
+    consts_scope.attr("MCAST_PROT") = Tango::MCAST_PROT;
+    consts_scope.attr("MCAST_HOPS") = Tango::MCAST_HOPS;
+    consts_scope.attr("PGM_RATE") = Tango::PGM_RATE;
+    consts_scope.attr("PGM_IVL") = Tango::PGM_IVL;
+    consts_scope.attr("MAX_SOCKET_SUB") = Tango::MAX_SOCKET_SUB;
+    consts_scope.attr("PUB_HWM") = Tango::PUB_HWM;
+    consts_scope.attr("SUB_HWM") = Tango::SUB_HWM;
+    consts_scope.attr("SUB_SEND_HWM") = Tango::SUB_SEND_HWM;
+
+    consts_scope.attr("NOTIFD_CHANNEL") = Tango::NOTIFD_CHANNEL;
+
+    //
+    // Locking feature related defines
+    //
+
+    consts_scope.attr("DEFAULT_LOCK_VALIDITY") = Tango::DEFAULT_LOCK_VALIDITY;
+    consts_scope.attr("DEVICE_UNLOCKED_REASON") = Tango::DEVICE_UNLOCKED_REASON;
+    consts_scope.attr("MIN_LOCK_VALIDITY") = Tango::MIN_LOCK_VALIDITY;
+    consts_scope.attr("TG_LOCAL_HOST") = Tango::TG_LOCAL_HOST;
+
+    //
+    // Client timeout as defined by omniORB4.0.0
+    //
+
+    consts_scope.attr("CLNT_TIMEOUT_STR") = Tango::CLNT_TIMEOUT_STR;
+    consts_scope.attr("CLNT_TIMEOUT") = Tango::CLNT_TIMEOUT;
+    consts_scope.attr("NARROW_CLNT_TIMEOUT") = Tango::NARROW_CLNT_TIMEOUT;
+
+    //
+    // Connection and call timeout for database device
+    //
+
+    consts_scope.attr("DB_CONNECT_TIMEOUT") = Tango::DB_CONNECT_TIMEOUT;
+    consts_scope.attr("DB_RECONNECT_TIMEOUT") = Tango::DB_RECONNECT_TIMEOUT;
+    consts_scope.attr("DB_TIMEOUT") = Tango::DB_TIMEOUT;
+    consts_scope.attr("DB_START_PHASE_RETRIES") = Tango::DB_START_PHASE_RETRIES;
+
+    //
+    // Time to wait before trying to reconnect after
+    // a connevtion failure
+    //
+    consts_scope.attr("RECONNECTION_DELAY") = Tango::RECONNECTION_DELAY;
+
+    //
+    // Access Control related defines
+    // WARNING: these string are also used within the Db stored procedure
+    // introduced in Tango V6.1. If you chang eit here, don't forget to
+    // also update the stored procedure
+    //
+
+    consts_scope.attr("CONTROL_SYSTEM") = Tango::CONTROL_SYSTEM;
+    consts_scope.attr("SERVICE_PROP_NAME") = Tango::SERVICE_PROP_NAME;
+    consts_scope.attr("ACCESS_SERVICE") = Tango::ACCESS_SERVICE;
+
+    //
+    // Polling threads pool related defines
+    //
+
+    consts_scope.attr("DEFAULT_POLLING_THREADS_POOL_SIZE") = Tango::DEFAULT_POLLING_THREADS_POOL_SIZE;
+
+    //
+    // Max transfer size 256 MBytes (in byte). Needed by omniORB
+    //
+
+    consts_scope.attr("MAX_TRANSFER_SIZE") = Tango::MAX_TRANSFER_SIZE;
+
+    //
+    // Max GIOP connection per server . Needed by omniORB
+    //
+
+    consts_scope.attr("MAX_GIOP_PER_SERVER") = Tango::MAX_GIOP_PER_SERVER;
+
+    //
+    // Tango name length
+    //
+
+    consts_scope.attr("MaxServerNameLength") = Tango::MaxServerNameLength;
+    consts_scope.attr("MaxDevPropLength") = Tango::MaxDevPropLength;
+
+    //
+    // For forwarded attribute implementation
+    //
+    consts_scope.attr("MIN_IDL_CONF5") = Tango::MIN_IDL_CONF5;
+    consts_scope.attr("MIN_IDL_DEV_INTR") = Tango::MIN_IDL_DEV_INTR;
+    consts_scope.attr("ALL_EVENTS") = Tango::ALL_EVENTS;
+
+    // --------------------------------------------------------
+
+    //
+    // Files used to retrieve env. variables
+    //
+
+    consts_scope.attr("USER_ENV_VAR_FILE") = Tango::USER_ENV_VAR_FILE;
+
+    consts_scope.attr("kLogTargetConsole") = Tango::kLogTargetConsole;
+    consts_scope.attr("kLogTargetFile") = Tango::kLogTargetFile;
+    consts_scope.attr("kLogTargetDevice") = Tango::kLogTargetDevice;
+    consts_scope.attr("kLogTargetSep") = Tango::kLogTargetSep;
+
+    consts_scope.attr("AlrmValueNotSpec") = Tango::AlrmValueNotSpec;
+    consts_scope.attr("AssocWritNotSpec") = Tango::AssocWritNotSpec;
+    consts_scope.attr("LabelNotSpec") = Tango::LabelNotSpec;
+    consts_scope.attr("DescNotSpec") = Tango::DescNotSpec;
+    consts_scope.attr("UnitNotSpec") = Tango::UnitNotSpec;
+    consts_scope.attr("StdUnitNotSpec") = Tango::StdUnitNotSpec;
+    consts_scope.attr("DispUnitNotSpec") = Tango::DispUnitNotSpec;
+#ifdef FormatNotSpec
+    consts_scope.attr("FormatNotSpec") = Tango::FormatNotSpec;
+#else
+    consts_scope.attr("FormatNotSpec") = Tango::FormatNotSpec_FL;
+#endif
+    consts_scope.attr("FormatNotSpec_FL") = Tango::FormatNotSpec_FL;
+    consts_scope.attr("FormatNotSpec_INT") = Tango::FormatNotSpec_INT;
+    consts_scope.attr("FormatNotSpec_STR") = Tango::FormatNotSpec_STR;
+
+    consts_scope.attr("NotANumber") = Tango::NotANumber;
+    consts_scope.attr("MemNotUsed") = Tango::MemNotUsed;
+    consts_scope.attr("MemAttrPropName") = Tango::MemAttrPropName;
+
+#ifdef TANGO_LONG64
+    consts_scope.attr("TANGO_LONG32") = false;
+    consts_scope.attr("TANGO_LONG64") = true;
+#else
+    consts_scope.attr("TANGO_LONG32") = true;
+    consts_scope.attr("TANGO_LONG64") = false;
+#endif
+
+    consts_scope.attr("API_AttrConfig") = Tango::API_AttrConfig;
+    consts_scope.attr("API_AttrEventProp") = Tango::API_AttrEventProp;
+    consts_scope.attr("API_AttrIncorrectDataNumber") = Tango::API_AttrIncorrectDataNumber;
+    consts_scope.attr("API_AttrNoAlarm") = Tango::API_AttrNoAlarm;
+    consts_scope.attr("API_AttrNotAllowed") = Tango::API_AttrNotAllowed;
+    consts_scope.attr("API_AttrNotFound") = Tango::API_AttrNotFound;
+    consts_scope.attr("API_AttrNotWritable") = Tango::API_AttrNotWritable;
+    consts_scope.attr("API_AttrOptProp") = Tango::API_AttrOptProp;
+    consts_scope.attr("API_AttrPropValueNotSet") = Tango::API_AttrPropValueNotSet;
+    consts_scope.attr("API_AttrValueNotSet") = Tango::API_AttrValueNotSet;
+    consts_scope.attr("API_AttrWrongDefined") = Tango::API_AttrWrongDefined;
+    consts_scope.attr("API_AttrWrongMemValue") = Tango::API_AttrWrongMemValue;
+    consts_scope.attr("API_BadConfigurationProperty") = Tango::API_BadConfigurationProperty;
+    consts_scope.attr("API_BlackBoxArgument") = Tango::API_BlackBoxArgument;
+    consts_scope.attr("API_BlackBoxEmpty") = Tango::API_BlackBoxEmpty;
+    consts_scope.attr("API_CannotCheckAccessControl") = Tango::API_CannotCheckAccessControl;
+    consts_scope.attr("API_CannotOpenFile") = Tango::API_CannotOpenFile;
+    consts_scope.attr("API_CantActivatePOAManager") = Tango::API_CantActivatePOAManager;
+    consts_scope.attr("API_CantCreateClassPoa") = Tango::API_CantCreateClassPoa;
+    consts_scope.attr("API_CantCreateLockingThread") = Tango::API_CantCreateLockingThread;
+    consts_scope.attr("API_CantFindLockingThread") = Tango::API_CantFindLockingThread;
+    consts_scope.attr("API_CantGetClientIdent") = Tango::API_CantGetClientIdent;
+    consts_scope.attr("API_CantGetDevObjectId") = Tango::API_CantGetDevObjectId;
+    consts_scope.attr("API_CantInstallSignal") = Tango::API_CantInstallSignal;
+    consts_scope.attr("API_CantRetrieveClass") = Tango::API_CantRetrieveClass;
+    consts_scope.attr("API_CantRetrieveClassList") = Tango::API_CantRetrieveClassList;
+    consts_scope.attr("API_CantStoreDeviceClass") = Tango::API_CantStoreDeviceClass;
+    consts_scope.attr("API_ClassNotFound") = Tango::API_ClassNotFound;
+    consts_scope.attr("API_CmdArgumentTypeNotSupported") = Tango::API_CmdArgumentTypeNotSupported;
+    consts_scope.attr("API_CommandNotAllowed") = Tango::API_CommandNotAllowed;
+    consts_scope.attr("API_CommandNotFound") = Tango::API_CommandNotFound;
+    consts_scope.attr("API_CorbaSysException") = Tango::API_CorbaSysException;
+    consts_scope.attr("API_CorruptedDatabase") = Tango::API_CorruptedDatabase;
+    consts_scope.attr("API_DatabaseAccess") = Tango::API_DatabaseAccess;
+    consts_scope.attr("API_DeviceLocked") = Tango::API_DeviceLocked;
+    consts_scope.attr("API_DeviceNotFound") = Tango::API_DeviceNotFound;
+    consts_scope.attr("API_DeviceNotLocked") = Tango::API_DeviceNotLocked;
+    consts_scope.attr("API_DeviceUnlockable") = Tango::API_DeviceUnlockable;
+    consts_scope.attr("API_DeviceUnlocked") = Tango::API_DeviceUnlocked;
+    consts_scope.attr("API_EventSupplierNotConstructed") = Tango::API_EventSupplierNotConstructed;
+    consts_scope.attr("API_IncoherentDbData") = Tango::API_IncoherentDbData;
+    consts_scope.attr("API_IncoherentDevData") = Tango::API_IncoherentDevData;
+    consts_scope.attr("API_IncoherentValues") = Tango::API_IncoherentValues;
+    consts_scope.attr("API_IncompatibleAttrDataType") = Tango::API_IncompatibleAttrDataType;
+    consts_scope.attr("API_IncompatibleCmdArgumentType") = Tango::API_IncompatibleCmdArgumentType;
+    consts_scope.attr("API_InitMethodNotFound") = Tango::API_InitMethodNotFound;
+    consts_scope.attr("API_InitNotPublic") = Tango::API_InitNotPublic;
+    consts_scope.attr("API_InitThrowsException") = Tango::API_InitThrowsException;
+    consts_scope.attr("API_JavaRuntimeSecurityException") = Tango::API_JavaRuntimeSecurityException;
+    consts_scope.attr("API_MemoryAllocation") = Tango::API_MemoryAllocation;
+    consts_scope.attr("API_MethodArgument") = Tango::API_MethodArgument;
+    consts_scope.attr("API_MethodNotFound") = Tango::API_MethodNotFound;
+    consts_scope.attr("API_MissedEvents") = Tango::API_MissedEvents;
+    consts_scope.attr("API_NotSupportedFeature") = Tango::API_NotSupportedFeature;
+    consts_scope.attr("API_NtDebugWindowError") = Tango::API_NtDebugWindowError;
+    consts_scope.attr("API_OverloadingNotSupported") = Tango::API_OverloadingNotSupported;
+    consts_scope.attr("API_PolledDeviceNotInPoolConf") = Tango::API_PolledDeviceNotInPoolConf;
+    consts_scope.attr("API_PolledDeviceNotInPoolMap") = Tango::API_PolledDeviceNotInPoolMap;
+    consts_scope.attr("API_PollingThreadNotFound") = Tango::API_PollingThreadNotFound;
+    consts_scope.attr("API_ReadOnlyMode") = Tango::API_ReadOnlyMode;
+    consts_scope.attr("API_SignalOutOfRange") = Tango::API_SignalOutOfRange;
+    consts_scope.attr("API_SystemCallFailed") = Tango::API_SystemCallFailed;
+    consts_scope.attr("API_WAttrOutsideLimit") = Tango::API_WAttrOutsideLimit;
+    consts_scope.attr("API_WizardConfError") = Tango::API_WizardConfError;
+    consts_scope.attr("API_WrongEventData") = Tango::API_WrongEventData;
+    consts_scope.attr("API_WrongHistoryDataBuffer") = Tango::API_WrongHistoryDataBuffer;
+    consts_scope.attr("API_WrongLockingStatus") = Tango::API_WrongLockingStatus;
+    consts_scope.attr("API_ZmqInitFailed") = Tango::API_ZmqInitFailed;
+
+}
diff --git a/src/boost/cpp/data_ready_event_data.cpp b/ext/data_ready_event_data.cpp
similarity index 97%
rename from src/boost/cpp/data_ready_event_data.cpp
rename to ext/data_ready_event_data.cpp
index 6000598..2ec5d75 100644
--- a/src/boost/cpp/data_ready_event_data.cpp
+++ b/ext/data_ready_event_data.cpp
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
diff --git a/src/boost/cpp/database.cpp b/ext/database.cpp
similarity index 99%
rename from src/boost/cpp/database.cpp
rename to ext/database.cpp
index 88ab1c9..f9eba24 100644
--- a/src/boost/cpp/database.cpp
+++ b/ext/database.cpp
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
diff --git a/src/boost/cpp/db.cpp b/ext/db.cpp
similarity index 98%
rename from src/boost/cpp/db.cpp
rename to ext/db.cpp
index 5dc2adc..dde5233 100644
--- a/src/boost/cpp/db.cpp
+++ b/ext/db.cpp
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
diff --git a/src/boost/cpp/defs.h b/ext/defs.h
similarity index 93%
rename from src/boost/cpp/defs.h
rename to ext/defs.h
index 8dfa3a9..0afea6d 100644
--- a/src/boost/cpp/defs.h
+++ b/ext/defs.h
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
@@ -56,6 +56,7 @@ namespace PyTango
     enum GreenMode {
         GreenModeSynchronous,
         GreenModeFutures,
-        GreenModeGevent
+        GreenModeGevent,
+        GreenModeAsyncio
     };
 }
diff --git a/src/boost/cpp/dev_command_info.cpp b/ext/dev_command_info.cpp
similarity index 95%
rename from src/boost/cpp/dev_command_info.cpp
rename to ext/dev_command_info.cpp
index c9c6b7e..bc95765 100644
--- a/src/boost/cpp/dev_command_info.cpp
+++ b/ext/dev_command_info.cpp
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
diff --git a/src/boost/cpp/dev_error.cpp b/ext/dev_error.cpp
similarity index 97%
rename from src/boost/cpp/dev_error.cpp
rename to ext/dev_error.cpp
index 0968315..141b080 100644
--- a/src/boost/cpp/dev_error.cpp
+++ b/ext/dev_error.cpp
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
diff --git a/src/boost/cpp/device_attribute.cpp b/ext/device_attribute.cpp
similarity index 96%
rename from src/boost/cpp/device_attribute.cpp
rename to ext/device_attribute.cpp
index 01d6390..7912603 100644
--- a/src/boost/cpp/device_attribute.cpp
+++ b/ext/device_attribute.cpp
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
@@ -195,6 +195,14 @@ namespace PyDeviceAttribute
         }
     }
 
+    template<> inline void
+    _update_value_as_bin<Tango::DEV_PIPE_BLOB>(Tango::DeviceAttribute &self,
+					       bopy::object py_value,
+					       bool read_only)
+    {
+	assert(false);
+    }
+
     template<long tangoTypeConst> static inline void
     _update_value_as_string(Tango::DeviceAttribute &self,
                             bopy::object py_value)
@@ -271,6 +279,13 @@ namespace PyDeviceAttribute
         }
     }
 
+    template<> inline void
+    _update_value_as_string<Tango::DEV_PIPE_BLOB>(Tango::DeviceAttribute &self,
+						  bopy::object py_value)
+    {
+	assert(false);
+    }
+
     template<long tangoTypeConst> static inline void
     _update_scalar_values(Tango::DeviceAttribute &self, bopy::object py_value)
     {
@@ -325,6 +340,13 @@ namespace PyDeviceAttribute
         }
     }
 
+    template<> inline void 
+    _update_scalar_values<Tango::DEV_PIPE_BLOB>(Tango::DeviceAttribute &self,
+						bopy::object py_value)
+    {
+	assert(false);
+    }
+
     template<long tangoTypeConst> static inline void
     _update_array_values_as_lists(Tango::DeviceAttribute &self, bool isImage,
                                   bopy::object py_value)
@@ -388,6 +410,14 @@ namespace PyDeviceAttribute
         }
     }
 
+    template<> inline void
+    _update_array_values_as_lists<Tango::DEV_PIPE_BLOB>(Tango::DeviceAttribute &self,
+							bool isImage,
+							bopy::object py_value)
+    {
+	assert(false);
+    }
+
     template<long tangoTypeConst> static void
     _update_array_values_as_tuples(Tango::DeviceAttribute &self, bool isImage,
                                    bopy::object py_value)
@@ -472,6 +502,14 @@ namespace PyDeviceAttribute
         }
     }
 
+    template<> inline void
+    _update_array_values_as_tuples<Tango::DEV_PIPE_BLOB>(Tango::DeviceAttribute &self,
+                                                         bool isImage,
+                                                         bopy::object py_value)
+    {
+	assert(false);
+    }
+
     void
     update_values(Tango::DeviceAttribute &self, bopy::object& py_value,
                   PyTango::ExtractAs extract_as/*=ExtractAsNumpy*/)
diff --git a/src/boost/cpp/device_attribute.h b/ext/device_attribute.h
similarity index 99%
rename from src/boost/cpp/device_attribute.h
rename to ext/device_attribute.h
index 2bf3952..b3060ed 100644
--- a/src/boost/cpp/device_attribute.h
+++ b/ext/device_attribute.h
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
diff --git a/src/boost/cpp/device_attribute_config.cpp b/ext/device_attribute_config.cpp
similarity index 97%
rename from src/boost/cpp/device_attribute_config.cpp
rename to ext/device_attribute_config.cpp
index f7d7d0d..9c4a504 100644
--- a/src/boost/cpp/device_attribute_config.cpp
+++ b/ext/device_attribute_config.cpp
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
diff --git a/src/boost/cpp/device_attribute_history.cpp b/ext/device_attribute_history.cpp
similarity index 93%
rename from src/boost/cpp/device_attribute_history.cpp
rename to ext/device_attribute_history.cpp
index 16c01bb..c84cef9 100644
--- a/src/boost/cpp/device_attribute_history.cpp
+++ b/ext/device_attribute_history.cpp
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
diff --git a/src/boost/cpp/device_attribute_numpy.hpp b/ext/device_attribute_numpy.hpp
similarity index 98%
rename from src/boost/cpp/device_attribute_numpy.hpp
rename to ext/device_attribute_numpy.hpp
index 6ccd9e3..7e4a4ff 100644
--- a/src/boost/cpp/device_attribute_numpy.hpp
+++ b/ext/device_attribute_numpy.hpp
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
@@ -40,6 +40,12 @@ namespace PyDeviceAttribute {
             delete static_cast<TANGO_const2arraytype(tangoTypeConst)*>(ptr_);
         );
     }
+    template<> inline void 
+    _dev_var_x_array_deleter<Tango::DEV_PIPE_BLOB>(PyObject* obj)
+    {
+	// Unsupported
+        assert(false);
+    }
 #endif
 
     template<long tangoTypeConst>
diff --git a/src/boost/cpp/device_data.cpp b/ext/device_data.cpp
similarity index 92%
rename from src/boost/cpp/device_data.cpp
rename to ext/device_data.cpp
index cad32f1..cf78d89 100644
--- a/src/boost/cpp/device_data.cpp
+++ b/ext/device_data.cpp
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
@@ -71,11 +71,19 @@ namespace PyDeviceData {
             val.encoded_data = arr;
             self << val;
         }
+
         template <>
         void insert_scalar<Tango::DEV_VOID>(Tango::DeviceData &self, object py_value)
         {
             raise_(PyExc_TypeError, "Trying to insert a value in a DEV_VOID DeviceData!");
         }
+
+        template <>
+        void insert_scalar<Tango::DEV_PIPE_BLOB>(Tango::DeviceData &self, object py_value)
+        {
+            assert(false);
+        }
+
     /// @}
     // ~Scalar Insertion
     // -----------------------------------------------------------------------
@@ -127,6 +135,14 @@ namespace PyDeviceData {
             self >> val;
             return boost::python::object(val);
         }
+
+        template <>
+        object extract_scalar<Tango::DEV_PIPE_BLOB>(Tango::DeviceData &self)
+        {
+            assert(false);
+	    return bopy::object();
+        }
+
     /// @}
     // ~Scalar Extraction
     // -----------------------------------------------------------------------
@@ -162,6 +178,13 @@ namespace PyDeviceData {
                     return object();
             }
         }
+
+        template <>
+        object extract_array<Tango::DEVVAR_STATEARRAY>(Tango::DeviceData &self, object &py_self, PyTango::ExtractAs extract_as)
+        {
+            assert(False);
+            return object();
+        }
     /// @}
     // ~Array Extraction
     // -----------------------------------------------------------------------
diff --git a/src/boost/cpp/device_data_history.cpp b/ext/device_data_history.cpp
similarity index 94%
rename from src/boost/cpp/device_data_history.cpp
rename to ext/device_data_history.cpp
index cf37f29..780b327 100644
--- a/src/boost/cpp/device_data_history.cpp
+++ b/ext/device_data_history.cpp
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
diff --git a/src/boost/cpp/device_info.cpp b/ext/device_info.cpp
similarity index 94%
rename from src/boost/cpp/device_info.cpp
rename to ext/device_info.cpp
index d2fd32f..7b2dc88 100644
--- a/src/boost/cpp/device_info.cpp
+++ b/ext/device_info.cpp
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
diff --git a/ext/device_pipe.cpp b/ext/device_pipe.cpp
new file mode 100644
index 0000000..1042ac9
--- /dev/null
+++ b/ext/device_pipe.cpp
@@ -0,0 +1,415 @@
+/******************************************************************************
+  This file is part of PyTango (http://pytango.rtfd.io)
+
+  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_pipe.h"
+#include "tgutils.h"
+#include "pytgutils.h"
+#include "tango_numpy.h"
+#include "fast_from_py.h"
+
+#ifndef DISABLE_PYTANGO_NUMPY
+#   include "to_py_numpy.hpp"
+#endif
+
+namespace PyTango 
+{ 
+    namespace DevicePipe 
+    {
+        bopy::object extract(Tango::DevicePipeBlob&, PyTango::ExtractAs);
+
+        template<long tangoTypeConst>
+        bopy::object
+        __update_scalar_values(Tango::DevicePipe& self, size_t elt_idx)
+        {
+            typedef typename TANGO_const2type(tangoTypeConst) TangoScalarType;
+            TangoScalarType val;
+            bopy::str name(self.get_data_elt_name(elt_idx));
+            self >> val;
+            bopy::object data(val);
+            return bopy::make_tuple(name, data);
+        }
+
+        template<>
+        bopy::object
+        __update_scalar_values<Tango::DEV_VOID>(Tango::DevicePipe& self,
+                                          size_t elt_idx)
+        {
+            bopy::str name(self.get_data_elt_name(elt_idx));
+            return bopy::make_tuple(name, bopy::object());
+        }
+
+        template<>
+        bopy::object
+        __update_scalar_values<Tango::DEV_STRING>(Tango::DevicePipe& self,
+                                            size_t elt_idx)
+        {
+            typedef std::string TangoScalarType;
+            TangoScalarType val;
+            bopy::str name(self.get_data_elt_name(elt_idx));
+            self >> val;
+            bopy::object data(val);
+            return bopy::make_tuple(name, data);
+        }        
+
+        template<>
+        bopy::object
+        __update_scalar_values<Tango::DEV_PIPE_BLOB>(Tango::DevicePipe& self,
+                                               size_t elt_idx)
+        {
+            Tango::DevicePipeBlob val;
+            bopy::str name(self.get_data_elt_name(elt_idx));
+            self >> val;
+            bopy::object data(val);
+            return bopy::make_tuple(name, data);
+        }        
+
+        template <long tangoArrayTypeConst>
+        bopy::object
+        __update_array_values(Tango::DevicePipe &self, bopy::object &py_self,
+                        size_t elt_idx, PyTango::ExtractAs extract_as)
+        {
+            typedef typename TANGO_const2type(tangoArrayTypeConst) TangoArrayType;
+
+            TangoArrayType tmp_arr;
+            self >> (&tmp_arr);
+            bopy::object data;
+            switch (extract_as)
+            {
+                default:
+                case PyTango::ExtractAsNumpy:
+#                 ifndef DISABLE_PYTANGO_NUMPY
+                    data = to_py_numpy<tangoArrayTypeConst>(&tmp_arr, py_self);
+                    tmp_arr.get_buffer(1);
+                    break;
+#                 endif
+                case PyTango::ExtractAsList:
+                case PyTango::ExtractAsPyTango3:
+                    data = to_py_list(&tmp_arr);
+                    break;
+                case PyTango::ExtractAsTuple:
+                    data = to_py_tuple(&tmp_arr);
+                    break;
+                case PyTango::ExtractAsString: /// @todo
+                case PyTango::ExtractAsNothing:
+                    data = bopy::object();
+                    break;
+            }
+
+            bopy::str name(self.get_data_elt_name(elt_idx));
+            return bopy::make_tuple(name, data);
+        }
+
+        template <>
+        bopy::object
+        __update_array_values<Tango::DEVVAR_LONGSTRINGARRAY>(Tango::DevicePipe &self,
+                                                       bopy::object &py_self,
+                                                       size_t elt_idx, 
+                                                       PyTango::ExtractAs extract_as)
+        {
+            assert(false);
+            return bopy::object();
+        }
+
+        template <>
+        bopy::object
+        __update_array_values<Tango::DEVVAR_DOUBLESTRINGARRAY>(Tango::DevicePipe &self,
+                                                         bopy::object &py_self,
+                                                         size_t elt_idx, 
+                                                         PyTango::ExtractAs extract_as)
+        {
+            assert(false);
+            return bopy::object();
+        }
+
+        bopy::object
+        update_value(Tango::DevicePipe &self, bopy::object& py_self,
+                  size_t elt_idx, PyTango::ExtractAs extract_as)
+        {
+            const int elt_type = self.get_data_elt_type(elt_idx);
+
+            TANGO_DO_ON_DEVICE_DATA_TYPE_ID(elt_type,
+                return __update_scalar_values<tangoTypeConst>(self, elt_idx);
+            ,
+                return __update_array_values<tangoTypeConst>(self, py_self, elt_idx, extract_as);
+            );
+            return bopy::object();
+        }
+        
+        void
+        update_values(Tango::DevicePipe& self, bopy::object& py_self,
+                      PyTango::ExtractAs extract_as /*=PyTango::ExtractAsNumpy*/)
+        {
+            // We do not want is_empty to launch an exception!!
+            //self.reset_exceptions(Tango::DevicePipe::isempty_flag);
+
+            //py_self.attr("name") = self.get_name();
+            bopy::list data;
+            py_self.attr("data") = data;
+
+            size_t elt_nb = self.get_data_elt_nb();
+            for(size_t elt_idx = 0; elt_idx < elt_nb; ++elt_idx)
+            {
+                data.append(update_value(self, py_self, elt_idx, extract_as));
+            }
+        }
+
+      ///////////////////////////////////////////////////////////////////////////////////////////
+      
+        template<typename T, long tangoTypeConst>
+        bopy::object
+        __extract_scalar(T& obj, size_t elt_idx)
+	{
+            typedef typename TANGO_const2type(tangoTypeConst) TangoScalarType;
+	    TangoScalarType val;
+	    obj >> val;
+	    return bopy::object(val);
+	}
+
+        template<>
+        bopy::object
+        __extract_scalar<Tango::DevicePipe, Tango::DEV_VOID>(Tango::DevicePipe& obj, size_t elt_idx)
+	{
+            return bopy::object();
+	}
+
+        template<>
+        bopy::object
+        __extract_scalar<Tango::DevicePipe, Tango::DEV_STRING>(Tango::DevicePipe& obj, size_t elt_idx)
+	{
+            std::string val;
+	    obj >> val;
+	    return bopy::object(val);
+	}
+
+        template<>
+        bopy::object
+        __extract_scalar<Tango::DevicePipe, Tango::DEV_PIPE_BLOB>(Tango::DevicePipe& obj, size_t elt_idx)
+	{
+	    Tango::DevicePipeBlob val;
+	    obj >> val;
+	    // TODO: propagate extract_as
+	    return extract(val, PyTango::ExtractAsNumpy);
+	}
+
+        template<>
+        bopy::object
+        __extract_scalar<Tango::DevicePipeBlob, Tango::DEV_VOID>(Tango::DevicePipeBlob& obj, size_t elt_idx)
+	{
+            return bopy::object();
+	}
+
+        template<>
+        bopy::object
+        __extract_scalar<Tango::DevicePipeBlob, Tango::DEV_STRING>(Tango::DevicePipeBlob& obj, size_t elt_idx)
+	{
+            std::string val;
+	    obj >> val;
+	    return bopy::object(val);
+	}
+
+        template<>
+        bopy::object
+        __extract_scalar<Tango::DevicePipeBlob, Tango::DEV_PIPE_BLOB>(Tango::DevicePipeBlob& obj, size_t elt_idx)
+	{
+	    Tango::DevicePipeBlob val;
+	    obj >> val;
+	    // TODO: propagate extract_as
+	    return extract(val, PyTango::ExtractAsNumpy);
+	}
+      
+        template<long tangoTypeConst>
+        bopy::object
+        extract_scalar(Tango::DevicePipe& self, size_t elt_idx)
+        {
+ 	    return __extract_scalar<Tango::DevicePipe, tangoTypeConst>(self, elt_idx);
+        }
+
+        template<long tangoTypeConst>
+        bopy::object
+        extract_scalar(Tango::DevicePipeBlob& self, size_t elt_idx)
+        {
+ 	    return __extract_scalar<Tango::DevicePipeBlob, tangoTypeConst>(self, elt_idx);
+        }
+
+        template <typename T, long tangoArrayTypeConst>
+        bopy::object
+        __extract_array(T& obj, size_t elt_idx, PyTango::ExtractAs extract_as)
+        {
+            typedef typename TANGO_const2type(tangoArrayTypeConst) TangoArrayType;
+
+            TangoArrayType tmp_arr;
+            obj >> (&tmp_arr);
+            bopy::object data;
+            switch (extract_as)
+            {
+                default:
+                case PyTango::ExtractAsNumpy:
+
+#                 ifndef DISABLE_PYTANGO_NUMPY
+                    data = to_py_numpy<tangoArrayTypeConst>(&tmp_arr, 1);
+                    break;
+#                 endif
+
+                case PyTango::ExtractAsList:
+                case PyTango::ExtractAsPyTango3:
+                    data = to_py_list(&tmp_arr);
+                    break;
+                case PyTango::ExtractAsTuple:
+                    data = to_py_tuple(&tmp_arr);
+                    break;
+                case PyTango::ExtractAsString: /// @todo
+                case PyTango::ExtractAsNothing:
+                    data = bopy::object();
+                    break;
+            }
+            return data;
+        }
+
+        template <>
+        bopy::object
+        __extract_array<Tango::DevicePipe, Tango::DEVVAR_LONGSTRINGARRAY>
+	(Tango::DevicePipe& pipe, size_t elt_idx, PyTango::ExtractAs extract_as)
+        {
+            assert(false);
+            return bopy::object();
+        }
+
+        template <>
+        bopy::object
+        __extract_array<Tango::DevicePipe, Tango::DEVVAR_DOUBLESTRINGARRAY>
+	(Tango::DevicePipe& pipe, size_t elt_idx, PyTango::ExtractAs extract_as)
+        {
+            assert(false);
+            return bopy::object();
+        }
+
+        template <>
+        bopy::object
+        __extract_array<Tango::DevicePipeBlob, Tango::DEVVAR_LONGSTRINGARRAY>
+	(Tango::DevicePipeBlob& blob, size_t elt_idx, PyTango::ExtractAs extract_as)
+        {
+            assert(false);
+            return bopy::object();
+        }
+
+        template <>
+        bopy::object
+        __extract_array<Tango::DevicePipeBlob, Tango::DEVVAR_DOUBLESTRINGARRAY>
+	(Tango::DevicePipeBlob& blob, size_t elt_idx, PyTango::ExtractAs extract_as)
+        {
+            assert(false);
+            return bopy::object();
+        }
+
+        template <long tangoArrayTypeConst>
+        bopy::object
+        extract_array(Tango::DevicePipe& self, size_t elt_idx,
+		      PyTango::ExtractAs extract_as)
+        {
+	  return __extract_array<Tango::DevicePipe, tangoArrayTypeConst>(self, elt_idx,
+									 extract_as);
+	}
+
+        template <long tangoArrayTypeConst>
+        bopy::object
+        extract_array(Tango::DevicePipeBlob& self, size_t elt_idx,
+		      PyTango::ExtractAs extract_as)
+        {
+	  return __extract_array<Tango::DevicePipeBlob, tangoArrayTypeConst>(self, elt_idx,
+									     extract_as);
+	}
+      
+        template<typename T>
+        bopy::object
+        __extract_item(T& obj, size_t elt_idx, PyTango::ExtractAs extract_as)
+        {
+	    const int elt_type = obj.get_data_elt_type(elt_idx);
+            TANGO_DO_ON_DEVICE_DATA_TYPE_ID(elt_type,
+                return extract_scalar<tangoTypeConst>(obj, elt_idx);
+            ,
+                return extract_array<tangoTypeConst>(obj, elt_idx, extract_as);
+            );
+            return bopy::object();     
+	}
+
+        template<typename T>
+        bopy::object
+        __extract(T& obj, PyTango::ExtractAs extract_as)
+        {
+            bopy::list data;
+            size_t elt_nb = obj.get_data_elt_nb();
+            for(size_t elt_idx = 0; elt_idx < elt_nb; ++elt_idx)
+            {
+	        bopy::dict elem;
+		elem["name"] = obj.get_data_elt_name(elt_idx);
+		elem["dtype"] = static_cast<Tango::CmdArgType>(obj.get_data_elt_type(elt_idx));
+		elem["value"] = __extract_item(obj, elt_idx, extract_as);
+	        data.append(elem);
+            }
+	    return data;
+        }      
+
+        bopy::object
+	extract(Tango::DevicePipeBlob& blob, 
+		PyTango::ExtractAs extract_as=PyTango::ExtractAsNumpy)
+	{
+	    bopy::object name = bopy::str(blob.get_name());
+	    bopy::object value = __extract<Tango::DevicePipeBlob>(blob, extract_as);
+	    return bopy::make_tuple(name, value);
+	}
+
+        bopy::object
+	extract(Tango::DevicePipe& device_pipe, 
+		PyTango::ExtractAs extract_as=PyTango::ExtractAsNumpy)
+	{
+	    bopy::object name = bopy::str(device_pipe.get_root_blob_name());
+	    bopy::object value = __extract<Tango::DevicePipe>(device_pipe, extract_as);
+	    return bopy::make_tuple(name, value);
+	}
+    }
+}
+
+void export_device_pipe()
+{
+    bopy::class_<Tango::DevicePipe> DevicePipe("DevicePipe");
+
+    bopy::scope dp_scope = DevicePipe;
+
+    DevicePipe
+        .def(bopy::init<>())
+        .def(bopy::init<const std::string &>())
+        .def(bopy::init<const std::string &, const std::string &>())
+        .def(bopy::init<const Tango::DevicePipe &>())
+        .add_property("name", 
+                      bopy::make_function(&Tango::DevicePipe::get_name,
+                                          bopy::return_value_policy
+                                          <bopy::copy_const_reference>()),
+                      &Tango::DevicePipe::set_name)
+        .add_property("root_blob_name",
+                      bopy::make_function(&Tango::DevicePipe::get_root_blob_name,
+                                          bopy::return_value_policy
+                                          <bopy::copy_const_reference>()),
+                      &Tango::DevicePipe::set_root_blob_name)
+        .add_property("data_elt_nb",
+                      &Tango::DevicePipe::get_data_elt_nb, 
+                      &Tango::DevicePipe::set_data_elt_nb)        
+        .add_property("data_elt_names",
+                      &Tango::DevicePipe::get_data_elt_names, 
+                      &Tango::DevicePipe::set_data_elt_names)        
+        .def("get_data_elt_name", &Tango::DevicePipe::get_data_elt_name)
+        .def("get_data_elt_type", &Tango::DevicePipe::get_data_elt_type)
+
+        .def("extract", 
+	     (bopy::object (*) (Tango::DevicePipe &, PyTango::ExtractAs))
+	     PyTango::DevicePipe::extract)
+    ;
+}
diff --git a/ext/device_pipe.h b/ext/device_pipe.h
new file mode 100644
index 0000000..a46644e
--- /dev/null
+++ b/ext/device_pipe.h
@@ -0,0 +1,51 @@
+/******************************************************************************
+  This file is part of PyTango (http://pytango.rtfd.io)
+
+  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
+
+#include <boost/python.hpp>
+#include <tango.h>
+
+#include "defs.h"
+#include "pyutils.h"
+
+namespace PyTango
+{ 
+    namespace DevicePipe 
+    {
+        void
+        update_values(Tango::DevicePipe& self, bopy::object& py_value,
+                      PyTango::ExtractAs extract_as=PyTango::ExtractAsNumpy);
+
+        template<typename TDevicePipe>
+        bopy::object
+        convert_to_python(TDevicePipe* self, PyTango::ExtractAs extract_as)
+        {
+            bopy::object py_value;
+            try 
+            {
+                py_value = bopy::object(
+                               bopy::handle<>(
+                                   bopy::to_python_indirect<
+                                       TDevicePipe*, 
+                                       bopy::detail::make_owning_holder>() (self)));
+            } 
+            catch (...)
+            {
+                delete self;
+                throw;
+            }
+
+            update_values(*self, py_value, extract_as);
+            return py_value;            
+        }
+    } 
+}
diff --git a/src/boost/cpp/device_proxy.cpp b/ext/device_proxy.cpp
similarity index 87%
rename from src/boost/cpp/device_proxy.cpp
rename to ext/device_proxy.cpp
index 08c5f03..1076997 100644
--- a/src/boost/cpp/device_proxy.cpp
+++ b/ext/device_proxy.cpp
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
@@ -11,6 +11,7 @@
 
 #include "precompiled_header.hpp"
 #include "device_attribute.h"
+#include "device_pipe.h"
 #include "callback.h"
 #include "defs.h"
 #include "pytgutils.h"
@@ -33,7 +34,7 @@ namespace PyDeviceProxy
             return bopy::make_tuple(ret);
         }
     };
-    
+
     static inline Tango::DevState state(Tango::DeviceProxy& self)
     {
         AutoPythonAllowThreads guard;
@@ -81,7 +82,14 @@ namespace PyDeviceProxy
         }
     }
 
-    static inline bopy::object read_attribute(Tango::DeviceProxy& self, const string & attr_name, PyTango::ExtractAs extract_as)
+    Tango::DevicePipe
+    read_pipe(Tango::DeviceProxy& self, const std::string & pipe_name)
+    {
+        AutoPythonAllowThreads guard;
+	return self.read_pipe(pipe_name);
+    }
+
+    static bopy::object read_attribute(Tango::DeviceProxy& self, const std::string & attr_name, PyTango::ExtractAs extract_as)
     {
         // Even if there's an exception in convert_to_python, the
         // DeviceAttribute will be deleted there, so we don't need to worry.
@@ -145,14 +153,41 @@ namespace PyDeviceProxy
         // Do the actual write_read_attribute thing...
         {
             AutoPythonAllowThreads guard;
-            r_dev_attr.reset(new Tango::DeviceAttribute(self.write_read_attribute(w_dev_attr)));
+            Tango::DeviceAttribute da = self.write_read_attribute(w_dev_attr);
+            r_dev_attr.reset(new Tango::DeviceAttribute(da));
         }
 
         // Convert the result back to python
         return PyDeviceAttribute::convert_to_python(r_dev_attr.release(), self, extract_as);
     }
 
-    static inline bopy::object
+    static bopy::object
+    write_read_attributes(Tango::DeviceProxy& self,
+                          bopy::object py_name_val_list,
+                          bopy::object py_attr_names,
+                          PyTango::ExtractAs extract_as)
+    {
+        // Convert write
+        std::vector<Tango::DeviceAttribute> dev_attrs;
+        pylist_to_devattrs(self, py_name_val_list, dev_attrs);
+
+        // Convert read
+        CSequenceFromPython<StdStringVector> attr_names(py_attr_names);
+        PyDeviceAttribute::AutoDevAttrVector dev_attr_vec;
+
+        // Do the actual write_read_attributes thing...
+        {
+            AutoPythonAllowThreads guard;
+            dev_attr_vec.reset(self.write_read_attributes(dev_attrs,
+                                                          *attr_names));
+        }
+
+        // Convert the result back to python
+        return PyDeviceAttribute::convert_to_python(dev_attr_vec, self,
+                                                    extract_as);
+    }
+
+    static bopy::object
     command_history(Tango::DeviceProxy& self, const std::string& cmd_name, int depth)
     {
         std::vector<Tango::DeviceDataHistory>* device_data_hist = NULL;
@@ -375,12 +410,22 @@ namespace PyDeviceProxy
 
     static boost::shared_ptr<Tango::DeviceProxy> makeDeviceProxy1(const std::string& name)
     {
-        return boost::shared_ptr<Tango::DeviceProxy>(new Tango::DeviceProxy(name.c_str()));
+	Tango::DeviceProxy* dp = NULL;
+	{
+	    AutoPythonAllowThreads guard;
+	    dp = new Tango::DeviceProxy(name.c_str());
+	}
+        return boost::shared_ptr<Tango::DeviceProxy>(dp);
     }
 
     static boost::shared_ptr<Tango::DeviceProxy> makeDeviceProxy2(const std::string& name, bool b)
     {
-      return boost::shared_ptr<Tango::DeviceProxy>(new Tango::DeviceProxy(name.c_str(), b));
+	Tango::DeviceProxy* dp = NULL;
+	{
+	    AutoPythonAllowThreads guard;
+	    dp = new Tango::DeviceProxy(name.c_str(), b);
+	}
+	return boost::shared_ptr<Tango::DeviceProxy>(dp);
     }
 };
 
@@ -416,7 +461,7 @@ void export_device_proxy()
         // general methods
         //
         .def("dev_name", &Tango::DeviceProxy::dev_name)
-        
+
         .def("info", &Tango::DeviceProxy::info,
             ( arg_("self") ),
             bopy::return_internal_reference<1>() )
@@ -443,19 +488,33 @@ void export_device_proxy()
             ( arg_("self") ) )
 
         .def("get_tango_lib_version", &Tango::DeviceProxy::get_tango_lib_version,
-            ( arg_("self") ) )        
+            ( arg_("self") ) )
 
         .def("_ping", &PyDeviceProxy::ping,
             ( arg_("self") ) )
-            
+
 
         .def("black_box", &Tango::DeviceProxy::black_box,
             ( arg_("self"), arg_("n") ),
             bopy::return_value_policy<bopy::manage_new_object>() )
 
         //
-        // device methods
+        // command methods
         //
+        .def("get_command_list", &Tango::DeviceProxy::get_command_list,
+	     ( arg_("self") ),
+            bopy::return_value_policy<bopy::manage_new_object>() )
+
+        .def("_get_command_config",
+	     (Tango::CommandInfoList* (Tango::DeviceProxy::*)(StdStringVector &))
+	     &Tango::DeviceProxy::get_command_config,
+	     ( arg_("self"), arg_("attr_names") ),
+	     bopy::return_value_policy<bopy::manage_new_object>() )
+
+        .def("_get_command_config",
+	     (Tango::CommandInfo (Tango::DeviceProxy::*)(const std::string&))
+	     &Tango::DeviceProxy::get_command_config,
+	     ( arg_("self"), arg_("attr_name") ) )
 
         .def("command_query", &Tango::DeviceProxy::command_query,
             ( arg_("self"), arg_("command") ) )
@@ -504,6 +563,33 @@ void export_device_proxy()
             ( arg_("self"), arg_("filter"), arg_("array") ) )
 
         //
+        // pipe methods
+        //
+
+        .def("get_pipe_list", &Tango::DeviceProxy::get_pipe_list,
+	     ( arg_("self") ),
+	     bopy::return_value_policy<bopy::manage_new_object>() )
+
+        .def("_get_pipe_config",
+	     (Tango::PipeInfoList* (Tango::DeviceProxy::*)(StdStringVector &))
+	     &Tango::DeviceProxy::get_pipe_config,
+	     ( arg_("self"), arg_("pipe_names") ),
+	     bopy::return_value_policy<bopy::manage_new_object>() )
+
+        .def("_get_pipe_config",
+	     (Tango::PipeInfo (Tango::DeviceProxy::*)(const std::string&))
+	     &Tango::DeviceProxy::get_pipe_config,
+	     ( arg_("self"), arg_("pipe_name") ) )
+
+        .def("_set_pipe_config",
+	     (void (Tango::DeviceProxy::*)(Tango::PipeInfoList &))
+	     &Tango::DeviceProxy::set_pipe_config,
+	     ( arg_("self"), arg_("seq") ) )
+
+	.def("__read_pipe", &PyDeviceProxy::read_pipe,
+	     ( arg_("self"), arg_("pipe_name") ) )
+
+        //
         // attribute methods
         //
 
@@ -573,7 +659,12 @@ void export_device_proxy()
 
         .def("_write_read_attribute",
             &PyDeviceProxy::write_read_attribute,
-            ( arg_("self"), arg_("attr_name"), arg_("value"), arg_("extract_as")=PyTango::ExtractAsNumpy ) )
+	     ( arg_("self"), arg_("attr_name"), arg_("value"), arg_("extract_as")=PyTango::ExtractAsNumpy ) )
+
+        .def("_write_read_attributes",
+	     &PyDeviceProxy::write_read_attributes,
+	     ( arg_("self"), arg_("attr_in"), arg_("attr_read_names"),
+	       arg_("extract_as")=PyTango::ExtractAsNumpy ) )
 
         //
         // history methods
@@ -674,7 +765,7 @@ void export_device_proxy()
             (void (*) (bopy::object, bopy::object, bopy::object))
             &PyDeviceProxy::write_attributes_asynch,
             ( arg_("self"), arg_("values"), arg_("callback") ) )
-        
+
         //
         // Logging administration methods
         //
diff --git a/src/boost/cpp/enums.cpp b/ext/enums.cpp
similarity index 87%
rename from src/boost/cpp/enums.cpp
rename to ext/enums.cpp
index 4f4fa53..9050b36 100644
--- a/src/boost/cpp/enums.cpp
+++ b/ext/enums.cpp
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
@@ -50,7 +50,10 @@ void export_enums()
         .value(Tango::CmdArgTypeName[Tango::DEVVAR_LONG64ARRAY], Tango::DEVVAR_LONG64ARRAY)
         .value(Tango::CmdArgTypeName[Tango::DEVVAR_ULONG64ARRAY], Tango::DEVVAR_ULONG64ARRAY)
         .value(Tango::CmdArgTypeName[Tango::DEV_INT], Tango::DEV_INT)
-        .value("DevEncoded", Tango::DEV_ENCODED)
+        .value(Tango::CmdArgTypeName[Tango::DEV_ENCODED], Tango::DEV_ENCODED)
+        .value(Tango::CmdArgTypeName[Tango::DEV_ENUM], Tango::DEV_ENUM)
+        .value(Tango::CmdArgTypeName[Tango::DEV_PIPE_BLOB], Tango::DEV_PIPE_BLOB)
+        .value(Tango::CmdArgTypeName[Tango::DEVVAR_STATEARRAY], Tango::DEVVAR_STATEARRAY)
         .export_values()
     ;
 
@@ -170,6 +173,7 @@ void export_enums()
         .value("READ_WITH_WRITE", Tango::READ_WITH_WRITE)
         .value("WRITE", Tango::WRITE)
         .value("READ_WRITE", Tango::READ_WRITE)
+        .value("WT_UNKNOWN", Tango::READ_WRITE)
         .export_values()
     ;
 
@@ -213,6 +217,27 @@ void export_enums()
     enum_<Tango::DispLevel>("DispLevel")
         .value("OPERATOR", Tango::OPERATOR)
         .value("EXPERT", Tango::EXPERT)
+        .value("DL_UNKNOWN", Tango::DL_UNKNOWN)
     ;
 
+    enum_<Tango::PipeWriteType>("PipeWriteType")
+        .value("PIPE_READ", Tango::PIPE_READ)
+        .value("PIPE_READ_WRITE", Tango::PIPE_READ_WRITE)
+        .value("PIPE_WT_UNKNOWN", Tango::PIPE_WT_UNKNOWN)
+    ;
+
+    enum_<Tango::PipeSerialModel>("PipeSerialModel")
+        .value("PIPE_NO_SYNC", Tango::PIPE_NO_SYNC)
+        .value("PIPE_BY_KERNEL", Tango::PIPE_BY_KERNEL)
+        .value("PIPE_BY_USER", Tango::PIPE_BY_USER)
+    ;
+  
+    scope().attr("PipeReqType") = scope().attr("AttReqType");
+
+    enum_<Tango::AttrMemorizedType>("AttrMemorizedType")
+        .value("NOT_KNOWN", Tango::NOT_KNOWN)
+        .value("NONE", Tango::NONE)
+        .value("MEMORIZED", Tango::MEMORIZED)
+        .value("MEMORIZED_WRITE_INIT", Tango::MEMORIZED_WRITE_INIT)
+    ;
 }
diff --git a/src/boost/cpp/event_data.cpp b/ext/event_data.cpp
similarity index 97%
rename from src/boost/cpp/event_data.cpp
rename to ext/event_data.cpp
index f55405f..8425fd6 100644
--- a/src/boost/cpp/event_data.cpp
+++ b/ext/event_data.cpp
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
diff --git a/src/boost/cpp/exception.cpp b/ext/exception.cpp
similarity index 99%
rename from src/boost/cpp/exception.cpp
rename to ext/exception.cpp
index f6852c7..3bb4ce3 100644
--- a/src/boost/cpp/exception.cpp
+++ b/ext/exception.cpp
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
diff --git a/src/boost/cpp/exception.h b/ext/exception.h
similarity index 98%
rename from src/boost/cpp/exception.h
rename to ext/exception.h
index 3fadbd1..1f5811b 100644
--- a/src/boost/cpp/exception.h
+++ b/ext/exception.h
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
diff --git a/src/boost/cpp/fast_from_py.h b/ext/fast_from_py.h
similarity index 99%
rename from src/boost/cpp/fast_from_py.h
rename to ext/fast_from_py.h
index 39bfbcc..663f436 100644
--- a/src/boost/cpp/fast_from_py.h
+++ b/ext/fast_from_py.h
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
@@ -184,7 +184,7 @@ DEFINE_FAST_TANGO_FROMPY_NUM(Tango::DEV_DOUBLE, double, PyFloat_AsDouble)
 
 // DEFINE_FAST_TANGO_FROMPY(Tango::DEV_STRING, PyString_AsString)
 DEFINE_FAST_TANGO_FROMPY(Tango::DEV_STRING, PyString_AsCorbaString)
-
+DEFINE_FAST_TANGO_FROMPY(Tango::DEV_ENUM, PyLong_AsUnsignedLong)
 
 template<long tangoArrayTypeConst>
 struct array_element_from_py : public from_py<TANGO_const2scalarconst(tangoArrayTypeConst)>
diff --git a/src/boost/cpp/fast_from_py_numpy.hpp b/ext/fast_from_py_numpy.hpp
similarity index 99%
rename from src/boost/cpp/fast_from_py_numpy.hpp
rename to ext/fast_from_py_numpy.hpp
index 7f24054..e31b85e 100644
--- a/src/boost/cpp/fast_from_py_numpy.hpp
+++ b/ext/fast_from_py_numpy.hpp
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
diff --git a/src/boost/cpp/from_py.cpp b/ext/from_py.cpp
similarity index 79%
rename from src/boost/cpp/from_py.cpp
rename to ext/from_py.cpp
index 0ec3c8d..40807da 100644
--- a/src/boost/cpp/from_py.cpp
+++ b/ext/from_py.cpp
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
@@ -307,6 +307,38 @@ void from_py_object(object &py_obj, Tango::AttributeConfig_3 &attr_conf)
     convert2array(py_obj.attr("sys_extensions"), attr_conf.sys_extensions);
 }
 
+void from_py_object(object &py_obj, Tango::AttributeConfig_5 &attr_conf)
+{
+    attr_conf.name = obj_to_new_char(py_obj.attr("name"));
+    attr_conf.writable = extract<Tango::AttrWriteType>(py_obj.attr("writable"));
+    attr_conf.data_format = extract<Tango::AttrDataFormat>(py_obj.attr("data_format"));
+    attr_conf.data_type = extract<CORBA::Long>(py_obj.attr("data_type"));
+    attr_conf.memorized = extract<CORBA::Boolean>(py_obj.attr("memorized"));
+    attr_conf.mem_init = extract<CORBA::Boolean>(py_obj.attr("mem_init"));
+    attr_conf.max_dim_x = extract<CORBA::Long>(py_obj.attr("max_dim_x"));
+    attr_conf.max_dim_y = extract<CORBA::Long>(py_obj.attr("max_dim_y"));
+    attr_conf.description = obj_to_new_char(py_obj.attr("description"));
+    attr_conf.label = obj_to_new_char(py_obj.attr("label"));
+    attr_conf.unit = obj_to_new_char(py_obj.attr("unit"));
+    attr_conf.standard_unit = obj_to_new_char(py_obj.attr("standard_unit"));
+    attr_conf.display_unit = obj_to_new_char(py_obj.attr("display_unit"));
+    attr_conf.format = obj_to_new_char(py_obj.attr("format"));
+    attr_conf.min_value = obj_to_new_char(py_obj.attr("min_value"));
+    attr_conf.max_value = obj_to_new_char(py_obj.attr("max_value"));
+    attr_conf.writable_attr_name = obj_to_new_char(py_obj.attr("writable_attr_name"));
+    attr_conf.level = extract<Tango::DispLevel>(py_obj.attr("level"));
+    attr_conf.root_attr_name = obj_to_new_char(py_obj.attr("root_attr_name"));
+
+    convert2array(py_obj.attr("enum_labels"), attr_conf.enum_labels);
+
+    object py_att_alarm = py_obj.attr("att_alarm");
+    object py_event_prop = py_obj.attr("event_prop");
+
+    from_py_object(py_att_alarm, attr_conf.att_alarm);
+    from_py_object(py_event_prop, attr_conf.event_prop);
+    convert2array(py_obj.attr("extensions"), attr_conf.extensions);
+    convert2array(py_obj.attr("sys_extensions"), attr_conf.sys_extensions);
+}
 
 void from_py_object(object &py_obj, Tango::AttributeConfigList &attr_conf_list)
 {
@@ -349,7 +381,26 @@ void from_py_object(object &py_obj, Tango::AttributeConfigList_2 &attr_conf_list
 void from_py_object(object &py_obj, Tango::AttributeConfigList_3 &attr_conf_list)
 {
     PyObject* py_obj_ptr = py_obj.ptr();
-    
+
+    if (!PySequence_Check(py_obj_ptr))
+    {
+        attr_conf_list.length(1);
+        from_py_object(py_obj, attr_conf_list[0]);
+        return;
+    }
+
+    CORBA::ULong size = static_cast<CORBA::ULong>(boost::python::len(py_obj));
+    attr_conf_list.length(size);
+    for (CORBA::ULong i=0; i < size; ++i) {
+        object tmp = py_obj[i];
+        from_py_object(tmp, attr_conf_list[i]);
+    }
+}
+
+void from_py_object(object &py_obj, Tango::AttributeConfigList_5 &attr_conf_list)
+{
+    PyObject* py_obj_ptr = py_obj.ptr();
+
     if (!PySequence_Check(py_obj_ptr))
     {
         attr_conf_list.length(1);
@@ -364,3 +415,32 @@ void from_py_object(object &py_obj, Tango::AttributeConfigList_3 &attr_conf_list
         from_py_object(tmp, attr_conf_list[i]);
     }
 }
+
+void from_py_object(object &py_obj, Tango::PipeConfig &pipe_conf)
+{
+    pipe_conf.name = obj_to_new_char(py_obj.attr("name"));
+    pipe_conf.description = obj_to_new_char(py_obj.attr("description"));
+    pipe_conf.label = obj_to_new_char(py_obj.attr("label"));
+    pipe_conf.level = extract<Tango::DispLevel>(py_obj.attr("level"));
+    pipe_conf.writable = extract<Tango::PipeWriteType>(py_obj.attr("writable"));
+    convert2array(py_obj.attr("extensions"), pipe_conf.extensions);
+}
+
+void from_py_object(object &py_obj, Tango::PipeConfigList &pipe_conf_list)
+{
+    PyObject* py_obj_ptr = py_obj.ptr();
+
+    if (!PySequence_Check(py_obj_ptr))
+    {
+        pipe_conf_list.length(1);
+        from_py_object(py_obj, pipe_conf_list[0]);
+        return;
+    }
+
+    CORBA::ULong size = static_cast<CORBA::ULong>(boost::python::len(py_obj));
+    pipe_conf_list.length(size);
+    for (CORBA::ULong i=0; i < size; ++i) {
+        object tmp = py_obj[i];
+        from_py_object(tmp, pipe_conf_list[i]);
+    }
+}
diff --git a/src/boost/cpp/from_py.h b/ext/from_py.h
similarity index 98%
rename from src/boost/cpp/from_py.h
rename to ext/from_py.h
index f03bd6b..db5da19 100644
--- a/src/boost/cpp/from_py.h
+++ b/ext/from_py.h
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
@@ -276,6 +276,7 @@ void from_py_object(bopy::object &, Tango::EventProperties &);
 void from_py_object(bopy::object &, Tango::AttributeConfig &);
 void from_py_object(bopy::object &, Tango::AttributeConfig_2 &);
 void from_py_object(bopy::object &, Tango::AttributeConfig_3 &);
+void from_py_object(bopy::object &, Tango::AttributeConfig_5 &);
 
 template<typename T>
 void from_py_object(bopy::object &py_obj, Tango::MultiAttrProp<T> &multi_attr_prop)
@@ -699,3 +700,7 @@ inline void from_py_object(bopy::object &py_obj, Tango::MultiAttrProp<Tango::Dev
 void from_py_object(bopy::object &, Tango::AttributeConfigList &);
 void from_py_object(bopy::object &, Tango::AttributeConfigList_2 &);
 void from_py_object(bopy::object &, Tango::AttributeConfigList_3 &);
+void from_py_object(bopy::object &, Tango::AttributeConfigList_5 &);
+
+void from_py_object(bopy::object &, Tango::PipeConfig &);
+void from_py_object(bopy::object &, Tango::PipeConfigList &);
diff --git a/src/boost/cpp/group.cpp b/ext/group.cpp
similarity index 99%
rename from src/boost/cpp/group.cpp
rename to ext/group.cpp
index 87e3cba..d64589e 100644
--- a/src/boost/cpp/group.cpp
+++ b/ext/group.cpp
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
diff --git a/src/boost/cpp/group_reply.cpp b/ext/group_reply.cpp
similarity index 97%
rename from src/boost/cpp/group_reply.cpp
rename to ext/group_reply.cpp
index 4685fe5..55dd631 100644
--- a/src/boost/cpp/group_reply.cpp
+++ b/ext/group_reply.cpp
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
diff --git a/src/boost/cpp/group_reply_list.cpp b/ext/group_reply_list.cpp
similarity index 96%
rename from src/boost/cpp/group_reply_list.cpp
rename to ext/group_reply_list.cpp
index 6b80999..efa30d9 100644
--- a/src/boost/cpp/group_reply_list.cpp
+++ b/ext/group_reply_list.cpp
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
diff --git a/src/boost/cpp/locker_info.cpp b/ext/locker_info.cpp
similarity index 94%
rename from src/boost/cpp/locker_info.cpp
rename to ext/locker_info.cpp
index 3509cab..79dfdd7 100644
--- a/src/boost/cpp/locker_info.cpp
+++ b/ext/locker_info.cpp
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
diff --git a/src/boost/cpp/locking_thread.cpp b/ext/locking_thread.cpp
similarity index 91%
rename from src/boost/cpp/locking_thread.cpp
rename to ext/locking_thread.cpp
index 8ef8c9c..5781fcf 100644
--- a/src/boost/cpp/locking_thread.cpp
+++ b/ext/locking_thread.cpp
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
diff --git a/src/boost/cpp/periodic_event_info.cpp b/ext/periodic_event_info.cpp
similarity index 92%
rename from src/boost/cpp/periodic_event_info.cpp
rename to ext/periodic_event_info.cpp
index a44cccb..be92726 100644
--- a/src/boost/cpp/periodic_event_info.cpp
+++ b/ext/periodic_event_info.cpp
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
diff --git a/src/boost/cpp/archive_event_info.cpp b/ext/pipe_info.cpp
similarity index 53%
rename from src/boost/cpp/archive_event_info.cpp
rename to ext/pipe_info.cpp
index 75a8fa4..7949aeb 100644
--- a/src/boost/cpp/archive_event_info.cpp
+++ b/ext/pipe_info.cpp
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
@@ -14,13 +14,17 @@
 
 using namespace boost::python;
 
-void export_archive_event_info()
+void export_pipe_info()
 {
-    class_<Tango::ArchiveEventInfo>("ArchiveEventInfo")
+    class_<Tango::PipeInfo>
+        ("PipeInfo")
+        .def(init<const Tango::PipeInfo&>())
         .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)
-        .def_readwrite("extensions", &Tango::ArchiveEventInfo::extensions)
+	.def_readwrite("name",  &Tango::PipeInfo::name)
+	.def_readwrite("description",  &Tango::PipeInfo::description)
+	.def_readwrite("label",  &Tango::PipeInfo::label)
+        .def_readwrite("disp_level", &Tango::PipeInfo::disp_level)
+        .def_readwrite("writable", &Tango::PipeInfo::writable)
+        .def_readwrite("extensions", &Tango::PipeInfo::extensions)
     ;
 }
diff --git a/src/boost/cpp/poll_device.cpp b/ext/poll_device.cpp
similarity index 93%
rename from src/boost/cpp/poll_device.cpp
rename to ext/poll_device.cpp
index f878670..6a19f0c 100644
--- a/src/boost/cpp/poll_device.cpp
+++ b/ext/poll_device.cpp
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
diff --git a/src/sip/sip/DbData.sip b/ext/precompiled_header.cpp
similarity index 84%
rename from src/sip/sip/DbData.sip
rename to ext/precompiled_header.cpp
index 3ba4be2..b6f89b0 100644
--- a/src/sip/sip/DbData.sip
+++ b/ext/precompiled_header.cpp
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
@@ -9,4 +9,4 @@
   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/ext/precompiled_header.hpp
similarity index 94%
rename from src/boost/cpp/precompiled_header.hpp
rename to ext/precompiled_header.hpp
index b484add..2931326 100644
--- a/src/boost/cpp/precompiled_header.hpp
+++ b/ext/precompiled_header.hpp
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
diff --git a/src/boost/cpp/pytango.cpp b/ext/pytango.cpp
similarity index 92%
rename from src/boost/cpp/pytango.cpp
rename to ext/pytango.cpp
index 967b0cf..c887d6e 100644
--- a/src/boost/cpp/pytango.cpp
+++ b/ext/pytango.cpp
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
@@ -39,6 +39,7 @@ void export_attribute_proxy();
 void export_db();
 void export_callback(); /// @todo not sure were to put it...
 void export_util();
+void export_pipe();
 void export_attr();
 void export_attribute();
 void export_encoded_attribute();
@@ -46,12 +47,14 @@ void export_wattribute();
 void export_multi_attribute();
 void export_multi_class_attribute();
 void export_user_default_attr_prop();
+void export_user_default_pipe_prop();
 void export_sub_dev_diag();
 void export_dserver();
 void export_device_class();
 void export_device_impl();
 void export_group();
 void export_log4tango();
+void export_auto_tango_monitor();
 
 #ifdef DISABLE_PYTANGO_NUMPY
 void init_numpy(void) {}
@@ -61,7 +64,7 @@ void* init_numpy(void) { import_array(); return NULL; }
 void init_numpy(void) { import_array(); return; }
 #endif
 
-BOOST_PYTHON_MODULE(_PyTango)
+BOOST_PYTHON_MODULE(_tango)
 {
 
 #ifndef DISABLE_BOOST_DOCSTRING_OPTIONS
@@ -97,6 +100,7 @@ BOOST_PYTHON_MODULE(_PyTango)
     export_attribute_proxy();
     export_db();
     export_util();
+    export_pipe();
     export_attr();
     export_attribute();
     export_encoded_attribute();
@@ -104,6 +108,7 @@ BOOST_PYTHON_MODULE(_PyTango)
     export_multi_attribute();
     export_multi_class_attribute();
     export_user_default_attr_prop();
+    export_user_default_pipe_prop();
     export_sub_dev_diag();
     export_device_class();
     export_device_impl();
@@ -111,4 +116,5 @@ BOOST_PYTHON_MODULE(_PyTango)
     export_dserver();
     export_group();
     export_log4tango();
+    export_auto_tango_monitor();
 }
diff --git a/src/boost/cpp/pytgutils.cpp b/ext/pytgutils.cpp
similarity index 90%
rename from src/boost/cpp/pytgutils.cpp
rename to ext/pytgutils.cpp
index cb9b553..45492ef 100644
--- a/src/boost/cpp/pytgutils.cpp
+++ b/ext/pytgutils.cpp
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
diff --git a/src/boost/cpp/pytgutils.h b/ext/pytgutils.h
similarity index 96%
rename from src/boost/cpp/pytgutils.h
rename to ext/pytgutils.h
index 75b7cbe..39d1c05 100644
--- a/src/boost/cpp/pytgutils.h
+++ b/ext/pytgutils.h
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
diff --git a/src/boost/cpp/pyutils.cpp b/ext/pyutils.cpp
similarity index 96%
rename from src/boost/cpp/pyutils.cpp
rename to ext/pyutils.cpp
index 3fd6baf..1b59dd8 100644
--- a/src/boost/cpp/pyutils.cpp
+++ b/ext/pyutils.cpp
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
@@ -181,3 +181,8 @@ EXIT:
 }
 
 #endif
+
+bool hasattr(boost::python::object& obj, const std::string& name)
+{
+    return PyObject_HasAttrString(obj.ptr(), name.c_str());
+}
diff --git a/src/boost/cpp/pyutils.h b/ext/pyutils.h
similarity index 96%
rename from src/boost/cpp/pyutils.h
rename to ext/pyutils.h
index 23295dd..f66a705 100644
--- a/src/boost/cpp/pyutils.h
+++ b/ext/pyutils.h
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
@@ -56,7 +56,7 @@ inline PyObject *PyImport_ImportModule_(const std::string &name)
     #define PyBytes_Type PyString_Type
 
     #define PyBytes_Check PyString_Check
-    #define PyBytes_CheckExact PyString_CheckExact 
+    #define PyBytes_CheckExact PyString_CheckExact
     #define PyBytes_CHECK_INTERNED PyString_CHECK_INTERNED
     #define PyBytes_AS_STRING PyString_AS_STRING
     #define PyBytes_GET_SIZE PyString_GET_SIZE
@@ -154,7 +154,7 @@ void * PyCapsule_Import(const char *name, int no_block);
 
 #endif /* #if PY_VERSION_HEX < 0x02070000 */
 
-PyObject* from_char_to_str(const char* in, Py_ssize_t size=-1, 
+PyObject* from_char_to_str(const char* in, Py_ssize_t size=-1,
                            const char* encoding=NULL, /* defaults to latin-1 */
                            const char* errors="strict");
 
@@ -162,7 +162,7 @@ PyObject* from_char_to_str(const std::string& in,
                            const char* encoding=NULL, /* defaults to latin-1 */
                            const char* errors="strict");
 
-bopy::object from_char_to_str2(const char* in, Py_ssize_t size=-1, 
+bopy::object from_char_to_str2(const char* in, Py_ssize_t size=-1,
                                const char* encoding=NULL, /* defaults to latin-1 */
                                const char* errors="strict");
 
@@ -184,9 +184,9 @@ inline void raise_(PyObject *type, const char *message)
 class AutoPythonAllowThreads
 {
     PyThreadState *m_save;
-    
+
 public:
-    
+
     inline void giveup()
     {
         if (m_save)
@@ -195,12 +195,12 @@ public:
             m_save = 0;
         }
     }
-    
+
     inline AutoPythonAllowThreads()
     {
         m_save = PyEval_SaveThread();
     }
-    
+
     inline ~AutoPythonAllowThreads()
     {
         giveup();
@@ -256,8 +256,10 @@ void is_method_defined(boost::python::object &obj, const std::string &method_nam
                        bool &exists, bool &is_method);
 
 #define PYTANGO_MOD \
-    boost::python::object pytango((boost::python::handle<>(boost::python::borrowed(PyImport_AddModule("PyTango")))));
-    
+    boost::python::object pytango((boost::python::handle<>(boost::python::borrowed(PyImport_AddModule("tango")))));
+
 #define CALL_METHOD(retType, self, name, ...) \
     boost::python::call_method<retType>(self, name , __VA_ARGS__);
-    
+
+
+bool hasattr(boost::python::object &, const std::string &);
diff --git a/src/boost/cpp/server/attr.cpp b/ext/server/attr.cpp
similarity index 70%
rename from src/boost/cpp/server/attr.cpp
rename to ext/server/attr.cpp
index 0933262..7d7a73f 100644
--- a/src/boost/cpp/server/attr.cpp
+++ b/ext/server/attr.cpp
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
@@ -14,6 +14,87 @@
 
 using namespace boost::python;
 
+#define __AUX_DECL_CALL_ATTR_METHOD \
+    PyDeviceImplBase *__dev_ptr = dynamic_cast<PyDeviceImplBase *>(dev); \
+    AutoPythonGIL __py_lock;
+
+#define __AUX_CATCH_PY_EXCEPTION \
+    catch(boost::python::error_already_set &eas) \
+    { handle_python_exception(eas); }
+
+#define CALL_ATTR_METHOD(dev, name) \
+    __AUX_DECL_CALL_ATTR_METHOD \
+    try { boost::python::call_method<void>(__dev_ptr->the_self, name); } \
+    __AUX_CATCH_PY_EXCEPTION
+
+#define CALL_ATTR_METHOD_VARGS(dev, name, ...) \
+    __AUX_DECL_CALL_ATTR_METHOD \
+    try { boost::python::call_method<void>(__dev_ptr->the_self, name, __VA_ARGS__); } \
+    __AUX_CATCH_PY_EXCEPTION
+
+#define CALL_ATTR_METHOD_RET(retType, ret, dev, name) \
+    __AUX_DECL_CALL_ATTR_METHOD \
+    try { ret = boost::python::call_method<retType>(__dev_ptr->the_self, name); } \
+    __AUX_CATCH_PY_EXCEPTION
+
+#define CALL_ATTR_METHOD_VARGS_RET(retType, ret, dev, name, ...) \
+    __AUX_DECL_CALL_ATTR_METHOD \
+    try { ret = boost::python::call_method<retType>(__dev_ptr->the_self, name, __VA_ARGS__); } \
+    __AUX_CATCH_PY_EXCEPTION
+
+#define RET_CALL_ATTR_METHOD(retType, dev, name) \
+    __AUX_DECL_CALL_ATTR_METHOD \
+    try { return boost::python::call_method<retType>(__dev_ptr->the_self, name); } \
+    __AUX_CATCH_PY_EXCEPTION
+
+#define RET_CALL_ATTR_METHOD_VARGS(retType, dev, name, ...) \
+    __AUX_DECL_CALL_ATTR_METHOD \
+    try { return boost::python::call_method<retType>(__dev_ptr->the_self, name, __VA_ARGS__); } \
+    __AUX_CATCH_PY_EXCEPTION
+
+
+void PyAttr::read(Tango::DeviceImpl *dev, Tango::Attribute &att)
+{
+    if (!_is_method(dev, read_name))
+    {
+        TangoSys_OMemStream o;
+        o << read_name << " method not found for " << att.get_name();
+        Tango::Except::throw_exception("PyTango_ReadAttributeMethodNotFound",
+            o.str(), "PyTango::Attr::read");
+    }
+    CALL_ATTR_METHOD_VARGS(dev, read_name.c_str(), boost::ref(att))
+}
+
+void PyAttr::write(Tango::DeviceImpl *dev, Tango::WAttribute &att)
+{
+    if (!_is_method(dev, write_name))
+    {
+        TangoSys_OMemStream o;
+        o << write_name << " method not found for " << att.get_name();
+        Tango::Except::throw_exception("PyTango_WriteAttributeMethodNotFound",
+            o.str(), "PyTango::Attr::write");
+    }
+    CALL_ATTR_METHOD_VARGS(dev, write_name.c_str(), boost::ref(att))
+}
+
+bool PyAttr::is_allowed(Tango::DeviceImpl *dev, Tango::AttReqType ty)
+{
+    if (_is_method(dev, py_allowed_name))
+    {
+        RET_CALL_ATTR_METHOD_VARGS(bool, dev, py_allowed_name.c_str(), ty)
+    }
+    // keep compiler quiet
+    return true;
+}
+
+bool PyAttr::_is_method(Tango::DeviceImpl *dev, const std::string &name)
+{
+    AutoPythonGIL __py_lock;
+    PyDeviceImplBase *__dev_ptr = dynamic_cast<PyDeviceImplBase *>(dev);
+    PyObject *__dev_py = __dev_ptr->the_self;
+    return is_method_defined(__dev_py, name);
+}
+
 void PyAttr::set_user_prop(vector<Tango::AttrProperty> &user_prop,
                            Tango::UserDefaultAttrProp &def_prop)
 {
diff --git a/src/boost/cpp/server/attr.h b/ext/server/attr.h
similarity index 77%
rename from src/boost/cpp/server/attr.h
rename to ext/server/attr.h
index ab3f6c8..59e49c6 100644
--- a/src/boost/cpp/server/attr.h
+++ b/ext/server/attr.h
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
@@ -19,44 +19,6 @@
 #include "pytgutils.h"
 #include "server/device_impl.h"
 
-#define __AUX_DECL_CALL_ATTR_METHOD \
-    PyDeviceImplBase *__dev_ptr = dynamic_cast<PyDeviceImplBase *>(dev); \
-    AutoPythonGIL __py_lock;
-
-#define __AUX_CATCH_PY_EXCEPTION \
-    catch(boost::python::error_already_set &eas) \
-    { handle_python_exception(eas); }
-
-#define CALL_ATTR_METHOD(dev, name) \
-    __AUX_DECL_CALL_ATTR_METHOD \
-    try { boost::python::call_method<void>(__dev_ptr->the_self, name); } \
-    __AUX_CATCH_PY_EXCEPTION
-
-#define CALL_ATTR_METHOD_VARGS(dev, name, ...) \
-    __AUX_DECL_CALL_ATTR_METHOD \
-    try { boost::python::call_method<void>(__dev_ptr->the_self, name, __VA_ARGS__); } \
-    __AUX_CATCH_PY_EXCEPTION
-
-#define CALL_ATTR_METHOD_RET(retType, ret, dev, name) \
-    __AUX_DECL_CALL_ATTR_METHOD \
-    try { ret = boost::python::call_method<retType>(__dev_ptr->the_self, name); } \
-    __AUX_CATCH_PY_EXCEPTION
-
-#define CALL_ATTR_METHOD_VARGS_RET(retType, ret, dev, name, ...) \
-    __AUX_DECL_CALL_ATTR_METHOD \
-    try { ret = boost::python::call_method<retType>(__dev_ptr->the_self, name, __VA_ARGS__); } \
-    __AUX_CATCH_PY_EXCEPTION
-
-#define RET_CALL_ATTR_METHOD(retType, dev, name) \
-    __AUX_DECL_CALL_ATTR_METHOD \
-    try { return boost::python::call_method<retType>(__dev_ptr->the_self, name); } \
-    __AUX_CATCH_PY_EXCEPTION
-
-#define RET_CALL_ATTR_METHOD_VARGS(retType, dev, name, ...) \
-    __AUX_DECL_CALL_ATTR_METHOD \
-    try { return boost::python::call_method<retType>(__dev_ptr->the_self, name, __VA_ARGS__); } \
-    __AUX_CATCH_PY_EXCEPTION
-
 class PyAttr
 {
 public:
@@ -78,18 +40,7 @@ public:
      * @param[in] dev The device on which the attribute has to be read
      * @param[in, out] att the attribute
      */
-    inline void read(Tango::DeviceImpl *dev,Tango::Attribute &att)
-    {
-        if (!_is_method(dev, read_name))
-        {
-            TangoSys_OMemStream o;
-            o << read_name << " method not found for " << att.get_name();
-            Tango::Except::throw_exception("PyTango_ReadAttributeMethodNotFound",
-                o.str(), "PyTango::Attr::read");
-        }
-        
-        CALL_ATTR_METHOD_VARGS(dev, read_name.c_str(), boost::ref(att))
-    }
+    void read(Tango::DeviceImpl *dev,Tango::Attribute &att);
 
     /**
      * Write one attribute. This method forward the action to the python method.
@@ -97,17 +48,7 @@ public:
      * @param[in] dev The device on which the attribute has to be written
      * @param[in, out] att the attribute
      */
-    inline void write(Tango::DeviceImpl *dev,Tango::WAttribute &att)
-    {
-        if (!_is_method(dev, write_name))
-        {
-            TangoSys_OMemStream o;
-            o << write_name << " method not found for " << att.get_name();
-            Tango::Except::throw_exception("PyTango_WriteAttributeMethodNotFound",
-                o.str(), "PyTango::Attr::write");
-        }
-        CALL_ATTR_METHOD_VARGS(dev, write_name.c_str(), boost::ref(att))
-    }
+    void write(Tango::DeviceImpl *dev,Tango::WAttribute &att);
 
     /**
      * Decide if it is allowed to read/write the attribute
@@ -118,15 +59,7 @@ public:
      * @return a boolean set to true if it is allowed to execute
      *         the command. Otherwise, returns false
      */
-    inline bool is_allowed(Tango::DeviceImpl *dev,Tango::AttReqType ty)
-    {
-        if (_is_method(dev, py_allowed_name))
-        {
-            RET_CALL_ATTR_METHOD_VARGS(bool, dev, py_allowed_name.c_str(), ty)
-        }
-        // keep compiler quiet
-        return true;
-    }
+    bool is_allowed(Tango::DeviceImpl *dev,Tango::AttReqType ty);
 
     /**
      * Sets the is_allowed method name for this attribute
@@ -168,13 +101,7 @@ public:
     void set_user_prop(std::vector<Tango::AttrProperty> &user_prop,
                        Tango::UserDefaultAttrProp &def_prop);
 
-    inline bool _is_method(Tango::DeviceImpl *dev, const std::string &name)
-    {   
-        AutoPythonGIL __py_lock;
-        PyDeviceImplBase *__dev_ptr = dynamic_cast<PyDeviceImplBase *>(dev);
-        PyObject *__dev_py = __dev_ptr->the_self;
-        return is_method_defined(__dev_py, name);
-    }
+    bool _is_method(Tango::DeviceImpl *dev, const std::string &name);
     
 private:
 
diff --git a/src/boost/cpp/server/attribute.cpp b/ext/server/attribute.cpp
similarity index 89%
rename from src/boost/cpp/server/attribute.cpp
rename to ext/server/attribute.cpp
index 94c321a..e3ce80d 100644
--- a/src/boost/cpp/server/attribute.cpp
+++ b/ext/server/attribute.cpp
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
@@ -393,30 +393,6 @@ namespace PyAttribute
                                        long x, long y)
     { __set_value("set_value_date_quality", att, value, &x, &y, t, &quality); }
     
-    inline bopy::object get_properties(Tango::Attribute &att,
-                                                bopy::object &attr_cfg)
-    {
-        Tango::AttributeConfig tg_attr_cfg;
-        att.get_properties(tg_attr_cfg);
-        return to_py(tg_attr_cfg, attr_cfg);
-    }
-    
-    inline bopy::object get_properties_2(Tango::Attribute &att,
-                                                  bopy::object &attr_cfg)
-    {
-        Tango::AttributeConfig_2 tg_attr_cfg;
-        att.get_properties_2(tg_attr_cfg);
-        return to_py(tg_attr_cfg, attr_cfg);
-    }
-
-    inline bopy::object get_properties_3(Tango::Attribute &att,
-                                                  bopy::object &attr_cfg)
-    {
-        Tango::AttributeConfig_3 tg_attr_cfg;
-        att.get_properties_3(tg_attr_cfg);
-        return to_py(tg_attr_cfg, attr_cfg);
-    }
-
     template<typename TangoScalarType>
     inline void _get_properties_multi_attr_prop(Tango::Attribute &att, bopy::object &multi_attr_prop)
     {
@@ -426,46 +402,8 @@ namespace PyAttribute
     	to_py(tg_multi_attr_prop,multi_attr_prop);
     }
 
-#if TgLibVersNb < 80100 // _get_properties_multi_attr_prop<Tango::DevString>
-
-    // This is a hook dealing with a bug in Tango 8.0.5 related to AttrProp<Tango::DevString> specialisation
-    template<>
-    inline void _get_properties_multi_attr_prop<Tango::DevString>(Tango::Attribute &att, bopy::object &multi_attr_prop)
-    {
-        Tango::AttributeConfig_3 tg_attr_cfg;
-        att.get_properties_3(tg_attr_cfg);
-
-        if(multi_attr_prop.ptr() == Py_None)
-        {
-            PYTANGO_MOD
-            multi_attr_prop = pytango.attr("MultiAttrProp")();
-        }
-
-        multi_attr_prop.attr("label") = tg_attr_cfg.label;
-        multi_attr_prop.attr("description") = tg_attr_cfg.description;
-        multi_attr_prop.attr("unit") = tg_attr_cfg.unit;
-        multi_attr_prop.attr("standard_unit") = tg_attr_cfg.standard_unit;
-        multi_attr_prop.attr("display_unit") = tg_attr_cfg.display_unit;
-        multi_attr_prop.attr("format") = tg_attr_cfg.format;
-        multi_attr_prop.attr("min_value") = tg_attr_cfg.min_value;
-        multi_attr_prop.attr("max_value") = tg_attr_cfg.max_value;
-        multi_attr_prop.attr("min_alarm") = tg_attr_cfg.att_alarm.min_alarm;
-        multi_attr_prop.attr("max_alarm") = tg_attr_cfg.att_alarm.max_alarm;
-        multi_attr_prop.attr("min_warning") = tg_attr_cfg.att_alarm.min_warning;
-        multi_attr_prop.attr("max_warning") = tg_attr_cfg.att_alarm.max_warning;
-        multi_attr_prop.attr("delta_t") = tg_attr_cfg.att_alarm.delta_t;
-        multi_attr_prop.attr("delta_val") = tg_attr_cfg.att_alarm.delta_val;
-        multi_attr_prop.attr("event_period") = tg_attr_cfg.event_prop.per_event.period;
-        multi_attr_prop.attr("archive_period") = tg_attr_cfg.event_prop.arch_event.period;
-        multi_attr_prop.attr("rel_change") = tg_attr_cfg.event_prop.ch_event.rel_change;
-        multi_attr_prop.attr("abs_change") = tg_attr_cfg.event_prop.ch_event.abs_change;
-        multi_attr_prop.attr("archive_rel_change") = tg_attr_cfg.event_prop.arch_event.rel_change;
-        multi_attr_prop.attr("archive_abs_change") = tg_attr_cfg.event_prop.arch_event.abs_change;
-    }
-    
-#endif // _get_properties_multi_attr_prop<Tango::DevString>
-
-    inline bopy::object get_properties_multi_attr_prop(Tango::Attribute &att,
+    inline bopy::object
+    get_properties_multi_attr_prop(Tango::Attribute &att,
                                                 bopy::object &multi_attr_prop)
     {
     	long tangoTypeConst = att.get_data_type();
@@ -473,24 +411,6 @@ namespace PyAttribute
 		return multi_attr_prop;
     }
 
-    void set_properties(Tango::Attribute &att, bopy::object &attr_cfg,
-                        bopy::object &dev)
-    {
-        Tango::AttributeConfig tg_attr_cfg;
-        from_py_object(attr_cfg, tg_attr_cfg);
-        Tango::DeviceImpl *dev_ptr = extract<Tango::DeviceImpl*>(dev);
-        att.set_properties(tg_attr_cfg, dev_ptr);
-    }
-
-    void set_properties_3(Tango::Attribute &att, bopy::object &attr_cfg,
-                          bopy::object &dev)
-    {
-        Tango::AttributeConfig_3 tg_attr_cfg;
-        from_py_object(attr_cfg, tg_attr_cfg);
-        Tango::DeviceImpl *dev_ptr = extract<Tango::DeviceImpl*>(dev);
-        att.set_properties(tg_attr_cfg, dev_ptr);
-    }
-
     template<typename TangoScalarType>
     inline void _set_properties_multi_attr_prop(Tango::Attribute &att, bopy::object &multi_attr_prop)
     {
@@ -558,7 +478,7 @@ namespace PyAttribute
 		self.set_min_alarm(c_value);
     }
 
-#if TgLibVersNb < 80100 // set_min_alarm
+#if TANGO_VERSION_NB < 80100 // set_min_alarm
 
     template<>
     inline void _set_min_alarm<Tango::DevEncoded>(Tango::Attribute &self, bopy::object value)
@@ -601,7 +521,7 @@ namespace PyAttribute
 		self.set_max_alarm(c_value);
     }
 
-#if TgLibVersNb < 80100 // set_max_alarm
+#if TANGO_VERSION_NB < 80100 // set_max_alarm
 
     template<>
     inline void _set_max_alarm<Tango::DevEncoded>(Tango::Attribute &self, bopy::object value)
@@ -644,7 +564,7 @@ namespace PyAttribute
 		self.set_min_warning(c_value);
     }
 
-#if TgLibVersNb < 80100 // set_min_warning
+#if TANGO_VERSION_NB < 80100 // set_min_warning
 
     template<>
     inline void _set_min_warning<Tango::DevEncoded>(Tango::Attribute &self, bopy::object value)
@@ -687,7 +607,7 @@ namespace PyAttribute
 		self.set_max_warning(c_value);
     }
 
-#if TgLibVersNb < 80100 // set_max_warning
+#if TANGO_VERSION_NB < 80100 // set_max_warning
 
     template<>
     inline void _set_max_warning<Tango::DevEncoded>(Tango::Attribute &self, bopy::object value)
@@ -953,14 +873,20 @@ void export_attribute()
         .def("is_data_ready_event", &Tango::Attribute::is_data_ready_event)
         .def("remove_configuration", &Tango::Attribute::remove_configuration)
         
+	/*
         .def("_get_properties", &PyAttribute::get_properties)
         .def("_get_properties_2", &PyAttribute::get_properties_2)
         .def("_get_properties_3", &PyAttribute::get_properties_3)
-        .def("_get_properties_multi_attr_prop", &PyAttribute::get_properties_multi_attr_prop)
+	*/
+        .def("_get_properties_multi_attr_prop", 
+	     &PyAttribute::get_properties_multi_attr_prop)
         
+	/*
         .def("_set_properties", &PyAttribute::set_properties)
         .def("_set_properties_3", &PyAttribute::set_properties_3)
-        .def("_set_properties_multi_attr_prop", &PyAttribute::set_properties_multi_attr_prop)
+	*/
+        .def("_set_properties_multi_attr_prop", 
+	     &PyAttribute::set_properties_multi_attr_prop)
         
         .def("set_upd_properties",
 			(void (*) (Tango::Attribute &, bopy::object &))
diff --git a/src/boost/cpp/server/attribute.h b/ext/server/attribute.h
similarity index 97%
rename from src/boost/cpp/server/attribute.h
rename to ext/server/attribute.h
index 0535ff3..0cd75f4 100644
--- a/src/boost/cpp/server/attribute.h
+++ b/ext/server/attribute.h
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
diff --git a/ext/server/auto_monitor.cpp b/ext/server/auto_monitor.cpp
new file mode 100644
index 0000000..11111c8
--- /dev/null
+++ b/ext/server/auto_monitor.cpp
@@ -0,0 +1,151 @@
+/******************************************************************************
+  This file is part of PyTango (http://pytango.rtfd.io)
+
+  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"
+#include "pytgutils.h"
+
+namespace PyTango
+{
+
+class AutoTangoMonitor
+{
+  Tango::AutoTangoMonitor           *mon;
+  Tango::DeviceImpl                 *dev;
+  Tango::DeviceClass                *klass;
+
+public:
+  AutoTangoMonitor(Tango::DeviceImpl *dev_arg) : mon(), dev(), klass()
+  {
+    dev = dev_arg;
+  }
+
+  AutoTangoMonitor(Tango::DeviceClass *klass_arg) : mon(), dev(), klass()
+  {
+    klass = klass_arg;
+  }
+
+  void acquire()
+  {
+    if (mon != NULL)
+    {
+      return;
+    }
+    if (dev != NULL)
+    {
+      AutoPythonAllowThreads no_gil;
+      mon = new Tango::AutoTangoMonitor(dev);
+    }
+    else if (klass != NULL)
+    {
+      AutoPythonAllowThreads no_gil;
+      mon = new Tango::AutoTangoMonitor(klass);
+    }
+  }
+
+  void release()
+  {
+    if (mon != NULL)
+    {
+      delete mon;
+      mon = NULL;
+    }
+  }
+
+  ~AutoTangoMonitor()
+  {
+    release();
+  }
+
+};
+
+class AutoTangoAllowThreads
+{
+public:
+  AutoTangoAllowThreads(Tango::DeviceImpl *dev): count(0)
+  {
+    Tango::Util* util = Tango::Util::instance();
+    Tango::SerialModel ser = util->get_serial_model();
+
+    switch(ser)
+    {
+      case Tango::BY_DEVICE:
+        mon = &(dev->get_dev_monitor());
+        break;
+      case Tango::BY_CLASS:
+        //mon = &(dev->device_class->ext->only_one);
+        break;
+      case Tango::BY_PROCESS:
+        //mon = &(util->ext->only_one);
+        break;
+      default:
+        mon = NULL;
+    }
+    release();
+  }
+
+  void acquire()
+  {
+    if (mon == NULL)
+      return;
+
+    AutoPythonAllowThreads no_gil;
+    for(int i=0; i < count; ++i) {
+      mon->get_monitor();
+    }
+  }
+
+protected:
+  void release()
+  {
+    if (mon == NULL)
+      return;
+
+    int cur_thread = omni_thread::self()->id();
+    int mon_thread = mon->get_locking_thread_id();
+    int lock_count = mon->get_locking_ctr();
+
+    // do something only if the monitor was taken by the current thread
+    if ((mon_thread == cur_thread) && lock_count) {
+      while (lock_count > 0) {
+	mon->rel_monitor();
+	lock_count = mon->get_locking_ctr();
+	count++;
+      }
+    }
+    else {
+      mon = NULL;
+    }
+  }
+
+private:
+  Tango::TangoMonitor           *mon;
+  int                          count;
+  omni_thread::ensure_self auto_self;
+};
+
+} // namespace PyTango
+
+
+void export_auto_tango_monitor()
+{
+  bopy::class_<PyTango::AutoTangoMonitor, boost::noncopyable>(
+    "AutoTangoMonitor", bopy::init<Tango::DeviceImpl*>())
+    .def(bopy::init<Tango::DeviceClass*>())
+    .def("_acquire", &PyTango::AutoTangoMonitor::acquire)
+    .def("_release", &PyTango::AutoTangoMonitor::release)
+  ;
+
+  bopy::class_<PyTango::AutoTangoAllowThreads, boost::noncopyable>(
+    "AutoTangoAllowThreads", bopy::init<Tango::DeviceImpl*>())
+    .def("_acquire", &PyTango::AutoTangoAllowThreads::acquire);
+  ;
+}
diff --git a/src/boost/cpp/server/command.cpp b/ext/server/command.cpp
similarity index 94%
rename from src/boost/cpp/server/command.cpp
rename to ext/server/command.cpp
index ff6e55b..3b64020 100644
--- a/src/boost/cpp/server/command.cpp
+++ b/ext/server/command.cpp
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
@@ -138,6 +138,12 @@ void insert_scalar<Tango::DEV_ENCODED>(boost::python::object &o, CORBA::Any &any
     PyBuffer_Release(&view);
 }
 
+template<>
+void insert_scalar<Tango::DEV_PIPE_BLOB>(boost::python::object &o, CORBA::Any &any)
+{
+    assert(false);
+}
+
 template<long tangoArrayTypeConst>
 void insert_array(boost::python::object &o, CORBA::Any &any)
 {   
@@ -151,6 +157,12 @@ void insert_array(boost::python::object &o, CORBA::Any &any)
     any <<= data;
 }
 
+template<>
+void insert_array<Tango::DEV_PIPE_BLOB>(boost::python::object &o, CORBA::Any &any)
+{
+    assert(false);
+}
+
 template<long tangoTypeConst>
 void extract_scalar(const CORBA::Any &any, boost::python::object &o)
 {
@@ -180,6 +192,12 @@ void extract_scalar<Tango::DEV_VOID>(const CORBA::Any &any, boost::python::objec
 {}
 
 template<>
+void extract_scalar<Tango::DEV_PIPE_BLOB>(const CORBA::Any &any, boost::python::object &o)
+{
+    assert(false);
+}
+
+template<>
 void extract_scalar<Tango::DEV_ENCODED>(const CORBA::Any &any, boost::python::object &o)
 {
     Tango::DevEncoded* data;
@@ -261,6 +279,13 @@ void extract_array(const CORBA::Any &any, boost::python::object &py_result)
 #endif
 }
 
+template<>
+void extract_array<Tango::DEV_PIPE_BLOB>(const CORBA::Any &any,
+					 boost::python::object &py_result)
+{
+    assert(false);
+}
+
 CORBA::Any *PyCmd::execute(Tango::DeviceImpl *dev, const CORBA::Any &param_any)
 {
     PyDeviceImplBase *dev_ptr = dynamic_cast<PyDeviceImplBase *>(dev);
diff --git a/src/boost/cpp/server/command.h b/ext/server/command.h
similarity index 96%
rename from src/boost/cpp/server/command.h
rename to ext/server/command.h
index 1630c5f..07ce3bf 100644
--- a/src/boost/cpp/server/command.h
+++ b/ext/server/command.h
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
diff --git a/src/boost/cpp/server/device_class.cpp b/ext/server/device_class.cpp
similarity index 83%
rename from src/boost/cpp/server/device_class.cpp
rename to ext/server/device_class.cpp
index 58d9c7b..5457f75 100644
--- a/src/boost/cpp/server/device_class.cpp
+++ b/ext/server/device_class.cpp
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
@@ -15,6 +15,7 @@
 #include "server/device_class.h"
 #include "server/attr.h"
 #include "server/command.h"
+#include "server/pipe.h"
 
 using namespace boost::python;
 
@@ -146,6 +147,36 @@ void CppDeviceClass::create_attribute(vector<Tango::Attr *> &att_list,
 
     att_list.push_back(attr_ptr);
 }
+void CppDeviceClass::create_pipe(vector<Tango::Pipe *> &pipe_list,
+				 const std::string &name,
+				 Tango::PipeWriteType access,
+				 Tango::DispLevel display_level,
+				 const std::string &read_method_name,
+				 const std::string &write_method_name,
+				 const std::string &is_allowed_name,
+				 Tango::UserDefaultPipeProp *prop)
+{
+    Tango::Pipe *pipe_ptr = NULL;
+    if(access == Tango::PIPE_READ)
+    {
+	PyTango::Pipe::PyPipe* py_pipe_ptr = new PyTango::Pipe::PyPipe(name, display_level, access);
+	py_pipe_ptr->set_read_name(read_method_name);
+	py_pipe_ptr->set_allowed_name(is_allowed_name);
+	pipe_ptr = py_pipe_ptr;
+    }
+    else
+    {
+	PyTango::Pipe::PyWPipe* py_pipe_ptr = new PyTango::Pipe::PyWPipe(name, display_level);
+	py_pipe_ptr->set_read_name(read_method_name);
+	py_pipe_ptr->set_allowed_name(is_allowed_name);
+	py_pipe_ptr->set_write_name(write_method_name);
+	pipe_ptr = py_pipe_ptr;
+    }
+
+    if (prop)
+	pipe_ptr->set_default_properties(*prop);
+    pipe_list.push_back(pipe_ptr);
+}
 
 CppDeviceClassWrap::CppDeviceClassWrap(PyObject *self, const std::string &name)
     : CppDeviceClass(name), m_self(self)
@@ -189,6 +220,30 @@ void CppDeviceClassWrap::attribute_factory(std::vector<Tango::Attr *> &att_list)
     }
 }
 
+void CppDeviceClassWrap::pipe_factory()
+{
+    //
+    // make sure we pass the same vector object to the python method
+    //
+    AutoPythonGIL python_guard;
+
+    object py_pipe_list(
+                handle<>(
+                    to_python_indirect<
+                        std::vector<Tango::Pipe *>,
+                        detail::make_reference_holder>()(pipe_list)));
+
+    try
+    {
+        boost::python::call_method<void>(m_self, "_pipe_factory",
+                                         py_pipe_list);
+    }
+    catch(boost::python::error_already_set &eas)
+    {
+        handle_python_exception(eas);
+    }
+}
+
 void CppDeviceClassWrap::command_factory()
 {
     CALL_DEVCLASS_METHOD(_command_factory)
@@ -296,6 +351,23 @@ namespace PyDeviceClass
         return py_cmd_list;
     }
    
+    object get_pipe_list(CppDeviceClass &self, const std::string& dev_name)
+    {
+        boost::python::list py_pipe_list;
+        vector<Tango::Pipe *> pipe_list = self.get_pipe_list(dev_name);
+        for(vector<Tango::Pipe *>::iterator it = pipe_list.begin();
+	    it != pipe_list.end(); ++it)
+        {
+            object py_value = object(
+                        handle<>(
+                            to_python_indirect<
+                                Tango::Pipe*,
+                                detail::make_reference_holder>()(*it)));
+            py_pipe_list.append(py_value);
+        }
+        return py_pipe_list;
+    }
+
     void register_signal(CppDeviceClass &self, long signo)
     {
 	self.register_signal(signo);
@@ -354,9 +426,12 @@ void export_device_class()
         .def("get_cvs_location",&Tango::DeviceClass::get_cvs_location,
             return_value_policy<copy_non_const_reference>())
         .def("get_device_list",&PyDeviceClass::get_device_list)
-        .def("get_command_list",&PyDeviceClass::get_device_list)
+        .def("get_command_list",&PyDeviceClass::get_command_list)
+        .def("get_pipe_list",&PyDeviceClass::get_pipe_list)
         .def("get_cmd_by_name",&Tango::DeviceClass::get_cmd_by_name,
             return_internal_reference<>())
+        .def("get_pipe_by_name",&Tango::DeviceClass::get_pipe_by_name,
+            return_internal_reference<>())
         .def("set_type",
             (void (Tango::DeviceClass::*) (const char *))
             &Tango::DeviceClass::set_type)
@@ -376,6 +451,7 @@ void export_device_class()
             (void (Tango::DeviceClass::*) (const char *))
             &Tango::DeviceClass::device_destroyer)
         .def("_create_attribute", &CppDeviceClass::create_attribute)
+        .def("_create_pipe", &CppDeviceClass::create_pipe)
         .def("_create_command", &CppDeviceClass::create_command)
         .def("get_class_attr", &Tango::DeviceClass::get_class_attr,
             return_value_policy<reference_existing_object>())
diff --git a/src/boost/cpp/server/device_class.h b/ext/server/device_class.h
similarity index 88%
rename from src/boost/cpp/server/device_class.h
rename to ext/server/device_class.h
index 8f9ea43..70904eb 100644
--- a/src/boost/cpp/server/device_class.h
+++ b/ext/server/device_class.h
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
@@ -79,6 +79,20 @@ public:
                           Tango::UserDefaultAttrProp *att_prop);
 
     /**
+     * Creates an pipe and adds it to the att_list.
+     * This method is intended to be called by python to register a new
+     * pipe.
+     */
+    void create_pipe(vector<Tango::Pipe *> &pipe_list,
+		     const std::string &name,
+		     Tango::PipeWriteType access,
+		     Tango::DispLevel display_level,
+		     const std::string &read_method_name,
+		     const std::string &write_method_name,
+		     const std::string &is_allowed_name,
+		     Tango::UserDefaultPipeProp *prop);
+
+    /**
      * Creates a command.
      * This method is intended to be called by python to register a new
      * command.
@@ -133,6 +147,14 @@ public:
     virtual void attribute_factory(std::vector<Tango::Attr *> &att_list);
 
     /**
+     * This method forward a C++ call to the pipe_factory method to the
+     * Python method
+     *
+     * @param[in] pipe_list pipe list
+     */
+    virtual void pipe_factory();
+
+    /**
      * This method forward a C++ call to the command_factory method to the
      * Python method
      */
diff --git a/src/boost/cpp/server/device_impl.cpp b/ext/server/device_impl.cpp
similarity index 90%
rename from src/boost/cpp/server/device_impl.cpp
rename to ext/server/device_impl.cpp
index f6e76dc..e929472 100644
--- a/src/boost/cpp/server/device_impl.cpp
+++ b/ext/server/device_impl.cpp
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
@@ -484,6 +484,16 @@ namespace PyDeviceImpl
         SAFE_PUSH_EVENT_DATE_QUALITY_VARGS(self, name, filt_names, filt_vals, data, t, quality, x, y)
     }
 
+    /* **********************************
+     * data ready event
+     * **********************************/
+    inline void push_data_ready_event(Tango::DeviceImpl &self, const str &name,
+                                      long ctr)
+    {
+        SAFE_PUSH(self, attr, name)
+        self.push_data_ready_event(__att_name, ctr); //__att_name from SAFE_PUSH
+    }
+
     void check_attribute_method_defined(PyObject *self,
                                         const std::string &attr_name,
                                         const std::string &method_name)
@@ -1187,6 +1197,162 @@ void Device_4ImplWrap::default_signal_handler(long signo)
     this->Tango::Device_4Impl::signal_handler(signo);
 }
 
+
+Device_5ImplWrap::Device_5ImplWrap(PyObject *self, CppDeviceClass *cl,
+                                   std::string &st)
+    :Tango::Device_5Impl(cl,st),
+    PyDeviceImplBase(self)
+{
+    _init();
+}
+
+Device_5ImplWrap::Device_5ImplWrap(PyObject *self, CppDeviceClass *cl,
+                                   const char *name,
+                                   const char *desc /* = "A Tango device" */,
+                                   Tango::DevState sta /* = Tango::UNKNOWN */,
+                                   const char *status /* = StatusNotSet */)
+    :Tango::Device_5Impl(cl, name, desc, sta, status),
+    PyDeviceImplBase(self)
+{
+    _init();
+}
+
+Device_5ImplWrap::~Device_5ImplWrap()
+{ delete_device(); }
+
+void Device_5ImplWrap::_init()
+{
+    // Make sure the wrapper contains a valid pointer to the self
+    // I found out this is needed by inspecting the boost wrapper_base.hpp code
+    initialize_wrapper(the_self, this);
+}
+
+void Device_5ImplWrap::init_device()
+{
+    AutoPythonGIL __py_lock;
+    try
+    {
+        this->get_override("init_device")();
+    }
+    catch(boost::python::error_already_set &eas)
+    {
+        handle_python_exception(eas);
+    }
+}
+
+void Device_5ImplWrap::delete_device()
+{
+    CALL_DEVICE_METHOD(Device_5Impl, delete_device)
+}
+
+void Device_5ImplWrap::default_delete_device()
+{
+    this->Tango::Device_5Impl::delete_device();
+}
+
+void Device_5ImplWrap::delete_dev()
+{
+    // Call here the delete_device method. It is defined in Device_5ImplWrap
+    // class which is already destroyed when the Tango kernel call the
+    // delete_device method
+    try
+    {
+        delete_device();
+    }
+    catch (Tango::DevFailed &e)
+    {
+        Tango::Except::print_exception(e);
+    }
+}
+
+void Device_5ImplWrap::py_delete_dev()
+{
+    Device_5ImplWrap::delete_dev();
+    PyDeviceImplBase::py_delete_dev();
+}
+
+void Device_5ImplWrap::always_executed_hook()
+{
+    CALL_DEVICE_METHOD(Device_5Impl, always_executed_hook)
+}
+
+void Device_5ImplWrap::default_always_executed_hook()
+{
+    this->Tango::Device_5Impl::always_executed_hook();
+}
+
+void Device_5ImplWrap::read_attr_hardware(vector<long> &attr_list)
+{
+    CALL_DEVICE_METHOD_VARGS(Device_5Impl, read_attr_hardware, attr_list)
+}
+
+void Device_5ImplWrap::default_read_attr_hardware(vector<long> &attr_list)
+{
+    this->Tango::Device_5Impl::read_attr_hardware(attr_list);
+}
+
+void Device_5ImplWrap::write_attr_hardware(vector<long> &attr_list)
+{
+    CALL_DEVICE_METHOD_VARGS(Device_5Impl, write_attr_hardware, attr_list)
+}
+
+void Device_5ImplWrap::default_write_attr_hardware(vector<long> &attr_list)
+{
+    this->Tango::Device_5Impl::write_attr_hardware(attr_list);
+}
+
+Tango::DevState Device_5ImplWrap::dev_state()
+{
+    CALL_DEVICE_METHOD_RET(Device_5Impl, dev_state)
+    // Keep the compiler quiet
+    return Tango::UNKNOWN;
+}
+
+Tango::DevState Device_5ImplWrap::default_dev_state()
+{
+    return this->Tango::Device_5Impl::dev_state();
+}
+
+Tango::ConstDevString Device_5ImplWrap::dev_status()
+{
+    CALL_DEVICE_METHOD_RET(Device_5Impl, dev_status)
+    // Keep the compiler quiet
+    return "Impossible state";
+}
+
+Tango::ConstDevString Device_5ImplWrap::default_dev_status()
+{
+    return this->Tango::Device_5Impl::dev_status();
+}
+
+void Device_5ImplWrap::signal_handler(long signo)
+{
+    try
+    {
+        CALL_DEVICE_METHOD_VARGS(Device_5Impl, signal_handler, signo)
+    }
+    catch(Tango::DevFailed &df)
+    {
+        long nb_err = df.errors.length();
+        df.errors.length(nb_err + 1);
+        
+        df.errors[nb_err].reason = CORBA::string_dup(
+            "PyDs_UnmanagedSignalHandlerException");
+        df.errors[nb_err].desc = CORBA::string_dup(
+            "An unmanaged Tango::DevFailed exception occurred in signal_handler");
+        df.errors[nb_err].origin = CORBA::string_dup("Device_5Impl.signal_handler");
+        df.errors[nb_err].severity = Tango::ERR;
+
+        Tango::Except::print_exception(df);
+    }
+}
+
+void Device_5ImplWrap::default_signal_handler(long signo)
+{
+    this->Tango::Device_5Impl::signal_handler(signo);
+}
+
+
 #if ((defined sun) || (defined WIN32))
 BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(register_signal_overload,
                                        Tango::DeviceImpl::register_signal, 1, 1)
@@ -1202,9 +1368,6 @@ BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(set_change_event_overload,
 BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(set_archive_event_overload,
                                        Tango::DeviceImpl::set_archive_event, 2, 3)
 
-BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(push_data_ready_event_overload,
-                                       Tango::DeviceImpl::push_data_ready_event, 1, 2)
-
 BOOST_PYTHON_FUNCTION_OVERLOADS(remove_attribute_overload,
                                 PyDeviceImpl::remove_attribute, 2, 3)
                                        
@@ -1432,8 +1595,10 @@ void export_device_impl()
             (void (*) (Tango::DeviceImpl &, str &, object &, object &, object &, double, Tango::AttrQuality, long, long))
             &PyDeviceImpl::push_event)
 
-        .def("push_data_ready_event", &Tango::DeviceImpl::push_data_ready_event,
-            push_data_ready_event_overload())
+        .def("push_data_ready_event",
+            (void (*) (Tango::DeviceImpl &, str &, long))
+            &PyDeviceImpl::push_data_ready_event,
+            (arg_("self"), arg_("attr_name"), arg_("ctr")))
 
         .def("push_att_conf_event", &Tango::DeviceImpl::push_att_conf_event)
 
@@ -1451,6 +1616,8 @@ void export_device_impl()
         .def("get_attr_min_poll_period", 
             &Tango::DeviceImpl::get_attr_min_poll_period,
             return_internal_reference<>())
+	.def("is_there_subscriber",
+	     &Tango::DeviceImpl::is_there_subscriber)
     ;
     implicitly_convertible<auto_ptr<DeviceImplWrap>, auto_ptr<Tango::DeviceImpl> >();
     
@@ -1512,4 +1679,29 @@ void export_device_impl()
             &Device_4ImplWrap::default_signal_handler)
     ;
     implicitly_convertible<auto_ptr<Device_4ImplWrap>, auto_ptr<Tango::Device_4Impl> >();
+
+    class_<Tango::Device_5Impl, auto_ptr<Device_5ImplWrap>,
+           bases<Tango::Device_4Impl>,
+           boost::noncopyable>
+           ("Device_5Impl",
+            init<CppDeviceClass *, const char *,
+                 optional<const char *, Tango::DevState, const char *> >())
+        .def("init_device", pure_virtual(&Tango::Device_5Impl::init_device))
+        .def("delete_device", &Tango::Device_5Impl::delete_device,
+            &Device_5ImplWrap::default_delete_device)
+        .def("always_executed_hook", &Tango::Device_5Impl::always_executed_hook,
+            &Device_5ImplWrap::default_always_executed_hook)
+        .def("read_attr_hardware", &Tango::Device_5Impl::read_attr_hardware,
+            &Device_5ImplWrap::default_read_attr_hardware)
+        .def("write_attr_hardware", &Tango::Device_5Impl::write_attr_hardware,
+            &Device_5ImplWrap::default_write_attr_hardware)
+        .def("dev_state", &Tango::Device_5Impl::dev_state,
+            &Device_5ImplWrap::default_dev_state)
+        .def("dev_status", &Tango::Device_5Impl::dev_status,
+            &Device_5ImplWrap::default_dev_status)
+        .def("signal_handler", &Tango::Device_5Impl::signal_handler,
+            &Device_5ImplWrap::default_signal_handler)
+    ;
+    implicitly_convertible<auto_ptr<Device_5ImplWrap>, auto_ptr<Tango::Device_5Impl> >();
+
 }
diff --git a/src/boost/cpp/server/device_impl.h b/ext/server/device_impl.h
similarity index 73%
rename from src/boost/cpp/server/device_impl.h
rename to ext/server/device_impl.h
index eca1630..f20e468 100644
--- a/src/boost/cpp/server/device_impl.h
+++ b/ext/server/device_impl.h
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
@@ -49,7 +49,7 @@ public:
     DeviceImplWrap(PyObject *self, CppDeviceClass *cl, const char *name,
                    const char *desc = "A Tango device",
                    Tango::DevState sta = Tango::UNKNOWN,
-                   const char *status = StatusNotSet);
+                   const char *status = Tango::StatusNotSet);
 
     /**
      * Destructor
@@ -104,7 +104,7 @@ public:
     Device_2ImplWrap(PyObject *self, CppDeviceClass *cl, const char *name,
                      const char *desc = "A Tango device",
                      Tango::DevState sta = Tango::UNKNOWN,
-                     const char *status = StatusNotSet);
+                     const char *status = Tango::StatusNotSet);
 
     /**
      * Destructor
@@ -161,7 +161,7 @@ public:
     Device_3ImplWrap(PyObject *self, CppDeviceClass *cl, const char *name,
                      const char *desc = "A Tango device",
                      Tango::DevState sta = Tango::UNKNOWN,
-                     const char *status = StatusNotSet);
+                     const char *status = Tango::StatusNotSet);
 
     /**
      * Destructor
@@ -288,7 +288,7 @@ public:
     Device_4ImplWrap(PyObject *self, CppDeviceClass *cl, const char *name,
                      const char *desc = "A Tango device",
                      Tango::DevState sta = Tango::UNKNOWN,
-                     const char *status = StatusNotSet);
+                     const char *status = Tango::StatusNotSet);
 
     /**
      * Destructor
@@ -385,4 +385,130 @@ protected:
     void _init();
 };
 
+/**
+ * Device_5ImplWrap is the class used to represent a Python Tango device.
+ */
+class Device_5ImplWrap : public Tango::Device_5Impl,
+                         public PyDeviceImplBase,
+                         public boost::python::wrapper<Tango::Device_5Impl>
+{
+public:
+    /**
+     * Constructor
+     *
+     * @param[in] self
+     * @param[in] cl
+     * @param[in] st
+     */
+    Device_5ImplWrap(PyObject *self, CppDeviceClass *cl, std::string &st);
+
+    /**
+     * Constructor
+     *
+     * @param[in] self
+     * @param[in] cl
+     * @param[in] name
+     * @param[in] desc
+     * @param[in] sta
+     * @param[in] status
+     */
+    Device_5ImplWrap(PyObject *self, CppDeviceClass *cl, const char *name,
+                     const char *desc = "A Tango device",
+                     Tango::DevState sta = Tango::UNKNOWN,
+                     const char *status = Tango::StatusNotSet);
+
+    /**
+     * Destructor
+     */
+    virtual ~Device_5ImplWrap();
+
+    /**
+     * Necessary init_device implementation to call python
+     */
+    virtual void init_device();
+
+    /**
+     * Necessary delete_device implementation to call python
+     */
+    virtual void delete_device();
+
+    /**
+     * Executes default delete_device implementation
+     */
+    void default_delete_device();
+
+    /**
+     * called to ask Python to delete a device by decrementing the Python
+     * reference count
+     */
+    virtual void delete_dev();
+
+    /**
+     * Necessary always_executed_hook implementation to call python
+     */
+    virtual void always_executed_hook();
+
+    /**
+     * Executes default always_executed_hook implementation
+     */
+    void default_always_executed_hook();
+
+    /**
+     * Necessary read_attr_hardware implementation to call python
+     */
+    virtual void read_attr_hardware(vector<long> &attr_list);
+
+    /**
+     * Executes default read_attr_hardware implementation
+     */
+    void default_read_attr_hardware(vector<long> &attr_list);
+
+    /**
+     * Necessary write_attr_hardware implementation to call python
+     */
+    virtual void write_attr_hardware(vector<long> &attr_list);
+
+    /**
+     * Executes default write_attr_hardware implementation
+     */
+    void default_write_attr_hardware(vector<long> &attr_list);
+
+    /**
+     * Necessary dev_state implementation to call python
+     */
+    virtual Tango::DevState dev_state();
+
+    /**
+     * Executes default dev_state implementation
+     */
+    Tango::DevState default_dev_state();
+
+    /**
+     * Necessary dev_status implementation to call python
+     */
+    virtual Tango::ConstDevString dev_status();
+
+    /**
+     * Executes default dev_status implementation
+     */
+    Tango::ConstDevString default_dev_status();
+
+    /**
+     * Necessary signal_handler implementation to call python
+     */
+    virtual void signal_handler(long signo);
+
+    /**
+     * Executes default signal_handler implementation
+     */
+    void default_signal_handler(long signo);
+
+    virtual void py_delete_dev();
+
+protected:
+    /**
+     * internal method used to initialize the class. Called by the constructors
+     */
+    void _init();
+};
 #endif // _DEVICE_IMPL_H
diff --git a/src/boost/cpp/server/dserver.cpp b/ext/server/dserver.cpp
similarity index 99%
rename from src/boost/cpp/server/dserver.cpp
rename to ext/server/dserver.cpp
index 2394ff6..6d908d0 100644
--- a/src/boost/cpp/server/dserver.cpp
+++ b/ext/server/dserver.cpp
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
diff --git a/src/boost/cpp/server/encoded_attribute.cpp b/ext/server/encoded_attribute.cpp
similarity index 99%
rename from src/boost/cpp/server/encoded_attribute.cpp
rename to ext/server/encoded_attribute.cpp
index 8bbbc36..19bcfa5 100644
--- a/src/boost/cpp/server/encoded_attribute.cpp
+++ b/ext/server/encoded_attribute.cpp
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
diff --git a/src/boost/cpp/server/log4tango.cpp b/ext/server/log4tango.cpp
similarity index 98%
rename from src/boost/cpp/server/log4tango.cpp
rename to ext/server/log4tango.cpp
index d724ab0..384139a 100644
--- a/src/boost/cpp/server/log4tango.cpp
+++ b/ext/server/log4tango.cpp
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
diff --git a/src/boost/cpp/server/multi_attribute.cpp b/ext/server/multi_attribute.cpp
similarity index 97%
rename from src/boost/cpp/server/multi_attribute.cpp
rename to ext/server/multi_attribute.cpp
index 6d2f249..1cc6cae 100644
--- a/src/boost/cpp/server/multi_attribute.cpp
+++ b/ext/server/multi_attribute.cpp
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
diff --git a/src/boost/cpp/server/multi_class_attribute.cpp b/ext/server/multi_class_attribute.cpp
similarity index 76%
rename from src/boost/cpp/server/multi_class_attribute.cpp
rename to ext/server/multi_class_attribute.cpp
index 7dc2f31..84cfcc7 100644
--- a/src/boost/cpp/server/multi_class_attribute.cpp
+++ b/ext/server/multi_class_attribute.cpp
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
@@ -18,17 +18,13 @@ void export_multi_class_attribute()
 {
     Tango::Attr& (Tango::MultiClassAttribute::*get_attr_)(std::string &) =
         &Tango::MultiClassAttribute::get_attr;
-    void (Tango::MultiClassAttribute::*remove_attr_)(std::string &, const std::string &) =
-        &Tango::MultiClassAttribute::remove_attr;
 
     class_<Tango::MultiClassAttribute, boost::noncopyable>("MultiClassAttribute", no_init)
         .def("get_attr",
             (Tango::Attr& (Tango::MultiClassAttribute::*) (const std::string &))
             get_attr_,
             return_value_policy<reference_existing_object>())
-        .def("remove_attr",
-            (void (Tango::MultiClassAttribute::*) (const std::string &, const std::string &))
-            remove_attr_)
+	.def("remove_attr", &Tango::MultiClassAttribute::remove_attr)
         .def("get_attr_list", &Tango::MultiClassAttribute::get_attr_list,
             return_value_policy<reference_existing_object>())
     ;
diff --git a/ext/server/pipe.cpp b/ext/server/pipe.cpp
new file mode 100644
index 0000000..9cc10c6
--- /dev/null
+++ b/ext/server/pipe.cpp
@@ -0,0 +1,448 @@
+/******************************************************************************
+  This file is part of PyTango (http://pytango.rtfd.io)
+
+  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"
+#include "pytgutils.h"
+#include "pipe.h"
+#include "fast_from_py.h"
+
+#define __AUX_DECL_CALL_PIPE_METHOD \
+    PyDeviceImplBase *__dev_ptr = dynamic_cast<PyDeviceImplBase *>(dev); \
+    AutoPythonGIL __py_lock;
+
+#define __AUX_CATCH_PY_EXCEPTION \
+    catch(bopy::error_already_set &eas) \
+    { handle_python_exception(eas); }
+
+#define CALL_PIPE_METHOD(dev, name) \
+    __AUX_DECL_CALL_PIPE_METHOD \
+    try { bopy::call_method<void>(__dev_ptr->the_self, name); } \
+    __AUX_CATCH_PY_EXCEPTION
+
+#define CALL_PIPE_METHOD_VARGS(dev, name, ...) \
+    __AUX_DECL_CALL_PIPE_METHOD \
+    try { bopy::call_method<void>(__dev_ptr->the_self, name, __VA_ARGS__); } \
+    __AUX_CATCH_PY_EXCEPTION
+
+#define CALL_PIPE_METHOD_RET(retType, ret, dev, name) \
+    __AUX_DECL_CALL_PIPE_METHOD \
+    try { ret = bopy::call_method<retType>(__dev_ptr->the_self, name); } \
+    __AUX_CATCH_PY_EXCEPTION
+
+#define CALL_PIPE_METHOD_VARGS_RET(retType, ret, dev, name, ...) \
+    __AUX_DECL_CALL_PIPE_METHOD \
+    try { ret = bopy::call_method<retType>(__dev_ptr->the_self, name, __VA_ARGS__); } \
+    __AUX_CATCH_PY_EXCEPTION
+
+#define RET_CALL_PIPE_METHOD(retType, dev, name) \
+    __AUX_DECL_CALL_PIPE_METHOD \
+    try { return bopy::call_method<retType>(__dev_ptr->the_self, name); } \
+    __AUX_CATCH_PY_EXCEPTION
+
+#define RET_CALL_PIPE_METHOD_VARGS(retType, dev, name, ...) \
+    __AUX_DECL_CALL_PIPE_METHOD \
+    try { return bopy::call_method<retType>(__dev_ptr->the_self, name, __VA_ARGS__); } \
+    __AUX_CATCH_PY_EXCEPTION
+
+namespace PyTango { namespace Pipe {
+
+    void _Pipe::read(Tango::DeviceImpl *dev, Tango::Pipe &pipe)
+    {
+        if (!_is_method(dev, read_name))
+        {
+            TangoSys_OMemStream o;
+            o << read_name << " method " << " not found for " << pipe.get_name();
+            Tango::Except::throw_exception("PyTango_ReadPipeMethodNotFound",
+                                           o.str(), "PyTango::Pipe::read");
+        }
+      
+        CALL_PIPE_METHOD_VARGS(dev, read_name.c_str(), boost::ref(pipe))
+    }
+
+    void _Pipe::write(Tango::DeviceImpl *dev, Tango::WPipe &pipe)
+    {
+        if (!_is_method(dev, write_name))
+	{
+	    TangoSys_OMemStream o;
+	    o << write_name << " method not found for " << pipe.get_name();
+	    Tango::Except::throw_exception("PyTango_WritePipeMethodNotFound",
+					   o.str(), "PyTango::Pipe::write");
+	}
+	CALL_PIPE_METHOD_VARGS(dev, write_name.c_str(), boost::ref(pipe))
+    }
+
+    bool _Pipe::is_allowed(Tango::DeviceImpl *dev, Tango::PipeReqType ty)
+    {
+	if (_is_method(dev, py_allowed_name))
+	{
+	    RET_CALL_PIPE_METHOD_VARGS(bool, dev, py_allowed_name.c_str(), ty)
+	}
+	// keep compiler quiet
+	return true;
+    }    
+
+    bool _Pipe::_is_method(Tango::DeviceImpl *dev, const std::string &name)
+    {   
+	AutoPythonGIL __py_lock;
+	PyDeviceImplBase *__dev_ptr = dynamic_cast<PyDeviceImplBase *>(dev);
+	PyObject *__dev_py = __dev_ptr->the_self;
+	return is_method_defined(__dev_py, name);
+    }
+
+    static void throw_wrong_python_data_type(const std::string &name,
+					     const char *method)
+    {
+	TangoSys_OMemStream o;
+	o << "Wrong Python type for pipe " << name << ends;
+	Tango::Except::throw_exception("PyDs_WrongPythonDataTypeForPipe",
+				       o.str(), method);
+    }
+	
+    template<typename T>
+    void append_scalar_encoded(T& obj, const std::string &name, 
+			       bopy::object& py_value)
+    {
+	bopy::object p0 = py_value[0];
+	bopy::object p1 = py_value[1];
+
+	const char* encoded_format = bopy::extract<const char *> (p0.ptr());
+	
+	PyObject* data_ptr = p1.ptr();
+	Py_buffer view;
+    
+	if (PyObject_GetBuffer(data_ptr, &view, PyBUF_FULL_RO) < 0)
+	{
+	    throw_wrong_python_data_type(obj.get_name(), "append_scalar_encoded");
+	}
+    
+	CORBA::ULong nb = static_cast<CORBA::ULong>(view.len);
+	Tango::DevVarCharArray arr(nb, nb, (CORBA::Octet*)view.buf, false);
+	Tango::DevEncoded value;
+	value.encoded_format = CORBA::string_dup(encoded_format);
+	value.encoded_data = arr;    
+	obj << value;
+	PyBuffer_Release(&view);
+    }
+
+    template<typename T, long tangoTypeConst>
+    void __append_scalar(T &obj, const std::string &name, bopy::object& py_value)
+    {
+	typedef typename TANGO_const2type(tangoTypeConst) TangoScalarType;
+	TangoScalarType value;
+	from_py<tangoTypeConst>::convert(py_value, value);
+	obj << value;
+    }
+
+    template<long tangoTypeConst>
+    void append_scalar(Tango::Pipe& pipe, const std::string &name,
+		       bopy::object& py_value)
+    {
+	__append_scalar<Tango::Pipe, tangoTypeConst>(pipe, name, py_value);
+    }
+    
+    template<>
+    void append_scalar<Tango::DEV_VOID>(Tango::Pipe& pipe, 
+					const std::string &name,
+					bopy::object& py_value)
+    {
+	throw_wrong_python_data_type(pipe.get_name(), "append_scalar");
+    }
+    
+    template<>
+    void append_scalar<Tango::DEV_PIPE_BLOB>(Tango::Pipe& pipe, 
+					     const std::string &name, 
+					     bopy::object& py_value)
+    {
+	throw_wrong_python_data_type(pipe.get_name(), "append_scalar");
+    }
+
+    template<>
+    void append_scalar<Tango::DEV_ENCODED>(Tango::Pipe& pipe, 
+					   const std::string &name, 
+					   bopy::object& py_value)
+    {
+	append_scalar_encoded<Tango::Pipe>(pipe, name, py_value);
+    }
+
+    template<long tangoTypeConst>
+    void append_scalar(Tango::DevicePipeBlob& blob, const std::string &name, bopy::object& py_value)
+    {
+	__append_scalar<Tango::DevicePipeBlob, tangoTypeConst>(blob, name, py_value);
+    }
+    
+    template<>
+    void append_scalar<Tango::DEV_VOID>(Tango::DevicePipeBlob& blob, 
+					const std::string &name,
+					bopy::object& py_value)
+    {
+	throw_wrong_python_data_type(blob.get_name(), "append_scalar");
+    }
+    
+    template<>
+    void append_scalar<Tango::DEV_PIPE_BLOB>(Tango::DevicePipeBlob& blob, 
+					     const std::string &name, 
+					     bopy::object& py_value)
+    {
+	throw_wrong_python_data_type(blob.get_name(), "append_scalar");    
+    }
+
+    template<>
+    void append_scalar<Tango::DEV_ENCODED>(Tango::DevicePipeBlob& blob, 
+					   const std::string &name, 
+					   bopy::object& py_value)
+    {
+	append_scalar_encoded<Tango::DevicePipeBlob>(blob, name, py_value);
+    }    
+
+    // -------------
+    // Array version
+    // -------------
+
+    template<typename T, long tangoArrayTypeConst>
+    void __append_array(T& obj, const std::string &name, bopy::object& py_value)
+    {
+	typedef typename TANGO_const2type(tangoArrayTypeConst) TangoArrayType;
+
+	TangoArrayType* value = fast_convert2array<tangoArrayTypeConst>(py_value);
+	obj << value;
+    }
+
+    template<long tangoArrayTypeConst>
+    void append_array(Tango::Pipe& pipe, const std::string &name, 
+		      bopy::object& py_value)
+    {
+	__append_array<Tango::Pipe, tangoArrayTypeConst>(pipe, name, py_value);
+    }
+    
+    template<>
+    void append_array<Tango::DEV_VOID>(Tango::Pipe& pipe,
+				       const std::string &name,
+				       bopy::object& py_value)
+    {
+	throw_wrong_python_data_type(pipe.get_name(), "append_array");
+    }
+    
+    template<>
+    void append_array<Tango::DEV_PIPE_BLOB>(Tango::Pipe& pipe,
+					    const std::string &name, 
+					    bopy::object& py_value)
+    {
+	throw_wrong_python_data_type(pipe.get_name(), "append_array");
+    }
+
+    template<>
+    void append_array<Tango::DEVVAR_LONGSTRINGARRAY>(Tango::Pipe& pipe, 
+						     const std::string &name, 
+						     bopy::object& py_value)
+    {
+	throw_wrong_python_data_type(pipe.get_name(), "append_array");
+    }
+
+    template<>
+    void append_array<Tango::DEVVAR_DOUBLESTRINGARRAY>(Tango::Pipe& pipe, 
+						       const std::string &name, 
+						       bopy::object& py_value)
+    {
+	throw_wrong_python_data_type(pipe.get_name(), "append_array");
+    }
+
+    template<long tangoArrayTypeConst>
+    void append_array(Tango::DevicePipeBlob& blob, const std::string &name, 
+		      bopy::object& py_value)
+    {
+	__append_array<Tango::DevicePipeBlob, tangoArrayTypeConst>(blob, name, py_value);
+    }
+    
+    template<>
+    void append_array<Tango::DEV_VOID>(Tango::DevicePipeBlob& blob,
+				       const std::string &name,
+				       bopy::object& py_value)
+    {
+	throw_wrong_python_data_type(blob.get_name(), "append_array");
+    }
+    
+    template<>
+    void append_array<Tango::DEV_PIPE_BLOB>(Tango::DevicePipeBlob& blob,
+					    const std::string &name, 
+					    bopy::object& py_value)
+    {
+	throw_wrong_python_data_type(blob.get_name(), "append_array");
+    }
+
+    template<>
+    void append_array<Tango::DEVVAR_LONGSTRINGARRAY>(Tango::DevicePipeBlob& blob, 
+						     const std::string &name, 
+						     bopy::object& py_value)
+    {
+	throw_wrong_python_data_type(blob.get_name(), "append_array");
+    }
+
+    template<>
+    void append_array<Tango::DEVVAR_DOUBLESTRINGARRAY>(Tango::DevicePipeBlob& blob, 
+						       const std::string &name, 
+						       bopy::object& py_value)
+    {
+	throw_wrong_python_data_type(blob.get_name(), "append_array");
+    }
+
+    template<typename T>
+    void __append(T& obj, const std::string& name, 
+		bopy::object& py_value, const Tango::CmdArgType dtype)
+    {
+	TANGO_DO_ON_DEVICE_DATA_TYPE_ID(dtype,
+            append_scalar<tangoTypeConst>(obj, name, py_value);
+	    ,
+            append_array<tangoTypeConst>(obj, name, py_value);
+	    );
+    }
+
+    /*
+    template<typename T>
+    void __set_value(T& obj, bopy::object& py_value)
+    {
+        bopy::object items = py_value.attr("items")();
+        Py_ssize_t size = bopy::len(items);
+	obj.set_data_elt_nb(size);
+	for(size_t i = 0; i < size; ++i)
+	{
+            std::string item_name = bopy::extract<std::string>(items[i][0]);
+	    bopy::object py_item_data = items[i][1];
+            if (PyDict_Check(py_item_data.ptr()))  // data element
+            {
+	        bopy::object py_item_value = py_item_data["value"];
+	        bopy::object py_item_dtype = py_item_data["dtype"];
+		Tango::CmdArgType item_dtype = bopy::extract<Tango::CmdArgType>(py_item_dtype);
+		__append(obj, item_name, py_item_value, item_dtype);
+            }
+	    else
+	    {
+                std::string blob_name = bopy::extract<std::string>(py_item_data[0]);
+		bopy::object py_blob_data = py_item_data[1];
+		Tango::DevicePipeBlob blob(blob_name);
+		__set_value(blob, py_blob_data);
+		obj << blob;
+	    }
+	}
+    }
+    */
+    /*
+    template<typename T>
+    void __set_value(T& obj, bopy::object& py_value)
+    {
+        bopy::str name_key("name");
+        Py_ssize_t size = bopy::len(py_value);
+	std::vector<std::string> elem_names;
+	for(size_t i = 0; i < size; ++i)
+	{
+	    elem_names.push_back(bopy::extract<std::string>(py_value[i][0]));
+	}
+	obj.set_data_elt_names(elem_names);
+
+	for(size_t i = 0; i < size; ++i)
+	{
+            std::string item_name = bopy::extract<std::string>(py_value[i][0]);
+	    bopy::dict py_item_data = bopy::extract<bopy::dict>(py_value[i][1]);
+	    if (py_item_data.has_key(name_key)) // a sub-blob
+	    {
+	        std::string blob_name = bopy::extract<std::string>(py_item_data["name"]);
+	        bopy::object py_blob_data = py_item_data["data"];
+	        Tango::DevicePipeBlob blob(blob_name);
+	        __set_value(blob, py_blob_data);
+	        obj << blob;
+	    }
+	    else
+	    {
+	        bopy::object py_item_value = py_item_data["value"];
+	        bopy::object py_item_dtype = py_item_data["dtype"];
+		Tango::CmdArgType item_dtype = bopy::extract<Tango::CmdArgType>(py_item_dtype);
+		__append(obj, item_name, py_item_value, item_dtype);	      
+	    }
+	}
+    }
+    */
+
+    template<typename T>
+    void __set_value(T& obj, bopy::object& py_value)
+    {
+        // need to fill item names first because in case it is a sub-blob, 
+        // the Tango C++ API doesnt't provide a way to do it
+        Py_ssize_t size = bopy::len(py_value);
+	std::vector<std::string> elem_names;
+	for(size_t i = 0; i < size; ++i)
+	{
+	    elem_names.push_back(bopy::extract<std::string>(py_value[i]["name"]));
+	}
+	obj.set_data_elt_names(elem_names);
+
+	for(size_t i = 0; i < size; ++i)
+	{
+            bopy::object item = py_value[i];
+            std::string item_name = bopy::extract<std::string>(item["name"]);
+	    bopy::object py_item_data = item["value"];
+	    Tango::CmdArgType item_dtype = bopy::extract<Tango::CmdArgType>(item["dtype"]);
+	    if (item_dtype == Tango::DEV_PIPE_BLOB) // a sub-blob
+	    {
+	        std::string blob_name = bopy::extract<std::string>(py_item_data[0]);
+	        bopy::object py_blob_data = py_item_data[1];
+	        Tango::DevicePipeBlob blob(blob_name);
+	        __set_value(blob, py_blob_data);
+	        obj << blob;
+	    }
+	    else
+	    {
+		__append(obj, item_name, py_item_data, item_dtype);
+	    }
+	}	
+    }
+
+    void set_value(Tango::Pipe& pipe, bopy::object& py_value)
+    {
+	__set_value<Tango::Pipe>(pipe, py_value);
+    }
+
+}} // namespace PyTango::Pipe
+
+
+void export_pipe()
+{
+    bopy::class_<Tango::Pipe, boost::noncopyable>("Pipe",
+        bopy::init<const std::string &, 
+		   const Tango::DispLevel, 
+                   bopy::optional<Tango::PipeWriteType> >())
+
+        .def("get_name", &Tango::Pipe::get_name,
+            bopy::return_value_policy<bopy::copy_non_const_reference>())
+        .def("set_name", &Tango::Pipe::set_name)
+	.def("set_default_properties", &Tango::Pipe::set_default_properties)
+        .def("get_root_blob_name", &Tango::Pipe::get_root_blob_name,
+            bopy::return_value_policy<bopy::copy_const_reference>())
+        .def("set_root_blob_name", &Tango::Pipe::set_root_blob_name)
+        .def("get_desc", &Tango::Pipe::get_desc,
+            bopy::return_value_policy<bopy::copy_non_const_reference>())
+        .def("get_label", &Tango::Pipe::get_label,
+            bopy::return_value_policy<bopy::copy_non_const_reference>())
+        .def("get_disp_level", &Tango::Pipe::get_disp_level)
+        .def("get_writable", &Tango::Pipe::get_writable)
+        .def("get_pipe_serial_model", &Tango::Pipe::get_pipe_serial_model)
+        .def("set_pipe_serial_model", &Tango::Pipe::set_pipe_serial_model)
+	.def("has_failed", &Tango::Pipe::has_failed)
+
+        .def("_set_value", 
+	     (void (*) (Tango::Pipe &, bopy::object &))
+	     &PyTango::Pipe::set_value)
+
+//        .def("_get_value",
+//	     (bopy::object (*) (Tango::Pipe &))
+//	     &PyTango::Pipe::get_value)
+	;
+
+}
diff --git a/ext/server/pipe.h b/ext/server/pipe.h
new file mode 100644
index 0000000..a8cc5b4
--- /dev/null
+++ b/ext/server/pipe.h
@@ -0,0 +1,86 @@
+/******************************************************************************
+  This file is part of PyTango (http://pytango.rtfd.io)
+
+  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
+
+#include <boost/python.hpp>
+#include <tango.h>
+#include "exception.h"
+#include "pytgutils.h"
+#include "server/device_impl.h"
+
+namespace PyTango { namespace Pipe {
+
+    class _Pipe
+    {
+    public:
+        _Pipe() {}
+
+        virtual ~_Pipe() {}
+
+        void read(Tango::DeviceImpl *, Tango::Pipe &);
+        void write(Tango::DeviceImpl *dev, Tango::WPipe &);
+        bool is_allowed(Tango::DeviceImpl *, Tango::PipeReqType);
+
+        void set_allowed_name(const std::string &name) { py_allowed_name = name; }
+        void set_read_name(const std::string &name)    { read_name = name; }
+        void set_write_name(const std::string &name)   { write_name = name; }
+        bool _is_method(Tango::DeviceImpl *, const std::string &);
+    
+    private:
+  	std::string py_allowed_name;
+	std::string read_name;
+	std::string write_name;
+    };	
+
+
+    class PyPipe: public Tango::Pipe,
+                  public _Pipe
+    {
+    public:
+        PyPipe(const std::string &name, const Tango::DispLevel level, 
+               const Tango::PipeWriteType write=Tango::PIPE_READ):
+	    Tango::Pipe(name, level, write)
+	{}
+
+        ~PyPipe() {}
+
+        virtual void read(Tango::DeviceImpl *dev)
+	{ _Pipe::read(dev, *this); }
+
+	virtual bool is_allowed(Tango::DeviceImpl *dev, Tango::PipeReqType rt)
+        { return _Pipe::is_allowed(dev, rt); }
+  };
+
+    class PyWPipe: public Tango::WPipe,
+                   public _Pipe 
+    {
+    public:
+        PyWPipe(const std::string &name, const Tango::DispLevel level):
+	    Tango::WPipe(name, level)
+	{}
+
+        ~PyWPipe() {}
+
+        virtual void read(Tango::DeviceImpl *dev)
+	{ _Pipe::read(dev, *this); }
+
+        virtual void write(Tango::DeviceImpl *dev)
+	{ _Pipe::write(dev, *this); }
+
+	virtual bool is_allowed(Tango::DeviceImpl *dev, Tango::PipeReqType rt)
+        { return _Pipe::is_allowed(dev, rt); }
+  };
+
+}} // namespace PyTango::Pipe
+
+
+
diff --git a/src/boost/cpp/server/subdev.cpp b/ext/server/subdev.cpp
similarity index 96%
rename from src/boost/cpp/server/subdev.cpp
rename to ext/server/subdev.cpp
index e72e4bc..82533b3 100644
--- a/src/boost/cpp/server/subdev.cpp
+++ b/ext/server/subdev.cpp
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
diff --git a/src/boost/cpp/server/tango_util.cpp b/ext/server/tango_util.cpp
similarity index 98%
rename from src/boost/cpp/server/tango_util.cpp
rename to ext/server/tango_util.cpp
index 157afc2..f034d8d 100644
--- a/src/boost/cpp/server/tango_util.cpp
+++ b/ext/server/tango_util.cpp
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
@@ -280,7 +280,6 @@ void export_util()
         .def("server_init", &PyUtil::server_init, server_init_overload())
         .def("server_run", &PyUtil::server_run)
         .def("server_cleanup", &Tango::Util::server_cleanup)
-        .def("shutdown_server", &Tango::Util::shutdown_server)
         .def("trigger_cmd_polling", &Tango::Util::trigger_cmd_polling)
         .def("trigger_attr_polling", &Tango::Util::trigger_attr_polling)
         .def("set_polling_threads_pool_size", &Tango::Util::set_polling_threads_pool_size)
diff --git a/src/boost/cpp/server/user_default_attr_prop.cpp b/ext/server/user_default_attr_prop.cpp
similarity index 95%
rename from src/boost/cpp/server/user_default_attr_prop.cpp
rename to ext/server/user_default_attr_prop.cpp
index 6c8aabd..d176a6a 100644
--- a/src/boost/cpp/server/user_default_attr_prop.cpp
+++ b/ext/server/user_default_attr_prop.cpp
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
@@ -44,7 +44,8 @@ void export_user_default_attr_prop()
         .def("set_archive_event_abs_change", &Tango::UserDefaultAttrProp::set_archive_event_abs_change)
         .def("set_archive_event_rel_change", &Tango::UserDefaultAttrProp::set_archive_event_rel_change)
         .def("set_archive_event_period", &Tango::UserDefaultAttrProp::set_archive_event_period)
-        
+        .def("_set_enum_labels", &Tango::UserDefaultAttrProp::set_enum_labels)
+
         .def_readwrite("label", &Tango::UserDefaultAttrProp::label)
         .def_readwrite("description", &Tango::UserDefaultAttrProp::description)
         .def_readwrite("unit", &Tango::UserDefaultAttrProp::unit)
@@ -65,6 +66,7 @@ void export_user_default_attr_prop()
         .def_readwrite("archive_abs_change", &Tango::UserDefaultAttrProp::archive_abs_change)
         .def_readwrite("archive_rel_change", &Tango::UserDefaultAttrProp::archive_rel_change)
         .def_readwrite("archive_period", &Tango::UserDefaultAttrProp::archive_period)
+        .def_readwrite("enum_labels", &Tango::UserDefaultAttrProp::enum_labels)
     ;
 
 }
diff --git a/src/boost/cpp/attribute_dimension.cpp b/ext/server/user_default_pipe_prop.cpp
similarity index 64%
rename from src/boost/cpp/attribute_dimension.cpp
rename to ext/server/user_default_pipe_prop.cpp
index 1e03935..f62ac2f 100644
--- a/src/boost/cpp/attribute_dimension.cpp
+++ b/ext/server/user_default_pipe_prop.cpp
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
@@ -14,10 +14,12 @@
 
 using namespace boost::python;
 
-void export_attribute_dimension()
+void export_user_default_pipe_prop()
 {
-    class_<Tango::AttributeDimension>("AttributeDimension")
-        .def_readonly("dim_x", &Tango::AttributeDimension::dim_x)
-        .def_readonly("dim_y", &Tango::AttributeDimension::dim_y)
+    class_<Tango::UserDefaultPipeProp, boost::noncopyable>("UserDefaultPipeProp")
+        .def("set_label", &Tango::UserDefaultPipeProp::set_label)
+        .def("set_description", &Tango::UserDefaultPipeProp::set_description)
     ;
+
 }
+
diff --git a/src/boost/cpp/server/wattribute.cpp b/ext/server/wattribute.cpp
similarity index 99%
rename from src/boost/cpp/server/wattribute.cpp
rename to ext/server/wattribute.cpp
index d672d86..a8ee94a 100644
--- a/src/boost/cpp/server/wattribute.cpp
+++ b/ext/server/wattribute.cpp
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
diff --git a/src/boost/cpp/server/wattribute_numpy.hpp b/ext/server/wattribute_numpy.hpp
similarity index 97%
rename from src/boost/cpp/server/wattribute_numpy.hpp
rename to ext/server/wattribute_numpy.hpp
index d5c8b11..bc9977e 100644
--- a/src/boost/cpp/server/wattribute_numpy.hpp
+++ b/ext/server/wattribute_numpy.hpp
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
diff --git a/src/boost/cpp/tango_numpy.h b/ext/tango_numpy.h
similarity index 96%
rename from src/boost/cpp/tango_numpy.h
rename to ext/tango_numpy.h
index 56f29e5..65bceca 100644
--- a/src/boost/cpp/tango_numpy.h
+++ b/ext/tango_numpy.h
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
@@ -59,6 +59,7 @@
     //Unassigned: Tango::DEV_ENCODED
     DEF_TANGO2NUMPY(Tango::DEV_LONG64, NPY_INT64 );
     DEF_TANGO2NUMPY(Tango::DEV_ULONG64, NPY_UINT64 );
+    DEF_TANGO2NUMPY(Tango::DEV_ENUM, NPY_INT16 );
 
 /// @name Conversion from a Tango array type name to the scalar numpy name
 /// For types like DEVVAR_DOUBLEARRAY. This is ended with ARRAY, except
diff --git a/src/boost/cpp/tgutils.h b/ext/tgutils.h
similarity index 90%
rename from src/boost/cpp/tgutils.h
rename to ext/tgutils.h
index 30ffdbf..38b7705 100644
--- a/src/boost/cpp/tgutils.h
+++ b/ext/tgutils.h
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
@@ -14,8 +14,11 @@
 #include <cassert>
 #include <tango.h>
 
-#ifndef TgLibVersNb
-#   define TgLibVersNb 80005
+#ifndef TANGO_VERSION_NB
+#define TANGO_VERSION_NB \
+    TANGO_VERSION_MAJOR*10000 +	\
+    TANGO_VERSION_MINOR*100   + \
+    TANGO_VERSION_MINOR
 #endif
 
 namespace Tango
@@ -63,18 +66,24 @@ struct tango_name2scalarname
         enum {value = Tango:: scalarname}; \
     };
 
-#define DEF_TANGO_NAME2TYPE(tangoname, tangotype) \
+#define DEF_TANGO_NAME2TYPE__(tangoname, tangotype) \
     template<> \
     struct tango_name2type<Tango:: tangoname> \
     { \
         typedef tangotype Type; \
-    }; \
+    };
+
+#define DEF_TANGO_TYPE2NAME__(tangotype, tangoname) \
     template<> \
     struct tango_type2name<tangotype> \
     { \
         enum {value = Tango:: tangoname}; \
     };
 
+#define DEF_TANGO_NAME2TYPE(tangoname, tangotype) \
+    DEF_TANGO_NAME2TYPE__(tangoname, tangotype) \
+    DEF_TANGO_TYPE2NAME__(tangotype, tangoname)
+
 #define DEF_TANGO_NAME2ARRAY(tangoname, tangotype, simple) \
     template<> \
     struct tango_name2arraytype<Tango:: tangoname> \
@@ -104,6 +113,12 @@ TSD_SIMPLE__( DEV_LONG64,               Tango::DevLong64 ,  Tango::DevVarLong64A
 TSD_SIMPLE__( DEV_ULONG64,              Tango::DevULong64,  Tango::DevVarULong64Array   );
 TSD_SIMPLE__( DEV_STATE,                Tango::DevState  ,  Tango::DevVarStateArray   );
 TSD_SIMPLE__( DEV_ENCODED,              Tango::DevEncoded,  Tango::DevVarEncodedArray     );
+TSD_SIMPLE__( DEV_PIPE_BLOB,            Tango::DevPipeBlob, void  );
+
+// since enum type is implemented as a short we cannot use tango_type2name because
+// it will conflict with the DevShort template declaration
+DEF_TANGO_NAME2TYPE__( DEV_ENUM,        Tango::DevEnum);
+DEF_TANGO_NAME2ARRAY( DEV_ENUM, Tango::DevVarShortArray, Tango::DevEnum);
 
 TSD_SIMPLE__( DEV_VOID,                 void             , void);
 
@@ -120,7 +135,7 @@ TSD_ARRAY__(  DEVVAR_DOUBLESTRINGARRAY, void             ,  Tango::DevVarDoubleS
 TSD_ARRAY__(  DEVVAR_BOOLEANARRAY,      Tango::DevBoolean,  Tango::DevVarBooleanArray);
 TSD_ARRAY__(  DEVVAR_LONG64ARRAY,       Tango::DevLong64 ,  Tango::DevVarLong64Array);
 TSD_ARRAY__(  DEVVAR_ULONG64ARRAY,      Tango::DevULong64,  Tango::DevVarULong64Array);
-
+TSD_ARRAY__(  DEVVAR_STATEARRAY,        Tango::DevState  ,  Tango::DevVarStateArray);
  
 DEF_TANGO_SCALAR_ARRAY_NAMES( DEV_SHORT,   DEVVAR_SHORTARRAY );
 DEF_TANGO_SCALAR_ARRAY_NAMES( DEV_LONG,    DEVVAR_LONGARRAY );
@@ -133,7 +148,7 @@ DEF_TANGO_SCALAR_ARRAY_NAMES( DEV_ULONG,   DEVVAR_ULONGARRAY );
 //DEF_TANGO_SCALAR_ARRAY_NAMES( DEV_UCHAR,   DEVVAR_CHARARRAY );
 DEF_TANGO_SCALAR_ARRAY_NAMES( DEV_LONG64,  DEVVAR_LONG64ARRAY );
 DEF_TANGO_SCALAR_ARRAY_NAMES( DEV_ULONG64, DEVVAR_ULONG64ARRAY );
-// DEF_TANGO_SCALAR_ARRAY_NAMES( DEV_STATE,   DEVVAR_STATEARRAY );
+DEF_TANGO_SCALAR_ARRAY_NAMES( DEV_STATE,   DEVVAR_STATEARRAY );
 // DEF_TANGO_SCALAR_ARRAY_NAMES( DEV_ENCODED, DEVVAR_ENCODEDARRAY );
 //DEF_TANGO_SCALAR_ARRAY_NAMES( DEV_,        DEVVAR_LONGSTRINGARRAY );
 //DEF_TANGO_SCALAR_ARRAY_NAMES( DEV_,        DEVVAR_DOUBLESTRINGARRAY );
@@ -184,6 +199,7 @@ DEF_TANGO_SCALAR_ARRAY_NAMES( DEV_ULONG64, DEVVAR_ULONG64ARRAY );
         __TANGO_DEPEND_ON_TYPE_AUX_ID(DEV_ULONG64, DOIT) \
         __TANGO_DEPEND_ON_TYPE_AUX_ID(DEV_STATE, DOIT) \
         __TANGO_DEPEND_ON_TYPE_AUX_ID(DEV_ENCODED, DOIT) \
+        __TANGO_DEPEND_ON_TYPE_AUX_ID(DEV_ENUM, DOIT) \
         default: \
             assert(false); \
     } } else (void)0
@@ -203,6 +219,7 @@ DEF_TANGO_SCALAR_ARRAY_NAMES( DEV_ULONG64, DEVVAR_ULONG64ARRAY );
         __TANGO_DEPEND_ON_TYPE_AUX_NAME(DEV_ULONG64, DOIT) \
         __TANGO_DEPEND_ON_TYPE_AUX_NAME(DEV_STATE, DOIT) \
         __TANGO_DEPEND_ON_TYPE_AUX_NAME(DEV_ENCODED, DOIT) \
+        __TANGO_DEPEND_ON_TYPE_AUX_NAME(DEV_ENUM, DOIT) \
         default: \
             assert(false); \
     } } else (void)0
@@ -225,6 +242,7 @@ DEF_TANGO_SCALAR_ARRAY_NAMES( DEV_ULONG64, DEVVAR_ULONG64ARRAY );
         __TANGO_DEPEND_ON_TYPE_AUX_ID(DEV_USHORT, DOIT_SIMPLE) \
         __TANGO_DEPEND_ON_TYPE_AUX_ID(DEV_ULONG, DOIT_SIMPLE) \
         __TANGO_DEPEND_ON_TYPE_AUX_ID(DEV_STRING, DOIT_SIMPLE) \
+        __TANGO_DEPEND_ON_TYPE_AUX_ID(DEV_STATE, DOIT_SIMPLE) \
         __TANGO_DEPEND_ON_TYPE_AUX_ID(DEVVAR_CHARARRAY, DOIT_ARRAY) \
         __TANGO_DEPEND_ON_TYPE_AUX_ID(DEVVAR_SHORTARRAY, DOIT_ARRAY) \
         __TANGO_DEPEND_ON_TYPE_AUX_ID(DEVVAR_LONGARRAY, DOIT_ARRAY) \
@@ -235,7 +253,7 @@ DEF_TANGO_SCALAR_ARRAY_NAMES( DEV_ULONG64, DEVVAR_ULONG64ARRAY );
         __TANGO_DEPEND_ON_TYPE_AUX_ID(DEVVAR_STRINGARRAY, DOIT_ARRAY) \
         __TANGO_DEPEND_ON_TYPE_AUX_ID(DEVVAR_LONGSTRINGARRAY, DOIT_ARRAY) \
         __TANGO_DEPEND_ON_TYPE_AUX_ID(DEVVAR_DOUBLESTRINGARRAY, DOIT_ARRAY) \
-        __TANGO_DEPEND_ON_TYPE_AUX_ID(DEV_STATE, DOIT_SIMPLE) \
+        __TANGO_DEPEND_ON_TYPE_AUX_ID(DEVVAR_STATEARRAY, DOIT_ARRAY) \
 /*        __TANGO_DEPEND_ON_TYPE_AUX_ID(CONST_DEV_STRING, DOIT_SIMPLE) */\
 /*        __TANGO_DEPEND_ON_TYPE_AUX_ID(DEVVAR_BOOLEANARRAY, DOIT_ARRAY) */\
 /*        __TANGO_DEPEND_ON_TYPE_AUX_ID(DEV_UCHAR, DOIT_SIMPLE)*/ \
@@ -245,6 +263,8 @@ DEF_TANGO_SCALAR_ARRAY_NAMES( DEV_ULONG64, DEVVAR_ULONG64ARRAY );
         __TANGO_DEPEND_ON_TYPE_AUX_ID(DEVVAR_ULONG64ARRAY, DOIT_ARRAY) \
 /*        __TANGO_DEPEND_ON_TYPE_AUX_ID(DEV_INT, DOIT_SIMPLE) */\
         __TANGO_DEPEND_ON_TYPE_AUX_ID(DEV_ENCODED, DOIT_SIMPLE) \
+        __TANGO_DEPEND_ON_TYPE_AUX_ID(DEV_PIPE_BLOB, DOIT_SIMPLE) \
+        __TANGO_DEPEND_ON_TYPE_AUX_ID(DEV_ENUM, DOIT_SIMPLE) \
         default: \
             assert(false); \
     } } else (void)0
@@ -264,6 +284,7 @@ DEF_TANGO_SCALAR_ARRAY_NAMES( DEV_ULONG64, DEVVAR_ULONG64ARRAY );
 /*        __TANGO_DEPEND_ON_TYPE_AUX_ID(DEVVAR_BOOLEANARRAY, DOIT_ARRAY) */\
         __TANGO_DEPEND_ON_TYPE_AUX_ID(DEVVAR_LONG64ARRAY, DOIT_ARRAY) \
         __TANGO_DEPEND_ON_TYPE_AUX_ID(DEVVAR_ULONG64ARRAY, DOIT_ARRAY) \
+        __TANGO_DEPEND_ON_TYPE_AUX_ID(DEVVAR_STATEARRAY, DOIT_ARRAY) \
         default: \
             assert(false); \
     } } else (void)0
@@ -290,6 +311,7 @@ DEF_TANGO_SCALAR_ARRAY_NAMES( DEV_ULONG64, DEVVAR_ULONG64ARRAY );
         __TANGO_DEPEND_ON_TYPE_AUX_NAME(DEVVAR_LONGSTRINGARRAY, DOIT_ARRAY) \
         __TANGO_DEPEND_ON_TYPE_AUX_NAME(DEVVAR_DOUBLESTRINGARRAY, DOIT_ARRAY) \
         __TANGO_DEPEND_ON_TYPE_AUX_NAME(DEV_STATE, DOIT_SIMPLE) \
+        __TANGO_DEPEND_ON_TYPE_AUX_NAME(DEVVAR_STATEARRAY, DOIT_ARRAY) \
 /*        __TANGO_DEPEND_ON_TYPE_AUX_NAME(CONST_DEV_STRING, DOIT_SIMPLE) */\
 /*        __TANGO_DEPEND_ON_TYPE_AUX_NAME(DEVVAR_BOOLEANARRAY, DOIT_ARRAY) */\
 /*        __TANGO_DEPEND_ON_TYPE_AUX_NAME(DEV_UCHAR, DOIT_SIMPLE)*/ \
@@ -299,6 +321,8 @@ DEF_TANGO_SCALAR_ARRAY_NAMES( DEV_ULONG64, DEVVAR_ULONG64ARRAY );
         __TANGO_DEPEND_ON_TYPE_AUX_NAME(DEVVAR_ULONG64ARRAY, DOIT_ARRAY) \
 /*        __TANGO_DEPEND_ON_TYPE_AUX_NAME(DEV_INT, DOIT_SIMPLE) */\
         __TANGO_DEPEND_ON_TYPE_AUX_NAME(DEV_ENCODED, DOIT_SIMPLE) \
+        __TANGO_DEPEND_ON_TYPE_AUX_NAME(DEV_PIPE_BLOB, DOIT_SIMPLE) \
+        __TANGO_DEPEND_ON_TYPE_AUX_NAME(DEV_ENUM, DOIT_SIMPLE) \
         default: \
             assert(false); \
     } } else (void)0
@@ -320,6 +344,7 @@ DEF_TANGO_SCALAR_ARRAY_NAMES( DEV_ULONG64, DEVVAR_ULONG64ARRAY );
         __TANGO_DEPEND_ON_TYPE_AUX_ID(DEV_UCHAR, DOIT) \
         __TANGO_DEPEND_ON_TYPE_AUX_ID(DEV_LONG64, DOIT) \
         __TANGO_DEPEND_ON_TYPE_AUX_ID(DEV_ULONG64, DOIT) \
+        __TANGO_DEPEND_ON_TYPE_AUX_ID(DEV_ENUM, DOIT) \
         default: \
             assert(false); \
     } } else (void)0
@@ -335,6 +360,7 @@ DEF_TANGO_SCALAR_ARRAY_NAMES( DEV_ULONG64, DEVVAR_ULONG64ARRAY );
         __TANGO_DEPEND_ON_TYPE_AUX_NAME(DEV_UCHAR, DOIT) \
         __TANGO_DEPEND_ON_TYPE_AUX_NAME(DEV_LONG64, DOIT) \
         __TANGO_DEPEND_ON_TYPE_AUX_NAME(DEV_ULONG64, DOIT) \
+        __TANGO_DEPEND_ON_TYPE_AUX_NAME(DEV_ENUM, DOIT) \
         default: \
             assert(false); \
     } } else (void)0
diff --git a/src/boost/cpp/time_val.cpp b/ext/time_val.cpp
similarity index 92%
rename from src/boost/cpp/time_val.cpp
rename to ext/time_val.cpp
index 93f6be1..fbef66f 100644
--- a/src/boost/cpp/time_val.cpp
+++ b/ext/time_val.cpp
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
diff --git a/src/boost/cpp/to_py.cpp b/ext/to_py.cpp
similarity index 72%
rename from src/boost/cpp/to_py.cpp
rename to ext/to_py.cpp
index 3c2600d..47c3bfd 100644
--- a/src/boost/cpp/to_py.cpp
+++ b/ext/to_py.cpp
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
@@ -176,6 +176,40 @@ object to_py(const Tango::AttributeConfig_3 &attr_conf, object py_attr_conf)
     return py_attr_conf;
 }
 
+object to_py(const Tango::AttributeConfig_5 &attr_conf, object py_attr_conf)
+{
+    if(py_attr_conf.ptr() == Py_None)
+    {
+        PYTANGO_MOD
+        py_attr_conf = pytango.attr("AttributeConfig_5")();
+    }
+
+    py_attr_conf.attr("name") = str(attr_conf.name.in());
+    py_attr_conf.attr("writable") = attr_conf.writable;
+    py_attr_conf.attr("data_format") = attr_conf.data_format;
+    py_attr_conf.attr("data_type") = attr_conf.data_type;
+    py_attr_conf.attr("memorized") = attr_conf.memorized;
+    py_attr_conf.attr("mem_init") = attr_conf.mem_init;
+    py_attr_conf.attr("max_dim_x") = attr_conf.max_dim_x;
+    py_attr_conf.attr("max_dim_y") = attr_conf.max_dim_y;
+    py_attr_conf.attr("description") = str(attr_conf.description.in());
+    py_attr_conf.attr("label") = str(attr_conf.label.in());
+    py_attr_conf.attr("unit") = str(attr_conf.unit.in());
+    py_attr_conf.attr("standard_unit") = str(attr_conf.standard_unit.in());
+    py_attr_conf.attr("display_unit") = str(attr_conf.display_unit.in());
+    py_attr_conf.attr("format") = str(attr_conf.format.in());
+    py_attr_conf.attr("min_value") = str(attr_conf.min_value.in());
+    py_attr_conf.attr("max_value") = str(attr_conf.max_value.in());
+    py_attr_conf.attr("writable_attr_name") = str(attr_conf.writable_attr_name.in());
+    py_attr_conf.attr("level") = attr_conf.level;
+    py_attr_conf.attr("root_attr_name") = str(attr_conf.root_attr_name.in());
+    py_attr_conf.attr("enum_labels") = CORBA_sequence_to_list<Tango::DevVarStringArray>::to_list(attr_conf.enum_labels);
+    py_attr_conf.attr("att_alarm") = to_py(attr_conf.att_alarm);
+    py_attr_conf.attr("event_prop") = to_py(attr_conf.event_prop);
+    py_attr_conf.attr("extensions") = CORBA_sequence_to_list<Tango::DevVarStringArray>::to_list(attr_conf.extensions);
+    py_attr_conf.attr("sys_extensions") = CORBA_sequence_to_list<Tango::DevVarStringArray>::to_list(attr_conf.sys_extensions);
+    return py_attr_conf;
+}
 boost::python::list to_py(const Tango::AttributeConfigList &attr_conf_list)
 {
     boost::python::list py_attr_conf_list;
@@ -211,3 +245,44 @@ boost::python::list to_py(const Tango::AttributeConfigList_3 &attr_conf_list)
     }
     return py_attr_conf_list;
 }
+
+boost::python::list to_py(const Tango::AttributeConfigList_5 &attr_conf_list)
+{
+    boost::python::list py_attr_conf_list;
+    boost::python::object none;
+    for(unsigned long index = 0; index < attr_conf_list.length(); ++index)
+    {
+        const Tango::AttributeConfig_5 &attr_conf = attr_conf_list[index];
+        py_attr_conf_list.append(to_py(attr_conf, none));
+    }
+    return py_attr_conf_list;
+}
+
+object to_py(const Tango::PipeConfig &pipe_conf, object py_pipe_conf)
+{
+    if(py_pipe_conf.ptr() == Py_None)
+    {
+        PYTANGO_MOD
+        py_pipe_conf = pytango.attr("PipeConfig")();
+    }
+
+    py_pipe_conf.attr("name") = str(pipe_conf.name.in());
+    py_pipe_conf.attr("description") = str(pipe_conf.description.in());
+    py_pipe_conf.attr("label") = str(pipe_conf.label.in());
+    py_pipe_conf.attr("level") = pipe_conf.level;
+    py_pipe_conf.attr("writable") = pipe_conf.writable;
+    py_pipe_conf.attr("extensions") = CORBA_sequence_to_list<Tango::DevVarStringArray>::to_list(pipe_conf.extensions);
+    return py_pipe_conf;
+}
+
+boost::python::list to_py(const Tango::PipeConfigList &pipe_conf_list)
+{
+    boost::python::list py_pipe_conf_list;
+    boost::python::object none;
+    for(unsigned long index = 0; index < pipe_conf_list.length(); ++index)
+    {
+        const Tango::PipeConfig &pipe_conf = pipe_conf_list[index];
+        py_pipe_conf_list.append(to_py(pipe_conf, none));
+    }
+    return py_pipe_conf_list;
+}
diff --git a/src/boost/cpp/to_py.h b/ext/to_py.h
similarity index 96%
rename from src/boost/cpp/to_py.h
rename to ext/to_py.h
index 691779c..29c7f19 100644
--- a/src/boost/cpp/to_py.h
+++ b/ext/to_py.h
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
@@ -353,10 +353,19 @@ boost::python::object to_py(const Tango::AttributeConfig_2 &,
                             boost::python::object py_attr_conf);
 boost::python::object to_py(const Tango::AttributeConfig_3 &,
                             boost::python::object py_attr_conf);
+boost::python::object to_py(const Tango::AttributeConfig_5 &,
+                            boost::python::object py_attr_conf);
 
 boost::python::list to_py(const Tango::AttributeConfigList &);
 boost::python::list to_py(const Tango::AttributeConfigList_2 &);
 boost::python::list to_py(const Tango::AttributeConfigList_3 &);
+boost::python::list to_py(const Tango::AttributeConfigList_5 &);
+
+boost::python::object to_py(const Tango::PipeConfig &,
+                            boost::python::object);
+
+boost::python::object to_py(const Tango::PipeConfigList &,
+                            boost::python::object);
 
 template<class T>
 inline boost::python::object to_py_list(const T *seq)
diff --git a/src/boost/cpp/to_py_numpy.hpp b/ext/to_py_numpy.hpp
similarity index 56%
rename from src/boost/cpp/to_py_numpy.hpp
rename to ext/to_py_numpy.hpp
index f5a49c2..1304e94 100644
--- a/src/boost/cpp/to_py_numpy.hpp
+++ b/ext/to_py_numpy.hpp
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
@@ -56,6 +56,12 @@ inline boost::python::object to_py_numpy<Tango::DEVVAR_STRINGARRAY>(const Tango:
 }
 
 template <>
+inline boost::python::object to_py_numpy<Tango::DEVVAR_STATEARRAY>(const Tango::DevVarStateArray* tg_array, boost::python::object parent)
+{
+    return to_py_list(tg_array);
+}
+
+template <>
 inline boost::python::object to_py_numpy<Tango::DEVVAR_LONGSTRINGARRAY>(const Tango::DevVarLongStringArray* tg_array, boost::python::object parent)
 {
     boost::python::list result;
@@ -80,3 +86,68 @@ inline boost::python::object to_py_numpy<Tango::DEVVAR_DOUBLESTRINGARRAY>(const
 // ~Array Extraction
 // -----------------------------------------------------------------------
 
+template <long tangoArrayTypeConst>
+inline boost::python::object to_py_numpy(typename TANGO_const2type(tangoArrayTypeConst)* tg_array, int orphan)
+{
+    static const int typenum = TANGO_const2scalarnumpy(tangoArrayTypeConst);
+
+    if (tg_array == 0) {
+        // Empty
+        PyObject* value = PyArray_SimpleNew(0, 0, typenum);
+        if (!value)
+            boost::python::throw_error_already_set();
+        return boost::python::object(boost::python::handle<>(value));
+    }
+
+    // Create a new numpy.ndarray() object. It uses ch_ptr as the data,
+    // so no costy memory copies when handling big images.
+    int nd = 1;
+    npy_intp dims[1];
+    dims[0]= tg_array->length();
+    void *ch_ptr = (void *)(tg_array->get_buffer(orphan));
+    PyObject* py_array = PyArray_New(&PyArray_Type, nd, dims, typenum, NULL,
+				     ch_ptr, -1, 0, NULL);
+    if (!py_array) {
+        boost::python::throw_error_already_set();
+    }
+
+    return boost::python::object(boost::python::handle<>(py_array));
+}
+
+template <>
+inline boost::python::object to_py_numpy<Tango::DEVVAR_STRINGARRAY>(Tango::DevVarStringArray* tg_array,
+								    int orphan)
+{
+    return to_py_list(tg_array);
+}
+
+template <>
+inline boost::python::object to_py_numpy<Tango::DEVVAR_STATEARRAY>(Tango::DevVarStateArray* tg_array,
+								   int orphan)
+{
+    return to_py_list(tg_array);
+}
+
+template <>
+inline boost::python::object to_py_numpy<Tango::DEVVAR_LONGSTRINGARRAY>(Tango::DevVarLongStringArray* tg_array,
+									int orphan)
+{
+    boost::python::list result;
+
+    result.append(to_py_numpy<Tango::DEVVAR_LONGARRAY>(&tg_array->lvalue, orphan));
+    result.append(to_py_numpy<Tango::DEVVAR_STRINGARRAY>(&tg_array->svalue, orphan));
+
+    return result;
+}
+
+template <>
+inline boost::python::object to_py_numpy<Tango::DEVVAR_DOUBLESTRINGARRAY>(Tango::DevVarDoubleStringArray* tg_array,
+									  int orphan)
+{
+    boost::python::list result;
+
+    result.append(to_py_numpy<Tango::DEVVAR_DOUBLEARRAY>(&tg_array->dvalue, orphan));
+    result.append(to_py_numpy<Tango::DEVVAR_STRINGARRAY>(&tg_array->svalue, orphan));
+
+    return result;
+}
diff --git a/src/boost/cpp/version.cpp b/ext/version.cpp
similarity index 83%
rename from src/boost/cpp/version.cpp
rename to ext/version.cpp
index cfa950e..6f576ae 100644
--- a/src/boost/cpp/version.cpp
+++ b/ext/version.cpp
@@ -1,5 +1,5 @@
 /******************************************************************************
-  This file is part of PyTango (http://www.tinyurl.com/PyTango)
+  This file is part of PyTango (http://pytango.rtfd.io)
 
   Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
   Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
@@ -16,5 +16,5 @@ using namespace boost::python;
 
 void export_version()
 {
-    scope().attr("__tangolib_version__") = TgLibVers;
+    scope().attr("__tangolib_version__") = Tango::TgLibVers;
 }
diff --git a/images/banner.xcf b/images/banner.xcf
new file mode 100644
index 0000000..9bbcc08
Binary files /dev/null and b/images/banner.xcf differ
diff --git a/images/itango_console.png b/images/itango_console.png
new file mode 100644
index 0000000..875d023
Binary files /dev/null and b/images/itango_console.png differ
diff --git a/images/itango_qtconsole.png b/images/itango_qtconsole.png
new file mode 100644
index 0000000..b95235e
Binary files /dev/null and b/images/itango_qtconsole.png differ
diff --git a/images/logo-2009.xcf b/images/logo-2009.xcf
new file mode 100644
index 0000000..341f6d4
Binary files /dev/null and b/images/logo-2009.xcf differ
diff --git a/images/logo-2010.png b/images/logo-2010.png
new file mode 100644
index 0000000..cd21332
Binary files /dev/null and b/images/logo-2010.png differ
diff --git a/images/logo-2010.xcf b/images/logo-2010.xcf
new file mode 100644
index 0000000..70fecce
Binary files /dev/null and b/images/logo-2010.xcf differ
diff --git a/images/logo-medium-2009.png b/images/logo-medium-2009.png
new file mode 100644
index 0000000..60ea495
Binary files /dev/null and b/images/logo-medium-2009.png differ
diff --git a/images/logo-medium-2010.png b/images/logo-medium-2010.png
new file mode 100644
index 0000000..4877109
Binary files /dev/null and b/images/logo-medium-2010.png differ
diff --git a/images/logo-small-2009.png b/images/logo-small-2009.png
new file mode 100644
index 0000000..06b4527
Binary files /dev/null and b/images/logo-small-2009.png differ
diff --git a/images/logo-small-2010.png b/images/logo-small-2010.png
new file mode 100644
index 0000000..696c926
Binary files /dev/null and b/images/logo-small-2010.png differ
diff --git a/images/tango.jpg b/images/tango.jpg
new file mode 100644
index 0000000..2c84021
Binary files /dev/null and b/images/tango.jpg differ
diff --git a/readthedocs.yml b/readthedocs.yml
new file mode 100644
index 0000000..d5794de
--- /dev/null
+++ b/readthedocs.yml
@@ -0,0 +1,2 @@
+conda:
+    file: doc/environment.yml
\ No newline at end of file
diff --git a/scripts/itango b/scripts/itango
deleted file mode 100755
index 0692811..0000000
--- a/scripts/itango
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/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.
-# ------------------------------------------------------------------------------
-
-"""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 
-   linux '/usr/bin'"""
-
-__all__ = [ "main" ]
-
-__docformat__ = 'restructuredtext'
-    
-def main():
-    import PyTango.ipython
-    PyTango.ipython.run()
-    
-if __name__ == '__main__':
-    main()
diff --git a/setup.cfg b/setup.cfg
new file mode 100644
index 0000000..b483aaa
--- /dev/null
+++ b/setup.cfg
@@ -0,0 +1,7 @@
+[bdist_msi]
+skip_build=True
+
+[bdist_wininst]
+skip_build=True
+title=PyTango 9
+bitmap=doc\logo-medium.bmp
diff --git a/setup.py b/setup.py
index 9899bfb..096885a 100644
--- a/setup.py
+++ b/setup.py
@@ -1,5 +1,5 @@
 # ------------------------------------------------------------------------------
-# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+# This file is part of PyTango (http://pytango.rtfd.io)
 #
 # Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
 # Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
@@ -16,36 +16,24 @@ import struct
 import platform
 import subprocess
 
-from distutils.core import setup, Extension
-from distutils.cmd import Command
+from setuptools import setup, Extension
+from setuptools import Command
+from setuptools.command.build_ext import build_ext as dftbuild_ext
+from setuptools.command.install import install as dftinstall
+
 from distutils.command.build import build as dftbuild
-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
 
 try:
     import sphinx
     import sphinx.util.console
-    sphinx.util.console.color_terminal = lambda : False
+    sphinx.util.console.color_terminal = lambda: False
     from sphinx.setup_command import BuildDoc
 except ImportError:
     sphinx = None
 
 try:
-    import IPython
-    _IPY_ROOT = os.path.dirname(os.path.abspath(IPython.__file__))
-    if V(IPython.__version__) > V('0.10'):
-        import IPython.utils.path
-        get_ipython_dir = IPython.utils.path.get_ipython_dir
-    else:
-        import IPython.genutils
-        get_ipython_dir = IPython.genutils.get_ipython_dir
-    _IPY_LOCAL = str(get_ipython_dir())
-except:
-    IPython = None
-
-try:
     import numpy
 except ImportError:
     numpy = None
@@ -60,7 +48,7 @@ def pkg_config(*packages, **config):
         "-l": "libraries",
     }
     cmd = ["pkg-config", "--cflags-only-I",
-           "--libs-only-L", " ".join(packages)]
+           "--libs-only-L", "--libs-only-l", " ".join(packages)]
     proc = subprocess.Popen(cmd, stdout=subprocess.PIPE)
     result = proc.wait()
     result = str(proc.communicate()[0].decode("utf-8"))
@@ -81,7 +69,7 @@ def abspath(*path):
 
 def get_release_info():
     name = "release"
-    release_dir = abspath('src', 'boost', 'python')
+    release_dir = abspath('tango')
     data = imp.find_module(name, [release_dir])
     release = imp.load_module(name, *data)
     return release.Release
@@ -120,36 +108,8 @@ def has_numpy(with_src=True):
     return ret
 
 
-def get_script_files():
-
-    FILTER_OUT = []  # "winpostinstall.py",
-
-    if os.name != "nt":
-        FILTER_OUT.append("pytango_winpostinstall.py")
-
-    scripts_dir = abspath("scripts")
-    scripts = []
-    items = os.listdir(scripts_dir)
-    for item in items:
-        # avoid hidden files
-        if item.startswith("."):
-            continue
-        abs_item = os.path.join(scripts_dir, item)
-        # avoid non files
-        if not os.path.isfile(abs_item):
-            continue
-        if item.endswith('c') and item[:-1] in items:
-            continue
-        # avoid any core dump... of course there isn't any :-) but just in case
-        if item.startswith('core'):
-            continue
-        if item in FILTER_OUT:
-            continue
-        scripts.append('scripts/' + item)
-    return scripts
-
-
-def add_lib(name, dirs, sys_libs, env_name=None, lib_name=None, inc_suffix=None):
+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)
@@ -171,7 +131,7 @@ def add_lib(name, dirs, sys_libs, env_name=None, lib_name=None, inc_suffix=None)
             if os.path.isdir(lib64_dir):
                 lib_dirs.insert(0, lib64_dir)
         dirs['library_dirs'].extend(lib_dirs)
-        
+
         if lib_name.startswith('lib'):
             lib_name = lib_name[3:]
         dirs['libraries'].append(lib_name)
@@ -179,16 +139,25 @@ def add_lib(name, dirs, sys_libs, env_name=None, lib_name=None, inc_suffix=None)
 
 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") ]
+    user_options = list(dftbuild.user_options)
+
+    # Strip library option
+    user_options.append((
+        'strip-lib',
+        None,
+        "strips the shared library of debugging symbols"
+        " (Unix like systems only)"))
+
+    # No documentation option
+    user_options.append((
+        'no-doc',
+        None,
+        "do not build documentation"))
 
-    boolean_options = dftbuild.boolean_options + ['without-ipython', 'strip-lib', 'no-doc']
+    boolean_options = dftbuild.boolean_options + ['strip-lib', 'no-doc']
 
-    def initialize_options (self):
+    def initialize_options(self):
         dftbuild.initialize_options(self)
-        self.without_ipython = None
         self.strip_lib = None
         self.no_doc = None
 
@@ -200,33 +169,30 @@ class build(dftbuild):
             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 'posix' in os.name:
-                has_objcopy = os.system("type objcopy") == 0
-                if has_objcopy:
-                    d = abspath(self.build_lib, "PyTango")
-                    orig_dir = os.path.abspath(os.curdir)
-                    so = "_PyTango.so"
-                    dbg = so + ".dbg"
-                    try:
-                        os.chdir(d)
-                        is_stripped = os.system('file %s | grep -q "not stripped" || exit 1' % so) != 0
-                        if not is_stripped:
-                            os.system("objcopy --only-keep-debug %s %s" % (so, dbg))
-                            os.system("objcopy --strip-debug --strip-unneeded %s" % (so,))
-                            os.system("objcopy --add-gnu-debuglink=%s %s" % (dbg, so))
-                            os.system("chmod -x %s" % (dbg,))
-                    finally:
-                        os.chdir(orig_dir)
+            self.strip_debug_symbols()
+
+    def strip_debug_symbols(self):
+        if 'posix' not in os.name:
+            return
+        if os.system("type objcopy") != 0:
+            return
+        d = abspath(self.build_lib, "tango")
+        orig_dir = os.path.abspath(os.curdir)
+        so = "_tango.so"
+        dbg = so + ".dbg"
+        try:
+            os.chdir(d)
+            stripped_cmd = 'file %s | grep -q "not stripped" || exit 1' % so
+            not_stripped = os.system(stripped_cmd) == 0
+            if not_stripped:
+                os.system("objcopy --only-keep-debug %s %s" % (so, dbg))
+                os.system("objcopy --strip-debug --strip-unneeded %s" % (so,))
+                os.system("objcopy --add-gnu-debuglink=%s %s" % (dbg, so))
+                os.system("chmod -x %s" % (dbg,))
+        finally:
+            os.chdir(orig_dir)
 
     def has_doc(self):
         if self.no_doc:
@@ -234,7 +200,9 @@ class build(dftbuild):
         if sphinx is None:
             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__)
+            print("Documentation will not be generated:"
+                  " sphinx version (%s) too low."
+                  " Needs 0.6.6" % sphinx.__version__)
             return False
         setup_dir = os.path.dirname(os.path.abspath(__file__))
         return os.path.isdir(os.path.join(setup_dir, 'doc'))
@@ -250,11 +218,13 @@ class build_ext(dftbuild_ext):
             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)
+            # self.compiler.compiler_so = " ".join(compiler_pars)
 
             # mimic tango check to activate C++0x extension
             compiler = self.compiler.compiler
-            proc = subprocess.Popen(compiler + ["-dumpversion"], stdout=subprocess.PIPE)
+            proc = subprocess.Popen(
+                compiler + ["-dumpversion"],
+                stdout=subprocess.PIPE)
             pipe = proc.stdout
             proc.wait()
             gcc_ver = pipe.readlines()[0].decode().strip()
@@ -265,7 +235,7 @@ class build_ext(dftbuild_ext):
     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') ]
+            ext.define_macros += [('PYTANGO_HAS_UNIQUE_PTR', '1')]
         dftbuild_ext.build_extension(self, ext)
 
 
@@ -285,15 +255,21 @@ if sphinx:
 
 class install_html(Command):
 
-    user_options = [
-        ('install-dir=', 'd', 'base directory for installing HTML documentation files')]
+    user_options = []
+
+    # Install directory option
+    user_options.append((
+        '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'))
+        self.set_undefined_options(
+            'install',
+            ('install_html', 'install_dir'))
 
     def run(self):
         build_doc_cmd = self.get_finalized_command('build_doc')
@@ -303,8 +279,13 @@ class install_html(Command):
 
 class install(dftinstall):
 
-    user_options = dftinstall.user_options + \
-        [('install-html=', None, "installation directory for HTML documentation"), ]
+    user_options = list(dftinstall.user_options)
+
+    # HTML directory option
+    user_options.append((
+        'install-html=',
+        None,
+        "installation directory for HTML documentation"))
 
     def initialize_options(self):
         dftinstall.initialize_options(self)
@@ -312,18 +293,19 @@ class install(dftinstall):
 
     def finalize_options(self):
         dftinstall.finalize_options(self)
-        # 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
-        # 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.
+        # 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  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')
+                                             'share', 'doc', 'pytango', 'html')
 
     def has_html(self):
         return sphinx is not None
@@ -333,15 +315,18 @@ class install(dftinstall):
 
 
 def setup_args():
-    macros = []
 
     directories = {
         'include_dirs': [],
         'library_dirs': [],
-        'libraries':    ['tango'],
+        'libraries':    [],
     }
     sys_libs = []
 
+    # Link specifically to libtango version 9
+    tangolib = ':libtango.so.9' if 'linux' in sys.platform else 'tango'
+    directories['libraries'].append(tangolib)
+
     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')
@@ -357,13 +342,16 @@ def setup_args():
                            'mint' in dist_name
             py_ver = platform.python_version_tuple()
             if debian_based:
-                # when building with multiple version of python on debian we need
-                # to link against boost_python-py25/-py26 etc...
+                # 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, py_ver[:2]))
                 boost_library_name += pyver
             elif 'gentoo' in dist_name:
                 boost_library_name += "-" + ".".join(map(str, py_ver[:2]))
+            elif 'fedora' in dist_name or 'centos' in dist_name:
+                if int(py_ver[0]) == 3:
+                    boost_library_name += '3'
     else:
         inc_dir = os.path.join(BOOST_ROOT, 'include')
         lib_dirs = [os.path.join(BOOST_ROOT, 'lib')]
@@ -383,10 +371,11 @@ def setup_args():
     if numpy_c_include is not None:
         directories['include_dirs'].append(numpy_c_include)
 
+    macros = []
     if not has_numpy():
         macros.append(('DISABLE_PYTANGO_NUMPY', None))
     else:
-        macros.append(('PYTANGO_NUMPY_VERSION', '"' + str(numpy.__version__) + '"'))
+        macros.append(('PYTANGO_NUMPY_VERSION', '"%s"' % numpy.__version__))
 
     if 'posix' in os.name:
         directories = pkg_config(*sys_libs, **directories)
@@ -398,41 +387,42 @@ def setup_args():
     please_debug = False
 
     packages = [
-        'PyTango',
-        'PyTango.ipython',
-        'PyTango.ipython.ipython_00_10',
-        'PyTango.ipython.ipython_00_11',
-        'PyTango.ipython.ipython_10_00',
-        'PyTango.databaseds',
-        'PyTango.databaseds.db_access',
+        'tango',
+        'tango.databaseds',
+        'tango.databaseds.db_access',
     ]
 
-    py_modules = []
+    py_modules = [
+        'PyTango',  # Backward compatibilty
+    ]
 
     provides = [
-        'PyTango',
+        'tango',
+        'PyTango',  # Backward compatibilty
     ]
 
     requires = [
         'boost_python (>=1.33)',
-        'numpy (>=1.1)'
+        'numpy (>=1.1)',
+        'six',
+    ]
+
+    install_requires = [
+        'six',
     ]
 
     package_data = {
-        'PyTango' : [],
+        'PyTango': [],
     }
 
-    scripts = get_script_files()
-
     data_files = []
-    if os.name == 'nt':
-        data_files.append(('scripts', ['doc/_static/itango.ico']))
 
     classifiers = [
         'Development Status :: 5 - Production/Stable',
         'Environment :: Other Environment',
         'Intended Audience :: Developers',
-        'License :: OSI Approved :: GNU Library or Lesser General Public License (LGPL)',
+        'License :: OSI Approved ::'
+        ' GNU Library or Lesser General Public License (LGPL)',
         'Natural Language :: English',
         'Operating System :: Microsoft :: Windows',
         'Operating System :: POSIX',
@@ -451,7 +441,7 @@ def setup_args():
     # and then uncommenting this line. Someday maybe this will be
     # automated...
     extra_compile_args = [
-#        '-includesrc/precompiled_header.hpp',
+        # '-include ext/precompiled_header.hpp',
     ]
 
     extra_link_args = [
@@ -461,28 +451,32 @@ def setup_args():
 
     if please_debug:
         extra_compile_args += ['-g', '-O0']
-        extra_link_args += ['-g' , '-O0']
+        extra_link_args += ['-g', '-O0']
 
-    src_dir = abspath('src', 'boost', 'cpp')
+    src_dir = abspath('ext')
     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.sort()
-    _serverfiles = [ os.path.join(server_dir, fname)
-                         for fname in os.listdir(server_dir)
-                             if fname.endswith('.cpp') ]
-    _serverfiles.sort()
-    _cppfiles = _clientfiles + _serverfiles
-
-    include_dirs = uniquify(directories['include_dirs'] + [client_dir, server_dir])
+
+    clientfiles = sorted(
+        os.path.join(client_dir, fname)
+        for fname in os.listdir(client_dir)
+        if fname.endswith('.cpp'))
+
+    serverfiles = sorted(
+        os.path.join(server_dir, fname)
+        for fname in os.listdir(server_dir)
+        if fname.endswith('.cpp'))
+
+    cppfiles = clientfiles + serverfiles
+    directories['include_dirs'].extend([client_dir, server_dir])
+
+    include_dirs = uniquify(directories['include_dirs'])
     library_dirs = uniquify(directories['library_dirs'])
     libraries = uniquify(directories['libraries'])
 
-    _pytango = Extension(
-        name='_PyTango',
-        sources=_cppfiles,
+    pytango_ext = Extension(
+        name='_tango',
+        sources=cppfiles,
         include_dirs=include_dirs,
         library_dirs=library_dirs,
         libraries=libraries,
@@ -492,19 +486,22 @@ def setup_args():
         language='c++',
         depends=[])
 
-    cmdclass = {'build'        : build,
-                'build_ext'    : build_ext,
-                'install_html' : install_html,
-                'install'      : install }
+    cmdclass = {
+        'build': build,
+        'build_ext': build_ext,
+        'install_html': install_html,
+        'install': install}
 
     if sphinx:
         cmdclass['build_doc'] = build_doc
 
+    long_description = open('README.rst').read()
+
     opts = dict(
-        name='PyTango',
+        name='pytango',
         version=Release.version,
         description=Release.description,
-        long_description=Release.long_description,
+        long_description=long_description,
         author=author[0],
         author_email=author[1],
         url=Release.url,
@@ -512,21 +509,21 @@ def setup_args():
         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],
+        install_requires=install_requires,
+        ext_package='tango',
+        ext_modules=[pytango_ext],
         cmdclass=cmdclass)
 
     return opts
 
+
 def main():
     return setup(**setup_args())
 
diff --git a/src/boost/cpp/constants.cpp b/src/boost/cpp/constants.cpp
deleted file mode 100644
index d45c9d5..0000000
--- a/src/boost/cpp/constants.cpp
+++ /dev/null
@@ -1,290 +0,0 @@
-/******************************************************************************
-  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>
-#include "tango_numpy.h"
-
-using namespace boost::python;
-
-long TANGO_VERSION_HEX;
-
-void export_constants()
-{
-    object consts_module(handle<>(borrowed(PyImport_AddModule("PyTango.constants"))));
-    scope().attr("constants") = consts_module;
-    scope consts_scope = consts_module;
-    
-    consts_scope.attr("__doc__") = "module containing several Tango constants.\n"
-        "\nNew in PyTango 7.0.0";
-
-#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;
-#ifdef PYTANGO_NUMPY_VERSION
-    consts_scope.attr("NUMPY_VERSION") = PYTANGO_NUMPY_VERSION;
-#else
-    consts_scope.attr("NUMPY_VERSION") = "0.0.0";
-#endif
-#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
-    //
-    
-    //
-    // Some general interest define
-    //
-    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;
-    consts_scope.attr("DefaultPollRingDepth") = DefaultPollRingDepth;
-    
-    consts_scope.attr("InitialOutput") = InitialOutput;
-    consts_scope.attr("DSDeviceDomain") = DSDeviceDomain;
-    consts_scope.attr("DefaultDocUrl") = DefaultDocUrl;
-    consts_scope.attr("EnvVariable") = EnvVariable;
-    consts_scope.attr("DbObjName") = DbObjName;
-    
-    // Changed in tango 8 from DescNotSet to NotSet. We keep the old constant
-    // to try to maintain backward compatibility
-    consts_scope.attr("DescNotSet") = NotSet;
-    consts_scope.attr("NotSet") = NotSet;
-    
-    consts_scope.attr("ResNotDefined") = ResNotDefined;
-    consts_scope.attr("MessBoxTitle") = MessBoxTitle;
-    consts_scope.attr("StatusNotSet") = StatusNotSet;
-    
-    consts_scope.attr("DefaultWritAttrProp") = DefaultWritAttrProp;
-    consts_scope.attr("AllAttr") = AllAttr;
-    consts_scope.attr("AllAttr_3") = AllAttr_3;
-    
-    consts_scope.attr("PollCommand") = PollCommand;
-    consts_scope.attr("PollAttribute") = PollAttribute;
-    
-    consts_scope.attr("MIN_POLL_PERIOD") = MIN_POLL_PERIOD;
-    consts_scope.attr("DELTA_T") = DELTA_T;
-    consts_scope.attr("MIN_DELTA_WORK") = MIN_DELTA_WORK;
-    consts_scope.attr("TIME_HEARTBEAT") = TIME_HEARTBEAT;
-    consts_scope.attr("POLL_LOOP_NB") = POLL_LOOP_NB;
-    consts_scope.attr("ONE_SECOND") = ONE_SECOND;
-    consts_scope.attr("DISCARD_THRESHOLD") = DISCARD_THRESHOLD;
-    
-    consts_scope.attr("DEFAULT_TIMEOUT") = DEFAULT_TIMEOUT;
-    consts_scope.attr("DEFAULT_POLL_OLD_FACTOR") = DEFAULT_POLL_OLD_FACTOR;
-    
-    consts_scope.attr("TG_IMP_MINOR_TO") = TG_IMP_MINOR_TO;
-    consts_scope.attr("TG_IMP_MINOR_DEVFAILED") = TG_IMP_MINOR_DEVFAILED;
-    consts_scope.attr("TG_IMP_MINOR_NON_DEVFAILED") = TG_IMP_MINOR_NON_DEVFAILED;
-    
-    consts_scope.attr("TANGO_PY_MOD_NAME") = TANGO_PY_MOD_NAME;
-    consts_scope.attr("DATABASE_CLASS") = DATABASE_CLASS;
-    
-    //
-    // Event related define
-    //
-    
-    consts_scope.attr("EVENT_HEARTBEAT_PERIOD") = EVENT_HEARTBEAT_PERIOD;
-    consts_scope.attr("EVENT_RESUBSCRIBE_PERIOD") = EVENT_RESUBSCRIBE_PERIOD;
-    consts_scope.attr("DEFAULT_EVENT_PERIOD") = DEFAULT_EVENT_PERIOD;
-    consts_scope.attr("DELTA_PERIODIC") = DELTA_PERIODIC;
-    consts_scope.attr("DELTA_PERIODIC_LONG") = DELTA_PERIODIC_LONG;
-    consts_scope.attr("HEARTBEAT") = HEARTBEAT;
-    
-    //
-    // Locking feature related defines
-    //
-    
-    consts_scope.attr("DEFAULT_LOCK_VALIDITY") = DEFAULT_LOCK_VALIDITY;
-    consts_scope.attr("DEVICE_UNLOCKED_REASON") = DEVICE_UNLOCKED_REASON;
-    consts_scope.attr("MIN_LOCK_VALIDITY") = MIN_LOCK_VALIDITY;
-    
-    //
-    // Client timeout as defined by omniORB4.0.0
-    //
-    
-    consts_scope.attr("CLNT_TIMEOUT_STR") = CLNT_TIMEOUT_STR;
-    consts_scope.attr("CLNT_TIMEOUT") = CLNT_TIMEOUT;
-    
-    //
-    // Connection and call timeout for database device
-    //
-    
-    consts_scope.attr("DB_CONNECT_TIMEOUT") = DB_CONNECT_TIMEOUT;
-    consts_scope.attr("DB_RECONNECT_TIMEOUT") = DB_RECONNECT_TIMEOUT;
-    consts_scope.attr("DB_TIMEOUT") = DB_TIMEOUT;
-    consts_scope.attr("DB_START_PHASE_RETRIES") = DB_START_PHASE_RETRIES;
-    
-    //
-    // Time to wait before trying to reconnect after
-    // a connevtion failure
-    //
-    consts_scope.attr("RECONNECTION_DELAY") = RECONNECTION_DELAY;
-    
-    //
-    // Access Control related defines
-    // WARNING: these string are also used within the Db stored procedure
-    // introduced in Tango V6.1. If you chang eit here, don't forget to
-    // also update the stored procedure
-    //
-    
-    consts_scope.attr("CONTROL_SYSTEM") = CONTROL_SYSTEM;
-    consts_scope.attr("SERVICE_PROP_NAME") = SERVICE_PROP_NAME;
-    consts_scope.attr("ACCESS_SERVICE") = ACCESS_SERVICE;
-    
-    //
-    // Polling threads pool related defines
-    //
-    
-    consts_scope.attr("DEFAULT_POLLING_THREADS_POOL_SIZE") = DEFAULT_POLLING_THREADS_POOL_SIZE;
-    
-    //
-    // Max transfer size 256 MBytes (in byte). Needed by omniORB
-    //
-    
-    consts_scope.attr("MAX_TRANSFER_SIZE") = MAX_TRANSFER_SIZE;
-    
-    //
-    // Tango name length
-    //
-    
-    consts_scope.attr("MaxServerNameLength") = MaxServerNameLength;
-    
-    //
-    // Files used to retrieve env. variables
-    //
-    
-    consts_scope.attr("USER_ENV_VAR_FILE") = USER_ENV_VAR_FILE;
-    
-    consts_scope.attr("kLogTargetConsole") = kLogTargetConsole;
-    consts_scope.attr("kLogTargetFile") = kLogTargetFile;
-    consts_scope.attr("kLogTargetDevice") = kLogTargetDevice;
-    consts_scope.attr("kLogTargetSep") = kLogTargetSep;
-    
-    consts_scope.attr("AlrmValueNotSpec") = AlrmValueNotSpec;
-    consts_scope.attr("AssocWritNotSpec") = AssocWritNotSpec;
-    consts_scope.attr("LabelNotSpec") = LabelNotSpec;
-    consts_scope.attr("DescNotSpec") = DescNotSpec;
-    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;
- 
-#ifdef TANGO_LONG64
-    consts_scope.attr("TANGO_LONG32") = false;
-    consts_scope.attr("TANGO_LONG64") = true;
-#else
-    consts_scope.attr("TANGO_LONG32") = true;
-    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;
-
-}
diff --git a/src/boost/cpp/precompiled_header.cpp b/src/boost/cpp/precompiled_header.cpp
deleted file mode 100644
index 1b7634d..0000000
--- a/src/boost/cpp/precompiled_header.cpp
+++ /dev/null
@@ -1,12 +0,0 @@
-/******************************************************************************
-  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"
\ No newline at end of file
diff --git a/src/boost/python/green.py b/src/boost/python/green.py
deleted file mode 100644
index a0ec36f..0000000
--- a/src/boost/python/green.py
+++ /dev/null
@@ -1,191 +0,0 @@
-# ------------------------------------------------------------------------------
-# 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",
-           "get_event_loop", "get_gevent_event_loop",
-           "result", "submitable", "green", "green_cb"]
-
-__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_gevent import get_event_loop as get_gevent_event_loop
-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 __current_green_mode == green_mode:
-        return
-    if green_mode == GreenMode.Gevent:
-        # check if we can change to gevent mode
-        import PyTango.gevent
-    elif green_mode == GreenMode.Futures:
-        # check if we can change to futures mode
-        import PyTango.futures
-        
-    __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,
-}
-
-__event_loop_map = {
-    GreenMode.Gevent:      get_gevent_event_loop,
-}
-
-def get_executor(mode):
-    return __executor_map[mode]()
-
-def get_submitter(mode):
-    return __submit_map[mode]
-
-def submit(mode, fn, *args, **kwargs):
-    return get_submitter(mode)(fn, *args, **kwargs)
-
-spawn = submit
-
-def get_event_loop(mode):
-    f = __event_loop_map.get(mode)
-    if f:
-        return f()
-
-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     
-
-def green_cb(fn, green_mode=None):
-    """return a green verion of the given callback."""
-
-    @wraps(fn)
-    def greener(*args, **kwargs):
-        event_loop = get_event_loop(green_mode)
-        if event_loop is None:
-            fn(*args, **kwargs)
-        else:
-            event_loop.submit(fn, *args, **kwargs)
-
-    return greener
-
diff --git a/src/boost/python/ipython/__init__.py b/src/boost/python/ipython/__init__.py
deleted file mode 100644
index 360eb89..0000000
--- a/src/boost/python/ipython/__init__.py
+++ /dev/null
@@ -1,77 +0,0 @@
-# -----------------------------------------------------------------------------
-# 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", "run", "run_qt"]
-
-from .common import get_python_version
-from .common import get_ipython_version
-from .common import get_pytango_version
-
-
-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(*args, **kwargs):
-    print("Unsupported IPython version (%s) for tango profile" \
-        % get_ipython_version())
-    print("Supported IPython versions are: >= 0.10")
-    print("Tango extension to IPython will NOT be installed.")
-
-init_ipython = default_init_ipython
-install = default_install
-is_installed = lambda : False
-
-__run = None
-__run_qt = None
-
-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
-    is_installed = ipython_00_10.is_installed
-    __run = ipython_00_10.run
-    load_config = None
-    load_ipython_extension = None
-    unload_ipython_extension = None
-elif ipv >= "0.11" and ipv < "1.0":
-    from . import ipython_00_11
-    init_ipython = None
-    install = ipython_00_11.install
-    is_installed = ipython_00_11.is_installed
-    __run = ipython_00_11.run
-    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)
-    __run()
-
-def run_qt():
-    if not is_installed():
-        install(verbose=False)
-    __run(qt=True)
\ No newline at end of file
diff --git a/src/boost/python/ipython/common.py b/src/boost/python/ipython/common.py
deleted file mode 100644
index 2ee7ada..0000000
--- a/src/boost/python/ipython/common.py
+++ /dev/null
@@ -1,66 +0,0 @@
-#!/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.
-# -----------------------------------------------------------------------------
-
-"""functions common (hopefully) to all ipython versions"""
-
-__all__ = ["get_python_version",
-           "get_ipython_version",
-           "get_pytango_version"]
-
-import sys
-from distutils.version import StrictVersion
-
-#-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-# Python utilities
-#-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-
-def get_python_version():
-    return StrictVersion('.'.join(map(str, sys.version_info[:3])))
-
-#-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-# IPython utilities
-#-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-
-def get_ipython_version():
-    """Returns the current IPython version"""
-    import IPython
-    v = None
-    if hasattr(IPython, "version_info"):
-        v = '.'.join(map(str, IPython.version_info[:3]))
-    else:
-        try:
-            try:
-                v = IPython.Release.version
-            except:
-                try:
-                    v = IPython.release.version
-                except:
-                    pass
-        except:
-            pass
-    return StrictVersion(v)
-
-#-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-# PyTango utilities
-#-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-
-def get_pytango_version():
-    try:
-        import PyTango
-    except:
-        return
-    try:
-        v = PyTango.Release.version
-    except:
-        v = '0.0.0'
-    return StrictVersion(v)
diff --git a/src/boost/python/ipython/eventlogger.py b/src/boost/python/ipython/eventlogger.py
deleted file mode 100644
index e0ebad3..0000000
--- a/src/boost/python/ipython/eventlogger.py
+++ /dev/null
@@ -1,79 +0,0 @@
-# -----------------------------------------------------------------------------
-# 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
-
-import re
-import io
-import operator
-
-class EventLogger(object):
-    
-    def __init__(self, capacity=100000, pager=None):
-        self._capacity = capacity
-        self._pager = pager
-        self._records = []
-        
-    def push_event(self, evt):
-        attr_name = evt.attr_name
-        dev, sep, attr = attr_name.rpartition('/')
-        if dev.startswith("tango://"):
-            dev = dev[8:]
-        if dev.count(":"):
-            # if it has tango host
-            host, sep, dev = dev.partition('/')
-        else:
-            host = "-----"
-        evt.host = host
-        evt.dev_name = dev
-        evt.s_attr_name = attr
-        self._records.append(evt)
-        over = len(self._records) - self._capacity
-        if over > 0:
-            self._records = self._records[over:]
-    
-    def model(self):
-        return self
-    
-    def getEvents(self):
-        return self._records
-    
-    def show(self, dexpr=None, aexpr=None):
-        if dexpr is not None:
-            dexpr = re.compile(dexpr, re.IGNORECASE)
-        if aexpr is not None:
-            aexpr = re.compile(aexpr, re.IGNORECASE)
-            
-        s = io.BytesIO()
-        lengths = 4, 30, 18, 20, 12, 16
-        title = 'ID', 'Device', 'Attribute', 'Value', 'Quality', 'Time'
-        templ = "{0:{l[0]}} {1:{l[1]}} {2:{l[2]}} {3:{l[3]}} {4:{l[4]}} {5:{l[5]}}"
-        print(templ.format(*title, l=lengths), file=s)
-        print(*map(operator.mul, lengths, len(lengths)*"-"), file=s)
-        
-        for i,r in enumerate(self._records):
-            if dexpr is not None and not dexpr.match(r.dev_name): continue
-            if aexpr is not None and not aexpr.match(r.s_attr_name): continue
-            if r.err:
-                v = r.errors[0].reason
-                q = 'ERROR'
-                ts = r.reception_date.strftime("%H:%M:%S.%f")
-            else:
-                v = str(r.attr_value.value)
-                q = str(r.attr_value.quality)
-                ts = r.attr_value.time.strftime("%H:%M:%S.%f")
-            msg = templ.format(i, r.dev_name, r.s_attr_name, v, q, ts, l=lengths)
-            print(msg, file=s)
-        s.seek(0)
-        if self._pager is None:
-            print(s.read())
-        else:
-            self._pager(s.read())
diff --git a/src/boost/python/ipython/ipython_00_10/__init__.py b/src/boost/python/ipython/ipython_00_10/__init__.py
deleted file mode 100644
index 583c19a..0000000
--- a/src/boost/python/ipython/ipython_00_10/__init__.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# -----------------------------------------------------------------------------
-# 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']
-
-from .ipython_00_10 import init_ipython, run
-from .ipy_install import install, is_installed
diff --git a/src/boost/python/ipython/ipython_00_10/ipy_install.py b/src/boost/python/ipython/ipython_00_10/ipy_install.py
deleted file mode 100644
index a8bc514..0000000
--- a/src/boost/python/ipython/ipython_00_10/ipy_install.py
+++ /dev/null
@@ -1,99 +0,0 @@
-#!/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.
-# -----------------------------------------------------------------------------
-
-import sys
-import os
-
-import IPython.genutils
-import PyTango
-
-__PROFILE = """\
-#!/usr/bin/env ipython
-\"\"\"An automaticaly generated IPython profile designed to provide a user 
-friendly interface to Tango.
-Created with PyTango {pytangover} for IPython {ipyver}\"\"\"
-
-import IPython
-import PyTango.ipython
-
-ip = IPython.ipapi.get()
-PyTango.ipython.init_ipython(ip)
-
-"""
-
-def is_installed(ipydir=None):
-    install_dir = ipydir or IPython.genutils.get_ipython_dir()
-    f_name = os.path.join(install_dir, 'ipy_profile_tango.py')
-    return os.path.isfile(f_name)
-    
-
-def install(ipydir=None, verbose=True, profile='tango'):
-    install_dir = ipydir or IPython.genutils.get_ipython_dir()
-    f_name = os.path.join(install_dir, 'ipy_profile_tango.py')
-    if verbose:
-        def out(msg):
-            sys.stdout.write(msg)
-            sys.stdout.flush()
-    else:
-        out = lambda x : None
-            
-    if ipydir is None and os.path.isfile(f_name):
-        print("Warning: The file '%s' already exists." % f_name)
-        r = ''
-        while r.lower() not in ('y', 'n'):
-            r = input("Do you wish to override it [Y/n]?")
-            r = r or 'y'
-        if r.lower() == 'n':
-            return
-    profile = __PROFILE.format(pytangover=PyTango.Release.version, ipyver=IPython.Release.version)
-    
-    out("Installing tango extension to ipython... ")
-    try:
-        f = open(f_name, "w")
-        f.write(profile)
-        f.close()
-        out("[DONE]\n\n")
-    except:
-        out("[FAILED]\n\n")
-        raise
-    
-    ipy_user_config = os.path.join(IPython.genutils.get_ipython_dir(), 'ipy_user_conf.py')
-    out("""\
-To start ipython with tango interface simply type on the command line:
-%% ipython -p tango
-
-If you want tango extension to be automaticaly active when you start ipython,
-edit your {0} and add the line:
-import ipy_profile_tango
-
-Next time, just start ipython on the command line:
-%% ipython
-
-and your tango extension should be loaded automaticaly. Note that if you are also
-loading other extensions that, for example, overwrite the prompt, the prompt
-that will appear is the one from the last extension to be imported.
-
-For more information goto: http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
-
-Have fun with ITango!
-The PyTango team
-    """.format(ipy_user_config))
-
-def main():
-    d = None
-    if len(sys.argv) > 1:
-        d = sys.argv[1]
-    install(d)
-    
-if __name__ == "__main__":
-    main()
diff --git a/src/boost/python/ipython/ipython_00_10/ipy_qt.py b/src/boost/python/ipython/ipython_00_10/ipy_qt.py
deleted file mode 100644
index 6ba06b6..0000000
--- a/src/boost/python/ipython/ipython_00_10/ipy_qt.py
+++ /dev/null
@@ -1,373 +0,0 @@
-# -----------------------------------------------------------------------------
-# 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
-import PyQt4.Qt as Qt
-
-BRUSH = Qt.QBrush
-COLOR = Qt.QColor
-_WhiteBrush = Qt.QBrush(Qt.Qt.white)
-_BlackBrush = Qt.QBrush(Qt.Qt.black)
-_RedBrush = Qt.QBrush(Qt.Qt.red)
-_GreenBrush = Qt.QBrush(Qt.Qt.green)
-_DarkGreenBrush = Qt.QBrush(Qt.Qt.darkGreen)
-_BlueBrush = Qt.QBrush(Qt.Qt.blue)
-_YellowBrush = Qt.QBrush(Qt.Qt.yellow)
-_MagentaBrush = Qt.QBrush(Qt.Qt.magenta)
-_GrayBrush = Qt.QBrush(Qt.Qt.gray)
-_DarkGrayBrush = Qt.QBrush(Qt.Qt.darkGray)
-_LightGrayBrush = Qt.QBrush(Qt.Qt.lightGray)
-
-ATTR_QUALITY_DATA = {
-    PyTango.AttrQuality.ATTR_INVALID  : (BRUSH(COLOR(128, 128,  128)), _WhiteBrush),
-    PyTango.AttrQuality.ATTR_VALID    : (_GreenBrush, _BlackBrush),
-    PyTango.AttrQuality.ATTR_ALARM    : (BRUSH(COLOR(255, 140,   0)), _WhiteBrush),
-    PyTango.AttrQuality.ATTR_WARNING  : (BRUSH(COLOR(255, 140,   0)), _WhiteBrush),
-    PyTango.AttrQuality.ATTR_CHANGING : (BRUSH(COLOR(128, 160, 255)), _BlackBrush),
-    None                              : (BRUSH(Qt.Qt.FDiagPattern), _BlackBrush)
-}
-
-DEVICE_STATE_DATA = {
-    PyTango.DevState.ON      : (_GreenBrush, _BlackBrush),
-    PyTango.DevState.OFF     : (_WhiteBrush, _BlackBrush),
-    PyTango.DevState.CLOSE   : (_WhiteBrush, _DarkGreenBrush),
-    PyTango.DevState.OPEN    : (_GreenBrush, _BlackBrush),
-    PyTango.DevState.INSERT  : (_WhiteBrush, _BlackBrush),
-    PyTango.DevState.EXTRACT : (_GreenBrush, _BlackBrush),
-    PyTango.DevState.MOVING  : (BRUSH(COLOR(128, 160, 255)), _BlackBrush),
-    PyTango.DevState.STANDBY : (_YellowBrush, _BlackBrush),
-    PyTango.DevState.FAULT   : (_RedBrush, _BlackBrush),
-    PyTango.DevState.INIT    : (BRUSH(COLOR(204, 204, 122)), _BlackBrush),
-    PyTango.DevState.RUNNING : (BRUSH(COLOR(128, 160, 255)), _BlackBrush),
-    PyTango.DevState.ALARM   : (BRUSH(COLOR(255, 140,   0)), _WhiteBrush),
-    PyTango.DevState.DISABLE : (_MagentaBrush, _BlackBrush),
-    PyTango.DevState.UNKNOWN : (_GrayBrush, _BlackBrush),
-    None                     : (_GrayBrush, _BlackBrush),
-}
-
-def getBrushForQuality(q):
-    return ATTR_QUALITY_DATA[q]
-
-def getBrushForState(s):
-    return DEVICE_STATE_DATA[s]
-
-def deviceAttributeValueStr(da):
-    return str(da.value)
-
-ID, HOST, DEVICE, ATTRIBUTE, VALUE, TIME = range(6)
-HORIZ_HEADER = 'ID', 'Host','Device','Attribute', 'Value', 'Time'
-
-class EventLoggerTableModel(Qt.QAbstractTableModel, logging.Handler):
-    
-    DftOddRowBrush = Qt.QBrush(Qt.QColor(220,220,220)), Qt.QBrush(Qt.Qt.black)
-    DftEvenRowBrush = Qt.QBrush(Qt.QColor(255,255,255)), Qt.QBrush(Qt.Qt.black)
-
-    DftColHeight = 20
-
-    DftColSize = Qt.QSize(50, DftColHeight), Qt.QSize(120, DftColHeight), \
-                 Qt.QSize(160, DftColHeight), Qt.QSize(100, DftColHeight), \
-                 Qt.QSize(120, DftColHeight), Qt.QSize(120, DftColHeight)
-    
-    def __init__(self, capacity=20, freq=0.1):
-        super(Qt.QAbstractTableModel, self).__init__()
-        logging.Handler.__init__(self)
-        self._capacity = capacity
-        self._records = []
-        self._accumulated_records = []
-        self.startTimer(freq*1000)
-
-    # ---------------------------------
-    # Qt.QAbstractTableModel overwrite
-    # ---------------------------------
-    
-#    def sort(self, column, order = Qt.Qt.AscendingOrder):
-#        if column == LEVEL:
-#            f = lambda a,b: cmp(a.levelno,b.levelno)
-#        elif column == TYPE:
-#            def f(a,b):
-#                if not operator.isMappingType(a) or not operator.isMappingType(b):
-#                    return 0
-#                return cmp(a.args.get('type','tau'), b.args.get('type','tau'))
-#        elif column == TIME:
-#            f = lambda a,b: cmp(a.created,b.created)
-#        elif column == MSG:
-#            f = lambda a,b: cmp(a.msg,b.msg)
-#        elif column == NAME:
-#            f = lambda a,b: cmp(a.name,b.name)
-#        elif column == THREAD:
-#            f = lambda a,b: cmp(a.threadName,b.threadName)
-#        elif column == LOCALT:
-#            f = lambda a,b: cmp(a.relativeCreated,b.relativeCreated)
-#        self._records = sorted(self._records, cmp=f,reverse= order == Qt.Qt.DescendingOrder)
-#        #self.reset()
-    
-    def rowCount(self, index=Qt.QModelIndex()):
-        return len(self._records)
-
-    def columnCount(self, index=Qt.QModelIndex()):
-        return len(HORIZ_HEADER)
-    
-    def data(self, index, role=Qt.Qt.DisplayRole):
-        if not index.isValid() or not (0 <= index.row() < len(self._records)):
-            return Qt.QVariant()
-        column, row = index.column(), index.row()
-        record = self._records[row]
-        if record.err:
-            err = PyTango.DevFailed(*record.errors)
-        else:
-            err = None
-        name = record.s_attr_name.lower()
-        if role == Qt.Qt.DisplayRole:
-            if column == ID:
-                return Qt.QVariant(row)
-            if column == HOST:
-                return Qt.QVariant(record.host)
-            elif column == DEVICE:
-                return Qt.QVariant(record.dev_name)
-            elif column == ATTRIBUTE:
-                return Qt.QVariant(record.s_attr_name)
-            elif column == VALUE:
-                if err is None:
-                    return Qt.QVariant(deviceAttributeValueStr(record.attr_value))
-                else:
-                    return Qt.QVariant(err[0].reason)
-            elif column == TIME:
-                if err is None:
-                    return Qt.QVariant(record.attr_value.time.strftime("%H:%M:%S.%f"))
-                else:
-                    return Qt.QVariant(record.reception_date.strftime("%H:%M:%S.%f"))
-        elif role == Qt.Qt.TextAlignmentRole:
-            if column in (HOST, DEVICE, ATTRIBUTE):
-                return Qt.QVariant(Qt.Qt.AlignLeft|Qt.Qt.AlignVCenter)
-            return Qt.QVariant(Qt.Qt.AlignRight|Qt.Qt.AlignVCenter)
-        elif role == Qt.Qt.BackgroundRole:
-            if column == VALUE:
-                if err is None:
-                    if name == "state":
-                        bg = getBrushForState(record.attr_value.value)[0]
-                    else:
-                        bg = getBrushForQuality(record.attr_value.quality)[0]
-                else:
-                    bg = Qt.QBrush(Qt.Qt.red)
-            else:
-                if index.row() % 2:
-                    bg = self.DftOddRowBrush[0]
-                else:
-                    bg = self.DftEvenRowBrush[0]
-            return Qt.QVariant(bg)
-        elif role == Qt.Qt.ForegroundRole:
-            if column == VALUE:
-                if err is None:
-                    if name == "state":
-                        fg = getBrushForState(record.attr_value.value)[1]
-                    else:
-                        fg = getBrushForQuality(record.attr_value.quality)[1]
-                else:
-                    fg = Qt.QBrush(Qt.Qt.white)
-            else:
-                if index.row() % 2:
-                    fg = self.DftOddRowBrush[1]
-                else:
-                    fg = self.DftEvenRowBrush[1]
-            return Qt.QVariant(fg)
-        elif role == Qt.Qt.ToolTipRole:
-            if err is None:
-                return Qt.QVariant(str(record.attr_value))
-            else:
-                return Qt.QVariant(str(record))
-        elif role == Qt.Qt.SizeHintRole:
-            return self._getSizeHint(column)
-        #elif role == Qt.Qt.StatusTipRole:
-        #elif role == Qt.Qt.CheckStateRole:
-        elif role == Qt.Qt.FontRole:
-            return Qt.QVariant(Qt.QFont("Mono", 8))
-        return Qt.QVariant()
-
-    def _getSizeHint(self, column):
-        return Qt.QVariant(EventLoggerTableModel.DftColSize[column])
-
-    def headerData(self, section, orientation, role=Qt.Qt.DisplayRole):
-        if role == Qt.Qt.TextAlignmentRole:
-            if orientation == Qt.Qt.Horizontal:
-                return Qt.QVariant(int(Qt.Qt.AlignLeft | Qt.Qt.AlignVCenter))
-            return Qt.QVariant(int(Qt.Qt.AlignRight | Qt.Qt.AlignVCenter))
-        elif role == Qt.Qt.SizeHintRole:
-            if orientation == Qt.Qt.Vertical:
-                return Qt.QVariant(Qt.QSize(50, 20))
-            else:
-                return self._getSizeHint(section)
-        elif role == Qt.Qt.FontRole:
-            return Qt.QVariant(Qt.QFont("Mono", 8))
-        elif role == Qt.Qt.ToolTipRole:
-            if section == HOST:
-                return Qt.QVariant("tango host")
-            elif section == DEVICE:
-                return Qt.QVariant("tango device")
-            elif section == ATTRIBUTE:
-                return Qt.QVariant("tango attribute")
-            elif section == VALUE:
-                return Qt.QVariant("attribute value")
-            elif section == TIME:
-                return Qt.QVariant("time stamp for the event")
-        if role != Qt.Qt.DisplayRole:
-            return Qt.QVariant()
-        if orientation == Qt.Qt.Horizontal:
-            return Qt.QVariant(HORIZ_HEADER[section])
-        return Qt.QVariant(int(section+1))
-    
-    def insertRows(self, position, rows=1, index=Qt.QModelIndex()):
-        self.beginInsertRows(Qt.QModelIndex(), position, position+rows-1)
-        self.endInsertRows()
-    
-    def removeRows(self, position, rows=1, index=Qt.QModelIndex()):
-        self.beginRemoveRows(Qt.QModelIndex(), position, position+rows-1)
-        self.endRemoveRows()
-
-    #def setData(self, index, value, role=Qt.Qt.DisplayRole):
-    #    pass
-    
-    #def flags(self, index)
-    #    pass
-        
-    #def insertColumns(self):
-    #    pass
-    
-    #def removeColumns(self):
-    #    pass
-    
-    # --------------------------
-    # logging.Handler overwrite
-    # --------------------------
-
-    def timerEvent(self, evt):
-        self.updatePendingRecords()
-
-    def updatePendingRecords(self):
-        if not self._accumulated_records:
-            return
-        row_nb = self.rowCount()
-        records = self._accumulated_records
-        self._accumulated_records = []
-        self._records.extend(records)
-        self.insertRows(row_nb, len(records))
-        if len(self._records) > self._capacity:
-            start = len(self._records) - self._capacity
-            self._records = self._records[start:]
-            self.removeRows(0, start)
-    
-    def push_event(self, evt):
-        attr_name = evt.attr_name
-        dev, sep, attr = attr_name.rpartition('/')
-        if dev.startswith("tango://"):
-            dev = dev[8:]
-        if dev.count(":"):
-            # if it has tango host
-            host, sep, dev = dev.partition('/')
-        else:
-            host = "-----"
-        evt.host = host
-        evt.dev_name = dev
-        evt.s_attr_name = attr
-        self._accumulated_records.append(evt)
-
-    def clearContents(self):
-        self.removeRows(0, self.rowCount())
-        self._records = []
-        self._accumulated_records = []
-
-    def getEvents(self):
-        return self._records
-    
-class EventLoggerTable(Qt.QTableView):
-    
-    DftScrollLock = False
-    
-    """A Qt table that displays the event logging messages"""
-    def __init__(self, parent=None, model=None, designMode=False):
-        super(EventLoggerTable, self).__init__(parent)
-        self.setShowGrid(False)
-        self.resetScrollLock()
-        model = model or EventLoggerTableModel()
-        self.setModel(model)
-        hh = self.horizontalHeader()
-        hh.setResizeMode(HOST, Qt.QHeaderView.Stretch)
-        self.setSortingEnabled(False)
-        #self.sortByColumn(TIME, Qt.Qt.AscendingOrder)
-
-    def rowsInserted(self, index, start, end):
-        """Overwrite of slot rows inserted to do proper resize and scroll to 
-        bottom if desired
-        """
-        for i in range(start,end+1):
-            self.resizeRowToContents(i)
-        if start == 0:
-            self.resizeColumnsToContents()
-        if not self._scrollLock:
-            self.scrollToBottom()
-
-    def setScrollLock(self, scrollLock):
-        """Sets the state for scrollLock"""
-        self._scrollLock = scrollLock
-    
-    def getScrollLock(self):
-        """Returns wheater or not the scrollLock is active"""
-        return self._scrollLock
-
-    def resetScrollLock(self):
-        self.setScrollLock(EventLoggerTable.DftScrollLock)
-
-    def clearContents(self):
-        self.model().clearContents()
-    
-    def getEvents(self):
-        return self.model().getEvents()
-
-    def sizeHint(self):
-        return Qt.QSize(700, 400)
-    
-    #: Tells wheater the table should scroll automatically to the end each
-    #: time a record is added or not
-    autoScroll = Qt.pyqtProperty("bool", getScrollLock, setScrollLock, resetScrollLock)
-
-
-class EventLoggerWidget(Qt.QWidget):
-    
-    def __init__(self, parent=None, model=None, designMode=False):
-        super(EventLoggerWidget, self).__init__(parent)
-        self._model = model or EventLoggerTableModel()
-        self.init(designMode)
-        
-    def init(self, designMode):
-        l = Qt.QGridLayout()
-        l.setContentsMargins(0,0,0,0)
-        l.setVerticalSpacing(2)
-        self.setLayout(l)
-        
-        table = self._logtable = EventLoggerTable(model = self._model, designMode=designMode)
-        tb = self._toolbar = Qt.QToolBar("Event logger toolbar")
-        tb.setFloatable(False)
-        
-        self._clearButton = Qt.QPushButton("Clear")
-        Qt.QObject.connect(self._clearButton, Qt.SIGNAL("clicked()"), table.clearContents)
-        tb.addWidget(self._clearButton)
-        l.addWidget(tb, 0, 0)
-        l.addWidget(table, 1, 0)
-        l.setColumnStretch(0,1)
-        l.setRowStretch(1,1)
-    
-    def model(self):
-        return self._model
-
-    def getEvents(self):
-        return self.model().getEvents()
-
-EventLogger = EventLoggerWidget
\ No newline at end of file
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
deleted file mode 100644
index accee70..0000000
--- a/src/boost/python/ipython/ipython_00_10/ipython_00_10.py
+++ /dev/null
@@ -1,969 +0,0 @@
-#!/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.
-# -----------------------------------------------------------------------------
-
-"""An IPython profile designed to provide a user friendly interface to Tango"""
-
-from __future__ import print_function
-
-import sys
-import os
-import re
-import io
-import textwrap
-import IPython.ipapi
-import IPython.ColorANSI
-import IPython.Prompts
-import IPython.PyColorize
-import IPython.excolors
-import IPython.ipstruct
-import IPython.genutils
-import PyTango
-import PyTango.utils
-
-_DB_SYMB = "db"
-_DFT_TANGO_HOST = None
-_TANGO_STORE = "__tango_store"
-_TANGO_ERR = "__tango_error"
-_PYTHON_ERR = "__python_error"
-_tango_init = False
-
-_TG_EXCEPTIONS = PyTango.DevFailed, PyTango.CommunicationFailed, \
-    PyTango.NamedDevFailed, PyTango.NamedDevFailedList, \
-    PyTango.WrongNameSyntax, PyTango.NonDbDevice, PyTango.WrongData, \
-    PyTango.NonSupportedFeature, PyTango.AsynCall, \
-    PyTango.AsynReplyNotArrived, PyTango.EventSystemFailed, \
-    PyTango.DeviceUnlocked, PyTango.NotAllowed
-
-class DeviceClassCompleter(object):
-    """Completer class that returns the list of devices of some class when
-    called. """
-    
-    def __init__(self, klass, devices):
-        self._klass = klass
-        self._devices = devices
-    
-    def __call__(self, ip, evt):
-        return self._devices
-
-
-# Rewrite DeviceProxy constructor because the database context that the user is
-# using may be different than the default TANGO_HOST. What we do is always append
-# the name of the database in usage to the device name given by the user (in case 
-# he doesn't give a database name him(her)self, of course.
-#__DeviceProxy_init_orig__ = PyTango.DeviceProxy.__init__
-#def __DeviceProxy__init__(self, dev_name):
-#    db = __get_db()
-#    if db is None: return
-#    if dev_name.count(":") == 0:
-#        db_name = "%s:%s" % (db.get_db_host(), db.get_db_port())
-#        dev_name = "%s/%s" % (db_name, dev_name)
-#    __DeviceProxy_init_orig__(self, dev_name)
-#PyTango.DeviceProxy.__init__ = __DeviceProxy__init__
-
-#-------------------------------------------------------------------------------
-# Completers
-#-------------------------------------------------------------------------------
-
-def __DeviceProxy_completer(ip, evt):
-    db = __get_db()
-    if db is None: return
-    ret = list(db._db_cache.devices.keys())
-    ret.extend(db._db_cache.aliases.keys())
-    return ret
-
-def __DeviceClass_completer(ip, evt):
-    db = __get_db()
-    if db is None: return
-    return list(db._db_cache.klasses.keys())
-
-def __DeviceAlias_completer(ip, evt):
-    db = __get_db()
-    if db is None: return
-    return list(db._db_cache.aliases.keys())
-
-def __AttributeAlias_completer(ip, evt):
-    db = __get_db()
-    if db is None: return
-    return list(db._db_cache.attr_aliases.keys())
-
-def __PureDeviceProxy_completer(ip, evt):
-    db = __get_db()
-    if db is None: return
-    return list(db._db_cache.devices.keys())
-
-def __AttributeProxy_completer(ip, evt):
-    db = __get_db()
-    if db is None: return
-    cache = db._db_cache
-    
-    symb = evt.symbol
-    n = symb.count("/")
-    ret, devs, dev_aliases = None, cache.devices, cache.aliases
-    # dev_list and dev_alias_list are case insensitive. They should only be used
-    # to search for elements. Their elements are the same as the keys of the 
-    # dictionaries devs and dev_aliases respectively
-    dev_list, dev_alias_list = cache.device_list, cache.alias_list
-    dev_name = None
-    if n == 0:
-        # means it can be an attr alias, a device name has alias or as full device name
-        ret = list(cache.get("attr_aliases").keys())
-        ret.extend([ d+"/" for d in devs ])
-        ret.extend([ d+"/" for d in dev_aliases ])
-        # device alias found!
-        if symb in dev_alias_list:
-            dev_name = symb
-    elif n == 1:
-        # it can still be a full device name
-        ret = [ d+"/" for d in devs ]
-        # it can also be devalias/attr_name
-        dev, attr = symb.split("/")
-        if dev in dev_alias_list:
-            dev_name = dev
-    elif n == 2:
-        # it is for sure NOT an attribute alias or a device alias
-        ret = [ d+"/" for d in devs ]
-        # device found!
-        if symb in dev_list:
-            dev_name = symb
-    elif n == 3:
-        # it is for sure a full attribute name
-        dev, sep, attr = symb.rpartition("/")
-        if dev in dev_list:
-            dev_name = dev
-
-    if dev_name is None:
-        return ret
-    
-    try:
-        d = __get_device_proxy(dev_name)
-        # first check in cache for the attribute list
-        if not hasattr(d, "_attr_list"):
-            d._attr_list = d.get_attribute_list()
-        if ret is None:
-            ret = []
-        ret.extend([ "%s/%s" % (dev_name, a) for a in d._attr_list ])
-    except:
-        # either DeviceProxy could not be created or device is not online
-        pass
-
-    return ret
-
-def __get_device_proxy(dev_name):
-    db = __get_db()
-    if db is None: return
-    cache = db._db_cache
-    from_alias = cache.aliases.get(dev_name)
-    
-    if from_alias is not None:
-        dev_name = from_alias
-
-    data = cache.devices.get(dev_name)
-    if data is not None:
-        d = data[3]
-        if d is None:
-            try:
-                d = data[3] = PyTango.DeviceProxy(dev_name)
-            except:
-                pass
-        return d
-
-def __get_device_subscriptions(dev_name):
-    db = __get_db()
-    if db is None: return
-    cache = db._db_cache
-    from_alias = cache.aliases.get(dev_name)
-    
-    if from_alias is not None:
-        dev_name = from_alias
-
-    data = cache.devices.get(dev_name)
-    if data is not None:
-        return data[4]
-
-def __switchdb_completer(ip, evt):
-    return list(__get_store(ip, "database_list").keys())
-
-__monitor_completer = __AttributeProxy_completer
-
-#-------------------------------------------------------------------------------
-# Magic commands
-#-------------------------------------------------------------------------------
-
-def magic_refreshdb(self, parameter_s=''):
-    init_db(IPython.ipapi.get(), parameter_s)
-
-def magic_switchdb(self, parameter_s=''):
-    """Switches the active tango Database.
-    
-    Usage: switchdb <host>[(:| )<port>]
-
-    <port> is optional. If not given it defaults to 10000.
-    
-    Examples:
-    In [1]: switchdb homer:10005
-    In [2]: switchdb homer 10005
-    In [3]: switchdb homer"""
-    
-    if parameter_s == '':
-        raise IPython.ipapi.UsageError("%switchdb: Must specify a tango database name. See '%switchdb?'")
-    return init_db(IPython.ipapi.get(), parameter_s)
-
-def magic_lsdev(self, parameter_s=''):
-    """Lists all known tango devices.
-    
-    Usage: lsdev [<device name filter(regular expression)]
-    
-    Examples:
-    In [1]: lsdev
-    In [2]: lsdev sys.*"""
-    
-    if parameter_s:
-        reg_exp = re.compile(parameter_s, re.IGNORECASE)
-    else:
-        reg_exp = None
-    
-    db = __get_db()
-    if db is None:
-        print("You are not connected to any Tango Database. Device list is empty")
-        return
-    data = db._db_cache.devices
-
-    s = io.StringIO()
-    cols = 40, 25, 25, 20
-    l = "%{0}s %{1}s %{2}s %{3}s".format(*cols)
-    print(l % ("Device", "Alias", "Server", "Class"), file=s)
-    print(l % (cols[0]*"-", cols[1]*"-", cols[2]*"-", cols[3]*"-"), file=s)
-    for d, v in data.items():
-        if reg_exp and not reg_exp.match(d): continue
-        print(l % (d, v[0], v[1], v[2]), file=s)
-    s.seek(0)
-    IPython.genutils.page(s.read())
-
-def magic_lsdevclass(self, parameter_s=''):
-    """Lists all known tango device classes.
-    
-    Usage: lsdevclass [<class name filter(regular expression)]
-    
-    Examples:
-    In [1]: lsdevclass
-    In [2]: lsdevclass Motor.*"""
-    
-    if parameter_s:
-        reg_exp = re.compile(parameter_s, re.IGNORECASE)
-    else:
-        reg_exp = None
-    
-    db = __get_db()
-    if db is None:
-        print("You are not connected to any Tango Database. Device class list is empty")
-        return
-    data = db._db_cache.klasses
-
-    data = [ "%-030s" % klass for klass in data.keys() if not reg_exp or reg_exp.match(klass) ]
-    s = textwrap.fill(" ".join(data), 80)
-    IPython.genutils.page(s)
-
-def magic_lsserv(self, parameter_s=''):
-    """Lists all known tango servers.
-    
-    Usage: lsserv [<class name filter(regular expression)]
-    
-    Examples:
-    In [1]: lsserv
-    In [2]: lsserv Motor/.*"""
-    
-    if parameter_s:
-        reg_exp = re.compile(parameter_s, re.IGNORECASE)
-    else:
-        reg_exp = None
-    
-    db = __get_db()
-    if db is None:
-        print("You are not connected to any Tango Database. Device class list is empty")
-        return
-    data = db._db_cache.servers
-
-    data = [ "%-030s" % server for server in data.keys() if not reg_exp or reg_exp.match(server) ]
-    s = textwrap.fill(" ".join(data), 80)
-    IPython.genutils.page(s)
-
-def magic_tango_error(self, parameter_s=''):
-    """Displays detailed information about the last tango error"""
-    
-    global _TANGO_ERR
-    err_info = self.user_ns.get(_TANGO_ERR)
-    if err_info is None:
-        print("No tango error reported so far.")
-        return
-    print("Last tango error:")
-    print(err_info[1])
-
-def magic_python_error(self, parameter_s=''):
-    """Displays detailed information about the last python error"""
-    
-    global _PYTHON_ERR
-    err_info = self.user_ns.get(_PYTHON_ERR)
-    if err_info is None:
-        print("No error reported so far.")
-        return
-    ip = IPython.ipapi.get()
-    etype, evalue, etb = err_info[:3]
-    ip.IP.InteractiveTB(etype=etype, evalue=evalue, etb=etb, tb_offset=None)
-
-_EVT_LOG = None
-def __get_event_log():
-    global _EVT_LOG
-    if _EVT_LOG is None:
-        import PyTango.ipython.eventlogger
-        _EVT_LOG = PyTango.ipython.eventlogger.EventLogger(capacity=10000, pager=IPython.genutils.page)
-    return _EVT_LOG
-
-def magic_mon(self, parameter_s=''):
-    """Monitor a given attribute.
-    
-    %mon -a <attribute name>           - activates monitoring of given attribute
-    %mon -d <attribute name>           - deactivates monitoring of given attribute
-    %mon -r                            - deactivates monitoring of all attributes
-    %mon -i <id>                       - displays detailed information for the event with given id
-    %mon -l <dev filter> <attr filter> - shows event table filtered with the regular expression for attribute name
-    %mon                               - shows event table (= %mon -i .* .*)"""
-    
-    db = __get_db()
-    if db is None:
-        print("You are not connected to any Tango Database.")
-        return
-    opts, args = self.parse_options(parameter_s,'adril', mode='list')
-    if len(args) > 3:
-        raise IPython.ipapi.UsageError("%mon: too many arguments")
-    if 'd' in opts:
-        try:
-            todel = args[0]
-        except IndexError:
-            raise IPython.ipapi.UsageError(
-                "%mon -d: must provide an attribute to unmonitor")
-        else:
-            try:
-                dev, sep, attr = todel.rpartition("/")
-                subscriptions = __get_device_subscriptions(dev)
-                id = subscriptions[attr.lower()]
-                del subscriptions[attr.lower()]
-                d = __get_device_proxy(dev)
-                d.unsubscribe_event(id)
-                print("Stopped monitoring '%s'" % todel)
-            except KeyError:
-                raise IPython.ipapi.UsageError(
-                    "%%mon -d: Not monitoring '%s'" % todel)
-                    
-    elif 'a' in opts:
-        try:
-            toadd = args[0]
-        except IndexError:
-            raise IPython.ipapi.UsageError(
-                "%mon -a: must provide an attribute to monitor")
-        dev, sep, attr = toadd.rpartition("/")
-        subscriptions = __get_device_subscriptions(dev)
-        id = subscriptions.get(attr.lower())
-        if id is not None:
-            raise IPython.ipapi.UsageError(
-                "%%mon -a: Already monitoring '%s'" % toadd)
-        d = __get_device_proxy(dev)
-        w = __get_event_log()
-        model = w.model()
-        id = d.subscribe_event(attr, PyTango.EventType.CHANGE_EVENT, model, [])
-        subscriptions[attr.lower()] = id
-        print("'%s' is now being monitored. Type 'mon' to see all events" % toadd)
-    elif 'r' in opts:
-        for d, v in db._db_cache.devices.items():
-            d, subs = v[3], v[4]
-            for id in subs.values():
-                d.unsubscribe_event(id)
-            v[4] = {}
-    elif 'i' in opts:
-        try:
-            evtid = int(args[0])
-        except IndexError:
-            raise IPython.ipapi.UsageError(
-                "%mon -i: must provide an event ID")
-        except ValueError:
-            raise IPython.ipapi.UsageError(
-                "%mon -i: must provide a valid event ID")
-        try:
-            w = __get_event_log()
-            e = w.getEvents()[evtid]
-            if e.err:
-                print(str(PyTango.DevFailed(*e.errors)))
-            else:
-                print(str(e))
-        except IndexError:
-            raise IPython.ipapi.UsageError(
-                "%mon -i: must provide a valid event ID")
-    elif 'l' in opts:
-        try:
-            dexpr = args[0]
-            aexpr = args[1]
-        except IndexError:
-            raise IPython.ipapi.UsageError(
-                "%mon -l: must provide valid device and attribute filters")
-        w = __get_event_log()
-        w.show(dexpr, aexpr)
-    else:
-        w = __get_event_log()
-        w.show()
-
-#-------------------------------------------------------------------------------
-# Useful functions (not magic commands but accessible from CLI as normal python
-# functions)
-#-------------------------------------------------------------------------------
-
-def get_device_map():
-    """Returns a dictionary where keys are device names and value is a sequence
-    of 4 elements: 
-        - alias name (empty string if no alias is defined)
-        - tango server name (full tango server name <name>/<instance>)
-        - tango class name
-        - DeviceProxy to the device or None if it hasn't been initialized yet
-          (this last element is for internal tango usage only. If you need a 
-           DeviceProxy to this device, create your own)"""
-    db = __get_db()
-    if db is None:
-        print("You are not connected to any Tango Database.")
-        return
-    return db._db_cache.devices
-
-def get_server_map():
-    """Returns a dictionary where keys are server names (<name>/<instance>)
-    and value is a sequence of device names that belong to the server"""
-    db = __get_db()
-    if db is None:
-        print("You are not connected to any Tango Database.")
-        return
-    return db._db_cache.servers
-
-def get_class_map():
-    """Returns a dictionary where keys are the tango classes and value is a 
-    sequence of device names that belong to the tango class"""
-    db = __get_db()
-    if db is None:
-        print("You are not connected to any Tango Database.")
-        return
-    return db._db_cache.klasses
-
-def get_alias_map():
-    """Returns a dictionary where keys are the tango device aliases and value 
-    is a the tango device name"""
-    db = __get_db()
-    if db is None:
-        print("You are not connected to any Tango Database.")
-        return
-    return db._db_cache.aliases
-
-def get_device_list():
-    """Returns a case insensitive list of device names for the current 
-    database"""
-    db = __get_db()
-    if db is None:
-        print("You are not connected to any Tango Database.")
-        return
-    return db._db_cache.device_list
-
-def get_alias_list():
-    """Returns a case insensitive list of device aliases for the current 
-    database"""
-    db = __get_db()
-    if db is None:
-        print("You are not connected to any Tango Database.")
-        return
-    return db._db_cache.alias_list    
-    
-#-------------------------------------------------------------------------------
-# Private helper methods
-#-------------------------------------------------------------------------------
-
-def __exc_handler(ip, etype, value, tb):
-    global _TG_EXCEPTIONS
-    if etype in _TG_EXCEPTIONS:
-        global _TANGO_ERR
-        ip.user_ns[_TANGO_ERR] = etype, value, tb
-        if len(value.args):
-            v = value[0]
-            print("%s: %s" % (v.reason ,v.desc))
-        else:
-            print("Empty DevFailed")
-        print("(For more detailed information type: tango_error)")
-    else:
-        global _PYTHON_ERR
-        ip.user_ns[_PYTHON_ERR] = etype, value, tb
-        print(etype.__name__ + ": " + str(value))
-        print("(For more detailed information type: python_error)")
-
-def __get_default_tango_host():
-    global _DFT_TANGO_HOST
-    if _DFT_TANGO_HOST is None:
-        try:
-            db = PyTango.Database()
-            _DFT_TANGO_HOST = "%s:%s" % (db.get_db_host(), db.get_db_port())
-        except:
-            pass
-    return _DFT_TANGO_HOST
-
-def __get_db(host_port=None):
-    """host_port == None: Use current DB whatever it is or create
-                          default if doesn't exist
-       host_port == '' : use default db. If it is not the current db, switch
-                         current db to it and return it
-       host_port == ... : if ... is not the current db, switch current db to it
-                          and return it
-    """
-    
-    ip = IPython.ipapi.get()
-    global _DB_SYMB
-    db = ip.user_ns.get(_DB_SYMB)
-    
-    if host_port is None:
-        if db is None:
-            host_port = __get_default_tango_host()
-    elif host_port == '':
-        host_port = __get_default_tango_host()
-    else:
-        host_port = host_port.strip().replace(" ",":")
-        if host_port.count(":") == 0:
-            host_port += ":10000"
-
-    if host_port is not None:
-        host_port = str(host_port)
-        
-    if db is None:
-        create_db = True
-    elif host_port is None:
-        create_db = False
-    else:
-        old_host_port = "%s:%s" % (db.get_db_host(), db.get_db_port())
-        create_db = old_host_port != host_port
-
-    if create_db:
-        try:
-            db = PyTango.Database(*host_port.split(":"))
-            
-            ip.user_ns["DB_NAME"] = host_port
-        except Exception:
-            print()
-            if db:
-                print("Could not access Database", host_port)
-                old_host_port = "%s:%s" % (db.get_db_host(), db.get_db_port())
-                print("Maintaining connection to Database", old_host_port)
-                ip.user_ns["DB_NAME"] = old_host_port
-            else:
-                print("Could not access any Database.")
-                print("Make sure .tangorc, /etc/tangorc or TANGO_HOST environment is defined.")
-                ip.user_ns["DB_NAME"] = "OFFLINE"
-                
-        # register the 'db' in the user namespace
-        ip.to_user_ns({ _DB_SYMB : db })
-        
-    return db
-
-def __get_obj_name(o):
-    try:
-        n = o.__name__
-    except:
-        try:
-            n = o.__class__.__name__
-        except:
-            n = "<unknown>"
-    return n
-
-def __completer_wrapper(f):
-    def wrapper(ip, evt):
-        try:
-            return f(ip, evt)
-        except Exception as e:
-            print()
-            print("An unexpected exception ocorred during ITango command completer.")
-            print("Please send a bug report to the PyTango team with the following informantion:")
-            print(IPython.ipapi.get().options.banner)
-            print(80*"-")
-            print("Completer:",__get_obj_name(f))
-            print(80*"-")
-            print(str(e))
-            print(80*"-")
-            raise e
-    return wrapper
-
-def __get_ipapi():
-    return IPython.ipapi.get()
-
-def __expose_magic(ip, name, fn, completer_func=None):
-    ip.expose_magic(name, fn)
-    
-    if completer_func is None:
-        return
-    
-    # enable macro param completion
-    ip.set_hook('complete_command', completer_func, re_key = ".*" + name)
-
-def __unexpose_magic(ip, name):
-    mg = 'magic_%s' % name
-    delattr(ip.IP, mg)
-
-def __build_color_scheme(ip, name):
-    
-    # make some schemes as instances so we can copy them for modification easily:
-    ColorANSI = IPython.ColorANSI
-    InputColors = ColorANSI.InputTermColors
-    TermColors = ColorANSI.TermColors
-    PromptColors = IPython.Prompts.PromptColors
-    ANSICodeColors = IPython.PyColorize.ANSICodeColors
-    ExceptionColors = IPython.excolors.ExceptionColors
-    TBColors = ip.IP.InteractiveTB.color_scheme_table
-    SyntaxColors = ip.IP.SyntaxTB.color_scheme_table
-    InspectColors = IPython.OInspect.InspectColors
-    
-    promptTangoColors = PromptColors['Linux'].copy(name)
-    ANSITangoColors = ANSICodeColors['Linux'].copy(name)
-    exceptionTangoColors = ExceptionColors['Linux'].copy(name)
-    TBTangoColors = TBColors['Linux'].copy(name)
-    syntaxTangoColors = SyntaxColors['Linux'].copy(name)
-    inspectTangoColors = InspectColors['Linux'].copy(name)
-    
-    # initialize prompt with default tango colors
-    promptTangoColors.colors.in_prompt  = InputColors.Purple
-    promptTangoColors.colors.in_number  = InputColors.LightPurple
-    promptTangoColors.colors.in_prompt2 = InputColors.Purple
-    promptTangoColors.colors.out_prompt = TermColors.Blue
-    promptTangoColors.colors.out_number = TermColors.LightBlue
-
-    ret= { "prompt" : (PromptColors, promptTangoColors),
-          "ANSI"   : (ANSICodeColors, ANSITangoColors),
-          "except" : (ExceptionColors, exceptionTangoColors),
-          "TB"     : (TBColors, TBTangoColors),
-          "Syntax" : (SyntaxColors, syntaxTangoColors),
-          "Inspect": (InspectColors, inspectTangoColors) }
-
-    if ip.IP.isthreaded:
-        TBThreadedColors = ip.IP.sys_excepthook.color_scheme_table
-        TBThreadedTangoColors = TBThreadedColors['Linux'].copy(name)
-        ret["TBThreaded"] = TBThreadedColors, TBThreadedTangoColors
-    return ret
-
-def __set_store(ip, key=None, value=None):
-    if key is not None:
-        tango_store = ip.user_ns.get(_TANGO_STORE)
-        tango_store[key] = value
-    __store(ip, _TANGO_STORE)
-
-def __get_store(ip, key, nvalue=None):
-    tango_store = ip.user_ns.get(_TANGO_STORE)
-    v = tango_store.get(key)
-    if v is None and nvalue is not None:
-        tango_store[key] = nvalue
-        v = nvalue
-    return v
-
-def __store(ip, var):
-    # this executes the magic command store which prints a lot of info. So, first
-    # we hide the standard output 
-    stdout = sys.stdout
-    try:
-        sys.stdout = io.StringIO()
-        ip.magic("store %s" % var)
-    finally:
-        sys.stdout = stdout
-        
-#-------------------------------------------------------------------------------
-# Initialization methods
-#-------------------------------------------------------------------------------
-
-def init_colors(ip):
-    ColorANSI = IPython.ColorANSI
-    InputColors = ColorANSI.InputTermColors
-    TermColors = ColorANSI.TermColors
-    
-    name = "Tango"
-    scheme = __build_color_scheme(ip, name)
-    for k, v in scheme.items():
-        v[0].add_scheme(v[1])
-
-    name = "PurpleTango"
-    scheme = __build_color_scheme(ip, name)
-    for k, v in scheme.items():
-        v[0].add_scheme(v[1])
-
-    name = "BlueTango"
-    scheme = __build_color_scheme(ip, name)
-    prompt = scheme["prompt"][1]
-    prompt.colors.in_prompt  = InputColors.Blue
-    prompt.colors.in_number  = InputColors.LightBlue
-    prompt.colors.in_prompt2 = InputColors.Blue
-    prompt.colors.out_prompt = TermColors.Cyan
-    prompt.colors.out_number = TermColors.LightCyan
-    for k, v in scheme.items():
-        v[0].add_scheme(v[1])
-
-    name = "GreenTango"
-    scheme = __build_color_scheme(ip, name)
-    prompt = scheme["prompt"][1]
-    prompt.colors.in_prompt  = InputColors.Green
-    prompt.colors.in_number  = InputColors.LightGreen
-    prompt.colors.in_prompt2 = InputColors.Green
-    prompt.colors.out_prompt = TermColors.Red
-    prompt.colors.out_number = TermColors.LightRed
-    for k, v in scheme.items():
-        v[0].add_scheme(v[1])
-
-def init_pytango(ip):
-    """Initializes the IPython environment with PyTango elements"""
-
-    # export symbols to IPython namepspace
-    ip.ex("import PyTango")
-    ip.ex("from PyTango import DeviceProxy, AttributeProxy, Database, Group")
-    ip.ex("Device = DeviceProxy")
-    ip.ex("Attribute = AttributeProxy")
-
-    # add completers
-    dp_completer = __completer_wrapper(__DeviceProxy_completer)
-    attr_completer = __completer_wrapper(__AttributeProxy_completer)
-    ip.set_hook('complete_command', dp_completer, re_key = ".*DeviceProxy[^\w\.]+")
-    ip.set_hook('complete_command', dp_completer, re_key = ".*Device[^\w\.]+")
-    ip.set_hook('complete_command', attr_completer, re_key = ".*AttributeProxy[^\w\.]+")
-    ip.set_hook('complete_command', attr_completer, re_key = ".*Attribute[^\w\.]+")
-    
-    ip.set_custom_exc((Exception,), __exc_handler)
-
-def init_db(ip, parameter_s=''):
-    global _DB_SYMB
-    old_db = ip.user_ns.get(_DB_SYMB)
-    
-    db = __get_db(parameter_s)
-    
-    if old_db is not None and hasattr(old_db, "_db_cache"):
-        old_junk = old_db._db_cache["junk"].keys()
-        for e in old_junk:
-            del ip.user_ns[e]
-    else:
-        old_junk = ()
-        
-    if db is None: return
-    
-    #os.environ["TANGO_HOST"] = "%s:%s" % (db.get_db_host(), db.get_db_port())
-    
-    # Initialize device and server information
-    query = "SELECT name, alias, server, class FROM device order by name"
-    
-    r = db.command_inout("DbMySqlSelect", query)
-    row_nb, column_nb = r[0][-2], r[0][-1]
-    results, data = r[0][:-2], r[1]
-    assert row_nb == len(data) / column_nb
-    devices, aliases, servers, klasses = data[0::4], data[1::4], data[2::4], data[3::4]
-
-    #CD = PyTango.utils.CaselessDict
-    CD = dict
-    dev_dict, serv_dict, klass_dict, alias_dict = CD(), CD(), CD(), CD()
-    
-    for device, alias, server, klass in zip(devices, aliases, servers, klasses):
-        dev_lower = device.lower()
-
-        # hide dserver devices
-        if dev_lower.startswith("dserver/"): continue
-        
-        # hide alias that start with "_"
-        if alias and alias[0] == "_": alias = ''
-        
-        # last None below is to be filled by DeviceProxy object on demand
-        # last empty dict<str, int> where keys is attribute name and value is 
-        # the subscription id
-        dev_dict[device] = [alias, server, klass, None, {}]
-        serv_devs = serv_dict.get(server)
-        if serv_devs is None:
-            serv_dict[server] = serv_devs = []
-        serv_devs.append(device)
-        klass_devs = klass_dict.get(klass)
-        if klass_devs is None:
-            klass_dict[klass] = klass_devs = []
-        klass_devs.append(device)
-        if len(alias):
-            alias_dict[alias] = device
-            serv_devs.append(alias)
-            klass_devs.append(alias)
-
-    exposed_klasses = {}
-    excluded_klasses = "DServer",
-    for klass, devices in klass_dict.items():
-        if klass in excluded_klasses: continue
-        if klass not in ip.user_ns or klass in old_junk:
-            c = DeviceClassCompleter(klass, devices)
-            ip.set_hook('complete_command', c, re_key = ".*" + klass + "[^\w\.]+")
-            exposed_klasses[klass] = PyTango.DeviceProxy
-    
-    # expose classes no user namespace
-    ip.to_user_ns(exposed_klasses)
-    
-    # Initialize attribute information
-    query = "SELECT name, alias FROM attribute_alias order by alias"
-
-    r = db.command_inout("DbMySqlSelect", query)
-    row_nb, column_nb = r[0][-2], r[0][-1]
-    results, data = r[0][:-2], r[1]
-    assert row_nb == len(data) / column_nb
-    attributes, aliases = data[0::2], data[1::2]
-    
-    attr_alias_dict = {}
-    for attribute, alias in zip(attributes, aliases):
-        if len(alias):
-            attr_alias_dict[alias] = attribute
-    
-    device_list = PyTango.utils.CaselessList(dev_dict.keys())
-    alias_list = PyTango.utils.CaselessList(alias_dict.keys())
-    attr_alias_list = PyTango.utils.CaselessList(attr_alias_dict.keys())
-    
-    # Build cache
-    db_cache = IPython.ipstruct.Struct(devices=dev_dict, aliases=alias_dict,
-                                       servers=serv_dict, klasses=klass_dict,
-                                       junk=exposed_klasses,
-                                       attr_aliases=attr_alias_dict,
-                                       device_list=device_list,
-                                       alias_list=alias_list,
-                                       attr_alias_list=attr_alias_list)
-    
-    db._db_cache = db_cache
-
-    # Add this DB to the list of known DBs (for possible use in magic commands)
-    valid_dbs = __get_store(ip, "database_list", {})
-    if db.get_db_port_num() == 10000:
-        db_name = db.get_db_host()
-    else:
-        db_name = "%s:%s" % (db.get_db_host(), db.get_db_port())
-    valid_dbs[db_name] = None
-    __set_store(ip)
-    
-    return db
-
-def init_store(ip):
-    # recover the environment
-    ip.magic("store -r")
-    tango_store = ip.user_ns.get(_TANGO_STORE)
-    
-    if tango_store is None:
-        print("Initializing tango store (should only happen once)")
-        tango_store = {}
-        ip.to_user_ns( { _TANGO_STORE : tango_store} )
-        __store(ip, _TANGO_STORE)
-        
-def init_console(ip):
-    import PyTango.ipython
-    
-    TermColors = IPython.ColorANSI.TermColors
-    
-    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
-
-    so = IPython.ipstruct.Struct(
-        tango_banner = """%(Blue)shint: Try typing: mydev = Device("%(LightBlue)s<tab>%(Normal)s\n""")
-
-    so = ip.user_ns.get("tango_options", so)
-    
-    #o.colors = "Tango"
-    o.prompt_in1 = "ITango [\\#]: "
-    o.prompt_out = "Result [\\#]: "
-    banner = """
-%(Purple)sITango %(version)s%(Normal)s -- An interactive %(Purple)sTango%(Normal)s client.
-
-Running on top of Python %(pyver)s, IPython %(ipyver)s and PyTango %(pytangover)s
-
-help      -> ITango's help system.
-object?   -> Details about 'object'. ?object also works, ?? prints more.
-
-""" + so.tango_banner
-    o.banner = banner % d
-    if hasattr(o.banner, "format"):
-        o.banner = o.banner.format(**d)
-    
-def init_magic(ip):
-    __expose_magic(ip, "refreshdb", magic_refreshdb)
-    __expose_magic(ip, "reloaddb", magic_refreshdb)
-    __expose_magic(ip, "switchdb", magic_switchdb, __switchdb_completer)
-    __expose_magic(ip, "lsdev", magic_lsdev)
-    __expose_magic(ip, "lsdevclass", magic_lsdevclass)
-    __expose_magic(ip, "lsserv", magic_lsserv)
-    __expose_magic(ip, "tango_error", magic_tango_error)
-    __expose_magic(ip, "python_error", magic_python_error)
-    __expose_magic(ip, "mon", magic_mon, __monitor_completer)
-    #__expose_magic(ip, "umon", magic_umon, __monitor_completer)
-    
-    ip.to_user_ns({"get_device_map"   : get_device_map,
-                   "get_server_map"  : get_server_map,
-                   "get_class_map"   : get_class_map,
-                   "get_alias_map"   : get_alias_map,
-                   "get_device_list" : get_device_list,
-                   "get_alias_list"  : get_alias_list})
-    
-    #__expose_magic(ip, "get_device_map", get_device_map)
-    #__expose_magic(ip, "get_server_map", get_server_map)
-    #__expose_magic(ip, "get_class_map", get_class_map)
-    #__expose_magic(ip, "get_alias_map", get_alias_map)
-    #__expose_magic(ip, "get_device_list", get_device_list)
-    #__expose_magic(ip, "get_alias_list", get_alias_list)
-
-def complete(text):
-    """a super complete!!!!"""
-    self = IPython.ipapi.get().IP
-    complete = self.Completer.complete
-    state = 0
-    comps = set()
-    while True:
-        newcomp = complete("", state, line_buffer=text)
-        if newcomp is None:
-            break
-        comps.add(newcomp)
-        state += 1
-    outcomps = sorted(comps)
-    return outcomps
-
-def init_ipython(ip, store=True, pytango=True, colors=True, console=True, magic=True):
-    
-    if ip is None:
-        raise Exception("ITango's init_ipython must be called from inside IPython")
-    
-    global _tango_init
-    if _tango_init is True: return
-    
-    #ip.IP._orig_complete = ip.IP.complete
-    #ip.IP.complete = complete
-    
-    if colors:  init_colors(ip)
-    if store:   init_store(ip)
-    if pytango: init_pytango(ip)
-    init_db(ip)
-    if console: init_console(ip)
-    if magic:   init_magic(ip)
-    
-    _tango_init = True
-
-def run():
-    argv = sys.argv
-
-    try:
-        for i, arg in enumerate(argv[:1]):
-            if arg.startswith('--profile='):
-                break
-        else:
-            argv.append("--profile=tango")
-    except:
-        pass    
-        
-    shell = IPython.Shell.start()
-    shell.mainloop()
diff --git a/src/boost/python/ipython/ipython_00_11/__init__.py b/src/boost/python/ipython/ipython_00_11/__init__.py
deleted file mode 100644
index 4bafc48..0000000
--- a/src/boost/python/ipython/ipython_00_11/__init__.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# -----------------------------------------------------------------------------
-# 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, \
-    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
deleted file mode 100644
index cbf09a0..0000000
--- a/src/boost/python/ipython/ipython_00_11/ipy_install.py
+++ /dev/null
@@ -1,102 +0,0 @@
-#!/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.
-# -----------------------------------------------------------------------------
-
-from __future__ import with_statement
-
-import sys
-import os
-import io
-
-import IPython
-from IPython.core.profiledir import ProfileDirError, ProfileDir
-from IPython.core.application import BaseIPythonApplication
-from IPython.utils.path import get_ipython_dir
-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 
-friendly interface to Tango.
-Created with PyTango {pytangover} for IPython {ipyver}\"\"\"
-
-import PyTango.ipython
-
-config = get_config()
-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
-    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'):
-    if verbose:
-        def out(msg):
-            sys.stdout.write(msg)
-            sys.stdout.flush()
-    else:
-        out = lambda x : None
-            
-    ipython_dir = ipydir or get_ipython_dir()
-    try:
-        p_dir = ProfileDir.find_profile_dir_by_name(ipython_dir, profile)
-    except ProfileDirError:
-        p_dir = ProfileDir.create_profile_dir_by_name(ipython_dir, profile)
-    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. "\
-                                   "Do you wish to replace it?", default='y')
-    
-    if not create_config:
-        return
-
-    out("Installing tango extension to ipython... ")
-
-    profile = __PROFILE.format(pytangover=PyTango.Release.version,
-                               ipyver=IPython.release.version)
-    with open(abs_config_file_name, "w") as f:
-        f.write(profile)
-        f.close()
-    out("[DONE]\n\n")
-    out("""\
-To start ipython with tango interface simply type on the command line:
-%% ipython --profile=tango
-
-For more information goto:
-http://www.tango-controls.org/static/PyTango/latest/doc/html/
-
-Have fun with ITango!
-The PyTango team
-""")
-    
-def main():
-    d = None
-    if len(sys.argv) > 1:
-        d = sys.argv[1]
-    install(d)
-    
-if __name__ == "__main__":
-    main()
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
deleted file mode 100644
index ad4cd69..0000000
--- a/src/boost/python/ipython/ipython_00_11/ipython_00_11.py
+++ /dev/null
@@ -1,1269 +0,0 @@
-#!/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.
-# -----------------------------------------------------------------------------
-
-"""An IPython profile designed to provide a user friendly interface to Tango"""
-
-from __future__ import print_function
-
-__all__ = ["load_config", "load_ipython_extension", "unload_ipython_extension"]
-
-import sys
-import os
-import re
-import io
-import operator
-import textwrap
-
-from IPython.core.error import UsageError
-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
-
-import PyTango
-import PyTango.utils
-
-_TG_EXCEPTIONS = PyTango.DevFailed, PyTango.ConnectionFailed, \
-    PyTango.CommunicationFailed, \
-    PyTango.NamedDevFailed, PyTango.NamedDevFailedList, \
-    PyTango.WrongNameSyntax, PyTango.NonDbDevice, PyTango.WrongData, \
-    PyTango.NonSupportedFeature, PyTango.AsynCall, \
-    PyTango.AsynReplyNotArrived, PyTango.EventSystemFailed, \
-    PyTango.DeviceUnlocked, PyTango.NotAllowed
-
-_DB_SYMB = "db"
-_DFT_TANGO_HOST = None
-_TANGO_STORE = "__tango_store"
-_TANGO_ERR = "__tango_error"
-_PYTHON_ERR = "__python_error"
-_tango_init = False
-
-#-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-# IPython utilities
-#-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-
-def get_pylab_mode():
-    return get_app().pylab
-
-def get_color_mode():
-    return get_config().InteractiveShell.colors
-
-def get_app():
-    #return TerminalIPythonApp.instance()
-    return Application.instance()
-
-def get_shell():
-    """Get the global InteractiveShell instance."""
-    return get_app().shell
-
-def get_ipapi():
-    """Get the global InteractiveShell instance."""
-    return InteractiveShell.instance()
-
-def get_config():
-    return get_app().config
-
-def get_editor():
-    return get_ipapi().editor
-
-def get_user_ns():
-    return get_shell().user_ns
-
-class DeviceClassCompleter(object):
-    """Completer class that returns the list of devices of some class when
-    called. """
-    
-    def __init__(self, klass, devices):
-        self._klass = klass
-        self._devices = devices
-    
-    def __call__(self, ip, evt):
-        return self._devices
-
-
-# Rewrite DeviceProxy constructor because the database context that the user is
-# using may be different than the default TANGO_HOST. What we do is always append
-# the name of the database in usage to the device name given by the user (in case 
-# he doesn't give a database name him(her)self, of course.
-#__DeviceProxy_init_orig__ = PyTango.DeviceProxy.__init__
-#def __DeviceProxy__init__(self, dev_name):
-#    db = __get_db()
-#    if db is None: return
-#    if dev_name.count(":") == 0:
-#        db_name = "%s:%s" % (db.get_db_host(), db.get_db_port())
-#        dev_name = "%s/%s" % (db_name, dev_name)
-#    __DeviceProxy_init_orig__(self, dev_name)
-#PyTango.DeviceProxy.__init__ = __DeviceProxy__init__
-
-#-------------------------------------------------------------------------------
-# Completers
-#-------------------------------------------------------------------------------
-
-def __DeviceProxy_completer(ip, evt):
-    db = __get_db()
-    if db is None: return
-    ret = list(db._db_cache.devices.keys())
-    ret.extend(db._db_cache.aliases.keys())
-    return ret
-
-def __DeviceClass_completer(ip, evt):
-    db = __get_db()
-    if db is None: return
-    return list(db._db_cache.klasses.keys())
-
-def __DeviceAlias_completer(ip, evt):
-    db = __get_db()
-    if db is None: return
-    return list(db._db_cache.aliases.keys())
-
-def __AttributeAlias_completer(ip, evt):
-    db = __get_db()
-    if db is None: return
-    return list(db._db_cache.attr_aliases.keys())
-
-def __PureDeviceProxy_completer(ip, evt):
-    db = __get_db()
-    if db is None: return
-    return list(db._db_cache.devices.keys())
-
-def __AttributeProxy_completer(ip, evt):
-    db = __get_db()
-    if db is None: return
-    cache = db._db_cache
-    
-    symb = evt.symbol
-    n = symb.count("/")
-    ret, devs, dev_aliases = None, cache.devices, cache.aliases
-    # dev_list and dev_alias_list are case insensitive. They should only be used
-    # to search for elements. Their elements are the same as the keys of the 
-    # dictionaries devs and dev_aliases respectively
-    dev_list, dev_alias_list = cache.device_list, cache.alias_list
-    dev_name = None
-    if n == 0:
-        # means it can be an attr alias, a device name has alias or as full device name
-        ret = list(cache.get("attr_aliases").keys())
-        ret.extend([ d+"/" for d in devs ])
-        ret.extend([ d+"/" for d in dev_aliases ])
-        # device alias found!
-        if symb in dev_alias_list:
-            dev_name = symb
-    elif n == 1:
-        # it can still be a full device name
-        ret = [ d+"/" for d in devs ]
-        # it can also be devalias/attr_name
-        dev, attr = symb.split("/")
-        if dev in dev_alias_list:
-            dev_name = dev
-    elif n == 2:
-        # it is for sure NOT an attribute alias or a device alias
-        ret = [ d+"/" for d in devs ]
-        # device found!
-        if symb in dev_list:
-            dev_name = symb
-    elif n == 3:
-        # it is for sure a full attribute name
-        dev, sep, attr = symb.rpartition("/")
-        if dev in dev_list:
-            dev_name = dev
-
-    if dev_name is None:
-        return ret
-    
-    try:
-        d = __get_device_proxy(dev_name)
-        # first check in cache for the attribute list
-        if not hasattr(d, "_attr_list"):
-            d._attr_list = d.get_attribute_list()
-        if ret is None:
-            ret = []
-        ret.extend([ "%s/%s" % (dev_name, a) for a in d._attr_list ])
-    except:
-        # either DeviceProxy could not be created or device is not online
-        pass
-
-    return ret
-
-def __get_device_proxy(dev_name):
-    db = __get_db()
-    if db is None: return
-    cache = db._db_cache
-    from_alias = cache.aliases.get(dev_name)
-    
-    if from_alias is not None:
-        dev_name = from_alias
-
-    data = cache.devices.get(dev_name)
-    if data is not None:
-        d = data[3]
-        if d is None:
-            try:
-                d = data[3] = PyTango.DeviceProxy(dev_name)
-            except:
-                pass
-        return d
-
-def __get_device_subscriptions(dev_name):
-    db = __get_db()
-    if db is None: return
-    cache = db._db_cache
-    from_alias = cache.aliases.get(dev_name)
-    
-    if from_alias is not None:
-        dev_name = from_alias
-
-    data = cache.devices.get(dev_name)
-    if data is not None:
-        return data[4]
-
-__monitor_completer = __AttributeProxy_completer
-
-#-------------------------------------------------------------------------------
-# Magic commands
-#-------------------------------------------------------------------------------
-
-def refreshdb(self, parameter_s=''):
-    init_db(parameter_s)
-
-def switchdb(self, parameter_s=''):
-    """Switches the active tango Database.
-    
-    Usage: switchdb <host>[(:| )<port>]
-
-    <port> is optional. If not given it defaults to 10000.
-    
-    Examples:
-    In [1]: switchdb homer:10005
-    In [2]: switchdb homer 10005
-    In [3]: switchdb homer"""
-    
-    if parameter_s == '':
-        raise UsageError("%switchdb: Must specify a tango database name. "\
-                         "See '%switchdb?'")
-    return init_db(parameter_s)
-
-def lsdev(self, parameter_s=''):
-    """Lists all known tango devices.
-    
-    Usage: lsdev [<device name filter(regular expression)]
-    
-    Examples:
-    In [1]: lsdev
-    In [2]: lsdev sys.*"""
-    
-    if parameter_s:
-        reg_exp = re.compile(parameter_s, re.IGNORECASE)
-    else:
-        reg_exp = None
-    
-    db = __get_db()
-    if db is None:
-        print("You are not connected to any Tango Database. Device list is empty")
-        return
-    data = db._db_cache.devices
-
-    s = io.StringIO()
-    lengths = 40, 25, 25, 20
-    title = "Device", "Alias", "Server", "Class"
-    templ = "{0:{l[0]}} {1:{l[1]}} {2:{l[2]}} {3:{l[3]}}"
-    msg = templ.format(*title, l=lengths)
-    print(msg, file=s)
-    print(*map(operator.mul, lengths, len(lengths)*"-"), file=s)
-    for d, v in data.items():
-        if reg_exp and not reg_exp.match(d):
-            continue
-        print(templ.format(d, v[0], v[1], v[2], l=lengths), file=s)
-    s.seek(0)
-    page(s.read())
-
-def lsdevclass(self, parameter_s=''):
-    """Lists all known tango device classes.
-    
-    Usage: lsdevclass [<class name filter(regular expression)]
-    
-    Examples:
-    In [1]: lsdevclass
-    In [2]: lsdevclass Motor.*"""
-    
-    if parameter_s:
-        reg_exp = re.compile(parameter_s, re.IGNORECASE)
-    else:
-        reg_exp = None
-    
-    db = __get_db()
-    if db is None:
-        print("You are not connected to any Tango Database. Device class list is empty")
-        return
-    data = db._db_cache.klasses
-
-    data = [ "%-030s" % klass for klass in data.keys() if not reg_exp or reg_exp.match(klass) ]
-    s = textwrap.fill(" ".join(data), 80)
-    page(s)
-
-def lsserv(self, parameter_s=''):
-    """Lists all known tango servers.
-    
-    Usage: lsserv [<class name filter(regular expression)]
-    
-    Examples:
-    In [1]: lsserv
-    In [2]: lsserv Motor/.*"""
-    
-    if parameter_s:
-        reg_exp = re.compile(parameter_s, re.IGNORECASE)
-    else:
-        reg_exp = None
-    
-    db = __get_db()
-    if db is None:
-        print("You are not connected to any Tango Database. Device class list is empty")
-        return
-    data = db._db_cache.servers
-
-    data = [ "%-030s" % server for server in data.keys() if not reg_exp or reg_exp.match(server) ]
-    s = textwrap.fill(" ".join(data), 80)
-    page(s)
-
-def tango_error(self, parameter_s=''):
-    """Displays detailed information about the last tango error"""
-    global _TANGO_ERR
-    err_info = get_user_ns().get(_TANGO_ERR)
-    if err_info is None:
-        print("No tango error reported so far.")
-        return
-    print("Last tango error:")
-    print(err_info[1])
-
-def python_error(self, parameter_s=''):
-    """Displays detailed information about the last python error"""
-    global _PYTHON_ERR
-    err_info = get_user_ns().get(_PYTHON_ERR)
-    if err_info is None:
-        print("No error reported so far.")
-        return
-    ip = get_ipapi()
-    etype, evalue, etb = err_info[:3]
-    ip.InteractiveTB(etype=etype, evalue=evalue, etb=etb, tb_offset=None)
-
-_EVT_LOG = None
-def __get_event_log():
-    global _EVT_LOG
-    if _EVT_LOG is None:
-#        qthreads = get_config().q4thread
-#        if qthreads:
-#            import ipy_qt
-#            model = ipy_qt.EventLoggerTableModel(capacity=10000)
-#            _EVT_LOG = ipy_qt.EventLogger(model=model)
-#            _EVT_LOG.setWindowTitle("ITango - Event Logger Table")
-#        else:
-        import PyTango.ipython.eventlogger
-        _EVT_LOG = PyTango.ipython.eventlogger.EventLogger(capacity=10000, pager=page)
-    return _EVT_LOG
-
-def mon(self, parameter_s=''):
-    """Monitor a given attribute.
-    
-    %mon -a <attribute name>           - activates monitoring of given attribute
-    %mon -d <attribute name>           - deactivates monitoring of given attribute
-    %mon -r                            - deactivates monitoring of all attributes
-    %mon -i <id>                       - displays detailed information for the event with given id
-    %mon -l <dev filter> <attr filter> - shows event table filtered with the regular expression for attribute name
-    %mon                               - shows event table (= %mon -i .* .*)"""
-    
-    db = __get_db()
-    if db is None:
-        print("You are not connected to any Tango Database.")
-        return
-    
-    # make sure parameter_s is a str and not a unicode
-    parameter_s = str(parameter_s)
-    opts, args = self.parse_options(parameter_s,'adril', mode='list')
-    if len(args) > 3:
-        raise UsageError("%mon: too many arguments")
-    if 'd' in opts:
-        try:
-            todel = args[0]
-        except IndexError:
-            raise UsageError("%mon -d: must provide an attribute to unmonitor")
-        else:
-            try:
-                dev, sep, attr = todel.rpartition("/")
-                subscriptions = __get_device_subscriptions(dev)
-                id = subscriptions[attr.lower()]
-                del subscriptions[attr.lower()]
-                d = __get_device_proxy(dev)
-                d.unsubscribe_event(id)
-                print("Stopped monitoring '%s'" % todel)
-            except KeyError:
-                raise UsageError("%%mon -d: Not monitoring '%s'" % todel)
-                    
-    elif 'a' in opts:
-        try:
-            toadd = args[0]
-        except IndexError:
-            raise UsageError("%mon -a: must provide an attribute to monitor")
-        dev, sep, attr = toadd.rpartition("/")
-        subscriptions = __get_device_subscriptions(dev)
-        id = subscriptions.get(attr.lower())
-        if id is not None:
-            raise UsageError("%%mon -a: Already monitoring '%s'" % toadd)
-        d = __get_device_proxy(dev)
-        w = __get_event_log()
-        model = w.model()
-        id = d.subscribe_event(attr, PyTango.EventType.CHANGE_EVENT, model, [])
-        subscriptions[attr.lower()] = id
-        print("'%s' is now being monitored. Type 'mon' to see all events" % toadd)
-    elif 'r' in opts:
-        for d, v in db._db_cache.devices.items():
-            d, subs = v[3], v[4]
-            for id in subs.values():
-                d.unsubscribe_event(id)
-            v[4] = {}
-    elif 'i' in opts:
-        try:
-            evtid = int(args[0])
-        except IndexError:
-            raise UsageError("%mon -i: must provide an event ID")
-        except ValueError:
-            raise UsageError("%mon -i: must provide a valid event ID")
-        try:
-            w = __get_event_log()
-            e = w.getEvents()[evtid]
-            if e.err:
-                print(str(PyTango.DevFailed(*e.errors)))
-            else:
-                print(str(e))
-        except IndexError:
-            raise UsageError("%mon -i: must provide a valid event ID")
-    elif 'l' in opts:
-        try:
-            dexpr = args[0]
-            aexpr = args[1]
-        except IndexError:
-            raise UsageError("%mon -l: must provide valid device and " \
-                             "attribute filters")
-        w = __get_event_log()
-        w.show(dexpr, aexpr)
-    else:
-        w = __get_event_log()
-        w.show()
-
-#-------------------------------------------------------------------------------
-# Useful functions (not magic commands but accessible from CLI as normal python
-# functions)
-#-------------------------------------------------------------------------------
-
-def get_device_map():
-    """Returns a dictionary where keys are device names and value is a sequence
-    of 4 elements: 
-        - alias name (empty string if no alias is defined)
-        - tango server name (full tango server name <name>/<instance>)
-        - tango class name
-        - DeviceProxy to the device or None if it hasn't been initialized yet
-          (this last element is for internal tango usage only. If you need a 
-           DeviceProxy to this device, create your own)"""
-    db = __get_db()
-    if db is None:
-        print("You are not connected to any Tango Database.")
-        return
-    return db._db_cache.devices
-
-def get_server_map():
-    """Returns a dictionary where keys are server names (<name>/<instance>)
-    and value is a sequence of device names that belong to the server"""
-    db = __get_db()
-    if db is None:
-        print("You are not connected to any Tango Database.")
-        return
-    return db._db_cache.servers
-
-def get_class_map():
-    """Returns a dictionary where keys are the tango classes and value is a 
-    sequence of device names that belong to the tango class"""
-    db = __get_db()
-    if db is None:
-        print("You are not connected to any Tango Database.")
-        return
-    return db._db_cache.klasses
-
-def get_alias_map():
-    """Returns a dictionary where keys are the tango device aliases and value 
-    is a the tango device name"""
-    db = __get_db()
-    if db is None:
-        print("You are not connected to any Tango Database.")
-        return
-    return db._db_cache.aliases
-
-def get_device_list():
-    """Returns a case insensitive list of device names for the current 
-    database"""
-    db = __get_db()
-    if db is None:
-        print("You are not connected to any Tango Database.")
-        return
-    return db._db_cache.device_list
-
-def get_alias_list():
-    """Returns a case insensitive list of device aliases for the current 
-    database"""
-    db = __get_db()
-    if db is None:
-        print("You are not connected to any Tango Database.")
-        return
-    return db._db_cache.alias_list    
-    
-#-------------------------------------------------------------------------------
-# Private helper methods
-#-------------------------------------------------------------------------------
-
-def __exc_handler(ip, etype, value, tb, tb_offset=None):
-    global _TG_EXCEPTIONS
-    user_ns = get_user_ns()
-    if etype in _TG_EXCEPTIONS:
-        global _TANGO_ERR
-        user_ns[_TANGO_ERR] = etype, value, tb, tb_offset
-        if len(value.args):
-            v = value.args[0]
-            print("%s: %s" % (v.reason ,v.desc))
-        else:
-            print("Empty DevFailed")
-        print("(For more detailed information type: tango_error)")
-    else:
-        global _PYTHON_ERR
-        user_ns[_PYTHON_ERR] = etype, value, tb, tb_offset
-        print(etype.__name__ + ": " + str(value))
-        print("(For more detailed information type: python_error)")
-
-def __get_default_tango_host():
-    global _DFT_TANGO_HOST
-    if _DFT_TANGO_HOST is None:
-        try:
-            db = PyTango.Database()
-            _DFT_TANGO_HOST = "%s:%s" % (db.get_db_host(), db.get_db_port())
-        except:
-            pass
-    return _DFT_TANGO_HOST
-
-def __get_db(host_port=None):
-    """host_port == None: Use current DB whatever it is or create
-                          default if doesn't exist
-       host_port == '' : use default db. If it is not the current db, switch
-                         current db to it and return it
-       host_port == ... : if ... is not the current db, switch current db to it
-                          and return it
-    """
-    
-    ip = get_ipapi()
-    user_ns = get_user_ns()
-
-    global _DB_SYMB
-    db = user_ns.get(_DB_SYMB)
-    
-    if host_port is None:
-        if db is None:
-            host_port = __get_default_tango_host()
-    elif host_port == '':
-        host_port = __get_default_tango_host()
-    else:
-        host_port = host_port.strip().replace(" ",":")
-        if host_port.count(":") == 0:
-            host_port += ":10000"
-    
-    if host_port is not None:
-        host_port = str(host_port)
-    
-    if db is None:
-        create_db = True
-    elif host_port is None:
-        create_db = False
-    else:
-        old_host_port = "%s:%s" % (db.get_db_host(), db.get_db_port())
-        create_db = old_host_port != host_port
-
-    if create_db:
-        try:
-            db = PyTango.Database(*host_port.split(":"))
-            
-            user_ns["DB_NAME"] = host_port
-        except Exception as e:
-            if db:
-                print("\nCould not access Database %s:" % host_port)
-                print(str(e))
-                old_host_port = "%s:%s" % (db.get_db_host(), db.get_db_port())
-                print("Maintaining connection to Database", old_host_port)
-                user_ns["DB_NAME"] = old_host_port
-            else:
-                print("\nCould not access any Database. Make sure:")
-                print("\t- .tangorc, /etc/tangorc or TANGO_HOST environment is defined.")
-                print("\t- the Database DS is running")
-                user_ns["DB_NAME"] = "OFFLINE"
-                
-        # register the 'db' in the user namespace
-        user_ns.update({ _DB_SYMB : db })
-        
-    return db
-
-def __get_obj_name(o):
-    try:
-        n = o.__name__
-    except:
-        try:
-            n = o.__class__.__name__
-        except:
-            n = "<unknown>"
-    return n
-
-def __completer_wrapper(f):
-    def wrapper(ip, evt):
-        try:
-            return f(ip, evt)
-        except Exception as e:
-            print()
-            print("An unexpected exception ocorred during ITango command completer.")
-            print("Please send a bug report to the PyTango team with the following information:")
-            print(80*"-")
-            print("Completer:",__get_obj_name(f))
-            print(80*"-")
-            import traceback
-            traceback.print_exc()
-            print(80*"-")
-            raise e
-    return wrapper
-
-def __expose_magic(ip, name, fn, completer_func=None):
-    ip.define_magic(name, fn)
-    
-    if completer_func is None:
-        return
-    
-    # enable macro param completion
-    ip.set_hook('complete_command', completer_func, re_key = ".*" + name)
-
-def __unexpose_magic(ip, name):
-    delattr(ip, name)
-
-def __build_color_scheme(ip, name):
-    import IPython.Prompts
-    import IPython.PyColorize
-    import IPython.excolors
-    from IPython.utils.coloransi import TermColors, InputTermColors
-
-    # make some schemes as instances so we can copy them for modification easily:
-    PromptColors = IPython.Prompts.PromptColors
-    ANSICodeColors = IPython.PyColorize.ANSICodeColors
-    ExceptionColors = IPython.excolors.ExceptionColors
-    TBColors = ip.IP.InteractiveTB.color_scheme_table
-    SyntaxColors = ip.IP.SyntaxTB.color_scheme_table
-    InspectColors = IPython.OInspect.InspectColors
-    
-    promptTangoColors = PromptColors['Linux'].copy(name)
-    ANSITangoColors = ANSICodeColors['Linux'].copy(name)
-    exceptionTangoColors = ExceptionColors['Linux'].copy(name)
-    TBTangoColors = TBColors['Linux'].copy(name)
-    syntaxTangoColors = SyntaxColors['Linux'].copy(name)
-    inspectTangoColors = InspectColors['Linux'].copy(name)
-    
-    # initialize prompt with default tango colors
-    promptTangoColors.colors.in_prompt  = InputTermColors.Purple
-    promptTangoColors.colors.in_number  = InputTermColors.LightPurple
-    promptTangoColors.colors.in_prompt2 = InputTermColors.Purple
-    promptTangoColors.colors.out_prompt = TermColors.Blue
-    promptTangoColors.colors.out_number = TermColors.LightBlue
-
-    ret= { "prompt" : (PromptColors, promptTangoColors),
-          "ANSI"   : (ANSICodeColors, ANSITangoColors),
-          "except" : (ExceptionColors, exceptionTangoColors),
-          "TB"     : (TBColors, TBTangoColors),
-          "Syntax" : (SyntaxColors, syntaxTangoColors),
-          "Inspect": (InspectColors, inspectTangoColors) }
-
-    if ip.IP.isthreaded:
-        TBThreadedColors = ip.IP.sys_excepthook.color_scheme_table
-        TBThreadedTangoColors = TBThreadedColors['Linux'].copy(name)
-        ret["TBThreaded"] = TBThreadedColors, TBThreadedTangoColors
-    return ret
-
-#-------------------------------------------------------------------------------
-# Initialization methods
-#-------------------------------------------------------------------------------
-
-def init_pytango(ip):
-    """Initializes the IPython environment with PyTango elements"""
-
-    # export symbols to IPython namepspace
-    ip.ex("import PyTango")
-    ip.ex("from PyTango import DeviceProxy, AttributeProxy, Database, Group")
-    ip.ex("Device = DeviceProxy")
-    ip.ex("Attribute = AttributeProxy")
-
-    # add completers
-    dp_completer = __completer_wrapper(__DeviceProxy_completer)
-    attr_completer = __completer_wrapper(__AttributeProxy_completer)
-    ip.set_hook('complete_command', dp_completer, re_key = ".*DeviceProxy[^\w\.]+")
-    ip.set_hook('complete_command', dp_completer, re_key = ".*Device[^\w\.]+")
-    ip.set_hook('complete_command', attr_completer, re_key = ".*AttributeProxy[^\w\.]+")
-    ip.set_hook('complete_command', attr_completer, re_key = ".*Attribute[^\w\.]+")
-    
-    ip.set_custom_exc((Exception,), __exc_handler)
-
-def init_db(parameter_s=''):
-    ip = get_ipapi()
-    user_ns = get_user_ns()
-    global _DB_SYMB
-    old_db = user_ns.get(_DB_SYMB)
-    
-    db = __get_db(parameter_s)
-    
-    if old_db is not None and hasattr(old_db, "_db_cache"):
-        old_junk = old_db._db_cache["junk"].keys()
-        for e in old_junk:
-            del user_ns[e]
-    else:
-        old_junk = ()
-        
-    if db is None: return
-    
-    os.environ["TANGO_HOST"] = "%s:%s" % (db.get_db_host(), db.get_db_port())
-    
-    # Initialize device and server information
-    query = "SELECT name, alias, server, class FROM device order by name"
-    
-    r = db.command_inout("DbMySqlSelect", query)
-    row_nb, column_nb = r[0][-2], r[0][-1]
-    results, data = r[0][:-2], r[1]
-    assert row_nb == len(data) / column_nb
-    devices, aliases, servers, klasses = data[0::4], data[1::4], data[2::4], data[3::4]
-
-    #CD = PyTango.utils.CaselessDict
-    CD = dict
-    dev_dict, serv_dict, klass_dict, alias_dict = CD(), CD(), CD(), CD()
-    
-    for device, alias, server, klass in zip(devices, aliases, servers, klasses):
-        dev_lower = device.lower()
-
-        # hide dserver devices
-        if dev_lower.startswith("dserver/"): continue
-        
-        # hide alias that start with "_"
-        if alias and alias[0] == "_": alias = ''
-        
-        # last None below is to be filled by DeviceProxy object on demand
-        # last empty dict<str, int> where keys is attribute name and value is 
-        # the subscription id
-        dev_dict[device] = [alias, server, klass, None, {}]
-        serv_devs = serv_dict.get(server)
-        if serv_devs is None:
-            serv_dict[server] = serv_devs = []
-        serv_devs.append(device)
-        klass_devs = klass_dict.get(klass)
-        if klass_devs is None:
-            klass_dict[klass] = klass_devs = []
-        klass_devs.append(device)
-        if len(alias):
-            alias_dict[alias] = device
-            serv_devs.append(alias)
-            klass_devs.append(alias)
-
-    exposed_klasses = {}
-    excluded_klasses = "DServer",
-    for klass, devices in klass_dict.items():
-        if klass in excluded_klasses:
-            continue
-        exists = klass in user_ns
-        if not exists or klass in old_junk:
-            c = DeviceClassCompleter(klass, devices)
-            ip.set_hook('complete_command', c, re_key = ".*" + klass + "[^\w\.]+")
-            exposed_klasses[klass] = PyTango.DeviceProxy
-    
-    # expose classes no user namespace
-    user_ns.update(exposed_klasses)
-    
-    # Initialize attribute information
-    query = "SELECT name, alias FROM attribute_alias order by alias"
-
-    r = db.command_inout("DbMySqlSelect", query)
-    row_nb, column_nb = r[0][-2], r[0][-1]
-    results, data = r[0][:-2], r[1]
-    assert row_nb == len(data) / column_nb
-    attributes, aliases = data[0::2], data[1::2]
-    
-    attr_alias_dict = {}
-    for attribute, alias in zip(attributes, aliases):
-        if len(alias):
-            attr_alias_dict[alias] = attribute
-    
-    device_list = PyTango.utils.CaselessList(dev_dict.keys())
-    alias_list = PyTango.utils.CaselessList(alias_dict.keys())
-    attr_alias_list = PyTango.utils.CaselessList(attr_alias_dict.keys())
-    
-    # Build cache
-    db_cache = Struct(devices=dev_dict, aliases=alias_dict,
-        servers=serv_dict, klasses=klass_dict, junk=exposed_klasses,
-        attr_aliases=attr_alias_dict, device_list=device_list,
-        alias_list=alias_list, attr_alias_list=attr_alias_list)
-    
-    db._db_cache = db_cache
-
-    # Add this DB to the list of known DBs (for possible use in magic commands)
-    if db.get_db_port_num() == 10000:
-        db_name = db.get_db_host()
-    else:
-        db_name = "%s:%s" % (db.get_db_host(), db.get_db_port())
-    return db
-
-def init_magic(ip):
-
-    import IPython.core.magic
-
-    new_style_magics = hasattr(IPython.core.magic, 'Magics') and hasattr(IPython.core.magic, 'magics_class')
-
-    if new_style_magics:
-        @IPython.core.magic.magics_class
-        class Tango(IPython.core.magic.Magics):
-            
-            refreshdb = IPython.core.magic.line_magic(refreshdb)
-            switchdb = IPython.core.magic.line_magic(switchdb)
-            lsdev = IPython.core.magic.line_magic(lsdev)
-            lsdevclass = IPython.core.magic.line_magic(lsdevclass)
-            lsserv = IPython.core.magic.line_magic(lsserv)
-            tango_error = IPython.core.magic.line_magic(tango_error)
-            python_error = IPython.core.magic.line_magic(python_error)
-            mon = IPython.core.magic.line_magic(mon)
-
-        ip.register_magics(Tango)
-        ip.set_hook('complete_command', __monitor_completer, re_key = ".*" + "mon")
-    else:
-        __expose_magic(ip, "refreshdb", refreshdb)
-        __expose_magic(ip, "switchdb", switchdb)
-        __expose_magic(ip, "lsdev", lsdev)
-        __expose_magic(ip, "lsdevclass", lsdevclass)
-        __expose_magic(ip, "lsserv", lsserv)
-        __expose_magic(ip, "tango_error", tango_error)
-        __expose_magic(ip, "python_error", python_error)
-        __expose_magic(ip, "mon", mon, __monitor_completer)
-    
-    get_user_ns().update({"get_device_map"   : get_device_map,
-                   "get_server_map"  : get_server_map,
-                   "get_class_map"   : get_class_map,
-                   "get_alias_map"   : get_alias_map,
-                   "get_device_list" : get_device_list,
-                   "get_alias_list"  : get_alias_list})
-
-def complete(text):
-    """a super complete!!!!"""
-    self = get_ipapi().IP
-    complete = self.Completer.complete
-    state = 0
-    comps = set()
-    while True:
-        newcomp = complete("", state, line_buffer=text)
-        if newcomp is None:
-            break
-        comps.add(newcomp)
-        state += 1
-    outcomps = sorted(comps)
-    return outcomps
-
-__DIRNAME = os.path.dirname(os.path.abspath(__file__))
-__RES_DIR = os.path.join(__DIRNAME, os.path.pardir, 'resource')
-
-class __TangoInfo(object):
-    """Helper class for when DeviceProxy.info() is not available"""
-    
-    def __init__(self, dev):
-        try:
-            db = dev.get_device_db()
-            klass = db.get_class_for_device(dev.dev_name())
-            self.dev_class = self.dev_type = klass
-        except:
-            self.dev_class = self.dev_type = 'Device'
-        self.doc_url = 'http://www.esrf.eu/computing/cs/tango/tango_doc/ds_doc/index.html'
-        self.server_host = 'Unknown'
-        self.server_id = 'Unknown'
-        self.server_version = 1
-
-def __get_device_icon(dev_proxy, klass="Device"):
-    icon_prop = "__icon"
-    db = dev_proxy.get_device_db()
-    try:
-        icon_filename = dev_proxy.get_property(icon_prop)[icon_prop]
-        if icon_filename:
-            icon_filename = icon_filename[0]
-        else:
-            icon_filename = db.get_class_property(klass, icon_prop)[icon_prop]
-            if icon_filename:
-                icon_filename = icon_filename[0]
-            else:            
-                icon_filename = klass.lower() + os.path.extsep + "png"
-    except:
-        icon_filename = klass.lower() + os.path.extsep + "png"
-    
-    if os.path.isabs(icon_filename):
-        icon = icon_filename
-    else:
-        icon = os.path.join(__RES_DIR, icon_filename)
-    if not os.path.isfile(icon):
-        icon = os.path.join(__RES_DIR, "device.png")
-    return icon
-
-__DEV_HTML_TEMPLATE = """\
-<table border="0" cellpadding="2" width="100%">
-<tr><td width="140" rowspan="7" valign="middle" align="center"><img src="{icon}" height="128"/></td>
-    <td width="140">Name:</td><td><b>{name}</b></td></tr>
-<tr><td width="140">Alias:</td><td>{alias}</td></tr>
-<tr><td width="140">Database:</td><td>{database}</td></tr>
-<tr><td width="140">Type:</td><td>{dev_class}</td></tr>
-<tr><td width="140">Server:</td><td>{server_id}</td></tr>
-<tr><td width="140">Server host:</td><td>{server_host}</td></tr>
-<tr><td width="140">Documentation:</td><td><a target="_blank" href="{doc_url}">{doc_url}</a></td></tr>
-</table>"""
-
-def display_deviceproxy_html(dev_proxy):
-    """displayhook function for PyTango.DeviceProxy, rendered as HTML"""
-    try:
-        info = dev_proxy.info()
-    except:
-        info = __TangoInfo(dev_proxy)
-    name = dev_proxy.dev_name()
-    fmt = dict(dev_class=info.dev_class, server_id=info.server_id,
-               server_host=info.server_host, name=name)
-    
-    try:
-        fmt["alias"] = dev_proxy.alias()
-    except:
-        fmt["alias"] = "-----"
-
-    db = dev_proxy.get_device_db()
-    try:
-        fmt["database"] = db.get_db_host() + ":" + db.get_db_port()
-    except:
-        try:
-            fmt["database"] = db.get_file_name()
-        except:
-            fmt["database"]  = "Unknown"
-
-    doc_url = info.doc_url.split("\n")[0]
-    try:
-        fmt["doc_url"] = doc_url[doc_url.index("http"):]
-    except ValueError:
-        fmt["doc_url"] = doc_url
-
-    fmt['icon'] = __get_device_icon(dev_proxy, info.dev_class)
-
-    return __DEV_HTML_TEMPLATE.format(**fmt)
-
-__DB_HTML_TEMPLATE = """\
-<table border="0" cellpadding="2" width="100%">
-<tr><td width="140" rowspan="2" valign="middle" align="center"><img src="{icon}" height="128"/></td>
-    <td><b>{name}</b></td></tr>
-<tr><td>{info}</td></tr>
-</table>"""
-
-def display_database_html(db):
-    """displayhook function for PyTango.Database, rendered as HTML"""
-    fmt = dict()
-
-    try:
-        fmt["name"] = db.get_db_host() + ":" + db.get_db_port()
-    except:
-        try:
-            fmt["name"] = db.get_file_name()
-        except:
-            fmt["name"]  = "Unknown"
-
-    try:
-        fmt["info"] = db.get_info().replace("\n", "<BR/>")
-    except:
-        fmt["info"] = "Unknown"
-    
-    fmt['icon'] = os.path.join(__RES_DIR, "database.png")
-
-    return __DB_HTML_TEMPLATE.format(**fmt)
-
-__DEV_ATTR_RW_HTML_TEMPLATE = """\
-<table border="0" cellpadding="2" width="100%">
-<tr><td colspan="2" bgcolor="{bgcolor}">{name} ({type}, {data_format}, {quality}) at {time}</td></tr>
-<tr><td bgcolor="#EEEEEE" width="140">value{r_dim}:</td>
-    <td bgcolor="#EEEEEE">{value}</td></tr>
-<tr><td bgcolor="#EEEEEE" width="140">w_value{w_dim}:</td>
-    <td bgcolor="#EEEEEE">{w_value}</td></tr>
-</table>"""
-
-__DEV_ATTR_RO_HTML_TEMPLATE = """\
-<table border="0" cellpadding="2" width="100%">
-<tr><td colspan="2" bgcolor="{bgcolor}">{name} ({type}, {data_format}, {quality}) at {time}</td></tr>
-<tr><td bgcolor="#EEEEEE" width="140">value{r_dim}:</td>
-    <td bgcolor="#EEEEEE">{value}</td></tr>
-</table>"""
-
-__DEV_ATTR_ERR_HTML_TEMPLATE = """\
-<table border="0" cellpadding="2" width="100%">
-<tr><td bgcolor="#FF0000">{name} ({type}, {data_format}, {quality}) at {time}</td></tr>
-<tr><td bgcolor="#EEEEEE">{error}</td></tr>
-</table>"""
-
-QUALITY_TO_HEXCOLOR_STR = {
-    PyTango.AttrQuality.ATTR_VALID : ("#00FF00", "#000000"),
-    PyTango.AttrQuality.ATTR_INVALID : ("#808080", "#FFFFFF"),    
-    PyTango.AttrQuality.ATTR_ALARM : ("#FF8C00", "#FFFFFF"),    
-    PyTango.AttrQuality.ATTR_WARNING : ("#FF8C00", "#FFFFFF"),    
-    PyTango.AttrQuality.ATTR_CHANGING : ("#80A0FF", "#000000"),
-    None : ("#808080", "#000000"), 
-}
-
-def display_deviceattribute_html(da):
-    """displayhook function for PyTango.DeviceAttribute, rendered as HTML"""
-    fmt = dict(name=da.name, type=da.type, data_format=da.data_format)
-    template = None
-    if da.has_failed:
-        fmt['error'] = "\n".join(map(str, da.get_err_stack())).replace("\n", "<br/>")
-        
-        template = __DEV_ATTR_ERR_HTML_TEMPLATE
-    else:
-        rd, wd = da.r_dimension, da.w_dimension
-        if wd.dim_x == 0 and wd.dim_y == 0 and da.w_value is None:
-            template = __DEV_ATTR_RO_HTML_TEMPLATE
-        else:
-            template = __DEV_ATTR_RW_HTML_TEMPLATE
-            fmt['w_value'] = str(da.w_value)
-            if da.data_format == PyTango.AttrDataFormat.SCALAR:
-                fmt['w_dim'] = ""
-            else:
-                fmt['w_dim'] = "<br/>(%d, %d)" % (wd.dim_x, wd.dim_y)
-        fmt['bgcolor'], fmt['fgcolor'] = QUALITY_TO_HEXCOLOR_STR[da.quality]
-        fmt['quality'] = str(da.quality)
-        if da.data_format == PyTango.AttrDataFormat.SCALAR:
-            fmt['r_dim'] = ""
-        else:
-            fmt['r_dim'] = "<br/>(%d, %d)" % (rd.dim_x, rd.dim_y)
-        fmt['value'] = str(da.value)
-        fmt['time'] = str(da.time.todatetime())
-    return template.format(**fmt)
-
-__GROUP_HTML_TEMPLATE = """\
-<table border="0" cellpadding="2" width="100%">
-<tr><td width="100" bgcolor="#EEEEEE">Name:</td><td bgcolor="#EEEEEE">{name}</td></tr>
-<tr><td width="100" bgcolor="#EEEEEE">Size:</td><td bgcolor="#EEEEEE">{size}</td></tr>
-<tr><td width="100" bgcolor="#EEEEEE">Devices:</td><td bgcolor="#EEEEEE">{devices}</td></tr>
-</table>"""
-
-def display_group_html(group):
-    devices = group.get_device_list()
-    devices = ", ".join(devices)
-    fmt=dict(name=group.get_name(), size=group.get_size(), devices=devices) 
-    return __GROUP_HTML_TEMPLATE.format(**fmt)
-
-__GROUP_REPLY_HTML_TEMPLATE = """\
-<table border="0" cellpadding="2" width="100%">
-<tr><td bgcolor="#EEEEEE">{name}</td></tr>
-<tr><td>{data}</td></tr>    
-"""
-
-__GROUP_REPLY_ERR_HTML_TEMPLATE = """\
-<table border="0" cellpadding="2" width="100%">
-<tr><td bgcolor="#FF0000">{name}</td></tr>
-<tr><td bgcolor="#EEEEEE">{error}</td></tr>
-</table>"""
-    
-def display_groupreply_html(gr):
-    fmt = dict(name="%s/%s" % (gr.dev_name(), gr.obj_name()))
-    template = None
-    if gr.has_failed():
-        fmt['error'] = "\n".join(map(str, gr.get_err_stack())).replace("\n", "<br/>")
-        template = __GROUP_REPLY_ERR_HTML_TEMPLATE
-    else:
-        template = __GROUP_REPLY_HTML_TEMPLATE
-        data = gr.get_data()
-        if isinstance(data, PyTango.DeviceAttribute):
-            data = display_deviceattribute_html(data)
-        fmt["data"] = data
-        
-    ret = template.format(**fmt)
-    return ret
-
-def init_display(ip):
-    html_formatter = ip.display_formatter.formatters["text/html"]
-    html_formatter.for_type(PyTango.DeviceProxy, display_deviceproxy_html)
-    html_formatter.for_type(PyTango.Database, display_database_html)
-    html_formatter.for_type(PyTango.DeviceAttribute, display_deviceattribute_html)
-    html_formatter.for_type(PyTango.Group, display_group_html)
-    html_formatter.for_type(PyTango.GroupAttrReply, display_groupreply_html)
-    html_formatter.for_type(PyTango.GroupCmdReply, display_groupreply_html)
-
-    
-def init_ipython(ip=None, store=True, pytango=True, colors=True, console=True,
-                 magic=True):
-
-    if ip is None:
-        ip = get_ipapi()
-    
-    global _tango_init
-    if _tango_init is True: return
-
-    init_display(ip)
-    
-    if pytango:
-        init_pytango(ip)
-    
-    init_db()
-
-    if magic:
-        init_magic(ip)
-    
-    _tango_init = True
-
-def load_config(config):
-    import PyTango.ipython
-    import IPython.utils.coloransi
-    
-    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(
-        tango_banner="""%(Blue)shint: Try typing: mydev = Device("%(LightBlue)s<tab>%(Normal)s\n""")
-
-    so = config.get("tango_options", so)
-
-    ipy_ver = PyTango.ipython.get_ipython_version()
-    
-    # ------------------------------------
-    # Application
-    # ------------------------------------
-    app = config.Application
-    app.log_level = 30
-
-    # ------------------------------------
-    # InteractiveShell
-    # ------------------------------------
-    i_shell = config.InteractiveShell
-    i_shell.colors = 'Linux'
-
-    if ipy_ver >= "0.12":
-        # ------------------------------------
-        # PromptManager (ipython >= 0.12)
-        # ------------------------------------
-        prompt = config.PromptManager
-        prompt.in_template = 'ITango [\\#]: '
-        prompt.out_template = 'Result [\\#]: '
-    else:
-        # (Deprecated in ipython >= 0.12 use PromptManager.in_template)
-        i_shell.prompt_in1 = 'ITango [\\#]: '
-        # (Deprecated in ipython >= 0.12 use PromptManager.out_template)
-        i_shell.prompt_out = 'Result [\\#]: '
-    
-    # ------------------------------------
-    # InteractiveShellApp
-    # ------------------------------------
-    i_shell_app = config.InteractiveShellApp
-    extensions = getattr(i_shell_app, 'extensions', [])
-    extensions.append('PyTango.ipython')
-    i_shell_app.extensions = extensions
-    
-    # ------------------------------------
-    # TerminalIPythonApp: options for the IPython terminal (and not Qt Console)
-    # ------------------------------------
-    term_app = config.TerminalIPythonApp
-    term_app.display_banner = True
-    #term_app.nosep = False
-    #term_app.classic = True
-    
-    # ------------------------------------
-    # IPKernelApp: options for the  Qt Console
-    # ------------------------------------
-    #kernel_app = config.IPKernelApp
-    ipython_widget = config.IPythonWidget
-    ipython_widget.in_prompt  = 'ITango [<span class="in-prompt-number">%i</span>]: '
-    ipython_widget.out_prompt = 'Result [<span class="out-prompt-number">%i</span>]: '
-    
-    #zmq_i_shell = config.ZMQInteractiveShell
-    
-    # ------------------------------------
-    # TerminalInteractiveShell
-    # ------------------------------------
-    term_i_shell = config.TerminalInteractiveShell
-    banner = """\
-%(Purple)sITango %(version)s%(Normal)s -- An interactive %(Purple)sTango%(Normal)s client.
-
-Running on top of Python %(pyver)s, IPython %(ipyver)s and PyTango %(pytangover)s
-
-help      -> ITango's help system.
-object?   -> Details about 'object'. ?object also works, ?? prints more.
-"""
-    
-    banner = banner % d
-    banner = banner.format(**d)
-    tango_banner = so.tango_banner % d
-    tango_banner = tango_banner.format(**d)
-    all_banner = "\n".join((banner, tango_banner))
-
-    term_i_shell.banner1 = banner
-    term_i_shell.banner2 = tango_banner
-
-    # ------------------------------------
-    # FrontendWidget
-    # ------------------------------------
-    frontend_widget = config.ITangoConsole
-    frontend_widget.banner = all_banner
-    
-def load_ipython_extension(ipython):
-    # The ``ipython`` argument is the currently active
-    # :class:`InteractiveShell` instance that can be used in any way.
-    # This allows you do to things like register new magics, plugins or
-    # aliases.
-    init_ipython(ip=ipython, store=False, colors=False)
-
-def unload_ipython_extension(ipython):
-    # If you want your extension to be unloadable, put that logic here.
-    #print "Unloading PyTango IPython extension"
-    pass
-
-def run():
-
-    # overwrite the original IPython Qt widget with our own so we can put a
-    # customized banner. IPython may have been installed without Qt support so we
-    # protect this code against an import error
-    try:
-        from IPython.utils.traitlets import Unicode
-        from IPython.frontend.qt.console.rich_ipython_widget import RichIPythonWidget
-
-        class ITangoConsole(RichIPythonWidget):
-            
-            banner = Unicode(config=True)
-
-            def _banner_default(self):
-                config = get_config()
-                return config.ITangoConsole.banner
-
-        import IPython.frontend.qt.console.qtconsoleapp
-        IPythonQtConsoleApp = IPython.frontend.qt.console.qtconsoleapp.IPythonQtConsoleApp
-        IPythonQtConsoleApp.widget_factory = ITangoConsole      
-    except ImportError:
-        pass
-
-    argv = sys.argv
-
-    try:
-        for i, arg in enumerate(argv[:1]):
-            if arg.startswith('--profile='):
-                break
-        else:
-            argv.append("--profile=tango")
-    except:
-        pass    
-        
-    launch_new_instance()
-    
diff --git a/src/boost/python/ipython/ipython_10_00/__init__.py b/src/boost/python/ipython/ipython_10_00/__init__.py
deleted file mode 100644
index 587afd6..0000000
--- a/src/boost/python/ipython/ipython_10_00/__init__.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# -----------------------------------------------------------------------------
-# 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_10_00/ipy_install.py b/src/boost/python/ipython/ipython_10_00/ipy_install.py
deleted file mode 100644
index b0f7bc4..0000000
--- a/src/boost/python/ipython/ipython_10_00/ipy_install.py
+++ /dev/null
@@ -1,102 +0,0 @@
-#!/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.
-# -----------------------------------------------------------------------------
-
-from __future__ import with_statement
-
-import os
-import sys
-
-import IPython
-from IPython.core.profiledir import ProfileDirError, ProfileDir
-from IPython.core.application import BaseIPythonApplication
-from IPython.utils.path import get_ipython_dir
-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 
-friendly interface to Tango.
-Created with PyTango {pytangover} for IPython {ipyver}\"\"\"
-
-import PyTango.ipython
-
-config = get_config()
-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
-    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'):
-    if verbose:
-        def out(msg):
-            sys.stdout.write(msg)
-            sys.stdout.flush()
-    else:
-        out = lambda x : None
-    
-    ipython_dir = ipydir or get_ipython_dir()
-    try:
-        p_dir = ProfileDir.find_profile_dir_by_name(ipython_dir, profile)
-    except ProfileDirError:
-        p_dir = ProfileDir.create_profile_dir_by_name(ipython_dir, profile)
-    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. "\
-                                   "Do you wish to replace it?", default='y')
-    
-    if not create_config:
-        return
-
-    out("Installing tango extension to ipython... ")
-
-    profile = __PROFILE.format(pytangover=PyTango.Release.version,
-                               ipyver=IPython.release.version)
-    with open(abs_config_file_name, "w") as f:
-        f.write(profile)
-        f.close()
-    out("[DONE]\n\n")
-    out("""\
-To start ipython with tango interface simply type on the command line:
-%% ipython --profile=tango
-
-For more information goto:
-http://www.tango-controls.org/static/PyTango/latest/doc/html/
-
-Have fun with ITango!
-The PyTango team
-""")
-    
-def main():
-    d = None
-    if len(sys.argv) > 1:
-        d = sys.argv[1]
-    install(d)
-    
-if __name__ == "__main__":
-    main()
diff --git a/src/boost/python/ipython/ipython_10_00/ipython_10_00.py b/src/boost/python/ipython/ipython_10_00/ipython_10_00.py
deleted file mode 100644
index 3e28b10..0000000
--- a/src/boost/python/ipython/ipython_10_00/ipython_10_00.py
+++ /dev/null
@@ -1,1331 +0,0 @@
-# -----------------------------------------------------------------------------
-# 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"""
-
-from __future__ import print_function
-
-__all__ = ["load_config", "load_ipython_extension", "unload_ipython_extension",
-           "run"]
-
-import os
-import re
-import io
-import sys
-import operator
-import textwrap
-
-from IPython.core.error import UsageError
-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.terminal.ipapp import launch_new_instance
-
-import PyTango
-import PyTango.utils
-
-
-_TG_EXCEPTIONS = PyTango.DevFailed, PyTango.ConnectionFailed, \
-    PyTango.CommunicationFailed, \
-    PyTango.NamedDevFailed, PyTango.NamedDevFailedList, \
-    PyTango.WrongNameSyntax, PyTango.NonDbDevice, PyTango.WrongData, \
-    PyTango.NonSupportedFeature, PyTango.AsynCall, \
-    PyTango.AsynReplyNotArrived, PyTango.EventSystemFailed, \
-    PyTango.DeviceUnlocked, PyTango.NotAllowed
-
-_DB_SYMB = "db"
-_DFT_TANGO_HOST = None
-_TANGO_STORE = "__tango_store"
-_TANGO_ERR = "__tango_error"
-_PYTHON_ERR = "__python_error"
-_tango_init = False
-
-#-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-# IPython utilities
-#-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-
-def get_pylab_mode():
-    return get_app().pylab
-
-def get_color_mode():
-    return get_config().InteractiveShell.colors
-
-def get_app():
-    #return TerminalIPythonApp.instance()
-    return Application.instance()
-
-def get_shell():
-    """Get the global InteractiveShell instance."""
-    return get_app().shell
-
-def get_ipapi():
-    """Get the global InteractiveShell instance."""
-    return InteractiveShell.instance()
-
-def get_config():
-    return get_app().config
-
-def get_editor():
-    return get_ipapi().editor
-
-def get_user_ns():
-    return get_shell().user_ns
-
-class DeviceClassCompleter(object):
-    """Completer class that returns the list of devices of some class when
-    called. """
-    
-    def __init__(self, klass, devices):
-        self._klass = klass
-        self._devices = devices
-    
-    def __call__(self, ip, evt):
-        return self._devices
-
-
-# Rewrite DeviceProxy constructor because the database context that the user is
-# using may be different than the default TANGO_HOST. What we do is always append
-# the name of the database in usage to the device name given by the user (in case 
-# he doesn't give a database name him(her)self, of course.
-#__DeviceProxy_init_orig__ = PyTango.DeviceProxy.__init__
-#def __DeviceProxy__init__(self, dev_name):
-#    db = __get_db()
-#    if db is None: return
-#    if dev_name.count(":") == 0:
-#        db_name = "%s:%s" % (db.get_db_host(), db.get_db_port())
-#        dev_name = "%s/%s" % (db_name, dev_name)
-#    __DeviceProxy_init_orig__(self, dev_name)
-#PyTango.DeviceProxy.__init__ = __DeviceProxy__init__
-
-#-------------------------------------------------------------------------------
-# Completers
-#-------------------------------------------------------------------------------
-
-def __DeviceProxy_completer(ip, evt):
-    db = __get_db()
-    if db is None: return
-    ret = list(db._db_cache.devices.keys())
-    ret.extend(db._db_cache.aliases.keys())
-    return ret
-
-def __DeviceClass_completer(ip, evt):
-    db = __get_db()
-    if db is None: return
-    return list(db._db_cache.klasses.keys())
-
-def __DeviceAlias_completer(ip, evt):
-    db = __get_db()
-    if db is None: return
-    return list(db._db_cache.aliases.keys())
-
-def __AttributeAlias_completer(ip, evt):
-    db = __get_db()
-    if db is None: return
-    return list(db._db_cache.attr_aliases.keys())
-
-def __PureDeviceProxy_completer(ip, evt):
-    db = __get_db()
-    if db is None: return
-    return list(db._db_cache.devices.keys())
-
-def __AttributeProxy_completer(ip, evt):
-    db = __get_db()
-    if db is None: return
-    cache = db._db_cache
-    
-    symb = evt.symbol
-    n = symb.count("/")
-    ret, devs, dev_aliases = None, cache.devices, cache.aliases
-    # dev_list and dev_alias_list are case insensitive. They should only be used
-    # to search for elements. Their elements are the same as the keys of the 
-    # dictionaries devs and dev_aliases respectively
-    dev_list, dev_alias_list = cache.device_list, cache.alias_list
-    dev_name = None
-    if n == 0:
-        # means it can be an attr alias, a device name has alias or as full device name
-        ret = list(cache.get("attr_aliases").keys())
-        ret.extend([ d+"/" for d in devs ])
-        ret.extend([ d+"/" for d in dev_aliases ])
-        # device alias found!
-        if symb in dev_alias_list:
-            dev_name = symb
-    elif n == 1:
-        # it can still be a full device name
-        ret = [ d+"/" for d in devs ]
-        # it can also be devalias/attr_name
-        dev, attr = symb.split("/")
-        if dev in dev_alias_list:
-            dev_name = dev
-    elif n == 2:
-        # it is for sure NOT an attribute alias or a device alias
-        ret = [ d+"/" for d in devs ]
-        # device found!
-        if symb in dev_list:
-            dev_name = symb
-    elif n == 3:
-        # it is for sure a full attribute name
-        dev, sep, attr = symb.rpartition("/")
-        if dev in dev_list:
-            dev_name = dev
-
-    if dev_name is None:
-        return ret
-    
-    try:
-        d = __get_device_proxy(dev_name)
-        # first check in cache for the attribute list
-        if not hasattr(d, "_attr_list"):
-            d._attr_list = d.get_attribute_list()
-        if ret is None:
-            ret = []
-        ret.extend([ "%s/%s" % (dev_name, a) for a in d._attr_list ])
-    except:
-        # either DeviceProxy could not be created or device is not online
-        pass
-
-    return ret
-
-def __get_device_proxy(dev_name):
-    db = __get_db()
-    if db is None: return
-    cache = db._db_cache
-    from_alias = cache.aliases.get(dev_name)
-    
-    if from_alias is not None:
-        dev_name = from_alias
-
-    data = cache.devices.get(dev_name)
-    if data is not None:
-        d = data[3]
-        if d is None:
-            try:
-                d = data[3] = PyTango.DeviceProxy(dev_name)
-            except:
-                pass
-        return d
-
-def __get_device_subscriptions(dev_name):
-    db = __get_db()
-    if db is None: return
-    cache = db._db_cache
-    from_alias = cache.aliases.get(dev_name)
-    
-    if from_alias is not None:
-        dev_name = from_alias
-
-    data = cache.devices.get(dev_name)
-    if data is not None:
-        return data[4]
-
-__monitor_completer = __AttributeProxy_completer
-
-#-------------------------------------------------------------------------------
-# Magic commands
-#-------------------------------------------------------------------------------
-
-def refreshdb(self, parameter_s=''):
-    init_db(parameter_s)
-
-def switchdb(self, parameter_s=''):
-    """Switches the active tango Database.
-    
-    Usage: switchdb <host>[(:| )<port>]
-
-    <port> is optional. If not given it defaults to 10000.
-    
-    Examples:
-    In [1]: switchdb homer:10005
-    In [2]: switchdb homer 10005
-    In [3]: switchdb homer"""
-    
-    if parameter_s == '':
-        raise UsageError("%switchdb: Must specify a tango database name. "\
-                         "See '%switchdb?'")
-    return init_db(parameter_s)
-
-def lsdev(self, parameter_s=''):
-    """Lists all known tango devices.
-    
-    Usage: lsdev [<device name filter(regular expression)]
-    
-    Examples:
-    In [1]: lsdev
-    In [2]: lsdev sys.*"""
-    
-    if parameter_s:
-        reg_exp = re.compile(parameter_s, re.IGNORECASE)
-    else:
-        reg_exp = None
-    
-    db = __get_db()
-    if db is None:
-        print("You are not connected to any Tango Database. Device list is empty")
-        return
-    data = db._db_cache.devices
-
-    s = io.StringIO()
-    lengths = 40, 25, 25, 20
-    title = "Device", "Alias", "Server", "Class"
-    templ = "{0:{l[0]}} {1:{l[1]}} {2:{l[2]}} {3:{l[3]}}"
-    msg = templ.format(*title, l=lengths)
-    print(msg, file=s)
-    print(*map(operator.mul, lengths, len(lengths)*"-"), file=s)
-    for d, v in data.items():
-        if reg_exp and not reg_exp.match(d):
-            continue
-        print(templ.format(d, v[0], v[1], v[2], l=lengths), file=s)
-    s.seek(0)
-    page(s.read())
-
-def lsdevclass(self, parameter_s=''):
-    """Lists all known tango device classes.
-    
-    Usage: lsdevclass [<class name filter(regular expression)]
-    
-    Examples:
-    In [1]: lsdevclass
-    In [2]: lsdevclass Motor.*"""
-    
-    if parameter_s:
-        reg_exp = re.compile(parameter_s, re.IGNORECASE)
-    else:
-        reg_exp = None
-    
-    db = __get_db()
-    if db is None:
-        print("You are not connected to any Tango Database. Device class list is empty")
-        return
-    data = db._db_cache.klasses
-
-    data = [ "%-030s" % klass for klass in data.keys() if not reg_exp or reg_exp.match(klass) ]
-    s = textwrap.fill(" ".join(data), 80)
-    page(s)
-
-def lsserv(self, parameter_s=''):
-    """Lists all known tango servers.
-    
-    Usage: lsserv [<class name filter(regular expression)]
-    
-    Examples:
-    In [1]: lsserv
-    In [2]: lsserv Motor/.*"""
-    
-    if parameter_s:
-        reg_exp = re.compile(parameter_s, re.IGNORECASE)
-    else:
-        reg_exp = None
-    
-    db = __get_db()
-    if db is None:
-        print("You are not connected to any Tango Database. Device class list is empty")
-        return
-    data = db._db_cache.servers
-
-    data = [ "%-030s" % server for server in data.keys() if not reg_exp or reg_exp.match(server) ]
-    s = textwrap.fill(" ".join(data), 80)
-    page(s)
-
-def tango_error(self, parameter_s=''):
-    """Displays detailed information about the last tango error"""
-    global _TANGO_ERR
-    err_info = get_user_ns().get(_TANGO_ERR)
-    if err_info is None:
-        print("No tango error reported so far.")
-        return
-    print("Last tango error:")
-    print(err_info[1])
-
-def python_error(self, parameter_s=''):
-    """Displays detailed information about the last python error"""
-    global _PYTHON_ERR
-    err_info = get_user_ns().get(_PYTHON_ERR)
-    if err_info is None:
-        print("No error reported so far.")
-        return
-    ip = get_ipapi()
-    etype, evalue, etb = err_info[:3]
-    ip.InteractiveTB(etype=etype, evalue=evalue, etb=etb, tb_offset=None)
-
-_EVT_LOG = None
-def __get_event_log():
-    global _EVT_LOG
-    if _EVT_LOG is None:
-#        qthreads = get_config().q4thread
-#        if qthreads:
-#            import ipy_qt
-#            model = ipy_qt.EventLoggerTableModel(capacity=10000)
-#            _EVT_LOG = ipy_qt.EventLogger(model=model)
-#            _EVT_LOG.setWindowTitle("ITango - Event Logger Table")
-#        else:
-        import PyTango.ipython.eventlogger
-        _EVT_LOG = PyTango.ipython.eventlogger.EventLogger(capacity=10000, pager=page)
-    return _EVT_LOG
-
-def mon(self, parameter_s=''):
-    """Monitor a given attribute.
-    
-    %mon -a <attribute name>           - activates monitoring of given attribute
-    %mon -d <attribute name>           - deactivates monitoring of given attribute
-    %mon -r                            - deactivates monitoring of all attributes
-    %mon -i <id>                       - displays detailed information for the event with given id
-    %mon -l <dev filter> <attr filter> - shows event table filtered with the regular expression for attribute name
-    %mon                               - shows event table (= %mon -i .* .*)"""
-    
-    db = __get_db()
-    if db is None:
-        print("You are not connected to any Tango Database.")
-        return
-    
-    # make sure parameter_s is a str and not a unicode
-    parameter_s = str(parameter_s)
-    opts, args = self.parse_options(parameter_s,'adril', mode='list')
-    if len(args) > 3:
-        raise UsageError("%mon: too many arguments")
-    if 'd' in opts:
-        try:
-            todel = args[0]
-        except IndexError:
-            raise UsageError("%mon -d: must provide an attribute to unmonitor")
-        else:
-            try:
-                dev, _, attr = todel.rpartition("/")
-                subscriptions = __get_device_subscriptions(dev)
-                attr_id = subscriptions[attr.lower()]
-                del subscriptions[attr.lower()]
-                d = __get_device_proxy(dev)
-                d.unsubscribe_event(attr_id)
-                print("Stopped monitoring '%s'" % todel)
-            except KeyError:
-                raise UsageError("%%mon -d: Not monitoring '%s'" % todel)
-                    
-    elif 'a' in opts:
-        try:
-            toadd = args[0]
-        except IndexError:
-            raise UsageError("%mon -a: must provide an attribute to monitor")
-        dev, _, attr = toadd.rpartition("/")
-        subscriptions = __get_device_subscriptions(dev)
-        attr_id = subscriptions.get(attr.lower())
-        if attr_id is not None:
-            raise UsageError("%%mon -a: Already monitoring '%s'" % toadd)
-        d = __get_device_proxy(dev)
-        w = __get_event_log()
-        model = w.model()
-        attr_id = d.subscribe_event(attr, PyTango.EventType.CHANGE_EVENT,
-                                    model, [])
-        subscriptions[attr.lower()] = attr_id
-        print("'%s' is now being monitored. Type 'mon' to see all events" % toadd)
-    elif 'r' in opts:
-        for d, v in db._db_cache.devices.items():
-            d, subs = v[3], v[4]
-            for _id in subs.values():
-                d.unsubscribe_event(_id)
-            v[4] = {}
-    elif 'i' in opts:
-        try:
-            evtid = int(args[0])
-        except IndexError:
-            raise UsageError("%mon -i: must provide an event ID")
-        except ValueError:
-            raise UsageError("%mon -i: must provide a valid event ID")
-        try:
-            w = __get_event_log()
-            e = w.getEvents()[evtid]
-            if e.err:
-                print(str(PyTango.DevFailed(*e.errors)))
-            else:
-                print(str(e))
-        except IndexError:
-            raise UsageError("%mon -i: must provide a valid event ID")
-    elif 'l' in opts:
-        try:
-            dexpr = args[0]
-            aexpr = args[1]
-        except IndexError:
-            raise UsageError("%mon -l: must provide valid device and " \
-                             "attribute filters")
-        w = __get_event_log()
-        w.show(dexpr, aexpr)
-    else:
-        w = __get_event_log()
-        w.show()
-
-#-------------------------------------------------------------------------------
-# Useful functions (not magic commands but accessible from CLI as normal python
-# functions)
-#-------------------------------------------------------------------------------
-
-def get_device_map():
-    """Returns a dictionary where keys are device names and value is a sequence
-    of 4 elements: 
-        - alias name (empty string if no alias is defined)
-        - tango server name (full tango server name <name>/<instance>)
-        - tango class name
-        - DeviceProxy to the device or None if it hasn't been initialized yet
-          (this last element is for internal tango usage only. If you need a 
-           DeviceProxy to this device, create your own)"""
-    db = __get_db()
-    if db is None:
-        print("You are not connected to any Tango Database.")
-        return
-    return db._db_cache.devices
-
-def get_server_map():
-    """Returns a dictionary where keys are server names (<name>/<instance>)
-    and value is a sequence of device names that belong to the server"""
-    db = __get_db()
-    if db is None:
-        print("You are not connected to any Tango Database.")
-        return
-    return db._db_cache.servers
-
-def get_class_map():
-    """Returns a dictionary where keys are the tango classes and value is a 
-    sequence of device names that belong to the tango class"""
-    db = __get_db()
-    if db is None:
-        print("You are not connected to any Tango Database.")
-        return
-    return db._db_cache.klasses
-
-def get_alias_map():
-    """Returns a dictionary where keys are the tango device aliases and value 
-    is a the tango device name"""
-    db = __get_db()
-    if db is None:
-        print("You are not connected to any Tango Database.")
-        return
-    return db._db_cache.aliases
-
-def get_device_list():
-    """Returns a case insensitive list of device names for the current 
-    database"""
-    db = __get_db()
-    if db is None:
-        print("You are not connected to any Tango Database.")
-        return
-    return db._db_cache.device_list
-
-def get_alias_list():
-    """Returns a case insensitive list of device aliases for the current 
-    database"""
-    db = __get_db()
-    if db is None:
-        print("You are not connected to any Tango Database.")
-        return
-    return db._db_cache.alias_list    
-    
-#-------------------------------------------------------------------------------
-# Private helper methods
-#-------------------------------------------------------------------------------
-
-def __exc_handler(ip, etype, value, tb, tb_offset=None):
-    global _TG_EXCEPTIONS
-    user_ns = get_user_ns()
-    if etype in _TG_EXCEPTIONS:
-        global _TANGO_ERR
-        user_ns[_TANGO_ERR] = etype, value, tb, tb_offset
-        if len(value.args):
-            v = value.args[0]
-            print("%s: %s" % (v.reason ,v.desc))
-        else:
-            print("Empty DevFailed")
-        print("(For more detailed information type: tango_error)")
-    else:
-        global _PYTHON_ERR
-        user_ns[_PYTHON_ERR] = etype, value, tb, tb_offset
-        print(etype.__name__ + ": " + str(value))
-        print("(For more detailed information type: python_error)")
-
-def __get_default_tango_host():
-    global _DFT_TANGO_HOST
-    if _DFT_TANGO_HOST is None:
-        try:
-            db = PyTango.Database()
-            _DFT_TANGO_HOST = "%s:%s" % (db.get_db_host(), db.get_db_port())
-        except:
-            pass
-    return _DFT_TANGO_HOST
-
-def __get_db(host_port=None):
-    """host_port == None: Use current DB whatever it is or create
-                          default if doesn't exist
-       host_port == '' : use default db. If it is not the current db, switch
-                         current db to it and return it
-       host_port == ... : if ... is not the current db, switch current db to it
-                          and return it
-    """
-    
-    ip = get_ipapi()
-    user_ns = get_user_ns()
-
-    global _DB_SYMB
-    db = user_ns.get(_DB_SYMB)
-    
-    if host_port is None:
-        if db is None:
-            host_port = __get_default_tango_host()
-    elif host_port == '':
-        host_port = __get_default_tango_host()
-    else:
-        host_port = host_port.strip().replace(" ",":")
-        if host_port.count(":") == 0:
-            host_port += ":10000"
-    
-    if host_port is not None:
-        host_port = str(host_port)
-    
-    if db is None:
-        create_db = True
-    elif host_port is None:
-        create_db = False
-    else:
-        old_host_port = "%s:%s" % (db.get_db_host(), db.get_db_port())
-        create_db = old_host_port != host_port
-
-    if create_db:
-        try:
-            db = PyTango.Database(*host_port.split(":"))
-            
-            user_ns["DB_NAME"] = host_port
-        except Exception as e:
-            if db:
-                print("\nCould not access Database %s:" % host_port)
-                print(str(e))
-                old_host_port = "%s:%s" % (db.get_db_host(), db.get_db_port())
-                print("Maintaining connection to Database", old_host_port)
-                user_ns["DB_NAME"] = old_host_port
-            else:
-                print("\nCould not access any Database. Make sure:")
-                print("\t- .tangorc, /etc/tangorc or TANGO_HOST environment is defined.")
-                print("\t- the Database DS is running")
-                user_ns["DB_NAME"] = "OFFLINE"
-                
-        # register the 'db' in the user namespace
-        user_ns.update({ _DB_SYMB : db })
-        
-    return db
-
-def __get_obj_name(o):
-    try:
-        n = o.__name__
-    except:
-        try:
-            n = o.__class__.__name__
-        except:
-            n = "<unknown>"
-    return n
-
-def __completer_wrapper(f):
-    def wrapper(ip, evt):
-        try:
-            return f(ip, evt)
-        except Exception as e:
-            print()
-            print("An unexpected exception ocorred during ITango command completer.")
-            print("Please send a bug report to the PyTango team with the following information:")
-            print(80*"-")
-            print("Completer:",__get_obj_name(f))
-            print(80*"-")
-            import traceback
-            traceback.print_exc()
-            print(80*"-")
-            raise e
-    return wrapper
-
-def __expose_magic(ip, name, fn, completer_func=None):
-    ip.define_magic(name, fn)
-    
-    if completer_func is None:
-        return
-    
-    # enable macro param completion
-    ip.set_hook('complete_command', completer_func, re_key = ".*" + name)
-
-def __unexpose_magic(ip, name):
-    delattr(ip, name)
-
-def __build_color_scheme(ip, name):
-    import IPython.Prompts
-    import IPython.PyColorize
-    import IPython.excolors
-    from IPython.utils.coloransi import TermColors, InputTermColors
-
-    # make some schemes as instances so we can copy them for modification easily:
-    PromptColors = IPython.Prompts.PromptColors
-    ANSICodeColors = IPython.PyColorize.ANSICodeColors
-    ExceptionColors = IPython.excolors.ExceptionColors
-    TBColors = ip.IP.InteractiveTB.color_scheme_table
-    SyntaxColors = ip.IP.SyntaxTB.color_scheme_table
-    InspectColors = IPython.OInspect.InspectColors
-    
-    promptTangoColors = PromptColors['Linux'].copy(name)
-    ANSITangoColors = ANSICodeColors['Linux'].copy(name)
-    exceptionTangoColors = ExceptionColors['Linux'].copy(name)
-    TBTangoColors = TBColors['Linux'].copy(name)
-    syntaxTangoColors = SyntaxColors['Linux'].copy(name)
-    inspectTangoColors = InspectColors['Linux'].copy(name)
-    
-    # initialize prompt with default tango colors
-    promptTangoColors.colors.in_prompt  = InputTermColors.Purple
-    promptTangoColors.colors.in_number  = InputTermColors.LightPurple
-    promptTangoColors.colors.in_prompt2 = InputTermColors.Purple
-    promptTangoColors.colors.out_prompt = TermColors.Blue
-    promptTangoColors.colors.out_number = TermColors.LightBlue
-
-    ret= { "prompt" : (PromptColors, promptTangoColors),
-          "ANSI"   : (ANSICodeColors, ANSITangoColors),
-          "except" : (ExceptionColors, exceptionTangoColors),
-          "TB"     : (TBColors, TBTangoColors),
-          "Syntax" : (SyntaxColors, syntaxTangoColors),
-          "Inspect": (InspectColors, inspectTangoColors) }
-
-    if ip.IP.isthreaded:
-        TBThreadedColors = ip.IP.sys_excepthook.color_scheme_table
-        TBThreadedTangoColors = TBThreadedColors['Linux'].copy(name)
-        ret["TBThreaded"] = TBThreadedColors, TBThreadedTangoColors
-    return ret
-
-#-------------------------------------------------------------------------------
-# Initialization methods
-#-------------------------------------------------------------------------------
-
-def init_pytango(ip):
-    """Initializes the IPython environment with PyTango elements"""
-
-    # export symbols to IPython namepspace
-    ip.ex("import PyTango")
-    ip.ex("from PyTango import DeviceProxy, AttributeProxy, Database, Group")
-    ip.ex("Device = DeviceProxy")
-    ip.ex("Attribute = AttributeProxy")
-
-    # add completers
-    dp_completer = __completer_wrapper(__DeviceProxy_completer)
-    attr_completer = __completer_wrapper(__AttributeProxy_completer)
-    ip.set_hook('complete_command', dp_completer, re_key = ".*DeviceProxy[^\w\.]+")
-    ip.set_hook('complete_command', dp_completer, re_key = ".*Device[^\w\.]+")
-    ip.set_hook('complete_command', attr_completer, re_key = ".*AttributeProxy[^\w\.]+")
-    ip.set_hook('complete_command', attr_completer, re_key = ".*Attribute[^\w\.]+")
-    
-    ip.set_custom_exc((Exception,), __exc_handler)
-
-def init_db(parameter_s=''):
-    ip = get_ipapi()
-    user_ns = get_user_ns()
-    global _DB_SYMB
-    old_db = user_ns.get(_DB_SYMB)
-    
-    db = __get_db(parameter_s)
-    
-    if old_db is not None and hasattr(old_db, "_db_cache"):
-        old_junk = old_db._db_cache["junk"].keys()
-        for e in old_junk:
-            del user_ns[e]
-    else:
-        old_junk = ()
-        
-    if db is None: return
-    
-    os.environ["TANGO_HOST"] = "%s:%s" % (db.get_db_host(), db.get_db_port())
-    
-    # Initialize device and server information
-    query = "SELECT name, alias, server, class FROM device order by name"
-    
-    r = db.command_inout("DbMySqlSelect", query)
-    row_nb, column_nb = r[0][-2], r[0][-1]
-    data = r[1]
-    assert row_nb == len(data) / column_nb
-    devices, aliases, servers, klasses = data[0::4], data[1::4], data[2::4], data[3::4]
-
-    #CD = PyTango.utils.CaselessDict
-    CD = dict
-    dev_dict, serv_dict, klass_dict, alias_dict = CD(), CD(), CD(), CD()
-    
-    for device, alias, server, klass in zip(devices, aliases, servers, klasses):
-        dev_lower = device.lower()
-
-        # hide dserver devices
-        if dev_lower.startswith("dserver/"): continue
-        
-        # hide alias that start with "_"
-        if alias and alias[0] == "_": alias = ''
-        
-        # last None below is to be filled by DeviceProxy object on demand
-        # last empty dict<str, int> where keys is attribute name and value is 
-        # the subscription id
-        dev_dict[device] = [alias, server, klass, None, {}]
-        serv_devs = serv_dict.get(server)
-        if serv_devs is None:
-            serv_dict[server] = serv_devs = []
-        serv_devs.append(device)
-        klass_devs = klass_dict.get(klass)
-        if klass_devs is None:
-            klass_dict[klass] = klass_devs = []
-        klass_devs.append(device)
-        if len(alias):
-            alias_dict[alias] = device
-            serv_devs.append(alias)
-            klass_devs.append(alias)
-
-    exposed_klasses = {}
-    excluded_klasses = "DServer",
-    for klass, devices in klass_dict.items():
-        if klass in excluded_klasses:
-            continue
-        exists = klass in user_ns
-        if not exists or klass in old_junk:
-            c = DeviceClassCompleter(klass, devices)
-            ip.set_hook('complete_command', c, re_key = ".*" + klass + "[^\w\.]+")
-            exposed_klasses[klass] = PyTango.DeviceProxy
-    
-    # expose classes no user namespace
-    user_ns.update(exposed_klasses)
-    
-    # Initialize attribute information
-    query = "SELECT name, alias FROM attribute_alias order by alias"
-
-    r = db.command_inout("DbMySqlSelect", query)
-    row_nb, column_nb = r[0][-2], r[0][-1]
-    data = r[1]
-    assert row_nb == len(data) / column_nb
-    attributes, aliases = data[0::2], data[1::2]
-    
-    attr_alias_dict = {}
-    for attribute, alias in zip(attributes, aliases):
-        if len(alias):
-            attr_alias_dict[alias] = attribute
-    
-    device_list = PyTango.utils.CaselessList(dev_dict.keys())
-    alias_list = PyTango.utils.CaselessList(alias_dict.keys())
-    attr_alias_list = PyTango.utils.CaselessList(attr_alias_dict.keys())
-    
-    # Build cache
-    db_cache = Struct(devices=dev_dict, aliases=alias_dict,
-        servers=serv_dict, klasses=klass_dict, junk=exposed_klasses,
-        attr_aliases=attr_alias_dict, device_list=device_list,
-        alias_list=alias_list, attr_alias_list=attr_alias_list)
-    
-    db._db_cache = db_cache
-
-    # Add this DB to the list of known DBs (for possible use in magic commands)
-    if db.get_db_port_num() == 10000:
-        db_name = db.get_db_host()
-    else:
-        db_name = "%s:%s" % (db.get_db_host(), db.get_db_port())
-    return db
-
-def init_magic(ip):
-
-    import IPython.core.magic
-
-    new_style_magics = hasattr(IPython.core.magic, 'Magics') and hasattr(IPython.core.magic, 'magics_class')
-
-    if new_style_magics:
-        @IPython.core.magic.magics_class
-        class Tango(IPython.core.magic.Magics):
-            
-            refreshdb = IPython.core.magic.line_magic(refreshdb)
-            switchdb = IPython.core.magic.line_magic(switchdb)
-            lsdev = IPython.core.magic.line_magic(lsdev)
-            lsdevclass = IPython.core.magic.line_magic(lsdevclass)
-            lsserv = IPython.core.magic.line_magic(lsserv)
-            tango_error = IPython.core.magic.line_magic(tango_error)
-            python_error = IPython.core.magic.line_magic(python_error)
-            mon = IPython.core.magic.line_magic(mon)
-
-        ip.register_magics(Tango)
-        ip.set_hook('complete_command', __monitor_completer, re_key = ".*" + "mon")
-    else:
-        __expose_magic(ip, "refreshdb", refreshdb)
-        __expose_magic(ip, "switchdb", switchdb)
-        __expose_magic(ip, "lsdev", lsdev)
-        __expose_magic(ip, "lsdevclass", lsdevclass)
-        __expose_magic(ip, "lsserv", lsserv)
-        __expose_magic(ip, "tango_error", tango_error)
-        __expose_magic(ip, "python_error", python_error)
-        __expose_magic(ip, "mon", mon, __monitor_completer)
-    
-    get_user_ns().update({"get_device_map"   : get_device_map,
-                   "get_server_map"  : get_server_map,
-                   "get_class_map"   : get_class_map,
-                   "get_alias_map"   : get_alias_map,
-                   "get_device_list" : get_device_list,
-                   "get_alias_list"  : get_alias_list})
-
-def complete(text):
-    """a super complete!!!!"""
-    self = get_ipapi().IP
-    complete = self.Completer.complete
-    state = 0
-    comps = set()
-    while True:
-        newcomp = complete("", state, line_buffer=text)
-        if newcomp is None:
-            break
-        comps.add(newcomp)
-        state += 1
-    outcomps = sorted(comps)
-    return outcomps
-
-__DIRNAME = os.path.dirname(os.path.abspath(__file__))
-__RES_DIR = os.path.join(__DIRNAME, os.path.pardir, 'resource')
-
-class __TangoDeviceInfo(object):
-    """Helper class for when DeviceProxy.info() is not available"""
-    
-    def __init__(self, dev):
-        try:
-            db = dev.get_device_db()
-            klass = db.get_class_for_device(dev.dev_name())
-            self.dev_class = self.dev_type = klass
-        except:
-            self.dev_class = self.dev_type = 'Device'
-        self.doc_url = 'http://www.esrf.eu/computing/cs/tango/tango_doc/ds_doc/index.html'
-        self.server_host = 'Unknown'
-        self.server_id = 'Unknown'
-        self.server_version = 1
-    
-        
-def __get_device_class_icon(klass="Device"):
-    icon_prop = "__icon"
-    db = __get_db()
-    try:
-        icon_filename = db.get_class_property(klass, icon_prop)[icon_prop]
-        if icon_filename:
-            icon_filename = icon_filename[0]
-        else:            
-            icon_filename = klass.lower() + os.path.extsep + "png"
-    except:
-        icon_filename = klass.lower() + os.path.extsep + "png"
-    
-    if os.path.isabs(icon_filename):
-        icon = icon_filename
-    else:
-        icon = os.path.join(__RES_DIR, icon_filename)
-    if not os.path.isfile(icon):
-        icon = os.path.join(__RES_DIR, "_class.png")
-    return icon
-
-
-__DEV_CLASS_HTML_TEMPLATE = """\
-<table border="0" cellpadding="2" width="100%">
-<tr><td width="140" rowspan="7" valign="middle" align="center"><img src="{icon}" height="128"/></td>
-    <td width="140">Name:</td><td><b>{name}</b></td></tr>
-<tr><td width="140">Super class:</td><td>{super_class}</td></tr>
-<tr><td width="140">Database:</td><td>{database}</td></tr>
-<tr><td width="140">Description:</td><td>{description}</td></tr>
-<tr><td width="140">Documentation:</td><td><a target="_blank" href="{doc_url}">{doc_url}</a></td></tr>
-</table>"""
-
-def __get_class_property_str(dev_class, prop_name, default=""):
-    data = __get_db().get_class_property(dev_class, prop_name)[prop_name]
-    if len(data):
-        return data[0]
-    else:
-        return default
-
-def display_deviceclass_html(dev_class):
-    """displayhook function for PyTango.DeviceProxy, rendered as HTML"""
-    fmt = dict(name=dev_class)
-    db = __get_db()
-    try:
-        fmt["database"] = db.get_db_host() + ":" + db.get_db_port()
-    except:
-        try:
-            fmt["database"] = db.get_file_name()
-        except:
-            fmt["database"]  = "Unknown"
-
-    doc_url = __get_class_property_str(dev_class, "doc_url", "www.tango-controls.org")
-    try:
-        fmt["doc_url"] = doc_url[doc_url.index("http"):]
-    except ValueError:
-        fmt["doc_url"] = doc_url
-    
-    fmt['icon'] = __get_device_class_icon(dev_class)
-    fmt['super_class'] = __get_class_property_str(dev_class, "InheritedFrom", "DeviceImpl")
-    fmt['description'] = __get_class_property_str(dev_class, "Description", "A Tango device class")
-    return __DEV_CLASS_HTML_TEMPLATE.format(**fmt)
-
-
-def __get_device_icon(dev_proxy, klass="Device"):
-    icon_prop = "__icon"
-    db = dev_proxy.get_device_db()
-    try:
-        icon_filename = dev_proxy.get_property(icon_prop)[icon_prop]
-        if icon_filename:
-            icon_filename = icon_filename[0]
-        else:
-            icon_filename = db.get_class_property(klass, icon_prop)[icon_prop]
-            if icon_filename:
-                icon_filename = icon_filename[0]
-            else:            
-                icon_filename = klass.lower() + os.path.extsep + "png"
-    except:
-        icon_filename = klass.lower() + os.path.extsep + "png"
-    
-    if os.path.isabs(icon_filename):
-        icon = icon_filename
-    else:
-        icon = os.path.join(__RES_DIR, icon_filename)
-    if not os.path.isfile(icon):
-        icon = os.path.join(__RES_DIR, "device.png")
-    return icon
-
-__DEV_HTML_TEMPLATE = """\
-<table border="0" cellpadding="2" width="100%">
-<tr><td width="140" rowspan="7" valign="middle" align="center"><img src="{icon}" height="128"/></td>
-    <td width="140">Name:</td><td><b>{name}</b></td></tr>
-<tr><td width="140">Alias:</td><td>{alias}</td></tr>
-<tr><td width="140">Database:</td><td>{database}</td></tr>
-<tr><td width="140">Type:</td><td>{dev_class}</td></tr>
-<tr><td width="140">Server:</td><td>{server_id}</td></tr>
-<tr><td width="140">Server host:</td><td>{server_host}</td></tr>
-<tr><td width="140">Documentation:</td><td><a target="_blank" href="{doc_url}">{doc_url}</a></td></tr>
-</table>"""
-
-def display_deviceproxy_html(dev_proxy):
-    """displayhook function for PyTango.DeviceProxy, rendered as HTML"""
-    try:
-        info = dev_proxy.info()
-    except:
-        info = __TangoDeviceInfo(dev_proxy)
-    name = dev_proxy.dev_name()
-    fmt = dict(dev_class=info.dev_class, server_id=info.server_id,
-               server_host=info.server_host, name=name)
-    
-    try:
-        fmt["alias"] = dev_proxy.alias()
-    except:
-        fmt["alias"] = "-----"
-
-    db = dev_proxy.get_device_db()
-    try:
-        fmt["database"] = db.get_db_host() + ":" + db.get_db_port()
-    except:
-        try:
-            fmt["database"] = db.get_file_name()
-        except:
-            fmt["database"]  = "Unknown"
-
-    doc_url = info.doc_url.split("\n")[0]
-    try:
-        fmt["doc_url"] = doc_url[doc_url.index("http"):]
-    except ValueError:
-        fmt["doc_url"] = doc_url
-
-    fmt['icon'] = __get_device_icon(dev_proxy, info.dev_class)
-
-    return __DEV_HTML_TEMPLATE.format(**fmt)
-
-__DB_HTML_TEMPLATE = """\
-<table border="0" cellpadding="2" width="100%">
-<tr><td width="140" rowspan="2" valign="middle" align="center"><img src="{icon}" height="128"/></td>
-    <td><b>{name}</b></td></tr>
-<tr><td>{info}</td></tr>
-</table>"""
-
-def display_database_html(db):
-    """displayhook function for PyTango.Database, rendered as HTML"""
-    fmt = dict()
-
-    try:
-        fmt["name"] = db.get_db_host() + ":" + db.get_db_port()
-    except:
-        try:
-            fmt["name"] = db.get_file_name()
-        except:
-            fmt["name"]  = "Unknown"
-
-    try:
-        fmt["info"] = db.get_info().replace("\n", "<BR/>")
-    except:
-        fmt["info"] = "Unknown"
-    
-    fmt['icon'] = os.path.join(__RES_DIR, "database.png")
-
-    return __DB_HTML_TEMPLATE.format(**fmt)
-
-__DEV_ATTR_RW_HTML_TEMPLATE = """\
-<table border="0" cellpadding="2" width="100%">
-<tr><td colspan="2" bgcolor="{bgcolor}">{name} ({type}, {data_format}, {quality}) at {time}</td></tr>
-<tr><td bgcolor="#EEEEEE" width="140">value{r_dim}:</td>
-    <td bgcolor="#EEEEEE">{value}</td></tr>
-<tr><td bgcolor="#EEEEEE" width="140">w_value{w_dim}:</td>
-    <td bgcolor="#EEEEEE">{w_value}</td></tr>
-</table>"""
-
-__DEV_ATTR_RO_HTML_TEMPLATE = """\
-<table border="0" cellpadding="2" width="100%">
-<tr><td colspan="2" bgcolor="{bgcolor}">{name} ({type}, {data_format}, {quality}) at {time}</td></tr>
-<tr><td bgcolor="#EEEEEE" width="140">value{r_dim}:</td>
-    <td bgcolor="#EEEEEE">{value}</td></tr>
-</table>"""
-
-__DEV_ATTR_ERR_HTML_TEMPLATE = """\
-<table border="0" cellpadding="2" width="100%">
-<tr><td bgcolor="#FF0000">{name} ({type}, {data_format}, {quality}) at {time}</td></tr>
-<tr><td bgcolor="#EEEEEE">{error}</td></tr>
-</table>"""
-
-QUALITY_TO_HEXCOLOR_STR = {
-    PyTango.AttrQuality.ATTR_VALID : ("#00FF00", "#000000"),
-    PyTango.AttrQuality.ATTR_INVALID : ("#808080", "#FFFFFF"),    
-    PyTango.AttrQuality.ATTR_ALARM : ("#FF8C00", "#FFFFFF"),    
-    PyTango.AttrQuality.ATTR_WARNING : ("#FF8C00", "#FFFFFF"),    
-    PyTango.AttrQuality.ATTR_CHANGING : ("#80A0FF", "#000000"),
-    None : ("#808080", "#000000"), 
-}
-
-def display_deviceattribute_html(da):
-    """displayhook function for PyTango.DeviceAttribute, rendered as HTML"""
-    fmt = dict(name=da.name, type=da.type, data_format=da.data_format)
-    template = None
-    if da.has_failed:
-        fmt['error'] = "\n".join(map(str, da.get_err_stack())).replace("\n", "<br/>")
-        
-        template = __DEV_ATTR_ERR_HTML_TEMPLATE
-    else:
-        rd, wd = da.r_dimension, da.w_dimension
-        if wd.dim_x == 0 and wd.dim_y == 0 and da.w_value is None:
-            template = __DEV_ATTR_RO_HTML_TEMPLATE
-        else:
-            template = __DEV_ATTR_RW_HTML_TEMPLATE
-            fmt['w_value'] = str(da.w_value)
-            if da.data_format == PyTango.AttrDataFormat.SCALAR:
-                fmt['w_dim'] = ""
-            else:
-                fmt['w_dim'] = "<br/>(%d, %d)" % (wd.dim_x, wd.dim_y)
-        fmt['bgcolor'], fmt['fgcolor'] = QUALITY_TO_HEXCOLOR_STR[da.quality]
-        fmt['quality'] = str(da.quality)
-        if da.data_format == PyTango.AttrDataFormat.SCALAR:
-            fmt['r_dim'] = ""
-        else:
-            fmt['r_dim'] = "<br/>(%d, %d)" % (rd.dim_x, rd.dim_y)
-        fmt['value'] = str(da.value)
-        fmt['time'] = str(da.time.todatetime())
-    return template.format(**fmt)
-
-__GROUP_HTML_TEMPLATE = """\
-<table border="0" cellpadding="2" width="100%">
-<tr><td width="100" bgcolor="#EEEEEE">Name:</td><td bgcolor="#EEEEEE">{name}</td></tr>
-<tr><td width="100" bgcolor="#EEEEEE">Size:</td><td bgcolor="#EEEEEE">{size}</td></tr>
-<tr><td width="100" bgcolor="#EEEEEE">Devices:</td><td bgcolor="#EEEEEE">{devices}</td></tr>
-</table>"""
-
-def display_group_html(group):
-    devices = group.get_device_list()
-    devices = ", ".join(devices)
-    fmt=dict(name=group.get_name(), size=group.get_size(), devices=devices) 
-    return __GROUP_HTML_TEMPLATE.format(**fmt)
-
-__GROUP_REPLY_HTML_TEMPLATE = """\
-<table border="0" cellpadding="2" width="100%">
-<tr><td bgcolor="#EEEEEE">{name}</td></tr>
-<tr><td>{data}</td></tr>    
-"""
-
-__GROUP_REPLY_ERR_HTML_TEMPLATE = """\
-<table border="0" cellpadding="2" width="100%">
-<tr><td bgcolor="#FF0000">{name}</td></tr>
-<tr><td bgcolor="#EEEEEE">{error}</td></tr>
-</table>"""
-    
-def display_groupreply_html(gr):
-    fmt = dict(name="%s/%s" % (gr.dev_name(), gr.obj_name()))
-    template = None
-    if gr.has_failed():
-        fmt['error'] = "\n".join(map(str, gr.get_err_stack())).replace("\n", "<br/>")
-        template = __GROUP_REPLY_ERR_HTML_TEMPLATE
-    else:
-        template = __GROUP_REPLY_HTML_TEMPLATE
-        data = gr.get_data()
-        if isinstance(data, PyTango.DeviceAttribute):
-            data = display_deviceattribute_html(data)
-        fmt["data"] = data
-        
-    ret = template.format(**fmt)
-    return ret
-
-def init_display(ip):
-    html_formatter = ip.display_formatter.formatters["text/html"]
-    html_formatter.for_type(PyTango.DeviceProxy, display_deviceproxy_html)
-    html_formatter.for_type(PyTango.Database, display_database_html)
-    html_formatter.for_type(PyTango.DeviceAttribute, display_deviceattribute_html)
-    html_formatter.for_type(PyTango.Group, display_group_html)
-    html_formatter.for_type(PyTango.GroupAttrReply, display_groupreply_html)
-    html_formatter.for_type(PyTango.GroupCmdReply, display_groupreply_html)
-
-    
-def init_ipython(ip=None, store=True, pytango=True, colors=True, console=True,
-                 magic=True):
-
-    if ip is None:
-        ip = get_ipapi()
-    
-    global _tango_init
-    if _tango_init is True: return
-
-    init_display(ip)
-    
-    if pytango:
-        init_pytango(ip)
-    
-    init_db()
-
-    if magic:
-        init_magic(ip)
-    
-    _tango_init = True
-
-def load_config(config):
-    import PyTango.ipython
-    import IPython.utils.coloransi
-    
-    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(
-        tango_banner="""%(Blue)shint: Try typing: mydev = Device("%(LightBlue)s<tab>%(Normal)s\n""")
-
-    so = config.get("tango_options", so)
-
-    ipy_ver = PyTango.ipython.get_ipython_version()
-    
-    # ------------------------------------
-    # Application
-    # ------------------------------------
-    app = config.Application
-    app.log_level = 30
-
-    # ------------------------------------
-    # InteractiveShell
-    # ------------------------------------
-    i_shell = config.InteractiveShell
-    i_shell.colors = 'Linux'
-
-    # ------------------------------------
-    # PromptManager (ipython >= 0.12)
-    # ------------------------------------
-    prompt = config.PromptManager
-    prompt.in_template = 'ITango [\\#]: '
-    prompt.out_template = 'Result [\\#]: '
-    
-    # ------------------------------------
-    # InteractiveShellApp
-    # ------------------------------------
-    i_shell_app = config.InteractiveShellApp
-    extensions = getattr(i_shell_app, 'extensions', [])
-    extensions.append('PyTango.ipython')
-    i_shell_app.extensions = extensions
-    
-    # ------------------------------------
-    # TerminalIPythonApp: options for the IPython terminal (and not Qt Console)
-    # ------------------------------------
-    term_app = config.TerminalIPythonApp
-    term_app.display_banner = True
-    #term_app.nosep = False
-    #term_app.classic = True
-    
-    # ------------------------------------
-    # IPKernelApp: options for the  Qt Console
-    # ------------------------------------
-    #kernel_app = config.IPKernelApp
-    ipython_widget = config.IPythonWidget
-    ipython_widget.in_prompt  = 'ITango [<span class="in-prompt-number">%i</span>]: '
-    ipython_widget.out_prompt = 'Result [<span class="out-prompt-number">%i</span>]: '
-    
-    #zmq_i_shell = config.ZMQInteractiveShell
-    
-    # ------------------------------------
-    # TerminalInteractiveShell
-    # ------------------------------------
-    term_i_shell = config.TerminalInteractiveShell
-    banner = """\
-%(Purple)sITango %(version)s%(Normal)s -- An interactive %(Purple)sTango%(Normal)s client.
-
-Running on top of Python %(pyver)s, IPython %(ipyver)s and PyTango %(pytangover)s
-
-help      -> ITango's help system.
-object?   -> Details about 'object'. ?object also works, ?? prints more.
-"""
-    
-    banner = banner % d
-    banner = banner.format(**d)
-    tango_banner = so.tango_banner % d
-    tango_banner = tango_banner.format(**d)
-    all_banner = "\n".join((banner, tango_banner))
-
-    term_i_shell.banner1 = banner
-    term_i_shell.banner2 = tango_banner
-
-    # ------------------------------------
-    # FrontendWidget
-    # ------------------------------------
-    frontend_widget = config.ITangoConsole
-    frontend_widget.banner = all_banner
-    
-def load_ipython_extension(ipython):
-    # The ``ipython`` argument is the currently active
-    # :class:`InteractiveShell` instance that can be used in any way.
-    # This allows you do to things like register new magics, plugins or
-    # aliases.
-    init_ipython(ip=ipython, store=False, colors=False)
-
-def unload_ipython_extension(ipython):
-    # If you want your extension to be unloadable, put that logic here.
-    #print "Unloading PyTango IPython extension"
-    pass
-
-def run(qt=False):
-
-    # overwrite the original IPython Qt widget with our own so we can put a
-    # customized banner. IPython may have been installed without Qt support so we
-    # protect this code against an import error
-    try:
-        from IPython.utils.traitlets import Unicode
-        from IPython.qt.console.rich_ipython_widget import RichIPythonWidget
-
-        class ITangoConsole(RichIPythonWidget):
-            
-            banner = Unicode(config=True)
-
-            def _banner_default(self):
-                config = get_config()
-                return config.ITangoConsole.banner
-
-        import IPython.qt.console.qtconsoleapp
-        IPythonQtConsoleApp = IPython.qt.console.qtconsoleapp.IPythonQtConsoleApp
-        IPythonQtConsoleApp.widget_factory = ITangoConsole      
-    except ImportError:
-        pass
-
-    argv = sys.argv
-
-    try:
-        for i, arg in enumerate(argv[:1]):
-            if arg.startswith('--profile='):
-                break
-        else:
-            argv.append("--profile=tango")
-    except:
-        pass    
-    
-    if qt:
-        if not 'qtconsole' in argv:
-            argv.insert(1, 'qtconsole')
-            argv.append('--pylab=inline')
-    
-    launch_new_instance()
diff --git a/src/boost/python/ipython/resource/ITangoConsole.svg b/src/boost/python/ipython/resource/ITangoConsole.svg
deleted file mode 100644
index b044582..0000000
--- a/src/boost/python/ipython/resource/ITangoConsole.svg
+++ /dev/null
@@ -1,422 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:xlink="http://www.w3.org/1999/xlink"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   inkscape:export-ydpi="90"
-   inkscape:export-xdpi="90"
-   inkscape:export-filename="/Users/matthiasbussonnier/Desktop/IPythonConsole.png"
-   sodipodi:docname="ITangoConsole.svg"
-   inkscape:version="0.48.1 r9760"
-   version="1.1"
-   id="svg2"
-   height="512"
-   width="512">
-  <defs
-     id="defs4">
-    <linearGradient
-       id="linearGradient990">
-      <stop
-         id="stop992"
-         offset="0"
-         style="stop-color:#d4d4d4;stop-opacity:1;" />
-      <stop
-         style="stop-color:#f6f6f6;stop-opacity:1;"
-         offset="0.18783081"
-         id="stop998" />
-      <stop
-         style="stop-color:#a7a7a7;stop-opacity:1;"
-         offset="0.33046141"
-         id="stop994" />
-      <stop
-         id="stop1026"
-         offset="0.66523069"
-         style="stop-color:#919191;stop-opacity:1;" />
-      <stop
-         style="stop-color:#868686;stop-opacity:1;"
-         offset="0.83261538"
-         id="stop1028" />
-      <stop
-         id="stop1032"
-         offset="0.92357516"
-         style="stop-color:#868686;stop-opacity:1;" />
-      <stop
-         id="stop1030"
-         offset="0.96787697"
-         style="stop-color:#aaaaaa;stop-opacity:1;" />
-      <stop
-         id="stop996"
-         offset="1"
-         style="stop-color:#c2c2c2;stop-opacity:1;" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient1621">
-      <stop
-         style="stop-color:#d4d4d4;stop-opacity:1;"
-         offset="0"
-         id="stop1623" />
-      <stop
-         style="stop-color:#d4d4d4;stop-opacity:0;"
-         offset="1"
-         id="stop1625" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient826">
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1;"
-         offset="0"
-         id="stop828" />
-      <stop
-         style="stop-color:#ffffff;stop-opacity:0.69512194;"
-         offset="1"
-         id="stop830" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient826"
-       id="linearGradient832"
-       x1="105.70982"
-       y1="518.53571"
-       x2="757.14288"
-       y2="248.53572"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.7551453,0,0,0.7551453,57.364381,318.43926)" />
-    <style
-       id="style1439"
-       type="text/css">
-
-    @font-face { font-family:"Inconsolata";src:url("#FontID0") format(svg)}
-    .fil0 {fill:#1F1A17}
-    .fil2 {fill:#006633}
-    .fil1 {fill:#1F1A17}
-    .fnt1 {font-weight:500;font-size:3.5278;font-family:'Inconsolata'}
-    .fnt0 {font-weight:500;font-size:6.35;font-family:'Inconsolata'}
-
-  </style>
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient1621"
-       id="linearGradient1631"
-       gradientUnits="userSpaceOnUse"
-       x1="390.46347"
-       y1="712.64929"
-       x2="389.88318"
-       y2="764.16711"
-       gradientTransform="matrix(0.7551453,0,0,0.7551453,57.364381,318.43922)" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient990"
-       id="linearGradient870"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.7551453,0,0,0.7551453,57.364381,318.43926)"
-       x1="336.14798"
-       y1="18.710255"
-       x2="336.14798"
-       y2="66.858391" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient990"
-       id="linearGradient1012"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.7551453,0,0,0.7551453,57.364381,318.43926)"
-       x1="291.68039"
-       y1="511.74365"
-       x2="291.68039"
-       y2="564.10553" />
-    <filter
-       inkscape:collect="always"
-       id="filter988">
-      <feGaussianBlur
-         inkscape:collect="always"
-         stdDeviation="5.9071426"
-         id="feGaussianBlur990" />
-    </filter>
-    <linearGradient
-       id="linearGradient4689">
-      <stop
-         style="stop-color:#5a9fd4;stop-opacity:1"
-         offset="0"
-         id="stop4691" />
-      <stop
-         style="stop-color:#306998;stop-opacity:1"
-         offset="1"
-         id="stop4693" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4689"
-       id="linearGradient4125"
-       gradientUnits="userSpaceOnUse"
-       x1="323.06018"
-       y1="147.10051"
-       x2="464.48874"
-       y2="269.24338" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4689"
-       id="linearGradient4127"
-       gradientUnits="userSpaceOnUse"
-       x1="323.06018"
-       y1="147.10051"
-       x2="464.48874"
-       y2="269.24338" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4689"
-       id="linearGradient4129"
-       gradientUnits="userSpaceOnUse"
-       x1="323.06018"
-       y1="147.10051"
-       x2="464.48874"
-       y2="269.24338" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4689"
-       id="linearGradient4131"
-       gradientUnits="userSpaceOnUse"
-       x1="323.06018"
-       y1="147.10051"
-       x2="464.48874"
-       y2="269.24338" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4689"
-       id="linearGradient4133"
-       gradientUnits="userSpaceOnUse"
-       x1="323.06018"
-       y1="147.10051"
-       x2="464.48874"
-       y2="269.24338" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4689"
-       id="linearGradient4135"
-       gradientUnits="userSpaceOnUse"
-       x1="323.06018"
-       y1="147.10051"
-       x2="464.48874"
-       y2="269.24338" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4689"
-       id="linearGradient4137"
-       gradientUnits="userSpaceOnUse"
-       x1="323.06018"
-       y1="147.10051"
-       x2="464.48874"
-       y2="269.24338" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4689"
-       id="linearGradient4139"
-       gradientUnits="userSpaceOnUse"
-       x1="486.50031"
-       y1="184.54053"
-       x2="496.16876"
-       y2="248.36336" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4689"
-       id="linearGradient4141"
-       gradientUnits="userSpaceOnUse"
-       x1="486.50031"
-       y1="184.54053"
-       x2="496.16876"
-       y2="248.36336" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4689"
-       id="linearGradient4143"
-       gradientUnits="userSpaceOnUse"
-       x1="485.7803"
-       y1="185.98055"
-       x2="496.88876"
-       y2="249.08336" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4689"
-       id="linearGradient4145"
-       gradientUnits="userSpaceOnUse"
-       x1="485.7803"
-       y1="185.98055"
-       x2="496.88876"
-       y2="249.08336" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4689"
-       id="linearGradient4147"
-       gradientUnits="userSpaceOnUse"
-       x1="484.3403"
-       y1="182.38054"
-       x2="495.44876"
-       y2="243.32335" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4689"
-       id="linearGradient4149"
-       gradientUnits="userSpaceOnUse"
-       x1="484.3403"
-       y1="182.38054"
-       x2="495.44876"
-       y2="243.32335" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4689"
-       id="linearGradient4151"
-       gradientUnits="userSpaceOnUse"
-       x1="323.06018"
-       y1="147.10051"
-       x2="147.68851"
-       y2="293.00339" />
-    <filter
-       id="filter3469"
-       y="-0.25"
-       height="1.5"
-       inkscape:menu-tooltip="Darkens the edge with an inner blur and adds a flexible glow"
-       inkscape:menu="Shadows and Glows"
-       inkscape:label="Dark and Glow"
-       color-interpolation-filters="sRGB">
-      <feGaussianBlur
-         id="feGaussianBlur3471"
-         stdDeviation="5"
-         result="result6" />
-      <feComposite
-         id="feComposite3473"
-         in2="result6"
-         result="result8"
-         in="SourceGraphic"
-         operator="atop" />
-      <feComposite
-         id="feComposite3475"
-         in2="SourceAlpha"
-         result="result9"
-         operator="over"
-         in="result8" />
-      <feColorMatrix
-         id="feColorMatrix3477"
-         values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 "
-         result="result10" />
-      <feBlend
-         id="feBlend3479"
-         in2="result6"
-         in="result10"
-         mode="normal" />
-    </filter>
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="0.98994949"
-     inkscape:cx="327.50118"
-     inkscape:cy="240.56031"
-     inkscape:document-units="px"
-     inkscape:current-layer="text109"
-     showgrid="false"
-     fit-margin-top="0"
-     fit-margin-left="0"
-     fit-margin-right="0"
-     fit-margin-bottom="0"
-     inkscape:window-width="1245"
-     inkscape:window-height="675"
-     inkscape:window-x="29"
-     inkscape:window-y="25"
-     inkscape:window-maximized="0" />
-  <metadata
-     id="metadata7">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Calque 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(-55.203036,-282.24337)">
-    <rect
-       style="opacity:0.41800005;color:#000000;fill:#020202;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter988);enable-background:accumulate"
-       id="rect1032"
-       width="628.57141"
-       height="552.85712"
-       x="76.46875"
-       y="220.12053"
-       rx="0"
-       ry="0"
-       transform="matrix(0.76259826,0,0,0.76259826,12.765793,164.57423)" />
-    <rect
-       y="332.22418"
-       x="71.162964"
-       height="415.55746"
-       width="473.45871"
-       id="rect1629"
-       style="color:#000000;fill:url(#linearGradient1631);fill-opacity:1;fill-rule:nonzero;stroke:#5b5b5b;stroke-width:1.51029062;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
-    <rect
-       y="332.95441"
-       x="71.774574"
-       height="38.836063"
-       width="472.50522"
-       id="rect12"
-       style="color:#000000;fill:url(#linearGradient870);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
-    <path
-       inkscape:connector-curvature="0"
-       id="rect797"
-       d="m 71.774575,708.36947 472.505205,0 0,38.83606 -472.505205,0 z"
-       style="color:#000000;fill:url(#linearGradient1012);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
-    <rect
-       style="color:#000000;fill:#0c212d;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
-       id="rect10"
-       width="472.50522"
-       height="338.7366"
-       x="71.774574"
-       y="369.63287" />
-    <path
-       style="opacity:0.231;color:#000000;fill:url(#linearGradient832);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
-       d="m 71.771204,369.62234 0,31.90891 0,1.86734 0,210.74249 C 185.0871,551.67384 349.48037,510.52371 535.90238,506.04065 c 2.79464,-0.0672 5.58165,-0.11401 8.37739,-0.16416 l 0,-102.4779 0,-1.86734 0,-31.90891 -472.508566,0 z"
-       id="rect793"
-       inkscape:connector-curvature="0" />
-    <path
-       inkscape:connector-curvature="0"
-       id="path1030"
-       d="m 71.774575,374.48737 472.505205,0 0,-4.85448 -472.505205,0 z"
-       style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;opacity:0.75362319" />
-    <path
-       style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;opacity:0.76086957"
-       d="m 71.774575,708.36947 472.505205,0 0,-4.85448 -472.505205,0 z"
-       id="path1024"
-       inkscape:connector-curvature="0" />
-    <g
-       id="text109"
-       style="font-size:204.03166199px;font-weight:normal;fill:#ffffff;fill-rule:evenodd;font-family:Droid Sans Mono"
-       transform="matrix(0.99206275,0,0,0.99206275,13.445202,330.71769)">
-      <text
-         xml:space="preserve"
-         style="font-size:40.32003021px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;filter:url(#filter3469);font-family:Monospace;-inkscape-font-specification:Monospace"
-         x="55.328968"
-         y="243.28403"
-         id="text3255"
-         sodipodi:linespacing="125%"><tspan
-           sodipodi:role="line"
-           id="tspan3257"
-           x="55.328968"
-           y="243.28403"
-           style="font-size:131.0401001px;font-weight:bold;fill:#ffffff;-inkscape-font-specification:Monospace Bold">ITango</tspan></text>
-    </g>
-  </g>
-</svg>
diff --git a/src/boost/python/ipython/resource/database.png b/src/boost/python/ipython/resource/database.png
deleted file mode 100644
index ad598bb..0000000
Binary files a/src/boost/python/ipython/resource/database.png and /dev/null differ
diff --git a/src/boost/python/ipython/resource/device.png b/src/boost/python/ipython/resource/device.png
deleted file mode 100644
index 1b52f7d..0000000
Binary files a/src/boost/python/ipython/resource/device.png and /dev/null differ
diff --git a/src/boost/python/ipython/resource/motor.png b/src/boost/python/ipython/resource/motor.png
deleted file mode 100644
index abc5f20..0000000
Binary files a/src/boost/python/ipython/resource/motor.png and /dev/null differ
diff --git a/src/boost/python/ipython/resource/serial.png b/src/boost/python/ipython/resource/serial.png
deleted file mode 100644
index a7eef8d..0000000
Binary files a/src/boost/python/ipython/resource/serial.png and /dev/null differ
diff --git a/src/boost/python/ipython/resource/starter.png b/src/boost/python/ipython/resource/starter.png
deleted file mode 100644
index 2095e90..0000000
Binary files a/src/boost/python/ipython/resource/starter.png and /dev/null differ
diff --git a/src/sip/Makefile b/src/sip/Makefile
deleted file mode 100644
index 6820d9c..0000000
--- a/src/sip/Makefile
+++ /dev/null
@@ -1,58 +0,0 @@
-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/__init__.py b/src/sip/Tango/__init__.py
deleted file mode 100644
index 58a1214..0000000
--- a/src/sip/Tango/__init__.py
+++ /dev/null
@@ -1,29 +0,0 @@
-# ------------------------------------------------------------------------------
-# 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 . import release 
-__author__ = release.Release.author_lines
-__version_info__ = release.Release.version_info
-__version__ = release.Release.version
-__version_long__ = release.Release.version_long
-__version_number__ = release.Release.version_number
-__version_description__ = release.Release.version_description
-__doc__ = release.Release.long_description
-del release
-
-from . import __init_tango
-from . import Tango
-__init_tango.init(Tango, None)
-del __init_tango
-del Tango
-
-from .Tango import *
-
diff --git a/src/sip/Tango/__init_tango.py b/src/sip/Tango/__init_tango.py
deleted file mode 100644
index e6dce8e..0000000
--- a/src/sip/Tango/__init_tango.py
+++ /dev/null
@@ -1,67 +0,0 @@
-# ------------------------------------------------------------------------------
-# 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.
-# ------------------------------------------------------------------------------
-
-def __inc_param(obj, name):
-    import collections
-    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, fmt='%s=%s')
-
-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)
-
-def __registerStructStr(Tango):
-    """helper method to register str and repr methods for structures"""
-    structs = (Tango.DeviceInfo, Tango.DbDevImportInfo, Tango.DbDatum,
-               Tango.AttributeInfo, Tango.AttributeInfoEx,
-               Tango.ChangeEventInfo, Tango.PeriodicEventInfo,
-               Tango.ArchiveEventInfo, Tango.AttributeAlarmInfo,
-               Tango.AttributeEventInfo,
-               Tango.AttributeInfo, Tango.CommandInfo)
-
-    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/Tango/release.py b/src/sip/Tango/release.py
deleted file mode 100644
index a1bcc27..0000000
--- a/src/sip/Tango/release.py
+++ /dev/null
@@ -1,58 +0,0 @@
-# ------------------------------------------------------------------------------
-# 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.
-"""
-
-__all__ = [ "Release" ]
-
-__docformat__ = "restructuredtext"
-
-class Release:
-    """
-        Release information:
-            - name : (str) package name
-            - version_info : (tuple<int,int,int,str,int>) The five components
-              of the version number: major, minor, micro, releaselevel, and
-              serial.
-            - version : (str) package version in format <major>.<minor>.<micro>
-            - version_long : (str) package version in format
-              <major>.<minor>.<micro><releaselevel><serial>
-            - version_description : (str) short description for the current
-              version
-            - version_number : (int) <major>*100 + <minor>*10 + <micro>
-            - description : (str) package description
-            - long_description : (str) longer package description
-            - authors : (dict<str(last name), tuple<str(full name),str(email)>>)
-              package authors
-            - url : (str) package url
-            - download_url : (str) package download url
-            - platform : (seq<str>) list of available platforms
-            - keywords : (seq<str>) list of keywords
-            - license : (str) the license"""
-    name = 'PyTango'
-    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.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 ' \
-                       'mapping.'
-    license = 'LGPL'
-    authors = { 'Coutinho' : ('Tiago Coutinho' , 'coutinho at esrf.fr') }
-    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/8']
-    keywords = ['Tango', 'CORBA', 'binding']
-    
diff --git a/src/sip/setup.cfg b/src/sip/setup.cfg
deleted file mode 100644
index 0e215a3..0000000
--- a/src/sip/setup.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-[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
deleted file mode 100644
index e39ebb7..0000000
--- a/src/sip/setup.py
+++ /dev/null
@@ -1,298 +0,0 @@
-# ------------------------------------------------------------------------------
-# 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 imp
-import sys
-import struct
-import platform
-import subprocess
-
-from distutils.core import setup, Extension
-from distutils.version import StrictVersion as V
-from distutils.unixccompiler import UnixCCompiler
-
-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():
-    try:
-        sys.path.insert(0, abspath("python"))
-        import release
-        return release.Release
-    finally:
-        sys.path.pop(0)
-
-
-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 += [
-            ('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 = [abspath("sip", "Tango.sip")] + _cppfiles
-
-    cmdclass = {'build_ext': build_ext}
-
-    _tango = Extension(
-        name='Tango.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("Tango") },
-        classifiers=classifiers,
-        provides=provides,
-        keywords=Release.keywords,
-        requires=requires,
-        ext_modules=[_tango],
-        cmdclass=cmdclass)
-
-if __name__ == "__main__":
-    main()
diff --git a/src/sip/sip/AttributeInfo.sip b/src/sip/sip/AttributeInfo.sip
deleted file mode 100644
index cf58712..0000000
--- a/src/sip/sip/AttributeInfo.sip
+++ /dev/null
@@ -1,104 +0,0 @@
-/******************************************************************************
-  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/sip/AttributeInfoEx.sip b/src/sip/sip/AttributeInfoEx.sip
deleted file mode 100644
index 0d60a07..0000000
--- a/src/sip/sip/AttributeInfoEx.sip
+++ /dev/null
@@ -1,176 +0,0 @@
-/******************************************************************************
-  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 AttributeAlarmInfo
-{
-%TypeHeaderCode
-#include <string>
-#include <vector>
-#include <tango.h>
-using namespace Tango;
-%End
-    std::string	min_alarm;
-    std::string	max_alarm;
-    std::string min_warning;
-    std::string	max_warning;
-    std::string	delta_t;
-    std::string delta_val;
-    std::vector<std::string> extensions;
-};
-
-struct ChangeEventInfo
-{
-%TypeHeaderCode
-#include <string>
-#include <vector>
-#include <tango.h>
-using namespace Tango;
-%End
-    std::string rel_change;
-    std::string abs_change;
-};
-
-struct PeriodicEventInfo
-{
-%TypeHeaderCode
-#include <string>
-#include <vector>
-#include <tango.h>
-using namespace Tango;
-%End
-    std::string	period;
-    std::vector<std::string> extensions;
-};
-
-struct ArchiveEventInfo
-{
-%TypeHeaderCode
-#include <string>
-#include <vector>
-#include <tango.h>
-using namespace Tango;
-%End
-    std::string archive_rel_change;
-    std::string archive_abs_change;
-    std::string archive_period;
-    std::vector<std::string> extensions;
-};
-
-struct AttributeEventInfo
-{
-%TypeHeaderCode
-#include <string>
-#include <vector>
-#include <tango.h>
-using namespace Tango;
-%End
-    ChangeEventInfo ch_event;
-    PeriodicEventInfo per_event;
-    ArchiveEventInfo arch_event;
-};
-
-struct AttributeInfoEx : AttributeInfo
-{
-%TypeHeaderCode
-#include <string>
-#include <vector>
-#include <tango.h>
-using namespace Tango;
-%End
-
-    AttributeAlarmInfo alarms;
-    AttributeEventInfo events;
-    std::vector<std::string> sys_extensions;
-
-    bool operator==(const AttributeInfoEx &);
-};
-
-
-%MappedType AttributeInfoListEx
-{
-%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_AttributeInfoEx,
-                                              SIP_NOT_NONE);
-        }
-        return aReturnFlag;
-    }
-
-    AttributeInfoListEx *attrInfoListEx = new AttributeInfoListEx();
-    for(int i = 0; i < PySequence_Size(sipPy); ++i)
-    {
-        int state;
-        AttributeInfoEx *aAttributeInfoEx = reinterpret_cast<AttributeInfoEx*>(
-                              sipConvertToType(PySequence_ITEM(sipPy, i),
-                              sipType_AttributeInfoEx, Py_None,
-                              SIP_NOT_NONE,
-                              &state, sipIsErr));
-        // Deal with any errors.
-        if (*sipIsErr)
-        {
-            sipReleaseType(aAttributeInfoEx, sipType_AttributeInfoEx, state);
-
-            // Tidy up.
-            delete attrInfoListEx;
-
-            // There is no temporary instance.
-            return 0;
-        }
-        attrInfoListEx->push_back(*aAttributeInfoEx);
-        sipReleaseType(aAttributeInfoEx, sipType_AttributeInfoEx, state);
-    }
-    *sipCppPtr = attrInfoListEx;
-    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 AttributeInfoEx
-    int i = 0;
-    for(std::vector<AttributeInfoEx>::iterator j = sipCpp->begin();
-        j != sipCpp->end(); ++j, ++i)
-    {
-        AttributeInfoEx *aAttributeInfoEx = new AttributeInfoEx(*j);
-        PyObject *wobj;
-
-        if (!(wobj = sipConvertFromNewType(aAttributeInfoEx, 
-                                           sipType_AttributeInfoEx,
-                                           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/sip/CommandInfo.sip b/src/sip/sip/CommandInfo.sip
deleted file mode 100644
index 0ff6ed6..0000000
--- a/src/sip/sip/CommandInfo.sip
+++ /dev/null
@@ -1,119 +0,0 @@
-/******************************************************************************
-  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/sip/Database.sip b/src/sip/sip/Database.sip
deleted file mode 100644
index 93e1848..0000000
--- a/src/sip/sip/Database.sip
+++ /dev/null
@@ -1,181 +0,0 @@
-/******************************************************************************
-  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 {
-
-%TypeHeaderCode
-#include <tango.h>
-using namespace Tango;
-%End
-
-private:
-	virtual std::string get_corba_name(bool);
-	virtual std::string build_corba_name();
-	virtual int get_lock_ctr();
-	virtual void set_lock_ctr(int);
-    virtual std::string dev_name();
-
-public :
-	Database();
-	Database(std::string &host, int port);
-	Database(std::string &file);
-
-	Database(const Database &);
-////	Database & operator=(const Database &);
-
-	void write_filedatabase();
-	void reread_filedatabase();
-	void write_event_channel_ior_filedatabase(std::string &);
-	void build_connection ();
-	void post_reconnection();
-
-
-////	inline Device_var &get_dbase() { return device;}
-	void check_tango_host(const char *);
-	AccessControlType check_access_control(std::string &);
-	bool is_control_access_checked();
-	void set_access_checked(bool val);
-
-//	void set_tango_utils(Tango::Util *ptr);
-	int get_server_release();
-
-//	DevErrorList &get_access_except_errors();
-	void clear_access_except_errors();
-	bool is_command_allowed(std::string &,std::string &);
-
-	bool is_multi_tango_host();
-	std::vector<std::string> &get_multi_host();
-	std::vector<std::string> &get_multi_port();
-
-	const std::string &get_file_name();
-
-//#ifdef _TG_WINDOWS_
-//	Database(CORBA::ORB *orb,std::string &,std::string &);
-//	long get_tango_host_from_reg(char **,std::string &,std::string &);
-//#endif
-
-//
-// general methods
-//
-
-	std::string get_info();
-
-	DbDatum get_host_list();
-	DbDatum get_host_list(std::string &);
-	DbDatum get_services(std::string &,std::string &);
-	void register_service(std::string &,std::string &,std::string &);
-	void unregister_service(std::string &,std::string &);
-//	CORBA::Any *fill_server_cache(std::string &,std::string &);
-
-/*
-//
-// device methods
-//
-
-	void add_device(DbDevInfo&);
-	void delete_device(std::string);
-	DbDevImportInfo import_device(std::string &);
-	void export_device(DbDevExportInfo &);
-	void unexport_device(std::string);
-
-	DbDatum get_device_name(std::string &, std::string &,DbServerCache *dsc);
-	DbDatum get_device_name(std::string &, std::string &);
-	DbDatum get_device_exported(std::string &);
-	DbDatum get_device_domain(std::string &);
-	DbDatum get_device_family(std::string &);
-	DbDatum get_device_member(std::string &);
-	void get_device_alias(std::string,std::string &);
-	void get_alias(std::string,std::string &);
-	DbDatum get_device_alias_list(std::string &);
-	std::string get_class_for_device(std::string &);
-	DbDatum get_class_inheritance_for_device(std::string &);
-	DbDatum get_device_exported_for_class(std::string &);
-	void put_device_alias(std::string &,std::string &);
-	void delete_device_alias(std::string &);
-
-//
-// server methods
-//
-	void add_server(std::string &, DbDevInfos&);
-	void delete_server(std::string &);
-	void export_server(DbDevExportInfos &);
-	void unexport_server(std::string &);
-
-	DbServerInfo get_server_info(std::string &);
-	void put_server_info(DbServerInfo &);
-	void delete_server_info(std::string &);
-	DbDatum get_server_class_list(std::string &);
-	DbDatum get_server_name_list();
-	DbDatum get_instance_name_list(std::string &);
-	DbDatum get_server_list();
-	DbDatum get_server_list(std::string &);
-	DbDatum get_host_server_list(std::string &);
-	DbDatum get_device_class_list(std::string &);
-
-//
-// property methods
-//
-
-	void get_property(std::string, DbData &,DbServerCache *dsc);
-	void get_property(std::string st, DbData &db) {get_property(st,db,NULL);}
-	void get_property_forced(std::string, DbData &,DbServerCache *dsc = NULL);
-	void put_property(std::string, DbData &);
-	void delete_property(std::string, DbData &);
-	vector<DbHistory> get_property_history(std::string &,std::string &);
-	DbDatum get_object_list(std::string &);
-	DbDatum get_object_property_list(std::string &,std::string &);
-
-	void get_device_property(std::string, DbData &, DbServerCache *dsc);
-	void get_device_property(std::string st, DbData &db) {get_device_property(st,db,NULL);}
-	void put_device_property(std::string, DbData &);
-	void delete_device_property(std::string, DbData &);
-	vector<DbHistory> get_device_property_history(std::string &,std::string &);
-	DbDatum get_device_property_list(std::string &,std::string &);
-	void get_device_property_list(std::string &,const std::string &,vector<std::string> &,DbServerCache *dsc = NULL);
-
-	void get_device_attribute_property(std::string, DbData &, DbServerCache *dsc);
-	void get_device_attribute_property(std::string st, DbData &db) {get_device_attribute_property(st,db,NULL);}
-	void put_device_attribute_property(std::string, DbData &);
-	void delete_device_attribute_property(std::string, DbData &);
-	void delete_all_device_attribute_property(std::string, DbData &);
-	vector<DbHistory> get_device_attribute_property_history(std::string &,std::string &,std::string &);
-
-	void get_class_property(std::string, DbData &, DbServerCache *dsc);
-	void get_class_property(std::string st,DbData &db) {get_class_property(st,db,NULL);}
-	void put_class_property(std::string, DbData &);
-	void delete_class_property(std::string, DbData &);
-	vector<DbHistory> get_class_property_history(std::string &,std::string &);
-	DbDatum get_class_list(std::string &);
-	DbDatum get_class_property_list(std::string &);
-
-	void get_class_attribute_property(std::string, DbData &, DbServerCache *dsc);
-	void get_class_attribute_property(std::string st,DbData &db) {get_class_attribute_property(st,db,NULL);}
-	void put_class_attribute_property(std::string, DbData &);
-	void delete_class_attribute_property(std::string, DbData &);
-	vector<DbHistory> get_class_attribute_property_history(std::string &,std::string &,std::string &);
-	DbDatum get_class_attribute_list(std::string &,std::string &);
-
-
-// attribute methods
-
-	void get_attribute_alias(std::string, std::string&);
-	DbDatum get_attribute_alias_list(std::string &);
-	void put_attribute_alias(std::string &,std::string &);
-	void delete_attribute_alias(std::string &);
-
-// event methods
-
-	void export_event(DevVarstd::stringArray *);
-	void unexport_event(std::string &);
-	CORBA::Any *import_event(std::string &);
-*/
-};
-
diff --git a/src/sip/sip/DbDatum.sip b/src/sip/sip/DbDatum.sip
deleted file mode 100644
index 6319f96..0000000
--- a/src/sip/sip/DbDatum.sip
+++ /dev/null
@@ -1,187 +0,0 @@
-/******************************************************************************
-  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/sip/DbDevImportInfo.sip b/src/sip/sip/DbDevImportInfo.sip
deleted file mode 100644
index f96c1eb..0000000
--- a/src/sip/sip/DbDevImportInfo.sip
+++ /dev/null
@@ -1,25 +0,0 @@
-/******************************************************************************
-  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/sip/DbDevInfo.sip b/src/sip/sip/DbDevInfo.sip
deleted file mode 100644
index 98b6d4a..0000000
--- a/src/sip/sip/DbDevInfo.sip
+++ /dev/null
@@ -1,24 +0,0 @@
-/******************************************************************************
-  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/sip/DeviceAttribute.sip b/src/sip/sip/DeviceAttribute.sip
deleted file mode 100644
index e1acc79..0000000
--- a/src/sip/sip/DeviceAttribute.sip
+++ /dev/null
@@ -1,30 +0,0 @@
-/******************************************************************************
-  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 DeviceAttribute
-{
-
-public :
-//
-// constructor methods
-//
-	enum except_flags
-	{
-		isempty_flag = 0,
-		wrongtype_flag,
-		failed_flag,
-		unknown_format_flag,
-		numFlags
-	};
-
-	DeviceAttribute();
-	DeviceAttribute(const DeviceAttribute&);
-};
\ No newline at end of file
diff --git a/src/sip/sip/DeviceAttributeConfig.sip b/src/sip/sip/DeviceAttributeConfig.sip
deleted file mode 100644
index d405b5e..0000000
--- a/src/sip/sip/DeviceAttributeConfig.sip
+++ /dev/null
@@ -1,38 +0,0 @@
-/******************************************************************************
-  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/sip/DeviceInfo.sip b/src/sip/sip/DeviceInfo.sip
deleted file mode 100644
index f565562..0000000
--- a/src/sip/sip/DeviceInfo.sip
+++ /dev/null
@@ -1,24 +0,0 @@
-/******************************************************************************
-  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/sip/DeviceProxy.sip b/src/sip/sip/DeviceProxy.sip
deleted file mode 100644
index e53a87e..0000000
--- a/src/sip/sip/DeviceProxy.sip
+++ /dev/null
@@ -1,222 +0,0 @@
-/******************************************************************************
-  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);
-
-    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);
-    void read_attribute(const char *,DeviceAttribute &);
-    void read_attribute(std::string &at,DeviceAttribute &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/sip/Tango.sip b/src/sip/sip/Tango.sip
deleted file mode 100644
index 0816619..0000000
--- a/src/sip/sip/Tango.sip
+++ /dev/null
@@ -1,52 +0,0 @@
-/******************************************************************************
-  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 AttributeInfoEx.sip
-%Include DbDatum.sip
-%Include DbDevInfo.sip
-%Include DbDevImportInfo.sip
-%Include connection.sip
-%Include DeviceAttribute.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
-*/
\ No newline at end of file
diff --git a/src/sip/sip/configure.py b/src/sip/sip/configure.py
deleted file mode 100644
index 1a6ee6e..0000000
--- a/src/sip/sip/configure.py
+++ /dev/null
@@ -1,59 +0,0 @@
-import os
-import sys
-import sipconfig
-
-# The name of the SIP build file generated by SIP and used by the build
-# system.
-
-this_dir = os.path.dirname(os.path.abspath(__file__))
-sip_dir = os.path.join(this_dir, 'sip')
-build_dir = os.path.join(this_dir, 'build')
-install_dir = os.path.join(this_dir, os.path.pardir, 'Tango')
-
-try:
-    os.makedirs(build_dir)
-except OSError:
-    pass
-
-name = "Tango"
-sip_file = os.path.join(this_dir, name + ".sip")
-build_file = os.path.join(build_dir , name + ".sbf")
-
-# Get the SIP configuration information.
-config = sipconfig.Configuration()
-
-# Run SIP to generate the code.
-cmd = " ".join([config.sip_bin,
-                "-e" ,  # Enable support for exceptions.
-                "-g",  # Always release and reaquire the GIL.
-                "-w",  # Enable warning messages
-                "-c", build_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, dir=this_dir,
-                                       install_dir=install_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", "log4tango", python_lib]
-makefile.extra_libs += ["zmq", "omniORB4", "omniDynamic4", "omnithread", "COS4"]
-#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/sip/connection.sip b/src/sip/sip/connection.sip
deleted file mode 100644
index 9df9c92..0000000
--- a/src/sip/sip/connection.sip
+++ /dev/null
@@ -1,51 +0,0 @@
-/******************************************************************************
-  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 {
-
-%TypeHeaderCode
-#include <tango.h>
-using namespace Tango;
-%End
-
-protected:
-
-	virtual std::string get_corba_name(bool)=0;
-	virtual std::string build_corba_name()=0;
-	virtual int get_lock_ctr()=0;
-	virtual void set_lock_ctr(int)=0;
-
-public:
-	virtual std::string dev_name()=0;
-
-	std::string &get_db_host();
-	std::string &get_db_port();
-	int get_db_port_num();
-	bool get_from_env_var();
-	static void get_fqdn(std::string &);
-
-	bool is_dbase_used();
-	std::string &get_dev_host();
-	std::string &get_dev_port();
-
-	int get_idl_version();
-
-	virtual void set_timeout_millis(int timeout);
-	virtual int get_timeout_millis();
-	virtual DevSource get_source();
-	virtual void set_source(DevSource );
-	virtual void set_transparency_reconnection(bool val);
-	virtual bool get_transparency_reconnection();
-
-	AccessControlType get_access_control();
-	void set_access_control(AccessControlType acc);
-	AccessControlType get_access_right();
-};
diff --git a/src/sip/sip/constants.sip b/src/sip/sip/constants.sip
deleted file mode 100644
index 11f5772..0000000
--- a/src/sip/sip/constants.sip
+++ /dev/null
@@ -1,218 +0,0 @@
-/******************************************************************************
-  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>
-using namespace Tango;
-%End
-
-enum CmdArgType {
-	DEV_VOID,
-	DEV_BOOLEAN,
-	DEV_SHORT,
-	DEV_LONG,
-	DEV_FLOAT,
-	DEV_DOUBLE,
-	DEV_USHORT,
-	DEV_ULONG,
-	DEV_STRING,
-	DEVVAR_CHARARRAY,
-	DEVVAR_SHORTARRAY,
-	DEVVAR_LONGARRAY,
-	DEVVAR_FLOATARRAY,
-	DEVVAR_DOUBLEARRAY,
-	DEVVAR_USHORTARRAY,
-	DEVVAR_ULONGARRAY,
-	DEVVAR_STRINGARRAY,
-	DEVVAR_LONGSTRINGARRAY,
-	DEVVAR_DOUBLESTRINGARRAY,
-	DEV_STATE,
-	CONST_DEV_STRING,
-	DEVVAR_BOOLEANARRAY,
-	DEV_UCHAR,
-	DEV_LONG64,
-	DEV_ULONG64,
-	DEVVAR_LONG64ARRAY,
-	DEVVAR_ULONG64ARRAY,
-	DEV_INT,
-	DEV_ENCODED
-};
-
-enum MessBoxType {
-        STOP,
-        INFO
-};
-
-enum PollObjType {
-	POLL_CMD,
-	POLL_ATTR,
-	EVENT_HEARTBEAT,
-	STORE_SUBDEV
-};
-
-enum PollCmdCode {
-	POLL_ADD_OBJ,
-	POLL_REM_OBJ,
-	POLL_START,
-	POLL_STOP,
-	POLL_UPD_PERIOD,
-	POLL_REM_DEV,
-	POLL_EXIT,
-	POLL_REM_EXT_TRIG_OBJ,
-	POLL_ADD_HEARTBEAT,
-	POLL_REM_HEARTBEAT
-};
-
-enum SerialModel {
-	BY_DEVICE,
-	BY_CLASS,
-	BY_PROCESS,
-	NO_SYNC
-};
-
-enum AttReqType {
-	READ_REQ,
-	WRITE_REQ
-};
-
-enum LockCmdCode {
-	LOCK_ADD_DEV,
-	LOCK_REM_DEV,
-	LOCK_UNLOCK_ALL_EXIT,
-	LOCK_EXIT
-};
-
-enum LogLevel {
-  	LOG_OFF,
-  	LOG_FATAL,
-  	LOG_ERROR,
-  	LOG_WARN,
-  	LOG_INFO,
-  	LOG_DEBUG
-} ;
-
-enum LogTarget {
-  	LOG_CONSOLE,
-  	LOG_FILE,
-  	LOG_DEVICE
-};
-
-enum EventType {
-	CHANGE_EVENT,
-	QUALITY_EVENT,
-	PERIODIC_EVENT,
-	ARCHIVE_EVENT,
-	USER_EVENT,
-	ATTR_CONF_EVENT,
-	DATA_READY_EVENT,
-	numEventType
-};
-
-enum AttrSerialModel
-{
-	ATTR_NO_SYNC,
-	ATTR_BY_KERNEL,
-	ATTR_BY_USER
-};
-
-enum KeepAliveCmdCode
-{
-	EXIT_TH
-};
-
-enum AccessControlType
-{
-	ACCESS_READ,
-	ACCESS_WRITE
-};
-
-enum MinMaxValueCheck
-{
-    MIN,
-    MAX
-};
-
-enum ChannelType
-{
-    ZMQ,
-    NOTIFD
-};
-
-// IDL
-
-enum AttrQuality {
-     ATTR_VALID,
-     ATTR_INVALID,
-     ATTR_ALARM,
-     ATTR_CHANGING,
-     ATTR_WARNING
-     /*, __max_AttrQuality=0xffffffff */
-};
-
-enum AttrWriteType
-{
-    READ,
-    READ_WITH_WRITE,
-    WRITE,
-    READ_WRITE
-    /*, __max_AttrWriteType=0xffffffff */
-};
-
-enum AttrDataFormat
-{
-    SCALAR,
-    SPECTRUM,
-    IMAGE,
-    FMT_UNKNOWN
-    /*, __max_AttrDataFormat=0xffffffff */
-};
-
-enum DevSource
-{
-    DEV,
-    CACHE,
-    CACHE_DEV
-    /*, __max_DevSource=0xffffffff */
-};
-
-enum ErrSeverity
-{
-    WARN,
-    ERR,
-    PANIC
-    /*, __max_ErrSeverity=0xffffffff */
-};
-
-enum DevState
-{
-    ON,
-    OFF,
-    CLOSE,
-    OPEN,
-    INSERT,
-    EXTRACT,
-    MOVING,
-    STANDBY,
-    FAULT,
-    INIT,
-    RUNNING,
-    ALARM,
-    DISABLE,
-    UNKNOWN
-    /*, __max_DevState=0xffffffff */
-};
-
-enum DispLevel
-{
-    OPERATOR,
-    EXPERT
-    /*, __max_DispLevel=0xffffffff */
-};
diff --git a/src/sip/sip/std_utils.sip b/src/sip/sip/std_utils.sip
deleted file mode 100644
index 174f1bf..0000000
--- a/src/sip/sip/std_utils.sip
+++ /dev/null
@@ -1,101 +0,0 @@
-/******************************************************************************
-  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
-{
-%TypeHeaderCode
-#include <string>
-%End
-
-%ConvertToTypeCode
-if (sipIsErr == NULL)
-    return PyString_Check(sipPy);
-
-    *sipCppPtr = new std::string(PyString_AsString(sipPy), PyString_Size(sipPy));
-
-    return sipGetState(sipTransferObj);
-%End
-
-%ConvertFromTypeCode
-return PyString_FromStringAndSize(sipCpp->data(),sipCpp->length());
-%End
-};
-
-
-%MappedType std::vector<std::string>
-{
-%TypeHeaderCode
-#include <string>
-#include <vector>
-%End
-
-%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;
-}
- 
-*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));
-
-return sipGetState(sipTransferObj);
-%End
-
-%ConvertFromTypeCode
-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()));
-
-return aReturnListPt;
-%End
-};
-
-
-%MappedType std::vector<int>
-{
-%TypeHeaderCode
-#include <vector>
-%End
-
-%ConvertToTypeCode
-if (sipIsErr == NULL)
-{	
-bool aReturnFlag = PyList_Check(sipPy);
-for(int i = 0;aReturnFlag && i < PyList_Size(sipPy);++i)
-	aReturnFlag = PyInt_Check(PyList_GET_ITEM(sipPy,i));
-return aReturnFlag;
-}
- 
-*sipCppPtr = new std::vector<int>(PyList_Size(sipPy));
-for(int i = 0;i < PyList_Size(sipPy);++i)
-  (*sipCppPtr)->operator[](i) = PyInt_AS_LONG(PyList_GET_ITEM(sipPy,i));
-
-    return sipGetState(sipTransferObj);
-%End
-
-%ConvertFromTypeCode
-PyObject* aReturnListPt = PyList_New(sipCpp->size());
-std::vector<int>::iterator vIter = sipCpp->begin();
-
-for(int i = 0;vIter != sipCpp->end();++vIter,++i)
-  PyList_SET_ITEM(aReturnListPt,i,PyInt_FromLong(*vIter));
-
-return aReturnListPt;
-%End
-
-};
-
diff --git a/src/swig/Makefile b/src/swig/Makefile
deleted file mode 100644
index 6555b4a..0000000
--- a/src/swig/Makefile
+++ /dev/null
@@ -1,106 +0,0 @@
-
-# -----------------------------------------------------------------------------
-# 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
deleted file mode 100644
index 357b25f..0000000
--- a/src/swig/deviceproxy.i
+++ /dev/null
@@ -1,224 +0,0 @@
-/******************************************************************************
-  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
deleted file mode 100644
index 8e8b50e..0000000
--- a/src/swig/tango.i
+++ /dev/null
@@ -1,21 +0,0 @@
-/******************************************************************************
-  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/src/boost/python/__init__.py b/tango/__init__.py
similarity index 88%
rename from src/boost/python/__init__.py
rename to tango/__init__.py
index 66a38d9..e0817ae 100644
--- a/src/boost/python/__init__.py
+++ b/tango/__init__.py
@@ -1,5 +1,5 @@
 # ------------------------------------------------------------------------------
-# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+# This file is part of PyTango (http://pytango.rtfd.io)
 #
 # Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
 # Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
@@ -13,7 +13,7 @@
 This is the main PyTango package file.
 Documentation for this package can be found online:
 
-http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
+http://pytango.readthedocs.io
 """
 
 from __future__ import print_function
@@ -27,6 +27,7 @@ __all__ = [ 'AccessControlType', 'ApiUtil', 'ArchiveEventInfo',
 'AttributeConfig_3', 'AttributeDimension', 'AttributeEventInfo',
 'AttributeInfo', 'AttributeInfoEx', 'AttributeInfoList', 'AttributeInfoListEx',
 'AttributeList', 'AttributeProxy', 'ChangeEventInfo', 'ChangeEventProp',
+'Pipe', 'PipeConfig', 'PipeWriteType',
 'CmdArgType', 'CmdDoneEvent', 'CommandInfo', 'CommandInfoList',
 'CommunicationFailed', 'Connection', 'ConnectionFailed',
 'ConstDevString', 'DServer', 'DataReadyEventData', 'Database', 'DbData',
@@ -35,7 +36,7 @@ __all__ = [ 'AccessControlType', 'ApiUtil', 'ArchiveEventInfo',
 'DbHistoryList', 'DbServerInfo', 'DbServerData', 'DebugIt', 'DevBoolean', 'DevCommandInfo',
 'DevDouble', 'DevEncoded', 'DevError', 'DevFailed', 'DevFloat', 'DevInt',
 'DevLong', 'DevLong64', 'DevShort', 'DevSource', 'DevState', 'DevString',
-'DevUChar', 'DevULong', 'DevULong64', 'DevUShort', 'DevVarBooleanArray',
+'DevUChar', 'DevULong', 'DevULong64', 'DevUShort', 'DevEnum', 'DevVarBooleanArray',
 'DevVarCharArray', 'DevVarDoubleArray', 'DevVarDoubleStringArray',
 'DevVarFloatArray', 'DevVarLong64Array', 'DevVarLongArray',
 'DevVarLongStringArray', 'DevVarShortArray', 'DevVarStringArray',
@@ -44,7 +45,7 @@ __all__ = [ 'AccessControlType', 'ApiUtil', 'ArchiveEventInfo',
 'DeviceAttributeHistory', 'DeviceClass', 'DeviceData', 'DeviceDataList',
 'DeviceDataHistory', 'DeviceDataHistoryList',
 'DeviceImpl', 'DeviceInfo', 'DeviceProxy',
-'DeviceUnlocked', 'Device_2Impl', 'Device_3Impl', 'Device_4Impl',
+'DeviceUnlocked', 'Device_2Impl', 'Device_3Impl', 'Device_4Impl', 'Device_5Impl',
 'DispLevel', 'EncodedAttribute', 'ErrSeverity', 'ErrorIt',
 'EventData', 'EventProperties', 'EventSystemFailed', 'EventType',
 'Except', 'ExtractAs', 'FMT_UNKNOWN', 'FatalIt', 'Group', 'GroupAttrReply',
@@ -60,8 +61,8 @@ __all__ = [ 'AccessControlType', 'ApiUtil', 'ArchiveEventInfo',
 'SPECTRUM', 'SerialModel', 'SpectrumAttr', 'StdDoubleVector',
 'StdGroupAttrReplyVector', 'StdGroupCmdReplyVector', 'StdGroupReplyVector',
 'StdLongVector', 'StdNamedDevFailedVector', 'StdStringVector', 'SubDevDiag',
-'TangoStream', 'TimeVal', 'UserDefaultAttrProp', 'Util', 'WAttribute',
-'WRITE', 'WarnIt', 'WrongData', 'WrongNameSyntax', '__version__',
+'TangoStream', 'TimeVal', 'UserDefaultAttrProp', 'UserDefaultPipeProp', 'Util',
+'WAttribute', 'WRITE', 'WarnIt', 'WrongData', 'WrongNameSyntax', '__version__',
 '__version_description__', '__version_info__', '__version_long__',
 '__version_number__', 'alarm_flags', 'asyn_req_type', 'cb_sub_model',
 'class_factory', 'class_list', 'constants', 'constructed_class',
@@ -70,7 +71,7 @@ __all__ = [ 'AccessControlType', 'ApiUtil', 'ArchiveEventInfo',
 'get_cpp_classes', 'is_array_type', 'is_float_type',
 'is_int_type', 'is_numerical_type', 'is_scalar_type', 'numpy_image',
 'numpy_spectrum', 'numpy_type', 'obj_2_str', 'raise_asynch_exception',
-'seqStr_2_obj']
+'seqStr_2_obj', 'AutoTangoMonitor', 'AutoTangoAllowThreads']
 
 __docformat__ = "restructuredtext"
 
@@ -86,7 +87,7 @@ def __prepare_nt():
     if tango_root is None:
         tango_root = os.path.join(os.environ["ProgramFiles"], "tango")
     tango_root = tango_root.lower()
-    
+
     if sys.hexversion < 0x03030000:
         vc = "vc9_dll"
     else:
@@ -102,7 +103,7 @@ def __prepare_nt():
        tango_dll_path not in PATH.lower():
             os.environ['PATH'] += ";" + tango_dll_path
     else:
-        # Tango C++ could not be found on the system... 
+        # Tango C++ could not be found on the system...
         # ... use PyTango's private Tango C++ library
         tango_dll_path = os.path.dirname(os.path.abspath(__file__))
         tango_dll_path = os.path.join(tango_dll_path, "_tango_dll_")
@@ -111,21 +112,21 @@ def __prepare_nt():
 
 if os.name == 'nt':
     try:
-        from . import _PyTango
+        from . import _tango
     except ImportError as ie:
         # in windows try to find the location for tango
         __prepare_nt()
-        from . import _PyTango
+        from . import _tango
 else:
-    from . import _PyTango
-        
-from ._PyTango import (AccessControlType, ApiUtil, ArchiveEventInfo,
+    from . import _tango
+
+from ._tango import (AccessControlType, ApiUtil, ArchiveEventInfo,
     AsynCall, AsynReplyNotArrived, AttReqType, Attr, AttrConfEventData,
     AttrDataFormat, AttrList, AttrProperty, AttrQuality, AttrReadEvent,
     AttrSerialModel, AttrWriteType, AttrWrittenEvent, Attribute,
     AttributeAlarmInfo, AttributeDimension, AttributeEventInfo, AttributeInfo,
     AttributeInfoEx, AttributeInfoList, AttributeInfoListEx, AttributeList,
-    ChangeEventInfo, CmdArgType,
+    ChangeEventInfo, CmdArgType, Pipe, PipeWriteType,
     CmdDoneEvent, CommandInfo, CommandInfoList, CommunicationFailed,
     Connection, ConnectionFailed, ConstDevString, DServer, DataReadyEventData,
     Database, DbData, DbDatum, DbDevExportInfo, DbDevExportInfos,
@@ -133,14 +134,14 @@ from ._PyTango import (AccessControlType, ApiUtil, ArchiveEventInfo,
     DbHistoryList, DbServerInfo, DbServerData, DevBoolean, DevCommandInfo, DevDouble,
     DevEncoded, DevError, DevFailed, DevFloat, DevInt, DevLong, DevLong64,
     DevShort, DevSource, DevState, DevString, DevUChar, DevULong, DevULong64,
-    DevUShort, DevVarBooleanArray, DevVarCharArray, DevVarDoubleArray,
+    DevUShort, DevEnum, DevVarBooleanArray, DevVarCharArray, DevVarDoubleArray,
     DevVarDoubleStringArray, DevVarFloatArray, DevVarLong64Array,
     DevVarLongArray, DevVarLongStringArray, DevVarShortArray, DevVarStringArray,
     DevVarULong64Array, DevVarULongArray, DevVarUShortArray, DevVoid,
     DeviceAttribute, DeviceAttributeConfig, DeviceAttributeHistory,
     DeviceData, DeviceDataList, DeviceDataHistory, DeviceDataHistoryList,
     DeviceImpl, DeviceInfo, DeviceProxy, DeviceUnlocked, Device_2Impl,
-    Device_3Impl, Device_4Impl, DispLevel, EncodedAttribute, ErrSeverity,
+    Device_3Impl, Device_4Impl, Device_5Impl, DispLevel, EncodedAttribute, ErrSeverity,
     EventData, EventSystemFailed, EventType,
     Except, ExtractAs, GreenMode, FMT_UNKNOWN, GroupAttrReply, GroupAttrReplyList,
     GroupCmdReply, GroupCmdReplyList, GroupReply, GroupReplyList,
@@ -153,9 +154,10 @@ from ._PyTango import (AccessControlType, ApiUtil, ArchiveEventInfo,
     SpectrumAttr, StdDoubleVector, StdGroupAttrReplyVector,
     StdGroupCmdReplyVector, StdGroupReplyVector, StdLongVector,
     StdNamedDevFailedVector, StdStringVector, SubDevDiag, TimeVal,
-    UserDefaultAttrProp, WAttribute, WRITE, WrongData, WrongNameSyntax,
-    alarm_flags, asyn_req_type, cb_sub_model, constants,
-    raise_asynch_exception, Interceptors)
+    UserDefaultAttrProp, UserDefaultPipeProp, WAttribute, WRITE, WrongData,
+    WrongNameSyntax, alarm_flags, asyn_req_type, cb_sub_model, constants,
+    raise_asynch_exception, Interceptors,
+    AutoTangoMonitor, AutoTangoAllowThreads)
 
 ArgType = CmdArgType
 
@@ -175,6 +177,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 .pipe import PipeConfig
 from .attribute_proxy import AttributeProxy, get_attribute_proxy
 from .group import Group
 from .pyutil import Util
@@ -192,11 +195,3 @@ from .tango_numpy import NumpyType, numpy_type, numpy_spectrum, numpy_image
 
 from .pytango_init import init as __init
 __init()
-
-
-def __leave():
-    _PyTango._leavefunc()
-
-import atexit
-atexit.register(__leave)
-
diff --git a/src/boost/python/api_util.py b/tango/api_util.py
similarity index 96%
rename from src/boost/python/api_util.py
rename to tango/api_util.py
index 1184555..3ab9cb7 100644
--- a/src/boost/python/api_util.py
+++ b/tango/api_util.py
@@ -1,5 +1,5 @@
 # ------------------------------------------------------------------------------
-# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+# This file is part of PyTango (http://pytango.rtfd.io)
 #
 # Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
 # Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
@@ -17,7 +17,7 @@ __all__ = ["api_util_init"]
 
 __docformat__ = "restructuredtext"
 
-from ._PyTango import ApiUtil
+from ._tango import ApiUtil
 
 from .utils import document_method, document_static_method, _get_env_var
 
@@ -32,8 +32,8 @@ def __doc_api_util():
     It is designed as a singleton. To get a reference to the singleton object
     you must do::
     
-        import PyTango
-        apiutil = PyTango.ApiUtil.instance()
+        import tango
+        apiutil = tango.ApiUtil.instance()
         
     New in PyTango 7.1.3
     """
diff --git a/src/boost/python/futures.py b/tango/asyncio.py
similarity index 60%
copy from src/boost/python/futures.py
copy to tango/asyncio.py
index b34f876..8246d02 100644
--- a/src/boost/python/futures.py
+++ b/tango/asyncio.py
@@ -1,5 +1,5 @@
-# ------------------------------------------------------------------------------
-# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+# -----------------------------------------------------------------------------
+# This file is part of PyTango (http://pytango.rtfd.io)
 #
 # Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
 # Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
@@ -7,53 +7,70 @@
 # 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
+"""This module exposes a asyncio version of :class:`PyTango.DeviceProxy` and
 :class:`PyTango.AttributeProxy"""
 
-__all__ = ["DeviceProxy", "AttributeProxy", "check_requirements"]
+from __future__ import absolute_import
+
+__all__ = ["DeviceProxy", "AttributeProxy", "check_requirements",
+           "get_event_loop"]
 
 from functools import partial
 
 from PyTango import GreenMode
 from PyTango.device_proxy import get_device_proxy
 from PyTango.attribute_proxy import get_attribute_proxy
+from PyTango.tango_asyncio import get_event_loop
 
 
 def check_requirements():
     try:
+        import asyncio
+    except ImportError:
+        try:
+            import trollius as asyncio
+        except ImportError:
+            raise ImportError(
+                "Not able to import asyncio or its backport trollius")
+    try:
         import concurrent.futures
     except ImportError:
-        import sys
-        if sys.version_info[0] < 3:
-            raise ImportError("No module named concurrent. You need to " \
-                              "install the futures backport module to have " \
-                              "access to PyTango futures green mode")
-                              
+        raise ImportError(
+            "No module named concurrent. You need to "
+            "install the futures backport module to have "
+            "access to PyTango futures green mode")
+    return asyncio, concurrent.futures
+
 
 check_requirements()
 
-DeviceProxy = partial(get_device_proxy, green_mode=GreenMode.Futures)
+DeviceProxy = partial(get_device_proxy,
+                      green_mode=GreenMode.Asyncio,
+                      wait=False)
 DeviceProxy.__doc__ = """
-    DeviceProxy(self, dev_name, wait=True, timeout=True) -> DeviceProxy
-    DeviceProxy(self, dev_name, need_check_acc, wait=True, timeout=True) -> DeviceProxy
+    DeviceProxy(self, dev_name, wait=False, timeout=None)
+        -> DeviceProxy
+
+    DeviceProxy(self, dev_name, need_check_acc, wait=False, timeout=None)
+        -> DeviceProxy
+
+    Creates a *asyncio* enabled :class:`~PyTango.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.
+    it *slow*. By using the asyncio *green mode* you may give the control back
+    to the asyncio event loop using the *yield from* or *await* synthax.
 
     .. 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`)
+        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 
+    :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.
@@ -68,24 +85,29 @@ DeviceProxy.__doc__ = """
         else:
             :class:`concurrent.futures.Future`
     :throws:
-        * a *DevFailed* if wait is True and there is an error creating 
+        * 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.                            
+        * an *asyncio.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 = partial(get_attribute_proxy,
+                         green_mode=GreenMode.Asyncio,
+                         wait=False)
 AttributeProxy.__doc__ = """
-    AttributeProxy(self, full_attr_name, wait=True, timeout=True) -> AttributeProxy
-    AttributeProxy(self, device_proxy, attr_name, wait=True, timeout=True) -> AttributeProxy
+    AttributeProxy(self, full_attr_name, wait=False, timeout=False)
+        -> AttributeProxy
+
+    AttributeProxy(self, device_proxy, attr_name, wait=False, timeout=False)
+        -> 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.
+    makes it *slow*. By using the asyncio *green mode* you may give the control
+    back to the asyncio event loop using the *yield from* or *await* synthax.
 
     :param full_attr_name: the full name of the attribute
     :type full_attr_name: str
@@ -108,9 +130,9 @@ AttributeProxy.__doc__ = """
     :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
+        * a *asyncio.TimeoutError* if wait is False, timeout is not
           None and the time to create the attribute has expired.
-    
+
     New in PyTango 8.1.0
 """
 
diff --git a/tango/asyncio_tools.py b/tango/asyncio_tools.py
new file mode 100644
index 0000000..55a0ca0
--- /dev/null
+++ b/tango/asyncio_tools.py
@@ -0,0 +1,100 @@
+"""Backport some asyncio features."""
+from __future__ import absolute_import
+
+import concurrent.futures
+try:
+    import asyncio
+except ImportError:
+    import trollius as asyncio
+
+__all__ = ["run_coroutine_threadsafe"]
+
+
+def _set_concurrent_future_state(concurrent, source):
+    """Copy state from a future to a concurrent.futures.Future."""
+    assert source.done()
+    if source.cancelled():
+        concurrent.cancel()
+    if not concurrent.set_running_or_notify_cancel():
+        return
+    exception = source.exception()
+    if exception is not None:
+        concurrent.set_exception(exception)
+    else:
+        result = source.result()
+        concurrent.set_result(result)
+
+
+def _copy_future_state(source, dest):
+    """Internal helper to copy state from another Future.
+    The other Future may be a concurrent.futures.Future.
+    """
+    assert source.done()
+    if dest.cancelled():
+        return
+    assert not dest.done()
+    if source.cancelled():
+        dest.cancel()
+    else:
+        exception = source.exception()
+        if exception is not None:
+            dest.set_exception(exception)
+        else:
+            result = source.result()
+            dest.set_result(result)
+
+
+def _chain_future(source, dest):
+    """Chain two futures so that when one completes, so does the other.
+    The result (or exception) of source will be copied to destination.
+    If destination is cancelled, source gets cancelled too.
+    Compatible with both asyncio.Future and concurrent.futures.Future.
+    """
+    if not isinstance(source, (asyncio.Future, concurrent.futures.Future)):
+        raise TypeError('A future is required for source argument')
+    if not isinstance(dest, (asyncio.Future, concurrent.futures.Future)):
+        raise TypeError('A future is required for destination argument')
+    source_loop = source._loop if isinstance(source, asyncio.Future) else None
+    dest_loop = dest._loop if isinstance(dest, asyncio.Future) else None
+
+    def _set_state(future, other):
+        if isinstance(future, asyncio.Future):
+            _copy_future_state(other, future)
+        else:
+            _set_concurrent_future_state(future, other)
+
+    def _call_check_cancel(destination):
+        if destination.cancelled():
+            if source_loop is None or source_loop is dest_loop:
+                source.cancel()
+            else:
+                source_loop.call_soon_threadsafe(source.cancel)
+
+    def _call_set_state(source):
+        if dest_loop is None or dest_loop is source_loop:
+            _set_state(dest, source)
+        else:
+            dest_loop.call_soon_threadsafe(_set_state, dest, source)
+
+    dest.add_done_callback(_call_check_cancel)
+    source.add_done_callback(_call_set_state)
+
+
+def run_coroutine_threadsafe(coro, loop):
+    """Submit a coroutine object to a given event loop.
+    Return a concurrent.futures.Future to access the result.
+    """
+    if not asyncio.iscoroutine(coro):
+        raise TypeError('A coroutine object is required')
+    future = concurrent.futures.Future()
+
+    def callback():
+        try:
+            _chain_future(asyncio.async(coro, loop=loop), future)
+        except Exception as exc:
+            if future.set_running_or_notify_cancel():
+                future.set_exception(exc)
+            raise
+
+    loop.call_soon_threadsafe(callback)
+    return future
diff --git a/src/boost/python/attr_data.py b/tango/attr_data.py
similarity index 93%
rename from src/boost/python/attr_data.py
rename to tango/attr_data.py
index 7e806bf..8bc6b81 100644
--- a/src/boost/python/attr_data.py
+++ b/tango/attr_data.py
@@ -1,5 +1,5 @@
 # ------------------------------------------------------------------------------
-# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+# This file is part of PyTango (http://pytango.rtfd.io)
 #
 # Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
 # Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
@@ -22,9 +22,9 @@ __docformat__ = "restructuredtext"
 
 import inspect
 
-from ._PyTango import Except, CmdArgType, AttrDataFormat, AttrWriteType
-from ._PyTango import DispLevel, UserDefaultAttrProp
-from ._PyTango import Attr, SpectrumAttr, ImageAttr
+from ._tango import Except, CmdArgType, AttrDataFormat, AttrWriteType
+from ._tango import DispLevel, UserDefaultAttrProp
+from ._tango import Attr, SpectrumAttr, ImageAttr
 from .utils import is_non_str_seq, is_pure_str
 
 
@@ -149,7 +149,10 @@ class AttrData(object):
             method_name = "set_%s" % k_lower.replace(' ','_')
             if hasattr(p, method_name):
                 method = getattr(p, method_name)
-                method(str(v))
+                if method_name == 'set_enum_labels':
+                    method(v)
+                else:
+                    method(str(v))
             elif k == 'delta_time':
                 p.set_delta_t(str(v))
             elif not k_lower in ('display level', 'polling period', 'memorized'):
@@ -200,7 +203,7 @@ class AttrData(object):
         except:
             throw_ex("Wrong data type in attribute argument for attribute %s "
                      "in class %s\nAttribute data type (first element in first "
-                     "sequence) must be a PyTango.CmdArgType"
+                     "sequence) must be a tango.CmdArgType"
                      % (attr_name, name))
         
         # get format
@@ -209,7 +212,7 @@ class AttrData(object):
         except:
             throw_ex("Wrong data format in attribute argument for attribute %s "
                      "in class %s\nAttribute data format (second element in "
-                     "first sequence) must be a PyTango.AttrDataFormat"
+                     "first sequence) must be a tango.AttrDataFormat"
                      % (attr_name, name))
         
         if self.attr_format == AttrDataFormat.SCALAR:
@@ -259,14 +262,14 @@ class AttrData(object):
             throw_ex("Wrong data write type in attribute argument for "
                      "attribute %s in class %s\nAttribute write type (third "
                      "element in first sequence) must be a "
-                     "PyTango.AttrWriteType" % (attr_name, name))
+                     "tango.AttrWriteType" % (attr_name, name))
         try:
             self.display_level = DispLevel(extra_info.get("display level", 
                                                           DispLevel.OPERATOR))
         except:
             throw_ex("Wrong display level in attribute information for "
                      "attribute %s in class %s\nAttribute information for "
-                     "display level is not a PyTango.DispLevel"
+                     "display level is not a tango.DispLevel"
                      % (attr_name, name))
         try:
             self.polling_period = int(extra_info.get("polling period", -1))
@@ -289,6 +292,12 @@ class AttrData(object):
         else:
             self.memorized = False
         
+        if self.attr_type == CmdArgType.DevEnum:
+            if not 'enum_labels' in extra_info:
+                throw_ex("Missing 'enum_labels' key in attr_list definition "\
+                         "for enum attribute %s in class %s" % (attr_name, name))
+            self.enum_labels = extra_info["enum_labels"]
+
         self.attr_class = extra_info.get("klass", self.DftAttrClassMap[self.attr_format])
         self.attr_args.extend((self.attr_name, self.attr_type, self.attr_write))
         if not self.attr_format == AttrDataFormat.SCALAR:
diff --git a/src/boost/python/attribute_proxy.py b/tango/attribute_proxy.py
similarity index 86%
rename from src/boost/python/attribute_proxy.py
rename to tango/attribute_proxy.py
index f8461f9..53f28ea 100644
--- a/src/boost/python/attribute_proxy.py
+++ b/tango/attribute_proxy.py
@@ -1,5 +1,5 @@
 # ------------------------------------------------------------------------------
-# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+# This file is part of PyTango (http://pytango.rtfd.io)
 #
 # Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
 # Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
@@ -11,23 +11,23 @@
 
 """
 This is an internal PyTango module. It completes the binding of
-:class:`PyTango.AttributeProxy`.
+:class:`tango.AttributeProxy`.
 
-To access these members use directly :mod:`PyTango` module and NOT 
-PyTango.attribute_proxy.
+To access these members use directly :mod:`tango` module and NOT
+tango.attribute_proxy.
 """
 
 __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 ._tango import StdStringVector, DbData, DbDatum, DeviceProxy
+from ._tango import __AttributeProxy as _AttributeProxy
 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
+from .green import result, submit, get_green_mode, get_wait_default_value
 
 
 def get_attribute_proxy(*args, **kwargs):
@@ -35,26 +35,26 @@ 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.
-     
+    Returns a new :class:`~tango.AttributeProxy`.
+    There is no difference between using this function and the direct
+    :class:`~tango.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 
+    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`
+    :param device_proxy: the :class:`~tango.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`
+                      green_mode (check :func:`~tango.get_green_mode` and
+                      :func:`~tango.set_green_mode`)
+    :type green_mode: :obj:`~tango.GreenMode`
     :param wait: whether or not to wait for result. If green_mode
                  Ignored when green_mode is Synchronous (always waits).
     :type wait: bool
@@ -64,58 +64,58 @@ def get_attribute_proxy(*args, **kwargs):
     :type timeout: float
     :returns:
         if green_mode is Synchronous or wait is True:
-            :class:`~PyTango.AttributeProxy`
+            :class:`~tango.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 
+        * 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.                            
+          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)
+    wait = kwargs.pop('wait', get_wait_default_value(green_mode))
     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
-    
+
             Get a (list) property(ies) for an attribute.
 
             This method accepts the following types as propname parameter:
             1. string [in] - single property data to be fetched
             2. sequence<string> [in] - several property data to be fetched
-            3. PyTango.DbDatum [in] - single property data to be fetched
-            4. PyTango.DbData [in,out] - several property data to be fetched.
+            3. tango.DbDatum [in] - single property data to be fetched
+            4. tango.DbData [in,out] - several property data to be fetched.
             5. sequence<DbDatum> - several property data to be feteched
 
             Note: for cases 3, 4 and 5 the 'value' parameter if given, is IGNORED.
 
-            If value is given it must be a PyTango.DbData that will be filled with the
+            If value is given it must be a tango.DbData that will be filled with the
             property values
 
         Parameters :
             - propname : (str) property(ies) name(s)
-            - value : (PyTango.DbData) (optional, default is None meaning that the
-                      method will create internally a PyTango.DbData and return
+            - value : (tango.DbData) (optional, default is None meaning that the
+                      method will create internally a tango.DbData and return
                       it filled with the property values
 
         Return     : (DbData) containing the property(ies) value(s). If a
-                     PyTango.DbData is given as parameter, it returns the same
-                     object otherwise a new PyTango.DbData is returned
+                     tango.DbData is given as parameter, it returns the same
+                     object otherwise a new tango.DbData is returned
 
         Throws     : NonDbDevice, ConnectionFailed (with database),
                      CommunicationFailed (with database),
@@ -155,11 +155,11 @@ def __AttributeProxy__get_property(self, propname, value=None):
 def __AttributeProxy__put_property(self, value):
     """
     put_property(self, value) -> None
-    
+
             Insert or update a list of properties for this attribute.
             This method accepts the following types as value parameter:
-            1. PyTango.DbDatum - single property data to be inserted
-            2. PyTango.DbData - several property data to be inserted
+            1. tango.DbDatum - single property data to be inserted
+            2. tango.DbData - several property data to be inserted
             3. sequence<DbDatum> - several property data to be inserted
             4. dict<str, DbDatum> - keys are property names and value has data to be inserted
             5. dict<str, seq<str>> - keys are property names and value has data to be inserted
@@ -167,8 +167,8 @@ def __AttributeProxy__put_property(self, value):
 
         Parameters :
             - value : can be one of the following:
-                1. PyTango.DbDatum - single property data to be inserted
-                2. PyTango.DbData - several property data to be inserted
+                1. tango.DbDatum - single property data to be inserted
+                2. tango.DbData - several property data to be inserted
                 3. sequence<DbDatum> - several property data to be inserted
                 4. dict<str, DbDatum> - keys are property names and value has data to be inserted
                 5. dict<str, seq<str>> - keys are property names and value has data to be inserted
@@ -201,40 +201,40 @@ def __AttributeProxy__put_property(self, value):
             new_value.append(db_datum)
         value = new_value
     else:
-        raise TypeError('value must be a PyTango.DbDatum, PyTango.DbData,'\
+        raise TypeError('value must be a tango.DbDatum, tango.DbData,'\
                         'a sequence<DbDatum> or a dictionary')
     return self._put_property(value)
 
 def __AttributeProxy__delete_property(self, value):
     """
     delete_property(self, value) -> None
-    
+
         Delete a the given of properties for this attribute.
         This method accepts the following types as value parameter:
-        
+
             1. string [in] - single property to be deleted
-            2. PyTango.DbDatum [in] - single property data to be deleted
-            3. PyTango.DbData [in] - several property data to be deleted
+            2. tango.DbDatum [in] - single property data to be deleted
+            3. tango.DbData [in] - several property data to be deleted
             4. sequence<string> [in]- several property data to be deleted
             5. sequence<DbDatum> [in] - several property data to be deleted
             6. dict<str, obj> [in] - keys are property names to be deleted
                (values are ignored)
             7. dict<str, DbDatum> [in] - several DbDatum.name are property names
                to be deleted (keys are ignored)
-        
+
         Parameters :
             - value : can be one of the following:
 
                 1. string [in] - single property data to be deleted
-                2. PyTango.DbDatum [in] - single property data to be deleted
-                3. PyTango.DbData [in] - several property data to be deleted
+                2. tango.DbDatum [in] - single property data to be deleted
+                3. tango.DbData [in] - several property data to be deleted
                 4. sequence<string> [in]- several property data to be deleted
                 5. sequence<DbDatum> [in] - several property data to be deleted
                 6. dict<str, obj> [in] - keys are property names to be deleted
                    (values are ignored)
                 7. dict<str, DbDatum> [in] - several DbDatum.name are property
                    names to be deleted (keys are ignored)
-        
+
         Return     : None
 
         Throws     : ConnectionFailed, CommunicationFailed
@@ -261,8 +261,8 @@ def __AttributeProxy__delete_property(self, value):
             else:
                 new_value.append(DbDatum(k))
     else:
-        raise TypeError('value must be a string, PyTango.DbDatum, '\
-                        'PyTango.DbData, a sequence or a dictionary')
+        raise TypeError('value must be a string, tango.DbDatum, '\
+                        'tango.DbData, a sequence or a dictionary')
 
     return self._delete_property(new_value)
 
@@ -271,16 +271,16 @@ def __AttributeProxy__delete_property(self, value):
 # AttributeProxy for the constructor (parsing strings if necessary) and some
 # other things. With the _method_* functions defined later it is really easy.
 # One reason to do it this way: get_device_proxy() will always return the
-# same PyTango.DeviceProxy with this implementation. And then we can trust
+# same tango.DeviceProxy with this implementation. And then we can trust
 # it's automatic event unsubscription to handle events.
 class AttributeProxy(object):
     """
         AttributeProxy is the high level Tango object which provides the
         client with an easy-to-use interface to TANGO attributes.
-        
+
         To create an AttributeProxy, a complete attribute name must be set
         in the object constructor.
-        
+
         Example:
             att = AttributeProxy("tango/tangotest/1/long_scalar")
 
@@ -298,11 +298,11 @@ class AttributeProxy(object):
     def get_device_proxy(self):
         """
         get_device_proxy(self) -> DeviceProxy
-        
+
                 A method which returns the device associated to the attribute
-        
+
             Parameters : None
-            
+
             Return     : (DeviceProxy)
         """
         return self.__dev_proxy
@@ -310,9 +310,9 @@ class AttributeProxy(object):
     def name(self):
         """
         name(self) -> str
-            
+
                 Returns the attribute name
-                
+
             Parameters : None
             Return     : (str) with the attribute name
         """
@@ -363,7 +363,7 @@ def __init_AttributeProxy(doc=True):
     _AttributeProxy.get_property        = __AttributeProxy__get_property
     _AttributeProxy.put_property        = __AttributeProxy__put_property
     _AttributeProxy.delete_property     = __AttributeProxy__delete_property
-    
+
     # General methods
     #AttributeProxy.name                manually defined
     AttributeProxy.status               = _method_device('status', doc=doc)
@@ -371,16 +371,16 @@ def __init_AttributeProxy(doc=True):
     AttributeProxy.ping                 = _method_device('ping', doc=doc)
     AttributeProxy.get_transparency_reconnection=_method_device('get_transparency_reconnection', doc=doc)
     AttributeProxy.set_transparency_reconnection=_method_device('set_transparency_reconnection', doc=doc)
-    
+
     # Property methods
     AttributeProxy.get_property         = _method_attribute('get_property', doc=doc)
     AttributeProxy.put_property         = _method_attribute('put_property', doc=doc)
     AttributeProxy.delete_property      = _method_attribute('delete_property', doc=doc)
-    
+
     # Attribute methods
     AttributeProxy.get_config           = _method_dev_and_name('get_attribute_config', doc=doc)
     AttributeProxy.set_config           = _method_device('set_attribute_config', doc=doc)
-    
+
     AttributeProxy.write                = _method_dev_and_name('write_attribute', doc=doc)
     AttributeProxy.read                 = _method_dev_and_name('read_attribute', doc=doc)
     AttributeProxy.write_read           = _method_dev_and_name('write_read_attribute', doc=doc)
diff --git a/tango/auto_monitor.py b/tango/auto_monitor.py
new file mode 100644
index 0000000..412b70e
--- /dev/null
+++ b/tango/auto_monitor.py
@@ -0,0 +1,77 @@
+# ------------------------------------------------------------------------------
+# This file is part of PyTango (http://pytango.rtfd.io)
+#
+# 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.
+"""
+
+__all__ = ["auto_monitor_init"]
+
+__docformat__ = "restructuredtext"
+
+from ._tango import AutoTangoMonitor, AutoTangoAllowThreads
+
+
+def __AutoTangoMonitor__enter__(self):
+    self._acquire()
+    return self
+
+
+def __AutoTangoMonitor__exit__(self, *args, **kwargs):
+    self._release()
+
+
+def __init_AutoTangoMonitor():
+    AutoTangoMonitor.__enter__ = __AutoTangoMonitor__enter__
+    AutoTangoMonitor.__exit__ = __AutoTangoMonitor__exit__
+
+
+def __doc_AutoTangoMonitor():
+    AutoTangoMonitor.__doc__ = """\
+
+    In a tango server, guard the tango monitor within a python context::
+
+        with AutoTangoMonitor(dev):
+            # code here is protected by the tango device monitor
+            do something
+    """
+
+
+def __AutoTangoAllowThreads__enter__(self):
+    return self
+
+
+def __AutoTangoAllowThreads__exit__(self, *args, **kwargs):
+    self._acquire()
+
+
+def __init_AutoTangoAllowThreads():
+    AutoTangoAllowThreads.__enter__ = __AutoTangoAllowThreads__enter__
+    AutoTangoAllowThreads.__exit__ = __AutoTangoAllowThreads__exit__
+
+
+def __doc_AutoTangoAllowThreads():
+    AutoTangoAllowThreads.__doc__ = """\
+
+    In a tango server, free the tango monitor within a context:
+
+        with AutoTangoAllowThreads(dev):
+            # code here is not under the tango device monitor
+            do something
+    """
+
+
+def auto_monitor_init(doc=True):
+    __init_AutoTangoMonitor()
+    __init_AutoTangoAllowThreads()
+    if doc:
+        __doc_AutoTangoMonitor()
+        __doc_AutoTangoAllowThreads()
diff --git a/src/boost/python/base_types.py b/tango/base_types.py
similarity index 97%
rename from src/boost/python/base_types.py
rename to tango/base_types.py
index d49cc20..7479162 100644
--- a/src/boost/python/base_types.py
+++ b/tango/base_types.py
@@ -1,5 +1,5 @@
 # ------------------------------------------------------------------------------
-# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+# This file is part of PyTango (http://pytango.rtfd.io)
 #
 # Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
 # Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
@@ -18,7 +18,7 @@ __all__ = ["base_types_init"]
 __docformat__ = "restructuredtext"
 
 
-from ._PyTango import (StdStringVector, StdLongVector, StdDoubleVector, \
+from ._tango import (StdStringVector, StdLongVector, StdDoubleVector, \
     CommandInfoList, AttributeInfoList, AttributeInfoListEx, DbData, \
     DbDevInfos, DbDevExportInfos, DbDevImportInfos, DbHistoryList, \
     DeviceDataHistoryList, StdGroupReplyVector, \
@@ -53,7 +53,7 @@ def __StdVector__imul(self, n):
 def __StdVector__getitem(self, key):
     if is_integer(key) or key.step is None:
         return self.__original_getitem(key)
-    
+
     res = self.__class__()
     nb = len(self)
     start = key.start or 0
@@ -62,10 +62,10 @@ def __StdVector__getitem(self, key):
         return res
     if stop > nb:
         stop = nb
-    
+
     for i in range(start, stop, key.step or 1):
         res.append(self[i])
-    
+
     return res
 
 def __fillVectorClass(klass):
@@ -253,7 +253,7 @@ def __AttributeInfoEx__setstate__(self, state):
     self.sys_extensions = seq_2_StdStringVector(state[21])
 
 def __init_base_types():
-    
+
     v_klasses = (StdStringVector,StdLongVector,StdDoubleVector,CommandInfoList, \
                  AttributeInfoList,AttributeInfoListEx,DbData,DbDevInfos, \
                  DbDevExportInfos,DbDevImportInfos,DbHistoryList, \
@@ -294,13 +294,13 @@ def __init_base_types():
     AttributeInfoEx.__getinitargs__ = __AttributeInfoEx__getinitargs__
     AttributeInfoEx.__getstate__ = __AttributeInfoEx__getstate__
     AttributeInfoEx.__setstate__ = __AttributeInfoEx__setstate__
-    
+
 
 def __doc_base_types():
-    
+
     def document_enum(enum_name, desc):
-        import PyTango
-        __document_enum(PyTango, enum_name, desc)
+        import tango
+        __document_enum(tango, enum_name, desc)
 
     document_enum("ExtractAs", """
     Defines what will go into value field of DeviceAttribute, or what will
@@ -308,7 +308,7 @@ def __doc_base_types():
     in all the cases.
 
     Valid possible values are:
-    
+
         - Numpy    : Value will be stored in [value, w_value]. If the
           attribute is an scalar, they will contain a value. If it's
           an SPECTRUM or IMAGE it will be exported as a numpy array.
@@ -324,7 +324,7 @@ def __doc_base_types():
           as it comes from TangoC++ in 'value'.
         - Nothing  : The value will not be extracted from DeviceAttribute
     """ )
-    
+
     document_enum("CmdArgType", """
     An enumeration representing the command argument type.
 
@@ -357,41 +357,43 @@ def __doc_base_types():
         - DevVarULong64Array
         - DevInt
         - DevEncoded
+        - DevEnum
+        - DevPipeBlob
     """ )
 
     document_enum("LockerLanguage", """
     An enumeration representing the programming language in which the
-    client application who locked is written. 
-    
+    client application who locked is written.
+
         - CPP : C++/Python language
         - JAVA : Java language
-    
+
     New in PyTango 7.0.0
     """ )
 
     document_enum("MessBoxType", """
     An enumeration representing the MessBoxType
-    
+
         - STOP
         - INFO
-    
+
     New in PyTango 7.0.0
     """ )
 
     document_enum("PollObjType", """
     An enumeration representing the PollObjType
-        
+
         - POLL_CMD
         - POLL_ATTR
         - EVENT_HEARTBEAT
         - STORE_SUBDEV
-    
+
     New in PyTango 7.0.0
     """ )
 
     document_enum("PollCmdCode", """
     An enumeration representing the PollCmdCode
-    
+
         - POLL_ADD_OBJ
         - POLL_REM_OBJ
         - POLL_START
@@ -402,13 +404,13 @@ def __doc_base_types():
         - POLL_REM_EXT_TRIG_OBJ
         - POLL_ADD_HEARTBEAT
         - POLL_REM_HEARTBEAT
-        
+
     New in PyTango 7.0.0
     """ )
 
     document_enum("SerialModel", """
     An enumeration representing the type of serialization performed by the device server
-    
+
         - BY_DEVICE
         - BY_CLASS
         - BY_PROCESS
@@ -417,48 +419,48 @@ def __doc_base_types():
 
     document_enum("AttReqType", """
     An enumeration representing the type of attribute request
-    
+
         - READ_REQ
         - WRITE_REQ
     """ )
 
     document_enum("LockCmdCode", """
     An enumeration representing the LockCmdCode
-    
+
         - LOCK_ADD_DEV
         - LOCK_REM_DEV
         - LOCK_UNLOCK_ALL_EXIT
         - LOCK_EXIT
-        
+
     New in PyTango 7.0.0
     """ )
 
     document_enum("LogLevel", """
     An enumeration representing the LogLevel
-    
+
         - LOG_OFF
         - LOG_FATAL
         - LOG_ERROR
         - LOG_WARN
         - LOG_INFO
         - LOG_DEBUG
-        
+
     New in PyTango 7.0.0
     """ )
 
     document_enum("LogTarget", """
     An enumeration representing the LogTarget
-    
+
         - LOG_CONSOLE
         - LOG_FILE
         - LOG_DEVICE
-        
+
     New in PyTango 7.0.0
     """ )
 
     document_enum("EventType", """
     An enumeration representing event type
- 
+
         - CHANGE_EVENT
         - QUALITY_EVENT
         - PERIODIC_EVENT
@@ -468,98 +470,105 @@ def __doc_base_types():
         - DATA_READY_EVENT
 
         *DATA_READY_EVENT - New in PyTango 7.0.0*
-    
+
     """ )
 
     document_enum("AttrSerialModel", """
     An enumeration representing the AttrSerialModel
-    
+
         - ATTR_NO_SYNC
         - ATTR_BY_KERNEL
         - ATTR_BY_USER
-        
+
     New in PyTango 7.1.0
     """ )
-    
+
     document_enum("KeepAliveCmdCode", """
     An enumeration representing the KeepAliveCmdCode
 
         - EXIT_TH
-        
+
     New in PyTango 7.0.0
     """ )
 
     document_enum("AccessControlType", """
     An enumeration representing the AccessControlType
-    
+
         - ACCESS_READ
         - ACCESS_WRITE
-        
+
     New in PyTango 7.0.0
     """ )
 
     document_enum("asyn_req_type", """
     An enumeration representing the asynchronous request type
-    
+
         - POLLING
         - CALLBACK
         - ALL_ASYNCH
     """ )
-    
+
     document_enum("cb_sub_model", """
     An enumeration representing callback sub model
-    
+
         - PUSH_CALLBACK
         - PULL_CALLBACK
     """ )
-    
+
     document_enum("AttrQuality", """
     An enumeration representing the attribute quality
-    
+
         - ATTR_VALID
         - ATTR_INVALID
         - ATTR_ALARM
         - ATTR_CHANGING
         - ATTR_WARNING
     """ )
-    
+
     document_enum("AttrWriteType", """
     An enumeration representing the attribute type
-    
+
         - READ
         - READ_WITH_WRITE
         - WRITE
         - READ_WRITE
     """ )
-    
+
     document_enum("AttrDataFormat", """
     An enumeration representing the attribute format
-    
+
         - SCALAR
         - SPECTRUM
         - IMAGE
         - FMT_UNKNOWN
     """ )
-    
+
+    document_enum("PipeWriteType", """
+    An enumeration representing the pipe type
+
+        - PIPE_READ
+        - PIPE_READ_WRITE
+    """ )
+
     document_enum("DevSource", """
     An enumeration representing the device source for data
-    
+
         - DEV
         - CACHE
         - CACHE_DEV
     """ )
-    
+
     document_enum("ErrSeverity", """
     An enumeration representing the error severity
-    
+
         - WARN
         - ERR
         - PANIC
     """ )
-    
+
     document_enum("DevState", """
     An enumeration representing the device state
-    
+
         - ON
         - OFF
         - CLOSE
@@ -575,28 +584,28 @@ def __doc_base_types():
         - DISABLE
         - UNKNOWN
     """ )
-    
+
     document_enum("DispLevel", """
     An enumeration representing the display level
-    
+
         - 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
     with the folowing members:
-        
+
         - archive_rel_change : (str) relative change that will generate an event
         - archive_abs_change : (str) absolute change that will generate an event
         - archive_period : (str) archive period
@@ -605,7 +614,7 @@ def __doc_base_types():
     EventData.__doc__ = """
     This class is used to pass data to the callback method when an event
     is sent to the client. It contains the following public fields:
-    
+
          - device : (DeviceProxy) The DeviceProxy object on which the call was
            executed.
          - attr_name : (str) The attribute name
@@ -632,7 +641,7 @@ def __doc_base_types():
     This class is used to pass data to the callback method when a
     configuration event is sent to the client. It contains the
     following public fields:
-    
+
         - device : (DeviceProxy) The DeviceProxy object on which the call was executed
         - attr_name : (str) The attribute name
         - event : (str) The event name
@@ -657,7 +666,7 @@ def __doc_base_types():
     AttributeAlarmInfo.__doc__ = """
     A structure containing available alarm information for an attribute
     with the folowing members:
-        
+
         - min_alarm : (str) low alarm level
         - max_alarm : (str) high alarm level
         - min_warning : (str) low warning level
@@ -669,14 +678,14 @@ def __doc_base_types():
     AttributeDimension.__doc__ = """
     A structure containing x and y attribute data dimensions with
     the following members:
-    
+
         - dim_x : (int) x dimension
         - dim_y : (int) y dimension"""
 
     AttributeEventInfo.__doc__ = """
     A structure containing available event information for an attribute
     with the folowing members:
-        
+
         - ch_event : (ChangeEventInfo) change event information
         - per_event : (PeriodicEventInfo) periodic event information
         - arch_event :  (ArchiveEventInfo) archiving event information"""
@@ -684,7 +693,7 @@ def __doc_base_types():
     DeviceAttributeConfig.__doc__ = """
     A base structure containing available information for an attribute
     with the following members:
-        
+
         - name : (str) attribute name
         - writable : (AttrWriteType) write type (R, W, RW, R with W)
         - data_format : (AttrDataFormat) data format (SCALAR, SPECTRUM, IMAGE)
@@ -707,11 +716,11 @@ def __doc_base_types():
     AttributeInfo.__doc__ = """
     A structure (inheriting from :class:`DeviceAttributeConfig`) containing
     available information for an attribute with the following members:
-    
+
         - disp_level : (DispLevel) display level (OPERATOR, EXPERT)
 
         Inherited members are:
-        
+
             - name : (str) attribute name
             - writable : (AttrWriteType) write type (R, W, RW, R with W)
             - data_format : (AttrDataFormat) data format (SCALAR, SPECTRUM, IMAGE)
@@ -734,13 +743,13 @@ def __doc_base_types():
     AttributeInfoEx.__doc__ = """
     A structure (inheriting from :class:`AttributeInfo`) containing
     available information for an attribute with the following members:
-    
+
         - alarms : object containing alarm information (see AttributeAlarmInfo).
         - events : object containing event information (see AttributeEventInfo).
         - sys_extensions : StdStringVector
 
         Inherited members are:
-        
+
             - name : (str) attribute name
             - writable : (AttrWriteType) write type (R, W, RW, R with W)
             - data_format : (AttrDataFormat) data format (SCALAR, SPECTRUM, IMAGE)
@@ -764,7 +773,7 @@ def __doc_base_types():
     ChangeEventInfo.__doc__ = """
     A structure containing available change event information for an attribute
     with the folowing members:
-        
+
         - rel_change : (str) relative change that will generate an event
         - abs_change : (str) absolute change that will generate an event
         - extensions : (StdStringVector) extensions (currently not used)"""
@@ -772,13 +781,13 @@ def __doc_base_types():
     PeriodicEventInfo.__doc__ = """
     A structure containing available periodic event information for an attribute
     with the folowing members:
-        
+
         - period : (str) event period
         - extensions : (StdStringVector) extensions (currently not used)"""
 
     DevCommandInfo.__doc__ = """
     A device command info with the following members:
-    
+
         - cmd_name : (str) command name
         - cmd_tag : command as binary value (for TACO)
         - in_type : (CmdArgType) input type
@@ -790,11 +799,11 @@ def __doc_base_types():
 
     CommandInfo.__doc__ = """
     A device command info (inheriting from :class:`DevCommandInfo`) with the following members:
-    
+
         - disp_level : (DispLevel) command display level
 
         Inherited members are (from :class:`DevCommandInfo`):
-        
+
             - cmd_name : (str) command name
             - cmd_tag : (str) command as binary value (for TACO)
             - in_type : (CmdArgType) input type
@@ -806,7 +815,7 @@ def __doc_base_types():
     This class is used to pass data to the callback method when an
     attribute data ready event is sent to the clien. It contains the
     following public fields:
-    
+
         - device : (DeviceProxy) The DeviceProxy object on which the call was executed
         - attr_name : (str) The attribute name
         - event : (str) The event name
@@ -823,7 +832,7 @@ def __doc_base_types():
     DeviceInfo.__doc__ = """
     A structure containing available information for a device with the"
     following members:
-    
+
         - dev_class : (str) device class
         - server_id : (str) server ID
         - server_host : (str) host name
@@ -832,24 +841,24 @@ def __doc_base_types():
 
     LockerInfo.__doc__ = """
     A structure with information about the locker with the folowing members:
-    
-        - ll : (PyTango.LockerLanguage) the locker language
+
+        - ll : (tango.LockerLanguage) the locker language
         - li : (pid_t / UUID) the locker id
         - locker_host : (str) the host
         - locker_class : (str) the class
-        
+
         pid_t should be an int, UUID should be a tuple of four numbers.
-        
+
         New in PyTango 7.0.0"""
-    
+
     PollDevice.__doc__ = """
     A structure containing PollDevice information with the folowing members:
-    
+
         - dev_name : (str) device name
         - ind_list : (sequence<int>) index list
-        
+
         New in PyTango 7.0.0"""
-    
+
     document_method(DataReadyEventData, "get_date", """
     get_date(self) -> TimeVal
 
@@ -863,7 +872,7 @@ def __doc_base_types():
 
     TimeVal.__doc__ = """
     Time value structure with the following members:
-    
+
         - tv_sec : seconds
         - tv_usec : microseconds
         - tv_nsec : nanoseconds"""
diff --git a/src/boost/python/callback.py b/tango/callback.py
similarity index 95%
rename from src/boost/python/callback.py
rename to tango/callback.py
index 629e01f..27e38e6 100644
--- a/src/boost/python/callback.py
+++ b/tango/callback.py
@@ -1,5 +1,5 @@
 # ------------------------------------------------------------------------------
-# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+# This file is part of PyTango (http://pytango.rtfd.io)
 #
 # Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
 # Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
@@ -17,7 +17,7 @@ __all__ = ["callback_init"]
 
 __docformat__ = "restructuredtext"
 
-from ._PyTango import CmdDoneEvent, AttrReadEvent, AttrWrittenEvent
+from ._tango import CmdDoneEvent, AttrReadEvent, AttrWrittenEvent
 
 def __init_Callback():
     pass
diff --git a/src/boost/python/client.py b/tango/client.py
similarity index 83%
rename from src/boost/python/client.py
rename to tango/client.py
index 50f3ab4..15d5217 100644
--- a/src/boost/python/client.py
+++ b/tango/client.py
@@ -1,5 +1,5 @@
 # ------------------------------------------------------------------------------
-# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+# This file is part of PyTango (http://pytango.rtfd.io)
 #
 # Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
 # Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
@@ -18,11 +18,13 @@ This is an experimental module. Not part of the official API.
 import weakref
 import functools
 
-import PyTango
-from PyTango import DeviceProxy as Device
-from PyTango import CmdArgType
-from PyTango.codec import loads
-from PyTango.codec import dumps as _dumps
+import six
+
+import tango
+from tango import DeviceProxy as Device
+from tango import CmdArgType
+from tango.codec import loads
+from tango.codec import dumps as _dumps
 
 _FMT = "pickle"
 
@@ -49,7 +51,7 @@ class _DeviceHelper(object):
         self.device = Device(dev_name, *args, **kwargs)
         self.slots = weakref.WeakKeyDictionary()
 
-    def connect(self, signal, slot, event_type=PyTango.EventType.CHANGE_EVENT):
+    def connect(self, signal, slot, event_type=tango.EventType.CHANGE_EVENT):
         i = self.device.subscribe_event(signal, event_type, slot)
         self.slots[slot] = i
         return i
@@ -74,7 +76,7 @@ class _DeviceHelper(object):
                     if attr_name.lower() in self.__ATTR_FILTER:
                         continue
                     cache[attr_name] = attr_info
-            except PyTango.DevFailed:
+            except tango.DevFailed:
                 pass
             self.__attr_cache = cache
         return cache
@@ -108,7 +110,7 @@ class _DeviceHelper(object):
                     cmd_func.__doc__ = cmd_info.in_type_desc
                     cmd_info.func = cmd_func
                     cache[cmd_name] = cmd_info
-            except PyTango.DevFailed:
+            except tango.DevFailed:
                 pass
             self.__cmd_cache = cache
         return cache
@@ -136,7 +138,7 @@ class _DeviceHelper(object):
         if result:
             result = dev.read_attribute(name)
             value = result.value
-            if result.type == PyTango.DevEncoded:
+            if result.type == tango.DevEncoded:
                 result = loads(*value)
             else:
                 result = value
@@ -150,7 +152,7 @@ class _DeviceHelper(object):
         result = self.get_attr_info(name)
         if result is None:
             raise KeyError("Unknown attribute %s" % name)
-        if result.data_type == PyTango.DevEncoded:
+        if result.data_type == tango.DevEncoded:
             self.device.write_attribute(name, dumps(value))
         else:
             self.device.write_attribute(name, value)
@@ -164,9 +166,19 @@ class _DeviceHelper(object):
             info = self.device.info()
             self.__dict__["__info"] = info
             return info
-        except PyTango.DevFailed:
+        except tango.DevFailed:
             return None
 
+    def __getitem__(self, name):
+        if self.get_attr_info(name) is None:
+            raise KeyError("Unknown attribute %s" % name)
+        return self.device[name]
+
+    def __setitem__(self, name, value):
+        if self.get_attr_info(name) is None:
+            raise KeyError("Unknown attribute %s" % name)
+        self.device[name] = value
+
     def __str__(self):
         return self.dstr()
 
@@ -189,8 +201,11 @@ class Object(object):
         self.__dict__["_helper"] = helper
 
     def __getattr__(self, name):
-        r = self._helper.get(name)
-        if isinstance(r, PyTango.CommandInfo):
+        try:
+            r = self._helper.get(name)
+        except KeyError as ke:
+            six.raise_from(AttributeError('Unknown {0}'.format(name)), ke)
+        if isinstance(r, tango.CommandInfo):
             self.__dict__[name] = r.func
             return r.func
         return r
@@ -198,8 +213,14 @@ class Object(object):
     def __setattr__(self, name, value):
         try:
             return self._helper.set(name, value)
-        except KeyError:
-            object.__setattr__(self, name, value)
+        except KeyError as ke:
+            six.raise_from(AttributeError('Unknown {0}'.format(name)), ke)
+
+    def __getitem__(self, name):
+        return self._helper[name]
+
+    def __setitem__(self, name, value):
+        self._helper[name] = value
 
     def __str__(self):
         return str(self._helper)
@@ -241,7 +262,7 @@ def get_commands_config(obj, refresh=False):
     return obj._helper.get_cmd_cache(refresh=refresh)
 
 
-def connect(obj, signal, slot, event_type=PyTango.EventType.CHANGE_EVENT):
+def connect(obj, signal, slot, event_type=tango.EventType.CHANGE_EVENT):
     """Experimental function. Not part of the official API"""
     return obj._helper.connect(signal, slot, event_type=event_type)
 
diff --git a/src/boost/python/codec.py b/tango/codec.py
similarity index 100%
rename from src/boost/python/codec.py
rename to tango/codec.py
diff --git a/src/boost/python/connection.py b/tango/connection.py
similarity index 98%
rename from src/boost/python/connection.py
rename to tango/connection.py
index 0c7418e..7d45f11 100644
--- a/src/boost/python/connection.py
+++ b/tango/connection.py
@@ -1,5 +1,5 @@
 # ------------------------------------------------------------------------------
-# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+# This file is part of PyTango (http://pytango.rtfd.io)
 #
 # Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
 # Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
@@ -20,7 +20,7 @@ __docformat__ = "restructuredtext"
 import operator
 import collections
 
-from ._PyTango import Connection, DeviceData, __CallBackAutoDie, CmdArgType, \
+from ._tango 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
@@ -78,8 +78,8 @@ def __Connection__command_inout(self, name, *args, **kwds):
                               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`).
+                               (see :meth:`~tango.DeviceProxy.get_green_mode` and
+                               :meth:`~tango.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.
@@ -175,7 +175,7 @@ def __Connection__command_inout_asynch(self, cmd_name, *args):
         by default, TANGO is initialized with the **polling** model. If you want
         to use the **push** model (the one with the callback parameter), you
         need to change the global TANGO model to PUSH_CALLBACK.
-        You can do this with the :meth:`PyTango.ApiUtil.set_asynch_cb_sub_model`
+        You can do this with the :meth:`tango.ApiUtil.set_asynch_cb_sub_model`
     """
     if len(args) == 0: # command_inout_asynch()
         argin = DeviceData()
diff --git a/src/boost/python/databaseds/DataBase.xmi b/tango/databaseds/DataBase.xmi
similarity index 100%
rename from src/boost/python/databaseds/DataBase.xmi
rename to tango/databaseds/DataBase.xmi
diff --git a/src/boost/python/databaseds/DataBaseds b/tango/databaseds/DataBaseds
similarity index 100%
rename from src/boost/python/databaseds/DataBaseds
rename to tango/databaseds/DataBaseds
diff --git a/src/boost/python/databaseds/__init__.py b/tango/databaseds/__init__.py
similarity index 100%
rename from src/boost/python/databaseds/__init__.py
rename to tango/databaseds/__init__.py
diff --git a/src/boost/python/databaseds/create_db.sql b/tango/databaseds/create_db.sql
similarity index 100%
rename from src/boost/python/databaseds/create_db.sql
rename to tango/databaseds/create_db.sql
diff --git a/src/boost/python/databaseds/create_db_tables.sql b/tango/databaseds/create_db_tables.sql
similarity index 100%
rename from src/boost/python/databaseds/create_db_tables.sql
rename to tango/databaseds/create_db_tables.sql
diff --git a/src/boost/python/databaseds/database.py b/tango/databaseds/database.py
similarity index 90%
rename from src/boost/python/databaseds/database.py
rename to tango/databaseds/database.py
index 7886250..869d1b2 100644
--- a/src/boost/python/databaseds/database.py
+++ b/tango/databaseds/database.py
@@ -14,15 +14,15 @@ except ImportError:
     argparse = None
     from optparse import OptionParser
 
-import PyTango
-from PyTango import AttrWriteType, GreenMode
-from PyTango.server import Device, DeviceMeta
-from PyTango.server import attribute, command
-from PyTango.server import class_property
-from PyTango.server import device_property
-from PyTango.server import run
-
-from PyTango.globals import get_class, get_class_by_class, \
+import tango
+from tango import AttrWriteType, GreenMode
+from tango.server import Device, DeviceMeta
+from tango.server import attribute, command
+from tango.server import class_property
+from tango.server import device_property
+from tango.server import run
+
+from tango.globals import get_class, get_class_by_class, \
     get_constructed_class_by_class
 
 
@@ -35,7 +35,7 @@ READ_WITH_WRITE = AttrWriteType.READ_WITH_WRITE
 global options
 global WILDCARD_REPLACEMENT
 WILDCARD_REPLACEMENT = True
-class DbInter(PyTango.Interceptors):
+class DbInter(tango.Interceptors):
 
     def create_thread(self):
         pass
@@ -53,11 +53,11 @@ def get_db_name():
     return DB_NAME
 
 
-import db_access
+from . import db_access
 
-th_exc = PyTango.Except.throw_exception
+th_exc = tango.Except.throw_exception
 
-from db_errors import *
+from .db_errors import *
 
 def check_device_name(dev_name):
     if '*' in dev_name:
@@ -163,7 +163,7 @@ class DataBase(Device):
             WILDCARD_REPLACEMENT = m.get_wildcard_replacement()
         except AttributeError:
             pass
-        self.set_state(PyTango.DevState.ON)
+        self.set_state(tango.DevState.ON)
 
     def init_timing_stats(self):
         self.timing_maps = {}
@@ -180,7 +180,7 @@ class DataBase(Device):
 
     def read_Timing_average(self):
         self._log.debug("In read_Timing_average()")
-        
+
         return [x.average for x in self.timing_maps.values()]
 
     def read_Timing_index(self):
@@ -193,7 +193,7 @@ class DataBase(Device):
 
     def read_Timing_info(self):
         self._log.debug("In read_Timing_info()")
-        util = PyTango.Util.instance()
+        util = tango.Util.instance()
         attr_Timing_info_read = []
         attr_Timing_info_read.append("TANGO Database Timing info on host " + util.get_host_name())
         attr_Timing_info_read.append(" ")
@@ -221,9 +221,9 @@ class DataBase(Device):
         """ Get list of device domain name matching the specified
 
         :param argin: The wildcard
-        :type: PyTango.DevString
+        :type: tango.DevString
         :return: Device name domain list
-        :rtype: PyTango.DevVarStringArray """
+        :rtype: tango.DevVarStringArray """
         self._log.debug("In DbGetDeviceDomainList()")
         return self.db.get_device_domain_list(replace_wildcard(argin))
 
@@ -234,9 +234,9 @@ class DataBase(Device):
         process as non exported
 
         :param argin: Device server name (executable/instance)
-        :type: PyTango.DevString
+        :type: tango.DevString
         :return:
-        :rtype: PyTango.DevVoid """
+        :rtype: tango.DevVoid """
         self._log.debug("In DbUnExportServer()")
         self.db.unexport_server(argin)
 
@@ -246,9 +246,9 @@ class DataBase(Device):
 
         :param argin: str[0] = device name
         Str[1]...str[n] = attribute name(s)
-        :type: PyTango.DevVarStringArray
+        :type: tango.DevVarStringArray
         :return:
-        :rtype: PyTango.DevVoid """
+        :rtype: tango.DevVoid """
         self._log.debug("In DbDeleteAllDeviceAttributeProperty()")
 
         if len(argin) < 2:
@@ -273,9 +273,9 @@ class DataBase(Device):
         """ Delete an attribute alias.
 
         :param argin: Attriibute alias name.
-        :type: PyTango.DevString
+        :type: tango.DevString
         :return:
-        :rtype: PyTango.DevVoid """
+        :rtype: tango.DevVoid """
         self._log.debug("In DbDeleteAttributeAlias()")
         self.db.delete_attribute_alias(argin)
 
@@ -286,14 +286,14 @@ class DataBase(Device):
         :param argin: Str[0] = Tango class
         Str[1] = Attribute name
         Str[2] = Property name
-        :type: PyTango.DevVarStringArray
+        :type: tango.DevVarStringArray
         :return: Str[0] = Attribute name
         Str[1] = Property name
         Str[2] = date
         Str[3] = Property value number (array case)
         Str[4] = Property value 1
         Str[n] = Property value n
-        :rtype: PyTango.DevVarStringArray """
+        :rtype: tango.DevVarStringArray """
         self._log.debug("In DbGetClassAttributePropertyHist()")
         class_name = argin[0]
         attribute = replace_wildcard(argin[1])
@@ -316,9 +316,9 @@ class DataBase(Device):
         Str[5] = Property value 1
         Str[n] = Property value n (array case)
         .....
-        :type: PyTango.DevVarStringArray
+        :type: tango.DevVarStringArray
         :return:
-        :rtype: PyTango.DevVoid """
+        :rtype: tango.DevVoid """
         self._log.debug("In DbPutDeviceAttributeProperty2()")
         device_name = argin[0]
         nb_attributes = int(argin[1])
@@ -329,9 +329,9 @@ class DataBase(Device):
         """ Get attribute alias list for a specified filter
 
         :param argin: attribute alias filter string (eg: att*)
-        :type: PyTango.DevString
+        :type: tango.DevString
         :return: attribute aliases
-        :rtype: PyTango.DevVarStringArray """
+        :rtype: tango.DevVarStringArray """
         self._log.debug("In DbGetAttributeAliasList()")
         if not argin:
             argin = "%"
@@ -344,9 +344,9 @@ class DataBase(Device):
         """ Query the database for device exported for the specified class.
 
         :param argin: Class name
-        :type: PyTango.DevString
+        :type: tango.DevString
         :return: Device exported list
-        :rtype: PyTango.DevVarStringArray """
+        :rtype: tango.DevVarStringArray """
         self._log.debug("In DbGetExportdDeviceListForClass()")
         argin = replace_wildcard(argin)
         return self.db.get_exported_device_list_for_class(argin)
@@ -357,9 +357,9 @@ class DataBase(Device):
 
         :param argin: Str[0] = attribute name
         Str[1] = attribute alias
-        :type: PyTango.DevVarStringArray
+        :type: tango.DevVarStringArray
         :return:
-        :rtype: PyTango.DevVoid """
+        :rtype: tango.DevVoid """
         self._log.debug("In DbPutAttributeAlias()")
 
         if len(argin) < 2:
@@ -379,9 +379,9 @@ class DataBase(Device):
         with name matching the specified filter
 
         :param argin: The filter
-        :type: PyTango.DevString
+        :type: tango.DevString
         :return: Device server process name list
-        :rtype: PyTango.DevVarStringArray """
+        :rtype: tango.DevVarStringArray """
         self._log.debug("In DbGetServerList()")
         argin = replace_wildcard(argin)
         return self.db.get_server_list(argin)
@@ -396,9 +396,9 @@ class DataBase(Device):
         Str[2] = Device server process host name
         Str[3] = Device server process PID or string ``null``
         Str[4] = Device server process version
-        :type: PyTango.DevVarStringArray
+        :type: tango.DevVarStringArray
         :return:
-        :rtype: PyTango.DevVoid """
+        :rtype: tango.DevVoid """
         DbExportDevice(self, argin)
 
     @command(dtype_in=('str',), doc_in='Str[0] = Device name\nStr[1] = Attribute name\nStr[2] = Property name\nStr[n] = Property name', doc_out='none')
@@ -409,9 +409,9 @@ class DataBase(Device):
         Str[1] = Attribute name
         Str[2] = Property name
         Str[n] = Property name
-        :type: PyTango.DevVarStringArray
+        :type: tango.DevVarStringArray
         :return:
-        :rtype: PyTango.DevVoid """
+        :rtype: tango.DevVoid """
         self._log.debug("In DbDeleteDeviceAttributeProperty()")
 
         if len(argin) < 3:
@@ -439,9 +439,9 @@ class DataBase(Device):
         specified wildcard
 
         :param argin: The wildcard
-        :type: PyTango.DevString
+        :type: tango.DevString
         :return: Family list
-        :rtype: PyTango.DevVarStringArray """
+        :rtype: tango.DevVarStringArray """
         self._log.debug("In DbGetDeviceFamilyList()")
         argin = replace_wildcard(argin)
         return self.db.get_device_family_list(argin)
@@ -451,9 +451,9 @@ class DataBase(Device):
         """ Get a list of devices whose names satisfy the filter.
 
         :param argin: filter
-        :type: PyTango.DevString
+        :type: tango.DevString
         :return: list of exported devices
-        :rtype: PyTango.DevVarStringArray """
+        :rtype: tango.DevVarStringArray """
         self._log.debug("In DbGetDeviceWideList()")
         argin = replace_wildcard(argin)
         return self.db.get_device_wide_list(argin)
@@ -469,9 +469,9 @@ class DataBase(Device):
         Str[4] = Property value 1
         Str[n] = Property value n
         ....
-        :type: PyTango.DevVarStringArray
+        :type: tango.DevVarStringArray
         :return:
-        :rtype: PyTango.DevVoid """
+        :rtype: tango.DevVoid """
         self._log.debug("In DbPutProperty()")
         object_name = argin[0]
         nb_properties = int(argin[1])
@@ -484,9 +484,9 @@ class DataBase(Device):
         :param argin: Str[0]  = Object name
         Str[1] = Property name
         Str[n] = Property name
-        :type: PyTango.DevVarStringArray
+        :type: tango.DevVarStringArray
         :return:
-        :rtype: PyTango.DevVoid """
+        :rtype: tango.DevVoid """
         self._log.debug("In DbDeleteProperty()")
         obj_name = argin[0]
         for prop_name in argin[1:]:
@@ -501,7 +501,7 @@ class DataBase(Device):
         :param argin: Str[0] = Tango class name
         Str[1] = Attribute name
         Str[n] = Attribute name
-        :type: PyTango.DevVarStringArray
+        :type: tango.DevVarStringArray
         :return: Str[0] = Tango class name
         Str[1] = Attribute property  number
         Str[2] = Attribute property 1 name
@@ -512,7 +512,7 @@ class DataBase(Device):
         Str[n + 2] = Attribute property 2 value number (array case)
         Str[n + 3] = Attribute property 2 value
         Str[n + m] = Attribute property 2 value (array case)
-        :rtype: PyTango.DevVarStringArray """
+        :rtype: tango.DevVarStringArray """
         self._log.debug("In DbGetClassAttributeProperty2()")
         class_name = argin[0]
         return self.db.get_class_attribute_property2(class_name, argin[1:])
@@ -523,9 +523,9 @@ class DataBase(Device):
         """ Get a list of exported devices whose names satisfy the filter (wildcard is
 
         :param argin: filter
-        :type: PyTango.DevString
+        :type: tango.DevString
         :return: list of exported devices
-        :rtype: PyTango.DevVarStringArray """
+        :rtype: tango.DevVarStringArray """
         self._log.debug("In DbGetDeviceExportedList()")
         argin = replace_wildcard(argin)
         return self.db.get_device_exported_list(argin)
@@ -535,9 +535,9 @@ class DataBase(Device):
         """ Return alias for device name if found.
 
         :param argin: The device name
-        :type: PyTango.DevString
+        :type: tango.DevString
         :return: The alias found
-        :rtype: PyTango.DevString """
+        :rtype: tango.DevString """
         self._log.debug("In DbGetDeviceAlias()")
         ret, dev_name, dfm = check_device_name(argin)
         if not ret:
@@ -558,9 +558,9 @@ class DataBase(Device):
         Str[4] = Property name
         Str[5] = Property value
         .....
-        :type: PyTango.DevVarStringArray
+        :type: tango.DevVarStringArray
         :return:
-        :rtype: PyTango.DevVoid """
+        :rtype: tango.DevVoid """
         self._log.debug("In DbPutClassAttributeProperty()")
         class_name = argin[0]
         nb_attributes = int(argin[1])
@@ -572,9 +572,9 @@ class DataBase(Device):
         """ Get property list for a given Tango class with a specified filter
 
         :param argin: The filter
-        :type: PyTango.DevString
+        :type: tango.DevString
         :return: Property name list
-        :rtype: PyTango.DevVarStringArray """
+        :rtype: tango.DevVarStringArray """
         self._log.debug("In DbGetClassPropertyList()")
         if not argin:
             argin = "%"
@@ -587,9 +587,9 @@ class DataBase(Device):
         """ Get device alias name with a specific filter
 
         :param argin: The filter
-        :type: PyTango.DevString
+        :type: tango.DevString
         :return: Device alias list
-        :rtype: PyTango.DevVarStringArray """
+        :rtype: tango.DevVarStringArray """
         self._log.debug("In DbGetDeviceAliasList()")
         if not argin:
             argin = "%"
@@ -604,9 +604,9 @@ class DataBase(Device):
 
         :param argin: Str[0] = Tango class name
         Str[1] = Attribute name
-        :type: PyTango.DevVarStringArray
+        :type: tango.DevVarStringArray
         :return:
-        :rtype: PyTango.DevVoid """
+        :rtype: tango.DevVoid """
         self._log.debug("In DbDeleteClassAttribute()")
 
         if len(argin) < 2:
@@ -625,13 +625,13 @@ class DataBase(Device):
 
         :param argin: Str[0] = Tango class
         Str[1] = Property name
-        :type: PyTango.DevVarStringArray
+        :type: tango.DevVarStringArray
         :return: Str[0] = Property name
         Str[1] = date
         Str[2] = Property value number (array case)
         Str[3] = Property value 1
         Str[n] = Property value n
-        :rtype: PyTango.DevVarStringArray """
+        :rtype: tango.DevVarStringArray """
         self._log.debug("In DbGetClassPropertyHist()")
         class_name = argin[0]
         prop_name = argin[1]
@@ -643,9 +643,9 @@ class DataBase(Device):
 
         :param argin: Str[0] = Device name
         Str[1] = Attribute name
-        :type: PyTango.DevVarStringArray
+        :type: tango.DevVarStringArray
         :return:
-        :rtype: PyTango.DevVoid """
+        :rtype: tango.DevVoid """
         self._log.debug("In DbDeleteDeviceAttribute()")
 
         if len(argin) < 2:
@@ -672,12 +672,12 @@ class DataBase(Device):
         It executes the specified  SELECT command on TANGO database and returns its result without filter.
 
         :param argin: MySql Select command
-        :type: PyTango.DevString
+        :type: tango.DevString
         :return: MySql Select command result
          - svalues : select results
          - 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 """
+        :rtype: tango.DevVarLongStringArray """
         self._log.debug("In DbMySqlSelect()")
         tmp_argin = argin.lower()
 
@@ -708,9 +708,9 @@ class DataBase(Device):
         Str[4] = Property name
         Str[5] = Property value
         .....
-        :type: PyTango.DevVarStringArray
+        :type: tango.DevVarStringArray
         :return:
-        :rtype: PyTango.DevVoid """
+        :rtype: tango.DevVoid """
         self._log.debug("In DbPutDeviceAttributeProperty()")
         device_name = argin[0]
         nb_attributes = int(argin[1])
@@ -724,14 +724,14 @@ class DataBase(Device):
         :param argin: Str[0] = Device name
         Str[1] = Attribute name
         Str[n] = Attribute name
-        :type: PyTango.DevVarStringArray
+        :type: tango.DevVarStringArray
         :return: Str[0] = Device name
         Str[1] = Attribute property  number
         Str[2] = Attribute property 1 name
         Str[3] = Attribute property 1 value
         Str[n + 1] = Attribute property 2 name
         Str[n + 2] = Attribute property 2 value
-        :rtype: PyTango.DevVarStringArray """
+        :rtype: tango.DevVarStringArray """
         self._log.debug("In DbGetDeviceAttributeProperty()")
         dev_name = argin[0]
         return self.db.get_device_attribute_property(dev_name, argin[1:])
@@ -744,9 +744,9 @@ class DataBase(Device):
 
         :param argin: Str[0] = Object name
         Str[1] = filter
-        :type: PyTango.DevVarStringArray
+        :type: tango.DevVarStringArray
         :return: Property name list
-        :rtype: PyTango.DevVarStringArray """
+        :rtype: tango.DevVarStringArray """
         self._log.debug("In DbGetPropertyList()")
         object_name = argin[0]
         wildcard = replace_wildcard(argin[1])
@@ -758,12 +758,12 @@ class DataBase(Device):
         """ Get Tango classes/device list embedded in a specific device server
 
         :param argin: Device server process name
-        :type: PyTango.DevString
+        :type: tango.DevString
         :return: Str[0] = Device name
         Str[1] = Tango class
         Str[n] = Device name
         Str[n + 1] = Tango class
-        :rtype: PyTango.DevVarStringArray """
+        :rtype: tango.DevVarStringArray """
         self._log.debug("In DbGetDeviceClassList()")
         return self.db.get_device_class_list(argin)
 
@@ -772,9 +772,9 @@ class DataBase(Device):
         """ Mark a device as non exported in database
 
         :param argin: Device name
-        :type: PyTango.DevString
+        :type: tango.DevString
         :return:
-        :rtype: PyTango.DevVoid """
+        :rtype: tango.DevVoid """
         self._log.debug("In DbUnExportDevice()")
         dev_name = argin[0].lower()
         self.db.unexport_device(dev_name)
@@ -784,9 +784,9 @@ class DataBase(Device):
         """ Get device name from its alias.
 
         :param argin: Alias name
-        :type: PyTango.DevString
+        :type: tango.DevString
         :return: Device name
-        :rtype: PyTango.DevString """
+        :rtype: tango.DevString """
         self._log.debug("In DbGetAliasDevice()")
         if not argin:
             argin = "%"
@@ -799,9 +799,9 @@ class DataBase(Device):
         """ Delete a devcie from database
 
         :param argin: device name
-        :type: PyTango.DevString
+        :type: tango.DevString
         :return:
-        :rtype: PyTango.DevVoid """
+        :rtype: tango.DevVoid """
         self._log.debug("In DbDeleteDevice()")
 
         ret, dev_name, dfm = check_device_name(argin)
@@ -819,9 +819,9 @@ class DataBase(Device):
 
         :param argin: Str[0] = Device name
         Str[1] = Wildcard
-        :type: PyTango.DevVarStringArray
+        :type: tango.DevVarStringArray
         :return: attribute name list
-        :rtype: PyTango.DevVarStringArray """
+        :rtype: tango.DevVarStringArray """
         self._log.debug("In DbGetDeviceAttributeList()")
         dev_name = argin[0]
         wildcard = argin[1]
@@ -836,9 +836,9 @@ class DataBase(Device):
         """ Get info about all servers running on specified host, name, mode and level
 
         :param argin: Host name
-        :type: PyTango.DevString
+        :type: tango.DevString
         :return: Server info for all servers running on specified host
-        :rtype: PyTango.DevVarStringArray """
+        :rtype: tango.DevVarStringArray """
         self._log.debug("In DbGetHostServersInfo()")
         argin = replace_wildcard(argin)
         return self.db.get_host_servers_info(argin)
@@ -849,9 +849,9 @@ class DataBase(Device):
 
         :param argin: str[0] = old device server name (exec/instance)
         str[1] =  new device server name (exec/instance)
-        :type: PyTango.DevVarStringArray
+        :type: tango.DevVarStringArray
         :return:
-        :rtype: PyTango.DevVoid """
+        :rtype: tango.DevVoid """
         self._log.debug("In DbRenameServer()")
 
         if len(argin) < 2:
@@ -877,9 +877,9 @@ class DataBase(Device):
         """ Get host list with name matching the specified filter
 
         :param argin: The filter
-        :type: PyTango.DevString
+        :type: tango.DevString
         :return: Host name list
-        :rtype: PyTango.DevVarStringArray """
+        :rtype: tango.DevVarStringArray """
         self._log.debug("In DbGetHostList()")
         argin = replace_wildcard(argin)
         return self.db.get_host_list(argin)
@@ -889,12 +889,12 @@ class DataBase(Device):
         """ Get class inheritance for the specified device.
 
         :param argin: Device name
-        :type: PyTango.DevString
+        :type: tango.DevString
         :return: Classes off the specified device.
         [0] - is the class of the device.
         [1] - is the class from the device class is inherited.
         ........and so on
-        :rtype: PyTango.DevVarStringArray """
+        :rtype: tango.DevVarStringArray """
         self._log.debug("In DbGetClassInheritanceForDevice()")
         return self.db.get_class_inheritance_for_device(argin)
 
@@ -904,9 +904,9 @@ class DataBase(Device):
         """ Delete server from the database but dont delete device properties
 
         :param argin: Device server name
-        :type: PyTango.DevString
+        :type: tango.DevString
         :return:
-        :rtype: PyTango.DevVoid """
+        :rtype: tango.DevVoid """
         self._log.debug("In DbDeleteServer()")
 
         if '*' in argin or '%' in argin or not '/' in argin:
@@ -923,9 +923,9 @@ class DataBase(Device):
         If alias not found in database, returns an empty string.
 
         :param argin: The attribute alias name
-        :type: PyTango.DevString
+        :type: tango.DevString
         :return: The attribute name (device/attribute)
-        :rtype: PyTango.DevString """
+        :rtype: tango.DevString """
         self._log.debug("In DbGetAttributeAlias()")
         return self.db.get_attribute_alias(argin)
 
@@ -936,9 +936,9 @@ class DataBase(Device):
         device server startup sequence.
 
         :param argin: Elt[0] = DS name (exec_name/inst_name), Elt[1] = Host name
-        :type: PyTango.DevVarStringArray
+        :type: tango.DevVarStringArray
         :return: All the data needed by the device server during its startup sequence. Precise list depend on the device server
-        :rtype: PyTango.DevVarStringArray """
+        :rtype: tango.DevVarStringArray """
         self._log.debug("In DbGetDataForServerCache()")
         ##  TODO
         return ['']
@@ -950,7 +950,7 @@ class DataBase(Device):
         :param argin: Str[0] = Object name
         Str[1] = Property name
         Str[n] = Property name
-        :type: PyTango.DevVarStringArray
+        :type: tango.DevVarStringArray
         :return: Str[0] = Object name
         Str[1] = Property number
         Str[2] = Property name
@@ -961,7 +961,7 @@ class DataBase(Device):
         Str[n + 2] = Property value number (array case)
         Str[n + 3] = Property value 1
         Str[n + m] = Property value m
-        :rtype: PyTango.DevVarStringArray """
+        :rtype: tango.DevVarStringArray """
         self._log.debug("In DbGetProperty()")
         object_name = argin[0]
         return self.db.get_property(object_name, argin[1:])
@@ -971,9 +971,9 @@ class DataBase(Device):
         """ Get list of Tango classes for a device server
 
         :param argin: device server process name
-        :type: PyTango.DevString
+        :type: tango.DevString
         :return: list of classes for this device server
-        :rtype: PyTango.DevVarStringArray """
+        :rtype: tango.DevVarStringArray """
         self._log.debug("In DbGetDeviceServerClassList()")
         argin = replace_wildcard(argin)
         return self.db.get_server_class_list(argin)
@@ -990,9 +990,9 @@ class DataBase(Device):
         Str[4] = Property value 1
         Str[n] = Property value n
         ....
-        :type: PyTango.DevVarStringArray
+        :type: tango.DevVarStringArray
         :return:
-        :rtype: PyTango.DevVoid """
+        :rtype: tango.DevVoid """
         self._log.debug("In DbPutDeviceProperty()")
         device_name = argin[0]
         nb_properties = int(argin[1])
@@ -1003,9 +1003,9 @@ class DataBase(Device):
         """ Reset the timing attribute values.
 
         :param :
-        :type: PyTango.DevVoid
+        :type: tango.DevVoid
         :return:
-        :rtype: PyTango.DevVoid """
+        :rtype: tango.DevVoid """
         self._log.debug("In ResetTimingValues()")
         for tmp_timing in self.timing_maps.itervalues():
             tmp_timing.average = 0.
@@ -1019,9 +1019,9 @@ class DataBase(Device):
         """ Get a list of host:port for all database server defined in the control system
 
         :param :
-        :type: PyTango.DevVoid
+        :type: tango.DevVoid
         :return: List of host:port with one element for each database server
-        :rtype: PyTango.DevVarStringArray """
+        :rtype: tango.DevVarStringArray """
         self._log.debug("In DbGetCSDbServerList()")
         return self.db.get_csdb_server_list()
 
@@ -1037,9 +1037,9 @@ class DataBase(Device):
         Str[4] = Property value 1
         Str[n] = Property value n
         ....
-        :type: PyTango.DevVarStringArray
+        :type: tango.DevVarStringArray
         :return:
-        :rtype: PyTango.DevVoid """
+        :rtype: tango.DevVoid """
         self._log.debug("In DbPutClassProperty()")
         class_name = argin[0]
         nb_properties = int(argin[1])
@@ -1051,7 +1051,7 @@ class DataBase(Device):
         """ Import a device from the database
 
         :param argin: Device name (or alias)
-        :type: PyTango.DevString
+        :type: tango.DevString
         :return: Str[0] = device name
         Str[1] = CORBA IOR
         Str[2] = device version
@@ -1061,7 +1061,7 @@ class DataBase(Device):
 
         Lg[0] = Exported flag
         Lg[1] = Device server process PID
-        :rtype: PyTango.DevVarLongStringArray """
+        :rtype: tango.DevVarLongStringArray """
         self._log.debug("In DbImportDevice()")
         return self.db.import_device(argin.lower())
 
@@ -1073,9 +1073,9 @@ class DataBase(Device):
         :param argin: Str[0] = Device name
         Str[1] = Property name
         Str[n] = Property name
-        :type: PyTango.DevVarStringArray
+        :type: tango.DevVarStringArray
         :return:
-        :rtype: PyTango.DevVoid """
+        :rtype: tango.DevVoid """
         self._log.debug("In DbDeleteDeviceProperty()")
         dev_name = argin[0]
         for prop_name in argin[1:]:
@@ -1086,9 +1086,9 @@ class DataBase(Device):
         """ Get Tango class for the specified device.
 
         :param argin: Device name
-        :type: PyTango.DevString
+        :type: tango.DevString
         :return: Device Tango class
-        :rtype: PyTango.DevString """
+        :rtype: tango.DevString """
         self._log.debug("In DbGetClassForDevice()")
         return self.db.get_class_for_device(argin)
 
@@ -1099,14 +1099,14 @@ class DataBase(Device):
         :param argin: Str[0] = Device name
         Str[1] = Attribute name
         Str[2] = Property name
-        :type: PyTango.DevVarStringArray
+        :type: tango.DevVarStringArray
         :return: Str[0] = Attribute name
         Str[1] = Property name
         Str[2] = date
         Str[3] = Property value number (array case)
         Str[4] = Property value 1
         Str[n] = Property value n
-        :rtype: PyTango.DevVarStringArray """
+        :rtype: tango.DevVarStringArray """
         self._log.debug("In DbGetDeviceAttributePropertyHist()")
         dev_name = argin[0]
         attribute = replace_wildcard(argin[1])
@@ -1118,9 +1118,9 @@ class DataBase(Device):
         """ Get info about host, mode and level for specified server
 
         :param argin: server name
-        :type: PyTango.DevString
+        :type: tango.DevString
         :return: server info
-        :rtype: PyTango.DevVarStringArray """
+        :rtype: tango.DevVarStringArray """
         self._log.debug("In DbGetServerInfo()")
         return self.db.get_server_info(argin)
 
@@ -1130,9 +1130,9 @@ class DataBase(Device):
 
         :param argin: Str[0] = device name
         Str[1] = alias name
-        :type: PyTango.DevVarStringArray
+        :type: tango.DevVarStringArray
         :return:
-        :rtype: PyTango.DevVoid """
+        :rtype: tango.DevVoid """
         self._log.debug("In DbPutDeviceAlias()")
 
         if len(argin) < 2:
@@ -1153,9 +1153,9 @@ class DataBase(Device):
 
         :param argin: Str[0] = device name
         Str[1] = Filter
-        :type: PyTango.DevVarStringArray
+        :type: tango.DevVarStringArray
         :return: Property name list
-        :rtype: PyTango.DevVarStringArray """
+        :rtype: tango.DevVarStringArray """
         self._log.debug("In DbGetDevicePropertyList()")
         device_name = argin[0]
         prop_filter = argin[1]
@@ -1169,9 +1169,9 @@ class DataBase(Device):
         the specified filter
 
         :param argin: The filter
-        :type: PyTango.DevString
+        :type: tango.DevString
         :return: Device server process name list
-        :rtype: PyTango.DevVarStringArray """
+        :rtype: tango.DevVarStringArray """
         self._log.debug("In DbGetHostServerList()")
         argin = replace_wildcard(argin)
         return self.db.get_host_server_list(argin)
@@ -1183,7 +1183,7 @@ class DataBase(Device):
         :param argin: Str[0] = Tango class
         Str[1] = Property name
         Str[2] = Property name
-        :type: PyTango.DevVarStringArray
+        :type: tango.DevVarStringArray
         :return: Str[0] = Tango class
         Str[1] = Property number
         Str[2] = Property name
@@ -1191,7 +1191,7 @@ class DataBase(Device):
         Str[4] = Property value
         Str[n] = Propery value (array case)
         ....
-        :rtype: PyTango.DevVarStringArray """
+        :rtype: tango.DevVarStringArray """
         self._log.debug("In DbGetClassProperty()")
         class_name = argin[0]
         return self.db.get_class_property(class_name,argin[1:])
@@ -1202,9 +1202,9 @@ class DataBase(Device):
         matching the specified filter
 
         :param argin: The filter
-        :type: PyTango.DevString
+        :type: tango.DevString
         :return: Object name list
-        :rtype: PyTango.DevVarStringArray """
+        :rtype: tango.DevVarStringArray """
         self._log.debug("In DbGetObjectList()")
         argin = replace_wildcard(argin)
         return self.db.get_object_list(argin)
@@ -1217,9 +1217,9 @@ class DataBase(Device):
         Str[1] = Attribute name
         Str[2] = Property name
         Str[n] = Property name
-        :type: PyTango.DevVarStringArray
+        :type: tango.DevVarStringArray
         :return:
-        :rtype: PyTango.DevVoid """
+        :rtype: tango.DevVoid """
         self._log.debug("In DbDeleteClassAttributeProperty()")
 
         if len(argin) < 3:
@@ -1238,9 +1238,9 @@ class DataBase(Device):
         """ Returns the instance names found for specified server.
 
         :param argin: Server name
-        :type: PyTango.DevString
+        :type: tango.DevString
         :return: The instance names found for specified server.
-        :rtype: PyTango.DevVarStringArray """
+        :rtype: tango.DevVarStringArray """
         self._log.debug("In DbGetInstanceNameList()")
         return self.db.get_instance_name_list(argin)
 
@@ -1250,9 +1250,9 @@ class DataBase(Device):
         Returns one empty string if nothing found in database
 
         :param argin: The attribute name (dev_name/att_name)
-        :type: PyTango.DevString
+        :type: tango.DevString
         :return: The attribute alias name (or empty string)
-        :rtype: PyTango.DevString """
+        :rtype: tango.DevString """
         self._log.debug("In DbGetAttributeAlias2()")
         attr_name = argin[0]
         return self.db.get_attribute_alias2(attr_name)
@@ -1266,9 +1266,9 @@ class DataBase(Device):
         Str[2] = Tango class name
         Str[n] = Device name
         Str[n + 1] = Tango class name
-        :type: PyTango.DevVarStringArray
+        :type: tango.DevVarStringArray
         :return:
-        :rtype: PyTango.DevVoid """
+        :rtype: tango.DevVoid """
         self._log.debug("In DbAddServer()")
 
         if len(argin) < 3 or not len(argin) % 2:
@@ -1293,9 +1293,9 @@ class DataBase(Device):
         """ Get event channel info from database
 
         :param argin: name of event channel or factory
-        :type: PyTango.DevString
+        :type: tango.DevString
         :return: export information e.g. IOR
-        :rtype: PyTango.DevVarLongStringArray """
+        :rtype: tango.DevVarLongStringArray """
         self._log.debug("In DbImportEvent()")
         argin = replace_wildcard(argin.lower())
         return self.db.import_event(argin)
@@ -1306,13 +1306,13 @@ class DataBase(Device):
 
         :param argin: Str[0] = Device name
         Str[1] = Property name
-        :type: PyTango.DevVarStringArray
+        :type: tango.DevVarStringArray
         :return: Str[0] = Property name
         Str[1] = date
         Str[2] = Property value number (array case)
         Str[3] = Property value 1
         Str[n] = Property value n
-        :rtype: PyTango.DevVarStringArray """
+        :rtype: tango.DevVarStringArray """
         self._log.debug("In DbGetDevicePropertyHist()")
         device_name = argin[0]
         prop_name = argin[1]
@@ -1324,9 +1324,9 @@ class DataBase(Device):
         It returns only the server executable name without instance name as DbGetServerList.
 
         :param argin: wildcard for server names.
-        :type: PyTango.DevString
+        :type: tango.DevString
         :return: server names found.
-        :rtype: PyTango.DevVarStringArray """
+        :rtype: tango.DevVarStringArray """
         self._log.debug("In DbGetServerNameList()")
         argin = replace_wildcard(argin)
         return self.db.get_server_name_list(argin)
@@ -1342,7 +1342,7 @@ class DataBase(Device):
         :param argin: Str[0] = Device name
         Str[1] = Attribute name
         Str[n] = Attribute name
-        :type: PyTango.DevVarStringArray
+        :type: tango.DevVarStringArray
         :return: Str[0] = Device name
         Str[1] = Attribute property  number
         Str[2] = Attribute property 1 name
@@ -1353,7 +1353,7 @@ class DataBase(Device):
         Str[n + 2] = Attribute property 2 value number (array case)
         Str[n + 3] = Attribute property 2 value
         Str[n + m] = Attribute property 2 value (array case)
-        :rtype: PyTango.DevVarStringArray """
+        :rtype: tango.DevVarStringArray """
         self._log.debug("In DbGetDeviceAttributeProperty2()")
         dev_name = argin[0]
         return self.db.get_device_attribute_property2(dev_name, argin[1:])
@@ -1365,9 +1365,9 @@ class DataBase(Device):
         :param argin: Str[0] = Tango class name
         Str[1] = Property name
         Str[n] = Property name
-        :type: PyTango.DevVarStringArray
+        :type: tango.DevVarStringArray
         :return:
-        :rtype: PyTango.DevVoid """
+        :rtype: tango.DevVoid """
         self._log.debug("In DbDeleteClassProperty()")
         klass_name = argin[0]
         for prop_name in argin[1:]:
@@ -1378,9 +1378,9 @@ class DataBase(Device):
         """ Mark one event channel as non exported in database
 
         :param argin: name of event channel or factory to unexport
-        :type: PyTango.DevString
+        :type: tango.DevString
         :return: none
-        :rtype: PyTango.DevVoid """
+        :rtype: tango.DevVoid """
         self._log.debug("In DbUnExportEvent()")
         event_name = argin[0].lower()
         self.db.unexport_event(event_name)
@@ -1392,7 +1392,7 @@ class DataBase(Device):
         stored in database
 
         :param :
-        :type: PyTango.DevVoid
+        :type: tango.DevVoid
         :return: Miscellaneous info like:
         - Device defined in database
         - Device marked as exported in database
@@ -1403,7 +1403,7 @@ class DataBase(Device):
         - Device attribute properties defined in database
         - Class attribute properties defined in database
         - Object properties defined in database
-        :rtype: PyTango.DevVarStringArray """
+        :rtype: tango.DevVarStringArray """
         self._log.debug("In DbInfo()")
         return self.db.info()
 
@@ -1414,14 +1414,14 @@ class DataBase(Device):
         :param argin: Str[0] = Tango class name
         Str[1] = Attribute name
         Str[n] = Attribute name
-        :type: PyTango.DevVarStringArray
+        :type: tango.DevVarStringArray
         :return: Str[0] = Tango class name
         Str[1] = Attribute property  number
         Str[2] = Attribute property 1 name
         Str[3] = Attribute property 1 value
         Str[n + 1] = Attribute property 2 name
         Str[n + 2] = Attribute property 2 value
-        :rtype: PyTango.DevVarStringArray """
+        :rtype: tango.DevVarStringArray """
         self._log.debug("In DbGetClassAttributeProperty()")
         class_name = argin[0]
         return self.db.get_class_attribute_property(class_name, argin[1:])
@@ -1440,9 +1440,9 @@ class DataBase(Device):
         Str[5] = Property value 1
         Str[n] = Property value n (array case)
         .....
-        :type: PyTango.DevVarStringArray
+        :type: tango.DevVarStringArray
         :return:
-        :rtype: PyTango.DevVoid """
+        :rtype: tango.DevVoid """
         self._log.debug("In DbPutClassAttributeProperty2()")
         class_name = argin[0]
         nb_attributes = int(argin[1])
@@ -1453,9 +1453,9 @@ class DataBase(Device):
         """ Update server info including host, mode and level
 
         :param argin: server info
-        :type: PyTango.DevVarStringArray
+        :type: tango.DevVarStringArray
         :return:
-        :rtype: PyTango.DevVoid """
+        :rtype: tango.DevVoid """
         self._log.debug("In DbPutServerInfo()")
 
         if len(argin) < 4:
@@ -1480,9 +1480,9 @@ class DataBase(Device):
         """ Delete a device alias.
 
         :param argin: device alias name
-        :type: PyTango.DevString
+        :type: tango.DevString
         :return:
-        :rtype: PyTango.DevVoid """
+        :rtype: tango.DevVoid """
         self._log.debug("In DbDeleteDeviceAlias()")
         self.db.delete_device_alias(argin)
 
@@ -1496,9 +1496,9 @@ class DataBase(Device):
         Str[2] = Notifd host name
         Str[3] = Notifd pid
         Str[4] = Notifd version
-        :type: PyTango.DevVarStringArray
+        :type: tango.DevVarStringArray
         :return:
-        :rtype: PyTango.DevVoid """
+        :rtype: tango.DevVoid """
         self._log.debug("In DbExportEvent()")
 
         if len(argin) < 5:
@@ -1519,7 +1519,7 @@ class DataBase(Device):
         :param argin: Str[0] = Device name
         Str[1] = Property name
         Str[n] = Property name
-        :type: PyTango.DevVarStringArray
+        :type: tango.DevVarStringArray
         :return: Str[0] = Device name
         Str[1] = Property number
         Str[2] = Property name
@@ -1530,7 +1530,7 @@ class DataBase(Device):
         Str[n + 2] = Property value number (array case)
         Str[n + 3] = Property value 1
         Str[n + m] = Property value m
-        :rtype: PyTango.DevVarStringArray """
+        :rtype: tango.DevVarStringArray """
         self._log.debug("In DbGetDeviceProperty()")
         device_name = argin[0]
         return self.db.get_device_property(device_name, argin[1:])
@@ -1540,7 +1540,7 @@ class DataBase(Device):
         """ Returns info from DbImportDevice and started/stopped dates.
 
         :param argin: Device name
-        :type: PyTango.DevString
+        :type: tango.DevString
         :return: Str[0] = Device name
         Str[1] = CORBA IOR
         Str[2] = Device version
@@ -1552,7 +1552,7 @@ class DataBase(Device):
 
         Lg[0] = Device exported flag
         Lg[1] = Device Server process PID (or -1 if not set)
-        :rtype: PyTango.DevVarLongStringArray """
+        :rtype: tango.DevVarLongStringArray """
         self._log.debug("In DbGetDeviceInfo()")
         ret, dev_name, dfm = check_device_name(argin)
         if not ret:
@@ -1568,13 +1568,13 @@ class DataBase(Device):
 
         :param argin: Str[0] = Object name
         Str[2] = Property name
-        :type: PyTango.DevVarStringArray
+        :type: tango.DevVarStringArray
         :return: Str[0] = Property name
         Str[1] = date
         Str[2] = Property value number (array case)
         Str[3] = Property value 1
         Str[n] = Property value n
-        :rtype: PyTango.DevVarStringArray """
+        :rtype: tango.DevVarStringArray """
         self._log.debug("In DbGetPropertyHist()")
         object_name = argin[0]
         prop_name = argin[1]
@@ -1587,9 +1587,9 @@ class DataBase(Device):
         specified filter
 
         :param argin: The filter
-        :type: PyTango.DevString
+        :type: tango.DevString
         :return: Device names member list
-        :rtype: PyTango.DevVarStringArray """
+        :rtype: tango.DevVarStringArray """
         self._log.debug("In DbGetDeviceMemberList()")
         argin = replace_wildcard(argin)
         return self.db.get_device_member_list(argin)
@@ -1599,9 +1599,9 @@ class DataBase(Device):
         """ Get Tango class list with a specified filter
 
         :param argin: Filter
-        :type: PyTango.DevString
+        :type: tango.DevString
         :return: Class list
-        :rtype: PyTango.DevVarStringArray """
+        :rtype: tango.DevVarStringArray """
         self._log.debug("In DbGetClassList()")
         server = replace_wildcard(argin)
         return self.db.get_class_list(server)
@@ -1612,9 +1612,9 @@ class DataBase(Device):
         If the given alias is not found in database, returns an empty string
 
         :param argin: The attribute alias
-        :type: PyTango.DevString
+        :type: tango.DevString
         :return: The attribute name (dev_name/att_name)
-        :rtype: PyTango.DevString """
+        :rtype: tango.DevString """
         self._log.debug("In DbGetAliasAttribute()")
         alias_name = argin[0]
         return self.db.get_alias_attribute(alias_name)
@@ -1624,9 +1624,9 @@ class DataBase(Device):
         """ delete info related to a Tango devvice server process
 
         :param argin: Device server name
-        :type: PyTango.DevString
+        :type: tango.DevString
         :return:
-        :rtype: PyTango.DevVoid """
+        :rtype: tango.DevVoid """
         self._log.debug("In DbDeleteServerInfo()")
         self.db.delete_server_info(argin)
 
@@ -1636,10 +1636,10 @@ class DataBase(Device):
 
         :param argin: Str[0] = Tango class name
         Str[1] = Attribute name filter (eg: att*)
-        :type: PyTango.DevVarStringArray
+        :type: tango.DevVarStringArray
         :return: Str[0] = Class attribute name
         Str[n] = Class attribute name
-        :rtype: PyTango.DevVarStringArray """
+        :rtype: tango.DevVarStringArray """
         self._log.debug("In DbGetClassAttributeList()")
         class_name = argin[0]
         wildcard = replace_wildcard(argin[1])
@@ -1652,9 +1652,9 @@ class DataBase(Device):
         :param argin: Str[0] = Full device server process name
         Str[1] = Device name
         Str[2] = Tango class name
-        :type: PyTango.DevVarStringArray
+        :type: tango.DevVarStringArray
         :return:
-        :rtype: PyTango.DevVoid """
+        :rtype: tango.DevVoid """
         self._log.debug("In DbAddDevice()")
 
         if len(argin) < 3:
@@ -1684,9 +1684,9 @@ class DataBase(Device):
 
         :param argin: argin[0] : server name
         argin[1] : class name
-        :type: PyTango.DevVarStringArray
+        :type: tango.DevVarStringArray
         :return: The list of devices for specified server and class.
-        :rtype: PyTango.DevVarStringArray """
+        :rtype: tango.DevVarStringArray """
         self._log.debug("In DbGetDeviceList()")
         server_name = replace_wildcard(argin[0])
         class_name = replace_wildcard(argin[1])
@@ -1704,9 +1704,9 @@ def DbExportDevice(self, argin):
     Str[2] = Device server process host name
     Str[3] = Device server process PID or string ``null``
     Str[4] = Device server process version
-    :type: PyTango.DevVarStringArray
+    :type: tango.DevVarStringArray
     :return:
-    :rtype: PyTango.DevVoid """
+    :rtype: tango.DevVoid """
     self._log.debug("In DbExportDevice()")
     if len(argin) < 5:
         self.warn_stream("DataBase::DbExportDevice(): insufficient export info for device ")
@@ -1753,7 +1753,7 @@ def main(argv = None):
     port = options.port
     if port is None:
         try:
-            _, port = PyTango.ApiUtil.get_env_var("TANGO_HOST").split(":")
+            _, port = tango.ApiUtil.get_env_var("TANGO_HOST").split(":")
         except:
             port = 10000
 
@@ -1827,8 +1827,8 @@ def __run(db_name,argv):
 
         ./DataBaseds pydb-test -ORBendPoint giop:tcp::11000
     """
-    PyTango.Util.set_use_db(False)
-    util = PyTango.Util(argv)
+    tango.Util.set_use_db(False)
+    util = tango.Util(argv)
     __monkey_patch_util(util)
     __monkey_patch_database_class()
 
@@ -1837,7 +1837,7 @@ def __run(db_name,argv):
 
     def post_init_cb():
         logging.debug("post_init_cb()")
-        util = PyTango.Util.instance()
+        util = tango.Util.instance()
         dserver = util.get_dserver_device()
         dserver_name = dserver.get_name()
         dserver_ior = util.get_dserver_ior(dserver)
diff --git a/src/boost/python/databaseds/db_access/__init__.py b/tango/databaseds/db_access/__init__.py
similarity index 100%
rename from src/boost/python/databaseds/db_access/__init__.py
rename to tango/databaseds/db_access/__init__.py
diff --git a/src/boost/python/databaseds/db_access/beacon.py b/tango/databaseds/db_access/beacon.py
similarity index 94%
rename from src/boost/python/databaseds/db_access/beacon.py
rename to tango/databaseds/db_access/beacon.py
index 744e9f5..10ff23f 100644
--- a/src/boost/python/databaseds/db_access/beacon.py
+++ b/tango/databaseds/db_access/beacon.py
@@ -9,13 +9,13 @@ import Queue
 import re
 import weakref
 import datetime
-import PyTango
+import tango
 
-th_exc = PyTango.Except.throw_exception
+th_exc = tango.Except.throw_exception
 
 from ..db_errors import *
 
-from beacon import static,settings
+from bliss.config import static,settings
 import itertools
 
 if logging.getLogger().isEnabledFor(logging.INFO):
@@ -74,6 +74,7 @@ class beacon(object):
         #Tango indexing
         self._personal_2_node = weakref.WeakValueDictionary()
         self._tango_name_2_node = weakref.WeakValueDictionary()
+        self._class_name_2_node = weakref.WeakValueDictionary()
 
         for key,values in self._config.root.iteritems():
             indexing_flag = key == 'tango'
@@ -104,6 +105,10 @@ class beacon(object):
                 self._parse_list(v,indexing_flag)
 
     def _index_tango(self,v) :
+        klass = v.get('class')
+        if klass is not None:
+            self._class_name_2_node[klass] = v
+
         personal_name = v.get('personal_name')
         if personal_name is not None :
             server = v.get('server')
@@ -143,8 +148,7 @@ class beacon(object):
             
         server_node = self._personal_2_node.get(server_name)
         if server_node is None:
-            root = self._config.root
-            server_node = root.add_node('tango',filename = server_name.replace('/','-'))
+            server_node = static.Node(self._config,filename = 'tango/%s.yml' % server_name.replace('/','_'))
             server_node['server'],server_node['personal_name'] = server_name.split('/')
             self._personal_2_node[server_name] = server_node
 
@@ -184,13 +188,15 @@ class beacon(object):
         del class_attribute[prop_name]
 
     def _get_class_properties(self,klass_name,prop_name):
-        key_name = 'tango.class.properties.%s.%s' % (klass_name,prop_name)
-        return settings.QueueSetting(key_name)
+        #key_name = 'tango.class.properties.%s.%s' % (klass_name,prop_name)
+        #return settings.QueueSetting(key_name)
+        return self._class_name_2_node.get(klass_name,dict()).get('properties',dict()).get(prop_name,'')
 
     @_info
     def delete_class_property(self, klass_name, prop_name):
-        class_property = self._get_class_properties(klass_name,prop_name)
-        class_property.clear()
+        #class_property = self._get_class_properties(klass_name,prop_name)
+        #class_property.clear()
+        pass
 
     def _get_property_attr_device(self,dev_name) :
         key_name = 'tango.%s' % dev_name.lower().replace('/','.')
@@ -390,8 +396,14 @@ class beacon(object):
     def get_class_property(self, class_name, properties):
         result = [class_name,str(len(properties))]
         for prop_name in properties:
-            class_properties = list(self._get_class_properties(class_name,prop_name))
-            result.extend([prop_name,str(len(class_properties))] + class_properties)
+            properties_array = []
+            values = self._get_class_properties(class_name,prop_name)
+            if isinstance(values,list):
+                values = [str(x) for x in values]
+                properties_array.extend([prop_name,str(len(values))] + values)
+            else:
+                properties_array.extend([prop_name,'1',str(values)])
+            result.extend(properties_array)
         return result
         
     @_info
@@ -400,8 +412,10 @@ class beacon(object):
         
     @_info
     def get_class_property_list(self, class_name):
-        cache = settings.get_cache()
-        return cache.keys('tango.class.properties.%s*' % class_name)
+        properties = self._class_name_2_node.get(class_name).get("properties", dict())
+        return [k for k,v in properties.iteritems() if not isinstance(v,dict)]
+        #cache = settings.get_cache()
+        #return cache.keys('tango.class.properties.%s*' % class_name)
 
     @_info
     def get_device_alias(self, dev_name):
@@ -441,6 +455,7 @@ class beacon(object):
                               [str(x) for p in prop_attr.iteritems() for x in p])
         return result  
 
+    @_info
     def get_device_attribute_property2(self, dev_name, attributes):
         prop_attr_device_handler = self._get_property_attr_device(dev_name)
         result = [dev_name, str(len(attributes))]
@@ -451,7 +466,7 @@ class beacon(object):
                 result.extend((attr_name,'0'))
             else:
                 result.extend((attr_name,str(len(prop_attr))))
-                for name,values in prop_attr:
+                for name,values in prop_attr.iteritems():
                     if isinstance(values,list):
                         result.extend([name,len(values)] + [str(x) for x in values])
                     else:
@@ -518,16 +533,21 @@ class beacon(object):
 
     @_info
     def get_device_list(self,server_name, class_name ):
-        result = []
-        server_node = self._personal_2_node.get(server_name)
-        device_list = server_node.get('device')
-        m = re.compile(class_name.replace('*','.*'))
-        if isinstance(device_list,list) :
-            return [x.get('tango_name') for x in device_list if m.match(x.get('class',''))]
-        elif isinstance(device_list,dict) and m.match(device_list.get('class','')) :
-            return [device_list.get('tango_name')]
+        if server_name == '*':
+            server_nodes = self._personal_2_node.values()
         else:
+            server_nodes = filter(None,[self._personal_2_node.get(server_name)])
+        if not server_nodes:
             return []
+        ret = list()
+        for server_node in server_nodes:
+            device_list = server_node.get('device')
+            m = re.compile(class_name.replace('*','.*'))
+            if isinstance(device_list,list) :
+                ret.extend([x.get('tango_name') for x in device_list if m.match(x.get('class',''))])
+            elif isinstance(device_list,dict) and m.match(device_list.get('class','')) :
+                ret.append(device_list.get('tango_name'))
+        return ret
     
     @_info
     def get_device_wide_list(self, wildcard):
@@ -836,7 +856,7 @@ class beacon(object):
 
     @_info
     def put_device_property(self, device_name, nb_properties, attr_prop_list):
-        device_node = self._tango_name_2_node.get(device_name)
+        device_node = self._tango_name_2_node.get(device_name.lower())
         old_properties = device_node.get('properties')
         if isinstance(old_properties,str): #reference
             properties_key = old_properties.split('/')
diff --git a/src/boost/python/databaseds/db_access/sqlite3.py b/tango/databaseds/db_access/sqlite3.py
similarity index 99%
rename from src/boost/python/databaseds/db_access/sqlite3.py
rename to tango/databaseds/db_access/sqlite3.py
index f31345b..a5416af 100644
--- a/src/boost/python/databaseds/db_access/sqlite3.py
+++ b/tango/databaseds/db_access/sqlite3.py
@@ -6,9 +6,9 @@ import functools
 import threading
 import Queue
 
-import PyTango
+import tango
 
-th_exc = PyTango.Except.throw_exception
+th_exc = tango.Except.throw_exception
 
 from db_errors import *
 
@@ -182,7 +182,7 @@ class Tango_dbapi2(object):
             pos = name.find('.')
             if pos != -1:
                 name = name[0:pos]
-            dev = PyTango.DeviceProxy(name)
+            dev = tango.DeviceProxy(name)
             dev.UpdateServersInfo()
             
             
@@ -403,7 +403,7 @@ class Tango_dbapi2(object):
         if self.fire_to_starter:
             if dev_name[0:8] == "dserver/":
                 # Get database server name
-                tango_util = PyTango.Util.instance()
+                tango_util = tango.Util.instance()
                 db_serv = tango_util.get_ds_name()
                 adm_dev_name = "dserver/" + db_serv.lower()
                 if dev_name != adm_dev_name and dev_name[0:16] != "dserver/starter/":
diff --git a/src/boost/python/databaseds/db_errors.py b/tango/databaseds/db_errors.py
similarity index 100%
rename from src/boost/python/databaseds/db_errors.py
rename to tango/databaseds/db_errors.py
diff --git a/src/boost/python/databaseds/mysql2sqlite.sh b/tango/databaseds/mysql2sqlite.sh
similarity index 100%
rename from src/boost/python/databaseds/mysql2sqlite.sh
rename to tango/databaseds/mysql2sqlite.sh
diff --git a/src/boost/python/db.py b/tango/db.py
similarity index 98%
rename from src/boost/python/db.py
rename to tango/db.py
index 693809b..42bbec9 100644
--- a/src/boost/python/db.py
+++ b/tango/db.py
@@ -1,5 +1,5 @@
 # ------------------------------------------------------------------------------
-# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+# This file is part of PyTango (http://pytango.rtfd.io)
 #
 # Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
 # Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
@@ -19,7 +19,7 @@ __docformat__ = "restructuredtext"
 
 import collections
 
-from ._PyTango import StdStringVector, Database, DbDatum, DbData, \
+from ._tango import StdStringVector, Database, DbDatum, DbData, \
     DbDevInfo, DbDevInfos, DbDevImportInfo, DbDevExportInfo, DbDevExportInfos, \
     DbHistory, DbServerInfo, DbServerData
 
@@ -197,8 +197,8 @@ def __Database__generic_get_property(self, obj_name, value, f):
                 new_value.append(DbDatum(k))
         ret = value
     else:
-        raise TypeError('value must be a string, PyTango.DbDatum, '\
-                        'PyTango.DbData, a sequence or a dictionary')
+        raise TypeError('value must be a string, tango.DbDatum, '\
+                        'tango.DbData, a sequence or a dictionary')
 
     f(obj_name, new_value)
     if ret is None: ret = {}
@@ -228,7 +228,7 @@ def __Database__generic_put_property(self, obj_name, value, f):
             new_value.append(db_datum)
         value = new_value
     else:
-        raise TypeError('value must be a PyTango.DbDatum, PyTango.DbData,'\
+        raise TypeError('value must be a tango.DbDatum, tango.DbData,'\
                         'a sequence<DbDatum> or a dictionary')
     return f(obj_name, value)
 
@@ -257,8 +257,8 @@ def __Database__generic_delete_property(self, obj_name, value, f):
             else:
                 new_value.append(DbDatum(k))
     else:
-        raise TypeError('value must be a string, PyTango.DbDatum, '\
-                        'PyTango.DbData, a sequence or a dictionary')
+        raise TypeError('value must be a string, tango.DbDatum, '\
+                        'tango.DbData, a sequence or a dictionary')
 
     return f(obj_name, new_value)
 
@@ -497,8 +497,8 @@ def __Database__get_device_attribute_property(self, dev_name, value):
             else:
                 new_value.append(DbDatum(k))
     else:
-        raise TypeError('value must be a string, PyTango.DbDatum, '\
-                        'PyTango.DbData, a sequence or a dictionary')
+        raise TypeError('value must be a string, tango.DbDatum, '\
+                        'tango.DbData, a sequence or a dictionary')
 
     if ret is None: ret = {}
 
@@ -536,7 +536,7 @@ def __Database__put_device_attribute_property(self, dev_name, value):
                        associated with each key being:
                        
                        3.1 seq<str>
-                       3.2 PyTango.DbDatum
+                       3.2 tango.DbDatum
 
             Return     : None
 
@@ -565,7 +565,7 @@ def __Database__put_device_attribute_property(self, dev_name, value):
                 new_value.append(db_datum)
         value = new_value
     else:
-        raise TypeError('value must be a PyTango.DbData,'\
+        raise TypeError('value must be a tango.DbData,'\
                         'a sequence<DbDatum> or a dictionary')
     return self._put_device_attribute_property(dev_name, value)
 
@@ -600,8 +600,8 @@ def __Database__delete_device_attribute_property(self, dev_name, value):
             for k2 in v1:
                 new_value.append(DbDatum(k2))
     else:
-        raise TypeError('value must be a string, PyTango.DbDatum, '\
-                        'PyTango.DbData, a sequence or a dictionary')
+        raise TypeError('value must be a string, tango.DbDatum, '\
+                        'tango.DbData, a sequence or a dictionary')
 
     return self._delete_device_attribute_property(dev_name, new_value)
 
@@ -616,8 +616,8 @@ def __Database__get_class_property(self, class_name, value):
                 - value : can be one of the following:
                 
                     1. str [in] - single property data to be fetched
-                    2. PyTango.DbDatum [in] - single property data to be fetched
-                    3. PyTango.DbData [in,out] - several property data to be fetched
+                    2. tango.DbDatum [in] - single property data to be fetched
+                    3. tango.DbData [in,out] - several property data to be fetched
                        In this case (direct C++ API) the DbData will be filled with
                        the property values
                     4. sequence<str> [in] - several property data to be fetched
@@ -732,8 +732,8 @@ def __Database__get_class_attribute_property(self, class_name, value):
             else:
                 new_value.append(DbDatum(k))
     else:
-        raise TypeError('value must be a string, PyTango.DbDatum, '\
-                        'PyTango.DbData, a sequence or a dictionary')
+        raise TypeError('value must be a string, tango.DbDatum, '\
+                        'tango.DbData, a sequence or a dictionary')
 
     self._get_class_attribute_property(class_name, new_value)
 
@@ -764,14 +764,14 @@ def __Database__put_class_attribute_property(self, class_name, value):
                 - class_name : (str) class name
                 - propdata : can be one of the following:
                 
-                    1. PyTango.DbData - several property data to be inserted
+                    1. tango.DbData - several property data to be inserted
                     2. sequence<DbDatum> - several property data to be inserted
                     3. dict<str, dict<str, obj>> keys are attribute names and value
                        being another dictionary which keys are the attribute property
                        names and the value associated with each key being:
                        
                        3.1 seq<str>
-                       3.2 PyTango.DbDatum
+                       3.2 tango.DbDatum
 
             Return     : None
 
@@ -799,7 +799,7 @@ def __Database__put_class_attribute_property(self, class_name, value):
                 new_value.append(db_datum)
         value = new_value
     else:
-        raise TypeError('value must be a PyTango.DbData,'\
+        raise TypeError('value must be a tango.DbData,'\
                         'a sequence<DbDatum> or a dictionary')
     return self._put_class_attribute_property(class_name, value)
 
@@ -1255,7 +1255,7 @@ def __doc_Database():
         Return     : device name
 
         .. deprecated:: 8.1.0
-            Use :meth:`~PyTango.Database.get_device_from_alias` instead
+            Use :meth:`~tango.Database.get_device_from_alias` instead
     """ )
 
     document_method("get_alias", """
@@ -1270,7 +1270,7 @@ def __doc_Database():
         New in PyTango 3.0.4
         
         .. deprecated:: 8.1.0
-            Use :meth:`~PyTango.Database.get_alias_from_device` instead
+            Use :meth:`~tango.Database.get_alias_from_device` instead
     """ )
 
     document_method("get_device_from_alias", """
@@ -1794,7 +1794,7 @@ def __doc_Database():
             is an example of how to delete the unit property of the velocity attribute of
             the id11/motor/1 device using this method :
 
-            db_data = PyTango.DbData();
+            db_data = tango.DbData();
             db_data.append(DbDatum("velocity"));
             db_data.append(DbDatum("unit"));
             db.delete_device_attribute_property("id11/motor/1", db_data);
@@ -1994,7 +1994,7 @@ def __doc_Database():
         Throws     : ConnectionFailed, CommunicationFailed, DevFailed from device (DB_SQLError)
         
         .. deprecated:: 8.1.0
-            Use :meth:`~PyTango.Database.get_attribute_from_alias` instead
+            Use :meth:`~tango.Database.get_attribute_from_alias` instead
     """ )
 
     document_method("get_attribute_from_alias", """
diff --git a/src/boost/python/device_attribute.py b/tango/device_attribute.py
similarity index 97%
rename from src/boost/python/device_attribute.py
rename to tango/device_attribute.py
index 985de73..5b3d681 100644
--- a/src/boost/python/device_attribute.py
+++ b/tango/device_attribute.py
@@ -1,5 +1,5 @@
 # ------------------------------------------------------------------------------
-# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+# This file is part of PyTango (http://pytango.rtfd.io)
 #
 # Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
 # Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
@@ -20,7 +20,7 @@ __docformat__ = "restructuredtext"
 import copy
 
 from .utils import document_method as __document_method
-from ._PyTango import DeviceAttribute, ExtractAs
+from ._tango import DeviceAttribute, ExtractAs
 
 def __DeviceAttribute__get_data(self):
     return self.get_data_raw().extract()
diff --git a/src/boost/python/device_class.py b/tango/device_class.py
similarity index 92%
rename from src/boost/python/device_class.py
rename to tango/device_class.py
index 38888c1..4632ed8 100644
--- a/src/boost/python/device_class.py
+++ b/tango/device_class.py
@@ -1,5 +1,5 @@
 # ------------------------------------------------------------------------------
-# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+# This file is part of PyTango (http://pytango.rtfd.io)
 #
 # Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
 # Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
@@ -21,7 +21,7 @@ __docformat__ = "restructuredtext"
 
 import collections
 
-from ._PyTango import Except, DevFailed, DeviceClass, CmdArgType, \
+from ._tango import Except, DevFailed, DeviceClass, CmdArgType, \
     DispLevel, UserDefaultAttrProp
 from .pyutil import Util
 
@@ -32,6 +32,7 @@ from .utils import document_method as __document_method
 from .globals import get_class, get_class_by_class, \
     get_constructed_class_by_class
 from .attr_data import AttrData
+from .pipe_data import PipeData
 
 
 class PropUtil:
@@ -303,6 +304,25 @@ def __throw_create_command_exception(msg):
     Except.throw_exception("PyDs_WrongCommandDefinition", msg,
                            "create_command()")
 
+def __DeviceClass__create_user_default_attr_prop(self, attr_name, extra_info):
+    """for internal usage only"""
+    p = UserDefaultAttrProp()
+    for k, v in extra_info.items():
+        k_lower = k.lower()
+        method_name = "set_%s" % k_lower.replace(' ','_')
+        if hasattr(p, method_name):
+            method = getattr(p, method_name)
+            method(str(v))
+        elif k == 'delta_time':
+            p.set_delta_t(str(v))
+        elif not k_lower in ('display level', 'polling period', 'memorized'):
+            name = self.get_name()
+            msg = "Wrong definition of attribute %s in " \
+                  "class %s\nThe object extra information '%s' " \
+                  "is not recognized!" % (attr_name, name, k)
+            self.__throw_create_attribute_exception(msg)
+    return p
+
 def __DeviceClass__attribute_factory(self, attr_list):
     """for internal usage only"""
     for attr_name, attr_info in self.attr_list.items():
@@ -324,6 +344,21 @@ def __DeviceClass__attribute_factory(self, attr_list):
                                attr_data.is_allowed_name,
                                attr_data.att_prop)
 
+def __DeviceClass__pipe_factory(self, pipe_list):
+    """for internal usage only"""
+    for pipe_name, pipe_info in self.pipe_list.items():
+        if isinstance(pipe_info, PipeData):
+            pipe_data = pipe_info
+        else:
+            pipe_data = PipeData(pipe_name, self.get_name(), pipe_info)
+        self._create_pipe(pipe_list, pipe_data.pipe_name,
+                          pipe_data.pipe_write,
+                          pipe_data.display_level,
+                          pipe_data.read_method_name,
+                          pipe_data.write_method_name,
+                          pipe_data.is_allowed_name,
+                          pipe_data.pipe_prop)
+
 def __DeviceClass__command_factory(self):
     """for internal usage only"""
     name = self.get_name()
@@ -374,7 +409,7 @@ def __create_command(self, deviceimpl_class, cmd_name, cmd_info):
     except:
         msg = "Wrong data type in command argument for command %s in " \
               "class %s\nCommand parameter type (first element in first " \
-              "sequence) must be a PyTango.CmdArgType"
+              "sequence) must be a tango.CmdArgType"
         __throw_create_command_exception(msg)
 
     param_desc = ""
@@ -404,7 +439,7 @@ def __create_command(self, deviceimpl_class, cmd_name, cmd_info):
     except:
         msg = "Wrong data type in command result for command %s in " \
               "class %s\nCommand result type (first element in second " \
-              "sequence) must be a PyTango.CmdArgType" % (cmd_name, name)
+              "sequence) must be a tango.CmdArgType" % (cmd_name, name)
         __throw_create_command_exception(msg)
 
     result_desc = ""
@@ -441,7 +476,7 @@ def __create_command(self, deviceimpl_class, cmd_name, cmd_info):
                 except:
                     msg = "Wrong data type in command information for command %s in " \
                           "class %s\nCommand information for display level is not a " \
-                          "PyTango.DispLevel" % (cmd_name, name)
+                          "tango.DispLevel" % (cmd_name, name)
                     __throw_create_command_exception(msg)
             elif info_name_lower == "default command":
                 if not is_pure_str(info_value):
@@ -540,7 +575,7 @@ def __DeviceClass__create_device(self, device_name, alias=None, cb=None):
             registered in the database and BEFORE the init_device for the
             newly created device is called
 
-        Throws PyTango.DevFailed:
+        Throws tango.DevFailed:
             - the device name exists already or
             - the given class is not registered for this DS.
             - the cb is not a callable
@@ -567,7 +602,7 @@ def __DeviceClass__delete_device(self, device_name):
             Deletes an existing device from the database and from this running
             server
 
-            Throws PyTango.DevFailed:
+            Throws tango.DevFailed:
                 - the device name doesn't exist in the database
                 - the device name doesn't exist in this DS.
 
@@ -632,11 +667,14 @@ def __init_DeviceClass():
     DeviceClass.device_property_list = {}
     DeviceClass.cmd_list = {}
     DeviceClass.attr_list = {}
+    DeviceClass.pipe_list = {}
     DeviceClass.__init_orig__ = DeviceClass.__init__
     DeviceClass.__init__ = __DeviceClass__init__
     DeviceClass.__str__ = __DeviceClass__str__
     DeviceClass.__repr__ = __DeviceClass__repr__
+    DeviceClass._create_user_default_attr_prop = __DeviceClass__create_user_default_attr_prop
     DeviceClass._attribute_factory = __DeviceClass__attribute_factory
+    DeviceClass._pipe_factory = __DeviceClass__pipe_factory
     DeviceClass._command_factory = __DeviceClass__command_factory
     DeviceClass._new_device = __DeviceClass__new_device
     
@@ -680,7 +718,7 @@ def __doc_DeviceClass():
             is sent to to the device server process.
             The second version of the method is available only under Linux.
 
-        Throws PyTango.DevFailed:
+        Throws tango.DevFailed:
             - if the signal number is out of range
             - if the operating system failed to register a signal for the process.
 
@@ -777,33 +815,33 @@ def __doc_DeviceClass():
     """ )
 
     document_method("get_device_list", """
-    get_device_list(self) -> sequence<PyTango.DeviceImpl>
+    get_device_list(self) -> sequence<tango.DeviceImpl>
 
-            Gets the list of PyTango.DeviceImpl objects for this class
+            Gets the list of tango.DeviceImpl objects for this class
 
         Parameters : None
-        Return     : (sequence<PyTango.DeviceImpl>) list of PyTango.DeviceImpl objects for this class
+        Return     : (sequence<tango.DeviceImpl>) list of tango.DeviceImpl objects for this class
     """ )
 
     document_method("get_command_list", """
-    get_command_list(self) -> sequence<PyTango.Command>
+    get_command_list(self) -> sequence<tango.Command>
 
-            Gets the list of PyTango.Command objects for this class
+            Gets the list of tango.Command objects for this class
 
         Parameters : None
-        Return     : (sequence<PyTango.Command>) list of PyTango.Command objects for this class
+        Return     : (sequence<tango.Command>) list of tango.Command objects for this class
         
         New in PyTango 8.0.0
     """ )
 
     document_method("get_cmd_by_name", """
-    get_cmd_by_name(self, (str)cmd_name) -> PyTango.Command
+    get_cmd_by_name(self, (str)cmd_name) -> tango.Command
 
             Get a reference to a command object.
 
         Parameters :
             - cmd_name : (str) command name
-        Return     : (PyTango.Command) PyTango.Command object
+        Return     : (tango.Command) tango.Command object
         
         New in PyTango 8.0.0
     """ )
diff --git a/src/boost/python/device_data.py b/tango/device_data.py
similarity index 96%
rename from src/boost/python/device_data.py
rename to tango/device_data.py
index 4efcaed..20198da 100644
--- a/src/boost/python/device_data.py
+++ b/tango/device_data.py
@@ -1,5 +1,5 @@
 # ------------------------------------------------------------------------------
-# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+# This file is part of PyTango (http://pytango.rtfd.io)
 #
 # Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
 # Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
@@ -18,7 +18,7 @@ __all__ = ["device_data_init"]
 __docformat__ = "restructuredtext"
 
 from .utils import document_method as __document_method
-from ._PyTango import DeviceData
+from ._tango import DeviceData
 
 def __DeviceData__get_data(self):
     return self.get_data_raw().extract()
diff --git a/src/boost/python/device_proxy.py b/tango/device_proxy.py
similarity index 81%
rename from src/boost/python/device_proxy.py
rename to tango/device_proxy.py
index bd43fb7..2540878 100644
--- a/src/boost/python/device_proxy.py
+++ b/tango/device_proxy.py
@@ -1,5 +1,5 @@
 # ------------------------------------------------------------------------------
-# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+# This file is part of PyTango (http://pytango.rtfd.io)
 #
 # Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
 # Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
@@ -23,16 +23,18 @@ import time
 import threading
 import collections
 
-from ._PyTango import StdStringVector, DbData, DbDatum, AttributeInfo, \
+from ._tango import StdStringVector, DbData, DbDatum, AttributeInfo, \
     AttributeInfoEx, AttributeInfoList, AttributeInfoListEx, DeviceProxy, \
     __CallBackAutoDie, __CallBackPushEvent, EventType, DevFailed, Except, \
-    ExtractAs, GreenMode
+    ExtractAs, GreenMode, constants
 
 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
-from .green import result, submit, green, green_cb, get_green_mode, get_event_loop
+
+from .green import result, submit, green, green_cb
+from .green import get_green_mode, get_event_loop, get_wait_default_value
 
 _UNSUBSCRIBE_LIFETIME = 60
 
@@ -40,9 +42,9 @@ 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`.
+    Returns a new :class:`~tango.DeviceProxy`.
     There is no difference between using this function and the direct
-    :class:`~PyTango.DeviceProxy` constructor if you use the default kwargs.
+    :class:`~tango.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
@@ -51,8 +53,8 @@ def get_device_proxy(*args, **kwargs):
 
     .. 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`)
+        timeout (gettable by :meth:`~tango.DeviceProxy.get_timeout_millis` and
+        settable through :meth:`~tango.DeviceProxy.set_timeout_millis`)
 
     :param dev_name: the device name or alias
     :type dev_name: str
@@ -62,9 +64,9 @@ def get_device_proxy(*args, **kwargs):
     :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`
+                      green_mode (check :func:`~tango.get_green_mode` and
+                      :func:`~tango.set_green_mode`)
+    :type green_mode: :obj:`~tango.GreenMode`
     :param wait: whether or not to wait for result. If green_mode
                  Ignored when green_mode is Synchronous (always waits).
     :type wait: bool
@@ -74,7 +76,7 @@ def get_device_proxy(*args, **kwargs):
     :type timeout: float
     :returns:
         if green_mode is Synchronous or wait is True:
-            :class:`~PyTango.DeviceProxy`
+            :class:`~tango.DeviceProxy`
         else if green_mode is Futures:
             :class:`concurrent.futures.Future`
         else if green_mode is Gevent:
@@ -93,7 +95,7 @@ def get_device_proxy(*args, **kwargs):
     # 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)
+    wait = kwargs.pop('wait', get_wait_default_value(green_mode))
     timeout = kwargs.pop('timeout', None)
 
     # make sure the event loop is initialized
@@ -123,12 +125,42 @@ def __check_read_attribute(dev_attr):
         raise DevFailed(*dev_attr.get_err_stack())
     return dev_attr
 
+def __check_read_pipe(dev_pipe):
+    if dev_pipe.has_failed:
+        raise DevFailed(*dev_pipe.get_err_stack())
+    return dev_pipe
+
+def __DeviceProxy__get_cmd_cache(self):
+    try:
+        ret = self.__dict__['__cmd_cache']
+    except KeyError:
+        self.__dict__['__cmd_cache'] = ret = {}
+    return ret
+
+def __DeviceProxy__get_attr_cache(self):
+    try:
+        ret = self.__dict__['__attr_cache']
+    except KeyError:
+        self.__dict__['__attr_cache'] = ret = ()
+    return ret
+
+def __DeviceProxy__get_pipe_cache(self):
+    try:
+        ret = self.__dict__['__pipe_cache']
+    except KeyError:
+        self.__dict__['__pipe_cache'] = ret = ()
+    return ret
+
 def __DeviceProxy__init__(self, *args, **kwargs):
     self.__dict__['_green_mode'] = kwargs.pop('green_mode', None)
     self.__dict__['_executors'] = executors = {}
     self.__dict__['_pending_unsubscribe'] = {}
+#    self.__dict__['__cmd_cache'] = {}
+#    self.__dict__['__attr_cache'] = ()
+#    self.__dict__['__pipe_cache'] = ()
     executors[GreenMode.Futures] = kwargs.pop('executor', None)
     executors[GreenMode.Gevent] = kwargs.pop('threadpool', None)
+    executors[GreenMode.Asyncio] = kwargs.pop('asyncio_executor', None)
     return DeviceProxy.__init_orig__(self, *args, **kwargs)
 
 def __DeviceProxy__get_green_mode(self):
@@ -138,8 +170,8 @@ def __DeviceProxy__get_green_mode(self):
     :rtype: GreenMode
 
     .. seealso::
-        :func:`PyTango.get_green_mode`
-        :func:`PyTango.set_green_mode`
+        :func:`tango.get_green_mode`
+        :func:`tango.set_green_mode`
 
     New in PyTango 8.1.0
     """
@@ -151,7 +183,7 @@ def __DeviceProxy__get_green_mode(self):
 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`).
+    (see :func:`tango.get_green_mode`).
 
     :param green_mode: the new green mode
     :type green_mode: GreenMode
@@ -176,6 +208,17 @@ def __DeviceProxy__refresh_attr_cache(self):
     attr_cache = [attr_name.lower() for attr_name in self.get_attribute_list()]
     self.__dict__['__attr_cache'] = attr_cache
 
+def __DeviceProxy__refresh_pipe_cache(self):
+    pipe_cache = [pipe_name.lower() for pipe_name in self.get_pipe_list()]
+    self.__dict__['__pipe_cache'] = pipe_cache
+
+def __get_command_func(dp, cmd_info, name):
+    _, doc = cmd_info
+    def f(*args, **kwds):
+        return dp.command_inout(name, *args, **kwds)
+    f.__doc__ = doc
+    return f
+
 def __DeviceProxy__getattr(self, name):
     # trait_names is a feature of IPython. Hopefully they will solve
     # ticket http://ipython.scipy.org/ipython/ipython/ticket/229 someday
@@ -184,47 +227,81 @@ def __DeviceProxy__getattr(self, name):
         raise AttributeError(name)
 
     name_l = name.lower()
-    cmd_info = None
-    if not hasattr(self, '__cmd_cache'):
-        try:
-            self.__refresh_cmd_cache()
-        except:
-            pass
+
+    cmd_info = self.__get_cmd_cache().get(name_l)
+    if cmd_info:
+        return __get_command_func(self, cmd_info, name)
+
+    if name_l in self.__get_attr_cache():
+        return self.read_attribute(name).value
+
+    if name_l in self.__get_pipe_cache():
+        return self.read_pipe(name)
+
     try:
-        cmd_info = self.__cmd_cache[name_l]
+        self.__refresh_cmd_cache()
     except:
         pass
 
-    if cmd_info is not None:
-        _, doc = cmd_info
-        def f(*args, **kwds):
-            return self.command_inout(name, *args, **kwds)
-        f.__doc__ = doc
-        return f
+    cmd_info = self.__get_cmd_cache().get(name_l)
+    if cmd_info:
+        return __get_command_func(self, cmd_info, name)
 
-    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
+    try:
+        self.__refresh_attr_cache()
+    except:
+        pass
 
-    if not find_attr or name_l not in self.__attr_cache:
-        raise AttributeError(name)
+    if name_l in self.__get_attr_cache():
+        return self.read_attribute(name).value
+
+    try:
+        self.__refresh_pipe_cache()
+    except Exception as e:
+        pass
+
+    if name_l in self.__get_pipe_cache():
+        return self.read_pipe(name)
 
-    return self.read_attribute(name).value
+    raise AttributeError(name)
 
 def __DeviceProxy__setattr(self, name, value):
+    name_l = name.lower()
+
+    if name_l in self.__get_cmd_cache():
+        raise TypeError('Cannot set the value of a command')
+
+    if name_l in self.__get_attr_cache():
+        return self.write_attribute(name, value)
+
+    if name_l in self.__get_pipe_cache():
+        return self.write_pipe(name, value)
+
     try:
-        if not hasattr(self, '__attr_cache') or name.lower() not in self.__attr_cache:
-            self.__refresh_attr_cache()
+        self.__refresh_cmd_cache()
     except:
-        return super(DeviceProxy, self).__setattr__(name, value)
+        pass
 
-    if name.lower() in self.__attr_cache:
-        self.write_attribute(name, value)
-    else:
-        return super(DeviceProxy, self).__setattr__(name, value)
+    if name_l in self.__get_cmd_cache():
+        raise TypeError('Cannot set the value of a command')
+
+    try:
+        self.__refresh_attr_cache()
+    except:
+        pass
+
+    if name_l in self.__get_attr_cache():
+        return self.write_attribute(name, value)
+
+    try:
+        self.__refresh_pipe_cache()
+    except:
+        pass
+
+    if name_l in self.__get_pipe_cache():
+        return self.write_pipe(name, value)
+
+    return super(DeviceProxy, self).__setattr__(name, value)
 
 
 def __DeviceProxy__getAttributeNames(self):
@@ -232,6 +309,7 @@ def __DeviceProxy__getAttributeNames(self):
     try:
         lst = [cmd.cmd_name for cmd in self.command_list_query()]
         lst += self.get_attribute_list()
+        lst += self.get_pipe_list()
         lst += list(map(str.lower, lst))
         lst.sort()
         return lst
@@ -293,7 +371,7 @@ def __DeviceProxy__read_attributes_asynch(self, attr_names, cb=None, extract_as=
         by default, TANGO is initialized with the **polling** model. If you want
         to use the **push** model (the one with the callback parameter), you
         need to change the global TANGO model to PUSH_CALLBACK.
-        You can do this with the :meth:`PyTango.ApiUtil.set_asynch_cb_sub_model`
+        You can do this with the :meth:`tango.ApiUtil.set_asynch_cb_sub_model`
     """
     if cb is None:
         return self.__read_attributes_asynch(attr_names)
@@ -361,7 +439,7 @@ def __DeviceProxy__write_attributes_asynch(self, attr_values, cb=None):
         by default, TANGO is initialized with the **polling** model. If you want
         to use the **push** model (the one with the callback parameter), you
         need to change the global TANGO model to PUSH_CALLBACK.
-        You can do this with the :meth:`PyTango.ApiUtil.set_asynch_cb_sub_model`
+        You can do this with the :meth:`tango.ApiUtil.set_asynch_cb_sub_model`
     """
     if cb is None:
         return self.__write_attributes_asynch(attr_values)
@@ -384,36 +462,44 @@ def __DeviceProxy__write_attribute_asynch(self, attr_name, value, cb=None):
     """
     return self.write_attributes_asynch([(attr_name, value)], cb)
 
-def __DeviceProxy__write_read_attribute(self, attr_name, value, extract_as=ExtractAs.Numpy):
-    return __check_read_attribute(self._write_read_attribute(attr_name, value, extract_as))
+def __DeviceProxy__write_read_attribute(self, attr_name, value,
+                                        extract_as=ExtractAs.Numpy):
+    result = self._write_read_attribute(attr_name, value, extract_as)
+    return __check_read_attribute(result)
+
+def __DeviceProxy__write_read_attributes(self, name_val,
+                                         attr_read_names,
+                                         extract_as=ExtractAs.Numpy):
+    return self._write_read_attributes(name_val, attr_read_names,
+                                       extract_as)
 
 def __DeviceProxy__get_property(self, propname, value=None):
     """
-    get_property(propname, value=None) -> PyTango.DbData
+    get_property(propname, value=None) -> tango.DbData
 
             Get a (list) property(ies) for a device.
 
             This method accepts the following types as propname parameter:
             1. string [in] - single property data to be fetched
             2. sequence<string> [in] - several property data to be fetched
-            3. PyTango.DbDatum [in] - single property data to be fetched
-            4. PyTango.DbData [in,out] - several property data to be fetched.
+            3. tango.DbDatum [in] - single property data to be fetched
+            4. tango.DbData [in,out] - several property data to be fetched.
             5. sequence<DbDatum> - several property data to be feteched
 
             Note: for cases 3, 4 and 5 the 'value' parameter if given, is IGNORED.
 
-            If value is given it must be a PyTango.DbData that will be filled with the
+            If value is given it must be a tango.DbData that will be filled with the
             property values
 
         Parameters :
             - propname : (any) property(ies) name(s)
             - value : (DbData) (optional, default is None meaning that the
-                      method will create internally a PyTango.DbData and return
+                      method will create internally a tango.DbData and return
                       it filled with the property values
 
         Return     : (DbData) object containing the property(ies) value(s). If a
-                     PyTango.DbData is given as parameter, it returns the same
-                     object otherwise a new PyTango.DbData is returned
+                     tango.DbData is given as parameter, it returns the same
+                     object otherwise a new tango.DbData is returned
 
         Throws     : NonDbDevice, ConnectionFailed (with database),
                      CommunicationFailed (with database),
@@ -456,8 +542,8 @@ def __DeviceProxy__put_property(self, value):
 
             Insert or update a list of properties for this device.
             This method accepts the following types as value parameter:
-            1. PyTango.DbDatum - single property data to be inserted
-            2. PyTango.DbData - several property data to be inserted
+            1. tango.DbDatum - single property data to be inserted
+            2. tango.DbData - several property data to be inserted
             3. sequence<DbDatum> - several property data to be inserted
             4. dict<str, DbDatum> - keys are property names and value has data to be inserted
             5. dict<str, seq<str>> - keys are property names and value has data to be inserted
@@ -465,8 +551,8 @@ def __DeviceProxy__put_property(self, value):
 
         Parameters :
             - value : can be one of the following:
-                1. PyTango.DbDatum - single property data to be inserted
-                2. PyTango.DbData - several property data to be inserted
+                1. tango.DbDatum - single property data to be inserted
+                2. tango.DbData - several property data to be inserted
                 3. sequence<DbDatum> - several property data to be inserted
                 4. dict<str, DbDatum> - keys are property names and value has data to be inserted
                 5. dict<str, seq<str>> - keys are property names and value has data to be inserted
@@ -499,7 +585,7 @@ def __DeviceProxy__put_property(self, value):
             new_value.append(db_datum)
         value = new_value
     else:
-        raise TypeError('value must be a PyTango.DbDatum, PyTango.DbData,'\
+        raise TypeError('value must be a tango.DbDatum, tango.DbData,'\
                         'a sequence<DbDatum> or a dictionary')
     return self._put_property(value)
 
@@ -511,8 +597,8 @@ def __DeviceProxy__delete_property(self, value):
             This method accepts the following types as value parameter:
 
                 1. string [in] - single property to be deleted
-                2. PyTango.DbDatum [in] - single property data to be deleted
-                3. PyTango.DbData [in] - several property data to be deleted
+                2. tango.DbDatum [in] - single property data to be deleted
+                3. tango.DbData [in] - several property data to be deleted
                 4. sequence<string> [in]- several property data to be deleted
                 5. sequence<DbDatum> [in] - several property data to be deleted
                 6. dict<str, obj> [in] - keys are property names to be deleted (values are ignored)
@@ -522,8 +608,8 @@ def __DeviceProxy__delete_property(self, value):
             - value : can be one of the following:
 
                 1. string [in] - single property data to be deleted
-                2. PyTango.DbDatum [in] - single property data to be deleted
-                3. PyTango.DbData [in] - several property data to be deleted
+                2. tango.DbDatum [in] - single property data to be deleted
+                3. tango.DbData [in] - several property data to be deleted
                 4. sequence<string> [in]- several property data to be deleted
                 5. sequence<DbDatum> [in] - several property data to be deleted
                 6. dict<str, obj> [in] - keys are property names to be deleted (values are ignored)
@@ -555,8 +641,8 @@ def __DeviceProxy__delete_property(self, value):
             else:
                 new_value.append(DbDatum(k))
     else:
-        raise TypeError('value must be a string, PyTango.DbDatum, '\
-                        'PyTango.DbData, a sequence or a dictionary')
+        raise TypeError('value must be a string, tango.DbDatum, '\
+                        'tango.DbData, a sequence or a dictionary')
 
     return self._delete_property(new_value)
 
@@ -621,7 +707,7 @@ def __DeviceProxy__get_attribute_config(self, value):
     get_attribute_config( self, names) -> AttributeInfoList
 
             Return the attribute configuration for the list of specified attributes. To get all the
-            attributes pass a sequence containing the constant PyTango.constants.AllAttr
+            attributes pass a sequence containing the constant tango.constants.AllAttr
 
         Parameters :
                 - names : (sequence<str>) attribute names
@@ -659,7 +745,7 @@ def __DeviceProxy__get_attribute_config_ex(self, value):
 
             Return the extended attribute configuration for the list of
             specified attributes. To get all the attributes pass a sequence
-            containing the constant PyTango.constants.AllAttr
+            containing the constant tango.constants.AllAttr
 
         Parameters :
                 - names : (sequence<str>) attribute names
@@ -681,6 +767,101 @@ def __DeviceProxy__get_attribute_config_ex(self, value):
 
     raise TypeError('value must be a string or a sequence<string>')
 
+def __DeviceProxy__get_command_config(self, value=(constants.AllCmd,)):
+    """
+    get_command_config( self) -> CommandInfoList
+
+            Return the command configuration for all commands.
+
+        Return     : (CommandInfoList) Object containing the commands
+                     information
+
+        Throws     : ConnectionFailed, CommunicationFailed,
+                     DevFailed from device
+
+    get_command_config( self, name) -> CommandInfo
+
+            Return the command configuration for a single command.
+
+        Parameters :
+                - name : (str) command name
+        Return     : (CommandInfo) Object containing the command
+                     information
+
+        Throws     : ConnectionFailed, CommunicationFailed,
+                     DevFailed from device
+
+    get_command_config( self, names) -> CommandInfoList
+
+            Return the command configuration for the list of specified commands.
+
+        Parameters :
+                - names : (sequence<str>) command names
+        Return     : (CommandInfoList) Object containing the commands
+                     information
+
+        Throws     : ConnectionFailed, CommunicationFailed,
+                     DevFailed from device
+    """
+    if isinstance(value, StdStringVector) or is_pure_str(value):
+        return self._get_command_config(value)
+    elif isinstance(value, collections.Sequence):
+        v = seq_2_StdStringVector(value)
+        return self._get_command_config(v)
+
+    raise TypeError('value must be a string or a sequence<string>')
+
+def __DeviceProxy__get_pipe_config(self, value=None):
+    """
+    get_pipe_config( self) -> PipeInfoList
+
+            Return the pipe configuration for all pipes.
+
+        Return     : (PipeInfoList) Object containing the pipes
+                     information
+
+        Throws     : ConnectionFailed, CommunicationFailed,
+                     DevFailed from device
+
+    get_pipe_config( self, name) -> PipeInfo
+
+            Return the pipe configuration for a single pipe.
+
+        Parameters :
+                - name : (str) pipe name
+
+        Return     : (PipeInfo) Object containing the pipe
+                     information
+
+        Throws     : ConnectionFailed, CommunicationFailed,
+                     DevFailed from device
+
+    get_pipe_config( self, names) -> PipeInfoList
+
+            Return the pipe configuration for the list of specified pipes. To get all the
+            pipes pass a sequence containing the constant tango.constants.AllPipe
+
+        Parameters :
+                - names : (sequence<str>) pipe names
+
+        Return     : (PipeInfoList) Object containing the pipes
+                     information
+
+        Throws     : ConnectionFailed, CommunicationFailed,
+                     DevFailed from device
+
+        New in PyTango 9.2.0
+    """
+    if value is None:
+        value = [constants.AllPipe]
+    if isinstance(value, StdStringVector) or is_pure_str(value):
+        return self._get_pipe_config(value)
+    elif isinstance(value, collections.Sequence):
+        v = seq_2_StdStringVector(value)
+        return self._get_pipe_config(v)
+
+    raise TypeError('value must be a string or a sequence<string>')
+
 def __DeviceProxy__set_attribute_config(self, value):
     """
     set_attribute_config( self, attr_info) -> None
@@ -755,6 +936,51 @@ def __DeviceProxy__set_attribute_config(self, value):
 
     return self._set_attribute_config(v)
 
+def __DeviceProxy__set_pipe_config(self, value):
+    """
+    set_pipe_config( self, pipe_info) -> None
+
+            Change the pipe configuration for the specified pipe
+
+        Parameters :
+                - pipe_info : (PipeInfo) pipe information
+        Return     : None
+
+        Throws     : ConnectionFailed, CommunicationFailed,
+                     DevFailed from device
+
+    set_pipe_config( self, pipe_info) -> None
+
+            Change the pipes configuration for the specified pipes
+
+        Parameters :
+                - pipe_info : (sequence<PipeInfo>) pipes information
+        Return     : None
+
+        Throws     : ConnectionFailed, CommunicationFailed,
+                     DevFailed from device
+    """
+    if isinstance(value, PipeInfo):
+        v = PipeInfoList()
+        v.append(value)
+    elif isinstance(value, PipeInfoList):
+        v = value
+    elif isinstance(value, collections.Sequence):
+        if not len(value):
+            return
+        if isinstance(value[0], PipeInfo):
+            v = PipeInfoList()
+        else:
+            raise TypeError('value must be a PipeInfo or a ' \
+                            'sequence<PipeInfo>')
+        for i in value:
+            v.append(i)
+    else:
+        raise TypeError('value must be a PipeInfo or a ' \
+                        'sequence<PipeInfo>')
+
+    return self._set_pipe_config(v)
+
 def __DeviceProxy__get_event_map_lock(self):
     """
     Internal helper method"""
@@ -988,6 +1214,13 @@ def __DeviceProxy__str(self):
     info = self._get_info_()
     return "%s(%s)" % (info.dev_class, self.dev_name())
 
+def __DeviceProxy__read_pipe(self, pipe_name, extract_as=ExtractAs.Numpy):
+    r = self.__read_pipe(pipe_name)
+    return r.extract(extract_as)
+
+def __DeviceProxy__write_pipe(*args, **kwargs):
+    raise NotImplementedError('writtable pipes not implemented in 9.2.0a')
+
 def __DeviceProxy__read_attributes(self, *args, **kwargs):
     return self._read_attributes(*args, **kwargs)
 
@@ -1079,8 +1312,12 @@ def __init_DeviceProxy():
 
     DeviceProxy._getAttributeNames = __DeviceProxy__getAttributeNames
 
+    DeviceProxy.__get_cmd_cache = __DeviceProxy__get_cmd_cache
+    DeviceProxy.__get_attr_cache = __DeviceProxy__get_attr_cache
+    DeviceProxy.__get_pipe_cache = __DeviceProxy__get_pipe_cache
     DeviceProxy.__refresh_cmd_cache = __DeviceProxy__refresh_cmd_cache
     DeviceProxy.__refresh_attr_cache = __DeviceProxy__refresh_attr_cache
+    DeviceProxy.__refresh_pipe_cache = __DeviceProxy__refresh_pipe_cache
 
     DeviceProxy.ping = green(__DeviceProxy__ping)
     DeviceProxy.state = green(__DeviceProxy__state)
@@ -1091,6 +1328,7 @@ def __init_DeviceProxy():
     DeviceProxy.write_attribute = green(__DeviceProxy__write_attribute)
     DeviceProxy.write_attributes = green(__DeviceProxy__write_attributes)
     DeviceProxy.write_read_attribute = green(__DeviceProxy__write_read_attribute)
+    DeviceProxy.write_read_attributes = green(__DeviceProxy__write_read_attributes)
 
     DeviceProxy.read_attributes_asynch = __DeviceProxy__read_attributes_asynch
     DeviceProxy.read_attribute_asynch = __DeviceProxy__read_attribute_asynch
@@ -1099,6 +1337,9 @@ def __init_DeviceProxy():
     DeviceProxy.write_attribute_asynch = __DeviceProxy__write_attribute_asynch
     DeviceProxy.write_attribute_reply = __DeviceProxy__write_attribute_reply
 
+    DeviceProxy.read_pipe = green(__DeviceProxy__read_pipe)
+    DeviceProxy.write_pipe = green(__DeviceProxy__write_pipe)
+
     DeviceProxy.get_property = __DeviceProxy__get_property
     DeviceProxy.put_property = __DeviceProxy__put_property
     DeviceProxy.delete_property = __DeviceProxy__delete_property
@@ -1107,6 +1348,11 @@ def __init_DeviceProxy():
     DeviceProxy.get_attribute_config_ex = __DeviceProxy__get_attribute_config_ex
     DeviceProxy.set_attribute_config = __DeviceProxy__set_attribute_config
 
+    DeviceProxy.get_command_config = __DeviceProxy__get_command_config
+
+    DeviceProxy.get_pipe_config = __DeviceProxy__get_pipe_config
+    DeviceProxy.set_pipe_config = __DeviceProxy__set_pipe_config
+
     DeviceProxy.__get_event_map = __DeviceProxy__get_event_map
     DeviceProxy.__get_event_map_lock = __DeviceProxy__get_event_map_lock
     DeviceProxy.subscribe_event = green(__DeviceProxy__subscribe_event)
@@ -1131,12 +1377,12 @@ def __doc_DeviceProxy():
     a DeviceProxy, a Tango Device name must be set in the object constructor.
 
     Example :
-       dev = PyTango.DeviceProxy("sys/tg_test/1")
+       dev = tango.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`.
+    Creates a new :class:`~tango.DeviceProxy`.
 
     :param dev_name: the device name or alias
     :type dev_name: str
@@ -1146,9 +1392,9 @@ def __doc_DeviceProxy():
     :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`
+                      green_mode (check :func:`~tango.get_green_mode` and
+                      :func:`~tango.set_green_mode`)
+    :type green_mode: :obj:`~tango.GreenMode`
     :param wait: whether or not to wait for result. If green_mode
                  Ignored when green_mode is Synchronous (always waits).
     :type wait: bool
@@ -1158,13 +1404,13 @@ def __doc_DeviceProxy():
     :type timeout: float
     :returns:
         if green_mode is Synchronous or wait is True:
-            :class:`~PyTango.DeviceProxy`
+            :class:`~tango.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
+        * :class:`~tango.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
@@ -1288,6 +1534,18 @@ def __doc_DeviceProxy():
 #   Device methods
 #-------------------------------------
 
+    document_method("get_command_list", """
+    get_command_list(self) -> sequence<str>
+
+            Return the names of all commands implemented for this device.
+
+        Parameters : None
+        Return     : sequence<str>
+
+        Throws     : ConnectionFailed, CommunicationFailed,
+                     DevFailed from device
+    """)
+
     document_method("command_query", """
     command_query(self, command) -> CommandInfo
 
@@ -1381,7 +1639,7 @@ def __doc_DeviceProxy():
     attribute_list_query(self) -> sequence<AttributeInfo>
 
             Query the device for info on all attributes. This method returns
-            a sequence of PyTango.AttributeInfo.
+            a sequence of tango.AttributeInfo.
 
         Parameters : None
         Return     : (sequence<AttributeInfo>) containing the
@@ -1395,7 +1653,7 @@ def __doc_DeviceProxy():
     attribute_list_query_ex(self) -> sequence<AttributeInfoEx>
 
             Query the device for info on all attributes. This method returns
-            a sequence of PyTango.AttributeInfoEx.
+            a sequence of tango.AttributeInfoEx.
 
         Parameters : None
         Return     : (sequence<AttributeInfoEx>) containing the
@@ -1416,8 +1674,8 @@ def __doc_DeviceProxy():
             - 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`).
+                           (see :meth:`~tango.DeviceProxy.get_green_mode` and
+                           :meth:`~tango.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.
@@ -1462,8 +1720,8 @@ def __doc_DeviceProxy():
                 - 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`).
+                               (see :meth:`~tango.DeviceProxy.get_green_mode` and
+                               :meth:`~tango.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.
@@ -1495,8 +1753,8 @@ def __doc_DeviceProxy():
                 - 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`).
+                               (see :meth:`~tango.DeviceProxy.get_green_mode` and
+                               :meth:`~tango.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.
@@ -1523,8 +1781,8 @@ def __doc_DeviceProxy():
         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`).
+                               (see :meth:`~tango.DeviceProxy.get_green_mode` and
+                               :meth:`~tango.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.
@@ -1552,7 +1810,7 @@ def __doc_DeviceProxy():
             the server can't be interrupted by other clients.
 
         Parameters : see write_attribute(attr_name, value)
-        Return     : A PyTango.DeviceAttribute object.
+        Return     : A tango.DeviceAttribute object.
 
         Throws     : ConnectionFailed, CommunicationFailed, DeviceUnlocked,
                      DevFailed from device, WrongData
@@ -1567,6 +1825,83 @@ def __doc_DeviceProxy():
         *timeout* parameter.
     """)
 
+    document_method("write_read_attributes", """
+    write_read_attributes(self, name_val, attr_names, extract_as=ExtractAs.Numpy, green_mode=None, wait=True, timeout=None) -> DeviceAttribute
+
+            Write then read attribute(s) in a single network call. By
+            default (serialisation by device), the execution of this
+            call in the server can't be interrupted by other clients.
+            On the server side, attribute(s) are first written and
+            if no exception has been thrown during the write phase,
+            attributes will be read.
+
+        Parameters :
+                - name_val: A list of pairs (attr_name, value). See write_attribute
+                - 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:`~tango.DeviceProxy.get_green_mode` and
+                               :meth:`~tango.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, 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 9.2.0
+    """)
+
+#-------------------------------------
+#   Pipe methods
+#-------------------------------------
+
+    document_method("read_pipe", """
+    read_pipe(self, pipe_name, extract_as=ExtractAs.Numpy, green_mode=None, wait=True, timeout=None) -> tuple
+
+            Read a single pipe. The result is a *blob*: a tuple with two elements: blob name (string) and blob
+            data (sequence). The blob data consists of a sequence where each element is a dictionary with the
+            following keys:
+
+            - name: blob element name
+            - dtype: tango data type
+            - value: blob element data (str for DevString, etc)
+
+        In case dtype is ``DevPipeBlob``, value is again a *blob*.
+
+        Parameters :
+            - pipe_name  : (str) The name of the pipe to read.
+            - extract_as : (ExtractAs) Defaults to numpy.
+            - green_mode : (GreenMode) Defaults to the current DeviceProxy GreenMode.
+                           (see :meth:`~tango.DeviceProxy.get_green_mode` and
+                           :meth:`~tango.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     : tuple<str, sequence>
+
+        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.
+
+        New in PyTango 9.2.0
+    """)
+
+    document_method("write_pipe", """TODO""")
+
 #-------------------------------------
 #   History methods
 #-------------------------------------
@@ -1946,7 +2281,7 @@ def __doc_DeviceProxy():
 
         Parameters :
             - event_id : (int) event identifier
-        Return     : (PyTango.TimeVal) representing the arrival time
+        Return     : (tango.TimeVal) representing the arrival time
 
         Throws     : EventSystemFailed
 
@@ -2009,7 +2344,7 @@ def __doc_DeviceProxy():
         Parameters :
             - lock_validity : (int) lock validity time in seconds
                                 (optional, default value is
-                                PyTango.constants.DEFAULT_LOCK_VALIDITY)
+                                tango.constants.DEFAULT_LOCK_VALIDITY)
         Return     : None
 
         New in PyTango 7.0.0
@@ -2087,7 +2422,7 @@ def __doc_DeviceProxy():
             If the device is not locked, the method returns False.
 
         Parameters :
-            - lockinfo [out] : (PyTango.LockInfo) object that will be filled
+            - lockinfo [out] : (tango.LockInfo) object that will be filled
                                 with lock informantion
         Return     : (bool) True if the device is locked by us.
                      Otherwise, False
diff --git a/src/boost/python/device_server.py b/tango/device_server.py
similarity index 95%
rename from src/boost/python/device_server.py
rename to tango/device_server.py
index 068b567..c00e8da 100644
--- a/src/boost/python/device_server.py
+++ b/tango/device_server.py
@@ -1,5 +1,5 @@
 # ------------------------------------------------------------------------------
-# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+# This file is part of PyTango (http://pytango.rtfd.io)
 #
 # Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
 # Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
@@ -15,19 +15,21 @@ This is an internal PyTango module.
 
 from __future__ import print_function
 
-__all__ = [ "ChangeEventProp", "PeriodicEventProp", "ArchiveEventProp",
-            "AttributeAlarm", "EventProperties",
-            "AttributeConfig", "AttributeConfig_2", "AttributeConfig_3",
-            "MultiAttrProp",
-            "device_server_init"]
+__all__ = [ "ChangeEventProp", "PeriodicEventProp",
+            "ArchiveEventProp","AttributeAlarm", "EventProperties",
+            "AttributeConfig", "AttributeConfig_2",
+            "AttributeConfig_3", "AttributeConfig_5",
+            "MultiAttrProp", "device_server_init"]
 
 __docformat__ = "restructuredtext"
 
 import copy
 
-from ._PyTango import DevFailed, DeviceImpl, Device_3Impl, Device_4Impl, \
-    Attribute, WAttribute, MultiAttribute, MultiClassAttribute, \
-    Attr, Logger, AttrWriteType, AttrDataFormat, DispLevel, UserDefaultAttrProp
+from ._tango import DeviceImpl, Device_3Impl, Device_4Impl, Device_5Impl, \
+    DevFailed, Attribute, WAttribute, \
+    MultiAttribute, MultiClassAttribute, \
+    Attr, Logger, AttrWriteType, AttrDataFormat, CmdArgType, \
+    DispLevel, UserDefaultAttrProp, StdStringVector
 
 from .utils import document_method as __document_method
 from .utils import copy_doc
@@ -159,71 +161,48 @@ class AttributeConfig_3(object):
         self.event_prop = EventProperties()
         self.sys_extensions = []
 
-def __Attribute__get_properties(self, attr_cfg = None):
-    """get_properties(self, attr_cfg = None) -> AttributeConfig
-
-                Get attribute properties.
-
-            Parameters :
-                - conf : (AttributeConfig) the config object to be filled with 
-                         the attribute configuration. Default is None meaning the
-                         method will create internally a new AttributeConfig
-                         and return it
-
-            Return     : (AttributeConfig) the config object filled with
-                         attribute configuration information
-
-            New in PyTango 7.1.4
-    """
-
-    if isinstance(attr_cfg,MultiAttrProp):
-        return self._get_properties_multi_attr_prop(attr_cfg)
-    else:
-        if attr_cfg is None:
-            attr_cfg = AttributeConfig()
-        return self._get_properties(attr_cfg)
-
-def __Attribute__get_properties_2(self, attr_cfg = None):
-    """get_properties_2(self, attr_cfg = None) -> AttributeConfig_2
-
-                Get attribute properties.
-
-            Parameters :
-                - conf : (AttributeConfig_2) the config object to be filled with 
-                         the attribute configuration. Default is None meaning the
-                         method will create internally a new AttributeConfig
-                         and return it
+class AttributeConfig_5(object):
+    """This class represents the python interface for the Tango IDL object
+    AttributeConfig_5."""
 
-            Return     : (AttributeConfig_2) the config object filled with
-                         attribute configuration information
+    def __init__(self):
+        _init_attr_config(self)
+        self.memorized = False
+        self.mem_init = False
+        self.level = -1
+        self.root_attr_name = ''
+        self.enum_labels = []
+        self.att_alarm = AttributeAlarm()
+        self.event_prop = EventProperties()
+        self.sys_extensions = []
 
-            New in PyTango 7.1.4
-    """
 
-    if attr_cfg is None:
-        attr_cfg = AttributeConfig_2()
-    return self._get_properties_2(attr_cfg)
 
-def __Attribute__get_properties_3(self, attr_cfg = None):
-    """get_properties_3(self, attr_cfg = None) -> AttributeConfig_3
+def __Attribute__get_properties(self, attr_cfg = None):
+    """get_properties(self, attr_cfg = None) -> AttributeConfig
 
                 Get attribute properties.
 
             Parameters :
-                - conf : (AttributeConfig_3) the config object to be filled with 
+                - conf : the config object to be filled with
                          the attribute configuration. Default is None meaning the
-                         method will create internally a new AttributeConfig
-                         and return it
+                         method will create internally a new AttributeConfig_5
+                         and return it.
+                         Can be AttributeConfig, AttributeConfig_2,
+                         AttributeConfig_3, AttributeConfig_5 or
+                         MultiAttrProp
 
-            Return     : (AttributeConfig_3) the config object filled with
+            Return     : (AttributeConfig) the config object filled with
                          attribute configuration information
 
             New in PyTango 7.1.4
     """
 
     if attr_cfg is None:
-        attr_cfg = AttributeConfig_3()
-    return self._get_properties_3(attr_cfg)
+        attr_cfg = MultiAttrProp()
+    if not isinstance(attr_cfg, MultiAttrProp):
+        raise TypeError("attr_cfg must be an instance of MultiAttrProp")
+    return self._get_properties_multi_attr_prop(attr_cfg)
 
 def __Attribute__set_properties(self, attr_cfg, dev = None):
     """set_properties(self, attr_cfg, dev) -> None
@@ -234,20 +213,17 @@ def __Attribute__set_properties(self, attr_cfg, dev = None):
                 of the fileds in the AttributeConfig/ AttributeConfig_3 object
 
             Parameters :
-                - conf : (AttributeConfig or AttributeConfig_3) the config 
+                - conf : (AttributeConfig or AttributeConfig_3) the config
                          object.
-                - dev : (DeviceImpl) the device
+                - dev : (DeviceImpl) the device (not used, maintained
+                        for backward compatibility)
 
             New in PyTango 7.1.4
     """
-    
-    if isinstance(attr_cfg,MultiAttrProp):
-        return self._set_properties_multi_attr_prop(attr_cfg)
-    else:
-        if isinstance(attr_cfg, AttributeConfig_3):
-            self._set_properties_3(attr_cfg, dev)
-        else:
-            self._set_properties(attr_cfg, dev)
+
+    if not isinstance(attr_cfg, MultiAttrProp):
+        raise TypeError("attr_cfg must be an instance of MultiAttrProp")
+    return self._set_properties_multi_attr_prop(attr_cfg)
 
 def __Attribute__str(self):
     return '%s(%s)' % (self.__class__.__name__, self.get_name())
@@ -256,8 +232,6 @@ def __init_Attribute():
     Attribute.__str__ = __Attribute__str
     Attribute.__repr__ = __Attribute__str
     Attribute.get_properties = __Attribute__get_properties
-    Attribute.get_properties_2 = __Attribute__get_properties_2
-    Attribute.get_properties_3 = __Attribute__get_properties_3
     Attribute.set_properties = __Attribute__set_properties
     
 def __DeviceImpl__get_device_class(self):
@@ -643,6 +617,22 @@ def __Logger__fatal(self, msg, *args):
     """
     self.__fatal(msg % args)
 
+def __UserDefaultAttrProp_set_enum_labels(self, enum_labels):
+    """
+    set_enum_labels(self, enum_labels) -> None
+
+            Set default enumeration labels.
+
+        Parameters :
+            - enum_labels : (seq<str>) list of enumeration labels
+
+        New in PyTango 9.2.0
+    """
+    elbls = StdStringVector()
+    for enu in enum_labels:
+        elbls.append(enu)
+    return self._set_enum_labels(elbls)
+
 def __Attr__str(self):
     return '%s(%s)' % (self.__class__.__name__, self.get_name())
 
@@ -650,6 +640,9 @@ def __init_Attr():
     Attr.__str__ = __Attr__str
     Attr.__repr__ = __Attr__str
 
+def __init_UserDefaultAttrProp():
+    UserDefaultAttrProp.set_enum_labels = __UserDefaultAttrProp_set_enum_labels
+
 def __init_Logger():
     Logger.log = __Logger__log
     Logger.log_unconditionally = __Logger__log_unconditionally
@@ -1200,6 +1193,25 @@ def __doc_DeviceImpl():
         
         New in PyTango 7.2.1
     """ )
+
+    document_method("is_there_subscriber", """
+    is_there_subscriber(self, att_name, event_type) -> bool
+
+            Check if there is subscriber(s) listening for the event.
+
+            This method returns a boolean set to true if there are some
+            subscriber(s) listening on the event specified by the two method
+            arguments. Be aware that there is some delay (up to 600 sec)
+            between this method returning false and the last subscriber
+            unsubscription or crash...
+
+            The device interface change event is not supported by this method.
+
+        Parameters :
+            - att_name: (str) the attribute name
+            - event_type (EventType): the event type
+        Return     : True if there is at least one listener or False otherwise
+    """ )
     
 def __doc_extra_DeviceImpl(cls):
     def document_method(method_name, desc, append=True):
@@ -1831,7 +1843,7 @@ def __doc_MultiClassAttribute():
 
     MultiClassAttribute.__doc__ = """
     There is one instance of this class for each device class.
-    This class is mainly an aggregate of :class:`~PyTango.Attr` objects. 
+    This class is mainly an aggregate of :class:`~tango.Attr` objects. 
     It eases management of multiple attributes
     
     New in PyTango 7.2.1"""
@@ -1839,7 +1851,7 @@ def __doc_MultiClassAttribute():
     document_method("get_attr", """
     get_attr(self, attr_name) -> Attr
 
-            Get the :class:`~PyTango.Attr` object for the attribute with
+            Get the :class:`~tango.Attr` object for the attribute with
             name passed as parameter
 
         Parameters :
@@ -1854,7 +1866,7 @@ def __doc_MultiClassAttribute():
     document_method("remove_attr", """
     remove_attr(self, attr_name, cl_name) -> None
 
-            Remove the :class:`~PyTango.Attr` object for the attribute with
+            Remove the :class:`~tango.Attr` object for the attribute with
             name passed as parameter. Does nothing if the attribute does not
             exist.
 
@@ -1868,7 +1880,7 @@ def __doc_MultiClassAttribute():
     document_method("get_attr_list", """
     get_attr_list(self) -> seq<Attr>
 
-            Get the list of :class:`~PyTango.Attr` for this device class.
+            Get the list of :class:`~tango.Attr` for this device class.
 
         Return     : (seq<Attr>) the list of attribute objects
         
@@ -1881,15 +1893,15 @@ def __doc_MultiAttribute():
 
     MultiAttribute.__doc__ = """
     There is one instance of this class for each device.
-    This class is mainly an aggregate of :class:`~PyTango.Attribute` or
-    :class:`~PyTango.WAttribute` objects. It eases management of multiple
+    This class is mainly an aggregate of :class:`~tango.Attribute` or
+    :class:`~tango.WAttribute` objects. It eases management of multiple
     attributes"""
     
     document_method("get_attr_by_name", """
     get_attr_by_name(self, attr_name) -> Attribute
 
-            Get :class:`~PyTango.Attribute` object from its name.
-            This method returns an :class:`~PyTango.Attribute` object with a
+            Get :class:`~tango.Attribute` object from its name.
+            This method returns an :class:`~tango.Attribute` object with a
             name passed as parameter. The equality on attribute name is case
             independant.
 
@@ -1903,8 +1915,8 @@ def __doc_MultiAttribute():
     document_method("get_attr_by_ind", """
     get_attr_by_ind(self, ind) -> Attribute
 
-            Get :class:`~PyTango.Attribute` object from its index.
-            This method returns an :class:`~PyTango.Attribute` object from the
+            Get :class:`~tango.Attribute` object from its index.
+            This method returns an :class:`~tango.Attribute` object from the
             index in the main attribute vector.
 
         Parameters :
@@ -1916,7 +1928,7 @@ def __doc_MultiAttribute():
     get_w_attr_by_name(self, attr_name) -> WAttribute
 
             Get a writable attribute object from its name.
-            This method returns an :class:`~PyTango.WAttribute` object with a
+            This method returns an :class:`~tango.WAttribute` object with a
             name passed as parameter. The equality on attribute name is case
             independant.
 
@@ -1931,7 +1943,7 @@ def __doc_MultiAttribute():
     get_w_attr_by_ind(self, ind) -> WAttribute
 
             Get a writable attribute object from its index.
-            This method returns an :class:`~PyTango.WAttribute` object from the
+            This method returns an :class:`~tango.WAttribute` object from the
             index in the main attribute vector.
 
         Parameters :
@@ -1944,7 +1956,7 @@ def __doc_MultiAttribute():
 
             Get Attribute index into the main attribute vector from its name.
             This method returns the index in the Attribute vector (stored in the 
-            :class:`~PyTango.MultiAttribute` object) of an attribute with a
+            :class:`~tango.MultiAttribute` object) of an attribute with a
             given name. The name equality is case independant.
 
         Parameters :
@@ -2605,11 +2617,13 @@ def __doc_UserDefaultAttrProp():
         
         New in PyTango 8.0
     """ )
+
     
 def device_server_init(doc=True):
     __init_DeviceImpl()
     __init_Attribute()
     __init_Attr()
+    __init_UserDefaultAttrProp()
     __init_Logger()
     if doc:
         __doc_DeviceImpl()
diff --git a/src/boost/python/encoded_attribute.py b/tango/encoded_attribute.py
similarity index 96%
rename from src/boost/python/encoded_attribute.py
rename to tango/encoded_attribute.py
index ca39bdd..6187ea4 100644
--- a/src/boost/python/encoded_attribute.py
+++ b/tango/encoded_attribute.py
@@ -1,5 +1,5 @@
 # ------------------------------------------------------------------------------
-# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+# This file is part of PyTango (http://pytango.rtfd.io)
 #
 # Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
 # Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
@@ -19,8 +19,8 @@ __docformat__ = "restructuredtext"
 
 import collections
 
-from ._PyTango import EncodedAttribute, ExtractAs, _ImageFormat
-from ._PyTango import constants
+from ._tango import EncodedAttribute, ExtractAs, _ImageFormat
+from ._tango import constants
 
 from .utils import is_pure_str, is_seq
 
@@ -65,7 +65,7 @@ def __EncodedAttribute_encode_jpeg_gray8(self, gray8, width=0, height=0, quality
        Example::
            
            def read_myattr(self, attr):
-               enc = PyTango.EncodedAttribute()
+               enc = tango.EncodedAttribute()
                data = numpy.arange(100, dtype=numpy.byte)
                data = numpy.array((data,data,data))
                enc.encode_jpeg_gray8(data)
@@ -100,7 +100,7 @@ def __EncodedAttribute_encode_gray8(self, gray8, width=0, height=0):
        Example::
            
            def read_myattr(self, attr):
-               enc = PyTango.EncodedAttribute()
+               enc = tango.EncodedAttribute()
                data = numpy.arange(100, dtype=numpy.byte)
                data = numpy.array((data,data,data))
                enc.encode_gray8(data)
@@ -180,7 +180,7 @@ def __EncodedAttribute_encode_gray16(self, gray16, width=0, height=0):
        Example::
            
            def read_myattr(self, attr):
-               enc = PyTango.EncodedAttribute()
+               enc = tango.EncodedAttribute()
                data = numpy.arange(100, dtype=numpy.int16)
                data = numpy.array((data,data,data))
                enc.encode_gray16(data)
@@ -259,7 +259,7 @@ def __EncodedAttribute_encode_jpeg_rgb24(self, rgb24, width=0, height=0, quality
        Example::
            
            def read_myattr(self, attr):
-               enc = PyTango.EncodedAttribute()
+               enc = tango.EncodedAttribute()
                # 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)
@@ -295,7 +295,7 @@ def __EncodedAttribute_encode_rgb24(self, rgb24, width=0, height=0):
        Example::
            
            def read_myattr(self, attr):
-               enc = PyTango.EncodedAttribute()
+               enc = tango.EncodedAttribute()
                # 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)
@@ -375,7 +375,7 @@ def __EncodedAttribute_encode_jpeg_rgb32(self, rgb32, width=0, height=0, quality
        Example::
            
            def read_myattr(self, attr):
-               enc = PyTango.EncodedAttribute()
+               enc = tango.EncodedAttribute()
                data = numpy.arange(100, dtype=numpy.int32)
                data = numpy.array((data,data,data))
                enc.encode_jpeg_rgb32(data)
@@ -447,9 +447,9 @@ def __EncodedAttribute_decode_gray8(self, da, extract_as=ExtractAs.Numpy):
            that the given :class:`DeviceAttribute` is obtained from a 
            call which **DOESN'T** extract the contents. Example::
                
-               dev = PyTango.DeviceProxy("a/b/c")
-               da = dev.read_attribute("my_attr", extract_as=PyTango.ExtractAs.Nothing)
-               enc = PyTango.EncodedAttribute()
+               dev = tango.DeviceProxy("a/b/c")
+               da = dev.read_attribute("my_attr", extract_as=tango.ExtractAs.Nothing)
+               enc = tango.EncodedAttribute()
                data = enc.decode_gray8(da)
     """
     if hasattr(da, 'value'):
@@ -482,9 +482,9 @@ def __EncodedAttribute_decode_gray16(self, da, extract_as=ExtractAs.Numpy):
            that the given :class:`DeviceAttribute` is obtained from a 
            call which **DOESN'T** extract the contents. Example::
                
-               dev = PyTango.DeviceProxy("a/b/c")
-               da = dev.read_attribute("my_attr", extract_as=PyTango.ExtractAs.Nothing)
-               enc = PyTango.EncodedAttribute()
+               dev = tango.DeviceProxy("a/b/c")
+               da = dev.read_attribute("my_attr", extract_as=tango.ExtractAs.Nothing)
+               enc = tango.EncodedAttribute()
                data = enc.decode_gray16(da)
     """
     if hasattr(da, 'value'):
@@ -517,9 +517,9 @@ def __EncodedAttribute_decode_rgb32(self, da, extract_as=ExtractAs.Numpy):
            that the given :class:`DeviceAttribute` is obtained from a 
            call which **DOESN'T** extract the contents. Example::
                
-               dev = PyTango.DeviceProxy("a/b/c")
-               da = dev.read_attribute("my_attr", extract_as=PyTango.ExtractAs.Nothing)
-               enc = PyTango.EncodedAttribute()
+               dev = tango.DeviceProxy("a/b/c")
+               da = dev.read_attribute("my_attr", extract_as=tango.ExtractAs.Nothing)
+               enc = tango.EncodedAttribute()
                data = enc.decode_rgb32(da)
     """
     if hasattr(da, 'value'):
diff --git a/src/boost/python/exception.py b/tango/exception.py
similarity index 66%
rename from src/boost/python/exception.py
rename to tango/exception.py
index 84b4cf7..5cbc77e 100644
--- a/src/boost/python/exception.py
+++ b/tango/exception.py
@@ -1,5 +1,5 @@
 # ------------------------------------------------------------------------------
-# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+# This file is part of PyTango (http://pytango.rtfd.io)
 #
 # Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
 # Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
@@ -18,15 +18,15 @@ __all__ = ["exception_init"]
 __docformat__ = "restructuredtext"
 
 from .utils import document_static_method as __document_static_method
-from ._PyTango import Except, DevError, ErrSeverity
+from ._tango 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
+    """to_dev_failed(exc_type, exc_value, traceback) -> tango.DevFailed
 
             Generate a TANGO DevFailed exception.
-            The exception is created with a single :class:`~PyTango.DevError`
-            object. A default value *PyTango.ErrSeverity.ERR* is defined for
-            the :class:`~PyTango.DevError` severity field.
+            The exception is created with a single :class:`~tango.DevError`
+            object. A default value *tango.ErrSeverity.ERR* is defined for
+            the :class:`~tango.DevError` severity field.
             
             The parameters are the same as the ones generates by a call to
             :func:`sys.exc_info`.
@@ -38,7 +38,7 @@ def __to_dev_failed(exc_type=None, exc_value=None, traceback=None):
                       if the exception type is a class object)
             - traceback : (traceback) traceback object
         
-        Return     : (PyTango.DevFailed) a tango exception object
+        Return     : (tango.DevFailed) a tango exception object
         
         New in PyTango 7.2.1"""
     try:
@@ -83,36 +83,36 @@ def __doc_Except():
         - compare_exception"""
     
     document_static_method("throw_exception", """
-    throw_exception(reason, desc, origin, sever=PyTango.ErrSeverity.ERR) -> None
+    throw_exception(reason, desc, origin, sever=tango.ErrSeverity.ERR) -> None
 
             Generate and throw a TANGO DevFailed exception.
-            The exception is created with a single :class:`~PyTango.DevError` 
-            object. A default value *PyTango.ErrSeverity.ERR* is defined for 
-            the :class:`~PyTango.DevError` severity field.
+            The exception is created with a single :class:`~tango.DevError` 
+            object. A default value *tango.ErrSeverity.ERR* is defined for 
+            the :class:`~tango.DevError` severity field.
         
         Parameters :
-            - reason : (str) The exception :class:`~PyTango.DevError` object reason field
-            - desc   : (str) The exception :class:`~PyTango.DevError` object desc field
-            - origin : (str) The exception :class:`~PyTango.DevError` object origin field
-            - sever  : (PyTango.ErrSeverity) The exception DevError object severity field
+            - reason : (str) The exception :class:`~tango.DevError` object reason field
+            - desc   : (str) The exception :class:`~tango.DevError` object desc field
+            - origin : (str) The exception :class:`~tango.DevError` object origin field
+            - sever  : (tango.ErrSeverity) The exception DevError object severity field
 
         Throws     : DevFailed
     """ )
 
     document_static_method("re_throw_exception", """
-    re_throw_exception(ex, reason, desc, origin, sever=PyTango.ErrSeverity.ERR) -> None
+    re_throw_exception(ex, reason, desc, origin, sever=tango.ErrSeverity.ERR) -> None
 
-            Re-throw a TANGO :class:`~PyTango.DevFailed` exception with one more error.
-            The exception is re-thrown with one more :class:`~PyTango.DevError` object.
-            A default value *PyTango.ErrSeverity.ERR* is defined for the new
-            :class:`~PyTango.DevError` severity field.
+            Re-throw a TANGO :class:`~tango.DevFailed` exception with one more error.
+            The exception is re-thrown with one more :class:`~tango.DevError` object.
+            A default value *tango.ErrSeverity.ERR* is defined for the new
+            :class:`~tango.DevError` severity field.
         
         Parameters :
-            - ex     : (PyTango.DevFailed) The :class:`~PyTango.DevFailed` exception
-            - reason : (str) The exception :class:`~PyTango.DevError` object reason field
-            - desc   : (str) The exception :class:`~PyTango.DevError` object desc field
-            - origin : (str) The exception :class:`~PyTango.DevError` object origin field
-            - sever  : (PyTango.ErrSeverity) The exception DevError object severity field
+            - ex     : (tango.DevFailed) The :class:`~tango.DevFailed` exception
+            - reason : (str) The exception :class:`~tango.DevError` object reason field
+            - desc   : (str) The exception :class:`~tango.DevError` object desc field
+            - origin : (str) The exception :class:`~tango.DevError` object origin field
+            - sever  : (tango.ErrSeverity) The exception DevError object severity field
 
         Throws     : DevFailed
     """ )
@@ -123,7 +123,7 @@ def __doc_Except():
             Print all the details of a TANGO error stack.
         
         Parameters :
-            - ex     : (PyTango.DevErrorList) The error stack reference
+            - ex     : (tango.DevErrorList) The error stack reference
     """ )
 
     document_static_method("print_exception", """
@@ -132,16 +132,16 @@ def __doc_Except():
             Print all the details of a TANGO exception.
         
         Parameters :
-            - ex     : (PyTango.DevFailed) The :class:`~PyTango.DevFailed` exception
+            - ex     : (tango.DevFailed) The :class:`~tango.DevFailed` exception
     """ )
     
     document_static_method("throw_python_exception", """
     throw_python_exception(type, value, traceback) -> None
 
             Generate and throw a TANGO DevFailed exception.
-            The exception is created with a single :class:`~PyTango.DevError`
-            object. A default value *PyTango.ErrSeverity.ERR* is defined for
-            the :class:`~PyTango.DevError` severity field.
+            The exception is created with a single :class:`~tango.DevError`
+            object. A default value *tango.ErrSeverity.ERR* is defined for
+            the :class:`~tango.DevError` severity field.
             
             The parameters are the same as the ones generates by a call to
             :func:`sys.exc_info`.
diff --git a/src/boost/python/futures.py b/tango/futures.py
similarity index 84%
rename from src/boost/python/futures.py
rename to tango/futures.py
index b34f876..d676888 100644
--- a/src/boost/python/futures.py
+++ b/tango/futures.py
@@ -1,5 +1,5 @@
 # ------------------------------------------------------------------------------
-# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+# This file is part of PyTango (http://pytango.rtfd.io)
 #
 # Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
 # Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
@@ -9,16 +9,16 @@
 # See LICENSE.txt for more info.
 # ------------------------------------------------------------------------------
 
-"""This module exposes a futures version of :class:`PyTango.DeviceProxy` and
-:class:`PyTango.AttributeProxy"""
+"""This module exposes a futures version of :class:`tango.DeviceProxy` and
+:class:`tango.AttributeProxy"""
 
 __all__ = ["DeviceProxy", "AttributeProxy", "check_requirements"]
 
 from functools import partial
 
-from PyTango import GreenMode
-from PyTango.device_proxy import get_device_proxy
-from PyTango.attribute_proxy import get_attribute_proxy
+from tango import GreenMode
+from tango.device_proxy import get_device_proxy
+from tango.attribute_proxy import get_attribute_proxy
 
 
 def check_requirements():
@@ -39,7 +39,7 @@ 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`.
+    Creates a *futures* enabled :class:`~tango.DeviceProxy`.
      
     The DeviceProxy constructor internally makes some network calls which makes
     it *slow*. By using the futures *green mode* you are allowing other
@@ -47,8 +47,8 @@ DeviceProxy.__doc__ = """
 
     .. 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`)
+        timeout (gettable by :meth:`~tango.DeviceProxy.get_timeout_millis` and 
+        settable through :meth:`~tango.DeviceProxy.set_timeout_millis`)
 
     :param dev_name: the device name or alias
     :type dev_name: str
@@ -64,7 +64,7 @@ DeviceProxy.__doc__ = """
     :type timeout: float
     :returns:
         if wait is True:
-            :class:`~PyTango.DeviceProxy`
+            :class:`~tango.DeviceProxy`
         else:
             :class:`concurrent.futures.Future`
     :throws:
@@ -81,7 +81,7 @@ 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`.
+    Creates a *futures* enabled :class:`~tango.AttributeProxy`.
     
     The AttributeProxy constructor internally makes some network calls which
     makes it *slow*. By using the *gevent mode* you are allowing other python
@@ -89,7 +89,7 @@ AttributeProxy.__doc__ = """
 
     :param full_attr_name: the full name of the attribute
     :type full_attr_name: str
-    :param device_proxy: the :class:`~PyTango.DeviceProxy`
+    :param device_proxy: the :class:`~tango.DeviceProxy`
     :type device_proxy: DeviceProxy
     :param attr_name: attribute name for the given device proxy
     :type attr_name: str
@@ -102,7 +102,7 @@ AttributeProxy.__doc__ = """
     :type timeout: float
     :returns:
         if wait is True:
-            :class:`~PyTango.AttributeProxy`
+            :class:`~tango.AttributeProxy`
         else:
             :class:`concurrent.futures.Future`
     :throws:
diff --git a/src/boost/python/gevent.py b/tango/gevent.py
similarity index 85%
rename from src/boost/python/gevent.py
rename to tango/gevent.py
index 72aa86c..8cfdeac 100644
--- a/src/boost/python/gevent.py
+++ b/tango/gevent.py
@@ -1,5 +1,5 @@
 # ------------------------------------------------------------------------------
-# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+# This file is part of PyTango (http://pytango.rtfd.io)
 #
 # Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
 # Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
@@ -9,8 +9,8 @@
 # See LICENSE.txt for more info.
 # ------------------------------------------------------------------------------
 
-"""This module exposes a gevent version of :class:`PyTango.DeviceProxy` and
-:class:`PyTango.AttributeProxy"""
+"""This module exposes a gevent version of :class:`tango.DeviceProxy` and
+:class:`tango.AttributeProxy"""
 
 from __future__ import absolute_import
 
@@ -18,9 +18,9 @@ __all__ = ["DeviceProxy", "AttributeProxy", "check_requirements"]
 
 from functools import partial
     
-from PyTango import GreenMode
-from PyTango.device_proxy import get_device_proxy
-from PyTango.attribute_proxy import get_attribute_proxy
+from tango import GreenMode
+from tango.device_proxy import get_device_proxy
+from tango.attribute_proxy import get_attribute_proxy
 
 
 def check_requirements():
@@ -48,7 +48,7 @@ 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`.
+    Creates a *gevent* enabled :class:`~tango.DeviceProxy`.
      
     The DeviceProxy constructor internally makes some network calls which makes
     it *slow*. By using the gevent *green mode* you are allowing other python
@@ -56,8 +56,8 @@ DeviceProxy.__doc__ = """
 
     .. 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`)
+        timeout (gettable by :meth:`~tango.DeviceProxy.get_timeout_millis` and 
+        settable through :meth:`~tango.DeviceProxy.set_timeout_millis`)
 
     :param dev_name: the device name or alias
     :type dev_name: str
@@ -73,7 +73,7 @@ DeviceProxy.__doc__ = """
     :type timeout: float
     :returns:
         if wait is True:
-            :class:`~PyTango.DeviceProxy`
+            :class:`~tango.DeviceProxy`
         else:
             :class:`gevent.event.AsynchResult`
     :throws:
@@ -90,7 +90,7 @@ 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`.
+    Creates a *gevent* enabled :class:`~tango.AttributeProxy`.
     
     The AttributeProxy constructor internally makes some network calls which
     makes it *slow*. By using the *gevent mode* you are allowing other python
@@ -98,7 +98,7 @@ AttributeProxy.__doc__ = """
 
     :param full_attr_name: the full name of the attribute
     :type full_attr_name: str
-    :param device_proxy: the :class:`~PyTango.DeviceProxy`
+    :param device_proxy: the :class:`~tango.DeviceProxy`
     :type device_proxy: DeviceProxy
     :param attr_name: attribute name for the given device proxy
     :type attr_name: str
@@ -111,7 +111,7 @@ AttributeProxy.__doc__ = """
     :type timeout: float
     :returns:
         if wait is True:
-            :class:`~PyTango.AttributeProxy`
+            :class:`~tango.AttributeProxy`
         else:
             :class:`gevent.event.AsynchResult`
     :throws:
diff --git a/src/boost/python/globals.py b/tango/globals.py
similarity index 97%
rename from src/boost/python/globals.py
rename to tango/globals.py
index f09c0a4..497d4f5 100644
--- a/src/boost/python/globals.py
+++ b/tango/globals.py
@@ -1,5 +1,5 @@
 # ------------------------------------------------------------------------------
-# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+# This file is part of PyTango (http://pytango.rtfd.io)
 #
 # Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
 # Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
diff --git a/tango/green.py b/tango/green.py
new file mode 100644
index 0000000..6933a12
--- /dev/null
+++ b/tango/green.py
@@ -0,0 +1,284 @@
+# -----------------------------------------------------------------------------
+# This file is part of PyTango (http://pytango.rtfd.io)
+#
+# 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", "result", "wait",
+    "get_synch_executor", "synch_submit", "synch_wait",
+    "get_gevent_executor", "gevent_submit", "gevent_wait",
+    "get_futures_executor", "futures_submit", "futures_wait",
+    "get_asyncio_executor", "asyncio_submit", "asyncio_wait",
+    "get_object_submitter", "get_object_waiter", "get_object_green_mode",
+    "green", "green_cb", "get_wait_default_value",
+    "get_event_loop", "get_gevent_event_loop"]
+
+__docformat__ = "restructuredtext"
+
+
+# Imports
+import os
+from functools import wraps, partial
+
+# Tango imports
+from ._tango import GreenMode
+
+# Gevent imports
+from .tango_gevent import get_global_executor as get_gevent_executor
+from .tango_gevent import submit as gevent_submit
+from .tango_gevent import wait as gevent_wait
+from .tango_gevent import get_event_loop as get_gevent_event_loop
+
+# Futures imports
+from .tango_futures import get_global_executor as get_futures_executor
+from .tango_futures import submit as futures_submit
+from .tango_futures import wait as futures_wait
+
+# Asyncio imports
+from .tango_asyncio import get_global_executor as get_asyncio_executor
+from .tango_asyncio import submit as asyncio_submit
+from .tango_asyncio import wait as asyncio_wait
+from .tango_asyncio import get_event_loop as get_asyncio_event_loop
+
+
+# Handle current green mode
+
+__default_green_mode = GreenMode.Synchronous
+try:
+    __current_green_mode = getattr(
+        GreenMode,
+        os.environ["PYTANGO_GREEN_MODE"].capitalize())
+except Exception:
+    __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 __current_green_mode == green_mode:
+        return
+    if green_mode == GreenMode.Gevent:
+        # check if we can change to gevent mode
+        import tango.gevent
+    elif green_mode == GreenMode.Futures:
+        # check if we can change to futures mode
+        import tango.futures
+    elif green_mode == GreenMode.Asyncio:
+        # check if we can change to asyncio mode
+        import tango.asyncio
+    __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
+
+
+# Synchronous execution
+
+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)
+
+
+def synch_wait(res, timeout=None):
+    return res
+
+
+# Excutor, submitter and waiter mapping
+
+__executor_map = {
+    GreenMode.Synchronous: get_synch_executor,
+    GreenMode.Futures:     get_futures_executor,
+    GreenMode.Gevent:      get_gevent_executor,
+    GreenMode.Asyncio:     get_asyncio_executor,
+}
+
+__submit_map = {
+    GreenMode.Synchronous: synch_submit,
+    GreenMode.Futures:     futures_submit,
+    GreenMode.Gevent:      gevent_submit,
+    GreenMode.Asyncio:     asyncio_submit,
+}
+
+__wait_map = {
+    GreenMode.Synchronous: synch_wait,
+    GreenMode.Futures:     futures_wait,
+    GreenMode.Gevent:      gevent_wait,
+    GreenMode.Asyncio:     asyncio_wait,
+}
+
+
+__event_loop_map = {
+    GreenMode.Synchronous: (lambda: None),
+    GreenMode.Futures:     (lambda: None),
+    GreenMode.Gevent:      get_gevent_event_loop,
+    GreenMode.Asyncio:     get_asyncio_event_loop,
+}
+
+
+# Getters
+
+def get_executor(mode):
+    return __executor_map[mode]()
+
+
+def get_submitter(mode):
+    return __submit_map[mode]
+
+
+def get_waiter(mode):
+    return __wait_map[mode]
+
+
+def get_wait_default_value(mode):
+    if mode is None:
+        mode = get_green_mode()
+    return mode not in (GreenMode.Asyncio,)
+
+
+# Generic submitter/spawner and waiter
+
+def submit(mode, fn, *args, **kwargs):
+    return get_submitter(mode)(fn, *args, **kwargs)
+
+spawn = submit
+
+
+def wait_result(ret, green_mode=None, timeout=None):
+    if green_mode is None:
+        green_mode = get_green_mode()
+    return get_waiter(green_mode)(ret, timeout=timeout)
+
+wait = wait_result
+
+
+def result(ret, green_mode=None, wait=True, timeout=None):
+    if not wait:
+        return ret
+    return wait_result(ret, green_mode=green_mode, timeout=timeout)
+
+
+def get_event_loop(mode):
+    return __event_loop_map[mode]()
+
+
+# Get object submitter, waiter and green_mode
+
+def get_object_green_mode(obj):
+    if hasattr(obj, "get_green_mode"):
+        return obj.get_green_mode()
+    return get_green_mode()
+
+
+def get_object_submitter(obj, green_mode=None):
+    """Returns the proper submit callable for the given object.
+
+    If the object has *_executors* and *_green_mode* members it returns
+    the submit callable for the executor corresponding to the green_mode.
+    Otherwise it returns the global submit callable for the given green_mode.
+
+    :returns: submit callable"""
+    # Get green mode
+    if green_mode is None:
+        green_mode = get_object_green_mode(obj)
+    # Get executor
+    executors = getattr(obj, "_executors", {})
+    executor = executors.get(green_mode, None)
+    if executor is None:
+        executor = get_executor(green_mode)
+    # Get submitter
+    if green_mode == GreenMode.Gevent:
+        return executor.spawn
+    return executor.submit
+
+
+def get_object_waiter(obj, green_mode=None):
+    """Returns the proper wait callable for the given object.
+
+    If the object has *_executors* and *_green_mode* members it returns
+    the wait callable for the executor corresponding to the green_mode.
+    Otherwise it returns the global wait callable for the given green_mode.
+
+    :returns: wait callable"""
+    # Get green mode
+    if green_mode is None:
+        green_mode = get_object_green_mode(obj)
+    # Get waiter
+    waiter = get_waiter(green_mode)
+    # Asyncio corner case
+    if green_mode == GreenMode.Asyncio:
+        executors = getattr(obj, "_executors", {})
+        executor = executors.get(GreenMode.Asyncio)
+        if executor is None:
+            return waiter
+        return partial(waiter, loop=executor.loop)
+    # Return waiter
+    return waiter
+
+
+# Green decorators
+
+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', get_object_green_mode(self))
+        wait = kwargs.pop('wait', get_wait_default_value(green_mode))
+        timeout = kwargs.pop('timeout', None)
+
+        # get the proper submitable for the given green_mode
+        submitter = get_object_submitter(self, green_mode)
+        waiter = get_object_waiter(self, green_mode)
+
+        # submit the method
+        ret = submitter(fn, self, *args, **kwargs)
+
+        # return the proper result
+        return waiter(ret, timeout=timeout) if wait else ret
+
+    return greener
+
+
+def green_cb(fn, green_mode=None):
+    """return a green verion of the given callback."""
+    event_loop = get_event_loop(green_mode)
+    if event_loop is None:
+        return fn
+
+    @wraps(fn)
+    def greener(*args, **kwargs):
+        event_loop.submit(fn, *args, **kwargs)
+
+    return greener
diff --git a/src/boost/python/group.py b/tango/group.py
similarity index 92%
rename from src/boost/python/group.py
rename to tango/group.py
index d97e9c4..69e4639 100644
--- a/src/boost/python/group.py
+++ b/tango/group.py
@@ -1,5 +1,5 @@
 # ------------------------------------------------------------------------------
-# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+# This file is part of PyTango (http://pytango.rtfd.io)
 #
 # Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
 # Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
@@ -13,32 +13,33 @@
 This is an internal PyTango module.
 """
 
-__all__ = [ "Group", "group_init" ]
+__all__ = ["Group", "group_init"]
 
 __docformat__ = "restructuredtext"
 
-import operator
-
-from ._PyTango import __Group as _RealGroup, StdStringVector
+from ._tango import __Group as _RealGroup, StdStringVector
 from .utils import seq_2_StdStringVector, is_pure_str
 from .utils import document_method as __document_method
 import collections
 
+
 def _apply_to(fn, key):
     if isinstance(key, slice):
         if key.step:
-            return [ fn(x) for x in range(key.start, key.stop, key.step) ]
+            return [fn(x) for x in range(key.start, key.stop, key.step)]
         else:
-            return [ fn(x) for x in range(key.start, key.stop) ]
+            return [fn(x) for x in range(key.start, key.stop)]
     else:
         return fn(key)
 
+
 def _get_one_item(group, key):
     x = group.get_group(key)
     if x is not None:
         return x
     return group.get_device(key)
 
+
 # I define Group as a proxy to __Group, where group is the actual
 # C++ Tango::Group object. Most functions just call the __group object
 # and are defined dynamically in __init_proxy_Group, also copying it's
@@ -46,20 +47,22 @@ def _get_one_item(group, key):
 # The proxy is useful for add(group). In this case the parameter 'group'
 # becomes useless. With the proxy we make that parameter come to live
 # again before returning.
-# The other function that needs to be adapted to this is get_group because
+# Another function that needs to be adapted to this is get_group because
 # we want to return a Group, not a __Group!
+# The get_device method also needs to be adapted in order to properly
+# initialize the returned proxy with its python attributes.
 class Group:
     """A Tango Group represents a hierarchy of tango devices. The hierarchy
     may have more than one level. The main goal is to group devices with
     same attribute(s)/command(s) to be able to do parallel requests."""
-    
+
     def __init__(self, name):
         if is_pure_str(name):
             name = _RealGroup(name)
         if not isinstance(name, _RealGroup):
             raise TypeError("Constructor expected receives a str")
         self.__group = name
-    
+
     def add(self, pattern_subgroup, timeout_ms=-1):
         if isinstance(pattern_subgroup, Group):
             name = pattern_subgroup.__group.get_name()
@@ -90,15 +93,20 @@ class Group:
         else:
             raise TypeError('Parameter patterns: Should be a str or a sequence of str.')
 
+    def get_device(self, name_or_index):
+        proxy = self.__group.get_device(name_or_index)
+        proxy.__init__(proxy)
+        return proxy
+
     def get_group(self, group_name):
         internal = self.__group.get_group(group_name)
         if internal is None:
             return None
         return Group(internal)
-    
+
     def __contains__(self, pattern):
         return self.contains(pattern)
-        
+
     def __getitem__(self, key):
         fn = lambda x: _get_one_item(self, x)
         return _apply_to(fn, key)
@@ -129,18 +137,19 @@ class Group:
         idx = self.__group.write_attribute_asynch(attr_name, value, forward=forward, multi=multi)
         return self.__group.write_attribute_reply(idx)
 
+
 def __init_proxy_Group():
     proxy_methods = [
-        #'add',
+        # 'add',  # Needs to be adapted
         'command_inout_asynch',
         'command_inout_reply',
         'contains',
         'disable',
         'enable',
-        'get_device',
+        # 'get_device',  # Needs to be adapted
         'get_device_list',
         'get_fully_qualified_name',
-        #'get_group',
+        # 'get_group',   # Needs to be adapted
         'get_name',
         'get_size',
         'is_enabled',
@@ -154,8 +163,8 @@ def __init_proxy_Group():
         'remove_all',
         'set_timeout_millis',
         'write_attribute_asynch',
-        'write_attribute_reply',]
-        
+        'write_attribute_reply']
+
     def proxy_call_define(fname):
         def fn(self, *args, **kwds):
             return getattr(self._Group__group, fname)(*args, **kwds)
@@ -164,10 +173,10 @@ def __init_proxy_Group():
 
     for fname in proxy_methods:
         proxy_call_define(fname)
-    
-    #Group.add.__func__.__doc__ = _RealGroup.add.__doc__
-    #Group.get_group.__func__.__doc__ = _RealGroup.get_group.__doc__
-    #Group.__doc__ = _RealGroup.__doc__
+
+    # Group.add.__func__.__doc__ = _RealGroup.add.__doc__
+    # Group.get_group.__func__.__doc__ = _RealGroup.get_group.__doc__
+    # Group.__doc__ = _RealGroup.__doc__
 
 
 def __doc_Group():
@@ -176,7 +185,7 @@ def __doc_Group():
 
     document_method("_add", """
     add(self, patterns, timeout_ms=-1) -> None
-        
+
             Attaches any device which name matches one of the specified patterns.
 
             This method first asks to the Tango database the list of device names
@@ -199,25 +208,25 @@ def __doc_Group():
         Return     : None
 
         Throws     : TypeError, ArgumentError
-    """ )
+    """)
 
     document_method("_remove", """
     remove(self, patterns, forward=True) -> None
-        
-            Removes any group or device which name matches the specified pattern. 
-            
+
+            Removes any group or device which name matches the specified pattern.
+
             The pattern parameter can be a group name, a device name or a device
             name pattern (e.g domain_*/family/member_*).
-            
+
             Since we can have groups with the same name in the hierarchy, a group
             name can be fully qualified to specify which group should be removed.
             Considering the following group:
 
                 ::
 
-                    -> gauges 
-                    | -> cell-01 
-                    |     |-> penning 
+                    -> gauges
+                    | -> cell-01
+                    |     |-> penning
                     |     |    |-> ...
                     |     |-> pirani
                     |          |-> ...
@@ -227,14 +236,14 @@ def __doc_Group():
                     |     |-> pirani
                     |          |-> ...
                     | -> cell-03
-                    |     |-> ... 
-                    |     
-                    | -> ...  
-            
+                    |     |-> ...
+                    |
+                    | -> ...
+
             A call to gauges->remove("penning") will remove any group named
             "penning" in the hierarchy while gauges->remove("gauges.cell-02.penning")
             will only remove the specified group.
-        
+
         Parameters :
             - patterns   : (str | sequence<str>) A string with the pattern or a
                            list of patterns.
@@ -243,36 +252,36 @@ def __doc_Group():
                            it is only applied to the local set of elements.
                            For instance, the following code remove any
                            stepper motor in the hierarchy:
-                           
+
                                root_group->remove("*/stepper_motor/*");
-                
+
         Return     : None
-        
-        Throws     : 
+
+        Throws     :
     """ )
 
     document_method("remove_all", """
     remove_all(self) -> None
-    
+
         Removes all elements in the _RealGroup. After such a call, the _RealGroup is empty.
     """ )
 
     document_method("contains", """
     contains(self, pattern, forward=True) -> bool
-        
+
         Parameters :
             - pattern    : (str) The pattern can be a fully qualified or simple
                             group name, a device name or a device name pattern.
             - forward    : (bool) If fwd is set to true (the default), the remove
                             request is also forwarded to subgroups. Otherwise,
                             it is only applied to the local set of elements.
-                
+
         Return     : (bool) Returns true if the hierarchy contains groups and/or
                      devices which name matches the specified pattern. Returns
                      false otherwise.
-        
-        Throws     : 
-    """ )
+
+        Throws     :
+    """)
 
 
     document_method("get_device", """
@@ -302,11 +311,11 @@ def __doc_Group():
             The request is systematically forwarded to subgroups (i.e. if no device
             named device_name could be found in the local set of devices, the
             request is forwarded to subgroups).
-            
+
         Parameters :
             - dev_name    : (str) Device name.
             - idx         : (int) Device number.
-                
+
         Return     : (DeviceProxy) Be aware that this method returns a
                     different DeviceProxy referring to the same device each time.
                     So, do not use it directly for permanent things.
@@ -320,9 +329,9 @@ def __doc_Group():
                         # GOOD:
                         dp = g.get_device("my/device/01")
                         dp.subscribe_events('attr', callback)
-        
+
         Throws     : DevFailed
-    """ )
+    """)
 
     document_method("get_device_list", """
     get_device_list(self, forward=True) -> sequence<str>
@@ -330,17 +339,17 @@ def __doc_Group():
             Considering the following hierarchy:
 
             ::
-        
+
                 g2.add("my/device/04")
                 g2.add("my/device/05")
-                
+
                 g4.add("my/device/08")
                 g4.add("my/device/09")
-                
+
                 g3.add("my/device/06")
                 g3.add(g4)
                 g3.add("my/device/07")
-                
+
                 g1.add("my/device/01")
                 g1.add(g2)
                 g1.add("my/device/03")
@@ -351,7 +360,7 @@ def __doc_Group():
             If set to true, the results will be organized as follows:
 
             ::
-        
+
                     dl = g1.get_device_list(True)
 
                 dl[0] contains "my/device/01" which belongs to g1
@@ -363,11 +372,11 @@ def __doc_Group():
                 dl[6] contains "my/device/09" which belongs to g1.g3.g4
                 dl[7] contains "my/device/07" which belongs to g1.g3
                 dl[8] contains "my/device/02" which belongs to g1
-                
+
             If the forward option is set to false, the results are:
 
             ::
-        
+
                     dl = g1.get_device_list(False);
 
                 dl[0] contains "my/device/01" which belongs to g1
@@ -379,12 +388,12 @@ def __doc_Group():
             - forward : (bool) If it is set to true (the default), the request
                         is forwarded to sub-groups. Otherwise, it is only
                         applied to the local set of devices.
-                
+
         Return     : (sequence<str>) The list of devices currently in the hierarchy.
-        
+
         Throws     :
-    """ )
-    
+    """)
+
     document_method("get_group", """
     get_group(self, group_name ) -> Group
 
@@ -394,13 +403,13 @@ def __doc_Group():
             Considering the following group:
 
             ::
-                    
+
                 -> gauges
                     |-> cell-01
                     |    |-> penning
-                    |    |    |-> ... 
+                    |    |    |-> ...
                     |    |-> pirani
-                    |    |-> ... 
+                    |    |-> ...
                     |-> cell-02
                     |    |-> penning
                     |    |    |-> ...
@@ -409,65 +418,65 @@ def __doc_Group():
                     | -> cell-03
                     |    |-> ...
                     |
-                    | -> ...  
+                    | -> ...
 
             A call to gauges.get_group("penning") returns the first group named
             "penning" in the hierarchy (i.e. gauges.cell-01.penning) while
             gauges.get_group("gauges.cell-02.penning'') returns the specified group.
-            
+
             The request is systematically forwarded to subgroups (i.e. if no group
             named group_name could be found in the local set of elements, the request
             is forwarded to subgroups).
-        
+
         Parameters :
             - group_name : (str)
-        
+
         Return     : (Group)
-        
+
         Throws     :
-        
+
         New in PyTango 7.0.0
-    """ )
+    """)
 
 # Tango methods (~ DeviceProxy interface)
     document_method("ping", """
     ping(self, forward=True) -> bool
 
             Ping all devices in a group.
-        
+
         Parameters :
             - forward    : (bool) If fwd is set to true (the default), the request
                             is also forwarded to subgroups. Otherwise, it is
                             only applied to the local set of devices.
-                
+
         Return     : (bool) This method returns true if all devices in
                      the group are alive, false otherwise.
-        
-        Throws     : 
-    """ )
+
+        Throws     :
+    """)
 
     document_method("set_timeout_millis", """
     set_timeout_millis(self, timeout_ms) -> bool
-        
+
             Set client side timeout for all devices composing the group in
             milliseconds. Any method which takes longer than this time to execute
             will throw an exception.
 
         Parameters :
             - timeout_ms : (int)
-                
+
         Return     : None
-        
+
         Throws     : (errors are ignored)
 
         New in PyTango 7.0.0
-    """ )
+    """)
 
     document_method("command_inout_asynch", """
     command_inout_asynch(self, cmd_name, forget=False, forward=True, reserved=-1 ) -> int
     command_inout_asynch(self, cmd_name, param, forget=False, forward=True, reserved=-1 ) -> int
     command_inout_asynch(self, cmd_name, param_list, forget=False, forward=True, reserved=-1 ) -> int
-    
+
             Executes a Tango command on each device in the group asynchronously.
             The method sends the request to all devices and returns immediately.
             Pass the returned request id to Group.command_inout_reply() to obtain
@@ -476,7 +485,7 @@ def __doc_Group():
         Parameters :
             - cmd_name   : (str) Command name
             - param      : (any) parameter value
-            - param_list : (PyTango.DeviceDataList) sequence of parameters.
+            - param_list : (tango.DeviceDataList) sequence of parameters.
                            When given, it's length must match the group size.
             - forget     : (bool) Fire and forget flag. If set to true, it means that
                            no reply is expected (i.e. the caller does not care
@@ -486,12 +495,12 @@ def __doc_Group():
                             to the local set of devices.
             - reserved : (int) is reserved for internal purpose and should not be
                             used. This parameter may disappear in a near future.
-                
+
         Return     : (int) request id. Pass the returned request id to
                     Group.command_inout_reply() to obtain the results.
-        
+
         Throws     :
-    """ )
+    """)
 
     document_method("command_inout_reply", """
     command_inout_reply(self, req_id, timeout_ms=0) -> sequence<GroupCmdReply>
@@ -507,11 +516,11 @@ def __doc_Group():
                             exception. This exception will be part of the
                             global reply. If timeout_ms is set to 0,
                             command_inout_reply waits "indefinitely".
-                
+
         Return     : (sequence<GroupCmdReply>)
-        
-        Throws     : 
-    """ )
+
+        Throws     :
+    """)
 
     document_method("read_attribute_asynch", """
     read_attribute_asynch(self, attr_name, forward=True, reserved=-1 ) -> int
@@ -526,10 +535,10 @@ def __doc_Group():
                             to the local set of devices.
             - reserved  : (int) is reserved for internal purpose and should not be
                             used. This parameter may disappear in a near future.
-                
+
         Return     : (int) request id. Pass the returned request id to
                     Group.read_attribute_reply() to obtain the results.
-        
+
         Throws     :
     """ )
 
@@ -546,10 +555,10 @@ def __doc_Group():
                             to the local set of devices.
             - reserved   : (int) is reserved for internal purpose and should not be
                             used. This parameter may disappear in a near future.
-                
+
         Return     : (int) request id. Pass the returned request id to
                     Group.read_attributes_reply() to obtain the results.
-        
+
         Throws     :
     """ )
 
@@ -566,11 +575,11 @@ def __doc_Group():
                             exception. This exception will be part of the
                             global reply. If timeout_ms is set to 0,
                             read_attribute_reply waits "indefinitely".
-                
+
         Return     : (sequence<GroupAttrReply>)
-        
+
         Throws     :
-    """ )
+    """)
 
     document_method("read_attributes_reply", """
     read_attributes_reply(self, req_id, timeout_ms=0 ) -> sequence<GroupAttrReply>
@@ -585,11 +594,11 @@ def __doc_Group():
                            exception. This exception will be part of the
                            global reply. If timeout_ms is set to 0,
                            read_attributes_reply waits "indefinitely".
-                
+
         Return     : (sequence<GroupAttrReply>)
-        
+
         Throws     :
-    """ )
+    """)
 
     document_method("write_attribute_asynch", """
     write_attribute_asynch(self, attr_name, value, forward=True, multi=False ) -> int
@@ -609,13 +618,13 @@ def __doc_Group():
                           values, and each value is applied to the corresponding
                           device in the group. In this case len(value) must be
                           equal to group.get_size()!
-                
+
         Return     : (int) request id. Pass the returned request id to
                     Group.write_attribute_reply() to obtain the acknowledgements.
-        
+
         Throws     :
-    """ )
-        
+    """)
+
     document_method("write_attribute_reply", """
     write_attribute_reply(self, req_id, timeout_ms=0 ) -> sequence<GroupReply>
 
@@ -629,19 +638,19 @@ def __doc_Group():
                             exception. This exception will be part of the
                             global reply. If timeout_ms is set to 0,
                             write_attribute_reply waits "indefinitely".
-                
+
         Return     : (sequence<GroupReply>)
-        
+
         Throws     :
-    """ )
-        
+    """)
+
     document_method("get_name", """
         Get the name of the group. Eg: Group('name').get_name() == 'name'
-    """ )
+    """)
     document_method("get_fully_qualified_name", """
         Get the complete (dpt-separated) name of the group. This takes into
         consideration the name of the group and its parents.
-    """ )
+    """)
     document_method("enable", "Enables a group or a device element in a group.")
     document_method("disable", "Disables a group or a device element in a group.")
     document_method("is_enabled", "Check if a group is enabled.\nNew in PyTango 7.0.0")
@@ -653,21 +662,21 @@ def __doc_Group():
         Parameters :
             - forward : (bool) If it is set to true (the default), the request is
                         forwarded to sub-groups.
-                
+
         Return     : (int) The number of the devices in the hierarchy
-        
+
         Throws     :
-    """ )
-    
+    """)
+
     def document_method(method_name, desc, append=True):
         return __document_method(Group, method_name, desc, append)
 
     document_method("add", _RealGroup._add.__doc__, False)
     document_method("add", """
     add(self, subgroup, timeout_ms=-1) -> None
-        
+
             Attaches a (sub)_RealGroup.
-            
+
             To remove the subgroup use the remove() method.
 
         Parameters :
@@ -680,7 +689,7 @@ def __doc_Group():
         Return     : None
 
         Throws     : TypeError, ArgumentError
-    """ )
+    """)
 
     document_method("command_inout", """
     command_inout(self, cmd_name, forward=True) -> sequence<GroupCmdReply>
@@ -693,36 +702,37 @@ def __doc_Group():
         Parameters:
             - cmd_name   : (str) Command name
             - param      : (any) parameter value
-            - param_list : (PyTango.DeviceDataList) sequence of parameters.
+            - param_list : (tango.DeviceDataList) sequence of parameters.
                            When given, it's length must match the group size.
             - forward    : (bool) If it is set to true (the default) request is
                             forwarded to subgroups. Otherwise, it is only applied
                             to the local set of devices.
 
         Return : (sequence<GroupCmdReply>)
-    """ )
+    """)
 
     document_method("read_attribute", """
     read_attribute(self, attr_name, forward=True) -> sequence<GroupAttrReply>
 
             Just a shortcut to do:
                 self.read_attribute_reply(self.read_attribute_asynch(...))
-    """ )
+    """)
 
     document_method("read_attributes", """
     read_attributes(self, attr_names, forward=True) -> sequence<GroupAttrReply>
 
             Just a shortcut to do:
                 self.read_attributes_reply(self.read_attributes_asynch(...))
-    """ )
-    
+    """)
+
     document_method("write_attribute", """
     write_attribute(self, attr_name, value, forward=True, multi=False) -> sequence<GroupReply>
 
             Just a shortcut to do:
                 self.write_attribute_reply(self.write_attribute_asynch(...))
-    """ )
-    
+    """)
+
+
 def group_init(doc=True):
     if doc:
         __doc_Group()
diff --git a/src/boost/python/group_reply.py b/tango/group_reply.py
similarity index 95%
rename from src/boost/python/group_reply.py
rename to tango/group_reply.py
index 1ac3773..f717bdd 100644
--- a/src/boost/python/group_reply.py
+++ b/tango/group_reply.py
@@ -1,5 +1,5 @@
 # ------------------------------------------------------------------------------
-# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+# This file is part of PyTango (http://pytango.rtfd.io)
 #
 # Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
 # Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
@@ -18,7 +18,7 @@ __all__ = ["group_reply_init"]
 __docformat__ = "restructuredtext"
 
 from .utils import document_method as __document_method
-from ._PyTango import GroupReply, GroupCmdReply, GroupAttrReply, ExtractAs
+from ._tango import GroupReply, GroupCmdReply, GroupAttrReply, ExtractAs
 
 def __GroupCmdReply__get_data(self):
     return self.get_data_raw().extract()
diff --git a/src/boost/python/group_reply_list.py b/tango/group_reply_list.py
similarity index 95%
rename from src/boost/python/group_reply_list.py
rename to tango/group_reply_list.py
index 9f5067d..6c6eba3 100644
--- a/src/boost/python/group_reply_list.py
+++ b/tango/group_reply_list.py
@@ -1,5 +1,5 @@
 # ------------------------------------------------------------------------------
-# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+# This file is part of PyTango (http://pytango.rtfd.io)
 #
 # Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
 # Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
@@ -17,7 +17,7 @@ __all__ = ["group_reply_list_init"]
 
 __docformat__ = "restructuredtext"
 
-from ._PyTango import GroupReplyList, GroupCmdReplyList, GroupAttrReplyList
+from ._tango import GroupReplyList, GroupCmdReplyList, GroupAttrReplyList
 
 
 def __GroupReplyList__getitem(self, item):
diff --git a/src/boost/python/log4tango.py b/tango/log4tango.py
similarity index 86%
rename from src/boost/python/log4tango.py
rename to tango/log4tango.py
index 050977c..97a16df 100644
--- a/src/boost/python/log4tango.py
+++ b/tango/log4tango.py
@@ -1,5 +1,5 @@
 # ------------------------------------------------------------------------------
-# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+# This file is part of PyTango (http://pytango.rtfd.io)
 #
 # Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
 # Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
@@ -11,17 +11,17 @@
 
 """
 This is an internal PyTango module. It provides tango log classes that can
-be used as decorators in any method of :class:`PyTango.DeviceImpl`.
+be used as decorators in any method of :class:`tango.DeviceImpl`.
 
-To access these members use directly :mod:`PyTango` module and NOT PyTango.log4tango.
+To access these members use directly :mod:`tango` module and NOT tango.log4tango.
 
 Example::
 
-    import PyTango
+    import tango
     
-    class MyDev(PyTango.Device_4Impl):
+    class MyDev(tango.Device_4Impl):
         
-        PyTango.InfoIt()
+        tango.InfoIt()
         def read_Current(self, attr):
             attr.set_value(self._current)
 """
@@ -60,20 +60,20 @@ class TangoStream:
 
 class LogIt(object):
     """A class designed to be a decorator of any method of a 
-    :class:`PyTango.DeviceImpl` subclass. The idea is to log the entrance and 
+    :class:`tango.DeviceImpl` subclass. The idea is to log the entrance and 
     exit of any decorated method.
 
     Example::
     
-        class MyDevice(PyTango.Device_4Impl):
+        class MyDevice(tango.Device_4Impl):
             
-            @PyTango.LogIt()
+            @tango.LogIt()
             def read_Current(self, attr):
                 attr.set_value(self._current, 1)
 
     All log messages generated by this class have DEBUG level. If you whish
     to have different log level messages, you should implement subclasses that
-    log to those levels. See, for example, :class:`PyTango.InfoIt`.
+    log to those levels. See, for example, :class:`tango.InfoIt`.
 
     The constructor receives three optional arguments:
         * show_args - shows method arguments in log message (defaults to False)
@@ -154,14 +154,14 @@ class LogIt(object):
 
 class DebugIt(LogIt):
     """A class designed to be a decorator of any method of a 
-    :class:`PyTango.DeviceImpl` subclass. The idea is to log the entrance and 
+    :class:`tango.DeviceImpl` subclass. The idea is to log the entrance and 
     exit of any decorated method as DEBUG level records.
 
     Example::
     
-        class MyDevice(PyTango.Device_4Impl):
+        class MyDevice(tango.Device_4Impl):
             
-            @PyTango.DebugIt()
+            @tango.DebugIt()
             def read_Current(self, attr):
                 attr.set_value(self._current, 1)
 
@@ -182,14 +182,14 @@ class DebugIt(LogIt):
 
 class InfoIt(LogIt):
     """A class designed to be a decorator of any method of a 
-    :class:`PyTango.DeviceImpl` subclass. The idea is to log the entrance and 
+    :class:`tango.DeviceImpl` subclass. The idea is to log the entrance and 
     exit of any decorated method as INFO level records.
 
     Example::
     
-        class MyDevice(PyTango.Device_4Impl):
+        class MyDevice(tango.Device_4Impl):
             
-            @PyTango.InfoIt()
+            @tango.InfoIt()
             def read_Current(self, attr):
                 attr.set_value(self._current, 1)
 
@@ -210,14 +210,14 @@ class InfoIt(LogIt):
 
 class WarnIt(LogIt):
     """A class designed to be a decorator of any method of a 
-    :class:`PyTango.DeviceImpl` subclass. The idea is to log the entrance and 
+    :class:`tango.DeviceImpl` subclass. The idea is to log the entrance and 
     exit of any decorated method as WARN level records.
 
     Example::
     
-        class MyDevice(PyTango.Device_4Impl):
+        class MyDevice(tango.Device_4Impl):
             
-            @PyTango.WarnIt()
+            @tango.WarnIt()
             def read_Current(self, attr):
                 attr.set_value(self._current, 1)
 
@@ -238,14 +238,14 @@ class WarnIt(LogIt):
 
 class ErrorIt(LogIt):
     """A class designed to be a decorator of any method of a 
-    :class:`PyTango.DeviceImpl` subclass. The idea is to log the entrance and 
+    :class:`tango.DeviceImpl` subclass. The idea is to log the entrance and 
     exit of any decorated method as ERROR level records.
 
     Example::
     
-        class MyDevice(PyTango.Device_4Impl):
+        class MyDevice(tango.Device_4Impl):
             
-            @PyTango.ErrorIt()
+            @tango.ErrorIt()
             def read_Current(self, attr):
                 attr.set_value(self._current, 1)
 
@@ -266,14 +266,14 @@ class ErrorIt(LogIt):
 
 class FatalIt(LogIt):
     """A class designed to be a decorator of any method of a 
-    :class:`PyTango.DeviceImpl` subclass. The idea is to log the entrance and 
+    :class:`tango.DeviceImpl` subclass. The idea is to log the entrance and 
     exit of any decorated method as FATAL level records.
 
     Example::
     
-        class MyDevice(PyTango.Device_4Impl):
+        class MyDevice(tango.Device_4Impl):
             
-            @PyTango.FatalIt()
+            @tango.FatalIt()
             def read_Current(self, attr):
                 attr.set_value(self._current, 1)
 
diff --git a/tango/pipe.py b/tango/pipe.py
new file mode 100644
index 0000000..407e031
--- /dev/null
+++ b/tango/pipe.py
@@ -0,0 +1,168 @@
+# ------------------------------------------------------------------------------
+# This file is part of PyTango (http://pytango.rtfd.io)
+#
+# 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__ = ['PipeConfig']
+
+
+
+from ._tango import Pipe, PipeWriteType, UserDefaultPipeProp, \
+    AttrDataFormat, CmdArgType, DevState, DispLevel, constants
+
+from .utils import scalar_to_array_type, TO_TANGO_TYPE, \
+    is_non_str_seq, is_pure_str, is_integer, is_number
+from .utils import document_method as __document_method
+
+
+class PipeConfig(object):
+    """
+    This class represents the python interface for the Tango IDL
+    object PipeConfig."""
+
+    def __init__(self):
+        self.name = ''
+        self.description = ''
+        self.label = ''
+        self.level = DispLevel.OPERATOR
+        self.writable = PipeWriteType.PIPE_READ
+        self.extensions = []
+
+
+def __get_pipe_type_simple(obj):
+    if is_non_str_seq(obj):
+        if len(obj) == 2 and \
+           is_pure_str(obj[0]) and \
+           (is_non_str_seq(obj[1]) or isinstance(obj[1], dict)):
+            tg_type = CmdArgType.DevPipeBlob
+        else:
+            tg_type = __get_pipe_type(obj[0])
+            tg_type = scalar_to_array_type(tg_type)
+    elif is_pure_str(obj):
+        tg_type = CmdArgType.DevString
+    elif isinstance(obj, DevState):
+        tg_type = CmdArgType.DevState
+    elif isinstance(obj, bool):
+        tg_type = CmdArgType.DevBoolean
+    elif is_integer(obj):
+        tg_type = CmdArgType.DevLong64
+    elif is_number(obj):
+        tg_type = CmdArgType.DevDouble
+    else:
+        raise ValueError('Cannot determine object tango type')
+    return tg_type
+
+    
+def __get_pipe_type_numpy_support(obj):
+    import numpy
+    try:
+        ndim, dtype = obj.ndim, str(obj.dtype)
+    except AttributeError:
+        return __get_pipe_type_simple(obj)
+    if ndim > 1:
+        raise TypeError('cannot translate numpy array with {0} '
+                        'dimensions to tango type'.format(obj.ndim))
+    tg_type = TO_TANGO_TYPE[dtype]
+    if ndim > 0:
+        tg_type = scalar_to_array_type(dtype)
+    return tg_type
+
+
+def __get_tango_type(dtype):
+    if is_non_str_seq(dtype):
+        tg_type = dtype[0]
+        if is_non_str_seq(tg_type):
+            raise TypeError("Pipe doesn't support 2D data")
+        tg_type = TO_TANGO_TYPE[tg_type]
+        tg_type = scalar_to_array_type(tg_type)
+    else:
+        tg_type = TO_TANGO_TYPE[dtype]
+    return tg_type
+
+
+def __get_pipe_type(obj, dtype=None):
+    if dtype is not None:
+        return __get_tango_type(dtype)
+    if constants.NUMPY_SUPPORT:
+        return __get_pipe_type_numpy_support(obj)
+    return __get_pipe_type_simple(obj)
+
+
+def __sanatize_pipe_element(elem):
+    if isinstance(elem, dict):
+        result = dict(elem)
+    else:
+        result = dict(name=elem[0], value=elem[1])
+    result['value'] = value = result.get('value', result.pop('blob', None))
+    result['dtype'] = dtype = __get_pipe_type(value, dtype=result.get('dtype'))
+    if dtype == CmdArgType.DevPipeBlob:
+        result['value'] = value[0], __sanatize_pipe_blob(value[1])
+    return result
+
+
+def __sanatize_pipe_blob(blob):
+    if isinstance(blob, dict):
+        return [__sanatize_pipe_element((k, v)) for k, v in blob.items()]
+    else:
+        return [__sanatize_pipe_element(elem) for elem in blob]
+
+
+def __Pipe__set_value(self, value):
+    """
+    Set the pipe value. Check ref:`pipe data types <pytango-pipe-data-types>`:
+    for more information on which values are supported
+    """
+    root_blob_name, blob = value
+    self.set_root_blob_name(root_blob_name)
+    value = __sanatize_pipe_blob(blob)
+    self._set_value(value)
+
+
+def __init_Pipe():
+    Pipe.set_value = __Pipe__set_value
+
+
+def __doc_UserDefaultPipeProp():
+    def document_method(method_name, desc, append=True):
+        return __document_method(UserDefaultPipeProp, method_name, desc, append)
+
+    UserDefaultPipeProp.__doc__ = """
+    User class to set pipe default properties.
+    This class is used to set pipe default properties. 
+    Three levels of pipe properties setting are implemented within Tango. 
+    The highest property setting level is the database. 
+    Then the user default (set using this UserDefaultPipeProp class) and finally
+    a Tango library default value
+    """
+
+    document_method("set_label", """
+    set_label(self, def_label) -> None
+
+            Set default label property. 
+
+        Parameters :
+            - def_label : (str) the user default label property 
+        Return     : None
+    """ )
+    
+    document_method("set_description", """
+    set_description(self, def_description) -> None
+
+            Set default description property. 
+
+        Parameters : 
+            - def_description : (str) the user default description property 
+        Return     : None
+    """ )
+
+
+def pipe_init(doc=True):
+    __init_Pipe()
+    if doc:
+        __doc_UserDefaultPipeProp()        
diff --git a/tango/pipe_data.py b/tango/pipe_data.py
new file mode 100644
index 0000000..2b94518
--- /dev/null
+++ b/tango/pipe_data.py
@@ -0,0 +1,192 @@
+# ------------------------------------------------------------------------------
+# This file is part of PyTango (http://pytango.rtfd.io)
+#
+# 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.
+"""
+
+from __future__ import with_statement
+from __future__ import print_function
+
+__all__ = [ "PipeData" ]
+
+__docformat__ = "restructuredtext"
+
+import inspect
+
+from ._tango import Except, CmdArgType, DispLevel, AttrDataFormat, \
+    Pipe, PipeWriteType, PipeSerialModel, UserDefaultPipeProp
+from .utils import is_non_str_seq, is_pure_str
+
+
+class PipeData(object):
+    """A helper class that contains the same information one of the items in
+    DeviceClass.pipe_list but in object form"""
+    
+    def __init__(self, name, class_name, pipe_info=None):
+        self.class_name = class_name
+        self.pipe_name = name
+        self.pipe_write = PipeWriteType.PIPE_READ
+        self.display_level = DispLevel.OPERATOR
+        if name is None:
+            self.read_method_name = None
+            self.write_method_name = None
+            self.is_allowed_name = None
+        else:
+            self.read_method_name = "read_" + name
+            self.write_method_name = "write_" + name
+            self.is_allowed_name = "is_" + name + "_allowed"
+        self.pipe_class = None
+        self.pipe_args = []
+        self.pipe_prop = None
+        if pipe_info is not None:
+            self.from_pipe_info(pipe_info)
+
+    @classmethod
+    def from_dict(cls, pipe_dict):
+        pipe_dict = dict(pipe_dict)
+        name = pipe_dict.pop('name', None)
+        class_name = pipe_dict.pop('class_name', None)
+        self = cls(name, class_name)
+        self.build_from_dict(pipe_dict)
+        return self
+        
+    def build_from_dict(self, pipe_dict):
+        self.display_level = pipe_dict.pop('display_level', DispLevel.OPERATOR)
+        
+        is_access_explicit = "access" in pipe_dict
+        if is_access_explicit:
+            self.pipe_write = pipe_dict.pop('access')
+        else:
+            # access is defined by which methods were defined
+            r_explicit = "fread" in pipe_dict or "fget" in pipe_dict
+            w_explicit = "fwrite" in pipe_dict or "fset" in pipe_dict
+            if r_explicit and w_explicit:
+                self.pipe_write = PipeWriteType.PIPE_READ_WRITE
+            else:
+                self.pipe_write = PipeWriteType.PIPE_READ
+            
+        fread = pipe_dict.pop('fget', pipe_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 = pipe_dict.pop('fset', pipe_dict.pop('fwrite', None))
+        if fwrite is not None:
+            if is_pure_str(fwrite):
+                self.write_method_name = fwrite
+            elif inspect.isroutine(fwrite):
+                self.write_method_name = fwrite.__name__
+        fisallowed = pipe_dict.pop('fisallowed', None)
+        if fisallowed is not None:
+            if is_pure_str(fisallowed):
+                self.is_allowed_name = fisallowed
+            elif inspect.isroutine(fisallowed):
+                self.is_allowed_name = fisallowed.__name__        
+        self.pipe_class = pipe_dict.pop("klass", Pipe)
+        self.pipe_args.extend((self.pipe_name, self.display_level, self.pipe_write))
+        if len(pipe_dict):
+            self.pipe_prop = self.__create_user_default_pipe_prop(pipe_dict)
+        return self
+    
+    def _set_name(self, name):
+        old_name = self.pipe_name
+        self.pipe_name = name
+        self.pipe_args[0] = name
+        if old_name is None:
+            if self.read_method_name is None:
+                self.read_method_name = "read_" + name
+            if self.write_method_name is None:
+                self.write_method_name = "write_" + name
+            if self.is_allowed_name is None:
+                self.is_allowed_name = "is_" + name + "_allowed"
+    
+    def __throw_exception(self, msg, meth="create_pipe()"):
+        Except.throw_exception("PyDs_WrongPipeDefinition", msg, meth)
+
+    def __create_user_default_pipe_prop(self, extra_info):
+        """for internal usage only"""
+        p = UserDefaultPipeProp()
+
+        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(' ','_')
+            if hasattr(p, method_name):
+                method = getattr(p, method_name)
+                method(str(v))
+            else:
+                msg = "Wrong definition of pipe. " \
+                      "The object extra information '%s' " \
+                      "is not recognized!" % (k,)
+                Except.throw_exception("PyDs_WrongPipeDefinition", msg,
+                                       "create_user_default_pipe_prop()")
+        return p
+
+    def from_pipe_info(self, pipe_info):
+        name = self.class_name
+        pipe_name = self.pipe_name
+        throw_ex = self.__throw_exception
+        # check for well defined pipe info
+        
+        # check parameter
+        if not is_non_str_seq(pipe_info):
+            throw_ex("Wrong data type for value for describing pipe %s in "
+                     "class %s\nMust be a sequence with 1 or 2 elements" 
+                     % (pipe_name, name))
+
+        if len(pipe_info) < 1 or len(pipe_info) > 2:
+            throw_ex("Wrong number of argument for describing pipe %s in "
+                     "class %s\nMust be a sequence with 1 or 2 elements"
+                     % (pipe_name, name))
+        
+        extra_info = {}
+        if len(pipe_info) == 2:
+            # pipe_info[1] must be a dictionary
+            # extra_info = pipe_info[1], with all the keys lowercase
+            for k, v in pipe_info[1].items():
+                extra_info[k.lower()] = v
+        
+        pipe_info = pipe_info[0]
+
+        #get write type
+        try:
+            self.pipe_write = PipeWriteType(pipe_info)
+        except:
+            throw_ex("Wrong data write type in pipe argument for "
+                     "pipe %s in class %s\nPipe write type must be a "
+                     "tango.PipeWriteType" % (pipe_name, name))
+        try:
+            self.display_level = DispLevel(extra_info.get("display level", 
+                                                          DispLevel.OPERATOR))
+        except:
+            throw_ex("Wrong display level in pipe information for "
+                     "pipe %s in class %s\nPipe information for "
+                     "display level is not a tango.DispLevel"
+                     % (pipe_name, name))
+
+        self.pipe_class = extra_info.get("klass", Pipe)
+        self.pipe_args.extend((self.pipe_name, self.display_level, self.pipe_write))
+                
+        pipe_prop = None
+        if extra_info:
+            pipe_prop = self.__create_user_default_pipe_prop(extra_info)
+        self.pipe_prop = pipe_prop
+    
+    def to_pipe(self):
+        pipe = self.pipe_class(*self.pipe_args)
+        if self.pipe_prop is not None:
+            pipe.set_default_properties(self.pipe_prop)
+        return pipe
diff --git a/src/boost/python/pytango_init.py b/tango/pytango_init.py
similarity index 93%
rename from src/boost/python/pytango_init.py
rename to tango/pytango_init.py
index 3512914..dd109a5 100644
--- a/src/boost/python/pytango_init.py
+++ b/tango/pytango_init.py
@@ -1,5 +1,5 @@
 # ------------------------------------------------------------------------------
-# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+# This file is part of PyTango (http://pytango.rtfd.io)
 #
 # Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
 # Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
@@ -36,8 +36,10 @@ from .group_reply_list import group_reply_list_init
 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
+from .auto_monitor import auto_monitor_init
+from .pipe import pipe_init
+from ._tango import constants
+from ._tango import _get_tango_lib_release
 
 __INITIALIZED = False
 __DOC = True
@@ -111,6 +113,8 @@ def init():
     pytango_pprint_init(doc=doc)
     pyutil_init(doc=doc)
     time_val_init(doc=doc)
+    auto_monitor_init(doc=doc)
+    pipe_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/tango/pytango_pprint.py
similarity index 87%
rename from src/boost/python/pytango_pprint.py
rename to tango/pytango_pprint.py
index 952d786..3b84862 100644
--- a/src/boost/python/pytango_pprint.py
+++ b/tango/pytango_pprint.py
@@ -1,5 +1,5 @@
 # ------------------------------------------------------------------------------
-# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+# This file is part of PyTango (http://pytango.rtfd.io)
 #
 # Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
 # Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
@@ -19,24 +19,25 @@ __docformat__ = "restructuredtext"
 
 import operator
 
-from ._PyTango import (StdStringVector, StdLongVector, CommandInfoList,
-    AttributeInfoList, AttributeInfoListEx,
+from ._tango import (StdStringVector, StdLongVector, CommandInfoList,
+    AttributeInfoList, AttributeInfoListEx, PipeInfoList,
     DeviceDataHistoryList,
     GroupReplyList, GroupAttrReplyList, GroupCmdReplyList,
     DbData, DbDevInfos, DbDevExportInfos, DbDevImportInfos, DbHistoryList,
-    LockerInfo, DevCommandInfo, AttributeDimension, CommandInfo,
+    LockerInfo, DevCommandInfo, AttributeDimension, CommandInfo, PipeInfo,
     DeviceInfo, DeviceAttributeConfig, AttributeInfo, AttributeAlarmInfo,
     ChangeEventInfo, PeriodicEventInfo, ArchiveEventInfo,
     AttributeEventInfo, AttributeInfoEx,
     DeviceAttribute, DeviceAttributeHistory, DeviceData, DeviceDataHistory,
-    DbDatum, DbDevInfo, DbDevImportInfo, DbDevExportInfo, DbServerInfo,
-    GroupReply, GroupAttrReply, GroupCmdReply,
+    DevicePipe, DbDatum, DbDevInfo, DbDevImportInfo, DbDevExportInfo,
+    DbServerInfo, GroupReply, GroupAttrReply, GroupCmdReply,
     DevError, EventData, AttrConfEventData, DataReadyEventData,
     TimeVal, DevFailed, CmdArgType)
 
 from .device_server import AttributeAlarm, EventProperties
 from .device_server import ChangeEventProp, PeriodicEventProp, ArchiveEventProp
-from .device_server import AttributeConfig, AttributeConfig_2, AttributeConfig_3
+from .device_server import AttributeConfig, AttributeConfig_2
+from .device_server import AttributeConfig_3, AttributeConfig_5
 import collections
 
 def __inc_param(obj, name):
@@ -86,7 +87,7 @@ def __registerSeqStr():
     _SeqRepr = lambda self: (self and "[%s]" % (", ".join(map(repr,self)))) or "[]"
 
     seqs = (StdStringVector, StdLongVector, CommandInfoList,
-            AttributeInfoList, AttributeInfoListEx,
+            AttributeInfoList, AttributeInfoListEx, PipeInfoList,
             DeviceDataHistoryList,
             GroupReplyList, GroupAttrReplyList, GroupCmdReplyList,
             DbData, DbDevInfos, DbDevExportInfos, DbDevImportInfos, DbHistoryList)
@@ -117,12 +118,13 @@ def __registerStructStr():
     structs = (LockerInfo, DevCommandInfo, AttributeDimension, CommandInfo,
         DeviceInfo, DeviceAttributeConfig, AttributeInfo, AttributeAlarmInfo,
         ChangeEventInfo, PeriodicEventInfo, ArchiveEventInfo,
-        AttributeEventInfo, AttributeInfoEx,
+        AttributeEventInfo, AttributeInfoEx, PipeInfo,
         DeviceAttribute, DeviceAttributeHistory, DeviceData, DeviceDataHistory,
-        DbDatum, DbDevInfo, DbDevImportInfo, DbDevExportInfo, DbServerInfo,
-        GroupReply, GroupAttrReply, GroupCmdReply,
+        DevicePipe, DbDatum, DbDevInfo, DbDevImportInfo, DbDevExportInfo, 
+        DbServerInfo, GroupReply, GroupAttrReply, GroupCmdReply,
         DevError, EventData, AttrConfEventData, DataReadyEventData,
         AttributeConfig, AttributeConfig_2, AttributeConfig_3,
+        AttributeConfig_5,
         ChangeEventProp, PeriodicEventProp, ArchiveEventProp,
         AttributeAlarm, EventProperties)
 
diff --git a/src/boost/python/pyutil.py b/tango/pyutil.py
similarity index 97%
rename from src/boost/python/pyutil.py
rename to tango/pyutil.py
index 0a8415a..ebe7225 100644
--- a/src/boost/python/pyutil.py
+++ b/tango/pyutil.py
@@ -1,5 +1,5 @@
 # ------------------------------------------------------------------------------
-# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+# This file is part of PyTango (http://pytango.rtfd.io)
 #
 # Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
 # Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
@@ -20,7 +20,7 @@ __docformat__ = "restructuredtext"
 import os
 import copy
 
-from ._PyTango import Util, Except, DevFailed, DbDevInfo
+from ._tango import Util, Except, DevFailed, DbDevInfo
 from .utils import document_method as __document_method
 #from utils import document_static_method as __document_static_method
 from .globals import class_list, cpp_class_list, get_constructed_classes
@@ -61,7 +61,7 @@ def __Util__create_device(self, klass_name, device_name, alias=None, cb=None):
             registered in the database and BEFORE the init_device for the
             newly created device is called
 
-            Throws PyTango.DevFailed:
+            Throws tango.DevFailed:
                 - the device name exists already or
                 - the given class is not registered for this DS.
                 - the cb is not a callable
@@ -148,7 +148,7 @@ def __Util__delete_device(self, klass_name, device_name):
             Deletes an existing device from the database and from this running
             server
 
-            Throws PyTango.DevFailed:
+            Throws tango.DevFailed:
                 - the device name doesn't exist in the database
                 - the device name doesn't exist in this DS.
 
@@ -210,7 +210,7 @@ def __Util__add_TgClass(self, klass_device_class, klass_device,
            util.add_TgClass(MotorClass, Motor, 'Motor') # equivalent to previous line
 
        .. deprecated:: 7.1.2
-           Use :meth:`PyTango.Util.add_class` instead."""
+           Use :meth:`tango.Util.add_class` instead."""
     if device_class_name is None:
         device_class_name = klass_device.__name__
     class_list.append((klass_device_class, klass_device, device_class_name))
@@ -228,7 +228,7 @@ def __Util__add_Cpp_TgClass(self, device_class_name, tango_device_class_name):
                  library name.
 
        .. deprecated:: 7.1.2
-           Use :meth:`PyTango.Util.add_class` instead."""
+           Use :meth:`tango.Util.add_class` instead."""
     cpp_class_list.append((device_class_name, tango_device_class_name))
 
 def __Util__add_class(self, *args, **kwargs):
@@ -238,8 +238,8 @@ def __Util__add_class(self, *args, **kwargs):
             Register a new tango class ('python' or 'c++').
 
             If language is 'python' then args must be the same as
-            :meth:`PyTango.Util.add_TgClass`. Otherwise, args should be the ones
-            in :meth:`PyTango.Util.add_Cpp_TgClass`. Example::
+            :meth:`tango.Util.add_TgClass`. Otherwise, args should be the ones
+            in :meth:`tango.Util.add_Cpp_TgClass`. Example::
 
                 util.add_class(MotorClass, Motor)
                 util.add_class('CounterClass', 'Counter', language='c++')
@@ -271,7 +271,7 @@ def __doc_Util():
     Therefore a device server process can have only one instance of this
     class and its constructor is not public. Example::
 
-        util = PyTango.Util.instance()
+        util = tango.Util.instance()
             print(util.get_host_name())
     """
 
@@ -702,11 +702,11 @@ def __doc_Util():
                 return _LOOP_NB > 100
 
             def main():
-                py = PyTango.Util(sys.argv)
+                py = tango.Util(sys.argv)
 
                 # ...
 
-                U = PyTango.Util.instance()
+                U = tango.Util.instance()
                 U.server_set_event_loop(looping)
                 U.server_init()
                 U.server_run()
diff --git a/src/boost/python/release.py b/tango/release.py
similarity index 91%
rename from src/boost/python/release.py
rename to tango/release.py
index cdbd74e..3a23581 100644
--- a/src/boost/python/release.py
+++ b/tango/release.py
@@ -1,5 +1,5 @@
 # ------------------------------------------------------------------------------
-# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+# This file is part of PyTango (http://pytango.rtfd.io)
 #
 # Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
 # Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
@@ -40,10 +40,10 @@ class Release:
             - keywords : (seq<str>) list of keywords
             - license : (str) the license"""
     name = 'PyTango'
-    version_info = (8, 1, 8, 'final', 0)
+    version_info = (9, 2, 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.1 API.'
+    version_description = 'This version implements the C++ Tango 9.2 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 ' \
@@ -51,8 +51,7 @@ class Release:
     license = 'LGPL'
     authors = { 'Coutinho' : ('Tiago Coutinho' , 'coutinho at esrf.fr') }
     author_lines = "\n".join([ "%s <%s>" % x for x in authors.values()])
-    url = 'http://www.tinyurl.com/PyTango/'
-    download_url = 'http://pypi.python.org/pypi/PyTango'
+    url = 'http://github.com/tango-cs/pytango'
+    download_url = 'http://pypi.python.org/pypi/pytango'
     platform = ['Linux', 'Windows XP/Vista/7/8']
     keywords = ['Tango', 'CORBA', 'binding']
-    
diff --git a/src/boost/python/server.py b/tango/server.py
similarity index 74%
rename from src/boost/python/server.py
rename to tango/server.py
index 9653438..69181f3 100644
--- a/src/boost/python/server.py
+++ b/tango/server.py
@@ -1,5 +1,5 @@
 # ------------------------------------------------------------------------------
-# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+# This file is part of PyTango (http://pytango.rtfd.io)
 #
 # Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
 # Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
@@ -16,8 +16,8 @@ from __future__ import print_function
 from __future__ import absolute_import
 
 __all__ = ["DeviceMeta", "Device", "LatestDeviceImpl", "attribute",
-           "command", "device_property", "class_property",
-           "run", "server_run", "Server", "get_worker", "get_gevent_worker"]
+           "command", "pipe", "device_property", "class_property",
+           "run", "server_run", "Server", "get_worker", "get_async_worker"]
 
 import os
 import sys
@@ -30,19 +30,20 @@ import operator
 import functools
 import traceback
 
-from ._PyTango import (CmdArgType, AttrDataFormat, AttrWriteType,
+from ._tango import (CmdArgType, AttrDataFormat, AttrWriteType,
                        DevFailed, Except, GreenMode, constants,
                        Database, DbDevInfo, DevState, CmdArgType,
-                       Attr)
+                       Attr, PipeWriteType)
 from .attr_data import AttrData
+from .pipe_data import PipeData
 from .device_class import DeviceClass
-from .utils import (get_tango_device_classes, is_seq, is_non_str_seq,
+from .utils import (get_latest_device_class, is_seq, is_non_str_seq,
                     scalar_to_array_type)
 from .codec import loads, dumps
 
 API_VERSION = 2
 
-LatestDeviceImpl = get_tango_device_classes()[-1]
+LatestDeviceImpl = get_latest_device_class()
 
 def __build_to_tango_type():
     ret = \
@@ -55,11 +56,11 @@ def __build_to_tango_type():
         chr         : CmdArgType.DevUChar,
         None        : CmdArgType.DevVoid,
 
-        'int'       : CmdArgType.DevLong,
+        'int'       : CmdArgType.DevLong64,
         'int16'     : CmdArgType.DevShort,
         'int32'     : CmdArgType.DevLong,
         'int64'     : CmdArgType.DevLong64,
-        'uint'      : CmdArgType.DevULong,
+        'uint'      : CmdArgType.DevULong64,
         'uint16'    : CmdArgType.DevUShort,
         'uint32'    : CmdArgType.DevULong,
         'uint64'    : CmdArgType.DevULong64,
@@ -79,6 +80,7 @@ def __build_to_tango_type():
         'char'      : CmdArgType.DevUChar,
         'None'      : CmdArgType.DevVoid,
         'state'     : CmdArgType.DevState,
+        'enum'      : CmdArgType.DevEnum,
     }
 
     try:
@@ -289,6 +291,128 @@ def __patch_attr_methods(tango_device_klass, attribute):
         __patch_write_method(tango_device_klass, attribute)
 
 
+def _get_wrapped_pipe_read_method(pipe, read_method):
+    read_args = inspect.getargspec(read_method)
+    nb_args = len(read_args.args)
+
+    green_mode = pipe.read_green_mode
+
+    if nb_args < 2:
+        if green_mode == GreenMode.Synchronous:
+            @functools.wraps(read_method)
+            def read_pipe(self, pipe):
+                ret = read_method(self)
+                if not pipe.get_value_flag() and ret is not None:
+                    pipe.set_value(pipe, ret)
+                return ret
+        else:
+            @functools.wraps(read_method)
+            def read_pipe(self, pipe):
+                worker = get_worker()
+                ret = worker.execute(read_method, self)
+                if ret is not None:
+                    pipe.set_value(ret)
+                return ret
+    else:
+        if green_mode == GreenMode.Synchronous:
+            read_pipe = read_method
+        else:
+            @functools.wraps(read_method)
+            def read_pipe(self, pipe):
+                return get_worker().execute(read_method, self, pipe)
+
+    return read_pipe
+
+
+def __patch_pipe_read_method(tango_device_klass, pipe):
+    """
+    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 Pipe), 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 pipe: the pipe data information
+    :type pipe: PipeData
+    """
+    read_method = getattr(pipe, "fget", None)
+    if read_method:
+        method_name = "__read_{0}__".format(pipe.pipe_name)
+        pipe.read_method_name = method_name
+    else:
+        method_name = pipe.read_method_name
+        read_method = getattr(tango_device_klass, method_name)
+
+    read_pipe = _get_wrapped_pipe_read_method(pipe, read_method)
+    method_name = "__read_{0}_wrapper__".format(pipe.pipe_name)
+    pipe.read_method_name = method_name
+
+    setattr(tango_device_klass, method_name, read_pipe)
+
+
+def _get_wrapped_pipe_write_method(pipe, write_method):
+    green_mode = pipe.write_green_mode
+
+    if green_mode == GreenMode.Synchronous:
+        @functools.wraps(write_method)
+        def write_pipe(self, pipe):
+            # TODO
+            raise NotImplementedError
+            #value = pipe.get_write_value()
+            return write_method(self, value)
+    else:
+        @functools.wraps(write_method)
+        def write_pipe(self, pipe):
+            raise NotImplementedError
+            #value = pipe.get_write_value()
+            return get_worker().execute(write_method, self, value)
+    return write_pipe
+
+
+def __patch_pipe_write_method(tango_device_klass, pipe):
+    """
+    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 Pipe), 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 pipe: the pipe data information
+    :type pipe: PipeData
+    """
+    write_method = getattr(pipe, "fset", None)
+    if write_method:
+        method_name = "__write_{0}__".format(pipe.pipe_name)
+        pipe.write_method_name = method_name
+    else:
+        method_name = pipe.write_method_name
+        write_method = getattr(tango_device_klass, method_name)
+
+    write_pipe = _get_wrapped_pipe_write_method(pipe, write_method)
+    setattr(tango_device_klass, method_name, write_pipe)
+
+
+def __patch_pipe_methods(tango_device_klass, pipe):
+    """
+    Checks if the read and write methods have the correct signature.
+    If a read/write method doesn't have a parameter (the traditional
+    Pipe), 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 pipe: the pipe data information
+    :type pipe: PipeData
+    """
+    __patch_pipe_read_method(tango_device_klass, pipe)
+    if pipe.pipe_write == PipeWriteType.PIPE_READ_WRITE:
+        __patch_pipe_write_method(tango_device_klass, pipe)
+
+
 def __patch_init_delete_device(klass):
     # TODO allow to force non green mode
     green_mode = True
@@ -322,7 +446,7 @@ class _DeviceClass(DeviceClass):
         :meth:`TT.initialize_dynamic_attributes` for each device
 
         :param dev_list: list of devices
-        :type dev_list: :class:`PyTango.DeviceImpl`"""
+        :type dev_list: :class:`tango.DeviceImpl`"""
 
         for dev in dev_list:
             init_dyn_attrs = getattr(dev,
@@ -342,13 +466,14 @@ 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)
+              "tango.server.Device".format(klass_name)
         raise Exception(msg)
 
     if attrs is None:
         attrs = tango_device_klass.__dict__
 
     attr_list = {}
+    pipe_list = {}
     class_property_list = {}
     device_property_list = {}
     cmd_list = {}
@@ -361,6 +486,13 @@ def __create_tango_deviceclass_klass(tango_device_klass, attrs=None):
                 attr_name = attr_obj.attr_name
             attr_list[attr_name] = attr_obj
             __patch_attr_methods(tango_device_klass, attr_obj)
+        elif isinstance(attr_obj, pipe):
+            if attr_obj.pipe_name is None:
+                attr_obj._set_name(attr_name)
+            else:
+                attr_name = attr_obj.pipe_name
+            pipe_list[attr_name] = attr_obj
+            __patch_pipe_methods(tango_device_klass, attr_obj)
         elif isinstance(attr_obj, device_property):
             attr_obj.name = attr_name
             device_property_list[attr_name] = [attr_obj.dtype,
@@ -382,7 +514,8 @@ def __create_tango_deviceclass_klass(tango_device_klass, attrs=None):
 
     devclass_attrs = dict(class_property_list=class_property_list,
                           device_property_list=device_property_list,
-                          cmd_list=cmd_list, attr_list=attr_list)
+                          cmd_list=cmd_list, attr_list=attr_list,
+                          pipe_list=pipe_list)
     return type(devclass_name, (_DeviceClass,), devclass_attrs)
 
 
@@ -434,14 +567,14 @@ def DeviceMeta(name, bases, attrs):
 
     Example (python 2.x)::
 
-        from PyTango.server import Device, DeviceMeta
+        from tango.server import Device, DeviceMeta
 
         class PowerSupply(Device):
             __metaclass__ = DeviceMeta
 
     Example (python 3.x)::
 
-        from PyTango.server import Device, DeviceMeta
+        from tango.server import Device, DeviceMeta
 
         class PowerSupply(Device, metaclass=DeviceMeta):
             pass
@@ -538,21 +671,23 @@ class Device(LatestDeviceImpl):
     @classmethod
     def run_server(cls, args=None, **kwargs):
         """Run the class as a device server.
-        It is based on the PyTango.server.run method.
+        It is based on the tango.server.run method.
 
         The difference is that the device class
         and server name are automatically given.
 
         Args:
-            args (iterable): args as given in the PyTango.server.run method
+            args (iterable): args as given in the tango.server.run method
                              without the server name. If None, the sys.argv
                              list is used
             kwargs: the other keywords argument are as given
-                    in the PyTango.server.run method.
+                    in the tango.server.run method.
         """
         if args is None:
             args = sys.argv[1:]
         args = [cls.__name__] + list(args)
+        green_mode = getattr(cls, 'green_mode', None)
+        kwargs.setdefault("green_mode", green_mode)
         return run((cls,), args, **kwargs)
 
 
@@ -560,7 +695,7 @@ 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
+    declare a scalar, `tango.DevDouble`, read-only attribute called
     *voltage* in a *PowerSupply* :class:`Device` do::
 
         class PowerSupply(Device):
@@ -587,19 +722,20 @@ class attribute(AttrData):
     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
+    dtype                  :obj:`object`                    :obj:`~tango.CmdArgType.DevDouble`      data type (see :ref:`Data type equivalence <pytango-hlapi-datatypes>`)
+    dformat                :obj:`~tango.AttrDataFormat`     :obj:`~tango.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
+    display_level          :obj:`~tango.DispLevel`          :obj:`~tango.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
+    access                 :obj:`~tango.AttrWriteType`      :obj:`~tango.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
+    enum_labels            sequence                         None                                    the list of enumeration labels (enum data type)
     doc (or description)   :obj:`str`                       ''                                      attribute description
     unit                   :obj:`str`                       ''                                      physical units the attribute value is in
     standard_unit          :obj:`str`                       ''                                      physical standard unit
@@ -619,9 +755,9 @@ class attribute(AttrData):
     archive_abs_change     :obj:`str`                       None
     archive_rel_change     :obj:`str`                       None
     archive_period         :obj:`str`                       None
-    green_mode             :obj:`~PyTango.GreenMode`        None                                    green mode for read and write. None means use server green mode.
-    read_green_mode        :obj:`~PyTango.GreenMode`        None                                    green mode for read. None means use server green mode.
-    write_green_mode       :obj:`~PyTango.GreenMode`        None                                    green mode for write. None means use server green mode.
+    green_mode             :obj:`~tango.GreenMode`          None                                    green mode for read and write. None means use server green mode.
+    read_green_mode        :obj:`~tango.GreenMode`          None                                    green mode for read. None means use server green mode.
+    write_green_mode       :obj:`~tango.GreenMode`          None                                    green mode for write. None means use server green mode.
     ===================== ================================ ======================================= =======================================================================================
 
     .. note::
@@ -690,6 +826,8 @@ class attribute(AttrData):
             kwargs['fget'] = fget
 
         super(attribute, self).__init__(name, class_name)
+        self.__doc__ = kwargs.get('doc', kwargs.get('description',
+                                                    'TANGO attribute'))
         if 'dtype' in kwargs:
             kwargs['dtype'], kwargs['dformat'] = \
                 _get_tango_type_format(kwargs['dtype'],
@@ -704,6 +842,8 @@ class attribute(AttrData):
     # --------------------
 
     def __get__(self, obj, objtype):
+        if obj is None:
+            return self
         return self.get_attribute(obj)
 
     def __set__(self, obj, value):
@@ -739,8 +879,196 @@ class attribute(AttrData):
         return type(self)(fget=fget, **self._kwargs)
 
 
+class pipe(PipeData):
+    '''
+    Declares a new tango pipe in a :class:`Device`. To be used
+    like the python native :obj:`property` function.
+
+    Checkout the :ref:`pipe data types <pytango-pipe-data-types>`
+    to see what you should return on a pipe read request and what
+    to expect as argument on a pipe write request.
+
+    For example, to declare a read-only pipe called *ROI*
+    (for Region Of Interest), in a *Detector* :class:`Device` do::
+
+        class Detector(Device):
+            __metaclass__ = DeviceMeta
+
+            ROI = pipe()
+
+            def read_ROI(self):
+                return ('ROI', ({'name': 'x', 'value': 0},
+                                {'name': 'y', 'value': 10},
+                                {'name': 'width', 'value': 100},
+                                {'name': 'height', 'value': 200}))
+
+    The same can be achieved with (also showing that a dict can be used
+    to pass blob data)::
+
+        class Detector(Device):
+            __metaclass__ = DeviceMeta
+
+            @pipe
+            def ROI(self):
+                return 'ROI', dict(x=0, y=10, width=100, height=200)
+
+
+    It receives multiple keyword arguments.
+
+    ===================== ================================ ======================================= =======================================================================================
+    parameter              type                                       default value                                 description
+    ===================== ================================ ======================================= =======================================================================================
+    name                   :obj:`str`                       class member name                       alternative pipe name
+    display_level          :obj:`~tango.DispLevel`          :obj:`~tango.DisLevel.OPERATOR`         display level
+    access                 :obj:`~tango.PipeWriteType`      :obj:`~tango.PipeWriteType.READ`        read only/ read write access
+    fget (or fread)        :obj:`str` or :obj:`callable`    'read_<pipe_name>'                      read method name or method object
+    fset (or fwrite)       :obj:`str` or :obj:`callable`    'write_<pipe_name>'                     write method name or method object
+    is_allowed             :obj:`str` or :obj:`callable`    'is_<pipe_name>_allowed'                is allowed method name or method object
+    label                  :obj:`str`                       '<pipe_name>'                           pipe label
+    doc (or description)   :obj:`str`                       ''                                      pipe description
+    green_mode             :obj:`~tango.GreenMode`          None                                    green mode for read and write. None means use server green mode.
+    read_green_mode        :obj:`~tango.GreenMode`          None                                    green mode for read. None means use server green mode.
+    write_green_mode       :obj:`~tango.GreenMode`          None                                    green mode for write. None means use server green mode.
+    ===================== ================================ ======================================= =======================================================================================
+
+    The same example with a read-write ROI, a customized label and description::
+
+        class Detector(Device):
+            __metaclass__ = DeviceMeta
+
+            ROI = pipe(label='Region Of Interest', doc='The active region of interest',
+                       access=PipeWriteType.PIPE_READ_WRITE)
+
+            def init_device(self):
+                Device.init_device(self)
+                self.__roi = 'ROI', dict(x=0, y=10, width=100, height=200)
+
+            def read_ROI(self):
+                return self.__roi
+
+            def write_ROI(self, roi):
+                self.__roi = roi
+
+
+    The same, but using pipe as a decorator::
+
+        class Detector(Device):
+            __metaclass__ = DeviceMeta
+
+            def init_device(self):
+                Device.init_device(self)
+                self.__roi = 'ROI', dict(x=0, y=10, width=100, height=200)
+
+            @pipe(label="Region Of Interest")
+            def ROI(self):
+                """The active region of interest"""
+                return self.__roi
+
+            @ROI.write
+            def ROI(self, roi):
+                self.__roi = roi
+
+    In this second format, defining the `write` / `setter` implicitly sets
+    the pipe access to READ_WRITE.
+
+    .. versionadded:: 9.2.0
+    '''
+
+    def __init__(self, fget=None, **kwargs):
+        self._kwargs = dict(kwargs)
+        name = kwargs.pop("name", None)
+        class_name = kwargs.pop("class_name", None)
+        green_mode = kwargs.pop("green_mode", True)
+        self.read_green_mode = kwargs.pop("read_green_mode", green_mode)
+        self.write_green_mode = kwargs.pop("write_green_mode", green_mode)
+
+        if fget:
+            if inspect.isroutine(fget):
+                self.fget = fget
+                if 'doc' not in kwargs and 'description' not in kwargs:
+                    if fget.__doc__ is not None:
+                        kwargs['doc'] = fget.__doc__
+            kwargs['fget'] = fget
+
+        super(pipe, self).__init__(name, class_name)
+        self.__doc__ = kwargs.get('doc', kwargs.get('description',
+                                                    'TANGO pipe'))
+        self.build_from_dict(kwargs)
+        if self.pipe_write == PipeWriteType.PIPE_READ_WRITE:
+            raise NotImplementedError('writtable pipes not implemented in 9.2.0a')
+
+    def get_pipe(self, obj):
+        dclass = obj.get_device_class()
+        return dclass.get_pipe_by_name(self.pipe_name)
+
+    # --------------------
+    # descriptor interface
+    # --------------------
+
+    def __get__(self, obj, objtype):
+        if obj is None:
+            return self
+        return self.get_attribute(obj)
+
+    def __set__(self, obj, value):
+        attr = self.get_attribute(obj)
+        set_complex_value(attr, value)
+
+    def setter(self, fset):
+        """
+        To be used as a decorator. Will define the decorated method
+        as a write pipe method to be called when client writes to the pipe
+        """
+        raise NotImplementedError('writtable pipes not implemented in 9.2.0a')
+        self.fset = fset
+        self.pipe_write = PipeWriteType.PIPE_READ_WRITE
+        return self
+
+    def write(self, fset):
+        """
+        To be used as a decorator. Will define the decorated method
+        as a write pipe method to be called when client writes to the pipe
+        """
+        return self.setter(fset)
+
+    def __call__(self, fget):
+        return type(self)(fget=fget, **self._kwargs)
+
+
+def __build_command_doc(f, name, dtype_in, doc_in, dtype_out, doc_out):
+    doc = "'{0}' TANGO command".format(name)
+    if dtype_in is not None:
+        arg_spec = inspect.getargspec(f)
+        if len(arg_spec.args) > 1:
+            # arg[0] should be self and arg[1] the command argument
+            param_name = arg_spec.args[1]
+        else:
+            param_name = 'arg'
+        dtype_in_str = str(dtype_in)
+        if not isinstance(dtype_in, str):
+            try:
+                dtype_in_str = dtype_in.__name__
+            except:
+                pass
+        msg = doc_in or '(not documented)'
+        doc += '\n\n:param {0}: {1}\n:type {0}: {2}'.format(param_name, msg,
+                                                           dtype_in_str)
+    if dtype_out is not None:
+        dtype_out_str = str(dtype_out)
+        if not isinstance(dtype_out, str):
+            try:
+                dtype_out_str = dtype_out.__name__
+            except:
+                pass
+        msg = doc_out or '(not documented)'
+        doc += '\n\n:return: {0}\n:rtype: {1}'.format(msg, dtype_out_str)
+    return doc
+
+
 def command(f=None, dtype_in=None, dformat_in=None, doc_in="",
-            dtype_out=None, dformat_out=None, doc_out="", green_mode=None):
+            dtype_out=None, dformat_out=None, doc_out="",
+            display_level=None, polling_period=None,
+            green_mode=None):
     """
     Declares a new tango command in a :class:`Device`.
     To be used like a decorator in the methods you want to declare as
@@ -767,6 +1095,7 @@ def command(f=None, dtype_in=None, dformat_in=None, doc_in="",
                      dtype_out=bool, doc_out='True if it worked, False otherwise')
             def Pressurize(self, pressure):
                 self.info_stream('Pressurizing to %f...' % pressure)
+                return True
 
     .. note::
         avoid using *dformat* parameter. If you need a SPECTRUM
@@ -787,6 +1116,10 @@ def command(f=None, dtype_in=None, dformat_in=None, doc_in="",
     :type dformat_out: AttrDataFormat
     :param doc_out: return value documentation
     :type doc_out: str
+    :param display_level: display level for the command (optional)
+    :type display_level: DispLevel
+    :param polling_period: polling period in milliseconds (optional)
+    :type polling_period: int
     :param green_mode:
         set green mode on this specific command. Default value is None meaning
         use the server green mode. Set it to GreenMode.Synchronous to force
@@ -794,19 +1127,30 @@ def command(f=None, dtype_in=None, dformat_in=None, doc_in="",
 
     .. versionadded:: 8.1.7
         added green_mode option
+
+    .. versionadded:: 9.2.0
+        added display_level and polling_period optional argument
     """
     if f is None:
-        return functools.partial(command,
+        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,
+            display_level=display_level, polling_period=polling_period,
             green_mode=green_mode)
     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)
+    dtype_format_in = _get_tango_type_format(dtype_in, dformat_in)
+    dtype_format_out = _get_tango_type_format(dtype_out, dformat_out)
+
+    din = [from_typeformat_to_type(*dtype_format_in), doc_in]
+    dout = [from_typeformat_to_type(*dtype_format_out), doc_out]
 
-    din = [from_typeformat_to_type(dtype_in, dformat_in), doc_in]
-    dout = [from_typeformat_to_type(dtype_out, dformat_out), doc_out]
+    config_dict = {}
+    if display_level is not None:
+        config_dict['Display level'] = display_level
+    if polling_period is not None:
+        config_dict['Polling period'] = polling_period
 
     if green_mode == GreenMode.Synchronous:
         cmd = f
@@ -815,7 +1159,16 @@ def command(f=None, dtype_in=None, dformat_in=None, doc_in="",
         def cmd(self, *args, **kwargs):
             return get_worker().execute(f, self, *args, **kwargs)
 
-    cmd.__tango_command__ = name, [din, dout]
+    cmd.__tango_command__ = name, [din, dout, config_dict]
+
+    # try to create a minimalistic __doc__
+    if cmd.__doc__ is None:
+        try:
+            cmd.__doc__ = __build_command_doc(
+                f, name, dtype_in, doc_in, dtype_out, doc_out)
+        except Exception:
+            cmd.__doc__ = "TANGO command"
+
     return cmd
 
 
@@ -829,15 +1182,18 @@ class _BaseProperty(object):
         self.doc = doc
         self.default_value = default_value
         self.update_db = update_db
+        self.__doc__ = doc or 'TANGO property'
 
     def __get__(self, obj, objtype):
+        if obj is None:
+            return self
         return obj._tango_properties.get(self.name)
 
     def __set__(self, obj, value):
         obj._tango_properties[self.name] = value
         if self.update_db:
-            import PyTango
-            db = PyTango.Util.instance().get_database()
+            import tango
+            db = tango.Util.instance().get_database()
             db.put_device_property(obj.get_name(), {self.name: value})
 
     def __delete__(self, obj):
@@ -848,11 +1204,11 @@ class device_property(_BaseProperty):
     """
     Declares a new tango device property in a :class:`Device`. To be
     used like the python native :obj:`property` function. For example,
-    to declare a scalar, `PyTango.DevString`, device property called
+    to declare a scalar, `tango.DevString`, device property called
     *host* in a *PowerSupply* :class:`Device` do::
 
-        from PyTango.server import Device, DeviceMeta
-        from PyTango.server import device_property
+        from tango.server import Device, DeviceMeta
+        from tango.server import device_property
 
         class PowerSupply(Device):
             __metaclass__ = DeviceMeta
@@ -876,11 +1232,11 @@ class class_property(_BaseProperty):
     """
     Declares a new tango class property in a :class:`Device`. To be
     used like the python native :obj:`property` function. For example,
-    to declare a scalar, `PyTango.DevString`, class property called
+    to declare a scalar, `tango.DevString`, class property called
     *port* in a *PowerSupply* :class:`Device` do::
 
-        from PyTango.server import Device, DeviceMeta
-        from PyTango.server import class_property
+        from tango.server import Device, DeviceMeta
+        from tango.server import class_property
 
         class PowerSupply(Device):
             __metaclass__ = DeviceMeta
@@ -941,7 +1297,7 @@ def _to_classes(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)")
+                        "implement HLAPI (see tango.server)")
                 klass_klass = klass_info.TangoClassClass
                 klass_name = klass_info.TangoClassName
                 klass = klass_info
@@ -957,7 +1313,7 @@ def _to_classes(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)")
+                        "implement HLAPI (see tango.server)")
                 klass_klass = klass_info.TangoClassClass
                 klass_name = klass_info.TangoClassName
                 klass = klass_info
@@ -974,11 +1330,11 @@ def __server_run(classes, args=None, msg_stream=sys.stdout, util=None,
                  event_loop=None, post_init_callback=None,
                  green_mode=None):
     if green_mode is None:
-        from PyTango import get_green_mode
+        from tango import get_green_mode
         green_mode = get_green_mode()
-    gevent_mode = green_mode == GreenMode.Gevent
+    async_mode = green_mode in (GreenMode.Gevent, GreenMode.Asyncio)
 
-    import PyTango
+    import tango
     if msg_stream is None:
         write = lambda msg: None
     else:
@@ -990,21 +1346,21 @@ def __server_run(classes, args=None, msg_stream=sys.stdout, util=None,
     post_init_callback = __to_cb(post_init_callback)
 
     if util is None:
-        util = PyTango.Util(args)
+        util = tango.Util(args)
 
-    if gevent_mode:
-        util.set_serial_model(PyTango.SerialModel.NO_SYNC)
-        worker = _create_gevent_worker()
+    if async_mode:
+        util.set_serial_model(tango.SerialModel.NO_SYNC)
+        worker = _create_async_worker(green_mode)
         set_worker(worker)
 
     worker = get_worker()
 
     if event_loop is not None:
-        if gevent_mode:
+        if async_mode:
             event_loop = functools.partial(worker.execute, event_loop)
         util.server_set_event_loop(event_loop)
 
-    log = logging.getLogger("PyTango")
+    log = logging.getLogger("tango")
 
     def tango_loop():
         log.debug("server loop started")
@@ -1016,10 +1372,10 @@ def __server_run(classes, args=None, msg_stream=sys.stdout, util=None,
         worker.stop()
         log.debug("server loop exit")
 
-    if gevent_mode:
+    if async_mode:
         tango_thread_id = worker.run_in_thread(tango_loop)
         worker.run()
-        log.debug("gevent worker finished")
+        log.debug("async worker finished")
     else:
         tango_loop()
 
@@ -1035,23 +1391,23 @@ def run(classes, args=None, msg_stream=sys.stdout,
 
     The `classes` parameter can be either a sequence of:
 
-    * :class:`~PyTango.server.Device` or
+    * :class:`~tango.server.Device` or
     * a sequence of two elements
-      :class:`~PyTango.DeviceClass`, :class:`~PyTango.DeviceImpl` or
+      :class:`~tango.DeviceClass`, :class:`~tango.DeviceImpl` or
     * a sequence of three elements
-      :class:`~PyTango.DeviceClass`, :class:`~PyTango.DeviceImpl`,
+      :class:`~tango.DeviceClass`, :class:`~tango.DeviceImpl`,
       tango class name (str)
 
     or a dictionary where:
 
     * key is the tango class name
     * value is either:
-        * a :class:`~PyTango.server.Device` class or
+        * a :class:`~tango.server.Device` class or
         * a sequence of two elements
-          :class:`~PyTango.DeviceClass`, :class:`~PyTango.DeviceImpl`
+          :class:`~tango.DeviceClass`, :class:`~tango.DeviceImpl`
           or
         * a sequence of three elements
-          :class:`~PyTango.DeviceClass`, :class:`~PyTango.DeviceImpl`,
+          :class:`~tango.DeviceClass`, :class:`~tango.DeviceImpl`,
           tango class name (str)
 
     The optional `post_init_callback` can be a callable (without
@@ -1067,9 +1423,9 @@ def run(classes, args=None, msg_stream=sys.stdout,
        predefined order use a sequence or an OrderedDict.
 
     Example 1: registering and running a PowerSupply inheriting from
-    :class:`~PyTango.server.Device`::
+    :class:`~tango.server.Device`::
 
-        from PyTango.server import Device, DeviceMeta, run
+        from tango.server import Device, DeviceMeta, run
 
         class PowerSupply(Device):
             __metaclass__ = DeviceMeta
@@ -1079,8 +1435,8 @@ def run(classes, args=None, msg_stream=sys.stdout,
     Example 2: registering and running a MyServer defined by tango
     classes `MyServerClass` and `MyServer`::
 
-        from PyTango import Device_4Impl, DeviceClass
-        from PyTango.server import run
+        from tango import Device_4Impl, DeviceClass
+        from tango.server import run
 
         class MyServer(Device_4Impl):
             pass
@@ -1093,8 +1449,8 @@ def run(classes, args=None, msg_stream=sys.stdout,
     Example 3: registering and running a MyServer defined by tango
     classes `MyServerClass` and `MyServer`::
 
-        from PyTango import Device_4Impl, DeviceClass
-        from PyTango.server import Device, DeviceMeta, run
+        from tango import Device_4Impl, DeviceClass
+        from tango.server import Device, DeviceMeta, run
 
         class PowerSupply(Device):
             __metaclass__ = DeviceMeta
@@ -1109,7 +1465,7 @@ def run(classes, args=None, msg_stream=sys.stdout,
         # or: run({'MyServer': (MyServerClass, MyServer)})
 
     :param classes:
-        a sequence of :class:`~PyTango.server.Device` classes or
+        a sequence of :class:`~tango.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
@@ -1126,7 +1482,7 @@ def run(classes, args=None, msg_stream=sys.stdout,
     :param util:
         PyTango Util object [default: None meaning create a Util
         instance]
-    :type util: :class:`~PyTango.Util`
+    :type util: :class:`~tango.Util`
 
     :param event_loop: event_loop callable
     :type event_loop: callable
@@ -1138,7 +1494,7 @@ def run(classes, args=None, msg_stream=sys.stdout,
         callable or tuple (see description above)
 
     :return: The Util singleton object
-    :rtype: :class:`~PyTango.Util`
+    :rtype: :class:`~tango.Util`
 
     .. versionadded:: 8.1.2
 
@@ -1158,7 +1514,7 @@ def run(classes, args=None, msg_stream=sys.stdout,
     except KeyboardInterrupt:
         write("Exiting: Keyboard interrupt\n")
     except DevFailed as df:
-        write("Exiting: Server exited with PyTango.DevFailed:\n" + \
+        write("Exiting: Server exited with tango.DevFailed:\n" + \
               str(df) + "\n")
         if verbose:
             write(traceback.format_exc())
@@ -1174,7 +1530,7 @@ def server_run(classes, args=None, msg_stream=sys.stdout,
         post_init_callback=None, green_mode=None):
     """
     Since PyTango 8.1.2 it is just an alias to
-    :func:`~PyTango.server.run`. Use :func:`~PyTango.server.run`
+    :func:`~tango.server.run`. Use :func:`~tango.server.run`
     instead.
 
     .. versionadded:: 8.0.0
@@ -1192,7 +1548,7 @@ def server_run(classes, args=None, msg_stream=sys.stdout,
         Added `post_init_callback` keyword parameter
 
     .. deprecated:: 8.1.2
-        Use :func:`~PyTango.server.run` instead.
+        Use :func:`~tango.server.run` instead.
 
     """
     return run(classes, args=args, msg_stream=msg_stream,
@@ -1221,17 +1577,24 @@ def set_worker(worker):
     __WORKER = worker
 
 
-__GEVENT_WORKER = None
-def get_gevent_worker():
-    global __GEVENT_WORKER
-    return __GEVENT_WORKER
+__ASYNC_WORKER = None
+def get_async_worker():
+    global __ASYNC_WORKER
+    return __ASYNC_WORKER
 
 
-def _create_gevent_worker():
-    global __GEVENT_WORKER
-    if __GEVENT_WORKER:
-        return __GEVENT_WORKER
+def _create_async_worker(green_mode):
+    global __ASYNC_WORKER
+    if __ASYNC_WORKER:
+        return __ASYNC_WORKER
+    if green_mode == GreenMode.Gevent:
+        _ASYNC_WORKER = _create_gevent_worker()
+    if green_mode == GreenMode.Asyncio:
+        _ASYNC_WORKER = _create_asyncio_worker()
+    return _ASYNC_WORKER
 
+
+def _create_gevent_worker():
     try:
         from queue import Queue
     except:
@@ -1301,13 +1664,68 @@ def _create_gevent_worker():
             self.__tasks.put(task)
             self.__watcher.send()
 
-    __GEVENT_WORKER = GeventWorker()
-    return __GEVENT_WORKER
+    return GeventWorker()
+
+
+def _create_asyncio_worker():
+    import concurrent.futures
+
+    try:
+        import asyncio
+    except ImportError:
+        import trollius as asyncio
+
+    try:
+        from asyncio import run_coroutine_threadsafe
+    except ImportError:
+        from .asyncio_tools import run_coroutine_threadsafe
+
+    class LoopExecutor(concurrent.futures.Executor):
+        """An Executor subclass that uses an event loop
+        to execute calls asynchronously."""
+
+        def __init__(self, loop=None):
+            """Initialize the executor with a given loop."""
+            self.loop = loop or asyncio.get_event_loop()
+
+        def submit(self, fn, *args, **kwargs):
+            """Schedule the callable fn, to be executed as fn(*args **kwargs).
+            Return a Future representing the execution of the callable."""
+            corofn = asyncio.coroutine(lambda: fn(*args, **kwargs))
+            return run_coroutine_threadsafe(corofn(), loop)
+
+        def run_in_thread(self, func, *args, **kwargs):
+            """Schedule a blocking callback."""
+            callback = lambda: func(*args, **kwargs)
+            coro = self.loop.run_in_executor(None, callback)
+            # That is not actually necessary since coro is actually
+            # a future. But it is an implementation detail and it
+            # might be changed later on.
+            asyncio.async(coro)
+
+        def run(self, timeout=None):
+            """Run the asyncio event loop."""
+            self.loop.run_forever()
+
+        def stop(self):
+            """Run the asyncio event loop."""
+            self.loop.stop()
+
+        def execute(self, fn, *args, **kwargs):
+            """Execute the callable fn as fn(*args **kwargs)."""
+            return self.submit(fn, *args, **kwargs).result()
+
+    try:
+        loop = asyncio.get_event_loop()
+    except RuntimeError:
+        loop = asyncio.new_event_loop()
+        asyncio.set_event_loop(loop)
+    return LoopExecutor(loop=loop)
 
 
 _CLEAN_UP_TEMPLATE = """
 import sys
-from PyTango import Database
+from tango import Database
 
 db = Database()
 server_instance = '{server_instance}'
@@ -1348,7 +1766,7 @@ def __to_tango_type_fmt(value):
 
 def create_tango_class(server, obj, tango_class_name=None, member_filter=None):
     slog = server.server_instance.replace("/", ".")
-    log = logging.getLogger("PyTango.Server." + slog)
+    log = logging.getLogger("tango.Server." + slog)
 
     obj_klass = obj.__class__
     obj_klass_name = obj_klass.__name__
@@ -1378,7 +1796,9 @@ def create_tango_class(server, obj, tango_class_name=None, member_filter=None):
         def _object(self):
             return self._tango_object._object
 
+
     DeviceDispatcher.__name__ = tango_class_name
+    DeviceDispatcher.TangoClassName = tango_class_name
     DeviceDispatcherClass = DeviceDispatcher.TangoClassClass
 
     for name in dir(obj):
@@ -1540,12 +1960,12 @@ class Server:
         self.__protocol = protocol
         self.__tango_classes = _to_classes(tango_classes or [])
         self.__tango_devices = []
-        if self.gevent_mode:
-            self.__worker = _create_gevent_worker()
+        if self.async_mode:
+            self.__worker = _create_async_worker(self.green_mode)
         else:
             self.__worker = get_worker()
         set_worker(self.__worker)
-        self.log = logging.getLogger("PyTango.Server")
+        self.log = logging.getLogger("tango.Server")
         self.__phase = Server.Phase0
 
     def __build_args(self):
@@ -1579,8 +1999,8 @@ class Server:
         if server_registered:
             dserver_name = "dserver/{0}".format(server_instance)
             if db.import_device(dserver_name).exported:
-                import PyTango
-                dserver = PyTango.DeviceProxy(dserver_name)
+                import tango
+                dserver = tango.DeviceProxy(dserver_name)
                 try:
                     dserver.ping()
                     raise Exception("Server already running")
@@ -1650,13 +2070,13 @@ class Server:
 
     def __initialize(self):
         self.log.debug("initialize")
-        gevent_mode = self.gevent_mode
+        async_mode = self.async_mode
         event_loop = self.__event_loop_callback
 
         util = self.tango_util
         u_instance = util.instance()
 
-        if gevent_mode:
+        if async_mode:
             if event_loop:
                 event_loop = functools.partial(self.worker.execute,
                                                event_loop)
@@ -1665,11 +2085,11 @@ class Server:
 
         _add_classes(util, self.__tango_classes)
 
-        if gevent_mode:
+        if async_mode:
             tango_thread_id = self.worker.run_in_thread(self.__tango_loop)
 
     def __run(self, timeout=None):
-        if self.gevent_mode:
+        if self.async_mode:
             return self.worker.run(timeout=timeout)
         else:
             self.__tango_loop()
@@ -1712,8 +2132,8 @@ class Server:
     @property
     def tango_util(self):
         if self.__util is None:
-            import PyTango
-            self.__util = PyTango.Util(self.__build_args())
+            import tango
+            self.__util = tango.Util(self.__build_args())
             self._phase = Server.Phase1
         return self.__util
 
@@ -1721,7 +2141,7 @@ class Server:
     def green_mode(self):
         gm = self.__green_mode
         if gm is None:
-            from PyTango import get_green_mode
+            from tango import get_green_mode
             gm = get_green_mode()
         return gm
 
@@ -1735,8 +2155,8 @@ class Server:
         self.__green_mode = gm
 
     @property
-    def gevent_mode(self):
-        return self.green_mode == GreenMode.Gevent
+    def async_mode(self):
+        return self.green_mode in (GreenMode.Gevent, GreenMode.Asyncio)
 
     @property
     def worker(self):
@@ -1756,8 +2176,8 @@ class Server:
         :rtype: tuple<dict, dict>
         """
         if self.__util is None:
-            import PyTango
-            db = PyTango.Database()
+            import tango
+            db = tango.Database()
         else:
             db = self.__util.get_database()
         server = self.server_instance
@@ -1798,8 +2218,8 @@ class Server:
     def unregister_object(self, name):
         tango_object = self.__objects.pop(name.lower())
         if self._phase > Server.Phase1:
-            import PyTango
-            util = PyTango.Util.instance()
+            import tango
+            util = tango.Util.instance()
             if not util.is_svr_shutting_down():
                 util.delete_device(tango_object.tango_class_name, name)
 
@@ -1831,19 +2251,19 @@ class Server:
                                                tango_class_name=class_name)
         self.__objects[full_name.lower()] = tango_object
         if self._phase > Server.Phase1:
-            import PyTango
-            util = PyTango.Util.instance()
+            import tango
+            util = tango.Util.instance()
             util.create_device(class_name, name)
         return tango_object
 
     def run(self, timeout=None):
         self.log.debug("run")
-        gevent_mode = self.gevent_mode
+        async_mode = self.async_mode
         running = self.__running
         if not running:
             self.__prepare()
             self.__initialize()
         else:
-            if not gevent_mode:
+            if not async_mode:
                 raise RuntimeError("Server is already running")
         self.__run(timeout=timeout)
diff --git a/tango/tango_asyncio.py b/tango/tango_asyncio.py
new file mode 100644
index 0000000..740a569
--- /dev/null
+++ b/tango/tango_asyncio.py
@@ -0,0 +1,110 @@
+# -----------------------------------------------------------------------------
+# This file is part of PyTango (http://pytango.rtfd.io)
+#
+# 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_executor", "submit", "spawn", "wait", "get_event_loop"]
+
+__global_executor = None
+
+
+def __get_executor_class():
+    # Imports
+    import concurrent.futures
+    from functools import partial
+    try:
+        import asyncio
+    except ImportError:
+        import trollius as asyncio
+
+    # Asyncio executor
+    class AsyncioExecutor(concurrent.futures.Executor):
+        """Executor to submit task to a subexecutor through an asyncio loop.
+        Warning: This class has nothing to do with the AsyncioExecutor class
+        implemented for the server.
+        """
+
+        def __init__(self, loop=None, subexecutor=None):
+            self.subexecutor = subexecutor
+            self.loop = loop or asyncio.get_event_loop()
+
+        def submit(self, fn, *args, **kwargs):
+            callback = partial(fn, *args, **kwargs)
+            return self.loop.run_in_executor(self.subexecutor, callback)
+
+    # Return
+    return AsyncioExecutor
+
+
+def get_global_executor():
+    # Get global executor
+    global __global_executor
+    if __global_executor is not None:
+        return __global_executor
+    # Import futures executor
+    try:
+        from .tango_futures import get_global_executor as get_futures_executor
+    except ImportError:
+        get_futures_executor = lambda: None
+    # Set global
+    loop = get_event_loop()
+    klass = __get_executor_class()
+    subexecutor = get_futures_executor()
+    __global_executor = klass(loop, subexecutor)
+    return __global_executor
+
+
+def submit(fn, *args, **kwargs):
+    return get_global_executor().submit(fn, *args, **kwargs)
+
+spawn = submit
+
+
+def wait(fut, timeout=None, loop=None):
+    # Imports
+    try:
+        import asyncio
+    except ImportError:
+        import trollius as asyncio
+    # Run loop
+    loop = loop or asyncio.get_event_loop()
+    coro = asyncio.wait_for(fut, timeout, loop=loop)
+    return loop.run_until_complete(coro)
+
+
+def get_event_loop():
+    # Imports
+    try:
+        import asyncio
+    except ImportError:
+        import trollius as asyncio
+    # Get loop
+    global __event_loop
+    if __event_loop is not None:
+        return __event_loop
+    # Create loop
+    try:
+        loop = asyncio.get_event_loop()
+    except RuntimeError:
+        loop = asyncio.new_event_loop()
+        asyncio.set_event_loop(loop)
+
+    def submit(fn, *args, **kwargs):
+        callback = lambda: fn(*args, **kwargs)
+        return loop.call_soon_threadsafe(callback)
+
+    # Patch loop
+    loop.submit = submit
+    __event_loop = loop
+    return loop
+
+
+__event_loop = None
diff --git a/src/boost/python/tango_futures.py b/tango/tango_futures.py
similarity index 85%
rename from src/boost/python/tango_futures.py
rename to tango/tango_futures.py
index b0a8dc0..04d00d6 100644
--- a/src/boost/python/tango_futures.py
+++ b/tango/tango_futures.py
@@ -1,5 +1,5 @@
 # ------------------------------------------------------------------------------
-# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+# This file is part of PyTango (http://pytango.rtfd.io)
 #
 # Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
 # Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
@@ -9,7 +9,7 @@
 # See LICENSE.txt for more info.
 # ------------------------------------------------------------------------------
 
-__all__ = ["uses_future", "get_global_executor", "submit", "spawn"] 
+__all__ = ["get_global_executor", "submit", "spawn", "wait"]
 
 __global_executor = None
 
@@ -40,4 +40,8 @@ def submit(fn, *args, **kwargs):
     return get_global_executor().submit(fn, *args, **kwargs)
 
 
+def wait(fut, timeout=None):
+    return fut.result(timeout=timeout)
+
+
 spawn = submit
diff --git a/src/boost/python/tango_gevent.py b/tango/tango_gevent.py
similarity index 91%
rename from src/boost/python/tango_gevent.py
rename to tango/tango_gevent.py
index 8c04e96..d2739ac 100644
--- a/src/boost/python/tango_gevent.py
+++ b/tango/tango_gevent.py
@@ -1,5 +1,5 @@
 # ------------------------------------------------------------------------------
-# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+# This file is part of PyTango (http://pytango.rtfd.io)
 #
 # Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
 # Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
@@ -13,8 +13,10 @@ from __future__ import absolute_import
 import sys
 import types
 
+import six
+
 __all__ = ["get_global_threadpool", "get_global_executor",
-           "get_event_loop", "submit", "spawn"]
+           "get_event_loop", "submit", "spawn", "wait"]
 
 def get_global_threadpool():
     import gevent
@@ -53,7 +55,7 @@ def get_with_exception(g, block=True, timeout=None):
     result = g._get(block, timeout)
     if isinstance(result, ExceptionWrapper):
         # raise the exception using the caller context
-        raise result.error_string, None, result.tb
+        six.reraise(result.exception, result.error_string,result.tb)
     else:
         return result
 
@@ -95,3 +97,6 @@ def get_event_loop():
         __event_loop = gevent.spawn(loop, queue)
         __event_loop.submit = submit
     return __event_loop
+
+def wait(greenlet, timeout=None):
+    return greenlet.get(timeout=timeout)
diff --git a/src/boost/python/tango_numpy.py b/tango/tango_numpy.py
similarity index 95%
rename from src/boost/python/tango_numpy.py
rename to tango/tango_numpy.py
index b8070af..d7a8140 100644
--- a/src/boost/python/tango_numpy.py
+++ b/tango/tango_numpy.py
@@ -1,5 +1,5 @@
 # ------------------------------------------------------------------------------
-# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+# This file is part of PyTango (http://pytango.rtfd.io)
 #
 # Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
 # Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
@@ -17,8 +17,8 @@ __all__ = [ "NumpyType", "numpy_type", "numpy_spectrum", "numpy_image" ]
 
 __docformat__ = "restructuredtext"
 
-from ._PyTango import Except
-from ._PyTango import constants
+from ._tango import Except
+from ._tango import constants
 
 from .attribute_proxy import AttributeProxy
 import collections
@@ -38,9 +38,9 @@ def _define_numpy():
         import numpy
         import operator
 
-        ArgType = _PyTango.CmdArgType
-        AttributeInfo = _PyTango.AttributeInfo
-        Attribute = _PyTango.Attribute
+        ArgType = _tango.CmdArgType
+        AttributeInfo = _tango.AttributeInfo
+        Attribute = _tango.Attribute
 
         class NumpyType(object):
 
@@ -91,7 +91,7 @@ def _define_numpy():
                 numpy_spectrum(self, tg_type, dim_x, dim_y) -> numpy.array
                 numpy_spectrum(self, tg_type, sequence) -> numpy.array
 
-                        Get a square numpy array to be used with PyTango.
+                        Get a square numpy array to be used with tango.
                         One version gets dim_x and creates an object with
                         this size. The other version expects any sequence to
                         convert.
@@ -116,7 +116,7 @@ def _define_numpy():
                 numpy_image(self, tg_type, dim_x, dim_y) -> numpy.array
                 numpy_image(self, tg_type, sequence) -> numpy.array
 
-                        Get a square numpy array to be used with PyTango.
+                        Get a square numpy array to be used with tango.
                         One version gets dim_x and dim_y and creates an object with
                         this size. The other version expects a square sequence of
                         sequences to convert.
diff --git a/src/boost/python/time_val.py b/tango/time_val.py
similarity index 93%
rename from src/boost/python/time_val.py
rename to tango/time_val.py
index d2e54c9..c8a9e7f 100644
--- a/src/boost/python/time_val.py
+++ b/tango/time_val.py
@@ -1,5 +1,5 @@
 # ------------------------------------------------------------------------------
-# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+# This file is part of PyTango (http://pytango.rtfd.io)
 #
 # Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
 # Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
@@ -21,7 +21,7 @@ import time
 import datetime
 import operator
 
-from ._PyTango import TimeVal
+from ._tango import TimeVal
 import numbers
 
 def __TimeVal__init(self, a=None, b=None, c=None):
@@ -71,7 +71,7 @@ def __TimeVal__fromtimestamp(ts):
     """
     fromtimestamp(ts) -> TimeVal
 
-        A static method returning a :class:`PyTango.TimeVal` object representing
+        A static method returning a :class:`tango.TimeVal` object representing
         the given timestamp
     
         Parameters :
@@ -85,7 +85,7 @@ def __TimeVal__fromdatetime(dt):
     """
     fromdatetime(dt) -> TimeVal
 
-        A static method returning a :class:`PyTango.TimeVal` object representing
+        A static method returning a :class:`tango.TimeVal` object representing
         the given :class:`datetime.datetime`
     
         Parameters :
@@ -103,7 +103,7 @@ def __TimeVal__now():
     """
     now() -> TimeVal
 
-        A static method returning a :class:`PyTango.TimeVal` object representing
+        A static method returning a :class:`tango.TimeVal` object representing
         the current time
     
         Parameters : None
diff --git a/src/boost/python/utils.py b/tango/utils.py
similarity index 83%
rename from src/boost/python/utils.py
rename to tango/utils.py
index cc71a0a..10b7b66 100644
--- a/src/boost/python/utils.py
+++ b/tango/utils.py
@@ -1,5 +1,5 @@
 # ------------------------------------------------------------------------------
-# This file is part of PyTango (http://www.tinyurl.com/PyTango)
+# This file is part of PyTango (http://pytango.rtfd.io)
 #
 # Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
 # Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
@@ -35,13 +35,16 @@ import sys
 import numbers
 import collections
 
-from ._PyTango import StdStringVector, StdDoubleVector, \
+from ._tango import StdStringVector, StdDoubleVector, \
     DbData, DbDevInfos, DbDevExportInfos, CmdArgType, AttrDataFormat, \
     EventData, AttrConfEventData, DataReadyEventData, DevFailed, constants, \
-    GreenMode
+    DevState, CommunicationFailed
+
+from . import _tango
 from .constants import AlrmValueNotSpec, StatusNotSet, TgLibVers
 from .release import Release
 
+
 _scalar_int_types = (CmdArgType.DevShort, CmdArgType.DevUShort,
     CmdArgType.DevInt, CmdArgType.DevLong, CmdArgType.DevULong,
     CmdArgType.DevLong64, CmdArgType.DevULong64)
@@ -75,6 +78,78 @@ _array_types = _array_numerical_types + _array_bool_types + _array_str_types + \
 
 _binary_types = (CmdArgType.DevEncoded, CmdArgType.DevVarCharArray)
 
+def __build_to_tango_type():
+    ret = \
+    {
+        int         : CmdArgType.DevLong64,
+        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,
+        'state'     : CmdArgType.DevState,
+        'enum'      : CmdArgType.DevEnum,
+        'blob'      : CmdArgType.DevPipeBlob,
+    }
+
+    try:
+        ret[long] = ret[int]
+    except NameError:
+        pass
+
+
+    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()
+
 _scalar_to_array_type = {
     CmdArgType.DevBoolean : CmdArgType.DevVarBooleanArray,
     CmdArgType.DevUChar : CmdArgType.DevVarCharArray,
@@ -91,6 +166,12 @@ _scalar_to_array_type = {
     CmdArgType.ConstDevString : CmdArgType.DevVarStringArray,
 }
 
+# add derived scalar types to scalar to array map
+for k, v in TO_TANGO_TYPE.items():
+    if v in _scalar_to_array_type:
+        _scalar_to_array_type[k] = _scalar_to_array_type[v]
+
+
 __NO_STR_VALUE = AlrmValueNotSpec, StatusNotSet
 
 __device_classes = None
@@ -101,7 +182,7 @@ bool_ = lambda value_str : value_str.lower() == "true"
 def __import(name):
     __import__(name)
     return sys.modules[name]
-    
+
 def __requires(package_name, min_version=None, conflicts=(),
                software_name="Software"):
     from distutils.version import LooseVersion
@@ -122,10 +203,10 @@ def __requires(package_name, min_version=None, conflicts=(),
             msg = "Error importing package {0} required by {1}".format(
                 package_name, software_name)
             raise Exception(msg)
-        
+
     if min_version is not None:
         min_version = LooseVersion(min_version)
-        if min_version > curr_version:        
+        if min_version > curr_version:
             msg = "{0} requires {1} {2} but {3} installed".format(
                 software_name, package_name, min_version, curr_version)
             raise Exception(msg)
@@ -134,7 +215,7 @@ def __requires(package_name, min_version=None, conflicts=(),
     if curr_version in conflicts:
         msg = "{0} cannot run with {1} {2}".format(
             software_name, package_name, curr_version)
-        raise Exception(msg)        
+        raise Exception(msg)
     return True
 
 def requires_pytango(min_version=None, conflicts=(),
@@ -144,7 +225,7 @@ def requires_pytango(min_version=None, conflicts=(),
     software is present. If not an exception is thrown.
     Example usage::
 
-        from PyTango import requires_pytango
+        from tango import requires_pytango
 
         requires_pytango('7.1', conflicts=['8.1.1'], software='MyDS')
 
@@ -161,14 +242,14 @@ def requires_pytango(min_version=None, conflicts=(),
     :type conflics:
         seq<str|LooseVersion>
     :param software_name:
-        software name using PyTango. Used in the exception message
+        software name using tango. Used in the exception message
     :type software_name: str
 
     :raises Exception: if the required PyTango version is not met
 
     New in PyTango 8.1.4
     """
-    return __requires("PyTango", min_version=min_version,
+    return __requires("pytango", min_version=min_version,
                       conflicts=conflicts, software_name=software_name)
 
 
@@ -179,7 +260,7 @@ def requires_tango(min_version=None, conflicts=(),
     software is present. If not an exception is thrown.
     Example usage::
 
-        from Tango import requires_tango
+        from tango import requires_tango
 
         requires_tango('7.1', conflicts=['8.1.1'], software='MyDS')
 
@@ -204,24 +285,29 @@ def requires_tango(min_version=None, conflicts=(),
     New in PyTango 8.1.4
     """
     return __requires("Tango", min_version=min_version,
-                      conflicts=conflicts, software_name=software_name)    
+                      conflicts=conflicts, software_name=software_name)
 
 
 def get_tango_device_classes():
     global __device_classes
     if __device_classes is None:
-        import PyTango
-        __device_classes = [PyTango.DeviceImpl]
+
+        __device_classes = [_tango.DeviceImpl]
         i = 2
         while True:
             dc = "Device_{0}Impl".format(i)
             try:
-               __device_classes.append(getattr(PyTango, dc))
+               __device_classes.append(getattr(_tango, dc))
                i = i + 1
             except AttributeError:
                 break
     return __device_classes
 
+
+def get_latest_device_class():
+    return get_tango_device_classes()[-1]
+
+
 try:
     __str_klasses = basestring,
 except NameError:
@@ -230,7 +316,7 @@ except NameError:
 
 __int_klasses = int,
 __number_klasses = numbers.Number,
-__seq_klasses = collections.Sequence, bytearray
+__seq_klasses = collections.Sequence, bytearray, StdStringVector
 
 __use_unicode = False
 try:
@@ -260,6 +346,43 @@ __number_klasses = tuple(__number_klasses)
 __seq_klasses = tuple(__seq_klasses)
 
 
+def __get_tango_type(obj):
+    from .device_server import DataElement
+    if is_non_str_seq(obj):
+        tg_type, tg_format = get_tango_type(obj[0])
+        tg_format = AttrDataFormat(int(tg_format)+1)
+        return tg_type, tg_format
+    elif is_pure_str(obj):
+        r = CmdArgType.DevString
+    elif isinstance(obj, DevState):
+        r = CmdArgType.DevState
+    elif isinstance(obj, bool):
+        r = CmdArgType.DevBoolean
+    elif isinstance(obj, __int_klasses):
+        r = CmdArgType.DevLong64
+    elif isinstance(obj, __number_klasses):
+        r = CmdArgType.DevDouble
+    return r, AttrDataFormat.SCALAR
+
+
+def __get_tango_type_numpy_support(obj):
+    import numpy
+    try:
+        ndim, dtype = obj.ndim, str(obj.dtype)
+        if ndim > 2:
+            raise TypeError('cannot translate numpy array with {0} '
+                            'dimensions to tango type'.format(obj.ndim))
+        return TO_TANGO_TYPE[dtype], AttrDataFormat(ndim)
+    except AttributeError:
+        return __get_tango_type(obj)
+
+
+def get_tango_type(obj):
+    if constants.NUMPY_SUPPORT:
+        return __get_tango_type_numpy_support(obj)
+    return __get_tango_type(obj)
+
+
 def is_pure_str(obj):
     """
     Tells if the given object is a python string.
@@ -307,7 +430,7 @@ def is_non_str_seq(obj):
 
     :return: True is the given obj is a sequence or False otherwise
     :rtype: :py:obj:`bool`
-    """    
+    """
     return is_seq(obj) and not is_pure_str(obj)
 
 
@@ -347,10 +470,10 @@ def is_number(obj):
 
 def is_scalar(tg_type):
     """Tells if the given tango type is a scalar
-    
+
     :param tg_type: tango type
-    :type tg_type: :class:`PyTango.CmdArgType`
-    
+    :type tg_type: :class:`tango.CmdArgType`
+
     :return: True if the given tango type is a scalar or False otherwise
     :rtype: :py:obj:`bool`
     """
@@ -362,10 +485,10 @@ is_scalar_type = is_scalar
 
 def is_array(tg_type):
     """Tells if the given tango type is an array type
-    
+
     :param tg_type: tango type
-    :type tg_type: :class:`PyTango.CmdArgType`
-    
+    :type tg_type: :class:`tango.CmdArgType`
+
     :return: True if the given tango type is an array type or False otherwise
     :rtype: :py:obj:`bool`
     """
@@ -377,13 +500,13 @@ is_array_type = is_array
 
 def is_numerical(tg_type, inc_array=False):
     """Tells if the given tango type is numerical
-    
+
     :param tg_type: tango type
-    :type tg_type: :class:`PyTango.CmdArgType`
-    :param inc_array: (optional, default is False) determines if include array 
+    :type tg_type: :class:`tango.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 a numerical or False otherwise
     :rtype: :py:obj:`bool`
     """
@@ -399,13 +522,13 @@ is_numerical_type = is_numerical
 
 def is_int(tg_type, inc_array=False):
     """Tells if the given tango type is integer
-    
+
     :param tg_type: tango type
-    :type tg_type: :class:`PyTango.CmdArgType`
-    :param inc_array: (optional, default is False) determines if include array 
+    :type tg_type: :class:`tango.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 integer or False otherwise
     :rtype: :py:obj:`bool`
     """
@@ -421,13 +544,13 @@ is_int_type = is_int
 
 def is_float(tg_type, inc_array=False):
     """Tells if the given tango type is float
-    
+
     :param tg_type: tango type
-    :type tg_type: :class:`PyTango.CmdArgType`
-    :param inc_array: (optional, default is False) determines if include array 
+    :type tg_type: :class:`tango.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 float or False otherwise
     :rtype: :py:obj:`bool`
     """
@@ -443,13 +566,13 @@ 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 
+    :type tg_type: :class:`tango.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`
     """
@@ -464,13 +587,13 @@ 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 
+    :type tg_type: :class:`tango.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`
     """
@@ -486,13 +609,13 @@ 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 
+    :type tg_type: :class:`tango.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`
     """
@@ -503,31 +626,31 @@ is_bin_type = is_bin
 
 
 def seq_2_StdStringVector(seq, vec=None):
-    """Converts a python sequence<str> object to a :class:`PyTango.StdStringVector`
-        
+    """Converts a python sequence<str> object to a :class:`tango.StdStringVector`
+
         :param seq: the sequence of strings
         :type seq: sequence<:py:obj:`str`>
-        :param vec: (optional, default is None) an :class:`PyTango.StdStringVector`
-                    to be filled. If None is given, a new :class:`PyTango.StdStringVector`
+        :param vec: (optional, default is None) an :class:`tango.StdStringVector`
+                    to be filled. If None is given, a new :class:`tango.StdStringVector`
                     is created
-        :return: a :class:`PyTango.StdStringVector` filled with the same contents as seq
-        :rtype: :class:`PyTango.StdStringVector`
+        :return: a :class:`tango.StdStringVector` filled with the same contents as seq
+        :rtype: :class:`tango.StdStringVector`
     """
     if vec is None:
         if isinstance(seq, StdStringVector): return seq
         vec = StdStringVector()
     if not isinstance(vec, StdStringVector):
-        raise TypeError('vec must be a PyTango.StdStringVector')
+        raise TypeError('vec must be a tango.StdStringVector')
     for e in seq:
         vec.append(str(e))
     return vec
 
 
 def StdStringVector_2_seq(vec, seq=None):
-    """Converts a :class:`PyTango.StdStringVector` to a python sequence<str>
-        
-        :param seq: the :class:`PyTango.StdStringVector`
-        :type seq: :class:`PyTango.StdStringVector`
+    """Converts a :class:`tango.StdStringVector` to a python sequence<str>
+
+        :param seq: the :class:`tango.StdStringVector`
+        :type seq: :class:`tango.StdStringVector`
         :param vec: (optional, default is None) a python sequence to be filled.
                      If None is given, a new list is created
         :return: a python sequence filled with the same contents as seq
@@ -535,38 +658,38 @@ def StdStringVector_2_seq(vec, seq=None):
     """
     if seq is None: seq = []
     if not isinstance(vec, StdStringVector):
-        raise TypeError('vec must be a PyTango.StdStringVector')
+        raise TypeError('vec must be a tango.StdStringVector')
     for e in vec:
         seq.append(str(e))
     return seq
 
 
 def seq_2_StdDoubleVector(seq, vec=None):
-    """Converts a python sequence<float> object to a :class:`PyTango.StdDoubleVector`
-        
+    """Converts a python sequence<float> object to a :class:`tango.StdDoubleVector`
+
         :param seq: the sequence of floats
         :type seq: sequence<:py:obj:`float`>
-        :param vec: (optional, default is None) an :class:`PyTango.StdDoubleVector`
-                    to be filled. If None is given, a new :class:`PyTango.StdDoubleVector`
+        :param vec: (optional, default is None) an :class:`tango.StdDoubleVector`
+                    to be filled. If None is given, a new :class:`tango.StdDoubleVector`
                     is created
-        :return: a :class:`PyTango.StdDoubleVector` filled with the same contents as seq
-        :rtype: :class:`PyTango.StdDoubleVector`
+        :return: a :class:`tango.StdDoubleVector` filled with the same contents as seq
+        :rtype: :class:`tango.StdDoubleVector`
     """
     if vec is None:
         if isinstance(seq, StdDoubleVector): return seq
         vec = StdDoubleVector()
     if not isinstance(vec, StdDoubleVector):
-        raise TypeError('vec must be a PyTango.StdDoubleVector')
+        raise TypeError('vec must be a tango.StdDoubleVector')
     for e in seq:
         vec.append(str(e))
     return vec
 
 
 def StdDoubleVector_2_seq(vec, seq=None):
-    """Converts a :class:`PyTango.StdDoubleVector` to a python sequence<float>
-        
-        :param seq: the :class:`PyTango.StdDoubleVector`
-        :type seq: :class:`PyTango.StdDoubleVector`
+    """Converts a :class:`tango.StdDoubleVector` to a python sequence<float>
+
+        :param seq: the :class:`tango.StdDoubleVector`
+        :type seq: :class:`tango.StdDoubleVector`
         :param vec: (optional, default is None) a python sequence to be filled.
                      If None is given, a new list is created
         :return: a python sequence filled with the same contents as seq
@@ -574,67 +697,67 @@ def StdDoubleVector_2_seq(vec, seq=None):
     """
     if seq is None: seq = []
     if not isinstance(vec, StdDoubleVector):
-        raise TypeError('vec must be a PyTango.StdDoubleVector')
+        raise TypeError('vec must be a tango.StdDoubleVector')
     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`
-        
+    """Converts a python sequence<DbDevInfo> object to a :class:`tango.DbDevInfos`
+
         :param seq: the sequence of DbDevInfo
         :type seq: sequence<DbDevInfo>
-        :param vec: (optional, default is None) an :class:`PyTango.DbDevInfos`
-                    to be filled. If None is given, a new :class:`PyTango.DbDevInfos`
+        :param vec: (optional, default is None) an :class:`tango.DbDevInfos`
+                    to be filled. If None is given, a new :class:`tango.DbDevInfos`
                     is created
-        :return: a :class:`PyTango.DbDevInfos` filled with the same contents as seq
-        :rtype: :class:`PyTango.DbDevInfos`
+        :return: a :class:`tango.DbDevInfos` filled with the same contents as seq
+        :rtype: :class:`tango.DbDevInfos`
     """
     if vec is None:
         if isinstance(seq, DbDevInfos): return seq
         vec = DbDevInfos()
     if not isinstance(vec, DbDevInfos):
-        raise TypeError('vec must be a PyTango.DbDevInfos')
+        raise TypeError('vec must be a tango.DbDevInfos')
     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`
-        
+    """Converts a python sequence<DbDevExportInfo> object to a :class:`tango.DbDevExportInfos`
+
         :param seq: the sequence of DbDevExportInfo
         :type seq: sequence<DbDevExportInfo>
-        :param vec: (optional, default is None) an :class:`PyTango.DbDevExportInfos`
-                    to be filled. If None is given, a new :class:`PyTango.DbDevExportInfos`
+        :param vec: (optional, default is None) an :class:`tango.DbDevExportInfos`
+                    to be filled. If None is given, a new :class:`tango.DbDevExportInfos`
                     is created
-        :return: a :class:`PyTango.DbDevExportInfos` filled with the same contents as seq
-        :rtype: :class:`PyTango.DbDevExportInfos`
+        :return: a :class:`tango.DbDevExportInfos` filled with the same contents as seq
+        :rtype: :class:`tango.DbDevExportInfos`
     """
     if vec is None:
         if isinstance(seq, DbDevExportInfos): return seq
         vec = DbDevExportInfos()
     if not isinstance(vec, DbDevExportInfos):
-        raise TypeError('vec must be a PyTango.DbDevExportInfos')
+        raise TypeError('vec must be a tango.DbDevExportInfos')
     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`
-        
+    """Converts a python sequence<DbDatum> object to a :class:`tango.DbData`
+
         :param seq: the sequence of DbDatum
         :type seq: sequence<DbDatum>
-        :param vec: (optional, default is None) an :class:`PyTango.DbData`
-                    to be filled. If None is given, a new :class:`PyTango.DbData`
+        :param vec: (optional, default is None) an :class:`tango.DbData`
+                    to be filled. If None is given, a new :class:`tango.DbData`
                     is created
-        :return: a :class:`PyTango.DbData` filled with the same contents as seq
-        :rtype: :class:`PyTango.DbData`
+        :return: a :class:`tango.DbData` filled with the same contents as seq
+        :rtype: :class:`tango.DbData`
     """
     if vec is None:
         if isinstance(seq, DbData): return seq
         vec = DbData()
     if not isinstance(vec, DbData):
-        raise TypeError('vec must be a PyTango.DbData')
+        raise TypeError('vec must be a tango.DbData')
     for e in seq: vec.append(e)
     return vec
 
@@ -642,7 +765,7 @@ def seq_2_DbData(seq, vec=None):
 def DbData_2_dict(db_data, d=None):
     if d is None: d = {}
     if not isinstance(db_data, DbData):
-        raise TypeError('db_data must be a PyTango.DbData. A %s found instead' % type(db_data))
+        raise TypeError('db_data must be a tango.DbData. A %s found instead' % type(db_data))
     for db_datum in db_data:
         d[db_datum.name] = db_datum.value_string
     return d
@@ -650,14 +773,14 @@ def DbData_2_dict(db_data, d=None):
 
 def seqStr_2_obj(seq, tg_type, tg_format=None):
     """Translates a sequence<str> to a sequence of objects of give type and format
-    
+
         :param seq: the sequence
         :type seq: sequence<str>
         :param tg_type: tango type
-        :type tg_type: :class:`PyTango.CmdArgType`
+        :type tg_type: :class:`tango.CmdArgType`
         :param tg_format: (optional, default is None, meaning SCALAR) tango format
-        :type tg_format: :class:`PyTango.AttrDataFormat`
-        
+        :type tg_format: :class:`tango.AttrDataFormat`
+
         :return: a new sequence
     """
     if tg_format:
@@ -750,13 +873,13 @@ def scalar_to_array_type(tg_type):
     """
     Gives the array tango type corresponding to the given tango
     scalar type. Example: giving DevLong will return DevVarLongArray.
-    
+
     :param tg_type: tango type
-    :type tg_type: :class:`PyTango.CmdArgType`
+    :type tg_type: :class:`tango.CmdArgType`
 
     :return: the array tango type for the given scalar tango type
-    :rtype: :class:`PyTango.CmdArgType`
-    
+    :rtype: :class:`tango.CmdArgType`
+
     :raises ValueError: in case the given dtype is not a tango scalar type
     """
     try:
@@ -767,11 +890,11 @@ def scalar_to_array_type(tg_type):
 
 def str_2_obj(obj_str, tg_type=None):
     """Converts a string into an object according to the given tango type
-    
+
            :param obj_str: the string to be converted
            :type obj_str: :py:obj:`str`
            :param tg_type: tango type
-           :type tg_type: :class:`PyTango.CmdArgType`
+           :type tg_type: :class:`tango.CmdArgType`
            :return: an object calculated from the given string
            :rtype: :py:obj:`object`
     """
@@ -793,11 +916,11 @@ def str_2_obj(obj_str, tg_type=None):
 
 def obj_2_str(obj, tg_type=None):
     """Converts a python object into a string according to the given tango type
-    
+
            :param obj: the object to be converted
            :type obj: :py:obj:`object`
            :param tg_type: tango type
-           :type tg_type: :class:`PyTango.CmdArgType`
+           :type tg_type: :class:`tango.CmdArgType`
            :return: a string representation of the given object
            :rtype: :py:obj:`str`
     """
@@ -833,7 +956,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:
@@ -849,7 +972,7 @@ def document_method(klass, method_name, d, add=True):
         except AttributeError:
             pass
 
-        
+
 def document_static_method(klass, method_name, d, add=True):
     meth, func = __get_meth_func(klass, method_name)
     if add:
@@ -859,7 +982,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'})
 
@@ -877,10 +1000,10 @@ 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, 
+    """A case insensitive lists that has some caseless methods. Only allows
+    strings as list members. Most methods that would normally return a list,
     return a CaselessList. (Except list() and lowercopy())
     Sequence Methods implemented are :
     __contains__, remove, count, index, append, extend, insert,
@@ -944,7 +1067,7 @@ class CaselessList(list):
         list.append(self, item)
 
     def extend(self, item):
-        """Extend the list with another list. Each member of the list must be 
+        """Extend the list with another list. Each member of the list must be
         a string."""
         if not isinstance(item, list):
             raise TypeError('You can only extend lists with lists. ' \
@@ -966,7 +1089,7 @@ class CaselessList(list):
         return count
 
     def index(self, item, minindex=0, maxindex=None):
-        """Provide an index of first occurence of item in the list. (or raise 
+        """Provide an index of first occurence of item in the list. (or raise
         a ValueError if item not present)
         If item is not a string, will raise a TypeError.
         minindex and maxindex are also optional arguments
@@ -995,10 +1118,10 @@ class CaselessList(list):
 
     def __setitem__(self, index, value):
         """For setting values in the list.
-        index must be an integer or (extended) slice object. (__setslice__ used 
+        index must be an integer or (extended) slice object. (__setslice__ used
         for simple slices)
         If index is an integer then value must be a string.
-        If index is a slice object then value must be a list of strings - with 
+        If index is a slice object then value must be a list of strings - with
         the same length as the slice object requires.
         """
         if isinstance(index, int):
@@ -1027,7 +1150,7 @@ class CaselessList(list):
 
     def __getslice__(self, i, j):
         """Called to implement evaluation of self[i:j].
-        Although the manual says this method is deprecated - if I don't define 
+        Although the manual says this method is deprecated - if I don't define
         it the list one is called.
         (Which returns a list - this returns a CaselessList)"""
         return CaselessList(list.__getslice__(self, i, j))
@@ -1139,17 +1262,18 @@ def _notifd2db_file_db(ior_string, files, out=sys.stdout):
     return
 
 def _notifd2db_real_db(ior_string, host=None, out=sys.stdout):
-    import PyTango
+    from . import Database
+
     print("going to export notification service event factory to " \
           "Tango database ...", file=out)
 
     num_retries = 3
     while num_retries > 0:
         try:
-            db = PyTango.Database()
+            db = Database()
             db.set_timeout_millis(10000)
             num_retries = 0
-        except PyTango.DevFailed as df:
+        except DevFailed as df:
             num_retries -= 1
             if num_retries == 0:
                 print("Can't create Tango database object", file=out)
@@ -1173,7 +1297,7 @@ def _notifd2db_real_db(ior_string, host=None, out=sys.stdout):
             print("Successfully exported notification service event " \
                   "factory for host", host_name, "to Tango database !", file=out)
             break
-        except PyTango.CommunicationFailed as cf:
+        except CommunicationFailed as cf:
             if len(cf.errors) >= 2:
                 if cf.errors[1].reason == "API_DeviceTimedOut":
                     if num_retries > 0:
@@ -1193,23 +1317,23 @@ def _notifd2db_real_db(ior_string, host=None, out=sys.stdout):
 class EventCallBack(object):
     """
     Useful event callback for test purposes
-    
+
     Usage::
-    
-        >>> dev = PyTango.DeviceProxy(dev_name)
-        >>> cb = PyTango.utils.EventCallBack()
-        >>> id = dev.subscribe_event("state", PyTango.EventType.CHANGE_EVENT, cb, [])
+
+        >>> dev = tango.DeviceProxy(dev_name)
+        >>> cb = tango.utils.EventCallBack()
+        >>> id = dev.subscribe_event("state", tango.EventType.CHANGE_EVENT, cb, [])
         2011-04-06 15:33:18.910474 sys/tg_test/1 STATE CHANGE [ATTR_VALID] ON
-        
+
     Allowed format keys are:
-        
+
         - date (event timestamp)
         - reception_date (event reception timestamp)
         - type (event type)
         - dev_name (device name)
         - name (attribute name)
         - value (event value)
-        
+
     New in PyTango 7.1.4
     """
 
@@ -1223,7 +1347,7 @@ class EventCallBack(object):
 
     def get_events(self):
         """Returns the list of events received by this callback
-           
+
            :return: the list of events received by this callback
            :rtype: sequence<obj>
         """
@@ -1292,14 +1416,14 @@ class EventCallBack(object):
         elif isinstance(evt, DataReadyEventData):
             return ""
 
-        
+
 def get_home():
     """
     Find user's home directory if possible. Otherwise raise error.
-    
+
     :return: user's home directory
     :rtype: :py:obj:`str`
-    
+
     New in PyTango 7.1.4
     """
     path = ''
@@ -1319,7 +1443,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
@@ -1329,12 +1453,12 @@ def _get_env_var(env_var_name):
         * a real environ var
         * HOME/.tangorc
         * /etc/tangorc
-        
+
     :param env_var_name: the environment variable name
     :type env_var_name: str
     :return: the value for the given environment name
     :rtype: str
-    
+
     New in PyTango 7.1.4
     """
 
@@ -1364,7 +1488,7 @@ def _get_env_var(env_var_name):
         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])
@@ -1375,13 +1499,10 @@ def from_version_str_to_int(version_str):
 
 
 def info():
-    import PyTango.constants
-
-    Compile = PyTango.constants.Compile
-    Runtime = PyTango.constants.Runtime
-
+    # Compile and Runtime are set by `tango.pytango_init.init`
+    from .constants import Compile, Runtime
     msg = """\
-PyTango {0.Release.version} {0.Release.version_info}
+PyTango {0.version} {0.version_info}
 PyTango compiled with:
     Python : {1.PY_VERSION}
     Numpy  : {1.NUMPY_VERSION}
@@ -1395,8 +1516,7 @@ PyTango runtime is:
     Boost  : {2.BOOST_VERSION}
 
 PyTango running on:
-{2.UNAME}   
+{2.UNAME}
 """
-    msg = msg.format(PyTango, Compile, Runtime)
+    msg = msg.format(Release, Compile, Runtime)
     return msg
-
diff --git a/win/PyTango_VS10/PyTango.props b/win/PyTango_VS10/PyTango.props
new file mode 100755
index 0000000..0262e3a
--- /dev/null
+++ b/win/PyTango_VS10/PyTango.props
@@ -0,0 +1,472 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup Label="UserMacros">
+    <PyTangoBaseFile>_tango</PyTangoBaseFile>
+    <TangoMajorVer>9</TangoMajorVer>
+    <TangoMinorVer>2</TangoMinorVer>
+    <TangoPatchVer>0</TangoPatchVer>
+    <TangoVer>$(TangoMajorVer).$(TangoMinorVer).$(TangoPatchVer)</TangoVer>
+    <PyTangoMajorVer>9</PyTangoMajorVer>
+    <PyTangoMinorVer>2</PyTangoMinorVer>
+    <PyTangoPatchVer>0</PyTangoPatchVer>
+    <PyTangoVer>$(PyTangoMajorVer).$(PyTangoMinorVer).$(PyTangoPatchVer)</PyTangoVer>
+
+    <BoostMajorVer>1</BoostMajorVer>
+    <BoostMinorVer>61</BoostMinorVer>
+    <BoostPatchVer>0</BoostPatchVer>
+    <BoostVer>$(BoostMajorVer).$(BoostMinorVer).$(BoostPatchVer)</BoostVer>
+
+    <!-- Tiago Coutinho personal configuration -->
+    <!-- <RootDir>C:\Users\coutinho\bin</RootDir> -->
+    <RootDir>C:</RootDir>
+    
+    <TangoBaseDir>$(RootDir)\wsp\tango</TangoBaseDir>
+    <BoostBaseDir>$(RootDir)\wsp\boost-$(BoostVer)</BoostBaseDir>
+    
+    <PythonBaseDir>C:\Python</PythonBaseDir>
+    
+    <VCMajorVer>10</VCMajorVer>
+    <VCMinorVer>0</VCMinorVer>
+    <VCVer>$(VCMajorVer).$(VCMinorVer)</VCVer>
+    
+    <BoostIncludeDir>$(BoostBaseDir)\include\boost-$(BoostMajorVer)_$(BoostMinorVer)</BoostIncludeDir>
+    <BoostLibDir>$(BoostBaseDir)\multi\release\msvc-$(VCVer)\$(Platform)</BoostLibDir>
+    <BoostLibDir_Debug>$(BoostBaseDir)\multi\debug\msvc-$(VCVer)\$(Platform)</BoostLibDir_Debug>
+    
+    <TangoIncludeDir>$(TangoBaseDir)\$(Platform)\include\vc$(VCMajorVer)</TangoIncludeDir>
+    <TangoLibDir>$(TangoBaseDir)\$(Platform)\lib</TangoLibDir>
+    <TangoLibDir_Debug>$(TangoBaseDir)\$(Platform)\lib</TangoLibDir_Debug>
+    
+    <PythonDir>C:\Python\$(Platform)</PythonDir>
+    <NumpyRelativeIncludeDir>Lib\site-packages\numpy\core\include</NumpyRelativeIncludeDir>
+    <PyTangoCompileOptions>-Zm200 /MP8 /bigobj</PyTangoCompileOptions>
+    <BaseDir>$(ProjectDir)..\..</BaseDir>
+    <RelPrefixDir>$(Configuration)_$(Platform)_msvc$(VCVer)</RelPrefixDir>
+    <BaseBuildDir>$(RootDir)\pytango\build_$(PyTangoVer)_tg$(TangoVer)_boost$(BoostVer)</BaseBuildDir>
+    <BaseBuildLibDir>$(BaseBuildDir)\lib</BaseBuildLibDir>
+    <BaseTempDir>$(BaseBuildDir)\temp</BaseTempDir>
+    <BaseDistDir>$(BaseBuildDir)\dist</BaseDistDir>
+    <BaseBDistDir>$(BaseBuildDir)\temp_dist</BaseBDistDir>
+    
+    <!-- to be used in the internal winsetup.py script -->
+    <BuildDir>$(BaseBuildLibDir)\$(RelPrefixDir)</BuildDir>
+    <DistDir>$(BaseDistDir)\$(RelPrefixDir)</DistDir>
+    <TempDir>$(BaseTempDir)\$(RelPrefixDir)</TempDir>
+    <BDistDir>$(BaseBDistDir)\$(RelPrefixDir)</BDistDir>
+    
+    <!-- to be set to OutputDir and IntDir -->
+    <PyTangoBuildDir>$(BuildDir)\tango</PyTangoBuildDir>
+    <PyTangoTempDir>$(TempDir)\tango</PyTangoTempDir>
+    
+    <BaseSrcDir>$(BaseDir)\ext</BaseSrcDir>
+    <CommonIncludeDirs>$(BoostIncludeDir);$(TangoIncludeDir);$(BaseSrcDir);$(BaseSrcDir)\server</CommonIncludeDirs>
+    
+    <Python33Dir>$(PythonDir)\33</Python33Dir>
+    <Py33>$(Python33Dir)\python</Py33>
+    <Python33IncludeDir>$(Python33Dir)\include</Python33IncludeDir>
+    <Numpy33IncludeDir>$(Python33Dir)\$(NumpyRelativeIncludeDir)</Numpy33IncludeDir>
+    <Python33IncludeDirs>$(Python33IncludeDir);$(Numpy33IncludeDir)</Python33IncludeDirs>
+    <Python33LibDir>$(Python33Dir)\libs</Python33LibDir>
+
+    <Python34Dir>$(PythonDir)\34</Python34Dir>
+    <Py34>$(Python34Dir)\python</Py34>
+    <Python34IncludeDir>$(Python34Dir)\include</Python34IncludeDir>
+    <Numpy34IncludeDir>$(Python34Dir)\$(NumpyRelativeIncludeDir)</Numpy34IncludeDir>
+    <Python34IncludeDirs>$(Python34IncludeDir);$(Numpy34IncludeDir)</Python34IncludeDirs>
+    <Python34LibDir>$(Python34Dir)\libs</Python34LibDir>
+    
+    <BasePreFlags>WIN32</BasePreFlags>
+    <PreTangoStaticFlags>_WINSTATIC</PreTangoStaticFlags>
+    <PreTangoSharedFlags>LOG4TANGO_HAS_DLL;TANGO_HAS_DLL</PreTangoSharedFlags>
+    
+    <PreBoostSharedTangoSharedFlags>$(BasePreFlags);$(PreTangoSharedFlags);BOOST_PYTHON_DYNAMIC_LIB</PreBoostSharedTangoSharedFlags>
+    <PreBoostStaticTangoSharedFlags>$(BasePreFlags);$(PreTangoSharedFlags);BOOST_PYTHON_STATIC_LIB</PreBoostStaticTangoSharedFlags>
+    <PreBoostStaticTangoStaticFlags>$(BasePreFlags);$(PreTangoStaticFlags);BOOST_PYTHON_STATIC_LIB</PreBoostStaticTangoStaticFlags>
+    
+    <PreCompHeaderSrc>precompiled_header.hpp</PreCompHeaderSrc>
+    <PreCompHeaderDst>$(TempDir)\$(PyTangoBaseFile)_Boost-$(BoostVer).pch</PreCompHeaderDst>
+    <DatabaseFile>$(TempDir)\$(PyTangoBaseFile)_Boost-$(BoostVer).pdb</DatabaseFile>
+    
+    <BaseDisableWarningFlags>4005;4996;4250</BaseDisableWarningFlags>
+    
+    <BaseLibs>comctl32.lib;ws2_32.lib;mswsock.lib</BaseLibs>
+
+    <omniStaticLibs>COS4.lib;omniORB4.lib;omniDynamic4.lib;omnithread.lib</omniStaticLibs>
+    <omniSharedLibs>COS4_rt.lib;omniORB4_rt.lib;omniDynamic4_rt.lib;omnithread_rt.lib</omniSharedLibs>
+    <BaseTangoLibs>zmq.lib;log4tango.lib;tango.lib;$(BaseLibs)</BaseTangoLibs>
+    <BasePyTangoStaticLibs>$(omniStaticLibs);$(BaseTangoLibs)</BasePyTangoStaticLibs>
+    <BasePyTangoSharedLibs>$(omniSharedLibs);$(BaseTangoLibs)</BasePyTangoSharedLibs>
+    
+    <omniStaticLibs_Debug>COS4d.lib;omniORB4d.lib;omniDynamic4d.lib;omnithreadd.lib</omniStaticLibs_Debug>
+    <omniSharedLibs_Debug>COS4_rtd.lib;omniORB4_rtd.lib;omniDynamic4_rtd.lib;omnithread_rtd.lib</omniSharedLibs_Debug>
+    <BaseTangoLibs_Debug>zmqd.lib;log4tangod.lib;tangod.lib;$(BaseLibs)</BaseTangoLibs_Debug>
+    <BasePyTangoStaticLibs_Debug>$(omniStaticLibs_Debug);$(BaseTangoLibs_Debug)</BasePyTangoStaticLibs_Debug>
+    <BasePyTangoSharedLibs_Debug>$(omniSharedLibs_Debug);$(BaseTangoLibs_Debug)</BasePyTangoSharedLibs_Debug>
+    
+    <PyTango33StaticLibs>$(BasePyTangoStaticLibs);python33.lib</PyTango33StaticLibs>
+    <PyTango33SharedLibs>$(BasePyTangoSharedLibs);python33.lib</PyTango33SharedLibs>
+
+    <PyTango34StaticLibs>$(BasePyTangoStaticLibs);python34.lib</PyTango34StaticLibs>
+    <PyTango34SharedLibs>$(BasePyTangoSharedLibs);python34.lib</PyTango34SharedLibs>
+    
+    <BaseBoostSharedRtSharedLibDir>$(BoostLibDir)\shared\runtime_shared</BaseBoostSharedRtSharedLibDir>
+    <BaseBoostStaticRtSharedLibDir>$(BoostLibDir)\static\runtime_shared</BaseBoostStaticRtSharedLibDir>
+    <BaseBoostStaticRtStaticLibDir>$(BoostLibDir)\static\runtime_static</BaseBoostStaticRtStaticLibDir>
+    
+    <Boost33SharedRtSharedLibDir>$(BaseBoostSharedRtSharedLibDir)\33;$(Python33LibDir)</Boost33SharedRtSharedLibDir>
+    <Boost33StaticRtSharedLibDir>$(BaseBoostStaticRtSharedLibDir)\33;$(Python33LibDir)</Boost33StaticRtSharedLibDir>
+    <Boost33StaticRtStaticLibDir>$(BaseBoostStaticRtStaticLibDir)\33;$(Python33LibDir)</Boost33StaticRtStaticLibDir>
+
+    <Boost34SharedRtSharedLibDir>$(BaseBoostSharedRtSharedLibDir)\34;$(Python34LibDir)</Boost34SharedRtSharedLibDir>
+    <Boost34StaticRtSharedLibDir>$(BaseBoostStaticRtSharedLibDir)\34;$(Python34LibDir)</Boost34StaticRtSharedLibDir>
+    <Boost34StaticRtStaticLibDir>$(BaseBoostStaticRtStaticLibDir)\34;$(Python34LibDir)</Boost34StaticRtStaticLibDir>
+    
+    <Py33BoostSharedTangoSharedLibDir>$(Boost33SharedRtSharedLibDir);$(TangoLibDir)\vc$(VCMajorVer)_dll</Py33BoostSharedTangoSharedLibDir>
+    <Py33BoostStaticTangoSharedLibDir>$(Boost33StaticRtSharedLibDir);$(TangoLibDir)\vc$(VCMajorVer)_dll</Py33BoostStaticTangoSharedLibDir>
+    <Py33BoostStaticTangoStaticLibDir>$(Boost33StaticRtStaticLibDir);$(TangoLibDir)\vc$(VCMajorVer)</Py33BoostStaticTangoStaticLibDir>
+
+    <Py34BoostSharedTangoSharedLibDir>$(Boost34SharedRtSharedLibDir);$(TangoLibDir)\vc$(VCMajorVer)_dll</Py34BoostSharedTangoSharedLibDir>
+    <Py34BoostStaticTangoSharedLibDir>$(Boost34StaticRtSharedLibDir);$(TangoLibDir)\vc$(VCMajorVer)_dll</Py34BoostStaticTangoSharedLibDir>
+    <Py34BoostStaticTangoStaticLibDir>$(Boost34StaticRtStaticLibDir);$(TangoLibDir)\vc$(VCMajorVer)</Py34BoostStaticTangoStaticLibDir>
+    
+    <!-- debug variables -->
+    
+    <PyTango33StaticLibs_Debug>$(BasePyTangoStaticLibs_Debug);python33.lib</PyTango33StaticLibs_Debug>
+    <PyTango33SharedLibs_Debug>$(BasePyTangoSharedLibs_Debug);python33.lib</PyTango33SharedLibs_Debug>
+
+    <PyTango34StaticLibs_Debug>$(BasePyTangoStaticLibs_Debug);python34.lib</PyTango34StaticLibs_Debug>
+    <PyTango34SharedLibs_Debug>$(BasePyTangoSharedLibs_Debug);python34.lib</PyTango34SharedLibs_Debug>
+    
+    <BaseBoostSharedRtSharedLibDir_Debug>$(BoostLibDir)\shared\runtime_shared</BaseBoostSharedRtSharedLibDir_Debug>
+    <BaseBoostStaticRtSharedLibDir_Debug>$(BoostLibDir)\static\runtime_shared</BaseBoostStaticRtSharedLibDir_Debug>
+    <BaseBoostStaticRtStaticLibDir_Debug>$(BoostLibDir)\static\runtime_static</BaseBoostStaticRtStaticLibDir_Debug>
+    
+    <Boost33SharedRtSharedLibDir_Debug>$(BaseBoostSharedRtSharedLibDir_Debug)\33;$(Python33LibDir)</Boost33SharedRtSharedLibDir_Debug>
+    <Boost33StaticRtSharedLibDir_Debug>$(BaseBoostStaticRtSharedLibDir_Debug)\33;$(Python33LibDir)</Boost33StaticRtSharedLibDir_Debug>
+    <Boost33StaticRtStaticLibDir_Debug>$(BaseBoostStaticRtStaticLibDir_Debug)\33;$(Python33LibDir)</Boost33StaticRtStaticLibDir_Debug>
+
+    <Boost34SharedRtSharedLibDir_Debug>$(BaseBoostSharedRtSharedLibDir_Debug)\34;$(Python34LibDir)</Boost34SharedRtSharedLibDir_Debug>
+    <Boost34StaticRtSharedLibDir_Debug>$(BaseBoostStaticRtSharedLibDir_Debug)\34;$(Python34LibDir)</Boost34StaticRtSharedLibDir_Debug>
+    <Boost34StaticRtStaticLibDir_Debug>$(BaseBoostStaticRtStaticLibDir_Debug)\34;$(Python34LibDir)</Boost34StaticRtStaticLibDir_Debug>
+    
+    <Py33BoostSharedTangoSharedLibDir_Debug>$(Boost33SharedRtSharedLibDir_Debug);$(TangoLibDir_Debug)\vc$(VCMajorVer)_dll</Py33BoostSharedTangoSharedLibDir_Debug>
+    <Py33BoostStaticTangoSharedLibDir_Debug>$(Boost33StaticRtSharedLibDir_Debug);$(TangoLibDir_Debug)\vc$(VCMajorVer)_dll</Py33BoostStaticTangoSharedLibDir_Debug>
+    <Py33BoostStaticTangoStaticLibDir_Debug>$(Boost33StaticRtStaticLibDir_Debug);$(TangoLibDir_Debug)\vc$(VCMajorVer)</Py33BoostStaticTangoStaticLibDir_Debug>
+
+    <Py34BoostSharedTangoSharedLibDir_Debug>$(Boost34SharedRtSharedLibDir_Debug);$(TangoLibDir_Debug)\vc$(VCMajorVer)_dll</Py34BoostSharedTangoSharedLibDir_Debug>
+    <Py34BoostStaticTangoSharedLibDir_Debug>$(Boost34StaticRtSharedLibDir_Debug);$(TangoLibDir_Debug)\vc$(VCMajorVer)_dll</Py34BoostStaticTangoSharedLibDir_Debug>
+    <Py34BoostStaticTangoStaticLibDir_Debug>$(Boost34StaticRtStaticLibDir_Debug);$(TangoLibDir_Debug)\vc$(VCMajorVer)</Py34BoostStaticTangoStaticLibDir_Debug>
+    
+    <WinSetupArgs>$(BaseDir)\winsetup.py $(BuildDir) $(DistDir) $(BDistDir) $(Configuration) $(Platform)</WinSetupArgs>
+  </PropertyGroup>
+  <PropertyGroup>
+    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
+    <_PropertySheetDisplayName>PyTango Project Properties</_PropertySheetDisplayName>
+    <OutDir>$(PyTangoBuildDir)\</OutDir>
+    <IntDir>$(PyTangoTempDir)\</IntDir>
+    <LinkIncremental>false</LinkIncremental>
+  </PropertyGroup>
+  <ItemDefinitionGroup>
+    <ClCompile>
+      <AdditionalOptions>$(PyTangoCompileOptions) %(AdditionalOptions)</AdditionalOptions>
+      <Optimization>Full</Optimization>
+      <WholeProgramOptimization>false</WholeProgramOptimization>
+      <BufferSecurityCheck>false</BufferSecurityCheck>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <PrecompiledHeaderOutputFile>$(PreCompHeaderDst)</PrecompiledHeaderOutputFile>
+      <PrecompiledHeaderFile>$(PreCompHeaderSrc)</PrecompiledHeaderFile>
+      <ProgramDataBaseFileName>$(DatabaseFile)</ProgramDataBaseFileName>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <CompileAs>Default</CompileAs>
+      <DisableSpecificWarnings>$(BaseDisableWarningFlags);%(DisableSpecificWarnings)</DisableSpecificWarnings>
+      <ErrorReporting>Prompt</ErrorReporting>
+    </ClCompile>
+    <Link>
+      <ShowProgress>NotSet</ShowProgress>
+      <OutputFile>$(OutDir)$(PyTangoBaseFile).pyd</OutputFile>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <ProgramDatabaseFile>$(DatabaseFile)</ProgramDatabaseFile>
+      <SubSystem>Windows</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <LinkTimeCodeGeneration>
+      </LinkTimeCodeGeneration>
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>
+      <DataExecutionPrevention>
+      </DataExecutionPrevention>
+      <TargetMachine>MachineX86</TargetMachine>
+    </Link>
+    <PostBuildEvent>
+      <Message>[PyTango]: Starting python $(WinSetupArgs)</Message>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <PropertyGroup Label="Configuration">
+    <BuildLogFile>$(IntDir)BuildLog.html</BuildLogFile>
+  </PropertyGroup>
+  <ItemGroup>
+    <BuildMacro Include="PyTangoBaseFile">
+      <Value>$(PyTangoBaseFile)</Value>
+    </BuildMacro>
+    <BuildMacro Include="TangoMajorVer">
+      <Value>$(TangoMajorVer)</Value>
+    </BuildMacro>
+    <BuildMacro Include="TangoMinorVer">
+      <Value>$(TangoMinorVer)</Value>
+    </BuildMacro>
+    <BuildMacro Include="TangoPatchVer">
+      <Value>$(TangoPatchVer)</Value>
+    </BuildMacro>
+    <BuildMacro Include="TangoVer">
+      <Value>$(TangoVer)</Value>
+    </BuildMacro>
+    <BuildMacro Include="BoostMajorVer">
+      <Value>$(BoostMajorVer)</Value>
+    </BuildMacro>
+    <BuildMacro Include="BoostMinorVer">
+      <Value>$(BoostMinorVer)</Value>
+    </BuildMacro>
+    <BuildMacro Include="BoostPatchVer">
+      <Value>$(BoostPatchVer)</Value>
+    </BuildMacro>
+    <BuildMacro Include="BoostVer">
+      <Value>$(BoostVer)</Value>
+    </BuildMacro>
+    <BuildMacro Include="TangoBaseDir">
+      <Value>$(TangoBaseDir)</Value>
+    </BuildMacro>
+    <BuildMacro Include="BoostBaseDir">
+      <Value>$(BoostBaseDir)</Value>
+    </BuildMacro>
+    <BuildMacro Include="PythonBaseDir">
+      <Value>$(PythonBaseDir)</Value>
+    </BuildMacro>
+    <BuildMacro Include="VCMajorVer">
+      <Value>$(VCMajorVer)</Value>
+    </BuildMacro>
+    <BuildMacro Include="VCMinorVer">
+      <Value>$(VCMinorVer)</Value>
+    </BuildMacro>
+    <BuildMacro Include="VCVer">
+      <Value>$(VCVer)</Value>
+    </BuildMacro>
+    <BuildMacro Include="BoostIncludeDir">
+      <Value>$(BoostIncludeDir)</Value>
+    </BuildMacro>
+    <BuildMacro Include="BoostLibDir">
+      <Value>$(BoostLibDir)</Value>
+    </BuildMacro>
+    <BuildMacro Include="TangoIncludeDir">
+      <Value>$(TangoIncludeDir)</Value>
+    </BuildMacro>
+    <BuildMacro Include="TangoLibDir">
+      <Value>$(TangoLibDir)</Value>
+    </BuildMacro>
+    <BuildMacro Include="PythonDir">
+      <Value>$(PythonDir)</Value>
+    </BuildMacro>
+    <BuildMacro Include="NumpyRelativeIncludeDir">
+      <Value>$(NumpyRelativeIncludeDir)</Value>
+    </BuildMacro>
+    <BuildMacro Include="PyTangoCompileOptions">
+      <Value>$(PyTangoCompileOptions)</Value>
+    </BuildMacro>
+    <BuildMacro Include="BaseDir">
+      <Value>$(BaseDir)</Value>
+    </BuildMacro>
+    <BuildMacro Include="RelPrefixDir">
+      <Value>$(RelPrefixDir)</Value>
+    </BuildMacro>
+    <BuildMacro Include="BaseBuildDir">
+      <Value>$(BaseBuildDir)</Value>
+    </BuildMacro>
+    <BuildMacro Include="BaseBuildLibDir">
+      <Value>$(BaseBuildLibDir)</Value>
+    </BuildMacro>
+    <BuildMacro Include="BaseTempDir">
+      <Value>$(BaseTempDir)</Value>
+    </BuildMacro>
+    <BuildMacro Include="BaseDistDir">
+      <Value>$(BaseDistDir)</Value>
+    </BuildMacro>
+    <BuildMacro Include="BaseBDistDir">
+      <Value>$(BaseBDistDir)</Value>
+    </BuildMacro>
+    <BuildMacro Include="BuildDir">
+      <Value>$(BuildDir)</Value>
+    </BuildMacro>
+    <BuildMacro Include="DistDir">
+      <Value>$(DistDir)</Value>
+    </BuildMacro>
+    <BuildMacro Include="TempDir">
+      <Value>$(TempDir)</Value>
+    </BuildMacro>
+    <BuildMacro Include="BDistDir">
+      <Value>$(BDistDir)</Value>
+    </BuildMacro>
+    <BuildMacro Include="PyTangoBuildDir">
+      <Value>$(PyTangoBuildDir)</Value>
+    </BuildMacro>
+    <BuildMacro Include="PyTangoTempDir">
+      <Value>$(PyTangoTempDir)</Value>
+    </BuildMacro>
+    <BuildMacro Include="BaseSrcDir">
+      <Value>$(BaseSrcDir)</Value>
+    </BuildMacro>
+    <BuildMacro Include="CommonIncludeDirs">
+      <Value>$(CommonIncludeDirs)</Value>
+    </BuildMacro>
+
+    <BuildMacro Include="Python33Dir">
+      <Value>$(Python33Dir)</Value>
+    </BuildMacro>
+    <BuildMacro Include="Py33">
+      <Value>$(Py33)</Value>
+    </BuildMacro>
+    <BuildMacro Include="Python33IncludeDir">
+      <Value>$(Python33IncludeDir)</Value>
+    </BuildMacro>
+    <BuildMacro Include="Numpy33IncludeDir">
+      <Value>$(Numpy33IncludeDir)</Value>
+    </BuildMacro>
+    <BuildMacro Include="Python33IncludeDirs">
+      <Value>$(Python33IncludeDirs)</Value>
+    </BuildMacro>
+    <BuildMacro Include="Python33LibDir">
+      <Value>$(Python33LibDir)</Value>
+    </BuildMacro>
+
+    <BuildMacro Include="Python34Dir">
+      <Value>$(Python34Dir)</Value>
+    </BuildMacro>
+    <BuildMacro Include="Py34">
+      <Value>$(Py34)</Value>
+    </BuildMacro>
+    <BuildMacro Include="Python34IncludeDir">
+      <Value>$(Python34IncludeDir)</Value>
+    </BuildMacro>
+    <BuildMacro Include="Numpy34IncludeDir">
+      <Value>$(Numpy34IncludeDir)</Value>
+    </BuildMacro>
+    <BuildMacro Include="Python34IncludeDirs">
+      <Value>$(Python34IncludeDirs)</Value>
+    </BuildMacro>
+    <BuildMacro Include="Python34LibDir">
+      <Value>$(Python34LibDir)</Value>
+    </BuildMacro>
+
+    <BuildMacro Include="BasePreFlags">
+      <Value>$(BasePreFlags)</Value>
+    </BuildMacro>
+    <BuildMacro Include="PreTangoStaticFlags">
+      <Value>$(PreTangoStaticFlags)</Value>
+    </BuildMacro>
+    <BuildMacro Include="PreTangoSharedFlags">
+      <Value>$(PreTangoSharedFlags)</Value>
+    </BuildMacro>
+    <BuildMacro Include="PreBoostSharedTangoSharedFlags">
+      <Value>$(PreBoostSharedTangoSharedFlags)</Value>
+    </BuildMacro>
+    <BuildMacro Include="PreBoostStaticTangoSharedFlags">
+      <Value>$(PreBoostStaticTangoSharedFlags)</Value>
+    </BuildMacro>
+    <BuildMacro Include="PreBoostStaticTangoStaticFlags">
+      <Value>$(PreBoostStaticTangoStaticFlags)</Value>
+    </BuildMacro>
+    <BuildMacro Include="PreCompHeaderSrc">
+      <Value>$(PreCompHeaderSrc)</Value>
+    </BuildMacro>
+    <BuildMacro Include="PreCompHeaderDst">
+      <Value>$(PreCompHeaderDst)</Value>
+    </BuildMacro>
+    <BuildMacro Include="DatabaseFile">
+      <Value>$(DatabaseFile)</Value>
+    </BuildMacro>
+    <BuildMacro Include="BaseDisableWarningFlags">
+      <Value>$(BaseDisableWarningFlags)</Value>
+    </BuildMacro>
+    <BuildMacro Include="omniStaticLibs">
+      <Value>$(omniStaticLibs)</Value>
+    </BuildMacro>
+    <BuildMacro Include="omniSharedLibs">
+      <Value>$(omniSharedLibs)</Value>
+    </BuildMacro>
+    <BuildMacro Include="BaseTangoLibs">
+      <Value>$(BaseTangoLibs)</Value>
+    </BuildMacro>
+    <BuildMacro Include="BasePyTangoStaticLibs">
+      <Value>$(BasePyTangoStaticLibs)</Value>
+    </BuildMacro>
+    <BuildMacro Include="BasePyTangoSharedLibs">
+      <Value>$(BasePyTangoSharedLibs)</Value>
+    </BuildMacro>
+
+    <BuildMacro Include="PyTango33StaticLibs">
+      <Value>$(PyTango33StaticLibs)</Value>
+    </BuildMacro>
+    <BuildMacro Include="PyTango33SharedLibs">
+      <Value>$(PyTango33SharedLibs)</Value>
+    </BuildMacro>
+
+    <BuildMacro Include="PyTango34StaticLibs">
+      <Value>$(PyTango34StaticLibs)</Value>
+    </BuildMacro>
+    <BuildMacro Include="PyTango34SharedLibs">
+      <Value>$(PyTango34SharedLibs)</Value>
+    </BuildMacro>
+    
+    <BuildMacro Include="BaseBoostSharedRtSharedLibDir">
+      <Value>$(BaseBoostSharedRtSharedLibDir)</Value>
+    </BuildMacro>
+    <BuildMacro Include="BaseBoostStaticRtSharedLibDir">
+      <Value>$(BaseBoostStaticRtSharedLibDir)</Value>
+    </BuildMacro>
+    <BuildMacro Include="BaseBoostStaticRtStaticLibDir">
+      <Value>$(BaseBoostStaticRtStaticLibDir)</Value>
+    </BuildMacro>
+
+    <BuildMacro Include="Boost33SharedRtSharedLibDir">
+      <Value>$(Boost33SharedRtSharedLibDir)</Value>
+    </BuildMacro>
+    <BuildMacro Include="Boost33StaticRtSharedLibDir">
+      <Value>$(Boost33StaticRtSharedLibDir)</Value>
+    </BuildMacro>
+    <BuildMacro Include="Boost33StaticRtStaticLibDir">
+      <Value>$(Boost33StaticRtStaticLibDir)</Value>
+    </BuildMacro>
+    <BuildMacro Include="Py33BoostSharedTangoSharedLibDir">
+      <Value>$(Py33BoostSharedTangoSharedLibDir)</Value>
+    </BuildMacro>
+    <BuildMacro Include="Py33BoostStaticTangoSharedLibDir">
+      <Value>$(Py33BoostStaticTangoSharedLibDir)</Value>
+    </BuildMacro>
+    <BuildMacro Include="Py33BoostStaticTangoStaticLibDir">
+      <Value>$(Py33BoostStaticTangoStaticLibDir)</Value>
+    </BuildMacro>
+
+    <BuildMacro Include="Boost34SharedRtSharedLibDir">
+      <Value>$(Boost34SharedRtSharedLibDir)</Value>
+    </BuildMacro>
+    <BuildMacro Include="Boost34StaticRtSharedLibDir">
+      <Value>$(Boost34StaticRtSharedLibDir)</Value>
+    </BuildMacro>
+    <BuildMacro Include="Boost34StaticRtStaticLibDir">
+      <Value>$(Boost34StaticRtStaticLibDir)</Value>
+    </BuildMacro>
+    <BuildMacro Include="Py34BoostSharedTangoSharedLibDir">
+      <Value>$(Py34BoostSharedTangoSharedLibDir)</Value>
+    </BuildMacro>
+    <BuildMacro Include="Py34BoostStaticTangoSharedLibDir">
+      <Value>$(Py34BoostStaticTangoSharedLibDir)</Value>
+    </BuildMacro>
+    <BuildMacro Include="Py34BoostStaticTangoStaticLibDir">
+      <Value>$(Py34BoostStaticTangoStaticLibDir)</Value>
+    </BuildMacro>
+
+    <BuildMacro Include="WinSetupArgs">
+      <Value>$(WinSetupArgs)</Value>
+    </BuildMacro>
+  </ItemGroup>
+</Project>
diff --git a/win/PyTango_VS10/PyTango.sln b/win/PyTango_VS10/PyTango.sln
new file mode 100755
index 0000000..34e2ed6
--- /dev/null
+++ b/win/PyTango_VS10/PyTango.sln
@@ -0,0 +1,93 @@
+
+Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual Studio 2010
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PyTango", "PyTango.vcxproj", "{764A5ECE-11AE-4363-9A1C-573972A1BADD}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		py33_bopyshared_tangoshared_release|Win32 = py33_bopyshared_tangoshared_release|Win32
+		py33_bopyshared_tangoshared_release|x64 = py33_bopyshared_tangoshared_release|x64
+		py33_bopystatic_tangoshared_release|Win32 = py33_bopystatic_tangoshared_release|Win32
+		py33_bopystatic_tangoshared_release|x64 = py33_bopystatic_tangoshared_release|x64
+		py33_bopystatic_tangostatic_release|Win32 = py33_bopystatic_tangostatic_release|Win32
+		py33_bopystatic_tangostatic_release|x64 = py33_bopystatic_tangostatic_release|x64
+
+		py33_bopyshared_tangoshared_debug|Win32 = py33_bopyshared_tangoshared_debug|Win32
+		py33_bopyshared_tangoshared_debug|x64 = py33_bopyshared_tangoshared_debug|x64
+		py33_bopystatic_tangoshared_debug|Win32 = py33_bopystatic_tangoshared_debug|Win32
+		py33_bopystatic_tangoshared_debug|x64 = py33_bopystatic_tangoshared_debug|x64
+		py33_bopystatic_tangostatic_debug|Win32 = py33_bopystatic_tangostatic_debug|Win32
+		py33_bopystatic_tangostatic_debug|x64 = py33_bopystatic_tangostatic_debug|x64
+
+		py34_bopyshared_tangoshared_release|Win32 = py34_bopyshared_tangoshared_release|Win32
+		py34_bopyshared_tangoshared_release|x64 = py34_bopyshared_tangoshared_release|x64
+		py34_bopystatic_tangoshared_release|Win32 = py34_bopystatic_tangoshared_release|Win32
+		py34_bopystatic_tangoshared_release|x64 = py34_bopystatic_tangoshared_release|x64
+		py34_bopystatic_tangostatic_release|Win32 = py34_bopystatic_tangostatic_release|Win32
+		py34_bopystatic_tangostatic_release|x64 = py34_bopystatic_tangostatic_release|x64
+
+		py34_bopyshared_tangoshared_debug|Win32 = py34_bopyshared_tangoshared_debug|Win32
+		py34_bopyshared_tangoshared_debug|x64 = py34_bopyshared_tangoshared_debug|x64
+		py34_bopystatic_tangoshared_debug|Win32 = py34_bopystatic_tangoshared_debug|Win32
+		py34_bopystatic_tangoshared_debug|x64 = py34_bopystatic_tangoshared_debug|x64
+		py34_bopystatic_tangostatic_debug|Win32 = py34_bopystatic_tangostatic_debug|Win32
+		py34_bopystatic_tangostatic_debug|x64 = py34_bopystatic_tangostatic_debug|x64
+	EndGlobalSection
+	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|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|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|x64
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py33_bopystatic_tangostatic_release|x64.Build.0 = py33_bopystatic_tangostatic_release|x64
+
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py33_bopyshared_tangoshared_debug|Win32.ActiveCfg = py33_bopyshared_tangoshared_debug|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py33_bopyshared_tangoshared_debug|Win32.Build.0 = py33_bopyshared_tangoshared_debug|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py33_bopyshared_tangoshared_debug|x64.ActiveCfg = py33_bopyshared_tangoshared_debug|x64
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py33_bopyshared_tangoshared_debug|x64.Build.0 = py33_bopyshared_tangoshared_debug|x64
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py33_bopystatic_tangoshared_debug|Win32.ActiveCfg = py33_bopystatic_tangoshared_debug|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py33_bopystatic_tangoshared_debug|Win32.Build.0 = py33_bopystatic_tangoshared_debug|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py33_bopystatic_tangoshared_debug|x64.ActiveCfg = py33_bopystatic_tangoshared_debug|x64
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py33_bopystatic_tangoshared_debug|x64.Build.0 = py33_bopystatic_tangoshared_debug|x64
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py33_bopystatic_tangostatic_debug|Win32.ActiveCfg = py33_bopystatic_tangostatic_debug|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py33_bopystatic_tangostatic_debug|Win32.Build.0 = py33_bopystatic_tangostatic_debug|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py33_bopystatic_tangostatic_debug|x64.ActiveCfg = py33_bopystatic_tangostatic_debug|x64
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py33_bopystatic_tangostatic_debug|x64.Build.0 = py33_bopystatic_tangostatic_debug|x64
+
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py34_bopyshared_tangoshared_release|Win32.ActiveCfg = py34_bopyshared_tangoshared_release|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py34_bopyshared_tangoshared_release|Win32.Build.0 = py34_bopyshared_tangoshared_release|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py34_bopyshared_tangoshared_release|x64.ActiveCfg = py34_bopyshared_tangoshared_release|x64
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py34_bopyshared_tangoshared_release|x64.Build.0 = py34_bopyshared_tangoshared_release|x64
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py34_bopystatic_tangoshared_release|Win32.ActiveCfg = py34_bopystatic_tangoshared_release|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py34_bopystatic_tangoshared_release|Win32.Build.0 = py34_bopystatic_tangoshared_release|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py34_bopystatic_tangoshared_release|x64.ActiveCfg = py34_bopystatic_tangoshared_release|x64
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py34_bopystatic_tangoshared_release|x64.Build.0 = py34_bopystatic_tangoshared_release|x64
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py34_bopystatic_tangostatic_release|Win32.ActiveCfg = py34_bopystatic_tangostatic_release|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py34_bopystatic_tangostatic_release|Win32.Build.0 = py34_bopystatic_tangostatic_release|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py34_bopystatic_tangostatic_release|x64.ActiveCfg = py34_bopystatic_tangostatic_release|x64
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py34_bopystatic_tangostatic_release|x64.Build.0 = py34_bopystatic_tangostatic_release|x64
+
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py34_bopyshared_tangoshared_debug|Win32.ActiveCfg = py34_bopyshared_tangoshared_debug|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py34_bopyshared_tangoshared_debug|Win32.Build.0 = py34_bopyshared_tangoshared_debug|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py34_bopyshared_tangoshared_debug|x64.ActiveCfg = py34_bopyshared_tangoshared_debug|x64
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py34_bopyshared_tangoshared_debug|x64.Build.0 = py34_bopyshared_tangoshared_debug|x64
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py34_bopystatic_tangoshared_debug|Win32.ActiveCfg = py34_bopystatic_tangoshared_debug|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py34_bopystatic_tangoshared_debug|Win32.Build.0 = py34_bopystatic_tangoshared_debug|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py34_bopystatic_tangoshared_debug|x64.ActiveCfg = py34_bopystatic_tangoshared_debug|x64
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py34_bopystatic_tangoshared_debug|x64.Build.0 = py34_bopystatic_tangoshared_debug|x64
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py34_bopystatic_tangostatic_debug|Win32.ActiveCfg = py34_bopystatic_tangostatic_debug|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py34_bopystatic_tangostatic_debug|Win32.Build.0 = py34_bopystatic_tangostatic_debug|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py34_bopystatic_tangostatic_debug|x64.ActiveCfg = py34_bopystatic_tangostatic_debug|x64
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py34_bopystatic_tangostatic_debug|x64.Build.0 = py34_bopystatic_tangostatic_debug|x64
+
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
diff --git a/win/PyTango_VS10/PyTango.vcxproj b/win/PyTango_VS10/PyTango.vcxproj
new file mode 100755
index 0000000..c0cba77
--- /dev/null
+++ b/win/PyTango_VS10/PyTango.vcxproj
@@ -0,0 +1,926 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="py33_bopyshared_tangoshared_release|Win32">
+      <Configuration>py33_bopyshared_tangoshared_release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="py33_bopyshared_tangoshared_release|x64">
+      <Configuration>py33_bopyshared_tangoshared_release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="py33_bopystatic_tangoshared_release|Win32">
+      <Configuration>py33_bopystatic_tangoshared_release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="py33_bopystatic_tangoshared_release|x64">
+      <Configuration>py33_bopystatic_tangoshared_release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="py33_bopystatic_tangostatic_release|Win32">
+      <Configuration>py33_bopystatic_tangostatic_release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="py33_bopystatic_tangostatic_release|x64">
+      <Configuration>py33_bopystatic_tangostatic_release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="py33_bopyshared_tangoshared_debug|Win32">
+      <Configuration>py33_bopyshared_tangoshared_debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="py33_bopyshared_tangoshared_debug|x64">
+      <Configuration>py33_bopyshared_tangoshared_debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="py33_bopystatic_tangoshared_debug|Win32">
+      <Configuration>py33_bopystatic_tangoshared_debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="py33_bopystatic_tangoshared_debug|x64">
+      <Configuration>py33_bopystatic_tangoshared_debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="py33_bopystatic_tangostatic_debug|Win32">
+      <Configuration>py33_bopystatic_tangostatic_debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="py33_bopystatic_tangostatic_debug|x64">
+      <Configuration>py33_bopystatic_tangostatic_debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="py34_bopyshared_tangoshared_release|Win32">
+      <Configuration>py34_bopyshared_tangoshared_release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="py34_bopyshared_tangoshared_release|x64">
+      <Configuration>py34_bopyshared_tangoshared_release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="py34_bopystatic_tangoshared_release|Win32">
+      <Configuration>py34_bopystatic_tangoshared_release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="py34_bopystatic_tangoshared_release|x64">
+      <Configuration>py34_bopystatic_tangoshared_release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="py34_bopystatic_tangostatic_release|Win32">
+      <Configuration>py34_bopystatic_tangostatic_release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="py34_bopystatic_tangostatic_release|x64">
+      <Configuration>py34_bopystatic_tangostatic_release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="py34_bopyshared_tangoshared_debug|Win32">
+      <Configuration>py34_bopyshared_tangoshared_debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="py34_bopyshared_tangoshared_debug|x64">
+      <Configuration>py34_bopyshared_tangoshared_debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="py34_bopystatic_tangoshared_debug|Win32">
+      <Configuration>py34_bopystatic_tangoshared_debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="py34_bopystatic_tangoshared_debug|x64">
+      <Configuration>py34_bopystatic_tangoshared_debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="py34_bopystatic_tangostatic_debug|Win32">
+      <Configuration>py34_bopystatic_tangostatic_debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="py34_bopystatic_tangostatic_debug|x64">
+      <Configuration>py34_bopystatic_tangostatic_debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{764A5ECE-11AE-4363-9A1C-573972A1BADD}</ProjectGuid>
+    <RootNamespace>PyTango_VS10</RootNamespace>
+    <Keyword>Win32Proj</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='py33_bopystatic_tangostatic_release|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>NotSet</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <PlatformToolset>Windows7.1SDK</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='py33_bopystatic_tangoshared_release|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>NotSet</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <PlatformToolset>Windows7.1SDK</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='py33_bopyshared_tangoshared_release|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>NotSet</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <PlatformToolset>Windows7.1SDK</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='py33_bopystatic_tangostatic_release|x64'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>NotSet</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <PlatformToolset>Windows7.1SDK</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='py33_bopystatic_tangoshared_release|x64'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>NotSet</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <PlatformToolset>Windows7.1SDK</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='py33_bopyshared_tangoshared_release|x64'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>NotSet</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <PlatformToolset>Windows7.1SDK</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='py33_bopystatic_tangostatic_debug|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>NotSet</CharacterSet>
+    <WholeProgramOptimization>false</WholeProgramOptimization>
+    <PlatformToolset>Windows7.1SDK</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='py33_bopystatic_tangoshared_debug|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>NotSet</CharacterSet>
+    <WholeProgramOptimization>false</WholeProgramOptimization>
+    <PlatformToolset>Windows7.1SDK</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='py33_bopyshared_tangoshared_debug|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>NotSet</CharacterSet>
+    <WholeProgramOptimization>false</WholeProgramOptimization>
+    <PlatformToolset>Windows7.1SDK</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='py33_bopystatic_tangostatic_debug|x64'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>NotSet</CharacterSet>
+    <WholeProgramOptimization>false</WholeProgramOptimization>
+    <PlatformToolset>Windows7.1SDK</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='py33_bopystatic_tangoshared_debug|x64'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>NotSet</CharacterSet>
+    <WholeProgramOptimization>false</WholeProgramOptimization>
+    <PlatformToolset>Windows7.1SDK</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='py33_bopyshared_tangoshared_debug|x64'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>NotSet</CharacterSet>
+    <WholeProgramOptimization>false</WholeProgramOptimization>
+    <PlatformToolset>Windows7.1SDK</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='py34_bopystatic_tangostatic_release|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>NotSet</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <PlatformToolset>Windows7.1SDK</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='py34_bopystatic_tangoshared_release|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>NotSet</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <PlatformToolset>Windows7.1SDK</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='py34_bopyshared_tangoshared_release|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>NotSet</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <PlatformToolset>Windows7.1SDK</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='py34_bopystatic_tangostatic_release|x64'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>NotSet</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <PlatformToolset>Windows7.1SDK</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='py34_bopystatic_tangoshared_release|x64'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>NotSet</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <PlatformToolset>Windows7.1SDK</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='py34_bopyshared_tangoshared_release|x64'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>NotSet</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <PlatformToolset>Windows7.1SDK</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='py34_bopystatic_tangostatic_debug|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>NotSet</CharacterSet>
+    <WholeProgramOptimization>false</WholeProgramOptimization>
+    <PlatformToolset>Windows7.1SDK</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='py34_bopystatic_tangoshared_debug|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>NotSet</CharacterSet>
+    <WholeProgramOptimization>false</WholeProgramOptimization>
+    <PlatformToolset>Windows7.1SDK</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='py34_bopyshared_tangoshared_debug|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>NotSet</CharacterSet>
+    <WholeProgramOptimization>false</WholeProgramOptimization>
+    <PlatformToolset>Windows7.1SDK</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='py34_bopystatic_tangostatic_debug|x64'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>NotSet</CharacterSet>
+    <WholeProgramOptimization>false</WholeProgramOptimization>
+    <PlatformToolset>Windows7.1SDK</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='py34_bopystatic_tangoshared_debug|x64'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>NotSet</CharacterSet>
+    <WholeProgramOptimization>false</WholeProgramOptimization>
+    <PlatformToolset>Windows7.1SDK</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='py34_bopyshared_tangoshared_debug|x64'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>NotSet</CharacterSet>
+    <WholeProgramOptimization>false</WholeProgramOptimization>
+    <PlatformToolset>Windows7.1SDK</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='py33_bopystatic_tangostatic_release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="PyTango.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='py33_bopystatic_tangoshared_release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="PyTango.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='py33_bopyshared_tangoshared_release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="PyTango.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='py33_bopystatic_tangostatic_release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="PyTango.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='py33_bopystatic_tangoshared_release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="PyTango.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='py33_bopyshared_tangoshared_release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="PyTango.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='py33_bopystatic_tangostatic_debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="PyTango.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='py33_bopystatic_tangoshared_debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="PyTango.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='py33_bopyshared_tangoshared_debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="PyTango.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='py33_bopystatic_tangostatic_debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="PyTango.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='py33_bopystatic_tangoshared_debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="PyTango.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='py33_bopyshared_tangoshared_debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="PyTango.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='py34_bopystatic_tangostatic_release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="PyTango.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='py34_bopystatic_tangoshared_release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="PyTango.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='py34_bopyshared_tangoshared_release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="PyTango.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='py34_bopystatic_tangostatic_release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="PyTango.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='py34_bopystatic_tangoshared_release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="PyTango.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='py34_bopyshared_tangoshared_release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="PyTango.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='py34_bopystatic_tangostatic_debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="PyTango.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='py34_bopystatic_tangoshared_debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="PyTango.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='py34_bopyshared_tangoshared_debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="PyTango.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='py34_bopystatic_tangostatic_debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="PyTango.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='py34_bopystatic_tangoshared_debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="PyTango.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='py34_bopyshared_tangoshared_debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="PyTango.props" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='py33_bopyshared_tangoshared_release|Win32'">$(PyTangoBaseFile)</TargetName>
+    <TargetExt Condition="'$(Configuration)|$(Platform)'=='py33_bopyshared_tangoshared_release|Win32'">.pyd</TargetExt>
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='py33_bopystatic_tangoshared_release|Win32'">$(PyTangoBaseFile)</TargetName>
+    <TargetExt Condition="'$(Configuration)|$(Platform)'=='py33_bopystatic_tangoshared_release|Win32'">.pyd</TargetExt>
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='py33_bopystatic_tangostatic_release|Win32'">$(PyTangoBaseFile)</TargetName>
+    <TargetExt Condition="'$(Configuration)|$(Platform)'=='py33_bopystatic_tangostatic_release|Win32'">.pyd</TargetExt>
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='py33_bopyshared_tangoshared_release|x64'">$(PyTangoBaseFile)</TargetName>
+    <TargetExt Condition="'$(Configuration)|$(Platform)'=='py33_bopyshared_tangoshared_release|x64'">.pyd</TargetExt>
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='py33_bopystatic_tangoshared_release|x64'">$(PyTangoBaseFile)</TargetName>
+    <TargetExt Condition="'$(Configuration)|$(Platform)'=='py33_bopystatic_tangoshared_release|x64'">.pyd</TargetExt>
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='py33_bopystatic_tangostatic_release|x64'">$(PyTangoBaseFile)</TargetName>
+    <TargetExt Condition="'$(Configuration)|$(Platform)'=='py33_bopystatic_tangostatic_release|x64'">.pyd</TargetExt>
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='py33_bopyshared_tangoshared_debug|Win32'">$(PyTangoBaseFile)</TargetName>
+    <TargetExt Condition="'$(Configuration)|$(Platform)'=='py33_bopyshared_tangoshared_debug|Win32'">.pyd</TargetExt>
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='py33_bopystatic_tangoshared_debug|Win32'">$(PyTangoBaseFile)</TargetName>
+    <TargetExt Condition="'$(Configuration)|$(Platform)'=='py33_bopystatic_tangoshared_debug|Win32'">.pyd</TargetExt>
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='py33_bopystatic_tangostatic_debug|Win32'">$(PyTangoBaseFile)</TargetName>
+    <TargetExt Condition="'$(Configuration)|$(Platform)'=='py33_bopystatic_tangostatic_debug|Win32'">.pyd</TargetExt>
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='py33_bopyshared_tangoshared_debug|x64'">$(PyTangoBaseFile)</TargetName>
+    <TargetExt Condition="'$(Configuration)|$(Platform)'=='py33_bopyshared_tangoshared_debug|x64'">.pyd</TargetExt>
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='py33_bopystatic_tangoshared_debug|x64'">$(PyTangoBaseFile)</TargetName>
+    <TargetExt Condition="'$(Configuration)|$(Platform)'=='py33_bopystatic_tangoshared_debug|x64'">.pyd</TargetExt>
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='py33_bopystatic_tangostatic_debug|x64'">$(PyTangoBaseFile)</TargetName>
+    <TargetExt Condition="'$(Configuration)|$(Platform)'=='py33_bopystatic_tangostatic_debug|x64'">.pyd</TargetExt>
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='py34_bopyshared_tangoshared_release|Win32'">$(PyTangoBaseFile)</TargetName>
+    <TargetExt Condition="'$(Configuration)|$(Platform)'=='py34_bopyshared_tangoshared_release|Win32'">.pyd</TargetExt>
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='py34_bopystatic_tangoshared_release|Win32'">$(PyTangoBaseFile)</TargetName>
+    <TargetExt Condition="'$(Configuration)|$(Platform)'=='py34_bopystatic_tangoshared_release|Win32'">.pyd</TargetExt>
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='py34_bopystatic_tangostatic_release|Win32'">$(PyTangoBaseFile)</TargetName>
+    <TargetExt Condition="'$(Configuration)|$(Platform)'=='py34_bopystatic_tangostatic_release|Win32'">.pyd</TargetExt>
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='py34_bopyshared_tangoshared_release|x64'">$(PyTangoBaseFile)</TargetName>
+    <TargetExt Condition="'$(Configuration)|$(Platform)'=='py34_bopyshared_tangoshared_release|x64'">.pyd</TargetExt>
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='py34_bopystatic_tangoshared_release|x64'">$(PyTangoBaseFile)</TargetName>
+    <TargetExt Condition="'$(Configuration)|$(Platform)'=='py34_bopystatic_tangoshared_release|x64'">.pyd</TargetExt>
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='py34_bopystatic_tangostatic_release|x64'">$(PyTangoBaseFile)</TargetName>
+    <TargetExt Condition="'$(Configuration)|$(Platform)'=='py34_bopystatic_tangostatic_release|x64'">.pyd</TargetExt>
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='py34_bopyshared_tangoshared_debug|Win32'">$(PyTangoBaseFile)</TargetName>
+    <TargetExt Condition="'$(Configuration)|$(Platform)'=='py34_bopyshared_tangoshared_debug|Win32'">.pyd</TargetExt>
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='py34_bopystatic_tangoshared_debug|Win32'">$(PyTangoBaseFile)</TargetName>
+    <TargetExt Condition="'$(Configuration)|$(Platform)'=='py34_bopystatic_tangoshared_debug|Win32'">.pyd</TargetExt>
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='py34_bopystatic_tangostatic_debug|Win32'">$(PyTangoBaseFile)</TargetName>
+    <TargetExt Condition="'$(Configuration)|$(Platform)'=='py34_bopystatic_tangostatic_debug|Win32'">.pyd</TargetExt>
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='py34_bopyshared_tangoshared_debug|x64'">$(PyTangoBaseFile)</TargetName>
+    <TargetExt Condition="'$(Configuration)|$(Platform)'=='py34_bopyshared_tangoshared_debug|x64'">.pyd</TargetExt>
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='py34_bopystatic_tangoshared_debug|x64'">$(PyTangoBaseFile)</TargetName>
+    <TargetExt Condition="'$(Configuration)|$(Platform)'=='py34_bopystatic_tangoshared_debug|x64'">.pyd</TargetExt>
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='py34_bopystatic_tangostatic_debug|x64'">$(PyTangoBaseFile)</TargetName>
+    <TargetExt Condition="'$(Configuration)|$(Platform)'=='py34_bopystatic_tangostatic_debug|x64'">.pyd</TargetExt>
+    <IgnoreImportLibrary Condition="'$(Configuration)|$(Platform)'=='py34_bopyshared_tangoshared_release|x64'">
+    </IgnoreImportLibrary>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='py33_bopyshared_tangoshared_release|Win32'">
+    <ClCompile>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>$(CommonIncludeDirs);$(Python33IncludeDirs);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>$(PreBoostSharedTangoSharedFlags);%(PreprocessorDefinitions);NDEBUG</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>$(PyTango33SharedLibs);%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(Py33BoostSharedTangoSharedLibDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
+    </Link>
+    <PostBuildEvent>
+      <Command>$(Py33) $(WinSetupArgs)</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='py33_bopyshared_tangoshared_release|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>$(CommonIncludeDirs);$(Python33IncludeDirs);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>$(PreBoostSharedTangoSharedFlags);%(PreprocessorDefinitions);NDEBUG</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>$(PyTango33SharedLibs);%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(Py33BoostSharedTangoSharedLibDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
+      <TargetMachine>MachineX64</TargetMachine>
+    </Link>
+    <PostBuildEvent>
+      <Command>$(Py33) $(WinSetupArgs)</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='py33_bopystatic_tangoshared_release|Win32'">
+    <ClCompile>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>$(CommonIncludeDirs);$(Python33IncludeDirs);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>$(PreBoostStaticTangoSharedFlags);%(PreprocessorDefinitions);NDEBUG</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>$(PyTango33SharedLibs);%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(Py33BoostStaticTangoSharedLibDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
+    </Link>
+    <PostBuildEvent>
+      <Command>$(Py33) $(WinSetupArgs)</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='py33_bopystatic_tangoshared_release|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>$(CommonIncludeDirs);$(Python33IncludeDirs);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>$(PreBoostStaticTangoSharedFlags);%(PreprocessorDefinitions);NDEBUG</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>$(PyTango33SharedLibs);%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(Py33BoostStaticTangoSharedLibDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
+      <TargetMachine>MachineX64</TargetMachine>
+    </Link>
+    <PostBuildEvent>
+      <Command>$(Py33) $(WinSetupArgs)</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='py33_bopystatic_tangostatic_release|Win32'">
+    <ClCompile>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>$(CommonIncludeDirs);$(Python33IncludeDirs);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>$(PreBoostStaticTangoStaticFlags);%(PreprocessorDefinitions);NDEBUG</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+      <CompileAs>CompileAsCpp</CompileAs>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>$(PyTango33StaticLibs);%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(Py33BoostStaticTangoStaticLibDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
+    </Link>
+    <PostBuildEvent>
+      <Command>$(Py33) $(WinSetupArgs)</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='py33_bopystatic_tangostatic_release|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>$(CommonIncludeDirs);$(Python33IncludeDirs);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>$(PreBoostStaticTangoStaticFlags);%(PreprocessorDefinitions);NDEBUG</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+      <CompileAs>CompileAsCpp</CompileAs>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>$(PyTango33StaticLibs);%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(Py33BoostStaticTangoStaticLibDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
+      <TargetMachine>MachineX64</TargetMachine>
+    </Link>
+    <PostBuildEvent>
+      <Command>$(Py33) $(WinSetupArgs)</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='py33_bopyshared_tangoshared_debug|Win32'">
+    <ClCompile>
+      <WholeProgramOptimization>false</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>$(CommonIncludeDirs);$(Python33IncludeDirs);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>$(PreBoostSharedTangoSharedFlags);%(PreprocessorDefinitions);_DEBUG</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>$(PyTango33SharedLibs_Debug);%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(Py33BoostSharedTangoSharedLibDir_Debug);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
+    </Link>
+    <PostBuildEvent>
+      <Command>$(Py33) $(WinSetupArgs)</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='py33_bopyshared_tangoshared_debug|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <WholeProgramOptimization>false</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>$(CommonIncludeDirs);$(Python33IncludeDirs);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>$(PreBoostSharedTangoSharedFlags);%(PreprocessorDefinitions);_DEBUG</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>$(PyTango33SharedLibs_Debug);%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(Py33BoostSharedTangoSharedLibDir_Debug);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
+      <TargetMachine>MachineX64</TargetMachine>
+    </Link>
+    <PostBuildEvent>
+      <Command>$(Py33) $(WinSetupArgs)</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='py33_bopystatic_tangoshared_debug|Win32'">
+    <ClCompile>
+      <WholeProgramOptimization>false</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>$(CommonIncludeDirs);$(Python33IncludeDirs);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>$(PreBoostStaticTangoSharedFlags);%(PreprocessorDefinitions);_DEBUG</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>$(PyTango33SharedLibs_Debug);%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(Py33BoostStaticTangoSharedLibDir_Debug);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
+    </Link>
+    <PostBuildEvent>
+      <Command>$(Py33) $(WinSetupArgs)</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='py33_bopystatic_tangoshared_debug|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <WholeProgramOptimization>false</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>$(CommonIncludeDirs);$(Python33IncludeDirs);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>$(PreBoostStaticTangoSharedFlags);%(PreprocessorDefinitions);_DEBUG</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>$(PyTango33SharedLibs_Debug);%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(Py33BoostStaticTangoSharedLibDir_Debug);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
+      <TargetMachine>MachineX64</TargetMachine>
+    </Link>
+    <PostBuildEvent>
+      <Command>$(Py33) $(WinSetupArgs)</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='py33_bopystatic_tangostatic_debug|Win32'">
+    <ClCompile>
+      <WholeProgramOptimization>false</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>$(CommonIncludeDirs);$(Python33IncludeDirs);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>$(PreBoostStaticTangoStaticFlags);%(PreprocessorDefinitions);_DEBUG</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+      <CompileAs>CompileAsCpp</CompileAs>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>$(PyTango33StaticLibs_Debug);%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(Py33BoostStaticTangoStaticLibDir_Debug);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
+    </Link>
+    <PostBuildEvent>
+      <Command>$(Py33) $(WinSetupArgs)</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='py33_bopystatic_tangostatic_debug|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <WholeProgramOptimization>false</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>$(CommonIncludeDirs);$(Python33IncludeDirs);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>$(PreBoostStaticTangoStaticFlags);%(PreprocessorDefinitions);_DEBUG</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+      <CompileAs>CompileAsCpp</CompileAs>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>$(PyTango33StaticLibs_Debug);%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(Py33BoostStaticTangoStaticLibDir_Debug);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
+      <TargetMachine>MachineX64</TargetMachine>
+    </Link>
+    <PostBuildEvent>
+      <Command>$(Py33) $(WinSetupArgs)</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='py34_bopyshared_tangoshared_release|Win32'">
+    <ClCompile>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>$(CommonIncludeDirs);$(Python34IncludeDirs);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>$(PreBoostSharedTangoSharedFlags);%(PreprocessorDefinitions);NDEBUG</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>$(PyTango34SharedLibs);%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(Py34BoostSharedTangoSharedLibDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
+    </Link>
+    <PostBuildEvent>
+      <Command>$(Py34) $(WinSetupArgs)</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='py34_bopyshared_tangoshared_release|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>$(CommonIncludeDirs);$(Python34IncludeDirs);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>$(PreBoostSharedTangoSharedFlags);%(PreprocessorDefinitions);NDEBUG</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>$(PyTango34SharedLibs);%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(Py34BoostSharedTangoSharedLibDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
+      <TargetMachine>MachineX64</TargetMachine>
+    </Link>
+    <PostBuildEvent>
+      <Command>$(Py34) $(WinSetupArgs)</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='py34_bopystatic_tangoshared_release|Win32'">
+    <ClCompile>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>$(CommonIncludeDirs);$(Python34IncludeDirs);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>$(PreBoostStaticTangoSharedFlags);%(PreprocessorDefinitions);NDEBUG</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>$(PyTango34SharedLibs);%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(Py34BoostStaticTangoSharedLibDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
+    </Link>
+    <PostBuildEvent>
+      <Command>$(Py34) $(WinSetupArgs)</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='py34_bopystatic_tangoshared_release|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>$(CommonIncludeDirs);$(Python34IncludeDirs);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>$(PreBoostStaticTangoSharedFlags);%(PreprocessorDefinitions);NDEBUG</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>$(PyTango34SharedLibs);%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(Py34BoostStaticTangoSharedLibDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
+      <TargetMachine>MachineX64</TargetMachine>
+    </Link>
+    <PostBuildEvent>
+      <Command>$(Py34) $(WinSetupArgs)</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='py34_bopystatic_tangostatic_release|Win32'">
+    <ClCompile>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>$(CommonIncludeDirs);$(Python34IncludeDirs);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>$(PreBoostStaticTangoStaticFlags);%(PreprocessorDefinitions);NDEBUG</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+      <CompileAs>CompileAsCpp</CompileAs>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>$(PyTango34StaticLibs);%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(Py34BoostStaticTangoStaticLibDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
+    </Link>
+    <PostBuildEvent>
+      <Command>$(Py34) $(WinSetupArgs)</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='py34_bopystatic_tangostatic_release|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>$(CommonIncludeDirs);$(Python34IncludeDirs);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>$(PreBoostStaticTangoStaticFlags);%(PreprocessorDefinitions);NDEBUG</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+      <CompileAs>CompileAsCpp</CompileAs>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>$(PyTango34StaticLibs);%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(Py34BoostStaticTangoStaticLibDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
+      <TargetMachine>MachineX64</TargetMachine>
+    </Link>
+    <PostBuildEvent>
+      <Command>$(Py34) $(WinSetupArgs)</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='py34_bopyshared_tangoshared_debug|Win32'">
+    <ClCompile>
+      <WholeProgramOptimization>false</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>$(CommonIncludeDirs);$(Python34IncludeDirs);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>$(PreBoostSharedTangoSharedFlags);%(PreprocessorDefinitions);_DEBUG</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>$(PyTango34SharedLibs_Debug);%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(Py34BoostSharedTangoSharedLibDir_Debug);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
+    </Link>
+    <PostBuildEvent>
+      <Command>$(Py34) $(WinSetupArgs)</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='py34_bopyshared_tangoshared_debug|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <WholeProgramOptimization>false</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>$(CommonIncludeDirs);$(Python34IncludeDirs);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>$(PreBoostSharedTangoSharedFlags);%(PreprocessorDefinitions);_DEBUG</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>$(PyTango34SharedLibs_Debug);%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(Py34BoostSharedTangoSharedLibDir_Debug);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
+      <TargetMachine>MachineX64</TargetMachine>
+    </Link>
+    <PostBuildEvent>
+      <Command>$(Py34) $(WinSetupArgs)</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='py34_bopystatic_tangoshared_debug|Win32'">
+    <ClCompile>
+      <WholeProgramOptimization>false</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>$(CommonIncludeDirs);$(Python34IncludeDirs);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>$(PreBoostStaticTangoSharedFlags);%(PreprocessorDefinitions);_DEBUG</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>$(PyTango34SharedLibs_Debug);%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(Py34BoostStaticTangoSharedLibDir_Debug);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
+    </Link>
+    <PostBuildEvent>
+      <Command>$(Py34) $(WinSetupArgs)</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='py34_bopystatic_tangoshared_debug|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <WholeProgramOptimization>false</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>$(CommonIncludeDirs);$(Python34IncludeDirs);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>$(PreBoostStaticTangoSharedFlags);%(PreprocessorDefinitions);_DEBUG</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>$(PyTango34SharedLibs_Debug);%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(Py34BoostStaticTangoSharedLibDir_Debug);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
+      <TargetMachine>MachineX64</TargetMachine>
+    </Link>
+    <PostBuildEvent>
+      <Command>$(Py34) $(WinSetupArgs)</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='py34_bopystatic_tangostatic_debug|Win32'">
+    <ClCompile>
+      <WholeProgramOptimization>false</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>$(CommonIncludeDirs);$(Python34IncludeDirs);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>$(PreBoostStaticTangoStaticFlags);%(PreprocessorDefinitions);_DEBUG</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+      <CompileAs>CompileAsCpp</CompileAs>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>$(PyTango34StaticLibs_Debug);%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(Py34BoostStaticTangoStaticLibDir_Debug);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
+    </Link>
+    <PostBuildEvent>
+      <Command>$(Py34) $(WinSetupArgs)</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='py34_bopystatic_tangostatic_debug|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <WholeProgramOptimization>false</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>$(CommonIncludeDirs);$(Python34IncludeDirs);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>$(PreBoostStaticTangoStaticFlags);%(PreprocessorDefinitions);_DEBUG</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+      <CompileAs>CompileAsCpp</CompileAs>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>$(PyTango34StaticLibs_Debug);%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(Py34BoostStaticTangoStaticLibDir_Debug);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
+      <TargetMachine>MachineX64</TargetMachine>
+    </Link>
+    <PostBuildEvent>
+      <Command>$(Py34) $(WinSetupArgs)</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClInclude Include="..\..\ext\server\attr.h" />
+    <ClInclude Include="..\..\ext\server\attribute.h" />
+    <ClInclude Include="..\..\ext\base_types_numpy.hpp" />
+    <ClInclude Include="..\..\ext\callback.h" />
+    <ClInclude Include="..\..\ext\server\command.h" />
+    <ClInclude Include="..\..\ext\defs.h" />
+    <ClInclude Include="..\..\ext\device_attribute.h" />
+    <ClInclude Include="..\..\ext\device_attribute_numpy.hpp" />
+    <ClInclude Include="..\..\ext\server\device_class.h" />
+    <ClInclude Include="..\..\ext\server\device_impl.h" />
+    <ClInclude Include="..\..\ext\device_pipe.h" />
+    <ClInclude Include="..\..\ext\exception.h" />
+    <ClInclude Include="..\..\ext\fast_from_py.h" />
+    <ClInclude Include="..\..\ext\fast_from_py_numpy.hpp" />
+    <ClInclude Include="..\..\ext\from_py.h" />
+    <ClInclude Include="..\..\ext\pipe.h" />
+    <ClInclude Include="..\..\ext\precompiled_header.hpp" />
+    <ClInclude Include="..\..\ext\pytgutils.h" />
+    <ClInclude Include="..\..\ext\pyutils.h" />
+    <ClInclude Include="..\..\ext\tango_numpy.h" />
+    <ClInclude Include="..\..\ext\tgutils.h" />
+    <ClInclude Include="..\..\ext\to_py.h" />
+    <ClInclude Include="..\..\ext\to_py_numpy.hpp" />
+    <ClInclude Include="..\..\ext\server\wattribute_numpy.hpp" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\ext\api_util.cpp" />
+    <ClCompile Include="..\..\ext\archive_event_info.cpp" />
+    <ClCompile Include="..\..\ext\server\attr.cpp" />
+    <ClCompile Include="..\..\ext\attr_conf_event_data.cpp" />
+    <ClCompile Include="..\..\ext\server\attribute.cpp" />
+    <ClCompile Include="..\..\ext\server\auto_monitor.cpp" />
+    <ClCompile Include="..\..\ext\attribute_alarm_info.cpp" />
+    <ClCompile Include="..\..\ext\attribute_dimension.cpp" />
+    <ClCompile Include="..\..\ext\attribute_event_info.cpp" />
+    <ClCompile Include="..\..\ext\attribute_info.cpp" />
+    <ClCompile Include="..\..\ext\attribute_info_ex.cpp" />
+    <ClCompile Include="..\..\ext\attribute_proxy.cpp" />
+    <ClCompile Include="..\..\ext\base_types.cpp" />
+    <ClCompile Include="..\..\ext\callback.cpp" />
+    <ClCompile Include="..\..\ext\change_event_info.cpp" />
+    <ClCompile Include="..\..\ext\server\command.cpp" />
+    <ClCompile Include="..\..\ext\command_info.cpp" />
+    <ClCompile Include="..\..\ext\connection.cpp" />
+    <ClCompile Include="..\..\ext\constants.cpp" />
+    <ClCompile Include="..\..\ext\data_ready_event_data.cpp" />
+    <ClCompile Include="..\..\ext\database.cpp" />
+    <ClCompile Include="..\..\ext\db.cpp" />
+    <ClCompile Include="..\..\ext\dev_command_info.cpp" />
+    <ClCompile Include="..\..\ext\dev_error.cpp" />
+    <ClCompile Include="..\..\ext\device_attribute.cpp" />
+    <ClCompile Include="..\..\ext\device_attribute_config.cpp" />
+    <ClCompile Include="..\..\ext\device_attribute_history.cpp" />
+    <ClCompile Include="..\..\ext\server\device_class.cpp" />
+    <ClCompile Include="..\..\ext\device_data.cpp" />
+    <ClCompile Include="..\..\ext\device_data_history.cpp" />
+    <ClCompile Include="..\..\ext\server\device_impl.cpp" />
+    <ClCompile Include="..\..\ext\device_info.cpp" />
+    <ClCompile Include="..\..\ext\device_pipe.cpp" />
+    <ClCompile Include="..\..\ext\device_proxy.cpp" />
+    <ClCompile Include="..\..\ext\server\dserver.cpp" />
+    <ClCompile Include="..\..\ext\server\encoded_attribute.cpp" />
+    <ClCompile Include="..\..\ext\enums.cpp" />
+    <ClCompile Include="..\..\ext\event_data.cpp" />
+    <ClCompile Include="..\..\ext\exception.cpp" />
+    <ClCompile Include="..\..\ext\from_py.cpp" />
+    <ClCompile Include="..\..\ext\group.cpp" />
+    <ClCompile Include="..\..\ext\group_reply.cpp" />
+    <ClCompile Include="..\..\ext\group_reply_list.cpp" />
+    <ClCompile Include="..\..\ext\locker_info.cpp" />
+    <ClCompile Include="..\..\ext\locking_thread.cpp" />
+    <ClCompile Include="..\..\ext\server\log4tango.cpp" />
+    <ClCompile Include="..\..\ext\server\multi_attribute.cpp" />
+    <ClCompile Include="..\..\ext\server\multi_class_attribute.cpp" />
+    <ClCompile Include="..\..\ext\periodic_event_info.cpp" />
+    <ClCompile Include="..\..\ext\server\pipe.cpp" />
+    <ClCompile Include="..\..\ext\pipe_info.cpp" />
+    <ClCompile Include="..\..\ext\poll_device.cpp" />
+    <ClCompile Include="..\..\ext\precompiled_header.cpp" />
+    <ClCompile Include="..\..\ext\pytango.cpp" />
+    <ClCompile Include="..\..\ext\pytgutils.cpp" />
+    <ClCompile Include="..\..\ext\pyutils.cpp" />
+    <ClCompile Include="..\..\ext\server\subdev.cpp" />
+    <ClCompile Include="..\..\ext\server\tango_util.cpp" />
+    <ClCompile Include="..\..\ext\time_val.cpp" />
+    <ClCompile Include="..\..\ext\to_py.cpp" />
+    <ClCompile Include="..\..\ext\server\user_default_attr_prop.cpp" />
+    <ClCompile Include="..\..\ext\server\user_default_pipe_prop.cpp" />
+    <ClCompile Include="..\..\ext\version.cpp" />
+    <ClCompile Include="..\..\ext\server\wattribute.cpp" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="..\..\winsetup.py" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
\ No newline at end of file
diff --git a/win/PyTango_VS10/PyTango.vcxproj.filters b/win/PyTango_VS10/PyTango.vcxproj.filters
new file mode 100755
index 0000000..e77a4f7
--- /dev/null
+++ b/win/PyTango_VS10/PyTango.vcxproj.filters
@@ -0,0 +1,284 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="Header Files">
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+      <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+    </Filter>
+    <Filter Include="Source Files">
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\..\ext\server\attr.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\ext\server\attribute.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\ext\base_types_numpy.hpp">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\ext\callback.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\ext\server\command.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\ext\defs.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\ext\device_attribute.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\ext\device_attribute_numpy.hpp">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\ext\server\device_class.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\ext\server\device_impl.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\ext\device_pipe.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\ext\exception.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\ext\fast_from_py.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\ext\fast_from_py_numpy.hpp">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\ext\from_py.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\ext\pipe.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\ext\precompiled_header.hpp">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\ext\pytgutils.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\ext\pyutils.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\ext\tango_numpy.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\ext\tgutils.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\ext\to_py.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\ext\to_py_numpy.hpp">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\ext\server\wattribute_numpy.hpp">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\ext\api_util.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\archive_event_info.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\server\attr.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\attr_conf_event_data.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\server\attribute.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\server\auto_monitor.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\attribute_alarm_info.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\attribute_dimension.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\attribute_event_info.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\attribute_info.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\attribute_info_ex.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\attribute_proxy.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\base_types.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\callback.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\change_event_info.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\server\command.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\command_info.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\connection.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\constants.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\data_ready_event_data.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\database.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\db.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\dev_command_info.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\dev_error.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\device_attribute.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\device_attribute_config.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\device_attribute_history.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\server\device_class.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\device_data.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\device_data_history.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\server\device_impl.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\device_info.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\device_pipe.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\device_proxy.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\server\dserver.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\server\encoded_attribute.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\enums.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\event_data.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\exception.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\from_py.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\group.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\group_reply.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\group_reply_list.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\locker_info.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\locking_thread.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\server\log4tango.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\server\multi_attribute.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\server\multi_class_attribute.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\periodic_event_info.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\server\pipe.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\pipe_info.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\poll_device.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\precompiled_header.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\pytango.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\pytgutils.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\pyutils.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\server\subdev.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\server\tango_util.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\time_val.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\to_py.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\server\user_default_attr_prop.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\server\user_default_pipe_prop.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\version.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\server\wattribute.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="..\..\winsetup.py" />
+  </ItemGroup>
+</Project>
\ No newline at end of file
diff --git a/win/PyTango_VS14/PyTango.props b/win/PyTango_VS14/PyTango.props
new file mode 100644
index 0000000..e0e820d
--- /dev/null
+++ b/win/PyTango_VS14/PyTango.props
@@ -0,0 +1,399 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup Label="UserMacros">
+    <PyTangoBaseFile>_tango</PyTangoBaseFile>
+    <TangoMajorVer>9</TangoMajorVer>
+    <TangoMinorVer>2</TangoMinorVer>
+    <TangoPatchVer>0</TangoPatchVer>
+    <TangoVer>$(TangoMajorVer).$(TangoMinorVer).$(TangoPatchVer)</TangoVer>
+    <PyTangoMajorVer>9</PyTangoMajorVer>
+    <PyTangoMinorVer>2</PyTangoMinorVer>
+    <PyTangoPatchVer>0</PyTangoPatchVer>
+    <PyTangoVer>$(PyTangoMajorVer).$(PyTangoMinorVer).$(PyTangoPatchVer)</PyTangoVer>
+
+    <BoostMajorVer>1</BoostMajorVer>
+    <BoostMinorVer>61</BoostMinorVer>
+    <BoostPatchVer>0</BoostPatchVer>
+    <BoostVer>$(BoostMajorVer).$(BoostMinorVer).$(BoostPatchVer)</BoostVer>
+
+    <!-- Tiago Coutinho personal configuration -->
+    <!-- <RootDir>C:\Users\coutinho\bin</RootDir> -->
+    <RootDir>C:</RootDir>
+    
+    <TangoBaseDir>$(RootDir)\wsp\tango</TangoBaseDir>
+    <BoostBaseDir>$(RootDir)\wsp\boost-$(BoostVer)</BoostBaseDir>
+    
+    <PythonBaseDir>C:\Python</PythonBaseDir>
+    
+    <VCMajorVer>14</VCMajorVer>
+    <VCMinorVer>0</VCMinorVer>
+    <VCVer>$(VCMajorVer).$(VCMinorVer)</VCVer>
+    
+    <BoostIncludeDir>$(BoostBaseDir)\include\boost-$(BoostMajorVer)_$(BoostMinorVer)</BoostIncludeDir>
+    <BoostLibDir>$(BoostBaseDir)\multi\release\msvc-$(VCVer)\$(Platform)</BoostLibDir>
+    <BoostLibDir_Debug>$(BoostBaseDir)\multi\debug\msvc-$(VCVer)\$(Platform)</BoostLibDir_Debug>
+    
+    <TangoIncludeDir>$(TangoBaseDir)\$(Platform)\include\vc$(VCMajorVer)</TangoIncludeDir>
+    <TangoLibDir>$(TangoBaseDir)\$(Platform)\lib</TangoLibDir>
+    <TangoLibDir_Debug>$(TangoBaseDir)\$(Platform)\lib</TangoLibDir_Debug>
+    
+    <PythonDir>C:\Python\$(Platform)</PythonDir>
+    <NumpyRelativeIncludeDir>Lib\site-packages\numpy\core\include</NumpyRelativeIncludeDir>
+    <PyTangoCompileOptions>-Zm200 /MP8 /bigobj</PyTangoCompileOptions>
+    <BaseDir>$(ProjectDir)..\..</BaseDir>
+    <RelPrefixDir>$(Configuration)_$(Platform)_msvc$(VCVer)</RelPrefixDir>
+    <BaseBuildDir>$(RootDir)\pytango\build_$(PyTangoVer)_tg$(TangoVer)_boost$(BoostVer)</BaseBuildDir>
+    <BaseBuildLibDir>$(BaseBuildDir)\lib</BaseBuildLibDir>
+    <BaseTempDir>$(BaseBuildDir)\temp</BaseTempDir>
+    <BaseDistDir>$(BaseBuildDir)\dist</BaseDistDir>
+    <BaseBDistDir>$(BaseBuildDir)\temp_dist</BaseBDistDir>
+    
+    <!-- to be used in the internal winsetup.py script -->
+    <BuildDir>$(BaseBuildLibDir)\$(RelPrefixDir)</BuildDir>
+    <DistDir>$(BaseDistDir)\$(RelPrefixDir)</DistDir>
+    <TempDir>$(BaseTempDir)\$(RelPrefixDir)</TempDir>
+    <BDistDir>$(BaseBDistDir)\$(RelPrefixDir)</BDistDir>
+    
+    <!-- to be set to OutputDir and IntDir -->
+    <PyTangoBuildDir>$(BuildDir)\tango</PyTangoBuildDir>
+    <PyTangoTempDir>$(TempDir)\tango</PyTangoTempDir>
+    
+    <BaseSrcDir>$(BaseDir)\ext</BaseSrcDir>
+    <CommonIncludeDirs>$(BoostIncludeDir);$(TangoIncludeDir);$(BaseSrcDir);$(BaseSrcDir)\server</CommonIncludeDirs>
+    
+    <Python35Dir>$(PythonDir)\35</Python35Dir>
+    <Py35>$(Python35Dir)\python</Py35>
+    <Python35IncludeDir>$(Python35Dir)\include</Python35IncludeDir>
+    <Numpy35IncludeDir>$(Python35Dir)\$(NumpyRelativeIncludeDir)</Numpy35IncludeDir>
+    <Python35IncludeDirs>$(Python35IncludeDir);$(Numpy35IncludeDir)</Python35IncludeDirs>
+    <Python35LibDir>$(Python35Dir)\libs</Python35LibDir>
+
+    <BasePreFlags>WIN32</BasePreFlags>
+    <PreTangoStaticFlags>_WINSTATIC</PreTangoStaticFlags>
+    <PreTangoSharedFlags>LOG4TANGO_HAS_DLL;TANGO_HAS_DLL</PreTangoSharedFlags>
+    
+    <PreBoostSharedTangoSharedFlags>$(BasePreFlags);$(PreTangoSharedFlags);BOOST_PYTHON_DYNAMIC_LIB</PreBoostSharedTangoSharedFlags>
+    <PreBoostStaticTangoSharedFlags>$(BasePreFlags);$(PreTangoSharedFlags);BOOST_PYTHON_STATIC_LIB</PreBoostStaticTangoSharedFlags>
+    <PreBoostStaticTangoStaticFlags>$(BasePreFlags);$(PreTangoStaticFlags);BOOST_PYTHON_STATIC_LIB</PreBoostStaticTangoStaticFlags>
+    
+    <PreCompHeaderSrc>precompiled_header.hpp</PreCompHeaderSrc>
+    <PreCompHeaderDst>$(TempDir)\$(PyTangoBaseFile)_Boost-$(BoostVer).pch</PreCompHeaderDst>
+    <DatabaseFile>$(TempDir)\$(PyTangoBaseFile)_Boost-$(BoostVer).pdb</DatabaseFile>
+    
+    <BaseDisableWarningFlags>4005;4996;4250</BaseDisableWarningFlags>
+    
+    <BaseLibs>comctl32.lib;ws2_32.lib;mswsock.lib</BaseLibs>
+
+    <omniStaticLibs>COS4.lib;omniORB4.lib;omniDynamic4.lib;omnithread.lib</omniStaticLibs>
+    <omniSharedLibs>COS4_rt.lib;omniORB4_rt.lib;omniDynamic4_rt.lib;omnithread_rt.lib</omniSharedLibs>
+    <BaseTangoLibs>zmq.lib;log4tango.lib;tango.lib;$(BaseLibs)</BaseTangoLibs>
+    <BasePyTangoStaticLibs>$(omniStaticLibs);$(BaseTangoLibs)</BasePyTangoStaticLibs>
+    <BasePyTangoSharedLibs>$(omniSharedLibs);$(BaseTangoLibs)</BasePyTangoSharedLibs>
+    
+    <omniStaticLibs_Debug>COS4d.lib;omniORB4d.lib;omniDynamic4d.lib;omnithreadd.lib</omniStaticLibs_Debug>
+    <omniSharedLibs_Debug>COS4_rtd.lib;omniORB4_rtd.lib;omniDynamic4_rtd.lib;omnithread_rtd.lib</omniSharedLibs_Debug>
+    <BaseTangoLibs_Debug>zmqd.lib;log4tangod.lib;tangod.lib;$(BaseLibs)</BaseTangoLibs_Debug>
+    <BasePyTangoStaticLibs_Debug>$(omniStaticLibs_Debug);$(BaseTangoLibs_Debug)</BasePyTangoStaticLibs_Debug>
+    <BasePyTangoSharedLibs_Debug>$(omniSharedLibs_Debug);$(BaseTangoLibs_Debug)</BasePyTangoSharedLibs_Debug>
+    
+    <PyTango35StaticLibs>$(BasePyTangoStaticLibs);python35.lib</PyTango35StaticLibs>
+    <PyTango35SharedLibs>$(BasePyTangoSharedLibs);python35.lib</PyTango35SharedLibs>
+
+    <BaseBoostSharedRtSharedLibDir>$(BoostLibDir)\shared\runtime_shared</BaseBoostSharedRtSharedLibDir>
+    <BaseBoostStaticRtSharedLibDir>$(BoostLibDir)\static\runtime_shared</BaseBoostStaticRtSharedLibDir>
+    <BaseBoostStaticRtStaticLibDir>$(BoostLibDir)\static\runtime_static</BaseBoostStaticRtStaticLibDir>
+    
+    <Boost35SharedRtSharedLibDir>$(BaseBoostSharedRtSharedLibDir)\35;$(Python35LibDir)</Boost35SharedRtSharedLibDir>
+    <Boost35StaticRtSharedLibDir>$(BaseBoostStaticRtSharedLibDir)\35;$(Python35LibDir)</Boost35StaticRtSharedLibDir>
+    <Boost35StaticRtStaticLibDir>$(BaseBoostStaticRtStaticLibDir)\35;$(Python35LibDir)</Boost35StaticRtStaticLibDir>
+
+    <Py35BoostSharedTangoSharedLibDir>$(Boost35SharedRtSharedLibDir);$(TangoLibDir)\vc$(VCMajorVer)_dll</Py35BoostSharedTangoSharedLibDir>
+    <Py35BoostStaticTangoSharedLibDir>$(Boost35StaticRtSharedLibDir);$(TangoLibDir)\vc$(VCMajorVer)_dll</Py35BoostStaticTangoSharedLibDir>
+    <Py35BoostStaticTangoStaticLibDir>$(Boost35StaticRtStaticLibDir);$(TangoLibDir)\vc$(VCMajorVer)</Py35BoostStaticTangoStaticLibDir>
+
+    <!-- debug variables -->
+    
+    <PyTango35StaticLibs_Debug>$(BasePyTangoStaticLibs_Debug);python35.lib</PyTango35StaticLibs_Debug>
+    <PyTango35SharedLibs_Debug>$(BasePyTangoSharedLibs_Debug);python35.lib</PyTango35SharedLibs_Debug>
+
+    <BaseBoostSharedRtSharedLibDir_Debug>$(BoostLibDir)\shared\runtime_shared</BaseBoostSharedRtSharedLibDir_Debug>
+    <BaseBoostStaticRtSharedLibDir_Debug>$(BoostLibDir)\static\runtime_shared</BaseBoostStaticRtSharedLibDir_Debug>
+    <BaseBoostStaticRtStaticLibDir_Debug>$(BoostLibDir)\static\runtime_static</BaseBoostStaticRtStaticLibDir_Debug>
+    
+    <Boost35SharedRtSharedLibDir_Debug>$(BaseBoostSharedRtSharedLibDir_Debug)\35;$(Python35LibDir)</Boost35SharedRtSharedLibDir_Debug>
+    <Boost35StaticRtSharedLibDir_Debug>$(BaseBoostStaticRtSharedLibDir_Debug)\35;$(Python35LibDir)</Boost35StaticRtSharedLibDir_Debug>
+    <Boost35StaticRtStaticLibDir_Debug>$(BaseBoostStaticRtStaticLibDir_Debug)\35;$(Python35LibDir)</Boost35StaticRtStaticLibDir_Debug>
+
+    <Py35BoostSharedTangoSharedLibDir_Debug>$(Boost35SharedRtSharedLibDir_Debug);$(TangoLibDir_Debug)\vc$(VCMajorVer)_dll</Py35BoostSharedTangoSharedLibDir_Debug>
+    <Py35BoostStaticTangoSharedLibDir_Debug>$(Boost35StaticRtSharedLibDir_Debug);$(TangoLibDir_Debug)\vc$(VCMajorVer)_dll</Py35BoostStaticTangoSharedLibDir_Debug>
+    <Py35BoostStaticTangoStaticLibDir_Debug>$(Boost35StaticRtStaticLibDir_Debug);$(TangoLibDir_Debug)\vc$(VCMajorVer)</Py35BoostStaticTangoStaticLibDir_Debug>
+
+    <WinSetupArgs>$(BaseDir)\winsetup.py $(BuildDir) $(DistDir) $(BDistDir) $(Configuration) $(Platform)</WinSetupArgs>
+  </PropertyGroup>
+  <PropertyGroup>
+    <_ProjectFileVersion>14.0.30319.1</_ProjectFileVersion>
+    <_PropertySheetDisplayName>PyTango Project Properties</_PropertySheetDisplayName>
+    <OutDir>$(PyTangoBuildDir)\</OutDir>
+    <IntDir>$(PyTangoTempDir)\</IntDir>
+    <LinkIncremental>false</LinkIncremental>
+  </PropertyGroup>
+  <ItemDefinitionGroup>
+    <ClCompile>
+      <AdditionalOptions>$(PyTangoCompileOptions) %(AdditionalOptions)</AdditionalOptions>
+      <Optimization>Full</Optimization>
+      <WholeProgramOptimization>false</WholeProgramOptimization>
+      <BufferSecurityCheck>false</BufferSecurityCheck>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <PrecompiledHeaderOutputFile>$(PreCompHeaderDst)</PrecompiledHeaderOutputFile>
+      <PrecompiledHeaderFile>$(PreCompHeaderSrc)</PrecompiledHeaderFile>
+      <ProgramDataBaseFileName>$(DatabaseFile)</ProgramDataBaseFileName>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <CompileAs>Default</CompileAs>
+      <DisableSpecificWarnings>$(BaseDisableWarningFlags);%(DisableSpecificWarnings)</DisableSpecificWarnings>
+      <ErrorReporting>Prompt</ErrorReporting>
+    </ClCompile>
+    <Link>
+      <ShowProgress>NotSet</ShowProgress>
+      <OutputFile>$(OutDir)$(PyTangoBaseFile).pyd</OutputFile>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <ProgramDatabaseFile>$(DatabaseFile)</ProgramDatabaseFile>
+      <SubSystem>Windows</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <LinkTimeCodeGeneration>
+      </LinkTimeCodeGeneration>
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>
+      <DataExecutionPrevention>
+      </DataExecutionPrevention>
+      <TargetMachine>MachineX86</TargetMachine>
+    </Link>
+    <PostBuildEvent>
+      <Message>[PyTango]: Starting python $(WinSetupArgs)</Message>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <PropertyGroup Label="Configuration">
+    <BuildLogFile>$(IntDir)BuildLog.html</BuildLogFile>
+  </PropertyGroup>
+  <ItemGroup>
+    <BuildMacro Include="PyTangoBaseFile">
+      <Value>$(PyTangoBaseFile)</Value>
+    </BuildMacro>
+    <BuildMacro Include="TangoMajorVer">
+      <Value>$(TangoMajorVer)</Value>
+    </BuildMacro>
+    <BuildMacro Include="TangoMinorVer">
+      <Value>$(TangoMinorVer)</Value>
+    </BuildMacro>
+    <BuildMacro Include="TangoPatchVer">
+      <Value>$(TangoPatchVer)</Value>
+    </BuildMacro>
+    <BuildMacro Include="TangoVer">
+      <Value>$(TangoVer)</Value>
+    </BuildMacro>
+    <BuildMacro Include="BoostMajorVer">
+      <Value>$(BoostMajorVer)</Value>
+    </BuildMacro>
+    <BuildMacro Include="BoostMinorVer">
+      <Value>$(BoostMinorVer)</Value>
+    </BuildMacro>
+    <BuildMacro Include="BoostPatchVer">
+      <Value>$(BoostPatchVer)</Value>
+    </BuildMacro>
+    <BuildMacro Include="BoostVer">
+      <Value>$(BoostVer)</Value>
+    </BuildMacro>
+    <BuildMacro Include="TangoBaseDir">
+      <Value>$(TangoBaseDir)</Value>
+    </BuildMacro>
+    <BuildMacro Include="BoostBaseDir">
+      <Value>$(BoostBaseDir)</Value>
+    </BuildMacro>
+    <BuildMacro Include="PythonBaseDir">
+      <Value>$(PythonBaseDir)</Value>
+    </BuildMacro>
+    <BuildMacro Include="VCMajorVer">
+      <Value>$(VCMajorVer)</Value>
+    </BuildMacro>
+    <BuildMacro Include="VCMinorVer">
+      <Value>$(VCMinorVer)</Value>
+    </BuildMacro>
+    <BuildMacro Include="VCVer">
+      <Value>$(VCVer)</Value>
+    </BuildMacro>
+    <BuildMacro Include="BoostIncludeDir">
+      <Value>$(BoostIncludeDir)</Value>
+    </BuildMacro>
+    <BuildMacro Include="BoostLibDir">
+      <Value>$(BoostLibDir)</Value>
+    </BuildMacro>
+    <BuildMacro Include="TangoIncludeDir">
+      <Value>$(TangoIncludeDir)</Value>
+    </BuildMacro>
+    <BuildMacro Include="TangoLibDir">
+      <Value>$(TangoLibDir)</Value>
+    </BuildMacro>
+    <BuildMacro Include="PythonDir">
+      <Value>$(PythonDir)</Value>
+    </BuildMacro>
+    <BuildMacro Include="NumpyRelativeIncludeDir">
+      <Value>$(NumpyRelativeIncludeDir)</Value>
+    </BuildMacro>
+    <BuildMacro Include="PyTangoCompileOptions">
+      <Value>$(PyTangoCompileOptions)</Value>
+    </BuildMacro>
+    <BuildMacro Include="BaseDir">
+      <Value>$(BaseDir)</Value>
+    </BuildMacro>
+    <BuildMacro Include="RelPrefixDir">
+      <Value>$(RelPrefixDir)</Value>
+    </BuildMacro>
+    <BuildMacro Include="BaseBuildDir">
+      <Value>$(BaseBuildDir)</Value>
+    </BuildMacro>
+    <BuildMacro Include="BaseBuildLibDir">
+      <Value>$(BaseBuildLibDir)</Value>
+    </BuildMacro>
+    <BuildMacro Include="BaseTempDir">
+      <Value>$(BaseTempDir)</Value>
+    </BuildMacro>
+    <BuildMacro Include="BaseDistDir">
+      <Value>$(BaseDistDir)</Value>
+    </BuildMacro>
+    <BuildMacro Include="BaseBDistDir">
+      <Value>$(BaseBDistDir)</Value>
+    </BuildMacro>
+    <BuildMacro Include="BuildDir">
+      <Value>$(BuildDir)</Value>
+    </BuildMacro>
+    <BuildMacro Include="DistDir">
+      <Value>$(DistDir)</Value>
+    </BuildMacro>
+    <BuildMacro Include="TempDir">
+      <Value>$(TempDir)</Value>
+    </BuildMacro>
+    <BuildMacro Include="BDistDir">
+      <Value>$(BDistDir)</Value>
+    </BuildMacro>
+    <BuildMacro Include="PyTangoBuildDir">
+      <Value>$(PyTangoBuildDir)</Value>
+    </BuildMacro>
+    <BuildMacro Include="PyTangoTempDir">
+      <Value>$(PyTangoTempDir)</Value>
+    </BuildMacro>
+    <BuildMacro Include="BaseSrcDir">
+      <Value>$(BaseSrcDir)</Value>
+    </BuildMacro>
+    <BuildMacro Include="CommonIncludeDirs">
+      <Value>$(CommonIncludeDirs)</Value>
+    </BuildMacro>
+
+    <BuildMacro Include="Python35Dir">
+      <Value>$(Python35Dir)</Value>
+    </BuildMacro>
+    <BuildMacro Include="Py35">
+      <Value>$(Py35)</Value>
+    </BuildMacro>
+    <BuildMacro Include="Python35IncludeDir">
+      <Value>$(Python35IncludeDir)</Value>
+    </BuildMacro>
+    <BuildMacro Include="Numpy35IncludeDir">
+      <Value>$(Numpy35IncludeDir)</Value>
+    </BuildMacro>
+    <BuildMacro Include="Python35IncludeDirs">
+      <Value>$(Python35IncludeDirs)</Value>
+    </BuildMacro>
+    <BuildMacro Include="Python35LibDir">
+      <Value>$(Python35LibDir)</Value>
+    </BuildMacro>
+
+
+    <BuildMacro Include="BasePreFlags">
+      <Value>$(BasePreFlags)</Value>
+    </BuildMacro>
+    <BuildMacro Include="PreTangoStaticFlags">
+      <Value>$(PreTangoStaticFlags)</Value>
+    </BuildMacro>
+    <BuildMacro Include="PreTangoSharedFlags">
+      <Value>$(PreTangoSharedFlags)</Value>
+    </BuildMacro>
+    <BuildMacro Include="PreBoostSharedTangoSharedFlags">
+      <Value>$(PreBoostSharedTangoSharedFlags)</Value>
+    </BuildMacro>
+    <BuildMacro Include="PreBoostStaticTangoSharedFlags">
+      <Value>$(PreBoostStaticTangoSharedFlags)</Value>
+    </BuildMacro>
+    <BuildMacro Include="PreBoostStaticTangoStaticFlags">
+      <Value>$(PreBoostStaticTangoStaticFlags)</Value>
+    </BuildMacro>
+    <BuildMacro Include="PreCompHeaderSrc">
+      <Value>$(PreCompHeaderSrc)</Value>
+    </BuildMacro>
+    <BuildMacro Include="PreCompHeaderDst">
+      <Value>$(PreCompHeaderDst)</Value>
+    </BuildMacro>
+    <BuildMacro Include="DatabaseFile">
+      <Value>$(DatabaseFile)</Value>
+    </BuildMacro>
+    <BuildMacro Include="BaseDisableWarningFlags">
+      <Value>$(BaseDisableWarningFlags)</Value>
+    </BuildMacro>
+    <BuildMacro Include="omniStaticLibs">
+      <Value>$(omniStaticLibs)</Value>
+    </BuildMacro>
+    <BuildMacro Include="omniSharedLibs">
+      <Value>$(omniSharedLibs)</Value>
+    </BuildMacro>
+    <BuildMacro Include="BaseTangoLibs">
+      <Value>$(BaseTangoLibs)</Value>
+    </BuildMacro>
+    <BuildMacro Include="BasePyTangoStaticLibs">
+      <Value>$(BasePyTangoStaticLibs)</Value>
+    </BuildMacro>
+    <BuildMacro Include="BasePyTangoSharedLibs">
+      <Value>$(BasePyTangoSharedLibs)</Value>
+    </BuildMacro>
+
+    <BuildMacro Include="PyTango35StaticLibs">
+      <Value>$(PyTango35StaticLibs)</Value>
+    </BuildMacro>
+    <BuildMacro Include="PyTango35SharedLibs">
+      <Value>$(PyTango35SharedLibs)</Value>
+    </BuildMacro>
+	
+    <BuildMacro Include="BaseBoostSharedRtSharedLibDir">
+      <Value>$(BaseBoostSharedRtSharedLibDir)</Value>
+    </BuildMacro>
+    <BuildMacro Include="BaseBoostStaticRtSharedLibDir">
+      <Value>$(BaseBoostStaticRtSharedLibDir)</Value>
+    </BuildMacro>
+    <BuildMacro Include="BaseBoostStaticRtStaticLibDir">
+      <Value>$(BaseBoostStaticRtStaticLibDir)</Value>
+    </BuildMacro>
+
+    <BuildMacro Include="Boost35SharedRtSharedLibDir">
+      <Value>$(Boost35SharedRtSharedLibDir)</Value>
+    </BuildMacro>
+    <BuildMacro Include="Boost35StaticRtSharedLibDir">
+      <Value>$(Boost35StaticRtSharedLibDir)</Value>
+    </BuildMacro>
+    <BuildMacro Include="Boost35StaticRtStaticLibDir">
+      <Value>$(Boost35StaticRtStaticLibDir)</Value>
+    </BuildMacro>
+    <BuildMacro Include="Py35BoostSharedTangoSharedLibDir">
+      <Value>$(Py35BoostSharedTangoSharedLibDir)</Value>
+    </BuildMacro>
+    <BuildMacro Include="Py35BoostStaticTangoSharedLibDir">
+      <Value>$(Py35BoostStaticTangoSharedLibDir)</Value>
+    </BuildMacro>
+    <BuildMacro Include="Py35BoostStaticTangoStaticLibDir">
+      <Value>$(Py35BoostStaticTangoStaticLibDir)</Value>
+    </BuildMacro>
+
+    <BuildMacro Include="WinSetupArgs">
+      <Value>$(WinSetupArgs)</Value>
+    </BuildMacro>
+  </ItemGroup>
+</Project>
diff --git a/win/PyTango_VS14/PyTango.sln b/win/PyTango_VS14/PyTango.sln
new file mode 100644
index 0000000..7f3fc47
--- /dev/null
+++ b/win/PyTango_VS14/PyTango.sln
@@ -0,0 +1,53 @@
+
+Microsoft Visual Studio Solution File, Format Version 14.00
+# Visual Studio 2014
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PyTango", "PyTango.vcxproj", "{764A5ECE-11AE-4363-9A1C-573972A1BADD}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		py35_bopyshared_tangoshared_release|Win32 = py35_bopyshared_tangoshared_release|Win32
+		py35_bopyshared_tangoshared_release|x64 = py35_bopyshared_tangoshared_release|x64
+		py35_bopystatic_tangoshared_release|Win32 = py35_bopystatic_tangoshared_release|Win32
+		py35_bopystatic_tangoshared_release|x64 = py35_bopystatic_tangoshared_release|x64
+		py35_bopystatic_tangostatic_release|Win32 = py35_bopystatic_tangostatic_release|Win32
+		py35_bopystatic_tangostatic_release|x64 = py35_bopystatic_tangostatic_release|x64
+
+		py35_bopyshared_tangoshared_debug|Win32 = py35_bopyshared_tangoshared_debug|Win32
+		py35_bopyshared_tangoshared_debug|x64 = py35_bopyshared_tangoshared_debug|x64
+		py35_bopystatic_tangoshared_debug|Win32 = py35_bopystatic_tangoshared_debug|Win32
+		py35_bopystatic_tangoshared_debug|x64 = py35_bopystatic_tangoshared_debug|x64
+		py35_bopystatic_tangostatic_debug|Win32 = py35_bopystatic_tangostatic_debug|Win32
+		py35_bopystatic_tangostatic_debug|x64 = py35_bopystatic_tangostatic_debug|x64
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py35_bopyshared_tangoshared_release|Win32.ActiveCfg = py35_bopyshared_tangoshared_release|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py35_bopyshared_tangoshared_release|Win32.Build.0 = py35_bopyshared_tangoshared_release|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py35_bopyshared_tangoshared_release|x64.ActiveCfg = py35_bopyshared_tangoshared_release|x64
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py35_bopyshared_tangoshared_release|x64.Build.0 = py35_bopyshared_tangoshared_release|x64
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py35_bopystatic_tangoshared_release|Win32.ActiveCfg = py35_bopystatic_tangoshared_release|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py35_bopystatic_tangoshared_release|Win32.Build.0 = py35_bopystatic_tangoshared_release|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py35_bopystatic_tangoshared_release|x64.ActiveCfg = py35_bopystatic_tangoshared_release|x64
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py35_bopystatic_tangoshared_release|x64.Build.0 = py35_bopystatic_tangoshared_release|x64
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py35_bopystatic_tangostatic_release|Win32.ActiveCfg = py35_bopystatic_tangostatic_release|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py35_bopystatic_tangostatic_release|Win32.Build.0 = py35_bopystatic_tangostatic_release|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py35_bopystatic_tangostatic_release|x64.ActiveCfg = py35_bopystatic_tangostatic_release|x64
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py35_bopystatic_tangostatic_release|x64.Build.0 = py35_bopystatic_tangostatic_release|x64
+
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py35_bopyshared_tangoshared_debug|Win32.ActiveCfg = py35_bopyshared_tangoshared_debug|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py35_bopyshared_tangoshared_debug|Win32.Build.0 = py35_bopyshared_tangoshared_debug|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py35_bopyshared_tangoshared_debug|x64.ActiveCfg = py35_bopyshared_tangoshared_debug|x64
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py35_bopyshared_tangoshared_debug|x64.Build.0 = py35_bopyshared_tangoshared_debug|x64
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py35_bopystatic_tangoshared_debug|Win32.ActiveCfg = py35_bopystatic_tangoshared_debug|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py35_bopystatic_tangoshared_debug|Win32.Build.0 = py35_bopystatic_tangoshared_debug|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py35_bopystatic_tangoshared_debug|x64.ActiveCfg = py35_bopystatic_tangoshared_debug|x64
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py35_bopystatic_tangoshared_debug|x64.Build.0 = py35_bopystatic_tangoshared_debug|x64
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py35_bopystatic_tangostatic_debug|Win32.ActiveCfg = py35_bopystatic_tangostatic_debug|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py35_bopystatic_tangostatic_debug|Win32.Build.0 = py35_bopystatic_tangostatic_debug|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py35_bopystatic_tangostatic_debug|x64.ActiveCfg = py35_bopystatic_tangostatic_debug|x64
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py35_bopystatic_tangostatic_debug|x64.Build.0 = py35_bopystatic_tangostatic_debug|x64
+
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
diff --git a/win/PyTango_VS14/PyTango.vcxproj b/win/PyTango_VS14/PyTango.vcxproj
new file mode 100644
index 0000000..139e15e
--- /dev/null
+++ b/win/PyTango_VS14/PyTango.vcxproj
@@ -0,0 +1,521 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="py35_bopyshared_tangoshared_release|Win32">
+      <Configuration>py35_bopyshared_tangoshared_release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="py35_bopyshared_tangoshared_release|x64">
+      <Configuration>py35_bopyshared_tangoshared_release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="py35_bopystatic_tangoshared_release|Win32">
+      <Configuration>py35_bopystatic_tangoshared_release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="py35_bopystatic_tangoshared_release|x64">
+      <Configuration>py35_bopystatic_tangoshared_release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="py35_bopystatic_tangostatic_release|Win32">
+      <Configuration>py35_bopystatic_tangostatic_release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="py35_bopystatic_tangostatic_release|x64">
+      <Configuration>py35_bopystatic_tangostatic_release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="py35_bopyshared_tangoshared_debug|Win32">
+      <Configuration>py35_bopyshared_tangoshared_debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="py35_bopyshared_tangoshared_debug|x64">
+      <Configuration>py35_bopyshared_tangoshared_debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="py35_bopystatic_tangoshared_debug|Win32">
+      <Configuration>py35_bopystatic_tangoshared_debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="py35_bopystatic_tangoshared_debug|x64">
+      <Configuration>py35_bopystatic_tangoshared_debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="py35_bopystatic_tangostatic_debug|Win32">
+      <Configuration>py35_bopystatic_tangostatic_debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="py35_bopystatic_tangostatic_debug|x64">
+      <Configuration>py35_bopystatic_tangostatic_debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{764A5ECE-11AE-4363-9A1C-573972A1BADD}</ProjectGuid>
+    <RootNamespace>PyTango_VS14</RootNamespace>
+    <Keyword>Win32Proj</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='py35_bopystatic_tangostatic_release|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>NotSet</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <PlatformToolset>v140</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='py35_bopystatic_tangoshared_release|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>NotSet</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <PlatformToolset>v140</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='py35_bopyshared_tangoshared_release|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>NotSet</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <PlatformToolset>v140</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='py35_bopystatic_tangostatic_release|x64'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>NotSet</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <PlatformToolset>v140</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='py35_bopystatic_tangoshared_release|x64'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>NotSet</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <PlatformToolset>v140</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='py35_bopyshared_tangoshared_release|x64'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>NotSet</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <PlatformToolset>v140</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='py35_bopystatic_tangostatic_debug|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>NotSet</CharacterSet>
+    <WholeProgramOptimization>false</WholeProgramOptimization>
+    <PlatformToolset>v140</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='py35_bopystatic_tangoshared_debug|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>NotSet</CharacterSet>
+    <WholeProgramOptimization>false</WholeProgramOptimization>
+    <PlatformToolset>v140</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='py35_bopyshared_tangoshared_debug|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>NotSet</CharacterSet>
+    <WholeProgramOptimization>false</WholeProgramOptimization>
+    <PlatformToolset>v140</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='py35_bopystatic_tangostatic_debug|x64'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>NotSet</CharacterSet>
+    <WholeProgramOptimization>false</WholeProgramOptimization>
+    <PlatformToolset>v140</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='py35_bopystatic_tangoshared_debug|x64'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>NotSet</CharacterSet>
+    <WholeProgramOptimization>false</WholeProgramOptimization>
+    <PlatformToolset>v140</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='py35_bopyshared_tangoshared_debug|x64'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>NotSet</CharacterSet>
+    <WholeProgramOptimization>false</WholeProgramOptimization>
+    <PlatformToolset>v140</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='py35_bopystatic_tangostatic_release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="PyTango.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='py35_bopystatic_tangoshared_release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="PyTango.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='py35_bopyshared_tangoshared_release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="PyTango.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='py35_bopystatic_tangostatic_release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="PyTango.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='py35_bopystatic_tangoshared_release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="PyTango.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='py35_bopyshared_tangoshared_release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="PyTango.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='py35_bopystatic_tangostatic_debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="PyTango.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='py35_bopystatic_tangoshared_debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="PyTango.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='py35_bopyshared_tangoshared_debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="PyTango.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='py35_bopystatic_tangostatic_debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="PyTango.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='py35_bopystatic_tangoshared_debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="PyTango.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='py35_bopyshared_tangoshared_debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="PyTango.props" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='py35_bopyshared_tangoshared_release|Win32'">$(PyTangoBaseFile)</TargetName>
+    <TargetExt Condition="'$(Configuration)|$(Platform)'=='py35_bopyshared_tangoshared_release|Win32'">.pyd</TargetExt>
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='py35_bopystatic_tangoshared_release|Win32'">$(PyTangoBaseFile)</TargetName>
+    <TargetExt Condition="'$(Configuration)|$(Platform)'=='py35_bopystatic_tangoshared_release|Win32'">.pyd</TargetExt>
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='py35_bopystatic_tangostatic_release|Win32'">$(PyTangoBaseFile)</TargetName>
+    <TargetExt Condition="'$(Configuration)|$(Platform)'=='py35_bopystatic_tangostatic_release|Win32'">.pyd</TargetExt>
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='py35_bopyshared_tangoshared_release|x64'">$(PyTangoBaseFile)</TargetName>
+    <TargetExt Condition="'$(Configuration)|$(Platform)'=='py35_bopyshared_tangoshared_release|x64'">.pyd</TargetExt>
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='py35_bopystatic_tangoshared_release|x64'">$(PyTangoBaseFile)</TargetName>
+    <TargetExt Condition="'$(Configuration)|$(Platform)'=='py35_bopystatic_tangoshared_release|x64'">.pyd</TargetExt>
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='py35_bopystatic_tangostatic_release|x64'">$(PyTangoBaseFile)</TargetName>
+    <TargetExt Condition="'$(Configuration)|$(Platform)'=='py35_bopystatic_tangostatic_release|x64'">.pyd</TargetExt>
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='py35_bopyshared_tangoshared_debug|Win32'">$(PyTangoBaseFile)</TargetName>
+    <TargetExt Condition="'$(Configuration)|$(Platform)'=='py35_bopyshared_tangoshared_debug|Win32'">.pyd</TargetExt>
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='py35_bopystatic_tangoshared_debug|Win32'">$(PyTangoBaseFile)</TargetName>
+    <TargetExt Condition="'$(Configuration)|$(Platform)'=='py35_bopystatic_tangoshared_debug|Win32'">.pyd</TargetExt>
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='py35_bopystatic_tangostatic_debug|Win32'">$(PyTangoBaseFile)</TargetName>
+    <TargetExt Condition="'$(Configuration)|$(Platform)'=='py35_bopystatic_tangostatic_debug|Win32'">.pyd</TargetExt>
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='py35_bopyshared_tangoshared_debug|x64'">$(PyTangoBaseFile)</TargetName>
+    <TargetExt Condition="'$(Configuration)|$(Platform)'=='py35_bopyshared_tangoshared_debug|x64'">.pyd</TargetExt>
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='py35_bopystatic_tangoshared_debug|x64'">$(PyTangoBaseFile)</TargetName>
+    <TargetExt Condition="'$(Configuration)|$(Platform)'=='py35_bopystatic_tangoshared_debug|x64'">.pyd</TargetExt>
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='py35_bopystatic_tangostatic_debug|x64'">$(PyTangoBaseFile)</TargetName>
+    <TargetExt Condition="'$(Configuration)|$(Platform)'=='py35_bopystatic_tangostatic_debug|x64'">.pyd</TargetExt>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='py35_bopyshared_tangoshared_release|Win32'">
+    <ClCompile>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>$(CommonIncludeDirs);$(Python35IncludeDirs);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>$(PreBoostSharedTangoSharedFlags);%(PreprocessorDefinitions);NDEBUG</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>$(PyTango35SharedLibs);%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(py35BoostSharedTangoSharedLibDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
+    </Link>
+    <PostBuildEvent>
+      <Command>$(py35) $(WinSetupArgs)</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='py35_bopyshared_tangoshared_release|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>$(CommonIncludeDirs);$(Python35IncludeDirs);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>$(PreBoostSharedTangoSharedFlags);%(PreprocessorDefinitions);NDEBUG</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>$(PyTango35SharedLibs);%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(py35BoostSharedTangoSharedLibDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
+      <TargetMachine>MachineX64</TargetMachine>
+    </Link>
+    <PostBuildEvent>
+      <Command>$(py35) $(WinSetupArgs)</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='py35_bopystatic_tangoshared_release|Win32'">
+    <ClCompile>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>$(CommonIncludeDirs);$(Python35IncludeDirs);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>$(PreBoostStaticTangoSharedFlags);%(PreprocessorDefinitions);NDEBUG</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>$(PyTango35SharedLibs);%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(py35BoostStaticTangoSharedLibDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
+    </Link>
+    <PostBuildEvent>
+      <Command>$(py35) $(WinSetupArgs)</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='py35_bopystatic_tangoshared_release|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>$(CommonIncludeDirs);$(Python35IncludeDirs);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>$(PreBoostStaticTangoSharedFlags);%(PreprocessorDefinitions);NDEBUG</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>$(PyTango35SharedLibs);%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(py35BoostStaticTangoSharedLibDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
+      <TargetMachine>MachineX64</TargetMachine>
+    </Link>
+    <PostBuildEvent>
+      <Command>$(py35) $(WinSetupArgs)</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='py35_bopystatic_tangostatic_release|Win32'">
+    <ClCompile>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>$(CommonIncludeDirs);$(Python35IncludeDirs);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>$(PreBoostStaticTangoStaticFlags);%(PreprocessorDefinitions);NDEBUG</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+      <CompileAs>CompileAsCpp</CompileAs>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>$(PyTango35StaticLibs);%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(py35BoostStaticTangoStaticLibDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
+    </Link>
+    <PostBuildEvent>
+      <Command>$(py35) $(WinSetupArgs)</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='py35_bopystatic_tangostatic_release|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>$(CommonIncludeDirs);$(Python35IncludeDirs);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>$(PreBoostStaticTangoStaticFlags);%(PreprocessorDefinitions);NDEBUG</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+      <CompileAs>CompileAsCpp</CompileAs>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>$(PyTango35StaticLibs);%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(py35BoostStaticTangoStaticLibDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
+      <TargetMachine>MachineX64</TargetMachine>
+      <ShowProgress>LinkVerbose</ShowProgress>
+    </Link>
+    <PostBuildEvent>
+      <Command>$(py35) $(WinSetupArgs)</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='py35_bopyshared_tangoshared_debug|Win32'">
+    <ClCompile>
+      <WholeProgramOptimization>false</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>$(CommonIncludeDirs);$(Python35IncludeDirs);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>$(PreBoostSharedTangoSharedFlags);%(PreprocessorDefinitions);_DEBUG</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>$(PyTango35SharedLibs_Debug);%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(py35BoostSharedTangoSharedLibDir_Debug);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
+    </Link>
+    <PostBuildEvent>
+      <Command>$(py35) $(WinSetupArgs)</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='py35_bopyshared_tangoshared_debug|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <WholeProgramOptimization>false</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>$(CommonIncludeDirs);$(Python35IncludeDirs);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>$(PreBoostSharedTangoSharedFlags);%(PreprocessorDefinitions);_DEBUG</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>$(PyTango35SharedLibs_Debug);%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(py35BoostSharedTangoSharedLibDir_Debug);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
+      <TargetMachine>MachineX64</TargetMachine>
+    </Link>
+    <PostBuildEvent>
+      <Command>$(py35) $(WinSetupArgs)</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='py35_bopystatic_tangoshared_debug|Win32'">
+    <ClCompile>
+      <WholeProgramOptimization>false</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>$(CommonIncludeDirs);$(Python35IncludeDirs);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>$(PreBoostStaticTangoSharedFlags);%(PreprocessorDefinitions);_DEBUG</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>$(PyTango35SharedLibs_Debug);%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(py35BoostStaticTangoSharedLibDir_Debug);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
+    </Link>
+    <PostBuildEvent>
+      <Command>$(py35) $(WinSetupArgs)</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='py35_bopystatic_tangoshared_debug|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <WholeProgramOptimization>false</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>$(CommonIncludeDirs);$(Python35IncludeDirs);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>$(PreBoostStaticTangoSharedFlags);%(PreprocessorDefinitions);_DEBUG</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>$(PyTango35SharedLibs_Debug);%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(py35BoostStaticTangoSharedLibDir_Debug);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
+      <TargetMachine>MachineX64</TargetMachine>
+    </Link>
+    <PostBuildEvent>
+      <Command>$(py35) $(WinSetupArgs)</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='py35_bopystatic_tangostatic_debug|Win32'">
+    <ClCompile>
+      <WholeProgramOptimization>false</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>$(CommonIncludeDirs);$(Python35IncludeDirs);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>$(PreBoostStaticTangoStaticFlags);%(PreprocessorDefinitions);_DEBUG</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+      <CompileAs>CompileAsCpp</CompileAs>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>$(PyTango35StaticLibs_Debug);%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(py35BoostStaticTangoStaticLibDir_Debug);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
+    </Link>
+    <PostBuildEvent>
+      <Command>$(py35) $(WinSetupArgs)</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='py35_bopystatic_tangostatic_debug|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <WholeProgramOptimization>false</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>$(CommonIncludeDirs);$(Python35IncludeDirs);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>$(PreBoostStaticTangoStaticFlags);%(PreprocessorDefinitions);_DEBUG</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+      <CompileAs>CompileAsCpp</CompileAs>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>$(PyTango35StaticLibs_Debug);%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(py35BoostStaticTangoStaticLibDir_Debug);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
+      <TargetMachine>MachineX64</TargetMachine>
+    </Link>
+    <PostBuildEvent>
+      <Command>$(py35) $(WinSetupArgs)</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClInclude Include="..\..\ext\server\attr.h" />
+    <ClInclude Include="..\..\ext\server\attribute.h" />
+    <ClInclude Include="..\..\ext\base_types_numpy.hpp" />
+    <ClInclude Include="..\..\ext\callback.h" />
+    <ClInclude Include="..\..\ext\server\command.h" />
+    <ClInclude Include="..\..\ext\defs.h" />
+    <ClInclude Include="..\..\ext\device_attribute.h" />
+    <ClInclude Include="..\..\ext\device_attribute_numpy.hpp" />
+    <ClInclude Include="..\..\ext\server\device_class.h" />
+    <ClInclude Include="..\..\ext\server\device_impl.h" />
+    <ClInclude Include="..\..\ext\device_pipe.h" />
+    <ClInclude Include="..\..\ext\exception.h" />
+    <ClInclude Include="..\..\ext\fast_from_py.h" />
+    <ClInclude Include="..\..\ext\fast_from_py_numpy.hpp" />
+    <ClInclude Include="..\..\ext\from_py.h" />
+    <ClInclude Include="..\..\ext\pipe.h" />
+    <ClInclude Include="..\..\ext\precompiled_header.hpp" />
+    <ClInclude Include="..\..\ext\pytgutils.h" />
+    <ClInclude Include="..\..\ext\pyutils.h" />
+    <ClInclude Include="..\..\ext\tango_numpy.h" />
+    <ClInclude Include="..\..\ext\tgutils.h" />
+    <ClInclude Include="..\..\ext\to_py.h" />
+    <ClInclude Include="..\..\ext\to_py_numpy.hpp" />
+    <ClInclude Include="..\..\ext\server\wattribute_numpy.hpp" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\ext\api_util.cpp" />
+    <ClCompile Include="..\..\ext\archive_event_info.cpp" />
+    <ClCompile Include="..\..\ext\server\attr.cpp" />
+    <ClCompile Include="..\..\ext\attr_conf_event_data.cpp" />
+    <ClCompile Include="..\..\ext\server\attribute.cpp" />
+    <ClCompile Include="..\..\ext\server\auto_monitor.cpp" />
+    <ClCompile Include="..\..\ext\attribute_alarm_info.cpp" />
+    <ClCompile Include="..\..\ext\attribute_dimension.cpp" />
+    <ClCompile Include="..\..\ext\attribute_event_info.cpp" />
+    <ClCompile Include="..\..\ext\attribute_info.cpp" />
+    <ClCompile Include="..\..\ext\attribute_info_ex.cpp" />
+    <ClCompile Include="..\..\ext\attribute_proxy.cpp" />
+    <ClCompile Include="..\..\ext\base_types.cpp" />
+    <ClCompile Include="..\..\ext\callback.cpp" />
+    <ClCompile Include="..\..\ext\change_event_info.cpp" />
+    <ClCompile Include="..\..\ext\server\command.cpp" />
+    <ClCompile Include="..\..\ext\command_info.cpp" />
+    <ClCompile Include="..\..\ext\connection.cpp" />
+    <ClCompile Include="..\..\ext\constants.cpp" />
+    <ClCompile Include="..\..\ext\data_ready_event_data.cpp" />
+    <ClCompile Include="..\..\ext\database.cpp" />
+    <ClCompile Include="..\..\ext\db.cpp" />
+    <ClCompile Include="..\..\ext\dev_command_info.cpp" />
+    <ClCompile Include="..\..\ext\dev_error.cpp" />
+    <ClCompile Include="..\..\ext\device_attribute.cpp" />
+    <ClCompile Include="..\..\ext\device_attribute_config.cpp" />
+    <ClCompile Include="..\..\ext\device_attribute_history.cpp" />
+    <ClCompile Include="..\..\ext\server\device_class.cpp" />
+    <ClCompile Include="..\..\ext\device_data.cpp" />
+    <ClCompile Include="..\..\ext\device_data_history.cpp" />
+    <ClCompile Include="..\..\ext\server\device_impl.cpp" />
+    <ClCompile Include="..\..\ext\device_info.cpp" />
+    <ClCompile Include="..\..\ext\device_pipe.cpp" />
+    <ClCompile Include="..\..\ext\device_proxy.cpp" />
+    <ClCompile Include="..\..\ext\server\dserver.cpp" />
+    <ClCompile Include="..\..\ext\server\encoded_attribute.cpp" />
+    <ClCompile Include="..\..\ext\enums.cpp" />
+    <ClCompile Include="..\..\ext\event_data.cpp" />
+    <ClCompile Include="..\..\ext\exception.cpp" />
+    <ClCompile Include="..\..\ext\from_py.cpp" />
+    <ClCompile Include="..\..\ext\group.cpp" />
+    <ClCompile Include="..\..\ext\group_reply.cpp" />
+    <ClCompile Include="..\..\ext\group_reply_list.cpp" />
+    <ClCompile Include="..\..\ext\locker_info.cpp" />
+    <ClCompile Include="..\..\ext\locking_thread.cpp" />
+    <ClCompile Include="..\..\ext\server\log4tango.cpp" />
+    <ClCompile Include="..\..\ext\server\multi_attribute.cpp" />
+    <ClCompile Include="..\..\ext\server\multi_class_attribute.cpp" />
+    <ClCompile Include="..\..\ext\periodic_event_info.cpp" />
+    <ClCompile Include="..\..\ext\server\pipe.cpp" />
+    <ClCompile Include="..\..\ext\pipe_info.cpp" />
+    <ClCompile Include="..\..\ext\poll_device.cpp" />
+    <ClCompile Include="..\..\ext\precompiled_header.cpp" />
+    <ClCompile Include="..\..\ext\pytango.cpp" />
+    <ClCompile Include="..\..\ext\pytgutils.cpp" />
+    <ClCompile Include="..\..\ext\pyutils.cpp" />
+    <ClCompile Include="..\..\ext\server\subdev.cpp" />
+    <ClCompile Include="..\..\ext\server\tango_util.cpp" />
+    <ClCompile Include="..\..\ext\time_val.cpp" />
+    <ClCompile Include="..\..\ext\to_py.cpp" />
+    <ClCompile Include="..\..\ext\server\user_default_attr_prop.cpp" />
+    <ClCompile Include="..\..\ext\server\user_default_pipe_prop.cpp" />
+    <ClCompile Include="..\..\ext\version.cpp" />
+    <ClCompile Include="..\..\ext\server\wattribute.cpp" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="..\..\winsetup.py" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
\ No newline at end of file
diff --git a/win/PyTango_VS14/PyTango.vcxproj.filters b/win/PyTango_VS14/PyTango.vcxproj.filters
new file mode 100644
index 0000000..27940df
--- /dev/null
+++ b/win/PyTango_VS14/PyTango.vcxproj.filters
@@ -0,0 +1,284 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="Header Files">
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+      <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+    </Filter>
+    <Filter Include="Source Files">
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\..\ext\server\attr.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\ext\server\attribute.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\ext\base_types_numpy.hpp">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\ext\callback.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\ext\server\command.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\ext\defs.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\ext\device_attribute.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\ext\device_attribute_numpy.hpp">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\ext\server\device_class.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\ext\server\device_impl.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\ext\device_pipe.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\ext\exception.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\ext\fast_from_py.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\ext\fast_from_py_numpy.hpp">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\ext\from_py.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\ext\pipe.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\ext\precompiled_header.hpp">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\ext\pytgutils.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\ext\pyutils.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\ext\tango_numpy.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\ext\tgutils.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\ext\to_py.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\ext\to_py_numpy.hpp">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\ext\server\wattribute_numpy.hpp">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\ext\api_util.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\archive_event_info.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\server\attr.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\attr_conf_event_data.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\server\attribute.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\server\auto_monitor.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\attribute_alarm_info.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\attribute_dimension.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\attribute_event_info.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\attribute_info.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\attribute_info_ex.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\attribute_proxy.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\base_types.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\callback.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\change_event_info.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\server\command.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\command_info.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\connection.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\constants.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\data_ready_event_data.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\database.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\db.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\dev_command_info.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\dev_error.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\device_attribute.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\device_attribute_config.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\device_attribute_history.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\server\device_class.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\device_data.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\device_data_history.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\server\device_impl.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\device_info.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\device_pipe.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\device_proxy.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\server\dserver.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\server\encoded_attribute.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\enums.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\event_data.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\exception.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\from_py.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\group.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\group_reply.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\group_reply_list.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\locker_info.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\locking_thread.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\server\log4tango.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\server\multi_attribute.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\server\multi_class_attribute.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\periodic_event_info.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\server\pipe.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\pipe_info.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\poll_device.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\precompiled_header.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\pytango.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\pytgutils.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\pyutils.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\server\subdev.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\server\tango_util.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\time_val.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\to_py.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\server\user_default_attr_prop.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\server\user_default_pipe_prop.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\version.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\server\wattribute.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="..\..\winsetup.py" />
+  </ItemGroup>
+</Project>
\ No newline at end of file
diff --git a/win/PyTango_VS8/PyTango.sln b/win/PyTango_VS8/PyTango.sln
new file mode 100644
index 0000000..ab81c64
--- /dev/null
+++ b/win/PyTango_VS8/PyTango.sln
@@ -0,0 +1,76 @@
+
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PyTango", "PyTango.vcproj", "{764A5ECE-11AE-4363-9A1C-573972A1BADD}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Test01", "..\Test01\Test01.vcproj", "{43864AA2-4DB3-4E0B-9EA5-85800E17AA59}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Win32 = Debug|Win32
+		Debug|x64 = Debug|x64
+		Release_Py26_boost141_static|Win32 = Release_Py26_boost141_static|Win32
+		Release_Py26_boost141_static|x64 = Release_Py26_boost141_static|x64
+		Release_Py26_boost141|Win32 = Release_Py26_boost141|Win32
+		Release_Py26_boost141|x64 = Release_Py26_boost141|x64
+		Release_Py27_boost1461|Win32 = Release_Py27_boost1461|Win32
+		Release_Py27_boost1461|x64 = Release_Py27_boost1461|x64
+		Release_Py27_boost147_static|Win32 = Release_Py27_boost147_static|Win32
+		Release_Py27_boost147_static|x64 = Release_Py27_boost147_static|x64
+		Release_Py27_boost147|Win32 = Release_Py27_boost147|Win32
+		Release_Py27_boost147|x64 = Release_Py27_boost147|x64
+		Release|Win32 = Release|Win32
+		Release|x64 = Release|x64
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.Debug|Win32.ActiveCfg = Release_Py27_boost147_static|x64
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.Debug|x64.ActiveCfg = Release_Py27_boost147_static|x64
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.Debug|x64.Build.0 = Release_Py27_boost147_static|x64
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.Release_Py26_boost141_static|Win32.ActiveCfg = Release_Py27_boost147_static|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.Release_Py26_boost141_static|Win32.Build.0 = Release_Py27_boost147_static|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.Release_Py26_boost141_static|x64.ActiveCfg = Release_Py26_boost141_static|x64
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.Release_Py26_boost141_static|x64.Build.0 = Release_Py26_boost141_static|x64
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.Release_Py26_boost141|Win32.ActiveCfg = Release_Py26_boost141|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.Release_Py26_boost141|Win32.Build.0 = Release_Py26_boost141|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.Release_Py26_boost141|x64.ActiveCfg = Release_Py26_boost141|x64
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.Release_Py26_boost141|x64.Build.0 = Release_Py26_boost141|x64
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.Release_Py27_boost1461|Win32.ActiveCfg = Release_Py27_boost1461|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.Release_Py27_boost1461|Win32.Build.0 = Release_Py27_boost1461|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.Release_Py27_boost1461|x64.ActiveCfg = Release_Py27_boost1461|x64
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.Release_Py27_boost1461|x64.Build.0 = Release_Py27_boost1461|x64
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.Release_Py27_boost147_static|Win32.ActiveCfg = Release_Py27_boost147_static|x64
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.Release_Py27_boost147_static|x64.ActiveCfg = Release_Py27_boost147_static|x64
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.Release_Py27_boost147_static|x64.Build.0 = Release_Py27_boost147_static|x64
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.Release_Py27_boost147|Win32.ActiveCfg = Release_Py27_boost147|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.Release_Py27_boost147|Win32.Build.0 = Release_Py27_boost147|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.Release_Py27_boost147|x64.ActiveCfg = Release_Py27_boost147|x64
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.Release_Py27_boost147|x64.Build.0 = Release_Py27_boost147|x64
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.Release|Win32.ActiveCfg = Release_Py27_boost147_static|x64
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.Release|x64.ActiveCfg = Release_Py27_boost147_static|x64
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.Release|x64.Build.0 = Release_Py27_boost147_static|x64
+		{43864AA2-4DB3-4E0B-9EA5-85800E17AA59}.Debug|Win32.ActiveCfg = Debug|Win32
+		{43864AA2-4DB3-4E0B-9EA5-85800E17AA59}.Debug|Win32.Build.0 = Debug|Win32
+		{43864AA2-4DB3-4E0B-9EA5-85800E17AA59}.Debug|x64.ActiveCfg = Debug|Win32
+		{43864AA2-4DB3-4E0B-9EA5-85800E17AA59}.Release_Py26_boost141_static|Win32.ActiveCfg = Release_Py26_boost141_static|Win32
+		{43864AA2-4DB3-4E0B-9EA5-85800E17AA59}.Release_Py26_boost141_static|Win32.Build.0 = Release_Py26_boost141_static|Win32
+		{43864AA2-4DB3-4E0B-9EA5-85800E17AA59}.Release_Py26_boost141_static|x64.ActiveCfg = Release_Py26_boost141_static|Win32
+		{43864AA2-4DB3-4E0B-9EA5-85800E17AA59}.Release_Py26_boost141|Win32.ActiveCfg = Release|Win32
+		{43864AA2-4DB3-4E0B-9EA5-85800E17AA59}.Release_Py26_boost141|Win32.Build.0 = Release|Win32
+		{43864AA2-4DB3-4E0B-9EA5-85800E17AA59}.Release_Py26_boost141|x64.ActiveCfg = Release|Win32
+		{43864AA2-4DB3-4E0B-9EA5-85800E17AA59}.Release_Py27_boost1461|Win32.ActiveCfg = Release|Win32
+		{43864AA2-4DB3-4E0B-9EA5-85800E17AA59}.Release_Py27_boost1461|Win32.Build.0 = Release|Win32
+		{43864AA2-4DB3-4E0B-9EA5-85800E17AA59}.Release_Py27_boost1461|x64.ActiveCfg = Release|Win32
+		{43864AA2-4DB3-4E0B-9EA5-85800E17AA59}.Release_Py27_boost147_static|Win32.ActiveCfg = Release|Win32
+		{43864AA2-4DB3-4E0B-9EA5-85800E17AA59}.Release_Py27_boost147_static|Win32.Build.0 = Release|Win32
+		{43864AA2-4DB3-4E0B-9EA5-85800E17AA59}.Release_Py27_boost147_static|x64.ActiveCfg = Release|Win32
+		{43864AA2-4DB3-4E0B-9EA5-85800E17AA59}.Release_Py27_boost147|Win32.ActiveCfg = Release_Py27_boost147|Win32
+		{43864AA2-4DB3-4E0B-9EA5-85800E17AA59}.Release_Py27_boost147|Win32.Build.0 = Release_Py27_boost147|Win32
+		{43864AA2-4DB3-4E0B-9EA5-85800E17AA59}.Release_Py27_boost147|x64.ActiveCfg = Release_Py27_boost147|Win32
+		{43864AA2-4DB3-4E0B-9EA5-85800E17AA59}.Release|Win32.ActiveCfg = Release|Win32
+		{43864AA2-4DB3-4E0B-9EA5-85800E17AA59}.Release|Win32.Build.0 = Release|Win32
+		{43864AA2-4DB3-4E0B-9EA5-85800E17AA59}.Release|x64.ActiveCfg = Release|Win32
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
diff --git a/win/PyTango_VS8/PyTango.vcproj b/win/PyTango_VS8/PyTango.vcproj
new file mode 100644
index 0000000..c8f9e68
--- /dev/null
+++ b/win/PyTango_VS8/PyTango.vcproj
@@ -0,0 +1,1293 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="PyTango"
+	ProjectGUID="{764A5ECE-11AE-4363-9A1C-573972A1BADD}"
+	RootNamespace="PyTango_VS8"
+	Keyword="Win32Proj"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+		<Platform
+			Name="x64"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Release_Py26_boost141|Win32"
+			OutputDirectory="..\..\build\lib.$(PlatformName)-2.6\$(ProjectName)"
+			IntermediateDirectory="..\..\build\temp.$(PlatformName)\$(ConfigurationName)"
+			ConfigurationType="2"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions="-Zm200"
+				Optimization="3"
+				WholeProgramOptimization="false"
+				AdditionalIncludeDirectories="C:\Python26\include;"C:\Python26\Lib\site-packages\numpy\core\include";"C:\Program Files\tango\win32_vc8\win32_dll\include";"C:\Program Files\boost\boost_1_41";Z:\PyTangoWin\PyTango\src\server;Z:\PyTangoWin\PyTango\src"
+				PreprocessorDefinitions="WIN32;NDEBUG;LOG4TANGO_HAS_DLL;TANGO_HAS_DLL;BOOST_PYTHON_STATIC_LIB"
+				RuntimeLibrary="2"
+				BufferSecurityCheck="false"
+				UsePrecompiledHeader="1"
+				PrecompiledHeaderThrough="precompiled_header.hpp"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="false"
+				DebugInformationFormat="0"
+				CompileAs="0"
+				DisableSpecificWarnings="4005;4996;4250"
+				ErrorReporting="1"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				LinkLibraryDependencies="true"
+				AdditionalDependencies="tango.lib log4tango.lib omniORB414_rt.lib omniDynamic414_rt.lib omnithread34_rt.lib COS414_rt.lib"
+				OutputFile="$(OutDir)\_PyTango.pyd"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories="C:\Python26\libs;"C:\Program Files\tango\win32_vc8\win32_dll\lib";"C:\Program Files\boost\boost_1_41\lib""
+				GenerateDebugInformation="true"
+				ProgramDatabaseFile="$(IntDir)\$(TargetName).pdb"
+				SubSystem="2"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				LinkTimeCodeGeneration="0"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				Description="Starting setup.py bdist_msi"
+				CommandLine="c:\python26\python $(SolutionDir)\..\..\winsetup.py"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release_Py26_boost141|x64"
+			OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+			IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+			ConfigurationType="2"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions="-Zm200"
+				Optimization="3"
+				WholeProgramOptimization="false"
+				AdditionalIncludeDirectories=""C:\Python26\Lib\site-packages\numpy\core\include";"c:\Program Files\boost\boost_1_41";C:\Python26\include;"C:\Program Files\tango\win64_vc8\win64_dll\include";Z:\PyTangoWin\PyTango\src\server;Z:\PyTangoWin\PyTango\src"
+				PreprocessorDefinitions="WIN64;NDEBUG;LOG4TANGO_HAS_DLL;TANGO_HAS_DLL"
+				RuntimeLibrary="2"
+				BufferSecurityCheck="false"
+				UsePrecompiledHeader="1"
+				PrecompiledHeaderThrough="precompiled_header.hpp"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="false"
+				DebugInformationFormat="0"
+				CompileAs="0"
+				DisableSpecificWarnings="4005;4996;4250"
+				ErrorReporting="1"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="tango.lib log4tango.lib omniORB414_rt.lib omniDynamic414_rt.lib omnithread34_rt.lib COS414_rt.lib"
+				OutputFile="$(OutDir)\_PyTango.pyd"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories="C:\Python26\libs;"C:\Program Files\tango\win64_vc8\win64_dll\lib";"C:\Program Files\boost\boost_1_41\lib""
+				GenerateDebugInformation="true"
+				ProgramDatabaseFile="$(IntDir)\$(TargetName).pdb"
+				SubSystem="2"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				LinkTimeCodeGeneration="0"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				Description="Starting setup.py bdist_msi"
+				CommandLine="c:\python26\python $(SolutionDir)\..\..\winsetup.py"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release_Py27_boost147_static|Win32"
+			OutputDirectory="..\..\build\lib.$(PlatformName)-2.7\$(ProjectName)"
+			IntermediateDirectory="..\..\build\temp.$(PlatformName)\$(ConfigurationName)"
+			ConfigurationType="2"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions="-Zm200"
+				Optimization="3"
+				WholeProgramOptimization="false"
+				AdditionalIncludeDirectories="C:\Python27\include;"C:\Python27\Lib\site-packages\numpy\core\include";"c:\Program Files\boost\boost_1_47";"C:\Program Files\tango\win32_vc8\win32\include";Z:\PyTangoWin\PyTango\src;Z:\PyTangoWin\PyTango\src\server"
+				PreprocessorDefinitions="WIN32;_USRDLL;_WINDLL;NDEBUG;BOOST_PYTHON_STATIC_LIB;_WINSTATIC"
+				RuntimeLibrary="2"
+				BufferSecurityCheck="false"
+				UsePrecompiledHeader="1"
+				PrecompiledHeaderThrough="precompiled_header.hpp"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="false"
+				DebugInformationFormat="0"
+				CompileAs="0"
+				DisableSpecificWarnings="4005;4996;4250"
+				ErrorReporting="1"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="tango.lib log4tango.lib mswsock.lib ws2_32.lib comctl32.lib"
+				OutputFile="$(OutDir)\_PyTango.pyd"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories="C:\Python27\libs;"C:\Program Files\tango\win32_vc8\win32\lib";"C:\Program Files\boost\boost_1_47\lib""
+				GenerateDebugInformation="true"
+				ProgramDatabaseFile="$(IntDir)\$(TargetName).pdb"
+				SubSystem="2"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				LinkTimeCodeGeneration="0"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				Description="Starting setup.py bdist_msi"
+				CommandLine="c:\python27\python $(SolutionDir)\..\..\winsetup.py"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release_Py27_boost147_static|x64"
+			OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+			IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+			ConfigurationType="2"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions="-Zm200"
+				Optimization="3"
+				WholeProgramOptimization="false"
+				AdditionalIncludeDirectories=""C:\Python26\Lib\site-packages\numpy\core\include";"c:\Program Files\boost\boost_1_41";C:\Python26\include;"C:\Program Files\tango\win64_vc8\win64_dll\include";Z:\PyTangoWin\PyTango\src\server;Z:\PyTangoWin\PyTango\src"
+				PreprocessorDefinitions="WIN64;NDEBUG;LOG4TANGO_HAS_DLL;TANGO_HAS_DLL"
+				RuntimeLibrary="2"
+				BufferSecurityCheck="false"
+				UsePrecompiledHeader="1"
+				PrecompiledHeaderThrough="precompiled_header.hpp"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="false"
+				DebugInformationFormat="0"
+				CompileAs="0"
+				DisableSpecificWarnings="4005;4996;4250"
+				ErrorReporting="1"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="tango.lib log4tango.lib omniORB414_rt.lib omniDynamic414_rt.lib omnithread34_rt.lib COS414_rt.lib"
+				OutputFile="$(OutDir)\_PyTango.pyd"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories="C:\Python26\libs;"C:\Program Files\tango\win64_vc8\win64_dll\lib";"C:\Program Files\boost\boost_1_41\lib""
+				GenerateDebugInformation="true"
+				ProgramDatabaseFile="$(IntDir)\$(TargetName).pdb"
+				SubSystem="2"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				LinkTimeCodeGeneration="0"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				Description="Starting setup.py bdist_msi"
+				CommandLine="c:\python26\python $(SolutionDir)\..\..\winsetup.py"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release_Py27_boost1461|Win32"
+			OutputDirectory="..\..\build\lib.$(PlatformName)-2.7\$(ProjectName)"
+			IntermediateDirectory="..\..\build\temp.$(PlatformName)\$(ConfigurationName)"
+			ConfigurationType="2"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions="-Zm200"
+				Optimization="3"
+				WholeProgramOptimization="false"
+				AdditionalIncludeDirectories="C:\Python27\include;"C:\Python27\Lib\site-packages\numpy\core\include";"c:\Program Files\boost\boost_1_46_1";"C:\Program Files\tango\win32_vc8\win32_dll\include";Z:\PyTangoWin\PyTango\src\server;Z:\PyTangoWin\PyTango\src"
+				PreprocessorDefinitions="WIN32;NDEBUG;LOG4TANGO_HAS_DLL;TANGO_HAS_DLL;BOOST_PYTHON_STATIC_LIB"
+				RuntimeLibrary="2"
+				BufferSecurityCheck="false"
+				UsePrecompiledHeader="1"
+				PrecompiledHeaderThrough="precompiled_header.hpp"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="false"
+				DebugInformationFormat="0"
+				CompileAs="0"
+				DisableSpecificWarnings="4005;4996;4250"
+				ErrorReporting="1"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="tango.lib log4tango.lib omniORB414_rt.lib omniDynamic414_rt.lib omnithread34_rt.lib COS414_rt.lib"
+				OutputFile="$(OutDir)\_PyTango.pyd"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories="C:\Python27\libs;"C:\Program Files\tango\win32_vc8\win32_dll\lib";"C:\Program Files\boost\boost_1_46_1\lib""
+				GenerateDebugInformation="true"
+				ProgramDatabaseFile="$(IntDir)\$(TargetName).pdb"
+				SubSystem="2"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				LinkTimeCodeGeneration="0"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				Description="Starting setup.py bdist_msi"
+				CommandLine="c:\python27\python $(SolutionDir)\..\..\winsetup.py"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release_Py27_boost1461|x64"
+			OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+			IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+			ConfigurationType="2"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions="-Zm200"
+				Optimization="3"
+				WholeProgramOptimization="false"
+				AdditionalIncludeDirectories=""C:\Python26\Lib\site-packages\numpy\core\include";"c:\Program Files\boost\boost_1_41";C:\Python26\include;"C:\Program Files\tango\win64_vc8\win64_dll\include";Z:\PyTangoWin\PyTango\src\server;Z:\PyTangoWin\PyTango\src"
+				PreprocessorDefinitions="WIN64;NDEBUG;LOG4TANGO_HAS_DLL;TANGO_HAS_DLL"
+				RuntimeLibrary="2"
+				BufferSecurityCheck="false"
+				UsePrecompiledHeader="1"
+				PrecompiledHeaderThrough="precompiled_header.hpp"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="false"
+				DebugInformationFormat="0"
+				CompileAs="0"
+				DisableSpecificWarnings="4005;4996;4250"
+				ErrorReporting="1"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="tango.lib log4tango.lib omniORB414_rt.lib omniDynamic414_rt.lib omnithread34_rt.lib COS414_rt.lib"
+				OutputFile="$(OutDir)\_PyTango.pyd"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories="C:\Python26\libs;"C:\Program Files\tango\win64_vc8\win64_dll\lib";"C:\Program Files\boost\boost_1_41\lib""
+				GenerateDebugInformation="true"
+				ProgramDatabaseFile="$(IntDir)\$(TargetName).pdb"
+				SubSystem="2"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				LinkTimeCodeGeneration="0"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				Description="Starting setup.py bdist_msi"
+				CommandLine="c:\python26\python $(SolutionDir)\..\..\winsetup.py"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release_Py26_boost141_static|Win32"
+			OutputDirectory="..\..\build\lib.$(PlatformName)-2.6\$(ProjectName)"
+			IntermediateDirectory="..\..\build\temp.$(PlatformName)\$(ConfigurationName)"
+			ConfigurationType="2"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions="-Zm200"
+				Optimization="3"
+				WholeProgramOptimization="false"
+				AdditionalIncludeDirectories="C:\Python26\include;"C:\Python26\Lib\site-packages\numpy\core\include";"C:\Program Files\boost\boost_1_44";"C:\Program Files\tango\win32_vc8\win32\include";Z:\PyTangoWin\PyTango\src;Z:\PyTangoWin\PyTango\src\server"
+				PreprocessorDefinitions="WIN32;_USRDLL;_WINDLL;NDEBUG;BOOST_PYTHON_STATIC_LIB;_WINSTATIC"
+				RuntimeLibrary="2"
+				BufferSecurityCheck="false"
+				UsePrecompiledHeader="1"
+				PrecompiledHeaderThrough="precompiled_header.hpp"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="false"
+				DebugInformationFormat="0"
+				CompileAs="0"
+				DisableSpecificWarnings="4005;4996;4250"
+				ErrorReporting="1"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				LinkLibraryDependencies="true"
+				AdditionalOptions="/VERBOSE:LIB /FORCE:MULTIPLE"
+				AdditionalDependencies="tango.lib log4tango.lib mswsock.lib ws2_32.lib comctl32.lib"
+				OutputFile="$(OutDir)\_PyTango.pyd"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories="C:\Python26\libs;"C:\Program Files\tango\win32_vc8\win32\lib";"C:\Program Files\boost\boost_1_44\lib""
+				IgnoreAllDefaultLibraries="false"
+				IgnoreDefaultLibraryNames=""
+				GenerateDebugInformation="true"
+				ProgramDatabaseFile="$(IntDir)\$(TargetName).pdb"
+				SubSystem="2"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				LinkTimeCodeGeneration="0"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				Description="Starting setup.py bdist_msi"
+				CommandLine="c:\python26\python $(SolutionDir)\..\..\winsetup.py"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release_Py26_boost141_static|x64"
+			OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+			IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+			ConfigurationType="2"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions="-Zm200"
+				Optimization="3"
+				WholeProgramOptimization="false"
+				AdditionalIncludeDirectories=""C:\Python26\Lib\site-packages\numpy\core\include";"c:\Program Files\boost\boost_1_41";C:\Python26\include;"C:\Program Files\tango\win64_vc8\win64_dll\include";Z:\PyTangoWin\PyTango\src\server;Z:\PyTangoWin\PyTango\src"
+				PreprocessorDefinitions="WIN64;NDEBUG;LOG4TANGO_HAS_DLL;TANGO_HAS_DLL"
+				RuntimeLibrary="2"
+				BufferSecurityCheck="false"
+				UsePrecompiledHeader="1"
+				PrecompiledHeaderThrough="precompiled_header.hpp"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="false"
+				DebugInformationFormat="0"
+				CompileAs="0"
+				DisableSpecificWarnings="4005;4996;4250"
+				ErrorReporting="1"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="tango.lib log4tango.lib omniORB414_rt.lib omniDynamic414_rt.lib omnithread34_rt.lib COS414_rt.lib"
+				OutputFile="$(OutDir)\_PyTango.pyd"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories="C:\Python26\libs;"C:\Program Files\tango\win64_vc8\win64_dll\lib";"C:\Program Files\boost\boost_1_41\lib""
+				GenerateDebugInformation="true"
+				ProgramDatabaseFile="$(IntDir)\$(TargetName).pdb"
+				SubSystem="2"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				LinkTimeCodeGeneration="0"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				Description="Starting setup.py bdist_msi"
+				CommandLine="c:\python26\python $(SolutionDir)\..\..\winsetup.py"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release_Py27_boost147|Win32"
+			OutputDirectory="..\..\build\lib.$(PlatformName)-2.7\$(ProjectName)"
+			IntermediateDirectory="..\..\build\temp.$(PlatformName)\$(ConfigurationName)"
+			ConfigurationType="2"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions="-Zm200"
+				Optimization="3"
+				WholeProgramOptimization="false"
+				AdditionalIncludeDirectories="C:\Python27\include;"C:\Python27\Lib\site-packages\numpy\core\include";"C:\Program Files\tango\win32_vc8\win32_dll\include";"C:\Program Files\boost\boost_1_47";Z:\PyTangoWin\PyTango\src\server;Z:\PyTangoWin\PyTango\src"
+				PreprocessorDefinitions="WIN32;NDEBUG;LOG4TANGO_HAS_DLL;TANGO_HAS_DLL;BOOST_PYTHON_STATIC_LIB"
+				RuntimeLibrary="2"
+				BufferSecurityCheck="false"
+				UsePrecompiledHeader="1"
+				PrecompiledHeaderThrough="precompiled_header.hpp"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="false"
+				DebugInformationFormat="0"
+				CompileAs="0"
+				DisableSpecificWarnings="4005;4996;4250"
+				ErrorReporting="1"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				LinkLibraryDependencies="true"
+				AdditionalDependencies="tango.lib log4tango.lib omniORB414_rt.lib omniDynamic414_rt.lib omnithread34_rt.lib COS414_rt.lib"
+				OutputFile="$(OutDir)\_PyTango.pyd"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories="C:\Python27\libs;"C:\Program Files\tango\win32_vc8\win32_dll\lib";"C:\Program Files\boost\boost_1_47\lib""
+				GenerateDebugInformation="true"
+				ProgramDatabaseFile="$(IntDir)\$(TargetName).pdb"
+				SubSystem="2"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				LinkTimeCodeGeneration="0"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				Description="Starting setup.py bdist_msi"
+				CommandLine="c:\python27\python $(SolutionDir)\..\..\winsetup.py"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release_Py27_boost147|x64"
+			OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+			IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+			ConfigurationType="2"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions="-Zm200"
+				Optimization="3"
+				WholeProgramOptimization="false"
+				AdditionalIncludeDirectories=""C:\Python26\Lib\site-packages\numpy\core\include";"c:\Program Files\boost\boost_1_41";C:\Python26\include;"C:\Program Files\tango\win64_vc8\win64_dll\include";Z:\PyTangoWin\PyTango\src\server;Z:\PyTangoWin\PyTango\src"
+				PreprocessorDefinitions="WIN64;NDEBUG;LOG4TANGO_HAS_DLL;TANGO_HAS_DLL"
+				RuntimeLibrary="2"
+				BufferSecurityCheck="false"
+				UsePrecompiledHeader="1"
+				PrecompiledHeaderThrough="precompiled_header.hpp"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="false"
+				DebugInformationFormat="0"
+				CompileAs="0"
+				DisableSpecificWarnings="4005;4996;4250"
+				ErrorReporting="1"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="tango.lib log4tango.lib omniORB414_rt.lib omniDynamic414_rt.lib omnithread34_rt.lib COS414_rt.lib"
+				OutputFile="$(OutDir)\_PyTango.pyd"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories="C:\Python26\libs;"C:\Program Files\tango\win64_vc8\win64_dll\lib";"C:\Program Files\boost\boost_1_41\lib""
+				GenerateDebugInformation="true"
+				ProgramDatabaseFile="$(IntDir)\$(TargetName).pdb"
+				SubSystem="2"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				LinkTimeCodeGeneration="0"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				Description="Starting setup.py bdist_msi"
+				CommandLine="c:\python26\python $(SolutionDir)\..\..\winsetup.py"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl;inc;xsd"
+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+			>
+			<File
+				RelativePath="..\..\src\server\attr.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\server\attribute.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\base_types_numpy.hpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\callback.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\server\command.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\defs.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\device_attribute.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\device_attribute_numpy.hpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\server\device_class.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\server\device_impl.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\exception.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\fast_from_py.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\fast_from_py_numpy.hpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\from_py.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\precompiled_header.hpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\pytgutils.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\pyutils.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\tango_numpy.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\tgutils.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\to_py.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\to_py_numpy.hpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\server\wattribute_numpy.hpp"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+			>
+			<File
+				RelativePath="..\..\src\api_util.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\archive_event_info.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\server\attr.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\attr_conf_event_data.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\server\attribute.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\attribute_alarm_info.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\attribute_dimension.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\attribute_event_info.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\attribute_info.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\attribute_info_ex.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\attribute_proxy.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\base_types.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\callback.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\change_event_info.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\server\command.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\command_info.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\connection.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\constants.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\data_ready_event_data.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\database.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\db.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\dev_command_info.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\dev_error.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\device_attribute.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\device_attribute_config.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\device_attribute_history.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\server\device_class.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\device_data.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\device_data_history.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\server\device_impl.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\device_info.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\device_proxy.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\server\dserver.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\server\encoded_attribute.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\enums.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\event_data.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\exception.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\from_py.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\group.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\group_element.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\group_reply.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\group_reply_list.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\locker_info.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\locking_thread.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\server\log4tango.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\server\multi_attribute.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\server\multi_class_attribute.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\periodic_event_info.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\poll_device.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\precompiled_header.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\pytango.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\pytgutils.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\pyutils.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\server\subdev.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\server\tango_util.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\time_val.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\to_py.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\server\user_default_attr_prop.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\version.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\server\wattribute.cpp"
+				>
+			</File>
+		</Filter>
+		<File
+			RelativePath="..\..\winsetup.py"
+			>
+		</File>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/win/PyTango_VS9/PyTango.sln b/win/PyTango_VS9/PyTango.sln
new file mode 100644
index 0000000..89f96ea
--- /dev/null
+++ b/win/PyTango_VS9/PyTango.sln
@@ -0,0 +1,158 @@
+
+Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual C++ Express 2008
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PyTango", "PyTango.vcproj", "{764A5ECE-11AE-4363-9A1C-573972A1BADD}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		py26_bopyshared_tangoshared_debug|Win32 = py26_bopyshared_tangoshared_debug|Win32
+		py26_bopyshared_tangoshared_debug|x64 = py26_bopyshared_tangoshared_debug|x64
+		py26_bopyshared_tangoshared_release|Win32 = py26_bopyshared_tangoshared_release|Win32
+		py26_bopyshared_tangoshared_release|x64 = py26_bopyshared_tangoshared_release|x64
+		py26_bopystatic_tangoshared_debug|Win32 = py26_bopystatic_tangoshared_debug|Win32
+		py26_bopystatic_tangoshared_debug|x64 = py26_bopystatic_tangoshared_debug|x64
+		py26_bopystatic_tangoshared_release|Win32 = py26_bopystatic_tangoshared_release|Win32
+		py26_bopystatic_tangoshared_release|x64 = py26_bopystatic_tangoshared_release|x64
+		py26_bopystatic_tangostatic_debug|Win32 = py26_bopystatic_tangostatic_debug|Win32
+		py26_bopystatic_tangostatic_debug|x64 = py26_bopystatic_tangostatic_debug|x64
+		py26_bopystatic_tangostatic_release|Win32 = py26_bopystatic_tangostatic_release|Win32
+		py26_bopystatic_tangostatic_release|x64 = py26_bopystatic_tangostatic_release|x64
+		py27_bopyshared_tangoshared_debug|Win32 = py27_bopyshared_tangoshared_debug|Win32
+		py27_bopyshared_tangoshared_debug|x64 = py27_bopyshared_tangoshared_debug|x64
+		py27_bopyshared_tangoshared_release|Win32 = py27_bopyshared_tangoshared_release|Win32
+		py27_bopyshared_tangoshared_release|x64 = py27_bopyshared_tangoshared_release|x64
+		py27_bopystatic_tangoshared_debug|Win32 = py27_bopystatic_tangoshared_debug|Win32
+		py27_bopystatic_tangoshared_debug|x64 = py27_bopystatic_tangoshared_debug|x64
+		py27_bopystatic_tangoshared_release|Win32 = py27_bopystatic_tangoshared_release|Win32
+		py27_bopystatic_tangoshared_release|x64 = py27_bopystatic_tangoshared_release|x64
+		py27_bopystatic_tangostatic_debug|Win32 = py27_bopystatic_tangostatic_debug|Win32
+		py27_bopystatic_tangostatic_debug|x64 = py27_bopystatic_tangostatic_debug|x64
+		py27_bopystatic_tangostatic_release|Win32 = py27_bopystatic_tangostatic_release|Win32
+		py27_bopystatic_tangostatic_release|x64 = py27_bopystatic_tangostatic_release|x64
+		py31_bopyshared_tangoshared_debug|Win32 = py31_bopyshared_tangoshared_debug|Win32
+		py31_bopyshared_tangoshared_debug|x64 = py31_bopyshared_tangoshared_debug|x64
+		py31_bopyshared_tangoshared_release|Win32 = py31_bopyshared_tangoshared_release|Win32
+		py31_bopyshared_tangoshared_release|x64 = py31_bopyshared_tangoshared_release|x64
+		py31_bopystatic_tangoshared_debug|Win32 = py31_bopystatic_tangoshared_debug|Win32
+		py31_bopystatic_tangoshared_debug|x64 = py31_bopystatic_tangoshared_debug|x64
+		py31_bopystatic_tangoshared_release|Win32 = py31_bopystatic_tangoshared_release|Win32
+		py31_bopystatic_tangoshared_release|x64 = py31_bopystatic_tangoshared_release|x64
+		py31_bopystatic_tangostatic_debug|Win32 = py31_bopystatic_tangostatic_debug|Win32
+		py31_bopystatic_tangostatic_debug|x64 = py31_bopystatic_tangostatic_debug|x64
+		py31_bopystatic_tangostatic_release|Win32 = py31_bopystatic_tangostatic_release|Win32
+		py31_bopystatic_tangostatic_release|x64 = py31_bopystatic_tangostatic_release|x64
+		py32_bopyshared_tangoshared_debug|Win32 = py32_bopyshared_tangoshared_debug|Win32
+		py32_bopyshared_tangoshared_debug|x64 = py32_bopyshared_tangoshared_debug|x64
+		py32_bopyshared_tangoshared_release|Win32 = py32_bopyshared_tangoshared_release|Win32
+		py32_bopyshared_tangoshared_release|x64 = py32_bopyshared_tangoshared_release|x64
+		py32_bopystatic_tangoshared_debug|Win32 = py32_bopystatic_tangoshared_debug|Win32
+		py32_bopystatic_tangoshared_debug|x64 = py32_bopystatic_tangoshared_debug|x64
+		py32_bopystatic_tangoshared_release|Win32 = py32_bopystatic_tangoshared_release|Win32
+		py32_bopystatic_tangoshared_release|x64 = py32_bopystatic_tangoshared_release|x64
+		py32_bopystatic_tangostatic_debug|Win32 = py32_bopystatic_tangostatic_debug|Win32
+		py32_bopystatic_tangostatic_debug|x64 = py32_bopystatic_tangostatic_debug|x64
+		py32_bopystatic_tangostatic_release|Win32 = py32_bopystatic_tangostatic_release|Win32
+		py32_bopystatic_tangostatic_release|x64 = py32_bopystatic_tangostatic_release|x64
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py26_bopyshared_tangoshared_debug|Win32.ActiveCfg = py26_bopyshared_tangoshared_debug|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py26_bopyshared_tangoshared_debug|Win32.Build.0 = py26_bopyshared_tangoshared_debug|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py26_bopyshared_tangoshared_debug|x64.ActiveCfg = py26_bopyshared_tangoshared_debug|x64
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py26_bopyshared_tangoshared_debug|x64.Build.0 = py26_bopyshared_tangoshared_debug|x64
+		{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|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_debug|Win32.ActiveCfg = py26_bopystatic_tangoshared_debug|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py26_bopystatic_tangoshared_debug|Win32.Build.0 = py26_bopystatic_tangoshared_debug|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py26_bopystatic_tangoshared_debug|x64.ActiveCfg = py26_bopystatic_tangoshared_debug|x64
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py26_bopystatic_tangoshared_debug|x64.Build.0 = py26_bopystatic_tangoshared_debug|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|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_debug|Win32.ActiveCfg = py26_bopystatic_tangostatic_debug|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py26_bopystatic_tangostatic_debug|Win32.Build.0 = py26_bopystatic_tangostatic_debug|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py26_bopystatic_tangostatic_debug|x64.ActiveCfg = py26_bopystatic_tangostatic_debug|x64
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py26_bopystatic_tangostatic_debug|x64.Build.0 = py26_bopystatic_tangostatic_debug|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|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_debug|Win32.ActiveCfg = py27_bopyshared_tangoshared_debug|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py27_bopyshared_tangoshared_debug|Win32.Build.0 = py27_bopyshared_tangoshared_debug|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py27_bopyshared_tangoshared_debug|x64.ActiveCfg = py27_bopyshared_tangoshared_debug|x64
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py27_bopyshared_tangoshared_debug|x64.Build.0 = py27_bopyshared_tangoshared_debug|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|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_debug|Win32.ActiveCfg = py27_bopystatic_tangoshared_debug|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py27_bopystatic_tangoshared_debug|Win32.Build.0 = py27_bopystatic_tangoshared_debug|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py27_bopystatic_tangoshared_debug|x64.ActiveCfg = py27_bopystatic_tangoshared_debug|x64
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py27_bopystatic_tangoshared_debug|x64.Build.0 = py27_bopystatic_tangoshared_debug|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|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_debug|Win32.ActiveCfg = py27_bopystatic_tangostatic_debug|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py27_bopystatic_tangostatic_debug|Win32.Build.0 = py27_bopystatic_tangostatic_debug|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py27_bopystatic_tangostatic_debug|x64.ActiveCfg = py27_bopystatic_tangostatic_debug|x64
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py27_bopystatic_tangostatic_debug|x64.Build.0 = py27_bopystatic_tangostatic_debug|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|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_debug|Win32.ActiveCfg = py31_bopyshared_tangoshared_debug|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py31_bopyshared_tangoshared_debug|Win32.Build.0 = py31_bopyshared_tangoshared_debug|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py31_bopyshared_tangoshared_debug|x64.ActiveCfg = py31_bopyshared_tangoshared_debug|x64
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py31_bopyshared_tangoshared_debug|x64.Build.0 = py31_bopyshared_tangoshared_debug|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|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_debug|Win32.ActiveCfg = py31_bopystatic_tangoshared_debug|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py31_bopystatic_tangoshared_debug|Win32.Build.0 = py31_bopystatic_tangoshared_debug|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py31_bopystatic_tangoshared_debug|x64.ActiveCfg = py31_bopystatic_tangoshared_debug|x64
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py31_bopystatic_tangoshared_debug|x64.Build.0 = py31_bopystatic_tangoshared_debug|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|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_debug|Win32.ActiveCfg = py31_bopystatic_tangostatic_debug|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py31_bopystatic_tangostatic_debug|Win32.Build.0 = py31_bopystatic_tangostatic_debug|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py31_bopystatic_tangostatic_debug|x64.ActiveCfg = py31_bopystatic_tangostatic_debug|x64
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py31_bopystatic_tangostatic_debug|x64.Build.0 = py31_bopystatic_tangostatic_debug|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|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_debug|Win32.ActiveCfg = py32_bopyshared_tangoshared_debug|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py32_bopyshared_tangoshared_debug|Win32.Build.0 = py32_bopyshared_tangoshared_debug|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py32_bopyshared_tangoshared_debug|x64.ActiveCfg = py32_bopyshared_tangoshared_debug|x64
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py32_bopyshared_tangoshared_debug|x64.Build.0 = py32_bopyshared_tangoshared_debug|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|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_debug|Win32.ActiveCfg = py32_bopystatic_tangoshared_debug|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py32_bopystatic_tangoshared_debug|Win32.Build.0 = py32_bopystatic_tangoshared_debug|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py32_bopystatic_tangoshared_debug|x64.ActiveCfg = py32_bopystatic_tangoshared_debug|x64
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py32_bopystatic_tangoshared_debug|x64.Build.0 = py32_bopystatic_tangoshared_debug|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|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_debug|Win32.ActiveCfg = py32_bopystatic_tangostatic_debug|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py32_bopystatic_tangostatic_debug|Win32.Build.0 = py32_bopystatic_tangostatic_debug|Win32
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py32_bopystatic_tangostatic_debug|x64.ActiveCfg = py32_bopystatic_tangostatic_debug|x64
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py32_bopystatic_tangostatic_debug|x64.Build.0 = py32_bopystatic_tangostatic_debug|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|x64
+		{764A5ECE-11AE-4363-9A1C-573972A1BADD}.py32_bopystatic_tangostatic_release|x64.Build.0 = py32_bopystatic_tangostatic_release|x64
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
diff --git a/win/PyTango_VS9/PyTango.vcproj b/win/PyTango_VS9/PyTango.vcproj
new file mode 100644
index 0000000..3d03518
--- /dev/null
+++ b/win/PyTango_VS9/PyTango.vcproj
@@ -0,0 +1,3751 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="9.00"
+	Name="PyTango"
+	ProjectGUID="{764A5ECE-11AE-4363-9A1C-573972A1BADD}"
+	RootNamespace="PyTango_VS9"
+	Keyword="Win32Proj"
+	TargetFrameworkVersion="131072"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+		<Platform
+			Name="x64"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="py26_bopyshared_tangoshared_release|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\PyTango.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				WholeProgramOptimization="true"
+				AdditionalIncludeDirectories="$(CommonIncludeDirs);$(Python26IncludeDirs)"
+				PreprocessorDefinitions="$(PreBoostSharedTangoSharedFlags);NDEBUG"
+				RuntimeLibrary="2"
+				DebugInformationFormat="0"
+				CompileAs="0"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(PyTango26SharedLibs)"
+				AdditionalLibraryDirectories="$(Py26BoostSharedTangoSharedLibDir)"
+				GenerateDebugInformation="false"
+				ProgramDatabaseFile="$(DatabaseFile)"
+				LinkTimeCodeGeneration="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="$(Py26) $(WinSetupArgs)"
+			/>
+		</Configuration>
+		<Configuration
+			Name="py26_bopyshared_tangoshared_release|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\PyTango.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				WholeProgramOptimization="true"
+				AdditionalIncludeDirectories="$(CommonIncludeDirs);$(Python26IncludeDirs)"
+				PreprocessorDefinitions="$(PreBoostSharedTangoSharedFlags);NDEBUG"
+				RuntimeLibrary="2"
+				CompileAs="0"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(PyTango26SharedLibs)"
+				AdditionalLibraryDirectories="$(Py26BoostSharedTangoSharedLibDir)"
+				LinkTimeCodeGeneration="1"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="$(Py26) $(WinSetupArgs)"
+			/>
+		</Configuration>
+		<Configuration
+			Name="py26_bopystatic_tangoshared_release|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\PyTango.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				WholeProgramOptimization="true"
+				AdditionalIncludeDirectories="$(CommonIncludeDirs);$(Python26IncludeDirs)"
+				PreprocessorDefinitions="$(PreBoostStaticTangoSharedFlags);NDEBUG"
+				DebugInformationFormat="0"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(PyTango26SharedLibs)"
+				AdditionalLibraryDirectories="$(Py26BoostStaticTangoSharedLibDir)"
+				GenerateDebugInformation="false"
+				ProgramDatabaseFile="$(DatabaseFile)"
+				LinkTimeCodeGeneration="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="$(Py26) $(WinSetupArgs)"
+			/>
+		</Configuration>
+		<Configuration
+			Name="py26_bopystatic_tangoshared_release|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\PyTango.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				WholeProgramOptimization="true"
+				AdditionalIncludeDirectories="$(CommonIncludeDirs);$(Python26IncludeDirs)"
+				PreprocessorDefinitions="$(PreBoostStaticTangoSharedFlags);NDEBUG"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(PyTango26SharedLibs)"
+				AdditionalLibraryDirectories="$(Py26BoostStaticTangoSharedLibDir)"
+				LinkTimeCodeGeneration="1"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="$(Py26) $(WinSetupArgs)"
+			/>
+		</Configuration>
+		<Configuration
+			Name="py26_bopystatic_tangostatic_release|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\PyTango.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				WholeProgramOptimization="true"
+				AdditionalIncludeDirectories="$(CommonIncludeDirs);$(Python26IncludeDirs)"
+				PreprocessorDefinitions="$(PreBoostStaticTangoStaticFlags);NDEBUG"
+				RuntimeLibrary="0"
+				DebugInformationFormat="0"
+				CompileAs="2"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(PyTango26StaticLibs)"
+				AdditionalLibraryDirectories="$(Py26BoostStaticTangoStaticLibDir)"
+				GenerateDebugInformation="false"
+				ProgramDatabaseFile="$(DatabaseFile)"
+				LinkTimeCodeGeneration="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="$(Py26) $(WinSetupArgs)"
+			/>
+		</Configuration>
+		<Configuration
+			Name="py26_bopystatic_tangostatic_release|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\PyTango.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				WholeProgramOptimization="true"
+				AdditionalIncludeDirectories="$(CommonIncludeDirs);$(Python26IncludeDirs)"
+				PreprocessorDefinitions="$(PreBoostStaticTangoStaticFlags);NDEBUG"
+				RuntimeLibrary="0"
+				CompileAs="2"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(PyTango26StaticLibs)"
+				AdditionalLibraryDirectories="$(Py26BoostStaticTangoStaticLibDir)"
+				LinkTimeCodeGeneration="1"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="$(Py26) $(WinSetupArgs)"
+			/>
+		</Configuration>
+		<Configuration
+			Name="py27_bopyshared_tangoshared_release|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\PyTango.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				WholeProgramOptimization="true"
+				AdditionalIncludeDirectories="$(CommonIncludeDirs);$(Python27IncludeDirs)"
+				PreprocessorDefinitions="$(PreBoostSharedTangoSharedFlags);NDEBUG"
+				DebugInformationFormat="0"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(PyTango27SharedLibs)"
+				AdditionalLibraryDirectories="$(Py27BoostSharedTangoSharedLibDir)"
+				GenerateDebugInformation="false"
+				ProgramDatabaseFile="$(DatabaseFile)"
+				LinkTimeCodeGeneration="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="$(Py27) $(WinSetupArgs)"
+			/>
+		</Configuration>
+		<Configuration
+			Name="py27_bopyshared_tangoshared_release|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\PyTango.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				WholeProgramOptimization="true"
+				AdditionalIncludeDirectories="$(CommonIncludeDirs);$(Python27IncludeDirs)"
+				PreprocessorDefinitions="$(PreBoostSharedTangoSharedFlags);NDEBUG"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(PyTango27SharedLibs)"
+				AdditionalLibraryDirectories="$(Py27BoostSharedTangoSharedLibDir)"
+				LinkTimeCodeGeneration="1"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="$(Py27) $(WinSetupArgs)"
+			/>
+		</Configuration>
+		<Configuration
+			Name="py27_bopystatic_tangoshared_release|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\PyTango.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				WholeProgramOptimization="true"
+				AdditionalIncludeDirectories="$(CommonIncludeDirs);$(Python27IncludeDirs)"
+				PreprocessorDefinitions="$(PreBoostStaticTangoSharedFlags);NDEBUG"
+				DebugInformationFormat="0"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(PyTango27SharedLibs)"
+				AdditionalLibraryDirectories="$(Py27BoostStaticTangoSharedLibDir)"
+				GenerateDebugInformation="false"
+				ProgramDatabaseFile="$(DatabaseFile)"
+				LinkTimeCodeGeneration="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="$(Py27) $(WinSetupArgs)"
+			/>
+		</Configuration>
+		<Configuration
+			Name="py27_bopystatic_tangoshared_release|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\PyTango.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				WholeProgramOptimization="true"
+				AdditionalIncludeDirectories="$(CommonIncludeDirs);$(Python27IncludeDirs)"
+				PreprocessorDefinitions="$(PreBoostStaticTangoSharedFlags);NDEBUG"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(PyTango27SharedLibs)"
+				AdditionalLibraryDirectories="$(Py27BoostStaticTangoSharedLibDir)"
+				LinkTimeCodeGeneration="1"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="$(Py27) $(WinSetupArgs)"
+			/>
+		</Configuration>
+		<Configuration
+			Name="py27_bopystatic_tangostatic_release|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\PyTango.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				WholeProgramOptimization="true"
+				AdditionalIncludeDirectories="$(CommonIncludeDirs);$(Python27IncludeDirs)"
+				PreprocessorDefinitions="$(PreBoostStaticTangoStaticFlags);NDEBUG"
+				RuntimeLibrary="0"
+				DebugInformationFormat="0"
+				CompileAs="2"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(PyTango27StaticLibs)"
+				AdditionalLibraryDirectories="$(Py27BoostStaticTangoStaticLibDir)"
+				GenerateDebugInformation="false"
+				ProgramDatabaseFile="$(DatabaseFile)"
+				LinkTimeCodeGeneration="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="$(Py27) $(WinSetupArgs)"
+			/>
+		</Configuration>
+		<Configuration
+			Name="py27_bopystatic_tangostatic_release|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\PyTango.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				WholeProgramOptimization="true"
+				AdditionalIncludeDirectories="$(CommonIncludeDirs);$(Python27IncludeDirs)"
+				PreprocessorDefinitions="$(PreBoostStaticTangoStaticFlags);NDEBUG"
+				RuntimeLibrary="0"
+				CompileAs="2"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(PyTango27StaticLibs)"
+				AdditionalLibraryDirectories="$(Py27BoostStaticTangoStaticLibDir)"
+				IgnoreDefaultLibraryNames=""
+				LinkTimeCodeGeneration="1"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="$(Py27) $(WinSetupArgs)"
+			/>
+		</Configuration>
+		<Configuration
+			Name="py31_bopyshared_tangoshared_release|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\PyTango.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				WholeProgramOptimization="true"
+				AdditionalIncludeDirectories="$(CommonIncludeDirs);$(Python31IncludeDirs)"
+				PreprocessorDefinitions="$(PreBoostSharedTangoSharedFlags);NDEBUG"
+				DebugInformationFormat="0"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(PyTango31SharedLibs)"
+				AdditionalLibraryDirectories="$(Py31BoostSharedTangoSharedLibDir)"
+				GenerateDebugInformation="false"
+				ProgramDatabaseFile="$(DatabaseFile)"
+				LinkTimeCodeGeneration="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="$(Py31) $(WinSetupArgs)"
+			/>
+		</Configuration>
+		<Configuration
+			Name="py31_bopyshared_tangoshared_release|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\PyTango.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				WholeProgramOptimization="true"
+				AdditionalIncludeDirectories="$(CommonIncludeDirs);$(Python31IncludeDirs)"
+				PreprocessorDefinitions="$(PreBoostSharedTangoSharedFlags);NDEBUG"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(PyTango31SharedLibs)"
+				AdditionalLibraryDirectories="$(Py31BoostSharedTangoSharedLibDir)"
+				LinkTimeCodeGeneration="1"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="$(Py31) $(WinSetupArgs)"
+			/>
+		</Configuration>
+		<Configuration
+			Name="py31_bopystatic_tangoshared_release|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\PyTango.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				WholeProgramOptimization="true"
+				AdditionalIncludeDirectories="$(CommonIncludeDirs);$(Python31IncludeDirs)"
+				PreprocessorDefinitions="$(PreBoostStaticTangoSharedFlags);NDEBUG"
+				DebugInformationFormat="0"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(PyTango31SharedLibs)"
+				AdditionalLibraryDirectories="$(Py31BoostStaticTangoSharedLibDir)"
+				GenerateDebugInformation="false"
+				ProgramDatabaseFile="$(DatabaseFile)"
+				LinkTimeCodeGeneration="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="$(Py31) $(WinSetupArgs)"
+			/>
+		</Configuration>
+		<Configuration
+			Name="py31_bopystatic_tangoshared_release|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\PyTango.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				WholeProgramOptimization="true"
+				AdditionalIncludeDirectories="$(CommonIncludeDirs);$(Python31IncludeDirs)"
+				PreprocessorDefinitions="$(PreBoostStaticTangoSharedFlags);NDEBUG"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(PyTango31SharedLibs)"
+				AdditionalLibraryDirectories="$(Py31BoostStaticTangoSharedLibDir)"
+				LinkTimeCodeGeneration="1"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="$(Py31) $(WinSetupArgs)"
+			/>
+		</Configuration>
+		<Configuration
+			Name="py31_bopystatic_tangostatic_release|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\PyTango.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				WholeProgramOptimization="true"
+				AdditionalIncludeDirectories="$(CommonIncludeDirs);$(Python31IncludeDirs)"
+				PreprocessorDefinitions="$(PreBoostStaticTangoStaticFlags);NDEBUG"
+				RuntimeLibrary="0"
+				DebugInformationFormat="0"
+				CompileAs="2"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(PyTango31StaticLibs)"
+				AdditionalLibraryDirectories="$(Py31BoostStaticTangoStaticLibDir)"
+				GenerateDebugInformation="false"
+				ProgramDatabaseFile="$(DatabaseFile)"
+				LinkTimeCodeGeneration="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="$(Py31) $(WinSetupArgs)"
+			/>
+		</Configuration>
+		<Configuration
+			Name="py31_bopystatic_tangostatic_release|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\PyTango.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				WholeProgramOptimization="true"
+				AdditionalIncludeDirectories="$(CommonIncludeDirs);$(Python31IncludeDirs)"
+				PreprocessorDefinitions="$(PreBoostStaticTangoStaticFlags);NDEBUG"
+				RuntimeLibrary="0"
+				CompileAs="2"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(PyTango31StaticLibs)"
+				AdditionalLibraryDirectories="$(Py31BoostStaticTangoStaticLibDir)"
+				LinkTimeCodeGeneration="1"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="$(Py31) $(WinSetupArgs)"
+			/>
+		</Configuration>
+		<Configuration
+			Name="py32_bopyshared_tangoshared_release|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\PyTango.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				WholeProgramOptimization="true"
+				AdditionalIncludeDirectories="$(CommonIncludeDirs);$(Python32IncludeDirs)"
+				PreprocessorDefinitions="$(PreBoostSharedTangoSharedFlags);NDEBUG"
+				DebugInformationFormat="0"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(PyTango32SharedLibs)"
+				AdditionalLibraryDirectories="$(Py32BoostSharedTangoSharedLibDir)"
+				GenerateDebugInformation="false"
+				ProgramDatabaseFile="$(DatabaseFile)"
+				LinkTimeCodeGeneration="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="$(Py32) $(WinSetupArgs)"
+			/>
+		</Configuration>
+		<Configuration
+			Name="py32_bopyshared_tangoshared_release|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\PyTango.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				WholeProgramOptimization="true"
+				AdditionalIncludeDirectories="$(CommonIncludeDirs);$(Python32IncludeDirs)"
+				PreprocessorDefinitions="$(PreBoostSharedTangoSharedFlags);NDEBUG"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(PyTango32SharedLibs)"
+				AdditionalLibraryDirectories="$(Py32BoostSharedTangoSharedLibDir)"
+				LinkTimeCodeGeneration="1"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="$(Py32) $(WinSetupArgs)"
+			/>
+		</Configuration>
+		<Configuration
+			Name="py32_bopystatic_tangoshared_release|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\PyTango.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				WholeProgramOptimization="true"
+				AdditionalIncludeDirectories="$(CommonIncludeDirs);$(Python32IncludeDirs)"
+				PreprocessorDefinitions="$(PreBoostStaticTangoSharedFlags);NDEBUG"
+				DebugInformationFormat="0"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(PyTango32SharedLibs)"
+				AdditionalLibraryDirectories="$(Py32BoostStaticTangoSharedLibDir)"
+				GenerateDebugInformation="false"
+				ProgramDatabaseFile="$(DatabaseFile)"
+				LinkTimeCodeGeneration="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="$(Py32) $(WinSetupArgs)"
+			/>
+		</Configuration>
+		<Configuration
+			Name="py32_bopystatic_tangoshared_release|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\PyTango.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				WholeProgramOptimization="true"
+				AdditionalIncludeDirectories="$(CommonIncludeDirs);$(Python32IncludeDirs)"
+				PreprocessorDefinitions="$(PreBoostStaticTangoSharedFlags);NDEBUG"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(PyTango32SharedLibs)"
+				AdditionalLibraryDirectories="$(Py32BoostStaticTangoSharedLibDir)"
+				LinkTimeCodeGeneration="1"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="$(Py32) $(WinSetupArgs)"
+			/>
+		</Configuration>
+		<Configuration
+			Name="py32_bopystatic_tangostatic_release|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\PyTango.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				WholeProgramOptimization="true"
+				AdditionalIncludeDirectories="$(CommonIncludeDirs);$(Python32IncludeDirs)"
+				PreprocessorDefinitions="$(PreBoostStaticTangoStaticFlags);NDEBUG"
+				RuntimeLibrary="0"
+				DebugInformationFormat="0"
+				CompileAs="2"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(PyTango32StaticLibs)"
+				AdditionalLibraryDirectories="$(Py32BoostStaticTangoStaticLibDir)"
+				GenerateDebugInformation="false"
+				ProgramDatabaseFile="$(DatabaseFile)"
+				LinkTimeCodeGeneration="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="$(Py32) $(WinSetupArgs)"
+			/>
+		</Configuration>
+		<Configuration
+			Name="py32_bopystatic_tangostatic_release|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\PyTango.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				WholeProgramOptimization="true"
+				AdditionalIncludeDirectories="$(CommonIncludeDirs);$(Python32IncludeDirs)"
+				PreprocessorDefinitions="$(PreBoostStaticTangoStaticFlags);NDEBUG"
+				RuntimeLibrary="0"
+				CompileAs="2"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(PyTango32StaticLibs)"
+				AdditionalLibraryDirectories="$(Py32BoostStaticTangoStaticLibDir)"
+				LinkTimeCodeGeneration="1"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="$(Py32) $(WinSetupArgs)"
+			/>
+		</Configuration>
+		<Configuration
+			Name="py26_bopyshared_tangoshared_debug|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\PyTango.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				WholeProgramOptimization="false"
+				AdditionalIncludeDirectories="$(CommonIncludeDirs);$(Python26IncludeDirs)"
+				PreprocessorDefinitions="$(PreBoostSharedTangoSharedFlags);_DEBUG"
+				RuntimeLibrary="3"
+				DebugInformationFormat="1"
+				CompileAs="0"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(PyTango26SharedLibs_Debug)"
+				AdditionalLibraryDirectories="$(Py26BoostSharedTangoSharedLibDir_Debug)"
+				LinkTimeCodeGeneration="0"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="$(Py26) $(WinSetupArgs)"
+			/>
+		</Configuration>
+		<Configuration
+			Name="py26_bopyshared_tangoshared_debug|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\PyTango.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				WholeProgramOptimization="true"
+				AdditionalIncludeDirectories="$(CommonIncludeDirs);$(Python26IncludeDirs)"
+				PreprocessorDefinitions="$(PreBoostSharedTangoSharedFlags);_DEBUG"
+				RuntimeLibrary="3"
+				CompileAs="0"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(PyTango26SharedLibs_Debug)"
+				AdditionalLibraryDirectories="$(Py26BoostSharedTangoSharedLibDir_Debug)"
+				LinkTimeCodeGeneration="1"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="$(Py26) $(WinSetupArgs)"
+			/>
+		</Configuration>
+		<Configuration
+			Name="py26_bopystatic_tangoshared_debug|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\PyTango.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				WholeProgramOptimization="false"
+				AdditionalIncludeDirectories="$(CommonIncludeDirs);$(Python26IncludeDirs)"
+				PreprocessorDefinitions="$(PreBoostStaticTangoSharedFlags);_DEBUG"
+				RuntimeLibrary="3"
+				DebugInformationFormat="1"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(PyTango26SharedLibs_Debug)"
+				AdditionalLibraryDirectories="$(Py26BoostStaticTangoSharedLibDir_Debug)"
+				LinkTimeCodeGeneration="0"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="$(Py26) $(WinSetupArgs)"
+			/>
+		</Configuration>
+		<Configuration
+			Name="py26_bopystatic_tangoshared_debug|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\PyTango.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				WholeProgramOptimization="true"
+				AdditionalIncludeDirectories="$(CommonIncludeDirs);$(Python26IncludeDirs)"
+				PreprocessorDefinitions="$(PreBoostStaticTangoSharedFlags);_DEBUG"
+				RuntimeLibrary="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(PyTango26SharedLibs_Debug)"
+				AdditionalLibraryDirectories="$(Py26BoostStaticTangoSharedLibDir_Debug)"
+				LinkTimeCodeGeneration="1"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="$(Py26) $(WinSetupArgs)"
+			/>
+		</Configuration>
+		<Configuration
+			Name="py26_bopystatic_tangostatic_debug|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\PyTango.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				WholeProgramOptimization="false"
+				AdditionalIncludeDirectories="$(CommonIncludeDirs);$(Python26IncludeDirs)"
+				PreprocessorDefinitions="$(PreBoostStaticTangoStaticFlags);_DEBUG"
+				RuntimeLibrary="1"
+				DebugInformationFormat="1"
+				CompileAs="2"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(PyTango26StaticLibs_Debug)"
+				AdditionalLibraryDirectories="$(Py26BoostStaticTangoStaticLibDir_Debug)"
+				LinkTimeCodeGeneration="0"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="$(Py26) $(WinSetupArgs)"
+			/>
+		</Configuration>
+		<Configuration
+			Name="py26_bopystatic_tangostatic_debug|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\PyTango.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				WholeProgramOptimization="true"
+				AdditionalIncludeDirectories="$(CommonIncludeDirs);$(Python26IncludeDirs)"
+				PreprocessorDefinitions="$(PreBoostStaticTangoStaticFlags);_DEBUG"
+				RuntimeLibrary="1"
+				CompileAs="2"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(PyTango26StaticLibs_Debug)"
+				AdditionalLibraryDirectories="$(Py26BoostStaticTangoStaticLibDir_Debug)"
+				LinkTimeCodeGeneration="1"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="$(Py26) $(WinSetupArgs)"
+			/>
+		</Configuration>
+		<Configuration
+			Name="py27_bopyshared_tangoshared_debug|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\PyTango.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				WholeProgramOptimization="false"
+				AdditionalIncludeDirectories="$(CommonIncludeDirs);$(Python27IncludeDirs)"
+				PreprocessorDefinitions="$(PreBoostSharedTangoSharedFlags);_DEBUG"
+				RuntimeLibrary="3"
+				DebugInformationFormat="1"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(PyTango27SharedLibs_Debug)"
+				AdditionalLibraryDirectories="$(Py27BoostSharedTangoSharedLibDir_Debug)"
+				LinkTimeCodeGeneration="0"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="$(Py27) $(WinSetupArgs)"
+			/>
+		</Configuration>
+		<Configuration
+			Name="py27_bopyshared_tangoshared_debug|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\PyTango.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				WholeProgramOptimization="true"
+				AdditionalIncludeDirectories="$(CommonIncludeDirs);$(Python27IncludeDirs)"
+				PreprocessorDefinitions="$(PreBoostSharedTangoSharedFlags);_DEBUG"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(PyTango27SharedLibs_Debug)"
+				AdditionalLibraryDirectories="$(Py27BoostSharedTangoSharedLibDir_Debug)"
+				LinkTimeCodeGeneration="1"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="$(Py27) $(WinSetupArgs)"
+			/>
+		</Configuration>
+		<Configuration
+			Name="py27_bopystatic_tangoshared_debug|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\PyTango.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				WholeProgramOptimization="false"
+				AdditionalIncludeDirectories="$(CommonIncludeDirs);$(Python27IncludeDirs)"
+				PreprocessorDefinitions="$(PreBoostStaticTangoSharedFlags);_DEBUG"
+				RuntimeLibrary="3"
+				DebugInformationFormat="1"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(PyTango27SharedLibs_Debug)"
+				AdditionalLibraryDirectories="$(Py27BoostStaticTangoSharedLibDir_Debug)"
+				LinkTimeCodeGeneration="0"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="$(Py27) $(WinSetupArgs)"
+			/>
+		</Configuration>
+		<Configuration
+			Name="py27_bopystatic_tangoshared_debug|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\PyTango.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				WholeProgramOptimization="true"
+				AdditionalIncludeDirectories="$(CommonIncludeDirs);$(Python27IncludeDirs)"
+				PreprocessorDefinitions="$(PreBoostStaticTangoSharedFlags);_DEBUG"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(PyTango27SharedLibs_Debug)"
+				AdditionalLibraryDirectories="$(Py27BoostStaticTangoSharedLibDir_Debug)"
+				LinkTimeCodeGeneration="1"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="$(Py27) $(WinSetupArgs)"
+			/>
+		</Configuration>
+		<Configuration
+			Name="py27_bopystatic_tangostatic_debug|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\PyTango.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				WholeProgramOptimization="false"
+				AdditionalIncludeDirectories="$(CommonIncludeDirs);$(Python27IncludeDirs)"
+				PreprocessorDefinitions="$(PreBoostStaticTangoStaticFlags);_DEBUG"
+				RuntimeLibrary="1"
+				DebugInformationFormat="1"
+				CompileAs="2"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(PyTango27StaticLibs_Debug)"
+				AdditionalLibraryDirectories="$(Py27BoostStaticTangoStaticLibDir_Debug)"
+				LinkTimeCodeGeneration="0"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="$(Py27) $(WinSetupArgs)"
+			/>
+		</Configuration>
+		<Configuration
+			Name="py27_bopystatic_tangostatic_debug|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\PyTango.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				WholeProgramOptimization="true"
+				AdditionalIncludeDirectories="$(CommonIncludeDirs);$(Python27IncludeDirs)"
+				PreprocessorDefinitions="$(PreBoostStaticTangoStaticFlags);_DEBUG"
+				RuntimeLibrary="1"
+				CompileAs="2"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(PyTango27StaticLibs_Debug)"
+				AdditionalLibraryDirectories="$(Py27BoostStaticTangoStaticLibDir_Debug)"
+				IgnoreDefaultLibraryNames=""
+				LinkTimeCodeGeneration="1"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="$(Py27) $(WinSetupArgs)"
+			/>
+		</Configuration>
+		<Configuration
+			Name="py31_bopyshared_tangoshared_debug|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\PyTango.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				WholeProgramOptimization="false"
+				AdditionalIncludeDirectories="$(CommonIncludeDirs);$(Python31IncludeDirs)"
+				PreprocessorDefinitions="$(PreBoostSharedTangoSharedFlags);_DEBUG"
+				RuntimeLibrary="3"
+				DebugInformationFormat="1"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(PyTango31SharedLibs_Debug)"
+				AdditionalLibraryDirectories="$(Py31BoostSharedTangoSharedLibDir_Debug)"
+				LinkTimeCodeGeneration="0"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="$(Py31) $(WinSetupArgs)"
+			/>
+		</Configuration>
+		<Configuration
+			Name="py31_bopyshared_tangoshared_debug|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\PyTango.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				WholeProgramOptimization="true"
+				AdditionalIncludeDirectories="$(CommonIncludeDirs);$(Python31IncludeDirs)"
+				PreprocessorDefinitions="$(PreBoostSharedTangoSharedFlags);_DEBUG"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(PyTango31SharedLibs_Debug)"
+				AdditionalLibraryDirectories="$(Py31BoostSharedTangoSharedLibDir_Debug)"
+				LinkTimeCodeGeneration="1"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="$(Py31) $(WinSetupArgs)"
+			/>
+		</Configuration>
+		<Configuration
+			Name="py31_bopystatic_tangoshared_debug|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\PyTango.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				WholeProgramOptimization="false"
+				AdditionalIncludeDirectories="$(CommonIncludeDirs);$(Python31IncludeDirs)"
+				PreprocessorDefinitions="$(PreBoostStaticTangoSharedFlags);_DEBUG"
+				RuntimeLibrary="3"
+				DebugInformationFormat="1"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(PyTango31SharedLibs_Debug)"
+				AdditionalLibraryDirectories="$(Py31BoostStaticTangoSharedLibDir_Debug)"
+				LinkTimeCodeGeneration="0"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="$(Py31) $(WinSetupArgs)"
+			/>
+		</Configuration>
+		<Configuration
+			Name="py31_bopystatic_tangoshared_debug|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\PyTango.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				WholeProgramOptimization="true"
+				AdditionalIncludeDirectories="$(CommonIncludeDirs);$(Python31IncludeDirs)"
+				PreprocessorDefinitions="$(PreBoostStaticTangoSharedFlags);_DEBUG"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(PyTango31SharedLibs_Debug)"
+				AdditionalLibraryDirectories="$(Py31BoostStaticTangoSharedLibDir_Debug)"
+				LinkTimeCodeGeneration="1"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="$(Py31) $(WinSetupArgs)"
+			/>
+		</Configuration>
+		<Configuration
+			Name="py31_bopystatic_tangostatic_debug|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\PyTango.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				WholeProgramOptimization="false"
+				AdditionalIncludeDirectories="$(CommonIncludeDirs);$(Python31IncludeDirs)"
+				PreprocessorDefinitions="$(PreBoostStaticTangoStaticFlags);_DEBUG"
+				RuntimeLibrary="1"
+				DebugInformationFormat="1"
+				CompileAs="2"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(PyTango31StaticLibs_Debug)"
+				AdditionalLibraryDirectories="$(Py31BoostStaticTangoStaticLibDir_Debug)"
+				LinkTimeCodeGeneration="0"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="$(Py31) $(WinSetupArgs)"
+			/>
+		</Configuration>
+		<Configuration
+			Name="py31_bopystatic_tangostatic_debug|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\PyTango.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				WholeProgramOptimization="true"
+				AdditionalIncludeDirectories="$(CommonIncludeDirs);$(Python31IncludeDirs)"
+				PreprocessorDefinitions="$(PreBoostStaticTangoStaticFlags);_DEBUG"
+				RuntimeLibrary="1"
+				CompileAs="2"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(PyTango31StaticLibs_Debug)"
+				AdditionalLibraryDirectories="$(Py31BoostStaticTangoStaticLibDir_Debug)"
+				LinkTimeCodeGeneration="1"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="$(Py31) $(WinSetupArgs)"
+			/>
+		</Configuration>
+		<Configuration
+			Name="py32_bopyshared_tangoshared_debug|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\PyTango.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				WholeProgramOptimization="false"
+				AdditionalIncludeDirectories="$(CommonIncludeDirs);$(Python32IncludeDirs)"
+				PreprocessorDefinitions="$(PreBoostSharedTangoSharedFlags);_DEBUG"
+				RuntimeLibrary="3"
+				DebugInformationFormat="1"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(PyTango32SharedLibs_Debug)"
+				AdditionalLibraryDirectories="$(Py32BoostSharedTangoSharedLibDir_Debug)"
+				LinkTimeCodeGeneration="0"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="$(Py32) $(WinSetupArgs)"
+			/>
+		</Configuration>
+		<Configuration
+			Name="py32_bopyshared_tangoshared_debug|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\PyTango.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				WholeProgramOptimization="true"
+				AdditionalIncludeDirectories="$(CommonIncludeDirs);$(Python32IncludeDirs)"
+				PreprocessorDefinitions="$(PreBoostSharedTangoSharedFlags);_DEBUG"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(PyTango32SharedLibs_Debug)"
+				AdditionalLibraryDirectories="$(Py32BoostSharedTangoSharedLibDir_Debug)"
+				LinkTimeCodeGeneration="1"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="$(Py32) $(WinSetupArgs)"
+			/>
+		</Configuration>
+		<Configuration
+			Name="py32_bopystatic_tangoshared_debug|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\PyTango.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				WholeProgramOptimization="false"
+				AdditionalIncludeDirectories="$(CommonIncludeDirs);$(Python32IncludeDirs)"
+				PreprocessorDefinitions="$(PreBoostStaticTangoSharedFlags);_DEBUG"
+				RuntimeLibrary="3"
+				DebugInformationFormat="1"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(PyTango32SharedLibs_Debug)"
+				AdditionalLibraryDirectories="$(Py32BoostStaticTangoSharedLibDir_Debug)"
+				LinkTimeCodeGeneration="0"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="$(Py32) $(WinSetupArgs)"
+			/>
+		</Configuration>
+		<Configuration
+			Name="py32_bopystatic_tangoshared_debug|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\PyTango.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				WholeProgramOptimization="true"
+				AdditionalIncludeDirectories="$(CommonIncludeDirs);$(Python32IncludeDirs)"
+				PreprocessorDefinitions="$(PreBoostStaticTangoSharedFlags);_DEBUG"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(PyTango32SharedLibs_Debug)"
+				AdditionalLibraryDirectories="$(Py32BoostStaticTangoSharedLibDir_Debug)"
+				LinkTimeCodeGeneration="1"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="$(Py32) $(WinSetupArgs)"
+			/>
+		</Configuration>
+		<Configuration
+			Name="py32_bopystatic_tangostatic_debug|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\PyTango.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				WholeProgramOptimization="false"
+				AdditionalIncludeDirectories="$(CommonIncludeDirs);$(Python32IncludeDirs)"
+				PreprocessorDefinitions="$(PreBoostStaticTangoStaticFlags);_DEBUG"
+				RuntimeLibrary="1"
+				DebugInformationFormat="1"
+				CompileAs="2"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(PyTango32StaticLibs_Debug)"
+				AdditionalLibraryDirectories="$(Py32BoostStaticTangoStaticLibDir_Debug)"
+				LinkTimeCodeGeneration="0"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="$(Py32) $(WinSetupArgs)"
+			/>
+		</Configuration>
+		<Configuration
+			Name="py32_bopystatic_tangostatic_debug|x64"
+			ConfigurationType="2"
+			InheritedPropertySheets=".\PyTango.vsprops"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				WholeProgramOptimization="true"
+				AdditionalIncludeDirectories="$(CommonIncludeDirs);$(Python32IncludeDirs)"
+				PreprocessorDefinitions="$(PreBoostStaticTangoStaticFlags);_DEBUG"
+				RuntimeLibrary="1"
+				CompileAs="2"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(PyTango32StaticLibs_Debug)"
+				AdditionalLibraryDirectories="$(Py32BoostStaticTangoStaticLibDir_Debug)"
+				LinkTimeCodeGeneration="1"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="$(Py32) $(WinSetupArgs)"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl;inc;xsd"
+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+			>
+			<File
+				RelativePath="..\..\ext\server\attr.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\server\attribute.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\base_types_numpy.hpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\callback.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\server\command.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\defs.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\device_attribute.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\device_attribute_numpy.hpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\server\device_class.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\server\device_impl.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\device_pipe.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\exception.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\fast_from_py.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\fast_from_py_numpy.hpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\from_py.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\server\pipe.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\precompiled_header.hpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\pytgutils.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\pyutils.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\tango_numpy.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\tgutils.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\to_py.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\to_py_numpy.hpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\server\wattribute_numpy.hpp"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+			>
+			<File
+				RelativePath="..\..\ext\api_util.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\archive_event_info.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\server\attr.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\attr_conf_event_data.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\server\attribute.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\attribute_alarm_info.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\attribute_dimension.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\attribute_event_info.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\attribute_info.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\attribute_info_ex.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\attribute_proxy.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\server\auto_monitor.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\base_types.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\callback.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\change_event_info.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\server\command.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\command_info.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\connection.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\constants.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\data_ready_event_data.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\database.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\db.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\dev_command_info.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\dev_error.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\device_attribute.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\device_attribute_config.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\device_attribute_history.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\server\device_class.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\device_data.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\device_data_history.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\server\device_impl.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\device_info.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\device_pipe.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\device_proxy.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\server\dserver.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\server\encoded_attribute.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\enums.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\event_data.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\exception.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\from_py.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\group.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\group_reply.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\group_reply_list.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\locker_info.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\locking_thread.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\server\log4tango.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\server\multi_attribute.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\server\multi_class_attribute.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\periodic_event_info.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\server\pipe.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\pipe_info.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\poll_device.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\precompiled_header.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\pytango.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\pytgutils.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\pyutils.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\server\subdev.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\server\tango_util.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\time_val.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\to_py.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\server\user_default_attr_prop.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\server\user_default_pipe_prop.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\version.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\server\wattribute.cpp"
+				>
+			</File>
+		</Filter>
+		<File
+			RelativePath=".\PyTango.vsprops"
+			>
+		</File>
+		<File
+			RelativePath="..\..\setup.cfg"
+			>
+		</File>
+		<File
+			RelativePath="..\..\setup.py"
+			>
+		</File>
+		<File
+			RelativePath="..\..\ssetup.py"
+			>
+		</File>
+		<File
+			RelativePath="..\..\winsetup.py"
+			>
+		</File>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/win/PyTango_VS9/PyTango.vsprops b/win/PyTango_VS9/PyTango.vsprops
new file mode 100644
index 0000000..76a9d4f
--- /dev/null
+++ b/win/PyTango_VS9/PyTango.vsprops
@@ -0,0 +1,316 @@
+<?xml version="1.0"?>
+<VisualStudioPropertySheet
+    ProjectType="Visual C++"
+    Version="8.00"
+    Name="PyTango Project Properties"
+    OutputDirectory="$(PyTangoBuildDir)"
+    IntermediateDirectory="$(PyTangoTempDir)"
+    UseOfMFC="0"
+    UseOfATL="0"
+    BuildLogFile="$(IntDir)\BuildLog.html">
+
+    <Tool
+        Name="VCPreBuildEventTool"
+    />
+    <Tool
+        Name="VCCustomBuildTool"
+    />
+    <Tool
+        Name="VCXMLDataGeneratorTool"
+    />
+    <Tool
+        Name="VCWebServiceProxyGeneratorTool"
+    />
+    <Tool
+        Name="VCMIDLTool"
+    />
+    <Tool
+        Name="VCManagedResourceCompilerTool"
+    />
+    <Tool
+        Name="VCResourceCompilerTool"
+    />
+    <Tool
+        Name="VCPreLinkEventTool"
+    />
+    <Tool
+        Name="VCCLCompilerTool"
+        AdditionalOptions="$(PyTangoCompileOptions)"
+        Optimization="3"
+        WholeProgramOptimization="false"
+        BufferSecurityCheck="false"
+        UsePrecompiledHeader="0"
+        PrecompiledHeaderFile="$(PreCompHeaderDst)"
+        PrecompiledHeaderThrough="$(PreCompHeaderSrc)"
+        ProgramDataBaseFileName="$(DatabaseFile)"
+        WarningLevel="3"
+        Detect64BitPortabilityProblems="false"
+        DebugInformationFormat="3"
+        RuntimeLibrary="2"
+        CompileAs="0"
+        DisableSpecificWarnings="$(BaseDisableWarningFlags)"
+        ErrorReporting="1"
+    />
+    <Tool
+        Name="VCALinkTool"
+    />
+    <Tool
+        Name="VCManifestTool"
+    />
+    <Tool
+        Name="VCXDCMakeTool"
+    />
+    <Tool
+        Name="VCBscMakeTool"
+    />
+    <Tool
+        Name="VCFxCopTool"
+    />
+    <Tool
+        Name="VCAppVerifierTool"
+    />
+    <Tool
+        Name="VCLinkerTool"
+        ShowProgress="0"
+        OutputFile="$(OutDir)\$(PyTangoBaseFile).pyd"
+        LinkIncremental="1"
+        GenerateDebugInformation="true"
+        ProgramDatabaseFile="$(DatabaseFile)"
+        SubSystem="2"
+        OptimizeReferences="2"
+        EnableCOMDATFolding="2"
+        LinkTimeCodeGeneration="0"
+        RandomizedBaseAddress="1"
+        DataExecutionPrevention="0"
+        TargetMachine="1"
+    />
+
+    <Tool
+        Name="VCPostBuildEventTool"
+        Description="[PyTango]: Starting python $(WinSetupArgs)"
+    />
+
+    <UserMacro Name="PyTangoBaseFile" Value="_tango" />
+    
+    <UserMacro Name="TangoMajorVer" Value="9" />
+    <UserMacro Name="TangoMinorVer" Value="2" />
+    <UserMacro Name="TangoPatchVer" Value="0" />
+    <UserMacro Name="TangoVer" Value="$(TangoMajorVer).$(TangoMinorVer).$(TangoPatchVer)" />
+
+    <UserMacro Name="PyTangoMajorVer" Value="9" />
+    <UserMacro Name="PyTangoMinorVer" Value="2" />
+    <UserMacro Name="PyTangoPatchVer" Value="0" />
+    <UserMacro Name="PyTangoVer" Value="$(PyTangoMajorVer).$(PyTangoMinorVer).$(PyTangoPatchVer)" />
+
+    <UserMacro Name="BoostMajorVer" Value="1" />
+    <UserMacro Name="BoostMinorVer" Value="61" />
+    <UserMacro Name="BoostPatchVer" Value="0" />
+    <UserMacro Name="BoostVer" Value="$(BoostMajorVer).$(BoostMinorVer).$(BoostPatchVer)" />
+  
+    <!-- Tiago Coutinho personal configuration -->
+    <!-- <UserMacro Name="RootDir" Value="C:\Users\coutinho\bin" /> -->
+    <UserMacro Name="RootDir" Value="C:" />
+
+    <UserMacro Name="TangoBaseDir" Value="$(RootDir)\wsp\tango" />
+  
+    <UserMacro Name="BoostBaseDir" Value="$(RootDir)\wsp\boost-$(BoostVer)" />
+    <UserMacro Name="PythonBaseDir" Value="C:\Python" />
+
+    <UserMacro Name="VCMajorVer" Value="9" />
+    <UserMacro Name="VCMinorVer" Value="0" />
+
+    <UserMacro Name="VCVer" Value="$(VCMajorVer).$(VCMinorVer)" />
+
+    <UserMacro Name="BoostIncludeDir" Value="$(BoostBaseDir)\include\boost-$(BoostMajorVer)_$(BoostMinorVer)" />
+    <UserMacro Name="BoostLibDir" Value="$(BoostBaseDir)\multi\release\msvc-$(VCVer)\$(PlatformName)" />
+    <UserMacro Name="BoostLibDir_Debug" Value="$(BoostBaseDir)\multi\debug\msvc-$(VCVer)\$(PlatformName)" />
+
+    <UserMacro Name="TangoIncludeDir" Value="$(TangoBaseDir)\$(PlatformName)\include\vc$(VCMajorVer)" />
+    <UserMacro Name="TangoLibDir" Value="$(TangoBaseDir)\$(PlatformName)\lib" />
+    <UserMacro Name="TangoLibDir_Debug" Value="$(TangoBaseDir)\$(PlatformName)\lib" />
+
+    <UserMacro Name="PythonDir" Value="$(PythonBaseDir)\$(PlatformName)" />
+    <UserMacro Name="NumpyRelativeIncludeDir" Value="Lib\site-packages\numpy\core\include" />
+
+    <!-- Internal: DO NOT CHANGE -->
+    <UserMacro Name="PyTangoCompileOptions" Value="-Zm200 /MP8 /bigobj" />
+
+    <UserMacro Name="BaseDir" Value="$(ProjectDir)..\.." />
+    <UserMacro Name="RelPrefixDir" Value="$(ConfigurationName)_$(PlatformName)_msvc$(VCVer)" />
+
+    <UserMacro Name="BaseBuildDir" Value="$(RootDir)\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" />
+    <UserMacro Name="BaseBDistDir" Value="$(BaseBuildDir)\temp_dist" />
+
+    <!-- to be used in the internal winsetup.py script -->
+    <UserMacro Name="BuildDir" Value="$(BaseBuildLibDir)\$(RelPrefixDir)" />
+    <UserMacro Name="DistDir" Value="$(BaseDistDir)\$(RelPrefixDir)" />
+    <UserMacro Name="TempDir" Value="$(BaseTempDir)\$(RelPrefixDir)" />
+    <UserMacro Name="BDistDir" Value="$(BaseBDistDir)\$(RelPrefixDir)" />
+
+    <!-- to be set to OutputDir and IntDir -->
+    <UserMacro Name="PyTangoBuildDir" Value="$(BuildDir)\tango" />
+    <UserMacro Name="PyTangoTempDir" Value="$(TempDir)\tango" />
+
+    <UserMacro Name="BaseSrcDir" Value="$(BaseDir)\ext" />
+    <UserMacro Name="CommonIncludeDirs" Value="$(BoostIncludeDir);$(TangoIncludeDir);$(BaseSrcDir);$(BaseSrcDir)\server" />
+
+    <UserMacro Name="Python26Dir" Value="$(PythonDir)\26" />
+    <UserMacro Name="Py26" Value="$(Python26Dir)\python" />
+    <UserMacro Name="Python26IncludeDir" Value="$(Python26Dir)\include" />
+    <UserMacro Name="Numpy26IncludeDir" Value="$(Python26Dir)\$(NumpyRelativeIncludeDir)" />
+    <UserMacro Name="Python26IncludeDirs" Value="$(Python26IncludeDir);$(Numpy26IncludeDir)" />
+    <UserMacro Name="Python26LibDir" Value="$(Python26Dir)\libs" />
+
+    <UserMacro Name="Python27Dir" Value="$(PythonDir)\27" />
+    <UserMacro Name="Py27" Value="$(Python27Dir)\python" />
+    <UserMacro Name="Python27IncludeDir" Value="$(Python27Dir)\include" />
+    <UserMacro Name="Numpy27IncludeDir" Value="$(Python27Dir)\$(NumpyRelativeIncludeDir)" />
+    <UserMacro Name="Python27IncludeDirs" Value="$(Python27IncludeDir);$(Numpy27IncludeDir)" />
+    <UserMacro Name="Python27LibDir" Value="$(Python27Dir)\libs" />
+
+    <UserMacro Name="Python31Dir" Value="$(PythonDir)\31" />
+    <UserMacro Name="Py31" Value="$(Python31Dir)\python" />
+    <UserMacro Name="Python31IncludeDir" Value="$(Python31Dir)\include" />
+    <UserMacro Name="Numpy31IncludeDir" Value="$(Python31Dir)\$(NumpyRelativeIncludeDir)" />
+    <UserMacro Name="Python31IncludeDirs" Value="$(Python31IncludeDir);$(Numpy31IncludeDir)" />
+    <UserMacro Name="Python31LibDir" Value="$(Python31Dir)\libs" />
+
+    <UserMacro Name="Python32Dir" Value="$(PythonDir)\32" />
+    <UserMacro Name="Py32" Value="$(Python32Dir)\python" />
+    <UserMacro Name="Python32IncludeDir" Value="$(Python32Dir)\include" />
+    <UserMacro Name="Numpy32IncludeDir" Value="$(Python32Dir)\$(NumpyRelativeIncludeDir)" />
+    <UserMacro Name="Python32IncludeDirs" Value="$(Python32IncludeDir);$(Numpy32IncludeDir)" />
+    <UserMacro Name="Python32LibDir" Value="$(Python32Dir)\libs" />
+
+    <UserMacro Name="BasePreFlags" Value="WIN32" />
+    <UserMacro Name="PreTangoStaticFlags" Value="_WINSTATIC" />
+    <UserMacro Name="PreTangoSharedFlags" Value="LOG4TANGO_HAS_DLL;TANGO_HAS_DLL" />
+
+    <UserMacro Name="PreBoostSharedTangoSharedFlags" Value="$(BasePreFlags);$(PreTangoSharedFlags);BOOST_PYTHON_DYNAMIC_LIB" />
+    <UserMacro Name="PreBoostStaticTangoSharedFlags" Value="$(BasePreFlags);$(PreTangoSharedFlags);BOOST_PYTHON_STATIC_LIB" />
+    <UserMacro Name="PreBoostStaticTangoStaticFlags" Value="$(BasePreFlags);$(PreTangoStaticFlags);BOOST_PYTHON_STATIC_LIB" />
+
+    <UserMacro Name="PreCompHeaderSrc" Value="precompiled_header.hpp" />
+    <UserMacro Name="PreCompHeaderDst" Value="$(TempDir)\$(PyTangoBaseFile)_Boost-$(BoostVer).pch" />
+    <UserMacro Name="DatabaseFile" Value="$(TempDir)\$(PyTangoBaseFile)_Boost-$(BoostVer).pdb" />
+
+    <UserMacro Name="BaseDisableWarningFlags" Value="4005;4996;4250" />
+
+    <UserMacro Name="BaseLibs" Value="comctl32.lib ws2_32.lib mswsock.lib" />
+    <UserMacro Name="omniStaticLibs" Value="COS4.lib    omniORB4.lib    omniDynamic4.lib    omnithread.lib   " />
+    <UserMacro Name="omniSharedLibs" Value="COS4_rt.lib omniORB4_rt.lib omniDynamic4_rt.lib omnithread_rt.lib" />
+    <UserMacro Name="BaseTangoLibs" Value="zmq.lib log4tango.lib tango.lib $(BaseLibs)" />
+    <UserMacro Name="BasePyTangoStaticLibs" Value="$(omniStaticLibs) $(BaseTangoLibs)" />
+    <UserMacro Name="BasePyTangoSharedLibs" Value="$(omniSharedLibs) $(BaseTangoLibs)" />
+
+    <UserMacro Name="omniStaticLibs_Debug" Value="COS4d.lib    omniORB4d.lib    omniDynamic4d.lib    omnithreadd.lib   " />
+    <UserMacro Name="omniSharedLibs_Debug" Value="COS4_rtd.lib omniORB4_rtd.lib omniDynamic4_rtd.lib omnithread_rtd.lib" />
+    <UserMacro Name="BaseTangoLibs_Debug" Value="zmqd.lib log4tangod.lib tangod.lib $(BaseLibs)" />
+    <UserMacro Name="BasePyTangoStaticLibs_Debug" Value="$(omniStaticLibs_Debug) $(BaseTangoLibs_Debug)" />
+    <UserMacro Name="BasePyTangoSharedLibs_Debug" Value="$(omniSharedLibs_Debug) $(BaseTangoLibs_Debug)" />
+
+    <UserMacro Name="PyTango26StaticLibs" Value="$(BasePyTangoStaticLibs) python26.lib" />
+    <UserMacro Name="PyTango26SharedLibs" Value="$(BasePyTangoSharedLibs) python26.lib" />
+
+    <UserMacro Name="PyTango27StaticLibs" Value="$(BasePyTangoStaticLibs) python27.lib" />
+    <UserMacro Name="PyTango27SharedLibs" Value="$(BasePyTangoSharedLibs) python27.lib" />
+
+    <UserMacro Name="PyTango31StaticLibs" Value="$(BasePyTangoStaticLibs) python31.lib" />
+    <UserMacro Name="PyTango31SharedLibs" Value="$(BasePyTangoSharedLibs) python31.lib" />
+
+    <UserMacro Name="PyTango32StaticLibs" Value="$(BasePyTangoStaticLibs) python32.lib" />
+    <UserMacro Name="PyTango32SharedLibs" Value="$(BasePyTangoSharedLibs) python32.lib" />
+
+    <UserMacro Name="BaseBoostSharedRtSharedLibDir" Value="$(BoostLibDir)\shared\runtime_shared" />
+    <UserMacro Name="BaseBoostStaticRtSharedLibDir" Value="$(BoostLibDir)\static\runtime_shared" />
+    <UserMacro Name="BaseBoostStaticRtStaticLibDir" Value="$(BoostLibDir)\static\runtime_static" />
+
+    <UserMacro Name="Boost26SharedRtSharedLibDir" Value="$(BaseBoostSharedRtSharedLibDir)\26;$(Python26LibDir)" />
+    <UserMacro Name="Boost26StaticRtSharedLibDir" Value="$(BaseBoostStaticRtSharedLibDir)\26;$(Python26LibDir)" />
+    <UserMacro Name="Boost26StaticRtStaticLibDir" Value="$(BaseBoostStaticRtStaticLibDir)\26;$(Python26LibDir)" />
+
+    <UserMacro Name="Boost27SharedRtSharedLibDir" Value="$(BaseBoostSharedRtSharedLibDir)\27;$(Python27LibDir)" />
+    <UserMacro Name="Boost27StaticRtSharedLibDir" Value="$(BaseBoostStaticRtSharedLibDir)\27;$(Python27LibDir)" />
+    <UserMacro Name="Boost27StaticRtStaticLibDir" Value="$(BaseBoostStaticRtStaticLibDir)\27;$(Python27LibDir)" />
+
+    <UserMacro Name="Boost31SharedRtSharedLibDir" Value="$(BaseBoostSharedRtSharedLibDir)\31;$(Python31LibDir)" />
+    <UserMacro Name="Boost31StaticRtSharedLibDir" Value="$(BaseBoostStaticRtSharedLibDir)\31;$(Python31LibDir)" />
+    <UserMacro Name="Boost31StaticRtStaticLibDir" Value="$(BaseBoostStaticRtStaticLibDir)\31;$(Python31LibDir)" />
+
+    <UserMacro Name="Boost32SharedRtSharedLibDir" Value="$(BaseBoostSharedRtSharedLibDir)\32;$(Python32LibDir)" />
+    <UserMacro Name="Boost32StaticRtSharedLibDir" Value="$(BaseBoostStaticRtSharedLibDir)\32;$(Python32LibDir)" />
+    <UserMacro Name="Boost32StaticRtStaticLibDir" Value="$(BaseBoostStaticRtStaticLibDir)\32;$(Python32LibDir)" />
+
+    <UserMacro Name="Py26BoostSharedTangoSharedLibDir" Value="$(Boost26SharedRtSharedLibDir);$(TangoLibDir)\vc$(VCMajorVer)_dll" />
+    <UserMacro Name="Py26BoostStaticTangoSharedLibDir" Value="$(Boost26StaticRtSharedLibDir);$(TangoLibDir)\vc$(VCMajorVer)_dll" />
+    <UserMacro Name="Py26BoostStaticTangoStaticLibDir" Value="$(Boost26StaticRtStaticLibDir);$(TangoLibDir)\vc$(VCMajorVer)" />
+
+    <UserMacro Name="Py27BoostSharedTangoSharedLibDir" Value="$(Boost27SharedRtSharedLibDir);$(TangoLibDir)\vc$(VCMajorVer)_dll" />
+    <UserMacro Name="Py27BoostStaticTangoSharedLibDir" Value="$(Boost27StaticRtSharedLibDir);$(TangoLibDir)\vc$(VCMajorVer)_dll" />
+    <UserMacro Name="Py27BoostStaticTangoStaticLibDir" Value="$(Boost27StaticRtStaticLibDir);$(TangoLibDir)\vc$(VCMajorVer)" />
+
+    <UserMacro Name="Py31BoostSharedTangoSharedLibDir" Value="$(Boost31SharedRtSharedLibDir);$(TangoLibDir)\vc$(VCMajorVer)_dll" />
+    <UserMacro Name="Py31BoostStaticTangoSharedLibDir" Value="$(Boost31StaticRtSharedLibDir);$(TangoLibDir)\vc$(VCMajorVer)_dll" />
+    <UserMacro Name="Py31BoostStaticTangoStaticLibDir" Value="$(Boost31StaticRtStaticLibDir);$(TangoLibDir)\vc$(VCMajorVer)" />
+
+    <UserMacro Name="Py32BoostSharedTangoSharedLibDir" Value="$(Boost32SharedRtSharedLibDir);$(TangoLibDir)\vc$(VCMajorVer)_dll" />
+    <UserMacro Name="Py32BoostStaticTangoSharedLibDir" Value="$(Boost32StaticRtSharedLibDir);$(TangoLibDir)\vc$(VCMajorVer)_dll" />
+    <UserMacro Name="Py32BoostStaticTangoStaticLibDir" Value="$(Boost32StaticRtStaticLibDir);$(TangoLibDir)\vc$(VCMajorVer)" />
+    
+    <!-- debug variables -->
+    
+    <UserMacro Name="PyTango26StaticLibs_Debug" Value="$(BasePyTangoStaticLibs_Debug) python26.lib" />
+    <UserMacro Name="PyTango26SharedLibs_Debug" Value="$(BasePyTangoSharedLibs_Debug) python26.lib" />
+
+    <UserMacro Name="PyTango27StaticLibs_Debug" Value="$(BasePyTangoStaticLibs_Debug) python27.lib" />
+    <UserMacro Name="PyTango27SharedLibs_Debug" Value="$(BasePyTangoSharedLibs_Debug) python27.lib" />
+
+    <UserMacro Name="PyTango31StaticLibs_Debug" Value="$(BasePyTangoStaticLibs_Debug) python31.lib" />
+    <UserMacro Name="PyTango31SharedLibs_Debug" Value="$(BasePyTangoSharedLibs_Debug) python31.lib" />
+
+    <UserMacro Name="PyTango32StaticLibs_Debug" Value="$(BasePyTangoStaticLibs_Debug) python32.lib" />
+    <UserMacro Name="PyTango32SharedLibs_Debug" Value="$(BasePyTangoSharedLibs_Debug) python32.lib" />
+
+    <UserMacro Name="BaseBoostSharedRtSharedLibDir_Debug" Value="$(BoostLibDir_Debug)\shared\runtime_shared" />
+    <UserMacro Name="BaseBoostStaticRtSharedLibDir_Debug" Value="$(BoostLibDir_Debug)\static\runtime_shared" />
+    <UserMacro Name="BaseBoostStaticRtStaticLibDir_Debug" Value="$(BoostLibDir_Debug)\static\runtime_static" />
+
+    <UserMacro Name="Boost26SharedRtSharedLibDir_Debug" Value="$(BaseBoostSharedRtSharedLibDir_Debug)\26;$(Python26LibDir)" />
+    <UserMacro Name="Boost26StaticRtSharedLibDir_Debug" Value="$(BaseBoostStaticRtSharedLibDir_Debug)\26;$(Python26LibDir)" />
+    <UserMacro Name="Boost26StaticRtStaticLibDir_Debug" Value="$(BaseBoostStaticRtStaticLibDir_Debug)\26;$(Python26LibDir)" />
+
+    <UserMacro Name="Boost27SharedRtSharedLibDir_Debug" Value="$(BaseBoostSharedRtSharedLibDir_Debug)\27;$(Python27LibDir)" />
+    <UserMacro Name="Boost27StaticRtSharedLibDir_Debug" Value="$(BaseBoostStaticRtSharedLibDir_Debug)\27;$(Python27LibDir)" />
+    <UserMacro Name="Boost27StaticRtStaticLibDir_Debug" Value="$(BaseBoostStaticRtStaticLibDir_Debug)\27;$(Python27LibDir)" />
+
+    <UserMacro Name="Boost31SharedRtSharedLibDir_Debug" Value="$(BaseBoostSharedRtSharedLibDir_Debug)\31;$(Python31LibDir)" />
+    <UserMacro Name="Boost31StaticRtSharedLibDir_Debug" Value="$(BaseBoostStaticRtSharedLibDir_Debug)\31;$(Python31LibDir)" />
+    <UserMacro Name="Boost31StaticRtStaticLibDir_Debug" Value="$(BaseBoostStaticRtStaticLibDir_Debug)\31;$(Python31LibDir)" />
+
+    <UserMacro Name="Boost32SharedRtSharedLibDir_Debug" Value="$(BaseBoostSharedRtSharedLibDir_Debug)\32;$(Python32LibDir)" />
+    <UserMacro Name="Boost32StaticRtSharedLibDir_Debug" Value="$(BaseBoostStaticRtSharedLibDir_Debug)\32;$(Python32LibDir)" />
+    <UserMacro Name="Boost32StaticRtStaticLibDir_Debug" Value="$(BaseBoostStaticRtStaticLibDir_Debug)\32;$(Python32LibDir)" />
+
+    <UserMacro Name="Py26BoostSharedTangoSharedLibDir_Debug" Value="$(Boost26SharedRtSharedLibDir_Debug);$(TangoLibDir_Debug)\vc$(VCMajorVer)_dll" />
+    <UserMacro Name="Py26BoostStaticTangoSharedLibDir_Debug" Value="$(Boost26StaticRtSharedLibDir_Debug);$(TangoLibDir_Debug)\vc$(VCMajorVer)_dll" />
+    <UserMacro Name="Py26BoostStaticTangoStaticLibDir_Debug" Value="$(Boost26StaticRtStaticLibDir_Debug);$(TangoLibDir_Debug)\vc$(VCMajorVer)" />
+
+    <UserMacro Name="Py27BoostSharedTangoSharedLibDir_Debug" Value="$(Boost27SharedRtSharedLibDir_Debug);$(TangoLibDir_Debug)\vc$(VCMajorVer)_dll" />
+    <UserMacro Name="Py27BoostStaticTangoSharedLibDir_Debug" Value="$(Boost27StaticRtSharedLibDir_Debug);$(TangoLibDir_Debug)\vc$(VCMajorVer)_dll" />
+    <UserMacro Name="Py27BoostStaticTangoStaticLibDir_Debug" Value="$(Boost27StaticRtStaticLibDir_Debug);$(TangoLibDir_Debug)\vc$(VCMajorVer)" />
+
+    <UserMacro Name="Py31BoostSharedTangoSharedLibDir_Debug" Value="$(Boost31SharedRtSharedLibDir_Debug);$(TangoLibDir_Debug)\vc$(VCMajorVer)_dll" />
+    <UserMacro Name="Py31BoostStaticTangoSharedLibDir_Debug" Value="$(Boost31StaticRtSharedLibDir_Debug);$(TangoLibDir_Debug)\vc$(VCMajorVer)_dll" />
+    <UserMacro Name="Py31BoostStaticTangoStaticLibDir_Debug" Value="$(Boost31StaticRtStaticLibDir_Debug);$(TangoLibDir_Debug)\vc$(VCMajorVer)" />
+
+    <UserMacro Name="Py32BoostSharedTangoSharedLibDir_Debug" Value="$(Boost32SharedRtSharedLibDir_Debug);$(TangoLibDir_Debug)\vc$(VCMajorVer)_dll" />
+    <UserMacro Name="Py32BoostStaticTangoSharedLibDir_Debug" Value="$(Boost32StaticRtSharedLibDir_Debug);$(TangoLibDir_Debug)\vc$(VCMajorVer)_dll" />
+    <UserMacro Name="Py32BoostStaticTangoStaticLibDir_Debug" Value="$(Boost32StaticRtStaticLibDir_Debug);$(TangoLibDir_Debug)\vc$(VCMajorVer)" />
+
+    
+    <UserMacro Name="WinSetupArgs" Value="$(BaseDir)\winsetup.py $(BuildDir) $(DistDir) $(BDistDir) $(ConfigurationName) $(PlatformName)" />
+
+</VisualStudioPropertySheet>
diff --git a/winsetup.py b/winsetup.py
new file mode 100644
index 0000000..745ffb4
--- /dev/null
+++ b/winsetup.py
@@ -0,0 +1,78 @@
+#!/usr/bin/env python
+# ------------------------------------------------------------------------------
+# This file is part of PyTango (http://pytango.rtfd.io)
+#
+# 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.
+# ------------------------------------------------------------------------------
+
+# ------------------------------------------------------------------------------
+# 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
+
+import sys
+import os
+import os.path as osp
+
+def main():
+    executable = sys.executable
+
+    curr_dir = os.getcwd()
+
+    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]))
+
+    if len(sys.argv) < 6:
+        print("Need to supply build directory, distribution directory, temporary binary install directory, configuration name and platform name")
+        return 1
+
+    build_dir, dist_dir, bdist_dir = map(osp.abspath, sys.argv[1:4])
+    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)
+        cmd_line += 'build_py --force --no-compile ' \
+                    '--build-lib=%s ' \
+                    % (build_dir,)
+        cmd_line += 'build_scripts --force '
+        cmd_line += 'install_lib --skip-build --no-compile ' \
+                    '--build-dir=%s ' \
+                    % (build_dir, )
+        cmd_line += 'bdist_msi --skip-build --target-version=%s ' \
+                    '--bdist-dir=%s ' \
+                    '--dist-dir=%s ' \
+                    '--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 ' % (ver, bdist_dir, dist_dir, bitmap, plat_name)
+        os.system(cmd_line)
+    except:
+        print("Failed:")
+        import traceback
+        traceback.print_exc()
+        return 2
+    finally:
+        os.chdir(curr_dir)
+
+    return 0
+
+if __name__ == "__main__":
+    ret = main()
+    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